aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/libgcc/config
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/libgcc/config')
-rw-r--r--gcc-4.9/libgcc/config/aarch64/crti.S68
-rw-r--r--gcc-4.9/libgcc/config/aarch64/crtn.S61
-rw-r--r--gcc-4.9/libgcc/config/aarch64/linux-unwind.h156
-rw-r--r--gcc-4.9/libgcc/config/aarch64/sfp-exceptions.c76
-rw-r--r--gcc-4.9/libgcc/config/aarch64/sfp-machine.h125
-rw-r--r--gcc-4.9/libgcc/config/aarch64/sync-cache.c72
-rw-r--r--gcc-4.9/libgcc/config/aarch64/t-aarch6421
-rw-r--r--gcc-4.9/libgcc/config/aarch64/t-softfp9
-rw-r--r--gcc-4.9/libgcc/config/alpha/crtfastmath.c36
-rw-r--r--gcc-4.9/libgcc/config/alpha/libgcc-alpha-ldbl.ver50
-rw-r--r--gcc-4.9/libgcc/config/alpha/linux-unwind.h101
-rw-r--r--gcc-4.9/libgcc/config/alpha/qrnnd.S175
-rw-r--r--gcc-4.9/libgcc/config/alpha/t-alpha2
-rw-r--r--gcc-4.9/libgcc/config/alpha/t-ieee2
-rw-r--r--gcc-4.9/libgcc/config/alpha/t-linux1
-rw-r--r--gcc-4.9/libgcc/config/alpha/t-vms11
-rw-r--r--gcc-4.9/libgcc/config/alpha/vms-dwarf2.S77
-rw-r--r--gcc-4.9/libgcc/config/alpha/vms-dwarf2eh.S30
-rw-r--r--gcc-4.9/libgcc/config/alpha/vms-gcc_shell_handler.c123
-rw-r--r--gcc-4.9/libgcc/config/alpha/vms-unwind.h292
-rw-r--r--gcc-4.9/libgcc/config/arc/asm.h29
-rw-r--r--gcc-4.9/libgcc/config/arc/crtg.S51
-rw-r--r--gcc-4.9/libgcc/config/arc/crtgend.S33
-rw-r--r--gcc-4.9/libgcc/config/arc/crti.S41
-rw-r--r--gcc-4.9/libgcc/config/arc/crtn.S38
-rw-r--r--gcc-4.9/libgcc/config/arc/divtab-arc700.c70
-rw-r--r--gcc-4.9/libgcc/config/arc/dp-hack.h101
-rw-r--r--gcc-4.9/libgcc/config/arc/fp-hack.h85
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/atomic.h26
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/auxreg.h35
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/dcache_linesz.S55
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/gmon.c450
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/machine-gmon.h65
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/mcount.c206
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/prof-freq-stub.S40
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/prof-freq.c60
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/profil.S153
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/sys/gmon.h217
-rw-r--r--gcc-4.9/libgcc/config/arc/gmon/sys/gmon_out.h55
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/adddf3.S524
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/addsf3.S344
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc-ieee-754.h56
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divdf3.S421
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divsf3.S274
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/muldf3.S231
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/mulsf3.S176
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divdf3.S410
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divsf3.S274
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/muldf3.S234
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/mulsf3.S180
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600/divsf3.S227
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/arc600/mulsf3.S179
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/divdf3.S416
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/divsf3-stdmul.S281
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/divsf3.S221
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-df.c161
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-sf.c127
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/eqdf2.S76
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/eqsf2.S69
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/extendsfdf2.S122
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/fixdfsi.S85
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/fixsfsi.S71
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/fixunsdfsi.S80
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/floatsidf.S77
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/floatsisf.S99
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/floatunsidf.S75
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/gedf2.S86
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/gesf2.S75
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/gtdf2.S86
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/gtsf2.S75
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/muldf3.S235
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/mulsf3.S180
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/orddf2.S63
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/ordsf2.S63
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/truncdfsf2.S134
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/uneqdf2.S73
-rw-r--r--gcc-4.9/libgcc/config/arc/ieee-754/uneqsf2.S69
-rw-r--r--gcc-4.9/libgcc/config/arc/initfini.c157
-rw-r--r--gcc-4.9/libgcc/config/arc/lib1funcs.S1418
-rw-r--r--gcc-4.9/libgcc/config/arc/libgcc-excl.ver43
-rw-r--r--gcc-4.9/libgcc/config/arc/t-arc100
-rw-r--r--gcc-4.9/libgcc/config/arc/t-arc-newlib22
-rw-r--r--gcc-4.9/libgcc/config/arc/t-arc700-uClibc40
-rw-r--r--gcc-4.9/libgcc/config/arm/bpabi-lib.h81
-rw-r--r--gcc-4.9/libgcc/config/arm/bpabi-v6m.S318
-rw-r--r--gcc-4.9/libgcc/config/arm/bpabi.S168
-rw-r--r--gcc-4.9/libgcc/config/arm/bpabi.c56
-rw-r--r--gcc-4.9/libgcc/config/arm/crti.S86
-rw-r--r--gcc-4.9/libgcc/config/arm/crtn.S82
-rw-r--r--gcc-4.9/libgcc/config/arm/fp16.c143
-rw-r--r--gcc-4.9/libgcc/config/arm/ieee754-df.S1406
-rw-r--r--gcc-4.9/libgcc/config/arm/ieee754-sf.S1033
-rw-r--r--gcc-4.9/libgcc/config/arm/lib1funcs.S1958
-rw-r--r--gcc-4.9/libgcc/config/arm/libgcc-bpabi.ver108
-rw-r--r--gcc-4.9/libgcc/config/arm/libunwind.S362
-rw-r--r--gcc-4.9/libgcc/config/arm/linux-atomic-64bit.c166
-rw-r--r--gcc-4.9/libgcc/config/arm/linux-atomic.c279
-rw-r--r--gcc-4.9/libgcc/config/arm/pr-support.c385
-rw-r--r--gcc-4.9/libgcc/config/arm/sfp-machine.h110
-rw-r--r--gcc-4.9/libgcc/config/arm/symbian-lib.h28
-rw-r--r--gcc-4.9/libgcc/config/arm/t-arm3
-rw-r--r--gcc-4.9/libgcc/config/arm/t-bpabi20
-rw-r--r--gcc-4.9/libgcc/config/arm/t-elf18
-rw-r--r--gcc-4.9/libgcc/config/arm/t-linux7
-rw-r--r--gcc-4.9/libgcc/config/arm/t-linux-eabi5
-rw-r--r--gcc-4.9/libgcc/config/arm/t-netbsd7
-rw-r--r--gcc-4.9/libgcc/config/arm/t-softfp2
-rw-r--r--gcc-4.9/libgcc/config/arm/t-strongarm-elf6
-rw-r--r--gcc-4.9/libgcc/config/arm/t-symbian19
-rw-r--r--gcc-4.9/libgcc/config/arm/t-wince-pe1
-rw-r--r--gcc-4.9/libgcc/config/arm/unaligned-funcs.c57
-rw-r--r--gcc-4.9/libgcc/config/arm/unwind-arm.c511
-rw-r--r--gcc-4.9/libgcc/config/arm/unwind-arm.h85
-rw-r--r--gcc-4.9/libgcc/config/avr/avr-lib.h105
-rw-r--r--gcc-4.9/libgcc/config/avr/lib1funcs-fixed.S1915
-rw-r--r--gcc-4.9/libgcc/config/avr/lib1funcs.S3226
-rw-r--r--gcc-4.9/libgcc/config/avr/lib2-object.mk23
-rw-r--r--gcc-4.9/libgcc/config/avr/lib2funcs.c226
-rw-r--r--gcc-4.9/libgcc/config/avr/t-avr277
-rw-r--r--gcc-4.9/libgcc/config/avr/t-avrlibc66
-rw-r--r--gcc-4.9/libgcc/config/avr/t-rtems2
-rw-r--r--gcc-4.9/libgcc/config/bfin/crti.S59
-rw-r--r--gcc-4.9/libgcc/config/bfin/crtlibid.S29
-rw-r--r--gcc-4.9/libgcc/config/bfin/crtn.S50
-rw-r--r--gcc-4.9/libgcc/config/bfin/lib1funcs.S211
-rw-r--r--gcc-4.9/libgcc/config/bfin/libgcc-glibc.ver1913
-rw-r--r--gcc-4.9/libgcc/config/bfin/linux-unwind.h164
-rw-r--r--gcc-4.9/libgcc/config/bfin/t-bfin3
-rw-r--r--gcc-4.9/libgcc/config/bfin/t-crtlibid3
-rw-r--r--gcc-4.9/libgcc/config/bfin/t-crtstuff1
-rw-r--r--gcc-4.9/libgcc/config/bfin/t-linux1
-rw-r--r--gcc-4.9/libgcc/config/c6x/c6x-abi.h108
-rw-r--r--gcc-4.9/libgcc/config/c6x/crti.S39
-rw-r--r--gcc-4.9/libgcc/config/c6x/crtn.S41
-rw-r--r--gcc-4.9/libgcc/config/c6x/eqd.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/eqf.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/ged.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/gef.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/gtd.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/gtf.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/led.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/lef.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/lib1funcs.S438
-rw-r--r--gcc-4.9/libgcc/config/c6x/libgcc-eabi.ver103
-rw-r--r--gcc-4.9/libgcc/config/c6x/libunwind.S133
-rw-r--r--gcc-4.9/libgcc/config/c6x/ltd.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/ltf.c47
-rw-r--r--gcc-4.9/libgcc/config/c6x/pr-support.c535
-rw-r--r--gcc-4.9/libgcc/config/c6x/sfp-machine.h124
-rw-r--r--gcc-4.9/libgcc/config/c6x/t-elf40
-rw-r--r--gcc-4.9/libgcc/config/c6x/t-uclinux3
-rw-r--r--gcc-4.9/libgcc/config/c6x/unwind-c6x.c224
-rw-r--r--gcc-4.9/libgcc/config/c6x/unwind-c6x.h70
-rw-r--r--gcc-4.9/libgcc/config/cr16/crti.S54
-rw-r--r--gcc-4.9/libgcc/config/cr16/crtlibid.S28
-rw-r--r--gcc-4.9/libgcc/config/cr16/crtn.S44
-rw-r--r--gcc-4.9/libgcc/config/cr16/divmodhi3.c115
-rw-r--r--gcc-4.9/libgcc/config/cr16/lib1funcs.S563
-rw-r--r--gcc-4.9/libgcc/config/cr16/t-cr1629
-rw-r--r--gcc-4.9/libgcc/config/cr16/t-crtlibid22
-rw-r--r--gcc-4.9/libgcc/config/cr16/unwind-cr16.c1682
-rw-r--r--gcc-4.9/libgcc/config/cr16/unwind-dw2.h86
-rw-r--r--gcc-4.9/libgcc/config/cris/arit.c313
-rw-r--r--gcc-4.9/libgcc/config/cris/libgcc-glibc.ver7
-rw-r--r--gcc-4.9/libgcc/config/cris/mulsi3.S269
-rw-r--r--gcc-4.9/libgcc/config/cris/sfp-machine.h81
-rw-r--r--gcc-4.9/libgcc/config/cris/t-cris10
-rw-r--r--gcc-4.9/libgcc/config/cris/t-elfmulti3
-rw-r--r--gcc-4.9/libgcc/config/cris/t-linux2
-rw-r--r--gcc-4.9/libgcc/config/cris/umulsidi3.S289
-rw-r--r--gcc-4.9/libgcc/config/darwin-64.c72
-rw-r--r--gcc-4.9/libgcc/config/darwin-crt-tm.c105
-rw-r--r--gcc-4.9/libgcc/config/darwin-crt3.c528
-rw-r--r--gcc-4.9/libgcc/config/epiphany/crti.S34
-rw-r--r--gcc-4.9/libgcc/config/epiphany/crtint.S27
-rw-r--r--gcc-4.9/libgcc/config/epiphany/crtm1reg-r43.S26
-rw-r--r--gcc-4.9/libgcc/config/epiphany/crtm1reg-r63.S26
-rw-r--r--gcc-4.9/libgcc/config/epiphany/crtn.S32
-rw-r--r--gcc-4.9/libgcc/config/epiphany/crtrunc.S26
-rw-r--r--gcc-4.9/libgcc/config/epiphany/divsi3-float.S77
-rw-r--r--gcc-4.9/libgcc/config/epiphany/divsi3.S92
-rw-r--r--gcc-4.9/libgcc/config/epiphany/divsi3.c120
-rw-r--r--gcc-4.9/libgcc/config/epiphany/epiphany-asm.h52
-rw-r--r--gcc-4.9/libgcc/config/epiphany/ieee-754/eqsf2.S50
-rw-r--r--gcc-4.9/libgcc/config/epiphany/ieee-754/fast_div.S124
-rw-r--r--gcc-4.9/libgcc/config/epiphany/ieee-754/gtesf2.S66
-rw-r--r--gcc-4.9/libgcc/config/epiphany/ieee-754/ordsf2.S50
-rw-r--r--gcc-4.9/libgcc/config/epiphany/ieee-754/uneqsf2.S45
-rw-r--r--gcc-4.9/libgcc/config/epiphany/modsi3-float.S65
-rw-r--r--gcc-4.9/libgcc/config/epiphany/modsi3.S77
-rw-r--r--gcc-4.9/libgcc/config/epiphany/modsi3.c106
-rw-r--r--gcc-4.9/libgcc/config/epiphany/mulsi3.c39
-rw-r--r--gcc-4.9/libgcc/config/epiphany/t-custom-eqsf1
-rw-r--r--gcc-4.9/libgcc/config/epiphany/t-epiphany34
-rw-r--r--gcc-4.9/libgcc/config/epiphany/udivsi3-float.S83
-rw-r--r--gcc-4.9/libgcc/config/epiphany/udivsi3-float.c125
-rw-r--r--gcc-4.9/libgcc/config/epiphany/udivsi3.S85
-rw-r--r--gcc-4.9/libgcc/config/epiphany/udivsi3.c114
-rw-r--r--gcc-4.9/libgcc/config/epiphany/umodsi3-float.S63
-rw-r--r--gcc-4.9/libgcc/config/epiphany/umodsi3.S70
-rw-r--r--gcc-4.9/libgcc/config/epiphany/umodsi3.c101
-rw-r--r--gcc-4.9/libgcc/config/fr30/crti.S61
-rw-r--r--gcc-4.9/libgcc/config/fr30/crtn.S44
-rw-r--r--gcc-4.9/libgcc/config/fr30/lib1funcs.S115
-rw-r--r--gcc-4.9/libgcc/config/fr30/t-fr302
-rw-r--r--gcc-4.9/libgcc/config/frv/cmovd.c51
-rw-r--r--gcc-4.9/libgcc/config/frv/cmovh.c47
-rw-r--r--gcc-4.9/libgcc/config/frv/cmovw.c51
-rw-r--r--gcc-4.9/libgcc/config/frv/frv-abi.h182
-rw-r--r--gcc-4.9/libgcc/config/frv/frvbegin.c157
-rw-r--r--gcc-4.9/libgcc/config/frv/frvend.c70
-rw-r--r--gcc-4.9/libgcc/config/frv/lib1funcs.S269
-rw-r--r--gcc-4.9/libgcc/config/frv/libgcc-glibc.ver73
-rw-r--r--gcc-4.9/libgcc/config/frv/modi.c4
-rw-r--r--gcc-4.9/libgcc/config/frv/t-frv22
-rw-r--r--gcc-4.9/libgcc/config/frv/t-linux3
-rw-r--r--gcc-4.9/libgcc/config/frv/uitod.c4
-rw-r--r--gcc-4.9/libgcc/config/frv/uitof.c4
-rw-r--r--gcc-4.9/libgcc/config/frv/ulltod.c4
-rw-r--r--gcc-4.9/libgcc/config/frv/ulltof.c4
-rw-r--r--gcc-4.9/libgcc/config/frv/umodi.c4
-rw-r--r--gcc-4.9/libgcc/config/gmon-sol2.c444
-rw-r--r--gcc-4.9/libgcc/config/gthr-lynx.h61
-rw-r--r--gcc-4.9/libgcc/config/gthr-rtems.h164
-rw-r--r--gcc-4.9/libgcc/config/gthr-vxworks.h175
-rw-r--r--gcc-4.9/libgcc/config/h8300/clzhi2.c35
-rw-r--r--gcc-4.9/libgcc/config/h8300/crti.S63
-rw-r--r--gcc-4.9/libgcc/config/h8300/crtn.S53
-rw-r--r--gcc-4.9/libgcc/config/h8300/ctzhi2.c35
-rw-r--r--gcc-4.9/libgcc/config/h8300/fixunssfsi.c40
-rw-r--r--gcc-4.9/libgcc/config/h8300/h8300-lib.h7
-rw-r--r--gcc-4.9/libgcc/config/h8300/lib1funcs.S837
-rw-r--r--gcc-4.9/libgcc/config/h8300/parityhi2.c36
-rw-r--r--gcc-4.9/libgcc/config/h8300/popcounthi2.c36
-rw-r--r--gcc-4.9/libgcc/config/h8300/t-h830013
-rw-r--r--gcc-4.9/libgcc/config/hardfp.c62
-rw-r--r--gcc-4.9/libgcc/config/i386/32/sfp-machine.h113
-rw-r--r--gcc-4.9/libgcc/config/i386/32/t-softfp5
-rw-r--r--gcc-4.9/libgcc/config/i386/32/tf-signs.c62
-rw-r--r--gcc-4.9/libgcc/config/i386/64/_divtc3.c16
-rw-r--r--gcc-4.9/libgcc/config/i386/64/_multc3.c16
-rw-r--r--gcc-4.9/libgcc/config/i386/64/_powitf2.c16
-rw-r--r--gcc-4.9/libgcc/config/i386/64/eqtf2.c15
-rw-r--r--gcc-4.9/libgcc/config/i386/64/getf2.c15
-rw-r--r--gcc-4.9/libgcc/config/i386/64/letf2.c15
-rw-r--r--gcc-4.9/libgcc/config/i386/64/sfp-machine.h38
-rw-r--r--gcc-4.9/libgcc/config/i386/64/t-softfp-compat15
-rw-r--r--gcc-4.9/libgcc/config/i386/cpuinfo.c405
-rw-r--r--gcc-4.9/libgcc/config/i386/crtfastmath.c138
-rw-r--r--gcc-4.9/libgcc/config/i386/crti.S40
-rw-r--r--gcc-4.9/libgcc/config/i386/crtn.S35
-rw-r--r--gcc-4.9/libgcc/config/i386/crtprec.c49
-rw-r--r--gcc-4.9/libgcc/config/i386/cygming-crtbegin.c168
-rw-r--r--gcc-4.9/libgcc/config/i386/cygming-crtend.c89
-rw-r--r--gcc-4.9/libgcc/config/i386/cygwin.S187
-rw-r--r--gcc-4.9/libgcc/config/i386/darwin-lib.h32
-rw-r--r--gcc-4.9/libgcc/config/i386/enable-execute-stack-mingw32.c38
-rw-r--r--gcc-4.9/libgcc/config/i386/gthr-win32.c267
-rw-r--r--gcc-4.9/libgcc/config/i386/gthr-win32.h786
-rw-r--r--gcc-4.9/libgcc/config/i386/libgcc-bsd.ver113
-rw-r--r--gcc-4.9/libgcc/config/i386/libgcc-cygming.ver22
-rw-r--r--gcc-4.9/libgcc/config/i386/libgcc-darwin.10.4.ver98
-rw-r--r--gcc-4.9/libgcc/config/i386/libgcc-darwin.10.5.ver102
-rw-r--r--gcc-4.9/libgcc/config/i386/libgcc-glibc.ver196
-rw-r--r--gcc-4.9/libgcc/config/i386/libgcc-sol2.ver113
-rw-r--r--gcc-4.9/libgcc/config/i386/linux-unwind.h198
-rw-r--r--gcc-4.9/libgcc/config/i386/morestack.S860
-rw-r--r--gcc-4.9/libgcc/config/i386/sfp-exceptions.c108
-rw-r--r--gcc-4.9/libgcc/config/i386/sfp-machine.h85
-rw-r--r--gcc-4.9/libgcc/config/i386/sol2-c1.S173
-rw-r--r--gcc-4.9/libgcc/config/i386/sol2-unwind.h262
-rw-r--r--gcc-4.9/libgcc/config/i386/t-chkstk2
-rw-r--r--gcc-4.9/libgcc/config/i386/t-cpuinfo1
-rw-r--r--gcc-4.9/libgcc/config/i386/t-crtfm4
-rw-r--r--gcc-4.9/libgcc/config/i386/t-crtpc8
-rw-r--r--gcc-4.9/libgcc/config/i386/t-crtstuff7
-rw-r--r--gcc-4.9/libgcc/config/i386/t-cygming14
-rw-r--r--gcc-4.9/libgcc/config/i386/t-cygwin19
-rw-r--r--gcc-4.9/libgcc/config/i386/t-darwin3
-rw-r--r--gcc-4.9/libgcc/config/i386/t-dlldir2
-rw-r--r--gcc-4.9/libgcc/config/i386/t-dlldir-x3
-rw-r--r--gcc-4.9/libgcc/config/i386/t-dw2-eh3
-rw-r--r--gcc-4.9/libgcc/config/i386/t-freebsd2
-rw-r--r--gcc-4.9/libgcc/config/i386/t-gthr-win322
-rw-r--r--gcc-4.9/libgcc/config/i386/t-interix3
-rw-r--r--gcc-4.9/libgcc/config/i386/t-linux6
-rw-r--r--gcc-4.9/libgcc/config/i386/t-mingw-pthread2
-rw-r--r--gcc-4.9/libgcc/config/i386/t-mingw322
-rw-r--r--gcc-4.9/libgcc/config/i386/t-nto3
-rw-r--r--gcc-4.9/libgcc/config/i386/t-seh-eh6
-rw-r--r--gcc-4.9/libgcc/config/i386/t-sjlj-eh3
-rw-r--r--gcc-4.9/libgcc/config/i386/t-slibgcc-cygming58
-rw-r--r--gcc-4.9/libgcc/config/i386/t-softfp1
-rw-r--r--gcc-4.9/libgcc/config/i386/t-sol213
-rw-r--r--gcc-4.9/libgcc/config/i386/t-stack-i3862
-rw-r--r--gcc-4.9/libgcc/config/i386/value-unwind.h25
-rw-r--r--gcc-4.9/libgcc/config/i386/w32-unwind.h207
-rw-r--r--gcc-4.9/libgcc/config/ia64/__divxf3.S11
-rw-r--r--gcc-4.9/libgcc/config/ia64/_fixtfdi.S11
-rw-r--r--gcc-4.9/libgcc/config/ia64/_fixunstfdi.S11
-rw-r--r--gcc-4.9/libgcc/config/ia64/_floatditf.S11
-rw-r--r--gcc-4.9/libgcc/config/ia64/crtbegin.S254
-rw-r--r--gcc-4.9/libgcc/config/ia64/crtend.S121
-rw-r--r--gcc-4.9/libgcc/config/ia64/crtfastmath.c34
-rw-r--r--gcc-4.9/libgcc/config/ia64/crti.S53
-rw-r--r--gcc-4.9/libgcc/config/ia64/crtn.S43
-rw-r--r--gcc-4.9/libgcc/config/ia64/fde-glibc.c161
-rw-r--r--gcc-4.9/libgcc/config/ia64/fde-vms.c159
-rw-r--r--gcc-4.9/libgcc/config/ia64/lib1funcs.S795
-rw-r--r--gcc-4.9/libgcc/config/ia64/libgcc-glibc.ver97
-rw-r--r--gcc-4.9/libgcc/config/ia64/libgcc-ia64.ver30
-rw-r--r--gcc-4.9/libgcc/config/ia64/linux-unwind.h199
-rw-r--r--gcc-4.9/libgcc/config/ia64/quadlib.c78
-rw-r--r--gcc-4.9/libgcc/config/ia64/sfp-exceptions.c54
-rw-r--r--gcc-4.9/libgcc/config/ia64/sfp-machine.h95
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-eh-ia642
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-hpux9
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-ia6418
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-ia64-elf20
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-linux5
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-linux-libunwind3
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-slibgcc-hpux6
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-softfp4
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-softfp-compat7
-rw-r--r--gcc-4.9/libgcc/config/ia64/t-vms9
-rw-r--r--gcc-4.9/libgcc/config/ia64/tf-signs.c60
-rw-r--r--gcc-4.9/libgcc/config/ia64/unwind-ia64.c2468
-rw-r--r--gcc-4.9/libgcc/config/ia64/unwind-ia64.h57
-rw-r--r--gcc-4.9/libgcc/config/ia64/vms-crtinit.S24
-rw-r--r--gcc-4.9/libgcc/config/ia64/vms-unwind.h308
-rw-r--r--gcc-4.9/libgcc/config/iq2000/lib2funcs.c40
-rw-r--r--gcc-4.9/libgcc/config/iq2000/t-iq20005
-rw-r--r--gcc-4.9/libgcc/config/libbid/ChangeLog376
-rw-r--r--gcc-4.9/libgcc/config/libbid/_addsub_dd.c46
-rw-r--r--gcc-4.9/libgcc/config/libbid/_addsub_sd.c54
-rw-r--r--gcc-4.9/libgcc/config/libbid/_addsub_td.c46
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_df.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_di.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_sd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_sf.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_si.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_td.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_tf.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_udi.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_usi.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_dd_to_xf.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_df_to_dd.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_df_to_sd.c34
-rw-r--r--gcc-4.9/libgcc/config/libbid/_df_to_td.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_di_to_dd.c35
-rw-r--r--gcc-4.9/libgcc/config/libbid/_di_to_sd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_di_to_td.c35
-rw-r--r--gcc-4.9/libgcc/config/libbid/_div_dd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_div_sd.c40
-rw-r--r--gcc-4.9/libgcc/config/libbid/_div_td.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_eq_dd.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_eq_sd.c44
-rw-r--r--gcc-4.9/libgcc/config/libbid/_eq_td.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_ge_dd.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_ge_sd.c42
-rw-r--r--gcc-4.9/libgcc/config/libbid/_ge_td.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_gt_dd.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_gt_sd.c40
-rw-r--r--gcc-4.9/libgcc/config/libbid/_gt_td.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_isinfd128.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_isinfd32.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_isinfd64.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_le_dd.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_le_sd.c44
-rw-r--r--gcc-4.9/libgcc/config/libbid/_le_td.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_lt_dd.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_lt_sd.c40
-rw-r--r--gcc-4.9/libgcc/config/libbid/_lt_td.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_mul_dd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_mul_sd.c40
-rw-r--r--gcc-4.9/libgcc/config/libbid/_mul_td.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_ne_dd.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_ne_sd.c40
-rw-r--r--gcc-4.9/libgcc/config/libbid/_ne_td.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_dd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_df.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_di.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_sf.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_si.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_td.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_tf.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_udi.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_usi.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sd_to_xf.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sf_to_dd.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sf_to_sd.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_sf_to_td.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_si_to_dd.c34
-rw-r--r--gcc-4.9/libgcc/config/libbid/_si_to_sd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_si_to_td.c34
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_dd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_df.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_di.c39
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_sd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_sf.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_si.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_tf.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_udi.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_usi.c40
-rw-r--r--gcc-4.9/libgcc/config/libbid/_td_to_xf.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_tf_to_dd.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_tf_to_sd.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_tf_to_td.c38
-rw-r--r--gcc-4.9/libgcc/config/libbid/_udi_to_dd.c35
-rw-r--r--gcc-4.9/libgcc/config/libbid/_udi_to_sd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_udi_to_td.c35
-rw-r--r--gcc-4.9/libgcc/config/libbid/_unord_dd.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_unord_sd.c41
-rw-r--r--gcc-4.9/libgcc/config/libbid/_unord_td.c37
-rw-r--r--gcc-4.9/libgcc/config/libbid/_usi_to_dd.c35
-rw-r--r--gcc-4.9/libgcc/config/libbid/_usi_to_sd.c36
-rw-r--r--gcc-4.9/libgcc/config/libbid/_usi_to_td.c35
-rw-r--r--gcc-4.9/libgcc/config/libbid/_xf_to_dd.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_xf_to_sd.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/_xf_to_td.c33
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128.c4333
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_2_str.h33
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_2_str_macros.h149
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_2_str_tables.c642
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_add.c2941
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_compare.c4346
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_div.c1851
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_fma.c4460
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_logb.c58
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_minmax.c1095
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_mul.c423
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_next.c643
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_noncomp.c1200
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_quantize.c274
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_rem.c217
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_round_integral.c1951
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_scalb.c96
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_sqrt.c564
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_string.c672
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_int16.c67
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_int32.c3659
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_int64.c2994
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_int8.c67
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_uint16.c68
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_uint32.c3588
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_uint64.c3401
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid128_to_uint8.c67
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid32_to_bid128.c264
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid32_to_bid64.c216
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_add.c595
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_compare.c3172
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_div.c1795
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_fma.c506
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_logb.c68
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_minmax.c854
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_mul.c374
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_next.c481
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_noncomp.c954
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_quantize.c236
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_rem.c228
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_round_integral.c1221
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_scalb.c105
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_sqrt.c552
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_string.c511
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_bid128.c262
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_int16.c67
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_int32.c2587
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_int64.c2329
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_int8.c69
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_uint16.c67
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_uint32.c2270
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_uint64.c2273
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid64_to_uint8.c67
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_b2d.h3055
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_binarydecimal.c147479
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_conf.h1171
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_convert_data.c2108
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_decimal_data.c1293
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_decimal_globals.c100
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_div_macros.h540
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_dpd.c782
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_flag_operations.c345
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_from_int.c349
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_functions.h3279
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_gcc_intrinsics.h288
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_inline_add.h1253
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_internal.h2607
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_round.c1049
-rw-r--r--gcc-4.9/libgcc/config/libbid/bid_sqrt_macros.h331
-rw-r--r--gcc-4.9/libgcc/config/libgcc-glibc.ver55
-rw-r--r--gcc-4.9/libgcc/config/libgcc-libsystem.ver1
-rw-r--r--gcc-4.9/libgcc/config/lm32/_ashlsi3.S114
-rw-r--r--gcc-4.9/libgcc/config/lm32/_ashrsi3.S110
-rw-r--r--gcc-4.9/libgcc/config/lm32/_divsi3.c99
-rw-r--r--gcc-4.9/libgcc/config/lm32/_lshrsi3.S109
-rw-r--r--gcc-4.9/libgcc/config/lm32/_modsi3.c71
-rw-r--r--gcc-4.9/libgcc/config/lm32/_mulsi3.c48
-rw-r--r--gcc-4.9/libgcc/config/lm32/_udivmodsi4.c53
-rw-r--r--gcc-4.9/libgcc/config/lm32/_udivsi3.c49
-rw-r--r--gcc-4.9/libgcc/config/lm32/_umodsi3.c49
-rw-r--r--gcc-4.9/libgcc/config/lm32/crti.S40
-rw-r--r--gcc-4.9/libgcc/config/lm32/crtn.S37
-rw-r--r--gcc-4.9/libgcc/config/lm32/libgcc_lm32.h43
-rw-r--r--gcc-4.9/libgcc/config/lm32/sfp-machine.h55
-rw-r--r--gcc-4.9/libgcc/config/lm32/t-elf2
-rw-r--r--gcc-4.9/libgcc/config/lm32/t-lm3210
-rw-r--r--gcc-4.9/libgcc/config/lm32/t-uclinux2
-rw-r--r--gcc-4.9/libgcc/config/m32c/lib1funcs.S230
-rw-r--r--gcc-4.9/libgcc/config/m32c/lib2funcs.c147
-rw-r--r--gcc-4.9/libgcc/config/m32c/t-m32c13
-rw-r--r--gcc-4.9/libgcc/config/m32c/trapv.c42
-rw-r--r--gcc-4.9/libgcc/config/m32r/initfini.c168
-rw-r--r--gcc-4.9/libgcc/config/m32r/libgcc-glibc.ver48
-rw-r--r--gcc-4.9/libgcc/config/m32r/t-linux5
-rw-r--r--gcc-4.9/libgcc/config/m32r/t-m32r23
-rw-r--r--gcc-4.9/libgcc/config/m68k/crti.S44
-rw-r--r--gcc-4.9/libgcc/config/m68k/crtn.S40
-rw-r--r--gcc-4.9/libgcc/config/m68k/fpgnulib.c595
-rw-r--r--gcc-4.9/libgcc/config/m68k/lb1sf68.S4116
-rw-r--r--gcc-4.9/libgcc/config/m68k/linux-atomic.c211
-rw-r--r--gcc-4.9/libgcc/config/m68k/linux-unwind.h158
-rw-r--r--gcc-4.9/libgcc/config/m68k/t-floatlib11
-rw-r--r--gcc-4.9/libgcc/config/m68k/t-linux1
-rw-r--r--gcc-4.9/libgcc/config/m68k/t-slibgcc-elf-ver3
-rw-r--r--gcc-4.9/libgcc/config/mcore/crti.S62
-rw-r--r--gcc-4.9/libgcc/config/mcore/crtn.S44
-rw-r--r--gcc-4.9/libgcc/config/mcore/lib1funcs.S303
-rw-r--r--gcc-4.9/libgcc/config/mcore/t-mcore5
-rw-r--r--gcc-4.9/libgcc/config/mep/lib1funcs.S125
-rw-r--r--gcc-4.9/libgcc/config/mep/lib2funcs.c139
-rw-r--r--gcc-4.9/libgcc/config/mep/t-mep16
-rw-r--r--gcc-4.9/libgcc/config/mep/tramp.c103
-rw-r--r--gcc-4.9/libgcc/config/microblaze/crti.S49
-rw-r--r--gcc-4.9/libgcc/config/microblaze/crtn.S35
-rw-r--r--gcc-4.9/libgcc/config/microblaze/divsi3.S96
-rw-r--r--gcc-4.9/libgcc/config/microblaze/divsi3_table.c62
-rw-r--r--gcc-4.9/libgcc/config/microblaze/moddi3.S115
-rw-r--r--gcc-4.9/libgcc/config/microblaze/modsi3.S95
-rw-r--r--gcc-4.9/libgcc/config/microblaze/muldi3_hard.S144
-rw-r--r--gcc-4.9/libgcc/config/microblaze/mulsi3.S69
-rw-r--r--gcc-4.9/libgcc/config/microblaze/stack_overflow_exit.S61
-rw-r--r--gcc-4.9/libgcc/config/microblaze/t-microblaze12
-rw-r--r--gcc-4.9/libgcc/config/microblaze/udivsi3.S103
-rw-r--r--gcc-4.9/libgcc/config/microblaze/umodsi3.S106
-rw-r--r--gcc-4.9/libgcc/config/mips/crtfastmath.c53
-rw-r--r--gcc-4.9/libgcc/config/mips/crti.S49
-rw-r--r--gcc-4.9/libgcc/config/mips/crtn.S54
-rw-r--r--gcc-4.9/libgcc/config/mips/gthr-mipssde.h237
-rw-r--r--gcc-4.9/libgcc/config/mips/lib2funcs.c44
-rw-r--r--gcc-4.9/libgcc/config/mips/libgcc-mips16.ver48
-rw-r--r--gcc-4.9/libgcc/config/mips/linux-unwind.h125
-rw-r--r--gcc-4.9/libgcc/config/mips/mips16.S752
-rw-r--r--gcc-4.9/libgcc/config/mips/sfp-machine.h180
-rw-r--r--gcc-4.9/libgcc/config/mips/t-crtstuff2
-rw-r--r--gcc-4.9/libgcc/config/mips/t-elf3
-rw-r--r--gcc-4.9/libgcc/config/mips/t-mips9
-rw-r--r--gcc-4.9/libgcc/config/mips/t-mips1645
-rw-r--r--gcc-4.9/libgcc/config/mips/t-mips641
-rw-r--r--gcc-4.9/libgcc/config/mips/t-sdemtk3
-rw-r--r--gcc-4.9/libgcc/config/mips/t-softfp-tf3
-rw-r--r--gcc-4.9/libgcc/config/mips/t-vr2
-rw-r--r--gcc-4.9/libgcc/config/mips/vr4120-div.S79
-rw-r--r--gcc-4.9/libgcc/config/mmix/crti.S152
-rw-r--r--gcc-4.9/libgcc/config/mmix/crtn.S87
-rw-r--r--gcc-4.9/libgcc/config/mmix/t-mmix22
-rw-r--r--gcc-4.9/libgcc/config/moxie/crti.S40
-rw-r--r--gcc-4.9/libgcc/config/moxie/crtn.S34
-rw-r--r--gcc-4.9/libgcc/config/moxie/sfp-machine.h61
-rw-r--r--gcc-4.9/libgcc/config/msp430/cmpd.c19
-rw-r--r--gcc-4.9/libgcc/config/msp430/cmpsi2.S98
-rw-r--r--gcc-4.9/libgcc/config/msp430/epilogue.S51
-rw-r--r--gcc-4.9/libgcc/config/msp430/floathidf.c8
-rw-r--r--gcc-4.9/libgcc/config/msp430/floathisf.c11
-rw-r--r--gcc-4.9/libgcc/config/msp430/floatunhidf.c12
-rw-r--r--gcc-4.9/libgcc/config/msp430/floatunhisf.c12
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2bitcountHI.c49
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2divHI.c42
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2divQI.c43
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2divSI.c42
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2hw_mul.S226
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2mul.c58
-rw-r--r--gcc-4.9/libgcc/config/msp430/lib2shift.c113
-rw-r--r--gcc-4.9/libgcc/config/msp430/mpy.c15
-rw-r--r--gcc-4.9/libgcc/config/msp430/msp430-divmod.h117
-rw-r--r--gcc-4.9/libgcc/config/msp430/msp430-mul.h42
-rw-r--r--gcc-4.9/libgcc/config/msp430/slli.S108
-rw-r--r--gcc-4.9/libgcc/config/msp430/srai.S106
-rw-r--r--gcc-4.9/libgcc/config/msp430/srli.S110
-rw-r--r--gcc-4.9/libgcc/config/msp430/t-msp43049
-rw-r--r--gcc-4.9/libgcc/config/nds32/crtzero.S103
-rw-r--r--gcc-4.9/libgcc/config/nds32/initfini.c159
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/adj_intr_lvl.inc38
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/excp_isr.S132
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/excp_isr_4b.S133
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/intr_isr.S132
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/intr_isr_4b.S134
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid00.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid01.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid02.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid03.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid04.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid05.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid06.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid07.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid08.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid09.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid10.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid11.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid12.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid13.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid14.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid15.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid16.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid17.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid18.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid19.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid20.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid21.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid22.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid23.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid24.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid25.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid26.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid27.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid28.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid29.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid30.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid31.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid32.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid33.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid34.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid35.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid36.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid37.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid38.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid39.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid40.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid41.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid42.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid43.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid44.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid45.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid46.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid47.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid48.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid49.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid50.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid51.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid52.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid53.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid54.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid55.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid56.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid57.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid58.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid59.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid60.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid61.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid62.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid63.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid64.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid65.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid66.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid67.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid68.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid69.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid70.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid71.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid72.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/nmih.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/reset.S130
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/reset_4b.S131
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_all.inc45
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs.inc36
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_00.inc31
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_01.inc35
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_02.inc43
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_03.inc59
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_mac_regs.inc34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/restore_partial.inc47
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_all.inc67
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs.inc36
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_00.inc33
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_01.inc37
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_02.inc45
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_03.inc61
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_mac_regs.inc34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/save_partial.inc69
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72_4b.S34
-rw-r--r--gcc-4.9/libgcc/config/nds32/isr-library/wrh.S32
-rw-r--r--gcc-4.9/libgcc/config/nds32/lib1asmsrc-mculib.S5213
-rw-r--r--gcc-4.9/libgcc/config/nds32/lib1asmsrc-newlib.S204
-rw-r--r--gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c38
-rw-r--r--gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c49
-rw-r--r--gcc-4.9/libgcc/config/nds32/sfp-machine.h94
-rw-r--r--gcc-4.9/libgcc/config/nds32/t-nds3258
-rw-r--r--gcc-4.9/libgcc/config/nds32/t-nds32-isr212
-rw-r--r--gcc-4.9/libgcc/config/nds32/t-nds32-mculib77
-rw-r--r--gcc-4.9/libgcc/config/nds32/t-nds32-newlib34
-rw-r--r--gcc-4.9/libgcc/config/nios2/crti.S85
-rw-r--r--gcc-4.9/libgcc/config/nios2/crtn.S56
-rw-r--r--gcc-4.9/libgcc/config/nios2/lib2-divmod-hi.c117
-rw-r--r--gcc-4.9/libgcc/config/nios2/lib2-divmod.c117
-rw-r--r--gcc-4.9/libgcc/config/nios2/lib2-divtable.c60
-rw-r--r--gcc-4.9/libgcc/config/nios2/lib2-mul.c42
-rw-r--r--gcc-4.9/libgcc/config/nios2/lib2-nios2.h49
-rw-r--r--gcc-4.9/libgcc/config/nios2/linux-atomic.c286
-rw-r--r--gcc-4.9/libgcc/config/nios2/linux-unwind.h106
-rw-r--r--gcc-4.9/libgcc/config/nios2/sfp-machine.h81
-rw-r--r--gcc-4.9/libgcc/config/nios2/t-linux7
-rw-r--r--gcc-4.9/libgcc/config/nios2/t-nios28
-rw-r--r--gcc-4.9/libgcc/config/nios2/tramp.c61
-rw-r--r--gcc-4.9/libgcc/config/no-sfp-machine.h1
-rw-r--r--gcc-4.9/libgcc/config/no-unwind.h2
-rw-r--r--gcc-4.9/libgcc/config/pa/fptr.c131
-rw-r--r--gcc-4.9/libgcc/config/pa/gthr-dce.h568
-rw-r--r--gcc-4.9/libgcc/config/pa/hpux-unwind.h361
-rw-r--r--gcc-4.9/libgcc/config/pa/lib2funcs.S74
-rw-r--r--gcc-4.9/libgcc/config/pa/linux-atomic.c305
-rw-r--r--gcc-4.9/libgcc/config/pa/linux-unwind.h141
-rw-r--r--gcc-4.9/libgcc/config/pa/milli64.S2134
-rw-r--r--gcc-4.9/libgcc/config/pa/quadlib.c245
-rw-r--r--gcc-4.9/libgcc/config/pa/stublib.c117
-rw-r--r--gcc-4.9/libgcc/config/pa/t-hpux3
-rw-r--r--gcc-4.9/libgcc/config/pa/t-hpux101
-rw-r--r--gcc-4.9/libgcc/config/pa/t-linux10
-rw-r--r--gcc-4.9/libgcc/config/pa/t-linux648
-rw-r--r--gcc-4.9/libgcc/config/pa/t-openbsd9
-rw-r--r--gcc-4.9/libgcc/config/pa/t-pa643
-rw-r--r--gcc-4.9/libgcc/config/pa/t-slibgcc-dwarf-ver3
-rw-r--r--gcc-4.9/libgcc/config/pa/t-slibgcc-hpux24
-rw-r--r--gcc-4.9/libgcc/config/pa/t-slibgcc-sjlj-ver3
-rw-r--r--gcc-4.9/libgcc/config/pa/t-stublib41
-rw-r--r--gcc-4.9/libgcc/config/pdp11/t-pdp118
-rw-r--r--gcc-4.9/libgcc/config/picochip/adddi3.S194
-rw-r--r--gcc-4.9/libgcc/config/picochip/ashlsi3.S193
-rw-r--r--gcc-4.9/libgcc/config/picochip/ashlsi3.c82
-rw-r--r--gcc-4.9/libgcc/config/picochip/ashrsi3.S202
-rw-r--r--gcc-4.9/libgcc/config/picochip/ashrsi3.c113
-rw-r--r--gcc-4.9/libgcc/config/picochip/clzsi2.S189
-rw-r--r--gcc-4.9/libgcc/config/picochip/cmpsi2.S212
-rw-r--r--gcc-4.9/libgcc/config/picochip/divmod15.S261
-rw-r--r--gcc-4.9/libgcc/config/picochip/divmodhi4.S246
-rw-r--r--gcc-4.9/libgcc/config/picochip/divmodsi4.S233
-rw-r--r--gcc-4.9/libgcc/config/picochip/lib1funcs.S4
-rw-r--r--gcc-4.9/libgcc/config/picochip/longjmp.S182
-rw-r--r--gcc-4.9/libgcc/config/picochip/lshrsi3.S190
-rw-r--r--gcc-4.9/libgcc/config/picochip/lshrsi3.c76
-rw-r--r--gcc-4.9/libgcc/config/picochip/parityhi2.S179
-rw-r--r--gcc-4.9/libgcc/config/picochip/popcounthi2.S201
-rw-r--r--gcc-4.9/libgcc/config/picochip/setjmp.S182
-rw-r--r--gcc-4.9/libgcc/config/picochip/subdi3.S191
-rw-r--r--gcc-4.9/libgcc/config/picochip/t-picochip39
-rw-r--r--gcc-4.9/libgcc/config/picochip/ucmpsi2.S209
-rw-r--r--gcc-4.9/libgcc/config/picochip/udivmodhi4.S238
-rw-r--r--gcc-4.9/libgcc/config/picochip/udivmodsi4.S318
-rw-r--r--gcc-4.9/libgcc/config/rl78/cmpsi2.S121
-rw-r--r--gcc-4.9/libgcc/config/rl78/divmodhi.S337
-rw-r--r--gcc-4.9/libgcc/config/rl78/divmodqi.S310
-rw-r--r--gcc-4.9/libgcc/config/rl78/divmodsi.S521
-rw-r--r--gcc-4.9/libgcc/config/rl78/lib2div.c84
-rw-r--r--gcc-4.9/libgcc/config/rl78/lib2mul.c61
-rw-r--r--gcc-4.9/libgcc/config/rl78/lib2shift.c113
-rw-r--r--gcc-4.9/libgcc/config/rl78/lshrsi3.S116
-rw-r--r--gcc-4.9/libgcc/config/rl78/mulsi3.S202
-rw-r--r--gcc-4.9/libgcc/config/rl78/rl78-divmod.h117
-rw-r--r--gcc-4.9/libgcc/config/rl78/rl78-mul.h42
-rw-r--r--gcc-4.9/libgcc/config/rl78/signbit.S67
-rw-r--r--gcc-4.9/libgcc/config/rl78/t-rl7832
-rw-r--r--gcc-4.9/libgcc/config/rl78/trampoline.S136
-rw-r--r--gcc-4.9/libgcc/config/rl78/vregs.h56
-rw-r--r--gcc-4.9/libgcc/config/rs6000/aix-unwind.h255
-rw-r--r--gcc-4.9/libgcc/config/rs6000/aixinitfini.c33
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtcxa.c42
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtresfpr.S80
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtresgpr.S80
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtrestvr.S87
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtresxfpr.S125
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtresxgpr.S123
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtsavevr.S87
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtsavfpr.S80
-rw-r--r--gcc-4.9/libgcc/config/rs6000/crtsavgpr.S80
-rw-r--r--gcc-4.9/libgcc/config/rs6000/cxa_atexit.c131
-rw-r--r--gcc-4.9/libgcc/config/rs6000/cxa_finalize.c85
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-asm.h51
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-crt2.c153
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-fallback.c488
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-fpsave.S92
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-gpsave.S118
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-tramp.S125
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-unwind.h34
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-vecsave.S155
-rw-r--r--gcc-4.9/libgcc/config/rs6000/darwin-world.S252
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtres32gpr.S73
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtres64gpr.S73
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtres64gprctr.S90
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtrest32gpr.S75
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtrest64gpr.S74
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtresx32gpr.S75
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtresx64gpr.S75
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtsav32gpr.S73
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtsav64gpr.S72
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtsav64gprctr.S91
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtsavg32gpr.S73
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtsavg64gpr.S73
-rw-r--r--gcc-4.9/libgcc/config/rs6000/e500crtsavg64gprctr.S90
-rw-r--r--gcc-4.9/libgcc/config/rs6000/eabi-ci.S113
-rw-r--r--gcc-4.9/libgcc/config/rs6000/eabi-cn.S104
-rw-r--r--gcc-4.9/libgcc/config/rs6000/eabi.S288
-rw-r--r--gcc-4.9/libgcc/config/rs6000/exit.h92
-rw-r--r--gcc-4.9/libgcc/config/rs6000/freebsd-unwind.h69
-rw-r--r--gcc-4.9/libgcc/config/rs6000/gthr-aix.h35
-rw-r--r--gcc-4.9/libgcc/config/rs6000/ibm-ldouble-format91
-rw-r--r--gcc-4.9/libgcc/config/rs6000/ibm-ldouble.c448
-rw-r--r--gcc-4.9/libgcc/config/rs6000/libgcc-aix-cxa.ver9
-rw-r--r--gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.4.ver93
-rw-r--r--gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.5.ver106
-rw-r--r--gcc-4.9/libgcc/config/rs6000/libgcc-glibc.ver73
-rw-r--r--gcc-4.9/libgcc/config/rs6000/libgcc-ibm-ldouble.ver7
-rw-r--r--gcc-4.9/libgcc/config/rs6000/linux-unwind.h354
-rw-r--r--gcc-4.9/libgcc/config/rs6000/ppc64-fp.c237
-rw-r--r--gcc-4.9/libgcc/config/rs6000/sfp-machine.h71
-rw-r--r--gcc-4.9/libgcc/config/rs6000/sol-ci.S94
-rw-r--r--gcc-4.9/libgcc/config/rs6000/sol-cn.S72
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-aix-cxa12
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-crtstuff3
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-darwin23
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-darwin647
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-freebsd22
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-freebsd645
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-ibm-ldouble6
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-linux3
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-lynx1
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-netbsd11
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-ppc64-fp5
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-ppccomm22
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-savresfgpr23
-rw-r--r--gcc-4.9/libgcc/config/rs6000/t-slibgcc-aix43
-rw-r--r--gcc-4.9/libgcc/config/rs6000/tramp.S185
-rw-r--r--gcc-4.9/libgcc/config/rx/rx-abi-functions.c90
-rw-r--r--gcc-4.9/libgcc/config/rx/rx-abi.h233
-rw-r--r--gcc-4.9/libgcc/config/rx/rx-lib.h5
-rw-r--r--gcc-4.9/libgcc/config/rx/t-rx34
-rw-r--r--gcc-4.9/libgcc/config/s390/32/_fixdfdi.c113
-rw-r--r--gcc-4.9/libgcc/config/s390/32/_fixsfdi.c107
-rw-r--r--gcc-4.9/libgcc/config/s390/32/_fixtfdi.c122
-rw-r--r--gcc-4.9/libgcc/config/s390/32/_fixunsdfdi.c120
-rw-r--r--gcc-4.9/libgcc/config/s390/32/_fixunssfdi.c114
-rw-r--r--gcc-4.9/libgcc/config/s390/32/_fixunstfdi.c125
-rw-r--r--gcc-4.9/libgcc/config/s390/32/t-floattodi5
-rw-r--r--gcc-4.9/libgcc/config/s390/gthr-tpf.h234
-rw-r--r--gcc-4.9/libgcc/config/s390/libgcc-glibc.ver116
-rw-r--r--gcc-4.9/libgcc/config/s390/linux-unwind.h132
-rw-r--r--gcc-4.9/libgcc/config/s390/t-crtstuff5
-rw-r--r--gcc-4.9/libgcc/config/s390/t-linux7
-rw-r--r--gcc-4.9/libgcc/config/s390/tpf-unwind.h252
-rw-r--r--gcc-4.9/libgcc/config/score/crti.S131
-rw-r--r--gcc-4.9/libgcc/config/score/crtn.S50
-rw-r--r--gcc-4.9/libgcc/config/score/sfp-machine.h61
-rw-r--r--gcc-4.9/libgcc/config/sh/crt1.S1368
-rw-r--r--gcc-4.9/libgcc/config/sh/crti.S125
-rw-r--r--gcc-4.9/libgcc/config/sh/crtn.S77
-rw-r--r--gcc-4.9/libgcc/config/sh/lib1funcs-4-300.S936
-rw-r--r--gcc-4.9/libgcc/config/sh/lib1funcs-Os-4-200.S322
-rw-r--r--gcc-4.9/libgcc/config/sh/lib1funcs.S4047
-rw-r--r--gcc-4.9/libgcc/config/sh/lib1funcs.h74
-rw-r--r--gcc-4.9/libgcc/config/sh/libgcc-excl.ver8
-rw-r--r--gcc-4.9/libgcc/config/sh/libgcc-glibc.ver48
-rw-r--r--gcc-4.9/libgcc/config/sh/linux-atomic.c81
-rw-r--r--gcc-4.9/libgcc/config/sh/linux-unwind.h255
-rw-r--r--gcc-4.9/libgcc/config/sh/t-linux18
-rw-r--r--gcc-4.9/libgcc/config/sh/t-netbsd2
-rw-r--r--gcc-4.9/libgcc/config/sh/t-sh60
-rw-r--r--gcc-4.9/libgcc/config/sh/t-sh646
-rw-r--r--gcc-4.9/libgcc/config/sh/t-superh11
-rw-r--r--gcc-4.9/libgcc/config/sparc/crtfastmath.c44
-rw-r--r--gcc-4.9/libgcc/config/sparc/crti.S77
-rw-r--r--gcc-4.9/libgcc/config/sparc/crtn.S63
-rw-r--r--gcc-4.9/libgcc/config/sparc/lb1spc.S784
-rw-r--r--gcc-4.9/libgcc/config/sparc/libgcc-glibc.ver93
-rw-r--r--gcc-4.9/libgcc/config/sparc/linux-unwind.h215
-rw-r--r--gcc-4.9/libgcc/config/sparc/sol2-c1.S103
-rw-r--r--gcc-4.9/libgcc/config/sparc/sol2-unwind.h414
-rw-r--r--gcc-4.9/libgcc/config/sparc/t-linux4
-rw-r--r--gcc-4.9/libgcc/config/sparc/t-linux641
-rw-r--r--gcc-4.9/libgcc/config/sparc/t-softmul2
-rw-r--r--gcc-4.9/libgcc/config/sparc/t-sol26
-rw-r--r--gcc-4.9/libgcc/config/spu/cache.S43
-rw-r--r--gcc-4.9/libgcc/config/spu/cachemgr.c438
-rw-r--r--gcc-4.9/libgcc/config/spu/divmodti4.c188
-rw-r--r--gcc-4.9/libgcc/config/spu/divv2df3.c195
-rw-r--r--gcc-4.9/libgcc/config/spu/float_disf.c31
-rw-r--r--gcc-4.9/libgcc/config/spu/float_unsdidf.c54
-rw-r--r--gcc-4.9/libgcc/config/spu/float_unsdisf.c31
-rw-r--r--gcc-4.9/libgcc/config/spu/float_unssidf.c45
-rw-r--r--gcc-4.9/libgcc/config/spu/mfc_multi_tag_release.c72
-rw-r--r--gcc-4.9/libgcc/config/spu/mfc_multi_tag_reserve.c84
-rw-r--r--gcc-4.9/libgcc/config/spu/mfc_tag_release.c59
-rw-r--r--gcc-4.9/libgcc/config/spu/mfc_tag_reserve.c51
-rw-r--r--gcc-4.9/libgcc/config/spu/mfc_tag_table.c39
-rw-r--r--gcc-4.9/libgcc/config/spu/multi3.c119
-rw-r--r--gcc-4.9/libgcc/config/spu/t-elf59
-rw-r--r--gcc-4.9/libgcc/config/stormy16/ashlsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/ashrsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/clrsbhi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/clzhi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/cmpsi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/ctzhi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/divsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/ffshi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/lib2funcs.c374
-rw-r--r--gcc-4.9/libgcc/config/stormy16/lshrsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/modsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/parityhi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/popcounthi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/t-stormy1640
-rw-r--r--gcc-4.9/libgcc/config/stormy16/ucmpsi2.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/udivmodsi4.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/udivsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/stormy16/umodsi3.c2
-rw-r--r--gcc-4.9/libgcc/config/t-crtfm2
-rw-r--r--gcc-4.9/libgcc/config/t-crtstuff-pic2
-rw-r--r--gcc-4.9/libgcc/config/t-darwin18
-rw-r--r--gcc-4.9/libgcc/config/t-dfprules10
-rw-r--r--gcc-4.9/libgcc/config/t-eh-dw2-dip3
-rw-r--r--gcc-4.9/libgcc/config/t-fdpbit2
-rw-r--r--gcc-4.9/libgcc/config/t-fixedpoint-gnu-prefix1
-rw-r--r--gcc-4.9/libgcc/config/t-fpbit2
-rw-r--r--gcc-4.9/libgcc/config/t-freebsd-thread2
-rw-r--r--gcc-4.9/libgcc/config/t-gnu-prefix2
-rw-r--r--gcc-4.9/libgcc/config/t-hardfp81
-rw-r--r--gcc-4.9/libgcc/config/t-hardfp-sfdf23
-rw-r--r--gcc-4.9/libgcc/config/t-libgcc-pic2
-rw-r--r--gcc-4.9/libgcc/config/t-libunwind12
-rw-r--r--gcc-4.9/libgcc/config/t-libunwind-elf51
-rw-r--r--gcc-4.9/libgcc/config/t-linux3
-rw-r--r--gcc-4.9/libgcc/config/t-openbsd-thread3
-rw-r--r--gcc-4.9/libgcc/config/t-rtems4
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc53
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-darwin134
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-elf-ver4
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-gld5
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-gld-nover3
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-hpux8
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-libgcc32
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-nolc-override1
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-sld28
-rw-r--r--gcc-4.9/libgcc/config/t-slibgcc-vms28
-rw-r--r--gcc-4.9/libgcc/config/t-softfp111
-rw-r--r--gcc-4.9/libgcc/config/t-softfp-excl1
-rw-r--r--gcc-4.9/libgcc/config/t-softfp-sfdf5
-rw-r--r--gcc-4.9/libgcc/config/t-softfp-tf5
-rw-r--r--gcc-4.9/libgcc/config/t-sol227
-rw-r--r--gcc-4.9/libgcc/config/t-stack4
-rw-r--r--gcc-4.9/libgcc/config/t-tls2
-rw-r--r--gcc-4.9/libgcc/config/t-vxworks14
-rw-r--r--gcc-4.9/libgcc/config/tilegx/sfp-machine.h5
-rw-r--r--gcc-4.9/libgcc/config/tilegx/sfp-machine32.h68
-rw-r--r--gcc-4.9/libgcc/config/tilegx/sfp-machine64.h68
-rw-r--r--gcc-4.9/libgcc/config/tilegx/t-crtstuff8
-rw-r--r--gcc-4.9/libgcc/config/tilegx/t-softfp1
-rw-r--r--gcc-4.9/libgcc/config/tilegx/t-tilegx26
-rw-r--r--gcc-4.9/libgcc/config/tilepro/atomic.c397
-rw-r--r--gcc-4.9/libgcc/config/tilepro/atomic.h435
-rw-r--r--gcc-4.9/libgcc/config/tilepro/linux-unwind.h99
-rw-r--r--gcc-4.9/libgcc/config/tilepro/sfp-machine.h59
-rw-r--r--gcc-4.9/libgcc/config/tilepro/softdivide.c353
-rw-r--r--gcc-4.9/libgcc/config/tilepro/softmpy.S94
-rw-r--r--gcc-4.9/libgcc/config/tilepro/t-crtstuff4
-rw-r--r--gcc-4.9/libgcc/config/tilepro/t-tilepro33
-rw-r--r--gcc-4.9/libgcc/config/unwind-dw2-fde-darwin.c288
-rw-r--r--gcc-4.9/libgcc/config/v850/lib1funcs.S2330
-rw-r--r--gcc-4.9/libgcc/config/v850/t-v85060
-rw-r--r--gcc-4.9/libgcc/config/vax/lib1funcs.S92
-rw-r--r--gcc-4.9/libgcc/config/vax/t-linux2
-rw-r--r--gcc-4.9/libgcc/config/vms/t-vms3
-rw-r--r--gcc-4.9/libgcc/config/vms/vms-ucrt0.c142
-rw-r--r--gcc-4.9/libgcc/config/vxlib-tls.c370
-rw-r--r--gcc-4.9/libgcc/config/vxlib.c95
-rw-r--r--gcc-4.9/libgcc/config/xtensa/crti.S51
-rw-r--r--gcc-4.9/libgcc/config/xtensa/crtn.S46
-rw-r--r--gcc-4.9/libgcc/config/xtensa/ieee754-df.S2388
-rw-r--r--gcc-4.9/libgcc/config/xtensa/ieee754-sf.S1757
-rw-r--r--gcc-4.9/libgcc/config/xtensa/lib1funcs.S844
-rw-r--r--gcc-4.9/libgcc/config/xtensa/lib2funcs.S186
-rw-r--r--gcc-4.9/libgcc/config/xtensa/libgcc-glibc.ver3
-rw-r--r--gcc-4.9/libgcc/config/xtensa/linux-unwind.h97
-rw-r--r--gcc-4.9/libgcc/config/xtensa/t-elf5
-rw-r--r--gcc-4.9/libgcc/config/xtensa/t-linux1
-rw-r--r--gcc-4.9/libgcc/config/xtensa/t-xtensa16
-rw-r--r--gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.c543
-rw-r--r--gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.h49
1137 files changed, 351456 insertions, 0 deletions
diff --git a/gcc-4.9/libgcc/config/aarch64/crti.S b/gcc-4.9/libgcc/config/aarch64/crti.S
new file mode 100644
index 000000000..9f607b7cc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/crti.S
@@ -0,0 +1,68 @@
+# Machine description for AArch64 architecture.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Contributed by ARM Ltd.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+/* An executable stack is *not* required for these functions. */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
+# This file creates a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+#ifdef __ELF__
+#define TYPE(x) .type x,function
+#else
+#define TYPE(x)
+#endif
+
+ # Note - this macro is complemented by the FUNC_END macro
+ # in crtn.S. If you change this macro you must also change
+ # that macro match.
+.macro FUNC_START
+ # Create a stack frame and save any call-preserved registers
+ stp x29, x30, [sp, #-16]!
+ stp x27, x28, [sp, #-16]!
+ stp x25, x26, [sp, #-16]!
+ stp x23, x24, [sp, #-16]!
+ stp x21, x22, [sp, #-16]!
+ stp x19, x20, [sp, #-16]!
+.endm
+
+ .section ".init"
+ .align 2
+ .global _init
+ TYPE(_init)
+_init:
+ FUNC_START
+
+
+ .section ".fini"
+ .align 2
+ .global _fini
+ TYPE(_fini)
+_fini:
+ FUNC_START
+
+# end of crti.S
diff --git a/gcc-4.9/libgcc/config/aarch64/crtn.S b/gcc-4.9/libgcc/config/aarch64/crtn.S
new file mode 100644
index 000000000..2a412394d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/crtn.S
@@ -0,0 +1,61 @@
+# Machine description for AArch64 architecture.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Contributed by ARM Ltd.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+/* An executable stack is *not* required for these functions. */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+ # Note - this macro is complemented by the FUNC_START macro
+ # in crti.S. If you change this macro you must also change
+ # that macro match.
+ #
+ # Note - we do not try any fancy optimizations of the return
+ # sequences here, it is just not worth it. Instead keep things
+ # simple. Restore all the save resgisters, including the link
+ # register and then perform the correct function return instruction.
+.macro FUNC_END
+ ldp x19, x20, [sp], #16
+ ldp x21, x22, [sp], #16
+ ldp x23, x24, [sp], #16
+ ldp x25, x26, [sp], #16
+ ldp x27, x28, [sp], #16
+ ldp x29, x30, [sp], #16
+ ret
+.endm
+
+
+ .section ".init"
+ ;;
+ FUNC_END
+
+ .section ".fini"
+ ;;
+ FUNC_END
+
+# end of crtn.S
diff --git a/gcc-4.9/libgcc/config/aarch64/linux-unwind.h b/gcc-4.9/libgcc/config/aarch64/linux-unwind.h
new file mode 100644
index 000000000..6b5b3cd1d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/linux-unwind.h
@@ -0,0 +1,156 @@
+/* Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by ARM Ltd.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef inhibit_libc
+
+#include <signal.h>
+#include <sys/ucontext.h>
+
+
+/* Since insns are always stored LE, on a BE system the opcodes will
+ be loaded byte-reversed. Therefore, define two sets of opcodes,
+ one for LE and one for BE. */
+
+#if __AARCH64EB__
+#define MOVZ_X8_8B 0x681180d2
+#define SVC_0 0x010000d4
+#else
+#define MOVZ_X8_8B 0xd2801168
+#define SVC_0 0xd4000001
+#endif
+
+#define MD_FALLBACK_FRAME_STATE_FOR aarch64_fallback_frame_state
+
+static _Unwind_Reason_Code
+aarch64_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState * fs)
+{
+ /* The kernel creates an rt_sigframe on the stack immediately prior
+ to delivering a signal.
+
+ This structure must have the same shape as the linux kernel
+ equivalent. */
+ struct rt_sigframe
+ {
+ siginfo_t info;
+ struct ucontext uc;
+ };
+
+ struct rt_sigframe *rt_;
+ _Unwind_Ptr new_cfa;
+ unsigned *pc = context->ra;
+ struct sigcontext *sc;
+ struct _aarch64_ctx *extension_marker;
+ int i;
+
+ /* A signal frame will have a return address pointing to
+ __default_sa_restorer. This code is hardwired as:
+
+ 0xd2801168 movz x8, #0x8b
+ 0xd4000001 svc 0x0
+ */
+ if (pc[0] != MOVZ_X8_8B || pc[1] != SVC_0)
+ {
+ return _URC_END_OF_STACK;
+ }
+
+ rt_ = context->cfa;
+ sc = &rt_->uc.uc_mcontext;
+
+/* This define duplicates the definition in aarch64.md */
+#define SP_REGNUM 31
+
+ new_cfa = (_Unwind_Ptr) sc;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
+
+ for (i = 0; i < AARCH64_DWARF_NUMBER_R; i++)
+ {
+ fs->regs.reg[AARCH64_DWARF_R0 + i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[AARCH64_DWARF_R0 + i].loc.offset =
+ (_Unwind_Ptr) & (sc->regs[i]) - new_cfa;
+ }
+
+ /* The core context may be extended with an arbitrary set of
+ additional contexts appended sequentially. Each additional
+ context contains a magic identifier and size in bytes. The size
+ field can be used to skip over unrecognized context extensions.
+ The end of the context sequence is marked by a context with magic
+ 0 or size 0. */
+ for (extension_marker = (struct _aarch64_ctx *) &sc->__reserved;
+ extension_marker->magic;
+ extension_marker = (struct _aarch64_ctx *)
+ ((unsigned char *) extension_marker + extension_marker->size))
+ {
+ if (extension_marker->magic == FPSIMD_MAGIC)
+ {
+ struct fpsimd_context *ctx =
+ (struct fpsimd_context *) extension_marker;
+ int i;
+
+ for (i = 0; i < AARCH64_DWARF_NUMBER_V; i++)
+ {
+ _Unwind_Sword offset;
+
+ fs->regs.reg[AARCH64_DWARF_V0 + i].how = REG_SAVED_OFFSET;
+
+ /* sigcontext contains 32 128bit registers for V0 to
+ V31. The kernel will have saved the contents of the
+ V registers. We want to unwind the callee save D
+ registers. Each D register comprises the least
+ significant half of the corresponding V register. We
+ need to offset into the saved V register dependent on
+ our endianness to find the saved D register. */
+
+ offset = (_Unwind_Ptr) & (ctx->vregs[i]) - new_cfa;
+
+ /* The endianness adjustment code below expects that a
+ saved V register is 16 bytes. */
+ gcc_assert (sizeof (ctx->vregs[0]) == 16);
+#if defined (__AARCH64EB__)
+ offset = offset + 8;
+#endif
+ fs->regs.reg[AARCH64_DWARF_V0 + i].loc.offset = offset;
+ }
+ }
+ else
+ {
+ /* There is context provided that we do not recognize! */
+ }
+ }
+
+ fs->regs.reg[31].how = REG_SAVED_OFFSET;
+ fs->regs.reg[31].loc.offset = (_Unwind_Ptr) & (sc->sp) - new_cfa;
+
+ fs->signal_frame = 1;
+
+ fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_VAL_OFFSET;
+ fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset =
+ (_Unwind_Ptr) (sc->pc) - new_cfa;
+
+ fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
+
+ return _URC_NO_REASON;
+}
+
+#endif
diff --git a/gcc-4.9/libgcc/config/aarch64/sfp-exceptions.c b/gcc-4.9/libgcc/config/aarch64/sfp-exceptions.c
new file mode 100644
index 000000000..f3a95e8ab
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/sfp-exceptions.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "sfp-machine.h"
+
+void
+__sfp_handle_exceptions (int _fex)
+{
+ const float fp_max = __FLT_MAX__;
+ const float fp_min = __FLT_MIN__;
+ const float fp_1e32 = 1.0e32f;
+ const float fp_zero = 0.0;
+ const float fp_one = 1.0;
+ unsigned fpsr;
+
+ if (_fex & FP_EX_INVALID)
+ {
+ __asm__ __volatile__ ("fdiv\ts0, %s0, %s0"
+ :
+ : "w" (fp_zero)
+ : "s0");
+ __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr));
+ }
+ if (_fex & FP_EX_DIVZERO)
+ {
+ __asm__ __volatile__ ("fdiv\ts0, %s0, %s1"
+ :
+ : "w" (fp_one), "w" (fp_zero)
+ : "s0");
+ __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr));
+ }
+ if (_fex & FP_EX_OVERFLOW)
+ {
+ __asm__ __volatile__ ("fadd\ts0, %s0, %s1"
+ :
+ : "w" (fp_max), "w" (fp_1e32)
+ : "s0");
+ __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr));
+ }
+ if (_fex & FP_EX_UNDERFLOW)
+ {
+ __asm__ __volatile__ ("fmul\ts0, %s0, %s0"
+ :
+ : "w" (fp_min)
+ : "s0");
+ __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr));
+ }
+ if (_fex & FP_EX_INEXACT)
+ {
+ __asm__ __volatile__ ("fsub\ts0, %s0, %s1"
+ :
+ : "w" (fp_max), "w" (fp_one)
+ : "s0");
+ __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr));
+ }
+}
diff --git a/gcc-4.9/libgcc/config/aarch64/sfp-machine.h b/gcc-4.9/libgcc/config/aarch64/sfp-machine.h
new file mode 100644
index 000000000..203e478db
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/sfp-machine.h
@@ -0,0 +1,125 @@
+/* Machine description for AArch64 architecture.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by ARM Ltd.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long long
+#define _FP_WS_TYPE signed long long
+#define _FP_I_TYPE long long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+/* The type of the result of a floating point comparison. This must
+ match __libgcc_cmp_return__ in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1)
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* This appears to be in line with the VFP conventions in the v7-a
+ ARM-ARM. Need to check with the v8 version. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define FP_EX_INVALID 0x01
+#define FP_EX_DIVZERO 0x02
+#define FP_EX_OVERFLOW 0x04
+#define FP_EX_UNDERFLOW 0x08
+#define FP_EX_INEXACT 0x10
+#define FP_EX_SHIFT 8
+#define FP_EX_ALL \
+ (FP_EX_INVALID | FP_EX_DIVZERO | FP_EX_OVERFLOW | FP_EX_UNDERFLOW \
+ | FP_EX_INEXACT)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+void __sfp_handle_exceptions (int);
+
+#define FP_HANDLE_EXCEPTIONS \
+ do { \
+ if (__builtin_expect (_fex, 0)) \
+ __sfp_handle_exceptions (_fex); \
+ } while (0);
+
+#define FP_TRAPPING_EXCEPTIONS ((_fpcr >> FP_EX_SHIFT) & FP_EX_ALL)
+
+#define FP_RND_NEAREST 0x000000
+#define FP_RND_PINF 0x400000
+#define FP_RND_MINF 0x800000
+#define FP_RND_ZERO 0xc00000
+#define FP_RND_MASK 0xc00000
+
+#define _FP_DECL_EX \
+ unsigned long int _fpcr __attribute__ ((unused)) = FP_RND_NEAREST
+
+#define FP_INIT_ROUNDMODE \
+ do { \
+ __asm__ __volatile__ ("mrs %0, fpcr" \
+ : "=r" (_fpcr)); \
+ } while (0)
+
+#define FP_ROUNDMODE (_fpcr & FP_RND_MASK)
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined __AARCH64EB__
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/aarch64/sync-cache.c b/gcc-4.9/libgcc/config/aarch64/sync-cache.c
new file mode 100644
index 000000000..8d206c913
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/sync-cache.c
@@ -0,0 +1,72 @@
+/* Machine description for AArch64 architecture.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by ARM Ltd.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+void __aarch64_sync_cache_range (const void *, const void *);
+
+void
+__aarch64_sync_cache_range (const void *base, const void *end)
+{
+ unsigned icache_lsize;
+ unsigned dcache_lsize;
+ static unsigned int cache_info = 0;
+ const char *address;
+
+ if (! cache_info)
+ /* CTR_EL0 [3:0] contains log2 of icache line size in words.
+ CTR_EL0 [19:16] contains log2 of dcache line size in words. */
+ asm volatile ("mrs\t%0, ctr_el0":"=r" (cache_info));
+
+ icache_lsize = 4 << (cache_info & 0xF);
+ dcache_lsize = 4 << ((cache_info >> 16) & 0xF);
+
+ /* Loop over the address range, clearing one cache line at once.
+ Data cache must be flushed to unification first to make sure the
+ instruction cache fetches the updated data. 'end' is exclusive,
+ as per the GNU definition of __clear_cache. */
+
+ /* Make the start address of the loop cache aligned. */
+ address = (const char*) ((__UINTPTR_TYPE__) base
+ & ~ (__UINTPTR_TYPE__) (dcache_lsize - 1));
+
+ for (; address < (const char *) end; address += dcache_lsize)
+ asm volatile ("dc\tcvau, %0"
+ :
+ : "r" (address)
+ : "memory");
+
+ asm volatile ("dsb\tish" : : : "memory");
+
+ /* Make the start address of the loop cache aligned. */
+ address = (const char*) ((__UINTPTR_TYPE__) base
+ & ~ (__UINTPTR_TYPE__) (icache_lsize - 1));
+
+ for (; address < (const char *) end; address += icache_lsize)
+ asm volatile ("ic\tivau, %0"
+ :
+ : "r" (address)
+ : "memory");
+
+ asm volatile ("dsb\tish; isb" : : : "memory");
+}
diff --git a/gcc-4.9/libgcc/config/aarch64/t-aarch64 b/gcc-4.9/libgcc/config/aarch64/t-aarch64
new file mode 100644
index 000000000..118cc43e5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/t-aarch64
@@ -0,0 +1,21 @@
+# Machine description for AArch64 architecture.
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by ARM Ltd.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+LIB2ADD += $(srcdir)/config/aarch64/sync-cache.c
diff --git a/gcc-4.9/libgcc/config/aarch64/t-softfp b/gcc-4.9/libgcc/config/aarch64/t-softfp
new file mode 100644
index 000000000..586dca224
--- /dev/null
+++ b/gcc-4.9/libgcc/config/aarch64/t-softfp
@@ -0,0 +1,9 @@
+softfp_float_modes := tf
+softfp_int_modes := si di ti
+softfp_extensions := sftf dftf
+softfp_truncations := tfsf tfdf
+softfp_exclude_libgcc2 := n
+
+TARGET_LIBGCC2_CFLAGS += -Wno-missing-prototypes
+
+LIB2ADD += $(srcdir)/config/aarch64/sfp-exceptions.c
diff --git a/gcc-4.9/libgcc/config/alpha/crtfastmath.c b/gcc-4.9/libgcc/config/alpha/crtfastmath.c
new file mode 100644
index 000000000..8a7117692
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/crtfastmath.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ * Contributed by Richard Henderson (rth@redhat.com)
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Assume OSF/1 compatible interfaces. */
+
+extern void __ieee_set_fp_control (unsigned long int);
+
+#define IEEE_MAP_DMZ (1UL<<12) /* Map denorm inputs to zero */
+#define IEEE_MAP_UMZ (1UL<<13) /* Map underflowed outputs to zero */
+
+static void __attribute__((constructor))
+set_fast_math (void)
+{
+ __ieee_set_fp_control (IEEE_MAP_DMZ | IEEE_MAP_UMZ);
+}
diff --git a/gcc-4.9/libgcc/config/alpha/libgcc-alpha-ldbl.ver b/gcc-4.9/libgcc/config/alpha/libgcc-alpha-ldbl.ver
new file mode 100644
index 000000000..aa7f7c28b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/libgcc-alpha-ldbl.ver
@@ -0,0 +1,50 @@
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+%ifdef __LONG_DOUBLE_128__
+
+# long double 128 bit support in libgcc_s.so.1 is only available
+# when configured with --with-long-double-128. Make sure all the
+# symbols are available at @@GCC_LDBL_* versions to make it clear
+# there is a configurable symbol set.
+
+%exclude {
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+
+ __divtc3
+ __multc3
+ __powitf2
+}
+
+%inherit GCC_LDBL_3.0 GCC_3.0
+GCC_LDBL_3.0 {
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+}
+
+%inherit GCC_LDBL_4.0.0 GCC_4.0.0
+GCC_LDBL_4.0.0 {
+ __divtc3
+ __multc3
+ __powitf2
+}
+
+%endif
diff --git a/gcc-4.9/libgcc/config/alpha/linux-unwind.h b/gcc-4.9/libgcc/config/alpha/linux-unwind.h
new file mode 100644
index 000000000..b5bfd1c91
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/linux-unwind.h
@@ -0,0 +1,101 @@
+/* DWARF2 EH unwinding support for Alpha Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef inhibit_libc
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#include <signal.h>
+#include <sys/ucontext.h>
+
+#define MD_FALLBACK_FRAME_STATE_FOR alpha_fallback_frame_state
+
+static _Unwind_Reason_Code
+alpha_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned int *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+ int i;
+
+ if (pc[0] != 0x47fe0410 /* mov $30,$16 */
+ || pc[2] != 0x00000083) /* callsys */
+ return _URC_END_OF_STACK;
+ if (context->cfa == 0)
+ return _URC_END_OF_STACK;
+ if (pc[1] == 0x201f0067) /* lda $0,NR_sigreturn */
+ sc = context->cfa;
+ else if (pc[1] == 0x201f015f) /* lda $0,NR_rt_sigreturn */
+ {
+ struct rt_sigframe {
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_ = context->cfa;
+ sc = &rt_->uc.uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = sc->sc_regs[30];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 30;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+ for (i = 0; i < 30; ++i)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = (long) &sc->sc_regs[i] - new_cfa;
+ }
+ for (i = 0; i < 31; ++i)
+ {
+ fs->regs.reg[i+32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i+32].loc.offset
+ = (long) &sc->sc_fpregs[i] - new_cfa;
+ }
+ fs->regs.reg[64].how = REG_SAVED_OFFSET;
+ fs->regs.reg[64].loc.offset = (long)&sc->sc_pc - new_cfa;
+ fs->retaddr_column = 64;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+#define MD_FROB_UPDATE_CONTEXT alpha_frob_update_context
+
+/* Fix up for signal handlers that don't have S flag set. */
+
+static void
+alpha_frob_update_context (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs ATTRIBUTE_UNUSED)
+{
+ unsigned int *pc = context->ra;
+
+ if (pc[0] == 0x47fe0410 /* mov $30,$16 */
+ && pc[2] == 0x00000083 /* callsys */
+ && (pc[1] == 0x201f0067 /* lda $0,NR_sigreturn */
+ || pc[1] == 0x201f015f)) /* lda $0,NR_rt_sigreturn */
+ _Unwind_SetSignalFrame (context, 1);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/alpha/qrnnd.S b/gcc-4.9/libgcc/config/alpha/qrnnd.S
new file mode 100644
index 000000000..358ed4c5c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/qrnnd.S
@@ -0,0 +1,175 @@
+ # Alpha 21064 __udiv_qrnnd
+ # Copyright (C) 1992-2014 Free Software Foundation, Inc.
+
+ # This file is part of GCC.
+
+ # The GNU MP Library is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or (at your
+ # option) any later version.
+
+ # This file is distributed in the hope that it will be useful, but
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
+ # License for more details.
+
+ # Under Section 7 of GPL version 3, you are granted additional
+ # permissions described in the GCC Runtime Library Exception, version
+ # 3.1, as published by the Free Software Foundation.
+
+ # You should have received a copy of the GNU General Public License and
+ # a copy of the GCC Runtime Library Exception along with this program;
+ # see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ # <http://www.gnu.org/licenses/>.
+
+#ifdef __ELF__
+.section .note.GNU-stack,""
+#endif
+
+ .set noreorder
+ .set noat
+
+ .text
+
+ .globl __udiv_qrnnd
+ .ent __udiv_qrnnd
+#ifdef __VMS__
+__udiv_qrnnd..en:
+ .frame $29,0,$26,0
+ .prologue
+#else
+__udiv_qrnnd:
+ .frame $30,0,$26,0
+ .prologue 0
+#endif
+
+#define cnt $2
+#define tmp $3
+#define rem_ptr $16
+#define n1 $17
+#define n0 $18
+#define d $19
+#define qb $20
+#define AT $at
+
+ ldiq cnt,16
+ blt d,$largedivisor
+
+$loop1: cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule d,n1,qb
+ subq n1,d,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule d,n1,qb
+ subq n1,d,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule d,n1,qb
+ subq n1,d,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule d,n1,qb
+ subq n1,d,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ subq cnt,1,cnt
+ bgt cnt,$loop1
+ stq n1,0(rem_ptr)
+ bis $31,n0,$0
+ ret $31,($26),1
+
+$largedivisor:
+ and n0,1,$4
+
+ srl n0,1,n0
+ sll n1,63,tmp
+ or tmp,n0,n0
+ srl n1,1,n1
+
+ and d,1,$6
+ srl d,1,$5
+ addq $5,$6,$5
+
+$loop2: cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule $5,n1,qb
+ subq n1,$5,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule $5,n1,qb
+ subq n1,$5,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule $5,n1,qb
+ subq n1,$5,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ cmplt n0,0,tmp
+ addq n1,n1,n1
+ bis n1,tmp,n1
+ addq n0,n0,n0
+ cmpule $5,n1,qb
+ subq n1,$5,tmp
+ cmovne qb,tmp,n1
+ bis n0,qb,n0
+ subq cnt,1,cnt
+ bgt cnt,$loop2
+
+ addq n1,n1,n1
+ addq $4,n1,n1
+ bne $6,$Odd
+ stq n1,0(rem_ptr)
+ bis $31,n0,$0
+ ret $31,($26),1
+
+$Odd:
+ /* q' in n0. r' in n1 */
+ addq n1,n0,n1
+
+ cmpult n1,n0,tmp # tmp := carry from addq
+ subq n1,d,AT
+ addq n0,tmp,n0
+ cmovne tmp,AT,n1
+
+ cmpult n1,d,tmp
+ addq n0,1,AT
+ cmoveq tmp,AT,n0
+ subq n1,d,AT
+ cmoveq tmp,AT,n1
+
+ stq n1,0(rem_ptr)
+ bis $31,n0,$0
+ ret $31,($26),1
+
+#ifdef __VMS__
+ .link
+ .align 3
+__udiv_qrnnd:
+ .pdesc __udiv_qrnnd..en,null
+#endif
+ .end __udiv_qrnnd
diff --git a/gcc-4.9/libgcc/config/alpha/t-alpha b/gcc-4.9/libgcc/config/alpha/t-alpha
new file mode 100644
index 000000000..0b6ffb1ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/t-alpha
@@ -0,0 +1,2 @@
+# This is a support routine for longlong.h, used by libgcc2.c.
+LIB2ADD += $(srcdir)/config/alpha/qrnnd.S
diff --git a/gcc-4.9/libgcc/config/alpha/t-ieee b/gcc-4.9/libgcc/config/alpha/t-ieee
new file mode 100644
index 000000000..5fdc729ec
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/t-ieee
@@ -0,0 +1,2 @@
+# All alphas get an IEEE complaint set of libraries.
+HOST_LIBGCC2_CFLAGS += -mieee
diff --git a/gcc-4.9/libgcc/config/alpha/t-linux b/gcc-4.9/libgcc/config/alpha/t-linux
new file mode 100644
index 000000000..fabf38f9c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/t-linux
@@ -0,0 +1 @@
+SHLIB_MAPFILES += $(srcdir)/config/alpha/libgcc-alpha-ldbl.ver
diff --git a/gcc-4.9/libgcc/config/alpha/t-vms b/gcc-4.9/libgcc/config/alpha/t-vms
new file mode 100644
index 000000000..870e44c8d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/t-vms
@@ -0,0 +1,11 @@
+# This object must be linked with in order to make the executable debuggable.
+# vms-ld handles it automatically when passed -g.
+vms-dwarf2.o: $(srcdir)/config/alpha/vms-dwarf2.S
+ $(gcc_compile) -c -x assembler-with-cpp $<
+
+vms-dwarf2eh.o: $(srcdir)/config/alpha/vms-dwarf2eh.S
+ $(gcc_compile) -c -x assembler-with-cpp $<
+
+LIB2ADD += $(srcdir)/config/alpha/vms-gcc_shell_handler.c
+
+HOST_LIBGCC2_CFLAGS=-mpointer-size=64
diff --git a/gcc-4.9/libgcc/config/alpha/vms-dwarf2.S b/gcc-4.9/libgcc/config/alpha/vms-dwarf2.S
new file mode 100644
index 000000000..2c1751ce5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/vms-dwarf2.S
@@ -0,0 +1,77 @@
+/* VMS dwarf2 section sequentializer.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Douglas B. Rupp (rupp@gnat.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Linking with this file forces Dwarf2 debug sections to be
+ sequentially loaded by the VMS linker, enabling GDB to read them. */
+
+.section .debug_abbrev,NOWRT
+ .align 0
+ .globl $dwarf2.debug_abbrev
+$dwarf2.debug_abbrev:
+
+.section .debug_aranges,NOWRT
+ .align 0
+ .globl $dwarf2.debug_aranges
+$dwarf2.debug_aranges:
+
+.section .debug_frame,NOWRT
+ .align 0
+ .globl $dwarf2.debug_frame
+$dwarf2.debug_frame:
+
+.section .debug_info,NOWRT
+ .align 0
+ .globl $dwarf2.debug_info
+$dwarf2.debug_info:
+
+.section .debug_line,NOWRT
+ .align 0
+ .globl $dwarf2.debug_line
+$dwarf2.debug_line:
+
+.section .debug_loc,NOWRT
+ .align 0
+ .globl $dwarf2.debug_loc
+$dwarf2.debug_loc:
+
+.section .debug_macinfo,NOWRT
+ .align 0
+ .globl $dwarf2.debug_macinfo
+$dwarf2.debug_macinfo:
+
+.section .debug_pubnames,NOWRT
+ .align 0
+ .globl $dwarf2.debug_pubnames
+$dwarf2.debug_pubnames:
+
+.section .debug_str,NOWRT
+ .align 0
+ .globl $dwarf2.debug_str
+$dwarf2.debug_str:
+
+.section .debug_zzzzzz,NOWRT
+ .align 0
+ .globl $dwarf2.debug_zzzzzz
+$dwarf2.debug_zzzzzz:
diff --git a/gcc-4.9/libgcc/config/alpha/vms-dwarf2eh.S b/gcc-4.9/libgcc/config/alpha/vms-dwarf2eh.S
new file mode 100644
index 000000000..8f8072f99
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/vms-dwarf2eh.S
@@ -0,0 +1,30 @@
+/* VMS dwarf2 exception handling section sequentializer.
+ Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Contributed by Douglas B. Rupp (rupp@gnat.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Linking with this file forces the Dwarf2 EH section to be
+ individually loaded by the VMS linker an the unwinder to read it. */
+
+.section .eh_frame,NOWRT
+ .align 0
diff --git a/gcc-4.9/libgcc/config/alpha/vms-gcc_shell_handler.c b/gcc-4.9/libgcc/config/alpha/vms-gcc_shell_handler.c
new file mode 100644
index 000000000..199c416c7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/vms-gcc_shell_handler.c
@@ -0,0 +1,123 @@
+/* Static condition handler for Alpha/VMS.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* This file implements __gcc_shell_handler, the static VMS condition handler
+ used as the indirection wrapper around user level handlers installed with
+ establish_vms_condition_handler GCC builtin.
+
+ [ABI] in comments refers to the "HP OpenVMS calling standard" document
+ dated January 2005. */
+
+#include <vms/chfdef.h>
+#include <vms/pdscdef.h>
+#include <vms/ssdef.h>
+
+typedef void * ADDR;
+typedef unsigned long long REG;
+
+#define REG_AT(addr) (*(REG *)(addr))
+
+/* Compute pointer to procedure descriptor (Procedure Value) from Frame
+ Pointer FP, according to the rules in [ABI-3.5.1 Current Procedure]. */
+#define PV_FOR(FP) \
+ (((FP) != 0) \
+ ? (((REG_AT (FP) & 0x7) == 0) ? *(PDSCDEF **)(FP) : (PDSCDEF *)(FP)) : 0)
+
+long
+__gcc_shell_handler (struct chf$signal_array *sig_arr,
+ struct chf$mech_array *mech_arr);
+
+/* Helper for __gcc_shell_handler. Fetch the pointer to procedure currently
+ registered as the VMS condition handler for the live function with a frame
+ pointer FP. */
+
+static ADDR
+get_dyn_handler_pointer (REG fp)
+{
+ /* From the frame pointer we find the procedure descriptor, and fetch
+ the handler_data field from there. This field contains the offset
+ from FP at which the address of the currently installed handler is
+ to be found. */
+
+ PDSCDEF * pd = PV_FOR (fp);
+ /* Procedure descriptor pointer for the live subprogram with FP as the frame
+ pointer, and to which _gcc_shell_handler is attached as a condition
+ handler. */
+
+ REG handler_slot_offset;
+ /* Offset from FP at which the address of the currently established real
+ condition handler is to be found. This offset is available from the
+ handler_data field of the procedure descriptor. */
+
+ REG handler_data_offset;
+ /* The handler_data field position in the procedure descriptor, which
+ depends on the kind of procedure at hand. */
+
+ switch (pd->pdsc$w_flags & 0xf)
+ {
+ case PDSC$K_KIND_FP_STACK: /* [3.4.2 PD for stack frame procedures] */
+ handler_data_offset = 40;
+ break;
+
+ case PDSC$K_KIND_FP_REGISTER: /* [3.4.5 PD for reg frame procedures] */
+ handler_data_offset = 32;
+ break;
+
+ default:
+ handler_data_offset = 0;
+ break;
+ }
+
+ /* If we couldn't determine the handler_data field position, give up. */
+ if (handler_data_offset == 0)
+ return 0;
+
+ /* Otherwise, fetch the fp offset at which the real handler address is to be
+ found, then fetch and return the latter in turn. */
+
+ handler_slot_offset = REG_AT ((REG)pd + handler_data_offset);
+
+ return (ADDR) REG_AT (fp + handler_slot_offset);
+}
+
+/* The static VMS condition handler for GCC code. Fetch the address of the
+ currently established condition handler, then resignal if there is none or
+ call the handler with the VMS condition arguments. */
+
+long
+__gcc_shell_handler (struct chf$signal_array *sig_arr,
+ struct chf$mech_array *mech_arr)
+{
+ long ret;
+ long (*user_handler) (struct chf$signal_array *, struct chf$mech_array *);
+
+ user_handler = get_dyn_handler_pointer (mech_arr->chf$q_mch_frame);
+ if (!user_handler)
+ ret = SS$_RESIGNAL;
+ else
+ ret = user_handler (sig_arr, mech_arr);
+
+ return ret;
+}
+
diff --git a/gcc-4.9/libgcc/config/alpha/vms-unwind.h b/gcc-4.9/libgcc/config/alpha/vms-unwind.h
new file mode 100644
index 000000000..8bb477786
--- /dev/null
+++ b/gcc-4.9/libgcc/config/alpha/vms-unwind.h
@@ -0,0 +1,292 @@
+/* Fallback frame unwinding for Alpha/VMS.
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <vms/pdscdef.h>
+#include <vms/libicb.h>
+#include <vms/chfctxdef.h>
+#include <vms/chfdef.h>
+
+#define MD_FALLBACK_FRAME_STATE_FOR alpha_vms_fallback_frame_state
+
+typedef void * ADDR;
+typedef unsigned long long REG;
+typedef PDSCDEF * PV;
+
+#define REG_AT(addr) (*(REG *)(addr))
+#define ADDR_AT(addr) (*(ADDR *)(addr))
+
+/* Compute pointer to procedure descriptor (Procedure Value) from Frame
+ Pointer FP, according to the rules in [ABI-3.5.1 Current Procedure]. */
+#define PV_FOR(FP) \
+ (((FP) != 0) \
+ ? (((REG_AT (FP) & 0x7) == 0) ? *(PDSCDEF **)(FP) : (PDSCDEF *)(FP)) : 0)
+
+extern int SYS$GL_CALL_HANDL;
+/* This is actually defined as a "long", but in system code where longs
+ are always 4bytes while GCC longs might be 8bytes. */
+
+#define UPDATE_FS_FOR_CFA_GR(FS, GRN, LOC, CFA) \
+do { \
+(FS)->regs.reg[GRN].how = REG_SAVED_OFFSET; \
+(FS)->regs.reg[GRN].loc.offset = (_Unwind_Sword) ((REG) (LOC) - (REG) (CFA)); \
+} while (0);
+
+#define GIVEUP_ON_FAILURE(STATUS) \
+ { if ((((STATUS) & 1) != 1)) return _URC_END_OF_STACK; }
+#define DENOTES_EXC_DISPATCHER(PV) ((PV) == (ADDR) (REG) SYS$GL_CALL_HANDL)
+
+#define RA_COLUMN (DWARF_ALT_FRAME_RETURN_COLUMN)
+
+static int
+alpha_vms_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ static int eh_debug = -1;
+
+ /* Our goal is to update FS to reflect the state one step up CONTEXT, that
+ is: the CFA, return address and *saved* registers locations associated
+ with the function designated by CONTEXT->ra. We are called when the
+ libgcc unwinder has not found any dwarf FDE for this address, which
+ typically happens when trying to propagate a language exception through a
+ signal global vector or frame based handler.
+
+ The CONTEXT->reg[] entries reflect the state/location of register saves
+ so designate values live at the CONTEXT->ra point. Of precious value to
+ us here is the frame pointer (r29), which gets us a procedure value. */
+
+ PV pv = (context->reg[29] != 0) ? PV_FOR (ADDR_AT (context->reg[29])) : 0;
+
+ int pkind = pv ? pv->pdsc$w_flags & 0xf : 0;
+ /* VMS procedure kind, as indicated by the procedure descriptor. We only
+ know how to deal with FP_STACK or FP_REGISTER here. */
+
+ ADDR new_cfa = 0;
+ /* CFA we will establish for the caller, computed in different ways,
+ e.g. depending whether we cross an exception dispatcher frame. */
+
+ CHFCTX *chfctx = 0;
+ /* Pointer to the VMS CHF context associated with an exception dispatcher
+ frame, if we happen to come across one. */
+
+ int i,j;
+
+ if (eh_debug == -1)
+ {
+ char * eh_debug_env = getenv ("EH_DEBUG");
+ eh_debug = eh_debug_env ? atoi (eh_debug_env) : 0;
+ }
+
+ if (eh_debug)
+ printf ("MD_FALLBACK running ...\n");
+
+ /* We only know how to deal with stack or reg frame procedures, so give
+ up if we're handed anything else. */
+ if (pkind != PDSC$K_KIND_FP_STACK && pkind != PDSC$K_KIND_FP_REGISTER)
+ return _URC_END_OF_STACK;
+
+ if (eh_debug)
+ printf ("FALLBACK: CTX FP = 0x%p, PV = 0x%p, EN = 0x%llx, RA = 0x%p\n",
+ ADDR_AT (context->reg[29]), pv, pv->pdsc$q_entry, context->ra);
+
+ fs->retaddr_column = RA_COLUMN;
+
+ /* If PV designates a VMS exception vector or condition handler, we need to
+ do as if the caller was the signaling point and estabish the state of the
+ intermediate VMS code (CFA, RA and saved register locations) as if it was
+ a single regular function. This requires special processing.
+
+ The datastructures available from an condition dispatcher frame (signal
+ context) do not contain the values of most callee-saved registers, so
+ whathever PV designates, we need to account for the registers it saves.
+
+ Besides, we need to express all the locations with respect to a
+ consistent CFA value, so we compute this first. */
+
+ if (DENOTES_EXC_DISPATCHER (pv))
+ {
+ /* The CFA to establish is the signaling point's stack pointer. We
+ compute it using the system invocation context unwinding services and
+ save the CHF context data pointer along the way for later uses. */
+
+ INVO_CONTEXT_BLK icb;
+ int status, invo_handle;
+
+ if (eh_debug)
+ printf ("FALLBACK: SYS$HANDLER\n");
+
+ icb.libicb$q_ireg [29] = REG_AT (context->reg[29]);
+ icb.libicb$q_ireg [30] = 0;
+ invo_handle = LIB$GET_INVO_HANDLE (&icb);
+
+ status = LIB$GET_INVO_CONTEXT (invo_handle, &icb);
+ GIVEUP_ON_FAILURE (status);
+
+ chfctx = (CHFCTX *) icb.libicb$ph_chfctx_addr;
+
+ status = LIB$GET_PREV_INVO_CONTEXT (&icb);
+ GIVEUP_ON_FAILURE (status);
+
+ new_cfa = (ADDR) icb.libicb$q_ireg[30];
+ }
+ else
+ {
+ /* The CFA to establish is the SP value on entry of the procedure
+ designated by PV, which we compute as the corresponding frame base
+ register value + frame size. Note that the frame base may differ
+ from CONTEXT->cfa, typically if the caller has performed dynamic
+ stack allocations. */
+
+ int base_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30;
+ ADDR base_addr = ADDR_AT (context->reg[base_reg]);
+
+ new_cfa = base_addr + pv->pdsc$l_size;
+ }
+
+ /* State to compute the caller's CFA by adding an offset to the current
+ one in CONTEXT. */
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column ();
+ fs->regs.cfa_offset = new_cfa - context->cfa;
+
+ /* Regular unwind first, accounting for the register saves performed by
+ the procedure designated by PV. */
+
+ switch (pkind)
+ {
+ case PDSC$K_KIND_FP_STACK:
+ {
+ /* The saved registers are all located in the Register Save Area,
+ except for the procedure value register (R27) found at the frame
+ base address. */
+
+ int base_reg = pv->pdsc$w_flags & PDSC$M_BASE_REG_IS_FP ? 29 : 30;
+ ADDR base_addr = ADDR_AT (context->reg[base_reg]);
+ ADDR rsa_addr = base_addr + pv->pdsc$w_rsa_offset;
+
+ if (eh_debug)
+ printf ("FALLBACK: STACK frame procedure\n");
+
+ UPDATE_FS_FOR_CFA_GR (fs, 27, base_addr, new_cfa);
+
+ /* The first RSA entry is for the return address register, R26. */
+
+ UPDATE_FS_FOR_CFA_GR (fs, 26, rsa_addr, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, RA_COLUMN, rsa_addr, new_cfa);
+
+ /* The following entries are for registers marked as saved according
+ to ireg_mask. */
+ for (i = 0, j = 0; i < 32; i++)
+ if ((1 << i) & pv->pdsc$l_ireg_mask)
+ UPDATE_FS_FOR_CFA_GR (fs, i, rsa_addr + 8 * ++j, new_cfa);
+
+ /* ??? floating point registers ? */
+
+ break;
+ }
+
+ case PDSC$K_KIND_FP_REGISTER:
+ {
+ if (eh_debug)
+ printf ("FALLBACK: REGISTER frame procedure\n");
+
+ fs->regs.reg[RA_COLUMN].how = REG_SAVED_REG;
+ fs->regs.reg[RA_COLUMN].loc.reg = pv->pdsc$b_save_ra;
+
+ fs->regs.reg[29].how = REG_SAVED_REG;
+ fs->regs.reg[29].loc.reg = pv->pdsc$b_save_fp;
+
+ break;
+ }
+
+ default:
+ /* Should never reach here. */
+ return _URC_END_OF_STACK;
+ }
+
+ /* If PV designates an exception dispatcher, we have to adjust the return
+ address column to get at the signal occurrence point, and account for
+ what the CHF context contains. */
+
+ if (DENOTES_EXC_DISPATCHER (pv))
+ {
+ /* The PC of the instruction causing the condition is available from the
+ signal argument vector. Extra saved register values are available
+ from the mechargs array. */
+
+ CHF$SIGNAL_ARRAY *sigargs
+ = (CHF$SIGNAL_ARRAY *) chfctx->chfctx$q_sigarglst;
+
+ CHF$MECH_ARRAY *mechargs
+ = (CHF$MECH_ARRAY *) chfctx->chfctx$q_mcharglst;
+
+ ADDR condpc_addr
+ = &((int *)(&sigargs->chf$l_sig_name)) [sigargs->chf$is_sig_args-2];
+
+ ADDR rei_frame_addr = (void *) mechargs->chf$q_mch_esf_addr;
+
+ /* Adjust the return address location. */
+
+ UPDATE_FS_FOR_CFA_GR (fs, RA_COLUMN, condpc_addr, new_cfa);
+
+ /* The frame pointer at the condition point is available from the
+ chf context directly. */
+
+ UPDATE_FS_FOR_CFA_GR (fs, 29, &chfctx->chfctx$q_expt_fp, new_cfa);
+
+ /* Registers available from the mechargs array. */
+
+ UPDATE_FS_FOR_CFA_GR (fs, 0, &mechargs->chf$q_mch_savr0, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 1, &mechargs->chf$q_mch_savr1, new_cfa);
+
+ UPDATE_FS_FOR_CFA_GR (fs, 16, &mechargs->chf$q_mch_savr16, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 17, &mechargs->chf$q_mch_savr17, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 18, &mechargs->chf$q_mch_savr18, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 19, &mechargs->chf$q_mch_savr19, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 20, &mechargs->chf$q_mch_savr20, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 21, &mechargs->chf$q_mch_savr21, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 22, &mechargs->chf$q_mch_savr22, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 23, &mechargs->chf$q_mch_savr23, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 24, &mechargs->chf$q_mch_savr24, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 25, &mechargs->chf$q_mch_savr25, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 26, &mechargs->chf$q_mch_savr26, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 27, &mechargs->chf$q_mch_savr27, new_cfa);
+ UPDATE_FS_FOR_CFA_GR (fs, 28, &mechargs->chf$q_mch_savr28, new_cfa);
+
+ /* Registers R2 to R7 are available from the rei frame pointer. */
+
+ for (i = 2; i <= 7; i ++)
+ UPDATE_FS_FOR_CFA_GR (fs, i, rei_frame_addr+(i - 2)*8, new_cfa);
+
+ /* ??? floating point registers ? */
+ }
+
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+
+
diff --git a/gcc-4.9/libgcc/config/arc/asm.h b/gcc-4.9/libgcc/config/arc/asm.h
new file mode 100644
index 000000000..447f22ca0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/asm.h
@@ -0,0 +1,29 @@
+/* Assembler macros for the Synopsys DesignWare ARC CPU.
+
+ Copyright (C) 1994-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define FUNC(X) .type X,@function
+#define ENDFUNC(X) .size X, .-X
diff --git a/gcc-4.9/libgcc/config/arc/crtg.S b/gcc-4.9/libgcc/config/arc/crtg.S
new file mode 100644
index 000000000..c375cee8c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/crtg.S
@@ -0,0 +1,51 @@
+/* Code to start and stop profiling for the Synopsys DesignWare ARC CPU.
+
+ Copyright (C) 1994-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+ .section .init
+ .global _init
+ .global _fini
+ .global __monstartup
+ mov_s r0,_init
+ mov_s r1,_fini
+ jl __monstartup
+
+ .section .__arc_profile_desc, "a"
+ .global __arc_profile_desc_secstart
+ .balign 4
+__arc_profile_desc_secstart:
+ .section .__arc_profile_forward, "a"
+ .global __arc_profile_forward_secstart
+ .balign 4
+__arc_profile_forward_secstart:
+ .section .__arc_profile_counters, "aw"
+ .global __arc_profile_counters_secstart
+ .balign 4
+__arc_profile_counters_secstart:
+
+ .section .fini
+ .global _mcleanup
+ jl _mcleanup
diff --git a/gcc-4.9/libgcc/config/arc/crtgend.S b/gcc-4.9/libgcc/config/arc/crtgend.S
new file mode 100644
index 000000000..667222beb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/crtgend.S
@@ -0,0 +1,33 @@
+/* Code to start and stop profiling for the Synopsys DesignWare ARC CPU.
+
+ Copyright (C) 1994-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+ .section .__arc_profile_desc, "a"
+ .global __arc_profile_desc_secend
+__arc_profile_desc_secend:
+ .section .__arc_profile_forward, "a"
+ .global __arc_profile_forward_secend
+__arc_profile_forward_secend:
diff --git a/gcc-4.9/libgcc/config/arc/crti.S b/gcc-4.9/libgcc/config/arc/crti.S
new file mode 100644
index 000000000..71d67cd53
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/crti.S
@@ -0,0 +1,41 @@
+/* .fini/.init stack frame setup for the Synopsys DesignWare ARC CPU.
+
+ Copyright (C) 1994-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+# This file contains the stack frame setup for contents of the .fini and
+# .init sections.
+
+ .section .init
+ .global _init
+ .word 0
+_init:
+ push_s blink
+
+ .section .fini
+ .global _fini
+ .word 0
+_fini:
+ push_s blink
diff --git a/gcc-4.9/libgcc/config/arc/crtn.S b/gcc-4.9/libgcc/config/arc/crtn.S
new file mode 100644
index 000000000..d4be36bd5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/crtn.S
@@ -0,0 +1,38 @@
+/* Ensure .fini/.init return for the Synopsys DesignWare ARC CPU.
+
+ Copyright (C) 1994-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. This file is the last thing linked into any executable.
+
+ .section .init
+ pop_s blink
+ j_s [blink]
+
+
+ .section .fini
+ pop_s blink
+ j_s [blink]
diff --git a/gcc-4.9/libgcc/config/arc/divtab-arc700.c b/gcc-4.9/libgcc/config/arc/divtab-arc700.c
new file mode 100644
index 000000000..0074819d0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/divtab-arc700.c
@@ -0,0 +1,70 @@
+/* Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file. (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+/* Calculate division table for ARC700 integer division
+ Contributed by Joern Rennecke
+ joern.rennecke@arc.com */
+
+#include <stdio.h>
+#include <math.h>
+
+int
+main ()
+{
+ int i, j;
+ unsigned x;
+ double q, r, err, max_err = -1;
+
+ puts("/* This table has been generated by divtab-arc700.c. */");
+ puts("\
+/* 1/512 .. 1/256, normalized. There is a leading 1 in bit 31.\n\
+ For powers of two, we list unnormalized numbers instead. The values\n\
+ for powers of 2 are loaded, but not used. The value for 1 is actually\n\
+ the first instruction after .Lmuldiv. */\n\
+ .balign 4");
+ puts (".Ldivtab:\n");
+ for (i = 256; i >= 2; --i)
+ {
+ j = i < 0 ? -i : i;
+ if (j & (j-1))
+ while (j < 128)
+ j += j;
+ else
+ /* Power of two. */
+ j *= 128;
+ q = 4.*(1<<30)*128/j;
+ r = ceil (q);
+ printf ("\t.long\t0x%X\n", (unsigned) r);
+ err = r - q;
+ if (err > max_err)
+ max_err = err;
+ }
+#if 0
+ printf ("\t/* maximum error: %f */\n", max_err);
+#endif
+ exit (0);
+}
diff --git a/gcc-4.9/libgcc/config/arc/dp-hack.h b/gcc-4.9/libgcc/config/arc/dp-hack.h
new file mode 100644
index 000000000..30cd0680b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/dp-hack.h
@@ -0,0 +1,101 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* This file selects the double-precision parts of fp-bit.c that are
+ still needed for some ARC hardware variants; it also renames functions
+ that duplicate asm-coded functionality so that their results can be
+ used to compare with the optimized versions for debugging. */
+
+#define FINE_GRAINED_LIBRARIES
+#define ARC_DP_DEBUG 1
+#if !defined (__ARC_NORM__) || ARC_DP_DEBUG
+#define L_pack_df
+#define L_unpack_df
+#define L_make_df
+#define L_thenan_df
+#define L_sf_to_df
+#endif
+#ifndef __ARC_NORM__
+#define L_addsub_df
+#elif ARC_DP_DEBUG
+#define L_addsub_df
+#define __adddf3 __adddf3_c
+#define __subdf3 __subdf3_c
+#endif
+#ifndef __ARC_NORM__
+#define L_mul_df
+#define L_div_df
+#elif (!defined (__ARC700__) && !defined (__ARC_MUL64__) \
+ && !defined(__ARC_MUL32BY16__))
+#define L_mul_df
+#define L_div_df
+#undef QUIET_NAN
+#define QUIET_NAN 0xfffffffffffffLL
+#elif ARC_DP_DEBUG
+#define L_mul_df
+#define __muldf3 __muldf3_c
+#define L_div_df
+#define __divdf3 __divdf3_c
+#endif
+#ifndef __ARC_NORM__
+#define L_df_to_sf
+#define L_si_to_df
+#define L_df_to_si
+#define L_tf_to_usi /* need to defined this instead of df_to_usi */
+#define L_usi_to_df
+#elif ARC_DP_DEBUG
+#define L_df_to_sf
+#define __truncdfsf2 __truncdfsf2_c
+#define L_si_to_df
+#define __floatsidf __floatsidf_c
+#define L_df_to_si
+#define __fixdfsi __fixdfsi_c
+#define L_tf_to_usi
+#define __fixunsdfsi __fixunsdfsi_c
+#define L_usi_to_df
+#define __floatunsidf __floatunsidf_c
+#endif
+#ifndef __ARC_NORM__
+#define L_fpcmp_parts_df
+#define L_compare_df
+#define L_eq_df
+#define L_ne_df
+#define L_gt_df
+#define L_ge_df
+#define L_lt_df
+#define L_le_df
+#define L_unord_df
+#define L_negate_df
+#elif ARC_DP_DEBUG
+#define L_fpcmp_parts_df
+#define L_eq_df
+#define __eqdf2 __eqdf2_c
+#define L_gt_df
+#define __gtdf2 __gtdf2_c
+#define L_ge_df
+#define __gedf2 __gedf2_c
+#define L_unord_df
+#define __unorddf2 __unorddf2_c
+#endif
diff --git a/gcc-4.9/libgcc/config/arc/fp-hack.h b/gcc-4.9/libgcc/config/arc/fp-hack.h
new file mode 100644
index 000000000..dbd9f0c18
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/fp-hack.h
@@ -0,0 +1,85 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* This file selects the single-precision parts of fp-bit.c that are
+ still needed for some ARC hardware variants; it also renames functions
+ that duplicate asm-coded functionality so that their results can be
+ used to compare with the optimized versions for debugging. */
+
+#define ARC_FP_DEBUG 1
+#define FINE_GRAINED_LIBRARIES
+#if !defined (__ARC_NORM__) || ARC_FP_DEBUG
+#define L_pack_sf
+#define L_unpack_sf
+#define L_make_sf
+#define L_thenan_sf
+#endif
+#ifndef __ARC_NORM__
+#define L_addsub_sf
+#define L_mul_sf
+#define L_div_sf
+#define L_sf_to_df
+#define L_si_to_sf
+#define L_sf_to_si
+#define L_usi_to_sf
+#elif ARC_FP_DEBUG
+#define L_addsub_sf
+#define __addsf3 __addsf3_c
+#define __subsf3 __subsf3_c
+#define L_mul_sf
+#define __mulsf3 __mulsf3_c
+#define L_div_sf
+#define __divsf3 __divsf3_c
+#define L_sf_to_df
+#define __extendsfdf2 __extendsfdf2_c
+#define L_si_to_sf
+#define __floatsisf __floatsisf_c
+#define L_sf_to_si
+#define __fixsfsi __fixsfsi_c
+#define L_usi_to_sf
+#define __floatunsisf __floatunsisf_c
+#endif
+#ifndef __ARC_NORM__
+#define L_fpcmp_parts_sf
+#define L_compare_sf
+#define L_eq_sf
+#define L_ne_sf
+#define L_gt_sf
+#define L_ge_sf
+#define L_lt_sf
+#define L_le_sf
+#define L_unord_sf
+#define L_negate_sf
+#elif ARC_FP_DEBUG
+#define L_fpcmp_parts_sf
+#define L_eq_sf
+#define __eqsf2 __eqsf2_c
+#define L_gt_sf
+#define __gtsf2 __gtsf2_c
+#define L_ge_sf
+#define __gesf2 __gesf2_c
+#define L_unord_sf
+#define __unordsf2 __unordsf2_c
+#endif
diff --git a/gcc-4.9/libgcc/config/arc/gmon/atomic.h b/gcc-4.9/libgcc/config/arc/gmon/atomic.h
new file mode 100644
index 000000000..5db837857
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/atomic.h
@@ -0,0 +1,26 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* File deliberately left blank. */
diff --git a/gcc-4.9/libgcc/config/arc/gmon/auxreg.h b/gcc-4.9/libgcc/config/arc/gmon/auxreg.h
new file mode 100644
index 000000000..b23f7b779
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/auxreg.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define LP_START 0x02
+#define LP_END 0x03
+#define IDENTITY 0x04
+#define STATUS32 0x0a
+#define COUNT0 0x21 /* Timer 0 count */
+#define CONTROL0 0x22 /* Timer 0 control */
+#define LIMIT0 0x23 /* Timer 0 limit */
+#define INT_VECTOR_BASE 0x25
+#define D_CACHE_BUILD 0x72
+#define DC_FLDL 0x4c
diff --git a/gcc-4.9/libgcc/config/arc/gmon/dcache_linesz.S b/gcc-4.9/libgcc/config/arc/gmon/dcache_linesz.S
new file mode 100644
index 000000000..e532d374d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/dcache_linesz.S
@@ -0,0 +1,55 @@
+/* This file contains code to do profiling.
+
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../asm.h"
+#include "auxreg.h"
+/* This file contains code to do profiling. */
+ .weak __profile_timer_cycles
+ .global __profile_timer_cycles
+ .set __profile_timer_cycles, 200
+ .text
+ ; For Arctangent-A5, if no data cache is present, a read of the
+ ; cache build register returns the ID register. For ARC600 and
+ ; later, the version field will be zero.
+ .global __dcache_linesz
+ .balign 4
+__dcache_linesz:
+ lr r12,[D_CACHE_BUILD]
+ extb_s r0,r12
+ breq_s r0,0,.Lsz_nocache
+ brge r0,0x20,.Lsz_havecache
+ lr r0,[IDENTITY]
+ breq r12,r0,.Lsz_nocache
+.Lsz_havecache:
+ lsr_s r12,r12,16
+ mov_s r0,16
+ bmsk_s r12,r12,3
+ asl_s r0,r0,r12
+ j_s [blink]
+.Lsz_nocache:
+ mov_s r0,1
+ j_s [blink]
diff --git a/gcc-4.9/libgcc/config/arc/gmon/gmon.c b/gcc-4.9/libgcc/config/arc/gmon/gmon.c
new file mode 100644
index 000000000..3fd608352
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/gmon.c
@@ -0,0 +1,450 @@
+/*-
+ * Copyright (c) 1983, 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ * Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#if 0
+#include <sys/param.h>
+#include <sys/time.h>
+#endif
+#include <sys/gmon.h>
+#include <sys/gmon_out.h>
+
+#include <stddef.h>
+#include <errno.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#if 0
+#include <libc-internal.h>
+#include <not-cancel.h>
+
+#ifdef USE_IN_LIBIO
+# include <wchar.h>
+#endif
+#endif
+#define internal_function
+#define weak_alias(fun,aliasid) extern __typeof(fun) aliasid __attribute__ ((weak, alias (#fun)));
+#define __libc_enable_secure 0
+
+/* Head of basic-block list or NULL. */
+struct __bb *__bb_head attribute_hidden;
+
+struct gmonparam _gmonparam attribute_hidden = { GMON_PROF_OFF };
+
+/*
+ * See profil(2) where this is described:
+ */
+static int s_scale;
+#define SCALE_1_TO_1 0x10000L
+
+#define ERR(s) write (STDERR_FILENO, s, sizeof (s) - 1)
+
+void moncontrol (int mode);
+void __moncontrol (int mode);
+static void write_hist (int fd) internal_function;
+static void write_call_graph (int fd) internal_function;
+static void write_bb_counts (int fd) internal_function;
+
+/*
+ * Control profiling
+ * profiling is what mcount checks to see if
+ * all the data structures are ready.
+ */
+void
+__moncontrol (int mode)
+{
+ struct gmonparam *p = &_gmonparam;
+
+ /* Don't change the state if we ran into an error. */
+ if (p->state == GMON_PROF_ERROR)
+ return;
+
+ if (mode)
+ {
+ /* start */
+ __profil((void *) p->kcount, p->kcountsize, p->lowpc, s_scale);
+ p->state = GMON_PROF_ON;
+ }
+ else
+ {
+ /* stop */
+ __profil(NULL, 0, 0, 0);
+ p->state = GMON_PROF_OFF;
+ }
+}
+weak_alias (__moncontrol, moncontrol)
+
+
+void
+__monstartup (u_long lowpc, u_long highpc)
+{
+ register int o;
+ char *cp;
+ struct gmonparam *p = &_gmonparam;
+ int linesz;
+
+ /*
+ * round lowpc and highpc to multiples of the density we're using
+ * so the rest of the scaling (here and in gprof) stays in ints.
+ */
+ p->lowpc = ROUNDDOWN(lowpc, HISTFRACTION * sizeof(HISTCOUNTER));
+ if (sizeof *p->froms % sizeof(HISTCOUNTER) != 0)
+ {
+ p->highpc = ROUNDUP(highpc, HISTFRACTION * sizeof(HISTCOUNTER));
+ p->textsize = p->highpc - p->lowpc;
+ p->kcountsize = ROUNDUP((p->textsize + HISTFRACTION - 1) / HISTFRACTION,
+ sizeof (*p->froms));
+ }
+ else
+ {
+ /* Avoid odd scales by rounding up highpc to get kcountsize rounded. */
+ p->textsize = ROUNDUP (highpc - p->lowpc,
+ HISTFRACTION * sizeof (*p->froms));
+ p->highpc = p->lowpc + p->textsize;
+ p->kcountsize = p->textsize / HISTFRACTION;
+ }
+ p->hashfraction = HASHFRACTION;
+ p->log_hashfraction = -1;
+ /* The following test must be kept in sync with the corresponding
+ test in mcount.c. */
+ if ((HASHFRACTION & (HASHFRACTION - 1)) == 0) {
+ /* if HASHFRACTION is a power of two, mcount can use shifting
+ instead of integer division. Precompute shift amount. */
+ p->log_hashfraction = ffs(p->hashfraction * sizeof(*p->froms)) - 1;
+ }
+ p->tolimit = p->textsize * ARCDENSITY / 100;
+ if (p->tolimit < MINARCS)
+ p->tolimit = MINARCS;
+ else if (p->tolimit > MAXARCS)
+ p->tolimit = MAXARCS;
+ p->tossize = p->tolimit * sizeof(struct tostruct);
+
+ /* p->kcount must not share cache lines with the adjacent data, because
+ we use uncached accesses while profiling. */
+ linesz = __dcache_linesz ();
+ cp = calloc (ROUNDUP (p->kcountsize, linesz) + p->tossize
+ + (linesz - 1), 1);
+ if (! cp)
+ {
+ ERR("monstartup: out of memory\n");
+ p->tos = NULL;
+ p->state = GMON_PROF_ERROR;
+ /* In case we loose the error state due to a race,
+ prevent invalid writes also by clearing tolimit. */
+ p->tolimit = 0;
+ return;
+ }
+ p->tos = (struct tostruct *)cp;
+ cp += p->tossize;
+ cp = (char *) ROUNDUP ((ptrdiff_t) cp, linesz);
+ p->kcount = (HISTCOUNTER *)cp;
+ cp += ROUNDUP (p->kcountsize, linesz);
+
+ p->tos[0].link = 0;
+
+ o = p->highpc - p->lowpc;
+ if (p->kcountsize < (u_long) o)
+ {
+#ifndef hp300
+ s_scale = ((float)p->kcountsize / o ) * SCALE_1_TO_1;
+#else
+ /* avoid floating point operations */
+ int quot = o / p->kcountsize;
+
+ if (quot >= 0x10000)
+ s_scale = 1;
+ else if (quot >= 0x100)
+ s_scale = 0x10000 / quot;
+ else if (o >= 0x800000)
+ s_scale = 0x1000000 / (o / (p->kcountsize >> 8));
+ else
+ s_scale = 0x1000000 / ((o << 8) / p->kcountsize);
+#endif
+ } else
+ s_scale = SCALE_1_TO_1;
+
+ __moncontrol(1);
+}
+weak_alias (__monstartup, monstartup)
+
+
+static void
+internal_function
+write_hist (int fd)
+{
+ u_char tag = GMON_TAG_TIME_HIST;
+ struct arc_gmon_hist_hdr thdr __attribute__ ((aligned (__alignof__ (char *))));
+ int r;
+
+ if (_gmonparam.kcountsize > 0)
+ {
+ *(char **) thdr.low_pc = (char *) _gmonparam.lowpc;
+ *(char **) thdr.high_pc = (char *) _gmonparam.highpc;
+ *(int32_t *) thdr.hist_size = (_gmonparam.kcountsize
+ / sizeof (HISTCOUNTER));
+ *(int32_t *) thdr.prof_rate = __profile_frequency ();
+ strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
+ thdr.dimen_abbrev = 's';
+
+ r = write (fd, &tag, sizeof tag);
+ if (r != sizeof tag)
+ return;
+ r = write (fd, &thdr, sizeof thdr);
+ if (r != sizeof thdr)
+ return;
+ r = write (fd,_gmonparam.kcount, _gmonparam.kcountsize);
+ if ((unsigned) r != _gmonparam.kcountsize)
+ return;
+ }
+}
+
+
+static void
+internal_function
+write_call_graph (int fd)
+{
+#define NARCS_PER_WRITE 64
+#define BYTES_PER_ARC (1 + sizeof (struct gmon_cg_arc_record))
+#define BYTES_PER_WRITE (BYTES_PER_ARC * NARCS_PER_WRITE)
+ ARCINDEX to_index;
+ u_long frompc, selfpc, count;
+ char buffer[BYTES_PER_WRITE], *p;
+ u_long *prof_desc = __arc_profile_desc_secstart;
+ u_long *prof_count = __arc_profile_counters_secstart;
+ u_long *prof_desc_end = __arc_profile_desc_secend;
+ u_long *prof_forward = __arc_profile_forward_secstart;
+
+ for (p = buffer; p < buffer + BYTES_PER_WRITE; p += BYTES_PER_ARC)
+ *p = GMON_TAG_CG_ARC;
+ p = buffer;
+ frompc = *prof_desc++ & -2;
+ while (prof_desc < prof_desc_end)
+ {
+ selfpc = *prof_desc++;
+ if (selfpc & 1)
+ {
+ frompc = selfpc & -2;
+ selfpc = *prof_desc++;
+ }
+ count = *prof_count++;
+ if (selfpc)
+ {
+ struct arc
+ {
+ char *frompc;
+ char *selfpc;
+ int32_t count;
+ }
+ arc;
+
+ if (!count)
+ continue;
+ arc.frompc = (char *) frompc;
+ arc.selfpc = (char *) selfpc;
+ arc.count = count;
+ memcpy (p + 1, &arc, sizeof arc);
+ p += 1 + sizeof arc;
+
+ if (p == buffer + BYTES_PER_WRITE)
+ {
+ write (fd, buffer, BYTES_PER_WRITE);
+ p = buffer;
+ }
+ }
+ else
+ {
+ for (to_index = count;
+ to_index != 0;
+ to_index = _gmonparam.tos[to_index].link)
+ {
+ struct arc
+ {
+ char *frompc;
+ char *selfpc;
+ int32_t count;
+ }
+ arc;
+
+ arc.frompc = (char *) frompc;
+ arc.selfpc = (char *) _gmonparam.tos[to_index].selfpc;
+ arc.count = _gmonparam.tos[to_index].count;
+ memcpy (p + 1, &arc, sizeof arc);
+ p += 1 + sizeof arc;
+
+ if (p == buffer + BYTES_PER_WRITE)
+ {
+ write (fd, buffer, BYTES_PER_WRITE);
+ p = buffer;
+ }
+ }
+ }
+ }
+ while (prof_forward < __arc_profile_forward_secend)
+ {
+ /* ??? The 'call count' is actually supposed to be a fixed point
+ factor, with 16 bits each before and after the point.
+ It would be much nicer if we figured out the actual number
+ of calls to the caller, and multiplied that with the fixed point
+ factor to arrive at the estimated calls for the callee. */
+ memcpy (p + 1, prof_forward, 3 * sizeof *prof_forward);
+ prof_forward += 3;
+ p += 1 + 3 * sizeof *prof_forward;
+ if (p == buffer + BYTES_PER_WRITE)
+ {
+ write (fd, buffer, BYTES_PER_WRITE);
+ p = buffer;
+ }
+ }
+ if (p != buffer)
+ write (fd, buffer, p - buffer);
+}
+
+
+static void
+internal_function
+write_bb_counts (int fd)
+{
+ struct __bb *grp;
+ u_char tag = GMON_TAG_BB_COUNT;
+ size_t ncounts;
+ size_t i;
+
+ struct { unsigned long address; long count; } bbbody[8];
+ size_t nfilled;
+
+ /* Write each group of basic-block info (all basic-blocks in a
+ compilation unit form a single group). */
+
+ for (grp = __bb_head; grp; grp = grp->next)
+ {
+ ncounts = grp->ncounts;
+ write (fd, &tag, 1);
+ write (fd, &ncounts, sizeof ncounts);
+ for (nfilled = i = 0; i < ncounts; ++i)
+ {
+ if (nfilled == sizeof (bbbody) / sizeof (bbbody[0]))
+ {
+ write (fd, bbbody, sizeof bbbody);
+ nfilled = 0;
+ }
+
+ bbbody[nfilled].address = grp->addresses[i];
+ bbbody[nfilled++].count = grp->counts[i];
+ }
+ if (nfilled > 0)
+ write (fd, bbbody, nfilled * sizeof bbbody[0]);
+ }
+}
+
+
+static void
+write_gmon (void)
+{
+ struct gmon_hdr ghdr __attribute__ ((aligned (__alignof__ (int))));
+ int fd = -1;
+ char *env;
+
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+ env = getenv ("GMON_OUT_PREFIX");
+ if (env != NULL && !__libc_enable_secure)
+ {
+ size_t len = strlen (env);
+ char buf[len + 20];
+ snprintf (buf, sizeof (buf), "%s.%u", env, getpid ());
+ fd = open (buf, O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW, 0666);
+ }
+
+ if (fd == -1)
+ {
+ fd = open ("gmon.out", O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW,
+ 0666);
+ if (fd < 0)
+ {
+ perror ("_mcleanup: gmon.out");
+ return;
+ }
+ }
+
+ /* write gmon.out header: */
+ memset (&ghdr, '\0', sizeof (struct gmon_hdr));
+ memcpy (&ghdr.cookie[0], GMON_MAGIC, sizeof (ghdr.cookie));
+ *(int32_t *) ghdr.version = GMON_VERSION;
+ write (fd, &ghdr, sizeof (struct gmon_hdr));
+
+ /* write PC histogram: */
+ write_hist (fd);
+
+ /* write call-graph: */
+ write_call_graph (fd);
+
+ /* write basic-block execution counts: */
+ write_bb_counts (fd);
+
+ close (fd);
+}
+
+
+void
+__write_profiling (void)
+{
+ int save = _gmonparam.state;
+ _gmonparam.state = GMON_PROF_OFF;
+ if (save == GMON_PROF_ON)
+ write_gmon ();
+ _gmonparam.state = save;
+}
+#ifndef SHARED
+/* This symbol isn't used anywhere in the DSO and it is not exported.
+ This would normally mean it should be removed to get the same API
+ in static libraries. But since profiling is special in static libs
+ anyway we keep it. But not when building the DSO since some
+ quality assurance tests will otherwise trigger. */
+weak_alias (__write_profiling, write_profiling)
+#endif
+
+
+void
+_mcleanup (void)
+{
+ __moncontrol (0);
+
+ if (_gmonparam.state != GMON_PROF_ERROR)
+ write_gmon ();
+
+ /* free the memory. */
+ if (_gmonparam.tos != NULL)
+ free (_gmonparam.tos);
+}
diff --git a/gcc-4.9/libgcc/config/arc/gmon/machine-gmon.h b/gcc-4.9/libgcc/config/arc/gmon/machine-gmon.h
new file mode 100644
index 000000000..2199d5abb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/machine-gmon.h
@@ -0,0 +1,65 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef MACHINE_GMON_H
+#define MACHINE_GMON_H
+
+/* We can't fake out own <sys/types.h> header because the newlib / uclibc
+ headers in GCC_FOR_TARGET take precedence. */
+
+#define __BEGIN_DECLS
+#define __END_DECLS
+
+#define __THROW
+
+extern int __dcache_linesz (void);
+
+#define _MCOUNT_DECL(countp, selfpc) \
+ static inline void _mcount_internal (void *countp, u_long selfpc)
+
+extern void _mcount (void);
+extern void _mcount_call (void);
+
+/* N.B.: the calling point might be a sibcall, thus blink does not necessarily
+ hold the caller's address. r8 doesn't hold the caller's address, either,
+ but rather a pointer to the counter data structure associated with the
+ caller.
+ This function must be compiled with optimization turned on in order to
+ enable a sibcall for the final call to selfpc; this is important when trying
+ to profile a program with deep tail-recursion that would get a stack
+ overflow otherwise. */
+#define MCOUNT \
+void \
+_mcount_call (void) \
+{ \
+ register void *countp __asm("r8"); \
+ register u_long selfpc __asm("r9"); \
+ _mcount_internal (countp, selfpc); \
+ ((void (*)(void)) selfpc) (); \
+}
+
+extern int __profil (u_short *,size_t, size_t, u_int);
+
+#endif /* MACHINE_GMON_H */
diff --git a/gcc-4.9/libgcc/config/arc/gmon/mcount.c b/gcc-4.9/libgcc/config/arc/gmon/mcount.c
new file mode 100644
index 000000000..ebd71e00d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/mcount.c
@@ -0,0 +1,206 @@
+/*-
+ * Copyright (c) 1983, 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if !defined(lint) && !defined(KERNEL) && defined(LIBC_SCCS)
+static char sccsid[] = "@(#)mcount.c 8.1 (Berkeley) 6/4/93";
+#endif
+
+#if 0
+#include <unistd.h>
+#include <sys/param.h>
+#endif
+#include <sys/gmon.h>
+
+/* This file provides the machine-dependent definitions of the _MCOUNT_DECL
+ and MCOUNT macros. */
+#include <machine-gmon.h>
+
+#include <atomic.h>
+
+/*
+ * mcount is called on entry to each function compiled with the profiling
+ * switch set. _mcount(), which is declared in a machine-dependent way
+ * with _MCOUNT_DECL, does the actual work and is either inlined into a
+ * C routine or called by an assembly stub. In any case, this magic is
+ * taken care of by the MCOUNT definition in <machine/profile.h>.
+ *
+ * _mcount updates data structures that represent traversals of the
+ * program's call graph edges. frompc and selfpc are the return
+ * address and function address that represents the given call graph edge.
+ *
+ * Note: the original BSD code used the same variable (frompcindex) for
+ * both frompcindex and frompc. Any reasonable, modern compiler will
+ * perform this optimization.
+ */
+_MCOUNT_DECL(count_ptr, selfpc) /* _mcount; may be static, inline, etc */
+{
+ register ARCINDEX *frompcindex;
+ register struct tostruct *top, *prevtop;
+ register struct gmonparam *p;
+ register ARCINDEX toindex;
+
+ /* Check for nested function trampoline. */
+ if (selfpc & 2)
+ selfpc = *(u_long *) (selfpc + 10);
+
+ p = &_gmonparam;
+ /*
+ * check that we are profiling
+ * and that we aren't recursively invoked.
+ */
+#if 0
+ if (catomic_compare_and_exchange_bool_acq (&p->state, GMON_PROF_BUSY,
+ GMON_PROF_ON))
+ return;
+#elif defined (__ARC700__)
+/* ??? This could temporarily lose the ERROR / OFF condition in a race,
+ but doing an actual compare_and_exchange would be too costly. It would
+ be better if we had a semaphore independent of the 'sticky' state, but
+ then we could run into ABI compatibility problems with the size of struct
+ gmonparam. */
+ {
+ u_long old_state;
+
+ __asm ("ex %0,%1": "=r" (old_state), "+m" (p->state)
+ : "0" (GMON_PROF_BUSY));
+ if (old_state != GMON_PROF_ON)
+ {
+ switch (old_state)
+ {
+ case GMON_PROF_OFF:
+ __asm ("ex %0,%1": "+r" (old_state), "+m" (p->state));
+ if (old_state == GMON_PROF_BUSY
+ /* Switching off while we say we are busy while profiling
+ was actually already switched off is all right. */
+ || old_state == GMON_PROF_OFF)
+ break;
+ /* It is not clear if we should allow switching on
+ profiling at this point, and how to handle further races.
+ For now, record an error in this case. */
+ /* Fall through. */
+ default: /* We expect here only GMON_PROF_ERROR. */
+ p->state = GMON_PROF_ERROR;
+ break;
+ case GMON_PROF_BUSY: break;
+ }
+ return;
+ }
+ }
+#else /* ??? No semaphore primitives available. */
+ if (p->state != GMON_PROF_ON)
+ return;
+ p->state = GMON_PROF_BUSY;
+#endif
+
+ frompcindex = count_ptr;
+ toindex = *frompcindex;
+ if (toindex == 0) {
+ /*
+ * first time traversing this arc
+ */
+ toindex = ++p->tos[0].link;
+ if (toindex >= (ARCINDEX) p->tolimit)
+ /* halt further profiling */
+ goto overflow;
+
+ *frompcindex = toindex;
+ top = &p->tos[toindex];
+ top->selfpc = selfpc;
+ top->count = 1;
+ top->link = 0;
+ goto done;
+ }
+ top = &p->tos[toindex];
+ if (top->selfpc == selfpc) {
+ /*
+ * arc at front of chain; usual case.
+ */
+ top->count++;
+ goto done;
+ }
+ /*
+ * have to go looking down chain for it.
+ * top points to what we are looking at,
+ * prevtop points to previous top.
+ * we know it is not at the head of the chain.
+ */
+ for (; /* goto done */; ) {
+ if (top->link == 0) {
+ /*
+ * top is end of the chain and none of the chain
+ * had top->selfpc == selfpc.
+ * so we allocate a new tostruct
+ * and link it to the head of the chain.
+ */
+ toindex = ++p->tos[0].link;
+ if (toindex >= (ARCINDEX) p->tolimit)
+ goto overflow;
+
+ top = &p->tos[toindex];
+ top->selfpc = selfpc;
+ top->count = 1;
+ top->link = *frompcindex;
+ *frompcindex = toindex;
+ goto done;
+ }
+ /*
+ * otherwise, check the next arc on the chain.
+ */
+ prevtop = top;
+ top = &p->tos[top->link];
+ if (top->selfpc == selfpc) {
+ /*
+ * there it is.
+ * increment its count
+ * move it to the head of the chain.
+ */
+ top->count++;
+ toindex = prevtop->link;
+ prevtop->link = top->link;
+ top->link = *frompcindex;
+ *frompcindex = toindex;
+ goto done;
+ }
+
+ }
+done:
+ p->state = GMON_PROF_ON;
+ return;
+overflow:
+ p->state = GMON_PROF_ERROR;
+ return;
+}
+
+/*
+ * Actual definition of mcount function. Defined in <machine/profile.h>,
+ * which is included by <sys/gmon.h>.
+ */
+MCOUNT
diff --git a/gcc-4.9/libgcc/config/arc/gmon/prof-freq-stub.S b/gcc-4.9/libgcc/config/arc/gmon/prof-freq-stub.S
new file mode 100644
index 000000000..4a48c5202
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/prof-freq-stub.S
@@ -0,0 +1,40 @@
+/* This file contains code to do profiling.
+
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../asm.h"
+/* This file contains code to do profiling. */
+ .weak __profile_frequency_value
+ .global __profile_frequency_value
+ .set __profile_frequency_value, 1000
+ .text
+ .balign 4
+ .global __profile_frequency
+ FUNC(__profile_frequency)
+__profile_frequency:
+ mov_s r0,__profile_frequency_value
+ j_s [blink]
+ ENDFUNC(__profile_frequency)
diff --git a/gcc-4.9/libgcc/config/arc/gmon/prof-freq.c b/gcc-4.9/libgcc/config/arc/gmon/prof-freq.c
new file mode 100644
index 000000000..4ae82d8ac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/prof-freq.c
@@ -0,0 +1,60 @@
+/* Return frequency of ticks reported by profil. Generic version. */
+/*-
+ * Copyright (c) 1983, 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+#include <sys/types.h>
+#include <sys/time.h>
+#if 0
+#include <libc-internal.h>
+#else
+#include "sys/gmon.h"
+#endif
+
+int
+__profile_frequency (void)
+{
+ /*
+ * Discover the tick frequency of the machine if something goes wrong,
+ * we return 0, an impossible hertz.
+ */
+ struct itimerval tim;
+
+ tim.it_interval.tv_sec = 0;
+ tim.it_interval.tv_usec = 1;
+ tim.it_value.tv_sec = 0;
+ tim.it_value.tv_usec = 0;
+ setitimer(ITIMER_REAL, &tim, 0);
+ setitimer(ITIMER_REAL, 0, &tim);
+ if (tim.it_interval.tv_usec < 2)
+ return 0;
+ return (1000000 / tim.it_interval.tv_usec);
+}
diff --git a/gcc-4.9/libgcc/config/arc/gmon/profil.S b/gcc-4.9/libgcc/config/arc/gmon/profil.S
new file mode 100644
index 000000000..b9ca79e6a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/profil.S
@@ -0,0 +1,153 @@
+/* This file contains code to do profiling.
+
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../asm.h"
+#include "auxreg.h"
+/* This file contains code to do profiling. */
+ .weak __profile_timer_cycles
+ .global __profile_timer_cycles
+ .set __profile_timer_cycles, 200
+
+ .section .bss
+ .global __profil_offset
+ .align 4
+ .type __profil_offset, @object
+ .size __profil_offset, 4
+__profil_offset:
+ .zero 4
+
+ .text
+ .global __dcache_linesz
+ .global __profil
+ FUNC(__profil)
+.Lstop_profiling:
+ sr r0,[CONTROL0]
+ j_s [blink]
+ .balign 4
+__profil:
+.Lprofil:
+ breq_s r0,0,.Lstop_profiling
+ ; r0: buf r1: bufsiz r2: offset r3: scale
+ bxor.f r3,r3,15; scale must be 0x8000, i.e. 1/2; generate 0.
+ push_s blink
+ lsr_s r2,r2,1
+ mov_s r8,r0
+ flag.ne 1 ; halt if wrong scale
+ sub_s r0,r0,r2
+ st r0,[__profil_offset]
+ bl __dcache_linesz
+ pop_s blink
+ bbit1.d r0,0,nocache
+ mov_s r0,r8
+#ifdef __ARC700__
+ add_s r1,r1,31
+ lsr.f lp_count,r1,5
+ lpne 2f
+ sr r0,[DC_FLDL]
+ add_s r0,r0,32
+#else /* !__ARC700__ */
+# FIX ME: set up loop according to cache line size
+ lr r12,[D_CACHE_BUILD]
+ sub_s r0,r0,16
+ sub_s r1,r1,1
+ lsr_s r12,r12,16
+ asr_s r1,r1,4
+ bmsk_s r12,r12,3
+ asr_s r1,r1,r12
+ add.f lp_count,r1,1
+ mov_s r1,16
+ asl_s r1,r1,r12
+ lpne 2f
+ add r0,r0,r1
+ sr r0,[DC_FLDL]
+#endif /* __ARC700__ */
+2: b_s .Lcounters_cleared
+nocache:
+.Lcounters_cleared:
+ lr r1,[INT_VECTOR_BASE] ; disable timer0 interrupts
+ sr r3,[CONTROL0]
+ sr r3,[COUNT0]
+0: ld_s r0,[pcl,1f-0b+((0b-.Lprofil) & 2)] ; 1f@GOTOFF
+0: ld_s r12,[pcl,1f+4-0b+((0b-.Lprofil) & 2)] ; 1f@GOTOFF + 4
+ st_s r0,[r1,24]; timer0 uses vector3
+ st_s r12,[r1,24+4]; timer0 uses vector3
+ ;sr 10000,[LIMIT0]
+ sr __profile_timer_cycles,[LIMIT0]
+ mov_s r12,3 ; enable timer interrupts; count only when not halted.
+ sr r12,[CONTROL0]
+ lr r12,[STATUS32]
+ bset_s r12,r12,1 ; allow level 1 interrupts
+ flag r12
+ mov_s r0,0
+ j_s [blink]
+ .balign 4
+1: j __profil_irq
+ ENDFUNC(__profil)
+
+ FUNC(__profil_irq)
+ .balign 4 ; make final jump unaligned to avoid delay penalty
+ .balign 32,0,12 ; make sure the code spans no more that two cache lines
+ nop_s
+__profil_irq:
+ push_s r0
+ ld r0,[__profil_offset]
+ push_s r1
+ lsr r1,ilink1,2
+ push_s r2
+ ldw.as.di r2,[r0,r1]
+ add1 r0,r0,r1
+ ld_s r1,[sp,4]
+ add_s r2,r2,1
+ bbit1 r2,16,nostore
+ stw.di r2,[r0]
+nostore:ld.ab r2,[sp,8]
+ pop_s r0
+ j.f [ilink1]
+ ENDFUNC(__profil_irq)
+
+; could save one cycle if the counters were allocated at link time and
+; the contents of __profil_offset were pre-computed at link time, like this:
+#if 0
+; __profil_offset needs to be PROVIDEd as __profile_base-text/4
+ .global __profil_offset
+ .balign 4
+__profil_irq:
+ push_s r0
+ lsr r0,ilink1,2
+ add1 r0,__profil_offset,r0
+ push_s r1
+ ldw.di r1,[r0]
+
+
+ add_s r1,r1,1
+ bbit1 r1,16,nostore
+ stw.di r1,[r0]
+nostore:pop_s r1
+ pop_s r0
+ j [ilink1]
+#endif /* 0 */
diff --git a/gcc-4.9/libgcc/config/arc/gmon/sys/gmon.h b/gcc-4.9/libgcc/config/arc/gmon/sys/gmon.h
new file mode 100644
index 000000000..33564ba7a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/sys/gmon.h
@@ -0,0 +1,217 @@
+/*-
+ * Copyright (c) 1982, 1986, 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ * Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)gmon.h 8.2 (Berkeley) 1/4/94
+ */
+
+#ifndef _SYS_GMON_H
+#define _SYS_GMON_H 1
+
+#if 0
+#include <features.h>
+#include <sys/types.h>
+#else
+#include <sys/types.h>
+#include "machine-gmon.h"
+#define attribute_hidden __attribute__ ((visibility("hidden")))
+#endif
+
+#include <stdint.h>
+
+/*
+ * See gmon_out.h for gmon.out format.
+ */
+
+/* structure emitted by "gcc -a". This must match struct bb in
+ gcc/libgcc2.c. It is OK for gcc to declare a longer structure as
+ long as the members below are present. */
+struct __bb
+{
+ long zero_word;
+ const char *filename;
+ long *counts;
+ long ncounts;
+ struct __bb *next;
+ const unsigned long *addresses;
+};
+
+extern struct __bb *__bb_head;
+
+/*
+ * histogram counters are unsigned shorts (according to the kernel).
+ */
+#define HISTCOUNTER unsigned short
+
+/*
+ * fraction of text space to allocate for histogram counters here, 1/2
+ */
+#define HISTFRACTION 2
+
+/*
+ * Fraction of text space to allocate for from hash buckets.
+ * The value of HASHFRACTION is based on the minimum number of bytes
+ * of separation between two subroutine call points in the object code.
+ * Given MIN_SUBR_SEPARATION bytes of separation the value of
+ * HASHFRACTION is calculated as:
+ *
+ * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
+ *
+ * For example, on the VAX, the shortest two call sequence is:
+ *
+ * calls $0,(r0)
+ * calls $0,(r0)
+ *
+ * which is separated by only three bytes, thus HASHFRACTION is
+ * calculated as:
+ *
+ * HASHFRACTION = 3 / (2 * 2 - 1) = 1
+ *
+ * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
+ * is less than three, this algorithm will not work!
+ *
+ * In practice, however, call instructions are rarely at a minimal
+ * distance. Hence, we will define HASHFRACTION to be 2 across all
+ * architectures. This saves a reasonable amount of space for
+ * profiling data structures without (in practice) sacrificing
+ * any granularity.
+ */
+#define HASHFRACTION 2
+
+/*
+ * Percent of text space to allocate for tostructs.
+ * This is a heuristic; we will fail with a warning when profiling programs
+ * with a very large number of very small functions, but that's
+ * normally OK.
+ * 2 is probably still a good value for normal programs.
+ * Profiling a test case with 64000 small functions will work if
+ * you raise this value to 3 and link statically (which bloats the
+ * text size, thus raising the number of arcs expected by the heuristic).
+ */
+#define ARCDENSITY 3
+
+/*
+ * Always allocate at least this many tostructs. This
+ * hides the inadequacy of the ARCDENSITY heuristic, at least
+ * for small programs.
+ */
+#define MINARCS 50
+
+/*
+ * The type used to represent indices into gmonparam.tos[].
+ */
+#define ARCINDEX u_long
+
+/*
+ * Maximum number of arcs we want to allow.
+ * Used to be max representable value of ARCINDEX minus 2, but now
+ * that ARCINDEX is a long, that's too large; we don't really want
+ * to allow a 48 gigabyte table.
+ * The old value of 1<<16 wasn't high enough in practice for large C++
+ * programs; will 1<<20 be adequate for long? FIXME
+ */
+#define MAXARCS (1 << 20)
+
+struct tostruct {
+ u_long selfpc;
+ long count;
+ ARCINDEX link;
+};
+
+/*
+ * a raw arc, with pointers to the calling site and
+ * the called site and a count.
+ */
+struct rawarc {
+ u_long raw_frompc;
+ u_long raw_selfpc;
+ long raw_count;
+};
+
+/*
+ * general rounding functions.
+ */
+#define ROUNDDOWN(x,y) (((x)/(y))*(y))
+#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
+
+/*
+ * The profiling data structures are housed in this structure.
+ */
+struct gmonparam {
+ long int state;
+ u_short *kcount;
+ u_long kcountsize;
+ ARCINDEX *froms;
+ u_long fromssize;
+ struct tostruct *tos;
+ u_long tossize;
+ long tolimit;
+ u_long lowpc;
+ u_long highpc;
+ u_long textsize;
+ u_long hashfraction;
+ long log_hashfraction;
+};
+extern struct gmonparam _gmonparam;
+
+/*
+ * Possible states of profiling.
+ */
+#define GMON_PROF_ON 0
+#define GMON_PROF_BUSY 1
+#define GMON_PROF_ERROR 2
+#define GMON_PROF_OFF 3
+
+/*
+ * Sysctl definitions for extracting profiling information from the kernel.
+ */
+#define GPROF_STATE 0 /* int: profiling enabling variable */
+#define GPROF_COUNT 1 /* struct: profile tick count buffer */
+#define GPROF_FROMS 2 /* struct: from location hash bucket */
+#define GPROF_TOS 3 /* struct: destination/count structure */
+#define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */
+
+__BEGIN_DECLS
+
+/* Set up data structures and start profiling. */
+extern void __monstartup (u_long __lowpc, u_long __highpc) __THROW;
+extern void monstartup (u_long __lowpc, u_long __highpc) __THROW;
+
+/* Clean up profiling and write out gmon.out. */
+extern void _mcleanup (void) __THROW;
+
+extern void __write_profiling (void);
+extern int attribute_hidden __profile_frequency (void);
+
+extern u_long __arc_profile_desc_secstart[], __arc_profile_desc_secend[];
+extern u_long __arc_profile_forward_secstart[], __arc_profile_forward_secend[];
+extern u_long __arc_profile_counters_secstart[];
+
+__END_DECLS
+
+#endif /* sys/gmon.h */
diff --git a/gcc-4.9/libgcc/config/arc/gmon/sys/gmon_out.h b/gcc-4.9/libgcc/config/arc/gmon/sys/gmon_out.h
new file mode 100644
index 000000000..13feb006a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/gmon/sys/gmon_out.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define GMON_TAG_TIME_HIST 0
+#define GMON_TAG_CG_ARC 1
+#define GMON_TAG_BB_COUNT 2
+
+#define GMON_MAGIC "gmon"
+#define GMON_VERSION 1
+
+struct arc_gmon_hist_hdr
+{
+ char low_pc[4];
+ char high_pc[4];
+ char hist_size[4];
+ char prof_rate[4];
+ char dimen[15];
+ char dimen_abbrev;
+};
+
+struct gmon_cg_arc_record
+{
+ char afrompc[4];
+ char selfpc[4];
+ char count[4];
+};
+
+struct gmon_hdr
+{
+ char cookie[4];
+ char version[4];
+ char c[12];
+};
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/adddf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/adddf3.S
new file mode 100644
index 000000000..80b6455ac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/adddf3.S
@@ -0,0 +1,524 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+#if 0 /* DEBUG */
+ .global __adddf3
+ .balign 4
+__adddf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __adddf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __adddf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ bl abort
+ .global __subdf3
+ .balign 4
+__subdf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __subdf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __subdf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ bl abort
+#define __adddf3 __adddf3_asm
+#define __subdf3 __subdf3_asm
+#endif /* DEBUG */
+/* N.B. This is optimized for ARC700.
+ ARC600 has very different scheduling / instruction selection criteria. */
+
+/* inputs: DBL0, DBL1 (r0-r3)
+ output: DBL0 (r0, r1)
+ clobber: r2-r10, r12, flags
+ All NaN highword bits must be 1. NaN low word is random. */
+
+ .balign 4
+ .global __adddf3
+ .global __subdf3
+ .long 0x7ff00000 ; exponent mask
+ FUNC(__adddf3)
+ FUNC(__subdf3)
+__subdf3:
+ bxor_l DBL1H,DBL1H,31
+__adddf3:
+ ld r9,[pcl,-8]
+ bmsk r4,DBL0H,30
+ xor r10,DBL0H,DBL1H
+ and r6,DBL1H,r9
+ sub.f r12,r4,r6
+ asr_s r12,r12,20
+ blo .Ldbl1_gt
+ brhs r4,r9,.Linf_nan
+ brhs r12,32,.Large_shift
+ brne r12,0,.Lsmall_shift
+ brge r10,0,.Ladd_same_exp ; r12 == 0
+
+/* After subtracting, we need to normalize; when shifting to place the
+ leading 1 into position for the implicit 1 and adding that to DBL0H,
+ we increment the exponent. Thus, we have to subtract one more than
+ the shift count from the exponent beforehand. Iff the exponent drops thus
+ below zero (before adding in the fraction with the leading one), we have
+ generated a denormal number. Denormal handling is basicallly reducing the
+ shift count so that we produce a zero exponent instead; however, this way
+ the shift count can become zero (if we started out with exponent 1).
+ Therefore, a simple min operation is not good enough, since we don't
+ want to handle a zero normalizing shift in the main path.
+ On the plus side, we don't need to check for denorm input, the result
+ of subtracing these looks just the same as denormals generated during
+ subtraction. */
+ bmsk r7,DBL1H,30
+ cmp r4,r7
+ cmp.eq DBL0L,DBL1L
+ blo .L_rsub_same_exp
+ sub.f DBL0L,DBL0L,DBL1L
+ bmsk r12,DBL0H,19
+ bic DBL1H,DBL0H,r12
+ sbc.f r4,r4,r7
+ beq_l .Large_cancel
+ norm DBL1L,r4
+ b.d .Lsub_done_same_exp
+ sub r12,DBL1L,9
+
+ .balign 4
+.Linf_nan:
+ ; If both inputs are inf, but with different signs, the result is NaN.
+ asr r12,r10,31
+ or_s DBL1H,DBL1H,r12
+ j_s.d [blink]
+ or.eq DBL0H,DBL0H,DBL1H
+
+ .balign 4
+.L_rsub_same_exp:
+ rsub.f DBL0L,DBL0L,DBL1L
+ bmsk r12,DBL1H,19
+ bic_s DBL1H,DBL1H,r12
+ sbc.f r4,r7,r4
+ beq_l .Large_cancel
+ norm DBL1L,r4
+
+ sub r12,DBL1L,9
+.Lsub_done_same_exp:
+ asl_s r12,r12,20
+ sub_s DBL1L,DBL1L,10
+ sub DBL0H,DBL1H,r12
+ xor.f 0,DBL0H,DBL1H
+ bmi .Ldenorm
+.Lpast_denorm:
+ neg_s r12,DBL1L
+ lsr r7,DBL0L,r12
+ asl r12,r4,DBL1L
+ asl_s DBL0L,DBL0L,DBL1L
+ add_s r12,r12,r7
+ j_s.d [blink]
+ add_l DBL0H,DBL0H,r12
+ .balign 4
+.Ladd_same_exp:
+ /* This is a special case because we can't test for need to shift
+ down by checking if bit 20 of DBL0H changes. OTOH, here we know
+ that we always need to shift down. */
+ ; The implicit 1 of DBL0 is not shifted together with the
+ ; fraction, thus effectively doubled, compensating for not setting
+ ; implicit1 for DBL1
+ add_s r12,DBL0L,DBL1L
+ lsr.f 0,r12,2 ; round to even
+ breq r6,0,.Ldenorm_add
+ adc.f DBL0L,DBL0L,DBL1L
+ sub r7,DBL1H,DBL0H
+ sub1 r7,r7,r9 ; boost exponent by 2/2
+ rrc DBL0L,DBL0L
+ asr.f r7,r7 ; DBL1.fraction/2 - DBL0.fraction/2 ; exp++
+ add.cs.f DBL0L,DBL0L,0x80000000
+ add_l DBL0H,DBL0H,r7 ; DBL0.implicit1 not shifted for DBL1.implicit1
+ add.cs DBL0H,DBL0H,1
+ bic.f 0,r9,DBL0H ; check for overflow -> infinity.
+ jne_l [blink]
+ and DBL0H,DBL0H,0xfff00000
+ j_s.d [blink]
+ mov_s DBL0L,0
+ .balign 4
+.Large_shift:
+ brhs r12,55,.Lret_dbl0
+ bmsk_s DBL1H,DBL1H,19
+ brne r6,0,.Lno_denorm_large_shift
+ brhi.d r12,33,.Lfixed_denorm_large_shift
+ sub_s r12,r12,1
+ breq r12,31, .Lfixed_denorm_small_shift
+.Lshift32:
+ mov_s r12,DBL1L
+ mov_s DBL1L,DBL1H
+ brlt.d r10,0,.Lsub
+ mov_s DBL1H,0
+ b_s .Ladd
+.Ldenorm_add:
+ cmp_s r12,DBL1L
+ mov_s DBL0L,r12
+ j_s.d [blink]
+ adc DBL0H,r4,DBL1H
+
+.Lret_dbl0:
+ j_s [blink]
+ .balign 4
+.Lsmall_shift:
+ breq.d r6,0,.Ldenorm_small_shift
+ bmsk_s DBL1H,DBL1H,19
+ bset_s DBL1H,DBL1H,20
+.Lfixed_denorm_small_shift:
+ neg r8,r12
+ asl r4,DBL1H,r8
+ lsr_l DBL1H,DBL1H,r12
+ lsr r5,DBL1L,r12
+ asl r12,DBL1L,r8
+ brge.d r10,0,.Ladd
+ or DBL1L,r4,r5
+/* subtract, abs(DBL0) > abs(DBL1) */
+/* DBL0H, DBL0L: original values
+ DBL1H, DBL1L: fraction with explicit leading 1, shifted into place
+ r4: orig. DBL0H & 0x7fffffff
+ r6: orig. DBL1H & 0x7ff00000
+ r9: 0x7ff00000
+ r10: orig. DBL0H ^ DBL1H
+ r12: guard bits */
+ .balign 4
+.Lsub:
+ neg.f r12,r12
+ mov_s r7,DBL1H
+ bmsk r5,DBL0H,19
+ sbc.f DBL0L,DBL0L,DBL1L
+ bic DBL1H,DBL0H,r5
+ bset r5,r5,20
+ sbc.f r4,r5,r7
+ beq_l .Large_cancel_sub
+ norm DBL1L,r4
+ bmsk r6,DBL1H,30
+.Lsub_done:
+ sub_s DBL1L,DBL1L,9
+ breq DBL1L,1,.Lsub_done_noshift
+ asl r5,DBL1L,20
+ sub_s DBL1L,DBL1L,1
+ brlo r6,r5,.Ldenorm_sub
+ sub DBL0H,DBL1H,r5
+.Lpast_denorm_sub:
+ neg_s DBL1H,DBL1L
+ lsr r6,r12,DBL1H
+ asl_s r12,r12,DBL1L
+ and r8,r6,1
+ add1.f 0,r8,r12
+ add.ne.f r12,r12,r12
+ asl r8,DBL0L,DBL1L
+ lsr r12,DBL0L,DBL1H
+ adc.f DBL0L,r8,r6
+ asl r5,r4,DBL1L
+ add_s DBL0H,DBL0H,r12
+ j_s.d [blink]
+ adc DBL0H,DBL0H,r5
+
+ .balign 4
+.Lno_denorm_large_shift:
+ breq.d r12,32,.Lshift32
+ bset_l DBL1H,DBL1H,20
+.Lfixed_denorm_large_shift:
+ neg r8,r12
+ asl r4,DBL1H,r8
+ lsr r5,DBL1L,r12
+ asl.f 0,DBL1L,r8
+ lsr DBL1L,DBL1H,r12
+ or r12,r4,r5
+ tst.eq r12,1
+ or.ne r12,r12,2
+ brlt.d r10,0,.Lsub
+ mov_s DBL1H,0
+ b_l .Ladd
+
+ ; If a denorm is produced without shifting, we have an exact result -
+ ; no need for rounding.
+ .balign 4
+.Ldenorm_sub:
+ lsr DBL1L,r6,20
+ xor DBL0H,r6,DBL1H
+ brne.d DBL1L,1,.Lpast_denorm_sub
+ sub_s DBL1L,DBL1L,1
+.Lsub_done_noshift:
+ add.f 0,r12,r12
+ btst.eq DBL0L,0
+ cmp.eq r12,r12
+ add.cs.f DBL0L,DBL0L,1
+ bclr r4,r4,20
+ j_s.d [blink]
+ adc DBL0H,DBL1H,r4
+
+ .balign 4
+.Ldenorm_small_shift:
+ brne.d r12,1,.Lfixed_denorm_small_shift
+ sub_l r12,r12,1
+ brlt r10,0,.Lsub
+.Ladd: ; bit 20 of DBL1H is clear and bit 0 of r12 does not matter
+ add.f DBL0L,DBL0L,DBL1L
+ add_s DBL1H,DBL1H,DBL0H
+ add.cs DBL1H,DBL1H,1
+ xor_l DBL0H,DBL0H,DBL1H
+ bbit0 DBL0H,20,.Lno_shiftdown
+ lsr.f DBL0H,DBL1H
+ and r4,DBL0L,2
+ bmsk DBL0H,DBL0H,18
+ sbc DBL0H,DBL1H,DBL0H
+ rrc.f DBL0L,DBL0L
+ or.f r12,r12,r4
+ cmp.eq r12,r12
+ add.cs.f DBL0L,DBL0L,1
+ bic.f 0,r9,DBL0H ; check for generating infinity with possible ...
+ jne.d [blink] ; ... non-zero fraction
+ add.cs DBL0H,DBL0H,1
+ mov_s DBL0L,0
+ bmsk DBL1H,DBL0H,19
+ j_s.d [blink]
+ bic_s DBL0H,DBL0H,DBL1H
+.Lno_shiftdown:
+ mov_s DBL0H,DBL1H
+ add.f 0,r12,r12
+ btst.eq DBL0L,0
+ cmp.eq r12,r12
+ add.cs.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.cs DBL0H,DBL0H,1
+ .balign 4
+.Ldenorm:
+ bmsk DBL0H,DBL1H,30
+ lsr r12,DBL0H,20
+ xor_s DBL0H,DBL0H,DBL1H
+ sub_l DBL1L,r12,1
+ bgt .Lpast_denorm
+ j_s.d [blink]
+ add_l DBL0H,DBL0H,r4
+
+ .balign 4
+.Large_cancel:
+ ;DBL0L: mantissa DBL1H: sign & exponent
+ norm.f DBL1L,DBL0L
+ bmsk DBL0H,DBL1H,30
+ add_s DBL1L,DBL1L,22
+ mov.mi DBL1L,21
+ add_s r12,DBL1L,1
+ asl_s r12,r12,20
+ beq_s .Lret0
+ brhs.d DBL0H,r12,.Lpast_denorm_large_cancel
+ sub DBL0H,DBL1H,r12
+ bmsk DBL0H,DBL1H,30
+ lsr r12,DBL0H,20
+ xor_s DBL0H,DBL0H,DBL1H
+ sub.f DBL1L,r12,1
+ jle [blink]
+.Lpast_denorm_large_cancel:
+ rsub.f r7,DBL1L,32
+ lsr r7,DBL0L,r7
+ asl_s DBL0L,DBL0L,DBL1L
+ mov.ls r7,DBL0L
+ add_s DBL0H,DBL0H,r7
+ j_s.d [blink]
+ mov.ls DBL0L,0
+.Lret0:
+ j_s.d [blink]
+ mov_l DBL0H,0
+
+/* r4:DBL0L:r12 : unnormalized result fraction
+ DBL1H: result sign and exponent */
+/* When seeing large cancellation, only the topmost guard bit might be set. */
+ .balign 4
+.Large_cancel_sub:
+ norm.f DBL1L,DBL0L
+ bpnz.d 0f
+ bmsk DBL0H,DBL1H,30
+ mov r5,22<<20
+ bne.d 1f
+ mov_s DBL1L,21
+ bset r5,r5,5+20
+ add_s DBL1L,DBL1L,32
+ brne r12,0,1f
+ j_s.d [blink]
+ mov_l DBL0H,0
+ .balign 4
+0: add r5,DBL1L,23
+ asl r5,r5,20
+ add_s DBL1L,DBL1L,22
+1: brlo DBL0H,r5,.Ldenorm_large_cancel_sub
+ sub DBL0H,DBL1H,r5
+.Lpast_denorm_large_cancel_sub:
+ rsub.f r7,DBL1L,32
+ lsr r12,r12,r7
+ lsr r7,DBL0L,r7
+ asl_s DBL0L,DBL0L,DBL1L
+ add.ge DBL0H,DBL0H,r7
+ add_s DBL0L,DBL0L,r12
+ add.lt DBL0H,DBL0H,DBL0L
+ mov.eq DBL0L,r12
+ j_s.d [blink]
+ mov.lt DBL0L,0
+ .balign 4
+.Ldenorm_large_cancel_sub:
+ lsr r5,DBL0H,20
+ xor_s DBL0H,DBL0H,DBL1H
+ brgt.d r5,1,.Lpast_denorm_large_cancel_sub
+ sub DBL1L,r5,1
+ j_l [blink] ; denorm, no shift -> no rounding needed.
+
+/* r4: DBL0H & 0x7fffffff
+ r6: DBL1H & 0x7ff00000
+ r9: 0x7ff00000
+ r10: sign difference
+ r12: shift count (negative) */
+ .balign 4
+.Ldbl1_gt:
+ brhs r6,r9,.Lret_dbl1 ; inf or NaN
+ neg r8,r12
+ brhs r8,32,.Large_shift_dbl0
+.Lsmall_shift_dbl0:
+ breq.d r6,0,.Ldenorm_small_shift_dbl0
+ bmsk_s DBL0H,DBL0H,19
+ bset_s DBL0H,DBL0H,20
+.Lfixed_denorm_small_shift_dbl0:
+ asl r4,DBL0H,r12
+ lsr DBL0H,DBL0H,r8
+ lsr r5,DBL0L,r8
+ asl r12,DBL0L,r12
+ brge.d r10,0,.Ladd_dbl1_gt
+ or DBL0L,r4,r5
+/* subtract, abs(DBL0) < abs(DBL1) */
+/* DBL0H, DBL0L: fraction with explicit leading 1, shifted into place
+ DBL1H, DBL1L: original values
+ r6: orig. DBL1H & 0x7ff00000
+ r9: 0x7ff00000
+ r12: guard bits */
+ .balign 4
+.Lrsub:
+ neg.f r12,r12
+ bmsk r7,DBL1H,19
+ mov_s r5,DBL0H
+ sbc.f DBL0L,DBL1L,DBL0L
+ bic DBL1H,DBL1H,r7
+ bset r7,r7,20
+ sbc.f r4,r7,r5
+ beq_l .Large_cancel_sub
+ norm DBL1L,r4
+ b_l .Lsub_done ; note: r6 is already set up.
+
+.Lret_dbl1:
+ mov_s DBL0H,DBL1H
+ j_s.d [blink]
+ mov_l DBL0L,DBL1L
+ .balign 4
+.Ldenorm_small_shift_dbl0:
+ sub.f r8,r8,1
+ bne.d .Lfixed_denorm_small_shift_dbl0
+ add_s r12,r12,1
+ brlt r10,0,.Lrsub
+.Ladd_dbl1_gt: ; bit 20 of DBL0H is clear and bit 0 of r12 does not matter
+ add.f DBL0L,DBL0L,DBL1L
+ add_s DBL0H,DBL0H,DBL1H
+ add.cs DBL0H,DBL0H,1
+ xor DBL1H,DBL0H,DBL1H
+ bbit0 DBL1H,20,.Lno_shiftdown_dbl1_gt
+ lsr.f DBL1H,DBL0H
+ and r4,DBL0L,2
+ bmsk DBL1H,DBL1H,18
+ sbc DBL0H,DBL0H,DBL1H
+ rrc.f DBL0L,DBL0L
+ or.f r12,r12,r4
+ cmp.eq r12,r12
+ add.cs.f DBL0L,DBL0L,1
+ bic.f 0,r9,DBL0H ; check for generating infinity with possible ...
+ jne.d [blink] ; ... non-zero fraction
+ add.cs DBL0H,DBL0H,1
+ mov_s DBL0L,0
+ bmsk DBL1H,DBL0H,19
+ j_s.d [blink]
+ bic_s DBL0H,DBL0H,DBL1H
+.Lno_shiftdown_dbl1_gt:
+ add.f 0,r12,r12
+ btst.eq DBL0L,0
+ cmp.eq r12,r12
+ add.cs.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.cs DBL0H,DBL0H,1
+
+ .balign 4
+.Large_shift_dbl0:
+ brhs r8,55,.Lret_dbl1
+ bmsk_s DBL0H,DBL0H,19
+ brne r6,0,.Lno_denorm_large_shift_dbl0
+ add_s r12,r12,1
+ brne.d r8,33,.Lfixed_denorm_large_shift_dbl0
+ sub r8,r8,1
+ bset_s DBL0H,DBL0H,20
+.Lshift32_dbl0:
+ mov_s r12,DBL0L
+ mov_s DBL0L,DBL0H
+ brlt.d r10,0,.Lrsub
+ mov_s DBL0H,0
+ b_s .Ladd_dbl1_gt
+
+ .balign 4
+.Lno_denorm_large_shift_dbl0:
+ breq.d r8,32,.Lshift32_dbl0
+ bset_l DBL0H,DBL0H,20
+.Lfixed_denorm_large_shift_dbl0:
+ asl r4,DBL0H,r12
+ lsr r5,DBL0L,r8
+ asl.f 0,DBL0L,r12
+ lsr DBL0L,DBL0H,r8
+ or r12,r4,r5
+ tst.eq r12,1
+ or.ne r12,r12,2
+ brlt.d r10,0,.Lrsub
+ mov_s DBL0H,0
+ b_l .Ladd_dbl1_gt
+ ENDFUNC(__adddf3)
+ ENDFUNC(__subdf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/addsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/addsf3.S
new file mode 100644
index 000000000..45ed09321
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/addsf3.S
@@ -0,0 +1,344 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+#if 0 /* DEBUG */
+ .global __addsf3
+ FUNC(__addsf3)
+ .balign 4
+__addsf3:
+ push_s blink
+ push_s r1
+ bl.d __addsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __addsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__addsf3)
+ .global __subsf3
+ FUNC(__subsf3)
+ .balign 4
+__subsf3:
+ push_s blink
+ push_s r1
+ bl.d __subsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __subsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__subsf3)
+#define __addsf3 __addsf3_asm
+#define __subsf3 __subsf3_asm
+#endif /* DEBUG */
+/* N.B. This is optimized for ARC700.
+ ARC600 has very different scheduling / instruction selection criteria. */
+
+/* inputs: r0, r1
+ output: r0
+ clobber: r1-r10, r12, flags */
+
+ .balign 4
+ .global __addsf3
+ .global __subsf3
+ FUNC(__addsf3)
+ FUNC(__subsf3)
+ .long 0x7f800000 ; exponent mask
+__subsf3:
+ bxor_l r1,r1,31
+__addsf3:
+ ld r9,[pcl,-8]
+ bmsk r4,r0,30
+ xor r10,r0,r1
+ and r6,r1,r9
+ sub.f r12,r4,r6
+ asr_s r12,r12,23
+ blo .Ldbl1_gt
+ brhs r4,r9,.Linf_nan
+ brne r12,0,.Lsmall_shift
+ brge r10,0,.Ladd_same_exp ; r12 == 0
+/* After subtracting, we need to normalize; when shifting to place the
+ leading 1 into position for the implicit 1 and adding that to DBL0,
+ we increment the exponent. Thus, we have to subtract one more than
+ the shift count from the exponent beforehand. Iff the exponent drops thus
+ below zero (before adding in the fraction with the leading one), we have
+ generated a denormal number. Denormal handling is basicallly reducing the
+ shift count so that we produce a zero exponent instead; FWIW, this way
+ the shift count can become zero (if we started out with exponent 1).
+ On the plus side, we don't need to check for denorm input, the result
+ of subtracing these looks just the same as denormals generated during
+ subtraction. */
+ bmsk r7,r1,30
+ breq r4,r7,.Lret0
+ sub.f r5,r4,r7
+ lsr r12,r4,23
+ neg.cs r5,r5
+ norm r3,r5
+ bmsk r2,r0,22
+ sub_s r3,r3,6
+ min r12,r12,r3
+ bic r1,r0,r2
+ sub_s r3,r12,1
+ asl_s r12,r12,23
+ asl r2,r5,r3
+ sub_s r1,r1,r12
+ add_s r0,r1,r2
+ j_s.d [blink]
+ bxor.cs r0,r0,31
+ .balign 4
+.Linf_nan:
+ ; If both inputs are inf, but with different signs, the result is NaN.
+ asr r12,r10,31
+ or_s r1,r1,r12
+ j_s.d [blink]
+ or.eq r0,r0,r1
+ .balign 4
+.Ladd_same_exp:
+ /* This is a special case because we can't test for need to shift
+ down by checking if bit 23 of DBL0 changes. OTOH, here we know
+ that we always need to shift down. */
+ ; adding the two floating point numbers together makes the sign
+ ; cancel out and apear as carry; the exponent is doubled, and the
+ ; fraction also in need of shifting left by one. The two implicit
+ ; ones of the sources make an implicit 1 of the result, again
+ ; non-existent in a place shifted by one.
+ add.f r0,r0,r1
+ btst_s r0,1
+ breq r6,0,.Ldenorm_add
+ add.ne r0,r0,1 ; round to even.
+ rrc r0,r0
+ bmsk r1,r9,23
+ add r0,r0,r1 ; increment exponent
+ bic.f 0,r9,r0; check for overflow -> infinity.
+ jne_l [blink]
+ mov_s r0,r9
+ j_s.d [blink]
+ bset.cs r0,r0,31
+
+.Ldenorm_add:
+ j_s.d [blink]
+ add r0,r4,r1
+
+.Lret_dbl0:
+ j_s [blink]
+
+ .balign 4
+.Lsmall_shift:
+ brhi r12,25,.Lret_dbl0
+ breq.d r6,0,.Ldenorm_small_shift
+ bmsk_s r1,r1,22
+ bset_s r1,r1,23
+.Lfixed_denorm_small_shift:
+ neg r8,r12
+ asl r5,r1,r8
+ brge.d r10,0,.Ladd
+ lsr_l r1,r1,r12
+/* subtract, abs(DBL0) > abs(DBL1) */
+/* DBL0: original values
+ DBL1: fraction with explicit leading 1, shifted into place
+ r4: orig. DBL0 & 0x7fffffff
+ r6: orig. DBL1 & 0x7f800000
+ r9: 0x7f800000
+ r10: orig. DBL0H ^ DBL1H
+ r5 : guard bits */
+ .balign 4
+.Lsub:
+ neg.f r12,r5
+ bmsk r3,r0,22
+ bset r5,r3,23
+ sbc.f r4,r5,r1
+ beq.d .Large_cancel_sub
+ bic r7,r0,r3
+ norm r3,r4
+ bmsk r6,r7,30
+.Lsub_done:
+ sub_s r3,r3,6
+ breq r3,1,.Lsub_done_noshift
+ asl r5,r3,23
+ sub_l r3,r3,1
+ brlo r6,r5,.Ldenorm_sub
+ sub r0,r7,r5
+ neg_s r1,r3
+ lsr.f r2,r12,r1
+ asl_s r12,r12,r3
+ btst_s r2,0
+ bmsk.eq.f r12,r12,30
+ asl r5,r4,r3
+ add_s r0,r0,r2
+ adc.ne r0,r0,0
+ j_s.d [blink]
+ add_l r0,r0,r5
+
+.Lret0:
+ j_s.d [blink]
+ mov_l r0,0
+
+ .balign 4
+.Ldenorm_small_shift:
+ brne.d r12,1,.Lfixed_denorm_small_shift
+ sub_s r12,r12,1
+ brlt.d r10,0,.Lsub
+ mov_s r5,r12 ; zero r5, and align following code
+.Ladd: ; Both bit 23 of DBL1 and bit 0 of r5 are clear.
+ bmsk r2,r0,22
+ add_s r2,r2,r1
+ bbit0.d r2,23,.Lno_shiftdown
+ add_s r0,r0,r1
+ bic.f 0,r9,r0; check for overflow -> infinity; eq : infinity
+ bmsk r1,r2,22
+ lsr.ne.f r2,r2,2; cc: even ; hi: might round down
+ lsr.ne r1,r1,1
+ rcmp.hi r5,1; hi : round down
+ bclr.hi r0,r0,0
+ j_l.d [blink]
+ sub_s r0,r0,r1
+
+/* r4: DBL0H & 0x7fffffff
+ r6: DBL1H & 0x7f800000
+ r9: 0x7f800000
+ r10: sign difference
+ r12: shift count (negative) */
+ .balign 4
+.Ldbl1_gt:
+ brhs r6,r9,.Lret_dbl1 ; inf or NaN
+ neg r8,r12
+ brhi r8,25,.Lret_dbl1
+.Lsmall_shift_dbl0:
+ breq.d r6,0,.Ldenorm_small_shift_dbl0
+ bmsk_s r0,r0,22
+ bset_s r0,r0,23
+.Lfixed_denorm_small_shift_dbl0:
+ asl r5,r0,r12
+ brge.d r10,0,.Ladd_dbl1_gt
+ lsr r0,r0,r8
+/* subtract, abs(DBL0) < abs(DBL1) */
+/* DBL0: fraction with explicit leading 1, shifted into place
+ DBL1: original value
+ r6: orig. DBL1 & 0x7f800000
+ r9: 0x7f800000
+ r5: guard bits */
+ .balign 4
+.Lrsub:
+ neg.f r12,r5
+ bmsk r5,r1,22
+ bic r7,r1,r5
+ bset r5,r5,23
+ sbc.f r4,r5,r0
+ bne.d .Lsub_done ; note: r6 is already set up.
+ norm r3,r4
+ /* Fall through */
+
+/* r4:r12 : unnormalized result fraction
+ r7: result sign and exponent */
+/* When seeing large cancellation, only the topmost guard bit might be set. */
+ .balign 4
+.Large_cancel_sub:
+ breq_s r12,0,.Lret0
+ sub r0,r7,24<<23
+ xor.f 0,r0,r7 ; test if exponent is negative
+ tst.pl r9,r0 ; test if exponent is zero
+ jpnz [blink] ; return if non-denormal result
+ bmsk r6,r7,30
+ lsr r3,r6,23
+ xor r0,r6,r7
+ sub_s r3,r3,24-22
+ j_s.d [blink]
+ bset r0,r0,r3
+
+ ; If a denorm is produced, we have an exact result -
+ ; no need for rounding.
+ .balign 4
+.Ldenorm_sub:
+ sub r3,r6,1
+ lsr.f r3,r3,23
+ xor r0,r6,r7
+ neg_s r1,r3
+ asl.ne r4,r4,r3
+ lsr_s r12,r12,r1
+ add_s r0,r0,r4
+ j_s.d [blink]
+ add.ne r0,r0,r12
+
+ .balign 4
+.Lsub_done_noshift:
+ add.f 0,r12,r12
+ btst.eq r4,0
+ bclr r4,r4,23
+ add r0,r7,r4
+ j_s.d [blink]
+ adc.ne r0,r0,0
+
+ .balign 4
+.Lno_shiftdown:
+ add.f 0,r5,r5
+ btst.eq r0,0
+ cmp.eq r5,r5
+ j_s.d [blink]
+ add.cs r0,r0,1
+
+.Lret_dbl1:
+ j_s.d [blink]
+ mov_l r0,r1
+ .balign 4
+.Ldenorm_small_shift_dbl0:
+ sub.f r8,r8,1
+ bne.d .Lfixed_denorm_small_shift_dbl0
+ add_s r12,r12,1
+ brlt.d r10,0,.Lrsub
+ mov r5,0
+.Ladd_dbl1_gt: ; both bit 23 of DBL0 and bit 0 of r5 are clear.
+ bmsk r2,r1,22
+ add_s r2,r2,r0
+ bbit0.d r2,23,.Lno_shiftdown_dbl1_gt
+ add_s r0,r1,r0
+ bic.f 0,r9,r0; check for overflow -> infinity; eq : infinity
+ bmsk r1,r2,22
+ lsr.ne.f r2,r2,2; cc: even ; hi: might round down
+ lsr.ne r1,r1,1
+ rcmp.hi r5,1; hi : round down
+ bclr.hi r0,r0,0
+ j_l.d [blink]
+ sub_s r0,r0,r1
+
+ .balign 4
+.Lno_shiftdown_dbl1_gt:
+ add.f 0,r5,r5
+ btst.eq r0,0
+ cmp.eq r5,r5
+ j_s.d [blink]
+ add.cs r0,r0,1
+ ENDFUNC(__addsf3)
+ ENDFUNC(__subsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc-ieee-754.h b/gcc-4.9/libgcc/config/arc/ieee-754/arc-ieee-754.h
new file mode 100644
index 000000000..64e6d2309
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc-ieee-754.h
@@ -0,0 +1,56 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef __LITTLE_ENDIAN__
+#define DBL0L r0
+#define DBL0H r1
+#define DBL1L r2
+#define DBL1H r3
+#else
+#define DBL0L r1
+#define DBL0H r0
+#define DBL1L r3
+#define DBL1H r2
+#endif
+#define add_l add
+#define asr_l asr
+#define j_l j
+#define jne_l jne
+#define jeq_l jeq
+#define or_l or
+#define mov_l mov
+#define b_l b
+#define beq_l beq
+#define bne_l bne
+#define brne_l brne
+#define bset_l bset
+#define sub_l sub
+#define sub1_l sub1
+#define lsr_l lsr
+#define xor_l xor
+#define bic_l bic
+#define bmsk_l bmsk
+#define bxor_l bxor
+#define bcs_s blo_s
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divdf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divdf3.S
new file mode 100644
index 000000000..2381ba67d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divdf3.S
@@ -0,0 +1,421 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ to calculate a := b/x as b*y, with y := 1/x:
+ - x is in the range [1..2)
+ - calculate 15..18 bit inverse y0 using a table of approximating polynoms.
+ Precision is higher for polynoms used to evaluate input with larger
+ value.
+ - Do one newton-raphson iteration step to double the precision,
+ then multiply this with the divisor
+ -> more time to decide if dividend is subnormal
+ - the worst error propagation is on the side of the value range
+ with the least initial defect, thus giving us about 30 bits precision.
+ The truncation error for the either is less than 1 + x/2 ulp.
+ A 31 bit inverse can be simply calculated by using x with implicit 1
+ and chaining the multiplies. For a 32 bit inverse, we multiply y0^2
+ with the bare fraction part of x, then add in y0^2 for the implicit
+ 1 of x.
+ - If calculating a 31 bit inverse, the systematic error is less than
+ -1 ulp; likewise, for 32 bit, it is less than -2 ulp.
+ - If we calculate our seed with a 32 bit fraction, we can archive a
+ tentative result strictly better than -2 / +2.5 (1) ulp/128, i.e. we
+ only need to take the step to calculate the 2nd stage rest and
+ rounding adjust 1/32th of the time. However, if we use a 20 bit
+ fraction for the seed, the negative error can exceed -2 ulp/128, (2)
+ thus for a simple add / tst check, we need to do the 2nd stage
+ rest calculation/ rounding adjust 1/16th of the time.
+ (1): The inexactness of the 32 bit inverse contributes an error in the
+ range of (-1 .. +(1+x/2) ) ulp/128. Leaving out the low word of the
+ rest contributes an error < +1/x ulp/128 . In the interval [1,2),
+ x/2 + 1/x <= 1.5 .
+ (2): Unless proven otherwise. I have not actually looked for an
+ example where -2 ulp/128 is exceeded, and my calculations indicate
+ that the excess, if existent, is less than -1/512 ulp.
+ ??? The algorithm is still based on the ARC700 optimized code.
+ Maybe we could make better use of 32x16 bit multiply, or 64 bit multiply
+ results.
+ */
+#include "../arc-ieee-754.h"
+#define mlo acc2
+#define mhi acc1
+#define mul64(b,c) mullw 0,b,c` machlw 0,b,c
+#define mulu64(b,c) mululw 0,b,c` machulw 0,b,c
+
+/* N.B. fp-bit.c does double rounding on denormal numbers. */
+#if 0 /* DEBUG */
+ .global __divdf3
+ FUNC(__divdf3)
+ .balign 4
+__divdf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __divdf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __divdf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ and r12,DBL0H,DBL1H
+ bic.f 0,0x7ff80000,r12 ; both NaN -> OK
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__divdf3)
+#define __divdf3 __divdf3_asm
+#endif /* DEBUG */
+
+ FUNC(__divdf3)
+ .balign 4
+.L7ff00000:
+ .long 0x7ff00000
+.Ldivtab:
+ .long 0xfc0fffe1
+ .long 0xf46ffdfb
+ .long 0xed1ffa54
+ .long 0xe61ff515
+ .long 0xdf7fee75
+ .long 0xd91fe680
+ .long 0xd2ffdd52
+ .long 0xcd1fd30c
+ .long 0xc77fc7cd
+ .long 0xc21fbbb6
+ .long 0xbcefaec0
+ .long 0xb7efa100
+ .long 0xb32f92bf
+ .long 0xae8f83b7
+ .long 0xaa2f7467
+ .long 0xa5ef6479
+ .long 0xa1cf53fa
+ .long 0x9ddf433e
+ .long 0x9a0f3216
+ .long 0x965f2091
+ .long 0x92df0f11
+ .long 0x8f6efd05
+ .long 0x8c1eeacc
+ .long 0x88eed876
+ .long 0x85dec615
+ .long 0x82eeb3b9
+ .long 0x800ea10b
+ .long 0x7d3e8e0f
+ .long 0x7a8e7b3f
+ .long 0x77ee6836
+ .long 0x756e5576
+ .long 0x72fe4293
+ .long 0x709e2f93
+ .long 0x6e4e1c7f
+ .long 0x6c0e095e
+ .long 0x69edf6c5
+ .long 0x67cde3a5
+ .long 0x65cdd125
+ .long 0x63cdbe25
+ .long 0x61ddab3f
+ .long 0x600d991f
+ .long 0x5e3d868c
+ .long 0x5c6d7384
+ .long 0x5abd615f
+ .long 0x590d4ecd
+ .long 0x576d3c83
+ .long 0x55dd2a89
+ .long 0x545d18e9
+ .long 0x52dd06e9
+ .long 0x516cf54e
+ .long 0x4ffce356
+ .long 0x4e9cd1ce
+ .long 0x4d3cbfec
+ .long 0x4becae86
+ .long 0x4aac9da4
+ .long 0x496c8c73
+ .long 0x483c7bd3
+ .long 0x470c6ae8
+ .long 0x45dc59af
+ .long 0x44bc4915
+ .long 0x43ac3924
+ .long 0x428c27fb
+ .long 0x418c187a
+ .long 0x407c07bd
+
+__divdf3_support: /* This label makes debugger output saner. */
+ .balign 4
+.Ldenorm_dbl1:
+ brge r6, \
+ 0x43500000,.Linf_NaN ; large number / denorm -> Inf
+ bmsk.f r12,DBL1H,19
+ mov.eq r12,DBL1L
+ mov.eq DBL1L,0
+ sub.eq r7,r7,32
+ norm.f r11,r12 ; flag for x/0 -> Inf check
+ beq_s .Linf_NaN
+ mov.mi r11,0
+ add.pl r11,r11,1
+ add_s r12,r12,r12
+ asl r8,r12,r11
+ rsub r12,r11,31
+ lsr r12,DBL1L,r12
+ tst_s DBL1H,DBL1H
+ or r8,r8,r12
+ lsr r4,r8,26
+ lsr DBL1H,r8,12
+ ld.as r4,[r10,r4]
+ bxor.mi DBL1H,DBL1H,31
+ sub r11,r11,11
+ asl DBL1L,DBL1L,r11
+ sub r11,r11,1
+ mulu64 (r4,r8)
+ sub r7,r7,r11
+ b.d .Lpast_denorm_dbl1
+ asl r7,r7,20
+
+.Linf_NaN:
+ tst_s DBL0L,DBL0L ; 0/0 -> NaN
+ xor_s DBL1H,DBL1H,DBL0H
+ bclr.eq.f DBL0H,DBL0H,31
+ bmsk DBL0H,DBL1H,30
+ xor_s DBL0H,DBL0H,DBL1H
+ sub.eq DBL0H,DBL0H,1
+ mov_s DBL0L,0
+ j_s.d [blink]
+ or DBL0H,DBL0H,r9
+ .balign 4
+.Lret0_2:
+ xor_s DBL1H,DBL1H,DBL0H
+ mov_s DBL0L,0
+ bmsk DBL0H,DBL1H,30
+ j_s.d [blink]
+ xor_s DBL0H,DBL0H,DBL1H
+ .balign 4
+ .global __divdf3
+/* N.B. the spacing between divtab and the sub3 to get its address must
+ be a multiple of 8. */
+__divdf3:
+ asl r8,DBL1H,12
+ lsr r4,r8,26
+ sub3 r10,pcl,51;(.-.Ldivtab) >> 3
+ ld.as r9,[pcl,-104]; [pcl,(-((.-.L7ff00000) >> 2))] ; 0x7ff00000
+ ld.as r4,[r10,r4]
+ lsr r12,DBL1L,20
+ and.f r7,DBL1H,r9
+ or r8,r8,r12
+ mulu64 (r4,r8)
+ beq.d .Ldenorm_dbl1
+.Lpast_denorm_dbl1:
+ and.f r6,DBL0H,r9
+ breq.d r7,r9,.Linf_nan_dbl1
+ asl r4,r4,12
+ sub r4,r4,mhi
+ mululw 0,r4,r4
+ machulw r5,r4,r4
+ bne.d .Lnormal_dbl0
+ lsr r8,r8,1
+
+ .balign 4
+.Ldenorm_dbl0:
+ bmsk.f r12,DBL0H,19
+ ; wb stall
+ mov.eq r12,DBL0L
+ sub.eq r6,r6,32
+ norm.f r11,r12 ; flag for 0/x -> 0 check
+ brge r7, \
+ 0x43500000, .Lret0_2 ; denorm/large number -> 0
+ beq_s .Lret0_2
+ mov.mi r11,0
+ add.pl r11,r11,1
+ asl r12,r12,r11
+ sub r6,r6,r11
+ add.f 0,r6,31
+ lsr r10,DBL0L,r6
+ mov.mi r10,0
+ add r6,r6,11+32
+ neg.f r11,r6
+ asl DBL0L,DBL0L,r11
+ mov.pl DBL0L,0
+ sub r6,r6,32-1
+ b.d .Lpast_denorm_dbl0
+ asl r6,r6,20
+
+ .balign 4
+.Linf_nan_dbl1: ; 0/Inf -> NaN Inf/Inf -> NaN x/Inf-> 0 x/NaN -> NaN
+ or.f 0,r6,DBL0L
+ cmp.ne r6,r9
+ not_s DBL0L,DBL1H
+ sub_s.ne DBL0L,DBL0L,DBL0L
+ tst_s DBL0H,DBL0H
+ add_s DBL0H,DBL1H,DBL0L
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+
+ .balign 4
+.Lnormal_dbl0:
+ breq.d r6,r9,.Linf_nan_dbl0
+ asl r12,DBL0H,11
+ lsr r10,DBL0L,21
+.Lpast_denorm_dbl0:
+ bset r8,r8,31
+ mulu64 (r5,r8)
+ add_s r12,r12,r10
+ bset r5,r12,31
+ cmp r5,r8
+ cmp.eq DBL0L,DBL1L
+ lsr.cc r5,r5,1
+ sub r4,r4,mhi ; u1.31 inverse, about 30 bit
+ mululw 0,r5,r4
+ machulw r11,r5,r4 ; result fraction highpart
+ lsr r8,r8,2 ; u3.29
+ add r5,r6, /* wait for immediate */ \
+ 0x3fe00000
+ mulu64 (r11,r8) ; u-28.31
+ asl_s DBL1L,DBL1L,9 ; u-29.23:9
+ sbc r6,r5,r7
+ mov r12,mlo ; u-28.31
+ mulu64 (r11,DBL1L) ; mhi: u-28.23:9
+ add.cs DBL0L,DBL0L,DBL0L
+ asl_s DBL0L,DBL0L,6 ; u-26.25:7
+ asl r10,r11,23
+ sub_l DBL0L,DBL0L,r12
+ lsr r7,r11,9
+ sub r5,DBL0L,mhi ; rest msw ; u-26.31:0
+ mul64 (r5,r4) ; mhi: result fraction lowpart
+ xor.f 0,DBL0H,DBL1H
+ and DBL0H,r6,r9
+ add_s DBL0H,DBL0H,r7
+ bclr r12,r9,20 ; 0x7fe00000
+ brhs.d r6,r12,.Linf_denorm
+ bxor.mi DBL0H,DBL0H,31
+ add.f r12,mhi,0x11
+ asr r9,r12,5
+ sub.mi DBL0H,DBL0H,1
+ add.f DBL0L,r9,r10
+ tst r12,0x1c
+ jne.d [blink]
+ add.cs DBL0H,DBL0H,1
+ /* work out exact rounding if we fall through here. */
+ /* We know that the exact result cannot be represented in double
+ precision. Find the mid-point between the two nearest
+ representable values, multiply with the divisor, and check if
+ the result is larger than the dividend. Since we want to know
+ only the sign bit, it is sufficient to calculate only the
+ highpart of the lower 64 bits. */
+ mulu64 (r11,DBL1L) ; rest before considering r12 in r5 : -mlo
+ sub.f DBL0L,DBL0L,1
+ asl r12,r9,2 ; u-22.30:2
+ sub.cs DBL0H,DBL0H,1
+ sub.f r12,r12,2
+ mov r10,mlo ; rest before considering r12 in r5 : -r10
+ mululw 0,r12,DBL1L
+ machulw r7,r12,DBL1L ; mhi: u-51.32
+ asl r5,r5,25 ; s-51.7:25
+ lsr r10,r10,7 ; u-51.30:2
+ mulu64 (r12,r8) ; mlo: u-51.31:1
+ sub r5,r5,r10
+ add.mi r5,r5,DBL1L ; signed multiply adjust for r12*DBL1L
+ bset r7,r7,0 ; make sure that the result is not zero, and that
+ sub r5,r5,r7 ; a highpart zero appears negative
+ sub.f r5,r5,mlo ; rest msw
+ add.pl.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.eq DBL0H,DBL0H,1
+
+.Linf_nan_dbl0:
+ tst_s DBL1H,DBL1H
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+ .balign 4
+.Linf_denorm:
+ lsr r12,r6,28
+ brlo.d r12,0xc,.Linf
+.Ldenorm:
+ asr r6,r6,20
+ neg r9,r6
+ mov_s DBL0H,0
+ brhs.d r9,54,.Lret0
+ bxor.mi DBL0H,DBL0H,31
+ add r12,mhi,1
+ and r12,r12,-4
+ rsub r7,r6,5
+ asr r10,r12,28
+ bmsk r4,r12,27
+ min r7,r7,31
+ asr DBL0L,r4,r7
+ add DBL1H,r11,r10
+ abs.f r10,r4
+ sub.mi r10,r10,1
+ add.f r7,r6,32-5
+ asl r4,r4,r7
+ mov.mi r4,r10
+ add.f r10,r6,23
+ rsub r7,r6,9
+ lsr r7,DBL1H,r7
+ asl r10,DBL1H,r10
+ or.pnz DBL0H,DBL0H,r7
+ or.mi r4,r4,r10
+ mov.mi r10,r7
+ add.f DBL0L,r10,DBL0L
+ add.cs.f DBL0H,DBL0H,1 ; carry clear after this point
+ bxor.f 0,r4,31
+ add.pnz.f DBL0L,DBL0L,1
+ add.cs.f DBL0H,DBL0H,1
+ jne_s [blink]
+ /* Calculation so far was not conclusive; calculate further rest. */
+ mulu64 (r11,DBL1L) ; rest before considering r12 in r5 : -mlo
+ asr.f r12,r12,3
+ asl r5,r5,25 ; s-51.7:25
+ mov r11,mlo ; rest before considering r12 in r5 : -r11
+ mulu64 (r12,r8) ; u-51.31:1
+ and r9,DBL0L,1 ; tie-breaker: round to even
+ lsr r11,r11,7 ; u-51.30:2
+ mov DBL1H,mlo ; u-51.31:1
+ mulu64 (r12,DBL1L) ; u-51.62:2
+ sub.mi r11,r11,DBL1L ; signed multiply adjust for r12*DBL1L
+ add_s DBL1H,DBL1H,r11
+ sub DBL1H,DBL1H,r5 ; -rest msw
+ add_s DBL1H,DBL1H,mhi ; -rest msw
+ add.f 0,DBL1H,DBL1H ; can't ror.f by 32 :-(
+ tst_s DBL1H,DBL1H
+ cmp.eq mlo,r9
+ add.cs.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.cs DBL0H,DBL0H,1
+
+.Lret0:
+ /* return +- 0 */
+ j_s.d [blink]
+ mov_s DBL0L,0
+.Linf:
+ mov_s DBL0H,r9
+ mov_s DBL0L,0
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+ ENDFUNC(__divdf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divsf3.S
new file mode 100644
index 000000000..77b257d84
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/divsf3.S
@@ -0,0 +1,274 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ - calculate 15..18 bit inverse using a table of approximating polynoms.
+ precision is higher for polynoms used to evaluate input with larger
+ value.
+ - do one newton-raphson iteration step to double the precision,
+ then multiply this with the divisor
+ -> more time to decide if dividend is subnormal
+ - the worst error propagation is on the side of the value range
+ with the least initial defect, thus giving us about 30 bits precision.
+ */
+#include "../arc-ieee-754.h"
+#define mlo acc2
+#define mhi acc1
+#define mul64(b,c) mullw 0,b,c` machlw 0,b,c
+#define mulu64(b,c) mululw 0,b,c` machulw 0,b,c
+
+#if 0 /* DEBUG */
+ .global __divsf3
+ FUNC(__divsf3)
+ .balign 4
+__divsf3:
+ push_s blink
+ push_s r1
+ bl.d __divsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __divsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+#if 1
+ bne abort
+ jeq_s [blink]
+ b abort
+#else
+ bne abort
+ j_s [blink]
+#endif
+ ENDFUNC(__divsf3)
+#define __divsf3 __divsf3_asm
+#endif /* DEBUG */
+
+ FUNC(__divsf3)
+ .balign 4
+.Ldivtab:
+ .long 0xfc0ffff0
+ .long 0xf46ffefd
+ .long 0xed1ffd2a
+ .long 0xe627fa8e
+ .long 0xdf7ff73b
+ .long 0xd917f33b
+ .long 0xd2f7eea3
+ .long 0xcd1fe986
+ .long 0xc77fe3e7
+ .long 0xc21fdddb
+ .long 0xbcefd760
+ .long 0xb7f7d08c
+ .long 0xb32fc960
+ .long 0xae97c1ea
+ .long 0xaa27ba26
+ .long 0xa5e7b22e
+ .long 0xa1cfa9fe
+ .long 0x9ddfa1a0
+ .long 0x9a0f990c
+ .long 0x9667905d
+ .long 0x92df878a
+ .long 0x8f6f7e84
+ .long 0x8c27757e
+ .long 0x88f76c54
+ .long 0x85df630c
+ .long 0x82e759c5
+ .long 0x8007506d
+ .long 0x7d3f470a
+ .long 0x7a8f3da2
+ .long 0x77ef341e
+ .long 0x756f2abe
+ .long 0x72f7212d
+ .long 0x709717ad
+ .long 0x6e4f0e44
+ .long 0x6c1704d6
+ .long 0x69e6fb44
+ .long 0x67cef1d7
+ .long 0x65c6e872
+ .long 0x63cedf18
+ .long 0x61e6d5cd
+ .long 0x6006cc6d
+ .long 0x5e36c323
+ .long 0x5c76b9f3
+ .long 0x5abeb0b7
+ .long 0x5916a79b
+ .long 0x57769e77
+ .long 0x55de954d
+ .long 0x54568c4e
+ .long 0x52d6834d
+ .long 0x51667a7f
+ .long 0x4ffe71b5
+ .long 0x4e9e68f1
+ .long 0x4d466035
+ .long 0x4bf65784
+ .long 0x4aae4ede
+ .long 0x496e4646
+ .long 0x48363dbd
+ .long 0x47063547
+ .long 0x45de2ce5
+ .long 0x44be2498
+ .long 0x43a61c64
+ .long 0x4296144a
+ .long 0x41860c0e
+ .long 0x407e03ee
+.L7f800000:
+ .long 0x7f800000
+ .balign 4
+ .global __divsf3_support
+__divsf3_support:
+.Linf_NaN:
+ bclr.f 0,r0,31 ; 0/0 -> NaN
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ bic_s r0,r0,r1
+ sub.eq r0,r0,1
+ j_s.d [blink]
+ or r0,r0,r9
+.Lret0:
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r1
+/* N.B. the spacing between divtab and the sub3 to get its address must
+ be a multiple of 8. */
+__divsf3:
+ ld.as r9,[pcl,-9]; [pcl,(-((.-.L7f800000) >> 2))] ; 0x7f800000
+ sub3 r3,pcl,37;(.-.Ldivtab) >> 3
+ lsr r2,r1,17
+ and.f r11,r1,r9
+ bmsk r5,r2,5
+ beq.d .Ldenorm_fp1
+ asl r6,r1,8
+ and.f r2,r0,r9
+ ld.as r5,[r3,r5]
+ asl r4,r1,9
+ bset r6,r6,31
+ breq.d r11,r9,.Linf_nan_fp1
+.Lpast_denorm_fp1:
+ mululw 0,r5,r4
+ machulw r8,r5,r4
+ breq.d r2,r9,.Linf_nan_fp0
+ asl r5,r5,13
+ sub r7,r5,r8
+ mululw 0,r7,r6
+ machulw r8,r7,r6
+ beq.d .Ldenorm_fp0
+ asl r12,r0,8
+ mulu64 (r8,r7)
+ bset r3,r12,31
+.Lpast_denorm_fp0:
+ cmp_s r3,r6
+ lsr.cc r3,r3,1
+ add_s r2,r2, /* wait for immediate */ \
+ 0x3f000000
+ sub r7,r7,mhi ; u1.31 inverse, about 30 bit
+ mulu64 (r3,r7)
+ sbc r2,r2,r11
+ xor.f 0,r0,r1
+ and r0,r2,r9
+ bclr r3,r9,23 ; 0x7f000000
+ brhs.d r2,r3,.Linf_denorm
+ bxor.mi r0,r0,31
+.Lpast_denorm:
+ add r3,mhi,0x22 ; round to nearest or higher
+ tst r3,0x3c ; check if rounding was unsafe
+ lsr r3,r3,6
+ jne.d [blink] ; return if rounding was safe.
+ add_s r0,r0,r3
+ /* work out exact rounding if we fall through here. */
+ /* We know that the exact result cannot be represented in single
+ precision. Find the mid-point between the two nearest
+ representable values, multiply with the divisor, and check if
+ the result is larger than the dividend. */
+ add_s r3,r3,r3
+ sub_s r3,r3,1
+ mulu64 (r3,r6)
+ asr.f 0,r0,1 ; for round-to-even in case this is a denorm
+ rsub r2,r9,25
+ asl_s r12,r12,r2
+ sub.f 0,r12,mlo
+ j_s.d [blink]
+ sub.mi r0,r0,1
+.Linf_nan_fp1:
+ lsr_s r0,r0,31
+ bmsk.f 0,r1,22
+ asl_s r0,r0,31
+ bne_s 0f ; inf/inf -> nan
+ brne r2,r9,.Lsigned0 ; x/inf -> 0, but x/nan -> nan
+0: j_s.d [blink]
+ mov r0,-1
+.Lsigned0:
+.Linf_nan_fp0:
+ tst_s r1,r1
+ j_s.d [blink]
+ bxor.mi r0,r0,31
+ .balign 4
+ .global __divsf3
+/* For denormal results, it is possible that an exact result needs
+ rounding, and thus the round-to-even rule has to come into play. */
+.Linf_denorm:
+ brlo r2,0xc0000000,.Linf
+.Ldenorm:
+ asr_s r2,r2,23
+ bic r0,r0,r9
+ neg r9,r2
+ brlo.d r9,25,.Lpast_denorm
+ lsr r3,mlo,r9
+ /* Fall through: return +- 0 */
+ j_s [blink]
+.Linf:
+ j_s.d [blink]
+ or r0,r0,r9
+ .balign 4
+.Ldenorm_fp1:
+ norm.f r12,r6 ; flag for x/0 -> Inf check
+ add r6,r6,r6
+ rsub r5,r12,16
+ ror r5,r1,r5
+ bmsk r5,r5,5
+ bic.ne.f 0, \
+ 0x60000000,r0 ; large number / denorm -> Inf
+ ld.as r5,[r3,r5]
+ asl r6,r6,r12
+ beq.d .Linf_NaN
+ and.f r2,r0,r9
+ add r4,r6,r6
+ asl_s r12,r12,23
+ bne.d .Lpast_denorm_fp1
+ add_s r2,r2,r12
+.Ldenorm_fp0:
+ mulu64 (r8,r7)
+ bclr r12,r12,31
+ norm.f r3,r12 ; flag for 0/x -> 0 check
+ bic.ne.f 0,0x60000000,r1 ; denorm/large number -> 0
+ beq_s .Lret0
+ asl_s r12,r12,r3
+ asl_s r3,r3,23
+ add_s r12,r12,r12
+ add r11,r11,r3
+ b.d .Lpast_denorm_fp0
+ mov_s r3,r12
+ ENDFUNC(__divsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/muldf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/muldf3.S
new file mode 100644
index 000000000..59df77253
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/muldf3.S
@@ -0,0 +1,231 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __muldf3
+ .balign 4
+__muldf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __muldf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __muldf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ b abort
+#define __muldf3 __muldf3_asm
+#endif /* DEBUG */
+
+__muldf3_support: /* This label makes debugger output saner. */
+ .balign 4
+ FUNC(__muldf3)
+.Ldenorm_2:
+ breq.d DBL1L,0,.Lret0_2 ; 0 input -> 0 output
+ norm.f r12,DBL1L
+ mov.mi r12,21
+ add.pl r12,r12,22
+ neg r11,r12
+ asl_s r12,r12,20
+ lsr.f DBL1H,DBL1L,r11
+ ror DBL1L,DBL1L,r11
+ sub_s DBL0H,DBL0H,r12
+ mov.eq DBL1H,DBL1L
+ sub_l DBL1L,DBL1L,DBL1H
+ /* Fall through. */
+ .global __muldf3
+ .balign 4
+__muldf3:
+ mululw 0,DBL0L,DBL1L
+ machulw r4,DBL0L,DBL1L
+ ld.as r9,[pcl,0x67] ; ((.L7ff00000-.+2)/4)]
+ bmsk r6,DBL0H,19
+ bset r6,r6,20
+ mov r8,acc2
+ mululw 0,r4,1
+ and r11,DBL0H,r9
+ breq.d r11,0,.Ldenorm_dbl0
+ and r12,DBL1H,r9
+ breq.d r12,0,.Ldenorm_dbl1
+ maclw 0,r6,DBL1L
+ machulw 0,r6,DBL1L
+ breq.d r11,r9,.Linf_nan
+ bmsk r10,DBL1H,19
+ breq.d r12,r9,.Linf_nan
+ bset r10,r10,20
+ maclw 0,r10,DBL0L
+ machulw r5,r10,DBL0L
+ add_s r12,r12,r11 ; add exponents
+ mov r4,acc2
+ mululw 0,r5,1
+ maclw 0,r6,r10
+ machulw r7,r6,r10 ; fraction product in r7:acc2:r4:r8
+ tst r8,r8
+ bclr r8,r9,30 ; 0x3ff00000
+ bset.ne r4,r4,0 ; put least significant word into sticky bit
+ bclr r6,r9,20 ; 0x7fe00000
+ lsr.f r10,r7,9
+ rsub.eq r8,r8,r9 ; 0x40000000
+ sub r12,r12,r8 ; subtract bias + implicit 1
+ brhs.d r12,r6,.Linf_denorm
+ rsub r10,r10,12
+.Lshift_frac:
+ neg r8,r10
+ asl r6,r4,r10
+ lsr DBL0L,r4,r8
+ add.f 0,r6,r6
+ btst.eq DBL0L,0
+ cmp.eq r4,r4 ; round to nearest / round to even
+ asl r4,acc2,r10
+ lsr r5,acc2,r8
+ adc.f DBL0L,DBL0L,r4
+ xor.f 0,DBL0H,DBL1H
+ asl r7,r7,r10
+ add_s r12,r12,r5
+ adc DBL0H,r12,r7
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+
+/* N.B. This is optimized for ARC700.
+ ARC600 has very different scheduling / instruction selection criteria. */
+
+/* If one number is denormal, subtract some from the exponent of the other
+ one (if the other exponent is too small, return 0), and normalize the
+ denormal. Then re-run the computation. */
+.Lret0_2:
+ lsr_s DBL0H,DBL0H,31
+ asl_s DBL0H,DBL0H,31
+ j_s.d [blink]
+ mov_s DBL0L,0
+ .balign 4
+.Ldenorm_dbl0:
+ mov_s r12,DBL0L
+ mov_s DBL0L,DBL1L
+ mov_s DBL1L,r12
+ mov_s r12,DBL0H
+ mov_s DBL0H,DBL1H
+ mov_s DBL1H,r12
+ and r11,DBL0H,r9
+.Ldenorm_dbl1:
+ brhs r11,r9,.Linf_nan
+ brhs 0x3ca00001,r11,.Lret0
+ sub_s DBL0H,DBL0H,DBL1H
+ bmsk.f DBL1H,DBL1H,30
+ add_s DBL0H,DBL0H,DBL1H
+ beq.d .Ldenorm_2
+ norm r12,DBL1H
+ sub_s r12,r12,10
+ asl r5,r12,20
+ asl_s DBL1H,DBL1H,r12
+ sub DBL0H,DBL0H,r5
+ neg r5,r12
+ lsr r6,DBL1L,r5
+ asl_s DBL1L,DBL1L,r12
+ b.d __muldf3
+ add_s DBL1H,DBL1H,r6
+
+.Lret0: xor_s DBL0H,DBL0H,DBL1H
+ bclr DBL1H,DBL0H,31
+ xor_s DBL0H,DBL0H,DBL1H
+ j_s.d [blink]
+ mov_s DBL0L,0
+
+ .balign 4
+.Linf_nan:
+ bclr r12,DBL1H,31
+ xor_s DBL1H,DBL1H,DBL0H
+ bclr_s DBL0H,DBL0H,31
+ max r8,DBL0H,r12 ; either NaN -> NaN ; otherwise inf
+ or.f 0,DBL0H,DBL0L
+ mov_s DBL0L,0
+ or.ne.f DBL1L,DBL1L,r12
+ not_s DBL0H,DBL0L ; inf * 0 -> NaN
+ mov.ne DBL0H,r8
+ tst_s DBL1H,DBL1H
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+
+/* We have checked for infinity / NaN input before, and transformed
+ denormalized inputs into normalized inputs. Thus, the worst case
+ exponent overflows are:
+ 1 + 1 - 0x400 == 0xc02 : maximum underflow
+ 0x7fe + 0x7fe - 0x3ff == 0xbfd ; maximum overflow
+ N.B. 0x7e and 0x7f are also values for overflow.
+
+ If (r12 <= -54), we have an underflow to zero. */
+ .balign 4
+.Linf_denorm:
+ lsr r6,r12,28
+ brlo.d r6,0xc,.Linf
+ asr r6,r12,20
+ add.f r10,r10,r6
+ brgt.d r10,0,.Lshift_frac
+ mov_s r12,0
+ beq.d .Lround_frac
+ add r10,r10,32
+.Lshift32_frac:
+ tst r4,r4
+ mov r4,acc2
+ bset.ne r4,r4,1
+ mululw 0,r7,1
+ brge.d r10,1,.Lshift_frac
+ mov r7,0
+ breq.d r10,0,.Lround_frac
+ add r10,r10,32
+ brgt r10,21,.Lshift32_frac
+ b_s .Lret0
+
+.Lround_frac:
+ add.f 0,r4,r4
+ btst.eq acc2,0
+ mov_s DBL0L,acc2
+ mov_s DBL0H,r7
+ adc.eq.f DBL0L,DBL0L,0
+ j_s.d [blink]
+ adc.eq DBL0H,DBL0H,0
+
+.Linf: mov_s DBL0L,0
+ xor.f DBL1H,DBL1H,DBL0H
+ mov_s DBL0H,r9
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+ ENDFUNC(__muldf3)
+
+ .balign 4
+.L7ff00000:
+ .long 0x7ff00000
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/mulsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/mulsf3.S
new file mode 100644
index 000000000..41681f542
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-dsp/mulsf3.S
@@ -0,0 +1,176 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __mulsf3
+ FUNC(__mulsf3)
+ .balign 4
+__mulsf3:
+ push_s blink
+ push_s r1
+ bl.d __mulsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __mulsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ and r12,r0,r1
+ bic.f 0,0x7f800000,r12
+ bne 0f
+ bmsk.f 0,r0,22
+ bmsk.ne.f r1,r1,22
+ jne_s [blink] ; both NaN -> OK
+0: bl abort
+ ENDFUNC(__mulsf3)
+#define __mulsf3 __mulsf3_asm
+#endif /* DEBUG */
+
+ .balign 4
+ .global __mulsf3
+ FUNC(__mulsf3)
+__mulsf3:
+ ld.as r9,[pcl,80]; [pcl,((.L7f800000-.+2)/4)]
+ bmsk r4,r1,22
+ bset r2,r0,23
+ asl_s r2,r2,8
+ bset r3,r4,23
+ and r11,r0,r9
+ breq.d r11,0,.Ldenorm_dbl0
+ and r12,r1,r9
+ breq.d r12,0,.Ldenorm_dbl1
+ xor_s r0,r0,r1
+ mululw 0,r2,r3
+ machulw r6,r2,r3
+ breq.d r11,r9,.Linf_nan_dbl0
+ ld.as r4,[pcl,69]; [pcl,((.L7fffffff-.+2)/4)]
+ breq.d r12,r9,.Linf_nan_dbl1
+.Lpast_denorm:
+ asl.f 0,r6,8
+ mov r7,acc2
+ add.pl r6,r6,r6
+ bclr.pl r6,r6,23
+ add.pl.f r7,r7,r7
+ add.cs r6,r6,1
+ lsr.f 0,r6,1
+ add_s r12,r12,r11
+ adc.f 0,r7,r4
+ add_s r12,r12, \
+ -0x3f800000
+ adc.f r8,r6,r12
+ tst.pl r8,r9
+ bic r0,r0,r4
+ min r3,r8,r9
+ jpnz.d [blink]
+ add.pnz r0,r0,r3
+; infinity or denormal number
+ add.ne.f r3,r3,r3
+ asr_s r3,r3,23+1
+ bset r6,r6,23
+ bpnz.d .Linfinity
+ sub_s r3,r3,1
+ neg_s r2,r3
+ brhi.d r2,24,.Lret_r0 ; right shift shift > 24 -> return +-0
+ lsr r2,r6,r2
+ asl r9,r6,r3
+ lsr.f 0,r2,1
+ tst r7,r7
+ add_s r0,r0,r2
+ bset.ne r9,r9,0
+ adc.f 0,r9,r4
+ j_s.d [blink]
+ add.cs r0,r0,1
+.Linfinity:
+ j_s.d [blink]
+ add_s r0,r0,r9
+
+.Lret_r0: j_s [blink]
+
+ .balign 4
+.Ldenorm_dbl0:
+ bclr_s r2,r2,31
+ norm.f r4,r2
+ add_s r2,r2,r2
+ asl r2,r2,r4
+ breq.d r12,r9,.Ldenorm_dbl0_inf_nan_dbl1
+ asl r4,r4,23
+ mululw 0,r2,r3
+ machulw r6,r2,r3
+ sub.ne.f r12,r12,r4
+ ld.as r4,[pcl,28]; [pcl,((.L7fffffff-.+2)/4)]
+ bhi.d .Lpast_denorm
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r1
+
+ .balign 4
+.Ldenorm_dbl0_inf_nan_dbl1:
+ bmsk.f 0,r0,30
+ mov.eq r1,-1
+.Linf_nan_dbl1:
+ xor_s r1,r1,r0
+.Linf_nan_dbl0:
+ bclr_s r1,r1,31
+ j_s.d [blink]
+ xor_s r0,r0,r1
+
+ .balign 4
+.Ldenorm_dbl1:
+ breq.d r11,r9,.Linf_nan_dbl0_2
+ norm.f r3,r4
+ sub_s r3,r3,7
+ asl r4,r4,r3
+ mululw 0,r2,r4
+ machulw r6,r2,r4
+ sub_s r3,r3,1
+ asl_s r3,r3,23
+ sub.ne.f r11,r11,r3
+ ld.as r4,[pcl,11]; [pcl,((.L7fffffff-.+2)/4)]
+ bhi.d .Lpast_denorm
+ bmsk r8,r0,30
+ j_s.d [blink]
+ bic r0,r0,r8
+
+ .balign 4
+.Linf_nan_dbl0_2:
+ bclr_s r1,r1,31
+ xor_s r0,r0,r1
+ sub.eq r1,r1,1 ; inf/nan * 0 -> nan
+ bic.f 0,r9,r1
+ j_s.d [blink]
+ or.eq r0,r0,r1 ; r1 nan -> result nan
+
+ .balign 4
+.L7f800000:
+ .long 0x7f800000
+.L7fffffff:
+ .long 0x7fffffff
+ ENDFUNC(__mulsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divdf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divdf3.S
new file mode 100644
index 000000000..100c8bc6c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divdf3.S
@@ -0,0 +1,410 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ to calculate a := b/x as b*y, with y := 1/x:
+ - x is in the range [1..2)
+ - calculate 15..18 bit inverse y0 using a table of approximating polynoms.
+ Precision is higher for polynoms used to evaluate input with larger
+ value.
+ - Do one newton-raphson iteration step to double the precision,
+ then multiply this with the divisor
+ -> more time to decide if dividend is subnormal
+ - the worst error propagation is on the side of the value range
+ with the least initial defect, thus giving us about 30 bits precision.
+ The truncation error for the either is less than 1 + x/2 ulp.
+ A 31 bit inverse can be simply calculated by using x with implicit 1
+ and chaining the multiplies. For a 32 bit inverse, we multiply y0^2
+ with the bare fraction part of x, then add in y0^2 for the implicit
+ 1 of x.
+ - If calculating a 31 bit inverse, the systematic error is less than
+ -1 ulp; likewise, for 32 bit, it is less than -2 ulp.
+ - If we calculate our seed with a 32 bit fraction, we can archive a
+ tentative result strictly better than -2 / +2.5 (1) ulp/128, i.e. we
+ only need to take the step to calculate the 2nd stage rest and
+ rounding adjust 1/32th of the time. However, if we use a 20 bit
+ fraction for the seed, the negative error can exceed -2 ulp/128, (2)
+ thus for a simple add / tst check, we need to do the 2nd stage
+ rest calculation/ rounding adjust 1/16th of the time.
+ (1): The inexactness of the 32 bit inverse contributes an error in the
+ range of (-1 .. +(1+x/2) ) ulp/128. Leaving out the low word of the
+ rest contributes an error < +1/x ulp/128 . In the interval [1,2),
+ x/2 + 1/x <= 1.5 .
+ (2): Unless proven otherwise. I have not actually looked for an
+ example where -2 ulp/128 is exceeded, and my calculations indicate
+ that the excess, if existent, is less than -1/512 ulp.
+ ??? The algorithm is still based on the ARC700 optimized code.
+ Maybe we could make better use of 64 bit multiply results and/or mmed .
+ */
+#include "../arc-ieee-754.h"
+
+/* N.B. fp-bit.c does double rounding on denormal numbers. */
+#if 0 /* DEBUG */
+ .global __divdf3
+ FUNC(__divdf3)
+ .balign 4
+__divdf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __divdf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __divdf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ and r12,DBL0H,DBL1H
+ bic.f 0,0x7ff80000,r12 ; both NaN -> OK
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__divdf3)
+#define __divdf3 __divdf3_asm
+#endif /* DEBUG */
+
+ FUNC(__divdf3)
+ .balign 4
+.L7ff00000:
+ .long 0x7ff00000
+.Ldivtab:
+ .long 0xfc0fffe1
+ .long 0xf46ffdfb
+ .long 0xed1ffa54
+ .long 0xe61ff515
+ .long 0xdf7fee75
+ .long 0xd91fe680
+ .long 0xd2ffdd52
+ .long 0xcd1fd30c
+ .long 0xc77fc7cd
+ .long 0xc21fbbb6
+ .long 0xbcefaec0
+ .long 0xb7efa100
+ .long 0xb32f92bf
+ .long 0xae8f83b7
+ .long 0xaa2f7467
+ .long 0xa5ef6479
+ .long 0xa1cf53fa
+ .long 0x9ddf433e
+ .long 0x9a0f3216
+ .long 0x965f2091
+ .long 0x92df0f11
+ .long 0x8f6efd05
+ .long 0x8c1eeacc
+ .long 0x88eed876
+ .long 0x85dec615
+ .long 0x82eeb3b9
+ .long 0x800ea10b
+ .long 0x7d3e8e0f
+ .long 0x7a8e7b3f
+ .long 0x77ee6836
+ .long 0x756e5576
+ .long 0x72fe4293
+ .long 0x709e2f93
+ .long 0x6e4e1c7f
+ .long 0x6c0e095e
+ .long 0x69edf6c5
+ .long 0x67cde3a5
+ .long 0x65cdd125
+ .long 0x63cdbe25
+ .long 0x61ddab3f
+ .long 0x600d991f
+ .long 0x5e3d868c
+ .long 0x5c6d7384
+ .long 0x5abd615f
+ .long 0x590d4ecd
+ .long 0x576d3c83
+ .long 0x55dd2a89
+ .long 0x545d18e9
+ .long 0x52dd06e9
+ .long 0x516cf54e
+ .long 0x4ffce356
+ .long 0x4e9cd1ce
+ .long 0x4d3cbfec
+ .long 0x4becae86
+ .long 0x4aac9da4
+ .long 0x496c8c73
+ .long 0x483c7bd3
+ .long 0x470c6ae8
+ .long 0x45dc59af
+ .long 0x44bc4915
+ .long 0x43ac3924
+ .long 0x428c27fb
+ .long 0x418c187a
+ .long 0x407c07bd
+
+__divdf3_support: /* This label makes debugger output saner. */
+ .balign 4
+.Ldenorm_dbl1:
+ brge r6, \
+ 0x43500000,.Linf_NaN ; large number / denorm -> Inf
+ bmsk.f r12,DBL1H,19
+ mov.eq r12,DBL1L
+ mov.eq DBL1L,0
+ sub.eq r7,r7,32
+ norm.f r11,r12 ; flag for x/0 -> Inf check
+ beq_s .Linf_NaN
+ mov.mi r11,0
+ add.pl r11,r11,1
+ add_s r12,r12,r12
+ asl r8,r12,r11
+ rsub r12,r11,31
+ lsr r12,DBL1L,r12
+ tst_s DBL1H,DBL1H
+ or r8,r8,r12
+ lsr r4,r8,26
+ lsr DBL1H,r8,12
+ ld.as r4,[r10,r4]
+ bxor.mi DBL1H,DBL1H,31
+ sub r11,r11,11
+ asl DBL1L,DBL1L,r11
+ sub r11,r11,1
+ mulu64 r4,r8
+ sub r7,r7,r11
+ b.d .Lpast_denorm_dbl1
+ asl r7,r7,20
+
+ .balign 4
+.Ldenorm_dbl0:
+ bmsk.f r12,DBL0H,19
+ ; wb stall
+ mov.eq r12,DBL0L
+ sub.eq r6,r6,32
+ norm.f r11,r12 ; flag for 0/x -> 0 check
+ brge r7, \
+ 0x43500000, .Lret0_2 ; denorm/large number -> 0
+ beq_s .Lret0_2
+ mov.mi r11,0
+ add.pl r11,r11,1
+ asl r12,r12,r11
+ sub r6,r6,r11
+ add.f 0,r6,31
+ lsr r10,DBL0L,r6
+ mov.mi r10,0
+ add r6,r6,11+32
+ neg.f r11,r6
+ asl DBL0L,DBL0L,r11
+ mov.pl DBL0L,0
+ sub r6,r6,32-1
+ b.d .Lpast_denorm_dbl0
+ asl r6,r6,20
+
+.Linf_NaN:
+ tst_s DBL0L,DBL0L ; 0/0 -> NaN
+ xor_s DBL1H,DBL1H,DBL0H
+ bclr.eq.f DBL0H,DBL0H,31
+ bmsk DBL0H,DBL1H,30
+ xor_s DBL0H,DBL0H,DBL1H
+ sub.eq DBL0H,DBL0H,1
+ mov_s DBL0L,0
+ j_s.d [blink]
+ or DBL0H,DBL0H,r9
+ .balign 4
+.Lret0_2:
+ xor_s DBL1H,DBL1H,DBL0H
+ mov_s DBL0L,0
+ bmsk DBL0H,DBL1H,30
+ j_s.d [blink]
+ xor_s DBL0H,DBL0H,DBL1H
+ .balign 4
+ .global __divdf3
+/* N.B. the spacing between divtab and the sub3 to get its address must
+ be a multiple of 8. */
+__divdf3:
+ asl r8,DBL1H,12
+ lsr r4,r8,26
+ sub3 r10,pcl,61; (.-.Ldivtab) >> 3
+ ld.as r9,[pcl,-124]; [pcl,(-((.-.L7ff00000) >> 2))] ; 0x7ff00000
+ ld.as r4,[r10,r4]
+ lsr r12,DBL1L,20
+ and.f r7,DBL1H,r9
+ or r8,r8,r12
+ mulu64 r4,r8
+ beq.d .Ldenorm_dbl1
+.Lpast_denorm_dbl1:
+ and.f r6,DBL0H,r9
+ breq.d r7,r9,.Linf_nan_dbl1
+ asl r4,r4,12
+ sub r4,r4,mhi
+ mulu64 r4,r4
+ beq.d .Ldenorm_dbl0
+ lsr r8,r8,1
+ breq.d r6,r9,.Linf_nan_dbl0
+ asl r12,DBL0H,11
+ lsr r10,DBL0L,21
+.Lpast_denorm_dbl0:
+ bset r8,r8,31
+ mulu64 mhi,r8
+ add_s r12,r12,r10
+ bset r5,r12,31
+ cmp r5,r8
+ cmp.eq DBL0L,DBL1L
+ lsr.cc r5,r5,1
+ sub r4,r4,mhi ; u1.31 inverse, about 30 bit
+ mulu64 r5,r4 ; result fraction highpart
+ lsr r8,r8,2 ; u3.29
+ add r5,r6, /* wait for immediate */ \
+ 0x3fe00000
+ mov r11,mhi ; result fraction highpart
+ mulu64 r11,r8 ; u-28.31
+ asl_s DBL1L,DBL1L,9 ; u-29.23:9
+ sbc r6,r5,r7
+ mov r12,mlo ; u-28.31
+ mulu64 r11,DBL1L ; mhi: u-28.23:9
+ add.cs DBL0L,DBL0L,DBL0L
+ asl_s DBL0L,DBL0L,6 ; u-26.25:7
+ asl r10,r11,23
+ sub_l DBL0L,DBL0L,r12
+ lsr r7,r11,9
+ sub r5,DBL0L,mhi ; rest msw ; u-26.31:0
+ mul64 r5,r4 ; mhi: result fraction lowpart
+ xor.f 0,DBL0H,DBL1H
+ and DBL0H,r6,r9
+ add_s DBL0H,DBL0H,r7
+ bclr r12,r9,20 ; 0x7fe00000
+ brhs.d r6,r12,.Linf_denorm
+ bxor.mi DBL0H,DBL0H,31
+ add.f r12,mhi,0x11
+ asr r9,r12,5
+ sub.mi DBL0H,DBL0H,1
+ add.f DBL0L,r9,r10
+ tst r12,0x1c
+ jne.d [blink]
+ add.cs DBL0H,DBL0H,1
+ /* work out exact rounding if we fall through here. */
+ /* We know that the exact result cannot be represented in double
+ precision. Find the mid-point between the two nearest
+ representable values, multiply with the divisor, and check if
+ the result is larger than the dividend. Since we want to know
+ only the sign bit, it is sufficient to calculate only the
+ highpart of the lower 64 bits. */
+ mulu64 r11,DBL1L ; rest before considering r12 in r5 : -mlo
+ sub.f DBL0L,DBL0L,1
+ asl r12,r9,2 ; u-22.30:2
+ sub.cs DBL0H,DBL0H,1
+ sub.f r12,r12,2
+ mov r10,mlo ; rest before considering r12 in r5 : -r10
+ mulu64 r12,DBL1L ; mhi: u-51.32
+ asl r5,r5,25 ; s-51.7:25
+ lsr r10,r10,7 ; u-51.30:2
+ mov r7,mhi ; u-51.32
+ mulu64 r12,r8 ; mlo: u-51.31:1
+ sub r5,r5,r10
+ add.mi r5,r5,DBL1L ; signed multiply adjust for r12*DBL1L
+ bset r7,r7,0 ; make sure that the result is not zero, and that
+ sub r5,r5,r7 ; a highpart zero appears negative
+ sub.f r5,r5,mlo ; rest msw
+ add.pl.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.eq DBL0H,DBL0H,1
+
+.Linf_nan_dbl1: ; 0/Inf -> NaN Inf/Inf -> NaN x/Inf-> 0 x/NaN -> NaN
+ or.f 0,r6,DBL0L
+ cmp.ne r6,r9
+ not_s DBL0L,DBL1H
+ sub_s.ne DBL0L,DBL0L,DBL0L
+ tst_s DBL0H,DBL0H
+ add_s DBL0H,DBL1H,DBL0L
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+.Linf_nan_dbl0:
+ tst_s DBL1H,DBL1H
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+ .balign 4
+.Linf_denorm:
+ lsr r12,r6,28
+ brlo.d r12,0xc,.Linf
+.Ldenorm:
+ asr r6,r6,20
+ neg r9,r6
+ mov_s DBL0H,0
+ brhs.d r9,54,.Lret0
+ bxor.mi DBL0H,DBL0H,31
+ add r12,mhi,1
+ and r12,r12,-4
+ rsub r7,r6,5
+ asr r10,r12,28
+ bmsk r4,r12,27
+ min r7,r7,31
+ asr DBL0L,r4,r7
+ add DBL1H,r11,r10
+ abs.f r10,r4
+ sub.mi r10,r10,1
+ add.f r7,r6,32-5
+ asl r4,r4,r7
+ mov.mi r4,r10
+ add.f r10,r6,23
+ rsub r7,r6,9
+ lsr r7,DBL1H,r7
+ asl r10,DBL1H,r10
+ or.pnz DBL0H,DBL0H,r7
+ or.mi r4,r4,r10
+ mov.mi r10,r7
+ add.f DBL0L,r10,DBL0L
+ add.cs.f DBL0H,DBL0H,1 ; carry clear after this point
+ bxor.f 0,r4,31
+ add.pnz.f DBL0L,DBL0L,1
+ add.cs.f DBL0H,DBL0H,1
+ jne_s [blink]
+ /* Calculation so far was not conclusive; calculate further rest. */
+ mulu64 r11,DBL1L ; rest before considering r12 in r5 : -mlo
+ asr.f r12,r12,3
+ asl r5,r5,25 ; s-51.7:25
+ mov r11,mlo ; rest before considering r12 in r5 : -r11
+ mulu64 r12,r8 ; u-51.31:1
+ and r9,DBL0L,1 ; tie-breaker: round to even
+ lsr r11,r11,7 ; u-51.30:2
+ mov DBL1H,mlo ; u-51.31:1
+ mulu64 r12,DBL1L ; u-51.62:2
+ sub.mi r11,r11,DBL1L ; signed multiply adjust for r12*DBL1L
+ add_s DBL1H,DBL1H,r11
+ sub DBL1H,DBL1H,r5 ; -rest msw
+ add_s DBL1H,DBL1H,mhi ; -rest msw
+ add.f 0,DBL1H,DBL1H ; can't ror.f by 32 :-(
+ tst_s DBL1H,DBL1H
+ cmp.eq mlo,r9
+ add.cs.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.cs DBL0H,DBL0H,1
+
+.Lret0:
+ /* return +- 0 */
+ j_s.d [blink]
+ mov_s DBL0L,0
+.Linf:
+ mov_s DBL0H,r9
+ mov_s DBL0L,0
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+ ENDFUNC(__divdf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divsf3.S
new file mode 100644
index 000000000..ef54ffd7c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/divsf3.S
@@ -0,0 +1,274 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ - calculate 15..18 bit inverse using a table of approximating polynoms.
+ precision is higher for polynoms used to evaluate input with larger
+ value.
+ - do one newton-raphson iteration step to double the precision,
+ then multiply this with the divisor
+ -> more time to decide if dividend is subnormal
+ - the worst error propagation is on the side of the value range
+ with the least initial defect, thus giving us about 30 bits precision.
+ */
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __divsf3
+ FUNC(__divsf3)
+ .balign 4
+__divsf3:
+ push_s blink
+ push_s r1
+ bl.d __divsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __divsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+#if 1
+ bne abort
+ jeq_s [blink]
+ b abort
+#else
+ bne abort
+ j_s [blink]
+#endif
+ ENDFUNC(__divsf3)
+#define __divsf3 __divsf3_asm
+#endif /* DEBUG */
+
+ FUNC(__divsf3)
+ .balign 4
+.Ldivtab:
+ .long 0xfc0ffff0
+ .long 0xf46ffefd
+ .long 0xed1ffd2a
+ .long 0xe627fa8e
+ .long 0xdf7ff73b
+ .long 0xd917f33b
+ .long 0xd2f7eea3
+ .long 0xcd1fe986
+ .long 0xc77fe3e7
+ .long 0xc21fdddb
+ .long 0xbcefd760
+ .long 0xb7f7d08c
+ .long 0xb32fc960
+ .long 0xae97c1ea
+ .long 0xaa27ba26
+ .long 0xa5e7b22e
+ .long 0xa1cfa9fe
+ .long 0x9ddfa1a0
+ .long 0x9a0f990c
+ .long 0x9667905d
+ .long 0x92df878a
+ .long 0x8f6f7e84
+ .long 0x8c27757e
+ .long 0x88f76c54
+ .long 0x85df630c
+ .long 0x82e759c5
+ .long 0x8007506d
+ .long 0x7d3f470a
+ .long 0x7a8f3da2
+ .long 0x77ef341e
+ .long 0x756f2abe
+ .long 0x72f7212d
+ .long 0x709717ad
+ .long 0x6e4f0e44
+ .long 0x6c1704d6
+ .long 0x69e6fb44
+ .long 0x67cef1d7
+ .long 0x65c6e872
+ .long 0x63cedf18
+ .long 0x61e6d5cd
+ .long 0x6006cc6d
+ .long 0x5e36c323
+ .long 0x5c76b9f3
+ .long 0x5abeb0b7
+ .long 0x5916a79b
+ .long 0x57769e77
+ .long 0x55de954d
+ .long 0x54568c4e
+ .long 0x52d6834d
+ .long 0x51667a7f
+ .long 0x4ffe71b5
+ .long 0x4e9e68f1
+ .long 0x4d466035
+ .long 0x4bf65784
+ .long 0x4aae4ede
+ .long 0x496e4646
+ .long 0x48363dbd
+ .long 0x47063547
+ .long 0x45de2ce5
+ .long 0x44be2498
+ .long 0x43a61c64
+ .long 0x4296144a
+ .long 0x41860c0e
+ .long 0x407e03ee
+.L7f800000:
+ .long 0x7f800000
+ .balign 4
+ .global __divsf3_support
+__divsf3_support:
+.Linf_NaN:
+ bclr.f 0,r0,31 ; 0/0 -> NaN
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ bic_s r0,r0,r1
+ sub.eq r0,r0,1
+ j_s.d [blink]
+ or r0,r0,r9
+.Lret0:
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r1
+/* N.B. the spacing between divtab and the sub3 to get its address must
+ be a multiple of 8. */
+__divsf3:
+ lsr r2,r1,17
+ sub3 r3,pcl,37 ; (.-.Ldivtab) >> 3
+ bmsk_s r2,r2,5
+ ld.as r5,[r3,r2]
+ asl r4,r1,9
+ ld.as r9,[pcl,-13]; [pcl,(-((.-.L7f800000) >> 2))] ; 0x7f800000
+ mulu64 r5,r4
+ and.f r11,r1,r9
+ asl r6,r1,8
+ bset r6,r6,31
+ beq.d .Ldenorm_fp1
+ asl r5,r5,13
+ breq.d r11,r9,.Linf_nan_fp1
+ and.f r2,r0,r9
+ sub r7,r5,mhi
+ mulu64 r7,r6
+ beq.d .Ldenorm_fp0
+ asl r12,r0,8
+ breq.d r2,r9,.Linf_nan_fp0
+ mulu64 mhi,r7
+.Lpast_denorm_fp1:
+ bset r3,r12,31
+.Lpast_denorm_fp0:
+ cmp_s r3,r6
+ lsr.cc r3,r3,1
+ add_s r2,r2, /* wait for immediate */ \
+ 0x3f000000
+ sub r7,r7,mhi ; u1.31 inverse, about 30 bit
+ mulu64 r3,r7
+ sbc r2,r2,r11
+ xor.f 0,r0,r1
+ and r0,r2,r9
+ bclr r3,r9,23 ; 0x7f000000
+ brhs.d r2,r3,.Linf_denorm
+ bxor.mi r0,r0,31
+.Lpast_denorm:
+ add r3,mhi,0x22 ; round to nearest or higher
+ tst r3,0x3c ; check if rounding was unsafe
+ lsr r3,r3,6
+ jne.d [blink] ; return if rounding was safe.
+ add_s r0,r0,r3
+ /* work out exact rounding if we fall through here. */
+ /* We know that the exact result cannot be represented in single
+ precision. Find the mid-point between the two nearest
+ representable values, multiply with the divisor, and check if
+ the result is larger than the dividend. */
+ add_s r3,r3,r3
+ sub_s r3,r3,1
+ mulu64 r3,r6
+ asr.f 0,r0,1 ; for round-to-even in case this is a denorm
+ rsub r2,r9,25
+ asl_s r12,r12,r2
+ sub.f 0,r12,mlo
+ j_s.d [blink]
+ sub.mi r0,r0,1
+.Linf_nan_fp1:
+ lsr_s r0,r0,31
+ bmsk.f 0,r1,22
+ asl_s r0,r0,31
+ bne_s 0f ; inf/inf -> nan
+ brne r2,r9,.Lsigned0 ; x/inf -> 0, but x/nan -> nan
+0: j_s.d [blink]
+ mov r0,-1
+.Lsigned0:
+.Linf_nan_fp0:
+ tst_s r1,r1
+ j_s.d [blink]
+ bxor.mi r0,r0,31
+ .balign 4
+ .global __divsf3
+/* For denormal results, it is possible that an exact result needs
+ rounding, and thus the round-to-even rule has to come into play. */
+.Linf_denorm:
+ brlo r2,0xc0000000,.Linf
+.Ldenorm:
+ asr_s r2,r2,23
+ bic r0,r0,r9
+ neg r9,r2
+ brlo.d r9,25,.Lpast_denorm
+ lsr r3,mlo,r9
+ /* Fall through: return +- 0 */
+ j_s [blink]
+.Linf:
+ j_s.d [blink]
+ or r0,r0,r9
+ .balign 4
+.Ldenorm_fp1:
+ bclr r6,r6,31
+ norm.f r12,r6 ; flag for x/0 -> Inf check
+ add r6,r6,r6
+ rsub r5,r12,16
+ ror r5,r1,r5
+ asl r6,r6,r12
+ bmsk r5,r5,5
+ ld.as r5,[r3,r5]
+ add r4,r6,r6
+ ; load latency
+ mulu64 r5,r4
+ bic.ne.f 0, \
+ 0x60000000,r0 ; large number / denorm -> Inf
+ asl r5,r5,13
+ sub r7,r5,mhi
+ beq.d .Linf_NaN
+ mulu64 r7,r6
+ asl_s r12,r12,23
+ and.f r2,r0,r9
+ add_s r2,r2,r12
+ asl r12,r0,8
+ bne.d .Lpast_denorm_fp1
+.Ldenorm_fp0: mulu64 mhi,r7
+ bclr r12,r12,31
+ norm.f r3,r12 ; flag for 0/x -> 0 check
+ bic.ne.f 0,0x60000000,r1 ; denorm/large number -> 0
+ beq_s .Lret0
+ asl_s r12,r12,r3
+ asl_s r3,r3,23
+ add_s r12,r12,r12
+ add r11,r11,r3
+ b.d .Lpast_denorm_fp0
+ mov_s r3,r12
+ ENDFUNC(__divsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/muldf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/muldf3.S
new file mode 100644
index 000000000..132b0093f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/muldf3.S
@@ -0,0 +1,234 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __muldf3
+ .balign 4
+__muldf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __muldf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __muldf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ and r12,DBL0H,DBL1H
+ bic.f 0,0x7ff80000,r12 ; both NaN -> OK
+ jeq_s [blink]
+ b abort
+#define __muldf3 __muldf3_asm
+#endif /* DEBUG */
+
+__muldf3_support: /* This label makes debugger output saner. */
+ .balign 4
+ FUNC(__muldf3)
+.Ldenorm_2:
+ breq.d DBL1L,0,.Lret0_2 ; 0 input -> 0 output
+ norm.f r12,DBL1L
+ mov.mi r12,21
+ add.pl r12,r12,22
+ neg r11,r12
+ asl_s r12,r12,20
+ lsr.f DBL1H,DBL1L,r11
+ ror DBL1L,DBL1L,r11
+ sub_s DBL0H,DBL0H,r12
+ mov.eq DBL1H,DBL1L
+ sub_l DBL1L,DBL1L,DBL1H
+ /* Fall through. */
+ .global __muldf3
+ .balign 4
+__muldf3:
+ mulu64 DBL0L,DBL1L
+ ld.as r9,[pcl,0x68] ; ((.L7ff00000-.+2)/4)]
+ bmsk r6,DBL0H,19
+ bset r6,r6,20
+ and r11,DBL0H,r9
+ breq.d r11,0,.Ldenorm_dbl0
+ and r12,DBL1H,r9
+ breq.d r12,0,.Ldenorm_dbl1
+ mov r8,mlo
+ mov r4,mhi
+ mulu64 r6,DBL1L
+ breq.d r11,r9,.Linf_nan
+ bmsk r10,DBL1H,19
+ breq.d r12,r9,.Linf_nan
+ bset r10,r10,20
+ add.f r4,r4,mlo
+ adc r5,mhi,0
+ mulu64 r10,DBL0L
+ add_s r12,r12,r11 ; add exponents
+ add.f r4,r4,mlo
+ adc r5,r5,mhi
+ mulu64 r6,r10
+ tst r8,r8
+ bclr r8,r9,30 ; 0x3ff00000
+ bset.ne r4,r4,0 ; put least significant word into sticky bit
+ bclr r6,r9,20 ; 0x7fe00000
+ add.f r5,r5,mlo
+ adc r7,mhi,0 ; fraction product in r7:r5:r4
+ lsr.f r10,r7,9
+ rsub.eq r8,r8,r9 ; 0x40000000
+ sub r12,r12,r8 ; subtract bias + implicit 1
+ brhs.d r12,r6,.Linf_denorm
+ rsub r10,r10,12
+.Lshift_frac:
+ neg r8,r10
+ asl r6,r4,r10
+ lsr DBL0L,r4,r8
+ add.f 0,r6,r6
+ btst.eq DBL0L,0
+ cmp.eq r4,r4 ; round to nearest / round to even
+ asl r4,r5,r10
+ lsr r5,r5,r8
+ adc.f DBL0L,DBL0L,r4
+ xor.f 0,DBL0H,DBL1H
+ asl r7,r7,r10
+ add_s r12,r12,r5
+ adc DBL0H,r12,r7
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+
+/* N.B. This is optimized for ARC700.
+ ARC600 has very different scheduling / instruction selection criteria. */
+
+/* If one number is denormal, subtract some from the exponent of the other
+ one (if the other exponent is too small, return 0), and normalize the
+ denormal. Then re-run the computation. */
+.Lret0_2:
+ lsr_s DBL0H,DBL0H,31
+ asl_s DBL0H,DBL0H,31
+ j_s.d [blink]
+ mov_s DBL0L,0
+ .balign 4
+.Ldenorm_dbl0:
+ mov_s r12,DBL0L
+ mov_s DBL0L,DBL1L
+ mov_s DBL1L,r12
+ mov_s r12,DBL0H
+ mov_s DBL0H,DBL1H
+ mov_s DBL1H,r12
+ and r11,DBL0H,r9
+.Ldenorm_dbl1:
+ brhs r11,r9,.Linf_nan
+ brhs 0x3ca00001,r11,.Lret0
+ sub_s DBL0H,DBL0H,DBL1H
+ bmsk.f DBL1H,DBL1H,30
+ add_s DBL0H,DBL0H,DBL1H
+ beq.d .Ldenorm_2
+ norm r12,DBL1H
+ sub_s r12,r12,10
+ asl r5,r12,20
+ asl_s DBL1H,DBL1H,r12
+ sub DBL0H,DBL0H,r5
+ neg r5,r12
+ lsr r6,DBL1L,r5
+ asl_s DBL1L,DBL1L,r12
+ b.d __muldf3
+ add_s DBL1H,DBL1H,r6
+
+.Lret0: xor_s DBL0H,DBL0H,DBL1H
+ bclr DBL1H,DBL0H,31
+ xor_s DBL0H,DBL0H,DBL1H
+ j_s.d [blink]
+ mov_s DBL0L,0
+
+ .balign 4
+.Linf_nan:
+ bclr r12,DBL1H,31
+ xor_s DBL1H,DBL1H,DBL0H
+ bclr_s DBL0H,DBL0H,31
+ max r8,DBL0H,r12 ; either NaN -> NaN ; otherwise inf
+ or.f 0,DBL0H,DBL0L
+ mov_s DBL0L,0
+ or.ne.f DBL1L,DBL1L,r12
+ not_s DBL0H,DBL0L ; inf * 0 -> NaN
+ mov.ne DBL0H,r8
+ tst_s DBL1H,DBL1H
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+
+/* We have checked for infinity / NaN input before, and transformed
+ denormalized inputs into normalized inputs. Thus, the worst case
+ exponent overflows are:
+ 1 + 1 - 0x400 == 0xc02 : maximum underflow
+ 0x7fe + 0x7fe - 0x3ff == 0xbfd ; maximum overflow
+ N.B. 0x7e and 0x7f are also values for overflow.
+
+ If (r12 <= -54), we have an underflow to zero. */
+ .balign 4
+.Linf_denorm:
+ lsr r6,r12,28
+ brlo.d r6,0xc,.Linf
+ asr r6,r12,20
+ add.f r10,r10,r6
+ brgt.d r10,0,.Lshift_frac
+ mov_s r12,0
+ beq.d .Lround_frac
+ add r10,r10,32
+.Lshift32_frac:
+ tst r4,r4
+ mov r4,r5
+ bset.ne r4,r4,1
+ mov r5,r7
+ brge.d r10,1,.Lshift_frac
+ mov r7,0
+ breq.d r10,0,.Lround_frac
+ add r10,r10,32
+ brgt r10,21,.Lshift32_frac
+ b_s .Lret0
+
+.Lround_frac:
+ add.f 0,r4,r4
+ btst.eq r5,0
+ mov_s DBL0L,r5
+ mov_s DBL0H,r7
+ adc.eq.f DBL0L,DBL0L,0
+ j_s.d [blink]
+ adc.eq DBL0H,DBL0H,0
+
+.Linf: mov_s DBL0L,0
+ xor.f DBL1H,DBL1H,DBL0H
+ mov_s DBL0H,r9
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+ ENDFUNC(__muldf3)
+
+ .balign 4
+.L7ff00000:
+ .long 0x7ff00000
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/mulsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/mulsf3.S
new file mode 100644
index 000000000..ac346de25
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600-mul64/mulsf3.S
@@ -0,0 +1,180 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __mulsf3
+ FUNC(__mulsf3)
+ .balign 4
+__mulsf3:
+ push_s blink
+ push_s r1
+ bl.d __mulsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __mulsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ and r12,r0,r1
+ bic.f 0,0x7f800000,r12
+ bne 0f
+ bmsk.f 0,r0,22
+ bmsk.ne.f r1,r1,22
+ jne_s [blink] ; both NaN -> OK
+0: bl abort
+ ENDFUNC(__mulsf3)
+#define __mulsf3 __mulsf3_asm
+#endif /* DEBUG */
+
+ .balign 4
+ .global __mulsf3
+ FUNC(__mulsf3)
+__mulsf3:
+ ld.as r9,[pcl,80]; [pcl,((.L7f800000-.+2)/4)]
+ bmsk r4,r1,22
+ bset r2,r0,23
+ asl_s r2,r2,8
+ bset r3,r4,23
+ mulu64 r2,r3
+ and r11,r0,r9
+ breq.d r11,0,.Ldenorm_dbl0
+ and r12,r1,r9
+ breq.d r12,0,.Ldenorm_dbl1
+ xor_s r0,r0,r1
+ breq.d r11,r9,.Linf_nan_dbl0
+ ld.as r4,[pcl,70]; [pcl,((.L7fffffff-.+2)/4)]
+ breq.d r12,r9,.Linf_nan_dbl1
+.Lpast_denorm:
+ asl.f 0,mhi,8
+ mov r6,mhi
+ mov r7,mlo
+ add.pl r6,r6,r6
+ bclr.pl r6,r6,23
+ add.pl.f r7,r7,r7
+ add.cs r6,r6,1
+ lsr.f 0,r6,1
+ add_s r12,r12,r11
+ adc.f 0,r7,r4
+ add_s r12,r12, \
+ -0x3f800000
+ adc.f r8,r6,r12
+ tst.pl r8,r9
+ bic r0,r0,r4
+ min r3,r8,r9
+ jpnz.d [blink]
+ add.pnz r0,r0,r3
+; infinity or denormal number
+ add.ne.f r3,r3,r3
+ asr_s r3,r3,23+1
+ bset r6,r6,23
+ bpnz.d .Linfinity
+ sub_s r3,r3,1
+ neg_s r2,r3
+ brhi.d r2,24,.Lret_r0 ; right shift shift > 24 -> return +-0
+ lsr r2,r6,r2
+ asl r9,r6,r3
+ lsr.f 0,r2,1
+ tst r7,r7
+ add_s r0,r0,r2
+ bset.ne r9,r9,0
+ adc.f 0,r9,r4
+ j_s.d [blink]
+ add.cs r0,r0,1
+.Linfinity:
+ j_s.d [blink]
+ add_s r0,r0,r9
+
+.Lret_r0: j_s [blink]
+
+ .balign 4
+.Ldenorm_dbl0:
+ bclr_s r2,r2,31
+ norm.f r4,r2
+ add_s r2,r2,r2
+ asl r2,r2,r4
+ mulu64 r2,r3
+ breq.d r12,r9,.Ldenorm_dbl0_inf_nan_dbl1
+ asl r4,r4,23
+ sub.ne.f r12,r12,r4
+ ld.as r4,[pcl,29]; [pcl,((.L7fffffff-.+2)/4)]
+ bhi.d .Lpast_denorm
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r1
+
+ .balign 4
+.Ldenorm_dbl0_inf_nan_dbl1:
+ bmsk.f 0,r0,30
+ beq_s .Lretnan
+ xor_s r0,r0,r1
+.Linf_nan_dbl1:
+ xor_s r1,r1,r0
+.Linf_nan_dbl0:
+ bclr_s r1,r1,31
+ cmp_s r1,r9
+ jls.d [blink]
+ xor_s r0,r0,r1
+; r1 NaN -> result NaN
+.Lretnan:
+ j_s.d [blink]
+ mov r0,-1
+
+ .balign 4
+.Ldenorm_dbl1:
+ breq.d r11,r9,.Linf_nan_dbl0_2
+ norm.f r3,r4
+ sub_s r3,r3,7
+ asl r4,r4,r3
+ mulu64 r2,r4
+ sub_s r3,r3,1
+ asl_s r3,r3,23
+ sub.ne.f r11,r11,r3
+ ld.as r4,[pcl,11]; [pcl,((.L7fffffff-.+2)/4)]
+ bhi.d .Lpast_denorm
+ bmsk r8,r0,30
+ j_s.d [blink]
+ bic r0,r0,r8
+
+ .balign 4
+.Linf_nan_dbl0_2:
+ bclr_s r1,r1,31
+ xor_s r0,r0,r1
+ sub.eq r1,r1,1 ; inf/nan * 0 -> nan
+ bic.f 0,r9,r1
+ j_s.d [blink]
+ or.eq r0,r0,r1 ; r1 nan -> result nan
+
+ .balign 4
+.L7f800000:
+ .long 0x7f800000
+.L7fffffff:
+ .long 0x7fffffff
+ ENDFUNC(__mulsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600/divsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600/divsf3.S
new file mode 100644
index 000000000..d8ea88183
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600/divsf3.S
@@ -0,0 +1,227 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __divsf3
+ FUNC(__divsf3)
+ .balign 4
+__divsf3:
+ push_s blink
+ push_s r1
+ bl.d __divsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __divsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ and r12,r0,r1
+ bic.f 0,0x7f800000,r12 ; both NaN -> OK
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__divsf3)
+#define __divsf3 __divsf3_asm
+#endif /* DEBUG */
+
+ .balign 4
+__divdf3_support: /* This label makes debugger output saner. */
+ FUNC(__divsf3)
+.Ldenorm_fp0:
+ norm.f r12,r2 ; flag for 0/x -> 0 check
+ bic.ne.f 0,0x60000000,r1 ; denorm/large number -> 0
+ beq_s .Lret0_NaN
+ tst r1,r9
+ add_s r2,r2,r2
+ sub_s r12,r12,8
+ asl_s r2,r2,r12
+ asl_l r12,r12,23
+ bne.d .Lpast_denorm_fp0
+ add r5,r5,r12
+/* r0 is subnormal, r1 is subnormal or 0. */
+
+ .balign 4
+.Ldenorm_fp1:
+ norm.f r12,r3 ; flag for x/0 -> Inf check
+ bic.ne.f 0,0x60000000,r0 ; large number/denorm -> Inf
+ beq_s .Linf
+ add_s r3,r3,r3
+ sub_s r12,r12,8
+ asl_s r3,r3,r12
+ asl_s r12,r12,23
+ b.d .Lpast_denorm_fp1
+ add r4,r4,r12
+
+.Lret0_NaN:
+ bclr.f 0,r1,31 ; 0/0 -> NaN
+ bic r0,r10,r9
+ j_s.d [blink]
+ sub.eq r0,r0,1
+
+ .balign 4
+.Linf_nan_fp0:
+ bic.f 0,r9,r1 ; fp1 Inf -> result NaN
+ bic r1,r5,r9 ; fp1 sign
+ sub.eq r1,r1,1
+ j_s.d [blink]
+ xor_s r0,r0,r1
+.Linf_nan_fp1:
+ bic r0,r4,r9 ; fp0 sign
+ bmsk.f 0,r1,22 ; x/inf -> 0, x/nan -> nan
+ xor.eq r1,r1,r9
+ j_s.d [blink]
+ xor_s r0,r0,r1
+
+ .global __divsf3
+ .balign 4
+ .long 0x7f800000 ; exponent mask
+__divsf3:
+ ld r9,[pcl,-4]
+ bmsk r2,r0,22
+ xor r4,r0,r2
+ bmsk r3,r1,22
+ xor r5,r1,r3
+ and r11,r0,r9
+ breq.d r11,0,.Ldenorm_fp0
+ xor r10,r4,r5
+ breq r11,r9,.Linf_nan_fp0
+ bset_s r2,r2,23
+ and r11,r1,r9
+ breq r11,0,.Ldenorm_fp1
+ breq r11,r9,.Linf_nan_fp1
+.Lpast_denorm_fp0:
+ bset_s r3,r3,23
+.Lpast_denorm_fp1:
+ cmp r2,r3
+ asl_s r2,r2,6+1
+ asl_s r3,r3,7
+ add.lo r2,r2,r2
+ bclr r8,r9,30 ; exponent bias
+ bclr.lo r8,r8,23 ; reduce exp by one if fraction is shifted
+ sub r4,r4,r5
+ add r4,r4,r8
+ xor.f 0,r10,r4
+ bmi .Linf_denorm
+ and.f r12,r4,r9
+ beq .Ldenorm
+ sub_s r2,r2,r3 ; discard implicit 1
+ rsub r3,r3,1 ; prime r3 for two-insn divide-step use
+.Ldiv_23bit:
+ .rep 6
+ add1.f r2,r3,r2
+ sub.cc r2,r2,r3
+ .endr
+ breq r12,r9,.Linf
+ bmsk r0,r2,6
+ xor_s r2,r2,r0
+.Ldiv_17bit:
+ .rep 7
+ add1.f r2,r3,r2
+ sub.cc r2,r2,r3
+ .endr
+ asl_s r0,r0,7
+ bmsk r1,r2,6
+ xor_s r2,r2,r1
+ or_s r0,r0,r1
+.Ldiv_10bit:
+ .rep 7
+ add1.f r2,r3,r2
+ sub.cc r2,r2,r3
+ .endr
+ asl_s r0,r0,7
+ bmsk r1,r2,6
+ xor_s r2,r2,r1
+ or_s r0,r0,r1
+.Ldiv_3bit:
+ .rep 3
+ add1.f r2,r3,r2
+ sub.cc r2,r2,r3
+ .endr
+ asl_s r0,r0,3
+.Ldiv_0bit:
+ add1.f r1,r3,r2
+ sub.cc r1,r1,r3
+ bmsk_s r2,r2,2
+ tst r1,-0x7e ; 0xffffff82, test for rest or odd
+ bmsk_s r1,r1,0
+ add_s r0,r0,r2 ; assemble fraction
+ add_s r0,r0,r4 ; add in sign & exponent
+ j_s.d [blink]
+ add.ne r0,r0,r1 ; round to nearest / even
+
+ .balign 4
+.Linf:
+ j_s.d [blink]
+ or r0,r10,r9
+
+.Lret_r4:
+ j_s.d [blink]
+ mov_s r0,r4
+ .balign 4
+.Linf_denorm:
+ add.f r12,r4,r4
+ asr_l r12,r12,24
+ bpl .Linf
+ max r12,r12,-24
+.Ldenorm:
+ rsub r3,r3,1
+ add r1,pcl,68; .Ldenorm_tab-.
+ ldw.as r12,[r1,r12]
+ mov_s r0,0
+ lsr_s r2,r2
+ sub_s r1,r1,r12
+ j_s.d [r1]
+ bic r4,r10,r9
+ .short .Ldenorm_tab-.Lret_r4
+ .short .Ldenorm_tab-.Ldiv_0bit
+ .short .Ldenorm_tab-.Ldiv_3bit-2*8
+ .short .Ldenorm_tab-.Ldiv_3bit-1*8
+ .short .Ldenorm_tab-.Ldiv_3bit
+ .short .Ldenorm_tab-.Ldiv_10bit-6*8
+ .short .Ldenorm_tab-.Ldiv_10bit-5*8
+ .short .Ldenorm_tab-.Ldiv_10bit-3*8
+ .short .Ldenorm_tab-.Ldiv_10bit-3*8
+ .short .Ldenorm_tab-.Ldiv_10bit-2*8
+ .short .Ldenorm_tab-.Ldiv_10bit-1*8
+ .short .Ldenorm_tab-.Ldiv_10bit
+ .short .Ldenorm_tab-.Ldiv_17bit-6*8
+ .short .Ldenorm_tab-.Ldiv_17bit-5*8
+ .short .Ldenorm_tab-.Ldiv_17bit-4*8
+ .short .Ldenorm_tab-.Ldiv_17bit-3*8
+ .short .Ldenorm_tab-.Ldiv_17bit-2*8
+ .short .Ldenorm_tab-.Ldiv_17bit-1*8
+ .short .Ldenorm_tab-.Ldiv_17bit
+ .short .Ldenorm_tab-.Ldiv_23bit-5*8
+ .short .Ldenorm_tab-.Ldiv_23bit-4*8
+ .short .Ldenorm_tab-.Ldiv_23bit-3*8
+ .short .Ldenorm_tab-.Ldiv_23bit-2*8
+ .short .Ldenorm_tab-.Ldiv_23bit-1*8
+.Ldenorm_tab:
+ .short .Ldenorm_tab-.Ldiv_23bit
+ ENDFUNC(__divsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/arc600/mulsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/arc600/mulsf3.S
new file mode 100644
index 000000000..4a0736db0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/arc600/mulsf3.S
@@ -0,0 +1,179 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __mulsf3
+ FUNC(__mulsf3)
+ .balign 4
+__mulsf3:
+ push_s blink
+ push_s r1
+ bl.d __mulsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __mulsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ and r12,r0,r1
+ bic.f 0,0x7f800000,r12
+ bne 0f
+ bmsk.f 0,r0,22
+ bmsk.ne.f r1,r1,22
+ jne_s [blink] ; both NaN -> OK
+0: bl abort
+ ENDFUNC(__mulsf3)
+#define __mulsf3 __mulsf3_asm
+#endif /* DEBUG */
+
+ .balign 4
+ .global __mulsf3
+ FUNC(__mulsf3)
+__mulsf3:
+ ld.as r9,[pcl,76]; [pcl,((.L7f800000-.+2)/4)]
+ bmsk r4,r1,22
+ bset r3,r4,23
+ bmsk r2,r0,22
+ and r11,r0,r9
+ breq.d r11,0,.Ldenorm_dbl0
+ and r12,r1,r9
+ xor_s r0,r0,r1
+ breq.d r11,r9,.Linf_nan_dbl0
+ bset_s r2,r2,23
+ breq r12,0,.Ldenorm_dbl1
+ breq r12,r9,.Linf_nan_dbl1
+.Lpast_denorm:
+ mov r6,0
+ lsr.f r7,r2
+; We could so this a bit faster here with a 32 bit shift register and
+; inserting the r2 factor / retrieving the low result a byte at a time,
+; but that'd increase code size.
+ mov lp_count,24
+ .balign 4
+ lp 0f
+ add.cs r6,r6,r3
+ lsr.f r6,r6
+ rrc.f r7,r7
+0:
+ ld.as r4,[pcl,59]; [pcl,((.L7fffffff-.+2)/4)]
+ asl.f 0,r6,8
+ add.pl r6,r6,r6
+ bclr.pl r6,r6,23
+ add.pl.f r7,r7,r7
+ add.cs r6,r6,1
+ lsr.f 0,r6,1
+ add_s r12,r12,r11
+ adc.f 0,r7,r4
+ add_s r12,r12, \
+ -0x3f800000
+ adc.f r8,r6,r12
+ tst.pl r8,r9
+ bic r0,r0,r4
+ min r3,r8,r9
+ jpnz.d [blink]
+ add.pnz r0,r0,r3
+; infinity or denormal number
+ add.ne.f r3,r3,r3
+ asr_s r3,r3,23+1
+ bset r6,r6,23
+ bpnz.d .Linfinity
+ sub_s r3,r3,1
+ neg_s r2,r3
+ brhi.d r2,24,.Lret_r0 ; right shift shift > 24 -> return +-0
+ lsr r2,r6,r2
+ asl r9,r6,r3
+ lsr.f 0,r2,1
+ tst r7,r7
+ add_s r0,r0,r2
+ bset.ne r9,r9,0
+ adc.f 0,r9,r4
+ j_s.d [blink]
+ add.cs r0,r0,1
+.Linfinity:
+ j_s.d [blink]
+ add_s r0,r0,r9
+
+.Lret_r0: j_s [blink]
+
+ .balign 4
+.Ldenorm_dbl0:
+ asl_s r2,r2,8
+ norm.f r4,r2
+ lsr_s r2,r2,7
+ asl r2,r2,r4
+ breq.d r12,r9,.Ldenorm_dbl0_inf_nan_dbl1
+ asl r4,r4,23
+ sub.ne.f r12,r12,r4
+ bhi.d .Lpast_denorm
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r1
+
+ .balign 4
+.Ldenorm_dbl0_inf_nan_dbl1:
+ bmsk.f 0,r0,30
+ beq_s .Lretnan
+ xor_s r0,r0,r1
+.Linf_nan_dbl1:
+ xor_s r1,r1,r0
+ bclr_s r1,r1,31
+ j_s.d [blink]
+ xor_s r0,r0,r1
+.Linf_nan_dbl0:
+ sub_s r2,r1,1 ; inf/nan * 0 -> nan; inf * nan -> nan (use |r2| >= inf)
+ bic.f 0,r9,r2
+ xor_s r0,r0,r1
+ bclr_s r1,r1,31
+ xor_s r0,r0,r1
+ jne_s [blink]
+.Lretnan:
+ j_s.d [blink]
+ mov r0,-1
+ .balign 4
+.Ldenorm_dbl1:
+ norm.f r3,r4
+ sub_s r3,r3,7
+ asl r4,r4,r3
+ sub_s r3,r3,1
+ asl_s r3,r3,23
+ sub.ne.f r11,r11,r3
+ bhi.d .Lpast_denorm
+ mov_s r3,r4
+ bmsk r3,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r3
+
+ .balign 4
+.L7f800000:
+ .long 0x7f800000
+.L7fffffff:
+ .long 0x7fffffff
+ ENDFUNC(__mulsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/divdf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/divdf3.S
new file mode 100644
index 000000000..dd74ba67c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/divdf3.S
@@ -0,0 +1,416 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ to calculate a := b/x as b*y, with y := 1/x:
+ - x is in the range [1..2)
+ - calculate 15..18 bit inverse y0 using a table of approximating polynoms.
+ Precision is higher for polynoms used to evaluate input with larger
+ value.
+ - Do one newton-raphson iteration step to double the precision,
+ then multiply this with the divisor
+ -> more time to decide if dividend is subnormal
+ - the worst error propagation is on the side of the value range
+ with the least initial defect, thus giving us about 30 bits precision.
+ The truncation error for the either is less than 1 + x/2 ulp.
+ A 31 bit inverse can be simply calculated by using x with implicit 1
+ and chaining the multiplies. For a 32 bit inverse, we multiply y0^2
+ with the bare fraction part of x, then add in y0^2 for the implicit
+ 1 of x.
+ - If calculating a 31 bit inverse, the systematic error is less than
+ -1 ulp; likewise, for 32 bit, it is less than -2 ulp.
+ - If we calculate our seed with a 32 bit fraction, we can archive a
+ tentative result strictly better than -2 / +2.5 (1) ulp/128, i.e. we
+ only need to take the step to calculate the 2nd stage rest and
+ rounding adjust 1/32th of the time. However, if we use a 20 bit
+ fraction for the seed, the negative error can exceed -2 ulp/128, (2)
+ thus for a simple add / tst check, we need to do the 2nd stage
+ rest calculation/ rounding adjust 1/16th of the time.
+ (1): The inexactness of the 32 bit inverse contributes an error in the
+ range of (-1 .. +(1+x/2) ) ulp/128. Leaving out the low word of the
+ rest contributes an error < +1/x ulp/128 . In the interval [1,2),
+ x/2 + 1/x <= 1.5 .
+ (2): Unless proven otherwise. I have not actually looked for an
+ example where -2 ulp/128 is exceeded, and my calculations indicate
+ that the excess, if existent, is less than -1/512 ulp.
+ */
+#include "arc-ieee-754.h"
+
+/* N.B. fp-bit.c does double rounding on denormal numbers. */
+#if 0 /* DEBUG */
+ .global __divdf3
+ FUNC(__divdf3)
+ .balign 4
+__divdf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __divdf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __divdf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ and r12,DBL0H,DBL1H
+ bic.f 0,0x7ff80000,r12 ; both NaN -> OK
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__divdf3)
+#define __divdf3 __divdf3_asm
+#endif /* DEBUG */
+
+ FUNC(__divdf3)
+__divdf3_support: /* This label makes debugger output saner. */
+ .balign 4
+.Ldenorm_dbl1:
+ brge r6, \
+ 0x43500000,.Linf_NaN ; large number / denorm -> Inf
+ bmsk.f r12,DBL1H,19
+ mov.eq r12,DBL1L
+ mov.eq DBL1L,0
+ sub.eq r7,r7,32
+ norm.f r11,r12 ; flag for x/0 -> Inf check
+ beq_s .Linf_NaN
+ mov.mi r11,0
+ add.pl r11,r11,1
+ add_s r12,r12,r12
+ asl r8,r12,r11
+ rsub r12,r11,31
+ lsr r12,DBL1L,r12
+ tst_s DBL1H,DBL1H
+ or r8,r8,r12
+ lsr r4,r8,26
+ lsr DBL1H,r8,12
+ ld.as r4,[r10,r4]
+ bxor.mi DBL1H,DBL1H,31
+ sub r11,r11,11
+ asl DBL1L,DBL1L,r11
+ sub r11,r11,1
+ mpyhu r5,r4,r8
+ sub r7,r7,r11
+ asl r4,r4,12
+ b.d .Lpast_denorm_dbl1
+ asl r7,r7,20
+ ; wb stall
+
+ .balign 4
+.Ldenorm_dbl0:
+ bmsk.f r12,DBL0H,19
+ ; wb stall
+ mov.eq r12,DBL0L
+ sub.eq r6,r6,32
+ norm.f r11,r12 ; flag for 0/x -> 0 check
+ brge r7, \
+ 0x43500000, .Lret0_NaN ; denorm/large number -> 0
+ beq_s .Lret0_NaN
+ mov.mi r11,0
+ add.pl r11,r11,1
+ asl r12,r12,r11
+ sub r6,r6,r11
+ add.f 0,r6,31
+ lsr r10,DBL0L,r6
+ mov.mi r10,0
+ add r6,r6,11+32
+ neg.f r11,r6
+ asl DBL0L,DBL0L,r11
+ mov.pl DBL0L,0
+ sub r6,r6,32-1
+ b.d .Lpast_denorm_dbl0
+ asl r6,r6,20
+
+.Linf_NaN:
+ tst_s DBL0L,DBL0L ; 0/0 -> NaN
+ xor_s DBL1H,DBL1H,DBL0H
+ bclr.eq.f DBL0H,DBL0H,31
+ bmsk DBL0H,DBL1H,30
+ xor_s DBL0H,DBL0H,DBL1H
+ sub.eq DBL0H,DBL0H,1
+ mov_s DBL0L,0
+ j_s.d [blink]
+ or DBL0H,DBL0H,r9
+ .balign 4
+.Lret0_NaN:
+ xor_s DBL1H,DBL1H,DBL0H
+ cmp_s r12,r9
+ mov_s DBL0L,0
+ bmsk DBL0H,DBL1H,30
+ xor_s DBL0H,DBL0H,DBL1H
+ j_s.d [blink]
+ sub.hi DBL0H,DBL0H,1
+.Linf_nan_dbl1: ; Inf/Inf -> NaN x/Inf-> 0 x/NaN -> NaN
+ not_s DBL0L,DBL1H
+ cmp r6,r9
+ sub_s.ne DBL0L,DBL0L,DBL0L
+ tst_s DBL0H,DBL0H
+ add_s DBL0H,DBL1H,DBL0L
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+.Linf_nan_dbl0:
+ tst_s DBL1H,DBL1H
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+ .balign 4
+ .global __divdf3
+/* N.B. the spacing between divtab and the add3 to get its address must
+ be a multiple of 8. */
+__divdf3:
+ asl r8,DBL1H,12
+ lsr r12,DBL1L,20
+ lsr r4,r8,26
+ add3 r10,pcl,59 ; (.Ldivtab-.) >> 3
+ ld.as r4,[r10,r4]
+ ld.as r9,[pcl,180]; [pcl,(-((.-.L7ff00000) >> 2))] ; 0x7ff00000
+ or r8,r8,r12
+ mpyhu r5,r4,r8
+ and.f r7,DBL1H,r9
+ asl r4,r4,12 ; having the asl here is a concession to the XMAC pipeline.
+ beq.d .Ldenorm_dbl1
+ and r6,DBL0H,r9
+.Lpast_denorm_dbl1: ; wb stall
+ sub r4,r4,r5
+ mpyhu r5,r4,r4
+ breq.d r6,0,.Ldenorm_dbl0
+ lsr r8,r8,1
+ asl r12,DBL0H,11
+ lsr r10,DBL0L,21
+.Lpast_denorm_dbl0: ; wb stall
+ bset r8,r8,31
+ mpyhu r11,r5,r8
+ add_s r12,r12,r10
+ bset r5,r12,31
+ cmp r5,r8
+ cmp.eq DBL0L,DBL1L
+ ; wb stall
+ lsr.cc r5,r5,1
+ sub r4,r4,r11 ; u1.31 inverse, about 30 bit
+ mpyhu r11,r5,r4 ; result fraction highpart
+ breq r7,r9,.Linf_nan_dbl1
+ lsr r8,r8,2 ; u3.29
+ add r5,r6, /* wait for immediate / XMAC wb stall */ \
+ 0x3fe00000
+ ; wb stall (not for XMAC)
+ breq r6,r9,.Linf_nan_dbl0
+ mpyu r12,r11,r8 ; u-28.31
+ asl_s DBL1L,DBL1L,9 ; u-29.23:9
+ sbc r6,r5,r7
+ ; resource conflict (not for XMAC)
+ mpyhu r5,r11,DBL1L ; u-28.23:9
+ add.cs DBL0L,DBL0L,DBL0L
+ asl_s DBL0L,DBL0L,6 ; u-26.25:7
+ asl r10,r11,23
+ sub_l DBL0L,DBL0L,r12
+ ; wb stall (before 'and' for XMAC)
+ lsr r7,r11,9
+ sub r5,DBL0L,r5 ; rest msw ; u-26.31:0
+ mpyh r12,r5,r4 ; result fraction lowpart
+ xor.f 0,DBL0H,DBL1H
+ and DBL0H,r6,r9
+ add_s DBL0H,DBL0H,r7 ; (XMAC wb stall)
+ bxor.mi DBL0H,DBL0H,31
+ brhs r6, /* wb stall / wait for immediate */ \
+ 0x7fe00000,.Linf_denorm
+ add.f r12,r12,0x11
+ asr r9,r12,5
+ sub.mi DBL0H,DBL0H,1
+ add.f DBL0L,r9,r10
+ tst r12,0x1c
+ jne.d [blink]
+ add.cs DBL0H,DBL0H,1
+ /* work out exact rounding if we fall through here. */
+ /* We know that the exact result cannot be represented in double
+ precision. Find the mid-point between the two nearest
+ representable values, multiply with the divisor, and check if
+ the result is larger than the dividend. Since we want to know
+ only the sign bit, it is sufficient to calculate only the
+ highpart of the lower 64 bits. */
+ sub.f DBL0L,DBL0L,1
+ asl r12,r9,2 ; u-22.30:2
+ mpyu r10,r11,DBL1L ; rest before considering r12 in r5 : -r10
+ sub.cs DBL0H,DBL0H,1
+ sub.f r12,r12,2
+ ; resource conflict (not for XMAC)
+ mpyhu r7,r12,DBL1L ; u-51.32
+ asl r5,r5,25 ; s-51.7:25
+ lsr r10,r10,7 ; u-51.30:2
+ ; resource conflict (not for XMAC)
+ ; resource conflict (not for XMAC)
+ mpyu r9,r12,r8 ; u-51.31:1
+ sub r5,r5,r10
+ add.mi r5,r5,DBL1L ; signed multiply adjust for r12*DBL1L
+ bset r7,r7,0 ; make sure that the result is not zero, and that
+ ; wb stall (one earlier for XMAC)
+ sub r5,r5,r7 ; a highpart zero appears negative
+ sub.f r5,r5,r9 ; rest msw
+ add.pl.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.eq DBL0H,DBL0H,1
+
+ .balign 4
+.Linf_denorm:
+ brlo r6,0xc0000000,.Linf
+.Ldenorm:
+ asr r6,r6,20
+ neg r9,r6
+ mov_s DBL0H,0
+ brhs.d r9,54,.Lret0
+ bxor.mi DBL0H,DBL0H,31
+ add_l r12,r12,1
+ and r12,r12,-4
+ rsub r7,r6,5
+ asr r10,r12,28
+ bmsk r4,r12,27
+ asrs DBL0L,r4,r7
+ add DBL1H,r11,r10
+ add.f r7,r6,32-5
+ abss r10,r4
+ asl r4,r4,r7
+ mov.mi r4,r10
+ add.f r10,r6,23
+ rsub r7,r6,9
+ lsr r7,DBL1H,r7
+ asl r10,DBL1H,r10
+ or.pnz DBL0H,DBL0H,r7
+ or.mi r4,r4,r10
+ mov.mi r10,r7
+ add.f DBL0L,r10,DBL0L
+ add.cs.f DBL0H,DBL0H,1 ; carry clear after this point
+ bxor.f 0,r4,31
+ add.pnz.f DBL0L,DBL0L,1
+ add.cs.f DBL0H,DBL0H,1
+ jne_l [blink]
+ /* Calculation so far was not conclusive; calculate further rest. */
+ mpyu r11,r11,DBL1L ; rest before considering r12 in r5 : -r11
+ asr.f r12,r12,3
+ asl r5,r5,25 ; s-51.7:25
+ ; resource conflict (not for XMAC)
+ mpyu DBL1H,r12,r8 ; u-51.31:1
+ and r9,DBL0L,1 ; tie-breaker: round to even
+ lsr r11,r11,7 ; u-51.30:2
+ ; resource conflict (not for XMAC)
+ mpyhu r8,r12,DBL1L ; u-51.32
+ sub.mi r11,r11,DBL1L ; signed multiply adjust for r12*DBL1L
+ add_s DBL1H,DBL1H,r11
+ ; resource conflict (not for XMAC)
+ ; resource conflict (not for XMAC)
+ mpyu r12,r12,DBL1L ; u-83.30:2
+ sub DBL1H,DBL1H,r5 ; -rest msw
+ add_s DBL1H,DBL1H,r8 ; -rest msw
+ add.f 0,DBL1H,DBL1H ; can't ror.f by 32 :-(
+ ; wb stall (XMAC: Before add.f)
+ tst_s DBL1H,DBL1H
+ cmp.eq r12,r9
+ add.cs.f DBL0L,DBL0L,1
+ j_s.d [blink]
+ add.cs DBL0H,DBL0H,1
+
+.Lret0:
+ /* return +- 0 */
+ j_s.d [blink]
+ mov_s DBL0L,0
+.Linf:
+ mov_s DBL0H,r9
+ mov_s DBL0L,0
+ j_s.d [blink]
+ bxor.mi DBL0H,DBL0H,31
+
+ .balign 4
+.Ldivtab:
+ .long 0xfc0fffe1
+ .long 0xf46ffdfb
+ .long 0xed1ffa54
+ .long 0xe61ff515
+ .long 0xdf7fee75
+ .long 0xd91fe680
+ .long 0xd2ffdd52
+ .long 0xcd1fd30c
+ .long 0xc77fc7cd
+ .long 0xc21fbbb6
+ .long 0xbcefaec0
+ .long 0xb7efa100
+ .long 0xb32f92bf
+ .long 0xae8f83b7
+ .long 0xaa2f7467
+ .long 0xa5ef6479
+ .long 0xa1cf53fa
+ .long 0x9ddf433e
+ .long 0x9a0f3216
+ .long 0x965f2091
+ .long 0x92df0f11
+ .long 0x8f6efd05
+ .long 0x8c1eeacc
+ .long 0x88eed876
+ .long 0x85dec615
+ .long 0x82eeb3b9
+ .long 0x800ea10b
+ .long 0x7d3e8e0f
+ .long 0x7a8e7b3f
+ .long 0x77ee6836
+ .long 0x756e5576
+ .long 0x72fe4293
+ .long 0x709e2f93
+ .long 0x6e4e1c7f
+ .long 0x6c0e095e
+ .long 0x69edf6c5
+ .long 0x67cde3a5
+ .long 0x65cdd125
+ .long 0x63cdbe25
+ .long 0x61ddab3f
+ .long 0x600d991f
+ .long 0x5e3d868c
+ .long 0x5c6d7384
+ .long 0x5abd615f
+ .long 0x590d4ecd
+ .long 0x576d3c83
+ .long 0x55dd2a89
+ .long 0x545d18e9
+ .long 0x52dd06e9
+ .long 0x516cf54e
+ .long 0x4ffce356
+ .long 0x4e9cd1ce
+ .long 0x4d3cbfec
+ .long 0x4becae86
+ .long 0x4aac9da4
+ .long 0x496c8c73
+ .long 0x483c7bd3
+ .long 0x470c6ae8
+ .long 0x45dc59af
+ .long 0x44bc4915
+ .long 0x43ac3924
+ .long 0x428c27fb
+ .long 0x418c187a
+ .long 0x407c07bd
+.L7ff00000:
+ .long 0x7ff00000
+ ENDFUNC(__divdf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/divsf3-stdmul.S b/gcc-4.9/libgcc/config/arc/ieee-754/divsf3-stdmul.S
new file mode 100644
index 000000000..620209d1f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/divsf3-stdmul.S
@@ -0,0 +1,281 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ - calculate 15..18 bit inverse using a table of approximating polynoms.
+ precision is higher for polynoms used to evaluate input with larger
+ value.
+ - do one newton-raphson iteration step to double the precision,
+ then multiply this with the divisor
+ -> more time to decide if dividend is subnormal
+ - the worst error propagation is on the side of the value range
+ with the least initial defect, thus giving us about 30 bits precision.
+ */
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __divsf3
+ FUNC(__divsf3)
+ .balign 4
+__divsf3:
+ push_s blink
+ push_s r1
+ bl.d __divsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __divsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+#if 1
+ bne abort
+ jeq_s [blink]
+ b abort
+#else
+ bne abort
+ j_s [blink]
+#endif
+ ENDFUNC(__divsf3)
+#define __divsf3 __divsf3_asm
+#endif /* DEBUG */
+
+ FUNC(__divsf3)
+ .balign 4
+.L7f800000:
+ .long 0x7f800000
+.Ldivtab:
+ .long 0xfc0ffff0
+ .long 0xf46ffefd
+ .long 0xed1ffd2a
+ .long 0xe627fa8e
+ .long 0xdf7ff73b
+ .long 0xd917f33b
+ .long 0xd2f7eea3
+ .long 0xcd1fe986
+ .long 0xc77fe3e7
+ .long 0xc21fdddb
+ .long 0xbcefd760
+ .long 0xb7f7d08c
+ .long 0xb32fc960
+ .long 0xae97c1ea
+ .long 0xaa27ba26
+ .long 0xa5e7b22e
+ .long 0xa1cfa9fe
+ .long 0x9ddfa1a0
+ .long 0x9a0f990c
+ .long 0x9667905d
+ .long 0x92df878a
+ .long 0x8f6f7e84
+ .long 0x8c27757e
+ .long 0x88f76c54
+ .long 0x85df630c
+ .long 0x82e759c5
+ .long 0x8007506d
+ .long 0x7d3f470a
+ .long 0x7a8f3da2
+ .long 0x77ef341e
+ .long 0x756f2abe
+ .long 0x72f7212d
+ .long 0x709717ad
+ .long 0x6e4f0e44
+ .long 0x6c1704d6
+ .long 0x69e6fb44
+ .long 0x67cef1d7
+ .long 0x65c6e872
+ .long 0x63cedf18
+ .long 0x61e6d5cd
+ .long 0x6006cc6d
+ .long 0x5e36c323
+ .long 0x5c76b9f3
+ .long 0x5abeb0b7
+ .long 0x5916a79b
+ .long 0x57769e77
+ .long 0x55de954d
+ .long 0x54568c4e
+ .long 0x52d6834d
+ .long 0x51667a7f
+ .long 0x4ffe71b5
+ .long 0x4e9e68f1
+ .long 0x4d466035
+ .long 0x4bf65784
+ .long 0x4aae4ede
+ .long 0x496e4646
+ .long 0x48363dbd
+ .long 0x47063547
+ .long 0x45de2ce5
+ .long 0x44be2498
+ .long 0x43a61c64
+ .long 0x4296144a
+ .long 0x41860c0e
+ .long 0x407e03ee
+__divsf3_support: /* This label makes debugger output saner. */
+.Ldenorm_fp1:
+ bclr r6,r6,31
+ norm.f r12,r6 ; flag for x/0 -> Inf check
+ add r6,r6,r6
+ rsub r5,r12,16
+ ror r5,r1,r5
+ asl r6,r6,r12
+ bmsk r5,r5,5
+ ld.as r5,[r3,r5]
+ add r4,r6,r6
+ ; load latency
+ mpyhu r7,r5,r4
+ bic.ne.f 0, \
+ 0x60000000,r0 ; large number / denorm -> Inf
+ beq_s .Linf_NaN
+ asl r5,r5,13
+ ; wb stall
+ ; slow track
+ sub r7,r5,r7
+ mpyhu r8,r7,r6
+ asl_s r12,r12,23
+ and.f r2,r0,r9
+ add r2,r2,r12
+ asl r12,r0,8
+ ; wb stall
+ bne.d .Lpast_denorm_fp1
+.Ldenorm_fp0:
+ mpyhu r8,r8,r7
+ bclr r12,r12,31
+ norm.f r3,r12 ; flag for 0/x -> 0 check
+ bic.ne.f 0,0x60000000,r1 ; denorm/large number -> 0
+ beq_s .Lret0
+ asl_s r12,r12,r3
+ asl_s r3,r3,23
+ add_s r12,r12,r12
+ add r11,r11,r3
+ b.d .Lpast_denorm_fp0
+ mov_s r3,r12
+ .balign 4
+.Linf_NaN:
+ bclr.f 0,r0,31 ; 0/0 -> NaN
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ bic_s r0,r0,r1
+ sub.eq r0,r0,1
+ j_s.d [blink]
+ or r0,r0,r9
+.Lret0:
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_s r0,r0,r1
+.Linf_nan_fp1:
+ lsr_s r0,r0,31
+ bmsk.f 0,r1,22
+ asl_s r0,r0,31
+ bne_s 0f ; inf/inf -> nan
+ brne r2,r9,.Lsigned0 ; x/inf -> 0, but x/nan -> nan
+0: j_s.d [blink]
+ mov r0,-1
+.Lsigned0:
+.Linf_nan_fp0:
+ tst_s r1,r1
+ j_s.d [blink]
+ bxor.mi r0,r0,31
+ .balign 4
+ .global __divsf3
+/* N.B. the spacing between divtab and the sub3 to get its address must
+ be a multiple of 8. */
+__divsf3:
+ lsr r2,r1,17
+ sub3 r3,pcl,55;(.-.Ldivtab) >> 3
+ bmsk_s r2,r2,5
+ ld.as r5,[r3,r2]
+ asl r4,r1,9
+ ld.as r9,[pcl,-114]; [pcl,(-((.-.L7f800000) >> 2))] ; 0x7f800000
+ mpyhu r7,r5,r4
+ asl r6,r1,8
+ and.f r11,r1,r9
+ bset r6,r6,31
+ asl r5,r5,13
+ ; wb stall
+ beq .Ldenorm_fp1
+ sub r7,r5,r7
+ mpyhu r8,r7,r6
+ breq.d r11,r9,.Linf_nan_fp1
+ and.f r2,r0,r9
+ beq.d .Ldenorm_fp0
+ asl r12,r0,8
+ ; wb stall
+ breq r2,r9,.Linf_nan_fp0
+ mpyhu r8,r8,r7
+.Lpast_denorm_fp1:
+ bset r3,r12,31
+.Lpast_denorm_fp0:
+ cmp_s r3,r6
+ lsr.cc r3,r3,1
+ add_s r2,r2, /* wait for immediate */ \
+ /* wb stall */ \
+ 0x3f000000
+ sub r7,r7,r8 ; u1.31 inverse, about 30 bit
+ mpyhu r3,r3,r7
+ sbc r2,r2,r11
+ xor.f 0,r0,r1
+ and r0,r2,r9
+ bxor.mi r0,r0,31
+ brhs r2, /* wb stall / wait for immediate */ \
+ 0x7f000000,.Linf_denorm
+.Lpast_denorm:
+ add_s r3,r3,0x22 ; round to nearest or higher
+ tst r3,0x3c ; check if rounding was unsafe
+ lsr r3,r3,6
+ jne.d [blink] ; return if rounding was safe.
+ add_s r0,r0,r3
+ /* work out exact rounding if we fall through here. */
+ /* We know that the exact result cannot be represented in single
+ precision. Find the mid-point between the two nearest
+ representable values, multiply with the divisor, and check if
+ the result is larger than the dividend. */
+ add_s r3,r3,r3
+ sub_s r3,r3,1
+ mpyu r3,r3,r6
+ asr.f 0,r0,1 ; for round-to-even in case this is a denorm
+ rsub r2,r9,25
+ asl_s r12,r12,r2
+ ; wb stall
+ ; slow track
+ sub.f 0,r12,r3
+ j_s.d [blink]
+ sub.mi r0,r0,1
+/* For denormal results, it is possible that an exact result needs
+ rounding, and thus the round-to-even rule has to come into play. */
+.Linf_denorm:
+ brlo r2,0xc0000000,.Linf
+.Ldenorm:
+ asr_s r2,r2,23
+ bic r0,r0,r9
+ neg r9,r2
+ brlo.d r9,25,.Lpast_denorm
+ lsr r3,r3,r9
+ /* Fall through: return +- 0 */
+ j_s [blink]
+.Linf:
+ j_s.d [blink]
+ or r0,r0,r9
+ ENDFUNC(__divsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/divsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/divsf3.S
new file mode 100644
index 000000000..edc16a849
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/divsf3.S
@@ -0,0 +1,221 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __divsf3
+ FUNC(__divsf3)
+ .balign 4
+__divsf3:
+ push_s blink
+ push_s r1
+ bl.d __divsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __divsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+#if 1
+ bne abort
+ jeq_s [blink]
+ b abort
+#else
+ bne abort
+ j_s [blink]
+#endif
+ ENDFUNC(__divsf3)
+#define __divsf3 __divsf3_asm
+#endif /* DEBUG */
+
+ .balign 4
+__divdf3_support: /* This label makes debugger output saner. */
+ FUNC(__divsf3)
+.Ldenorm_fp0:
+ norm.f r12,r2 ; flag for 0/x -> 0 check
+ bic.ne.f 0,0x60000000,r1 ; denorm/large number -> 0
+ beq_s .Lret0_NaN
+ tst r1,r9
+ add_s r2,r2,r2
+ sub_s r12,r12,8
+ asl_s r2,r2,r12
+ asl_l r12,r12,23
+ bne.d .Lpast_denorm_fp0
+ add r5,r5,r12
+/* r0 is subnormal, r1 is subnormal or 0. */
+
+ .balign 4
+.Ldenorm_fp1:
+ norm.f r12,r3 ; flag for x/0 -> Inf check
+ bic.ne.f 0,0x60000000,r0 ; large number/denorm -> Inf
+ beq_s .Linf
+ add_s r3,r3,r3
+ sub_s r12,r12,8
+ asl_s r3,r3,r12
+ asl_s r12,r12,23
+ b.d .Lpast_denorm_fp1
+ add r4,r4,r12
+
+.Lret0_NaN:
+ bclr.f 0,r1,31 ; 0/0 -> NaN
+ bic r0,r10,r9
+ j_s.d [blink]
+ sub.eq r0,r0,1
+
+ .global __divsf3
+ .balign 4
+ .long 0x7f800000 ; exponent mask
+__divsf3:
+ ld r9,[pcl,-4]
+ bmsk r2,r0,22
+ xor r4,r0,r2
+ bmsk r3,r1,22
+ xor r5,r1,r3
+ and r11,r0,r9
+ breq.d r11,0,.Ldenorm_fp0
+ xor r10,r4,r5
+ breq r11,r9,.Linf_nan_fp0
+ bset_s r2,r2,23
+ and r11,r1,r9
+ breq r11,0,.Ldenorm_fp1
+ breq r11,r9,.Linf_nan_fp1
+.Lpast_denorm_fp0:
+ bset_s r3,r3,23
+.Lpast_denorm_fp1:
+ cmp r2,r3
+ asl_s r2,r2,6+1
+ asl_s r3,r3,7
+ add.lo r2,r2,r2
+ bclr r8,r9,30 ; exponent bias
+ bclr.lo r8,r8,23 ; reduce exp by one if fraction is shifted
+ sub r4,r4,r5
+ add r4,r4,r8
+ xor.f 0,r10,r4
+ bmi .Linf_denorm
+ and r12,r4,r9
+ breq r12,0,.Ldenorm
+ sub_s r2,r2,r3 ; discard implicit 1
+.Ldiv_23bit:
+ .rep 6
+ divaw r2,r2,r3
+ .endr
+ breq r12,r9,.Linf
+ bmsk r0,r2,6
+ xor_s r2,r2,r0
+.Ldiv_17bit:
+ .rep 7
+ divaw r2,r2,r3
+ .endr
+ asl_s r0,r0,7
+ bmsk r1,r2,6
+ xor_s r2,r2,r1
+ or_s r0,r0,r1
+.Ldiv_10bit:
+ .rep 7
+ divaw r2,r2,r3
+ .endr
+ asl_s r0,r0,7
+ bmsk r1,r2,6
+ xor_s r2,r2,r1
+ or_s r0,r0,r1
+.Ldiv_3bit:
+ .rep 3
+ divaw r2,r2,r3
+ .endr
+ asl_s r0,r0,3
+.Ldiv_0bit:
+ divaw r1,r2,r3
+ bmsk_s r2,r2,2
+ tst r1,-0x7e ; 0xffffff82, test for rest or odd
+ bmsk_s r1,r1,0
+ add_s r0,r0,r2 ; assemble fraction
+ add_s r0,r0,r4 ; add in sign & exponent
+ j_s.d [blink]
+ add.ne r0,r0,r1 ; round to nearest / even
+
+ .balign 4
+.Linf_nan_fp0:
+ bic.f 0,r9,r1 ; fp1 Inf -> result NaN
+ bic r1,r5,r9 ; fp1 sign
+ sub.eq r1,r1,1
+ j_s.d [blink]
+ xor_s r0,r0,r1
+.Linf_nan_fp1:
+ bic r0,r4,r9 ; fp0 sign
+ bmsk.f 0,r1,22 ; x/inf -> 0, x/nan -> nan
+ xor.eq r1,r1,r9
+ j_s.d [blink]
+ xor_s r0,r0,r1
+.Linf:
+ j_s.d [blink]
+ or r0,r10,r9
+
+.Lret_r4:
+ j_s.d [blink]
+ mov_s r0,r4
+ .balign 4
+.Linf_denorm:
+ add.f r12,r4,r4
+ asr_l r12,r12,24
+ bpl .Linf
+ max r12,r12,-24
+.Ldenorm:
+ add r1,pcl,42; .Ldenorm_tab-.
+ ldb_s r12,[r12,r1]
+ mov_s r0,0
+ lsr_s r2,r2
+ sub_s r1,r1,r12
+ j_s.d [r1]
+ bic r4,r10,r9
+ .byte .Ldenorm_tab-.Lret_r4
+ .byte .Ldenorm_tab-.Ldiv_0bit
+ .byte .Ldenorm_tab-.Ldiv_3bit-8
+ .byte .Ldenorm_tab-.Ldiv_3bit-4
+ .byte .Ldenorm_tab-.Ldiv_3bit
+ .byte .Ldenorm_tab-.Ldiv_10bit-24
+ .byte .Ldenorm_tab-.Ldiv_10bit-20
+ .byte .Ldenorm_tab-.Ldiv_10bit-16
+ .byte .Ldenorm_tab-.Ldiv_10bit-12
+ .byte .Ldenorm_tab-.Ldiv_10bit-8
+ .byte .Ldenorm_tab-.Ldiv_10bit-4
+ .byte .Ldenorm_tab-.Ldiv_10bit
+ .byte .Ldenorm_tab-.Ldiv_17bit-24
+ .byte .Ldenorm_tab-.Ldiv_17bit-20
+ .byte .Ldenorm_tab-.Ldiv_17bit-16
+ .byte .Ldenorm_tab-.Ldiv_17bit-12
+ .byte .Ldenorm_tab-.Ldiv_17bit-8
+ .byte .Ldenorm_tab-.Ldiv_17bit-4
+ .byte .Ldenorm_tab-.Ldiv_17bit
+ .byte .Ldenorm_tab-.Ldiv_23bit-20
+ .byte .Ldenorm_tab-.Ldiv_23bit-16
+ .byte .Ldenorm_tab-.Ldiv_23bit-12
+ .byte .Ldenorm_tab-.Ldiv_23bit-8
+ .byte .Ldenorm_tab-.Ldiv_23bit-4
+.Ldenorm_tab:
+ .byte .Ldenorm_tab-.Ldiv_23bit
+ ENDFUNC(__divsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-df.c b/gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-df.c
new file mode 100644
index 000000000..9142b4541
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-df.c
@@ -0,0 +1,161 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* We use a polynom similar to a Tchebycheff polynom to get an initial
+ seed, and then use a newton-raphson iteration step to get an
+ approximate result
+ If this result can't be rounded to the exact result with confidence, we
+ round to the value between the two closest representable values, and
+ test if the correctly rounded value is above or below this value.
+
+ Because of the Newton-raphson iteration step, an error in the seed at X
+ is amplified by X. Therefore, we don't want a Tchebycheff polynom
+ or a polynom that is close to optimal according to the maximum norm
+ on the errro of the seed value; we want one that is close to optimal
+ according to the maximum norm on the error of the result, i.e. we
+ want the maxima of the polynom to increase linearily.
+ Given an interval [X0,X2) over which to approximate,
+ with X1 := (X0+X2)/2, D := X1-X0, F := 1/D, and S := D/X1 we have,
+ like for Tchebycheff polynoms:
+ P(0) := 1
+ but then we have:
+ P(1) := X + S*D
+ P(2) := 2 * X^2 + S*D * X - D^2
+ Then again:
+ P(n+1) := 2 * X * P(n) - D^2 * P (n-1)
+ */
+
+static long double merr = 42.;
+
+double
+err (long double a0, long double a1, long double x)
+{
+ long double y0 = a0 + (x-1)*a1;
+
+ long double approx = 2. * y0 - y0 * x * y0;
+ long double true = 1./x;
+ long double err = approx - true;
+
+ if (err <= -1./65536./16384.)
+ printf ("ERROR EXCEEDS 1 ULP %.15f %.15f %.15f\n",
+ (double)x, (double)approx, (double)true);
+ if (merr > err)
+ merr = err;
+ return err;
+}
+
+int
+main (void)
+{
+ long double T[5]; /* Taylor polynom */
+ long double P[5][5];
+ int i, j;
+ long double X0, X1, X2, S;
+ long double inc = 1./64;
+ long double D = inc*0.5;
+ long i0, i1, i2, io;
+
+ memset (P, 0, sizeof (P));
+ P[0][0] = 1.;
+ for (i = 1; i < 5; i++)
+ P[i][i] = 1 << i-1;
+ P[2][0] = -D*D;
+ for (X0 = 1.; X0 < 2.; X0 += inc)
+ {
+ X1 = X0 + inc * 0.5;
+ X2 = X0 + inc;
+ S = D / X1;
+ T[0] = 1./X1;
+ for (i = 1; i < 5; i++)
+ T[i] = T[i-1] * -T[0];
+#if 0
+ printf ("T %1.8f %f %f %f %f\n", (double)T[0], (double)T[1], (double)T[2],
+(double)T[3], (double)T[4]);
+#endif
+ P[1][0] = S*D;
+ P[2][1] = S*D;
+ for (i = 3; i < 5; i++)
+ {
+ P[i][0] = -D*D*P[i-2][0];
+ for (j = 1; j < i; j++)
+ P[i][j] = 2*P[i-1][j-1]-D*D*P[i-2][j];
+ }
+#if 0
+ printf ("P3 %1.8f %f %f %f %f\n", (double)P[3][0], (double)P[3][1], (double)P[3][2],
+(double)P[3][3], (double)P[3][4]);
+ printf ("P4 %1.8f %f %f %f %f\n", (double)P[4][0], (double)P[4][1], (double)P[4][2],
+(double)P[4][3], (double)P[4][4]);
+#endif
+ for (i = 4; i > 1; i--)
+ {
+ long double a = T[i]/P[i][i];
+
+ for (j = 0; j < i; j++)
+ T[j] -= a * P[i][j];
+ }
+#if 0
+ printf ("A %1.8f %f %f\n", (double)T[0], (double)T[1], (double)T[2]);
+#endif
+#if 0
+ i2 = T[2]*1024;
+ long double a = (T[2]-i/1024.)/P[2][2];
+ for (j = 0; j < 2; j++)
+ T[j] -= a * P[2][j];
+#else
+ i2 = 0;
+#endif
+ long double T0, Ti1;
+ for (i = 0, i0 = 0; i < 4; i++)
+ {
+
+ i1 = T[1]*4096. + i0 / (long double)(1 << 20) - 0.5;
+ i1 = - (-i1 & 0x0fff);
+ Ti1 = ((unsigned)(-i1 << 20) | i0) /-(long double)(1LL<<32LL);
+ T0 = T[0] - (T[1]-Ti1)/P[1][1] * P[1][0] - (X1 - 1) * Ti1;
+ i0 = T0 * 1024 * 1024 + 0.5;
+ i0 &= 0xfffff;
+ }
+#if 0
+ printf ("A %1.8f %f %f\n", (double)T[0], (double)T[1], (double)T[2]);
+#endif
+ io = (unsigned)(-i1 << 20) | i0;
+ long double A1 = (unsigned)io/-65536./65536.;
+ long double A0 = (unsigned)(io << 12)/65536./65536.;
+ long double Xm0 = 1./sqrt (-A1);
+ long double Xm1 = 0.5+0.5*-A0/A1;
+#if 0
+ printf ("%f %f %f %f\n", (double)A0, (double)A1, (double) Ti1, (double)X0);
+ printf ("%.12f %.12f %.12f\n",
+ err (A0, A1, X0), err (A0, A1, X1), err (A0, A1, X2));
+ printf ("%.12f %.12f\n", (double)Xm0, (double)Xm1);
+ printf ("%.12f %.12f\n", err (A0, A1, Xm0), err (A0, A1, Xm1));
+#endif
+ printf ("\t.long 0x%x\n", io);
+ }
+#if 0
+ printf ("maximum error: %.15f %x %f\n", (double)merr, (unsigned)(long long)(-merr * 65536 * 65536), (double)log(-merr)/log(2));
+#endif
+ return 0;
+}
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-sf.c b/gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-sf.c
new file mode 100644
index 000000000..ff0f08ba4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/divtab-arc-sf.c
@@ -0,0 +1,127 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* We use a polynom similar to a Tchebycheff polynom to get an initial
+ seed, and then use a newton-raphson iteration step to get an
+ approximate result
+ If this result can't be rounded to the exact result with confidence, we
+ round to the value between the two closest representable values, and
+ test if the correctly rounded value is above or below this value.
+
+ Because of the Newton-raphson iteration step, an error in the seed at X
+ is amplified by X. Therefore, we don't want a Tchebycheff polynom
+ or a polynom that is close to optimal according to the maximum norm
+ on the errro of the seed value; we want one that is close to optimal
+ according to the maximum norm on the error of the result, i.e. we
+ want the maxima of the polynom to increase linearily.
+ Given an interval [X0,X2) over which to approximate,
+ with X1 := (X0+X2)/2, D := X1-X0, F := 1/D, and S := D/X1 we have,
+ like for Tchebycheff polynoms:
+ P(0) := 1
+ but then we have:
+ P(1) := X + S*D
+ P(2) := 2 * X^2 + S*D * X - D^2
+ Then again:
+ P(n+1) := 2 * X * P(n) - D^2 * P (n-1)
+ */
+
+int
+main (void)
+{
+ long double T[5]; /* Taylor polynom */
+ long double P[5][5];
+ int i, j;
+ long double X0, X1, X2, S;
+ long double inc = 1./64;
+ long double D = inc*0.5;
+ long i0, i1, i2;
+
+ memset (P, 0, sizeof (P));
+ P[0][0] = 1.;
+ for (i = 1; i < 5; i++)
+ P[i][i] = 1 << i-1;
+ P[2][0] = -D*D;
+ for (X0 = 1.; X0 < 2.; X0 += inc)
+ {
+ X1 = X0 + inc * 0.5;
+ X2 = X1 + inc;
+ S = D / X1;
+ T[0] = 1./X1;
+ for (i = 1; i < 5; i++)
+ T[i] = T[i-1] * -T[0];
+#if 0
+ printf ("T %1.8f %f %f %f %f\n", (double)T[0], (double)T[1], (double)T[2],
+(double)T[3], (double)T[4]);
+#endif
+ P[1][0] = S*D;
+ P[2][1] = S*D;
+ for (i = 3; i < 5; i++)
+ {
+ P[i][0] = -D*D*P[i-2][0];
+ for (j = 1; j < i; j++)
+ P[i][j] = 2*P[i-1][j-1]-D*D*P[i-2][j];
+ }
+#if 0
+ printf ("P3 %1.8f %f %f %f %f\n", (double)P[3][0], (double)P[3][1], (double)P[3][2],
+(double)P[3][3], (double)P[3][4]);
+ printf ("P4 %1.8f %f %f %f %f\n", (double)P[4][0], (double)P[4][1], (double)P[4][2],
+(double)P[4][3], (double)P[4][4]);
+#endif
+ for (i = 4; i > 1; i--)
+ {
+ long double a = T[i]/P[i][i];
+
+ for (j = 0; j < i; j++)
+ T[j] -= a * P[i][j];
+ }
+#if 0
+ printf ("A %1.8f %f %f\n", (double)T[0], (double)T[1], (double)T[2]);
+#endif
+#if 0
+ i2 = T[2]*512;
+ long double a = (T[2]-i/512.)/P[2][2];
+ for (j = 0; j < 2; j++)
+ T[j] -= a * P[2][j];
+#else
+ i2 = 0;
+#endif
+ for (i = 0, i0 = 0; i < 4; i++)
+ {
+ long double T0, Ti1;
+
+ i1 = T[1]*8192. + i0 / (long double)(1 << 19) - 0.5;
+ i1 = - (-i1 & 0x1fff);
+ Ti1 = ((unsigned)(-i1 << 19) | i0) /-(long double)(1LL<<32LL);
+ T0 = T[0] - (T[1]-Ti1)/P[1][1] * P[1][0] - (X1 - 1) * Ti1;
+ i0 = T0 * 512 * 1024 + 0.5;
+ i0 &= 0x7ffff;
+ }
+#if 0
+ printf ("A %1.8f %f %f\n", (double)T[0], (double)T[1], (double)T[2]);
+#endif
+ printf ("\t.long 0x%x\n", (-i1 << 19) | i0);
+ }
+ return 0;
+}
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/eqdf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/eqdf2.S
new file mode 100644
index 000000000..10401534a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/eqdf2.S
@@ -0,0 +1,76 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: DBL0, DBL1
+ output: z flag
+ clobber: r12, flags
+ For NaNs, bit 19.. bit 30 of the high word must be set. */
+#if 0 /* DEBUG */
+ .global __eqdf2
+ .balign 4
+ FUNC(__eqdf2)
+__eqdf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __eqdf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __eqdf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ breq.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jne_s [blink]
+ bl abort
+0: jeq_s [blink]
+ bl abort
+ ENDFUNC(__eqdf2)
+#define __eqdf2 __eqdf2_asm
+#endif /* DEBUG */
+ .global __eqdf2
+ .balign 4
+ HIDDEN_FUNC(__eqdf2)
+ /* Good performance as long as the difference in high word is
+ well predictable (as seen from the branch predictor). */
+__eqdf2:
+ brne.d DBL0H,DBL1H,.Lhighdiff
+ bmsk r12,DBL0H,20
+#ifdef DPFP_COMPAT
+ or.f 0,DBL0L,DBL1L
+ bset.ne r12,r12,21
+#endif /* DPFP_COMPAT */
+ add1.f r12,r12,DBL0H /* set c iff NaN; also, clear z if NaN. */
+ j_s.d [blink]
+ cmp.cc DBL0L,DBL1L
+ .balign 4
+.Lhighdiff:
+ or r12,DBL0H,DBL1H
+ or.f 0,DBL0L,DBL1L
+ j_s.d [blink]
+ bmsk.eq.f r12,r12,30
+ ENDFUNC(__eqdf2)
+/* ??? could we do better by speeding up some 'common' case of inequality? */
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/eqsf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/eqsf2.S
new file mode 100644
index 000000000..8a56132c1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/eqsf2.S
@@ -0,0 +1,69 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: r0, r1
+ output: z flag
+ clobber: r12, flags
+ For NaNs, bit 22 .. bit 30 must be set. */
+#if 0 /* DEBUG */
+ .global __eqsf2
+ .balign 4
+ FUNC(__eqsf2)
+__eqsf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __eqsf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __eqsf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ breq.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jne_s [blink]
+ bl abort
+0: jeq_s [blink]
+ bl abort
+ ENDFUNC(__eqsf2)
+#define __eqsf2 __eqsf2_asm
+#endif /* DEBUG */
+ /* Good performance as long as the binary difference is
+ well predictable (as seen from the branch predictor). */
+ .global __eqsf2
+ .balign 4
+ HIDDEN_FUNC(__eqsf2)
+__eqsf2:
+ breq r0, r1,.Lno_bdiff
+ or r12,r0,r1
+ j_s.d [blink]
+ bmsk.f 0,r12,30
+.Lno_bdiff:
+ bmsk r12,r0,23
+ add1.f r12,r12,r0 /* set c iff NaN; also, clear z if NaN. */
+ j_s.d [blink]
+ cmp.cc r0,r1
+ ENDFUNC(__eqsf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/extendsfdf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/extendsfdf2.S
new file mode 100644
index 000000000..cf6c98d23
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/extendsfdf2.S
@@ -0,0 +1,122 @@
+/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __extendsfdf2
+ .balign 4
+ FUNC(__extendsfdf2)
+__extendsfdf2:
+ push_s blink
+ bl.d __extendsfdf2_c
+ push_s r0
+ ld_s r2,[sp]
+ st_s r1,[sp]
+ push_s r0
+ bl.d __extendsfdf2_asm
+ mov_s r0,r2
+ pop_s r2
+ pop_s r3
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__extendsfdf2)
+#define __extendsfdf2 __extendsfdf2_asm
+#endif /* DEBUG */
+#if 0 /* ARC600 */
+__extendsfdf2:
+ lsr r2,r0,23
+ tst r2,0xff
+ bic.ne.f r2,0xff
+ beq_s .Linf_nan_denorm_0
+..
+.Linf_nan_denorm:
+ bbit1 r0,30,.Linf_nan
+#endif
+ .global __extendsfdf2
+ .balign 4
+ FUNC(__extendsfdf2)
+__extendsfdf2:
+ add.f r1,r0,r0
+ norm r3,r1
+#ifdef __LITTLE_ENDIAN__
+ lsr_s DBL0H,r1,4
+ brhs r3,7,.Linf_nan_denorm_0
+ asl_s DBL0L,r0,29
+ add_s DBL0H,DBL0H, \
+ 0x38000000
+#else
+ lsr r2,r1,4
+ brhs r3,7,.Linf_nan_denorm_0
+ asl_s DBL0L,r1,28
+ add DBL0H,r2, \
+ 0x38000000
+#endif
+ j_s.d [blink]
+ bxor.cs DBL0H,DBL0H,31
+ .balign 4
+.Linf_nan_denorm_0:
+#ifdef __LITTLE_ENDIAN__
+ mov_s DBL0H,r0
+ jeq.d [blink]
+ mov.eq DBL0L,0
+#else
+ jeq_s [blink]
+#endif
+ bmi .Linf_nan
+ asl_s r0,r0,r3
+ rsub r3,r3,0x380+6
+#ifdef __LITTLE_ENDIAN__
+ asl_s r3,r3,20
+ lsr DBL0H,r0,9
+ asl_s DBL0L,r0,23
+ add_s DBL0H,DBL0H,r3
+ j_s.d [blink]
+ bxor.cs DBL0H,DBL0H,31
+#else
+ asl DBL0L,r0,23
+ lsr_s DBL0H,r0,9
+ asl_s r3,r3,20
+ bxor.cs DBL0H,DBL0H,31
+ j_s.d [blink]
+ add_l DBL0H,DBL0H,r3
+#endif
+.Linf_nan:
+#ifdef __LITTLE_ENDIAN__
+ lsr DBL0H,r0,3
+
+ or_s DBL0H,DBL0H,r0
+ j_s.d [blink]
+ mov_l DBL0L,0
+#else
+ lsr r3,r0,3
+ mov_s DBL0L,0
+ j_s.d [blink]
+ or_l DBL0H,r0,r3
+#endif
+ ENDFUNC(__extendsfdf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/fixdfsi.S b/gcc-4.9/libgcc/config/arc/ieee-754/fixdfsi.S
new file mode 100644
index 000000000..82c2c02b8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/fixdfsi.S
@@ -0,0 +1,85 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ FUNC(__fixdfsi)
+ .global __fixdfsi
+ .balign 4
+__fixdfsi:
+ push_s blink
+ push_s r0
+ bl.d __fixdfsi_c
+ push_s r1
+ mov_s r2,r0
+ pop_s r1
+ ld r0,[sp]
+ bl.d __fixdfsi_asm
+ st r2,[sp]
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__fixdfsi)
+#define __fixdfsi __fixdfsi_asm
+#endif /* DEBUG */
+
+/* If the fraction has to be shifted left by a positive non-zero amount,
+ we have to combine bits from DBL0L and DBL0H. If we shift right,
+ or shift by zero, we only want to have the bits from DBL0H in r0. */
+
+ .global __fixdfsi
+ FUNC(__fixdfsi)
+ .balign 4
+__fixdfsi:
+ bbit0 DBL0H,30,.Lret0or1
+ asr r2,DBL0H,20
+ bmsk_s DBL0H,DBL0H,19
+ sub_s r2,r2,19; 0x3ff+20-0x400
+ neg_s r3,r2
+ asr.f 0,r3,11
+ bset_s DBL0H,DBL0H,20
+#ifdef __LITTLE_ENDIAN__
+ mov.cs DBL0L,DBL0H
+ asl DBL0H,DBL0H,r2
+#else
+ asl.cc DBL0H,DBL0H,r2
+ lsr.cs DBL0H,DBL0H,r3
+#endif
+ lsr_s DBL0L,DBL0L,r3
+
+ add.cc r0,r0,r1
+ j_s.d [blink]
+ neg.pl r0,r0
+.Lret0or1:
+ add.f r0,DBL0H,0x100000
+ lsr_s r0,r0,30
+
+ bmsk_s r0,r0,0
+ j_s.d [blink]
+ neg.mi r0,r0
+ ENDFUNC(__fixdfsi)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/fixsfsi.S b/gcc-4.9/libgcc/config/arc/ieee-754/fixsfsi.S
new file mode 100644
index 000000000..56ab2fd09
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/fixsfsi.S
@@ -0,0 +1,71 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __fixsfsi
+ FUNC(__fixsfsi)
+ .balign 4
+__fixsfsi:
+ push_s blink
+ bl.d __fixsfsi_c
+ push_s r0
+ ld_s r1,[sp]
+ st_s r0,[sp]
+ bl.d __fixsfsi_asm
+ mov_s r0,r1
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__fixsfsi)
+#define __fixsfsi __fixsfsi_asm
+#endif /* DEBUG */
+
+ .global __fixsfsi
+ FUNC(__fixsfsi)
+ .balign 4
+__fixsfsi:
+ bbit0 r0,30,.Lret0or1
+ lsr r2,r0,23
+ bmsk_s r0,r0,22
+ bset_s r0,r0,23
+ sub_s r2,r2,22;0x7f+23-0x80
+ asl.f 0,r2,24
+ neg r3,r2
+ asl.mi r0,r0,r2
+ lsr.pl r0,r0,r3
+ j_s.d [blink]
+ neg.cs r0,r0
+.Lret0or1:
+ add.f r0,r0,0x800000
+ lsr_s r0,r0,30
+
+ bmsk_s r0,r0,0
+ j_s.d [blink]
+ neg.mi r0,r0
+ ENDFUNC(__fixsfsi)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/fixunsdfsi.S b/gcc-4.9/libgcc/config/arc/ieee-754/fixunsdfsi.S
new file mode 100644
index 000000000..13af5dc6e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/fixunsdfsi.S
@@ -0,0 +1,80 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ FUNC(__fixunsdfsi)
+ .global __fixunsdfsi
+ .balign 4
+__fixunsdfsi:
+ push_s blink
+ push_s r0
+ bl.d __fixunsdfsi_c
+ push_s r1
+ mov_s r2,r0
+ pop_s r1
+ ld r0,[sp]
+ bl.d __fixunsdfsi_asm
+ st r2,[sp]
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__fixunsdfsi)
+#define __fixunsdfsi __fixunsdfsi_asm
+#endif /* DEBUG */
+
+ .global __fixunsdfsi
+ FUNC(__fixunsdfsi)
+ .balign 4
+__fixunsdfsi:
+ bbit0 DBL0H,30,.Lret0or1
+ lsr r2,DBL0H,20
+ bmsk_s DBL0H,DBL0H,19
+ sub_s r2,r2,19; 0x3ff+20-0x400
+ neg_s r3,r2
+ btst_s r3,10
+ bset_s DBL0H,DBL0H,20
+#ifdef __LITTLE_ENDIAN__
+ mov.ne DBL0L,DBL0H
+ asl DBL0H,DBL0H,r2
+#else
+ asl.eq DBL0H,DBL0H,r2
+ lsr.ne DBL0H,DBL0H,r3
+#endif
+ lsr DBL0L,DBL0L,r3
+ j_s.d [blink]
+ add.eq r0,r0,r1
+.Lret0:
+ j_s.d [blink]
+ mov_l r0,0
+.Lret0or1:
+ add_s DBL0H,DBL0H,0x100000
+ lsr_s DBL0H,DBL0H,30
+ j_s.d [blink]
+ bmsk_l r0,DBL0H,0
+ ENDFUNC(__fixunsdfsi)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/floatsidf.S b/gcc-4.9/libgcc/config/arc/ieee-754/floatsidf.S
new file mode 100644
index 000000000..2e2363aeb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/floatsidf.S
@@ -0,0 +1,77 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __floatsidf
+ .balign 4
+ FUNC(__floatsidf)
+__floatsidf:
+ push_s blink
+ bl.d __floatsidf_c
+ push_s r0
+ ld_s r2,[sp]
+ st_s r1,[sp]
+ push_s r0
+ bl.d __floatsidf_asm
+ mov_s r0,r2
+ pop_s r2
+ pop_s r3
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__floatsidf)
+#define __floatsidf __floatsidf_asm
+#endif /* DEBUG */
+
+ .global __floatsidf
+ .balign 4
+ FUNC(__floatsidf)
+__floatsidf:
+ abs.f r1,r0
+ jeq_s [blink]
+ lsr r2,r1
+ mov r12,-0x41d ; -(0x3ff+31-1)
+ norm r2,r2
+ bclr.cs r12,r12,11
+ rsub.f r3,r2,11
+ add_s r12,r2,r12
+ add_s r2,r2,21
+#ifdef __LITTLE_ENDIAN__
+ asl DBL0L,r1,r2
+ lsr_s DBL0H,r1,r3
+#else
+ lsr DBL0H,r1,r3
+ asl_s DBL0L,r1,r2
+#endif
+ asl_s r12,r12,20
+ mov.lo DBL0H,DBL0L
+ sub_s DBL0H,DBL0H,r12
+ j_s.d [blink]
+ mov.ls DBL0L,0
+ ENDFUNC(__floatsidf)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/floatsisf.S b/gcc-4.9/libgcc/config/arc/ieee-754/floatsisf.S
new file mode 100644
index 000000000..0e35fe06a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/floatsisf.S
@@ -0,0 +1,99 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __floatsisf
+ FUNC(__floatsisf)
+ .balign 4
+__floatsisf:
+ push_s blink
+ bl.d __floatsisf_c
+ push_s r0
+ ld_s r1,[sp]
+ st_s r0,[sp]
+ bl.d __floatsisf_asm
+ mov_s r0,r1
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__floatsisf)
+ .global __floatunsisf
+ FUNC(__floatunsisf)
+ .balign 4
+__floatunsisf:
+ push_s blink
+ bl.d __floatunsisf_c
+ push_s r0
+ ld_s r1,[sp]
+ st_s r0,[sp]
+ bl.d __floatunsisf_asm
+ mov_s r0,r1
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__floatunsisf)
+#define __floatsisf __floatsisf_asm
+#define __floatunsisf __floatunsisf_asm
+#endif /* DEBUG */
+
+ .global __floatunsisf
+ .global __floatsisf
+ FUNC(__floatsisf)
+ FUNC(__floatunsisf)
+ .balign 4
+__floatunsisf:
+ lsr_s r2,r0
+ mov_l r12,0x9d ; 0x7f + 31 - 1
+ norm r2,r2
+ brne_l r0,0,0f
+ j_s [blink]
+ .balign 4
+__floatsisf:
+ abs.f r0,r0
+ jeq_s [blink]
+ lsr_s r2,r0
+ mov_s r12,0x9d ; 0x7f + 31 - 1
+ norm r2,r2
+ bset.cs r12,r12,8
+0: rsub.f r3,r2,8
+ bmsk r1,r0,r3
+ ror r1,r1,r3
+ lsr.pl r0,r0,r3
+ neg_s r3,r3
+ asl.mi r0,r0,r3
+ sub_s r12,r12,r2
+ asl_s r12,r12,23
+ bxor.pl.f r1,r1,31
+ add_s r0,r0,r12
+ j_s.d [blink]
+ add.pnz r0,r0,1
+ ENDFUNC(__floatunsisf)
+ ENDFUNC(__floatsisf)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/floatunsidf.S b/gcc-4.9/libgcc/config/arc/ieee-754/floatunsidf.S
new file mode 100644
index 000000000..4bdb965bc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/floatunsidf.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __floatunsidf
+ .balign 4
+ FUNC(__floatunsidf)
+__floatunsidf:
+ push_s blink
+ bl.d __floatunsidf_c
+ push_s r0
+ ld_s r2,[sp]
+ st_s r1,[sp]
+ push_s r0
+ bl.d __floatunsidf_asm
+ mov_s r0,r2
+ pop_s r2
+ pop_s r3
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ bl abort
+ ENDFUNC(__floatunsidf)
+#define __floatunsidf __floatunsidf_asm
+#endif /* DEBUG */
+
+ .global __floatunsidf
+ .balign 4
+ FUNC(__floatunsidf)
+__floatunsidf:
+ lsr_s r1,r0
+ breq_s r0,0,.Lret0
+ norm r2,r1
+ mov r12,-0x41d ; -(0x3ff+31-1)
+ rsub.f r3,r2,11
+ add_s r12,r2,r12
+ add_s r2,r2,21
+#ifdef __LITTLE_ENDIAN__
+ lsr DBL0H,r0,r3
+ asl_s DBL0L,r0,r2
+#else
+ asl DBL0L,r0,r2
+ lsr_s DBL0H,r0,r3
+#endif
+ asl_s r12,r12,20
+ mov.lo DBL0H,DBL0L
+ sub_s DBL0H,DBL0H,r12
+.Lret0: j_s.d [blink]
+ mov.ls DBL0L,0
+ ENDFUNC(__floatunsidf)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/gedf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/gedf2.S
new file mode 100644
index 000000000..72b71af5c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/gedf2.S
@@ -0,0 +1,86 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: DBL0, DBL1
+ output: c flags to be used for 'hs' condition
+ clobber: r12, flags */
+/* For NaNs, bit 19.. bit 30 of the high word must be set. */
+#if 0 /* DEBUG */
+ .global __gedf2
+ .balign 4
+ FUNC(__gedf2)
+__gedf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __gedf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __gedf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ brge.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jlo [blink]
+ bl abort
+0: jhs [blink]
+ bl abort
+ ENDFUNC(__gedf2)
+#define __gedf2 __gedf2_asm
+#endif /* DEBUG */
+ .global __gedf2
+ .balign 4
+ HIDDEN_FUNC(__gedf2)
+__gedf2:
+ or.f r12,DBL0H,DBL1H
+ bmi.d .Lneg
+ bmsk_s r12,r12,20
+ add1.f 0,r12,DBL0H ; clear z; set c iff NaN
+ add1.cc.f r12,r12,DBL1H ; clear z; set c iff NaN
+ bbit1 DBL0H,31,.Lneg
+ cmp.cc DBL0H,DBL1H
+ j_s.d [blink]
+ cmp.eq DBL0L,DBL1L
+ .balign 4
+.Lneg: breq.d DBL1H,0,.L0
+ add1.f 0,r12,DBL0H
+ add1.cc.f r12,r12,DBL1H
+ cmp.cc DBL1H,DBL0H
+ j_s.d [blink]
+ cmp.eq DBL1L,DBL0L
+ .balign 4
+.L0:
+ bxor.f 0,DBL0H,31 ; check for high word of -0.
+ beq_s .Lcheck_0
+ cmp.cc DBL1H,DBL0H
+ j_s.d [blink]
+ cmp.eq DBL1L,DBL0L
+.Lcheck_0:
+ ; high words suggest DBL0 may be -0, DBL1 +0; check low words.
+ cmp_s DBL1H,DBL0L
+ j_s.d [blink]
+ cmp.cc DBL1H,DBL1L
+ ENDFUNC(__gedf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/gesf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/gesf2.S
new file mode 100644
index 000000000..896901acd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/gesf2.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: r0, r1
+ output: c flag to be used for 'hs' condition
+ clobber: r12,flags */
+/* For NaNs, bit 22.. bit 30 must be set. */
+#if 0 /* DEBUG */
+ .global __gesf2
+ .balign 4
+ FUNC(__gesf2)
+__gesf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __gesf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __gesf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ brge.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jlo [blink]
+ bl abort
+0: jhs [blink]
+ bl abort
+ ENDFUNC(__gesf2)
+#define __gesf2 __gesf2_asm
+#endif /* DEBUG */
+ .global __gesf2
+ .balign 4
+ HIDDEN_FUNC(__gesf2)
+__gesf2:
+ or.f r12,r0,r1
+ bmi.d .Lneg
+ bmsk_s r12,r12,23
+ add1.f 0,r12,r0 ; check for NaN
+ add1.cc.f r12,r12,r1
+ j_s.d [blink]
+ cmp.cc r0,r1
+ .balign 4
+.Lneg: breq.d r1,0,.L0
+ add1.f 0,r12,r0 ; check for NaN
+ add1.cc.f r12,r12,r1
+ j_s.d [blink]
+ cmp.cc r1,r0
+ .balign 4
+.L0: bxor.f 0,r0,31 ; check for -0
+ j_s.d [blink]
+ cmp.hi r1,r0
+ ENDFUNC(__gesf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/gtdf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/gtdf2.S
new file mode 100644
index 000000000..56c2a292e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/gtdf2.S
@@ -0,0 +1,86 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: DBL0, DBL1
+ output: c,z flags to be used for 'hi' condition
+ clobber: r12, flags */
+/* For NaNs, bit 19.. bit 30 of the high word must be set. */
+#if 0 /* DEBUG */
+ .global __gtdf2
+ .balign 4
+ FUNC(__gtdf2)
+__gtdf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __gtdf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __gtdf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ brgt.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jls [blink]
+ bl abort
+0: jhi [blink]
+ bl abort
+ ENDFUNC(__gtdf2)
+#define __gtdf2 __gtdf2_asm
+#endif /* DEBUG */
+ .global __gtdf2
+ .balign 4
+ HIDDEN_FUNC(__gtdf2)
+__gtdf2:
+ or.f r12,DBL0H,DBL1H
+ bmi.d .Lneg
+ bmsk_s r12,r12,20
+ add1.f 0,r12,DBL0H ; clear z; set c iff NaN
+ add1.cc.f r12,r12,DBL1H ; clear z; set c iff NaN
+ ; don't care: z may or may not be cleared if there is no NaN event
+ cmp.cc DBL0H,DBL1H
+ j_s.d [blink]
+ cmp.eq DBL0L,DBL1L
+ .balign 4
+.Lneg: breq.d DBL0H,0,.L0
+ add1.f 0,r12,DBL1H
+ add1.cc.f r12,r12,DBL0H
+ cmp.cc DBL1H,DBL0H
+ j_s.d [blink]
+ cmp.eq DBL1L,DBL0L
+ .balign 4
+.L0:
+ bxor.f 0,DBL1H,31
+ beq_s .Lcheck_0
+ cmp.cc DBL1H,DBL0H
+ j_s.d [blink]
+ cmp.eq DBL1L,DBL0L
+ .balign 4
+.Lcheck_0:
+ ; high words suggest DBL0 may be +0, DBL1 -0; check low words.
+ j_s.d [blink]
+ or.f 0,DBL0L,DBL1L
+ ENDFUNC(__gtdf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/gtsf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/gtsf2.S
new file mode 100644
index 000000000..6253d06ee
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/gtsf2.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: r0, r1
+ output: c, z flags to be used for 'hi' condition
+ clobber: r12,flags */
+/* For NaNs, bit 22.. bit 30 must be set. */
+#if 0 /* DEBUG */
+ .global __gtsf2
+ .balign 4
+ FUNC(__gtsf2)
+__gtsf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __gtsf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __gtsf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ brgt.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jls [blink]
+ bl abort
+0: jhi [blink]
+ bl abort
+ ENDFUNC(__gtsf2)
+#define __gtsf2 __gtsf2_asm
+#endif /* DEBUG */
+ .global __gtsf2
+ .balign 4
+ HIDDEN_FUNC(__gtsf2)
+__gtsf2:
+ or.f r12,r0,r1
+ bmi.d .Lneg
+ bmsk_s r12,r12,23
+ add1.f 0,r12,r0 ; check for NaN
+ add1.cc.f r12,r12,r1
+ j_s.d [blink]
+ cmp.cc r0,r1
+ .balign 4
+.Lneg: breq.d r0,0,.L0
+ add1.f 0,r12,r0 ; check for NaN
+ add1.cc.f r12,r12,r1
+ j_s.d [blink]
+ cmp.cc r1,r0
+ .balign 4
+.L0: bxor.f 0,r1,31 ; check for -0
+ j_s.d [blink]
+ cmp.hi r1,r0
+ ENDFUNC(__gtsf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/muldf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/muldf3.S
new file mode 100644
index 000000000..7826fe75f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/muldf3.S
@@ -0,0 +1,235 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* XMAC schedule: directly back-to-back multiplies stall; the third
+ instruction after a multiply stalls unless it is also a multiply. */
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __muldf3
+ .balign 4
+__muldf3:
+ push_s blink
+ push_s r2
+ push_s r3
+ push_s r0
+ bl.d __muldf3_c
+ push_s r1
+ ld_s r2,[sp,12]
+ ld_s r3,[sp,8]
+ st_s r0,[sp,12]
+ st_s r1,[sp,8]
+ pop_s r1
+ bl.d __muldf3_asm
+ pop_s r0
+ pop_s r3
+ pop_s r2
+ pop_s blink
+ cmp r0,r2
+ cmp.eq r1,r3
+ jeq_s [blink]
+ b abort
+#define __muldf3 __muldf3_asm
+#endif /* DEBUG */
+/* N.B. This is optimized for ARC700.
+ ARC600 has very different scheduling / instruction selection criteria. */
+/* For the standard multiplier, instead of mpyu rx,DBL0L,DBL1L; tst rx,rx ,
+ we can do:
+ sub rx,DBL0L,1; bic rx,DBL0L,rx; lsr rx,rx; norm rx,rx; asl.f 0,DBL1L,rx */
+
+__muldf3_support: /* This label makes debugger output saner. */
+/* If one number is denormal, subtract some from the exponent of the other
+ one (if the other exponent is too small, return 0), and normalize the
+ denormal. Then re-run the computation. */
+ .balign 4
+ FUNC(__muldf3)
+.Ldenorm_dbl0:
+ mov_s r12,DBL0L
+ mov_s DBL0L,DBL1L
+ mov_s DBL1L,r12
+ mov_s r12,DBL0H
+ mov_s DBL0H,DBL1H
+ mov_s DBL1H,r12
+ and r11,DBL0H,r9
+.Ldenorm_dbl1:
+ brhs r11,r9,.Linf_nan
+ brhs 0x3ca00001,r11,.Lret0
+ sub_s DBL0H,DBL0H,DBL1H
+ bmsk_s DBL1H,DBL1H,30
+ add_s DBL0H,DBL0H,DBL1H
+ breq_s DBL1H,0,.Ldenorm_2
+ norm r12,DBL1H
+
+ sub_s r12,r12,10
+ asl r5,r12,20
+ asl_s DBL1H,DBL1H,r12
+ sub DBL0H,DBL0H,r5
+ neg r5,r12
+ lsr r6,DBL1L,r5
+ asl_s DBL1L,DBL1L,r12
+ b.d __muldf3
+ add_s DBL1H,DBL1H,r6
+
+ .balign 4
+.Linf_nan:
+ bclr r12,DBL1H,31
+ xor_s DBL1H,DBL1H,DBL0H
+ bclr_s DBL0H,DBL0H,31
+ max r8,DBL0H,r12 ; either NaN -> NaN ; otherwise inf
+ or.f 0,DBL0H,DBL0L
+ mov_s DBL0L,0
+ or.ne.f DBL1L,DBL1L,r12
+ not_s DBL0H,DBL0L ; inf * 0 -> NaN
+ mov.ne DBL0H,r8
+ tst_s DBL1H,DBL1H
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+
+.Lret0: xor_s DBL0H,DBL0H,DBL1H
+ bclr DBL1H,DBL0H,31
+ xor_s DBL0H,DBL0H,DBL1H
+ j_s.d [blink]
+ mov_l DBL0L,0
+
+ .balign 4
+.Ldenorm_2:
+ breq_s DBL1L,0,.Lret0 ; 0 input -> 0 output
+ norm.f r12,DBL1L
+
+ mov.mi r12,21
+ add.pl r12,r12,22
+ neg r11,r12
+ asl_s r12,r12,20
+ lsr.f DBL1H,DBL1L,r11
+ ror DBL1L,DBL1L,r11
+ sub_s DBL0H,DBL0H,r12
+ mov.eq DBL1H,DBL1L
+ sub_s DBL1L,DBL1L,DBL1H
+ /* Fall through. */
+ .global __muldf3
+ .balign 4
+__muldf3:
+ ld.as r9,[pcl,0x4b] ; ((.L7ff00000-.+2)/4)]
+ mpyhu r4,DBL0L,DBL1L
+ bmsk r6,DBL0H,19
+ bset r6,r6,20
+ mpyu r7,r6,DBL1L
+ and r11,DBL0H,r9
+ breq r11,0,.Ldenorm_dbl0
+ mpyhu r8,r6,DBL1L
+ bmsk r10,DBL1H,19
+ bset r10,r10,20
+ mpyhu r5,r10,DBL0L
+ add.f r4,r4,r7
+ and r12,DBL1H,r9
+ mpyhu r7,r6,r10
+ breq r12,0,.Ldenorm_dbl1
+ adc.f r5,r5,r8
+ mpyu r8,r10,DBL0L
+ breq r11,r9,.Linf_nan
+ breq r12,r9,.Linf_nan
+ mpyu r6,r6,r10
+ add.cs r7,r7,1
+ add.f r4,r4,r8
+ mpyu r10,DBL1L,DBL0L
+ bclr r8,r9,30 ; 0x3ff00000
+ adc.f r5,r5,r6
+ ; XMAC write-back stall / std. mult stall is one cycle later
+ bclr r6,r9,20 ; 0x7fe00000
+ add.cs r7,r7,1 ; fraction product in r7:r5:r4
+ tst r10,r10
+ bset.ne r4,r4,0 ; put least significant word into sticky bit
+ lsr.f r10,r7,9
+ add_l r12,r12,r11 ; add exponents
+ rsub.eq r8,r8,r9 ; 0x40000000
+ sub r12,r12,r8 ; subtract bias + implicit 1
+ brhs.d r12,r6,.Linf_denorm
+ rsub r10,r10,12
+.Lshift_frac:
+ neg r8,r10
+ asl r6,r4,r10
+ lsr DBL0L,r4,r8
+ add.f 0,r6,r6
+ btst.eq DBL0L,0
+ cmp.eq r4,r4 ; round to nearest / round to even
+ asl r4,r5,r10
+ lsr r5,r5,r8
+ adc.f DBL0L,DBL0L,r4
+ xor.f 0,DBL0H,DBL1H
+ asl r7,r7,r10
+ add_s r12,r12,r5
+ adc DBL0H,r12,r7
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+
+/* We have checked for infinity / NaN input before, and transformed
+ denormalized inputs into normalized inputs. Thus, the worst case
+ exponent overflows are:
+ 1 + 1 - 0x400 == 0xc02 : maximum underflow
+ 0x7fe + 0x7fe - 0x3ff == 0xbfd ; maximum overflow
+ N.B. 0x7e and 0x7f are also values for overflow.
+
+ If (r12 <= -54), we have an underflow to zero. */
+ .balign 4
+.Linf_denorm:
+ brlo r12,0xc0000000,.Linf
+ asr r6,r12,20
+ mov_s r12,0
+ add.f r10,r10,r6
+ brgt r10,0,.Lshift_frac
+ beq_s .Lround_frac
+ add.f r10,r10,32
+.Lshift32_frac:
+ tst r4,r4
+ mov r4,r5
+ bset.ne r4,r4,1
+ mov r5,r7
+ mov r7,0
+ brge r10,1,.Lshift_frac
+ breq r10,0,.Lround_frac
+ add.f r10,r10,32
+ brgt r10,21,.Lshift32_frac
+ b_s .Lret0
+
+.Lround_frac:
+ add.f 0,r4,r4
+ btst.eq r5,0
+ mov_s DBL0L,r5
+ mov_s DBL0H,r7
+ adc.eq.f DBL0L,DBL0L,0
+ j_s.d [blink]
+
+ adc.eq DBL0H,DBL0H,0
+
+.Linf: xor.f DBL1H,DBL1H,DBL0H
+ mov_s DBL0L,0
+ mov_s DBL0H,r9
+ j_s.d [blink]
+ bset.mi DBL0H,DBL0H,31
+ ENDFUNC(__muldf3)
+
+ .balign 4
+.L7ff00000:
+ .long 0x7ff00000
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/mulsf3.S b/gcc-4.9/libgcc/config/arc/ieee-754/mulsf3.S
new file mode 100644
index 000000000..4bd82f49c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/mulsf3.S
@@ -0,0 +1,180 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* XMAC schedule: directly back-to-back multiplies stall; the third
+ instruction after a multiply stalls unless it is also a multiply. */
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ .global __mulsf3
+ FUNC(__mulsf3)
+ .balign 4
+__mulsf3:
+ push_s blink
+ push_s r1
+ bl.d __mulsf3_c
+ push_s r0
+ ld_s r1,[sp,4]
+ st_s r0,[sp,4]
+ bl.d __mulsf3_asm
+ pop_s r0
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ and r12,r0,r1
+ bic.f 0,0x7f800000,r12
+ bne 0f
+ bmsk.f 0,r0,22
+ bmsk.ne.f r1,r1,22
+ jne_s [blink] ; both NaN -> OK
+0: bl abort
+ ENDFUNC(__mulsf3)
+#define __mulsf3 __mulsf3_asm
+#endif /* DEBUG */
+
+ .balign 4
+ .global __mulsf3
+ FUNC(__mulsf3)
+__mulsf3:
+ ld.as r9,[pcl,79]; [pcl,((.L7f800000-.+2)/4)]
+ bmsk r4,r1,22
+ bset r2,r0,23
+ asl_s r2,r2,8
+ bset r3,r4,23
+ mpyhu r6,r2,r3
+ and r11,r0,r9
+ breq r11,0,.Ldenorm_dbl0
+ mpyu r7,r2,r3
+ breq r11,r9,.Linf_nan_dbl0
+ and r12,r1,r9
+ asl.f 0,r6,8
+ breq r12,0,.Ldenorm_dbl1
+.Lpast_denorm:
+ xor_s r0,r0,r1
+.Lpast_denorm_dbl1:
+ add.pl r6,r6,r6
+ bclr.pl r6,r6,23
+ add.pl.f r7,r7,r7
+ ld.as r4,[pcl,64]; [pcl,((.L7fffffff-.+2)/4)]
+ add.cs r6,r6,1
+ lsr.f 0,r6,1
+ breq r12,r9,.Linf_nan_dbl1
+ add_s r12,r12,r11
+ adc.f 0,r7,r4
+ add_s r12,r12, \
+ -0x3f800000
+ adc.f r8,r6,r12
+ bic r0,r0,r4
+ tst.pl r8,r9
+ min r3,r8,r9
+ jpnz.d [blink]
+ add.pnz r0,r0,r3
+; infinity or denormal number
+ add.ne.f r3,r3,r3
+ bpnz .Linfinity
+ asr_s r3,r3,23+1
+ bset r6,r6,23
+ sub_s r3,r3,1
+ neg_s r2,r3
+ brhi r2,24,.Lret_r0 ; right shift shift > 24 -> return +-0
+ lsr r2,r6,r2
+ asl r9,r6,r3
+ lsr.f 0,r2,1
+ tst r7,r7
+ add_s r0,r0,r2
+ bset.ne r9,r9,0
+ adc.f 0,r9,r4
+ j_s.d [blink]
+ add.cs r0,r0,1
+.Linfinity:
+ j_s.d [blink]
+ add_s r0,r0,r9
+
+.Lret_r0: j_s [blink]
+
+ .balign 4
+.Linf_nan_dbl0:
+ sub_s r2,r1,1 ; inf/nan * 0 -> nan; inf * nan -> nan (use |r2| >= inf)
+ bic.f 0,r9,r2
+ xor_s r0,r0,r1
+ bclr_s r1,r1,31
+ xor_s r0,r0,r1
+ jne_s [blink]
+.Lretnan:
+ j_s.d [blink]
+ mov r0,-1
+.Ldenorm_dbl0_inf_nan_dbl1:
+ bmsk.f 0,r0,30
+ beq_s .Lretnan
+ xor_s r0,r0,r1
+.Linf_nan_dbl1:
+ xor_s r1,r1,r0
+ bclr_s r1,r1,31
+ j_s.d [blink]
+ xor_s r0,r0,r1
+
+ .balign 4
+.Ldenorm_dbl0:
+ bclr_s r2,r2,31
+ norm.f r4,r2
+ and r12,r1,r9
+ add_s r2,r2,r2
+ asl r2,r2,r4
+ asl r4,r4,23
+ mpyhu r6,r2,r3
+ breq r12,r9,.Ldenorm_dbl0_inf_nan_dbl1
+ sub.ne.f r12,r12,r4
+ mpyu r7,r2,r3
+ bhi.d .Lpast_denorm
+ asl.f 0,r6,8
+ xor_s r0,r0,r1
+ bmsk r1,r0,30
+ j_s.d [blink]
+ bic_l r0,r0,r1
+
+ .balign 4
+.Ldenorm_dbl1:
+ norm.f r3,r4
+ xor_s r0,r0,r1
+ sub_s r3,r3,7
+ asl r4,r4,r3
+ sub_s r3,r3,1
+ asl_s r3,r3,23
+ mpyhu r6,r2,r4
+ sub.ne.f r11,r11,r3
+ bmsk r8,r0,30
+ mpyu r7,r2,r4
+ bhi.d .Lpast_denorm_dbl1
+ asl.f 0,r6,8
+ j_s.d [blink]
+ bic r0,r0,r8
+
+ .balign 4
+.L7f800000:
+ .long 0x7f800000
+.L7fffffff:
+ .long 0x7fffffff
+ ENDFUNC(__mulsf3)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/orddf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/orddf2.S
new file mode 100644
index 000000000..5fcdf4cf9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/orddf2.S
@@ -0,0 +1,63 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: r0, r1
+ output: c flag
+ clobber: r12, flags
+ For NaNs, bit 19 .. bit 30 must be set. */
+#if 0 /* DEBUG */
+ .global __orddf2
+ .balign 4
+ FUNC(__orddf2)
+__orddf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __unorddf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __orddf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ brne.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jcc [blink]
+ bl abort
+0: jcs [blink]
+ bl abort
+ ENDFUNC(__orddf2)
+#define __orddf2 __orddf2_asm
+#endif /* DEBUG */
+ .global __orddf2
+ .balign 4
+ HIDDEN_FUNC(__orddf2)
+__orddf2:
+ bmsk r12,DBL0H,20
+ add1.f r12,r12,DBL0H /* clear z; set c if NaN. */
+ bmsk r12,DBL1H,20
+ j_s.d [blink]
+ add1.cc.f r12,r12,DBL1H /* clear z; set c if NaN. */
+ ENDFUNC(__orddf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/ordsf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/ordsf2.S
new file mode 100644
index 000000000..de764a164
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/ordsf2.S
@@ -0,0 +1,63 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: r0, r1
+ output: c flag
+ clobber: r12, flags
+ For NaNs, bit 22 .. bit 30 must be set. */
+#if 0 /* DEBUG */
+ .global __ordsf2
+ .balign 4
+ FUNC(__ordsf2)
+__ordsf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __unordsf2_c` push_s r0
+ mov r11,r0` pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __ordsf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ brne.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jcc [blink]
+ bl abort
+0: jcs [blink]
+ bl abort
+ ENDFUNC(__ordsf2)
+#define __ordsf2 __ordsf2_asm
+#endif /* DEBUG */
+ .global __ordsf2
+ .balign 4
+ HIDDEN_FUNC(__ordsf2)
+__ordsf2:
+ bmsk r12,r0,23
+ add1.f r12,r12,r0 /* clear z; set c if NaN. */
+ bmsk r12,r1,23
+ j_s.d [blink]
+ add1.cc.f r12,r12,r1 /* clear z; set c if NaN. */
+ ENDFUNC(__ordsf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/truncdfsf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/truncdfsf2.S
new file mode 100644
index 000000000..87f40e486
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/truncdfsf2.S
@@ -0,0 +1,134 @@
+/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+
+#if 0 /* DEBUG */
+ FUNC(__truncdfsf2)
+ .global __truncdfsf2
+ .balign 4
+__truncdfsf2:
+ push_s blink
+ push_s r0
+ bl.d __truncdfsf2_c
+ push_s r1
+ mov_s r2,r0
+ pop_s r1
+ ld r0,[sp]
+ bl.d __truncdfsf2_asm
+ st r2,[sp]
+ pop_s r1
+ pop_s blink
+ cmp r0,r1
+ jeq_s [blink]
+ and r12,r0,r1
+ bic.f 0,0x7f800000,r12
+ bne 0f
+ bmsk.f 0,r0,22
+ bmsk.ne.f r1,r1,22
+ jne_s [blink] ; both NaN -> OK
+0: bl abort
+ ENDFUNC(__truncdfsf2)
+#define __truncdfsf2 __truncdfsf2_asm
+#endif /* DEBUG */
+
+ .global __truncdfsf2
+ .balign 4
+ FUNC(__truncdfsf2)
+__truncdfsf2:
+ lsr r2,DBL0H,20
+ asl_s DBL0H,DBL0H,12
+ sub r12,r2,0x380
+ bclr.f r3,r12,11
+ brhs r3,0xff,.Lill_exp
+ beq_l .Ldenorm0
+ asl_s r12,r12,23
+ tst DBL0L, \
+ 0x2fffffff /* Check if msb guard bit wants rounding up. */
+ lsr_s DBL0L,DBL0L,28
+ lsr_s DBL0H,DBL0H,8
+ add.ne DBL0L,DBL0L,1
+ add_s DBL0H,DBL0H,DBL0L
+ lsr_s DBL0H,DBL0H
+ btst_s r2,11
+ add_s r0,DBL0H,r12
+ j_s.d [blink]
+ bxor.ne r0,r0,31
+ .balign 4
+.Lill_exp:
+ bbit1 r2,10,.Linf_nan
+ bmsk_s r12,r12,9
+ rsub.f r12,r12,8+0x400-32 ; Go from 9 to 1 guard bit in MSW. */
+ bhs_s .Lzero
+ lsr r3,DBL0L,21
+ rrc DBL0H,DBL0H ; insert leading 1
+ asl.f 0,DBL0L,8 ; check lower 24 guard bits
+ add_s r3,DBL0H,r3
+ add.pnz r3,r3,1 ; assemble fraction with compressed guard bits.
+ lsr r0,r3,r12
+ neg_s r12,r12
+ btst_s r0,1
+ asl.eq.f r3,r3,r12
+ add.ne r0,r0,1
+ btst_s r2,11
+ lsr_s r0,r0
+ j_s.d [blink]
+ bxor.ne r0,r0,31
+.Lzero:
+ lsr_s r2,r2,11
+ j_s.d [blink]
+ asl r0,r2,31
+.Ldenorm0:
+ asl_s r12,r12,20
+ tst DBL0L, \
+ 0x5fffffff /* Check if msb guard bit wants rounding up. */
+ lsr_s DBL0L,DBL0L,29
+ lsr_s DBL0H,DBL0H,9
+ add.ne DBL0L,DBL0L,1
+ bset_s DBL0H,DBL0H,23
+ add_s DBL0H,DBL0H,DBL0L
+ lsr_s DBL0H,DBL0H
+ j_s.d [blink]
+ add_l r0,DBL0H,r12
+
+/* We would generally say that NaNs must have a non-zero high fraction part,
+ but to allow hardware double precision floating point to interoperate
+ with single precision software floating point, we make an exception here.
+ The cost is to replace a tst_s DBL0H with an or.f DBL0L,DBL0L,DBL0H .
+ As we start out unaligned, and there is an odd number of other short insns,
+ we have a choice of letting this cost us a misalign penalty or
+ 4 more bytes (if we align the code). We choose the former here because
+ infinity / NaN is not expected to be prevalent in time-critical code. */
+.Linf_nan:
+ or.f DBL0L,DBL0L,DBL0H
+ mov_s r0,1
+ add.ne r2,r2,1
+ tst r2,0x7ff
+ asl.ne r0,r0,23
+ btst_s r12,11
+ neg r0,r0
+ j_s.d [blink]
+ bxor.eq r0,r0,31
+ ENDFUNC(__truncdfsf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/uneqdf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/uneqdf2.S
new file mode 100644
index 000000000..3b9c7c902
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/uneqdf2.S
@@ -0,0 +1,73 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: DBL0, DBL1
+ output: z flag
+ clobber: r12, flags
+ For NaNs, bit 19.. bit 30 of the high word must be set. */
+#if 0 /* DEBUG */
+ .global __uneqdf2
+ .balign 4
+ FUNC(__uneqdf2)
+__uneqdf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __eqdf2_c` push_s r0
+ push_s r0` ld_s r0, [sp,4]` ld_s r1, [sp,8]` ld_s r2,[sp,12]
+ bl.d __unorddf2_c` ld_s r3,[sp,16]
+ ld.ab r11,[sp,4]` tst r0,r0` mov.ne r11,0
+ pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __uneqdf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ breq.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jne_s [blink]
+ bl abort
+0: jeq_s [blink]
+ bl abort
+ ENDFUNC(__uneqdf2)
+#define __uneqdf2 __uneqdf2_asm
+#endif /* DEBUG */
+ .global __uneqdf2
+ .balign 4
+ HIDDEN_FUNC(__uneqdf2)
+__uneqdf2:
+ cmp_s DBL0H,DBL1H
+ cmp.eq DBL0L,DBL1L
+ jeq_s [blink]
+ or r12,DBL0H,DBL1H
+ or.f 0,DBL0L,DBL1L
+ bclr.eq.f r12,r12,31
+ jeq_s [blink]
+ mov_s r12, \
+ 0x7ff80000
+ bic.f 0,r12,DBL0H
+ j_s.d [blink]
+ bic.ne.f r12,r12,DBL1H
+ ENDFUNC(__uneqdf2)
diff --git a/gcc-4.9/libgcc/config/arc/ieee-754/uneqsf2.S b/gcc-4.9/libgcc/config/arc/ieee-754/uneqsf2.S
new file mode 100644
index 000000000..b89d7494a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/ieee-754/uneqsf2.S
@@ -0,0 +1,69 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "arc-ieee-754.h"
+/* inputs: r0, r1
+ output: z flag
+ clobber: r12, flags
+ For NaNs, bit 22 .. bit 30 must be set. */
+#if 0 /* DEBUG */
+ .global __uneqsf2
+ .balign 4
+ FUNC(__uneqsf2)
+__uneqsf2:
+ st.a r11,[sp,-4]` push_s blink` st.a r10,[sp,-4]` st.a r9,[sp,-4]
+ st.a r8,[sp,-4]` st.a r7,[sp,-4]` st.a r6,[sp,-4]` st.a r5,[sp,-4]
+ st.a r4,[sp,-4]` push_s r3` push_s r2` push_s r1`
+ bl.d __eqsf2_c` push_s r0
+ push_s r0` ld_s r0, [sp,4]
+ bl.d __unordsf2_c` ld_s r1,[sp,8]
+ ld.ab r11,[sp,4]` tst r0,r0` mov.ne r11,0
+ pop_s r0` pop_s r1` pop_s r2` pop_s r3
+ ld.ab r4,[sp,4]` ld.ab r5,[sp,4]` ld.ab r6,[sp,4]`
+ ld.ab r7,[sp,4]` ld.ab r8,[sp,4]` ld.ab r9,[sp,4]
+ bl.d __uneqsf2_asm` ld.ab r10,[sp,4]
+ pop_s blink
+ breq.d r11,0,0f
+ ld.ab r11,[sp,4]
+ jne_s [blink]
+ bl abort
+0: jeq_s [blink]
+ bl abort
+ ENDFUNC(__uneqsf2)
+#define __uneqsf2 __uneqsf2_asm
+#endif /* DEBUG */
+ .global __uneqsf2
+ .balign 4
+ HIDDEN_FUNC(__uneqsf2)
+__uneqsf2:
+ mov_s r12, \
+ 0x7fc00000
+ bic.f 0,r12,r0
+ bic.ne.f r12,r12,r1
+ or r12,r0,r1
+ bmsk.ne.f r12,r12,30
+ j_s.d [blink]
+ cmp.ne r0,r1
+ ENDFUNC(__uneqsf2)
diff --git a/gcc-4.9/libgcc/config/arc/initfini.c b/gcc-4.9/libgcc/config/arc/initfini.c
new file mode 100644
index 000000000..6db084ed3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/initfini.c
@@ -0,0 +1,157 @@
+/* .init/.fini section handling + C++ global constructor/destructor handling.
+ This file is based on crtstuff.c, sol2-crti.asm, sol2-crtn.asm.
+
+ Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Declare a pointer to void function type. */
+typedef void (*func_ptr) (void);
+
+#ifdef CRT_INIT
+
+/* NOTE: In order to be able to support SVR4 shared libraries, we arrange
+ to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
+ __DTOR_END__ } per root executable and also one set of these symbols
+ per shared library. So in any given whole process image, we may have
+ multiple definitions of each of these symbols. In order to prevent
+ these definitions from conflicting with one another, and in order to
+ ensure that the proper lists are used for the initialization/finalization
+ of each individual shared library (respectively), we give these symbols
+ only internal (i.e. `static') linkage, and we also make it a point to
+ refer to only the __CTOR_END__ symbol in crtfini.o and the __DTOR_LIST__
+ symbol in crtinit.o, where they are defined. */
+
+static func_ptr __CTOR_LIST__[1] __attribute__ ((section (".ctors")))
+ = { (func_ptr) (-1) };
+
+static func_ptr __DTOR_LIST__[1] __attribute__ ((section (".dtors")))
+ = { (func_ptr) (-1) };
+
+/* Run all the global destructors on exit from the program. */
+
+/* Some systems place the number of pointers in the first word of the
+ table. On SVR4 however, that word is -1. In all cases, the table is
+ null-terminated. On SVR4, we start from the beginning of the list and
+ invoke each per-compilation-unit destructor routine in order
+ until we find that null.
+
+ Note that this function MUST be static. There will be one of these
+ functions in each root executable and one in each shared library, but
+ although they all have the same code, each one is unique in that it
+ refers to one particular associated `__DTOR_LIST__' which belongs to the
+ same particular root executable or shared library file. */
+
+static void __do_global_dtors (void)
+asm ("__do_global_dtors") __attribute__ ((section (".text")));
+
+static void
+__do_global_dtors (void)
+{
+ func_ptr *p;
+ for (p = __DTOR_LIST__ + 1; *p; p++)
+ (*p) ();
+}
+
+/* .init section start.
+ This must appear at the start of the .init section. */
+
+asm ("\n\
+ .section .init\n\
+ .global init\n\
+ .word 0\n\
+init:\n\
+ st blink,[sp,4]\n\
+ st fp,[sp]\n\
+ mov fp,sp\n\
+ sub sp,sp,16\n\
+");
+
+/* .fini section start.
+ This must appear at the start of the .init section. */
+
+asm ("\n\
+ .section .fini\n\
+ .global fini\n\
+ .word 0\n\
+fini:\n\
+ st blink,[sp,4]\n\
+ st fp,[sp]\n\
+ mov fp,sp\n\
+ sub sp,sp,16\n\
+ bl.nd __do_global_dtors\n\
+");
+
+#endif /* CRT_INIT */
+
+#ifdef CRT_FINI
+
+/* Put a word containing zero at the end of each of our two lists of function
+ addresses. Note that the words defined here go into the .ctors and .dtors
+ sections of the crtend.o file, and since that file is always linked in
+ last, these words naturally end up at the very ends of the two lists
+ contained in these two sections. */
+
+static func_ptr __CTOR_END__[1] __attribute__ ((section (".ctors")))
+ = { (func_ptr) 0 };
+
+static func_ptr __DTOR_END__[1] __attribute__ ((section (".dtors")))
+ = { (func_ptr) 0 };
+
+/* Run all global constructors for the program.
+ Note that they are run in reverse order. */
+
+static void __do_global_ctors (void)
+asm ("__do_global_ctors") __attribute__ ((section (".text")));
+
+static void
+__do_global_ctors (void)
+{
+ func_ptr *p;
+ for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
+ (*p) ();
+}
+
+/* .init section end.
+ This must live at the end of the .init section. */
+
+asm ("\n\
+ .section .init\n\
+ bl.nd __do_global_ctors\n\
+ ld blink,[fp,4]\n\
+ j.d blink\n\
+ ld.a fp,[sp,16]\n\
+");
+
+/* .fini section end.
+ This must live at the end of the .fini section. */
+
+asm ("\n\
+ .section .fini\n\
+ ld blink,[fp,4]\n\
+ j.d blink\n\
+ ld.a fp,[sp,16]\n\
+");
+
+#endif /* CRT_FINI */
diff --git a/gcc-4.9/libgcc/config/arc/lib1funcs.S b/gcc-4.9/libgcc/config/arc/lib1funcs.S
new file mode 100644
index 000000000..65cfcab6b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/lib1funcs.S
@@ -0,0 +1,1418 @@
+; libgcc1 routines for Synopsys DesignWare ARC cpu.
+
+/* Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+ on behalf of Synopsys Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* As a special exception, if you link this library with other files,
+ some of which are compiled with GCC, to produce an executable,
+ this library does not by itself cause the resulting executable
+ to be covered by the GNU General Public License.
+ This exception does not however invalidate any other reasons why
+ the executable file might be covered by the GNU General Public License. */
+
+
+ /* ANSI concatenation macros. */
+
+ #define CONCAT1(a, b) CONCAT2(a, b)
+ #define CONCAT2(a, b) a ## b
+
+ /* Use the right prefix for global labels. */
+
+ #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+#ifndef WORKING_ASSEMBLER
+#define abs_l abs
+#define asl_l asl
+#define mov_l mov
+#endif
+
+#define FUNC(X) .type SYM(X),@function
+#define HIDDEN_FUNC(X) FUNC(X)` .hidden X
+#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
+#define ENDFUNC(X) ENDFUNC0(X)
+
+
+
+#ifdef L_mulsi3
+ .section .text
+ .align 4
+
+ .global SYM(__mulsi3)
+SYM(__mulsi3):
+
+/* This the simple version.
+
+ while (a)
+ {
+ if (a & 1)
+ r += b;
+ a >>= 1;
+ b <<= 1;
+ }
+*/
+
+#if defined (__ARC_MUL64__)
+ FUNC(__mulsi3)
+ mulu64 r0,r1
+ j_s.d [blink]
+ mov_s r0,mlo
+ ENDFUNC(__mulsi3)
+#elif defined (__ARC700__)
+ HIDDEN_FUNC(__mulsi3)
+ mpyu r0,r0,r1
+ nop_s
+ j_s [blink]
+ ENDFUNC(__mulsi3)
+#elif defined (__ARC_NORM__)
+ FUNC(__mulsi3)
+ norm.f r2,r0
+ rsub lp_count,r2,31
+ mov.mi lp_count,32
+ mov_s r2,r0
+ mov_s r0,0
+ lpnz @.Lend ; loop is aligned
+ lsr.f r2,r2
+ add.cs r0,r0,r1
+ add_s r1,r1,r1
+.Lend: j_s [blink]
+ ENDFUNC(__mulsi3)
+#elif !defined (__OPTIMIZE_SIZE__) && !defined(__ARC601__)
+ /* Up to 3.5 times faster than the simpler code below, but larger. */
+ FUNC(__mulsi3)
+ ror.f r2,r0,4
+ mov_s r0,0
+ add3.mi r0,r0,r1
+ asl.f r2,r2,2
+ add2.cs r0,r0,r1
+ jeq_s [blink]
+.Loop:
+ add1.mi r0,r0,r1
+ asl.f r2,r2,2
+ add.cs r0,r0,r1
+ asl_s r1,r1,4
+ ror.f r2,r2,8
+ add3.mi r0,r0,r1
+ asl.f r2,r2,2
+ bne.d .Loop
+ add2.cs r0,r0,r1
+ j_s [blink]
+ ENDFUNC(__mulsi3)
+#elif !defined (__OPTIMIZE_SIZE__) /* __ARC601__ */
+ FUNC(__mulsi3)
+ lsr.f r2,r0
+ mov_s r0,0
+ mov_s r3,0
+ add.cs r0,r0,r1
+.Loop:
+ lsr.f r2,r2
+ add1.cs r0,r0,r1
+ lsr.f r2,r2
+ add2.cs r0,r0,r1
+ lsr.f r2,r2
+ add3.cs r0,r0,r1
+ bne.d .Loop
+ add3 r1,r3,r1
+ j_s [blink]
+ ENDFUNC(__mulsi3)
+#else
+/********************************************************/
+ FUNC(__mulsi3)
+ mov_s r2,0 ; Accumulate result here.
+.Lloop:
+ bbit0 r0,0,@.Ly
+ add_s r2,r2,r1 ; r += b
+.Ly:
+ lsr_s r0,r0 ; a >>= 1
+ asl_s r1,r1 ; b <<= 1
+ brne_s r0,0,@.Lloop
+.Ldone:
+ j_s.d [blink]
+ mov_s r0,r2
+ ENDFUNC(__mulsi3)
+/********************************************************/
+#endif
+
+#endif /* L_mulsi3 */
+
+#ifdef L_umulsidi3
+ .section .text
+ .align 4
+
+ .global SYM(__umulsidi3)
+SYM(__umulsidi3):
+ HIDDEN_FUNC(__umulsidi3)
+/* We need ARC700 /ARC_MUL64 definitions of __umulsidi3 / __umulsi3_highpart
+ in case some code has been compiled without multiply support enabled,
+ but linked with the multiply-support enabled libraries.
+ For ARC601 (i.e. without a barrel shifter), we also use umuldisi3 as our
+ umulsi3_highpart implementation; the use of the latter label doesn't
+ actually benefit ARC601 platforms, but is useful when ARC601 code is linked
+ against other libraries. */
+#if defined (__ARC700__) || defined (__ARC_MUL64__) || defined (__ARC601__)
+ .global SYM(__umulsi3_highpart)
+SYM(__umulsi3_highpart):
+ HIDDEN_FUNC(__umulsi3_highpart)
+#endif
+
+/* This the simple version.
+
+ while (a)
+ {
+ if (a & 1)
+ r += b;
+ a >>= 1;
+ b <<= 1;
+ }
+*/
+#include "ieee-754/arc-ieee-754.h"
+
+#ifdef __ARC700__
+ mov_s r12,DBL0L
+ mpyu DBL0L,r12,DBL0H
+ j_s.d [blink]
+ mpyhu DBL0H,r12,DBL0H
+#elif defined (__ARC_MUL64__)
+/* Likewise for __ARC_MUL64__ */
+ mulu64 r0,r1
+ mov_s DBL0L,mlo
+ j_s.d [blink]
+ mov_s DBL0H,mhi
+#else /* !__ARC700__ && !__ARC_MUL64__ */
+/* Although it might look tempting to extend this to handle muldi3,
+ using mulsi3 twice with 2.25 cycles per 32 bit add is faster
+ than one loop with 3 or four cycles per 32 bit add. */
+ asl.f r12,0 ; Top part of b.
+ mov_s r2,0 ; Accumulate result here.
+ bbit1.d r0,0,@.Ladd
+ mov_s r3,0
+.Llooptst:
+ rlc r12,r12
+ breq r0,0,@.Ldone ; while (a)
+.Lloop:
+ asl.f r1,r1 ; b <<= 1
+ bbit0.d r0,1,@.Llooptst
+ lsr r0,r0 ; a >>= 1
+ rlc r12,r12
+.Ladd:
+ add.f r3,r3,r1 ; r += b
+ brne.d r0,0,@.Lloop ; while (a);
+ adc r2,r2,r12
+.Ldone:
+ mov_s DBL0L,r3
+ j_s.d [blink]
+ mov DBL0H,r2
+#endif /* !__ARC700__*/
+ ENDFUNC(__umulsidi3)
+#if defined (__ARC700__) || defined (__ARC_MUL64__) || defined (__ARC601__)
+ ENDFUNC(__umulsi3_highpart)
+#endif
+#endif /* L_umulsidi3 */
+
+#ifdef L_umulsi3_highpart
+#include "ieee-754/arc-ieee-754.h"
+/* For use without a barrel shifter, and for ARC700 / ARC_MUL64, the
+ mulsidi3 algorithms above look better, so for these, there is an
+ extra label up there. */
+#if !defined (__ARC700__) && !defined (__ARC_MUL64__) && !defined (__ARC601__)
+ .global SYM(__umulsi3_highpart)
+SYM(__umulsi3_highpart):
+ HIDDEN_FUNC(__umulsi3_highpart)
+ mov_s r2,0
+ mov_s r3,32
+.Loop:
+ lsr.f r0,r0
+ add.cs.f r2,r2,r1
+ sub_s r3,r3,1
+ brne.d r0,0,.Loop
+ rrc r2,r2
+ j_s.d [blink]
+/* Make the result register peephole-compatible with mulsidi3. */
+ lsr DBL0H,r2,r3
+ ENDFUNC(__umulsi3_highpart)
+#endif /* !__ARC700__ && !__ARC601__ */
+#endif /* L_umulsi3_highpart */
+
+#ifdef L_divmod_tools
+
+; Utilities used by all routines.
+
+ .section .text
+
+/*
+unsigned long
+udivmodsi4(int modwanted, unsigned long num, unsigned long den)
+{
+ unsigned long bit = 1;
+ unsigned long res = 0;
+
+ while (den < num && bit && !(den & (1L<<31)))
+ {
+ den <<=1;
+ bit <<=1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>=1;
+ den >>=1;
+ }
+ if (modwanted) return num;
+ return res;
+}
+*/
+
+; inputs: r0 = numerator, r1 = denominator
+; outputs: r0 = quotient, r1 = remainder, r2/r3 trashed
+
+ .balign 4
+ .global SYM(__udivmodsi4)
+ FUNC(__udivmodsi4)
+SYM(__udivmodsi4):
+
+#if defined (__ARC700__)
+/* Normalize divisor and divident, and then use the appropriate number of
+ divaw (the number of result bits, or one more) to produce the result.
+ There are some special conditions that need to be tested:
+ - We can only directly normalize unsigned numbers that fit in 31 bit. For
+ the divisor, we test early on that it is not 'negative'.
+ - divaw can't corrrectly process a divident that is larger than the divisor.
+ We handle this be checking that the divident prior to normalization is
+ not larger than the normalized divisor. As we then already know then
+ that the divisor fits 31 bit, this check also makes sure that the
+ divident fits.
+ - ordinary normalization of the divident could make it larger than the
+ normalized divisor, which again would be unsuitable for divaw.
+ Thus, we want to shift left the divident by one less, except that we
+ want to leave it alone if it is already 31 bit. To this end, we
+ double the input to norm with adds.
+ - If the divident has less bits than the divisor, that would leave us
+ with a negative number of divaw to execute. Although we could use a
+ conditional loop to avoid excess divaw, and then the quotient could
+ be extracted correctly as there'd be more than enough zero bits, the
+ remainder would be shifted left too far, requiring a conditional shift
+ right. The cost of that shift and the possible mispredict on the
+ conditional loop cost as much as putting in an early check for a zero
+ result. */
+ bmsk r3,r0,29
+ brne.d r3,r0,.Large_dividend
+ norm.f r2,r1
+ brlo r0,r1,.Lret0
+ norm r3,r0
+ asl_s r1,r1,r2
+ sub_s r3,r3,1
+ asl_l r0,r0,r3 ; not short to keep loop aligned
+ sub lp_count,r2,r3
+ lp .Ldiv_end
+ divaw r0,r0,r1
+.Ldiv_end:sub_s r3,r2,1
+ lsr r1,r0,r2
+ j_s.d [blink]
+ bmsk r0,r0,r3
+
+ .balign 4
+.Large_dividend:
+ bmi .Ltrivial
+ asl_s r1,r1,r2
+ mov_s r3,0
+ sub1.f r4,r0,r1
+ mov.lo r4,r0
+ mov.hs r3,2
+ cmp r4,r1
+ sub.hs r4,r4,r1
+ add.hs r3,r3,1
+ mov.f lp_count,r2
+ lpne .Ldiv_end2
+ divaw r4,r4,r1
+.Ldiv_end2:asl r0,r3,r2
+ lsr r1,r4,r2
+ sub_s r2,r2,1
+ bmsk r4,r4,r2
+ j_s.d [blink]
+ or.ne r0,r0,r4
+
+.Lret0:
+ mov_s r1,r0
+ j_s.d [blink]
+ mov_l r0,0
+ .balign 4
+.Ltrivial:
+ sub.f r1,r0,r1
+ mov.c r1,r0
+ mov_s r0,1
+ j_s.d [blink]
+ mov.c r0,0
+#elif !defined (__OPTIMIZE_SIZE__)
+#ifdef __ARC_NORM__
+ lsr_s r2,r0
+ brhs.d r1,r2,.Lret0_3
+ norm r2,r2
+ norm r3,r1
+ sub_s r3,r3,r2
+ asl_s r1,r1,r3
+ sub1.f 0,r0,r1
+ lsr.cs r1,r1,1
+ sbc r2,r3,0
+ sub1 r0,r0,r1
+ cmp_s r0,r1
+ mov.f lp_count,r2
+#else /* ! __ARC_NORM__ */
+ lsr_s r2,r0
+ brhs.d r1,r2,.Lret0_3
+ mov lp_count,32
+.Lloop1:
+ asl_s r1,r1 ; den <<= 1
+ brls.d r1,r2,@.Lloop1
+ sub lp_count,lp_count,1
+ sub_s r0,r0,r1
+ lsr_s r1,r1
+ cmp_s r0,r1
+ xor.f r2,lp_count,31
+ mov_s lp_count,r2
+#endif /* !__ARC_NORM__ */
+ sub.cc r0,r0,r1
+ mov_s r3,3
+ sbc r3,r3,0
+#ifndef __ARC601__
+ asl_s r3,r3,r2
+ rsub r1,r1,1
+ lpne @.Lloop2_end
+ add1.f r0,r1,r0
+ sub.cc r0,r0,r1
+.Lloop2_end:
+ lsr r1,r0,r2
+#else
+ rsub r1,r1,1
+ lpne @.Lloop2_end
+ asl_s r3,r3
+ add1.f r0,r1,r0
+ sub.cc r0,r0,r1
+.Lloop2_end:
+ lsr_s r1,r0
+ lsr.f lp_count,r2
+ mov.cc r1,r0
+ lpnz 1f
+ lsr_s r1,r1
+ lsr_s r1,r1
+1:
+#endif
+ bmsk r0,r0,r2
+ bclr r0,r0,r2
+ j_s.d [blink]
+ or_s r0,r0,r3
+.Lret0_3:
+#if 0 /* Slightly shorter, but slower. */
+ lp .Loop3_end
+ brhi.d r1,r0,.Loop3_end
+ sub_s r0,r0,r1
+.Loop3_end
+ add_s r1,r1,r0
+ j_s.d [blink]
+ rsub r0,lp_count,32-1
+#else
+ mov_s r4,r1
+ sub.f r1,r0,r1
+ sbc r0,r0,r0
+ sub.cc.f r1,r1,r4
+ sbc r0,r0,0
+ sub.cc.f r1,r1,r4
+ sbc r0,r0,-3
+ j_s.d [blink]
+ add.cs r1,r1,r4
+#endif
+#else /* Arctangent-A5 */
+ breq_s r1,0,@.Ldivmodend
+ mov_s r2,1 ; bit = 1
+ mov_s r3,0 ; res = 0
+.Lloop1:
+ brhs r1,r0,@.Lloop2
+ bbit1 r1,31,@.Lloop2
+ asl_s r1,r1 ; den <<= 1
+ b.d @.Lloop1
+ asl_s r2,r2 ; bit <<= 1
+.Lloop2:
+ brlo r0,r1,@.Lshiftdown
+ sub_s r0,r0,r1 ; num -= den
+ or_s r3,r3,r2 ; res |= bit
+.Lshiftdown:
+ lsr_s r2,r2 ; bit >>= 1
+ lsr_s r1,r1 ; den >>= 1
+ brne_s r2,0,@.Lloop2
+.Ldivmodend:
+ mov_s r1,r0 ; r1 = mod
+ j.d [blink]
+ mov_s r0,r3 ; r0 = res
+/******************************************************/
+#endif
+ ENDFUNC(__udivmodsi4)
+
+#endif
+
+#ifdef L_udivsi3
+ .section .text
+ .align 4
+
+ .global SYM(__udivsi3)
+ FUNC(__udivsi3)
+SYM(__udivsi3):
+ b @SYM(__udivmodsi4)
+ ENDFUNC(__udivsi3)
+#if 0 /* interferes with linux loader */
+ .section .__arc_profile_forward, "a"
+ .long SYM(__udivsi3)
+ .long SYM(__udivmodsi4)
+ .long 65536
+#endif
+
+#endif /* L_udivsi3 */
+
+#ifdef L_divsi3
+ .section .text
+ .align 4
+
+ .global SYM(__divsi3)
+ FUNC(__divsi3)
+
+#ifndef __ARC700__
+SYM(__divsi3):
+ /* A5 / ARC60? */
+ mov r7,blink
+ xor r6,r0,r1
+ abs_s r0,r0
+ bl.d @SYM(__udivmodsi4)
+ abs_s r1,r1
+ tst r6,r6
+ j.d [r7]
+ neg.mi r0,r0
+#else /* !ifndef __ARC700__ */
+ ;; We can use the abs, norm, divaw and mpy instructions for ARC700
+#define MULDIV
+#ifdef MULDIV
+/* This table has been generated by divtab-arc700.c. */
+/* 1/512 .. 1/256, normalized. There is a leading 1 in bit 31.
+ For powers of two, we list unnormalized numbers instead. The values
+ for powers of 2 are loaded, but not used. The value for 1 is actually
+ the first instruction after .Lmuldiv. */
+ .balign 4
+.Ldivtab:
+
+ .long 0x1000000
+ .long 0x80808081
+ .long 0x81020409
+ .long 0x81848DA9
+ .long 0x82082083
+ .long 0x828CBFBF
+ .long 0x83126E98
+ .long 0x83993053
+ .long 0x84210843
+ .long 0x84A9F9C9
+ .long 0x85340854
+ .long 0x85BF3762
+ .long 0x864B8A7E
+ .long 0x86D90545
+ .long 0x8767AB60
+ .long 0x87F78088
+ .long 0x88888889
+ .long 0x891AC73B
+ .long 0x89AE408A
+ .long 0x8A42F871
+ .long 0x8AD8F2FC
+ .long 0x8B70344B
+ .long 0x8C08C08D
+ .long 0x8CA29C05
+ .long 0x8D3DCB09
+ .long 0x8DDA5203
+ .long 0x8E78356E
+ .long 0x8F1779DA
+ .long 0x8FB823EF
+ .long 0x905A3864
+ .long 0x90FDBC0A
+ .long 0x91A2B3C5
+ .long 0x92492493
+ .long 0x92F11385
+ .long 0x939A85C5
+ .long 0x94458095
+ .long 0x94F20950
+ .long 0x95A02569
+ .long 0x964FDA6D
+ .long 0x97012E03
+ .long 0x97B425EE
+ .long 0x9868C80A
+ .long 0x991F1A52
+ .long 0x99D722DB
+ .long 0x9A90E7DA
+ .long 0x9B4C6F9F
+ .long 0x9C09C09D
+ .long 0x9CC8E161
+ .long 0x9D89D89E
+ .long 0x9E4CAD24
+ .long 0x9F1165E8
+ .long 0x9FD809FE
+ .long 0xA0A0A0A1
+ .long 0xA16B312F
+ .long 0xA237C32C
+ .long 0xA3065E40
+ .long 0xA3D70A3E
+ .long 0xA4A9CF1E
+ .long 0xA57EB503
+ .long 0xA655C43A
+ .long 0xA72F053A
+ .long 0xA80A80A9
+ .long 0xA8E83F58
+ .long 0xA9C84A48
+ .long 0xAAAAAAAB
+ .long 0xAB8F69E3
+ .long 0xAC769185
+ .long 0xAD602B59
+ .long 0xAE4C415D
+ .long 0xAF3ADDC7
+ .long 0xB02C0B03
+ .long 0xB11FD3B9
+ .long 0xB21642C9
+ .long 0xB30F6353
+ .long 0xB40B40B5
+ .long 0xB509E68B
+ .long 0xB60B60B7
+ .long 0xB70FBB5B
+ .long 0xB81702E1
+ .long 0xB92143FB
+ .long 0xBA2E8BA3
+ .long 0xBB3EE722
+ .long 0xBC52640C
+ .long 0xBD691048
+ .long 0xBE82FA0C
+ .long 0xBFA02FE9
+ .long 0xC0C0C0C1
+ .long 0xC1E4BBD6
+ .long 0xC30C30C4
+ .long 0xC4372F86
+ .long 0xC565C87C
+ .long 0xC6980C6A
+ .long 0xC7CE0C7D
+ .long 0xC907DA4F
+ .long 0xCA4587E7
+ .long 0xCB8727C1
+ .long 0xCCCCCCCD
+ .long 0xCE168A78
+ .long 0xCF6474A9
+ .long 0xD0B69FCC
+ .long 0xD20D20D3
+ .long 0xD3680D37
+ .long 0xD4C77B04
+ .long 0xD62B80D7
+ .long 0xD79435E6
+ .long 0xD901B204
+ .long 0xDA740DA8
+ .long 0xDBEB61EF
+ .long 0xDD67C8A7
+ .long 0xDEE95C4D
+ .long 0xE070381D
+ .long 0xE1FC780F
+ .long 0xE38E38E4
+ .long 0xE525982B
+ .long 0xE6C2B449
+ .long 0xE865AC7C
+ .long 0xEA0EA0EB
+ .long 0xEBBDB2A6
+ .long 0xED7303B6
+ .long 0xEF2EB720
+ .long 0xF0F0F0F1
+ .long 0xF2B9D649
+ .long 0xF4898D60
+ .long 0xF6603D99
+ .long 0xF83E0F84
+ .long 0xFA232CF3
+ .long 0xFC0FC0FD
+ .long 0xFE03F810
+ .long 0x2000000
+ .long 0x81020409
+ .long 0x82082083
+ .long 0x83126E98
+ .long 0x84210843
+ .long 0x85340854
+ .long 0x864B8A7E
+ .long 0x8767AB60
+ .long 0x88888889
+ .long 0x89AE408A
+ .long 0x8AD8F2FC
+ .long 0x8C08C08D
+ .long 0x8D3DCB09
+ .long 0x8E78356E
+ .long 0x8FB823EF
+ .long 0x90FDBC0A
+ .long 0x92492493
+ .long 0x939A85C5
+ .long 0x94F20950
+ .long 0x964FDA6D
+ .long 0x97B425EE
+ .long 0x991F1A52
+ .long 0x9A90E7DA
+ .long 0x9C09C09D
+ .long 0x9D89D89E
+ .long 0x9F1165E8
+ .long 0xA0A0A0A1
+ .long 0xA237C32C
+ .long 0xA3D70A3E
+ .long 0xA57EB503
+ .long 0xA72F053A
+ .long 0xA8E83F58
+ .long 0xAAAAAAAB
+ .long 0xAC769185
+ .long 0xAE4C415D
+ .long 0xB02C0B03
+ .long 0xB21642C9
+ .long 0xB40B40B5
+ .long 0xB60B60B7
+ .long 0xB81702E1
+ .long 0xBA2E8BA3
+ .long 0xBC52640C
+ .long 0xBE82FA0C
+ .long 0xC0C0C0C1
+ .long 0xC30C30C4
+ .long 0xC565C87C
+ .long 0xC7CE0C7D
+ .long 0xCA4587E7
+ .long 0xCCCCCCCD
+ .long 0xCF6474A9
+ .long 0xD20D20D3
+ .long 0xD4C77B04
+ .long 0xD79435E6
+ .long 0xDA740DA8
+ .long 0xDD67C8A7
+ .long 0xE070381D
+ .long 0xE38E38E4
+ .long 0xE6C2B449
+ .long 0xEA0EA0EB
+ .long 0xED7303B6
+ .long 0xF0F0F0F1
+ .long 0xF4898D60
+ .long 0xF83E0F84
+ .long 0xFC0FC0FD
+ .long 0x4000000
+ .long 0x82082083
+ .long 0x84210843
+ .long 0x864B8A7E
+ .long 0x88888889
+ .long 0x8AD8F2FC
+ .long 0x8D3DCB09
+ .long 0x8FB823EF
+ .long 0x92492493
+ .long 0x94F20950
+ .long 0x97B425EE
+ .long 0x9A90E7DA
+ .long 0x9D89D89E
+ .long 0xA0A0A0A1
+ .long 0xA3D70A3E
+ .long 0xA72F053A
+ .long 0xAAAAAAAB
+ .long 0xAE4C415D
+ .long 0xB21642C9
+ .long 0xB60B60B7
+ .long 0xBA2E8BA3
+ .long 0xBE82FA0C
+ .long 0xC30C30C4
+ .long 0xC7CE0C7D
+ .long 0xCCCCCCCD
+ .long 0xD20D20D3
+ .long 0xD79435E6
+ .long 0xDD67C8A7
+ .long 0xE38E38E4
+ .long 0xEA0EA0EB
+ .long 0xF0F0F0F1
+ .long 0xF83E0F84
+ .long 0x8000000
+ .long 0x84210843
+ .long 0x88888889
+ .long 0x8D3DCB09
+ .long 0x92492493
+ .long 0x97B425EE
+ .long 0x9D89D89E
+ .long 0xA3D70A3E
+ .long 0xAAAAAAAB
+ .long 0xB21642C9
+ .long 0xBA2E8BA3
+ .long 0xC30C30C4
+ .long 0xCCCCCCCD
+ .long 0xD79435E6
+ .long 0xE38E38E4
+ .long 0xF0F0F0F1
+ .long 0x10000000
+ .long 0x88888889
+ .long 0x92492493
+ .long 0x9D89D89E
+ .long 0xAAAAAAAB
+ .long 0xBA2E8BA3
+ .long 0xCCCCCCCD
+ .long 0xE38E38E4
+ .long 0x20000000
+ .long 0x92492493
+ .long 0xAAAAAAAB
+ .long 0xCCCCCCCD
+ .long 0x40000000
+ .long 0xAAAAAAAB
+ .long 0x80000000
+__muldiv:
+ neg r4,r2
+ ld.as r5,[pcl,r4]
+ abs_s r12,r0
+ bic.f 0,r2,r4
+ mpyhu.ne r12,r12,r5
+ norm r3,r2
+ xor.f 0,r0,r1
+ ; write port allocation stall
+ rsub r3,r3,30
+ lsr r0,r12,r3
+ j_s.d [blink]
+ neg.mi r0,r0
+
+ .balign 4
+SYM(__divsi3):
+ norm r3,r1
+ abs_s r2,r1
+ brhs r3,23,__muldiv
+ norm r4,r0
+ abs_l r12,r0
+ brhs r4,r3,.Lonebit
+ asl_s r2,r2,r3
+ asl r12,r12,r4
+ sub lp_count,r3,r4
+ sub.f r12,r12,r2
+ brge.d r12,r2,.Lsbit
+ sub r4,r3,r4
+ add.lo r12,r12,r2
+ lp .Ldivend
+.Ldivstart:divaw r12,r12,r2
+.Ldivend:xor_s r1,r1,r0
+ sub r0,r4,1
+ bmsk r0,r12,r0
+ bset.hs r0,r0,r4
+ tst_s r1,r1
+ j_s.d [blink]
+ neg.mi r0,r0
+.Lonebit:
+ xor_s r1,r1,r0
+ asr_s r1,r1,31
+ sub1.f 0,r12,r2 ; special case: -2**(n+1) / 2**n
+ or r0,r1,1
+ add.eq r0,r0,r0
+ cmp_s r12,r2
+ j_s.d [blink]
+ mov.lo r0,0
+.Lsbit:
+ ; Need to handle special cases involving negative powers of two:
+ ; r12,r2 are normalized dividend / divisor;
+ ; divide anything by 0x80000000, or divide 0x80000000 by 0x40000000
+ add_s r12,r12,r2
+ xor_s r1,r1,r0
+ rsub r4,r4,-1
+ ror r0,r12,r4
+ tst_s r2,r2
+ bmsk r0,r0,r3
+ add.pl r0,r0,r0
+ tst_s r1,r1
+ j_s.d [blink]
+ neg.mi r0,r0
+#else /* !MULDIV */
+/* This version requires that divaw works with a divisor of 0x80000000U */
+ abs_s r2,r1
+ norm r4,r0
+ neg_s r3,r2
+ norm r3,r3
+ abs_s r12,r0
+ brhs r4,r3,.Lonebit
+ asl_s r2,r2,r3
+ asl r12,r12,r4
+ sub lp_count,r3,r4
+ cmp_s r12,r2
+ sub.hs r12,r12,r2
+ lp .Ldivend
+.Ldivstart:divaw r12,r12,r2
+.Ldivend:xor_s r1,r1,r0
+ sub_s r0,r3,1
+ bmsk r0,r12,r0
+ bset.hs r0,r0,r3
+ tst_s r1,r1
+ j_s.d [blink]
+ negmi r0,r0
+.Lonebit:
+ xor_s r1,r1,r0
+ asr_s r1,r1,31
+ cmp_s r12,r2
+ mov_s r0,0
+ j_s.d [blink]
+ orhs r0,r1,1
+#endif /* MULDIV */
+
+#endif /* ifndef __ARC700__ */
+ ENDFUNC(__divsi3)
+
+
+#endif /* L_divsi3 */
+
+#ifdef L_umodsi3
+ .section .text
+ .align 4
+
+ .global SYM(__umodsi3)
+ FUNC(__umodsi3)
+SYM(__umodsi3):
+ mov r7,blink
+ bl.nd @SYM(__udivmodsi4)
+ j.d [r7]
+ mov r0,r1
+ ENDFUNC(__umodsi3)
+#if 0 /* interferes with linux loader */
+ .section .__arc_profile_forward, "a"
+ .long SYM(__umodsi3)
+ .long SYM(__udivmodsi4)
+ .long 65536
+#endif
+
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+ .section .text
+ .align 4
+
+ .global SYM (__modsi3)
+ FUNC(__modsi3)
+SYM(__modsi3):
+#ifndef __ARC700__
+ /* A5 / ARC60? */
+ mov_s r12,blink
+ mov_s r6,r0
+ abs_s r0,r0
+ bl.d @SYM(__udivmodsi4)
+ abs_s r1,r1
+ tst r6,r6
+ neg_s r0,r1
+ j_s.d [r12]
+ mov.pl r0,r1
+#else /* __ARC700__ */
+ abs_s r2,r1
+ norm.f r4,r0
+ neg r5,r2
+ norm r3,r5
+ abs_l r12,r0
+ brhs r4,r3,.Lonebit
+ asl_s r2,r2,r3
+ asl r12,r12,r4
+ sub lp_count,r3,r4
+ cmp_s r12,r2
+ sub.hs r12,r12,r2
+ tst_s r0,r0
+ lp .Ldivend
+.Ldivstart:divaw r12,r12,r2
+.Ldivend:
+ lsr r0,r12,r3
+ j_s.d [blink]
+ neg.mi r0,r0
+ .balign 4
+.Lonebit:neg.pl r5,r5
+ cmp_s r12,r2
+ j_s.d [blink]
+ sub.hs r0,r0,r5
+#endif /* __ARC700__ */
+ ENDFUNC(__modsi3)
+
+#endif /* L_modsi3 */
+
+#ifdef L_clzsi2
+ .section .text
+ .align 4
+ .global SYM (__clzsi2)
+SYM(__clzsi2):
+#ifdef __ARC_NORM__
+ HIDDEN_FUNC(__clzsi2)
+ norm.f r0,r0
+ mov.n r0,0
+ j_s.d [blink]
+ add.pl r0,r0,1
+ ENDFUNC(__clzsi2)
+#elif defined (__ARC601__)
+ FUNC(__clzsi2)
+ mov lp_count,10
+ mov_l r1,0
+ bset r2,r1,29
+ lp .Loop_end
+ brhs r0,r2,.Loop_end
+ add3 r0,r1,r0
+.Loop_end:
+ asl.f 0,r0
+ sub2 r0,lp_count,lp_count
+ sub.cs.f r0,r0,1
+ add r0,r0,31
+ j_s.d [blink]
+ add.pl r0,r0,1
+ ENDFUNC(__clzsi2)
+#else
+ FUNC(__clzsi2)
+ asl.f 0,r0,2
+ mov r1,-1
+.Lcheck:
+ bbit1.d r0,31,.Ldone
+ asl.pl r0,r0,3
+ bcs.d .Ldone_1
+ add_s r1,r1,3
+ bpnz.d .Lcheck
+ asl.f 0,r0,2
+ mov_s r0,32
+ j_s.d [blink]
+ mov.ne r0,r1
+.Ldone:
+ j_s.d [blink]
+ add_s r0,r1,1
+.Ldone_1:
+ j_s.d [blink]
+ sub_s r0,r1,1
+ ENDFUNC(__clzsi2)
+#endif
+#endif /* L_clzsi2 */
+ .section .text
+
+
+;;; MILLICODE THUNK LIB ;***************
+
+;;; .macro push_regs from, to, offset
+;;; st_s "\from", [sp, \offset]
+;;; .if \to-\from
+;;; push_regs "(\from+1)", \to, "(\offset+4)"
+;;; .endif
+;;; .endm
+;;; push_regs 13, 18, 0
+;;;
+
+;;;; .macro sum from, to, three
+;;;; .long \from
+;;;; .long \three
+;;;; .local regno
+;;;; .set regno, \from+1
+;;;; .set shift, 32
+;;;; .set shift, shift - 1
+;;;; # st_s %shift @3 lsl #shift
+;;;; .if \to-\from
+;;;; sum "(\from+1)", \to, "(\three)"
+;;;; .endif
+;;;; .endm
+;;;;
+;;;; SUM 0,5, 9
+;;;;
+; .altmacro
+;; .macro push_regs from=0, to=3, offset
+;; st_s r\from, [sp, \offset]
+;; .if \to-\from
+;; push_regs "\from+1 ",\to,"(\offset+4)"
+;; .endif
+;; .endm
+;;
+;; .macro expand_to_push from=13, to
+;; ; .section .text
+;; ; .align 4
+;; ; .global st_
+;; ; .type foo,
+;; st_13_to_25:
+;; ; push_regs \from, \to, 0
+;; push_regs 0,3 ;
+;; .endm
+;;
+;; expand_to_push 13,18
+;;
+;#endif
+
+#ifdef L_millicodethunk_st
+ .section .text
+ .align 4
+ .global SYM(__st_r13_to_r15)
+ .global SYM(__st_r13_to_r16)
+ .global SYM(__st_r13_to_r17)
+ .global SYM(__st_r13_to_r18)
+ .global SYM(__st_r13_to_r19)
+ .global SYM(__st_r13_to_r20)
+ .global SYM(__st_r13_to_r21)
+ .global SYM(__st_r13_to_r22)
+ .global SYM(__st_r13_to_r23)
+ .global SYM(__st_r13_to_r24)
+ .global SYM(__st_r13_to_r25)
+ HIDDEN_FUNC(__st_r13_to_r15)
+ HIDDEN_FUNC(__st_r13_to_r16)
+ HIDDEN_FUNC(__st_r13_to_r17)
+ HIDDEN_FUNC(__st_r13_to_r18)
+ HIDDEN_FUNC(__st_r13_to_r19)
+ HIDDEN_FUNC(__st_r13_to_r20)
+ HIDDEN_FUNC(__st_r13_to_r21)
+ HIDDEN_FUNC(__st_r13_to_r22)
+ HIDDEN_FUNC(__st_r13_to_r23)
+ HIDDEN_FUNC(__st_r13_to_r24)
+ HIDDEN_FUNC(__st_r13_to_r25)
+ .align 4
+SYM(__st_r13_to_r25):
+ st r25, [sp,48]
+SYM(__st_r13_to_r24):
+ st r24, [sp,44]
+SYM(__st_r13_to_r23):
+ st r23, [sp,40]
+SYM(__st_r13_to_r22):
+ st r22, [sp,36]
+SYM(__st_r13_to_r21):
+ st r21, [sp,32]
+SYM(__st_r13_to_r20):
+ st r20, [sp,28]
+SYM(__st_r13_to_r19):
+ st r19, [sp,24]
+SYM(__st_r13_to_r18):
+ st r18, [sp,20]
+SYM(__st_r13_to_r17):
+ st r17, [sp,16]
+SYM(__st_r13_to_r16):
+ st r16, [sp,12]
+SYM(__st_r13_to_r15):
+#ifdef __ARC700__
+ st r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
+#else
+ st_s r15, [sp,8]
+#endif
+ st_s r14, [sp,4]
+ j_s.d [%blink]
+ st_s r13, [sp,0]
+ ENDFUNC(__st_r13_to_r15)
+ ENDFUNC(__st_r13_to_r16)
+ ENDFUNC(__st_r13_to_r17)
+ ENDFUNC(__st_r13_to_r18)
+ ENDFUNC(__st_r13_to_r19)
+ ENDFUNC(__st_r13_to_r20)
+ ENDFUNC(__st_r13_to_r21)
+ ENDFUNC(__st_r13_to_r22)
+ ENDFUNC(__st_r13_to_r23)
+ ENDFUNC(__st_r13_to_r24)
+ ENDFUNC(__st_r13_to_r25)
+#endif /* L_millicodethunk_st */
+
+
+#ifdef L_millicodethunk_ld
+ .section .text
+ .align 4
+; ==================================
+; the loads
+
+ .global SYM(__ld_r13_to_r15)
+ .global SYM(__ld_r13_to_r16)
+ .global SYM(__ld_r13_to_r17)
+ .global SYM(__ld_r13_to_r18)
+ .global SYM(__ld_r13_to_r19)
+ .global SYM(__ld_r13_to_r20)
+ .global SYM(__ld_r13_to_r21)
+ .global SYM(__ld_r13_to_r22)
+ .global SYM(__ld_r13_to_r23)
+ .global SYM(__ld_r13_to_r24)
+ .global SYM(__ld_r13_to_r25)
+ HIDDEN_FUNC(__ld_r13_to_r15)
+ HIDDEN_FUNC(__ld_r13_to_r16)
+ HIDDEN_FUNC(__ld_r13_to_r17)
+ HIDDEN_FUNC(__ld_r13_to_r18)
+ HIDDEN_FUNC(__ld_r13_to_r19)
+ HIDDEN_FUNC(__ld_r13_to_r20)
+ HIDDEN_FUNC(__ld_r13_to_r21)
+ HIDDEN_FUNC(__ld_r13_to_r22)
+ HIDDEN_FUNC(__ld_r13_to_r23)
+ HIDDEN_FUNC(__ld_r13_to_r24)
+ HIDDEN_FUNC(__ld_r13_to_r25)
+SYM(__ld_r13_to_r25):
+ ld r25, [sp,48]
+SYM(__ld_r13_to_r24):
+ ld r24, [sp,44]
+SYM(__ld_r13_to_r23):
+ ld r23, [sp,40]
+SYM(__ld_r13_to_r22):
+ ld r22, [sp,36]
+SYM(__ld_r13_to_r21):
+ ld r21, [sp,32]
+SYM(__ld_r13_to_r20):
+ ld r20, [sp,28]
+SYM(__ld_r13_to_r19):
+ ld r19, [sp,24]
+SYM(__ld_r13_to_r18):
+ ld r18, [sp,20]
+SYM(__ld_r13_to_r17):
+ ld r17, [sp,16]
+SYM(__ld_r13_to_r16):
+ ld r16, [sp,12]
+SYM(__ld_r13_to_r15):
+#ifdef __ARC700__
+ ld r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
+#else
+ ld_s r15, [sp,8]
+#endif
+ ld_s r14, [sp,4]
+ j_s.d [%blink]
+ ld_s r13, [sp,0]
+ ENDFUNC(__ld_r13_to_r15)
+ ENDFUNC(__ld_r13_to_r16)
+ ENDFUNC(__ld_r13_to_r17)
+ ENDFUNC(__ld_r13_to_r18)
+ ENDFUNC(__ld_r13_to_r19)
+ ENDFUNC(__ld_r13_to_r20)
+ ENDFUNC(__ld_r13_to_r21)
+ ENDFUNC(__ld_r13_to_r22)
+ ENDFUNC(__ld_r13_to_r23)
+ ENDFUNC(__ld_r13_to_r24)
+ ENDFUNC(__ld_r13_to_r25)
+
+#endif /* L_millicodethunk_ld */
+#ifdef L_millicodethunk_ret
+ .global SYM(__ld_r13_to_r14_ret)
+ .global SYM(__ld_r13_to_r15_ret)
+ .global SYM(__ld_r13_to_r16_ret)
+ .global SYM(__ld_r13_to_r17_ret)
+ .global SYM(__ld_r13_to_r18_ret)
+ .global SYM(__ld_r13_to_r19_ret)
+ .global SYM(__ld_r13_to_r20_ret)
+ .global SYM(__ld_r13_to_r21_ret)
+ .global SYM(__ld_r13_to_r22_ret)
+ .global SYM(__ld_r13_to_r23_ret)
+ .global SYM(__ld_r13_to_r24_ret)
+ .global SYM(__ld_r13_to_r25_ret)
+ HIDDEN_FUNC(__ld_r13_to_r14_ret)
+ HIDDEN_FUNC(__ld_r13_to_r15_ret)
+ HIDDEN_FUNC(__ld_r13_to_r16_ret)
+ HIDDEN_FUNC(__ld_r13_to_r17_ret)
+ HIDDEN_FUNC(__ld_r13_to_r18_ret)
+ HIDDEN_FUNC(__ld_r13_to_r19_ret)
+ HIDDEN_FUNC(__ld_r13_to_r20_ret)
+ HIDDEN_FUNC(__ld_r13_to_r21_ret)
+ HIDDEN_FUNC(__ld_r13_to_r22_ret)
+ HIDDEN_FUNC(__ld_r13_to_r23_ret)
+ HIDDEN_FUNC(__ld_r13_to_r24_ret)
+ HIDDEN_FUNC(__ld_r13_to_r25_ret)
+ .section .text
+ .align 4
+SYM(__ld_r13_to_r25_ret):
+ ld r25, [sp,48]
+SYM(__ld_r13_to_r24_ret):
+ ld r24, [sp,44]
+SYM(__ld_r13_to_r23_ret):
+ ld r23, [sp,40]
+SYM(__ld_r13_to_r22_ret):
+ ld r22, [sp,36]
+SYM(__ld_r13_to_r21_ret):
+ ld r21, [sp,32]
+SYM(__ld_r13_to_r20_ret):
+ ld r20, [sp,28]
+SYM(__ld_r13_to_r19_ret):
+ ld r19, [sp,24]
+SYM(__ld_r13_to_r18_ret):
+ ld r18, [sp,20]
+SYM(__ld_r13_to_r17_ret):
+ ld r17, [sp,16]
+SYM(__ld_r13_to_r16_ret):
+ ld r16, [sp,12]
+SYM(__ld_r13_to_r15_ret):
+ ld r15, [sp,8]
+SYM(__ld_r13_to_r14_ret):
+ ld blink,[sp,r12]
+ ld_s r14, [sp,4]
+ ld.ab r13, [sp,r12]
+ j_s.d [%blink]
+ add_s sp,sp,4
+ ENDFUNC(__ld_r13_to_r14_ret)
+ ENDFUNC(__ld_r13_to_r15_ret)
+ ENDFUNC(__ld_r13_to_r16_ret)
+ ENDFUNC(__ld_r13_to_r17_ret)
+ ENDFUNC(__ld_r13_to_r18_ret)
+ ENDFUNC(__ld_r13_to_r19_ret)
+ ENDFUNC(__ld_r13_to_r20_ret)
+ ENDFUNC(__ld_r13_to_r21_ret)
+ ENDFUNC(__ld_r13_to_r22_ret)
+ ENDFUNC(__ld_r13_to_r23_ret)
+ ENDFUNC(__ld_r13_to_r24_ret)
+ ENDFUNC(__ld_r13_to_r25_ret)
+
+#endif /* L_millicodethunk_ret */
+
+#ifdef L_adddf3
+#ifdef __ARC_NORM__
+#include "ieee-754/adddf3.S"
+#endif
+#endif
+
+#ifdef L_muldf3
+#ifdef __ARC700__
+#include "ieee-754/muldf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
+#include "ieee-754/arc600-mul64/muldf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
+#include "ieee-754/arc600-dsp/muldf3.S"
+#endif
+#endif
+
+#ifdef L_addsf3
+#ifdef __ARC_NORM__
+#include "ieee-754/addsf3.S"
+#endif
+#endif
+
+#ifdef L_mulsf3
+#ifdef __ARC700__
+#include "ieee-754/mulsf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
+#include "ieee-754/arc600-mul64/mulsf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
+#include "ieee-754/arc600-dsp/mulsf3.S"
+#elif defined (__ARC_NORM__)
+#include "ieee-754/arc600/mulsf3.S"
+#endif
+#endif
+
+#ifdef L_divdf3
+#ifdef __ARC700__
+#include "ieee-754/divdf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
+#include "ieee-754/arc600-mul64/divdf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
+#include "ieee-754/arc600-dsp/divdf3.S"
+#endif
+#endif
+
+#ifdef L_divsf3
+#ifdef __ARC700__
+#include "ieee-754/divsf3-stdmul.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
+#include "ieee-754/arc600-mul64/divsf3.S"
+#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
+#include "ieee-754/arc600-dsp/divsf3.S"
+#elif defined (__ARC_NORM__)
+#include "ieee-754/arc600/divsf3.S"
+#endif
+#endif
+
+#ifdef L_extendsfdf2
+#ifdef __ARC_NORM__
+#include "ieee-754/extendsfdf2.S"
+#endif
+#endif
+
+#ifdef L_truncdfsf2
+#ifdef __ARC_NORM__
+#include "ieee-754/truncdfsf2.S"
+#endif
+#endif
+
+#ifdef L_floatsidf
+#ifdef __ARC_NORM__
+#include "ieee-754/floatsidf.S"
+#endif
+#endif
+
+#ifdef L_floatsisf
+#ifdef __ARC_NORM__
+#include "ieee-754/floatsisf.S"
+#endif
+#endif
+
+#ifdef L_floatunsidf
+#ifdef __ARC_NORM__
+#include "ieee-754/floatunsidf.S"
+#endif
+#endif
+
+#ifdef L_fixdfsi
+#ifdef __ARC_NORM__
+#include "ieee-754/fixdfsi.S"
+#endif
+#endif
+
+#ifdef L_fixsfsi
+#ifdef __ARC_NORM__
+#include "ieee-754/fixsfsi.S"
+#endif
+#endif
+
+#ifdef L_fixunsdfsi
+#ifdef __ARC_NORM__
+#include "ieee-754/fixunsdfsi.S"
+#endif
+#endif
+
+#ifdef L_eqdf2
+#ifdef __ARC_NORM__
+#include "ieee-754/eqdf2.S"
+#endif
+#endif
+
+#ifdef L_eqsf2
+#ifdef __ARC_NORM__
+#include "ieee-754/eqsf2.S"
+#endif
+#endif
+
+#ifdef L_gtdf2
+#ifdef __ARC_NORM__
+#include "ieee-754/gtdf2.S"
+#endif
+#endif
+
+#ifdef L_gtsf2
+#ifdef __ARC_NORM__
+#include "ieee-754/gtsf2.S"
+#endif
+#endif
+
+#ifdef L_gedf2
+#ifdef __ARC_NORM__
+#include "ieee-754/gedf2.S"
+#endif
+#endif
+
+#ifdef L_gesf2
+#ifdef __ARC_NORM__
+#include "ieee-754/gesf2.S"
+#endif
+#endif
+
+#ifdef L_uneqdf2
+#ifdef __ARC_NORM__
+#include "ieee-754/uneqdf2.S"
+#endif
+#endif
+
+#ifdef L_uneqsf2
+#ifdef __ARC_NORM__
+#include "ieee-754/uneqsf2.S"
+#endif
+#endif
+
+#ifdef L_orddf2
+#ifdef __ARC_NORM__
+#include "ieee-754/orddf2.S"
+#endif
+#endif
+
+#ifdef L_ordsf2
+#ifdef __ARC_NORM__
+#include "ieee-754/ordsf2.S"
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/arc/libgcc-excl.ver b/gcc-4.9/libgcc/config/arc/libgcc-excl.ver
new file mode 100644
index 000000000..b78ec672c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/libgcc-excl.ver
@@ -0,0 +1,43 @@
+# Exclude libgcc.so symbols for the Synopsys DesignWare ARC CPU.
+
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+# on behalf of Synopsys Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>. */
+
+# Exclude various symbols which should not be visible in libgcc.so for ARC.
+# Floating point comparisons use a special lightweight ABI which is not
+# compatible with calls via a plt. Moreover, the code is so compact that
+# it is better to include a separate copy in each dso.
+%exclude {
+ __eqsf2
+ __eqdf2
+ __gtsf2
+ __gtdf2
+ __gesf2
+ __gedf2
+ __uneqsf2
+ __uneqdf2
+ __ordsf2
+ __orddf2
+}
diff --git a/gcc-4.9/libgcc/config/arc/t-arc b/gcc-4.9/libgcc/config/arc/t-arc
new file mode 100644
index 000000000..4d258437e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/t-arc
@@ -0,0 +1,100 @@
+# GCC Makefile fragment for Synopsys DesignWare ARC
+
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+# on behalf of Synopsys Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+
+# You should have received a copy of the GNU General Public License along
+# with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = arc/lib1funcs.S
+LIB1ASMFUNCS = _mulsi3 _umulsidi3 _umulsi3_highpart \
+ _udivsi3 _divsi3 _umodsi3 _modsi3 \
+ _divmod_tools _clzsi2 \
+ _millicodethunk_st _millicodethunk_ld _millicodethunk_ret \
+ _adddf3 _muldf3 _addsf3 _mulsf3 _divsf3 _divdf3 _truncdfsf2 _extendsfdf2 \
+ _eqdf2 _eqsf2 _gedf2 _gesf2 _gtdf2 _gtsf2 _uneqdf2 _uneqsf2 _ordsf2 _orddf2 \
+ _fixdfsi _fixsfsi _floatsidf _floatsisf _fixunsdfsi _floatunsidf
+
+#LIBGCC2_CFLAGS = -g1 -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS)
+
+# For floating-point emulation, we mostly use hand-coded assembly.
+# We use fp-bit.c for debugging purposes, and some parts of it
+# as a fallback for hardware configurations for which the hand-coded
+# assembly support is incomplete, i.e., where there is no NORM and/or no
+# supported multiply instruction. Using floating point on such a
+# configuration is generally inadvisable, but we got to provide support
+# somehow so that we can run the testsuites.
+# fp-hack.h / dp-hack.h take care of slecting the parts that are needed,
+# and (for debugging) of renaming functions so that they can be
+# used in an asm wrapper.
+
+LIB2ADD = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/fp-bit.c
+ echo '#ifndef __big_endian__' > dp-bit.c
+ echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c
+ echo '#endif' >> dp-bit.c
+ echo '#include "fp-bit.h"' >> dp-bit.c
+ echo '#include "config/arc/dp-hack.h"' >> dp-bit.c
+ grep -v 'include.*fp-bit.h' $(srcdir)/fp-bit.c >> dp-bit.c
+
+fp-bit.c: $(srcdir)/fp-bit.c
+ echo '#define FLOAT' > fp-bit.c
+ echo '#ifndef __big_endian__' >> fp-bit.c
+ echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c
+ echo '#endif' >> fp-bit.c
+ echo '#include "config/arc/fp-hack.h"' >> fp-bit.c
+ cat $(srcdir)/fp-bit.c >> fp-bit.c
+
+# .init/.fini section routines
+
+crtg.o: $(srcdir)/config/arc/crtg.S
+ $(crt_compile) -c -x assembler-with-cpp $<
+
+crtgend.o: $(srcdir)/config/arc/crtgend.S
+ $(crt_compile) -c -x assembler-with-cpp $<
+
+mcount.o: $(srcdir)/config/arc/gmon/mcount.c
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $< \
+ -fcall-saved-r0 -fcall-saved-r1 -fcall-saved-r2 -fcall-saved-r3 \
+ -fcall-saved-r4 -fcall-saved-r5 -fcall-saved-r6 -fcall-saved-r7 \
+ -fomit-frame-pointer
+
+gmon.o: $(srcdir)/config/arc/gmon/gmon.c
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -mno-sdata -c $< \
+ -fno-strict-aliasing \
+ -Wno-extra # suppress inane warning about missing initializer.
+ # Adding initializers for the remaining elements of gmonparam would
+ # make the code more brittle.
+
+prof-freq-stub.o: $(srcdir)/config/arc/gmon/prof-freq-stub.S
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $<
+
+prof-freq.o: $(srcdir)/config/arc/gmon/prof-freq.c
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $<
+
+dcache_linesz.o: $(srcdir)/config/arc/gmon/dcache_linesz.S
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $<
+
+profil.o: $(srcdir)/config/arc/gmon/profil.S
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $<
+
+profil-uclibc.o: $(srcdir)/config/arc/gmon/profil-uclibc.c
+ $(gcc_compile) -isystem $(srcdir)/config/arc/gmon -c $<
+
+libgmon.a: mcount.o gmon.o dcache_linesz.o $(PROFILE_OSDEP)
+ $(AR_CREATE_FOR_TARGET) $@ $^
diff --git a/gcc-4.9/libgcc/config/arc/t-arc-newlib b/gcc-4.9/libgcc/config/arc/t-arc-newlib
new file mode 100644
index 000000000..87c948828
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/t-arc-newlib
@@ -0,0 +1,22 @@
+# GCC Makefile fragment for the Synopsys DesignWare ARC CPU with newlib.
+
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+# on behalf of Synopsys Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+
+# You should have received a copy of the GNU General Public License along
+# with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+PROFILE_OSDEP = prof-freq-stub.o profil.o
diff --git a/gcc-4.9/libgcc/config/arc/t-arc700-uClibc b/gcc-4.9/libgcc/config/arc/t-arc700-uClibc
new file mode 100644
index 000000000..bac08d3a6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arc/t-arc700-uClibc
@@ -0,0 +1,40 @@
+# GCC Makefile fragment for the Synopsys DesignWare ARC700 CPU with uClibc.
+
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+# Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
+# on behalf of Synopsys Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>. */
+
+CRTSTUFF_T_CFLAGS += -mno-sdata
+
+# Compile crtbeginS.o and crtendS.o with pic.
+CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -mA7 -fPIC
+
+# Compile libgcc2.a with pic.
+TARGET_LIBGCC2_CFLAGS = -mA7 -fPIC
+
+PROFILE_OSDEP = prof-freq.o
+
+# Override t-slibgcc-elf-ver to hide some lib1func
+# routines which should not be called via PLT.
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/arc/libgcc-excl.ver
diff --git a/gcc-4.9/libgcc/config/arm/bpabi-lib.h b/gcc-4.9/libgcc/config/arm/bpabi-lib.h
new file mode 100644
index 000000000..193cc5604
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/bpabi-lib.h
@@ -0,0 +1,81 @@
+/* Configuration file for ARM BPABI targets, library renames.
+ Copyright (C) 2010-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery, LLC
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Make __aeabi_AEABI_NAME an alias for __GCC_NAME. */
+#define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) \
+ typeof (__##GCC_NAME) __aeabi_##AEABI_NAME \
+ __attribute__((alias ("__" #GCC_NAME)));
+
+/* Give some libgcc functions an additional __aeabi name. */
+#ifdef L_muldi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, lmul)
+#endif
+#ifdef L_muldi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, lmul)
+#endif
+#ifdef L_fixdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfdi, d2lz) \
+ extern DWtype __fixdfdi (DFtype) __attribute__((pcs("aapcs"))); \
+ extern UDWtype __fixunsdfdi (DFtype) __asm__("__aeabi_d2ulz") __attribute__((pcs("aapcs")));
+#endif
+#ifdef L_fixunsdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfdi, d2ulz) \
+ extern UDWtype __fixunsdfdi (DFtype) __attribute__((pcs("aapcs")));
+#endif
+#ifdef L_fixsfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, f2lz) \
+ extern DWtype __fixsfdi (SFtype) __attribute__((pcs("aapcs"))); \
+ extern UDWtype __fixunssfdi (SFtype) __asm__("__aeabi_f2ulz") __attribute__((pcs("aapcs")));
+#endif
+#ifdef L_fixunssfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, f2ulz) \
+ extern UDWtype __fixunssfdi (SFtype) __attribute__((pcs("aapcs")));
+#endif
+#ifdef L_floatdidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdidf, l2d)
+#endif
+#ifdef L_floatdisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, l2f)
+#endif
+
+/* These renames are needed on ARMv6M. Other targets get them from
+ assembly routines. */
+#ifdef L_fixunsdfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfsi, d2uiz)
+#endif
+#ifdef L_fixunssfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfsi, f2uiz)
+#endif
+#ifdef L_floatundidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatundidf, ul2d)
+#endif
+#ifdef L_floatundisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatundisf, ul2f)
+#endif
+
+/* For ARM bpabi, we only want to use a "__gnu_" prefix for the fixed-point
+ helper functions - not everything in libgcc - in the interests of
+ maintaining backward compatibility. */
+#define LIBGCC2_FIXEDBIT_GNU_PREFIX
+
+#if (!defined(__ARM_ARCH_EXT_IDIV__))
+# define TARGET_HAS_NO_HW_DIVIDE
+#endif
diff --git a/gcc-4.9/libgcc/config/arm/bpabi-v6m.S b/gcc-4.9/libgcc/config/arm/bpabi-v6m.S
new file mode 100644
index 000000000..0bf2e55ac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/bpabi-v6m.S
@@ -0,0 +1,318 @@
+/* Miscellaneous BPABI functions. ARMv6M implementation
+
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __ARM_EABI__
+/* Some attributes that are common to all routines in this file. */
+ /* Tag_ABI_align_needed: This code does not require 8-byte
+ alignment from the caller. */
+ /* .eabi_attribute 24, 0 -- default setting. */
+ /* Tag_ABI_align_preserved: This code preserves 8-byte
+ alignment in any callee. */
+ .eabi_attribute 25, 1
+#endif /* __ARM_EABI__ */
+
+#ifdef L_aeabi_lcmp
+
+FUNC_START aeabi_lcmp
+ cmp xxh, yyh
+ beq 1f
+ bgt 2f
+ mov r0, #1
+ neg r0, r0
+ RET
+2:
+ mov r0, #1
+ RET
+1:
+ sub r0, xxl, yyl
+ beq 1f
+ bhi 2f
+ mov r0, #1
+ neg r0, r0
+ RET
+2:
+ mov r0, #1
+1:
+ RET
+ FUNC_END aeabi_lcmp
+
+#endif /* L_aeabi_lcmp */
+
+#ifdef L_aeabi_ulcmp
+
+FUNC_START aeabi_ulcmp
+ cmp xxh, yyh
+ bne 1f
+ sub r0, xxl, yyl
+ beq 2f
+1:
+ bcs 1f
+ mov r0, #1
+ neg r0, r0
+ RET
+1:
+ mov r0, #1
+2:
+ RET
+ FUNC_END aeabi_ulcmp
+
+#endif /* L_aeabi_ulcmp */
+
+.macro test_div_by_zero signed
+ cmp yyh, #0
+ bne 7f
+ cmp yyl, #0
+ bne 7f
+ cmp xxh, #0
+ bne 2f
+ cmp xxl, #0
+2:
+ .ifc \signed, unsigned
+ beq 3f
+ mov xxh, #0
+ mvn xxh, xxh @ 0xffffffff
+ mov xxl, xxh
+3:
+ .else
+ beq 5f
+ blt 6f
+ mov xxl, #0
+ mvn xxl, xxl @ 0xffffffff
+ lsr xxh, xxl, #1 @ 0x7fffffff
+ b 5f
+6: mov xxh, #0x80
+ lsl xxh, xxh, #24 @ 0x80000000
+ mov xxl, #0
+5:
+ .endif
+ @ tailcalls are tricky on v6-m.
+ push {r0, r1, r2}
+ ldr r0, 1f
+ adr r1, 1f
+ add r0, r1
+ str r0, [sp, #8]
+ @ We know we are not on armv4t, so pop pc is safe.
+ pop {r0, r1, pc}
+ .align 2
+1:
+ .word __aeabi_ldiv0 - 1b
+7:
+.endm
+
+#ifdef L_aeabi_ldivmod
+
+FUNC_START aeabi_ldivmod
+ test_div_by_zero signed
+
+ push {r0, r1}
+ mov r0, sp
+ push {r0, lr}
+ ldr r0, [sp, #8]
+ bl SYM(__gnu_ldivmod_helper)
+ ldr r3, [sp, #4]
+ mov lr, r3
+ add sp, sp, #8
+ pop {r2, r3}
+ RET
+ FUNC_END aeabi_ldivmod
+
+#endif /* L_aeabi_ldivmod */
+
+#ifdef L_aeabi_uldivmod
+
+FUNC_START aeabi_uldivmod
+ test_div_by_zero unsigned
+
+ push {r0, r1}
+ mov r0, sp
+ push {r0, lr}
+ ldr r0, [sp, #8]
+ bl SYM(__gnu_uldivmod_helper)
+ ldr r3, [sp, #4]
+ mov lr, r3
+ add sp, sp, #8
+ pop {r2, r3}
+ RET
+ FUNC_END aeabi_uldivmod
+
+#endif /* L_aeabi_uldivmod */
+
+#ifdef L_arm_addsubsf3
+
+FUNC_START aeabi_frsub
+
+ push {r4, lr}
+ mov r4, #1
+ lsl r4, #31
+ eor r0, r0, r4
+ bl __aeabi_fadd
+ pop {r4, pc}
+
+ FUNC_END aeabi_frsub
+
+#endif /* L_arm_addsubsf3 */
+
+#ifdef L_arm_cmpsf2
+
+FUNC_START aeabi_cfrcmple
+
+ mov ip, r0
+ mov r0, r1
+ mov r1, ip
+ b 6f
+
+FUNC_START aeabi_cfcmpeq
+FUNC_ALIAS aeabi_cfcmple aeabi_cfcmpeq
+
+ @ The status-returning routines are required to preserve all
+ @ registers except ip, lr, and cpsr.
+6: push {r0, r1, r2, r3, r4, lr}
+ bl __lesf2
+ @ Set the Z flag correctly, and the C flag unconditionally.
+ cmp r0, #0
+ @ Clear the C flag if the return value was -1, indicating
+ @ that the first operand was smaller than the second.
+ bmi 1f
+ mov r1, #0
+ cmn r0, r1
+1:
+ pop {r0, r1, r2, r3, r4, pc}
+
+ FUNC_END aeabi_cfcmple
+ FUNC_END aeabi_cfcmpeq
+ FUNC_END aeabi_cfrcmple
+
+FUNC_START aeabi_fcmpeq
+
+ push {r4, lr}
+ bl __eqsf2
+ neg r0, r0
+ add r0, r0, #1
+ pop {r4, pc}
+
+ FUNC_END aeabi_fcmpeq
+
+.macro COMPARISON cond, helper, mode=sf2
+FUNC_START aeabi_fcmp\cond
+
+ push {r4, lr}
+ bl __\helper\mode
+ cmp r0, #0
+ b\cond 1f
+ mov r0, #0
+ pop {r4, pc}
+1:
+ mov r0, #1
+ pop {r4, pc}
+
+ FUNC_END aeabi_fcmp\cond
+.endm
+
+COMPARISON lt, le
+COMPARISON le, le
+COMPARISON gt, ge
+COMPARISON ge, ge
+
+#endif /* L_arm_cmpsf2 */
+
+#ifdef L_arm_addsubdf3
+
+FUNC_START aeabi_drsub
+
+ push {r4, lr}
+ mov r4, #1
+ lsl r4, #31
+ eor xxh, xxh, r4
+ bl __aeabi_dadd
+ pop {r4, pc}
+
+ FUNC_END aeabi_drsub
+
+#endif /* L_arm_addsubdf3 */
+
+#ifdef L_arm_cmpdf2
+
+FUNC_START aeabi_cdrcmple
+
+ mov ip, r0
+ mov r0, r2
+ mov r2, ip
+ mov ip, r1
+ mov r1, r3
+ mov r3, ip
+ b 6f
+
+FUNC_START aeabi_cdcmpeq
+FUNC_ALIAS aeabi_cdcmple aeabi_cdcmpeq
+
+ @ The status-returning routines are required to preserve all
+ @ registers except ip, lr, and cpsr.
+6: push {r0, r1, r2, r3, r4, lr}
+ bl __ledf2
+ @ Set the Z flag correctly, and the C flag unconditionally.
+ cmp r0, #0
+ @ Clear the C flag if the return value was -1, indicating
+ @ that the first operand was smaller than the second.
+ bmi 1f
+ mov r1, #0
+ cmn r0, r1
+1:
+ pop {r0, r1, r2, r3, r4, pc}
+
+ FUNC_END aeabi_cdcmple
+ FUNC_END aeabi_cdcmpeq
+ FUNC_END aeabi_cdrcmple
+
+FUNC_START aeabi_dcmpeq
+
+ push {r4, lr}
+ bl __eqdf2
+ neg r0, r0
+ add r0, r0, #1
+ pop {r4, pc}
+
+ FUNC_END aeabi_dcmpeq
+
+.macro COMPARISON cond, helper, mode=df2
+FUNC_START aeabi_dcmp\cond
+
+ push {r4, lr}
+ bl __\helper\mode
+ cmp r0, #0
+ b\cond 1f
+ mov r0, #0
+ pop {r4, pc}
+1:
+ mov r0, #1
+ pop {r4, pc}
+
+ FUNC_END aeabi_dcmp\cond
+.endm
+
+COMPARISON lt, le
+COMPARISON le, le
+COMPARISON gt, ge
+COMPARISON ge, ge
+
+#endif /* L_arm_cmpdf2 */
diff --git a/gcc-4.9/libgcc/config/arm/bpabi.S b/gcc-4.9/libgcc/config/arm/bpabi.S
new file mode 100644
index 000000000..777230154
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/bpabi.S
@@ -0,0 +1,168 @@
+/* Miscellaneous BPABI functions.
+
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery, LLC.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __ARM_EABI__
+/* Some attributes that are common to all routines in this file. */
+ /* Tag_ABI_align_needed: This code does not require 8-byte
+ alignment from the caller. */
+ /* .eabi_attribute 24, 0 -- default setting. */
+ /* Tag_ABI_align_preserved: This code preserves 8-byte
+ alignment in any callee. */
+ .eabi_attribute 25, 1
+#endif /* __ARM_EABI__ */
+
+#ifdef L_aeabi_lcmp
+
+ARM_FUNC_START aeabi_lcmp
+ cmp xxh, yyh
+ do_it lt
+ movlt r0, #-1
+ do_it gt
+ movgt r0, #1
+ do_it ne
+ RETc(ne)
+ subs r0, xxl, yyl
+ do_it lo
+ movlo r0, #-1
+ do_it hi
+ movhi r0, #1
+ RET
+ FUNC_END aeabi_lcmp
+
+#endif /* L_aeabi_lcmp */
+
+#ifdef L_aeabi_ulcmp
+
+ARM_FUNC_START aeabi_ulcmp
+ cmp xxh, yyh
+ do_it lo
+ movlo r0, #-1
+ do_it hi
+ movhi r0, #1
+ do_it ne
+ RETc(ne)
+ cmp xxl, yyl
+ do_it lo
+ movlo r0, #-1
+ do_it hi
+ movhi r0, #1
+ do_it eq
+ moveq r0, #0
+ RET
+ FUNC_END aeabi_ulcmp
+
+#endif /* L_aeabi_ulcmp */
+
+.macro test_div_by_zero signed
+/* Tail-call to divide-by-zero handlers which may be overridden by the user,
+ so unwinding works properly. */
+#if defined(__thumb2__)
+ cbnz yyh, 1f
+ cbnz yyl, 1f
+ cmp xxh, #0
+ do_it eq
+ cmpeq xxl, #0
+ .ifc \signed, unsigned
+ beq 2f
+ mov xxh, #0xffffffff
+ mov xxl, xxh
+2:
+ .else
+ do_it lt, t
+ movlt xxl, #0
+ movlt xxh, #0x80000000
+ do_it gt, t
+ movgt xxh, #0x7fffffff
+ movgt xxl, #0xffffffff
+ .endif
+ b SYM (__aeabi_ldiv0) __PLT__
+1:
+#else
+ /* Note: Thumb-1 code calls via an ARM shim on processors which
+ support ARM mode. */
+ cmp yyh, #0
+ cmpeq yyl, #0
+ bne 2f
+ cmp xxh, #0
+ cmpeq xxl, #0
+ .ifc \signed, unsigned
+ movne xxh, #0xffffffff
+ movne xxl, #0xffffffff
+ .else
+ movlt xxh, #0x80000000
+ movlt xxl, #0
+ movgt xxh, #0x7fffffff
+ movgt xxl, #0xffffffff
+ .endif
+ b SYM (__aeabi_ldiv0) __PLT__
+2:
+#endif
+.endm
+
+#ifdef L_aeabi_ldivmod
+
+ARM_FUNC_START aeabi_ldivmod
+ cfi_start __aeabi_ldivmod, LSYM(Lend_aeabi_ldivmod)
+ test_div_by_zero signed
+
+ sub sp, sp, #8
+#if defined(__thumb2__)
+ mov ip, sp
+ push {ip, lr}
+#else
+ do_push {sp, lr}
+#endif
+98: cfi_push 98b - __aeabi_ldivmod, 0xe, -0xc, 0x10
+ bl SYM(__gnu_ldivmod_helper) __PLT__
+ ldr lr, [sp, #4]
+ add sp, sp, #8
+ do_pop {r2, r3}
+ RET
+ cfi_end LSYM(Lend_aeabi_ldivmod)
+
+#endif /* L_aeabi_ldivmod */
+
+#ifdef L_aeabi_uldivmod
+
+ARM_FUNC_START aeabi_uldivmod
+ cfi_start __aeabi_uldivmod, LSYM(Lend_aeabi_uldivmod)
+ test_div_by_zero unsigned
+
+ sub sp, sp, #8
+#if defined(__thumb2__)
+ mov ip, sp
+ push {ip, lr}
+#else
+ do_push {sp, lr}
+#endif
+98: cfi_push 98b - __aeabi_uldivmod, 0xe, -0xc, 0x10
+ bl SYM(__gnu_uldivmod_helper) __PLT__
+ ldr lr, [sp, #4]
+ add sp, sp, #8
+ do_pop {r2, r3}
+ RET
+ cfi_end LSYM(Lend_aeabi_uldivmod)
+
+#endif /* L_aeabi_divmod */
+
diff --git a/gcc-4.9/libgcc/config/arm/bpabi.c b/gcc-4.9/libgcc/config/arm/bpabi.c
new file mode 100644
index 000000000..7b155ccc1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/bpabi.c
@@ -0,0 +1,56 @@
+/* Miscellaneous BPABI functions.
+
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery, LLC.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+extern long long __divdi3 (long long, long long);
+extern unsigned long long __udivdi3 (unsigned long long,
+ unsigned long long);
+extern long long __gnu_ldivmod_helper (long long, long long, long long *);
+extern unsigned long long __gnu_uldivmod_helper (unsigned long long,
+ unsigned long long,
+ unsigned long long *);
+
+
+long long
+__gnu_ldivmod_helper (long long a,
+ long long b,
+ long long *remainder)
+{
+ long long quotient;
+
+ quotient = __divdi3 (a, b);
+ *remainder = a - b * quotient;
+ return quotient;
+}
+
+unsigned long long
+__gnu_uldivmod_helper (unsigned long long a,
+ unsigned long long b,
+ unsigned long long *remainder)
+{
+ unsigned long long quotient;
+
+ quotient = __udivdi3 (a, b);
+ *remainder = a - b * quotient;
+ return quotient;
+}
diff --git a/gcc-4.9/libgcc/config/arm/crti.S b/gcc-4.9/libgcc/config/arm/crti.S
new file mode 100644
index 000000000..517e15896
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/crti.S
@@ -0,0 +1,86 @@
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Written By Nick Clifton
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+/* An executable stack is *not* required for these functions. */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
+# This file just make a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+#ifdef __ELF__
+#define TYPE(x) .type x,function
+#else
+#define TYPE(x)
+#endif
+#ifdef __ARM_EABI__
+/* Some attributes that are common to all routines in this file. */
+ /* Tag_ABI_align_needed: This code does not require 8-byte
+ alignment from the caller. */
+ /* .eabi_attribute 24, 0 -- default setting. */
+ /* Tag_ABI_align_preserved: This code preserves 8-byte
+ alignment in any callee. */
+ .eabi_attribute 25, 1
+#endif /* __ARM_EABI__ */
+
+ # Note - this macro is complemented by the FUNC_END macro
+ # in crtn.S. If you change this macro you must also change
+ # that macro match.
+.macro FUNC_START
+#ifdef __thumb__
+ .thumb
+
+ push {r3, r4, r5, r6, r7, lr}
+#else
+ .arm
+ # Create a stack frame and save any call-preserved registers
+ mov ip, sp
+ stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
+ sub fp, ip, #4
+#endif
+.endm
+
+ .section ".init"
+ .align 2
+ .global _init
+#ifdef __thumb__
+ .thumb_func
+#endif
+ TYPE(_init)
+_init:
+ FUNC_START
+
+
+ .section ".fini"
+ .align 2
+ .global _fini
+#ifdef __thumb__
+ .thumb_func
+#endif
+ TYPE(_fini)
+_fini:
+ FUNC_START
+
+# end of crti.S
diff --git a/gcc-4.9/libgcc/config/arm/crtn.S b/gcc-4.9/libgcc/config/arm/crtn.S
new file mode 100644
index 000000000..0f644efd0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/crtn.S
@@ -0,0 +1,82 @@
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+# Written By Nick Clifton
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+/* An executable stack is *not* required for these functions. */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
+#ifdef __ARM_EABI__
+/* Some attributes that are common to all routines in this file. */
+ /* Tag_ABI_align_needed: This code does not require 8-byte
+ alignment from the caller. */
+ /* .eabi_attribute 24, 0 -- default setting. */
+ /* Tag_ABI_align_preserved: This code preserves 8-byte
+ alignment in any callee. */
+ .eabi_attribute 25, 1
+#endif /* __ARM_EABI__ */
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+ # Note - this macro is complemented by the FUNC_START macro
+ # in crti.S. If you change this macro you must also change
+ # that macro match.
+ #
+ # Note - we do not try any fancy optimizations of the return
+ # sequences here, it is just not worth it. Instead keep things
+ # simple. Restore all the save registers, including the link
+ # register and then perform the correct function return instruction.
+ # We also save/restore r3 to ensure stack alignment.
+.macro FUNC_END
+#ifdef __thumb__
+ .thumb
+
+ pop {r3, r4, r5, r6, r7}
+ pop {r3}
+ mov lr, r3
+#else
+ .arm
+
+ sub sp, fp, #40
+ ldmfd sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
+#endif
+
+#if defined __THUMB_INTERWORK__ || defined __thumb__
+ bx lr
+#else
+ mov pc, lr
+#endif
+.endm
+
+
+ .section ".init"
+ ;;
+ FUNC_END
+
+ .section ".fini"
+ ;;
+ FUNC_END
+
+# end of crtn.S
diff --git a/gcc-4.9/libgcc/config/arm/fp16.c b/gcc-4.9/libgcc/config/arm/fp16.c
new file mode 100644
index 000000000..f599e8b21
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/fp16.c
@@ -0,0 +1,143 @@
+/* Half-float conversion routines.
+
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+static inline unsigned short
+__gnu_f2h_internal(unsigned int a, int ieee)
+{
+ unsigned short sign = (a >> 16) & 0x8000;
+ int aexp = (a >> 23) & 0xff;
+ unsigned int mantissa = a & 0x007fffff;
+ unsigned int mask;
+ unsigned int increment;
+
+ if (aexp == 0xff)
+ {
+ if (!ieee)
+ return sign;
+ return sign | 0x7e00 | (mantissa >> 13);
+ }
+
+ if (aexp == 0 && mantissa == 0)
+ return sign;
+
+ aexp -= 127;
+
+ /* Decimal point between bits 22 and 23. */
+ mantissa |= 0x00800000;
+ if (aexp < -14)
+ {
+ mask = 0x00ffffff;
+ if (aexp >= -25)
+ mask >>= 25 + aexp;
+ }
+ else
+ mask = 0x00001fff;
+
+ /* Round. */
+ if (mantissa & mask)
+ {
+ increment = (mask + 1) >> 1;
+ if ((mantissa & mask) == increment)
+ increment = mantissa & (increment << 1);
+ mantissa += increment;
+ if (mantissa >= 0x01000000)
+ {
+ mantissa >>= 1;
+ aexp++;
+ }
+ }
+
+ if (ieee)
+ {
+ if (aexp > 15)
+ return sign | 0x7c00;
+ }
+ else
+ {
+ if (aexp > 16)
+ return sign | 0x7fff;
+ }
+
+ if (aexp < -24)
+ return sign;
+
+ if (aexp < -14)
+ {
+ mantissa >>= -14 - aexp;
+ aexp = -14;
+ }
+
+ /* We leave the leading 1 in the mantissa, and subtract one
+ from the exponent bias to compensate. */
+ return sign | (((aexp + 14) << 10) + (mantissa >> 13));
+}
+
+unsigned int
+__gnu_h2f_internal(unsigned short a, int ieee)
+{
+ unsigned int sign = (unsigned int)(a & 0x8000) << 16;
+ int aexp = (a >> 10) & 0x1f;
+ unsigned int mantissa = a & 0x3ff;
+
+ if (aexp == 0x1f && ieee)
+ return sign | 0x7f800000 | (mantissa << 13);
+
+ if (aexp == 0)
+ {
+ int shift;
+
+ if (mantissa == 0)
+ return sign;
+
+ shift = __builtin_clz(mantissa) - 21;
+ mantissa <<= shift;
+ aexp = -shift;
+ }
+
+ return sign | (((aexp + 0x70) << 23) + (mantissa << 13));
+}
+
+unsigned short
+__gnu_f2h_ieee(unsigned int a)
+{
+ return __gnu_f2h_internal(a, 1);
+}
+
+unsigned int
+__gnu_h2f_ieee(unsigned short a)
+{
+ return __gnu_h2f_internal(a, 1);
+}
+
+unsigned short
+__gnu_f2h_alternative(unsigned int x)
+{
+ return __gnu_f2h_internal(x, 0);
+}
+
+unsigned int
+__gnu_h2f_alternative(unsigned short a)
+{
+ return __gnu_h2f_internal(a, 0);
+}
diff --git a/gcc-4.9/libgcc/config/arm/ieee754-df.S b/gcc-4.9/libgcc/config/arm/ieee754-df.S
new file mode 100644
index 000000000..406bb70ac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/ieee754-df.S
@@ -0,0 +1,1406 @@
+/* ieee754-df.S double-precision floating point support for ARM
+
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ Contributed by Nicolas Pitre (nico@cam.org)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * Notes:
+ *
+ * The goal of this code is to be as fast as possible. This is
+ * not meant to be easy to understand for the casual reader.
+ * For slightly simpler code please see the single precision version
+ * of this file.
+ *
+ * Only the default rounding mode is intended for best performances.
+ * Exceptions aren't supported yet, but that can be added quite easily
+ * if necessary without impacting performances.
+ */
+
+
+#ifndef __ARMEB__
+#define xl r0
+#define xh r1
+#define yl r2
+#define yh r3
+#else
+#define xh r0
+#define xl r1
+#define yh r2
+#define yl r3
+#endif
+
+
+#ifdef L_arm_negdf2
+
+ARM_FUNC_START negdf2
+ARM_FUNC_ALIAS aeabi_dneg negdf2
+
+ @ flip sign bit
+ eor xh, xh, #0x80000000
+ RET
+
+ FUNC_END aeabi_dneg
+ FUNC_END negdf2
+
+#endif
+
+#ifdef L_arm_addsubdf3
+
+ARM_FUNC_START aeabi_drsub
+
+ eor xh, xh, #0x80000000 @ flip sign bit of first arg
+ b 1f
+
+ARM_FUNC_START subdf3
+ARM_FUNC_ALIAS aeabi_dsub subdf3
+
+ eor yh, yh, #0x80000000 @ flip sign bit of second arg
+#if defined(__INTERWORKING_STUBS__)
+ b 1f @ Skip Thumb-code prologue
+#endif
+
+ARM_FUNC_START adddf3
+ARM_FUNC_ALIAS aeabi_dadd adddf3
+
+1: do_push {r4, r5, lr}
+
+ @ Look for zeroes, equal values, INF, or NAN.
+ shift1 lsl, r4, xh, #1
+ shift1 lsl, r5, yh, #1
+ teq r4, r5
+ do_it eq
+ teqeq xl, yl
+ do_it ne, ttt
+ COND(orr,s,ne) ip, r4, xl
+ COND(orr,s,ne) ip, r5, yl
+ COND(mvn,s,ne) ip, r4, asr #21
+ COND(mvn,s,ne) ip, r5, asr #21
+ beq LSYM(Lad_s)
+
+ @ Compute exponent difference. Make largest exponent in r4,
+ @ corresponding arg in xh-xl, and positive exponent difference in r5.
+ shift1 lsr, r4, r4, #21
+ rsbs r5, r4, r5, lsr #21
+ do_it lt
+ rsblt r5, r5, #0
+ ble 1f
+ add r4, r4, r5
+ eor yl, xl, yl
+ eor yh, xh, yh
+ eor xl, yl, xl
+ eor xh, yh, xh
+ eor yl, xl, yl
+ eor yh, xh, yh
+1:
+ @ If exponent difference is too large, return largest argument
+ @ already in xh-xl. We need up to 54 bit to handle proper rounding
+ @ of 0x1p54 - 1.1.
+ cmp r5, #54
+ do_it hi
+ RETLDM "r4, r5" hi
+
+ @ Convert mantissa to signed integer.
+ tst xh, #0x80000000
+ mov xh, xh, lsl #12
+ mov ip, #0x00100000
+ orr xh, ip, xh, lsr #12
+ beq 1f
+#if defined(__thumb2__)
+ negs xl, xl
+ sbc xh, xh, xh, lsl #1
+#else
+ rsbs xl, xl, #0
+ rsc xh, xh, #0
+#endif
+1:
+ tst yh, #0x80000000
+ mov yh, yh, lsl #12
+ orr yh, ip, yh, lsr #12
+ beq 1f
+#if defined(__thumb2__)
+ negs yl, yl
+ sbc yh, yh, yh, lsl #1
+#else
+ rsbs yl, yl, #0
+ rsc yh, yh, #0
+#endif
+1:
+ @ If exponent == difference, one or both args were denormalized.
+ @ Since this is not common case, rescale them off line.
+ teq r4, r5
+ beq LSYM(Lad_d)
+LSYM(Lad_x):
+
+ @ Compensate for the exponent overlapping the mantissa MSB added later
+ sub r4, r4, #1
+
+ @ Shift yh-yl right per r5, add to xh-xl, keep leftover bits into ip.
+ rsbs lr, r5, #32
+ blt 1f
+ shift1 lsl, ip, yl, lr
+ shiftop adds xl xl yl lsr r5 yl
+ adc xh, xh, #0
+ shiftop adds xl xl yh lsl lr yl
+ shiftop adcs xh xh yh asr r5 yh
+ b 2f
+1: sub r5, r5, #32
+ add lr, lr, #32
+ cmp yl, #1
+ shift1 lsl,ip, yh, lr
+ do_it cs
+ orrcs ip, ip, #2 @ 2 not 1, to allow lsr #1 later
+ shiftop adds xl xl yh asr r5 yh
+ adcs xh, xh, yh, asr #31
+2:
+ @ We now have a result in xh-xl-ip.
+ @ Keep absolute value in xh-xl-ip, sign in r5 (the n bit was set above)
+ and r5, xh, #0x80000000
+ bpl LSYM(Lad_p)
+#if defined(__thumb2__)
+ mov lr, #0
+ negs ip, ip
+ sbcs xl, lr, xl
+ sbc xh, lr, xh
+#else
+ rsbs ip, ip, #0
+ rscs xl, xl, #0
+ rsc xh, xh, #0
+#endif
+
+ @ Determine how to normalize the result.
+LSYM(Lad_p):
+ cmp xh, #0x00100000
+ bcc LSYM(Lad_a)
+ cmp xh, #0x00200000
+ bcc LSYM(Lad_e)
+
+ @ Result needs to be shifted right.
+ movs xh, xh, lsr #1
+ movs xl, xl, rrx
+ mov ip, ip, rrx
+ add r4, r4, #1
+
+ @ Make sure we did not bust our exponent.
+ mov r2, r4, lsl #21
+ cmn r2, #(2 << 21)
+ bcs LSYM(Lad_o)
+
+ @ Our result is now properly aligned into xh-xl, remaining bits in ip.
+ @ Round with MSB of ip. If halfway between two numbers, round towards
+ @ LSB of xl = 0.
+ @ Pack final result together.
+LSYM(Lad_e):
+ cmp ip, #0x80000000
+ do_it eq
+ COND(mov,s,eq) ip, xl, lsr #1
+ adcs xl, xl, #0
+ adc xh, xh, r4, lsl #20
+ orr xh, xh, r5
+ RETLDM "r4, r5"
+
+ @ Result must be shifted left and exponent adjusted.
+LSYM(Lad_a):
+ movs ip, ip, lsl #1
+ adcs xl, xl, xl
+ adc xh, xh, xh
+ tst xh, #0x00100000
+ sub r4, r4, #1
+ bne LSYM(Lad_e)
+
+ @ No rounding necessary since ip will always be 0 at this point.
+LSYM(Lad_l):
+
+#if __ARM_ARCH__ < 5
+
+ teq xh, #0
+ movne r3, #20
+ moveq r3, #52
+ moveq xh, xl
+ moveq xl, #0
+ mov r2, xh
+ cmp r2, #(1 << 16)
+ movhs r2, r2, lsr #16
+ subhs r3, r3, #16
+ cmp r2, #(1 << 8)
+ movhs r2, r2, lsr #8
+ subhs r3, r3, #8
+ cmp r2, #(1 << 4)
+ movhs r2, r2, lsr #4
+ subhs r3, r3, #4
+ cmp r2, #(1 << 2)
+ subhs r3, r3, #2
+ sublo r3, r3, r2, lsr #1
+ sub r3, r3, r2, lsr #3
+
+#else
+
+ teq xh, #0
+ do_it eq, t
+ moveq xh, xl
+ moveq xl, #0
+ clz r3, xh
+ do_it eq
+ addeq r3, r3, #32
+ sub r3, r3, #11
+
+#endif
+
+ @ determine how to shift the value.
+ subs r2, r3, #32
+ bge 2f
+ adds r2, r2, #12
+ ble 1f
+
+ @ shift value left 21 to 31 bits, or actually right 11 to 1 bits
+ @ since a register switch happened above.
+ add ip, r2, #20
+ rsb r2, r2, #12
+ shift1 lsl, xl, xh, ip
+ shift1 lsr, xh, xh, r2
+ b 3f
+
+ @ actually shift value left 1 to 20 bits, which might also represent
+ @ 32 to 52 bits if counting the register switch that happened earlier.
+1: add r2, r2, #20
+2: do_it le
+ rsble ip, r2, #32
+ shift1 lsl, xh, xh, r2
+#if defined(__thumb2__)
+ lsr ip, xl, ip
+ itt le
+ orrle xh, xh, ip
+ lslle xl, xl, r2
+#else
+ orrle xh, xh, xl, lsr ip
+ movle xl, xl, lsl r2
+#endif
+
+ @ adjust exponent accordingly.
+3: subs r4, r4, r3
+ do_it ge, tt
+ addge xh, xh, r4, lsl #20
+ orrge xh, xh, r5
+ RETLDM "r4, r5" ge
+
+ @ Exponent too small, denormalize result.
+ @ Find out proper shift value.
+ mvn r4, r4
+ subs r4, r4, #31
+ bge 2f
+ adds r4, r4, #12
+ bgt 1f
+
+ @ shift result right of 1 to 20 bits, sign is in r5.
+ add r4, r4, #20
+ rsb r2, r4, #32
+ shift1 lsr, xl, xl, r4
+ shiftop orr xl xl xh lsl r2 yh
+ shiftop orr xh r5 xh lsr r4 yh
+ RETLDM "r4, r5"
+
+ @ shift result right of 21 to 31 bits, or left 11 to 1 bits after
+ @ a register switch from xh to xl.
+1: rsb r4, r4, #12
+ rsb r2, r4, #32
+ shift1 lsr, xl, xl, r2
+ shiftop orr xl xl xh lsl r4 yh
+ mov xh, r5
+ RETLDM "r4, r5"
+
+ @ Shift value right of 32 to 64 bits, or 0 to 32 bits after a switch
+ @ from xh to xl.
+2: shift1 lsr, xl, xh, r4
+ mov xh, r5
+ RETLDM "r4, r5"
+
+ @ Adjust exponents for denormalized arguments.
+ @ Note that r4 must not remain equal to 0.
+LSYM(Lad_d):
+ teq r4, #0
+ eor yh, yh, #0x00100000
+ do_it eq, te
+ eoreq xh, xh, #0x00100000
+ addeq r4, r4, #1
+ subne r5, r5, #1
+ b LSYM(Lad_x)
+
+
+LSYM(Lad_s):
+ mvns ip, r4, asr #21
+ do_it ne
+ COND(mvn,s,ne) ip, r5, asr #21
+ beq LSYM(Lad_i)
+
+ teq r4, r5
+ do_it eq
+ teqeq xl, yl
+ beq 1f
+
+ @ Result is x + 0.0 = x or 0.0 + y = y.
+ orrs ip, r4, xl
+ do_it eq, t
+ moveq xh, yh
+ moveq xl, yl
+ RETLDM "r4, r5"
+
+1: teq xh, yh
+
+ @ Result is x - x = 0.
+ do_it ne, tt
+ movne xh, #0
+ movne xl, #0
+ RETLDM "r4, r5" ne
+
+ @ Result is x + x = 2x.
+ movs ip, r4, lsr #21
+ bne 2f
+ movs xl, xl, lsl #1
+ adcs xh, xh, xh
+ do_it cs
+ orrcs xh, xh, #0x80000000
+ RETLDM "r4, r5"
+2: adds r4, r4, #(2 << 21)
+ do_it cc, t
+ addcc xh, xh, #(1 << 20)
+ RETLDM "r4, r5" cc
+ and r5, xh, #0x80000000
+
+ @ Overflow: return INF.
+LSYM(Lad_o):
+ orr xh, r5, #0x7f000000
+ orr xh, xh, #0x00f00000
+ mov xl, #0
+ RETLDM "r4, r5"
+
+ @ At least one of x or y is INF/NAN.
+ @ if xh-xl != INF/NAN: return yh-yl (which is INF/NAN)
+ @ if yh-yl != INF/NAN: return xh-xl (which is INF/NAN)
+ @ if either is NAN: return NAN
+ @ if opposite sign: return NAN
+ @ otherwise return xh-xl (which is INF or -INF)
+LSYM(Lad_i):
+ mvns ip, r4, asr #21
+ do_it ne, te
+ movne xh, yh
+ movne xl, yl
+ COND(mvn,s,eq) ip, r5, asr #21
+ do_it ne, t
+ movne yh, xh
+ movne yl, xl
+ orrs r4, xl, xh, lsl #12
+ do_it eq, te
+ COND(orr,s,eq) r5, yl, yh, lsl #12
+ teqeq xh, yh
+ orrne xh, xh, #0x00080000 @ quiet NAN
+ RETLDM "r4, r5"
+
+ FUNC_END aeabi_dsub
+ FUNC_END subdf3
+ FUNC_END aeabi_dadd
+ FUNC_END adddf3
+
+ARM_FUNC_START floatunsidf
+ARM_FUNC_ALIAS aeabi_ui2d floatunsidf
+
+ teq r0, #0
+ do_it eq, t
+ moveq r1, #0
+ RETc(eq)
+ do_push {r4, r5, lr}
+ mov r4, #0x400 @ initial exponent
+ add r4, r4, #(52-1 - 1)
+ mov r5, #0 @ sign bit is 0
+ .ifnc xl, r0
+ mov xl, r0
+ .endif
+ mov xh, #0
+ b LSYM(Lad_l)
+
+ FUNC_END aeabi_ui2d
+ FUNC_END floatunsidf
+
+ARM_FUNC_START floatsidf
+ARM_FUNC_ALIAS aeabi_i2d floatsidf
+
+ teq r0, #0
+ do_it eq, t
+ moveq r1, #0
+ RETc(eq)
+ do_push {r4, r5, lr}
+ mov r4, #0x400 @ initial exponent
+ add r4, r4, #(52-1 - 1)
+ ands r5, r0, #0x80000000 @ sign bit in r5
+ do_it mi
+ rsbmi r0, r0, #0 @ absolute value
+ .ifnc xl, r0
+ mov xl, r0
+ .endif
+ mov xh, #0
+ b LSYM(Lad_l)
+
+ FUNC_END aeabi_i2d
+ FUNC_END floatsidf
+
+ARM_FUNC_START extendsfdf2
+ARM_FUNC_ALIAS aeabi_f2d extendsfdf2
+
+ movs r2, r0, lsl #1 @ toss sign bit
+ mov xh, r2, asr #3 @ stretch exponent
+ mov xh, xh, rrx @ retrieve sign bit
+ mov xl, r2, lsl #28 @ retrieve remaining bits
+ do_it ne, ttt
+ COND(and,s,ne) r3, r2, #0xff000000 @ isolate exponent
+ teqne r3, #0xff000000 @ if not 0, check if INF or NAN
+ eorne xh, xh, #0x38000000 @ fixup exponent otherwise.
+ RETc(ne) @ and return it.
+
+ teq r2, #0 @ if actually 0
+ do_it ne, e
+ teqne r3, #0xff000000 @ or INF or NAN
+ RETc(eq) @ we are done already.
+
+ @ value was denormalized. We can normalize it now.
+ do_push {r4, r5, lr}
+ mov r4, #0x380 @ setup corresponding exponent
+ and r5, xh, #0x80000000 @ move sign bit in r5
+ bic xh, xh, #0x80000000
+ b LSYM(Lad_l)
+
+ FUNC_END aeabi_f2d
+ FUNC_END extendsfdf2
+
+ARM_FUNC_START floatundidf
+ARM_FUNC_ALIAS aeabi_ul2d floatundidf
+
+ orrs r2, r0, r1
+ do_it eq
+ RETc(eq)
+
+ do_push {r4, r5, lr}
+
+ mov r5, #0
+ b 2f
+
+ARM_FUNC_START floatdidf
+ARM_FUNC_ALIAS aeabi_l2d floatdidf
+
+ orrs r2, r0, r1
+ do_it eq
+ RETc(eq)
+
+ do_push {r4, r5, lr}
+
+ ands r5, ah, #0x80000000 @ sign bit in r5
+ bpl 2f
+#if defined(__thumb2__)
+ negs al, al
+ sbc ah, ah, ah, lsl #1
+#else
+ rsbs al, al, #0
+ rsc ah, ah, #0
+#endif
+2:
+ mov r4, #0x400 @ initial exponent
+ add r4, r4, #(52-1 - 1)
+
+ @ If FP word order does not match integer word order, swap the words.
+ .ifnc xh, ah
+ mov ip, al
+ mov xh, ah
+ mov xl, ip
+ .endif
+
+ movs ip, xh, lsr #22
+ beq LSYM(Lad_p)
+
+ @ The value is too big. Scale it down a bit...
+ mov r2, #3
+ movs ip, ip, lsr #3
+ do_it ne
+ addne r2, r2, #3
+ movs ip, ip, lsr #3
+ do_it ne
+ addne r2, r2, #3
+ add r2, r2, ip, lsr #3
+
+ rsb r3, r2, #32
+ shift1 lsl, ip, xl, r3
+ shift1 lsr, xl, xl, r2
+ shiftop orr xl xl xh lsl r3 lr
+ shift1 lsr, xh, xh, r2
+ add r4, r4, r2
+ b LSYM(Lad_p)
+
+ FUNC_END floatdidf
+ FUNC_END aeabi_l2d
+ FUNC_END floatundidf
+ FUNC_END aeabi_ul2d
+
+#endif /* L_addsubdf3 */
+
+#ifdef L_arm_muldivdf3
+
+ARM_FUNC_START muldf3
+ARM_FUNC_ALIAS aeabi_dmul muldf3
+ do_push {r4, r5, r6, lr}
+
+ @ Mask out exponents, trap any zero/denormal/INF/NAN.
+ mov ip, #0xff
+ orr ip, ip, #0x700
+ ands r4, ip, xh, lsr #20
+ do_it ne, tte
+ COND(and,s,ne) r5, ip, yh, lsr #20
+ teqne r4, ip
+ teqne r5, ip
+ bleq LSYM(Lml_s)
+
+ @ Add exponents together
+ add r4, r4, r5
+
+ @ Determine final sign.
+ eor r6, xh, yh
+
+ @ Convert mantissa to unsigned integer.
+ @ If power of two, branch to a separate path.
+ bic xh, xh, ip, lsl #21
+ bic yh, yh, ip, lsl #21
+ orrs r5, xl, xh, lsl #12
+ do_it ne
+ COND(orr,s,ne) r5, yl, yh, lsl #12
+ orr xh, xh, #0x00100000
+ orr yh, yh, #0x00100000
+ beq LSYM(Lml_1)
+
+#if __ARM_ARCH__ < 4
+
+ @ Put sign bit in r6, which will be restored in yl later.
+ and r6, r6, #0x80000000
+
+ @ Well, no way to make it shorter without the umull instruction.
+ stmfd sp!, {r6, r7, r8, r9, sl, fp}
+ mov r7, xl, lsr #16
+ mov r8, yl, lsr #16
+ mov r9, xh, lsr #16
+ mov sl, yh, lsr #16
+ bic xl, xl, r7, lsl #16
+ bic yl, yl, r8, lsl #16
+ bic xh, xh, r9, lsl #16
+ bic yh, yh, sl, lsl #16
+ mul ip, xl, yl
+ mul fp, xl, r8
+ mov lr, #0
+ adds ip, ip, fp, lsl #16
+ adc lr, lr, fp, lsr #16
+ mul fp, r7, yl
+ adds ip, ip, fp, lsl #16
+ adc lr, lr, fp, lsr #16
+ mul fp, xl, sl
+ mov r5, #0
+ adds lr, lr, fp, lsl #16
+ adc r5, r5, fp, lsr #16
+ mul fp, r7, yh
+ adds lr, lr, fp, lsl #16
+ adc r5, r5, fp, lsr #16
+ mul fp, xh, r8
+ adds lr, lr, fp, lsl #16
+ adc r5, r5, fp, lsr #16
+ mul fp, r9, yl
+ adds lr, lr, fp, lsl #16
+ adc r5, r5, fp, lsr #16
+ mul fp, xh, sl
+ mul r6, r9, sl
+ adds r5, r5, fp, lsl #16
+ adc r6, r6, fp, lsr #16
+ mul fp, r9, yh
+ adds r5, r5, fp, lsl #16
+ adc r6, r6, fp, lsr #16
+ mul fp, xl, yh
+ adds lr, lr, fp
+ mul fp, r7, sl
+ adcs r5, r5, fp
+ mul fp, xh, yl
+ adc r6, r6, #0
+ adds lr, lr, fp
+ mul fp, r9, r8
+ adcs r5, r5, fp
+ mul fp, r7, r8
+ adc r6, r6, #0
+ adds lr, lr, fp
+ mul fp, xh, yh
+ adcs r5, r5, fp
+ adc r6, r6, #0
+ ldmfd sp!, {yl, r7, r8, r9, sl, fp}
+
+#else
+
+ @ Here is the actual multiplication.
+ umull ip, lr, xl, yl
+ mov r5, #0
+ umlal lr, r5, xh, yl
+ and yl, r6, #0x80000000
+ umlal lr, r5, xl, yh
+ mov r6, #0
+ umlal r5, r6, xh, yh
+
+#endif
+
+ @ The LSBs in ip are only significant for the final rounding.
+ @ Fold them into lr.
+ teq ip, #0
+ do_it ne
+ orrne lr, lr, #1
+
+ @ Adjust result upon the MSB position.
+ sub r4, r4, #0xff
+ cmp r6, #(1 << (20-11))
+ sbc r4, r4, #0x300
+ bcs 1f
+ movs lr, lr, lsl #1
+ adcs r5, r5, r5
+ adc r6, r6, r6
+1:
+ @ Shift to final position, add sign to result.
+ orr xh, yl, r6, lsl #11
+ orr xh, xh, r5, lsr #21
+ mov xl, r5, lsl #11
+ orr xl, xl, lr, lsr #21
+ mov lr, lr, lsl #11
+
+ @ Check exponent range for under/overflow.
+ subs ip, r4, #(254 - 1)
+ do_it hi
+ cmphi ip, #0x700
+ bhi LSYM(Lml_u)
+
+ @ Round the result, merge final exponent.
+ cmp lr, #0x80000000
+ do_it eq
+ COND(mov,s,eq) lr, xl, lsr #1
+ adcs xl, xl, #0
+ adc xh, xh, r4, lsl #20
+ RETLDM "r4, r5, r6"
+
+ @ Multiplication by 0x1p*: let''s shortcut a lot of code.
+LSYM(Lml_1):
+ and r6, r6, #0x80000000
+ orr xh, r6, xh
+ orr xl, xl, yl
+ eor xh, xh, yh
+ subs r4, r4, ip, lsr #1
+ do_it gt, tt
+ COND(rsb,s,gt) r5, r4, ip
+ orrgt xh, xh, r4, lsl #20
+ RETLDM "r4, r5, r6" gt
+
+ @ Under/overflow: fix things up for the code below.
+ orr xh, xh, #0x00100000
+ mov lr, #0
+ subs r4, r4, #1
+
+LSYM(Lml_u):
+ @ Overflow?
+ bgt LSYM(Lml_o)
+
+ @ Check if denormalized result is possible, otherwise return signed 0.
+ cmn r4, #(53 + 1)
+ do_it le, tt
+ movle xl, #0
+ bicle xh, xh, #0x7fffffff
+ RETLDM "r4, r5, r6" le
+
+ @ Find out proper shift value.
+ rsb r4, r4, #0
+ subs r4, r4, #32
+ bge 2f
+ adds r4, r4, #12
+ bgt 1f
+
+ @ shift result right of 1 to 20 bits, preserve sign bit, round, etc.
+ add r4, r4, #20
+ rsb r5, r4, #32
+ shift1 lsl, r3, xl, r5
+ shift1 lsr, xl, xl, r4
+ shiftop orr xl xl xh lsl r5 r2
+ and r2, xh, #0x80000000
+ bic xh, xh, #0x80000000
+ adds xl, xl, r3, lsr #31
+ shiftop adc xh r2 xh lsr r4 r6
+ orrs lr, lr, r3, lsl #1
+ do_it eq
+ biceq xl, xl, r3, lsr #31
+ RETLDM "r4, r5, r6"
+
+ @ shift result right of 21 to 31 bits, or left 11 to 1 bits after
+ @ a register switch from xh to xl. Then round.
+1: rsb r4, r4, #12
+ rsb r5, r4, #32
+ shift1 lsl, r3, xl, r4
+ shift1 lsr, xl, xl, r5
+ shiftop orr xl xl xh lsl r4 r2
+ bic xh, xh, #0x7fffffff
+ adds xl, xl, r3, lsr #31
+ adc xh, xh, #0
+ orrs lr, lr, r3, lsl #1
+ do_it eq
+ biceq xl, xl, r3, lsr #31
+ RETLDM "r4, r5, r6"
+
+ @ Shift value right of 32 to 64 bits, or 0 to 32 bits after a switch
+ @ from xh to xl. Leftover bits are in r3-r6-lr for rounding.
+2: rsb r5, r4, #32
+ shiftop orr lr lr xl lsl r5 r2
+ shift1 lsr, r3, xl, r4
+ shiftop orr r3 r3 xh lsl r5 r2
+ shift1 lsr, xl, xh, r4
+ bic xh, xh, #0x7fffffff
+ shiftop bic xl xl xh lsr r4 r2
+ add xl, xl, r3, lsr #31
+ orrs lr, lr, r3, lsl #1
+ do_it eq
+ biceq xl, xl, r3, lsr #31
+ RETLDM "r4, r5, r6"
+
+ @ One or both arguments are denormalized.
+ @ Scale them leftwards and preserve sign bit.
+LSYM(Lml_d):
+ teq r4, #0
+ bne 2f
+ and r6, xh, #0x80000000
+1: movs xl, xl, lsl #1
+ adc xh, xh, xh
+ tst xh, #0x00100000
+ do_it eq
+ subeq r4, r4, #1
+ beq 1b
+ orr xh, xh, r6
+ teq r5, #0
+ do_it ne
+ RETc(ne)
+2: and r6, yh, #0x80000000
+3: movs yl, yl, lsl #1
+ adc yh, yh, yh
+ tst yh, #0x00100000
+ do_it eq
+ subeq r5, r5, #1
+ beq 3b
+ orr yh, yh, r6
+ RET
+
+LSYM(Lml_s):
+ @ Isolate the INF and NAN cases away
+ teq r4, ip
+ and r5, ip, yh, lsr #20
+ do_it ne
+ teqne r5, ip
+ beq 1f
+
+ @ Here, one or more arguments are either denormalized or zero.
+ orrs r6, xl, xh, lsl #1
+ do_it ne
+ COND(orr,s,ne) r6, yl, yh, lsl #1
+ bne LSYM(Lml_d)
+
+ @ Result is 0, but determine sign anyway.
+LSYM(Lml_z):
+ eor xh, xh, yh
+ and xh, xh, #0x80000000
+ mov xl, #0
+ RETLDM "r4, r5, r6"
+
+1: @ One or both args are INF or NAN.
+ orrs r6, xl, xh, lsl #1
+ do_it eq, te
+ moveq xl, yl
+ moveq xh, yh
+ COND(orr,s,ne) r6, yl, yh, lsl #1
+ beq LSYM(Lml_n) @ 0 * INF or INF * 0 -> NAN
+ teq r4, ip
+ bne 1f
+ orrs r6, xl, xh, lsl #12
+ bne LSYM(Lml_n) @ NAN * <anything> -> NAN
+1: teq r5, ip
+ bne LSYM(Lml_i)
+ orrs r6, yl, yh, lsl #12
+ do_it ne, t
+ movne xl, yl
+ movne xh, yh
+ bne LSYM(Lml_n) @ <anything> * NAN -> NAN
+
+ @ Result is INF, but we need to determine its sign.
+LSYM(Lml_i):
+ eor xh, xh, yh
+
+ @ Overflow: return INF (sign already in xh).
+LSYM(Lml_o):
+ and xh, xh, #0x80000000
+ orr xh, xh, #0x7f000000
+ orr xh, xh, #0x00f00000
+ mov xl, #0
+ RETLDM "r4, r5, r6"
+
+ @ Return a quiet NAN.
+LSYM(Lml_n):
+ orr xh, xh, #0x7f000000
+ orr xh, xh, #0x00f80000
+ RETLDM "r4, r5, r6"
+
+ FUNC_END aeabi_dmul
+ FUNC_END muldf3
+
+ARM_FUNC_START divdf3
+ARM_FUNC_ALIAS aeabi_ddiv divdf3
+
+ do_push {r4, r5, r6, lr}
+
+ @ Mask out exponents, trap any zero/denormal/INF/NAN.
+ mov ip, #0xff
+ orr ip, ip, #0x700
+ ands r4, ip, xh, lsr #20
+ do_it ne, tte
+ COND(and,s,ne) r5, ip, yh, lsr #20
+ teqne r4, ip
+ teqne r5, ip
+ bleq LSYM(Ldv_s)
+
+ @ Subtract divisor exponent from dividend''s.
+ sub r4, r4, r5
+
+ @ Preserve final sign into lr.
+ eor lr, xh, yh
+
+ @ Convert mantissa to unsigned integer.
+ @ Dividend -> r5-r6, divisor -> yh-yl.
+ orrs r5, yl, yh, lsl #12
+ mov xh, xh, lsl #12
+ beq LSYM(Ldv_1)
+ mov yh, yh, lsl #12
+ mov r5, #0x10000000
+ orr yh, r5, yh, lsr #4
+ orr yh, yh, yl, lsr #24
+ mov yl, yl, lsl #8
+ orr r5, r5, xh, lsr #4
+ orr r5, r5, xl, lsr #24
+ mov r6, xl, lsl #8
+
+ @ Initialize xh with final sign bit.
+ and xh, lr, #0x80000000
+
+ @ Ensure result will land to known bit position.
+ @ Apply exponent bias accordingly.
+ cmp r5, yh
+ do_it eq
+ cmpeq r6, yl
+ adc r4, r4, #(255 - 2)
+ add r4, r4, #0x300
+ bcs 1f
+ movs yh, yh, lsr #1
+ mov yl, yl, rrx
+1:
+ @ Perform first subtraction to align result to a nibble.
+ subs r6, r6, yl
+ sbc r5, r5, yh
+ movs yh, yh, lsr #1
+ mov yl, yl, rrx
+ mov xl, #0x00100000
+ mov ip, #0x00080000
+
+ @ The actual division loop.
+1: subs lr, r6, yl
+ sbcs lr, r5, yh
+ do_it cs, tt
+ subcs r6, r6, yl
+ movcs r5, lr
+ orrcs xl, xl, ip
+ movs yh, yh, lsr #1
+ mov yl, yl, rrx
+ subs lr, r6, yl
+ sbcs lr, r5, yh
+ do_it cs, tt
+ subcs r6, r6, yl
+ movcs r5, lr
+ orrcs xl, xl, ip, lsr #1
+ movs yh, yh, lsr #1
+ mov yl, yl, rrx
+ subs lr, r6, yl
+ sbcs lr, r5, yh
+ do_it cs, tt
+ subcs r6, r6, yl
+ movcs r5, lr
+ orrcs xl, xl, ip, lsr #2
+ movs yh, yh, lsr #1
+ mov yl, yl, rrx
+ subs lr, r6, yl
+ sbcs lr, r5, yh
+ do_it cs, tt
+ subcs r6, r6, yl
+ movcs r5, lr
+ orrcs xl, xl, ip, lsr #3
+
+ orrs lr, r5, r6
+ beq 2f
+ mov r5, r5, lsl #4
+ orr r5, r5, r6, lsr #28
+ mov r6, r6, lsl #4
+ mov yh, yh, lsl #3
+ orr yh, yh, yl, lsr #29
+ mov yl, yl, lsl #3
+ movs ip, ip, lsr #4
+ bne 1b
+
+ @ We are done with a word of the result.
+ @ Loop again for the low word if this pass was for the high word.
+ tst xh, #0x00100000
+ bne 3f
+ orr xh, xh, xl
+ mov xl, #0
+ mov ip, #0x80000000
+ b 1b
+2:
+ @ Be sure result starts in the high word.
+ tst xh, #0x00100000
+ do_it eq, t
+ orreq xh, xh, xl
+ moveq xl, #0
+3:
+ @ Check exponent range for under/overflow.
+ subs ip, r4, #(254 - 1)
+ do_it hi
+ cmphi ip, #0x700
+ bhi LSYM(Lml_u)
+
+ @ Round the result, merge final exponent.
+ subs ip, r5, yh
+ do_it eq, t
+ COND(sub,s,eq) ip, r6, yl
+ COND(mov,s,eq) ip, xl, lsr #1
+ adcs xl, xl, #0
+ adc xh, xh, r4, lsl #20
+ RETLDM "r4, r5, r6"
+
+ @ Division by 0x1p*: shortcut a lot of code.
+LSYM(Ldv_1):
+ and lr, lr, #0x80000000
+ orr xh, lr, xh, lsr #12
+ adds r4, r4, ip, lsr #1
+ do_it gt, tt
+ COND(rsb,s,gt) r5, r4, ip
+ orrgt xh, xh, r4, lsl #20
+ RETLDM "r4, r5, r6" gt
+
+ orr xh, xh, #0x00100000
+ mov lr, #0
+ subs r4, r4, #1
+ b LSYM(Lml_u)
+
+ @ Result mightt need to be denormalized: put remainder bits
+ @ in lr for rounding considerations.
+LSYM(Ldv_u):
+ orr lr, r5, r6
+ b LSYM(Lml_u)
+
+ @ One or both arguments is either INF, NAN or zero.
+LSYM(Ldv_s):
+ and r5, ip, yh, lsr #20
+ teq r4, ip
+ do_it eq
+ teqeq r5, ip
+ beq LSYM(Lml_n) @ INF/NAN / INF/NAN -> NAN
+ teq r4, ip
+ bne 1f
+ orrs r4, xl, xh, lsl #12
+ bne LSYM(Lml_n) @ NAN / <anything> -> NAN
+ teq r5, ip
+ bne LSYM(Lml_i) @ INF / <anything> -> INF
+ mov xl, yl
+ mov xh, yh
+ b LSYM(Lml_n) @ INF / (INF or NAN) -> NAN
+1: teq r5, ip
+ bne 2f
+ orrs r5, yl, yh, lsl #12
+ beq LSYM(Lml_z) @ <anything> / INF -> 0
+ mov xl, yl
+ mov xh, yh
+ b LSYM(Lml_n) @ <anything> / NAN -> NAN
+2: @ If both are nonzero, we need to normalize and resume above.
+ orrs r6, xl, xh, lsl #1
+ do_it ne
+ COND(orr,s,ne) r6, yl, yh, lsl #1
+ bne LSYM(Lml_d)
+ @ One or both arguments are 0.
+ orrs r4, xl, xh, lsl #1
+ bne LSYM(Lml_i) @ <non_zero> / 0 -> INF
+ orrs r5, yl, yh, lsl #1
+ bne LSYM(Lml_z) @ 0 / <non_zero> -> 0
+ b LSYM(Lml_n) @ 0 / 0 -> NAN
+
+ FUNC_END aeabi_ddiv
+ FUNC_END divdf3
+
+#endif /* L_muldivdf3 */
+
+#ifdef L_arm_cmpdf2
+
+@ Note: only r0 (return value) and ip are clobbered here.
+
+ARM_FUNC_START gtdf2
+ARM_FUNC_ALIAS gedf2 gtdf2
+ mov ip, #-1
+ b 1f
+
+ARM_FUNC_START ltdf2
+ARM_FUNC_ALIAS ledf2 ltdf2
+ mov ip, #1
+ b 1f
+
+ARM_FUNC_START cmpdf2
+ARM_FUNC_ALIAS nedf2 cmpdf2
+ARM_FUNC_ALIAS eqdf2 cmpdf2
+ mov ip, #1 @ how should we specify unordered here?
+
+1: str ip, [sp, #-4]!
+
+ @ Trap any INF/NAN first.
+ mov ip, xh, lsl #1
+ mvns ip, ip, asr #21
+ mov ip, yh, lsl #1
+ do_it ne
+ COND(mvn,s,ne) ip, ip, asr #21
+ beq 3f
+
+ @ Test for equality.
+ @ Note that 0.0 is equal to -0.0.
+2: add sp, sp, #4
+ orrs ip, xl, xh, lsl #1 @ if x == 0.0 or -0.0
+ do_it eq, e
+ COND(orr,s,eq) ip, yl, yh, lsl #1 @ and y == 0.0 or -0.0
+ teqne xh, yh @ or xh == yh
+ do_it eq, tt
+ teqeq xl, yl @ and xl == yl
+ moveq r0, #0 @ then equal.
+ RETc(eq)
+
+ @ Clear C flag
+ cmn r0, #0
+
+ @ Compare sign,
+ teq xh, yh
+
+ @ Compare values if same sign
+ do_it pl
+ cmppl xh, yh
+ do_it eq
+ cmpeq xl, yl
+
+ @ Result:
+ do_it cs, e
+ movcs r0, yh, asr #31
+ mvncc r0, yh, asr #31
+ orr r0, r0, #1
+ RET
+
+ @ Look for a NAN.
+3: mov ip, xh, lsl #1
+ mvns ip, ip, asr #21
+ bne 4f
+ orrs ip, xl, xh, lsl #12
+ bne 5f @ x is NAN
+4: mov ip, yh, lsl #1
+ mvns ip, ip, asr #21
+ bne 2b
+ orrs ip, yl, yh, lsl #12
+ beq 2b @ y is not NAN
+5: ldr r0, [sp], #4 @ unordered return code
+ RET
+
+ FUNC_END gedf2
+ FUNC_END gtdf2
+ FUNC_END ledf2
+ FUNC_END ltdf2
+ FUNC_END nedf2
+ FUNC_END eqdf2
+ FUNC_END cmpdf2
+
+ARM_FUNC_START aeabi_cdrcmple
+
+ mov ip, r0
+ mov r0, r2
+ mov r2, ip
+ mov ip, r1
+ mov r1, r3
+ mov r3, ip
+ b 6f
+
+ARM_FUNC_START aeabi_cdcmpeq
+ARM_FUNC_ALIAS aeabi_cdcmple aeabi_cdcmpeq
+
+ @ The status-returning routines are required to preserve all
+ @ registers except ip, lr, and cpsr.
+6: do_push {r0, lr}
+ ARM_CALL cmpdf2
+ @ Set the Z flag correctly, and the C flag unconditionally.
+ cmp r0, #0
+ @ Clear the C flag if the return value was -1, indicating
+ @ that the first operand was smaller than the second.
+ do_it mi
+ cmnmi r0, #0
+ RETLDM "r0"
+
+ FUNC_END aeabi_cdcmple
+ FUNC_END aeabi_cdcmpeq
+ FUNC_END aeabi_cdrcmple
+
+ARM_FUNC_START aeabi_dcmpeq
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cdcmple
+ do_it eq, e
+ moveq r0, #1 @ Equal to.
+ movne r0, #0 @ Less than, greater than, or unordered.
+ RETLDM
+
+ FUNC_END aeabi_dcmpeq
+
+ARM_FUNC_START aeabi_dcmplt
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cdcmple
+ do_it cc, e
+ movcc r0, #1 @ Less than.
+ movcs r0, #0 @ Equal to, greater than, or unordered.
+ RETLDM
+
+ FUNC_END aeabi_dcmplt
+
+ARM_FUNC_START aeabi_dcmple
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cdcmple
+ do_it ls, e
+ movls r0, #1 @ Less than or equal to.
+ movhi r0, #0 @ Greater than or unordered.
+ RETLDM
+
+ FUNC_END aeabi_dcmple
+
+ARM_FUNC_START aeabi_dcmpge
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cdrcmple
+ do_it ls, e
+ movls r0, #1 @ Operand 2 is less than or equal to operand 1.
+ movhi r0, #0 @ Operand 2 greater than operand 1, or unordered.
+ RETLDM
+
+ FUNC_END aeabi_dcmpge
+
+ARM_FUNC_START aeabi_dcmpgt
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cdrcmple
+ do_it cc, e
+ movcc r0, #1 @ Operand 2 is less than operand 1.
+ movcs r0, #0 @ Operand 2 is greater than or equal to operand 1,
+ @ or they are unordered.
+ RETLDM
+
+ FUNC_END aeabi_dcmpgt
+
+#endif /* L_cmpdf2 */
+
+#ifdef L_arm_unorddf2
+
+ARM_FUNC_START unorddf2
+ARM_FUNC_ALIAS aeabi_dcmpun unorddf2
+
+ mov ip, xh, lsl #1
+ mvns ip, ip, asr #21
+ bne 1f
+ orrs ip, xl, xh, lsl #12
+ bne 3f @ x is NAN
+1: mov ip, yh, lsl #1
+ mvns ip, ip, asr #21
+ bne 2f
+ orrs ip, yl, yh, lsl #12
+ bne 3f @ y is NAN
+2: mov r0, #0 @ arguments are ordered.
+ RET
+
+3: mov r0, #1 @ arguments are unordered.
+ RET
+
+ FUNC_END aeabi_dcmpun
+ FUNC_END unorddf2
+
+#endif /* L_unorddf2 */
+
+#ifdef L_arm_fixdfsi
+
+ARM_FUNC_START fixdfsi
+ARM_FUNC_ALIAS aeabi_d2iz fixdfsi
+
+ @ check exponent range.
+ mov r2, xh, lsl #1
+ adds r2, r2, #(1 << 21)
+ bcs 2f @ value is INF or NAN
+ bpl 1f @ value is too small
+ mov r3, #(0xfffffc00 + 31)
+ subs r2, r3, r2, asr #21
+ bls 3f @ value is too large
+
+ @ scale value
+ mov r3, xh, lsl #11
+ orr r3, r3, #0x80000000
+ orr r3, r3, xl, lsr #21
+ tst xh, #0x80000000 @ the sign bit
+ shift1 lsr, r0, r3, r2
+ do_it ne
+ rsbne r0, r0, #0
+ RET
+
+1: mov r0, #0
+ RET
+
+2: orrs xl, xl, xh, lsl #12
+ bne 4f @ x is NAN.
+3: ands r0, xh, #0x80000000 @ the sign bit
+ do_it eq
+ moveq r0, #0x7fffffff @ maximum signed positive si
+ RET
+
+4: mov r0, #0 @ How should we convert NAN?
+ RET
+
+ FUNC_END aeabi_d2iz
+ FUNC_END fixdfsi
+
+#endif /* L_fixdfsi */
+
+#ifdef L_arm_fixunsdfsi
+
+ARM_FUNC_START fixunsdfsi
+ARM_FUNC_ALIAS aeabi_d2uiz fixunsdfsi
+
+ @ check exponent range.
+ movs r2, xh, lsl #1
+ bcs 1f @ value is negative
+ adds r2, r2, #(1 << 21)
+ bcs 2f @ value is INF or NAN
+ bpl 1f @ value is too small
+ mov r3, #(0xfffffc00 + 31)
+ subs r2, r3, r2, asr #21
+ bmi 3f @ value is too large
+
+ @ scale value
+ mov r3, xh, lsl #11
+ orr r3, r3, #0x80000000
+ orr r3, r3, xl, lsr #21
+ shift1 lsr, r0, r3, r2
+ RET
+
+1: mov r0, #0
+ RET
+
+2: orrs xl, xl, xh, lsl #12
+ bne 4f @ value is NAN.
+3: mov r0, #0xffffffff @ maximum unsigned si
+ RET
+
+4: mov r0, #0 @ How should we convert NAN?
+ RET
+
+ FUNC_END aeabi_d2uiz
+ FUNC_END fixunsdfsi
+
+#endif /* L_fixunsdfsi */
+
+#ifdef L_arm_truncdfsf2
+
+ARM_FUNC_START truncdfsf2
+ARM_FUNC_ALIAS aeabi_d2f truncdfsf2
+
+ @ check exponent range.
+ mov r2, xh, lsl #1
+ subs r3, r2, #((1023 - 127) << 21)
+ do_it cs, t
+ COND(sub,s,cs) ip, r3, #(1 << 21)
+ COND(rsb,s,cs) ip, ip, #(254 << 21)
+ bls 2f @ value is out of range
+
+1: @ shift and round mantissa
+ and ip, xh, #0x80000000
+ mov r2, xl, lsl #3
+ orr xl, ip, xl, lsr #29
+ cmp r2, #0x80000000
+ adc r0, xl, r3, lsl #2
+ do_it eq
+ biceq r0, r0, #1
+ RET
+
+2: @ either overflow or underflow
+ tst xh, #0x40000000
+ bne 3f @ overflow
+
+ @ check if denormalized value is possible
+ adds r2, r3, #(23 << 21)
+ do_it lt, t
+ andlt r0, xh, #0x80000000 @ too small, return signed 0.
+ RETc(lt)
+
+ @ denormalize value so we can resume with the code above afterwards.
+ orr xh, xh, #0x00100000
+ mov r2, r2, lsr #21
+ rsb r2, r2, #24
+ rsb ip, r2, #32
+#if defined(__thumb2__)
+ lsls r3, xl, ip
+#else
+ movs r3, xl, lsl ip
+#endif
+ shift1 lsr, xl, xl, r2
+ do_it ne
+ orrne xl, xl, #1 @ fold r3 for rounding considerations.
+ mov r3, xh, lsl #11
+ mov r3, r3, lsr #11
+ shiftop orr xl xl r3 lsl ip ip
+ shift1 lsr, r3, r3, r2
+ mov r3, r3, lsl #1
+ b 1b
+
+3: @ chech for NAN
+ mvns r3, r2, asr #21
+ bne 5f @ simple overflow
+ orrs r3, xl, xh, lsl #12
+ do_it ne, tt
+ movne r0, #0x7f000000
+ orrne r0, r0, #0x00c00000
+ RETc(ne) @ return NAN
+
+5: @ return INF with sign
+ and r0, xh, #0x80000000
+ orr r0, r0, #0x7f000000
+ orr r0, r0, #0x00800000
+ RET
+
+ FUNC_END aeabi_d2f
+ FUNC_END truncdfsf2
+
+#endif /* L_truncdfsf2 */
diff --git a/gcc-4.9/libgcc/config/arm/ieee754-sf.S b/gcc-4.9/libgcc/config/arm/ieee754-sf.S
new file mode 100644
index 000000000..c9bca4d25
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/ieee754-sf.S
@@ -0,0 +1,1033 @@
+/* ieee754-sf.S single-precision floating point support for ARM
+
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ Contributed by Nicolas Pitre (nico@cam.org)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * Notes:
+ *
+ * The goal of this code is to be as fast as possible. This is
+ * not meant to be easy to understand for the casual reader.
+ *
+ * Only the default rounding mode is intended for best performances.
+ * Exceptions aren't supported yet, but that can be added quite easily
+ * if necessary without impacting performances.
+ */
+
+#ifdef L_arm_negsf2
+
+ARM_FUNC_START negsf2
+ARM_FUNC_ALIAS aeabi_fneg negsf2
+
+ eor r0, r0, #0x80000000 @ flip sign bit
+ RET
+
+ FUNC_END aeabi_fneg
+ FUNC_END negsf2
+
+#endif
+
+#ifdef L_arm_addsubsf3
+
+ARM_FUNC_START aeabi_frsub
+
+ eor r0, r0, #0x80000000 @ flip sign bit of first arg
+ b 1f
+
+ARM_FUNC_START subsf3
+ARM_FUNC_ALIAS aeabi_fsub subsf3
+
+ eor r1, r1, #0x80000000 @ flip sign bit of second arg
+#if defined(__INTERWORKING_STUBS__)
+ b 1f @ Skip Thumb-code prologue
+#endif
+
+ARM_FUNC_START addsf3
+ARM_FUNC_ALIAS aeabi_fadd addsf3
+
+1: @ Look for zeroes, equal values, INF, or NAN.
+ movs r2, r0, lsl #1
+ do_it ne, ttt
+ COND(mov,s,ne) r3, r1, lsl #1
+ teqne r2, r3
+ COND(mvn,s,ne) ip, r2, asr #24
+ COND(mvn,s,ne) ip, r3, asr #24
+ beq LSYM(Lad_s)
+
+ @ Compute exponent difference. Make largest exponent in r2,
+ @ corresponding arg in r0, and positive exponent difference in r3.
+ mov r2, r2, lsr #24
+ rsbs r3, r2, r3, lsr #24
+ do_it gt, ttt
+ addgt r2, r2, r3
+ eorgt r1, r0, r1
+ eorgt r0, r1, r0
+ eorgt r1, r0, r1
+ do_it lt
+ rsblt r3, r3, #0
+
+ @ If exponent difference is too large, return largest argument
+ @ already in r0. We need up to 25 bit to handle proper rounding
+ @ of 0x1p25 - 1.1.
+ cmp r3, #25
+ do_it hi
+ RETc(hi)
+
+ @ Convert mantissa to signed integer.
+ tst r0, #0x80000000
+ orr r0, r0, #0x00800000
+ bic r0, r0, #0xff000000
+ do_it ne
+ rsbne r0, r0, #0
+ tst r1, #0x80000000
+ orr r1, r1, #0x00800000
+ bic r1, r1, #0xff000000
+ do_it ne
+ rsbne r1, r1, #0
+
+ @ If exponent == difference, one or both args were denormalized.
+ @ Since this is not common case, rescale them off line.
+ teq r2, r3
+ beq LSYM(Lad_d)
+LSYM(Lad_x):
+
+ @ Compensate for the exponent overlapping the mantissa MSB added later
+ sub r2, r2, #1
+
+ @ Shift and add second arg to first arg in r0.
+ @ Keep leftover bits into r1.
+ shiftop adds r0 r0 r1 asr r3 ip
+ rsb r3, r3, #32
+ shift1 lsl, r1, r1, r3
+
+ @ Keep absolute value in r0-r1, sign in r3 (the n bit was set above)
+ and r3, r0, #0x80000000
+ bpl LSYM(Lad_p)
+#if defined(__thumb2__)
+ negs r1, r1
+ sbc r0, r0, r0, lsl #1
+#else
+ rsbs r1, r1, #0
+ rsc r0, r0, #0
+#endif
+
+ @ Determine how to normalize the result.
+LSYM(Lad_p):
+ cmp r0, #0x00800000
+ bcc LSYM(Lad_a)
+ cmp r0, #0x01000000
+ bcc LSYM(Lad_e)
+
+ @ Result needs to be shifted right.
+ movs r0, r0, lsr #1
+ mov r1, r1, rrx
+ add r2, r2, #1
+
+ @ Make sure we did not bust our exponent.
+ cmp r2, #254
+ bhs LSYM(Lad_o)
+
+ @ Our result is now properly aligned into r0, remaining bits in r1.
+ @ Pack final result together.
+ @ Round with MSB of r1. If halfway between two numbers, round towards
+ @ LSB of r0 = 0.
+LSYM(Lad_e):
+ cmp r1, #0x80000000
+ adc r0, r0, r2, lsl #23
+ do_it eq
+ biceq r0, r0, #1
+ orr r0, r0, r3
+ RET
+
+ @ Result must be shifted left and exponent adjusted.
+LSYM(Lad_a):
+ movs r1, r1, lsl #1
+ adc r0, r0, r0
+ tst r0, #0x00800000
+ sub r2, r2, #1
+ bne LSYM(Lad_e)
+
+ @ No rounding necessary since r1 will always be 0 at this point.
+LSYM(Lad_l):
+
+#if __ARM_ARCH__ < 5
+
+ movs ip, r0, lsr #12
+ moveq r0, r0, lsl #12
+ subeq r2, r2, #12
+ tst r0, #0x00ff0000
+ moveq r0, r0, lsl #8
+ subeq r2, r2, #8
+ tst r0, #0x00f00000
+ moveq r0, r0, lsl #4
+ subeq r2, r2, #4
+ tst r0, #0x00c00000
+ moveq r0, r0, lsl #2
+ subeq r2, r2, #2
+ cmp r0, #0x00800000
+ movcc r0, r0, lsl #1
+ sbcs r2, r2, #0
+
+#else
+
+ clz ip, r0
+ sub ip, ip, #8
+ subs r2, r2, ip
+ shift1 lsl, r0, r0, ip
+
+#endif
+
+ @ Final result with sign
+ @ If exponent negative, denormalize result.
+ do_it ge, et
+ addge r0, r0, r2, lsl #23
+ rsblt r2, r2, #0
+ orrge r0, r0, r3
+#if defined(__thumb2__)
+ do_it lt, t
+ lsrlt r0, r0, r2
+ orrlt r0, r3, r0
+#else
+ orrlt r0, r3, r0, lsr r2
+#endif
+ RET
+
+ @ Fixup and adjust bit position for denormalized arguments.
+ @ Note that r2 must not remain equal to 0.
+LSYM(Lad_d):
+ teq r2, #0
+ eor r1, r1, #0x00800000
+ do_it eq, te
+ eoreq r0, r0, #0x00800000
+ addeq r2, r2, #1
+ subne r3, r3, #1
+ b LSYM(Lad_x)
+
+LSYM(Lad_s):
+ mov r3, r1, lsl #1
+
+ mvns ip, r2, asr #24
+ do_it ne
+ COND(mvn,s,ne) ip, r3, asr #24
+ beq LSYM(Lad_i)
+
+ teq r2, r3
+ beq 1f
+
+ @ Result is x + 0.0 = x or 0.0 + y = y.
+ teq r2, #0
+ do_it eq
+ moveq r0, r1
+ RET
+
+1: teq r0, r1
+
+ @ Result is x - x = 0.
+ do_it ne, t
+ movne r0, #0
+ RETc(ne)
+
+ @ Result is x + x = 2x.
+ tst r2, #0xff000000
+ bne 2f
+ movs r0, r0, lsl #1
+ do_it cs
+ orrcs r0, r0, #0x80000000
+ RET
+2: adds r2, r2, #(2 << 24)
+ do_it cc, t
+ addcc r0, r0, #(1 << 23)
+ RETc(cc)
+ and r3, r0, #0x80000000
+
+ @ Overflow: return INF.
+LSYM(Lad_o):
+ orr r0, r3, #0x7f000000
+ orr r0, r0, #0x00800000
+ RET
+
+ @ At least one of r0/r1 is INF/NAN.
+ @ if r0 != INF/NAN: return r1 (which is INF/NAN)
+ @ if r1 != INF/NAN: return r0 (which is INF/NAN)
+ @ if r0 or r1 is NAN: return NAN
+ @ if opposite sign: return NAN
+ @ otherwise return r0 (which is INF or -INF)
+LSYM(Lad_i):
+ mvns r2, r2, asr #24
+ do_it ne, et
+ movne r0, r1
+ COND(mvn,s,eq) r3, r3, asr #24
+ movne r1, r0
+ movs r2, r0, lsl #9
+ do_it eq, te
+ COND(mov,s,eq) r3, r1, lsl #9
+ teqeq r0, r1
+ orrne r0, r0, #0x00400000 @ quiet NAN
+ RET
+
+ FUNC_END aeabi_frsub
+ FUNC_END aeabi_fadd
+ FUNC_END addsf3
+ FUNC_END aeabi_fsub
+ FUNC_END subsf3
+
+ARM_FUNC_START floatunsisf
+ARM_FUNC_ALIAS aeabi_ui2f floatunsisf
+
+ mov r3, #0
+ b 1f
+
+ARM_FUNC_START floatsisf
+ARM_FUNC_ALIAS aeabi_i2f floatsisf
+
+ ands r3, r0, #0x80000000
+ do_it mi
+ rsbmi r0, r0, #0
+
+1: movs ip, r0
+ do_it eq
+ RETc(eq)
+
+ @ Add initial exponent to sign
+ orr r3, r3, #((127 + 23) << 23)
+
+ .ifnc ah, r0
+ mov ah, r0
+ .endif
+ mov al, #0
+ b 2f
+
+ FUNC_END aeabi_i2f
+ FUNC_END floatsisf
+ FUNC_END aeabi_ui2f
+ FUNC_END floatunsisf
+
+ARM_FUNC_START floatundisf
+ARM_FUNC_ALIAS aeabi_ul2f floatundisf
+
+ orrs r2, r0, r1
+ do_it eq
+ RETc(eq)
+
+ mov r3, #0
+ b 1f
+
+ARM_FUNC_START floatdisf
+ARM_FUNC_ALIAS aeabi_l2f floatdisf
+
+ orrs r2, r0, r1
+ do_it eq
+ RETc(eq)
+
+ ands r3, ah, #0x80000000 @ sign bit in r3
+ bpl 1f
+#if defined(__thumb2__)
+ negs al, al
+ sbc ah, ah, ah, lsl #1
+#else
+ rsbs al, al, #0
+ rsc ah, ah, #0
+#endif
+1:
+ movs ip, ah
+ do_it eq, tt
+ moveq ip, al
+ moveq ah, al
+ moveq al, #0
+
+ @ Add initial exponent to sign
+ orr r3, r3, #((127 + 23 + 32) << 23)
+ do_it eq
+ subeq r3, r3, #(32 << 23)
+2: sub r3, r3, #(1 << 23)
+
+#if __ARM_ARCH__ < 5
+
+ mov r2, #23
+ cmp ip, #(1 << 16)
+ do_it hs, t
+ movhs ip, ip, lsr #16
+ subhs r2, r2, #16
+ cmp ip, #(1 << 8)
+ do_it hs, t
+ movhs ip, ip, lsr #8
+ subhs r2, r2, #8
+ cmp ip, #(1 << 4)
+ do_it hs, t
+ movhs ip, ip, lsr #4
+ subhs r2, r2, #4
+ cmp ip, #(1 << 2)
+ do_it hs, e
+ subhs r2, r2, #2
+ sublo r2, r2, ip, lsr #1
+ subs r2, r2, ip, lsr #3
+
+#else
+
+ clz r2, ip
+ subs r2, r2, #8
+
+#endif
+
+ sub r3, r3, r2, lsl #23
+ blt 3f
+
+ shiftop add r3 r3 ah lsl r2 ip
+ shift1 lsl, ip, al, r2
+ rsb r2, r2, #32
+ cmp ip, #0x80000000
+ shiftop adc r0 r3 al lsr r2 r2
+ do_it eq
+ biceq r0, r0, #1
+ RET
+
+3: add r2, r2, #32
+ shift1 lsl, ip, ah, r2
+ rsb r2, r2, #32
+ orrs al, al, ip, lsl #1
+ shiftop adc r0 r3 ah lsr r2 r2
+ do_it eq
+ biceq r0, r0, ip, lsr #31
+ RET
+
+ FUNC_END floatdisf
+ FUNC_END aeabi_l2f
+ FUNC_END floatundisf
+ FUNC_END aeabi_ul2f
+
+#endif /* L_addsubsf3 */
+
+#ifdef L_arm_muldivsf3
+
+ARM_FUNC_START mulsf3
+ARM_FUNC_ALIAS aeabi_fmul mulsf3
+
+ @ Mask out exponents, trap any zero/denormal/INF/NAN.
+ mov ip, #0xff
+ ands r2, ip, r0, lsr #23
+ do_it ne, tt
+ COND(and,s,ne) r3, ip, r1, lsr #23
+ teqne r2, ip
+ teqne r3, ip
+ beq LSYM(Lml_s)
+LSYM(Lml_x):
+
+ @ Add exponents together
+ add r2, r2, r3
+
+ @ Determine final sign.
+ eor ip, r0, r1
+
+ @ Convert mantissa to unsigned integer.
+ @ If power of two, branch to a separate path.
+ @ Make up for final alignment.
+ movs r0, r0, lsl #9
+ do_it ne
+ COND(mov,s,ne) r1, r1, lsl #9
+ beq LSYM(Lml_1)
+ mov r3, #0x08000000
+ orr r0, r3, r0, lsr #5
+ orr r1, r3, r1, lsr #5
+
+#if __ARM_ARCH__ < 4
+
+ @ Put sign bit in r3, which will be restored into r0 later.
+ and r3, ip, #0x80000000
+
+ @ Well, no way to make it shorter without the umull instruction.
+ do_push {r3, r4, r5}
+ mov r4, r0, lsr #16
+ mov r5, r1, lsr #16
+ bic r0, r0, r4, lsl #16
+ bic r1, r1, r5, lsl #16
+ mul ip, r4, r5
+ mul r3, r0, r1
+ mul r0, r5, r0
+ mla r0, r4, r1, r0
+ adds r3, r3, r0, lsl #16
+ adc r1, ip, r0, lsr #16
+ do_pop {r0, r4, r5}
+
+#else
+
+ @ The actual multiplication.
+ umull r3, r1, r0, r1
+
+ @ Put final sign in r0.
+ and r0, ip, #0x80000000
+
+#endif
+
+ @ Adjust result upon the MSB position.
+ cmp r1, #(1 << 23)
+ do_it cc, tt
+ movcc r1, r1, lsl #1
+ orrcc r1, r1, r3, lsr #31
+ movcc r3, r3, lsl #1
+
+ @ Add sign to result.
+ orr r0, r0, r1
+
+ @ Apply exponent bias, check for under/overflow.
+ sbc r2, r2, #127
+ cmp r2, #(254 - 1)
+ bhi LSYM(Lml_u)
+
+ @ Round the result, merge final exponent.
+ cmp r3, #0x80000000
+ adc r0, r0, r2, lsl #23
+ do_it eq
+ biceq r0, r0, #1
+ RET
+
+ @ Multiplication by 0x1p*: let''s shortcut a lot of code.
+LSYM(Lml_1):
+ teq r0, #0
+ and ip, ip, #0x80000000
+ do_it eq
+ moveq r1, r1, lsl #9
+ orr r0, ip, r0, lsr #9
+ orr r0, r0, r1, lsr #9
+ subs r2, r2, #127
+ do_it gt, tt
+ COND(rsb,s,gt) r3, r2, #255
+ orrgt r0, r0, r2, lsl #23
+ RETc(gt)
+
+ @ Under/overflow: fix things up for the code below.
+ orr r0, r0, #0x00800000
+ mov r3, #0
+ subs r2, r2, #1
+
+LSYM(Lml_u):
+ @ Overflow?
+ bgt LSYM(Lml_o)
+
+ @ Check if denormalized result is possible, otherwise return signed 0.
+ cmn r2, #(24 + 1)
+ do_it le, t
+ bicle r0, r0, #0x7fffffff
+ RETc(le)
+
+ @ Shift value right, round, etc.
+ rsb r2, r2, #0
+ movs r1, r0, lsl #1
+ shift1 lsr, r1, r1, r2
+ rsb r2, r2, #32
+ shift1 lsl, ip, r0, r2
+ movs r0, r1, rrx
+ adc r0, r0, #0
+ orrs r3, r3, ip, lsl #1
+ do_it eq
+ biceq r0, r0, ip, lsr #31
+ RET
+
+ @ One or both arguments are denormalized.
+ @ Scale them leftwards and preserve sign bit.
+LSYM(Lml_d):
+ teq r2, #0
+ and ip, r0, #0x80000000
+1: do_it eq, tt
+ moveq r0, r0, lsl #1
+ tsteq r0, #0x00800000
+ subeq r2, r2, #1
+ beq 1b
+ orr r0, r0, ip
+ teq r3, #0
+ and ip, r1, #0x80000000
+2: do_it eq, tt
+ moveq r1, r1, lsl #1
+ tsteq r1, #0x00800000
+ subeq r3, r3, #1
+ beq 2b
+ orr r1, r1, ip
+ b LSYM(Lml_x)
+
+LSYM(Lml_s):
+ @ Isolate the INF and NAN cases away
+ and r3, ip, r1, lsr #23
+ teq r2, ip
+ do_it ne
+ teqne r3, ip
+ beq 1f
+
+ @ Here, one or more arguments are either denormalized or zero.
+ bics ip, r0, #0x80000000
+ do_it ne
+ COND(bic,s,ne) ip, r1, #0x80000000
+ bne LSYM(Lml_d)
+
+ @ Result is 0, but determine sign anyway.
+LSYM(Lml_z):
+ eor r0, r0, r1
+ bic r0, r0, #0x7fffffff
+ RET
+
+1: @ One or both args are INF or NAN.
+ teq r0, #0x0
+ do_it ne, ett
+ teqne r0, #0x80000000
+ moveq r0, r1
+ teqne r1, #0x0
+ teqne r1, #0x80000000
+ beq LSYM(Lml_n) @ 0 * INF or INF * 0 -> NAN
+ teq r2, ip
+ bne 1f
+ movs r2, r0, lsl #9
+ bne LSYM(Lml_n) @ NAN * <anything> -> NAN
+1: teq r3, ip
+ bne LSYM(Lml_i)
+ movs r3, r1, lsl #9
+ do_it ne
+ movne r0, r1
+ bne LSYM(Lml_n) @ <anything> * NAN -> NAN
+
+ @ Result is INF, but we need to determine its sign.
+LSYM(Lml_i):
+ eor r0, r0, r1
+
+ @ Overflow: return INF (sign already in r0).
+LSYM(Lml_o):
+ and r0, r0, #0x80000000
+ orr r0, r0, #0x7f000000
+ orr r0, r0, #0x00800000
+ RET
+
+ @ Return a quiet NAN.
+LSYM(Lml_n):
+ orr r0, r0, #0x7f000000
+ orr r0, r0, #0x00c00000
+ RET
+
+ FUNC_END aeabi_fmul
+ FUNC_END mulsf3
+
+ARM_FUNC_START divsf3
+ARM_FUNC_ALIAS aeabi_fdiv divsf3
+
+ @ Mask out exponents, trap any zero/denormal/INF/NAN.
+ mov ip, #0xff
+ ands r2, ip, r0, lsr #23
+ do_it ne, tt
+ COND(and,s,ne) r3, ip, r1, lsr #23
+ teqne r2, ip
+ teqne r3, ip
+ beq LSYM(Ldv_s)
+LSYM(Ldv_x):
+
+ @ Subtract divisor exponent from dividend''s
+ sub r2, r2, r3
+
+ @ Preserve final sign into ip.
+ eor ip, r0, r1
+
+ @ Convert mantissa to unsigned integer.
+ @ Dividend -> r3, divisor -> r1.
+ movs r1, r1, lsl #9
+ mov r0, r0, lsl #9
+ beq LSYM(Ldv_1)
+ mov r3, #0x10000000
+ orr r1, r3, r1, lsr #4
+ orr r3, r3, r0, lsr #4
+
+ @ Initialize r0 (result) with final sign bit.
+ and r0, ip, #0x80000000
+
+ @ Ensure result will land to known bit position.
+ @ Apply exponent bias accordingly.
+ cmp r3, r1
+ do_it cc
+ movcc r3, r3, lsl #1
+ adc r2, r2, #(127 - 2)
+
+ @ The actual division loop.
+ mov ip, #0x00800000
+1: cmp r3, r1
+ do_it cs, t
+ subcs r3, r3, r1
+ orrcs r0, r0, ip
+ cmp r3, r1, lsr #1
+ do_it cs, t
+ subcs r3, r3, r1, lsr #1
+ orrcs r0, r0, ip, lsr #1
+ cmp r3, r1, lsr #2
+ do_it cs, t
+ subcs r3, r3, r1, lsr #2
+ orrcs r0, r0, ip, lsr #2
+ cmp r3, r1, lsr #3
+ do_it cs, t
+ subcs r3, r3, r1, lsr #3
+ orrcs r0, r0, ip, lsr #3
+ movs r3, r3, lsl #4
+ do_it ne
+ COND(mov,s,ne) ip, ip, lsr #4
+ bne 1b
+
+ @ Check exponent for under/overflow.
+ cmp r2, #(254 - 1)
+ bhi LSYM(Lml_u)
+
+ @ Round the result, merge final exponent.
+ cmp r3, r1
+ adc r0, r0, r2, lsl #23
+ do_it eq
+ biceq r0, r0, #1
+ RET
+
+ @ Division by 0x1p*: let''s shortcut a lot of code.
+LSYM(Ldv_1):
+ and ip, ip, #0x80000000
+ orr r0, ip, r0, lsr #9
+ adds r2, r2, #127
+ do_it gt, tt
+ COND(rsb,s,gt) r3, r2, #255
+ orrgt r0, r0, r2, lsl #23
+ RETc(gt)
+
+ orr r0, r0, #0x00800000
+ mov r3, #0
+ subs r2, r2, #1
+ b LSYM(Lml_u)
+
+ @ One or both arguments are denormalized.
+ @ Scale them leftwards and preserve sign bit.
+LSYM(Ldv_d):
+ teq r2, #0
+ and ip, r0, #0x80000000
+1: do_it eq, tt
+ moveq r0, r0, lsl #1
+ tsteq r0, #0x00800000
+ subeq r2, r2, #1
+ beq 1b
+ orr r0, r0, ip
+ teq r3, #0
+ and ip, r1, #0x80000000
+2: do_it eq, tt
+ moveq r1, r1, lsl #1
+ tsteq r1, #0x00800000
+ subeq r3, r3, #1
+ beq 2b
+ orr r1, r1, ip
+ b LSYM(Ldv_x)
+
+ @ One or both arguments are either INF, NAN, zero or denormalized.
+LSYM(Ldv_s):
+ and r3, ip, r1, lsr #23
+ teq r2, ip
+ bne 1f
+ movs r2, r0, lsl #9
+ bne LSYM(Lml_n) @ NAN / <anything> -> NAN
+ teq r3, ip
+ bne LSYM(Lml_i) @ INF / <anything> -> INF
+ mov r0, r1
+ b LSYM(Lml_n) @ INF / (INF or NAN) -> NAN
+1: teq r3, ip
+ bne 2f
+ movs r3, r1, lsl #9
+ beq LSYM(Lml_z) @ <anything> / INF -> 0
+ mov r0, r1
+ b LSYM(Lml_n) @ <anything> / NAN -> NAN
+2: @ If both are nonzero, we need to normalize and resume above.
+ bics ip, r0, #0x80000000
+ do_it ne
+ COND(bic,s,ne) ip, r1, #0x80000000
+ bne LSYM(Ldv_d)
+ @ One or both arguments are zero.
+ bics r2, r0, #0x80000000
+ bne LSYM(Lml_i) @ <non_zero> / 0 -> INF
+ bics r3, r1, #0x80000000
+ bne LSYM(Lml_z) @ 0 / <non_zero> -> 0
+ b LSYM(Lml_n) @ 0 / 0 -> NAN
+
+ FUNC_END aeabi_fdiv
+ FUNC_END divsf3
+
+#endif /* L_muldivsf3 */
+
+#ifdef L_arm_cmpsf2
+
+ @ The return value in r0 is
+ @
+ @ 0 if the operands are equal
+ @ 1 if the first operand is greater than the second, or
+ @ the operands are unordered and the operation is
+ @ CMP, LT, LE, NE, or EQ.
+ @ -1 if the first operand is less than the second, or
+ @ the operands are unordered and the operation is GT
+ @ or GE.
+ @
+ @ The Z flag will be set iff the operands are equal.
+ @
+ @ The following registers are clobbered by this function:
+ @ ip, r0, r1, r2, r3
+
+ARM_FUNC_START gtsf2
+ARM_FUNC_ALIAS gesf2 gtsf2
+ mov ip, #-1
+ b 1f
+
+ARM_FUNC_START ltsf2
+ARM_FUNC_ALIAS lesf2 ltsf2
+ mov ip, #1
+ b 1f
+
+ARM_FUNC_START cmpsf2
+ARM_FUNC_ALIAS nesf2 cmpsf2
+ARM_FUNC_ALIAS eqsf2 cmpsf2
+ mov ip, #1 @ how should we specify unordered here?
+
+1: str ip, [sp, #-4]!
+
+ @ Trap any INF/NAN first.
+ mov r2, r0, lsl #1
+ mov r3, r1, lsl #1
+ mvns ip, r2, asr #24
+ do_it ne
+ COND(mvn,s,ne) ip, r3, asr #24
+ beq 3f
+
+ @ Compare values.
+ @ Note that 0.0 is equal to -0.0.
+2: add sp, sp, #4
+ orrs ip, r2, r3, lsr #1 @ test if both are 0, clear C flag
+ do_it ne
+ teqne r0, r1 @ if not 0 compare sign
+ do_it pl
+ COND(sub,s,pl) r0, r2, r3 @ if same sign compare values, set r0
+
+ @ Result:
+ do_it hi
+ movhi r0, r1, asr #31
+ do_it lo
+ mvnlo r0, r1, asr #31
+ do_it ne
+ orrne r0, r0, #1
+ RET
+
+ @ Look for a NAN.
+3: mvns ip, r2, asr #24
+ bne 4f
+ movs ip, r0, lsl #9
+ bne 5f @ r0 is NAN
+4: mvns ip, r3, asr #24
+ bne 2b
+ movs ip, r1, lsl #9
+ beq 2b @ r1 is not NAN
+5: ldr r0, [sp], #4 @ return unordered code.
+ RET
+
+ FUNC_END gesf2
+ FUNC_END gtsf2
+ FUNC_END lesf2
+ FUNC_END ltsf2
+ FUNC_END nesf2
+ FUNC_END eqsf2
+ FUNC_END cmpsf2
+
+ARM_FUNC_START aeabi_cfrcmple
+
+ mov ip, r0
+ mov r0, r1
+ mov r1, ip
+ b 6f
+
+ARM_FUNC_START aeabi_cfcmpeq
+ARM_FUNC_ALIAS aeabi_cfcmple aeabi_cfcmpeq
+
+ @ The status-returning routines are required to preserve all
+ @ registers except ip, lr, and cpsr.
+6: do_push {r0, r1, r2, r3, lr}
+ ARM_CALL cmpsf2
+ @ Set the Z flag correctly, and the C flag unconditionally.
+ cmp r0, #0
+ @ Clear the C flag if the return value was -1, indicating
+ @ that the first operand was smaller than the second.
+ do_it mi
+ cmnmi r0, #0
+ RETLDM "r0, r1, r2, r3"
+
+ FUNC_END aeabi_cfcmple
+ FUNC_END aeabi_cfcmpeq
+ FUNC_END aeabi_cfrcmple
+
+ARM_FUNC_START aeabi_fcmpeq
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cfcmple
+ do_it eq, e
+ moveq r0, #1 @ Equal to.
+ movne r0, #0 @ Less than, greater than, or unordered.
+ RETLDM
+
+ FUNC_END aeabi_fcmpeq
+
+ARM_FUNC_START aeabi_fcmplt
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cfcmple
+ do_it cc, e
+ movcc r0, #1 @ Less than.
+ movcs r0, #0 @ Equal to, greater than, or unordered.
+ RETLDM
+
+ FUNC_END aeabi_fcmplt
+
+ARM_FUNC_START aeabi_fcmple
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cfcmple
+ do_it ls, e
+ movls r0, #1 @ Less than or equal to.
+ movhi r0, #0 @ Greater than or unordered.
+ RETLDM
+
+ FUNC_END aeabi_fcmple
+
+ARM_FUNC_START aeabi_fcmpge
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cfrcmple
+ do_it ls, e
+ movls r0, #1 @ Operand 2 is less than or equal to operand 1.
+ movhi r0, #0 @ Operand 2 greater than operand 1, or unordered.
+ RETLDM
+
+ FUNC_END aeabi_fcmpge
+
+ARM_FUNC_START aeabi_fcmpgt
+
+ str lr, [sp, #-8]!
+ ARM_CALL aeabi_cfrcmple
+ do_it cc, e
+ movcc r0, #1 @ Operand 2 is less than operand 1.
+ movcs r0, #0 @ Operand 2 is greater than or equal to operand 1,
+ @ or they are unordered.
+ RETLDM
+
+ FUNC_END aeabi_fcmpgt
+
+#endif /* L_cmpsf2 */
+
+#ifdef L_arm_unordsf2
+
+ARM_FUNC_START unordsf2
+ARM_FUNC_ALIAS aeabi_fcmpun unordsf2
+
+ mov r2, r0, lsl #1
+ mov r3, r1, lsl #1
+ mvns ip, r2, asr #24
+ bne 1f
+ movs ip, r0, lsl #9
+ bne 3f @ r0 is NAN
+1: mvns ip, r3, asr #24
+ bne 2f
+ movs ip, r1, lsl #9
+ bne 3f @ r1 is NAN
+2: mov r0, #0 @ arguments are ordered.
+ RET
+3: mov r0, #1 @ arguments are unordered.
+ RET
+
+ FUNC_END aeabi_fcmpun
+ FUNC_END unordsf2
+
+#endif /* L_unordsf2 */
+
+#ifdef L_arm_fixsfsi
+
+ARM_FUNC_START fixsfsi
+ARM_FUNC_ALIAS aeabi_f2iz fixsfsi
+
+ @ check exponent range.
+ mov r2, r0, lsl #1
+ cmp r2, #(127 << 24)
+ bcc 1f @ value is too small
+ mov r3, #(127 + 31)
+ subs r2, r3, r2, lsr #24
+ bls 2f @ value is too large
+
+ @ scale value
+ mov r3, r0, lsl #8
+ orr r3, r3, #0x80000000
+ tst r0, #0x80000000 @ the sign bit
+ shift1 lsr, r0, r3, r2
+ do_it ne
+ rsbne r0, r0, #0
+ RET
+
+1: mov r0, #0
+ RET
+
+2: cmp r2, #(127 + 31 - 0xff)
+ bne 3f
+ movs r2, r0, lsl #9
+ bne 4f @ r0 is NAN.
+3: ands r0, r0, #0x80000000 @ the sign bit
+ do_it eq
+ moveq r0, #0x7fffffff @ the maximum signed positive si
+ RET
+
+4: mov r0, #0 @ What should we convert NAN to?
+ RET
+
+ FUNC_END aeabi_f2iz
+ FUNC_END fixsfsi
+
+#endif /* L_fixsfsi */
+
+#ifdef L_arm_fixunssfsi
+
+ARM_FUNC_START fixunssfsi
+ARM_FUNC_ALIAS aeabi_f2uiz fixunssfsi
+
+ @ check exponent range.
+ movs r2, r0, lsl #1
+ bcs 1f @ value is negative
+ cmp r2, #(127 << 24)
+ bcc 1f @ value is too small
+ mov r3, #(127 + 31)
+ subs r2, r3, r2, lsr #24
+ bmi 2f @ value is too large
+
+ @ scale the value
+ mov r3, r0, lsl #8
+ orr r3, r3, #0x80000000
+ shift1 lsr, r0, r3, r2
+ RET
+
+1: mov r0, #0
+ RET
+
+2: cmp r2, #(127 + 31 - 0xff)
+ bne 3f
+ movs r2, r0, lsl #9
+ bne 4f @ r0 is NAN.
+3: mov r0, #0xffffffff @ maximum unsigned si
+ RET
+
+4: mov r0, #0 @ What should we convert NAN to?
+ RET
+
+ FUNC_END aeabi_f2uiz
+ FUNC_END fixunssfsi
+
+#endif /* L_fixunssfsi */
diff --git a/gcc-4.9/libgcc/config/arm/lib1funcs.S b/gcc-4.9/libgcc/config/arm/lib1funcs.S
new file mode 100644
index 000000000..b617137e2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/lib1funcs.S
@@ -0,0 +1,1958 @@
+@ libgcc routines for ARM cpu.
+@ Division routines, written by Richard Earnshaw, (rearnsha@armltd.co.uk)
+
+/* Copyright (C) 1995-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* An executable stack is *not* required for these functions. */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif /* __ELF__ and __linux__ */
+
+#ifdef __ARM_EABI__
+/* Some attributes that are common to all routines in this file. */
+ /* Tag_ABI_align_needed: This code does not require 8-byte
+ alignment from the caller. */
+ /* .eabi_attribute 24, 0 -- default setting. */
+ /* Tag_ABI_align_preserved: This code preserves 8-byte
+ alignment in any callee. */
+ .eabi_attribute 25, 1
+#endif /* __ARM_EABI__ */
+/* ------------------------------------------------------------------------ */
+
+/* We need to know what prefix to add to function names. */
+
+#ifndef __USER_LABEL_PREFIX__
+#error __USER_LABEL_PREFIX__ not defined
+#endif
+
+/* ANSI concatenation macros. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels. */
+
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+#ifdef __ELF__
+#ifdef __thumb__
+#define __PLT__ /* Not supported in Thumb assembler (for now). */
+#elif defined __vxworks && !defined __PIC__
+#define __PLT__ /* Not supported by the kernel loader. */
+#else
+#define __PLT__ (PLT)
+#endif
+#define TYPE(x) .type SYM(x),function
+#define SIZE(x) .size SYM(x), . - SYM(x)
+#define LSYM(x) .x
+#else
+#define __PLT__
+#define TYPE(x)
+#define SIZE(x)
+#define LSYM(x) x
+#endif
+
+/* Function end macros. Variants for interworking. */
+
+#if defined(__ARM_ARCH_2__)
+# define __ARM_ARCH__ 2
+#endif
+
+#if defined(__ARM_ARCH_3__)
+# define __ARM_ARCH__ 3
+#endif
+
+#if defined(__ARM_ARCH_3M__) || defined(__ARM_ARCH_4__) \
+ || defined(__ARM_ARCH_4T__)
+/* We use __ARM_ARCH__ set to 4 here, but in reality it's any processor with
+ long multiply instructions. That includes v3M. */
+# define __ARM_ARCH__ 4
+#endif
+
+#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
+ || defined(__ARM_ARCH_5TEJ__)
+# define __ARM_ARCH__ 5
+#endif
+
+#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
+ || defined(__ARM_ARCH_6M__)
+# define __ARM_ARCH__ 6
+#endif
+
+#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
+ || defined(__ARM_ARCH_7EM__)
+# define __ARM_ARCH__ 7
+#endif
+
+#if defined(__ARM_ARCH_8A__)
+# define __ARM_ARCH__ 8
+#endif
+
+#ifndef __ARM_ARCH__
+#error Unable to determine architecture.
+#endif
+
+/* There are times when we might prefer Thumb1 code even if ARM code is
+ permitted, for example, the code might be smaller, or there might be
+ interworking problems with switching to ARM state if interworking is
+ disabled. */
+#if (defined(__thumb__) \
+ && !defined(__thumb2__) \
+ && (!defined(__THUMB_INTERWORK__) \
+ || defined (__OPTIMIZE_SIZE__) \
+ || defined(__ARM_ARCH_6M__)))
+# define __prefer_thumb__
+#endif
+
+/* How to return from a function call depends on the architecture variant. */
+
+#if (__ARM_ARCH__ > 4) || defined(__ARM_ARCH_4T__)
+
+# define RET bx lr
+# define RETc(x) bx##x lr
+
+/* Special precautions for interworking on armv4t. */
+# if (__ARM_ARCH__ == 4)
+
+/* Always use bx, not ldr pc. */
+# if (defined(__thumb__) || defined(__THUMB_INTERWORK__))
+# define __INTERWORKING__
+# endif /* __THUMB__ || __THUMB_INTERWORK__ */
+
+/* Include thumb stub before arm mode code. */
+# if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
+# define __INTERWORKING_STUBS__
+# endif /* __thumb__ && !__THUMB_INTERWORK__ */
+
+#endif /* __ARM_ARCH == 4 */
+
+#else
+
+# define RET mov pc, lr
+# define RETc(x) mov##x pc, lr
+
+#endif
+
+.macro cfi_pop advance, reg, cfa_offset
+#ifdef __ELF__
+ .pushsection .debug_frame
+ .byte 0x4 /* DW_CFA_advance_loc4 */
+ .4byte \advance
+ .byte (0xc0 | \reg) /* DW_CFA_restore */
+ .byte 0xe /* DW_CFA_def_cfa_offset */
+ .uleb128 \cfa_offset
+ .popsection
+#endif
+.endm
+.macro cfi_push advance, reg, offset, cfa_offset
+#ifdef __ELF__
+ .pushsection .debug_frame
+ .byte 0x4 /* DW_CFA_advance_loc4 */
+ .4byte \advance
+ .byte (0x80 | \reg) /* DW_CFA_offset */
+ .uleb128 (\offset / -4)
+ .byte 0xe /* DW_CFA_def_cfa_offset */
+ .uleb128 \cfa_offset
+ .popsection
+#endif
+.endm
+.macro cfi_start start_label, end_label
+#ifdef __ELF__
+ .pushsection .debug_frame
+LSYM(Lstart_frame):
+ .4byte LSYM(Lend_cie) - LSYM(Lstart_cie) @ Length of CIE
+LSYM(Lstart_cie):
+ .4byte 0xffffffff @ CIE Identifier Tag
+ .byte 0x1 @ CIE Version
+ .ascii "\0" @ CIE Augmentation
+ .uleb128 0x1 @ CIE Code Alignment Factor
+ .sleb128 -4 @ CIE Data Alignment Factor
+ .byte 0xe @ CIE RA Column
+ .byte 0xc @ DW_CFA_def_cfa
+ .uleb128 0xd
+ .uleb128 0x0
+
+ .align 2
+LSYM(Lend_cie):
+ .4byte LSYM(Lend_fde)-LSYM(Lstart_fde) @ FDE Length
+LSYM(Lstart_fde):
+ .4byte LSYM(Lstart_frame) @ FDE CIE offset
+ .4byte \start_label @ FDE initial location
+ .4byte \end_label-\start_label @ FDE address range
+ .popsection
+#endif
+.endm
+.macro cfi_end end_label
+#ifdef __ELF__
+ .pushsection .debug_frame
+ .align 2
+LSYM(Lend_fde):
+ .popsection
+\end_label:
+#endif
+.endm
+
+/* Don't pass dirn, it's there just to get token pasting right. */
+
+.macro RETLDM regs=, cond=, unwind=, dirn=ia
+#if defined (__INTERWORKING__)
+ .ifc "\regs",""
+ ldr\cond lr, [sp], #8
+ .else
+# if defined(__thumb2__)
+ pop\cond {\regs, lr}
+# else
+ ldm\cond\dirn sp!, {\regs, lr}
+# endif
+ .endif
+ .ifnc "\unwind", ""
+ /* Mark LR as restored. */
+97: cfi_pop 97b - \unwind, 0xe, 0x0
+ .endif
+ bx\cond lr
+#else
+ /* Caller is responsible for providing IT instruction. */
+ .ifc "\regs",""
+ ldr\cond pc, [sp], #8
+ .else
+# if defined(__thumb2__)
+ pop\cond {\regs, pc}
+# else
+ ldm\cond\dirn sp!, {\regs, pc}
+# endif
+ .endif
+#endif
+.endm
+
+/* The Unified assembly syntax allows the same code to be assembled for both
+ ARM and Thumb-2. However this is only supported by recent gas, so define
+ a set of macros to allow ARM code on older assemblers. */
+#if defined(__thumb2__)
+.macro do_it cond, suffix=""
+ it\suffix \cond
+.endm
+.macro shift1 op, arg0, arg1, arg2
+ \op \arg0, \arg1, \arg2
+.endm
+#define do_push push
+#define do_pop pop
+#define COND(op1, op2, cond) op1 ## op2 ## cond
+/* Perform an arithmetic operation with a variable shift operand. This
+ requires two instructions and a scratch register on Thumb-2. */
+.macro shiftop name, dest, src1, src2, shiftop, shiftreg, tmp
+ \shiftop \tmp, \src2, \shiftreg
+ \name \dest, \src1, \tmp
+.endm
+#else
+.macro do_it cond, suffix=""
+.endm
+.macro shift1 op, arg0, arg1, arg2
+ mov \arg0, \arg1, \op \arg2
+.endm
+#define do_push stmfd sp!,
+#define do_pop ldmfd sp!,
+#define COND(op1, op2, cond) op1 ## cond ## op2
+.macro shiftop name, dest, src1, src2, shiftop, shiftreg, tmp
+ \name \dest, \src1, \src2, \shiftop \shiftreg
+.endm
+#endif
+
+#ifdef __ARM_EABI__
+.macro ARM_LDIV0 name signed
+ cmp r0, #0
+ .ifc \signed, unsigned
+ movne r0, #0xffffffff
+ .else
+ movgt r0, #0x7fffffff
+ movlt r0, #0x80000000
+ .endif
+ b SYM (__aeabi_idiv0) __PLT__
+.endm
+#else
+.macro ARM_LDIV0 name signed
+ str lr, [sp, #-8]!
+98: cfi_push 98b - __\name, 0xe, -0x8, 0x8
+ bl SYM (__div0) __PLT__
+ mov r0, #0 @ About as wrong as it could be.
+ RETLDM unwind=98b
+.endm
+#endif
+
+
+#ifdef __ARM_EABI__
+.macro THUMB_LDIV0 name signed
+#if defined(__ARM_ARCH_6M__)
+ .ifc \signed, unsigned
+ cmp r0, #0
+ beq 1f
+ mov r0, #0
+ mvn r0, r0 @ 0xffffffff
+1:
+ .else
+ cmp r0, #0
+ beq 2f
+ blt 3f
+ mov r0, #0
+ mvn r0, r0
+ lsr r0, r0, #1 @ 0x7fffffff
+ b 2f
+3: mov r0, #0x80
+ lsl r0, r0, #24 @ 0x80000000
+2:
+ .endif
+ push {r0, r1, r2}
+ ldr r0, 4f
+ adr r1, 4f
+ add r0, r1
+ str r0, [sp, #8]
+ @ We know we are not on armv4t, so pop pc is safe.
+ pop {r0, r1, pc}
+ .align 2
+4:
+ .word __aeabi_idiv0 - 4b
+#elif defined(__thumb2__)
+ .syntax unified
+ .ifc \signed, unsigned
+ cbz r0, 1f
+ mov r0, #0xffffffff
+1:
+ .else
+ cmp r0, #0
+ do_it gt
+ movgt r0, #0x7fffffff
+ do_it lt
+ movlt r0, #0x80000000
+ .endif
+ b.w SYM(__aeabi_idiv0) __PLT__
+#else
+ .align 2
+ bx pc
+ nop
+ .arm
+ cmp r0, #0
+ .ifc \signed, unsigned
+ movne r0, #0xffffffff
+ .else
+ movgt r0, #0x7fffffff
+ movlt r0, #0x80000000
+ .endif
+ b SYM(__aeabi_idiv0) __PLT__
+ .thumb
+#endif
+.endm
+#else
+.macro THUMB_LDIV0 name signed
+ push { r1, lr }
+98: cfi_push 98b - __\name, 0xe, -0x4, 0x8
+ bl SYM (__div0)
+ mov r0, #0 @ About as wrong as it could be.
+#if defined (__INTERWORKING__)
+ pop { r1, r2 }
+ bx r2
+#else
+ pop { r1, pc }
+#endif
+.endm
+#endif
+
+.macro FUNC_END name
+ SIZE (__\name)
+.endm
+
+.macro DIV_FUNC_END name signed
+ cfi_start __\name, LSYM(Lend_div0)
+LSYM(Ldiv0):
+#ifdef __thumb__
+ THUMB_LDIV0 \name \signed
+#else
+ ARM_LDIV0 \name \signed
+#endif
+ cfi_end LSYM(Lend_div0)
+ FUNC_END \name
+.endm
+
+.macro THUMB_FUNC_START name
+ .globl SYM (\name)
+ TYPE (\name)
+ .thumb_func
+SYM (\name):
+.endm
+
+/* Function start macros. Variants for ARM and Thumb. */
+
+#ifdef __thumb__
+#define THUMB_FUNC .thumb_func
+#define THUMB_CODE .force_thumb
+# if defined(__thumb2__)
+#define THUMB_SYNTAX .syntax divided
+# else
+#define THUMB_SYNTAX
+# endif
+#else
+#define THUMB_FUNC
+#define THUMB_CODE
+#define THUMB_SYNTAX
+#endif
+
+.macro FUNC_START name
+ .text
+ .globl SYM (__\name)
+ TYPE (__\name)
+ .align 0
+ THUMB_CODE
+ THUMB_FUNC
+ THUMB_SYNTAX
+SYM (__\name):
+.endm
+
+/* Special function that will always be coded in ARM assembly, even if
+ in Thumb-only compilation. */
+
+#if defined(__thumb2__)
+
+/* For Thumb-2 we build everything in thumb mode. */
+.macro ARM_FUNC_START name
+ FUNC_START \name
+ .syntax unified
+.endm
+#define EQUIV .thumb_set
+.macro ARM_CALL name
+ bl __\name
+.endm
+
+#elif defined(__INTERWORKING_STUBS__)
+
+.macro ARM_FUNC_START name
+ FUNC_START \name
+ bx pc
+ nop
+ .arm
+/* A hook to tell gdb that we've switched to ARM mode. Also used to call
+ directly from other local arm routines. */
+_L__\name:
+.endm
+#define EQUIV .thumb_set
+/* Branch directly to a function declared with ARM_FUNC_START.
+ Must be called in arm mode. */
+.macro ARM_CALL name
+ bl _L__\name
+.endm
+
+#else /* !(__INTERWORKING_STUBS__ || __thumb2__) */
+
+#ifdef __ARM_ARCH_6M__
+#define EQUIV .thumb_set
+#else
+.macro ARM_FUNC_START name
+ .text
+ .globl SYM (__\name)
+ TYPE (__\name)
+ .align 0
+ .arm
+SYM (__\name):
+.endm
+#define EQUIV .set
+.macro ARM_CALL name
+ bl __\name
+.endm
+#endif
+
+#endif
+
+.macro FUNC_ALIAS new old
+ .globl SYM (__\new)
+#if defined (__thumb__)
+ .thumb_set SYM (__\new), SYM (__\old)
+#else
+ .set SYM (__\new), SYM (__\old)
+#endif
+.endm
+
+#ifndef __ARM_ARCH_6M__
+.macro ARM_FUNC_ALIAS new old
+ .globl SYM (__\new)
+ EQUIV SYM (__\new), SYM (__\old)
+#if defined(__INTERWORKING_STUBS__)
+ .set SYM (_L__\new), SYM (_L__\old)
+#endif
+.endm
+#endif
+
+#ifdef __ARMEB__
+#define xxh r0
+#define xxl r1
+#define yyh r2
+#define yyl r3
+#else
+#define xxh r1
+#define xxl r0
+#define yyh r3
+#define yyl r2
+#endif
+
+#ifdef __ARM_EABI__
+.macro WEAK name
+ .weak SYM (__\name)
+.endm
+#endif
+
+#ifdef __thumb__
+/* Register aliases. */
+
+work .req r4 @ XXXX is this safe ?
+dividend .req r0
+divisor .req r1
+overdone .req r2
+result .req r2
+curbit .req r3
+#endif
+#if 0
+ip .req r12
+sp .req r13
+lr .req r14
+pc .req r15
+#endif
+
+/* ------------------------------------------------------------------------ */
+/* Bodies of the division and modulo routines. */
+/* ------------------------------------------------------------------------ */
+.macro ARM_DIV_BODY dividend, divisor, result, curbit
+
+#if __ARM_ARCH__ >= 5 && ! defined (__OPTIMIZE_SIZE__)
+
+#if defined (__thumb2__)
+ clz \curbit, \dividend
+ clz \result, \divisor
+ sub \curbit, \result, \curbit
+ rsb \curbit, \curbit, #31
+ adr \result, 1f
+ add \curbit, \result, \curbit, lsl #4
+ mov \result, #0
+ mov pc, \curbit
+.p2align 3
+1:
+ .set shift, 32
+ .rept 32
+ .set shift, shift - 1
+ cmp.w \dividend, \divisor, lsl #shift
+ nop.n
+ adc.w \result, \result, \result
+ it cs
+ subcs.w \dividend, \dividend, \divisor, lsl #shift
+ .endr
+#else
+ clz \curbit, \dividend
+ clz \result, \divisor
+ sub \curbit, \result, \curbit
+ rsbs \curbit, \curbit, #31
+ addne \curbit, \curbit, \curbit, lsl #1
+ mov \result, #0
+ addne pc, pc, \curbit, lsl #2
+ nop
+ .set shift, 32
+ .rept 32
+ .set shift, shift - 1
+ cmp \dividend, \divisor, lsl #shift
+ adc \result, \result, \result
+ subcs \dividend, \dividend, \divisor, lsl #shift
+ .endr
+#endif
+
+#else /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+#if __ARM_ARCH__ >= 5
+
+ clz \curbit, \divisor
+ clz \result, \dividend
+ sub \result, \curbit, \result
+ mov \curbit, #1
+ mov \divisor, \divisor, lsl \result
+ mov \curbit, \curbit, lsl \result
+ mov \result, #0
+
+#else /* __ARM_ARCH__ < 5 */
+
+ @ Initially shift the divisor left 3 bits if possible,
+ @ set curbit accordingly. This allows for curbit to be located
+ @ at the left end of each 4-bit nibbles in the division loop
+ @ to save one loop in most cases.
+ tst \divisor, #0xe0000000
+ moveq \divisor, \divisor, lsl #3
+ moveq \curbit, #8
+ movne \curbit, #1
+
+ @ Unless the divisor is very big, shift it up in multiples of
+ @ four bits, since this is the amount of unwinding in the main
+ @ division loop. Continue shifting until the divisor is
+ @ larger than the dividend.
+1: cmp \divisor, #0x10000000
+ cmplo \divisor, \dividend
+ movlo \divisor, \divisor, lsl #4
+ movlo \curbit, \curbit, lsl #4
+ blo 1b
+
+ @ For very big divisors, we must shift it a bit at a time, or
+ @ we will be in danger of overflowing.
+1: cmp \divisor, #0x80000000
+ cmplo \divisor, \dividend
+ movlo \divisor, \divisor, lsl #1
+ movlo \curbit, \curbit, lsl #1
+ blo 1b
+
+ mov \result, #0
+
+#endif /* __ARM_ARCH__ < 5 */
+
+ @ Division loop
+1: cmp \dividend, \divisor
+ do_it hs, t
+ subhs \dividend, \dividend, \divisor
+ orrhs \result, \result, \curbit
+ cmp \dividend, \divisor, lsr #1
+ do_it hs, t
+ subhs \dividend, \dividend, \divisor, lsr #1
+ orrhs \result, \result, \curbit, lsr #1
+ cmp \dividend, \divisor, lsr #2
+ do_it hs, t
+ subhs \dividend, \dividend, \divisor, lsr #2
+ orrhs \result, \result, \curbit, lsr #2
+ cmp \dividend, \divisor, lsr #3
+ do_it hs, t
+ subhs \dividend, \dividend, \divisor, lsr #3
+ orrhs \result, \result, \curbit, lsr #3
+ cmp \dividend, #0 @ Early termination?
+ do_it ne, t
+ movnes \curbit, \curbit, lsr #4 @ No, any more bits to do?
+ movne \divisor, \divisor, lsr #4
+ bne 1b
+
+#endif /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+
+.endm
+/* ------------------------------------------------------------------------ */
+.macro ARM_DIV2_ORDER divisor, order
+
+#if __ARM_ARCH__ >= 5
+
+ clz \order, \divisor
+ rsb \order, \order, #31
+
+#else
+
+ cmp \divisor, #(1 << 16)
+ movhs \divisor, \divisor, lsr #16
+ movhs \order, #16
+ movlo \order, #0
+
+ cmp \divisor, #(1 << 8)
+ movhs \divisor, \divisor, lsr #8
+ addhs \order, \order, #8
+
+ cmp \divisor, #(1 << 4)
+ movhs \divisor, \divisor, lsr #4
+ addhs \order, \order, #4
+
+ cmp \divisor, #(1 << 2)
+ addhi \order, \order, #3
+ addls \order, \order, \divisor, lsr #1
+
+#endif
+
+.endm
+/* ------------------------------------------------------------------------ */
+.macro ARM_MOD_BODY dividend, divisor, order, spare
+
+#if __ARM_ARCH__ >= 5 && ! defined (__OPTIMIZE_SIZE__)
+
+ clz \order, \divisor
+ clz \spare, \dividend
+ sub \order, \order, \spare
+ rsbs \order, \order, #31
+ addne pc, pc, \order, lsl #3
+ nop
+ .set shift, 32
+ .rept 32
+ .set shift, shift - 1
+ cmp \dividend, \divisor, lsl #shift
+ subcs \dividend, \dividend, \divisor, lsl #shift
+ .endr
+
+#else /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+#if __ARM_ARCH__ >= 5
+
+ clz \order, \divisor
+ clz \spare, \dividend
+ sub \order, \order, \spare
+ mov \divisor, \divisor, lsl \order
+
+#else /* __ARM_ARCH__ < 5 */
+
+ mov \order, #0
+
+ @ Unless the divisor is very big, shift it up in multiples of
+ @ four bits, since this is the amount of unwinding in the main
+ @ division loop. Continue shifting until the divisor is
+ @ larger than the dividend.
+1: cmp \divisor, #0x10000000
+ cmplo \divisor, \dividend
+ movlo \divisor, \divisor, lsl #4
+ addlo \order, \order, #4
+ blo 1b
+
+ @ For very big divisors, we must shift it a bit at a time, or
+ @ we will be in danger of overflowing.
+1: cmp \divisor, #0x80000000
+ cmplo \divisor, \dividend
+ movlo \divisor, \divisor, lsl #1
+ addlo \order, \order, #1
+ blo 1b
+
+#endif /* __ARM_ARCH__ < 5 */
+
+ @ Perform all needed substractions to keep only the reminder.
+ @ Do comparisons in batch of 4 first.
+ subs \order, \order, #3 @ yes, 3 is intended here
+ blt 2f
+
+1: cmp \dividend, \divisor
+ subhs \dividend, \dividend, \divisor
+ cmp \dividend, \divisor, lsr #1
+ subhs \dividend, \dividend, \divisor, lsr #1
+ cmp \dividend, \divisor, lsr #2
+ subhs \dividend, \dividend, \divisor, lsr #2
+ cmp \dividend, \divisor, lsr #3
+ subhs \dividend, \dividend, \divisor, lsr #3
+ cmp \dividend, #1
+ mov \divisor, \divisor, lsr #4
+ subges \order, \order, #4
+ bge 1b
+
+ tst \order, #3
+ teqne \dividend, #0
+ beq 5f
+
+ @ Either 1, 2 or 3 comparison/substractions are left.
+2: cmn \order, #2
+ blt 4f
+ beq 3f
+ cmp \dividend, \divisor
+ subhs \dividend, \dividend, \divisor
+ mov \divisor, \divisor, lsr #1
+3: cmp \dividend, \divisor
+ subhs \dividend, \dividend, \divisor
+ mov \divisor, \divisor, lsr #1
+4: cmp \dividend, \divisor
+ subhs \dividend, \dividend, \divisor
+5:
+
+#endif /* __ARM_ARCH__ < 5 || defined (__OPTIMIZE_SIZE__) */
+
+.endm
+/* ------------------------------------------------------------------------ */
+.macro THUMB_DIV_MOD_BODY modulo
+ @ Load the constant 0x10000000 into our work register.
+ mov work, #1
+ lsl work, #28
+LSYM(Loop1):
+ @ Unless the divisor is very big, shift it up in multiples of
+ @ four bits, since this is the amount of unwinding in the main
+ @ division loop. Continue shifting until the divisor is
+ @ larger than the dividend.
+ cmp divisor, work
+ bhs LSYM(Lbignum)
+ cmp divisor, dividend
+ bhs LSYM(Lbignum)
+ lsl divisor, #4
+ lsl curbit, #4
+ b LSYM(Loop1)
+LSYM(Lbignum):
+ @ Set work to 0x80000000
+ lsl work, #3
+LSYM(Loop2):
+ @ For very big divisors, we must shift it a bit at a time, or
+ @ we will be in danger of overflowing.
+ cmp divisor, work
+ bhs LSYM(Loop3)
+ cmp divisor, dividend
+ bhs LSYM(Loop3)
+ lsl divisor, #1
+ lsl curbit, #1
+ b LSYM(Loop2)
+LSYM(Loop3):
+ @ Test for possible subtractions ...
+ .if \modulo
+ @ ... On the final pass, this may subtract too much from the dividend,
+ @ so keep track of which subtractions are done, we can fix them up
+ @ afterwards.
+ mov overdone, #0
+ cmp dividend, divisor
+ blo LSYM(Lover1)
+ sub dividend, dividend, divisor
+LSYM(Lover1):
+ lsr work, divisor, #1
+ cmp dividend, work
+ blo LSYM(Lover2)
+ sub dividend, dividend, work
+ mov ip, curbit
+ mov work, #1
+ ror curbit, work
+ orr overdone, curbit
+ mov curbit, ip
+LSYM(Lover2):
+ lsr work, divisor, #2
+ cmp dividend, work
+ blo LSYM(Lover3)
+ sub dividend, dividend, work
+ mov ip, curbit
+ mov work, #2
+ ror curbit, work
+ orr overdone, curbit
+ mov curbit, ip
+LSYM(Lover3):
+ lsr work, divisor, #3
+ cmp dividend, work
+ blo LSYM(Lover4)
+ sub dividend, dividend, work
+ mov ip, curbit
+ mov work, #3
+ ror curbit, work
+ orr overdone, curbit
+ mov curbit, ip
+LSYM(Lover4):
+ mov ip, curbit
+ .else
+ @ ... and note which bits are done in the result. On the final pass,
+ @ this may subtract too much from the dividend, but the result will be ok,
+ @ since the "bit" will have been shifted out at the bottom.
+ cmp dividend, divisor
+ blo LSYM(Lover1)
+ sub dividend, dividend, divisor
+ orr result, result, curbit
+LSYM(Lover1):
+ lsr work, divisor, #1
+ cmp dividend, work
+ blo LSYM(Lover2)
+ sub dividend, dividend, work
+ lsr work, curbit, #1
+ orr result, work
+LSYM(Lover2):
+ lsr work, divisor, #2
+ cmp dividend, work
+ blo LSYM(Lover3)
+ sub dividend, dividend, work
+ lsr work, curbit, #2
+ orr result, work
+LSYM(Lover3):
+ lsr work, divisor, #3
+ cmp dividend, work
+ blo LSYM(Lover4)
+ sub dividend, dividend, work
+ lsr work, curbit, #3
+ orr result, work
+LSYM(Lover4):
+ .endif
+
+ cmp dividend, #0 @ Early termination?
+ beq LSYM(Lover5)
+ lsr curbit, #4 @ No, any more bits to do?
+ beq LSYM(Lover5)
+ lsr divisor, #4
+ b LSYM(Loop3)
+LSYM(Lover5):
+ .if \modulo
+ @ Any subtractions that we should not have done will be recorded in
+ @ the top three bits of "overdone". Exactly which were not needed
+ @ are governed by the position of the bit, stored in ip.
+ mov work, #0xe
+ lsl work, #28
+ and overdone, work
+ beq LSYM(Lgot_result)
+
+ @ If we terminated early, because dividend became zero, then the
+ @ bit in ip will not be in the bottom nibble, and we should not
+ @ perform the additions below. We must test for this though
+ @ (rather relying upon the TSTs to prevent the additions) since
+ @ the bit in ip could be in the top two bits which might then match
+ @ with one of the smaller RORs.
+ mov curbit, ip
+ mov work, #0x7
+ tst curbit, work
+ beq LSYM(Lgot_result)
+
+ mov curbit, ip
+ mov work, #3
+ ror curbit, work
+ tst overdone, curbit
+ beq LSYM(Lover6)
+ lsr work, divisor, #3
+ add dividend, work
+LSYM(Lover6):
+ mov curbit, ip
+ mov work, #2
+ ror curbit, work
+ tst overdone, curbit
+ beq LSYM(Lover7)
+ lsr work, divisor, #2
+ add dividend, work
+LSYM(Lover7):
+ mov curbit, ip
+ mov work, #1
+ ror curbit, work
+ tst overdone, curbit
+ beq LSYM(Lgot_result)
+ lsr work, divisor, #1
+ add dividend, work
+ .endif
+LSYM(Lgot_result):
+.endm
+/* ------------------------------------------------------------------------ */
+/* Start of the Real Functions */
+/* ------------------------------------------------------------------------ */
+#ifdef L_udivsi3
+
+#if defined(__prefer_thumb__)
+
+ FUNC_START udivsi3
+ FUNC_ALIAS aeabi_uidiv udivsi3
+
+ cmp divisor, #0
+ beq LSYM(Ldiv0)
+LSYM(udivsi3_skip_div0_test):
+ mov curbit, #1
+ mov result, #0
+
+ push { work }
+ cmp dividend, divisor
+ blo LSYM(Lgot_result)
+
+ THUMB_DIV_MOD_BODY 0
+
+ mov r0, result
+ pop { work }
+ RET
+
+#elif defined(__ARM_ARCH_EXT_IDIV__)
+
+ ARM_FUNC_START udivsi3
+ ARM_FUNC_ALIAS aeabi_uidiv udivsi3
+
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+
+ udiv r0, r0, r1
+ RET
+
+#else /* ARM version/Thumb-2. */
+
+ ARM_FUNC_START udivsi3
+ ARM_FUNC_ALIAS aeabi_uidiv udivsi3
+
+ /* Note: if called via udivsi3_skip_div0_test, this will unnecessarily
+ check for division-by-zero a second time. */
+LSYM(udivsi3_skip_div0_test):
+ subs r2, r1, #1
+ do_it eq
+ RETc(eq)
+ bcc LSYM(Ldiv0)
+ cmp r0, r1
+ bls 11f
+ tst r1, r2
+ beq 12f
+
+ ARM_DIV_BODY r0, r1, r2, r3
+
+ mov r0, r2
+ RET
+
+11: do_it eq, e
+ moveq r0, #1
+ movne r0, #0
+ RET
+
+12: ARM_DIV2_ORDER r1, r2
+
+ mov r0, r0, lsr r2
+ RET
+
+#endif /* ARM version */
+
+ DIV_FUNC_END udivsi3 unsigned
+
+#if defined(__prefer_thumb__)
+FUNC_START aeabi_uidivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ push {r0, r1, lr}
+ bl LSYM(udivsi3_skip_div0_test)
+ POP {r1, r2, r3}
+ mul r2, r0
+ sub r1, r1, r2
+ bx r3
+#elif defined(__ARM_ARCH_EXT_IDIV__)
+ARM_FUNC_START aeabi_uidivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ mov r2, r0
+ udiv r0, r0, r1
+ mls r1, r0, r1, r2
+ RET
+#else
+ARM_FUNC_START aeabi_uidivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ stmfd sp!, { r0, r1, lr }
+ bl LSYM(udivsi3_skip_div0_test)
+ ldmfd sp!, { r1, r2, lr }
+ mul r3, r2, r0
+ sub r1, r1, r3
+ RET
+#endif
+ FUNC_END aeabi_uidivmod
+
+#endif /* L_udivsi3 */
+/* ------------------------------------------------------------------------ */
+#ifdef L_umodsi3
+
+#ifdef __ARM_ARCH_EXT_IDIV__
+
+ ARM_FUNC_START umodsi3
+
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ udiv r2, r0, r1
+ mls r0, r1, r2, r0
+ RET
+
+#elif defined(__thumb__)
+
+ FUNC_START umodsi3
+
+ cmp divisor, #0
+ beq LSYM(Ldiv0)
+ mov curbit, #1
+ cmp dividend, divisor
+ bhs LSYM(Lover10)
+ RET
+
+LSYM(Lover10):
+ push { work }
+
+ THUMB_DIV_MOD_BODY 1
+
+ pop { work }
+ RET
+
+#else /* ARM version. */
+
+ FUNC_START umodsi3
+
+ subs r2, r1, #1 @ compare divisor with 1
+ bcc LSYM(Ldiv0)
+ cmpne r0, r1 @ compare dividend with divisor
+ moveq r0, #0
+ tsthi r1, r2 @ see if divisor is power of 2
+ andeq r0, r0, r2
+ RETc(ls)
+
+ ARM_MOD_BODY r0, r1, r2, r3
+
+ RET
+
+#endif /* ARM version. */
+
+ DIV_FUNC_END umodsi3 unsigned
+
+#endif /* L_umodsi3 */
+/* ------------------------------------------------------------------------ */
+#ifdef L_divsi3
+
+#if defined(__prefer_thumb__)
+
+ FUNC_START divsi3
+ FUNC_ALIAS aeabi_idiv divsi3
+
+ cmp divisor, #0
+ beq LSYM(Ldiv0)
+LSYM(divsi3_skip_div0_test):
+ push { work }
+ mov work, dividend
+ eor work, divisor @ Save the sign of the result.
+ mov ip, work
+ mov curbit, #1
+ mov result, #0
+ cmp divisor, #0
+ bpl LSYM(Lover10)
+ neg divisor, divisor @ Loops below use unsigned.
+LSYM(Lover10):
+ cmp dividend, #0
+ bpl LSYM(Lover11)
+ neg dividend, dividend
+LSYM(Lover11):
+ cmp dividend, divisor
+ blo LSYM(Lgot_result)
+
+ THUMB_DIV_MOD_BODY 0
+
+ mov r0, result
+ mov work, ip
+ cmp work, #0
+ bpl LSYM(Lover12)
+ neg r0, r0
+LSYM(Lover12):
+ pop { work }
+ RET
+
+#elif defined(__ARM_ARCH_EXT_IDIV__)
+
+ ARM_FUNC_START divsi3
+ ARM_FUNC_ALIAS aeabi_idiv divsi3
+
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ sdiv r0, r0, r1
+ RET
+
+#else /* ARM/Thumb-2 version. */
+
+ ARM_FUNC_START divsi3
+ ARM_FUNC_ALIAS aeabi_idiv divsi3
+
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+LSYM(divsi3_skip_div0_test):
+ eor ip, r0, r1 @ save the sign of the result.
+ do_it mi
+ rsbmi r1, r1, #0 @ loops below use unsigned.
+ subs r2, r1, #1 @ division by 1 or -1 ?
+ beq 10f
+ movs r3, r0
+ do_it mi
+ rsbmi r3, r0, #0 @ positive dividend value
+ cmp r3, r1
+ bls 11f
+ tst r1, r2 @ divisor is power of 2 ?
+ beq 12f
+
+ ARM_DIV_BODY r3, r1, r0, r2
+
+ cmp ip, #0
+ do_it mi
+ rsbmi r0, r0, #0
+ RET
+
+10: teq ip, r0 @ same sign ?
+ do_it mi
+ rsbmi r0, r0, #0
+ RET
+
+11: do_it lo
+ movlo r0, #0
+ do_it eq,t
+ moveq r0, ip, asr #31
+ orreq r0, r0, #1
+ RET
+
+12: ARM_DIV2_ORDER r1, r2
+
+ cmp ip, #0
+ mov r0, r3, lsr r2
+ do_it mi
+ rsbmi r0, r0, #0
+ RET
+
+#endif /* ARM version */
+
+ DIV_FUNC_END divsi3 signed
+
+#if defined(__prefer_thumb__)
+FUNC_START aeabi_idivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ push {r0, r1, lr}
+ bl LSYM(divsi3_skip_div0_test)
+ POP {r1, r2, r3}
+ mul r2, r0
+ sub r1, r1, r2
+ bx r3
+#elif defined(__ARM_ARCH_EXT_IDIV__)
+ARM_FUNC_START aeabi_idivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ mov r2, r0
+ sdiv r0, r0, r1
+ mls r1, r0, r1, r2
+ RET
+#else
+ARM_FUNC_START aeabi_idivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ stmfd sp!, { r0, r1, lr }
+ bl LSYM(divsi3_skip_div0_test)
+ ldmfd sp!, { r1, r2, lr }
+ mul r3, r2, r0
+ sub r1, r1, r3
+ RET
+#endif
+ FUNC_END aeabi_idivmod
+
+#endif /* L_divsi3 */
+/* ------------------------------------------------------------------------ */
+#ifdef L_modsi3
+
+#if defined(__ARM_ARCH_EXT_IDIV__)
+
+ ARM_FUNC_START modsi3
+
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+
+ sdiv r2, r0, r1
+ mls r0, r1, r2, r0
+ RET
+
+#elif defined(__thumb__)
+
+ FUNC_START modsi3
+
+ mov curbit, #1
+ cmp divisor, #0
+ beq LSYM(Ldiv0)
+ bpl LSYM(Lover10)
+ neg divisor, divisor @ Loops below use unsigned.
+LSYM(Lover10):
+ push { work }
+ @ Need to save the sign of the dividend, unfortunately, we need
+ @ work later on. Must do this after saving the original value of
+ @ the work register, because we will pop this value off first.
+ push { dividend }
+ cmp dividend, #0
+ bpl LSYM(Lover11)
+ neg dividend, dividend
+LSYM(Lover11):
+ cmp dividend, divisor
+ blo LSYM(Lgot_result)
+
+ THUMB_DIV_MOD_BODY 1
+
+ pop { work }
+ cmp work, #0
+ bpl LSYM(Lover12)
+ neg dividend, dividend
+LSYM(Lover12):
+ pop { work }
+ RET
+
+#else /* ARM version. */
+
+ FUNC_START modsi3
+
+ cmp r1, #0
+ beq LSYM(Ldiv0)
+ rsbmi r1, r1, #0 @ loops below use unsigned.
+ movs ip, r0 @ preserve sign of dividend
+ rsbmi r0, r0, #0 @ if negative make positive
+ subs r2, r1, #1 @ compare divisor with 1
+ cmpne r0, r1 @ compare dividend with divisor
+ moveq r0, #0
+ tsthi r1, r2 @ see if divisor is power of 2
+ andeq r0, r0, r2
+ bls 10f
+
+ ARM_MOD_BODY r0, r1, r2, r3
+
+10: cmp ip, #0
+ rsbmi r0, r0, #0
+ RET
+
+#endif /* ARM version */
+
+ DIV_FUNC_END modsi3 signed
+
+#endif /* L_modsi3 */
+/* ------------------------------------------------------------------------ */
+#ifdef L_dvmd_tls
+
+#ifdef __ARM_EABI__
+ WEAK aeabi_idiv0
+ WEAK aeabi_ldiv0
+ FUNC_START aeabi_idiv0
+ FUNC_START aeabi_ldiv0
+ RET
+ FUNC_END aeabi_ldiv0
+ FUNC_END aeabi_idiv0
+#else
+ FUNC_START div0
+ RET
+ FUNC_END div0
+#endif
+
+#endif /* L_divmodsi_tools */
+/* ------------------------------------------------------------------------ */
+#ifdef L_dvmd_lnx
+@ GNU/Linux division-by zero handler. Used in place of L_dvmd_tls
+
+/* Constant taken from <asm/signal.h>. */
+#define SIGFPE 8
+
+#ifdef __ARM_EABI__
+ WEAK aeabi_idiv0
+ WEAK aeabi_ldiv0
+ ARM_FUNC_START aeabi_idiv0
+ ARM_FUNC_START aeabi_ldiv0
+#else
+ ARM_FUNC_START div0
+#endif
+
+ do_push {r1, lr}
+ mov r0, #SIGFPE
+ bl SYM(raise) __PLT__
+ RETLDM r1
+
+#ifdef __ARM_EABI__
+ FUNC_END aeabi_ldiv0
+ FUNC_END aeabi_idiv0
+#else
+ FUNC_END div0
+#endif
+
+#endif /* L_dvmd_lnx */
+#ifdef L_clear_cache
+#if defined __ARM_EABI__ && defined __linux__
+@ EABI GNU/Linux call to cacheflush syscall.
+ ARM_FUNC_START clear_cache
+ do_push {r7}
+#if __ARM_ARCH__ >= 7 || defined(__ARM_ARCH_6T2__)
+ movw r7, #2
+ movt r7, #0xf
+#else
+ mov r7, #0xf0000
+ add r7, r7, #2
+#endif
+ mov r2, #0
+ swi 0
+ do_pop {r7}
+ RET
+ FUNC_END clear_cache
+#else
+#error "This is only for ARM EABI GNU/Linux"
+#endif
+#endif /* L_clear_cache */
+/* ------------------------------------------------------------------------ */
+/* Dword shift operations. */
+/* All the following Dword shift variants rely on the fact that
+ shft xxx, Reg
+ is in fact done as
+ shft xxx, (Reg & 255)
+ so for Reg value in (32...63) and (-1...-31) we will get zero (in the
+ case of logical shifts) or the sign (for asr). */
+
+#ifdef __ARMEB__
+#define al r1
+#define ah r0
+#else
+#define al r0
+#define ah r1
+#endif
+
+/* Prevent __aeabi double-word shifts from being produced on SymbianOS. */
+#ifndef __symbian__
+
+#ifdef L_lshrdi3
+
+ FUNC_START lshrdi3
+ FUNC_ALIAS aeabi_llsr lshrdi3
+
+#ifdef __thumb__
+ lsr al, r2
+ mov r3, ah
+ lsr ah, r2
+ mov ip, r3
+ sub r2, #32
+ lsr r3, r2
+ orr al, r3
+ neg r2, r2
+ mov r3, ip
+ lsl r3, r2
+ orr al, r3
+ RET
+#else
+ subs r3, r2, #32
+ rsb ip, r2, #32
+ movmi al, al, lsr r2
+ movpl al, ah, lsr r3
+ orrmi al, al, ah, lsl ip
+ mov ah, ah, lsr r2
+ RET
+#endif
+ FUNC_END aeabi_llsr
+ FUNC_END lshrdi3
+
+#endif
+
+#ifdef L_ashrdi3
+
+ FUNC_START ashrdi3
+ FUNC_ALIAS aeabi_lasr ashrdi3
+
+#ifdef __thumb__
+ lsr al, r2
+ mov r3, ah
+ asr ah, r2
+ sub r2, #32
+ @ If r2 is negative at this point the following step would OR
+ @ the sign bit into all of AL. That's not what we want...
+ bmi 1f
+ mov ip, r3
+ asr r3, r2
+ orr al, r3
+ mov r3, ip
+1:
+ neg r2, r2
+ lsl r3, r2
+ orr al, r3
+ RET
+#else
+ subs r3, r2, #32
+ rsb ip, r2, #32
+ movmi al, al, lsr r2
+ movpl al, ah, asr r3
+ orrmi al, al, ah, lsl ip
+ mov ah, ah, asr r2
+ RET
+#endif
+
+ FUNC_END aeabi_lasr
+ FUNC_END ashrdi3
+
+#endif
+
+#ifdef L_ashldi3
+
+ FUNC_START ashldi3
+ FUNC_ALIAS aeabi_llsl ashldi3
+
+#ifdef __thumb__
+ lsl ah, r2
+ mov r3, al
+ lsl al, r2
+ mov ip, r3
+ sub r2, #32
+ lsl r3, r2
+ orr ah, r3
+ neg r2, r2
+ mov r3, ip
+ lsr r3, r2
+ orr ah, r3
+ RET
+#else
+ subs r3, r2, #32
+ rsb ip, r2, #32
+ movmi ah, ah, lsl r2
+ movpl ah, al, lsl r3
+ orrmi ah, ah, al, lsr ip
+ mov al, al, lsl r2
+ RET
+#endif
+ FUNC_END aeabi_llsl
+ FUNC_END ashldi3
+
+#endif
+
+#endif /* __symbian__ */
+
+#if ((__ARM_ARCH__ > 5) && !defined(__ARM_ARCH_6M__)) \
+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
+ || defined(__ARM_ARCH_5TEJ__)
+#define HAVE_ARM_CLZ 1
+#endif
+
+#ifdef L_clzsi2
+#if defined(__ARM_ARCH_6M__)
+FUNC_START clzsi2
+ mov r1, #28
+ mov r3, #1
+ lsl r3, r3, #16
+ cmp r0, r3 /* 0x10000 */
+ bcc 2f
+ lsr r0, r0, #16
+ sub r1, r1, #16
+2: lsr r3, r3, #8
+ cmp r0, r3 /* #0x100 */
+ bcc 2f
+ lsr r0, r0, #8
+ sub r1, r1, #8
+2: lsr r3, r3, #4
+ cmp r0, r3 /* #0x10 */
+ bcc 2f
+ lsr r0, r0, #4
+ sub r1, r1, #4
+2: adr r2, 1f
+ ldrb r0, [r2, r0]
+ add r0, r0, r1
+ bx lr
+.align 2
+1:
+.byte 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
+ FUNC_END clzsi2
+#else
+ARM_FUNC_START clzsi2
+# if defined(HAVE_ARM_CLZ)
+ clz r0, r0
+ RET
+# else
+ mov r1, #28
+ cmp r0, #0x10000
+ do_it cs, t
+ movcs r0, r0, lsr #16
+ subcs r1, r1, #16
+ cmp r0, #0x100
+ do_it cs, t
+ movcs r0, r0, lsr #8
+ subcs r1, r1, #8
+ cmp r0, #0x10
+ do_it cs, t
+ movcs r0, r0, lsr #4
+ subcs r1, r1, #4
+ adr r2, 1f
+ ldrb r0, [r2, r0]
+ add r0, r0, r1
+ RET
+.align 2
+1:
+.byte 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
+# endif /* !HAVE_ARM_CLZ */
+ FUNC_END clzsi2
+#endif
+#endif /* L_clzsi2 */
+
+#ifdef L_clzdi2
+#if !defined(HAVE_ARM_CLZ)
+
+# if defined(__ARM_ARCH_6M__)
+FUNC_START clzdi2
+ push {r4, lr}
+# else
+ARM_FUNC_START clzdi2
+ do_push {r4, lr}
+# endif
+ cmp xxh, #0
+ bne 1f
+# ifdef __ARMEB__
+ mov r0, xxl
+ bl __clzsi2
+ add r0, r0, #32
+ b 2f
+1:
+ bl __clzsi2
+# else
+ bl __clzsi2
+ add r0, r0, #32
+ b 2f
+1:
+ mov r0, xxh
+ bl __clzsi2
+# endif
+2:
+# if defined(__ARM_ARCH_6M__)
+ pop {r4, pc}
+# else
+ RETLDM r4
+# endif
+ FUNC_END clzdi2
+
+#else /* HAVE_ARM_CLZ */
+
+ARM_FUNC_START clzdi2
+ cmp xxh, #0
+ do_it eq, et
+ clzeq r0, xxl
+ clzne r0, xxh
+ addeq r0, r0, #32
+ RET
+ FUNC_END clzdi2
+
+#endif
+#endif /* L_clzdi2 */
+
+#ifdef L_ctzsi2
+#if defined(__ARM_ARCH_6M__)
+FUNC_START ctzsi2
+ neg r1, r0
+ and r0, r0, r1
+ mov r1, #28
+ mov r3, #1
+ lsl r3, r3, #16
+ cmp r0, r3 /* 0x10000 */
+ bcc 2f
+ lsr r0, r0, #16
+ sub r1, r1, #16
+2: lsr r3, r3, #8
+ cmp r0, r3 /* #0x100 */
+ bcc 2f
+ lsr r0, r0, #8
+ sub r1, r1, #8
+2: lsr r3, r3, #4
+ cmp r0, r3 /* #0x10 */
+ bcc 2f
+ lsr r0, r0, #4
+ sub r1, r1, #4
+2: adr r2, 1f
+ ldrb r0, [r2, r0]
+ sub r0, r0, r1
+ bx lr
+.align 2
+1:
+.byte 27, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31
+ FUNC_END ctzsi2
+#else
+ARM_FUNC_START ctzsi2
+ rsb r1, r0, #0
+ and r0, r0, r1
+# if defined(HAVE_ARM_CLZ)
+ clz r0, r0
+ rsb r0, r0, #31
+ RET
+# else
+ mov r1, #28
+ cmp r0, #0x10000
+ do_it cs, t
+ movcs r0, r0, lsr #16
+ subcs r1, r1, #16
+ cmp r0, #0x100
+ do_it cs, t
+ movcs r0, r0, lsr #8
+ subcs r1, r1, #8
+ cmp r0, #0x10
+ do_it cs, t
+ movcs r0, r0, lsr #4
+ subcs r1, r1, #4
+ adr r2, 1f
+ ldrb r0, [r2, r0]
+ sub r0, r0, r1
+ RET
+.align 2
+1:
+.byte 27, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31
+# endif /* !HAVE_ARM_CLZ */
+ FUNC_END ctzsi2
+#endif
+#endif /* L_clzsi2 */
+
+/* ------------------------------------------------------------------------ */
+/* These next two sections are here despite the fact that they contain Thumb
+ assembler because their presence allows interworked code to be linked even
+ when the GCC library is this one. */
+
+/* Do not build the interworking functions when the target architecture does
+ not support Thumb instructions. (This can be a multilib option). */
+#if defined __ARM_ARCH_4T__ || defined __ARM_ARCH_5T__\
+ || defined __ARM_ARCH_5TE__ || defined __ARM_ARCH_5TEJ__ \
+ || __ARM_ARCH__ >= 6
+
+#if defined L_call_via_rX
+
+/* These labels & instructions are used by the Arm/Thumb interworking code.
+ The address of function to be called is loaded into a register and then
+ one of these labels is called via a BL instruction. This puts the
+ return address into the link register with the bottom bit set, and the
+ code here switches to the correct mode before executing the function. */
+
+ .text
+ .align 0
+ .force_thumb
+
+.macro call_via register
+ THUMB_FUNC_START _call_via_\register
+
+ bx \register
+ nop
+
+ SIZE (_call_via_\register)
+.endm
+
+ call_via r0
+ call_via r1
+ call_via r2
+ call_via r3
+ call_via r4
+ call_via r5
+ call_via r6
+ call_via r7
+ call_via r8
+ call_via r9
+ call_via sl
+ call_via fp
+ call_via ip
+ call_via sp
+ call_via lr
+
+#endif /* L_call_via_rX */
+
+/* Don't bother with the old interworking routines for Thumb-2. */
+/* ??? Maybe only omit these on "m" variants. */
+#if !defined(__thumb2__) && !defined(__ARM_ARCH_6M__)
+
+#if defined L_interwork_call_via_rX
+
+/* These labels & instructions are used by the Arm/Thumb interworking code,
+ when the target address is in an unknown instruction set. The address
+ of function to be called is loaded into a register and then one of these
+ labels is called via a BL instruction. This puts the return address
+ into the link register with the bottom bit set, and the code here
+ switches to the correct mode before executing the function. Unfortunately
+ the target code cannot be relied upon to return via a BX instruction, so
+ instead we have to store the resturn address on the stack and allow the
+ called function to return here instead. Upon return we recover the real
+ return address and use a BX to get back to Thumb mode.
+
+ There are three variations of this code. The first,
+ _interwork_call_via_rN(), will push the return address onto the
+ stack and pop it in _arm_return(). It should only be used if all
+ arguments are passed in registers.
+
+ The second, _interwork_r7_call_via_rN(), instead stores the return
+ address at [r7, #-4]. It is the caller's responsibility to ensure
+ that this address is valid and contains no useful data.
+
+ The third, _interwork_r11_call_via_rN(), works in the same way but
+ uses r11 instead of r7. It is useful if the caller does not really
+ need a frame pointer. */
+
+ .text
+ .align 0
+
+ .code 32
+ .globl _arm_return
+LSYM(Lstart_arm_return):
+ cfi_start LSYM(Lstart_arm_return) LSYM(Lend_arm_return)
+ cfi_push 0, 0xe, -0x8, 0x8
+ nop @ This nop is for the benefit of debuggers, so that
+ @ backtraces will use the correct unwind information.
+_arm_return:
+ RETLDM unwind=LSYM(Lstart_arm_return)
+ cfi_end LSYM(Lend_arm_return)
+
+ .globl _arm_return_r7
+_arm_return_r7:
+ ldr lr, [r7, #-4]
+ bx lr
+
+ .globl _arm_return_r11
+_arm_return_r11:
+ ldr lr, [r11, #-4]
+ bx lr
+
+.macro interwork_with_frame frame, register, name, return
+ .code 16
+
+ THUMB_FUNC_START \name
+
+ bx pc
+ nop
+
+ .code 32
+ tst \register, #1
+ streq lr, [\frame, #-4]
+ adreq lr, _arm_return_\frame
+ bx \register
+
+ SIZE (\name)
+.endm
+
+.macro interwork register
+ .code 16
+
+ THUMB_FUNC_START _interwork_call_via_\register
+
+ bx pc
+ nop
+
+ .code 32
+ .globl LSYM(Lchange_\register)
+LSYM(Lchange_\register):
+ tst \register, #1
+ streq lr, [sp, #-8]!
+ adreq lr, _arm_return
+ bx \register
+
+ SIZE (_interwork_call_via_\register)
+
+ interwork_with_frame r7,\register,_interwork_r7_call_via_\register
+ interwork_with_frame r11,\register,_interwork_r11_call_via_\register
+.endm
+
+ interwork r0
+ interwork r1
+ interwork r2
+ interwork r3
+ interwork r4
+ interwork r5
+ interwork r6
+ interwork r7
+ interwork r8
+ interwork r9
+ interwork sl
+ interwork fp
+ interwork ip
+ interwork sp
+
+ /* The LR case has to be handled a little differently... */
+ .code 16
+
+ THUMB_FUNC_START _interwork_call_via_lr
+
+ bx pc
+ nop
+
+ .code 32
+ .globl .Lchange_lr
+.Lchange_lr:
+ tst lr, #1
+ stmeqdb r13!, {lr, pc}
+ mov ip, lr
+ adreq lr, _arm_return
+ bx ip
+
+ SIZE (_interwork_call_via_lr)
+
+#endif /* L_interwork_call_via_rX */
+#endif /* !__thumb2__ */
+
+/* Functions to support compact pic switch tables in thumb1 state.
+ All these routines take an index into the table in r0. The
+ table is at LR & ~1 (but this must be rounded up in the case
+ of 32-bit entires). They are only permitted to clobber r12
+ and r14 and r0 must be preserved on exit. */
+#ifdef L_thumb1_case_sqi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_sqi
+ push {r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r1, r1, #1
+ ldrsb r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_sqi)
+#endif
+
+#ifdef L_thumb1_case_uqi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_uqi
+ push {r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r1, r1, #1
+ ldrb r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_uqi)
+#endif
+
+#ifdef L_thumb1_case_shi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_shi
+ push {r0, r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r0, r0, #1
+ lsls r1, r1, #1
+ ldrsh r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r0, r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_shi)
+#endif
+
+#ifdef L_thumb1_case_uhi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_uhi
+ push {r0, r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r0, r0, #1
+ lsls r1, r1, #1
+ ldrh r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r0, r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_uhi)
+#endif
+
+#ifdef L_thumb1_case_si
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_si
+ push {r0, r1}
+ mov r1, lr
+ adds.n r1, r1, #2 /* Align to word. */
+ lsrs r1, r1, #2
+ lsls r0, r0, #2
+ lsls r1, r1, #2
+ ldr r0, [r1, r0]
+ adds r0, r0, r1
+ mov lr, r0
+ pop {r0, r1}
+ mov pc, lr /* We know we were called from thumb code. */
+ SIZE (__gnu_thumb1_case_si)
+#endif
+
+#endif /* Arch supports thumb. */
+
+#ifndef __symbian__
+#ifndef __ARM_ARCH_6M__
+#include "ieee754-df.S"
+#include "ieee754-sf.S"
+#include "bpabi.S"
+#else /* __ARM_ARCH_6M__ */
+#include "bpabi-v6m.S"
+#endif /* __ARM_ARCH_6M__ */
+#endif /* !__symbian__ */
diff --git a/gcc-4.9/libgcc/config/arm/libgcc-bpabi.ver b/gcc-4.9/libgcc/config/arm/libgcc-bpabi.ver
new file mode 100644
index 000000000..852359f8d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/libgcc-bpabi.ver
@@ -0,0 +1,108 @@
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_3.5 {
+ # BPABI symbols
+ __aeabi_cdcmpeq
+ __aeabi_cdcmple
+ __aeabi_cdrcmple
+ __aeabi_cfcmpeq
+ __aeabi_cfcmple
+ __aeabi_cfrcmple
+ __aeabi_d2f
+ __aeabi_d2iz
+ __aeabi_d2lz
+ __aeabi_d2uiz
+ __aeabi_d2ulz
+ __aeabi_dadd
+ __aeabi_dcmpeq
+ __aeabi_dcmpge
+ __aeabi_dcmpgt
+ __aeabi_dcmple
+ __aeabi_dcmplt
+ __aeabi_dcmpun
+ __aeabi_ddiv
+ __aeabi_dmul
+ __aeabi_dneg
+ __aeabi_drsub
+ __aeabi_dsub
+ __aeabi_f2d
+ __aeabi_f2iz
+ __aeabi_f2lz
+ __aeabi_f2uiz
+ __aeabi_f2ulz
+ __aeabi_fadd
+ __aeabi_fcmpeq
+ __aeabi_fcmpge
+ __aeabi_fcmpgt
+ __aeabi_fcmple
+ __aeabi_fcmplt
+ __aeabi_fcmpun
+ __aeabi_fdiv
+ __aeabi_fmul
+ __aeabi_fneg
+ __aeabi_frsub
+ __aeabi_fsub
+ __aeabi_i2d
+ __aeabi_i2f
+ __aeabi_idiv
+ __aeabi_idiv0
+ __aeabi_idivmod
+ __aeabi_l2d
+ __aeabi_l2f
+ __aeabi_lasr
+ __aeabi_lcmp
+ __aeabi_ldiv0
+ __aeabi_ldivmod
+ __aeabi_llsl
+ __aeabi_llsr
+ __aeabi_lmul
+ __aeabi_ui2d
+ __aeabi_ui2f
+ __aeabi_uidiv
+ __aeabi_uidivmod
+ __aeabi_uldivmod
+ __aeabi_ulcmp
+ __aeabi_ul2d
+ __aeabi_ul2f
+ __aeabi_uread4
+ __aeabi_uread8
+ __aeabi_uwrite4
+ __aeabi_uwrite8
+
+ # Exception-Handling
+ # \S 7.5
+ _Unwind_Complete
+ _Unwind_VRS_Get
+ _Unwind_VRS_Set
+ _Unwind_VRS_Pop
+ # \S 9.2
+ __aeabi_unwind_cpp_pr0
+ __aeabi_unwind_cpp_pr1
+ __aeabi_unwind_cpp_pr2
+ # The libstdc++ exception-handling personality routine uses this
+ # GNU-specific entry point.
+ __gnu_unwind_frame
+}
+
+%exclude {
+ _Unwind_Backtrace
+}
+GCC_4.3.0 {
+ _Unwind_Backtrace
+}
diff --git a/gcc-4.9/libgcc/config/arm/libunwind.S b/gcc-4.9/libgcc/config/arm/libunwind.S
new file mode 100644
index 000000000..94e8c9165
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/libunwind.S
@@ -0,0 +1,362 @@
+/* Support functions for the unwinder.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ Contributed by Paul Brook
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* An executable stack is *not* required for these functions. */
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
+#ifdef __ARM_EABI__
+/* Some attributes that are common to all routines in this file. */
+ /* Tag_ABI_align_needed: This code does not require 8-byte
+ alignment from the caller. */
+ /* .eabi_attribute 24, 0 -- default setting. */
+ /* Tag_ABI_align_preserved: This code preserves 8-byte
+ alignment in any callee. */
+ .eabi_attribute 25, 1
+#endif /* __ARM_EABI__ */
+
+#ifndef __symbian__
+
+#include "lib1funcs.S"
+
+.macro UNPREFIX name
+ .global SYM (\name)
+ EQUIV SYM (\name), SYM (__\name)
+.endm
+
+#if (__ARM_ARCH__ == 4)
+/* Some coprocessors require armv5. We know this code will never be run on
+ other cpus. Tell gas to allow armv5, but only mark the objects as armv4.
+ */
+.arch armv5t
+#ifdef __ARM_ARCH_4T__
+.object_arch armv4t
+#else
+.object_arch armv4
+#endif
+#endif
+
+#ifdef __ARM_ARCH_6M__
+
+/* r0 points to a 16-word block. Upload these values to the actual core
+ state. */
+FUNC_START restore_core_regs
+ mov r1, r0
+ add r1, r1, #52
+ ldmia r1!, {r3, r4, r5}
+ sub r3, r3, #4
+ mov ip, r3
+ str r5, [r3]
+ mov lr, r4
+ /* Restore r8-r11. */
+ mov r1, r0
+ add r1, r1, #32
+ ldmia r1!, {r2, r3, r4, r5}
+ mov r8, r2
+ mov r9, r3
+ mov sl, r4
+ mov fp, r5
+ mov r1, r0
+ add r1, r1, #8
+ ldmia r1!, {r2, r3, r4, r5, r6, r7}
+ ldr r1, [r0, #4]
+ ldr r0, [r0]
+ mov sp, ip
+ pop {pc}
+ FUNC_END restore_core_regs
+ UNPREFIX restore_core_regs
+
+/* ARMV6M does not have coprocessors, so these should never be used. */
+FUNC_START gnu_Unwind_Restore_VFP
+ RET
+
+/* Store VFR regsters d0-d15 to the address in r0. */
+FUNC_START gnu_Unwind_Save_VFP
+ RET
+
+/* Load VFP registers d0-d15 from the address in r0.
+ Use this to load from FSTMD format. */
+FUNC_START gnu_Unwind_Restore_VFP_D
+ RET
+
+/* Store VFP registers d0-d15 to the address in r0.
+ Use this to store in FLDMD format. */
+FUNC_START gnu_Unwind_Save_VFP_D
+ RET
+
+/* Load VFP registers d16-d31 from the address in r0.
+ Use this to load from FSTMD (=VSTM) format. Needs VFPv3. */
+FUNC_START gnu_Unwind_Restore_VFP_D_16_to_31
+ RET
+
+/* Store VFP registers d16-d31 to the address in r0.
+ Use this to store in FLDMD (=VLDM) format. Needs VFPv3. */
+FUNC_START gnu_Unwind_Save_VFP_D_16_to_31
+ RET
+
+FUNC_START gnu_Unwind_Restore_WMMXD
+ RET
+
+FUNC_START gnu_Unwind_Save_WMMXD
+ RET
+
+FUNC_START gnu_Unwind_Restore_WMMXC
+ RET
+
+FUNC_START gnu_Unwind_Save_WMMXC
+ RET
+
+.macro UNWIND_WRAPPER name nargs
+ FUNC_START \name
+ /* Create a phase2_vrs structure. */
+ /* Save r0 in the PC slot so we can use it as a scratch register. */
+ push {r0}
+ add r0, sp, #4
+ push {r0, lr} /* Push original SP and LR. */
+ /* Make space for r8-r12. */
+ sub sp, sp, #20
+ /* Save low registers. */
+ push {r0, r1, r2, r3, r4, r5, r6, r7}
+ /* Save high registers. */
+ add r0, sp, #32
+ mov r1, r8
+ mov r2, r9
+ mov r3, sl
+ mov r4, fp
+ mov r5, ip
+ stmia r0!, {r1, r2, r3, r4, r5}
+ /* Restore original low register values. */
+ add r0, sp, #4
+ ldmia r0!, {r1, r2, r3, r4, r5}
+ /* Restore orginial r0. */
+ ldr r0, [sp, #60]
+ str r0, [sp]
+ /* Demand-save flags, plus an extra word for alignment. */
+ mov r3, #0
+ push {r2, r3}
+ /* Point r1 at the block. Pass r[0..nargs) unchanged. */
+ add r\nargs, sp, #4
+
+ bl SYM (__gnu\name)
+
+ ldr r3, [sp, #64]
+ add sp, sp, #72
+ bx r3
+
+ FUNC_END \name
+ UNPREFIX \name
+.endm
+
+#else /* !__ARM_ARCH_6M__ */
+
+/* r0 points to a 16-word block. Upload these values to the actual core
+ state. */
+ARM_FUNC_START restore_core_regs
+ /* We must use sp as the base register when restoring sp. Push the
+ last 3 registers onto the top of the current stack to achieve
+ this. */
+ add r1, r0, #52
+ ldmia r1, {r3, r4, r5} /* {sp, lr, pc}. */
+#if defined(__thumb2__)
+ /* Thumb-2 doesn't allow sp in a load-multiple instruction, so push
+ the target address onto the target stack. This is safe as
+ we're always returning to somewhere further up the call stack. */
+ mov ip, r3
+ mov lr, r4
+ str r5, [ip, #-4]!
+#elif defined(__INTERWORKING__)
+ /* Restore pc into ip. */
+ mov r2, r5
+ stmfd sp!, {r2, r3, r4}
+#else
+ stmfd sp!, {r3, r4, r5}
+#endif
+ /* Don't bother restoring ip. */
+ ldmia r0, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp}
+#if defined(__thumb2__)
+ /* Pop the return address off the target stack. */
+ mov sp, ip
+ pop {pc}
+#elif defined(__INTERWORKING__)
+ /* Pop the three registers we pushed earlier. */
+ ldmfd sp, {ip, sp, lr}
+ bx ip
+#else
+ ldmfd sp, {sp, lr, pc}
+#endif
+ FUNC_END restore_core_regs
+ UNPREFIX restore_core_regs
+
+/* Load VFP registers d0-d15 from the address in r0.
+ Use this to load from FSTMX format. */
+ARM_FUNC_START gnu_Unwind_Restore_VFP
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on soft-float targets. */
+ ldc p11,cr0,[r0],{0x21} /* fldmiax r0, {d0-d15} */
+ RET
+
+/* Store VFP registers d0-d15 to the address in r0.
+ Use this to store in FSTMX format. */
+ARM_FUNC_START gnu_Unwind_Save_VFP
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on soft-float targets. */
+ stc p11,cr0,[r0],{0x21} /* fstmiax r0, {d0-d15} */
+ RET
+
+/* Load VFP registers d0-d15 from the address in r0.
+ Use this to load from FSTMD format. */
+ARM_FUNC_START gnu_Unwind_Restore_VFP_D
+ ldc p11,cr0,[r0],{0x20} /* fldmiad r0, {d0-d15} */
+ RET
+
+/* Store VFP registers d0-d15 to the address in r0.
+ Use this to store in FLDMD format. */
+ARM_FUNC_START gnu_Unwind_Save_VFP_D
+ stc p11,cr0,[r0],{0x20} /* fstmiad r0, {d0-d15} */
+ RET
+
+/* Load VFP registers d16-d31 from the address in r0.
+ Use this to load from FSTMD (=VSTM) format. Needs VFPv3. */
+ARM_FUNC_START gnu_Unwind_Restore_VFP_D_16_to_31
+ ldcl p11,cr0,[r0],{0x20} /* vldm r0, {d16-d31} */
+ RET
+
+/* Store VFP registers d16-d31 to the address in r0.
+ Use this to store in FLDMD (=VLDM) format. Needs VFPv3. */
+ARM_FUNC_START gnu_Unwind_Save_VFP_D_16_to_31
+ stcl p11,cr0,[r0],{0x20} /* vstm r0, {d16-d31} */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Restore_WMMXD
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ ldcl p1, cr0, [r0], #8 /* wldrd wr0, [r0], #8 */
+ ldcl p1, cr1, [r0], #8 /* wldrd wr1, [r0], #8 */
+ ldcl p1, cr2, [r0], #8 /* wldrd wr2, [r0], #8 */
+ ldcl p1, cr3, [r0], #8 /* wldrd wr3, [r0], #8 */
+ ldcl p1, cr4, [r0], #8 /* wldrd wr4, [r0], #8 */
+ ldcl p1, cr5, [r0], #8 /* wldrd wr5, [r0], #8 */
+ ldcl p1, cr6, [r0], #8 /* wldrd wr6, [r0], #8 */
+ ldcl p1, cr7, [r0], #8 /* wldrd wr7, [r0], #8 */
+ ldcl p1, cr8, [r0], #8 /* wldrd wr8, [r0], #8 */
+ ldcl p1, cr9, [r0], #8 /* wldrd wr9, [r0], #8 */
+ ldcl p1, cr10, [r0], #8 /* wldrd wr10, [r0], #8 */
+ ldcl p1, cr11, [r0], #8 /* wldrd wr11, [r0], #8 */
+ ldcl p1, cr12, [r0], #8 /* wldrd wr12, [r0], #8 */
+ ldcl p1, cr13, [r0], #8 /* wldrd wr13, [r0], #8 */
+ ldcl p1, cr14, [r0], #8 /* wldrd wr14, [r0], #8 */
+ ldcl p1, cr15, [r0], #8 /* wldrd wr15, [r0], #8 */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Save_WMMXD
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ stcl p1, cr0, [r0], #8 /* wstrd wr0, [r0], #8 */
+ stcl p1, cr1, [r0], #8 /* wstrd wr1, [r0], #8 */
+ stcl p1, cr2, [r0], #8 /* wstrd wr2, [r0], #8 */
+ stcl p1, cr3, [r0], #8 /* wstrd wr3, [r0], #8 */
+ stcl p1, cr4, [r0], #8 /* wstrd wr4, [r0], #8 */
+ stcl p1, cr5, [r0], #8 /* wstrd wr5, [r0], #8 */
+ stcl p1, cr6, [r0], #8 /* wstrd wr6, [r0], #8 */
+ stcl p1, cr7, [r0], #8 /* wstrd wr7, [r0], #8 */
+ stcl p1, cr8, [r0], #8 /* wstrd wr8, [r0], #8 */
+ stcl p1, cr9, [r0], #8 /* wstrd wr9, [r0], #8 */
+ stcl p1, cr10, [r0], #8 /* wstrd wr10, [r0], #8 */
+ stcl p1, cr11, [r0], #8 /* wstrd wr11, [r0], #8 */
+ stcl p1, cr12, [r0], #8 /* wstrd wr12, [r0], #8 */
+ stcl p1, cr13, [r0], #8 /* wstrd wr13, [r0], #8 */
+ stcl p1, cr14, [r0], #8 /* wstrd wr14, [r0], #8 */
+ stcl p1, cr15, [r0], #8 /* wstrd wr15, [r0], #8 */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Restore_WMMXC
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ ldc2 p1, cr8, [r0], #4 /* wldrw wcgr0, [r0], #4 */
+ ldc2 p1, cr9, [r0], #4 /* wldrw wcgr1, [r0], #4 */
+ ldc2 p1, cr10, [r0], #4 /* wldrw wcgr2, [r0], #4 */
+ ldc2 p1, cr11, [r0], #4 /* wldrw wcgr3, [r0], #4 */
+ RET
+
+ARM_FUNC_START gnu_Unwind_Save_WMMXC
+ /* Use the generic coprocessor form so that gas doesn't complain
+ on non-iWMMXt targets. */
+ stc2 p1, cr8, [r0], #4 /* wstrw wcgr0, [r0], #4 */
+ stc2 p1, cr9, [r0], #4 /* wstrw wcgr1, [r0], #4 */
+ stc2 p1, cr10, [r0], #4 /* wstrw wcgr2, [r0], #4 */
+ stc2 p1, cr11, [r0], #4 /* wstrw wcgr3, [r0], #4 */
+ RET
+
+/* Wrappers to save core registers, then call the real routine. */
+
+.macro UNWIND_WRAPPER name nargs
+ ARM_FUNC_START \name
+ /* Create a phase2_vrs structure. */
+ /* Split reg push in two to ensure the correct value for sp. */
+#if defined(__thumb2__)
+ mov ip, sp
+ push {lr} /* PC is ignored. */
+ push {ip, lr} /* Push original SP and LR. */
+#else
+ stmfd sp!, {sp, lr, pc}
+#endif
+ stmfd sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip}
+
+ /* Demand-save flags, plus an extra word for alignment. */
+ mov r3, #0
+ stmfd sp!, {r2, r3}
+
+ /* Point r1 at the block. Pass r[0..nargs) unchanged. */
+ add r\nargs, sp, #4
+#if defined(__thumb__) && !defined(__thumb2__)
+ /* Switch back to thumb mode to avoid interworking hassle. */
+ adr ip, .L1_\name
+ orr ip, ip, #1
+ bx ip
+ .thumb
+.L1_\name:
+ bl SYM (__gnu\name) __PLT__
+ ldr r3, [sp, #64]
+ add sp, #72
+ bx r3
+#else
+ bl SYM (__gnu\name) __PLT__
+ ldr lr, [sp, #64]
+ add sp, sp, #72
+ RET
+#endif
+ FUNC_END \name
+ UNPREFIX \name
+.endm
+
+#endif /* !__ARM_ARCH_6M__ */
+
+UNWIND_WRAPPER _Unwind_RaiseException 1
+UNWIND_WRAPPER _Unwind_Resume 1
+UNWIND_WRAPPER _Unwind_Resume_or_Rethrow 1
+UNWIND_WRAPPER _Unwind_ForcedUnwind 3
+UNWIND_WRAPPER _Unwind_Backtrace 2
+
+#endif /* ndef __symbian__ */
diff --git a/gcc-4.9/libgcc/config/arm/linux-atomic-64bit.c b/gcc-4.9/libgcc/config/arm/linux-atomic-64bit.c
new file mode 100644
index 000000000..5b8c6e2ff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/linux-atomic-64bit.c
@@ -0,0 +1,166 @@
+/* 64bit Linux-specific atomic operations for ARM EABI.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Based on linux-atomic.c
+
+ 64 bit additions david.gilbert@linaro.org
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* 64bit helper functions for atomic operations; the compiler will
+ call these when the code is compiled for a CPU without ldrexd/strexd.
+ (If the CPU had those then the compiler inlines the operation).
+
+ These helpers require a kernel helper that's only present on newer
+ kernels; we check for that in an init section and bail out rather
+ unceremoneously. */
+
+extern unsigned int __write (int fd, const void *buf, unsigned int count);
+extern void abort (void);
+
+/* Kernel helper for compare-and-exchange. */
+typedef int (__kernel_cmpxchg64_t) (const long long* oldval,
+ const long long* newval,
+ long long *ptr);
+#define __kernel_cmpxchg64 (*(__kernel_cmpxchg64_t *) 0xffff0f60)
+
+/* Kernel helper page version number. */
+#define __kernel_helper_version (*(unsigned int *)0xffff0ffc)
+
+/* Check that the kernel has a new enough version at load. */
+static void __check_for_sync8_kernelhelper (void)
+{
+ if (__kernel_helper_version < 5)
+ {
+ const char err[] = "A newer kernel is required to run this binary. "
+ "(__kernel_cmpxchg64 helper)\n";
+ /* At this point we need a way to crash with some information
+ for the user - I'm not sure I can rely on much else being
+ available at this point, so do the same as generic-morestack.c
+ write () and abort (). */
+ __write (2 /* stderr. */, err, sizeof (err));
+ abort ();
+ }
+};
+
+static void (*__sync8_kernelhelper_inithook[]) (void)
+ __attribute__ ((used, section (".init_array"))) = {
+ &__check_for_sync8_kernelhelper
+};
+
+#define HIDDEN __attribute__ ((visibility ("hidden")))
+
+#define FETCH_AND_OP_WORD64(OP, PFX_OP, INF_OP) \
+ long long HIDDEN \
+ __sync_fetch_and_##OP##_8 (long long *ptr, long long val) \
+ { \
+ int failure; \
+ long long tmp,tmp2; \
+ \
+ do { \
+ tmp = *ptr; \
+ tmp2 = PFX_OP (tmp INF_OP val); \
+ failure = __kernel_cmpxchg64 (&tmp, &tmp2, ptr); \
+ } while (failure != 0); \
+ \
+ return tmp; \
+ }
+
+FETCH_AND_OP_WORD64 (add, , +)
+FETCH_AND_OP_WORD64 (sub, , -)
+FETCH_AND_OP_WORD64 (or, , |)
+FETCH_AND_OP_WORD64 (and, , &)
+FETCH_AND_OP_WORD64 (xor, , ^)
+FETCH_AND_OP_WORD64 (nand, ~, &)
+
+#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
+#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
+
+/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for
+ subword-sized quantities. */
+
+#define OP_AND_FETCH_WORD64(OP, PFX_OP, INF_OP) \
+ long long HIDDEN \
+ __sync_##OP##_and_fetch_8 (long long *ptr, long long val) \
+ { \
+ int failure; \
+ long long tmp,tmp2; \
+ \
+ do { \
+ tmp = *ptr; \
+ tmp2 = PFX_OP (tmp INF_OP val); \
+ failure = __kernel_cmpxchg64 (&tmp, &tmp2, ptr); \
+ } while (failure != 0); \
+ \
+ return tmp2; \
+ }
+
+OP_AND_FETCH_WORD64 (add, , +)
+OP_AND_FETCH_WORD64 (sub, , -)
+OP_AND_FETCH_WORD64 (or, , |)
+OP_AND_FETCH_WORD64 (and, , &)
+OP_AND_FETCH_WORD64 (xor, , ^)
+OP_AND_FETCH_WORD64 (nand, ~, &)
+
+long long HIDDEN
+__sync_val_compare_and_swap_8 (long long *ptr, long long oldval,
+ long long newval)
+{
+ int failure;
+ long long actual_oldval;
+
+ while (1)
+ {
+ actual_oldval = *ptr;
+
+ if (__builtin_expect (oldval != actual_oldval, 0))
+ return actual_oldval;
+
+ failure = __kernel_cmpxchg64 (&actual_oldval, &newval, ptr);
+
+ if (__builtin_expect (!failure, 1))
+ return oldval;
+ }
+}
+
+typedef unsigned char bool;
+
+bool HIDDEN
+__sync_bool_compare_and_swap_8 (long long *ptr, long long oldval,
+ long long newval)
+{
+ int failure = __kernel_cmpxchg64 (&oldval, &newval, ptr);
+ return (failure == 0);
+}
+
+long long HIDDEN
+__sync_lock_test_and_set_8 (long long *ptr, long long val)
+{
+ int failure;
+ long long oldval;
+
+ do {
+ oldval = *ptr;
+ failure = __kernel_cmpxchg64 (&oldval, &val, ptr);
+ } while (failure != 0);
+
+ return oldval;
+}
diff --git a/gcc-4.9/libgcc/config/arm/linux-atomic.c b/gcc-4.9/libgcc/config/arm/linux-atomic.c
new file mode 100644
index 000000000..e2817058d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/linux-atomic.c
@@ -0,0 +1,279 @@
+/* Linux-specific atomic operations for ARM EABI.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Kernel helper for compare-and-exchange. */
+typedef int (__kernel_cmpxchg_t) (int oldval, int newval, int *ptr);
+#define __kernel_cmpxchg (*(__kernel_cmpxchg_t *) 0xffff0fc0)
+
+/* Kernel helper for memory barrier. */
+typedef void (__kernel_dmb_t) (void);
+#define __kernel_dmb (*(__kernel_dmb_t *) 0xffff0fa0)
+
+/* Note: we implement byte, short and int versions of atomic operations using
+ the above kernel helpers; see linux-atomic-64bit.c for "long long" (64-bit)
+ operations. */
+
+#define HIDDEN __attribute__ ((visibility ("hidden")))
+
+#ifdef __ARMEL__
+#define INVERT_MASK_1 0
+#define INVERT_MASK_2 0
+#else
+#define INVERT_MASK_1 24
+#define INVERT_MASK_2 16
+#endif
+
+#define MASK_1 0xffu
+#define MASK_2 0xffffu
+
+#define FETCH_AND_OP_WORD(OP, PFX_OP, INF_OP) \
+ int HIDDEN \
+ __sync_fetch_and_##OP##_4 (int *ptr, int val) \
+ { \
+ int failure, tmp; \
+ \
+ do { \
+ tmp = *ptr; \
+ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \
+ } while (failure != 0); \
+ \
+ return tmp; \
+ }
+
+FETCH_AND_OP_WORD (add, , +)
+FETCH_AND_OP_WORD (sub, , -)
+FETCH_AND_OP_WORD (or, , |)
+FETCH_AND_OP_WORD (and, , &)
+FETCH_AND_OP_WORD (xor, , ^)
+FETCH_AND_OP_WORD (nand, ~, &)
+
+#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
+#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
+
+/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for
+ subword-sized quantities. */
+
+#define SUBWORD_SYNC_OP(OP, PFX_OP, INF_OP, TYPE, WIDTH, RETURN) \
+ TYPE HIDDEN \
+ NAME##_##RETURN (OP, WIDTH) (TYPE *ptr, TYPE val) \
+ { \
+ int *wordptr = (int *) ((unsigned int) ptr & ~3); \
+ unsigned int mask, shift, oldval, newval; \
+ int failure; \
+ \
+ shift = (((unsigned int) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ do { \
+ oldval = *wordptr; \
+ newval = ((PFX_OP (((oldval & mask) >> shift) \
+ INF_OP (unsigned int) val)) << shift) & mask; \
+ newval |= oldval & ~mask; \
+ failure = __kernel_cmpxchg (oldval, newval, wordptr); \
+ } while (failure != 0); \
+ \
+ return (RETURN & mask) >> shift; \
+ }
+
+SUBWORD_SYNC_OP (add, , +, short, 2, oldval)
+SUBWORD_SYNC_OP (sub, , -, short, 2, oldval)
+SUBWORD_SYNC_OP (or, , |, short, 2, oldval)
+SUBWORD_SYNC_OP (and, , &, short, 2, oldval)
+SUBWORD_SYNC_OP (xor, , ^, short, 2, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, short, 2, oldval)
+
+SUBWORD_SYNC_OP (add, , +, signed char, 1, oldval)
+SUBWORD_SYNC_OP (sub, , -, signed char, 1, oldval)
+SUBWORD_SYNC_OP (or, , |, signed char, 1, oldval)
+SUBWORD_SYNC_OP (and, , &, signed char, 1, oldval)
+SUBWORD_SYNC_OP (xor, , ^, signed char, 1, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, signed char, 1, oldval)
+
+#define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \
+ int HIDDEN \
+ __sync_##OP##_and_fetch_4 (int *ptr, int val) \
+ { \
+ int tmp, failure; \
+ \
+ do { \
+ tmp = *ptr; \
+ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \
+ } while (failure != 0); \
+ \
+ return PFX_OP (tmp INF_OP val); \
+ }
+
+OP_AND_FETCH_WORD (add, , +)
+OP_AND_FETCH_WORD (sub, , -)
+OP_AND_FETCH_WORD (or, , |)
+OP_AND_FETCH_WORD (and, , &)
+OP_AND_FETCH_WORD (xor, , ^)
+OP_AND_FETCH_WORD (nand, ~, &)
+
+SUBWORD_SYNC_OP (add, , +, short, 2, newval)
+SUBWORD_SYNC_OP (sub, , -, short, 2, newval)
+SUBWORD_SYNC_OP (or, , |, short, 2, newval)
+SUBWORD_SYNC_OP (and, , &, short, 2, newval)
+SUBWORD_SYNC_OP (xor, , ^, short, 2, newval)
+SUBWORD_SYNC_OP (nand, ~, &, short, 2, newval)
+
+SUBWORD_SYNC_OP (add, , +, signed char, 1, newval)
+SUBWORD_SYNC_OP (sub, , -, signed char, 1, newval)
+SUBWORD_SYNC_OP (or, , |, signed char, 1, newval)
+SUBWORD_SYNC_OP (and, , &, signed char, 1, newval)
+SUBWORD_SYNC_OP (xor, , ^, signed char, 1, newval)
+SUBWORD_SYNC_OP (nand, ~, &, signed char, 1, newval)
+
+int HIDDEN
+__sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
+{
+ int actual_oldval, fail;
+
+ while (1)
+ {
+ actual_oldval = *ptr;
+
+ if (__builtin_expect (oldval != actual_oldval, 0))
+ return actual_oldval;
+
+ fail = __kernel_cmpxchg (actual_oldval, newval, ptr);
+
+ if (__builtin_expect (!fail, 1))
+ return oldval;
+ }
+}
+
+#define SUBWORD_VAL_CAS(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ int *wordptr = (int *)((unsigned int) ptr & ~3), fail; \
+ unsigned int mask, shift, actual_oldval, actual_newval; \
+ \
+ shift = (((unsigned int) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ while (1) \
+ { \
+ actual_oldval = *wordptr; \
+ \
+ if (__builtin_expect (((actual_oldval & mask) >> shift) != \
+ ((unsigned int) oldval & MASK_##WIDTH), 0)) \
+ return (actual_oldval & mask) >> shift; \
+ \
+ actual_newval = (actual_oldval & ~mask) \
+ | (((unsigned int) newval << shift) & mask); \
+ \
+ fail = __kernel_cmpxchg (actual_oldval, actual_newval, \
+ wordptr); \
+ \
+ if (__builtin_expect (!fail, 1)) \
+ return oldval; \
+ } \
+ }
+
+SUBWORD_VAL_CAS (short, 2)
+SUBWORD_VAL_CAS (signed char, 1)
+
+typedef unsigned char bool;
+
+bool HIDDEN
+__sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
+{
+ int failure = __kernel_cmpxchg (oldval, newval, ptr);
+ return (failure == 0);
+}
+
+#define SUBWORD_BOOL_CAS(TYPE, WIDTH) \
+ bool HIDDEN \
+ __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ TYPE actual_oldval \
+ = __sync_val_compare_and_swap_##WIDTH (ptr, oldval, newval); \
+ return (oldval == actual_oldval); \
+ }
+
+SUBWORD_BOOL_CAS (short, 2)
+SUBWORD_BOOL_CAS (signed char, 1)
+
+void HIDDEN
+__sync_synchronize (void)
+{
+ __kernel_dmb ();
+}
+
+int HIDDEN
+__sync_lock_test_and_set_4 (int *ptr, int val)
+{
+ int failure, oldval;
+
+ do {
+ oldval = *ptr;
+ failure = __kernel_cmpxchg (oldval, val, ptr);
+ } while (failure != 0);
+
+ return oldval;
+}
+
+#define SUBWORD_TEST_AND_SET(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_lock_test_and_set_##WIDTH (TYPE *ptr, TYPE val) \
+ { \
+ int failure; \
+ unsigned int oldval, newval, shift, mask; \
+ int *wordptr = (int *) ((unsigned int) ptr & ~3); \
+ \
+ shift = (((unsigned int) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ do { \
+ oldval = *wordptr; \
+ newval = (oldval & ~mask) \
+ | (((unsigned int) val << shift) & mask); \
+ failure = __kernel_cmpxchg (oldval, newval, wordptr); \
+ } while (failure != 0); \
+ \
+ return (oldval & mask) >> shift; \
+ }
+
+SUBWORD_TEST_AND_SET (short, 2)
+SUBWORD_TEST_AND_SET (signed char, 1)
+
+#define SYNC_LOCK_RELEASE(TYPE, WIDTH) \
+ void HIDDEN \
+ __sync_lock_release_##WIDTH (TYPE *ptr) \
+ { \
+ /* All writes before this point must be seen before we release \
+ the lock itself. */ \
+ __kernel_dmb (); \
+ *ptr = 0; \
+ }
+
+SYNC_LOCK_RELEASE (long long, 8)
+SYNC_LOCK_RELEASE (int, 4)
+SYNC_LOCK_RELEASE (short, 2)
+SYNC_LOCK_RELEASE (char, 1)
diff --git a/gcc-4.9/libgcc/config/arm/pr-support.c b/gcc-4.9/libgcc/config/arm/pr-support.c
new file mode 100644
index 000000000..b3b773920
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/pr-support.c
@@ -0,0 +1,385 @@
+/* ARM EABI compliant unwinding routines
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ Contributed by Paul Brook
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "unwind.h"
+
+/* We add a prototype for abort here to avoid creating a dependency on
+ target headers. */
+extern void abort (void);
+
+typedef struct _ZSt9type_info type_info; /* This names C++ type_info type */
+
+/* Misc constants. */
+#define R_IP 12
+#define R_SP 13
+#define R_LR 14
+#define R_PC 15
+
+#define uint32_highbit (((_uw) 1) << 31)
+
+void __attribute__((weak)) __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
+
+/* Unwind descriptors. */
+
+typedef struct
+{
+ _uw16 length;
+ _uw16 offset;
+} EHT16;
+
+typedef struct
+{
+ _uw length;
+ _uw offset;
+} EHT32;
+
+/* Calculate the address encoded by a 31-bit self-relative offset at address
+ P. Copy of routine in unwind-arm.c. */
+
+static inline _uw
+selfrel_offset31 (const _uw *p)
+{
+ _uw offset;
+
+ offset = *p;
+ /* Sign extend to 32 bits. */
+ if (offset & (1 << 30))
+ offset |= 1u << 31;
+
+ return offset + (_uw) p;
+}
+
+
+/* Personality routine helper functions. */
+
+#define CODE_FINISH (0xb0)
+
+/* Return the next byte of unwinding information, or CODE_FINISH if there is
+ no data remaining. */
+static inline _uw8
+next_unwind_byte (__gnu_unwind_state * uws)
+{
+ _uw8 b;
+
+ if (uws->bytes_left == 0)
+ {
+ /* Load another word */
+ if (uws->words_left == 0)
+ return CODE_FINISH; /* Nothing left. */
+ uws->words_left--;
+ uws->data = *(uws->next++);
+ uws->bytes_left = 3;
+ }
+ else
+ uws->bytes_left--;
+
+ /* Extract the most significant byte. */
+ b = (uws->data >> 24) & 0xff;
+ uws->data <<= 8;
+ return b;
+}
+
+/* Execute the unwinding instructions described by UWS. */
+_Unwind_Reason_Code
+__gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws)
+{
+ _uw op;
+ int set_pc;
+ _uw reg;
+
+ set_pc = 0;
+ for (;;)
+ {
+ op = next_unwind_byte (uws);
+ if (op == CODE_FINISH)
+ {
+ /* If we haven't already set pc then copy it from lr. */
+ if (!set_pc)
+ {
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_LR, _UVRSD_UINT32,
+ &reg);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_PC, _UVRSD_UINT32,
+ &reg);
+ set_pc = 1;
+ }
+ /* Drop out of the loop. */
+ break;
+ }
+ if ((op & 0x80) == 0)
+ {
+ /* vsp = vsp +- (imm6 << 2 + 4). */
+ _uw offset;
+
+ offset = ((op & 0x3f) << 2) + 4;
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ if (op & 0x40)
+ reg -= offset;
+ else
+ reg += offset;
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ continue;
+ }
+
+ if ((op & 0xf0) == 0x80)
+ {
+ op = (op << 8) | next_unwind_byte (uws);
+ if (op == 0x8000)
+ {
+ /* Refuse to unwind. */
+ return _URC_FAILURE;
+ }
+ /* Pop r4-r15 under mask. */
+ op = (op << 4) & 0xfff0;
+ if (_Unwind_VRS_Pop (context, _UVRSC_CORE, op, _UVRSD_UINT32)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ if (op & (1 << R_PC))
+ set_pc = 1;
+ continue;
+ }
+ if ((op & 0xf0) == 0x90)
+ {
+ op &= 0xf;
+ if (op == 13 || op == 15)
+ /* Reserved. */
+ return _URC_FAILURE;
+ /* vsp = r[nnnn]. */
+ _Unwind_VRS_Get (context, _UVRSC_CORE, op, _UVRSD_UINT32, &reg);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ continue;
+ }
+ if ((op & 0xf0) == 0xa0)
+ {
+ /* Pop r4-r[4+nnn], [lr]. */
+ _uw mask;
+
+ mask = (0xff0 >> (7 - (op & 7))) & 0xff0;
+ if (op & 8)
+ mask |= (1 << R_LR);
+ if (_Unwind_VRS_Pop (context, _UVRSC_CORE, mask, _UVRSD_UINT32)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if ((op & 0xf0) == 0xb0)
+ {
+ /* op == 0xb0 already handled. */
+ if (op == 0xb1)
+ {
+ op = next_unwind_byte (uws);
+ if (op == 0 || ((op & 0xf0) != 0))
+ /* Spare. */
+ return _URC_FAILURE;
+ /* Pop r0-r4 under mask. */
+ if (_Unwind_VRS_Pop (context, _UVRSC_CORE, op, _UVRSD_UINT32)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if (op == 0xb2)
+ {
+ /* vsp = vsp + 0x204 + (uleb128 << 2). */
+ int shift;
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32,
+ &reg);
+ op = next_unwind_byte (uws);
+ shift = 2;
+ while (op & 0x80)
+ {
+ reg += ((op & 0x7f) << shift);
+ shift += 7;
+ op = next_unwind_byte (uws);
+ }
+ reg += ((op & 0x7f) << shift) + 0x204;
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32,
+ &reg);
+ continue;
+ }
+ if (op == 0xb3)
+ {
+ /* Pop VFP registers with fldmx. */
+ op = next_unwind_byte (uws);
+ op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_VFPX)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if ((op & 0xfc) == 0xb4) /* Obsolete FPA. */
+ return _URC_FAILURE;
+
+ /* op & 0xf8 == 0xb8. */
+ /* Pop VFP D[8]-D[8+nnn] with fldmx. */
+ op = 0x80000 | ((op & 7) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_VFPX)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if ((op & 0xf0) == 0xc0)
+ {
+ if (op == 0xc6)
+ {
+ /* Pop iWMMXt D registers. */
+ op = next_unwind_byte (uws);
+ op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_WMMXD, op, _UVRSD_UINT64)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if (op == 0xc7)
+ {
+ op = next_unwind_byte (uws);
+ if (op == 0 || (op & 0xf0) != 0)
+ /* Spare. */
+ return _URC_FAILURE;
+ /* Pop iWMMXt wCGR{3,2,1,0} under mask. */
+ if (_Unwind_VRS_Pop (context, _UVRSC_WMMXC, op, _UVRSD_UINT32)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if ((op & 0xf8) == 0xc0)
+ {
+ /* Pop iWMMXt wR[10]-wR[10+nnn]. */
+ op = 0xa0000 | ((op & 0xf) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_WMMXD, op, _UVRSD_UINT64)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if (op == 0xc8)
+ {
+ /* Pop VFPv3 registers D[16+ssss]-D[16+ssss+cccc] with vldm. */
+ op = next_unwind_byte (uws);
+ op = (((op & 0xf0) + 16) << 12) | ((op & 0xf) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_DOUBLE)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ if (op == 0xc9)
+ {
+ /* Pop VFP registers with fldmd. */
+ op = next_unwind_byte (uws);
+ op = ((op & 0xf0) << 12) | ((op & 0xf) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_DOUBLE)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ /* Spare. */
+ return _URC_FAILURE;
+ }
+ if ((op & 0xf8) == 0xd0)
+ {
+ /* Pop VFP D[8]-D[8+nnn] with fldmd. */
+ op = 0x80000 | ((op & 7) + 1);
+ if (_Unwind_VRS_Pop (context, _UVRSC_VFP, op, _UVRSD_DOUBLE)
+ != _UVRSR_OK)
+ return _URC_FAILURE;
+ continue;
+ }
+ /* Spare. */
+ return _URC_FAILURE;
+ }
+ return _URC_OK;
+}
+
+
+/* Execute the unwinding instructions associated with a frame. UCBP and
+ CONTEXT are the current exception object and virtual CPU state
+ respectively. */
+
+_Unwind_Reason_Code
+__gnu_unwind_frame (_Unwind_Control_Block * ucbp, _Unwind_Context * context)
+{
+ _uw *ptr;
+ __gnu_unwind_state uws;
+
+ ptr = (_uw *) ucbp->pr_cache.ehtp;
+ /* Skip over the personality routine address. */
+ ptr++;
+ /* Setup the unwinder state. */
+ uws.data = (*ptr) << 8;
+ uws.next = ptr + 1;
+ uws.bytes_left = 3;
+ uws.words_left = ((*ptr) >> 24) & 0xff;
+
+ return __gnu_unwind_execute (context, &uws);
+}
+
+/* Get the _Unwind_Control_Block from an _Unwind_Context. */
+
+static inline _Unwind_Control_Block *
+unwind_UCB_from_context (_Unwind_Context * context)
+{
+ return (_Unwind_Control_Block *) _Unwind_GetGR (context, R_IP);
+}
+
+/* Get the start address of the function being unwound. */
+
+_Unwind_Ptr
+_Unwind_GetRegionStart (_Unwind_Context * context)
+{
+ _Unwind_Control_Block *ucbp;
+
+ ucbp = unwind_UCB_from_context (context);
+ return (_Unwind_Ptr) ucbp->pr_cache.fnstart;
+}
+
+/* Find the Language specific exception data. */
+
+void *
+_Unwind_GetLanguageSpecificData (_Unwind_Context * context)
+{
+ _Unwind_Control_Block *ucbp;
+ _uw *ptr;
+
+ /* Get a pointer to the exception table entry. */
+ ucbp = unwind_UCB_from_context (context);
+ ptr = (_uw *) ucbp->pr_cache.ehtp;
+ /* Skip the personality routine address. */
+ ptr++;
+ /* Skip the unwind opcodes. */
+ ptr += (((*ptr) >> 24) & 0xff) + 1;
+
+ return ptr;
+}
+
+
+/* These two should never be used. */
+
+_Unwind_Ptr
+_Unwind_GetDataRelBase (_Unwind_Context *context __attribute__ ((unused)))
+{
+ abort ();
+}
+
+_Unwind_Ptr
+_Unwind_GetTextRelBase (_Unwind_Context *context __attribute__ ((unused)))
+{
+ abort ();
+}
diff --git a/gcc-4.9/libgcc/config/arm/sfp-machine.h b/gcc-4.9/libgcc/config/arm/sfp-machine.h
new file mode 100644
index 000000000..4f2b15d7e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/sfp-machine.h
@@ -0,0 +1,110 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+/* According to RTABI, QNAN is only with the most significant bit of the
+ significand set, and all other significand bits zero. */
+#define _FP_NANFRAC_H 0
+#define _FP_NANFRAC_S 0
+#define _FP_NANFRAC_D 0, 0
+#define _FP_NANFRAC_Q 0, 0, 0, 0
+#define _FP_NANSIGN_H 0
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined __ARMEB__
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
+#ifdef __ARM_EABI__
+/* Rename functions to their EABI names. */
+/* The comparison functions need wrappers for EABI semantics, so
+ leave them unmolested. */
+#define __negsf2 __aeabi_fneg
+#define __subsf3 __aeabi_fsub
+#define __addsf3 __aeabi_fadd
+#define __floatunsisf __aeabi_ui2f
+#define __floatsisf __aeabi_i2f
+#define __floatundisf __aeabi_ul2f
+#define __floatdisf __aeabi_l2f
+#define __mulsf3 __aeabi_fmul
+#define __divsf3 __aeabi_fdiv
+#define __unordsf2 __aeabi_fcmpun
+#define __fixsfsi __aeabi_f2iz
+#define __fixunssfsi __aeabi_f2uiz
+#define __fixsfdi __aeabi_f2lz
+#define __fixunssfdi __aeabi_f2ulz
+#define __floatdisf __aeabi_l2f
+
+#define __negdf2 __aeabi_dneg
+#define __subdf3 __aeabi_dsub
+#define __adddf3 __aeabi_dadd
+#define __floatunsidf __aeabi_ui2d
+#define __floatsidf __aeabi_i2d
+#define __extendsfdf2 __aeabi_f2d
+#define __truncdfsf2 __aeabi_d2f
+#define __floatundidf __aeabi_ul2d
+#define __floatdidf __aeabi_l2d
+#define __muldf3 __aeabi_dmul
+#define __divdf3 __aeabi_ddiv
+#define __unorddf2 __aeabi_dcmpun
+#define __fixdfsi __aeabi_d2iz
+#define __fixunsdfsi __aeabi_d2uiz
+#define __fixdfdi __aeabi_d2lz
+#define __fixunsdfdi __aeabi_d2ulz
+#define __floatdidf __aeabi_l2d
+#define __extendhfsf2 __gnu_h2f_ieee
+#define __truncsfhf2 __gnu_f2h_ieee
+
+#endif /* __ARM_EABI__ */
diff --git a/gcc-4.9/libgcc/config/arm/symbian-lib.h b/gcc-4.9/libgcc/config/arm/symbian-lib.h
new file mode 100644
index 000000000..274ff26ed
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/symbian-lib.h
@@ -0,0 +1,28 @@
+/* Configuration file for Symbian OS on ARM processors, library renames.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* SymbianOS provides the BPABI routines in a separate library.
+ Therefore, we do not need to define any of them in libgcc. */
+#undef RENAME_LIBRARY
+#define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) /* empty */
diff --git a/gcc-4.9/libgcc/config/arm/t-arm b/gcc-4.9/libgcc/config/arm/t-arm
new file mode 100644
index 000000000..4e17e99b4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-arm
@@ -0,0 +1,3 @@
+LIB1ASMSRC = arm/lib1funcs.S
+LIB1ASMFUNCS = _thumb1_case_sqi _thumb1_case_uqi _thumb1_case_shi \
+ _thumb1_case_uhi _thumb1_case_si
diff --git a/gcc-4.9/libgcc/config/arm/t-bpabi b/gcc-4.9/libgcc/config/arm/t-bpabi
new file mode 100644
index 000000000..dddddc7c4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-bpabi
@@ -0,0 +1,20 @@
+# Add the bpabi.S functions.
+LIB1ASMFUNCS += _aeabi_lcmp _aeabi_ulcmp _aeabi_ldivmod _aeabi_uldivmod
+
+# Add the BPABI C functions.
+LIB2ADD += $(srcdir)/config/arm/bpabi.c \
+ $(srcdir)/config/arm/unaligned-funcs.c
+
+LIB2ADD_ST += $(srcdir)/config/arm/fp16.c
+
+LIB2ADDEH = $(srcdir)/config/arm/unwind-arm.c \
+ $(srcdir)/config/arm/libunwind.S \
+ $(srcdir)/config/arm/pr-support.c $(srcdir)/unwind-c.c
+
+# Add the BPABI names.
+SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
+
+# On ARM, specifying -fnon-call-exceptions will needlessly pull in
+# the unwinder in simple programs which use 64-bit division. Omitting
+# the option is safe.
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
diff --git a/gcc-4.9/libgcc/config/arm/t-elf b/gcc-4.9/libgcc/config/arm/t-elf
new file mode 100644
index 000000000..9e7a3170f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-elf
@@ -0,0 +1,18 @@
+# For most CPUs we have an assembly soft-float implementations.
+# However this is not true for ARMv6M. Here we want to use the soft-fp C
+# implementation. The soft-fp code is only build for ARMv6M. This pulls
+# in the asm implementation for other CPUs.
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
+ _call_via_rX _interwork_call_via_rX \
+ _lshrdi3 _ashrdi3 _ashldi3 \
+ _arm_negdf2 _arm_addsubdf3 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
+ _arm_fixdfsi _arm_fixunsdfsi \
+ _arm_truncdfsf2 _arm_negsf2 _arm_addsubsf3 _arm_muldivsf3 \
+ _arm_cmpsf2 _arm_unordsf2 _arm_fixsfsi _arm_fixunssfsi \
+ _arm_floatdidf _arm_floatdisf _arm_floatundidf _arm_floatundisf \
+ _clzsi2 _clzdi2 _ctzsi2
+
+# Currently there is a bug somewhere in GCC's alias analysis
+# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+# Disabling function inlining is a workaround for this problem.
+HOST_LIBGCC2_CFLAGS += -fno-inline
diff --git a/gcc-4.9/libgcc/config/arm/t-linux b/gcc-4.9/libgcc/config/arm/t-linux
new file mode 100644
index 000000000..3d520deca
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-linux
@@ -0,0 +1,7 @@
+LIB1ASMSRC = arm/lib1funcs.S
+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \
+ _ctzsi2 _arm_addsubdf3 _arm_addsubsf3
+
+# Just for these, we omit the frame pointer since it makes such a big
+# difference.
+HOST_LIBGCC2_CFLAGS += -fomit-frame-pointer
diff --git a/gcc-4.9/libgcc/config/arm/t-linux-eabi b/gcc-4.9/libgcc/config/arm/t-linux-eabi
new file mode 100644
index 000000000..a03e2b600
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-linux-eabi
@@ -0,0 +1,5 @@
+# Use a version of div0 which raises SIGFPE, and a special __clear_cache.
+LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx _clear_cache
+
+LIB2ADD_ST += $(srcdir)/config/arm/linux-atomic.c \
+ $(srcdir)/config/arm/linux-atomic-64bit.c
diff --git a/gcc-4.9/libgcc/config/arm/t-netbsd b/gcc-4.9/libgcc/config/arm/t-netbsd
new file mode 100644
index 000000000..95358f931
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-netbsd
@@ -0,0 +1,7 @@
+# Just for these, we omit the frame pointer since it makes such a big
+# difference. It is then pointless adding debugging.
+HOST_LIBGCC2_CFLAGS += -fomit-frame-pointer
+
+LIBGCC2_DEBUG_CFLAGS = -g0
+
+LIB2ADD += $(srcdir)/floatunsidf.c $(srcdir)/floatunsisf.c
diff --git a/gcc-4.9/libgcc/config/arm/t-softfp b/gcc-4.9/libgcc/config/arm/t-softfp
new file mode 100644
index 000000000..4ede438ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-softfp
@@ -0,0 +1,2 @@
+softfp_wrap_start := '\#ifdef __ARM_ARCH_6M__'
+softfp_wrap_end := '\#endif'
diff --git a/gcc-4.9/libgcc/config/arm/t-strongarm-elf b/gcc-4.9/libgcc/config/arm/t-strongarm-elf
new file mode 100644
index 000000000..42c6312e2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-strongarm-elf
@@ -0,0 +1,6 @@
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _clzsi2 _clzdi2 _ctzsi2
+
+# Currently there is a bug somewhere in GCC's alias analysis
+# or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+# Disabling function inlining is a workaround for this problem.
+HOST_LIBGCC2_CFLAGS += -fno-inline
diff --git a/gcc-4.9/libgcc/config/arm/t-symbian b/gcc-4.9/libgcc/config/arm/t-symbian
new file mode 100644
index 000000000..d573157f2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-symbian
@@ -0,0 +1,19 @@
+LIB1ASMFUNCS += _bb_init_func _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2 _ctzsi2
+
+# These functions have __aeabi equivalents and will never be called by GCC.
+# By putting them in LIB1ASMFUNCS, we avoid the standard libgcc2.c code being
+# used -- and we make sure that definitions are not available in lib1funcs.S,
+# either, so they end up undefined.
+LIB1ASMFUNCS += \
+ _ashldi3 _ashrdi3 _divdi3 _floatdidf _udivmoddi4 _umoddi3 \
+ _udivdi3 _lshrdi3 _moddi3 _muldi3 _negdi2 _cmpdi2 \
+ _fixdfdi _fixsfdi _fixunsdfdi _fixunssfdi _floatdisf \
+ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
+ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
+ _fixsfsi _fixunssfsi
+
+# Include half-float helpers.
+LIB2ADD_ST += $(srcdir)/config/arm/fp16.c
+
+# Include the gcc personality routine
+LIB2ADDEH = $(srcdir)/unwind-c.c $(srcdir)/config/arm/pr-support.c
diff --git a/gcc-4.9/libgcc/config/arm/t-wince-pe b/gcc-4.9/libgcc/config/arm/t-wince-pe
new file mode 100644
index 000000000..f6d170069
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/t-wince-pe
@@ -0,0 +1 @@
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2 _ctzsi2
diff --git a/gcc-4.9/libgcc/config/arm/unaligned-funcs.c b/gcc-4.9/libgcc/config/arm/unaligned-funcs.c
new file mode 100644
index 000000000..4c9b4672d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/unaligned-funcs.c
@@ -0,0 +1,57 @@
+/* EABI unaligned read/write functions.
+
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by CodeSourcery, LLC.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+int __aeabi_uread4 (void *);
+int __aeabi_uwrite4 (int, void *);
+long long __aeabi_uread8 (void *);
+long long __aeabi_uwrite8 (long long, void *);
+
+struct __attribute__((packed)) u4 { int data; };
+struct __attribute__((packed)) u8 { long long data; };
+
+int
+__aeabi_uread4 (void *ptr)
+{
+ return ((struct u4 *) ptr)->data;
+}
+
+int
+__aeabi_uwrite4 (int data, void *ptr)
+{
+ ((struct u4 *) ptr)->data = data;
+ return data;
+}
+
+long long
+__aeabi_uread8 (void *ptr)
+{
+ return ((struct u8 *) ptr)->data;
+}
+
+long long
+__aeabi_uwrite8 (long long data, void *ptr)
+{
+ ((struct u8 *) ptr)->data = data;
+ return data;
+}
diff --git a/gcc-4.9/libgcc/config/arm/unwind-arm.c b/gcc-4.9/libgcc/config/arm/unwind-arm.c
new file mode 100644
index 000000000..ee2396333
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/unwind-arm.c
@@ -0,0 +1,511 @@
+/* ARM EABI compliant unwinding routines.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ Contributed by Paul Brook
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "unwind.h"
+
+/* Misc constants. */
+#define R_IP 12
+#define R_SP 13
+#define R_LR 14
+#define R_PC 15
+
+#define VRS_PC(vrs) ((vrs)->core.r[R_PC])
+#define VRS_SP(vrs) ((vrs)->core.r[R_SP])
+#define VRS_RETURN(vrs) ((vrs)->core.r[R_LR])
+
+struct core_regs
+{
+ _uw r[16];
+};
+
+/* We use normal integer types here to avoid the compiler generating
+ coprocessor instructions. */
+struct vfp_regs
+{
+ _uw64 d[16];
+ _uw pad;
+};
+
+struct vfpv3_regs
+{
+ /* Always populated via VSTM, so no need for the "pad" field from
+ vfp_regs (which is used to store the format word for FSTMX). */
+ _uw64 d[16];
+};
+
+struct wmmxd_regs
+{
+ _uw64 wd[16];
+};
+
+struct wmmxc_regs
+{
+ _uw wc[4];
+};
+
+/* The ABI specifies that the unwind routines may only use core registers,
+ except when actually manipulating coprocessor state. This allows
+ us to write one implementation that works on all platforms by
+ demand-saving coprocessor registers.
+
+ During unwinding we hold the coprocessor state in the actual hardware
+ registers and allocate demand-save areas for use during phase1
+ unwinding. */
+
+typedef struct
+{
+ /* The first fields must be the same as a phase2_vrs. */
+ _uw demand_save_flags;
+ struct core_regs core;
+ _uw prev_sp; /* Only valid during forced unwinding. */
+ struct vfp_regs vfp;
+ struct vfpv3_regs vfp_regs_16_to_31;
+ struct wmmxd_regs wmmxd;
+ struct wmmxc_regs wmmxc;
+} phase1_vrs;
+
+#define DEMAND_SAVE_VFP 1 /* VFP state has been saved if not set */
+#define DEMAND_SAVE_VFP_D 2 /* VFP state is for FLDMD/FSTMD if set */
+#define DEMAND_SAVE_VFP_V3 4 /* VFPv3 state for regs 16 .. 31 has
+ been saved if not set */
+#define DEMAND_SAVE_WMMXD 8 /* iWMMXt data registers have been
+ saved if not set. */
+#define DEMAND_SAVE_WMMXC 16 /* iWMMXt control registers have been
+ saved if not set. */
+
+/* This must match the structure created by the assembly wrappers. */
+typedef struct
+{
+ _uw demand_save_flags;
+ struct core_regs core;
+} phase2_vrs;
+
+/* Coprocessor register state manipulation functions. */
+
+/* Routines for FLDMX/FSTMX format... */
+void __gnu_Unwind_Save_VFP (struct vfp_regs * p);
+void __gnu_Unwind_Restore_VFP (struct vfp_regs * p);
+void __gnu_Unwind_Save_WMMXD (struct wmmxd_regs * p);
+void __gnu_Unwind_Restore_WMMXD (struct wmmxd_regs * p);
+void __gnu_Unwind_Save_WMMXC (struct wmmxc_regs * p);
+void __gnu_Unwind_Restore_WMMXC (struct wmmxc_regs * p);
+
+/* ...and those for FLDMD/FSTMD format... */
+void __gnu_Unwind_Save_VFP_D (struct vfp_regs * p);
+void __gnu_Unwind_Restore_VFP_D (struct vfp_regs * p);
+
+/* ...and those for VLDM/VSTM format, saving/restoring only registers
+ 16 through 31. */
+void __gnu_Unwind_Save_VFP_D_16_to_31 (struct vfpv3_regs * p);
+void __gnu_Unwind_Restore_VFP_D_16_to_31 (struct vfpv3_regs * p);
+
+/* Restore coprocessor state after phase1 unwinding. */
+static void
+restore_non_core_regs (phase1_vrs * vrs)
+{
+ if ((vrs->demand_save_flags & DEMAND_SAVE_VFP) == 0)
+ {
+ if (vrs->demand_save_flags & DEMAND_SAVE_VFP_D)
+ __gnu_Unwind_Restore_VFP_D (&vrs->vfp);
+ else
+ __gnu_Unwind_Restore_VFP (&vrs->vfp);
+ }
+
+ if ((vrs->demand_save_flags & DEMAND_SAVE_VFP_V3) == 0)
+ __gnu_Unwind_Restore_VFP_D_16_to_31 (&vrs->vfp_regs_16_to_31);
+
+ if ((vrs->demand_save_flags & DEMAND_SAVE_WMMXD) == 0)
+ __gnu_Unwind_Restore_WMMXD (&vrs->wmmxd);
+ if ((vrs->demand_save_flags & DEMAND_SAVE_WMMXC) == 0)
+ __gnu_Unwind_Restore_WMMXC (&vrs->wmmxc);
+}
+
+#include "unwind-arm-common.inc"
+
+/* ABI defined personality routines. */
+extern _Unwind_Reason_Code __aeabi_unwind_cpp_pr0 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *);// __attribute__((weak));
+extern _Unwind_Reason_Code __aeabi_unwind_cpp_pr1 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *) __attribute__((weak));
+extern _Unwind_Reason_Code __aeabi_unwind_cpp_pr2 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *) __attribute__((weak));
+
+/* ABI defined routine to store a virtual register to memory. */
+
+_Unwind_VRS_Result _Unwind_VRS_Get (_Unwind_Context *context,
+ _Unwind_VRS_RegClass regclass,
+ _uw regno,
+ _Unwind_VRS_DataRepresentation representation,
+ void *valuep)
+{
+ phase1_vrs *vrs = (phase1_vrs *) context;
+
+ switch (regclass)
+ {
+ case _UVRSC_CORE:
+ if (representation != _UVRSD_UINT32
+ || regno > 15)
+ return _UVRSR_FAILED;
+ *(_uw *) valuep = vrs->core.r[regno];
+ return _UVRSR_OK;
+
+ case _UVRSC_VFP:
+ case _UVRSC_WMMXD:
+ case _UVRSC_WMMXC:
+ return _UVRSR_NOT_IMPLEMENTED;
+
+ default:
+ return _UVRSR_FAILED;
+ }
+}
+
+
+/* ABI defined function to load a virtual register from memory. */
+
+_Unwind_VRS_Result _Unwind_VRS_Set (_Unwind_Context *context,
+ _Unwind_VRS_RegClass regclass,
+ _uw regno,
+ _Unwind_VRS_DataRepresentation representation,
+ void *valuep)
+{
+ phase1_vrs *vrs = (phase1_vrs *) context;
+
+ switch (regclass)
+ {
+ case _UVRSC_CORE:
+ if (representation != _UVRSD_UINT32
+ || regno > 15)
+ return _UVRSR_FAILED;
+
+ vrs->core.r[regno] = *(_uw *) valuep;
+ return _UVRSR_OK;
+
+ case _UVRSC_VFP:
+ case _UVRSC_WMMXD:
+ case _UVRSC_WMMXC:
+ return _UVRSR_NOT_IMPLEMENTED;
+
+ default:
+ return _UVRSR_FAILED;
+ }
+}
+
+
+/* ABI defined function to pop registers off the stack. */
+
+_Unwind_VRS_Result _Unwind_VRS_Pop (_Unwind_Context *context,
+ _Unwind_VRS_RegClass regclass,
+ _uw discriminator,
+ _Unwind_VRS_DataRepresentation representation)
+{
+ phase1_vrs *vrs = (phase1_vrs *) context;
+
+ switch (regclass)
+ {
+ case _UVRSC_CORE:
+ {
+ _uw *ptr;
+ _uw mask;
+ int i;
+
+ if (representation != _UVRSD_UINT32)
+ return _UVRSR_FAILED;
+
+ mask = discriminator & 0xffff;
+ ptr = (_uw *) vrs->core.r[R_SP];
+ /* Pop the requested registers. */
+ for (i = 0; i < 16; i++)
+ {
+ if (mask & (1 << i))
+ vrs->core.r[i] = *(ptr++);
+ }
+ /* Writeback the stack pointer value if it wasn't restored. */
+ if ((mask & (1 << R_SP)) == 0)
+ vrs->core.r[R_SP] = (_uw) ptr;
+ }
+ return _UVRSR_OK;
+
+ case _UVRSC_VFP:
+ {
+ _uw start = discriminator >> 16;
+ _uw count = discriminator & 0xffff;
+ struct vfp_regs tmp;
+ struct vfpv3_regs tmp_16_to_31;
+ int tmp_count;
+ _uw *sp;
+ _uw *dest;
+ int num_vfpv3_regs = 0;
+
+ /* We use an approximation here by bounding _UVRSD_DOUBLE
+ register numbers at 32 always, since we can't detect if
+ VFPv3 isn't present (in such a case the upper limit is 16). */
+ if ((representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE)
+ || start + count > (representation == _UVRSD_VFPX ? 16 : 32)
+ || (representation == _UVRSD_VFPX && start >= 16))
+ return _UVRSR_FAILED;
+
+ /* Check if we're being asked to pop VFPv3-only registers
+ (numbers 16 through 31). */
+ if (start >= 16)
+ num_vfpv3_regs = count;
+ else if (start + count > 16)
+ num_vfpv3_regs = start + count - 16;
+
+ if (num_vfpv3_regs && representation != _UVRSD_DOUBLE)
+ return _UVRSR_FAILED;
+
+ /* Demand-save coprocessor registers for stage1. */
+ if (start < 16 && (vrs->demand_save_flags & DEMAND_SAVE_VFP))
+ {
+ vrs->demand_save_flags &= ~DEMAND_SAVE_VFP;
+
+ if (representation == _UVRSD_DOUBLE)
+ {
+ /* Save in FLDMD/FSTMD format. */
+ vrs->demand_save_flags |= DEMAND_SAVE_VFP_D;
+ __gnu_Unwind_Save_VFP_D (&vrs->vfp);
+ }
+ else
+ {
+ /* Save in FLDMX/FSTMX format. */
+ vrs->demand_save_flags &= ~DEMAND_SAVE_VFP_D;
+ __gnu_Unwind_Save_VFP (&vrs->vfp);
+ }
+ }
+
+ if (num_vfpv3_regs > 0
+ && (vrs->demand_save_flags & DEMAND_SAVE_VFP_V3))
+ {
+ vrs->demand_save_flags &= ~DEMAND_SAVE_VFP_V3;
+ __gnu_Unwind_Save_VFP_D_16_to_31 (&vrs->vfp_regs_16_to_31);
+ }
+
+ /* Restore the registers from the stack. Do this by saving the
+ current VFP registers to a memory area, moving the in-memory
+ values into that area, and restoring from the whole area.
+ For _UVRSD_VFPX we assume FSTMX standard format 1. */
+ if (representation == _UVRSD_VFPX)
+ __gnu_Unwind_Save_VFP (&tmp);
+ else
+ {
+ /* Save registers 0 .. 15 if required. */
+ if (start < 16)
+ __gnu_Unwind_Save_VFP_D (&tmp);
+
+ /* Save VFPv3 registers 16 .. 31 if required. */
+ if (num_vfpv3_regs)
+ __gnu_Unwind_Save_VFP_D_16_to_31 (&tmp_16_to_31);
+ }
+
+ /* Work out how many registers below register 16 need popping. */
+ tmp_count = num_vfpv3_regs > 0 ? 16 - start : count;
+
+ /* Copy registers below 16, if needed.
+ The stack address is only guaranteed to be word aligned, so
+ we can't use doubleword copies. */
+ sp = (_uw *) vrs->core.r[R_SP];
+ if (tmp_count > 0)
+ {
+ tmp_count *= 2;
+ dest = (_uw *) &tmp.d[start];
+ while (tmp_count--)
+ *(dest++) = *(sp++);
+ }
+
+ /* Copy VFPv3 registers numbered >= 16, if needed. */
+ if (num_vfpv3_regs > 0)
+ {
+ /* num_vfpv3_regs is needed below, so copy it. */
+ int tmp_count_2 = num_vfpv3_regs * 2;
+ int vfpv3_start = start < 16 ? 16 : start;
+
+ dest = (_uw *) &tmp_16_to_31.d[vfpv3_start - 16];
+ while (tmp_count_2--)
+ *(dest++) = *(sp++);
+ }
+
+ /* Skip the format word space if using FLDMX/FSTMX format. */
+ if (representation == _UVRSD_VFPX)
+ sp++;
+
+ /* Set the new stack pointer. */
+ vrs->core.r[R_SP] = (_uw) sp;
+
+ /* Reload the registers. */
+ if (representation == _UVRSD_VFPX)
+ __gnu_Unwind_Restore_VFP (&tmp);
+ else
+ {
+ /* Restore registers 0 .. 15 if required. */
+ if (start < 16)
+ __gnu_Unwind_Restore_VFP_D (&tmp);
+
+ /* Restore VFPv3 registers 16 .. 31 if required. */
+ if (num_vfpv3_regs > 0)
+ __gnu_Unwind_Restore_VFP_D_16_to_31 (&tmp_16_to_31);
+ }
+ }
+ return _UVRSR_OK;
+
+ case _UVRSC_WMMXD:
+ {
+ _uw start = discriminator >> 16;
+ _uw count = discriminator & 0xffff;
+ struct wmmxd_regs tmp;
+ _uw *sp;
+ _uw *dest;
+
+ if ((representation != _UVRSD_UINT64) || start + count > 16)
+ return _UVRSR_FAILED;
+
+ if (vrs->demand_save_flags & DEMAND_SAVE_WMMXD)
+ {
+ /* Demand-save resisters for stage1. */
+ vrs->demand_save_flags &= ~DEMAND_SAVE_WMMXD;
+ __gnu_Unwind_Save_WMMXD (&vrs->wmmxd);
+ }
+
+ /* Restore the registers from the stack. Do this by saving the
+ current WMMXD registers to a memory area, moving the in-memory
+ values into that area, and restoring from the whole area. */
+ __gnu_Unwind_Save_WMMXD (&tmp);
+
+ /* The stack address is only guaranteed to be word aligned, so
+ we can't use doubleword copies. */
+ sp = (_uw *) vrs->core.r[R_SP];
+ dest = (_uw *) &tmp.wd[start];
+ count *= 2;
+ while (count--)
+ *(dest++) = *(sp++);
+
+ /* Set the new stack pointer. */
+ vrs->core.r[R_SP] = (_uw) sp;
+
+ /* Reload the registers. */
+ __gnu_Unwind_Restore_WMMXD (&tmp);
+ }
+ return _UVRSR_OK;
+
+ case _UVRSC_WMMXC:
+ {
+ int i;
+ struct wmmxc_regs tmp;
+ _uw *sp;
+
+ if ((representation != _UVRSD_UINT32) || discriminator > 16)
+ return _UVRSR_FAILED;
+
+ if (vrs->demand_save_flags & DEMAND_SAVE_WMMXC)
+ {
+ /* Demand-save resisters for stage1. */
+ vrs->demand_save_flags &= ~DEMAND_SAVE_WMMXC;
+ __gnu_Unwind_Save_WMMXC (&vrs->wmmxc);
+ }
+
+ /* Restore the registers from the stack. Do this by saving the
+ current WMMXC registers to a memory area, moving the in-memory
+ values into that area, and restoring from the whole area. */
+ __gnu_Unwind_Save_WMMXC (&tmp);
+
+ sp = (_uw *) vrs->core.r[R_SP];
+ for (i = 0; i < 4; i++)
+ if (discriminator & (1 << i))
+ tmp.wc[i] = *(sp++);
+
+ /* Set the new stack pointer. */
+ vrs->core.r[R_SP] = (_uw) sp;
+
+ /* Reload the registers. */
+ __gnu_Unwind_Restore_WMMXC (&tmp);
+ }
+ return _UVRSR_OK;
+
+ default:
+ return _UVRSR_FAILED;
+ }
+}
+
+
+/* Core unwinding functions. */
+
+/* Calculate the address encoded by a 31-bit self-relative offset at address
+ P. */
+static inline _uw
+selfrel_offset31 (const _uw *p)
+{
+ _uw offset;
+
+ offset = *p;
+ /* Sign extend to 32 bits. */
+ if (offset & (1 << 30))
+ offset |= 1u << 31;
+ else
+ offset &= ~(1u << 31);
+
+ return offset + (_uw) p;
+}
+
+static _uw
+__gnu_unwind_get_pr_addr (int idx)
+{
+ switch (idx)
+ {
+ case 0:
+ return (_uw) &__aeabi_unwind_cpp_pr0;
+
+ case 1:
+ return (_uw) &__aeabi_unwind_cpp_pr1;
+
+ case 2:
+ return (_uw) &__aeabi_unwind_cpp_pr2;
+
+ default:
+ return 0;
+ }
+}
+
+/* ABI defined personality routine entry points. */
+
+_Unwind_Reason_Code
+__aeabi_unwind_cpp_pr0 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 0);
+}
+
+_Unwind_Reason_Code
+__aeabi_unwind_cpp_pr1 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 1);
+}
+
+_Unwind_Reason_Code
+__aeabi_unwind_cpp_pr2 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 2);
+}
diff --git a/gcc-4.9/libgcc/config/arm/unwind-arm.h b/gcc-4.9/libgcc/config/arm/unwind-arm.h
new file mode 100644
index 000000000..782d1753d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/arm/unwind-arm.h
@@ -0,0 +1,85 @@
+/* Header file for the ARM EABI unwinder
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+ Contributed by Paul Brook
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Language-independent unwinder header public defines. This contains both
+ ABI defined objects, and GNU support routines. */
+
+#ifndef UNWIND_ARM_H
+#define UNWIND_ARM_H
+
+#include "unwind-arm-common.h"
+
+#define UNWIND_STACK_REG 13
+/* Use IP as a scratch register within the personality routine. */
+#define UNWIND_POINTER_REG 12
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /* Decode an R_ARM_TARGET2 relocation. */
+ static inline _Unwind_Word
+ _Unwind_decode_typeinfo_ptr (_Unwind_Word base __attribute__ ((unused)),
+ _Unwind_Word ptr)
+ {
+ _Unwind_Word tmp;
+
+ tmp = *(_Unwind_Word *) ptr;
+ /* Zero values are always NULL. */
+ if (!tmp)
+ return 0;
+
+#if (defined(linux) && !defined(__uClinux__)) || defined(__NetBSD__)
+ /* Pc-relative indirect. */
+#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel | DW_EH_PE_indirect)
+ tmp += ptr;
+ tmp = *(_Unwind_Word *) tmp;
+#elif defined(__symbian__) || defined(__uClinux__)
+#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_absptr)
+ /* Absolute pointer. Nothing more to do. */
+#else
+#define _GLIBCXX_OVERRIDE_TTYPE_ENCODING (DW_EH_PE_pcrel)
+ /* Pc-relative pointer. */
+ tmp += ptr;
+#endif
+ return tmp;
+ }
+
+ static inline _Unwind_Reason_Code
+ __gnu_unwind_24bit (_Unwind_Context * context __attribute__ ((unused)),
+ _uw data __attribute__ ((unused)),
+ int compact __attribute__ ((unused)))
+ {
+ return _URC_FAILURE;
+ }
+ /* Return the address of the instruction, not the actual IP value. */
+#define _Unwind_GetIP(context) \
+ (_Unwind_GetGR (context, 15) & ~(_Unwind_Word)1)
+
+#define _Unwind_SetIP(context, val) \
+ _Unwind_SetGR (context, 15, val | (_Unwind_GetGR (context, 15) & 1))
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* defined UNWIND_ARM_H */
diff --git a/gcc-4.9/libgcc/config/avr/avr-lib.h b/gcc-4.9/libgcc/config/avr/avr-lib.h
new file mode 100644
index 000000000..37d5fa1a7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/avr-lib.h
@@ -0,0 +1,105 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef FLOAT
+#define CMPtype QItype
+#define DF SF
+#define DI SI
+typedef int QItype __attribute__ ((mode (QI)));
+#endif
+
+/* fixed-bit.h does not define functions for TA and UTA because
+ that part is wrapped in #if MIN_UNITS_PER_WORD > 4.
+ This would lead to empty functions for TA and UTA.
+ Thus, supply appropriate defines as if HAVE_[U]TA == 1.
+ #define HAVE_[U]TA 1 won't work because avr-modes.def
+ uses ADJUST_BYTESIZE(TA,8) and fixed-bit.h is not generic enough
+ to arrange for such changes of the mode size. */
+
+typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA)));
+
+#if defined (UTA_MODE)
+#define FIXED_SIZE 8 /* in bytes */
+#define INT_C_TYPE UDItype
+#define UINT_C_TYPE UDItype
+#define HINT_C_TYPE USItype
+#define HUINT_C_TYPE USItype
+#define MODE_NAME UTA
+#define MODE_NAME_S uta
+#define MODE_UNSIGNED 1
+#endif
+
+#if defined (FROM_UTA)
+#define FROM_TYPE 4 /* ID for fixed-point */
+#define FROM_MODE_NAME UTA
+#define FROM_MODE_NAME_S uta
+#define FROM_INT_C_TYPE UDItype
+#define FROM_SINT_C_TYPE DItype
+#define FROM_UINT_C_TYPE UDItype
+#define FROM_MODE_UNSIGNED 1
+#define FROM_FIXED_SIZE 8 /* in bytes */
+#elif defined (TO_UTA)
+#define TO_TYPE 4 /* ID for fixed-point */
+#define TO_MODE_NAME UTA
+#define TO_MODE_NAME_S uta
+#define TO_INT_C_TYPE UDItype
+#define TO_SINT_C_TYPE DItype
+#define TO_UINT_C_TYPE UDItype
+#define TO_MODE_UNSIGNED 1
+#define TO_FIXED_SIZE 8 /* in bytes */
+#endif
+
+/* Same for TAmode */
+
+typedef _Fract TAtype __attribute__ ((mode (TA)));
+
+#if defined (TA_MODE)
+#define FIXED_SIZE 8 /* in bytes */
+#define INT_C_TYPE DItype
+#define UINT_C_TYPE UDItype
+#define HINT_C_TYPE SItype
+#define HUINT_C_TYPE USItype
+#define MODE_NAME TA
+#define MODE_NAME_S ta
+#define MODE_UNSIGNED 0
+#endif
+
+#if defined (FROM_TA)
+#define FROM_TYPE 4 /* ID for fixed-point */
+#define FROM_MODE_NAME TA
+#define FROM_MODE_NAME_S ta
+#define FROM_INT_C_TYPE DItype
+#define FROM_SINT_C_TYPE DItype
+#define FROM_UINT_C_TYPE UDItype
+#define FROM_MODE_UNSIGNED 0
+#define FROM_FIXED_SIZE 8 /* in bytes */
+#elif defined (TO_TA)
+#define TO_TYPE 4 /* ID for fixed-point */
+#define TO_MODE_NAME TA
+#define TO_MODE_NAME_S ta
+#define TO_INT_C_TYPE DItype
+#define TO_SINT_C_TYPE DItype
+#define TO_UINT_C_TYPE UDItype
+#define TO_MODE_UNSIGNED 0
+#define TO_FIXED_SIZE 8 /* in bytes */
+#endif
diff --git a/gcc-4.9/libgcc/config/avr/lib1funcs-fixed.S b/gcc-4.9/libgcc/config/avr/lib1funcs-fixed.S
new file mode 100644
index 000000000..8f3ed9201
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/lib1funcs-fixed.S
@@ -0,0 +1,1915 @@
+/* -*- Mode: Asm -*- */
+;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+;; Contributed by Sean D'Epagnier (sean@depagnier.com)
+;; Georg-Johann Lay (avr@gjlay.de)
+
+;; This file is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by the
+;; Free Software Foundation; either version 3, or (at your option) any
+;; later version.
+
+;; In addition to the permissions in the GNU General Public License, the
+;; Free Software Foundation gives you unlimited permission to link the
+;; compiled version of this file into combinations with other programs,
+;; and to distribute those combinations without any restriction coming
+;; from the use of this file. (The General Public License restrictions
+;; do apply in other respects; for example, they cover modification of
+;; the file, and distribution when not linked into a combine
+;; executable.)
+
+;; This file is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to
+;; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Fixed point library routines for AVR
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+.section .text.libgcc.fixed, "ax", @progbits
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Conversions to float
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#if defined (L_fractqqsf)
+DEFUN __fractqqsf
+ ;; Move in place for SA -> SF conversion
+ clr r22
+ mov r23, r24
+ ;; Sign-extend
+ lsl r24
+ sbc r24, r24
+ mov r25, r24
+ XJMP __fractsasf
+ENDF __fractqqsf
+#endif /* L_fractqqsf */
+
+#if defined (L_fractuqqsf)
+DEFUN __fractuqqsf
+ ;; Move in place for USA -> SF conversion
+ clr r22
+ mov r23, r24
+ ;; Zero-extend
+ clr r24
+ clr r25
+ XJMP __fractusasf
+ENDF __fractuqqsf
+#endif /* L_fractuqqsf */
+
+#if defined (L_fracthqsf)
+DEFUN __fracthqsf
+ ;; Move in place for SA -> SF conversion
+ wmov 22, 24
+ ;; Sign-extend
+ lsl r25
+ sbc r24, r24
+ mov r25, r24
+ XJMP __fractsasf
+ENDF __fracthqsf
+#endif /* L_fracthqsf */
+
+#if defined (L_fractuhqsf)
+DEFUN __fractuhqsf
+ ;; Move in place for USA -> SF conversion
+ wmov 22, 24
+ ;; Zero-extend
+ clr r24
+ clr r25
+ XJMP __fractusasf
+ENDF __fractuhqsf
+#endif /* L_fractuhqsf */
+
+#if defined (L_fracthasf)
+DEFUN __fracthasf
+ ;; Move in place for SA -> SF conversion
+ clr r22
+ mov r23, r24
+ mov r24, r25
+ ;; Sign-extend
+ lsl r25
+ sbc r25, r25
+ XJMP __fractsasf
+ENDF __fracthasf
+#endif /* L_fracthasf */
+
+#if defined (L_fractuhasf)
+DEFUN __fractuhasf
+ ;; Move in place for USA -> SF conversion
+ clr r22
+ mov r23, r24
+ mov r24, r25
+ ;; Zero-extend
+ clr r25
+ XJMP __fractusasf
+ENDF __fractuhasf
+#endif /* L_fractuhasf */
+
+
+#if defined (L_fractsqsf)
+DEFUN __fractsqsf
+ XCALL __floatsisf
+ ;; Divide non-zero results by 2^31 to move the
+ ;; decimal point into place
+ tst r25
+ breq 0f
+ subi r24, exp_lo (31)
+ sbci r25, exp_hi (31)
+0: ret
+ENDF __fractsqsf
+#endif /* L_fractsqsf */
+
+#if defined (L_fractusqsf)
+DEFUN __fractusqsf
+ XCALL __floatunsisf
+ ;; Divide non-zero results by 2^32 to move the
+ ;; decimal point into place
+ cpse r25, __zero_reg__
+ subi r25, exp_hi (32)
+ ret
+ENDF __fractusqsf
+#endif /* L_fractusqsf */
+
+#if defined (L_fractsasf)
+DEFUN __fractsasf
+ XCALL __floatsisf
+ ;; Divide non-zero results by 2^15 to move the
+ ;; decimal point into place
+ tst r25
+ breq 0f
+ subi r24, exp_lo (15)
+ sbci r25, exp_hi (15)
+0: ret
+ENDF __fractsasf
+#endif /* L_fractsasf */
+
+#if defined (L_fractusasf)
+DEFUN __fractusasf
+ XCALL __floatunsisf
+ ;; Divide non-zero results by 2^16 to move the
+ ;; decimal point into place
+ cpse r25, __zero_reg__
+ subi r25, exp_hi (16)
+ ret
+ENDF __fractusasf
+#endif /* L_fractusasf */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Conversions from float
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#if defined (L_fractsfqq)
+DEFUN __fractsfqq
+ ;; Multiply with 2^{24+7} to get a QQ result in r25
+ subi r24, exp_lo (-31)
+ sbci r25, exp_hi (-31)
+ XCALL __fixsfsi
+ mov r24, r25
+ ret
+ENDF __fractsfqq
+#endif /* L_fractsfqq */
+
+#if defined (L_fractsfuqq)
+DEFUN __fractsfuqq
+ ;; Multiply with 2^{24+8} to get a UQQ result in r25
+ subi r25, exp_hi (-32)
+ XCALL __fixunssfsi
+ mov r24, r25
+ ret
+ENDF __fractsfuqq
+#endif /* L_fractsfuqq */
+
+#if defined (L_fractsfha)
+DEFUN __fractsfha
+ ;; Multiply with 2^{16+7} to get a HA result in r25:r24
+ subi r24, exp_lo (-23)
+ sbci r25, exp_hi (-23)
+ XJMP __fixsfsi
+ENDF __fractsfha
+#endif /* L_fractsfha */
+
+#if defined (L_fractsfuha)
+DEFUN __fractsfuha
+ ;; Multiply with 2^24 to get a UHA result in r25:r24
+ subi r25, exp_hi (-24)
+ XJMP __fixunssfsi
+ENDF __fractsfuha
+#endif /* L_fractsfuha */
+
+#if defined (L_fractsfhq)
+FALIAS __fractsfsq
+
+DEFUN __fractsfhq
+ ;; Multiply with 2^{16+15} to get a HQ result in r25:r24
+ ;; resp. with 2^31 to get a SQ result in r25:r22
+ subi r24, exp_lo (-31)
+ sbci r25, exp_hi (-31)
+ XJMP __fixsfsi
+ENDF __fractsfhq
+#endif /* L_fractsfhq */
+
+#if defined (L_fractsfuhq)
+FALIAS __fractsfusq
+
+DEFUN __fractsfuhq
+ ;; Multiply with 2^{16+16} to get a UHQ result in r25:r24
+ ;; resp. with 2^32 to get a USQ result in r25:r22
+ subi r25, exp_hi (-32)
+ XJMP __fixunssfsi
+ENDF __fractsfuhq
+#endif /* L_fractsfuhq */
+
+#if defined (L_fractsfsa)
+DEFUN __fractsfsa
+ ;; Multiply with 2^15 to get a SA result in r25:r22
+ subi r24, exp_lo (-15)
+ sbci r25, exp_hi (-15)
+ XJMP __fixsfsi
+ENDF __fractsfsa
+#endif /* L_fractsfsa */
+
+#if defined (L_fractsfusa)
+DEFUN __fractsfusa
+ ;; Multiply with 2^16 to get a USA result in r25:r22
+ subi r25, exp_hi (-16)
+ XJMP __fixunssfsi
+ENDF __fractsfusa
+#endif /* L_fractsfusa */
+
+
+;; For multiplication the functions here are called directly from
+;; avr-fixed.md instead of using the standard libcall mechanisms.
+;; This can make better code because GCC knows exactly which
+;; of the call-used registers (not all of them) are clobbered. */
+
+/*******************************************************
+ Fractional Multiplication 8 x 8 without MUL
+*******************************************************/
+
+#if defined (L_mulqq3) && !defined (__AVR_HAVE_MUL__)
+;;; R23 = R24 * R25
+;;; Clobbers: __tmp_reg__, R22, R24, R25
+;;; Rounding: ???
+DEFUN __mulqq3
+ XCALL __fmuls
+ ;; TR 18037 requires that (-1) * (-1) does not overflow
+ ;; The only input that can produce -1 is (-1)^2.
+ dec r23
+ brvs 0f
+ inc r23
+0: ret
+ENDF __mulqq3
+#endif /* L_mulqq3 && ! HAVE_MUL */
+
+/*******************************************************
+ Fractional Multiply .16 x .16 with and without MUL
+*******************************************************/
+
+#if defined (L_mulhq3)
+;;; Same code with and without MUL, but the interfaces differ:
+;;; no MUL: (R25:R24) = (R22:R23) * (R24:R25)
+;;; Clobbers: ABI, called by optabs
+;;; MUL: (R25:R24) = (R19:R18) * (R27:R26)
+;;; Clobbers: __tmp_reg__, R22, R23
+;;; Rounding: -0.5 LSB <= error <= 0.5 LSB
+DEFUN __mulhq3
+ XCALL __mulhisi3
+ ;; Shift result into place
+ lsl r23
+ rol r24
+ rol r25
+ brvs 1f
+ ;; Round
+ sbrc r23, 7
+ adiw r24, 1
+ ret
+1: ;; Overflow. TR 18037 requires (-1)^2 not to overflow
+ ldi r24, lo8 (0x7fff)
+ ldi r25, hi8 (0x7fff)
+ ret
+ENDF __mulhq3
+#endif /* defined (L_mulhq3) */
+
+#if defined (L_muluhq3)
+;;; Same code with and without MUL, but the interfaces differ:
+;;; no MUL: (R25:R24) *= (R23:R22)
+;;; Clobbers: ABI, called by optabs
+;;; MUL: (R25:R24) = (R19:R18) * (R27:R26)
+;;; Clobbers: __tmp_reg__, R22, R23
+;;; Rounding: -0.5 LSB < error <= 0.5 LSB
+DEFUN __muluhq3
+ XCALL __umulhisi3
+ ;; Round
+ sbrc r23, 7
+ adiw r24, 1
+ ret
+ENDF __muluhq3
+#endif /* L_muluhq3 */
+
+
+/*******************************************************
+ Fixed Multiply 8.8 x 8.8 with and without MUL
+*******************************************************/
+
+#if defined (L_mulha3)
+;;; Same code with and without MUL, but the interfaces differ:
+;;; no MUL: (R25:R24) = (R22:R23) * (R24:R25)
+;;; Clobbers: ABI, called by optabs
+;;; MUL: (R25:R24) = (R19:R18) * (R27:R26)
+;;; Clobbers: __tmp_reg__, R22, R23
+;;; Rounding: -0.5 LSB <= error <= 0.5 LSB
+DEFUN __mulha3
+ XCALL __mulhisi3
+ lsl r22
+ rol r23
+ rol r24
+ XJMP __muluha3_round
+ENDF __mulha3
+#endif /* L_mulha3 */
+
+#if defined (L_muluha3)
+;;; Same code with and without MUL, but the interfaces differ:
+;;; no MUL: (R25:R24) *= (R23:R22)
+;;; Clobbers: ABI, called by optabs
+;;; MUL: (R25:R24) = (R19:R18) * (R27:R26)
+;;; Clobbers: __tmp_reg__, R22, R23
+;;; Rounding: -0.5 LSB < error <= 0.5 LSB
+DEFUN __muluha3
+ XCALL __umulhisi3
+ XJMP __muluha3_round
+ENDF __muluha3
+#endif /* L_muluha3 */
+
+#if defined (L_muluha3_round)
+DEFUN __muluha3_round
+ ;; Shift result into place
+ mov r25, r24
+ mov r24, r23
+ ;; Round
+ sbrc r22, 7
+ adiw r24, 1
+ ret
+ENDF __muluha3_round
+#endif /* L_muluha3_round */
+
+
+/*******************************************************
+ Fixed Multiplication 16.16 x 16.16
+*******************************************************/
+
+;; Bits outside the result (below LSB), used in the signed version
+#define GUARD __tmp_reg__
+
+#if defined (__AVR_HAVE_MUL__)
+
+;; Multiplier
+#define A0 16
+#define A1 A0+1
+#define A2 A1+1
+#define A3 A2+1
+
+;; Multiplicand
+#define B0 20
+#define B1 B0+1
+#define B2 B1+1
+#define B3 B2+1
+
+;; Result
+#define C0 24
+#define C1 C0+1
+#define C2 C1+1
+#define C3 C2+1
+
+#if defined (L_mulusa3)
+;;; (C3:C0) = (A3:A0) * (B3:B0)
+DEFUN __mulusa3
+ set
+ ;; Fallthru
+ENDF __mulusa3
+
+;;; Round for last digit iff T = 1
+;;; Return guard bits in GUARD (__tmp_reg__).
+;;; Rounding, T = 0: -1.0 LSB < error <= 0 LSB
+;;; Rounding, T = 1: -0.5 LSB < error <= 0.5 LSB
+DEFUN __mulusa3_round
+ ;; Some of the MUL instructions have LSBs outside the result.
+ ;; Don't ignore these LSBs in order to tame rounding error.
+ ;; Use C2/C3 for these LSBs.
+
+ clr C0
+ clr C1
+ mul A0, B0 $ movw C2, r0
+
+ mul A1, B0 $ add C3, r0 $ adc C0, r1
+ mul A0, B1 $ add C3, r0 $ adc C0, r1 $ rol C1
+
+ ;; Round if T = 1. Store guarding bits outside the result for rounding
+ ;; and left-shift by the signed version (function below).
+ brtc 0f
+ sbrc C3, 7
+ adiw C0, 1
+0: push C3
+
+ ;; The following MULs don't have LSBs outside the result.
+ ;; C2/C3 is the high part.
+
+ mul A0, B2 $ add C0, r0 $ adc C1, r1 $ sbc C2, C2
+ mul A1, B1 $ add C0, r0 $ adc C1, r1 $ sbci C2, 0
+ mul A2, B0 $ add C0, r0 $ adc C1, r1 $ sbci C2, 0
+ neg C2
+
+ mul A0, B3 $ add C1, r0 $ adc C2, r1 $ sbc C3, C3
+ mul A1, B2 $ add C1, r0 $ adc C2, r1 $ sbci C3, 0
+ mul A2, B1 $ add C1, r0 $ adc C2, r1 $ sbci C3, 0
+ mul A3, B0 $ add C1, r0 $ adc C2, r1 $ sbci C3, 0
+ neg C3
+
+ mul A1, B3 $ add C2, r0 $ adc C3, r1
+ mul A2, B2 $ add C2, r0 $ adc C3, r1
+ mul A3, B1 $ add C2, r0 $ adc C3, r1
+
+ mul A2, B3 $ add C3, r0
+ mul A3, B2 $ add C3, r0
+
+ ;; Guard bits used in the signed version below.
+ pop GUARD
+ clr __zero_reg__
+ ret
+ENDF __mulusa3_round
+#endif /* L_mulusa3 */
+
+#if defined (L_mulsa3)
+;;; (C3:C0) = (A3:A0) * (B3:B0)
+;;; Clobbers: __tmp_reg__, T
+;;; Rounding: -0.5 LSB <= error <= 0.5 LSB
+DEFUN __mulsa3
+ clt
+ XCALL __mulusa3_round
+ ;; A posteriori sign extension of the operands
+ tst B3
+ brpl 1f
+ sub C2, A0
+ sbc C3, A1
+1: sbrs A3, 7
+ rjmp 2f
+ sub C2, B0
+ sbc C3, B1
+2:
+ ;; Shift 1 bit left to adjust for 15 fractional bits
+ lsl GUARD
+ rol C0
+ rol C1
+ rol C2
+ rol C3
+ ;; Round last digit
+ lsl GUARD
+ adc C0, __zero_reg__
+ adc C1, __zero_reg__
+ adc C2, __zero_reg__
+ adc C3, __zero_reg__
+ ret
+ENDF __mulsa3
+#endif /* L_mulsa3 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+
+#else /* __AVR_HAVE_MUL__ */
+
+#define A0 18
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+
+#define B0 22
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+
+#define C0 22
+#define C1 C0+1
+#define C2 C0+2
+#define C3 C0+3
+
+;; __tmp_reg__
+#define CC0 0
+;; __zero_reg__
+#define CC1 1
+#define CC2 16
+#define CC3 17
+
+#define AA0 26
+#define AA1 AA0+1
+#define AA2 30
+#define AA3 AA2+1
+
+#if defined (L_mulsa3)
+;;; (R25:R22) *= (R21:R18)
+;;; Clobbers: ABI, called by optabs
+;;; Rounding: -1 LSB <= error <= 1 LSB
+DEFUN __mulsa3
+ push B0
+ push B1
+ push B3
+ clt
+ XCALL __mulusa3_round
+ pop r30
+ ;; sign-extend B
+ bst r30, 7
+ brtc 1f
+ ;; A1, A0 survived in R27:R26
+ sub C2, AA0
+ sbc C3, AA1
+1:
+ pop AA1 ;; B1
+ pop AA0 ;; B0
+
+ ;; sign-extend A. A3 survived in R31
+ bst AA3, 7
+ brtc 2f
+ sub C2, AA0
+ sbc C3, AA1
+2:
+ ;; Shift 1 bit left to adjust for 15 fractional bits
+ lsl GUARD
+ rol C0
+ rol C1
+ rol C2
+ rol C3
+ ;; Round last digit
+ lsl GUARD
+ adc C0, __zero_reg__
+ adc C1, __zero_reg__
+ adc C2, __zero_reg__
+ adc C3, __zero_reg__
+ ret
+ENDF __mulsa3
+#endif /* L_mulsa3 */
+
+#if defined (L_mulusa3)
+;;; (R25:R22) *= (R21:R18)
+;;; Clobbers: ABI, called by optabs
+;;; Rounding: -1 LSB <= error <= 1 LSB
+DEFUN __mulusa3
+ set
+ ;; Fallthru
+ENDF __mulusa3
+
+;;; A[] survives in 26, 27, 30, 31
+;;; Also used by __mulsa3 with T = 0
+;;; Round if T = 1
+;;; Return Guard bits in GUARD (__tmp_reg__), used by signed version.
+DEFUN __mulusa3_round
+ push CC2
+ push CC3
+ ; clear result
+ clr __tmp_reg__
+ wmov CC2, CC0
+ ; save multiplicand
+ wmov AA0, A0
+ wmov AA2, A2
+ rjmp 3f
+
+ ;; Loop the integral part
+
+1: ;; CC += A * 2^n; n >= 0
+ add CC0,A0 $ adc CC1,A1 $ adc CC2,A2 $ adc CC3,A3
+
+2: ;; A <<= 1
+ lsl A0 $ rol A1 $ rol A2 $ rol A3
+
+3: ;; IBIT(B) >>= 1
+ ;; Carry = n-th bit of B; n >= 0
+ lsr B3
+ ror B2
+ brcs 1b
+ sbci B3, 0
+ brne 2b
+
+ ;; Loop the fractional part
+ ;; B2/B3 is 0 now, use as guard bits for rounding
+ ;; Restore multiplicand
+ wmov A0, AA0
+ wmov A2, AA2
+ rjmp 5f
+
+4: ;; CC += A:Guard * 2^n; n < 0
+ add B3,B2 $ adc CC0,A0 $ adc CC1,A1 $ adc CC2,A2 $ adc CC3,A3
+5:
+ ;; A:Guard >>= 1
+ lsr A3 $ ror A2 $ ror A1 $ ror A0 $ ror B2
+
+ ;; FBIT(B) <<= 1
+ ;; Carry = n-th bit of B; n < 0
+ lsl B0
+ rol B1
+ brcs 4b
+ sbci B0, 0
+ brne 5b
+
+ ;; Save guard bits and set carry for rounding
+ push B3
+ lsl B3
+ ;; Move result into place
+ wmov C2, CC2
+ wmov C0, CC0
+ clr __zero_reg__
+ brtc 6f
+ ;; Round iff T = 1
+ adc C0, __zero_reg__
+ adc C1, __zero_reg__
+ adc C2, __zero_reg__
+ adc C3, __zero_reg__
+6:
+ pop GUARD
+ ;; Epilogue
+ pop CC3
+ pop CC2
+ ret
+ENDF __mulusa3_round
+#endif /* L_mulusa3 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+#undef AA0
+#undef AA1
+#undef AA2
+#undef AA3
+#undef CC0
+#undef CC1
+#undef CC2
+#undef CC3
+
+#endif /* __AVR_HAVE_MUL__ */
+
+#undef GUARD
+
+/***********************************************************
+ Fixed unsigned saturated Multiplication 8.8 x 8.8
+***********************************************************/
+
+#define C0 22
+#define C1 C0+1
+#define C2 C0+2
+#define C3 C0+3
+#define SS __tmp_reg__
+
+#if defined (L_usmuluha3)
+DEFUN __usmuluha3
+ ;; Widening multiply
+#ifdef __AVR_HAVE_MUL__
+ ;; Adjust interface
+ movw R26, R22
+ movw R18, R24
+#endif /* HAVE MUL */
+ XCALL __umulhisi3
+ tst C3
+ brne .Lmax
+ ;; Round, target is in C1..C2
+ lsl C0
+ adc C1, __zero_reg__
+ adc C2, __zero_reg__
+ brcs .Lmax
+ ;; Move result into place
+ mov C3, C2
+ mov C2, C1
+ ret
+.Lmax:
+ ;; Saturate
+ ldi C2, 0xff
+ ldi C3, 0xff
+ ret
+ENDF __usmuluha3
+#endif /* L_usmuluha3 */
+
+/***********************************************************
+ Fixed signed saturated Multiplication s8.7 x s8.7
+***********************************************************/
+
+#if defined (L_ssmulha3)
+DEFUN __ssmulha3
+ ;; Widening multiply
+#ifdef __AVR_HAVE_MUL__
+ ;; Adjust interface
+ movw R26, R22
+ movw R18, R24
+#endif /* HAVE MUL */
+ XCALL __mulhisi3
+ ;; Adjust decimal point
+ lsl C0
+ rol C1
+ rol C2
+ brvs .LsatC3.3
+ ;; The 9 MSBs must be the same
+ rol C3
+ sbc SS, SS
+ cp C3, SS
+ brne .LsatSS
+ ;; Round
+ lsl C0
+ adc C1, __zero_reg__
+ adc C2, __zero_reg__
+ brvs .Lmax
+ ;; Move result into place
+ mov C3, C2
+ mov C2, C1
+ ret
+.Lmax:
+ ;; Load 0x7fff
+ clr C3
+.LsatC3.3:
+ ;; C3 < 0 --> 0x8000
+ ;; C3 >= 0 --> 0x7fff
+ mov SS, C3
+.LsatSS:
+ ;; Load min / max value:
+ ;; SS = -1 --> 0x8000
+ ;; SS = 0 --> 0x7fff
+ ldi C3, 0x7f
+ ldi C2, 0xff
+ sbrc SS, 7
+ adiw C2, 1
+ ret
+ENDF __ssmulha3
+#endif /* L_ssmulha3 */
+
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+#undef SS
+
+/***********************************************************
+ Fixed unsigned saturated Multiplication 16.16 x 16.16
+***********************************************************/
+
+#define C0 18
+#define C1 C0+1
+#define C2 C0+2
+#define C3 C0+3
+#define C4 C0+4
+#define C5 C0+5
+#define C6 C0+6
+#define C7 C0+7
+#define SS __tmp_reg__
+
+#if defined (L_usmulusa3)
+;; R22[4] = R22[4] *{ssat} R18[4]
+;; Ordinary ABI function
+DEFUN __usmulusa3
+ ;; Widening multiply
+ XCALL __umulsidi3
+ or C7, C6
+ brne .Lmax
+ ;; Round, target is in C2..C5
+ lsl C1
+ adc C2, __zero_reg__
+ adc C3, __zero_reg__
+ adc C4, __zero_reg__
+ adc C5, __zero_reg__
+ brcs .Lmax
+ ;; Move result into place
+ wmov C6, C4
+ wmov C4, C2
+ ret
+.Lmax:
+ ;; Saturate
+ ldi C7, 0xff
+ ldi C6, 0xff
+ wmov C4, C6
+ ret
+ENDF __usmulusa3
+#endif /* L_usmulusa3 */
+
+/***********************************************************
+ Fixed signed saturated Multiplication s16.15 x s16.15
+***********************************************************/
+
+#if defined (L_ssmulsa3)
+;; R22[4] = R22[4] *{ssat} R18[4]
+;; Ordinary ABI function
+DEFUN __ssmulsa3
+ ;; Widening multiply
+ XCALL __mulsidi3
+ ;; Adjust decimal point
+ lsl C1
+ rol C2
+ rol C3
+ rol C4
+ rol C5
+ brvs .LsatC7.7
+ ;; The 17 MSBs must be the same
+ rol C6
+ rol C7
+ sbc SS, SS
+ cp C6, SS
+ cpc C7, SS
+ brne .LsatSS
+ ;; Round
+ lsl C1
+ adc C2, __zero_reg__
+ adc C3, __zero_reg__
+ adc C4, __zero_reg__
+ adc C5, __zero_reg__
+ brvs .Lmax
+ ;; Move result into place
+ wmov C6, C4
+ wmov C4, C2
+ ret
+
+.Lmax:
+ ;; Load 0x7fffffff
+ clr C7
+.LsatC7.7:
+ ;; C7 < 0 --> 0x80000000
+ ;; C7 >= 0 --> 0x7fffffff
+ lsl C7
+ sbc SS, SS
+.LsatSS:
+ ;; Load min / max value:
+ ;; SS = -1 --> 0x80000000
+ ;; SS = 0 --> 0x7fffffff
+ com SS
+ mov C4, SS
+ mov C5, C4
+ wmov C6, C4
+ subi C7, 0x80
+ ret
+ENDF __ssmulsa3
+#endif /* L_ssmulsa3 */
+
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+#undef C4
+#undef C5
+#undef C6
+#undef C7
+#undef SS
+
+/*******************************************************
+ Fractional Division 8 / 8
+*******************************************************/
+
+#define r_divd r25 /* dividend */
+#define r_quo r24 /* quotient */
+#define r_div r22 /* divisor */
+#define r_sign __tmp_reg__
+
+#if defined (L_divqq3)
+DEFUN __divqq3
+ mov r_sign, r_divd
+ eor r_sign, r_div
+ sbrc r_div, 7
+ neg r_div
+ sbrc r_divd, 7
+ neg r_divd
+ XCALL __divqq_helper
+ lsr r_quo
+ sbrc r_sign, 7 ; negate result if needed
+ neg r_quo
+ ret
+ENDF __divqq3
+#endif /* L_divqq3 */
+
+#if defined (L_udivuqq3)
+DEFUN __udivuqq3
+ cp r_divd, r_div
+ brsh 0f
+ XJMP __divqq_helper
+ ;; Result is out of [0, 1) ==> Return 1 - eps.
+0: ldi r_quo, 0xff
+ ret
+ENDF __udivuqq3
+#endif /* L_udivuqq3 */
+
+
+#if defined (L_divqq_helper)
+DEFUN __divqq_helper
+ clr r_quo ; clear quotient
+ inc __zero_reg__ ; init loop counter, used per shift
+__udivuqq3_loop:
+ lsl r_divd ; shift dividend
+ brcs 0f ; dividend overflow
+ cp r_divd,r_div ; compare dividend & divisor
+ brcc 0f ; dividend >= divisor
+ rol r_quo ; shift quotient (with CARRY)
+ rjmp __udivuqq3_cont
+0:
+ sub r_divd,r_div ; restore dividend
+ lsl r_quo ; shift quotient (without CARRY)
+__udivuqq3_cont:
+ lsl __zero_reg__ ; shift loop-counter bit
+ brne __udivuqq3_loop
+ com r_quo ; complement result
+ ; because C flag was complemented in loop
+ ret
+ENDF __divqq_helper
+#endif /* L_divqq_helper */
+
+#undef r_divd
+#undef r_quo
+#undef r_div
+#undef r_sign
+
+
+/*******************************************************
+ Fractional Division 16 / 16
+*******************************************************/
+#define r_divdL 26 /* dividend Low */
+#define r_divdH 27 /* dividend Hig */
+#define r_quoL 24 /* quotient Low */
+#define r_quoH 25 /* quotient High */
+#define r_divL 22 /* divisor */
+#define r_divH 23 /* divisor */
+#define r_cnt 21
+
+#if defined (L_divhq3)
+DEFUN __divhq3
+ mov r0, r_divdH
+ eor r0, r_divH
+ sbrs r_divH, 7
+ rjmp 1f
+ NEG2 r_divL
+1:
+ sbrs r_divdH, 7
+ rjmp 2f
+ NEG2 r_divdL
+2:
+ cp r_divdL, r_divL
+ cpc r_divdH, r_divH
+ breq __divhq3_minus1 ; if equal return -1
+ XCALL __udivuhq3
+ lsr r_quoH
+ ror r_quoL
+ brpl 9f
+ ;; negate result if needed
+ NEG2 r_quoL
+9:
+ ret
+__divhq3_minus1:
+ ldi r_quoH, 0x80
+ clr r_quoL
+ ret
+ENDF __divhq3
+#endif /* defined (L_divhq3) */
+
+#if defined (L_udivuhq3)
+DEFUN __udivuhq3
+ sub r_quoH,r_quoH ; clear quotient and carry
+ ;; FALLTHRU
+ENDF __udivuhq3
+
+DEFUN __udivuha3_common
+ clr r_quoL ; clear quotient
+ ldi r_cnt,16 ; init loop counter
+__udivuhq3_loop:
+ rol r_divdL ; shift dividend (with CARRY)
+ rol r_divdH
+ brcs __udivuhq3_ep ; dividend overflow
+ cp r_divdL,r_divL ; compare dividend & divisor
+ cpc r_divdH,r_divH
+ brcc __udivuhq3_ep ; dividend >= divisor
+ rol r_quoL ; shift quotient (with CARRY)
+ rjmp __udivuhq3_cont
+__udivuhq3_ep:
+ sub r_divdL,r_divL ; restore dividend
+ sbc r_divdH,r_divH
+ lsl r_quoL ; shift quotient (without CARRY)
+__udivuhq3_cont:
+ rol r_quoH ; shift quotient
+ dec r_cnt ; decrement loop counter
+ brne __udivuhq3_loop
+ com r_quoL ; complement result
+ com r_quoH ; because C flag was complemented in loop
+ ret
+ENDF __udivuha3_common
+#endif /* defined (L_udivuhq3) */
+
+/*******************************************************
+ Fixed Division 8.8 / 8.8
+*******************************************************/
+#if defined (L_divha3)
+DEFUN __divha3
+ mov r0, r_divdH
+ eor r0, r_divH
+ sbrs r_divH, 7
+ rjmp 1f
+ NEG2 r_divL
+1:
+ sbrs r_divdH, 7
+ rjmp 2f
+ NEG2 r_divdL
+2:
+ XCALL __udivuha3
+ lsr r_quoH ; adjust to 7 fractional bits
+ ror r_quoL
+ sbrs r0, 7 ; negate result if needed
+ ret
+ NEG2 r_quoL
+ ret
+ENDF __divha3
+#endif /* defined (L_divha3) */
+
+#if defined (L_udivuha3)
+DEFUN __udivuha3
+ mov r_quoH, r_divdL
+ mov r_divdL, r_divdH
+ clr r_divdH
+ lsl r_quoH ; shift quotient into carry
+ XJMP __udivuha3_common ; same as fractional after rearrange
+ENDF __udivuha3
+#endif /* defined (L_udivuha3) */
+
+#undef r_divdL
+#undef r_divdH
+#undef r_quoL
+#undef r_quoH
+#undef r_divL
+#undef r_divH
+#undef r_cnt
+
+/*******************************************************
+ Fixed Division 16.16 / 16.16
+*******************************************************/
+
+#define r_arg1L 24 /* arg1 gets passed already in place */
+#define r_arg1H 25
+#define r_arg1HL 26
+#define r_arg1HH 27
+#define r_divdL 26 /* dividend Low */
+#define r_divdH 27
+#define r_divdHL 30
+#define r_divdHH 31 /* dividend High */
+#define r_quoL 22 /* quotient Low */
+#define r_quoH 23
+#define r_quoHL 24
+#define r_quoHH 25 /* quotient High */
+#define r_divL 18 /* divisor Low */
+#define r_divH 19
+#define r_divHL 20
+#define r_divHH 21 /* divisor High */
+#define r_cnt __zero_reg__ /* loop count (0 after the loop!) */
+
+#if defined (L_divsa3)
+DEFUN __divsa3
+ mov r0, r_arg1HH
+ eor r0, r_divHH
+ sbrs r_divHH, 7
+ rjmp 1f
+ NEG4 r_divL
+1:
+ sbrs r_arg1HH, 7
+ rjmp 2f
+ NEG4 r_arg1L
+2:
+ XCALL __udivusa3
+ lsr r_quoHH ; adjust to 15 fractional bits
+ ror r_quoHL
+ ror r_quoH
+ ror r_quoL
+ sbrs r0, 7 ; negate result if needed
+ ret
+ ;; negate r_quoL
+ XJMP __negsi2
+ENDF __divsa3
+#endif /* defined (L_divsa3) */
+
+#if defined (L_udivusa3)
+DEFUN __udivusa3
+ ldi r_divdHL, 32 ; init loop counter
+ mov r_cnt, r_divdHL
+ clr r_divdHL
+ clr r_divdHH
+ wmov r_quoL, r_divdHL
+ lsl r_quoHL ; shift quotient into carry
+ rol r_quoHH
+__udivusa3_loop:
+ rol r_divdL ; shift dividend (with CARRY)
+ rol r_divdH
+ rol r_divdHL
+ rol r_divdHH
+ brcs __udivusa3_ep ; dividend overflow
+ cp r_divdL,r_divL ; compare dividend & divisor
+ cpc r_divdH,r_divH
+ cpc r_divdHL,r_divHL
+ cpc r_divdHH,r_divHH
+ brcc __udivusa3_ep ; dividend >= divisor
+ rol r_quoL ; shift quotient (with CARRY)
+ rjmp __udivusa3_cont
+__udivusa3_ep:
+ sub r_divdL,r_divL ; restore dividend
+ sbc r_divdH,r_divH
+ sbc r_divdHL,r_divHL
+ sbc r_divdHH,r_divHH
+ lsl r_quoL ; shift quotient (without CARRY)
+__udivusa3_cont:
+ rol r_quoH ; shift quotient
+ rol r_quoHL
+ rol r_quoHH
+ dec r_cnt ; decrement loop counter
+ brne __udivusa3_loop
+ com r_quoL ; complement result
+ com r_quoH ; because C flag was complemented in loop
+ com r_quoHL
+ com r_quoHH
+ ret
+ENDF __udivusa3
+#endif /* defined (L_udivusa3) */
+
+#undef r_arg1L
+#undef r_arg1H
+#undef r_arg1HL
+#undef r_arg1HH
+#undef r_divdL
+#undef r_divdH
+#undef r_divdHL
+#undef r_divdHH
+#undef r_quoL
+#undef r_quoH
+#undef r_quoHL
+#undef r_quoHH
+#undef r_divL
+#undef r_divH
+#undef r_divHL
+#undef r_divHH
+#undef r_cnt
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Saturation, 1 Byte
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; First Argument and Return Register
+#define A0 24
+
+#if defined (L_ssabs_1)
+DEFUN __ssabs_1
+ sbrs A0, 7
+ ret
+ neg A0
+ sbrc A0,7
+ dec A0
+ ret
+ENDF __ssabs_1
+#endif /* L_ssabs_1 */
+
+#undef A0
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Saturation, 2 Bytes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; First Argument and Return Register
+#define A0 24
+#define A1 A0+1
+
+#if defined (L_ssneg_2)
+DEFUN __ssneg_2
+ NEG2 A0
+ brvc 0f
+ sbiw A0, 1
+0: ret
+ENDF __ssneg_2
+#endif /* L_ssneg_2 */
+
+#if defined (L_ssabs_2)
+DEFUN __ssabs_2
+ sbrs A1, 7
+ ret
+ XJMP __ssneg_2
+ENDF __ssabs_2
+#endif /* L_ssabs_2 */
+
+#undef A0
+#undef A1
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Saturation, 4 Bytes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; First Argument and Return Register
+#define A0 22
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+
+#if defined (L_ssneg_4)
+DEFUN __ssneg_4
+ XCALL __negsi2
+ brvc 0f
+ ldi A3, 0x7f
+ ldi A2, 0xff
+ ldi A1, 0xff
+ ldi A0, 0xff
+0: ret
+ENDF __ssneg_4
+#endif /* L_ssneg_4 */
+
+#if defined (L_ssabs_4)
+DEFUN __ssabs_4
+ sbrs A3, 7
+ ret
+ XJMP __ssneg_4
+ENDF __ssabs_4
+#endif /* L_ssabs_4 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Saturation, 8 Bytes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; First Argument and Return Register
+#define A0 18
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+#define A4 A0+4
+#define A5 A0+5
+#define A6 A0+6
+#define A7 A0+7
+
+#if defined (L_clr_8)
+FALIAS __usneguta2
+FALIAS __usneguda2
+FALIAS __usnegudq2
+
+;; Clear Carry and all Bytes
+DEFUN __clr_8
+ ;; Clear Carry and set Z
+ sub A7, A7
+ ;; FALLTHRU
+ENDF __clr_8
+;; Propagate Carry to all Bytes, Carry unaltered
+DEFUN __sbc_8
+ sbc A7, A7
+ sbc A6, A6
+ wmov A4, A6
+ wmov A2, A6
+ wmov A0, A6
+ ret
+ENDF __sbc_8
+#endif /* L_clr_8 */
+
+#if defined (L_ssneg_8)
+FALIAS __ssnegta2
+FALIAS __ssnegda2
+FALIAS __ssnegdq2
+
+DEFUN __ssneg_8
+ XCALL __negdi2
+ brvc 0f
+ ;; A[] = 0x7fffffff
+ sec
+ XCALL __sbc_8
+ ldi A7, 0x7f
+0: ret
+ENDF __ssneg_8
+#endif /* L_ssneg_8 */
+
+#if defined (L_ssabs_8)
+FALIAS __ssabsta2
+FALIAS __ssabsda2
+FALIAS __ssabsdq2
+
+DEFUN __ssabs_8
+ sbrs A7, 7
+ ret
+ XJMP __ssneg_8
+ENDF __ssabs_8
+#endif /* L_ssabs_8 */
+
+;; Second Argument
+#define B0 10
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+#define B4 B0+4
+#define B5 B0+5
+#define B6 B0+6
+#define B7 B0+7
+
+#if defined (L_usadd_8)
+FALIAS __usadduta3
+FALIAS __usadduda3
+FALIAS __usaddudq3
+
+DEFUN __usadd_8
+ XCALL __adddi3
+ brcs 0f
+ ret
+0: ;; A[] = 0xffffffff
+ XJMP __sbc_8
+ENDF __usadd_8
+#endif /* L_usadd_8 */
+
+#if defined (L_ussub_8)
+FALIAS __ussubuta3
+FALIAS __ussubuda3
+FALIAS __ussubudq3
+
+DEFUN __ussub_8
+ XCALL __subdi3
+ brcs 0f
+ ret
+0: ;; A[] = 0
+ XJMP __clr_8
+ENDF __ussub_8
+#endif /* L_ussub_8 */
+
+#if defined (L_ssadd_8)
+FALIAS __ssaddta3
+FALIAS __ssaddda3
+FALIAS __ssadddq3
+
+DEFUN __ssadd_8
+ XCALL __adddi3
+ brvc 0f
+ ;; A = (B >= 0) ? INT64_MAX : INT64_MIN
+ cpi B7, 0x80
+ XCALL __sbc_8
+ subi A7, 0x80
+0: ret
+ENDF __ssadd_8
+#endif /* L_ssadd_8 */
+
+#if defined (L_sssub_8)
+FALIAS __sssubta3
+FALIAS __sssubda3
+FALIAS __sssubdq3
+
+DEFUN __sssub_8
+ XCALL __subdi3
+ brvc 0f
+ ;; A = (B < 0) ? INT64_MAX : INT64_MIN
+ ldi A7, 0x7f
+ cp A7, B7
+ XCALL __sbc_8
+ subi A7, 0x80
+0: ret
+ENDF __sssub_8
+#endif /* L_sssub_8 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef A4
+#undef A5
+#undef A6
+#undef A7
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+#undef B4
+#undef B5
+#undef B6
+#undef B7
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Rounding Helpers
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#ifdef L_mask1
+
+#define AA 24
+#define CC 25
+
+;; R25 = 1 << (R24 & 7)
+;; CC = 1 << (AA & 7)
+;; Clobbers: None
+DEFUN __mask1
+ ;; CC = 2 ^ AA.1
+ ldi CC, 1 << 2
+ sbrs AA, 1
+ ldi CC, 1 << 0
+ ;; CC *= 2 ^ AA.0
+ sbrc AA, 0
+ lsl CC
+ ;; CC *= 2 ^ AA.2
+ sbrc AA, 2
+ swap CC
+ ret
+ENDF __mask1
+
+#undef AA
+#undef CC
+#endif /* L_mask1 */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; The rounding point. Any bits smaller than
+;; 2^{-RP} will be cleared.
+#define RP R24
+
+#define A0 22
+#define A1 A0 + 1
+
+#define C0 24
+#define C1 C0 + 1
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Rounding, 1 Byte
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#ifdef L_roundqq3
+
+;; R24 = round (R22, R24)
+;; Clobbers: R22, __tmp_reg__
+DEFUN __roundqq3
+ mov __tmp_reg__, C1
+ subi RP, __QQ_FBIT__ - 1
+ neg RP
+ ;; R25 = 1 << RP (Total offset is FBIT-1 - RP)
+ XCALL __mask1
+ mov C0, C1
+ ;; Add-Saturate 2^{-RP-1}
+ add A0, C0
+ brvc 0f
+ ldi C0, 0x7f
+ rjmp 9f
+0: ;; Mask out bits beyond RP
+ lsl C0
+ neg C0
+ and C0, A0
+9: mov C1, __tmp_reg__
+ ret
+ENDF __roundqq3
+#endif /* L_roundqq3 */
+
+#ifdef L_rounduqq3
+
+;; R24 = round (R22, R24)
+;; Clobbers: R22, __tmp_reg__
+DEFUN __rounduqq3
+ mov __tmp_reg__, C1
+ subi RP, __UQQ_FBIT__ - 1
+ neg RP
+ ;; R25 = 1 << RP (Total offset is FBIT-1 - RP)
+ XCALL __mask1
+ mov C0, C1
+ ;; Add-Saturate 2^{-RP-1}
+ add A0, C0
+ brcc 0f
+ ldi C0, 0xff
+ rjmp 9f
+0: ;; Mask out bits beyond RP
+ lsl C0
+ neg C0
+ and C0, A0
+9: mov C1, __tmp_reg__
+ ret
+ENDF __rounduqq3
+#endif /* L_rounduqq3 */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Rounding, 2 Bytes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#ifdef L_addmask_2
+
+;; [ R25:R24 = 1 << (R24 & 15)
+;; R23:R22 += 1 << (R24 & 15) ]
+;; SREG is set according to the addition
+DEFUN __addmask_2
+ ;; R25 = 1 << (R24 & 7)
+ XCALL __mask1
+ cpi RP, 1 << 3
+ sbc C0, C0
+ ;; Swap C0 and C1 if RP.3 was set
+ and C0, C1
+ eor C1, C0
+ ;; Finally, add the power-of-two: A[] += C[]
+ add A0, C0
+ adc A1, C1
+ ret
+ENDF __addmask_2
+#endif /* L_addmask_2 */
+
+#ifdef L_round_s2
+
+;; R25:R24 = round (R23:R22, R24)
+;; Clobbers: R23, R22
+DEFUN __roundhq3
+ subi RP, __HQ_FBIT__ - __HA_FBIT__
+ENDF __roundhq3
+DEFUN __roundha3
+ subi RP, __HA_FBIT__ - 1
+ neg RP
+ ;; [ R25:R24 = 1 << (FBIT-1 - RP)
+ ;; R23:R22 += 1 << (FBIT-1 - RP) ]
+ XCALL __addmask_2
+ XJMP __round_s2_const
+ENDF __roundha3
+
+#endif /* L_round_s2 */
+
+#ifdef L_round_u2
+
+;; R25:R24 = round (R23:R22, R24)
+;; Clobbers: R23, R22
+DEFUN __rounduhq3
+ subi RP, __UHQ_FBIT__ - __UHA_FBIT__
+ENDF __rounduhq3
+DEFUN __rounduha3
+ subi RP, __UHA_FBIT__ - 1
+ neg RP
+ ;; [ R25:R24 = 1 << (FBIT-1 - RP)
+ ;; R23:R22 += 1 << (FBIT-1 - RP) ]
+ XCALL __addmask_2
+ XJMP __round_u2_const
+ENDF __rounduha3
+
+#endif /* L_round_u2 */
+
+
+#ifdef L_round_2_const
+
+;; Helpers for 2 byte wide rounding
+
+DEFUN __round_s2_const
+ brvc 2f
+ ldi C1, 0x7f
+ rjmp 1f
+ ;; FALLTHRU (Barrier)
+ENDF __round_s2_const
+
+DEFUN __round_u2_const
+ brcc 2f
+ ldi C1, 0xff
+1:
+ ldi C0, 0xff
+ rjmp 9f
+2:
+ ;; Saturation is performed now.
+ ;; Currently, we have C[] = 2^{-RP-1}
+ ;; C[] = 2^{-RP}
+ lsl C0
+ rol C1
+ ;;
+ NEG2 C0
+ ;; Clear the bits beyond the rounding point.
+ and C0, A0
+ and C1, A1
+9: ret
+ENDF __round_u2_const
+
+#endif /* L_round_2_const */
+
+#undef A0
+#undef A1
+#undef C0
+#undef C1
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Rounding, 4 Bytes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#define A0 18
+#define A1 A0 + 1
+#define A2 A0 + 2
+#define A3 A0 + 3
+
+#define C0 22
+#define C1 C0 + 1
+#define C2 C0 + 2
+#define C3 C0 + 3
+
+#ifdef L_addmask_4
+
+;; [ R25:R22 = 1 << (R24 & 31)
+;; R21:R18 += 1 << (R24 & 31) ]
+;; SREG is set according to the addition
+DEFUN __addmask_4
+ ;; R25 = 1 << (R24 & 7)
+ XCALL __mask1
+ cpi RP, 1 << 4
+ sbc C0, C0
+ sbc C1, C1
+ ;; Swap C2 with C3 if RP.3 is not set
+ cpi RP, 1 << 3
+ sbc C2, C2
+ and C2, C3
+ eor C3, C2
+ ;; Swap C3:C2 with C1:C0 if RP.4 is not set
+ and C0, C2 $ eor C2, C0
+ and C1, C3 $ eor C3, C1
+ ;; Finally, add the power-of-two: A[] += C[]
+ add A0, C0
+ adc A1, C1
+ adc A2, C2
+ adc A3, C3
+ ret
+ENDF __addmask_4
+#endif /* L_addmask_4 */
+
+#ifdef L_round_s4
+
+;; R25:R22 = round (R21:R18, R24)
+;; Clobbers: R18...R21
+DEFUN __roundsq3
+ subi RP, __SQ_FBIT__ - __SA_FBIT__
+ENDF __roundsq3
+DEFUN __roundsa3
+ subi RP, __SA_FBIT__ - 1
+ neg RP
+ ;; [ R25:R22 = 1 << (FBIT-1 - RP)
+ ;; R21:R18 += 1 << (FBIT-1 - RP) ]
+ XCALL __addmask_4
+ XJMP __round_s4_const
+ENDF __roundsa3
+
+#endif /* L_round_s4 */
+
+#ifdef L_round_u4
+
+;; R25:R22 = round (R21:R18, R24)
+;; Clobbers: R18...R21
+DEFUN __roundusq3
+ subi RP, __USQ_FBIT__ - __USA_FBIT__
+ENDF __roundusq3
+DEFUN __roundusa3
+ subi RP, __USA_FBIT__ - 1
+ neg RP
+ ;; [ R25:R22 = 1 << (FBIT-1 - RP)
+ ;; R21:R18 += 1 << (FBIT-1 - RP) ]
+ XCALL __addmask_4
+ XJMP __round_u4_const
+ENDF __roundusa3
+
+#endif /* L_round_u4 */
+
+
+#ifdef L_round_4_const
+
+;; Helpers for 4 byte wide rounding
+
+DEFUN __round_s4_const
+ brvc 2f
+ ldi C3, 0x7f
+ rjmp 1f
+ ;; FALLTHRU (Barrier)
+ENDF __round_s4_const
+
+DEFUN __round_u4_const
+ brcc 2f
+ ldi C3, 0xff
+1:
+ ldi C2, 0xff
+ ldi C1, 0xff
+ ldi C0, 0xff
+ rjmp 9f
+2:
+ ;; Saturation is performed now.
+ ;; Currently, we have C[] = 2^{-RP-1}
+ ;; C[] = 2^{-RP}
+ lsl C0
+ rol C1
+ rol C2
+ rol C3
+ XCALL __negsi2
+ ;; Clear the bits beyond the rounding point.
+ and C0, A0
+ and C1, A1
+ and C2, A2
+ and C3, A3
+9: ret
+ENDF __round_u4_const
+
+#endif /* L_round_4_const */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+
+#undef RP
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Rounding, 8 Bytes
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+#define RP 16
+#define FBITm1 31
+
+#define C0 18
+#define C1 C0 + 1
+#define C2 C0 + 2
+#define C3 C0 + 3
+#define C4 C0 + 4
+#define C5 C0 + 5
+#define C6 C0 + 6
+#define C7 C0 + 7
+
+#define A0 16
+#define A1 17
+#define A2 26
+#define A3 27
+#define A4 28
+#define A5 29
+#define A6 30
+#define A7 31
+
+
+#ifdef L_rounddq3
+;; R25:R18 = round (R25:R18, R16)
+;; Clobbers: ABI
+DEFUN __rounddq3
+ ldi FBITm1, __DQ_FBIT__ - 1
+ clt
+ XJMP __round_x8
+ENDF __rounddq3
+#endif /* L_rounddq3 */
+
+#ifdef L_roundudq3
+;; R25:R18 = round (R25:R18, R16)
+;; Clobbers: ABI
+DEFUN __roundudq3
+ ldi FBITm1, __UDQ_FBIT__ - 1
+ set
+ XJMP __round_x8
+ENDF __roundudq3
+#endif /* L_roundudq3 */
+
+#ifdef L_roundda3
+;; R25:R18 = round (R25:R18, R16)
+;; Clobbers: ABI
+DEFUN __roundda3
+ ldi FBITm1, __DA_FBIT__ - 1
+ clt
+ XJMP __round_x8
+ENDF __roundda3
+#endif /* L_roundda3 */
+
+#ifdef L_rounduda3
+;; R25:R18 = round (R25:R18, R16)
+;; Clobbers: ABI
+DEFUN __rounduda3
+ ldi FBITm1, __UDA_FBIT__ - 1
+ set
+ XJMP __round_x8
+ENDF __rounduda3
+#endif /* L_rounduda3 */
+
+#ifdef L_roundta3
+;; R25:R18 = round (R25:R18, R16)
+;; Clobbers: ABI
+DEFUN __roundta3
+ ldi FBITm1, __TA_FBIT__ - 1
+ clt
+ XJMP __round_x8
+ENDF __roundta3
+#endif /* L_roundta3 */
+
+#ifdef L_rounduta3
+;; R25:R18 = round (R25:R18, R16)
+;; Clobbers: ABI
+DEFUN __rounduta3
+ ldi FBITm1, __UTA_FBIT__ - 1
+ set
+ XJMP __round_x8
+ENDF __rounduta3
+#endif /* L_rounduta3 */
+
+
+#ifdef L_round_x8
+DEFUN __round_x8
+ push r16
+ push r17
+ push r28
+ push r29
+ ;; Compute log2 of addend from rounding point
+ sub RP, FBITm1
+ neg RP
+ ;; Move input to work register A[]
+ push C0
+ mov A1, C1
+ wmov A2, C2
+ wmov A4, C4
+ wmov A6, C6
+ ;; C[] = 1 << (FBIT-1 - RP)
+ XCALL __clr_8
+ inc C0
+ XCALL __ashldi3
+ pop A0
+ ;; A[] += C[]
+ add A0, C0
+ adc A1, C1
+ adc A2, C2
+ adc A3, C3
+ adc A4, C4
+ adc A5, C5
+ adc A6, C6
+ adc A7, C7
+ brts 1f
+ ;; Signed
+ brvc 3f
+ ;; Signed overflow: A[] = 0x7f...
+ brvs 2f
+1: ;; Unsigned
+ brcc 3f
+ ;; Unsigned overflow: A[] = 0xff...
+2: ldi C7, 0xff
+ ldi C6, 0xff
+ wmov C0, C6
+ wmov C2, C6
+ wmov C4, C6
+ bld C7, 7
+ rjmp 9f
+3:
+ ;; C[] = -C[] - C[]
+ push A0
+ ldi r16, 1
+ XCALL __ashldi3
+ pop A0
+ XCALL __negdi2
+ ;; Clear the bits beyond the rounding point.
+ and C0, A0
+ and C1, A1
+ and C2, A2
+ and C3, A3
+ and C4, A4
+ and C5, A5
+ and C6, A6
+ and C7, A7
+9: ;; Epilogue
+ pop r29
+ pop r28
+ pop r17
+ pop r16
+ ret
+ENDF __round_x8
+
+#endif /* L_round_x8 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef A4
+#undef A5
+#undef A6
+#undef A7
+
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+#undef C4
+#undef C5
+#undef C6
+#undef C7
+
+#undef RP
+#undef FBITm1
+
+
+;; Supply implementations / symbols for the bit-banging functions
+;; __builtin_avr_bitsfx and __builtin_avr_fxbits
+#ifdef L_ret
+DEFUN __ret
+ ret
+ENDF __ret
+#endif /* L_ret */
diff --git a/gcc-4.9/libgcc/config/avr/lib1funcs.S b/gcc-4.9/libgcc/config/avr/lib1funcs.S
new file mode 100644
index 000000000..6f1c77edb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/lib1funcs.S
@@ -0,0 +1,3226 @@
+/* -*- Mode: Asm -*- */
+/* Copyright (C) 1998-2014 Free Software Foundation, Inc.
+ Contributed by Denis Chertykov <chertykov@gmail.com>
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define __zero_reg__ r1
+#define __tmp_reg__ r0
+#define __SREG__ 0x3f
+#if defined (__AVR_HAVE_SPH__)
+#define __SP_H__ 0x3e
+#endif
+#define __SP_L__ 0x3d
+#define __RAMPZ__ 0x3B
+#define __EIND__ 0x3C
+
+/* Most of the functions here are called directly from avr.md
+ patterns, instead of using the standard libcall mechanisms.
+ This can make better code because GCC knows exactly which
+ of the call-used registers (not all of them) are clobbered. */
+
+/* FIXME: At present, there is no SORT directive in the linker
+ script so that we must not assume that different modules
+ in the same input section like .libgcc.text.mul will be
+ located close together. Therefore, we cannot use
+ RCALL/RJMP to call a function like __udivmodhi4 from
+ __divmodhi4 and have to use lengthy XCALL/XJMP even
+ though they are in the same input section and all same
+ input sections together are small enough to reach every
+ location with a RCALL/RJMP instruction. */
+
+ .macro mov_l r_dest, r_src
+#if defined (__AVR_HAVE_MOVW__)
+ movw \r_dest, \r_src
+#else
+ mov \r_dest, \r_src
+#endif
+ .endm
+
+ .macro mov_h r_dest, r_src
+#if defined (__AVR_HAVE_MOVW__)
+ ; empty
+#else
+ mov \r_dest, \r_src
+#endif
+ .endm
+
+.macro wmov r_dest, r_src
+#if defined (__AVR_HAVE_MOVW__)
+ movw \r_dest, \r_src
+#else
+ mov \r_dest, \r_src
+ mov \r_dest+1, \r_src+1
+#endif
+.endm
+
+#if defined (__AVR_HAVE_JMP_CALL__)
+#define XCALL call
+#define XJMP jmp
+#else
+#define XCALL rcall
+#define XJMP rjmp
+#endif
+
+;; Prologue stuff
+
+.macro do_prologue_saves n_pushed n_frame=0
+ ldi r26, lo8(\n_frame)
+ ldi r27, hi8(\n_frame)
+ ldi r30, lo8(gs(.L_prologue_saves.\@))
+ ldi r31, hi8(gs(.L_prologue_saves.\@))
+ XJMP __prologue_saves__ + ((18 - (\n_pushed)) * 2)
+.L_prologue_saves.\@:
+.endm
+
+;; Epilogue stuff
+
+.macro do_epilogue_restores n_pushed n_frame=0
+ in r28, __SP_L__
+#ifdef __AVR_HAVE_SPH__
+ in r29, __SP_H__
+.if \n_frame > 63
+ subi r28, lo8(-\n_frame)
+ sbci r29, hi8(-\n_frame)
+.elseif \n_frame > 0
+ adiw r28, \n_frame
+.endif
+#else
+ clr r29
+.if \n_frame > 0
+ subi r28, lo8(-\n_frame)
+.endif
+#endif /* HAVE SPH */
+ ldi r30, \n_pushed
+ XJMP __epilogue_restores__ + ((18 - (\n_pushed)) * 2)
+.endm
+
+;; Support function entry and exit for convenience
+
+.macro DEFUN name
+.global \name
+.func \name
+\name:
+.endm
+
+.macro ENDF name
+.size \name, .-\name
+.endfunc
+.endm
+
+.macro FALIAS name
+.global \name
+.func \name
+\name:
+.size \name, .-\name
+.endfunc
+.endm
+
+;; Skip next instruction, typically a jump target
+#define skip cpse 0,0
+
+;; Negate a 2-byte value held in consecutive registers
+.macro NEG2 reg
+ com \reg+1
+ neg \reg
+ sbci \reg+1, -1
+.endm
+
+;; Negate a 4-byte value held in consecutive registers
+;; Sets the V flag for signed overflow tests if REG >= 16
+.macro NEG4 reg
+ com \reg+3
+ com \reg+2
+ com \reg+1
+.if \reg >= 16
+ neg \reg
+ sbci \reg+1, -1
+ sbci \reg+2, -1
+ sbci \reg+3, -1
+.else
+ com \reg
+ adc \reg, __zero_reg__
+ adc \reg+1, __zero_reg__
+ adc \reg+2, __zero_reg__
+ adc \reg+3, __zero_reg__
+.endif
+.endm
+
+#define exp_lo(N) hlo8 ((N) << 23)
+#define exp_hi(N) hhi8 ((N) << 23)
+
+
+.section .text.libgcc.mul, "ax", @progbits
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+/* Note: mulqi3, mulhi3 are open-coded on the enhanced core. */
+#if !defined (__AVR_HAVE_MUL__)
+/*******************************************************
+ Multiplication 8 x 8 without MUL
+*******************************************************/
+#if defined (L_mulqi3)
+
+#define r_arg2 r22 /* multiplicand */
+#define r_arg1 r24 /* multiplier */
+#define r_res __tmp_reg__ /* result */
+
+DEFUN __mulqi3
+ clr r_res ; clear result
+__mulqi3_loop:
+ sbrc r_arg1,0
+ add r_res,r_arg2
+ add r_arg2,r_arg2 ; shift multiplicand
+ breq __mulqi3_exit ; while multiplicand != 0
+ lsr r_arg1 ;
+ brne __mulqi3_loop ; exit if multiplier = 0
+__mulqi3_exit:
+ mov r_arg1,r_res ; result to return register
+ ret
+ENDF __mulqi3
+
+#undef r_arg2
+#undef r_arg1
+#undef r_res
+
+#endif /* defined (L_mulqi3) */
+
+
+/*******************************************************
+ Widening Multiplication 16 = 8 x 8 without MUL
+ Multiplication 16 x 16 without MUL
+*******************************************************/
+
+#define A0 r22
+#define A1 r23
+#define B0 r24
+#define BB0 r20
+#define B1 r25
+;; Output overlaps input, thus expand result in CC0/1
+#define C0 r24
+#define C1 r25
+#define CC0 __tmp_reg__
+#define CC1 R21
+
+#if defined (L_umulqihi3)
+;;; R25:R24 = (unsigned int) R22 * (unsigned int) R24
+;;; (C1:C0) = (unsigned int) A0 * (unsigned int) B0
+;;; Clobbers: __tmp_reg__, R21..R23
+DEFUN __umulqihi3
+ clr A1
+ clr B1
+ XJMP __mulhi3
+ENDF __umulqihi3
+#endif /* L_umulqihi3 */
+
+#if defined (L_mulqihi3)
+;;; R25:R24 = (signed int) R22 * (signed int) R24
+;;; (C1:C0) = (signed int) A0 * (signed int) B0
+;;; Clobbers: __tmp_reg__, R20..R23
+DEFUN __mulqihi3
+ ;; Sign-extend B0
+ clr B1
+ sbrc B0, 7
+ com B1
+ ;; The multiplication runs twice as fast if A1 is zero, thus:
+ ;; Zero-extend A0
+ clr A1
+#ifdef __AVR_HAVE_JMP_CALL__
+ ;; Store B0 * sign of A
+ clr BB0
+ sbrc A0, 7
+ mov BB0, B0
+ call __mulhi3
+#else /* have no CALL */
+ ;; Skip sign-extension of A if A >= 0
+ ;; Same size as with the first alternative but avoids errata skip
+ ;; and is faster if A >= 0
+ sbrs A0, 7
+ rjmp __mulhi3
+ ;; If A < 0 store B
+ mov BB0, B0
+ rcall __mulhi3
+#endif /* HAVE_JMP_CALL */
+ ;; 1-extend A after the multiplication
+ sub C1, BB0
+ ret
+ENDF __mulqihi3
+#endif /* L_mulqihi3 */
+
+#if defined (L_mulhi3)
+;;; R25:R24 = R23:R22 * R25:R24
+;;; (C1:C0) = (A1:A0) * (B1:B0)
+;;; Clobbers: __tmp_reg__, R21..R23
+DEFUN __mulhi3
+
+ ;; Clear result
+ clr CC0
+ clr CC1
+ rjmp 3f
+1:
+ ;; Bit n of A is 1 --> C += B << n
+ add CC0, B0
+ adc CC1, B1
+2:
+ lsl B0
+ rol B1
+3:
+ ;; If B == 0 we are ready
+ sbiw B0, 0
+ breq 9f
+
+ ;; Carry = n-th bit of A
+ lsr A1
+ ror A0
+ ;; If bit n of A is set, then go add B * 2^n to C
+ brcs 1b
+
+ ;; Carry = 0 --> The ROR above acts like CP A0, 0
+ ;; Thus, it is sufficient to CPC the high part to test A against 0
+ cpc A1, __zero_reg__
+ ;; Only proceed if A != 0
+ brne 2b
+9:
+ ;; Move Result into place
+ mov C0, CC0
+ mov C1, CC1
+ ret
+ENDF __mulhi3
+#endif /* L_mulhi3 */
+
+#undef A0
+#undef A1
+#undef B0
+#undef BB0
+#undef B1
+#undef C0
+#undef C1
+#undef CC0
+#undef CC1
+
+
+#define A0 22
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+
+#define B0 18
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+
+#define CC0 26
+#define CC1 CC0+1
+#define CC2 30
+#define CC3 CC2+1
+
+#define C0 22
+#define C1 C0+1
+#define C2 C0+2
+#define C3 C0+3
+
+/*******************************************************
+ Widening Multiplication 32 = 16 x 16 without MUL
+*******************************************************/
+
+#if defined (L_umulhisi3)
+DEFUN __umulhisi3
+ wmov B0, 24
+ ;; Zero-extend B
+ clr B2
+ clr B3
+ ;; Zero-extend A
+ wmov A2, B2
+ XJMP __mulsi3
+ENDF __umulhisi3
+#endif /* L_umulhisi3 */
+
+#if defined (L_mulhisi3)
+DEFUN __mulhisi3
+ wmov B0, 24
+ ;; Sign-extend B
+ lsl r25
+ sbc B2, B2
+ mov B3, B2
+#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+ ;; Sign-extend A
+ clr A2
+ sbrc A1, 7
+ com A2
+ mov A3, A2
+ XJMP __mulsi3
+#else /* no __AVR_ERRATA_SKIP_JMP_CALL__ */
+ ;; Zero-extend A and __mulsi3 will run at least twice as fast
+ ;; compared to a sign-extended A.
+ clr A2
+ clr A3
+ sbrs A1, 7
+ XJMP __mulsi3
+ ;; If A < 0 then perform the B * 0xffff.... before the
+ ;; very multiplication by initializing the high part of the
+ ;; result CC with -B.
+ wmov CC2, A2
+ sub CC2, B0
+ sbc CC3, B1
+ XJMP __mulsi3_helper
+#endif /* __AVR_ERRATA_SKIP_JMP_CALL__ */
+ENDF __mulhisi3
+#endif /* L_mulhisi3 */
+
+
+/*******************************************************
+ Multiplication 32 x 32 without MUL
+*******************************************************/
+
+#if defined (L_mulsi3)
+DEFUN __mulsi3
+ ;; Clear result
+ clr CC2
+ clr CC3
+ ;; FALLTHRU
+ENDF __mulsi3
+
+DEFUN __mulsi3_helper
+ clr CC0
+ clr CC1
+ rjmp 3f
+
+1: ;; If bit n of A is set, then add B * 2^n to the result in CC
+ ;; CC += B
+ add CC0,B0 $ adc CC1,B1 $ adc CC2,B2 $ adc CC3,B3
+
+2: ;; B <<= 1
+ lsl B0 $ rol B1 $ rol B2 $ rol B3
+
+3: ;; A >>= 1: Carry = n-th bit of A
+ lsr A3 $ ror A2 $ ror A1 $ ror A0
+
+ brcs 1b
+ ;; Only continue if A != 0
+ sbci A1, 0
+ brne 2b
+ sbiw A2, 0
+ brne 2b
+
+ ;; All bits of A are consumed: Copy result to return register C
+ wmov C0, CC0
+ wmov C2, CC2
+ ret
+ENDF __mulsi3_helper
+#endif /* L_mulsi3 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+#undef CC0
+#undef CC1
+#undef CC2
+#undef CC3
+
+#endif /* !defined (__AVR_HAVE_MUL__) */
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+#if defined (__AVR_HAVE_MUL__)
+#define A0 26
+#define B0 18
+#define C0 22
+
+#define A1 A0+1
+
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+
+#define C1 C0+1
+#define C2 C0+2
+#define C3 C0+3
+
+/*******************************************************
+ Widening Multiplication 32 = 16 x 16 with MUL
+*******************************************************/
+
+#if defined (L_mulhisi3)
+;;; R25:R22 = (signed long) R27:R26 * (signed long) R19:R18
+;;; C3:C0 = (signed long) A1:A0 * (signed long) B1:B0
+;;; Clobbers: __tmp_reg__
+DEFUN __mulhisi3
+ XCALL __umulhisi3
+ ;; Sign-extend B
+ tst B1
+ brpl 1f
+ sub C2, A0
+ sbc C3, A1
+1: ;; Sign-extend A
+ XJMP __usmulhisi3_tail
+ENDF __mulhisi3
+#endif /* L_mulhisi3 */
+
+#if defined (L_usmulhisi3)
+;;; R25:R22 = (signed long) R27:R26 * (unsigned long) R19:R18
+;;; C3:C0 = (signed long) A1:A0 * (unsigned long) B1:B0
+;;; Clobbers: __tmp_reg__
+DEFUN __usmulhisi3
+ XCALL __umulhisi3
+ ;; FALLTHRU
+ENDF __usmulhisi3
+
+DEFUN __usmulhisi3_tail
+ ;; Sign-extend A
+ sbrs A1, 7
+ ret
+ sub C2, B0
+ sbc C3, B1
+ ret
+ENDF __usmulhisi3_tail
+#endif /* L_usmulhisi3 */
+
+#if defined (L_umulhisi3)
+;;; R25:R22 = (unsigned long) R27:R26 * (unsigned long) R19:R18
+;;; C3:C0 = (unsigned long) A1:A0 * (unsigned long) B1:B0
+;;; Clobbers: __tmp_reg__
+DEFUN __umulhisi3
+ mul A0, B0
+ movw C0, r0
+ mul A1, B1
+ movw C2, r0
+ mul A0, B1
+#ifdef __AVR_HAVE_JMP_CALL__
+ ;; This function is used by many other routines, often multiple times.
+ ;; Therefore, if the flash size is not too limited, avoid the RCALL
+ ;; and inverst 6 Bytes to speed things up.
+ add C1, r0
+ adc C2, r1
+ clr __zero_reg__
+ adc C3, __zero_reg__
+#else
+ rcall 1f
+#endif
+ mul A1, B0
+1: add C1, r0
+ adc C2, r1
+ clr __zero_reg__
+ adc C3, __zero_reg__
+ ret
+ENDF __umulhisi3
+#endif /* L_umulhisi3 */
+
+/*******************************************************
+ Widening Multiplication 32 = 16 x 32 with MUL
+*******************************************************/
+
+#if defined (L_mulshisi3)
+;;; R25:R22 = (signed long) R27:R26 * R21:R18
+;;; (C3:C0) = (signed long) A1:A0 * B3:B0
+;;; Clobbers: __tmp_reg__
+DEFUN __mulshisi3
+#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+ ;; Some cores have problem skipping 2-word instruction
+ tst A1
+ brmi __mulohisi3
+#else
+ sbrs A1, 7
+#endif /* __AVR_HAVE_JMP_CALL__ */
+ XJMP __muluhisi3
+ ;; FALLTHRU
+ENDF __mulshisi3
+
+;;; R25:R22 = (one-extended long) R27:R26 * R21:R18
+;;; (C3:C0) = (one-extended long) A1:A0 * B3:B0
+;;; Clobbers: __tmp_reg__
+DEFUN __mulohisi3
+ XCALL __muluhisi3
+ ;; One-extend R27:R26 (A1:A0)
+ sub C2, B0
+ sbc C3, B1
+ ret
+ENDF __mulohisi3
+#endif /* L_mulshisi3 */
+
+#if defined (L_muluhisi3)
+;;; R25:R22 = (unsigned long) R27:R26 * R21:R18
+;;; (C3:C0) = (unsigned long) A1:A0 * B3:B0
+;;; Clobbers: __tmp_reg__
+DEFUN __muluhisi3
+ XCALL __umulhisi3
+ mul A0, B3
+ add C3, r0
+ mul A1, B2
+ add C3, r0
+ mul A0, B2
+ add C2, r0
+ adc C3, r1
+ clr __zero_reg__
+ ret
+ENDF __muluhisi3
+#endif /* L_muluhisi3 */
+
+/*******************************************************
+ Multiplication 32 x 32 with MUL
+*******************************************************/
+
+#if defined (L_mulsi3)
+;;; R25:R22 = R25:R22 * R21:R18
+;;; (C3:C0) = C3:C0 * B3:B0
+;;; Clobbers: R26, R27, __tmp_reg__
+DEFUN __mulsi3
+ movw A0, C0
+ push C2
+ push C3
+ XCALL __muluhisi3
+ pop A1
+ pop A0
+ ;; A1:A0 now contains the high word of A
+ mul A0, B0
+ add C2, r0
+ adc C3, r1
+ mul A0, B1
+ add C3, r0
+ mul A1, B0
+ add C3, r0
+ clr __zero_reg__
+ ret
+ENDF __mulsi3
+#endif /* L_mulsi3 */
+
+#undef A0
+#undef A1
+
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+
+#endif /* __AVR_HAVE_MUL__ */
+
+/*******************************************************
+ Multiplication 24 x 24 with MUL
+*******************************************************/
+
+#if defined (L_mulpsi3)
+
+;; A[0..2]: In: Multiplicand; Out: Product
+#define A0 22
+#define A1 A0+1
+#define A2 A0+2
+
+;; B[0..2]: In: Multiplier
+#define B0 18
+#define B1 B0+1
+#define B2 B0+2
+
+#if defined (__AVR_HAVE_MUL__)
+
+;; C[0..2]: Expand Result
+#define C0 22
+#define C1 C0+1
+#define C2 C0+2
+
+;; R24:R22 *= R20:R18
+;; Clobbers: r21, r25, r26, r27, __tmp_reg__
+
+#define AA0 26
+#define AA2 21
+
+DEFUN __mulpsi3
+ wmov AA0, A0
+ mov AA2, A2
+ XCALL __umulhisi3
+ mul AA2, B0 $ add C2, r0
+ mul AA0, B2 $ add C2, r0
+ clr __zero_reg__
+ ret
+ENDF __mulpsi3
+
+#undef AA2
+#undef AA0
+
+#undef C2
+#undef C1
+#undef C0
+
+#else /* !HAVE_MUL */
+
+;; C[0..2]: Expand Result
+#define C0 0
+#define C1 C0+1
+#define C2 21
+
+;; R24:R22 *= R20:R18
+;; Clobbers: __tmp_reg__, R18, R19, R20, R21
+
+DEFUN __mulpsi3
+
+ ;; C[] = 0
+ clr __tmp_reg__
+ clr C2
+
+0: ;; Shift N-th Bit of B[] into Carry. N = 24 - Loop
+ LSR B2 $ ror B1 $ ror B0
+
+ ;; If the N-th Bit of B[] was set...
+ brcc 1f
+
+ ;; ...then add A[] * 2^N to the Result C[]
+ ADD C0,A0 $ adc C1,A1 $ adc C2,A2
+
+1: ;; Multiply A[] by 2
+ LSL A0 $ rol A1 $ rol A2
+
+ ;; Loop until B[] is 0
+ subi B0,0 $ sbci B1,0 $ sbci B2,0
+ brne 0b
+
+ ;; Copy C[] to the return Register A[]
+ wmov A0, C0
+ mov A2, C2
+
+ clr __zero_reg__
+ ret
+ENDF __mulpsi3
+
+#undef C2
+#undef C1
+#undef C0
+
+#endif /* HAVE_MUL */
+
+#undef B2
+#undef B1
+#undef B0
+
+#undef A2
+#undef A1
+#undef A0
+
+#endif /* L_mulpsi3 */
+
+#if defined (L_mulsqipsi3) && defined (__AVR_HAVE_MUL__)
+
+;; A[0..2]: In: Multiplicand
+#define A0 22
+#define A1 A0+1
+#define A2 A0+2
+
+;; BB: In: Multiplier
+#define BB 25
+
+;; C[0..2]: Result
+#define C0 18
+#define C1 C0+1
+#define C2 C0+2
+
+;; C[] = A[] * sign_extend (BB)
+DEFUN __mulsqipsi3
+ mul A0, BB
+ movw C0, r0
+ mul A2, BB
+ mov C2, r0
+ mul A1, BB
+ add C1, r0
+ adc C2, r1
+ clr __zero_reg__
+ sbrs BB, 7
+ ret
+ ;; One-extend BB
+ sub C1, A0
+ sbc C2, A1
+ ret
+ENDF __mulsqipsi3
+
+#undef C2
+#undef C1
+#undef C0
+
+#undef BB
+
+#undef A2
+#undef A1
+#undef A0
+
+#endif /* L_mulsqipsi3 && HAVE_MUL */
+
+/*******************************************************
+ Multiplication 64 x 64
+*******************************************************/
+
+;; A[] = A[] * B[]
+
+;; A[0..7]: In: Multiplicand
+;; Out: Product
+#define A0 18
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+#define A4 A0+4
+#define A5 A0+5
+#define A6 A0+6
+#define A7 A0+7
+
+;; B[0..7]: In: Multiplier
+#define B0 10
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+#define B4 B0+4
+#define B5 B0+5
+#define B6 B0+6
+#define B7 B0+7
+
+#if defined (__AVR_HAVE_MUL__)
+
+;; Define C[] for convenience
+;; Notice that parts of C[] overlap A[] respective B[]
+#define C0 16
+#define C1 C0+1
+#define C2 20
+#define C3 C2+1
+#define C4 28
+#define C5 C4+1
+#define C6 C4+2
+#define C7 C4+3
+
+#if defined (L_muldi3)
+
+;; A[] *= B[]
+;; R25:R18 *= R17:R10
+;; Ordinary ABI-Function
+
+DEFUN __muldi3
+ push r29
+ push r28
+ push r17
+ push r16
+
+ ;; Counting in Words, we have to perform a 4 * 4 Multiplication
+
+ ;; 3 * 0 + 0 * 3
+ mul A7,B0 $ $ mov C7,r0
+ mul A0,B7 $ $ add C7,r0
+ mul A6,B1 $ $ add C7,r0
+ mul A6,B0 $ mov C6,r0 $ add C7,r1
+ mul B6,A1 $ $ add C7,r0
+ mul B6,A0 $ add C6,r0 $ adc C7,r1
+
+ ;; 1 * 2
+ mul A2,B4 $ add C6,r0 $ adc C7,r1
+ mul A3,B4 $ $ add C7,r0
+ mul A2,B5 $ $ add C7,r0
+
+ push A5
+ push A4
+ push B1
+ push B0
+ push A3
+ push A2
+
+ ;; 0 * 0
+ wmov 26, B0
+ XCALL __umulhisi3
+ wmov C0, 22
+ wmov C2, 24
+
+ ;; 0 * 2
+ wmov 26, B4
+ XCALL __umulhisi3 $ wmov C4,22 $ add C6,24 $ adc C7,25
+
+ wmov 26, B2
+ ;; 0 * 1
+ XCALL __muldi3_6
+
+ pop A0
+ pop A1
+ ;; 1 * 1
+ wmov 26, B2
+ XCALL __umulhisi3 $ add C4,22 $ adc C5,23 $ adc C6,24 $ adc C7,25
+
+ pop r26
+ pop r27
+ ;; 1 * 0
+ XCALL __muldi3_6
+
+ pop A0
+ pop A1
+ ;; 2 * 0
+ XCALL __umulhisi3 $ add C4,22 $ adc C5,23 $ adc C6,24 $ adc C7,25
+
+ ;; 2 * 1
+ wmov 26, B2
+ XCALL __umulhisi3 $ $ $ add C6,22 $ adc C7,23
+
+ ;; A[] = C[]
+ wmov A0, C0
+ ;; A2 = C2 already
+ wmov A4, C4
+ wmov A6, C6
+
+ clr __zero_reg__
+ pop r16
+ pop r17
+ pop r28
+ pop r29
+ ret
+ENDF __muldi3
+#endif /* L_muldi3 */
+
+#if defined (L_muldi3_6)
+;; A helper for some 64-bit multiplications with MUL available
+DEFUN __muldi3_6
+__muldi3_6:
+ XCALL __umulhisi3
+ add C2, 22
+ adc C3, 23
+ adc C4, 24
+ adc C5, 25
+ brcc 0f
+ adiw C6, 1
+0: ret
+ENDF __muldi3_6
+#endif /* L_muldi3_6 */
+
+#undef C7
+#undef C6
+#undef C5
+#undef C4
+#undef C3
+#undef C2
+#undef C1
+#undef C0
+
+#else /* !HAVE_MUL */
+
+#if defined (L_muldi3)
+
+#define C0 26
+#define C1 C0+1
+#define C2 C0+2
+#define C3 C0+3
+#define C4 C0+4
+#define C5 C0+5
+#define C6 0
+#define C7 C6+1
+
+#define Loop 9
+
+;; A[] *= B[]
+;; R25:R18 *= R17:R10
+;; Ordinary ABI-Function
+
+DEFUN __muldi3
+ push r29
+ push r28
+ push Loop
+
+ ldi C0, 64
+ mov Loop, C0
+
+ ;; C[] = 0
+ clr __tmp_reg__
+ wmov C0, 0
+ wmov C2, 0
+ wmov C4, 0
+
+0: ;; Rotate B[] right by 1 and set Carry to the N-th Bit of B[]
+ ;; where N = 64 - Loop.
+ ;; Notice that B[] = B[] >>> 64 so after this Routine has finished,
+ ;; B[] will have its initial Value again.
+ LSR B7 $ ror B6 $ ror B5 $ ror B4
+ ror B3 $ ror B2 $ ror B1 $ ror B0
+
+ ;; If the N-th Bit of B[] was set then...
+ brcc 1f
+ ;; ...finish Rotation...
+ ori B7, 1 << 7
+
+ ;; ...and add A[] * 2^N to the Result C[]
+ ADD C0,A0 $ adc C1,A1 $ adc C2,A2 $ adc C3,A3
+ adc C4,A4 $ adc C5,A5 $ adc C6,A6 $ adc C7,A7
+
+1: ;; Multiply A[] by 2
+ LSL A0 $ rol A1 $ rol A2 $ rol A3
+ rol A4 $ rol A5 $ rol A6 $ rol A7
+
+ dec Loop
+ brne 0b
+
+ ;; We expanded the Result in C[]
+ ;; Copy Result to the Return Register A[]
+ wmov A0, C0
+ wmov A2, C2
+ wmov A4, C4
+ wmov A6, C6
+
+ clr __zero_reg__
+ pop Loop
+ pop r28
+ pop r29
+ ret
+ENDF __muldi3
+
+#undef Loop
+
+#undef C7
+#undef C6
+#undef C5
+#undef C4
+#undef C3
+#undef C2
+#undef C1
+#undef C0
+
+#endif /* L_muldi3 */
+#endif /* HAVE_MUL */
+
+#undef B7
+#undef B6
+#undef B5
+#undef B4
+#undef B3
+#undef B2
+#undef B1
+#undef B0
+
+#undef A7
+#undef A6
+#undef A5
+#undef A4
+#undef A3
+#undef A2
+#undef A1
+#undef A0
+
+/*******************************************************
+ Widening Multiplication 64 = 32 x 32 with MUL
+*******************************************************/
+
+#if defined (__AVR_HAVE_MUL__)
+#define A0 r22
+#define A1 r23
+#define A2 r24
+#define A3 r25
+
+#define B0 r18
+#define B1 r19
+#define B2 r20
+#define B3 r21
+
+#define C0 18
+#define C1 C0+1
+#define C2 20
+#define C3 C2+1
+#define C4 28
+#define C5 C4+1
+#define C6 C4+2
+#define C7 C4+3
+
+#if defined (L_umulsidi3)
+
+;; Unsigned widening 64 = 32 * 32 Multiplication with MUL
+
+;; R18[8] = R22[4] * R18[4]
+;;
+;; Ordinary ABI Function, but additionally sets
+;; X = R20[2] = B2[2]
+;; Z = R22[2] = A0[2]
+DEFUN __umulsidi3
+ clt
+ ;; FALLTHRU
+ENDF __umulsidi3
+ ;; T = sign (A)
+DEFUN __umulsidi3_helper
+ push 29 $ push 28 ; Y
+ wmov 30, A2
+ ;; Counting in Words, we have to perform 4 Multiplications
+ ;; 0 * 0
+ wmov 26, A0
+ XCALL __umulhisi3
+ push 23 $ push 22 ; C0
+ wmov 28, B0
+ wmov 18, B2
+ wmov C2, 24
+ push 27 $ push 26 ; A0
+ push 19 $ push 18 ; B2
+ ;;
+ ;; 18 20 22 24 26 28 30 | B2, B3, A0, A1, C0, C1, Y
+ ;; B2 C2 -- -- -- B0 A2
+ ;; 1 * 1
+ wmov 26, 30 ; A2
+ XCALL __umulhisi3
+ ;; Sign-extend A. T holds the sign of A
+ brtc 0f
+ ;; Subtract B from the high part of the result
+ sub 22, 28
+ sbc 23, 29
+ sbc 24, 18
+ sbc 25, 19
+0: wmov 18, 28 ;; B0
+ wmov C4, 22
+ wmov C6, 24
+ ;;
+ ;; 18 20 22 24 26 28 30 | B2, B3, A0, A1, C0, C1, Y
+ ;; B0 C2 -- -- A2 C4 C6
+ ;;
+ ;; 1 * 0
+ XCALL __muldi3_6
+ ;; 0 * 1
+ pop 26 $ pop 27 ;; B2
+ pop 18 $ pop 19 ;; A0
+ XCALL __muldi3_6
+
+ ;; Move result C into place and save A0 in Z
+ wmov 22, C4
+ wmov 24, C6
+ wmov 30, 18 ; A0
+ pop C0 $ pop C1
+
+ ;; Epilogue
+ pop 28 $ pop 29 ;; Y
+ ret
+ENDF __umulsidi3_helper
+#endif /* L_umulsidi3 */
+
+
+#if defined (L_mulsidi3)
+
+;; Signed widening 64 = 32 * 32 Multiplication
+;;
+;; R18[8] = R22[4] * R18[4]
+;; Ordinary ABI Function
+DEFUN __mulsidi3
+ bst A3, 7
+ sbrs B3, 7 ; Enhanced core has no skip bug
+ XJMP __umulsidi3_helper
+
+ ;; B needs sign-extension
+ push A3
+ push A2
+ XCALL __umulsidi3_helper
+ ;; A0 survived in Z
+ sub r22, r30
+ sbc r23, r31
+ pop r26
+ pop r27
+ sbc r24, r26
+ sbc r25, r27
+ ret
+ENDF __mulsidi3
+#endif /* L_mulsidi3 */
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+#undef C0
+#undef C1
+#undef C2
+#undef C3
+#undef C4
+#undef C5
+#undef C6
+#undef C7
+#endif /* HAVE_MUL */
+
+/**********************************************************
+ Widening Multiplication 64 = 32 x 32 without MUL
+**********************************************************/
+
+#if defined (L_mulsidi3) && !defined (__AVR_HAVE_MUL__)
+#define A0 18
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+#define A4 A0+4
+#define A5 A0+5
+#define A6 A0+6
+#define A7 A0+7
+
+#define B0 10
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+#define B4 B0+4
+#define B5 B0+5
+#define B6 B0+6
+#define B7 B0+7
+
+#define AA0 22
+#define AA1 AA0+1
+#define AA2 AA0+2
+#define AA3 AA0+3
+
+#define BB0 18
+#define BB1 BB0+1
+#define BB2 BB0+2
+#define BB3 BB0+3
+
+#define Mask r30
+
+;; Signed / Unsigned widening 64 = 32 * 32 Multiplication without MUL
+;;
+;; R18[8] = R22[4] * R18[4]
+;; Ordinary ABI Function
+DEFUN __mulsidi3
+ set
+ skip
+ ;; FALLTHRU
+ENDF __mulsidi3
+
+DEFUN __umulsidi3
+ clt ; skipped
+ ;; Save 10 Registers: R10..R17, R28, R29
+ do_prologue_saves 10
+ ldi Mask, 0xff
+ bld Mask, 7
+ ;; Move B into place...
+ wmov B0, BB0
+ wmov B2, BB2
+ ;; ...and extend it
+ and BB3, Mask
+ lsl BB3
+ sbc B4, B4
+ mov B5, B4
+ wmov B6, B4
+ ;; Move A into place...
+ wmov A0, AA0
+ wmov A2, AA2
+ ;; ...and extend it
+ and AA3, Mask
+ lsl AA3
+ sbc A4, A4
+ mov A5, A4
+ wmov A6, A4
+ XCALL __muldi3
+ do_epilogue_restores 10
+ENDF __umulsidi3
+
+#undef A0
+#undef A1
+#undef A2
+#undef A3
+#undef A4
+#undef A5
+#undef A6
+#undef A7
+#undef B0
+#undef B1
+#undef B2
+#undef B3
+#undef B4
+#undef B5
+#undef B6
+#undef B7
+#undef AA0
+#undef AA1
+#undef AA2
+#undef AA3
+#undef BB0
+#undef BB1
+#undef BB2
+#undef BB3
+#undef Mask
+#endif /* L_mulsidi3 && !HAVE_MUL */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+.section .text.libgcc.div, "ax", @progbits
+
+/*******************************************************
+ Division 8 / 8 => (result + remainder)
+*******************************************************/
+#define r_rem r25 /* remainder */
+#define r_arg1 r24 /* dividend, quotient */
+#define r_arg2 r22 /* divisor */
+#define r_cnt r23 /* loop count */
+
+#if defined (L_udivmodqi4)
+DEFUN __udivmodqi4
+ sub r_rem,r_rem ; clear remainder and carry
+ ldi r_cnt,9 ; init loop counter
+ rjmp __udivmodqi4_ep ; jump to entry point
+__udivmodqi4_loop:
+ rol r_rem ; shift dividend into remainder
+ cp r_rem,r_arg2 ; compare remainder & divisor
+ brcs __udivmodqi4_ep ; remainder <= divisor
+ sub r_rem,r_arg2 ; restore remainder
+__udivmodqi4_ep:
+ rol r_arg1 ; shift dividend (with CARRY)
+ dec r_cnt ; decrement loop counter
+ brne __udivmodqi4_loop
+ com r_arg1 ; complement result
+ ; because C flag was complemented in loop
+ ret
+ENDF __udivmodqi4
+#endif /* defined (L_udivmodqi4) */
+
+#if defined (L_divmodqi4)
+DEFUN __divmodqi4
+ bst r_arg1,7 ; store sign of dividend
+ mov __tmp_reg__,r_arg1
+ eor __tmp_reg__,r_arg2; r0.7 is sign of result
+ sbrc r_arg1,7
+ neg r_arg1 ; dividend negative : negate
+ sbrc r_arg2,7
+ neg r_arg2 ; divisor negative : negate
+ XCALL __udivmodqi4 ; do the unsigned div/mod
+ brtc __divmodqi4_1
+ neg r_rem ; correct remainder sign
+__divmodqi4_1:
+ sbrc __tmp_reg__,7
+ neg r_arg1 ; correct result sign
+__divmodqi4_exit:
+ ret
+ENDF __divmodqi4
+#endif /* defined (L_divmodqi4) */
+
+#undef r_rem
+#undef r_arg1
+#undef r_arg2
+#undef r_cnt
+
+
+/*******************************************************
+ Division 16 / 16 => (result + remainder)
+*******************************************************/
+#define r_remL r26 /* remainder Low */
+#define r_remH r27 /* remainder High */
+
+/* return: remainder */
+#define r_arg1L r24 /* dividend Low */
+#define r_arg1H r25 /* dividend High */
+
+/* return: quotient */
+#define r_arg2L r22 /* divisor Low */
+#define r_arg2H r23 /* divisor High */
+
+#define r_cnt r21 /* loop count */
+
+#if defined (L_udivmodhi4)
+DEFUN __udivmodhi4
+ sub r_remL,r_remL
+ sub r_remH,r_remH ; clear remainder and carry
+ ldi r_cnt,17 ; init loop counter
+ rjmp __udivmodhi4_ep ; jump to entry point
+__udivmodhi4_loop:
+ rol r_remL ; shift dividend into remainder
+ rol r_remH
+ cp r_remL,r_arg2L ; compare remainder & divisor
+ cpc r_remH,r_arg2H
+ brcs __udivmodhi4_ep ; remainder < divisor
+ sub r_remL,r_arg2L ; restore remainder
+ sbc r_remH,r_arg2H
+__udivmodhi4_ep:
+ rol r_arg1L ; shift dividend (with CARRY)
+ rol r_arg1H
+ dec r_cnt ; decrement loop counter
+ brne __udivmodhi4_loop
+ com r_arg1L
+ com r_arg1H
+; div/mod results to return registers, as for the div() function
+ mov_l r_arg2L, r_arg1L ; quotient
+ mov_h r_arg2H, r_arg1H
+ mov_l r_arg1L, r_remL ; remainder
+ mov_h r_arg1H, r_remH
+ ret
+ENDF __udivmodhi4
+#endif /* defined (L_udivmodhi4) */
+
+#if defined (L_divmodhi4)
+DEFUN __divmodhi4
+ .global _div
+_div:
+ bst r_arg1H,7 ; store sign of dividend
+ mov __tmp_reg__,r_arg2H
+ brtc 0f
+ com __tmp_reg__ ; r0.7 is sign of result
+ rcall __divmodhi4_neg1 ; dividend negative: negate
+0:
+ sbrc r_arg2H,7
+ rcall __divmodhi4_neg2 ; divisor negative: negate
+ XCALL __udivmodhi4 ; do the unsigned div/mod
+ sbrc __tmp_reg__,7
+ rcall __divmodhi4_neg2 ; correct remainder sign
+ brtc __divmodhi4_exit
+__divmodhi4_neg1:
+ ;; correct dividend/remainder sign
+ com r_arg1H
+ neg r_arg1L
+ sbci r_arg1H,0xff
+ ret
+__divmodhi4_neg2:
+ ;; correct divisor/result sign
+ com r_arg2H
+ neg r_arg2L
+ sbci r_arg2H,0xff
+__divmodhi4_exit:
+ ret
+ENDF __divmodhi4
+#endif /* defined (L_divmodhi4) */
+
+#undef r_remH
+#undef r_remL
+
+#undef r_arg1H
+#undef r_arg1L
+
+#undef r_arg2H
+#undef r_arg2L
+
+#undef r_cnt
+
+/*******************************************************
+ Division 24 / 24 => (result + remainder)
+*******************************************************/
+
+;; A[0..2]: In: Dividend; Out: Quotient
+#define A0 22
+#define A1 A0+1
+#define A2 A0+2
+
+;; B[0..2]: In: Divisor; Out: Remainder
+#define B0 18
+#define B1 B0+1
+#define B2 B0+2
+
+;; C[0..2]: Expand remainder
+#define C0 __zero_reg__
+#define C1 26
+#define C2 25
+
+;; Loop counter
+#define r_cnt 21
+
+#if defined (L_udivmodpsi4)
+;; R24:R22 = R24:R22 udiv R20:R18
+;; R20:R18 = R24:R22 umod R20:R18
+;; Clobbers: R21, R25, R26
+
+DEFUN __udivmodpsi4
+ ; init loop counter
+ ldi r_cnt, 24+1
+ ; Clear remainder and carry. C0 is already 0
+ clr C1
+ sub C2, C2
+ ; jump to entry point
+ rjmp __udivmodpsi4_start
+__udivmodpsi4_loop:
+ ; shift dividend into remainder
+ rol C0
+ rol C1
+ rol C2
+ ; compare remainder & divisor
+ cp C0, B0
+ cpc C1, B1
+ cpc C2, B2
+ brcs __udivmodpsi4_start ; remainder <= divisor
+ sub C0, B0 ; restore remainder
+ sbc C1, B1
+ sbc C2, B2
+__udivmodpsi4_start:
+ ; shift dividend (with CARRY)
+ rol A0
+ rol A1
+ rol A2
+ ; decrement loop counter
+ dec r_cnt
+ brne __udivmodpsi4_loop
+ com A0
+ com A1
+ com A2
+ ; div/mod results to return registers
+ ; remainder
+ mov B0, C0
+ mov B1, C1
+ mov B2, C2
+ clr __zero_reg__ ; C0
+ ret
+ENDF __udivmodpsi4
+#endif /* defined (L_udivmodpsi4) */
+
+#if defined (L_divmodpsi4)
+;; R24:R22 = R24:R22 div R20:R18
+;; R20:R18 = R24:R22 mod R20:R18
+;; Clobbers: T, __tmp_reg__, R21, R25, R26
+
+DEFUN __divmodpsi4
+ ; R0.7 will contain the sign of the result:
+ ; R0.7 = A.sign ^ B.sign
+ mov __tmp_reg__, B2
+ ; T-flag = sign of dividend
+ bst A2, 7
+ brtc 0f
+ com __tmp_reg__
+ ; Adjust dividend's sign
+ rcall __divmodpsi4_negA
+0:
+ ; Adjust divisor's sign
+ sbrc B2, 7
+ rcall __divmodpsi4_negB
+
+ ; Do the unsigned div/mod
+ XCALL __udivmodpsi4
+
+ ; Adjust quotient's sign
+ sbrc __tmp_reg__, 7
+ rcall __divmodpsi4_negA
+
+ ; Adjust remainder's sign
+ brtc __divmodpsi4_end
+
+__divmodpsi4_negB:
+ ; Correct divisor/remainder sign
+ com B2
+ com B1
+ neg B0
+ sbci B1, -1
+ sbci B2, -1
+ ret
+
+ ; Correct dividend/quotient sign
+__divmodpsi4_negA:
+ com A2
+ com A1
+ neg A0
+ sbci A1, -1
+ sbci A2, -1
+__divmodpsi4_end:
+ ret
+
+ENDF __divmodpsi4
+#endif /* defined (L_divmodpsi4) */
+
+#undef A0
+#undef A1
+#undef A2
+
+#undef B0
+#undef B1
+#undef B2
+
+#undef C0
+#undef C1
+#undef C2
+
+#undef r_cnt
+
+/*******************************************************
+ Division 32 / 32 => (result + remainder)
+*******************************************************/
+#define r_remHH r31 /* remainder High */
+#define r_remHL r30
+#define r_remH r27
+#define r_remL r26 /* remainder Low */
+
+/* return: remainder */
+#define r_arg1HH r25 /* dividend High */
+#define r_arg1HL r24
+#define r_arg1H r23
+#define r_arg1L r22 /* dividend Low */
+
+/* return: quotient */
+#define r_arg2HH r21 /* divisor High */
+#define r_arg2HL r20
+#define r_arg2H r19
+#define r_arg2L r18 /* divisor Low */
+
+#define r_cnt __zero_reg__ /* loop count (0 after the loop!) */
+
+#if defined (L_udivmodsi4)
+DEFUN __udivmodsi4
+ ldi r_remL, 33 ; init loop counter
+ mov r_cnt, r_remL
+ sub r_remL,r_remL
+ sub r_remH,r_remH ; clear remainder and carry
+ mov_l r_remHL, r_remL
+ mov_h r_remHH, r_remH
+ rjmp __udivmodsi4_ep ; jump to entry point
+__udivmodsi4_loop:
+ rol r_remL ; shift dividend into remainder
+ rol r_remH
+ rol r_remHL
+ rol r_remHH
+ cp r_remL,r_arg2L ; compare remainder & divisor
+ cpc r_remH,r_arg2H
+ cpc r_remHL,r_arg2HL
+ cpc r_remHH,r_arg2HH
+ brcs __udivmodsi4_ep ; remainder <= divisor
+ sub r_remL,r_arg2L ; restore remainder
+ sbc r_remH,r_arg2H
+ sbc r_remHL,r_arg2HL
+ sbc r_remHH,r_arg2HH
+__udivmodsi4_ep:
+ rol r_arg1L ; shift dividend (with CARRY)
+ rol r_arg1H
+ rol r_arg1HL
+ rol r_arg1HH
+ dec r_cnt ; decrement loop counter
+ brne __udivmodsi4_loop
+ ; __zero_reg__ now restored (r_cnt == 0)
+ com r_arg1L
+ com r_arg1H
+ com r_arg1HL
+ com r_arg1HH
+; div/mod results to return registers, as for the ldiv() function
+ mov_l r_arg2L, r_arg1L ; quotient
+ mov_h r_arg2H, r_arg1H
+ mov_l r_arg2HL, r_arg1HL
+ mov_h r_arg2HH, r_arg1HH
+ mov_l r_arg1L, r_remL ; remainder
+ mov_h r_arg1H, r_remH
+ mov_l r_arg1HL, r_remHL
+ mov_h r_arg1HH, r_remHH
+ ret
+ENDF __udivmodsi4
+#endif /* defined (L_udivmodsi4) */
+
+#if defined (L_divmodsi4)
+DEFUN __divmodsi4
+ mov __tmp_reg__,r_arg2HH
+ bst r_arg1HH,7 ; store sign of dividend
+ brtc 0f
+ com __tmp_reg__ ; r0.7 is sign of result
+ XCALL __negsi2 ; dividend negative: negate
+0:
+ sbrc r_arg2HH,7
+ rcall __divmodsi4_neg2 ; divisor negative: negate
+ XCALL __udivmodsi4 ; do the unsigned div/mod
+ sbrc __tmp_reg__, 7 ; correct quotient sign
+ rcall __divmodsi4_neg2
+ brtc __divmodsi4_exit ; correct remainder sign
+ XJMP __negsi2
+__divmodsi4_neg2:
+ ;; correct divisor/quotient sign
+ com r_arg2HH
+ com r_arg2HL
+ com r_arg2H
+ neg r_arg2L
+ sbci r_arg2H,0xff
+ sbci r_arg2HL,0xff
+ sbci r_arg2HH,0xff
+__divmodsi4_exit:
+ ret
+ENDF __divmodsi4
+#endif /* defined (L_divmodsi4) */
+
+#if defined (L_negsi2)
+;; (set (reg:SI 22)
+;; (neg:SI (reg:SI 22)))
+;; Sets the V flag for signed overflow tests
+DEFUN __negsi2
+ NEG4 22
+ ret
+ENDF __negsi2
+#endif /* L_negsi2 */
+
+#undef r_remHH
+#undef r_remHL
+#undef r_remH
+#undef r_remL
+#undef r_arg1HH
+#undef r_arg1HL
+#undef r_arg1H
+#undef r_arg1L
+#undef r_arg2HH
+#undef r_arg2HL
+#undef r_arg2H
+#undef r_arg2L
+#undef r_cnt
+
+/*******************************************************
+ Division 64 / 64
+ Modulo 64 % 64
+*******************************************************/
+
+;; Use Speed-optimized Version on "big" Devices, i.e. Devices with
+;; at least 16k of Program Memory. For smaller Devices, depend
+;; on MOVW and SP Size. There is a Connexion between SP Size and
+;; Flash Size so that SP Size can be used to test for Flash Size.
+
+#if defined (__AVR_HAVE_JMP_CALL__)
+# define SPEED_DIV 8
+#elif defined (__AVR_HAVE_MOVW__) && defined (__AVR_HAVE_SPH__)
+# define SPEED_DIV 16
+#else
+# define SPEED_DIV 0
+#endif
+
+;; A[0..7]: In: Dividend;
+;; Out: Quotient (T = 0)
+;; Out: Remainder (T = 1)
+#define A0 18
+#define A1 A0+1
+#define A2 A0+2
+#define A3 A0+3
+#define A4 A0+4
+#define A5 A0+5
+#define A6 A0+6
+#define A7 A0+7
+
+;; B[0..7]: In: Divisor; Out: Clobber
+#define B0 10
+#define B1 B0+1
+#define B2 B0+2
+#define B3 B0+3
+#define B4 B0+4
+#define B5 B0+5
+#define B6 B0+6
+#define B7 B0+7
+
+;; C[0..7]: Expand remainder; Out: Remainder (unused)
+#define C0 8
+#define C1 C0+1
+#define C2 30
+#define C3 C2+1
+#define C4 28
+#define C5 C4+1
+#define C6 26
+#define C7 C6+1
+
+;; Holds Signs during Division Routine
+#define SS __tmp_reg__
+
+;; Bit-Counter in Division Routine
+#define R_cnt __zero_reg__
+
+;; Scratch Register for Negation
+#define NN r31
+
+#if defined (L_udivdi3)
+
+;; R25:R18 = R24:R18 umod R17:R10
+;; Ordinary ABI-Function
+
+DEFUN __umoddi3
+ set
+ rjmp __udivdi3_umoddi3
+ENDF __umoddi3
+
+;; R25:R18 = R24:R18 udiv R17:R10
+;; Ordinary ABI-Function
+
+DEFUN __udivdi3
+ clt
+ENDF __udivdi3
+
+DEFUN __udivdi3_umoddi3
+ push C0
+ push C1
+ push C4
+ push C5
+ XCALL __udivmod64
+ pop C5
+ pop C4
+ pop C1
+ pop C0
+ ret
+ENDF __udivdi3_umoddi3
+#endif /* L_udivdi3 */
+
+#if defined (L_udivmod64)
+
+;; Worker Routine for 64-Bit unsigned Quotient and Remainder Computation
+;; No Registers saved/restored; the Callers will take Care.
+;; Preserves B[] and T-flag
+;; T = 0: Compute Quotient in A[]
+;; T = 1: Compute Remainder in A[] and shift SS one Bit left
+
+DEFUN __udivmod64
+
+ ;; Clear Remainder (C6, C7 will follow)
+ clr C0
+ clr C1
+ wmov C2, C0
+ wmov C4, C0
+ ldi C7, 64
+
+#if SPEED_DIV == 0 || SPEED_DIV == 16
+ ;; Initialize Loop-Counter
+ mov R_cnt, C7
+ wmov C6, C0
+#endif /* SPEED_DIV */
+
+#if SPEED_DIV == 8
+
+ push A7
+ clr C6
+
+1: ;; Compare shifted Devidend against Divisor
+ ;; If -- even after Shifting -- it is smaller...
+ CP A7,B0 $ cpc C0,B1 $ cpc C1,B2 $ cpc C2,B3
+ cpc C3,B4 $ cpc C4,B5 $ cpc C5,B6 $ cpc C6,B7
+ brcc 2f
+
+ ;; ...then we can subtract it. Thus, it is legal to shift left
+ $ mov C6,C5 $ mov C5,C4 $ mov C4,C3
+ mov C3,C2 $ mov C2,C1 $ mov C1,C0 $ mov C0,A7
+ mov A7,A6 $ mov A6,A5 $ mov A5,A4 $ mov A4,A3
+ mov A3,A2 $ mov A2,A1 $ mov A1,A0 $ clr A0
+
+ ;; 8 Bits are done
+ subi C7, 8
+ brne 1b
+
+ ;; Shifted 64 Bits: A7 has traveled to C7
+ pop C7
+ ;; Divisor is greater than Dividend. We have:
+ ;; A[] % B[] = A[]
+ ;; A[] / B[] = 0
+ ;; Thus, we can return immediately
+ rjmp 5f
+
+2: ;; Initialze Bit-Counter with Number of Bits still to be performed
+ mov R_cnt, C7
+
+ ;; Push of A7 is not needed because C7 is still 0
+ pop C7
+ clr C7
+
+#elif SPEED_DIV == 16
+
+ ;; Compare shifted Dividend against Divisor
+ cp A7, B3
+ cpc C0, B4
+ cpc C1, B5
+ cpc C2, B6
+ cpc C3, B7
+ brcc 2f
+
+ ;; Divisor is greater than shifted Dividen: We can shift the Dividend
+ ;; and it is still smaller than the Divisor --> Shift one 32-Bit Chunk
+ wmov C2,A6 $ wmov C0,A4
+ wmov A6,A2 $ wmov A4,A0
+ wmov A2,C6 $ wmov A0,C4
+
+ ;; Set Bit Counter to 32
+ lsr R_cnt
+2:
+#elif SPEED_DIV
+#error SPEED_DIV = ?
+#endif /* SPEED_DIV */
+
+;; The very Division + Remainder Routine
+
+3: ;; Left-shift Dividend...
+ lsl A0 $ rol A1 $ rol A2 $ rol A3
+ rol A4 $ rol A5 $ rol A6 $ rol A7
+
+ ;; ...into Remainder
+ rol C0 $ rol C1 $ rol C2 $ rol C3
+ rol C4 $ rol C5 $ rol C6 $ rol C7
+
+ ;; Compare Remainder and Divisor
+ CP C0,B0 $ cpc C1,B1 $ cpc C2,B2 $ cpc C3,B3
+ cpc C4,B4 $ cpc C5,B5 $ cpc C6,B6 $ cpc C7,B7
+
+ brcs 4f
+
+ ;; Divisor fits into Remainder: Subtract it from Remainder...
+ SUB C0,B0 $ sbc C1,B1 $ sbc C2,B2 $ sbc C3,B3
+ sbc C4,B4 $ sbc C5,B5 $ sbc C6,B6 $ sbc C7,B7
+
+ ;; ...and set according Bit in the upcoming Quotient
+ ;; The Bit will travel to its final Position
+ ori A0, 1
+
+4: ;; This Bit is done
+ dec R_cnt
+ brne 3b
+ ;; __zero_reg__ is 0 again
+
+ ;; T = 0: We are fine with the Quotient in A[]
+ ;; T = 1: Copy Remainder to A[]
+5: brtc 6f
+ wmov A0, C0
+ wmov A2, C2
+ wmov A4, C4
+ wmov A6, C6
+ ;; Move the Sign of the Result to SS.7
+ lsl SS
+
+6: ret
+
+ENDF __udivmod64
+#endif /* L_udivmod64 */
+
+
+#if defined (L_divdi3)
+
+;; R25:R18 = R24:R18 mod R17:R10
+;; Ordinary ABI-Function
+
+DEFUN __moddi3
+ set
+ rjmp __divdi3_moddi3
+ENDF __moddi3
+
+;; R25:R18 = R24:R18 div R17:R10
+;; Ordinary ABI-Function
+
+DEFUN __divdi3
+ clt
+ENDF __divdi3
+
+DEFUN __divdi3_moddi3
+#if SPEED_DIV
+ mov r31, A7
+ or r31, B7
+ brmi 0f
+ ;; Both Signs are 0: the following Complexitiy is not needed
+ XJMP __udivdi3_umoddi3
+#endif /* SPEED_DIV */
+
+0: ;; The Prologue
+ ;; Save 12 Registers: Y, 17...8
+ ;; No Frame needed
+ do_prologue_saves 12
+
+ ;; SS.7 will contain the Sign of the Quotient (A.sign * B.sign)
+ ;; SS.6 will contain the Sign of the Remainder (A.sign)
+ mov SS, A7
+ asr SS
+ ;; Adjust Dividend's Sign as needed
+#if SPEED_DIV
+ ;; Compiling for Speed we know that at least one Sign must be < 0
+ ;; Thus, if A[] >= 0 then we know B[] < 0
+ brpl 22f
+#else
+ brpl 21f
+#endif /* SPEED_DIV */
+
+ XCALL __negdi2
+
+ ;; Adjust Divisor's Sign and SS.7 as needed
+21: tst B7
+ brpl 3f
+22: ldi NN, 1 << 7
+ eor SS, NN
+
+ ldi NN, -1
+ com B4 $ com B5 $ com B6 $ com B7
+ $ com B1 $ com B2 $ com B3
+ NEG B0
+ $ sbc B1,NN $ sbc B2,NN $ sbc B3,NN
+ sbc B4,NN $ sbc B5,NN $ sbc B6,NN $ sbc B7,NN
+
+3: ;; Do the unsigned 64-Bit Division/Modulo (depending on T-flag)
+ XCALL __udivmod64
+
+ ;; Adjust Result's Sign
+#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+ tst SS
+ brpl 4f
+#else
+ sbrc SS, 7
+#endif /* __AVR_HAVE_JMP_CALL__ */
+ XCALL __negdi2
+
+4: ;; Epilogue: Restore 12 Registers and return
+ do_epilogue_restores 12
+
+ENDF __divdi3_moddi3
+
+#endif /* L_divdi3 */
+
+#undef R_cnt
+#undef SS
+#undef NN
+
+.section .text.libgcc, "ax", @progbits
+
+#define TT __tmp_reg__
+
+#if defined (L_adddi3)
+;; (set (reg:DI 18)
+;; (plus:DI (reg:DI 18)
+;; (reg:DI 10)))
+;; Sets the V flag for signed overflow tests
+;; Sets the C flag for unsigned overflow tests
+DEFUN __adddi3
+ ADD A0,B0 $ adc A1,B1 $ adc A2,B2 $ adc A3,B3
+ adc A4,B4 $ adc A5,B5 $ adc A6,B6 $ adc A7,B7
+ ret
+ENDF __adddi3
+#endif /* L_adddi3 */
+
+#if defined (L_adddi3_s8)
+;; (set (reg:DI 18)
+;; (plus:DI (reg:DI 18)
+;; (sign_extend:SI (reg:QI 26))))
+;; Sets the V flag for signed overflow tests
+;; Sets the C flag for unsigned overflow tests provided 0 <= R26 < 128
+DEFUN __adddi3_s8
+ clr TT
+ sbrc r26, 7
+ com TT
+ ADD A0,r26 $ adc A1,TT $ adc A2,TT $ adc A3,TT
+ adc A4,TT $ adc A5,TT $ adc A6,TT $ adc A7,TT
+ ret
+ENDF __adddi3_s8
+#endif /* L_adddi3_s8 */
+
+#if defined (L_subdi3)
+;; (set (reg:DI 18)
+;; (minus:DI (reg:DI 18)
+;; (reg:DI 10)))
+;; Sets the V flag for signed overflow tests
+;; Sets the C flag for unsigned overflow tests
+DEFUN __subdi3
+ SUB A0,B0 $ sbc A1,B1 $ sbc A2,B2 $ sbc A3,B3
+ sbc A4,B4 $ sbc A5,B5 $ sbc A6,B6 $ sbc A7,B7
+ ret
+ENDF __subdi3
+#endif /* L_subdi3 */
+
+#if defined (L_cmpdi2)
+;; (set (cc0)
+;; (compare (reg:DI 18)
+;; (reg:DI 10)))
+DEFUN __cmpdi2
+ CP A0,B0 $ cpc A1,B1 $ cpc A2,B2 $ cpc A3,B3
+ cpc A4,B4 $ cpc A5,B5 $ cpc A6,B6 $ cpc A7,B7
+ ret
+ENDF __cmpdi2
+#endif /* L_cmpdi2 */
+
+#if defined (L_cmpdi2_s8)
+;; (set (cc0)
+;; (compare (reg:DI 18)
+;; (sign_extend:SI (reg:QI 26))))
+DEFUN __cmpdi2_s8
+ clr TT
+ sbrc r26, 7
+ com TT
+ CP A0,r26 $ cpc A1,TT $ cpc A2,TT $ cpc A3,TT
+ cpc A4,TT $ cpc A5,TT $ cpc A6,TT $ cpc A7,TT
+ ret
+ENDF __cmpdi2_s8
+#endif /* L_cmpdi2_s8 */
+
+#if defined (L_negdi2)
+;; (set (reg:DI 18)
+;; (neg:DI (reg:DI 18)))
+;; Sets the V flag for signed overflow tests
+DEFUN __negdi2
+
+ com A4 $ com A5 $ com A6 $ com A7
+ $ com A1 $ com A2 $ com A3
+ NEG A0
+ $ sbci A1,-1 $ sbci A2,-1 $ sbci A3,-1
+ sbci A4,-1 $ sbci A5,-1 $ sbci A6,-1 $ sbci A7,-1
+ ret
+
+ENDF __negdi2
+#endif /* L_negdi2 */
+
+#undef TT
+
+#undef C7
+#undef C6
+#undef C5
+#undef C4
+#undef C3
+#undef C2
+#undef C1
+#undef C0
+
+#undef B7
+#undef B6
+#undef B5
+#undef B4
+#undef B3
+#undef B2
+#undef B1
+#undef B0
+
+#undef A7
+#undef A6
+#undef A5
+#undef A4
+#undef A3
+#undef A2
+#undef A1
+#undef A0
+
+
+.section .text.libgcc.prologue, "ax", @progbits
+
+/**********************************
+ * This is a prologue subroutine
+ **********************************/
+#if defined (L_prologue)
+
+;; This function does not clobber T-flag; 64-bit division relies on it
+DEFUN __prologue_saves__
+ push r2
+ push r3
+ push r4
+ push r5
+ push r6
+ push r7
+ push r8
+ push r9
+ push r10
+ push r11
+ push r12
+ push r13
+ push r14
+ push r15
+ push r16
+ push r17
+ push r28
+ push r29
+#if !defined (__AVR_HAVE_SPH__)
+ in r28,__SP_L__
+ sub r28,r26
+ out __SP_L__,r28
+ clr r29
+#elif defined (__AVR_XMEGA__)
+ in r28,__SP_L__
+ in r29,__SP_H__
+ sub r28,r26
+ sbc r29,r27
+ out __SP_L__,r28
+ out __SP_H__,r29
+#else
+ in r28,__SP_L__
+ in r29,__SP_H__
+ sub r28,r26
+ sbc r29,r27
+ in __tmp_reg__,__SREG__
+ cli
+ out __SP_H__,r29
+ out __SREG__,__tmp_reg__
+ out __SP_L__,r28
+#endif /* #SP = 8/16 */
+
+#if defined (__AVR_HAVE_EIJMP_EICALL__)
+ eijmp
+#else
+ ijmp
+#endif
+
+ENDF __prologue_saves__
+#endif /* defined (L_prologue) */
+
+/*
+ * This is an epilogue subroutine
+ */
+#if defined (L_epilogue)
+
+DEFUN __epilogue_restores__
+ ldd r2,Y+18
+ ldd r3,Y+17
+ ldd r4,Y+16
+ ldd r5,Y+15
+ ldd r6,Y+14
+ ldd r7,Y+13
+ ldd r8,Y+12
+ ldd r9,Y+11
+ ldd r10,Y+10
+ ldd r11,Y+9
+ ldd r12,Y+8
+ ldd r13,Y+7
+ ldd r14,Y+6
+ ldd r15,Y+5
+ ldd r16,Y+4
+ ldd r17,Y+3
+ ldd r26,Y+2
+#if !defined (__AVR_HAVE_SPH__)
+ ldd r29,Y+1
+ add r28,r30
+ out __SP_L__,r28
+ mov r28, r26
+#elif defined (__AVR_XMEGA__)
+ ldd r27,Y+1
+ add r28,r30
+ adc r29,__zero_reg__
+ out __SP_L__,r28
+ out __SP_H__,r29
+ wmov 28, 26
+#else
+ ldd r27,Y+1
+ add r28,r30
+ adc r29,__zero_reg__
+ in __tmp_reg__,__SREG__
+ cli
+ out __SP_H__,r29
+ out __SREG__,__tmp_reg__
+ out __SP_L__,r28
+ mov_l r28, r26
+ mov_h r29, r27
+#endif /* #SP = 8/16 */
+ ret
+ENDF __epilogue_restores__
+#endif /* defined (L_epilogue) */
+
+#ifdef L_exit
+ .section .fini9,"ax",@progbits
+DEFUN _exit
+ .weak exit
+exit:
+ENDF _exit
+
+ /* Code from .fini8 ... .fini1 sections inserted by ld script. */
+
+ .section .fini0,"ax",@progbits
+ cli
+__stop_program:
+ rjmp __stop_program
+#endif /* defined (L_exit) */
+
+#ifdef L_cleanup
+ .weak _cleanup
+ .func _cleanup
+_cleanup:
+ ret
+.endfunc
+#endif /* defined (L_cleanup) */
+
+
+.section .text.libgcc, "ax", @progbits
+
+#ifdef L_tablejump
+DEFUN __tablejump2__
+ lsl r30
+ rol r31
+ ;; FALLTHRU
+ENDF __tablejump2__
+
+DEFUN __tablejump__
+#if defined (__AVR_HAVE_LPMX__)
+ lpm __tmp_reg__, Z+
+ lpm r31, Z
+ mov r30, __tmp_reg__
+#if defined (__AVR_HAVE_EIJMP_EICALL__)
+ eijmp
+#else
+ ijmp
+#endif
+
+#else /* !HAVE_LPMX */
+ lpm
+ adiw r30, 1
+ push r0
+ lpm
+ push r0
+#if defined (__AVR_HAVE_EIJMP_EICALL__)
+ in __tmp_reg__, __EIND__
+ push __tmp_reg__
+#endif
+ ret
+#endif /* !HAVE_LPMX */
+ENDF __tablejump__
+#endif /* defined (L_tablejump) */
+
+#ifdef L_copy_data
+ .section .init4,"ax",@progbits
+DEFUN __do_copy_data
+#if defined(__AVR_HAVE_ELPMX__)
+ ldi r17, hi8(__data_end)
+ ldi r26, lo8(__data_start)
+ ldi r27, hi8(__data_start)
+ ldi r30, lo8(__data_load_start)
+ ldi r31, hi8(__data_load_start)
+ ldi r16, hh8(__data_load_start)
+ out __RAMPZ__, r16
+ rjmp .L__do_copy_data_start
+.L__do_copy_data_loop:
+ elpm r0, Z+
+ st X+, r0
+.L__do_copy_data_start:
+ cpi r26, lo8(__data_end)
+ cpc r27, r17
+ brne .L__do_copy_data_loop
+#elif !defined(__AVR_HAVE_ELPMX__) && defined(__AVR_HAVE_ELPM__)
+ ldi r17, hi8(__data_end)
+ ldi r26, lo8(__data_start)
+ ldi r27, hi8(__data_start)
+ ldi r30, lo8(__data_load_start)
+ ldi r31, hi8(__data_load_start)
+ ldi r16, hh8(__data_load_start - 0x10000)
+.L__do_copy_data_carry:
+ inc r16
+ out __RAMPZ__, r16
+ rjmp .L__do_copy_data_start
+.L__do_copy_data_loop:
+ elpm
+ st X+, r0
+ adiw r30, 1
+ brcs .L__do_copy_data_carry
+.L__do_copy_data_start:
+ cpi r26, lo8(__data_end)
+ cpc r27, r17
+ brne .L__do_copy_data_loop
+#elif !defined(__AVR_HAVE_ELPMX__) && !defined(__AVR_HAVE_ELPM__)
+ ldi r17, hi8(__data_end)
+ ldi r26, lo8(__data_start)
+ ldi r27, hi8(__data_start)
+ ldi r30, lo8(__data_load_start)
+ ldi r31, hi8(__data_load_start)
+ rjmp .L__do_copy_data_start
+.L__do_copy_data_loop:
+#if defined (__AVR_HAVE_LPMX__)
+ lpm r0, Z+
+#else
+ lpm
+ adiw r30, 1
+#endif
+ st X+, r0
+.L__do_copy_data_start:
+ cpi r26, lo8(__data_end)
+ cpc r27, r17
+ brne .L__do_copy_data_loop
+#endif /* !defined(__AVR_HAVE_ELPMX__) && !defined(__AVR_HAVE_ELPM__) */
+#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__)
+ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
+ out __RAMPZ__, __zero_reg__
+#endif /* ELPM && RAMPD */
+ENDF __do_copy_data
+#endif /* L_copy_data */
+
+/* __do_clear_bss is only necessary if there is anything in .bss section. */
+
+#ifdef L_clear_bss
+ .section .init4,"ax",@progbits
+DEFUN __do_clear_bss
+ ldi r17, hi8(__bss_end)
+ ldi r26, lo8(__bss_start)
+ ldi r27, hi8(__bss_start)
+ rjmp .do_clear_bss_start
+.do_clear_bss_loop:
+ st X+, __zero_reg__
+.do_clear_bss_start:
+ cpi r26, lo8(__bss_end)
+ cpc r27, r17
+ brne .do_clear_bss_loop
+ENDF __do_clear_bss
+#endif /* L_clear_bss */
+
+/* __do_global_ctors and __do_global_dtors are only necessary
+ if there are any constructors/destructors. */
+
+#ifdef L_ctors
+ .section .init6,"ax",@progbits
+DEFUN __do_global_ctors
+#if defined(__AVR_HAVE_ELPM__)
+ ldi r17, hi8(__ctors_start)
+ ldi r28, lo8(__ctors_end)
+ ldi r29, hi8(__ctors_end)
+ ldi r16, hh8(__ctors_end)
+ rjmp .L__do_global_ctors_start
+.L__do_global_ctors_loop:
+ sbiw r28, 2
+ sbc r16, __zero_reg__
+ mov_h r31, r29
+ mov_l r30, r28
+ out __RAMPZ__, r16
+ XCALL __tablejump_elpm__
+.L__do_global_ctors_start:
+ cpi r28, lo8(__ctors_start)
+ cpc r29, r17
+ ldi r24, hh8(__ctors_start)
+ cpc r16, r24
+ brne .L__do_global_ctors_loop
+#else
+ ldi r17, hi8(__ctors_start)
+ ldi r28, lo8(__ctors_end)
+ ldi r29, hi8(__ctors_end)
+ rjmp .L__do_global_ctors_start
+.L__do_global_ctors_loop:
+ sbiw r28, 2
+ mov_h r31, r29
+ mov_l r30, r28
+ XCALL __tablejump__
+.L__do_global_ctors_start:
+ cpi r28, lo8(__ctors_start)
+ cpc r29, r17
+ brne .L__do_global_ctors_loop
+#endif /* defined(__AVR_HAVE_ELPM__) */
+ENDF __do_global_ctors
+#endif /* L_ctors */
+
+#ifdef L_dtors
+ .section .fini6,"ax",@progbits
+DEFUN __do_global_dtors
+#if defined(__AVR_HAVE_ELPM__)
+ ldi r17, hi8(__dtors_end)
+ ldi r28, lo8(__dtors_start)
+ ldi r29, hi8(__dtors_start)
+ ldi r16, hh8(__dtors_start)
+ rjmp .L__do_global_dtors_start
+.L__do_global_dtors_loop:
+ sbiw r28, 2
+ sbc r16, __zero_reg__
+ mov_h r31, r29
+ mov_l r30, r28
+ out __RAMPZ__, r16
+ XCALL __tablejump_elpm__
+.L__do_global_dtors_start:
+ cpi r28, lo8(__dtors_end)
+ cpc r29, r17
+ ldi r24, hh8(__dtors_end)
+ cpc r16, r24
+ brne .L__do_global_dtors_loop
+#else
+ ldi r17, hi8(__dtors_end)
+ ldi r28, lo8(__dtors_start)
+ ldi r29, hi8(__dtors_start)
+ rjmp .L__do_global_dtors_start
+.L__do_global_dtors_loop:
+ mov_h r31, r29
+ mov_l r30, r28
+ XCALL __tablejump__
+ adiw r28, 2
+.L__do_global_dtors_start:
+ cpi r28, lo8(__dtors_end)
+ cpc r29, r17
+ brne .L__do_global_dtors_loop
+#endif /* defined(__AVR_HAVE_ELPM__) */
+ENDF __do_global_dtors
+#endif /* L_dtors */
+
+.section .text.libgcc, "ax", @progbits
+
+#ifdef L_tablejump_elpm
+DEFUN __tablejump_elpm__
+#if defined (__AVR_HAVE_ELPMX__)
+ elpm __tmp_reg__, Z+
+ elpm r31, Z
+ mov r30, __tmp_reg__
+#if defined (__AVR_HAVE_RAMPD__)
+ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
+ out __RAMPZ__, __zero_reg__
+#endif /* RAMPD */
+#if defined (__AVR_HAVE_EIJMP_EICALL__)
+ eijmp
+#else
+ ijmp
+#endif
+
+#elif defined (__AVR_HAVE_ELPM__)
+ elpm
+ adiw r30, 1
+ push r0
+ elpm
+ push r0
+#if defined (__AVR_HAVE_EIJMP_EICALL__)
+ in __tmp_reg__, __EIND__
+ push __tmp_reg__
+#endif
+ ret
+#endif
+ENDF __tablejump_elpm__
+#endif /* defined (L_tablejump_elpm) */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Loading n bytes from Flash; n = 3,4
+;; R22... = Flash[Z]
+;; Clobbers: __tmp_reg__
+
+#if (defined (L_load_3) \
+ || defined (L_load_4)) \
+ && !defined (__AVR_HAVE_LPMX__)
+
+;; Destination
+#define D0 22
+#define D1 D0+1
+#define D2 D0+2
+#define D3 D0+3
+
+.macro .load dest, n
+ lpm
+ mov \dest, r0
+.if \dest != D0+\n-1
+ adiw r30, 1
+.else
+ sbiw r30, \n-1
+.endif
+.endm
+
+#if defined (L_load_3)
+DEFUN __load_3
+ push D3
+ XCALL __load_4
+ pop D3
+ ret
+ENDF __load_3
+#endif /* L_load_3 */
+
+#if defined (L_load_4)
+DEFUN __load_4
+ .load D0, 4
+ .load D1, 4
+ .load D2, 4
+ .load D3, 4
+ ret
+ENDF __load_4
+#endif /* L_load_4 */
+
+#endif /* L_load_3 || L_load_3 */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Loading n bytes from Flash or RAM; n = 1,2,3,4
+;; R22... = Flash[R21:Z] or RAM[Z] depending on R21.7
+;; Clobbers: __tmp_reg__, R21, R30, R31
+
+#if (defined (L_xload_1) \
+ || defined (L_xload_2) \
+ || defined (L_xload_3) \
+ || defined (L_xload_4))
+
+;; Destination
+#define D0 22
+#define D1 D0+1
+#define D2 D0+2
+#define D3 D0+3
+
+;; Register containing bits 16+ of the address
+
+#define HHI8 21
+
+.macro .xload dest, n
+#if defined (__AVR_HAVE_ELPMX__)
+ elpm \dest, Z+
+#elif defined (__AVR_HAVE_ELPM__)
+ elpm
+ mov \dest, r0
+.if \dest != D0+\n-1
+ adiw r30, 1
+ adc HHI8, __zero_reg__
+ out __RAMPZ__, HHI8
+.endif
+#elif defined (__AVR_HAVE_LPMX__)
+ lpm \dest, Z+
+#else
+ lpm
+ mov \dest, r0
+.if \dest != D0+\n-1
+ adiw r30, 1
+.endif
+#endif
+#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__)
+.if \dest == D0+\n-1
+ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
+ out __RAMPZ__, __zero_reg__
+.endif
+#endif
+.endm ; .xload
+
+#if defined (L_xload_1)
+DEFUN __xload_1
+#if defined (__AVR_HAVE_LPMX__) && !defined (__AVR_HAVE_ELPM__)
+ sbrc HHI8, 7
+ ld D0, Z
+ sbrs HHI8, 7
+ lpm D0, Z
+ ret
+#else
+ sbrc HHI8, 7
+ rjmp 1f
+#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 1
+ ret
+1: ld D0, Z
+ ret
+#endif /* LPMx && ! ELPM */
+ENDF __xload_1
+#endif /* L_xload_1 */
+
+#if defined (L_xload_2)
+DEFUN __xload_2
+ sbrc HHI8, 7
+ rjmp 1f
+#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 2
+ .xload D1, 2
+ ret
+1: ld D0, Z+
+ ld D1, Z+
+ ret
+ENDF __xload_2
+#endif /* L_xload_2 */
+
+#if defined (L_xload_3)
+DEFUN __xload_3
+ sbrc HHI8, 7
+ rjmp 1f
+#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 3
+ .xload D1, 3
+ .xload D2, 3
+ ret
+1: ld D0, Z+
+ ld D1, Z+
+ ld D2, Z+
+ ret
+ENDF __xload_3
+#endif /* L_xload_3 */
+
+#if defined (L_xload_4)
+DEFUN __xload_4
+ sbrc HHI8, 7
+ rjmp 1f
+#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 4
+ .xload D1, 4
+ .xload D2, 4
+ .xload D3, 4
+ ret
+1: ld D0, Z+
+ ld D1, Z+
+ ld D2, Z+
+ ld D3, Z+
+ ret
+ENDF __xload_4
+#endif /* L_xload_4 */
+
+#endif /* L_xload_{1|2|3|4} */
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; memcopy from Address Space __pgmx to RAM
+;; R23:Z = Source Address
+;; X = Destination Address
+;; Clobbers: __tmp_reg__, R23, R24, R25, X, Z
+
+#if defined (L_movmemx)
+
+#define HHI8 23
+#define LOOP 24
+
+DEFUN __movmemx_qi
+ ;; #Bytes to copy fity in 8 Bits (1..255)
+ ;; Zero-extend Loop Counter
+ clr LOOP+1
+ ;; FALLTHRU
+ENDF __movmemx_qi
+
+DEFUN __movmemx_hi
+
+;; Read from where?
+ sbrc HHI8, 7
+ rjmp 1f
+
+;; Read from Flash
+
+#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+#endif
+
+0: ;; Load 1 Byte from Flash...
+
+#if defined (__AVR_HAVE_ELPMX__)
+ elpm r0, Z+
+#elif defined (__AVR_HAVE_ELPM__)
+ elpm
+ adiw r30, 1
+ adc HHI8, __zero_reg__
+ out __RAMPZ__, HHI8
+#elif defined (__AVR_HAVE_LPMX__)
+ lpm r0, Z+
+#else
+ lpm
+ adiw r30, 1
+#endif
+
+ ;; ...and store that Byte to RAM Destination
+ st X+, r0
+ sbiw LOOP, 1
+ brne 0b
+#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__)
+ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
+ out __RAMPZ__, __zero_reg__
+#endif /* ELPM && RAMPD */
+ ret
+
+;; Read from RAM
+
+1: ;; Read 1 Byte from RAM...
+ ld r0, Z+
+ ;; and store that Byte to RAM Destination
+ st X+, r0
+ sbiw LOOP, 1
+ brne 1b
+ ret
+ENDF __movmemx_hi
+
+#undef HHI8
+#undef LOOP
+
+#endif /* L_movmemx */
+
+
+.section .text.libgcc.builtins, "ax", @progbits
+
+/**********************************
+ * Find first set Bit (ffs)
+ **********************************/
+
+#if defined (L_ffssi2)
+;; find first set bit
+;; r25:r24 = ffs32 (r25:r22)
+;; clobbers: r22, r26
+DEFUN __ffssi2
+ clr r26
+ tst r22
+ brne 1f
+ subi r26, -8
+ or r22, r23
+ brne 1f
+ subi r26, -8
+ or r22, r24
+ brne 1f
+ subi r26, -8
+ or r22, r25
+ brne 1f
+ ret
+1: mov r24, r22
+ XJMP __loop_ffsqi2
+ENDF __ffssi2
+#endif /* defined (L_ffssi2) */
+
+#if defined (L_ffshi2)
+;; find first set bit
+;; r25:r24 = ffs16 (r25:r24)
+;; clobbers: r26
+DEFUN __ffshi2
+ clr r26
+#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+ ;; Some cores have problem skipping 2-word instruction
+ tst r24
+ breq 2f
+#else
+ cpse r24, __zero_reg__
+#endif /* __AVR_HAVE_JMP_CALL__ */
+1: XJMP __loop_ffsqi2
+2: ldi r26, 8
+ or r24, r25
+ brne 1b
+ ret
+ENDF __ffshi2
+#endif /* defined (L_ffshi2) */
+
+#if defined (L_loop_ffsqi2)
+;; Helper for ffshi2, ffssi2
+;; r25:r24 = r26 + zero_extend16 (ffs8(r24))
+;; r24 must be != 0
+;; clobbers: r26
+DEFUN __loop_ffsqi2
+ inc r26
+ lsr r24
+ brcc __loop_ffsqi2
+ mov r24, r26
+ clr r25
+ ret
+ENDF __loop_ffsqi2
+#endif /* defined (L_loop_ffsqi2) */
+
+
+/**********************************
+ * Count trailing Zeros (ctz)
+ **********************************/
+
+#if defined (L_ctzsi2)
+;; count trailing zeros
+;; r25:r24 = ctz32 (r25:r22)
+;; clobbers: r26, r22
+;; ctz(0) = 255
+;; Note that ctz(0) in undefined for GCC
+DEFUN __ctzsi2
+ XCALL __ffssi2
+ dec r24
+ ret
+ENDF __ctzsi2
+#endif /* defined (L_ctzsi2) */
+
+#if defined (L_ctzhi2)
+;; count trailing zeros
+;; r25:r24 = ctz16 (r25:r24)
+;; clobbers: r26
+;; ctz(0) = 255
+;; Note that ctz(0) in undefined for GCC
+DEFUN __ctzhi2
+ XCALL __ffshi2
+ dec r24
+ ret
+ENDF __ctzhi2
+#endif /* defined (L_ctzhi2) */
+
+
+/**********************************
+ * Count leading Zeros (clz)
+ **********************************/
+
+#if defined (L_clzdi2)
+;; count leading zeros
+;; r25:r24 = clz64 (r25:r18)
+;; clobbers: r22, r23, r26
+DEFUN __clzdi2
+ XCALL __clzsi2
+ sbrs r24, 5
+ ret
+ mov_l r22, r18
+ mov_h r23, r19
+ mov_l r24, r20
+ mov_h r25, r21
+ XCALL __clzsi2
+ subi r24, -32
+ ret
+ENDF __clzdi2
+#endif /* defined (L_clzdi2) */
+
+#if defined (L_clzsi2)
+;; count leading zeros
+;; r25:r24 = clz32 (r25:r22)
+;; clobbers: r26
+DEFUN __clzsi2
+ XCALL __clzhi2
+ sbrs r24, 4
+ ret
+ mov_l r24, r22
+ mov_h r25, r23
+ XCALL __clzhi2
+ subi r24, -16
+ ret
+ENDF __clzsi2
+#endif /* defined (L_clzsi2) */
+
+#if defined (L_clzhi2)
+;; count leading zeros
+;; r25:r24 = clz16 (r25:r24)
+;; clobbers: r26
+DEFUN __clzhi2
+ clr r26
+ tst r25
+ brne 1f
+ subi r26, -8
+ or r25, r24
+ brne 1f
+ ldi r24, 16
+ ret
+1: cpi r25, 16
+ brsh 3f
+ subi r26, -3
+ swap r25
+2: inc r26
+3: lsl r25
+ brcc 2b
+ mov r24, r26
+ clr r25
+ ret
+ENDF __clzhi2
+#endif /* defined (L_clzhi2) */
+
+
+/**********************************
+ * Parity
+ **********************************/
+
+#if defined (L_paritydi2)
+;; r25:r24 = parity64 (r25:r18)
+;; clobbers: __tmp_reg__
+DEFUN __paritydi2
+ eor r24, r18
+ eor r24, r19
+ eor r24, r20
+ eor r24, r21
+ XJMP __paritysi2
+ENDF __paritydi2
+#endif /* defined (L_paritydi2) */
+
+#if defined (L_paritysi2)
+;; r25:r24 = parity32 (r25:r22)
+;; clobbers: __tmp_reg__
+DEFUN __paritysi2
+ eor r24, r22
+ eor r24, r23
+ XJMP __parityhi2
+ENDF __paritysi2
+#endif /* defined (L_paritysi2) */
+
+#if defined (L_parityhi2)
+;; r25:r24 = parity16 (r25:r24)
+;; clobbers: __tmp_reg__
+DEFUN __parityhi2
+ eor r24, r25
+;; FALLTHRU
+ENDF __parityhi2
+
+;; r25:r24 = parity8 (r24)
+;; clobbers: __tmp_reg__
+DEFUN __parityqi2
+ ;; parity is in r24[0..7]
+ mov __tmp_reg__, r24
+ swap __tmp_reg__
+ eor r24, __tmp_reg__
+ ;; parity is in r24[0..3]
+ subi r24, -4
+ andi r24, -5
+ subi r24, -6
+ ;; parity is in r24[0,3]
+ sbrc r24, 3
+ inc r24
+ ;; parity is in r24[0]
+ andi r24, 1
+ clr r25
+ ret
+ENDF __parityqi2
+#endif /* defined (L_parityhi2) */
+
+
+/**********************************
+ * Population Count
+ **********************************/
+
+#if defined (L_popcounthi2)
+;; population count
+;; r25:r24 = popcount16 (r25:r24)
+;; clobbers: __tmp_reg__
+DEFUN __popcounthi2
+ XCALL __popcountqi2
+ push r24
+ mov r24, r25
+ XCALL __popcountqi2
+ clr r25
+ ;; FALLTHRU
+ENDF __popcounthi2
+
+DEFUN __popcounthi2_tail
+ pop __tmp_reg__
+ add r24, __tmp_reg__
+ ret
+ENDF __popcounthi2_tail
+#endif /* defined (L_popcounthi2) */
+
+#if defined (L_popcountsi2)
+;; population count
+;; r25:r24 = popcount32 (r25:r22)
+;; clobbers: __tmp_reg__
+DEFUN __popcountsi2
+ XCALL __popcounthi2
+ push r24
+ mov_l r24, r22
+ mov_h r25, r23
+ XCALL __popcounthi2
+ XJMP __popcounthi2_tail
+ENDF __popcountsi2
+#endif /* defined (L_popcountsi2) */
+
+#if defined (L_popcountdi2)
+;; population count
+;; r25:r24 = popcount64 (r25:r18)
+;; clobbers: r22, r23, __tmp_reg__
+DEFUN __popcountdi2
+ XCALL __popcountsi2
+ push r24
+ mov_l r22, r18
+ mov_h r23, r19
+ mov_l r24, r20
+ mov_h r25, r21
+ XCALL __popcountsi2
+ XJMP __popcounthi2_tail
+ENDF __popcountdi2
+#endif /* defined (L_popcountdi2) */
+
+#if defined (L_popcountqi2)
+;; population count
+;; r24 = popcount8 (r24)
+;; clobbers: __tmp_reg__
+DEFUN __popcountqi2
+ mov __tmp_reg__, r24
+ andi r24, 1
+ lsr __tmp_reg__
+ lsr __tmp_reg__
+ adc r24, __zero_reg__
+ lsr __tmp_reg__
+ adc r24, __zero_reg__
+ lsr __tmp_reg__
+ adc r24, __zero_reg__
+ lsr __tmp_reg__
+ adc r24, __zero_reg__
+ lsr __tmp_reg__
+ adc r24, __zero_reg__
+ lsr __tmp_reg__
+ adc r24, __tmp_reg__
+ ret
+ENDF __popcountqi2
+#endif /* defined (L_popcountqi2) */
+
+
+/**********************************
+ * Swap bytes
+ **********************************/
+
+;; swap two registers with different register number
+.macro bswap a, b
+ eor \a, \b
+ eor \b, \a
+ eor \a, \b
+.endm
+
+#if defined (L_bswapsi2)
+;; swap bytes
+;; r25:r22 = bswap32 (r25:r22)
+DEFUN __bswapsi2
+ bswap r22, r25
+ bswap r23, r24
+ ret
+ENDF __bswapsi2
+#endif /* defined (L_bswapsi2) */
+
+#if defined (L_bswapdi2)
+;; swap bytes
+;; r25:r18 = bswap64 (r25:r18)
+DEFUN __bswapdi2
+ bswap r18, r25
+ bswap r19, r24
+ bswap r20, r23
+ bswap r21, r22
+ ret
+ENDF __bswapdi2
+#endif /* defined (L_bswapdi2) */
+
+
+/**********************************
+ * 64-bit shifts
+ **********************************/
+
+#if defined (L_ashrdi3)
+;; Arithmetic shift right
+;; r25:r18 = ashr64 (r25:r18, r17:r16)
+DEFUN __ashrdi3
+ bst r25, 7
+ bld __zero_reg__, 0
+ ;; FALLTHRU
+ENDF __ashrdi3
+
+;; Logic shift right
+;; r25:r18 = lshr64 (r25:r18, r17:r16)
+DEFUN __lshrdi3
+ lsr __zero_reg__
+ sbc __tmp_reg__, __tmp_reg__
+ push r16
+0: cpi r16, 8
+ brlo 2f
+ subi r16, 8
+ mov r18, r19
+ mov r19, r20
+ mov r20, r21
+ mov r21, r22
+ mov r22, r23
+ mov r23, r24
+ mov r24, r25
+ mov r25, __tmp_reg__
+ rjmp 0b
+1: asr __tmp_reg__
+ ror r25
+ ror r24
+ ror r23
+ ror r22
+ ror r21
+ ror r20
+ ror r19
+ ror r18
+2: dec r16
+ brpl 1b
+ pop r16
+ ret
+ENDF __lshrdi3
+#endif /* defined (L_ashrdi3) */
+
+#if defined (L_ashldi3)
+;; Shift left
+;; r25:r18 = ashl64 (r25:r18, r17:r16)
+DEFUN __ashldi3
+ push r16
+0: cpi r16, 8
+ brlo 2f
+ mov r25, r24
+ mov r24, r23
+ mov r23, r22
+ mov r22, r21
+ mov r21, r20
+ mov r20, r19
+ mov r19, r18
+ clr r18
+ subi r16, 8
+ rjmp 0b
+1: lsl r18
+ rol r19
+ rol r20
+ rol r21
+ rol r22
+ rol r23
+ rol r24
+ rol r25
+2: dec r16
+ brpl 1b
+ pop r16
+ ret
+ENDF __ashldi3
+#endif /* defined (L_ashldi3) */
+
+#if defined (L_rotldi3)
+;; Shift left
+;; r25:r18 = rotl64 (r25:r18, r17:r16)
+DEFUN __rotldi3
+ push r16
+0: cpi r16, 8
+ brlo 2f
+ subi r16, 8
+ mov __tmp_reg__, r25
+ mov r25, r24
+ mov r24, r23
+ mov r23, r22
+ mov r22, r21
+ mov r21, r20
+ mov r20, r19
+ mov r19, r18
+ mov r18, __tmp_reg__
+ rjmp 0b
+1: lsl r18
+ rol r19
+ rol r20
+ rol r21
+ rol r22
+ rol r23
+ rol r24
+ rol r25
+ adc r18, __zero_reg__
+2: dec r16
+ brpl 1b
+ pop r16
+ ret
+ENDF __rotldi3
+#endif /* defined (L_rotldi3) */
+
+
+.section .text.libgcc.fmul, "ax", @progbits
+
+/***********************************************************/
+;;; Softmul versions of FMUL, FMULS and FMULSU to implement
+;;; __builtin_avr_fmul* if !AVR_HAVE_MUL
+/***********************************************************/
+
+#define A1 24
+#define B1 25
+#define C0 22
+#define C1 23
+#define A0 __tmp_reg__
+
+#ifdef L_fmuls
+;;; r23:r22 = fmuls (r24, r25) like in FMULS instruction
+;;; Clobbers: r24, r25, __tmp_reg__
+DEFUN __fmuls
+ ;; A0.7 = negate result?
+ mov A0, A1
+ eor A0, B1
+ ;; B1 = |B1|
+ sbrc B1, 7
+ neg B1
+ XJMP __fmulsu_exit
+ENDF __fmuls
+#endif /* L_fmuls */
+
+#ifdef L_fmulsu
+;;; r23:r22 = fmulsu (r24, r25) like in FMULSU instruction
+;;; Clobbers: r24, r25, __tmp_reg__
+DEFUN __fmulsu
+ ;; A0.7 = negate result?
+ mov A0, A1
+;; FALLTHRU
+ENDF __fmulsu
+
+;; Helper for __fmuls and __fmulsu
+DEFUN __fmulsu_exit
+ ;; A1 = |A1|
+ sbrc A1, 7
+ neg A1
+#ifdef __AVR_ERRATA_SKIP_JMP_CALL__
+ ;; Some cores have problem skipping 2-word instruction
+ tst A0
+ brmi 1f
+#else
+ sbrs A0, 7
+#endif /* __AVR_HAVE_JMP_CALL__ */
+ XJMP __fmul
+1: XCALL __fmul
+ ;; C = -C iff A0.7 = 1
+ NEG2 C0
+ ret
+ENDF __fmulsu_exit
+#endif /* L_fmulsu */
+
+
+#ifdef L_fmul
+;;; r22:r23 = fmul (r24, r25) like in FMUL instruction
+;;; Clobbers: r24, r25, __tmp_reg__
+DEFUN __fmul
+ ; clear result
+ clr C0
+ clr C1
+ clr A0
+1: tst B1
+ ;; 1.0 = 0x80, so test for bit 7 of B to see if A must to be added to C.
+2: brpl 3f
+ ;; C += A
+ add C0, A0
+ adc C1, A1
+3: ;; A >>= 1
+ lsr A1
+ ror A0
+ ;; B <<= 1
+ lsl B1
+ brne 2b
+ ret
+ENDF __fmul
+#endif /* L_fmul */
+
+#undef A0
+#undef A1
+#undef B1
+#undef C0
+#undef C1
+
+#include "lib1funcs-fixed.S"
diff --git a/gcc-4.9/libgcc/config/avr/lib2-object.mk b/gcc-4.9/libgcc/config/avr/lib2-object.mk
new file mode 100644
index 000000000..6a9e04de0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/lib2-object.mk
@@ -0,0 +1,23 @@
+# This file is included several times in a row, once for each element of
+# $(iter-items). On each inclusion, we advance $o to the next element.
+# $(iter-labels) and $(iter-flags) are also advanced.
+# This works similar to $(srcdir)/siditi-object.mk.
+
+o := $(firstword $(iter-items))
+iter-items := $(filter-out $o,$(iter-items))
+
+$o-label := $(firstword $(iter-labels))
+iter-labels := $(wordlist 2,$(words $(iter-labels)),$(iter-labels))
+
+$o-flag := $(firstword $(iter-flags))
+iter-flags := $(wordlist 2,$(words $(iter-flags)),$(iter-flags))
+
+$o$(objext): %$(objext): $(srcdir)/config/avr/lib2funcs.c
+ $(gcc_compile) -DL_$($*-label) -DL_LABEL=$($*-label) $($*-flag) \
+ -c $< $(vis_hide)
+
+ifeq ($(enable_shared),yes)
+$(o)_s$(objext): %_s$(objext): $(srcdir)/config/avr/lib2funcs.c
+ $(gcc_s_compile) -DL_$($*-label) -DL_LABEL=$($*-label) $($*-flag) \
+ -c $<
+endif
diff --git a/gcc-4.9/libgcc/config/avr/lib2funcs.c b/gcc-4.9/libgcc/config/avr/lib2funcs.c
new file mode 100644
index 000000000..774d14ced
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/lib2funcs.c
@@ -0,0 +1,226 @@
+/* Copyright (C) 2013-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+
+/* This file supplies implementations for some AVR-specific builtin
+ functions so that code like the following works as expected:
+
+ int (*f (void))(_Fract)
+ {
+ return __builtin_avr_countlsr;
+ }
+
+ In this specific case, the generated code is:
+
+ f:
+ ldi r24,lo8(gs(__countlsHI))
+ ldi r25,hi8(gs(__countlsHI))
+ ret
+*/
+
+/* Map fixed-point suffix to the corresponding fixed-point type. */
+
+typedef short _Fract fx_hr_t;
+typedef _Fract fx_r_t;
+typedef long _Fract fx_lr_t;
+typedef long long _Fract fx_llr_t;
+
+typedef unsigned short _Fract fx_uhr_t;
+typedef unsigned _Fract fx_ur_t;
+typedef unsigned long _Fract fx_ulr_t;
+typedef unsigned long long _Fract fx_ullr_t;
+
+typedef short _Accum fx_hk_t;
+typedef _Accum fx_k_t;
+typedef long _Accum fx_lk_t;
+typedef long long _Accum fx_llk_t;
+
+typedef unsigned short _Accum fx_uhk_t;
+typedef unsigned _Accum fx_uk_t;
+typedef unsigned long _Accum fx_ulk_t;
+typedef unsigned long long _Accum fx_ullk_t;
+
+/* Map fixed-point suffix to the corresponding natural integer type. */
+
+typedef char int_hr_t;
+typedef int int_r_t;
+typedef long int_lr_t;
+typedef long long int_llr_t;
+
+typedef unsigned char int_uhr_t;
+typedef unsigned int int_ur_t;
+typedef unsigned long int_ulr_t;
+typedef unsigned long long int_ullr_t;
+
+typedef int int_hk_t;
+typedef long int_k_t;
+typedef long long int_lk_t;
+typedef long long int_llk_t;
+
+typedef unsigned int int_uhk_t;
+typedef unsigned long int_uk_t;
+typedef unsigned long long int_ulk_t;
+typedef unsigned long long int_ullk_t;
+
+/* Map mode to the corresponding integer type. */
+
+typedef char int_qi_t;
+typedef int int_hi_t;
+typedef long int_si_t;
+typedef long long int_di_t;
+
+typedef unsigned char uint_qi_t;
+typedef unsigned int uint_hi_t;
+typedef unsigned long uint_si_t;
+typedef unsigned long long uint_di_t;
+
+
+
+/************************************************************************/
+
+/* Supply implementations / symbols for __builtin_roundFX ASM_NAME. */
+
+#ifdef L_round
+
+#define ROUND1(FX) \
+ ROUND2 (FX)
+
+#define ROUND2(FX) \
+ extern fx_## FX ##_t __round## FX (fx_## FX ##_t x, int rpoint); \
+ \
+ fx_## FX ##_t \
+ __round## FX (fx_## FX ##_t x, int rpoint) \
+ { \
+ return __builtin_avr_round ##FX (x, rpoint); \
+ }
+
+ROUND1(L_LABEL)
+
+#endif /* L_round */
+
+
+
+/*********************************************************************/
+
+/* Implement some count-leading-redundant-sign-bits to be used with
+ coundlsFX implementation. */
+
+#ifdef L__clrsbqi
+extern int __clrsbqi2 (char x);
+
+int
+__clrsbqi2 (char x)
+{
+ int ret;
+
+ if (x < 0)
+ x = ~x;
+
+ if (x == 0)
+ return 8 * sizeof (x) -1;
+
+ ret = __builtin_clz (x << 8);
+ return ret - 1;
+}
+#endif /* L__clrsbqi */
+
+
+#ifdef L__clrsbdi
+extern int __clrsbdi2 (long long x);
+
+int
+__clrsbdi2 (long long x)
+{
+ int ret;
+
+ if (x < 0LL)
+ x = ~x;
+
+ if (x == 0LL)
+ return 8 * sizeof (x) -1;
+
+ ret = __builtin_clzll ((unsigned long long) x);
+ return ret - 1;
+}
+#endif /* L__clrsbdi */
+
+
+
+/*********************************************************************/
+
+/* Supply implementations / symbols for __builtin_avr_countlsFX. */
+
+/* Signed */
+
+#ifdef L_countls
+
+#define COUNTLS1(MM) \
+ COUNTLS2 (MM)
+
+#define COUNTLS2(MM) \
+ extern int __countls## MM ##2 (int_## MM ##_t); \
+ extern int __clrsb## MM ##2 (int_## MM ##_t); \
+ \
+ int \
+ __countls## MM ##2 (int_## MM ##_t x) \
+ { \
+ if (x == 0) \
+ return __INT8_MAX__; \
+ \
+ return __clrsb## MM ##2 (x); \
+ }
+
+COUNTLS1(L_LABEL)
+
+#endif /* L_countls */
+
+/* Unsigned */
+
+#ifdef L_countlsu
+
+#define clz_qi2 __builtin_clz /* unused, avoid warning */
+#define clz_hi2 __builtin_clz
+#define clz_si2 __builtin_clzl
+#define clz_di2 __builtin_clzll
+
+#define COUNTLS1(MM) \
+ COUNTLS2 (MM)
+
+#define COUNTLS2(MM) \
+ extern int __countlsu## MM ##2 (uint_## MM ##_t); \
+ \
+ int \
+ __countlsu## MM ##2 (uint_## MM ##_t x) \
+ { \
+ if (x == 0) \
+ return __INT8_MAX__; \
+ \
+ if (sizeof (x) == 1) \
+ return clz_hi2 (x << 8); \
+ else \
+ return clz_## MM ##2 (x); \
+ }
+
+COUNTLS1(L_LABEL)
+
+#endif /* L_countlsu */
diff --git a/gcc-4.9/libgcc/config/avr/t-avr b/gcc-4.9/libgcc/config/avr/t-avr
new file mode 100644
index 000000000..461304706
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/t-avr
@@ -0,0 +1,277 @@
+LIB1ASMSRC = avr/lib1funcs.S
+LIB1ASMFUNCS = \
+ _mulqi3 \
+ _mulhi3 \
+ _mulqihi3 _umulqihi3 \
+ _mulpsi3 _mulsqipsi3 \
+ _mulhisi3 \
+ _umulhisi3 \
+ _usmulhisi3 \
+ _muluhisi3 \
+ _mulshisi3 \
+ _mulsi3 \
+ _udivmodqi4 \
+ _divmodqi4 \
+ _udivmodhi4 \
+ _divmodhi4 \
+ _divmodpsi4 _udivmodpsi4 \
+ _udivmodsi4 \
+ _divmodsi4 \
+ _divdi3 _udivdi3 \
+ _muldi3 _muldi3_6 \
+ _mulsidi3 _umulsidi3 \
+ _udivmod64 \
+ _negsi2 _negdi2 \
+ _prologue \
+ _epilogue \
+ _exit \
+ _cleanup \
+ _tablejump \
+ _tablejump_elpm \
+ _load_3 _load_4 \
+ _xload_1 _xload_2 _xload_3 _xload_4 \
+ _movmemx \
+ _copy_data \
+ _clear_bss \
+ _ctors \
+ _dtors \
+ _ffssi2 \
+ _ffshi2 \
+ _loop_ffsqi2 \
+ _ctzsi2 \
+ _ctzhi2 \
+ _clzdi2 \
+ _clzsi2 \
+ _clzhi2 \
+ _paritydi2 \
+ _paritysi2 \
+ _parityhi2 \
+ _popcounthi2 \
+ _popcountsi2 \
+ _popcountdi2 \
+ _popcountqi2 \
+ _bswapsi2 \
+ _bswapdi2 \
+ _ashldi3 _ashrdi3 _lshrdi3 _rotldi3 \
+ _adddi3 _adddi3_s8 _subdi3 \
+ _cmpdi2 _cmpdi2_s8 \
+ _fmul _fmuls _fmulsu
+
+# Fixed point routines in avr/lib1funcs-fixed.S
+LIB1ASMFUNCS += \
+ _fractqqsf _fractuqqsf \
+ _fracthqsf _fractuhqsf _fracthasf _fractuhasf \
+ _fractsasf _fractusasf _fractsqsf _fractusqsf \
+ \
+ _fractsfqq _fractsfuqq \
+ _fractsfhq _fractsfuhq _fractsfha _fractsfuha \
+ _fractsfsq _fractsfusq _fractsfsa _fractsfusa \
+ _mulqq3 \
+ _mulhq3 _muluhq3 \
+ _mulha3 _muluha3 _muluha3_round \
+ _mulsa3 _mulusa3 \
+ _usmuluha3 _ssmulha3 \
+ _usmulusa3 _ssmulsa3 \
+ _divqq3 _udivuqq3 _divqq_helper \
+ _divhq3 _udivuhq3 \
+ _divha3 _udivuha3 \
+ _divsa3 _udivusa3 \
+ _clr_8 \
+ _ssneg_2 _ssneg_4 _ssneg_8 \
+ _ssabs_1 _ssabs_2 _ssabs_4 _ssabs_8 \
+ _ssadd_8 _sssub_8 \
+ _usadd_8 _ussub_8 \
+ _mask1 _ret \
+ _roundqq3 _rounduqq3 \
+ _round_s2 _round_u2 _round_2_const _addmask_2 \
+ _round_s4 _round_u4 _round_4_const _addmask_4 \
+ _round_x8 \
+ _rounddq3 _roundudq3 \
+ _roundda3 _rounduda3 \
+ _roundta3 _rounduta3 \
+
+
+LIB2FUNCS_EXCLUDE = \
+ _moddi3 _umoddi3 \
+ _clz \
+ _clrsbdi2 \
+
+
+# We do not have the DF type.
+# Most of the C functions in libgcc2 use almost all registers,
+# so use -mcall-prologues for smaller code size.
+HOST_LIBGCC2_CFLAGS += -DDF=SF -Dinhibit_libc -mcall-prologues -Os
+
+# Extra 16-bit integer functions.
+intfuncs16 = _absvXX2 _addvXX3 _subvXX3 _mulvXX3 _negvXX2 _clrsbXX2
+
+hiintfuncs16 = $(subst XX,hi,$(intfuncs16))
+siintfuncs16 = $(subst XX,si,$(intfuncs16))
+
+iter-items := $(hiintfuncs16)
+iter-labels := $(siintfuncs16)
+iter-sizes := $(patsubst %,2,$(siintfuncs16)) $(patsubst %,2,$(hiintfuncs16))
+
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items))
+libgcc-objects += $(patsubst %,%$(objext),$(hiintfuncs16))
+
+ifeq ($(enable_shared),yes)
+libgcc-s-objects += $(patsubst %,%_s$(objext),$(hiintfuncs16))
+endif
+
+###
+
+conv_XY=$(conv)$(mode1)$(mode2)
+func_X=$(func)$(mode)
+
+# Compile C functions from lib2funcs.c and add them to libgcc.a.
+#
+# Some functions which are not performance.critical are more convenient
+# to implement in C than in assembler. Most of them serve as implementation
+# for AVR-specific builtins in the case where the address of a builtin
+# function is taken or if there is no insn that implements the builtin.
+#
+# We don't use LIB2ADD because we want to iterate over the source for
+# different modes, fixed-point suffixes, etc. See iter-labels and L_LABEL.
+# iter-label will get one more underscore in order to avoid too short
+# labels like -DLk and we use -DL_k instead.
+
+# Build roundFX functions from lib2funcs.c
+
+round_suffix := hr r lr uhr ur ulr \
+ hk k uhk uk
+round_funcs := $(foreach func,_round,\
+ $(foreach mode,$(round_suffix),$(func_X)))
+
+iter-items := $(round_funcs)
+iter-labels := $(round_suffix)
+iter-flags := $(patsubst %,-DL_round,$(iter-items))
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items))
+
+libgcc-objects += $(patsubst %,%$(objext),$(round_funcs))
+
+# Build clrsbXX functions from lib2funcs.c
+
+clrsb_modes := qi di
+clrsb_funcs := $(foreach func,_clrsb,\
+ $(foreach mode,$(clrsb_modes),$(func_X)))
+
+iter-items := $(clrsb_funcs)
+iter-labels := $(clrsb_funcs)
+iter-flags := $(patsubst %,-DL_clrsb,$(iter-items))
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items))
+
+libgcc-objects += $(patsubst %,%$(objext),$(clrsb_funcs))
+
+# Build signed countlsFX functions from lib2funcs.c
+
+countls_modes := qi hi si di
+countls_funcs := $(foreach func,_countls,\
+ $(foreach mode,$(countls_modes),$(func_X)))
+
+iter-items := $(countls_funcs)
+iter-labels := $(countls_modes)
+iter-flags := $(patsubst %,-DL_countls,$(iter-items))
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items))
+
+libgcc-objects += $(patsubst %,%$(objext),$(countls_funcs))
+
+# Build unsigned countlsFX functions from lib2funcs.c
+
+countlsu_modes := qi hi si di
+countlsu_funcs := $(foreach func,_countlsu,\
+ $(foreach mode,$(countlsu_modes),$(func_X)))
+
+iter-items := $(countlsu_funcs)
+iter-labels := $(countlsu_modes)
+iter-flags := $(patsubst %,-DL_countlsu,$(iter-items))
+
+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/config/avr/lib2-object.mk,$(iter-items))
+
+libgcc-objects += $(patsubst %,%$(objext),$(countlsu_funcs))
+
+
+# Filter out supported conversions from fixed-bit.c
+# Also filter out TQ and UTQ.
+
+# Conversions supported by the compiler
+
+convf_modes = QI UQI QQ UQQ \
+ HI UHI HQ UHQ HA UHA \
+ SI USI SQ USQ SA USA \
+ DI UDI DQ UDQ DA UDA \
+ TI UTI TQ UTQ TA UTA
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach conv,_fract _fractuns,\
+ $(foreach mode1,$(convf_modes),\
+ $(foreach mode2,$(convf_modes),$(conv_XY))))
+
+# Conversions supported by lib1funcs-fixed.S
+
+conv_to_sf_modes = QQ UQQ HQ UHQ HA UHA SQ USQ SA USA
+conv_from_sf_modes = QQ UQQ HQ UHQ HA UHA SA USA
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach conv,_fract, \
+ $(foreach mode1,$(conv_to_sf_modes), \
+ $(foreach mode2,SF,$(conv_XY))))
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach conv,_fract,\
+ $(foreach mode1,SF,\
+ $(foreach mode2,$(conv_from_sf_modes),$(conv_XY))))
+
+# Arithmetik supported by the compiler
+
+allfix_modes = QQ UQQ HQ UHQ HA UHA SQ USQ SA USA DA UDA DQ UDQ TQ UTQ TA UTA
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_add _sub,\
+ $(foreach mode,$(allfix_modes),$(func_X)))
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_lshr _ashl _ashr _cmp,\
+ $(foreach mode,$(allfix_modes),$(func_X)))
+
+
+usat_modes = UQQ UHQ UHA USQ USA UDQ UDA UTQ UTA
+ssat_modes = QQ HQ HA SQ SA DQ DA TQ TA
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_ssadd _sssub _ssneg _ssabs,\
+ $(foreach mode,$(ssat_modes),$(func_X)))
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_usadd _ussub _usneg,\
+ $(foreach mode,$(usat_modes),$(func_X)))
+
+
+smul_modes = QQ HQ HA SA
+umul_modes = UQQ UHQ UHA USA
+sdiv_modes = QQ HQ HA SA
+udiv_modes = UQQ UHQ UHA USA
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_mul,\
+ $(foreach mode,$(smul_modes) $(umul_modes),$(func_X)))
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_div,\
+ $(foreach mode,$(sdiv_modes) $(udiv_modes),$(func_X)))
+
+
+ssmul_modes = HA SA
+usmul_modes = UHA USA
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_usmul,\
+ $(foreach mode,$(usmul_modes),$(func_X)))
+
+LIB2FUNCS_EXCLUDE += \
+ $(foreach func,_ssmul,\
+ $(foreach mode,$(ssmul_modes),$(func_X)))
diff --git a/gcc-4.9/libgcc/config/avr/t-avrlibc b/gcc-4.9/libgcc/config/avr/t-avrlibc
new file mode 100644
index 000000000..d2c8b870a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/t-avrlibc
@@ -0,0 +1,66 @@
+# This file is used if not configured --with-avrlibc=no
+#
+# AVR-Libc comes with hand-optimized float routines.
+# For historical reasons, these routines live in AVR-Libc
+# and not in libgcc and use the same function names like libgcc.
+# To get the best support, i.e. always use the routines from
+# AVR-Libc, we remove these routines from libgcc.
+#
+# See also PR54461.
+#
+#
+# Arithmetic:
+# __addsf3 __subsf3 __divsf3 __mulsf3 __negsf2
+#
+# Comparison:
+# __cmpsf2 __unordsf2
+# __eqsf2 __lesf2 __ltsf2 __nesf2 __gesf2 __gtsf2
+#
+# Conversion:
+# __fixsfdi __fixunssfdi __floatdisf __floatundisf
+# __fixsfsi __fixunssfsi __floatsisf __floatunsisf
+#
+#
+# These functions are contained in modules:
+#
+# _addsub_sf.o: __addsf3 __subsf3
+# _mul_sf.o: __mulsf3
+# _div_sf.o: __divsf3
+# _negate_sf.o: __negsf2
+#
+# _compare_sf.o: __cmpsf2
+# _unord_sf.o: __unordsf2
+# _eq_sf.o: __eqsf2
+# _ne_sf.o: __nesf2
+# _ge_sf.o: __gesf2
+# _gt_sf.o: __gtsf2
+# _le_sf.o: __lesf2
+# _lt_sf.o: __ltsf2
+#
+# _fixsfdi.o: __fixsfdi
+# _fixunssfdi.o: __fixunssfdi
+# _fixunssfsi.o: __fixunssfsi
+# _floatdisf.o: __floatdisf
+# _floatundisf.o: __floatundisf
+# _sf_to_si.o: __fixsfsi
+# _si_to_sf.o: __floatsisf
+# _usi_to_sf.o: __floatunsisf
+
+
+# SFmode
+LIB2FUNCS_EXCLUDE += \
+ _addsub_sf \
+ _negate_sf \
+ _mul_sf _div_sf \
+ \
+ _compare_sf \
+ _unord_sf \
+ _eq_sf _ne_sf \
+ _gt_sf _ge_sf \
+ _lt_sf _le_sf \
+ \
+ _si_to_sf _sf_to_si \
+ _usi_to_sf _sf_to_usi \
+ _fixunssfsi _fixsfdi \
+ _fixunssfdi \
+ _floatdisf _floatundisf
diff --git a/gcc-4.9/libgcc/config/avr/t-rtems b/gcc-4.9/libgcc/config/avr/t-rtems
new file mode 100644
index 000000000..43b57ee32
--- /dev/null
+++ b/gcc-4.9/libgcc/config/avr/t-rtems
@@ -0,0 +1,2 @@
+# RTEMS uses _exit from newlib
+LIB1ASMFUNCS := $(filter-out _exit,$(LIB1ASMFUNCS))
diff --git a/gcc-4.9/libgcc/config/bfin/crti.S b/gcc-4.9/libgcc/config/bfin/crti.S
new file mode 100644
index 000000000..b46e102a8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/crti.S
@@ -0,0 +1,59 @@
+/* Specialized code needed to support construction and destruction of
+ file-scope objects in C++ and Java code, and to support exception handling.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Analog Devices.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * This file just supplies function prologues for the .init and .fini
+ * sections. It is linked in before crtbegin.o.
+ */
+
+ .ident "GNU C crti.o"
+
+ .section .init
+ .globl __init
+ .type __init,@function
+__init:
+#if defined __ID_SHARED_LIB__
+ [--SP] = P5;
+#elif defined __BFIN_FDPIC__
+ [--SP] = P3;
+#endif
+ LINK 12;
+#if defined __ID_SHARED_LIB__
+ P5 = [P5 + _current_shared_library_p5_offset_]
+#endif
+ .section .fini
+ .globl __fini
+ .type __fini,@function
+__fini:
+#if defined __ID_SHARED_LIB__
+ [--SP] = P5;
+#elif defined __BFIN_FDPIC__
+ [--SP] = P3;
+#endif
+ LINK 12;
+#if defined __ID_SHARED_LIB__
+ P5 = [P5 + _current_shared_library_p5_offset_]
+#endif
diff --git a/gcc-4.9/libgcc/config/bfin/crtlibid.S b/gcc-4.9/libgcc/config/bfin/crtlibid.S
new file mode 100644
index 000000000..a821a0a7f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/crtlibid.S
@@ -0,0 +1,29 @@
+/* Provide a weak definition of the library ID, for the benefit of certain
+ configure scripts.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+ .ident "GNU C crtlibid.o"
+
+.weak _current_shared_library_p5_offset_
+.set _current_shared_library_p5_offset_, 0
diff --git a/gcc-4.9/libgcc/config/bfin/crtn.S b/gcc-4.9/libgcc/config/bfin/crtn.S
new file mode 100644
index 000000000..270e1e72d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/crtn.S
@@ -0,0 +1,50 @@
+/* Specialized code needed to support construction and destruction of
+ file-scope objects in C++ and Java code, and to support exception handling.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Analog Devices.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * This file supplies function epilogues for the .init and .fini sections.
+ * It is linked in after all other files.
+ */
+
+ .ident "GNU C crtn.o"
+
+ .section .init
+ unlink;
+#if defined __ID_SHARED_LIB__
+ P5 = [SP++];
+#elif defined __BFIN_FDPIC__
+ P3 = [SP++];
+#endif
+ rts;
+
+ .section .fini
+ unlink;
+#if defined __ID_SHARED_LIB__
+ P5 = [SP++];
+#elif defined __BFIN_FDPIC__
+ P3 = [SP++];
+#endif
+ rts;
diff --git a/gcc-4.9/libgcc/config/bfin/lib1funcs.S b/gcc-4.9/libgcc/config/bfin/lib1funcs.S
new file mode 100644
index 000000000..45c6ac8b9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/lib1funcs.S
@@ -0,0 +1,211 @@
+/* libgcc functions for Blackfin.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Analog Devices.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef L_divsi3
+.text
+.align 2
+.global ___divsi3;
+.type ___divsi3, STT_FUNC;
+
+___divsi3:
+ [--SP]= RETS;
+ [--SP] = R7;
+
+ R2 = -R0;
+ CC = R0 < 0;
+ IF CC R0 = R2;
+ R7 = CC;
+
+ R2 = -R1;
+ CC = R1 < 0;
+ IF CC R1 = R2;
+ R2 = CC;
+ R7 = R7 ^ R2;
+
+ CALL ___udivsi3;
+
+ CC = R7;
+ R1 = -R0;
+ IF CC R0 = R1;
+
+ R7 = [SP++];
+ RETS = [SP++];
+ RTS;
+#endif
+
+#ifdef L_modsi3
+.align 2
+.global ___modsi3;
+.type ___modsi3, STT_FUNC;
+
+___modsi3:
+ [--SP] = RETS;
+ [--SP] = R0;
+ [--SP] = R1;
+ CALL ___divsi3;
+ R2 = [SP++];
+ R1 = [SP++];
+ R2 *= R0;
+ R0 = R1 - R2;
+ RETS = [SP++];
+ RTS;
+#endif
+
+#ifdef L_udivsi3
+.align 2
+.global ___udivsi3;
+.type ___udivsi3, STT_FUNC;
+
+___udivsi3:
+ P0 = 32;
+ LSETUP (0f, 1f) LC0 = P0;
+ /* upper half of dividend */
+ R3 = 0;
+0:
+ /* The first time round in the loop we shift in garbage, but since we
+ perform 33 shifts, it doesn't matter. */
+ R0 = ROT R0 BY 1;
+ R3 = ROT R3 BY 1;
+ R2 = R3 - R1;
+ CC = R3 < R1 (IU);
+1:
+ /* Last instruction of the loop. */
+ IF ! CC R3 = R2;
+
+ /* Shift in the last bit. */
+ R0 = ROT R0 BY 1;
+ /* R0 is the result, R3 contains the remainder. */
+ R0 = ~ R0;
+ RTS;
+#endif
+
+#ifdef L_umodsi3
+.align 2
+.global ___umodsi3;
+.type ___umodsi3, STT_FUNC;
+
+___umodsi3:
+ [--SP] = RETS;
+ CALL ___udivsi3;
+ R0 = R3;
+ RETS = [SP++];
+ RTS;
+#endif
+
+#ifdef L_umulsi3_highpart
+.align 2
+.global ___umulsi3_highpart;
+.type ___umulsi3_highpart, STT_FUNC;
+
+___umulsi3_highpart:
+ A1 = R1.L * R0.L (FU);
+ A1 = A1 >> 16;
+ A0 = R1.H * R0.H, A1 += R1.L * R0.H (FU);
+ A1 += R0.L * R1.H (FU);
+ A1 = A1 >> 16;
+ A0 += A1;
+ R0 = A0 (FU);
+ RTS;
+#endif
+
+#ifdef L_smulsi3_highpart
+.align 2
+.global ___smulsi3_highpart;
+.type ___smulsi3_highpart, STT_FUNC;
+
+___smulsi3_highpart:
+ A1 = R1.L * R0.L (FU);
+ A1 = A1 >> 16;
+ A0 = R0.H * R1.H, A1 += R0.H * R1.L (IS,M);
+ A1 += R1.H * R0.L (IS,M);
+ A1 = A1 >>> 16;
+ R0 = (A0 += A1);
+ RTS;
+#endif
+
+#ifdef L_muldi3
+.align 2
+.global ___muldi3;
+.type ___muldi3, STT_FUNC;
+
+/*
+ R1:R0 * R3:R2
+ = R1.h:R1.l:R0.h:R0.l * R3.h:R3.l:R2.h:R2.l
+[X] = (R1.h * R3.h) * 2^96
+[X] + (R1.h * R3.l + R1.l * R3.h) * 2^80
+[X] + (R1.h * R2.h + R1.l * R3.l + R3.h * R0.h) * 2^64
+[T1] + (R1.h * R2.l + R3.h * R0.l + R1.l * R2.h + R3.l * R0.h) * 2^48
+[T2] + (R1.l * R2.l + R3.l * R0.l + R0.h * R2.h) * 2^32
+[T3] + (R0.l * R2.h + R2.l * R0.h) * 2^16
+[T4] + (R0.l * R2.l)
+
+ We can discard the first three lines marked "X" since we produce
+ only a 64 bit result. So, we need ten 16-bit multiplies.
+
+ Individual mul-acc results:
+[E1] = R1.h * R2.l + R3.h * R0.l + R1.l * R2.h + R3.l * R0.h
+[E2] = R1.l * R2.l + R3.l * R0.l + R0.h * R2.h
+[E3] = R0.l * R2.h + R2.l * R0.h
+[E4] = R0.l * R2.l
+
+ We also need to add high parts from lower-level results to higher ones:
+ E[n]c = E[n] + (E[n+1]c >> 16), where E4c := E4
+
+ One interesting property is that all parts of the result that depend
+ on the sign of the multiplication are discarded. Those would be the
+ multiplications involving R1.h and R3.h, but only the top 16 bit of
+ the 32 bit result depend on the sign, and since R1.h and R3.h only
+ occur in E1, the top half of these results is cut off.
+ So, we can just use FU mode for all of the 16-bit multiplies, and
+ ignore questions of when to use mixed mode. */
+
+___muldi3:
+ /* [SP] technically is part of the caller's frame, but we can
+ use it as scratch space. */
+ A0 = R2.H * R1.L, A1 = R2.L * R1.H (FU) || R3 = [SP + 12]; /* E1 */
+ A0 += R3.H * R0.L, A1 += R3.L * R0.H (FU) || [SP] = R4; /* E1 */
+ A0 += A1; /* E1 */
+ R4 = A0.w;
+ A0 = R0.l * R3.l (FU); /* E2 */
+ A0 += R2.l * R1.l (FU); /* E2 */
+
+ A1 = R2.L * R0.L (FU); /* E4 */
+ R3 = A1.w;
+ A1 = A1 >> 16; /* E3c */
+ A0 += R2.H * R0.H, A1 += R2.L * R0.H (FU); /* E2, E3c */
+ A1 += R0.L * R2.H (FU); /* E3c */
+ R0 = A1.w;
+ A1 = A1 >> 16; /* E2c */
+ A0 += A1; /* E2c */
+ R1 = A0.w;
+
+ /* low(result) = low(E3c):low(E4) */
+ R0 = PACK (R0.l, R3.l);
+ /* high(result) = E2c + (E1 << 16) */
+ R1.h = R1.h + R4.l (NS) || R4 = [SP];
+ RTS;
+
+.size ___muldi3, .-___muldi3
+#endif
diff --git a/gcc-4.9/libgcc/config/bfin/libgcc-glibc.ver b/gcc-4.9/libgcc/config/bfin/libgcc-glibc.ver
new file mode 100644
index 000000000..e8cbadd99
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/libgcc-glibc.ver
@@ -0,0 +1,1913 @@
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_3.0 {
+ # libgcc1 integer symbols
+ ___absvsi2
+ ___addvsi3
+ ___ashlsi3
+ ___ashrsi3
+ ___divsi3
+ ___lshrsi3
+ ___modsi3
+ ___mulsi3
+ ___mulvsi3
+ ___negvsi2
+ ___subvsi3
+ ___udivsi3
+ ___umodsi3
+
+ # libgcc1 floating point symbols
+ ___addsf3
+ ___adddf3
+ ___addxf3
+ ___addtf3
+ ___divsf3
+ ___divdf3
+ ___divxf3
+ ___divtf3
+ ___eqsf2
+ ___eqdf2
+ ___eqxf2
+ ___eqtf2
+ ___extenddfxf2
+ ___extenddftf2
+ ___extendsfdf2
+ ___extendsfxf2
+ ___extendsftf2
+ ___fixsfsi
+ ___fixdfsi
+ ___fixxfsi
+ ___fixtfsi
+ ___floatsisf
+ ___floatsidf
+ ___floatsixf
+ ___floatsitf
+ ___gesf2
+ ___gedf2
+ ___gexf2
+ ___getf2
+ ___gtsf2
+ ___gtdf2
+ ___gtxf2
+ ___gttf2
+ ___lesf2
+ ___ledf2
+ ___lexf2
+ ___letf2
+ ___ltsf2
+ ___ltdf2
+ ___ltxf2
+ ___lttf2
+ ___mulsf3
+ ___muldf3
+ ___mulxf3
+ ___multf3
+ ___negsf2
+ ___negdf2
+ ___negxf2
+ ___negtf2
+ ___nesf2
+ ___nedf2
+ ___nexf2
+ ___netf2
+ ___subsf3
+ ___subdf3
+ ___subxf3
+ ___subtf3
+ ___truncdfsf2
+ ___truncxfsf2
+ ___trunctfsf2
+ ___truncxfdf2
+ ___trunctfdf2
+
+ # libgcc2 DImode arithmetic (for 32-bit targets).
+ ___absvdi2
+ ___addvdi3
+ ___ashldi3
+ ___ashrdi3
+ ___cmpdi2
+ ___divdi3
+ ___ffsdi2
+ ___fixdfdi
+ ___fixsfdi
+ ___fixtfdi
+ ___fixxfdi
+ ___fixunsdfdi
+ ___fixunsdfsi
+ ___fixunssfsi
+ ___fixunssfdi
+ ___fixunstfdi
+ ___fixunstfsi
+ ___fixunsxfdi
+ ___fixunsxfsi
+ ___floatdidf
+ ___floatdisf
+ ___floatdixf
+ ___floatditf
+ ___lshrdi3
+ ___moddi3
+ ___muldi3
+ ___mulvdi3
+ ___negdi2
+ ___negvdi2
+ ___subvdi3
+ ___ucmpdi2
+ ___udivdi3
+ ___udivmoddi4
+ ___umoddi3
+
+ # libgcc2 TImode arithmetic (for 64-bit targets).
+ ___ashlti3
+ ___ashrti3
+ ___cmpti2
+ ___divti3
+ ___ffsti2
+ ___fixdfti
+ ___fixsfti
+ ___fixtfti
+ ___fixxfti
+ ___lshrti3
+ ___modti3
+ ___multi3
+ ___negti2
+ ___ucmpti2
+ ___udivmodti4
+ ___udivti3
+ ___umodti3
+ ___fixunsdfti
+ ___fixunssfti
+ ___fixunstfti
+ ___fixunsxfti
+ ___floattidf
+ ___floattisf
+ ___floattixf
+ ___floattitf
+
+ # Used to deal with trampoline initialization on some platforms
+ ___clear_cache
+
+ # EH symbols
+ __Unwind_DeleteException
+ __Unwind_Find_FDE
+ __Unwind_ForcedUnwind
+ __Unwind_GetGR
+ __Unwind_GetIP
+ __Unwind_GetLanguageSpecificData
+ __Unwind_GetRegionStart
+ __Unwind_GetTextRelBase
+ __Unwind_GetDataRelBase
+ __Unwind_RaiseException
+ __Unwind_Resume
+ __Unwind_SetGR
+ __Unwind_SetIP
+ ___deregister_frame
+ ___deregister_frame_info
+ ___deregister_frame_info_bases
+ ___register_frame
+ ___register_frame_info
+ ___register_frame_info_bases
+ ___register_frame_info_table
+ ___register_frame_info_table_bases
+ ___register_frame_table
+
+ # SjLj EH symbols
+ __Unwind_SjLj_Register
+ __Unwind_SjLj_Unregister
+ __Unwind_SjLj_RaiseException
+ __Unwind_SjLj_ForcedUnwind
+ __Unwind_SjLj_Resume
+}
+
+%inherit GCC_3.3 GCC_3.0
+GCC_3.3 {
+ __Unwind_FindEnclosingFunction
+ __Unwind_GetCFA
+ __Unwind_Backtrace
+ __Unwind_Resume_or_Rethrow
+ __Unwind_SjLj_Resume_or_Rethrow
+}
+
+%inherit GCC_3.3.1 GCC_3.3
+GCC_3.3.1 {
+ ___gcc_personality_sj0
+ ___gcc_personality_v0
+}
+
+%inherit GCC_3.3.2 GCC_3.3.1
+GCC_3.3.2 {
+}
+%inherit GCC_3.3.4 GCC_3.3.2
+GCC_3.3.4 {
+ ___unorddf2
+ ___unordsf2
+}
+
+%inherit GCC_3.4 GCC_3.3.4
+GCC_3.4 {
+ # bit scanning and counting built-ins
+ ___clzsi2
+ ___clzdi2
+ ___clzti2
+ ___ctzsi2
+ ___ctzdi2
+ ___ctzti2
+ ___popcountsi2
+ ___popcountdi2
+ ___popcountti2
+ ___paritysi2
+ ___paritydi2
+ ___parityti2
+}
+
+%inherit GCC_3.4.2 GCC_3.4
+GCC_3.4.2 {
+ # Used to deal with trampoline initialization on some platforms
+ ___enable_execute_stack
+ ___trampoline_setup
+}
+
+%inherit GCC_3.4.4 GCC_3.4.2
+GCC_3.4.4 {
+ # libgcc2 TImode arithmetic (for 64-bit targets).
+ ___absvti2
+ ___addvti3
+ ___mulvti3
+ ___negvti2
+ ___subvti3
+}
+
+%inherit GCC_4.0.0 GCC_3.4.4
+GCC_4.0.0 {
+ # libgcc2 __builtin_powi helpers.
+ ___powisf2
+ ___powidf2
+ ___powixf2
+ ___powitf2
+
+ # c99 compliant complex arithmetic
+ ___divsc3
+ ___divdc3
+ ___divxc3
+ ___divtc3
+ ___mulsc3
+ ___muldc3
+ ___mulxc3
+ ___multc3
+}
+
+%inherit GCC_4.1.0 GCC_4.0.0
+GCC_4.1.0 {
+ ___smulsi3_highpart
+ ___umulsi3_highpart
+}
+
+%inherit GCC_4.2.0 GCC_4.1.0
+GCC_4.2.0 {
+ # unsigned-to-floating conversions
+ ___floatunsisf
+ ___floatunsidf
+ ___floatunsixf
+ ___floatunsitf
+ ___floatundidf
+ ___floatundisf
+ ___floatundixf
+ ___floatunditf
+ ___floatuntidf
+ ___floatuntisf
+ ___floatuntixf
+ ___floatuntitf
+ __Unwind_GetIPInfo
+}
+
+%inherit GCC_4.3.0 GCC_4.2.0
+GCC_4.3.0 {
+ # byte swapping routines
+ ___bswapsi2
+ ___bswapdi2
+ ___emutls_get_address
+ ___emutls_register_common
+ ___ffssi2
+ ___extendxftf2
+ ___trunctfxf2
+
+ # fixed-point routines
+ ___addqq3
+ ___addhq3
+ ___addsq3
+ ___adddq3
+ ___addtq3
+ ___adduqq3
+ ___adduhq3
+ ___addusq3
+ ___addudq3
+ ___addutq3
+ ___addha3
+ ___addsa3
+ ___addda3
+ ___addta3
+ ___adduha3
+ ___addusa3
+ ___adduda3
+ ___adduta3
+ ___ssaddqq3
+ ___ssaddhq3
+ ___ssaddsq3
+ ___ssadddq3
+ ___ssaddtq3
+ ___ssaddha3
+ ___ssaddsa3
+ ___ssaddda3
+ ___ssaddta3
+ ___usadduqq3
+ ___usadduhq3
+ ___usaddusq3
+ ___usaddudq3
+ ___usaddutq3
+ ___usadduha3
+ ___usaddusa3
+ ___usadduda3
+ ___usadduta3
+ ___subqq3
+ ___subhq3
+ ___subsq3
+ ___subdq3
+ ___subtq3
+ ___subuqq3
+ ___subuhq3
+ ___subusq3
+ ___subudq3
+ ___subutq3
+ ___subha3
+ ___subsa3
+ ___subda3
+ ___subta3
+ ___subuha3
+ ___subusa3
+ ___subuda3
+ ___subuta3
+ ___sssubqq3
+ ___sssubhq3
+ ___sssubsq3
+ ___sssubdq3
+ ___sssubtq3
+ ___sssubha3
+ ___sssubsa3
+ ___sssubda3
+ ___sssubta3
+ ___ussubuqq3
+ ___ussubuhq3
+ ___ussubusq3
+ ___ussubudq3
+ ___ussubutq3
+ ___ussubuha3
+ ___ussubusa3
+ ___ussubuda3
+ ___ussubuta3
+ ___mulqq3
+ ___mulhq3
+ ___mulsq3
+ ___muldq3
+ ___multq3
+ ___muluqq3
+ ___muluhq3
+ ___mulusq3
+ ___muludq3
+ ___mulutq3
+ ___mulha3
+ ___mulsa3
+ ___mulda3
+ ___multa3
+ ___muluha3
+ ___mulusa3
+ ___muluda3
+ ___muluta3
+ ___ssmulqq3
+ ___ssmulhq3
+ ___ssmulsq3
+ ___ssmuldq3
+ ___ssmultq3
+ ___ssmulha3
+ ___ssmulsa3
+ ___ssmulda3
+ ___ssmulta3
+ ___usmuluqq3
+ ___usmuluhq3
+ ___usmulusq3
+ ___usmuludq3
+ ___usmulutq3
+ ___usmuluha3
+ ___usmulusa3
+ ___usmuluda3
+ ___usmuluta3
+ ___divqq3
+ ___divhq3
+ ___divsq3
+ ___divdq3
+ ___divtq3
+ ___divha3
+ ___divsa3
+ ___divda3
+ ___divta3
+ ___udivuqq3
+ ___udivuhq3
+ ___udivusq3
+ ___udivudq3
+ ___udivutq3
+ ___udivuha3
+ ___udivusa3
+ ___udivuda3
+ ___udivuta3
+ ___ssdivqq3
+ ___ssdivhq3
+ ___ssdivsq3
+ ___ssdivdq3
+ ___ssdivtq3
+ ___ssdivha3
+ ___ssdivsa3
+ ___ssdivda3
+ ___ssdivta3
+ ___usdivuqq3
+ ___usdivuhq3
+ ___usdivusq3
+ ___usdivudq3
+ ___usdivutq3
+ ___usdivuha3
+ ___usdivusa3
+ ___usdivuda3
+ ___usdivuta3
+ ___negqq2
+ ___neghq2
+ ___negsq2
+ ___negdq2
+ ___negtq2
+ ___neguqq2
+ ___neguhq2
+ ___negusq2
+ ___negudq2
+ ___negutq2
+ ___negha2
+ ___negsa2
+ ___negda2
+ ___negta2
+ ___neguha2
+ ___negusa2
+ ___neguda2
+ ___neguta2
+ ___ssnegqq2
+ ___ssneghq2
+ ___ssnegsq2
+ ___ssnegdq2
+ ___ssnegtq2
+ ___ssnegha2
+ ___ssnegsa2
+ ___ssnegda2
+ ___ssnegta2
+ ___usneguqq2
+ ___usneguhq2
+ ___usnegusq2
+ ___usnegudq2
+ ___usnegutq2
+ ___usneguha2
+ ___usnegusa2
+ ___usneguda2
+ ___usneguta2
+ ___ashlqq3
+ ___ashlhq3
+ ___ashlsq3
+ ___ashldq3
+ ___ashltq3
+ ___ashluqq3
+ ___ashluhq3
+ ___ashlusq3
+ ___ashludq3
+ ___ashlutq3
+ ___ashlha3
+ ___ashlsa3
+ ___ashlda3
+ ___ashlta3
+ ___ashluha3
+ ___ashlusa3
+ ___ashluda3
+ ___ashluta3
+ ___ashrqq3
+ ___ashrhq3
+ ___ashrsq3
+ ___ashrdq3
+ ___ashrtq3
+ ___ashrha3
+ ___ashrsa3
+ ___ashrda3
+ ___ashrta3
+ ___lshruqq3
+ ___lshruhq3
+ ___lshrusq3
+ ___lshrudq3
+ ___lshrutq3
+ ___lshruha3
+ ___lshrusa3
+ ___lshruda3
+ ___lshruta3
+ ___ssashlqq3
+ ___ssashlhq3
+ ___ssashlsq3
+ ___ssashldq3
+ ___ssashltq3
+ ___ssashlha3
+ ___ssashlsa3
+ ___ssashlda3
+ ___ssashlta3
+ ___usashluqq3
+ ___usashluhq3
+ ___usashlusq3
+ ___usashludq3
+ ___usashlutq3
+ ___usashluha3
+ ___usashlusa3
+ ___usashluda3
+ ___usashluta3
+ ___cmpqq2
+ ___cmphq2
+ ___cmpsq2
+ ___cmpdq2
+ ___cmptq2
+ ___cmpuqq2
+ ___cmpuhq2
+ ___cmpusq2
+ ___cmpudq2
+ ___cmputq2
+ ___cmpha2
+ ___cmpsa2
+ ___cmpda2
+ ___cmpta2
+ ___cmpuha2
+ ___cmpusa2
+ ___cmpuda2
+ ___cmputa2
+ ___fractqqhq2
+ ___fractqqsq2
+ ___fractqqdq2
+ ___fractqqtq2
+ ___fractqqha
+ ___fractqqsa
+ ___fractqqda
+ ___fractqqta
+ ___fractqquqq
+ ___fractqquhq
+ ___fractqqusq
+ ___fractqqudq
+ ___fractqqutq
+ ___fractqquha
+ ___fractqqusa
+ ___fractqquda
+ ___fractqquta
+ ___fractqqqi
+ ___fractqqhi
+ ___fractqqsi
+ ___fractqqdi
+ ___fractqqti
+ ___fractqqsf
+ ___fractqqdf
+ ___fracthqqq2
+ ___fracthqsq2
+ ___fracthqdq2
+ ___fracthqtq2
+ ___fracthqha
+ ___fracthqsa
+ ___fracthqda
+ ___fracthqta
+ ___fracthquqq
+ ___fracthquhq
+ ___fracthqusq
+ ___fracthqudq
+ ___fracthqutq
+ ___fracthquha
+ ___fracthqusa
+ ___fracthquda
+ ___fracthquta
+ ___fracthqqi
+ ___fracthqhi
+ ___fracthqsi
+ ___fracthqdi
+ ___fracthqti
+ ___fracthqsf
+ ___fracthqdf
+ ___fractsqqq2
+ ___fractsqhq2
+ ___fractsqdq2
+ ___fractsqtq2
+ ___fractsqha
+ ___fractsqsa
+ ___fractsqda
+ ___fractsqta
+ ___fractsquqq
+ ___fractsquhq
+ ___fractsqusq
+ ___fractsqudq
+ ___fractsqutq
+ ___fractsquha
+ ___fractsqusa
+ ___fractsquda
+ ___fractsquta
+ ___fractsqqi
+ ___fractsqhi
+ ___fractsqsi
+ ___fractsqdi
+ ___fractsqti
+ ___fractsqsf
+ ___fractsqdf
+ ___fractdqqq2
+ ___fractdqhq2
+ ___fractdqsq2
+ ___fractdqtq2
+ ___fractdqha
+ ___fractdqsa
+ ___fractdqda
+ ___fractdqta
+ ___fractdquqq
+ ___fractdquhq
+ ___fractdqusq
+ ___fractdqudq
+ ___fractdqutq
+ ___fractdquha
+ ___fractdqusa
+ ___fractdquda
+ ___fractdquta
+ ___fractdqqi
+ ___fractdqhi
+ ___fractdqsi
+ ___fractdqdi
+ ___fractdqti
+ ___fractdqsf
+ ___fractdqdf
+ ___fracttqqq2
+ ___fracttqhq2
+ ___fracttqsq2
+ ___fracttqdq2
+ ___fracttqha
+ ___fracttqsa
+ ___fracttqda
+ ___fracttqta
+ ___fracttquqq
+ ___fracttquhq
+ ___fracttqusq
+ ___fracttqudq
+ ___fracttqutq
+ ___fracttquha
+ ___fracttqusa
+ ___fracttquda
+ ___fracttquta
+ ___fracttqqi
+ ___fracttqhi
+ ___fracttqsi
+ ___fracttqdi
+ ___fracttqti
+ ___fracttqsf
+ ___fracttqdf
+ ___fracthaqq
+ ___fracthahq
+ ___fracthasq
+ ___fracthadq
+ ___fracthatq
+ ___fracthasa2
+ ___fracthada2
+ ___fracthata2
+ ___fracthauqq
+ ___fracthauhq
+ ___fracthausq
+ ___fracthaudq
+ ___fracthautq
+ ___fracthauha
+ ___fracthausa
+ ___fracthauda
+ ___fracthauta
+ ___fracthaqi
+ ___fracthahi
+ ___fracthasi
+ ___fracthadi
+ ___fracthati
+ ___fracthasf
+ ___fracthadf
+ ___fractsaqq
+ ___fractsahq
+ ___fractsasq
+ ___fractsadq
+ ___fractsatq
+ ___fractsaha2
+ ___fractsada2
+ ___fractsata2
+ ___fractsauqq
+ ___fractsauhq
+ ___fractsausq
+ ___fractsaudq
+ ___fractsautq
+ ___fractsauha
+ ___fractsausa
+ ___fractsauda
+ ___fractsauta
+ ___fractsaqi
+ ___fractsahi
+ ___fractsasi
+ ___fractsadi
+ ___fractsati
+ ___fractsasf
+ ___fractsadf
+ ___fractdaqq
+ ___fractdahq
+ ___fractdasq
+ ___fractdadq
+ ___fractdatq
+ ___fractdaha2
+ ___fractdasa2
+ ___fractdata2
+ ___fractdauqq
+ ___fractdauhq
+ ___fractdausq
+ ___fractdaudq
+ ___fractdautq
+ ___fractdauha
+ ___fractdausa
+ ___fractdauda
+ ___fractdauta
+ ___fractdaqi
+ ___fractdahi
+ ___fractdasi
+ ___fractdadi
+ ___fractdati
+ ___fractdasf
+ ___fractdadf
+ ___fracttaqq
+ ___fracttahq
+ ___fracttasq
+ ___fracttadq
+ ___fracttatq
+ ___fracttaha2
+ ___fracttasa2
+ ___fracttada2
+ ___fracttauqq
+ ___fracttauhq
+ ___fracttausq
+ ___fracttaudq
+ ___fracttautq
+ ___fracttauha
+ ___fracttausa
+ ___fracttauda
+ ___fracttauta
+ ___fracttaqi
+ ___fracttahi
+ ___fracttasi
+ ___fracttadi
+ ___fracttati
+ ___fracttasf
+ ___fracttadf
+ ___fractuqqqq
+ ___fractuqqhq
+ ___fractuqqsq
+ ___fractuqqdq
+ ___fractuqqtq
+ ___fractuqqha
+ ___fractuqqsa
+ ___fractuqqda
+ ___fractuqqta
+ ___fractuqquhq2
+ ___fractuqqusq2
+ ___fractuqqudq2
+ ___fractuqqutq2
+ ___fractuqquha
+ ___fractuqqusa
+ ___fractuqquda
+ ___fractuqquta
+ ___fractuqqqi
+ ___fractuqqhi
+ ___fractuqqsi
+ ___fractuqqdi
+ ___fractuqqti
+ ___fractuqqsf
+ ___fractuqqdf
+ ___fractuhqqq
+ ___fractuhqhq
+ ___fractuhqsq
+ ___fractuhqdq
+ ___fractuhqtq
+ ___fractuhqha
+ ___fractuhqsa
+ ___fractuhqda
+ ___fractuhqta
+ ___fractuhquqq2
+ ___fractuhqusq2
+ ___fractuhqudq2
+ ___fractuhqutq2
+ ___fractuhquha
+ ___fractuhqusa
+ ___fractuhquda
+ ___fractuhquta
+ ___fractuhqqi
+ ___fractuhqhi
+ ___fractuhqsi
+ ___fractuhqdi
+ ___fractuhqti
+ ___fractuhqsf
+ ___fractuhqdf
+ ___fractusqqq
+ ___fractusqhq
+ ___fractusqsq
+ ___fractusqdq
+ ___fractusqtq
+ ___fractusqha
+ ___fractusqsa
+ ___fractusqda
+ ___fractusqta
+ ___fractusquqq2
+ ___fractusquhq2
+ ___fractusqudq2
+ ___fractusqutq2
+ ___fractusquha
+ ___fractusqusa
+ ___fractusquda
+ ___fractusquta
+ ___fractusqqi
+ ___fractusqhi
+ ___fractusqsi
+ ___fractusqdi
+ ___fractusqti
+ ___fractusqsf
+ ___fractusqdf
+ ___fractudqqq
+ ___fractudqhq
+ ___fractudqsq
+ ___fractudqdq
+ ___fractudqtq
+ ___fractudqha
+ ___fractudqsa
+ ___fractudqda
+ ___fractudqta
+ ___fractudquqq2
+ ___fractudquhq2
+ ___fractudqusq2
+ ___fractudqutq2
+ ___fractudquha
+ ___fractudqusa
+ ___fractudquda
+ ___fractudquta
+ ___fractudqqi
+ ___fractudqhi
+ ___fractudqsi
+ ___fractudqdi
+ ___fractudqti
+ ___fractudqsf
+ ___fractudqdf
+ ___fractutqqq
+ ___fractutqhq
+ ___fractutqsq
+ ___fractutqdq
+ ___fractutqtq
+ ___fractutqha
+ ___fractutqsa
+ ___fractutqda
+ ___fractutqta
+ ___fractutquqq2
+ ___fractutquhq2
+ ___fractutqusq2
+ ___fractutqudq2
+ ___fractutquha
+ ___fractutqusa
+ ___fractutquda
+ ___fractutquta
+ ___fractutqqi
+ ___fractutqhi
+ ___fractutqsi
+ ___fractutqdi
+ ___fractutqti
+ ___fractutqsf
+ ___fractutqdf
+ ___fractuhaqq
+ ___fractuhahq
+ ___fractuhasq
+ ___fractuhadq
+ ___fractuhatq
+ ___fractuhaha
+ ___fractuhasa
+ ___fractuhada
+ ___fractuhata
+ ___fractuhauqq
+ ___fractuhauhq
+ ___fractuhausq
+ ___fractuhaudq
+ ___fractuhautq
+ ___fractuhausa2
+ ___fractuhauda2
+ ___fractuhauta2
+ ___fractuhaqi
+ ___fractuhahi
+ ___fractuhasi
+ ___fractuhadi
+ ___fractuhati
+ ___fractuhasf
+ ___fractuhadf
+ ___fractusaqq
+ ___fractusahq
+ ___fractusasq
+ ___fractusadq
+ ___fractusatq
+ ___fractusaha
+ ___fractusasa
+ ___fractusada
+ ___fractusata
+ ___fractusauqq
+ ___fractusauhq
+ ___fractusausq
+ ___fractusaudq
+ ___fractusautq
+ ___fractusauha2
+ ___fractusauda2
+ ___fractusauta2
+ ___fractusaqi
+ ___fractusahi
+ ___fractusasi
+ ___fractusadi
+ ___fractusati
+ ___fractusasf
+ ___fractusadf
+ ___fractudaqq
+ ___fractudahq
+ ___fractudasq
+ ___fractudadq
+ ___fractudatq
+ ___fractudaha
+ ___fractudasa
+ ___fractudada
+ ___fractudata
+ ___fractudauqq
+ ___fractudauhq
+ ___fractudausq
+ ___fractudaudq
+ ___fractudautq
+ ___fractudauha2
+ ___fractudausa2
+ ___fractudauta2
+ ___fractudaqi
+ ___fractudahi
+ ___fractudasi
+ ___fractudadi
+ ___fractudati
+ ___fractudasf
+ ___fractudadf
+ ___fractutaqq
+ ___fractutahq
+ ___fractutasq
+ ___fractutadq
+ ___fractutatq
+ ___fractutaha
+ ___fractutasa
+ ___fractutada
+ ___fractutata
+ ___fractutauqq
+ ___fractutauhq
+ ___fractutausq
+ ___fractutaudq
+ ___fractutautq
+ ___fractutauha2
+ ___fractutausa2
+ ___fractutauda2
+ ___fractutaqi
+ ___fractutahi
+ ___fractutasi
+ ___fractutadi
+ ___fractutati
+ ___fractutasf
+ ___fractutadf
+ ___fractqiqq
+ ___fractqihq
+ ___fractqisq
+ ___fractqidq
+ ___fractqitq
+ ___fractqiha
+ ___fractqisa
+ ___fractqida
+ ___fractqita
+ ___fractqiuqq
+ ___fractqiuhq
+ ___fractqiusq
+ ___fractqiudq
+ ___fractqiutq
+ ___fractqiuha
+ ___fractqiusa
+ ___fractqiuda
+ ___fractqiuta
+ ___fracthiqq
+ ___fracthihq
+ ___fracthisq
+ ___fracthidq
+ ___fracthitq
+ ___fracthiha
+ ___fracthisa
+ ___fracthida
+ ___fracthita
+ ___fracthiuqq
+ ___fracthiuhq
+ ___fracthiusq
+ ___fracthiudq
+ ___fracthiutq
+ ___fracthiuha
+ ___fracthiusa
+ ___fracthiuda
+ ___fracthiuta
+ ___fractsiqq
+ ___fractsihq
+ ___fractsisq
+ ___fractsidq
+ ___fractsitq
+ ___fractsiha
+ ___fractsisa
+ ___fractsida
+ ___fractsita
+ ___fractsiuqq
+ ___fractsiuhq
+ ___fractsiusq
+ ___fractsiudq
+ ___fractsiutq
+ ___fractsiuha
+ ___fractsiusa
+ ___fractsiuda
+ ___fractsiuta
+ ___fractdiqq
+ ___fractdihq
+ ___fractdisq
+ ___fractdidq
+ ___fractditq
+ ___fractdiha
+ ___fractdisa
+ ___fractdida
+ ___fractdita
+ ___fractdiuqq
+ ___fractdiuhq
+ ___fractdiusq
+ ___fractdiudq
+ ___fractdiutq
+ ___fractdiuha
+ ___fractdiusa
+ ___fractdiuda
+ ___fractdiuta
+ ___fracttiqq
+ ___fracttihq
+ ___fracttisq
+ ___fracttidq
+ ___fracttitq
+ ___fracttiha
+ ___fracttisa
+ ___fracttida
+ ___fracttita
+ ___fracttiuqq
+ ___fracttiuhq
+ ___fracttiusq
+ ___fracttiudq
+ ___fracttiutq
+ ___fracttiuha
+ ___fracttiusa
+ ___fracttiuda
+ ___fracttiuta
+ ___fractsfqq
+ ___fractsfhq
+ ___fractsfsq
+ ___fractsfdq
+ ___fractsftq
+ ___fractsfha
+ ___fractsfsa
+ ___fractsfda
+ ___fractsfta
+ ___fractsfuqq
+ ___fractsfuhq
+ ___fractsfusq
+ ___fractsfudq
+ ___fractsfutq
+ ___fractsfuha
+ ___fractsfusa
+ ___fractsfuda
+ ___fractsfuta
+ ___fractdfqq
+ ___fractdfhq
+ ___fractdfsq
+ ___fractdfdq
+ ___fractdftq
+ ___fractdfha
+ ___fractdfsa
+ ___fractdfda
+ ___fractdfta
+ ___fractdfuqq
+ ___fractdfuhq
+ ___fractdfusq
+ ___fractdfudq
+ ___fractdfutq
+ ___fractdfuha
+ ___fractdfusa
+ ___fractdfuda
+ ___fractdfuta
+ ___satfractqqhq2
+ ___satfractqqsq2
+ ___satfractqqdq2
+ ___satfractqqtq2
+ ___satfractqqha
+ ___satfractqqsa
+ ___satfractqqda
+ ___satfractqqta
+ ___satfractqquqq
+ ___satfractqquhq
+ ___satfractqqusq
+ ___satfractqqudq
+ ___satfractqqutq
+ ___satfractqquha
+ ___satfractqqusa
+ ___satfractqquda
+ ___satfractqquta
+ ___satfracthqqq2
+ ___satfracthqsq2
+ ___satfracthqdq2
+ ___satfracthqtq2
+ ___satfracthqha
+ ___satfracthqsa
+ ___satfracthqda
+ ___satfracthqta
+ ___satfracthquqq
+ ___satfracthquhq
+ ___satfracthqusq
+ ___satfracthqudq
+ ___satfracthqutq
+ ___satfracthquha
+ ___satfracthqusa
+ ___satfracthquda
+ ___satfracthquta
+ ___satfractsqqq2
+ ___satfractsqhq2
+ ___satfractsqdq2
+ ___satfractsqtq2
+ ___satfractsqha
+ ___satfractsqsa
+ ___satfractsqda
+ ___satfractsqta
+ ___satfractsquqq
+ ___satfractsquhq
+ ___satfractsqusq
+ ___satfractsqudq
+ ___satfractsqutq
+ ___satfractsquha
+ ___satfractsqusa
+ ___satfractsquda
+ ___satfractsquta
+ ___satfractdqqq2
+ ___satfractdqhq2
+ ___satfractdqsq2
+ ___satfractdqtq2
+ ___satfractdqha
+ ___satfractdqsa
+ ___satfractdqda
+ ___satfractdqta
+ ___satfractdquqq
+ ___satfractdquhq
+ ___satfractdqusq
+ ___satfractdqudq
+ ___satfractdqutq
+ ___satfractdquha
+ ___satfractdqusa
+ ___satfractdquda
+ ___satfractdquta
+ ___satfracttqqq2
+ ___satfracttqhq2
+ ___satfracttqsq2
+ ___satfracttqdq2
+ ___satfracttqha
+ ___satfracttqsa
+ ___satfracttqda
+ ___satfracttqta
+ ___satfracttquqq
+ ___satfracttquhq
+ ___satfracttqusq
+ ___satfracttqudq
+ ___satfracttqutq
+ ___satfracttquha
+ ___satfracttqusa
+ ___satfracttquda
+ ___satfracttquta
+ ___satfracthaqq
+ ___satfracthahq
+ ___satfracthasq
+ ___satfracthadq
+ ___satfracthatq
+ ___satfracthasa2
+ ___satfracthada2
+ ___satfracthata2
+ ___satfracthauqq
+ ___satfracthauhq
+ ___satfracthausq
+ ___satfracthaudq
+ ___satfracthautq
+ ___satfracthauha
+ ___satfracthausa
+ ___satfracthauda
+ ___satfracthauta
+ ___satfractsaqq
+ ___satfractsahq
+ ___satfractsasq
+ ___satfractsadq
+ ___satfractsatq
+ ___satfractsaha2
+ ___satfractsada2
+ ___satfractsata2
+ ___satfractsauqq
+ ___satfractsauhq
+ ___satfractsausq
+ ___satfractsaudq
+ ___satfractsautq
+ ___satfractsauha
+ ___satfractsausa
+ ___satfractsauda
+ ___satfractsauta
+ ___satfractdaqq
+ ___satfractdahq
+ ___satfractdasq
+ ___satfractdadq
+ ___satfractdatq
+ ___satfractdaha2
+ ___satfractdasa2
+ ___satfractdata2
+ ___satfractdauqq
+ ___satfractdauhq
+ ___satfractdausq
+ ___satfractdaudq
+ ___satfractdautq
+ ___satfractdauha
+ ___satfractdausa
+ ___satfractdauda
+ ___satfractdauta
+ ___satfracttaqq
+ ___satfracttahq
+ ___satfracttasq
+ ___satfracttadq
+ ___satfracttatq
+ ___satfracttaha2
+ ___satfracttasa2
+ ___satfracttada2
+ ___satfracttauqq
+ ___satfracttauhq
+ ___satfracttausq
+ ___satfracttaudq
+ ___satfracttautq
+ ___satfracttauha
+ ___satfracttausa
+ ___satfracttauda
+ ___satfracttauta
+ ___satfractuqqqq
+ ___satfractuqqhq
+ ___satfractuqqsq
+ ___satfractuqqdq
+ ___satfractuqqtq
+ ___satfractuqqha
+ ___satfractuqqsa
+ ___satfractuqqda
+ ___satfractuqqta
+ ___satfractuqquhq2
+ ___satfractuqqusq2
+ ___satfractuqqudq2
+ ___satfractuqqutq2
+ ___satfractuqquha
+ ___satfractuqqusa
+ ___satfractuqquda
+ ___satfractuqquta
+ ___satfractuhqqq
+ ___satfractuhqhq
+ ___satfractuhqsq
+ ___satfractuhqdq
+ ___satfractuhqtq
+ ___satfractuhqha
+ ___satfractuhqsa
+ ___satfractuhqda
+ ___satfractuhqta
+ ___satfractuhquqq2
+ ___satfractuhqusq2
+ ___satfractuhqudq2
+ ___satfractuhqutq2
+ ___satfractuhquha
+ ___satfractuhqusa
+ ___satfractuhquda
+ ___satfractuhquta
+ ___satfractusqqq
+ ___satfractusqhq
+ ___satfractusqsq
+ ___satfractusqdq
+ ___satfractusqtq
+ ___satfractusqha
+ ___satfractusqsa
+ ___satfractusqda
+ ___satfractusqta
+ ___satfractusquqq2
+ ___satfractusquhq2
+ ___satfractusqudq2
+ ___satfractusqutq2
+ ___satfractusquha
+ ___satfractusqusa
+ ___satfractusquda
+ ___satfractusquta
+ ___satfractudqqq
+ ___satfractudqhq
+ ___satfractudqsq
+ ___satfractudqdq
+ ___satfractudqtq
+ ___satfractudqha
+ ___satfractudqsa
+ ___satfractudqda
+ ___satfractudqta
+ ___satfractudquqq2
+ ___satfractudquhq2
+ ___satfractudqusq2
+ ___satfractudqutq2
+ ___satfractudquha
+ ___satfractudqusa
+ ___satfractudquda
+ ___satfractudquta
+ ___satfractutqqq
+ ___satfractutqhq
+ ___satfractutqsq
+ ___satfractutqdq
+ ___satfractutqtq
+ ___satfractutqha
+ ___satfractutqsa
+ ___satfractutqda
+ ___satfractutqta
+ ___satfractutquqq2
+ ___satfractutquhq2
+ ___satfractutqusq2
+ ___satfractutqudq2
+ ___satfractutquha
+ ___satfractutqusa
+ ___satfractutquda
+ ___satfractutquta
+ ___satfractuhaqq
+ ___satfractuhahq
+ ___satfractuhasq
+ ___satfractuhadq
+ ___satfractuhatq
+ ___satfractuhaha
+ ___satfractuhasa
+ ___satfractuhada
+ ___satfractuhata
+ ___satfractuhauqq
+ ___satfractuhauhq
+ ___satfractuhausq
+ ___satfractuhaudq
+ ___satfractuhautq
+ ___satfractuhausa2
+ ___satfractuhauda2
+ ___satfractuhauta2
+ ___satfractusaqq
+ ___satfractusahq
+ ___satfractusasq
+ ___satfractusadq
+ ___satfractusatq
+ ___satfractusaha
+ ___satfractusasa
+ ___satfractusada
+ ___satfractusata
+ ___satfractusauqq
+ ___satfractusauhq
+ ___satfractusausq
+ ___satfractusaudq
+ ___satfractusautq
+ ___satfractusauha2
+ ___satfractusauda2
+ ___satfractusauta2
+ ___satfractudaqq
+ ___satfractudahq
+ ___satfractudasq
+ ___satfractudadq
+ ___satfractudatq
+ ___satfractudaha
+ ___satfractudasa
+ ___satfractudada
+ ___satfractudata
+ ___satfractudauqq
+ ___satfractudauhq
+ ___satfractudausq
+ ___satfractudaudq
+ ___satfractudautq
+ ___satfractudauha2
+ ___satfractudausa2
+ ___satfractudauta2
+ ___satfractutaqq
+ ___satfractutahq
+ ___satfractutasq
+ ___satfractutadq
+ ___satfractutatq
+ ___satfractutaha
+ ___satfractutasa
+ ___satfractutada
+ ___satfractutata
+ ___satfractutauqq
+ ___satfractutauhq
+ ___satfractutausq
+ ___satfractutaudq
+ ___satfractutautq
+ ___satfractutauha2
+ ___satfractutausa2
+ ___satfractutauda2
+ ___satfractqiqq
+ ___satfractqihq
+ ___satfractqisq
+ ___satfractqidq
+ ___satfractqitq
+ ___satfractqiha
+ ___satfractqisa
+ ___satfractqida
+ ___satfractqita
+ ___satfractqiuqq
+ ___satfractqiuhq
+ ___satfractqiusq
+ ___satfractqiudq
+ ___satfractqiutq
+ ___satfractqiuha
+ ___satfractqiusa
+ ___satfractqiuda
+ ___satfractqiuta
+ ___satfracthiqq
+ ___satfracthihq
+ ___satfracthisq
+ ___satfracthidq
+ ___satfracthitq
+ ___satfracthiha
+ ___satfracthisa
+ ___satfracthida
+ ___satfracthita
+ ___satfracthiuqq
+ ___satfracthiuhq
+ ___satfracthiusq
+ ___satfracthiudq
+ ___satfracthiutq
+ ___satfracthiuha
+ ___satfracthiusa
+ ___satfracthiuda
+ ___satfracthiuta
+ ___satfractsiqq
+ ___satfractsihq
+ ___satfractsisq
+ ___satfractsidq
+ ___satfractsitq
+ ___satfractsiha
+ ___satfractsisa
+ ___satfractsida
+ ___satfractsita
+ ___satfractsiuqq
+ ___satfractsiuhq
+ ___satfractsiusq
+ ___satfractsiudq
+ ___satfractsiutq
+ ___satfractsiuha
+ ___satfractsiusa
+ ___satfractsiuda
+ ___satfractsiuta
+ ___satfractdiqq
+ ___satfractdihq
+ ___satfractdisq
+ ___satfractdidq
+ ___satfractditq
+ ___satfractdiha
+ ___satfractdisa
+ ___satfractdida
+ ___satfractdita
+ ___satfractdiuqq
+ ___satfractdiuhq
+ ___satfractdiusq
+ ___satfractdiudq
+ ___satfractdiutq
+ ___satfractdiuha
+ ___satfractdiusa
+ ___satfractdiuda
+ ___satfractdiuta
+ ___satfracttiqq
+ ___satfracttihq
+ ___satfracttisq
+ ___satfracttidq
+ ___satfracttitq
+ ___satfracttiha
+ ___satfracttisa
+ ___satfracttida
+ ___satfracttita
+ ___satfracttiuqq
+ ___satfracttiuhq
+ ___satfracttiusq
+ ___satfracttiudq
+ ___satfracttiutq
+ ___satfracttiuha
+ ___satfracttiusa
+ ___satfracttiuda
+ ___satfracttiuta
+ ___satfractsfqq
+ ___satfractsfhq
+ ___satfractsfsq
+ ___satfractsfdq
+ ___satfractsftq
+ ___satfractsfha
+ ___satfractsfsa
+ ___satfractsfda
+ ___satfractsfta
+ ___satfractsfuqq
+ ___satfractsfuhq
+ ___satfractsfusq
+ ___satfractsfudq
+ ___satfractsfutq
+ ___satfractsfuha
+ ___satfractsfusa
+ ___satfractsfuda
+ ___satfractsfuta
+ ___satfractdfqq
+ ___satfractdfhq
+ ___satfractdfsq
+ ___satfractdfdq
+ ___satfractdftq
+ ___satfractdfha
+ ___satfractdfsa
+ ___satfractdfda
+ ___satfractdfta
+ ___satfractdfuqq
+ ___satfractdfuhq
+ ___satfractdfusq
+ ___satfractdfudq
+ ___satfractdfutq
+ ___satfractdfuha
+ ___satfractdfusa
+ ___satfractdfuda
+ ___satfractdfuta
+ ___fractunsqqqi
+ ___fractunsqqhi
+ ___fractunsqqsi
+ ___fractunsqqdi
+ ___fractunsqqti
+ ___fractunshqqi
+ ___fractunshqhi
+ ___fractunshqsi
+ ___fractunshqdi
+ ___fractunshqti
+ ___fractunssqqi
+ ___fractunssqhi
+ ___fractunssqsi
+ ___fractunssqdi
+ ___fractunssqti
+ ___fractunsdqqi
+ ___fractunsdqhi
+ ___fractunsdqsi
+ ___fractunsdqdi
+ ___fractunsdqti
+ ___fractunstqqi
+ ___fractunstqhi
+ ___fractunstqsi
+ ___fractunstqdi
+ ___fractunstqti
+ ___fractunshaqi
+ ___fractunshahi
+ ___fractunshasi
+ ___fractunshadi
+ ___fractunshati
+ ___fractunssaqi
+ ___fractunssahi
+ ___fractunssasi
+ ___fractunssadi
+ ___fractunssati
+ ___fractunsdaqi
+ ___fractunsdahi
+ ___fractunsdasi
+ ___fractunsdadi
+ ___fractunsdati
+ ___fractunstaqi
+ ___fractunstahi
+ ___fractunstasi
+ ___fractunstadi
+ ___fractunstati
+ ___fractunsuqqqi
+ ___fractunsuqqhi
+ ___fractunsuqqsi
+ ___fractunsuqqdi
+ ___fractunsuqqti
+ ___fractunsuhqqi
+ ___fractunsuhqhi
+ ___fractunsuhqsi
+ ___fractunsuhqdi
+ ___fractunsuhqti
+ ___fractunsusqqi
+ ___fractunsusqhi
+ ___fractunsusqsi
+ ___fractunsusqdi
+ ___fractunsusqti
+ ___fractunsudqqi
+ ___fractunsudqhi
+ ___fractunsudqsi
+ ___fractunsudqdi
+ ___fractunsudqti
+ ___fractunsutqqi
+ ___fractunsutqhi
+ ___fractunsutqsi
+ ___fractunsutqdi
+ ___fractunsutqti
+ ___fractunsuhaqi
+ ___fractunsuhahi
+ ___fractunsuhasi
+ ___fractunsuhadi
+ ___fractunsuhati
+ ___fractunsusaqi
+ ___fractunsusahi
+ ___fractunsusasi
+ ___fractunsusadi
+ ___fractunsusati
+ ___fractunsudaqi
+ ___fractunsudahi
+ ___fractunsudasi
+ ___fractunsudadi
+ ___fractunsudati
+ ___fractunsutaqi
+ ___fractunsutahi
+ ___fractunsutasi
+ ___fractunsutadi
+ ___fractunsutati
+ ___fractunsqiqq
+ ___fractunsqihq
+ ___fractunsqisq
+ ___fractunsqidq
+ ___fractunsqitq
+ ___fractunsqiha
+ ___fractunsqisa
+ ___fractunsqida
+ ___fractunsqita
+ ___fractunsqiuqq
+ ___fractunsqiuhq
+ ___fractunsqiusq
+ ___fractunsqiudq
+ ___fractunsqiutq
+ ___fractunsqiuha
+ ___fractunsqiusa
+ ___fractunsqiuda
+ ___fractunsqiuta
+ ___fractunshiqq
+ ___fractunshihq
+ ___fractunshisq
+ ___fractunshidq
+ ___fractunshitq
+ ___fractunshiha
+ ___fractunshisa
+ ___fractunshida
+ ___fractunshita
+ ___fractunshiuqq
+ ___fractunshiuhq
+ ___fractunshiusq
+ ___fractunshiudq
+ ___fractunshiutq
+ ___fractunshiuha
+ ___fractunshiusa
+ ___fractunshiuda
+ ___fractunshiuta
+ ___fractunssiqq
+ ___fractunssihq
+ ___fractunssisq
+ ___fractunssidq
+ ___fractunssitq
+ ___fractunssiha
+ ___fractunssisa
+ ___fractunssida
+ ___fractunssita
+ ___fractunssiuqq
+ ___fractunssiuhq
+ ___fractunssiusq
+ ___fractunssiudq
+ ___fractunssiutq
+ ___fractunssiuha
+ ___fractunssiusa
+ ___fractunssiuda
+ ___fractunssiuta
+ ___fractunsdiqq
+ ___fractunsdihq
+ ___fractunsdisq
+ ___fractunsdidq
+ ___fractunsditq
+ ___fractunsdiha
+ ___fractunsdisa
+ ___fractunsdida
+ ___fractunsdita
+ ___fractunsdiuqq
+ ___fractunsdiuhq
+ ___fractunsdiusq
+ ___fractunsdiudq
+ ___fractunsdiutq
+ ___fractunsdiuha
+ ___fractunsdiusa
+ ___fractunsdiuda
+ ___fractunsdiuta
+ ___fractunstiqq
+ ___fractunstihq
+ ___fractunstisq
+ ___fractunstidq
+ ___fractunstitq
+ ___fractunstiha
+ ___fractunstisa
+ ___fractunstida
+ ___fractunstita
+ ___fractunstiuqq
+ ___fractunstiuhq
+ ___fractunstiusq
+ ___fractunstiudq
+ ___fractunstiutq
+ ___fractunstiuha
+ ___fractunstiusa
+ ___fractunstiuda
+ ___fractunstiuta
+ ___satfractunsqiqq
+ ___satfractunsqihq
+ ___satfractunsqisq
+ ___satfractunsqidq
+ ___satfractunsqitq
+ ___satfractunsqiha
+ ___satfractunsqisa
+ ___satfractunsqida
+ ___satfractunsqita
+ ___satfractunsqiuqq
+ ___satfractunsqiuhq
+ ___satfractunsqiusq
+ ___satfractunsqiudq
+ ___satfractunsqiutq
+ ___satfractunsqiuha
+ ___satfractunsqiusa
+ ___satfractunsqiuda
+ ___satfractunsqiuta
+ ___satfractunshiqq
+ ___satfractunshihq
+ ___satfractunshisq
+ ___satfractunshidq
+ ___satfractunshitq
+ ___satfractunshiha
+ ___satfractunshisa
+ ___satfractunshida
+ ___satfractunshita
+ ___satfractunshiuqq
+ ___satfractunshiuhq
+ ___satfractunshiusq
+ ___satfractunshiudq
+ ___satfractunshiutq
+ ___satfractunshiuha
+ ___satfractunshiusa
+ ___satfractunshiuda
+ ___satfractunshiuta
+ ___satfractunssiqq
+ ___satfractunssihq
+ ___satfractunssisq
+ ___satfractunssidq
+ ___satfractunssitq
+ ___satfractunssiha
+ ___satfractunssisa
+ ___satfractunssida
+ ___satfractunssita
+ ___satfractunssiuqq
+ ___satfractunssiuhq
+ ___satfractunssiusq
+ ___satfractunssiudq
+ ___satfractunssiutq
+ ___satfractunssiuha
+ ___satfractunssiusa
+ ___satfractunssiuda
+ ___satfractunssiuta
+ ___satfractunsdiqq
+ ___satfractunsdihq
+ ___satfractunsdisq
+ ___satfractunsdidq
+ ___satfractunsditq
+ ___satfractunsdiha
+ ___satfractunsdisa
+ ___satfractunsdida
+ ___satfractunsdita
+ ___satfractunsdiuqq
+ ___satfractunsdiuhq
+ ___satfractunsdiusq
+ ___satfractunsdiudq
+ ___satfractunsdiutq
+ ___satfractunsdiuha
+ ___satfractunsdiusa
+ ___satfractunsdiuda
+ ___satfractunsdiuta
+ ___satfractunstiqq
+ ___satfractunstihq
+ ___satfractunstisq
+ ___satfractunstidq
+ ___satfractunstitq
+ ___satfractunstiha
+ ___satfractunstisa
+ ___satfractunstida
+ ___satfractunstita
+ ___satfractunstiuqq
+ ___satfractunstiuhq
+ ___satfractunstiusq
+ ___satfractunstiudq
+ ___satfractunstiutq
+ ___satfractunstiuha
+ ___satfractunstiusa
+ ___satfractunstiuda
+ ___satfractunstiuta
+}
+
+%inherit GCC_4.4.0 GCC_4.3.0
+GCC_4.4.0 {
+ ___sync_fetch_and_add_1
+ ___sync_fetch_and_sub_1
+ ___sync_fetch_and_or_1
+ ___sync_fetch_and_and_1
+ ___sync_fetch_and_xor_1
+ ___sync_fetch_and_nand_1
+ ___sync_add_and_fetch_1
+ ___sync_sub_and_fetch_1
+ ___sync_or_and_fetch_1
+ ___sync_and_and_fetch_1
+ ___sync_xor_and_fetch_1
+ ___sync_nand_and_fetch_1
+ ___sync_bool_compare_and_swap_1
+ ___sync_val_compare_and_swap_1
+ ___sync_lock_test_and_set_1
+
+ ___sync_fetch_and_add_2
+ ___sync_fetch_and_sub_2
+ ___sync_fetch_and_or_2
+ ___sync_fetch_and_and_2
+ ___sync_fetch_and_xor_2
+ ___sync_fetch_and_nand_2
+ ___sync_add_and_fetch_2
+ ___sync_sub_and_fetch_2
+ ___sync_or_and_fetch_2
+ ___sync_and_and_fetch_2
+ ___sync_xor_and_fetch_2
+ ___sync_nand_and_fetch_2
+ ___sync_bool_compare_and_swap_2
+ ___sync_val_compare_and_swap_2
+ ___sync_lock_test_and_set_2
+
+ ___sync_fetch_and_add_4
+ ___sync_fetch_and_sub_4
+ ___sync_fetch_and_or_4
+ ___sync_fetch_and_and_4
+ ___sync_fetch_and_xor_4
+ ___sync_fetch_and_nand_4
+ ___sync_add_and_fetch_4
+ ___sync_sub_and_fetch_4
+ ___sync_or_and_fetch_4
+ ___sync_and_and_fetch_4
+ ___sync_xor_and_fetch_4
+ ___sync_nand_and_fetch_4
+ ___sync_bool_compare_and_swap_4
+ ___sync_val_compare_and_swap_4
+ ___sync_lock_test_and_set_4
+
+ ___sync_fetch_and_add_8
+ ___sync_fetch_and_sub_8
+ ___sync_fetch_and_or_8
+ ___sync_fetch_and_and_8
+ ___sync_fetch_and_xor_8
+ ___sync_fetch_and_nand_8
+ ___sync_add_and_fetch_8
+ ___sync_sub_and_fetch_8
+ ___sync_or_and_fetch_8
+ ___sync_and_and_fetch_8
+ ___sync_xor_and_fetch_8
+ ___sync_nand_and_fetch_8
+ ___sync_bool_compare_and_swap_8
+ ___sync_val_compare_and_swap_8
+ ___sync_lock_test_and_set_8
+
+ ___sync_fetch_and_add_16
+ ___sync_fetch_and_sub_16
+ ___sync_fetch_and_or_16
+ ___sync_fetch_and_and_16
+ ___sync_fetch_and_xor_16
+ ___sync_fetch_and_nand_16
+ ___sync_add_and_fetch_16
+ ___sync_sub_and_fetch_16
+ ___sync_or_and_fetch_16
+ ___sync_and_and_fetch_16
+ ___sync_xor_and_fetch_16
+ ___sync_nand_and_fetch_16
+ ___sync_bool_compare_and_swap_16
+ ___sync_val_compare_and_swap_16
+ ___sync_lock_test_and_set_16
+
+ ___sync_synchronize
+}
+
+%inherit GCC_4.5.0 GCC_4.4.0
+GCC_4.5.0 {
+ ___unordxf2
+ ___unordtf2
+}
diff --git a/gcc-4.9/libgcc/config/bfin/linux-unwind.h b/gcc-4.9/libgcc/config/bfin/linux-unwind.h
new file mode 100644
index 000000000..dc58f0a81
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/linux-unwind.h
@@ -0,0 +1,164 @@
+/* DWARF2 EH unwinding support for Blackfin.
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs.
+ Don't use this at all if inhibit_libc is used. */
+
+#ifndef inhibit_libc
+
+#include <signal.h>
+#include <sys/ucontext.h>
+
+#define MD_FALLBACK_FRAME_STATE_FOR bfin_fallback_frame_state
+
+static _Unwind_Reason_Code
+bfin_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+
+ /* P0=__NR_rt_sigreturn (X); EXCPT 0x0; */
+ if (*(unsigned short *)pc == 0xe128
+ && *(unsigned short *)(pc + 2) == 0x00ad
+ && *(unsigned short *)(pc + 4) == 0x00a0)
+ {
+ struct rt_sigframe {
+ int sig;
+ siginfo_t *pinfo;
+ void *puc;
+ char retcode[8];
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_ = context->cfa;
+
+ /* The void * cast is necessary to avoid an aliasing warning.
+ The aliasing warning is correct, but should not be a problem
+ because it does not alias anything. */
+ sc = (struct sigcontext *)(void *)&rt_->uc.uc_mcontext.gregs;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = sc->sc_usp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 14;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)&sc->sc_r0 - new_cfa;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long)&sc->sc_r1 - new_cfa;
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long)&sc->sc_r2 - new_cfa;
+ fs->regs.reg[3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[3].loc.offset = (long)&sc->sc_r3 - new_cfa;
+ fs->regs.reg[4].how = REG_SAVED_OFFSET;
+ fs->regs.reg[4].loc.offset = (long)&sc->sc_r4 - new_cfa;
+ fs->regs.reg[5].how = REG_SAVED_OFFSET;
+ fs->regs.reg[5].loc.offset = (long)&sc->sc_r5 - new_cfa;
+ fs->regs.reg[6].how = REG_SAVED_OFFSET;
+ fs->regs.reg[6].loc.offset = (long)&sc->sc_r6 - new_cfa;
+ fs->regs.reg[7].how = REG_SAVED_OFFSET;
+ fs->regs.reg[7].loc.offset = (long)&sc->sc_r7 - new_cfa;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long)&sc->sc_p0 - new_cfa;
+ fs->regs.reg[9].how = REG_SAVED_OFFSET;
+ fs->regs.reg[9].loc.offset = (long)&sc->sc_p1 - new_cfa;
+ fs->regs.reg[10].how = REG_SAVED_OFFSET;
+ fs->regs.reg[10].loc.offset = (long)&sc->sc_p2 - new_cfa;
+ fs->regs.reg[11].how = REG_SAVED_OFFSET;
+ fs->regs.reg[11].loc.offset = (long)&sc->sc_p3 - new_cfa;
+ fs->regs.reg[12].how = REG_SAVED_OFFSET;
+ fs->regs.reg[12].loc.offset = (long)&sc->sc_p4 - new_cfa;
+ fs->regs.reg[13].how = REG_SAVED_OFFSET;
+ fs->regs.reg[13].loc.offset = (long)&sc->sc_p5 - new_cfa;
+
+ fs->regs.reg[15].how = REG_SAVED_OFFSET;
+ fs->regs.reg[15].loc.offset = (long)&sc->sc_fp - new_cfa;
+ fs->regs.reg[16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[16].loc.offset = (long)&sc->sc_i0 - new_cfa;
+ fs->regs.reg[17].how = REG_SAVED_OFFSET;
+ fs->regs.reg[17].loc.offset = (long)&sc->sc_i1 - new_cfa;
+ fs->regs.reg[18].how = REG_SAVED_OFFSET;
+ fs->regs.reg[18].loc.offset = (long)&sc->sc_i2 - new_cfa;
+ fs->regs.reg[19].how = REG_SAVED_OFFSET;
+ fs->regs.reg[19].loc.offset = (long)&sc->sc_i3 - new_cfa;
+ fs->regs.reg[20].how = REG_SAVED_OFFSET;
+ fs->regs.reg[20].loc.offset = (long)&sc->sc_b0 - new_cfa;
+ fs->regs.reg[21].how = REG_SAVED_OFFSET;
+ fs->regs.reg[21].loc.offset = (long)&sc->sc_b1 - new_cfa;
+ fs->regs.reg[22].how = REG_SAVED_OFFSET;
+ fs->regs.reg[22].loc.offset = (long)&sc->sc_b2 - new_cfa;
+ fs->regs.reg[23].how = REG_SAVED_OFFSET;
+ fs->regs.reg[23].loc.offset = (long)&sc->sc_b3 - new_cfa;
+ fs->regs.reg[24].how = REG_SAVED_OFFSET;
+ fs->regs.reg[24].loc.offset = (long)&sc->sc_l0 - new_cfa;
+ fs->regs.reg[25].how = REG_SAVED_OFFSET;
+ fs->regs.reg[25].loc.offset = (long)&sc->sc_l1 - new_cfa;
+ fs->regs.reg[26].how = REG_SAVED_OFFSET;
+ fs->regs.reg[26].loc.offset = (long)&sc->sc_l2 - new_cfa;
+ fs->regs.reg[27].how = REG_SAVED_OFFSET;
+ fs->regs.reg[27].loc.offset = (long)&sc->sc_l3 - new_cfa;
+ fs->regs.reg[28].how = REG_SAVED_OFFSET;
+ fs->regs.reg[28].loc.offset = (long)&sc->sc_m0 - new_cfa;
+ fs->regs.reg[29].how = REG_SAVED_OFFSET;
+ fs->regs.reg[29].loc.offset = (long)&sc->sc_m1 - new_cfa;
+ fs->regs.reg[30].how = REG_SAVED_OFFSET;
+ fs->regs.reg[30].loc.offset = (long)&sc->sc_m2 - new_cfa;
+ fs->regs.reg[31].how = REG_SAVED_OFFSET;
+ fs->regs.reg[31].loc.offset = (long)&sc->sc_m3 - new_cfa;
+ /* FIXME: Handle A0, A1, CC. */
+ fs->regs.reg[35].how = REG_SAVED_OFFSET;
+ fs->regs.reg[35].loc.offset = (long)&sc->sc_rets - new_cfa;
+ fs->regs.reg[36].how = REG_SAVED_OFFSET;
+ fs->regs.reg[36].loc.offset = (long)&sc->sc_pc - new_cfa;
+ fs->regs.reg[37].how = REG_SAVED_OFFSET;
+ fs->regs.reg[37].loc.offset = (long)&sc->sc_retx - new_cfa;
+
+ fs->regs.reg[40].how = REG_SAVED_OFFSET;
+ fs->regs.reg[40].loc.offset = (long)&sc->sc_astat - new_cfa;
+ fs->regs.reg[41].how = REG_SAVED_OFFSET;
+ fs->regs.reg[41].loc.offset = (long)&sc->sc_seqstat - new_cfa;
+
+ fs->regs.reg[44].how = REG_SAVED_OFFSET;
+ fs->regs.reg[44].loc.offset = (long)&sc->sc_lt0 - new_cfa;
+ fs->regs.reg[45].how = REG_SAVED_OFFSET;
+ fs->regs.reg[45].loc.offset = (long)&sc->sc_lt1 - new_cfa;
+ fs->regs.reg[46].how = REG_SAVED_OFFSET;
+ fs->regs.reg[46].loc.offset = (long)&sc->sc_lc0 - new_cfa;
+ fs->regs.reg[47].how = REG_SAVED_OFFSET;
+ fs->regs.reg[47].loc.offset = (long)&sc->sc_lc1 - new_cfa;
+ fs->regs.reg[48].how = REG_SAVED_OFFSET;
+ fs->regs.reg[48].loc.offset = (long)&sc->sc_lb0 - new_cfa;
+ fs->regs.reg[49].how = REG_SAVED_OFFSET;
+ fs->regs.reg[49].loc.offset = (long)&sc->sc_lb1 - new_cfa;
+ fs->retaddr_column = 35;
+
+ return _URC_NO_REASON;
+}
+
+#endif /* ifdef inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/bfin/t-bfin b/gcc-4.9/libgcc/config/bfin/t-bfin
new file mode 100644
index 000000000..bc2b088ff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/t-bfin
@@ -0,0 +1,3 @@
+LIB1ASMSRC = bfin/lib1funcs.S
+LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 _muldi3 _umulsi3_highpart
+LIB1ASMFUNCS += _smulsi3_highpart
diff --git a/gcc-4.9/libgcc/config/bfin/t-crtlibid b/gcc-4.9/libgcc/config/bfin/t-crtlibid
new file mode 100644
index 000000000..b0c93e71e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/t-crtlibid
@@ -0,0 +1,3 @@
+# Assemble startup files.
+crtlibid.o: $(srcdir)/config/bfin/crtlibid.S
+ $(gcc_compile) -c -x assembler-with-cpp $<
diff --git a/gcc-4.9/libgcc/config/bfin/t-crtstuff b/gcc-4.9/libgcc/config/bfin/t-crtstuff
new file mode 100644
index 000000000..eee12eb69
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/t-crtstuff
@@ -0,0 +1 @@
+CRTSTUFF_T_CFLAGS = $(PICFLAG)
diff --git a/gcc-4.9/libgcc/config/bfin/t-linux b/gcc-4.9/libgcc/config/bfin/t-linux
new file mode 100644
index 000000000..1c42e482b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/bfin/t-linux
@@ -0,0 +1 @@
+SHLIB_MAPFILES = $(srcdir)/config/bfin/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/c6x/c6x-abi.h b/gcc-4.9/libgcc/config/c6x/c6x-abi.h
new file mode 100644
index 000000000..b68c60782
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/c6x-abi.h
@@ -0,0 +1,108 @@
+/* Header file for C6X ABI versions of libgcc functions.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Bernd Schmidt <bernds@codesourcery.com>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+/* Make __c6xabi_AEABI_NAME an alias for __GCC_NAME. */
+#define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) \
+ __asm__ (".globl\t__c6xabi_" #AEABI_NAME "\n" \
+ ".set\t__c6xabi_" #AEABI_NAME \
+ ", __gnu_" #GCC_NAME "\n");
+
+/* Rename helper functions to the names specified in the C6000 ELF ABI. */
+#ifdef L_divsi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (divsi3, divi)
+#endif
+#ifdef L_divdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (divdi3, divlli)
+#endif
+#ifdef L_udivsi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (udivsi3, divu)
+#endif
+#ifdef L_udivdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (udivdi3, divull)
+#endif
+#ifdef L_udivmoddi4
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (udivmoddi4, divremull)
+#endif
+#ifdef L_modsi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (modsi3, remi)
+#endif
+#ifdef L_moddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (moddi3, remlli)
+#endif
+#ifdef L_umodsi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (umodsi3, remu)
+#endif
+#ifdef L_umoddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (umoddi3, remull)
+#endif
+#ifdef L_negdi2
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (negdi2, negll)
+#endif
+#ifdef L_muldi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, mpyll)
+#endif
+#ifdef L_ashrdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (ashrdi3, llshr)
+#endif
+#ifdef L_lshrdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (lshrdi3, llshru)
+#endif
+#ifdef L_ashldi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (ashldi3, llshl)
+#endif
+
+/* The following are excluded from softfp due to softfp_exclude_libgcc2,
+ so we rename them here rather than in sfp-machine.h. */
+#ifdef L_fixdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfdi, fixdlli)
+#endif
+#ifdef L_fixunsdfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfsi, fixdu)
+#endif
+#ifdef L_fixunsdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfdi, fixdull)
+#endif
+#ifdef L_fixsfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, fixflli)
+#endif
+#ifdef L_fixunssfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfsi, fixfu)
+#endif
+#ifdef L_fixunssfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, fixfull)
+#endif
+#ifdef L_floatdidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdidf, fltllid)
+#endif
+#ifdef L_floatundidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatundidf, fltulld)
+#endif
+#ifdef L_floatdisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, fltllif)
+#endif
+#ifdef L_floatundisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatundisf, fltullf)
+#endif
+
+#define LIBGCC2_GNU_PREFIX
diff --git a/gcc-4.9/libgcc/config/c6x/crti.S b/gcc-4.9/libgcc/config/c6x/crti.S
new file mode 100644
index 000000000..938e410b8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/crti.S
@@ -0,0 +1,39 @@
+/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+ Contributed by Bernd Schmidt <bernds@codesourcery.com>.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * This file just supplies function prologues for the .init and .fini
+ * sections. It is linked in before crtbegin.o.
+ */
+
+ .section .init
+ .globl _init
+ .type _init,@function
+_init:
+ add .l2 -8, B15, B15
+ stw .d2t2 B3,*+B15(4)
+ .section .fini
+ .globl _fini
+ .type _fini,@function
+_fini:
+ add .l2 -8, B15, B15
+ stw .d2t2 B3,*+B15(4)
diff --git a/gcc-4.9/libgcc/config/c6x/crtn.S b/gcc-4.9/libgcc/config/c6x/crtn.S
new file mode 100644
index 000000000..88e35ed85
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/crtn.S
@@ -0,0 +1,41 @@
+/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+ Contributed by Bernd Schmidt <bernds@codesourcery.com>.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * This file supplies function epilogues for the .init and .fini sections.
+ * It is linked in after all other files.
+ */
+
+ .section .init
+ ldw .d2t2 *+B15(4), B3
+ add .d2 B15, 8, B15
+ nop 3
+ ret .s2 B3
+ nop 5
+
+ .section .fini
+ ldw .d2t2 *+B15(4), B3
+ add .d2 B15, 8, B15
+ nop 3
+ ret .s2 B3
+ nop 5
+
diff --git a/gcc-4.9/libgcc/config/c6x/eqd.c b/gcc-4.9/libgcc/config/c6x/eqd.c
new file mode 100644
index 000000000..283b2214e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/eqd.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a == b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/double.h>
+
+CMPtype __c6xabi_eqd(DFtype a, DFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_D(A); FP_DECL_D(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_D(A, a);
+ FP_UNPACK_RAW_D(B, b);
+ FP_CMP_EQ_D(r, A, B);
+ if (r && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return !r;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/eqf.c b/gcc-4.9/libgcc/config/c6x/eqf.c
new file mode 100644
index 000000000..e99fc84a0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/eqf.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a == b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/single.h>
+
+CMPtype __c6xabi_eqf(SFtype a, SFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_S(A); FP_DECL_S(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_S(A, a);
+ FP_UNPACK_RAW_S(B, b);
+ FP_CMP_EQ_S(r, A, B);
+ if (r && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return !r;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/ged.c b/gcc-4.9/libgcc/config/c6x/ged.c
new file mode 100644
index 000000000..29704cf6a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/ged.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a >= b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/double.h>
+
+CMPtype __c6xabi_ged(DFtype a, DFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_D(A); FP_DECL_D(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_D(A, a);
+ FP_UNPACK_RAW_D(B, b);
+ FP_CMP_D(r, A, B, -2);
+ if (r == -2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r >= 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/gef.c b/gcc-4.9/libgcc/config/c6x/gef.c
new file mode 100644
index 000000000..bd6f27d15
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/gef.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a >= b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/single.h>
+
+CMPtype __c6xabi_gef(SFtype a, SFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_S(A); FP_DECL_S(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_S(A, a);
+ FP_UNPACK_RAW_S(B, b);
+ FP_CMP_S(r, A, B, -2);
+ if (r == -2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r >= 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/gtd.c b/gcc-4.9/libgcc/config/c6x/gtd.c
new file mode 100644
index 000000000..6a9ca924f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/gtd.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a > b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/double.h>
+
+CMPtype __c6xabi_gtd(DFtype a, DFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_D(A); FP_DECL_D(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_D(A, a);
+ FP_UNPACK_RAW_D(B, b);
+ FP_CMP_D(r, A, B, -2);
+ if (r == -2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r > 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/gtf.c b/gcc-4.9/libgcc/config/c6x/gtf.c
new file mode 100644
index 000000000..a7db8f83c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/gtf.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a > b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/single.h>
+
+CMPtype __c6xabi_gtf(SFtype a, SFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_S(A); FP_DECL_S(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_S(A, a);
+ FP_UNPACK_RAW_S(B, b);
+ FP_CMP_S(r, A, B, -2);
+ if (r == -2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r > 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/led.c b/gcc-4.9/libgcc/config/c6x/led.c
new file mode 100644
index 000000000..14c48d332
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/led.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a <= b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/double.h>
+
+CMPtype __c6xabi_led(DFtype a, DFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_D(A); FP_DECL_D(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_D(A, a);
+ FP_UNPACK_RAW_D(B, b);
+ FP_CMP_D(r, A, B, 2);
+ if (r == 2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r <= 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/lef.c b/gcc-4.9/libgcc/config/c6x/lef.c
new file mode 100644
index 000000000..9742ae087
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/lef.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a <= b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/single.h>
+
+CMPtype __c6xabi_lef(SFtype a, SFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_S(A); FP_DECL_S(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_S(A, a);
+ FP_UNPACK_RAW_S(B, b);
+ FP_CMP_S(r, A, B, 2);
+ if (r == 2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r <= 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/lib1funcs.S b/gcc-4.9/libgcc/config/c6x/lib1funcs.S
new file mode 100644
index 000000000..9ce1f6fda
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/lib1funcs.S
@@ -0,0 +1,438 @@
+/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+ Contributed by Bernd Schmidt <bernds@codesourcery.com>.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+ ;; ABI considerations for the divide functions
+ ;; The following registers are call-used:
+ ;; __c6xabi_divi A0,A1,A2,A4,A6,B0,B1,B2,B4,B5
+ ;; __c6xabi_divu A0,A1,A2,A4,A6,B0,B1,B2,B4
+ ;; __c6xabi_remi A1,A2,A4,A5,A6,B0,B1,B2,B4
+ ;; __c6xabi_remu A1,A4,A5,A7,B0,B1,B2,B4
+ ;;
+ ;; In our implementation, divu and remu are leaf functions,
+ ;; while both divi and remi call into divu.
+ ;; A0 is not clobbered by any of the functions.
+ ;; divu does not clobber B2 either, which is taken advantage of
+ ;; in remi.
+ ;; divi uses B5 to hold the original return address during
+ ;; the call to divu.
+ ;; remi uses B2 and A5 to hold the input values during the
+ ;; call to divu. It stores B3 in on the stack.
+
+#ifdef L_divsi3
+.text
+.align 2
+.global __c6xabi_divi
+.hidden __c6xabi_divi
+.type __c6xabi_divi, STT_FUNC
+
+__c6xabi_divi:
+ call .s2 __c6xabi_divu
+|| mv .d2 B3, B5
+|| cmpgt .l1 0, A4, A1
+|| cmpgt .l2 0, B4, B1
+
+ [A1] neg .l1 A4, A4
+|| [B1] neg .l2 B4, B4
+|| xor .s1x A1, B1, A1
+
+#ifdef _TMS320C6400
+ [A1] addkpc .s2 1f, B3, 4
+#else
+ [A1] mvkl .s2 1f, B3
+ [A1] mvkh .s2 1f, B3
+ nop 2
+#endif
+1:
+ neg .l1 A4, A4
+|| mv .l2 B3,B5
+|| ret .s2 B5
+ nop 5
+#endif
+
+#if defined L_modsi3 || defined L_divmodsi4
+.align 2
+#ifdef L_modsi3
+#define MOD_OUTPUT_REG A4
+.global __c6xabi_remi
+.hidden __c6xabi_remi
+.type __c6xabi_remi, STT_FUNC
+#else
+#define MOD_OUTPUT_REG A5
+.global __c6xabi_divremi
+.hidden __c6xabi_divremi
+.type __c6xabi_divremi, STT_FUNC
+__c6xabi_divremi:
+#endif
+
+__c6xabi_remi:
+ stw .d2t2 B3, *B15--[2]
+|| cmpgt .l1 0, A4, A1
+|| cmpgt .l2 0, B4, B2
+|| mv .s1 A4, A5
+|| call .s2 __c6xabi_divu
+
+ [A1] neg .l1 A4, A4
+|| [B2] neg .l2 B4, B4
+|| xor .s2x B2, A1, B0
+|| mv .d2 B4, B2
+
+#ifdef _TMS320C6400
+ [B0] addkpc .s2 1f, B3, 1
+ [!B0] addkpc .s2 2f, B3, 1
+ nop 2
+#else
+ [B0] mvkl .s2 1f,B3
+ [!B0] mvkl .s2 2f,B3
+
+ [B0] mvkh .s2 1f,B3
+ [!B0] mvkh .s2 2f,B3
+#endif
+1:
+ neg .l1 A4, A4
+2:
+ ldw .d2t2 *++B15[2], B3
+
+#ifdef _TMS320C6400_PLUS
+ mpy32 .m1x A4, B2, A6
+ nop 3
+ ret .s2 B3
+ sub .l1 A5, A6, MOD_OUTPUT_REG
+ nop 4
+#else
+ mpyu .m1x A4, B2, A1
+ nop 1
+ mpylhu .m1x A4, B2, A6
+|| mpylhu .m2x B2, A4, B2
+ nop 1
+ add .l1x A6, B2, A6
+|| ret .s2 B3
+ shl .s1 A6, 16, A6
+ add .d1 A6, A1, A6
+ sub .l1 A5, A6, MOD_OUTPUT_REG
+ nop 2
+#endif
+
+#endif
+
+#if defined L_udivsi3 || defined L_udivmodsi4
+.align 2
+#ifdef L_udivsi3
+.global __c6xabi_divu
+.hidden __c6xabi_divu
+.type __c6xabi_divu, STT_FUNC
+__c6xabi_divu:
+#else
+.global __c6xabi_divremu
+.hidden __c6xabi_divremu
+.type __c6xabi_divremu, STT_FUNC
+__c6xabi_divremu:
+#endif
+ ;; We use a series of up to 31 subc instructions. First, we find
+ ;; out how many leading zero bits there are in the divisor. This
+ ;; gives us both a shift count for aligning (shifting) the divisor
+ ;; to the, and the number of times we have to execute subc.
+
+ ;; At the end, we have both the remainder and most of the quotient
+ ;; in A4. The top bit of the quotient is computed first and is
+ ;; placed in A2.
+
+ ;; Return immediately if the dividend is zero. Setting B4 to 1
+ ;; is a trick to allow us to leave the following insns in the jump
+ ;; delay slot without affecting the result.
+ mv .s2x A4, B1
+
+#ifndef _TMS320C6400
+[!b1] mvk .s2 1, B4
+#endif
+[b1] lmbd .l2 1, B4, B1
+||[!b1] b .s2 B3 ; RETURN A
+#ifdef _TMS320C6400
+||[!b1] mvk .d2 1, B4
+#endif
+#ifdef L_udivmodsi4
+||[!b1] zero .s1 A5
+#endif
+ mv .l1x B1, A6
+|| shl .s2 B4, B1, B4
+
+ ;; The loop performs a maximum of 28 steps, so we do the
+ ;; first 3 here.
+ cmpltu .l1x A4, B4, A2
+[!A2] sub .l1x A4, B4, A4
+|| shru .s2 B4, 1, B4
+|| xor .s1 1, A2, A2
+
+ shl .s1 A2, 31, A2
+|| [b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+
+ ;; RETURN A may happen here (note: must happen before the next branch)
+0:
+ cmpgt .l2 B1, 7, B0
+|| [b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+|| [b0] b .s1 0b
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+ ;; loop backwards branch happens here
+
+ ret .s2 B3
+|| mvk .s1 32, A1
+ sub .l1 A1, A6, A6
+#ifdef L_udivmodsi4
+|| extu .s1 A4, A6, A5
+#endif
+ shl .s1 A4, A6, A4
+ shru .s1 A4, 1, A4
+|| sub .l1 A6, 1, A6
+ or .l1 A2, A4, A4
+ shru .s1 A4, A6, A4
+ nop
+
+#endif
+
+#ifdef L_umodsi3
+.align 2
+.global __c6xabi_remu
+.hidden __c6xabi_remu
+.type __c6xabi_remu, STT_FUNC
+__c6xabi_remu:
+ ;; The ABI seems designed to prevent these functions calling each other,
+ ;; so we duplicate most of the divsi3 code here.
+ mv .s2x A4, B1
+#ifndef _TMS320C6400
+[!b1] mvk .s2 1, B4
+#endif
+ lmbd .l2 1, B4, B1
+||[!b1] b .s2 B3 ; RETURN A
+#ifdef _TMS320C6400
+||[!b1] mvk .d2 1, B4
+#endif
+
+ mv .l1x B1, A7
+|| shl .s2 B4, B1, B4
+
+ cmpltu .l1x A4, B4, A1
+[!a1] sub .l1x A4, B4, A4
+ shru .s2 B4, 1, B4
+
+0:
+ cmpgt .l2 B1, 7, B0
+|| [b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+ ;; RETURN A may happen here (note: must happen before the next branch)
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+|| [b0] b .s1 0b
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+ ;; loop backwards branch happens here
+
+ ret .s2 B3
+[b1] subc .l1x A4,B4,A4
+|| [b1] add .s2 -1, B1, B1
+[b1] subc .l1x A4,B4,A4
+
+ extu .s1 A4, A7, A4
+ nop 2
+#endif
+
+#if defined L_strasgi_64plus && defined _TMS320C6400_PLUS
+
+.align 2
+.global __c6xabi_strasgi_64plus
+.hidden __c6xabi_strasgi_64plus
+.type __c6xabi_strasgi_64plus, STT_FUNC
+__c6xabi_strasgi_64plus:
+ shru .s2x a6, 2, b31
+|| mv .s1 a4, a30
+|| mv .d2 b4, b30
+
+ add .s2 -4, b31, b31
+
+ sploopd 1
+|| mvc .s2 b31, ilc
+ ldw .d2t2 *b30++, b31
+ nop 4
+ mv .s1x b31,a31
+ spkernel 6, 0
+|| stw .d1t1 a31, *a30++
+
+ ret .s2 b3
+ nop 5
+#endif
+
+#ifdef L_strasgi
+.global __c6xabi_strasgi
+.type __c6xabi_strasgi, STT_FUNC
+__c6xabi_strasgi:
+ ;; This is essentially memcpy, with alignment known to be at least
+ ;; 4, and the size a multiple of 4 greater than or equal to 28.
+ ldw .d2t1 *B4++, A0
+|| mvk .s2 16, B1
+ ldw .d2t1 *B4++, A1
+|| mvk .s2 20, B2
+|| sub .d1 A6, 24, A6
+ ldw .d2t1 *B4++, A5
+ ldw .d2t1 *B4++, A7
+|| mv .l2x A6, B7
+ ldw .d2t1 *B4++, A8
+ ldw .d2t1 *B4++, A9
+|| mv .s2x A0, B5
+|| cmpltu .l2 B2, B7, B0
+
+0:
+ stw .d1t2 B5, *A4++
+||[b0] ldw .d2t1 *B4++, A0
+|| mv .s2x A1, B5
+|| mv .l2 B7, B6
+
+[b0] sub .d2 B6, 24, B7
+||[b0] b .s2 0b
+|| cmpltu .l2 B1, B6, B0
+
+[b0] ldw .d2t1 *B4++, A1
+|| stw .d1t2 B5, *A4++
+|| mv .s2x A5, B5
+|| cmpltu .l2 12, B6, B0
+
+[b0] ldw .d2t1 *B4++, A5
+|| stw .d1t2 B5, *A4++
+|| mv .s2x A7, B5
+|| cmpltu .l2 8, B6, B0
+
+[b0] ldw .d2t1 *B4++, A7
+|| stw .d1t2 B5, *A4++
+|| mv .s2x A8, B5
+|| cmpltu .l2 4, B6, B0
+
+[b0] ldw .d2t1 *B4++, A8
+|| stw .d1t2 B5, *A4++
+|| mv .s2x A9, B5
+|| cmpltu .l2 0, B6, B0
+
+[b0] ldw .d2t1 *B4++, A9
+|| stw .d1t2 B5, *A4++
+|| mv .s2x A0, B5
+|| cmpltu .l2 B2, B7, B0
+
+ ;; loop back branch happens here
+
+ cmpltu .l2 B1, B6, B0
+|| ret .s2 b3
+
+[b0] stw .d1t1 A1, *A4++
+|| cmpltu .l2 12, B6, B0
+[b0] stw .d1t1 A5, *A4++
+|| cmpltu .l2 8, B6, B0
+[b0] stw .d1t1 A7, *A4++
+|| cmpltu .l2 4, B6, B0
+[b0] stw .d1t1 A8, *A4++
+|| cmpltu .l2 0, B6, B0
+[b0] stw .d1t1 A9, *A4++
+
+ ;; return happens here
+
+#endif
+
+#ifdef _TMS320C6400_PLUS
+#ifdef L_push_rts
+.align 2
+.global __c6xabi_push_rts
+.hidden __c6xabi_push_rts
+.type __c6xabi_push_rts, STT_FUNC
+__c6xabi_push_rts:
+ stw .d2t2 B14, *B15--[2]
+ stdw .d2t1 A15:A14, *B15--
+|| b .s2x A3
+ stdw .d2t2 B13:B12, *B15--
+ stdw .d2t1 A13:A12, *B15--
+ stdw .d2t2 B11:B10, *B15--
+ stdw .d2t1 A11:A10, *B15--
+ stdw .d2t2 B3:B2, *B15--
+#endif
+
+#ifdef L_pop_rts
+.align 2
+.global __c6xabi_pop_rts
+.hidden __c6xabi_pop_rts
+.type __c6xabi_pop_rts, STT_FUNC
+__c6xabi_pop_rts:
+ lddw .d2t2 *++B15, B3:B2
+ lddw .d2t1 *++B15, A11:A10
+ lddw .d2t2 *++B15, B11:B10
+ lddw .d2t1 *++B15, A13:A12
+ lddw .d2t2 *++B15, B13:B12
+ lddw .d2t1 *++B15, A15:A14
+|| b .s2 B3
+ ldw .d2t2 *++B15[2], B14
+ nop 4
+#endif
+
+#ifdef L_call_stub
+.align 2
+.global __c6xabi_call_stub
+.type __c6xabi_call_stub, STT_FUNC
+__c6xabi_call_stub:
+ stw .d2t1 A2, *B15--[2]
+ stdw .d2t1 A7:A6, *B15--
+|| call .s2 B31
+ stdw .d2t1 A1:A0, *B15--
+ stdw .d2t2 B7:B6, *B15--
+ stdw .d2t2 B5:B4, *B15--
+ stdw .d2t2 B1:B0, *B15--
+ stdw .d2t2 B3:B2, *B15--
+|| addkpc .s2 1f, B3, 0
+1:
+ lddw .d2t2 *++B15, B3:B2
+ lddw .d2t2 *++B15, B1:B0
+ lddw .d2t2 *++B15, B5:B4
+ lddw .d2t2 *++B15, B7:B6
+ lddw .d2t1 *++B15, A1:A0
+ lddw .d2t1 *++B15, A7:A6
+|| b .s2 B3
+ ldw .d2t1 *++B15[2], A2
+ nop 4
+#endif
+
+#endif
+
diff --git a/gcc-4.9/libgcc/config/c6x/libgcc-eabi.ver b/gcc-4.9/libgcc/config/c6x/libgcc-eabi.ver
new file mode 100644
index 000000000..01bff9447
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/libgcc-eabi.ver
@@ -0,0 +1,103 @@
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_4.7.0 {
+ __c6xabi_strasgi
+ __c6xabi_call_stub
+ __c6xabi_mpyll
+ __c6xabi_negll
+ __c6xabi_llshru
+ __c6xabi_llshl
+ __c6xabi_llshr
+ __c6xabi_fixfu
+ __c6xabi_fixdu
+ __c6xabi_fixflli
+ __c6xabi_fixdlli
+ __c6xabi_fixfull
+ __c6xabi_fixdull
+ __c6xabi_fltllif
+ __c6xabi_fltllid
+ __c6xabi_fltullf
+ __c6xabi_fltulld
+ __c6xabi_divlli
+ __c6xabi_remlli
+ __c6xabi_divull
+ __c6xabi_remull
+ __c6xabi_divremull
+ __c6xabi_gef
+ __c6xabi_gtf
+ __c6xabi_lef
+ __c6xabi_ltf
+ __c6xabi_eqf
+ __c6xabi_ged
+ __c6xabi_gtd
+ __c6xabi_led
+ __c6xabi_ltd
+ __c6xabi_eqd
+ __c6xabi_addf
+ __c6xabi_divf
+ __c6xabi_neqf
+ __c6xabi_cmpf
+ __c6xabi_mpyf
+ __c6xabi_negf
+ __c6xabi_subf
+ __c6xabi_unordf
+ __c6xabi_fixfi
+ __c6xabi_fltif
+ __c6xabi_fltuf
+ __c6xabi_addd
+ __c6xabi_divd
+ __c6xabi_neqd
+ __c6xabi_cmpd
+ __c6xabi_mpyd
+ __c6xabi_negd
+ __c6xabi_subd
+ __c6xabi_unordd
+ __c6xabi_fixdi
+ __c6xabi_fltid
+ __c6xabi_fltud
+ __c6xabi_cvtfd
+ __c6xabi_cvtdf
+ __c6xabi_mulcf
+ __c6xabi_mulcd
+ __c6xabi_divcf
+ __c6xabi_divcd
+
+ __gnu_ltsf2
+ __gnu_ltdf2
+ __gnu_gesf2
+ __gnu_gedf2
+ __gnu_gtsf2
+ __gnu_gtdf2
+ __gnu_eqsf2
+ __gnu_eqdf2
+
+ # Exception-Handling
+ _Unwind_Complete
+ _Unwind_VRS_Get
+ _Unwind_VRS_Set
+ _Unwind_VRS_Pop
+ __c6xabi_unwind_cpp_pr0
+ __c6xabi_unwind_cpp_pr1
+ __c6xabi_unwind_cpp_pr2
+ __c6xabi_unwind_cpp_pr3
+ __c6xabi_unwind_cpp_pr4
+ # The libstdc++ exception-handling personality routine uses this
+ # GNU-specific entry point.
+ __gnu_unwind_frame
+}
diff --git a/gcc-4.9/libgcc/config/c6x/libunwind.S b/gcc-4.9/libgcc/config/c6x/libunwind.S
new file mode 100644
index 000000000..7e6498378
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/libunwind.S
@@ -0,0 +1,133 @@
+.text
+.macro do_call fn
+#ifdef _TMS320C6400_PLUS
+ callp .s2 (\fn), B3
+#elif defined(_TMS320C6400)
+ call .s2 (\fn)
+ addkpc .s2 9f, B3, 0
+ nop 4
+9f:
+#else
+ call .s2 (\fn)
+ mhkl .s2 9f, B3
+ mhkh .s2 9f, B3
+ nop 3
+9f:
+#endif
+.endm
+.align 2
+.global restore_core_regs
+.type restore_core_regs, STT_FUNC
+restore_core_regs:
+ mv .s2x A4, B4
+ ldw .d1t1 *+A4[0], A0
+ || ldw .d2t2 *++B4[16], B0
+ ldw .d1t1 *+A4[1], A1
+ || ldw .d2t2 *+B4[1], B1
+ ldw .d1t1 *+A4[2], A2
+ || ldw .d2t2 *+B4[2], B2
+ ldw .d1t1 *+A4[3], A3
+ || ldw .d2t2 *+B4[3], B3
+ ;; Base registers are loaded later
+ ldw .d1t1 *+A4[5], A5
+ || ldw .d2t2 *+B4[5], B5
+ ldw .d1t1 *+A4[6], A6
+ || ldw .d2t2 *+B4[6], B6
+ ldw .d1t1 *+A4[7], A7
+ || ldw .d2t2 *+B4[7], B7
+ ldw .d1t1 *+A4[8], A8
+ || ldw .d2t2 *+B4[8], B8
+ ldw .d1t1 *+A4[9], A9
+ || ldw .d2t2 *+B4[9], B9
+ ;; load PC into B10 so that it is ready for the branch
+ ldw .d2t2 *+B4[16], B10
+ ldw .d1t1 *+A4[11], A11
+ || ldw .d2t2 *+B4[11], B11
+ ldw .d1t1 *+A4[12], A12
+ || ldw .d2t2 *+B4[12], B12
+ ldw .d1t1 *+A4[13], A13
+ || ldw .d2t2 *+B4[13], B13
+ ldw .d1t1 *+A4[14], A14
+ || ldw .d2t2 *+B4[14], B14
+ ;; Loads have 4 delay slots. Take advantage of this to restore the
+ ;; scratch registers and stack pointer before the base registers
+ ;; disappear. We also need to make sure no interrupts occur,
+ ;; so put the whole thing in the delay slots of a dummy branch
+ ;; We can not move the ret earlier as that would cause it to occur
+ ;; before the last load completes
+ b .s1 (1f)
+ ldw .d1t1 *+A4[4], A4
+ || ldw .d2t2 *+B4[4], B4
+ ldw .d1t1 *+A4[15], A15
+ || ldw .d2t2 *+B4[15], B15
+ ret .s2 B10
+ ldw .d1t1 *+A4[10], A10
+ || ldw .d2t2 *+B4[10], B10
+ nop 1
+1:
+ nop 3
+.size restore_core_regs, . - restore_core_regs
+
+.macro UNWIND_WRAPPER name argreg argside
+.global \name
+.type \name, STT_FUNC
+\name:
+ # Create saved register state: flags,A0-A15,B0-B15,PC = 136 bytes.
+ # Plus 4 (rounded to 8) for saving return.
+ addk .s2 -144, B15
+ stw .d2t1 A0, *+B15[2]
+ stw .d2t1 A1, *+B15[3]
+ stw .d2t1 A2, *+B15[4]
+ stw .d2t1 A3, *+B15[5]
+ stw .d2t1 A4, *+B15[6]
+ stw .d2t1 A5, *+B15[7]
+ stw .d2t1 A6, *+B15[8]
+ stw .d2t1 A7, *+B15[9]
+ stw .d2t1 A8, *+B15[10]
+ stw .d2t1 A9, *+B15[11]
+ stw .d2t1 A10, *+B15[12]
+ stw .d2t1 A11, *+B15[13]
+ stw .d2t1 A12, *+B15[14]
+ stw .d2t1 A13, *+B15[15]
+ stw .d2t1 A14, *+B15[16]
+ stw .d2t1 A15, *+B15[17]
+ mv .s1x B15, A0
+ addk .s1 144, A0
+ stw .d2t2 B0, *+B15[18]
+ stw .d2t2 B1, *+B15[19]
+ stw .d2t2 B2, *+B15[20]
+ stw .d2t2 B3, *+B15[21]
+ stw .d2t2 B4, *+B15[22]
+ stw .d2t2 B5, *+B15[23]
+ stw .d2t2 B6, *+B15[24]
+ stw .d2t2 B7, *+B15[25]
+ stw .d2t2 B8, *+B15[26]
+ stw .d2t2 B9, *+B15[27]
+ stw .d2t2 B10, *+B15[28]
+ stw .d2t2 B11, *+B15[29]
+ stw .d2t2 B12, *+B15[30]
+ stw .d2t2 B13, *+B15[31]
+ stw .d2t2 B14, *+B15[32]
+ stw .d2t1 A0, *+B15[33]
+ stw .d2t1 A0, *+B15[34]
+ # Zero demand saved flags
+ mvk .s1 0, A0
+ stw .d2t1 A0, *+B15[1]
+ # Save return address, setup additional argument and call function
+ stw .d2t2 B3, *+B15[35]
+ add .d\argside B15, 4, \argreg
+ do_call __gnu\name
+ # Restore stack and return
+ ldw .d2t2 *+B15[35], B3
+ addk .s2 144, B15
+ nop 3
+ ret .s2 B3
+ nop 5
+.size \name, . - \name
+.endm
+
+UNWIND_WRAPPER _Unwind_RaiseException B4 2
+UNWIND_WRAPPER _Unwind_Resume B4 2
+UNWIND_WRAPPER _Unwind_Resume_or_Rethrow B4 2
+UNWIND_WRAPPER _Unwind_ForcedUnwind B6 2
+UNWIND_WRAPPER _Unwind_Backtrace A6 1x
diff --git a/gcc-4.9/libgcc/config/c6x/ltd.c b/gcc-4.9/libgcc/config/c6x/ltd.c
new file mode 100644
index 000000000..ca8148fcd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/ltd.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a < b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/double.h>
+
+CMPtype __c6xabi_ltd(DFtype a, DFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_D(A); FP_DECL_D(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_D(A, a);
+ FP_UNPACK_RAW_D(B, b);
+ FP_CMP_D(r, A, B, 2);
+ if (r == 2 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r < 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/ltf.c b/gcc-4.9/libgcc/config/c6x/ltf.c
new file mode 100644
index 000000000..ab7080baa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/ltf.c
@@ -0,0 +1,47 @@
+/* Software floating-point emulation.
+ Return 1 iff a < b, 0 otherwise.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@cygnus.com) and
+ Jakub Jelinek (jj@ultra.linux.cz).
+
+ This file is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#include <soft-fp/soft-fp.h>
+#include <soft-fp/single.h>
+
+CMPtype __c6xabi_ltf(SFtype a, SFtype b)
+{
+ FP_DECL_EX;
+ FP_DECL_S(A); FP_DECL_S(B);
+ CMPtype r;
+
+ FP_UNPACK_RAW_S(A, a);
+ FP_UNPACK_RAW_S(B, b);
+ FP_CMP_S(r, A, B, 2);
+ if (r == 2 && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B)))
+ FP_SET_EXCEPTION(FP_EX_INVALID);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r < 0;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/pr-support.c b/gcc-4.9/libgcc/config/c6x/pr-support.c
new file mode 100644
index 000000000..99f44d397
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/pr-support.c
@@ -0,0 +1,535 @@
+/* C6X ABI compliant unwinding routines
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "unwind.h"
+
+/* We add a prototype for abort here to avoid creating a dependency on
+ target headers. */
+extern void abort (void);
+
+typedef struct _ZSt9type_info type_info; /* This names C++ type_info type */
+
+/* Misc constants. */
+#define R_A0 0
+#define R_A1 1
+#define R_A2 2
+#define R_A3 3
+#define R_A4 4
+#define R_A5 5
+#define R_A6 6
+#define R_A7 7
+#define R_A8 8
+#define R_A9 9
+#define R_A10 10
+#define R_A11 11
+#define R_A12 12
+#define R_A13 13
+#define R_A14 14
+#define R_A15 15
+#define R_B0 16
+#define R_B1 17
+#define R_B2 18
+#define R_B3 19
+#define R_B4 20
+#define R_B5 21
+#define R_B6 22
+#define R_B7 23
+#define R_B8 24
+#define R_B9 25
+#define R_B10 26
+#define R_B11 27
+#define R_B12 28
+#define R_B13 29
+#define R_B14 30
+#define R_B15 31
+
+#define R_SP R_B15
+#define R_PC 33
+
+#define uint32_highbit (((_uw) 1) << 31)
+
+void __attribute__((weak)) __cxa_call_unexpected(_Unwind_Control_Block *ucbp);
+
+/* Unwind descriptors. */
+
+typedef struct
+{
+ _uw16 length;
+ _uw16 offset;
+} EHT16;
+
+typedef struct
+{
+ _uw length;
+ _uw offset;
+} EHT32;
+
+/* Calculate the address encoded by a 31-bit self-relative offset at address
+ P. Copy of routine in unwind-arm.c. */
+
+static inline _uw
+selfrel_offset31 (const _uw *p)
+{
+ _uw offset;
+
+ offset = *p;
+ /* Sign extend to 32 bits. */
+ if (offset & (1 << 30))
+ offset |= 1u << 31;
+
+ return offset + (_uw) p;
+}
+
+
+/* Personality routine helper functions. */
+
+#define CODE_FINISH (0xe7)
+
+/* Return the next byte of unwinding information, or CODE_FINISH if there is
+ no data remaining. */
+static inline _uw8
+next_unwind_byte (__gnu_unwind_state * uws)
+{
+ _uw8 b;
+
+ if (uws->bytes_left == 0)
+ {
+ /* Load another word */
+ if (uws->words_left == 0)
+ return CODE_FINISH; /* Nothing left. */
+ uws->words_left--;
+ uws->data = *(uws->next++);
+ uws->bytes_left = 3;
+ }
+ else
+ uws->bytes_left--;
+
+ /* Extract the most significant byte. */
+ b = (uws->data >> 24) & 0xff;
+ uws->data <<= 8;
+ return b;
+}
+
+static void
+unwind_restore_pair (_Unwind_Context * context, int reg, _uw *ptr)
+{
+#ifdef _BIG_ENDIAN
+ _Unwind_VRS_Set (context, _UVRSC_CORE, reg, _UVRSD_UINT32, ptr + 1);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, reg + 1, _UVRSD_UINT32, ptr);
+#else
+ _Unwind_VRS_Set (context, _UVRSC_CORE, reg, _UVRSD_UINT32, ptr);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, reg + 1, _UVRSD_UINT32, ptr + 1);
+#endif
+}
+
+static const int
+unwind_frame_regs[13] =
+{
+ R_A15, R_B15, R_B14, R_B13, R_B12, R_B11, R_B10, R_B3,
+ R_A14, R_A13, R_A12, R_A11, R_A10
+};
+
+static void
+pop_compact_frame (_Unwind_Context * context, _uw mask, _uw *ptr, int inc_sp)
+{
+ int size;
+ _uw test;
+ int i, regno, nregs;
+
+ size = 0;
+ nregs = __builtin_popcount (mask);
+ for (i = 0; i < 13; i++)
+ {
+ test = 1 << i;
+ if ((mask & test) == 0)
+ continue;
+
+ regno = unwind_frame_regs[12 - i];
+
+ if (i < 12 && nregs > 2
+ && (mask & (test << 1)) != 0
+ && unwind_frame_regs[11 - i] == regno + 1
+ && (regno & 1) == 0)
+ {
+ i++;
+ nregs--;
+ }
+
+ nregs--;
+ size += 2;
+ }
+
+ if (!inc_sp)
+ ptr -= size;
+
+ /* SP points just past the end of the stack. */
+ ptr += 2;
+ nregs = __builtin_popcount (mask);
+ for (i = 0; i < 13; i++)
+ {
+ test = 1 << i;
+ if ((mask & test) == 0)
+ continue;
+
+ regno = unwind_frame_regs[12 - i];
+
+ if (i < 12 && nregs > 2
+ && (mask & (test << 1)) != 0
+ && unwind_frame_regs[11 - i] == regno + 1
+ && (regno & 1) == 0)
+ {
+ /* Register pair. */
+ unwind_restore_pair (context, regno, ptr);
+ i++;
+ nregs--;
+ }
+ else
+ {
+ /* Single register with padding. */
+ _Unwind_VRS_Set (context, _UVRSC_CORE, regno, _UVRSD_UINT32, ptr);
+ }
+
+ nregs--;
+ ptr += 2;
+ }
+
+ ptr -= 2;
+ if ((mask & (1 << 11)) == 0)
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+}
+
+static void
+pop_frame (_Unwind_Context * context, _uw mask, _uw *ptr, int inc_sp)
+{
+ int i;
+ int regno;
+ int nregs;
+
+ nregs = __builtin_popcount (mask);
+
+ if (!inc_sp)
+ ptr -= nregs;
+ else if (nregs & 1)
+ ptr++;
+
+ ptr++;
+ for (i = 0; i < 13; i++)
+ {
+ if ((mask & (1 << i)) == 0)
+ continue;
+ regno = unwind_frame_regs[12 - i];
+ if (i < 12 && unwind_frame_regs[11 - i] == (regno + 1)
+ && (mask & (1 << (i + 1))) != 0
+ && (((_uw)ptr) & 4) == 0
+ && (regno & 1) == 0)
+ {
+ unwind_restore_pair (context, regno, ptr);
+ i++;
+ ptr += 2;
+ }
+ else
+ {
+ _Unwind_VRS_Set (context, _UVRSC_CORE, regno, _UVRSD_UINT32,
+ ptr);
+ ptr++;
+ }
+ }
+
+ ptr--;
+ if ((mask & (1 << 11)) == 0)
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+}
+
+/* Unwind a 24-bit encoded frame. */
+_Unwind_Reason_Code
+__gnu_unwind_24bit (_Unwind_Context * context, _uw data, int compact)
+{
+ _uw offset;
+ _uw mask;
+ _uw *ptr;
+ _uw tmp;
+ int ret_reg = unwind_frame_regs[data & 0xf];
+
+ if (ret_reg != R_B3)
+ {
+ _Unwind_VRS_Get (context, _UVRSC_CORE, unwind_frame_regs[data & 0xf],
+ _UVRSD_UINT32, &tmp);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, &tmp);
+ }
+
+ mask = (data >> 4) & 0x1fff;
+
+ offset = (data >> 17) & 0x7f;
+ if (offset == 0x7f)
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_A15, _UVRSD_UINT32, &ptr);
+ else
+ {
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+ ptr += offset * 2;
+ }
+
+
+ if (compact)
+ pop_compact_frame (context, mask, ptr, offset != 0x7f);
+ else
+ pop_frame (context, mask, ptr, offset != 0x7f);
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, &tmp);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_PC, _UVRSD_UINT32, &tmp);
+
+ return _URC_OK;
+}
+
+static void
+unwind_pop_rts (_Unwind_Context * context)
+{
+ _uw *ptr;
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+#ifdef _BIG_ENDIAN
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, ptr + 1);
+#else
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, ptr + 2);
+#endif
+ ptr += 3;
+ unwind_restore_pair (context, R_A10, ptr);
+ ptr += 2;
+ unwind_restore_pair (context, R_B10, ptr);
+ ptr += 2;
+ unwind_restore_pair (context, R_A12, ptr);
+ ptr += 2;
+ unwind_restore_pair (context, R_B12, ptr);
+ ptr += 2;
+ unwind_restore_pair (context, R_A14, ptr);
+ ptr += 2;
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_B14, _UVRSD_UINT32, ptr);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+ /* PC will be set by implicit RETURN opcode. */
+}
+
+/* Execute the unwinding instructions described by UWS. */
+_Unwind_Reason_Code
+__gnu_unwind_execute (_Unwind_Context * context, __gnu_unwind_state * uws)
+{
+ _uw op;
+ int inc_sp;
+ _uw reg;
+ _uw *ptr;
+
+ inc_sp = 1;
+ for (;;)
+ {
+ op = next_unwind_byte (uws);
+ if (op == CODE_FINISH)
+ {
+ /* Drop out of the loop. */
+ break;
+ }
+ if ((op & 0xc0) == 0)
+ {
+ /* sp += (imm6 << 3) + 8. */
+ _uw offset;
+
+ offset = ((op & 0x3f) << 3) + 8;
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ reg += offset;
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ continue;
+ }
+
+ if (op == 0xd2)
+ {
+ /* vsp = vsp + 0x204 + (uleb128 << 2). */
+ int shift;
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ op = next_unwind_byte (uws);
+ shift = 3;
+ while (op & 0x80)
+ {
+ reg += ((op & 0x7f) << shift);
+ shift += 7;
+ op = next_unwind_byte (uws);
+ }
+ reg += ((op & 0x7f) << shift) + 0x408;
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ continue;
+ }
+
+ if ((op & 0xe0) == 0x80)
+ {
+ /* POP bitmask */
+ _uw mask = ((op & 0x1f) << 8) | next_unwind_byte (uws);
+
+ if (mask == 0)
+ {
+ /* CANTUNWIND */
+ return _URC_FAILURE;
+ }
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+ pop_frame (context, mask, ptr, inc_sp);
+ continue;
+ }
+
+ if ((op & 0xe0) == 0xa0)
+ {
+ /* POP bitmask (compact) */
+ _uw mask = ((op & 0x1f) << 8) | next_unwind_byte (uws);
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+ pop_compact_frame (context, mask, ptr, inc_sp);
+ continue;
+ }
+
+ if ((op & 0xf0) == 0xc0)
+ {
+ /* POP registers */
+ int nregs = op & 0xf;
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &ptr);
+ while (nregs > 0)
+ {
+ op = next_unwind_byte (uws);
+ if ((op >> 4) != 0xf)
+ {
+ reg = unwind_frame_regs[op >> 4];
+ _Unwind_VRS_Set (context, _UVRSC_CORE, reg, _UVRSD_UINT32,
+ ptr);
+ nregs--;
+ }
+ ptr--;
+ if ((op & 0xf) != 0xf)
+ {
+ reg = unwind_frame_regs[op & 0xf];
+ _Unwind_VRS_Set (context, _UVRSC_CORE, reg, _UVRSD_UINT32,
+ ptr);
+ nregs--;
+ }
+ ptr--;
+ }
+
+ continue;
+ }
+
+ if (op == 0xd0)
+ {
+ /* MV FP, SP */
+ inc_sp = 0;
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_A15, _UVRSD_UINT32, &reg);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_SP, _UVRSD_UINT32, &reg);
+ continue;
+ }
+
+ if (op == 0xd1)
+ {
+ /* __cx6abi_pop_rts */
+ unwind_pop_rts (context);
+ break;
+ }
+
+ if ((op & 0xf0) == 0xe0)
+ {
+ /* B3 = reg. RETURN case alreadh handled above. */
+ int regno = unwind_frame_regs[op & 0xf];
+
+ _Unwind_VRS_Get (context, _UVRSC_CORE, regno, _UVRSD_UINT32, &reg);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, &reg);
+ continue;
+ }
+
+ /* Reserved. */
+ return _URC_FAILURE;
+ }
+
+ /* Implicit RETURN. */
+ _Unwind_VRS_Get (context, _UVRSC_CORE, R_B3, _UVRSD_UINT32, &reg);
+ _Unwind_VRS_Set (context, _UVRSC_CORE, R_PC, _UVRSD_UINT32, &reg);
+ return _URC_OK;
+}
+
+
+/* Execute the unwinding instructions associated with a frame. UCBP and
+ CONTEXT are the current exception object and virtual CPU state
+ respectively. */
+
+_Unwind_Reason_Code
+__gnu_unwind_frame (_Unwind_Control_Block * ucbp, _Unwind_Context * context)
+{
+ _uw *ptr;
+ __gnu_unwind_state uws;
+
+ ptr = (_uw *) ucbp->pr_cache.ehtp;
+ /* Skip over the personality routine address. */
+ ptr++;
+ /* Setup the unwinder state. */
+ uws.data = (*ptr) << 8;
+ uws.next = ptr + 1;
+ uws.bytes_left = 3;
+ uws.words_left = ((*ptr) >> 24) & 0xff;
+
+ return __gnu_unwind_execute (context, &uws);
+}
+
+/* Data segment base pointer corresponding to the function catching
+ the exception. */
+
+_Unwind_Ptr
+_Unwind_GetDataRelBase (_Unwind_Context *context)
+{
+ return _Unwind_GetGR (context, R_B14);
+}
+
+/* This should never be used. */
+
+_Unwind_Ptr
+_Unwind_GetTextRelBase (_Unwind_Context *context __attribute__ ((unused)))
+{
+ abort ();
+}
+
+/* Only used by gcc personality routines, so can rely on a value they hid
+ there earlier. */
+_Unwind_Ptr
+_Unwind_GetRegionStart (_Unwind_Context *context)
+{
+ _Unwind_Control_Block *ucbp;
+
+ ucbp = (_Unwind_Control_Block *) _Unwind_GetGR (context, UNWIND_POINTER_REG);
+ return (_Unwind_Ptr) ucbp->pr_cache.fnstart;
+}
+
+void *
+_Unwind_GetLanguageSpecificData (_Unwind_Context *context)
+{
+ _Unwind_Control_Block *ucbp;
+ _uw *ptr;
+
+ ucbp = (_Unwind_Control_Block *) _Unwind_GetGR (context, UNWIND_POINTER_REG);
+ ptr = (_uw *) ucbp->pr_cache.ehtp;
+ /* Skip the personality routine address. */
+ ptr++;
+ /* Skip the unwind opcodes. */
+ ptr += (((*ptr) >> 24) & 0xff) + 1;
+
+ return ptr;
+}
diff --git a/gcc-4.9/libgcc/config/c6x/sfp-machine.h b/gcc-4.9/libgcc/config/c6x/sfp-machine.h
new file mode 100644
index 000000000..9b7a02e9f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/sfp-machine.h
@@ -0,0 +1,124 @@
+/* Soft-FP definitions for TI C6X.
+ Copyright (C) 2010-2014 Free Software Foundation, Inc.
+
+ This files is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with GCC; see the file COPYING.LIB. If not see
+ <http://www.gnu.org/licenses/>. */
+
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_H ((_FP_QNANBIT_H << 1) - 1)
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_H 0
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined _BIG_ENDIAN
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
+/* Rename helper functions to the names specified in the C6000 ELF ABI. */
+#define __fixdfsi __c6xabi_fixdi
+#define __fixsfsi __c6xabi_fixfi
+#define __floatsidf __c6xabi_fltid
+#define __floatunsidf __c6xabi_fltud
+#define __floatsisf __c6xabi_fltif
+#define __floatunsisf __c6xabi_fltuf
+#define __truncdfsf2 __c6xabi_cvtdf
+#define __extendsfdf2 __c6xabi_cvtfd
+#define __adddf3 __c6xabi_addd
+#define __subdf3 __c6xabi_subd
+#define __muldf3 __c6xabi_mpyd
+#define __divdf3 __c6xabi_divd
+#define __negdf2 __c6xabi_negd
+#define __absdf2 __c6xabi_absd
+#define __addsf3 __c6xabi_addf
+#define __subsf3 __c6xabi_subf
+#define __mulsf3 __c6xabi_mpyf
+#define __divsf3 __c6xabi_divf
+#define __negsf2 __c6xabi_negf
+#define __abssf2 __c6xabi_absf
+#define __lesf2 __c6xabi_cmpf
+#define __ledf2 __c6xabi_cmpd
+#define __ltsf2 __gnu_ltsf2
+#define __ltdf2 __gnu_ltdf2
+#define __gesf2 __gnu_gesf2
+#define __gedf2 __gnu_gedf2
+#define __gtsf2 __gnu_gtsf2
+#define __gtdf2 __gnu_gtdf2
+#define __eqsf2 __gnu_eqsf2
+#define __eqdf2 __gnu_eqdf2
+#define __nesf2 __c6xabi_neqf
+#define __nedf2 __c6xabi_neqd
+#define __unordsf2 __c6xabi_unordf
+#define __unorddf2 __c6xabi_unordd
diff --git a/gcc-4.9/libgcc/config/c6x/t-elf b/gcc-4.9/libgcc/config/c6x/t-elf
new file mode 100644
index 000000000..338571d1b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/t-elf
@@ -0,0 +1,40 @@
+# Cannot use default rules due to $(CRTSTUFF_T_CFLAGS).
+CUSTOM_CRTIN = yes
+
+LIB1ASMSRC = c6x/lib1funcs.S
+LIB1ASMFUNCS = _divsi3 _udivsi3 _umodsi3 _modsi3 _udivmodsi4 _divmodsi4
+LIB1ASMFUNCS += _strasgi _strasgi_64plus _clzsi2 _clzdi2 _clz
+LIB1ASMFUNCS += _push_rts _pop_rts _call_stub
+
+LIB2FUNCS_EXCLUDE = _cmpdi2 _ucmpdi2 _gcc_bcmp _eprintf _clzsi _clzdi
+
+LIB2ADD += $(srcdir)/config/c6x/gef.c \
+ $(srcdir)/config/c6x/gtf.c \
+ $(srcdir)/config/c6x/lef.c \
+ $(srcdir)/config/c6x/ltf.c \
+ $(srcdir)/config/c6x/eqf.c \
+ $(srcdir)/config/c6x/ged.c \
+ $(srcdir)/config/c6x/gtd.c \
+ $(srcdir)/config/c6x/led.c \
+ $(srcdir)/config/c6x/ltd.c \
+ $(srcdir)/config/c6x/eqd.c
+
+# Avoid failures when the user's GOT becomes too large.
+HOST_LIBGCC2_CFLAGS += -msdata=none
+
+LIB2ADDEH = $(srcdir)/config/c6x/unwind-c6x.c \
+ $(srcdir)/config/c6x/libunwind.S \
+ $(srcdir)/config/c6x/pr-support.c $(srcdir)/unwind-c.c
+
+# Assemble startup files.
+crti.o: $(srcdir)/config/c6x/crti.S
+ $(crt_compile) -c $(CRTSTUFF_T_CFLAGS) $<
+
+crtn.o: $(srcdir)/config/c6x/crtn.S
+ $(crt_compile) -c $(CRTSTUFF_T_CFLAGS) $<
+
+# Avoid failures when the user's GOT becomes too large.
+CRTSTUFF_T_CFLAGS = -msdata=none
+CRTSTUFF_T_CFLAGS_S = -msdata=none
+
+SHLIB_MAPFILES += $(srcdir)/config/c6x/libgcc-eabi.ver
diff --git a/gcc-4.9/libgcc/config/c6x/t-uclinux b/gcc-4.9/libgcc/config/c6x/t-uclinux
new file mode 100644
index 000000000..72a170a57
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/t-uclinux
@@ -0,0 +1,3 @@
+HOST_LIBGCC2_CFLAGS += -msdata=none
+
+CRTSTUFF_T_CFLAGS += $(PICFLAG)
diff --git a/gcc-4.9/libgcc/config/c6x/unwind-c6x.c b/gcc-4.9/libgcc/config/c6x/unwind-c6x.c
new file mode 100644
index 000000000..bf5155c00
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/unwind-c6x.c
@@ -0,0 +1,224 @@
+/* C6X EABI compliant unwinding routines.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "unwind.h"
+
+/* Misc constants. */
+#define NUM_SAVED_REGS 32
+#define R_B0 16
+#define R_B3 (R_B0 + 3)
+#define R_B15 (R_B0 + 15)
+#define R_SP R_B15
+#define R_LR R_B3
+#define R_PC 33
+
+#define VRS_PC(vrs) ((vrs)->core.pc)
+#define VRS_SP(vrs) ((vrs)->core.reg[R_SP])
+#define VRS_RETURN(vrs) ((vrs)->core.reg[R_B3])
+
+struct core_regs
+{
+ _uw reg[NUM_SAVED_REGS];
+ _uw pc;
+};
+
+typedef struct
+{
+ /* The first fields must be the same as a phase2_vrs. */
+ _uw demand_save_flags; /* Currently always zero. */
+ struct core_regs core;
+ _uw prev_sp; /* Only valid during forced unwinding. */
+} phase1_vrs;
+
+/* This must match the structure created by the assembly wrappers. */
+typedef struct
+{
+ _uw demand_save_flags;
+ struct core_regs core;
+} phase2_vrs;
+
+/* Coprocessor register state manipulation functions. */
+
+/* Restore coprocessor state after phase1 unwinding. */
+static void
+restore_non_core_regs (phase1_vrs * vrs __attribute__((unused)))
+{
+}
+
+#include "unwind-arm-common.inc"
+
+/* ABI defined personality routines. */
+extern _Unwind_Reason_Code __c6xabi_unwind_cpp_pr0 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *);// __attribute__((weak));
+extern _Unwind_Reason_Code __c6xabi_unwind_cpp_pr1 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *) __attribute__((weak));
+extern _Unwind_Reason_Code __c6xabi_unwind_cpp_pr2 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *) __attribute__((weak));
+extern _Unwind_Reason_Code __c6xabi_unwind_cpp_pr3 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *) __attribute__((weak));
+extern _Unwind_Reason_Code __c6xabi_unwind_cpp_pr4 (_Unwind_State,
+ _Unwind_Control_Block *, _Unwind_Context *) __attribute__((weak));
+
+/* ABI defined routine to store a virtual register to memory. */
+
+_Unwind_VRS_Result _Unwind_VRS_Get (_Unwind_Context *context,
+ _Unwind_VRS_RegClass regclass,
+ _uw regno,
+ _Unwind_VRS_DataRepresentation representation,
+ void *valuep)
+{
+ phase1_vrs *vrs = (phase1_vrs *) context;
+
+ switch (regclass)
+ {
+ case _UVRSC_CORE:
+ if (representation != _UVRSD_UINT32)
+ return _UVRSR_FAILED;
+ if (regno == R_PC)
+ {
+ *(_uw *) valuep = vrs->core.pc;
+ return _UVRSR_OK;
+ }
+ if (regno >= NUM_SAVED_REGS)
+ return _UVRSR_FAILED;
+ *(_uw *) valuep = vrs->core.reg[regno];
+ return _UVRSR_OK;
+
+ default:
+ return _UVRSR_FAILED;
+ }
+}
+
+
+/* ABI defined function to load a virtual register from memory. */
+
+_Unwind_VRS_Result _Unwind_VRS_Set (_Unwind_Context *context,
+ _Unwind_VRS_RegClass regclass,
+ _uw regno,
+ _Unwind_VRS_DataRepresentation representation,
+ void *valuep)
+{
+ phase1_vrs *vrs = (phase1_vrs *) context;
+
+ switch (regclass)
+ {
+ case _UVRSC_CORE:
+ if (representation != _UVRSD_UINT32)
+ return _UVRSR_FAILED;
+ if (regno == R_PC)
+ {
+ vrs->core.pc = *(_uw *) valuep;
+ return _UVRSR_OK;
+ }
+ if (regno >= NUM_SAVED_REGS)
+ return _UVRSR_FAILED;
+
+ vrs->core.reg[regno] = *(_uw *) valuep;
+ return _UVRSR_OK;
+
+ default:
+ return _UVRSR_FAILED;
+ }
+}
+
+
+/* Core unwinding functions. */
+
+/* Calculate the address encoded by a 31-bit self-relative offset at address
+ P. */
+static inline _uw
+selfrel_offset31 (const _uw *p)
+{
+ _uw offset;
+
+ offset = *p << 1;
+ return offset + (_uw) p;
+}
+
+
+static _uw
+__gnu_unwind_get_pr_addr (int idx)
+{
+ switch (idx)
+ {
+ case 0:
+ return (_uw) &__c6xabi_unwind_cpp_pr0;
+
+ case 1:
+ return (_uw) &__c6xabi_unwind_cpp_pr1;
+
+ case 2:
+ return (_uw) &__c6xabi_unwind_cpp_pr2;
+
+ case 3:
+ return (_uw) &__c6xabi_unwind_cpp_pr3;
+
+ case 4:
+ return (_uw) &__c6xabi_unwind_cpp_pr4;
+
+ default:
+ return 0;
+ }
+}
+
+
+/* ABI defined personality routine entry points. */
+
+_Unwind_Reason_Code
+__c6xabi_unwind_cpp_pr0 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 0);
+}
+
+_Unwind_Reason_Code
+__c6xabi_unwind_cpp_pr1 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 1);
+}
+
+_Unwind_Reason_Code
+__c6xabi_unwind_cpp_pr2 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 2);
+}
+
+_Unwind_Reason_Code
+__c6xabi_unwind_cpp_pr3 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 3);
+}
+
+_Unwind_Reason_Code
+__c6xabi_unwind_cpp_pr4 (_Unwind_State state,
+ _Unwind_Control_Block *ucbp,
+ _Unwind_Context *context)
+{
+ return __gnu_unwind_pr_common (state, ucbp, context, 4);
+}
diff --git a/gcc-4.9/libgcc/config/c6x/unwind-c6x.h b/gcc-4.9/libgcc/config/c6x/unwind-c6x.h
new file mode 100644
index 000000000..258a035b8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/c6x/unwind-c6x.h
@@ -0,0 +1,70 @@
+/* Header file for the C6X EABI unwinder
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Language-independent unwinder header public defines. This contains both
+ ABI defined objects, and GNU support routines. */
+
+#ifndef UNWIND_C6X_H
+#define UNWIND_C6X_H
+
+/* Not really the ARM EABI, but pretty close. */
+#include "unwind-arm-common.h"
+
+#define UNWIND_STACK_REG 31
+/* Use A0 as a scratch register within the personality routine. */
+#define UNWIND_POINTER_REG 0
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ _Unwind_Reason_Code __gnu_unwind_24bit (_Unwind_Context *, _uw, int);
+
+ /* Decode an EH table reference to a typeinfo object. */
+ static inline _Unwind_Word
+ _Unwind_decode_typeinfo_ptr (_Unwind_Ptr base, _Unwind_Word ptr)
+ {
+ _Unwind_Word tmp;
+
+ tmp = *(_Unwind_Word *) ptr;
+ /* Zero values are always NULL. */
+ if (!tmp)
+ return 0;
+
+ /* SB-relative indirect. Propagate the bottom 2 bits, which can
+ contain referenceness information in gnu unwinding tables. */
+ tmp += base;
+ tmp = *(_Unwind_Word *) (tmp & ~(_Unwind_Word)3) | (tmp & 3);
+ return tmp;
+ }
+
+#define _Unwind_GetIP(context) \
+ (_Unwind_GetGR (context, 33))
+
+
+#define _Unwind_SetIP(context, val) \
+ _Unwind_SetGR (context, 33, val)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* defined UNWIND_ARM_H */
diff --git a/gcc-4.9/libgcc/config/cr16/crti.S b/gcc-4.9/libgcc/config/cr16/crti.S
new file mode 100644
index 000000000..00defab6f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/crti.S
@@ -0,0 +1,54 @@
+# Specialized code needed to support construction and destruction of
+# file-scope objects in C++ and Java code, and to support exception handling.
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by KPIT Cummins Infosystems Limited.
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+/* This file just supplies function prologues for the .init and .fini
+ sections. It is linked in before crtbegin.o. */
+
+ .ident "GNU C crti.o"
+
+ .section .init
+ .globl __init
+ .type __init,@function
+__init:
+#if defined (__ID_SHARED_LIB__)
+ push $2, r12, ra
+ movd $__current_shared_library_r12_offset_, (r1,r0)
+ loadd [r12]0(r1,r0), (r12)
+#else
+ push ra
+#endif
+
+ .section .fini
+ .globl __fini
+ .type __fini,@function
+__fini:
+#if defined (__ID_SHARED_LIB__)
+ push $2, r12, ra
+ movd $__current_shared_library_r12_offset_, (r1,r0)
+ loadd [r12]0(r1,r0), (r12)
+#else
+ push ra
+#endif
+
diff --git a/gcc-4.9/libgcc/config/cr16/crtlibid.S b/gcc-4.9/libgcc/config/cr16/crtlibid.S
new file mode 100644
index 000000000..618516501
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/crtlibid.S
@@ -0,0 +1,28 @@
+# Provide a weak definition of the library ID, for the benefit of certain
+# configure scripts.
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by KPIT Cummins Infosystems Limited.
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .ident "GNU C crtlibid.o"
+
+.weak __current_shared_library_r12_offset_
+.set __current_shared_library_r12_offset_, 0
diff --git a/gcc-4.9/libgcc/config/cr16/crtn.S b/gcc-4.9/libgcc/config/cr16/crtn.S
new file mode 100644
index 000000000..c8d4c12e7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/crtn.S
@@ -0,0 +1,44 @@
+# Specialized code needed to support construction and destruction of
+# file-scope objects in C++ and Java code, and to support exception handling.
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by KPIT Cummins Infosystems Limited.
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+/* This file supplies function epilogues for the .init and .fini sections.
+ It is linked in after all other files. */
+
+ .ident "GNU C crtn.o"
+
+ .section .init
+#if defined (__ID_SHARED_LIB__)
+ popret $2, r12, ra
+#else
+ popret ra
+#endif
+
+ .section .fini
+#if defined (__ID_SHARED_LIB__)
+ popret $2, r12, ra
+#else
+ popret ra
+#endif
+
diff --git a/gcc-4.9/libgcc/config/cr16/divmodhi3.c b/gcc-4.9/libgcc/config/cr16/divmodhi3.c
new file mode 100644
index 000000000..68869b07a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/divmodhi3.c
@@ -0,0 +1,115 @@
+/* Libgcc Target specific implementation - Emulating div and mod.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by KPIT Cummins Infosystems Limited.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+
+/* Emulate the division and modulus operation. */
+
+unsigned short
+udivmodhi4 (unsigned short num, unsigned short den, short modwanted)
+{
+ unsigned short bit = 1;
+ unsigned short res = 0;
+
+ while (den < num && bit && !(den & (1 << 15)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+
+ if (modwanted)
+ return num;
+ return res;
+}
+
+short
+__divhi3 (short a, short b)
+{
+ short neg = 0;
+ short res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = udivmodhi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+short
+__modhi3 (short a, short b)
+{
+ short neg = 0;
+ short res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = udivmodhi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+short
+__udivhi3 (short a, short b)
+{
+ return udivmodhi4 (a, b, 0);
+}
+
+short
+__umodhi3 (short a, short b)
+{
+ return udivmodhi4 (a, b, 1);
+}
diff --git a/gcc-4.9/libgcc/config/cr16/lib1funcs.S b/gcc-4.9/libgcc/config/cr16/lib1funcs.S
new file mode 100644
index 000000000..def859231
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/lib1funcs.S
@@ -0,0 +1,563 @@
+/* Libgcc Target specific implementation.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by KPIT Cummins Infosystems Limited.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef L_mulsi3
+ .text
+ .align 4
+ .globl ___mulsi3
+___mulsi3:
+ movw r4,r0
+ movw r2,r1
+ /* Extended multiplication between the 2 lower words */
+ muluw r1,(r1,r0)
+
+ /* Multiply the lower word of each parameter */
+ mulw r2,r5
+
+ /* With the higher word of the other */
+ mulw r3,r4
+
+ /* Add products to the higher part of the final result */
+ addw r4,r1
+ addw r5,r1
+ jump (ra)
+#endif
+
+#ifdef L_divdi3
+ .text
+ .align 4
+ .globl ___divdi3
+
+___divdi3:
+ push $4, r7, ra
+
+ /* Param #1 Long Long low bit first */
+ loadd 12(sp), (r1, r0)
+ loadd 16(sp), (r3, r2)
+
+ /* Param #2 Long Long low bit first */
+ loadd 20(sp), (r5, r4)
+ loadd 24(sp), (r7, r6)
+
+ /* Set neg to 0 */
+ movw $0, r10
+
+ subd $16, (sp)
+
+ /* Compare if param1 is greater than 0 */
+ cmpw $0, r3
+ ble L4
+
+ /* Invert param1 and neg */
+ movd $-1, (r9, r8) /* Temp set to FFFFFFFF */
+ xord (r9, r8), (r1, r0) /* Xor low bits of param 1 with temp */
+ xord (r9, r8), (r3, r2) /* Xor high bits of param 1 with temp */
+ addd $1, (r1, r0) /* Add 1 to low bits of param 1 */
+ xorw $1, r10 /* Invert neg */
+ bcc L4 /* If no carry occurred go to L4 */
+ addd $1, (r3, r2) /* Add 1 to high bits of param 1 */
+
+L4: stord (r1, r0), 0(sp)
+ stord (r3, r2), 4(sp)
+
+ /* Compare if param2 is greater than 0 */
+ cmpw $0, r7
+ ble L5
+
+ /* Invert param2 and neg */
+ movd $-1, (r9, r8) /* Temp set to FFFFFFFF */
+ xord (r9, r8), (r5, r4) /* Xor low bits of param 2 with temp */
+ xord (r9, r8), (r7, r6) /* Xor high bits of param 2 with temp */
+ addd $1, (r5, r4) /* Add 1 to low bits of param 2 */
+ xorw $1, r10 /* Invert neg */
+ bcc L5 /* If no carry occurred go to L5 */
+ addd $1, (r7, r6) /* Add 1 to high bits of param 2 */
+
+L5: stord (r5, r4), 8(sp)
+ stord (r7, r6), 12(sp)
+ movw $0, r2
+
+ /* Call udivmoddi3 */
+#ifdef __PIC__
+ loadd ___udivmoddi3@cGOT(r12), (r1,r0)
+ jal (r1,r0)
+#else
+ bal (ra), ___udivmoddi3
+#endif
+
+ /* If (neg) */
+ addd $16, (sp)
+ cmpw $0, r10 /* Compare 0 with neg */
+ beq Lexit__
+
+ /* Neg = -Neg */
+ xord (r9, r8), (r1, r0) /* Xor low bits of ures with temp */
+ xord (r9, r8), (r3, r2) /* Xor high bits of ures with temp */
+ addd $1, (r1, r0) /* Add 1 to low bits of ures */
+ bcc Lexit__
+ addd $1, (r3, r2) /* Add 1 to high bit of ures */
+
+Lexit__:
+# ifdef __ID_SHARED_LIB__
+ pop $2, r12
+# endif
+ popret $4, r7, ra
+#endif
+
+#ifdef L_lshrdi3
+ .text
+ .align 4
+ .globl ___lshrdi3
+
+___lshrdi3:
+ push $3, r7
+
+ /* Load parameters from stack in this order */
+ movw r2, r6 /* Number of shifts */
+ loadd 6(sp), (r1, r0) /* Low bits */
+ loadd 10(sp), (r3, r2)/* High bits */
+
+ xorw $-1, r6 /* Invert number of shifts */
+ addw $1, r6 /* Add 1 by number of shifts */
+
+ movw r6, r7 /* Copy number of shifts */
+
+ tbit $15, r6 /* Test if number is negative */
+ bfs L2 /* If negative jump to L2 */
+
+ movd (r1, r0), (r9, r8) /* Copy low bits */
+
+ subw $32, r7 /* Calc how many bits will overflow */
+ /* Shift the temp low bit to the right to see the overflowing bits */
+ lshd r7, (r9, r8)
+
+ cmpw $32, r6 /* If number of shifts is higher than 31 */
+ blt L1 /* Shift by moving */
+
+ lshd r6, (r3, r2) /* Shift high bits */
+ lshd r6, (r1, r0) /* Shift low bits */
+ addd (r9, r8), (r3, r2) /* Add overflow to the high bits */
+ popret $3, r7 /* Return */
+
+L1: movd $0, (r1, r0) /* Reset low bit */
+ movd (r9, r8), (r3, r2) /* Add the overflow from the low bit */
+ popret $3, r7 /* Return */
+
+L2: movd (r3, r2), (r9, r8) /* Copy high bits */
+
+ addw $32, r7 /* Calc how many bits will overflow */
+ /* Shift the temp low bit to the left to see the overflowing bits */
+ lshd r7, (r9, r8)
+
+ cmpw $-32, r6 /* If number of shifts is lower than -31 */
+ bgt L3 /* Shift by moving */
+
+ lshd r6, (r1, r0) /* Shift low bits */
+ lshd r6, (r3, r2) /* Shift high bits */
+ addd (r9, r8), (r1, r0) /* Add overflow to the low bits */
+ popret $3, r7 /* Return */
+
+L3: movd $0, (r3, r2) /* Reset the high bit */
+ movd (r9, r8), (r1, r0) /* Add the overflow from the high bit */
+ popret $3, r7 /* Return */
+#endif
+
+#ifdef L_moddi3
+ .text
+ .align 4
+ .globl ___moddi3
+
+___moddi3:
+ push $4, r7, ra
+
+ /* Param #1 Long Long low bit first */
+ loadd 12(sp), (r1, r0)
+ loadd 16(sp), (r3, r2)
+
+ /* Param #2 Long Long low bit first */
+ loadd 20(sp), (r5, r4)
+ loadd 24(sp), (r7, r6)
+
+ subd $18, (sp)
+
+ /* Set neg to 0 */
+ storw $0, 16(sp)
+
+ movd $-1, (r9, r8) /* Temp set to FFFFFFFF */
+
+ /* Compare if param1 is greater than 0 */
+ cmpw $0, r3
+ ble L4
+
+ /* Invert param1 and neg */
+ xord (r9, r8), (r1, r0) /* Xor low bits of param 1 with temp */
+ xord (r9, r8), (r3, r2) /* Xor high bits of param 1 with temp */
+ addd $1, (r1, r0) /* Add 1 to low bits of param 1 */
+ storw $1, 16(sp)
+ bcc L4 /* If no carry occurred go to L4 */
+ addd $1, (r3, r2) /* Add 1 to high bits of param 1 */
+
+L4: stord (r1, r0), 0(sp)
+ stord (r3, r2), 4(sp)
+
+ /* Compare if param2 is greater than 0 */
+ cmpw $0, r7
+ ble L5
+
+ /* Invert param2 and neg */
+ xord (r9, r8), (r5, r4) /* Xor low bits of param 2 with temp */
+ xord (r9, r8), (r7, r6) /* Xor high bits of param 2 with temp */
+ addd $1, (r5, r4) /* Add 1 to low bits of param 2 */
+ bcc L5 /* If no carry occurred go to L5 */
+ addd $1, (r7, r6) /* Add 1 to high bits of param 2 */
+
+L5: stord (r5, r4), 8(sp)
+ stord (r7, r6), 12(sp)
+ movw $1, r2
+
+ /* Call udivmoddi3 */
+#ifdef __PIC__
+ loadd ___udivmoddi3@cGOT(r12), (r1,r0)
+ jal (r1,r0)
+#else
+ bal (ra), ___udivmoddi3
+#endif
+
+ /* If (neg) */
+ loadw 16(sp), r10 /* Load neg from stack */
+ addd $18, (sp)
+ cmpw $0, r10 /* Compare 0 with neg */
+ beq Lexit__
+
+ /* Neg = -Neg */
+ xord (r9, r8), (r1, r0) /* Xor low bits of ures with temp */
+ xord (r9, r8), (r3, r2) /* Xor high bits of ures with temp */
+ addd $1, (r1, r0) /* Add 1 to low bits of ures */
+ bcc Lexit__
+ addd $1, (r3, r2) /* Add 1 to high bit of ures */
+Lexit__:
+# ifdef __ID_SHARED_LIB__
+ pop $2, r12
+# endif
+ popret $4, r7, ra
+#endif
+
+#ifdef L_muldi3
+ .text
+ .align 4
+ .globl ___muldi3
+
+___muldi3:
+ push $2, r13
+ push $7, r7
+
+ /* Param #1 Long Long low bit first */
+ loadd 18(sp), (r1, r0)
+ loadd 22(sp), (r3, r2)
+
+ /* Param #2 Long Long low bit first */
+ loadd 26(sp), (r5, r4)
+ loadd 30(sp), (r7, r6)
+
+ /* Clear r13, r12 */
+ movd $0, (r12)
+ movd $0, (r13)
+
+ /* Set neg */
+ movw $0, r10
+
+ /* Compare if param1 is greater than 0 */
+ cmpw $0, r3
+ ble L1
+
+ /* Invert param1 and neg */
+ movd $-1, (r9, r8) /* Temp set to FFFFFFFF */
+ xord (r9, r8), (r1, r0) /* Xor low bits of param 1 with temp */
+ xord (r9, r8), (r3, r2) /* Xor high bits of param 1 with temp */
+ addd $1, (r1, r0) /* Add 1 to low bits of param 1 */
+ xorw $1, r10 /* Invert neg */
+ bcc L1 /* If no carry occurred go to L1 */
+ addd $1, (r3, r2) /* Add 1 to high bits of param 1 */
+
+L1: /* Compare if param2 is greater than 0 */
+ cmpw $0, r7
+ ble L2
+
+ /* Invert param2 and neg */
+ movd $-1, (r9, r8) /* Temp set to FFFFFFFF */
+ xord (r9, r8), (r5, r4) /* Xor low bits of param 2 with temp */
+ xord (r9, r8), (r7, r6) /* Xor high bits of param 2 with temp */
+ addd $1, (r5, r4) /* Add 1 to low bits of param 2 */
+ xorw $1, r10 /* Invert neg */
+ bcc L2 /* If no carry occurred go to L2 */
+ addd $1, (r7, r6) /* Add 1 to high bits of param 2 */
+
+L2: storw r10, 18(sp) /* Store neg to stack so we can use r10 */
+
+ /* B*D */
+ /* Bl*Dl */
+ macuw r0, r4, (r12) /* Multiply r0 and r4 and add to r12 */
+
+ /* Bh*Dl */
+ movd $0, (r9, r8) /* Clear r9, r8 */
+ macuw r1, r4, (r9, r8) /* Multiply Bh*Dl and add result to (r9, r8) */
+ movw r9, r10 /* Shift left: r9 to r10 */
+ lshd $16, (r9, r8) /* Shift left: r8 to r9 */
+ movw $0, r11 /* Clear r11 */
+ addd (r9, r8), (r12) /* Add (r9, r8) to r12 */
+ bcc L3 /* If no carry occurred go to L3 */
+ addd $1, (r13) /* If carry occurred add 1 to r13 */
+
+L3: addd (r11, r10), (r13) /* Add (r11, r10) to r13 */
+
+ /* Bl*Dh */
+ movd $0, (r9, r8) /* Clear (r9, r8) */
+ macuw r0, r5, (r9, r8) /* Multiply r0 and r5 and stor in (r9, r8) */
+ movw r9, r10 /* Shift left: r9 to r10 */
+ lshd $16, (r9, r8) /* Shift left: r8 to r9 */
+ addd (r9, r8), (r12) /* Add (r9, r8) to r12 */
+ bcc L4 /* If no carry occurred go to L4 */
+ addd $1, (r13) /* If carry occurred add 1 to r13 */
+
+L4: addd (r11, r10), (r13) /* Add (r11, r10) to r13 */
+
+ /* Bh*Dh */
+ movd $0, (r9, r8) /* Clear (r9, r8) */
+ macuw r1, r5, (r9, r8) /* Multiply r1 and r5 and add to r13 */
+ addd (r9, r8), (r13) /* Add (r9, r8) to result */
+
+ /* A*D */
+ /* Al*Dl */
+ movd $0, (r11, r10) /* Clear (r11, r10) */
+ macuw r2, r4, (r11, r10)/* Multiply r2 and r4 and add to (r11, r10) */
+
+ addd (r13), (r11, r10) /* Copy r13 to (r11, r10) */
+
+ /* Al*Dh */
+ movd $0, (r9, r8) /* Clear (r9, r8) */
+ macuw r2, r5, (r9, r8) /* Multiply r2 and r5 and add to (r9, r8) */
+ addw r8, r11 /* Add r8 to r11 */
+
+ /* Ah*Dl */
+ muluw r3, (r5, r4) /* Multiply r3 and r4 and stor in (r5, r4) */
+ addw r4, r11 /* Add r4 to r11 */
+
+ /* B*C */
+ /* Bl*Cl */
+ movd $0, (r9, r8) /* Clear (r9, r8) */
+ macuw r0, r6, (r9, r8) /* Multiply r0 and r6 and add to (r9, r8) */
+ addd (r9, r8), (r11, r10)/* Add (r9, r8) to result */
+
+ /* Bl*Ch */
+ movd $0, (r9, r8) /* Clear (r9, r8) */
+ macuw r0, r7, (r9, r8) /* Multiply r0 and r7 and add to (r9, r8) */
+ addw r8, r11 /* Add r8 to r11 */
+
+ loadw 18(sp), r8 /* Load neg from stack */
+
+ /* Bh*Cl */
+ muluw r1, (r7, r6) /* Multiply r1 and r6 and stor in (r7, r6) */
+ addw r6, r11 /* Add r6 to r11 */
+
+E1: movd (r11, r10), (r3, r2)
+ movd (r12), (r1, r0)
+
+ /* If (neg) */
+ cmpw $0, r8 /* Compare 0 with neg */
+ beq Lexit__
+
+ /* Neg = -Neg */
+ movd $-1, (r9, r8) /* Temp set to FFFFFFFF */
+ xord (r9, r8), (r1, r0) /* Xor low bits of result with temp */
+ xord (r9, r8), (r3, r2) /* Xor high bits of result with temp */
+ addd $1, (r1, r0) /* Add 1 to low bits of result */
+ bcc Lexit__
+ addd $1, (r3, r2) /* Add 1 to high bit of result */
+Lexit__:
+ pop $7, r7
+ popret $2, r13
+#endif
+
+#ifdef L_negdi2
+ .text
+ .align 4
+ .globl ___negdi2
+
+___negdi2:
+ /* Load parameter from the registers in this order */
+ loadd 0(sp), (r1, r0)
+ loadd 4(sp), (r3, r2)
+
+ movd $-1, (r6, r5) /* Set temp to FFFFFFFF */
+ xord (r6, r5), (r1, r0) /* Xor low bits with temp */
+ xord (r6, r5), (r3, r2) /* Xor high bits with temp */
+ addd $1, (r1, r0) /* Add one */
+ jcc (ra)
+ addd $1, (r3, r2) /* Add the carry to the high bits */
+ jump (ra)
+#endif
+
+#ifdef L_udivdi3
+ .text
+ .align 4
+ .globl ___udivdi3
+
+___udivdi3:
+ movw $0, r2
+ br ___udivmoddi3
+#endif
+
+#ifdef L_udivmoddi3
+ .text
+ .align 4
+ .globl ___udivmoddi3
+
+___udivmoddi3:
+ push $2, r13
+ push $7, r7
+
+ /* Param #1 Long Long low bit first */
+ loadd 18(sp), (r1, r0)
+ storw r2, 18(sp) /* Store modulo on stack */
+ loadd 22(sp), (r3, r2)
+
+ /* Param #2 Long Long low bit first */
+ loadd 26(sp), (r5, r4)
+ loadd 30(sp), (r7, r6)
+
+ /* Set ures to 0 */
+ movd $0, (r13)
+ movd $0, (r12)
+
+ cmpd (r12), (r5, r4)
+ beq LE
+
+L5: movd $1, (r9, r8) /* Store 1 in low bits from bit */
+ movd $0, (r11, r10) /* Store 0 in high bits from bit */
+
+L6: /* While (den < num && (!den & (1LL<<63))) */
+ /* Compare high bits from param 1 and param 2 */
+ cmpd (r7, r6), (r3, r2)
+ bhi L10 /* If param 2 is greater go to L10 */
+ bne L8 /* If param 1 is greater go to L8 */
+ cmpd (r5, r4), (r1, r0) /* Compare low bits from param 1 and param 2 */
+ /* If param 2 is greater or the same go to L1 */
+ bhs L10
+
+L8: /* Check if most significant bit of param 2 is set */
+ tbit $15, r7
+ bfs L10 /* If PSR is set go to L10 */
+
+ /* Shift bit */
+ lshd $1, (r11, r10) /* Shift left: high bits of bit */
+ /* Check if most significant bit of bit is set */
+ tbit $15, r9
+ lshd $1, (r9, r8) /* Shift left: low bits of bit */
+ bfs L28 /* If PSR is set go to L28 */
+
+L9: /* Shift b */
+ lshd $1, (r7, r6) /* Shift left: high bits of param 2 */
+ /* Check if most significant bit of param 2 is set */
+ tbit $15, r5
+ lshd $1, (r5, r4) /* Shift left: low bits of param 2 */
+ bfc L6 /* If PSR is set go to L6 */
+ addw $1, r6 /* Add 1 to the highest bits of b */
+ br L6 /* Go to L6 */
+
+L10: /* While (bit) */
+ cmpd $0, (r11, r10)
+ bne L11
+ cmpd $0, (r9, r8)
+ beq E1
+
+L11: /* If (num >= den) */
+ cmpd (r3, r2), (r7, r6) /* Compare high bits of param 1 and param 2 */
+ blo L15 /* If param 1 lower than param 2 go to L15 */
+ bne L12 /* If not equal go to L12 */
+ cmpd (r1, r0), (r5, r4) /* Compare low bits of param 1 and param 2 */
+ blo L15 /* If param 1 lower than param 2 go to L15 */
+
+L12: /* Ures |= bit */
+ ord (r11, r10), (r13)
+ ord (r9, r8), (r12)
+
+ /* Num -= den */
+ subd (r7, r6), (r3, r2) /* Subtract highest 32 bits from each other */
+ subd (r5, r4), (r1, r0) /* Subtract lowest 32 bits from each other */
+ bcc L15 /* If no carry occurred go to L15 */
+ subd $1, (r3, r2) /* Subtract the carry */
+
+L15: /* Shift bit to the right */
+ lshd $-1, (r9, r8) /* Shift right: low bits of bit */
+ /* Check if least significant bit of high bits is set */
+ tbit $0, r10
+ lshd $-1, (r11, r10) /* Shift right: high bits of bit */
+ bfs L18 /* If PSR is set go to L18 */
+
+L17: /* Shift param#2 to the right */
+ lshd $-1, (r5, r4) /* Shift right: low bits of param 2 */
+ /* Check if least significant bit of high bits is set */
+ tbit $0, r6
+ lshd $-1, (r7, r6) /* Shift right: high bits of param 2 */
+ bfc L10 /* If PSR is not set go to L10 */
+ /* Or with 0x8000 to set most significant bit */
+ orw $32768, r5
+ br L10 /* Go to L10 */
+
+L18: /* Or with 0x8000 to set most significant bit */
+ orw $32768, r9
+ br L17
+
+L28: /* Left shift bit */
+ addw $1, r10 /* Add 1 to highest bits of bit */
+ br L9 /* Go to L9 */
+
+LE: cmpd (r12), (r7, r6)
+ bne L5
+ excp dvz
+ br Lexit__
+
+E1: loadw 18(sp), r4
+ cmpw $0, r4
+ bne Lexit__
+
+ /* Return result */
+ movd (r12), (r1, r0)
+ movd (r13), (r3, r2)
+Lexit__:
+ pop $7, r7
+ popret $2, r13
+#endif
+
+#ifdef L_umoddi3
+ .text
+ .align 4
+ .globl ___umoddi3
+
+___umoddi3:
+ movw $1, r2
+ br ___udivmoddi3
+#endif
+
diff --git a/gcc-4.9/libgcc/config/cr16/t-cr16 b/gcc-4.9/libgcc/config/cr16/t-cr16
new file mode 100644
index 000000000..f29f7be05
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/t-cr16
@@ -0,0 +1,29 @@
+# Makefile fragment for building LIBGCC for the Renesas CR16 target.
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+LIB1ASMSRC = cr16/lib1funcs.S
+LIB1ASMFUNCS = _mulsi3 _lshrdi3 _muldi3 _divdi3 _udivdi3 _udivmoddi3 \
+ _umoddi3 _moddi3
+
+LIB2ADD = $(srcdir)/config/cr16/divmodhi3.c \
+ $(srcdir)/udivmodsi4.c \
+ $(srcdir)/udivmod.c \
+ $(srcdir)/divmod.c
+
+LIB2ADDEH = $(srcdir)/config/cr16/unwind-cr16.c
diff --git a/gcc-4.9/libgcc/config/cr16/t-crtlibid b/gcc-4.9/libgcc/config/cr16/t-crtlibid
new file mode 100644
index 000000000..57cf9c950
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/t-crtlibid
@@ -0,0 +1,22 @@
+# Makefile fragment for building LIBGCC for the Renesas CR16 target.
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Assemble startup files.
+crtlibid.o: $(srcdir)/config/cr16/crtlibid.S
+ $(gcc_compile) -c -x assembler-with-cpp $<
diff --git a/gcc-4.9/libgcc/config/cr16/unwind-cr16.c b/gcc-4.9/libgcc/config/cr16/unwind-cr16.c
new file mode 100644
index 000000000..a02e97d5e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/unwind-cr16.c
@@ -0,0 +1,1682 @@
+/* DWARF2 exception handling and frame unwind runtime interface routines.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "dwarf2.h"
+#include "unwind.h"
+#ifdef __USING_SJLJ_EXCEPTIONS__
+# define NO_SIZE_OF_ENCODED_VALUE
+#endif
+#include "unwind-pe.h"
+#include "unwind-dw2-fde.h"
+#include "gthr.h"
+#include "unwind-dw2.h"
+
+#ifdef HAVE_SYS_SDT_H
+#include <sys/sdt.h>
+#endif
+
+#ifndef __USING_SJLJ_EXCEPTIONS__
+
+#ifndef STACK_GROWS_DOWNWARD
+#define STACK_GROWS_DOWNWARD 0
+#else
+#undef STACK_GROWS_DOWNWARD
+#define STACK_GROWS_DOWNWARD 1
+#endif
+
+/* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */
+#ifndef PRE_GCC3_DWARF_FRAME_REGISTERS
+#define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS
+#endif
+
+#ifndef DWARF_REG_TO_UNWIND_COLUMN
+#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
+#endif
+
+#ifdef REG_VALUE_IN_UNWIND_CONTEXT
+typedef _Unwind_Word _Unwind_Context_Reg_Val;
+
+#ifndef ASSUME_EXTENDED_UNWIND_CONTEXT
+#define ASSUME_EXTENDED_UNWIND_CONTEXT 1
+#endif
+
+static inline _Unwind_Word
+_Unwind_Get_Unwind_Word (_Unwind_Context_Reg_Val val)
+{
+ return val;
+}
+
+static inline _Unwind_Context_Reg_Val
+_Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val)
+{
+ return val;
+}
+#else
+typedef void *_Unwind_Context_Reg_Val;
+
+static inline _Unwind_Word
+_Unwind_Get_Unwind_Word (_Unwind_Context_Reg_Val val)
+{
+ return (_Unwind_Word) (_Unwind_Internal_Ptr) val;
+}
+
+static inline _Unwind_Context_Reg_Val
+_Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val)
+{
+ return (_Unwind_Context_Reg_Val) (_Unwind_Internal_Ptr) val;
+}
+#endif
+
+#ifndef ASSUME_EXTENDED_UNWIND_CONTEXT
+#define ASSUME_EXTENDED_UNWIND_CONTEXT 0
+#endif
+
+/* This is the register and unwind state for a particular frame. This
+ provides the information necessary to unwind up past a frame and return
+ to its caller. */
+struct _Unwind_Context
+{
+ _Unwind_Context_Reg_Val reg[DWARF_FRAME_REGISTERS+1];
+ void *cfa;
+ void *ra;
+ void *lsda;
+ struct dwarf_eh_bases bases;
+ /* Signal frame context. */
+#define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1)
+ /* Context which has version/args_size/by_value fields. */
+#define EXTENDED_CONTEXT_BIT ((~(_Unwind_Word) 0 >> 2) + 1)
+ _Unwind_Word flags;
+ /* 0 for now, can be increased when further fields are added to
+ struct _Unwind_Context. */
+ _Unwind_Word version;
+ _Unwind_Word args_size;
+ char by_value[DWARF_FRAME_REGISTERS+1];
+};
+
+/* Byte size of every register managed by these routines. */
+static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS+1];
+
+
+/* Read unaligned data from the instruction buffer. */
+
+union unaligned
+{
+ void *p;
+ unsigned u2 __attribute__ ((mode (HI)));
+ unsigned u4 __attribute__ ((mode (SI)));
+ unsigned u8 __attribute__ ((mode (DI)));
+ signed s2 __attribute__ ((mode (HI)));
+ signed s4 __attribute__ ((mode (SI)));
+ signed s8 __attribute__ ((mode (DI)));
+} __attribute__ ((packed));
+
+static void uw_update_context (struct _Unwind_Context *, _Unwind_FrameState *);
+static _Unwind_Reason_Code uw_frame_state_for (struct _Unwind_Context *,
+ _Unwind_FrameState *);
+
+static inline void *
+read_pointer (const void *p) { const union unaligned *up = p; return up->p; }
+
+static inline int
+read_1u (const void *p) { return *(const unsigned char *) p; }
+
+static inline int
+read_1s (const void *p) { return *(const signed char *) p; }
+
+static inline int
+read_2u (const void *p) { const union unaligned *up = p; return up->u2; }
+
+static inline int
+read_2s (const void *p) { const union unaligned *up = p; return up->s2; }
+
+static inline unsigned int
+read_4u (const void *p) { const union unaligned *up = p; return up->u4; }
+
+static inline int
+read_4s (const void *p) { const union unaligned *up = p; return up->s4; }
+
+static inline unsigned long
+read_8u (const void *p) { const union unaligned *up = p; return up->u8; }
+
+static inline unsigned long
+read_8s (const void *p) { const union unaligned *up = p; return up->s8; }
+
+static inline _Unwind_Word
+_Unwind_IsSignalFrame (struct _Unwind_Context *context)
+{
+ return (context->flags & SIGNAL_FRAME_BIT) ? 1 : 0;
+}
+
+static inline void
+_Unwind_SetSignalFrame (struct _Unwind_Context *context, int val)
+{
+ if (val)
+ context->flags |= SIGNAL_FRAME_BIT;
+ else
+ context->flags &= ~SIGNAL_FRAME_BIT;
+}
+
+static inline _Unwind_Word
+_Unwind_IsExtendedContext (struct _Unwind_Context *context)
+{
+ return (ASSUME_EXTENDED_UNWIND_CONTEXT
+ || (context->flags & EXTENDED_CONTEXT_BIT));
+}
+
+/* Get the value of register INDEX as saved in CONTEXT. */
+
+inline _Unwind_Word
+_Unwind_GetGR (struct _Unwind_Context *context, int index)
+{
+ int size;
+ _Unwind_Context_Reg_Val val;
+
+#ifdef DWARF_ZERO_REG
+ if (index == DWARF_ZERO_REG)
+ return 0;
+#endif
+
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
+ size = dwarf_reg_size_table[index];
+ val = context->reg[index];
+
+ if (_Unwind_IsExtendedContext (context) && context->by_value[index])
+ return _Unwind_Get_Unwind_Word (val);
+
+ /* This will segfault if the register hasn't been saved. */
+ if (size == sizeof(_Unwind_Ptr))
+ return * (_Unwind_Ptr *) (_Unwind_Internal_Ptr) val;
+ else
+ {
+ gcc_assert (size == sizeof(_Unwind_Word));
+ return * (_Unwind_Word *) (_Unwind_Internal_Ptr) val;
+ }
+}
+
+static inline void *
+_Unwind_GetPtr (struct _Unwind_Context *context, int index)
+{
+ return (void *)(_Unwind_Ptr) _Unwind_GetGR (context, index);
+}
+
+/* Get the value of the CFA as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->cfa;
+}
+
+/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */
+
+inline void
+_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
+{
+ int size;
+ void *ptr;
+
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
+ size = dwarf_reg_size_table[index];
+
+ if (_Unwind_IsExtendedContext (context) && context->by_value[index])
+ {
+ context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val);
+ return;
+ }
+
+ ptr = (void *) (_Unwind_Internal_Ptr) context->reg[index];
+
+ if (size == sizeof(_Unwind_Ptr))
+ * (_Unwind_Ptr *) ptr = val;
+ else
+ {
+#if defined( __CR16C__ )
+ if (size == sizeof(_Unwind_Word))
+ * (_Unwind_Word *) ptr = val;
+ else
+ {
+ typedef unsigned _CR16_Unwind_Word __attribute__((__mode__(__word__)));
+ gcc_assert (index + 1 < (int) sizeof(dwarf_reg_size_table));
+ * (_CR16_Unwind_Word *) ptr = val & 0xffff ; /* low 16-bit */
+ ptr = context->reg[index + 1];
+ * (_CR16_Unwind_Word *) ptr = val >> 16 ; /* high 16-bit */
+ }
+#else
+ gcc_assert (size == sizeof(_Unwind_Word));
+ * (_Unwind_Word *) ptr = val;
+#endif
+ }
+}
+
+/* Get the pointer to a register INDEX as saved in CONTEXT. */
+
+static inline void *
+_Unwind_GetGRPtr (struct _Unwind_Context *context, int index)
+{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ if (_Unwind_IsExtendedContext (context) && context->by_value[index])
+ return &context->reg[index];
+ return (void *) (_Unwind_Internal_Ptr) context->reg[index];
+}
+
+/* Set the pointer to a register INDEX as saved in CONTEXT. */
+
+static inline void
+_Unwind_SetGRPtr (struct _Unwind_Context *context, int index, void *p)
+{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ if (_Unwind_IsExtendedContext (context))
+ context->by_value[index] = 0;
+ context->reg[index] = (_Unwind_Context_Reg_Val) (_Unwind_Internal_Ptr) p;
+}
+
+/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */
+
+static inline void
+_Unwind_SetGRValue (struct _Unwind_Context *context, int index,
+ _Unwind_Word val)
+{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
+ gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Context_Reg_Val));
+
+ context->by_value[index] = 1;
+ context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val);
+}
+
+/* Return nonzero if register INDEX is stored by value rather than
+ by reference. */
+
+static inline int
+_Unwind_GRByValue (struct _Unwind_Context *context, int index)
+{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ return context->by_value[index];
+}
+
+/* Retrieve the return address for CONTEXT. */
+
+inline _Unwind_Ptr
+_Unwind_GetIP (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->ra;
+}
+
+/* Retrieve the return address and flag whether that IP is before
+ or after first not yet fully executed instruction. */
+
+inline _Unwind_Ptr
+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn)
+{
+ *ip_before_insn = _Unwind_IsSignalFrame (context);
+ return (_Unwind_Ptr) context->ra;
+}
+
+/* Overwrite the return address for CONTEXT with VAL. */
+
+inline void
+_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+{
+ context->ra = (void *) val;
+}
+
+void *
+_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context)
+{
+ return context->lsda;
+}
+
+_Unwind_Ptr
+_Unwind_GetRegionStart (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bases.func;
+}
+
+void *
+_Unwind_FindEnclosingFunction (void *pc)
+{
+ struct dwarf_eh_bases bases;
+ const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
+ if (fde)
+ return bases.func;
+ else
+ return NULL;
+}
+
+_Unwind_Ptr
+_Unwind_GetDataRelBase (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bases.dbase;
+}
+
+_Unwind_Ptr
+_Unwind_GetTextRelBase (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bases.tbase;
+}
+
+#include "md-unwind-support.h"
+
+/* Extract any interesting information from the CIE for the translation
+ unit F belongs to. Return a pointer to the byte after the augmentation,
+ or NULL if we encountered an undecipherable augmentation. */
+
+static const unsigned char *
+extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ const unsigned char *aug = cie->augmentation;
+ const unsigned char *p = aug + strlen ((const char *)aug) + 1;
+ const unsigned char *ret = NULL;
+ _uleb128_t utmp;
+ _sleb128_t stmp;
+
+ /* g++ v2 "eh" has pointer immediately following augmentation string,
+ so it must be handled first. */
+ if (aug[0] == 'e' && aug[1] == 'h')
+ {
+ fs->eh_ptr = read_pointer (p);
+ p += sizeof (void *);
+ aug += 2;
+ }
+
+ /* After the augmentation resp. pointer for "eh" augmentation
+ follows for CIE version >= 4 address size byte and
+ segment size byte. */
+ if (__builtin_expect (cie->version >= 4, 0))
+ {
+ if (p[0] != sizeof (void *) || p[1] != 0)
+ return NULL;
+ p += 2;
+ }
+ /* Immediately following this are the code and
+ data alignment and return address column. */
+ p = read_uleb128 (p, &utmp);
+ fs->code_align = (_Unwind_Word)utmp;
+ p = read_sleb128 (p, &stmp);
+ fs->data_align = (_Unwind_Sword)stmp;
+ if (cie->version == 1)
+ fs->retaddr_column = *p++;
+ else
+ {
+ p = read_uleb128 (p, &utmp);
+ fs->retaddr_column = (_Unwind_Word)utmp;
+ }
+ fs->lsda_encoding = DW_EH_PE_omit;
+
+ /* If the augmentation starts with 'z', then a uleb128 immediately
+ follows containing the length of the augmentation field following
+ the size. */
+ if (*aug == 'z')
+ {
+ p = read_uleb128 (p, &utmp);
+ ret = p + utmp;
+
+ fs->saw_z = 1;
+ ++aug;
+ }
+
+ /* Iterate over recognized augmentation subsequences. */
+ while (*aug != '\0')
+ {
+ /* "L" indicates a byte showing how the LSDA pointer is encoded. */
+ if (aug[0] == 'L')
+ {
+ fs->lsda_encoding = *p++;
+ aug += 1;
+ }
+
+ /* "R" indicates a byte indicating how FDE addresses are encoded. */
+ else if (aug[0] == 'R')
+ {
+ fs->fde_encoding = *p++;
+ aug += 1;
+ }
+
+ /* "P" indicates a personality routine in the CIE augmentation. */
+ else if (aug[0] == 'P')
+ {
+ _Unwind_Ptr personality;
+
+ p = read_encoded_value (context, *p, p + 1, &personality);
+ fs->personality = (_Unwind_Personality_Fn) personality;
+ aug += 1;
+ }
+
+ /* "S" indicates a signal frame. */
+ else if (aug[0] == 'S')
+ {
+ fs->signal_frame = 1;
+ aug += 1;
+ }
+
+ /* Otherwise we have an unknown augmentation string.
+ Bail unless we saw a 'z' prefix. */
+ else
+ return ret;
+ }
+
+ return ret ? ret : p;
+}
+
+
+/* Decode a DW_OP stack program. Return the top of stack. Push INITIAL
+ onto the stack to start. */
+
+static _Unwind_Word
+execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end,
+ struct _Unwind_Context *context, _Unwind_Word initial)
+{
+ _Unwind_Word stack[64]; /* ??? Assume this is enough. */
+ int stack_elt;
+
+ stack[0] = initial;
+ stack_elt = 1;
+
+ while (op_ptr < op_end)
+ {
+ enum dwarf_location_atom op = *op_ptr++;
+ _Unwind_Word result;
+ _uleb128_t reg, utmp;
+ _sleb128_t offset, stmp;
+
+ switch (op)
+ {
+ case DW_OP_lit0:
+ case DW_OP_lit1:
+ case DW_OP_lit2:
+ case DW_OP_lit3:
+ case DW_OP_lit4:
+ case DW_OP_lit5:
+ case DW_OP_lit6:
+ case DW_OP_lit7:
+ case DW_OP_lit8:
+ case DW_OP_lit9:
+ case DW_OP_lit10:
+ case DW_OP_lit11:
+ case DW_OP_lit12:
+ case DW_OP_lit13:
+ case DW_OP_lit14:
+ case DW_OP_lit15:
+ case DW_OP_lit16:
+ case DW_OP_lit17:
+ case DW_OP_lit18:
+ case DW_OP_lit19:
+ case DW_OP_lit20:
+ case DW_OP_lit21:
+ case DW_OP_lit22:
+ case DW_OP_lit23:
+ case DW_OP_lit24:
+ case DW_OP_lit25:
+ case DW_OP_lit26:
+ case DW_OP_lit27:
+ case DW_OP_lit28:
+ case DW_OP_lit29:
+ case DW_OP_lit30:
+ case DW_OP_lit31:
+ result = op - DW_OP_lit0;
+ break;
+
+ case DW_OP_addr:
+ result = (_Unwind_Word) (_Unwind_Ptr) read_pointer (op_ptr);
+ op_ptr += sizeof (void *);
+ break;
+
+ case DW_OP_GNU_encoded_addr:
+ {
+ _Unwind_Ptr presult;
+ op_ptr = read_encoded_value (context, *op_ptr, op_ptr+1, &presult);
+ result = presult;
+ }
+ break;
+
+ case DW_OP_const1u:
+ result = read_1u (op_ptr);
+ op_ptr += 1;
+ break;
+ case DW_OP_const1s:
+ result = read_1s (op_ptr);
+ op_ptr += 1;
+ break;
+ case DW_OP_const2u:
+ result = read_2u (op_ptr);
+ op_ptr += 2;
+ break;
+ case DW_OP_const2s:
+ result = read_2s (op_ptr);
+ op_ptr += 2;
+ break;
+ case DW_OP_const4u:
+ result = read_4u (op_ptr);
+ op_ptr += 4;
+ break;
+ case DW_OP_const4s:
+ result = read_4s (op_ptr);
+ op_ptr += 4;
+ break;
+ case DW_OP_const8u:
+ result = read_8u (op_ptr);
+ op_ptr += 8;
+ break;
+ case DW_OP_const8s:
+ result = read_8s (op_ptr);
+ op_ptr += 8;
+ break;
+ case DW_OP_constu:
+ op_ptr = read_uleb128 (op_ptr, &utmp);
+ result = (_Unwind_Word)utmp;
+ break;
+ case DW_OP_consts:
+ op_ptr = read_sleb128 (op_ptr, &stmp);
+ result = (_Unwind_Sword)stmp;
+ break;
+
+ case DW_OP_reg0:
+ case DW_OP_reg1:
+ case DW_OP_reg2:
+ case DW_OP_reg3:
+ case DW_OP_reg4:
+ case DW_OP_reg5:
+ case DW_OP_reg6:
+ case DW_OP_reg7:
+ case DW_OP_reg8:
+ case DW_OP_reg9:
+ case DW_OP_reg10:
+ case DW_OP_reg11:
+ case DW_OP_reg12:
+ case DW_OP_reg13:
+ case DW_OP_reg14:
+ case DW_OP_reg15:
+ case DW_OP_reg16:
+ case DW_OP_reg17:
+ case DW_OP_reg18:
+ case DW_OP_reg19:
+ case DW_OP_reg20:
+ case DW_OP_reg21:
+ case DW_OP_reg22:
+ case DW_OP_reg23:
+ case DW_OP_reg24:
+ case DW_OP_reg25:
+ case DW_OP_reg26:
+ case DW_OP_reg27:
+ case DW_OP_reg28:
+ case DW_OP_reg29:
+ case DW_OP_reg30:
+ case DW_OP_reg31:
+ result = _Unwind_GetGR (context, op - DW_OP_reg0);
+ break;
+ case DW_OP_regx:
+ op_ptr = read_uleb128 (op_ptr, &reg);
+ result = _Unwind_GetGR (context, reg);
+ break;
+
+ case DW_OP_breg0:
+ case DW_OP_breg1:
+ case DW_OP_breg2:
+ case DW_OP_breg3:
+ case DW_OP_breg4:
+ case DW_OP_breg5:
+ case DW_OP_breg6:
+ case DW_OP_breg7:
+ case DW_OP_breg8:
+ case DW_OP_breg9:
+ case DW_OP_breg10:
+ case DW_OP_breg11:
+ case DW_OP_breg12:
+ case DW_OP_breg13:
+ case DW_OP_breg14:
+ case DW_OP_breg15:
+ case DW_OP_breg16:
+ case DW_OP_breg17:
+ case DW_OP_breg18:
+ case DW_OP_breg19:
+ case DW_OP_breg20:
+ case DW_OP_breg21:
+ case DW_OP_breg22:
+ case DW_OP_breg23:
+ case DW_OP_breg24:
+ case DW_OP_breg25:
+ case DW_OP_breg26:
+ case DW_OP_breg27:
+ case DW_OP_breg28:
+ case DW_OP_breg29:
+ case DW_OP_breg30:
+ case DW_OP_breg31:
+ op_ptr = read_sleb128 (op_ptr, &offset);
+ result = _Unwind_GetGR (context, op - DW_OP_breg0) + offset;
+ break;
+ case DW_OP_bregx:
+ op_ptr = read_uleb128 (op_ptr, &reg);
+ op_ptr = read_sleb128 (op_ptr, &offset);
+ result = _Unwind_GetGR (context, reg) + (_Unwind_Word)offset;
+ break;
+
+ case DW_OP_dup:
+ gcc_assert (stack_elt);
+ result = stack[stack_elt - 1];
+ break;
+
+ case DW_OP_drop:
+ gcc_assert (stack_elt);
+ stack_elt -= 1;
+ goto no_push;
+
+ case DW_OP_pick:
+ offset = *op_ptr++;
+ gcc_assert (offset < stack_elt - 1);
+ result = stack[stack_elt - 1 - offset];
+ break;
+
+ case DW_OP_over:
+ gcc_assert (stack_elt >= 2);
+ result = stack[stack_elt - 2];
+ break;
+
+ case DW_OP_swap:
+ {
+ _Unwind_Word t;
+ gcc_assert (stack_elt >= 2);
+ t = stack[stack_elt - 1];
+ stack[stack_elt - 1] = stack[stack_elt - 2];
+ stack[stack_elt - 2] = t;
+ goto no_push;
+ }
+
+ case DW_OP_rot:
+ {
+ _Unwind_Word t1, t2, t3;
+
+ gcc_assert (stack_elt >= 3);
+ t1 = stack[stack_elt - 1];
+ t2 = stack[stack_elt - 2];
+ t3 = stack[stack_elt - 3];
+ stack[stack_elt - 1] = t2;
+ stack[stack_elt - 2] = t3;
+ stack[stack_elt - 3] = t1;
+ goto no_push;
+ }
+
+ case DW_OP_deref:
+ case DW_OP_deref_size:
+ case DW_OP_abs:
+ case DW_OP_neg:
+ case DW_OP_not:
+ case DW_OP_plus_uconst:
+ /* Unary operations. */
+ gcc_assert (stack_elt);
+ stack_elt -= 1;
+
+ result = stack[stack_elt];
+
+ switch (op)
+ {
+ case DW_OP_deref:
+ {
+ void *ptr = (void *) (_Unwind_Ptr) result;
+ result = (_Unwind_Ptr) read_pointer (ptr);
+ }
+ break;
+
+ case DW_OP_deref_size:
+ {
+ void *ptr = (void *) (_Unwind_Ptr) result;
+ switch (*op_ptr++)
+ {
+ case 1:
+ result = read_1u (ptr);
+ break;
+ case 2:
+ result = read_2u (ptr);
+ break;
+ case 4:
+ result = read_4u (ptr);
+ break;
+ case 8:
+ result = read_8u (ptr);
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ }
+ break;
+
+ case DW_OP_abs:
+ if ((_Unwind_Sword) result < 0)
+ result = -result;
+ break;
+ case DW_OP_neg:
+ result = -result;
+ break;
+ case DW_OP_not:
+ result = ~result;
+ break;
+ case DW_OP_plus_uconst:
+ op_ptr = read_uleb128 (op_ptr, &utmp);
+ result += (_Unwind_Word)utmp;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+ break;
+
+ case DW_OP_and:
+ case DW_OP_div:
+ case DW_OP_minus:
+ case DW_OP_mod:
+ case DW_OP_mul:
+ case DW_OP_or:
+ case DW_OP_plus:
+ case DW_OP_shl:
+ case DW_OP_shr:
+ case DW_OP_shra:
+ case DW_OP_xor:
+ case DW_OP_le:
+ case DW_OP_ge:
+ case DW_OP_eq:
+ case DW_OP_lt:
+ case DW_OP_gt:
+ case DW_OP_ne:
+ {
+ /* Binary operations. */
+ _Unwind_Word first, second;
+ gcc_assert (stack_elt >= 2);
+ stack_elt -= 2;
+
+ second = stack[stack_elt];
+ first = stack[stack_elt + 1];
+
+ switch (op)
+ {
+ case DW_OP_and:
+ result = second & first;
+ break;
+ case DW_OP_div:
+ result = (_Unwind_Sword) second / (_Unwind_Sword) first;
+ break;
+ case DW_OP_minus:
+ result = second - first;
+ break;
+ case DW_OP_mod:
+ result = second % first;
+ break;
+ case DW_OP_mul:
+ result = second * first;
+ break;
+ case DW_OP_or:
+ result = second | first;
+ break;
+ case DW_OP_plus:
+ result = second + first;
+ break;
+ case DW_OP_shl:
+ result = second << first;
+ break;
+ case DW_OP_shr:
+ result = second >> first;
+ break;
+ case DW_OP_shra:
+ result = (_Unwind_Sword) second >> first;
+ break;
+ case DW_OP_xor:
+ result = second ^ first;
+ break;
+ case DW_OP_le:
+ result = (_Unwind_Sword) second <= (_Unwind_Sword) first;
+ break;
+ case DW_OP_ge:
+ result = (_Unwind_Sword) second >= (_Unwind_Sword) first;
+ break;
+ case DW_OP_eq:
+ result = (_Unwind_Sword) second == (_Unwind_Sword) first;
+ break;
+ case DW_OP_lt:
+ result = (_Unwind_Sword) second < (_Unwind_Sword) first;
+ break;
+ case DW_OP_gt:
+ result = (_Unwind_Sword) second > (_Unwind_Sword) first;
+ break;
+ case DW_OP_ne:
+ result = (_Unwind_Sword) second != (_Unwind_Sword) first;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+ }
+ break;
+
+ case DW_OP_skip:
+ offset = read_2s (op_ptr);
+ op_ptr += 2;
+ op_ptr += offset;
+ goto no_push;
+
+ case DW_OP_bra:
+ gcc_assert (stack_elt);
+ stack_elt -= 1;
+
+ offset = read_2s (op_ptr);
+ op_ptr += 2;
+ if (stack[stack_elt] != 0)
+ op_ptr += offset;
+ goto no_push;
+
+ case DW_OP_nop:
+ goto no_push;
+
+ default:
+ gcc_unreachable ();
+ }
+
+ /* Most things push a result value. */
+ gcc_assert ((size_t) stack_elt < sizeof(stack)/sizeof(*stack));
+ stack[stack_elt++] = result;
+ no_push:;
+ }
+
+ /* We were executing this program to get a value. It should be
+ at top of stack. */
+ gcc_assert (stack_elt);
+ stack_elt -= 1;
+ return stack[stack_elt];
+}
+
+
+/* Decode DWARF 2 call frame information. Takes pointers the
+ instruction sequence to decode, current register information and
+ CIE info, and the PC range to evaluate. */
+
+static void
+execute_cfa_program (const unsigned char *insn_ptr,
+ const unsigned char *insn_end,
+ struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ struct frame_state_reg_info *unused_rs = NULL;
+
+ /* Don't allow remember/restore between CIE and FDE programs. */
+ fs->regs.prev = NULL;
+
+ /* The comparison with the return address uses < rather than <= because
+ we are only interested in the effects of code before the call; for a
+ noreturn function, the return address may point to unrelated code with
+ a different stack configuration that we are not interested in. We
+ assume that the call itself is unwind info-neutral; if not, or if
+ there are delay instructions that adjust the stack, these must be
+ reflected at the point immediately before the call insn.
+ In signal frames, return address is after last completed instruction,
+ so we add 1 to return address to make the comparison <=. */
+ while (insn_ptr < insn_end
+ && fs->pc < context->ra + _Unwind_IsSignalFrame (context))
+ {
+ unsigned char insn = *insn_ptr++;
+ _uleb128_t reg, utmp;
+ _sleb128_t offset, stmp;
+
+ if ((insn & 0xc0) == DW_CFA_advance_loc)
+ fs->pc += (insn & 0x3f) * fs->code_align;
+ else if ((insn & 0xc0) == DW_CFA_offset)
+ {
+ reg = insn & 0x3f;
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ offset = (_Unwind_Sword) utmp * fs->data_align;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
+ }
+ else if ((insn & 0xc0) == DW_CFA_restore)
+ {
+ reg = insn & 0x3f;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_UNSAVED;
+ }
+ else switch (insn)
+ {
+ case DW_CFA_set_loc:
+ {
+ _Unwind_Ptr pc;
+
+ insn_ptr = read_encoded_value (context, fs->fde_encoding,
+ insn_ptr, &pc);
+ fs->pc = (void *) pc;
+ }
+ break;
+
+ case DW_CFA_advance_loc1:
+ fs->pc += read_1u (insn_ptr) * fs->code_align;
+ insn_ptr += 1;
+ break;
+ case DW_CFA_advance_loc2:
+ fs->pc += read_2u (insn_ptr) * fs->code_align;
+ insn_ptr += 2;
+ break;
+ case DW_CFA_advance_loc4:
+ fs->pc += read_4u (insn_ptr) * fs->code_align;
+ insn_ptr += 4;
+ break;
+
+ case DW_CFA_offset_extended:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ offset = (_Unwind_Sword) utmp * fs->data_align;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
+ break;
+
+ case DW_CFA_restore_extended:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ /* FIXME, this is wrong; the CIE might have said that the
+ register was saved somewhere. */
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
+ break;
+
+ case DW_CFA_same_value:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
+ break;
+
+ case DW_CFA_undefined:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNDEFINED;
+ break;
+
+ case DW_CFA_nop:
+ break;
+
+ case DW_CFA_register:
+ {
+ _uleb128_t reg2;
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ insn_ptr = read_uleb128 (insn_ptr, &reg2);
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_REG;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg =
+ (_Unwind_Word)reg2;
+ }
+ break;
+
+ case DW_CFA_remember_state:
+ {
+ struct frame_state_reg_info *new_rs;
+ if (unused_rs)
+ {
+ new_rs = unused_rs;
+ unused_rs = unused_rs->prev;
+ }
+ else
+ new_rs = alloca (sizeof (struct frame_state_reg_info));
+
+ *new_rs = fs->regs;
+ fs->regs.prev = new_rs;
+ }
+ break;
+
+ case DW_CFA_restore_state:
+ {
+ struct frame_state_reg_info *old_rs = fs->regs.prev;
+ fs->regs = *old_rs;
+ old_rs->prev = unused_rs;
+ unused_rs = old_rs;
+ }
+ break;
+
+ case DW_CFA_def_cfa:
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ fs->regs.cfa_reg = (_Unwind_Word)utmp;
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ fs->regs.cfa_offset = (_Unwind_Word)utmp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ break;
+
+ case DW_CFA_def_cfa_register:
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ fs->regs.cfa_reg = (_Unwind_Word)utmp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ break;
+
+ case DW_CFA_def_cfa_offset:
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ fs->regs.cfa_offset = utmp;
+ /* cfa_how deliberately not set. */
+ break;
+
+ case DW_CFA_def_cfa_expression:
+ fs->regs.cfa_exp = insn_ptr;
+ fs->regs.cfa_how = CFA_EXP;
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ insn_ptr += utmp;
+ break;
+
+ case DW_CFA_expression:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_EXP;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ insn_ptr += utmp;
+ break;
+
+ /* Dwarf3. */
+ case DW_CFA_offset_extended_sf:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ insn_ptr = read_sleb128 (insn_ptr, &stmp);
+ offset = stmp * fs->data_align;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
+ break;
+
+ case DW_CFA_def_cfa_sf:
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ fs->regs.cfa_reg = (_Unwind_Word)utmp;
+ insn_ptr = read_sleb128 (insn_ptr, &stmp);
+ fs->regs.cfa_offset = (_Unwind_Sword)stmp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_offset *= fs->data_align;
+ break;
+
+ case DW_CFA_def_cfa_offset_sf:
+ insn_ptr = read_sleb128 (insn_ptr, &stmp);
+ fs->regs.cfa_offset = (_Unwind_Sword)stmp;
+ fs->regs.cfa_offset *= fs->data_align;
+ /* cfa_how deliberately not set. */
+ break;
+
+ case DW_CFA_val_offset:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ offset = (_Unwind_Sword) utmp * fs->data_align;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_VAL_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
+ break;
+
+ case DW_CFA_val_offset_sf:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ insn_ptr = read_sleb128 (insn_ptr, &stmp);
+ offset = stmp * fs->data_align;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_VAL_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
+ break;
+
+ case DW_CFA_val_expression:
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_VAL_EXP;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ insn_ptr += utmp;
+ break;
+
+ case DW_CFA_GNU_window_save:
+ /* ??? Hardcoded for SPARC register window configuration. */
+ for (reg = 16; reg < 32; ++reg)
+ {
+ fs->regs.reg[reg].how = REG_SAVED_OFFSET;
+ fs->regs.reg[reg].loc.offset = (reg - 16) * sizeof (void *);
+ }
+ break;
+
+ case DW_CFA_GNU_args_size:
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ context->args_size = (_Unwind_Word)utmp;
+ break;
+
+ case DW_CFA_GNU_negative_offset_extended:
+ /* Obsoleted by DW_CFA_offset_extended_sf, but used by
+ older PowerPC code. */
+ insn_ptr = read_uleb128 (insn_ptr, &reg);
+ insn_ptr = read_uleb128 (insn_ptr, &utmp);
+ offset = (_Unwind_Word) utmp * fs->data_align;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = -offset;
+ break;
+
+ default:
+ gcc_unreachable ();
+ }
+ }
+}
+
+/* Given the _Unwind_Context CONTEXT for a stack frame, look up the FDE for
+ its caller and decode it into FS. This function also sets the
+ args_size and lsda members of CONTEXT, as they are really information
+ about the caller's frame. */
+
+static _Unwind_Reason_Code
+uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ const struct dwarf_fde *fde;
+ const struct dwarf_cie *cie;
+ const unsigned char *aug, *insn, *end;
+
+ memset (fs, 0, sizeof (*fs));
+ context->args_size = 0;
+ context->lsda = 0;
+
+ if (context->ra == 0)
+ return _URC_END_OF_STACK;
+
+ fde = _Unwind_Find_FDE (context->ra + _Unwind_IsSignalFrame (context) - 1,
+ &context->bases);
+ if (fde == NULL)
+ {
+#ifdef MD_FALLBACK_FRAME_STATE_FOR
+ /* Couldn't find frame unwind info for this function. Try a
+ target-specific fallback mechanism. This will necessarily
+ not provide a personality routine or LSDA. */
+ return MD_FALLBACK_FRAME_STATE_FOR (context, fs);
+#else
+ return _URC_END_OF_STACK;
+#endif
+ }
+
+ fs->pc = context->bases.func;
+
+ cie = get_cie (fde);
+ insn = extract_cie_info (cie, context, fs);
+ if (insn == NULL)
+ /* CIE contained unknown augmentation. */
+ return _URC_FATAL_PHASE1_ERROR;
+
+ /* First decode all the insns in the CIE. */
+ end = (const unsigned char *) next_fde ((const struct dwarf_fde *) cie);
+ execute_cfa_program (insn, end, context, fs);
+
+ /* Locate augmentation for the fde. */
+ aug = (const unsigned char *) fde + sizeof (*fde);
+ aug += 2 * size_of_encoded_value (fs->fde_encoding);
+ insn = NULL;
+ if (fs->saw_z)
+ {
+ _uleb128_t i;
+ aug = read_uleb128 (aug, &i);
+ insn = aug + i;
+ }
+ if (fs->lsda_encoding != DW_EH_PE_omit)
+ {
+ _Unwind_Ptr lsda;
+
+ aug = read_encoded_value (context, fs->lsda_encoding, aug, &lsda);
+ context->lsda = (void *) lsda;
+ }
+
+ /* Then the insns in the FDE up to our target PC. */
+ if (insn == NULL)
+ insn = aug;
+ end = (const unsigned char *) next_fde (fde);
+ execute_cfa_program (insn, end, context, fs);
+
+ return _URC_NO_REASON;
+}
+
+typedef struct frame_state
+{
+ void *cfa;
+ void *eh_ptr;
+ long cfa_offset;
+ long args_size;
+ long reg_or_offset[PRE_GCC3_DWARF_FRAME_REGISTERS+1];
+ unsigned short cfa_reg;
+ unsigned short retaddr_column;
+ char saved[PRE_GCC3_DWARF_FRAME_REGISTERS+1];
+} frame_state;
+
+struct frame_state * __frame_state_for (void *, struct frame_state *);
+
+/* Called from pre-G++ 3.0 __throw to find the registers to restore for
+ a given PC_TARGET. The caller should allocate a local variable of
+ `struct frame_state' and pass its address to STATE_IN. */
+
+struct frame_state *
+__frame_state_for (void *pc_target, struct frame_state *state_in)
+{
+ struct _Unwind_Context context;
+ _Unwind_FrameState fs;
+ int reg;
+
+ memset (&context, 0, sizeof (struct _Unwind_Context));
+ if (!ASSUME_EXTENDED_UNWIND_CONTEXT)
+ context.flags = EXTENDED_CONTEXT_BIT;
+ context.ra = pc_target + 1;
+
+ if (uw_frame_state_for (&context, &fs) != _URC_NO_REASON)
+ return 0;
+
+ /* We have no way to pass a location expression for the CFA to our
+ caller. It wouldn't understand it anyway. */
+ if (fs.regs.cfa_how == CFA_EXP)
+ return 0;
+
+ for (reg = 0; reg < PRE_GCC3_DWARF_FRAME_REGISTERS + 1; reg++)
+ {
+ state_in->saved[reg] = fs.regs.reg[reg].how;
+ switch (state_in->saved[reg])
+ {
+ case REG_SAVED_REG:
+ state_in->reg_or_offset[reg] = fs.regs.reg[reg].loc.reg;
+ break;
+ case REG_SAVED_OFFSET:
+ state_in->reg_or_offset[reg] = fs.regs.reg[reg].loc.offset;
+ break;
+ default:
+ state_in->reg_or_offset[reg] = 0;
+ break;
+ }
+ }
+
+ state_in->cfa_offset = fs.regs.cfa_offset;
+ state_in->cfa_reg = fs.regs.cfa_reg;
+ state_in->retaddr_column = fs.retaddr_column;
+ state_in->args_size = context.args_size;
+ state_in->eh_ptr = fs.eh_ptr;
+
+ return state_in;
+}
+
+typedef union { _Unwind_Ptr ptr; _Unwind_Word word; } _Unwind_SpTmp;
+
+static inline void
+_Unwind_SetSpColumn (struct _Unwind_Context *context, void *cfa,
+ _Unwind_SpTmp *tmp_sp)
+{
+ int size = dwarf_reg_size_table[__builtin_dwarf_sp_column ()];
+
+ if (size == sizeof(_Unwind_Ptr))
+ tmp_sp->ptr = (_Unwind_Ptr) cfa;
+ else
+ {
+ gcc_assert (size == sizeof(_Unwind_Word));
+ tmp_sp->word = (_Unwind_Ptr) cfa;
+ }
+ _Unwind_SetGRPtr (context, __builtin_dwarf_sp_column (), tmp_sp);
+}
+
+static void
+uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ struct _Unwind_Context orig_context = *context;
+ void *cfa;
+ long i;
+
+#ifdef EH_RETURN_STACKADJ_RTX
+ /* Special handling here: Many machines do not use a frame pointer,
+ and track the CFA only through offsets from the stack pointer from
+ one frame to the next. In this case, the stack pointer is never
+ stored, so it has no saved address in the context. What we do
+ have is the CFA from the previous stack frame.
+
+ In very special situations (such as unwind info for signal return),
+ there may be location expressions that use the stack pointer as well.
+
+ Do this conditionally for one frame. This allows the unwind info
+ for one frame to save a copy of the stack pointer from the previous
+ frame, and be able to use much easier CFA mechanisms to do it.
+ Always zap the saved stack pointer value for the next frame; carrying
+ the value over from one frame to another doesn't make sense. */
+
+ _Unwind_SpTmp tmp_sp;
+
+ if (!_Unwind_GetGRPtr (&orig_context, __builtin_dwarf_sp_column ()))
+ _Unwind_SetSpColumn (&orig_context, context->cfa, &tmp_sp);
+ _Unwind_SetGRPtr (context, __builtin_dwarf_sp_column (), NULL);
+#endif
+
+ /* Compute this frame's CFA. */
+ switch (fs->regs.cfa_how)
+ {
+ case CFA_REG_OFFSET:
+ cfa = _Unwind_GetPtr (&orig_context, fs->regs.cfa_reg);
+ cfa += fs->regs.cfa_offset;
+ break;
+
+ case CFA_EXP:
+ {
+ const unsigned char *exp = fs->regs.cfa_exp;
+ _uleb128_t len;
+
+ exp = read_uleb128 (exp, &len);
+ cfa = (void *) (_Unwind_Ptr)
+ execute_stack_op (exp, exp + len, &orig_context, 0);
+ break;
+ }
+
+ default:
+ gcc_unreachable ();
+ }
+ context->cfa = cfa;
+
+ /* Compute the addresses of all registers saved in this frame. */
+ for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
+ switch (fs->regs.reg[i].how)
+ {
+ case REG_UNSAVED:
+ case REG_UNDEFINED:
+ break;
+
+ case REG_SAVED_OFFSET:
+ _Unwind_SetGRPtr (context, i,
+ (void *) (cfa + fs->regs.reg[i].loc.offset));
+ break;
+
+ case REG_SAVED_REG:
+ if (_Unwind_GRByValue (&orig_context, fs->regs.reg[i].loc.reg))
+ _Unwind_SetGRValue (context, i,
+ _Unwind_GetGR (&orig_context,
+ fs->regs.reg[i].loc.reg));
+ else
+ _Unwind_SetGRPtr (context, i,
+ _Unwind_GetGRPtr (&orig_context,
+ fs->regs.reg[i].loc.reg));
+ break;
+
+ case REG_SAVED_EXP:
+ {
+ const unsigned char *exp = fs->regs.reg[i].loc.exp;
+ _uleb128_t len;
+ _Unwind_Ptr val;
+
+ exp = read_uleb128 (exp, &len);
+ val = execute_stack_op (exp, exp + len, &orig_context,
+ (_Unwind_Ptr) cfa);
+ _Unwind_SetGRPtr (context, i, (void *) val);
+ }
+ break;
+
+ case REG_SAVED_VAL_OFFSET:
+ _Unwind_SetGRValue (context, i,
+ (_Unwind_Internal_Ptr)
+ (cfa + fs->regs.reg[i].loc.offset));
+ break;
+
+ case REG_SAVED_VAL_EXP:
+ {
+ const unsigned char *exp = fs->regs.reg[i].loc.exp;
+ _uleb128_t len;
+ _Unwind_Ptr val;
+
+ exp = read_uleb128 (exp, &len);
+ val = execute_stack_op (exp, exp + len, &orig_context,
+ (_Unwind_Ptr) cfa);
+ _Unwind_SetGRValue (context, i, val);
+ }
+ break;
+ }
+
+ _Unwind_SetSignalFrame (context, fs->signal_frame);
+
+#ifdef MD_FROB_UPDATE_CONTEXT
+ MD_FROB_UPDATE_CONTEXT (context, fs);
+#endif
+}
+
+/* CONTEXT describes the unwind state for a frame, and FS describes the FDE
+ of its caller. Update CONTEXT to refer to the caller as well. Note
+ that the args_size and lsda members are not updated here, but later in
+ uw_frame_state_for. */
+
+static void
+uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ uw_update_context_1 (context, fs);
+
+ /* In general this unwinder doesn't make any distinction between
+ undefined and same_value rule. Call-saved registers are assumed
+ to have same_value rule by default and explicit undefined
+ rule is handled like same_value. The only exception is
+ DW_CFA_undefined on retaddr_column which is supposed to
+ mark outermost frame in DWARF 3. */
+ if (fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (fs->retaddr_column)].how
+ == REG_UNDEFINED)
+ /* uw_frame_state_for uses context->ra == 0 check to find outermost
+ stack frame. */
+ context->ra = 0;
+ else
+ /* Compute the return address now, since the return address column
+ can change from frame to frame. */
+ context->ra = __builtin_extract_return_addr
+ (_Unwind_GetPtr (context, fs->retaddr_column));
+#if defined( __CR16C__ )
+ context->ra = (void*)( ( (unsigned)context->ra ) << 1 ) ;
+#endif
+}
+
+static void
+uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ uw_update_context (context, fs);
+}
+
+/* Fill in CONTEXT for top-of-stack. The only valid registers at this
+ level will be the return address and the CFA. */
+
+#define uw_init_context(CONTEXT) \
+ do \
+ { \
+ /* Do any necessary initialization to access arbitrary stack frames. \
+ On the SPARC, this means flushing the register windows. */ \
+ __builtin_unwind_init (); \
+ uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), \
+ __builtin_return_address (0)); \
+ } \
+ while (0)
+
+static inline void
+init_dwarf_reg_size_table (void)
+{
+ __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
+}
+
+static void __attribute__((noinline))
+uw_init_context_1 (struct _Unwind_Context *context,
+ void *outer_cfa, void *outer_ra)
+{
+ void *ra = __builtin_extract_return_addr (__builtin_return_address (0));
+ _Unwind_FrameState fs;
+ _Unwind_SpTmp sp_slot;
+ _Unwind_Reason_Code code;
+
+ memset (context, 0, sizeof (struct _Unwind_Context));
+ context->ra = ra;
+ if (!ASSUME_EXTENDED_UNWIND_CONTEXT)
+ context->flags = EXTENDED_CONTEXT_BIT;
+
+ code = uw_frame_state_for (context, &fs);
+ gcc_assert (code == _URC_NO_REASON);
+
+#if __GTHREADS
+ {
+ static __gthread_once_t once_regsizes = __GTHREAD_ONCE_INIT;
+ if (__gthread_once (&once_regsizes, init_dwarf_reg_size_table) != 0
+ && dwarf_reg_size_table[0] == 0)
+ init_dwarf_reg_size_table ();
+ }
+#else
+ if (dwarf_reg_size_table[0] == 0)
+ init_dwarf_reg_size_table ();
+#endif
+
+ /* Force the frame state to use the known cfa value. */
+ _Unwind_SetSpColumn (context, outer_cfa, &sp_slot);
+ fs.regs.cfa_how = CFA_REG_OFFSET;
+ fs.regs.cfa_reg = __builtin_dwarf_sp_column ();
+#if !defined( __CR16C__ )
+ fs.regs.cfa_offset = 0;
+#else
+ fs.regs.cfa_offset -= context->args_size ;
+#endif
+
+ uw_update_context_1 (context, &fs);
+
+ /* If the return address column was saved in a register in the
+ initialization context, then we can't see it in the given
+ call frame data. So have the initialization context tell us. */
+ context->ra = __builtin_extract_return_addr (outer_ra);
+}
+
+static void _Unwind_DebugHook (void *, void *)
+ __attribute__ ((__noinline__, __used__, __noclone__));
+
+/* This function is called during unwinding. It is intended as a hook
+ for a debugger to intercept exceptions. CFA is the CFA of the
+ target frame. HANDLER is the PC to which control will be
+ transferred. */
+static void
+_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)),
+ void *handler __attribute__ ((__unused__)))
+{
+ /* We only want to use stap probes starting with v3. Earlier
+ versions added too much startup cost. */
+#if defined (HAVE_SYS_SDT_H) && defined (STAP_PROBE2) && _SDT_NOTE_TYPE >= 3
+ STAP_PROBE2 (libgcc, unwind, cfa, handler);
+#else
+ asm ("");
+#endif
+}
+
+/* Install TARGET into CURRENT so that we can return to it. This is a
+ macro because __builtin_eh_return must be invoked in the context of
+ our caller. */
+#if defined( __CR16C__ )
+
+#define uw_install_context(CURRENT, TARGET) \
+ do \
+ { \
+ long offset = uw_install_context_1 ((CURRENT), (TARGET)); \
+ void *handler = __builtin_frob_return_addr ((TARGET)->ra); \
+ handler = (void*)( ( (unsigned)handler ) >> 1 ) ; \
+ _Unwind_DebugHook ((TARGET)->cfa, handler); \
+ __builtin_eh_return (offset, handler); \
+ } \
+ while (0)
+#else
+#define uw_install_context(CURRENT, TARGET) \
+ do \
+ { \
+ long offset = uw_install_context_1 ((CURRENT), (TARGET)); \
+ void *handler = __builtin_frob_return_addr ((TARGET)->ra); \
+ _Unwind_DebugHook ((TARGET)->cfa, handler); \
+ __builtin_eh_return (offset, handler); \
+ } \
+ while (0)
+#endif /* __CR16C__ */
+
+static long
+uw_install_context_1 (struct _Unwind_Context *current,
+ struct _Unwind_Context *target)
+{
+ long i;
+ _Unwind_SpTmp sp_slot;
+
+ /* If the target frame does not have a saved stack pointer,
+ then set up the target's CFA. */
+ if (!_Unwind_GetGRPtr (target, __builtin_dwarf_sp_column ()))
+ _Unwind_SetSpColumn (target, target->cfa, &sp_slot);
+
+ for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
+ {
+ void *c = (void *) (_Unwind_Internal_Ptr) current->reg[i];
+ void *t = (void *) (_Unwind_Internal_Ptr)target->reg[i];
+
+ gcc_assert (current->by_value[i] == 0);
+ if (target->by_value[i] && c)
+ {
+ _Unwind_Word w;
+ _Unwind_Ptr p;
+ if (dwarf_reg_size_table[i] == sizeof (_Unwind_Word))
+ {
+ w = (_Unwind_Internal_Ptr) t;
+ memcpy (c, &w, sizeof (_Unwind_Word));
+ }
+ else
+ {
+ gcc_assert (dwarf_reg_size_table[i] == sizeof (_Unwind_Ptr));
+ p = (_Unwind_Internal_Ptr) t;
+ memcpy (c, &p, sizeof (_Unwind_Ptr));
+ }
+ }
+ else if (t && c && t != c)
+ memcpy (c, t, dwarf_reg_size_table[i]);
+ }
+
+ /* If the current frame doesn't have a saved stack pointer, then we
+ need to rely on EH_RETURN_STACKADJ_RTX to get our target stack
+ pointer value reloaded. */
+ if (!_Unwind_GetGRPtr (current, __builtin_dwarf_sp_column ()))
+ {
+ void *target_cfa;
+
+ target_cfa = _Unwind_GetPtr (target, __builtin_dwarf_sp_column ());
+
+ /* We adjust SP by the difference between CURRENT and TARGET's CFA. */
+ if (STACK_GROWS_DOWNWARD)
+ return target_cfa - current->cfa + target->args_size;
+ else
+ return current->cfa - target_cfa - target->args_size;
+ }
+ return 0;
+}
+
+static inline _Unwind_Ptr
+uw_identify_context (struct _Unwind_Context *context)
+{
+ /* The CFA is not sufficient to disambiguate the context of a function
+ interrupted by a signal before establishing its frame and the context
+ of the signal itself. */
+ if (STACK_GROWS_DOWNWARD)
+ return _Unwind_GetCFA (context) - _Unwind_IsSignalFrame (context);
+ else
+ return _Unwind_GetCFA (context) + _Unwind_IsSignalFrame (context);
+}
+
+
+#include "unwind.inc"
+
+#if defined (USE_GAS_SYMVER) && defined (SHARED) && defined (USE_LIBUNWIND_EXCEPTIONS)
+alias (_Unwind_Backtrace);
+alias (_Unwind_DeleteException);
+alias (_Unwind_FindEnclosingFunction);
+alias (_Unwind_ForcedUnwind);
+alias (_Unwind_GetDataRelBase);
+alias (_Unwind_GetTextRelBase);
+alias (_Unwind_GetCFA);
+alias (_Unwind_GetGR);
+alias (_Unwind_GetIP);
+alias (_Unwind_GetLanguageSpecificData);
+alias (_Unwind_GetRegionStart);
+alias (_Unwind_RaiseException);
+alias (_Unwind_Resume);
+alias (_Unwind_Resume_or_Rethrow);
+alias (_Unwind_SetGR);
+alias (_Unwind_SetIP);
+#endif
+
+#endif /* !USING_SJLJ_EXCEPTIONS */
diff --git a/gcc-4.9/libgcc/config/cr16/unwind-dw2.h b/gcc-4.9/libgcc/config/cr16/unwind-dw2.h
new file mode 100644
index 000000000..d39049bbe
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cr16/unwind-dw2.h
@@ -0,0 +1,86 @@
+/* DWARF2 frame unwind data structure.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* A target can override (perhaps for backward compatibility) how
+ many dwarf2 columns are unwound. */
+#ifndef DWARF_FRAME_REGISTERS
+#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
+#endif
+
+/* The result of interpreting the frame unwind info for a frame.
+ This is all symbolic at this point, as none of the values can
+ be resolved until the target pc is located. */
+typedef struct
+{
+ /* Each register save state can be described in terms of a CFA slot,
+ another register, or a location expression. */
+ struct frame_state_reg_info
+ {
+ struct {
+ union {
+ _Unwind_Word reg;
+ _Unwind_Sword offset;
+ const unsigned char *exp;
+ } loc;
+ enum {
+ REG_UNSAVED,
+ REG_SAVED_OFFSET,
+ REG_SAVED_REG,
+ REG_SAVED_EXP,
+ REG_SAVED_VAL_OFFSET,
+ REG_SAVED_VAL_EXP,
+ REG_UNDEFINED
+ } how;
+ } reg[DWARF_FRAME_REGISTERS+1];
+
+ /* Used to implement DW_CFA_remember_state. */
+ struct frame_state_reg_info *prev;
+
+ /* The CFA can be described in terms of a reg+offset or a
+ location expression. */
+ _Unwind_Sword cfa_offset;
+ _Unwind_Word cfa_reg;
+ const unsigned char *cfa_exp;
+ enum {
+ CFA_UNSET,
+ CFA_REG_OFFSET,
+ CFA_EXP
+ } cfa_how;
+ } regs;
+
+ /* The PC described by the current frame state. */
+ void *pc;
+
+ /* The information we care about from the CIE/FDE. */
+ _Unwind_Personality_Fn personality;
+ _Unwind_Sword data_align;
+ _Unwind_Word code_align;
+ _Unwind_Word retaddr_column;
+ unsigned char fde_encoding;
+ unsigned char lsda_encoding;
+ unsigned char saw_z;
+ unsigned char signal_frame;
+ void *eh_ptr;
+} _Unwind_FrameState;
+
diff --git a/gcc-4.9/libgcc/config/cris/arit.c b/gcc-4.9/libgcc/config/cris/arit.c
new file mode 100644
index 000000000..6934f5ded
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/arit.c
@@ -0,0 +1,313 @@
+/* Signed and unsigned multiplication and division and modulus for CRIS.
+ Contributed by Axis Communications.
+ Written by Hans-Peter Nilsson <hp@axis.se>, c:a 1992.
+
+ Copyright (C) 1998-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* Note that we provide prototypes for all "const" functions, to attach
+ the const attribute. This is necessary in 2.7.2 - adding the
+ attribute to the function *definition* is a syntax error.
+ This did not work with e.g. 2.1; back then, the return type had to
+ be "const". */
+
+#include "config.h"
+
+#if defined (__CRIS_arch_version) && __CRIS_arch_version >= 3
+#define LZ(v) __builtin_clz (v)
+#endif
+
+/* In (at least) the 4.7 series, GCC doesn't automatically choose the
+ most optimal strategy, possibly related to insufficient modelling of
+ delay-slot costs. */
+#if defined (__CRIS_arch_version) && __CRIS_arch_version >= 10
+#define SIGNMULT(s, a) ((s) * (a)) /* Cheap multiplication, better than branch. */
+#else
+#define SIGNMULT(s, a) ((s) < 0 ? -(a) : (a)) /* Branches are still better. */
+#endif
+
+#if defined (L_udivsi3) || defined (L_divsi3) || defined (L_umodsi3) \
+ || defined (L_modsi3)
+/* Result type of divmod worker function. */
+struct quot_rem
+ {
+ long quot;
+ long rem;
+ };
+
+/* This is the worker function for div and mod. It is inlined into the
+ respective library function. Parameter A must have bit 31 == 0. */
+
+static __inline__ struct quot_rem
+do_31div (unsigned long a, unsigned long b)
+ __attribute__ ((__const__, __always_inline__));
+
+static __inline__ struct quot_rem
+do_31div (unsigned long a, unsigned long b)
+{
+ /* Adjust operands and result if a is 31 bits. */
+ long extra = 0;
+ int quot_digits = 0;
+
+ if (b == 0)
+ {
+ struct quot_rem ret;
+ ret.quot = 0xffffffff;
+ ret.rem = 0xffffffff;
+ return ret;
+ }
+
+ if (a < b)
+ return (struct quot_rem) { 0, a };
+
+#ifdef LZ
+ if (b <= a)
+ {
+ quot_digits = LZ (b) - LZ (a);
+ quot_digits += (a >= (b << quot_digits));
+ b <<= quot_digits;
+ }
+#else
+ while (b <= a)
+ {
+ b <<= 1;
+ quot_digits++;
+ }
+#endif
+
+ /* Is a 31 bits? Note that bit 31 is handled by the caller. */
+ if (a & 0x40000000)
+ {
+ /* Then make b:s highest bit max 0x40000000, because it must have
+ been 0x80000000 to be 1 bit higher than a. */
+ b >>= 1;
+
+ /* Adjust a to be maximum 0x3fffffff, i.e. two upper bits zero. */
+ if (a >= b)
+ {
+ a -= b;
+ extra = 1 << (quot_digits - 1);
+ }
+ else
+ {
+ a -= b >> 1;
+
+ /* Remember that we adjusted a by subtracting b * 2 ** Something. */
+ extra = 1 << quot_digits;
+ }
+
+ /* The number of quotient digits will be one less, because
+ we just adjusted b. */
+ quot_digits--;
+ }
+
+ /* Now do the division part. */
+
+ /* Subtract b and add ones to the right when a >= b
+ i.e. "a - (b - 1) == (a - b) + 1". */
+ b--;
+
+#define DS __asm__ ("dstep %2,%0" : "=r" (a) : "0" (a), "r" (b))
+
+ switch (quot_digits)
+ {
+ case 32: DS; case 31: DS; case 30: DS; case 29: DS;
+ case 28: DS; case 27: DS; case 26: DS; case 25: DS;
+ case 24: DS; case 23: DS; case 22: DS; case 21: DS;
+ case 20: DS; case 19: DS; case 18: DS; case 17: DS;
+ case 16: DS; case 15: DS; case 14: DS; case 13: DS;
+ case 12: DS; case 11: DS; case 10: DS; case 9: DS;
+ case 8: DS; case 7: DS; case 6: DS; case 5: DS;
+ case 4: DS; case 3: DS; case 2: DS; case 1: DS;
+ case 0:;
+ }
+
+ {
+ struct quot_rem ret;
+ ret.quot = (a & ((1 << quot_digits) - 1)) + extra;
+ ret.rem = a >> quot_digits;
+ return ret;
+ }
+}
+
+#ifdef L_udivsi3
+unsigned long
+__Udiv (unsigned long a, unsigned long b) __attribute__ ((__const__));
+
+unsigned long
+__Udiv (unsigned long a, unsigned long b)
+{
+ long extra = 0;
+
+ /* Adjust operands and result, if a and/or b is 32 bits. */
+ /* Effectively: b & 0x80000000. */
+ if ((long) b < 0)
+ return a >= b;
+
+ /* Effectively: a & 0x80000000. */
+ if ((long) a < 0)
+ {
+ int tmp = 0;
+
+ if (b == 0)
+ return 0xffffffff;
+#ifdef LZ
+ tmp = LZ (b);
+#else
+ for (tmp = 31; (((long) b & (1 << tmp)) == 0); tmp--)
+ ;
+
+ tmp = 31 - tmp;
+#endif
+
+ if ((b << tmp) > a)
+ {
+ extra = 1 << (tmp-1);
+ a -= b << (tmp - 1);
+ }
+ else
+ {
+ extra = 1 << tmp;
+ a -= b << tmp;
+ }
+ }
+
+ return do_31div (a, b).quot+extra;
+}
+#endif /* L_udivsi3 */
+
+#ifdef L_divsi3
+long
+__Div (long a, long b) __attribute__ ((__const__));
+
+long
+__Div (long a, long b)
+{
+ long extra = 0;
+ long sign = (b < 0) ? -1 : 1;
+ long res;
+
+ /* We need to handle a == -2147483648 as expected and must while
+ doing that avoid producing a sequence like "abs (a) < 0" as GCC
+ may optimize out the test. That sequence may not be obvious as
+ we call inline functions. Testing for a being negative and
+ handling (presumably much rarer than positive) enables us to get
+ a bit of optimization for an (accumulated) reduction of the
+ penalty of the 0x80000000 special-case. */
+ if (a < 0)
+ {
+ sign = -sign;
+
+ if ((a & 0x7fffffff) == 0)
+ {
+ /* We're at 0x80000000. Tread carefully. */
+ a -= SIGNMULT (sign, b);
+ extra = sign;
+ }
+ a = -a;
+ }
+
+ res = do_31div (a, __builtin_labs (b)).quot;
+ return SIGNMULT (sign, res) + extra;
+}
+#endif /* L_divsi3 */
+
+
+#ifdef L_umodsi3
+unsigned long
+__Umod (unsigned long a, unsigned long b) __attribute__ ((__const__));
+
+unsigned long
+__Umod (unsigned long a, unsigned long b)
+{
+ /* Adjust operands and result if a and/or b is 32 bits. */
+ if ((long) b < 0)
+ return a >= b ? a - b : a;
+
+ if ((long) a < 0)
+ {
+ int tmp = 0;
+
+ if (b == 0)
+ return a;
+#ifdef LZ
+ tmp = LZ (b);
+#else
+ for (tmp = 31; (((long) b & (1 << tmp)) == 0); tmp--)
+ ;
+ tmp = 31 - tmp;
+#endif
+
+ if ((b << tmp) > a)
+ {
+ a -= b << (tmp - 1);
+ }
+ else
+ {
+ a -= b << tmp;
+ }
+ }
+
+ return do_31div (a, b).rem;
+}
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+long
+__Mod (long a, long b) __attribute__ ((__const__));
+
+long
+__Mod (long a, long b)
+{
+ long sign = 1;
+ long res;
+
+ /* We need to handle a == -2147483648 as expected and must while
+ doing that avoid producing a sequence like "abs (a) < 0" as GCC
+ may optimize out the test. That sequence may not be obvious as
+ we call inline functions. Testing for a being negative and
+ handling (presumably much rarer than positive) enables us to get
+ a bit of optimization for an (accumulated) reduction of the
+ penalty of the 0x80000000 special-case. */
+ if (a < 0)
+ {
+ sign = -1;
+ if ((a & 0x7fffffff) == 0)
+ /* We're at 0x80000000. Tread carefully. */
+ a += __builtin_labs (b);
+ a = -a;
+ }
+
+ res = do_31div (a, __builtin_labs (b)).rem;
+ return SIGNMULT (sign, res);
+}
+#endif /* L_modsi3 */
+#endif /* L_udivsi3 || L_divsi3 || L_umodsi3 || L_modsi3 */
+
+/*
+ * Local variables:
+ * eval: (c-set-style "gnu")
+ * indent-tabs-mode: t
+ * End:
+ */
diff --git a/gcc-4.9/libgcc/config/cris/libgcc-glibc.ver b/gcc-4.9/libgcc/config/cris/libgcc-glibc.ver
new file mode 100644
index 000000000..e35de8310
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/libgcc-glibc.ver
@@ -0,0 +1,7 @@
+GCC_4.3 {
+ __Mul
+ __Div
+ __Udiv
+ __Mod
+ __Umod
+}
diff --git a/gcc-4.9/libgcc/config/cris/mulsi3.S b/gcc-4.9/libgcc/config/cris/mulsi3.S
new file mode 100644
index 000000000..240895df0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/mulsi3.S
@@ -0,0 +1,269 @@
+;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free
+;; Software Foundation; either version 3, or (at your option) any later
+;; version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+;; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+;; for more details.
+;;
+;; Under Section 7 of GPL version 3, you are granted additional
+;; permissions described in the GCC Runtime Library Exception, version
+;; 3.1, as published by the Free Software Foundation.
+;;
+;; You should have received a copy of the GNU General Public License and
+;; a copy of the GCC Runtime Library Exception along with this program;
+;; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+;; <http://www.gnu.org/licenses/>.
+;;
+;; This code used to be expanded through interesting expansions in
+;; the machine description, compiled from this code:
+;;
+;; #ifdef L_mulsi3
+;; long __Mul (unsigned long a, unsigned long b) __attribute__ ((__const__));
+;;
+;; /* This must be compiled with the -mexpand-mul flag, to synthesize the
+;; multiplication from the mstep instructions. The check for
+;; smaller-size multiplication pays off in the order of .5-10%;
+;; estimated median 1%, depending on application.
+;; FIXME: It can be further optimized if we go to assembler code, as
+;; gcc 2.7.2 adds a few unnecessary instructions and does not put the
+;; basic blocks in optimal order. */
+;; long
+;; __Mul (unsigned long a, unsigned long b)
+;; {
+;; #if defined (__CRIS_arch_version) && __CRIS_arch_version >= 10
+;; /* In case other code is compiled without -march=v10, they will
+;; contain calls to __Mul, regardless of flags at link-time. The
+;; "else"-code below will work, but is unnecessarily slow. This
+;; sometimes cuts a few minutes off from simulation time by just
+;; returning a "mulu.d". */
+;; return a * b;
+;; #else
+;; unsigned long min;
+;;
+;; /* Get minimum via the bound insn. */
+;; min = a < b ? a : b;
+;;
+;; /* Can we omit computation of the high part? */
+;; if (min > 65535)
+;; /* No. Perform full multiplication. */
+;; return a * b;
+;; else
+;; {
+;; /* Check if both operands are within 16 bits. */
+;; unsigned long max;
+;;
+;; /* Get maximum, by knowing the minimum.
+;; This will partition a and b into max and min.
+;; This is not currently something GCC understands,
+;; so do this trick by asm. */
+;; __asm__ ("xor %1,%0\n\txor %2,%0"
+;; : "=r" (max)
+;; : "r" (b), "r" (a), "0" (min));
+;;
+;; if (max > 65535)
+;; /* Make GCC understand that only the low part of "min" will be
+;; used. */
+;; return max * (unsigned short) min;
+;; else
+;; /* Only the low parts of both operands are necessary. */
+;; return ((unsigned short) max) * (unsigned short) min;
+;; }
+;; #endif /* not __CRIS_arch_version >= 10 */
+;; }
+;; #endif /* L_mulsi3 */
+;;
+;; That approach was abandoned since the caveats outweighted the
+;; benefits. The expand-multiplication machinery is also removed, so you
+;; can't do this anymore.
+;;
+;; For doubters of there being any benefits, some where: insensitivity to:
+;; - ABI changes (mostly for experimentation)
+;; - assembler syntax differences (mostly debug format).
+;; - insn scheduling issues.
+;; Most ABI experiments will presumably happen with arches with mul insns,
+;; so that argument doesn't really hold anymore, and it's unlikely there
+;; being new arch variants needing insn scheduling and not having mul
+;; insns.
+
+;; ELF and a.out have different syntax for local labels: the "wrong"
+;; one may not be omitted from the object.
+#undef L
+#ifdef __AOUT__
+# define L(x) x
+#else
+# define L(x) .x
+#endif
+
+ .global ___Mul
+ .type ___Mul,@function
+___Mul:
+#if defined (__CRIS_arch_version) && __CRIS_arch_version >= 10
+;; Can't have the mulu.d last on a cache-line (in the delay-slot of the
+;; "ret"), due to hardware bug. See documentation for -mmul-bug-workaround.
+;; Not worthwhile to conditionalize here.
+ .p2alignw 2,0x050f
+ mulu.d $r11,$r10
+ ret
+ nop
+#else
+;; See if we can avoid multiplying some of the parts, knowing
+;; they're zero.
+
+ move.d $r11,$r9
+ bound.d $r10,$r9
+ cmpu.w 65535,$r9
+ bls L(L3)
+ move.d $r10,$r12
+
+;; Nope, have to do all the parts of a 32-bit multiplication.
+;; See head comment in optabs.c:expand_doubleword_mult.
+
+ move.d $r10,$r13
+ movu.w $r11,$r9 ; ab*cd = (a*d + b*c)<<16 + b*d
+ lslq 16,$r13
+ mstep $r9,$r13 ; d*b
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ clear.w $r10
+ test.d $r10
+ mstep $r9,$r10 ; d*a
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ movu.w $r12,$r12
+ clear.w $r11
+ move.d $r11,$r9 ; Doubles as a "test.d" preparing for the mstep.
+ mstep $r12,$r9 ; b*c
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ mstep $r12,$r9
+ add.w $r9,$r10
+ lslq 16,$r10
+ ret
+ add.d $r13,$r10
+
+L(L3):
+;; Form the maximum in $r10, by knowing the minimum, $r9.
+;; (We don't know which one of $r10 or $r11 it is.)
+;; Check if the largest operand is still just 16 bits.
+
+ xor $r9,$r10
+ xor $r11,$r10
+ cmpu.w 65535,$r10
+ bls L(L5)
+ movu.w $r9,$r13
+
+;; We have ab*cd = (a*c)<<32 + (a*d + b*c)<<16 + b*d, but c==0
+;; so we only need (a*d)<<16 + b*d with d = $r13, ab = $r10.
+;; We drop the upper part of (a*d)<<16 as we're only doing a
+;; 32-bit-result multiplication.
+
+ move.d $r10,$r9
+ lslq 16,$r9
+ mstep $r13,$r9 ; b*d
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ clear.w $r10
+ test.d $r10
+ mstep $r13,$r10 ; a*d
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ lslq 16,$r10
+ ret
+ add.d $r9,$r10
+
+L(L5):
+;; We have ab*cd = (a*c)<<32 + (a*d + b*c)<<16 + b*d, but a and c==0
+;; so b*d (with b=$r13, a=$r10) it is.
+
+ lslq 16,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ ret
+ mstep $r13,$r10
+#endif
+L(Lfe1):
+ .size ___Mul,L(Lfe1)-___Mul
diff --git a/gcc-4.9/libgcc/config/cris/sfp-machine.h b/gcc-4.9/libgcc/config/cris/sfp-machine.h
new file mode 100644
index 000000000..abef282e0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/sfp-machine.h
@@ -0,0 +1,81 @@
+/* Soft-FP definitions for CRIS.
+ Copyright (C) 2013-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+/* FIXME: none of the *MEAT* macros have actually been benchmarked to be
+ better than any other choice for any CRIS variant. */
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_QNANNEGATEDP 0
+#define _FP_KEEPNANFRACP 1
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+# define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/cris/t-cris b/gcc-4.9/libgcc/config/cris/t-cris
new file mode 100644
index 000000000..b582974a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/t-cris
@@ -0,0 +1,10 @@
+LIB2ADD = _udivsi3.c _divsi3.c _umodsi3.c _modsi3.c
+
+# The fixed-point arithmetic code is in one file, arit.c,
+# similar to libgcc2.c (or the old libgcc1.c). We need to
+# "split it up" with one file per define.
+$(LIB2ADD): $(srcdir)/config/cris/arit.c
+ name=`echo $@ | sed -e 's,.*/,,' | sed -e 's,.c$$,,'`; \
+ echo "#define L$$name" > tmp-$@ \
+ && echo '#include "$<"' >> tmp-$@ \
+ && mv -f tmp-$@ $@
diff --git a/gcc-4.9/libgcc/config/cris/t-elfmulti b/gcc-4.9/libgcc/config/cris/t-elfmulti
new file mode 100644
index 000000000..308ef5105
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/t-elfmulti
@@ -0,0 +1,3 @@
+LIB2ADD_ST = $(srcdir)/config/cris/mulsi3.S $(srcdir)/config/cris/umulsidi3.S
+
+CRTSTUFF_T_CFLAGS = -moverride-best-lib-options
diff --git a/gcc-4.9/libgcc/config/cris/t-linux b/gcc-4.9/libgcc/config/cris/t-linux
new file mode 100644
index 000000000..8c7f4d442
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/t-linux
@@ -0,0 +1,2 @@
+# Override t-linux default.
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/cris/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/cris/umulsidi3.S b/gcc-4.9/libgcc/config/cris/umulsidi3.S
new file mode 100644
index 000000000..b5f011cab
--- /dev/null
+++ b/gcc-4.9/libgcc/config/cris/umulsidi3.S
@@ -0,0 +1,289 @@
+;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it under
+;; the terms of the GNU General Public License as published by the Free
+;; Software Foundation; either version 3, or (at your option) any later
+;; version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+;; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+;; for more details.
+;;
+;; Under Section 7 of GPL version 3, you are granted additional
+;; permissions described in the GCC Runtime Library Exception, version
+;; 3.1, as published by the Free Software Foundation.
+;;
+;; You should have received a copy of the GNU General Public License and
+;; a copy of the GCC Runtime Library Exception along with this program;
+;; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+;; <http://www.gnu.org/licenses/>.
+;;
+;; This code is derived from mulsi3.S, observing that the mstep*16-based
+;; multiplications there, from which it is formed, are actually
+;; zero-extending; in gcc-speak "umulhisi3". The difference to *this*
+;; function is just a missing top mstep*16 sequence and shifts and 64-bit
+;; additions for the high part. Compared to an implementation based on
+;; calling __Mul four times (see default implementation of umul_ppmm in
+;; longlong.h), this will complete in a time between a fourth and a third
+;; of that, assuming the value-based optimizations don't strike. If they
+;; all strike there (very often) but none here, we still win, though by a
+;; lesser margin, due to lesser total overhead.
+
+#define L(x) .x
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+#ifdef __USER_LABEL_PREFIX__
+# define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+#else
+# define SYM(x) x
+#endif
+
+ .global SYM(__umulsidi3)
+ .type SYM(__umulsidi3),@function
+SYM(__umulsidi3):
+#if defined (__CRIS_arch_version) && __CRIS_arch_version >= 10
+;; Can't have the mulu.d last on a cache-line, due to a hardware bug. See
+;; the documentation for -mmul-bug-workaround.
+;; Not worthwhile to conditionalize here.
+ .p2alignw 2,0x050f
+ mulu.d $r11,$r10
+ ret
+ move $mof,$r11
+#else
+ move.d $r11,$r9
+ bound.d $r10,$r9
+ cmpu.w 65535,$r9
+ bls L(L3)
+ move.d $r10,$r12
+
+ move.d $r10,$r13
+ movu.w $r11,$r9 ; ab*cd = (a*c)<<32 (a*d + b*c)<<16 + b*d
+
+;; We're called for floating point numbers very often with the "low" 16
+;; bits zero, so it's worthwhile to optimize for that.
+
+ beq L(L6) ; d == 0?
+ lslq 16,$r13
+
+ beq L(L7) ; b == 0?
+ clear.w $r10
+
+ mstep $r9,$r13 ; d*b
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+ mstep $r9,$r13
+
+L(L7):
+ test.d $r10
+ mstep $r9,$r10 ; d*a
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+ mstep $r9,$r10
+
+;; d*a in $r10, d*b in $r13, ab in $r12 and cd in $r11
+;; $r9 = d, need to do b*c and a*c; we can drop d.
+;; so $r9 is up for use and we can shift down $r11 as the mstep
+;; source for the next mstep-part.
+
+L(L8):
+ lsrq 16,$r11
+ move.d $r12,$r9
+ lslq 16,$r9
+ beq L(L9) ; b == 0?
+ mstep $r11,$r9
+
+ mstep $r11,$r9 ; b*c
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+ mstep $r11,$r9
+L(L9):
+
+;; d*a in $r10, d*b in $r13, c*b in $r9, ab in $r12 and c in $r11,
+;; need to do a*c. We want that to end up in $r11, so we shift up $r11 to
+;; now use as the destination operand. We'd need a test insn to update N
+;; to do it the other way round.
+
+ lsrq 16,$r12
+ lslq 16,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+ mstep $r12,$r11
+
+;; d*a in $r10, d*b in $r13, c*b in $r9, a*c in $r11 ($r12 free).
+;; Need (a*d + b*c)<<16 + b*d into $r10 and
+;; a*c + (a*d + b*c)>>16 plus carry from the additions into $r11.
+
+ add.d $r9,$r10 ; (a*d + b*c) - may produce a carry.
+ scs $r12 ; The carry corresponds to bit 16 of $r11.
+ lslq 16,$r12
+ add.d $r12,$r11 ; $r11 = a*c + carry from (a*d + b*c).
+
+#if defined (__CRIS_arch_version) && __CRIS_arch_version >= 8
+ swapw $r10
+ addu.w $r10,$r11 ; $r11 = a*c + (a*d + b*c) >> 16 including carry.
+ clear.w $r10 ; $r10 = (a*d + b*c) << 16
+#else
+ move.d $r10,$r9
+ lsrq 16,$r9
+ add.d $r9,$r11 ; $r11 = a*c + (a*d + b*c) >> 16 including carry.
+ lslq 16,$r10 ; $r10 = (a*d + b*c) << 16
+#endif
+ add.d $r13,$r10 ; $r10 = (a*d + b*c) << 16 + b*d - may produce a carry.
+ scs $r9
+ ret
+ add.d $r9,$r11 ; Last carry added to the high-order 32 bits.
+
+L(L6):
+ clear.d $r13
+ ba L(L8)
+ clear.d $r10
+
+L(L11):
+ clear.d $r10
+ ret
+ clear.d $r11
+
+L(L3):
+;; Form the maximum in $r10, by knowing the minimum, $r9.
+;; (We don't know which one of $r10 or $r11 it is.)
+;; Check if the largest operand is still just 16 bits.
+
+ xor $r9,$r10
+ xor $r11,$r10
+ cmpu.w 65535,$r10
+ bls L(L5)
+ movu.w $r9,$r13
+
+;; We have ab*cd = (a*c)<<32 + (a*d + b*c)<<16 + b*d, but c==0
+;; so we only need (a*d)<<16 + b*d with d = $r13, ab = $r10.
+;; Remember that the upper part of (a*d)<<16 goes into the lower part
+;; of $r11 and there may be a carry from adding the low 32 parts.
+ beq L(L11) ; d == 0?
+ move.d $r10,$r9
+
+ lslq 16,$r9
+ beq L(L10) ; b == 0?
+ clear.w $r10
+
+ mstep $r13,$r9 ; b*d
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+ mstep $r13,$r9
+L(L10):
+ test.d $r10
+ mstep $r13,$r10 ; a*d
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ move.d $r10,$r11
+ lsrq 16,$r11
+ lslq 16,$r10
+ add.d $r9,$r10
+ scs $r12
+ ret
+ add.d $r12,$r11
+
+L(L5):
+;; We have ab*cd = (a*c)<<32 + (a*d + b*c)<<16 + b*d, but a and c==0
+;; so b*d (with min=b=$r13, max=d=$r10) it is. As it won't overflow the
+;; 32-bit part, just set $r11 to 0.
+
+ lslq 16,$r10
+ clear.d $r11
+
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ mstep $r13,$r10
+ ret
+ mstep $r13,$r10
+#endif
+L(Lfe1):
+ .size SYM(__umulsidi3),L(Lfe1)-SYM(__umulsidi3)
diff --git a/gcc-4.9/libgcc/config/darwin-64.c b/gcc-4.9/libgcc/config/darwin-64.c
new file mode 100644
index 000000000..504e45a76
--- /dev/null
+++ b/gcc-4.9/libgcc/config/darwin-64.c
@@ -0,0 +1,72 @@
+/* Functions shipped in the ppc64 and x86_64 version of libgcc_s.1.dylib
+ in older Mac OS X versions, preserved for backwards compatibility.
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#if defined (__ppc64__) || defined (__x86_64__)
+/* Many of these functions have probably never been used by anyone
+ anywhere on these targets, but it's hard to prove this, so they're defined
+ here. None are actually necessary, as demonstrated below by defining
+ each function using the operation it implements. */
+
+typedef long DI;
+typedef unsigned long uDI;
+typedef int SI;
+typedef unsigned int uSI;
+typedef int word_type __attribute__ ((mode (__word__)));
+
+DI __ashldi3 (DI x, word_type c);
+DI __ashrdi3 (DI x, word_type c);
+int __clzsi2 (uSI x);
+word_type __cmpdi2 (DI x, DI y);
+int __ctzsi2 (uSI x);
+DI __divdi3 (DI x, DI y);
+uDI __lshrdi3 (uDI x, word_type c);
+DI __moddi3 (DI x, DI y);
+DI __muldi3 (DI x, DI y);
+DI __negdi2 (DI x);
+int __paritysi2 (uSI x);
+int __popcountsi2 (uSI x);
+word_type __ucmpdi2 (uDI x, uDI y);
+uDI __udivdi3 (uDI x, uDI y);
+uDI __udivmoddi4 (uDI x, uDI y, uDI *r);
+uDI __umoddi3 (uDI x, uDI y);
+
+DI __ashldi3 (DI x, word_type c) { return x << c; }
+DI __ashrdi3 (DI x, word_type c) { return x >> c; }
+int __clzsi2 (uSI x) { return __builtin_clz (x); }
+word_type __cmpdi2 (DI x, DI y) { return x < y ? 0 : x == y ? 1 : 2; }
+int __ctzsi2 (uSI x) { return __builtin_ctz (x); }
+DI __divdi3 (DI x, DI y) { return x / y; }
+uDI __lshrdi3 (uDI x, word_type c) { return x >> c; }
+DI __moddi3 (DI x, DI y) { return x % y; }
+DI __muldi3 (DI x, DI y) { return x * y; }
+DI __negdi2 (DI x) { return -x; }
+int __paritysi2 (uSI x) { return __builtin_parity (x); }
+int __popcountsi2 (uSI x) { return __builtin_popcount (x); }
+word_type __ucmpdi2 (uDI x, uDI y) { return x < y ? 0 : x == y ? 1 : 2; }
+uDI __udivdi3 (uDI x, uDI y) { return x / y; }
+uDI __udivmoddi4 (uDI x, uDI y, uDI *r) { *r = x % y; return x / y; }
+uDI __umoddi3 (uDI x, uDI y) { return x % y; }
+
+#endif /* __ppc64__ || __x86_64__ */
diff --git a/gcc-4.9/libgcc/config/darwin-crt-tm.c b/gcc-4.9/libgcc/config/darwin-crt-tm.c
new file mode 100644
index 000000000..e11a0afb8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/darwin-crt-tm.c
@@ -0,0 +1,105 @@
+/* Provide the runtime infrastructure for the transactional memory lib.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Iain Sandoe <iains@gcc.gnu.org>
+
+ This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "tsystem.h"
+#include <stddef.h>
+#include <dlfcn.h>
+#include <mach-o/dyld.h>
+#include <mach-o/getsect.h>
+
+#ifdef __LP64__
+#define GET_DATA_TMCT(mh,size) \
+ getsectdatafromheader_64 ((struct mach_header_64*) mh, \
+ "__DATA", "__tm_clone_table", (uint64_t *)size)
+#else
+#define GET_DATA_TMCT(mh,size) \
+ getsectdatafromheader (mh, "__DATA", "__tm_clone_table", (uint32_t *)size)
+#endif
+
+#define WEAK __attribute__((weak))
+
+extern void _ITM_registerTMCloneTable (void *, size_t) WEAK;
+extern void _ITM_deregisterTMCloneTable (void *) WEAK;
+
+#if defined(START) || defined(END)
+static inline void *getTMCloneTable (const void *f, size_t *tmct_siz)
+{
+ char *tmct_fixed, *tmct = NULL;
+ unsigned int i, img_count;
+ struct mach_header *mh;
+ Dl_info info;
+
+ if (! dladdr (f, &info) || info.dli_fbase == NULL)
+ abort ();
+
+ mh = (struct mach_header *) info.dli_fbase;
+ tmct_fixed = GET_DATA_TMCT (mh, tmct_siz);
+ *tmct_siz /= (sizeof (size_t) * 2);
+ /* No tm_clone_table or no clones. */
+ if (tmct_fixed == NULL || *tmct_siz == 0)
+ return NULL;
+
+ img_count = _dyld_image_count();
+ for (i = 0; i < img_count && tmct == NULL; i++)
+ {
+ if (mh == _dyld_get_image_header(i))
+ tmct = tmct_fixed + (unsigned long)_dyld_get_image_vmaddr_slide(i);
+ }
+
+ return tmct;
+}
+#endif
+
+#ifdef START
+
+void __doTMRegistrations (void) __attribute__ ((constructor));
+
+void __doTMRegistrations (void)
+{
+ size_t tmct_siz;
+ void *tmct;
+
+ tmct = getTMCloneTable ((const void *)&__doTMRegistrations, &tmct_siz);
+ if (_ITM_registerTMCloneTable != NULL && tmct != NULL)
+ _ITM_registerTMCloneTable (tmct, (size_t)tmct_siz);
+}
+
+#endif
+
+#ifdef END
+
+void __doTMdeRegistrations (void) __attribute__ ((destructor));
+
+void __doTMdeRegistrations (void)
+{
+ size_t tmct_siz;
+ void *tmct;
+
+ tmct = getTMCloneTable ((const void *)&__doTMdeRegistrations, &tmct_siz);
+ if (_ITM_deregisterTMCloneTable != NULL && tmct != NULL)
+ _ITM_deregisterTMCloneTable (tmct);
+}
+
+#endif
diff --git a/gcc-4.9/libgcc/config/darwin-crt3.c b/gcc-4.9/libgcc/config/darwin-crt3.c
new file mode 100644
index 000000000..256bd8d45
--- /dev/null
+++ b/gcc-4.9/libgcc/config/darwin-crt3.c
@@ -0,0 +1,528 @@
+/* __cxa_atexit backwards-compatibility support for Darwin.
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Don't do anything if we are compiling for a kext multilib. */
+#ifdef __PIC__
+
+#include "tconfig.h"
+#include "tsystem.h"
+
+#include <dlfcn.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* This file works around two different problems.
+
+ The first problem is that there is no __cxa_atexit on Mac OS versions
+ before 10.4. It fixes this by providing a complete atexit and
+ __cxa_atexit emulation called from the regular atexit.
+
+ The second problem is that on all shipping versions of Mac OS,
+ __cxa_finalize and exit() don't work right: they don't run routines
+ that were registered while other atexit routines are running. This
+ is worked around by wrapping each atexit/__cxa_atexit routine with
+ our own routine which ensures that any __cxa_atexit calls while it
+ is running are honoured.
+
+ There are still problems which this does not solve. Before 10.4,
+ shared objects linked with previous compilers won't have their
+ atexit calls properly interleaved with code compiled with newer
+ compilers. Also, atexit routines registered from shared objects
+ linked with previous compilers won't get the bug fix. */
+
+typedef int (*cxa_atexit_p)(void (*func) (void*), void* arg, const void* dso);
+typedef void (*cxa_finalize_p)(const void *dso);
+typedef int (*atexit_p)(void (*func)(void));
+
+/* These are from "keymgr.h". */
+extern void *_keymgr_get_and_lock_processwide_ptr (unsigned key);
+extern int _keymgr_get_and_lock_processwide_ptr_2 (unsigned, void **);
+extern int _keymgr_set_and_unlock_processwide_ptr (unsigned key, void *ptr);
+
+extern void *__keymgr_global[];
+typedef struct _Sinfo_Node {
+ unsigned int size ; /*size of this node*/
+ unsigned short major_version ; /*API major version.*/
+ unsigned short minor_version ; /*API minor version.*/
+ } _Tinfo_Node ;
+
+#ifdef __ppc__
+#define CHECK_KEYMGR_ERROR(e) \
+ (((_Tinfo_Node *)__keymgr_global[2])->major_version >= 4 ? (e) : 0)
+#else
+#define CHECK_KEYMGR_ERROR(e) (e)
+#endif
+
+/* Our globals are stored under this keymgr index. */
+#define KEYMGR_ATEXIT_LIST 14
+
+/* The different kinds of callback routines. */
+typedef void (*atexit_callback)(void);
+typedef void (*cxa_atexit_callback)(void *);
+
+/* This structure holds a routine to call. There may be extra fields
+ at the end of the structure that this code doesn't know about. */
+struct one_atexit_routine
+{
+ union {
+ atexit_callback ac;
+ cxa_atexit_callback cac;
+ } callback;
+ /* has_arg is 0/2/4 if 'ac' is live, 1/3/5 if 'cac' is live.
+ Higher numbers indicate a later version of the structure that this
+ code doesn't understand and will ignore. */
+ int has_arg;
+ void * arg;
+};
+
+struct atexit_routine_list
+{
+ struct atexit_routine_list * next;
+ struct one_atexit_routine r;
+};
+
+/* The various possibilities for status of atexit(). */
+enum atexit_status {
+ atexit_status_unknown = 0,
+ atexit_status_missing = 1,
+ atexit_status_broken = 2,
+ atexit_status_working = 16
+};
+
+struct keymgr_atexit_list
+{
+ /* Version of this list. This code knows only about version 0.
+ If the version is higher than 0, this code may add new atexit routines
+ but should not attempt to run the list. */
+ short version;
+ /* 1 if an atexit routine is currently being run by this code, 0
+ otherwise. */
+ char running_routines;
+ /* Holds a value from 'enum atexit_status'. */
+ unsigned char atexit_status;
+ /* The list of atexit and cxa_atexit routines registered. If
+ atexit_status_missing it contains all routines registered while
+ linked with this code. If atexit_status_broken it contains all
+ routines registered during cxa_finalize while linked with this
+ code. */
+ struct atexit_routine_list *l;
+ /* &__cxa_atexit; set if atexit_status >= atexit_status_broken. */
+ cxa_atexit_p cxa_atexit_f;
+ /* &__cxa_finalize; set if atexit_status >= atexit_status_broken. */
+ cxa_finalize_p cxa_finalize_f;
+ /* &atexit; set if atexit_status >= atexit_status_working
+ or atexit_status == atexit_status_missing. */
+ atexit_p atexit_f;
+};
+
+/* Return 0 if __cxa_atexit has the bug it has in Mac OS 10.4: it
+ fails to call routines registered while an atexit routine is
+ running. Return 1 if it works properly, and -1 if an error occurred. */
+
+struct atexit_data
+{
+ int result;
+ cxa_atexit_p cxa_atexit;
+};
+
+static void cxa_atexit_check_2 (void *arg)
+{
+ ((struct atexit_data *)arg)->result = 1;
+}
+
+static void cxa_atexit_check_1 (void *arg)
+{
+ struct atexit_data * aed = arg;
+ if (aed->cxa_atexit (cxa_atexit_check_2, arg, arg) != 0)
+ aed->result = -1;
+}
+
+static int
+check_cxa_atexit (cxa_atexit_p cxa_atexit, cxa_finalize_p cxa_finalize)
+{
+ struct atexit_data aed = { 0, cxa_atexit };
+
+ /* We re-use &aed as the 'dso' parameter, since it's a unique address. */
+ if (cxa_atexit (cxa_atexit_check_1, &aed, &aed) != 0)
+ return -1;
+ cxa_finalize (&aed);
+ if (aed.result == 0)
+ {
+ /* Call __cxa_finalize again to make sure that cxa_atexit_check_2
+ is removed from the list before AED goes out of scope. */
+ cxa_finalize (&aed);
+ aed.result = 0;
+ }
+ return aed.result;
+}
+
+#ifdef __ppc__
+/* This comes from Csu. It works only before 10.4. The prototype has
+ been altered a bit to avoid casting. */
+extern int _dyld_func_lookup(const char *dyld_func_name,
+ void *address) __attribute__((visibility("hidden")));
+
+static void our_atexit (void);
+
+/* We're running on 10.3.9. Find the address of the system atexit()
+ function. So easy to say, so hard to do. */
+static atexit_p
+find_atexit_10_3 (void)
+{
+ unsigned int (*dyld_image_count_fn)(void);
+ const char *(*dyld_get_image_name_fn)(unsigned int image_index);
+ const void *(*dyld_get_image_header_fn)(unsigned int image_index);
+ const void *(*NSLookupSymbolInImage_fn)(const void *image,
+ const char *symbolName,
+ unsigned int options);
+ void *(*NSAddressOfSymbol_fn)(const void *symbol);
+ unsigned i, count;
+
+ /* Find some dyld functions. */
+ _dyld_func_lookup("__dyld_image_count", &dyld_image_count_fn);
+ _dyld_func_lookup("__dyld_get_image_name", &dyld_get_image_name_fn);
+ _dyld_func_lookup("__dyld_get_image_header", &dyld_get_image_header_fn);
+ _dyld_func_lookup("__dyld_NSLookupSymbolInImage", &NSLookupSymbolInImage_fn);
+ _dyld_func_lookup("__dyld_NSAddressOfSymbol", &NSAddressOfSymbol_fn);
+
+ /* If any of these don't exist, that's an error. */
+ if (! dyld_image_count_fn || ! dyld_get_image_name_fn
+ || ! dyld_get_image_header_fn || ! NSLookupSymbolInImage_fn
+ || ! NSAddressOfSymbol_fn)
+ return NULL;
+
+ count = dyld_image_count_fn ();
+ for (i = 0; i < count; i++)
+ {
+ const char * path = dyld_get_image_name_fn (i);
+ const void * image;
+ const void * symbol;
+
+ if (strcmp (path, "/usr/lib/libSystem.B.dylib") != 0)
+ continue;
+ image = dyld_get_image_header_fn (i);
+ if (! image)
+ return NULL;
+ /* '4' is NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR. */
+ symbol = NSLookupSymbolInImage_fn (image, "_atexit", 4);
+ if (! symbol)
+ return NULL;
+ return NSAddressOfSymbol_fn (symbol);
+ }
+ return NULL;
+}
+#endif
+
+/* Create (if necessary), find, lock, fill in, and return our globals.
+ Return NULL on error, in which case the globals will not be locked.
+ The caller should call keymgr_set_and_unlock. */
+static struct keymgr_atexit_list *
+get_globals (void)
+{
+ struct keymgr_atexit_list * r;
+
+#ifdef __ppc__
+ /* 10.3.9 doesn't have _keymgr_get_and_lock_processwide_ptr_2 so the
+ PPC side can't use it. On 10.4 this just means the error gets
+ reported a little later when
+ _keymgr_set_and_unlock_processwide_ptr finds that the key was
+ never locked. */
+ r = _keymgr_get_and_lock_processwide_ptr (KEYMGR_ATEXIT_LIST);
+#else
+ void * rr;
+ if (_keymgr_get_and_lock_processwide_ptr_2 (KEYMGR_ATEXIT_LIST, &rr))
+ return NULL;
+ r = rr;
+#endif
+
+ if (r == NULL)
+ {
+ r = calloc (sizeof (struct keymgr_atexit_list), 1);
+ if (! r)
+ return NULL;
+ }
+
+ if (r->atexit_status == atexit_status_unknown)
+ {
+ void *handle;
+
+ handle = dlopen ("/usr/lib/libSystem.B.dylib", RTLD_NOLOAD);
+ if (!handle)
+ {
+#ifdef __ppc__
+ r->atexit_status = atexit_status_missing;
+ r->atexit_f = find_atexit_10_3 ();
+ if (! r->atexit_f)
+ goto error;
+ if (r->atexit_f (our_atexit))
+ goto error;
+#else
+ goto error;
+#endif
+ }
+ else
+ {
+ int chk_result;
+
+ r->cxa_atexit_f = (cxa_atexit_p)dlsym (handle, "__cxa_atexit");
+ r->cxa_finalize_f = (cxa_finalize_p)dlsym (handle, "__cxa_finalize");
+ if (! r->cxa_atexit_f || ! r->cxa_finalize_f)
+ goto error;
+
+ chk_result = check_cxa_atexit (r->cxa_atexit_f, r->cxa_finalize_f);
+ if (chk_result == -1)
+ goto error;
+ else if (chk_result == 0)
+ r->atexit_status = atexit_status_broken;
+ else
+ {
+ r->atexit_f = (atexit_p)dlsym (handle, "atexit");
+ if (! r->atexit_f)
+ goto error;
+ r->atexit_status = atexit_status_working;
+ }
+ }
+ }
+
+ return r;
+
+ error:
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, r);
+ return NULL;
+}
+
+/* Add TO_ADD to ATEXIT_LIST. ATEXIT_LIST may be NULL but is
+ always the result of calling _keymgr_get_and_lock_processwide_ptr and
+ so KEYMGR_ATEXIT_LIST is known to be locked; this routine is responsible
+ for unlocking it. */
+
+static int
+add_routine (struct keymgr_atexit_list * g,
+ const struct one_atexit_routine * to_add)
+{
+ struct atexit_routine_list * s
+ = malloc (sizeof (struct atexit_routine_list));
+ int result;
+
+ if (!s)
+ {
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+ return -1;
+ }
+ s->r = *to_add;
+ s->next = g->l;
+ g->l = s;
+ result = _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+ return CHECK_KEYMGR_ERROR (result) == 0 ? 0 : -1;
+}
+
+/* This runs the routines in G->L up to STOP. */
+static struct keymgr_atexit_list *
+run_routines (struct keymgr_atexit_list *g,
+ struct atexit_routine_list *stop)
+{
+ for (;;)
+ {
+ struct atexit_routine_list * cur = g->l;
+ if (! cur || cur == stop)
+ break;
+ g->l = cur->next;
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+
+ switch (cur->r.has_arg) {
+ case 0: case 2: case 4:
+ cur->r.callback.ac ();
+ break;
+ case 1: case 3: case 5:
+ cur->r.callback.cac (cur->r.arg);
+ break;
+ default:
+ /* Don't understand, so don't call it. */
+ break;
+ }
+ free (cur);
+
+ g = _keymgr_get_and_lock_processwide_ptr (KEYMGR_ATEXIT_LIST);
+ if (! g)
+ break;
+ }
+ return g;
+}
+
+/* Call the routine described by ROUTINE_PARAM and then call any
+ routines added to KEYMGR_ATEXIT_LIST while that routine was
+ running, all with in_cxa_finalize set. */
+
+static void
+cxa_atexit_wrapper (void* routine_param)
+{
+ struct one_atexit_routine * routine = routine_param;
+ struct keymgr_atexit_list *g;
+ struct atexit_routine_list * base = NULL;
+ char prev_running = 0;
+
+ g = _keymgr_get_and_lock_processwide_ptr (KEYMGR_ATEXIT_LIST);
+ if (g)
+ {
+ prev_running = g->running_routines;
+ g->running_routines = 1;
+ base = g->l;
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+ }
+
+ if (routine->has_arg)
+ routine->callback.cac (routine->arg);
+ else
+ routine->callback.ac ();
+
+ if (g)
+ g = _keymgr_get_and_lock_processwide_ptr (KEYMGR_ATEXIT_LIST);
+ if (g)
+ g = run_routines (g, base);
+ if (g)
+ {
+ g->running_routines = prev_running;
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+ }
+}
+
+#ifdef __ppc__
+/* This code is used while running on 10.3.9, when __cxa_atexit doesn't
+ exist in the system library. 10.3.9 only supported regular PowerPC,
+ so this code isn't necessary on x86 or ppc64. */
+
+/* This routine is called from the system atexit(); it runs everything
+ registered on the KEYMGR_ATEXIT_LIST. */
+
+static void
+our_atexit (void)
+{
+ struct keymgr_atexit_list *g;
+ char prev_running;
+
+ g = _keymgr_get_and_lock_processwide_ptr (KEYMGR_ATEXIT_LIST);
+ if (! g || g->version != 0 || g->atexit_status != atexit_status_missing)
+ return;
+
+ prev_running = g->running_routines;
+ g->running_routines = 1;
+ g = run_routines (g, NULL);
+ if (! g)
+ return;
+ g->running_routines = prev_running;
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+}
+#endif
+
+/* This is our wrapper around atexit and __cxa_atexit. It will return
+ nonzero if an error occurs, and otherwise:
+ - if in_cxa_finalize is set, or running on 10.3.9, add R to
+ KEYMGR_ATEXIT_LIST; or
+ - call the system __cxa_atexit to add cxa_atexit_wrapper with an argument
+ that indicates how cxa_atexit_wrapper should call R. */
+
+static int
+atexit_common (const struct one_atexit_routine *r, const void *dso)
+{
+ struct keymgr_atexit_list *g = get_globals ();
+
+ if (! g)
+ return -1;
+
+ if (g->running_routines || g->atexit_status == atexit_status_missing)
+ return add_routine (g, r);
+
+ if (g->atexit_status >= atexit_status_working)
+ {
+ int result;
+ if (r->has_arg)
+ {
+ cxa_atexit_p cxa_atexit = g->cxa_atexit_f;
+ result = _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST,
+ g);
+ if (CHECK_KEYMGR_ERROR (result))
+ return -1;
+ return cxa_atexit (r->callback.cac, r->arg, dso);
+ }
+ else
+ {
+ atexit_p atexit_f = g->atexit_f;
+ result = _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST,
+ g);
+ if (CHECK_KEYMGR_ERROR (result))
+ return -1;
+ return atexit_f (r->callback.ac);
+ }
+ }
+ else
+ {
+ cxa_atexit_p cxa_atexit = g->cxa_atexit_f;
+ struct one_atexit_routine *alloced;
+ int result;
+
+ result = _keymgr_set_and_unlock_processwide_ptr (KEYMGR_ATEXIT_LIST, g);
+ if (CHECK_KEYMGR_ERROR (result))
+ return -1;
+
+ alloced = malloc (sizeof (struct one_atexit_routine));
+ if (! alloced)
+ return -1;
+ *alloced = *r;
+ return cxa_atexit (cxa_atexit_wrapper, alloced, dso);
+ }
+}
+
+/* These are the actual replacement routines; they just funnel into
+ atexit_common. */
+
+int __cxa_atexit (cxa_atexit_callback func, void* arg,
+ const void* dso) __attribute__((visibility("hidden")));
+
+int
+__cxa_atexit (cxa_atexit_callback func, void* arg, const void* dso)
+{
+ struct one_atexit_routine r;
+ r.callback.cac = func;
+ r.has_arg = 1;
+ r.arg = arg;
+ return atexit_common (&r, dso);
+}
+
+int atexit (atexit_callback func) __attribute__((visibility("hidden")));
+
+/* Use __dso_handle to allow even bundles that call atexit() to be unloaded
+ on 10.4. */
+extern void __dso_handle;
+
+int
+atexit (atexit_callback func)
+{
+ struct one_atexit_routine r;
+ r.callback.ac = func;
+ r.has_arg = 0;
+ return atexit_common (&r, &__dso_handle);
+}
+
+#endif /* __PIC__ */
diff --git a/gcc-4.9/libgcc/config/epiphany/crti.S b/gcc-4.9/libgcc/config/epiphany/crti.S
new file mode 100644
index 000000000..f50270adb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/crti.S
@@ -0,0 +1,34 @@
+# Start .init and .fini sections.
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .section .init
+ .global init
+ .balign 2
+init:
+ str lr,[sp],-4
+
+ .section .fini
+ .global fini
+ .balign 2
+fini:
+ str lr,[sp],-4
diff --git a/gcc-4.9/libgcc/config/epiphany/crtint.S b/gcc-4.9/libgcc/config/epiphany/crtint.S
new file mode 100644
index 000000000..bd01e4dfc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/crtint.S
@@ -0,0 +1,27 @@
+# initialize config for -mfp-mode=int
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .section .init
+ mov r0, %low(#524288)
+ movt r0, %high(#524288)
+ movts config,r0
diff --git a/gcc-4.9/libgcc/config/epiphany/crtm1reg-r43.S b/gcc-4.9/libgcc/config/epiphany/crtm1reg-r43.S
new file mode 100644
index 000000000..0df47ef44
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/crtm1reg-r43.S
@@ -0,0 +1,26 @@
+# initialize config for -m1reg-r43
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .section .init
+ mov r0, 0
+ sub r43,r0,1
diff --git a/gcc-4.9/libgcc/config/epiphany/crtm1reg-r63.S b/gcc-4.9/libgcc/config/epiphany/crtm1reg-r63.S
new file mode 100644
index 000000000..473abee2a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/crtm1reg-r63.S
@@ -0,0 +1,26 @@
+# initialize config for -m1reg-r63
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .section .init
+ mov r0, 0
+ sub r63,r0,1
diff --git a/gcc-4.9/libgcc/config/epiphany/crtn.S b/gcc-4.9/libgcc/config/epiphany/crtn.S
new file mode 100644
index 000000000..b21bb32b8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/crtn.S
@@ -0,0 +1,32 @@
+# End .init and .fini sections.
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .section .init
+ ldr lr,[sp,4]
+ add sp,sp,16
+ jr lr
+
+ .section .fini
+ ldr lr,[sp,4]
+ add sp,sp,16
+ jr lr
diff --git a/gcc-4.9/libgcc/config/epiphany/crtrunc.S b/gcc-4.9/libgcc/config/epiphany/crtrunc.S
new file mode 100644
index 000000000..95349c86a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/crtrunc.S
@@ -0,0 +1,26 @@
+# initialize config for -mfp-mode=truncate
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+ .section .init
+ mov r0, 1
+ movts config,r0
diff --git a/gcc-4.9/libgcc/config/epiphany/divsi3-float.S b/gcc-4.9/libgcc/config/epiphany/divsi3-float.S
new file mode 100644
index 000000000..1e0183a90
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/divsi3-float.S
@@ -0,0 +1,77 @@
+/* Signed 32 bit division optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__divsi3,T_UINT)
+ .global SYM(__divsi3)
+ .balign 4
+ HIDDEN_FUNC(__divsi3)
+SYM(__divsi3):
+ float TMP2,r0
+ mov TMP4,0
+ float TMP1,r1
+ sub TMP0,TMP4,r0
+ beq .Lret_r0
+ movgt r0,TMP0
+ sub TMP0,TMP4,r1
+ movgt r1,TMP0
+ mov TMP0,1
+ sub TMP2,TMP2,TMP1
+ asr TMP3,TMP2,31 ; save sign
+ lsl TMP2,TMP2,1
+ blt .Lret0
+ sub TMP1,TMP2,1 ; rounding compensation, avoid overflow
+ movgte TMP2,TMP1
+ lsr TMP2,TMP2,24
+ lsl r1,r1,TMP2
+ lsl TMP0,TMP0,TMP2
+ sub TMP1,r0,r1
+ movgteu r0,TMP1
+ movgteu TMP4,TMP0
+ lsl TMP5,TMP0,1
+ sub TMP1,r0,r1
+ movgteu r0,TMP1
+ movgteu TMP4,TMP5
+ sub TMP1,r1,1
+ mov r1,%low(.L0step)
+ movt r1,%high(.L0step)
+ lsl TMP2,TMP2,3
+ sub r1,r1,TMP2
+ jr r1
+ .rep 30
+ lsl r0,r0,1
+ sub.l r1,r0,TMP1
+ movgteu r0,r1
+ .endr
+.L0step:sub r1,TMP0,1 ; mask result bits from steps ...
+ and r0,r0,r1
+ orr r0,r0,TMP4 ; ... and combine with first bit.
+ eor r0,r0,TMP3 ; restore sign
+ sub r0,r0,TMP3
+.Lret_r0:rts
+.Lret0: mov r0,0
+ rts
+ ENDFUNC(__divsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/divsi3.S b/gcc-4.9/libgcc/config/epiphany/divsi3.S
new file mode 100644
index 000000000..1825aa83d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/divsi3.S
@@ -0,0 +1,92 @@
+/* Signed 32 bit division optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__divsi3,T_INT)
+ .global SYM(__divsi3)
+ .balign 4
+ HIDDEN_FUNC(__divsi3)
+SYM(__divsi3):
+ mov r12,0
+ sub r2,r12,r0
+ movlt r2,r0
+ sub r3,r12,r1
+ movlt r3,r1
+ sub r19,r2,r3
+ bltu .Lret0
+ movt r12,0x4000
+ orr r16,r2,r12
+ orr r18,r3,r12
+ fsub r16,r16,r12
+ fsub r18,r18,r12
+ movt r12,0x4b80
+ lsr r19,r3,23
+ lsr r17,r2,23
+ movt r17,0x4b80
+ fsub r17,r17,r12
+ movt r19,0x4b80
+ fsub r19,r19,r12
+ mov r12,%low(.L0step)
+ movt r12,%high(.L0step)
+ mov r20,0
+ mov r21,1
+ movne r16,r17
+ lsr r17,r3,23
+ movne r18,r19
+ eor r1,r1,r0 ; save sign
+ asr r19,r1,31
+ lsr r1,r16,23
+ lsr r0,r18,23
+ sub r1,r1,r0 ; calculate bit number difference.
+ lsl r3,r3,r1
+ lsr r16,r3,1
+ lsl r0,r21,r1
+ lsl r1,r1,3
+ sub r12,r12,r1
+ sub r3,r2,r3
+ movgteu r2,r3
+ movgteu r20,r0
+ lsr r0,r0,1
+ add r17,r0,r20
+ sub r3,r2,r16
+ movgteu r2,r3
+ movgteu r20,r17
+ sub r16,r16,1
+ jr r12
+ .rep 30
+ lsl r2,r2,1
+ sub r3,r2,r16
+ movgteu r2,r3
+ .endr
+ sub r0,r0,1 ; mask result bits from steps ...
+ and r0,r0,r2
+ orr r20,r0,r20 ; ... and combine with first bit.
+.L0step:eor r0,r20,r19 ; restore sign
+ sub r0,r0,r19
+ rts
+.Lret0: mov r0,0
+ rts
+ ENDFUNC(__divsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/divsi3.c b/gcc-4.9/libgcc/config/epiphany/divsi3.c
new file mode 100644
index 000000000..fd85be19c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/divsi3.c
@@ -0,0 +1,120 @@
+/* Generic signed 32 bit division implementation.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef union { unsigned int i; float f; } fu;
+
+/* Although the semantics of the function ask for signed / unsigned inputs,
+ for the actual implementation we use unsigned numbers. */
+unsigned int __divsi3 (unsigned int a, unsigned int b);
+
+unsigned int
+__divsi3 (unsigned int a, unsigned int b)
+{
+ unsigned int sign = (int) (a ^ b) >> 31;
+ unsigned int d, t, s0, s1, s2, r0, r1;
+ fu u0, u1, u2, u1b, u2b;
+
+ a = abs (a);
+ b = abs (b);
+
+ if (b > a)
+ return 0;
+
+ /* Compute difference in number of bits in S0. */
+ u0.i = 0x40000000;
+ u1b.i = u2b.i = u0.i;
+ u1.i = a;
+ u2.i = b;
+ u1.i = a | u0.i;
+ t = 0x4b800000 | ((a >> 23) & 0xffff);
+ if (a >> 23)
+ {
+ u1.i = t;
+ u1b.i = 0x4b800000;
+ }
+ u2.i = b | u0.i;
+ t = 0x4b800000 | ((b >> 23) & 0xffff);
+ if (b >> 23)
+ {
+ u2.i = t;
+ u2b.i = 0x4b800000;
+ }
+ u1.f = u1.f - u1b.f;
+ u2.f = u2.f - u2b.f;
+ s1 = u1.i >> 23;
+ s2 = u2.i >> 23;
+ s0 = s1 - s2;
+
+ b <<= s0;
+ d = b - 1;
+
+ r0 = 1 << s0;
+ r1 = 0;
+ t = a - b;
+ if (t <= a)
+ {
+ a = t;
+ r1 = r0;
+ }
+
+#define STEP(n) case n: a += a; t = a - d; if (t <= a) a = t;
+ switch (s0)
+ {
+ STEP (31)
+ STEP (30)
+ STEP (29)
+ STEP (28)
+ STEP (27)
+ STEP (26)
+ STEP (25)
+ STEP (24)
+ STEP (23)
+ STEP (22)
+ STEP (21)
+ STEP (20)
+ STEP (19)
+ STEP (18)
+ STEP (17)
+ STEP (16)
+ STEP (15)
+ STEP (14)
+ STEP (13)
+ STEP (12)
+ STEP (11)
+ STEP (10)
+ STEP (9)
+ STEP (8)
+ STEP (7)
+ STEP (6)
+ STEP (5)
+ STEP (4)
+ STEP (3)
+ STEP (2)
+ STEP (1)
+ case 0: ;
+ }
+ r0 = r1 | (r0-1 & a);
+ return (r0 ^ sign) - sign;
+}
diff --git a/gcc-4.9/libgcc/config/epiphany/epiphany-asm.h b/gcc-4.9/libgcc/config/epiphany/epiphany-asm.h
new file mode 100644
index 000000000..1ea8bbae3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/epiphany-asm.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* ANSI concatenation macros. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+#define STRINGIFY2(a, b) STRINGIFY(a##b)
+#define STRINGIFY(a) #a
+
+/* Use the right prefix for global labels. */
+
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+#define FSTAB(X,T) .stabs STRINGIFY2(X##:F,T),36,0,__LINE__,SYM(X)
+#define FUNC(X) .type SYM(X),@function
+#define HIDDEN_FUNC(X) FUNC(X)` .hidden SYM(X)
+#define ENDFUNC0(X) CONCAT1(.Lfe_,X): .size X,CONCAT1(.Lfe_,X)-X
+#define ENDFUNC(X) ENDFUNC0(SYM(X))
+
+#define TMP0 r12
+#define TMP1 r16
+#define TMP2 r17
+#define TMP3 r18
+#define TMP4 r19
+#define TMP5 r20
+
+#define T_INT (0,1)
+ .stabs "int:t(0,1)=r(0,1);-2147483648;2147483647;",128,0,1,0
+#define T_UINT (0,2)
+ .stabs "unsigned int:t(0,2)=r(0,2);0;037777777777;",128,0,1,0
diff --git a/gcc-4.9/libgcc/config/epiphany/ieee-754/eqsf2.S b/gcc-4.9/libgcc/config/epiphany/ieee-754/eqsf2.S
new file mode 100644
index 000000000..63e965ca4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/ieee-754/eqsf2.S
@@ -0,0 +1,50 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../epiphany-asm.h"
+
+ /* Assumption: NaNs have all bits 10..30 and one of bit 0..9 set. */
+
+ FSTAB (__eqsf2,T_INT)
+ .global SYM(__eqsf2)
+ .balign 4
+ HIDDEN_FUNC(__eqsf2)
+SYM(__eqsf2):
+ sub TMP0,r0,r1
+ beq .Lno_bdiff
+ orr TMP0,r0,r1
+ add TMP0,TMP0,TMP0
+ rts
+.Lno_bdiff:
+#ifndef FLOAT_FORMAT_MOTOROLA
+ mov TMP0,0xffff
+ movt TMP0,0x7f
+ add TMP0,TMP0,r0
+#else
+ add TMP0,r0,0x3ff
+#endif
+ eor TMP0,TMP0,r0
+ lsr TMP0,TMP0,31
+ rts
+ ENDFUNC(__eqsf2)
diff --git a/gcc-4.9/libgcc/config/epiphany/ieee-754/fast_div.S b/gcc-4.9/libgcc/config/epiphany/ieee-754/fast_div.S
new file mode 100644
index 000000000..06b850609
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/ieee-754/fast_div.S
@@ -0,0 +1,124 @@
+/* Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../epiphany-asm.h"
+
+.section _fast_div_text,"a",@progbits;
+ .balign 8;
+_fast_div_table:
+.word 0x007fffff// mantissa mask
+.word 0x40257ebb// hold constant a = 2.58586
+
+.word 0x3f000000// hold constant 126 shifted to bits [30:23]
+.word 0xc0ba2e88// hold constant b = -5.81818
+
+.word 0x4087c1e8// hold constant c = 4.24242
+.word 0x40000000// to hold constant 2 for Newton-Raphson iterations
+
+ .global SYM(__fast_recipsf2)
+ FUNC(__fast_recipsf2)
+SYM(__fast_recipsf2):
+
+//###################
+//# input operands:
+//###################
+// Divisor
+//R0
+// Function address (used with negative offsets to read _fast_div_table)
+//R1
+/* Scratch registers: two single (TMP0/TMP5) and two pairs. */
+#define P0L TMP1
+#define P0H TMP2
+#define P1L TMP3
+#define P1H TMP4
+
+//#########################################
+//# Constants to be used in the algorithm
+//#########################################
+ldrd P0L , [ R1 , -3 ]
+
+ldrd P1L , [ R1 , -2 ]
+
+
+
+//#############################################################################
+//# The Algorithm
+//#
+//# Operation: C=A/B
+//# stage 1 - find the reciprocal 1/B according to the following scheme:
+//# B = (2^E)*m (1<m<2, E=e-127)
+//# 1/B = 1/((2^E)*m) = 1/((2^(E+1))*m1) (0.5<m1<1)
+//# = (2^-(E+1))*(1/m1) = (2^E1)*(1/m1)
+//#
+//# Now we can find the new exponent:
+//# e1 = E1+127 = -E-1+127 = -e+127-1+127 = 253-e **
+//# 1/m1 alreadt has the exponent 127, so we have to add 126-e.
+//# the exponent might underflow, which we can detect as a sign change.
+//# Since the architeture uses flush-to-zero for subnormals, we can
+//# give the result 0. then.
+//#
+//# The 1/m1 term with 0.5<m1<1 is approximated with the Chebyshev polynomial
+//# 1/m1 = 2.58586*(m1^2) - 5.81818*m1 + 4.24242
+//#
+//# Next step is to use two iterations of Newton-Raphson algorithm to complete
+//# the reciprocal calculation.
+//#
+//# Final result is achieved by multiplying A with 1/B
+//#############################################################################
+
+
+
+// R0 exponent and sign "replacement" into TMP0
+AND TMP0,R0,P0L ;
+ORR TMP0,TMP0,P1L
+SUB TMP5,R0,TMP0 // R0 sign/exponent extraction into TMP5
+// Calculate new mantissa
+FMADD P1H,TMP0,P0H ;
+ // Calculate new exponent offset 126 - "old exponent"
+ SUB P1L,P1L,TMP5
+ ldrd P0L , [ R1 , -1 ]
+FMADD P0L,TMP0,P1H ;
+ eor P1H,r0,P1L // check for overflow (N-BIT).
+ blt .Lret_0
+// P0L exponent and sign "replacement"
+sub P0L,P0L,TMP5
+
+// Newton-Raphson iteration #1
+MOV TMP0,P0H ;
+FMSUB P0H,R0,P0L ;
+FMUL P0L,P0H,P0L ;
+// Newton-Raphson iteration #2
+FMSUB TMP0,R0,P0L ;
+FMUL R0,TMP0,P0L ;
+jr lr
+.Lret_0:ldrd P0L , [ R1 , -3 ]
+ lsr TMP0,r0,31 ; extract sign
+ lsl TMP0,TMP0,31
+ add P0L,P0L,r0 ; check for NaN input
+ eor P0L,P0L,r0
+ movgte r0,TMP0
+ jr lr
+// Quotient calculation is expected by the caller: FMUL quotient,divident,R0
+ ;
+ ENDFUNC(__fast_recipsf2)
diff --git a/gcc-4.9/libgcc/config/epiphany/ieee-754/gtesf2.S b/gcc-4.9/libgcc/config/epiphany/ieee-754/gtesf2.S
new file mode 100644
index 000000000..a1566c18b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/ieee-754/gtesf2.S
@@ -0,0 +1,66 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../epiphany-asm.h"
+
+ /* Assumptions: NaNs have all bits 10..30 and one of bit 0..9 set.
+ after sub: AC = ~Borrow.
+ clobber: TMP0
+ output: gt / gte indicates greater / greater or equal. */
+
+ FSTAB (__gtesf2,T_INT)
+ .global SYM(__gtesf2)
+ .balign 4
+ HIDDEN_FUNC(__gtesf2)
+SYM(__gtesf2):
+#ifndef FLOAT_FORMAT_MOTOROLA
+ mov TMP0,0xffff
+ movt TMP0,0x7f
+ add TMP0,TMP0,r0
+ eor TMP0,TMP0,r0
+ blt .Lret
+ mov TMP0,0xffff
+ movt TMP0,0x7f
+ add TMP0,TMP0,r1
+#else
+ add TMP0,r0,0x3ff; check for r0 NaN
+ eor TMP0,TMP0,r0
+ blt .Lret
+ add TMP0,r1,0x3ff; check for r1 NaN
+#endif
+ eor TMP0,TMP0,r1
+ blt .Lret
+ and TMP0,r0,r1
+ blt .Lneg
+ orr TMP0,r0,r1
+ lsl TMP0,TMP0,1
+ beq .Lret
+ sub TMP0,r0,r1
+.Lret:
+ rts
+ .balign 4
+.Lneg:
+ sub TMP0,r1,r0
+ rts
+ ENDFUNC(__gtesf2)
diff --git a/gcc-4.9/libgcc/config/epiphany/ieee-754/ordsf2.S b/gcc-4.9/libgcc/config/epiphany/ieee-754/ordsf2.S
new file mode 100644
index 000000000..c0cfaec57
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/ieee-754/ordsf2.S
@@ -0,0 +1,50 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../epiphany-asm.h"
+
+ FSTAB (__ordsf2,T_INT)
+ .global SYM(__ordsf2)
+ .balign 8,,2
+ HIDDEN_FUNC(__ordsf2)
+SYM(__ordsf2):
+#ifndef FLOAT_FORMAT_MOTOROLA
+ mov TMP0,0
+ movt TMP0,0xff00
+ lsl TMP1,r0,1
+ sub TMP1,TMP1,TMP0
+ bgtu .Lret
+ lsl TMP1,r1,1
+ sub TMP1,TMP1,TMP0
+.Lret: rts /* ordered: lteu */
+#else
+ /* Assumption: NaNs have all bits 9..30 and one of bit 0..8 set. */
+ lsl TMP0,r0,1
+ add TMP0,TMP0,0x3fe
+ bgteu .Lret
+ lsl TMP0,r1,1
+ add TMP0,TMP0,0x3fe
+.Lret: rts /* ordered: ltu */
+#endif
+ ENDFUNC(__ordsf2)
diff --git a/gcc-4.9/libgcc/config/epiphany/ieee-754/uneqsf2.S b/gcc-4.9/libgcc/config/epiphany/ieee-754/uneqsf2.S
new file mode 100644
index 000000000..31d9bf3fb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/ieee-754/uneqsf2.S
@@ -0,0 +1,45 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "../epiphany-asm.h"
+
+ FSTAB (__uneqsf2,T_INT)
+ .global SYM(__uneqsf2)
+ .balign 8,,2
+ HIDDEN_FUNC(__uneqsf2)
+SYM(__uneqsf2):
+ sub TMP0,r0,r1
+ beq .Lret
+ orr TMP0,r0,r1
+ add TMP0,TMP0,TMP0
+ beq .Lret
+ mov TMP0,1
+ movt TMP0,0xff00
+ lsl TMP1,r0,1
+ sub TMP1,TMP0,TMP1
+ blteu .Lret
+ lsl TMP1,r1,1
+ sub TMP1,TMP0,TMP1
+.Lret: rts /* uneq: lteu */
+ ENDFUNC(__uneqsf2)
diff --git a/gcc-4.9/libgcc/config/epiphany/modsi3-float.S b/gcc-4.9/libgcc/config/epiphany/modsi3-float.S
new file mode 100644
index 000000000..76590f082
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/modsi3-float.S
@@ -0,0 +1,65 @@
+/* Unsigned 32 bit division optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__modsi3,T_UINT)
+ .global SYM(__modsi3)
+ .balign 4
+ HIDDEN_FUNC(__modsi3)
+SYM(__modsi3):
+ asr TMP3,r0,31 ; save sign
+ float TMP0,r0
+ float TMP1,r1
+ mov r2,0
+ sub TMP4,r2,r0
+ beq .Lret_r0
+ movgt r0,TMP4
+ sub TMP2,r2,r1
+ movlte TMP2,r1
+ sub r2,TMP0,TMP1
+ lsl r2,r2,1
+ blte .L0step
+ asr TMP4,r2,24
+ lsl r2,TMP4,3
+ mov TMP4,%low(.L0step)
+ movt TMP4,%high(.L0step)
+ sub r2,TMP4,r2
+ jr r2
+#define STEP(n) lsl.l r2,TMP2,n` sub r2,r0,r2` movgteu r0,r2
+ .balign 8,,2
+ STEP(31)` STEP(30)` STEP(29)` STEP(28)`
+ STEP(27)` STEP(26)` STEP(25)` STEP(24)`
+ STEP(23)` STEP(22)` STEP(21)` STEP(20)`
+ STEP(19)` STEP(18)` STEP(17)` STEP(16)`
+ STEP(15)` STEP(14)` STEP(13)` STEP(12)`
+ STEP(11)` STEP(10)` STEP(9)` STEP(8)`
+ STEP(7)` STEP(6)` STEP(5)` STEP(4)` STEP(3)` STEP(2)` STEP(1)
+.L0step:STEP(0)
+ eor r0,r0,TMP3 ; restore sign
+ sub r0,r0,TMP3
+.Lret_r0:
+ rts
+ ENDFUNC(__modsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/modsi3.S b/gcc-4.9/libgcc/config/epiphany/modsi3.S
new file mode 100644
index 000000000..68b1a2f75
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/modsi3.S
@@ -0,0 +1,77 @@
+/* Signed 32 bit modulo optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__modsi3,T_INT)
+ .global SYM(__modsi3)
+ .balign 4
+ HIDDEN_FUNC(__modsi3)
+SYM(__modsi3):
+ asr r17,r0,31 ; save sign
+ mov r2,0
+ sub r3,r2,r0
+ movgt r0,r3
+ sub r3,r2,r1
+ movgt r1,r3
+ movt r2,0xa000 ; 0xa0000000
+ orr r3,r2,r0
+ lsr r15,r0,16
+ movt r15,0xa800
+ movne r3,r15
+ lsr r16,r2,2 ; 0x28000000
+ and r15,r3,r16
+ fadd r12,r3,r15
+ orr r3,r2,r1
+ lsr r2,r1,16
+ movt r2,0xa800
+ movne r3,r2
+ and r2,r16,r3
+ fadd r3,r3,r2
+ sub r2,r0,r1
+ bltu .Lret_a
+ lsr r12,r12,23
+ mov r2,%low(.L0step)
+ movt r2,%high(.L0step)
+ lsr r3,r3,23
+ sub r3,r12,r3 ; calculate bit number difference.
+ lsl r3,r3,3
+ sub r2,r2,r3
+ jr r2
+/* lsl_l r2,r1,n` sub r2,r0,r2` movgteu r0,r2 */
+#define STEP(n) .long 0x0006441f | (n) << 5` sub r2,r0,r2` movgteu r0,r2
+ .balign 8,,2
+ STEP(31)` STEP(30)` STEP(29)` STEP(28)`
+ STEP(27)` STEP(26)` STEP(25)` STEP(24)`
+ STEP(23)` STEP(22)` STEP(21)` STEP(20)`
+ STEP(19)` STEP(18)` STEP(17)` STEP(16)`
+ STEP(15)` STEP(14)` STEP(13)` STEP(12)`
+ STEP(11)` STEP(10)` STEP(9)` STEP(8)`
+ STEP(7)` STEP(6)` STEP(5)` STEP(4)` STEP(3)` STEP(2)` STEP(1)
+.L0step:STEP(0)
+.Lret_a:eor r0,r0,r17 ; restore sign
+ sub r0,r0,r17
+ rts
+ ENDFUNC(__modsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/modsi3.c b/gcc-4.9/libgcc/config/epiphany/modsi3.c
new file mode 100644
index 000000000..229819b9e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/modsi3.c
@@ -0,0 +1,106 @@
+/* Generic signed 32 bit modulo implementation.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef union { unsigned int i; float f; } fu;
+
+unsigned int __modsi3 (unsigned int a, unsigned int b);
+
+unsigned int
+__modsi3 (unsigned int a, unsigned int b)
+{
+ unsigned int sign = (int) a >> 31;
+ unsigned int d, t, s0, s1, s2, r0, r1;
+ fu u0, u1, u2, u1b, u2b;
+
+ a = abs (a);
+ b = abs (b);
+
+ if (b > a)
+ goto ret_a;
+
+ /* Compute difference in number of bits in S0. */
+ u0.i = 0x40000000;
+ u1b.i = u2b.i = u0.i;
+ u1.i = a;
+ u2.i = b;
+ u1.i = a | u0.i;
+ t = 0x4b800000 | ((a >> 23) & 0xffff);
+ if (a >> 23)
+ {
+ u1.i = t;
+ u1b.i = 0x4b800000;
+ }
+ u2.i = b | u0.i;
+ t = 0x4b800000 | ((b >> 23) & 0xffff);
+ if (b >> 23)
+ {
+ u2.i = t;
+ u2b.i = 0x4b800000;
+ }
+ u1.f = u1.f - u1b.f;
+ u2.f = u2.f - u2b.f;
+ s1 = u1.i >> 23;
+ s2 = u2.i >> 23;
+ s0 = s1 - s2;
+
+#define STEP(n) case n: d = b << n; t = a - d; if (t <= a) a = t;
+ switch (s0)
+ {
+ STEP (31)
+ STEP (30)
+ STEP (29)
+ STEP (28)
+ STEP (27)
+ STEP (26)
+ STEP (25)
+ STEP (24)
+ STEP (23)
+ STEP (22)
+ STEP (21)
+ STEP (20)
+ STEP (19)
+ STEP (18)
+ STEP (17)
+ STEP (16)
+ STEP (15)
+ STEP (14)
+ STEP (13)
+ STEP (12)
+ STEP (11)
+ STEP (10)
+ STEP (9)
+ STEP (8)
+ STEP (7)
+ STEP (6)
+ STEP (5)
+ STEP (4)
+ STEP (3)
+ STEP (2)
+ STEP (1)
+ STEP (0)
+ }
+ ret_a:
+ return (a ^ sign) - sign;
+}
diff --git a/gcc-4.9/libgcc/config/epiphany/mulsi3.c b/gcc-4.9/libgcc/config/epiphany/mulsi3.c
new file mode 100644
index 000000000..b8f448611
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/mulsi3.c
@@ -0,0 +1,39 @@
+/* Generic 32 bit multiply.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+unsigned int
+__mulsi3 (unsigned int a, unsigned int b)
+{
+ unsigned int r = 0;
+
+ while (a)
+ {
+ if (a & 1)
+ r += b;
+ a >>= 1;
+ b <<= 1;
+ }
+ return r;
+}
diff --git a/gcc-4.9/libgcc/config/epiphany/t-custom-eqsf b/gcc-4.9/libgcc/config/epiphany/t-custom-eqsf
new file mode 100644
index 000000000..3b5a54ace
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/t-custom-eqsf
@@ -0,0 +1 @@
+FPBIT_FUNCS := $(filter-out _eq_sf,$(FPBIT_FUNCS))
diff --git a/gcc-4.9/libgcc/config/epiphany/t-epiphany b/gcc-4.9/libgcc/config/epiphany/t-epiphany
new file mode 100644
index 000000000..741cc796e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/t-epiphany
@@ -0,0 +1,34 @@
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+# Contributed by Embecosm on behalf of Adapteva, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+LIB2ADD_ST = $(srcdir)/config/epiphany/modsi3-float.S \
+ $(srcdir)/config/epiphany/divsi3-float.S \
+ $(srcdir)/config/epiphany/udivsi3-float.S \
+ $(srcdir)/config/epiphany/umodsi3-float.S \
+ $(srcdir)/config/epiphany/ieee-754/eqsf2.S \
+ $(srcdir)/config/epiphany/ieee-754/gtesf2.S \
+ $(srcdir)/config/epiphany/ieee-754/ordsf2.S \
+ $(srcdir)/config/epiphany/ieee-754/uneqsf2.S \
+ $(srcdir)/config/epiphany/ieee-754/fast_div.S
+
+# .init/.fini section routines
+
+crtint.o crtrunc.o crtm1reg-r43.o crtm1reg-r63.o : \
+ %.o: $(srcdir)/config/epiphany/%.S $(GCC_PASSES) $(CONFIG_H)
+ $(crt_compile) -c -x assembler-with-cpp $<
diff --git a/gcc-4.9/libgcc/config/epiphany/udivsi3-float.S b/gcc-4.9/libgcc/config/epiphany/udivsi3-float.S
new file mode 100644
index 000000000..f1e2d7b17
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/udivsi3-float.S
@@ -0,0 +1,83 @@
+/* Unsigned 32 bit division optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__udivsi3,T_UINT)
+ .global SYM(__udivsi3)
+ .balign 4
+ HIDDEN_FUNC(__udivsi3)
+SYM(__udivsi3):
+ sub TMP0,r0,r1
+ bltu .Lret0
+ float TMP2,r0
+ mov TMP1,%low(0xb0800000) ; ??? this would be faster with small data
+ float TMP3,r1
+ movt TMP1,%high(0xb0800000)
+ asr TMP0,r0,8
+ sub TMP0,TMP0,TMP1
+ movt TMP1,%high(0x00810000)
+ movgteu TMP2,TMP0
+ bblt .Lret1
+ sub TMP2,TMP2,TMP1
+ sub TMP2,TMP2,TMP3
+ mov TMP3,0
+ movltu TMP2,TMP3
+ lsr TMP2,TMP2,23
+ lsl r1,r1,TMP2
+ mov TMP0,1
+ lsl TMP0,TMP0,TMP2
+ sub r0,r0,r1
+ bltu .Ladd_back
+ add TMP3,TMP3,TMP0
+ sub r0,r0,r1
+ bltu .Ladd_back
+.Lsub_loop:; More than two iterations are rare, so it makes sense to leave
+ ; this label here to reduce average branch penalties.
+ add TMP3,TMP3,TMP0
+ sub r0,r0,r1
+ bgteu .Lsub_loop
+.Ladd_back:
+ add r0,r0,r1
+ sub TMP1,r1,1
+ mov r1,%low(.L0step)
+ movt r1,%high(.L0step)
+ lsl TMP2,TMP2,3
+ sub r1,r1,TMP2
+ jr r1
+ .rep 30
+ lsl r0,r0,1
+ sub.l r1,r0,TMP1
+ movgteu r0,r1
+ .endr
+.L0step:sub r1,TMP0,1 ; mask result bits from steps ...
+ and r0,r0,r1
+ orr r0,r0,TMP3 ; ... and combine with first bits.
+ rts
+.Lret0: mov r0,0
+ rts
+.Lret1: mov r0,1
+ rts
+ ENDFUNC(__udivsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/udivsi3-float.c b/gcc-4.9/libgcc/config/epiphany/udivsi3-float.c
new file mode 100644
index 000000000..9d1b25251
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/udivsi3-float.c
@@ -0,0 +1,125 @@
+/* Generic unsigned 32 bit division implementation.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef union { unsigned int i; float f; } fu;
+
+unsigned int __udivsi3 (unsigned int a, unsigned int b);
+
+unsigned int
+__udivsi3 (unsigned int a, unsigned int b)
+{
+ unsigned int d, t, s0, s1, s2, r0, r1;
+ fu u0, u1, u2, u1b, u2b;
+
+ if (b > a)
+ return 0;
+ if ((int) b < 0)
+ return 1;
+
+ /* Assuming B is nonzero, compute S0 such that 0 <= S0,
+ (B << S0+1) does not overflow,
+ A < 4.01 * (B << S0), with S0 chosen as small as possible
+ without taking to much time calculating. */
+#ifdef CONVERT_UNSIGNED
+ u0.f = a;
+ u1.f = b;
+#else /* !CONVERT_UNSIGNED */
+ u0.f = (int) a;
+ u1.f = (int) b;
+#ifdef CONCISE
+ if (a < 0)
+ u0.i = (a >> 8) - 0x00800000 + 0x3f800000 + (31 << 23);
+#else /* To use flag seting / cmove, this can be written as: */
+ {
+ unsigned c = 0xff800000 - 0x4f000000;
+ t = (int)a >> 8;
+ if (t >= c)
+ u0.i = (t - c);
+ }
+#endif
+#endif /* !CONVERT_UNSIGNED */
+ s0 = u0.i + 1 /* Compensate for rounding errors. */
+ - 0x00800000 /* adjust by one */ ;
+ s0 = s0 - u1.i;
+ s0 = (int)s0 >= 0 ? s0 : 0;
+ s0 >>= 23;
+
+ b <<= s0;
+ r1 = 0;
+
+ r0 = 1 << s0;
+ a = ((t=a) - b);
+ if (a <= t)
+ {
+ r1 += r0;
+ a = ((t=a) - b);
+ if (a <= t)
+ do {
+ r1 += r0;
+ a = ((t=a) - b);
+ } while (a <= t);
+ }
+ a += b;
+ d = b - 1;
+
+#define STEP(n) case n: a += a; t = a - d; if (t <= a) a = t;
+ switch (s0)
+ {
+ STEP (31)
+ STEP (30)
+ STEP (29)
+ STEP (28)
+ STEP (27)
+ STEP (26)
+ STEP (25)
+ STEP (24)
+ STEP (23)
+ STEP (22)
+ STEP (21)
+ STEP (20)
+ STEP (19)
+ STEP (18)
+ STEP (17)
+ STEP (16)
+ STEP (15)
+ STEP (14)
+ STEP (13)
+ STEP (12)
+ STEP (11)
+ STEP (10)
+ STEP (9)
+ STEP (8)
+ STEP (7)
+ STEP (6)
+ STEP (5)
+ STEP (4)
+ STEP (3)
+ STEP (2)
+ STEP (1)
+ case 0: ;
+ }
+ r0 = r1 | (r0-1 & a);
+ return r0;
+}
diff --git a/gcc-4.9/libgcc/config/epiphany/udivsi3.S b/gcc-4.9/libgcc/config/epiphany/udivsi3.S
new file mode 100644
index 000000000..3c994aa41
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/udivsi3.S
@@ -0,0 +1,85 @@
+/* Unsigned 32 bit division optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__udivsi3,T_UINT)
+ .global SYM(__udivsi3)
+ .balign 4
+ HIDDEN_FUNC(__udivsi3)
+SYM(__udivsi3):
+ sub r3,r0,r1
+ bltu .Lret0
+ mov r3,0x95
+ lsl r12,r3,23 ; 0x4a800000
+ lsl r3,r3,30 ; 0x40000000
+ orr r16,r0,r3
+ orr r2,r1,r3
+ fsub r16,r16,r3
+ fsub r2,r2,r3
+ lsr r3,r1,21
+ lsr r17,r0,21
+ movt r17,0x4a80
+ fsub r17,r17,r12
+ movt r3,0x4a80
+ fsub r3,r3,r12
+ mov r12,%low(.L0step)
+ movt r12,%high(.L0step)
+ mov r21,1
+ movne r16,r17
+ lsr r17,r1,21
+ movne r2,r3
+ lsr r3,r16,23 ; must mask lower bits of r2 in case op0 was ..
+ lsr r2,r2,23 ; .. shifted and op1 was not.
+ sub r3,r3,r2 ; calculate bit number difference.
+ lsl r1,r1,r3
+ lsr r16,r1,1
+ lsl r2,r21,r3
+ lsl r3,r3,3
+ sub r12,r12,r3
+ sub r3,r0,r1
+ movltu r3,r0
+ mov r0,0
+ movgteu r0,r2
+ lsr r2,r2,1
+ add r17,r2,r0
+ sub r1,r3,r16
+ movgteu r3,r1
+ movgteu r0,r17
+ sub r16,r16,1
+ jr r12
+ .rep 30
+ lsl r3,r3,1
+ sub r1,r3,r16
+ movgteu r3,r1
+ .endr
+ sub r2,r2,1 ; mask result bits from steps ...
+ and r3,r3,r2
+ orr r0,r0,r3 ; ... and combine with first bits.
+ nop
+.L0step:rts
+.Lret0: mov r0,0
+ rts
+ ENDFUNC(__udivsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/udivsi3.c b/gcc-4.9/libgcc/config/epiphany/udivsi3.c
new file mode 100644
index 000000000..bdc7c9d9b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/udivsi3.c
@@ -0,0 +1,114 @@
+/* Generic unsigned 32 bit division implementation.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef union { unsigned int i; float f; } fu;
+
+unsigned int __udivsi3 (unsigned int a, unsigned int b);
+
+unsigned int
+__udivsi3 (unsigned int a, unsigned int b)
+{
+ unsigned int d, t, s0, s1, s2, r0, r1;
+ fu u0, u1, u2, u1b, u2b;
+
+ if (b > a)
+ return 0;
+
+ /* Compute difference in number of bits in S0. */
+ u0.i = 0x40000000;
+ u1b.i = u2b.i = u0.i;
+ u1.i = a;
+ u2.i = b;
+ u1.i = a | u0.i;
+ t = 0x4b800000 | ((a >> 23) & 0xffff);
+ if (a >> 23)
+ {
+ u1.i = t;
+ u1b.i = 0x4b800000;
+ }
+ u2.i = b | u0.i;
+ t = 0x4b800000 | ((b >> 23) & 0xffff);
+ if (b >> 23)
+ {
+ u2.i = t;
+ u2b.i = 0x4b800000;
+ }
+ u1.f = u1.f - u1b.f;
+ u2.f = u2.f - u2b.f;
+ s1 = u1.i >> 23;
+ s2 = u2.i >> 23;
+ s0 = s1 - s2;
+
+ b <<= s0;
+ d = b - 1;
+
+ r0 = 1 << s0;
+ r1 = 0;
+ t = a - b;
+ if (t <= a)
+ {
+ a = t;
+ r1 = r0;
+ }
+
+#define STEP(n) case n: a += a; t = a - d; if (t <= a) a = t;
+ switch (s0)
+ {
+ STEP (31)
+ STEP (30)
+ STEP (29)
+ STEP (28)
+ STEP (27)
+ STEP (26)
+ STEP (25)
+ STEP (24)
+ STEP (23)
+ STEP (22)
+ STEP (21)
+ STEP (20)
+ STEP (19)
+ STEP (18)
+ STEP (17)
+ STEP (16)
+ STEP (15)
+ STEP (14)
+ STEP (13)
+ STEP (12)
+ STEP (11)
+ STEP (10)
+ STEP (9)
+ STEP (8)
+ STEP (7)
+ STEP (6)
+ STEP (5)
+ STEP (4)
+ STEP (3)
+ STEP (2)
+ STEP (1)
+ case 0: ;
+ }
+ r0 = r1 | (r0-1 & a);
+ return r0;
+}
diff --git a/gcc-4.9/libgcc/config/epiphany/umodsi3-float.S b/gcc-4.9/libgcc/config/epiphany/umodsi3-float.S
new file mode 100644
index 000000000..029ce2c5e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/umodsi3-float.S
@@ -0,0 +1,63 @@
+/* Unsigned 32 bit division optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+/* Because we handle a divident with bit 31 set with truncating integer
+ arithmetic, there is no rounding-related overflow. */
+ FSTAB (__umodsi3,T_UINT)
+ .global SYM(__umodsi3)
+ .balign 4
+ HIDDEN_FUNC(__umodsi3)
+SYM(__umodsi3):
+ float r2,r0
+ mov TMP1,%low(0xb0800000) ; ??? this would be faster with small data
+ float TMP2,r1
+ movt TMP1,%high(0xb0800000)
+ asr TMP0,r0,8
+ sub TMP0,TMP0,TMP1
+ mov TMP1,%low(.L0step)
+ movgteu r2,TMP0
+ sub r2,r2,TMP2
+ blteu .L0step
+ asr r2,r2,23
+ movt TMP1,%high(.L0step)
+ lsl TMP2,r2,3
+ lsl r2,r1,r2` sub r2,r0,r2` movgteu r0,r2 ; STEP(r2)
+ sub r2,TMP1,TMP2
+ jr r2
+#define STEP(n) lsl.l r2,r1,n` sub r2,r0,r2` movgteu r0,r2
+ .balign 8,,2
+ STEP(31)` STEP(30)` STEP(29)` STEP(28)`
+ STEP(27)` STEP(26)` STEP(25)` STEP(24)`
+ STEP(23)` STEP(22)` STEP(21)` STEP(20)`
+ STEP(19)` STEP(18)` STEP(17)` STEP(16)`
+ STEP(15)` STEP(14)` STEP(13)` STEP(12)`
+ STEP(11)` STEP(10)` STEP(9)` STEP(8)`
+ STEP(7)` STEP(6)` STEP(5)` STEP(4)` STEP(3)` STEP(2)` STEP(1)
+.L0step:STEP(0)
+.Lret_r0:
+ rts
+ ENDFUNC(__umodsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/umodsi3.S b/gcc-4.9/libgcc/config/epiphany/umodsi3.S
new file mode 100644
index 000000000..65c824bc7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/umodsi3.S
@@ -0,0 +1,70 @@
+/* Unsigned 32 bit modulo optimized for Epiphany.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "epiphany-asm.h"
+
+ FSTAB (__umodsi3,T_UINT)
+ .global SYM(__umodsi3)
+ .balign 4
+ HIDDEN_FUNC(__umodsi3)
+SYM(__umodsi3):
+ mov r2,5
+ lsl r2,r2,29 ; 0xa0000000
+ orr r3,r2,r0
+ lsr r15,r0,16
+ movt r15,0xa800
+ movne r3,r15
+ lsr r16,r2,2 ; 0x28000000
+ and r15,r3,r16
+ fadd r12,r3,r15
+ orr r3,r2,r1
+ lsr r2,r1,16
+ movt r2,0xa800
+ movne r3,r2
+ and r2,r16,r3
+ fadd r3,r3,r2
+ sub r2,r0,r1
+ bltu .Lret_a
+ lsr r12,r12,23
+ mov r2,%low(.L0step)
+ movt r2,%high(.L0step)
+ lsr r3,r3,23
+ sub r3,r12,r3 ; calculate bit number difference.
+ lsl r3,r3,3
+ sub r2,r2,r3
+ jr r2
+/* lsl_l r2,r1,n` sub r2,r0,r2` movgteu r0,r2 */
+#define STEP(n) .long 0x0006441f | (n) << 5` sub r2,r0,r2` movgteu r0,r2
+ .balign 8,,2
+ STEP(31)` STEP(30)` STEP(29)` STEP(28)`
+ STEP(27)` STEP(26)` STEP(25)` STEP(24)`
+ STEP(23)` STEP(22)` STEP(21)` STEP(20)`
+ STEP(19)` STEP(18)` STEP(17)` STEP(16)`
+ STEP(15)` STEP(14)` STEP(13)` STEP(12)`
+ STEP(11)` STEP(10)` STEP(9)` STEP(8)`
+ STEP(7)` STEP(6)` STEP(5)` STEP(4)` STEP(3)` STEP(2)` STEP(1)
+.L0step:STEP(0)
+.Lret_a:rts
+ ENDFUNC(__umodsi3)
diff --git a/gcc-4.9/libgcc/config/epiphany/umodsi3.c b/gcc-4.9/libgcc/config/epiphany/umodsi3.c
new file mode 100644
index 000000000..6457382aa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/epiphany/umodsi3.c
@@ -0,0 +1,101 @@
+/* Generic unsigned 32 bit modulo implementation.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Embecosm on behalf of Adapteva, Inc.
+
+This file is part of GCC.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef union { unsigned int i; float f; } fu;
+
+unsigned int __umodsi3 (unsigned int a, unsigned int b);
+
+unsigned int
+__umodsi3 (unsigned int a, unsigned int b)
+{
+ unsigned int d, t, s0, s1, s2, r0, r1;
+ fu u0, u1, u2, u1b, u2b;
+
+ if (b > a)
+ return a;
+
+ /* Compute difference in number of bits in S0. */
+ u0.i = 0x40000000;
+ u1b.i = u2b.i = u0.i;
+ u1.i = a;
+ u2.i = b;
+ u1.i = a | u0.i;
+ t = 0x4b800000 | ((a >> 23) & 0xffff);
+ if (a >> 23)
+ {
+ u1.i = t;
+ u1b.i = 0x4b800000;
+ }
+ u2.i = b | u0.i;
+ t = 0x4b800000 | ((b >> 23) & 0xffff);
+ if (b >> 23)
+ {
+ u2.i = t;
+ u2b.i = 0x4b800000;
+ }
+ u1.f = u1.f - u1b.f;
+ u2.f = u2.f - u2b.f;
+ s1 = u1.i >> 23;
+ s2 = u2.i >> 23;
+ s0 = s1 - s2;
+
+#define STEP(n) case n: d = b << n; t = a - d; if (t <= a) a = t;
+ switch (s0)
+ {
+ STEP (31)
+ STEP (30)
+ STEP (29)
+ STEP (28)
+ STEP (27)
+ STEP (26)
+ STEP (25)
+ STEP (24)
+ STEP (23)
+ STEP (22)
+ STEP (21)
+ STEP (20)
+ STEP (19)
+ STEP (18)
+ STEP (17)
+ STEP (16)
+ STEP (15)
+ STEP (14)
+ STEP (13)
+ STEP (12)
+ STEP (11)
+ STEP (10)
+ STEP (9)
+ STEP (8)
+ STEP (7)
+ STEP (6)
+ STEP (5)
+ STEP (4)
+ STEP (3)
+ STEP (2)
+ STEP (1)
+ STEP (0)
+ }
+ return a;
+}
diff --git a/gcc-4.9/libgcc/config/fr30/crti.S b/gcc-4.9/libgcc/config/fr30/crti.S
new file mode 100644
index 000000000..c130d8bc8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/fr30/crti.S
@@ -0,0 +1,61 @@
+# crti.s for ELF
+
+# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Written By David Vinayak Henkel-Wallace, June 1992
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just make a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+ .section ".init"
+ .global _init
+ .type _init,#function
+ .align 4
+_init:
+ st rp, @-r15
+ enter #4
+
+ # These nops are here to align the end of this code with a 16 byte
+ # boundary. The linker will start inserting code into the .init
+ # section at such a boundary.
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+
+ .section ".fini"
+ .global _fini
+ .type _fini,#function
+ .align 4
+_fini:
+ st rp, @-r15
+ enter #4
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/gcc-4.9/libgcc/config/fr30/crtn.S b/gcc-4.9/libgcc/config/fr30/crtn.S
new file mode 100644
index 000000000..9a01ea8fc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/fr30/crtn.S
@@ -0,0 +1,44 @@
+# crtn.S for ELF
+
+# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Written By David Vinayak Henkel-Wallace, June 1992
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+ .section ".init"
+ .align 4
+
+ leave
+ ld @r15+,rp
+ ret
+
+
+ .section ".fini"
+ .align 4
+
+ leave
+ ld @r15+,rp
+ ret
+
+# Th-th-th-that is all folks!
diff --git a/gcc-4.9/libgcc/config/fr30/lib1funcs.S b/gcc-4.9/libgcc/config/fr30/lib1funcs.S
new file mode 100644
index 000000000..639c3a26f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/fr30/lib1funcs.S
@@ -0,0 +1,115 @@
+/* libgcc routines for the FR30.
+ Copyright (C) 1998-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+ .macro FUNC_START name
+ .text
+ .globl __\name
+ .type __\name, @function
+__\name:
+ .endm
+
+ .macro FUNC_END name
+ .size __\name, . - __\name
+ .endm
+
+ .macro DIV_BODY reg number
+ .if \number
+ DIV_BODY \reg, "\number - 1"
+ div1 \reg
+ .endif
+ .endm
+
+#ifdef L_udivsi3
+FUNC_START udivsi3
+ ;; Perform an unsiged division of r4 / r5 and place the result in r4.
+ ;; Does not handle overflow yet...
+ mov r4, mdl
+ div0u r5
+ DIV_BODY r5 32
+ mov mdl, r4
+ ret
+FUNC_END udivsi3
+#endif /* L_udivsi3 */
+
+#ifdef L_divsi3
+FUNC_START divsi3
+ ;; Perform a siged division of r4 / r5 and place the result in r4.
+ ;; Does not handle overflow yet...
+ mov r4, mdl
+ div0s r5
+ DIV_BODY r5 32
+ div2 r5
+ div3
+ div4s
+ mov mdl, r4
+ ret
+FUNC_END divsi3
+#endif /* L_divsi3 */
+
+#ifdef L_umodsi3
+FUNC_START umodsi3
+ ;; Perform an unsiged division of r4 / r5 and places the remainder in r4.
+ ;; Does not handle overflow yet...
+ mov r4, mdl
+ div0u r5
+ DIV_BODY r5 32
+ mov mdh, r4
+ ret
+FUNC_END umodsi3
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+FUNC_START modsi3
+ ;; Perform a siged division of r4 / r5 and place the remainder in r4.
+ ;; Does not handle overflow yet...
+ mov r4, mdl
+ div0s r5
+ DIV_BODY r5 32
+ div2 r5
+ div3
+ div4s
+ mov mdh, r4
+ ret
+FUNC_END modsi3
+#endif /* L_modsi3 */
+
+#ifdef L_negsi2
+FUNC_START negsi2
+ ldi:8 #0, r0
+ sub r4, r0
+ mov r0, r4
+ ret
+FUNC_END negsi2
+#endif /* L_negsi2 */
+
+#ifdef L_one_cmplsi2
+FUNC_START one_cmplsi2
+ ldi:8 #0xff, r0
+ extsb r0
+ eor r0, r4
+ ret
+FUNC_END one_cmplsi2
+#endif /* L_one_cmplsi2 */
+
+
diff --git a/gcc-4.9/libgcc/config/fr30/t-fr30 b/gcc-4.9/libgcc/config/fr30/t-fr30
new file mode 100644
index 000000000..ee5ed9a12
--- /dev/null
+++ b/gcc-4.9/libgcc/config/fr30/t-fr30
@@ -0,0 +1,2 @@
+LIB1ASMSRC = fr30/lib1funcs.S
+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3
diff --git a/gcc-4.9/libgcc/config/frv/cmovd.c b/gcc-4.9/libgcc/config/frv/cmovd.c
new file mode 100644
index 000000000..77c4dbe1b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/cmovd.c
@@ -0,0 +1,51 @@
+/* Move double-word library function.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software ; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+void
+__cmovd (long long *dest, const long long *src, unsigned len)
+{
+ unsigned i;
+ unsigned num = len >> 3;
+ unsigned xlen = len & ~7;
+ char *dest_byte = (char *)dest;
+ const char *src_byte = (const char *)src;
+
+ if (dest_byte < src_byte || dest_byte > src_byte+len)
+ {
+ for (i = 0; i < num; i++)
+ dest[i] = src[i];
+
+ while (len > xlen)
+ {
+ dest_byte[xlen] = src_byte[xlen];
+ xlen++;
+ }
+ }
+ else
+ {
+ while (len-- > 0)
+ dest_byte[len] = src_byte[len];
+ }
+}
diff --git a/gcc-4.9/libgcc/config/frv/cmovh.c b/gcc-4.9/libgcc/config/frv/cmovh.c
new file mode 100644
index 000000000..531e7aad5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/cmovh.c
@@ -0,0 +1,47 @@
+/* Move half-word library function.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software ; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+void
+__cmovh (short *dest, const short *src, unsigned len)
+{
+ unsigned i;
+ unsigned num = len >> 1;
+ char *dest_byte = (char *)dest;
+ const char *src_byte = (const char *)src;
+
+ if (dest_byte < src_byte || dest_byte > src_byte+len)
+ {
+ for (i = 0; i < num; i++)
+ dest[i] = src[i];
+
+ if ((len & 1) != 0)
+ dest_byte[len-1] = src_byte[len-1];
+ }
+ else
+ {
+ while (len-- > 0)
+ dest_byte[len] = src_byte[len];
+ }
+}
diff --git a/gcc-4.9/libgcc/config/frv/cmovw.c b/gcc-4.9/libgcc/config/frv/cmovw.c
new file mode 100644
index 000000000..6736325dc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/cmovw.c
@@ -0,0 +1,51 @@
+/* Move word library function.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software ; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+void
+__cmovw (int *dest, const int *src, unsigned len)
+{
+ unsigned i;
+ unsigned num = len >> 2;
+ unsigned xlen = len & ~3;
+ char *dest_byte = (char *)dest;
+ const char *src_byte = (const char *)src;
+
+ if (dest_byte < src_byte || dest_byte > src_byte+len)
+ {
+ for (i = 0; i < num; i++)
+ dest[i] = src[i];
+
+ while (len > xlen)
+ {
+ dest_byte[xlen] = src_byte[xlen];
+ xlen++;
+ }
+ }
+ else
+ {
+ while (len-- > 0)
+ dest_byte[len] = src_byte[len];
+ }
+}
diff --git a/gcc-4.9/libgcc/config/frv/frv-abi.h b/gcc-4.9/libgcc/config/frv/frv-abi.h
new file mode 100644
index 000000000..fdc7508bf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/frv-abi.h
@@ -0,0 +1,182 @@
+/* Frv map GCC names to FR-V ABI.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* For each of the functions in the library that has a corresponding name in
+ the ABI, add an equivalence between the GCC name and the ABI name. This is
+ in a separate file from frv.h so that fp-bit.c can be made to include it. */
+
+#ifdef __GNUC__
+#ifdef __FRV_UNDERSCORE__
+#define RENAME_LIBRARY(OLD,NEW) \
+__asm__ (".globl\t_" #NEW "\n" \
+ "_" #NEW "=_" #OLD "\n" \
+ "\t.type\t_" #NEW ",@function\n");
+
+#else
+#define RENAME_LIBRARY(OLD,NEW) \
+__asm__ (".globl\t" #NEW "\n" \
+ #NEW "=" #OLD "\n" \
+ "\t.type\t" #NEW ",@function\n");
+#endif
+
+#define CREATE_DOUBLE_SHIFT(OLD,NEW) \
+__asm__ (".text\n" \
+ "\t.globl\t" #NEW "\n" \
+ "\t.type\t" #NEW ",@function\n" \
+ #NEW ":\n" \
+ "\tor\tgr11, gr0, gr10\n" \
+ ".L" #OLD " = " #OLD "\n" \
+ "\tbra\t.L" #OLD "\n");
+
+#ifdef L_sf_to_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__extendsfdf2,__ftod)
+#endif
+
+#ifdef L_sf_to_si
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixsfsi,__ftoi)
+#endif
+
+#ifdef L_sf_to_usi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunssfsi,__ftoui)
+#endif
+
+#ifdef L_df_to_si
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixdfsi,__dtoi)
+#endif
+
+#ifdef L_fixunssfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunssfsi,__ftoui)
+#endif
+
+#ifdef L_fixunsdfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunsdfsi,__dtoui)
+#endif
+
+#ifdef L_fixsfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixsfdi,__ftoll)
+#endif
+
+#ifdef L_fixdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixdfdi,__dtoll)
+#endif
+
+#ifdef L_fixunssfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunssfdi,__ftoull)
+#endif
+
+#ifdef L_fixunsdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__fixunsdfdi,__dtoull)
+#endif
+
+#ifdef L_si_to_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatsisf,__itof)
+#endif
+
+#ifdef L_di_to_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatdisf,__lltof)
+#endif
+
+#ifdef L_df_to_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__truncdfsf2,__dtof)
+#endif
+
+#ifdef L_si_to_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatsidf,__itod)
+#endif
+
+#ifdef L_floatdisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatdisf,__lltof)
+#endif
+
+#ifdef L_floatdidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__floatdidf,__lltod)
+#endif
+
+#ifdef L_addsub_df
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY(__adddf3,__addd)
+ RENAME_LIBRARY(__subdf3,__subd)
+#endif
+
+#ifdef L_mul_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__muldf3,__muld)
+#endif
+
+#ifdef L_div_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__divdf3,__divd)
+#endif
+
+#ifdef L_addsub_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY(__addsf3,__addf) \
+ RENAME_LIBRARY(__subsf3,__subf)
+#endif
+
+#ifdef L_mul_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__mulsf3,__mulf)
+#endif
+
+#ifdef L_div_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__divsf3,__divf)
+#endif
+
+#ifdef L_ashldi3
+#define DECLARE_LIBRARY_RENAMES CREATE_DOUBLE_SHIFT (__ashldi3,__sllll)
+#endif
+
+#ifdef L_lshrdi3
+#define DECLARE_LIBRARY_RENAMES CREATE_DOUBLE_SHIFT (__lshrdi3,__srlll)
+#endif
+
+#ifdef L_ashrdi3
+#define DECLARE_LIBRARY_RENAMES CREATE_DOUBLE_SHIFT (__ashrdi3,__srall)
+#endif
+
+#ifdef L_adddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__adddi3,__addll)
+#endif
+
+#ifdef L_subdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__subdi3,__subll)
+#endif
+
+#ifdef L_muldi3
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY(__muldi3,__mulll)
+ RENAME_LIBRARY(__muldi3,__umulll)
+#endif
+
+#ifdef L_divdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__divdi3,__divll)
+#endif
+
+#ifdef L_udivdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__udivdi3,__udivll)
+#endif
+
+#ifdef L_moddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__moddi3,__modll)
+#endif
+
+#ifdef L_umoddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY(__umoddi3,__umodll)
+#endif
+#endif /* __GNUC__ */
diff --git a/gcc-4.9/libgcc/config/frv/frvbegin.c b/gcc-4.9/libgcc/config/frv/frvbegin.c
new file mode 100644
index 000000000..bd79e632a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/frvbegin.c
@@ -0,0 +1,157 @@
+/* Frv initialization file linked before all user modules
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software ; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>.
+
+ This file was originally taken from the file crtstuff.c in the
+ main compiler directory, and simplified. */
+
+#include "defaults.h"
+#include <stddef.h>
+#include "../libgcc/unwind-dw2-fde.h"
+#include "gbl-ctors.h"
+
+/* Declare a pointer to void function type. */
+#define STATIC static
+
+#ifdef __FRV_UNDERSCORE__
+#define UNDERSCORE "_"
+#else
+#define UNDERSCORE ""
+#endif
+
+#define INIT_SECTION_NEG_ONE(SECTION, FLAGS, NAME) \
+__asm__ (".section " SECTION "," FLAGS "\n\t" \
+ ".globl " UNDERSCORE NAME "\n\t" \
+ ".type " UNDERSCORE NAME ",@object\n\t" \
+ ".p2align 2\n" \
+ UNDERSCORE NAME ":\n\t" \
+ ".word -1\n\t" \
+ ".previous")
+
+#define INIT_SECTION(SECTION, FLAGS, NAME) \
+__asm__ (".section " SECTION "," FLAGS "\n\t" \
+ ".globl " UNDERSCORE NAME "\n\t" \
+ ".type " UNDERSCORE NAME ",@object\n\t" \
+ ".p2align 2\n" \
+ UNDERSCORE NAME ":\n\t" \
+ ".previous")
+
+/* Beginning of .ctor/.dtor sections that provides a list of constructors and
+ destructors to run. */
+
+INIT_SECTION_NEG_ONE (".ctors", "\"aw\"", "__CTOR_LIST__");
+INIT_SECTION_NEG_ONE (".dtors", "\"aw\"", "__DTOR_LIST__");
+
+/* Beginning of .eh_frame section that provides all of the exception handling
+ tables. */
+
+INIT_SECTION (".eh_frame", "\"aw\"", "__EH_FRAME_BEGIN__");
+
+#if ! __FRV_FDPIC__
+/* In FDPIC, the linker itself generates this. */
+/* Beginning of .rofixup section that provides a list of pointers that we
+ need to adjust. */
+
+INIT_SECTION (".rofixup", "\"a\"", "__ROFIXUP_LIST__");
+#endif /* __FRV_FDPIC__ */
+
+extern void __frv_register_eh(void) __attribute__((__constructor__));
+extern void __frv_deregister_eh(void) __attribute__((__destructor__));
+
+extern func_ptr __EH_FRAME_BEGIN__[];
+
+/* Register the exception handling table as the first constructor. */
+void
+__frv_register_eh (void)
+{
+ static struct object object;
+ if (__register_frame_info)
+ __register_frame_info (__EH_FRAME_BEGIN__, &object);
+}
+
+/* Note, do not declare __{,de}register_frame_info weak as it seems
+ to interfere with the pic support. */
+
+/* Unregister the exception handling table as a deconstructor. */
+void
+__frv_deregister_eh (void)
+{
+ static int completed = 0;
+
+ if (completed)
+ return;
+
+ if (__deregister_frame_info)
+ __deregister_frame_info (__EH_FRAME_BEGIN__);
+
+ completed = 1;
+}
+
+/* Run the global destructors. */
+void
+__do_global_dtors (void)
+{
+ static func_ptr *p = __DTOR_LIST__ + 1;
+ while (*p)
+ {
+ p++;
+ (*(p-1)) ();
+ }
+}
+
+/* Run the global constructors. */
+void
+__do_global_ctors (void)
+{
+ unsigned long nptrs = (unsigned long) __CTOR_LIST__[0];
+ unsigned i;
+
+ if (nptrs == (unsigned long)-1)
+ for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++);
+
+ for (i = nptrs; i >= 1; i--)
+ __CTOR_LIST__[i] ();
+
+ atexit (__do_global_dtors);
+}
+
+/* Subroutine called automatically by `main'.
+ Compiling a global function named `main'
+ produces an automatic call to this function at the beginning.
+
+ For many systems, this routine calls __do_global_ctors.
+ For systems which support a .init section we use the .init section
+ to run __do_global_ctors, so we need not do anything here. */
+
+void
+__main (void)
+{
+ /* Support recursive calls to `main': run initializers just once. */
+ static int initialized;
+ if (! initialized)
+ {
+ initialized = 1;
+ __do_global_ctors ();
+ }
+}
diff --git a/gcc-4.9/libgcc/config/frv/frvend.c b/gcc-4.9/libgcc/config/frv/frvend.c
new file mode 100644
index 000000000..ad9931a09
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/frvend.c
@@ -0,0 +1,70 @@
+/* Frv initialization file linked after all user modules
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software ; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "defaults.h"
+#include <stddef.h>
+#include "../libgcc/unwind-dw2-fde.h"
+
+#ifdef __FRV_UNDERSCORE__
+#define UNDERSCORE "_"
+#else
+#define UNDERSCORE ""
+#endif
+
+#define FINI_SECTION_ZERO(SECTION, FLAGS, NAME) \
+__asm__ (".section " SECTION "," FLAGS "\n\t" \
+ ".globl " UNDERSCORE NAME "\n\t" \
+ ".type " UNDERSCORE NAME ",@object\n\t" \
+ ".p2align 2\n" \
+ UNDERSCORE NAME ":\n\t" \
+ ".word 0\n\t" \
+ ".previous")
+
+#define FINI_SECTION(SECTION, FLAGS, NAME) \
+__asm__ (".section " SECTION "," FLAGS "\n\t" \
+ ".globl " UNDERSCORE NAME "\n\t" \
+ ".type " UNDERSCORE NAME ",@object\n\t" \
+ ".p2align 2\n" \
+ UNDERSCORE NAME ":\n\t" \
+ ".previous")
+
+/* End of .ctor/.dtor sections that provides a list of constructors and
+ destructors to run. */
+
+FINI_SECTION_ZERO (".ctors", "\"aw\"", "__CTOR_END__");
+FINI_SECTION_ZERO (".dtors", "\"aw\"", "__DTOR_END__");
+
+/* End of .eh_frame section that provides all of the exception handling
+ tables. */
+
+FINI_SECTION_ZERO (".eh_frame", "\"aw\"", "__FRAME_END__");
+
+#if ! __FRV_FDPIC__
+/* In FDPIC, the linker itself generates this. */
+/* End of .rofixup section that provides a list of pointers that we
+ need to adjust. */
+
+FINI_SECTION (".rofixup", "\"a\"", "__ROFIXUP_END__");
+#endif /* __FRV_FDPIC__ */
diff --git a/gcc-4.9/libgcc/config/frv/lib1funcs.S b/gcc-4.9/libgcc/config/frv/lib1funcs.S
new file mode 100644
index 000000000..1b80aea25
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/lib1funcs.S
@@ -0,0 +1,269 @@
+/* Library functions.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software ; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <frv-asm.h>
+
+
+#ifdef L_cmpll
+/* icc0 = __cmpll (long long a, long long b) */
+
+ .globl EXT(__cmpll)
+ .type EXT(__cmpll),@function
+ .text
+ .p2align 4
+EXT(__cmpll):
+ cmp gr8, gr10, icc0
+ ckeq icc0, cc4
+ P(ccmp) gr9, gr11, cc4, 1
+ ret
+.Lend:
+ .size EXT(__cmpll),.Lend-EXT(__cmpll)
+#endif /* L_cmpll */
+
+#ifdef L_cmpf
+/* icc0 = __cmpf (float a, float b) */
+/* Note, because this function returns the result in ICC0, it means it can't
+ handle NaNs. */
+
+ .globl EXT(__cmpf)
+ .type EXT(__cmpf),@function
+ .text
+ .p2align 4
+EXT(__cmpf):
+#ifdef __FRV_HARD_FLOAT__ /* floating point instructions available */
+ movgf gr8, fr0
+ P(movgf) gr9, fr1
+ setlos #1, gr8
+ fcmps fr0, fr1, fcc0
+ P(fcklt) fcc0, cc0
+ fckeq fcc0, cc1
+ csub gr0, gr8, gr8, cc0, 1
+ cmov gr0, gr8, cc1, 1
+ cmpi gr8, 0, icc0
+ ret
+#else /* no floating point instructions available */
+ movsg lr, gr4
+ addi sp, #-16, sp
+ sti gr4, @(sp, 8)
+ st fp, @(sp, gr0)
+ mov sp, fp
+ call EXT(__cmpsf2)
+ cmpi gr8, #0, icc0
+ ldi @(sp, 8), gr4
+ movgs gr4, lr
+ ld @(sp,gr0), fp
+ addi sp, #16, sp
+ ret
+#endif
+.Lend:
+ .size EXT(__cmpf),.Lend-EXT(__cmpf)
+#endif
+
+#ifdef L_cmpd
+/* icc0 = __cmpd (double a, double b) */
+/* Note, because this function returns the result in ICC0, it means it can't
+ handle NaNs. */
+
+ .globl EXT(__cmpd)
+ .type EXT(__cmpd),@function
+ .text
+ .p2align 4
+EXT(__cmpd):
+ movsg lr, gr4
+ addi sp, #-16, sp
+ sti gr4, @(sp, 8)
+ st fp, @(sp, gr0)
+ mov sp, fp
+ call EXT(__cmpdf2)
+ cmpi gr8, #0, icc0
+ ldi @(sp, 8), gr4
+ movgs gr4, lr
+ ld @(sp,gr0), fp
+ addi sp, #16, sp
+ ret
+.Lend:
+ .size EXT(__cmpd),.Lend-EXT(__cmpd)
+#endif
+
+#ifdef L_addll
+/* gr8,gr9 = __addll (long long a, long long b) */
+/* Note, gcc will never call this function, but it is present in case an
+ ABI program calls it. */
+
+ .globl EXT(__addll)
+ .type EXT(__addll),@function
+ .text
+ .p2align
+EXT(__addll):
+ addcc gr9, gr11, gr9, icc0
+ addx gr8, gr10, gr8, icc0
+ ret
+.Lend:
+ .size EXT(__addll),.Lend-EXT(__addll)
+#endif
+
+#ifdef L_subll
+/* gr8,gr9 = __subll (long long a, long long b) */
+/* Note, gcc will never call this function, but it is present in case an
+ ABI program calls it. */
+
+ .globl EXT(__subll)
+ .type EXT(__subll),@function
+ .text
+ .p2align 4
+EXT(__subll):
+ subcc gr9, gr11, gr9, icc0
+ subx gr8, gr10, gr8, icc0
+ ret
+.Lend:
+ .size EXT(__subll),.Lend-EXT(__subll)
+#endif
+
+#ifdef L_andll
+/* gr8,gr9 = __andll (long long a, long long b) */
+/* Note, gcc will never call this function, but it is present in case an
+ ABI program calls it. */
+
+ .globl EXT(__andll)
+ .type EXT(__andll),@function
+ .text
+ .p2align 4
+EXT(__andll):
+ P(and) gr9, gr11, gr9
+ P2(and) gr8, gr10, gr8
+ ret
+.Lend:
+ .size EXT(__andll),.Lend-EXT(__andll)
+#endif
+
+#ifdef L_orll
+/* gr8,gr9 = __orll (long long a, long long b) */
+/* Note, gcc will never call this function, but it is present in case an
+ ABI program calls it. */
+
+ .globl EXT(__orll)
+ .type EXT(__orll),@function
+ .text
+ .p2align 4
+EXT(__orll):
+ P(or) gr9, gr11, gr9
+ P2(or) gr8, gr10, gr8
+ ret
+.Lend:
+ .size EXT(__orll),.Lend-EXT(__orll)
+#endif
+
+#ifdef L_xorll
+/* gr8,gr9 = __xorll (long long a, long long b) */
+/* Note, gcc will never call this function, but it is present in case an
+ ABI program calls it. */
+
+ .globl EXT(__xorll)
+ .type EXT(__xorll),@function
+ .text
+ .p2align 4
+EXT(__xorll):
+ P(xor) gr9, gr11, gr9
+ P2(xor) gr8, gr10, gr8
+ ret
+.Lend:
+ .size EXT(__xorll),.Lend-EXT(__xorll)
+#endif
+
+#ifdef L_notll
+/* gr8,gr9 = __notll (long long a) */
+/* Note, gcc will never call this function, but it is present in case an
+ ABI program calls it. */
+
+ .globl EXT(__notll)
+ .type EXT(__notll),@function
+ .text
+ .p2align 4
+EXT(__notll):
+ P(not) gr9, gr9
+ P2(not) gr8, gr8
+ ret
+.Lend:
+ .size EXT(__notll),.Lend-EXT(__notll)
+#endif
+
+#ifdef L_cmov
+/* (void) __cmov (char *dest, const char *src, size_t len) */
+/*
+ * void __cmov (char *dest, const char *src, size_t len)
+ * {
+ * size_t i;
+ *
+ * if (dest < src || dest > src+len)
+ * {
+ * for (i = 0; i < len; i++)
+ * dest[i] = src[i];
+ * }
+ * else
+ * {
+ * while (len-- > 0)
+ * dest[len] = src[len];
+ * }
+ * }
+ */
+
+ .globl EXT(__cmov)
+ .type EXT(__cmov),@function
+ .text
+ .p2align 4
+EXT(__cmov):
+ P(cmp) gr8, gr9, icc0
+ add gr9, gr10, gr4
+ P(cmp) gr8, gr4, icc1
+ bc icc0, 0, .Lfwd
+ bls icc1, 0, .Lback
+.Lfwd:
+ /* move bytes in a forward direction */
+ P(setlos) #0, gr5
+ cmp gr0, gr10, icc0
+ P(subi) gr9, #1, gr9
+ P2(subi) gr8, #1, gr8
+ bnc icc0, 0, .Lret
+.Lfloop:
+ /* forward byte move loop */
+ addi gr5, #1, gr5
+ P(ldsb) @(gr9, gr5), gr4
+ cmp gr5, gr10, icc0
+ P(stb) gr4, @(gr8, gr5)
+ bc icc0, 0, .Lfloop
+ ret
+.Lbloop:
+ /* backward byte move loop body */
+ ldsb @(gr9,gr10),gr4
+ stb gr4,@(gr8,gr10)
+.Lback:
+ P(cmpi) gr10, #0, icc0
+ addi gr10, #-1, gr10
+ bne icc0, 0, .Lbloop
+.Lret:
+ ret
+.Lend:
+ .size EXT(__cmov),.Lend-EXT(__cmov)
+#endif
diff --git a/gcc-4.9/libgcc/config/frv/libgcc-glibc.ver b/gcc-4.9/libgcc/config/frv/libgcc-glibc.ver
new file mode 100644
index 000000000..fc6b32269
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/libgcc-glibc.ver
@@ -0,0 +1,73 @@
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_3.4 {
+ # frv abi symbol names
+ __ftod
+ __ftoi
+ __ftoui
+ __dtoi
+ __ftoui
+ __dtoui
+ __ftoll
+ __dtoll
+ __ftoull
+ __dtoull
+ __itof
+ __lltof
+ __dtof
+ __itod
+ __lltof
+ __lltod
+ __addd
+ __subd
+ __muld
+ __divd
+ __addf
+ __subf
+ __mulf
+ __divf
+ __sllll
+ __srlll
+ __srall
+ __addll
+ __subll
+ __mulll
+ __umulll
+ __divll
+ __udivll
+ __modll
+ __umodll
+ __cmpll
+ __cmpf
+ __cmpd
+ __andll
+ __orll
+ __xorll
+ __notll
+ __cmov
+ __cmovd
+ __cmovh
+ __cmovw
+ __modi
+ __uitod
+ __uitof
+ __ulltod
+ __ulltof
+ __umodi
+}
diff --git a/gcc-4.9/libgcc/config/frv/modi.c b/gcc-4.9/libgcc/config/frv/modi.c
new file mode 100644
index 000000000..d5a91fc0f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/modi.c
@@ -0,0 +1,4 @@
+int __modi (int a, int b)
+{
+ return a % b;
+}
diff --git a/gcc-4.9/libgcc/config/frv/t-frv b/gcc-4.9/libgcc/config/frv/t-frv
new file mode 100644
index 000000000..a4ff05851
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/t-frv
@@ -0,0 +1,22 @@
+LIB1ASMSRC = frv/lib1funcs.S
+LIB1ASMFUNCS = _cmpll _cmpf _cmpd _addll _subll _andll _orll _xorll _notll _cmov
+
+LIB2ADD = $(srcdir)/config/frv/cmovh.c \
+ $(srcdir)/config/frv/cmovw.c \
+ $(srcdir)/config/frv/cmovd.c \
+ $(srcdir)/config/frv/modi.c \
+ $(srcdir)/config/frv/umodi.c \
+ $(srcdir)/config/frv/uitof.c \
+ $(srcdir)/config/frv/uitod.c \
+ $(srcdir)/config/frv/ulltof.c \
+ $(srcdir)/config/frv/ulltod.c
+
+# Compile two additional files that are linked with every program
+# linked using GCC on systems using COFF or ELF, for the sake of C++
+# constructors.
+
+frvbegin$(objext): $(srcdir)/config/frv/frvbegin.c
+ $(gcc_compile) -c $<
+
+frvend$(objext): $(srcdir)/config/frv/frvend.c
+ $(gcc_compile) -c $<
diff --git a/gcc-4.9/libgcc/config/frv/t-linux b/gcc-4.9/libgcc/config/frv/t-linux
new file mode 100644
index 000000000..0240efefa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/t-linux
@@ -0,0 +1,3 @@
+CRTSTUFF_T_CFLAGS = $(PICFLAG)
+
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/frv/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/frv/uitod.c b/gcc-4.9/libgcc/config/frv/uitod.c
new file mode 100644
index 000000000..14290ab6b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/uitod.c
@@ -0,0 +1,4 @@
+double __uitod (unsigned int a)
+{
+ return a;
+}
diff --git a/gcc-4.9/libgcc/config/frv/uitof.c b/gcc-4.9/libgcc/config/frv/uitof.c
new file mode 100644
index 000000000..059bc7c74
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/uitof.c
@@ -0,0 +1,4 @@
+float __uitof (unsigned int a)
+{
+ return a;
+}
diff --git a/gcc-4.9/libgcc/config/frv/ulltod.c b/gcc-4.9/libgcc/config/frv/ulltod.c
new file mode 100644
index 000000000..e6bee1208
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/ulltod.c
@@ -0,0 +1,4 @@
+double __ulltod (unsigned long long a)
+{
+ return a;
+}
diff --git a/gcc-4.9/libgcc/config/frv/ulltof.c b/gcc-4.9/libgcc/config/frv/ulltof.c
new file mode 100644
index 000000000..29cdfd4d2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/ulltof.c
@@ -0,0 +1,4 @@
+float __ulltof (unsigned long long a)
+{
+ return a;
+}
diff --git a/gcc-4.9/libgcc/config/frv/umodi.c b/gcc-4.9/libgcc/config/frv/umodi.c
new file mode 100644
index 000000000..4ffe5ad81
--- /dev/null
+++ b/gcc-4.9/libgcc/config/frv/umodi.c
@@ -0,0 +1,4 @@
+unsigned int __umodi (unsigned int a, unsigned int b)
+{
+ return a % b;
+}
diff --git a/gcc-4.9/libgcc/config/gmon-sol2.c b/gcc-4.9/libgcc/config/gmon-sol2.c
new file mode 100644
index 000000000..7d6149665
--- /dev/null
+++ b/gcc-4.9/libgcc/config/gmon-sol2.c
@@ -0,0 +1,444 @@
+/*-
+ * Copyright (c) 1991 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. [rescinded 22 July 1999]
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* Mangled into a form that works on Solaris 2/SPARC by Mark Eichin
+ * for Cygnus Support, July 1992.
+ *
+ * Modified to support Solaris 2/x86 by J.W.Hawtin <oolon@ankh.org>, 14/8/96.
+ *
+ * It must be used in conjunction with sol2-gc1.S, which is used to start
+ * and stop process monitoring.
+ */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include <fcntl.h> /* For creat. */
+
+extern void monstartup (char *, char *);
+extern void _mcleanup (void);
+#ifdef __i386__
+static void internal_mcount (void) __attribute__ ((used));
+#else
+static void internal_mcount (char *, unsigned short *) __attribute__ ((used));
+#endif
+static void moncontrol (int);
+
+struct phdr {
+ char *lpc;
+ char *hpc;
+ int ncnt;
+};
+
+#define HISTFRACTION 2
+#define HISTCOUNTER unsigned short
+#define HASHFRACTION 1
+#define ARCDENSITY 2
+#define MINARCS 50
+
+struct tostruct {
+ char *selfpc;
+ long count;
+ unsigned short link;
+};
+
+struct rawarc {
+ unsigned long raw_frompc;
+ unsigned long raw_selfpc;
+ long raw_count;
+};
+
+#define ROUNDDOWN(x, y) (((x) / (y)) * (y))
+#define ROUNDUP(x, y) ((((x) + (y) - 1) / (y)) * (y))
+
+/* froms is actually a bunch of unsigned shorts indexing tos. */
+static int profiling = 3;
+static unsigned short *froms;
+static struct tostruct *tos = NULL;
+static long tolimit = 0;
+static char *s_lowpc = NULL;
+static char *s_highpc = NULL;
+static size_t s_textsize = 0;
+
+static int ssiz;
+static char *sbuf;
+static int s_scale;
+/* See profil(2) where this is describe (incorrectly). */
+#define SCALE_1_TO_1 0x10000L
+
+#define MSG "No space for profiling buffer(s)\n"
+
+void
+monstartup (char *lowpc, char *highpc)
+{
+ size_t monsize;
+ char *buffer;
+ size_t o;
+
+ /* Round lowpc and highpc to multiples of the density we're using
+ so the rest of the scaling (here and in gprof) stays in ints. */
+ lowpc = (char *) ROUNDDOWN ((size_t) lowpc,
+ HISTFRACTION * sizeof (HISTCOUNTER));
+ s_lowpc = lowpc;
+ highpc = (char *) ROUNDUP ((size_t) highpc,
+ HISTFRACTION * sizeof (HISTCOUNTER));
+ s_highpc = highpc;
+ s_textsize = highpc - lowpc;
+ monsize = (s_textsize / HISTFRACTION) + sizeof (struct phdr);
+ buffer = sbrk (monsize);
+ if (buffer == (void *) -1) {
+ write (STDERR_FILENO, MSG, sizeof (MSG));
+ return;
+ }
+ froms = sbrk (s_textsize / HASHFRACTION);
+ if (froms == (void *) -1) {
+ write (STDERR_FILENO, MSG, sizeof (MSG));
+ froms = NULL;
+ return;
+ }
+ tolimit = s_textsize * ARCDENSITY / 100;
+ if (tolimit < MINARCS) {
+ tolimit = MINARCS;
+ } else if (tolimit > 65534) {
+ tolimit = 65534;
+ }
+ tos = sbrk (tolimit * sizeof (struct tostruct));
+ if (tos == (void *) -1) {
+ write (STDERR_FILENO, MSG, sizeof (MSG));
+ froms = NULL;
+ tos = NULL;
+ return;
+ }
+ tos[0].link = 0;
+ sbuf = buffer;
+ ssiz = monsize;
+ ((struct phdr *) buffer)->lpc = lowpc;
+ ((struct phdr *) buffer)->hpc = highpc;
+ ((struct phdr *) buffer)->ncnt = ssiz;
+ monsize -= sizeof (struct phdr);
+ if (monsize <= 0)
+ return;
+ o = highpc - lowpc;
+ if(monsize < o)
+ s_scale = ((float) monsize / o) * SCALE_1_TO_1;
+ else
+ s_scale = SCALE_1_TO_1;
+ moncontrol (1);
+}
+
+void
+_mcleanup (void)
+{
+ int fd;
+ int fromindex;
+ int endfrom;
+ char *frompc;
+ int toindex;
+ struct rawarc rawarc;
+ char *profdir;
+ const char *proffile;
+ char *progname;
+ char buf[PATH_MAX];
+ extern char **___Argv;
+
+ moncontrol (0);
+
+ if ((profdir = getenv ("PROFDIR")) != NULL) {
+ /* If PROFDIR contains a null value, no profiling output is produced. */
+ if (*profdir == '\0') {
+ return;
+ }
+
+ progname = strrchr (___Argv[0], '/');
+ if (progname == NULL)
+ progname = ___Argv[0];
+ else
+ progname++;
+
+ sprintf (buf, "%s/%ld.%s", profdir, (long) getpid (), progname);
+ proffile = buf;
+ } else {
+ proffile = "gmon.out";
+ }
+
+ fd = creat (proffile, 0666);
+ if (fd < 0) {
+ perror (proffile);
+ return;
+ }
+#ifdef DEBUG
+ fprintf (stderr, "[mcleanup] sbuf %#x ssiz %d\n", sbuf, ssiz);
+#endif /* DEBUG */
+
+ write (fd, sbuf, ssiz);
+ endfrom = s_textsize / (HASHFRACTION * sizeof (*froms));
+ for (fromindex = 0; fromindex < endfrom; fromindex++) {
+ if (froms[fromindex] == 0) {
+ continue;
+ }
+ frompc = s_lowpc + (fromindex * HASHFRACTION * sizeof (*froms));
+ for (toindex = froms[fromindex];
+ toindex != 0;
+ toindex = tos[toindex].link) {
+#ifdef DEBUG
+ fprintf (stderr, "[mcleanup] frompc %#x selfpc %#x count %d\n",
+ frompc, tos[toindex].selfpc, tos[toindex].count);
+#endif /* DEBUG */
+ rawarc.raw_frompc = (unsigned long) frompc;
+ rawarc.raw_selfpc = (unsigned long) tos[toindex].selfpc;
+ rawarc.raw_count = tos[toindex].count;
+ write (fd, &rawarc, sizeof (rawarc));
+ }
+ }
+ close (fd);
+}
+
+/* Solaris 2 libraries use _mcount. */
+#if defined __i386__
+asm(".globl _mcount\n"
+ "_mcount:\n"
+ " jmp internal_mcount\n");
+#elif defined __x86_64__
+/* See GLIBC for additional information about this technique. */
+asm(".globl _mcount\n"
+ " .type _mcount, @function\n"
+ "_mcount:\n"
+ /* The compiler calls _mcount after the prologue, and does not
+ save any of the registers. Therefore we must preserve all
+ seven registers which may contain function arguments. */
+ " subq $0x38, %rsp\n"
+ " movq %rax, (%rsp)\n"
+ " movq %rcx, 0x08(%rsp)\n"
+ " movq %rdx, 0x10(%rsp)\n"
+ " movq %rsi, 0x18(%rsp)\n"
+ " movq %rdi, 0x20(%rsp)\n"
+ " movq %r8, 0x28(%rsp)\n"
+ " movq %r9, 0x30(%rsp)\n"
+ /* Get SELFPC (pushed by the call to this function) and
+ FROMPCINDEX (via the frame pointer). */
+ " movq 0x38(%rsp), %rdi\n"
+ " movq 0x8(%rbp), %rsi\n"
+ " call internal_mcount\n"
+ /* Restore the saved registers. */
+ " movq 0x30(%rsp), %r9\n"
+ " movq 0x28(%rsp), %r8\n"
+ " movq 0x20(%rsp), %rdi\n"
+ " movq 0x18(%rsp), %rsi\n"
+ " movq 0x10(%rsp), %rdx\n"
+ " movq 0x08(%rsp), %rcx\n"
+ " movq (%rsp), %rax\n"
+ " addq $0x38, %rsp\n"
+ " retq\n");
+#elif defined __sparc__
+/* The SPARC stack frame is only held together by the frame pointers
+ in the register windows. According to the SVR4 SPARC ABI
+ Supplement, Low Level System Information/Operating System
+ Interface/Software Trap Types, a type 3 trap will flush all of the
+ register windows to the stack, which will make it possible to walk
+ the frames and find the return addresses.
+ However, it seems awfully expensive to incur a trap (system
+ call) for every function call. It turns out that "call" simply puts
+ the return address in %o7 expecting the "save" in the procedure to
+ shift it into %i7; this means that before the "save" occurs, %o7
+ contains the address of the call to mcount, and %i7 still contains
+ the caller above that. The asm mcount here simply saves those
+ registers in argument registers and branches to internal_mcount,
+ simulating a call with arguments.
+ Kludges:
+ 1) the branch to internal_mcount is hard coded; it should be
+ possible to tell asm to use the assembler-name of a symbol.
+ 2) in theory, the function calling mcount could have saved %i7
+ somewhere and reused the register; in practice, I *think* this will
+ break longjmp (and maybe the debugger) but I'm not certain. (I take
+ some comfort in the knowledge that it will break the native mcount
+ as well.)
+ 3) if builtin_return_address worked, this could be portable.
+ However, it would really have to be optimized for arguments of 0
+ and 1 and do something like what we have here in order to avoid the
+ trap per function call performance hit.
+ 4) the atexit and monsetup calls prevent this from simply
+ being a leaf routine that doesn't do a "save" (and would thus have
+ access to %o7 and %i7 directly) but the call to write() at the end
+ would have also prevented this.
+
+ -- [eichin:19920702.1107EST] */
+asm(".global _mcount\n"
+ "_mcount:\n"
+ /* i7 == last ret, -> frompcindex. */
+ " mov %i7, %o1\n"
+ /* o7 == current ret, -> selfpc. */
+ " mov %o7, %o0\n"
+ " b,a internal_mcount\n");
+#endif
+
+static void
+#ifdef __i386__
+internal_mcount (void)
+#else
+internal_mcount (char *selfpc, unsigned short *frompcindex)
+#endif
+{
+ struct tostruct *top;
+ struct tostruct *prevtop;
+ long toindex;
+ static char already_setup;
+
+#ifdef __i386__
+ char *selfpc;
+ unsigned short *frompcindex;
+
+ /* Find the return address for mcount and the return address for mcount's
+ caller. */
+
+ /* selfpc = pc pushed by mcount call.
+ This identifies the function that was just entered. */
+ selfpc = (void *) __builtin_return_address (0);
+ /* frompcindex = pc in preceding frame.
+ This identifies the caller of the function just entered. */
+ frompcindex = (void *) __builtin_return_address (1);
+#endif
+
+ if(!already_setup) {
+ extern char etext[];
+
+ already_setup = 1;
+
+#if defined __i386__
+ /* <sys/vmparam.h> USERSTACK. */
+ monstartup ((char *) 0x8048000, etext);
+#elif defined __x86_64__
+ monstartup (NULL, etext);
+#elif defined __sparc__
+ {
+ extern char _start[];
+ extern char _init[];
+
+ monstartup (_start < _init ? _start : _init, etext);
+ }
+#endif
+ atexit (_mcleanup);
+ }
+ /* Check that we are profiling and that we aren't recursively invoked. */
+ if (profiling) {
+ goto out;
+ }
+ profiling++;
+ /* Check that frompcindex is a reasonable pc value. For example: signal
+ catchers get called from the stack, not from text space. too bad. */
+ frompcindex = (unsigned short *) ((long) frompcindex - (long) s_lowpc);
+ if ((unsigned long) frompcindex > s_textsize) {
+ goto done;
+ }
+ frompcindex = &froms[((long) frompcindex) / (HASHFRACTION * sizeof (*froms))];
+ toindex = *frompcindex;
+ if (toindex == 0) {
+ /* First time traversing this arc. */
+ toindex = ++tos[0].link;
+ if (toindex >= tolimit) {
+ goto overflow;
+ }
+ *frompcindex = toindex;
+ top = &tos[toindex];
+ top->selfpc = selfpc;
+ top->count = 1;
+ top->link = 0;
+ goto done;
+ }
+ top = &tos[toindex];
+ if (top->selfpc == selfpc) {
+ /* arc at front of chain; usual case. */
+ top->count++;
+ goto done;
+ }
+ /* Have to go looking down chain for it. Top points to what we are
+ looking at, prevtop points to previous top. We know it is not at the
+ head of the chain. */
+ for (; /* goto done */; ) {
+ if (top->link == 0) {
+ /* top is end of the chain and none of the chain had top->selfpc ==
+ selfpc, so we allocate a new tostruct and link it to the head of
+ the chain. */
+ toindex = ++tos[0].link;
+ if (toindex >= tolimit) {
+ goto overflow;
+ }
+ top = &tos[toindex];
+ top->selfpc = selfpc;
+ top->count = 1;
+ top->link = *frompcindex;
+ *frompcindex = toindex;
+ goto done;
+ }
+ /* Otherwise, check the next arc on the chain. */
+ prevtop = top;
+ top = &tos[top->link];
+ if (top->selfpc == selfpc) {
+ /* There it is. Increment its count move it to the head of the
+ chain. */
+ top->count++;
+ toindex = prevtop->link;
+ prevtop->link = top->link;
+ top->link = *frompcindex;
+ *frompcindex = toindex;
+ goto done;
+ }
+
+ }
+ done:
+ profiling--;
+ /* ... and fall through. */
+ out:
+ /* Normal return restores saved registers. */
+ return;
+
+ overflow:
+ /* Halt further profiling. */
+ profiling++;
+
+#define TOLIMIT "mcount: tos overflow\n"
+ write (STDERR_FILENO, TOLIMIT, sizeof (TOLIMIT));
+ goto out;
+}
+
+/* Control profiling. Profiling is what mcount checks to see if all the
+ data structures are ready. */
+static void
+moncontrol (int mode)
+{
+ if (mode) {
+ /* Start. */
+ profil ((unsigned short *) (sbuf + sizeof (struct phdr)),
+ ssiz - sizeof (struct phdr), (size_t) s_lowpc, s_scale);
+ profiling = 0;
+ } else {
+ /* Stop. */
+ profil ((unsigned short *) 0, 0, 0, 0);
+ profiling = 3;
+ }
+}
diff --git a/gcc-4.9/libgcc/config/gthr-lynx.h b/gcc-4.9/libgcc/config/gthr-lynx.h
new file mode 100644
index 000000000..df192b61b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/gthr-lynx.h
@@ -0,0 +1,61 @@
+/* Threads compatibility routines for libgcc2 and libobjc for
+ LynxOS. */
+/* Compile this one with gcc. */
+/* Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_LYNX_H
+#define GCC_GTHR_LYNX_H
+
+#ifdef _MULTITHREADED
+
+/* Using the macro version of pthread_setspecific leads to a
+ compilation error. Instead we have two choices either kill all
+ macros in pthread.h with defining _POSIX_THREADS_CALLS or undefine
+ individual macros where we should fall back on the function
+ implementation. We choose the second approach. */
+
+#include <pthread.h>
+#undef pthread_setspecific
+
+/* When using static libc on LynxOS, we cannot define pthread_create
+ weak. If the multi-threaded application includes iostream.h,
+ gthr-posix.h is included and pthread_create will be defined weak.
+ If pthread_create is weak its defining module in libc is not
+ necessarily included in the link and the symbol is resolved to zero.
+ Therefore the first call to it will crash.
+
+ Since -mthreads is a multilib switch on LynxOS we know that at this
+ point we are compiling for multi-threaded. Omitting the weak
+ definitions at this point should have no effect. */
+
+#undef GTHREAD_USE_WEAK
+#define GTHREAD_USE_WEAK 0
+
+#include "gthr-posix.h"
+
+#else
+#include "gthr-single.h"
+#endif
+
+#endif /* GCC_GTHR_LYNX_H */
diff --git a/gcc-4.9/libgcc/config/gthr-rtems.h b/gcc-4.9/libgcc/config/gthr-rtems.h
new file mode 100644
index 000000000..1b1874cb4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/gthr-rtems.h
@@ -0,0 +1,164 @@
+/* RTEMS threads compatibility routines for libgcc2 and libobjc.
+ by: Rosimildo da Silva( rdasilva@connecttel.com ) */
+/* Compile this one with gcc. */
+/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_RTEMS_H
+#define GCC_GTHR_RTEMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __GTHREADS 1
+
+#define __GTHREAD_ONCE_INIT 0
+#define __GTHREAD_MUTEX_INIT_FUNCTION rtems_gxx_mutex_init
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION rtems_gxx_recursive_mutex_init
+
+/* Avoid dependency on rtems specific headers. */
+typedef void *__gthread_key_t;
+typedef int __gthread_once_t;
+typedef void *__gthread_mutex_t;
+typedef void *__gthread_recursive_mutex_t;
+
+/*
+ * External functions provided by RTEMS. They are very similar to their POSIX
+ * counterparts. A "Wrapper API" is being use to avoid dependency on any RTEMS
+ * header files.
+ */
+
+/* generic per task variables */
+extern int rtems_gxx_once (__gthread_once_t *__once, void (*__func) (void));
+extern int rtems_gxx_key_create (__gthread_key_t *__key, void (*__dtor) (void *));
+extern int rtems_gxx_key_delete (__gthread_key_t __key);
+extern void *rtems_gxx_getspecific (__gthread_key_t __key);
+extern int rtems_gxx_setspecific (__gthread_key_t __key, const void *__ptr);
+
+/* mutex support */
+extern void rtems_gxx_mutex_init (__gthread_mutex_t *__mutex);
+extern int rtems_gxx_mutex_destroy (__gthread_mutex_t *__mutex);
+extern int rtems_gxx_mutex_lock (__gthread_mutex_t *__mutex);
+extern int rtems_gxx_mutex_trylock (__gthread_mutex_t *__mutex);
+extern int rtems_gxx_mutex_unlock (__gthread_mutex_t *__mutex);
+
+/* recursive mutex support */
+extern void rtems_gxx_recursive_mutex_init (__gthread_recursive_mutex_t *__mutex);
+extern int rtems_gxx_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex);
+extern int rtems_gxx_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex);
+extern int rtems_gxx_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex);
+
+/* RTEMS threading is always active */
+static inline int
+__gthread_active_p (void)
+{
+ return 1;
+}
+
+/* Wrapper calls */
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ return rtems_gxx_once( __once, __func );
+}
+
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ return rtems_gxx_key_create( __key, __dtor );
+}
+
+static inline int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ return rtems_gxx_key_delete (__key);
+}
+
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ return rtems_gxx_getspecific (__key);
+}
+
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ return rtems_gxx_setspecific (__key, __ptr);
+}
+
+static inline int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ return rtems_gxx_mutex_destroy (__mutex);
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ return rtems_gxx_mutex_lock (__mutex);
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ return rtems_gxx_mutex_trylock (__mutex);
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ return rtems_gxx_mutex_unlock( __mutex );
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ return rtems_gxx_recursive_mutex_lock (__mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ return rtems_gxx_recursive_mutex_trylock (__mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ return rtems_gxx_recursive_mutex_unlock( __mutex );
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ /* This requires that recursive and non-recursive mutexes have the same
+ representation. */
+ return rtems_gxx_mutex_destroy (__mutex );
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! GCC_GTHR_RTEMS_H */
diff --git a/gcc-4.9/libgcc/config/gthr-vxworks.h b/gcc-4.9/libgcc/config/gthr-vxworks.h
new file mode 100644
index 000000000..4fdd2c30f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/gthr-vxworks.h
@@ -0,0 +1,175 @@
+/* Threads compatibility routines for libgcc2 and libobjc for VxWorks. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Mike Stump <mrs@wrs.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_VXWORKS_H
+#define GCC_GTHR_VXWORKS_H
+
+#ifdef _LIBOBJC
+
+/* libobjc requires the optional pthreads component. */
+#include "gthr-posix.h"
+
+#else
+#ifdef __cplusplus
+#define UNUSED(x)
+#else
+#define UNUSED(x) x __attribute__((unused))
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __GTHREADS 1
+#define __gthread_active_p() 1
+
+/* Mutexes are easy, except that they need to be initialized at runtime. */
+
+#include <semLib.h>
+
+typedef SEM_ID __gthread_mutex_t;
+/* All VxWorks mutexes are recursive. */
+typedef SEM_ID __gthread_recursive_mutex_t;
+#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+
+static inline void
+__gthread_mutex_init_function (__gthread_mutex_t *mutex)
+{
+ *mutex = semMCreate (SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
+}
+
+static inline int
+__gthread_mutex_destroy (__gthread_mutex_t * UNUSED(mutex))
+{
+ return 0;
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *mutex)
+{
+ return semTake (*mutex, WAIT_FOREVER);
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *mutex)
+{
+ return semTake (*mutex, NO_WAIT);
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *mutex)
+{
+ return semGive (*mutex);
+}
+
+static inline void
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex)
+{
+ __gthread_mutex_init_function (mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex)
+{
+ return __gthread_mutex_lock (mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex)
+{
+ return __gthread_mutex_trylock (mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
+{
+ return __gthread_mutex_unlock (mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_mutex_destroy (__mutex);
+}
+
+/* pthread_once is complicated enough that it's implemented
+ out-of-line. See config/vxlib.c. */
+
+typedef struct
+{
+#if !defined(__RTP__)
+#if defined(__PPC__)
+ __attribute ((aligned (__alignof (unsigned))))
+#endif
+ volatile unsigned char busy;
+#endif
+ volatile unsigned char done;
+#if !defined(__RTP__) && defined(__PPC__)
+ /* PPC's test-and-set implementation requires a 4 byte aligned
+ object, of which it only sets the first byte. We use padding
+ here, in order to maintain some amount of backwards
+ compatibility. Without this padding, gthread_once objects worked
+ by accident because they happen to be static objects and the ppc
+ port automatically increased their alignment to 4 bytes. */
+ unsigned char pad1;
+ unsigned char pad2;
+#endif
+}
+__gthread_once_t;
+
+#if defined (__RTP__)
+# define __GTHREAD_ONCE_INIT { 0 }
+#elif defined (__PPC__)
+# define __GTHREAD_ONCE_INIT { 0, 0, 0, 0 }
+#else
+# define __GTHREAD_ONCE_INIT { 0, 0 }
+#endif
+
+extern int __gthread_once (__gthread_once_t *__once, void (*__func)(void));
+
+/* Thread-specific data requires a great deal of effort, since VxWorks
+ is not really set up for it. See config/vxlib.c for the gory
+ details. All the TSD routines are sufficiently complex that they
+ need to be implemented out of line. */
+
+typedef unsigned int __gthread_key_t;
+
+extern int __gthread_key_create (__gthread_key_t *__keyp, void (*__dtor)(void *));
+extern int __gthread_key_delete (__gthread_key_t __key);
+
+extern void *__gthread_getspecific (__gthread_key_t __key);
+extern int __gthread_setspecific (__gthread_key_t __key, void *__ptr);
+
+#undef UNUSED
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* not _LIBOBJC */
+
+#endif /* gthr-vxworks.h */
diff --git a/gcc-4.9/libgcc/config/h8300/clzhi2.c b/gcc-4.9/libgcc/config/h8300/clzhi2.c
new file mode 100644
index 000000000..fc71c4d6a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/clzhi2.c
@@ -0,0 +1,35 @@
+/* The implementation of __clzhi2.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+int __clzhi2 (unsigned short x);
+
+int
+__clzhi2 (unsigned short x)
+{
+ int i;
+ for (i = 0; i < 16; i++)
+ if (x & ((unsigned short) 1 << (15 - i)))
+ break;
+ return i;
+}
diff --git a/gcc-4.9/libgcc/config/h8300/crti.S b/gcc-4.9/libgcc/config/h8300/crti.S
new file mode 100644
index 000000000..70b192958
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/crti.S
@@ -0,0 +1,63 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* The code in sections .init and .fini is supposed to be a single
+ regular function. The function in .init is called directly from
+ start in crt0.S. The function in .fini is atexit()ed in crt0.S
+ too.
+
+ crti.S contributes the prologue of a function to these sections,
+ and crtn.S comes up the epilogue. STARTFILE_SPEC should list
+ crti.o before any other object files that might add code to .init
+ or .fini sections, and ENDFILE_SPEC should list crtn.o after any
+ such object files. */
+
+#ifdef __H8300H__
+#ifdef __NORMAL_MODE__
+ .h8300hn
+#else
+ .h8300h
+#endif
+#endif
+
+#ifdef __H8300S__
+#ifdef __NORMAL_MODE__
+ .h8300sn
+#else
+ .h8300s
+#endif
+#endif
+#ifdef __H8300SX__
+#ifdef __NORMAL_MODE__
+ .h8300sxn
+#else
+ .h8300sx
+#endif
+#endif
+
+ .section .init, "ax", @progbits
+ .global __init
+__init:
+ .section .fini, "ax", @progbits
+ .global __fini
+__fini:
diff --git a/gcc-4.9/libgcc/config/h8300/crtn.S b/gcc-4.9/libgcc/config/h8300/crtn.S
new file mode 100644
index 000000000..ef4d72c55
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/crtn.S
@@ -0,0 +1,53 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ This file was adapted from glibc sources.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* See an explanation about .init and .fini in crti.S. */
+
+#ifdef __H8300H__
+#ifdef __NORMAL_MODE__
+ .h8300hn
+#else
+ .h8300h
+#endif
+#endif
+
+#ifdef __H8300S__
+#ifdef __NORMAL_MODE__
+ .h8300sn
+#else
+ .h8300s
+#endif
+#endif
+#ifdef __H8300SX__
+#ifdef __NORMAL_MODE__
+ .h8300sxn
+#else
+ .h8300sx
+#endif
+#endif
+ .section .init, "ax", @progbits
+ rts
+
+ .section .fini, "ax", @progbits
+ rts
diff --git a/gcc-4.9/libgcc/config/h8300/ctzhi2.c b/gcc-4.9/libgcc/config/h8300/ctzhi2.c
new file mode 100644
index 000000000..33097a3d1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/ctzhi2.c
@@ -0,0 +1,35 @@
+/* The implementation of __ctzhi2.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+int __ctzhi2 (unsigned short x);
+
+int
+__ctzhi2 (unsigned short x)
+{
+ int i;
+ for (i = 0; i < 16; i++)
+ if (x & ((unsigned short) 1 << i))
+ break;
+ return i;
+}
diff --git a/gcc-4.9/libgcc/config/h8300/fixunssfsi.c b/gcc-4.9/libgcc/config/h8300/fixunssfsi.c
new file mode 100644
index 000000000..c45531613
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/fixunssfsi.c
@@ -0,0 +1,40 @@
+/* More subroutines needed by GCC output code on some machines. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1989-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* The libgcc2.c implementation gets confused by our type setup and creates
+ a directly recursive call, so we do our own implementation. For
+ the H8/300, that's in lib1funcs.S, for H8/300H and H8S, it's here. */
+
+#ifndef __H8300__
+long __fixunssfsi (float a);
+
+long
+__fixunssfsi (float a)
+{
+ if (a >= (float) 32768L)
+ return (long) (a - 32768L) + 32768L;
+ return (long) a;
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/h8300/h8300-lib.h b/gcc-4.9/libgcc/config/h8300/h8300-lib.h
new file mode 100644
index 000000000..cff664a54
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/h8300-lib.h
@@ -0,0 +1,7 @@
+#ifdef FLOAT
+#ifdef __H8300__
+#define CMPtype HItype
+#else
+#define CMPtype SItype
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/h8300/lib1funcs.S b/gcc-4.9/libgcc/config/h8300/lib1funcs.S
new file mode 100644
index 000000000..4bfa7bee1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/lib1funcs.S
@@ -0,0 +1,837 @@
+;; libgcc routines for the Renesas H8/300 CPU.
+;; Contributed by Steve Chamberlain <sac@cygnus.com>
+;; Optimizations by Toshiyasu Morita <toshiyasu.morita@renesas.com>
+
+/* Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Assembler register definitions. */
+
+#define A0 r0
+#define A0L r0l
+#define A0H r0h
+
+#define A1 r1
+#define A1L r1l
+#define A1H r1h
+
+#define A2 r2
+#define A2L r2l
+#define A2H r2h
+
+#define A3 r3
+#define A3L r3l
+#define A3H r3h
+
+#define S0 r4
+#define S0L r4l
+#define S0H r4h
+
+#define S1 r5
+#define S1L r5l
+#define S1H r5h
+
+#define S2 r6
+#define S2L r6l
+#define S2H r6h
+
+#ifdef __H8300__
+#define PUSHP push
+#define POPP pop
+
+#define A0P r0
+#define A1P r1
+#define A2P r2
+#define A3P r3
+#define S0P r4
+#define S1P r5
+#define S2P r6
+#endif
+
+#if defined (__H8300H__) || defined (__H8300S__) || defined (__H8300SX__)
+#define PUSHP push.l
+#define POPP pop.l
+
+#define A0P er0
+#define A1P er1
+#define A2P er2
+#define A3P er3
+#define S0P er4
+#define S1P er5
+#define S2P er6
+
+#define A0E e0
+#define A1E e1
+#define A2E e2
+#define A3E e3
+#endif
+
+#ifdef __H8300H__
+#ifdef __NORMAL_MODE__
+ .h8300hn
+#else
+ .h8300h
+#endif
+#endif
+
+#ifdef __H8300S__
+#ifdef __NORMAL_MODE__
+ .h8300sn
+#else
+ .h8300s
+#endif
+#endif
+#ifdef __H8300SX__
+#ifdef __NORMAL_MODE__
+ .h8300sxn
+#else
+ .h8300sx
+#endif
+#endif
+
+#ifdef L_cmpsi2
+#ifdef __H8300__
+ .section .text
+ .align 2
+ .global ___cmpsi2
+___cmpsi2:
+ cmp.w A0,A2
+ bne .L2
+ cmp.w A1,A3
+ bne .L4
+ mov.w #1,A0
+ rts
+.L2:
+ bgt .L5
+.L3:
+ mov.w #2,A0
+ rts
+.L4:
+ bls .L3
+.L5:
+ sub.w A0,A0
+ rts
+ .end
+#endif
+#endif /* L_cmpsi2 */
+
+#ifdef L_ucmpsi2
+#ifdef __H8300__
+ .section .text
+ .align 2
+ .global ___ucmpsi2
+___ucmpsi2:
+ cmp.w A0,A2
+ bne .L2
+ cmp.w A1,A3
+ bne .L4
+ mov.w #1,A0
+ rts
+.L2:
+ bhi .L5
+.L3:
+ mov.w #2,A0
+ rts
+.L4:
+ bls .L3
+.L5:
+ sub.w A0,A0
+ rts
+ .end
+#endif
+#endif /* L_ucmpsi2 */
+
+#ifdef L_divhi3
+
+;; HImode divides for the H8/300.
+;; We bunch all of this into one object file since there are several
+;; "supporting routines".
+
+; general purpose normalize routine
+;
+; divisor in A0
+; dividend in A1
+; turns both into +ve numbers, and leaves what the answer sign
+; should be in A2L
+
+#ifdef __H8300__
+ .section .text
+ .align 2
+divnorm:
+ or A0H,A0H ; is divisor > 0
+ stc ccr,A2L
+ bge _lab1
+ not A0H ; no - then make it +ve
+ not A0L
+ adds #1,A0
+_lab1: or A1H,A1H ; look at dividend
+ bge _lab2
+ not A1H ; it is -ve, make it positive
+ not A1L
+ adds #1,A1
+ xor #0x8,A2L; and toggle sign of result
+_lab2: rts
+;; Basically the same, except that the sign of the divisor determines
+;; the sign.
+modnorm:
+ or A0H,A0H ; is divisor > 0
+ stc ccr,A2L
+ bge _lab7
+ not A0H ; no - then make it +ve
+ not A0L
+ adds #1,A0
+_lab7: or A1H,A1H ; look at dividend
+ bge _lab8
+ not A1H ; it is -ve, make it positive
+ not A1L
+ adds #1,A1
+_lab8: rts
+
+; A0=A0/A1 signed
+
+ .global ___divhi3
+___divhi3:
+ bsr divnorm
+ bsr ___udivhi3
+negans: btst #3,A2L ; should answer be negative ?
+ beq _lab4
+ not A0H ; yes, so make it so
+ not A0L
+ adds #1,A0
+_lab4: rts
+
+; A0=A0%A1 signed
+
+ .global ___modhi3
+___modhi3:
+ bsr modnorm
+ bsr ___udivhi3
+ mov A3,A0
+ bra negans
+
+; A0=A0%A1 unsigned
+
+ .global ___umodhi3
+___umodhi3:
+ bsr ___udivhi3
+ mov A3,A0
+ rts
+
+; A0=A0/A1 unsigned
+; A3=A0%A1 unsigned
+; A2H trashed
+; D high 8 bits of denom
+; d low 8 bits of denom
+; N high 8 bits of num
+; n low 8 bits of num
+; M high 8 bits of mod
+; m low 8 bits of mod
+; Q high 8 bits of quot
+; q low 8 bits of quot
+; P preserve
+
+; The H8/300 only has a 16/8 bit divide, so we look at the incoming and
+; see how to partition up the expression.
+
+ .global ___udivhi3
+___udivhi3:
+ ; A0 A1 A2 A3
+ ; Nn Dd P
+ sub.w A3,A3 ; Nn Dd xP 00
+ or A1H,A1H
+ bne divlongway
+ or A0H,A0H
+ beq _lab6
+
+; we know that D == 0 and N is != 0
+ mov.b A0H,A3L ; Nn Dd xP 0N
+ divxu A1L,A3 ; MQ
+ mov.b A3L,A0H ; Q
+; dealt with N, do n
+_lab6: mov.b A0L,A3L ; n
+ divxu A1L,A3 ; mq
+ mov.b A3L,A0L ; Qq
+ mov.b A3H,A3L ; m
+ mov.b #0x0,A3H ; Qq 0m
+ rts
+
+; D != 0 - which means the denominator is
+; loop around to get the result.
+
+divlongway:
+ mov.b A0H,A3L ; Nn Dd xP 0N
+ mov.b #0x0,A0H ; high byte of answer has to be zero
+ mov.b #0x8,A2H ; 8
+div8: add.b A0L,A0L ; n*=2
+ rotxl A3L ; Make remainder bigger
+ rotxl A3H
+ sub.w A1,A3 ; Q-=N
+ bhs setbit ; set a bit ?
+ add.w A1,A3 ; no : too far , Q+=N
+
+ dec A2H
+ bne div8 ; next bit
+ rts
+
+setbit: inc A0L ; do insert bit
+ dec A2H
+ bne div8 ; next bit
+ rts
+
+#endif /* __H8300__ */
+#endif /* L_divhi3 */
+
+#ifdef L_divsi3
+
+;; 4 byte integer divides for the H8/300.
+;;
+;; We have one routine which does all the work and lots of
+;; little ones which prepare the args and massage the sign.
+;; We bunch all of this into one object file since there are several
+;; "supporting routines".
+
+ .section .text
+ .align 2
+
+; Put abs SIs into r0/r1 and r2/r3, and leave a 1 in r6l with sign of rest.
+; This function is here to keep branch displacements small.
+
+#ifdef __H8300__
+
+divnorm:
+ mov.b A0H,A0H ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
+ bge postive
+
+ ; negate arg
+ not A0H
+ not A1H
+ not A0L
+ not A1L
+
+ add #1,A1L
+ addx #0,A1H
+ addx #0,A0L
+ addx #0,A0H
+postive:
+ mov.b A2H,A2H ; is the denominator -ve
+ bge postive2
+ not A2L
+ not A2H
+ not A3L
+ not A3H
+ add.b #1,A3L
+ addx #0,A3H
+ addx #0,A2L
+ addx #0,A2H
+ xor.b #0x08,S2L ; toggle the result sign
+postive2:
+ rts
+
+;; Basically the same, except that the sign of the divisor determines
+;; the sign.
+modnorm:
+ mov.b A0H,A0H ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
+ bge mpostive
+
+ ; negate arg
+ not A0H
+ not A1H
+ not A0L
+ not A1L
+
+ add #1,A1L
+ addx #0,A1H
+ addx #0,A0L
+ addx #0,A0H
+mpostive:
+ mov.b A2H,A2H ; is the denominator -ve
+ bge mpostive2
+ not A2L
+ not A2H
+ not A3L
+ not A3H
+ add.b #1,A3L
+ addx #0,A3H
+ addx #0,A2L
+ addx #0,A2H
+mpostive2:
+ rts
+
+#else /* __H8300H__ */
+
+divnorm:
+ mov.l A0P,A0P ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
+ bge postive
+
+ neg.l A0P ; negate arg
+
+postive:
+ mov.l A1P,A1P ; is the denominator -ve
+ bge postive2
+
+ neg.l A1P ; negate arg
+ xor.b #0x08,S2L ; toggle the result sign
+
+postive2:
+ rts
+
+;; Basically the same, except that the sign of the divisor determines
+;; the sign.
+modnorm:
+ mov.l A0P,A0P ; is the numerator -ve
+ stc ccr,S2L ; keep the sign in bit 3 of S2L
+ bge mpostive
+
+ neg.l A0P ; negate arg
+
+mpostive:
+ mov.l A1P,A1P ; is the denominator -ve
+ bge mpostive2
+
+ neg.l A1P ; negate arg
+
+mpostive2:
+ rts
+
+#endif
+
+; numerator in A0/A1
+; denominator in A2/A3
+ .global ___modsi3
+___modsi3:
+#ifdef __H8300__
+ PUSHP S2P
+ PUSHP S0P
+ PUSHP S1P
+ bsr modnorm
+ bsr divmodsi4
+ mov S0,A0
+ mov S1,A1
+ bra exitdiv
+#else
+ PUSHP S2P
+ bsr modnorm
+ bsr ___udivsi3
+ mov.l er3,er0
+ bra exitdiv
+#endif
+
+ ;; H8/300H and H8S version of ___udivsi3 is defined later in
+ ;; the file.
+#ifdef __H8300__
+ .global ___udivsi3
+___udivsi3:
+ PUSHP S2P
+ PUSHP S0P
+ PUSHP S1P
+ bsr divmodsi4
+ bra reti
+#endif
+
+ .global ___umodsi3
+___umodsi3:
+#ifdef __H8300__
+ PUSHP S2P
+ PUSHP S0P
+ PUSHP S1P
+ bsr divmodsi4
+ mov S0,A0
+ mov S1,A1
+ bra reti
+#else
+ bsr ___udivsi3
+ mov.l er3,er0
+ rts
+#endif
+
+ .global ___divsi3
+___divsi3:
+#ifdef __H8300__
+ PUSHP S2P
+ PUSHP S0P
+ PUSHP S1P
+ jsr divnorm
+ jsr divmodsi4
+#else
+ PUSHP S2P
+ jsr divnorm
+ bsr ___udivsi3
+#endif
+
+ ; examine what the sign should be
+exitdiv:
+ btst #3,S2L
+ beq reti
+
+ ; should be -ve
+#ifdef __H8300__
+ not A0H
+ not A1H
+ not A0L
+ not A1L
+
+ add #1,A1L
+ addx #0,A1H
+ addx #0,A0L
+ addx #0,A0H
+#else /* __H8300H__ */
+ neg.l A0P
+#endif
+
+reti:
+#ifdef __H8300__
+ POPP S1P
+ POPP S0P
+#endif
+ POPP S2P
+ rts
+
+ ; takes A0/A1 numerator (A0P for H8/300H)
+ ; A2/A3 denominator (A1P for H8/300H)
+ ; returns A0/A1 quotient (A0P for H8/300H)
+ ; S0/S1 remainder (S0P for H8/300H)
+ ; trashes S2H
+
+#ifdef __H8300__
+
+divmodsi4:
+ sub.w S0,S0 ; zero play area
+ mov.w S0,S1
+ mov.b A2H,S2H
+ or A2L,S2H
+ or A3H,S2H
+ bne DenHighNonZero
+ mov.b A0H,A0H
+ bne NumByte0Zero
+ mov.b A0L,A0L
+ bne NumByte1Zero
+ mov.b A1H,A1H
+ bne NumByte2Zero
+ bra NumByte3Zero
+NumByte0Zero:
+ mov.b A0H,S1L
+ divxu A3L,S1
+ mov.b S1L,A0H
+NumByte1Zero:
+ mov.b A0L,S1L
+ divxu A3L,S1
+ mov.b S1L,A0L
+NumByte2Zero:
+ mov.b A1H,S1L
+ divxu A3L,S1
+ mov.b S1L,A1H
+NumByte3Zero:
+ mov.b A1L,S1L
+ divxu A3L,S1
+ mov.b S1L,A1L
+
+ mov.b S1H,S1L
+ mov.b #0x0,S1H
+ rts
+
+; have to do the divide by shift and test
+DenHighNonZero:
+ mov.b A0H,S1L
+ mov.b A0L,A0H
+ mov.b A1H,A0L
+ mov.b A1L,A1H
+
+ mov.b #0,A1L
+ mov.b #24,S2H ; only do 24 iterations
+
+nextbit:
+ add.w A1,A1 ; double the answer guess
+ rotxl A0L
+ rotxl A0H
+
+ rotxl S1L ; double remainder
+ rotxl S1H
+ rotxl S0L
+ rotxl S0H
+ sub.w A3,S1 ; does it all fit
+ subx A2L,S0L
+ subx A2H,S0H
+ bhs setone
+
+ add.w A3,S1 ; no, restore mistake
+ addx A2L,S0L
+ addx A2H,S0H
+
+ dec S2H
+ bne nextbit
+ rts
+
+setone:
+ inc A1L
+ dec S2H
+ bne nextbit
+ rts
+
+#else /* __H8300H__ */
+
+ ;; This function also computes the remainder and stores it in er3.
+ .global ___udivsi3
+___udivsi3:
+ mov.w A1E,A1E ; denominator top word 0?
+ bne DenHighNonZero
+
+ ; do it the easy way, see page 107 in manual
+ mov.w A0E,A2
+ extu.l A2P
+ divxu.w A1,A2P
+ mov.w A2E,A0E
+ divxu.w A1,A0P
+ mov.w A0E,A3
+ mov.w A2,A0E
+ extu.l A3P
+ rts
+
+ ; er0 = er0 / er1
+ ; er3 = er0 % er1
+ ; trashes er1 er2
+ ; expects er1 >= 2^16
+DenHighNonZero:
+ mov.l er0,er3
+ mov.l er1,er2
+#ifdef __H8300H__
+divmod_L21:
+ shlr.l er0
+ shlr.l er2 ; make divisor < 2^16
+ mov.w e2,e2
+ bne divmod_L21
+#else
+ shlr.l #2,er2 ; make divisor < 2^16
+ mov.w e2,e2
+ beq divmod_L22A
+divmod_L21:
+ shlr.l #2,er0
+divmod_L22:
+ shlr.l #2,er2 ; make divisor < 2^16
+ mov.w e2,e2
+ bne divmod_L21
+divmod_L22A:
+ rotxl.w r2
+ bcs divmod_L23
+ shlr.l er0
+ bra divmod_L24
+divmod_L23:
+ rotxr.w r2
+ shlr.l #2,er0
+divmod_L24:
+#endif
+ ;; At this point,
+ ;; er0 contains shifted dividend
+ ;; er1 contains divisor
+ ;; er2 contains shifted divisor
+ ;; er3 contains dividend, later remainder
+ divxu.w r2,er0 ; r0 now contains the approximate quotient (AQ)
+ extu.l er0
+ beq divmod_L25
+ subs #1,er0 ; er0 = AQ - 1
+ mov.w e1,r2
+ mulxu.w r0,er2 ; er2 = upper (AQ - 1) * divisor
+ sub.w r2,e3 ; dividend - 65536 * er2
+ mov.w r1,r2
+ mulxu.w r0,er2 ; compute er3 = remainder (tentative)
+ sub.l er2,er3 ; er3 = dividend - (AQ - 1) * divisor
+divmod_L25:
+ cmp.l er1,er3 ; is divisor < remainder?
+ blo divmod_L26
+ adds #1,er0
+ sub.l er1,er3 ; correct the remainder
+divmod_L26:
+ rts
+
+#endif
+#endif /* L_divsi3 */
+
+#ifdef L_mulhi3
+
+;; HImode multiply.
+; The H8/300 only has an 8*8->16 multiply.
+; The answer is the same as:
+;
+; product = (srca.l * srcb.l) + ((srca.h * srcb.l) + (srcb.h * srca.l)) * 256
+; (we can ignore A1.h * A0.h cause that will all off the top)
+; A0 in
+; A1 in
+; A0 answer
+
+#ifdef __H8300__
+ .section .text
+ .align 2
+ .global ___mulhi3
+___mulhi3:
+ mov.b A1L,A2L ; A2l gets srcb.l
+ mulxu A0L,A2 ; A2 gets first sub product
+
+ mov.b A0H,A3L ; prepare for
+ mulxu A1L,A3 ; second sub product
+
+ add.b A3L,A2H ; sum first two terms
+
+ mov.b A1H,A3L ; third sub product
+ mulxu A0L,A3
+
+ add.b A3L,A2H ; almost there
+ mov.w A2,A0 ; that is
+ rts
+
+#endif
+#endif /* L_mulhi3 */
+
+#ifdef L_mulsi3
+
+;; SImode multiply.
+;;
+;; I think that shift and add may be sufficient for this. Using the
+;; supplied 8x8->16 would need 10 ops of 14 cycles each + overhead. This way
+;; the inner loop uses maybe 20 cycles + overhead, but terminates
+;; quickly on small args.
+;;
+;; A0/A1 src_a
+;; A2/A3 src_b
+;;
+;; while (a)
+;; {
+;; if (a & 1)
+;; r += b;
+;; a >>= 1;
+;; b <<= 1;
+;; }
+
+ .section .text
+ .align 2
+
+#ifdef __H8300__
+
+ .global ___mulsi3
+___mulsi3:
+ PUSHP S0P
+ PUSHP S1P
+
+ sub.w S0,S0
+ sub.w S1,S1
+
+ ; while (a)
+_top: mov.w A0,A0
+ bne _more
+ mov.w A1,A1
+ beq _done
+_more: ; if (a & 1)
+ bld #0,A1L
+ bcc _nobit
+ ; r += b
+ add.w A3,S1
+ addx A2L,S0L
+ addx A2H,S0H
+_nobit:
+ ; a >>= 1
+ shlr A0H
+ rotxr A0L
+ rotxr A1H
+ rotxr A1L
+
+ ; b <<= 1
+ add.w A3,A3
+ addx A2L,A2L
+ addx A2H,A2H
+ bra _top
+
+_done:
+ mov.w S0,A0
+ mov.w S1,A1
+ POPP S1P
+ POPP S0P
+ rts
+
+#else /* __H8300H__ */
+
+;
+; mulsi3 for H8/300H - based on Renesas SH implementation
+;
+; by Toshiyasu Morita
+;
+; Old code:
+;
+; 16b * 16b = 372 states (worst case)
+; 32b * 32b = 724 states (worst case)
+;
+; New code:
+;
+; 16b * 16b = 48 states
+; 16b * 32b = 72 states
+; 32b * 32b = 92 states
+;
+
+ .global ___mulsi3
+___mulsi3:
+ mov.w r1,r2 ; ( 2 states) b * d
+ mulxu r0,er2 ; (22 states)
+
+ mov.w e0,r3 ; ( 2 states) a * d
+ beq L_skip1 ; ( 4 states)
+ mulxu r1,er3 ; (22 states)
+ add.w r3,e2 ; ( 2 states)
+
+L_skip1:
+ mov.w e1,r3 ; ( 2 states) c * b
+ beq L_skip2 ; ( 4 states)
+ mulxu r0,er3 ; (22 states)
+ add.w r3,e2 ; ( 2 states)
+
+L_skip2:
+ mov.l er2,er0 ; ( 2 states)
+ rts ; (10 states)
+
+#endif
+#endif /* L_mulsi3 */
+#ifdef L_fixunssfsi_asm
+/* For the h8300 we use asm to save some bytes, to
+ allow more programs to fit into the tiny address
+ space. For the H8/300H and H8S, the C version is good enough. */
+#ifdef __H8300__
+/* We still treat NANs different than libgcc2.c, but then, the
+ behavior is undefined anyways. */
+ .global ___fixunssfsi
+___fixunssfsi:
+ cmp.b #0x4f,r0h
+ bge Large_num
+ jmp @___fixsfsi
+Large_num:
+ bhi L_huge_num
+ xor.b #0x80,A0L
+ bmi L_shift8
+L_huge_num:
+ mov.w #65535,A0
+ mov.w A0,A1
+ rts
+L_shift8:
+ mov.b A0L,A0H
+ mov.b A1H,A0L
+ mov.b A1L,A1H
+ mov.b #0,A1L
+ rts
+#endif
+#endif /* L_fixunssfsi_asm */
diff --git a/gcc-4.9/libgcc/config/h8300/parityhi2.c b/gcc-4.9/libgcc/config/h8300/parityhi2.c
new file mode 100644
index 000000000..979ae994f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/parityhi2.c
@@ -0,0 +1,36 @@
+/* The implementation of __parityhi2.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+int __parityhi2 (unsigned short x);
+
+int
+__parityhi2 (unsigned short x)
+{
+ int i;
+ int count = 0;
+ for (i = 0; i < 16; i++)
+ if (x & ((unsigned short) 1 << i))
+ count++;
+ return count & 1;
+}
diff --git a/gcc-4.9/libgcc/config/h8300/popcounthi2.c b/gcc-4.9/libgcc/config/h8300/popcounthi2.c
new file mode 100644
index 000000000..5847131da
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/popcounthi2.c
@@ -0,0 +1,36 @@
+/* The implementation of __popcounthi2.
+ Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+int __popcounthi2 (unsigned short x);
+
+int
+__popcounthi2 (unsigned short x)
+{
+ int i;
+ int count = 0;
+ for (i = 0; i < 16; i++)
+ if (x & ((unsigned short) 1 << i))
+ count++;
+ return count;
+}
diff --git a/gcc-4.9/libgcc/config/h8300/t-h8300 b/gcc-4.9/libgcc/config/h8300/t-h8300
new file mode 100644
index 000000000..b6448523e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/h8300/t-h8300
@@ -0,0 +1,13 @@
+LIB1ASMSRC = h8300/lib1funcs.S
+LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \
+ _fixunssfsi_asm
+
+LIB2ADD = \
+ $(srcdir)/config/h8300/clzhi2.c \
+ $(srcdir)/config/h8300/ctzhi2.c \
+ $(srcdir)/config/h8300/parityhi2.c \
+ $(srcdir)/config/h8300/popcounthi2.c \
+ $(srcdir)/config/h8300/fixunssfsi.c
+
+# We do not have DF type, so fake out the libgcc2 compilation.
+HOST_LIBGCC2_CFLAGS += -DDF=SF
diff --git a/gcc-4.9/libgcc/config/hardfp.c b/gcc-4.9/libgcc/config/hardfp.c
new file mode 100644
index 000000000..4d938d44b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/hardfp.c
@@ -0,0 +1,62 @@
+/* Dummy floating-point routines for hard-float code.
+ Copyright (C) 2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define sf float
+#define df double
+
+#if defined (OP_add3)
+TYPE FUNC (TYPE x, TYPE y) { return x + y; }
+#elif defined (OP_sub3)
+TYPE FUNC (TYPE x, TYPE y) { return x - y; }
+#elif defined (OP_neg2)
+TYPE FUNC (TYPE x) { return -x; }
+#elif defined (OP_mul3)
+TYPE FUNC (TYPE x, TYPE y) { return x * y; }
+#elif defined (OP_div3)
+TYPE FUNC (TYPE x, TYPE y) { return x / y; }
+#elif defined (OP_eq2) || defined (OP_ne2)
+int FUNC (TYPE x, TYPE y) { return x == y ? 0 : 1; }
+#elif defined (OP_ge2)
+int FUNC (TYPE x, TYPE y) { return x >= y ? 0 : -1; }
+#elif defined (OP_gt2)
+int FUNC (TYPE x, TYPE y) { return x > y ? 1 : 0; }
+#elif defined (OP_le2)
+int FUNC (TYPE x, TYPE y) { return x <= y ? 0 : 1; }
+#elif defined (OP_lt2)
+int FUNC (TYPE x, TYPE y) { return x < y ? -1 : 0; }
+#elif defined (OP_unord2)
+int FUNC (TYPE x, TYPE y) { return __builtin_isunordered (x, y); }
+#elif defined (OP_fixsi)
+int FUNC (TYPE x) { return (int) x; }
+#elif defined (OP_floatsi)
+TYPE FUNC (int x) { return (TYPE) x; }
+#elif defined (OP_floatunsi)
+TYPE FUNC (unsigned int x) { return (TYPE) x; }
+#elif defined (OP_extendsf2)
+TYPE FUNC (float x) { return (TYPE) x; }
+#elif defined (OP_truncdf2)
+TYPE FUNC (double x) { return (TYPE) x; }
+#else
+#error Unknown operation
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/32/sfp-machine.h b/gcc-4.9/libgcc/config/i386/32/sfp-machine.h
new file mode 100644
index 000000000..1fa282d7a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/32/sfp-machine.h
@@ -0,0 +1,113 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned int
+#define _FP_WS_TYPE signed int
+#define _FP_I_TYPE int
+
+#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
+ __asm__ ("add{l} {%11,%3|%3,%11}\n\t" \
+ "adc{l} {%9,%2|%2,%9}\n\t" \
+ "adc{l} {%7,%1|%1,%7}\n\t" \
+ "adc{l} {%5,%0|%0,%5}" \
+ : "=r" ((USItype) (r3)), \
+ "=&r" ((USItype) (r2)), \
+ "=&r" ((USItype) (r1)), \
+ "=&r" ((USItype) (r0)) \
+ : "%0" ((USItype) (x3)), \
+ "g" ((USItype) (y3)), \
+ "%1" ((USItype) (x2)), \
+ "g" ((USItype) (y2)), \
+ "%2" ((USItype) (x1)), \
+ "g" ((USItype) (y1)), \
+ "%3" ((USItype) (x0)), \
+ "g" ((USItype) (y0)))
+#define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
+ __asm__ ("add{l} {%8,%2|%2,%8}\n\t" \
+ "adc{l} {%6,%1|%1,%6}\n\t" \
+ "adc{l} {%4,%0|%0,%4}" \
+ : "=r" ((USItype) (r2)), \
+ "=&r" ((USItype) (r1)), \
+ "=&r" ((USItype) (r0)) \
+ : "%0" ((USItype) (x2)), \
+ "g" ((USItype) (y2)), \
+ "%1" ((USItype) (x1)), \
+ "g" ((USItype) (y1)), \
+ "%2" ((USItype) (x0)), \
+ "g" ((USItype) (y0)))
+#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
+ __asm__ ("sub{l} {%11,%3|%3,%11}\n\t" \
+ "sbb{l} {%9,%2|%2,%9}\n\t" \
+ "sbb{l} {%7,%1|%1,%7}\n\t" \
+ "sbb{l} {%5,%0|%0,%5}" \
+ : "=r" ((USItype) (r3)), \
+ "=&r" ((USItype) (r2)), \
+ "=&r" ((USItype) (r1)), \
+ "=&r" ((USItype) (r0)) \
+ : "0" ((USItype) (x3)), \
+ "g" ((USItype) (y3)), \
+ "1" ((USItype) (x2)), \
+ "g" ((USItype) (y2)), \
+ "2" ((USItype) (x1)), \
+ "g" ((USItype) (y1)), \
+ "3" ((USItype) (x0)), \
+ "g" ((USItype) (y0)))
+#define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
+ __asm__ ("sub{l} {%8,%2|%2,%8}\n\t" \
+ "sbb{l} {%6,%1|%1,%6}\n\t" \
+ "sbb{l} {%4,%0|%0,%4}" \
+ : "=r" ((USItype) (r2)), \
+ "=&r" ((USItype) (r1)), \
+ "=&r" ((USItype) (r0)) \
+ : "0" ((USItype) (x2)), \
+ "g" ((USItype) (y2)), \
+ "1" ((USItype) (x1)), \
+ "g" ((USItype) (y1)), \
+ "2" ((USItype) (x0)), \
+ "g" ((USItype) (y0)))
+#define __FP_FRAC_ADDI_4(x3,x2,x1,x0,i) \
+ __asm__ ("add{l} {%4,%3|%3,%4}\n\t" \
+ "adc{l} {$0,%2|%2,0}\n\t" \
+ "adc{l} {$0,%1|%1,0}\n\t" \
+ "adc{l} {$0,%0|%0,0}" \
+ : "+r" ((USItype) (x3)), \
+ "+&r" ((USItype) (x2)), \
+ "+&r" ((USItype) (x1)), \
+ "+&r" ((USItype) (x0)) \
+ : "g" ((USItype) (i)))
+
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
+/* Even if XFmode is 12byte, we have to pad it to
+ 16byte since soft-fp emulation is done in 16byte. */
+#define _FP_NANFRAC_E _FP_QNANBIT_E, 0, 0, 0
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
+
+#ifndef _SOFT_FLOAT
+#define FP_EX_SHIFT 0
+
+#define _FP_DECL_EX \
+ unsigned short _fcw __attribute__ ((unused)) = FP_RND_NEAREST;
+
+#define FP_RND_NEAREST 0
+#define FP_RND_ZERO 0xc00
+#define FP_RND_PINF 0x800
+#define FP_RND_MINF 0x400
+
+#define FP_RND_MASK 0xc00
+
+#define FP_INIT_ROUNDMODE \
+ do { \
+ __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_fcw)); \
+ } while (0)
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/32/t-softfp b/gcc-4.9/libgcc/config/i386/32/t-softfp
new file mode 100644
index 000000000..a48a5b3b1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/32/t-softfp
@@ -0,0 +1,5 @@
+# Omit TImode functions
+softfp_int_modes := si di
+
+# Provide fallbacks for __builtin_copysignq and __builtin_fabsq.
+LIB2ADD += $(srcdir)/config/i386/32/tf-signs.c
diff --git a/gcc-4.9/libgcc/config/i386/32/tf-signs.c b/gcc-4.9/libgcc/config/i386/32/tf-signs.c
new file mode 100644
index 000000000..719bf877b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/32/tf-signs.c
@@ -0,0 +1,62 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+union _FP_UNION_Q
+{
+ __float128 flt;
+ struct
+ {
+ unsigned long frac0 : 32;
+ unsigned long frac1 : 32;
+ unsigned long frac2 : 32;
+ unsigned long frac3 : 16;
+ unsigned exp : 15;
+ unsigned sign : 1;
+ } bits __attribute__((packed));
+};
+
+__float128 __copysigntf3 (__float128, __float128);
+__float128 __fabstf2 (__float128);
+
+__float128
+__copysigntf3 (__float128 a, __float128 b)
+{
+ union _FP_UNION_Q A, B;
+
+ A.flt = a;
+ B.flt = b;
+ A.bits.sign = B.bits.sign;
+
+ return A.flt;
+}
+
+__float128
+__fabstf2 (__float128 a)
+{
+ union _FP_UNION_Q A;
+
+ A.flt = a;
+ A.bits.sign = 0;
+
+ return A.flt;
+}
diff --git a/gcc-4.9/libgcc/config/i386/64/_divtc3.c b/gcc-4.9/libgcc/config/i386/64/_divtc3.c
new file mode 100644
index 000000000..0095d245e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/_divtc3.c
@@ -0,0 +1,16 @@
+#ifdef SHARED
+#define __divtc3 __divtc3_shared
+#endif
+
+#define L_divtc3
+#include "libgcc2.c"
+
+#ifdef SHARED
+#undef __divtc3
+extern __typeof__ (__divtc3_shared) __divtc3_compat __attribute__((alias ("__divtc3_shared")));
+
+#ifndef _WIN32
+asm (".symver __divtc3_compat,__divtc3@GCC_4.0.0");
+asm (".symver __divtc3_shared,__divtc3@@GCC_4.3.0");
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/_multc3.c b/gcc-4.9/libgcc/config/i386/64/_multc3.c
new file mode 100644
index 000000000..08b5ee451
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/_multc3.c
@@ -0,0 +1,16 @@
+#ifdef SHARED
+#define __multc3 __multc3_shared
+#endif
+
+#define L_multc3
+#include "libgcc2.c"
+
+#ifdef SHARED
+#undef __multc3
+extern __typeof__ (__multc3_shared) __multc3_compat __attribute__((alias ("__multc3_shared")));
+
+#ifndef _WIN32
+asm (".symver __multc3_compat,__multc3@GCC_4.0.0");
+asm (".symver __multc3_shared,__multc3@@GCC_4.3.0");
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/_powitf2.c b/gcc-4.9/libgcc/config/i386/64/_powitf2.c
new file mode 100644
index 000000000..e8360156b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/_powitf2.c
@@ -0,0 +1,16 @@
+#ifdef SHARED
+#define __powitf2 __powitf2_shared
+#endif
+
+#define L_powitf2
+#include "libgcc2.c"
+
+#ifdef SHARED
+#undef __powitf2
+extern __typeof__ (__powitf2_shared) __powitf2_compat __attribute__((alias ("__powitf2_shared")));
+
+#ifndef _WIN32
+asm (".symver __powitf2_compat,__powitf2@GCC_4.0.0");
+asm (".symver __powitf2_shared,__powitf2@@GCC_4.3.0");
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/eqtf2.c b/gcc-4.9/libgcc/config/i386/64/eqtf2.c
new file mode 100644
index 000000000..23982fb9e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/eqtf2.c
@@ -0,0 +1,15 @@
+#ifdef SHARED
+#define __netf2 __netf2_shared
+#endif
+
+#include "soft-fp/eqtf2.c"
+
+#ifdef SHARED
+#undef __netf2
+strong_alias (__netf2_shared, __netf2_compat);
+
+#ifndef _WIN32
+asm (".symver __netf2_compat,__netf2@GCC_3.0");
+asm (".symver __netf2_shared,__netf2@@GCC_4.3.0");
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/getf2.c b/gcc-4.9/libgcc/config/i386/64/getf2.c
new file mode 100644
index 000000000..e2c416490
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/getf2.c
@@ -0,0 +1,15 @@
+#ifdef SHARED
+#define __gttf2 __gttf2_shared
+#endif
+
+#include "soft-fp/getf2.c"
+
+#ifdef SHARED
+#undef __gttf2
+strong_alias (__gttf2_shared, __gttf2_compat);
+
+#ifndef _WIN32
+asm (".symver __gttf2_compat,__gttf2@GCC_3.0");
+asm (".symver __gttf2_shared,__gttf2@@GCC_4.3.0");
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/letf2.c b/gcc-4.9/libgcc/config/i386/64/letf2.c
new file mode 100644
index 000000000..784337fff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/letf2.c
@@ -0,0 +1,15 @@
+#ifdef SHARED
+#define __lttf2 __lttf2_shared
+#endif
+
+#include "soft-fp/letf2.c"
+
+#ifdef SHARED
+#undef __lttf2
+strong_alias (__lttf2_shared, __lttf2_compat);
+
+#ifndef _WIN32
+asm (".symver __lttf2_compat,__lttf2@GCC_3.0");
+asm (".symver __lttf2_shared,__lttf2@@GCC_4.3.0");
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/sfp-machine.h b/gcc-4.9/libgcc/config/i386/64/sfp-machine.h
new file mode 100644
index 000000000..1ff94c23e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/sfp-machine.h
@@ -0,0 +1,38 @@
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long long
+#define _FP_WS_TYPE signed long long
+#define _FP_I_TYPE long long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D
+#define _FP_NANFRAC_E _FP_QNANBIT_E, 0
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
+
+#ifndef _SOFT_FLOAT
+#define FP_EX_SHIFT 7
+
+#define _FP_DECL_EX \
+ unsigned int _fcw __attribute__ ((unused)) = FP_RND_NEAREST;
+
+#define FP_RND_NEAREST 0
+#define FP_RND_ZERO 0x6000
+#define FP_RND_PINF 0x4000
+#define FP_RND_MINF 0x2000
+
+#define FP_RND_MASK 0x6000
+
+#define FP_INIT_ROUNDMODE \
+ do { \
+ __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_fcw)); \
+ } while (0)
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/64/t-softfp-compat b/gcc-4.9/libgcc/config/i386/64/t-softfp-compat
new file mode 100644
index 000000000..0978695c3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/64/t-softfp-compat
@@ -0,0 +1,15 @@
+# When TFmode was first added to x86-64 in gcc 4.3.0, some TFmode
+# support functions got improper versions by accident. Here we
+# correct the version and provide backward binary compatibility.
+
+# Filter out the following TFmode functions.
+tf-compats = getf2.c letf2.c eqtf2.c
+tf-functions := $(addprefix $(srcdir)/soft-fp/, $(tf-compats))
+LIB2ADD := $(filter-out $(tf-functions), $(LIB2ADD))
+LIB2ADD += $(addprefix $(srcdir)/config/i386/64/, $(tf-compats))
+
+# Replace _divtc3, _multc3 and _powitf2.
+libgcc2-tf-functions = _divtc3 _multc3 _powitf2
+LIB2FUNCS_EXCLUDE += $(libgcc2-tf-functions)
+libgcc2-tf-compats = $(addsuffix .c, $(libgcc2-tf-functions))
+LIB2ADD += $(addprefix $(srcdir)/config/i386/64/, $(libgcc2-tf-compats))
diff --git a/gcc-4.9/libgcc/config/i386/cpuinfo.c b/gcc-4.9/libgcc/config/i386/cpuinfo.c
new file mode 100644
index 000000000..6ff7502bb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/cpuinfo.c
@@ -0,0 +1,405 @@
+/* Get CPU type and Features for x86 processors.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Sriraman Tallam (tmsriram@google.com)
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "cpuid.h"
+#include "tsystem.h"
+#include "auto-target.h"
+
+#ifdef HAVE_INIT_PRIORITY
+#define CONSTRUCTOR_PRIORITY (101)
+#else
+#define CONSTRUCTOR_PRIORITY
+#endif
+
+int __cpu_indicator_init (void)
+ __attribute__ ((constructor CONSTRUCTOR_PRIORITY));
+
+/* Processor Vendor and Models. */
+
+enum processor_vendor
+{
+ VENDOR_INTEL = 1,
+ VENDOR_AMD,
+ VENDOR_OTHER,
+ VENDOR_MAX
+};
+
+/* Any new types or subtypes have to be inserted at the end. */
+
+enum processor_types
+{
+ INTEL_BONNELL = 1,
+ INTEL_CORE2,
+ INTEL_COREI7,
+ AMDFAM10H,
+ AMDFAM15H,
+ INTEL_SILVERMONT,
+ AMD_BTVER1,
+ AMD_BTVER2,
+ CPU_TYPE_MAX
+};
+
+enum processor_subtypes
+{
+ INTEL_COREI7_NEHALEM = 1,
+ INTEL_COREI7_WESTMERE,
+ INTEL_COREI7_SANDYBRIDGE,
+ AMDFAM10H_BARCELONA,
+ AMDFAM10H_SHANGHAI,
+ AMDFAM10H_ISTANBUL,
+ AMDFAM15H_BDVER1,
+ AMDFAM15H_BDVER2,
+ AMDFAM15H_BDVER3,
+ AMDFAM15H_BDVER4,
+ INTEL_COREI7_IVYBRIDGE,
+ INTEL_COREI7_HASWELL,
+ CPU_SUBTYPE_MAX
+};
+
+/* ISA Features supported. */
+
+enum processor_features
+{
+ FEATURE_CMOV = 0,
+ FEATURE_MMX,
+ FEATURE_POPCNT,
+ FEATURE_SSE,
+ FEATURE_SSE2,
+ FEATURE_SSE3,
+ FEATURE_SSSE3,
+ FEATURE_SSE4_1,
+ FEATURE_SSE4_2,
+ FEATURE_AVX,
+ FEATURE_AVX2,
+ FEATURE_SSE4_A,
+ FEATURE_FMA4,
+ FEATURE_XOP,
+ FEATURE_FMA
+};
+
+struct __processor_model
+{
+ unsigned int __cpu_vendor;
+ unsigned int __cpu_type;
+ unsigned int __cpu_subtype;
+ unsigned int __cpu_features[1];
+} __cpu_model;
+
+
+/* Get the specific type of AMD CPU. */
+
+static void
+get_amd_cpu (unsigned int family, unsigned int model)
+{
+ switch (family)
+ {
+ /* AMD Family 10h. */
+ case 0x10:
+ __cpu_model.__cpu_type = AMDFAM10H;
+ switch (model)
+ {
+ case 0x2:
+ /* Barcelona. */
+ __cpu_model.__cpu_subtype = AMDFAM10H_BARCELONA;
+ break;
+ case 0x4:
+ /* Shanghai. */
+ __cpu_model.__cpu_subtype = AMDFAM10H_SHANGHAI;
+ break;
+ case 0x8:
+ /* Istanbul. */
+ __cpu_model.__cpu_subtype = AMDFAM10H_ISTANBUL;
+ break;
+ default:
+ break;
+ }
+ break;
+ /* AMD Family 14h "btver1". */
+ case 0x14:
+ __cpu_model.__cpu_type = AMD_BTVER1;
+ break;
+ /* AMD Family 15h "Bulldozer". */
+ case 0x15:
+ __cpu_model.__cpu_type = AMDFAM15H;
+ /* Bulldozer version 1. */
+ if ( model <= 0xf)
+ __cpu_model.__cpu_subtype = AMDFAM15H_BDVER1;
+ /* Bulldozer version 2 "Piledriver" */
+ if (model >= 0x10 && model <= 0x2f)
+ __cpu_model.__cpu_subtype = AMDFAM15H_BDVER2;
+ /* Bulldozer version 3 "Steamroller" */
+ if (model >= 0x30 && model <= 0x4f)
+ __cpu_model.__cpu_subtype = AMDFAM15H_BDVER3;
+ break;
+ /* AMD Family 16h "btver2" */
+ case 0x16:
+ __cpu_model.__cpu_type = AMD_BTVER2;
+ break;
+ default:
+ break;
+ }
+}
+
+/* Get the specific type of Intel CPU. */
+
+static void
+get_intel_cpu (unsigned int family, unsigned int model, unsigned int brand_id)
+{
+ /* Parse family and model only if brand ID is 0. */
+ if (brand_id == 0)
+ {
+ switch (family)
+ {
+ case 0x5:
+ /* Pentium. */
+ break;
+ case 0x6:
+ switch (model)
+ {
+ case 0x1c:
+ case 0x26:
+ /* Bonnell. */
+ __cpu_model.__cpu_type = INTEL_BONNELL;
+ break;
+ case 0x37:
+ case 0x4d:
+ /* Silvermont. */
+ __cpu_model.__cpu_type = INTEL_SILVERMONT;
+ break;
+ case 0x1a:
+ case 0x1e:
+ case 0x1f:
+ case 0x2e:
+ /* Nehalem. */
+ __cpu_model.__cpu_type = INTEL_COREI7;
+ __cpu_model.__cpu_subtype = INTEL_COREI7_NEHALEM;
+ break;
+ case 0x25:
+ case 0x2c:
+ case 0x2f:
+ /* Westmere. */
+ __cpu_model.__cpu_type = INTEL_COREI7;
+ __cpu_model.__cpu_subtype = INTEL_COREI7_WESTMERE;
+ break;
+ case 0x2a:
+ case 0x2d:
+ /* Sandy Bridge. */
+ __cpu_model.__cpu_type = INTEL_COREI7;
+ __cpu_model.__cpu_subtype = INTEL_COREI7_SANDYBRIDGE;
+ break;
+ case 0x3a:
+ case 0x3e:
+ /* Ivy Bridge. */
+ __cpu_model.__cpu_type = INTEL_COREI7;
+ __cpu_model.__cpu_subtype = INTEL_COREI7_IVYBRIDGE;
+ break;
+ case 0x3c:
+ case 0x45:
+ case 0x46:
+ /* Haswell. */
+ __cpu_model.__cpu_type = INTEL_COREI7;
+ __cpu_model.__cpu_subtype = INTEL_COREI7_HASWELL;
+ break;
+ case 0x17:
+ case 0x1d:
+ /* Penryn. */
+ case 0x0f:
+ /* Merom. */
+ __cpu_model.__cpu_type = INTEL_CORE2;
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ /* We have no idea. */
+ break;
+ }
+ }
+}
+
+/* ECX and EDX are output of CPUID at level one. MAX_CPUID_LEVEL is
+ the max possible level of CPUID insn. */
+static void
+get_available_features (unsigned int ecx, unsigned int edx,
+ int max_cpuid_level)
+{
+ unsigned int features = 0;
+
+ if (edx & bit_CMOV)
+ features |= (1 << FEATURE_CMOV);
+ if (edx & bit_MMX)
+ features |= (1 << FEATURE_MMX);
+ if (edx & bit_SSE)
+ features |= (1 << FEATURE_SSE);
+ if (edx & bit_SSE2)
+ features |= (1 << FEATURE_SSE2);
+ if (ecx & bit_POPCNT)
+ features |= (1 << FEATURE_POPCNT);
+ if (ecx & bit_SSE3)
+ features |= (1 << FEATURE_SSE3);
+ if (ecx & bit_SSSE3)
+ features |= (1 << FEATURE_SSSE3);
+ if (ecx & bit_SSE4_1)
+ features |= (1 << FEATURE_SSE4_1);
+ if (ecx & bit_SSE4_2)
+ features |= (1 << FEATURE_SSE4_2);
+ if (ecx & bit_AVX)
+ features |= (1 << FEATURE_AVX);
+ if (ecx & bit_FMA)
+ features |= (1 << FEATURE_FMA);
+
+ /* Get Advanced Features at level 7 (eax = 7, ecx = 0). */
+ if (max_cpuid_level >= 7)
+ {
+ unsigned int eax, ebx, ecx, edx;
+ __cpuid_count (7, 0, eax, ebx, ecx, edx);
+ if (ebx & bit_AVX2)
+ features |= (1 << FEATURE_AVX2);
+ }
+
+ unsigned int ext_level;
+ unsigned int eax, ebx;
+ /* Check cpuid level of extended features. */
+ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
+
+ if (ext_level > 0x80000000)
+ {
+ __cpuid (0x80000001, eax, ebx, ecx, edx);
+
+ if (ecx & bit_SSE4a)
+ features |= (1 << FEATURE_SSE4_A);
+ if (ecx & bit_FMA4)
+ features |= (1 << FEATURE_FMA4);
+ if (ecx & bit_XOP)
+ features |= (1 << FEATURE_XOP);
+ }
+
+ __cpu_model.__cpu_features[0] = features;
+}
+
+/* A noinline function calling __get_cpuid. Having many calls to
+ cpuid in one function in 32-bit mode causes GCC to complain:
+ "can't find a register in class CLOBBERED_REGS". This is
+ related to PR rtl-optimization 44174. */
+
+static int __attribute__ ((noinline))
+__get_cpuid_output (unsigned int __level,
+ unsigned int *__eax, unsigned int *__ebx,
+ unsigned int *__ecx, unsigned int *__edx)
+{
+ return __get_cpuid (__level, __eax, __ebx, __ecx, __edx);
+}
+
+
+/* A constructor function that is sets __cpu_model and __cpu_features with
+ the right values. This needs to run only once. This constructor is
+ given the highest priority and it should run before constructors without
+ the priority set. However, it still runs after ifunc initializers and
+ needs to be called explicitly there. */
+
+int __attribute__ ((constructor CONSTRUCTOR_PRIORITY))
+__cpu_indicator_init (void)
+{
+ unsigned int eax, ebx, ecx, edx;
+
+ int max_level = 5;
+ unsigned int vendor;
+ unsigned int model, family, brand_id;
+ unsigned int extended_model, extended_family;
+
+ /* This function needs to run just once. */
+ if (__cpu_model.__cpu_vendor)
+ return 0;
+
+ /* Assume cpuid insn present. Run in level 0 to get vendor id. */
+ if (!__get_cpuid_output (0, &eax, &ebx, &ecx, &edx))
+ {
+ __cpu_model.__cpu_vendor = VENDOR_OTHER;
+ return -1;
+ }
+
+ vendor = ebx;
+ max_level = eax;
+
+ if (max_level < 1)
+ {
+ __cpu_model.__cpu_vendor = VENDOR_OTHER;
+ return -1;
+ }
+
+ if (!__get_cpuid_output (1, &eax, &ebx, &ecx, &edx))
+ {
+ __cpu_model.__cpu_vendor = VENDOR_OTHER;
+ return -1;
+ }
+
+ model = (eax >> 4) & 0x0f;
+ family = (eax >> 8) & 0x0f;
+ brand_id = ebx & 0xff;
+ extended_model = (eax >> 12) & 0xf0;
+ extended_family = (eax >> 20) & 0xff;
+
+ if (vendor == signature_INTEL_ebx)
+ {
+ /* Adjust model and family for Intel CPUS. */
+ if (family == 0x0f)
+ {
+ family += extended_family;
+ model += extended_model;
+ }
+ else if (family == 0x06)
+ model += extended_model;
+
+ /* Get CPU type. */
+ get_intel_cpu (family, model, brand_id);
+ /* Find available features. */
+ get_available_features (ecx, edx, max_level);
+ __cpu_model.__cpu_vendor = VENDOR_INTEL;
+ }
+ else if (vendor == signature_AMD_ebx)
+ {
+ /* Adjust model and family for AMD CPUS. */
+ if (family == 0x0f)
+ {
+ family += extended_family;
+ model += (extended_model << 4);
+ }
+
+ /* Get CPU type. */
+ get_amd_cpu (family, model);
+ /* Find available features. */
+ get_available_features (ecx, edx, max_level);
+ __cpu_model.__cpu_vendor = VENDOR_AMD;
+ }
+ else
+ __cpu_model.__cpu_vendor = VENDOR_OTHER;
+
+ gcc_assert (__cpu_model.__cpu_vendor < VENDOR_MAX);
+ gcc_assert (__cpu_model.__cpu_type < CPU_TYPE_MAX);
+ gcc_assert (__cpu_model.__cpu_subtype < CPU_SUBTYPE_MAX);
+
+ return 0;
+}
diff --git a/gcc-4.9/libgcc/config/i386/crtfastmath.c b/gcc-4.9/libgcc/config/i386/crtfastmath.c
new file mode 100644
index 000000000..ad359d418
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/crtfastmath.c
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SOFT_FLOAT
+#define MXCSR_DAZ (1 << 6) /* Enable denormals are zero mode */
+#define MXCSR_FTZ (1 << 15) /* Enable flush to zero mode */
+
+#ifndef __x86_64__
+/* All 64-bit targets have SSE and DAZ;
+ only check them explicitly for 32-bit ones. */
+#include "cpuid.h"
+#endif
+
+#if !defined __x86_64__ && defined __sun__ && defined __svr4__
+#include <signal.h>
+#include <ucontext.h>
+
+static volatile sig_atomic_t sigill_caught;
+
+static void
+sigill_hdlr (int sig __attribute((unused)),
+ siginfo_t *sip __attribute__((unused)),
+ ucontext_t *ucp)
+{
+ sigill_caught = 1;
+ /* Set PC to the instruction after the faulting one to skip over it,
+ otherwise we enter an infinite loop. 3 is the size of the movaps
+ instruction. */
+ ucp->uc_mcontext.gregs[EIP] += 3;
+ setcontext (ucp);
+}
+#endif
+
+static void __attribute__((constructor))
+#ifndef __x86_64__
+/* The i386 ABI only requires 4-byte stack alignment, so this is necessary
+ to make sure the fxsave struct gets correct alignment.
+ See PR27537 and PR28621. */
+__attribute__ ((force_align_arg_pointer))
+#endif
+set_fast_math (void)
+{
+#ifndef __x86_64__
+ unsigned int eax, ebx, ecx, edx;
+
+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ return;
+
+ if (edx & bit_SSE)
+ {
+ unsigned int mxcsr;
+
+#if defined __sun__ && defined __svr4__
+ /* Solaris 2 before Solaris 9 4/04 cannot execute SSE instructions even
+ if the CPU supports them. Programs receive SIGILL instead, so check
+ for that at runtime. */
+ struct sigaction act, oact;
+
+ act.sa_handler = sigill_hdlr;
+ sigemptyset (&act.sa_mask);
+ /* Need to set SA_SIGINFO so a ucontext_t * is passed to the handler. */
+ act.sa_flags = SA_SIGINFO;
+ sigaction (SIGILL, &act, &oact);
+
+ /* We need a single SSE instruction here so the handler can safely skip
+ over it. */
+ __asm__ volatile ("movaps %xmm0,%xmm0");
+
+ sigaction (SIGILL, &oact, NULL);
+
+ if (sigill_caught)
+ return;
+#endif /* __sun__ && __svr4__ */
+
+ if (edx & bit_FXSAVE)
+ {
+ /* Check if DAZ is available. */
+ struct
+ {
+ unsigned short cwd;
+ unsigned short swd;
+ unsigned short twd;
+ unsigned short fop;
+ unsigned int fip;
+ unsigned int fcs;
+ unsigned int foo;
+ unsigned int fos;
+ unsigned int mxcsr;
+ unsigned int mxcsr_mask;
+ unsigned int st_space[32];
+ unsigned int xmm_space[32];
+ unsigned int padding[56];
+ } __attribute__ ((aligned (16))) fxsave;
+
+ /* This is necessary since some implementations of FXSAVE
+ do not modify reserved areas within the image. */
+ fxsave.mxcsr_mask = 0;
+
+ __builtin_ia32_fxsave (&fxsave);
+
+ mxcsr = fxsave.mxcsr;
+
+ if (fxsave.mxcsr_mask & MXCSR_DAZ)
+ mxcsr |= MXCSR_DAZ;
+ }
+ else
+ mxcsr = __builtin_ia32_stmxcsr ();
+
+ mxcsr |= MXCSR_FTZ;
+ __builtin_ia32_ldmxcsr (mxcsr);
+ }
+#else
+ unsigned int mxcsr = __builtin_ia32_stmxcsr ();
+ mxcsr |= MXCSR_DAZ | MXCSR_FTZ;
+ __builtin_ia32_ldmxcsr (mxcsr);
+#endif
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/crti.S b/gcc-4.9/libgcc/config/i386/crti.S
new file mode 100644
index 000000000..c7413358f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/crti.S
@@ -0,0 +1,40 @@
+/* crti.S for x86.
+
+ Copyright (C) 1993-2014 Free Software Foundation, Inc.
+ Written By Fred Fish, Nov 1992
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* This file just supplies labeled starting points for the .init and .fini
+ sections. It is linked in before the values-Xx.o files and also before
+ crtbegin.o. */
+
+ .ident "GNU C crti.s"
+
+ .section .init
+ .globl _init
+ .type _init,@function
+_init:
+
+ .section .fini
+ .globl _fini
+ .type _fini,@function
+_fini:
diff --git a/gcc-4.9/libgcc/config/i386/crtn.S b/gcc-4.9/libgcc/config/i386/crtn.S
new file mode 100644
index 000000000..215b014ab
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/crtn.S
@@ -0,0 +1,35 @@
+/* crtn.S for x86.
+
+ Copyright (C) 1993-2014 Free Software Foundation, Inc.
+ Written By Fred Fish, Nov 1992
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* This file just supplies returns for the .init and .fini sections. It is
+ linked in after all other files. */
+
+ .ident "GNU C crtn.o"
+
+ .section .init
+ ret $0x0
+
+ .section .fini
+ ret $0x0
diff --git a/gcc-4.9/libgcc/config/i386/crtprec.c b/gcc-4.9/libgcc/config/i386/crtprec.c
new file mode 100644
index 000000000..73e944e61
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/crtprec.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SOFT_FLOAT
+#if __PREC == 32
+ #define X87CW (0 << 8) /* Single precision (24 bits) */
+#elif __PREC == 64
+ #define X87CW (2 << 8) /* Double precision (53 bits) */
+#elif __PREC == 80
+ #define X87CW (3 << 8) /* Extended precision (64 bits) */
+#else
+ #error "Wrong precision requested."
+#endif
+
+#define X87CW_PCMASK (3 << 8)
+
+static void __attribute__((constructor))
+set_precision (void)
+{
+ unsigned short int cwd;
+
+ asm volatile ("fstcw\t%0" : "=m" (cwd));
+
+ cwd &= ~X87CW_PCMASK;
+ cwd |= X87CW;
+
+ asm volatile ("fldcw\t%0" : : "m" (cwd));
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/cygming-crtbegin.c b/gcc-4.9/libgcc/config/i386/cygming-crtbegin.c
new file mode 100644
index 000000000..eeb51d4c5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/cygming-crtbegin.c
@@ -0,0 +1,168 @@
+/* crtbegin object for windows32 targets.
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+ Contributed by Danny Smith <dannysmith@users.sourceforge.net>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Target machine header files require this define. */
+#define IN_LIBGCC2
+
+#include "auto-host.h"
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#include "unwind-dw2-fde.h"
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#ifndef LIBGCC_SONAME
+#define LIBGCC_SONAME "libgcc_s.dll"
+#endif
+
+#ifndef LIBGCJ_SONAME
+#define LIBGCJ_SONAME "libgcj_s.dll"
+#endif
+
+#if DWARF2_UNWIND_INFO
+/* Make the declarations weak. This is critical for
+ _Jv_RegisterClasses because it lives in libgcj.a */
+extern void __register_frame_info (__attribute__((unused)) const void *,
+ __attribute__((unused)) struct object *)
+ TARGET_ATTRIBUTE_WEAK;
+extern void *__deregister_frame_info (__attribute__((unused)) const void *)
+ TARGET_ATTRIBUTE_WEAK;
+TARGET_ATTRIBUTE_WEAK void
+__register_frame_info (__attribute__((unused)) const void *p,
+ __attribute__((unused)) struct object *o)
+{
+}
+
+TARGET_ATTRIBUTE_WEAK void *
+__deregister_frame_info (__attribute__((unused)) const void *p)
+{
+ return (void*) 0;
+}
+#endif /* DWARF2_UNWIND_INFO */
+
+#if TARGET_USE_JCR_SECTION
+extern void _Jv_RegisterClasses (__attribute__((unused)) const void *)
+ TARGET_ATTRIBUTE_WEAK;
+
+TARGET_ATTRIBUTE_WEAK void
+_Jv_RegisterClasses (__attribute__((unused)) const void *p)
+{
+}
+#endif /* TARGET_USE_JCR_SECTION */
+
+#if defined(HAVE_LD_RO_RW_SECTION_MIXING)
+# define EH_FRAME_SECTION_CONST const
+#else
+# define EH_FRAME_SECTION_CONST
+#endif
+
+/* Stick a label at the beginning of the frame unwind info so we can
+ register/deregister it with the exception handling library code. */
+#if DWARF2_UNWIND_INFO
+static EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[]
+ __attribute__((used, section(EH_FRAME_SECTION_NAME), aligned(4)))
+ = { };
+
+static struct object obj;
+
+/* Handle of libgcc's DLL reference. */
+HANDLE hmod_libgcc;
+#endif
+
+#if TARGET_USE_JCR_SECTION
+static void *__JCR_LIST__[]
+ __attribute__ ((used, section(JCR_SECTION_NAME), aligned(4)))
+ = { };
+#endif
+
+/* Pull in references from libgcc.a(unwind-dw2-fde.o) in the
+ startfile. These are referenced by a ctor and dtor in crtend.o. */
+extern void __gcc_register_frame (void);
+extern void __gcc_deregister_frame (void);
+
+void
+__gcc_register_frame (void)
+{
+#if DWARF2_UNWIND_INFO
+/* Weak undefined symbols won't be pulled in from dlls; hence
+ we first test if the dll is already loaded and, if so,
+ get the symbol's address at run-time. If the dll is not loaded,
+ fallback to weak linkage to static archive. */
+
+ void (*register_frame_fn) (const void *, struct object *);
+ HANDLE h = GetModuleHandle (LIBGCC_SONAME);
+
+ if (h)
+ {
+ /* Increasing the load-count of LIBGCC_SONAME DLL. */
+ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
+ register_frame_fn = (void (*) (const void *, struct object *))
+ GetProcAddress (h, "__register_frame_info");
+ }
+ else
+ register_frame_fn = __register_frame_info;
+ if (register_frame_fn)
+ register_frame_fn (__EH_FRAME_BEGIN__, &obj);
+#endif
+
+#if TARGET_USE_JCR_SECTION
+ if (__JCR_LIST__[0])
+ {
+ void (*register_class_fn) (const void *);
+ HANDLE h = GetModuleHandle (LIBGCJ_SONAME);
+ if (h)
+ register_class_fn = (void (*) (const void *))
+ GetProcAddress (h, "_Jv_RegisterClasses");
+ else
+ register_class_fn = _Jv_RegisterClasses;
+
+ if (register_class_fn)
+ register_class_fn (__JCR_LIST__);
+ }
+#endif
+}
+
+void
+__gcc_deregister_frame (void)
+{
+#if DWARF2_UNWIND_INFO
+ void * (*deregister_frame_fn) (const void *);
+ HANDLE h = GetModuleHandle (LIBGCC_SONAME);
+ if (h)
+ deregister_frame_fn = (void* (*) (const void *))
+ GetProcAddress (h, "__deregister_frame_info");
+ else
+ deregister_frame_fn = __deregister_frame_info;
+ if (deregister_frame_fn)
+ deregister_frame_fn (__EH_FRAME_BEGIN__);
+ if (hmod_libgcc)
+ FreeLibrary (hmod_libgcc);
+#endif
+}
diff --git a/gcc-4.9/libgcc/config/i386/cygming-crtend.c b/gcc-4.9/libgcc/config/i386/cygming-crtend.c
new file mode 100644
index 000000000..de0d61fac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/cygming-crtend.c
@@ -0,0 +1,89 @@
+/* crtend object for windows32 targets.
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+ Contributed by Danny Smith <dannysmith@users.sourceforge.net>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Target machine header files require this define. */
+#define IN_LIBGCC2
+
+/* auto-host.h is needed by cygming.h for HAVE_GAS_WEAK and here
+ for HAVE_LD_RO_RW_SECTION_MIXING. */
+#include "auto-host.h"
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#include "unwind-dw2-fde.h"
+
+#if defined(HAVE_LD_RO_RW_SECTION_MIXING)
+# define EH_FRAME_SECTION_CONST const
+#else
+# define EH_FRAME_SECTION_CONST
+#endif
+
+#if DWARF2_UNWIND_INFO
+/* Terminate the frame unwind info section with a 0 as a sentinel;
+ this would be the 'length' field in a real FDE. */
+
+static EH_FRAME_SECTION_CONST int __FRAME_END__[]
+ __attribute__ ((used, section(EH_FRAME_SECTION_NAME),
+ aligned(4)))
+ = { 0 };
+#endif
+
+#if TARGET_USE_JCR_SECTION
+/* Null terminate the .jcr section array. */
+static void *__JCR_END__[1]
+ __attribute__ ((used, section(JCR_SECTION_NAME),
+ aligned(sizeof(void *))))
+ = { 0 };
+#endif
+
+extern void __gcc_register_frame (void);
+extern void __gcc_deregister_frame (void);
+
+static void register_frame_ctor (void) __attribute__ ((constructor (0)));
+
+static void
+register_frame_ctor (void)
+{
+ __gcc_register_frame ();
+#if DEFAULT_USE_CXA_ATEXIT
+ /* If we use the __cxa_atexit method to register C++ dtors
+ at object construction, also use atexit to register eh frame
+ info cleanup. */
+ atexit (__gcc_deregister_frame);
+#endif
+}
+
+#if !DEFAULT_USE_CXA_ATEXIT
+static void deregister_frame_dtor (void) __attribute__ ((destructor (0)));
+
+static void
+deregister_frame_dtor (void)
+{
+ __gcc_deregister_frame ();
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/cygwin.S b/gcc-4.9/libgcc/config/i386/cygwin.S
new file mode 100644
index 000000000..277b59263
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/cygwin.S
@@ -0,0 +1,187 @@
+/* stuff needed for libgcc on win32.
+ *
+ * Copyright (C) 1996-2014 Free Software Foundation, Inc.
+ * Written By Steve Chamberlain
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "auto-host.h"
+
+#ifdef HAVE_GAS_CFI_SECTIONS_DIRECTIVE
+ .cfi_sections .debug_frame
+# define cfi_startproc() .cfi_startproc
+# define cfi_endproc() .cfi_endproc
+# define cfi_adjust_cfa_offset(X) .cfi_adjust_cfa_offset X
+# define cfi_def_cfa_register(X) .cfi_def_cfa_register X
+# define cfi_register(D,S) .cfi_register D, S
+# ifdef __x86_64__
+# define cfi_push(X) .cfi_adjust_cfa_offset 8; .cfi_rel_offset X, 0
+# define cfi_pop(X) .cfi_adjust_cfa_offset -8; .cfi_restore X
+# else
+# define cfi_push(X) .cfi_adjust_cfa_offset 4; .cfi_rel_offset X, 0
+# define cfi_pop(X) .cfi_adjust_cfa_offset -4; .cfi_restore X
+# endif
+#else
+# define cfi_startproc()
+# define cfi_endproc()
+# define cfi_adjust_cfa_offset(X)
+# define cfi_def_cfa_register(X)
+# define cfi_register(D,S)
+# define cfi_push(X)
+# define cfi_pop(X)
+#endif /* HAVE_GAS_CFI_SECTIONS_DIRECTIVE */
+
+#ifdef L_chkstk
+/* Function prologue calls __chkstk to probe the stack when allocating more
+ than CHECK_STACK_LIMIT bytes in one go. Touching the stack at 4K
+ increments is necessary to ensure that the guard pages used
+ by the OS virtual memory manger are allocated in correct sequence. */
+
+ .global ___chkstk
+ .global __alloca
+#ifdef __x86_64__
+/* __alloca is a normal function call, which uses %rcx as the argument. */
+ cfi_startproc()
+__alloca:
+ movq %rcx, %rax
+ /* FALLTHRU */
+
+/* ___chkstk is a *special* function call, which uses %rax as the argument.
+ We avoid clobbering the 4 integer argument registers, %rcx, %rdx,
+ %r8 and %r9, which leaves us with %rax, %r10, and %r11 to use. */
+ .align 4
+___chkstk:
+ popq %r11 /* pop return address */
+ cfi_adjust_cfa_offset(-8) /* indicate return address in r11 */
+ cfi_register(%rip, %r11)
+ movq %rsp, %r10
+ cmpq $0x1000, %rax /* > 4k ?*/
+ jb 2f
+
+1: subq $0x1000, %r10 /* yes, move pointer down 4k*/
+ orl $0x0, (%r10) /* probe there */
+ subq $0x1000, %rax /* decrement count */
+ cmpq $0x1000, %rax
+ ja 1b /* and do it again */
+
+2: subq %rax, %r10
+ movq %rsp, %rax /* hold CFA until return */
+ cfi_def_cfa_register(%rax)
+ orl $0x0, (%r10) /* less than 4k, just peek here */
+ movq %r10, %rsp /* decrement stack */
+
+ /* Push the return value back. Doing this instead of just
+ jumping to %r11 preserves the cached call-return stack
+ used by most modern processors. */
+ pushq %r11
+ ret
+ cfi_endproc()
+#else
+ cfi_startproc()
+___chkstk:
+__alloca:
+ pushl %ecx /* save temp */
+ cfi_push(%eax)
+ leal 8(%esp), %ecx /* point past return addr */
+ cmpl $0x1000, %eax /* > 4k ?*/
+ jb 2f
+
+1: subl $0x1000, %ecx /* yes, move pointer down 4k*/
+ orl $0x0, (%ecx) /* probe there */
+ subl $0x1000, %eax /* decrement count */
+ cmpl $0x1000, %eax
+ ja 1b /* and do it again */
+
+2: subl %eax, %ecx
+ orl $0x0, (%ecx) /* less than 4k, just peek here */
+ movl %esp, %eax /* save current stack pointer */
+ cfi_def_cfa_register(%eax)
+ movl %ecx, %esp /* decrement stack */
+ movl (%eax), %ecx /* recover saved temp */
+
+ /* Copy the return register. Doing this instead of just jumping to
+ the address preserves the cached call-return stack used by most
+ modern processors. */
+ pushl 4(%eax)
+ ret
+ cfi_endproc()
+#endif /* __x86_64__ */
+#endif /* L_chkstk */
+
+#ifdef L_chkstk_ms
+/* ___chkstk_ms is a *special* function call, which uses %rax as the argument.
+ We avoid clobbering any registers. Unlike ___chkstk, it just probes the
+ stack and does no stack allocation. */
+ .global ___chkstk_ms
+#ifdef __x86_64__
+ cfi_startproc()
+___chkstk_ms:
+ pushq %rcx /* save temps */
+ cfi_push(%rcx)
+ pushq %rax
+ cfi_push(%rax)
+ cmpq $0x1000, %rax /* > 4k ?*/
+ leaq 24(%rsp), %rcx /* point past return addr */
+ jb 2f
+
+1: subq $0x1000, %rcx /* yes, move pointer down 4k */
+ orq $0x0, (%rcx) /* probe there */
+ subq $0x1000, %rax /* decrement count */
+ cmpq $0x1000, %rax
+ ja 1b /* and do it again */
+
+2: subq %rax, %rcx
+ orq $0x0, (%rcx) /* less than 4k, just peek here */
+
+ popq %rax
+ cfi_pop(%rax)
+ popq %rcx
+ cfi_pop(%rcx)
+ ret
+ cfi_endproc()
+#else
+ cfi_startproc()
+___chkstk_ms:
+ pushl %ecx /* save temp */
+ cfi_push(%ecx)
+ pushl %eax
+ cfi_push(%eax)
+ cmpl $0x1000, %eax /* > 4k ?*/
+ leal 12(%esp), %ecx /* point past return addr */
+ jb 2f
+
+1: subl $0x1000, %ecx /* yes, move pointer down 4k*/
+ orl $0x0, (%ecx) /* probe there */
+ subl $0x1000, %eax /* decrement count */
+ cmpl $0x1000, %eax
+ ja 1b /* and do it again */
+
+2: subl %eax, %ecx
+ orl $0x0, (%ecx) /* less than 4k, just peek here */
+
+ popl %eax
+ cfi_pop(%eax)
+ popl %ecx
+ cfi_pop(%ecx)
+ ret
+ cfi_endproc()
+#endif /* __x86_64__ */
+#endif /* L_chkstk_ms */
diff --git a/gcc-4.9/libgcc/config/i386/darwin-lib.h b/gcc-4.9/libgcc/config/i386/darwin-lib.h
new file mode 100644
index 000000000..c75b56c28
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/darwin-lib.h
@@ -0,0 +1,32 @@
+/* Target definitions for x86 running Darwin, library renames.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* The system ___divdc3 routine in libSystem on darwin10 is not
+ accurate to 1ulp, ours is, so we avoid ever using the system name
+ for this routine and instead install a non-conflicting name that is
+ accurate. See darwin_rename_builtins. */
+#ifdef L_divdc3
+#define DECLARE_LIBRARY_RENAMES \
+ asm(".text; ___divdc3: jmp ___ieee_divdc3 ; .globl ___divdc3");
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/enable-execute-stack-mingw32.c b/gcc-4.9/libgcc/config/i386/enable-execute-stack-mingw32.c
new file mode 100644
index 000000000..24f06e1f3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/enable-execute-stack-mingw32.c
@@ -0,0 +1,38 @@
+/* Implement __enable_execute_stack for Windows32.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <windows.h>
+
+extern void __enable_execute_stack (void *);
+
+void
+__enable_execute_stack (void *addr)
+{
+ MEMORY_BASIC_INFORMATION b;
+
+ if (!VirtualQuery (addr, &b, sizeof(b)))
+ abort ();
+ VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE,
+ &b.Protect);
+}
diff --git a/gcc-4.9/libgcc/config/i386/gthr-win32.c b/gcc-4.9/libgcc/config/i386/gthr-win32.c
new file mode 100644
index 000000000..eec16b326
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/gthr-win32.c
@@ -0,0 +1,267 @@
+/* Implementation of W32-specific threads compatibility routines for
+ libgcc2. */
+
+/* Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Mumit Khan <khan@xraylith.wisc.edu>.
+ Modified and moved to separate file by Danny Smith
+ <dannysmith@users.sourceforge.net>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <windows.h>
+#ifndef __GTHREAD_HIDE_WIN32API
+# define __GTHREAD_HIDE_WIN32API 1
+#endif
+#undef __GTHREAD_I486_INLINE_LOCK_PRIMITIVES
+#define __GTHREAD_I486_INLINE_LOCK_PRIMITIVES
+#include "gthr-win32.h"
+
+/* Windows32 threads specific definitions. The windows32 threading model
+ does not map well into pthread-inspired gcc's threading model, and so
+ there are caveats one needs to be aware of.
+
+ 1. The destructor supplied to __gthread_key_create is ignored for
+ generic x86-win32 ports. This will certainly cause memory leaks
+ due to unreclaimed eh contexts (sizeof (eh_context) is at least
+ 24 bytes for x86 currently).
+
+ This memory leak may be significant for long-running applications
+ that make heavy use of C++ EH.
+
+ However, Mingw runtime (version 0.3 or newer) provides a mechanism
+ to emulate pthreads key dtors; the runtime provides a special DLL,
+ linked in if -mthreads option is specified, that runs the dtors in
+ the reverse order of registration when each thread exits. If
+ -mthreads option is not given, a stub is linked in instead of the
+ DLL, which results in memory leak. Other x86-win32 ports can use
+ the same technique of course to avoid the leak.
+
+ 2. The error codes returned are non-POSIX like, and cast into ints.
+ This may cause incorrect error return due to truncation values on
+ hw where sizeof (DWORD) > sizeof (int).
+
+ 3. We are currently using a special mutex instead of the Critical
+ Sections, since Win9x does not support TryEnterCriticalSection
+ (while NT does).
+
+ The basic framework should work well enough. In the long term, GCC
+ needs to use Structured Exception Handling on Windows32. */
+
+int
+__gthr_win32_once (__gthread_once_t *once, void (*func) (void))
+{
+ if (once == NULL || func == NULL)
+ return EINVAL;
+
+ if (! once->done)
+ {
+ if (InterlockedIncrement (&(once->started)) == 0)
+ {
+ (*func) ();
+ once->done = TRUE;
+ }
+ else
+ {
+ /* Another thread is currently executing the code, so wait for it
+ to finish; yield the CPU in the meantime. If performance
+ does become an issue, the solution is to use an Event that
+ we wait on here (and set above), but that implies a place to
+ create the event before this routine is called. */
+ while (! once->done)
+ Sleep (0);
+ }
+ }
+ return 0;
+}
+
+/* Windows32 thread local keys don't support destructors; this leads to
+ leaks, especially in threaded applications making extensive use of
+ C++ EH. Mingw uses a thread-support DLL to work-around this problem. */
+
+int
+__gthr_win32_key_create (__gthread_key_t *key,
+ void (*dtor) (void *) __attribute__((unused)))
+{
+ int status = 0;
+ DWORD tls_index = TlsAlloc ();
+ if (tls_index != 0xFFFFFFFF)
+ {
+ *key = tls_index;
+#ifdef MINGW32_SUPPORTS_MT_EH
+ /* Mingw runtime will run the dtors in reverse order for each thread
+ when the thread exits. */
+ status = __mingwthr_key_dtor (*key, dtor);
+#endif
+ }
+ else
+ status = (int) GetLastError ();
+ return status;
+}
+
+int
+__gthr_win32_key_delete (__gthread_key_t key)
+{
+ return (TlsFree (key) != 0) ? 0 : (int) GetLastError ();
+}
+
+void *
+__gthr_win32_getspecific (__gthread_key_t key)
+{
+ DWORD lasterror;
+ void *ptr;
+ lasterror = GetLastError();
+ ptr = TlsGetValue(key);
+ SetLastError( lasterror );
+ return ptr;
+}
+
+int
+__gthr_win32_setspecific (__gthread_key_t key, const void *ptr)
+{
+ if (TlsSetValue (key, CONST_CAST2(void *, const void *, ptr)) != 0)
+ return 0;
+ else
+ return GetLastError ();
+}
+
+void
+__gthr_win32_mutex_init_function (__gthread_mutex_t *mutex)
+{
+ mutex->counter = -1;
+ mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL);
+}
+
+void
+__gthr_win32_mutex_destroy (__gthread_mutex_t *mutex)
+{
+ CloseHandle ((HANDLE) mutex->sema);
+}
+
+int
+__gthr_win32_mutex_lock (__gthread_mutex_t *mutex)
+{
+ if (InterlockedIncrement (&mutex->counter) == 0 ||
+ WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0)
+ return 0;
+ else
+ {
+ /* WaitForSingleObject returns WAIT_FAILED, and we can only do
+ some best-effort cleanup here. */
+ InterlockedDecrement (&mutex->counter);
+ return 1;
+ }
+}
+
+int
+__gthr_win32_mutex_trylock (__gthread_mutex_t *mutex)
+{
+ if (__GTHR_W32_InterlockedCompareExchange (&mutex->counter, 0, -1) < 0)
+ return 0;
+ else
+ return 1;
+}
+
+int
+__gthr_win32_mutex_unlock (__gthread_mutex_t *mutex)
+{
+ if (InterlockedDecrement (&mutex->counter) >= 0)
+ return ReleaseSemaphore (mutex->sema, 1, NULL) ? 0 : 1;
+ else
+ return 0;
+}
+
+void
+__gthr_win32_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex)
+{
+ mutex->counter = -1;
+ mutex->depth = 0;
+ mutex->owner = 0;
+ mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL);
+}
+
+int
+__gthr_win32_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex)
+{
+ DWORD me = GetCurrentThreadId();
+ if (InterlockedIncrement (&mutex->counter) == 0)
+ {
+ mutex->depth = 1;
+ mutex->owner = me;
+ }
+ else if (mutex->owner == me)
+ {
+ InterlockedDecrement (&mutex->counter);
+ ++(mutex->depth);
+ }
+ else if (WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0)
+ {
+ mutex->depth = 1;
+ mutex->owner = me;
+ }
+ else
+ {
+ /* WaitForSingleObject returns WAIT_FAILED, and we can only do
+ some best-effort cleanup here. */
+ InterlockedDecrement (&mutex->counter);
+ return 1;
+ }
+ return 0;
+}
+
+int
+__gthr_win32_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex)
+{
+ DWORD me = GetCurrentThreadId();
+ if (__GTHR_W32_InterlockedCompareExchange (&mutex->counter, 0, -1) < 0)
+ {
+ mutex->depth = 1;
+ mutex->owner = me;
+ }
+ else if (mutex->owner == me)
+ ++(mutex->depth);
+ else
+ return 1;
+
+ return 0;
+}
+
+int
+__gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
+{
+ --(mutex->depth);
+ if (mutex->depth == 0)
+ {
+ mutex->owner = 0;
+
+ if (InterlockedDecrement (&mutex->counter) >= 0)
+ return ReleaseSemaphore (mutex->sema, 1, NULL) ? 0 : 1;
+ }
+
+ return 0;
+}
+
+int
+__gthr_win32_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex)
+{
+ CloseHandle ((HANDLE) mutex->sema);
+ return 0;
+}
diff --git a/gcc-4.9/libgcc/config/i386/gthr-win32.h b/gcc-4.9/libgcc/config/i386/gthr-win32.h
new file mode 100644
index 000000000..c295fd5f1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/gthr-win32.h
@@ -0,0 +1,786 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */
+
+/* Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Mumit Khan <khan@xraylith.wisc.edu>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_WIN32_H
+#define GCC_GTHR_WIN32_H
+
+/* Make sure CONST_CAST2 (origin in system.h) is declared. */
+#ifndef CONST_CAST2
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
+#endif
+
+/* Windows32 threads specific definitions. The windows32 threading model
+ does not map well into pthread-inspired gcc's threading model, and so
+ there are caveats one needs to be aware of.
+
+ 1. The destructor supplied to __gthread_key_create is ignored for
+ generic x86-win32 ports. This will certainly cause memory leaks
+ due to unreclaimed eh contexts (sizeof (eh_context) is at least
+ 24 bytes for x86 currently).
+
+ This memory leak may be significant for long-running applications
+ that make heavy use of C++ EH.
+
+ However, Mingw runtime (version 0.3 or newer) provides a mechanism
+ to emulate pthreads key dtors; the runtime provides a special DLL,
+ linked in if -mthreads option is specified, that runs the dtors in
+ the reverse order of registration when each thread exits. If
+ -mthreads option is not given, a stub is linked in instead of the
+ DLL, which results in memory leak. Other x86-win32 ports can use
+ the same technique of course to avoid the leak.
+
+ 2. The error codes returned are non-POSIX like, and cast into ints.
+ This may cause incorrect error return due to truncation values on
+ hw where sizeof (DWORD) > sizeof (int).
+
+ 3. We are currently using a special mutex instead of the Critical
+ Sections, since Win9x does not support TryEnterCriticalSection
+ (while NT does).
+
+ The basic framework should work well enough. In the long term, GCC
+ needs to use Structured Exception Handling on Windows32. */
+
+#define __GTHREADS 1
+
+#include <errno.h>
+#ifdef __MINGW32__
+#include <_mingw.h>
+#endif
+
+#ifndef __UNUSED_PARAM
+#define __UNUSED_PARAM(x) x
+#endif
+
+#ifdef _LIBOBJC
+
+/* This is necessary to prevent windef.h (included from windows.h) from
+ defining its own BOOL as a typedef. */
+#ifndef __OBJC__
+#define __OBJC__
+#endif
+#include <windows.h>
+/* Now undef the windows BOOL. */
+#undef BOOL
+
+/* Key structure for maintaining thread specific storage */
+static DWORD __gthread_objc_data_tls = (DWORD) -1;
+
+/* Backend initialization functions */
+
+/* Initialize the threads subsystem. */
+int
+__gthread_objc_init_thread_system (void)
+{
+ /* Initialize the thread storage key. */
+ if ((__gthread_objc_data_tls = TlsAlloc ()) != (DWORD) -1)
+ return 0;
+ else
+ return -1;
+}
+
+/* Close the threads subsystem. */
+int
+__gthread_objc_close_thread_system (void)
+{
+ if (__gthread_objc_data_tls != (DWORD) -1)
+ TlsFree (__gthread_objc_data_tls);
+ return 0;
+}
+
+/* Backend thread functions */
+
+/* Create a new thread of execution. */
+objc_thread_t
+__gthread_objc_thread_detach (void (*func)(void *arg), void *arg)
+{
+ DWORD thread_id = 0;
+ HANDLE win32_handle;
+
+ if (!(win32_handle = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) func,
+ arg, 0, &thread_id)))
+ thread_id = 0;
+
+ return (objc_thread_t) (INT_PTR) thread_id;
+}
+
+/* Set the current thread's priority. */
+int
+__gthread_objc_thread_set_priority (int priority)
+{
+ int sys_priority = 0;
+
+ switch (priority)
+ {
+ case OBJC_THREAD_INTERACTIVE_PRIORITY:
+ sys_priority = THREAD_PRIORITY_NORMAL;
+ break;
+ default:
+ case OBJC_THREAD_BACKGROUND_PRIORITY:
+ sys_priority = THREAD_PRIORITY_BELOW_NORMAL;
+ break;
+ case OBJC_THREAD_LOW_PRIORITY:
+ sys_priority = THREAD_PRIORITY_LOWEST;
+ break;
+ }
+
+ /* Change priority */
+ if (SetThreadPriority (GetCurrentThread (), sys_priority))
+ return 0;
+ else
+ return -1;
+}
+
+/* Return the current thread's priority. */
+int
+__gthread_objc_thread_get_priority (void)
+{
+ int sys_priority;
+
+ sys_priority = GetThreadPriority (GetCurrentThread ());
+
+ switch (sys_priority)
+ {
+ case THREAD_PRIORITY_HIGHEST:
+ case THREAD_PRIORITY_TIME_CRITICAL:
+ case THREAD_PRIORITY_ABOVE_NORMAL:
+ case THREAD_PRIORITY_NORMAL:
+ return OBJC_THREAD_INTERACTIVE_PRIORITY;
+
+ default:
+ case THREAD_PRIORITY_BELOW_NORMAL:
+ return OBJC_THREAD_BACKGROUND_PRIORITY;
+
+ case THREAD_PRIORITY_IDLE:
+ case THREAD_PRIORITY_LOWEST:
+ return OBJC_THREAD_LOW_PRIORITY;
+ }
+
+ /* Couldn't get priority. */
+ return -1;
+}
+
+/* Yield our process time to another thread. */
+void
+__gthread_objc_thread_yield (void)
+{
+ Sleep (0);
+}
+
+/* Terminate the current thread. */
+int
+__gthread_objc_thread_exit (void)
+{
+ /* exit the thread */
+ ExitThread (__objc_thread_exit_status);
+
+ /* Failed if we reached here */
+ return -1;
+}
+
+/* Returns an integer value which uniquely describes a thread. */
+objc_thread_t
+__gthread_objc_thread_id (void)
+{
+ return (objc_thread_t) (INT_PTR) GetCurrentThreadId ();
+}
+
+/* Sets the thread's local storage pointer. */
+int
+__gthread_objc_thread_set_data (void *value)
+{
+ if (TlsSetValue (__gthread_objc_data_tls, value))
+ return 0;
+ else
+ return -1;
+}
+
+/* Returns the thread's local storage pointer. */
+void *
+__gthread_objc_thread_get_data (void)
+{
+ DWORD lasterror;
+ void *ptr;
+
+ lasterror = GetLastError ();
+
+ ptr = TlsGetValue (__gthread_objc_data_tls); /* Return thread data. */
+
+ SetLastError (lasterror);
+
+ return ptr;
+}
+
+/* Backend mutex functions */
+
+/* Allocate a mutex. */
+int
+__gthread_objc_mutex_allocate (objc_mutex_t mutex)
+{
+ if ((mutex->backend = (void *) CreateMutex (NULL, 0, NULL)) == NULL)
+ return -1;
+ else
+ return 0;
+}
+
+/* Deallocate a mutex. */
+int
+__gthread_objc_mutex_deallocate (objc_mutex_t mutex)
+{
+ CloseHandle ((HANDLE) (mutex->backend));
+ return 0;
+}
+
+/* Grab a lock on a mutex. */
+int
+__gthread_objc_mutex_lock (objc_mutex_t mutex)
+{
+ int status;
+
+ status = WaitForSingleObject ((HANDLE) (mutex->backend), INFINITE);
+ if (status != WAIT_OBJECT_0 && status != WAIT_ABANDONED)
+ return -1;
+ else
+ return 0;
+}
+
+/* Try to grab a lock on a mutex. */
+int
+__gthread_objc_mutex_trylock (objc_mutex_t mutex)
+{
+ int status;
+
+ status = WaitForSingleObject ((HANDLE) (mutex->backend), 0);
+ if (status != WAIT_OBJECT_0 && status != WAIT_ABANDONED)
+ return -1;
+ else
+ return 0;
+}
+
+/* Unlock the mutex */
+int
+__gthread_objc_mutex_unlock (objc_mutex_t mutex)
+{
+ if (ReleaseMutex ((HANDLE) (mutex->backend)) == 0)
+ return -1;
+ else
+ return 0;
+}
+
+/* Backend condition mutex functions */
+
+/* Allocate a condition. */
+int
+__gthread_objc_condition_allocate (objc_condition_t __UNUSED_PARAM(condition))
+{
+ /* Unimplemented. */
+ return -1;
+}
+
+/* Deallocate a condition. */
+int
+__gthread_objc_condition_deallocate (objc_condition_t __UNUSED_PARAM(condition))
+{
+ /* Unimplemented. */
+ return -1;
+}
+
+/* Wait on the condition */
+int
+__gthread_objc_condition_wait (objc_condition_t __UNUSED_PARAM(condition),
+ objc_mutex_t __UNUSED_PARAM(mutex))
+{
+ /* Unimplemented. */
+ return -1;
+}
+
+/* Wake up all threads waiting on this condition. */
+int
+__gthread_objc_condition_broadcast (objc_condition_t __UNUSED_PARAM(condition))
+{
+ /* Unimplemented. */
+ return -1;
+}
+
+/* Wake up one thread waiting on this condition. */
+int
+__gthread_objc_condition_signal (objc_condition_t __UNUSED_PARAM(condition))
+{
+ /* Unimplemented. */
+ return -1;
+}
+
+#else /* _LIBOBJC */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned long __gthread_key_t;
+
+typedef struct {
+ int done;
+ long started;
+} __gthread_once_t;
+
+typedef struct {
+ long counter;
+ void *sema;
+} __gthread_mutex_t;
+
+typedef struct {
+ long counter;
+ long depth;
+ unsigned long owner;
+ void *sema;
+} __gthread_recursive_mutex_t;
+
+#define __GTHREAD_ONCE_INIT {0, -1}
+#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+#define __GTHREAD_MUTEX_INIT_DEFAULT {-1, 0}
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION \
+ __gthread_recursive_mutex_init_function
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_DEFAULT {-1, 0, 0, 0}
+
+#if defined (_WIN32) && !defined(__CYGWIN__)
+#define MINGW32_SUPPORTS_MT_EH 1
+/* Mingw runtime >= v0.3 provides a magic variable that is set to nonzero
+ if -mthreads option was specified, or 0 otherwise. This is to get around
+ the lack of weak symbols in PE-COFF. */
+extern int _CRT_MT;
+extern int __mingwthr_key_dtor (unsigned long, void (*) (void *));
+#endif /* _WIN32 && !__CYGWIN__ */
+
+/* The Windows95 kernel does not export InterlockedCompareExchange.
+ This provides a substitute. When building apps that reference
+ gthread_mutex_try_lock, the __GTHREAD_I486_INLINE_LOCK_PRIMITIVES
+ macro must be defined if Windows95 is a target. Currently
+ gthread_mutex_try_lock is not referenced by libgcc or libstdc++. */
+#ifdef __GTHREAD_I486_INLINE_LOCK_PRIMITIVES
+static inline long
+__gthr_i486_lock_cmp_xchg(long *__dest, long __xchg, long __comperand)
+{
+ long result;
+ __asm__ __volatile__ ("\n\
+ lock\n\
+ cmpxchg{l} {%4, %1|%1, %4}\n"
+ : "=a" (result), "=m" (*__dest)
+ : "0" (__comperand), "m" (*__dest), "r" (__xchg)
+ : "cc");
+ return result;
+}
+#define __GTHR_W32_InterlockedCompareExchange __gthr_i486_lock_cmp_xchg
+#else /* __GTHREAD_I486_INLINE_LOCK_PRIMITIVES */
+#define __GTHR_W32_InterlockedCompareExchange InterlockedCompareExchange
+#endif /* __GTHREAD_I486_INLINE_LOCK_PRIMITIVES */
+
+static inline int
+__gthread_active_p (void)
+{
+#ifdef MINGW32_SUPPORTS_MT_EH
+ return _CRT_MT;
+#else
+ return 1;
+#endif
+}
+
+#if __GTHREAD_HIDE_WIN32API
+
+/* The implementations are in config/i386/gthr-win32.c in libgcc.a.
+ Only stubs are exposed to avoid polluting the C++ namespace with
+ windows api definitions. */
+
+extern int __gthr_win32_once (__gthread_once_t *, void (*) (void));
+extern int __gthr_win32_key_create (__gthread_key_t *, void (*) (void*));
+extern int __gthr_win32_key_delete (__gthread_key_t);
+extern void * __gthr_win32_getspecific (__gthread_key_t);
+extern int __gthr_win32_setspecific (__gthread_key_t, const void *);
+extern void __gthr_win32_mutex_init_function (__gthread_mutex_t *);
+extern int __gthr_win32_mutex_lock (__gthread_mutex_t *);
+extern int __gthr_win32_mutex_trylock (__gthread_mutex_t *);
+extern int __gthr_win32_mutex_unlock (__gthread_mutex_t *);
+extern void
+ __gthr_win32_recursive_mutex_init_function (__gthread_recursive_mutex_t *);
+extern int __gthr_win32_recursive_mutex_lock (__gthread_recursive_mutex_t *);
+extern int
+ __gthr_win32_recursive_mutex_trylock (__gthread_recursive_mutex_t *);
+extern int __gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t *);
+extern void __gthr_win32_mutex_destroy (__gthread_mutex_t *);
+extern int
+ __gthr_win32_recursive_mutex_destroy (__gthread_recursive_mutex_t *);
+
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_once (__once, __func);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ return __gthr_win32_key_create (__key, __dtor);
+}
+
+static inline int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ return __gthr_win32_key_delete (__key);
+}
+
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ return __gthr_win32_getspecific (__key);
+}
+
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ return __gthr_win32_setspecific (__key, __ptr);
+}
+
+static inline void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+{
+ __gthr_win32_mutex_init_function (__mutex);
+}
+
+static inline void
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ __gthr_win32_mutex_destroy (__mutex);
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_mutex_lock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_mutex_trylock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_mutex_unlock (__mutex);
+ else
+ return 0;
+}
+
+static inline void
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ __gthr_win32_recursive_mutex_init_function (__mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_recursive_mutex_lock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_recursive_mutex_trylock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthr_win32_recursive_mutex_unlock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthr_win32_recursive_mutex_destroy (__mutex);
+}
+
+#else /* ! __GTHREAD_HIDE_WIN32API */
+
+#include <windows.h>
+#include <errno.h>
+
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (! __gthread_active_p ())
+ return -1;
+ else if (__once == NULL || __func == NULL)
+ return EINVAL;
+
+ if (! __once->done)
+ {
+ if (InterlockedIncrement (&(__once->started)) == 0)
+ {
+ (*__func) ();
+ __once->done = TRUE;
+ }
+ else
+ {
+ /* Another thread is currently executing the code, so wait for it
+ to finish; yield the CPU in the meantime. If performance
+ does become an issue, the solution is to use an Event that
+ we wait on here (and set above), but that implies a place to
+ create the event before this routine is called. */
+ while (! __once->done)
+ Sleep (0);
+ }
+ }
+
+ return 0;
+}
+
+/* Windows32 thread local keys don't support destructors; this leads to
+ leaks, especially in threaded applications making extensive use of
+ C++ EH. Mingw uses a thread-support DLL to work-around this problem. */
+static inline int
+__gthread_key_create (__gthread_key_t *__key,
+ void (*__dtor) (void *) __attribute__((unused)))
+{
+ int __status = 0;
+ DWORD __tls_index = TlsAlloc ();
+ if (__tls_index != 0xFFFFFFFF)
+ {
+ *__key = __tls_index;
+#ifdef MINGW32_SUPPORTS_MT_EH
+ /* Mingw runtime will run the dtors in reverse order for each thread
+ when the thread exits. */
+ __status = __mingwthr_key_dtor (*__key, __dtor);
+#endif
+ }
+ else
+ __status = (int) GetLastError ();
+ return __status;
+}
+
+static inline int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ return (TlsFree (__key) != 0) ? 0 : (int) GetLastError ();
+}
+
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ DWORD __lasterror;
+ void *__ptr;
+
+ __lasterror = GetLastError ();
+
+ __ptr = TlsGetValue (__key);
+
+ SetLastError (__lasterror);
+
+ return __ptr;
+}
+
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ if (TlsSetValue (__key, CONST_CAST2(void *, const void *, __ptr)) != 0)
+ return 0;
+ else
+ return GetLastError ();
+}
+
+static inline void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+{
+ __mutex->counter = -1;
+ __mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL);
+}
+
+static inline void
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ CloseHandle ((HANDLE) __mutex->sema);
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ int __status = 0;
+
+ if (__gthread_active_p ())
+ {
+ if (InterlockedIncrement (&__mutex->counter) == 0 ||
+ WaitForSingleObject (__mutex->sema, INFINITE) == WAIT_OBJECT_0)
+ __status = 0;
+ else
+ {
+ /* WaitForSingleObject returns WAIT_FAILED, and we can only do
+ some best-effort cleanup here. */
+ InterlockedDecrement (&__mutex->counter);
+ __status = 1;
+ }
+ }
+ return __status;
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ int __status = 0;
+
+ if (__gthread_active_p ())
+ {
+ if (__GTHR_W32_InterlockedCompareExchange (&__mutex->counter, 0, -1) < 0)
+ __status = 0;
+ else
+ __status = 1;
+ }
+ return __status;
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ if (InterlockedDecrement (&__mutex->counter) >= 0)
+ return ReleaseSemaphore (__mutex->sema, 1, NULL) ? 0 : 1;
+ }
+ return 0;
+}
+
+static inline void
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ __mutex->counter = -1;
+ __mutex->depth = 0;
+ __mutex->owner = 0;
+ __mutex->sema = CreateSemaphoreW (NULL, 0, 65535, NULL);
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ DWORD __me = GetCurrentThreadId();
+ if (InterlockedIncrement (&__mutex->counter) == 0)
+ {
+ __mutex->depth = 1;
+ __mutex->owner = __me;
+ }
+ else if (__mutex->owner == __me)
+ {
+ InterlockedDecrement (&__mutex->counter);
+ ++(__mutex->depth);
+ }
+ else if (WaitForSingleObject (__mutex->sema, INFINITE) == WAIT_OBJECT_0)
+ {
+ __mutex->depth = 1;
+ __mutex->owner = __me;
+ }
+ else
+ {
+ /* WaitForSingleObject returns WAIT_FAILED, and we can only do
+ some best-effort cleanup here. */
+ InterlockedDecrement (&__mutex->counter);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ DWORD __me = GetCurrentThreadId();
+ if (__GTHR_W32_InterlockedCompareExchange (&__mutex->counter, 0, -1) < 0)
+ {
+ __mutex->depth = 1;
+ __mutex->owner = __me;
+ }
+ else if (__mutex->owner == __me)
+ ++(__mutex->depth);
+ else
+ return 1;
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ --(__mutex->depth);
+ if (__mutex->depth == 0)
+ {
+ __mutex->owner = 0;
+
+ if (InterlockedDecrement (&__mutex->counter) >= 0)
+ return ReleaseSemaphore (__mutex->sema, 1, NULL) ? 0 : 1;
+ }
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ CloseHandle ((HANDLE) __mutex->sema);
+ return 0;
+}
+
+#endif /* __GTHREAD_HIDE_WIN32API */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBOBJC */
+
+#endif /* ! GCC_GTHR_WIN32_H */
diff --git a/gcc-4.9/libgcc/config/i386/libgcc-bsd.ver b/gcc-4.9/libgcc/config/i386/libgcc-bsd.ver
new file mode 100644
index 000000000..a439786f1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/libgcc-bsd.ver
@@ -0,0 +1,113 @@
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# 128 bit long double support was introduced with GCC 4.6.0 for FreeBSD.
+# These lines make the symbols to get a @@GCC_4.6.0.
+
+%exclude {
+ __addtf3
+ __copysigntf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+ __fabstf2
+ __fixtfdi
+ __fixtfsi
+ __fixtfti
+ __fixunstfdi
+ __fixunstfsi
+ __fixunstfti
+ __floatditf
+ __floatsitf
+ __floattitf
+ __floatunditf
+ __floatunsitf
+ __floatuntitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+GCC_4.6.0 {
+ __addtf3
+%ifndef __x86_64__
+ __copysigntf3
+%endif
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+%ifndef __x86_64__
+ __fabstf2
+%endif
+ __fixtfdi
+ __fixtfsi
+%ifdef __x86_64__
+ __fixtfti
+%endif
+ __fixunstfdi
+ __fixunstfsi
+%ifdef __x86_64__
+ __fixunstfti
+%endif
+ __floatditf
+ __floatsitf
+%ifdef __x86_64__
+ __floattitf
+%endif
+ __floatunditf
+ __floatunsitf
+%ifdef __x86_64__
+ __floatuntitf
+%endif
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+GCC_4.8.0 {
+ __cpu_model
+ __cpu_indicator_init
+}
diff --git a/gcc-4.9/libgcc/config/i386/libgcc-cygming.ver b/gcc-4.9/libgcc/config/i386/libgcc-cygming.ver
new file mode 100644
index 000000000..b7cd022fe
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/libgcc-cygming.ver
@@ -0,0 +1,22 @@
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_4.8 {
+ _GCC_specific_handler
+ __gcc_personality_seh0
+}
diff --git a/gcc-4.9/libgcc/config/i386/libgcc-darwin.10.4.ver b/gcc-4.9/libgcc/config/i386/libgcc-darwin.10.4.ver
new file mode 100644
index 000000000..e1887d99a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/libgcc-darwin.10.4.ver
@@ -0,0 +1,98 @@
+# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+__Unwind_Backtrace
+__Unwind_DeleteException
+__Unwind_FindEnclosingFunction
+__Unwind_Find_FDE
+__Unwind_ForcedUnwind
+__Unwind_GetCFA
+__Unwind_GetDataRelBase
+__Unwind_GetGR
+__Unwind_GetIP
+__Unwind_GetLanguageSpecificData
+__Unwind_GetRegionStart
+__Unwind_GetTextRelBase
+__Unwind_RaiseException
+__Unwind_Resume
+__Unwind_Resume_or_Rethrow
+__Unwind_SetGR
+__Unwind_SetIP
+___absvdi2
+___absvsi2
+___addvdi3
+___addvsi3
+___ashldi3
+___ashrdi3
+___clear_cache
+___clzdi2
+___clzsi2
+___cmpdi2
+___ctzdi2
+___ctzsi2
+___deregister_frame
+___deregister_frame_info
+___deregister_frame_info_bases
+___divdc3
+___divdi3
+___divsc3
+___divxc3
+___enable_execute_stack
+___ffsdi2
+___fixdfdi
+___fixsfdi
+___fixunsdfdi
+___fixunsdfsi
+___fixunssfdi
+___fixunssfsi
+___fixunsxfdi
+___fixunsxfsi
+___fixxfdi
+___floatdidf
+___floatdisf
+___floatdixf
+___gcc_personality_v0
+___lshrdi3
+___moddi3
+___muldc3
+___muldi3
+___mulsc3
+___mulvdi3
+___mulvsi3
+___mulxc3
+___negdi2
+___negvdi2
+___negvsi2
+___paritydi2
+___paritysi2
+___popcountdi2
+___popcountsi2
+___powidf2
+___powisf2
+___powixf2
+___register_frame
+___register_frame_info
+___register_frame_info_bases
+___register_frame_info_table
+___register_frame_info_table_bases
+___register_frame_table
+___subvdi3
+___subvsi3
+___ucmpdi2
+___udivdi3
+___udivmoddi4
+___umoddi3
diff --git a/gcc-4.9/libgcc/config/i386/libgcc-darwin.10.5.ver b/gcc-4.9/libgcc/config/i386/libgcc-darwin.10.5.ver
new file mode 100644
index 000000000..5c55c4a51
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/libgcc-darwin.10.5.ver
@@ -0,0 +1,102 @@
+# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+__Unwind_Backtrace
+__Unwind_DeleteException
+__Unwind_FindEnclosingFunction
+__Unwind_Find_FDE
+__Unwind_ForcedUnwind
+__Unwind_GetCFA
+__Unwind_GetDataRelBase
+__Unwind_GetGR
+__Unwind_GetIP
+__Unwind_GetIPInfo
+__Unwind_GetLanguageSpecificData
+__Unwind_GetRegionStart
+__Unwind_GetTextRelBase
+__Unwind_RaiseException
+__Unwind_Resume
+__Unwind_Resume_or_Rethrow
+__Unwind_SetGR
+__Unwind_SetIP
+___absvdi2
+___absvsi2
+___addvdi3
+___addvsi3
+___ashldi3
+___ashrdi3
+___clear_cache
+___clzdi2
+___clzsi2
+___cmpdi2
+___ctzdi2
+___ctzsi2
+___deregister_frame
+___deregister_frame_info
+___deregister_frame_info_bases
+___divdc3
+___divdi3
+___divsc3
+___divxc3
+___enable_execute_stack
+___ffsdi2
+___fixdfdi
+___fixsfdi
+___fixunsdfdi
+___fixunsdfsi
+___fixunssfdi
+___fixunssfsi
+___fixunsxfdi
+___fixunsxfsi
+___fixxfdi
+___floatdidf
+___floatdisf
+___floatdixf
+___floatundidf
+___floatundisf
+___floatundixf
+___gcc_personality_v0
+___lshrdi3
+___moddi3
+___muldc3
+___muldi3
+___mulsc3
+___mulvdi3
+___mulvsi3
+___mulxc3
+___negdi2
+___negvdi2
+___negvsi2
+___paritydi2
+___paritysi2
+___popcountdi2
+___popcountsi2
+___powidf2
+___powisf2
+___powixf2
+___register_frame
+___register_frame_info
+___register_frame_info_bases
+___register_frame_info_table
+___register_frame_info_table_bases
+___register_frame_table
+___subvdi3
+___subvsi3
+___ucmpdi2
+___udivdi3
+___udivmoddi4
+___umoddi3
diff --git a/gcc-4.9/libgcc/config/i386/libgcc-glibc.ver b/gcc-4.9/libgcc/config/i386/libgcc-glibc.ver
new file mode 100644
index 000000000..fd0025cde
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/libgcc-glibc.ver
@@ -0,0 +1,196 @@
+# Copyright (C) 2008-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# In order to work around the very problems that force us to now generally
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+# By now choosing the same version tags for these specific routines, we
+# maintain enough binary compatibility to allow future versions of glibc
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+%ifndef __x86_64__
+%exclude {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%inherit GCC_3.0 GLIBC_2.0
+GLIBC_2.0 {
+ # Sampling of DImode arithmetic used by (at least) i386 and m68k.
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+
+ # Exception handling support functions used by most everyone.
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+%endif
+
+# 128 bit long double support was introduced with GCC 4.3.0 to 64bit
+# and with GCC 4.4.0 to 32bit. These lines make the symbols to get
+# a @@GCC_4.3.0 or @@GCC_4.4.0 attached.
+
+%exclude {
+ __addtf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+ __fixtfdi
+ __fixtfsi
+ __fixtfti
+ __fixunstfdi
+ __fixunstfsi
+ __fixunstfti
+ __floatditf
+ __floatsitf
+ __floattitf
+ __floatunditf
+ __floatunsitf
+ __floatuntitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+%ifdef __x86_64__
+# Those symbols had improper versions when they were added to gcc 4.3.0.
+# We corrected the default version to GCC_4.3.0. But we keep the old
+# version for backward binary compatibility.
+GCC_3.0 {
+ __gttf2
+ __lttf2
+ __netf2
+}
+
+GCC_4.0.0 {
+ __divtc3
+ __multc3
+ __powitf2
+}
+
+GCC_4.3.0 {
+ __addtf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+ __fixtfdi
+ __fixtfsi
+ __fixtfti
+ __fixunstfdi
+ __fixunstfsi
+ __fixunstfti
+ __floatditf
+ __floatsitf
+ __floattitf
+ __floatunditf
+ __floatunsitf
+ __floatuntitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+GCC_4.8.0 {
+ __cpu_model
+ __cpu_indicator_init
+}
+%else
+GCC_4.4.0 {
+ __addtf3
+ __copysigntf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __fabstf2
+ __fixtfdi
+ __fixtfsi
+ __fixunstfdi
+ __fixunstfsi
+ __floatditf
+ __floatsitf
+ __floatunditf
+ __floatunsitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+GCC_4.5.0 {
+ __extendxftf2
+}
+
+GCC_4.8.0 {
+ __cpu_model
+ __cpu_indicator_init
+}
+%endif
diff --git a/gcc-4.9/libgcc/config/i386/libgcc-sol2.ver b/gcc-4.9/libgcc/config/i386/libgcc-sol2.ver
new file mode 100644
index 000000000..fd94ff0c7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/libgcc-sol2.ver
@@ -0,0 +1,113 @@
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# 128 bit long double support was introduced with GCC 4.5.0 for Solaris 2.
+# These lines make the symbols to get a @@GCC_4.5.0.
+
+%exclude {
+ __addtf3
+ __copysigntf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+ __fabstf2
+ __fixtfdi
+ __fixtfsi
+ __fixtfti
+ __fixunstfdi
+ __fixunstfsi
+ __fixunstfti
+ __floatditf
+ __floatsitf
+ __floattitf
+ __floatunditf
+ __floatunsitf
+ __floatuntitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+GCC_4.5.0 {
+ __addtf3
+%ifndef __x86_64__
+ __copysigntf3
+%endif
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+%ifndef __x86_64__
+ __fabstf2
+%endif
+ __fixtfdi
+ __fixtfsi
+%ifdef __x86_64__
+ __fixtfti
+%endif
+ __fixunstfdi
+ __fixunstfsi
+%ifdef __x86_64__
+ __fixunstfti
+%endif
+ __floatditf
+ __floatsitf
+%ifdef __x86_64__
+ __floattitf
+%endif
+ __floatunditf
+ __floatunsitf
+%ifdef __x86_64__
+ __floatuntitf
+%endif
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+GCC_4.8.0 {
+ __cpu_model
+ __cpu_indicator_init
+}
diff --git a/gcc-4.9/libgcc/config/i386/linux-unwind.h b/gcc-4.9/libgcc/config/i386/linux-unwind.h
new file mode 100644
index 000000000..7986928cf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/linux-unwind.h
@@ -0,0 +1,198 @@
+/* DWARF2 EH unwinding support for AMD x86-64 and x86.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs.
+ Don't use this at all if inhibit_libc is used. */
+
+#ifndef inhibit_libc
+
+/* There's no sys/ucontext.h for glibc 2.0, so no
+ signal-turned-exceptions for them. There's also no configure-run for
+ the target, so we can't check on (e.g.) HAVE_SYS_UCONTEXT_H. Using the
+ target libc version macro should be enough. */
+#if defined __GLIBC__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ == 0)
+
+#include <signal.h>
+#include <sys/ucontext.h>
+
+#ifdef __x86_64__
+
+#define MD_FALLBACK_FRAME_STATE_FOR x86_64_fallback_frame_state
+
+static _Unwind_Reason_Code
+x86_64_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+
+ /* movq $__NR_rt_sigreturn, %rax ; syscall. */
+#ifdef __LP64__
+#define RT_SIGRETURN_SYSCALL 0x050f0000000fc0c7ULL
+#else
+#define RT_SIGRETURN_SYSCALL 0x050f40000201c0c7ULL
+#endif
+ if (*(unsigned char *)(pc+0) == 0x48
+ && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
+ {
+ struct ucontext *uc_ = context->cfa;
+ /* The void * cast is necessary to avoid an aliasing warning.
+ The aliasing warning is correct, but should not be a problem
+ because it does not alias anything. */
+ sc = (struct sigcontext *) (void *) &uc_->uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = sc->rsp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ /* Register 7 is rsp */
+ fs->regs.cfa_reg = 7;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ /* The SVR4 register numbering macros aren't usable in libgcc. */
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)&sc->rax - new_cfa;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long)&sc->rdx - new_cfa;
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long)&sc->rcx - new_cfa;
+ fs->regs.reg[3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[3].loc.offset = (long)&sc->rbx - new_cfa;
+ fs->regs.reg[4].how = REG_SAVED_OFFSET;
+ fs->regs.reg[4].loc.offset = (long)&sc->rsi - new_cfa;
+ fs->regs.reg[5].how = REG_SAVED_OFFSET;
+ fs->regs.reg[5].loc.offset = (long)&sc->rdi - new_cfa;
+ fs->regs.reg[6].how = REG_SAVED_OFFSET;
+ fs->regs.reg[6].loc.offset = (long)&sc->rbp - new_cfa;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long)&sc->r8 - new_cfa;
+ fs->regs.reg[9].how = REG_SAVED_OFFSET;
+ fs->regs.reg[9].loc.offset = (long)&sc->r9 - new_cfa;
+ fs->regs.reg[10].how = REG_SAVED_OFFSET;
+ fs->regs.reg[10].loc.offset = (long)&sc->r10 - new_cfa;
+ fs->regs.reg[11].how = REG_SAVED_OFFSET;
+ fs->regs.reg[11].loc.offset = (long)&sc->r11 - new_cfa;
+ fs->regs.reg[12].how = REG_SAVED_OFFSET;
+ fs->regs.reg[12].loc.offset = (long)&sc->r12 - new_cfa;
+ fs->regs.reg[13].how = REG_SAVED_OFFSET;
+ fs->regs.reg[13].loc.offset = (long)&sc->r13 - new_cfa;
+ fs->regs.reg[14].how = REG_SAVED_OFFSET;
+ fs->regs.reg[14].loc.offset = (long)&sc->r14 - new_cfa;
+ fs->regs.reg[15].how = REG_SAVED_OFFSET;
+ fs->regs.reg[15].loc.offset = (long)&sc->r15 - new_cfa;
+ fs->regs.reg[16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[16].loc.offset = (long)&sc->rip - new_cfa;
+ fs->retaddr_column = 16;
+ fs->signal_frame = 1;
+ return _URC_NO_REASON;
+}
+
+#else /* ifdef __x86_64__ */
+
+#define MD_FALLBACK_FRAME_STATE_FOR x86_fallback_frame_state
+
+static _Unwind_Reason_Code
+x86_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+
+ /* popl %eax ; movl $__NR_sigreturn,%eax ; int $0x80 */
+ if (*(unsigned short *)(pc+0) == 0xb858
+ && *(unsigned int *)(pc+2) == 119
+ && *(unsigned short *)(pc+6) == 0x80cd)
+ sc = context->cfa + 4;
+ /* movl $__NR_rt_sigreturn,%eax ; int $0x80 */
+ else if (*(unsigned char *)(pc+0) == 0xb8
+ && *(unsigned int *)(pc+1) == 173
+ && *(unsigned short *)(pc+5) == 0x80cd)
+ {
+ struct rt_sigframe {
+ int sig;
+ siginfo_t *pinfo;
+ void *puc;
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_ = context->cfa;
+ /* The void * cast is necessary to avoid an aliasing warning.
+ The aliasing warning is correct, but should not be a problem
+ because it does not alias anything. */
+ sc = (struct sigcontext *) (void *) &rt_->uc.uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = sc->esp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 4;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ /* The SVR4 register numbering macros aren't usable in libgcc. */
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)&sc->eax - new_cfa;
+ fs->regs.reg[3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[3].loc.offset = (long)&sc->ebx - new_cfa;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long)&sc->ecx - new_cfa;
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long)&sc->edx - new_cfa;
+ fs->regs.reg[6].how = REG_SAVED_OFFSET;
+ fs->regs.reg[6].loc.offset = (long)&sc->esi - new_cfa;
+ fs->regs.reg[7].how = REG_SAVED_OFFSET;
+ fs->regs.reg[7].loc.offset = (long)&sc->edi - new_cfa;
+ fs->regs.reg[5].how = REG_SAVED_OFFSET;
+ fs->regs.reg[5].loc.offset = (long)&sc->ebp - new_cfa;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long)&sc->eip - new_cfa;
+ fs->retaddr_column = 8;
+ fs->signal_frame = 1;
+ return _URC_NO_REASON;
+}
+
+#define MD_FROB_UPDATE_CONTEXT x86_frob_update_context
+
+/* Fix up for kernels that have vDSO, but don't have S flag in it. */
+
+static void
+x86_frob_update_context (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs ATTRIBUTE_UNUSED)
+{
+ unsigned char *pc = context->ra;
+
+ /* movl $__NR_rt_sigreturn,%eax ; {int $0x80 | syscall} */
+ if (*(unsigned char *)(pc+0) == 0xb8
+ && *(unsigned int *)(pc+1) == 173
+ && (*(unsigned short *)(pc+5) == 0x80cd
+ || *(unsigned short *)(pc+5) == 0x050f))
+ _Unwind_SetSignalFrame (context, 1);
+}
+
+#endif /* ifdef __x86_64__ */
+#endif /* not glibc 2.0 */
+#endif /* ifdef inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/i386/morestack.S b/gcc-4.9/libgcc/config/i386/morestack.S
new file mode 100644
index 000000000..7bef99f13
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/morestack.S
@@ -0,0 +1,860 @@
+# x86/x86_64 support for -fsplit-stack.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+# Contributed by Ian Lance Taylor <iant@google.com>.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+# Support for allocating more stack space when using -fsplit-stack.
+# When a function discovers that it needs more stack space, it will
+# call __morestack with the size of the stack frame and the size of
+# the parameters to copy from the old stack frame to the new one.
+# The __morestack function preserves the parameter registers and
+# calls __generic_morestack to actually allocate the stack space.
+
+# When this is called stack space is very low, but we ensure that
+# there is enough space to push the parameter registers and to call
+# __generic_morestack.
+
+# When calling __generic_morestack, FRAME_SIZE points to the size of
+# the desired frame when the function is called, and the function
+# sets it to the size of the allocated stack. OLD_STACK points to
+# the parameters on the old stack and PARAM_SIZE is the number of
+# bytes of parameters to copy to the new stack. These are the
+# parameters of the function that called __morestack. The
+# __generic_morestack function returns the new stack pointer,
+# pointing to the address of the first copied parameter. The return
+# value minus the returned *FRAME_SIZE will be the first address on
+# the stack which we should not use.
+
+# void *__generic_morestack (size_t *frame_size, void *old_stack,
+# size_t param_size);
+
+# The __morestack routine has to arrange for the caller to return to a
+# stub on the new stack. The stub is responsible for restoring the
+# old stack pointer and returning to the caller's caller. This calls
+# __generic_releasestack to retrieve the old stack pointer and release
+# the newly allocated stack.
+
+# void *__generic_releasestack (size_t *available);
+
+# We do a little dance so that the processor's call/return return
+# address prediction works out. The compiler arranges for the caller
+# to look like this:
+# call __generic_morestack
+# ret
+# L:
+# // carry on with function
+# After we allocate more stack, we call L, which is in our caller.
+# When that returns (to the predicted instruction), we release the
+# stack segment and reset the stack pointer. We then return to the
+# predicted instruction, namely the ret instruction immediately after
+# the call to __generic_morestack. That then returns to the caller of
+# the original caller.
+
+
+# The amount of extra space we ask for. In general this has to be
+# enough for the dynamic loader to find a symbol and for a signal
+# handler to run.
+
+#ifndef __x86_64__
+#define BACKOFF (1024)
+#else
+#define BACKOFF (1536)
+#endif
+
+
+# The amount of space we ask for when calling non-split-stack code.
+#define NON_SPLIT_STACK 0x100000
+
+# This entry point is for split-stack code which calls non-split-stack
+# code. When the linker sees this case, it converts the call to
+# __morestack to call __morestack_non_split instead. We just bump the
+# requested stack space by 16K.
+
+ .global __morestack_non_split
+ .hidden __morestack_non_split
+
+#ifdef __ELF__
+ .type __morestack_non_split,@function
+#endif
+
+__morestack_non_split:
+ .cfi_startproc
+
+#ifndef __x86_64__
+
+ # See below for an extended explanation of this.
+ .cfi_def_cfa %esp,16
+
+ pushl %eax # Save %eax in case it is a parameter.
+
+ .cfi_adjust_cfa_offset 4 # Account for pushed register.
+
+ movl %esp,%eax # Current stack,
+ subl 8(%esp),%eax # less required stack frame size,
+ subl $NON_SPLIT_STACK,%eax # less space for non-split code.
+ cmpl %gs:0x30,%eax # See if we have enough space.
+ jb 2f # Get more space if we need it.
+
+ # Here the stack is
+ # %esp + 20: stack pointer after two returns
+ # %esp + 16: return address of morestack caller's caller
+ # %esp + 12: size of parameters
+ # %esp + 8: new stack frame size
+ # %esp + 4: return address of this function
+ # %esp: saved %eax
+ #
+ # Since we aren't doing a full split stack, we don't need to
+ # do anything when our caller returns. So we return to our
+ # caller rather than calling it, and let it return as usual.
+ # To make that work we adjust the return address.
+
+ # This breaks call/return address prediction for the call to
+ # this function. I can't figure out a way to make it work
+ # short of copying the parameters down the stack, which will
+ # probably take more clock cycles than we will lose breaking
+ # call/return address prediction. We will only break
+ # prediction for this call, not for our caller.
+
+ movl 4(%esp),%eax # Increment the return address
+ cmpb $0xc3,(%eax) # to skip the ret instruction;
+ je 1f # see above.
+ addl $2,%eax
+1: inc %eax
+
+ # If the instruction that we return to is
+ # leal 20(%ebp),{%eax,%ecx,%edx}
+ # then we have been called by a varargs function that expects
+ # %ebp to hold a real value. That can only work if we do the
+ # full stack split routine. FIXME: This is fragile.
+ cmpb $0x8d,(%eax)
+ jne 3f
+ cmpb $0x14,2(%eax)
+ jne 3f
+ cmpb $0x45,1(%eax)
+ je 2f
+ cmpb $0x4d,1(%eax)
+ je 2f
+ cmpb $0x55,1(%eax)
+ je 2f
+
+3:
+ movl %eax,4(%esp) # Update return address.
+
+ popl %eax # Restore %eax and stack.
+
+ .cfi_adjust_cfa_offset -4 # Account for popped register.
+
+ ret $8 # Return to caller, popping args.
+
+2:
+ .cfi_adjust_cfa_offset 4 # Back to where we were.
+
+ popl %eax # Restore %eax and stack.
+
+ .cfi_adjust_cfa_offset -4 # Account for popped register.
+
+ # Increment space we request.
+ addl $NON_SPLIT_STACK+0x1000+BACKOFF,4(%esp)
+
+ # Fall through into morestack.
+
+#else
+
+ # See below for an extended explanation of this.
+ .cfi_def_cfa %rsp,16
+
+ pushq %rax # Save %rax in case caller is using
+ # it to preserve original %r10.
+ .cfi_adjust_cfa_offset 8 # Adjust for pushed register.
+
+ movq %rsp,%rax # Current stack,
+ subq %r10,%rax # less required stack frame size,
+ subq $NON_SPLIT_STACK,%rax # less space for non-split code.
+
+#ifdef __LP64__
+ cmpq %fs:0x70,%rax # See if we have enough space.
+#else
+ cmpl %fs:0x40,%eax
+#endif
+
+ jb 2f # Get more space if we need it.
+
+ # If the instruction that we return to is
+ # leaq 24(%rbp), %r11n
+ # then we have been called by a varargs function that expects
+ # %ebp to hold a real value. That can only work if we do the
+ # full stack split routine. FIXME: This is fragile.
+ movq 8(%rsp),%rax
+ incq %rax # Skip ret instruction in caller.
+ cmpl $0x185d8d4c,(%rax)
+ je 2f
+
+ # This breaks call/return prediction, as described above.
+ incq 8(%rsp) # Increment the return address.
+
+ popq %rax # Restore register.
+
+ .cfi_adjust_cfa_offset -8 # Adjust for popped register.
+
+ ret # Return to caller.
+
+2:
+ popq %rax # Restore register.
+
+ .cfi_adjust_cfa_offset -8 # Adjust for popped register.
+
+ # Increment space we request.
+ addq $NON_SPLIT_STACK+0x1000+BACKOFF,%r10
+
+ # Fall through into morestack.
+
+#endif
+
+ .cfi_endproc
+#ifdef __ELF__
+ .size __morestack_non_split, . - __morestack_non_split
+#endif
+
+# __morestack_non_split falls through into __morestack.
+
+
+# The __morestack function.
+
+ .global __morestack
+ .hidden __morestack
+
+#ifdef __ELF__
+ .type __morestack,@function
+#endif
+
+__morestack:
+.LFB1:
+ .cfi_startproc
+
+
+#ifndef __x86_64__
+
+
+# The 32-bit __morestack function.
+
+ # We use a cleanup to restore the stack guard if an exception
+ # is thrown through this code.
+#ifndef __PIC__
+ .cfi_personality 0,__gcc_personality_v0
+ .cfi_lsda 0,.LLSDA1
+#else
+ .cfi_personality 0x9b,DW.ref.__gcc_personality_v0
+ .cfi_lsda 0x1b,.LLSDA1
+#endif
+
+ # We return below with a ret $8. We will return to a single
+ # return instruction, which will return to the caller of our
+ # caller. We let the unwinder skip that single return
+ # instruction, and just return to the real caller.
+
+ # Here CFA points just past the return address on the stack,
+ # e.g., on function entry it is %esp + 4. The stack looks
+ # like this:
+ # CFA + 12: stack pointer after two returns
+ # CFA + 8: return address of morestack caller's caller
+ # CFA + 4: size of parameters
+ # CFA: new stack frame size
+ # CFA - 4: return address of this function
+ # CFA - 8: previous value of %ebp; %ebp points here
+ # Setting the new CFA to be the current CFA + 12 (i.e., %esp +
+ # 16) will make the unwinder pick up the right return address.
+
+ .cfi_def_cfa %esp,16
+
+ pushl %ebp
+ .cfi_adjust_cfa_offset 4
+ .cfi_offset %ebp, -20
+ movl %esp,%ebp
+ .cfi_def_cfa_register %ebp
+
+ # In 32-bit mode the parameters are pushed on the stack. The
+ # argument size is pushed then the new stack frame size is
+ # pushed.
+
+ # In the body of a non-leaf function, the stack pointer will
+ # be aligned to a 16-byte boundary. That is CFA + 12 in the
+ # stack picture above: (CFA + 12) % 16 == 0. At this point we
+ # have %esp == CFA - 8, so %esp % 16 == 12. We need some
+ # space for saving registers and passing parameters, and we
+ # need to wind up with %esp % 16 == 0.
+ subl $44,%esp
+
+ # Because our cleanup code may need to clobber %ebx, we need
+ # to save it here so the unwinder can restore the value used
+ # by the caller. Note that we don't have to restore the
+ # register, since we don't change it, we just have to save it
+ # for the unwinder.
+ movl %ebx,-4(%ebp)
+ .cfi_offset %ebx, -24
+
+ # In 32-bit mode the registers %eax, %edx, and %ecx may be
+ # used for parameters, depending on the regparm and fastcall
+ # attributes.
+
+ movl %eax,-8(%ebp)
+ movl %edx,-12(%ebp)
+ movl %ecx,-16(%ebp)
+
+ call __morestack_block_signals
+
+ movl 12(%ebp),%eax # The size of the parameters.
+ movl %eax,8(%esp)
+ leal 20(%ebp),%eax # Address of caller's parameters.
+ movl %eax,4(%esp)
+ addl $BACKOFF,8(%ebp) # Ask for backoff bytes.
+ leal 8(%ebp),%eax # The address of the new frame size.
+ movl %eax,(%esp)
+
+ call __generic_morestack
+
+ movl %eax,%esp # Switch to the new stack.
+ subl 8(%ebp),%eax # The end of the stack space.
+ addl $BACKOFF,%eax # Back off 512 bytes.
+
+.LEHB0:
+ # FIXME: The offset must match
+ # TARGET_THREAD_SPLIT_STACK_OFFSET in
+ # gcc/config/i386/linux.h.
+ movl %eax,%gs:0x30 # Save the new stack boundary.
+
+ call __morestack_unblock_signals
+
+ movl -12(%ebp),%edx # Restore registers.
+ movl -16(%ebp),%ecx
+
+ movl 4(%ebp),%eax # Increment the return address
+ cmpb $0xc3,(%eax) # to skip the ret instruction;
+ je 1f # see above.
+ addl $2,%eax
+1: inc %eax
+
+ movl %eax,-12(%ebp) # Store return address in an
+ # unused slot.
+
+ movl -8(%ebp),%eax # Restore the last register.
+
+ call *-12(%ebp) # Call our caller!
+
+ # The caller will return here, as predicted.
+
+ # Save the registers which may hold a return value. We
+ # assume that __generic_releasestack does not touch any
+ # floating point or vector registers.
+ pushl %eax
+ pushl %edx
+
+ # Push the arguments to __generic_releasestack now so that the
+ # stack is at a 16-byte boundary for
+ # __morestack_block_signals.
+ pushl $0 # Where the available space is returned.
+ leal 0(%esp),%eax # Push its address.
+ push %eax
+
+ call __morestack_block_signals
+
+ call __generic_releasestack
+
+ subl 4(%esp),%eax # Subtract available space.
+ addl $BACKOFF,%eax # Back off 512 bytes.
+.LEHE0:
+ movl %eax,%gs:0x30 # Save the new stack boundary.
+
+ addl $8,%esp # Remove values from stack.
+
+ # We need to restore the old stack pointer, which is in %rbp,
+ # before we unblock signals. We also need to restore %eax and
+ # %edx after we unblock signals but before we return. Do this
+ # by moving %eax and %edx from the current stack to the old
+ # stack.
+
+ popl %edx # Pop return value from current stack.
+ popl %eax
+
+ movl %ebp,%esp # Restore stack pointer.
+
+ # As before, we now have %esp % 16 == 12.
+
+ pushl %eax # Push return value on old stack.
+ pushl %edx
+ subl $4,%esp # Align stack to 16-byte boundary.
+
+ call __morestack_unblock_signals
+
+ addl $4,%esp
+ popl %edx # Restore return value.
+ popl %eax
+
+ .cfi_remember_state
+
+ # We never changed %ebx, so we don't have to actually restore it.
+ .cfi_restore %ebx
+
+ popl %ebp
+ .cfi_restore %ebp
+ .cfi_def_cfa %esp, 16
+ ret $8 # Return to caller, which will
+ # immediately return. Pop
+ # arguments as we go.
+
+# This is the cleanup code called by the stack unwinder when unwinding
+# through the code between .LEHB0 and .LEHE0 above.
+
+.L1:
+ .cfi_restore_state
+ subl $16,%esp # Maintain 16 byte alignment.
+ movl %eax,4(%esp) # Save exception header.
+ movl %ebp,(%esp) # Stack pointer after resume.
+ call __generic_findstack
+ movl %ebp,%ecx # Get the stack pointer.
+ subl %eax,%ecx # Subtract available space.
+ addl $BACKOFF,%ecx # Back off 512 bytes.
+ movl %ecx,%gs:0x30 # Save new stack boundary.
+ movl 4(%esp),%eax # Function argument.
+ movl %eax,(%esp)
+#ifdef __PIC__
+ call __x86.get_pc_thunk.bx # %ebx may not be set up for us.
+ addl $_GLOBAL_OFFSET_TABLE_, %ebx
+ call _Unwind_Resume@PLT # Resume unwinding.
+#else
+ call _Unwind_Resume
+#endif
+
+#else /* defined(__x86_64__) */
+
+
+# The 64-bit __morestack function.
+
+ # We use a cleanup to restore the stack guard if an exception
+ # is thrown through this code.
+#ifndef __PIC__
+ .cfi_personality 0x3,__gcc_personality_v0
+ .cfi_lsda 0x3,.LLSDA1
+#else
+ .cfi_personality 0x9b,DW.ref.__gcc_personality_v0
+ .cfi_lsda 0x1b,.LLSDA1
+#endif
+
+ # We will return a single return instruction, which will
+ # return to the caller of our caller. Let the unwinder skip
+ # that single return instruction, and just return to the real
+ # caller.
+ .cfi_def_cfa %rsp,16
+
+ # Set up a normal backtrace.
+ pushq %rbp
+ .cfi_adjust_cfa_offset 8
+ .cfi_offset %rbp, -24
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+
+ # In 64-bit mode the new stack frame size is passed in r10
+ # and the argument size is passed in r11.
+
+ addq $BACKOFF,%r10 # Ask for backoff bytes.
+ pushq %r10 # Save new frame size.
+
+ # In 64-bit mode the registers %rdi, %rsi, %rdx, %rcx, %r8,
+ # and %r9 may be used for parameters. We also preserve %rax
+ # which the caller may use to hold %r10.
+
+ pushq %rax
+ pushq %rdi
+ pushq %rsi
+ pushq %rdx
+ pushq %rcx
+ pushq %r8
+ pushq %r9
+
+ pushq %r11
+
+ # We entered morestack with the stack pointer aligned to a
+ # 16-byte boundary (the call to morestack's caller used 8
+ # bytes, and the call to morestack used 8 bytes). We have now
+ # pushed 10 registers, so we are still aligned to a 16-byte
+ # boundary.
+
+ call __morestack_block_signals
+
+ leaq -8(%rbp),%rdi # Address of new frame size.
+ leaq 24(%rbp),%rsi # The caller's parameters.
+ popq %rdx # The size of the parameters.
+
+ subq $8,%rsp # Align stack.
+
+ call __generic_morestack
+
+ movq -8(%rbp),%r10 # Reload modified frame size
+ movq %rax,%rsp # Switch to the new stack.
+ subq %r10,%rax # The end of the stack space.
+ addq $BACKOFF,%rax # Back off 1024 bytes.
+
+.LEHB0:
+ # FIXME: The offset must match
+ # TARGET_THREAD_SPLIT_STACK_OFFSET in
+ # gcc/config/i386/linux64.h.
+ # Macro to save the new stack boundary.
+#ifdef __LP64__
+#define X86_64_SAVE_NEW_STACK_BOUNDARY(reg) movq %r##reg,%fs:0x70
+#else
+#define X86_64_SAVE_NEW_STACK_BOUNDARY(reg) movl %e##reg,%fs:0x40
+#endif
+ X86_64_SAVE_NEW_STACK_BOUNDARY (ax)
+
+ call __morestack_unblock_signals
+
+ movq -24(%rbp),%rdi # Restore registers.
+ movq -32(%rbp),%rsi
+ movq -40(%rbp),%rdx
+ movq -48(%rbp),%rcx
+ movq -56(%rbp),%r8
+ movq -64(%rbp),%r9
+
+ movq 8(%rbp),%r10 # Increment the return address
+ incq %r10 # to skip the ret instruction;
+ # see above.
+
+ movq -16(%rbp),%rax # Restore caller's %rax.
+
+ call *%r10 # Call our caller!
+
+ # The caller will return here, as predicted.
+
+ # Save the registers which may hold a return value. We
+ # assume that __generic_releasestack does not touch any
+ # floating point or vector registers.
+ pushq %rax
+ pushq %rdx
+
+ call __morestack_block_signals
+
+ pushq $0 # For alignment.
+ pushq $0 # Where the available space is returned.
+ leaq 0(%rsp),%rdi # Pass its address.
+
+ call __generic_releasestack
+
+ subq 0(%rsp),%rax # Subtract available space.
+ addq $BACKOFF,%rax # Back off 1024 bytes.
+.LEHE0:
+ X86_64_SAVE_NEW_STACK_BOUNDARY (ax)
+
+ addq $16,%rsp # Remove values from stack.
+
+ # We need to restore the old stack pointer, which is in %rbp,
+ # before we unblock signals. We also need to restore %rax and
+ # %rdx after we unblock signals but before we return. Do this
+ # by moving %rax and %rdx from the current stack to the old
+ # stack.
+
+ popq %rdx # Pop return value from current stack.
+ popq %rax
+
+ movq %rbp,%rsp # Restore stack pointer.
+
+ # Now (%rsp & 16) == 8.
+
+ subq $8,%rsp # For alignment.
+ pushq %rax # Push return value on old stack.
+ pushq %rdx
+
+ call __morestack_unblock_signals
+
+ popq %rdx # Restore return value.
+ popq %rax
+ addq $8,%rsp
+
+ .cfi_remember_state
+ popq %rbp
+ .cfi_restore %rbp
+ .cfi_def_cfa %rsp, 16
+ ret # Return to caller, which will
+ # immediately return.
+
+# This is the cleanup code called by the stack unwinder when unwinding
+# through the code between .LEHB0 and .LEHE0 above.
+
+.L1:
+ .cfi_restore_state
+ subq $16,%rsp # Maintain 16 byte alignment.
+ movq %rax,(%rsp) # Save exception header.
+ movq %rbp,%rdi # Stack pointer after resume.
+ call __generic_findstack
+ movq %rbp,%rcx # Get the stack pointer.
+ subq %rax,%rcx # Subtract available space.
+ addq $BACKOFF,%rcx # Back off 1024 bytes.
+ X86_64_SAVE_NEW_STACK_BOUNDARY (cx)
+ movq (%rsp),%rdi # Restore exception data for call.
+#ifdef __PIC__
+ call _Unwind_Resume@PLT # Resume unwinding.
+#else
+ call _Unwind_Resume # Resume unwinding.
+#endif
+
+#endif /* defined(__x86_64__) */
+
+ .cfi_endproc
+#ifdef __ELF__
+ .size __morestack, . - __morestack
+#endif
+
+#if !defined(__x86_64__) && defined(__PIC__)
+# Output the thunk to get PC into bx, since we use it above.
+ .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
+ .globl __x86.get_pc_thunk.bx
+ .hidden __x86.get_pc_thunk.bx
+#ifdef __ELF__
+ .type __x86.get_pc_thunk.bx, @function
+#endif
+__x86.get_pc_thunk.bx:
+ .cfi_startproc
+ movl (%esp), %ebx
+ ret
+ .cfi_endproc
+#ifdef __ELF__
+ .size __x86.get_pc_thunk.bx, . - __x86.get_pc_thunk.bx
+#endif
+#endif
+
+# The exception table. This tells the personality routine to execute
+# the exception handler.
+
+ .section .gcc_except_table,"a",@progbits
+ .align 4
+.LLSDA1:
+ .byte 0xff # @LPStart format (omit)
+ .byte 0xff # @TType format (omit)
+ .byte 0x1 # call-site format (uleb128)
+ .uleb128 .LLSDACSE1-.LLSDACSB1 # Call-site table length
+.LLSDACSB1:
+ .uleb128 .LEHB0-.LFB1 # region 0 start
+ .uleb128 .LEHE0-.LEHB0 # length
+ .uleb128 .L1-.LFB1 # landing pad
+ .uleb128 0 # action
+.LLSDACSE1:
+
+
+ .global __gcc_personality_v0
+#ifdef __PIC__
+ # Build a position independent reference to the basic
+ # personality function.
+ .hidden DW.ref.__gcc_personality_v0
+ .weak DW.ref.__gcc_personality_v0
+ .section .data.DW.ref.__gcc_personality_v0,"awG",@progbits,DW.ref.__gcc_personality_v0,comdat
+ .type DW.ref.__gcc_personality_v0, @object
+DW.ref.__gcc_personality_v0:
+#ifndef __LP64__
+ .align 4
+ .size DW.ref.__gcc_personality_v0, 4
+ .long __gcc_personality_v0
+#else
+ .align 8
+ .size DW.ref.__gcc_personality_v0, 8
+ .quad __gcc_personality_v0
+#endif
+#endif
+
+#if defined __x86_64__ && defined __LP64__
+
+# This entry point is used for the large model. With this entry point
+# the upper 32 bits of %r10 hold the argument size and the lower 32
+# bits hold the new stack frame size. There doesn't seem to be a way
+# to know in the assembler code that we are assembling for the large
+# model, and there doesn't seem to be a large model multilib anyhow.
+# If one is developed, then the non-PIC code is probably OK since we
+# will probably be close to the morestack code, but the PIC code
+# almost certainly needs to be changed. FIXME.
+
+ .text
+ .global __morestack_large_model
+ .hidden __morestack_large_model
+
+#ifdef __ELF__
+ .type __morestack_large_model,@function
+#endif
+
+__morestack_large_model:
+
+ .cfi_startproc
+
+ movq %r10, %r11
+ andl $0xffffffff, %r10d
+ sarq $32, %r11
+ jmp __morestack
+
+ .cfi_endproc
+#ifdef __ELF__
+ .size __morestack_large_model, . - __morestack_large_model
+#endif
+
+#endif /* __x86_64__ && __LP64__ */
+
+# Initialize the stack test value when the program starts or when a
+# new thread starts. We don't know how large the main stack is, so we
+# guess conservatively. We might be able to use getrlimit here.
+
+ .text
+ .global __stack_split_initialize
+ .hidden __stack_split_initialize
+
+#ifdef __ELF__
+ .type __stack_split_initialize, @function
+#endif
+
+__stack_split_initialize:
+
+#ifndef __x86_64__
+
+ leal -16000(%esp),%eax # We should have at least 16K.
+ movl %eax,%gs:0x30
+ pushl $16000
+ pushl %esp
+#ifdef __PIC__
+ call __generic_morestack_set_initial_sp@PLT
+#else
+ call __generic_morestack_set_initial_sp
+#endif
+ addl $8,%esp
+ ret
+
+#else /* defined(__x86_64__) */
+
+ leaq -16000(%rsp),%rax # We should have at least 16K.
+ X86_64_SAVE_NEW_STACK_BOUNDARY (ax)
+ movq %rsp,%rdi
+ movq $16000,%rsi
+#ifdef __PIC__
+ call __generic_morestack_set_initial_sp@PLT
+#else
+ call __generic_morestack_set_initial_sp
+#endif
+ ret
+
+#endif /* defined(__x86_64__) */
+
+#ifdef __ELF__
+ .size __stack_split_initialize, . - __stack_split_initialize
+#endif
+
+# Routines to get and set the guard, for __splitstack_getcontext,
+# __splitstack_setcontext, and __splitstack_makecontext.
+
+# void *__morestack_get_guard (void) returns the current stack guard.
+ .text
+ .global __morestack_get_guard
+ .hidden __morestack_get_guard
+
+#ifdef __ELF__
+ .type __morestack_get_guard,@function
+#endif
+
+__morestack_get_guard:
+
+#ifndef __x86_64__
+ movl %gs:0x30,%eax
+#else
+#ifdef __LP64__
+ movq %fs:0x70,%rax
+#else
+ movl %fs:0x40,%eax
+#endif
+#endif
+ ret
+
+#ifdef __ELF__
+ .size __morestack_get_guard, . - __morestack_get_guard
+#endif
+
+# void __morestack_set_guard (void *) sets the stack guard.
+ .global __morestack_set_guard
+ .hidden __morestack_set_guard
+
+#ifdef __ELF__
+ .type __morestack_set_guard,@function
+#endif
+
+__morestack_set_guard:
+
+#ifndef __x86_64__
+ movl 4(%esp),%eax
+ movl %eax,%gs:0x30
+#else
+ X86_64_SAVE_NEW_STACK_BOUNDARY (di)
+#endif
+ ret
+
+#ifdef __ELF__
+ .size __morestack_set_guard, . - __morestack_set_guard
+#endif
+
+# void *__morestack_make_guard (void *, size_t) returns the stack
+# guard value for a stack.
+ .global __morestack_make_guard
+ .hidden __morestack_make_guard
+
+#ifdef __ELF__
+ .type __morestack_make_guard,@function
+#endif
+
+__morestack_make_guard:
+
+#ifndef __x86_64__
+ movl 4(%esp),%eax
+ subl 8(%esp),%eax
+ addl $BACKOFF,%eax
+#else
+ subq %rsi,%rdi
+ addq $BACKOFF,%rdi
+ movq %rdi,%rax
+#endif
+ ret
+
+#ifdef __ELF__
+ .size __morestack_make_guard, . - __morestack_make_guard
+#endif
+
+# Make __stack_split_initialize a high priority constructor. FIXME:
+# This is ELF specific.
+
+ .section .ctors.65535,"aw",@progbits
+
+#ifndef __LP64__
+ .align 4
+ .long __stack_split_initialize
+ .long __morestack_load_mmap
+#else
+ .align 8
+ .quad __stack_split_initialize
+ .quad __morestack_load_mmap
+#endif
+
+#ifdef __ELF__
+ .section .note.GNU-stack,"",@progbits
+ .section .note.GNU-split-stack,"",@progbits
+ .section .note.GNU-no-split-stack,"",@progbits
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/sfp-exceptions.c b/gcc-4.9/libgcc/config/i386/sfp-exceptions.c
new file mode 100644
index 000000000..9364a9700
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/sfp-exceptions.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SOFT_FLOAT
+#include "sfp-machine.h"
+
+struct fenv
+{
+ unsigned short int __control_word;
+ unsigned short int __unused1;
+ unsigned short int __status_word;
+ unsigned short int __unused2;
+ unsigned short int __tags;
+ unsigned short int __unused3;
+ unsigned int __eip;
+ unsigned short int __cs_selector;
+ unsigned int __opcode:11;
+ unsigned int __unused4:5;
+ unsigned int __data_offset;
+ unsigned short int __data_selector;
+ unsigned short int __unused5;
+};
+
+void
+__sfp_handle_exceptions (int _fex)
+{
+ if (_fex & FP_EX_INVALID)
+ {
+ float f = 0.0f;
+#ifdef __SSE_MATH__
+ volatile float r __attribute__ ((unused));
+ asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
+ r = f; /* Needed to trigger exception. */
+#else
+ asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
+ /* No need for fwait, exception is triggered by emitted fstp. */
+#endif
+ }
+ if (_fex & FP_EX_DENORM)
+ {
+ struct fenv temp;
+ asm volatile ("fnstenv\t%0" : "=m" (temp));
+ temp.__status_word |= FP_EX_DENORM;
+ asm volatile ("fldenv\t%0" : : "m" (temp));
+ asm volatile ("fwait");
+ }
+ if (_fex & FP_EX_DIVZERO)
+ {
+ float f = 1.0f, g = 0.0f;
+#ifdef __SSE_MATH__
+ volatile float r __attribute__ ((unused));
+ asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
+ r = f; /* Needed to trigger exception. */
+#else
+ asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
+ /* No need for fwait, exception is triggered by emitted fstp. */
+#endif
+ }
+ if (_fex & FP_EX_OVERFLOW)
+ {
+ struct fenv temp;
+ asm volatile ("fnstenv\t%0" : "=m" (temp));
+ temp.__status_word |= FP_EX_OVERFLOW;
+ asm volatile ("fldenv\t%0" : : "m" (temp));
+ asm volatile ("fwait");
+ }
+ if (_fex & FP_EX_UNDERFLOW)
+ {
+ struct fenv temp;
+ asm volatile ("fnstenv\t%0" : "=m" (temp));
+ temp.__status_word |= FP_EX_UNDERFLOW;
+ asm volatile ("fldenv\t%0" : : "m" (temp));
+ asm volatile ("fwait");
+ }
+ if (_fex & FP_EX_INEXACT)
+ {
+ float f = 1.0f, g = 3.0f;
+#ifdef __SSE_MATH__
+ volatile float r __attribute__ ((unused));
+ asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
+ r = f; /* Needed to trigger exception. */
+#else
+ asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
+ /* No need for fwait, exception is triggered by emitted fstp. */
+#endif
+ }
+};
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/sfp-machine.h b/gcc-4.9/libgcc/config/i386/sfp-machine.h
new file mode 100644
index 000000000..148044a69
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/sfp-machine.h
@@ -0,0 +1,85 @@
+#ifdef __MINGW32__
+ /* Make sure we are using gnu-style bitfield handling. */
+#define _FP_STRUCT_LAYOUT __attribute__ ((gcc_struct))
+#endif
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#ifdef __x86_64__
+#include "config/i386/64/sfp-machine.h"
+#else
+#include "config/i386/32/sfp-machine.h"
+#endif
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+#define _FP_NANSIGN_S 1
+#define _FP_NANSIGN_D 1
+#define _FP_NANSIGN_E 1
+#define _FP_NANSIGN_Q 1
+
+/* Here is something Intel misdesigned: the specs don't define
+ the case where we have two NaNs with same mantissas, but
+ different sign. Different operations pick up different NaNs. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if (_FP_FRAC_GT_##wc(X, Y) \
+ || (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ else \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#ifndef _SOFT_FLOAT
+#define FP_EX_INVALID 0x01
+#define FP_EX_DENORM 0x02
+#define FP_EX_DIVZERO 0x04
+#define FP_EX_OVERFLOW 0x08
+#define FP_EX_UNDERFLOW 0x10
+#define FP_EX_INEXACT 0x20
+#define FP_EX_ALL \
+ (FP_EX_INVALID | FP_EX_DENORM | FP_EX_DIVZERO | FP_EX_OVERFLOW \
+ | FP_EX_UNDERFLOW | FP_EX_INEXACT)
+
+void __sfp_handle_exceptions (int);
+
+#define FP_HANDLE_EXCEPTIONS \
+ do { \
+ if (__builtin_expect (_fex, 0)) \
+ __sfp_handle_exceptions (_fex); \
+ } while (0);
+
+#define FP_TRAPPING_EXCEPTIONS ((_fcw >> FP_EX_SHIFT) & FP_EX_ALL)
+
+#define FP_ROUNDMODE (_fcw & FP_RND_MASK)
+#endif
+
+#define _FP_TININESS_AFTER_ROUNDING 1
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+#if defined __MACH__
+/* Mach-O doesn't support aliasing. If these functions ever return
+ anything but CMPtype we need to revisit this... */
+#define strong_alias(name, aliasname) \
+ CMPtype aliasname (TFtype a, TFtype b) { return name(a, b); }
+#else
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/sol2-c1.S b/gcc-4.9/libgcc/config/i386/sol2-c1.S
new file mode 100644
index 000000000..bea5f78d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/sol2-c1.S
@@ -0,0 +1,173 @@
+/* crt1.s for Solaris 2, x86
+
+ Copyright (C) 1993-2014 Free Software Foundation, Inc.
+ Written By Fred Fish, Nov 1992
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* This file takes control of the process from the kernel, as specified
+ in section 3 of the System V Application Binary Interface, Intel386
+ Processor Supplement. It has been constructed from information obtained
+ from the ABI, information obtained from single stepping existing
+ Solaris executables through their startup code with gdb, and from
+ information obtained by single stepping executables on other i386 SVR4
+ implementations. This file is the first thing linked into any
+ executable. */
+
+#ifndef GCRT1
+ .ident "GNU C crt1.s"
+#define CLEANUP _cleanup
+#else
+/* This is a modified crt1.s by J.W.Hawtin <oolon@ankh.org> 15/8/96,
+ to allow program profiling, by calling monstartup on entry and _mcleanup
+ on exit. */
+ .ident "GNU C gcrt1.s"
+#define CLEANUP _mcleanup
+#endif
+ .weak _cleanup
+ .weak _DYNAMIC
+ .text
+
+/* Start creating the initial frame by pushing a NULL value for the return
+ address of the initial frame, and mark the end of the stack frame chain
+ (the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
+ Initialize the first stack frame pointer in %ebp (the contents of which
+ are unspecified at process initialization). */
+
+ .globl _start
+_start:
+ pushl $0x0
+ pushl $0x0
+ movl %esp,%ebp
+
+/* As specified per page 3-32 of the ABI, %edx contains a function
+ pointer that should be registered with atexit(), for proper
+ shared object termination. Just push it onto the stack for now
+ to preserve it. We want to register _cleanup() first. */
+
+ pushl %edx
+
+/* Check to see if there is an _cleanup() function linked in, and if
+ so, register it with atexit() as the last thing to be run by
+ atexit(). */
+
+ movl $CLEANUP,%eax
+ testl %eax,%eax
+ je .L1
+ pushl $CLEANUP
+ call atexit
+ addl $0x4,%esp
+.L1:
+
+/* Now check to see if we have an _DYNAMIC table, and if so then
+ we need to register the function pointer previously in %edx, but
+ now conveniently saved on the stack as the argument to pass to
+ atexit(). */
+
+ movl $_DYNAMIC,%eax
+ testl %eax,%eax
+ je .L2
+ call atexit
+.L2:
+
+/* Register _fini() with atexit(). We will take care of calling _init()
+ directly. */
+
+ pushl $_fini
+ call atexit
+
+#ifdef GCRT1
+/* Start profiling. */
+
+ pushl %ebp
+ movl %esp,%ebp
+ pushl $_etext
+ pushl $_start
+ call monstartup
+ addl $8,%esp
+ popl %ebp
+#endif
+
+/* Compute the address of the environment vector on the stack and load
+ it into the global variable _environ. Currently argc is at 8 off
+ the frame pointer. Fetch the argument count into %eax, scale by the
+ size of each arg (4 bytes) and compute the address of the environment
+ vector which is 16 bytes (the two zero words we pushed, plus argc,
+ plus the null word terminating the arg vector) further up the stack,
+ off the frame pointer (whew!). */
+
+ movl 8(%ebp),%eax
+ leal 16(%ebp,%eax,4),%edx
+ movl %edx,_environ
+
+/* Push the environment vector pointer, the argument vector pointer,
+ and the argument count on to the stack to set up the arguments
+ for _init(), _fpstart(), and main(). Note that the environment
+ vector pointer and the arg count were previously loaded into
+ %edx and %eax respectively. The only new value we need to compute
+ is the argument vector pointer, which is at a fixed address off
+ the initial frame pointer. */
+
+/* Make sure the stack is properly aligned. */
+ andl $0xfffffff0,%esp
+ subl $4,%esp
+
+ pushl %edx
+ leal 12(%ebp),%edx
+ pushl %edx
+ pushl %eax
+
+/* Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
+ main(argc, argv, environ). */
+
+ call _init
+ call __fpstart
+ call main
+
+/* Pop the argc, argv, and environ arguments off the stack, push the
+ value returned from main(), and call exit(). */
+
+ addl $12,%esp
+ pushl %eax
+ call exit
+
+/* An inline equivalent of _exit, as specified in Figure 3-26 of the ABI. */
+
+ pushl $0x0
+ movl $0x1,%eax
+ lcall $7,$0
+
+/* If all else fails, just try a halt! */
+
+ hlt
+ .type _start,@function
+ .size _start,.-_start
+
+#ifndef GCRT1
+/* A dummy profiling support routine for non-profiling executables,
+ in case we link in some objects that have been compiled for profiling. */
+
+ .weak _mcount
+_mcount:
+ ret
+ .type _mcount,@function
+ .size _mcount,.-_mcount
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/sol2-unwind.h b/gcc-4.9/libgcc/config/i386/sol2-unwind.h
new file mode 100644
index 000000000..e5de56370
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/sol2-unwind.h
@@ -0,0 +1,262 @@
+/* DWARF2 EH unwinding support for AMD x86-64 and x86.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#include <ucontext.h>
+#include <sys/frame.h>
+
+#ifdef __x86_64__
+
+#define MD_FALLBACK_FRAME_STATE_FOR x86_64_fallback_frame_state
+
+static _Unwind_Reason_Code
+x86_64_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ mcontext_t *mctx;
+ long new_cfa;
+
+ if (/* Solaris 10+
+ ------------
+ <__sighndlr+0>: push %rbp
+ <__sighndlr+1>: mov %rsp,%rbp
+ <__sighndlr+4>: callq *%rcx
+ <__sighndlr+6>: leaveq <--- PC
+ <__sighndlr+7>: retq */
+ *(unsigned long *)(pc - 6) == 0xc3c9d1ffe5894855)
+
+ /* We need to move up three frames:
+
+ <signal handler> <-- context->cfa
+ __sighndlr
+ call_user_handler
+ sigacthandler
+ <kernel>
+
+ context->cfa points into the frame after the saved frame pointer and
+ saved pc (struct frame).
+
+ The ucontext_t structure is in the kernel frame after the signal
+ number and a siginfo_t *. Since the frame sizes vary even within
+ Solaris 10 updates, we need to walk the stack to get there. */
+ {
+ struct frame *fp = (struct frame *) context->cfa - 1;
+ struct handler_args {
+ int signo;
+ siginfo_t *sip;
+ ucontext_t ucontext;
+ } *handler_args;
+ ucontext_t *ucp;
+
+ /* Next frame: __sighndlr frame pointer. */
+ fp = (struct frame *) fp->fr_savfp;
+ /* call_user_handler frame pointer. */
+ fp = (struct frame *) fp->fr_savfp;
+ /* sigacthandler frame pointer. */
+ fp = (struct frame *) fp->fr_savfp;
+
+ /* The argument area precedes the struct frame. */
+ handler_args = (struct handler_args *) (fp + 1);
+ ucp = &handler_args->ucontext;
+ mctx = &ucp->uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = mctx->gregs[REG_RSP];
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 7;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ /* The SVR4 register numbering macros aren't usable in libgcc. */
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)&mctx->gregs[REG_RAX] - new_cfa;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long)&mctx->gregs[REG_RDX] - new_cfa;
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long)&mctx->gregs[REG_RCX] - new_cfa;
+ fs->regs.reg[3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[3].loc.offset = (long)&mctx->gregs[REG_RBX] - new_cfa;
+ fs->regs.reg[4].how = REG_SAVED_OFFSET;
+ fs->regs.reg[4].loc.offset = (long)&mctx->gregs[REG_RSI] - new_cfa;
+ fs->regs.reg[5].how = REG_SAVED_OFFSET;
+ fs->regs.reg[5].loc.offset = (long)&mctx->gregs[REG_RDI] - new_cfa;
+ fs->regs.reg[6].how = REG_SAVED_OFFSET;
+ fs->regs.reg[6].loc.offset = (long)&mctx->gregs[REG_RBP] - new_cfa;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long)&mctx->gregs[REG_R8] - new_cfa;
+ fs->regs.reg[9].how = REG_SAVED_OFFSET;
+ fs->regs.reg[9].loc.offset = (long)&mctx->gregs[REG_R9] - new_cfa;
+ fs->regs.reg[10].how = REG_SAVED_OFFSET;
+ fs->regs.reg[10].loc.offset = (long)&mctx->gregs[REG_R10] - new_cfa;
+ fs->regs.reg[11].how = REG_SAVED_OFFSET;
+ fs->regs.reg[11].loc.offset = (long)&mctx->gregs[REG_R11] - new_cfa;
+ fs->regs.reg[12].how = REG_SAVED_OFFSET;
+ fs->regs.reg[12].loc.offset = (long)&mctx->gregs[REG_R12] - new_cfa;
+ fs->regs.reg[13].how = REG_SAVED_OFFSET;
+ fs->regs.reg[13].loc.offset = (long)&mctx->gregs[REG_R13] - new_cfa;
+ fs->regs.reg[14].how = REG_SAVED_OFFSET;
+ fs->regs.reg[14].loc.offset = (long)&mctx->gregs[REG_R14] - new_cfa;
+ fs->regs.reg[15].how = REG_SAVED_OFFSET;
+ fs->regs.reg[15].loc.offset = (long)&mctx->gregs[REG_R15] - new_cfa;
+ fs->regs.reg[16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[16].loc.offset = (long)&mctx->gregs[REG_RIP] - new_cfa;
+ fs->retaddr_column = 16;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+#else
+
+#define MD_FALLBACK_FRAME_STATE_FOR x86_fallback_frame_state
+
+static _Unwind_Reason_Code
+x86_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ mcontext_t *mctx;
+ long new_cfa;
+
+ if (/* Solaris 9 - single-threaded
+ ----------------------------
+ <sigacthandler+16>: mov 0x244(%ebx),%ecx
+ <sigacthandler+22>: mov 0x8(%ebp),%eax
+ <sigacthandler+25>: mov (%ecx,%eax,4),%ecx
+ <sigacthandler+28>: pushl 0x10(%ebp)
+ <sigacthandler+31>: pushl 0xc(%ebp)
+ <sigacthandler+34>: push %eax
+ <sigacthandler+35>: call *%ecx
+ <sigacthandler+37>: add $0xc,%esp <--- PC
+ <sigacthandler+40>: pushl 0x10(%ebp) */
+ (*(unsigned long *)(pc - 21) == 0x2448b8b
+ && *(unsigned long *)(pc - 17) == 0x458b0000
+ && *(unsigned long *)(pc - 13) == 0x810c8b08
+ && *(unsigned long *)(pc - 9) == 0xff1075ff
+ && *(unsigned long *)(pc - 5) == 0xff500c75
+ && *(unsigned long *)(pc - 1) == 0xcc483d1)
+
+ || /* Solaris 9 - multi-threaded, Solaris 10
+ ---------------------------------------
+ <__sighndlr+0>: push %ebp
+ <__sighndlr+1>: mov %esp,%ebp
+ <__sighndlr+3>: pushl 0x10(%ebp)
+ <__sighndlr+6>: pushl 0xc(%ebp)
+ <__sighndlr+9>: pushl 0x8(%ebp)
+ <__sighndlr+12>: call *0x14(%ebp)
+ <__sighndlr+15>: add $0xc,%esp <--- PC
+ <__sighndlr+18>: leave
+ <__sighndlr+19>: ret */
+ (*(unsigned long *)(pc - 15) == 0xffec8b55
+ && *(unsigned long *)(pc - 11) == 0x75ff1075
+ && *(unsigned long *)(pc - 7) == 0x0875ff0c
+ && *(unsigned long *)(pc - 3) == 0x831455ff
+ && *(unsigned long *)(pc + 1) == 0xc3c90cc4)
+
+ || /* Solaris 11 before snv_125
+ --------------------------
+ <__sighndlr+0> push %ebp
+ <__sighndlr+1> mov %esp,%ebp
+ <__sighndlr+4> pushl 0x10(%ebp)
+ <__sighndlr+6> pushl 0xc(%ebp)
+ <__sighndlr+9> pushl 0x8(%ebp)
+ <__sighndlr+12> call *0x14(%ebp)
+ <__sighndlr+15> add $0xc,%esp
+ <__sighndlr+18> leave <--- PC
+ <__sighndlr+19> ret */
+ (*(unsigned long *)(pc - 18) == 0xffec8b55
+ && *(unsigned long *)(pc - 14) == 0x7fff107f
+ && *(unsigned long *)(pc - 10) == 0x0875ff0c
+ && *(unsigned long *)(pc - 6) == 0x83145fff
+ && *(unsigned long *)(pc - 1) == 0xc3c90cc4)
+
+ || /* Solaris 11 since snv_125
+ -------------------------
+ <__sighndlr+0> push %ebp
+ <__sighndlr+1> mov %esp,%ebp
+ <__sighndlr+3> and $0xfffffff0,%esp
+ <__sighndlr+6> sub $0x4,%esp
+ <__sighndlr+9> pushl 0x10(%ebp)
+ <__sighndlr+12> pushl 0xc(%ebp)
+ <__sighndlr+15> pushl 0x8(%ebp)
+ <__sighndlr+18> call *0x14(%ebp)
+ <__sighndlr+21> leave <--- PC
+ <__sighndlr+22> ret */
+ (*(unsigned long *)(pc - 21) == 0x83ec8b55
+ && *(unsigned long *)(pc - 17) == 0xec83f0e4
+ && *(unsigned long *)(pc - 13) == 0x1075ff04
+ && *(unsigned long *)(pc - 9) == 0xff0c75ff
+ && *(unsigned long *)(pc - 5) == 0x55ff0875
+ && (*(unsigned long *)(pc - 1) & 0x00ffffff) == 0x00c3c914))
+ {
+ struct handler_args {
+ int signo;
+ siginfo_t *sip;
+ ucontext_t *ucontext;
+ } *handler_args = context->cfa;
+ mctx = &handler_args->ucontext->uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = mctx->gregs[UESP];
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 4;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ /* The SVR4 register numbering macros aren't usable in libgcc. */
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)&mctx->gregs[EAX] - new_cfa;
+ fs->regs.reg[3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[3].loc.offset = (long)&mctx->gregs[EBX] - new_cfa;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long)&mctx->gregs[ECX] - new_cfa;
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long)&mctx->gregs[EDX] - new_cfa;
+ fs->regs.reg[6].how = REG_SAVED_OFFSET;
+ fs->regs.reg[6].loc.offset = (long)&mctx->gregs[ESI] - new_cfa;
+ fs->regs.reg[7].how = REG_SAVED_OFFSET;
+ fs->regs.reg[7].loc.offset = (long)&mctx->gregs[EDI] - new_cfa;
+ fs->regs.reg[5].how = REG_SAVED_OFFSET;
+ fs->regs.reg[5].loc.offset = (long)&mctx->gregs[EBP] - new_cfa;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long)&mctx->gregs[EIP] - new_cfa;
+ fs->retaddr_column = 8;
+
+ /* SIGFPE for IEEE-754 exceptions is delivered after the faulting insn
+ rather than before it, so don't set fs->signal_frame in that case.
+ We test whether the ES field of the Status Register is zero. */
+ if ((mctx->fpregs.fp_reg_set.fpchip_state.status & 0x80) == 0)
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/t-chkstk b/gcc-4.9/libgcc/config/i386/t-chkstk
new file mode 100644
index 000000000..822981faa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-chkstk
@@ -0,0 +1,2 @@
+LIB1ASMSRC = i386/cygwin.S
+LIB1ASMFUNCS = _chkstk _chkstk_ms
diff --git a/gcc-4.9/libgcc/config/i386/t-cpuinfo b/gcc-4.9/libgcc/config/i386/t-cpuinfo
new file mode 100644
index 000000000..31c8db991
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-cpuinfo
@@ -0,0 +1 @@
+LIB2ADD += $(srcdir)/config/i386/cpuinfo.c
diff --git a/gcc-4.9/libgcc/config/i386/t-crtfm b/gcc-4.9/libgcc/config/i386/t-crtfm
new file mode 100644
index 000000000..b9da06bfd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-crtfm
@@ -0,0 +1,4 @@
+# This is an endfile, Use -minline-all-stringops to ensure
+# that __builtin_memset doesn't refer to the lib function memset().
+crtfastmath.o: $(srcdir)/config/i386/crtfastmath.c
+ $(gcc_compile) -mfxsr -msse -c $<
diff --git a/gcc-4.9/libgcc/config/i386/t-crtpc b/gcc-4.9/libgcc/config/i386/t-crtpc
new file mode 100644
index 000000000..b605f6f79
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-crtpc
@@ -0,0 +1,8 @@
+crtprec32.o: $(srcdir)/config/i386/crtprec.c
+ $(gcc_compile) -D__PREC=32 -c $<
+
+crtprec64.o: $(srcdir)/config/i386/crtprec.c
+ $(gcc_compile) -D__PREC=64 -c $<
+
+crtprec80.o: $(srcdir)/config/i386/crtprec.c
+ $(gcc_compile) -D__PREC=80 -c $<
diff --git a/gcc-4.9/libgcc/config/i386/t-crtstuff b/gcc-4.9/libgcc/config/i386/t-crtstuff
new file mode 100644
index 000000000..c14dd9411
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-crtstuff
@@ -0,0 +1,7 @@
+# The pushl in CTOR initialization interferes with frame pointer elimination.
+# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+# because then __FRAME_END__ might not be the last thing in .eh_frame
+# section. -fno-asynchronous-unwind-tables is off by default for i386
+# and is on by default for x86-64. We turn it off for both i386 and
+# x86-64.
+CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables
diff --git a/gcc-4.9/libgcc/config/i386/t-cygming b/gcc-4.9/libgcc/config/i386/t-cygming
new file mode 100644
index 000000000..d76004c48
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-cygming
@@ -0,0 +1,14 @@
+# If we are building next to winsup, this will let us find the real
+# limits.h when building libgcc2. Otherwise, winsup must be installed
+# first.
+LIBGCC2_INCLUDES = -I$(srcdir)/../winsup/w32api/include
+
+CUSTOM_CRTSTUFF = yes
+
+crtbegin.o: $(srcdir)/config/i386/cygming-crtbegin.c
+ $(crt_compile) -fno-omit-frame-pointer -c $<
+
+# We intentionally use a implementation-reserved init priority of 0,
+# so allow the warning.
+crtend.o: $(srcdir)/config/i386/cygming-crtend.c
+ $(crt_compile) -fno-omit-frame-pointer -Wno-error -c $<
diff --git a/gcc-4.9/libgcc/config/i386/t-cygwin b/gcc-4.9/libgcc/config/i386/t-cygwin
new file mode 100644
index 000000000..f85ec2422
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-cygwin
@@ -0,0 +1,19 @@
+# If we are building next to winsup, this will let us find the real
+# limits.h when building libgcc2. Otherwise, winsup must be installed
+# first.
+LIBGCC2_INCLUDES += -I$(srcdir)/../winsup/include \
+ -I$(srcdir)/../winsup/cygwin/include
+
+# Cygwin-specific parts of LIB_SPEC
+SHLIB_LC = -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32
+
+# We have already included one of the t-{dw2,sjlj}-eh fragments for EH_MODEL
+SHLIB_EH_EXTENSION = $(subst -dw2,,-$(EH_MODEL))
+
+# Cygwin uses different conventions than MinGW; override generic SHLIB_ def'ns here.
+SHLIB_IMPLIB = @shlib_base_name@$(SHLIB_EXT).a
+SHLIB_SONAME = cyggcc_s$(SHLIB_EH_EXTENSION)-$(SHLIB_SOVERSION)$(SHLIB_EXT)
+# This must match the definitions of SHLIB_SONAME/SHLIB_SOVERSION and LIBGCC_SONAME.
+# We'd like to use SHLIB_SONAME here too, and we can, since
+# we don't rely on shlib_base_name substitution for it.
+SHLIB_MKMAP_OPTS = -v pe_dll=$(SHLIB_SONAME)
diff --git a/gcc-4.9/libgcc/config/i386/t-darwin b/gcc-4.9/libgcc/config/i386/t-darwin
new file mode 100644
index 000000000..5f2c69725
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-darwin
@@ -0,0 +1,3 @@
+LIB2_SIDITI_CONV_FUNCS = yes
+LIB2ADD = $(srcdir)/config/darwin-64.c
+LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi _floatditf _floatunditf
diff --git a/gcc-4.9/libgcc/config/i386/t-dlldir b/gcc-4.9/libgcc/config/i386/t-dlldir
new file mode 100644
index 000000000..d2cf39bdd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-dlldir
@@ -0,0 +1,2 @@
+# In a native build, target DLLs go in bindir, where they can be executed.
+SHLIB_DLLDIR = $(bindir)
diff --git a/gcc-4.9/libgcc/config/i386/t-dlldir-x b/gcc-4.9/libgcc/config/i386/t-dlldir-x
new file mode 100644
index 000000000..0f8c29b4e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-dlldir-x
@@ -0,0 +1,3 @@
+# In a cross build, bindir contains host not target binaries, so target DLLs
+# instead go in toolexeclibdir, alongside other target binaries and static libs.
+SHLIB_DLLDIR = $(toolexeclibdir)
diff --git a/gcc-4.9/libgcc/config/i386/t-dw2-eh b/gcc-4.9/libgcc/config/i386/t-dw2-eh
new file mode 100644
index 000000000..ffcc39aea
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-dw2-eh
@@ -0,0 +1,3 @@
+
+# We are using Dwarf-2 EH.
+EH_MODEL = dw2
diff --git a/gcc-4.9/libgcc/config/i386/t-freebsd b/gcc-4.9/libgcc/config/i386/t-freebsd
new file mode 100644
index 000000000..4f2bd204a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-freebsd
@@ -0,0 +1,2 @@
+# Add support for the introduction of 128-bit long double.
+SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-bsd.ver
diff --git a/gcc-4.9/libgcc/config/i386/t-gthr-win32 b/gcc-4.9/libgcc/config/i386/t-gthr-win32
new file mode 100644
index 000000000..e7380d6f6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-gthr-win32
@@ -0,0 +1,2 @@
+# We hide calls to w32api needed for w32 thread support here:
+LIB2ADD = $(srcdir)/config/i386/gthr-win32.c
diff --git a/gcc-4.9/libgcc/config/i386/t-interix b/gcc-4.9/libgcc/config/i386/t-interix
new file mode 100644
index 000000000..8889e7c6c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-interix
@@ -0,0 +1,3 @@
+# We need to override LIBGCC2_DEBUG_CFLAGS so libgcc2 will be
+# built without debugging information
+LIBGCC2_DEBUG_CFLAGS =
diff --git a/gcc-4.9/libgcc/config/i386/t-linux b/gcc-4.9/libgcc/config/i386/t-linux
new file mode 100644
index 000000000..4f47f7bfa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-linux
@@ -0,0 +1,6 @@
+# On 64bit we do not need any exports for glibc for 64-bit libgcc_s.
+# Need to support TImode for x86. Override the settings from
+# t-slibgcc-elf-ver and t-linux
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver
+
+HOST_LIBGCC2_CFLAGS += -mlong-double-80
diff --git a/gcc-4.9/libgcc/config/i386/t-mingw-pthread b/gcc-4.9/libgcc/config/i386/t-mingw-pthread
new file mode 100644
index 000000000..622ef82be
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-mingw-pthread
@@ -0,0 +1,2 @@
+SHLIB_PTHREAD_CFLAG = -pthread
+SHLIB_PTHREAD_LDFLAG = -Wl,-lpthread
diff --git a/gcc-4.9/libgcc/config/i386/t-mingw32 b/gcc-4.9/libgcc/config/i386/t-mingw32
new file mode 100644
index 000000000..bfdef6723
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-mingw32
@@ -0,0 +1,2 @@
+# MinGW-specific parts of LIB_SPEC
+SHLIB_LC = -lmingwthrd -lmingw32 -lmingwex -lmoldname -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32
diff --git a/gcc-4.9/libgcc/config/i386/t-nto b/gcc-4.9/libgcc/config/i386/t-nto
new file mode 100644
index 000000000..44c906618
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-nto
@@ -0,0 +1,3 @@
+HOST_LIBGCC2_CFLAGS += -fexceptions
+
+CRTSTUFF_T_CFLAGS = -fno-omit-frame-pointer $(PICFLAG)
diff --git a/gcc-4.9/libgcc/config/i386/t-seh-eh b/gcc-4.9/libgcc/config/i386/t-seh-eh
new file mode 100644
index 000000000..066ca54b0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-seh-eh
@@ -0,0 +1,6 @@
+
+# We are using SEH EH.
+EH_MODEL = seh
+
+# Use SEH exception handling.
+LIB2ADDEH = $(srcdir)/unwind-seh.c $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/gcc-4.9/libgcc/config/i386/t-sjlj-eh b/gcc-4.9/libgcc/config/i386/t-sjlj-eh
new file mode 100644
index 000000000..c9085f432
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-sjlj-eh
@@ -0,0 +1,3 @@
+
+# We are using SjLj EH.
+EH_MODEL = sjlj
diff --git a/gcc-4.9/libgcc/config/i386/t-slibgcc-cygming b/gcc-4.9/libgcc/config/i386/t-slibgcc-cygming
new file mode 100644
index 000000000..6236c78e4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-slibgcc-cygming
@@ -0,0 +1,58 @@
+# Build a shared libgcc library for PECOFF with a DEF file
+# with the GNU linker.
+#
+# mkmap-flat.awk is used with the pe_dll option to produce a DEF instead
+# of an ELF map file.
+#
+# Warning: If SHLIB_SOVERSION or SHLIB_SONAME are updated, LIBGCC_SONAME
+# in mingw32.h and SHLIB_MKMAP_OPTS below must be updated also.
+
+SHLIB_EXT = .dll
+SHLIB_IMPLIB = @shlib_base_name@.a
+SHLIB_SOVERSION = 1
+SHLIB_SONAME = @shlib_base_name@_$(EH_MODEL)-$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_MAP = @shlib_map_file@
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@/shlib
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+# SHLIB_DLLDIR is defined by including one of either t-dlldir or t-dlldir-x
+# (native/cross build respectively) in the tmake_file list in
+# libgcc/config.host.
+ifndef SHLIB_DLLDIR
+$(error SHLIB_DLLDIR must be defined)
+endif
+ifndef SHLIB_PTHREAD_CFLAG
+SHLIB_PTHREAD_CFLAG =
+endif
+ifndef SHLIB_PTHREAD_LDFLAG
+SHLIB_PTHREAD_LDFLAG =
+endif
+
+SHLIB_LINK = $(LN_S) -f $(SHLIB_MAP) $(SHLIB_MAP).def && \
+ if [ ! -d $(SHLIB_DIR) ]; then \
+ mkdir $(SHLIB_DIR); \
+ else true; fi && \
+ $(CC) $(LIBGCC2_CFLAGS) $(SHLIB_PTHREAD_CFLAG) \
+ -shared -nodefaultlibs \
+ $(SHLIB_MAP).def \
+ -Wl,--out-implib,$(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp \
+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
+ $(SHLIB_OBJS) ${SHLIB_PTHREAD_LDFLAG} $(SHLIB_LC) && \
+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
+ else true; fi && \
+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
+ mv $(SHLIB_DIR)/$(SHLIB_IMPLIB).tmp $(SHLIB_DIR)/$(SHLIB_IMPLIB)
+SHLIB_INSTALL = \
+ $(mkinstalldirs) $(DESTDIR)$(SHLIB_DLLDIR) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+ $(INSTALL) $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ $(DESTDIR)$(SHLIB_DLLDIR)/$(SHLIB_SONAME); \
+ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_IMPLIB) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_IMPLIB)
+SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+# We'd like to use SHLIB_SONAME here too, but shlib_base_name
+# does not get substituted before mkmap-flat.awk is run.
+SHLIB_MKMAP_OPTS = -v pe_dll=libgcc_s_$(EH_MODEL)-$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-cygming.ver
diff --git a/gcc-4.9/libgcc/config/i386/t-softfp b/gcc-4.9/libgcc/config/i386/t-softfp
new file mode 100644
index 000000000..685d9cf85
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-softfp
@@ -0,0 +1 @@
+LIB2ADD += $(srcdir)/config/i386/sfp-exceptions.c
diff --git a/gcc-4.9/libgcc/config/i386/t-sol2 b/gcc-4.9/libgcc/config/i386/t-sol2
new file mode 100644
index 000000000..b9cfb00ef
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-sol2
@@ -0,0 +1,13 @@
+# We need to use -fPIC when we are using gcc to compile the routines in
+# crtstuff.c. This is only really needed when we are going to use gcc/g++
+# to produce a shared library, but since we don't know ahead of time when
+# we will be doing that, we just always use -fPIC when compiling the
+# routines in crtstuff.c.
+#
+# We must also enable optimization to avoid having any code appear after
+# the call & alignment statement, but before we switch back to the
+# .text section.
+CRTSTUFF_T_CFLAGS = $(PICFLAG) -O2
+
+# Add support for the introduction of 128-bit long double.
+SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver
diff --git a/gcc-4.9/libgcc/config/i386/t-stack-i386 b/gcc-4.9/libgcc/config/i386/t-stack-i386
new file mode 100644
index 000000000..9965f9402
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/t-stack-i386
@@ -0,0 +1,2 @@
+# Makefile fragment to support -fsplit-stack for x86.
+LIB2ADD_ST += $(srcdir)/config/i386/morestack.S
diff --git a/gcc-4.9/libgcc/config/i386/value-unwind.h b/gcc-4.9/libgcc/config/i386/value-unwind.h
new file mode 100644
index 000000000..a7fb04bab
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/value-unwind.h
@@ -0,0 +1,25 @@
+/* Store register values as _Unwind_Word type in DWARF2 EH unwind context.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Define this macro if the target stores register values as _Unwind_Word
+ type in unwind context. Only enable it for x32. */
+#if defined __x86_64 && !defined __LP64__
+# define REG_VALUE_IN_UNWIND_CONTEXT
+#endif
diff --git a/gcc-4.9/libgcc/config/i386/w32-unwind.h b/gcc-4.9/libgcc/config/i386/w32-unwind.h
new file mode 100644
index 000000000..17ad2379b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/i386/w32-unwind.h
@@ -0,0 +1,207 @@
+/* Definitions for Dwarf2 EH unwind support for Windows32 targets
+ Copyright (C) 2007-2014 Free Software Foundation, Inc.
+ Contributed by Pascal Obry <obry@adacore.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* This file implements the md_fallback_frame_state_for routine for
+ Windows, triggered when the GCC table based unwinding process hits a
+ frame for which no unwind info has been registered. This typically
+ occurs when raising an exception from a signal handler, because the
+ handler is actually called from the OS kernel.
+
+ The basic idea is to detect that we are indeed trying to unwind past a
+ signal handler and to fill out the GCC internal unwinding structures for
+ the OS kernel frame as if it had been directly called from the
+ interrupted context.
+
+ This is all assuming that the code to set the handler asked the kernel
+ to pass a pointer to such context information.
+
+ There is three main parts.
+
+ 1) The first thing to do is to check if we are in a signal context. If
+ not we can just return as there is nothing to do. We are probably on
+ some foreign code for which no unwind frame can be found. If this is
+ a call from the Windows signal handler, then:
+
+ 2) We must get the signal context information.
+
+ * With the standard exception filter:
+
+ This is on Windows pointed to by an EXCEPTION_POINTERS. We know that
+ the signal handle will call an UnhandledExceptionFilter with this
+ parameter. The spec for this routine is:
+
+ LONG WINAPI UnhandledExceptionFilter(struct _EXCEPTION_POINTERS*);
+
+ So the pointer to struct _EXCEPTION_POINTERS must be somewhere on the
+ stack.
+
+ This was found experimentally to always be at offset 0 of the context
+ frame in all cases handled by this implementation.
+
+ * With the SEH exception handler:
+
+ In this case the signal context is directly on the stack as the SEH
+ exception handler has the following prototype:
+
+ DWORD
+ SEH_error_handler (PEXCEPTION_RECORD ExceptionRecord,
+ PVOID EstablisherFrame,
+ PCONTEXT ContextRecord,
+ PVOID DispatcherContext)
+
+ This was found experimentally to always be at offset 56 of the
+ context frame in all cases handled by this implementation.
+
+ 3) When we have the signal context we just have to save some registers
+ and set the return address based on the program counter (Eip).
+
+ Note that this implementation follows closely the same principles as the
+ GNU/Linux and OSF ones. */
+
+#ifndef __MINGW64__
+
+#define WIN32_MEAN_AND_LEAN
+#include <windows.h>
+/* Patterns found experimentally to be on a Windows signal handler */
+
+/* In a standard exception filter */
+
+#define SIG_PAT1 \
+ (pc_[-2] == 0xff && pc_[-1] == 0xd0 /* call %eax */ \
+ && pc_[0] == 0x83 && pc_[1] == 0xf8) /* cmp 0xdepl,%eax */
+
+#define SIG_PAT2 \
+ (pc_[-5] == 0xe8 && pc_[-4] == 0x68 /* call (depl16) */ \
+ && pc_[0] == 0xc3) /* ret */
+
+/* In a Win32 SEH handler */
+
+#define SIG_SEH1 \
+ (pc_[-5] == 0xe8 /* call addr */ \
+ && pc_[0] == 0x83 && pc_[1] == 0xc4 /* add 0xval,%esp */ \
+ && pc_[3] == 0xb8) /* mov 0xval,%eax */
+
+#define SIG_SEH2 \
+ (pc_[-5] == 0x8b && pc_[-4] == 0x4d /* mov depl(%ebp),%ecx */ \
+ && pc_[0] == 0x64 && pc_[1] == 0x8b) /* mov %fs:(0),<reg> */ \
+
+/* In the GCC alloca (stack probing) */
+
+#define SIG_ALLOCA \
+ (pc_[-1] == 0x83 /* orl $0x0,(%ecx) */ \
+ && pc_[0] == 0x9 && pc_[1] == 0 \
+ && pc_[2] == 0x2d && pc_[3] == 0 /* subl $0x1000,%eax */ \
+ && pc_[4] == 0x10 && pc_[5] == 0)
+
+
+#define MD_FALLBACK_FRAME_STATE_FOR i386_w32_fallback_frame_state
+
+static _Unwind_Reason_Code
+i386_w32_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+
+{
+ void * ctx_ra_ = (void *)(context->ra); /* return address */
+ void * ctx_cfa_ = (void *)(context->cfa); /* context frame address */
+ unsigned char * pc_ = (unsigned char *) ctx_ra_;
+
+ /* In the test below we look for two specific patterns found
+ experimentally to be in the Windows signal handler. */
+ if (SIG_PAT1 || SIG_PAT2 || SIG_SEH1 || SIG_SEH2)
+ {
+ PEXCEPTION_POINTERS weinfo_;
+ PCONTEXT proc_ctx_;
+ long new_cfa_;
+
+ if (SIG_SEH1)
+ proc_ctx_ = (PCONTEXT) (*(int*)(ctx_cfa_ + 56));
+ else if (SIG_SEH2)
+ proc_ctx_ = (PCONTEXT) (*(int*)(ctx_cfa_ + 8));
+ else
+ {
+ weinfo_ = (PEXCEPTION_POINTERS) (*(int*)ctx_cfa_);
+ proc_ctx_ = weinfo_->ContextRecord;
+ }
+
+ /* The new context frame address is the stack pointer. */
+ new_cfa_ = proc_ctx_->Esp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column();
+ fs->regs.cfa_offset = new_cfa_ - (long) ctx_cfa_;
+
+ /* Restore registers. */
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)&proc_ctx_->Eax - new_cfa_;
+ fs->regs.reg[3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[3].loc.offset = (long)&proc_ctx_->Ebx - new_cfa_;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long)&proc_ctx_->Ecx - new_cfa_;
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long)&proc_ctx_->Edx - new_cfa_;
+ fs->regs.reg[6].how = REG_SAVED_OFFSET;
+ fs->regs.reg[6].loc.offset = (long)&proc_ctx_->Esi - new_cfa_;
+ fs->regs.reg[7].how = REG_SAVED_OFFSET;
+ fs->regs.reg[7].loc.offset = (long)&proc_ctx_->Edi - new_cfa_;
+ fs->regs.reg[5].how = REG_SAVED_OFFSET;
+ fs->regs.reg[5].loc.offset = (long)&proc_ctx_->Ebp - new_cfa_;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long)&proc_ctx_->Eip - new_cfa_;
+ fs->retaddr_column = 8;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+ }
+
+ /* Unwinding through _alloca, propagating from a trap triggered by
+ one of it's probes prior to the real SP adjustment. The only
+ operations of interest performed is "pushl %ecx", followed by
+ ecx clobbering. */
+ else if (SIG_ALLOCA)
+ {
+ /* Only one push between entry in _alloca and the probe trap. */
+ long new_cfa_ = (long) ctx_cfa_ + 4;
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column();
+ fs->regs.cfa_offset = new_cfa_ - (long) ctx_cfa_;
+
+ /* The saved value of %ecx is at CFA - 4 */
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = -4;
+
+ /* and what is stored at the CFA is the return address. */
+ fs->retaddr_column = 8;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = 0;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+ }
+ else
+ return _URC_END_OF_STACK;
+}
+
+#endif /* !__MINGW64__ */
diff --git a/gcc-4.9/libgcc/config/ia64/__divxf3.S b/gcc-4.9/libgcc/config/ia64/__divxf3.S
new file mode 100644
index 000000000..9cba8f594
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/__divxf3.S
@@ -0,0 +1,11 @@
+#ifdef SHARED
+#define __divtf3 __divtf3_compat
+#endif
+
+#define L__divxf3
+#include "config/ia64/lib1funcs.S"
+
+#ifdef SHARED
+#undef __divtf3
+.symver __divtf3_compat, __divtf3@GCC_3.0
+#endif
diff --git a/gcc-4.9/libgcc/config/ia64/_fixtfdi.S b/gcc-4.9/libgcc/config/ia64/_fixtfdi.S
new file mode 100644
index 000000000..863b70f7e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/_fixtfdi.S
@@ -0,0 +1,11 @@
+#ifdef SHARED
+#define __fixtfti __fixtfti_compat
+#endif
+
+#define L_fixtfdi
+#include "config/ia64/lib1funcs.S"
+
+#ifdef SHARED
+#undef __fixtfti
+.symver __fixtfti_compat, __fixtfti@GCC_3.0
+#endif
diff --git a/gcc-4.9/libgcc/config/ia64/_fixunstfdi.S b/gcc-4.9/libgcc/config/ia64/_fixunstfdi.S
new file mode 100644
index 000000000..aac6a284e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/_fixunstfdi.S
@@ -0,0 +1,11 @@
+#ifdef SHARED
+#define __fixunstfti __fixunstfti_compat
+#endif
+
+#define L_fixunstfdi
+#include "config/ia64/lib1funcs.S"
+
+#ifdef SHARED
+#undef __fixunstfti
+.symver __fixunstfti_compat, __fixunstfti@GCC_3.0
+#endif
diff --git a/gcc-4.9/libgcc/config/ia64/_floatditf.S b/gcc-4.9/libgcc/config/ia64/_floatditf.S
new file mode 100644
index 000000000..e37404d26
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/_floatditf.S
@@ -0,0 +1,11 @@
+#ifdef SHARED
+#define __floattitf __floattitf_compat
+#endif
+
+#define L_floatditf
+#include "config/ia64/lib1funcs.S"
+
+#ifdef SHARED
+#undef __floattitf
+.symver __floattitf_compat, __floattitf@GCC_3.0
+#endif
diff --git a/gcc-4.9/libgcc/config/ia64/crtbegin.S b/gcc-4.9/libgcc/config/ia64/crtbegin.S
new file mode 100644
index 000000000..001b69bb4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/crtbegin.S
@@ -0,0 +1,254 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Jes Sorensen, <Jes.Sorensen@cern.ch>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "auto-host.h"
+
+.section .ctors,"aw","progbits"
+ .align 8
+__CTOR_LIST__:
+ data8 -1
+
+.section .dtors,"aw","progbits"
+ .align 8
+__DTOR_LIST__:
+ data8 -1
+
+.section .jcr,"aw","progbits"
+ .align 8
+__JCR_LIST__:
+
+.section .sdata
+ .type dtor_ptr,@object
+ .size dtor_ptr,8
+dtor_ptr:
+ data8 @gprel(__DTOR_LIST__ + 8)
+
+ /* A handle for __cxa_finalize to manage c++ local destructors. */
+ .global __dso_handle
+ .type __dso_handle,@object
+ .size __dso_handle,8
+#ifdef SHARED
+ .section .data
+__dso_handle:
+ data8 __dso_handle
+#else
+ .section .bss
+ .align 8
+__dso_handle:
+ .skip 8
+#endif
+ .hidden __dso_handle
+
+
+#ifdef HAVE_INITFINI_ARRAY_SUPPORT
+
+.section .fini_array, "a"
+ data8 @fptr(__do_global_dtors_aux)
+
+.section .init_array, "a"
+ data8 @fptr(__do_jv_register_classes)
+ data8 @fptr(__do_global_ctors_aux)
+
+#else /* !HAVE_INITFINI_ARRAY_SUPPORT */
+/*
+ * Fragment of the ELF _fini routine that invokes our dtor cleanup.
+ *
+ * We make the call by indirection, because in large programs the
+ * .fini and .init sections are not in range of the destination, and
+ * we cannot allow the linker to insert a stub at the end of this
+ * fragment of the _fini function. Further, Itanium does not implement
+ * the long branch instructions, and we do not wish every program to
+ * trap to the kernel for emulation.
+ *
+ * Note that we require __do_global_dtors_aux to preserve the GP,
+ * so that the next fragment in .fini gets the right value.
+ */
+.section .fini,"ax","progbits"
+ { .mlx
+ movl r2 = @pcrel(__do_global_dtors_aux - 16)
+ }
+ { .mii
+ mov r3 = ip
+ ;;
+ add r2 = r2, r3
+ ;;
+ }
+ { .mib
+ nop 0
+ mov b6 = r2
+ br.call.sptk.many b0 = b6
+ }
+
+/* Likewise for _init. */
+
+.section .init,"ax","progbits"
+ { .mlx
+ movl r2 = @pcrel(__do_jv_register_classes - 16)
+ }
+ { .mii
+ mov r3 = ip
+ ;;
+ add r2 = r2, r3
+ ;;
+ }
+ { .mib
+ nop 0
+ mov b6 = r2
+ br.call.sptk.many b0 = b6
+ }
+#endif /* !HAVE_INITFINI_ARRAY_SUPPORT */
+
+.section .text
+ .align 32
+ .proc __do_global_dtors_aux
+__do_global_dtors_aux:
+ .prologue
+#ifndef SHARED
+ .save ar.pfs, r35
+ alloc loc3 = ar.pfs, 0, 4, 1, 0
+ addl loc0 = @gprel(dtor_ptr), gp
+ .save rp, loc1
+ mov loc1 = rp
+ .body
+
+ mov loc2 = gp
+ nop 0
+ br.sptk.many .entry
+#else
+ /*
+ if (__cxa_finalize)
+ __cxa_finalize(__dso_handle)
+ */
+ .save ar.pfs, r35
+ alloc loc3 = ar.pfs, 0, 4, 1, 0
+ addl loc0 = @gprel(dtor_ptr), gp
+ addl r16 = @ltoff(@fptr(__cxa_finalize)), gp
+ ;;
+
+ ld8 r16 = [r16]
+ ;;
+ addl out0 = @ltoff(__dso_handle), gp
+ cmp.ne p7, p0 = r0, r16
+ ;;
+
+ ld8 out0 = [out0]
+(p7) ld8 r18 = [r16], 8
+ .save rp, loc1
+ mov loc1 = rp
+ .body
+ ;;
+
+ mov loc2 = gp
+(p7) ld8 gp = [r16]
+(p7) mov b6 = r18
+
+ nop 0
+ nop 0
+(p7) br.call.sptk.many rp = b6
+ ;;
+
+ nop 0
+ nop 0
+ br.sptk.many .entry
+#endif
+ /*
+ do {
+ dtor_ptr++;
+ (*(dtor_ptr-1)) ();
+ } while (dtor_ptr);
+ */
+.loop:
+ st8 [loc0] = r15 // update dtor_ptr (in memory)
+ ld8 r17 = [r16], 8 // r17 <- dtor's entry-point
+ nop 0
+ ;;
+
+ ld8 gp = [r16] // gp <- dtor's gp
+ mov b6 = r17
+ br.call.sptk.many rp = b6
+
+.entry: ld8 r15 = [loc0] // r15 <- dtor_ptr (gp-relative)
+ ;;
+ add r16 = r15, loc2 // r16 <- dtor_ptr (absolute)
+ adds r15 = 8, r15
+ ;;
+
+ ld8 r16 = [r16] // r16 <- pointer to dtor's fdesc
+ mov rp = loc1
+ mov ar.pfs = loc3
+ ;;
+
+ cmp.ne p6, p0 = r0, r16
+(p6) br.cond.sptk.few .loop
+ br.ret.sptk.many rp
+ .endp __do_global_dtors_aux
+
+ .align 32
+ .proc __do_jv_register_classes
+__do_jv_register_classes:
+ .prologue
+ .save ar.pfs, r33
+ alloc loc1 = ar.pfs, 0, 3, 1, 0
+ movl out0 = @gprel(__JCR_LIST__)
+ ;;
+
+ addl r14 = @ltoff(@fptr(_Jv_RegisterClasses)), gp
+ add out0 = out0, gp
+ .save rp, loc0
+ mov loc0 = rp
+ .body
+ ;;
+
+ ld8 r14 = [r14]
+ ld8 r15 = [out0]
+ cmp.ne p6, p0 = r0, r0
+ ;;
+
+ cmp.eq.or p6, p0 = r0, r14
+ cmp.eq.or p6, p0 = r0, r15
+(p6) br.ret.sptk.many rp
+
+ ld8 r15 = [r14], 8
+ ;;
+ nop 0
+ mov b6 = r15
+
+ mov loc2 = gp
+ ld8 gp = [r14]
+ br.call.sptk.many rp = b6
+ ;;
+
+ mov gp = loc2
+ mov rp = loc0
+ mov ar.pfs = loc1
+
+ nop 0
+ nop 0
+ br.ret.sptk.many rp
+ .endp __do_jv_register_classes
+
+#ifdef SHARED
+.weak __cxa_finalize
+#endif
+.weak _Jv_RegisterClasses
diff --git a/gcc-4.9/libgcc/config/ia64/crtend.S b/gcc-4.9/libgcc/config/ia64/crtend.S
new file mode 100644
index 000000000..72bdca089
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/crtend.S
@@ -0,0 +1,121 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Jes Sorensen, <Jes.Sorensen@cern.ch>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "auto-host.h"
+
+.section .ctors,"aw","progbits"
+ .align 8
+__CTOR_END__:
+ data8 0
+
+.section .dtors,"aw","progbits"
+ .align 8
+__DTOR_END__:
+ data8 0
+
+.section .jcr,"aw","progbits"
+ .align 8
+__JCR_END__:
+ data8 0
+
+#ifdef HAVE_INITFINI_ARRAY_SUPPORT
+ .global __do_global_ctors_aux
+ .hidden __do_global_ctors_aux
+#else /* !HAVE_INITFINI_ARRAY_SUPPORT */
+/*
+ * Fragment of the ELF _init routine that invokes our dtor cleanup.
+ *
+ * We make the call by indirection, because in large programs the
+ * .fini and .init sections are not in range of the destination, and
+ * we cannot allow the linker to insert a stub at the end of this
+ * fragment of the _fini function. Further, Itanium does not implement
+ * the long branch instructions, and we do not wish every program to
+ * trap to the kernel for emulation.
+ *
+ * Note that we require __do_global_ctors_aux to preserve the GP,
+ * so that the next fragment in .fini gets the right value.
+ */
+.section .init,"ax","progbits"
+ { .mlx
+ movl r2 = @pcrel(__do_global_ctors_aux - 16)
+ }
+ { .mii
+ mov r3 = ip
+ ;;
+ add r2 = r2, r3
+ ;;
+ }
+ { .mib
+ mov b6 = r2
+ br.call.sptk.many b0 = b6
+ ;;
+ }
+#endif /* !HAVE_INITFINI_ARRAY_SUPPORT */
+
+.text
+ .align 32
+ .proc __do_global_ctors_aux
+__do_global_ctors_aux:
+ .prologue
+ /*
+ for (loc0 = __CTOR_END__-1; *p != -1; --p)
+ (*p) ();
+ */
+ .save ar.pfs, r34
+ alloc loc2 = ar.pfs, 0, 5, 0, 0
+ movl loc0 = @gprel(__CTOR_END__ - 8)
+ ;;
+
+ add loc0 = loc0, gp
+ ;;
+ ld8 loc3 = [loc0], -8
+ .save rp, loc1
+ mov loc1 = rp
+ .body
+ ;;
+
+ cmp.eq p6, p0 = -1, loc3
+ mov loc4 = gp
+(p6) br.cond.spnt.few .exit
+
+.loop: ld8 r15 = [loc3], 8
+ ;;
+ ld8 gp = [loc3]
+ mov b6 = r15
+
+ ld8 loc3 = [loc0], -8
+ nop 0
+ br.call.sptk.many rp = b6
+ ;;
+
+ cmp.ne p6, p0 = -1, loc3
+ nop 0
+(p6) br.cond.sptk.few .loop
+
+.exit: mov gp = loc3
+ mov rp = loc1
+ mov ar.pfs = loc2
+
+ br.ret.sptk.many rp
+ .endp __do_global_ctors_aux
diff --git a/gcc-4.9/libgcc/config/ia64/crtfastmath.c b/gcc-4.9/libgcc/config/ia64/crtfastmath.c
new file mode 100644
index 000000000..34b679236
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/crtfastmath.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by David Mosberger <davidm@hpl.hp.com>.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* We could call fesetenv() here but that would create a confusing
+ dependency on libm (since that is where fesetenv() gets defined.
+ To avoid this, just do everything locally. */
+#define FE_NONIEEE_ENV 0x0009a04d0270037f
+
+static void __attribute__((constructor))
+__ia64_set_fast_math (void)
+{
+ __asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r"(FE_NONIEEE_ENV));
+}
diff --git a/gcc-4.9/libgcc/config/ia64/crti.S b/gcc-4.9/libgcc/config/ia64/crti.S
new file mode 100644
index 000000000..6326053de
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/crti.S
@@ -0,0 +1,53 @@
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Written By Timothy Wall
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just make a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+ .section ".init"
+ .align 16
+ .global _init
+_init:
+ .prologue 14, 33
+ .save ar.pfs, r34
+ alloc r34 = ar.pfs, 0, 4, 0, 0
+ .vframe r35
+ mov r35 = r12
+ .save rp, r33
+ mov r33 = b0
+ .body
+
+ .section ".fini"
+ .align 16
+ .global _fini
+_fini:
+ .prologue 14, 33
+ .save ar.pfs, r34
+ alloc r34 = ar.pfs, 0, 4, 0, 0
+ .vframe r35
+ mov r35 = r12
+ .save rp, r33
+ mov r33 = b0
+ .body
+
+# end of crti.S
diff --git a/gcc-4.9/libgcc/config/ia64/crtn.S b/gcc-4.9/libgcc/config/ia64/crtn.S
new file mode 100644
index 000000000..7a9558fd0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/crtn.S
@@ -0,0 +1,43 @@
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Written By Timothy Wall
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+ .section ".init"
+ ;;
+ mov ar.pfs = r34
+ mov b0 = r33
+ .restore sp
+ mov r12 = r35
+ br.ret.sptk.many b0
+
+ .section ".fini"
+ ;;
+ mov ar.pfs = r34
+ mov b0 = r33
+ .restore sp
+ mov r12 = r35
+ br.ret.sptk.many b0
+
+# end of crtn.S
diff --git a/gcc-4.9/libgcc/config/ia64/fde-glibc.c b/gcc-4.9/libgcc/config/ia64/fde-glibc.c
new file mode 100644
index 000000000..8643b86ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/fde-glibc.c
@@ -0,0 +1,161 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by Richard Henderson <rth@cygnus.com>.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Locate the FDE entry for a given address, using glibc ld.so routines
+ to avoid register/deregister calls at DSO load/unload. */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
+#include "config.h"
+#include <stddef.h>
+#include <stdlib.h>
+#include <link.h>
+#include "unwind-ia64.h"
+
+#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2) \
+ || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && !defined(DT_CONFIG))
+# error You need GLIBC 2.2.4 or later on IA-64 Linux
+#endif
+
+struct unw_ia64_callback_data
+{
+ Elf64_Addr pc;
+ unsigned long *segment_base;
+ unsigned long *gp;
+ struct unw_table_entry *ret;
+};
+
+static int
+_Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
+{
+ struct unw_ia64_callback_data *data = (struct unw_ia64_callback_data *) ptr;
+ const Elf64_Phdr *phdr, *p_unwind, *p_dynamic;
+ long n, match;
+ Elf64_Addr load_base, seg_base;
+ struct unw_table_entry *f_base, *f;
+ size_t lo, hi;
+
+ /* Make sure struct dl_phdr_info is at least as big as we need. */
+ if (size < offsetof (struct dl_phdr_info, dlpi_phnum)
+ + sizeof (info->dlpi_phnum))
+ return -1;
+
+ match = 0;
+ phdr = info->dlpi_phdr;
+ load_base = info->dlpi_addr;
+ p_unwind = NULL;
+ p_dynamic = NULL;
+ seg_base = ~(Elf64_Addr) 0;
+
+ /* See if PC falls into one of the loaded segments. Find the unwind
+ segment at the same time. */
+ for (n = info->dlpi_phnum; --n >= 0; phdr++)
+ {
+ if (phdr->p_type == PT_LOAD)
+ {
+ Elf64_Addr vaddr = phdr->p_vaddr + load_base;
+ if (data->pc >= vaddr && data->pc < vaddr + phdr->p_memsz)
+ match = 1;
+ if (vaddr < seg_base)
+ seg_base = vaddr;
+ }
+ else if (phdr->p_type == PT_IA_64_UNWIND)
+ p_unwind = phdr;
+ else if (phdr->p_type == PT_DYNAMIC)
+ p_dynamic = phdr;
+ }
+ if (!match || !p_unwind)
+ return 0;
+
+ /* Search for the FDE within the unwind segment. */
+
+ f_base = (struct unw_table_entry *) (p_unwind->p_vaddr + load_base);
+ lo = 0;
+ hi = p_unwind->p_memsz / sizeof (struct unw_table_entry);
+
+ while (lo < hi)
+ {
+ size_t mid = (lo + hi) / 2;
+
+ f = f_base + mid;
+ if (data->pc < f->start_offset + seg_base)
+ hi = mid;
+ else if (data->pc >= f->end_offset + seg_base)
+ lo = mid + 1;
+ else
+ goto found;
+ }
+ /* No need to search for further libraries when we know pc is contained
+ in this library. */
+ return 1;
+
+ found:
+ *data->segment_base = seg_base;
+ *data->gp = 0;
+ data->ret = f;
+
+ if (p_dynamic)
+ {
+ /* For dynamically linked executables and shared libraries,
+ DT_PLTGOT is the gp value for that object. */
+ Elf64_Dyn *dyn = (Elf64_Dyn *)(p_dynamic->p_vaddr + load_base);
+ for (; dyn->d_tag != DT_NULL ; dyn++)
+ if (dyn->d_tag == DT_PLTGOT)
+ {
+ /* On IA-64, _DYNAMIC is writable and GLIBC has relocated it. */
+ *data->gp = dyn->d_un.d_ptr;
+ break;
+ }
+ }
+ else
+ {
+ /* Otherwise this is a static executable with no _DYNAMIC.
+ The gp is constant program-wide. */
+ register unsigned long gp __asm__("gp");
+ *data->gp = gp;
+ }
+
+ return 1;
+}
+
+/* Return a pointer to the unwind table entry for the function
+ containing PC. */
+
+struct unw_table_entry *
+_Unwind_FindTableEntry (void *pc, unw_word *segment_base, unw_word *gp,
+ struct unw_table_entry *ent ATTRIBUTE_UNUSED)
+{
+ struct unw_ia64_callback_data data;
+
+ data.pc = (Elf64_Addr) pc;
+ data.segment_base = segment_base;
+ data.gp = gp;
+ data.ret = NULL;
+
+ if (dl_iterate_phdr (_Unwind_IteratePhdrCallback, &data) < 0)
+ return NULL;
+
+ return data.ret;
+}
diff --git a/gcc-4.9/libgcc/config/ia64/fde-vms.c b/gcc-4.9/libgcc/config/ia64/fde-vms.c
new file mode 100644
index 000000000..5dffe7f67
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/fde-vms.c
@@ -0,0 +1,159 @@
+/* Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ Contributed by Douglas B Rupp <rupp@gnat.com>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Locate the FDE entry for a given address, using VMS Starlet routines
+ to avoid register/deregister calls at DSO load/unload. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "unwind-ia64.h"
+
+#include <ossddef.h>
+#ifndef SS$_NORMAL
+#define SS$_NORMAL 1
+#endif
+
+#define UNW_IVMS_MODE(HEADER) (((HEADER) >> 44) & 0x3L)
+
+typedef struct
+{
+ unw_word start_offset;
+ unw_word end_offset;
+ unw_word info_offset;
+ unw_word gp_value;
+} vms_unw_table_entry;
+
+typedef unsigned long long uqword;
+
+/* ENTRY is the unwind table entry found for a PC part of call chain we're
+ unwinding through. Return whether we should force the generic unwinder
+ to resort to "fallback" processing. */
+
+static int
+force_fallback_processing_for (void * pc, vms_unw_table_entry * entry)
+{
+ static int eh_debug = -1;
+
+ uqword * unw_info_block = (uqword *)entry->info_offset;
+ uqword header = *unw_info_block;
+
+ /* We need to force fallback processing in two cases:
+
+ 1/ The exception dispatch frame, since only our fallback
+ processing knows how to properly unwind through it, and
+
+ 2/ A bottom of stack frame, since only our fallback processing
+ will ensure we don't try to unwind further past it, which
+ would get us into unknown territory and likely cause a severe
+ crash along the way.
+
+ The two cases are indicated by non-default values for specific
+ bits in the OS Specific Data (OSSD) General Information block
+ associated with such frames. */
+
+ ossddef * ossd;
+
+ if (eh_debug == -1)
+ {
+ char * EH_DEBUG = getenv ("EH_DEBUG");
+ eh_debug = EH_DEBUG ? atoi (EH_DEBUG) : 0;
+ }
+
+ if (eh_debug)
+ {
+ printf ("pc @ 0x%p, block @ 0x%p, header = 0x%016llx\n",
+ pc, unw_info_block, header);
+ printf ("mode = %d, length = %ld, handler = %d\n",
+ (int)UNW_IVMS_MODE (header), UNW_LENGTH (header),
+ UNW_FLAG_EHANDLER (header) || UNW_FLAG_EHANDLER (header));
+ }
+
+ /* An OSSD block is there for IVMS_MODE == 3 only. */
+ if (UNW_IVMS_MODE (header) != 3)
+ return 0;
+
+ /* The OSSD block is found past the header, unwind descriptor area
+ and condition handler pointer, if any. */
+ ossd = (ossddef *)
+ /* Beware: uqword pointer arithmetic below. */
+ (unw_info_block
+ + 1
+ + UNW_LENGTH (header)
+ + (UNW_FLAG_EHANDLER (header) || UNW_FLAG_EHANDLER (header)));
+
+ /* "A General Information segment may be omitted if all of its fields
+ would have their default values. If a General Information segment
+ is present, it must be the first in the OSSD area." So ... */
+
+ if (eh_debug)
+ printf ("ossd @ 0x%p\n", ossd);
+
+ if (eh_debug && ossd->ossd$v_type == OSSD$K_GENERAL_INFO)
+ printf ("exc_frame = %d - bot_frame = %d - base_frame = %d\n",
+ ossd->ossd$v_exception_frame,
+ ossd->ossd$v_bottom_of_stack,
+ ossd->ossd$v_base_frame);
+
+ return
+ ossd->ossd$v_type == OSSD$K_GENERAL_INFO
+ && (ossd->ossd$v_exception_frame
+ || ossd->ossd$v_bottom_of_stack || ossd->ossd$v_base_frame);
+}
+
+/* Return a pointer to the unwind table entry for the function
+ containing PC, 0 if we cannot find an entry or if the one we find
+ calls for fallback processing. */
+
+struct unw_table_entry *
+_Unwind_FindTableEntry (void *pc, unw_word *segment_base,
+ unw_word *gp, struct unw_table_entry *ent)
+{
+ vms_unw_table_entry vueblock;
+
+ if (SYS$GET_UNWIND_ENTRY_INFO (pc, &vueblock, 0) != SS$_NORMAL)
+ return 0;
+
+ /* If there is no unwind information, use fallback. */
+ if (vueblock.info_offset == 0)
+ return 0;
+
+ /* If we need to force fallback processing, just pretend there is
+ no entry. */
+ if (force_fallback_processing_for (pc, &vueblock))
+ return 0;
+
+ *segment_base = 0; /* ??? Fixme. ??? */
+ *gp = vueblock.gp_value;
+ ent->start_offset = vueblock.start_offset;
+ ent->end_offset = vueblock.end_offset;
+ ent->info_offset = vueblock.info_offset;
+
+ return ent;
+}
diff --git a/gcc-4.9/libgcc/config/ia64/lib1funcs.S b/gcc-4.9/libgcc/config/ia64/lib1funcs.S
new file mode 100644
index 000000000..d47a00f8f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/lib1funcs.S
@@ -0,0 +1,795 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ Contributed by James E. Wilson <wilson@cygnus.com>.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef L__divxf3
+// Compute a 80-bit IEEE double-extended quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// farg0 holds the dividend. farg1 holds the divisor.
+//
+// __divtf3 is an alternate symbol name for backward compatibility.
+
+ .text
+ .align 16
+ .global __divxf3
+ .proc __divxf3
+__divxf3:
+#ifdef SHARED
+ .global __divtf3
+__divtf3:
+#endif
+ cmp.eq p7, p0 = r0, r0
+ frcpa.s0 f10, p6 = farg0, farg1
+ ;;
+(p6) cmp.ne p7, p0 = r0, r0
+ .pred.rel.mutex p6, p7
+(p6) fnma.s1 f11 = farg1, f10, f1
+(p6) fma.s1 f12 = farg0, f10, f0
+ ;;
+(p6) fma.s1 f13 = f11, f11, f0
+(p6) fma.s1 f14 = f11, f11, f11
+ ;;
+(p6) fma.s1 f11 = f13, f13, f11
+(p6) fma.s1 f13 = f14, f10, f10
+ ;;
+(p6) fma.s1 f10 = f13, f11, f10
+(p6) fnma.s1 f11 = farg1, f12, farg0
+ ;;
+(p6) fma.s1 f11 = f11, f10, f12
+(p6) fnma.s1 f12 = farg1, f10, f1
+ ;;
+(p6) fma.s1 f10 = f12, f10, f10
+(p6) fnma.s1 f12 = farg1, f11, farg0
+ ;;
+(p6) fma.s0 fret0 = f12, f10, f11
+(p7) mov fret0 = f10
+ br.ret.sptk rp
+ .endp __divxf3
+#endif
+
+#ifdef L__divdf3
+// Compute a 64-bit IEEE double quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// farg0 holds the dividend. farg1 holds the divisor.
+
+ .text
+ .align 16
+ .global __divdf3
+ .proc __divdf3
+__divdf3:
+ cmp.eq p7, p0 = r0, r0
+ frcpa.s0 f10, p6 = farg0, farg1
+ ;;
+(p6) cmp.ne p7, p0 = r0, r0
+ .pred.rel.mutex p6, p7
+(p6) fmpy.s1 f11 = farg0, f10
+(p6) fnma.s1 f12 = farg1, f10, f1
+ ;;
+(p6) fma.s1 f11 = f12, f11, f11
+(p6) fmpy.s1 f13 = f12, f12
+ ;;
+(p6) fma.s1 f10 = f12, f10, f10
+(p6) fma.s1 f11 = f13, f11, f11
+ ;;
+(p6) fmpy.s1 f12 = f13, f13
+(p6) fma.s1 f10 = f13, f10, f10
+ ;;
+(p6) fma.d.s1 f11 = f12, f11, f11
+(p6) fma.s1 f10 = f12, f10, f10
+ ;;
+(p6) fnma.d.s1 f8 = farg1, f11, farg0
+ ;;
+(p6) fma.d fret0 = f8, f10, f11
+(p7) mov fret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __divdf3
+#endif
+
+#ifdef L__divsf3
+// Compute a 32-bit IEEE float quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// farg0 holds the dividend. farg1 holds the divisor.
+
+ .text
+ .align 16
+ .global __divsf3
+ .proc __divsf3
+__divsf3:
+ cmp.eq p7, p0 = r0, r0
+ frcpa.s0 f10, p6 = farg0, farg1
+ ;;
+(p6) cmp.ne p7, p0 = r0, r0
+ .pred.rel.mutex p6, p7
+(p6) fmpy.s1 f8 = farg0, f10
+(p6) fnma.s1 f9 = farg1, f10, f1
+ ;;
+(p6) fma.s1 f8 = f9, f8, f8
+(p6) fmpy.s1 f9 = f9, f9
+ ;;
+(p6) fma.s1 f8 = f9, f8, f8
+(p6) fmpy.s1 f9 = f9, f9
+ ;;
+(p6) fma.d.s1 f10 = f9, f8, f8
+ ;;
+(p6) fnorm.s.s0 fret0 = f10
+(p7) mov fret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __divsf3
+#endif
+
+#ifdef L__divdi3
+// Compute a 64-bit integer quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend. in1 holds the divisor.
+
+ .text
+ .align 16
+ .global __divdi3
+ .proc __divdi3
+__divdi3:
+ .regstk 2,0,0,0
+ // Transfer inputs to FP registers.
+ setf.sig f8 = in0
+ setf.sig f9 = in1
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ // Convert the inputs to FP, so that they won't be treated as unsigned.
+ fcvt.xf f8 = f8
+ fcvt.xf f9 = f9
+(p7) break 1
+ ;;
+ // Compute the reciprocal approximation.
+ frcpa.s1 f10, p6 = f8, f9
+ ;;
+ // 3 Newton-Raphson iterations.
+(p6) fnma.s1 f11 = f9, f10, f1
+(p6) fmpy.s1 f12 = f8, f10
+ ;;
+(p6) fmpy.s1 f13 = f11, f11
+(p6) fma.s1 f12 = f11, f12, f12
+ ;;
+(p6) fma.s1 f10 = f11, f10, f10
+(p6) fma.s1 f11 = f13, f12, f12
+ ;;
+(p6) fma.s1 f10 = f13, f10, f10
+(p6) fnma.s1 f12 = f9, f11, f8
+ ;;
+(p6) fma.s1 f10 = f12, f10, f11
+ ;;
+ // Round quotient to an integer.
+ fcvt.fx.trunc.s1 f10 = f10
+ ;;
+ // Transfer result to GP registers.
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __divdi3
+#endif
+
+#ifdef L__moddi3
+// Compute a 64-bit integer modulus.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend (a). in1 holds the divisor (b).
+
+ .text
+ .align 16
+ .global __moddi3
+ .proc __moddi3
+__moddi3:
+ .regstk 2,0,0,0
+ // Transfer inputs to FP registers.
+ setf.sig f14 = in0
+ setf.sig f9 = in1
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ // Convert the inputs to FP, so that they won't be treated as unsigned.
+ fcvt.xf f8 = f14
+ fcvt.xf f9 = f9
+(p7) break 1
+ ;;
+ // Compute the reciprocal approximation.
+ frcpa.s1 f10, p6 = f8, f9
+ ;;
+ // 3 Newton-Raphson iterations.
+(p6) fmpy.s1 f12 = f8, f10
+(p6) fnma.s1 f11 = f9, f10, f1
+ ;;
+(p6) fma.s1 f12 = f11, f12, f12
+(p6) fmpy.s1 f13 = f11, f11
+ ;;
+(p6) fma.s1 f10 = f11, f10, f10
+(p6) fma.s1 f11 = f13, f12, f12
+ ;;
+ sub in1 = r0, in1
+(p6) fma.s1 f10 = f13, f10, f10
+(p6) fnma.s1 f12 = f9, f11, f8
+ ;;
+ setf.sig f9 = in1
+(p6) fma.s1 f10 = f12, f10, f11
+ ;;
+ fcvt.fx.trunc.s1 f10 = f10
+ ;;
+ // r = q * (-b) + a
+ xma.l f10 = f10, f9, f14
+ ;;
+ // Transfer result to GP registers.
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __moddi3
+#endif
+
+#ifdef L__udivdi3
+// Compute a 64-bit unsigned integer quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend. in1 holds the divisor.
+
+ .text
+ .align 16
+ .global __udivdi3
+ .proc __udivdi3
+__udivdi3:
+ .regstk 2,0,0,0
+ // Transfer inputs to FP registers.
+ setf.sig f8 = in0
+ setf.sig f9 = in1
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ // Convert the inputs to FP, to avoid FP software-assist faults.
+ fcvt.xuf.s1 f8 = f8
+ fcvt.xuf.s1 f9 = f9
+(p7) break 1
+ ;;
+ // Compute the reciprocal approximation.
+ frcpa.s1 f10, p6 = f8, f9
+ ;;
+ // 3 Newton-Raphson iterations.
+(p6) fnma.s1 f11 = f9, f10, f1
+(p6) fmpy.s1 f12 = f8, f10
+ ;;
+(p6) fmpy.s1 f13 = f11, f11
+(p6) fma.s1 f12 = f11, f12, f12
+ ;;
+(p6) fma.s1 f10 = f11, f10, f10
+(p6) fma.s1 f11 = f13, f12, f12
+ ;;
+(p6) fma.s1 f10 = f13, f10, f10
+(p6) fnma.s1 f12 = f9, f11, f8
+ ;;
+(p6) fma.s1 f10 = f12, f10, f11
+ ;;
+ // Round quotient to an unsigned integer.
+ fcvt.fxu.trunc.s1 f10 = f10
+ ;;
+ // Transfer result to GP registers.
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __udivdi3
+#endif
+
+#ifdef L__umoddi3
+// Compute a 64-bit unsigned integer modulus.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend (a). in1 holds the divisor (b).
+
+ .text
+ .align 16
+ .global __umoddi3
+ .proc __umoddi3
+__umoddi3:
+ .regstk 2,0,0,0
+ // Transfer inputs to FP registers.
+ setf.sig f14 = in0
+ setf.sig f9 = in1
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ // Convert the inputs to FP, to avoid FP software assist faults.
+ fcvt.xuf.s1 f8 = f14
+ fcvt.xuf.s1 f9 = f9
+(p7) break 1;
+ ;;
+ // Compute the reciprocal approximation.
+ frcpa.s1 f10, p6 = f8, f9
+ ;;
+ // 3 Newton-Raphson iterations.
+(p6) fmpy.s1 f12 = f8, f10
+(p6) fnma.s1 f11 = f9, f10, f1
+ ;;
+(p6) fma.s1 f12 = f11, f12, f12
+(p6) fmpy.s1 f13 = f11, f11
+ ;;
+(p6) fma.s1 f10 = f11, f10, f10
+(p6) fma.s1 f11 = f13, f12, f12
+ ;;
+ sub in1 = r0, in1
+(p6) fma.s1 f10 = f13, f10, f10
+(p6) fnma.s1 f12 = f9, f11, f8
+ ;;
+ setf.sig f9 = in1
+(p6) fma.s1 f10 = f12, f10, f11
+ ;;
+ // Round quotient to an unsigned integer.
+ fcvt.fxu.trunc.s1 f10 = f10
+ ;;
+ // r = q * (-b) + a
+ xma.l f10 = f10, f9, f14
+ ;;
+ // Transfer result to GP registers.
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __umoddi3
+#endif
+
+#ifdef L__divsi3
+// Compute a 32-bit integer quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend. in1 holds the divisor.
+
+ .text
+ .align 16
+ .global __divsi3
+ .proc __divsi3
+__divsi3:
+ .regstk 2,0,0,0
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ sxt4 in0 = in0
+ sxt4 in1 = in1
+ ;;
+ setf.sig f8 = in0
+ setf.sig f9 = in1
+(p7) break 1
+ ;;
+ mov r2 = 0x0ffdd
+ fcvt.xf f8 = f8
+ fcvt.xf f9 = f9
+ ;;
+ setf.exp f11 = r2
+ frcpa.s1 f10, p6 = f8, f9
+ ;;
+(p6) fmpy.s1 f8 = f8, f10
+(p6) fnma.s1 f9 = f9, f10, f1
+ ;;
+(p6) fma.s1 f8 = f9, f8, f8
+(p6) fma.s1 f9 = f9, f9, f11
+ ;;
+(p6) fma.s1 f10 = f9, f8, f8
+ ;;
+ fcvt.fx.trunc.s1 f10 = f10
+ ;;
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __divsi3
+#endif
+
+#ifdef L__modsi3
+// Compute a 32-bit integer modulus.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend. in1 holds the divisor.
+
+ .text
+ .align 16
+ .global __modsi3
+ .proc __modsi3
+__modsi3:
+ .regstk 2,0,0,0
+ mov r2 = 0x0ffdd
+ sxt4 in0 = in0
+ sxt4 in1 = in1
+ ;;
+ setf.sig f13 = r32
+ setf.sig f9 = r33
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ sub in1 = r0, in1
+ fcvt.xf f8 = f13
+ fcvt.xf f9 = f9
+ ;;
+ setf.exp f11 = r2
+ frcpa.s1 f10, p6 = f8, f9
+(p7) break 1
+ ;;
+(p6) fmpy.s1 f12 = f8, f10
+(p6) fnma.s1 f10 = f9, f10, f1
+ ;;
+ setf.sig f9 = in1
+(p6) fma.s1 f12 = f10, f12, f12
+(p6) fma.s1 f10 = f10, f10, f11
+ ;;
+(p6) fma.s1 f10 = f10, f12, f12
+ ;;
+ fcvt.fx.trunc.s1 f10 = f10
+ ;;
+ xma.l f10 = f10, f9, f13
+ ;;
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __modsi3
+#endif
+
+#ifdef L__udivsi3
+// Compute a 32-bit unsigned integer quotient.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend. in1 holds the divisor.
+
+ .text
+ .align 16
+ .global __udivsi3
+ .proc __udivsi3
+__udivsi3:
+ .regstk 2,0,0,0
+ mov r2 = 0x0ffdd
+ zxt4 in0 = in0
+ zxt4 in1 = in1
+ ;;
+ setf.sig f8 = in0
+ setf.sig f9 = in1
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ fcvt.xf f8 = f8
+ fcvt.xf f9 = f9
+(p7) break 1
+ ;;
+ setf.exp f11 = r2
+ frcpa.s1 f10, p6 = f8, f9
+ ;;
+(p6) fmpy.s1 f8 = f8, f10
+(p6) fnma.s1 f9 = f9, f10, f1
+ ;;
+(p6) fma.s1 f8 = f9, f8, f8
+(p6) fma.s1 f9 = f9, f9, f11
+ ;;
+(p6) fma.s1 f10 = f9, f8, f8
+ ;;
+ fcvt.fxu.trunc.s1 f10 = f10
+ ;;
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __udivsi3
+#endif
+
+#ifdef L__umodsi3
+// Compute a 32-bit unsigned integer modulus.
+//
+// From the Intel IA-64 Optimization Guide, choose the minimum latency
+// alternative.
+//
+// in0 holds the dividend. in1 holds the divisor.
+
+ .text
+ .align 16
+ .global __umodsi3
+ .proc __umodsi3
+__umodsi3:
+ .regstk 2,0,0,0
+ mov r2 = 0x0ffdd
+ zxt4 in0 = in0
+ zxt4 in1 = in1
+ ;;
+ setf.sig f13 = in0
+ setf.sig f9 = in1
+ // Check divide by zero.
+ cmp.ne.unc p0,p7=0,in1
+ ;;
+ sub in1 = r0, in1
+ fcvt.xf f8 = f13
+ fcvt.xf f9 = f9
+ ;;
+ setf.exp f11 = r2
+ frcpa.s1 f10, p6 = f8, f9
+(p7) break 1;
+ ;;
+(p6) fmpy.s1 f12 = f8, f10
+(p6) fnma.s1 f10 = f9, f10, f1
+ ;;
+ setf.sig f9 = in1
+(p6) fma.s1 f12 = f10, f12, f12
+(p6) fma.s1 f10 = f10, f10, f11
+ ;;
+(p6) fma.s1 f10 = f10, f12, f12
+ ;;
+ fcvt.fxu.trunc.s1 f10 = f10
+ ;;
+ xma.l f10 = f10, f9, f13
+ ;;
+ getf.sig ret0 = f10
+ br.ret.sptk rp
+ ;;
+ .endp __umodsi3
+#endif
+
+#ifdef L__save_stack_nonlocal
+// Notes on save/restore stack nonlocal: We read ar.bsp but write
+// ar.bspstore. This is because ar.bsp can be read at all times
+// (independent of the RSE mode) but since it's read-only we need to
+// restore the value via ar.bspstore. This is OK because
+// ar.bsp==ar.bspstore after executing "flushrs".
+
+// void __ia64_save_stack_nonlocal(void *save_area, void *stack_pointer)
+
+ .text
+ .align 16
+ .global __ia64_save_stack_nonlocal
+ .proc __ia64_save_stack_nonlocal
+__ia64_save_stack_nonlocal:
+ { .mmf
+ alloc r18 = ar.pfs, 2, 0, 0, 0
+ mov r19 = ar.rsc
+ ;;
+ }
+ { .mmi
+ flushrs
+ st8 [in0] = in1, 24
+ and r19 = 0x1c, r19
+ ;;
+ }
+ { .mmi
+ st8 [in0] = r18, -16
+ mov ar.rsc = r19
+ or r19 = 0x3, r19
+ ;;
+ }
+ { .mmi
+ mov r16 = ar.bsp
+ mov r17 = ar.rnat
+ adds r2 = 8, in0
+ ;;
+ }
+ { .mmi
+ st8 [in0] = r16
+ st8 [r2] = r17
+ }
+ { .mib
+ mov ar.rsc = r19
+ br.ret.sptk.few rp
+ ;;
+ }
+ .endp __ia64_save_stack_nonlocal
+#endif
+
+#ifdef L__nonlocal_goto
+// void __ia64_nonlocal_goto(void *target_label, void *save_area,
+// void *static_chain);
+
+ .text
+ .align 16
+ .global __ia64_nonlocal_goto
+ .proc __ia64_nonlocal_goto
+__ia64_nonlocal_goto:
+ { .mmi
+ alloc r20 = ar.pfs, 3, 0, 0, 0
+ ld8 r12 = [in1], 8
+ mov.ret.sptk rp = in0, .L0
+ ;;
+ }
+ { .mmf
+ ld8 r16 = [in1], 8
+ mov r19 = ar.rsc
+ ;;
+ }
+ { .mmi
+ flushrs
+ ld8 r17 = [in1], 8
+ and r19 = 0x1c, r19
+ ;;
+ }
+ { .mmi
+ ld8 r18 = [in1]
+ mov ar.rsc = r19
+ or r19 = 0x3, r19
+ ;;
+ }
+ { .mmi
+ mov ar.bspstore = r16
+ ;;
+ mov ar.rnat = r17
+ ;;
+ }
+ { .mmi
+ loadrs
+ invala
+ mov r15 = in2
+ ;;
+ }
+.L0: { .mib
+ mov ar.rsc = r19
+ mov ar.pfs = r18
+ br.ret.sptk.few rp
+ ;;
+ }
+ .endp __ia64_nonlocal_goto
+#endif
+
+#ifdef L__restore_stack_nonlocal
+// This is mostly the same as nonlocal_goto above.
+// ??? This has not been tested yet.
+
+// void __ia64_restore_stack_nonlocal(void *save_area)
+
+ .text
+ .align 16
+ .global __ia64_restore_stack_nonlocal
+ .proc __ia64_restore_stack_nonlocal
+__ia64_restore_stack_nonlocal:
+ { .mmf
+ alloc r20 = ar.pfs, 4, 0, 0, 0
+ ld8 r12 = [in0], 8
+ ;;
+ }
+ { .mmb
+ ld8 r16=[in0], 8
+ mov r19 = ar.rsc
+ ;;
+ }
+ { .mmi
+ flushrs
+ ld8 r17 = [in0], 8
+ and r19 = 0x1c, r19
+ ;;
+ }
+ { .mmf
+ ld8 r18 = [in0]
+ mov ar.rsc = r19
+ ;;
+ }
+ { .mmi
+ mov ar.bspstore = r16
+ ;;
+ mov ar.rnat = r17
+ or r19 = 0x3, r19
+ ;;
+ }
+ { .mmf
+ loadrs
+ invala
+ ;;
+ }
+.L0: { .mib
+ mov ar.rsc = r19
+ mov ar.pfs = r18
+ br.ret.sptk.few rp
+ ;;
+ }
+ .endp __ia64_restore_stack_nonlocal
+#endif
+
+#ifdef L__trampoline
+// Implement the nested function trampoline. This is out of line
+// so that we don't have to bother with flushing the icache, as
+// well as making the on-stack trampoline smaller.
+//
+// The trampoline has the following form:
+//
+// +-------------------+ >
+// TRAMP: | __ia64_trampoline | |
+// +-------------------+ > fake function descriptor
+// | TRAMP+16 | |
+// +-------------------+ >
+// | target descriptor |
+// +-------------------+
+// | static link |
+// +-------------------+
+
+ .text
+ .align 16
+ .global __ia64_trampoline
+ .proc __ia64_trampoline
+__ia64_trampoline:
+ { .mmi
+ ld8 r2 = [r1], 8
+ ;;
+ ld8 r15 = [r1]
+ }
+ { .mmi
+ ld8 r3 = [r2], 8
+ ;;
+ ld8 r1 = [r2]
+ mov b6 = r3
+ }
+ { .bbb
+ br.sptk.many b6
+ ;;
+ }
+ .endp __ia64_trampoline
+#endif
+
+#ifdef SHARED
+// Thunks for backward compatibility.
+#ifdef L_fixtfdi
+ .text
+ .align 16
+ .global __fixtfti
+ .proc __fixtfti
+__fixtfti:
+ { .bbb
+ br.sptk.many __fixxfti
+ ;;
+ }
+ .endp __fixtfti
+#endif
+#ifdef L_fixunstfdi
+ .align 16
+ .global __fixunstfti
+ .proc __fixunstfti
+__fixunstfti:
+ { .bbb
+ br.sptk.many __fixunsxfti
+ ;;
+ }
+ .endp __fixunstfti
+#endif
+#ifdef L_floatditf
+ .align 16
+ .global __floattitf
+ .proc __floattitf
+__floattitf:
+ { .bbb
+ br.sptk.many __floattixf
+ ;;
+ }
+ .endp __floattitf
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/ia64/libgcc-glibc.ver b/gcc-4.9/libgcc/config/ia64/libgcc-glibc.ver
new file mode 100644
index 000000000..793745250
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/libgcc-glibc.ver
@@ -0,0 +1,97 @@
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# 128 bit long double support was introduced with GCC 4.4.0. These lines
+# make the symbols to get @@GCC_4.4.0 attached.
+
+%exclude {
+ __addtf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __extendxftf2
+ __fixtfdi
+ __fixtfsi
+ __fixtfti
+ __fixunstfdi
+ __fixunstfsi
+ __fixunstfti
+ __floatditf
+ __floatsitf
+ __floattitf
+ __floatunditf
+ __floatunsitf
+ __floatuntitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
+
+# Those TF functions are the aliases of the XF functions before gcc 3.4.
+GCC_3.0 {
+ __divtf3
+ __fixtfti
+ __fixunstfti
+ __floattitf
+}
+
+GCC_4.4.0 {
+ __addtf3
+ __copysigntf3
+ __divtc3
+ __divtf3
+ __eqtf2
+ __extenddftf2
+ __extendsftf2
+ __fabstf2
+ __fixtfdi
+ __fixtfsi
+ __fixunstfdi
+ __fixunstfsi
+ __floatditf
+ __floatsitf
+ __floatunditf
+ __floatunsitf
+ __getf2
+ __gttf2
+ __letf2
+ __lttf2
+ __multc3
+ __multf3
+ __negtf2
+ __netf2
+ __powitf2
+ __subtf3
+ __trunctfdf2
+ __trunctfsf2
+ __trunctfxf2
+ __unordtf2
+}
diff --git a/gcc-4.9/libgcc/config/ia64/libgcc-ia64.ver b/gcc-4.9/libgcc/config/ia64/libgcc-ia64.ver
new file mode 100644
index 000000000..17c2e2e04
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/libgcc-ia64.ver
@@ -0,0 +1,30 @@
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_3.0 {
+ # IA-64 symbols
+ __ia64_nonlocal_goto
+ __ia64_personality_v1
+ __ia64_restore_stack_nonlocal
+ __ia64_save_stack_nonlocal
+ __ia64_trampoline
+ __ia64_backtrace
+}
+GCC_3.3.2 {
+ _Unwind_GetBSP
+}
diff --git a/gcc-4.9/libgcc/config/ia64/linux-unwind.h b/gcc-4.9/libgcc/config/ia64/linux-unwind.h
new file mode 100644
index 000000000..b260b9c2e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/linux-unwind.h
@@ -0,0 +1,199 @@
+/* DWARF2 EH unwinding support for IA64 Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-ia64.c for the structs. */
+
+/* This works only for glibc-2.3 and later, because sigcontext is different
+ in glibc-2.2.4. */
+
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)
+#include <signal.h>
+#include <sys/ucontext.h>
+
+#define IA64_GATE_AREA_START 0xa000000000000100LL
+#define IA64_GATE_AREA_END 0xa000000000030000LL
+
+#define MD_FALLBACK_FRAME_STATE_FOR ia64_fallback_frame_state
+
+static _Unwind_Reason_Code
+ia64_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ if (context->rp >= IA64_GATE_AREA_START
+ && context->rp < IA64_GATE_AREA_END)
+ {
+ struct sigframe {
+ char scratch[16];
+ unsigned long sig_number;
+ siginfo_t *info;
+ struct sigcontext *sc;
+ } *frame_ = (struct sigframe *)context->psp;
+ struct sigcontext *sc = frame_->sc;
+
+ /* Restore scratch registers in case the unwinder needs to
+ refer to a value stored in one of them. */
+ {
+ int i;
+
+ for (i = 2; i < 4; i++)
+ context->ireg[i - 2].loc = &sc->sc_gr[i];
+ for (i = 8; i < 12; i++)
+ context->ireg[i - 2].loc = &sc->sc_gr[i];
+ for (i = 14; i < 32; i++)
+ context->ireg[i - 2].loc = &sc->sc_gr[i];
+ }
+
+ context->fpsr_loc = &(sc->sc_ar_fpsr);
+ context->signal_pfs_loc = &(sc->sc_ar_pfs);
+ context->lc_loc = &(sc->sc_ar_lc);
+ context->unat_loc = &(sc->sc_ar_unat);
+ context->br_loc[0] = &(sc->sc_br[0]);
+ context->br_loc[6] = &(sc->sc_br[6]);
+ context->br_loc[7] = &(sc->sc_br[7]);
+ context->pr = sc->sc_pr;
+ context->psp = sc->sc_gr[12];
+ context->gp = sc->sc_gr[1];
+ /* Signal frame doesn't have an associated reg. stack frame
+ other than what we adjust for below. */
+ fs -> no_reg_stack_frame = 1;
+
+ if (sc->sc_rbs_base)
+ {
+ /* Need to switch from alternate register backing store. */
+ long ndirty, loadrs = sc->sc_loadrs >> 16;
+ unsigned long alt_bspstore = context->bsp - loadrs;
+ unsigned long bspstore;
+ unsigned long *ar_bsp = (unsigned long *)(sc->sc_ar_bsp);
+
+ ndirty = ia64_rse_num_regs ((unsigned long *) alt_bspstore,
+ (unsigned long *) context->bsp);
+ bspstore = (unsigned long)
+ ia64_rse_skip_regs (ar_bsp, -ndirty);
+ ia64_copy_rbs (context, bspstore, alt_bspstore, loadrs,
+ sc->sc_ar_rnat);
+ }
+
+ /* Don't touch the branch registers o.t. b0, b6 and b7.
+ The kernel doesn't pass the preserved branch registers
+ in the sigcontext but leaves them intact, so there's no
+ need to do anything with them here. */
+ {
+ unsigned long sof = sc->sc_cfm & 0x7f;
+ context->bsp = (unsigned long)
+ ia64_rse_skip_regs ((unsigned long *)(sc->sc_ar_bsp), -sof);
+ }
+
+ /* Account for use of br.ret to resume execution of user code. */
+ fs->curr.reg[UNW_REG_RP].where = UNW_WHERE_SPREL;
+ fs->curr.reg[UNW_REG_RP].val
+ = (unsigned long)&(sc->sc_ip) - context->psp;
+ fs->curr.reg[UNW_REG_RP].when = -1;
+
+ fs->curr.reg[UNW_REG_PFS].where = UNW_WHERE_SPREL;
+ fs->curr.reg[UNW_REG_PFS].val
+ = (unsigned long)&(sc->sc_cfm) - context->psp;
+ fs ->curr.reg[UNW_REG_PFS].when = -1;
+
+ return _URC_NO_REASON;
+ }
+ return _URC_END_OF_STACK;
+}
+
+#define MD_HANDLE_UNWABI ia64_handle_unwabi
+
+#define ABI_MARKER_OLD_LINUX_SIGTRAMP ((0 << 8) | 's')
+#define ABI_MARKER_OLD_LINUX_INTERRUPT ((0 << 8) | 'i')
+#define ABI_MARKER_LINUX_SIGTRAMP ((3 << 8) | 's')
+#define ABI_MARKER_LINUX_INTERRUPT ((3 << 8) | 'i')
+
+static void
+ia64_handle_unwabi (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ if (fs->unwabi == ABI_MARKER_LINUX_SIGTRAMP
+ || fs->unwabi == ABI_MARKER_OLD_LINUX_SIGTRAMP)
+ {
+ struct sigframe {
+ char scratch[16];
+ unsigned long sig_number;
+ siginfo_t *info;
+ struct sigcontext *sc;
+ } *frame = (struct sigframe *)context->psp;
+ struct sigcontext *sc = frame->sc;
+
+ /* Restore scratch registers in case the unwinder needs to
+ refer to a value stored in one of them. */
+ {
+ int i;
+
+ for (i = 2; i < 4; i++)
+ context->ireg[i - 2].loc = &sc->sc_gr[i];
+ for (i = 8; i < 12; i++)
+ context->ireg[i - 2].loc = &sc->sc_gr[i];
+ for (i = 14; i < 32; i++)
+ context->ireg[i - 2].loc = &sc->sc_gr[i];
+ }
+
+ context->signal_pfs_loc = &(sc->sc_ar_pfs);
+ context->lc_loc = &(sc->sc_ar_lc);
+ context->unat_loc = &(sc->sc_ar_unat);
+ context->br_loc[0] = &(sc->sc_br[0]);
+ context->br_loc[6] = &(sc->sc_br[6]);
+ context->br_loc[7] = &(sc->sc_br[7]);
+ context->pr = sc->sc_pr;
+ context->gp = sc->sc_gr[1];
+ /* Signal frame doesn't have an associated reg. stack frame
+ other than what we adjust for below. */
+ fs -> no_reg_stack_frame = 1;
+
+ if (sc->sc_rbs_base)
+ {
+ /* Need to switch from alternate register backing store. */
+ long ndirty, loadrs = sc->sc_loadrs >> 16;
+ unsigned long alt_bspstore = context->bsp - loadrs;
+ unsigned long bspstore;
+ unsigned long *ar_bsp = (unsigned long *)(sc->sc_ar_bsp);
+
+ ndirty = ia64_rse_num_regs ((unsigned long *) alt_bspstore,
+ (unsigned long *) context->bsp);
+ bspstore = (unsigned long) ia64_rse_skip_regs (ar_bsp, -ndirty);
+ ia64_copy_rbs (context, bspstore, alt_bspstore, loadrs,
+ sc->sc_ar_rnat);
+ }
+
+ /* Don't touch the branch registers o.t. b0, b6 and b7.
+ The kernel doesn't pass the preserved branch registers
+ in the sigcontext but leaves them intact, so there's no
+ need to do anything with them here. */
+ {
+ unsigned long sof = sc->sc_cfm & 0x7f;
+ context->bsp = (unsigned long)
+ ia64_rse_skip_regs ((unsigned long *)(sc->sc_ar_bsp), -sof);
+ }
+
+ /* The use of br.ret to resume execution of user code is already
+ accounted for in the unwind ABI. */
+ }
+}
+#endif /* glibc-2.3 or better */
diff --git a/gcc-4.9/libgcc/config/ia64/quadlib.c b/gcc-4.9/libgcc/config/ia64/quadlib.c
new file mode 100644
index 000000000..e11d4ac31
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/quadlib.c
@@ -0,0 +1,78 @@
+/* Subroutines for long double support.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+extern int _U_Qfcmp (long double a, long double b, int);
+
+int _U_Qfeq (long double, long double);
+int _U_Qfne (long double, long double);
+int _U_Qfgt (long double, long double);
+int _U_Qfge (long double, long double);
+int _U_Qflt (long double, long double);
+int _U_Qfle (long double, long double);
+int _U_Qfcomp (long double, long double);
+
+int
+_U_Qfeq (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, 4) != 0);
+}
+
+int
+_U_Qfne (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, 4) == 0);
+}
+
+int
+_U_Qfgt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, 17) != 0);
+}
+
+int
+_U_Qfge (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, 21) != 0);
+}
+
+int
+_U_Qflt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, 9) != 0);
+}
+
+int
+_U_Qfle (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, 13) != 0);
+}
+
+int
+_U_Qfcomp (long double a, long double b)
+{
+ if (_U_Qfcmp (a, b, 4) == 0)
+ return 0;
+
+ return (_U_Qfcmp (a, b, 22) != 0 ? 1 : -1);
+}
diff --git a/gcc-4.9/libgcc/config/ia64/sfp-exceptions.c b/gcc-4.9/libgcc/config/ia64/sfp-exceptions.c
new file mode 100644
index 000000000..13d9986c5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/sfp-exceptions.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "sfp-machine.h"
+
+void
+__sfp_handle_exceptions (int _fex)
+{
+ double d;
+
+ if (_fex & FP_EX_INVALID)
+ {
+ asm volatile ("frcpa.s0 %0, p1 = f0, f0" : "=f" (d) : : "p1");
+ }
+ if (_fex & FP_EX_DIVZERO)
+ {
+ asm volatile ("frcpa.s0 %0, p1 = f1, f0" : "=f" (d) : : "p1");
+ }
+ if (_fex & FP_EX_OVERFLOW)
+ {
+ d = __DBL_MAX__;
+ asm volatile ("fadd.d.s0 %0 = %0, %0" : "+f" (d));
+ }
+ if (_fex & FP_EX_UNDERFLOW)
+ {
+ d = __DBL_MIN__;
+ asm volatile ("fnma.d.s0 %0 = %0, %0, f0" : "+f" (d));
+ }
+ if (_fex & FP_EX_INEXACT)
+ {
+ d = __DBL_MAX__;
+ asm volatile ("fsub.d.s0 %0 = %0, f1" : "+f" (d));
+ }
+}
diff --git a/gcc-4.9/libgcc/config/ia64/sfp-machine.h b/gcc-4.9/libgcc/config/ia64/sfp-machine.h
new file mode 100644
index 000000000..0769fc67c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/sfp-machine.h
@@ -0,0 +1,95 @@
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D
+#define _FP_NANFRAC_E _FP_QNANBIT_E, 0
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+#define _FP_NANSIGN_S 1
+#define _FP_NANSIGN_D 1
+#define _FP_NANSIGN_E 1
+#define _FP_NANSIGN_Q 1
+
+/* Here is something Intel misdesigned: the specs don't define
+ the case where we have two NaNs with same mantissas, but
+ different sign. Different operations pick up different NaNs. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if (_FP_FRAC_GT_##wc(X, Y) \
+ || (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ else \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define FP_EX_INVALID 0x01
+#define FP_EX_DENORM 0x02
+#define FP_EX_DIVZERO 0x04
+#define FP_EX_OVERFLOW 0x08
+#define FP_EX_UNDERFLOW 0x10
+#define FP_EX_INEXACT 0x20
+
+#define _FP_TININESS_AFTER_ROUNDING 1
+
+void __sfp_handle_exceptions (int);
+
+#define FP_HANDLE_EXCEPTIONS \
+ do { \
+ if (__builtin_expect (_fex, 0)) \
+ __sfp_handle_exceptions (_fex); \
+ } while (0);
+
+#define FP_RND_NEAREST 0
+#define FP_RND_ZERO 0xc00L
+#define FP_RND_PINF 0x800L
+#define FP_RND_MINF 0x400L
+
+#define FP_RND_MASK 0xc00L
+
+#define _FP_DECL_EX \
+ unsigned long int _fcw __attribute__ ((unused)) = FP_RND_NEAREST
+
+#define FP_INIT_ROUNDMODE \
+ do { \
+ __asm__ __volatile__ ("mov.m %0 = ar.fpsr" : "=r" (_fcw)); \
+ } while (0)
+
+#define FP_ROUNDMODE (_fcw & FP_RND_MASK)
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+#define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+#define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/ia64/t-eh-ia64 b/gcc-4.9/libgcc/config/ia64/t-eh-ia64
new file mode 100644
index 000000000..6aa4bb930
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-eh-ia64
@@ -0,0 +1,2 @@
+LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c \
+ $(srcdir)/unwind-c.c
diff --git a/gcc-4.9/libgcc/config/ia64/t-hpux b/gcc-4.9/libgcc/config/ia64/t-hpux
new file mode 100644
index 000000000..ddc1135d7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-hpux
@@ -0,0 +1,9 @@
+# On HP-UX we do not want _fixtfdi, _fixunstfdi, or _floatditf from
+# LIB1ASMSRC. These functions map the 128 bit conversion function names
+# to 80 bit conversions and were done for Linux backwards compatibility.
+LIB1ASMFUNCS := $(filter-out _fixtfdi _fixunstfdi _floatditf,$(LIB1ASMFUNCS))
+
+# Support routines for HP-UX 128 bit floats.
+LIB2ADD = $(srcdir)/config/ia64/quadlib.c $(srcdir)/floatunsitf.c
+
+LIB2ADDEH = $(srcdir)/unwind-c.c
diff --git a/gcc-4.9/libgcc/config/ia64/t-ia64 b/gcc-4.9/libgcc/config/ia64/t-ia64
new file mode 100644
index 000000000..1776ddd79
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-ia64
@@ -0,0 +1,18 @@
+LIB1ASMSRC = ia64/lib1funcs.S
+
+# We use different names for the DImode div/mod files so that they won't
+# conflict with libgcc2.c files. We used to use __ia64 as a prefix, now
+# we use __ as the prefix. Note that L_divdi3 in libgcc2.c actually defines
+# a TImode divide function, so there is no actual overlap here between
+# libgcc2.c and lib1funcs.S.
+LIB1ASMFUNCS = __divxf3 __divdf3 __divsf3 \
+ __divdi3 __moddi3 __udivdi3 __umoddi3 \
+ __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \
+ __nonlocal_goto __restore_stack_nonlocal __trampoline
+
+# ??? Hack to get -P option used when compiling lib1funcs.S, because Intel
+# assembler does not accept # line number as a comment.
+# ??? This breaks C++ pragma interface/implementation, which is used in the
+# C++ part of libgcc2, hence it had to be disabled. Must find some other way
+# to support the Intel assembler.
+#LIBGCC2_DEBUG_CFLAGS = -g1 -P
diff --git a/gcc-4.9/libgcc/config/ia64/t-ia64-elf b/gcc-4.9/libgcc/config/ia64/t-ia64-elf
new file mode 100644
index 000000000..08784dfaf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-ia64-elf
@@ -0,0 +1,20 @@
+LIB1ASMFUNCS += _fixtfdi _fixunstfdi _floatditf
+
+CUSTOM_CRTSTUFF = yes
+
+# Assemble startup files.
+# FIXME: -I$(gcc_objdir) is necessary to find auto-host.h. Really?
+crtbegin.o: $(srcdir)/config/ia64/crtbegin.S
+ $(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+ -o $@ $<
+crtend.o: $(srcdir)/config/ia64/crtend.S
+ $(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+ -o $@ $<
+crtbeginS.o: $(srcdir)/config/ia64/crtbegin.S
+ $(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+ -o $@ -DSHARED $<
+crtendS.o: $(srcdir)/config/ia64/crtend.S
+ $(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
+ -o $@ -DSHARED $<
+
+SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64.ver
diff --git a/gcc-4.9/libgcc/config/ia64/t-linux b/gcc-4.9/libgcc/config/ia64/t-linux
new file mode 100644
index 000000000..e6d72b94a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-linux
@@ -0,0 +1,5 @@
+# Use system libunwind library on IA-64 GLIBC based system.
+LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
+ $(srcdir)/unwind-compat.c
+
+SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/ia64/t-linux-libunwind b/gcc-4.9/libgcc/config/ia64/t-linux-libunwind
new file mode 100644
index 000000000..8b1736a2d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-linux-libunwind
@@ -0,0 +1,3 @@
+# Build libunwind for IA-64 GLIBC based system.
+LIBUNWIND = $(srcdir)/config/ia64/fde-glibc.c \
+ $(srcdir)/config/ia64/unwind-ia64.c
diff --git a/gcc-4.9/libgcc/config/ia64/t-slibgcc-hpux b/gcc-4.9/libgcc/config/ia64/t-slibgcc-hpux
new file mode 100644
index 000000000..27c7a661b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-slibgcc-hpux
@@ -0,0 +1,6 @@
+# Build a shared libgcc library with the HP-UX linker on IA64.
+
+SHLIB_SOVERSION = 0
+# Must include -lunwind in the link, so that libgcc_s.so has the necessary
+# DT_NEEDED entry for libunwind.
+SHLIB_LC += -lunwind
diff --git a/gcc-4.9/libgcc/config/ia64/t-softfp b/gcc-4.9/libgcc/config/ia64/t-softfp
new file mode 100644
index 000000000..0ac35e72d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-softfp
@@ -0,0 +1,4 @@
+# Provide fallbacks for __builtin_copysignq and __builtin_fabsq.
+LIB2ADD += $(srcdir)/config/ia64/tf-signs.c
+
+LIB2ADD += $(srcdir)/config/ia64/sfp-exceptions.c
diff --git a/gcc-4.9/libgcc/config/ia64/t-softfp-compat b/gcc-4.9/libgcc/config/ia64/t-softfp-compat
new file mode 100644
index 000000000..00f45d51c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-softfp-compat
@@ -0,0 +1,7 @@
+# Filter out the following TImode functions and provide backward binary
+# compatibility.
+# Replace __dvxf3 _fixtfdi _fixunstfdi _floatditf
+libgcc1-tf-functions = __divxf3 _fixtfdi _fixunstfdi _floatditf
+LIB1ASMFUNCS := $(filter-out $(libgcc1-tf-functions), $(LIB1ASMFUNCS))
+libgcc1-tf-compats = $(addsuffix .S, $(libgcc1-tf-functions))
+LIB2ADD += $(addprefix $(srcdir)/config/ia64/, $(libgcc1-tf-compats))
diff --git a/gcc-4.9/libgcc/config/ia64/t-vms b/gcc-4.9/libgcc/config/ia64/t-vms
new file mode 100644
index 000000000..e95c58d8b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/t-vms
@@ -0,0 +1,9 @@
+CRTSTUFF_T_CFLAGS = -O0
+CRTSTUFF_T_CFLAGS_S = -O0
+
+crtinitS.o: $(srcdir)/config/ia64/vms-crtinit.S
+ $(gcc_compile) -c -x assembler-with-cpp $<
+
+LIB2ADDEH += $(srcdir)/config/ia64/fde-vms.c
+
+HOST_LIBGCC2_CFLAGS=-mpointer-size=64
diff --git a/gcc-4.9/libgcc/config/ia64/tf-signs.c b/gcc-4.9/libgcc/config/ia64/tf-signs.c
new file mode 100644
index 000000000..ef1a2ec65
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/tf-signs.c
@@ -0,0 +1,60 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+union _FP_UNION_Q
+{
+ __float128 flt;
+ struct
+ {
+ unsigned long frac1 : 64;
+ unsigned long frac0 : 48;
+ unsigned exp : 15;
+ unsigned sign : 1;
+ } bits __attribute__((packed));
+};
+
+__float128 __copysigntf3 (__float128, __float128);
+__float128 __fabstf2 (__float128);
+
+__float128
+__copysigntf3 (__float128 a, __float128 b)
+{
+ union _FP_UNION_Q A, B;
+
+ A.flt = a;
+ B.flt = b;
+ A.bits.sign = B.bits.sign;
+
+ return A.flt;
+}
+
+__float128
+__fabstf2 (__float128 a)
+{
+ union _FP_UNION_Q A;
+
+ A.flt = a;
+ A.bits.sign = 0;
+
+ return A.flt;
+}
diff --git a/gcc-4.9/libgcc/config/ia64/unwind-ia64.c b/gcc-4.9/libgcc/config/ia64/unwind-ia64.c
new file mode 100644
index 000000000..6c5207c11
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/unwind-ia64.c
@@ -0,0 +1,2468 @@
+/* Subroutines needed for unwinding IA-64 standard format stack frame
+ info for exception handling.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+ Contributed by Andrew MacLeod <amacleod@cygnus.com>
+ Andrew Haley <aph@cygnus.com>
+ David Mosberger-Tang <davidm@hpl.hp.com>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#include "unwind.h"
+#include "unwind-ia64.h"
+#include "unwind-compat.h"
+#include "ia64intrin.h"
+
+/* This isn't thread safe, but nice for occasional tests. */
+#undef ENABLE_MALLOC_CHECKING
+
+#ifndef __USING_SJLJ_EXCEPTIONS__
+
+enum unw_application_register
+{
+ UNW_AR_BSP,
+ UNW_AR_BSPSTORE,
+ UNW_AR_PFS,
+ UNW_AR_RNAT,
+ UNW_AR_UNAT,
+ UNW_AR_LC,
+ UNW_AR_EC,
+ UNW_AR_FPSR,
+ UNW_AR_RSC,
+ UNW_AR_CCV
+};
+
+enum unw_register_index
+{
+ /* Primary UNAT. */
+ UNW_REG_PRI_UNAT_GR,
+ UNW_REG_PRI_UNAT_MEM,
+
+ /* Memory Stack. */
+ UNW_REG_PSP, /* previous memory stack pointer */
+
+ /* Register Stack. */
+ UNW_REG_BSP, /* register stack pointer */
+ UNW_REG_BSPSTORE,
+ UNW_REG_PFS, /* previous function state */
+ UNW_REG_RNAT,
+ /* Return Pointer. */
+ UNW_REG_RP,
+
+ /* Special preserved registers. */
+ UNW_REG_UNAT, UNW_REG_PR, UNW_REG_LC, UNW_REG_FPSR,
+
+ /* Non-stacked general registers. */
+ UNW_REG_R2,
+ UNW_REG_R4 = UNW_REG_R2 + 2,
+ UNW_REG_R7 = UNW_REG_R2 + 5,
+ UNW_REG_R31 = UNW_REG_R2 + 29,
+
+ /* Non-stacked floating point registers. */
+ UNW_REG_F2,
+ UNW_REG_F5 = UNW_REG_F2 + 3,
+ UNW_REG_F16 = UNW_REG_F2 + 14,
+ UNW_REG_F31 = UNW_REG_F2 + 29,
+
+ /* Branch registers. */
+ UNW_REG_B0, UNW_REG_B1,
+ UNW_REG_B5 = UNW_REG_B1 + 4,
+
+ UNW_NUM_REGS
+};
+
+enum unw_where
+{
+ UNW_WHERE_NONE, /* register isn't saved at all */
+ UNW_WHERE_GR, /* register is saved in a general register */
+ UNW_WHERE_FR, /* register is saved in a floating-point register */
+ UNW_WHERE_BR, /* register is saved in a branch register */
+ UNW_WHERE_SPREL, /* register is saved on memstack (sp-relative) */
+ UNW_WHERE_PSPREL, /* register is saved on memstack (psp-relative) */
+
+ /* At the end of each prologue these locations get resolved to
+ UNW_WHERE_PSPREL and UNW_WHERE_GR, respectively. */
+ UNW_WHERE_SPILL_HOME, /* register is saved in its spill home */
+ UNW_WHERE_GR_SAVE /* register is saved in next general register */
+};
+
+#define UNW_WHEN_NEVER 0x7fffffff
+
+struct unw_reg_info
+{
+ unw_word val; /* save location: register number or offset */
+ enum unw_where where; /* where the register gets saved */
+ int when; /* when the register gets saved */
+};
+
+struct unw_reg_state {
+ struct unw_reg_state *next; /* next (outer) element on state stack */
+ struct unw_reg_info reg[UNW_NUM_REGS]; /* register save locations */
+};
+
+struct unw_labeled_state {
+ struct unw_labeled_state *next; /* next labeled state (or NULL) */
+ unw_word label; /* label for this state */
+ struct unw_reg_state saved_state;
+};
+
+typedef struct unw_state_record
+{
+ unsigned int first_region : 1; /* is this the first region? */
+ unsigned int done : 1; /* are we done scanning descriptors? */
+ unsigned int any_spills : 1; /* got any register spills? */
+ unsigned int in_body : 1; /* are we inside a body? */
+ unsigned int no_reg_stack_frame : 1; /* Don't adjust bsp for i&l regs */
+ unsigned char *imask; /* imask of spill_mask record or NULL */
+ unw_word pr_val; /* predicate values */
+ unw_word pr_mask; /* predicate mask */
+ unw_sword spill_offset; /* psp-relative offset for spill base */
+ int region_start;
+ int region_len;
+ int epilogue_start;
+ int epilogue_count;
+ int when_target;
+
+ unsigned char gr_save_loc; /* next general register to use for saving */
+ unsigned char return_link_reg; /* branch register for return link */
+ unsigned short unwabi;
+
+ struct unw_labeled_state *labeled_states; /* list of all labeled states */
+ struct unw_reg_state curr; /* current state */
+
+ _Unwind_Personality_Fn personality;
+
+} _Unwind_FrameState;
+
+enum unw_nat_type
+{
+ UNW_NAT_NONE, /* NaT not represented */
+ UNW_NAT_VAL, /* NaT represented by NaT value (fp reg) */
+ UNW_NAT_MEMSTK, /* NaT value is in unat word at offset OFF */
+ UNW_NAT_REGSTK /* NaT is in rnat */
+};
+
+struct unw_stack
+{
+ unw_word limit;
+ unw_word top;
+};
+
+struct _Unwind_Context
+{
+ /* Initial frame info. */
+ unw_word rnat; /* rse nat collection */
+ unw_word regstk_top; /* lowest address of rbs stored register
+ which uses context->rnat collection */
+
+ /* Current frame info. */
+ unw_word bsp; /* backing store pointer value
+ corresponding to psp. */
+ unw_word sp; /* stack pointer value */
+ unw_word psp; /* previous sp value */
+ unw_word rp; /* return pointer */
+ unw_word pr; /* predicate collection */
+
+ unw_word region_start;/* start of unwind region */
+ unw_word gp; /* global pointer value */
+ void *lsda; /* language specific data area */
+
+ /* Preserved state. */
+ unw_word *bsp_loc; /* previous bsp save location
+ Appears to be write-only? */
+ unw_word *bspstore_loc;
+ unw_word *pfs_loc; /* Save location for pfs in current
+ (corr. to sp) frame. Target
+ contains cfm for caller. */
+ unw_word *signal_pfs_loc;/* Save location for pfs in current
+ signal frame. Target contains
+ pfs for caller. */
+ unw_word *pri_unat_loc;
+ unw_word *unat_loc;
+ unw_word *lc_loc;
+ unw_word *fpsr_loc;
+
+ unw_word eh_data[4];
+
+ struct unw_ireg
+ {
+ unw_word *loc;
+ struct unw_ireg_nat
+ {
+ enum unw_nat_type type : 3;
+ unw_sword off : 61; /* NaT word is at loc+nat.off */
+ } nat;
+ } ireg[32 - 2]; /* Indexed by <register number> - 2 */
+
+ unw_word *br_loc[8];
+ void *fr_loc[32 - 2];
+
+ /* ??? We initially point pri_unat_loc here. The entire NAT bit
+ logic needs work. */
+ unw_word initial_unat;
+};
+
+/* Implicit register save order. See section 11.4.2.3 Rules for Using
+ Unwind Descriptors, rule 3. */
+
+static unsigned char const save_order[] =
+{
+ UNW_REG_RP, UNW_REG_PFS, UNW_REG_PSP, UNW_REG_PR,
+ UNW_REG_UNAT, UNW_REG_LC, UNW_REG_FPSR, UNW_REG_PRI_UNAT_GR
+};
+
+
+#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
+
+/* MASK is a bitmap describing the allocation state of emergency buffers,
+ with bit set indicating free. Return >= 0 if allocation is successful;
+ < 0 if failure. */
+
+static inline int
+atomic_alloc (unsigned int *mask)
+{
+ unsigned int old = *mask, ret, new;
+
+ while (1)
+ {
+ if (old == 0)
+ return -1;
+ ret = old & -old;
+ new = old & ~ret;
+ new = __sync_val_compare_and_swap (mask, old, new);
+ if (old == new)
+ break;
+ old = new;
+ }
+
+ return __builtin_ffs (ret) - 1;
+}
+
+/* Similarly, free an emergency buffer. */
+
+static inline void
+atomic_free (unsigned int *mask, int bit)
+{
+ __sync_xor_and_fetch (mask, 1 << bit);
+}
+
+
+#define SIZE(X) (sizeof(X) / sizeof(*(X)))
+#define MASK_FOR(X) ((2U << (SIZE (X) - 1)) - 1)
+#define PTR_IN(X, P) ((P) >= (X) && (P) < (X) + SIZE (X))
+
+static struct unw_reg_state emergency_reg_state[32];
+static unsigned int emergency_reg_state_free = MASK_FOR (emergency_reg_state);
+
+static struct unw_labeled_state emergency_labeled_state[8];
+static unsigned int emergency_labeled_state_free = MASK_FOR (emergency_labeled_state);
+
+#ifdef ENABLE_MALLOC_CHECKING
+static int reg_state_alloced;
+static int labeled_state_alloced;
+#endif
+
+/* Allocation and deallocation of structures. */
+
+static struct unw_reg_state *
+alloc_reg_state (void)
+{
+ struct unw_reg_state *rs;
+
+#ifdef ENABLE_MALLOC_CHECKING
+ reg_state_alloced++;
+#endif
+
+ rs = malloc (sizeof (struct unw_reg_state));
+ if (!rs)
+ {
+ int n = atomic_alloc (&emergency_reg_state_free);
+ if (n >= 0)
+ rs = &emergency_reg_state[n];
+ }
+
+ return rs;
+}
+
+static void
+free_reg_state (struct unw_reg_state *rs)
+{
+#ifdef ENABLE_MALLOC_CHECKING
+ reg_state_alloced--;
+#endif
+
+ if (PTR_IN (emergency_reg_state, rs))
+ atomic_free (&emergency_reg_state_free, rs - emergency_reg_state);
+ else
+ free (rs);
+}
+
+static struct unw_labeled_state *
+alloc_label_state (void)
+{
+ struct unw_labeled_state *ls;
+
+#ifdef ENABLE_MALLOC_CHECKING
+ labeled_state_alloced++;
+#endif
+
+ ls = malloc(sizeof(struct unw_labeled_state));
+ if (!ls)
+ {
+ int n = atomic_alloc (&emergency_labeled_state_free);
+ if (n >= 0)
+ ls = &emergency_labeled_state[n];
+ }
+
+ return ls;
+}
+
+static void
+free_label_state (struct unw_labeled_state *ls)
+{
+#ifdef ENABLE_MALLOC_CHECKING
+ labeled_state_alloced--;
+#endif
+
+ if (PTR_IN (emergency_labeled_state, ls))
+ atomic_free (&emergency_labeled_state_free, emergency_labeled_state - ls);
+ else
+ free (ls);
+}
+
+/* Routines to manipulate the state stack. */
+
+static void
+push (struct unw_state_record *sr)
+{
+ struct unw_reg_state *rs = alloc_reg_state ();
+ memcpy (rs, &sr->curr, sizeof (*rs));
+ sr->curr.next = rs;
+}
+
+static void
+pop (struct unw_state_record *sr)
+{
+ struct unw_reg_state *rs = sr->curr.next;
+
+ if (!rs)
+ abort ();
+ memcpy (&sr->curr, rs, sizeof(*rs));
+ free_reg_state (rs);
+}
+
+/* Make a copy of the state stack. Non-recursive to avoid stack overflows. */
+
+static struct unw_reg_state *
+dup_state_stack (struct unw_reg_state *rs)
+{
+ struct unw_reg_state *copy, *prev = NULL, *first = NULL;
+
+ while (rs)
+ {
+ copy = alloc_reg_state ();
+ memcpy (copy, rs, sizeof(*copy));
+ if (first)
+ prev->next = copy;
+ else
+ first = copy;
+ rs = rs->next;
+ prev = copy;
+ }
+
+ return first;
+}
+
+/* Free all stacked register states (but not RS itself). */
+static void
+free_state_stack (struct unw_reg_state *rs)
+{
+ struct unw_reg_state *p, *next;
+
+ for (p = rs->next; p != NULL; p = next)
+ {
+ next = p->next;
+ free_reg_state (p);
+ }
+ rs->next = NULL;
+}
+
+/* Free all labeled states. */
+
+static void
+free_label_states (struct unw_labeled_state *ls)
+{
+ struct unw_labeled_state *next;
+
+ for (; ls ; ls = next)
+ {
+ next = ls->next;
+
+ free_state_stack (&ls->saved_state);
+ free_label_state (ls);
+ }
+}
+
+/* Unwind decoder routines */
+
+static enum unw_register_index __attribute__((const))
+decode_abreg (unsigned char abreg, int memory)
+{
+ switch (abreg)
+ {
+#if TARGET_ABI_OPEN_VMS
+ /* OpenVMS Calling Standard specifies R3 - R31. */
+ case 0x03 ... 0x1f: return UNW_REG_R2 + (abreg - 0x02);
+#else
+ /* Standard Intel ABI specifies GR 4 - 7. */
+ case 0x04 ... 0x07: return UNW_REG_R4 + (abreg - 0x04);
+#endif
+ case 0x22 ... 0x25: return UNW_REG_F2 + (abreg - 0x22);
+ case 0x30 ... 0x3f: return UNW_REG_F16 + (abreg - 0x30);
+ case 0x41 ... 0x45: return UNW_REG_B1 + (abreg - 0x41);
+ case 0x60: return UNW_REG_PR;
+ case 0x61: return UNW_REG_PSP;
+ case 0x62: return memory ? UNW_REG_PRI_UNAT_MEM : UNW_REG_PRI_UNAT_GR;
+ case 0x63: return UNW_REG_RP;
+ case 0x64: return UNW_REG_BSP;
+ case 0x65: return UNW_REG_BSPSTORE;
+ case 0x66: return UNW_REG_RNAT;
+ case 0x67: return UNW_REG_UNAT;
+ case 0x68: return UNW_REG_FPSR;
+ case 0x69: return UNW_REG_PFS;
+ case 0x6a: return UNW_REG_LC;
+ default:
+ abort ();
+ }
+}
+
+static void
+set_reg (struct unw_reg_info *reg, enum unw_where where,
+ int when, unw_word val)
+{
+ reg->val = val;
+ reg->where = where;
+ if (reg->when == UNW_WHEN_NEVER)
+ reg->when = when;
+}
+
+static void
+alloc_spill_area (unw_word *offp, unw_word regsize,
+ struct unw_reg_info *lo, struct unw_reg_info *hi)
+{
+ struct unw_reg_info *reg;
+
+ for (reg = hi; reg >= lo; --reg)
+ {
+ if (reg->where == UNW_WHERE_SPILL_HOME)
+ {
+ reg->where = UNW_WHERE_PSPREL;
+ *offp -= regsize;
+ reg->val = *offp;
+ }
+ }
+}
+
+static inline void
+spill_next_when (struct unw_reg_info **regp, struct unw_reg_info *lim,
+ unw_word t)
+{
+ struct unw_reg_info *reg;
+
+ for (reg = *regp; reg <= lim; ++reg)
+ {
+ if (reg->where == UNW_WHERE_SPILL_HOME)
+ {
+ reg->when = t;
+ *regp = reg + 1;
+ return;
+ }
+ }
+ /* Excess spill. */
+ abort ();
+}
+
+static void
+finish_prologue (struct unw_state_record *sr)
+{
+ struct unw_reg_info *reg;
+ unw_word off;
+ int i;
+
+ /* First, resolve implicit register save locations
+ (see Section "11.4.2.3 Rules for Using Unwind Descriptors", rule 3). */
+
+ for (i = 0; i < (int) sizeof (save_order); ++i)
+ {
+ reg = sr->curr.reg + save_order[i];
+ if (reg->where == UNW_WHERE_GR_SAVE)
+ {
+ reg->where = UNW_WHERE_GR;
+ reg->val = sr->gr_save_loc++;
+ }
+ }
+
+ /* Next, compute when the fp, general, and branch registers get saved.
+ This must come before alloc_spill_area() because we need to know
+ which registers are spilled to their home locations. */
+ if (sr->imask)
+ {
+ static unsigned char const limit[3] = {
+ UNW_REG_F31, UNW_REG_R7, UNW_REG_B5
+ };
+
+ unsigned char kind, mask = 0, *cp = sr->imask;
+ int t;
+ struct unw_reg_info *(regs[3]);
+
+ regs[0] = sr->curr.reg + UNW_REG_F2;
+ regs[1] = sr->curr.reg + UNW_REG_R4;
+ regs[2] = sr->curr.reg + UNW_REG_B1;
+
+ for (t = 0; t < sr->region_len; ++t)
+ {
+ if ((t & 3) == 0)
+ mask = *cp++;
+ kind = (mask >> 2*(3-(t & 3))) & 3;
+ if (kind > 0)
+ spill_next_when (&regs[kind - 1], sr->curr.reg + limit[kind - 1],
+ sr->region_start + t);
+ }
+ }
+
+ /* Next, lay out the memory stack spill area. */
+ if (sr->any_spills)
+ {
+ off = sr->spill_offset;
+ alloc_spill_area (&off, 16, sr->curr.reg + UNW_REG_F2,
+ sr->curr.reg + UNW_REG_F31);
+ alloc_spill_area (&off, 8, sr->curr.reg + UNW_REG_B1,
+ sr->curr.reg + UNW_REG_B5);
+ alloc_spill_area (&off, 8, sr->curr.reg + UNW_REG_R4,
+ sr->curr.reg + UNW_REG_R7);
+ }
+}
+
+/*
+ * Region header descriptors.
+ */
+
+static void
+desc_prologue (int body, unw_word rlen, unsigned char mask,
+ unsigned char grsave, struct unw_state_record *sr)
+{
+ int i;
+
+ if (!(sr->in_body || sr->first_region))
+ finish_prologue (sr);
+ sr->first_region = 0;
+
+ /* Check if we're done. */
+ if (sr->when_target < sr->region_start + sr->region_len)
+ {
+ sr->done = 1;
+ return;
+ }
+
+ for (i = 0; i < sr->epilogue_count; ++i)
+ pop (sr);
+
+ sr->epilogue_count = 0;
+ sr->epilogue_start = UNW_WHEN_NEVER;
+
+ if (!body)
+ push (sr);
+
+ sr->region_start += sr->region_len;
+ sr->region_len = rlen;
+ sr->in_body = body;
+
+ if (!body)
+ {
+ for (i = 0; i < 4; ++i)
+ {
+ if (mask & 0x8)
+ set_reg (sr->curr.reg + save_order[i], UNW_WHERE_GR,
+ sr->region_start + sr->region_len - 1, grsave++);
+ mask <<= 1;
+ }
+ sr->gr_save_loc = grsave;
+ sr->any_spills = 0;
+ sr->imask = 0;
+ sr->spill_offset = 0x10; /* default to psp+16 */
+ }
+}
+
+/*
+ * Prologue descriptors.
+ */
+
+static inline void
+desc_abi (unsigned char abi,
+ unsigned char context,
+ struct unw_state_record *sr)
+{
+ sr->unwabi = (abi << 8) | context;
+}
+
+static inline void
+desc_br_gr (unsigned char brmask, unsigned char gr,
+ struct unw_state_record *sr)
+{
+ int i;
+
+ for (i = 0; i < 5; ++i)
+ {
+ if (brmask & 1)
+ set_reg (sr->curr.reg + UNW_REG_B1 + i, UNW_WHERE_GR,
+ sr->region_start + sr->region_len - 1, gr++);
+ brmask >>= 1;
+ }
+}
+
+static inline void
+desc_br_mem (unsigned char brmask, struct unw_state_record *sr)
+{
+ int i;
+
+ for (i = 0; i < 5; ++i)
+ {
+ if (brmask & 1)
+ {
+ set_reg (sr->curr.reg + UNW_REG_B1 + i, UNW_WHERE_SPILL_HOME,
+ sr->region_start + sr->region_len - 1, 0);
+ sr->any_spills = 1;
+ }
+ brmask >>= 1;
+ }
+}
+
+static inline void
+desc_frgr_mem (unsigned char grmask, unw_word frmask,
+ struct unw_state_record *sr)
+{
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ if ((grmask & 1) != 0)
+ {
+ set_reg (sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_SPILL_HOME,
+ sr->region_start + sr->region_len - 1, 0);
+ sr->any_spills = 1;
+ }
+ grmask >>= 1;
+ }
+ for (i = 0; i < 20; ++i)
+ {
+ if ((frmask & 1) != 0)
+ {
+ enum unw_register_index base = i < 4 ? UNW_REG_F2 : UNW_REG_F16 - 4;
+ set_reg (sr->curr.reg + base + i, UNW_WHERE_SPILL_HOME,
+ sr->region_start + sr->region_len - 1, 0);
+ sr->any_spills = 1;
+ }
+ frmask >>= 1;
+ }
+}
+
+static inline void
+desc_fr_mem (unsigned char frmask, struct unw_state_record *sr)
+{
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ if ((frmask & 1) != 0)
+ {
+ set_reg (sr->curr.reg + UNW_REG_F2 + i, UNW_WHERE_SPILL_HOME,
+ sr->region_start + sr->region_len - 1, 0);
+ sr->any_spills = 1;
+ }
+ frmask >>= 1;
+ }
+}
+
+static inline void
+desc_gr_gr (unsigned char grmask, unsigned char gr,
+ struct unw_state_record *sr)
+{
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ if ((grmask & 1) != 0)
+ set_reg (sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_GR,
+ sr->region_start + sr->region_len - 1, gr++);
+ grmask >>= 1;
+ }
+}
+
+static inline void
+desc_gr_mem (unsigned char grmask, struct unw_state_record *sr)
+{
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ if ((grmask & 1) != 0)
+ {
+ set_reg (sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_SPILL_HOME,
+ sr->region_start + sr->region_len - 1, 0);
+ sr->any_spills = 1;
+ }
+ grmask >>= 1;
+ }
+}
+
+static inline void
+desc_mem_stack_f (unw_word t, unw_word size, struct unw_state_record *sr)
+{
+ set_reg (sr->curr.reg + UNW_REG_PSP, UNW_WHERE_NONE,
+ sr->region_start + MIN ((int)t, sr->region_len - 1), 16*size);
+}
+
+static inline void
+desc_mem_stack_v (unw_word t, struct unw_state_record *sr)
+{
+ sr->curr.reg[UNW_REG_PSP].when
+ = sr->region_start + MIN ((int)t, sr->region_len - 1);
+}
+
+static inline void
+desc_reg_gr (unsigned char reg, unsigned char dst, struct unw_state_record *sr)
+{
+ set_reg (sr->curr.reg + reg, UNW_WHERE_GR,
+ sr->region_start + sr->region_len - 1, dst);
+}
+
+static inline void
+desc_reg_psprel (unsigned char reg, unw_word pspoff,
+ struct unw_state_record *sr)
+{
+ set_reg (sr->curr.reg + reg, UNW_WHERE_PSPREL,
+ sr->region_start + sr->region_len - 1,
+ 0x10 - 4*pspoff);
+}
+
+static inline void
+desc_reg_sprel (unsigned char reg, unw_word spoff, struct unw_state_record *sr)
+{
+ set_reg (sr->curr.reg + reg, UNW_WHERE_SPREL,
+ sr->region_start + sr->region_len - 1,
+ 4*spoff);
+}
+
+static inline void
+desc_rp_br (unsigned char dst, struct unw_state_record *sr)
+{
+ sr->return_link_reg = dst;
+}
+
+static inline void
+desc_reg_when (unsigned char regnum, unw_word t, struct unw_state_record *sr)
+{
+ struct unw_reg_info *reg = sr->curr.reg + regnum;
+
+ if (reg->where == UNW_WHERE_NONE)
+ reg->where = UNW_WHERE_GR_SAVE;
+ reg->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
+}
+
+static inline void
+desc_spill_base (unw_word pspoff, struct unw_state_record *sr)
+{
+ sr->spill_offset = 0x10 - 4*pspoff;
+}
+
+static inline unsigned char *
+desc_spill_mask (unsigned char *imaskp, struct unw_state_record *sr)
+{
+ sr->imask = imaskp;
+ return imaskp + (2*sr->region_len + 7)/8;
+}
+
+/*
+ * Body descriptors.
+ */
+static inline void
+desc_epilogue (unw_word t, unw_word ecount, struct unw_state_record *sr)
+{
+ sr->epilogue_start = sr->region_start + sr->region_len - 1 - t;
+ sr->epilogue_count = ecount + 1;
+}
+
+static inline void
+desc_copy_state (unw_word label, struct unw_state_record *sr)
+{
+ struct unw_labeled_state *ls;
+
+ for (ls = sr->labeled_states; ls; ls = ls->next)
+ {
+ if (ls->label == label)
+ {
+ free_state_stack (&sr->curr);
+ memcpy (&sr->curr, &ls->saved_state, sizeof (sr->curr));
+ sr->curr.next = dup_state_stack (ls->saved_state.next);
+ return;
+ }
+ }
+ abort ();
+}
+
+static inline void
+desc_label_state (unw_word label, struct unw_state_record *sr)
+{
+ struct unw_labeled_state *ls = alloc_label_state ();
+
+ ls->label = label;
+ memcpy (&ls->saved_state, &sr->curr, sizeof (ls->saved_state));
+ ls->saved_state.next = dup_state_stack (sr->curr.next);
+
+ /* Insert into list of labeled states. */
+ ls->next = sr->labeled_states;
+ sr->labeled_states = ls;
+}
+
+/*
+ * General descriptors.
+ */
+
+static inline int
+desc_is_active (unsigned char qp, unw_word t, struct unw_state_record *sr)
+{
+ if (sr->when_target <= sr->region_start + MIN ((int)t, sr->region_len - 1))
+ return 0;
+ if (qp > 0)
+ {
+ if ((sr->pr_val & (1UL << qp)) == 0)
+ return 0;
+ sr->pr_mask |= (1UL << qp);
+ }
+ return 1;
+}
+
+static inline void
+desc_restore_p (unsigned char qp, unw_word t, unsigned char abreg,
+ struct unw_state_record *sr)
+{
+ struct unw_reg_info *r;
+
+ if (! desc_is_active (qp, t, sr))
+ return;
+
+ r = sr->curr.reg + decode_abreg (abreg, 0);
+ r->where = UNW_WHERE_NONE;
+ r->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
+ r->val = 0;
+}
+
+static inline void
+desc_spill_reg_p (unsigned char qp, unw_word t, unsigned char abreg,
+ unsigned char x, unsigned char ytreg,
+ struct unw_state_record *sr)
+{
+ enum unw_where where = UNW_WHERE_GR;
+ struct unw_reg_info *r;
+
+ if (! desc_is_active (qp, t, sr))
+ return;
+
+ if (x)
+ where = UNW_WHERE_BR;
+ else if (ytreg & 0x80)
+ where = UNW_WHERE_FR;
+
+ r = sr->curr.reg + decode_abreg (abreg, 0);
+ r->where = where;
+ r->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
+ r->val = ytreg & 0x7f;
+}
+
+static inline void
+desc_spill_psprel_p (unsigned char qp, unw_word t, unsigned char abreg,
+ unw_word pspoff, struct unw_state_record *sr)
+{
+ struct unw_reg_info *r;
+
+ if (! desc_is_active (qp, t, sr))
+ return;
+
+ r = sr->curr.reg + decode_abreg (abreg, 1);
+ r->where = UNW_WHERE_PSPREL;
+ r->when = sr->region_start + MIN((int)t, sr->region_len - 1);
+ r->val = 0x10 - 4*pspoff;
+}
+
+static inline void
+desc_spill_sprel_p (unsigned char qp, unw_word t, unsigned char abreg,
+ unw_word spoff, struct unw_state_record *sr)
+{
+ struct unw_reg_info *r;
+
+ if (! desc_is_active (qp, t, sr))
+ return;
+
+ r = sr->curr.reg + decode_abreg (abreg, 1);
+ r->where = UNW_WHERE_SPREL;
+ r->when = sr->region_start + MIN ((int)t, sr->region_len - 1);
+ r->val = 4*spoff;
+}
+
+
+#define UNW_DEC_BAD_CODE(code) abort ();
+
+/* Region headers. */
+#define UNW_DEC_PROLOGUE_GR(fmt,r,m,gr,arg) desc_prologue(0,r,m,gr,arg)
+#define UNW_DEC_PROLOGUE(fmt,b,r,arg) desc_prologue(b,r,0,32,arg)
+
+/* Prologue descriptors. */
+#define UNW_DEC_ABI(fmt,a,c,arg) desc_abi(a,c,arg)
+#define UNW_DEC_BR_GR(fmt,b,g,arg) desc_br_gr(b,g,arg)
+#define UNW_DEC_BR_MEM(fmt,b,arg) desc_br_mem(b,arg)
+#define UNW_DEC_FRGR_MEM(fmt,g,f,arg) desc_frgr_mem(g,f,arg)
+#define UNW_DEC_FR_MEM(fmt,f,arg) desc_fr_mem(f,arg)
+#define UNW_DEC_GR_GR(fmt,m,g,arg) desc_gr_gr(m,g,arg)
+#define UNW_DEC_GR_MEM(fmt,m,arg) desc_gr_mem(m,arg)
+#define UNW_DEC_MEM_STACK_F(fmt,t,s,arg) desc_mem_stack_f(t,s,arg)
+#define UNW_DEC_MEM_STACK_V(fmt,t,arg) desc_mem_stack_v(t,arg)
+#define UNW_DEC_REG_GR(fmt,r,d,arg) desc_reg_gr(r,d,arg)
+#define UNW_DEC_REG_PSPREL(fmt,r,o,arg) desc_reg_psprel(r,o,arg)
+#define UNW_DEC_REG_SPREL(fmt,r,o,arg) desc_reg_sprel(r,o,arg)
+#define UNW_DEC_REG_WHEN(fmt,r,t,arg) desc_reg_when(r,t,arg)
+#define UNW_DEC_PRIUNAT_WHEN_GR(fmt,t,arg) desc_reg_when(UNW_REG_PRI_UNAT_GR,t,arg)
+#define UNW_DEC_PRIUNAT_WHEN_MEM(fmt,t,arg) desc_reg_when(UNW_REG_PRI_UNAT_MEM,t,arg)
+#define UNW_DEC_PRIUNAT_GR(fmt,r,arg) desc_reg_gr(UNW_REG_PRI_UNAT_GR,r,arg)
+#define UNW_DEC_PRIUNAT_PSPREL(fmt,o,arg) desc_reg_psprel(UNW_REG_PRI_UNAT_MEM,o,arg)
+#define UNW_DEC_PRIUNAT_SPREL(fmt,o,arg) desc_reg_sprel(UNW_REG_PRI_UNAT_MEM,o,arg)
+#define UNW_DEC_RP_BR(fmt,d,arg) desc_rp_br(d,arg)
+#define UNW_DEC_SPILL_BASE(fmt,o,arg) desc_spill_base(o,arg)
+#define UNW_DEC_SPILL_MASK(fmt,m,arg) (m = desc_spill_mask(m,arg))
+
+/* Body descriptors. */
+#define UNW_DEC_EPILOGUE(fmt,t,c,arg) desc_epilogue(t,c,arg)
+#define UNW_DEC_COPY_STATE(fmt,l,arg) desc_copy_state(l,arg)
+#define UNW_DEC_LABEL_STATE(fmt,l,arg) desc_label_state(l,arg)
+
+/* General unwind descriptors. */
+#define UNW_DEC_SPILL_REG_P(f,p,t,a,x,y,arg) desc_spill_reg_p(p,t,a,x,y,arg)
+#define UNW_DEC_SPILL_REG(f,t,a,x,y,arg) desc_spill_reg_p(0,t,a,x,y,arg)
+#define UNW_DEC_SPILL_PSPREL_P(f,p,t,a,o,arg) desc_spill_psprel_p(p,t,a,o,arg)
+#define UNW_DEC_SPILL_PSPREL(f,t,a,o,arg) desc_spill_psprel_p(0,t,a,o,arg)
+#define UNW_DEC_SPILL_SPREL_P(f,p,t,a,o,arg) desc_spill_sprel_p(p,t,a,o,arg)
+#define UNW_DEC_SPILL_SPREL(f,t,a,o,arg) desc_spill_sprel_p(0,t,a,o,arg)
+#define UNW_DEC_RESTORE_P(f,p,t,a,arg) desc_restore_p(p,t,a,arg)
+#define UNW_DEC_RESTORE(f,t,a,arg) desc_restore_p(0,t,a,arg)
+
+
+/*
+ * Generic IA-64 unwind info decoder.
+ *
+ * This file is used both by the Linux kernel and objdump. Please keep
+ * the copies of this file in sync.
+ *
+ * You need to customize the decoder by defining the following
+ * macros/constants before including this file:
+ *
+ * Types:
+ * unw_word Unsigned integer type with at least 64 bits
+ *
+ * Register names:
+ * UNW_REG_BSP
+ * UNW_REG_BSPSTORE
+ * UNW_REG_FPSR
+ * UNW_REG_LC
+ * UNW_REG_PFS
+ * UNW_REG_PR
+ * UNW_REG_RNAT
+ * UNW_REG_PSP
+ * UNW_REG_RP
+ * UNW_REG_UNAT
+ *
+ * Decoder action macros:
+ * UNW_DEC_BAD_CODE(code)
+ * UNW_DEC_ABI(fmt,abi,context,arg)
+ * UNW_DEC_BR_GR(fmt,brmask,gr,arg)
+ * UNW_DEC_BR_MEM(fmt,brmask,arg)
+ * UNW_DEC_COPY_STATE(fmt,label,arg)
+ * UNW_DEC_EPILOGUE(fmt,t,ecount,arg)
+ * UNW_DEC_FRGR_MEM(fmt,grmask,frmask,arg)
+ * UNW_DEC_FR_MEM(fmt,frmask,arg)
+ * UNW_DEC_GR_GR(fmt,grmask,gr,arg)
+ * UNW_DEC_GR_MEM(fmt,grmask,arg)
+ * UNW_DEC_LABEL_STATE(fmt,label,arg)
+ * UNW_DEC_MEM_STACK_F(fmt,t,size,arg)
+ * UNW_DEC_MEM_STACK_V(fmt,t,arg)
+ * UNW_DEC_PRIUNAT_GR(fmt,r,arg)
+ * UNW_DEC_PRIUNAT_WHEN_GR(fmt,t,arg)
+ * UNW_DEC_PRIUNAT_WHEN_MEM(fmt,t,arg)
+ * UNW_DEC_PRIUNAT_WHEN_PSPREL(fmt,pspoff,arg)
+ * UNW_DEC_PRIUNAT_WHEN_SPREL(fmt,spoff,arg)
+ * UNW_DEC_PROLOGUE(fmt,body,rlen,arg)
+ * UNW_DEC_PROLOGUE_GR(fmt,rlen,mask,grsave,arg)
+ * UNW_DEC_REG_PSPREL(fmt,reg,pspoff,arg)
+ * UNW_DEC_REG_REG(fmt,src,dst,arg)
+ * UNW_DEC_REG_SPREL(fmt,reg,spoff,arg)
+ * UNW_DEC_REG_WHEN(fmt,reg,t,arg)
+ * UNW_DEC_RESTORE(fmt,t,abreg,arg)
+ * UNW_DEC_RESTORE_P(fmt,qp,t,abreg,arg)
+ * UNW_DEC_SPILL_BASE(fmt,pspoff,arg)
+ * UNW_DEC_SPILL_MASK(fmt,imaskp,arg)
+ * UNW_DEC_SPILL_PSPREL(fmt,t,abreg,pspoff,arg)
+ * UNW_DEC_SPILL_PSPREL_P(fmt,qp,t,abreg,pspoff,arg)
+ * UNW_DEC_SPILL_REG(fmt,t,abreg,x,ytreg,arg)
+ * UNW_DEC_SPILL_REG_P(fmt,qp,t,abreg,x,ytreg,arg)
+ * UNW_DEC_SPILL_SPREL(fmt,t,abreg,spoff,arg)
+ * UNW_DEC_SPILL_SPREL_P(fmt,qp,t,abreg,pspoff,arg)
+ */
+
+static unw_word
+unw_decode_uleb128 (unsigned char **dpp)
+{
+ unsigned shift = 0;
+ unw_word byte, result = 0;
+ unsigned char *bp = *dpp;
+
+ while (1)
+ {
+ byte = *bp++;
+ result |= (byte & 0x7f) << shift;
+ if ((byte & 0x80) == 0)
+ break;
+ shift += 7;
+ }
+ *dpp = bp;
+ return result;
+}
+
+static unsigned char *
+unw_decode_x1 (unsigned char *dp,
+ unsigned char code __attribute__((unused)),
+ void *arg)
+{
+ unsigned char byte1, abreg;
+ unw_word t, off;
+
+ byte1 = *dp++;
+ t = unw_decode_uleb128 (&dp);
+ off = unw_decode_uleb128 (&dp);
+ abreg = (byte1 & 0x7f);
+ if (byte1 & 0x80)
+ UNW_DEC_SPILL_SPREL(X1, t, abreg, off, arg);
+ else
+ UNW_DEC_SPILL_PSPREL(X1, t, abreg, off, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_x2 (unsigned char *dp,
+ unsigned char code __attribute__((unused)),
+ void *arg)
+{
+ unsigned char byte1, byte2, abreg, x, ytreg;
+ unw_word t;
+
+ byte1 = *dp++; byte2 = *dp++;
+ t = unw_decode_uleb128 (&dp);
+ abreg = (byte1 & 0x7f);
+ ytreg = byte2;
+ x = (byte1 >> 7) & 1;
+ if ((byte1 & 0x80) == 0 && ytreg == 0)
+ UNW_DEC_RESTORE(X2, t, abreg, arg);
+ else
+ UNW_DEC_SPILL_REG(X2, t, abreg, x, ytreg, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_x3 (unsigned char *dp,
+ unsigned char code __attribute__((unused)),
+ void *arg)
+{
+ unsigned char byte1, byte2, abreg, qp;
+ unw_word t, off;
+
+ byte1 = *dp++; byte2 = *dp++;
+ t = unw_decode_uleb128 (&dp);
+ off = unw_decode_uleb128 (&dp);
+
+ qp = (byte1 & 0x3f);
+ abreg = (byte2 & 0x7f);
+
+ if (byte1 & 0x80)
+ UNW_DEC_SPILL_SPREL_P(X3, qp, t, abreg, off, arg);
+ else
+ UNW_DEC_SPILL_PSPREL_P(X3, qp, t, abreg, off, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_x4 (unsigned char *dp,
+ unsigned char code __attribute__((unused)),
+ void *arg)
+{
+ unsigned char byte1, byte2, byte3, qp, abreg, x, ytreg;
+ unw_word t;
+
+ byte1 = *dp++; byte2 = *dp++; byte3 = *dp++;
+ t = unw_decode_uleb128 (&dp);
+
+ qp = (byte1 & 0x3f);
+ abreg = (byte2 & 0x7f);
+ x = (byte2 >> 7) & 1;
+ ytreg = byte3;
+
+ if ((byte2 & 0x80) == 0 && byte3 == 0)
+ UNW_DEC_RESTORE_P(X4, qp, t, abreg, arg);
+ else
+ UNW_DEC_SPILL_REG_P(X4, qp, t, abreg, x, ytreg, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_r1 (unsigned char *dp, unsigned char code, void *arg)
+{
+ int body = (code & 0x20) != 0;
+ unw_word rlen;
+
+ rlen = (code & 0x1f);
+ UNW_DEC_PROLOGUE(R1, body, rlen, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_r2 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unsigned char byte1, mask, grsave;
+ unw_word rlen;
+
+ byte1 = *dp++;
+
+ mask = ((code & 0x7) << 1) | ((byte1 >> 7) & 1);
+ grsave = (byte1 & 0x7f);
+ rlen = unw_decode_uleb128 (&dp);
+ UNW_DEC_PROLOGUE_GR(R2, rlen, mask, grsave, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_r3 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unw_word rlen;
+
+ rlen = unw_decode_uleb128 (&dp);
+ UNW_DEC_PROLOGUE(R3, ((code & 0x3) == 1), rlen, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_p1 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unsigned char brmask = (code & 0x1f);
+
+ UNW_DEC_BR_MEM(P1, brmask, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_p2_p5 (unsigned char *dp, unsigned char code, void *arg)
+{
+ if ((code & 0x10) == 0)
+ {
+ unsigned char byte1 = *dp++;
+
+ UNW_DEC_BR_GR(P2, ((code & 0xf) << 1) | ((byte1 >> 7) & 1),
+ (byte1 & 0x7f), arg);
+ }
+ else if ((code & 0x08) == 0)
+ {
+ unsigned char byte1 = *dp++, r, dst;
+
+ r = ((code & 0x7) << 1) | ((byte1 >> 7) & 1);
+ dst = (byte1 & 0x7f);
+ switch (r)
+ {
+ case 0: UNW_DEC_REG_GR(P3, UNW_REG_PSP, dst, arg); break;
+ case 1: UNW_DEC_REG_GR(P3, UNW_REG_RP, dst, arg); break;
+ case 2: UNW_DEC_REG_GR(P3, UNW_REG_PFS, dst, arg); break;
+ case 3: UNW_DEC_REG_GR(P3, UNW_REG_PR, dst, arg); break;
+ case 4: UNW_DEC_REG_GR(P3, UNW_REG_UNAT, dst, arg); break;
+ case 5: UNW_DEC_REG_GR(P3, UNW_REG_LC, dst, arg); break;
+ case 6: UNW_DEC_RP_BR(P3, dst, arg); break;
+ case 7: UNW_DEC_REG_GR(P3, UNW_REG_RNAT, dst, arg); break;
+ case 8: UNW_DEC_REG_GR(P3, UNW_REG_BSP, dst, arg); break;
+ case 9: UNW_DEC_REG_GR(P3, UNW_REG_BSPSTORE, dst, arg); break;
+ case 10: UNW_DEC_REG_GR(P3, UNW_REG_FPSR, dst, arg); break;
+ case 11: UNW_DEC_PRIUNAT_GR(P3, dst, arg); break;
+ default: UNW_DEC_BAD_CODE(r); break;
+ }
+ }
+ else if ((code & 0x7) == 0)
+ UNW_DEC_SPILL_MASK(P4, dp, arg);
+ else if ((code & 0x7) == 1)
+ {
+ unw_word grmask, frmask, byte1, byte2, byte3;
+
+ byte1 = *dp++; byte2 = *dp++; byte3 = *dp++;
+ grmask = ((byte1 >> 4) & 0xf);
+ frmask = ((byte1 & 0xf) << 16) | (byte2 << 8) | byte3;
+ UNW_DEC_FRGR_MEM(P5, grmask, frmask, arg);
+ }
+ else
+ UNW_DEC_BAD_CODE(code);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_p6 (unsigned char *dp, unsigned char code, void *arg)
+{
+ int gregs = (code & 0x10) != 0;
+ unsigned char mask = (code & 0x0f);
+
+ if (gregs)
+ UNW_DEC_GR_MEM(P6, mask, arg);
+ else
+ UNW_DEC_FR_MEM(P6, mask, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_p7_p10 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unsigned char r, byte1, byte2;
+ unw_word t, size;
+
+ if ((code & 0x10) == 0)
+ {
+ r = (code & 0xf);
+ t = unw_decode_uleb128 (&dp);
+ switch (r)
+ {
+ case 0:
+ size = unw_decode_uleb128 (&dp);
+ UNW_DEC_MEM_STACK_F(P7, t, size, arg);
+ break;
+
+ case 1: UNW_DEC_MEM_STACK_V(P7, t, arg); break;
+ case 2: UNW_DEC_SPILL_BASE(P7, t, arg); break;
+ case 3: UNW_DEC_REG_SPREL(P7, UNW_REG_PSP, t, arg); break;
+ case 4: UNW_DEC_REG_WHEN(P7, UNW_REG_RP, t, arg); break;
+ case 5: UNW_DEC_REG_PSPREL(P7, UNW_REG_RP, t, arg); break;
+ case 6: UNW_DEC_REG_WHEN(P7, UNW_REG_PFS, t, arg); break;
+ case 7: UNW_DEC_REG_PSPREL(P7, UNW_REG_PFS, t, arg); break;
+ case 8: UNW_DEC_REG_WHEN(P7, UNW_REG_PR, t, arg); break;
+ case 9: UNW_DEC_REG_PSPREL(P7, UNW_REG_PR, t, arg); break;
+ case 10: UNW_DEC_REG_WHEN(P7, UNW_REG_LC, t, arg); break;
+ case 11: UNW_DEC_REG_PSPREL(P7, UNW_REG_LC, t, arg); break;
+ case 12: UNW_DEC_REG_WHEN(P7, UNW_REG_UNAT, t, arg); break;
+ case 13: UNW_DEC_REG_PSPREL(P7, UNW_REG_UNAT, t, arg); break;
+ case 14: UNW_DEC_REG_WHEN(P7, UNW_REG_FPSR, t, arg); break;
+ case 15: UNW_DEC_REG_PSPREL(P7, UNW_REG_FPSR, t, arg); break;
+ default: UNW_DEC_BAD_CODE(r); break;
+ }
+ }
+ else
+ {
+ switch (code & 0xf)
+ {
+ case 0x0: /* p8 */
+ {
+ r = *dp++;
+ t = unw_decode_uleb128 (&dp);
+ switch (r)
+ {
+ case 1: UNW_DEC_REG_SPREL(P8, UNW_REG_RP, t, arg); break;
+ case 2: UNW_DEC_REG_SPREL(P8, UNW_REG_PFS, t, arg); break;
+ case 3: UNW_DEC_REG_SPREL(P8, UNW_REG_PR, t, arg); break;
+ case 4: UNW_DEC_REG_SPREL(P8, UNW_REG_LC, t, arg); break;
+ case 5: UNW_DEC_REG_SPREL(P8, UNW_REG_UNAT, t, arg); break;
+ case 6: UNW_DEC_REG_SPREL(P8, UNW_REG_FPSR, t, arg); break;
+ case 7: UNW_DEC_REG_WHEN(P8, UNW_REG_BSP, t, arg); break;
+ case 8: UNW_DEC_REG_PSPREL(P8, UNW_REG_BSP, t, arg); break;
+ case 9: UNW_DEC_REG_SPREL(P8, UNW_REG_BSP, t, arg); break;
+ case 10: UNW_DEC_REG_WHEN(P8, UNW_REG_BSPSTORE, t, arg); break;
+ case 11: UNW_DEC_REG_PSPREL(P8, UNW_REG_BSPSTORE, t, arg); break;
+ case 12: UNW_DEC_REG_SPREL(P8, UNW_REG_BSPSTORE, t, arg); break;
+ case 13: UNW_DEC_REG_WHEN(P8, UNW_REG_RNAT, t, arg); break;
+ case 14: UNW_DEC_REG_PSPREL(P8, UNW_REG_RNAT, t, arg); break;
+ case 15: UNW_DEC_REG_SPREL(P8, UNW_REG_RNAT, t, arg); break;
+ case 16: UNW_DEC_PRIUNAT_WHEN_GR(P8, t, arg); break;
+ case 17: UNW_DEC_PRIUNAT_PSPREL(P8, t, arg); break;
+ case 18: UNW_DEC_PRIUNAT_SPREL(P8, t, arg); break;
+ case 19: UNW_DEC_PRIUNAT_WHEN_MEM(P8, t, arg); break;
+ default: UNW_DEC_BAD_CODE(r); break;
+ }
+ }
+ break;
+
+ case 0x1:
+ byte1 = *dp++; byte2 = *dp++;
+ UNW_DEC_GR_GR(P9, (byte1 & 0xf), (byte2 & 0x7f), arg);
+ break;
+
+ case 0xf: /* p10 */
+ byte1 = *dp++; byte2 = *dp++;
+ UNW_DEC_ABI(P10, byte1, byte2, arg);
+ break;
+
+ case 0x9:
+ return unw_decode_x1 (dp, code, arg);
+
+ case 0xa:
+ return unw_decode_x2 (dp, code, arg);
+
+ case 0xb:
+ return unw_decode_x3 (dp, code, arg);
+
+ case 0xc:
+ return unw_decode_x4 (dp, code, arg);
+
+ default:
+ UNW_DEC_BAD_CODE(code);
+ break;
+ }
+ }
+ return dp;
+}
+
+static unsigned char *
+unw_decode_b1 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unw_word label = (code & 0x1f);
+
+ if ((code & 0x20) != 0)
+ UNW_DEC_COPY_STATE(B1, label, arg);
+ else
+ UNW_DEC_LABEL_STATE(B1, label, arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_b2 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unw_word t;
+
+ t = unw_decode_uleb128 (&dp);
+ UNW_DEC_EPILOGUE(B2, t, (code & 0x1f), arg);
+ return dp;
+}
+
+static unsigned char *
+unw_decode_b3_x4 (unsigned char *dp, unsigned char code, void *arg)
+{
+ unw_word t, ecount, label;
+
+ if ((code & 0x10) == 0)
+ {
+ t = unw_decode_uleb128 (&dp);
+ ecount = unw_decode_uleb128 (&dp);
+ UNW_DEC_EPILOGUE(B3, t, ecount, arg);
+ }
+ else if ((code & 0x07) == 0)
+ {
+ label = unw_decode_uleb128 (&dp);
+ if ((code & 0x08) != 0)
+ UNW_DEC_COPY_STATE(B4, label, arg);
+ else
+ UNW_DEC_LABEL_STATE(B4, label, arg);
+ }
+ else
+ switch (code & 0x7)
+ {
+ case 1: return unw_decode_x1 (dp, code, arg);
+ case 2: return unw_decode_x2 (dp, code, arg);
+ case 3: return unw_decode_x3 (dp, code, arg);
+ case 4: return unw_decode_x4 (dp, code, arg);
+ default: UNW_DEC_BAD_CODE(code); break;
+ }
+ return dp;
+}
+
+typedef unsigned char *(*unw_decoder) (unsigned char *, unsigned char, void *);
+
+static const unw_decoder unw_decode_table[2][8] =
+{
+ /* prologue table: */
+ {
+ unw_decode_r1, /* 0 */
+ unw_decode_r1,
+ unw_decode_r2,
+ unw_decode_r3,
+ unw_decode_p1, /* 4 */
+ unw_decode_p2_p5,
+ unw_decode_p6,
+ unw_decode_p7_p10
+ },
+ {
+ unw_decode_r1, /* 0 */
+ unw_decode_r1,
+ unw_decode_r2,
+ unw_decode_r3,
+ unw_decode_b1, /* 4 */
+ unw_decode_b1,
+ unw_decode_b2,
+ unw_decode_b3_x4
+ }
+};
+
+/*
+ * Decode one descriptor and return address of next descriptor.
+ */
+static inline unsigned char *
+unw_decode (unsigned char *dp, int inside_body, void *arg)
+{
+ unw_decoder decoder;
+ unsigned char code;
+
+ code = *dp++;
+ decoder = unw_decode_table[inside_body][code >> 5];
+ dp = (*decoder) (dp, code, arg);
+ return dp;
+}
+
+
+/* RSE helper functions. */
+
+static inline unw_word
+ia64_rse_slot_num (unw_word *addr)
+{
+ return (((unw_word) addr) >> 3) & 0x3f;
+}
+
+/* Return TRUE if ADDR is the address of an RNAT slot. */
+static inline unw_word
+ia64_rse_is_rnat_slot (unw_word *addr)
+{
+ return ia64_rse_slot_num (addr) == 0x3f;
+}
+
+/* Returns the address of the RNAT slot that covers the slot at
+ address SLOT_ADDR. */
+static inline unw_word *
+ia64_rse_rnat_addr (unw_word *slot_addr)
+{
+ return (unw_word *) ((unw_word) slot_addr | (0x3f << 3));
+}
+
+/* Calculate the number of registers in the dirty partition starting at
+ BSPSTORE with a size of DIRTY bytes. This isn't simply DIRTY
+ divided by eight because the 64th slot is used to store ar.rnat. */
+static inline unw_word
+ia64_rse_num_regs (unw_word *bspstore, unw_word *bsp)
+{
+ unw_word slots = (bsp - bspstore);
+
+ return slots - (ia64_rse_slot_num (bspstore) + slots)/0x40;
+}
+
+/* The inverse of the above: given bspstore and the number of
+ registers, calculate ar.bsp. */
+static inline unw_word *
+ia64_rse_skip_regs (unw_word *addr, int num_regs)
+{
+ int delta = ia64_rse_slot_num (addr) + num_regs;
+
+ if (num_regs < 0)
+ delta -= 0x3e;
+ return addr + num_regs + delta/0x3f;
+}
+
+
+/* Copy register backing store from SRC to DST, LEN words
+ (which include both saved registers and nat collections).
+ DST_RNAT is a partial nat collection for DST. SRC and DST
+ don't have to be equal modulo 64 slots, so it cannot be
+ done with a simple memcpy as the nat collections will be
+ at different relative offsets and need to be combined together. */
+static void
+ia64_copy_rbs (struct _Unwind_Context *info, unw_word dst,
+ unw_word src, unw_word len, unw_word dst_rnat)
+{
+ unw_word count;
+ unw_word src_rnat;
+ unw_word shift1, shift2;
+
+ len <<= 3;
+ dst_rnat &= (1ULL << ((dst >> 3) & 0x3f)) - 1;
+ src_rnat = src >= info->regstk_top
+ ? info->rnat : *(unw_word *) (src | 0x1f8);
+ src_rnat &= ~((1ULL << ((src >> 3) & 0x3f)) - 1);
+ /* Just to make sure. */
+ src_rnat &= ~(1ULL << 63);
+ shift1 = ((dst - src) >> 3) & 0x3f;
+ if ((dst & 0x1f8) < (src & 0x1f8))
+ shift1--;
+ shift2 = 0x3f - shift1;
+ if ((dst & 0x1f8) >= (src & 0x1f8))
+ {
+ count = ~dst & 0x1f8;
+ goto first;
+ }
+ count = ~src & 0x1f8;
+ goto second;
+ while (len > 0)
+ {
+ src_rnat = src >= info->regstk_top
+ ? info->rnat : *(unw_word *) (src | 0x1f8);
+ /* Just to make sure. */
+ src_rnat &= ~(1ULL << 63);
+ count = shift2 << 3;
+first:
+ if (count > len)
+ count = len;
+ memcpy ((char *) dst, (char *) src, count);
+ dst += count;
+ src += count;
+ len -= count;
+ dst_rnat |= (src_rnat << shift1) & ~(1ULL << 63);
+ if (len <= 0)
+ break;
+ *(unw_word *) dst = dst_rnat;
+ dst += 8;
+ dst_rnat = 0;
+ count = shift1 << 3;
+second:
+ if (count > len)
+ count = len;
+ memcpy ((char *) dst, (char *) src, count);
+ dst += count;
+ src += count + 8;
+ len -= count + 8;
+ dst_rnat |= (src_rnat >> shift2);
+ }
+ if ((dst & 0x1f8) == 0x1f8)
+ {
+ *(unw_word *) dst = dst_rnat;
+ dst += 8;
+ dst_rnat = 0;
+ }
+ /* Set info->regstk_top to lowest rbs address which will use
+ info->rnat collection. */
+ info->regstk_top = dst & ~0x1ffULL;
+ info->rnat = dst_rnat;
+}
+
+/* Unwind accessors. */
+
+static void
+unw_access_gr (struct _Unwind_Context *info, int regnum,
+ unw_word *val, char *nat, int write)
+{
+ unw_word *addr, *nat_addr = 0, nat_mask = 0, dummy_nat;
+ struct unw_ireg *ireg;
+
+ if ((unsigned) regnum - 1 >= 127)
+ abort ();
+
+ if (regnum < 1)
+ {
+ nat_addr = addr = &dummy_nat;
+ dummy_nat = 0;
+ }
+ else if (regnum < 32)
+ {
+ /* Access a non-stacked register. */
+ ireg = &info->ireg[regnum - 2];
+ addr = ireg->loc;
+ if (addr)
+ {
+ nat_addr = addr + ireg->nat.off;
+ switch (ireg->nat.type)
+ {
+ case UNW_NAT_VAL:
+ /* Simulate getf.sig/setf.sig. */
+ if (write)
+ {
+ if (*nat)
+ {
+ /* Write NaTVal and be done with it. */
+ addr[0] = 0;
+ addr[1] = 0x1fffe;
+ return;
+ }
+ addr[1] = 0x1003e;
+ }
+ else if (addr[0] == 0 && addr[1] == 0x1ffe)
+ {
+ /* Return NaT and be done with it. */
+ *val = 0;
+ *nat = 1;
+ return;
+ }
+ /* FALLTHRU */
+
+ case UNW_NAT_NONE:
+ dummy_nat = 0;
+ nat_addr = &dummy_nat;
+ break;
+
+ case UNW_NAT_MEMSTK:
+ nat_mask = 1UL << ((unw_word) addr & 0x1f8)/8;
+ break;
+
+ case UNW_NAT_REGSTK:
+ if ((unw_word) addr >= info->regstk_top)
+ nat_addr = &info->rnat;
+ else
+ nat_addr = ia64_rse_rnat_addr (addr);
+ nat_mask = 1ULL << ia64_rse_slot_num (addr);
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* Access a stacked register. */
+ addr = ia64_rse_skip_regs ((unw_word *) info->bsp, regnum - 32);
+ if ((unw_word) addr >= info->regstk_top)
+ nat_addr = &info->rnat;
+ else
+ nat_addr = ia64_rse_rnat_addr (addr);
+ nat_mask = 1UL << ia64_rse_slot_num (addr);
+ }
+
+ if (write)
+ {
+ *addr = *val;
+ if (*nat)
+ *nat_addr |= nat_mask;
+ else
+ *nat_addr &= ~nat_mask;
+ }
+ else
+ {
+ *val = *addr;
+ *nat = (*nat_addr & nat_mask) != 0;
+ }
+}
+
+/* Get the value of register REG as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetGR (struct _Unwind_Context *context, int index)
+{
+ _Unwind_Word ret;
+ char nat;
+
+ if (index == 1)
+ return context->gp;
+ else if (index >= 15 && index <= 18)
+ return context->eh_data[index - 15];
+ else
+ unw_access_gr (context, index, &ret, &nat, 0);
+
+ return ret;
+}
+
+/* Overwrite the saved value for register REG in CONTEXT with VAL. */
+
+void
+_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
+{
+ char nat = 0;
+
+ if (index == 1)
+ context->gp = val;
+ else if (index >= 15 && index <= 18)
+ context->eh_data[index - 15] = val;
+ else
+ unw_access_gr (context, index, &val, &nat, 1);
+}
+
+/* Retrieve the return address for CONTEXT. */
+
+inline _Unwind_Ptr
+_Unwind_GetIP (struct _Unwind_Context *context)
+{
+ return context->rp;
+}
+
+inline _Unwind_Ptr
+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn)
+{
+ *ip_before_insn = 0;
+ return context->rp;
+}
+
+/* Overwrite the return address for CONTEXT with VAL. */
+
+inline void
+_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+{
+ context->rp = val;
+}
+
+void *
+_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context)
+{
+ return context->lsda;
+}
+
+_Unwind_Ptr
+_Unwind_GetRegionStart (struct _Unwind_Context *context)
+{
+ return context->region_start;
+}
+
+void *
+_Unwind_FindEnclosingFunction (void *pc)
+{
+ struct unw_table_entry *entp, ent;
+ unw_word segment_base, gp;
+
+ entp = _Unwind_FindTableEntry (pc, &segment_base, &gp, &ent);
+ if (entp == NULL)
+ return NULL;
+ else
+ return (void *)(segment_base + entp->start_offset);
+}
+
+/* Get the value of the CFA as saved in CONTEXT. In GCC/Dwarf2 parlance,
+ the CFA is the value of the stack pointer on entry; In IA-64 unwind
+ parlance, this is the PSP. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->psp;
+}
+
+/* Get the value of the Backing Store Pointer as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetBSP (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bsp;
+}
+
+#include "md-unwind-support.h"
+
+/* By default, assume personality routine interface compatibility with
+ our expectations. */
+#ifndef MD_UNW_COMPATIBLE_PERSONALITY_P
+#define MD_UNW_COMPATIBLE_PERSONALITY_P(HEADER) 1
+#endif
+
+
+static _Unwind_Reason_Code
+uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ struct unw_table_entry *entp, ent;
+ unw_word *unw, header, length;
+ unsigned char *insn, *insn_end;
+ unw_word segment_base;
+ struct unw_reg_info *r;
+
+ memset (fs, 0, sizeof (*fs));
+ for (r = fs->curr.reg; r < fs->curr.reg + UNW_NUM_REGS; ++r)
+ r->when = UNW_WHEN_NEVER;
+ context->lsda = 0;
+
+ entp = _Unwind_FindTableEntry ((void *) context->rp,
+ &segment_base, &context->gp, &ent);
+ if (entp == NULL)
+ {
+ /* Couldn't find unwind info for this function. Try an
+ os-specific fallback mechanism. This will necessarily
+ not provide a personality routine or LSDA. */
+#ifdef MD_FALLBACK_FRAME_STATE_FOR
+ if (MD_FALLBACK_FRAME_STATE_FOR (context, fs) == _URC_NO_REASON)
+ return _URC_NO_REASON;
+#endif
+
+ /* [SCRA 11.4.1] A leaf function with no memory stack, no exception
+ handlers, and which keeps the return value in B0 does not need
+ an unwind table entry.
+
+ This can only happen in the frame after unwinding through a signal
+ handler. Avoid infinite looping by requiring that B0 != RP.
+ RP == 0 terminates the chain. */
+ if (context->br_loc[0]
+ && *context->br_loc[0] != context->rp
+ && context->rp != 0)
+ goto skip_unwind_info;
+
+ return _URC_END_OF_STACK;
+ }
+
+ context->region_start = entp->start_offset + segment_base;
+ fs->when_target = ((context->rp & -16) - context->region_start) / 16 * 3
+ + (context->rp & 15);
+
+ unw = (unw_word *) (entp->info_offset + segment_base);
+ header = *unw;
+ length = UNW_LENGTH (header);
+
+ /* Some operating systems use the personality routine slot in way not
+ compatible with what we expect. For instance, OpenVMS uses this slot to
+ designate "condition handlers" with very different arguments than what we
+ would be providing. Such cases are typically identified from OS specific
+ bits in the unwind information block header, and checked by the target
+ MD_UNW_COMPATIBLE_PERSONALITY_P macro.
+
+ We just pretend there is no personality from our standpoint in such
+ situations, and expect GCC not to set the identifying bits itself so that
+ compatible personalities for GCC compiled code are called.
+
+ Of course, this raises the question of what combinations of native/GCC
+ calls can be expected to behave properly exception handling-wise. We are
+ not to provide a magic answer here, merely to prevent crashes assuming
+ users know what they are doing.
+
+ ??? Perhaps check UNW_VER / UNW_FLAG_OSMASK as well. */
+
+ if (MD_UNW_COMPATIBLE_PERSONALITY_P (header)
+ && (UNW_FLAG_EHANDLER (header) | UNW_FLAG_UHANDLER (header)))
+ {
+ fs->personality =
+ *(_Unwind_Personality_Fn *) (unw[length + 1] + context->gp);
+ context->lsda = unw + length + 2;
+ }
+
+ insn = (unsigned char *) (unw + 1);
+ insn_end = (unsigned char *) (unw + 1 + length);
+ while (!fs->done && insn < insn_end)
+ insn = unw_decode (insn, fs->in_body, fs);
+
+ free_label_states (fs->labeled_states);
+ free_state_stack (&fs->curr);
+
+#ifdef ENABLE_MALLOC_CHECKING
+ if (reg_state_alloced || labeled_state_alloced)
+ abort ();
+#endif
+
+ /* If we're in the epilogue, sp has been restored and all values
+ on the memory stack below psp also have been restored. */
+ if (fs->when_target > fs->epilogue_start)
+ {
+ struct unw_reg_info *r;
+
+ fs->curr.reg[UNW_REG_PSP].where = UNW_WHERE_NONE;
+ fs->curr.reg[UNW_REG_PSP].val = 0;
+ for (r = fs->curr.reg; r < fs->curr.reg + UNW_NUM_REGS; ++r)
+ if ((r->where == UNW_WHERE_PSPREL && r->val <= 0x10)
+ || r->where == UNW_WHERE_SPREL)
+ r->where = UNW_WHERE_NONE;
+ }
+
+skip_unwind_info:
+ /* If RP didn't get saved, generate entry for the return link register. */
+ if (fs->curr.reg[UNW_REG_RP].when >= fs->when_target)
+ {
+ fs->curr.reg[UNW_REG_RP].where = UNW_WHERE_BR;
+ fs->curr.reg[UNW_REG_RP].when = -1;
+ fs->curr.reg[UNW_REG_RP].val = fs->return_link_reg;
+ }
+
+ /* There is a subtlety for the frame after unwinding through a signal
+ handler: should we restore the cfm as usual or the pfs? We can't
+ restore both because we use br.ret to resume execution of user code.
+ For other frames the procedure is by definition non-leaf so the pfs
+ is saved and restored and thus effectively dead in the body; only
+ the cfm need therefore be restored.
+
+ Here we have 2 cases:
+ - either the pfs is saved and restored and thus effectively dead
+ like in regular frames; then we do nothing special and restore
+ the cfm.
+ - or the pfs is not saved and thus live; but in that case the
+ procedure is necessarily leaf so the cfm is effectively dead
+ and we restore the pfs. */
+ if (context->signal_pfs_loc)
+ {
+ if (fs->curr.reg[UNW_REG_PFS].when >= fs->when_target)
+ context->pfs_loc = context->signal_pfs_loc;
+ context->signal_pfs_loc = NULL;
+ }
+
+ return _URC_NO_REASON;
+}
+
+static void
+uw_update_reg_address (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs,
+ enum unw_register_index regno)
+{
+ struct unw_reg_info *r = fs->curr.reg + regno;
+ void *addr;
+ unw_word rval;
+
+ if (r->where == UNW_WHERE_NONE || r->when >= fs->when_target)
+ return;
+
+ rval = r->val;
+ switch (r->where)
+ {
+ case UNW_WHERE_GR:
+ if (rval >= 32)
+ addr = ia64_rse_skip_regs ((unw_word *) context->bsp, rval - 32);
+ else if (rval >= 2)
+ addr = context->ireg[rval - 2].loc;
+ else if (rval == 0)
+ {
+ static const unw_word dummy;
+ addr = (void *) &dummy;
+ }
+ else
+ abort ();
+ break;
+
+ case UNW_WHERE_FR:
+ if (rval >= 2 && rval < 32)
+ addr = context->fr_loc[rval - 2];
+ else
+ abort ();
+ break;
+
+ case UNW_WHERE_BR:
+ /* Note that while RVAL can only be 1-5 from normal descriptors,
+ we can want to look at B0, B6 and B7 due to having manually unwound a
+ signal frame. */
+ if (rval < 8)
+ addr = context->br_loc[rval];
+ else
+ abort ();
+ break;
+
+ case UNW_WHERE_SPREL:
+ addr = (void *)(context->sp + rval);
+ break;
+
+ case UNW_WHERE_PSPREL:
+ addr = (void *)(context->psp + rval);
+ break;
+
+ default:
+ abort ();
+ }
+
+ switch (regno)
+ {
+ case UNW_REG_R2 ... UNW_REG_R31:
+ context->ireg[regno - UNW_REG_R2].loc = addr;
+ switch (r->where)
+ {
+ case UNW_WHERE_GR:
+ if (rval >= 32)
+ {
+ context->ireg[regno - UNW_REG_R2].nat.type = UNW_NAT_MEMSTK;
+ context->ireg[regno - UNW_REG_R2].nat.off
+ = context->pri_unat_loc - (unw_word *) addr;
+ }
+ else if (rval >= 2)
+ {
+ context->ireg[regno - UNW_REG_R2].nat
+ = context->ireg[rval - 2].nat;
+ }
+ else if (rval == 0)
+ {
+ context->ireg[regno - UNW_REG_R2].nat.type = UNW_NAT_NONE;
+ context->ireg[regno - UNW_REG_R2].nat.off = 0;
+ }
+ else
+ abort ();
+ break;
+
+ case UNW_WHERE_FR:
+ context->ireg[regno - UNW_REG_R2].nat.type = UNW_NAT_VAL;
+ context->ireg[regno - UNW_REG_R2].nat.off = 0;
+ break;
+
+ case UNW_WHERE_BR:
+ context->ireg[regno - UNW_REG_R2].nat.type = UNW_NAT_NONE;
+ context->ireg[regno - UNW_REG_R2].nat.off = 0;
+ break;
+
+ case UNW_WHERE_PSPREL:
+ case UNW_WHERE_SPREL:
+ context->ireg[regno - UNW_REG_R2].nat.type = UNW_NAT_MEMSTK;
+ context->ireg[regno - UNW_REG_R2].nat.off
+ = context->pri_unat_loc - (unw_word *) addr;
+ break;
+
+ default:
+ abort ();
+ }
+ break;
+
+ case UNW_REG_F2 ... UNW_REG_F31:
+ context->fr_loc[regno - UNW_REG_F2] = addr;
+ break;
+
+ case UNW_REG_B1 ... UNW_REG_B5:
+ context->br_loc[regno - UNW_REG_B0] = addr;
+ break;
+
+ case UNW_REG_BSP:
+ context->bsp_loc = addr;
+ break;
+ case UNW_REG_BSPSTORE:
+ context->bspstore_loc = addr;
+ break;
+ case UNW_REG_PFS:
+ context->pfs_loc = addr;
+ break;
+ case UNW_REG_RP:
+ context->rp = *(unw_word *)addr;
+ break;
+ case UNW_REG_UNAT:
+ context->unat_loc = addr;
+ break;
+ case UNW_REG_PR:
+ context->pr = *(unw_word *) addr;
+ break;
+ case UNW_REG_LC:
+ context->lc_loc = addr;
+ break;
+ case UNW_REG_FPSR:
+ context->fpsr_loc = addr;
+ break;
+
+ case UNW_REG_PSP:
+ context->psp = *(unw_word *)addr;
+ break;
+
+ default:
+ abort ();
+ }
+}
+
+static void
+uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ int i;
+
+#ifdef MD_HANDLE_UNWABI
+ MD_HANDLE_UNWABI (context, fs);
+#endif
+
+ context->sp = context->psp;
+
+ /* First, set PSP. Subsequent instructions may depend on this value. */
+ if (fs->when_target > fs->curr.reg[UNW_REG_PSP].when)
+ {
+ if (fs->curr.reg[UNW_REG_PSP].where == UNW_WHERE_NONE)
+ context->psp = context->psp + fs->curr.reg[UNW_REG_PSP].val;
+ else
+ uw_update_reg_address (context, fs, UNW_REG_PSP);
+ }
+
+ /* Determine the location of the primary UNaT. */
+ {
+ int i;
+ if (fs->when_target < fs->curr.reg[UNW_REG_PRI_UNAT_GR].when)
+ i = UNW_REG_PRI_UNAT_MEM;
+ else if (fs->when_target < fs->curr.reg[UNW_REG_PRI_UNAT_MEM].when)
+ i = UNW_REG_PRI_UNAT_GR;
+ else if (fs->curr.reg[UNW_REG_PRI_UNAT_MEM].when
+ > fs->curr.reg[UNW_REG_PRI_UNAT_GR].when)
+ i = UNW_REG_PRI_UNAT_MEM;
+ else
+ i = UNW_REG_PRI_UNAT_GR;
+ uw_update_reg_address (context, fs, i);
+ }
+
+ /* Compute the addresses of all registers saved in this frame. */
+ for (i = UNW_REG_BSP; i < UNW_NUM_REGS; ++i)
+ uw_update_reg_address (context, fs, i);
+
+ /* Unwind BSP for the local registers allocated this frame. */
+ /* ??? What to do with stored BSP or BSPSTORE registers. */
+ /* We assert that we are either at a call site, or we have
+ just unwound through a signal frame. In either case
+ pfs_loc is valid. */
+ if (!(fs -> no_reg_stack_frame))
+ {
+ unw_word pfs = *context->pfs_loc;
+ unw_word sol = (pfs >> 7) & 0x7f;
+ context->bsp = (unw_word)
+ ia64_rse_skip_regs ((unw_word *) context->bsp, -sol);
+ }
+}
+
+static void
+uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ uw_update_context (context, fs);
+}
+
+/* Fill in CONTEXT for top-of-stack. The only valid registers at this
+ level will be the return address and the CFA. Note that CFA = SP+16. */
+
+#define uw_init_context(CONTEXT) \
+ do { \
+ /* ??? There is a whole lot o code in uw_install_context that \
+ tries to avoid spilling the entire machine state here. We \
+ should try to make that work again. */ \
+ __builtin_unwind_init(); \
+ uw_init_context_1 (CONTEXT, __builtin_ia64_bsp ()); \
+ } while (0)
+
+static void __attribute__((noinline))
+uw_init_context_1 (struct _Unwind_Context *context, void *bsp)
+{
+ void *rp = __builtin_extract_return_addr (__builtin_return_address (0));
+ /* Set psp to the caller's stack pointer. */
+ void *psp = __builtin_dwarf_cfa () - 16;
+ _Unwind_FrameState fs;
+ unw_word rnat, tmp1, tmp2;
+
+ /* Flush the register stack to memory so that we can access it.
+ Get rse nat collection for the last incomplete rbs chunk of
+ registers at the same time. For this RSE needs to be turned
+ into the mandatory only mode. */
+ asm ("mov.m %1 = ar.rsc;;\n\t"
+ "and %2 = 0x1c, %1;;\n\t"
+ "mov.m ar.rsc = %2;;\n\t"
+ "flushrs;;\n\t"
+ "mov.m %0 = ar.rnat;;\n\t"
+ "mov.m ar.rsc = %1\n\t"
+ : "=r" (rnat), "=r" (tmp1), "=r" (tmp2));
+
+ memset (context, 0, sizeof (struct _Unwind_Context));
+ context->bsp = (unw_word) bsp;
+ /* Set context->regstk_top to lowest rbs address which will use
+ context->rnat collection. */
+ context->regstk_top = context->bsp & ~0x1ffULL;
+ context->rnat = rnat;
+ context->psp = (unw_word) psp;
+ context->rp = (unw_word) rp;
+ asm ("mov %0 = sp" : "=r" (context->sp));
+ asm ("mov %0 = pr" : "=r" (context->pr));
+ context->pri_unat_loc = &context->initial_unat; /* ??? */
+
+ if (uw_frame_state_for (context, &fs) != _URC_NO_REASON)
+ abort ();
+
+ uw_update_context (context, &fs);
+}
+
+/* Install (i.e. longjmp to) the contents of TARGET. */
+
+static void __attribute__((noreturn))
+uw_install_context (struct _Unwind_Context *current __attribute__((unused)),
+ struct _Unwind_Context *target)
+{
+ unw_word ireg_buf[4], ireg_nat = 0, ireg_pr = 0;
+ unw_word saved_lc;
+ int i;
+
+ /* ??? LC is a fixed register so the call to __builtin_unwind_init in
+ uw_init_context doesn't cause it to be saved. In case it isn't in
+ the user frames either, we need to manually do so here, lest it be
+ clobbered by the loop just below. */
+ if (target->lc_loc == NULL)
+ {
+ register unw_word lc asm ("ar.lc");
+ saved_lc = lc;
+ target->lc_loc = &saved_lc;
+ }
+
+ /* Copy integer register data from the target context to a
+ temporary buffer. Do this so that we can frob AR.UNAT
+ to get the NaT bits for these registers set properly. */
+ for (i = 4; i <= 7; ++i)
+ {
+ char nat;
+ void *t = target->ireg[i - 2].loc;
+ if (t)
+ {
+ unw_access_gr (target, i, &ireg_buf[i - 4], &nat, 0);
+ ireg_nat |= (unw_word)nat << (((size_t)&ireg_buf[i - 4] >> 3) & 0x3f);
+ /* Set p6 - p9. */
+ ireg_pr |= 4L << i;
+ }
+ }
+
+ /* The value in uc_bsp that we've computed is that for the
+ target function. The value that we install below will be
+ adjusted by the BR.RET instruction based on the contents
+ of AR.PFS. So we must unadjust that here. */
+ target->bsp = (unw_word)
+ ia64_rse_skip_regs ((unw_word *)target->bsp,
+ (*target->pfs_loc >> 7) & 0x7f);
+
+ if (target->bsp < target->regstk_top)
+ target->rnat = *ia64_rse_rnat_addr ((unw_word *) target->bsp);
+
+ /* Provide assembly with the offsets into the _Unwind_Context. */
+ asm volatile ("uc_rnat = %0"
+ : : "i"(offsetof (struct _Unwind_Context, rnat)));
+ asm volatile ("uc_bsp = %0"
+ : : "i"(offsetof (struct _Unwind_Context, bsp)));
+ asm volatile ("uc_psp = %0"
+ : : "i"(offsetof (struct _Unwind_Context, psp)));
+ asm volatile ("uc_rp = %0"
+ : : "i"(offsetof (struct _Unwind_Context, rp)));
+ asm volatile ("uc_pr = %0"
+ : : "i"(offsetof (struct _Unwind_Context, pr)));
+ asm volatile ("uc_gp = %0"
+ : : "i"(offsetof (struct _Unwind_Context, gp)));
+ asm volatile ("uc_pfs_loc = %0"
+ : : "i"(offsetof (struct _Unwind_Context, pfs_loc)));
+ asm volatile ("uc_unat_loc = %0"
+ : : "i"(offsetof (struct _Unwind_Context, unat_loc)));
+ asm volatile ("uc_lc_loc = %0"
+ : : "i"(offsetof (struct _Unwind_Context, lc_loc)));
+ asm volatile ("uc_fpsr_loc = %0"
+ : : "i"(offsetof (struct _Unwind_Context, fpsr_loc)));
+ asm volatile ("uc_eh_data = %0"
+ : : "i"(offsetof (struct _Unwind_Context, eh_data)));
+ asm volatile ("uc_br_loc = %0"
+ : : "i"(offsetof (struct _Unwind_Context, br_loc)));
+ asm volatile ("uc_fr_loc = %0"
+ : : "i"(offsetof (struct _Unwind_Context, fr_loc)));
+
+ asm volatile (
+ /* Load up call-saved non-window integer registers from ireg_buf. */
+ "add r20 = 8, %1 \n\t"
+ "mov ar.unat = %2 \n\t"
+ "mov pr = %3, 0x3c0 \n\t"
+ ";; \n\t"
+ "(p6) ld8.fill r4 = [%1] \n\t"
+ "(p7) ld8.fill r5 = [r20] \n\t"
+ "add r21 = uc_br_loc + 16, %0 \n\t"
+ "adds %1 = 16, %1 \n\t"
+ "adds r20 = 16, r20 \n\t"
+ ";; \n\t"
+ "(p8) ld8.fill r6 = [%1] \n\t"
+ "(p9) ld8.fill r7 = [r20] \n\t"
+ "add r20 = uc_br_loc + 8, %0 \n\t"
+ ";; \n\t"
+ /* Load up call-saved branch registers. */
+ "ld8 r22 = [r20], 16 \n\t"
+ "ld8 r23 = [r21], 16 \n\t"
+ ";; \n\t"
+ "ld8 r24 = [r20], 16 \n\t"
+ "ld8 r25 = [r21], uc_fr_loc - (uc_br_loc + 32)\n\t"
+ ";; \n\t"
+ "ld8 r26 = [r20], uc_fr_loc + 8 - (uc_br_loc + 40)\n\t"
+ "ld8 r27 = [r21], 24 \n\t"
+ "cmp.ne p6, p0 = r0, r22 \n\t"
+ ";; \n\t"
+ "ld8 r28 = [r20], 8 \n\t"
+ "(p6) ld8 r22 = [r22] \n\t"
+ "cmp.ne p7, p0 = r0, r23 \n\t"
+ ";; \n\t"
+ "(p7) ld8 r23 = [r23] \n\t"
+ "cmp.ne p8, p0 = r0, r24 \n\t"
+ ";; \n\t"
+ "(p8) ld8 r24 = [r24] \n\t"
+ "(p6) mov b1 = r22 \n\t"
+ "cmp.ne p9, p0 = r0, r25 \n\t"
+ ";; \n\t"
+ "(p9) ld8 r25 = [r25] \n\t"
+ "(p7) mov b2 = r23 \n\t"
+ "cmp.ne p6, p0 = r0, r26 \n\t"
+ ";; \n\t"
+ "(p6) ld8 r26 = [r26] \n\t"
+ "(p8) mov b3 = r24 \n\t"
+ "cmp.ne p7, p0 = r0, r27 \n\t"
+ ";; \n\t"
+ /* Load up call-saved fp registers. */
+ "(p7) ldf.fill f2 = [r27] \n\t"
+ "(p9) mov b4 = r25 \n\t"
+ "cmp.ne p8, p0 = r0, r28 \n\t"
+ ";; \n\t"
+ "(p8) ldf.fill f3 = [r28] \n\t"
+ "(p6) mov b5 = r26 \n\t"
+ ";; \n\t"
+ "ld8 r29 = [r20], 16*8 - 4*8 \n\t"
+ "ld8 r30 = [r21], 17*8 - 5*8 \n\t"
+ ";; \n\t"
+ "ld8 r22 = [r20], 16 \n\t"
+ "ld8 r23 = [r21], 16 \n\t"
+ ";; \n\t"
+ "ld8 r24 = [r20], 16 \n\t"
+ "ld8 r25 = [r21] \n\t"
+ "cmp.ne p6, p0 = r0, r29 \n\t"
+ ";; \n\t"
+ "ld8 r26 = [r20], 8 \n\t"
+ "(p6) ldf.fill f4 = [r29] \n\t"
+ "cmp.ne p7, p0 = r0, r30 \n\t"
+ ";; \n\t"
+ "ld8 r27 = [r20], 8 \n\t"
+ "(p7) ldf.fill f5 = [r30] \n\t"
+ "cmp.ne p6, p0 = r0, r22 \n\t"
+ ";; \n\t"
+ "ld8 r28 = [r20], 8 \n\t"
+ "(p6) ldf.fill f16 = [r22] \n\t"
+ "cmp.ne p7, p0 = r0, r23 \n\t"
+ ";; \n\t"
+ "ld8 r29 = [r20], 8 \n\t"
+ "(p7) ldf.fill f17 = [r23] \n\t"
+ "cmp.ne p6, p0 = r0, r24 \n\t"
+ ";; \n\t"
+ "ld8 r22 = [r20], 8 \n\t"
+ "(p6) ldf.fill f18 = [r24] \n\t"
+ "cmp.ne p7, p0 = r0, r25 \n\t"
+ ";; \n\t"
+ "ld8 r23 = [r20], 8 \n\t"
+ "(p7) ldf.fill f19 = [r25] \n\t"
+ "cmp.ne p6, p0 = r0, r26 \n\t"
+ ";; \n\t"
+ "ld8 r24 = [r20], 8 \n\t"
+ "(p6) ldf.fill f20 = [r26] \n\t"
+ "cmp.ne p7, p0 = r0, r27 \n\t"
+ ";; \n\t"
+ "ld8 r25 = [r20], 8 \n\t"
+ "(p7) ldf.fill f21 = [r27] \n\t"
+ "cmp.ne p6, p0 = r0, r28 \n\t"
+ ";; \n\t"
+ "ld8 r26 = [r20], 8 \n\t"
+ "(p6) ldf.fill f22 = [r28] \n\t"
+ "cmp.ne p7, p0 = r0, r29 \n\t"
+ ";; \n\t"
+ "ld8 r27 = [r20], 8 \n\t"
+ ";; \n\t"
+ "ld8 r28 = [r20], 8 \n\t"
+ "(p7) ldf.fill f23 = [r29] \n\t"
+ "cmp.ne p6, p0 = r0, r22 \n\t"
+ ";; \n\t"
+ "ld8 r29 = [r20], 8 \n\t"
+ "(p6) ldf.fill f24 = [r22] \n\t"
+ "cmp.ne p7, p0 = r0, r23 \n\t"
+ ";; \n\t"
+ "(p7) ldf.fill f25 = [r23] \n\t"
+ "cmp.ne p6, p0 = r0, r24 \n\t"
+ "cmp.ne p7, p0 = r0, r25 \n\t"
+ ";; \n\t"
+ "(p6) ldf.fill f26 = [r24] \n\t"
+ "(p7) ldf.fill f27 = [r25] \n\t"
+ "cmp.ne p6, p0 = r0, r26 \n\t"
+ ";; \n\t"
+ "(p6) ldf.fill f28 = [r26] \n\t"
+ "cmp.ne p7, p0 = r0, r27 \n\t"
+ "cmp.ne p6, p0 = r0, r28 \n\t"
+ ";; \n\t"
+ "(p7) ldf.fill f29 = [r27] \n\t"
+ "(p6) ldf.fill f30 = [r28] \n\t"
+ "cmp.ne p7, p0 = r0, r29 \n\t"
+ ";; \n\t"
+ "(p7) ldf.fill f31 = [r29] \n\t"
+ "add r20 = uc_rnat, %0 \n\t"
+ "add r21 = uc_bsp, %0 \n\t"
+ ";; \n\t"
+ /* Load the balance of the thread state from the context. */
+ "ld8 r22 = [r20], uc_psp - uc_rnat \n\t"
+ "ld8 r23 = [r21], uc_gp - uc_bsp \n\t"
+ ";; \n\t"
+ "ld8 r24 = [r20], uc_pfs_loc - uc_psp \n\t"
+ "ld8 r1 = [r21], uc_rp - uc_gp \n\t"
+ ";; \n\t"
+ "ld8 r25 = [r20], uc_unat_loc - uc_pfs_loc\n\t"
+ "ld8 r26 = [r21], uc_pr - uc_rp \n\t"
+ ";; \n\t"
+ "ld8 r27 = [r20], uc_lc_loc - uc_unat_loc\n\t"
+ "ld8 r28 = [r21], uc_fpsr_loc - uc_pr \n\t"
+ ";; \n\t"
+ "ld8 r29 = [r20], uc_eh_data - uc_lc_loc\n\t"
+ "ld8 r30 = [r21], uc_eh_data + 8 - uc_fpsr_loc\n\t"
+ ";; \n\t"
+ /* Load data for the exception handler. */
+ "ld8 r15 = [r20], 16 \n\t"
+ "ld8 r16 = [r21], 16 \n\t"
+ ";; \n\t"
+ "ld8 r17 = [r20] \n\t"
+ "ld8 r18 = [r21] \n\t"
+ ";; \n\t"
+ /* Install the balance of the thread state loaded above. */
+ "cmp.ne p6, p0 = r0, r25 \n\t"
+ "cmp.ne p7, p0 = r0, r27 \n\t"
+ ";; \n\t"
+ "(p6) ld8 r25 = [r25] \n\t"
+ "(p7) ld8 r27 = [r27] \n\t"
+ ";; \n\t"
+ "(p7) mov.m ar.unat = r27 \n\t"
+ "(p6) mov.i ar.pfs = r25 \n\t"
+ "cmp.ne p9, p0 = r0, r29 \n\t"
+ ";; \n\t"
+ "(p9) ld8 r29 = [r29] \n\t"
+ "cmp.ne p6, p0 = r0, r30 \n\t"
+ ";; \n\t"
+ "(p6) ld8 r30 = [r30] \n\t"
+ /* Don't clobber p6-p9, which are in use at present. */
+ "mov pr = r28, ~0x3c0 \n\t"
+ "(p9) mov.i ar.lc = r29 \n\t"
+ ";; \n\t"
+ "mov.m r25 = ar.rsc \n\t"
+ "(p6) mov.m ar.fpsr = r30 \n\t"
+ ";; \n\t"
+ "and r29 = 0x1c, r25 \n\t"
+ "mov b0 = r26 \n\t"
+ ";; \n\t"
+ "mov.m ar.rsc = r29 \n\t"
+ ";; \n\t"
+ /* This must be done before setting AR.BSPSTORE, otherwise
+ AR.BSP will be initialized with a random displacement
+ below the value we want, based on the current number of
+ dirty stacked registers. */
+ "loadrs \n\t"
+ "invala \n\t"
+ ";; \n\t"
+ "mov.m ar.bspstore = r23 \n\t"
+ ";; \n\t"
+ "mov.m ar.rnat = r22 \n\t"
+ ";; \n\t"
+ "mov.m ar.rsc = r25 \n\t"
+ "mov sp = r24 \n\t"
+ "br.ret.sptk.few b0"
+ : : "r"(target), "r"(ireg_buf), "r"(ireg_nat), "r"(ireg_pr)
+ : "r15", "r16", "r17", "r18", "r20", "r21", "r22",
+ "r23", "r24", "r25", "r26", "r27", "r28", "r29",
+ "r30", "r31");
+ /* NOTREACHED */
+ while (1);
+}
+
+static inline _Unwind_Ptr
+uw_identify_context (struct _Unwind_Context *context)
+{
+ return _Unwind_GetIP (context);
+}
+
+#include "unwind.inc"
+
+#if defined (USE_GAS_SYMVER) && defined (SHARED) && defined (USE_LIBUNWIND_EXCEPTIONS)
+alias (_Unwind_Backtrace);
+alias (_Unwind_DeleteException);
+alias (_Unwind_FindEnclosingFunction);
+alias (_Unwind_ForcedUnwind);
+alias (_Unwind_GetBSP);
+alias (_Unwind_GetCFA);
+alias (_Unwind_GetGR);
+alias (_Unwind_GetIP);
+alias (_Unwind_GetLanguageSpecificData);
+alias (_Unwind_GetRegionStart);
+alias (_Unwind_RaiseException);
+alias (_Unwind_Resume);
+alias (_Unwind_Resume_or_Rethrow);
+alias (_Unwind_SetGR);
+alias (_Unwind_SetIP);
+#endif
+
+#endif
diff --git a/gcc-4.9/libgcc/config/ia64/unwind-ia64.h b/gcc-4.9/libgcc/config/ia64/unwind-ia64.h
new file mode 100644
index 000000000..309a949b7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/unwind-ia64.h
@@ -0,0 +1,57 @@
+/* Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Andrew MacLeod <amacleod@cygnus.com>
+ Andrew Haley <aph@cygnus.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef __VMS__
+/* On VMS, long is a 32 bit type. */
+typedef unsigned long long unw_word;
+typedef long long unw_sword;
+#else
+typedef unsigned long unw_word;
+typedef long unw_sword;
+#endif
+
+struct unw_table_entry
+{
+ unw_word start_offset;
+ unw_word end_offset;
+ unw_word info_offset;
+};
+
+/* Accessors to fields of an unwind info block header. In this common file to
+ be visible from all the units involved in a target implementation. */
+
+#ifndef __USING_SJLJ_EXCEPTIONS__
+#define UNW_VER(x) ((x) >> 48)
+#define UNW_FLAG_MASK 0x0000ffff00000000
+#define UNW_FLAG_OSMASK 0x0000f00000000000
+#define UNW_FLAG_EHANDLER(x) ((x) & 0x0000000100000000L)
+#define UNW_FLAG_UHANDLER(x) ((x) & 0x0000000200000000L)
+#define UNW_LENGTH(x) ((x) & 0x00000000ffffffffL)
+#endif
+
+extern struct unw_table_entry *
+_Unwind_FindTableEntry (void *pc, unw_word *segment_base,
+ unw_word *gp, struct unw_table_entry *ent)
+ __attribute__ ((__visibility__ ("hidden")));
diff --git a/gcc-4.9/libgcc/config/ia64/vms-crtinit.S b/gcc-4.9/libgcc/config/ia64/vms-crtinit.S
new file mode 100644
index 000000000..6df876210
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/vms-crtinit.S
@@ -0,0 +1,24 @@
+/* Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .global LIB$INITIALIZE#
diff --git a/gcc-4.9/libgcc/config/ia64/vms-unwind.h b/gcc-4.9/libgcc/config/ia64/vms-unwind.h
new file mode 100644
index 000000000..b0fe7e517
--- /dev/null
+++ b/gcc-4.9/libgcc/config/ia64/vms-unwind.h
@@ -0,0 +1,308 @@
+/* DWARF2 EH unwinding support for IA64 VMS.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define __NEW_STARLET
+#include <libicb.h>
+#include <chfdef.h>
+#include <lib_c/chfctxdef.h>
+#include <lib_c/intstkdef.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#define UNW_IVMS_MODE(HEADER) (((HEADER) >> 44) & 0x3L)
+#define MD_UNW_COMPATIBLE_PERSONALITY_P(HEADER) (!UNW_IVMS_MODE (HEADER))
+
+#define DYN$C_SSENTRY 66
+/* ??? would rather get the proper header file. */
+
+#define MD_FALLBACK_FRAME_STATE_FOR ia64_vms_fallback_frame_state
+
+extern INVO_CONTEXT_BLK * LIB$I64_CREATE_INVO_CONTEXT (void);
+
+extern int LIB$I64_IS_EXC_DISPATCH_FRAME (void *);
+extern int LIB$I64_IS_AST_DISPATCH_FRAME (void *);
+
+extern int LIB$I64_INIT_INVO_CONTEXT (INVO_CONTEXT_BLK *, int, int);
+extern int LIB$I64_GET_CURR_INVO_CONTEXT (INVO_CONTEXT_BLK *);
+extern int LIB$I64_GET_PREV_INVO_CONTEXT (INVO_CONTEXT_BLK *);
+
+typedef unsigned int uint;
+typedef unsigned __int64 uw_reg;
+typedef uw_reg * uw_loc;
+
+typedef char fp_reg[16];
+
+#define DENOTES_VMS_DISPATCHER_FRAME(icb) \
+(LIB$I64_IS_EXC_DISPATCH_FRAME (&(icb)->libicb$ih_pc))
+
+#define DENOTES_BOTTOM_OF_STACK(icb) ((icb)->libicb$v_bottom_of_stack)
+
+#define FAIL_IF(COND) \
+ do { if (COND) { context->rp = 0; return _URC_END_OF_STACK; } } while (0)
+/* Clearing context->rp is required to prevent the ia64 gcc unwinder from
+ attempting to keep on walking the call chain. */
+
+static int
+ia64_vms_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ int i, status;
+
+ INVO_CONTEXT_BLK local_icb;
+ INVO_CONTEXT_BLK *icb = &local_icb;
+
+ CHFCTX * chfctx;
+ CHF$MECH_ARRAY * chfmech;
+ CHF64$SIGNAL_ARRAY *chfsig64;
+ INTSTK * intstk;
+
+ static int eh_debug = -1;
+ int try_bs_copy = 0;
+ /* Non zero to attempt copy of alternate backing store contents for
+ dirty partition in interrupted context. ??? Alpha code, only activated
+ on specific request via specific bit in EH_DEBUG. */
+
+ if (eh_debug == -1)
+ {
+ char * EH_DEBUG = getenv ("EH_DEBUG");
+ const uint try_bs_copy_mask = (1 << 16);
+
+ eh_debug = EH_DEBUG ? atoi (EH_DEBUG) : 0;
+
+ /* Fetch and clear the try_bs_copy bit. */
+ try_bs_copy = (uint)eh_debug & try_bs_copy_mask;
+ eh_debug &= ~try_bs_copy_mask;
+ }
+
+ /* We're called to attempt unwinding through a frame for which no unwind
+ info is available, typical of an operating system exception dispatcher
+ frame. The code below knows how to handle this case, and only this one,
+ returning a failure code if it finds it is not in this situation.
+
+ Note that we're called from deep down in the exception propagation call
+ chain, possibly below an exception dispatcher but for a frame above it
+ like some os entry point. */
+
+ if (eh_debug)
+ printf ("FALLBACK - ctxt->rp=0x%lx, sp=0x%lx, psp=0x%lx, bsp=0x%lx\n",
+ context->rp, context->sp, context->psp, context->bsp);
+
+ /* Step 0 :
+ -------------------------------------------------------------------------
+ VMS-unwind up until we reach a VMS dispatcher frame corresponding to the
+ context we are trying to unwind through. Fail if get past this context or
+ if we reach the bottom of stack along the way.
+ -------------------------------------------------------------------------
+ */
+
+ status = LIB$I64_INIT_INVO_CONTEXT (icb, LIBICB$K_INVO_CONTEXT_VERSION, 0);
+ FAIL_IF (status == 0);
+
+ status = LIB$I64_GET_CURR_INVO_CONTEXT (icb);
+
+ /* Beware: we might be unwinding through nested condition handlers, so the
+ dispatcher frame we seek might not be the first one on the way up. Loop
+ thus. */
+ do {
+
+ /* Seek the next dispatcher frame up the "current" point. Stop if we
+ either get past the target context or hit the bottom-of-stack along
+ the way. */
+ status = LIB$I64_GET_PREV_INVO_CONTEXT (icb);
+ FAIL_IF (status == 0);
+ FAIL_IF ((uw_reg)icb->libicb$ih_sp > (uw_reg)context->psp
+ || DENOTES_BOTTOM_OF_STACK (icb));
+
+ if (eh_debug)
+ printf ("frame%s sp @ 0x%llx, pc @ 0x%llx bsp=0x%llx\n",
+ DENOTES_VMS_DISPATCHER_FRAME (icb) ? " (dispatcher)" : "",
+ icb->libicb$ih_sp, icb->libicb$ih_pc, icb->libicb$ih_bsp);
+
+ /* Continue until the target frame is found. */
+ } while ((uw_reg)icb->libicb$ih_bsp != (uw_reg)context->bsp);
+
+ /* If this is not a dispatcher frame, this is certainly a frame for a leaf
+ subprogram. Use default unwind information. */
+ if (! DENOTES_VMS_DISPATCHER_FRAME (icb))
+ return _URC_END_OF_STACK;
+
+ /* At this point, we know we are really trying to unwind past an exception
+ dispatcher frame, and have it described in ICB. Proceed. */
+
+ /* Step 1 :
+ ------------------------------------------------------------------------
+ We have the VMS dispatcher frame ICB handy and know we are trying to
+ unwind past it. Fetch pointers to useful datastructures from there, then
+ unwind one step further up to the interrupted user context from which
+ some required values will be easily accessible.
+ ------------------------------------------------------------------------
+ */
+
+ chfctx = icb->libicb$ph_chfctx_addr;
+ FAIL_IF (chfctx == 0);
+
+ chfmech = (CHF$MECH_ARRAY *)chfctx->chfctx$q_mcharglst;
+ FAIL_IF (chfmech == 0);
+
+ chfsig64 = (CHF64$SIGNAL_ARRAY *)chfmech->chf$ph_mch_sig64_addr;
+ FAIL_IF (chfsig64 == 0);
+
+ intstk = (INTSTK *)chfmech->chf$q_mch_esf_addr;
+ FAIL_IF (intstk == 0 || intstk->intstk$b_subtype == DYN$C_SSENTRY);
+
+ status = LIB$I64_GET_PREV_INVO_CONTEXT (icb);
+ FAIL_IF (status == 0);
+
+ if (eh_debug)
+ printf ("User frame, "
+ "chfmech @ 0x%p, chfsig64 @ 0x%p, intstk @ 0x%p\n",
+ chfmech, chfsig64, intstk);
+
+ /* Step 2 :
+ ------------------------------------------------------------------------
+ Point the GCC context locations/values required for further unwinding at
+ their corresponding locations/values in the datastructures at hand.
+ ------------------------------------------------------------------------
+ */
+
+ /* Static General Register locations, including scratch registers in case
+ the unwinder needs to refer to a value stored in one of them. */
+ {
+ uw_reg * ctxregs = (uw_reg *)&intstk->intstk$q_regbase;
+
+ for (i = 2; i <= 3; i++)
+ context->ireg[i - 2].loc = (uw_loc)&ctxregs[i];
+ for (i = 8; i <= 11; i++)
+ context->ireg[i - 2].loc = (uw_loc)&ctxregs[i];
+ for (i = 14; i <= 31; i++)
+ context->ireg[i - 2].loc = (uw_loc)&ctxregs[i];
+ }
+
+ /* Static Floating Point Register locations, as available from the
+ mechargs array, which happens to include all the to be preserved
+ ones + others. */
+ {
+ fp_reg * ctxregs;
+
+ ctxregs = (fp_reg *)&chfmech->chf$fh_mch_savf2;
+ for (i = 2; i <= 5 ; i++)
+ context->fr_loc[i - 2] = (uw_loc)&ctxregs[i - 2];
+
+ ctxregs = (fp_reg *)&chfmech->chf$fh_mch_savf12;
+ for (i = 12; i <= 31 ; i++)
+ context->fr_loc[i - 2] = (uw_loc)&ctxregs[i - 12];
+ }
+
+ /* Relevant application register locations. */
+
+ context->fpsr_loc = (uw_loc)&intstk->intstk$q_fpsr;
+ context->lc_loc = (uw_loc)&intstk->intstk$q_lc;
+ context->unat_loc = (uw_loc)&intstk->intstk$q_unat;
+
+ /* Branch register locations. */
+
+ {
+ uw_reg * ctxregs = (uw_reg *)&intstk->intstk$q_b0;
+
+ for (i = 0; i < 8; i++)
+ context->br_loc[i] = (uw_loc)&ctxregs[i];
+ }
+
+ /* Necessary register values. */
+
+ /* ??? Still unclear if we need to account for possible flushes to an
+ alternate backing store (maybe the unwinding performed above did the
+ trick already) and how this would be handled. Blind alpha tentative
+ below for experimentation purposes in malfunctioning cases. */
+ {
+ uw_reg q_bsp = (uw_reg) intstk->intstk$q_bsp;
+ uw_reg q_bspstore = (uw_reg) intstk->intstk$q_bspstore;
+ uw_reg q_bspbase = (uw_reg) intstk->intstk$q_bspbase;
+ uw_reg ih_bspbase = (uw_reg) icb->libicb$ih_bspbase;
+
+ if (eh_debug)
+ printf ("q_bspstore = 0x%lx, q_bsp = 0x%lx, q_bspbase = 0x%lx\n"
+ "ih_bspbase = 0x%lx\n",
+ q_bspstore, q_bsp, q_bspbase, ih_bspbase);
+
+ /* We witness many situations where q_bspbase is set while ih_bspbase is
+ null, and every attempt made with q_bspbase badly failed while doing
+ nothing resulted in proper behavior. */
+ if (q_bspstore < q_bsp && ih_bspbase && try_bs_copy)
+ {
+ uw_reg dirty_size = q_bsp - q_bspstore;
+ uw_reg q_rnat = (uw_reg) intstk->intstk$q_rnat;
+
+ if (eh_debug)
+ printf ("Attempting an alternate backing store copy ...\n");
+
+ ia64_copy_rbs
+ (context, q_bspstore, ih_bspbase, dirty_size, q_rnat);
+ /* Not clear if these are the proper arguments here. This is what
+ looked the closest to what is performed in the Linux case. */
+ }
+
+ }
+
+ context->bsp = (uw_reg)intstk->intstk$q_bsp;
+ fs->no_reg_stack_frame = 1;
+
+ context->pr = (uw_reg)intstk->intstk$q_preds;
+ context->gp = (uw_reg)intstk->intstk$q_gp;
+
+ /* We're directly setting up the "context" for a VMS exception handler.
+ The "previous SP" for it is the SP upon the handler's entry, that is
+ the SP at the condition/interruption/exception point. */
+ context->psp = (uw_reg)icb->libicb$ih_sp;
+
+ /* Previous Frame State location. What eventually ends up in pfs_loc is
+ installed with ar.pfs = pfs_loc; br.ret; so setup to target intstk->q_ifs
+ to have the interrupted context restored and not that of its caller if
+ we happen to have a handler in the interrupted context itself. */
+ fs->curr.reg[UNW_REG_PFS].where = UNW_WHERE_PSPREL;
+ fs->curr.reg[UNW_REG_PFS].val
+ = (uw_reg)&intstk->intstk$q_ifs - (uw_reg)context->psp;
+ fs->curr.reg[UNW_REG_PFS].when = -1;
+
+ /* If we need to unwind further up, past the interrupted context, we need to
+ hand out the interrupted context's pfs, still. */
+ context->signal_pfs_loc = (uw_loc) &intstk->intstk$q_pfs;
+
+ /* Finally, rules for RP . */
+ {
+ uw_reg * post_sigarray
+ = (uw_reg *)chfsig64 + 1 + chfsig64->chf64$l_sig_args;
+
+ uw_reg * ih_pc_loc = post_sigarray - 2;
+
+ fs->curr.reg[UNW_REG_RP].where = UNW_WHERE_PSPREL;
+ fs->curr.reg[UNW_REG_RP].val
+ = (uw_reg)ih_pc_loc - (uw_reg)context->psp;
+ fs->curr.reg[UNW_REG_RP].when = -1;
+ }
+
+ return _URC_NO_REASON;
+}
+
diff --git a/gcc-4.9/libgcc/config/iq2000/lib2funcs.c b/gcc-4.9/libgcc/config/iq2000/lib2funcs.c
new file mode 100644
index 000000000..91af00ed4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/iq2000/lib2funcs.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+
+USItype
+__mulsi3 (USItype a, USItype b)
+{
+ USItype c = 0;
+
+ while (a != 0)
+ {
+ if (a & 1)
+ c += b;
+ a >>= 1;
+ b <<= 1;
+ }
+
+ return c;
+}
diff --git a/gcc-4.9/libgcc/config/iq2000/t-iq2000 b/gcc-4.9/libgcc/config/iq2000/t-iq2000
new file mode 100644
index 000000000..18fd53c37
--- /dev/null
+++ b/gcc-4.9/libgcc/config/iq2000/t-iq2000
@@ -0,0 +1,5 @@
+LIB2ADD = $(srcdir)/udivmod.c \
+ $(srcdir)/divmod.c \
+ $(srcdir)/udivmodsi4.c \
+ $(srcdir)/config/iq2000/lib2funcs.c
+
diff --git a/gcc-4.9/libgcc/config/libbid/ChangeLog b/gcc-4.9/libgcc/config/libbid/ChangeLog
new file mode 100644
index 000000000..787dfd0d3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/ChangeLog
@@ -0,0 +1,376 @@
+2014-01-02 Richard Sandiford <rdsandiford@googlemail.com>
+
+ Update copyright years
+
+2012-11-04 Thomas Schwinge <thomas@codesourcery.com>
+
+ * bid_functions.h: Check for __GLIBC__ additionally to LINUX when
+ defining format specifiers.
+
+2007-09-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * bid128_fromstring.c: Removed.
+
+ * bid_dpd.c: New from libbid 2007-09-26.
+ * bid128_to_int16.c: Likewise.
+ * bid128_to_int8.c: Likewise.
+ * bid128_to_uint8.c: Likewise.
+ * bid128_to_uint16.c: Likewise.
+ * bid64_to_int16.c: Likewise.
+ * bid64_to_int8.c: Likewise.
+ * bid64_to_uint16.c: Likewise.
+ * bid64_to_uint8.c: Likewise.
+
+ * bid128_2_str.h: Updated from libbid 2007-09-26.
+ * bid128_2_str_macros.h: Likewise.
+ * bid128_2_str_tables.c: Likewise.
+ * bid128_add.c: Likewise.
+ * bid128.c: Likewise.
+ * bid128_compare.c: Likewise.
+ * bid128_div.c: Likewise.
+ * bid128_fma.c: Likewise.
+ * bid128_logb.c: Likewise.
+ * bid128_minmax.c: Likewise.
+ * bid128_mul.c: Likewise.
+ * bid128_next.c: Likewise.
+ * bid128_noncomp.c: Likewise.
+ * bid128_quantize.c: Likewise.
+ * bid128_rem.c: Likewise.
+ * bid128_round_integral.c: Likewise.
+ * bid128_scalb.c: Likewise.
+ * bid128_sqrt.c: Likewise.
+ * bid128_string.c: Likewise.
+ * bid128_to_int32.c: Likewise.
+ * bid128_to_int64.c: Likewise.
+ * bid128_to_uint32.c: Likewise.
+ * bid128_to_uint64.c: Likewise.
+ * bid32_to_bid128.c: Likewise.
+ * bid32_to_bid64.c: Likewise.
+ * bid64_add.c: Likewise.
+ * bid64_compare.c: Likewise.
+ * bid64_div.c: Likewise.
+ * bid64_fma.c: Likewise.
+ * bid64_logb.c: Likewise.
+ * bid64_minmax.c: Likewise.
+ * bid64_mul.c: Likewise.
+ * bid64_next.c: Likewise.
+ * bid64_noncomp.c: Likewise.
+ * bid64_quantize.c: Likewise.
+ * bid64_rem.c: Likewise.
+ * bid64_round_integral.c: Likewise.
+ * bid64_scalb.c: Likewise.
+ * bid64_sqrt.c: Likewise.
+ * bid64_string.c: Likewise.
+ * bid64_to_bid128.c: Likewise.
+ * bid64_to_int32.c: Likewise.
+ * bid64_to_int64.c: Likewise.
+ * bid64_to_uint32.c: Likewise.
+ * bid64_to_uint64.c: Likewise.
+ * bid_b2d.h: Likewise.
+ * bid_binarydecimal.c: Likewise.
+ * bid_conf.h: Likewise.
+ * bid_convert_data.c: Likewise.
+ * bid_decimal_data.c: Likewise.
+ * bid_decimal_globals.c: Likewise.
+ * bid_div_macros.h: Likewise.
+ * bid_flag_operations.c: Likewise.
+ * bid_from_int.c: Likewise.
+ * bid_functions.h: Likewise.
+ * bid_gcc_intrinsics.h: Likewise.
+ * bid_inline_add.h: Likewise.
+ * bid_internal.h: Likewise.
+ * bid_round.c: Likewise.
+ * bid_sqrt_macros.h: Likewise.
+ * _addsub_dd.c: Likewise.
+ * _addsub_sd.c: Likewise.
+ * _addsub_td.c: Likewise.
+ * _dd_to_df.c: Likewise.
+ * _dd_to_di.c: Likewise.
+ * _dd_to_sd.c: Likewise.
+ * _dd_to_sf.c: Likewise.
+ * _dd_to_si.c: Likewise.
+ * _dd_to_td.c: Likewise.
+ * _dd_to_tf.c: Likewise.
+ * _dd_to_udi.c: Likewise.
+ * _dd_to_usi.c: Likewise.
+ * _dd_to_xf.c: Likewise.
+ * _df_to_dd.c: Likewise.
+ * _df_to_sd.c: Likewise.
+ * _df_to_td.c: Likewise.
+ * _di_to_dd.c: Likewise.
+ * _di_to_sd.c: Likewise.
+ * _di_to_td.c: Likewise.
+ * _div_dd.c: Likewise.
+ * _div_sd.c: Likewise.
+ * _div_td.c: Likewise.
+ * _eq_dd.c: Likewise.
+ * _eq_sd.c: Likewise.
+ * _eq_td.c: Likewise.
+ * _ge_dd.c: Likewise.
+ * _ge_sd.c: Likewise.
+ * _ge_td.c: Likewise.
+ * _gt_dd.c: Likewise.
+ * _gt_sd.c: Likewise.
+ * _gt_td.c: Likewise.
+ * _isinfd128.c: Likewise.
+ * _isinfd32.c: Likewise.
+ * _isinfd64.c: Likewise.
+ * _le_dd.c: Likewise.
+ * _le_sd.c: Likewise.
+ * _le_td.c: Likewise.
+ * _lt_dd.c: Likewise.
+ * _lt_sd.c: Likewise.
+ * _lt_td.c: Likewise.
+ * _mul_dd.c: Likewise.
+ * _mul_sd.c: Likewise.
+ * _mul_td.c: Likewise.
+ * _ne_dd.c: Likewise.
+ * _ne_sd.c: Likewise.
+ * _ne_td.c: Likewise.
+ * _sd_to_dd.c: Likewise.
+ * _sd_to_df.c: Likewise.
+ * _sd_to_di.c: Likewise.
+ * _sd_to_sf.c: Likewise.
+ * _sd_to_si.c: Likewise.
+ * _sd_to_td.c: Likewise.
+ * _sd_to_tf.c: Likewise.
+ * _sd_to_udi.c: Likewise.
+ * _sd_to_usi.c: Likewise.
+ * _sd_to_xf.c: Likewise.
+ * _sf_to_dd.c: Likewise.
+ * _sf_to_sd.c: Likewise.
+ * _sf_to_td.c: Likewise.
+ * _si_to_dd.c: Likewise.
+ * _si_to_sd.c: Likewise.
+ * _si_to_td.c: Likewise.
+ * _td_to_dd.c: Likewise.
+ * _td_to_df.c: Likewise.
+ * _td_to_di.c: Likewise.
+ * _td_to_sd.c: Likewise.
+ * _td_to_sf.c: Likewise.
+ * _td_to_si.c: Likewise.
+ * _td_to_tf.c: Likewise.
+ * _td_to_udi.c: Likewise.
+ * _td_to_usi.c: Likewise.
+ * _td_to_xf.c: Likewise.
+ * _tf_to_dd.c: Likewise.
+ * _tf_to_sd.c: Likewise.
+ * _tf_to_td.c: Likewise.
+ * _udi_to_dd.c: Likewise.
+ * _udi_to_sd.c: Likewise.
+ * _udi_to_td.c: Likewise.
+ * _unord_dd.c: Likewise.
+ * _unord_sd.c: Likewise.
+ * _unord_td.c: Likewise.
+ * _usi_to_dd.c: Likewise.
+ * _usi_to_sd.c: Likewise.
+ * _usi_to_td.c: Likewise.
+ * _xf_to_dd.c: Likewise.
+ * _xf_to_sd.c: Likewise.
+ * _xf_to_td.c: Likewise.
+
+2007-09-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * b2d.h: Renamed to ...
+ * bid_b2d.h: This.
+
+ * bid128_to_string.c: Renamed to ...
+ * bid128_string.c: This.
+
+ * bid_intrinsics.h: Renamed to ...
+ * bid_gcc_intrinsics.h: This.
+
+ * bid_string.c: Renamed to ...
+ * bid64_string.c: This.
+
+ * binarydecimal.c: Renamed to ...
+ * bid_decimal_globals.c: This.
+
+ * convert_data.c: Renamed to ...
+ * bid_convert_data.c: This.
+
+ * decimal_data.c: Renamed to ...
+ * bid_decimal_data.c: This.
+
+ * decimal_globals.c: Renamed to ...
+ * bid_decimal_globals.c: This.
+
+ * div_macros.h: Renamed to ...
+ * bid_div_macros.h: This.
+
+ * inline_bid_add.h: Renamed to ...
+ * bid_inline_add.h: This.
+
+ * sqrt_macros.h: Renamed to ...
+ * bid_sqrt_macros.h: This.
+
+2007-07-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ Updated from Intel BID library:
+ * bid_conf.h (BID_THREAD): Defined only if both HAVE_CC_TLS
+ and USE_TLS are defined.
+
+2007-07-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ Updated from Intel BID library:
+ * bid_conf.h (BID_THREAD): Defined.
+ (__bid_IDEC_glbround): Add BID_THREAD in declaration.
+ (__bid_IDEC_glbflags): Likewise.
+
+ * decimal_globals.c (__bid_IDEC_glbround): Add BID_THREAD in
+ declaration.
+ (__bid_IDEC_glbflags): Likewise.
+
+2007-07-04 Marius Cornea <marius.cornea@intel.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ * _addsub_dd.c: New file from Intel BID library.
+ * _addsub_sd.c: Likewise.
+ * _addsub_td.c: Likewise.
+ * _dd_to_df.c: Likewise.
+ * _dd_to_di.c: Likewise.
+ * _dd_to_sd.c: Likewise.
+ * _dd_to_sf.c: Likewise.
+ * _dd_to_si.c: Likewise.
+ * _dd_to_td.c: Likewise.
+ * _dd_to_tf.c: Likewise.
+ * _dd_to_udi.c: Likewise.
+ * _dd_to_usi.c: Likewise.
+ * _dd_to_xf.c: Likewise.
+ * _df_to_dd.c: Likewise.
+ * _df_to_sd.c: Likewise.
+ * _df_to_td.c: Likewise.
+ * _di_to_dd.c: Likewise.
+ * _di_to_sd.c: Likewise.
+ * _di_to_td.c: Likewise.
+ * _div_dd.c: Likewise.
+ * _div_sd.c: Likewise.
+ * _div_td.c: Likewise.
+ * _eq_dd.c: Likewise.
+ * _eq_sd.c: Likewise.
+ * _eq_td.c: Likewise.
+ * _ge_dd.c: Likewise.
+ * _ge_sd.c: Likewise.
+ * _ge_td.c: Likewise.
+ * _gt_dd.c: Likewise.
+ * _gt_sd.c: Likewise.
+ * _gt_td.c: Likewise.
+ * _isinfd128.c: Likewise.
+ * _isinfd32.c: Likewise.
+ * _isinfd64.c: Likewise.
+ * _le_dd.c: Likewise.
+ * _le_sd.c: Likewise.
+ * _le_td.c: Likewise.
+ * _lt_dd.c: Likewise.
+ * _lt_sd.c: Likewise.
+ * _lt_td.c: Likewise.
+ * _mul_dd.c: Likewise.
+ * _mul_sd.c: Likewise.
+ * _mul_td.c: Likewise.
+ * _ne_dd.c: Likewise.
+ * _ne_sd.c: Likewise.
+ * _ne_td.c: Likewise.
+ * _sd_to_dd.c: Likewise.
+ * _sd_to_df.c: Likewise.
+ * _sd_to_di.c: Likewise.
+ * _sd_to_sf.c: Likewise.
+ * _sd_to_si.c: Likewise.
+ * _sd_to_td.c: Likewise.
+ * _sd_to_tf.c: Likewise.
+ * _sd_to_udi.c: Likewise.
+ * _sd_to_usi.c: Likewise.
+ * _sd_to_xf.c: Likewise.
+ * _sf_to_dd.c: Likewise.
+ * _sf_to_sd.c: Likewise.
+ * _sf_to_td.c: Likewise.
+ * _si_to_dd.c: Likewise.
+ * _si_to_sd.c: Likewise.
+ * _si_to_td.c: Likewise.
+ * _td_to_dd.c: Likewise.
+ * _td_to_df.c: Likewise.
+ * _td_to_di.c: Likewise.
+ * _td_to_sd.c: Likewise.
+ * _td_to_sf.c: Likewise.
+ * _td_to_si.c: Likewise.
+ * _td_to_tf.c: Likewise.
+ * _td_to_udi.c: Likewise.
+ * _td_to_usi.c: Likewise.
+ * _td_to_xf.c: Likewise.
+ * _tf_to_dd.c: Likewise.
+ * _tf_to_sd.c: Likewise.
+ * _tf_to_td.c: Likewise.
+ * _udi_to_dd.c: Likewise.
+ * _udi_to_sd.c: Likewise.
+ * _udi_to_td.c: Likewise.
+ * _unord_dd.c: Likewise.
+ * _unord_sd.c: Likewise.
+ * _unord_td.c: Likewise.
+ * _usi_to_dd.c: Likewise.
+ * _usi_to_sd.c: Likewise.
+ * _usi_to_td.c: Likewise.
+ * _xf_to_dd.c: Likewise.
+ * _xf_to_sd.c: Likewise.
+ * _xf_to_td.c: Likewise.
+
+2007-07-04 Marius Cornea <marius.cornea@intel.com>
+
+ * b2d.h: New file from Intel BID library.
+ * bid128_2_str.h: Likewise.
+ * bid128_2_str_macros.h: Likewise.
+ * bid128_2_str_tables.c: Likewise.
+ * bid128_add.c: Likewise.
+ * bid128.c: Likewise.
+ * bid128_compare.c: Likewise.
+ * bid128_div.c: Likewise.
+ * bid128_fma.c: Likewise.
+ * bid128_fromstring.c: Likewise.
+ * bid128_logb.c: Likewise.
+ * bid128_minmax.c: Likewise.
+ * bid128_mul.c: Likewise.
+ * bid128_next.c: Likewise.
+ * bid128_noncomp.c: Likewise.
+ * bid128_quantize.c: Likewise.
+ * bid128_rem.c: Likewise.
+ * bid128_round_integral.c: Likewise.
+ * bid128_scalb.c: Likewise.
+ * bid128_sqrt.c: Likewise.
+ * bid128_to_int32.c: Likewise.
+ * bid128_to_int64.c: Likewise.
+ * bid128_to_string.c: Likewise.
+ * bid128_to_uint32.c: Likewise.
+ * bid128_to_uint64.c: Likewise.
+ * bid32_to_bid128.c: Likewise.
+ * bid32_to_bid64.c: Likewise.
+ * bid64_add.c: Likewise.
+ * bid64_compare.c: Likewise.
+ * bid64_div.c: Likewise.
+ * bid64_fma.c: Likewise.
+ * bid64_logb.c: Likewise.
+ * bid64_minmax.c: Likewise.
+ * bid64_mul.c: Likewise.
+ * bid64_next.c: Likewise.
+ * bid64_noncomp.c: Likewise.
+ * bid64_quantize.c: Likewise.
+ * bid64_rem.c: Likewise.
+ * bid64_round_integral.c: Likewise.
+ * bid64_scalb.c: Likewise.
+ * bid64_sqrt.c: Likewise.
+ * bid64_to_bid128.c: Likewise.
+ * bid64_to_int32.c: Likewise.
+ * bid64_to_int64.c: Likewise.
+ * bid64_to_uint32.c: Likewise.
+ * bid64_to_uint64.c: Likewise.
+ * bid_conf.h: Likewise.
+ * bid_flag_operations.c: Likewise.
+ * bid_from_int.c: Likewise.
+ * bid_functions.h: Likewise.
+ * bid_internal.h: Likewise.
+ * bid_round.c: Likewise.
+ * bid_string.c: Likewise.
+ * binarydecimal.c: Likewise.
+ * convert_data.c: Likewise.
+ * decimal_data.c: Likewise.
+ * decimal_globals.c: Likewise.
+ * div_macros.h: Likewise.
+ * inline_bid_add.h: Likewise.
+ * sqrt_macros.h: Likewise.
diff --git a/gcc-4.9/libgcc/config/libbid/_addsub_dd.c b/gcc-4.9/libgcc/config/libbid/_addsub_dd.c
new file mode 100644
index 000000000..579f11475
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_addsub_dd.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_adddd3 (_Decimal64 x, _Decimal64 y) {
+ union decimal64 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid64_add (ux.i, uy.i);
+ return (res.d);
+}
+
+_Decimal64
+__bid_subdd3 (_Decimal64 x, _Decimal64 y) {
+ union decimal64 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid64_sub (ux.i, uy.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_addsub_sd.c b/gcc-4.9/libgcc/config/libbid/_addsub_sd.c
new file mode 100644
index 000000000..7b686f075
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_addsub_sd.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_addsd3 (_Decimal32 x, _Decimal32 y) {
+ UINT64 x64, y64, res64;
+ union decimal32 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res64 = __bid64_add (x64, y64);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
+
+_Decimal32
+__bid_subsd3 (_Decimal32 x, _Decimal32 y) {
+ UINT64 x64, y64, res64;
+ union decimal32 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res64 = __bid64_sub (x64, y64);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_addsub_td.c b/gcc-4.9/libgcc/config/libbid/_addsub_td.c
new file mode 100644
index 000000000..04bf2b69b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_addsub_td.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_addtd3 (_Decimal128 x, _Decimal128 y) {
+ union decimal128 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid128_add (ux.i, uy.i);
+ return (res.d);
+}
+
+_Decimal128
+__bid_subtd3 (_Decimal128 x, _Decimal128 y) {
+ union decimal128 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid128_sub (ux.i, uy.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_df.c b/gcc-4.9/libgcc/config/libbid/_dd_to_df.c
new file mode 100644
index 000000000..946aea1ca
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_df.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+DFtype
+__bid_truncdddf (_Decimal64 x) {
+ DFtype res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_binary64 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_di.c b/gcc-4.9/libgcc/config/libbid/_dd_to_di.c
new file mode 100644
index 000000000..4de9daa8e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_di.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+DItype
+__bid_fixdddi (_Decimal64 x) {
+ DItype res = 0xbaddbaddbaddbaddull;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_int64_xint (ux.i);
+
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_sd.c b/gcc-4.9/libgcc/config/libbid/_dd_to_sd.c
new file mode 100644
index 000000000..10d616f29
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_sd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_truncddsd2 (_Decimal64 x) {
+ union decimal32 res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res.i = __bid64_to_bid32 (ux.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_sf.c b/gcc-4.9/libgcc/config/libbid/_dd_to_sf.c
new file mode 100644
index 000000000..bf69dee95
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_sf.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+SFtype
+__bid_truncddsf (_Decimal64 x) {
+ SFtype res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_binary32 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_si.c b/gcc-4.9/libgcc/config/libbid/_dd_to_si.c
new file mode 100644
index 000000000..aa6ca3f93
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_si.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+SItype
+__bid_fixddsi (_Decimal64 x) {
+ SItype res = 0xbaddbadd;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_int32_xint (ux.i);
+
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_td.c b/gcc-4.9/libgcc/config/libbid/_dd_to_td.c
new file mode 100644
index 000000000..9416e7a6f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_td.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_extendddtd2 (_Decimal64 x) {
+ union decimal128 res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res.i = __bid64_to_bid128 (ux.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_tf.c b/gcc-4.9/libgcc/config/libbid/_dd_to_tf.c
new file mode 100644
index 000000000..c4eb69fd4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_tf.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+#if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE
+TFtype
+__bid_extendddtf (_Decimal64 x) {
+ union float128 res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res.i = __bid64_to_binary128 (ux.i);
+ return (res.f);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_udi.c b/gcc-4.9/libgcc/config/libbid/_dd_to_udi.c
new file mode 100644
index 000000000..d4be4f525
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_udi.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+UDItype
+__bid_fixunsdddi (_Decimal64 x) {
+ UDItype res = 0xbaddbaddbaddbaddull;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_uint64_xint (ux.i);
+
+ if (res == 0x8000000000000000ull) res = 0; // for NaNs too
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_usi.c b/gcc-4.9/libgcc/config/libbid/_dd_to_usi.c
new file mode 100644
index 000000000..28529d5ff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_usi.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+USItype
+__bid_fixunsddsi (_Decimal64 x) {
+ USItype res = 0xbaddbadd;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_uint32_xint (ux.i);
+
+ if (res == 0x80000000) res = 0; // for NaNs too
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_dd_to_xf.c b/gcc-4.9/libgcc/config/libbid/_dd_to_xf.c
new file mode 100644
index 000000000..da13b7234
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_dd_to_xf.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+XFtype
+__bid_extendddxf (_Decimal64 x) {
+ XFtype res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_to_binary80 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_df_to_dd.c b/gcc-4.9/libgcc/config/libbid/_df_to_dd.c
new file mode 100644
index 000000000..0b9159aeb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_df_to_dd.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_extenddfdd (DFtype x) {
+ union decimal64 res;
+ res.i = __binary64_to_bid64 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_df_to_sd.c b/gcc-4.9/libgcc/config/libbid/_df_to_sd.c
new file mode 100644
index 000000000..2ac2db957
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_df_to_sd.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_truncdfsd (DFtype x) {
+ union decimal32 res;
+
+ res.i = __binary64_to_bid32 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_df_to_td.c b/gcc-4.9/libgcc/config/libbid/_df_to_td.c
new file mode 100644
index 000000000..d45eaf4bd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_df_to_td.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_extenddftd (DFtype x) {
+ union decimal128 res;
+ res.i = __binary64_to_bid128 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_di_to_dd.c b/gcc-4.9/libgcc/config/libbid/_di_to_dd.c
new file mode 100644
index 000000000..f80bbfd59
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_di_to_dd.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_floatdidd (DItype x) {
+ union decimal64 res;
+
+ res.i = __bid64_from_int64 (x);
+ return (res.d);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_di_to_sd.c b/gcc-4.9/libgcc/config/libbid/_di_to_sd.c
new file mode 100644
index 000000000..65e4e95aa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_di_to_sd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_floatdisd (DItype x) {
+ union decimal32 res;
+ UINT64 res64;
+
+ res64 = __bid64_from_int64 (x);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_di_to_td.c b/gcc-4.9/libgcc/config/libbid/_di_to_td.c
new file mode 100644
index 000000000..d30f58bf5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_di_to_td.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_floatditd (DItype x) {
+ union decimal128 res;
+
+ res.i = __bid128_from_int64 (x);
+ return (res.d);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_div_dd.c b/gcc-4.9/libgcc/config/libbid/_div_dd.c
new file mode 100644
index 000000000..a804ecd40
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_div_dd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_divdd3 (_Decimal64 x, _Decimal64 y) {
+ union decimal64 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid64_div (ux.i, uy.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_div_sd.c b/gcc-4.9/libgcc/config/libbid/_div_sd.c
new file mode 100644
index 000000000..303b23270
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_div_sd.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_divsd3 (_Decimal32 x, _Decimal32 y) {
+ UINT64 x64, y64, res64;
+ union decimal32 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res64 = __bid64_div (x64, y64);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_div_td.c b/gcc-4.9/libgcc/config/libbid/_div_td.c
new file mode 100644
index 000000000..48307051b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_div_td.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_divtd3 (_Decimal128 x, _Decimal128 y) {
+ union decimal128 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid128_div (ux.i, uy.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_eq_dd.c b/gcc-4.9/libgcc/config/libbid/_eq_dd.c
new file mode 100644
index 000000000..498352a2d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_eq_dd.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_eqdd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid64_quiet_equal (ux.i, uy.i);
+ if (res == 0)
+ res = 1;
+ else
+ res = 0;
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_eq_sd.c b/gcc-4.9/libgcc/config/libbid/_eq_sd.c
new file mode 100644
index 000000000..d32e5b526
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_eq_sd.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_eqsd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = __bid64_quiet_equal (x64, y64);
+ if (res == 0)
+ res = 1;
+ else
+ res = 0;
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_eq_td.c b/gcc-4.9/libgcc/config/libbid/_eq_td.c
new file mode 100644
index 000000000..ae7275980
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_eq_td.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_eqtd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid128_quiet_equal (ux.i, uy.i);
+ if (res == 0)
+ res = 1;
+ else
+ res = 0;
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_ge_dd.c b/gcc-4.9/libgcc/config/libbid/_ge_dd.c
new file mode 100644
index 000000000..e04509721
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_ge_dd.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_gedd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid64_quiet_greater_equal (ux.i, uy.i);
+ if (res == 0) res = -1;
+
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_ge_sd.c b/gcc-4.9/libgcc/config/libbid/_ge_sd.c
new file mode 100644
index 000000000..f4313dbb0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_ge_sd.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_gesd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = __bid64_quiet_greater_equal (x64, y64);
+ if (res == 0) res = -1;
+
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_ge_td.c b/gcc-4.9/libgcc/config/libbid/_ge_td.c
new file mode 100644
index 000000000..58eea3199
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_ge_td.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_getd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid128_quiet_greater_equal (ux.i, uy.i);
+ if (res == 0) res = -1;
+
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_gt_dd.c b/gcc-4.9/libgcc/config/libbid/_gt_dd.c
new file mode 100644
index 000000000..9467dcd33
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_gt_dd.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_gtdd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid64_quiet_greater (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_gt_sd.c b/gcc-4.9/libgcc/config/libbid/_gt_sd.c
new file mode 100644
index 000000000..6dfa16545
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_gt_sd.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_gtsd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = __bid64_quiet_greater (x64, y64);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_gt_td.c b/gcc-4.9/libgcc/config/libbid/_gt_td.c
new file mode 100644
index 000000000..2ee7d77c7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_gt_td.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_gttd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid128_quiet_greater (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_isinfd128.c b/gcc-4.9/libgcc/config/libbid/_isinfd128.c
new file mode 100644
index 000000000..03bc4ba75
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_isinfd128.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+int
+isinfd128 (_Decimal128 x) {
+ int res;
+ union decimal128 ux;
+
+ ux.d = x;
+ res = __bid128_isInf (ux.i);
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_isinfd32.c b/gcc-4.9/libgcc/config/libbid/_isinfd32.c
new file mode 100644
index 000000000..b97d180cb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_isinfd32.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+int
+isinfd32 (_Decimal32 x) {
+ int res;
+ UINT64 x64;
+ union decimal32 ux;
+
+ ux.d = x;
+ x64 = __bid32_to_bid64 (ux.i);
+ res = __bid64_isInf (x64);
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_isinfd64.c b/gcc-4.9/libgcc/config/libbid/_isinfd64.c
new file mode 100644
index 000000000..6460fb67a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_isinfd64.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+int
+isinfd64 (_Decimal64 x) {
+ int res;
+ union decimal64 ux;
+
+ ux.d = x;
+ res = __bid64_isInf (ux.i);
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_le_dd.c b/gcc-4.9/libgcc/config/libbid/_le_dd.c
new file mode 100644
index 000000000..5fce749dc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_le_dd.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_ledd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid64_quiet_less_equal (ux.i, uy.i);
+ if (res != 0)
+ res = -1;
+ else
+ res = 1;
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_le_sd.c b/gcc-4.9/libgcc/config/libbid/_le_sd.c
new file mode 100644
index 000000000..f7a417f6f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_le_sd.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_lesd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = __bid64_quiet_less_equal (x64, y64);
+ if (res != 0)
+ res = -1;
+ else
+ res = 1;
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_le_td.c b/gcc-4.9/libgcc/config/libbid/_le_td.c
new file mode 100644
index 000000000..439abb91a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_le_td.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_letd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid128_quiet_less_equal (ux.i, uy.i);
+ if (res != 0)
+ res = -1;
+ else
+ res = 1;
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_lt_dd.c b/gcc-4.9/libgcc/config/libbid/_lt_dd.c
new file mode 100644
index 000000000..e5ca8468d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_lt_dd.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_ltdd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = -__bid64_quiet_less (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_lt_sd.c b/gcc-4.9/libgcc/config/libbid/_lt_sd.c
new file mode 100644
index 000000000..4797601a5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_lt_sd.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_ltsd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = -__bid64_quiet_less (x64, y64);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_lt_td.c b/gcc-4.9/libgcc/config/libbid/_lt_td.c
new file mode 100644
index 000000000..69b5e087a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_lt_td.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_lttd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = -__bid128_quiet_less (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_mul_dd.c b/gcc-4.9/libgcc/config/libbid/_mul_dd.c
new file mode 100644
index 000000000..30cf564b0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_mul_dd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_muldd3 (_Decimal64 x, _Decimal64 y) {
+ union decimal64 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid64_mul (ux.i, uy.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_mul_sd.c b/gcc-4.9/libgcc/config/libbid/_mul_sd.c
new file mode 100644
index 000000000..1dde969e9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_mul_sd.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_mulsd3 (_Decimal32 x, _Decimal32 y) {
+ UINT64 x64, y64, res64;
+ union decimal32 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res64 = __bid64_mul (x64, y64);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_mul_td.c b/gcc-4.9/libgcc/config/libbid/_mul_td.c
new file mode 100644
index 000000000..382b54ee6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_mul_td.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_multd3 (_Decimal128 x, _Decimal128 y) {
+ union decimal128 ux, uy, res;
+
+ ux.d = x;
+ uy.d = y;
+ res.i = __bid128_mul (ux.i, uy.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_ne_dd.c b/gcc-4.9/libgcc/config/libbid/_ne_dd.c
new file mode 100644
index 000000000..192c327d3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_ne_dd.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_nedd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid64_quiet_not_equal (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_ne_sd.c b/gcc-4.9/libgcc/config/libbid/_ne_sd.c
new file mode 100644
index 000000000..a696fe82a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_ne_sd.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_nesd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = __bid64_quiet_not_equal (x64, y64);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_ne_td.c b/gcc-4.9/libgcc/config/libbid/_ne_td.c
new file mode 100644
index 000000000..85f50f9c2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_ne_td.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_netd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid128_quiet_not_equal (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_dd.c b/gcc-4.9/libgcc/config/libbid/_sd_to_dd.c
new file mode 100644
index 000000000..df277b7fa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_dd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_extendsddd2 (_Decimal32 x) {
+ union decimal64 res;
+ union decimal32 ux;
+
+ ux.d = x;
+ res.i = __bid32_to_bid64 (ux.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_df.c b/gcc-4.9/libgcc/config/libbid/_sd_to_df.c
new file mode 100644
index 000000000..500d2bc05
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_df.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+DFtype
+__bid_extendsddf (_Decimal32 x) {
+ DFtype res;
+ union decimal32 ux;
+
+ ux.d = x;
+ res = __bid32_to_binary64 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_di.c b/gcc-4.9/libgcc/config/libbid/_sd_to_di.c
new file mode 100644
index 000000000..d9716ede1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_di.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+DItype
+__bid_fixsddi (_Decimal32 x) {
+ DItype res = 0xbaddbaddbaddbaddull;
+ UINT64 x64;
+ union decimal32 ux;
+
+ ux.d = x;
+ x64 = __bid32_to_bid64 (ux.i);
+ res = __bid64_to_int64_xint (x64);
+
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_sf.c b/gcc-4.9/libgcc/config/libbid/_sd_to_sf.c
new file mode 100644
index 000000000..0b77ee86d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_sf.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+SFtype
+__bid_truncsdsf (_Decimal32 x) {
+ SFtype res;
+ union decimal32 ux;
+
+ ux.d = x;
+ res = __bid32_to_binary32 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_si.c b/gcc-4.9/libgcc/config/libbid/_sd_to_si.c
new file mode 100644
index 000000000..1a5c2630d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_si.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+SItype
+__bid_fixsdsi (_Decimal32 x) {
+ SItype res = 0xbaddbadd;
+ UINT64 x64;
+ union decimal32 ux;
+
+ ux.d = x;
+ x64 = __bid32_to_bid64 (ux.i);
+ res = __bid64_to_int32_xint (x64);
+
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_td.c b/gcc-4.9/libgcc/config/libbid/_sd_to_td.c
new file mode 100644
index 000000000..cffc55896
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_td.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_extendsdtd2 (_Decimal32 x) {
+ union decimal128 res;
+ union decimal32 ux;
+
+ ux.d = x;
+ res.i = __bid32_to_bid128 (ux.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_tf.c b/gcc-4.9/libgcc/config/libbid/_sd_to_tf.c
new file mode 100644
index 000000000..171668ed1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_tf.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+#if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE
+TFtype
+__bid_extendsdtf (_Decimal32 x) {
+ union float128 res;
+ union decimal32 ux;
+
+ ux.d = x;
+ res.i = __bid32_to_binary128 (ux.i);
+ return (res.f);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_udi.c b/gcc-4.9/libgcc/config/libbid/_sd_to_udi.c
new file mode 100644
index 000000000..6b71c6d63
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_udi.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+UDItype
+__bid_fixunssddi (_Decimal32 x) {
+ UDItype res = 0xbaddbaddbaddbaddull;
+ UINT64 x64;
+ union decimal32 ux;
+
+ ux.d = x;
+ x64 = __bid32_to_bid64 (ux.i);
+ res = __bid64_to_uint64_xint (x64);
+
+ if (res == 0x8000000000000000ull) res = 0; // for NaNs too
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_usi.c b/gcc-4.9/libgcc/config/libbid/_sd_to_usi.c
new file mode 100644
index 000000000..f4fcba0f5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_usi.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+USItype
+__bid_fixunssdsi (_Decimal32 x) {
+ USItype res = 0xbaddbadd;
+ UINT64 x64;
+ union decimal32 ux;
+
+ ux.d = x;
+ x64 = __bid32_to_bid64 (ux.i);
+ res = __bid64_to_uint32_xint (x64);
+
+ if (res == 0x80000000) res = 0; // for NaNs too
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_sd_to_xf.c b/gcc-4.9/libgcc/config/libbid/_sd_to_xf.c
new file mode 100644
index 000000000..7c702ea6d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sd_to_xf.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+XFtype
+__bid_extendsdxf (_Decimal32 x) {
+ XFtype res;
+ union decimal32 ux;
+
+ ux.d = x;
+ res = __bid32_to_binary80 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sf_to_dd.c b/gcc-4.9/libgcc/config/libbid/_sf_to_dd.c
new file mode 100644
index 000000000..129f464af
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sf_to_dd.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_extendsfdd (SFtype x) {
+ union decimal64 res;
+ res.i = __binary32_to_bid64 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sf_to_sd.c b/gcc-4.9/libgcc/config/libbid/_sf_to_sd.c
new file mode 100644
index 000000000..60d32c68e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sf_to_sd.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_extendsfsd (SFtype x) {
+ union decimal32 res;
+ res.i = __binary32_to_bid32 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_sf_to_td.c b/gcc-4.9/libgcc/config/libbid/_sf_to_td.c
new file mode 100644
index 000000000..fa3bfb673
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_sf_to_td.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_extendsftd (SFtype x) {
+ union decimal128 res;
+ res.i = __binary32_to_bid128 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_si_to_dd.c b/gcc-4.9/libgcc/config/libbid/_si_to_dd.c
new file mode 100644
index 000000000..f95fd5e51
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_si_to_dd.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_floatsidd (SItype x) {
+ union decimal64 res;
+
+ res.i = __bid64_from_int32 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_si_to_sd.c b/gcc-4.9/libgcc/config/libbid/_si_to_sd.c
new file mode 100644
index 000000000..04723248c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_si_to_sd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_floatsisd (SItype x) {
+ union decimal32 res;
+ UINT64 res64;
+
+ res64 = __bid64_from_int32 (x);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_si_to_td.c b/gcc-4.9/libgcc/config/libbid/_si_to_td.c
new file mode 100644
index 000000000..bd65d37e3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_si_to_td.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_floatsitd (SItype x) {
+ union decimal128 res;
+
+ res.i = __bid128_from_int32 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_dd.c b/gcc-4.9/libgcc/config/libbid/_td_to_dd.c
new file mode 100644
index 000000000..1f5ac70b1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_dd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_trunctddd2 (_Decimal128 x) {
+ union decimal128 ux;
+ union decimal64 res;
+
+ ux.d = x;
+ res.i = __bid128_to_bid64 (ux.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_df.c b/gcc-4.9/libgcc/config/libbid/_td_to_df.c
new file mode 100644
index 000000000..d0d8565d5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_df.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+DFtype
+__bid_trunctddf (_Decimal128 x) {
+ DFtype res;
+ union decimal128 ux;
+
+ ux.d = x;
+ res = __bid128_to_binary64 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_di.c b/gcc-4.9/libgcc/config/libbid/_td_to_di.c
new file mode 100644
index 000000000..2f10a7b1a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_di.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+DItype
+__bid_fixtddi (_Decimal128 x) {
+ DItype res = 0xbaddbaddbaddbaddull;
+ union decimal128 ux;
+
+ ux.d = x;
+ res = __bid128_to_int64_xint (ux.i);
+
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_sd.c b/gcc-4.9/libgcc/config/libbid/_td_to_sd.c
new file mode 100644
index 000000000..af82f4a77
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_sd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_trunctdsd2 (_Decimal128 x) {
+ union decimal128 ux;
+ union decimal32 res;
+
+ ux.d = x;
+ res.i = __bid128_to_bid32 (ux.i);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_sf.c b/gcc-4.9/libgcc/config/libbid/_td_to_sf.c
new file mode 100644
index 000000000..3132c0604
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_sf.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+SFtype
+__bid_trunctdsf (_Decimal128 x) {
+ SFtype res;
+ union decimal128 ux;
+
+ ux.d = x;
+ res = __bid128_to_binary32 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_si.c b/gcc-4.9/libgcc/config/libbid/_td_to_si.c
new file mode 100644
index 000000000..b3a4e1439
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_si.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+SItype
+__bid_fixtdsi (_Decimal128 x) {
+ union decimal128 ux;
+ SItype res = 0xbaddbadd;
+
+ ux.d = x;
+ res = __bid128_to_int32_xint (ux.i);
+
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_tf.c b/gcc-4.9/libgcc/config/libbid/_td_to_tf.c
new file mode 100644
index 000000000..3a7d5aeb1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_tf.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+#if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE
+TFtype
+__bid_trunctdtf (_Decimal128 x) {
+ union float128 res;
+ union decimal128 ux;
+
+ ux.d = x;
+ res.i = __bid128_to_binary128 (ux.i);
+ return (res.f);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_udi.c b/gcc-4.9/libgcc/config/libbid/_td_to_udi.c
new file mode 100644
index 000000000..398e5dcd4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_udi.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+UDItype
+__bid_fixunstddi (_Decimal128 x) {
+ UDItype res = 0xbaddbaddbaddbaddull;
+ union decimal128 ux;
+
+ ux.d = x;
+
+ res = __bid128_to_uint64_xint (ux.i);
+
+ if (res == 0x8000000000000000ull) res = 0; // for NaNs too
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_usi.c b/gcc-4.9/libgcc/config/libbid/_td_to_usi.c
new file mode 100644
index 000000000..b510469fd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_usi.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+USItype
+__bid_fixunstdsi (_Decimal128 x) {
+ USItype res = 0xbaddbadd;
+ union decimal128 ux;
+
+ ux.d = x;
+ res = __bid128_to_uint32_xint (ux.i);
+
+ if (res == 0x80000000) res = 0; // for NaNs too
+ return (res);
+}
+
+
diff --git a/gcc-4.9/libgcc/config/libbid/_td_to_xf.c b/gcc-4.9/libgcc/config/libbid/_td_to_xf.c
new file mode 100644
index 000000000..957cb4282
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_td_to_xf.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+XFtype
+__bid_trunctdxf (_Decimal128 x) {
+ XFtype res;
+ union decimal128 ux;
+
+ ux.d = x;
+ res = __bid128_to_binary80 (ux.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_tf_to_dd.c b/gcc-4.9/libgcc/config/libbid/_tf_to_dd.c
new file mode 100644
index 000000000..dd89112f5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_tf_to_dd.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+#if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE
+_Decimal64
+__bid_trunctfdd (TFtype x) {
+ union decimal64 res;
+ union float128 ux;
+
+ ux.f = x;
+ res.i = __binary128_to_bid64 (ux.i);
+ return (res.d);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/_tf_to_sd.c b/gcc-4.9/libgcc/config/libbid/_tf_to_sd.c
new file mode 100644
index 000000000..c4738c3e7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_tf_to_sd.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+#if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE
+_Decimal32
+__bid_trunctfsd (TFtype x) {
+ union decimal32 res;
+ union float128 ux;
+
+ ux.f = x;
+ res.i = __binary128_to_bid32 (ux.i);
+ return (res.d);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/_tf_to_td.c b/gcc-4.9/libgcc/config/libbid/_tf_to_td.c
new file mode 100644
index 000000000..dfb328f15
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_tf_to_td.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+#if LIBGCC2_HAS_TF_MODE || BID_HAS_TF_MODE
+_Decimal128
+__bid_extendtftd (TFtype x) {
+ union decimal128 res;
+ union float128 ux;
+
+ ux.f = x;
+ res.i = __binary128_to_bid128 (ux.i);
+ return (res.d);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/_udi_to_dd.c b/gcc-4.9/libgcc/config/libbid/_udi_to_dd.c
new file mode 100644
index 000000000..cc0ccd445
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_udi_to_dd.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_floatunsdidd (UDItype x) {
+ union decimal64 res;
+
+ res.i = __bid64_from_uint64 (x);
+ return (res.d);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_udi_to_sd.c b/gcc-4.9/libgcc/config/libbid/_udi_to_sd.c
new file mode 100644
index 000000000..f736f1d4f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_udi_to_sd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_floatunsdisd (UDItype x) {
+ union decimal32 res;
+ UINT64 res64;
+
+ res64 = __bid64_from_uint64 (x);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_udi_to_td.c b/gcc-4.9/libgcc/config/libbid/_udi_to_td.c
new file mode 100644
index 000000000..21a2db427
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_udi_to_td.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_floatunsditd (UDItype x) {
+ union decimal128 res;
+
+ res.i = __bid128_from_uint64 (x);
+ return (res.d);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_unord_dd.c b/gcc-4.9/libgcc/config/libbid/_unord_dd.c
new file mode 100644
index 000000000..fe645844d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_unord_dd.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_unorddd2 (_Decimal64 x, _Decimal64 y) {
+ CMPtype res;
+ union decimal64 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid64_quiet_unordered (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_unord_sd.c b/gcc-4.9/libgcc/config/libbid/_unord_sd.c
new file mode 100644
index 000000000..4e2a126d0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_unord_sd.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_unordsd2 (_Decimal32 x, _Decimal32 y) {
+ CMPtype res;
+ UINT64 x64, y64;
+ union decimal32 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ x64 = __bid32_to_bid64 (ux.i);
+ y64 = __bid32_to_bid64 (uy.i);
+ res = __bid64_quiet_unordered (x64, y64);
+ return (res);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_unord_td.c b/gcc-4.9/libgcc/config/libbid/_unord_td.c
new file mode 100644
index 000000000..8ef0e27c5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_unord_td.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+CMPtype
+__bid_unordtd2 (_Decimal128 x, _Decimal128 y) {
+ CMPtype res;
+ union decimal128 ux, uy;
+
+ ux.d = x;
+ uy.d = y;
+ res = __bid128_quiet_unordered (ux.i, uy.i);
+ return (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_usi_to_dd.c b/gcc-4.9/libgcc/config/libbid/_usi_to_dd.c
new file mode 100644
index 000000000..b644b09cc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_usi_to_dd.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_floatunssidd (USItype x) {
+ union decimal64 res;
+
+ res.i = __bid64_from_uint32 (x);
+ return (res.d);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_usi_to_sd.c b/gcc-4.9/libgcc/config/libbid/_usi_to_sd.c
new file mode 100644
index 000000000..0206cf3c7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_usi_to_sd.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_floatunssisd (USItype x) {
+ union decimal32 res;
+ UINT64 res64;
+
+ res64 = __bid64_from_uint32 (x);
+ res.i = __bid64_to_bid32 (res64);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_usi_to_td.c b/gcc-4.9/libgcc/config/libbid/_usi_to_td.c
new file mode 100644
index 000000000..a28277e09
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_usi_to_td.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_floatunssitd (USItype x) {
+ union decimal128 res;
+
+ res.i = __bid128_from_uint32 (x);
+ return (res.d);
+}
+
diff --git a/gcc-4.9/libgcc/config/libbid/_xf_to_dd.c b/gcc-4.9/libgcc/config/libbid/_xf_to_dd.c
new file mode 100644
index 000000000..edc4cfb40
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_xf_to_dd.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal64
+__bid_truncxfdd (XFtype x) {
+ union decimal64 res;
+ res.i = __binary80_to_bid64 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_xf_to_sd.c b/gcc-4.9/libgcc/config/libbid/_xf_to_sd.c
new file mode 100644
index 000000000..d264468d0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_xf_to_sd.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal32
+__bid_truncxfsd (XFtype x) {
+ union decimal32 res;
+ res.i = __binary80_to_bid32 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/_xf_to_td.c b/gcc-4.9/libgcc/config/libbid/_xf_to_td.c
new file mode 100644
index 000000000..459a51a2f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/_xf_to_td.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+#include "bid_gcc_intrinsics.h"
+
+_Decimal128
+__bid_extendxftd (XFtype x) {
+ union decimal128 res;
+ res.i = __binary80_to_bid128 (x);
+ return (res.d);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128.c b/gcc-4.9/libgcc/config/libbid/bid128.c
new file mode 100644
index 000000000..63a3b93b4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128.c
@@ -0,0 +1,4333 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+// the first entry of nr_digits[i - 1] (where 1 <= i <= 113), indicates
+// the number of decimal digits needed to represent a binary number with i bits;
+// however, if a binary number of i bits may require either k or k + 1 decimal
+// digits, then the first entry of nr_digits[i - 1] is 0; in this case if the
+// number is less than the value represented by the second and third entries
+// concatenated, then the number of decimal digits k is the fourth entry, else
+// the number of decimal digits is the fourth entry plus 1
+DEC_DIGITS nr_digits[] = { // only the first entry is used if it is not 0
+ {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
+ , // 1-bit n < 10^1
+ {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
+ , // 2-bit n < 10^1
+ {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
+ , // 3-bit n < 10^1
+ {0, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
+ , // 4-bit n ? 10^1
+ {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
+ , // 5-bit n < 10^2
+ {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
+ , // 6-bit n < 10^2
+ {0, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
+ , // 7-bit n ? 10^2
+ {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
+ , // 8-bit n < 10^3
+ {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
+ , // 9-bit n < 10^3
+ {0, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
+ , // 10-bit n ? 10^3
+ {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
+ , // 11-bit n < 10^4
+ {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
+ , // 12-bit n < 10^4
+ {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
+ , // 13-bit n < 10^4
+ {0, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
+ , // 14-bit n ? 10^4
+ {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
+ , // 15-bit n < 10^5
+ {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
+ , // 16-bit n < 10^5
+ {0, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
+ , // 17-bit n ? 10^5
+ {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
+ , // 18-bit n < 10^6
+ {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
+ , // 19-bit n < 10^6
+ {0, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
+ , // 20-bit n ? 10^6
+ {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
+ , // 21-bit n < 10^7
+ {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
+ , // 22-bit n < 10^7
+ {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
+ , // 23-bit n < 10^7
+ {0, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
+ , // 24-bit n ? 10^7
+ {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
+ , // 25-bit n < 10^8
+ {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
+ , // 26-bit n < 10^8
+ {0, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
+ , // 27-bit n ? 10^8
+ {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
+ , // 28-bit n < 10^9
+ {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
+ , // 29-bit n < 10^9
+ {0, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
+ , // 30-bit n ? 10^9
+ {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
+ , // 31-bit n < 10^10
+ {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
+ , // 32-bit n < 10^10
+ {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
+ , // 33-bit n < 10^10
+ {0, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
+ , // 34-bit n ? 10^10
+ {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
+ , // 35-bit n < 10^11
+ {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
+ , // 36-bit n < 10^11
+ {0, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
+ , // 37-bit n ? 10^11
+ {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
+ , // 38-bit n < 10^12
+ {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
+ , // 39-bit n < 10^12
+ {0, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
+ , // 40-bit n ? 10^12
+ {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
+ , // 41-bit n < 10^13
+ {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
+ , // 42-bit n < 10^13
+ {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
+ , // 43-bit n < 10^13
+ {0, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
+ , // 44-bit n ? 10^13
+ {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
+ , // 45-bit n < 10^14
+ {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
+ , // 46-bit n < 10^14
+ {0, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
+ , // 47-bit n ? 10^14
+ {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
+ , // 48-bit n < 10^15
+ {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
+ , // 49-bit n < 10^15
+ {0, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
+ , // 50-bit n ? 10^15
+ {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
+ , // 51-bit n < 10^16
+ {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
+ , // 52-bit n < 10^16
+ {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
+ , // 53-bit n < 10^16
+ {0, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
+ , // 54-bit n ? 10^16
+ {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
+ , // 55-bit n < 10^17
+ {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
+ , // 56-bit n < 10^17
+ {0, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
+ , // 57-bit n ? 10^17
+ {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
+ , // 58-bit n < 10^18
+ {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
+ , // 59-bit n < 10^18
+ {0, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
+ , // 60-bit n ? 10^18
+ {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
+ , // 61-bit n < 10^19
+ {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
+ , // 62-bit n < 10^19
+ {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
+ , // 63-bit n < 10^19
+ {0, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
+ , // 64-bit n ? 10^19
+ {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
+ , // 65-bit n < 10^20
+ {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
+ , // 66-bit n < 10^20
+ {0, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
+ , // 67-bit n ? 10^20
+ {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
+ , // 68-bit n < 10^21
+ {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
+ , // 69-bit n < 10^21
+ {0, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
+ , // 70-bit n ? 10^21
+ {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
+ , // 71-bit n < 10^22
+ {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
+ , // 72-bit n < 10^22
+ {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
+ , // 73-bit n < 10^22
+ {0, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
+ , // 74-bit n ? 10^22
+ {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
+ , // 75-bit n < 10^23
+ {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
+ , // 76-bit n < 10^23
+ {0, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
+ , // 77-bit n ? 10^23
+ {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
+ , // 78-bit n < 10^24
+ {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
+ , // 79-bit n < 10^24
+ {0, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
+ , // 80-bit n ? 10^24
+ {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
+ , // 81-bit n < 10^25
+ {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
+ , // 82-bit n < 10^25
+ {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
+ , // 83-bit n < 10^25
+ {0, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
+ , // 84-bit n ? 10^25
+ {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
+ , // 85-bit n < 10^26
+ {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
+ , // 86-bit n < 10^26
+ {0, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
+ , // 87-bit n ? 10^26
+ {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
+ , // 88-bit n < 10^27
+ {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
+ , // 89-bit n < 10^27
+ {0, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
+ , // 90-bit n ? 10^27
+ {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
+ , // 91-bit n < 10^28
+ {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
+ , // 92-bit n < 10^28
+ {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
+ , // 93-bit n < 10^28
+ {0, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
+ , // 94-bit n ? 10^28
+ {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
+ , // 95-bit n < 10^29
+ {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
+ , // 96-bit n < 10^29
+ {0, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
+ , // 97-bit n ? 10^29
+ {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
+ , // 98-bit n < 10^30
+ {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
+ , // 99-bit n < 10^30
+ {0, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
+ , // 100-bit n ? 10^30
+ {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
+ , // 101-bit n < 10^31
+ {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
+ , // 102-bit n < 10^31
+ {0, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
+ , // 103-bit n ? 10^31
+ {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
+ , // 104-bit n < 10^32
+ {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
+ , // 105-bit n < 10^32
+ {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
+ , // 106-bit n < 10^32
+ {0, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
+ , // 107-bit n ? 10^32
+ {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
+ , // 108-bit n < 10^33
+ {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
+ , // 109-bit n < 10^33
+ {0, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
+ , // 100-bit n ? 10^33
+ {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}
+ , // 111-bit n < 10^34
+ {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}
+ , // 112-bit n < 10^34
+ {0, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} // 113-bit n ? 10^34
+//{ 35, 0x0013426172c74d82ULL, 0x2b878fe800000000ULL, 35 } // 114-bit n < 10^35
+};
+
+// midpoint64[i - 1] = 1/2 * 10^i = 5 * 10^(i-1), 1 <= i <= 19
+UINT64 midpoint64[] = {
+ 0x0000000000000005ULL, // 1/2 * 10^1 = 5 * 10^0
+ 0x0000000000000032ULL, // 1/2 * 10^2 = 5 * 10^1
+ 0x00000000000001f4ULL, // 1/2 * 10^3 = 5 * 10^2
+ 0x0000000000001388ULL, // 1/2 * 10^4 = 5 * 10^3
+ 0x000000000000c350ULL, // 1/2 * 10^5 = 5 * 10^4
+ 0x000000000007a120ULL, // 1/2 * 10^6 = 5 * 10^5
+ 0x00000000004c4b40ULL, // 1/2 * 10^7 = 5 * 10^6
+ 0x0000000002faf080ULL, // 1/2 * 10^8 = 5 * 10^7
+ 0x000000001dcd6500ULL, // 1/2 * 10^9 = 5 * 10^8
+ 0x000000012a05f200ULL, // 1/2 * 10^10 = 5 * 10^9
+ 0x0000000ba43b7400ULL, // 1/2 * 10^11 = 5 * 10^10
+ 0x000000746a528800ULL, // 1/2 * 10^12 = 5 * 10^11
+ 0x0000048c27395000ULL, // 1/2 * 10^13 = 5 * 10^12
+ 0x00002d79883d2000ULL, // 1/2 * 10^14 = 5 * 10^13
+ 0x0001c6bf52634000ULL, // 1/2 * 10^15 = 5 * 10^14
+ 0x0011c37937e08000ULL, // 1/2 * 10^16 = 5 * 10^15
+ 0x00b1a2bc2ec50000ULL, // 1/2 * 10^17 = 5 * 10^16
+ 0x06f05b59d3b20000ULL, // 1/2 * 10^18 = 5 * 10^17
+ 0x4563918244f40000ULL // 1/2 * 10^19 = 5 * 10^18
+};
+
+// midpoint128[i - 20] = 1/2 * 10^i = 5 * 10^(i-1), 20 <= i <= 38
+UINT128 midpoint128[] = { // the 64-bit word order is L, H
+ {{0xb5e3af16b1880000ULL, 0x0000000000000002ULL}
+ }
+ , // 1/2 * 10^20 = 5 * 10^19
+ {{0x1ae4d6e2ef500000ULL, 0x000000000000001bULL}
+ }
+ , // 1/2 * 10^21 = 5 * 10^20
+ {{0x0cf064dd59200000ULL, 0x000000000000010fULL}
+ }
+ , // 1/2 * 10^22 = 5 * 10^21
+ {{0x8163f0a57b400000ULL, 0x0000000000000a96ULL}
+ }
+ , // 1/2 * 10^23 = 5 * 10^22
+ {{0x0de76676d0800000ULL, 0x00000000000069e1ULL}
+ }
+ , // 1/2 * 10^24 = 5 * 10^23
+ {{0x8b0a00a425000000ULL, 0x00000000000422caULL}
+ }
+ , // 1/2 * 10^25 = 5 * 10^24
+ {{0x6e64066972000000ULL, 0x0000000000295be9ULL}
+ }
+ , // 1/2 * 10^26 = 5 * 10^25
+ {{0x4fe8401e74000000ULL, 0x00000000019d971eULL}
+ }
+ , // 1/2 * 10^27 = 5 * 10^26
+ {{0x1f12813088000000ULL, 0x000000001027e72fULL}
+ }
+ , // 1/2 * 10^28 = 5 * 10^27
+ {{0x36b90be550000000ULL, 0x00000000a18f07d7ULL}
+ }
+ , // 1/2 * 10^29 = 5 * 10^28
+ {{0x233a76f520000000ULL, 0x000000064f964e68ULL}
+ }
+ , // 1/2 * 10^30 = 5 * 10^29
+ {{0x6048a59340000000ULL, 0x0000003f1bdf1011ULL}
+ }
+ , // 1/2 * 10^31 = 5 * 10^30
+ {{0xc2d677c080000000ULL, 0x0000027716b6a0adULL}
+ }
+ , // 1/2 * 10^32 = 5 * 10^31
+ {{0x9c60ad8500000000ULL, 0x000018a6e32246c9ULL}
+ }
+ , // 1/2 * 10^33 = 5 * 10^32
+ {{0x1bc6c73200000000ULL, 0x0000f684df56c3e0ULL}
+ }
+ , // 1/2 * 10^34 = 5 * 10^33
+ {{0x15c3c7f400000000ULL, 0x0009a130b963a6c1ULL}
+ }
+ , // 1/2 * 10^35 = 5 * 10^34
+ {{0xd9a5cf8800000000ULL, 0x00604be73de4838aULL}
+ }
+ , // 1/2 * 10^36 = 5 * 10^35
+ {{0x807a1b5000000000ULL, 0x03c2f7086aed236cULL}
+ }
+ , // 1/2 * 10^37 = 5 * 10^36
+ {{0x04c5112000000000ULL, 0x259da6542d43623dULL}
+ } // 1/2 * 10^38 = 5 * 10^37
+};
+
+// midpoint192[i - 39] = 1/2 * 10^i = 5 * 10^(i-1), 39 <= i <= 58
+UINT192 midpoint192[] = { // the 64-bit word order is L, M, H
+ {{0x2fb2ab4000000000ULL, 0x78287f49c4a1d662ULL, 0x0000000000000001ULL}
+ }
+ ,
+ // 1/2 * 10^39 = 5 * 10^38
+ {{0xdcfab08000000000ULL, 0xb194f8e1ae525fd5ULL, 0x000000000000000eULL}
+ }
+ ,
+ // 1/2 * 10^40 = 5 * 10^39
+ {{0xa1cae50000000000ULL, 0xefd1b8d0cf37be5aULL, 0x0000000000000092ULL}
+ }
+ ,
+ // 1/2 * 10^41 = 5 * 10^40
+ {{0x51ecf20000000000ULL, 0x5e313828182d6f8aULL, 0x00000000000005bdULL}
+ }
+ ,
+ // 1/2 * 10^42 = 5 * 10^41
+ {{0x3341740000000000ULL, 0xadec3190f1c65b67ULL, 0x0000000000003965ULL}
+ }
+ ,
+ // 1/2 * 10^43 = 5 * 10^42
+ {{0x008e880000000000ULL, 0xcb39efa971bf9208ULL, 0x0000000000023df8ULL}
+ }
+ ,
+ // 1/2 * 10^44 = 5 * 10^43
+ {{0x0591500000000000ULL, 0xf0435c9e717bb450ULL, 0x0000000000166bb7ULL}
+ }
+ ,
+ // 1/2 * 10^45 = 5 * 10^44
+ {{0x37ad200000000000ULL, 0x62a19e306ed50b20ULL, 0x0000000000e0352fULL}
+ }
+ ,
+ // 1/2 * 10^46 = 5 * 10^45
+ {{0x2cc3400000000000ULL, 0xda502de454526f42ULL, 0x0000000008c213d9ULL}
+ }
+ ,
+ // 1/2 * 10^47 = 5 * 10^46
+ {{0xbfa0800000000000ULL, 0x8721caeb4b385895ULL, 0x000000005794c682ULL}
+ }
+ ,
+ // 1/2 * 10^48 = 5 * 10^47
+ {{0x7c45000000000000ULL, 0x4751ed30f03375d9ULL, 0x000000036bcfc119ULL}
+ }
+ ,
+ // 1/2 * 10^49 = 5 * 10^48
+ {{0xdab2000000000000ULL, 0xc93343e962029a7eULL, 0x00000022361d8afcULL}
+ }
+ ,
+ // 1/2 * 10^50 = 5 * 10^49
+ {{0x8af4000000000000ULL, 0xdc00a71dd41a08f4ULL, 0x000001561d276ddfULL}
+ }
+ ,
+ // 1/2 * 10^51 = 5 * 10^50
+ {{0x6d88000000000000ULL, 0x9806872a4904598dULL, 0x00000d5d238a4abeULL}
+ }
+ ,
+ // 1/2 * 10^52 = 5 * 10^51
+ {{0x4750000000000000ULL, 0xf04147a6da2b7f86ULL, 0x000085a36366eb71ULL}
+ }
+ ,
+ // 1/2 * 10^53 = 5 * 10^52
+ {{0xc920000000000000ULL, 0x628ccc8485b2fb3eULL, 0x00053861e2053273ULL}
+ }
+ ,
+ // 1/2 * 10^54 = 5 * 10^53
+ {{0xdb40000000000000ULL, 0xd97ffd2d38fdd073ULL, 0x003433d2d433f881ULL}
+ }
+ ,
+ // 1/2 * 10^55 = 5 * 10^54
+ {{0x9080000000000000ULL, 0x7effe3c439ea2486ULL, 0x020a063c4a07b512ULL}
+ }
+ ,
+ // 1/2 * 10^56 = 5 * 10^55
+ {{0xa500000000000000ULL, 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL}
+ }
+ ,
+ // 1/2 * 10^57 = 5 * 10^56
+ {{0x7200000000000000ULL, 0x9bf4f8a69f764490ULL, 0xcbea6f8ceb02bb39ULL}
+ }
+ // 1/2 * 10^58 = 5 * 10^57
+};
+
+// midpoint256[i - 59] = 1/2 * 10^i = 5 * 10^(i-1), 59 <= i <= 68
+UINT256 midpoint256[] = { // the 64-bit word order is LL, LH, HL, HH
+ {{0x7400000000000000ULL, 0x1791b6823a9eada4ULL,
+ 0xf7285b812e1b5040ULL, 0x0000000000000007ULL}
+ }
+ , // 1/2 * 10^59 = 5 * 10^58
+ {{0x8800000000000000ULL, 0xebb121164a32c86cULL,
+ 0xa793930bcd112280ULL, 0x000000000000004fULL}
+ }
+ , // 1/2 * 10^60 = 5 * 10^59
+ {{0x5000000000000000ULL, 0x34eb4adee5fbd43dULL,
+ 0x8bc3be7602ab5909ULL, 0x000000000000031cULL}
+ }
+ , // 1/2 * 10^61 = 5 * 10^60
+ {{0x2000000000000000ULL, 0x1130ecb4fbd64a65ULL,
+ 0x75a5709c1ab17a5cULL, 0x0000000000001f1dULL}
+ }
+ , // 1/2 * 10^62 = 5 * 10^61
+ {{0x4000000000000000ULL, 0xabe93f11d65ee7f3ULL,
+ 0x987666190aeec798ULL, 0x0000000000013726ULL}
+ }
+ , // 1/2 * 10^63 = 5 * 10^62
+ {{0x8000000000000000ULL, 0xb71c76b25fb50f80ULL,
+ 0xf49ffcfa6d53cbf6ULL, 0x00000000000c2781ULL}
+ }
+ , // 1/2 * 10^64 = 5 * 10^63
+ {{0x0000000000000000ULL, 0x271ca2f7bd129b05ULL,
+ 0x8e3fe1c84545f7a3ULL, 0x0000000000798b13ULL}
+ }
+ , // 1/2 * 10^65 = 5 * 10^64
+ {{0x0000000000000000ULL, 0x871e5dad62ba0e32ULL,
+ 0x8e7ed1d2b4bbac5fULL, 0x0000000004bf6ec3ULL}
+ }
+ , // 1/2 * 10^66 = 5 * 10^65
+ {{0x0000000000000000ULL, 0x472fa8c5db448df4ULL,
+ 0x90f4323b0f54bbbbULL, 0x000000002f7a53a3ULL}
+ }
+ , // 1/2 * 10^67 = 5 * 10^66
+ {{0x0000000000000000ULL, 0xc7dc97ba90ad8b88ULL,
+ 0xa989f64e994f5550ULL, 0x00000001dac74463ULL}
+ }
+ , // 1/2 * 10^68 = 5 * 10^67
+ {{0x0000000000000000ULL, 0xce9ded49a6c77350ULL,
+ 0x9f639f11fd195527ULL, 0x000000128bc8abe4ULL}
+ }
+ , // 1/2 * 10^69 = 5 * 10^68
+ {{0x0000000000000000ULL, 0x122b44e083ca8120ULL,
+ 0x39e436b3e2fd538eULL, 0x000000b975d6b6eeULL}
+ }
+ , // 1/2 * 10^70 = 5 * 10^69
+ {{0x0000000000000000ULL, 0xb5b0b0c525e90b40ULL,
+ 0x42ea2306dde5438cULL, 0x0000073e9a63254eULL}
+ }
+ , // 1/2 * 10^71 = 5 * 10^70
+ {{0x0000000000000000ULL, 0x18e6e7b37b1a7080ULL,
+ 0x9d255e44aaf4a37fULL, 0x0000487207df750eULL}
+ }
+ , // 1/2 * 10^72 = 5 * 10^71
+ {{0x0000000000000000ULL, 0xf9050d02cf086500ULL,
+ 0x2375aeaead8e62f6ULL, 0x0002d4744eba9292ULL}
+ }
+ , // 1/2 * 10^73 = 5 * 10^72
+ {{0x0000000000000000ULL, 0xba32821c1653f200ULL,
+ 0x6298d2d2c78fdda5ULL, 0x001c4c8b1349b9b5ULL}
+ }
+ , // 1/2 * 10^74 = 5 * 10^73
+ {{0x0000000000000000ULL, 0x45f91518df477400ULL,
+ 0xd9f83c3bcb9ea879ULL, 0x011afd6ec0e14115ULL}
+ }
+ , // 1/2 * 10^75 = 5 * 10^74
+ {{0x0000000000000000ULL, 0xbbbad2f8b8ca8800ULL,
+ 0x83b25a55f43294bcULL, 0x0b0de65388cc8adaULL}
+ }
+ , // 1/2 * 10^76 = 5 * 10^75
+ {{0x0000000000000000ULL, 0x554c3db737e95000ULL,
+ 0x24f7875b89f9cf5fULL, 0x6e8aff4357fd6c89ULL}
+ } // 1/2 * 10^77 = 5 * 10^76
+};
+
+// ten2k64[i] = 10^i, 0 <= i <= 19
+UINT64 ten2k64[] = {
+ 0x0000000000000001ULL, // 10^0
+ 0x000000000000000aULL, // 10^1
+ 0x0000000000000064ULL, // 10^2
+ 0x00000000000003e8ULL, // 10^3
+ 0x0000000000002710ULL, // 10^4
+ 0x00000000000186a0ULL, // 10^5
+ 0x00000000000f4240ULL, // 10^6
+ 0x0000000000989680ULL, // 10^7
+ 0x0000000005f5e100ULL, // 10^8
+ 0x000000003b9aca00ULL, // 10^9
+ 0x00000002540be400ULL, // 10^10
+ 0x000000174876e800ULL, // 10^11
+ 0x000000e8d4a51000ULL, // 10^12
+ 0x000009184e72a000ULL, // 10^13
+ 0x00005af3107a4000ULL, // 10^14
+ 0x00038d7ea4c68000ULL, // 10^15
+ 0x002386f26fc10000ULL, // 10^16
+ 0x016345785d8a0000ULL, // 10^17
+ 0x0de0b6b3a7640000ULL, // 10^18
+ 0x8ac7230489e80000ULL // 10^19 (20 digits)
+};
+
+
+// ten2k128[i - 20] = 10^i, 20 <= i <= 38
+UINT128 ten2k128[] = { // the 64-bit word order is L, H
+ {{0x6bc75e2d63100000ULL, 0x0000000000000005ULL}
+ }
+ , // 10^20
+ {{0x35c9adc5dea00000ULL, 0x0000000000000036ULL}
+ }
+ , // 10^21
+ {{0x19e0c9bab2400000ULL, 0x000000000000021eULL}
+ }
+ , // 10^22
+ {{0x02c7e14af6800000ULL, 0x000000000000152dULL}
+ }
+ , // 10^23
+ {{0x1bcecceda1000000ULL, 0x000000000000d3c2ULL}
+ }
+ , // 10^24
+ {{0x161401484a000000ULL, 0x0000000000084595ULL}
+ }
+ , // 10^25
+ {{0xdcc80cd2e4000000ULL, 0x000000000052b7d2ULL}
+ }
+ , // 10^26
+ {{0x9fd0803ce8000000ULL, 0x00000000033b2e3cULL}
+ }
+ , // 10^27
+ {{0x3e25026110000000ULL, 0x00000000204fce5eULL}
+ }
+ , // 10^28
+ {{0x6d7217caa0000000ULL, 0x00000001431e0faeULL}
+ }
+ , // 10^29
+ {{0x4674edea40000000ULL, 0x0000000c9f2c9cd0ULL}
+ }
+ , // 10^30
+ {{0xc0914b2680000000ULL, 0x0000007e37be2022ULL}
+ }
+ , // 10^31
+ {{0x85acef8100000000ULL, 0x000004ee2d6d415bULL}
+ }
+ , // 10^32
+ {{0x38c15b0a00000000ULL, 0x0000314dc6448d93ULL}
+ }
+ , // 10^33
+ {{0x378d8e6400000000ULL, 0x0001ed09bead87c0ULL}
+ }
+ , // 10^34
+ {{0x2b878fe800000000ULL, 0x0013426172c74d82ULL}
+ }
+ , // 10^35
+ {{0xb34b9f1000000000ULL, 0x00c097ce7bc90715ULL}
+ }
+ , // 10^36
+ {{0x00f436a000000000ULL, 0x0785ee10d5da46d9ULL}
+ }
+ , // 10^37
+ {{0x098a224000000000ULL, 0x4b3b4ca85a86c47aULL}
+ } // 10^38 (39 digits)
+};
+
+// might split into ten2k192[] and ten2k256[]
+
+// ten2k256[i - 39] = 10^i, 39 <= i <= 68
+UINT256 ten2k256[] = { // the 64-bit word order is LL, LH, HL, HH
+ {{0x5f65568000000000ULL, 0xf050fe938943acc4ULL,
+ 0x0000000000000002ULL, 0x0000000000000000ULL}
+ }
+ , // 10^39
+ {{0xb9f5610000000000ULL, 0x6329f1c35ca4bfabULL,
+ 0x000000000000001dULL, 0x0000000000000000ULL}
+ }
+ , // 10^40
+ {{0x4395ca0000000000ULL, 0xdfa371a19e6f7cb5ULL,
+ 0x0000000000000125ULL, 0x0000000000000000ULL}
+ }
+ , // 10^41
+ {{0xa3d9e40000000000ULL, 0xbc627050305adf14ULL,
+ 0x0000000000000b7aULL, 0x0000000000000000ULL}
+ }
+ , // 10^42
+ {{0x6682e80000000000ULL, 0x5bd86321e38cb6ceULL,
+ 0x00000000000072cbULL, 0x0000000000000000ULL}
+ }
+ , // 10^43
+ {{0x011d100000000000ULL, 0x9673df52e37f2410ULL,
+ 0x0000000000047bf1ULL, 0x0000000000000000ULL}
+ }
+ , // 10^44
+ {{0x0b22a00000000000ULL, 0xe086b93ce2f768a0ULL,
+ 0x00000000002cd76fULL, 0x0000000000000000ULL}
+ }
+ , // 10^45
+ {{0x6f5a400000000000ULL, 0xc5433c60ddaa1640ULL,
+ 0x0000000001c06a5eULL, 0x0000000000000000ULL}
+ }
+ , // 10^46
+ {{0x5986800000000000ULL, 0xb4a05bc8a8a4de84ULL,
+ 0x00000000118427b3ULL, 0x0000000000000000ULL}
+ }
+ , // 10^47
+ {{0x7f41000000000000ULL, 0x0e4395d69670b12bULL,
+ 0x00000000af298d05ULL, 0x0000000000000000ULL}
+ }
+ , // 10^48
+ {{0xf88a000000000000ULL, 0x8ea3da61e066ebb2ULL,
+ 0x00000006d79f8232ULL, 0x0000000000000000ULL}
+ }
+ , // 10^49
+ {{0xb564000000000000ULL, 0x926687d2c40534fdULL,
+ 0x000000446c3b15f9ULL, 0x0000000000000000ULL}
+ }
+ , // 10^50
+ {{0x15e8000000000000ULL, 0xb8014e3ba83411e9ULL,
+ 0x000002ac3a4edbbfULL, 0x0000000000000000ULL}
+ }
+ , // 10^51
+ {{0xdb10000000000000ULL, 0x300d0e549208b31aULL,
+ 0x00001aba4714957dULL, 0x0000000000000000ULL}
+ }
+ , // 10^52
+ {{0x8ea0000000000000ULL, 0xe0828f4db456ff0cULL,
+ 0x00010b46c6cdd6e3ULL, 0x0000000000000000ULL}
+ }
+ , // 10^53
+ {{0x9240000000000000ULL, 0xc51999090b65f67dULL,
+ 0x000a70c3c40a64e6ULL, 0x0000000000000000ULL}
+ }
+ , // 10^54
+ {{0xb680000000000000ULL, 0xb2fffa5a71fba0e7ULL,
+ 0x006867a5a867f103ULL, 0x0000000000000000ULL}
+ }
+ , // 10^55
+ {{0x2100000000000000ULL, 0xfdffc78873d4490dULL,
+ 0x04140c78940f6a24ULL, 0x0000000000000000ULL}
+ }
+ , // 10^56
+ {{0x4a00000000000000ULL, 0xebfdcb54864ada83ULL,
+ 0x28c87cb5c89a2571ULL, 0x0000000000000000ULL}
+ }
+ , // 10^57 (58 digits)
+ {{0xe400000000000000ULL, 0x37e9f14d3eec8920ULL,
+ 0x97d4df19d6057673ULL, 0x0000000000000001ULL}
+ }
+ , // 10^58
+ {{0xe800000000000000ULL, 0x2f236d04753d5b48ULL,
+ 0xee50b7025c36a080ULL, 0x000000000000000fULL}
+ }
+ , // 10^59
+ {{0x1000000000000000ULL, 0xd762422c946590d9ULL,
+ 0x4f2726179a224501ULL, 0x000000000000009fULL}
+ }
+ , // 10^60
+ {{0xa000000000000000ULL, 0x69d695bdcbf7a87aULL,
+ 0x17877cec0556b212ULL, 0x0000000000000639ULL}
+ }
+ , // 10^61
+ {{0x4000000000000000ULL, 0x2261d969f7ac94caULL,
+ 0xeb4ae1383562f4b8ULL, 0x0000000000003e3aULL}
+ }
+ , // 10^62
+ {{0x8000000000000000ULL, 0x57d27e23acbdcfe6ULL,
+ 0x30eccc3215dd8f31ULL, 0x0000000000026e4dULL}
+ }
+ , // 10^63
+ {{0x0000000000000000ULL, 0x6e38ed64bf6a1f01ULL,
+ 0xe93ff9f4daa797edULL, 0x0000000000184f03ULL}
+ }
+ , // 10^64
+ {{0x0000000000000000ULL, 0x4e3945ef7a25360aULL,
+ 0x1c7fc3908a8bef46ULL, 0x0000000000f31627ULL}
+ }
+ , // 10^65
+ {{0x0000000000000000ULL, 0x0e3cbb5ac5741c64ULL,
+ 0x1cfda3a5697758bfULL, 0x00000000097edd87ULL}
+ }
+ , // 10^66
+ {{0x0000000000000000ULL, 0x8e5f518bb6891be8ULL,
+ 0x21e864761ea97776ULL, 0x000000005ef4a747ULL}
+ }
+ , // 10^67
+ {{0x0000000000000000ULL, 0x8fb92f75215b1710ULL,
+ 0x5313ec9d329eaaa1ULL, 0x00000003b58e88c7ULL}
+ }
+ , // 10^68
+ {{0x0000000000000000ULL, 0x9d3bda934d8ee6a0ULL,
+ 0x3ec73e23fa32aa4fULL, 0x00000025179157c9ULL}
+ }
+ , // 10^69
+ {{0x0000000000000000ULL, 0x245689c107950240ULL,
+ 0x73c86d67c5faa71cULL, 0x00000172ebad6ddcULL}
+ }
+ , // 10^70
+ {{0x0000000000000000ULL, 0x6b61618a4bd21680ULL,
+ 0x85d4460dbbca8719ULL, 0x00000e7d34c64a9cULL}
+ }
+ , // 10^71
+ {{0x0000000000000000ULL, 0x31cdcf66f634e100ULL,
+ 0x3a4abc8955e946feULL, 0x000090e40fbeea1dULL}
+ }
+ , // 10^72
+ {{0x0000000000000000ULL, 0xf20a1a059e10ca00ULL,
+ 0x46eb5d5d5b1cc5edULL, 0x0005a8e89d752524ULL}
+ }
+ , // 10^73
+ {{0x0000000000000000ULL, 0x746504382ca7e400ULL,
+ 0xc531a5a58f1fbb4bULL, 0x003899162693736aULL}
+ }
+ , // 10^74
+ {{0x0000000000000000ULL, 0x8bf22a31be8ee800ULL,
+ 0xb3f07877973d50f2ULL, 0x0235fadd81c2822bULL}
+ }
+ , // 10^75
+ {{0x0000000000000000ULL, 0x7775a5f171951000ULL,
+ 0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL}
+ }
+ , // 10^76
+ {{0x0000000000000000ULL, 0xaa987b6e6fd2a000ULL,
+ 0x49ef0eb713f39ebeULL, 0xdd15fe86affad912ULL}
+ } // 10^77
+};
+
+// ten2mk128[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 34 and
+// exp (k) = shiftright128[k - 1] + 128
+UINT128 ten2mk128[] = {
+ {{0x999999999999999aULL, 0x1999999999999999ULL}
+ }
+ , // 10^(-1) * 2^128
+ {{0x28f5c28f5c28f5c3ULL, 0x028f5c28f5c28f5cULL}
+ }
+ , // 10^(-2) * 2^128
+ {{0x9db22d0e56041894ULL, 0x004189374bc6a7efULL}
+ }
+ , // 10^(-3) * 2^128
+ {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL}
+ }
+ , // 10^(-4) * 2^131
+ {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL}
+ }
+ , // 10^(-5) * 2^134
+ {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL}
+ }
+ , // 10^(-6) * 2^137
+ {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL}
+ }
+ , // 10^(-7) * 2^141
+ {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL}
+ }
+ , // 10^(-8) * 2^144
+ {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL}
+ }
+ , // 10^(-9) * 2^147
+ {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL}
+ }
+ , // 10^(-10) * 2^151
+ {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL}
+ }
+ , // 10^(-11) * 2^154
+ {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL}
+ }
+ , // 10^(-12) * 2^157
+ {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL}
+ }
+ , // 10^(-13) * 2^161
+ {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL}
+ }
+ , // 10^(-14) * 2^164
+ {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL}
+ }
+ , // 10^(-15) * 2^167
+ {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL}
+ }
+ , // 10^(-16) * 2^171
+ {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL}
+ }
+ , // 10^(-17) * 2^174
+ {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL}
+ }
+ , // 10^(-18) * 2^177
+ {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL}
+ }
+ , // 10^(-19) * 2^181
+ {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL}
+ }
+ , // 10^(-20) * 2^184
+ {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL}
+ }
+ , // 10^(-21) * 2^187
+ {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL}
+ }
+ , // 10^(-22) * 2^191
+ {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL}
+ }
+ , // 10^(-23) * 2^194
+ {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL}
+ }
+ , // 10^(-24) * 2^197
+ {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL}
+ }
+ , // 10^(-25) * 2^201
+ {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL}
+ }
+ , // 10^(-26) * 2^204
+ {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL}
+ }
+ , // 10^(-27) * 2^207
+ {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL}
+ }
+ , // 10^(-28) * 2^211
+ {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL}
+ }
+ , // 10^(-29) * 2^214
+ {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL}
+ }
+ , // 10^(-30) * 2^217
+ {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL}
+ }
+ , // 10^(-31) * 2^220
+ {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL}
+ }
+ , // 10^(-32) * 2^224
+ {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL}
+ }
+ , // 10^(-33) * 2^227
+ {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL}
+ }
+ , // 10^(-34) * 2^230
+};
+
+
+// shiftright128[] contains the right shift count to obtain C2* from the top
+// 128 bits of the 128x128-bit product C2 * Kx
+int shiftright128[] = {
+ 0, // 128 - 128
+ 0, // 128 - 128
+ 0, // 128 - 128
+
+ 3, // 131 - 128
+ 6, // 134 - 128
+ 9, // 137 - 128
+ 13, // 141 - 128
+ 16, // 144 - 128
+ 19, // 147 - 128
+ 23, // 151 - 128
+ 26, // 154 - 128
+ 29, // 157 - 128
+ 33, // 161 - 128
+ 36, // 164 - 128
+ 39, // 167 - 128
+ 43, // 171 - 128
+ 46, // 174 - 128
+ 49, // 177 - 128
+ 53, // 181 - 128
+ 56, // 184 - 128
+ 59, // 187 - 128
+ 63, // 191 - 128
+
+ 66, // 194 - 128
+ 69, // 197 - 128
+ 73, // 201 - 128
+ 76, // 204 - 128
+ 79, // 207 - 128
+ 83, // 211 - 128
+ 86, // 214 - 128
+ 89, // 217 - 128
+ 92, // 220 - 128
+ 96, // 224 - 128
+ 99, // 227 - 128
+ 102 // 230 - 128
+};
+
+
+// maskhigh128[] contains the mask to apply to the top 128 bits of the
+// 128x128-bit product in order to obtain the high bits of f2*
+// the 64-bit word order is L, H
+UINT64 maskhigh128[] = {
+ 0x0000000000000000ULL, // 0 = 128 - 128 bits
+ 0x0000000000000000ULL, // 0 = 128 - 128 bits
+ 0x0000000000000000ULL, // 0 = 128 - 128 bits
+ 0x0000000000000007ULL, // 3 = 131 - 128 bits
+ 0x000000000000003fULL, // 6 = 134 - 128 bits
+ 0x00000000000001ffULL, // 9 = 137 - 128 bits
+ 0x0000000000001fffULL, // 13 = 141 - 128 bits
+ 0x000000000000ffffULL, // 16 = 144 - 128 bits
+ 0x000000000007ffffULL, // 19 = 147 - 128 bits
+ 0x00000000007fffffULL, // 23 = 151 - 128 bits
+ 0x0000000003ffffffULL, // 26 = 154 - 128 bits
+ 0x000000001fffffffULL, // 29 = 157 - 128 bits
+ 0x00000001ffffffffULL, // 33 = 161 - 128 bits
+ 0x0000000fffffffffULL, // 36 = 164 - 128 bits
+ 0x0000007fffffffffULL, // 39 = 167 - 128 bits
+ 0x000007ffffffffffULL, // 43 = 171 - 128 bits
+ 0x00003fffffffffffULL, // 46 = 174 - 128 bits
+ 0x0001ffffffffffffULL, // 49 = 177 - 128 bits
+ 0x001fffffffffffffULL, // 53 = 181 - 128 bits
+ 0x00ffffffffffffffULL, // 56 = 184 - 128 bits
+ 0x07ffffffffffffffULL, // 59 = 187 - 128 bits
+ 0x7fffffffffffffffULL, // 63 = 191 - 128 bits
+ 0x0000000000000003ULL, // 2 = 194 - 192 bits
+ 0x000000000000001fULL, // 5 = 197 - 192 bits
+ 0x00000000000001ffULL, // 9 = 201 - 192 bits
+ 0x0000000000000fffULL, // 12 = 204 - 192 bits
+ 0x0000000000007fffULL, // 15 = 207 - 192 bits
+ 0x000000000007ffffULL, // 21 = 211 - 192 bits
+ 0x00000000003fffffULL, // 22 = 214 - 192 bits
+ 0x0000000001ffffffULL, // 25 = 217 - 192 bits
+ 0x000000000fffffffULL, // 28 = 220 - 192 bits
+ 0x00000000ffffffffULL, // 32 = 224 - 192 bits
+ 0x00000007ffffffffULL, // 35 = 227 - 192 bits
+ 0x0000003fffffffffULL // 38 = 230 - 192 bits
+};
+
+
+// onehalf128[] contains the high bits of 1/2 positioned correctly for
+// comparison with the high bits of f2*
+// the 64-bit word order is L, H
+UINT64 onehalf128[] = {
+ 0x0000000000000000ULL, // 0 bits
+ 0x0000000000000000ULL, // 0 bits
+ 0x0000000000000000ULL, // 0 bits
+ 0x0000000000000004ULL, // 3 bits
+ 0x0000000000000020ULL, // 6 bits
+ 0x0000000000000100ULL, // 9 bits
+ 0x0000000000001000ULL, // 13 bits
+ 0x0000000000008000ULL, // 16 bits
+ 0x0000000000040000ULL, // 19 bits
+ 0x0000000000400000ULL, // 23 bits
+ 0x0000000002000000ULL, // 26 bits
+ 0x0000000010000000ULL, // 29 bits
+ 0x0000000100000000ULL, // 33 bits
+ 0x0000000800000000ULL, // 36 bits
+ 0x0000004000000000ULL, // 39 bits
+ 0x0000040000000000ULL, // 43 bits
+ 0x0000200000000000ULL, // 46 bits
+ 0x0001000000000000ULL, // 49 bits
+ 0x0010000000000000ULL, // 53 bits
+ 0x0080000000000000ULL, // 56 bits
+ 0x0400000000000000ULL, // 59 bits
+ 0x4000000000000000ULL, // 63 bits
+ 0x0000000000000002ULL, // 66 bits
+ 0x0000000000000010ULL, // 69 bits
+ 0x0000000000000100ULL, // 73 bits
+ 0x0000000000000800ULL, // 76 bits
+ 0x0000000000004000ULL, // 79 bits
+ 0x0000000000040000ULL, // 83 bits
+ 0x0000000000200000ULL, // 86 bits
+ 0x0000000001000000ULL, // 89 bits
+ 0x0000000008000000ULL, // 92 bits
+ 0x0000000080000000ULL, // 96 bits
+ 0x0000000400000000ULL, // 99 bits
+ 0x0000002000000000ULL // 102 bits
+};
+
+UINT64 ten2mk64[] = {
+ 0x199999999999999aULL, // 10^(-1) * 2^ 64
+ 0x028f5c28f5c28f5dULL, // 10^(-2) * 2^ 64
+ 0x004189374bc6a7f0ULL, // 10^(-3) * 2^ 64
+ 0x00346dc5d638865aULL, // 10^(-4) * 2^ 67
+ 0x0029f16b11c6d1e2ULL, // 10^(-5) * 2^ 70
+ 0x00218def416bdb1bULL, // 10^(-6) * 2^ 73
+ 0x0035afe535795e91ULL, // 10^(-7) * 2^ 77
+ 0x002af31dc4611874ULL, // 10^(-8) * 2^ 80
+ 0x00225c17d04dad2aULL, // 10^(-9) * 2^ 83
+ 0x0036f9bfb3af7b76ULL, // 10^(-10) * 2^ 87
+ 0x002bfaffc2f2c92bULL, // 10^(-11) * 2^ 90
+ 0x00232f33025bd423ULL, // 10^(-12) * 2^ 93
+ 0x00384b84d092ed04ULL, // 10^(-13) * 2^ 97
+ 0x002d09370d425737ULL, // 10^(-14) * 2^100
+ 0x0024075f3dceac2cULL, // 10^(-15) * 2^103
+ 0x0039a5652fb11379ULL, // 10^(-16) * 2^107
+};
+
+// ten2mk128trunc[] contains T*, the top Ex >= 128 bits of 10^(-k),
+// for 1 <= k <= 34
+// the 64-bit word order is L, H
+UINT128 ten2mk128trunc[] = {
+ {{0x9999999999999999ULL, 0x1999999999999999ULL}}, // 10^(-1) * 2^128
+ {{0x28f5c28f5c28f5c2ULL, 0x028f5c28f5c28f5cULL}}, // 10^(-2) * 2^128
+ {{0x9db22d0e56041893ULL, 0x004189374bc6a7efULL}}, // 10^(-3) * 2^128
+ {{0x4af4f0d844d013a9ULL, 0x00346dc5d6388659ULL}}, // 10^(-4) * 2^131
+ {{0x08c3f3e0370cdc87ULL, 0x0029f16b11c6d1e1ULL}}, // 10^(-5) * 2^134
+ {{0x6d698fe69270b06cULL, 0x00218def416bdb1aULL}}, // 10^(-6) * 2^137
+ {{0xaf0f4ca41d811a46ULL, 0x0035afe535795e90ULL}}, // 10^(-7) * 2^141
+ {{0xbf3f70834acdae9fULL, 0x002af31dc4611873ULL}}, // 10^(-8) * 2^144
+ {{0x65cc5a02a23e254cULL, 0x00225c17d04dad29ULL}}, // 10^(-9) * 2^147
+ {{0x6fad5cd10396a213ULL, 0x0036f9bfb3af7b75ULL}}, // 10^(-10) * 2^151
+ {{0xbfbde3da69454e75ULL, 0x002bfaffc2f2c92aULL}}, // 10^(-11) * 2^154
+ {{0x32fe4fe1edd10b91ULL, 0x00232f33025bd422ULL}}, // 10^(-12) * 2^157
+ {{0x84ca19697c81ac1bULL, 0x00384b84d092ed03ULL}}, // 10^(-13) * 2^161
+ {{0x03d4e1213067bce3ULL, 0x002d09370d425736ULL}}, // 10^(-14) * 2^164
+ {{0x3643e74dc052fd82ULL, 0x0024075f3dceac2bULL}}, // 10^(-15) * 2^167
+ {{0x56d30baf9a1e626aULL, 0x0039a5652fb11378ULL}}, // 10^(-16) * 2^171
+ {{0x12426fbfae7eb521ULL, 0x002e1dea8c8da92dULL}}, // 10^(-17) * 2^174
+ {{0x41cebfcc8b9890e7ULL, 0x0024e4bba3a48757ULL}}, // 10^(-18) * 2^177
+ {{0x694acc7a78f41b0cULL, 0x003b07929f6da558ULL}}, // 10^(-19) * 2^181
+ {{0xbaa23d2ec729af3dULL, 0x002f394219248446ULL}}, // 10^(-20) * 2^184
+ {{0xfbb4fdbf05baf297ULL, 0x0025c768141d369eULL}}, // 10^(-21) * 2^187
+ {{0x2c54c931a2c4b758ULL, 0x003c7240202ebdcbULL}}, // 10^(-22) * 2^191
+ {{0x89dd6dc14f03c5e0ULL, 0x00305b66802564a2ULL}}, // 10^(-23) * 2^194
+ {{0xd4b1249aa59c9e4dULL, 0x0026af8533511d4eULL}}, // 10^(-24) * 2^197
+ {{0x544ea0f76f60fd48ULL, 0x003de5a1ebb4fbb1ULL}}, // 10^(-25) * 2^201
+ {{0x76a54d92bf80caa0ULL, 0x00318481895d9627ULL}}, // 10^(-26) * 2^204
+ {{0x921dd7a89933d54dULL, 0x00279d346de4781fULL}}, // 10^(-27) * 2^207
+ {{0x8362f2a75b862214ULL, 0x003f61ed7ca0c032ULL}}, // 10^(-28) * 2^211
+ {{0xcf825bb91604e810ULL, 0x0032b4bdfd4d668eULL}}, // 10^(-29) * 2^214
+ {{0x0c684960de6a5340ULL, 0x00289097fdd7853fULL}}, // 10^(-30) * 2^217
+ {{0x3d203ab3e521dc33ULL, 0x002073accb12d0ffULL}}, // 10^(-31) * 2^220
+ {{0x2e99f7863b696052ULL, 0x0033ec47ab514e65ULL}}, // 10^(-32) * 2^224
+ {{0x587b2c6b62bab375ULL, 0x002989d2ef743eb7ULL}}, // 10^(-33) * 2^227
+ {{0xad2f56bc4efbc2c4ULL, 0x00213b0f25f69892ULL}}, // 10^(-34) * 2^230
+};
+
+// ten2mk128M[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 4 and
+// exp (k) = shiftright128[k - 1] + 128
+// the 64-bit word order is L, H
+UINT128 ten2mk128M[] = {
+ {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}}, // 10^(-1) * 2^131
+ {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}}, // 10^(-2) * 2^134
+ {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}}, // 10^(-3) * 2^137
+ {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}} // 10^(-4) * 2^141
+};
+
+// ten2mk128truncM[] contains T*, the top Ex >= 128 bits of 10^(-k),
+// for 1 <= k <= 4; the top bits which are 0 are not represented
+// the 64-bit word order is L, H
+UINT128 ten2mk128truncM[] = {
+ {{0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // 10^(-1) * 2^131
+ {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // 10^(-2) * 2^134
+ {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // 10^(-3) * 2^137
+ {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}} // 10^(-4) * 2^141
+};
+
+// shiftright128M[] contains the right shift count to obtain C2* from the top
+// 128 bits of the 128x128-bit product C2 * Kx
+int shiftright128M[] = {
+ 3, // 131 - 128
+ 6, // 134 - 128
+ 9, // 137 - 128
+ 13 // 141 - 128
+};
+
+// maskhigh128M[] contains the mask to apply to the top 128 bits of the
+// 128x128-bit product in order to obtain the high bits of f*
+// the high 64 bits of the mask are 0, so only the low 64 bits are represented
+UINT64 maskhigh128M[] = {
+ 0x0000000000000007ULL, // 3 = 131 - 128 bits
+ 0x000000000000003fULL, // 6 = 134 - 128 bits
+ 0x00000000000001ffULL, // 9 = 137 - 128 bits
+ 0x0000000000001fffULL // 13 = 141 - 128 bits
+};
+
+// onehalf128M[] contains 1/2 positioned correctly for
+// comparison with the high bits of f*
+// the high 64 bits are 0, so only the low 64 bits are represented
+UINT64 onehalf128M[] = {
+ 0x0000000000000004ULL, // 3 bits
+ 0x0000000000000020ULL, // 6 bits
+ 0x0000000000000100ULL, // 9 bits
+ 0x0000000000001000ULL // 13 bits
+};
+
+// ten2mk192M[k - 1] = 10^(-k-4) * 2^exp (k), where 1 <= k <= 19 and
+// exp (k) = shiftright128[k - 1] + 128
+// the 64-bit word order is L, M, H
+UINT192 ten2mk192M[] = {
+ {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
+ 0xa7c5ac471b478423ULL}},
+ // 10^(-5) * 2^208
+ {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
+ 0x8637bd05af6c69b5ULL}},
+ // 10^(-6) * 2^211
+ {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
+ 0xd6bf94d5e57a42bcULL}},
+ // 10^(-7) * 2^215
+ {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
+ 0xabcc77118461cefcULL}},
+ // 10^(-8) * 2^218
+ {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
+ 0x89705f4136b4a597ULL}},
+ // 10^(-9) * 2^221
+ {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
+ 0xdbe6fecebdedd5beULL}},
+ // 10^(-10) * 2^225
+ {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
+ 0xafebff0bcb24aafeULL}},
+ // 10^(-11) * 2^228
+ {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
+ 0x8cbccc096f5088cbULL}},
+ // 10^(-12) * 2^231
+ {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
+ 0xe12e13424bb40e13ULL}},
+ // 10^(-13) * 2^235
+ {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
+ 0xb424dc35095cd80fULL}},
+ // 10^(-14) * 2^238
+ {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
+ 0x901d7cf73ab0acd9ULL}},
+ // 10^(-15) * 2^241
+ {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
+ 0xe69594bec44de15bULL}},
+ // 10^(-16) * 2^245
+ {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
+ 0xb877aa3236a4b449ULL}},
+ // 10^(-17) * 2^248
+ {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
+ 0x9392ee8e921d5d07ULL}},
+ // 10^(-18) * 2^251
+ {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
+ 0xec1e4a7db69561a5ULL}},
+ // 10^(-19) * 2^255
+ {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
+ 0xbce5086492111aeaULL}},
+ // 10^(-20) * 2^258
+ {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
+ 0x971da05074da7beeULL}},
+ // 10^(-21) * 2^261
+ {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
+ 0xf1c90080baf72cb1ULL}},
+ // 10^(-22) * 2^265
+ {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
+ // 10^(-23) * 2^268
+};
+
+// ten2mk192truncM[] contains T*, the top Ex >= 192 bits of 10^(-k),
+// for 5 <= k <= 23; the top bits which are 0 are not represented
+// the 64-bit word order is L, M, H
+UINT192 ten2mk192truncM[] = {
+ {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
+ 0xa7c5ac471b478423ULL}},
+ // 10^(-5) * 2^208
+ {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
+ 0x8637bd05af6c69b5ULL}},
+ // 10^(-6) * 2^211
+ {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
+ 0xd6bf94d5e57a42bcULL}},
+ // 10^(-7) * 2^215
+ {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
+ 0xabcc77118461cefcULL}},
+ // 10^(-8) * 2^218
+ {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
+ 0x89705f4136b4a597ULL}},
+ // 10^(-9) * 2^221
+ {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
+ 0xdbe6fecebdedd5beULL}},
+ // 10^(-10) * 2^225
+ {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
+ 0xafebff0bcb24aafeULL}},
+ // 10^(-11) * 2^228
+ {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
+ 0x8cbccc096f5088cbULL}},
+ // 10^(-12) * 2^231
+ {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
+ 0xe12e13424bb40e13ULL}},
+ // 10^(-13) * 2^235
+ {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
+ 0xb424dc35095cd80fULL}},
+ // 10^(-14) * 2^238
+ {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
+ 0x901d7cf73ab0acd9ULL}},
+ // 10^(-15) * 2^241
+ {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
+ 0xe69594bec44de15bULL}},
+ // 10^(-16) * 2^245
+ {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
+ 0xb877aa3236a4b449ULL}},
+ // 10^(-17) * 2^248
+ {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
+ 0x9392ee8e921d5d07ULL}},
+ // 10^(-18) * 2^251
+ {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
+ 0xec1e4a7db69561a5ULL}},
+ // 10^(-19) * 2^255
+ {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
+ 0xbce5086492111aeaULL}},
+ // 10^(-20) * 2^258
+ {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
+ 0x971da05074da7beeULL}},
+ // 10^(-21) * 2^261
+ {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
+ 0xf1c90080baf72cb1ULL}},
+ // 10^(-22) * 2^265
+ {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
+ // 10^(-23) * 2^268
+};
+
+// shiftright192M[] contains the right shift count to obtain C2* from the top
+// 192 bits of the 192x192-bit product C2 * Kx if 0 <= ind <= 14 where ind is
+// the index in the table, or from the top 128 bits if 15 <= ind <= 18
+int shiftright192M[] = {
+ 16, // 208 - 192
+ 19, // 211 - 192
+ 23, // 215 - 192
+ 26, // 218 - 192
+ 29, // 221 - 192
+ 33, // 225 - 192
+ 36, // 228 - 192
+ 39, // 231 - 192
+ 43, // 235 - 192
+ 46, // 238 - 192
+ 49, // 241 - 192
+ 53, // 245 - 192
+ 56, // 248 - 192
+ 59, // 251 - 192
+ 63, // 255 - 192
+ 2, // 258 - 256
+ 5, // 261 - 256
+ 9, // 265 - 256
+ 12 // 268 - 256
+};
+
+// maskhigh192M[] contains the mask to apply to the top 192 bits of the
+// 192x192-bit product in order to obtain the high bits of f*
+// if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits
+// of the 384-bit mask are 0; if 15 <= ind <= 18 then the high 64 bits are 0
+UINT64 maskhigh192M[] = {
+ 0x000000000000ffffULL, // 16 = 208 - 192 bits
+ 0x000000000007ffffULL, // 19 = 211 - 192 bits
+ 0x00000000007fffffULL, // 23 = 215 - 192 bits
+ 0x0000000003ffffffULL, // 26 = 218 - 192 bits
+ 0x000000001fffffffULL, // 29 = 221 - 192 bits
+ 0x00000001ffffffffULL, // 33 = 225 - 192 bits
+ 0x0000000fffffffffULL, // 36 = 228 - 192 bits
+ 0x0000007fffffffffULL, // 39 = 231 - 192 bits
+ 0x000007ffffffffffULL, // 43 = 235 - 192 bits
+ 0x00003fffffffffffULL, // 46 = 238 - 192 bits
+ 0x0001ffffffffffffULL, // 49 = 241 - 192 bits
+ 0x001fffffffffffffULL, // 53 = 245 - 192 bits
+ 0x00ffffffffffffffULL, // 56 = 248 - 192 bits
+ 0x07ffffffffffffffULL, // 59 = 251 - 192 bits
+ 0x7fffffffffffffffULL, // 63 = 255 - 192 bits
+ 0x0000000000000003ULL, // 2 = 258 - 256 bits
+ 0x000000000000001fULL, // 5 = 261 - 256 bits
+ 0x00000000000001ffULL, // 9 = 265 - 256 bits
+ 0x0000000000000fffULL // 12 = 268 - 256 bits
+};
+
+// onehalf192M[] contains 1/2 positioned correctly for
+// comparison with the high bits of f*
+// if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits
+// of the 384-bit mask are 0; if 15 <= ind <= 18 then the high 648 bits are 0
+UINT64 onehalf192M[] = {
+ 0x0000000000008000ULL, // 16 = 208 - 192 bits
+ 0x0000000000040000ULL, // 19 = 211 - 192 bits
+ 0x0000000000400000ULL, // 23 = 215 - 192 bits
+ 0x0000000002000000ULL, // 26 = 218 - 192 bits
+ 0x0000000010000000ULL, // 29 = 221 - 192 bits
+ 0x0000000100000000ULL, // 33 = 225 - 192 bits
+ 0x0000000800000000ULL, // 36 = 228 - 192 bits
+ 0x0000004000000000ULL, // 39 = 231 - 192 bits
+ 0x0000040000000000ULL, // 43 = 235 - 192 bits
+ 0x0000200000000000ULL, // 46 = 238 - 192 bits
+ 0x0001000000000000ULL, // 49 = 241 - 192 bits
+ 0x0010000000000000ULL, // 53 = 245 - 192 bits
+ 0x0080000000000000ULL, // 56 = 248 - 192 bits
+ 0x0400000000000000ULL, // 59 = 251 - 192 bits
+ 0x4000000000000000ULL, // 63 = 255 - 192 bits
+ 0x0000000000000002ULL, // 2 = 258 - 256 bits
+ 0x0000000000000010ULL, // 5 = 261 - 256 bits
+ 0x0000000000000100ULL, // 9 = 265 - 256 bits
+ 0x0000000000000800ULL // 12 = 268 - 256 bits
+};
+
+// ten2mk256M[k - 1] = 10^(-k-23) * 2^exp (k), where 1 <= k <= 11 and
+// exp (k) = shiftright128[k - 1] + 128
+UINT256 ten2mk256M[] = { // the 64-bit word order is LL, LH, HL, HH
+ {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
+ 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^(-24) * 2^335
+ {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
+ 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^(-25) * 2^339
+ {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
+ 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^(-26) * 2^342
+ {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
+ 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // 10^(-27) * 2^345
+ {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
+ 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^(-28) * 2^349
+ {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
+ 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^(-29) * 2^352
+ {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
+ 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^(-30) * 2^355
+ {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
+ 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^(-31) * 2^358
+ {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
+ 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^(-32) * 2^362
+ {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
+ 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^(-33) * 2^365
+ {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
+ 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}} // 10^(-34) * 2^368
+};
+
+// ten2mk256truncM[] contains T*, the top Ex >= 256 bits of 10^(-k),
+// for 24 <= k <= 34; the top bits which are 0 are not represented
+UINT256 ten2mk256truncM[] = { // the 64-bit word order is LL, LH, HL, HH
+ {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
+ 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^(-24) * 2^335
+ {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
+ 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^(-25) * 2^339
+ {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
+ 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^(-26) * 2^342
+ {{0x775ea264cf55347cULL, 0x9ff42b5717739986ULL,
+ 0xca49f1c05120c9c7ULL, 0x9e74d1b791e07e48ULL}}, // 10^(-27) * 2^345
+ {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
+ 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^(-28) * 2^349
+ {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
+ 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^(-29) * 2^352
+ {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
+ 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^(-30) * 2^355
+ {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
+ 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^(-31) * 2^358
+ {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
+ 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^(-32) * 2^362
+ {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
+ 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^(-33) * 2^365
+ {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
+ 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}} // 10^(-34) * 2^368
+};
+
+// shiftright256M[] contains the right shift count to obtain C2* from the top
+// 192 bits of the 256x256-bit product C2 * Kx
+int shiftright256M[] = {
+ 15, // 335 - 320
+ 19, // 339 - 320
+ 22, // 342 - 320
+ 25, // 345 - 320
+ 29, // 349 - 320
+ 32, // 352 - 320 // careful of 32-bit machines!
+ 35, // 355 - 320
+ 38, // 358 - 320
+ 42, // 362 - 320
+ 45, // 365 - 320
+ 48 // 368 - 320
+};
+
+// maskhigh256M[] contains the mask to apply to the top 192 bits of the
+// 256x256-bit product in order to obtain the high bits of f*
+UINT64 maskhigh256M[] = {
+ 0x0000000000007fffULL, // 15 = 335 - 320 bits
+ 0x000000000007ffffULL, // 19 = 339 - 320 bits
+ 0x00000000003fffffULL, // 22 = 342 - 320 bits
+ 0x0000000001ffffffULL, // 25 = 345 - 320 bits
+ 0x000000001fffffffULL, // 29 = 349 - 320 bits
+ 0x00000000ffffffffULL, // 32 = 352 - 320 bits
+ 0x00000007ffffffffULL, // 35 = 355 - 320 bits
+ 0x0000003fffffffffULL, // 38 = 358 - 320 bits
+ 0x000003ffffffffffULL, // 42 = 362 - 320 bits
+ 0x00001fffffffffffULL, // 45 = 365 - 320 bits
+ 0x0000ffffffffffffULL // 48 = 368 - 320 bits
+};
+
+// onehalf256M[] contains 1/2 positioned correctly for comparison with the
+// high bits of f*; the high 128 bits of the 512-bit mask are 0
+UINT64 onehalf256M[] = {
+ 0x0000000000004000ULL, // 15 = 335 - 320 bits
+ 0x0000000000040000ULL, // 19 = 339 - 320 bits
+ 0x0000000000200000ULL, // 22 = 342 - 320 bits
+ 0x0000000001000000ULL, // 25 = 345 - 320 bits
+ 0x0000000010000000ULL, // 29 = 349 - 320 bits
+ 0x0000000080000000ULL, // 32 = 352 - 320 bits
+ 0x0000000400000000ULL, // 35 = 355 - 320 bits
+ 0x0000002000000000ULL, // 38 = 358 - 320 bits
+ 0x0000020000000000ULL, // 42 = 362 - 320 bits
+ 0x0000100000000000ULL, // 45 = 365 - 320 bits
+ 0x0000800000000000ULL // 48 = 368 - 320 bits
+};
+
+
+// char_table2[] is used to convert n to string, where 10 <= n <= 99
+unsigned char char_table2[180] = {
+ '1', '0',
+ '1', '1',
+ '1', '2',
+ '1', '3',
+ '1', '4',
+ '1', '5',
+ '1', '6',
+ '1', '7',
+ '1', '8',
+ '1', '9',
+ '2', '0',
+ '2', '1',
+ '2', '2',
+ '2', '3',
+ '2', '4',
+ '2', '5',
+ '2', '6',
+ '2', '7',
+ '2', '8',
+ '2', '9',
+ '3', '0',
+ '3', '1',
+ '3', '2',
+ '3', '3',
+ '3', '4',
+ '3', '5',
+ '3', '6',
+ '3', '7',
+ '3', '8',
+ '3', '9',
+ '4', '0',
+ '4', '1',
+ '4', '2',
+ '4', '3',
+ '4', '4',
+ '4', '5',
+ '4', '6',
+ '4', '7',
+ '4', '8',
+ '4', '9',
+ '5', '0',
+ '5', '1',
+ '5', '2',
+ '5', '3',
+ '5', '4',
+ '5', '5',
+ '5', '6',
+ '5', '7',
+ '5', '8',
+ '5', '9',
+ '6', '0',
+ '6', '1',
+ '6', '2',
+ '6', '3',
+ '6', '4',
+ '6', '5',
+ '6', '6',
+ '6', '7',
+ '6', '8',
+ '6', '9',
+ '7', '0',
+ '7', '1',
+ '7', '2',
+ '7', '3',
+ '7', '4',
+ '7', '5',
+ '7', '6',
+ '7', '7',
+ '7', '8',
+ '7', '9',
+ '8', '0',
+ '8', '1',
+ '8', '2',
+ '8', '3',
+ '8', '4',
+ '8', '5',
+ '8', '6',
+ '8', '7',
+ '8', '8',
+ '8', '9',
+ '9', '0',
+ '9', '1',
+ '9', '2',
+ '9', '3',
+ '9', '4',
+ '9', '5',
+ '9', '6',
+ '9', '7',
+ '9', '8',
+ '9', '9'
+};
+
+
+// char_table3[] is used to convert n to string, where 000 <= n <= 999
+unsigned char char_table3[3000] = {
+ '0', '0', '0',
+ '0', '0', '1',
+ '0', '0', '2',
+ '0', '0', '3',
+ '0', '0', '4',
+ '0', '0', '5',
+ '0', '0', '6',
+ '0', '0', '7',
+ '0', '0', '8',
+ '0', '0', '9',
+ '0', '1', '0',
+ '0', '1', '1',
+ '0', '1', '2',
+ '0', '1', '3',
+ '0', '1', '4',
+ '0', '1', '5',
+ '0', '1', '6',
+ '0', '1', '7',
+ '0', '1', '8',
+ '0', '1', '9',
+ '0', '2', '0',
+ '0', '2', '1',
+ '0', '2', '2',
+ '0', '2', '3',
+ '0', '2', '4',
+ '0', '2', '5',
+ '0', '2', '6',
+ '0', '2', '7',
+ '0', '2', '8',
+ '0', '2', '9',
+ '0', '3', '0',
+ '0', '3', '1',
+ '0', '3', '2',
+ '0', '3', '3',
+ '0', '3', '4',
+ '0', '3', '5',
+ '0', '3', '6',
+ '0', '3', '7',
+ '0', '3', '8',
+ '0', '3', '9',
+ '0', '4', '0',
+ '0', '4', '1',
+ '0', '4', '2',
+ '0', '4', '3',
+ '0', '4', '4',
+ '0', '4', '5',
+ '0', '4', '6',
+ '0', '4', '7',
+ '0', '4', '8',
+ '0', '4', '9',
+ '0', '5', '0',
+ '0', '5', '1',
+ '0', '5', '2',
+ '0', '5', '3',
+ '0', '5', '4',
+ '0', '5', '5',
+ '0', '5', '6',
+ '0', '5', '7',
+ '0', '5', '8',
+ '0', '5', '9',
+ '0', '6', '0',
+ '0', '6', '1',
+ '0', '6', '2',
+ '0', '6', '3',
+ '0', '6', '4',
+ '0', '6', '5',
+ '0', '6', '6',
+ '0', '6', '7',
+ '0', '6', '8',
+ '0', '6', '9',
+ '0', '7', '0',
+ '0', '7', '1',
+ '0', '7', '2',
+ '0', '7', '3',
+ '0', '7', '4',
+ '0', '7', '5',
+ '0', '7', '6',
+ '0', '7', '7',
+ '0', '7', '8',
+ '0', '7', '9',
+ '0', '8', '0',
+ '0', '8', '1',
+ '0', '8', '2',
+ '0', '8', '3',
+ '0', '8', '4',
+ '0', '8', '5',
+ '0', '8', '6',
+ '0', '8', '7',
+ '0', '8', '8',
+ '0', '8', '9',
+ '0', '9', '0',
+ '0', '9', '1',
+ '0', '9', '2',
+ '0', '9', '3',
+ '0', '9', '4',
+ '0', '9', '5',
+ '0', '9', '6',
+ '0', '9', '7',
+ '0', '9', '8',
+ '0', '9', '9',
+ '1', '0', '0',
+ '1', '0', '1',
+ '1', '0', '2',
+ '1', '0', '3',
+ '1', '0', '4',
+ '1', '0', '5',
+ '1', '0', '6',
+ '1', '0', '7',
+ '1', '0', '8',
+ '1', '0', '9',
+ '1', '1', '0',
+ '1', '1', '1',
+ '1', '1', '2',
+ '1', '1', '3',
+ '1', '1', '4',
+ '1', '1', '5',
+ '1', '1', '6',
+ '1', '1', '7',
+ '1', '1', '8',
+ '1', '1', '9',
+ '1', '2', '0',
+ '1', '2', '1',
+ '1', '2', '2',
+ '1', '2', '3',
+ '1', '2', '4',
+ '1', '2', '5',
+ '1', '2', '6',
+ '1', '2', '7',
+ '1', '2', '8',
+ '1', '2', '9',
+ '1', '3', '0',
+ '1', '3', '1',
+ '1', '3', '2',
+ '1', '3', '3',
+ '1', '3', '4',
+ '1', '3', '5',
+ '1', '3', '6',
+ '1', '3', '7',
+ '1', '3', '8',
+ '1', '3', '9',
+ '1', '4', '0',
+ '1', '4', '1',
+ '1', '4', '2',
+ '1', '4', '3',
+ '1', '4', '4',
+ '1', '4', '5',
+ '1', '4', '6',
+ '1', '4', '7',
+ '1', '4', '8',
+ '1', '4', '9',
+ '1', '5', '0',
+ '1', '5', '1',
+ '1', '5', '2',
+ '1', '5', '3',
+ '1', '5', '4',
+ '1', '5', '5',
+ '1', '5', '6',
+ '1', '5', '7',
+ '1', '5', '8',
+ '1', '5', '9',
+ '1', '6', '0',
+ '1', '6', '1',
+ '1', '6', '2',
+ '1', '6', '3',
+ '1', '6', '4',
+ '1', '6', '5',
+ '1', '6', '6',
+ '1', '6', '7',
+ '1', '6', '8',
+ '1', '6', '9',
+ '1', '7', '0',
+ '1', '7', '1',
+ '1', '7', '2',
+ '1', '7', '3',
+ '1', '7', '4',
+ '1', '7', '5',
+ '1', '7', '6',
+ '1', '7', '7',
+ '1', '7', '8',
+ '1', '7', '9',
+ '1', '8', '0',
+ '1', '8', '1',
+ '1', '8', '2',
+ '1', '8', '3',
+ '1', '8', '4',
+ '1', '8', '5',
+ '1', '8', '6',
+ '1', '8', '7',
+ '1', '8', '8',
+ '1', '8', '9',
+ '1', '9', '0',
+ '1', '9', '1',
+ '1', '9', '2',
+ '1', '9', '3',
+ '1', '9', '4',
+ '1', '9', '5',
+ '1', '9', '6',
+ '1', '9', '7',
+ '1', '9', '8',
+ '1', '9', '9',
+ '2', '0', '0',
+ '2', '0', '1',
+ '2', '0', '2',
+ '2', '0', '3',
+ '2', '0', '4',
+ '2', '0', '5',
+ '2', '0', '6',
+ '2', '0', '7',
+ '2', '0', '8',
+ '2', '0', '9',
+ '2', '1', '0',
+ '2', '1', '1',
+ '2', '1', '2',
+ '2', '1', '3',
+ '2', '1', '4',
+ '2', '1', '5',
+ '2', '1', '6',
+ '2', '1', '7',
+ '2', '1', '8',
+ '2', '1', '9',
+ '2', '2', '0',
+ '2', '2', '1',
+ '2', '2', '2',
+ '2', '2', '3',
+ '2', '2', '4',
+ '2', '2', '5',
+ '2', '2', '6',
+ '2', '2', '7',
+ '2', '2', '8',
+ '2', '2', '9',
+ '2', '3', '0',
+ '2', '3', '1',
+ '2', '3', '2',
+ '2', '3', '3',
+ '2', '3', '4',
+ '2', '3', '5',
+ '2', '3', '6',
+ '2', '3', '7',
+ '2', '3', '8',
+ '2', '3', '9',
+ '2', '4', '0',
+ '2', '4', '1',
+ '2', '4', '2',
+ '2', '4', '3',
+ '2', '4', '4',
+ '2', '4', '5',
+ '2', '4', '6',
+ '2', '4', '7',
+ '2', '4', '8',
+ '2', '4', '9',
+ '2', '5', '0',
+ '2', '5', '1',
+ '2', '5', '2',
+ '2', '5', '3',
+ '2', '5', '4',
+ '2', '5', '5',
+ '2', '5', '6',
+ '2', '5', '7',
+ '2', '5', '8',
+ '2', '5', '9',
+ '2', '6', '0',
+ '2', '6', '1',
+ '2', '6', '2',
+ '2', '6', '3',
+ '2', '6', '4',
+ '2', '6', '5',
+ '2', '6', '6',
+ '2', '6', '7',
+ '2', '6', '8',
+ '2', '6', '9',
+ '2', '7', '0',
+ '2', '7', '1',
+ '2', '7', '2',
+ '2', '7', '3',
+ '2', '7', '4',
+ '2', '7', '5',
+ '2', '7', '6',
+ '2', '7', '7',
+ '2', '7', '8',
+ '2', '7', '9',
+ '2', '8', '0',
+ '2', '8', '1',
+ '2', '8', '2',
+ '2', '8', '3',
+ '2', '8', '4',
+ '2', '8', '5',
+ '2', '8', '6',
+ '2', '8', '7',
+ '2', '8', '8',
+ '2', '8', '9',
+ '2', '9', '0',
+ '2', '9', '1',
+ '2', '9', '2',
+ '2', '9', '3',
+ '2', '9', '4',
+ '2', '9', '5',
+ '2', '9', '6',
+ '2', '9', '7',
+ '2', '9', '8',
+ '2', '9', '9',
+ '3', '0', '0',
+ '3', '0', '1',
+ '3', '0', '2',
+ '3', '0', '3',
+ '3', '0', '4',
+ '3', '0', '5',
+ '3', '0', '6',
+ '3', '0', '7',
+ '3', '0', '8',
+ '3', '0', '9',
+ '3', '1', '0',
+ '3', '1', '1',
+ '3', '1', '2',
+ '3', '1', '3',
+ '3', '1', '4',
+ '3', '1', '5',
+ '3', '1', '6',
+ '3', '1', '7',
+ '3', '1', '8',
+ '3', '1', '9',
+ '3', '2', '0',
+ '3', '2', '1',
+ '3', '2', '2',
+ '3', '2', '3',
+ '3', '2', '4',
+ '3', '2', '5',
+ '3', '2', '6',
+ '3', '2', '7',
+ '3', '2', '8',
+ '3', '2', '9',
+ '3', '3', '0',
+ '3', '3', '1',
+ '3', '3', '2',
+ '3', '3', '3',
+ '3', '3', '4',
+ '3', '3', '5',
+ '3', '3', '6',
+ '3', '3', '7',
+ '3', '3', '8',
+ '3', '3', '9',
+ '3', '4', '0',
+ '3', '4', '1',
+ '3', '4', '2',
+ '3', '4', '3',
+ '3', '4', '4',
+ '3', '4', '5',
+ '3', '4', '6',
+ '3', '4', '7',
+ '3', '4', '8',
+ '3', '4', '9',
+ '3', '5', '0',
+ '3', '5', '1',
+ '3', '5', '2',
+ '3', '5', '3',
+ '3', '5', '4',
+ '3', '5', '5',
+ '3', '5', '6',
+ '3', '5', '7',
+ '3', '5', '8',
+ '3', '5', '9',
+ '3', '6', '0',
+ '3', '6', '1',
+ '3', '6', '2',
+ '3', '6', '3',
+ '3', '6', '4',
+ '3', '6', '5',
+ '3', '6', '6',
+ '3', '6', '7',
+ '3', '6', '8',
+ '3', '6', '9',
+ '3', '7', '0',
+ '3', '7', '1',
+ '3', '7', '2',
+ '3', '7', '3',
+ '3', '7', '4',
+ '3', '7', '5',
+ '3', '7', '6',
+ '3', '7', '7',
+ '3', '7', '8',
+ '3', '7', '9',
+ '3', '8', '0',
+ '3', '8', '1',
+ '3', '8', '2',
+ '3', '8', '3',
+ '3', '8', '4',
+ '3', '8', '5',
+ '3', '8', '6',
+ '3', '8', '7',
+ '3', '8', '8',
+ '3', '8', '9',
+ '3', '9', '0',
+ '3', '9', '1',
+ '3', '9', '2',
+ '3', '9', '3',
+ '3', '9', '4',
+ '3', '9', '5',
+ '3', '9', '6',
+ '3', '9', '7',
+ '3', '9', '8',
+ '3', '9', '9',
+ '4', '0', '0',
+ '4', '0', '1',
+ '4', '0', '2',
+ '4', '0', '3',
+ '4', '0', '4',
+ '4', '0', '5',
+ '4', '0', '6',
+ '4', '0', '7',
+ '4', '0', '8',
+ '4', '0', '9',
+ '4', '1', '0',
+ '4', '1', '1',
+ '4', '1', '2',
+ '4', '1', '3',
+ '4', '1', '4',
+ '4', '1', '5',
+ '4', '1', '6',
+ '4', '1', '7',
+ '4', '1', '8',
+ '4', '1', '9',
+ '4', '2', '0',
+ '4', '2', '1',
+ '4', '2', '2',
+ '4', '2', '3',
+ '4', '2', '4',
+ '4', '2', '5',
+ '4', '2', '6',
+ '4', '2', '7',
+ '4', '2', '8',
+ '4', '2', '9',
+ '4', '3', '0',
+ '4', '3', '1',
+ '4', '3', '2',
+ '4', '3', '3',
+ '4', '3', '4',
+ '4', '3', '5',
+ '4', '3', '6',
+ '4', '3', '7',
+ '4', '3', '8',
+ '4', '3', '9',
+ '4', '4', '0',
+ '4', '4', '1',
+ '4', '4', '2',
+ '4', '4', '3',
+ '4', '4', '4',
+ '4', '4', '5',
+ '4', '4', '6',
+ '4', '4', '7',
+ '4', '4', '8',
+ '4', '4', '9',
+ '4', '5', '0',
+ '4', '5', '1',
+ '4', '5', '2',
+ '4', '5', '3',
+ '4', '5', '4',
+ '4', '5', '5',
+ '4', '5', '6',
+ '4', '5', '7',
+ '4', '5', '8',
+ '4', '5', '9',
+ '4', '6', '0',
+ '4', '6', '1',
+ '4', '6', '2',
+ '4', '6', '3',
+ '4', '6', '4',
+ '4', '6', '5',
+ '4', '6', '6',
+ '4', '6', '7',
+ '4', '6', '8',
+ '4', '6', '9',
+ '4', '7', '0',
+ '4', '7', '1',
+ '4', '7', '2',
+ '4', '7', '3',
+ '4', '7', '4',
+ '4', '7', '5',
+ '4', '7', '6',
+ '4', '7', '7',
+ '4', '7', '8',
+ '4', '7', '9',
+ '4', '8', '0',
+ '4', '8', '1',
+ '4', '8', '2',
+ '4', '8', '3',
+ '4', '8', '4',
+ '4', '8', '5',
+ '4', '8', '6',
+ '4', '8', '7',
+ '4', '8', '8',
+ '4', '8', '9',
+ '4', '9', '0',
+ '4', '9', '1',
+ '4', '9', '2',
+ '4', '9', '3',
+ '4', '9', '4',
+ '4', '9', '5',
+ '4', '9', '6',
+ '4', '9', '7',
+ '4', '9', '8',
+ '4', '9', '9',
+ '5', '0', '0',
+ '5', '0', '1',
+ '5', '0', '2',
+ '5', '0', '3',
+ '5', '0', '4',
+ '5', '0', '5',
+ '5', '0', '6',
+ '5', '0', '7',
+ '5', '0', '8',
+ '5', '0', '9',
+ '5', '1', '0',
+ '5', '1', '1',
+ '5', '1', '2',
+ '5', '1', '3',
+ '5', '1', '4',
+ '5', '1', '5',
+ '5', '1', '6',
+ '5', '1', '7',
+ '5', '1', '8',
+ '5', '1', '9',
+ '5', '2', '0',
+ '5', '2', '1',
+ '5', '2', '2',
+ '5', '2', '3',
+ '5', '2', '4',
+ '5', '2', '5',
+ '5', '2', '6',
+ '5', '2', '7',
+ '5', '2', '8',
+ '5', '2', '9',
+ '5', '3', '0',
+ '5', '3', '1',
+ '5', '3', '2',
+ '5', '3', '3',
+ '5', '3', '4',
+ '5', '3', '5',
+ '5', '3', '6',
+ '5', '3', '7',
+ '5', '3', '8',
+ '5', '3', '9',
+ '5', '4', '0',
+ '5', '4', '1',
+ '5', '4', '2',
+ '5', '4', '3',
+ '5', '4', '4',
+ '5', '4', '5',
+ '5', '4', '6',
+ '5', '4', '7',
+ '5', '4', '8',
+ '5', '4', '9',
+ '5', '5', '0',
+ '5', '5', '1',
+ '5', '5', '2',
+ '5', '5', '3',
+ '5', '5', '4',
+ '5', '5', '5',
+ '5', '5', '6',
+ '5', '5', '7',
+ '5', '5', '8',
+ '5', '5', '9',
+ '5', '6', '0',
+ '5', '6', '1',
+ '5', '6', '2',
+ '5', '6', '3',
+ '5', '6', '4',
+ '5', '6', '5',
+ '5', '6', '6',
+ '5', '6', '7',
+ '5', '6', '8',
+ '5', '6', '9',
+ '5', '7', '0',
+ '5', '7', '1',
+ '5', '7', '2',
+ '5', '7', '3',
+ '5', '7', '4',
+ '5', '7', '5',
+ '5', '7', '6',
+ '5', '7', '7',
+ '5', '7', '8',
+ '5', '7', '9',
+ '5', '8', '0',
+ '5', '8', '1',
+ '5', '8', '2',
+ '5', '8', '3',
+ '5', '8', '4',
+ '5', '8', '5',
+ '5', '8', '6',
+ '5', '8', '7',
+ '5', '8', '8',
+ '5', '8', '9',
+ '5', '9', '0',
+ '5', '9', '1',
+ '5', '9', '2',
+ '5', '9', '3',
+ '5', '9', '4',
+ '5', '9', '5',
+ '5', '9', '6',
+ '5', '9', '7',
+ '5', '9', '8',
+ '5', '9', '9',
+ '6', '0', '0',
+ '6', '0', '1',
+ '6', '0', '2',
+ '6', '0', '3',
+ '6', '0', '4',
+ '6', '0', '5',
+ '6', '0', '6',
+ '6', '0', '7',
+ '6', '0', '8',
+ '6', '0', '9',
+ '6', '1', '0',
+ '6', '1', '1',
+ '6', '1', '2',
+ '6', '1', '3',
+ '6', '1', '4',
+ '6', '1', '5',
+ '6', '1', '6',
+ '6', '1', '7',
+ '6', '1', '8',
+ '6', '1', '9',
+ '6', '2', '0',
+ '6', '2', '1',
+ '6', '2', '2',
+ '6', '2', '3',
+ '6', '2', '4',
+ '6', '2', '5',
+ '6', '2', '6',
+ '6', '2', '7',
+ '6', '2', '8',
+ '6', '2', '9',
+ '6', '3', '0',
+ '6', '3', '1',
+ '6', '3', '2',
+ '6', '3', '3',
+ '6', '3', '4',
+ '6', '3', '5',
+ '6', '3', '6',
+ '6', '3', '7',
+ '6', '3', '8',
+ '6', '3', '9',
+ '6', '4', '0',
+ '6', '4', '1',
+ '6', '4', '2',
+ '6', '4', '3',
+ '6', '4', '4',
+ '6', '4', '5',
+ '6', '4', '6',
+ '6', '4', '7',
+ '6', '4', '8',
+ '6', '4', '9',
+ '6', '5', '0',
+ '6', '5', '1',
+ '6', '5', '2',
+ '6', '5', '3',
+ '6', '5', '4',
+ '6', '5', '5',
+ '6', '5', '6',
+ '6', '5', '7',
+ '6', '5', '8',
+ '6', '5', '9',
+ '6', '6', '0',
+ '6', '6', '1',
+ '6', '6', '2',
+ '6', '6', '3',
+ '6', '6', '4',
+ '6', '6', '5',
+ '6', '6', '6',
+ '6', '6', '7',
+ '6', '6', '8',
+ '6', '6', '9',
+ '6', '7', '0',
+ '6', '7', '1',
+ '6', '7', '2',
+ '6', '7', '3',
+ '6', '7', '4',
+ '6', '7', '5',
+ '6', '7', '6',
+ '6', '7', '7',
+ '6', '7', '8',
+ '6', '7', '9',
+ '6', '8', '0',
+ '6', '8', '1',
+ '6', '8', '2',
+ '6', '8', '3',
+ '6', '8', '4',
+ '6', '8', '5',
+ '6', '8', '6',
+ '6', '8', '7',
+ '6', '8', '8',
+ '6', '8', '9',
+ '6', '9', '0',
+ '6', '9', '1',
+ '6', '9', '2',
+ '6', '9', '3',
+ '6', '9', '4',
+ '6', '9', '5',
+ '6', '9', '6',
+ '6', '9', '7',
+ '6', '9', '8',
+ '6', '9', '9',
+ '7', '0', '0',
+ '7', '0', '1',
+ '7', '0', '2',
+ '7', '0', '3',
+ '7', '0', '4',
+ '7', '0', '5',
+ '7', '0', '6',
+ '7', '0', '7',
+ '7', '0', '8',
+ '7', '0', '9',
+ '7', '1', '0',
+ '7', '1', '1',
+ '7', '1', '2',
+ '7', '1', '3',
+ '7', '1', '4',
+ '7', '1', '5',
+ '7', '1', '6',
+ '7', '1', '7',
+ '7', '1', '8',
+ '7', '1', '9',
+ '7', '2', '0',
+ '7', '2', '1',
+ '7', '2', '2',
+ '7', '2', '3',
+ '7', '2', '4',
+ '7', '2', '5',
+ '7', '2', '6',
+ '7', '2', '7',
+ '7', '2', '8',
+ '7', '2', '9',
+ '7', '3', '0',
+ '7', '3', '1',
+ '7', '3', '2',
+ '7', '3', '3',
+ '7', '3', '4',
+ '7', '3', '5',
+ '7', '3', '6',
+ '7', '3', '7',
+ '7', '3', '8',
+ '7', '3', '9',
+ '7', '4', '0',
+ '7', '4', '1',
+ '7', '4', '2',
+ '7', '4', '3',
+ '7', '4', '4',
+ '7', '4', '5',
+ '7', '4', '6',
+ '7', '4', '7',
+ '7', '4', '8',
+ '7', '4', '9',
+ '7', '5', '0',
+ '7', '5', '1',
+ '7', '5', '2',
+ '7', '5', '3',
+ '7', '5', '4',
+ '7', '5', '5',
+ '7', '5', '6',
+ '7', '5', '7',
+ '7', '5', '8',
+ '7', '5', '9',
+ '7', '6', '0',
+ '7', '6', '1',
+ '7', '6', '2',
+ '7', '6', '3',
+ '7', '6', '4',
+ '7', '6', '5',
+ '7', '6', '6',
+ '7', '6', '7',
+ '7', '6', '8',
+ '7', '6', '9',
+ '7', '7', '0',
+ '7', '7', '1',
+ '7', '7', '2',
+ '7', '7', '3',
+ '7', '7', '4',
+ '7', '7', '5',
+ '7', '7', '6',
+ '7', '7', '7',
+ '7', '7', '8',
+ '7', '7', '9',
+ '7', '8', '0',
+ '7', '8', '1',
+ '7', '8', '2',
+ '7', '8', '3',
+ '7', '8', '4',
+ '7', '8', '5',
+ '7', '8', '6',
+ '7', '8', '7',
+ '7', '8', '8',
+ '7', '8', '9',
+ '7', '9', '0',
+ '7', '9', '1',
+ '7', '9', '2',
+ '7', '9', '3',
+ '7', '9', '4',
+ '7', '9', '5',
+ '7', '9', '6',
+ '7', '9', '7',
+ '7', '9', '8',
+ '7', '9', '9',
+ '8', '0', '0',
+ '8', '0', '1',
+ '8', '0', '2',
+ '8', '0', '3',
+ '8', '0', '4',
+ '8', '0', '5',
+ '8', '0', '6',
+ '8', '0', '7',
+ '8', '0', '8',
+ '8', '0', '9',
+ '8', '1', '0',
+ '8', '1', '1',
+ '8', '1', '2',
+ '8', '1', '3',
+ '8', '1', '4',
+ '8', '1', '5',
+ '8', '1', '6',
+ '8', '1', '7',
+ '8', '1', '8',
+ '8', '1', '9',
+ '8', '2', '0',
+ '8', '2', '1',
+ '8', '2', '2',
+ '8', '2', '3',
+ '8', '2', '4',
+ '8', '2', '5',
+ '8', '2', '6',
+ '8', '2', '7',
+ '8', '2', '8',
+ '8', '2', '9',
+ '8', '3', '0',
+ '8', '3', '1',
+ '8', '3', '2',
+ '8', '3', '3',
+ '8', '3', '4',
+ '8', '3', '5',
+ '8', '3', '6',
+ '8', '3', '7',
+ '8', '3', '8',
+ '8', '3', '9',
+ '8', '4', '0',
+ '8', '4', '1',
+ '8', '4', '2',
+ '8', '4', '3',
+ '8', '4', '4',
+ '8', '4', '5',
+ '8', '4', '6',
+ '8', '4', '7',
+ '8', '4', '8',
+ '8', '4', '9',
+ '8', '5', '0',
+ '8', '5', '1',
+ '8', '5', '2',
+ '8', '5', '3',
+ '8', '5', '4',
+ '8', '5', '5',
+ '8', '5', '6',
+ '8', '5', '7',
+ '8', '5', '8',
+ '8', '5', '9',
+ '8', '6', '0',
+ '8', '6', '1',
+ '8', '6', '2',
+ '8', '6', '3',
+ '8', '6', '4',
+ '8', '6', '5',
+ '8', '6', '6',
+ '8', '6', '7',
+ '8', '6', '8',
+ '8', '6', '9',
+ '8', '7', '0',
+ '8', '7', '1',
+ '8', '7', '2',
+ '8', '7', '3',
+ '8', '7', '4',
+ '8', '7', '5',
+ '8', '7', '6',
+ '8', '7', '7',
+ '8', '7', '8',
+ '8', '7', '9',
+ '8', '8', '0',
+ '8', '8', '1',
+ '8', '8', '2',
+ '8', '8', '3',
+ '8', '8', '4',
+ '8', '8', '5',
+ '8', '8', '6',
+ '8', '8', '7',
+ '8', '8', '8',
+ '8', '8', '9',
+ '8', '9', '0',
+ '8', '9', '1',
+ '8', '9', '2',
+ '8', '9', '3',
+ '8', '9', '4',
+ '8', '9', '5',
+ '8', '9', '6',
+ '8', '9', '7',
+ '8', '9', '8',
+ '8', '9', '9',
+ '9', '0', '0',
+ '9', '0', '1',
+ '9', '0', '2',
+ '9', '0', '3',
+ '9', '0', '4',
+ '9', '0', '5',
+ '9', '0', '6',
+ '9', '0', '7',
+ '9', '0', '8',
+ '9', '0', '9',
+ '9', '1', '0',
+ '9', '1', '1',
+ '9', '1', '2',
+ '9', '1', '3',
+ '9', '1', '4',
+ '9', '1', '5',
+ '9', '1', '6',
+ '9', '1', '7',
+ '9', '1', '8',
+ '9', '1', '9',
+ '9', '2', '0',
+ '9', '2', '1',
+ '9', '2', '2',
+ '9', '2', '3',
+ '9', '2', '4',
+ '9', '2', '5',
+ '9', '2', '6',
+ '9', '2', '7',
+ '9', '2', '8',
+ '9', '2', '9',
+ '9', '3', '0',
+ '9', '3', '1',
+ '9', '3', '2',
+ '9', '3', '3',
+ '9', '3', '4',
+ '9', '3', '5',
+ '9', '3', '6',
+ '9', '3', '7',
+ '9', '3', '8',
+ '9', '3', '9',
+ '9', '4', '0',
+ '9', '4', '1',
+ '9', '4', '2',
+ '9', '4', '3',
+ '9', '4', '4',
+ '9', '4', '5',
+ '9', '4', '6',
+ '9', '4', '7',
+ '9', '4', '8',
+ '9', '4', '9',
+ '9', '5', '0',
+ '9', '5', '1',
+ '9', '5', '2',
+ '9', '5', '3',
+ '9', '5', '4',
+ '9', '5', '5',
+ '9', '5', '6',
+ '9', '5', '7',
+ '9', '5', '8',
+ '9', '5', '9',
+ '9', '6', '0',
+ '9', '6', '1',
+ '9', '6', '2',
+ '9', '6', '3',
+ '9', '6', '4',
+ '9', '6', '5',
+ '9', '6', '6',
+ '9', '6', '7',
+ '9', '6', '8',
+ '9', '6', '9',
+ '9', '7', '0',
+ '9', '7', '1',
+ '9', '7', '2',
+ '9', '7', '3',
+ '9', '7', '4',
+ '9', '7', '5',
+ '9', '7', '6',
+ '9', '7', '7',
+ '9', '7', '8',
+ '9', '7', '9',
+ '9', '8', '0',
+ '9', '8', '1',
+ '9', '8', '2',
+ '9', '8', '3',
+ '9', '8', '4',
+ '9', '8', '5',
+ '9', '8', '6',
+ '9', '8', '7',
+ '9', '8', '8',
+ '9', '8', '9',
+ '9', '9', '0',
+ '9', '9', '1',
+ '9', '9', '2',
+ '9', '9', '3',
+ '9', '9', '4',
+ '9', '9', '5',
+ '9', '9', '6',
+ '9', '9', '7',
+ '9', '9', '8',
+ '9', '9', '9'
+};
+
+// ten2m3k64[], shift_ten2m3k64[] used for conversion from BID128 to string
+UINT64 ten2m3k64[] = {
+ 0x4189374bc6a7ef9eull, // 4189374bc6a7ef9e * 2^-72 = (10^-3)RP,63
+ 0x10c6f7a0b5ed8d37ull, // 10c6f7a0b5ed8d37 * 2^-80 = (10^-6)RP,61
+ 0x44b82fa09b5a52ccull, // 44b82fa09b5a52cc * 2^-92 = (10^-9)RP,63
+ 0x119799812dea111aull, // 119799812dea111a * 2^-100 = (10^-12)RP,61
+ 0x480ebe7b9d58566dull // 480ebe7b9d58566d * 2^-112 = (10^-15)RP,63
+};
+
+unsigned int shift_ten2m3k64[] = {
+ 8, // 72 - 64
+ 16, // 80 - 64
+ 28, // 92 - 64
+ 36, // 100 - 64
+ 48 // 112 - 64
+};
+
+UINT128 ten2m3k128[] = {
+ {{0xb22d0e5604189375ull, 0x4189374bc6a7ef9dull}},
+ // 4189374bc6a7ef9d b22d0e5604189375 * 2^-136 = (10^-3)RP,127
+ {{0xb4c7f34938583622ull, 0x10c6f7a0b5ed8d36ull}},
+ // 10c6f7a0b5ed8d36 b4c7f34938583622 * 2^-144 = (10^-6)RP,125
+ {{0x98b405447c4a9819ull, 0x44b82fa09b5a52cbull}},
+ // 44b82fa09b5a52cb 98b405447c4a9819 * 2^-156 = (10^-9)RP,127
+ {{0x7f27f0f6e885c8bbull, 0x119799812dea1119ull}},
+ // 119799812dea1119 7f27f0f6e885c8bb * 2^-164 = (10^-12)RP,125
+ {{0x87ce9b80a5fb0509ull, 0x480ebe7b9d58566cull}},
+ // 480ebe7b9d58566c 87ce9b80a5fb0509 * 2^-176 = (10^-15)RP,127
+ {{0xe75fe645cc4873faull, 0x12725dd1d243aba0ull}},
+ // 12725dd1d243aba0 e75fe645cc4873fa * 2^-184 = (10^-18)RP,125
+ {{0x69fb7e0b75e52f02ull, 0x4b8ed0283a6d3df7ull}},
+ // 4b8ed0283a6d3df7 69fb7e0b75e52f02 * 2^-196 = (10^-21)RP,127
+ {{0x58924d52ce4f26a9ull, 0x1357c299a88ea76aull}},
+ // 1357c299a88ea76a 58924d52ce4f26a9 * 2^-204 = (10^-24)RP,125
+ {{0x3baf513267aa9a3full, 0x4f3a68dbc8f03f24ull}},
+ // 4f3a68dbc8f03f24 3baf513267aa9a3f * 2^-216 = (10^-27)RP,127
+ {{0x3424b06f3529a052ull, 0x14484bfeebc29f86ull}},
+ // 14484bfeebc29f86 3424b06f3529a052 * 2^-224 = (10^-30)RP,125
+ {{0xf658d6c57566eac8ull, 0x5313a5dee87d6eb0ull}}
+ // 5313a5dee87d6eb0 f658d6c57566eac8 * 2^-236 = (10^-33)RP,127
+};
+
+unsigned int shift_ten2m3k128[] = {
+ 8, // 136 - 128
+ 16, // 144 - 128
+ 28, // 156 - 128
+ 36, // 164 - 128
+ 48, // 176 - 128
+ 56, // 184 - 128
+ 4, // 196 - 192
+ 12, // 204 - 192
+ 24, // 216 - 192
+ 32, // 224 - 192
+ 44 // 236 - 192
+};
+
+
+/***************************************************************************
+ *************** TABLES FOR GENERAL ROUNDING FUNCTIONS *********************
+ ***************************************************************************/
+// Note: not all entries in these tables will be used with IEEE 754R decimal
+// floating-point arithmetic
+// a) In round128_2_18() numbers with 2 <= q <= 18 will be rounded only
+// for 1 <= x <= 3:
+// x = 1 or x = 2 when q = 17
+// x = 2 or x = 3 when q = 18
+// b) In round128_19_38() numbers with 19 <= q <= 38 will be rounded only
+// for 1 <= x <= 23:
+// x = 3 or x = 4 when q = 19
+// x = 4 or x = 5 when q = 20
+// ...
+// x = 18 or x = 19 when q = 34
+// x = 1 or x = 2 or x = 19 or x = 20 when q = 35
+// x = 2 or x = 3 or x = 20 or x = 21 when q = 36
+// x = 3 or x = 4 or x = 21 or x = 22 when q = 37
+// x = 4 or x = 5 or x = 22 or x = 23 when q = 38
+// c) ...
+// However, for generality and possible uses outside the frame of IEEE 754R
+// this implementation includes table values for all x in [1, q - 1]
+
+// Note: 64-bit tables generated with ten2mx64.ma; output in ten2mx64.out
+
+// Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
+UINT64 Kx64[] = {
+ 0xcccccccccccccccdULL, // 10^-1 ~= cccccccccccccccd * 2^-67
+ 0xa3d70a3d70a3d70bULL, // 10^-2 ~= a3d70a3d70a3d70b * 2^-70
+ 0x83126e978d4fdf3cULL, // 10^-3 ~= 83126e978d4fdf3c * 2^-73
+ 0xd1b71758e219652cULL, // 10^-4 ~= d1b71758e219652c * 2^-77
+ 0xa7c5ac471b478424ULL, // 10^-5 ~= a7c5ac471b478424 * 2^-80
+ 0x8637bd05af6c69b6ULL, // 10^-6 ~= 8637bd05af6c69b6 * 2^-83
+ 0xd6bf94d5e57a42bdULL, // 10^-7 ~= d6bf94d5e57a42bd * 2^-87
+ 0xabcc77118461cefdULL, // 10^-8 ~= abcc77118461cefd * 2^-90
+ 0x89705f4136b4a598ULL, // 10^-9 ~= 89705f4136b4a598 * 2^-93
+ 0xdbe6fecebdedd5bfULL, // 10^-10 ~= dbe6fecebdedd5bf * 2^-97
+ 0xafebff0bcb24aaffULL, // 10^-11 ~= afebff0bcb24aaff * 2^-100
+ 0x8cbccc096f5088ccULL, // 10^-12 ~= 8cbccc096f5088cc * 2^-103
+ 0xe12e13424bb40e14ULL, // 10^-13 ~= e12e13424bb40e14 * 2^-107
+ 0xb424dc35095cd810ULL, // 10^-14 ~= b424dc35095cd810 * 2^-110
+ 0x901d7cf73ab0acdaULL, // 10^-15 ~= 901d7cf73ab0acda * 2^-113
+ 0xe69594bec44de15cULL, // 10^-16 ~= e69594bec44de15c * 2^-117
+ 0xb877aa3236a4b44aULL // 10^-17 ~= b877aa3236a4b44a * 2^-120
+};
+
+// Ex-64 from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
+unsigned int Ex64m64[] = {
+ 3, // 67 - 64, Ex = 67
+ 6, // 70 - 64, Ex = 70
+ 9, // 73 - 64, Ex = 73
+ 13, // 77 - 64, Ex = 77
+ 16, // 80 - 64, Ex = 80
+ 19, // 83 - 64, Ex = 83
+ 23, // 87 - 64, Ex = 87
+ 26, // 90 - 64, Ex = 90
+ 29, // 93 - 64, Ex = 93
+ 33, // 97 - 64, Ex = 97
+ 36, // 100 - 64, Ex = 100
+ 39, // 103 - 64, Ex = 103
+ 43, // 107 - 64, Ex = 107
+ 46, // 110 - 64, Ex = 110
+ 49, // 113 - 64, Ex = 113
+ 53, // 117 - 64, Ex = 117
+ 56 // 120 - 64, Ex = 120
+};
+
+// Values of 1/2 in the right position to be compared with the fraction from
+// C * kx, 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx
+// (these values are aligned with the high 64 bits of the fraction)
+UINT64 half64[] = {
+ 0x0000000000000004ULL, // half / 2^64 = 4
+ 0x0000000000000020ULL, // half / 2^64 = 20
+ 0x0000000000000100ULL, // half / 2^64 = 100
+ 0x0000000000001000ULL, // half / 2^64 = 1000
+ 0x0000000000008000ULL, // half / 2^64 = 8000
+ 0x0000000000040000ULL, // half / 2^64 = 40000
+ 0x0000000000400000ULL, // half / 2^64 = 400000
+ 0x0000000002000000ULL, // half / 2^64 = 2000000
+ 0x0000000010000000ULL, // half / 2^64 = 10000000
+ 0x0000000100000000ULL, // half / 2^64 = 100000000
+ 0x0000000800000000ULL, // half / 2^64 = 800000000
+ 0x0000004000000000ULL, // half / 2^64 = 4000000000
+ 0x0000040000000000ULL, // half / 2^64 = 40000000000
+ 0x0000200000000000ULL, // half / 2^64 = 200000000000
+ 0x0001000000000000ULL, // half / 2^64 = 1000000000000
+ 0x0010000000000000ULL, // half / 2^64 = 10000000000000
+ 0x0080000000000000ULL // half / 2^64 = 80000000000000
+};
+
+// Values of mask in the right position to obtain the high Ex - 64 bits
+// of the fraction from C * kx, 1 <= x <= 17; the fraction consists of
+// the low Ex bits in C * kx
+UINT64 mask64[] = {
+ 0x0000000000000007ULL, // mask / 2^64
+ 0x000000000000003fULL, // mask / 2^64
+ 0x00000000000001ffULL, // mask / 2^64
+ 0x0000000000001fffULL, // mask / 2^64
+ 0x000000000000ffffULL, // mask / 2^64
+ 0x000000000007ffffULL, // mask / 2^64
+ 0x00000000007fffffULL, // mask / 2^64
+ 0x0000000003ffffffULL, // mask / 2^64
+ 0x000000001fffffffULL, // mask / 2^64
+ 0x00000001ffffffffULL, // mask / 2^64
+ 0x0000000fffffffffULL, // mask / 2^64
+ 0x0000007fffffffffULL, // mask / 2^64
+ 0x000007ffffffffffULL, // mask / 2^64
+ 0x00003fffffffffffULL, // mask / 2^64
+ 0x0001ffffffffffffULL, // mask / 2^64
+ 0x001fffffffffffffULL, // mask / 2^64
+ 0x00ffffffffffffffULL // mask / 2^64
+};
+
+// Values of 10^(-x) trancated to Ex bits beyond the binary point, and
+// in the right position to be compared with the fraction from C * kx,
+// 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx
+// (these values are aligned with the low 64 bits of the fraction)
+UINT64 ten2mxtrunc64[] = {
+ 0xccccccccccccccccULL, // (ten2mx >> 64) = cccccccccccccccc
+ 0xa3d70a3d70a3d70aULL, // (ten2mx >> 64) = a3d70a3d70a3d70a
+ 0x83126e978d4fdf3bULL, // (ten2mx >> 64) = 83126e978d4fdf3b
+ 0xd1b71758e219652bULL, // (ten2mx >> 64) = d1b71758e219652b
+ 0xa7c5ac471b478423ULL, // (ten2mx >> 64) = a7c5ac471b478423
+ 0x8637bd05af6c69b5ULL, // (ten2mx >> 64) = 8637bd05af6c69b5
+ 0xd6bf94d5e57a42bcULL, // (ten2mx >> 64) = d6bf94d5e57a42bc
+ 0xabcc77118461cefcULL, // (ten2mx >> 64) = abcc77118461cefc
+ 0x89705f4136b4a597ULL, // (ten2mx >> 64) = 89705f4136b4a597
+ 0xdbe6fecebdedd5beULL, // (ten2mx >> 64) = dbe6fecebdedd5be
+ 0xafebff0bcb24aafeULL, // (ten2mx >> 64) = afebff0bcb24aafe
+ 0x8cbccc096f5088cbULL, // (ten2mx >> 64) = 8cbccc096f5088cb
+ 0xe12e13424bb40e13ULL, // (ten2mx >> 64) = e12e13424bb40e13
+ 0xb424dc35095cd80fULL, // (ten2mx >> 64) = b424dc35095cd80f
+ 0x901d7cf73ab0acd9ULL, // (ten2mx >> 64) = 901d7cf73ab0acd9
+ 0xe69594bec44de15bULL, // (ten2mx >> 64) = e69594bec44de15b
+ 0xb877aa3236a4b449ULL // (ten2mx >> 64) = b877aa3236a4b449
+};
+
+// Note: 128-bit tables generated with ten2mx128.ma; output in ten2mx128.out
+// The order of the 64-bit components is L, H
+
+// Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37
+UINT128 Kx128[] = {
+ {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}},
+ // 10^-1 ~= cccccccccccccccccccccccccccccccd * 2^-131
+ {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}},
+ // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a4 * 2^-134
+ {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}},
+ // 10^-3 ~= 83126e978d4fdf3b645a1cac083126ea * 2^-137
+ {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}},
+ // 10^-4 ~= d1b71758e219652bd3c36113404ea4a9 * 2^-141
+ {{0x0fcf80dc33721d54ULL, 0xa7c5ac471b478423ULL}},
+ // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d54 * 2^-144
+ {{0xa63f9a49c2c1b110ULL, 0x8637bd05af6c69b5ULL}},
+ // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b110 * 2^-147
+ {{0x3d32907604691b4dULL, 0xd6bf94d5e57a42bcULL}},
+ // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4d * 2^-151
+ {{0xfdc20d2b36ba7c3eULL, 0xabcc77118461cefcULL}},
+ // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3e * 2^-154
+ {{0x31680a88f8953031ULL, 0x89705f4136b4a597ULL}},
+ // 10^-9 ~= 89705f4136b4a59731680a88f8953031 * 2^-157
+ {{0xb573440e5a884d1cULL, 0xdbe6fecebdedd5beULL}},
+ // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1c * 2^-161
+ {{0xf78f69a51539d749ULL, 0xafebff0bcb24aafeULL}},
+ // 10^-11 ~= afebff0bcb24aafef78f69a51539d749 * 2^-164
+ {{0xf93f87b7442e45d4ULL, 0x8cbccc096f5088cbULL}},
+ // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d4 * 2^-167
+ {{0x2865a5f206b06fbaULL, 0xe12e13424bb40e13ULL}},
+ // 10^-13 ~= e12e13424bb40e132865a5f206b06fba * 2^-171
+ {{0x538484c19ef38c95ULL, 0xb424dc35095cd80fULL}},
+ // 10^-14 ~= b424dc35095cd80f538484c19ef38c95 * 2^-174
+ {{0x0f9d37014bf60a11ULL, 0x901d7cf73ab0acd9ULL}},
+ // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a11 * 2^-177
+ {{0x4c2ebe687989a9b4ULL, 0xe69594bec44de15bULL}},
+ // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b4 * 2^-181
+ {{0x09befeb9fad487c3ULL, 0xb877aa3236a4b449ULL}},
+ // 10^-17 ~= b877aa3236a4b44909befeb9fad487c3 * 2^-184
+ {{0x3aff322e62439fd0ULL, 0x9392ee8e921d5d07ULL}},
+ // 10^-18 ~= 9392ee8e921d5d073aff322e62439fd0 * 2^-187
+ {{0x2b31e9e3d06c32e6ULL, 0xec1e4a7db69561a5ULL}},
+ // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e6 * 2^-191
+ {{0x88f4bb1ca6bcf585ULL, 0xbce5086492111aeaULL}},
+ // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf585 * 2^-194
+ {{0xd3f6fc16ebca5e04ULL, 0x971da05074da7beeULL}},
+ // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e04 * 2^-197
+ {{0x5324c68b12dd6339ULL, 0xf1c90080baf72cb1ULL}},
+ // 10^-22 ~= f1c90080baf72cb15324c68b12dd6339 * 2^-201
+ {{0x75b7053c0f178294ULL, 0xc16d9a0095928a27ULL}},
+ // 10^-23 ~= c16d9a0095928a2775b7053c0f178294 * 2^-204
+ {{0xc4926a9672793543ULL, 0x9abe14cd44753b52ULL}},
+ // 10^-24 ~= 9abe14cd44753b52c4926a9672793543 * 2^-207
+ {{0x3a83ddbd83f52205ULL, 0xf79687aed3eec551ULL}},
+ // 10^-25 ~= f79687aed3eec5513a83ddbd83f52205 * 2^-211
+ {{0x95364afe032a819eULL, 0xc612062576589ddaULL}},
+ // 10^-26 ~= c612062576589dda95364afe032a819e * 2^-214
+ {{0x775ea264cf55347eULL, 0x9e74d1b791e07e48ULL}},
+ // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347e * 2^-217
+ {{0x8bca9d6e188853fdULL, 0xfd87b5f28300ca0dULL}},
+ // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fd * 2^-221
+ {{0x096ee45813a04331ULL, 0xcad2f7f5359a3b3eULL}},
+ // 10^-29 ~= cad2f7f5359a3b3e096ee45813a04331 * 2^-224
+ {{0xa1258379a94d028eULL, 0xa2425ff75e14fc31ULL}},
+ // 10^-30 ~= a2425ff75e14fc31a1258379a94d028e * 2^-227
+ {{0x80eacf948770ced8ULL, 0x81ceb32c4b43fcf4ULL}},
+ // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced8 * 2^-230
+ {{0x67de18eda5814af3ULL, 0xcfb11ead453994baULL}},
+ // 10^-32 ~= cfb11ead453994ba67de18eda5814af3 * 2^-234
+ {{0xecb1ad8aeacdd58fULL, 0xa6274bbdd0fadd61ULL}},
+ // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58f * 2^-237
+ {{0xbd5af13bef0b113fULL, 0x84ec3c97da624ab4ULL}},
+ // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113f * 2^-240
+ {{0x955e4ec64b44e865ULL, 0xd4ad2dbfc3d07787ULL}},
+ // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e865 * 2^-244
+ {{0xdde50bd1d5d0b9eaULL, 0xaa242499697392d2ULL}},
+ // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9ea * 2^-247
+ {{0x7e50d64177da2e55ULL, 0x881cea14545c7575ULL}}
+ // 10^-37 ~= 881cea14545c75757e50d64177da2e55 * 2^-250
+};
+
+// Ex-128 from 10^(-x) ~= Kx*2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37
+unsigned int Ex128m128[] = {
+ 3, // 131 - 128, Ex = 131
+ 6, // 134 - 128, Ex = 134
+ 9, // 137 - 128, Ex = 137
+ 13, // 141 - 128, Ex = 141
+ 16, // 144 - 128, Ex = 144
+ 19, // 147 - 128, Ex = 147
+ 23, // 151 - 128, Ex = 151
+ 26, // 154 - 128, Ex = 154
+ 29, // 157 - 128, Ex = 157
+ 33, // 161 - 128, Ex = 161
+ 36, // 164 - 128, Ex = 164
+ 39, // 167 - 128, Ex = 167
+ 43, // 171 - 128, Ex = 171
+ 46, // 174 - 128, Ex = 174
+ 49, // 177 - 128, Ex = 177
+ 53, // 181 - 128, Ex = 181
+ 56, // 184 - 128, Ex = 184
+ 59, // 187 - 128, Ex = 187
+ 63, // 191 - 128, Ex = 191
+ 2, // 194 - 192, Ex = 194
+ 5, // 197 - 192, Ex = 197
+ 9, // 201 - 192, Ex = 201
+ 12, // 204 - 192, Ex = 204
+ 15, // 207 - 192, Ex = 207
+ 19, // 211 - 192, Ex = 211
+ 22, // 214 - 192, Ex = 214
+ 25, // 217 - 192, Ex = 217
+ 29, // 221 - 192, Ex = 221
+ 32, // 224 - 192, Ex = 224
+ 35, // 227 - 192, Ex = 227
+ 38, // 230 - 192, Ex = 230
+ 42, // 234 - 192, Ex = 234
+ 45, // 237 - 192, Ex = 237
+ 48, // 240 - 192, Ex = 240
+ 52, // 244 - 192, Ex = 244
+ 55, // 247 - 192, Ex = 247
+ 58 // 250 - 192, Ex = 250
+};
+
+// Values of 1/2 in the right position to be compared with the fraction from
+// C * kx, 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx
+// (these values are aligned with the high 128 bits of the fraction)
+UINT64 half128[] = {
+ 0x0000000000000004ULL, // half / 2^128 = 4
+ 0x0000000000000020ULL, // half / 2^128 = 20
+ 0x0000000000000100ULL, // half / 2^128 = 100
+ 0x0000000000001000ULL, // half / 2^128 = 1000
+ 0x0000000000008000ULL, // half / 2^128 = 8000
+ 0x0000000000040000ULL, // half / 2^128 = 40000
+ 0x0000000000400000ULL, // half / 2^128 = 400000
+ 0x0000000002000000ULL, // half / 2^128 = 2000000
+ 0x0000000010000000ULL, // half / 2^128 = 10000000
+ 0x0000000100000000ULL, // half / 2^128 = 100000000
+ 0x0000000800000000ULL, // half / 2^128 = 800000000
+ 0x0000004000000000ULL, // half / 2^128 = 4000000000
+ 0x0000040000000000ULL, // half / 2^128 = 40000000000
+ 0x0000200000000000ULL, // half / 2^128 = 200000000000
+ 0x0001000000000000ULL, // half / 2^128 = 1000000000000
+ 0x0010000000000000ULL, // half / 2^128 = 10000000000000
+ 0x0080000000000000ULL, // half / 2^128 = 80000000000000
+ 0x0400000000000000ULL, // half / 2^128 = 400000000000000
+ 0x4000000000000000ULL, // half / 2^128 = 4000000000000000
+ 0x0000000000000002ULL, // half / 2^192 = 2
+ 0x0000000000000010ULL, // half / 2^192 = 10
+ 0x0000000000000100ULL, // half / 2^192 = 100
+ 0x0000000000000800ULL, // half / 2^192 = 800
+ 0x0000000000004000ULL, // half / 2^192 = 4000
+ 0x0000000000040000ULL, // half / 2^192 = 40000
+ 0x0000000000200000ULL, // half / 2^192 = 200000
+ 0x0000000001000000ULL, // half / 2^192 = 1000000
+ 0x0000000010000000ULL, // half / 2^192 = 10000000
+ 0x0000000080000000ULL, // half / 2^192 = 80000000
+ 0x0000000400000000ULL, // half / 2^192 = 400000000
+ 0x0000002000000000ULL, // half / 2^192 = 2000000000
+ 0x0000020000000000ULL, // half / 2^192 = 20000000000
+ 0x0000100000000000ULL, // half / 2^192 = 100000000000
+ 0x0000800000000000ULL, // half / 2^192 = 800000000000
+ 0x0008000000000000ULL, // half / 2^192 = 8000000000000
+ 0x0040000000000000ULL, // half / 2^192 = 40000000000000
+ 0x0200000000000000ULL // half / 2^192 = 200000000000000
+};
+
+// Values of mask in the right position to obtain the high Ex - 128 or Ex - 192
+// bits of the fraction from C * kx, 1 <= x <= 37; the fraction consists of
+// the low Ex bits in C * kx
+UINT64 mask128[] = {
+ 0x0000000000000007ULL, // mask / 2^128
+ 0x000000000000003fULL, // mask / 2^128
+ 0x00000000000001ffULL, // mask / 2^128
+ 0x0000000000001fffULL, // mask / 2^128
+ 0x000000000000ffffULL, // mask / 2^128
+ 0x000000000007ffffULL, // mask / 2^128
+ 0x00000000007fffffULL, // mask / 2^128
+ 0x0000000003ffffffULL, // mask / 2^128
+ 0x000000001fffffffULL, // mask / 2^128
+ 0x00000001ffffffffULL, // mask / 2^128
+ 0x0000000fffffffffULL, // mask / 2^128
+ 0x0000007fffffffffULL, // mask / 2^128
+ 0x000007ffffffffffULL, // mask / 2^128
+ 0x00003fffffffffffULL, // mask / 2^128
+ 0x0001ffffffffffffULL, // mask / 2^128
+ 0x001fffffffffffffULL, // mask / 2^128
+ 0x00ffffffffffffffULL, // mask / 2^128
+ 0x07ffffffffffffffULL, // mask / 2^128
+ 0x7fffffffffffffffULL, // mask / 2^128
+ 0x0000000000000003ULL, // mask / 2^192
+ 0x000000000000001fULL, // mask / 2^192
+ 0x00000000000001ffULL, // mask / 2^192
+ 0x0000000000000fffULL, // mask / 2^192
+ 0x0000000000007fffULL, // mask / 2^192
+ 0x000000000007ffffULL, // mask / 2^192
+ 0x00000000003fffffULL, // mask / 2^192
+ 0x0000000001ffffffULL, // mask / 2^192
+ 0x000000001fffffffULL, // mask / 2^192
+ 0x00000000ffffffffULL, // mask / 2^192
+ 0x00000007ffffffffULL, // mask / 2^192
+ 0x0000003fffffffffULL, // mask / 2^192
+ 0x000003ffffffffffULL, // mask / 2^192
+ 0x00001fffffffffffULL, // mask / 2^192
+ 0x0000ffffffffffffULL, // mask / 2^192
+ 0x000fffffffffffffULL, // mask / 2^192
+ 0x007fffffffffffffULL, // mask / 2^192
+ 0x03ffffffffffffffULL // mask / 2^192
+};
+
+// Values of 10^(-x) trancated to Ex bits beyond the binary point, and
+// in the right position to be compared with the fraction from C * kx,
+// 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx
+// (these values are aligned with the low 128 bits of the fraction)
+UINT128 ten2mxtrunc128[] = {
+ {{0xccccccccccccccccULL, 0xccccccccccccccccULL}},
+ // (ten2mx >> 128) = cccccccccccccccccccccccccccccccc
+ {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
+ // (ten2mx >> 128) = a3d70a3d70a3d70a3d70a3d70a3d70a3
+ {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
+ // (ten2mx >> 128) = 83126e978d4fdf3b645a1cac083126e9
+ {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
+ // (ten2mx >> 128) = d1b71758e219652bd3c36113404ea4a8
+ {{0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
+ // (ten2mx >> 128) = a7c5ac471b4784230fcf80dc33721d53
+ {{0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
+ // (ten2mx >> 128) = 8637bd05af6c69b5a63f9a49c2c1b10f
+ {{0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
+ // (ten2mx >> 128) = d6bf94d5e57a42bc3d32907604691b4c
+ {{0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
+ // (ten2mx >> 128) = abcc77118461cefcfdc20d2b36ba7c3d
+ {{0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
+ // (ten2mx >> 128) = 89705f4136b4a59731680a88f8953030
+ {{0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
+ // (ten2mx >> 128) = dbe6fecebdedd5beb573440e5a884d1b
+ {{0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
+ // (ten2mx >> 128) = afebff0bcb24aafef78f69a51539d748
+ {{0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
+ // (ten2mx >> 128) = 8cbccc096f5088cbf93f87b7442e45d3
+ {{0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
+ // (ten2mx >> 128) = e12e13424bb40e132865a5f206b06fb9
+ {{0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
+ // (ten2mx >> 128) = b424dc35095cd80f538484c19ef38c94
+ {{0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
+ // (ten2mx >> 128) = 901d7cf73ab0acd90f9d37014bf60a10
+ {{0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
+ // (ten2mx >> 128) = e69594bec44de15b4c2ebe687989a9b3
+ {{0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
+ // (ten2mx >> 128) = b877aa3236a4b44909befeb9fad487c2
+ {{0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
+ // (ten2mx >> 128) = 9392ee8e921d5d073aff322e62439fcf
+ {{0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
+ // (ten2mx >> 128) = ec1e4a7db69561a52b31e9e3d06c32e5
+ {{0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
+ // (ten2mx >> 128) = bce5086492111aea88f4bb1ca6bcf584
+ {{0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
+ // (ten2mx >> 128) = 971da05074da7beed3f6fc16ebca5e03
+ {{0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
+ // (ten2mx >> 128) = f1c90080baf72cb15324c68b12dd6338
+ {{0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
+ // (ten2mx >> 128) = c16d9a0095928a2775b7053c0f178293
+ {{0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
+ // (ten2mx >> 128) = 9abe14cd44753b52c4926a9672793542
+ {{0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
+ // (ten2mx >> 128) = f79687aed3eec5513a83ddbd83f52204
+ {{0x95364afe032a819dULL, 0xc612062576589ddaULL}},
+ // (ten2mx >> 128) = c612062576589dda95364afe032a819d
+ {{0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
+ // (ten2mx >> 128) = 9e74d1b791e07e48775ea264cf55347d
+ {{0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
+ // (ten2mx >> 128) = fd87b5f28300ca0d8bca9d6e188853fc
+ {{0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
+ // (ten2mx >> 128) = cad2f7f5359a3b3e096ee45813a04330
+ {{0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
+ // (ten2mx >> 128) = a2425ff75e14fc31a1258379a94d028d
+ {{0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
+ // (ten2mx >> 128) = 81ceb32c4b43fcf480eacf948770ced7
+ {{0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
+ // (ten2mx >> 128) = cfb11ead453994ba67de18eda5814af2
+ {{0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
+ // (ten2mx >> 128) = a6274bbdd0fadd61ecb1ad8aeacdd58e
+ {{0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
+ // (ten2mx >> 128) = 84ec3c97da624ab4bd5af13bef0b113e
+ {{0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
+ // (ten2mx >> 128) = d4ad2dbfc3d07787955e4ec64b44e864
+ {{0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
+ // (ten2mx >> 128) = aa242499697392d2dde50bd1d5d0b9e9
+ {{0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}
+ // (ten2mx >> 128) = 881cea14545c75757e50d64177da2e54
+};
+
+UINT192 Kx192[] = {
+ {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
+ 0xccccccccccccccccULL}},
+ // 10^-1 ~= cccccccccccccccccccccccccccccccccccccccccccccccd * 2^-195
+ {{0xd70a3d70a3d70a3eULL, 0x3d70a3d70a3d70a3ULL,
+ 0xa3d70a3d70a3d70aULL}},
+ // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3e * 2^-198
+ {{0x78d4fdf3b645a1cbULL, 0x645a1cac083126e9ULL,
+ 0x83126e978d4fdf3bULL}},
+ // 10^-3 ~= 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cb * 2^-201
+ {{0xc154c985f06f6945ULL, 0xd3c36113404ea4a8ULL,
+ 0xd1b71758e219652bULL}},
+ // 10^-4 ~= d1b71758e219652bd3c36113404ea4a8c154c985f06f6945 * 2^-205
+ {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
+ 0xa7c5ac471b478423ULL}},
+ // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592104 * 2^-208
+ {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
+ 0x8637bd05af6c69b5ULL}},
+ // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a6a * 2^-211
+ {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
+ 0xd6bf94d5e57a42bcULL}},
+ // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3dc * 2^-215
+ {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
+ 0xabcc77118461cefcULL}},
+ // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697d * 2^-218
+ {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
+ 0x89705f4136b4a597ULL}},
+ // 10^-9 ~= 89705f4136b4a59731680a88f8953030fdd7645e011abaca * 2^-221
+ {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
+ 0xdbe6fecebdedd5beULL}},
+ // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912add * 2^-225
+ {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
+ 0xafebff0bcb24aafeULL}},
+ // 10^-11 ~= afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b1 * 2^-228
+ {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
+ 0x8cbccc096f5088cbULL}},
+ // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08e * 2^-231
+ {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
+ 0xe12e13424bb40e13ULL}},
+ // 10^-13 ~= e12e13424bb40e132865a5f206b06fb988f4c3923bf900e3 * 2^-235
+ {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
+ 0xb424dc35095cd80fULL}},
+ // 10^-14 ~= b424dc35095cd80f538484c19ef38c946d909c74fcc733e9 * 2^-238
+ {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
+ 0x901d7cf73ab0acd9ULL}},
+ // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f654 * 2^-241
+ {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
+ 0xe69594bec44de15bULL}},
+ // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b3bf716c1add27f086 * 2^-245
+ {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
+ 0xb877aa3236a4b449ULL}},
+ // 10^-17 ~= b877aa3236a4b44909befeb9fad487c2ff8df0157db98d38 * 2^-248
+ {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
+ 0x9392ee8e921d5d07ULL}},
+ // 10^-18 ~= 9392ee8e921d5d073aff322e62439fcf32d7f344649470fa * 2^-251
+ {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
+ 0xec1e4a7db69561a5ULL}},
+ // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f5 * 2^-255
+ {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
+ 0xbce5086492111aeaULL}},
+ // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf584181ea8059f76532b * 2^-258
+ {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
+ 0x971da05074da7beeULL}},
+ // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ef * 2^-261
+ {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
+ 0xf1c90080baf72cb1ULL}},
+ // 10^-22 ~= f1c90080baf72cb15324c68b12dd633870cb148213caa7e5 * 2^-265
+ {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL,
+ 0xc16d9a0095928a27ULL}},
+ // 10^-23 ~= c16d9a0095928a2775b7053c0f1782938d6f439b43088651 * 2^-268
+ {{0xd78c3615cf3a050dULL, 0xc4926a9672793542ULL,
+ 0x9abe14cd44753b52ULL}},
+ // 10^-24 ~= 9abe14cd44753b52c4926a9672793542d78c3615cf3a050d * 2^-271
+ {{0x8c1389bc7ec33b48ULL, 0x3a83ddbd83f52204ULL,
+ 0xf79687aed3eec551ULL}},
+ // 10^-25 ~= f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b48 * 2^-275
+ {{0x3cdc6e306568fc3aULL, 0x95364afe032a819dULL,
+ 0xc612062576589ddaULL}},
+ // 10^-26 ~= c612062576589dda95364afe032a819d3cdc6e306568fc3a * 2^-278
+ {{0xca49f1c05120c9c8ULL, 0x775ea264cf55347dULL,
+ 0x9e74d1b791e07e48ULL}},
+ // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c8 * 2^-281
+ {{0x76dcb60081ce0fa6ULL, 0x8bca9d6e188853fcULL,
+ 0xfd87b5f28300ca0dULL}},
+ // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa6 * 2^-285
+ {{0x5f16f80067d80c85ULL, 0x096ee45813a04330ULL,
+ 0xcad2f7f5359a3b3eULL}},
+ // 10^-29 ~= cad2f7f5359a3b3e096ee45813a043305f16f80067d80c85 * 2^-288
+ {{0x18df2ccd1fe00a04ULL, 0xa1258379a94d028dULL,
+ 0xa2425ff75e14fc31ULL}},
+ // 10^-30 ~= a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a04 * 2^-291
+ {{0x4718f0a419800803ULL, 0x80eacf948770ced7ULL,
+ 0x81ceb32c4b43fcf4ULL}},
+ // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced74718f0a419800803 * 2^-294
+ {{0x0b5b1aa028ccd99fULL, 0x67de18eda5814af2ULL,
+ 0xcfb11ead453994baULL}},
+ // 10^-32 ~= cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99f * 2^-298
+ {{0x6f7c154ced70ae19ULL, 0xecb1ad8aeacdd58eULL,
+ 0xa6274bbdd0fadd61ULL}},
+ // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae19 * 2^-301
+ {{0xbf967770bdf3be7aULL, 0xbd5af13bef0b113eULL,
+ 0x84ec3c97da624ab4ULL}},
+ // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be7a * 2^-304
+ {{0x65bd8be79652ca5dULL, 0x955e4ec64b44e864ULL,
+ 0xd4ad2dbfc3d07787ULL}},
+ // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5d * 2^-308
+ {{0xeafe098611dbd517ULL, 0xdde50bd1d5d0b9e9ULL,
+ 0xaa242499697392d2ULL}},
+ // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd517 * 2^-311
+ {{0xbbfe6e04db164413ULL, 0x7e50d64177da2e54ULL,
+ 0x881cea14545c7575ULL}},
+ // 10^-37 ~= 881cea14545c75757e50d64177da2e54bbfe6e04db164413 * 2^-314
+ {{0x2cca49a15e8a0684ULL, 0x96e7bd358c904a21ULL,
+ 0xd9c7dced53c72255ULL}},
+ // 10^-38 ~= d9c7dced53c7225596e7bd358c904a212cca49a15e8a0684 * 2^-318
+ {{0x8a3b6e1ab2080537ULL, 0xabec975e0a0d081aULL,
+ 0xae397d8aa96c1b77ULL}},
+ // 10^-39 ~= ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080537 * 2^-321
+ {{0x3b62be7bc1a0042cULL, 0x2323ac4b3b3da015ULL,
+ 0x8b61313bbabce2c6ULL}},
+ // 10^-40 ~= 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042c * 2^-324
+ {{0x5f0463f935ccd379ULL, 0x6b6c46dec52f6688ULL,
+ 0xdf01e85f912e37a3ULL}},
+ // 10^-41 ~= df01e85f912e37a36b6c46dec52f66885f0463f935ccd379 * 2^-328
+ {{0x7f36b660f7d70f94ULL, 0x55f038b237591ed3ULL,
+ 0xb267ed1940f1c61cULL}},
+ // 10^-42 ~= b267ed1940f1c61c55f038b237591ed37f36b660f7d70f94 * 2^-331
+ {{0xcc2bc51a5fdf3faaULL, 0x77f3608e92adb242ULL,
+ 0x8eb98a7a9a5b04e3ULL}},
+ // 10^-43 ~= 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3faa * 2^-334
+ {{0xe046082a32fecc42ULL, 0x8cb89a7db77c506aULL,
+ 0xe45c10c42a2b3b05ULL}},
+ // 10^-44 ~= e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc42 * 2^-338
+ {{0x4d04d354f598a368ULL, 0x3d607b97c5fd0d22ULL,
+ 0xb6b00d69bb55c8d1ULL}},
+ // 10^-45 ~= b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a368 * 2^-341
+ {{0x3d9d75dd9146e920ULL, 0xcab3961304ca70e8ULL,
+ 0x9226712162ab070dULL}},
+ // 10^-46 ~= 9226712162ab070dcab3961304ca70e83d9d75dd9146e920 * 2^-344
+ {{0xc8fbefc8e8717500ULL, 0xaab8f01e6e10b4a6ULL,
+ 0xe9d71b689dde71afULL}},
+ // 10^-47 ~= e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e8717500 * 2^-348
+ {{0x3a63263a538df734ULL, 0x5560c018580d5d52ULL,
+ 0xbb127c53b17ec159ULL}},
+ // 10^-48 ~= bb127c53b17ec1595560c018580d5d523a63263a538df734 * 2^-351
+ {{0x2eb5b82ea93e5f5dULL, 0xdde7001379a44aa8ULL,
+ 0x95a8637627989aadULL}},
+ // 10^-49 ~= 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5d * 2^-354
+ {{0x4abc59e441fd6561ULL, 0x963e66858f6d4440ULL,
+ 0xef73d256a5c0f77cULL}},
+ // 10^-50 ~= ef73d256a5c0f77c963e66858f6d44404abc59e441fd6561 * 2^-358
+ {{0x6efd14b69b311de7ULL, 0xde98520472bdd033ULL,
+ 0xbf8fdb78849a5f96ULL}},
+ // 10^-51 ~= bf8fdb78849a5f96de98520472bdd0336efd14b69b311de7 * 2^-361
+ {{0x259743c548f417ecULL, 0xe546a8038efe4029ULL,
+ 0x993fe2c6d07b7fabULL}},
+ // 10^-52 ~= 993fe2c6d07b7fabe546a8038efe4029259743c548f417ec * 2^-364
+ {{0x3c25393ba7ecf313ULL, 0xd53dd99f4b3066a8ULL,
+ 0xf53304714d9265dfULL}},
+ // 10^-53 ~= f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf313 * 2^-368
+ {{0x96842dc95323f5a9ULL, 0xaa97e14c3c26b886ULL,
+ 0xc428d05aa4751e4cULL}},
+ // 10^-54 ~= c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a9 * 2^-371
+ {{0xab9cf16ddc1cc487ULL, 0x55464dd69685606bULL,
+ 0x9ced737bb6c4183dULL}},
+ // 10^-55 ~= 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc487 * 2^-374
+ {{0xac2e4f162cfad40bULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
+ // 10^-56 ~= fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40b * 2^-378
+};
+
+unsigned int Ex192m192[] = {
+ 3, // 195 - 192, Ex = 195
+ 6, // 198 - 192, Ex = 198
+ 9, // 201 - 192, Ex = 201
+ 13, // 205 - 192, Ex = 205
+ 16, // 208 - 192, Ex = 208
+ 19, // 211 - 192, Ex = 211
+ 23, // 215 - 192, Ex = 215
+ 26, // 218 - 192, Ex = 218
+ 29, // 221 - 192, Ex = 221
+ 33, // 225 - 192, Ex = 225
+ 36, // 228 - 192, Ex = 228
+ 39, // 231 - 192, Ex = 231
+ 43, // 235 - 192, Ex = 235
+ 46, // 238 - 192, Ex = 238
+ 49, // 241 - 192, Ex = 241
+ 53, // 245 - 192, Ex = 245
+ 56, // 248 - 192, Ex = 248
+ 59, // 251 - 192, Ex = 251
+ 63, // 255 - 192, Ex = 255
+ 2, // 258 - 256, Ex = 258
+ 5, // 261 - 256, Ex = 261
+ 9, // 265 - 256, Ex = 265
+ 12, // 268 - 256, Ex = 268
+ 15, // 271 - 256, Ex = 271
+ 19, // 275 - 256, Ex = 275
+ 22, // 278 - 256, Ex = 278
+ 25, // 281 - 256, Ex = 281
+ 29, // 285 - 256, Ex = 285
+ 32, // 288 - 256, Ex = 288
+ 35, // 291 - 256, Ex = 291
+ 38, // 294 - 256, Ex = 294
+ 42, // 298 - 256, Ex = 298
+ 45, // 301 - 256, Ex = 301
+ 48, // 304 - 256, Ex = 304
+ 52, // 308 - 256, Ex = 308
+ 55, // 311 - 256, Ex = 311
+ 58, // 314 - 256, Ex = 314
+ 62, // 318 - 256, Ex = 318
+ 1, // 321 - 320, Ex = 321
+ 4, // 324 - 320, Ex = 324
+ 8, // 328 - 320, Ex = 328
+ 11, // 331 - 320, Ex = 331
+ 14, // 334 - 320, Ex = 334
+ 18, // 338 - 320, Ex = 338
+ 21, // 341 - 320, Ex = 341
+ 24, // 344 - 320, Ex = 344
+ 28, // 348 - 320, Ex = 348
+ 31, // 351 - 320, Ex = 351
+ 34, // 354 - 320, Ex = 354
+ 38, // 358 - 320, Ex = 358
+ 41, // 361 - 320, Ex = 361
+ 44, // 364 - 320, Ex = 364
+ 48, // 368 - 320, Ex = 368
+ 51, // 371 - 320, Ex = 371
+ 54, // 374 - 320, Ex = 374
+ 58 // 378 - 320, Ex = 378
+};
+
+UINT64 half192[] = {
+ 0x0000000000000004ULL, // half / 2^192 = 4
+ 0x0000000000000020ULL, // half / 2^192 = 20
+ 0x0000000000000100ULL, // half / 2^192 = 100
+ 0x0000000000001000ULL, // half / 2^192 = 1000
+ 0x0000000000008000ULL, // half / 2^192 = 8000
+ 0x0000000000040000ULL, // half / 2^192 = 40000
+ 0x0000000000400000ULL, // half / 2^192 = 400000
+ 0x0000000002000000ULL, // half / 2^192 = 2000000
+ 0x0000000010000000ULL, // half / 2^192 = 10000000
+ 0x0000000100000000ULL, // half / 2^192 = 100000000
+ 0x0000000800000000ULL, // half / 2^192 = 800000000
+ 0x0000004000000000ULL, // half / 2^192 = 4000000000
+ 0x0000040000000000ULL, // half / 2^192 = 40000000000
+ 0x0000200000000000ULL, // half / 2^192 = 200000000000
+ 0x0001000000000000ULL, // half / 2^192 = 1000000000000
+ 0x0010000000000000ULL, // half / 2^192 = 10000000000000
+ 0x0080000000000000ULL, // half / 2^192 = 80000000000000
+ 0x0400000000000000ULL, // half / 2^192 = 400000000000000
+ 0x4000000000000000ULL, // half / 2^192 = 4000000000000000
+ 0x0000000000000002ULL, // half / 2^256 = 2
+ 0x0000000000000010ULL, // half / 2^256 = 10
+ 0x0000000000000100ULL, // half / 2^256 = 100
+ 0x0000000000000800ULL, // half / 2^256 = 800
+ 0x0000000000004000ULL, // half / 2^256 = 4000
+ 0x0000000000040000ULL, // half / 2^256 = 40000
+ 0x0000000000200000ULL, // half / 2^256 = 200000
+ 0x0000000001000000ULL, // half / 2^256 = 1000000
+ 0x0000000010000000ULL, // half / 2^256 = 10000000
+ 0x0000000080000000ULL, // half / 2^256 = 80000000
+ 0x0000000400000000ULL, // half / 2^256 = 400000000
+ 0x0000002000000000ULL, // half / 2^256 = 2000000000
+ 0x0000020000000000ULL, // half / 2^256 = 20000000000
+ 0x0000100000000000ULL, // half / 2^256 = 100000000000
+ 0x0000800000000000ULL, // half / 2^256 = 800000000000
+ 0x0008000000000000ULL, // half / 2^256 = 8000000000000
+ 0x0040000000000000ULL, // half / 2^256 = 40000000000000
+ 0x0200000000000000ULL, // half / 2^256 = 200000000000000
+ 0x2000000000000000ULL, // half / 2^256 = 2000000000000000
+ 0x0000000000000001ULL, // half / 2^320 = 1
+ 0x0000000000000008ULL, // half / 2^320 = 8
+ 0x0000000000000080ULL, // half / 2^320 = 80
+ 0x0000000000000400ULL, // half / 2^320 = 400
+ 0x0000000000002000ULL, // half / 2^320 = 2000
+ 0x0000000000020000ULL, // half / 2^320 = 20000
+ 0x0000000000100000ULL, // half / 2^320 = 100000
+ 0x0000000000800000ULL, // half / 2^320 = 800000
+ 0x0000000008000000ULL, // half / 2^320 = 8000000
+ 0x0000000040000000ULL, // half / 2^320 = 40000000
+ 0x0000000200000000ULL, // half / 2^320 = 200000000
+ 0x0000002000000000ULL, // half / 2^320 = 2000000000
+ 0x0000010000000000ULL, // half / 2^320 = 10000000000
+ 0x0000080000000000ULL, // half / 2^320 = 80000000000
+ 0x0000800000000000ULL, // half / 2^320 = 800000000000
+ 0x0004000000000000ULL, // half / 2^320 = 4000000000000
+ 0x0020000000000000ULL, // half / 2^320 = 20000000000000
+ 0x0200000000000000ULL // half / 2^320 = 200000000000000
+};
+
+UINT64 mask192[] = {
+ 0x0000000000000007ULL, // mask / 2^192
+ 0x000000000000003fULL, // mask / 2^192
+ 0x00000000000001ffULL, // mask / 2^192
+ 0x0000000000001fffULL, // mask / 2^192
+ 0x000000000000ffffULL, // mask / 2^192
+ 0x000000000007ffffULL, // mask / 2^192
+ 0x00000000007fffffULL, // mask / 2^192
+ 0x0000000003ffffffULL, // mask / 2^192
+ 0x000000001fffffffULL, // mask / 2^192
+ 0x00000001ffffffffULL, // mask / 2^192
+ 0x0000000fffffffffULL, // mask / 2^192
+ 0x0000007fffffffffULL, // mask / 2^192
+ 0x000007ffffffffffULL, // mask / 2^192
+ 0x00003fffffffffffULL, // mask / 2^192
+ 0x0001ffffffffffffULL, // mask / 2^192
+ 0x001fffffffffffffULL, // mask / 2^192
+ 0x00ffffffffffffffULL, // mask / 2^192
+ 0x07ffffffffffffffULL, // mask / 2^192
+ 0x7fffffffffffffffULL, // mask / 2^192
+ 0x0000000000000003ULL, // mask / 2^256
+ 0x000000000000001fULL, // mask / 2^256
+ 0x00000000000001ffULL, // mask / 2^256
+ 0x0000000000000fffULL, // mask / 2^256
+ 0x0000000000007fffULL, // mask / 2^256
+ 0x000000000007ffffULL, // mask / 2^256
+ 0x00000000003fffffULL, // mask / 2^256
+ 0x0000000001ffffffULL, // mask / 2^256
+ 0x000000001fffffffULL, // mask / 2^256
+ 0x00000000ffffffffULL, // mask / 2^256
+ 0x00000007ffffffffULL, // mask / 2^256
+ 0x0000003fffffffffULL, // mask / 2^256
+ 0x000003ffffffffffULL, // mask / 2^256
+ 0x00001fffffffffffULL, // mask / 2^256
+ 0x0000ffffffffffffULL, // mask / 2^256
+ 0x000fffffffffffffULL, // mask / 2^256
+ 0x007fffffffffffffULL, // mask / 2^256
+ 0x03ffffffffffffffULL, // mask / 2^256
+ 0x3fffffffffffffffULL, // mask / 2^256
+ 0x0000000000000001ULL, // mask / 2^320
+ 0x000000000000000fULL, // mask / 2^320
+ 0x00000000000000ffULL, // mask / 2^320
+ 0x00000000000007ffULL, // mask / 2^320
+ 0x0000000000003fffULL, // mask / 2^320
+ 0x000000000003ffffULL, // mask / 2^320
+ 0x00000000001fffffULL, // mask / 2^320
+ 0x0000000000ffffffULL, // mask / 2^320
+ 0x000000000fffffffULL, // mask / 2^320
+ 0x000000007fffffffULL, // mask / 2^320
+ 0x00000003ffffffffULL, // mask / 2^320
+ 0x0000003fffffffffULL, // mask / 2^320
+ 0x000001ffffffffffULL, // mask / 2^320
+ 0x00000fffffffffffULL, // mask / 2^320
+ 0x0000ffffffffffffULL, // mask / 2^320
+ 0x0007ffffffffffffULL, // mask / 2^320
+ 0x003fffffffffffffULL, // mask / 2^320
+ 0x03ffffffffffffffULL // mask / 2^320
+};
+
+UINT192 ten2mxtrunc192[] = {
+ {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
+ 0xccccccccccccccccULL}},
+ // (ten2mx >> 192) = cccccccccccccccccccccccccccccccccccccccccccccccc
+ {{0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL,
+ 0xa3d70a3d70a3d70aULL}},
+ // (ten2mx >> 192) = a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d
+ {{0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL,
+ 0x83126e978d4fdf3bULL}},
+ // (ten2mx >> 192) = 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1ca
+ {{0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL,
+ 0xd1b71758e219652bULL}},
+ // (ten2mx >> 192) = d1b71758e219652bd3c36113404ea4a8c154c985f06f6944
+ {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
+ 0xa7c5ac471b478423ULL}},
+ // (ten2mx >> 192) = a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592103
+ {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
+ 0x8637bd05af6c69b5ULL}},
+ // (ten2mx >> 192) = 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a69
+ {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
+ 0xd6bf94d5e57a42bcULL}},
+ // (ten2mx >> 192) = d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3db
+ {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
+ 0xabcc77118461cefcULL}},
+ // (ten2mx >> 192) = abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697c
+ {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
+ 0x89705f4136b4a597ULL}},
+ // (ten2mx >> 192) = 89705f4136b4a59731680a88f8953030fdd7645e011abac9
+ {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
+ 0xdbe6fecebdedd5beULL}},
+ // (ten2mx >> 192) = dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912adc
+ {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
+ 0xafebff0bcb24aafeULL}},
+ // (ten2mx >> 192) = afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b0
+ {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
+ 0x8cbccc096f5088cbULL}},
+ // (ten2mx >> 192) = 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08d
+ {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
+ 0xe12e13424bb40e13ULL}},
+ // (ten2mx >> 192) = e12e13424bb40e132865a5f206b06fb988f4c3923bf900e2
+ {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
+ 0xb424dc35095cd80fULL}},
+ // (ten2mx >> 192) = b424dc35095cd80f538484c19ef38c946d909c74fcc733e8
+ {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
+ 0x901d7cf73ab0acd9ULL}},
+ // (ten2mx >> 192) = 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f653
+ {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
+ 0xe69594bec44de15bULL}},
+ // (ten2mx >> 192) = e69594bec44de15b4c2ebe687989a9b3bf716c1add27f085
+ {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
+ 0xb877aa3236a4b449ULL}},
+ // (ten2mx >> 192) = b877aa3236a4b44909befeb9fad487c2ff8df0157db98d37
+ {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
+ 0x9392ee8e921d5d07ULL}},
+ // (ten2mx >> 192) = 9392ee8e921d5d073aff322e62439fcf32d7f344649470f9
+ {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
+ 0xec1e4a7db69561a5ULL}},
+ // (ten2mx >> 192) = ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f4
+ {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
+ 0xbce5086492111aeaULL}},
+ // (ten2mx >> 192) = bce5086492111aea88f4bb1ca6bcf584181ea8059f76532a
+ {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
+ 0x971da05074da7beeULL}},
+ // (ten2mx >> 192) = 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ee
+ {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
+ 0xf1c90080baf72cb1ULL}},
+ // (ten2mx >> 192) = f1c90080baf72cb15324c68b12dd633870cb148213caa7e4
+ {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL,
+ 0xc16d9a0095928a27ULL}},
+ // (ten2mx >> 192) = c16d9a0095928a2775b7053c0f1782938d6f439b43088650
+ {{0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL,
+ 0x9abe14cd44753b52ULL}},
+ // (ten2mx >> 192) = 9abe14cd44753b52c4926a9672793542d78c3615cf3a050c
+ {{0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL,
+ 0xf79687aed3eec551ULL}},
+ // (ten2mx >> 192) = f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b47
+ {{0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL,
+ 0xc612062576589ddaULL}},
+ // (ten2mx >> 192) = c612062576589dda95364afe032a819d3cdc6e306568fc39
+ {{0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL,
+ 0x9e74d1b791e07e48ULL}},
+ // (ten2mx >> 192) = 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c7
+ {{0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL,
+ 0xfd87b5f28300ca0dULL}},
+ // (ten2mx >> 192) = fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa5
+ {{0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL,
+ 0xcad2f7f5359a3b3eULL}},
+ // (ten2mx >> 192) = cad2f7f5359a3b3e096ee45813a043305f16f80067d80c84
+ {{0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL,
+ 0xa2425ff75e14fc31ULL}},
+ // (ten2mx >> 192) = a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a03
+ {{0x4718f0a419800802ULL, 0x80eacf948770ced7ULL,
+ 0x81ceb32c4b43fcf4ULL}},
+ // (ten2mx >> 192) = 81ceb32c4b43fcf480eacf948770ced74718f0a419800802
+ {{0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL,
+ 0xcfb11ead453994baULL}},
+ // (ten2mx >> 192) = cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99e
+ {{0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL,
+ 0xa6274bbdd0fadd61ULL}},
+ // (ten2mx >> 192) = a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae18
+ {{0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL,
+ 0x84ec3c97da624ab4ULL}},
+ // (ten2mx >> 192) = 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be79
+ {{0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL,
+ 0xd4ad2dbfc3d07787ULL}},
+ // (ten2mx >> 192) = d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5c
+ {{0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL,
+ 0xaa242499697392d2ULL}},
+ // (ten2mx >> 192) = aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd516
+ {{0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL,
+ 0x881cea14545c7575ULL}},
+ // (ten2mx >> 192) = 881cea14545c75757e50d64177da2e54bbfe6e04db164412
+ {{0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL,
+ 0xd9c7dced53c72255ULL}},
+ // (ten2mx >> 192) = d9c7dced53c7225596e7bd358c904a212cca49a15e8a0683
+ {{0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL,
+ 0xae397d8aa96c1b77ULL}},
+ // (ten2mx >> 192) = ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080536
+ {{0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL,
+ 0x8b61313bbabce2c6ULL}},
+ // (ten2mx >> 192) = 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042b
+ {{0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL,
+ 0xdf01e85f912e37a3ULL}},
+ // (ten2mx >> 192) = df01e85f912e37a36b6c46dec52f66885f0463f935ccd378
+ {{0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL,
+ 0xb267ed1940f1c61cULL}},
+ // (ten2mx >> 192) = b267ed1940f1c61c55f038b237591ed37f36b660f7d70f93
+ {{0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL,
+ 0x8eb98a7a9a5b04e3ULL}},
+ // (ten2mx >> 192) = 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3fa9
+ {{0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL,
+ 0xe45c10c42a2b3b05ULL}},
+ // (ten2mx >> 192) = e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc41
+ {{0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL,
+ 0xb6b00d69bb55c8d1ULL}},
+ // (ten2mx >> 192) = b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a367
+ {{0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL,
+ 0x9226712162ab070dULL}},
+ // (ten2mx >> 192) = 9226712162ab070dcab3961304ca70e83d9d75dd9146e91f
+ {{0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL,
+ 0xe9d71b689dde71afULL}},
+ // (ten2mx >> 192) = e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e87174ff
+ {{0x3a63263a538df733ULL, 0x5560c018580d5d52ULL,
+ 0xbb127c53b17ec159ULL}},
+ // (ten2mx >> 192) = bb127c53b17ec1595560c018580d5d523a63263a538df733
+ {{0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL,
+ 0x95a8637627989aadULL}},
+ // (ten2mx >> 192) = 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5c
+ {{0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL,
+ 0xef73d256a5c0f77cULL}},
+ // (ten2mx >> 192) = ef73d256a5c0f77c963e66858f6d44404abc59e441fd6560
+ {{0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL,
+ 0xbf8fdb78849a5f96ULL}},
+ // (ten2mx >> 192) = bf8fdb78849a5f96de98520472bdd0336efd14b69b311de6
+ {{0x259743c548f417ebULL, 0xe546a8038efe4029ULL,
+ 0x993fe2c6d07b7fabULL}},
+ // (ten2mx >> 192) = 993fe2c6d07b7fabe546a8038efe4029259743c548f417eb
+ {{0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL,
+ 0xf53304714d9265dfULL}},
+ // (ten2mx >> 192) = f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf312
+ {{0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL,
+ 0xc428d05aa4751e4cULL}},
+ // (ten2mx >> 192) = c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a8
+ {{0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL,
+ 0x9ced737bb6c4183dULL}},
+ // (ten2mx >> 192) = 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc486
+ {{0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
+ // (ten2mx >> 192) = fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40a
+};
+
+UINT256 Kx256[] = {
+ {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
+ 0xccccccccccccccccULL, 0xccccccccccccccccULL}},
+ // 10^-1 ~= cccccccccccccccc cccccccccccccccc
+ // cccccccccccccccccccccccccccccccd * 2^-259
+ {{0x70a3d70a3d70a3d8ULL, 0xd70a3d70a3d70a3dULL,
+ 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
+ // 10^-2 ~= a3d70a3d70a3d70a 3d70a3d70a3d70a3
+ // d70a3d70a3d70a3d70a3d70a3d70a3d8 * 2^-262
+ {{0xc083126e978d4fe0ULL, 0x78d4fdf3b645a1caULL,
+ 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
+ // 10^-3 ~= 83126e978d4fdf3b 645a1cac083126e9
+ // 78d4fdf3b645a1cac083126e978d4fe0 * 2^-265
+ {{0x67381d7dbf487fccULL, 0xc154c985f06f6944ULL,
+ 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
+ // 10^-4 ~= d1b71758e219652b d3c36113404ea4a8
+ // c154c985f06f694467381d7dbf487fcc * 2^-269
+ {{0x85c67dfe32a0663dULL, 0xcddd6e04c0592103ULL,
+ 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
+ // 10^-5 ~= a7c5ac471b478423 fcf80dc33721d53
+ // cddd6e04c059210385c67dfe32a0663d * 2^-272
+ {{0x37d1fe64f54d1e97ULL, 0xd7e45803cd141a69ULL,
+ 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
+ // 10^-6 ~= 8637bd05af6c69b5 a63f9a49c2c1b10f
+ // d7e45803cd141a6937d1fe64f54d1e97 * 2^-275
+ {{0x8c8330a1887b6425ULL, 0x8ca08cd2e1b9c3dbULL,
+ 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
+ // 10^-7 ~= d6bf94d5e57a42bc 3d32907604691b4c
+ // 8ca08cd2e1b9c3db8c8330a1887b6425 * 2^-279
+ {{0x7068f3b46d2f8351ULL, 0x3d4d3d758161697cULL,
+ 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
+ // 10^-8 ~= abcc77118461cefc fdc20d2b36ba7c3d
+ // 3d4d3d758161697c7068f3b46d2f8351 * 2^-282
+ {{0xf387295d242602a7ULL, 0xfdd7645e011abac9ULL,
+ 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
+ // 10^-9 ~= 89705f4136b4a597 31680a88f8953030
+ // fdd7645e011abac9f387295d242602a7 * 2^-285
+ {{0xb8d8422ea03cd10bULL, 0x2fbf06fcce912adcULL,
+ 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
+ // 10^-10 ~= dbe6fecebdedd5be b573440e5a884d1b
+ // 2fbf06fcce912adcb8d8422ea03cd10b * 2^-289
+ {{0x93e034f219ca40d6ULL, 0xf2ff38ca3eda88b0ULL,
+ 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
+ // 10^-11 ~= afebff0bcb24aafe f78f69a51539d748
+ // f2ff38ca3eda88b093e034f219ca40d6 * 2^-292
+ {{0x4319c3f4e16e9a45ULL, 0xf598fa3b657ba08dULL,
+ 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
+ // 10^-12 ~= 8cbccc096f5088cb f93f87b7442e45d3
+ // f598fa3b657ba08d4319c3f4e16e9a45 * 2^-295
+ {{0x04f606549be42a07ULL, 0x88f4c3923bf900e2ULL,
+ 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
+ // 10^-13 ~= e12e13424bb40e13 2865a5f206b06fb9
+ // 88f4c3923bf900e204f606549be42a07 * 2^-299
+ {{0x03f805107cb68806ULL, 0x6d909c74fcc733e8ULL,
+ 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
+ // 10^-14 ~= b424dc35095cd80f 538484c19ef38c94
+ // 6d909c74fcc733e803f805107cb68806 * 2^-302
+ {{0x3660040d3092066bULL, 0x57a6e390ca38f653ULL,
+ 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
+ // 10^-15 ~= 901d7cf73ab0acd9 f9d37014bf60a10
+ // 57a6e390ca38f6533660040d3092066b * 2^-305
+ {{0x23ccd3484db670abULL, 0xbf716c1add27f085ULL,
+ 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
+ // 10^-16 ~= e69594bec44de15b 4c2ebe687989a9b3
+ // bf716c1add27f08523ccd3484db670ab * 2^-309
+ {{0x4fd70f6d0af85a23ULL, 0xff8df0157db98d37ULL,
+ 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
+ // 10^-17 ~= b877aa3236a4b449 9befeb9fad487c2
+ // ff8df0157db98d374fd70f6d0af85a23 * 2^-312
+ {{0x0cac0c573bf9e1b6ULL, 0x32d7f344649470f9ULL,
+ 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
+ // 10^-18 ~= 9392ee8e921d5d07 3aff322e62439fcf
+ // 32d7f344649470f90cac0c573bf9e1b6 * 2^-315
+ {{0xe11346f1f98fcf89ULL, 0x1e2652070753e7f4ULL,
+ 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
+ // 10^-19 ~= ec1e4a7db69561a5 2b31e9e3d06c32e5
+ // 1e2652070753e7f4e11346f1f98fcf89 * 2^-319
+ {{0x4da9058e613fd93aULL, 0x181ea8059f76532aULL,
+ 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
+ // 10^-20 ~= bce5086492111aea 88f4bb1ca6bcf584
+ // 181ea8059f76532a4da9058e613fd93a * 2^-322
+ {{0xa48737a51a997a95ULL, 0x467eecd14c5ea8eeULL,
+ 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
+ // 10^-21 ~= 971da05074da7bee d3f6fc16ebca5e03
+ // 467eecd14c5ea8eea48737a51a997a95 * 2^-325
+ {{0x3a71f2a1c428c421ULL, 0x70cb148213caa7e4ULL,
+ 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
+ // 10^-22 ~= f1c90080baf72cb1 5324c68b12dd6338
+ // 70cb148213caa7e43a71f2a1c428c421 * 2^-329
+ {{0x2ec18ee7d0209ce8ULL, 0x8d6f439b43088650ULL,
+ 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
+ // 10^-23 ~= c16d9a0095928a27 75b7053c0f178293
+ // 8d6f439b430886502ec18ee7d0209ce8 * 2^-332
+ {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
+ 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
+ // 10^-24 ~= 9abe14cd44753b52 c4926a9672793542
+ // d78c3615cf3a050cf23472530ce6e3ed * 2^-335
+ {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
+ 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
+ // 10^-25 ~= f79687aed3eec551 3a83ddbd83f52204
+ // 8c1389bc7ec33b47e9ed83b814a49fe1 * 2^-339
+ {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
+ 0x95364afe032a819dULL, 0xc612062576589ddaULL}},
+ // 10^-26 ~= c612062576589dda 95364afe032a819d
+ // 3cdc6e306568fc3987f1362cdd507fe7 * 2^-342
+ {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
+ 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
+ // 10^-27 ~= 9e74d1b791e07e48 775ea264cf55347d
+ // ca49f1c05120c9c79ff42b5717739986 * 2^-345
+ {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
+ 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
+ // 10^-28 ~= fd87b5f28300ca0d 8bca9d6e188853fc
+ // 76dcb60081ce0fa5ccb9def1bf1f5c09 * 2^-349
+ {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
+ 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
+ // 10^-29 ~= cad2f7f5359a3b3e 96ee45813a04330
+ // 5f16f80067d80c84a3c7e58e327f7cd4 * 2^-352
+ {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
+ 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
+ // 10^-30 ~= a2425ff75e14fc31 a1258379a94d028d
+ // 18df2ccd1fe00a03b6398471c1ff9710 * 2^-355
+ {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
+ 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
+ // 10^-31 ~= 81ceb32c4b43fcf4 80eacf948770ced7
+ // 4718f0a419800802f82e038e34cc78da * 2^-358
+ {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
+ 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
+ // 10^-32 ~= cfb11ead453994ba 67de18eda5814af2
+ // b5b1aa028ccd99e59e338e387ad8e29 * 2^-362
+ {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
+ 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
+ // 10^-33 ~= a6274bbdd0fadd61 ecb1ad8aeacdd58e
+ // 6f7c154ced70ae1847e8fa4f9fbe0b54 * 2^-365
+ {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
+ 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
+ // 10^-34 ~= 84ec3c97da624ab4 bd5af13bef0b113e
+ // bf967770bdf3be79d320c83fb2fe6f76 * 2^-368
+ {{0x85014065eb30b257ULL, 0x65bd8be79652ca5cULL,
+ 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
+ // 10^-35 ~= d4ad2dbfc3d07787 955e4ec64b44e864
+ // 65bd8be79652ca5c85014065eb30b257 * 2^-372
+ {{0xd0cdcd1e55c08eacULL, 0xeafe098611dbd516ULL,
+ 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
+ // 10^-36 ~= aa242499697392d2 dde50bd1d5d0b9e9
+ // eafe098611dbd516d0cdcd1e55c08eac * 2^-375
+ {{0x40a4a418449a0bbdULL, 0xbbfe6e04db164412ULL,
+ 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
+ // 10^-37 ~= 881cea14545c7575 7e50d64177da2e54
+ // bbfe6e04db16441240a4a418449a0bbd * 2^-378
+ {{0x9aa1068d3a9012c8ULL, 0x2cca49a15e8a0683ULL,
+ 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
+ // 10^-38 ~= d9c7dced53c72255 96e7bd358c904a21
+ // 2cca49a15e8a06839aa1068d3a9012c8 * 2^-382
+ {{0x154d9ed7620cdbd3ULL, 0x8a3b6e1ab2080536ULL,
+ 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
+ // 10^-39 ~= ae397d8aa96c1b77 abec975e0a0d081a
+ // 8a3b6e1ab2080536154d9ed7620cdbd3 * 2^-385
+ {{0x443e18ac4e70afdcULL, 0x3b62be7bc1a0042bULL,
+ 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
+ // 10^-40 ~= 8b61313bbabce2c6 2323ac4b3b3da015
+ // 3b62be7bc1a0042b443e18ac4e70afdc * 2^-388
+ {{0x6d30277a171ab2f9ULL, 0x5f0463f935ccd378ULL,
+ 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
+ // 10^-41 ~= df01e85f912e37a3 6b6c46dec52f6688
+ // 5f0463f935ccd3786d30277a171ab2f9 * 2^-392
+ {{0x8a8cec61ac155bfbULL, 0x7f36b660f7d70f93ULL,
+ 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
+ // 10^-42 ~= b267ed1940f1c61c 55f038b237591ed3
+ // 7f36b660f7d70f938a8cec61ac155bfb * 2^-395
+ {{0x3ba3f04e23444996ULL, 0xcc2bc51a5fdf3fa9ULL,
+ 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
+ // 10^-43 ~= 8eb98a7a9a5b04e3 77f3608e92adb242
+ // cc2bc51a5fdf3fa93ba3f04e23444996 * 2^-398
+ {{0xf9064d49d206dc22ULL, 0xe046082a32fecc41ULL,
+ 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
+ // 10^-44 ~= e45c10c42a2b3b05 8cb89a7db77c506a
+ // e046082a32fecc41f9064d49d206dc22 * 2^-402
+ {{0xfa6b7107db38b01bULL, 0x4d04d354f598a367ULL,
+ 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
+ // 10^-45 ~= b6b00d69bb55c8d1 3d607b97c5fd0d22
+ // 4d04d354f598a367fa6b7107db38b01b * 2^-405
+ {{0xfb8927397c2d59b0ULL, 0x3d9d75dd9146e91fULL,
+ 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
+ // 10^-46 ~= 9226712162ab070d cab3961304ca70e8
+ // 3d9d75dd9146e91ffb8927397c2d59b0 * 2^-408
+ {{0xf8db71f5937bc2b2ULL, 0xc8fbefc8e87174ffULL,
+ 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
+ // 10^-47 ~= e9d71b689dde71af aab8f01e6e10b4a6
+ // c8fbefc8e87174fff8db71f5937bc2b2 * 2^-412
+ {{0x2d7c5b2adc630228ULL, 0x3a63263a538df733ULL,
+ 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
+ // 10^-48 ~= bb127c53b17ec159 5560c018580d5d52
+ // 3a63263a538df7332d7c5b2adc630228 * 2^-415
+ {{0x24637c2249e8ce87ULL, 0x2eb5b82ea93e5f5cULL,
+ 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
+ // 10^-49 ~= 95a8637627989aad dde7001379a44aa8
+ // 2eb5b82ea93e5f5c24637c2249e8ce87 * 2^-418
+ {{0x3a38c69d430e173eULL, 0x4abc59e441fd6560ULL,
+ 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
+ // 10^-50 ~= ef73d256a5c0f77c 963e66858f6d4440
+ // 4abc59e441fd65603a38c69d430e173e * 2^-422
+ {{0x94fa387dcf3e78feULL, 0x6efd14b69b311de6ULL,
+ 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
+ // 10^-51 ~= bf8fdb78849a5f96 de98520472bdd033
+ // 6efd14b69b311de694fa387dcf3e78fe * 2^-425
+ {{0xaa61c6cb0c31fa65ULL, 0x259743c548f417ebULL,
+ 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
+ // 10^-52 ~= 993fe2c6d07b7fab e546a8038efe4029
+ // 259743c548f417ebaa61c6cb0c31fa65 * 2^-428
+ {{0xaa360ade79e990a2ULL, 0x3c25393ba7ecf312ULL,
+ 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
+ // 10^-53 ~= f53304714d9265df d53dd99f4b3066a8
+ // 3c25393ba7ecf312aa360ade79e990a2 * 2^-432
+ {{0x882b3be52e5473b5ULL, 0x96842dc95323f5a8ULL,
+ 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
+ // 10^-54 ~= c428d05aa4751e4c aa97e14c3c26b886
+ // 96842dc95323f5a8882b3be52e5473b5 * 2^-435
+ {{0xd355c98425105c91ULL, 0xab9cf16ddc1cc486ULL,
+ 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
+ // 10^-55 ~= 9ced737bb6c4183d 55464dd69685606b
+ // ab9cf16ddc1cc486d355c98425105c91 * 2^-438
+ {{0xebbc75a03b4d60e7ULL, 0xac2e4f162cfad40aULL,
+ 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
+ // 10^-56 ~= fb158592be068d2e eed6e2f0f0d56712
+ // ac2e4f162cfad40aebbc75a03b4d60e7 * 2^-442
+ {{0x8963914cfc3de71fULL, 0x568b727823fbdcd5ULL,
+ 0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
+ // 10^-57 ~= c8de047564d20a8b f245825a5a445275
+ // 568b727823fbdcd58963914cfc3de71f * 2^-445
+ {{0xd44fa770c9cb1f4cULL, 0x453c5b934ffcb0aaULL,
+ 0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
+ // 10^-58 ~= a0b19d2ab70e6ed6 5b6aceaeae9d0ec4
+ // 453c5b934ffcb0aad44fa770c9cb1f4c * 2^-448
+ {{0xdd0c85f3d4a27f70ULL, 0x37637c75d996f3bbULL,
+ 0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
+ // 10^-59 ~= 808e17555f3ebf11 e2bbd88bbee40bd0
+ // 37637c75d996f3bbdd0c85f3d4a27f70 * 2^-451
+ {{0x61ada31fba9d98b3ULL, 0x256bfa5628f185f9ULL,
+ 0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
+ // 10^-60 ~= cdb02555653131b6 3792f412cb06794d
+ // 256bfa5628f185f961ada31fba9d98b3 * 2^-455
+ {{0xe7be1c196217ad5cULL, 0x51232eab53f46b2dULL,
+ 0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
+ // 10^-61 ~= a48ceaaab75a8e2b 5fa8c3423c052dd7
+ // 51232eab53f46b2de7be1c196217ad5c * 2^-458
+ {{0x52fe7ce11b46244aULL, 0x40e8f222a99055beULL,
+ 0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
+ // 10^-62 ~= 83a3eeeef9153e89 1953cf68300424ac
+ // 40e8f222a99055be52fe7ce11b46244a * 2^-461
+ {{0x51972e34f8703a10ULL, 0x34a7e9d10f4d55fdULL,
+ 0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
+ // 10^-63 ~= d29fe4b18e88640e 8eec7f0d19a03aad
+ // 34a7e9d10f4d55fd51972e34f8703a10 * 2^-465
+ {{0x0e128b5d938cfb40ULL, 0x2a1fee40d90aab31ULL,
+ 0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
+ // 10^-64 ~= a87fea27a539e9a5 3f2398d747b36224
+ // 2a1fee40d90aab310e128b5d938cfb40 * 2^-468
+ {{0x3e753c4adc70c900ULL, 0xbb4cbe9a473bbc27ULL,
+ 0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
+ // 10^-65 ~= 86ccbb52ea94baea 98e947129fc2b4e9
+ // bb4cbe9a473bbc273e753c4adc70c900 * 2^-471
+ {{0x30bb93aafa4e0e66ULL, 0x9214642a0b92c6a5ULL,
+ 0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
+ // 10^-66 ~= d7adf884aa879177 5b0ed81dcc6abb0f
+ // 9214642a0b92c6a530bb93aafa4e0e66 * 2^-475
+ {{0xc0960fbbfb71a51fULL, 0xa8105021a2dbd21dULL,
+ 0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
+ // 10^-67 ~= ac8b2d36eed2dac5 e272467e3d222f3f
+ // a8105021a2dbd21dc0960fbbfb71a51f * 2^-478
+ {{0x66de72fcc927b74cULL, 0xb9a6a6814f1641b1ULL,
+ 0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
+ // 10^-68 ~= 8a08f0f8bf0f156b 1b8e9ecb641b58ff
+ // b9a6a6814f1641b166de72fcc927b74c * 2^-481
+ {{0xd7ca5194750c5879ULL, 0xf5d770cee4f0691bULL,
+ 0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
+ // 10^-69 ~= dcdb1b2798182244 f8e431456cf88e65
+ // f5d770cee4f0691bd7ca5194750c5879 * 2^-485
+ {{0xdfd50e105da379faULL, 0x9179270bea59edafULL,
+ 0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
+ // 10^-70 ~= b0af48ec79ace837 2d835a9df0c6d851
+ // 9179270bea59edafdfd50e105da379fa * 2^-488
+ {{0x19773e737e1c6195ULL, 0x0dfa85a321e18af3ULL,
+ 0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
+ // 10^-71 ~= 8d590723948a535f 579c487e5a38ad0e
+ // dfa85a321e18af319773e737e1c6195 * 2^-491
+ {{0xf58b971f302d68efULL, 0x165da29e9c9c1184ULL,
+ 0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
+ // 10^-72 ~= e2280b6c20dd5232 25c6da63c38de1b0
+ // 165da29e9c9c1184f58b971f302d68ef * 2^-495
+ {{0xc46fac18f3578725ULL, 0x4517b54bb07cdad0ULL,
+ 0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
+ // 10^-73 ~= b4ecd5f01a4aa828 1e38aeb6360b1af3
+ // 4517b54bb07cdad0c46fac18f3578725 * 2^-498
+ {{0x36bfbce0c2ac6c1eULL, 0x9dac910959fd7bdaULL,
+ 0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
+ // 10^-74 ~= 90bd77f3483bb9b9 b1c6f22b5e6f48c2
+ // 9dac910959fd7bda36bfbce0c2ac6c1e * 2^-501
+ {{0x2465fb01377a4696ULL, 0x2f7a81a88ffbf95dULL,
+ 0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
+ // 10^-75 ~= e7958cb87392c2c2 b60b1d1230b20e04
+ // 2f7a81a88ffbf95d2465fb01377a4696 * 2^-505
+};
+
+unsigned int Ex256m256[] = {
+ 3, // 259 - 256, Ex = 259
+ 6, // 262 - 256, Ex = 262
+ 9, // 265 - 256, Ex = 265
+ 13, // 269 - 256, Ex = 269
+ 16, // 272 - 256, Ex = 272
+ 19, // 275 - 256, Ex = 275
+ 23, // 279 - 256, Ex = 279
+ 26, // 282 - 256, Ex = 282
+ 29, // 285 - 256, Ex = 285
+ 33, // 289 - 256, Ex = 289
+ 36, // 292 - 256, Ex = 292
+ 39, // 295 - 256, Ex = 295
+ 43, // 299 - 256, Ex = 299
+ 46, // 302 - 256, Ex = 302
+ 49, // 305 - 256, Ex = 305
+ 53, // 309 - 256, Ex = 309
+ 56, // 312 - 256, Ex = 312
+ 59, // 315 - 256, Ex = 315
+ 63, // 319 - 256, Ex = 319
+ 2, // 322 - 320, Ex = 322
+ 5, // 325 - 320, Ex = 325
+ 9, // 329 - 320, Ex = 329
+ 12, // 332 - 320, Ex = 332
+ 15, // 335 - 320, Ex = 335
+ 19, // 339 - 320, Ex = 339
+ 22, // 342 - 320, Ex = 342
+ 25, // 345 - 320, Ex = 345
+ 29, // 349 - 320, Ex = 349
+ 32, // 352 - 320, Ex = 352
+ 35, // 355 - 320, Ex = 355
+ 38, // 358 - 320, Ex = 358
+ 42, // 362 - 320, Ex = 362
+ 45, // 365 - 320, Ex = 365
+ 48, // 368 - 320, Ex = 368
+ 52, // 372 - 320, Ex = 372
+ 55, // 375 - 320, Ex = 375
+ 58, // 378 - 320, Ex = 378
+ 62, // 382 - 320, Ex = 382
+ 1, // 385 - 384, Ex = 385
+ 4, // 388 - 384, Ex = 388
+ 8, // 392 - 384, Ex = 392
+ 11, // 395 - 384, Ex = 395
+ 14, // 398 - 384, Ex = 398
+ 18, // 402 - 384, Ex = 402
+ 21, // 405 - 384, Ex = 405
+ 24, // 408 - 384, Ex = 408
+ 28, // 412 - 384, Ex = 412
+ 31, // 415 - 384, Ex = 415
+ 34, // 418 - 384, Ex = 418
+ 38, // 422 - 384, Ex = 422
+ 41, // 425 - 384, Ex = 425
+ 44, // 428 - 384, Ex = 428
+ 48, // 432 - 384, Ex = 432
+ 51, // 435 - 384, Ex = 435
+ 54, // 438 - 384, Ex = 438
+ 58, // 442 - 384, Ex = 442
+ 61, // 445 - 384, Ex = 445
+ 0, // 448 - 448, Ex = 448
+ 3, // 451 - 448, Ex = 451
+ 7, // 455 - 448, Ex = 455
+ 10, // 458 - 448, Ex = 458
+ 13, // 461 - 448, Ex = 461
+ 17, // 465 - 448, Ex = 465
+ 20, // 468 - 448, Ex = 468
+ 23, // 471 - 448, Ex = 471
+ 27, // 475 - 448, Ex = 475
+ 30, // 478 - 448, Ex = 478
+ 33, // 481 - 448, Ex = 481
+ 37, // 485 - 448, Ex = 485
+ 40, // 488 - 448, Ex = 488
+ 43, // 491 - 448, Ex = 491
+ 47, // 495 - 448, Ex = 495
+ 50, // 498 - 448, Ex = 498
+ 53, // 501 - 448, Ex = 501
+ 57 // 505 - 448, Ex = 505
+};
+
+UINT64 half256[] = {
+ 0x0000000000000004ULL, // half / 2^256 = 4
+ 0x0000000000000020ULL, // half / 2^256 = 20
+ 0x0000000000000100ULL, // half / 2^256 = 100
+ 0x0000000000001000ULL, // half / 2^256 = 1000
+ 0x0000000000008000ULL, // half / 2^256 = 8000
+ 0x0000000000040000ULL, // half / 2^256 = 40000
+ 0x0000000000400000ULL, // half / 2^256 = 400000
+ 0x0000000002000000ULL, // half / 2^256 = 2000000
+ 0x0000000010000000ULL, // half / 2^256 = 10000000
+ 0x0000000100000000ULL, // half / 2^256 = 100000000
+ 0x0000000800000000ULL, // half / 2^256 = 800000000
+ 0x0000004000000000ULL, // half / 2^256 = 4000000000
+ 0x0000040000000000ULL, // half / 2^256 = 40000000000
+ 0x0000200000000000ULL, // half / 2^256 = 200000000000
+ 0x0001000000000000ULL, // half / 2^256 = 1000000000000
+ 0x0010000000000000ULL, // half / 2^256 = 10000000000000
+ 0x0080000000000000ULL, // half / 2^256 = 80000000000000
+ 0x0400000000000000ULL, // half / 2^256 = 400000000000000
+ 0x4000000000000000ULL, // half / 2^256 = 4000000000000000
+ 0x0000000000000002ULL, // half / 2^320 = 2
+ 0x0000000000000010ULL, // half / 2^320 = 10
+ 0x0000000000000100ULL, // half / 2^320 = 100
+ 0x0000000000000800ULL, // half / 2^320 = 800
+ 0x0000000000004000ULL, // half / 2^320 = 4000
+ 0x0000000000040000ULL, // half / 2^320 = 40000
+ 0x0000000000200000ULL, // half / 2^320 = 200000
+ 0x0000000001000000ULL, // half / 2^320 = 1000000
+ 0x0000000010000000ULL, // half / 2^320 = 10000000
+ 0x0000000080000000ULL, // half / 2^320 = 80000000
+ 0x0000000400000000ULL, // half / 2^320 = 400000000
+ 0x0000002000000000ULL, // half / 2^320 = 2000000000
+ 0x0000020000000000ULL, // half / 2^320 = 20000000000
+ 0x0000100000000000ULL, // half / 2^320 = 100000000000
+ 0x0000800000000000ULL, // half / 2^320 = 800000000000
+ 0x0008000000000000ULL, // half / 2^320 = 8000000000000
+ 0x0040000000000000ULL, // half / 2^320 = 40000000000000
+ 0x0200000000000000ULL, // half / 2^320 = 200000000000000
+ 0x2000000000000000ULL, // half / 2^320 = 2000000000000000
+ 0x0000000000000001ULL, // half / 2^384 = 1
+ 0x0000000000000008ULL, // half / 2^384 = 8
+ 0x0000000000000080ULL, // half / 2^384 = 80
+ 0x0000000000000400ULL, // half / 2^384 = 400
+ 0x0000000000002000ULL, // half / 2^384 = 2000
+ 0x0000000000020000ULL, // half / 2^384 = 20000
+ 0x0000000000100000ULL, // half / 2^384 = 100000
+ 0x0000000000800000ULL, // half / 2^384 = 800000
+ 0x0000000008000000ULL, // half / 2^384 = 8000000
+ 0x0000000040000000ULL, // half / 2^384 = 40000000
+ 0x0000000200000000ULL, // half / 2^384 = 200000000
+ 0x0000002000000000ULL, // half / 2^384 = 2000000000
+ 0x0000010000000000ULL, // half / 2^384 = 10000000000
+ 0x0000080000000000ULL, // half / 2^384 = 80000000000
+ 0x0000800000000000ULL, // half / 2^384 = 800000000000
+ 0x0004000000000000ULL, // half / 2^384 = 4000000000000
+ 0x0020000000000000ULL, // half / 2^384 = 20000000000000
+ 0x0200000000000000ULL, // half / 2^384 = 200000000000000
+ 0x1000000000000000ULL, // half / 2^384 = 1000000000000000
+ 0x8000000000000000ULL, // half / 2^384 = 8000000000000000
+ 0x0000000000000004ULL, // half / 2^448 = 4
+ 0x0000000000000040ULL, // half / 2^448 = 40
+ 0x0000000000000200ULL, // half / 2^448 = 200
+ 0x0000000000001000ULL, // half / 2^448 = 1000
+ 0x0000000000010000ULL, // half / 2^448 = 10000
+ 0x0000000000080000ULL, // half / 2^448 = 80000
+ 0x0000000000400000ULL, // half / 2^448 = 400000
+ 0x0000000004000000ULL, // half / 2^448 = 4000000
+ 0x0000000020000000ULL, // half / 2^448 = 20000000
+ 0x0000000100000000ULL, // half / 2^448 = 100000000
+ 0x0000001000000000ULL, // half / 2^448 = 1000000000
+ 0x0000008000000000ULL, // half / 2^448 = 8000000000
+ 0x0000040000000000ULL, // half / 2^448 = 40000000000
+ 0x0000400000000000ULL, // half / 2^448 = 400000000000
+ 0x0002000000000000ULL, // half / 2^448 = 2000000000000
+ 0x0010000000000000ULL, // half / 2^448 = 10000000000000
+ 0x0100000000000000ULL // half / 2^448 = 100000000000000
+};
+
+UINT64 mask256[] = {
+ 0x0000000000000007ULL, // mask / 2^256
+ 0x000000000000003fULL, // mask / 2^256
+ 0x00000000000001ffULL, // mask / 2^256
+ 0x0000000000001fffULL, // mask / 2^256
+ 0x000000000000ffffULL, // mask / 2^256
+ 0x000000000007ffffULL, // mask / 2^256
+ 0x00000000007fffffULL, // mask / 2^256
+ 0x0000000003ffffffULL, // mask / 2^256
+ 0x000000001fffffffULL, // mask / 2^256
+ 0x00000001ffffffffULL, // mask / 2^256
+ 0x0000000fffffffffULL, // mask / 2^256
+ 0x0000007fffffffffULL, // mask / 2^256
+ 0x000007ffffffffffULL, // mask / 2^256
+ 0x00003fffffffffffULL, // mask / 2^256
+ 0x0001ffffffffffffULL, // mask / 2^256
+ 0x001fffffffffffffULL, // mask / 2^256
+ 0x00ffffffffffffffULL, // mask / 2^256
+ 0x07ffffffffffffffULL, // mask / 2^256
+ 0x7fffffffffffffffULL, // mask / 2^256
+ 0x0000000000000003ULL, // mask / 2^320
+ 0x000000000000001fULL, // mask / 2^320
+ 0x00000000000001ffULL, // mask / 2^320
+ 0x0000000000000fffULL, // mask / 2^320
+ 0x0000000000007fffULL, // mask / 2^320
+ 0x000000000007ffffULL, // mask / 2^320
+ 0x00000000003fffffULL, // mask / 2^320
+ 0x0000000001ffffffULL, // mask / 2^320
+ 0x000000001fffffffULL, // mask / 2^320
+ 0x00000000ffffffffULL, // mask / 2^320
+ 0x00000007ffffffffULL, // mask / 2^320
+ 0x0000003fffffffffULL, // mask / 2^320
+ 0x000003ffffffffffULL, // mask / 2^320
+ 0x00001fffffffffffULL, // mask / 2^320
+ 0x0000ffffffffffffULL, // mask / 2^320
+ 0x000fffffffffffffULL, // mask / 2^320
+ 0x007fffffffffffffULL, // mask / 2^320
+ 0x03ffffffffffffffULL, // mask / 2^320
+ 0x3fffffffffffffffULL, // mask / 2^320
+ 0x0000000000000001ULL, // mask / 2^384
+ 0x000000000000000fULL, // mask / 2^384
+ 0x00000000000000ffULL, // mask / 2^384
+ 0x00000000000007ffULL, // mask / 2^384
+ 0x0000000000003fffULL, // mask / 2^384
+ 0x000000000003ffffULL, // mask / 2^384
+ 0x00000000001fffffULL, // mask / 2^384
+ 0x0000000000ffffffULL, // mask / 2^384
+ 0x000000000fffffffULL, // mask / 2^384
+ 0x000000007fffffffULL, // mask / 2^384
+ 0x00000003ffffffffULL, // mask / 2^384
+ 0x0000003fffffffffULL, // mask / 2^384
+ 0x000001ffffffffffULL, // mask / 2^384
+ 0x00000fffffffffffULL, // mask / 2^384
+ 0x0000ffffffffffffULL, // mask / 2^384
+ 0x0007ffffffffffffULL, // mask / 2^384
+ 0x003fffffffffffffULL, // mask / 2^384
+ 0x03ffffffffffffffULL, // mask / 2^384
+ 0x1fffffffffffffffULL, // mask / 2^384
+ 0xffffffffffffffffULL, // mask / 2^384
+ 0x0000000000000007ULL, // mask / 2^448
+ 0x000000000000007fULL, // mask / 2^448
+ 0x00000000000003ffULL, // mask / 2^448
+ 0x0000000000001fffULL, // mask / 2^448
+ 0x000000000001ffffULL, // mask / 2^448
+ 0x00000000000fffffULL, // mask / 2^448
+ 0x00000000007fffffULL, // mask / 2^448
+ 0x0000000007ffffffULL, // mask / 2^448
+ 0x000000003fffffffULL, // mask / 2^448
+ 0x00000001ffffffffULL, // mask / 2^448
+ 0x0000001fffffffffULL, // mask / 2^448
+ 0x000000ffffffffffULL, // mask / 2^448
+ 0x000007ffffffffffULL, // mask / 2^448
+ 0x00007fffffffffffULL, // mask / 2^448
+ 0x0003ffffffffffffULL, // mask / 2^448
+ 0x001fffffffffffffULL, // mask / 2^448
+ 0x01ffffffffffffffULL // mask / 2^448
+};
+
+UINT256 ten2mxtrunc256[] = {
+ {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
+ 0xccccccccccccccccULL, 0xccccccccccccccccULL}},
+ // (ten2mx >> 256) = cccccccccccccccc cccccccccccccccc
+ // cccccccccccccccccccccccccccccccc
+ {{0x70a3d70a3d70a3d7ULL, 0xd70a3d70a3d70a3dULL,
+ 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
+ // (ten2mx >> 256) = a3d70a3d70a3d70a 3d70a3d70a3d70a3
+ // d70a3d70a3d70a3d70a3d70a3d70a3d7
+ {{0xc083126e978d4fdfULL, 0x78d4fdf3b645a1caULL,
+ 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
+ // (ten2mx >> 256) = 83126e978d4fdf3b 645a1cac083126e9
+ // 78d4fdf3b645a1cac083126e978d4fdf
+ {{0x67381d7dbf487fcbULL, 0xc154c985f06f6944ULL,
+ 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
+ // (ten2mx >> 256) = d1b71758e219652b d3c36113404ea4a8
+ // c154c985f06f694467381d7dbf487fcb
+ {{0x85c67dfe32a0663cULL, 0xcddd6e04c0592103ULL,
+ 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
+ // (ten2mx >> 256) = a7c5ac471b478423 fcf80dc33721d53
+ // cddd6e04c059210385c67dfe32a0663c
+ {{0x37d1fe64f54d1e96ULL, 0xd7e45803cd141a69ULL,
+ 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
+ // (ten2mx >> 256) = 8637bd05af6c69b5 a63f9a49c2c1b10f
+ // d7e45803cd141a6937d1fe64f54d1e96
+ {{0x8c8330a1887b6424ULL, 0x8ca08cd2e1b9c3dbULL,
+ 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
+ // (ten2mx >> 256) = d6bf94d5e57a42bc 3d32907604691b4c
+ // 8ca08cd2e1b9c3db8c8330a1887b6424
+ {{0x7068f3b46d2f8350ULL, 0x3d4d3d758161697cULL,
+ 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
+ // (ten2mx >> 256) = abcc77118461cefc fdc20d2b36ba7c3d
+ // 3d4d3d758161697c7068f3b46d2f8350
+ {{0xf387295d242602a6ULL, 0xfdd7645e011abac9ULL,
+ 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
+ // (ten2mx >> 256) = 89705f4136b4a597 31680a88f8953030
+ // fdd7645e011abac9f387295d242602a6
+ {{0xb8d8422ea03cd10aULL, 0x2fbf06fcce912adcULL,
+ 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
+ // (ten2mx >> 256) = dbe6fecebdedd5be b573440e5a884d1b
+ // 2fbf06fcce912adcb8d8422ea03cd10a
+ {{0x93e034f219ca40d5ULL, 0xf2ff38ca3eda88b0ULL,
+ 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
+ // (ten2mx >> 256) = afebff0bcb24aafe f78f69a51539d748
+ // f2ff38ca3eda88b093e034f219ca40d5
+ {{0x4319c3f4e16e9a44ULL, 0xf598fa3b657ba08dULL,
+ 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
+ // (ten2mx >> 256) = 8cbccc096f5088cb f93f87b7442e45d3
+ // f598fa3b657ba08d4319c3f4e16e9a44
+ {{0x04f606549be42a06ULL, 0x88f4c3923bf900e2ULL,
+ 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
+ // (ten2mx >> 256) = e12e13424bb40e13 2865a5f206b06fb9
+ // 88f4c3923bf900e204f606549be42a06
+ {{0x03f805107cb68805ULL, 0x6d909c74fcc733e8ULL,
+ 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
+ // (ten2mx >> 256) = b424dc35095cd80f 538484c19ef38c94
+ // 6d909c74fcc733e803f805107cb68805
+ {{0x3660040d3092066aULL, 0x57a6e390ca38f653ULL,
+ 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
+ // (ten2mx >> 256) = 901d7cf73ab0acd9 f9d37014bf60a10
+ // 57a6e390ca38f6533660040d3092066a
+ {{0x23ccd3484db670aaULL, 0xbf716c1add27f085ULL,
+ 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
+ // (ten2mx >> 256) = e69594bec44de15b 4c2ebe687989a9b3
+ // bf716c1add27f08523ccd3484db670aa
+ {{0x4fd70f6d0af85a22ULL, 0xff8df0157db98d37ULL,
+ 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
+ // (ten2mx >> 256) = b877aa3236a4b449 9befeb9fad487c2
+ // ff8df0157db98d374fd70f6d0af85a22
+ {{0x0cac0c573bf9e1b5ULL, 0x32d7f344649470f9ULL,
+ 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
+ // (ten2mx >> 256) = 9392ee8e921d5d07 3aff322e62439fcf
+ // 32d7f344649470f90cac0c573bf9e1b5
+ {{0xe11346f1f98fcf88ULL, 0x1e2652070753e7f4ULL,
+ 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
+ // (ten2mx >> 256) = ec1e4a7db69561a5 2b31e9e3d06c32e5
+ // 1e2652070753e7f4e11346f1f98fcf88
+ {{0x4da9058e613fd939ULL, 0x181ea8059f76532aULL,
+ 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
+ // (ten2mx >> 256) = bce5086492111aea 88f4bb1ca6bcf584
+ // 181ea8059f76532a4da9058e613fd939
+ {{0xa48737a51a997a94ULL, 0x467eecd14c5ea8eeULL,
+ 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
+ // (ten2mx >> 256) = 971da05074da7bee d3f6fc16ebca5e03
+ // 467eecd14c5ea8eea48737a51a997a94
+ {{0x3a71f2a1c428c420ULL, 0x70cb148213caa7e4ULL,
+ 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
+ // (ten2mx >> 256) = f1c90080baf72cb1 5324c68b12dd6338
+ // 70cb148213caa7e43a71f2a1c428c420
+ {{0x2ec18ee7d0209ce7ULL, 0x8d6f439b43088650ULL,
+ 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
+ // (ten2mx >> 256) = c16d9a0095928a27 75b7053c0f178293
+ // 8d6f439b430886502ec18ee7d0209ce7
+ {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
+ 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
+ // (ten2mx >> 256) = 9abe14cd44753b52 c4926a9672793542
+ // d78c3615cf3a050cf23472530ce6e3ec
+ {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
+ 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
+ // (ten2mx >> 256) = f79687aed3eec551 3a83ddbd83f52204
+ // 8c1389bc7ec33b47e9ed83b814a49fe0
+ {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
+ 0x95364afe032a819dULL, 0xc612062576589ddaULL}},
+ // (ten2mx >> 256) = c612062576589dda 95364afe032a819d
+ // 3cdc6e306568fc3987f1362cdd507fe6
+ {{0x9ff42b5717739985ULL, 0xca49f1c05120c9c7ULL,
+ 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
+ // (ten2mx >> 256) = 9e74d1b791e07e48 775ea264cf55347d
+ // ca49f1c05120c9c79ff42b5717739985
+ {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
+ 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
+ // (ten2mx >> 256) = fd87b5f28300ca0d 8bca9d6e188853fc
+ // 76dcb60081ce0fa5ccb9def1bf1f5c08
+ {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
+ 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
+ // (ten2mx >> 256) = cad2f7f5359a3b3e 96ee45813a04330
+ // 5f16f80067d80c84a3c7e58e327f7cd3
+ {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
+ 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
+ // (ten2mx >> 256) = a2425ff75e14fc31 a1258379a94d028d
+ // 18df2ccd1fe00a03b6398471c1ff970f
+ {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
+ 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
+ // (ten2mx >> 256) = 81ceb32c4b43fcf4 80eacf948770ced7
+ // 4718f0a419800802f82e038e34cc78d9
+ {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
+ 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
+ // (ten2mx >> 256) = cfb11ead453994ba 67de18eda5814af2
+ // b5b1aa028ccd99e59e338e387ad8e28
+ {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
+ 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
+ // (ten2mx >> 256) = a6274bbdd0fadd61 ecb1ad8aeacdd58e
+ // 6f7c154ced70ae1847e8fa4f9fbe0b53
+ {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
+ 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
+ // (ten2mx >> 256) = 84ec3c97da624ab4 bd5af13bef0b113e
+ // bf967770bdf3be79d320c83fb2fe6f75
+ {{0x85014065eb30b256ULL, 0x65bd8be79652ca5cULL,
+ 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
+ // (ten2mx >> 256) = d4ad2dbfc3d07787 955e4ec64b44e864
+ // 65bd8be79652ca5c85014065eb30b256
+ {{0xd0cdcd1e55c08eabULL, 0xeafe098611dbd516ULL,
+ 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
+ // (ten2mx >> 256) = aa242499697392d2 dde50bd1d5d0b9e9
+ // eafe098611dbd516d0cdcd1e55c08eab
+ {{0x40a4a418449a0bbcULL, 0xbbfe6e04db164412ULL,
+ 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
+ // (ten2mx >> 256) = 881cea14545c7575 7e50d64177da2e54
+ // bbfe6e04db16441240a4a418449a0bbc
+ {{0x9aa1068d3a9012c7ULL, 0x2cca49a15e8a0683ULL,
+ 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
+ // (ten2mx >> 256) = d9c7dced53c72255 96e7bd358c904a21
+ // 2cca49a15e8a06839aa1068d3a9012c7
+ {{0x154d9ed7620cdbd2ULL, 0x8a3b6e1ab2080536ULL,
+ 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
+ // (ten2mx >> 256) = ae397d8aa96c1b77 abec975e0a0d081a
+ // 8a3b6e1ab2080536154d9ed7620cdbd2
+ {{0x443e18ac4e70afdbULL, 0x3b62be7bc1a0042bULL,
+ 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
+ // (ten2mx >> 256) = 8b61313bbabce2c6 2323ac4b3b3da015
+ // 3b62be7bc1a0042b443e18ac4e70afdb
+ {{0x6d30277a171ab2f8ULL, 0x5f0463f935ccd378ULL,
+ 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
+ // (ten2mx >> 256) = df01e85f912e37a3 6b6c46dec52f6688
+ // 5f0463f935ccd3786d30277a171ab2f8
+ {{0x8a8cec61ac155bfaULL, 0x7f36b660f7d70f93ULL,
+ 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
+ // (ten2mx >> 256) = b267ed1940f1c61c 55f038b237591ed3
+ // 7f36b660f7d70f938a8cec61ac155bfa
+ {{0x3ba3f04e23444995ULL, 0xcc2bc51a5fdf3fa9ULL,
+ 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
+ // (ten2mx >> 256) = 8eb98a7a9a5b04e3 77f3608e92adb242
+ // cc2bc51a5fdf3fa93ba3f04e23444995
+ {{0xf9064d49d206dc21ULL, 0xe046082a32fecc41ULL,
+ 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
+ // (ten2mx >> 256) = e45c10c42a2b3b05 8cb89a7db77c506a
+ // e046082a32fecc41f9064d49d206dc21
+ {{0xfa6b7107db38b01aULL, 0x4d04d354f598a367ULL,
+ 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
+ // (ten2mx >> 256) = b6b00d69bb55c8d1 3d607b97c5fd0d22
+ // 4d04d354f598a367fa6b7107db38b01a
+ {{0xfb8927397c2d59afULL, 0x3d9d75dd9146e91fULL,
+ 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
+ // (ten2mx >> 256) = 9226712162ab070d cab3961304ca70e8
+ // 3d9d75dd9146e91ffb8927397c2d59af
+ {{0xf8db71f5937bc2b1ULL, 0xc8fbefc8e87174ffULL,
+ 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
+ // (ten2mx >> 256) = e9d71b689dde71af aab8f01e6e10b4a6
+ // c8fbefc8e87174fff8db71f5937bc2b1
+ {{0x2d7c5b2adc630227ULL, 0x3a63263a538df733ULL,
+ 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
+ // (ten2mx >> 256) = bb127c53b17ec159 5560c018580d5d52
+ // 3a63263a538df7332d7c5b2adc630227
+ {{0x24637c2249e8ce86ULL, 0x2eb5b82ea93e5f5cULL,
+ 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
+ // (ten2mx >> 256) = 95a8637627989aad dde7001379a44aa8
+ // 2eb5b82ea93e5f5c24637c2249e8ce86
+ {{0x3a38c69d430e173dULL, 0x4abc59e441fd6560ULL,
+ 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
+ // (ten2mx >> 256) = ef73d256a5c0f77c 963e66858f6d4440
+ // 4abc59e441fd65603a38c69d430e173d
+ {{0x94fa387dcf3e78fdULL, 0x6efd14b69b311de6ULL,
+ 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
+ // (ten2mx >> 256) = bf8fdb78849a5f96 de98520472bdd033
+ // 6efd14b69b311de694fa387dcf3e78fd
+ {{0xaa61c6cb0c31fa64ULL, 0x259743c548f417ebULL,
+ 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
+ // (ten2mx >> 256) = 993fe2c6d07b7fab e546a8038efe4029
+ // 259743c548f417ebaa61c6cb0c31fa64
+ {{0xaa360ade79e990a1ULL, 0x3c25393ba7ecf312ULL,
+ 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
+ // (ten2mx >> 256) = f53304714d9265df d53dd99f4b3066a8
+ // 3c25393ba7ecf312aa360ade79e990a1
+ {{0x882b3be52e5473b4ULL, 0x96842dc95323f5a8ULL,
+ 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
+ // (ten2mx >> 256) = c428d05aa4751e4c aa97e14c3c26b886
+ // 96842dc95323f5a8882b3be52e5473b4
+ {{0xd355c98425105c90ULL, 0xab9cf16ddc1cc486ULL,
+ 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
+ // (ten2mx >> 256) = 9ced737bb6c4183d 55464dd69685606b
+ // ab9cf16ddc1cc486d355c98425105c90
+ {{0xebbc75a03b4d60e6ULL, 0xac2e4f162cfad40aULL,
+ 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
+ // (ten2mx >> 256) = fb158592be068d2e eed6e2f0f0d56712
+ // ac2e4f162cfad40aebbc75a03b4d60e6
+ {{0x8963914cfc3de71eULL, 0x568b727823fbdcd5ULL,
+ 0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
+ // (ten2mx >> 256) = c8de047564d20a8b f245825a5a445275
+ // 568b727823fbdcd58963914cfc3de71e
+ {{0xd44fa770c9cb1f4bULL, 0x453c5b934ffcb0aaULL,
+ 0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
+ // (ten2mx >> 256) = a0b19d2ab70e6ed6 5b6aceaeae9d0ec4
+ // 453c5b934ffcb0aad44fa770c9cb1f4b
+ {{0xdd0c85f3d4a27f6fULL, 0x37637c75d996f3bbULL,
+ 0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
+ // (ten2mx >> 256) = 808e17555f3ebf11 e2bbd88bbee40bd0
+ // 37637c75d996f3bbdd0c85f3d4a27f6f
+ {{0x61ada31fba9d98b2ULL, 0x256bfa5628f185f9ULL,
+ 0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
+ // (ten2mx >> 256) = cdb02555653131b6 3792f412cb06794d
+ // 256bfa5628f185f961ada31fba9d98b2
+ {{0xe7be1c196217ad5bULL, 0x51232eab53f46b2dULL,
+ 0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
+ // (ten2mx >> 256) = a48ceaaab75a8e2b 5fa8c3423c052dd7
+ // 51232eab53f46b2de7be1c196217ad5b
+ {{0x52fe7ce11b462449ULL, 0x40e8f222a99055beULL,
+ 0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
+ // (ten2mx >> 256) = 83a3eeeef9153e89 1953cf68300424ac
+ // 40e8f222a99055be52fe7ce11b462449
+ {{0x51972e34f8703a0fULL, 0x34a7e9d10f4d55fdULL,
+ 0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
+ // (ten2mx >> 256) = d29fe4b18e88640e 8eec7f0d19a03aad
+ // 34a7e9d10f4d55fd51972e34f8703a0f
+ {{0x0e128b5d938cfb3fULL, 0x2a1fee40d90aab31ULL,
+ 0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
+ // (ten2mx >> 256) = a87fea27a539e9a5 3f2398d747b36224
+ // 2a1fee40d90aab310e128b5d938cfb3f
+ {{0x3e753c4adc70c8ffULL, 0xbb4cbe9a473bbc27ULL,
+ 0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
+ // (ten2mx >> 256) = 86ccbb52ea94baea 98e947129fc2b4e9
+ // bb4cbe9a473bbc273e753c4adc70c8ff
+ {{0x30bb93aafa4e0e65ULL, 0x9214642a0b92c6a5ULL,
+ 0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
+ // (ten2mx >> 256) = d7adf884aa879177 5b0ed81dcc6abb0f
+ // 9214642a0b92c6a530bb93aafa4e0e65
+ {{0xc0960fbbfb71a51eULL, 0xa8105021a2dbd21dULL,
+ 0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
+ // (ten2mx >> 256) = ac8b2d36eed2dac5 e272467e3d222f3f
+ // a8105021a2dbd21dc0960fbbfb71a51e
+ {{0x66de72fcc927b74bULL, 0xb9a6a6814f1641b1ULL,
+ 0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
+ // (ten2mx >> 256) = 8a08f0f8bf0f156b 1b8e9ecb641b58ff
+ // b9a6a6814f1641b166de72fcc927b74b
+ {{0xd7ca5194750c5878ULL, 0xf5d770cee4f0691bULL,
+ 0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
+ // (ten2mx >> 256) = dcdb1b2798182244 f8e431456cf88e65
+ // f5d770cee4f0691bd7ca5194750c5878
+ {{0xdfd50e105da379f9ULL, 0x9179270bea59edafULL,
+ 0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
+ // (ten2mx >> 256) = b0af48ec79ace837 2d835a9df0c6d851
+ // 9179270bea59edafdfd50e105da379f9
+ {{0x19773e737e1c6194ULL, 0x0dfa85a321e18af3ULL,
+ 0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
+ // (ten2mx >> 256) = 8d590723948a535f 579c487e5a38ad0e
+ // dfa85a321e18af319773e737e1c6194
+ {{0xf58b971f302d68eeULL, 0x165da29e9c9c1184ULL,
+ 0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
+ // (ten2mx >> 256) = e2280b6c20dd5232 25c6da63c38de1b0
+ // 165da29e9c9c1184f58b971f302d68ee
+ {{0xc46fac18f3578724ULL, 0x4517b54bb07cdad0ULL,
+ 0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
+ // (ten2mx >> 256) = b4ecd5f01a4aa828 1e38aeb6360b1af3
+ // 4517b54bb07cdad0c46fac18f3578724
+ {{0x36bfbce0c2ac6c1dULL, 0x9dac910959fd7bdaULL,
+ 0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
+ // (ten2mx >> 256) = 90bd77f3483bb9b9 b1c6f22b5e6f48c2
+ // 9dac910959fd7bda36bfbce0c2ac6c1d
+ {{0x2465fb01377a4695ULL, 0x2f7a81a88ffbf95dULL,
+ 0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
+ // (ten2mx >> 256) = e7958cb87392c2c2 b60b1d1230b20e04
+ // 2f7a81a88ffbf95d2465fb01377a4695
+};
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_2_str.h b/gcc-4.9/libgcc/config/libbid/bid128_2_str.h
new file mode 100644
index 000000000..c5bc8dc5e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_2_str.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+extern UINT64 Twoto60_m_10to18;
+extern UINT64 Twoto60;
+extern UINT64 Inv_Tento9;
+extern UINT32 Twoto30_m_10to9;
+extern UINT32 Tento9;
+extern UINT32 Tento6;
+extern UINT32 Tento3;
+
+extern char midi_tbl[1000][3];
+extern UINT64 mod10_18_tbl[9][128];
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_2_str_macros.h b/gcc-4.9/libgcc/config/libbid/bid128_2_str_macros.h
new file mode 100644
index 000000000..615db51a9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_2_str_macros.h
@@ -0,0 +1,149 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define __L0_Normalize_10to18( X_hi, X_lo ) \
+{ \
+UINT64 L0_tmp; \
+L0_tmp = (X_lo) + Twoto60_m_10to18; \
+if (L0_tmp & Twoto60) \
+ {(X_hi)=(X_hi)+1;(X_lo)=((L0_tmp<<4)>>4);} \
+}
+
+
+#define __L0_Normalize_10to9( X_hi, X_lo ) \
+{ \
+UINT32 L0_tmp; \
+L0_tmp = (X_lo) + Twoto30_m_10to9; \
+if (L0_tmp & 0x40000000) \
+ {(X_hi)=(X_hi)+1;(X_lo)=((L0_tmp<<2)>>2);} \
+}
+
+
+#define __L0_Split_MiDi_2( X, ptr ) \
+{ \
+UINT32 L0_head, L0_tail, L0_tmp; \
+ L0_head = (X) >> 10; \
+ L0_tail = ((X)&(0x03FF))+(L0_head<<5)-(L0_head<<3); \
+ L0_tmp = (L0_tail)>>10; L0_head += L0_tmp; \
+ L0_tail = (L0_tail&(0x03FF))+(L0_tmp<<5)-(L0_tmp<<3); \
+ if (L0_tail > 999){L0_tail -= 1000; L0_head += 1;} \
+ *((ptr)++) = L0_head; *((ptr)++) = L0_tail; \
+}
+
+
+#define __L0_Split_MiDi_3( X, ptr ) \
+{ \
+UINT32 L0_X, L0_head, L0_mid, L0_tail, L0_tmp; \
+ L0_X = (UINT32)((X)); \
+ L0_head = ((L0_X>>17)*34359)>>18; \
+ L0_X -= L0_head*1000000; \
+ if (L0_X >= 1000000){L0_X -= 1000000;L0_head+=1;} \
+ L0_mid = L0_X >> 10; \
+ L0_tail = (L0_X & (0x03FF))+(L0_mid<<5)-(L0_mid<<3); \
+ L0_tmp = (L0_tail)>>10; L0_mid += L0_tmp; \
+ L0_tail = (L0_tail&(0x3FF))+(L0_tmp<<5)-(L0_tmp<<3); \
+ if (L0_tail>999){L0_tail-=1000;L0_mid+=1;} \
+ *((ptr)++)=L0_head;*((ptr)++)=L0_mid; \
+ *((ptr)++)=L0_tail; \
+}
+
+#define __L1_Split_MiDi_6( X, ptr ) \
+{ \
+UINT32 L1_X_hi, L1_X_lo; \
+UINT64 L1_Xhi_64, L1_Xlo_64; \
+L1_Xhi_64 = ( ((X)>>28)*Inv_Tento9 ) >> 33; \
+L1_Xlo_64 = (X) - L1_Xhi_64*(UINT64)Tento9; \
+if (L1_Xlo_64 >= (UINT64)Tento9) \
+ {L1_Xlo_64-=(UINT64)Tento9;L1_Xhi_64+=1;} \
+L1_X_hi=(UINT32)L1_Xhi_64; L1_X_lo=(UINT32)L1_Xlo_64; \
+__L0_Split_MiDi_3(L1_X_hi,(ptr)); \
+__L0_Split_MiDi_3(L1_X_lo,(ptr)); \
+}
+
+#define __L1_Split_MiDi_6_Lead( X, ptr ) \
+{ \
+UINT32 L1_X_hi, L1_X_lo; \
+UINT64 L1_Xhi_64, L1_Xlo_64; \
+if ((X)>=(UINT64)Tento9){ \
+ L1_Xhi_64 = ( ((X)>>28)*Inv_Tento9 ) >> 33; \
+ L1_Xlo_64 = (X) - L1_Xhi_64*(UINT64)Tento9; \
+ if (L1_Xlo_64 >= (UINT64)Tento9) \
+ {L1_Xlo_64-=(UINT64)Tento9;L1_Xhi_64+=1;} \
+ L1_X_hi=(UINT32)L1_Xhi_64; \
+ L1_X_lo=(UINT32)L1_Xlo_64; \
+ if (L1_X_hi>=Tento6){ \
+ __L0_Split_MiDi_3(L1_X_hi,(ptr)); \
+ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
+ } \
+ else if (L1_X_hi>=Tento3){ \
+ __L0_Split_MiDi_2(L1_X_hi,(ptr)); \
+ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
+ } \
+ else { \
+ *((ptr)++) = L1_X_hi; \
+ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
+ } \
+} \
+else { \
+ L1_X_lo = (UINT32)(X); \
+ if (L1_X_lo>=Tento6){ \
+ __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
+ } \
+ else if (L1_X_lo>=Tento3){ \
+ __L0_Split_MiDi_2(L1_X_lo,(ptr)); \
+ } \
+ else { \
+ *((ptr)++) = L1_X_lo; \
+ } \
+} \
+}
+
+
+#define __L0_MiDi2Str( X, c_ptr ) \
+{ \
+char *L0_src; \
+ L0_src = midi_tbl[(X)]; \
+ *((c_ptr)++) = *(L0_src++); \
+ *((c_ptr)++) = *(L0_src++); \
+ *((c_ptr)++) = *(L0_src); \
+}
+
+#define __L0_MiDi2Str_Lead( X, c_ptr ) \
+{ \
+char *L0_src; \
+ L0_src = midi_tbl[(X)]; \
+ if ((X)>=100){ \
+ *((c_ptr)++) = *(L0_src++); \
+ *((c_ptr)++) = *(L0_src++); \
+ *((c_ptr)++) = *(L0_src); \
+ } \
+ else if ((X)>=10){ \
+ L0_src++; \
+ *((c_ptr)++) = *(L0_src++); \
+ *((c_ptr)++) = *(L0_src); \
+ } \
+ else { \
+ L0_src++;L0_src++; \
+ *((c_ptr)++) = *(L0_src); \
+} \
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_2_str_tables.c b/gcc-4.9/libgcc/config/libbid/bid128_2_str_tables.c
new file mode 100644
index 000000000..8d7252b85
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_2_str_tables.c
@@ -0,0 +1,642 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+UINT64 Twoto60_m_10to18 = 152921504606846976LL;
+UINT64 Twoto60 = 0x1000000000000000LL;
+UINT64 Inv_Tento9 = 2305843009LL; /* floor(2^61/10^9) */
+UINT32 Twoto30_m_10to9 = 73741824;
+UINT32 Tento9 = 1000000000;
+UINT32 Tento6 = 1000000;
+UINT32 Tento3 = 1000;
+
+const char midi_tbl[1000][3] = {
+ "000", "001", "002", "003", "004", "005", "006", "007", "008", "009",
+ "010", "011", "012", "013", "014", "015", "016", "017", "018", "019",
+ "020", "021", "022", "023", "024", "025", "026", "027", "028", "029",
+ "030", "031", "032", "033", "034", "035", "036", "037", "038", "039",
+ "040", "041", "042", "043", "044", "045", "046", "047", "048", "049",
+ "050", "051", "052", "053", "054", "055", "056", "057", "058", "059",
+ "060", "061", "062", "063", "064", "065", "066", "067", "068", "069",
+ "070", "071", "072", "073", "074", "075", "076", "077", "078", "079",
+ "080", "081", "082", "083", "084", "085", "086", "087", "088", "089",
+ "090", "091", "092", "093", "094", "095", "096", "097", "098", "099",
+ "100", "101", "102", "103", "104", "105", "106", "107", "108", "109",
+ "110", "111", "112", "113", "114", "115", "116", "117", "118", "119",
+ "120", "121", "122", "123", "124", "125", "126", "127", "128", "129",
+ "130", "131", "132", "133", "134", "135", "136", "137", "138", "139",
+ "140", "141", "142", "143", "144", "145", "146", "147", "148", "149",
+ "150", "151", "152", "153", "154", "155", "156", "157", "158", "159",
+ "160", "161", "162", "163", "164", "165", "166", "167", "168", "169",
+ "170", "171", "172", "173", "174", "175", "176", "177", "178", "179",
+ "180", "181", "182", "183", "184", "185", "186", "187", "188", "189",
+ "190", "191", "192", "193", "194", "195", "196", "197", "198", "199",
+ "200", "201", "202", "203", "204", "205", "206", "207", "208", "209",
+ "210", "211", "212", "213", "214", "215", "216", "217", "218", "219",
+ "220", "221", "222", "223", "224", "225", "226", "227", "228", "229",
+ "230", "231", "232", "233", "234", "235", "236", "237", "238", "239",
+ "240", "241", "242", "243", "244", "245", "246", "247", "248", "249",
+ "250", "251", "252", "253", "254", "255", "256", "257", "258", "259",
+ "260", "261", "262", "263", "264", "265", "266", "267", "268", "269",
+ "270", "271", "272", "273", "274", "275", "276", "277", "278", "279",
+ "280", "281", "282", "283", "284", "285", "286", "287", "288", "289",
+ "290", "291", "292", "293", "294", "295", "296", "297", "298", "299",
+ "300", "301", "302", "303", "304", "305", "306", "307", "308", "309",
+ "310", "311", "312", "313", "314", "315", "316", "317", "318", "319",
+ "320", "321", "322", "323", "324", "325", "326", "327", "328", "329",
+ "330", "331", "332", "333", "334", "335", "336", "337", "338", "339",
+ "340", "341", "342", "343", "344", "345", "346", "347", "348", "349",
+ "350", "351", "352", "353", "354", "355", "356", "357", "358", "359",
+ "360", "361", "362", "363", "364", "365", "366", "367", "368", "369",
+ "370", "371", "372", "373", "374", "375", "376", "377", "378", "379",
+ "380", "381", "382", "383", "384", "385", "386", "387", "388", "389",
+ "390", "391", "392", "393", "394", "395", "396", "397", "398", "399",
+ "400", "401", "402", "403", "404", "405", "406", "407", "408", "409",
+ "410", "411", "412", "413", "414", "415", "416", "417", "418", "419",
+ "420", "421", "422", "423", "424", "425", "426", "427", "428", "429",
+ "430", "431", "432", "433", "434", "435", "436", "437", "438", "439",
+ "440", "441", "442", "443", "444", "445", "446", "447", "448", "449",
+ "450", "451", "452", "453", "454", "455", "456", "457", "458", "459",
+ "460", "461", "462", "463", "464", "465", "466", "467", "468", "469",
+ "470", "471", "472", "473", "474", "475", "476", "477", "478", "479",
+ "480", "481", "482", "483", "484", "485", "486", "487", "488", "489",
+ "490", "491", "492", "493", "494", "495", "496", "497", "498", "499",
+ "500", "501", "502", "503", "504", "505", "506", "507", "508", "509",
+ "510", "511", "512", "513", "514", "515", "516", "517", "518", "519",
+ "520", "521", "522", "523", "524", "525", "526", "527", "528", "529",
+ "530", "531", "532", "533", "534", "535", "536", "537", "538", "539",
+ "540", "541", "542", "543", "544", "545", "546", "547", "548", "549",
+ "550", "551", "552", "553", "554", "555", "556", "557", "558", "559",
+ "560", "561", "562", "563", "564", "565", "566", "567", "568", "569",
+ "570", "571", "572", "573", "574", "575", "576", "577", "578", "579",
+ "580", "581", "582", "583", "584", "585", "586", "587", "588", "589",
+ "590", "591", "592", "593", "594", "595", "596", "597", "598", "599",
+ "600", "601", "602", "603", "604", "605", "606", "607", "608", "609",
+ "610", "611", "612", "613", "614", "615", "616", "617", "618", "619",
+ "620", "621", "622", "623", "624", "625", "626", "627", "628", "629",
+ "630", "631", "632", "633", "634", "635", "636", "637", "638", "639",
+ "640", "641", "642", "643", "644", "645", "646", "647", "648", "649",
+ "650", "651", "652", "653", "654", "655", "656", "657", "658", "659",
+ "660", "661", "662", "663", "664", "665", "666", "667", "668", "669",
+ "670", "671", "672", "673", "674", "675", "676", "677", "678", "679",
+ "680", "681", "682", "683", "684", "685", "686", "687", "688", "689",
+ "690", "691", "692", "693", "694", "695", "696", "697", "698", "699",
+ "700", "701", "702", "703", "704", "705", "706", "707", "708", "709",
+ "710", "711", "712", "713", "714", "715", "716", "717", "718", "719",
+ "720", "721", "722", "723", "724", "725", "726", "727", "728", "729",
+ "730", "731", "732", "733", "734", "735", "736", "737", "738", "739",
+ "740", "741", "742", "743", "744", "745", "746", "747", "748", "749",
+ "750", "751", "752", "753", "754", "755", "756", "757", "758", "759",
+ "760", "761", "762", "763", "764", "765", "766", "767", "768", "769",
+ "770", "771", "772", "773", "774", "775", "776", "777", "778", "779",
+ "780", "781", "782", "783", "784", "785", "786", "787", "788", "789",
+ "790", "791", "792", "793", "794", "795", "796", "797", "798", "799",
+ "800", "801", "802", "803", "804", "805", "806", "807", "808", "809",
+ "810", "811", "812", "813", "814", "815", "816", "817", "818", "819",
+ "820", "821", "822", "823", "824", "825", "826", "827", "828", "829",
+ "830", "831", "832", "833", "834", "835", "836", "837", "838", "839",
+ "840", "841", "842", "843", "844", "845", "846", "847", "848", "849",
+ "850", "851", "852", "853", "854", "855", "856", "857", "858", "859",
+ "860", "861", "862", "863", "864", "865", "866", "867", "868", "869",
+ "870", "871", "872", "873", "874", "875", "876", "877", "878", "879",
+ "880", "881", "882", "883", "884", "885", "886", "887", "888", "889",
+ "890", "891", "892", "893", "894", "895", "896", "897", "898", "899",
+ "900", "901", "902", "903", "904", "905", "906", "907", "908", "909",
+ "910", "911", "912", "913", "914", "915", "916", "917", "918", "919",
+ "920", "921", "922", "923", "924", "925", "926", "927", "928", "929",
+ "930", "931", "932", "933", "934", "935", "936", "937", "938", "939",
+ "940", "941", "942", "943", "944", "945", "946", "947", "948", "949",
+ "950", "951", "952", "953", "954", "955", "956", "957", "958", "959",
+ "960", "961", "962", "963", "964", "965", "966", "967", "968", "969",
+ "970", "971", "972", "973", "974", "975", "976", "977", "978", "979",
+ "980", "981", "982", "983", "984", "985", "986", "987", "988", "989",
+ "990", "991", "992", "993", "994", "995", "996", "997", "998", "999"
+};
+
+const UINT64 mod10_18_tbl[9][128] = {
+ // 2^59 = 576460752303423488, A and B breakdown, where data = A*10^18 + B
+
+ {
+ 0LL, 0LL, 0LL, 576460752303423488LL,
+ // 0*2^59, 1*2^59
+ 1LL, 152921504606846976LL, 1LL, 729382256910270464LL,
+ // 2*2^59, 3*2^59
+ 2LL, 305843009213693952LL, 2LL, 882303761517117440LL,
+ // 4*2^59, 5*2^59
+ 3LL, 458764513820540928LL, 4LL, 35225266123964416LL,
+ // 6*2^59, 7*2^59
+ 4LL, 611686018427387904LL, 5LL, 188146770730811392LL,
+ // 8*2^59, 9*2^59
+ 5LL, 764607523034234880LL, 6LL, 341068275337658368LL,
+ // 10*2^59, 11*2^59
+ 6LL, 917529027641081856LL, 7LL, 493989779944505344LL,
+ // 12*2^59, 13*2^59
+ 8LL, 70450532247928832LL, 8LL, 646911284551352320LL,
+ // 14*2^59, 15*2^59
+ 9LL, 223372036854775808LL, 9LL, 799832789158199296LL,
+ // 16*2^59, 17*2^59
+ 10LL, 376293541461622784LL, 10LL, 952754293765046272LL,
+ // 18*2^59, 19*2^59
+ 11LL, 529215046068469760LL, 12LL, 105675798371893248LL,
+ // 20*2^59, 21*2^59
+ 12LL, 682136550675316736LL, 13LL, 258597302978740224LL,
+ // 22*2^59, 23*2^59
+ 13LL, 835058055282163712LL, 14LL, 411518807585587200LL,
+ // 24*2^59, 25*2^59
+ 14LL, 987979559889010688LL, 15LL, 564440312192434176LL,
+ // 26*2^59, 27*2^59
+ 16LL, 140901064495857664LL, 16LL, 717361816799281152LL,
+ // 28*2^59, 29*2^59
+ 17LL, 293822569102704640LL, 17LL, 870283321406128128LL,
+ // 30*2^59, 31*2^59
+ 18LL, 446744073709551616LL, 19LL, 23204826012975104LL,
+ // 32*2^59, 33*2^59
+ 19LL, 599665578316398592LL, 20LL, 176126330619822080LL,
+ // 34*2^59, 35*2^59
+ 20LL, 752587082923245568LL, 21LL, 329047835226669056LL,
+ // 36*2^59, 37*2^59
+ 21LL, 905508587530092544LL, 22LL, 481969339833516032LL,
+ // 38*2^59, 39*2^59
+ 23LL, 58430092136939520LL, 23LL, 634890844440363008LL,
+ // 40*2^59, 41*2^59
+ 24LL, 211351596743786496LL, 24LL, 787812349047209984LL,
+ // 42*2^59, 43*2^59
+ 25LL, 364273101350633472LL, 25LL, 940733853654056960LL,
+ // 44*2^59, 45*2^59
+ 26LL, 517194605957480448LL, 27LL, 93655358260903936LL,
+ // 46*2^59, 47*2^59
+ 27LL, 670116110564327424LL, 28LL, 246576862867750912LL,
+ // 48*2^59, 49*2^59
+ 28LL, 823037615171174400LL, 29LL, 399498367474597888LL,
+ // 50*2^59, 51*2^59
+ 29LL, 975959119778021376LL, 30LL, 552419872081444864LL,
+ // 52*2^59, 53*2^59
+ 31LL, 128880624384868352LL, 31LL, 705341376688291840LL,
+ // 54*2^59, 55*2^59
+ 32LL, 281802128991715328LL, 32LL, 858262881295138816LL,
+ // 56*2^59, 57*2^59
+ 33LL, 434723633598562304LL, 34LL, 11184385901985792LL,
+ // 58*2^59, 59*2^59
+ 34LL, 587645138205409280LL, 35LL, 164105890508832768LL,
+ // 60*2^59, 61*2^59
+ 35LL, 740566642812256256LL, 36LL, 317027395115679744LL,
+ // 62*2^59, 63*2^59
+ },
+
+ {
+ // 2^65 = 36*10^18 + 893488147419103232
+ 0LL, 0LL, 36LL, 893488147419103232LL,
+ // 0*2^65, 1*2^65
+ 73LL, 786976294838206464LL, 110LL, 680464442257309696LL,
+ // 2*2^65, 3*2^65
+ 147LL, 573952589676412928LL, 184LL, 467440737095516160LL,
+ // 4*2^65, 5*2^65
+ 221LL, 360928884514619392LL, 258LL, 254417031933722624LL,
+ // 6*2^65, 7*2^65
+ 295LL, 147905179352825856LL, 332LL, 41393326771929088LL,
+ // 8*2^65, 9*2^65
+ 368LL, 934881474191032320LL, 405LL, 828369621610135552LL,
+ // 0*2^65, 1*2^65
+ 442LL, 721857769029238784LL, 479LL, 615345916448342016LL,
+ // 2*2^65, 3*2^65
+ 516LL, 508834063867445248LL, 553LL, 402322211286548480LL,
+ // 4*2^65, 5*2^65
+ 590LL, 295810358705651712LL, 627LL, 189298506124754944LL,
+ // 6*2^65, 7*2^65
+ 664LL, 82786653543858176LL, 700LL, 976274800962961408LL,
+ // 8*2^65, 9*2^65
+ 737LL, 869762948382064640LL, 774LL, 763251095801167872LL,
+ // 0*2^65, 1*2^65
+ 811LL, 656739243220271104LL, 848LL, 550227390639374336LL,
+ // 2*2^65, 3*2^65
+ 885LL, 443715538058477568LL, 922LL, 337203685477580800LL,
+ // 4*2^65, 5*2^65
+ 959LL, 230691832896684032LL, 996LL, 124179980315787264LL,
+ // 6*2^65, 7*2^65
+ 1033LL, 17668127734890496LL, 1069LL, 911156275153993728LL,
+ // 8*2^65, 9*2^65
+ 1106LL, 804644422573096960LL, 1143LL, 698132569992200192LL,
+ // 0*2^65, 1*2^65
+ 1180LL, 591620717411303424LL, 1217LL, 485108864830406656LL,
+ // 2*2^65, 3*2^65
+ 1254LL, 378597012249509888LL, 1291LL, 272085159668613120LL,
+ // 4*2^65, 5*2^65
+ 1328LL, 165573307087716352LL, 1365LL, 59061454506819584LL,
+ // 6*2^65, 7*2^65
+ 1401LL, 952549601925922816LL, 1438LL, 846037749345026048LL,
+ // 8*2^65, 9*2^65
+ 1475LL, 739525896764129280LL, 1512LL, 633014044183232512LL,
+ // 0*2^65, 1*2^65
+ 1549LL, 526502191602335744LL, 1586LL, 419990339021438976LL,
+ // 2*2^65, 3*2^65
+ 1623LL, 313478486440542208LL, 1660LL, 206966633859645440LL,
+ // 4*2^65, 5*2^65
+ 1697LL, 100454781278748672LL, 1733LL, 993942928697851904LL,
+ // 6*2^65, 7*2^65
+ 1770LL, 887431076116955136LL, 1807LL, 780919223536058368LL,
+ // 8*2^65, 9*2^65
+ 1844LL, 674407370955161600LL, 1881LL, 567895518374264832LL,
+ // 0*2^65, 1*2^65
+ 1918LL, 461383665793368064LL, 1955LL, 354871813212471296LL,
+ // 2*2^65, 3*2^65
+ 1992LL, 248359960631574528LL, 2029LL, 141848108050677760LL,
+ // 4*2^65, 5*2^65
+ 2066LL, 35336255469780992LL, 2102LL, 928824402888884224LL,
+ // 6*2^65, 7*2^65
+ 2139LL, 822312550307987456LL, 2176LL, 715800697727090688LL,
+ // 8*2^65, 9*2^65
+ 2213LL, 609288845146193920LL, 2250LL, 502776992565297152LL,
+ // 0*2^65, 1*2^65
+ 2287LL, 396265139984400384LL, 2324LL, 289753287403503616LL,
+ // 2*2^65, 3*2^65
+ },
+
+ {
+ 0LL, 0LL, 2361LL, 183241434822606848LL,
+ 4722LL, 366482869645213696LL, 7083LL, 549724304467820544LL,
+ 9444LL, 732965739290427392LL, 11805LL, 916207174113034240LL,
+ 14167LL, 99448608935641088LL, 16528LL, 282690043758247936LL,
+ 18889LL, 465931478580854784LL, 21250LL, 649172913403461632LL,
+ 23611LL, 832414348226068480LL, 25973LL, 15655783048675328LL,
+ 28334LL, 198897217871282176LL, 30695LL, 382138652693889024LL,
+ 33056LL, 565380087516495872LL, 35417LL, 748621522339102720LL,
+ 37778LL, 931862957161709568LL, 40140LL, 115104391984316416LL,
+ 42501LL, 298345826806923264LL, 44862LL, 481587261629530112LL,
+ 47223LL, 664828696452136960LL, 49584LL, 848070131274743808LL,
+ 51946LL, 31311566097350656LL, 54307LL, 214553000919957504LL,
+ 56668LL, 397794435742564352LL, 59029LL, 581035870565171200LL,
+ 61390LL, 764277305387778048LL, 63751LL, 947518740210384896LL,
+ 66113LL, 130760175032991744LL, 68474LL, 314001609855598592LL,
+ 70835LL, 497243044678205440LL, 73196LL, 680484479500812288LL,
+ 75557LL, 863725914323419136LL, 77919LL, 46967349146025984LL,
+ 80280LL, 230208783968632832LL, 82641LL, 413450218791239680LL,
+ 85002LL, 596691653613846528LL, 87363LL, 779933088436453376LL,
+ 89724LL, 963174523259060224LL, 92086LL, 146415958081667072LL,
+ 94447LL, 329657392904273920LL, 96808LL, 512898827726880768LL,
+ 99169LL, 696140262549487616LL, 101530LL, 879381697372094464LL,
+ 103892LL, 62623132194701312LL, 106253LL, 245864567017308160LL,
+ 108614LL, 429106001839915008LL, 110975LL, 612347436662521856LL,
+ 113336LL, 795588871485128704LL, 115697LL, 978830306307735552LL,
+ 118059LL, 162071741130342400LL, 120420LL, 345313175952949248LL,
+ 122781LL, 528554610775556096LL, 125142LL, 711796045598162944LL,
+ 127503LL, 895037480420769792LL, 129865LL, 78278915243376640LL,
+ 132226LL, 261520350065983488LL, 134587LL, 444761784888590336LL,
+ 136948LL, 628003219711197184LL, 139309LL, 811244654533804032LL,
+ 141670LL, 994486089356410880LL, 144032LL, 177727524179017728LL,
+ 146393LL, 360968959001624576LL, 148754LL, 544210393824231424LL,
+ },
+
+ {
+ 0LL, 0LL, 151115LL, 727451828646838272LL,
+ 302231LL, 454903657293676544LL, 453347LL, 182355485940514816LL,
+ 604462LL, 909807314587353088LL, 755578LL, 637259143234191360LL,
+ 906694LL, 364710971881029632LL, 1057810LL, 92162800527867904LL,
+ 1208925LL, 819614629174706176LL, 1360041LL, 547066457821544448LL,
+ 1511157LL, 274518286468382720LL, 1662273LL, 1970115115220992LL,
+ 1813388LL, 729421943762059264LL, 1964504LL, 456873772408897536LL,
+ 2115620LL, 184325601055735808LL, 2266735LL, 911777429702574080LL,
+ 2417851LL, 639229258349412352LL, 2568967LL, 366681086996250624LL,
+ 2720083LL, 94132915643088896LL, 2871198LL, 821584744289927168LL,
+ 3022314LL, 549036572936765440LL, 3173430LL, 276488401583603712LL,
+ 3324546LL, 3940230230441984LL, 3475661LL, 731392058877280256LL,
+ 3626777LL, 458843887524118528LL, 3777893LL, 186295716170956800LL,
+ 3929008LL, 913747544817795072LL, 4080124LL, 641199373464633344LL,
+ 4231240LL, 368651202111471616LL, 4382356LL, 96103030758309888LL,
+ 4533471LL, 823554859405148160LL, 4684587LL, 551006688051986432LL,
+ 4835703LL, 278458516698824704LL, 4986819LL, 5910345345662976LL,
+ 5137934LL, 733362173992501248LL, 5289050LL, 460814002639339520LL,
+ 5440166LL, 188265831286177792LL, 5591281LL, 915717659933016064LL,
+ 5742397LL, 643169488579854336LL, 5893513LL, 370621317226692608LL,
+ 6044629LL, 98073145873530880LL, 6195744LL, 825524974520369152LL,
+ 6346860LL, 552976803167207424LL, 6497976LL, 280428631814045696LL,
+ 6649092LL, 7880460460883968LL, 6800207LL, 735332289107722240LL,
+ 6951323LL, 462784117754560512LL, 7102439LL, 190235946401398784LL,
+ 7253554LL, 917687775048237056LL, 7404670LL, 645139603695075328LL,
+ 7555786LL, 372591432341913600LL, 7706902LL, 100043260988751872LL,
+ 7858017LL, 827495089635590144LL, 8009133LL, 554946918282428416LL,
+ 8160249LL, 282398746929266688LL, 8311365LL, 9850575576104960LL,
+ 8462480LL, 737302404222943232LL, 8613596LL, 464754232869781504LL,
+ 8764712LL, 192206061516619776LL, 8915827LL, 919657890163458048LL,
+ 9066943LL, 647109718810296320LL, 9218059LL, 374561547457134592LL,
+ 9369175LL, 102013376103972864LL, 9520290LL, 829465204750811136LL,
+ },
+
+ {
+ 0LL, 0LL, 9671406LL, 556917033397649408LL,
+ 19342813LL, 113834066795298816LL, 29014219LL, 670751100192948224LL,
+ 38685626LL, 227668133590597632LL, 48357032LL, 784585166988247040LL,
+ 58028439LL, 341502200385896448LL, 67699845LL, 898419233783545856LL,
+ 77371252LL, 455336267181195264LL, 87042659LL, 12253300578844672LL,
+ 96714065LL, 569170333976494080LL, 106385472LL, 126087367374143488LL,
+ 116056878LL, 683004400771792896LL, 125728285LL, 239921434169442304LL,
+ 135399691LL, 796838467567091712LL, 145071098LL, 353755500964741120LL,
+ 154742504LL, 910672534362390528LL, 164413911LL, 467589567760039936LL,
+ 174085318LL, 24506601157689344LL, 183756724LL, 581423634555338752LL,
+ 193428131LL, 138340667952988160LL, 203099537LL, 695257701350637568LL,
+ 212770944LL, 252174734748286976LL, 222442350LL, 809091768145936384LL,
+ 232113757LL, 366008801543585792LL, 241785163LL, 922925834941235200LL,
+ 251456570LL, 479842868338884608LL, 261127977LL, 36759901736534016LL,
+ 270799383LL, 593676935134183424LL, 280470790LL, 150593968531832832LL,
+ 290142196LL, 707511001929482240LL, 299813603LL, 264428035327131648LL,
+ 309485009LL, 821345068724781056LL, 319156416LL, 378262102122430464LL,
+ 328827822LL, 935179135520079872LL, 338499229LL, 492096168917729280LL,
+ 348170636LL, 49013202315378688LL, 357842042LL, 605930235713028096LL,
+ 367513449LL, 162847269110677504LL, 377184855LL, 719764302508326912LL,
+ 386856262LL, 276681335905976320LL, 396527668LL, 833598369303625728LL,
+ 406199075LL, 390515402701275136LL, 415870481LL, 947432436098924544LL,
+ 425541888LL, 504349469496573952LL, 435213295LL, 61266502894223360LL,
+ 444884701LL, 618183536291872768LL, 454556108LL, 175100569689522176LL,
+ 464227514LL, 732017603087171584LL, 473898921LL, 288934636484820992LL,
+ 483570327LL, 845851669882470400LL, 493241734LL, 402768703280119808LL,
+ 502913140LL, 959685736677769216LL, 512584547LL, 516602770075418624LL,
+ 522255954LL, 73519803473068032LL, 531927360LL, 630436836870717440LL,
+ 541598767LL, 187353870268366848LL, 551270173LL, 744270903666016256LL,
+ 560941580LL, 301187937063665664LL, 570612986LL, 858104970461315072LL,
+ 580284393LL, 415022003858964480LL, 589955799LL, 971939037256613888LL,
+ 599627206LL, 528856070654263296LL, 609298613LL, 85773104051912704LL,
+ },
+
+ {
+ 0LL, 0LL, 618970019LL, 642690137449562112LL,
+ 1237940039LL, 285380274899124224LL, 1856910058LL,
+ 928070412348686336LL,
+ 2475880078LL, 570760549798248448LL, 3094850098LL,
+ 213450687247810560LL,
+ 3713820117LL, 856140824697372672LL, 4332790137LL,
+ 498830962146934784LL,
+ 4951760157LL, 141521099596496896LL, 5570730176LL,
+ 784211237046059008LL,
+ 6189700196LL, 426901374495621120LL, 6808670216LL,
+ 69591511945183232LL,
+ 7427640235LL, 712281649394745344LL, 8046610255LL,
+ 354971786844307456LL,
+ 8665580274LL, 997661924293869568LL, 9284550294LL,
+ 640352061743431680LL,
+ 9903520314LL, 283042199192993792LL, 10522490333LL,
+ 925732336642555904LL,
+ 11141460353LL, 568422474092118016LL, 11760430373LL,
+ 211112611541680128LL,
+ 12379400392LL, 853802748991242240LL, 12998370412LL,
+ 496492886440804352LL,
+ 13617340432LL, 139183023890366464LL, 14236310451LL,
+ 781873161339928576LL,
+ 14855280471LL, 424563298789490688LL, 15474250491LL,
+ 67253436239052800LL,
+ 16093220510LL, 709943573688614912LL, 16712190530LL,
+ 352633711138177024LL,
+ 17331160549LL, 995323848587739136LL, 17950130569LL,
+ 638013986037301248LL,
+ 18569100589LL, 280704123486863360LL, 19188070608LL,
+ 923394260936425472LL,
+ 19807040628LL, 566084398385987584LL, 20426010648LL,
+ 208774535835549696LL,
+ 21044980667LL, 851464673285111808LL, 21663950687LL,
+ 494154810734673920LL,
+ 22282920707LL, 136844948184236032LL, 22901890726LL,
+ 779535085633798144LL,
+ 23520860746LL, 422225223083360256LL, 24139830766LL,
+ 64915360532922368LL,
+ 24758800785LL, 707605497982484480LL, 25377770805LL,
+ 350295635432046592LL,
+ 25996740824LL, 992985772881608704LL, 26615710844LL,
+ 635675910331170816LL,
+ 27234680864LL, 278366047780732928LL, 27853650883LL,
+ 921056185230295040LL,
+ 28472620903LL, 563746322679857152LL, 29091590923LL,
+ 206436460129419264LL,
+ 29710560942LL, 849126597578981376LL, 30329530962LL,
+ 491816735028543488LL,
+ 30948500982LL, 134506872478105600LL, 31567471001LL,
+ 777197009927667712LL,
+ 32186441021LL, 419887147377229824LL, 32805411041LL,
+ 62577284826791936LL,
+ 33424381060LL, 705267422276354048LL, 34043351080LL,
+ 347957559725916160LL,
+ 34662321099LL, 990647697175478272LL, 35281291119LL,
+ 633337834625040384LL,
+ 35900261139LL, 276027972074602496LL, 36519231158LL,
+ 918718109524164608LL,
+ 37138201178LL, 561408246973726720LL, 37757171198LL,
+ 204098384423288832LL,
+ 38376141217LL, 846788521872850944LL, 38995111237LL,
+ 489478659322413056LL,
+ },
+
+ {
+ 0LL, 0LL, 39614081257LL, 132168796771975168LL,
+ 79228162514LL, 264337593543950336LL, 118842243771LL,
+ 396506390315925504LL,
+ 158456325028LL, 528675187087900672LL, 198070406285LL,
+ 660843983859875840LL,
+ 237684487542LL, 793012780631851008LL, 277298568799LL,
+ 925181577403826176LL,
+ 316912650057LL, 57350374175801344LL, 356526731314LL,
+ 189519170947776512LL,
+ 396140812571LL, 321687967719751680LL, 435754893828LL,
+ 453856764491726848LL,
+ 475368975085LL, 586025561263702016LL, 514983056342LL,
+ 718194358035677184LL,
+ 554597137599LL, 850363154807652352LL, 594211218856LL,
+ 982531951579627520LL,
+ 633825300114LL, 114700748351602688LL, 673439381371LL,
+ 246869545123577856LL,
+ 713053462628LL, 379038341895553024LL, 752667543885LL,
+ 511207138667528192LL,
+ 792281625142LL, 643375935439503360LL, 831895706399LL,
+ 775544732211478528LL,
+ 871509787656LL, 907713528983453696LL, 911123868914LL,
+ 39882325755428864LL,
+ 950737950171LL, 172051122527404032LL, 990352031428LL,
+ 304219919299379200LL,
+ 1029966112685LL, 436388716071354368LL, 1069580193942LL,
+ 568557512843329536LL,
+ 1109194275199LL, 700726309615304704LL, 1148808356456LL,
+ 832895106387279872LL,
+ 1188422437713LL, 965063903159255040LL, 1228036518971LL,
+ 97232699931230208LL,
+ 1267650600228LL, 229401496703205376LL, 1307264681485LL,
+ 361570293475180544LL,
+ 1346878762742LL, 493739090247155712LL, 1386492843999LL,
+ 625907887019130880LL,
+ 1426106925256LL, 758076683791106048LL, 1465721006513LL,
+ 890245480563081216LL,
+ 1505335087771LL, 22414277335056384LL, 1544949169028LL,
+ 154583074107031552LL,
+ 1584563250285LL, 286751870879006720LL, 1624177331542LL,
+ 418920667650981888LL,
+ 1663791412799LL, 551089464422957056LL, 1703405494056LL,
+ 683258261194932224LL,
+ 1743019575313LL, 815427057966907392LL, 1782633656570LL,
+ 947595854738882560LL,
+ 1822247737828LL, 79764651510857728LL, 1861861819085LL,
+ 211933448282832896LL,
+ 1901475900342LL, 344102245054808064LL, 1941089981599LL,
+ 476271041826783232LL,
+ 1980704062856LL, 608439838598758400LL, 2020318144113LL,
+ 740608635370733568LL,
+ 2059932225370LL, 872777432142708736LL, 2099546306628LL,
+ 4946228914683904LL,
+ 2139160387885LL, 137115025686659072LL, 2178774469142LL,
+ 269283822458634240LL,
+ 2218388550399LL, 401452619230609408LL, 2258002631656LL,
+ 533621416002584576LL,
+ 2297616712913LL, 665790212774559744LL, 2337230794170LL,
+ 797959009546534912LL,
+ 2376844875427LL, 930127806318510080LL, 2416458956685LL,
+ 62296603090485248LL,
+ 2456073037942LL, 194465399862460416LL, 2495687119199LL,
+ 326634196634435584LL,
+ },
+
+ {
+ 0LL, 0LL, 2535301200456LL, 458802993406410752LL,
+ 5070602400912LL, 917605986812821504LL, 7605903601369LL,
+ 376408980219232256LL,
+ 10141204801825LL, 835211973625643008LL, 12676506002282LL,
+ 294014967032053760LL,
+ 15211807202738LL, 752817960438464512LL, 17747108403195LL,
+ 211620953844875264LL,
+ 20282409603651LL, 670423947251286016LL, 22817710804108LL,
+ 129226940657696768LL,
+ 25353012004564LL, 588029934064107520LL, 27888313205021LL,
+ 46832927470518272LL,
+ 30423614405477LL, 505635920876929024LL, 32958915605933LL,
+ 964438914283339776LL,
+ 35494216806390LL, 423241907689750528LL, 38029518006846LL,
+ 882044901096161280LL,
+ 40564819207303LL, 340847894502572032LL, 43100120407759LL,
+ 799650887908982784LL,
+ 45635421608216LL, 258453881315393536LL, 48170722808672LL,
+ 717256874721804288LL,
+ 50706024009129LL, 176059868128215040LL, 53241325209585LL,
+ 634862861534625792LL,
+ 55776626410042LL, 93665854941036544LL, 58311927610498LL,
+ 552468848347447296LL,
+ 60847228810955LL, 11271841753858048LL, 63382530011411LL,
+ 470074835160268800LL,
+ 65917831211867LL, 928877828566679552LL, 68453132412324LL,
+ 387680821973090304LL,
+ 70988433612780LL, 846483815379501056LL, 73523734813237LL,
+ 305286808785911808LL,
+ 76059036013693LL, 764089802192322560LL, 78594337214150LL,
+ 222892795598733312LL,
+ 81129638414606LL, 681695789005144064LL, 83664939615063LL,
+ 140498782411554816LL,
+ 86200240815519LL, 599301775817965568LL, 88735542015976LL,
+ 58104769224376320LL,
+ 91270843216432LL, 516907762630787072LL, 93806144416888LL,
+ 975710756037197824LL,
+ 96341445617345LL, 434513749443608576LL, 98876746817801LL,
+ 893316742850019328LL,
+ 101412048018258LL, 352119736256430080LL, 103947349218714LL,
+ 810922729662840832LL,
+ 106482650419171LL, 269725723069251584LL, 109017951619627LL,
+ 728528716475662336LL,
+ 111553252820084LL, 187331709882073088LL, 114088554020540LL,
+ 646134703288483840LL,
+ 116623855220997LL, 104937696694894592LL, 119159156421453LL,
+ 563740690101305344LL,
+ 121694457621910LL, 22543683507716096LL, 124229758822366LL,
+ 481346676914126848LL,
+ 126765060022822LL, 940149670320537600LL, 129300361223279LL,
+ 398952663726948352LL,
+ 131835662423735LL, 857755657133359104LL, 134370963624192LL,
+ 316558650539769856LL,
+ 136906264824648LL, 775361643946180608LL, 139441566025105LL,
+ 234164637352591360LL,
+ 141976867225561LL, 692967630759002112LL, 144512168426018LL,
+ 151770624165412864LL,
+ 147047469626474LL, 610573617571823616LL, 149582770826931LL,
+ 69376610978234368LL,
+ 152118072027387LL, 528179604384645120LL, 154653373227843LL,
+ 986982597791055872LL,
+ 157188674428300LL, 445785591197466624LL, 159723975628756LL,
+ 904588584603877376LL,
+ },
+
+ {
+ 0LL, 0LL, 162259276829213LL, 363391578010288128LL,
+ 324518553658426LL, 726783156020576256LL, 486777830487640LL,
+ 90174734030864384LL,
+ 649037107316853LL, 453566312041152512LL, 811296384146066LL,
+ 816957890051440640LL,
+ 973555660975280LL, 180349468061728768LL, 1135814937804493LL,
+ 543741046072016896LL,
+ 1298074214633706LL, 907132624082305024LL, 1460333491462920LL,
+ 270524202092593152LL,
+ 1622592768292133LL, 633915780102881280LL, 1784852045121346LL,
+ 997307358113169408LL,
+ 1947111321950560LL, 360698936123457536LL, 2109370598779773LL,
+ 724090514133745664LL,
+ 2271629875608987LL, 87482092144033792LL, 2433889152438200LL,
+ 450873670154321920LL,
+ 2596148429267413LL, 814265248164610048LL, 2758407706096627LL,
+ 177656826174898176LL,
+ 2920666982925840LL, 541048404185186304LL, 3082926259755053LL,
+ 904439982195474432LL,
+ 3245185536584267LL, 267831560205762560LL, 3407444813413480LL,
+ 631223138216050688LL,
+ 3569704090242693LL, 994614716226338816LL, 3731963367071907LL,
+ 358006294236626944LL,
+ 3894222643901120LL, 721397872246915072LL, 4056481920730334LL,
+ 84789450257203200LL,
+ 4218741197559547LL, 448181028267491328LL, 4381000474388760LL,
+ 811572606277779456LL,
+ 4543259751217974LL, 174964184288067584LL, 4705519028047187LL,
+ 538355762298355712LL,
+ 4867778304876400LL, 901747340308643840LL, 5030037581705614LL,
+ 265138918318931968LL,
+ 5192296858534827LL, 628530496329220096LL, 5354556135364040LL,
+ 991922074339508224LL,
+ 5516815412193254LL, 355313652349796352LL, 5679074689022467LL,
+ 718705230360084480LL,
+ 5841333965851681LL, 82096808370372608LL, 6003593242680894LL,
+ 445488386380660736LL,
+ 6165852519510107LL, 808879964390948864LL, 6328111796339321LL,
+ 172271542401236992LL,
+ 6490371073168534LL, 535663120411525120LL, 6652630349997747LL,
+ 899054698421813248LL,
+ 6814889626826961LL, 262446276432101376LL, 6977148903656174LL,
+ 625837854442389504LL,
+ 7139408180485387LL, 989229432452677632LL, 7301667457314601LL,
+ 352621010462965760LL,
+ 7463926734143814LL, 716012588473253888LL, 7626186010973028LL,
+ 79404166483542016LL,
+ 7788445287802241LL, 442795744493830144LL, 7950704564631454LL,
+ 806187322504118272LL,
+ 8112963841460668LL, 169578900514406400LL, 8275223118289881LL,
+ 532970478524694528LL,
+ 8437482395119094LL, 896362056534982656LL, 8599741671948308LL,
+ 259753634545270784LL,
+ 8762000948777521LL, 623145212555558912LL, 8924260225606734LL,
+ 986536790565847040LL,
+ 9086519502435948LL, 349928368576135168LL, 9248778779265161LL,
+ 713319946586423296LL,
+ 9411038056094375LL, 76711524596711424LL, 9573297332923588LL,
+ 440103102606999552LL,
+ 9735556609752801LL, 803494680617287680LL, 9897815886582015LL,
+ 166886258627575808LL,
+ 10060075163411228LL, 530277836637863936LL, 10222334440240441LL,
+ 893669414648152064LL}
+};
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_add.c b/gcc-4.9/libgcc/config/libbid/bid128_add.c
new file mode 100644
index 000000000..a59430780
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_add.c
@@ -0,0 +1,2941 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64dq_add (UINT64 * pres, UINT64 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64dq_add (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qq_add (&res, &x1, py
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid64qq_add (x1, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qd_add (UINT64 * pres, UINT128 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qd_add (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qq_add (&res, px, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid64qq_add (x, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qq_add (UINT64 * pres, UINT128 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qq_add (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 one = { {0x0000000000000001ull, 0x3040000000000000ull}
+ };
+ UINT64 res = 0xbaddbaddbaddbaddull;
+
+ BID_SWAP128 (one);
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64qqq_fma (&res, &one, &x, &y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid64qqq_fma (one, x, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dd_add (UINT128 * pres, UINT64 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dd_add (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 x1, y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_add (&res, &x1, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_add (x1, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dq_add (UINT128 * pres, UINT64 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dq_add (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_add (&res, &x1, py
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_add (x1, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128qd_add (UINT128 * pres, UINT128 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128qd_add (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_add (&res, px, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_add (x, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+// bid128_add stands for bid128qq_add
+
+
+/*****************************************************************************
+ * BID64/BID128 sub
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64dq_sub (UINT64 * pres, UINT64 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64dq_sub (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qq_sub (&res, &x1, py
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid64qq_sub (x1, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qd_sub (UINT64 * pres, UINT128 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qd_sub (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qq_sub (&res, px, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid64qq_sub (x, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qq_sub (UINT64 * pres, UINT128 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qq_sub (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 one = { {0x0000000000000001ull, 0x3040000000000000ull}
+ };
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 y_sign;
+
+ BID_SWAP128 (one);
+ if ((y.w[HIGH_128W] & MASK_NAN) != MASK_NAN) { // y is not NAN
+ // change its sign
+ y_sign = y.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ if (y_sign)
+ y.w[HIGH_128W] = y.w[HIGH_128W] & 0x7fffffffffffffffull;
+ else
+ y.w[HIGH_128W] = y.w[HIGH_128W] | 0x8000000000000000ull;
+ }
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64qqq_fma (&res, &one, &x, &y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid64qqq_fma (one, x, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dd_sub (UINT128 * pres, UINT64 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dd_sub (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 x1, y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_sub (&res, &x1, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_sub (x1, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dq_sub (UINT128 * pres, UINT64 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dq_sub (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_sub (&res, &x1, py
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_sub (x1, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128qd_sub (UINT128 * pres, UINT128 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128qd_sub (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_sub (&res, px, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_sub (x, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_add (UINT128 * pres, UINT128 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128_add (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT64 x_sign, y_sign, tmp_sign;
+ UINT64 x_exp, y_exp, tmp_exp; // e1 = x_exp, e2 = y_exp
+ UINT64 C1_hi, C2_hi, tmp_signif_hi;
+ UINT64 C1_lo, C2_lo, tmp_signif_lo;
+ // Note: C1.w[1], C1.w[0] represent C1_hi, C1_lo (all UINT64)
+ // Note: C2.w[1], C2.w[0] represent C2_hi, C2_lo (all UINT64)
+ UINT64 tmp64, tmp64A, tmp64B;
+ BID_UI64DOUBLE tmp1, tmp2;
+ int x_nr_bits, y_nr_bits;
+ int q1, q2, delta, scale, x1, ind, shift, tmp_inexact = 0;
+ UINT64 halfulp64;
+ UINT128 halfulp128;
+ UINT128 C1, C2;
+ UINT128 ten2m1;
+ UINT128 highf2star; // top 128 bits in f2*; low 128 bits in R256[1], R256[0]
+ UINT256 P256, Q256, R256;
+ int is_inexact = 0, is_midpoint_lt_even = 0, is_midpoint_gt_even = 0;
+ int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ int second_pass = 0;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ y_sign = y.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaN or Infinity
+ if (((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL)
+ || ((y.w[1] & MASK_SPECIAL) == MASK_SPECIAL)) {
+ // x is special or y is special
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull)
+ && (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull;
+ // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull;
+ // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ // if y = SNaN signal invalid exception
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ // check first for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull)
+ && (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (y)
+ res.w[1] = y.w[1] & 0xfc003fffffffffffull;
+ // clear out also G[6]-G[16]
+ res.w[0] = y.w[0];
+ } else { // y is QNaN
+ // return y
+ res.w[1] = y.w[1] & 0xfc003fffffffffffull;
+ // clear out G[6]-G[16]
+ res.w[0] = y.w[0];
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ } else { // neither x not y is NaN; at least one is infinity
+ if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x is infinity
+ if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y is infinity
+ // if same sign, return either of them
+ if ((x.w[1] & MASK_SIGN) == (y.w[1] & MASK_SIGN)) {
+ res.w[1] = x_sign | MASK_INF;
+ res.w[0] = 0x0ull;
+ } else { // x and y are infinities of opposite signs
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return QNaN Indefinite
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ } else { // y is 0 or finite
+ // return x
+ res.w[1] = x_sign | MASK_INF;
+ res.w[0] = 0x0ull;
+ }
+ } else { // x is not NaN or infinity, so y must be infinity
+ res.w[1] = y_sign | MASK_INF;
+ res.w[0] = 0x0ull;
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ }
+ }
+ // unpack the arguments
+
+ // unpack x
+ C1_hi = x.w[1] & MASK_COEFF;
+ C1_lo = x.w[0];
+ // test for non-canonical values:
+ // - values whose encoding begins with x00, x01, or x10 and whose
+ // coefficient is larger than 10^34 -1, or
+ // - values whose encoding begins with x1100, x1101, x1110 (if NaNs
+ // and infinitis were eliminated already this test is reduced to
+ // checking for x10x)
+
+ // x is not infinity; check for non-canonical values - treated as zero
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ // G0_G1=11; non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1_hi = 0; // significand high
+ C1_lo = 0; // significand low
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1_hi > 0x0001ed09bead87c0ull ||
+ (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1_hi = 0;
+ C1_lo = 0;
+ } else { // canonical
+ ;
+ }
+ }
+
+ // unpack y
+ C2_hi = y.w[1] & MASK_COEFF;
+ C2_lo = y.w[0];
+ // y is not infinity; check for non-canonical values - treated as zero
+ if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ // G0_G1=11; non-canonical
+ y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C2_hi = 0; // significand high
+ C2_lo = 0; // significand low
+ } else { // G0_G1 != 11
+ y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C2_hi > 0x0001ed09bead87c0ull ||
+ (C2_hi == 0x0001ed09bead87c0ull
+ && C2_lo > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ C2_hi = 0;
+ C2_lo = 0;
+ } else { // canonical
+ ;
+ }
+ }
+
+ if ((C1_hi == 0x0ull) && (C1_lo == 0x0ull)) {
+ // x is 0 and y is not special
+ // if y is 0 return 0 with the smaller exponent
+ if ((C2_hi == 0x0ull) && (C2_lo == 0x0ull)) {
+ if (x_exp < y_exp)
+ res.w[1] = x_exp;
+ else
+ res.w[1] = y_exp;
+ if (x_sign && y_sign)
+ res.w[1] = res.w[1] | x_sign; // both negative
+ else if (rnd_mode == ROUNDING_DOWN && x_sign != y_sign)
+ res.w[1] = res.w[1] | 0x8000000000000000ull; // -0
+ // else; // res = +0
+ res.w[0] = 0;
+ } else {
+ // for 0 + y return y, with the preferred exponent
+ if (y_exp <= x_exp) {
+ res.w[1] = y.w[1];
+ res.w[0] = y.w[0];
+ } else { // if y_exp > x_exp
+ // return (C2 * 10^scale) * 10^(y_exp - scale)
+ // where scale = min (P34-q2, y_exp-x_exp)
+ // determine q2 = nr. of decimal digits in y
+ // determine first the nr. of bits in y (y_nr_bits)
+
+ if (C2_hi == 0) { // y_bits is the nr. of bits in C2_lo
+ if (C2_lo >= 0x0020000000000000ull) { // y >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid
+ // rounding errors
+ if (C2_lo >= 0x0000000100000000ull) { // y >= 2^32
+ tmp2.d = (double) (C2_lo >> 32); // exact conversion
+ y_nr_bits =
+ 32 +
+ ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // y < 2^32
+ tmp2.d = (double) (C2_lo); // exact conversion
+ y_nr_bits =
+ ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if y < 2^53
+ tmp2.d = (double) C2_lo; // exact conversion
+ y_nr_bits =
+ ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C2_hi != 0 => nr. bits = 64 + nr_bits (C2_hi)
+ tmp2.d = (double) C2_hi; // exact conversion
+ y_nr_bits =
+ 64 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q2 = nr_digits[y_nr_bits].digits;
+ if (q2 == 0) {
+ q2 = nr_digits[y_nr_bits].digits1;
+ if (C2_hi > nr_digits[y_nr_bits].threshold_hi ||
+ (C2_hi == nr_digits[y_nr_bits].threshold_hi &&
+ C2_lo >= nr_digits[y_nr_bits].threshold_lo))
+ q2++;
+ }
+ // return (C2 * 10^scale) * 10^(y_exp - scale)
+ // where scale = min (P34-q2, y_exp-x_exp)
+ scale = P34 - q2;
+ ind = (y_exp - x_exp) >> 49;
+ if (ind < scale)
+ scale = ind;
+ if (scale == 0) {
+ res.w[1] = y.w[1];
+ res.w[0] = y.w[0];
+ } else if (q2 <= 19) { // y fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C2_lo * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C2_lo, ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C2_lo * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C2_lo, ten2k128[scale - 20]);
+ }
+ } else { // y fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C2
+ C2.w[1] = C2_hi;
+ C2.w[0] = C2_lo;
+ __mul_128x64_to_128 (res, ten2k64[scale], C2);
+ }
+ // subtract scale from the exponent
+ y_exp = y_exp - ((UINT64) scale << 49);
+ res.w[1] = res.w[1] | y_sign | y_exp;
+ }
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ } else if ((C2_hi == 0x0ull) && (C2_lo == 0x0ull)) {
+ // y is 0 and x is not special, and not zero
+ // for x + 0 return x, with the preferred exponent
+ if (x_exp <= y_exp) {
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ } else { // if x_exp > y_exp
+ // return (C1 * 10^scale) * 10^(x_exp - scale)
+ // where scale = min (P34-q1, x_exp-y_exp)
+ // determine q1 = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1_hi == 0) { // x_bits is the nr. of bits in C1_lo
+ if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid
+ // rounding errors
+ if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1_lo >> 32); // exact conversion
+ x_nr_bits =
+ 32 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) -
+ 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1_lo); // exact conversion
+ x_nr_bits =
+ ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1_lo; // exact conversion
+ x_nr_bits =
+ ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi)
+ tmp1.d = (double) C1_hi; // exact conversion
+ x_nr_bits =
+ 64 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q1 = nr_digits[x_nr_bits].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits].digits1;
+ if (C1_hi > nr_digits[x_nr_bits].threshold_hi ||
+ (C1_hi == nr_digits[x_nr_bits].threshold_hi &&
+ C1_lo >= nr_digits[x_nr_bits].threshold_lo))
+ q1++;
+ }
+ // return (C1 * 10^scale) * 10^(x_exp - scale)
+ // where scale = min (P34-q1, x_exp-y_exp)
+ scale = P34 - q1;
+ ind = (x_exp - y_exp) >> 49;
+ if (ind < scale)
+ scale = ind;
+ if (scale == 0) {
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ } else if (q1 <= 19) { // x fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C1_lo * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C1_lo, ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C1_lo * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C1_lo, ten2k128[scale - 20]);
+ }
+ } else { // x fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C1
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ __mul_128x64_to_128 (res, ten2k64[scale], C1);
+ }
+ // subtract scale from the exponent
+ x_exp = x_exp - ((UINT64) scale << 49);
+ res.w[1] = res.w[1] | x_sign | x_exp;
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ } else { // x and y are not canonical, not special, and are not zero
+ // note that the result may still be zero, and then it has to have the
+ // preferred exponent
+ if (x_exp < y_exp) { // if exp_x < exp_y then swap x and y
+ tmp_sign = x_sign;
+ tmp_exp = x_exp;
+ tmp_signif_hi = C1_hi;
+ tmp_signif_lo = C1_lo;
+ x_sign = y_sign;
+ x_exp = y_exp;
+ C1_hi = C2_hi;
+ C1_lo = C2_lo;
+ y_sign = tmp_sign;
+ y_exp = tmp_exp;
+ C2_hi = tmp_signif_hi;
+ C2_lo = tmp_signif_lo;
+ }
+ // q1 = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1_hi == 0) { // x_bits is the nr. of bits in C1_lo
+ if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53
+ //split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1_lo >> 32); // exact conversion
+ x_nr_bits =
+ 32 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1_lo); // exact conversion
+ x_nr_bits =
+ ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1_lo; // exact conversion
+ x_nr_bits =
+ ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi)
+ tmp1.d = (double) C1_hi; // exact conversion
+ x_nr_bits =
+ 64 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+
+ q1 = nr_digits[x_nr_bits].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits].digits1;
+ if (C1_hi > nr_digits[x_nr_bits].threshold_hi ||
+ (C1_hi == nr_digits[x_nr_bits].threshold_hi &&
+ C1_lo >= nr_digits[x_nr_bits].threshold_lo))
+ q1++;
+ }
+ // q2 = nr. of decimal digits in y
+ // determine first the nr. of bits in y (y_nr_bits)
+ if (C2_hi == 0) { // y_bits is the nr. of bits in C2_lo
+ if (C2_lo >= 0x0020000000000000ull) { // y >= 2^53
+ //split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C2_lo >= 0x0000000100000000ull) { // y >= 2^32
+ tmp2.d = (double) (C2_lo >> 32); // exact conversion
+ y_nr_bits =
+ 32 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // y < 2^32
+ tmp2.d = (double) (C2_lo); // exact conversion
+ y_nr_bits =
+ ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if y < 2^53
+ tmp2.d = (double) C2_lo; // exact conversion
+ y_nr_bits =
+ ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C2_hi != 0 => nr. bits = 64 + nr_bits (C2_hi)
+ tmp2.d = (double) C2_hi; // exact conversion
+ y_nr_bits =
+ 64 + ((((unsigned int) (tmp2.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+
+ q2 = nr_digits[y_nr_bits].digits;
+ if (q2 == 0) {
+ q2 = nr_digits[y_nr_bits].digits1;
+ if (C2_hi > nr_digits[y_nr_bits].threshold_hi ||
+ (C2_hi == nr_digits[y_nr_bits].threshold_hi &&
+ C2_lo >= nr_digits[y_nr_bits].threshold_lo))
+ q2++;
+ }
+
+ delta = q1 + (int) (x_exp >> 49) - q2 - (int) (y_exp >> 49);
+
+ if (delta >= P34) {
+ // round the result directly because 0 < C2 < ulp (C1 * 10^(x_exp-e2))
+ // n = C1 * 10^e1 or n = C1 +/- 10^(q1-P34)) * 10^e1
+ // the result is inexact; the preferred exponent is the least possible
+
+ if (delta >= P34 + 1) {
+ // for RN the result is the operand with the larger magnitude,
+ // possibly scaled up by 10^(P34-q1)
+ // an overflow cannot occur in this case (rounding to nearest)
+ if (q1 < P34) { // scale C1 up by 10^(P34-q1)
+ // Note: because delta >= P34+1 it is certain that
+ // x_exp - ((UINT64)scale << 49) will stay above e_min
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ x_exp = x_exp - ((UINT64) scale << 49);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ }
+ // some special cases arise: if delta = P34 + 1 and C1 = 10^(P34-1)
+ // (after scaling) and x_sign != y_sign and C2 > 5*10^(q2-1) =>
+ // subtract 1 ulp
+ // Note: do this only for rounding to nearest; for other rounding
+ // modes the correction will be applied next
+ if ((rnd_mode == ROUNDING_TO_NEAREST
+ || rnd_mode == ROUNDING_TIES_AWAY) && delta == (P34 + 1)
+ && C1_hi == 0x0000314dc6448d93ull
+ && C1_lo == 0x38c15b0a00000000ull && x_sign != y_sign
+ && ((q2 <= 19 && C2_lo > midpoint64[q2 - 1]) || (q2 >= 20
+ && (C2_hi >
+ midpoint128
+ [q2 -
+ 20].
+ w[1]
+ ||
+ (C2_hi
+ ==
+ midpoint128
+ [q2 -
+ 20].
+ w[1]
+ &&
+ C2_lo
+ >
+ midpoint128
+ [q2 -
+ 20].
+ w
+ [0])))))
+ {
+ // C1 = 10^34 - 1 and decrement x_exp by 1 (no underflow possible)
+ C1_hi = 0x0001ed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((rnd_mode == ROUNDING_DOWN && x_sign && y_sign) ||
+ (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) {
+ // add 1 ulp and then check for overflow
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set overflow flag (the inexact flag was set too)
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else if ((rnd_mode == ROUNDING_DOWN && !x_sign && y_sign) ||
+ (rnd_mode == ROUNDING_UP && x_sign && !y_sign) ||
+ (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // subtract 1 ulp from C1
+ // Note: because delta >= P34 + 1 the result cannot be zero
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi = C1_hi - 1;
+ // if the coefficient is 10^33 - 1 then make it 10^34 - 1 and
+ // decrease the exponent by 1 (because delta >= P34 + 1 the
+ // exponent will not become less than e_min)
+ // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff
+ // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff
+ if (C1_hi == 0x0000314dc6448d93ull
+ && C1_lo == 0x38c15b09ffffffffull) {
+ // make C1 = 10^34 - 1
+ C1_hi = 0x0001ed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ } else {
+ ; // the result is already correct
+ }
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else { // delta = P34
+ // in most cases, the smaller operand may be < or = or > 1/2 ulp of the
+ // larger operand
+ // however, the case C1 = 10^(q1-1) and x_sign != y_sign is special due
+ // to accuracy loss after subtraction, and will be treated separately
+ if (x_sign == y_sign || (q1 <= 20
+ && (C1_hi != 0
+ || C1_lo != ten2k64[q1 - 1]))
+ || (q1 >= 21 && (C1_hi != ten2k128[q1 - 21].w[1]
+ || C1_lo != ten2k128[q1 - 21].w[0]))) {
+ // if x_sign == y_sign or C1 != 10^(q1-1)
+ // compare C2 with 1/2 ulp = 5 * 10^(q2-1), the latter read from table
+ // Note: cases q1<=19 and q1>=20 can be coalesced at some latency cost
+ if (q2 <= 19) { // C2 and 5*10^(q2-1) both fit in 64 bits
+ halfulp64 = midpoint64[q2 - 1]; // 5 * 10^(q2-1)
+ if (C2_lo < halfulp64) { // n2 < 1/2 ulp (n1)
+ // for RN the result is the operand with the larger magnitude,
+ // possibly scaled up by 10^(P34-q1)
+ // an overflow cannot occur in this case (rounding to nearest)
+ if (q1 < P34) { // scale C1 up by 10^(P34-q1)
+ // Note: because delta = P34 it is certain that
+ // x_exp - ((UINT64)scale << 49) will stay above e_min
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ x_exp = x_exp - ((UINT64) scale << 49);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((rnd_mode == ROUNDING_DOWN && x_sign && y_sign) ||
+ (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) {
+ // add 1 ulp and then check for overflow
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set overflow flag (the inexact flag was set too)
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else
+ if ((rnd_mode == ROUNDING_DOWN && !x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && x_sign && !y_sign)
+ || (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // subtract 1 ulp from C1
+ // Note: because delta >= P34 + 1 the result cannot be zero
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi = C1_hi - 1;
+ // if the coefficient is 10^33-1 then make it 10^34-1 and
+ // decrease the exponent by 1 (because delta >= P34 + 1 the
+ // exponent will not become less than e_min)
+ // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff
+ // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff
+ if (C1_hi == 0x0000314dc6448d93ull
+ && C1_lo == 0x38c15b09ffffffffull) {
+ // make C1 = 10^34 - 1
+ C1_hi = 0x0001ed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ } else {
+ ; // the result is already correct
+ }
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else if ((C2_lo == halfulp64)
+ && (q1 < P34 || ((C1_lo & 0x1) == 0))) {
+ // n2 = 1/2 ulp (n1) and C1 is even
+ // the result is the operand with the larger magnitude,
+ // possibly scaled up by 10^(P34-q1)
+ // an overflow cannot occur in this case (rounding to nearest)
+ if (q1 < P34) { // scale C1 up by 10^(P34-q1)
+ // Note: because delta = P34 it is certain that
+ // x_exp - ((UINT64)scale << 49) will stay above e_min
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ x_exp = x_exp - ((UINT64) scale << 49);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ }
+ if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign == y_sign
+ && (C1_lo & 0x01)) || (rnd_mode == ROUNDING_TIES_AWAY
+ && x_sign == y_sign)
+ || (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)
+ || (rnd_mode == ROUNDING_DOWN && x_sign && y_sign)) {
+ // add 1 ulp and then check for overflow
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set overflow flag (the inexact flag was set too)
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else
+ if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign != y_sign
+ && (C1_lo & 0x01)) || (rnd_mode == ROUNDING_DOWN
+ && !x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && x_sign && !y_sign)
+ || (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // subtract 1 ulp from C1
+ // Note: because delta >= P34 + 1 the result cannot be zero
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi = C1_hi - 1;
+ // if the coefficient is 10^33 - 1 then make it 10^34 - 1
+ // and decrease the exponent by 1 (because delta >= P34 + 1
+ // the exponent will not become less than e_min)
+ // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff
+ // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff
+ if (C1_hi == 0x0000314dc6448d93ull
+ && C1_lo == 0x38c15b09ffffffffull) {
+ // make C1 = 10^34 - 1
+ C1_hi = 0x0001ed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ } else {
+ ; // the result is already correct
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else { // if C2_lo > halfulp64 ||
+ // (C2_lo == halfulp64 && q1 == P34 && ((C1_lo & 0x1) == 1)), i.e.
+ // 1/2 ulp(n1) < n2 < 1 ulp(n1) or n2 = 1/2 ulp(n1) and C1 odd
+ // res = x+1 ulp if n1*n2 > 0 and res = x-1 ulp if n1*n2 < 0
+ if (q1 < P34) { // then 1 ulp = 10^(e1+q1-P34) < 10^e1
+ // Note: if (q1 == P34) then 1 ulp = 10^(e1+q1-P34) = 10^e1
+ // because q1 < P34 we must first replace C1 by
+ // C1 * 10^(P34-q1), and must decrease the exponent by
+ // (P34-q1) (it will still be at least e_min)
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ x_exp = x_exp - ((UINT64) scale << 49);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ // check for rounding overflow
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ }
+ }
+ if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign != y_sign)
+ || (rnd_mode == ROUNDING_TIES_AWAY && x_sign != y_sign
+ && C2_lo != halfulp64)
+ || (rnd_mode == ROUNDING_DOWN && !x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && x_sign && !y_sign)
+ || (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // the result is x - 1
+ // for RN n1 * n2 < 0; underflow not possible
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi--;
+ // check if we crossed into the lower decade
+ if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1
+ C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1; // no underflow, because n1 >> n2
+ }
+ } else
+ if ((rnd_mode == ROUNDING_TO_NEAREST
+ && x_sign == y_sign)
+ || (rnd_mode == ROUNDING_TIES_AWAY
+ && x_sign == y_sign)
+ || (rnd_mode == ROUNDING_DOWN && x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && !x_sign
+ && !y_sign)) {
+ // the result is x + 1
+ // for RN x_sign = y_sign, i.e. n1*n2 > 0
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else {
+ ; // the result is x
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ }
+ } else { // if q2 >= 20 then 5*10^(q2-1) and C2 (the latter in
+ // most cases) fit only in more than 64 bits
+ halfulp128 = midpoint128[q2 - 20]; // 5 * 10^(q2-1)
+ if ((C2_hi < halfulp128.w[1])
+ || (C2_hi == halfulp128.w[1]
+ && C2_lo < halfulp128.w[0])) {
+ // n2 < 1/2 ulp (n1)
+ // the result is the operand with the larger magnitude,
+ // possibly scaled up by 10^(P34-q1)
+ // an overflow cannot occur in this case (rounding to nearest)
+ if (q1 < P34) { // scale C1 up by 10^(P34-q1)
+ // Note: because delta = P34 it is certain that
+ // x_exp - ((UINT64)scale << 49) will stay above e_min
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ x_exp = x_exp - ((UINT64) scale << 49);
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((rnd_mode == ROUNDING_DOWN && x_sign && y_sign) ||
+ (rnd_mode == ROUNDING_UP && !x_sign && !y_sign)) {
+ // add 1 ulp and then check for overflow
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set overflow flag (the inexact flag was set too)
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else
+ if ((rnd_mode == ROUNDING_DOWN && !x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && x_sign && !y_sign)
+ || (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // subtract 1 ulp from C1
+ // Note: because delta >= P34 + 1 the result cannot be zero
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi = C1_hi - 1;
+ // if the coefficient is 10^33-1 then make it 10^34-1 and
+ // decrease the exponent by 1 (because delta >= P34 + 1 the
+ // exponent will not become less than e_min)
+ // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff
+ // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff
+ if (C1_hi == 0x0000314dc6448d93ull
+ && C1_lo == 0x38c15b09ffffffffull) {
+ // make C1 = 10^34 - 1
+ C1_hi = 0x0001ed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ } else {
+ ; // the result is already correct
+ }
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else if ((C2_hi == halfulp128.w[1]
+ && C2_lo == halfulp128.w[0])
+ && (q1 < P34 || ((C1_lo & 0x1) == 0))) {
+ // midpoint & lsb in C1 is 0
+ // n2 = 1/2 ulp (n1) and C1 is even
+ // the result is the operand with the larger magnitude,
+ // possibly scaled up by 10^(P34-q1)
+ // an overflow cannot occur in this case (rounding to nearest)
+ if (q1 < P34) { // scale C1 up by 10^(P34-q1)
+ // Note: because delta = P34 it is certain that
+ // x_exp - ((UINT64)scale << 49) will stay above e_min
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ x_exp = x_exp - ((UINT64) scale << 49);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((rnd_mode == ROUNDING_TIES_AWAY && x_sign == y_sign)
+ || (rnd_mode == ROUNDING_UP && !y_sign)) {
+ // add 1 ulp and then check for overflow
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set overflow flag (the inexact flag was set too)
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else if ((rnd_mode == ROUNDING_DOWN && y_sign)
+ || (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // subtract 1 ulp from C1
+ // Note: because delta >= P34 + 1 the result cannot be zero
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi = C1_hi - 1;
+ // if the coefficient is 10^33 - 1 then make it 10^34 - 1
+ // and decrease the exponent by 1 (because delta >= P34 + 1
+ // the exponent will not become less than e_min)
+ // 10^33 - 1 = 0x0000314dc6448d9338c15b09ffffffff
+ // 10^34 - 1 = 0x0001ed09bead87c0378d8e63ffffffff
+ if (C1_hi == 0x0000314dc6448d93ull
+ && C1_lo == 0x38c15b09ffffffffull) {
+ // make C1 = 10^34 - 1
+ C1_hi = 0x0001ed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ } else {
+ ; // the result is already correct
+ }
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else { // if C2 > halfulp128 ||
+ // (C2 == halfulp128 && q1 == P34 && ((C1 & 0x1) == 1)), i.e.
+ // 1/2 ulp(n1) < n2 < 1 ulp(n1) or n2 = 1/2 ulp(n1) and C1 odd
+ // res = x+1 ulp if n1*n2 > 0 and res = x-1 ulp if n1*n2 < 0
+ if (q1 < P34) { // then 1 ulp = 10^(e1+q1-P34) < 10^e1
+ // Note: if (q1 == P34) then 1 ulp = 10^(e1+q1-P34) = 10^e1
+ // because q1 < P34 we must first replace C1 by C1*10^(P34-q1),
+ // and must decrease the exponent by (P34-q1) (it will still be
+ // at least e_min)
+ scale = P34 - q1;
+ if (q1 <= 19) { // C1 fits in 64 bits
+ // 1 <= q1 <= 19 => 15 <= scale <= 33
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ __mul_64x64_to_128MACH (C1, ten2k64[scale], C1_lo);
+ } else { // if 20 <= scale <= 33
+ // C1 * 10^scale = (C1 * 10^(scale-19)) * 10^19 where
+ // (C1 * 10^(scale-19)) fits in 64 bits
+ C1_lo = C1_lo * ten2k64[scale - 19];
+ __mul_64x64_to_128MACH (C1, ten2k64[19], C1_lo);
+ }
+ } else { //if 20 <= q1 <= 33=P34-1 then C1 fits only in 128 bits
+ // => 1 <= P34 - q1 <= 14 so 10^(P34-q1) fits in 64 bits
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ // C1 = ten2k64[P34 - q1] * C1
+ __mul_128x64_to_128 (C1, ten2k64[P34 - q1], C1);
+ }
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ x_exp = x_exp - ((UINT64) scale << 49);
+ }
+ if ((rnd_mode == ROUNDING_TO_NEAREST && x_sign != y_sign)
+ || (rnd_mode == ROUNDING_TIES_AWAY && x_sign != y_sign
+ && (C2_hi != halfulp128.w[1]
+ || C2_lo != halfulp128.w[0]))
+ || (rnd_mode == ROUNDING_DOWN && !x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && x_sign && !y_sign)
+ || (rnd_mode == ROUNDING_TO_ZERO
+ && x_sign != y_sign)) {
+ // the result is x - 1
+ // for RN n1 * n2 < 0; underflow not possible
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi--;
+ // check if we crossed into the lower decade
+ if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1
+ C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C1_lo = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1; // no underflow, because n1 >> n2
+ }
+ } else
+ if ((rnd_mode == ROUNDING_TO_NEAREST
+ && x_sign == y_sign)
+ || (rnd_mode == ROUNDING_TIES_AWAY
+ && x_sign == y_sign)
+ || (rnd_mode == ROUNDING_DOWN && x_sign && y_sign)
+ || (rnd_mode == ROUNDING_UP && !x_sign
+ && !y_sign)) {
+ // the result is x + 1
+ // for RN x_sign = y_sign, i.e. n1*n2 > 0
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ x_exp = x_exp + EXP_P1;
+ if (x_exp == EXP_MAX_P1) { // overflow
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ x_exp = 0; // x_sign is preserved
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } else {
+ ; // the result is x
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1_hi;
+ res.w[0] = C1_lo;
+ }
+ } // end q1 >= 20
+ // end case where C1 != 10^(q1-1)
+ } else { // C1 = 10^(q1-1) and x_sign != y_sign
+ // instead of C' = (C1 * 10^(e1-e2) + C2)rnd,P34
+ // calculate C' = C1 * 10^(e1-e2-x1) + (C2 * 10^(-x1))rnd,P34
+ // where x1 = q2 - 1, 0 <= x1 <= P34 - 1
+ // Because C1 = 10^(q1-1) and x_sign != y_sign, C' will have P34
+ // digits and n = C' * 10^(e2+x1)
+ // If the result has P34+1 digits, redo the steps above with x1+1
+ // If the result has P34-1 digits or less, redo the steps above with
+ // x1-1 but only if initially x1 >= 1
+ // NOTE: these two steps can be improved, e.g we could guess if
+ // P34+1 or P34-1 digits will be obtained by adding/subtracting
+ // just the top 64 bits of the two operands
+ // The result cannot be zero, and it cannot overflow
+ x1 = q2 - 1; // 0 <= x1 <= P34-1
+ // Calculate C1 * 10^(e1-e2-x1) where 1 <= e1-e2-x1 <= P34
+ // scale = (int)(e1 >> 49) - (int)(e2 >> 49) - x1; 0 <= scale <= P34-1
+ scale = P34 - q1 + 1; // scale=e1-e2-x1 = P34+1-q1; 1<=scale<=P34
+ // either C1 or 10^(e1-e2-x1) may not fit is 64 bits,
+ // but their product fits with certainty in 128 bits
+ if (scale >= 20) { //10^(e1-e2-x1) doesn't fit in 64 bits, but C1 does
+ __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]);
+ } else { // if (scale >= 1
+ // if 1 <= scale <= 19 then 10^(e1-e2-x1) fits in 64 bits
+ if (q1 <= 19) { // C1 fits in 64 bits
+ __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]);
+ } else { // q1 >= 20
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ __mul_128x64_to_128 (C1, ten2k64[scale], C1);
+ }
+ }
+ tmp64 = C1.w[0]; // C1.w[1], C1.w[0] contains C1 * 10^(e1-e2-x1)
+
+ // now round C2 to q2-x1 = 1 decimal digit
+ // C2' = C2 + 1/2 * 10^x1 = C2 + 5 * 10^(x1-1)
+ ind = x1 - 1; // -1 <= ind <= P34 - 2
+ if (ind >= 0) { // if (x1 >= 1)
+ C2.w[0] = C2_lo;
+ C2.w[1] = C2_hi;
+ if (ind <= 18) {
+ C2.w[0] = C2.w[0] + midpoint64[ind];
+ if (C2.w[0] < C2_lo)
+ C2.w[1]++;
+ } else { // 19 <= ind <= 32
+ C2.w[0] = C2.w[0] + midpoint128[ind - 19].w[0];
+ C2.w[1] = C2.w[1] + midpoint128[ind - 19].w[1];
+ if (C2.w[0] < C2_lo)
+ C2.w[1]++;
+ }
+ // the approximation of 10^(-x1) was rounded up to 118 bits
+ __mul_128x128_to_256 (R256, C2, ten2mk128[ind]); // R256 = C2*, f2*
+ // calculate C2* and f2*
+ // C2* is actually floor(C2*) in this case
+ // C2* and f2* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // the top Ex bits of 10^(-x1) are T* = ten2mk128trunc[ind], e.g.
+ // if x1=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f2* < 10^(-x1)) then
+ // if floor(C1+C2*) is even then C2* = floor(C2*) - logical right
+ // shift; C2* has p decimal digits, correct by Prop. 1)
+ // else if floor(C1+C2*) is odd C2* = floor(C2*)-1 (logical right
+ // shift; C2* has p decimal digits, correct by Pr. 1)
+ // else
+ // C2* = floor(C2*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C2* * 10^(e2+x1)
+
+ if (ind <= 2) {
+ highf2star.w[1] = 0x0;
+ highf2star.w[0] = 0x0; // low f2* ok
+ } else if (ind <= 21) {
+ highf2star.w[1] = 0x0;
+ highf2star.w[0] = R256.w[2] & maskhigh128[ind]; // low f2* ok
+ } else {
+ highf2star.w[1] = R256.w[3] & maskhigh128[ind];
+ highf2star.w[0] = R256.w[2]; // low f2* is ok
+ }
+ // shift right C2* by Ex-128 = shiftright128[ind]
+ if (ind >= 3) {
+ shift = shiftright128[ind];
+ if (shift < 64) { // 3 <= shift <= 63
+ R256.w[2] =
+ (R256.w[2] >> shift) | (R256.w[3] << (64 - shift));
+ R256.w[3] = (R256.w[3] >> shift);
+ } else { // 66 <= shift <= 102
+ R256.w[2] = (R256.w[3] >> (shift - 64));
+ R256.w[3] = 0x0ULL;
+ }
+ }
+ // redundant
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ // determine inexactness of the rounding of C2*
+ // (cannot be followed by a second rounding)
+ // if (0 < f2* - 1/2 < 10^(-x1)) then
+ // the result is exact
+ // else (if f2* - 1/2 > T* then)
+ // the result of is inexact
+ if (ind <= 2) {
+ if (R256.w[1] > 0x8000000000000000ull ||
+ (R256.w[1] == 0x8000000000000000ull
+ && R256.w[0] > 0x0ull)) {
+ // f2* > 1/2 and the result may be exact
+ tmp64A = R256.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64A > ten2mk128trunc[ind].w[1]
+ || (tmp64A == ten2mk128trunc[ind].w[1]
+ && R256.w[0] >= ten2mk128trunc[ind].w[0]))) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_inexact_gt_midpoint = 1;
+ } // else the result is exact
+ // rounding down, unless a midpoint in [ODD, EVEN]
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (ind <= 21) { // if 3 <= ind <= 21
+ if (highf2star.w[1] > 0x0 || (highf2star.w[1] == 0x0
+ && highf2star.w[0] >
+ onehalf128[ind])
+ || (highf2star.w[1] == 0x0
+ && highf2star.w[0] == onehalf128[ind]
+ && (R256.w[1] || R256.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64A = highf2star.w[0] - onehalf128[ind];
+ tmp64B = highf2star.w[1];
+ if (tmp64A > highf2star.w[0])
+ tmp64B--;
+ if (tmp64B || tmp64A
+ || R256.w[1] > ten2mk128trunc[ind].w[1]
+ || (R256.w[1] == ten2mk128trunc[ind].w[1]
+ && R256.w[0] > ten2mk128trunc[ind].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_inexact_gt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_inexact_lt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (highf2star.w[1] > onehalf128[ind]
+ || (highf2star.w[1] == onehalf128[ind]
+ && (highf2star.w[0] || R256.w[1]
+ || R256.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ // tmp64A = highf2star.w[0];
+ tmp64B = highf2star.w[1] - onehalf128[ind];
+ if (tmp64B || highf2star.w[0]
+ || R256.w[1] > ten2mk128trunc[ind].w[1]
+ || (R256.w[1] == ten2mk128trunc[ind].w[1]
+ && R256.w[0] > ten2mk128trunc[ind].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_inexact_gt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_inexact_lt_midpoint = 1;
+ }
+ }
+ // check for midpoints after determining inexactness
+ if ((R256.w[1] || R256.w[0]) && (highf2star.w[1] == 0)
+ && (highf2star.w[0] == 0)
+ && (R256.w[1] < ten2mk128trunc[ind].w[1]
+ || (R256.w[1] == ten2mk128trunc[ind].w[1]
+ && R256.w[0] <= ten2mk128trunc[ind].w[0]))) {
+ // the result is a midpoint
+ if ((tmp64 + R256.w[2]) & 0x01) { // MP in [EVEN, ODD]
+ // if floor(C2*) is odd C = floor(C2*) - 1; the result may be 0
+ R256.w[2]--;
+ if (R256.w[2] == 0xffffffffffffffffull)
+ R256.w[3]--;
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_midpoint_lt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ } else {
+ // else MP in [ODD, EVEN]
+ // this rounding is applied to C2 only!
+ // x_sign != y_sign
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ } else { // if (ind == -1) only when x1 = 0
+ R256.w[2] = C2_lo;
+ R256.w[3] = C2_hi;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ // and now subtract C1 * 10^(e1-e2-x1) - (C2 * 10^(-x1))rnd,P34
+ // because x_sign != y_sign this last operation is exact
+ C1.w[0] = C1.w[0] - R256.w[2];
+ C1.w[1] = C1.w[1] - R256.w[3];
+ if (C1.w[0] > tmp64)
+ C1.w[1]--; // borrow
+ if (C1.w[1] >= 0x8000000000000000ull) { // negative coefficient!
+ C1.w[0] = ~C1.w[0];
+ C1.w[0]++;
+ C1.w[1] = ~C1.w[1];
+ if (C1.w[0] == 0x0)
+ C1.w[1]++;
+ tmp_sign = y_sign; // the result will have the sign of y
+ } else {
+ tmp_sign = x_sign;
+ }
+ // the difference has exactly P34 digits
+ x_sign = tmp_sign;
+ if (x1 >= 1)
+ y_exp = y_exp + ((UINT64) x1 << 49);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ // general correction from RN to RA, RM, RP, RZ; result uses y_exp
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((!x_sign
+ && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode == ROUNDING_TIES_AWAY
+ || rnd_mode == ROUNDING_UP)
+ && is_midpoint_gt_even))) || (x_sign
+ &&
+ ((rnd_mode ==
+ ROUNDING_DOWN
+ &&
+ is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode ==
+ ROUNDING_TIES_AWAY
+ || rnd_mode ==
+ ROUNDING_DOWN)
+ &&
+ is_midpoint_gt_even))))
+ {
+ // C1 = C1 + 1
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ y_exp = y_exp + EXP_P1;
+ }
+ } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint)
+ &&
+ ((x_sign
+ && (rnd_mode == ROUNDING_UP
+ || rnd_mode == ROUNDING_TO_ZERO))
+ || (!x_sign
+ && (rnd_mode == ROUNDING_DOWN
+ || rnd_mode == ROUNDING_TO_ZERO)))) {
+ // C1 = C1 - 1
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi--;
+ // check if we crossed into the lower decade
+ if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1
+ C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C1_lo = 0x378d8e63ffffffffull;
+ y_exp = y_exp - EXP_P1;
+ // no underflow, because delta + q2 >= P34 + 1
+ }
+ } else {
+ ; // exact, the result is already correct
+ }
+ }
+ // assemble the result
+ res.w[1] = x_sign | y_exp | C1_hi;
+ res.w[0] = C1_lo;
+ }
+ } // end delta = P34
+ } else { // if (|delta| <= P34 - 1)
+ if (delta >= 0) { // if (0 <= delta <= P34 - 1)
+ if (delta <= P34 - 1 - q2) {
+ // calculate C' directly; the result is exact
+ // in this case 1<=q1<=P34-1, 1<=q2<=P34-1 and 0 <= e1-e2 <= P34-2
+ // The coefficient of the result is C1 * 10^(e1-e2) + C2 and the
+ // exponent is e2; either C1 or 10^(e1-e2) may not fit is 64 bits,
+ // but their product fits with certainty in 128 bits (actually in 113)
+ scale = delta - q1 + q2; // scale = (int)(e1 >> 49) - (int)(e2 >> 49)
+
+ if (scale >= 20) { // 10^(e1-e2) does not fit in 64 bits, but C1 does
+ __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]);
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ } else if (scale >= 1) {
+ // if 1 <= scale <= 19 then 10^(e1-e2) fits in 64 bits
+ if (q1 <= 19) { // C1 fits in 64 bits
+ __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]);
+ } else { // q1 >= 20
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ __mul_128x64_to_128 (C1, ten2k64[scale], C1);
+ }
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ } else { // if (scale == 0) C1 is unchanged
+ C1.w[0] = C1_lo; // C1.w[1] = C1_hi;
+ }
+ // now add C2
+ if (x_sign == y_sign) {
+ // the result cannot overflow
+ C1_lo = C1_lo + C2_lo;
+ C1_hi = C1_hi + C2_hi;
+ if (C1_lo < C1.w[0])
+ C1_hi++;
+ } else { // if x_sign != y_sign
+ C1_lo = C1_lo - C2_lo;
+ C1_hi = C1_hi - C2_hi;
+ if (C1_lo > C1.w[0])
+ C1_hi--;
+ // the result can be zero, but it cannot overflow
+ if (C1_lo == 0 && C1_hi == 0) {
+ // assemble the result
+ if (x_exp < y_exp)
+ res.w[1] = x_exp;
+ else
+ res.w[1] = y_exp;
+ res.w[0] = 0;
+ if (rnd_mode == ROUNDING_DOWN) {
+ res.w[1] |= 0x8000000000000000ull;
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ }
+ if (C1_hi >= 0x8000000000000000ull) { // negative coefficient!
+ C1_lo = ~C1_lo;
+ C1_lo++;
+ C1_hi = ~C1_hi;
+ if (C1_lo == 0x0)
+ C1_hi++;
+ x_sign = y_sign; // the result will have the sign of y
+ }
+ }
+ // assemble the result
+ res.w[1] = x_sign | y_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else if (delta == P34 - q2) {
+ // calculate C' directly; the result may be inexact if it requires
+ // P34+1 decimal digits; in this case the 'cutoff' point for addition
+ // is at the position of the lsb of C2, so 0 <= e1-e2 <= P34-1
+ // The coefficient of the result is C1 * 10^(e1-e2) + C2 and the
+ // exponent is e2; either C1 or 10^(e1-e2) may not fit is 64 bits,
+ // but their product fits with certainty in 128 bits (actually in 113)
+ scale = delta - q1 + q2; // scale = (int)(e1 >> 49) - (int)(e2 >> 49)
+ if (scale >= 20) { // 10^(e1-e2) does not fit in 64 bits, but C1 does
+ __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]);
+ } else if (scale >= 1) {
+ // if 1 <= scale <= 19 then 10^(e1-e2) fits in 64 bits
+ if (q1 <= 19) { // C1 fits in 64 bits
+ __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]);
+ } else { // q1 >= 20
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ __mul_128x64_to_128 (C1, ten2k64[scale], C1);
+ }
+ } else { // if (scale == 0) C1 is unchanged
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo; // only the low part is necessary
+ }
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ // now add C2
+ if (x_sign == y_sign) {
+ // the result can overflow!
+ C1_lo = C1_lo + C2_lo;
+ C1_hi = C1_hi + C2_hi;
+ if (C1_lo < C1.w[0])
+ C1_hi++;
+ // test for overflow, possible only when C1 >= 10^34
+ if (C1_hi > 0x0001ed09bead87c0ull || (C1_hi == 0x0001ed09bead87c0ull && C1_lo >= 0x378d8e6400000000ull)) { // C1 >= 10^34
+ // in this case q = P34 + 1 and x = q - P34 = 1, so multiply
+ // C'' = C'+ 5 = C1 + 5 by k1 ~ 10^(-1) calculated for P34 + 1
+ // decimal digits
+ // Calculate C'' = C' + 1/2 * 10^x
+ if (C1_lo >= 0xfffffffffffffffbull) { // low half add has carry
+ C1_lo = C1_lo + 5;
+ C1_hi = C1_hi + 1;
+ } else {
+ C1_lo = C1_lo + 5;
+ }
+ // the approximation of 10^(-1) was rounded up to 118 bits
+ // 10^(-1) =~ 33333333333333333333333333333400 * 2^-129
+ // 10^(-1) =~ 19999999999999999999999999999a00 * 2^-128
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo; // C''
+ ten2m1.w[1] = 0x1999999999999999ull;
+ ten2m1.w[0] = 0x9999999999999a00ull;
+ __mul_128x128_to_256 (P256, C1, ten2m1); // P256 = C*, f*
+ // C* is actually floor(C*) in this case
+ // the top Ex = 128 bits of 10^(-1) are
+ // T* = 0x00199999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then
+ // if floor(C*) is even then C = floor(C*) - logical right
+ // shift; C has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C = floor(C*) - 1 (logical right
+ // shift; C has p decimal digits, correct by Pr. 1)
+ // else
+ // C = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C * 10^(e2+x)
+ if ((P256.w[1] || P256.w[0])
+ && (P256.w[1] < 0x1999999999999999ull
+ || (P256.w[1] == 0x1999999999999999ull
+ && P256.w[0] <= 0x9999999999999999ull))) {
+ // the result is a midpoint
+ if (P256.w[2] & 0x01) {
+ is_midpoint_gt_even = 1;
+ // if floor(C*) is odd C = floor(C*) - 1; the result is not 0
+ P256.w[2]--;
+ if (P256.w[2] == 0xffffffffffffffffull)
+ P256.w[3]--;
+ } else {
+ is_midpoint_lt_even = 1;
+ }
+ }
+ // n = Cstar * 10^(e2+1)
+ y_exp = y_exp + EXP_P1;
+ // C* != 10^P because C* has P34 digits
+ // check for overflow
+ if (y_exp == EXP_MAX_P1
+ && (rnd_mode == ROUNDING_TO_NEAREST
+ || rnd_mode == ROUNDING_TIES_AWAY)) {
+ // overflow for RN
+ res.w[1] = x_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0ull;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ }
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result of the addition is exact
+ // else
+ // the result of the addition is inexact
+ if (P256.w[1] > 0x8000000000000000ull || (P256.w[1] == 0x8000000000000000ull && P256.w[0] > 0x0ull)) { // the result may be exact
+ tmp64 = P256.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > 0x1999999999999999ull
+ || (tmp64 == 0x1999999999999999ull
+ && P256.w[0] >= 0x9999999999999999ull))) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact = 1;
+ }
+ C1_hi = P256.w[3];
+ C1_lo = P256.w[2];
+ if (!is_midpoint_gt_even && !is_midpoint_lt_even) {
+ is_inexact_lt_midpoint = is_inexact
+ && (P256.w[1] & 0x8000000000000000ull);
+ is_inexact_gt_midpoint = is_inexact
+ && !(P256.w[1] & 0x8000000000000000ull);
+ }
+ // general correction from RN to RA, RM, RP, RZ;
+ // result uses y_exp
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((!x_sign
+ &&
+ ((rnd_mode == ROUNDING_UP
+ && is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode == ROUNDING_TIES_AWAY
+ || rnd_mode == ROUNDING_UP)
+ && is_midpoint_gt_even))) || (x_sign
+ &&
+ ((rnd_mode ==
+ ROUNDING_DOWN
+ &&
+ is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode ==
+ ROUNDING_TIES_AWAY
+ || rnd_mode ==
+ ROUNDING_DOWN)
+ &&
+ is_midpoint_gt_even))))
+ {
+ // C1 = C1 + 1
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ y_exp = y_exp + EXP_P1;
+ }
+ } else
+ if ((is_midpoint_lt_even || is_inexact_gt_midpoint)
+ &&
+ ((x_sign
+ && (rnd_mode == ROUNDING_UP
+ || rnd_mode == ROUNDING_TO_ZERO))
+ || (!x_sign
+ && (rnd_mode == ROUNDING_DOWN
+ || rnd_mode == ROUNDING_TO_ZERO)))) {
+ // C1 = C1 - 1
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi--;
+ // check if we crossed into the lower decade
+ if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1
+ C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C1_lo = 0x378d8e63ffffffffull;
+ y_exp = y_exp - EXP_P1;
+ // no underflow, because delta + q2 >= P34 + 1
+ }
+ } else {
+ ; // exact, the result is already correct
+ }
+ // in all cases check for overflow (RN and RA solved already)
+ if (y_exp == EXP_MAX_P1) { // overflow
+ if ((rnd_mode == ROUNDING_DOWN && x_sign) || // RM and res < 0
+ (rnd_mode == ROUNDING_UP && !x_sign)) { // RP and res > 0
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ } else { // RM and res > 0, RP and res < 0, or RZ
+ C1_hi = 0x5fffed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ }
+ y_exp = 0; // x_sign is preserved
+ // set the inexact flag (in case the exact addition was exact)
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } // else if (C1 < 10^34) then C1 is the coeff.; the result is exact
+ } else { // if x_sign != y_sign the result is exact
+ C1_lo = C1_lo - C2_lo;
+ C1_hi = C1_hi - C2_hi;
+ if (C1_lo > C1.w[0])
+ C1_hi--;
+ // the result can be zero, but it cannot overflow
+ if (C1_lo == 0 && C1_hi == 0) {
+ // assemble the result
+ if (x_exp < y_exp)
+ res.w[1] = x_exp;
+ else
+ res.w[1] = y_exp;
+ res.w[0] = 0;
+ if (rnd_mode == ROUNDING_DOWN) {
+ res.w[1] |= 0x8000000000000000ull;
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ }
+ if (C1_hi >= 0x8000000000000000ull) { // negative coefficient!
+ C1_lo = ~C1_lo;
+ C1_lo++;
+ C1_hi = ~C1_hi;
+ if (C1_lo == 0x0)
+ C1_hi++;
+ x_sign = y_sign; // the result will have the sign of y
+ }
+ }
+ // assemble the result
+ res.w[1] = x_sign | y_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else { // if (delta >= P34 + 1 - q2)
+ // instead of C' = (C1 * 10^(e1-e2) + C2)rnd,P34
+ // calculate C' = C1 * 10^(e1-e2-x1) + (C2 * 10^(-x1))rnd,P34
+ // where x1 = q1 + e1 - e2 - P34, 1 <= x1 <= P34 - 1
+ // In most cases C' will have P34 digits, and n = C' * 10^(e2+x1)
+ // If the result has P34+1 digits, redo the steps above with x1+1
+ // If the result has P34-1 digits or less, redo the steps above with
+ // x1-1 but only if initially x1 >= 1
+ // NOTE: these two steps can be improved, e.g we could guess if
+ // P34+1 or P34-1 digits will be obtained by adding/subtracting just
+ // the top 64 bits of the two operands
+ // The result cannot be zero, but it can overflow
+ x1 = delta + q2 - P34; // 1 <= x1 <= P34-1
+ roundC2:
+ // Calculate C1 * 10^(e1-e2-x1) where 0 <= e1-e2-x1 <= P34 - 1
+ // scale = (int)(e1 >> 49) - (int)(e2 >> 49) - x1; 0 <= scale <= P34-1
+ scale = delta - q1 + q2 - x1; // scale = e1 - e2 - x1 = P34 - q1
+ // either C1 or 10^(e1-e2-x1) may not fit is 64 bits,
+ // but their product fits with certainty in 128 bits (actually in 113)
+ if (scale >= 20) { //10^(e1-e2-x1) doesn't fit in 64 bits, but C1 does
+ __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]);
+ } else if (scale >= 1) {
+ // if 1 <= scale <= 19 then 10^(e1-e2-x1) fits in 64 bits
+ if (q1 <= 19) { // C1 fits in 64 bits
+ __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]);
+ } else { // q1 >= 20
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ __mul_128x64_to_128 (C1, ten2k64[scale], C1);
+ }
+ } else { // if (scale == 0) C1 is unchanged
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ }
+ tmp64 = C1.w[0]; // C1.w[1], C1.w[0] contains C1 * 10^(e1-e2-x1)
+
+ // now round C2 to q2-x1 decimal digits, where 1<=x1<=q2-1<=P34-1
+ // (but if we got here a second time after x1 = x1 - 1, then
+ // x1 >= 0; note that for x1 = 0 C2 is unchanged)
+ // C2' = C2 + 1/2 * 10^x1 = C2 + 5 * 10^(x1-1)
+ ind = x1 - 1; // 0 <= ind <= q2-2<=P34-2=32; but note that if x1 = 0
+ // during a second pass, then ind = -1
+ if (ind >= 0) { // if (x1 >= 1)
+ C2.w[0] = C2_lo;
+ C2.w[1] = C2_hi;
+ if (ind <= 18) {
+ C2.w[0] = C2.w[0] + midpoint64[ind];
+ if (C2.w[0] < C2_lo)
+ C2.w[1]++;
+ } else { // 19 <= ind <= 32
+ C2.w[0] = C2.w[0] + midpoint128[ind - 19].w[0];
+ C2.w[1] = C2.w[1] + midpoint128[ind - 19].w[1];
+ if (C2.w[0] < C2_lo)
+ C2.w[1]++;
+ }
+ // the approximation of 10^(-x1) was rounded up to 118 bits
+ __mul_128x128_to_256 (R256, C2, ten2mk128[ind]); // R256 = C2*, f2*
+ // calculate C2* and f2*
+ // C2* is actually floor(C2*) in this case
+ // C2* and f2* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // the top Ex bits of 10^(-x1) are T* = ten2mk128trunc[ind], e.g.
+ // if x1=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f2* < 10^(-x1)) then
+ // if floor(C1+C2*) is even then C2* = floor(C2*) - logical right
+ // shift; C2* has p decimal digits, correct by Prop. 1)
+ // else if floor(C1+C2*) is odd C2* = floor(C2*)-1 (logical right
+ // shift; C2* has p decimal digits, correct by Pr. 1)
+ // else
+ // C2* = floor(C2*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C2* * 10^(e2+x1)
+
+ if (ind <= 2) {
+ highf2star.w[1] = 0x0;
+ highf2star.w[0] = 0x0; // low f2* ok
+ } else if (ind <= 21) {
+ highf2star.w[1] = 0x0;
+ highf2star.w[0] = R256.w[2] & maskhigh128[ind]; // low f2* ok
+ } else {
+ highf2star.w[1] = R256.w[3] & maskhigh128[ind];
+ highf2star.w[0] = R256.w[2]; // low f2* is ok
+ }
+ // shift right C2* by Ex-128 = shiftright128[ind]
+ if (ind >= 3) {
+ shift = shiftright128[ind];
+ if (shift < 64) { // 3 <= shift <= 63
+ R256.w[2] =
+ (R256.w[2] >> shift) | (R256.w[3] << (64 - shift));
+ R256.w[3] = (R256.w[3] >> shift);
+ } else { // 66 <= shift <= 102
+ R256.w[2] = (R256.w[3] >> (shift - 64));
+ R256.w[3] = 0x0ULL;
+ }
+ }
+ if (second_pass) {
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ }
+ // determine inexactness of the rounding of C2* (this may be
+ // followed by a second rounding only if we get P34+1
+ // decimal digits)
+ // if (0 < f2* - 1/2 < 10^(-x1)) then
+ // the result is exact
+ // else (if f2* - 1/2 > T* then)
+ // the result of is inexact
+ if (ind <= 2) {
+ if (R256.w[1] > 0x8000000000000000ull ||
+ (R256.w[1] == 0x8000000000000000ull
+ && R256.w[0] > 0x0ull)) {
+ // f2* > 1/2 and the result may be exact
+ tmp64A = R256.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64A > ten2mk128trunc[ind].w[1]
+ || (tmp64A == ten2mk128trunc[ind].w[1]
+ && R256.w[0] >= ten2mk128trunc[ind].w[0]))) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1; // may be set again during a second pass
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_inexact_lt_midpoint = 1;
+ else // if (x_sign != y_sign)
+ is_inexact_gt_midpoint = 1;
+ } // else the result is exact
+ // rounding down, unless a midpoint in [ODD, EVEN]
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1; // just in case we will round a second time
+ // rounding up, unless a midpoint in [EVEN, ODD]
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_inexact_gt_midpoint = 1;
+ else // if (x_sign != y_sign)
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (ind <= 21) { // if 3 <= ind <= 21
+ if (highf2star.w[1] > 0x0 || (highf2star.w[1] == 0x0
+ && highf2star.w[0] >
+ onehalf128[ind])
+ || (highf2star.w[1] == 0x0
+ && highf2star.w[0] == onehalf128[ind]
+ && (R256.w[1] || R256.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64A = highf2star.w[0] - onehalf128[ind];
+ tmp64B = highf2star.w[1];
+ if (tmp64A > highf2star.w[0])
+ tmp64B--;
+ if (tmp64B || tmp64A
+ || R256.w[1] > ten2mk128trunc[ind].w[1]
+ || (R256.w[1] == ten2mk128trunc[ind].w[1]
+ && R256.w[0] > ten2mk128trunc[ind].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1; // may be set again during a second pass
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_inexact_lt_midpoint = 1;
+ else // if (x_sign != y_sign)
+ is_inexact_gt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1; // may be set again during a second pass
+ // rounding up, unless a midpoint in [EVEN, ODD]
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_inexact_gt_midpoint = 1;
+ else // if (x_sign != y_sign)
+ is_inexact_lt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (highf2star.w[1] > onehalf128[ind]
+ || (highf2star.w[1] == onehalf128[ind]
+ && (highf2star.w[0] || R256.w[1]
+ || R256.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ // tmp64A = highf2star.w[0];
+ tmp64B = highf2star.w[1] - onehalf128[ind];
+ if (tmp64B || highf2star.w[0]
+ || R256.w[1] > ten2mk128trunc[ind].w[1]
+ || (R256.w[1] == ten2mk128trunc[ind].w[1]
+ && R256.w[0] > ten2mk128trunc[ind].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1; // may be set again during a second pass
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_inexact_lt_midpoint = 1;
+ else // if (x_sign != y_sign)
+ is_inexact_gt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1; // may be set again during a second pass
+ // rounding up, unless a midpoint in [EVEN, ODD]
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_inexact_gt_midpoint = 1;
+ else // if (x_sign != y_sign)
+ is_inexact_lt_midpoint = 1;
+ }
+ }
+ // check for midpoints
+ if ((R256.w[1] || R256.w[0]) && (highf2star.w[1] == 0)
+ && (highf2star.w[0] == 0)
+ && (R256.w[1] < ten2mk128trunc[ind].w[1]
+ || (R256.w[1] == ten2mk128trunc[ind].w[1]
+ && R256.w[0] <= ten2mk128trunc[ind].w[0]))) {
+ // the result is a midpoint
+ if ((tmp64 + R256.w[2]) & 0x01) { // MP in [EVEN, ODD]
+ // if floor(C2*) is odd C = floor(C2*) - 1; the result may be 0
+ R256.w[2]--;
+ if (R256.w[2] == 0xffffffffffffffffull)
+ R256.w[3]--;
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_midpoint_gt_even = 1;
+ else // if (x_sign != y_sign)
+ is_midpoint_lt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ } else {
+ // else MP in [ODD, EVEN]
+ // this rounding is applied to C2 only!
+ if (x_sign == y_sign)
+ is_midpoint_lt_even = 1;
+ else // if (x_sign != y_sign)
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // end if (ind >= 0)
+ } else { // if (ind == -1); only during a 2nd pass, and when x1 = 0
+ R256.w[2] = C2_lo;
+ R256.w[3] = C2_hi;
+ tmp_inexact = 0;
+ // to correct a possible setting to 1 from 1st pass
+ if (second_pass) {
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // and now add/subtract C1 * 10^(e1-e2-x1) +/- (C2 * 10^(-x1))rnd,P34
+ if (x_sign == y_sign) { // addition; could overflow
+ // no second pass is possible this way (only for x_sign != y_sign)
+ C1.w[0] = C1.w[0] + R256.w[2];
+ C1.w[1] = C1.w[1] + R256.w[3];
+ if (C1.w[0] < tmp64)
+ C1.w[1]++; // carry
+ // if the sum has P34+1 digits, i.e. C1>=10^34 redo the calculation
+ // with x1=x1+1
+ if (C1.w[1] > 0x0001ed09bead87c0ull || (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] >= 0x378d8e6400000000ull)) { // C1 >= 10^34
+ // chop off one more digit from the sum, but make sure there is
+ // no double-rounding error (see table - double rounding logic)
+ // now round C1 from P34+1 to P34 decimal digits
+ // C1' = C1 + 1/2 * 10 = C1 + 5
+ if (C1.w[0] >= 0xfffffffffffffffbull) { // low half add has carry
+ C1.w[0] = C1.w[0] + 5;
+ C1.w[1] = C1.w[1] + 1;
+ } else {
+ C1.w[0] = C1.w[0] + 5;
+ }
+ // the approximation of 10^(-1) was rounded up to 118 bits
+ __mul_128x128_to_256 (Q256, C1, ten2mk128[0]); // Q256 = C1*, f1*
+ // C1* is actually floor(C1*) in this case
+ // the top 128 bits of 10^(-1) are
+ // T* = ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f1* < 10^(-1)) then
+ // if floor(C1*) is even then C1* = floor(C1*) - logical right
+ // shift; C1* has p decimal digits, correct by Prop. 1)
+ // else if floor(C1*) is odd C1* = floor(C1*) - 1 (logical right
+ // shift; C1* has p decimal digits, correct by Pr. 1)
+ // else
+ // C1* = floor(C1*) (logical right shift; C has p decimal digits
+ // correct by Property 1)
+ // n = C1* * 10^(e2+x1+1)
+ if ((Q256.w[1] || Q256.w[0])
+ && (Q256.w[1] < ten2mk128trunc[0].w[1]
+ || (Q256.w[1] == ten2mk128trunc[0].w[1]
+ && Q256.w[0] <= ten2mk128trunc[0].w[0]))) {
+ // the result is a midpoint
+ if (is_inexact_lt_midpoint) { // for the 1st rounding
+ is_inexact_gt_midpoint = 1;
+ is_inexact_lt_midpoint = 0;
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 0;
+ } else if (is_inexact_gt_midpoint) { // for the 1st rounding
+ Q256.w[2]--;
+ if (Q256.w[2] == 0xffffffffffffffffull)
+ Q256.w[3]--;
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 1;
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 0;
+ } else if (is_midpoint_gt_even) { // for the 1st rounding
+ // Note: cannot have is_midpoint_lt_even
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 1;
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 0;
+ } else { // the first rounding must have been exact
+ if (Q256.w[2] & 0x01) { // MP in [EVEN, ODD]
+ // the truncated result is correct
+ Q256.w[2]--;
+ if (Q256.w[2] == 0xffffffffffffffffull)
+ Q256.w[3]--;
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 0;
+ is_midpoint_gt_even = 1;
+ is_midpoint_lt_even = 0;
+ } else { // MP in [ODD, EVEN]
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 0;
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 1;
+ }
+ }
+ tmp_inexact = 1; // in all cases
+ } else { // the result is not a midpoint
+ // determine inexactness of the rounding of C1 (the sum C1+C2*)
+ // if (0 < f1* - 1/2 < 10^(-1)) then
+ // the result is exact
+ // else (if f1* - 1/2 > T* then)
+ // the result of is inexact
+ // ind = 0
+ if (Q256.w[1] > 0x8000000000000000ull
+ || (Q256.w[1] == 0x8000000000000000ull
+ && Q256.w[0] > 0x0ull)) {
+ // f1* > 1/2 and the result may be exact
+ Q256.w[1] = Q256.w[1] - 0x8000000000000000ull; // f1* - 1/2
+ if ((Q256.w[1] > ten2mk128trunc[0].w[1]
+ || (Q256.w[1] == ten2mk128trunc[0].w[1]
+ && Q256.w[0] > ten2mk128trunc[0].w[0]))) {
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 1;
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 0;
+ // set the inexact flag
+ tmp_inexact = 1;
+ // *pfpsf |= INEXACT_EXCEPTION;
+ } else { // else the result is exact for the 2nd rounding
+ if (tmp_inexact) { // if the previous rounding was inexact
+ if (is_midpoint_lt_even) {
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ } else if (is_midpoint_gt_even) {
+ is_inexact_lt_midpoint = 1;
+ is_midpoint_gt_even = 0;
+ } else {
+ ; // no change
+ }
+ }
+ }
+ // rounding down, unless a midpoint in [ODD, EVEN]
+ } else { // the result is inexact; f1* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ is_inexact_lt_midpoint = 0;
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 0;
+ // set the inexact flag
+ tmp_inexact = 1;
+ // *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } // end 'the result is not a midpoint'
+ // n = C1 * 10^(e2+x1)
+ C1.w[1] = Q256.w[3];
+ C1.w[0] = Q256.w[2];
+ y_exp = y_exp + ((UINT64) (x1 + 1) << 49);
+ } else { // C1 < 10^34
+ // C1.w[1] and C1.w[0] already set
+ // n = C1 * 10^(e2+x1)
+ y_exp = y_exp + ((UINT64) x1 << 49);
+ }
+ // check for overflow
+ if (y_exp == EXP_MAX_P1
+ && (rnd_mode == ROUNDING_TO_NEAREST
+ || rnd_mode == ROUNDING_TIES_AWAY)) {
+ res.w[1] = 0x7800000000000000ull | x_sign; // +/-inf
+ res.w[0] = 0x0ull;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ } // else no overflow
+ } else { // if x_sign != y_sign the result of this subtract. is exact
+ C1.w[0] = C1.w[0] - R256.w[2];
+ C1.w[1] = C1.w[1] - R256.w[3];
+ if (C1.w[0] > tmp64)
+ C1.w[1]--; // borrow
+ if (C1.w[1] >= 0x8000000000000000ull) { // negative coefficient!
+ C1.w[0] = ~C1.w[0];
+ C1.w[0]++;
+ C1.w[1] = ~C1.w[1];
+ if (C1.w[0] == 0x0)
+ C1.w[1]++;
+ tmp_sign = y_sign;
+ // the result will have the sign of y if last rnd
+ } else {
+ tmp_sign = x_sign;
+ }
+ // if the difference has P34-1 digits or less, i.e. C1 < 10^33 then
+ // redo the calculation with x1=x1-1;
+ // redo the calculation also if C1 = 10^33 and
+ // (is_inexact_gt_midpoint or is_midpoint_lt_even);
+ // (the last part should have really been
+ // (is_inexact_lt_midpoint or is_midpoint_gt_even) from
+ // the rounding of C2, but the position flags have been reversed)
+ // 10^33 = 0x0000314dc6448d93 0x38c15b0a00000000
+ if ((C1.w[1] < 0x0000314dc6448d93ull || (C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] < 0x38c15b0a00000000ull)) || (C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] == 0x38c15b0a00000000ull && (is_inexact_gt_midpoint || is_midpoint_lt_even))) { // C1=10^33
+ x1 = x1 - 1; // x1 >= 0
+ if (x1 >= 0) {
+ // clear position flags and tmp_inexact
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ tmp_inexact = 0;
+ second_pass = 1;
+ goto roundC2; // else result has less than P34 digits
+ }
+ }
+ // if the coefficient of the result is 10^34 it means that this
+ // must be the second pass, and we are done
+ if (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] == 0x378d8e6400000000ull) { // if C1 = 10^34
+ C1.w[1] = 0x0000314dc6448d93ull; // C1 = 10^33
+ C1.w[0] = 0x38c15b0a00000000ull;
+ y_exp = y_exp + ((UINT64) 1 << 49);
+ }
+ x_sign = tmp_sign;
+ if (x1 >= 1)
+ y_exp = y_exp + ((UINT64) x1 << 49);
+ // x1 = -1 is possible at the end of a second pass when the
+ // first pass started with x1 = 1
+ }
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ // general correction from RN to RA, RM, RP, RZ; result uses y_exp
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((!x_sign
+ && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode == ROUNDING_TIES_AWAY
+ || rnd_mode == ROUNDING_UP)
+ && is_midpoint_gt_even))) || (x_sign
+ &&
+ ((rnd_mode ==
+ ROUNDING_DOWN
+ &&
+ is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode ==
+ ROUNDING_TIES_AWAY
+ || rnd_mode ==
+ ROUNDING_DOWN)
+ &&
+ is_midpoint_gt_even))))
+ {
+ // C1 = C1 + 1
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ y_exp = y_exp + EXP_P1;
+ }
+ } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint)
+ &&
+ ((x_sign
+ && (rnd_mode == ROUNDING_UP
+ || rnd_mode == ROUNDING_TO_ZERO))
+ || (!x_sign
+ && (rnd_mode == ROUNDING_DOWN
+ || rnd_mode == ROUNDING_TO_ZERO)))) {
+ // C1 = C1 - 1
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi--;
+ // check if we crossed into the lower decade
+ if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1
+ C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C1_lo = 0x378d8e63ffffffffull;
+ y_exp = y_exp - EXP_P1;
+ // no underflow, because delta + q2 >= P34 + 1
+ }
+ } else {
+ ; // exact, the result is already correct
+ }
+ // in all cases check for overflow (RN and RA solved already)
+ if (y_exp == EXP_MAX_P1) { // overflow
+ if ((rnd_mode == ROUNDING_DOWN && x_sign) || // RM and res < 0
+ (rnd_mode == ROUNDING_UP && !x_sign)) { // RP and res > 0
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ } else { // RM and res > 0, RP and res < 0, or RZ
+ C1_hi = 0x5fffed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ }
+ y_exp = 0; // x_sign is preserved
+ // set the inexact flag (in case the exact addition was exact)
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ // assemble the result
+ res.w[1] = x_sign | y_exp | C1_hi;
+ res.w[0] = C1_lo;
+ if (tmp_inexact)
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if (-P34 + 1 <= delta <= -1) <=> 1 <= -delta <= P34 - 1
+ // NOTE: the following, up to "} else { // if x_sign != y_sign
+ // the result is exact" is identical to "else if (delta == P34 - q2) {"
+ // from above; also, the code is not symmetric: a+b and b+a may take
+ // different paths (need to unify eventually!)
+ // calculate C' = C2 + C1 * 10^(e1-e2) directly; the result may be
+ // inexact if it requires P34 + 1 decimal digits; in either case the
+ // 'cutoff' point for addition is at the position of the lsb of C2
+ // The coefficient of the result is C1 * 10^(e1-e2) + C2 and the
+ // exponent is e2; either C1 or 10^(e1-e2) may not fit is 64 bits,
+ // but their product fits with certainty in 128 bits (actually in 113)
+ // Note that 0 <= e1 - e2 <= P34 - 2
+ // -P34 + 1 <= delta <= -1 <=> -P34 + 1 <= delta <= -1 <=>
+ // -P34 + 1 <= q1 + e1 - q2 - e2 <= -1 <=>
+ // q2 - q1 - P34 + 1 <= e1 - e2 <= q2 - q1 - 1 <=>
+ // 1 - P34 - P34 + 1 <= e1-e2 <= P34 - 1 - 1 => 0 <= e1-e2 <= P34 - 2
+ scale = delta - q1 + q2; // scale = (int)(e1 >> 49) - (int)(e2 >> 49)
+ if (scale >= 20) { // 10^(e1-e2) does not fit in 64 bits, but C1 does
+ __mul_128x64_to_128 (C1, C1_lo, ten2k128[scale - 20]);
+ } else if (scale >= 1) {
+ // if 1 <= scale <= 19 then 10^(e1-e2) fits in 64 bits
+ if (q1 <= 19) { // C1 fits in 64 bits
+ __mul_64x64_to_128MACH (C1, C1_lo, ten2k64[scale]);
+ } else { // q1 >= 20
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo;
+ __mul_128x64_to_128 (C1, ten2k64[scale], C1);
+ }
+ } else { // if (scale == 0) C1 is unchanged
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo; // only the low part is necessary
+ }
+ C1_hi = C1.w[1];
+ C1_lo = C1.w[0];
+ // now add C2
+ if (x_sign == y_sign) {
+ // the result can overflow!
+ C1_lo = C1_lo + C2_lo;
+ C1_hi = C1_hi + C2_hi;
+ if (C1_lo < C1.w[0])
+ C1_hi++;
+ // test for overflow, possible only when C1 >= 10^34
+ if (C1_hi > 0x0001ed09bead87c0ull || (C1_hi == 0x0001ed09bead87c0ull && C1_lo >= 0x378d8e6400000000ull)) { // C1 >= 10^34
+ // in this case q = P34 + 1 and x = q - P34 = 1, so multiply
+ // C'' = C'+ 5 = C1 + 5 by k1 ~ 10^(-1) calculated for P34 + 1
+ // decimal digits
+ // Calculate C'' = C' + 1/2 * 10^x
+ if (C1_lo >= 0xfffffffffffffffbull) { // low half add has carry
+ C1_lo = C1_lo + 5;
+ C1_hi = C1_hi + 1;
+ } else {
+ C1_lo = C1_lo + 5;
+ }
+ // the approximation of 10^(-1) was rounded up to 118 bits
+ // 10^(-1) =~ 33333333333333333333333333333400 * 2^-129
+ // 10^(-1) =~ 19999999999999999999999999999a00 * 2^-128
+ C1.w[1] = C1_hi;
+ C1.w[0] = C1_lo; // C''
+ ten2m1.w[1] = 0x1999999999999999ull;
+ ten2m1.w[0] = 0x9999999999999a00ull;
+ __mul_128x128_to_256 (P256, C1, ten2m1); // P256 = C*, f*
+ // C* is actually floor(C*) in this case
+ // the top Ex = 128 bits of 10^(-1) are
+ // T* = 0x00199999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then
+ // if floor(C*) is even then C = floor(C*) - logical right
+ // shift; C has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C = floor(C*) - 1 (logical right
+ // shift; C has p decimal digits, correct by Pr. 1)
+ // else
+ // C = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C * 10^(e2+x)
+ if ((P256.w[1] || P256.w[0])
+ && (P256.w[1] < 0x1999999999999999ull
+ || (P256.w[1] == 0x1999999999999999ull
+ && P256.w[0] <= 0x9999999999999999ull))) {
+ // the result is a midpoint
+ if (P256.w[2] & 0x01) {
+ is_midpoint_gt_even = 1;
+ // if floor(C*) is odd C = floor(C*) - 1; the result is not 0
+ P256.w[2]--;
+ if (P256.w[2] == 0xffffffffffffffffull)
+ P256.w[3]--;
+ } else {
+ is_midpoint_lt_even = 1;
+ }
+ }
+ // n = Cstar * 10^(e2+1)
+ y_exp = y_exp + EXP_P1;
+ // C* != 10^P34 because C* has P34 digits
+ // check for overflow
+ if (y_exp == EXP_MAX_P1
+ && (rnd_mode == ROUNDING_TO_NEAREST
+ || rnd_mode == ROUNDING_TIES_AWAY)) {
+ // overflow for RN
+ res.w[1] = x_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0ull;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ }
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result of the addition is exact
+ // else
+ // the result of the addition is inexact
+ if (P256.w[1] > 0x8000000000000000ull || (P256.w[1] == 0x8000000000000000ull && P256.w[0] > 0x0ull)) { // the result may be exact
+ tmp64 = P256.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > 0x1999999999999999ull
+ || (tmp64 == 0x1999999999999999ull
+ && P256.w[0] >= 0x9999999999999999ull))) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact = 1;
+ }
+ C1_hi = P256.w[3];
+ C1_lo = P256.w[2];
+ if (!is_midpoint_gt_even && !is_midpoint_lt_even) {
+ is_inexact_lt_midpoint = is_inexact
+ && (P256.w[1] & 0x8000000000000000ull);
+ is_inexact_gt_midpoint = is_inexact
+ && !(P256.w[1] & 0x8000000000000000ull);
+ }
+ // general correction from RN to RA, RM, RP, RZ; result uses y_exp
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((!x_sign
+ && ((rnd_mode == ROUNDING_UP
+ && is_inexact_lt_midpoint)
+ || ((rnd_mode == ROUNDING_TIES_AWAY
+ || rnd_mode == ROUNDING_UP)
+ && is_midpoint_gt_even))) || (x_sign
+ &&
+ ((rnd_mode ==
+ ROUNDING_DOWN
+ &&
+ is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode ==
+ ROUNDING_TIES_AWAY
+ || rnd_mode
+ ==
+ ROUNDING_DOWN)
+ &&
+ is_midpoint_gt_even))))
+ {
+ // C1 = C1 + 1
+ C1_lo = C1_lo + 1;
+ if (C1_lo == 0) { // rounding overflow in the low 64 bits
+ C1_hi = C1_hi + 1;
+ }
+ if (C1_hi == 0x0001ed09bead87c0ull
+ && C1_lo == 0x378d8e6400000000ull) {
+ // C1 = 10^34 => rounding overflow
+ C1_hi = 0x0000314dc6448d93ull;
+ C1_lo = 0x38c15b0a00000000ull; // 10^33
+ y_exp = y_exp + EXP_P1;
+ }
+ } else
+ if ((is_midpoint_lt_even || is_inexact_gt_midpoint) &&
+ ((x_sign && (rnd_mode == ROUNDING_UP ||
+ rnd_mode == ROUNDING_TO_ZERO)) ||
+ (!x_sign && (rnd_mode == ROUNDING_DOWN ||
+ rnd_mode == ROUNDING_TO_ZERO)))) {
+ // C1 = C1 - 1
+ C1_lo = C1_lo - 1;
+ if (C1_lo == 0xffffffffffffffffull)
+ C1_hi--;
+ // check if we crossed into the lower decade
+ if (C1_hi == 0x0000314dc6448d93ull && C1_lo == 0x38c15b09ffffffffull) { // 10^33 - 1
+ C1_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C1_lo = 0x378d8e63ffffffffull;
+ y_exp = y_exp - EXP_P1;
+ // no underflow, because delta + q2 >= P34 + 1
+ }
+ } else {
+ ; // exact, the result is already correct
+ }
+ // in all cases check for overflow (RN and RA solved already)
+ if (y_exp == EXP_MAX_P1) { // overflow
+ if ((rnd_mode == ROUNDING_DOWN && x_sign) || // RM and res < 0
+ (rnd_mode == ROUNDING_UP && !x_sign)) { // RP and res > 0
+ C1_hi = 0x7800000000000000ull; // +inf
+ C1_lo = 0x0ull;
+ } else { // RM and res > 0, RP and res < 0, or RZ
+ C1_hi = 0x5fffed09bead87c0ull;
+ C1_lo = 0x378d8e63ffffffffull;
+ }
+ y_exp = 0; // x_sign is preserved
+ // set the inexact flag (in case the exact addition was exact)
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ }
+ } // else if (C1 < 10^34) then C1 is the coeff.; the result is exact
+ // assemble the result
+ res.w[1] = x_sign | y_exp | C1_hi;
+ res.w[0] = C1_lo;
+ } else { // if x_sign != y_sign the result is exact
+ C1_lo = C2_lo - C1_lo;
+ C1_hi = C2_hi - C1_hi;
+ if (C1_lo > C2_lo)
+ C1_hi--;
+ if (C1_hi >= 0x8000000000000000ull) { // negative coefficient!
+ C1_lo = ~C1_lo;
+ C1_lo++;
+ C1_hi = ~C1_hi;
+ if (C1_lo == 0x0)
+ C1_hi++;
+ x_sign = y_sign; // the result will have the sign of y
+ }
+ // the result can be zero, but it cannot overflow
+ if (C1_lo == 0 && C1_hi == 0) {
+ // assemble the result
+ if (x_exp < y_exp)
+ res.w[1] = x_exp;
+ else
+ res.w[1] = y_exp;
+ res.w[0] = 0;
+ if (rnd_mode == ROUNDING_DOWN) {
+ res.w[1] |= 0x8000000000000000ull;
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+ }
+ // assemble the result
+ res.w[1] = y_sign | y_exp | C1_hi;
+ res.w[0] = C1_lo;
+ }
+ }
+ }
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+}
+
+
+
+// bid128_sub stands for bid128qq_sub
+
+/*****************************************************************************
+ * BID128 sub
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_sub (UINT128 * pres, UINT128 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128_sub (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 res;
+ UINT64 y_sign;
+
+ if ((y.w[HIGH_128W] & MASK_NAN) != MASK_NAN) { // y is not NAN
+ // change its sign
+ y_sign = y.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ if (y_sign)
+ y.w[HIGH_128W] = y.w[HIGH_128W] & 0x7fffffffffffffffull;
+ else
+ y.w[HIGH_128W] = y.w[HIGH_128W] | 0x8000000000000000ull;
+ }
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_add (&res, &x, &y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid128_add (x, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_compare.c b/gcc-4.9/libgcc/config/libbid/bid128_compare.c
new file mode 100644
index 000000000..49ef7c05e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_compare.c
@@ -0,0 +1,4346 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_equal, x, y)
+
+ int res;
+ int exp_x, exp_y, exp_t;
+ UINT128 sig_x, sig_y, sig_t;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equivalent.
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ if ((y.w[1] & MASK_INF) == MASK_INF) {
+ res = (((x.w[1] ^ y.w[1]) & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else {
+ res = 0;
+ BID_RETURN (res);
+ }
+}
+if ((y.w[1] & MASK_INF) == MASK_INF) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+} else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ => not equal : return 0
+if ((x.w[1] ^ y.w[1]) & MASK_SIGN) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+if (exp_x > exp_y) { // to simplify the loop below,
+ SWAP (exp_x, exp_y, exp_t); // put the larger exp in y,
+ SWAP (sig_x.w[1], sig_y.w[1], sig_t.w[1]); // and the smaller exp in x
+ SWAP (sig_x.w[0], sig_y.w[0], sig_t.w[0]); // and the smaller exp in x
+}
+
+
+if (exp_y - exp_x > 33) {
+ res = 0;
+ BID_RETURN (res);
+} // difference cannot be greater than 10^33
+
+if (exp_y - exp_x > 19) {
+ // recalculate y's significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y,
+ ten2k128[exp_y - exp_x - 20]);
+ {
+ res = ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && (sig_n_prime256.w[1] == sig_x.w[1])
+ && (sig_n_prime256.w[0] == sig_x.w[0]));
+ BID_RETURN (res);
+ }
+
+}
+ //else{
+ // recalculate y's significand upwards
+__mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y);
+{
+ res = ((sig_n_prime192.w[2] == 0)
+ && (sig_n_prime192.w[1] == sig_x.w[1])
+ && (sig_n_prime192.w[0] == sig_x.w[0]));
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_greater, x,
+ y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered, rather than
+ // equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity =>
+ // return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0) ||
+ (sig_n_prime192.w[1] > sig_y.w[1]) ||
+ (sig_n_prime192.w[1] == sig_y.w[1] &&
+ sig_n_prime192.w[0] > sig_y.w[0])) ^
+ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0 ||
+ (sig_n_prime256.w[1] > sig_x.w[1] ||
+ (sig_n_prime256.w[1] == sig_x.w[1] &&
+ sig_n_prime256.w[0] > sig_x.w[0]))) ^
+ ((x.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_quiet_greater_equal, x,
+ y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && (y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison of the
+ // significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] <
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 1
+{
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] <
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_quiet_greater_unordered,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than
+ // equal : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity =>
+ // return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison of the
+ // significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] <
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] <
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_less, x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || (y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 0;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison of the
+ // significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_less_equal,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 1
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity =>
+ // return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison of the
+ // significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] &&
+ sig_x.w[0] >=
+ sig_y.w[0])) ^ ((x.
+ w[1] &
+ MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_quiet_less_unordered,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || (y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 0;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_not_equal,
+ x, y)
+
+ int res;
+ int exp_x, exp_y, exp_t;
+ UINT128 sig_x, sig_y, sig_t;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equivalent.
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ if ((y.w[1] & MASK_INF) == MASK_INF) {
+ res = (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else {
+ res = 1;
+ BID_RETURN (res);
+ }
+}
+if ((y.w[1] & MASK_INF) == MASK_INF) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+} else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ => not equal : return 0
+if ((x.w[1] ^ y.w[1]) & MASK_SIGN) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+if (exp_x > exp_y) { // to simplify the loop below,
+ SWAP (exp_x, exp_y, exp_t); // put the larger exp in y,
+ SWAP (sig_x.w[1], sig_y.w[1], sig_t.w[1]); // and the smaller exp in x
+ SWAP (sig_x.w[0], sig_y.w[0], sig_t.w[0]); // and the smaller exp in x
+}
+
+
+if (exp_y - exp_x > 33) {
+ res = 1;
+ BID_RETURN (res);
+} // difference cannot be greater than 10^33
+
+if (exp_y - exp_x > 19) {
+ // recalculate y's significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y,
+ ten2k128[exp_y - exp_x - 20]);
+ {
+ res = ((sig_n_prime256.w[3] != 0) || (sig_n_prime256.w[2] != 0)
+ || (sig_n_prime256.w[1] != sig_x.w[1])
+ || (sig_n_prime256.w[0] != sig_x.w[0]));
+ BID_RETURN (res);
+ }
+
+}
+ //else{
+ // recalculate y's significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y);
+{
+ res = ((sig_n_prime192.w[2] != 0)
+ || (sig_n_prime192.w[1] != sig_x.w[1])
+ || (sig_n_prime192.w[0] != sig_x.w[0]));
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_not_greater,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 1
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_not_less, x,
+ y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && (y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res =
+ ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] <
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 1
+{
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] <
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_ordered, x,
+ y)
+
+ int res;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is ordered : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_quiet_unordered,
+ x, y)
+
+ int res;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+if ((x.w[1] & MASK_SNAN) == MASK_SNAN
+ || (y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION;
+}
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_greater,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_signaling_greater_equal,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && (y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res =
+ ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] <
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 1
+{
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] <
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_signaling_greater_unordered,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res =
+ ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] <
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] <
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int, bid128_signaling_less, x,
+ y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || (y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 0;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, |x| < |y|, return 1 if positive
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_signaling_less_equal,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 0;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 1
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_signaling_less_unordered,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) != MASK_INF)
+ || (y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 0;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 0;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_signaling_not_greater,
+ x, y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 1
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) != MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 0
+ {
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 0
+{
+ res = (sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (int,
+ bid128_signaling_not_less, x,
+ y)
+
+ int res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 1
+if (((x.w[1] & MASK_NAN) == MASK_NAN)
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+*pfpsf |= INVALID_EXCEPTION;
+{
+ res = 1;
+ BID_RETURN (res);
+}
+}
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // INFINITY (CASE3)
+if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y.w[1] & MASK_INF) == MASK_INF)
+ && (y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+} else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+}
+ // CONVERT X
+sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+sig_x.w[0] = x.w[0];
+exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF X IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_x = 1;
+else
+ non_canon_x = 0;
+
+ // CONVERT Y
+exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+sig_y.w[0] = y.w[0];
+
+ // CHECK IF Y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+if ((sig_y.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_y.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_y.w[0] > 0x378d8e63ffffffffull))
+ || ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull))
+ non_canon_y = 1;
+else
+ non_canon_y = 0;
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+if (non_canon_x || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+}
+if (non_canon_y || ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+}
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+}
+ // is x is zero, it is greater if Y is negative
+else if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // is y is zero, X is greater if it is positive
+else if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+ // REDUNDANT REPRESENTATIONS (CASE6)
+
+ // if exponents are the same, then we have a simple comparison
+ // of the significands
+if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+}
+if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+if (diff > 0) { // to simplify the loop below,
+
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } // difference cannot be greater than 10^33
+
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ //else { //128 by 64 bit multiply -> 192 bits
+ __mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_x);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res = (((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+diff = exp_y - exp_x;
+
+ // if exp_x is 33 less than exp_y, no need for compensation
+if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ } // if equal, return 1
+ {
+ res =
+ ((sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] <
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+ //else { //128 by 64 bit multiply -> 192 bits
+ // adjust the y significand upwards
+__mul_64x128_to192 (sig_n_prime192, ten2k64[diff], sig_y);
+
+ // if postitive, return whichever significand is larger (converse if negative)
+if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+} // if equal, return 1
+{
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] <
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_div.c b/gcc-4.9/libgcc/config/libbid/bid128_div.c
new file mode 100644
index 000000000..c68ab3ddc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_div.c
@@ -0,0 +1,1851 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_div_macros.h"
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+#include <fenv.h>
+
+#define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT
+#endif
+
+extern UINT32 convert_table[5][128][2];
+extern SINT8 factors[][2];
+extern UINT8 packed_10000_zeros[];
+
+BID128_FUNCTION_ARG2 (bid128_div, x, y)
+
+ UINT256 CA4, CA4r, P256;
+ UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, Ql, res;
+ UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, PD,
+ valid_y;
+ int_float fx, fy, f64;
+ UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+ int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+ int nzeros, i, j, k, d5;
+ unsigned rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y);
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ // test if x is NaN
+if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN
+ (y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull)
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = (CX.w[1]) & QUIET_MASK64;
+ res.w[0] = CX.w[0];
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // y is NaN?
+ if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull))
+ // return NaN
+ {
+ // return +/-Inf
+ res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) |
+ 0x7800000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+}
+ // x is 0
+if ((y.w[1] & 0x7800000000000000ull) < 0x7800000000000000ull) {
+ if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // return 0
+ res.w[1] = (x.w[1] ^ y.w[1]) & 0x8000000000000000ull;
+ exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128;
+ if (exponent_x > DECIMAL_MAX_EXPON_128)
+ exponent_x = DECIMAL_MAX_EXPON_128;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ res.w[1] |= (((UINT64) exponent_x) << 49);
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+}
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = CY.w[1] & QUIET_MASK64;
+ res.w[0] = CY.w[0];
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return +/-0
+ res.w[1] = sign_x ^ sign_y;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // y is 0, return +/-Inf
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ res.w[1] =
+ ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128;
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 33;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ if (!CR.w[1] && !CR.w[0]) {
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ ed2 = 34 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ T128.w[1] = power10_table_128[ed2].w[1];
+ __mul_128x128_to_256 (CA4, CR, T128);
+ diff_expon = diff_expon - ed2;
+ __mul_128x128_low (CQ, CQ, T128);
+
+}
+
+__div_256_by_128 (&CQ, &CA4, CY);
+
+#ifdef SET_STATUS_FLAGS
+if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+}
+#ifndef LEAVE_TRAILING_ZEROS
+else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+{
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ //T128 = reciprocals10_128[17];
+ T128.w[0] = 0x44909befeb9fad49ull;
+ T128.w[1] = 0x000b877aa3236a4bull;
+ __mul_128x128_to_256 (P256, CQ, T128);
+ //amount = recip_scale[17];
+ Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44));
+ Q_low = CQ.w[0] - Q_high * 100000000000000000ull;
+
+ if (!Q_low) {
+ diff_expon += 17;
+
+ tdigit[0] = Q_high & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_high >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64
+ amount = short_recip_scale[nzeros];
+ CQ.w[0] = CQ.w[1] >> amount;
+ } else
+ CQ.w[0] = Q_high;
+ CQ.w[1] = 0;
+
+ diff_expon += nzeros;
+ } else {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ //now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+}
+#endif
+
+if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+} else {
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+
+ handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ,
+ CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+}
+
+get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+}
+
+
+//#define LEAVE_TRAILING_ZEROS
+
+TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2 (UINT128, bid128dd_div, UINT64, x,
+ UINT64, y)
+
+ UINT256 CA4, CA4r, P256;
+ UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, Ql, res;
+ UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, PD,
+ valid_y;
+ int_float fx, fy, f64;
+ UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+ int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+ int nzeros, i, j, k, d5;
+ unsigned rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y);
+
+ // unpack arguments, check for NaN or Infinity
+CX.w[1] = 0;
+if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) {
+#ifdef SET_STATUS_FLAGS
+if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+
+ // test if x is NaN
+if ((x & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (CX.w[0] & 0x0003ffffffffffffull);
+ __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]);
+ res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull);
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if ((((y) & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ if ((((y) & 0x7c00000000000000ull) != 0x7c00000000000000ull)) {
+ // otherwise return +/-Inf
+ res.w[1] =
+ (((x) ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+}
+ // x is 0
+if ((((y) & 0x7800000000000000ull) != 0x7800000000000000ull)) {
+ if(!CY.w[0]) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+ // return 0
+res.w[1] = ((x) ^ (y)) & 0x8000000000000000ull;
+if (((y) & 0x6000000000000000ull) == 0x6000000000000000ull)
+ exponent_y = ((UINT32) ((y) >> 51)) & 0x3ff;
+else
+ exponent_y = ((UINT32) ((y) >> 53)) & 0x3ff;
+exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128;
+if (exponent_x > DECIMAL_MAX_EXPON_128)
+ exponent_x = DECIMAL_MAX_EXPON_128;
+else if (exponent_x < 0)
+ exponent_x = 0;
+res.w[1] |= (((UINT64) exponent_x) << 49);
+res.w[0] = 0;
+BID_RETURN (res);
+}
+}
+
+CY.w[1] = 0;
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (CY.w[0] & 0x0003ffffffffffffull);
+ __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]);
+ res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull);
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if (((y) & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return +/-0
+ res.w[1] = sign_x ^ sign_y;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // y is 0, return +/-Inf
+ res.w[1] =
+ (((x) ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ res.w[0] = 0;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128;
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 33;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ if (!CR.w[1] && !CR.w[0]) {
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ ed2 = 34 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ T128.w[1] = power10_table_128[ed2].w[1];
+ __mul_128x128_to_256 (CA4, CR, T128);
+ diff_expon = diff_expon - ed2;
+ __mul_128x128_low (CQ, CQ, T128);
+
+}
+
+__div_256_by_128 (&CQ, &CA4, CY);
+
+
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+ {
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+ //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2];
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ //T128 = reciprocals10_128[17];
+ T128.w[0] = 0x44909befeb9fad49ull;
+ T128.w[1] = 0x000b877aa3236a4bull;
+ __mul_128x128_to_256 (P256, CQ, T128);
+ //amount = recip_scale[17];
+ Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44));
+ Q_low = CQ.w[0] - Q_high * 100000000000000000ull;
+
+ if (!Q_low) {
+ diff_expon += 17;
+
+ tdigit[0] = Q_high & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_high >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64
+ amount = short_recip_scale[nzeros];
+ CQ.w[0] = CQ.w[1] >> amount;
+ } else
+ CQ.w[0] = Q_high;
+ CQ.w[1] = 0;
+
+ diff_expon += nzeros;
+ } else {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ get_BID128(&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+#endif
+
+if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+} else {
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ,
+ CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+}
+
+get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+}
+
+
+BID128_FUNCTION_ARGTYPE1_ARG128 (bid128dq_div, UINT64, x, y)
+ UINT256 CA4, CA4r, P256;
+ UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, Ql, res;
+ UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, valid_y,
+ PD;
+ int_float fx, fy, f64;
+ UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+ int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+ int nzeros, i, j, k, d5;
+ unsigned rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y);
+
+ // unpack arguments, check for NaN or Infinity
+CX.w[1] = 0;
+if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], x)) {
+#ifdef SET_STATUS_FLAGS
+if ((y.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+
+ // test if x is NaN
+if ((x & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (CX.w[0] & 0x0003ffffffffffffull);
+ __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]);
+ res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull);
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) {
+ // otherwise return +/-Inf
+ res.w[1] =
+ ((x ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+}
+ // x is 0
+if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) {
+ if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // return 0
+ res.w[1] = (x ^ y.w[1]) & 0x8000000000000000ull;
+ exponent_x = exponent_x - exponent_y + (DECIMAL_EXPONENT_BIAS_128<<1) - DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_128)
+ exponent_x = DECIMAL_MAX_EXPON_128;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ res.w[1] |= (((UINT64) exponent_x) << 49);
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+}
+exponent_x += (DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS);
+
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = CY.w[1] & QUIET_MASK64;
+ res.w[0] = CY.w[0];
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return +/-0
+ res.w[1] = sign_x ^ sign_y;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // y is 0, return +/-Inf
+ res.w[1] =
+ ((x ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ res.w[0] = 0;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128;
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 33;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ if (!CR.w[1] && !CR.w[0]) {
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ ed2 = 34 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ T128.w[1] = power10_table_128[ed2].w[1];
+ __mul_128x128_to_256 (CA4, CR, T128);
+ diff_expon = diff_expon - ed2;
+ __mul_128x128_low (CQ, CQ, T128);
+
+}
+
+__div_256_by_128 (&CQ, &CA4, CY);
+
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+ {
+ //printf("ed2=%d,nz=%d,a=%d,CQ="LX16","LX16", RH="LX16", RL="LX16"\n",ed2,nzeros,amount,CQ.w[1],CQ.w[0],reciprocals10_128[nzeros].w[1],reciprocals10_128[nzeros].w[0]);fflush(stdout);
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+ //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2];
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ //T128 = reciprocals10_128[17];
+ T128.w[0] = 0x44909befeb9fad49ull;
+ T128.w[1] = 0x000b877aa3236a4bull;
+ __mul_128x128_to_256 (P256, CQ, T128);
+ //amount = recip_scale[17];
+ Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44));
+ Q_low = CQ.w[0] - Q_high * 100000000000000000ull;
+
+ if (!Q_low) {
+ diff_expon += 17;
+
+ tdigit[0] = Q_high & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_high >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ //printf("i=%d, nz=%d, digit=%d (%d, %016I64x %016I64x)\n",i,nzeros,digit_h,digit,PD,digit_h);fflush(stdout);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64
+ amount = short_recip_scale[nzeros];
+ CQ.w[0] = CQ.w[1] >> amount;
+ } else
+ CQ.w[0] = Q_high;
+ CQ.w[1] = 0;
+
+ diff_expon += nzeros;
+ } else {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ //printf("i=%d, nz=%d, digit=%d (%d, %016I64x %016I64x)\n",i,nzeros,digit_h,digit,PD,digit_h);fflush(stdout);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+#endif
+
+if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+} else {
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ,
+ CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+}
+
+get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+
+}
+
+
+BID128_FUNCTION_ARG128_ARGTYPE2 (bid128qd_div, x, UINT64, y)
+ UINT256 CA4, CA4r, P256;
+ UINT128 CX, CY, T128, CQ, CR, CA, TP128, Qh, Ql, res;
+ UINT64 sign_x, sign_y, T, carry64, D, Q_high, Q_low, QX, PD,
+ valid_y;
+ int_float fx, fy, f64;
+ UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+ int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+ int nzeros, i, j, k, d5, rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+
+valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y);
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ // test if x is NaN
+if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN
+ (y & 0x7e00000000000000ull) == 0x7e00000000000000ull)
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = (CX.w[1]) & QUIET_MASK64;
+ res.w[0] = CX.w[0];
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // y is NaN?
+ if (((y & 0x7c00000000000000ull) != 0x7c00000000000000ull))
+ // return NaN
+ {
+ // return +/-Inf
+ res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull) |
+ 0x7800000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+}
+ // x is 0
+if ((y & 0x7800000000000000ull) < 0x7800000000000000ull) {
+ if (!CY.w[0]) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // return 0
+ res.w[1] = (x.w[1] ^ y) & 0x8000000000000000ull;
+ exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_128)
+ exponent_x = DECIMAL_MAX_EXPON_128;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ res.w[1] |= (((UINT64) exponent_x) << 49);
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+}
+CY.w[1] = 0;
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (CY.w[0] & 0x0003ffffffffffffull);
+ __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]);
+ res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull);
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y & INFINITY_MASK64) == INFINITY_MASK64) {
+ // return +/-0
+ res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull);
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // y is 0
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ res.w[1] = (sign_x ^ sign_y) | INFINITY_MASK64;
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 33;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ if (!CR.w[1] && !CR.w[0]) {
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ ed2 = 34 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ T128.w[1] = power10_table_128[ed2].w[1];
+ __mul_128x128_to_256 (CA4, CR, T128);
+ diff_expon = diff_expon - ed2;
+ __mul_128x128_low (CQ, CQ, T128);
+
+}
+
+__div_256_by_128 (&CQ, &CA4, CY);
+
+
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+ {
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+ //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2];
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ //T128 = reciprocals10_128[17];
+ T128.w[0] = 0x44909befeb9fad49ull;
+ T128.w[1] = 0x000b877aa3236a4bull;
+ __mul_128x128_to_256 (P256, CQ, T128);
+ //amount = recip_scale[17];
+ Q_high = (P256.w[2] >> 44) | (P256.w[3] << (64 - 44));
+ Q_low = CQ.w[0] - Q_high * 100000000000000000ull;
+
+ if (!Q_low) {
+ diff_expon += 17;
+
+ tdigit[0] = Q_high & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_high >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ __mul_64x64_to_128 (CQ, Q_high, reciprocals10_64[nzeros]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-64
+ amount = short_recip_scale[nzeros];
+ CQ.w[0] = CQ.w[1] >> amount;
+ } else
+ CQ.w[0] = Q_high;
+ CQ.w[1] = 0;
+
+ diff_expon += nzeros;
+ } else {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode,pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+#endif
+
+if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+} else {
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ handle_UF_128_rem (&res, sign_x ^ sign_y, diff_expon, CQ,
+ CA4.w[1] | CA4.w[0], &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+}
+
+get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_fma.c b/gcc-4.9/libgcc/config/libbid/bid128_fma.c
new file mode 100644
index 000000000..5f9879f04
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_fma.c
@@ -0,0 +1,4460 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ *
+ * BID128 fma x * y + z
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+
+static void
+rounding_correction (unsigned int rnd_mode,
+ unsigned int is_inexact_lt_midpoint,
+ unsigned int is_inexact_gt_midpoint,
+ unsigned int is_midpoint_lt_even,
+ unsigned int is_midpoint_gt_even,
+ int unbexp,
+ UINT128 * ptrres, _IDEC_flags * ptrfpsf) {
+ // unbiased true exponent unbexp may be larger than emax
+
+ UINT128 res = *ptrres; // expected to have the correct sign and coefficient
+ // (the exponent field is ignored, as unbexp is used instead)
+ UINT64 sign, exp;
+ UINT64 C_hi, C_lo;
+
+ // general correction from RN to RA, RM, RP, RZ
+ // Note: if the result is negative, then is_inexact_lt_midpoint,
+ // is_inexact_gt_midpoint, is_midpoint_lt_even, and is_midpoint_gt_even
+ // have to be considered as if determined for the absolute value of the
+ // result (so they seem to be reversed)
+
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even) {
+ *ptrfpsf |= INEXACT_EXCEPTION;
+ }
+ // apply correction to result calculated with unbounded exponent
+ sign = res.w[1] & MASK_SIGN;
+ exp = (UINT64) (unbexp + 6176) << 49; // valid only if expmin<=unbexp<=expmax
+ C_hi = res.w[1] & MASK_COEFF;
+ C_lo = res.w[0];
+ if ((!sign && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) ||
+ ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP) &&
+ is_midpoint_gt_even))) ||
+ (sign && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint) ||
+ ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_DOWN) &&
+ is_midpoint_gt_even)))) {
+ // C = C + 1
+ C_lo = C_lo + 1;
+ if (C_lo == 0)
+ C_hi = C_hi + 1;
+ if (C_hi == 0x0001ed09bead87c0ull && C_lo == 0x378d8e6400000000ull) {
+ // C = 10^34 => rounding overflow
+ C_hi = 0x0000314dc6448d93ull;
+ C_lo = 0x38c15b0a00000000ull; // 10^33
+ // exp = exp + EXP_P1;
+ unbexp = unbexp + 1;
+ exp = (UINT64) (unbexp + 6176) << 49;
+ }
+ } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) &&
+ ((sign && (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TO_ZERO)) ||
+ (!sign && (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TO_ZERO)))) {
+ // C = C - 1
+ C_lo = C_lo - 1;
+ if (C_lo == 0xffffffffffffffffull)
+ C_hi--;
+ // check if we crossed into the lower decade
+ if (C_hi == 0x0000314dc6448d93ull && C_lo == 0x38c15b09ffffffffull) {
+ // C = 10^33 - 1
+ if (exp > 0) {
+ C_hi = 0x0001ed09bead87c0ull; // 10^34 - 1
+ C_lo = 0x378d8e63ffffffffull;
+ // exp = exp - EXP_P1;
+ unbexp = unbexp - 1;
+ exp = (UINT64) (unbexp + 6176) << 49;
+ } else { // if exp = 0
+ if (is_midpoint_lt_even || is_midpoint_lt_even ||
+ is_inexact_gt_midpoint || is_inexact_gt_midpoint) // tiny & inexact
+ *ptrfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+ } else {
+ ; // the result is already correct
+ }
+ if (unbexp > expmax) { // 6111
+ *ptrfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ exp = 0;
+ if (!sign) { // result is positive
+ if (rnd_mode == ROUNDING_UP || rnd_mode == ROUNDING_TIES_AWAY) { // +inf
+ C_hi = 0x7800000000000000ull;
+ C_lo = 0x0000000000000000ull;
+ } else { // res = +MAXFP = (10^34-1) * 10^emax
+ C_hi = 0x5fffed09bead87c0ull;
+ C_lo = 0x378d8e63ffffffffull;
+ }
+ } else { // result is negative
+ if (rnd_mode == ROUNDING_DOWN || rnd_mode == ROUNDING_TIES_AWAY) { // -inf
+ C_hi = 0xf800000000000000ull;
+ C_lo = 0x0000000000000000ull;
+ } else { // res = -MAXFP = -(10^34-1) * 10^emax
+ C_hi = 0xdfffed09bead87c0ull;
+ C_lo = 0x378d8e63ffffffffull;
+ }
+ }
+ }
+ // assemble the result
+ res.w[1] = sign | exp | C_hi;
+ res.w[0] = C_lo;
+ *ptrres = res;
+}
+
+static void
+add256 (UINT256 x, UINT256 y, UINT256 * pz) {
+ // *z = x + yl assume the sum fits in 256 bits
+ UINT256 z;
+ z.w[0] = x.w[0] + y.w[0];
+ if (z.w[0] < x.w[0]) {
+ x.w[1]++;
+ if (x.w[1] == 0x0000000000000000ull) {
+ x.w[2]++;
+ if (x.w[2] == 0x0000000000000000ull) {
+ x.w[3]++;
+ }
+ }
+ }
+ z.w[1] = x.w[1] + y.w[1];
+ if (z.w[1] < x.w[1]) {
+ x.w[2]++;
+ if (x.w[2] == 0x0000000000000000ull) {
+ x.w[3]++;
+ }
+ }
+ z.w[2] = x.w[2] + y.w[2];
+ if (z.w[2] < x.w[2]) {
+ x.w[3]++;
+ }
+ z.w[3] = x.w[3] + y.w[3]; // it was assumed that no carry is possible
+ *pz = z;
+}
+
+static void
+sub256 (UINT256 x, UINT256 y, UINT256 * pz) {
+ // *z = x - y; assume x >= y
+ UINT256 z;
+ z.w[0] = x.w[0] - y.w[0];
+ if (z.w[0] > x.w[0]) {
+ x.w[1]--;
+ if (x.w[1] == 0xffffffffffffffffull) {
+ x.w[2]--;
+ if (x.w[2] == 0xffffffffffffffffull) {
+ x.w[3]--;
+ }
+ }
+ }
+ z.w[1] = x.w[1] - y.w[1];
+ if (z.w[1] > x.w[1]) {
+ x.w[2]--;
+ if (x.w[2] == 0xffffffffffffffffull) {
+ x.w[3]--;
+ }
+ }
+ z.w[2] = x.w[2] - y.w[2];
+ if (z.w[2] > x.w[2]) {
+ x.w[3]--;
+ }
+ z.w[3] = x.w[3] - y.w[3]; // no borrow possible, because x >= y
+ *pz = z;
+}
+
+
+static int
+nr_digits256 (UINT256 R256) {
+ int ind;
+ // determine the number of decimal digits in R256
+ if (R256.w[3] == 0x0 && R256.w[2] == 0x0 && R256.w[1] == 0x0) {
+ // between 1 and 19 digits
+ for (ind = 1; ind <= 19; ind++) {
+ if (R256.w[0] < ten2k64[ind]) {
+ break;
+ }
+ }
+ // ind digits
+ } else if (R256.w[3] == 0x0 && R256.w[2] == 0x0 &&
+ (R256.w[1] < ten2k128[0].w[1] ||
+ (R256.w[1] == ten2k128[0].w[1]
+ && R256.w[0] < ten2k128[0].w[0]))) {
+ // 20 digits
+ ind = 20;
+ } else if (R256.w[3] == 0x0 && R256.w[2] == 0x0) {
+ // between 21 and 38 digits
+ for (ind = 1; ind <= 18; ind++) {
+ if (R256.w[1] < ten2k128[ind].w[1] ||
+ (R256.w[1] == ten2k128[ind].w[1] &&
+ R256.w[0] < ten2k128[ind].w[0])) {
+ break;
+ }
+ }
+ // ind + 20 digits
+ ind = ind + 20;
+ } else if (R256.w[3] == 0x0 &&
+ (R256.w[2] < ten2k256[0].w[2] ||
+ (R256.w[2] == ten2k256[0].w[2] &&
+ R256.w[1] < ten2k256[0].w[1]) ||
+ (R256.w[2] == ten2k256[0].w[2] &&
+ R256.w[1] == ten2k256[0].w[1] &&
+ R256.w[0] < ten2k256[0].w[0]))) {
+ // 39 digits
+ ind = 39;
+ } else {
+ // between 40 and 68 digits
+ for (ind = 1; ind <= 29; ind++) {
+ if (R256.w[3] < ten2k256[ind].w[3] ||
+ (R256.w[3] == ten2k256[ind].w[3] &&
+ R256.w[2] < ten2k256[ind].w[2]) ||
+ (R256.w[3] == ten2k256[ind].w[3] &&
+ R256.w[2] == ten2k256[ind].w[2] &&
+ R256.w[1] < ten2k256[ind].w[1]) ||
+ (R256.w[3] == ten2k256[ind].w[3] &&
+ R256.w[2] == ten2k256[ind].w[2] &&
+ R256.w[1] == ten2k256[ind].w[1] &&
+ R256.w[0] < ten2k256[ind].w[0])) {
+ break;
+ }
+ }
+ // ind + 39 digits
+ ind = ind + 39;
+ }
+ return (ind);
+}
+
+// add/subtract C4 and C3 * 10^scale; this may follow a previous rounding, so
+// use the rounding information from ptr_is_* to avoid a double rounding error
+static void
+add_and_round (int q3,
+ int q4,
+ int e4,
+ int delta,
+ int p34,
+ UINT64 z_sign,
+ UINT64 p_sign,
+ UINT128 C3,
+ UINT256 C4,
+ int rnd_mode,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint,
+ _IDEC_flags * ptrfpsf, UINT128 * ptrres) {
+
+ int scale;
+ int x0;
+ int ind;
+ UINT64 R64;
+ UINT128 P128, R128;
+ UINT192 P192, R192;
+ UINT256 R256;
+ int is_midpoint_lt_even = 0;
+ int is_midpoint_gt_even = 0;
+ int is_inexact_lt_midpoint = 0;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even0 = 0;
+ int is_midpoint_gt_even0 = 0;
+ int is_inexact_lt_midpoint0 = 0;
+ int is_inexact_gt_midpoint0 = 0;
+ int incr_exp = 0;
+ int is_tiny = 0;
+ int lt_half_ulp = 0;
+ int eq_half_ulp = 0;
+ // int gt_half_ulp = 0;
+ UINT128 res = *ptrres;
+
+ // scale C3 up by 10^(q4-delta-q3), 0 <= q4-delta-q3 <= 2*P34-2 = 66
+ scale = q4 - delta - q3; // 0 <= scale <= 66 (or 0 <= scale <= 68 if this
+ // comes from Cases (2), (3), (4), (5), (6), with 0 <= |delta| <= 1
+
+ // calculate C3 * 10^scale in R256 (it has at most 67 decimal digits for
+ // Cases (15),(16),(17) and at most 69 for Cases (2),(3),(4),(5),(6))
+ if (scale == 0) {
+ R256.w[3] = 0x0ull;
+ R256.w[2] = 0x0ull;
+ R256.w[1] = C3.w[1];
+ R256.w[0] = C3.w[0];
+ } else if (scale <= 19) { // 10^scale fits in 64 bits
+ P128.w[1] = 0;
+ P128.w[0] = ten2k64[scale];
+ __mul_128x128_to_256 (R256, P128, C3);
+ } else if (scale <= 38) { // 10^scale fits in 128 bits
+ __mul_128x128_to_256 (R256, ten2k128[scale - 20], C3);
+ } else if (scale <= 57) { // 39 <= scale <= 57
+ // 10^scale fits in 192 bits but C3 * 10^scale fits in 223 or 230 bits
+ // (10^67 has 223 bits; 10^69 has 230 bits);
+ // must split the computation:
+ // 10^scale * C3 = 10*38 * 10^(scale-38) * C3 where 10^38 takes 127
+ // bits and so 10^(scale-38) * C3 fits in 128 bits with certainty
+ // Note that 1 <= scale - 38 <= 19 => 10^(scale-38) fits in 64 bits
+ __mul_64x128_to_128 (R128, ten2k64[scale - 38], C3);
+ // now multiply R128 by 10^38
+ __mul_128x128_to_256 (R256, R128, ten2k128[18]);
+ } else { // 58 <= scale <= 66
+ // 10^scale takes between 193 and 220 bits,
+ // and C3 * 10^scale fits in 223 bits (10^67/10^69 has 223/230 bits)
+ // must split the computation:
+ // 10^scale * C3 = 10*38 * 10^(scale-38) * C3 where 10^38 takes 127
+ // bits and so 10^(scale-38) * C3 fits in 128 bits with certainty
+ // Note that 20 <= scale - 38 <= 30 => 10^(scale-38) fits in 128 bits
+ // Calculate first 10^(scale-38) * C3, which fits in 128 bits; because
+ // 10^(scale-38) takes more than 64 bits, C3 will take less than 64
+ __mul_64x128_to_128 (R128, C3.w[0], ten2k128[scale - 58]);
+ // now calculate 10*38 * 10^(scale-38) * C3
+ __mul_128x128_to_256 (R256, R128, ten2k128[18]);
+ }
+ // C3 * 10^scale is now in R256
+
+ // for Cases (15), (16), (17) C4 > C3 * 10^scale because C4 has at least
+ // one extra digit; for Cases (2), (3), (4), (5), or (6) any order is
+ // possible
+ // add/subtract C4 and C3 * 10^scale; the exponent is e4
+ if (p_sign == z_sign) { // R256 = C4 + R256
+ // calculate R256 = C4 + C3 * 10^scale = C4 + R256 which is exact,
+ // but may require rounding
+ add256 (C4, R256, &R256);
+ } else { // if (p_sign != z_sign) { // R256 = C4 - R256
+ // calculate R256 = C4 - C3 * 10^scale = C4 - R256 or
+ // R256 = C3 * 10^scale - C4 = R256 - C4 which is exact,
+ // but may require rounding
+
+ // compare first R256 = C3 * 10^scale and C4
+ if (R256.w[3] > C4.w[3] || (R256.w[3] == C4.w[3] && R256.w[2] > C4.w[2]) ||
+ (R256.w[3] == C4.w[3] && R256.w[2] == C4.w[2] && R256.w[1] > C4.w[1]) ||
+ (R256.w[3] == C4.w[3] && R256.w[2] == C4.w[2] && R256.w[1] == C4.w[1] &&
+ R256.w[0] >= C4.w[0])) { // C3 * 10^scale >= C4
+ // calculate R256 = C3 * 10^scale - C4 = R256 - C4, which is exact,
+ // but may require rounding
+ sub256 (R256, C4, &R256);
+ // flip p_sign too, because the result has the sign of z
+ p_sign = z_sign;
+ } else { // if C4 > C3 * 10^scale
+ // calculate R256 = C4 - C3 * 10^scale = C4 - R256, which is exact,
+ // but may require rounding
+ sub256 (C4, R256, &R256);
+ }
+ // if the result is pure zero, the sign depends on the rounding mode
+ // (x*y and z had opposite signs)
+ if (R256.w[3] == 0x0ull && R256.w[2] == 0x0ull &&
+ R256.w[1] == 0x0ull && R256.w[0] == 0x0ull) {
+ if (rnd_mode != ROUNDING_DOWN)
+ p_sign = 0x0000000000000000ull;
+ else
+ p_sign = 0x8000000000000000ull;
+ // the exponent is max (e4, expmin)
+ if (e4 < -6176)
+ e4 = expmin;
+ // assemble result
+ res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49);
+ res.w[0] = 0x0;
+ *ptrres = res;
+ return;
+ }
+ }
+
+ // determine the number of decimal digits in R256
+ ind = nr_digits256 (R256);
+
+ // the exact result is (-1)^p_sign * R256 * 10^e4 where q (R256) = ind;
+ // round to the destination precision, with unbounded exponent
+
+ if (ind <= p34) {
+ // result rounded to the destination precision with unbounded exponent
+ // is exact
+ if (ind + e4 < p34 + expmin) {
+ is_tiny = 1; // applies to all rounding modes
+ }
+ res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | R256.w[1];
+ res.w[0] = R256.w[0];
+ // Note: res is correct only if expmin <= e4 <= expmax
+ } else { // if (ind > p34)
+ // if more than P digits, round to nearest to P digits
+ // round R256 to p34 digits
+ x0 = ind - p34; // 1 <= x0 <= 34 as 35 <= ind <= 68
+ if (ind <= 38) {
+ P128.w[1] = R256.w[1];
+ P128.w[0] = R256.w[0];
+ round128_19_38 (ind, x0, P128, &R128, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ } else if (ind <= 57) {
+ P192.w[2] = R256.w[2];
+ P192.w[1] = R256.w[1];
+ P192.w[0] = R256.w[0];
+ round192_39_57 (ind, x0, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ R128.w[1] = R192.w[1];
+ R128.w[0] = R192.w[0];
+ } else { // if (ind <= 68)
+ round256_58_76 (ind, x0, R256, &R256, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ R128.w[1] = R256.w[1];
+ R128.w[0] = R256.w[0];
+ }
+ // the rounded result has p34 = 34 digits
+ e4 = e4 + x0 + incr_exp;
+ if (rnd_mode == ROUNDING_TO_NEAREST) {
+ if (e4 < expmin) {
+ is_tiny = 1; // for other rounding modes apply correction
+ }
+ } else {
+ // for RM, RP, RZ, RA apply correction in order to determine tininess
+ // but do not save the result; apply the correction to
+ // (-1)^p_sign * significand * 10^0
+ P128.w[1] = p_sign | 0x3040000000000000ull | R128.w[1];
+ P128.w[0] = R128.w[0];
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint, is_midpoint_lt_even,
+ is_midpoint_gt_even, 0, &P128, ptrfpsf);
+ scale = ((P128.w[1] & MASK_EXP) >> 49) - 6176; // -1, 0, or +1
+ // the number of digits in the significand is p34 = 34
+ if (e4 + scale < expmin) {
+ is_tiny = 1;
+ }
+ }
+ ind = p34; // the number of decimal digits in the signifcand of res
+ res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | R128.w[1]; // RN
+ res.w[0] = R128.w[0];
+ // Note: res is correct only if expmin <= e4 <= expmax
+ // set the inexact flag after rounding with bounded exponent, if any
+ }
+ // at this point we have the result rounded with unbounded exponent in
+ // res and we know its tininess:
+ // res = (-1)^p_sign * significand * 10^e4,
+ // where q (significand) = ind <= p34
+ // Note: res is correct only if expmin <= e4 <= expmax
+
+ // check for overflow if RN
+ if (rnd_mode == ROUNDING_TO_NEAREST && (ind + e4) > (p34 + expmax)) {
+ res.w[1] = p_sign | 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *ptrres = res;
+ *ptrfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ return; // BID_RETURN (res)
+ } // else not overflow or not RN, so continue
+
+ // if (e4 >= expmin) we have the result rounded with bounded exponent
+ if (e4 < expmin) {
+ x0 = expmin - e4; // x0 >= 1; the number of digits to chop off of res
+ // where the result rounded [at most] once is
+ // (-1)^p_sign * significand_res * 10^e4
+
+ // avoid double rounding error
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+
+ if (x0 > ind) {
+ // nothing is left of res when moving the decimal point left x0 digits
+ is_inexact_lt_midpoint = 1;
+ res.w[1] = p_sign | 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ e4 = expmin;
+ } else if (x0 == ind) { // 1 <= x0 = ind <= p34 = 34
+ // this is <, =, or > 1/2 ulp
+ // compare the ind-digit value in the significand of res with
+ // 1/2 ulp = 5*10^(ind-1), i.e. determine whether it is
+ // less than, equal to, or greater than 1/2 ulp (significand of res)
+ R128.w[1] = res.w[1] & MASK_COEFF;
+ R128.w[0] = res.w[0];
+ if (ind <= 19) {
+ if (R128.w[0] < midpoint64[ind - 1]) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (R128.w[0] == midpoint64[ind - 1]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ // gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if (ind <= 38) {
+ if (R128.w[1] < midpoint128[ind - 20].w[1] ||
+ (R128.w[1] == midpoint128[ind - 20].w[1] &&
+ R128.w[0] < midpoint128[ind - 20].w[0])) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (R128.w[1] == midpoint128[ind - 20].w[1] &&
+ R128.w[0] == midpoint128[ind - 20].w[0]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ // gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+ if (lt_half_ulp || eq_half_ulp) {
+ // res = +0.0 * 10^expmin
+ res.w[1] = 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // if (gt_half_ulp)
+ // res = +1 * 10^expmin
+ res.w[1] = 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ res.w[1] = p_sign | res.w[1];
+ e4 = expmin;
+ } else { // if (1 <= x0 <= ind - 1 <= 33)
+ // round the ind-digit result to ind - x0 digits
+
+ if (ind <= 18) { // 2 <= ind <= 18
+ round64_2_18 (ind, x0, res.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ res.w[1] = 0x0;
+ res.w[0] = R64;
+ } else if (ind <= 38) {
+ P128.w[1] = res.w[1] & MASK_COEFF;
+ P128.w[0] = res.w[0];
+ round128_19_38 (ind, x0, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ }
+ e4 = e4 + x0; // expmin
+ // we want the exponent to be expmin, so if incr_exp = 1 then
+ // multiply the rounded result by 10 - it will still fit in 113 bits
+ if (incr_exp) {
+ // 64 x 128 -> 128
+ P128.w[1] = res.w[1] & MASK_COEFF;
+ P128.w[0] = res.w[0];
+ __mul_64x128_to_128 (res, ten2k64[1], P128);
+ }
+ res.w[1] =
+ p_sign | ((UINT64) (e4 + 6176) << 49) | (res.w[1] & MASK_COEFF);
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // Note: a double rounding error upward is not possible; for this
+ // the result after the first rounding would have to be 99...95
+ // (35 digits in all), possibly followed by a number of zeros; this
+ // is not possible in Cases (2)-(6) or (15)-(17) which may get here
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ }
+ }
+ // res contains the correct result
+ // apply correction if not rounding to nearest
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint, is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e4, &res, ptrfpsf);
+ }
+ if (is_midpoint_lt_even || is_midpoint_gt_even ||
+ is_inexact_lt_midpoint || is_inexact_gt_midpoint) {
+ // set the inexact flag
+ *ptrfpsf |= INEXACT_EXCEPTION;
+ if (is_tiny)
+ *ptrfpsf |= UNDERFLOW_EXCEPTION;
+ }
+
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ *ptrres = res;
+ return;
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+static void
+bid128_ext_fma (int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint, UINT128 * pres,
+ UINT128 * px, UINT128 * py,
+ UINT128 *
+ pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+static UINT128
+bid128_ext_fma (int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint, UINT128 x, UINT128 y,
+ UINT128 z _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT64 x_sign, y_sign, z_sign, p_sign, tmp_sign;
+ UINT64 x_exp = 0, y_exp = 0, z_exp = 0, p_exp;
+ int true_p_exp;
+ UINT128 C1, C2, C3;
+ UINT256 C4;
+ int q1 = 0, q2 = 0, q3 = 0, q4;
+ int e1, e2, e3, e4;
+ int scale, ind, delta, x0;
+ int p34 = P34; // used to modify the limit on the number of digits
+ BID_UI64DOUBLE tmp;
+ int x_nr_bits, y_nr_bits, z_nr_bits;
+ unsigned int save_fpsf;
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0;
+ int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even0 = 0, is_midpoint_gt_even0 = 0;
+ int is_inexact_lt_midpoint0 = 0, is_inexact_gt_midpoint0 = 0;
+ int incr_exp = 0;
+ int lsb;
+ int lt_half_ulp = 0;
+ int eq_half_ulp = 0;
+ int gt_half_ulp = 0;
+ int is_tiny = 0;
+ UINT64 R64, tmp64;
+ UINT128 P128, R128;
+ UINT192 P192, R192;
+ UINT256 R256;
+
+ // the following are based on the table of special cases for fma; the NaN
+ // behavior is similar to that of the IA-64 Architecture fma
+
+ // identify cases where at least one operand is NaN
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ BID_SWAP128 (z);
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ // if x = {0, f, inf, NaN}, y = NaN, z = {0, f, inf, NaN} then res = Q (y)
+ // check first for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (y)
+ res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = y.w[0];
+ } else { // y is QNaN
+ // return y
+ res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = y.w[0];
+ // if z = SNaN or x = SNaN signal invalid exception
+ if ((z.w[1] & MASK_SNAN) == MASK_SNAN ||
+ (x.w[1] & MASK_SNAN) == MASK_SNAN) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } else if ((z.w[1] & MASK_NAN) == MASK_NAN) { // z is NAN
+ // if x = {0, f, inf, NaN}, y = {0, f, inf}, z = NaN then res = Q (z)
+ // check first for non-canonical NaN payload
+ if (((z.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((z.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (z.w[0] > 0x38c15b09ffffffffull))) {
+ z.w[1] = z.w[1] & 0xffffc00000000000ull;
+ z.w[0] = 0x0ull;
+ }
+ if ((z.w[1] & MASK_SNAN) == MASK_SNAN) { // z is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (z)
+ res.w[1] = z.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = z.w[0];
+ } else { // z is QNaN
+ // return z
+ res.w[1] = z.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = z.w[0];
+ // if x = SNaN signal invalid exception
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } else if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, y = {0, f, inf}, z = {0, f, inf} then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // x, y, z are 0, f, or inf but not NaN => unpack the arguments and check
+ // for non-canonical values
+
+ x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((x.w[1] & MASK_ANY_INF) != MASK_INF) { // x != inf
+ // if x is not infinity check for non-canonical values - treated as zero
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull &&
+ C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ y_sign = y.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C2.w[1] = y.w[1] & MASK_COEFF;
+ C2.w[0] = y.w[0];
+ if ((y.w[1] & MASK_ANY_INF) != MASK_INF) { // y != inf
+ // if y is not infinity check for non-canonical values - treated as zero
+ if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C2.w[1] = 0; // significand high
+ C2.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C2.w[1] > 0x0001ed09bead87c0ull ||
+ (C2.w[1] == 0x0001ed09bead87c0ull &&
+ C2.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ C2.w[1] = 0;
+ C2.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ z_sign = z.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C3.w[1] = z.w[1] & MASK_COEFF;
+ C3.w[0] = z.w[0];
+ if ((z.w[1] & MASK_ANY_INF) != MASK_INF) { // z != inf
+ // if z is not infinity check for non-canonical values - treated as zero
+ if ((z.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ z_exp = (z.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C3.w[1] = 0; // significand high
+ C3.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ z_exp = z.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C3.w[1] > 0x0001ed09bead87c0ull ||
+ (C3.w[1] == 0x0001ed09bead87c0ull &&
+ C3.w[0] > 0x378d8e63ffffffffull)) {
+ // z is non-canonical if coefficient is larger than 10^34 -1
+ C3.w[1] = 0;
+ C3.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+
+ p_sign = x_sign ^ y_sign; // sign of the product
+
+ // identify cases where at least one operand is infinity
+
+ if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf
+ if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf
+ if (p_sign == z_sign) {
+ res.w[1] = z_sign | MASK_INF;
+ res.w[0] = 0x0;
+ } else {
+ // return QNaN Indefinite
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ } else { // z = 0 or z = f
+ res.w[1] = p_sign | MASK_INF;
+ res.w[0] = 0x0;
+ }
+ } else if (C2.w[1] != 0 || C2.w[0] != 0) { // y = f
+ if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf
+ if (p_sign == z_sign) {
+ res.w[1] = z_sign | MASK_INF;
+ res.w[0] = 0x0;
+ } else {
+ // return QNaN Indefinite
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ } else { // z = 0 or z = f
+ res.w[1] = p_sign | MASK_INF;
+ res.w[0] = 0x0;
+ }
+ } else { // y = 0
+ // return QNaN Indefinite
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf
+ // x = f, necessarily
+ if ((p_sign != z_sign)
+ || (C1.w[1] == 0x0ull && C1.w[0] == 0x0ull)) {
+ // return QNaN Indefinite
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ } else {
+ res.w[1] = z_sign | MASK_INF;
+ res.w[0] = 0x0;
+ }
+ } else if (C1.w[1] == 0x0 && C1.w[0] == 0x0) { // x = 0
+ // z = 0, f, inf
+ // return QNaN Indefinite
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ } else {
+ // x = f and z = 0, f, necessarily
+ res.w[1] = p_sign | MASK_INF;
+ res.w[0] = 0x0;
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } else if ((z.w[1] & MASK_ANY_INF) == MASK_INF) { // z = inf
+ // x = 0, f and y = 0, f, necessarily
+ res.w[1] = z_sign | MASK_INF;
+ res.w[0] = 0x0;
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+
+ true_p_exp = (x_exp >> 49) - 6176 + (y_exp >> 49) - 6176;
+ if (true_p_exp < -6176)
+ p_exp = 0; // cannot be less than EXP_MIN
+ else
+ p_exp = (UINT64) (true_p_exp + 6176) << 49;
+
+ if (((C1.w[1] == 0x0 && C1.w[0] == 0x0) || (C2.w[1] == 0x0 && C2.w[0] == 0x0)) && C3.w[1] == 0x0 && C3.w[0] == 0x0) { // (x = 0 or y = 0) and z = 0
+ // the result is 0
+ if (p_exp < z_exp)
+ res.w[1] = p_exp; // preferred exponent
+ else
+ res.w[1] = z_exp; // preferred exponent
+ if (p_sign == z_sign) {
+ res.w[1] |= z_sign;
+ res.w[0] = 0x0;
+ } else { // x * y and z have opposite signs
+ if (rnd_mode == ROUNDING_DOWN) {
+ // res = -0.0
+ res.w[1] |= MASK_SIGN;
+ res.w[0] = 0x0;
+ } else {
+ // res = +0.0
+ // res.w[1] |= 0x0;
+ res.w[0] = 0x0;
+ }
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // from this point on, we may need to know the number of decimal digits
+ // in the significands of x, y, z when x, y, z != 0
+
+ if (C1.w[1] != 0 || C1.w[0] != 0) { // x = f (non-zero finite)
+ // q1 = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q1 = nr_digits[x_nr_bits - 1].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q1++;
+ }
+ }
+
+ if (C2.w[1] != 0 || C2.w[0] != 0) { // y = f (non-zero finite)
+ if (C2.w[1] == 0) {
+ if (C2.w[0] >= 0x0020000000000000ull) { // y >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C2.w[0] >= 0x0000000100000000ull) { // y >= 2^32
+ tmp.d = (double) (C2.w[0] >> 32); // exact conversion
+ y_nr_bits =
+ 32 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // y < 2^32
+ tmp.d = (double) C2.w[0]; // exact conversion
+ y_nr_bits =
+ ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if y < 2^53
+ tmp.d = (double) C2.w[0]; // exact conversion
+ y_nr_bits =
+ ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C2.w[1] != 0 => nr. bits = 64 + nr_bits (C2.w[1])
+ tmp.d = (double) C2.w[1]; // exact conversion
+ y_nr_bits =
+ 64 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+
+ q2 = nr_digits[y_nr_bits].digits;
+ if (q2 == 0) {
+ q2 = nr_digits[y_nr_bits].digits1;
+ if (C2.w[1] > nr_digits[y_nr_bits].threshold_hi ||
+ (C2.w[1] == nr_digits[y_nr_bits].threshold_hi &&
+ C2.w[0] >= nr_digits[y_nr_bits].threshold_lo))
+ q2++;
+ }
+ }
+
+ if (C3.w[1] != 0 || C3.w[0] != 0) { // z = f (non-zero finite)
+ if (C3.w[1] == 0) {
+ if (C3.w[0] >= 0x0020000000000000ull) { // z >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C3.w[0] >= 0x0000000100000000ull) { // z >= 2^32
+ tmp.d = (double) (C3.w[0] >> 32); // exact conversion
+ z_nr_bits =
+ 32 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // z < 2^32
+ tmp.d = (double) C3.w[0]; // exact conversion
+ z_nr_bits =
+ ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if z < 2^53
+ tmp.d = (double) C3.w[0]; // exact conversion
+ z_nr_bits =
+ ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C3.w[1] != 0 => nr. bits = 64 + nr_bits (C3.w[1])
+ tmp.d = (double) C3.w[1]; // exact conversion
+ z_nr_bits =
+ 64 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+
+ q3 = nr_digits[z_nr_bits].digits;
+ if (q3 == 0) {
+ q3 = nr_digits[z_nr_bits].digits1;
+ if (C3.w[1] > nr_digits[z_nr_bits].threshold_hi ||
+ (C3.w[1] == nr_digits[z_nr_bits].threshold_hi &&
+ C3.w[0] >= nr_digits[z_nr_bits].threshold_lo))
+ q3++;
+ }
+ }
+
+ if ((C1.w[1] == 0x0 && C1.w[0] == 0x0) ||
+ (C2.w[1] == 0x0 && C2.w[0] == 0x0)) {
+ // x = 0 or y = 0
+ // z = f, necessarily; for 0 + z return z, with the preferred exponent
+ // the result is z, but need to get the preferred exponent
+ if (z_exp <= p_exp) { // the preferred exponent is z_exp
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | C3.w[1];
+ res.w[0] = C3.w[0];
+ } else { // if (p_exp < z_exp) the preferred exponent is p_exp
+ // return (C3 * 10^scale) * 10^(z_exp - scale)
+ // where scale = min (p34-q3, (z_exp-p_exp) >> 49)
+ scale = p34 - q3;
+ ind = (z_exp - p_exp) >> 49;
+ if (ind < scale)
+ scale = ind;
+ if (scale == 0) {
+ res.w[1] = z.w[1]; // & MASK_COEFF, which is redundant
+ res.w[0] = z.w[0];
+ } else if (q3 <= 19) { // z fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C3.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C3.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]);
+ }
+ } else { // z fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], C3);
+ }
+ // subtract scale from the exponent
+ z_exp = z_exp - ((UINT64) scale << 49);
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } else {
+ ; // continue with x = f, y = f, z = 0 or x = f, y = f, z = f
+ }
+
+ e1 = (x_exp >> 49) - 6176; // unbiased exponent of x
+ e2 = (y_exp >> 49) - 6176; // unbiased exponent of y
+ e3 = (z_exp >> 49) - 6176; // unbiased exponent of z
+ e4 = e1 + e2; // unbiased exponent of the exact x * y
+
+ // calculate C1 * C2 and its number of decimal digits, q4
+
+ // the exact product has either q1 + q2 - 1 or q1 + q2 decimal digits
+ // where 2 <= q1 + q2 <= 68
+ // calculate C4 = C1 * C2 and determine q
+ C4.w[3] = C4.w[2] = C4.w[1] = C4.w[0] = 0;
+ if (q1 + q2 <= 19) { // if 2 <= q1 + q2 <= 19, C4 = C1 * C2 fits in 64 bits
+ C4.w[0] = C1.w[0] * C2.w[0];
+ // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2
+ if (C4.w[0] < ten2k64[q1 + q2 - 1])
+ q4 = q1 + q2 - 1; // q4 in [1, 18]
+ else
+ q4 = q1 + q2; // q4 in [2, 19]
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64;
+ } else if (q1 + q2 == 20) { // C4 = C1 * C2 fits in 64 or 128 bits
+ // q1 <= 19 and q2 <= 19 so both C1 and C2 fit in 64 bits
+ __mul_64x64_to_128MACH (C4, C1.w[0], C2.w[0]);
+ // if C4 < 10^(q1+q2-1) = 10^19 then q4 = q1+q2-1 = 19 else q4 = q1+q2 = 20
+ if (C4.w[1] == 0 && C4.w[0] < ten2k64[19]) { // 19 = q1+q2-1
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64;
+ q4 = 19; // 19 = q1 + q2 - 1
+ } else {
+ // if (C4.w[1] == 0)
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64;
+ // else
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128;
+ q4 = 20; // 20 = q1 + q2
+ }
+ } else if (q1 + q2 <= 38) { // 21 <= q1 + q2 <= 38
+ // C4 = C1 * C2 fits in 64 or 128 bits
+ // (64 bits possibly, but only when q1 + q2 = 21 and C4 has 20 digits)
+ // at least one of C1, C2 has at most 19 decimal digits & fits in 64 bits
+ if (q1 <= 19) {
+ __mul_128x64_to_128 (C4, C1.w[0], C2);
+ } else { // q2 <= 19
+ __mul_128x64_to_128 (C4, C2.w[0], C1);
+ }
+ // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2
+ if (C4.w[1] < ten2k128[q1 + q2 - 21].w[1] ||
+ (C4.w[1] == ten2k128[q1 + q2 - 21].w[1] &&
+ C4.w[0] < ten2k128[q1 + q2 - 21].w[0])) {
+ // if (C4.w[1] == 0) // q4 = 20, necessarily
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 64;
+ // else
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128;
+ q4 = q1 + q2 - 1; // q4 in [20, 37]
+ } else {
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128;
+ q4 = q1 + q2; // q4 in [21, 38]
+ }
+ } else if (q1 + q2 == 39) { // C4 = C1 * C2 fits in 128 or 192 bits
+ // both C1 and C2 fit in 128 bits (actually in 113 bits)
+ // may replace this by 128x128_to192
+ __mul_128x128_to_256 (C4, C1, C2); // C4.w[3] is 0
+ // if C4 < 10^(q1+q2-1) = 10^38 then q4 = q1+q2-1 = 38 else q4 = q1+q2 = 39
+ if (C4.w[2] == 0 && (C4.w[1] < ten2k128[18].w[1] ||
+ (C4.w[1] == ten2k128[18].w[1]
+ && C4.w[0] < ten2k128[18].w[0]))) {
+ // 18 = 38 - 20 = q1+q2-1 - 20
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128;
+ q4 = 38; // 38 = q1 + q2 - 1
+ } else {
+ // if (C4.w[2] == 0)
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128;
+ // else
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192;
+ q4 = 39; // 39 = q1 + q2
+ }
+ } else if (q1 + q2 <= 57) { // 40 <= q1 + q2 <= 57
+ // C4 = C1 * C2 fits in 128 or 192 bits
+ // (128 bits possibly, but only when q1 + q2 = 40 and C4 has 39 digits)
+ // both C1 and C2 fit in 128 bits (actually in 113 bits); at most one
+ // may fit in 64 bits
+ if (C1.w[1] == 0) { // C1 fits in 64 bits
+ // __mul_64x128_full (REShi64, RESlo128, A64, B128)
+ __mul_64x128_full (C4.w[2], C4, C1.w[0], C2);
+ } else if (C2.w[1] == 0) { // C2 fits in 64 bits
+ // __mul_64x128_full (REShi64, RESlo128, A64, B128)
+ __mul_64x128_full (C4.w[2], C4, C2.w[0], C1);
+ } else { // both C1 and C2 require 128 bits
+ // may use __mul_128x128_to_192 (C4.w[2], C4.w[0], C2.w[0], C1);
+ __mul_128x128_to_256 (C4, C1, C2); // C4.w[3] = 0
+ }
+ // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2
+ if (C4.w[2] < ten2k256[q1 + q2 - 40].w[2] ||
+ (C4.w[2] == ten2k256[q1 + q2 - 40].w[2] &&
+ (C4.w[1] < ten2k256[q1 + q2 - 40].w[1] ||
+ (C4.w[1] == ten2k256[q1 + q2 - 40].w[1] &&
+ C4.w[0] < ten2k256[q1 + q2 - 40].w[0])))) {
+ // if (C4.w[2] == 0) // q4 = 39, necessarily
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 128;
+ // else
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192;
+ q4 = q1 + q2 - 1; // q4 in [39, 56]
+ } else {
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192;
+ q4 = q1 + q2; // q4 in [40, 57]
+ }
+ } else if (q1 + q2 == 58) { // C4 = C1 * C2 fits in 192 or 256 bits
+ // both C1 and C2 fit in 128 bits (actually in 113 bits); at most one
+ // may fit in 64 bits
+ if (C1.w[1] == 0) { // C1 * C2 will fit in 192 bits
+ __mul_64x128_full (C4.w[2], C4, C1.w[0], C2); // may use 64x128_to_192
+ } else if (C2.w[1] == 0) { // C1 * C2 will fit in 192 bits
+ __mul_64x128_full (C4.w[2], C4, C2.w[0], C1); // may use 64x128_to_192
+ } else { // C1 * C2 will fit in 192 bits or in 256 bits
+ __mul_128x128_to_256 (C4, C1, C2);
+ }
+ // if C4 < 10^(q1+q2-1) = 10^57 then q4 = q1+q2-1 = 57 else q4 = q1+q2 = 58
+ if (C4.w[3] == 0 && (C4.w[2] < ten2k256[18].w[2] ||
+ (C4.w[2] == ten2k256[18].w[2]
+ && (C4.w[1] < ten2k256[18].w[1]
+ || (C4.w[1] == ten2k256[18].w[1]
+ && C4.w[0] < ten2k256[18].w[0]))))) {
+ // 18 = 57 - 39 = q1+q2-1 - 39
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192;
+ q4 = 57; // 57 = q1 + q2 - 1
+ } else {
+ // if (C4.w[3] == 0)
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192;
+ // else
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 256;
+ q4 = 58; // 58 = q1 + q2
+ }
+ } else { // if 59 <= q1 + q2 <= 68
+ // C4 = C1 * C2 fits in 192 or 256 bits
+ // (192 bits possibly, but only when q1 + q2 = 59 and C4 has 58 digits)
+ // both C1 and C2 fit in 128 bits (actually in 113 bits); none fits in
+ // 64 bits
+ // may use __mul_128x128_to_192 (C4.w[2], C4.w[0], C2.w[0], C1);
+ __mul_128x128_to_256 (C4, C1, C2); // C4.w[3] = 0
+ // if C4 < 10^(q1+q2-1) then q4 = q1 + q2 - 1 else q4 = q1 + q2
+ if (C4.w[3] < ten2k256[q1 + q2 - 40].w[3] ||
+ (C4.w[3] == ten2k256[q1 + q2 - 40].w[3] &&
+ (C4.w[2] < ten2k256[q1 + q2 - 40].w[2] ||
+ (C4.w[2] == ten2k256[q1 + q2 - 40].w[2] &&
+ (C4.w[1] < ten2k256[q1 + q2 - 40].w[1] ||
+ (C4.w[1] == ten2k256[q1 + q2 - 40].w[1] &&
+ C4.w[0] < ten2k256[q1 + q2 - 40].w[0])))))) {
+ // if (C4.w[3] == 0) // q4 = 58, necessarily
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 192;
+ // else
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 256;
+ q4 = q1 + q2 - 1; // q4 in [58, 67]
+ } else {
+ // length of C1 * C2 rounded up to a multiple of 64 bits is len = 256;
+ q4 = q1 + q2; // q4 in [59, 68]
+ }
+ }
+
+ if (C3.w[1] == 0x0 && C3.w[0] == 0x0) { // x = f, y = f, z = 0
+ save_fpsf = *pfpsf; // sticky bits - caller value must be preserved
+ *pfpsf = 0;
+
+ if (q4 > p34) {
+
+ // truncate C4 to p34 digits into res
+ // x = q4-p34, 1 <= x <= 34 because 35 <= q4 <= 68
+ x0 = q4 - p34;
+ if (q4 <= 38) {
+ P128.w[1] = C4.w[1];
+ P128.w[0] = C4.w[0];
+ round128_19_38 (q4, x0, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ } else if (q4 <= 57) { // 35 <= q4 <= 57
+ P192.w[2] = C4.w[2];
+ P192.w[1] = C4.w[1];
+ P192.w[0] = C4.w[0];
+ round192_39_57 (q4, x0, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ res.w[0] = R192.w[0];
+ res.w[1] = R192.w[1];
+ } else { // if (q4 <= 68)
+ round256_58_76 (q4, x0, C4, &R256, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ res.w[0] = R256.w[0];
+ res.w[1] = R256.w[1];
+ }
+ e4 = e4 + x0;
+ if (incr_exp) {
+ e4 = e4 + 1;
+ }
+ q4 = p34;
+ // res is now the coefficient of the result rounded to the destination
+ // precision, with unbounded exponent; the exponent is e4; q4=digits(res)
+ } else { // if (q4 <= p34)
+ // C4 * 10^e4 is the result rounded to the destination precision, with
+ // unbounded exponent (which is exact)
+
+ if ((q4 + e4 <= p34 + expmax) && (e4 > expmax)) {
+ // e4 is too large, but can be brought within range by scaling up C4
+ scale = e4 - expmax; // 1 <= scale < P-q4 <= P-1 => 1 <= scale <= P-2
+ // res = (C4 * 10^scale) * 10^expmax
+ if (q4 <= 19) { // C4 fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C4.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C4.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C4.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C4.w[0], ten2k128[scale - 20]);
+ }
+ } else { // C4 fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * CC43
+ __mul_128x64_to_128 (res, ten2k64[scale], C4);
+ }
+ e4 = e4 - scale; // expmax
+ q4 = q4 + scale;
+ } else {
+ res.w[1] = C4.w[1];
+ res.w[0] = C4.w[0];
+ }
+ // res is the coefficient of the result rounded to the destination
+ // precision, with unbounded exponent (it has q4 digits); the exponent
+ // is e4 (exact result)
+ }
+
+ // check for overflow
+ if (q4 + e4 > p34 + expmax) {
+ if (rnd_mode == ROUNDING_TO_NEAREST) {
+ res.w[1] = p_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ } else {
+ res.w[1] = p_sign | res.w[1];
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e4, &res, pfpsf);
+ }
+ *pfpsf |= save_fpsf;
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // check for underflow
+ if (q4 + e4 < expmin + P34) {
+ is_tiny = 1; // the result is tiny
+ if (e4 < expmin) {
+ // if e4 < expmin, we must truncate more of res
+ x0 = expmin - e4; // x0 >= 1
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ // the number of decimal digits in res is q4
+ if (x0 < q4) { // 1 <= x0 <= q4-1 => round res to q4 - x0 digits
+ if (q4 <= 18) { // 2 <= q4 <= 18, 1 <= x0 <= 17
+ round64_2_18 (q4, x0, res.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // R64 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 17
+ R64 = ten2k64[q4 - x0];
+ }
+ // res.w[1] = 0; (from above)
+ res.w[0] = R64;
+ } else { // if (q4 <= 34)
+ // 19 <= q4 <= 38
+ P128.w[1] = res.w[1];
+ P128.w[0] = res.w[0];
+ round128_19_38 (q4, x0, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // increase coefficient by a factor of 10; this will be <= 10^33
+ // R128 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 37
+ if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19
+ // res.w[1] = 0;
+ res.w[0] = ten2k64[q4 - x0];
+ } else { // 20 <= q4 - x0 <= 37
+ res.w[0] = ten2k128[q4 - x0 - 20].w[0];
+ res.w[1] = ten2k128[q4 - x0 - 20].w[1];
+ }
+ }
+ }
+ e4 = e4 + x0; // expmin
+ } else if (x0 == q4) {
+ // the second rounding is for 0.d(0)d(1)...d(q4-1) * 10^emin
+ // determine relationship with 1/2 ulp
+ if (q4 <= 19) {
+ if (res.w[0] < midpoint64[q4 - 1]) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (res.w[0] == midpoint64[q4 - 1]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ // gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if (q4 <= 34)
+ if (res.w[1] < midpoint128[q4 - 20].w[1] ||
+ (res.w[1] == midpoint128[q4 - 20].w[1] &&
+ res.w[0] < midpoint128[q4 - 20].w[0])) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (res.w[1] == midpoint128[q4 - 20].w[1] &&
+ res.w[0] == midpoint128[q4 - 20].w[0]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ // gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+ if (lt_half_ulp || eq_half_ulp) {
+ // res = +0.0 * 10^expmin
+ res.w[1] = 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // if (gt_half_ulp)
+ // res = +1 * 10^expmin
+ res.w[1] = 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ e4 = expmin;
+ } else { // if (x0 > q4)
+ // the second rounding is for 0.0...d(0)d(1)...d(q4-1) * 10^emin
+ res.w[1] = 0;
+ res.w[0] = 0;
+ e4 = expmin;
+ is_inexact_lt_midpoint = 1;
+ }
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // Note: a double rounding error upward is not possible; for this
+ // the result after the first rounding would have to be 99...95
+ // (35 digits in all), possibly followed by a number of zeros; this
+ // not possible for f * f + 0
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ } else { // if e4 >= emin then q4 < P and the result is tiny and exact
+ if (e3 < e4) {
+ // if (e3 < e4) the preferred exponent is e3
+ // return (C4 * 10^scale) * 10^(e4 - scale)
+ // where scale = min (p34-q4, (e4 - e3))
+ scale = p34 - q4;
+ ind = e4 - e3;
+ if (ind < scale)
+ scale = ind;
+ if (scale == 0) {
+ ; // res and e4 are unchanged
+ } else if (q4 <= 19) { // C4 fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 res.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, res.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 res.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, res.w[0], ten2k128[scale - 20]);
+ }
+ } else { // res fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], res);
+ }
+ // subtract scale from the exponent
+ e4 = e4 - scale;
+ }
+ }
+
+ // check for inexact result
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even) {
+ // set the inexact flag and the underflow flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | res.w[1];
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e4, &res, pfpsf);
+ }
+ *pfpsf |= save_fpsf;
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // no overflow, and no underflow for rounding to nearest
+ res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | res.w[1];
+
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e4, &res, pfpsf);
+ // if e4 = expmin && significand < 10^33 => result is tiny (for RD, RZ)
+ if (e4 == expmin) {
+ if ((res.w[1] & MASK_COEFF) < 0x0000314dc6448d93ull ||
+ ((res.w[1] & MASK_COEFF) == 0x0000314dc6448d93ull &&
+ res.w[0] < 0x38c15b0a00000000ull)) {
+ is_tiny = 1;
+ }
+ }
+ }
+
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (is_tiny)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+
+ if ((*pfpsf & INEXACT_EXCEPTION) == 0) { // x * y is exact
+ // need to ensure that the result has the preferred exponent
+ p_exp = res.w[1] & MASK_EXP;
+ if (z_exp < p_exp) { // the preferred exponent is z_exp
+ // signficand of res in C3
+ C3.w[1] = res.w[1] & MASK_COEFF;
+ C3.w[0] = res.w[0];
+ // the number of decimal digits of x * y is q4 <= 34
+ // Note: the coefficient fits in 128 bits
+
+ // return (C3 * 10^scale) * 10^(p_exp - scale)
+ // where scale = min (p34-q4, (p_exp-z_exp) >> 49)
+ scale = p34 - q4;
+ ind = (p_exp - z_exp) >> 49;
+ if (ind < scale)
+ scale = ind;
+ // subtract scale from the exponent
+ p_exp = p_exp - ((UINT64) scale << 49);
+ if (scale == 0) {
+ ; // leave res unchanged
+ } else if (q4 <= 19) { // x * y fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C3.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C3.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]);
+ }
+ res.w[1] = p_sign | (p_exp & MASK_EXP) | res.w[1];
+ } else { // x * y fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], C3);
+ res.w[1] = p_sign | (p_exp & MASK_EXP) | res.w[1];
+ }
+ } // else leave the result as it is, because p_exp <= z_exp
+ }
+ *pfpsf |= save_fpsf;
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } // else we have f * f + f
+
+ // continue with x = f, y = f, z = f
+
+ delta = q3 + e3 - q4 - e4;
+delta_ge_zero:
+ if (delta >= 0) {
+
+ if (p34 <= delta - 1 || // Case (1')
+ (p34 == delta && e3 + 6176 < p34 - q3)) { // Case (1''A)
+ // check for overflow, which can occur only in Case (1')
+ if ((q3 + e3) > (p34 + expmax) && p34 <= delta - 1) {
+ // e3 > expmax implies p34 <= delta-1 and e3 > expmax is a necessary
+ // condition for (q3 + e3) > (p34 + expmax)
+ if (rnd_mode == ROUNDING_TO_NEAREST) {
+ res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ } else {
+ if (p_sign == z_sign) {
+ is_inexact_lt_midpoint = 1;
+ } else {
+ is_inexact_gt_midpoint = 1;
+ }
+ // q3 <= p34; if (q3 < p34) scale C3 up by 10^(p34-q3)
+ scale = p34 - q3;
+ if (scale == 0) {
+ res.w[1] = z_sign | C3.w[1];
+ res.w[0] = C3.w[0];
+ } else {
+ if (q3 <= 19) { // C3 fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C3.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C3.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C3.w[0],
+ ten2k128[scale - 20]);
+ }
+ } else { // C3 fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], C3);
+ }
+ // the coefficient in res has q3 + scale = p34 digits
+ }
+ e3 = e3 - scale;
+ res.w[1] = z_sign | res.w[1];
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e3, &res, pfpsf);
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // res = z
+ if (q3 < p34) { // the preferred exponent is z_exp - (p34 - q3)
+ // return (C3 * 10^scale) * 10^(z_exp - scale)
+ // where scale = min (p34-q3, z_exp-EMIN)
+ scale = p34 - q3;
+ ind = e3 + 6176;
+ if (ind < scale)
+ scale = ind;
+ if (scale == 0) {
+ res.w[1] = C3.w[1];
+ res.w[0] = C3.w[0];
+ } else if (q3 <= 19) { // z fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C3.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C3.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]);
+ }
+ } else { // z fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], C3);
+ }
+ // the coefficient in res has q3 + scale digits
+ // subtract scale from the exponent
+ z_exp = z_exp - ((UINT64) scale << 49);
+ e3 = e3 - scale;
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ if (scale + q3 < p34)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ } else {
+ scale = 0;
+ res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | C3.w[1];
+ res.w[0] = C3.w[0];
+ }
+
+ // use the following to avoid double rounding errors when operating on
+ // mixed formats in rounding to nearest, and for correcting the result
+ // if not rounding to nearest
+ if ((p_sign != z_sign) && (delta == (q3 + scale + 1))) {
+ // there is a gap of exactly one digit between the scaled C3 and C4
+ // C3 * 10^ scale = 10^(q3+scale-1) <=> C3 = 10^(q3-1) is special case
+ if ((q3 <= 19 && C3.w[0] != ten2k64[q3 - 1]) ||
+ (q3 == 20 && (C3.w[1] != 0 || C3.w[0] != ten2k64[19])) ||
+ (q3 >= 21 && (C3.w[1] != ten2k128[q3 - 21].w[1] ||
+ C3.w[0] != ten2k128[q3 - 21].w[0]))) {
+ // C3 * 10^ scale != 10^(q3-1)
+ // if ((res.w[1] & MASK_COEFF) != 0x0000314dc6448d93ull ||
+ // res.w[0] != 0x38c15b0a00000000ull) { // C3 * 10^scale != 10^33
+ is_inexact_gt_midpoint = 1; // if (z_sign), set as if for abs. value
+ } else { // if C3 * 10^scale = 10^(q3+scale-1)
+ // ok from above e3 = (z_exp >> 49) - 6176;
+ // the result is always inexact
+ if (q4 == 1) {
+ R64 = C4.w[0];
+ } else {
+ // if q4 > 1 then truncate C4 from q4 digits to 1 digit;
+ // x = q4-1, 1 <= x <= 67 and check if this operation is exact
+ if (q4 <= 18) { // 2 <= q4 <= 18
+ round64_2_18 (q4, q4 - 1, C4.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ } else if (q4 <= 38) {
+ P128.w[1] = C4.w[1];
+ P128.w[0] = C4.w[0];
+ round128_19_38 (q4, q4 - 1, P128, &R128, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R64 = R128.w[0]; // one decimal digit
+ } else if (q4 <= 57) {
+ P192.w[2] = C4.w[2];
+ P192.w[1] = C4.w[1];
+ P192.w[0] = C4.w[0];
+ round192_39_57 (q4, q4 - 1, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R64 = R192.w[0]; // one decimal digit
+ } else { // if (q4 <= 68)
+ round256_58_76 (q4, q4 - 1, C4, &R256, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R64 = R256.w[0]; // one decimal digit
+ }
+ if (incr_exp) {
+ R64 = 10;
+ }
+ }
+ if (q4 == 1 && C4.w[0] == 5) {
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 1;
+ is_midpoint_gt_even = 0;
+ } else if ((e3 == expmin) ||
+ R64 < 5 || (R64 == 5 && is_inexact_gt_midpoint)) {
+ // result does not change
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ // result decremented is 10^(q3+scale) - 1
+ if ((q3 + scale) <= 19) {
+ res.w[1] = 0;
+ res.w[0] = ten2k64[q3 + scale];
+ } else { // if ((q3 + scale + 1) <= 35)
+ res.w[1] = ten2k128[q3 + scale - 20].w[1];
+ res.w[0] = ten2k128[q3 + scale - 20].w[0];
+ }
+ res.w[0] = res.w[0] - 1; // borrow never occurs
+ z_exp = z_exp - EXP_P1;
+ e3 = e3 - 1;
+ res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | res.w[1];
+ }
+ if (e3 == expmin) {
+ if (R64 < 5 || (R64 == 5 && !is_inexact_lt_midpoint)) {
+ ; // result not tiny (in round-to-nearest mode)
+ } else {
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+ } // end 10^(q3+scale-1)
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else {
+ if (p_sign == z_sign) {
+ // if (z_sign), set as if for absolute value
+ is_inexact_lt_midpoint = 1;
+ } else { // if (p_sign != z_sign)
+ // if (z_sign), set as if for absolute value
+ is_inexact_gt_midpoint = 1;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ // the result is always inexact => set the inexact flag
+ // Determine tininess:
+ // if (exp > expmin)
+ // the result is not tiny
+ // else // if exp = emin
+ // if (q3 + scale < p34)
+ // the result is tiny
+ // else // if (q3 + scale = p34)
+ // if (C3 * 10^scale > 10^33)
+ // the result is not tiny
+ // else // if C3 * 10^scale = 10^33
+ // if (xy * z > 0)
+ // the result is not tiny
+ // else // if (xy * z < 0)
+ // if (z > 0)
+ // if rnd_mode != RP
+ // the result is tiny
+ // else // if RP
+ // the result is not tiny
+ // else // if (z < 0)
+ // if rnd_mode != RM
+ // the result is tiny
+ // else // if RM
+ // the result is not tiny
+ // endif
+ // endif
+ // endif
+ // endif
+ // endif
+ // endif
+ if ((e3 == expmin && (q3 + scale) < p34) ||
+ (e3 == expmin && (q3 + scale) == p34 &&
+ (res.w[1] & MASK_COEFF) == 0x0000314dc6448d93ull && // 10^33_high
+ res.w[0] == 0x38c15b0a00000000ull && // 10^33_low
+ z_sign != p_sign && ((!z_sign && rnd_mode != ROUNDING_UP) ||
+ (z_sign && rnd_mode != ROUNDING_DOWN)))) {
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e3, &res, pfpsf);
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ } else if (p34 == delta) { // Case (1''B)
+
+ // because Case (1''A) was treated above, e3 + 6176 >= p34 - q3
+ // and C3 can be scaled up to p34 digits if needed
+
+ // scale C3 to p34 digits if needed
+ scale = p34 - q3; // 0 <= scale <= p34 - 1
+ if (scale == 0) {
+ res.w[1] = C3.w[1];
+ res.w[0] = C3.w[0];
+ } else if (q3 <= 19) { // z fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C3.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C3.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]);
+ }
+ } else { // z fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], C3);
+ }
+ // subtract scale from the exponent
+ z_exp = z_exp - ((UINT64) scale << 49);
+ e3 = e3 - scale;
+ // now z_sign, z_exp, and res correspond to a z scaled to p34 = 34 digits
+
+ // determine whether x * y is less than, equal to, or greater than
+ // 1/2 ulp (z)
+ if (q4 <= 19) {
+ if (C4.w[0] < midpoint64[q4 - 1]) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ } else if (C4.w[0] == midpoint64[q4 - 1]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ } else { // > 1/2 ulp
+ gt_half_ulp = 1;
+ }
+ } else if (q4 <= 38) {
+ if (C4.w[2] == 0 && (C4.w[1] < midpoint128[q4 - 20].w[1] ||
+ (C4.w[1] == midpoint128[q4 - 20].w[1] &&
+ C4.w[0] < midpoint128[q4 - 20].w[0]))) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ } else if (C4.w[2] == 0 && C4.w[1] == midpoint128[q4 - 20].w[1] &&
+ C4.w[0] == midpoint128[q4 - 20].w[0]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ } else { // > 1/2 ulp
+ gt_half_ulp = 1;
+ }
+ } else if (q4 <= 58) {
+ if (C4.w[3] == 0 && (C4.w[2] < midpoint192[q4 - 39].w[2] ||
+ (C4.w[2] == midpoint192[q4 - 39].w[2] &&
+ C4.w[1] < midpoint192[q4 - 39].w[1]) ||
+ (C4.w[2] == midpoint192[q4 - 39].w[2] &&
+ C4.w[1] == midpoint192[q4 - 39].w[1] &&
+ C4.w[0] < midpoint192[q4 - 39].w[0]))) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ } else if (C4.w[3] == 0 && C4.w[2] == midpoint192[q4 - 39].w[2] &&
+ C4.w[1] == midpoint192[q4 - 39].w[1] &&
+ C4.w[0] == midpoint192[q4 - 39].w[0]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ } else { // > 1/2 ulp
+ gt_half_ulp = 1;
+ }
+ } else {
+ if (C4.w[3] < midpoint256[q4 - 59].w[3] ||
+ (C4.w[3] == midpoint256[q4 - 59].w[3] &&
+ C4.w[2] < midpoint256[q4 - 59].w[2]) ||
+ (C4.w[3] == midpoint256[q4 - 59].w[3] &&
+ C4.w[2] == midpoint256[q4 - 59].w[2] &&
+ C4.w[1] < midpoint256[q4 - 59].w[1]) ||
+ (C4.w[3] == midpoint256[q4 - 59].w[3] &&
+ C4.w[2] == midpoint256[q4 - 59].w[2] &&
+ C4.w[1] == midpoint256[q4 - 59].w[1] &&
+ C4.w[0] < midpoint256[q4 - 59].w[0])) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ } else if (C4.w[3] == midpoint256[q4 - 59].w[3] &&
+ C4.w[2] == midpoint256[q4 - 59].w[2] &&
+ C4.w[1] == midpoint256[q4 - 59].w[1] &&
+ C4.w[0] == midpoint256[q4 - 59].w[0]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ } else { // > 1/2 ulp
+ gt_half_ulp = 1;
+ }
+ }
+
+ if (p_sign == z_sign) {
+ if (lt_half_ulp) {
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ // use the following to avoid double rounding errors when operating on
+ // mixed formats in rounding to nearest
+ is_inexact_lt_midpoint = 1; // if (z_sign), as if for absolute value
+ } else if ((eq_half_ulp && (res.w[0] & 0x01)) || gt_half_ulp) {
+ // add 1 ulp to the significand
+ res.w[0]++;
+ if (res.w[0] == 0x0ull)
+ res.w[1]++;
+ // check for rounding overflow, when coeff == 10^34
+ if ((res.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull &&
+ res.w[0] == 0x378d8e6400000000ull) { // coefficient = 10^34
+ e3 = e3 + 1;
+ // coeff = 10^33
+ z_exp = ((UINT64) (e3 + 6176) << 49) & MASK_EXP;
+ res.w[1] = 0x0000314dc6448d93ull;
+ res.w[0] = 0x38c15b0a00000000ull;
+ }
+ // end add 1 ulp
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ if (eq_half_ulp) {
+ is_midpoint_lt_even = 1; // if (z_sign), as if for absolute value
+ } else {
+ is_inexact_gt_midpoint = 1; // if (z_sign), as if for absolute value
+ }
+ } else { // if (eq_half_ulp && !(res.w[0] & 0x01))
+ // leave unchanged
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ is_midpoint_gt_even = 1; // if (z_sign), as if for absolute value
+ }
+ // the result is always inexact, and never tiny
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // check for overflow
+ if (e3 > expmax && rnd_mode == ROUNDING_TO_NEAREST) {
+ res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e3, &res, pfpsf);
+ z_exp = res.w[1] & MASK_EXP;
+ }
+ } else { // if (p_sign != z_sign)
+ // consider two cases, because C3 * 10^scale = 10^33 is a special case
+ if (res.w[1] != 0x0000314dc6448d93ull ||
+ res.w[0] != 0x38c15b0a00000000ull) { // C3 * 10^scale != 10^33
+ if (lt_half_ulp) {
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ // use the following to avoid double rounding errors when operating
+ // on mixed formats in rounding to nearest
+ is_inexact_gt_midpoint = 1; // if (z_sign), as if for absolute value
+ } else if ((eq_half_ulp && (res.w[0] & 0x01)) || gt_half_ulp) {
+ // subtract 1 ulp from the significand
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ if (eq_half_ulp) {
+ is_midpoint_gt_even = 1; // if (z_sign), as if for absolute value
+ } else {
+ is_inexact_lt_midpoint = 1; //if(z_sign), as if for absolute value
+ }
+ } else { // if (eq_half_ulp && !(res.w[0] & 0x01))
+ // leave unchanged
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ is_midpoint_lt_even = 1; // if (z_sign), as if for absolute value
+ }
+ // the result is always inexact, and never tiny
+ // check for overflow for RN
+ if (e3 > expmax) {
+ if (rnd_mode == ROUNDING_TO_NEAREST) {
+ res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ } else {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even,
+ is_midpoint_gt_even, e3, &res,
+ pfpsf);
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even,
+ is_midpoint_gt_even, e3, &res, pfpsf);
+ }
+ z_exp = res.w[1] & MASK_EXP;
+ } else { // if C3 * 10^scale = 10^33
+ e3 = (z_exp >> 49) - 6176;
+ if (e3 > expmin) {
+ // the result is exact if exp > expmin and C4 = d*10^(q4-1),
+ // where d = 1, 2, 3, ..., 9; it could be tiny too, but exact
+ if (q4 == 1) {
+ // if q4 = 1 the result is exact
+ // result coefficient = 10^34 - C4
+ res.w[1] = 0x0001ed09bead87c0ull;
+ res.w[0] = 0x378d8e6400000000ull - C4.w[0];
+ z_exp = z_exp - EXP_P1;
+ e3 = e3 - 1;
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ } else {
+ // if q4 > 1 then truncate C4 from q4 digits to 1 digit;
+ // x = q4-1, 1 <= x <= 67 and check if this operation is exact
+ if (q4 <= 18) { // 2 <= q4 <= 18
+ round64_2_18 (q4, q4 - 1, C4.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ } else if (q4 <= 38) {
+ P128.w[1] = C4.w[1];
+ P128.w[0] = C4.w[0];
+ round128_19_38 (q4, q4 - 1, P128, &R128, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R64 = R128.w[0]; // one decimal digit
+ } else if (q4 <= 57) {
+ P192.w[2] = C4.w[2];
+ P192.w[1] = C4.w[1];
+ P192.w[0] = C4.w[0];
+ round192_39_57 (q4, q4 - 1, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R64 = R192.w[0]; // one decimal digit
+ } else { // if (q4 <= 68)
+ round256_58_76 (q4, q4 - 1, C4, &R256, &incr_exp,
+ &is_midpoint_lt_even,
+ &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R64 = R256.w[0]; // one decimal digit
+ }
+ if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // the result is exact: 10^34 - R64
+ // incr_exp = 0 with certainty
+ z_exp = z_exp - EXP_P1;
+ e3 = e3 - 1;
+ res.w[1] =
+ z_sign | (z_exp & MASK_EXP) | 0x0001ed09bead87c0ull;
+ res.w[0] = 0x378d8e6400000000ull - R64;
+ } else {
+ // We want R64 to be the top digit of C4, but we actually
+ // obtained (C4 * 10^(-q4+1))RN; a correction may be needed,
+ // because the top digit is (C4 * 10^(-q4+1))RZ
+ // however, if incr_exp = 1 then R64 = 10 with certainty
+ if (incr_exp) {
+ R64 = 10;
+ }
+ // the result is inexact as C4 has more than 1 significant digit
+ // and C3 * 10^scale = 10^33
+ // example of case that is treated here:
+ // 100...0 * 10^e3 - 0.41 * 10^e3 =
+ // 0999...9.59 * 10^e3 -> rounds to 99...96*10^(e3-1)
+ // note that (e3 > expmin}
+ // in order to round, subtract R64 from 10^34 and then compare
+ // C4 - R64 * 10^(q4-1) with 1/2 ulp
+ // calculate 10^34 - R64
+ res.w[1] = 0x0001ed09bead87c0ull;
+ res.w[0] = 0x378d8e6400000000ull - R64;
+ z_exp = z_exp - EXP_P1; // will be OR-ed with sign & significand
+ // calculate C4 - R64 * 10^(q4-1); this is a rare case and
+ // R64 is small, 1 <= R64 <= 9
+ e3 = e3 - 1;
+ if (is_inexact_lt_midpoint) {
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (is_inexact_gt_midpoint) {
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if (is_midpoint_lt_even) {
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 1;
+ } else if (is_midpoint_gt_even) {
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 1;
+ } else {
+ ;
+ }
+ // the result is always inexact, and never tiny
+ // check for overflow for RN
+ if (e3 > expmax) {
+ if (rnd_mode == ROUNDING_TO_NEAREST) {
+ res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ } else {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even,
+ is_midpoint_gt_even, e3, &res,
+ pfpsf);
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ res.w[1] =
+ z_sign | ((UINT64) (e3 + 6176) << 49) | res.w[1];
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even,
+ is_midpoint_gt_even, e3, &res,
+ pfpsf);
+ }
+ z_exp = res.w[1] & MASK_EXP;
+ } // end result is inexact
+ } // end q4 > 1
+ } else { // if (e3 = emin)
+ // if e3 = expmin the result is also tiny (the condition for
+ // tininess is C4 > 050...0 [q4 digits] which is met because
+ // the msd of C4 is not zero)
+ // the result is tiny and inexact in all rounding modes;
+ // it is either 100...0 or 0999...9 (use lt_half_ulp, eq_half_ulp,
+ // gt_half_ulp to calculate)
+ // if (lt_half_ulp || eq_half_ulp) res = 10^33 stays unchanged
+
+ // p_sign != z_sign so swap gt_half_ulp and lt_half_ulp
+ if (gt_half_ulp) { // res = 10^33 - 1
+ res.w[1] = 0x0000314dc6448d93ull;
+ res.w[0] = 0x38c15b09ffffffffull;
+ } else {
+ res.w[1] = 0x0000314dc6448d93ull;
+ res.w[0] = 0x38c15b0a00000000ull;
+ }
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ *pfpsf |= UNDERFLOW_EXCEPTION; // inexact is set later
+
+ if (eq_half_ulp) {
+ is_midpoint_lt_even = 1; // if (z_sign), as if for absolute value
+ } else if (lt_half_ulp) {
+ is_inexact_gt_midpoint = 1; //if(z_sign), as if for absolute value
+ } else { // if (gt_half_ulp)
+ is_inexact_lt_midpoint = 1; //if(z_sign), as if for absolute value
+ }
+
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even,
+ is_midpoint_gt_even, e3, &res,
+ pfpsf);
+ z_exp = res.w[1] & MASK_EXP;
+ }
+ } // end e3 = emin
+ // set the inexact flag (if the result was not exact)
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even)
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // end 10^33
+ } // end if (p_sign != z_sign)
+ res.w[1] = z_sign | (z_exp & MASK_EXP) | res.w[1];
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ } else if (((q3 <= delta && delta < p34 && p34 < delta + q4) || // Case (2)
+ (q3 <= delta && delta + q4 <= p34) || // Case (3)
+ (delta < q3 && p34 < delta + q4) || // Case (4)
+ (delta < q3 && q3 <= delta + q4 && delta + q4 <= p34) || // Case (5)
+ (delta + q4 < q3)) && // Case (6)
+ !(delta <= 1 && p_sign != z_sign)) { // Case (2), (3), (4), (5) or (6)
+
+ // the result has the sign of z
+
+ if ((q3 <= delta && delta < p34 && p34 < delta + q4) || // Case (2)
+ (delta < q3 && p34 < delta + q4)) { // Case (4)
+ // round first the sum x * y + z with unbounded exponent
+ // scale C3 up by scale = p34 - q3, 1 <= scale <= p34-1,
+ // 1 <= scale <= 33
+ // calculate res = C3 * 10^scale
+ scale = p34 - q3;
+ x0 = delta + q4 - p34;
+ } else if (delta + q4 < q3) { // Case (6)
+ // make Case (6) look like Case (3) or Case (5) with scale = 0
+ // by scaling up C4 by 10^(q3 - delta - q4)
+ scale = q3 - delta - q4; // 1 <= scale <= 33
+ if (q4 <= 19) { // 1 <= scale <= 19; C4 fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C4.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (P128, C4.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C4.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (P128, C4.w[0], ten2k128[scale - 20]);
+ }
+ } else { // C4 fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C4
+ __mul_128x64_to_128 (P128, ten2k64[scale], C4);
+ }
+ C4.w[0] = P128.w[0];
+ C4.w[1] = P128.w[1];
+ // e4 does not need adjustment, as it is not used from this point on
+ scale = 0;
+ x0 = 0;
+ // now Case (6) looks like Case (3) or Case (5) with scale = 0
+ } else { // if Case (3) or Case (5)
+ // Note: Case (3) is similar to Case (2), but scale differs and the
+ // result is exact, unless it is tiny (so x0 = 0 when calculating the
+ // result with unbounded exponent)
+
+ // calculate first the sum x * y + z with unbounded exponent (exact)
+ // scale C3 up by scale = delta + q4 - q3, 1 <= scale <= p34-1,
+ // 1 <= scale <= 33
+ // calculate res = C3 * 10^scale
+ scale = delta + q4 - q3;
+ x0 = 0;
+ // Note: the comments which follow refer [mainly] to Case (2)]
+ }
+
+ case2_repeat:
+ if (scale == 0) { // this could happen e.g. if we return to case2_repeat
+ // or in Case (4)
+ res.w[1] = C3.w[1];
+ res.w[0] = C3.w[0];
+ } else if (q3 <= 19) { // 1 <= scale <= 19; z fits in 64 bits
+ if (scale <= 19) { // 10^scale fits in 64 bits
+ // 64 x 64 C3.w[0] * ten2k64[scale]
+ __mul_64x64_to_128MACH (res, C3.w[0], ten2k64[scale]);
+ } else { // 10^scale fits in 128 bits
+ // 64 x 128 C3.w[0] * ten2k128[scale - 20]
+ __mul_128x64_to_128 (res, C3.w[0], ten2k128[scale - 20]);
+ }
+ } else { // z fits in 128 bits, but 10^scale must fit in 64 bits
+ // 64 x 128 ten2k64[scale] * C3
+ __mul_128x64_to_128 (res, ten2k64[scale], C3);
+ }
+ // e3 is already calculated
+ e3 = e3 - scale;
+ // now res = C3 * 10^scale and e3 = e3 - scale
+ // Note: C3 * 10^scale could be 10^34 if we returned to case2_repeat
+ // because the result was too small
+
+ // round C4 to nearest to q4 - x0 digits, where x0 = delta + q4 - p34,
+ // 1 <= x0 <= min (q4 - 1, 2 * p34 - 1) <=> 1 <= x0 <= min (q4 - 1, 67)
+ // Also: 1 <= q4 - x0 <= p34 -1 => 1 <= q4 - x0 <= 33 (so the result of
+ // the rounding fits in 128 bits!)
+ // x0 = delta + q4 - p34 (calculated before reaching case2_repeat)
+ // because q3 + q4 - x0 <= P => x0 >= q3 + q4 - p34
+ if (x0 == 0) { // this could happen only if we return to case2_repeat, or
+ // for Case (3) or Case (6)
+ R128.w[1] = C4.w[1];
+ R128.w[0] = C4.w[0];
+ } else if (q4 <= 18) {
+ // 2 <= q4 <= 18, max(1, q3+q4-p34) <= x0 <= q4 - 1, 1 <= x0 <= 17
+ round64_2_18 (q4, x0, C4.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // R64 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 17
+ R64 = ten2k64[q4 - x0];
+ }
+ R128.w[1] = 0;
+ R128.w[0] = R64;
+ } else if (q4 <= 38) {
+ // 19 <= q4 <= 38, max(1, q3+q4-p34) <= x0 <= q4 - 1, 1 <= x0 <= 37
+ P128.w[1] = C4.w[1];
+ P128.w[0] = C4.w[0];
+ round128_19_38 (q4, x0, P128, &R128, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // R128 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 1, 1 <= q4 - x0 <= 37
+ if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19
+ R128.w[0] = ten2k64[q4 - x0];
+ // R128.w[1] stays 0
+ } else { // 20 <= q4 - x0 <= 37
+ R128.w[0] = ten2k128[q4 - x0 - 20].w[0];
+ R128.w[1] = ten2k128[q4 - x0 - 20].w[1];
+ }
+ }
+ } else if (q4 <= 57) {
+ // 38 <= q4 <= 57, max(1, q3+q4-p34) <= x0 <= q4 - 1, 5 <= x0 <= 56
+ P192.w[2] = C4.w[2];
+ P192.w[1] = C4.w[1];
+ P192.w[0] = C4.w[0];
+ round192_39_57 (q4, x0, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ // R192.w[2] is always 0
+ if (incr_exp) {
+ // R192 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 5, 1 <= q4 - x0 <= 52
+ if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19
+ R192.w[0] = ten2k64[q4 - x0];
+ // R192.w[1] stays 0
+ // R192.w[2] stays 0
+ } else { // 20 <= q4 - x0 <= 33
+ R192.w[0] = ten2k128[q4 - x0 - 20].w[0];
+ R192.w[1] = ten2k128[q4 - x0 - 20].w[1];
+ // R192.w[2] stays 0
+ }
+ }
+ R128.w[1] = R192.w[1];
+ R128.w[0] = R192.w[0];
+ } else {
+ // 58 <= q4 <= 68, max(1, q3+q4-p34) <= x0 <= q4 - 1, 25 <= x0 <= 67
+ round256_58_76 (q4, x0, C4, &R256, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ // R256.w[3] and R256.w[2] are always 0
+ if (incr_exp) {
+ // R256 = 10^(q4-x0), 1 <= q4 - x0 <= q4 - 25, 1 <= q4 - x0 <= 43
+ if (q4 - x0 <= 19) { // 1 <= q4 - x0 <= 19
+ R256.w[0] = ten2k64[q4 - x0];
+ // R256.w[1] stays 0
+ // R256.w[2] stays 0
+ // R256.w[3] stays 0
+ } else { // 20 <= q4 - x0 <= 33
+ R256.w[0] = ten2k128[q4 - x0 - 20].w[0];
+ R256.w[1] = ten2k128[q4 - x0 - 20].w[1];
+ // R256.w[2] stays 0
+ // R256.w[3] stays 0
+ }
+ }
+ R128.w[1] = R256.w[1];
+ R128.w[0] = R256.w[0];
+ }
+ // now add C3 * 10^scale in res and the signed top (q4-x0) digits of C4,
+ // rounded to nearest, which were copied into R128
+ if (z_sign == p_sign) {
+ lsb = res.w[0] & 0x01; // lsb of C3 * 10^scale
+ // the sum can result in [up to] p34 or p34 + 1 digits
+ res.w[0] = res.w[0] + R128.w[0];
+ res.w[1] = res.w[1] + R128.w[1];
+ if (res.w[0] < R128.w[0])
+ res.w[1]++; // carry
+ // if res > 10^34 - 1 need to increase x0 and decrease scale by 1
+ if (res.w[1] > 0x0001ed09bead87c0ull ||
+ (res.w[1] == 0x0001ed09bead87c0ull &&
+ res.w[0] > 0x378d8e63ffffffffull)) {
+ // avoid double rounding error
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ P128.w[1] = res.w[1];
+ P128.w[0] = res.w[0];
+ round128_19_38 (35, 1, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ // incr_exp is 0 with certainty in this case
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // Note: a double rounding error upward is not possible; for this
+ // the result after the first rounding would have to be 99...95
+ // (35 digits in all), possibly followed by a number of zeros; this
+ // not possible in Cases (2)-(6) or (15)-(17) which may get here
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint
+ && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0
+ || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0
+ || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ // adjust exponent
+ e3 = e3 + 1;
+ if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ if (is_midpoint_lt_even0 || is_midpoint_gt_even0 ||
+ is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ }
+ } else {
+ // this is the result rounded with unbounded exponent, unless a
+ // correction is needed
+ res.w[1] = res.w[1] & MASK_COEFF;
+ if (lsb == 1) {
+ if (is_midpoint_gt_even) {
+ // res = res + 1
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 1;
+ res.w[0]++;
+ if (res.w[0] == 0x0)
+ res.w[1]++;
+ // check for rounding overflow
+ if (res.w[1] == 0x0001ed09bead87c0ull &&
+ res.w[0] == 0x378d8e6400000000ull) {
+ // res = 10^34 => rounding overflow
+ res.w[1] = 0x0000314dc6448d93ull;
+ res.w[0] = 0x38c15b0a00000000ull; // 10^33
+ e3++;
+ }
+ } else if (is_midpoint_lt_even) {
+ // res = res - 1
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 1;
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // if the result is pure zero, the sign depends on the rounding
+ // mode (x*y and z had opposite signs)
+ if (res.w[1] == 0x0ull && res.w[0] == 0x0ull) {
+ if (rnd_mode != ROUNDING_DOWN)
+ z_sign = 0x0000000000000000ull;
+ else
+ z_sign = 0x8000000000000000ull;
+ // the exponent is max (e3, expmin)
+ res.w[1] = 0x0;
+ res.w[0] = 0x0;
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ } else {
+ ;
+ }
+ }
+ }
+ } else { // if (z_sign != p_sign)
+ lsb = res.w[0] & 0x01; // lsb of C3 * 10^scale; R128 contains rounded C4
+ // used to swap rounding indicators if p_sign != z_sign
+ // the sum can result in [up to] p34 or p34 - 1 digits
+ tmp64 = res.w[0];
+ res.w[0] = res.w[0] - R128.w[0];
+ res.w[1] = res.w[1] - R128.w[1];
+ if (res.w[0] > tmp64)
+ res.w[1]--; // borrow
+ // if res < 10^33 and exp > expmin need to decrease x0 and
+ // increase scale by 1
+ if (e3 > expmin && ((res.w[1] < 0x0000314dc6448d93ull ||
+ (res.w[1] == 0x0000314dc6448d93ull &&
+ res.w[0] < 0x38c15b0a00000000ull)) ||
+ (is_inexact_lt_midpoint
+ && res.w[1] == 0x0000314dc6448d93ull
+ && res.w[0] == 0x38c15b0a00000000ull))
+ && x0 >= 1) {
+ x0 = x0 - 1;
+ // first restore e3, otherwise it will be too small
+ e3 = e3 + scale;
+ scale = scale + 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ incr_exp = 0;
+ goto case2_repeat;
+ }
+ // else this is the result rounded with unbounded exponent;
+ // because the result has opposite sign to that of C4 which was
+ // rounded, need to change the rounding indicators
+ if (is_inexact_lt_midpoint) {
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (is_inexact_gt_midpoint) {
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if (lsb == 0) {
+ if (is_midpoint_lt_even) {
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 1;
+ } else if (is_midpoint_gt_even) {
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 1;
+ } else {
+ ;
+ }
+ } else if (lsb == 1) {
+ if (is_midpoint_lt_even) {
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0x0)
+ res.w[1]++;
+ // check for rounding overflow
+ if (res.w[1] == 0x0001ed09bead87c0ull &&
+ res.w[0] == 0x378d8e6400000000ull) {
+ // res = 10^34 => rounding overflow
+ res.w[1] = 0x0000314dc6448d93ull;
+ res.w[0] = 0x38c15b0a00000000ull; // 10^33
+ e3++;
+ }
+ } else if (is_midpoint_gt_even) {
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // if the result is pure zero, the sign depends on the rounding
+ // mode (x*y and z had opposite signs)
+ if (res.w[1] == 0x0ull && res.w[0] == 0x0ull) {
+ if (rnd_mode != ROUNDING_DOWN)
+ z_sign = 0x0000000000000000ull;
+ else
+ z_sign = 0x8000000000000000ull;
+ // the exponent is max (e3, expmin)
+ res.w[1] = 0x0;
+ res.w[0] = 0x0;
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ }
+ } else {
+ ;
+ }
+ } else {
+ ;
+ }
+ }
+ // check for underflow
+ if (e3 == expmin) { // and if significand < 10^33 => result is tiny
+ if ((res.w[1] & MASK_COEFF) < 0x0000314dc6448d93ull ||
+ ((res.w[1] & MASK_COEFF) == 0x0000314dc6448d93ull &&
+ res.w[0] < 0x38c15b0a00000000ull)) {
+ is_tiny = 1;
+ }
+ } else if (e3 < expmin) {
+ // the result is tiny, so we must truncate more of res
+ is_tiny = 1;
+ x0 = expmin - e3;
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ // determine the number of decimal digits in res
+ if (res.w[1] == 0x0) {
+ // between 1 and 19 digits
+ for (ind = 1; ind <= 19; ind++) {
+ if (res.w[0] < ten2k64[ind]) {
+ break;
+ }
+ }
+ // ind digits
+ } else if (res.w[1] < ten2k128[0].w[1] ||
+ (res.w[1] == ten2k128[0].w[1]
+ && res.w[0] < ten2k128[0].w[0])) {
+ // 20 digits
+ ind = 20;
+ } else { // between 21 and 38 digits
+ for (ind = 1; ind <= 18; ind++) {
+ if (res.w[1] < ten2k128[ind].w[1] ||
+ (res.w[1] == ten2k128[ind].w[1] &&
+ res.w[0] < ten2k128[ind].w[0])) {
+ break;
+ }
+ }
+ // ind + 20 digits
+ ind = ind + 20;
+ }
+
+ // at this point ind >= x0; because delta >= 2 on this path, the case
+ // ind = x0 can occur only in Case (2) or case (3), when C3 has one
+ // digit (q3 = 1) equal to 1 (C3 = 1), e3 is expmin (e3 = expmin),
+ // the signs of x * y and z are opposite, and through cancellation
+ // the most significant decimal digit in res has the weight
+ // 10^(emin-1); however, it is clear that in this case the most
+ // significant digit is 9, so the result before rounding is
+ // 0.9... * 10^emin
+ // Otherwise, ind > x0 because there are non-zero decimal digits in the
+ // result with weight of at least 10^emin, and correction for underflow
+ // can be carried out using the round*_*_2_* () routines
+ if (x0 == ind) { // the result before rounding is 0.9... * 10^emin
+ res.w[1] = 0x0;
+ res.w[0] = 0x1;
+ is_inexact_gt_midpoint = 1;
+ } else if (ind <= 18) { // check that 2 <= ind
+ // 2 <= ind <= 18, 1 <= x0 <= 17
+ round64_2_18 (ind, x0, res.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // R64 = 10^(ind-x0), 1 <= ind - x0 <= ind - 1, 1 <= ind - x0 <= 17
+ R64 = ten2k64[ind - x0];
+ }
+ res.w[1] = 0;
+ res.w[0] = R64;
+ } else if (ind <= 38) {
+ // 19 <= ind <= 38
+ P128.w[1] = res.w[1];
+ P128.w[0] = res.w[0];
+ round128_19_38 (ind, x0, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // R128 = 10^(ind-x0), 1 <= ind - x0 <= ind - 1, 1 <= ind - x0 <= 37
+ if (ind - x0 <= 19) { // 1 <= ind - x0 <= 19
+ res.w[0] = ten2k64[ind - x0];
+ // res.w[1] stays 0
+ } else { // 20 <= ind - x0 <= 37
+ res.w[0] = ten2k128[ind - x0 - 20].w[0];
+ res.w[1] = ten2k128[ind - x0 - 20].w[1];
+ }
+ }
+ }
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // Note: a double rounding error upward is not possible; for this
+ // the result after the first rounding would have to be 99...95
+ // (35 digits in all), possibly followed by a number of zeros; this
+ // not possible in Cases (2)-(6) which may get here
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ // adjust exponent
+ e3 = e3 + x0;
+ if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ if (is_midpoint_lt_even0 || is_midpoint_gt_even0 ||
+ is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ }
+ } else {
+ ; // not underflow
+ }
+ // check for inexact result
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (is_tiny)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ // now check for significand = 10^34 (may have resulted from going
+ // back to case2_repeat)
+ if (res.w[1] == 0x0001ed09bead87c0ull &&
+ res.w[0] == 0x378d8e6400000000ull) { // if res = 10^34
+ res.w[1] = 0x0000314dc6448d93ull; // res = 10^33
+ res.w[0] = 0x38c15b0a00000000ull;
+ e3 = e3 + 1;
+ }
+ res.w[1] = z_sign | ((UINT64) (e3 + 6176) << 49) | res.w[1];
+ // check for overflow
+ if (rnd_mode == ROUNDING_TO_NEAREST && e3 > expmax) {
+ res.w[1] = z_sign | 0x7800000000000000ull; // +/-inf
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e3, &res, pfpsf);
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ } else {
+
+ // we get here only if delta <= 1 in Cases (2), (3), (4), (5), or (6) and
+ // the signs of x*y and z are opposite; in these cases massive
+ // cancellation can occur, so it is better to scale either C3 or C4 and
+ // to perform the subtraction before rounding; rounding is performed
+ // next, depending on the number of decimal digits in the result and on
+ // the exponent value
+ // Note: overlow is not possible in this case
+ // this is similar to Cases (15), (16), and (17)
+
+ if (delta + q4 < q3) { // from Case (6)
+ // Case (6) with 0<= delta <= 1 is similar to Cases (15), (16), and
+ // (17) if we swap (C3, C4), (q3, q4), (e3, e4), (z_sign, p_sign)
+ // and call add_and_round; delta stays positive
+ // C4.w[3] = 0 and C4.w[2] = 0, so swap just the low part of C4 with C3
+ P128.w[1] = C3.w[1];
+ P128.w[0] = C3.w[0];
+ C3.w[1] = C4.w[1];
+ C3.w[0] = C4.w[0];
+ C4.w[1] = P128.w[1];
+ C4.w[0] = P128.w[0];
+ ind = q3;
+ q3 = q4;
+ q4 = ind;
+ ind = e3;
+ e3 = e4;
+ e4 = ind;
+ tmp_sign = z_sign;
+ z_sign = p_sign;
+ p_sign = tmp_sign;
+ } else { // from Cases (2), (3), (4), (5)
+ // In Cases (2), (3), (4), (5) with 0 <= delta <= 1 C3 has to be
+ // scaled up by q4 + delta - q3; this is the same as in Cases (15),
+ // (16), and (17) if we just change the sign of delta
+ delta = -delta;
+ }
+ add_and_round (q3, q4, e4, delta, p34, z_sign, p_sign, C3, C4,
+ rnd_mode, &is_midpoint_lt_even,
+ &is_midpoint_gt_even, &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, pfpsf, &res);
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ }
+
+ } else { // if delta < 0
+
+ delta = -delta;
+
+ if (p34 < q4 && q4 <= delta) { // Case (7)
+
+ // truncate C4 to p34 digits into res
+ // x = q4-p34, 1 <= x <= 34 because 35 <= q4 <= 68
+ x0 = q4 - p34;
+ if (q4 <= 38) {
+ P128.w[1] = C4.w[1];
+ P128.w[0] = C4.w[0];
+ round128_19_38 (q4, x0, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ } else if (q4 <= 57) { // 35 <= q4 <= 57
+ P192.w[2] = C4.w[2];
+ P192.w[1] = C4.w[1];
+ P192.w[0] = C4.w[0];
+ round192_39_57 (q4, x0, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ res.w[0] = R192.w[0];
+ res.w[1] = R192.w[1];
+ } else { // if (q4 <= 68)
+ round256_58_76 (q4, x0, C4, &R256, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ res.w[0] = R256.w[0];
+ res.w[1] = R256.w[1];
+ }
+ e4 = e4 + x0;
+ if (incr_exp) {
+ e4 = e4 + 1;
+ }
+ if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if C4 rounded to p34 digits is exact then the result is inexact,
+ // in a way that depends on the signs of x * y and z
+ if (p_sign == z_sign) {
+ is_inexact_lt_midpoint = 1;
+ } else { // if (p_sign != z_sign)
+ if (res.w[1] != 0x0000314dc6448d93ull ||
+ res.w[0] != 0x38c15b0a00000000ull) { // res != 10^33
+ is_inexact_gt_midpoint = 1;
+ } else { // res = 10^33 and exact is a special case
+ // if C3 < 1/2 ulp then res = 10^33 and is_inexact_gt_midpoint = 1
+ // if C3 = 1/2 ulp then res = 10^33 and is_midpoint_lt_even = 1
+ // if C3 > 1/2 ulp then res = 10^34-1 and is_inexact_lt_midpoint = 1
+ // Note: ulp is really ulp/10 (after borrow which propagates to msd)
+ if (delta > p34 + 1) { // C3 < 1/2
+ // res = 10^33, unchanged
+ is_inexact_gt_midpoint = 1;
+ } else { // if (delta == p34 + 1)
+ if (q3 <= 19) {
+ if (C3.w[0] < midpoint64[q3 - 1]) { // C3 < 1/2 ulp
+ // res = 10^33, unchanged
+ is_inexact_gt_midpoint = 1;
+ } else if (C3.w[0] == midpoint64[q3 - 1]) { // C3 = 1/2 ulp
+ // res = 10^33, unchanged
+ is_midpoint_lt_even = 1;
+ } else { // if (C3.w[0] > midpoint64[q3-1]), C3 > 1/2 ulp
+ res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1
+ res.w[0] = 0x378d8e63ffffffffull;
+ e4 = e4 - 1;
+ is_inexact_lt_midpoint = 1;
+ }
+ } else { // if (20 <= q3 <=34)
+ if (C3.w[1] < midpoint128[q3 - 20].w[1] ||
+ (C3.w[1] == midpoint128[q3 - 20].w[1] &&
+ C3.w[0] < midpoint128[q3 - 20].w[0])) { // C3 < 1/2 ulp
+ // res = 10^33, unchanged
+ is_inexact_gt_midpoint = 1;
+ } else if (C3.w[1] == midpoint128[q3 - 20].w[1] &&
+ C3.w[0] == midpoint128[q3 - 20].w[0]) { // C3 = 1/2 ulp
+ // res = 10^33, unchanged
+ is_midpoint_lt_even = 1;
+ } else { // if (C3 > midpoint128[q3-20]), C3 > 1/2 ulp
+ res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1
+ res.w[0] = 0x378d8e63ffffffffull;
+ e4 = e4 - 1;
+ is_inexact_lt_midpoint = 1;
+ }
+ }
+ }
+ }
+ }
+ } else if (is_midpoint_lt_even) {
+ if (z_sign != p_sign) {
+ // needs correction: res = res - 1
+ res.w[0] = res.w[0] - 1;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // if it is (10^33-1)*10^e4 then the corect result is
+ // (10^34-1)*10(e4-1)
+ if (res.w[1] == 0x0000314dc6448d93ull &&
+ res.w[0] == 0x38c15b09ffffffffull) {
+ res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1
+ res.w[0] = 0x378d8e63ffffffffull;
+ e4 = e4 - 1;
+ }
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else { // if (z_sign == p_sign)
+ is_midpoint_lt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even) {
+ if (z_sign == p_sign) {
+ // needs correction: res = res + 1 (cannot cross in the next binade)
+ res.w[0] = res.w[0] + 1;
+ if (res.w[0] == 0x0000000000000000ull)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else { // if (z_sign != p_sign)
+ is_midpoint_gt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ }
+ } else {
+ ; // the rounded result is already correct
+ }
+ // check for overflow
+ if (rnd_mode == ROUNDING_TO_NEAREST && e4 > expmax) {
+ res.w[1] = p_sign | 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ } else { // no overflow or not RN
+ p_exp = ((UINT64) (e4 + 6176) << 49);
+ res.w[1] = p_sign | (p_exp & MASK_EXP) | res.w[1];
+ }
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e4, &res, pfpsf);
+ }
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ } else if ((q4 <= p34 && p34 <= delta) || // Case (8)
+ (q4 <= delta && delta < p34 && p34 < delta + q3) || // Case (9)
+ (q4 <= delta && delta + q3 <= p34) || // Case (10)
+ (delta < q4 && q4 <= p34 && p34 < delta + q3) || // Case (13)
+ (delta < q4 && q4 <= delta + q3 && delta + q3 <= p34) || // Case (14)
+ (delta + q3 < q4 && q4 <= p34)) { // Case (18)
+
+ // Case (8) is similar to Case (1), with C3 and C4 swapped
+ // Case (9) is similar to Case (2), with C3 and C4 swapped
+ // Case (10) is similar to Case (3), with C3 and C4 swapped
+ // Case (13) is similar to Case (4), with C3 and C4 swapped
+ // Case (14) is similar to Case (5), with C3 and C4 swapped
+ // Case (18) is similar to Case (6), with C3 and C4 swapped
+
+ // swap (C3, C4), (q3, q4), (e3, 34), (z_sign, p_sign), (z_exp, p_exp)
+ // and go back to delta_ge_zero
+ // C4.w[3] = 0 and C4.w[2] = 0, so swap just the low part of C4 with C3
+ P128.w[1] = C3.w[1];
+ P128.w[0] = C3.w[0];
+ C3.w[1] = C4.w[1];
+ C3.w[0] = C4.w[0];
+ C4.w[1] = P128.w[1];
+ C4.w[0] = P128.w[0];
+ ind = q3;
+ q3 = q4;
+ q4 = ind;
+ ind = e3;
+ e3 = e4;
+ e4 = ind;
+ tmp_sign = z_sign;
+ z_sign = p_sign;
+ p_sign = tmp_sign;
+ tmp.ui64 = z_exp;
+ z_exp = p_exp;
+ p_exp = tmp.ui64;
+ goto delta_ge_zero;
+
+ } else if ((p34 <= delta && delta < q4 && q4 < delta + q3) || // Case (11)
+ (delta < p34 && p34 < q4 && q4 < delta + q3)) { // Case (12)
+
+ // round C3 to nearest to q3 - x0 digits, where x0 = e4 - e3,
+ // 1 <= x0 <= q3 - 1 <= p34 - 1
+ x0 = e4 - e3; // or x0 = delta + q3 - q4
+ if (q3 <= 18) { // 2 <= q3 <= 18
+ round64_2_18 (q3, x0, C3.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ // C3.w[1] = 0;
+ C3.w[0] = R64;
+ } else if (q3 <= 38) {
+ round128_19_38 (q3, x0, C3, &R128, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ C3.w[1] = R128.w[1];
+ C3.w[0] = R128.w[0];
+ }
+ // the rounded result has q3 - x0 digits
+ // we want the exponent to be e4, so if incr_exp = 1 then
+ // multiply the rounded result by 10 - it will still fit in 113 bits
+ if (incr_exp) {
+ // 64 x 128 -> 128
+ P128.w[1] = C3.w[1];
+ P128.w[0] = C3.w[0];
+ __mul_64x128_to_128 (C3, ten2k64[1], P128);
+ }
+ e3 = e3 + x0; // this is e4
+ // now add/subtract the 256-bit C4 and the new (and shorter) 128-bit C3;
+ // the result will have the sign of x * y; the exponent is e4
+ R256.w[3] = 0;
+ R256.w[2] = 0;
+ R256.w[1] = C3.w[1];
+ R256.w[0] = C3.w[0];
+ if (p_sign == z_sign) { // R256 = C4 + R256
+ add256 (C4, R256, &R256);
+ } else { // if (p_sign != z_sign) { // R256 = C4 - R256
+ sub256 (C4, R256, &R256); // the result cannot be pure zero
+ // because the result has opposite sign to that of R256 which was
+ // rounded, need to change the rounding indicators
+ lsb = C4.w[0] & 0x01;
+ if (is_inexact_lt_midpoint) {
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (is_inexact_gt_midpoint) {
+ is_inexact_gt_midpoint = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if (lsb == 0) {
+ if (is_midpoint_lt_even) {
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 1;
+ } else if (is_midpoint_gt_even) {
+ is_midpoint_gt_even = 0;
+ is_midpoint_lt_even = 1;
+ } else {
+ ;
+ }
+ } else if (lsb == 1) {
+ if (is_midpoint_lt_even) {
+ // res = res + 1
+ R256.w[0]++;
+ if (R256.w[0] == 0x0) {
+ R256.w[1]++;
+ if (R256.w[1] == 0x0) {
+ R256.w[2]++;
+ if (R256.w[2] == 0x0) {
+ R256.w[3]++;
+ }
+ }
+ }
+ // no check for rounding overflow - R256 was a difference
+ } else if (is_midpoint_gt_even) {
+ // res = res - 1
+ R256.w[0]--;
+ if (R256.w[0] == 0xffffffffffffffffull) {
+ R256.w[1]--;
+ if (R256.w[1] == 0xffffffffffffffffull) {
+ R256.w[2]--;
+ if (R256.w[2] == 0xffffffffffffffffull) {
+ R256.w[3]--;
+ }
+ }
+ }
+ } else {
+ ;
+ }
+ } else {
+ ;
+ }
+ }
+ // determine the number of decimal digits in R256
+ ind = nr_digits256 (R256); // ind >= p34
+ // if R256 is sum, then ind > p34; if R256 is a difference, then
+ // ind >= p34; this means that we can calculate the result rounded to
+ // the destination precision, with unbounded exponent, starting from R256
+ // and using the indicators from the rounding of C3 to avoid a double
+ // rounding error
+
+ if (ind < p34) {
+ ;
+ } else if (ind == p34) {
+ // the result rounded to the destination precision with
+ // unbounded exponent
+ // is (-1)^p_sign * R256 * 10^e4
+ res.w[1] = R256.w[1];
+ res.w[0] = R256.w[0];
+ } else { // if (ind > p34)
+ // if more than P digits, round to nearest to P digits
+ // round R256 to p34 digits
+ x0 = ind - p34; // 1 <= x0 <= 34 as 35 <= ind <= 68
+ // save C3 rounding indicators to help avoid double rounding error
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ // initialize rounding indicators
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ // round to p34 digits; the result fits in 113 bits
+ if (ind <= 38) {
+ P128.w[1] = R256.w[1];
+ P128.w[0] = R256.w[0];
+ round128_19_38 (ind, x0, P128, &R128, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ } else if (ind <= 57) {
+ P192.w[2] = R256.w[2];
+ P192.w[1] = R256.w[1];
+ P192.w[0] = R256.w[0];
+ round192_39_57 (ind, x0, P192, &R192, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R128.w[1] = R192.w[1];
+ R128.w[0] = R192.w[0];
+ } else { // if (ind <= 68)
+ round256_58_76 (ind, x0, R256, &R256, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ R128.w[1] = R256.w[1];
+ R128.w[0] = R256.w[0];
+ }
+ // the rounded result has p34 = 34 digits
+ e4 = e4 + x0 + incr_exp;
+
+ res.w[1] = R128.w[1];
+ res.w[0] = R128.w[0];
+
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ // Note: a double rounding error upward is not possible; for this
+ // the result after the first rounding would have to be 99...95
+ // (35 digits in all), possibly followed by a number of zeros; this
+ // not possible in Cases (2)-(6) or (15)-(17) which may get here
+ // if this is 10^33 - 1 make it 10^34 - 1 and decrement exponent
+ if (res.w[1] == 0x0000314dc6448d93ull &&
+ res.w[0] == 0x38c15b09ffffffffull) { // 10^33 - 1
+ res.w[1] = 0x0001ed09bead87c0ull; // 10^34 - 1
+ res.w[0] = 0x378d8e63ffffffffull;
+ e4--;
+ }
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ }
+
+ // determine tininess
+ if (rnd_mode == ROUNDING_TO_NEAREST) {
+ if (e4 < expmin) {
+ is_tiny = 1; // for other rounding modes apply correction
+ }
+ } else {
+ // for RM, RP, RZ, RA apply correction in order to determine tininess
+ // but do not save the result; apply the correction to
+ // (-1)^p_sign * res * 10^0
+ P128.w[1] = p_sign | 0x3040000000000000ull | res.w[1];
+ P128.w[0] = res.w[0];
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ 0, &P128, pfpsf);
+ scale = ((P128.w[1] & MASK_EXP) >> 49) - 6176; // -1, 0, or +1
+ // the number of digits in the significand is p34 = 34
+ if (e4 + scale < expmin) {
+ is_tiny = 1;
+ }
+ }
+
+ // the result rounded to the destination precision with unbounded exponent
+ // is (-1)^p_sign * res * 10^e4
+ res.w[1] = p_sign | ((UINT64) (e4 + 6176) << 49) | res.w[1]; // RN
+ // res.w[0] unchanged;
+ // Note: res is correct only if expmin <= e4 <= expmax
+ ind = p34; // the number of decimal digits in the signifcand of res
+
+ // at this point we have the result rounded with unbounded exponent in
+ // res and we know its tininess:
+ // res = (-1)^p_sign * significand * 10^e4,
+ // where q (significand) = ind = p34
+ // Note: res is correct only if expmin <= e4 <= expmax
+
+ // check for overflow if RN
+ if (rnd_mode == ROUNDING_TO_NEAREST
+ && (ind + e4) > (p34 + expmax)) {
+ res.w[1] = p_sign | 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } // else not overflow or not RN, so continue
+
+ // from this point on this is similar to the last part of the computation
+ // for Cases (15), (16), (17)
+
+ // if (e4 >= expmin) we have the result rounded with bounded exponent
+ if (e4 < expmin) {
+ x0 = expmin - e4; // x0 >= 1; the number of digits to chop off of res
+ // where the result rounded [at most] once is
+ // (-1)^p_sign * significand_res * 10^e4
+
+ // avoid double rounding error
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+
+ if (x0 > ind) {
+ // nothing is left of res when moving the decimal point left x0 digits
+ is_inexact_lt_midpoint = 1;
+ res.w[1] = p_sign | 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ e4 = expmin;
+ } else if (x0 == ind) { // 1 <= x0 = ind <= p34 = 34
+ // this is <, =, or > 1/2 ulp
+ // compare the ind-digit value in the significand of res with
+ // 1/2 ulp = 5*10^(ind-1), i.e. determine whether it is
+ // less than, equal to, or greater than 1/2 ulp (significand of res)
+ R128.w[1] = res.w[1] & MASK_COEFF;
+ R128.w[0] = res.w[0];
+ if (ind <= 19) {
+ if (R128.w[0] < midpoint64[ind - 1]) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (R128.w[0] == midpoint64[ind - 1]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if (ind <= 38)
+ if (R128.w[1] < midpoint128[ind - 20].w[1] ||
+ (R128.w[1] == midpoint128[ind - 20].w[1] &&
+ R128.w[0] < midpoint128[ind - 20].w[0])) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (R128.w[1] == midpoint128[ind - 20].w[1] &&
+ R128.w[0] == midpoint128[ind - 20].w[0]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+ if (lt_half_ulp || eq_half_ulp) {
+ // res = +0.0 * 10^expmin
+ res.w[1] = 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // if (gt_half_ulp)
+ // res = +1 * 10^expmin
+ res.w[1] = 0x0000000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ res.w[1] = p_sign | res.w[1];
+ e4 = expmin;
+ } else { // if (1 <= x0 <= ind - 1 <= 33)
+ // round the ind-digit result to ind - x0 digits
+
+ if (ind <= 18) { // 2 <= ind <= 18
+ round64_2_18 (ind, x0, res.w[0], &R64, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ res.w[1] = 0x0;
+ res.w[0] = R64;
+ } else if (ind <= 38) {
+ P128.w[1] = res.w[1] & MASK_COEFF;
+ P128.w[0] = res.w[0];
+ round128_19_38 (ind, x0, P128, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint);
+ }
+ e4 = e4 + x0; // expmin
+ // we want the exponent to be expmin, so if incr_exp = 1 then
+ // multiply the rounded result by 10 - it will still fit in 113 bits
+ if (incr_exp) {
+ // 64 x 128 -> 128
+ P128.w[1] = res.w[1] & MASK_COEFF;
+ P128.w[0] = res.w[0];
+ __mul_64x128_to_128 (res, ten2k64[1], P128);
+ }
+ res.w[1] =
+ p_sign | ((UINT64) (e4 + 6176) << 49) | (res.
+ w[1] & MASK_COEFF);
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res.w[0]--;
+ if (res.w[0] == 0xffffffffffffffffull)
+ res.w[1]--;
+ // Note: a double rounding error upward is not possible; for this
+ // the result after the first rounding would have to be 99...95
+ // (35 digits in all), possibly followed by a number of zeros; this
+ // not possible in this underflow case
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res.w[0]++;
+ if (res.w[0] == 0)
+ res.w[1]++;
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint
+ && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0
+ || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0
+ || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ }
+ }
+ // res contains the correct result
+ // apply correction if not rounding to nearest
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ rounding_correction (rnd_mode,
+ is_inexact_lt_midpoint,
+ is_inexact_gt_midpoint,
+ is_midpoint_lt_even, is_midpoint_gt_even,
+ e4, &res, pfpsf);
+ }
+ if (is_midpoint_lt_even || is_midpoint_gt_even ||
+ is_inexact_lt_midpoint || is_inexact_gt_midpoint) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (is_tiny)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ } else if ((p34 <= delta && delta + q3 <= q4) || // Case (15)
+ (delta < p34 && p34 < delta + q3 && delta + q3 <= q4) || //Case (16)
+ (delta + q3 <= p34 && p34 < q4)) { // Case (17)
+
+ // calculate first the result rounded to the destination precision, with
+ // unbounded exponent
+
+ add_and_round (q3, q4, e4, delta, p34, z_sign, p_sign, C3, C4,
+ rnd_mode, &is_midpoint_lt_even,
+ &is_midpoint_gt_even, &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, pfpsf, &res);
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+ } else {
+ ;
+ }
+
+ } // end if delta < 0
+
+ *ptr_is_midpoint_lt_even = is_midpoint_lt_even;
+ *ptr_is_midpoint_gt_even = is_midpoint_gt_even;
+ *ptr_is_inexact_lt_midpoint = is_inexact_lt_midpoint;
+ *ptr_is_inexact_gt_midpoint = is_inexact_gt_midpoint;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_fma (UINT128 * pres, UINT128 * px, UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128_fma (UINT128 x, UINT128 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even, is_midpoint_gt_even,
+ is_inexact_lt_midpoint, is_inexact_gt_midpoint;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, &x, &y, &z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x, y,
+ z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128ddd_fma (UINT128 * pres, UINT64 * px, UINT64 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, y = *py, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128ddd_fma (UINT64 x, UINT64 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 x1, y1, z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, &x1, &y1, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x1, y1,
+ z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128ddq_fma (UINT128 * pres, UINT64 * px, UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, y = *py;
+ UINT128 z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128ddq_fma (UINT64 x, UINT64 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 x1, y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, &x1, &y1, &z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x1, y1,
+ z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dqd_fma (UINT128 * pres, UINT64 * px, UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dqd_fma (UINT64 x, UINT128 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 x1, z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, &x1, py, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x1, y,
+ z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dqq_fma (UINT128 * pres, UINT64 * px, UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dqq_fma (UINT64 x, UINT128 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, &x1, py, pz
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x1, y,
+ z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128qdd_fma (UINT128 * pres, UINT128 * px, UINT64 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128qdd_fma (UINT128 x, UINT64 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 y1, z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, px, &y1, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x, y1,
+ z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128qdq_fma (UINT128 * pres, UINT128 * px, UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128qdq_fma (UINT128 x, UINT64 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, px, &y1, pz
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x, y1,
+ z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128qqd_fma (UINT128 * pres, UINT128 * px, UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128qqd_fma (UINT128 x, UINT128 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint,
+ &res, px, py, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_ext_fma (&is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint,
+ &is_inexact_gt_midpoint, x, y,
+ z1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+// Note: bid128qqq_fma is represented by bid128_fma
+
+// Note: bid64ddd_fma is represented by bid64_fma
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64ddq_fma (UINT64 * pres, UINT64 * px, UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64ddq_fma (UINT64 x, UINT64 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ UINT128 x1, y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qqq_fma (&res1, &x1, &y1, pz
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res1 = bid64qqq_fma (x1, y1, z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res1);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64dqd_fma (UINT64 * pres, UINT64 * px, UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64dqd_fma (UINT64 x, UINT128 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ UINT128 x1, z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qqq_fma (&res1, &x1, py, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res1 = bid64qqq_fma (x1, y, z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res1);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64dqq_fma (UINT64 * pres, UINT64 * px, UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64dqq_fma (UINT64 x, UINT128 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qqq_fma (&res1, &x1, py, pz
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res1 = bid64qqq_fma (x1, y, z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res1);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qdd_fma (UINT64 * pres, UINT128 * px, UINT64 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qdd_fma (UINT128 x, UINT64 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ UINT128 y1, z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qqq_fma (&res1, px, &y1, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res1 = bid64qqq_fma (x, y1, z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res1);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qdq_fma (UINT64 * pres, UINT128 * px, UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qdq_fma (UINT128 x, UINT64 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qqq_fma (&res1, px, &y1, pz
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res1 = bid64qqq_fma (x, y1, z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res1);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qqd_fma (UINT64 * pres, UINT128 * px, UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qqd_fma (UINT128 x, UINT128 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ UINT128 z1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&z1, &z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qqq_fma (&res1, px, py, &z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ z1 = bid64_to_bid128 (z _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res1 = bid64qqq_fma (x, y, z1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res1);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qqq_fma (UINT64 * pres, UINT128 * px, UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py, z = *pz;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qqq_fma (UINT128 x, UINT128 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int is_midpoint_lt_even0 = 0, is_midpoint_gt_even0 = 0,
+ is_inexact_lt_midpoint0 = 0, is_inexact_gt_midpoint0 = 0;
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0,
+ is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+ int incr_exp;
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT128 res128 = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull} };
+ UINT64 res1 = 0xbaddbaddbaddbaddull;
+ unsigned int save_fpsf; // needed because of the call to bid128_ext_fma
+ UINT64 sign;
+ UINT64 exp;
+ int unbexp;
+ UINT128 C;
+ BID_UI64DOUBLE tmp;
+ int nr_bits;
+ int q, x0;
+ int scale;
+ int lt_half_ulp = 0, eq_half_ulp = 0;
+
+ // Note: for rounding modes other than RN or RA, the result can be obtained
+ // by rounding first to BID128 and then to BID64
+
+ save_fpsf = *pfpsf; // sticky bits - caller value must be preserved
+ *pfpsf = 0;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_ext_fma (&is_midpoint_lt_even0, &is_midpoint_gt_even0,
+ &is_inexact_lt_midpoint0, &is_inexact_gt_midpoint0,
+ &res, &x, &y, &z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid128_ext_fma (&is_midpoint_lt_even0, &is_midpoint_gt_even0,
+ &is_inexact_lt_midpoint0,
+ &is_inexact_gt_midpoint0, x, y,
+ z _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+
+ if ((rnd_mode == ROUNDING_DOWN) || (rnd_mode == ROUNDING_UP) ||
+ (rnd_mode == ROUNDING_TO_ZERO) || // no double rounding error is possible
+ ((res.w[HIGH_128W] & MASK_NAN) == MASK_NAN) || //res=QNaN (cannot be SNaN)
+ ((res.w[HIGH_128W] & MASK_ANY_INF) == MASK_INF)) { // result is infinity
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_to_bid64 (&res1, &res _RND_MODE_ARG _EXC_FLAGS_ARG);
+#else
+ res1 = bid128_to_bid64 (res _RND_MODE_ARG _EXC_FLAGS_ARG);
+#endif
+ // determine the unbiased exponent of the result
+ unbexp = ((res1 >> 53) & 0x3ff) - 398;
+
+ // if subnormal, res1 must have exp = -398
+ // if tiny and inexact set underflow and inexact status flags
+ if (!((res1 & MASK_NAN) == MASK_NAN) && // res1 not NaN
+ (unbexp == -398)
+ && ((res1 & MASK_BINARY_SIG1) < 1000000000000000ull)
+ && (is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0
+ || is_midpoint_lt_even0 || is_midpoint_gt_even0)) {
+ // set the inexact flag and the underflow flag
+ *pfpsf |= (INEXACT_EXCEPTION | UNDERFLOW_EXCEPTION);
+ } else if (is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0 ||
+ is_midpoint_lt_even0 || is_midpoint_gt_even0) {
+ // set the inexact flag and the underflow flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+
+ *pfpsf |= save_fpsf;
+ BID_RETURN (res1);
+ } // else continue, and use rounding to nearest to round to 16 digits
+
+ // at this point the result is rounded to nearest (even or away) to 34 digits
+ // (or less if exact), and it is zero or finite non-zero canonical [sub]normal
+ sign = res.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ exp = res.w[HIGH_128W] & MASK_EXP; // biased and shifted left 49 bits
+ unbexp = (exp >> 49) - 6176;
+ C.w[1] = res.w[HIGH_128W] & MASK_COEFF;
+ C.w[0] = res.w[LOW_128W];
+
+ if ((C.w[1] == 0x0 && C.w[0] == 0x0) || // result is zero
+ (unbexp <= (-398 - 35)) || (unbexp >= (369 + 16))) {
+ // clear under/overflow
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_to_bid64 (&res1, &res _RND_MODE_ARG _EXC_FLAGS_ARG);
+#else
+ res1 = bid128_to_bid64 (res _RND_MODE_ARG _EXC_FLAGS_ARG);
+#endif
+ *pfpsf |= save_fpsf;
+ BID_RETURN (res1);
+ } // else continue
+
+ // -398 - 34 <= unbexp <= 369 + 15
+ if (rnd_mode == ROUNDING_TIES_AWAY) {
+ // apply correction, if needed, to make the result rounded to nearest-even
+ if (is_midpoint_gt_even) {
+ // res = res - 1
+ res1--; // res1 is now even
+ } // else the result is already correctly rounded to nearest-even
+ }
+ // at this point the result is finite, non-zero canonical normal or subnormal,
+ // and in most cases overflow or underflow will not occur
+
+ // determine the number of digits q in the result
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C.w[1] == 0) {
+ if (C.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp.d = (double) (C.w[0] >> 32); // exact conversion
+ nr_bits =
+ 33 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp.d = (double) (C.w[0]); // exact conversion
+ nr_bits =
+ 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp.d = (double) C.w[0]; // exact conversion
+ nr_bits =
+ 1 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C.w[1] != 0 => nr. bits = 64 + nr_bits (C.w[1])
+ tmp.d = (double) C.w[1]; // exact conversion
+ nr_bits =
+ 65 + ((((unsigned int) (tmp.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[nr_bits - 1].digits1;
+ if (C.w[1] > nr_digits[nr_bits - 1].threshold_hi ||
+ (C.w[1] == nr_digits[nr_bits - 1].threshold_hi &&
+ C.w[0] >= nr_digits[nr_bits - 1].threshold_lo))
+ q++;
+ }
+ // if q > 16, round to nearest even to 16 digits (but for underflow it may
+ // have to be truncated even more)
+ if (q > 16) {
+ x0 = q - 16;
+ if (q <= 18) {
+ round64_2_18 (q, x0, C.w[0], &res1, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ } else { // 19 <= q <= 34
+ round128_19_38 (q, x0, C, &res128, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ res1 = res128.w[0]; // the result fits in 64 bits
+ }
+ unbexp = unbexp + x0;
+ if (incr_exp)
+ unbexp++;
+ q = 16; // need to set in case denormalization is necessary
+ } else {
+ // the result does not require a second rounding (and it must have
+ // been exact in the first rounding, since q <= 16)
+ res1 = C.w[0];
+ }
+
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res1--; // res1 becomes odd
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ if (res1 == 0x00038d7ea4c67fffull) { // 10^15 - 1
+ res1 = 0x002386f26fc0ffffull; // 10^16 - 1
+ unbexp--;
+ }
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res1++; // res1 becomes odd (so it cannot be 10^16)
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if this second rounding was exact the result may still be
+ // inexact because of the first rounding
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ // this is the result rounded correctly to nearest even, with unbounded exp.
+
+ // check for overflow
+ if (q + unbexp > P16 + expmax16) {
+ res1 = sign | 0x7800000000000000ull;
+ *pfpsf |= (INEXACT_EXCEPTION | OVERFLOW_EXCEPTION);
+ *pfpsf |= save_fpsf;
+ BID_RETURN (res1)
+ } else if (unbexp > expmax16) { // q + unbexp <= P16 + expmax16
+ // not overflow; the result must be exact, and we can multiply res1 by
+ // 10^(unbexp - expmax16) and the product will fit in 16 decimal digits
+ scale = unbexp - expmax16;
+ res1 = res1 * ten2k64[scale]; // res1 * 10^scale
+ unbexp = expmax16; // unbexp - scale
+ } else {
+ ; // continue
+ }
+
+ // check for underflow
+ if (q + unbexp < P16 + expmin16) {
+ if (unbexp < expmin16) {
+ // we must truncate more of res
+ x0 = expmin16 - unbexp; // x0 >= 1
+ is_inexact_lt_midpoint0 = is_inexact_lt_midpoint;
+ is_inexact_gt_midpoint0 = is_inexact_gt_midpoint;
+ is_midpoint_lt_even0 = is_midpoint_lt_even;
+ is_midpoint_gt_even0 = is_midpoint_gt_even;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ // the number of decimal digits in res1 is q
+ if (x0 < q) { // 1 <= x0 <= q-1 => round res to q - x0 digits
+ // 2 <= q <= 16, 1 <= x0 <= 15
+ round64_2_18 (q, x0, res1, &res1, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ if (incr_exp) {
+ // res1 = 10^(q-x0), 1 <= q - x0 <= q - 1, 1 <= q - x0 <= 15
+ res1 = ten2k64[q - x0];
+ }
+ unbexp = unbexp + x0; // expmin16
+ } else if (x0 == q) {
+ // the second rounding is for 0.d(0)d(1)...d(q-1) * 10^emin
+ // determine relationship with 1/2 ulp
+ // q <= 16
+ if (res1 < midpoint64[q - 1]) { // < 1/2 ulp
+ lt_half_ulp = 1;
+ is_inexact_lt_midpoint = 1;
+ } else if (res1 == midpoint64[q - 1]) { // = 1/2 ulp
+ eq_half_ulp = 1;
+ is_midpoint_gt_even = 1;
+ } else { // > 1/2 ulp
+ // gt_half_ulp = 1;
+ is_inexact_gt_midpoint = 1;
+ }
+ if (lt_half_ulp || eq_half_ulp) {
+ // res = +0.0 * 10^expmin16
+ res1 = 0x0000000000000000ull;
+ } else { // if (gt_half_ulp)
+ // res = +1 * 10^expmin16
+ res1 = 0x0000000000000001ull;
+ }
+ unbexp = expmin16;
+ } else { // if (x0 > q)
+ // the second rounding is for 0.0...d(0)d(1)...d(q-1) * 10^emin
+ res1 = 0x0000000000000000ull;
+ unbexp = expmin16;
+ is_inexact_lt_midpoint = 1;
+ }
+ // avoid a double rounding error
+ if ((is_inexact_gt_midpoint0 || is_midpoint_lt_even0) &&
+ is_midpoint_lt_even) { // double rounding error upward
+ // res = res - 1
+ res1--; // res1 becomes odd
+ is_midpoint_lt_even = 0;
+ is_inexact_lt_midpoint = 1;
+ } else if ((is_inexact_lt_midpoint0 || is_midpoint_gt_even0) &&
+ is_midpoint_gt_even) { // double rounding error downward
+ // res = res + 1
+ res1++; // res1 becomes odd
+ is_midpoint_gt_even = 0;
+ is_inexact_gt_midpoint = 1;
+ } else if (!is_midpoint_lt_even && !is_midpoint_gt_even &&
+ !is_inexact_lt_midpoint && !is_inexact_gt_midpoint) {
+ // if this rounding was exact the result may still be
+ // inexact because of the previous roundings
+ if (is_inexact_gt_midpoint0 || is_midpoint_lt_even0) {
+ is_inexact_gt_midpoint = 1;
+ }
+ if (is_inexact_lt_midpoint0 || is_midpoint_gt_even0) {
+ is_inexact_lt_midpoint = 1;
+ }
+ } else if (is_midpoint_gt_even &&
+ (is_inexact_gt_midpoint0 || is_midpoint_lt_even0)) {
+ // pulled up to a midpoint
+ is_inexact_lt_midpoint = 1;
+ is_inexact_gt_midpoint = 0;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else if (is_midpoint_lt_even &&
+ (is_inexact_lt_midpoint0 || is_midpoint_gt_even0)) {
+ // pulled down to a midpoint
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 1;
+ is_midpoint_lt_even = 0;
+ is_midpoint_gt_even = 0;
+ } else {
+ ;
+ }
+ }
+ // else if unbexp >= emin then q < P (because q + unbexp < P16 + expmin16)
+ // and the result is tiny and exact
+
+ // check for inexact result
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even ||
+ is_inexact_lt_midpoint0 || is_inexact_gt_midpoint0 ||
+ is_midpoint_lt_even0 || is_midpoint_gt_even0) {
+ // set the inexact flag and the underflow flag
+ *pfpsf |= (INEXACT_EXCEPTION | UNDERFLOW_EXCEPTION);
+ }
+ } else if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ // this is the result rounded correctly to nearest, with bounded exponent
+
+ if (rnd_mode == ROUNDING_TIES_AWAY && is_midpoint_gt_even) { // correction
+ // res = res + 1
+ res1++; // res1 is now odd
+ } // else the result is already correct
+
+ // assemble the result
+ if (res1 < 0x0020000000000000ull) { // res < 2^53
+ res1 = sign | ((UINT64) (unbexp + 398) << 53) | res1;
+ } else { // res1 >= 2^53
+ res1 = sign | MASK_STEERING_BITS |
+ ((UINT64) (unbexp + 398) << 51) | (res1 & MASK_BINARY_SIG2);
+ }
+ *pfpsf |= save_fpsf;
+ BID_RETURN (res1);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_logb.c b/gcc-4.9/libgcc/config/libbid/bid128_logb.c
new file mode 100644
index 000000000..d2b1b68c6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_logb.c
@@ -0,0 +1,58 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE(int, bid128_logb, x)
+
+ UINT128 CX;
+ UINT64 sign_x;
+ SINT64 D;
+ int_float f64, fx;
+ int exponent_x, bin_expon_cx, digits;
+
+ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN_VAL (0x80000000);
+ }
+ // find number of digits in coefficient
+ // 2^64
+ f64.i = 0x5f800000;
+ // fx ~ CX
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+ digits = estimate_decimal_digits[bin_expon_cx];
+ // scale = 38-estimate_decimal_digits[bin_expon_cx];
+ D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+ if (D > 0 || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0])) {
+ digits++;
+ }
+
+ exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS_128 - 1 + digits;
+
+ BID_RETURN_VAL (exponent_x);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_minmax.c b/gcc-4.9/libgcc/config/libbid/bid128_minmax.c
new file mode 100644
index 000000000..c7c99622e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_minmax.c
@@ -0,0 +1,1095 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128 minimum number
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_minnum (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+UINT128
+bid128_minnum (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT128 res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+
+ // check for non-canonical x
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf
+ x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF);
+ x.w[0] = 0x0ull;
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && x.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ // check for non-canonical y
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF);
+ y.w[0] = 0x0ull;
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && y.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+
+ // NaN (CASE1)
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ res = (((x.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // CONVERT X
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CONVERT Y
+ exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+ sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+ sig_y.w[0] = y.w[0];
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B => ignore the exponent
+ // field
+ // (Any non-canonical # is considered 0)
+ if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) {
+ x_is_zero = 1;
+ }
+ if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) {
+ y_is_zero = 1;
+ }
+
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, neither is greater => return either number
+ res = x;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // is x is zero, it is greater if Y is negative
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // is y is zero, X is greater if it is positive
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison of
+ // the significands
+ if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0])) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN)) ? y : x;
+ BID_RETURN (res);
+ }
+ // if both components are either bigger or smaller, it is clear what
+ // needs to be done
+ if (sig_x.w[1] >= sig_y.w[1] && sig_x.w[0] >= sig_y.w[0]
+ && exp_x > exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ if (sig_x.w[1] <= sig_y.w[1] && sig_x.w[0] <= sig_y.w[0]
+ && exp_x < exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+
+ diff = exp_x - exp_y;
+
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+ if (diff > 0) { // to simplify the loop below,
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ // difference cannot be greater than 10^33
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) ==
+ MASK_SIGN)) ? y : x;
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ res =
+ (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? y : x;
+ BID_RETURN (res);
+ }
+ diff = exp_y - exp_x;
+ // if exp_x is 33 less than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y);
+ // if postitive, return whichever significand is larger (converse if negative)
+ res =
+ ((sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] > sig_x.w[0])))
+ ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128 minimum magnitude function - returns greater of two numbers
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_minnum_mag (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+UINT128
+bid128_minnum_mag (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT128 res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+
+ // check for non-canonical x
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf
+ x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF);
+ x.w[0] = 0x0ull;
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && x.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ // check for non-canonical y
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF);
+ y.w[0] = 0x0ull;
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && y.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+
+ // NaN (CASE1)
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = y;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x infinity, it has maximum magnitude.
+ // Check if magnitudes are equal. If x is negative, return it.
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN
+ && (y.w[1] & MASK_INF) == MASK_INF) ? x : y;
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is infinity, then x is less in magnitude
+ res = x;
+ BID_RETURN (res);
+ }
+ // CONVERT X
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CONVERT Y
+ exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+ sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+ sig_y.w[0] = y.w[0];
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) {
+ res = x;
+ BID_RETURN (res);
+ }
+ if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) {
+ res = y;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // check if exponents are the same and significands are the same
+ if (exp_y == exp_x && sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] == sig_y.w[0]) {
+ if (x.w[1] & 0x8000000000000000ull) { // x is negative
+ res = x;
+ BID_RETURN (res);
+ } else {
+ res = y;
+ BID_RETURN (res);
+ }
+ } else if (((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] > sig_y.w[0]))
+ && exp_x == exp_y)
+ || ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0]))
+ && exp_x > exp_y)) {
+ // if both components are either bigger or smaller, it is clear what
+ // needs to be done; also if the magnitudes are equal
+ res = y;
+ BID_RETURN (res);
+ } else if (((sig_y.w[1] > sig_x.w[1] || (sig_y.w[1] == sig_x.w[1]
+ && sig_y.w[0] > sig_x.w[0]))
+ && exp_y == exp_x)
+ || ((sig_y.w[1] > sig_x.w[1]
+ || (sig_y.w[1] == sig_x.w[1]
+ && sig_y.w[0] >= sig_x.w[0]))
+ && exp_y > exp_x)) {
+ res = x;
+ BID_RETURN (res);
+ } else {
+ ; // continue
+ }
+ diff = exp_x - exp_y;
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+ if (diff > 0) { // to simplify the loop below,
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = y; // difference cannot be greater than 10^33
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+ // if positive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x; // if equal
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] > sig_y.w[0])) ? y : x;
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x);
+ // if positive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ // if = in magnitude, return +, (if possible)
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ res = ((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] > sig_y.w[0])) ? y : x;
+ BID_RETURN (res);
+ }
+ diff = exp_y - exp_x;
+ // if exp_x is 33 less than exp_y, no need for compensation
+ if (diff > 33) {
+ res = x;
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+ // if positive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ // if = in magnitude, return +, (if possible)
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ res = (sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] < sig_x.w[0]))) ? y : x;
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y);
+ // if positive, return whichever significand is larger (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ // if = in magnitude, return +, if possible)
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] < sig_x.w[0]))) ? y : x;
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128 maximum function - returns greater of two numbers
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_maxnum (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+UINT128
+bid128_maxnum (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT128 res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+
+ // check for non-canonical x
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf
+ x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF);
+ x.w[0] = 0x0ull;
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && x.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ // check for non-canonical y
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF);
+ y.w[0] = 0x0ull;
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && y.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+
+ // NaN (CASE1)
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // CONVERT X
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CONVERT Y
+ exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+ sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+ sig_y.w[0] = y.w[0];
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) {
+ x_is_zero = 1;
+ }
+ if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) {
+ y_is_zero = 1;
+ }
+
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, neither is greater => return either number
+ res = x;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // is x is zero, it is greater if Y is negative
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // is y is zero, X is greater if it is positive
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x.w[1] ^ y.w[1]) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if exponents are the same, then we have a simple comparison of
+ // the significands
+ if (exp_y == exp_x) {
+ res = (((sig_x.w[1] > sig_y.w[1]) || (sig_x.w[1] == sig_y.w[1] &&
+ sig_x.w[0] >= sig_y.w[0])) ^
+ ((x.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ // if both components are either bigger or smaller, it is clear what
+ // needs to be done
+ if ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ if ((sig_x.w[1] < sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ diff = exp_x - exp_y;
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+ if (diff > 0) { // to simplify the loop below,
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ // difference cannot be greater than 10^33
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ res = ((((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) ==
+ MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ res =
+ (((sig_n_prime192.w[2] > 0) || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] >
+ sig_y.w[0])) ^ ((y.w[1] & MASK_SIGN) == MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ diff = exp_y - exp_x;
+ // if exp_x is 33 less than exp_y, no need for compensation
+ if (diff > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ res =
+ ((sig_n_prime256.w[3] != 0 || sig_n_prime256.w[2] != 0
+ || (sig_n_prime256.w[1] > sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0]))) ^ ((x.w[1] & MASK_SIGN) !=
+ MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y);
+ // if postitive, return whichever significand is larger (converse if negative)
+ res =
+ ((sig_n_prime192.w[2] != 0
+ || (sig_n_prime192.w[1] > sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0]))) ^ ((y.w[1] & MASK_SIGN) !=
+ MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128 maximum magnitude function - returns greater of two numbers
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_maxnum_mag (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+UINT128
+bid128_maxnum_mag (UINT128 x, UINT128 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT128 res;
+ int exp_x, exp_y;
+ int diff;
+ UINT128 sig_x, sig_y;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+
+ // check for non-canonical x
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ x.w[1] = x.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ } else if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf
+ x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF);
+ x.w[0] = 0x0ull;
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ x.w[1] = (x.w[1] & MASK_SIGN) | ((x.w[1] << 2) & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && x.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ x.w[1] = (x.w[1] & MASK_SIGN) | (x.w[1] & MASK_EXP);
+ x.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ // check for non-canonical y
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ y.w[1] = y.w[1] & 0xfe003fffffffffffull; // clear out G[6]-G[16]
+ // check for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ } else if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF);
+ y.w[0] = 0x0ull;
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y.w[1] & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // G0_G1=11
+ // non-canonical
+ y.w[1] = (y.w[1] & MASK_SIGN) | ((y.w[1] << 2) & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ if ((y.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((y.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull &&
+ y.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ y.w[1] = (y.w[1] & MASK_SIGN) | (y.w[1] & MASK_EXP);
+ y.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+
+ // NaN (CASE1)
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x.w[1] = x.w[1] & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y.w[1] = y.w[1] & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x.w[0] == y.w[0] && x.w[1] == y.w[1]) {
+ res = y;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x infinity, it has maximum magnitude
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN
+ && (y.w[1] & MASK_INF) == MASK_INF) ? y : x;
+ BID_RETURN (res);
+ } else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ res = y;
+ BID_RETURN (res);
+ }
+ // CONVERT X
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CONVERT Y
+ exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+ sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+ sig_y.w[0] = y.w[0];
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if ((sig_x.w[1] == 0) && (sig_x.w[0] == 0)) {
+ res = y;
+ BID_RETURN (res);
+ }
+ if ((sig_y.w[1] == 0) && (sig_y.w[0] == 0)) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ if (exp_y == exp_x && sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] == sig_y.w[0]) {
+ // check if exponents are the same and significands are the same
+ if (x.w[1] & 0x8000000000000000ull) { // x is negative
+ res = y;
+ BID_RETURN (res);
+ } else {
+ res = x;
+ BID_RETURN (res);
+ }
+ } else if (((sig_x.w[1] > sig_y.w[1] || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] > sig_y.w[0]))
+ && exp_x == exp_y)
+ || ((sig_x.w[1] > sig_y.w[1]
+ || (sig_x.w[1] == sig_y.w[1]
+ && sig_x.w[0] >= sig_y.w[0]))
+ && exp_x > exp_y)) {
+ // if both components are either bigger or smaller, it is clear what
+ // needs to be done; also if the magnitudes are equal
+ res = x;
+ BID_RETURN (res);
+ } else if (((sig_y.w[1] > sig_x.w[1] || (sig_y.w[1] == sig_x.w[1]
+ && sig_y.w[0] > sig_x.w[0]))
+ && exp_y == exp_x)
+ || ((sig_y.w[1] > sig_x.w[1]
+ || (sig_y.w[1] == sig_x.w[1]
+ && sig_y.w[0] >= sig_x.w[0]))
+ && exp_y > exp_x)) {
+ res = y;
+ BID_RETURN (res);
+ } else {
+ ; // continue
+ }
+ diff = exp_x - exp_y;
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+ if (diff > 0) { // to simplify the loop below,
+ // if exp_x is 33 greater than exp_y, no need for compensation
+ if (diff > 33) {
+ res = x; // difference cannot be greater than 10^33
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ __mul_128x128_to_256 (sig_n_prime256, sig_x, ten2k128[diff - 20]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_y.w[1]
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y; // if equal
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime256.w[3] > 0) || sig_n_prime256.w[2] > 0)
+ || (sig_n_prime256.w[1] > sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] > sig_y.w[0])) ? x : y;
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_x);
+ // if postitive, return whichever significand is larger (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ // if equal, return positive magnitude
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ res = ((sig_n_prime192.w[2] > 0)
+ || (sig_n_prime192.w[1] > sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] > sig_y.w[0])) ? x : y;
+ BID_RETURN (res);
+ }
+ diff = exp_y - exp_x;
+ // if exp_x is 33 less than exp_y, no need for compensation
+ if (diff > 33) {
+ res = y;
+ BID_RETURN (res);
+ }
+ if (diff > 19) { //128 by 128 bit multiply -> 256 bits
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y, ten2k128[diff - 20]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime256.w[3] == 0 && (sig_n_prime256.w[2] == 0)
+ && sig_n_prime256.w[1] == sig_x.w[1]
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ // if equal, return positive (if possible)
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ res = (sig_n_prime256.w[3] == 0 && sig_n_prime256.w[2] == 0
+ && (sig_n_prime256.w[1] < sig_x.w[1]
+ || (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] < sig_x.w[0]))) ? x : y;
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[diff], sig_y);
+ // if postitive, return whichever significand is larger (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_x.w[1]
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ // if equal, return positive (if possible)
+ res = ((y.w[1] & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ res = (sig_n_prime192.w[2] == 0
+ && (sig_n_prime192.w[1] < sig_x.w[1]
+ || (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] < sig_x.w[0]))) ? x : y;
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_mul.c b/gcc-4.9/libgcc/config/libbid/bid128_mul.c
new file mode 100644
index 000000000..90f262ee8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_mul.c
@@ -0,0 +1,423 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64dq_mul (UINT64 * pres, UINT64 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64dq_mul (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qq_mul (&res, &x1, py
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid64qq_mul (x1, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qd_mul (UINT64 * pres, UINT128 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qd_mul (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64qq_mul (&res, px, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid64qq_mul (x, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64qq_mul (UINT64 * pres, UINT128 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64qq_mul (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 z = { {0x0000000000000000ull, 0x5ffe000000000000ull}
+ };
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign, y_sign, p_sign;
+ UINT64 x_exp, y_exp, p_exp;
+ int true_p_exp;
+ UINT128 C1, C2;
+
+ BID_SWAP128 (z);
+ // skip cases where at least one operand is NaN or infinity
+ if (!(((x.w[HIGH_128W] & MASK_NAN) == MASK_NAN) ||
+ ((y.w[HIGH_128W] & MASK_NAN) == MASK_NAN) ||
+ ((x.w[HIGH_128W] & MASK_ANY_INF) == MASK_INF) ||
+ ((y.w[HIGH_128W] & MASK_ANY_INF) == MASK_INF))) {
+ // x, y are 0 or f but not inf or NaN => unpack the arguments and check
+ // for non-canonical values
+
+ x_sign = x.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C1.w[1] = x.w[HIGH_128W] & MASK_COEFF;
+ C1.w[0] = x.w[LOW_128W];
+ // check for non-canonical values - treated as zero
+ if ((x.w[HIGH_128W] & 0x6000000000000000ull) ==
+ 0x6000000000000000ull) {
+ // G0_G1=11 => non-canonical
+ x_exp = (x.w[HIGH_128W] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ x_exp = x.w[HIGH_128W] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull &&
+ C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ y_sign = y.w[HIGH_128W] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C2.w[1] = y.w[HIGH_128W] & MASK_COEFF;
+ C2.w[0] = y.w[LOW_128W];
+ // check for non-canonical values - treated as zero
+ if ((y.w[HIGH_128W] & 0x6000000000000000ull) ==
+ 0x6000000000000000ull) {
+ // G0_G1=11 => non-canonical
+ y_exp = (y.w[HIGH_128W] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C2.w[1] = 0; // significand high
+ C2.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ y_exp = y.w[HIGH_128W] & MASK_EXP; // biased and shifted left 49 bits
+ if (C2.w[1] > 0x0001ed09bead87c0ull ||
+ (C2.w[1] == 0x0001ed09bead87c0ull &&
+ C2.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ C2.w[1] = 0;
+ C2.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ p_sign = x_sign ^ y_sign; // sign of the product
+
+ true_p_exp = (x_exp >> 49) - 6176 + (y_exp >> 49) - 6176;
+ // true_p_exp, p_exp are used only for 0 * 0, 0 * f, or f * 0
+ if (true_p_exp < -398)
+ p_exp = 0; // cannot be less than EXP_MIN
+ else if (true_p_exp > 369)
+ p_exp = (UINT64) (369 + 398) << 53; // cannot be more than EXP_MAX
+ else
+ p_exp = (UINT64) (true_p_exp + 398) << 53;
+
+ if ((C1.w[1] == 0x0 && C1.w[0] == 0x0) ||
+ (C2.w[1] == 0x0 && C2.w[0] == 0x0)) {
+ // x = 0 or y = 0
+ // the result is 0
+ res = p_sign | p_exp; // preferred exponent in [EXP_MIN, EXP_MAX]
+ BID_RETURN (res)
+ } // else continue
+ }
+ // swap x and y - ensure that a NaN in x has 'higher precedence' than one in y
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64qqq_fma (&res, &y, &x, &z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid64qqq_fma (y, x, z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dd_mul (UINT128 * pres, UINT64 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px, y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dd_mul (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 x1, y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_mul (&res, &x1, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_mul (x1, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128dq_mul (UINT128 * pres, UINT64 * px, UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128dq_mul (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 x1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&x1, &x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_mul (&res, &x1, py
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ x1 = bid64_to_bid128 (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_mul (x1, y
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128qd_mul (UINT128 * pres, UINT128 * px, UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT128
+bid128qd_mul (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT128 y1;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_to_bid128 (&y1, &y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid128_mul (&res, px, &y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ y1 = bid64_to_bid128 (y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res = bid128_mul (x, y1
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
+
+
+// bid128_mul stands for bid128qq_mul
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_mul (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px, y = *py;
+
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+
+#endif
+#else
+UINT128
+bid128_mul (UINT128 x,
+ UINT128 y _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+
+#endif
+ UINT128 z = { {0x0000000000000000ull, 0x5ffe000000000000ull}
+ };
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+ UINT64 x_sign, y_sign, p_sign;
+ UINT64 x_exp, y_exp, p_exp;
+ int true_p_exp;
+ UINT128 C1, C2;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ // skip cases where at least one operand is NaN or infinity
+ if (!(((x.w[1] & MASK_NAN) == MASK_NAN) ||
+ ((y.w[1] & MASK_NAN) == MASK_NAN) ||
+ ((x.w[1] & MASK_ANY_INF) == MASK_INF) ||
+ ((y.w[1] & MASK_ANY_INF) == MASK_INF))) {
+ // x, y are 0 or f but not inf or NaN => unpack the arguments and check
+ // for non-canonical values
+
+ x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ // check for non-canonical values - treated as zero
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ // G0_G1=11 => non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull &&
+ C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ y_sign = y.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C2.w[1] = y.w[1] & MASK_COEFF;
+ C2.w[0] = y.w[0];
+ // check for non-canonical values - treated as zero
+ if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ // G0_G1=11 => non-canonical
+ y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C2.w[1] = 0; // significand high
+ C2.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C2.w[1] > 0x0001ed09bead87c0ull ||
+ (C2.w[1] == 0x0001ed09bead87c0ull &&
+ C2.w[0] > 0x378d8e63ffffffffull)) {
+ // y is non-canonical if coefficient is larger than 10^34 -1
+ C2.w[1] = 0;
+ C2.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+ p_sign = x_sign ^ y_sign; // sign of the product
+
+ true_p_exp = (x_exp >> 49) - 6176 + (y_exp >> 49) - 6176;
+ // true_p_exp, p_exp are used only for 0 * 0, 0 * f, or f * 0
+ if (true_p_exp < -6176)
+ p_exp = 0; // cannot be less than EXP_MIN
+ else if (true_p_exp > 6111)
+ p_exp = (UINT64) (6111 + 6176) << 49; // cannot be more than EXP_MAX
+ else
+ p_exp = (UINT64) (true_p_exp + 6176) << 49;
+
+ if ((C1.w[1] == 0x0 && C1.w[0] == 0x0) ||
+ (C2.w[1] == 0x0 && C2.w[0] == 0x0)) {
+ // x = 0 or y = 0
+ // the result is 0
+ res.w[1] = p_sign | p_exp; // preferred exponent in [EXP_MIN, EXP_MAX]
+ res.w[0] = 0x0;
+ BID_SWAP128 (res);
+ BID_RETURN (res)
+ } // else continue
+ }
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ BID_SWAP128 (z);
+ // swap x and y - ensure that a NaN in x has 'higher precedence' than one in y
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_fma (&res, &y, &x, &z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res = bid128_fma (y, x, z
+ _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_next.c b/gcc-4.9/libgcc/config/libbid/bid128_next.c
new file mode 100644
index 000000000..c50810646
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_next.c
@@ -0,0 +1,643 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128 nextup
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_nextup (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+UINT128
+bid128_nextup (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp;
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q1, ind;
+ UINT128 C1; // C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (UINT64)
+
+ BID_SWAP128 (x);
+ // unpack the argument
+ x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+ if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull)
+ && (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ } else { // x is not NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ res.w[1] = 0x7800000000000000ull; // +inf
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ res.w[1] = 0xdfffed09bead87c0ull; // -MAXFP = -999...99 * 10^emax
+ res.w[0] = 0x378d8e63ffffffffull;
+ }
+ }
+ BID_RETURN (res);
+ }
+ // check for non-canonical values (treated as zero)
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+
+ if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is +/-0
+ res.w[1] = 0x0000000000000000ull; // +1 * 10^emin
+ res.w[0] = 0x0000000000000001ull;
+ } else { // x is not special and is not zero
+ if (x.w[1] == 0x5fffed09bead87c0ull
+ && x.w[0] == 0x378d8e63ffffffffull) {
+ // x = +MAXFP = 999...99 * 10^emax
+ res.w[1] = 0x7800000000000000ull; // +inf
+ res.w[0] = 0x0000000000000000ull;
+ } else if (x.w[1] == 0x8000000000000000ull
+ && x.w[0] == 0x0000000000000001ull) {
+ // x = -MINFP = 1...99 * 10^emin
+ res.w[1] = 0x8000000000000000ull; // -0
+ res.w[0] = 0x0000000000000000ull;
+ } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ // can add/subtract 1 ulp to the significand
+
+ // Note: we could check here if x >= 10^34 to speed up the case q1 = 34
+ // q1 = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rnd errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) -
+ 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) -
+ 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q1 = nr_digits[x_nr_bits - 1].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q1++;
+ }
+ // if q1 < P34 then pad the significand with zeros
+ if (q1 < P34) {
+ exp = (x_exp >> 49) - 6176;
+ if (exp + 6176 > P34 - q1) {
+ ind = P34 - q1; // 1 <= ind <= P34 - 1
+ // pad with P34 - q1 zeros, until exponent = emin
+ // C1 = C1 * 10^ind
+ if (q1 <= 19) { // 64-bit C1
+ if (ind <= 19) { // 64-bit 10^ind and 64-bit C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]);
+ } else { // 128-bit 10^ind and 64-bit C1
+ __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]);
+ }
+ } else { // C1 is (most likely) 128-bit
+ if (ind <= 14) { // 64-bit 10^ind and 128-bit C1 (most likely)
+ __mul_128x64_to_128 (C1, ten2k64[ind], C1);
+ } else if (ind <= 19) { // 64-bit 10^ind and 64-bit C1 (q1 <= 19)
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]);
+ } else { // 128-bit 10^ind and 64-bit C1 (C1 must be 64-bit)
+ __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]);
+ }
+ }
+ x_exp = x_exp - ((UINT64) ind << 49);
+ } else { // pad with zeros until the exponent reaches emin
+ ind = exp + 6176;
+ // C1 = C1 * 10^ind
+ if (ind <= 19) { // 1 <= P34 - q1 <= 19 <=> 15 <= q1 <= 33
+ if (q1 <= 19) { // 64-bit C1, 64-bit 10^ind
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]);
+ } else { // 20 <= q1 <= 33 => 128-bit C1, 64-bit 10^ind
+ __mul_128x64_to_128 (C1, ten2k64[ind], C1);
+ }
+ } else { // if 20 <= P34 - q1 <= 33 <=> 1 <= q1 <= 14 =>
+ // 64-bit C1, 128-bit 10^ind
+ __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]);
+ }
+ x_exp = EXP_MIN;
+ }
+ }
+ if (!x_sign) { // x > 0
+ // add 1 ulp (add 1 to the significand)
+ C1.w[0]++;
+ if (C1.w[0] == 0)
+ C1.w[1]++;
+ if (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] == 0x378d8e6400000000ull) { // if C1 = 10^34
+ C1.w[1] = 0x0000314dc6448d93ull; // C1 = 10^33
+ C1.w[0] = 0x38c15b0a00000000ull;
+ x_exp = x_exp + EXP_P1;
+ }
+ } else { // x < 0
+ // subtract 1 ulp (subtract 1 from the significand)
+ C1.w[0]--;
+ if (C1.w[0] == 0xffffffffffffffffull)
+ C1.w[1]--;
+ if (x_exp != 0 && C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] == 0x38c15b09ffffffffull) { // if C1 = 10^33 - 1
+ C1.w[1] = 0x0001ed09bead87c0ull; // C1 = 10^34 - 1
+ C1.w[0] = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ }
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1.w[1];
+ res.w[0] = C1.w[0];
+ } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ } // end x is not special and is not zero
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128 nextdown
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_nextdown (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+UINT128
+bid128_nextdown (UINT128 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp;
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q1, ind;
+ UINT128 C1; // C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (UINT64)
+
+ BID_SWAP128 (x);
+ // unpack the argument
+ x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+ if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull)
+ && (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ } else { // x is not NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ res.w[1] = 0x5fffed09bead87c0ull; // +MAXFP = +999...99 * 10^emax
+ res.w[0] = 0x378d8e63ffffffffull;
+ } else { // x is -inf
+ res.w[1] = 0xf800000000000000ull; // -inf
+ res.w[0] = 0x0000000000000000ull;
+ }
+ }
+ BID_RETURN (res);
+ }
+ // check for non-canonical values (treated as zero)
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+ }
+
+ if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is +/-0
+ res.w[1] = 0x8000000000000000ull; // -1 * 10^emin
+ res.w[0] = 0x0000000000000001ull;
+ } else { // x is not special and is not zero
+ if (x.w[1] == 0xdfffed09bead87c0ull
+ && x.w[0] == 0x378d8e63ffffffffull) {
+ // x = -MAXFP = -999...99 * 10^emax
+ res.w[1] = 0xf800000000000000ull; // -inf
+ res.w[0] = 0x0000000000000000ull;
+ } else if (x.w[1] == 0x0ull && x.w[0] == 0x0000000000000001ull) { // +MINFP
+ res.w[1] = 0x0000000000000000ull; // +0
+ res.w[0] = 0x0000000000000000ull;
+ } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ // can add/subtract 1 ulp to the significand
+
+ // Note: we could check here if x >= 10^34 to speed up the case q1 = 34
+ // q1 = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rnd errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) -
+ 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) -
+ 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q1 = nr_digits[x_nr_bits - 1].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q1++;
+ }
+ // if q1 < P then pad the significand with zeros
+ if (q1 < P34) {
+ exp = (x_exp >> 49) - 6176;
+ if (exp + 6176 > P34 - q1) {
+ ind = P34 - q1; // 1 <= ind <= P34 - 1
+ // pad with P34 - q1 zeros, until exponent = emin
+ // C1 = C1 * 10^ind
+ if (q1 <= 19) { // 64-bit C1
+ if (ind <= 19) { // 64-bit 10^ind and 64-bit C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]);
+ } else { // 128-bit 10^ind and 64-bit C1
+ __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]);
+ }
+ } else { // C1 is (most likely) 128-bit
+ if (ind <= 14) { // 64-bit 10^ind and 128-bit C1 (most likely)
+ __mul_128x64_to_128 (C1, ten2k64[ind], C1);
+ } else if (ind <= 19) { // 64-bit 10^ind and 64-bit C1 (q1 <= 19)
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]);
+ } else { // 128-bit 10^ind and 64-bit C1 (C1 must be 64-bit)
+ __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]);
+ }
+ }
+ x_exp = x_exp - ((UINT64) ind << 49);
+ } else { // pad with zeros until the exponent reaches emin
+ ind = exp + 6176;
+ // C1 = C1 * 10^ind
+ if (ind <= 19) { // 1 <= P34 - q1 <= 19 <=> 15 <= q1 <= 33
+ if (q1 <= 19) { // 64-bit C1, 64-bit 10^ind
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[ind]);
+ } else { // 20 <= q1 <= 33 => 128-bit C1, 64-bit 10^ind
+ __mul_128x64_to_128 (C1, ten2k64[ind], C1);
+ }
+ } else { // if 20 <= P34 - q1 <= 33 <=> 1 <= q1 <= 14 =>
+ // 64-bit C1, 128-bit 10^ind
+ __mul_128x64_to_128 (C1, C1.w[0], ten2k128[ind - 20]);
+ }
+ x_exp = EXP_MIN;
+ }
+ }
+ if (x_sign) { // x < 0
+ // add 1 ulp (add 1 to the significand)
+ C1.w[0]++;
+ if (C1.w[0] == 0)
+ C1.w[1]++;
+ if (C1.w[1] == 0x0001ed09bead87c0ull && C1.w[0] == 0x378d8e6400000000ull) { // if C1 = 10^34
+ C1.w[1] = 0x0000314dc6448d93ull; // C1 = 10^33
+ C1.w[0] = 0x38c15b0a00000000ull;
+ x_exp = x_exp + EXP_P1;
+ }
+ } else { // x > 0
+ // subtract 1 ulp (subtract 1 from the significand)
+ C1.w[0]--;
+ if (C1.w[0] == 0xffffffffffffffffull)
+ C1.w[1]--;
+ if (x_exp != 0 && C1.w[1] == 0x0000314dc6448d93ull && C1.w[0] == 0x38c15b09ffffffffull) { // if C1 = 10^33 - 1
+ C1.w[1] = 0x0001ed09bead87c0ull; // C1 = 10^34 - 1
+ C1.w[0] = 0x378d8e63ffffffffull;
+ x_exp = x_exp - EXP_P1;
+ }
+ }
+ // assemble the result
+ res.w[1] = x_sign | x_exp | C1.w[1];
+ res.w[0] = C1.w[0];
+ } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ } // end x is not special and is not zero
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128 nextafter
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_nextafter (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+ UINT128 x = *px;
+ UINT128 y = *py;
+ UINT128 xnswp = *px;
+ UINT128 ynswp = *py;
+#else
+UINT128
+bid128_nextafter (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 xnswp = x;
+ UINT128 ynswp = y;
+#endif
+
+ UINT128 res;
+ UINT128 tmp1, tmp2, tmp3;
+ FPSC tmp_fpsf = 0; // dummy fpsf for calls to comparison functions
+ int res1, res2;
+ UINT64 x_exp;
+
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ // check for NaNs
+ if (((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL)
+ || ((y.w[1] & MASK_SPECIAL) == MASK_SPECIAL)) {
+ // x is special or y is special
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull)
+ && (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ BID_RETURN (res)
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) { // y is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((y.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((y.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull)
+ && (y.w[0] > 0x38c15b09ffffffffull))) {
+ y.w[1] = y.w[1] & 0xffffc00000000000ull;
+ y.w[0] = 0x0ull;
+ }
+ if ((y.w[1] & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = y.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = y.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = y.w[0];
+ }
+ BID_RETURN (res)
+ } else { // at least one is infinity
+ if ((x.w[1] & MASK_ANY_INF) == MASK_INF) { // x = inf
+ x.w[1] = x.w[1] & (MASK_SIGN | MASK_INF);
+ x.w[0] = 0x0ull;
+ }
+ if ((y.w[1] & MASK_ANY_INF) == MASK_INF) { // y = inf
+ y.w[1] = y.w[1] & (MASK_SIGN | MASK_INF);
+ y.w[0] = 0x0ull;
+ }
+ }
+ }
+ // neither x nor y is NaN
+
+ // if not infinity, check for non-canonical values x (treated as zero)
+ if ((x.w[1] & MASK_ANY_INF) != MASK_INF) { // x != inf
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ x.w[1] = (x.w[1] & MASK_SIGN) | x_exp;
+ x.w[0] = 0x0ull;
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if ((x.w[1] & MASK_COEFF) > 0x0001ed09bead87c0ull ||
+ ((x.w[1] & MASK_COEFF) == 0x0001ed09bead87c0ull
+ && x.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ x.w[1] = (x.w[1] & MASK_SIGN) | x_exp;
+ x.w[0] = 0x0ull;
+ } else { // canonical
+ ;
+ }
+ }
+ }
+ // no need to check for non-canonical y
+
+ // neither x nor y is NaN
+ tmp_fpsf = *pfpsf; // save fpsf
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_quiet_equal (&res1, &xnswp,
+ &ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+ bid128_quiet_greater (&res2, &xnswp,
+ &ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res1 =
+ bid128_quiet_equal (xnswp,
+ ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+ res2 =
+ bid128_quiet_greater (xnswp,
+ ynswp _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ *pfpsf = tmp_fpsf; // restore fpsf
+
+ if (res1) { // x = y
+ // return x with the sign of y
+ res.w[1] =
+ (x.w[1] & 0x7fffffffffffffffull) | (y.
+ w[1] & 0x8000000000000000ull);
+ res.w[0] = x.w[0];
+ } else if (res2) { // x > y
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_nextdown (&res,
+ &xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res =
+ bid128_nextdown (xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_SWAP128 (res);
+ } else { // x < y
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_nextup (&res,
+ &xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#else
+ res =
+ bid128_nextup (xnswp _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#endif
+ BID_SWAP128 (res);
+ }
+ // if the operand x is finite but the result is infinite, signal
+ // overflow and inexact
+ if (((x.w[1] & MASK_SPECIAL) != MASK_SPECIAL)
+ && ((res.w[1] & MASK_SPECIAL) == MASK_SPECIAL)) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ // if the result is in (-10^emin, 10^emin), and is different from the
+ // operand x, signal underflow and inexact
+ tmp1.w[HIGH_128W] = 0x0000314dc6448d93ull;
+ tmp1.w[LOW_128W] = 0x38c15b0a00000000ull; // +100...0[34] * 10^emin
+ tmp2.w[HIGH_128W] = res.w[1] & 0x7fffffffffffffffull;
+ tmp2.w[LOW_128W] = res.w[0];
+ tmp3.w[HIGH_128W] = res.w[1];
+ tmp3.w[LOW_128W] = res.w[0];
+ tmp_fpsf = *pfpsf; // save fpsf
+#if DECIMAL_CALL_BY_REFERENCE
+ bid128_quiet_greater (&res1, &tmp1,
+ &tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+ bid128_quiet_not_equal (&res2, &xnswp,
+ &tmp3 _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res1 =
+ bid128_quiet_greater (tmp1,
+ tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+ res2 =
+ bid128_quiet_not_equal (xnswp,
+ tmp3 _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ *pfpsf = tmp_fpsf; // restore fpsf
+ if (res1 && res2) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the underflow flag
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_noncomp.c b/gcc-4.9/libgcc/config/libbid/bid128_noncomp.c
new file mode 100644
index 000000000..008c71acc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_noncomp.c
@@ -0,0 +1,1200 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ *
+ * BID128 non-computational functions:
+ * - bid128_isSigned
+ * - bid128_isNormal
+ * - bid128_isSubnormal
+ * - bid128_isFinite
+ * - bid128_isZero
+ * - bid128_isInf
+ * - bid128_isSignaling
+ * - bid128_isCanonical
+ * - bid128_isNaN
+ * - bid128_copy
+ * - bid128_negate
+ * - bid128_abs
+ * - bid128_copySign
+ * - bid128_class
+ * - bid128_totalOrder
+ * - bid128_totalOrderMag
+ * - bid128_sameQuantum
+ * - bid128_radix
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isSigned (int *pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isSigned (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x.w[HIGH_128W] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+// return 1 iff x is not zero, nor NaN nor subnormal nor infinity
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isNormal (int *pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isNormal (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_exp, C1_hi, C1_lo;
+ BID_UI64DOUBLE tmp1;
+ int exp, q, x_nr_bits;
+
+ BID_SWAP128 (x);
+ // test for special values - infinity or NaN
+ if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+ res = 0;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+ C1_hi = x.w[1] & MASK_COEFF;
+ C1_lo = x.w[0];
+ // test for zero
+ if (C1_hi == 0 && C1_lo == 0) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // test for non-canonical values of the argument x
+ if ((((C1_hi > 0x0001ed09bead87c0ull)
+ || ((C1_hi == 0x0001ed09bead87c0ull)
+ && (C1_lo > 0x378d8e63ffffffffull)))
+ && ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is subnormal or normal
+ // determine the number of digits q in the significand
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1_hi == 0) {
+ if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1_lo >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1_lo); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1_lo; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi)
+ tmp1.d = (double) C1_hi; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1_hi > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1_hi == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1_lo >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (int) (x_exp >> 49) - 6176;
+ // test for subnormal values of x
+ if (exp + q <= -6143) {
+ res = 0;
+ BID_RETURN (res);
+ } else {
+ res = 1;
+ BID_RETURN (res);
+ }
+}
+
+// return 1 iff x is not zero, nor NaN nor normal nor infinity
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isSubnormal (int *pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isSubnormal (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_exp, C1_hi, C1_lo;
+ BID_UI64DOUBLE tmp1;
+ int exp, q, x_nr_bits;
+
+ BID_SWAP128 (x);
+ // test for special values - infinity or NaN
+ if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+ res = 0;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+ C1_hi = x.w[1] & MASK_COEFF;
+ C1_lo = x.w[0];
+ // test for zero
+ if (C1_hi == 0 && C1_lo == 0) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // test for non-canonical values of the argument x
+ if ((((C1_hi > 0x0001ed09bead87c0ull)
+ || ((C1_hi == 0x0001ed09bead87c0ull)
+ && (C1_lo > 0x378d8e63ffffffffull)))
+ && ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is subnormal or normal
+ // determine the number of digits q in the significand
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1_hi == 0) {
+ if (C1_lo >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1_lo >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1_lo >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1_lo); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1_lo; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1_hi != 0 => nr. bits = 64 + nr_bits (C1_hi)
+ tmp1.d = (double) C1_hi; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1_hi > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1_hi == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1_lo >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (int) (x_exp >> 49) - 6176;
+ // test for subnormal values of x
+ if (exp + q <= -6143) {
+ res = 1;
+ } else {
+ res = 0;
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isFinite (int *pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isFinite (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ res = ((x.w[HIGH_128W] & MASK_INF) != MASK_INF);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isZero (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isZero (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT128 sig_x;
+
+ BID_SWAP128 (x);
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || // significand is non-canonical
+ ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || // significand is non-canonical
+ ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull && (x.w[1] & MASK_INF) != MASK_INF) || // significand is non-canonical
+ (sig_x.w[1] == 0 && sig_x.w[0] == 0)) { // significand is 0
+ res = 1;
+ BID_RETURN (res);
+ }
+ res = 0;
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isInf (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isInf (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ res = ((x.w[HIGH_128W] & MASK_INF) == MASK_INF)
+ && ((x.w[HIGH_128W] & MASK_NAN) != MASK_NAN);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isSignaling (int *pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isSignaling (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x.w[HIGH_128W] & MASK_SNAN) == MASK_SNAN);
+ BID_RETURN (res);
+}
+
+// return 1 iff x is a canonical number ,infinity, or NaN.
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isCanonical (int *pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isCanonical (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT128 sig_x;
+
+ BID_SWAP128 (x);
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // NaN
+ if (x.w[1] & 0x01ffc00000000000ull) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ sig_x.w[1] = x.w[1] & 0x00003fffffffffffull; // 46 bits
+ sig_x.w[0] = x.w[0]; // 64 bits
+ // payload must be < 10^33 = 0x0000314dc6448d93_38c15b0a00000000
+ if (sig_x.w[1] < 0x0000314dc6448d93ull
+ || (sig_x.w[1] == 0x0000314dc6448d93ull
+ && sig_x.w[0] < 0x38c15b0a00000000ull)) {
+ res = 1;
+ } else {
+ res = 0;
+ }
+ BID_RETURN (res);
+ } else if ((x.w[1] & MASK_INF) == MASK_INF) { // infinity
+ if ((x.w[1] & 0x03ffffffffffffffull) || x.w[0]) {
+ res = 0;
+ } else {
+ res = 1;
+ }
+ BID_RETURN (res);
+ }
+ // not NaN or infinity; extract significand to ensure it is canonical
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ // a canonical number has a coefficient < 10^34
+ // (0x0001ed09_bead87c0_378d8e64_00000000)
+ if ((sig_x.w[1] > 0x0001ed09bead87c0ull) || // significand is non-canonical
+ ((sig_x.w[1] == 0x0001ed09bead87c0ull) && (sig_x.w[0] > 0x378d8e63ffffffffull)) || // significand is non-canonical
+ ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0;
+ } else {
+ res = 1;
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_isNaN (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_isNaN (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x.w[HIGH_128W] & MASK_NAN) == MASK_NAN);
+ BID_RETURN (res);
+}
+
+// copies a floating-point operand x to destination y, with no change
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_copy (UINT128 * pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+UINT128
+bid128_copy (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 res;
+
+ res = x;
+ BID_RETURN (res);
+}
+
+// copies a floating-point operand x to destination y, reversing the sign
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_negate (UINT128 * pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+UINT128
+bid128_negate (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 res;
+
+ x.w[HIGH_128W] ^= MASK_SIGN;
+ res = x;
+ BID_RETURN (res);
+}
+
+// copies a floating-point operand x to destination y, changing the sign to positive
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_abs (UINT128 * pres,
+ UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+UINT128
+bid128_abs (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 res;
+
+ x.w[HIGH_128W] &= ~MASK_SIGN;
+ res = x;
+ BID_RETURN (res);
+}
+
+// copies operand x to destination in the same format as x, but with the sign of y
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_copySign (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+UINT128
+bid128_copySign (UINT128 x, UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 res;
+
+ x.w[HIGH_128W] =
+ (x.w[HIGH_128W] & ~MASK_SIGN) | (y.w[HIGH_128W] & MASK_SIGN);
+ res = x;
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_class (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_class (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT256 sig_x_prime256;
+ UINT192 sig_x_prime192;
+ UINT128 sig_x;
+ int exp_x;
+
+ BID_SWAP128 (x);
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) {
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) {
+ res = signalingNaN;
+ } else {
+ res = quietNaN;
+ }
+ BID_RETURN (res);
+ }
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN) {
+ res = negativeInfinity;
+ } else {
+ res = positiveInfinity;
+ }
+ BID_RETURN (res);
+ }
+ // decode number into exponent and significand
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ // check for zero or non-canonical
+ if ((sig_x.w[1] > 0x0001ed09bead87c0ull)
+ || ((sig_x.w[1] == 0x0001ed09bead87c0ull)
+ && (sig_x.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)
+ || ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN) {
+ res = negativeZero;
+ } else {
+ res = positiveZero;
+ }
+ BID_RETURN (res);
+ }
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+ // if exponent is less than -6176, the number may be subnormal
+ // (less than the smallest normal value)
+ // the smallest normal value is 1 x 10^-6143 = 10^33 x 10^-6176
+ // if (exp_x - 6176 < -6143)
+ if (exp_x < 33) { // sig_x * 10^exp_x
+ if (exp_x > 19) {
+ __mul_128x128_to_256 (sig_x_prime256, sig_x,
+ ten2k128[exp_x - 20]);
+ // 10^33 = 0x0000314dc6448d93_38c15b0a00000000
+ if ((sig_x_prime256.w[3] == 0) && (sig_x_prime256.w[2] == 0)
+ && ((sig_x_prime256.w[1] < 0x0000314dc6448d93ull)
+ || ((sig_x_prime256.w[1] == 0x0000314dc6448d93ull)
+ && (sig_x_prime256.w[0] < 0x38c15b0a00000000ull)))) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? negativeSubnormal :
+ positiveSubnormal;
+ BID_RETURN (res);
+ }
+ } else {
+ __mul_64x128_to_192 (sig_x_prime192, ten2k64[exp_x], sig_x);
+ // 10^33 = 0x0000314dc6448d93_38c15b0a00000000
+ if ((sig_x_prime192.w[2] == 0)
+ && ((sig_x_prime192.w[1] < 0x0000314dc6448d93ull)
+ || ((sig_x_prime192.w[1] == 0x0000314dc6448d93ull)
+ && (sig_x_prime192.w[0] < 0x38c15b0a00000000ull)))) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN) ? negativeSubnormal :
+ positiveSubnormal;
+ BID_RETURN (res);
+ }
+ }
+ }
+ // otherwise, normal number, determine the sign
+ res =
+ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN) ? negativeNormal : positiveNormal;
+ BID_RETURN (res);
+}
+
+// true if the exponents of x and y are the same, false otherwise.
+// The special cases of sameQuantum(NaN, NaN) and sameQuantum(Inf, Inf) are true
+// If exactly one operand is infinite or exactly one operand is NaN, then false
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_sameQuantum (int *pres, UINT128 * px,
+ UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+int
+bid128_sameQuantum (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_exp, y_exp;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ // if both operands are NaN, return true
+ if ((x.w[1] & MASK_NAN) == MASK_NAN
+ || ((y.w[1] & MASK_NAN) == MASK_NAN)) {
+ res = ((x.w[1] & MASK_NAN) == MASK_NAN
+ && (y.w[1] & MASK_NAN) == MASK_NAN);
+ BID_RETURN (res);
+ }
+ // if both operands are INF, return true
+ if ((x.w[1] & MASK_INF) == MASK_INF
+ || (y.w[1] & MASK_INF) == MASK_INF) {
+ res = ((x.w[1] & MASK_INF) == MASK_INF)
+ && ((y.w[1] & MASK_INF) == MASK_INF);
+ BID_RETURN (res);
+ }
+ // decode exponents for both numbers, and return true if they match
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ } else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ }
+ if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ y_exp = (y.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ } else { // G0_G1 != 11
+ y_exp = y.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ }
+ res = (x_exp == y_exp);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_totalOrder (int *pres, UINT128 * px,
+ UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+int
+bid128_totalOrder (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT128 sig_x, sig_y, pyld_y, pyld_x;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ // NaN (CASE 1)
+ // if x and y are unordered numerically because either operand is NaN
+ // (1) totalOrder(-NaN, number) is true
+ // (2) totalOrder(number, +NaN) is true
+ // (3) if x and y are both NaN:
+ // i) negative sign bit < positive sign bit
+ // ii) signaling < quiet for +NaN, reverse for -NaN
+ // iii) lesser payload < greater payload for +NaN (reverse for -NaN)
+ // iv) else if bitwise identical (in canonical form), return 1
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) {
+ // if x is -NaN
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN) {
+ // return true, unless y is -NaN also
+ if ((y.w[1] & MASK_NAN) != MASK_NAN
+ || (y.w[1] & MASK_SIGN) != MASK_SIGN) {
+ res = 1; // y is a number, return 1
+ BID_RETURN (res);
+ } else { // if y and x are both -NaN
+ pyld_x.w[1] = x.w[1] & 0x00003fffffffffffull;
+ pyld_x.w[0] = x.w[0];
+ pyld_y.w[1] = y.w[1] & 0x00003fffffffffffull;
+ pyld_y.w[0] = y.w[0];
+ if ((pyld_x.w[1] > 0x0000314dc6448d93ull)
+ || ((pyld_x.w[1] == 0x0000314dc6448d93ull)
+ && (pyld_x.w[0] > 0x38c15b09ffffffffull))) {
+ pyld_x.w[1] = 0;
+ pyld_x.w[0] = 0;
+ }
+ if ((pyld_y.w[1] > 0x0000314dc6448d93ull)
+ || ((pyld_y.w[1] == 0x0000314dc6448d93ull)
+ && (pyld_y.w[0] > 0x38c15b09ffffffffull))) {
+ pyld_y.w[1] = 0;
+ pyld_y.w[0] = 0;
+ }
+ // if x and y are both -SNaN or both -QNaN, we have to compare payloads
+ // this statement evaluates to true if both are SNaN or QNaN
+ if (!
+ (((y.w[1] & MASK_SNAN) == MASK_SNAN) ^
+ ((x.w[1] & MASK_SNAN) == MASK_SNAN))) {
+ // it comes down to the payload. we want to return true if x has a
+ // larger payload, or if the payloads are equal (canonical forms
+ // are bitwise identical)
+ if ((pyld_x.w[1] > pyld_y.w[1]) ||
+ ((pyld_x.w[1] == pyld_y.w[1])
+ && (pyld_x.w[0] >= pyld_y.w[0])))
+ res = 1;
+ else
+ res = 0;
+ BID_RETURN (res);
+ } else {
+ // either x = -SNaN and y = -QNaN or x = -QNaN and y = -SNaN
+ res = ((y.w[1] & MASK_SNAN) == MASK_SNAN);
+ // totalOrder (-QNaN, -SNaN) == 1
+ BID_RETURN (res);
+ }
+ }
+ } else { // x is +NaN
+ // return false, unless y is +NaN also
+ if ((y.w[1] & MASK_NAN) != MASK_NAN
+ || (y.w[1] & MASK_SIGN) == MASK_SIGN) {
+ res = 0; // y is a number, return 1
+ BID_RETURN (res);
+ } else {
+ // x and y are both +NaN;
+ pyld_x.w[1] = x.w[1] & 0x00003fffffffffffull;
+ pyld_x.w[0] = x.w[0];
+ pyld_y.w[1] = y.w[1] & 0x00003fffffffffffull;
+ pyld_y.w[0] = y.w[0];
+ if ((pyld_x.w[1] > 0x0000314dc6448d93ull)
+ || ((pyld_x.w[1] == 0x0000314dc6448d93ull)
+ && (pyld_x.w[0] > 0x38c15b09ffffffffull))) {
+ pyld_x.w[1] = 0;
+ pyld_x.w[0] = 0;
+ }
+ if ((pyld_y.w[1] > 0x0000314dc6448d93ull)
+ || ((pyld_y.w[1] == 0x0000314dc6448d93ull)
+ && (pyld_y.w[0] > 0x38c15b09ffffffffull))) {
+ pyld_y.w[1] = 0;
+ pyld_y.w[0] = 0;
+ }
+ // if x and y are both +SNaN or both +QNaN, we have to compare payloads
+ // this statement evaluates to true if both are SNaN or QNaN
+ if (!
+ (((y.w[1] & MASK_SNAN) == MASK_SNAN) ^
+ ((x.w[1] & MASK_SNAN) == MASK_SNAN))) {
+ // it comes down to the payload. we want to return true if x has a
+ // smaller payload, or if the payloads are equal (canonical forms
+ // are bitwise identical)
+ if ((pyld_x.w[1] < pyld_y.w[1]) ||
+ ((pyld_x.w[1] == pyld_y.w[1])
+ && (pyld_x.w[0] <= pyld_y.w[0])))
+ res = 1;
+ else
+ res = 0;
+ BID_RETURN (res);
+ } else {
+ // either x = SNaN and y = QNaN or x = QNaN and y = SNaN
+ res = ((x.w[1] & MASK_SNAN) == MASK_SNAN);
+ // totalOrder (-QNaN, -SNaN) == 1
+ BID_RETURN (res);
+ }
+ }
+ }
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) {
+ // x is certainly not NAN in this case.
+ // return true if y is positive
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE 2)
+ // if all the bits are the same, the numbers are equal.
+ if ((x.w[1] == y.w[1]) && (x.w[0] == y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGNS (CASE 3)
+ // if signs are opposite, return 1 if x is negative
+ // (if x < y, totalOrder is true)
+ if (((x.w[1] & MASK_SIGN) == MASK_SIGN) ^ ((y.w[1] & MASK_SIGN) ==
+ MASK_SIGN)) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE 4)
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // if x == neg_inf, return (y == neg_inf);
+ if ((x.w[1] & MASK_SIGN) == MASK_SIGN) {
+ res = 1;
+ BID_RETURN (res);
+ } else {
+ // x is positive infinity, only return1 if y is positive infinity as well
+ res = ((y.w[1] & MASK_INF) == MASK_INF);
+ BID_RETURN (res);
+ // && (y & MASK_SIGN) != MASK_SIGN); (we know y has same sign as x)
+ }
+ } else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // CONVERT x
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF x IS CANONICAL
+ // 9999999999999999999999999999999999 (decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+ if ((((sig_x.w[1] > 0x0001ed09bead87c0ull) ||
+ ((sig_x.w[1] == 0x0001ed09bead87c0ull) &&
+ (sig_x.w[0] > 0x378d8e63ffffffffull))) &&
+ ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) ||
+ ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) ||
+ ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+ // check for the case where the exponent is shifted right by 2 bits!
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ exp_x = (x.w[1] >> 47) & 0x000000000003fffull;
+ }
+ }
+ // CONVERT y
+ exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+ sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+ sig_y.w[0] = y.w[0];
+
+ // CHECK IF y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+ if ((((sig_y.w[1] > 0x0001ed09bead87c0ull) ||
+ ((sig_y.w[1] == 0x0001ed09bead87c0ull) &&
+ (sig_y.w[0] > 0x378d8e63ffffffffull))) &&
+ ((y.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) ||
+ ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) ||
+ ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+ // check for the case where the exponent is shifted right by 2 bits!
+ if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ exp_y = (y.w[1] >> 47) & 0x000000000003fffull;
+ }
+ }
+ // ZERO (CASE 5)
+ // if x and y represent the same entities, and both are negative
+ // return true iff exp_x <= exp_y
+ if (x_is_zero && y_is_zero) {
+ // we know that signs must be the same because we would have caught it
+ // in case3 if signs were different
+ // totalOrder(x,y) iff exp_x >= exp_y for negative numbers
+ // totalOrder(x,y) iff exp_x <= exp_y for positive numbers
+ if (exp_x == exp_y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ res = ((exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // if x is zero and y isn't, clearly x has the smaller payload
+ if (x_is_zero) {
+ res = ((y.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, and x isn't, clearly y has the smaller payload
+ if (y_is_zero) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE 6)
+ // if both components are either bigger or smaller
+ if (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (((sig_x.w[1] < sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+ if (exp_x > exp_y) {
+ // if exp_x is 33 greater than exp_y, it is definitely larger,
+ // so no need for compensation
+ if (exp_x - exp_y > 33) {
+ res = ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ // difference cannot be greater than 10^33
+ }
+ // otherwise adjust the x significand upwards
+ if (exp_x - exp_y > 19) {
+ __mul_128x128_to_256 (sig_n_prime256, sig_x,
+ ten2k128[exp_x - exp_y - 20]);
+ // the compensated significands are equal (ie "x and y represent the same
+ // entities") return 1 if (negative && expx > expy) ||
+ // (positive && expx < expy)
+ if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && (sig_n_prime256.w[1] == sig_y.w[1])
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ // the case exp_x == exp_y cannot occur, because all bits must be
+ // the same - would have been caught if (x == y)
+ res = ((exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // if positive, return 1 if adjusted x is smaller than y
+ res = (((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && ((sig_n_prime256.w[1] < sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] <
+ sig_y.w[0]))) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_x - exp_y], sig_x);
+ // if positive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = ((exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime192.w[2] == 0)
+ && ((sig_n_prime192.w[1] < sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] <
+ sig_y.w[0]))) ^ ((x.w[1] & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // if exp_x is 33 less than exp_y, it is definitely smaller,
+ // no need for compensation
+ if (exp_y - exp_x > 33) {
+ res = ((x.w[1] & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (exp_y - exp_x > 19) {
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y,
+ ten2k128[exp_y - exp_x - 20]);
+ // if x and y represent the same entities and both are negative
+ // return true iff exp_x <= exp_y
+ if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && (sig_n_prime256.w[1] == sig_x.w[1])
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = (exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // values are not equal, for positive numbers return 1 if x is less than y
+ // and 0 otherwise
+ res = (((sig_n_prime256.w[3] != 0) ||
+ // if upper128 bits of compensated y are non-zero, y is bigger
+ (sig_n_prime256.w[2] != 0) ||
+ // if upper128 bits of compensated y are non-zero, y is bigger
+ (sig_n_prime256.w[1] > sig_x.w[1]) ||
+ // if compensated y is bigger, y is bigger
+ (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] >
+ sig_x.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y);
+ if ((sig_n_prime192.w[2] == 0) && (sig_n_prime192.w[1] == sig_x.w[1])
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = (exp_x <= exp_y) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime192.w[2] != 0) ||
+ // if upper128 bits of compensated y are non-zero, y is bigger
+ (sig_n_prime192.w[1] > sig_x.w[1]) ||
+ // if compensated y is bigger, y is bigger
+ (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] >
+ sig_x.w[0])) ^ ((x.w[1] & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_totalOrderMag (int *pres, UINT128 * px,
+ UINT128 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+ UINT128 y = *py;
+#else
+int
+bid128_totalOrderMag (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT128 sig_x, sig_y, pyld_y, pyld_x;
+ UINT192 sig_n_prime192;
+ UINT256 sig_n_prime256;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ BID_SWAP128 (x);
+ BID_SWAP128 (y);
+ x.w[1] = x.w[1] & 0x7fffffffffffffffull;
+ y.w[1] = y.w[1] & 0x7fffffffffffffffull;
+
+ // NaN (CASE 1)
+ // if x and y are unordered numerically because either operand is NaN
+ // (1) totalOrder(number, +NaN) is true
+ // (2) if x and y are both NaN:
+ // i) signaling < quiet for +NaN
+ // ii) lesser payload < greater payload for +NaN
+ // iii) else if bitwise identical (in canonical form), return 1
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) {
+ // x is +NaN
+ // return false, unless y is +NaN also
+ if ((y.w[1] & MASK_NAN) != MASK_NAN) {
+ res = 0; // y is a number, return 0
+ BID_RETURN (res);
+ } else {
+ // x and y are both +NaN;
+ pyld_x.w[1] = x.w[1] & 0x00003fffffffffffull;
+ pyld_x.w[0] = x.w[0];
+ pyld_y.w[1] = y.w[1] & 0x00003fffffffffffull;
+ pyld_y.w[0] = y.w[0];
+ if ((pyld_x.w[1] > 0x0000314dc6448d93ull)
+ || ((pyld_x.w[1] == 0x0000314dc6448d93ull)
+ && (pyld_x.w[0] > 0x38c15b09ffffffffull))) {
+ pyld_x.w[1] = 0;
+ pyld_x.w[0] = 0;
+ }
+ if ((pyld_y.w[1] > 0x0000314dc6448d93ull)
+ || ((pyld_y.w[1] == 0x0000314dc6448d93ull)
+ && (pyld_y.w[0] > 0x38c15b09ffffffffull))) {
+ pyld_y.w[1] = 0;
+ pyld_y.w[0] = 0;
+ }
+ // if x and y are both +SNaN or both +QNaN, we have to compare payloads
+ // this statement evaluates to true if both are SNaN or QNaN
+ if (!
+ (((y.w[1] & MASK_SNAN) == MASK_SNAN) ^
+ ((x.w[1] & MASK_SNAN) == MASK_SNAN))) {
+ // it comes down to the payload. we want to return true if x has a
+ // smaller payload, or if the payloads are equal (canonical forms
+ // are bitwise identical)
+ if ((pyld_x.w[1] < pyld_y.w[1]) ||
+ ((pyld_x.w[1] == pyld_y.w[1])
+ && (pyld_x.w[0] <= pyld_y.w[0]))) {
+ res = 1;
+ } else {
+ res = 0;
+ }
+ BID_RETURN (res);
+ } else {
+ // either x = SNaN and y = QNaN or x = QNaN and y = SNaN
+ res = ((x.w[1] & MASK_SNAN) == MASK_SNAN);
+ // totalOrder (-QNaN, -SNaN) == 1
+ BID_RETURN (res);
+ }
+ }
+ } else if ((y.w[1] & MASK_NAN) == MASK_NAN) {
+ // x is certainly not NAN in this case.
+ // return true because y is positive
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE 2)
+ // if all the bits are the same, the numbers are equal.
+ if ((x.w[1] == y.w[1]) && (x.w[0] == y.w[0])) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE 3)
+ if ((x.w[1] & MASK_INF) == MASK_INF) {
+ // x is positive infinity, only return 1 if y is positive infinity as well
+ res = ((y.w[1] & MASK_INF) == MASK_INF);
+ BID_RETURN (res);
+ // (we know y has same sign as x)
+ } else if ((y.w[1] & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // since y is +inf, x<y
+ res = 1;
+ BID_RETURN (res);
+ } else {
+ ; // continue
+ }
+
+ // CONVERT x
+ sig_x.w[1] = x.w[1] & 0x0001ffffffffffffull;
+ sig_x.w[0] = x.w[0];
+ exp_x = (x.w[1] >> 49) & 0x000000000003fffull;
+
+ // CHECK IF x IS CANONICAL
+ // 9999999999999999999999999999999999 (decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+ if ((((sig_x.w[1] > 0x0001ed09bead87c0ull) ||
+ ((sig_x.w[1] == 0x0001ed09bead87c0ull) &&
+ (sig_x.w[0] > 0x378d8e63ffffffffull))) &&
+ ((x.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) ||
+ ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) ||
+ ((sig_x.w[1] == 0) && (sig_x.w[0] == 0))) {
+ x_is_zero = 1;
+ // check for the case where the exponent is shifted right by 2 bits!
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ exp_x = (x.w[1] >> 47) & 0x000000000003fffull;
+ }
+ }
+ // CONVERT y
+ exp_y = (y.w[1] >> 49) & 0x0000000000003fffull;
+ sig_y.w[1] = y.w[1] & 0x0001ffffffffffffull;
+ sig_y.w[0] = y.w[0];
+
+ // CHECK IF y IS CANONICAL
+ // 9999999999999999999999999999999999(decimal) =
+ // 1ed09_bead87c0_378d8e63_ffffffff(hexadecimal)
+ // [0, 10^34) is the 754r supported canonical range.
+ // If the value exceeds that, it is interpreted as 0.
+ if ((((sig_y.w[1] > 0x0001ed09bead87c0ull) ||
+ ((sig_y.w[1] == 0x0001ed09bead87c0ull) &&
+ (sig_y.w[0] > 0x378d8e63ffffffffull))) &&
+ ((y.w[1] & 0x6000000000000000ull) != 0x6000000000000000ull)) ||
+ ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) ||
+ ((sig_y.w[1] == 0) && (sig_y.w[0] == 0))) {
+ y_is_zero = 1;
+ // check for the case where the exponent is shifted right by 2 bits!
+ if ((y.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) {
+ exp_y = (y.w[1] >> 47) & 0x000000000003fffull;
+ }
+ }
+ // ZERO (CASE 4)
+ if (x_is_zero && y_is_zero) {
+ // we know that signs must be the same because we would have caught it
+ // in case3 if signs were different
+ // totalOrder(x,y) iff exp_x <= exp_y for positive numbers
+ if (exp_x == exp_y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ // if x is zero and y isn't, clearly x has the smaller payload
+ if (x_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if y is zero, and x isn't, clearly y has the smaller payload
+ if (y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE 5)
+ // if both components are either bigger or smaller
+ if (((sig_x.w[1] > sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] > sig_y.w[0]))
+ && exp_x >= exp_y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ if (((sig_x.w[1] < sig_y.w[1])
+ || (sig_x.w[1] == sig_y.w[1] && sig_x.w[0] < sig_y.w[0]))
+ && exp_x <= exp_y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 33, it comes down to the compensated significand
+ if (exp_x > exp_y) {
+ // if exp_x is 33 greater than exp_y, it is definitely larger,
+ // so no need for compensation
+ if (exp_x - exp_y > 33) {
+ res = 0; // difference cannot be greater than 10^33
+ BID_RETURN (res);
+ }
+ // otherwise adjust the x significand upwards
+ if (exp_x - exp_y > 19) {
+ __mul_128x128_to_256 (sig_n_prime256, sig_x,
+ ten2k128[exp_x - exp_y - 20]);
+ // the compensated significands are equal (ie "x and y represent the same
+ // entities") return 1 if (negative && expx > expy) ||
+ // (positive && expx < expy)
+ if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && (sig_n_prime256.w[1] == sig_y.w[1])
+ && (sig_n_prime256.w[0] == sig_y.w[0])) {
+ // the case (exp_x == exp_y) cannot occur, because all bits must be
+ // the same - would have been caught if (x == y)
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ // since positive, return 1 if adjusted x is smaller than y
+ res = ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && ((sig_n_prime256.w[1] < sig_y.w[1])
+ || (sig_n_prime256.w[1] == sig_y.w[1]
+ && sig_n_prime256.w[0] < sig_y.w[0])));
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_x - exp_y], sig_x);
+ // if positive, return whichever significand is larger
+ // (converse if negative)
+ if ((sig_n_prime192.w[2] == 0) && sig_n_prime192.w[1] == sig_y.w[1]
+ && (sig_n_prime192.w[0] == sig_y.w[0])) {
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ res = ((sig_n_prime192.w[2] == 0)
+ && ((sig_n_prime192.w[1] < sig_y.w[1])
+ || (sig_n_prime192.w[1] == sig_y.w[1]
+ && sig_n_prime192.w[0] < sig_y.w[0])));
+ BID_RETURN (res);
+ }
+ // if exp_x is 33 less than exp_y, it is definitely smaller,
+ // no need for compensation
+ if (exp_y - exp_x > 33) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ if (exp_y - exp_x > 19) {
+ // adjust the y significand upwards
+ __mul_128x128_to_256 (sig_n_prime256, sig_y,
+ ten2k128[exp_y - exp_x - 20]);
+ if ((sig_n_prime256.w[3] == 0) && (sig_n_prime256.w[2] == 0)
+ && (sig_n_prime256.w[1] == sig_x.w[1])
+ && (sig_n_prime256.w[0] == sig_x.w[0])) {
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ // values are not equal, for positive numbers return 1 if x is less than y
+ // and 0 otherwise
+ res = ((sig_n_prime256.w[3] != 0) ||
+ // if upper128 bits of compensated y are non-zero, y is bigger
+ (sig_n_prime256.w[2] != 0) ||
+ // if upper128 bits of compensated y are non-zero, y is bigger
+ (sig_n_prime256.w[1] > sig_x.w[1]) ||
+ // if compensated y is bigger, y is bigger
+ (sig_n_prime256.w[1] == sig_x.w[1]
+ && sig_n_prime256.w[0] > sig_x.w[0]));
+ BID_RETURN (res);
+ }
+ __mul_64x128_to_192 (sig_n_prime192, ten2k64[exp_y - exp_x], sig_y);
+ if ((sig_n_prime192.w[2] == 0) && (sig_n_prime192.w[1] == sig_x.w[1])
+ && (sig_n_prime192.w[0] == sig_x.w[0])) {
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ res = ((sig_n_prime192.w[2] != 0) ||
+ // if upper128 bits of compensated y are non-zero, y is bigger
+ (sig_n_prime192.w[1] > sig_x.w[1]) ||
+ // if compensated y is bigger, y is bigger
+ (sig_n_prime192.w[1] == sig_x.w[1]
+ && sig_n_prime192.w[0] > sig_x.w[0]));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_radix (int *pres, UINT128 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+int
+bid128_radix (UINT128 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ if (x.w[LOW_128W]) // dummy test
+ res = 10;
+ else
+ res = 10;
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_quantize.c b/gcc-4.9/libgcc/config/libbid/bid128_quantize.c
new file mode 100644
index 000000000..b82526d94
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_quantize.c
@@ -0,0 +1,274 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+BID128_FUNCTION_ARG2 (bid128_quantize, x, y)
+
+ UINT256 CT;
+ UINT128 CX, CY, T, CX2, CR, Stemp, res, REM_H, C2N;
+ UINT64 sign_x, sign_y, remainder_h, carry, CY64, valid_x;
+ int_float tempx;
+ int exponent_x, exponent_y, digits_x, extra_digits, amount;
+ int expon_diff, total_digits, bin_expon_cx, rmode, status;
+
+valid_x = unpack_BID128_value (&sign_x, &exponent_x, &CX, x);
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_y, &exponent_y, &CY, y)) {
+ // y is Inf. or NaN
+#ifdef SET_STATUS_FLAGS
+if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+
+ // test if y is NaN
+if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) {
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+ }
+#endif
+ if ((x.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull) {
+ res.w[1] = CY.w[1] & QUIET_MASK64;
+ res.w[0] = CY.w[0];
+ } else {
+ res.w[1] = CX.w[1] & QUIET_MASK64;
+ res.w[0] = CX.w[0];
+ }
+ BID_RETURN (res);
+}
+ // y is Infinity?
+if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if x is not Inf.
+ if (((x.w[1] & 0x7c00000000000000ull) < 0x7800000000000000ull)) {
+ // return NaN
+#ifdef SET_STATUS_FLAGS
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ } else
+ if (((x.w[1] & 0x7c00000000000000ull) <= 0x7800000000000000ull)) {
+ res.w[1] = CX.w[1] & QUIET_MASK64;
+ res.w[0] = CX.w[0];
+ BID_RETURN (res);
+ }
+}
+
+}
+
+if (!valid_x) {
+ // test if x is NaN or Inf
+ if ((x.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ } else if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ }
+ res.w[1] = CX.w[1] & QUIET_MASK64;
+ res.w[0] = CX.w[0];
+ BID_RETURN (res);
+ }
+ if (!CX.w[1] && !CX.w[0]) {
+ get_BID128_very_fast (&res, sign_x, exponent_y, CX);
+ BID_RETURN (res);
+ }
+}
+ // get number of decimal digits in coefficient_x
+if (CX.w[1]) {
+ tempx.d = (float) CX.w[1];
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f + 64;
+} else {
+ tempx.d = (float) CX.w[0];
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f;
+}
+
+digits_x = estimate_decimal_digits[bin_expon_cx];
+if (CX.w[1] > power10_table_128[digits_x].w[1]
+ || (CX.w[1] == power10_table_128[digits_x].w[1]
+ && CX.w[0] >= power10_table_128[digits_x].w[0]))
+ digits_x++;
+
+expon_diff = exponent_x - exponent_y;
+total_digits = digits_x + expon_diff;
+
+if ((UINT32) total_digits <= 34) {
+ if (expon_diff >= 0) {
+ T = power10_table_128[expon_diff];
+ __mul_128x128_low (CX2, T, CX);
+ get_BID128_very_fast (&res, sign_x, exponent_y, CX2);
+ BID_RETURN (res);
+ }
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ // must round off -expon_diff digits
+ extra_digits = -expon_diff;
+ __add_128_128 (CX, CX, round_const_table_128[rmode][extra_digits]);
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_to_256 (CT, CX, reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+ CX2.w[0] = CT.w[2];
+ CX2.w[1] = CT.w[3];
+ if (amount >= 64) {
+ CR.w[1] = 0;
+ CR.w[0] = CX2.w[1] >> (amount - 64);
+ } else {
+ __shr_128 (CR, CX2, amount);
+ }
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rnd_mode == 0)
+#endif
+ if (CR.w[0] & 1) {
+ // check whether fractional part of initial_P/10^extra_digits is
+ // exactly .5 this is the same as fractional part of
+ // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero
+
+ // get remainder
+ if (amount >= 64) {
+ remainder_h = CX2.w[0] | (CX2.w[1] << (128 - amount));
+ } else
+ remainder_h = CX2.w[0] << (64 - amount);
+
+ // test whether fractional part is 0
+ if (!remainder_h
+ && (CT.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (CT.w[1] == reciprocals10_128[extra_digits].w[1]
+ && CT.w[0] < reciprocals10_128[extra_digits].w[0]))) {
+ CR.w[0]--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status = INEXACT_EXCEPTION;
+
+ // get remainder
+ if (amount >= 64) {
+ REM_H.w[1] = (CX2.w[1] << (128 - amount));
+ REM_H.w[0] = CX2.w[0];
+ } else {
+ REM_H.w[1] = CX2.w[0] << (64 - amount);
+ REM_H.w[0] = 0;
+ }
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (REM_H.w[1] == 0x8000000000000000ull && !REM_H.w[0]
+ && (CT.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (CT.w[1] == reciprocals10_128[extra_digits].w[1]
+ && CT.w[0] < reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!(REM_H.w[1] | REM_H.w[0])
+ && (CT.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (CT.w[1] == reciprocals10_128[extra_digits].w[1]
+ && CT.w[0] < reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY64, CT.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, CT.w[1],
+ reciprocals10_128[extra_digits].w[1], CY64);
+ if (amount < 64) {
+ C2N.w[1] = 0;
+ C2N.w[0] = ((UINT64) 1) << amount;
+ REM_H.w[0] = REM_H.w[1] >> (64 - amount);
+ REM_H.w[1] = 0;
+ } else {
+ C2N.w[1] = ((UINT64) 1) << (amount - 64);
+ C2N.w[0] = 0;
+ REM_H.w[1] >>= (128 - amount);
+ }
+ REM_H.w[0] += carry;
+ if (REM_H.w[0] < carry)
+ REM_H.w[1]++;
+ if (__unsigned_compare_ge_128 (REM_H, C2N))
+ status = EXACT_STATUS;
+ }
+
+ __set_status_flags (pfpsf, status);
+
+#endif
+ get_BID128_very_fast (&res, sign_x, exponent_y, CR);
+ BID_RETURN (res);
+}
+if (total_digits < 0) {
+ CR.w[1] = CR.w[0] = 0;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ if (rmode == ROUNDING_UP)
+ CR.w[0] = 1;
+#endif
+#endif
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+ get_BID128_very_fast (&res, sign_x, exponent_y, CR);
+ BID_RETURN (res);
+}
+ // else more than 34 digits in coefficient
+#ifdef SET_STATUS_FLAGS
+__set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+res.w[1] = 0x7c00000000000000ull;
+res.w[0] = 0;
+BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_rem.c b/gcc-4.9/libgcc/config/libbid/bid128_rem.c
new file mode 100644
index 000000000..fdc0b6f32
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_rem.c
@@ -0,0 +1,217 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_div_macros.h"
+
+
+BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (UINT128, bid128_rem, x, y)
+
+ UINT256 P256;
+ UINT128 CX, CY, CX2, CQ, CR, T, CXS, P128, res;
+ UINT64 sign_x, sign_y, valid_y;
+ SINT64 D;
+ int_float f64, fx;
+ int exponent_x, exponent_y, diff_expon, bin_expon_cx, scale,
+ scale0;
+
+ // unpack arguments, check for NaN or Infinity
+
+valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y);
+
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+#ifdef SET_STATUS_FLAGS
+if ((y.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // test if x is NaN
+if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = CX.w[1] & QUIET_MASK64;
+ res.w[0] = CX.w[0];
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+
+}
+ // x is 0
+if ((!CY.w[1]) && (!CY.w[0])) {
+#ifdef SET_STATUS_FLAGS
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+if (valid_y || ((y.w[1] & NAN_MASK64) == INFINITY_MASK64)) {
+ // return 0
+ if ((exponent_x > exponent_y)
+ && ((y.w[1] & NAN_MASK64) != INFINITY_MASK64))
+ exponent_x = exponent_y;
+
+ res.w[1] = sign_x | (((UINT64) exponent_x) << 49);
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+}
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((y.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = CY.w[1] & QUIET_MASK64;
+ res.w[0] = CY.w[0];
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return x
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+ }
+ // y is 0
+#ifdef SET_STATUS_FLAGS
+ // set status flags
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+}
+
+diff_expon = exponent_x - exponent_y;
+
+if (diff_expon <= 0) {
+ diff_expon = -diff_expon;
+
+ if (diff_expon > 34) {
+ // |x|<|y| in this case
+ res = x;
+ BID_RETURN (res);
+ }
+ // set exponent of y to exponent_x, scale coefficient_y
+ T = power10_table_128[diff_expon];
+ __mul_128x128_to_256 (P256, CY, T);
+
+ if (P256.w[2] || P256.w[3]) {
+ // |x|<|y| in this case
+ res = x;
+ BID_RETURN (res);
+ }
+
+ CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63);
+ CX2.w[0] = CX.w[0] << 1;
+ if (__unsigned_compare_ge_128 (P256, CX2)) {
+ // |x|<|y| in this case
+ res = x;
+ BID_RETURN (res);
+ }
+
+ P128.w[0] = P256.w[0];
+ P128.w[1] = P256.w[1];
+ __div_128_by_128 (&CQ, &CR, CX, P128);
+
+ CX2.w[1] = (CR.w[1] << 1) | (CR.w[0] >> 63);
+ CX2.w[0] = CR.w[0] << 1;
+ if ((__unsigned_compare_gt_128 (CX2, P256))
+ || (CX2.w[1] == P256.w[1] && CX2.w[0] == P256.w[0]
+ && (CQ.w[0] & 1))) {
+ __sub_128_128 (CR, P256, CR);
+ sign_x ^= 0x8000000000000000ull;
+ }
+
+ get_BID128_very_fast (&res, sign_x, exponent_x, CR);
+ BID_RETURN (res);
+}
+ // 2^64
+f64.i = 0x5f800000;
+
+scale0 = 38;
+if (!CY.w[1])
+ scale0 = 34;
+
+while (diff_expon > 0) {
+ // get number of digits in CX and scale=38-digits
+ // fx ~ CX
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+ scale = scale0 - estimate_decimal_digits[bin_expon_cx];
+ // scale = 38-estimate_decimal_digits[bin_expon_cx];
+ D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+ if (D > 0
+ || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0]))
+ scale--;
+
+ if (diff_expon >= scale)
+ diff_expon -= scale;
+ else {
+ scale = diff_expon;
+ diff_expon = 0;
+ }
+
+ T = power10_table_128[scale];
+ __mul_128x128_low (CXS, CX, T);
+
+ __div_128_by_128 (&CQ, &CX, CXS, CY);
+
+ // check for remainder == 0
+ if (!CX.w[1] && !CX.w[0]) {
+ get_BID128_very_fast (&res, sign_x, exponent_y, CX);
+ BID_RETURN (res);
+ }
+}
+
+CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63);
+CX2.w[0] = CX.w[0] << 1;
+if ((__unsigned_compare_gt_128 (CX2, CY))
+ || (CX2.w[1] == CY.w[1] && CX2.w[0] == CY.w[0] && (CQ.w[0] & 1))) {
+ __sub_128_128 (CX, CY, CX);
+ sign_x ^= 0x8000000000000000ull;
+}
+
+get_BID128_very_fast (&res, sign_x, exponent_y, CX);
+BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_round_integral.c b/gcc-4.9/libgcc/config/libbid/bid128_round_integral.c
new file mode 100644
index 000000000..1b740d31c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_round_integral.c
@@ -0,0 +1,1951 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128_round_integral_exact
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1 (bid128_round_integral_exact, x)
+
+ UINT128 res = { {0xbaddbaddbaddbaddull, 0xbaddbaddbaddbaddull}
+ };
+UINT64 x_sign;
+UINT64 x_exp;
+int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+UINT64 tmp64;
+BID_UI64DOUBLE tmp1;
+unsigned int x_nr_bits;
+int q, ind, shift;
+UINT128 C1;
+UINT256 fstar;
+UINT256 P256;
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ BID_RETURN (res)
+ } else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ // return +inf
+ res.w[1] = 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ // return -inf
+ res.w[1] = 0xf800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+ }
+}
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for non-canonical values (treated as zero)
+if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+} else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+}
+
+ // test for input equal to zero
+if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ // return 0 preserving the sign bit and the preferred exponent
+ // of MAX(Q(x), 0)
+ if (x_exp <= (0x1820ull << 49)) {
+ res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull;
+ } else {
+ res.w[1] = x_sign | x_exp;
+ }
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // x is not special and is not zero
+
+switch (rnd_mode) {
+case ROUNDING_TO_NEAREST:
+case ROUNDING_TIES_AWAY:
+ // if (exp <= -(p+1)) return 0.0
+ if (x_exp <= 0x2ffa000000000000ull) { // 0x2ffa000000000000ull == -35
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_DOWN:
+ // if (exp <= -p) return -1.0 or +0.0
+ if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffa000000000000ull == -34
+ if (x_sign) {
+ // if negative, return negative 1, because we know coefficient
+ // is non-zero (would have been caught above)
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ } else {
+ // if positive, return positive 0, because we know coefficient is
+ // non-zero (would have been caught above)
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_UP:
+ // if (exp <= -p) return -0.0 or +1.0
+ if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34
+ if (x_sign) {
+ // if negative, return negative 0, because we know the coefficient
+ // is non-zero (would have been caught above)
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else {
+ // if positive, return positive 1, because we know coefficient is
+ // non-zero (would have been caught above)
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_TO_ZERO:
+ // if (exp <= -p) return -0.0 or +0.0
+ if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+}
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+} else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+}
+
+q = nr_digits[x_nr_bits - 1].digits;
+if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+}
+exp = (x_exp >> 49) - 6176;
+if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+}
+ // exp < 0
+switch (rnd_mode) {
+case ROUNDING_TO_NEAREST:
+ if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ // determine the value of res and fstar
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ // Note: we are going to use ten2mk128[] instead of ten2mk128trunc[]
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ // redundant shift = shiftright128[ind - 1]; // shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* < 10^(-x) <=> midpoint
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ // if 0 < fstar < 10^(-x), subtract 1 if odd (for rounding to even)
+ if ((res.w[0] & 0x0000000000000001ull) && // is result odd?
+ ((fstar.w[1] < (ten2mk128[ind - 1].w[1]))
+ || ((fstar.w[1] == ten2mk128[ind - 1].w[1])
+ && (fstar.w[0] < ten2mk128[ind - 1].w[0])))) {
+ // subract 1 to make even
+ if (res.w[0]-- == 0) {
+ res.w[1]--;
+ }
+ }
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128[ind - 1].w[1] ||
+ (tmp64 == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* < 10^(-x) <=> midpoint
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((res.w[0] & 0x0000000000000001ull) && // is result odd?
+ fstar.w[2] == 0 && (fstar.w[1] < ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] < ten2mk128[ind - 1].w[0]))) {
+ // subract 1 to make even
+ if (res.w[0]-- == 0) {
+ res.w[1]--;
+ }
+ }
+ if (fstar.w[2] > onehalf128[ind - 1] ||
+ (fstar.w[2] == onehalf128[ind - 1]
+ && (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* < 10^(-x) <=> midpoint
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((res.w[0] & 0x0000000000000001ull) && // is result odd?
+ fstar.w[3] == 0 && fstar.w[2] == 0 &&
+ (fstar.w[1] < ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] < ten2mk128[ind - 1].w[0]))) {
+ // subract 1 to make even
+ if (res.w[0]-- == 0) {
+ res.w[1]--;
+ }
+ }
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+ } else { // if ((q + exp) < 0) <=> q < -exp
+ // the result is +0 or -0
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_TIES_AWAY:
+ if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // determine also the inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ // Note: we are going to use ten2mk128[] instead of ten2mk128trunc[]
+ // shift right C* by Ex-128 = shiftright128[ind]
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ // redundant shift = shiftright128[ind - 1]; // shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128[ind - 1].w[1] ||
+ (tmp64 == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0]))) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ if (fstar.w[2] > onehalf128[ind - 1] ||
+ (fstar.w[2] == onehalf128[ind - 1]
+ && (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ // if the result was a midpoint, it was already rounded away from zero
+ res.w[1] |= x_sign | 0x3040000000000000ull;
+ BID_RETURN (res);
+ } else { // if ((q + exp) < 0) <=> q < -exp
+ // the result is +0 or -0
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_DOWN:
+ if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // (number of digits to be chopped off)
+ // chop off ind digits from the lower part of C1
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP
+ // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE
+ // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE
+ // tmp64 = C1.w[0];
+ // if (ind <= 19) {
+ // C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ // } else {
+ // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ // }
+ // if (C1.w[0] < tmp64) C1.w[1]++;
+ // if carry-out from C1.w[0], increment C1.w[1]
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ // redundant fstar.w[1] = P256.w[1];
+ // redundant fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((P256.w[1] > ten2mk128[ind - 1].w[1])
+ || (P256.w[1] == ten2mk128[ind - 1].w[1]
+ && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ // if positive, the truncated value is already the correct result
+ if (x_sign) { // if negative
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ // if positive, the truncated value is already the correct result
+ if (x_sign) { // if negative
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ // if positive, the truncated value is already the correct result
+ if (x_sign) { // if negative
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0
+ if (x_sign) { // negative rounds down to -1.0
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ } else { // positive rpunds down to +0.0
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_UP:
+ if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // (number of digits to be chopped off)
+ // chop off ind digits from the lower part of C1
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP
+ // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE
+ // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE
+ // tmp64 = C1.w[0];
+ // if (ind <= 19) {
+ // C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ // } else {
+ // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ // }
+ // if (C1.w[0] < tmp64) C1.w[1]++;
+ // if carry-out from C1.w[0], increment C1.w[1]
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ // redundant fstar.w[1] = P256.w[1];
+ // redundant fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((P256.w[1] > ten2mk128[ind - 1].w[1])
+ || (P256.w[1] == ten2mk128[ind - 1].w[1]
+ && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ // if negative, the truncated value is already the correct result
+ if (!x_sign) { // if positive
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ // if negative, the truncated value is already the correct result
+ if (!x_sign) { // if positive
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ // if negative, the truncated value is already the correct result
+ if (!x_sign) { // if positive
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0
+ if (x_sign) { // negative rounds up to -0.0
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // positive rpunds up to +1.0
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+case ROUNDING_TO_ZERO:
+ if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // (number of digits to be chopped off)
+ // chop off ind digits from the lower part of C1
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP
+ // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE
+ // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE
+ //tmp64 = C1.w[0];
+ // if (ind <= 19) {
+ // C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ // } else {
+ // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ // }
+ // if (C1.w[0] < tmp64) C1.w[1]++;
+ // if carry-out from C1.w[0], increment C1.w[1]
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ // redundant fstar.w[1] = P256.w[1];
+ // redundant fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((P256.w[1] > ten2mk128[ind - 1].w[1])
+ || (P256.w[1] == ten2mk128[ind - 1].w[1]
+ && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0 the result is +0 or -0
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_round_integral_nearest_even
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND (bid128_round_integral_nearest_even, x)
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1;
+ // UINT128 res is C* at first - represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ BID_RETURN (res)
+} else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ // return +inf
+ res.w[1] = 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ // return -inf
+ res.w[1] = 0xf800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for non-canonical values (treated as zero)
+if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+} else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+}
+
+ // test for input equal to zero
+if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ // return 0 preserving the sign bit and the preferred exponent
+ // of MAX(Q(x), 0)
+ if (x_exp <= (0x1820ull << 49)) {
+ res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull;
+ } else {
+ res.w[1] = x_sign | x_exp;
+ }
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // x is not special and is not zero
+
+ // if (exp <= -(p+1)) return 0
+if (x_exp <= 0x2ffa000000000000ull) { // 0x2ffa000000000000ull == -35
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+} else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+}
+
+q = nr_digits[x_nr_bits - 1].digits;
+if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+}
+exp = (x_exp >> 49) - 6176;
+if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+} else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ // determine the value of res and fstar
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ // redundant shift = shiftright128[ind - 1]; // shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ // redundant fstar.w[1] = P256.w[1];
+ // redundant fstar.w[0] = P256.w[0];
+ // fraction f* < 10^(-x) <=> midpoint
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ // if 0 < fstar < 10^(-x), subtract 1 if odd (for rounding to even)
+ if ((res.w[0] & 0x0000000000000001ull) && // is result odd?
+ ((P256.w[1] < (ten2mk128[ind - 1].w[1]))
+ || ((P256.w[1] == ten2mk128[ind - 1].w[1])
+ && (P256.w[0] < ten2mk128[ind - 1].w[0])))) {
+ // subract 1 to make even
+ if (res.w[0]-- == 0) {
+ res.w[1]--;
+ }
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* < 10^(-x) <=> midpoint
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((res.w[0] & 0x0000000000000001ull) && // is result odd?
+ fstar.w[2] == 0 && (fstar.w[1] < ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] < ten2mk128[ind - 1].w[0]))) {
+ // subract 1 to make even
+ if (res.w[0]-- == 0) {
+ res.w[1]--;
+ }
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* < 10^(-x) <=> midpoint
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((res.w[0] & 0x0000000000000001ull) && // is result odd?
+ fstar.w[3] == 0 && fstar.w[2] == 0
+ && (fstar.w[1] < ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] < ten2mk128[ind - 1].w[0]))) {
+ // subract 1 to make even
+ if (res.w[0]-- == 0) {
+ res.w[1]--;
+ }
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+} else { // if ((q + exp) < 0) <=> q < -exp
+ // the result is +0 or -0
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+}
+
+/*****************************************************************************
+ * BID128_round_integral_negative
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND (bid128_round_integral_negative, x)
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo
+ // (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1;
+ // UINT128 res is C* at first - represents up to 34 decimal digits ~
+ // 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ BID_RETURN (res)
+} else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ // return +inf
+ res.w[1] = 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ // return -inf
+ res.w[1] = 0xf800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for non-canonical values (treated as zero)
+if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+} else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+}
+
+ // test for input equal to zero
+if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ // return 0 preserving the sign bit and the preferred exponent
+ // of MAX(Q(x), 0)
+ if (x_exp <= (0x1820ull << 49)) {
+ res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull;
+ } else {
+ res.w[1] = x_sign | x_exp;
+ }
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // x is not special and is not zero
+
+ // if (exp <= -p) return -1.0 or +0.0
+if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34
+ if (x_sign) {
+ // if negative, return negative 1, because we know the coefficient
+ // is non-zero (would have been caught above)
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ } else {
+ // if positive, return positive 0, because we know coefficient is
+ // non-zero (would have been caught above)
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+} else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+}
+
+q = nr_digits[x_nr_bits - 1].digits;
+if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+}
+exp = (x_exp >> 49) - 6176;
+if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+} else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // (number of digits to be chopped off)
+ // chop off ind digits from the lower part of C1
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP
+ // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE
+ // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE
+ //tmp64 = C1.w[0];
+ // if (ind <= 19) {
+ // C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ // } else {
+ // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ // }
+ // if (C1.w[0] < tmp64) C1.w[1]++;
+ // if carry-out from C1.w[0], increment C1.w[1]
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // if positive, the truncated value is already the correct result
+ if (x_sign) { // if negative
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ // redundant fstar.w[1] = P256.w[1];
+ // redundant fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((P256.w[1] > ten2mk128[ind - 1].w[1])
+ || (P256.w[1] == ten2mk128[ind - 1].w[1]
+ && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) {
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // if positive, the truncated value is already the correct result
+ if (x_sign) { // if negative
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ // if positive, the truncated value is already the correct result
+ if (x_sign) { // if negative
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+} else { // if exp < 0 and q + exp <= 0
+ if (x_sign) { // negative rounds down to -1.0
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ } else { // positive rpunds down to +0.0
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+
+/*****************************************************************************
+ * BID128_round_integral_positive
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND (bid128_round_integral_positive, x)
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo
+ // (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1;
+ // UINT128 res is C* at first - represents up to 34 decimal digits ~
+ // 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ BID_RETURN (res)
+} else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ // return +inf
+ res.w[1] = 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ // return -inf
+ res.w[1] = 0xf800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for non-canonical values (treated as zero)
+if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+} else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+}
+
+ // test for input equal to zero
+if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ // return 0 preserving the sign bit and the preferred exponent
+ // of MAX(Q(x), 0)
+ if (x_exp <= (0x1820ull << 49)) {
+ res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull;
+ } else {
+ res.w[1] = x_sign | x_exp;
+ }
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // x is not special and is not zero
+
+ // if (exp <= -p) return -0.0 or +1.0
+if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34
+ if (x_sign) {
+ // if negative, return negative 0, because we know the coefficient
+ // is non-zero (would have been caught above)
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else {
+ // if positive, return positive 1, because we know coefficient is
+ // non-zero (would have been caught above)
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ BID_RETURN (res);
+}
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+} else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+}
+
+q = nr_digits[x_nr_bits - 1].digits;
+if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+}
+exp = (x_exp >> 49) - 6176;
+if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+} else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // (number of digits to be chopped off)
+ // chop off ind digits from the lower part of C1
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP
+ // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE
+ // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE
+ // tmp64 = C1.w[0];
+ // if (ind <= 19) {
+ // C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ // } else {
+ // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ // }
+ // if (C1.w[0] < tmp64) C1.w[1]++;
+ // if carry-out from C1.w[0], increment C1.w[1]
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ // if negative, the truncated value is already the correct result
+ if (!x_sign) { // if positive
+ // redundant fstar.w[3] = 0;
+ // redundant fstar.w[2] = 0;
+ // redundant fstar.w[1] = P256.w[1];
+ // redundant fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if ((P256.w[1] > ten2mk128[ind - 1].w[1])
+ || (P256.w[1] == ten2mk128[ind - 1].w[1]
+ && (P256.w[0] >= ten2mk128[ind - 1].w[0]))) {
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ // if negative, the truncated value is already the correct result
+ if (!x_sign) { // if positive
+ // redundant fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[2] || fstar.w[1] > ten2mk128[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128[ind - 1].w[1] &&
+ fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ // if negative, the truncated value is already the correct result
+ if (!x_sign) { // if positive
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ // fraction f* > 10^(-x) <=> inexact
+ // f* is in the right position to be compared with
+ // 10^(-x) from ten2mk128[]
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128[ind - 1].w[0])) {
+ if (++res.w[0] == 0) {
+ res.w[1]++;
+ }
+ }
+ }
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+} else { // if exp < 0 and q + exp <= 0
+ if (x_sign) { // negative rounds up to -0.0
+ res.w[1] = 0xb040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // positive rpunds up to +1.0
+ res.w[1] = 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000001ull;
+ }
+ BID_RETURN (res);
+}
+}
+
+/*****************************************************************************
+ * BID128_round_integral_zero
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND (bid128_round_integral_zero, x)
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo
+ // (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1;
+ // UINT128 res is C* at first - represents up to 34 decimal digits ~
+ // 113 bits
+ UINT256 P256;
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ BID_RETURN (res)
+} else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ // return +inf
+ res.w[1] = 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ // return -inf
+ res.w[1] = 0xf800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for non-canonical values (treated as zero)
+if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+} else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+}
+
+ // test for input equal to zero
+if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ // return 0 preserving the sign bit and the preferred exponent
+ // of MAX(Q(x), 0)
+ if (x_exp <= (0x1820ull << 49)) {
+ res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull;
+ } else {
+ res.w[1] = x_sign | x_exp;
+ }
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // x is not special and is not zero
+
+ // if (exp <= -p) return -0.0 or +0.0
+if (x_exp <= 0x2ffc000000000000ull) { // 0x2ffc000000000000ull == -34
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+} else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+}
+
+q = nr_digits[x_nr_bits - 1].digits;
+if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+}
+exp = (x_exp >> 49) - 6176;
+if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+} else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // (number of digits to be chopped off)
+ // chop off ind digits from the lower part of C1
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ // FOR ROUND_TO_ZERO, WE DON'T NEED TO ADD 1/2 ULP
+ // FOR ROUND_TO_POSITIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF POSITIVE
+ // FOR ROUND_TO_NEGATIVE_INFINITY, WE TRUNCATE, THEN ADD 1 IF NEGATIVE
+ //tmp64 = C1.w[0];
+ // if (ind <= 19) {
+ // C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ // } else {
+ // C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ // C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ // }
+ // if (C1.w[0] < tmp64) C1.w[1]++;
+ // if carry-out from C1.w[0], increment C1.w[1]
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[1] = (P256.w[3] >> shift);
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1] - 64; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = P256.w[3] >> shift;
+ }
+ res.w[1] = x_sign | 0x3040000000000000ull | res.w[1];
+ BID_RETURN (res);
+} else { // if exp < 0 and q + exp <= 0 the result is +0 or -0
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+}
+
+/*****************************************************************************
+ * BID128_round_integral_nearest_away
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND (bid128_round_integral_nearest_away, x)
+
+ UINT128 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo
+ // (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1;
+ // UINT128 res is C* at first - represents up to 34 decimal digits ~
+ // 113 bits
+ // UINT256 fstar;
+ UINT256 P256;
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, then res = Q (x)
+ // check first for non-canonical NaN payload
+ if (((x.w[1] & 0x00003fffffffffffull) > 0x0000314dc6448d93ull) ||
+ (((x.w[1] & 0x00003fffffffffffull) == 0x0000314dc6448d93ull) &&
+ (x.w[0] > 0x38c15b09ffffffffull))) {
+ x.w[1] = x.w[1] & 0xffffc00000000000ull;
+ x.w[0] = 0x0ull;
+ }
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out also G[6]-G[16]
+ res.w[0] = x.w[0];
+ } else { // x is QNaN
+ // return x
+ res.w[1] = x.w[1] & 0xfc003fffffffffffull; // clear out G[6]-G[16]
+ res.w[0] = x.w[0];
+ }
+ BID_RETURN (res)
+} else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ // return +inf
+ res.w[1] = 0x7800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ } else { // x is -inf
+ // return -inf
+ res.w[1] = 0xf800000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for non-canonical values (treated as zero)
+if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) { // G0_G1=11
+ // non-canonical
+ x_exp = (x.w[1] << 2) & MASK_EXP; // biased and shifted left 49 bits
+ C1.w[1] = 0; // significand high
+ C1.w[0] = 0; // significand low
+} else { // G0_G1 != 11
+ x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bits
+ if (C1.w[1] > 0x0001ed09bead87c0ull ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && C1.w[0] > 0x378d8e63ffffffffull)) {
+ // x is non-canonical if coefficient is larger than 10^34 -1
+ C1.w[1] = 0;
+ C1.w[0] = 0;
+ } else { // canonical
+ ;
+ }
+}
+
+ // test for input equal to zero
+if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ // return 0 preserving the sign bit and the preferred exponent
+ // of MAX(Q(x), 0)
+ if (x_exp <= (0x1820ull << 49)) {
+ res.w[1] = (x.w[1] & 0x8000000000000000ull) | 0x3040000000000000ull;
+ } else {
+ res.w[1] = x_sign | x_exp;
+ }
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // x is not special and is not zero
+
+ // if (exp <= -(p+1)) return 0.0
+if (x_exp <= 0x2ffa000000000000ull) { // 0x2ffa000000000000ull == -35
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+} else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+}
+
+q = nr_digits[x_nr_bits - 1].digits;
+if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi ||
+ (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi &&
+ C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+}
+exp = (x_exp >> 49) - 6176;
+if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res.w[1] = x.w[1];
+ res.w[0] = x.w[0];
+ BID_RETURN (res);
+} else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 34; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 34
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res.w[1] = P256.w[3];
+ res.w[0] = P256.w[2];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res.w[0] = (P256.w[3] << (64 - shift)) | (P256.w[2] >> shift);
+ res.w[1] = (P256.w[3] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ shift = shiftright128[ind - 1]; // 2 <= shift <= 38
+ res.w[1] = 0;
+ res.w[0] = (P256.w[3] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint, it was already rounded away from zero
+ res.w[1] |= x_sign | 0x3040000000000000ull;
+ BID_RETURN (res);
+} else { // if ((q + exp) < 0) <=> q < -exp
+ // the result is +0 or -0
+ res.w[1] = x_sign | 0x3040000000000000ull;
+ res.w[0] = 0x0000000000000000ull;
+ BID_RETURN (res);
+}
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_scalb.c b/gcc-4.9/libgcc/config/libbid/bid128_scalb.c
new file mode 100644
index 000000000..eaca2d065
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_scalb.c
@@ -0,0 +1,96 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+#define DECIMAL_EXPONENT_BIAS_128 6176
+#define MAX_DECIMAL_EXPONENT_128 12287
+
+
+
+BID128_FUNCTION_ARG128_ARGTYPE2 (bid128_scalb, x, int, n)
+
+ UINT128 CX, CX2, CX8, res;
+ SINT64 exp64;
+ UINT64 sign_x;
+ int exponent_x, rmode;
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ // x is Inf. or NaN or 0
+#ifdef SET_STATUS_FLAGS
+if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+res.w[1] = CX.w[1] & QUIET_MASK64;
+res.w[0] = CX.w[0];
+if (!CX.w[1]) {
+ exp64 = (SINT64) exponent_x + (SINT64) n;
+ if(exp64<0) exp64=0;
+ if(exp64>MAX_DECIMAL_EXPONENT_128) exp64=MAX_DECIMAL_EXPONENT_128;
+ exponent_x = exp64;
+ get_BID128_very_fast (&res, sign_x, exponent_x, CX);
+}
+BID_RETURN (res);
+}
+
+exp64 = (SINT64) exponent_x + (SINT64) n;
+exponent_x = exp64;
+
+if ((UINT32) exponent_x <= MAX_DECIMAL_EXPONENT_128) {
+ get_BID128_very_fast (&res, sign_x, exponent_x, CX);
+ BID_RETURN (res);
+}
+ // check for overflow
+if (exp64 > MAX_DECIMAL_EXPONENT_128) {
+ if (CX.w[1] < 0x314dc6448d93ull) {
+ // try to normalize coefficient
+ do {
+ CX8.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61);
+ CX8.w[0] = CX.w[0] << 3;
+ CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63);
+ CX2.w[0] = CX.w[0] << 1;
+ __add_128_128 (CX, CX2, CX8);
+
+ exponent_x--;
+ exp64--;
+ }
+ while (CX.w[1] < 0x314dc6448d93ull
+ && exp64 > MAX_DECIMAL_EXPONENT_128);
+
+ }
+ if (exp64 <= MAX_DECIMAL_EXPONENT_128) {
+ get_BID128_very_fast (&res, sign_x, exponent_x, CX);
+ BID_RETURN (res);
+ } else
+ exponent_x = 0x7fffffff; // overflow
+}
+ // exponent < 0
+ // the BID pack routine will round the coefficient
+rmode = rnd_mode;
+get_BID128 (&res, sign_x, exponent_x, CX, (unsigned int *) &rmode,
+ pfpsf);
+BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_sqrt.c b/gcc-4.9/libgcc/config/libbid/bid128_sqrt.c
new file mode 100644
index 000000000..d91428cc0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_sqrt.c
@@ -0,0 +1,564 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+#include "bid_sqrt_macros.h"
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+#include <fenv.h>
+
+#define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT
+#endif
+
+BID128_FUNCTION_ARG1 (bid128_sqrt, x)
+
+ UINT256 M256, C256, C4, C8;
+ UINT128 CX, CX1, CX2, A10, S2, T128, TP128, CS, CSM, res;
+ UINT64 sign_x, Carry;
+ SINT64 D;
+ int_float fx, f64;
+ int exponent_x, bin_expon_cx;
+ int digits, scale, exponent_q;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+res.w[1] = CX.w[1];
+res.w[0] = CX.w[0];
+ // NaN ?
+if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[1] = CX.w[1] & QUIET_MASK64;
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ res.w[1] = CX.w[1];
+ if (sign_x) {
+ // -Inf, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ }
+ BID_RETURN (res);
+}
+ // x is 0 otherwise
+
+res.w[1] =
+ sign_x |
+ ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49);
+res.w[0] = 0;
+BID_RETURN (res);
+}
+if (sign_x) {
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ // 2^64
+f64.i = 0x5f800000;
+
+ // fx ~ CX
+fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+digits = estimate_decimal_digits[bin_expon_cx];
+
+A10 = CX;
+if (exponent_x & 1) {
+ A10.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61);
+ A10.w[0] = CX.w[0] << 3;
+ CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63);
+ CX2.w[0] = CX.w[0] << 1;
+ __add_128_128 (A10, A10, CX2);
+}
+
+CS.w[0] = short_sqrt128 (A10);
+CS.w[1] = 0;
+ // check for exact result
+if (CS.w[0] * CS.w[0] == A10.w[0]) {
+ __mul_64x64_to_128_fast (S2, CS.w[0], CS.w[0]);
+ if (S2.w[1] == A10.w[1]) // && S2.w[0]==A10.w[0])
+ {
+ get_BID128_very_fast (&res, 0,
+ (exponent_x +
+ DECIMAL_EXPONENT_BIAS_128) >> 1, CS);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+}
+ // get number of digits in CX
+D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+if (D > 0
+ || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0]))
+ digits++;
+
+ // if exponent is odd, scale coefficient by 10
+scale = 67 - digits;
+exponent_q = exponent_x - scale;
+scale += (exponent_q & 1); // exp. bias is even
+
+if (scale > 38) {
+ T128 = power10_table_128[scale - 37];
+ __mul_128x128_low (CX1, CX, T128);
+
+ TP128 = power10_table_128[37];
+ __mul_128x128_to_256 (C256, CX1, TP128);
+} else {
+ T128 = power10_table_128[scale];
+ __mul_128x128_to_256 (C256, CX, T128);
+}
+
+
+ // 4*C256
+C4.w[3] = (C256.w[3] << 2) | (C256.w[2] >> 62);
+C4.w[2] = (C256.w[2] << 2) | (C256.w[1] >> 62);
+C4.w[1] = (C256.w[1] << 2) | (C256.w[0] >> 62);
+C4.w[0] = C256.w[0] << 2;
+
+long_sqrt128 (&CS, C256);
+
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+if (!((rnd_mode) & 3)) {
+#endif
+#endif
+ // compare to midpoints
+ CSM.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63);
+ CSM.w[0] = (CS.w[0] + CS.w[0]) | 1;
+ // CSM^2
+ //__mul_128x128_to_256(M256, CSM, CSM);
+ __sqr128_to_256 (M256, CSM);
+
+ if (C4.w[3] > M256.w[3]
+ || (C4.w[3] == M256.w[3]
+ && (C4.w[2] > M256.w[2]
+ || (C4.w[2] == M256.w[2]
+ && (C4.w[1] > M256.w[1]
+ || (C4.w[1] == M256.w[1]
+ && C4.w[0] > M256.w[0])))))) {
+ // round up
+ CS.w[0]++;
+ if (!CS.w[0])
+ CS.w[1]++;
+ } else {
+ C8.w[1] = (CS.w[1] << 3) | (CS.w[0] >> 61);
+ C8.w[0] = CS.w[0] << 3;
+ // M256 - 8*CSM
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry);
+ __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry);
+ M256.w[3] = M256.w[3] - Carry;
+
+ // if CSM' > C256, round up
+ if (M256.w[3] > C4.w[3]
+ || (M256.w[3] == C4.w[3]
+ && (M256.w[2] > C4.w[2]
+ || (M256.w[2] == C4.w[2]
+ && (M256.w[1] > C4.w[1]
+ || (M256.w[1] == C4.w[1]
+ && M256.w[0] > C4.w[0])))))) {
+ // round down
+ if (!CS.w[0])
+ CS.w[1]--;
+ CS.w[0]--;
+ }
+ }
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+} else {
+ __sqr128_to_256 (M256, CS);
+ C8.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63);
+ C8.w[0] = CS.w[0] << 1;
+ if (M256.w[3] > C256.w[3]
+ || (M256.w[3] == C256.w[3]
+ && (M256.w[2] > C256.w[2]
+ || (M256.w[2] == C256.w[2]
+ && (M256.w[1] > C256.w[1]
+ || (M256.w[1] == C256.w[1]
+ && M256.w[0] > C256.w[0])))))) {
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry);
+ __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry);
+ M256.w[3] = M256.w[3] - Carry;
+ M256.w[0]++;
+ if (!M256.w[0]) {
+ M256.w[1]++;
+ if (!M256.w[1]) {
+ M256.w[2]++;
+ if (!M256.w[2])
+ M256.w[3]++;
+ }
+ }
+
+ if (!CS.w[0])
+ CS.w[1]--;
+ CS.w[0]--;
+
+ if (M256.w[3] > C256.w[3]
+ || (M256.w[3] == C256.w[3]
+ && (M256.w[2] > C256.w[2]
+ || (M256.w[2] == C256.w[2]
+ && (M256.w[1] > C256.w[1]
+ || (M256.w[1] == C256.w[1]
+ && M256.w[0] > C256.w[0])))))) {
+
+ if (!CS.w[0])
+ CS.w[1]--;
+ CS.w[0]--;
+ }
+ }
+
+ else {
+ __add_carry_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ __add_carry_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry);
+ __add_carry_in_out (M256.w[2], Carry, M256.w[2], 0, Carry);
+ M256.w[3] = M256.w[3] + Carry;
+ M256.w[0]++;
+ if (!M256.w[0]) {
+ M256.w[1]++;
+ if (!M256.w[1]) {
+ M256.w[2]++;
+ if (!M256.w[2])
+ M256.w[3]++;
+ }
+ }
+ if (M256.w[3] < C256.w[3]
+ || (M256.w[3] == C256.w[3]
+ && (M256.w[2] < C256.w[2]
+ || (M256.w[2] == C256.w[2]
+ && (M256.w[1] < C256.w[1]
+ || (M256.w[1] == C256.w[1]
+ && M256.w[0] <= C256.w[0])))))) {
+
+ CS.w[0]++;
+ if (!CS.w[0])
+ CS.w[1]++;
+ }
+ }
+ // RU?
+ if ((rnd_mode) == ROUNDING_UP) {
+ CS.w[0]++;
+ if (!CS.w[0])
+ CS.w[1]++;
+ }
+
+}
+#endif
+#endif
+
+#ifdef SET_STATUS_FLAGS
+__set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+get_BID128_fast (&res, 0,
+ (exponent_q + DECIMAL_EXPONENT_BIAS_128) >> 1, CS);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+}
+
+
+
+BID128_FUNCTION_ARGTYPE1 (bid128d_sqrt, UINT64, x)
+
+ UINT256 M256, C256, C4, C8;
+ UINT128 CX, CX1, CX2, A10, S2, T128, TP128, CS, CSM, res;
+ UINT64 sign_x, Carry;
+ SINT64 D;
+ int_float fx, f64;
+ int exponent_x, bin_expon_cx;
+ int digits, scale, exponent_q;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+ // unpack arguments, check for NaN or Infinity
+ // unpack arguments, check for NaN or Infinity
+CX.w[1] = 0;
+if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], x)) {
+res.w[1] = CX.w[0];
+res.w[0] = 0;
+ // NaN ?
+if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (CX.w[0] & 0x0003ffffffffffffull);
+ __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]);
+ res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull);
+ BID_RETURN (res);
+}
+ // x is Infinity?
+if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ if (sign_x) {
+ // -Inf, return NaN
+ res.w[1] = 0x7c00000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ }
+ BID_RETURN (res);
+}
+ // x is 0 otherwise
+
+exponent_x =
+ exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_128;
+res.w[1] =
+ sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1)
+ << 49);
+res.w[0] = 0;
+BID_RETURN (res);
+}
+if (sign_x) {
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+exponent_x =
+ exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_128;
+
+ // 2^64
+f64.i = 0x5f800000;
+
+ // fx ~ CX
+fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+digits = estimate_decimal_digits[bin_expon_cx];
+
+A10 = CX;
+if (exponent_x & 1) {
+ A10.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61);
+ A10.w[0] = CX.w[0] << 3;
+ CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63);
+ CX2.w[0] = CX.w[0] << 1;
+ __add_128_128 (A10, A10, CX2);
+}
+
+CS.w[0] = short_sqrt128 (A10);
+CS.w[1] = 0;
+ // check for exact result
+if (CS.w[0] * CS.w[0] == A10.w[0]) {
+ __mul_64x64_to_128_fast (S2, CS.w[0], CS.w[0]);
+ if (S2.w[1] == A10.w[1]) {
+ get_BID128_very_fast (&res, 0,
+ (exponent_x + DECIMAL_EXPONENT_BIAS_128) >> 1,
+ CS);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+}
+ // get number of digits in CX
+D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+if (D > 0
+ || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0]))
+ digits++;
+
+ // if exponent is odd, scale coefficient by 10
+scale = 67 - digits;
+exponent_q = exponent_x - scale;
+scale += (exponent_q & 1); // exp. bias is even
+
+if (scale > 38) {
+ T128 = power10_table_128[scale - 37];
+ __mul_128x128_low (CX1, CX, T128);
+
+ TP128 = power10_table_128[37];
+ __mul_128x128_to_256 (C256, CX1, TP128);
+} else {
+ T128 = power10_table_128[scale];
+ __mul_128x128_to_256 (C256, CX, T128);
+}
+
+
+ // 4*C256
+C4.w[3] = (C256.w[3] << 2) | (C256.w[2] >> 62);
+C4.w[2] = (C256.w[2] << 2) | (C256.w[1] >> 62);
+C4.w[1] = (C256.w[1] << 2) | (C256.w[0] >> 62);
+C4.w[0] = C256.w[0] << 2;
+
+long_sqrt128 (&CS, C256);
+
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+if (!((rnd_mode) & 3)) {
+#endif
+#endif
+ // compare to midpoints
+ CSM.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63);
+ CSM.w[0] = (CS.w[0] + CS.w[0]) | 1;
+ // CSM^2
+ //__mul_128x128_to_256(M256, CSM, CSM);
+ __sqr128_to_256 (M256, CSM);
+
+ if (C4.w[3] > M256.w[3]
+ || (C4.w[3] == M256.w[3]
+ && (C4.w[2] > M256.w[2]
+ || (C4.w[2] == M256.w[2]
+ && (C4.w[1] > M256.w[1]
+ || (C4.w[1] == M256.w[1]
+ && C4.w[0] > M256.w[0])))))) {
+ // round up
+ CS.w[0]++;
+ if (!CS.w[0])
+ CS.w[1]++;
+ } else {
+ C8.w[1] = (CS.w[1] << 3) | (CS.w[0] >> 61);
+ C8.w[0] = CS.w[0] << 3;
+ // M256 - 8*CSM
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry);
+ __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry);
+ M256.w[3] = M256.w[3] - Carry;
+
+ // if CSM' > C256, round up
+ if (M256.w[3] > C4.w[3]
+ || (M256.w[3] == C4.w[3]
+ && (M256.w[2] > C4.w[2]
+ || (M256.w[2] == C4.w[2]
+ && (M256.w[1] > C4.w[1]
+ || (M256.w[1] == C4.w[1]
+ && M256.w[0] > C4.w[0])))))) {
+ // round down
+ if (!CS.w[0])
+ CS.w[1]--;
+ CS.w[0]--;
+ }
+ }
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+} else {
+ __sqr128_to_256 (M256, CS);
+ C8.w[1] = (CS.w[1] << 1) | (CS.w[0] >> 63);
+ C8.w[0] = CS.w[0] << 1;
+ if (M256.w[3] > C256.w[3]
+ || (M256.w[3] == C256.w[3]
+ && (M256.w[2] > C256.w[2]
+ || (M256.w[2] == C256.w[2]
+ && (M256.w[1] > C256.w[1]
+ || (M256.w[1] == C256.w[1]
+ && M256.w[0] > C256.w[0])))))) {
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ __sub_borrow_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry);
+ __sub_borrow_in_out (M256.w[2], Carry, M256.w[2], 0, Carry);
+ M256.w[3] = M256.w[3] - Carry;
+ M256.w[0]++;
+ if (!M256.w[0]) {
+ M256.w[1]++;
+ if (!M256.w[1]) {
+ M256.w[2]++;
+ if (!M256.w[2])
+ M256.w[3]++;
+ }
+ }
+
+ if (!CS.w[0])
+ CS.w[1]--;
+ CS.w[0]--;
+
+ if (M256.w[3] > C256.w[3]
+ || (M256.w[3] == C256.w[3]
+ && (M256.w[2] > C256.w[2]
+ || (M256.w[2] == C256.w[2]
+ && (M256.w[1] > C256.w[1]
+ || (M256.w[1] == C256.w[1]
+ && M256.w[0] > C256.w[0])))))) {
+
+ if (!CS.w[0])
+ CS.w[1]--;
+ CS.w[0]--;
+ }
+ }
+
+ else {
+ __add_carry_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ __add_carry_in_out (M256.w[1], Carry, M256.w[1], C8.w[1], Carry);
+ __add_carry_in_out (M256.w[2], Carry, M256.w[2], 0, Carry);
+ M256.w[3] = M256.w[3] + Carry;
+ M256.w[0]++;
+ if (!M256.w[0]) {
+ M256.w[1]++;
+ if (!M256.w[1]) {
+ M256.w[2]++;
+ if (!M256.w[2])
+ M256.w[3]++;
+ }
+ }
+ if (M256.w[3] < C256.w[3]
+ || (M256.w[3] == C256.w[3]
+ && (M256.w[2] < C256.w[2]
+ || (M256.w[2] == C256.w[2]
+ && (M256.w[1] < C256.w[1]
+ || (M256.w[1] == C256.w[1]
+ && M256.w[0] <= C256.w[0])))))) {
+
+ CS.w[0]++;
+ if (!CS.w[0])
+ CS.w[1]++;
+ }
+ }
+ // RU?
+ if ((rnd_mode) == ROUNDING_UP) {
+ CS.w[0]++;
+ if (!CS.w[0])
+ CS.w[1]++;
+ }
+
+}
+#endif
+#endif
+
+#ifdef SET_STATUS_FLAGS
+__set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+get_BID128_fast (&res, 0, (exponent_q + DECIMAL_EXPONENT_BIAS_128) >> 1,
+ CS);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_string.c b/gcc-4.9/libgcc/config/libbid/bid128_string.c
new file mode 100644
index 000000000..68f2a3d8b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_string.c
@@ -0,0 +1,672 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID128_to_string
+ ****************************************************************************/
+
+#define BID_128RES
+#include <stdio.h>
+#include "bid_internal.h"
+#include "bid128_2_str.h"
+#include "bid128_2_str_macros.h"
+
+extern int bid128_coeff_2_string (UINT64 X_hi, UINT64 X_lo,
+ char *char_ptr);
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid128_to_string (char *str,
+ UINT128 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x;
+#else
+
+void
+bid128_to_string (char *str, UINT128 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ int ind;
+ UINT128 C1;
+ unsigned int k = 0; // pointer in the string
+ unsigned int d0, d123;
+ UINT64 HI_18Dig, LO_18Dig, Tmp;
+ UINT32 MiDi[12], *ptr;
+ char *c_ptr_start, *c_ptr;
+ int midi_ind, k_lcv, len;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ x = *px;
+#endif
+
+ BID_SWAP128(x);
+ // check for NaN or Infinity
+ if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+ if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ str[0] = ((SINT64)x.w[1]<0)? '-':'+';
+ str[1] = 'S';
+ str[2] = 'N';
+ str[3] = 'a';
+ str[4] = 'N';
+ str[5] = '\0';
+ } else { // x is QNaN
+ str[0] = ((SINT64)x.w[1]<0)? '-':'+';
+ str[1] = 'Q';
+ str[2] = 'N';
+ str[3] = 'a';
+ str[4] = 'N';
+ str[5] = '\0';
+ }
+ } else { // x is not a NaN, so it must be infinity
+ if ((x.w[1] & MASK_SIGN) == 0x0ull) { // x is +inf
+ str[0] = '+';
+ str[1] = 'I';
+ str[2] = 'n';
+ str[3] = 'f';
+ str[4] = '\0';
+ } else { // x is -inf
+ str[0] = '-';
+ str[1] = 'I';
+ str[2] = 'n';
+ str[3] = 'f';
+ str[4] = '\0';
+ }
+ }
+ return;
+ } else if (((x.w[1] & MASK_COEFF) == 0x0ull) && (x.w[0] == 0x0ull)) {
+ // x is 0
+ len = 0;
+
+ //determine if +/-
+ if (x.w[1] & MASK_SIGN)
+ str[len++] = '-';
+ else
+ str[len++] = '+';
+ str[len++] = '0';
+ str[len++] = 'E';
+
+ // extract the exponent and print
+ exp = (int) (((x.w[1] & MASK_EXP) >> 49) - 6176);
+ if(exp > (((0x5ffe)>>1) - (6176))) {
+ exp = (int) ((((x.w[1]<<2) & MASK_EXP) >> 49) - 6176);
+ }
+ if (exp >= 0) {
+ str[len++] = '+';
+ len += sprintf (str + len, "%u", exp);// should not use sprintf (should
+ // use sophisticated algorithm, since we know range of exp is limited)
+ str[len++] = '\0';
+ } else {
+ len += sprintf (str + len, "%d", exp);// should not use sprintf (should
+ // use sophisticated algorithm, since we know range of exp is limited)
+ str[len++] = '\0';
+ }
+ return;
+ } else { // x is not special and is not zero
+ // unpack x
+ x_sign = x.w[1] & MASK_SIGN;// 0 for positive, MASK_SIGN for negative
+ x_exp = x.w[1] & MASK_EXP;// biased and shifted left 49 bit positions
+ if ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)
+ x_exp = (x.w[1]<<2) & MASK_EXP;// biased and shifted left 49 bit positions
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ exp = (x_exp >> 49) - 6176;
+
+ // determine sign's representation as a char
+ if (x_sign)
+ str[k++] = '-';// negative number
+ else
+ str[k++] = '+';// positive number
+
+ // determine coefficient's representation as a decimal string
+
+ // if zero or non-canonical, set coefficient to '0'
+ if ((C1.w[1] > 0x0001ed09bead87c0ull) ||
+ (C1.w[1] == 0x0001ed09bead87c0ull &&
+ (C1.w[0] > 0x378d8e63ffffffffull)) ||
+ ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull) ||
+ ((C1.w[1] == 0) && (C1.w[0] == 0))) {
+ str[k++] = '0';
+ } else {
+ /* ****************************************************
+ This takes a bid coefficient in C1.w[1],C1.w[0]
+ and put the converted character sequence at location
+ starting at &(str[k]). The function returns the number
+ of MiDi returned. Note that the character sequence
+ does not have leading zeros EXCEPT when the input is of
+ zero value. It will then output 1 character '0'
+ The algorithm essentailly tries first to get a sequence of
+ Millenial Digits "MiDi" and then uses table lookup to get the
+ character strings of these MiDis.
+ **************************************************** */
+ /* Algorithm first decompose possibly 34 digits in hi and lo
+ 18 digits. (The high can have at most 16 digits). It then
+ uses macro that handle 18 digit portions.
+ The first step is to get hi and lo such that
+ 2^(64) C1.w[1] + C1.w[0] = hi * 10^18 + lo, 0 <= lo < 10^18.
+ We use a table lookup method to obtain the hi and lo 18 digits.
+ [C1.w[1],C1.w[0]] = c_8 2^(107) + c_7 2^(101) + ... + c_0 2^(59) + d
+ where 0 <= d < 2^59 and each c_j has 6 bits. Because d fits in
+ 18 digits, we set hi = 0, and lo = d to begin with.
+ We then retrieve from a table, for j = 0, 1, ..., 8
+ that gives us A and B where c_j 2^(59+6j) = A * 10^18 + B.
+ hi += A ; lo += B; After each accumulation into lo, we normalize
+ immediately. So at the end, we have the decomposition as we need. */
+
+ Tmp = C1.w[0] >> 59;
+ LO_18Dig = (C1.w[0] << 5) >> 5;
+ Tmp += (C1.w[1] << 5);
+ HI_18Dig = 0;
+ k_lcv = 0;
+ // Tmp = {C1.w[1]{49:0}, C1.w[0]{63:59}}
+ // Lo_18Dig = {C1.w[0]{58:0}}
+
+ while (Tmp) {
+ midi_ind = (int) (Tmp & 0x000000000000003FLL);
+ midi_ind <<= 1;
+ Tmp >>= 6;
+ HI_18Dig += mod10_18_tbl[k_lcv][midi_ind++];
+ LO_18Dig += mod10_18_tbl[k_lcv++][midi_ind];
+ __L0_Normalize_10to18 (HI_18Dig, LO_18Dig);
+ }
+ ptr = MiDi;
+ if (HI_18Dig == 0LL) {
+ __L1_Split_MiDi_6_Lead (LO_18Dig, ptr);
+ } else {
+ __L1_Split_MiDi_6_Lead (HI_18Dig, ptr);
+ __L1_Split_MiDi_6 (LO_18Dig, ptr);
+ }
+ len = ptr - MiDi;
+ c_ptr_start = &(str[k]);
+ c_ptr = c_ptr_start;
+
+ /* now convert the MiDi into character strings */
+ __L0_MiDi2Str_Lead (MiDi[0], c_ptr);
+ for (k_lcv = 1; k_lcv < len; k_lcv++) {
+ __L0_MiDi2Str (MiDi[k_lcv], c_ptr);
+ }
+ k = k + (c_ptr - c_ptr_start);
+ }
+
+ // print E and sign of exponent
+ str[k++] = 'E';
+ if (exp < 0) {
+ exp = -exp;
+ str[k++] = '-';
+ } else {
+ str[k++] = '+';
+ }
+
+ // determine exponent's representation as a decimal string
+ // d0 = exp / 1000;
+ // Use Property 1
+ d0 = (exp * 0x418a) >> 24;// 0x418a * 2^-24 = (10^(-3))RP,15
+ d123 = exp - 1000 * d0;
+
+ if (d0) { // 1000 <= exp <= 6144 => 4 digits to return
+ str[k++] = d0 + 0x30;// ASCII for decimal digit d0
+ ind = 3 * d123;
+ str[k++] = char_table3[ind];
+ str[k++] = char_table3[ind + 1];
+ str[k++] = char_table3[ind + 2];
+ } else { // 0 <= exp <= 999 => d0 = 0
+ if (d123 < 10) { // 0 <= exp <= 9 => 1 digit to return
+ str[k++] = d123 + 0x30;// ASCII
+ } else if (d123 < 100) { // 10 <= exp <= 99 => 2 digits to return
+ ind = 2 * (d123 - 10);
+ str[k++] = char_table2[ind];
+ str[k++] = char_table2[ind + 1];
+ } else { // 100 <= exp <= 999 => 3 digits to return
+ ind = 3 * d123;
+ str[k++] = char_table3[ind];
+ str[k++] = char_table3[ind + 1];
+ str[k++] = char_table3[ind + 2];
+ }
+ }
+ str[k] = '\0';
+
+ }
+ return;
+
+}
+
+
+#define MAX_FORMAT_DIGITS_128 34
+#define MAX_STRING_DIGITS_128 100
+#define MAX_SEARCH MAX_STRING_DIGITS_128-MAX_FORMAT_DIGITS_128-1
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid128_from_string (UINT128 * pres,
+ char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#else
+
+UINT128
+bid128_from_string (char *ps _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CX, res;
+ UINT64 sign_x, coeff_high, coeff_low, coeff2, coeff_l2, carry = 0x0ull,
+ scale_high, right_radix_leading_zeros;
+ int ndigits_before, ndigits_after, ndigits_total, dec_expon, sgn_exp,
+ i, d2, rdx_pt_enc;
+ char c, buffer[MAX_STRING_DIGITS_128];
+ int save_rnd_mode;
+ int save_fpsf;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ save_rnd_mode = rnd_mode; // dummy
+ save_fpsf = *pfpsf; // dummy
+
+ right_radix_leading_zeros = rdx_pt_enc = 0;
+
+ // if null string, return NaN
+ if (!ps) {
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // eliminate leading white space
+ while ((*ps == ' ') || (*ps == '\t'))
+ ps++;
+
+ // c gets first character
+ c = *ps;
+
+
+ // if c is null or not equal to a (radix point, negative sign,
+ // positive sign, or number) it might be SNaN, sNaN, Infinity
+ if (!c
+ || (c != '.' && c != '-' && c != '+'
+ && ((unsigned) (c - '0') > 9))) {
+ res.w[0] = 0;
+ // Infinity?
+ if ((tolower_macro (ps[0]) == 'i' && tolower_macro (ps[1]) == 'n'
+ && tolower_macro (ps[2]) == 'f')
+ && (!ps[3]
+ || (tolower_macro (ps[3]) == 'i'
+ && tolower_macro (ps[4]) == 'n'
+ && tolower_macro (ps[5]) == 'i'
+ && tolower_macro (ps[6]) == 't'
+ && tolower_macro (ps[7]) == 'y' && !ps[8])
+ )) {
+ res.w[1] = 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // return sNaN
+ if (tolower_macro (ps[0]) == 's' && tolower_macro (ps[1]) == 'n' &&
+ tolower_macro (ps[2]) == 'a' && tolower_macro (ps[3]) == 'n') {
+ // case insensitive check for snan
+ res.w[1] = 0x7e00000000000000ull;
+ BID_RETURN (res);
+ } else {
+ // return qNaN
+ res.w[1] = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // if +Inf, -Inf, +Infinity, or -Infinity (case insensitive check for inf)
+ if ((tolower_macro (ps[1]) == 'i' && tolower_macro (ps[2]) == 'n' &&
+ tolower_macro (ps[3]) == 'f') && (!ps[4] ||
+ (tolower_macro (ps[4]) == 'i' && tolower_macro (ps[5]) == 'n' &&
+ tolower_macro (ps[6]) == 'i' && tolower_macro (ps[7]) == 't' &&
+ tolower_macro (ps[8]) == 'y' && !ps[9]))) { // ci check for infinity
+ res.w[0] = 0;
+
+ if (c == '+')
+ res.w[1] = 0x7800000000000000ull;
+ else if (c == '-')
+ res.w[1] = 0xf800000000000000ull;
+ else
+ res.w[1] = 0x7c00000000000000ull;
+
+ BID_RETURN (res);
+ }
+ // if +sNaN, +SNaN, -sNaN, or -SNaN
+ if (tolower_macro (ps[1]) == 's' && tolower_macro (ps[2]) == 'n'
+ && tolower_macro (ps[3]) == 'a' && tolower_macro (ps[4]) == 'n') {
+ res.w[0] = 0;
+ if (c == '-')
+ res.w[1] = 0xfe00000000000000ull;
+ else
+ res.w[1] = 0x7e00000000000000ull;
+ BID_RETURN (res);
+ }
+ // set up sign_x to be OR'ed with the upper word later
+ if (c == '-')
+ sign_x = 0x8000000000000000ull;
+ else
+ sign_x = 0;
+
+ // go to next character if leading sign
+ if (c == '-' || c == '+')
+ ps++;
+
+ c = *ps;
+
+ // if c isn't a decimal point or a decimal digit, return NaN
+ if (c != '.' && ((unsigned) (c - '0') > 9)) {
+ res.w[1] = 0x7c00000000000000ull | sign_x;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ // detect zero (and eliminate/ignore leading zeros)
+ if (*(ps) == '0') {
+
+ // if all numbers are zeros (with possibly 1 radix point, the number is zero
+ // should catch cases such as: 000.0
+ while (*ps == '0') {
+
+ ps++;
+
+ // for numbers such as 0.0000000000000000000000000000000000001001,
+ // we want to count the leading zeros
+ if (rdx_pt_enc) {
+ right_radix_leading_zeros++;
+ }
+ // if this character is a radix point, make sure we haven't already
+ // encountered one
+ if (*(ps) == '.') {
+ if (rdx_pt_enc == 0) {
+ rdx_pt_enc = 1;
+ // if this is the first radix point, and the next character is NULL,
+ // we have a zero
+ if (!*(ps + 1)) {
+ res.w[1] =
+ (0x3040000000000000ull -
+ (right_radix_leading_zeros << 49)) | sign_x;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ ps = ps + 1;
+ } else {
+ // if 2 radix points, return NaN
+ res.w[1] = 0x7c00000000000000ull | sign_x;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ } else if (!*(ps)) {
+ //res.w[1] = 0x3040000000000000ull | sign_x;
+ res.w[1] =
+ (0x3040000000000000ull -
+ (right_radix_leading_zeros << 49)) | sign_x;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ }
+ }
+
+ c = *ps;
+
+ // initialize local variables
+ ndigits_before = ndigits_after = ndigits_total = 0;
+ sgn_exp = 0;
+ // pstart_coefficient = ps;
+
+ if (!rdx_pt_enc) {
+ // investigate string (before radix point)
+ while ((unsigned) (c - '0') <= 9
+ && ndigits_before < MAX_STRING_DIGITS_128) {
+ buffer[ndigits_before] = c;
+ ps++;
+ c = *ps;
+ ndigits_before++;
+ }
+
+ ndigits_total = ndigits_before;
+ if (c == '.') {
+ ps++;
+ if ((c = *ps)) {
+
+ // investigate string (after radix point)
+ while ((unsigned) (c - '0') <= 9
+ && ndigits_total < MAX_STRING_DIGITS_128) {
+ buffer[ndigits_total] = c;
+ ps++;
+ c = *ps;
+ ndigits_total++;
+ }
+ ndigits_after = ndigits_total - ndigits_before;
+ }
+ }
+ } else {
+ // we encountered a radix point while detecting zeros
+ //if (c = *ps){
+
+ c = *ps;
+ ndigits_total = 0;
+ // investigate string (after radix point)
+ while ((unsigned) (c - '0') <= 9
+ && ndigits_total < MAX_STRING_DIGITS_128) {
+ buffer[ndigits_total] = c;
+ ps++;
+ c = *ps;
+ ndigits_total++;
+ }
+ ndigits_after = ndigits_total - ndigits_before;
+ }
+
+ // get exponent
+ dec_expon = 0;
+ if (ndigits_total < MAX_STRING_DIGITS_128) {
+ if (c) {
+ if (c != 'e' && c != 'E') {
+ // return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+ ps++;
+ c = *ps;
+
+ if (((unsigned) (c - '0') > 9)
+ && ((c != '+' && c != '-') || (unsigned) (ps[1] - '0') > 9)) {
+ // return NaN
+ res.w[1] = 0x7c00000000000000ull;
+ res.w[0] = 0;
+ BID_RETURN (res);
+ }
+
+ if (c == '-') {
+ sgn_exp = -1;
+ ps++;
+ c = *ps;
+ } else if (c == '+') {
+ ps++;
+ c = *ps;
+ }
+
+ dec_expon = c - '0';
+ i = 1;
+ ps++;
+ c = *ps - '0';
+ while (((unsigned) c) <= 9 && i < 7) {
+ d2 = dec_expon + dec_expon;
+ dec_expon = (d2 << 2) + d2 + c;
+ ps++;
+ c = *ps - '0';
+ i++;
+ }
+ }
+
+ dec_expon = (dec_expon + sgn_exp) ^ sgn_exp;
+ }
+
+
+ if (ndigits_total <= MAX_FORMAT_DIGITS_128) {
+ dec_expon +=
+ DECIMAL_EXPONENT_BIAS_128 - ndigits_after -
+ right_radix_leading_zeros;
+ if (dec_expon < 0) {
+ res.w[1] = 0 | sign_x;
+ res.w[0] = 0;
+ }
+ if (ndigits_total == 0) {
+ CX.w[0] = 0;
+ CX.w[1] = 0;
+ } else if (ndigits_total <= 19) {
+ coeff_high = buffer[0] - '0';
+ for (i = 1; i < ndigits_total; i++) {
+ coeff2 = coeff_high + coeff_high;
+ coeff_high = (coeff2 << 2) + coeff2 + buffer[i] - '0';
+ }
+ CX.w[0] = coeff_high;
+ CX.w[1] = 0;
+ } else {
+ coeff_high = buffer[0] - '0';
+ for (i = 1; i < ndigits_total - 17; i++) {
+ coeff2 = coeff_high + coeff_high;
+ coeff_high = (coeff2 << 2) + coeff2 + buffer[i] - '0';
+ }
+ coeff_low = buffer[i] - '0';
+ i++;
+ for (; i < ndigits_total; i++) {
+ coeff_l2 = coeff_low + coeff_low;
+ coeff_low = (coeff_l2 << 2) + coeff_l2 + buffer[i] - '0';
+ }
+ // now form the coefficient as coeff_high*10^19+coeff_low+carry
+ scale_high = 100000000000000000ull;
+ __mul_64x64_to_128_fast (CX, coeff_high, scale_high);
+
+ CX.w[0] += coeff_low;
+ if (CX.w[0] < coeff_low)
+ CX.w[1]++;
+ }
+ get_BID128 (&res, sign_x, dec_expon, CX,&rnd_mode,pfpsf);
+ BID_RETURN (res);
+ } else {
+ // simply round using the digits that were read
+
+ dec_expon +=
+ ndigits_before + DECIMAL_EXPONENT_BIAS_128 -
+ MAX_FORMAT_DIGITS_128 - right_radix_leading_zeros;
+
+ if (dec_expon < 0) {
+ res.w[1] = 0 | sign_x;
+ res.w[0] = 0;
+ }
+
+ coeff_high = buffer[0] - '0';
+ for (i = 1; i < MAX_FORMAT_DIGITS_128 - 17; i++) {
+ coeff2 = coeff_high + coeff_high;
+ coeff_high = (coeff2 << 2) + coeff2 + buffer[i] - '0';
+ }
+ coeff_low = buffer[i] - '0';
+ i++;
+ for (; i < MAX_FORMAT_DIGITS_128; i++) {
+ coeff_l2 = coeff_low + coeff_low;
+ coeff_low = (coeff_l2 << 2) + coeff_l2 + buffer[i] - '0';
+ }
+ switch(rnd_mode) {
+ case ROUNDING_TO_NEAREST:
+ carry = ((unsigned) ('4' - buffer[i])) >> 31;
+ if ((buffer[i] == '5' && !(coeff_low & 1)) || dec_expon < 0) {
+ if (dec_expon >= 0) {
+ carry = 0;
+ i++;
+ }
+ for (; i < ndigits_total; i++) {
+ if (buffer[i] > '0') {
+ carry = 1;
+ break;
+ }
+ }
+ }
+ break;
+
+ case ROUNDING_DOWN:
+ if(sign_x)
+ for (; i < ndigits_total; i++) {
+ if (buffer[i] > '0') {
+ carry = 1;
+ break;
+ }
+ }
+ break;
+ case ROUNDING_UP:
+ if(!sign_x)
+ for (; i < ndigits_total; i++) {
+ if (buffer[i] > '0') {
+ carry = 1;
+ break;
+ }
+ }
+ break;
+ case ROUNDING_TO_ZERO:
+ carry=0;
+ break;
+ case ROUNDING_TIES_AWAY:
+ carry = ((unsigned) ('4' - buffer[i])) >> 31;
+ if (dec_expon < 0) {
+ for (; i < ndigits_total; i++) {
+ if (buffer[i] > '0') {
+ carry = 1;
+ break;
+ }
+ }
+ }
+ break;
+
+
+ }
+ // now form the coefficient as coeff_high*10^17+coeff_low+carry
+ scale_high = 100000000000000000ull;
+ if (dec_expon < 0) {
+ if (dec_expon > -MAX_FORMAT_DIGITS_128) {
+ scale_high = 1000000000000000000ull;
+ coeff_low = (coeff_low << 3) + (coeff_low << 1);
+ dec_expon--;
+ }
+ if (dec_expon == -MAX_FORMAT_DIGITS_128
+ && coeff_high > 50000000000000000ull)
+ carry = 0;
+ }
+
+ __mul_64x64_to_128_fast (CX, coeff_high, scale_high);
+
+ coeff_low += carry;
+ CX.w[0] += coeff_low;
+ if (CX.w[0] < coeff_low)
+ CX.w[1]++;
+
+
+ get_BID128(&res, sign_x, dec_expon, CX, &rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_int16.c b/gcc-4.9/libgcc/config/libbid/bid128_to_int16.c
new file mode 100644
index 000000000..51735f78c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_int16.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffff8000
+#define INVALID_RESULT 0x8000
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_rnint, UINT128, x,
+ bid128_to_int32_rnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xrnint, UINT128,
+ x, bid128_to_int32_xrnint, int,
+ SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_rninta, UINT128,
+ x, bid128_to_int32_rninta, int,
+ SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xrninta, UINT128,
+ x, bid128_to_int32_xrninta, int,
+ SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_int, UINT128, x,
+ bid128_to_int32_int, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xint, UINT128, x,
+ bid128_to_int32_xint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_floor, UINT128, x,
+ bid128_to_int32_floor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_ceil, UINT128, x,
+ bid128_to_int32_ceil, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xfloor, UINT128,
+ x, bid128_to_int32_xfloor, int,
+ SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid128_to_int16_xceil, UINT128, x,
+ bid128_to_int32_xceil, int, SIZE_MASK,
+ INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_int32.c b/gcc-4.9/libgcc/config/libbid/bid128_to_int32.c
new file mode 100644
index 000000000..9eeb7ebaf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_int32.c
@@ -0,0 +1,3659 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128_to_int32_rnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_rnint, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005 <=>
+ // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1/2 up)
+ tmp64 = 0x500000005ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31-1/2 up)
+ tmp64 = 0x4fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_xrnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xrnint,
+ x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005 <=>
+ // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1/2 up)
+ tmp64 = 0x500000005ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31-1/2 up)
+ tmp64 = 0x4fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_floor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_floor, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_lt_midpoint = 0;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+ int is_midpoint_gt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000 <=>
+ // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31 up)
+ tmp64 = 0x500000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31 up)
+ tmp64 = 0x500000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 <= n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // return 0
+ if (x_sign)
+ res = 0xffffffff;
+ else
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31 <= x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // toward negative infinity to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (x_sign && (is_midpoint_gt_even || is_inexact_lt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] + 1;
+ } else if (!x_sign
+ && (is_midpoint_lt_even || is_inexact_gt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // the result is already correct
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+
+/*****************************************************************************
+ * BID128_to_int32_xfloor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xfloor,
+ x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_lt_midpoint = 0;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+ int is_midpoint_gt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000 <=>
+ // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31 up)
+ tmp64 = 0x500000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31 up)
+ tmp64 = 0x500000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 <= n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ if (x_sign)
+ res = 0xffffffff;
+ else
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31 <= x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // toward negative infinity to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (x_sign && (is_midpoint_gt_even || is_inexact_lt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] + 1;
+ } else if (!x_sign
+ && (is_midpoint_lt_even || is_inexact_gt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // the result is already correct
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_ceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_ceil, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_lt_midpoint = 0;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+ int is_midpoint_gt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31-1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1 up)
+ tmp64 = 0x50000000aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x4fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6 <=>
+ // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31 up)
+ tmp64 = 0x4fffffff6ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31-1 < n <= 2^31-1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // return 0
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded
+ // toward positive infinity to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (x_sign && (is_midpoint_lt_even || is_inexact_gt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else if (!x_sign
+ && (is_midpoint_gt_even || is_inexact_lt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] + 1;
+ } else {
+ ; // the result is already correct
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_xceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xceil, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_lt_midpoint = 0;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+ int is_midpoint_gt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31-1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1 up)
+ tmp64 = 0x50000000aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x4fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6 <=>
+ // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31 up)
+ tmp64 = 0x4fffffff6ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31-1 < n <= 2^31-1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded
+ // toward positive infinity to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (x_sign && (is_midpoint_lt_even || is_inexact_gt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else if (!x_sign
+ && (is_midpoint_gt_even || is_inexact_lt_midpoint)) {
+ Cstar.w[0] = Cstar.w[0] + 1;
+ } else {
+ ; // the result is already correct
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_int
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_int, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1 up)
+ tmp64 = 0x50000000aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31-1/2 up)
+ tmp64 = 0x500000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // toward zero to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0]))) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0) &&
+ (fstar.w[1] || fstar.w[0]) &&
+ (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] &&
+ fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RZ
+ if (is_midpoint_lt_even || is_inexact_gt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // exact, the result is already correct
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_xint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xint, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1 up)
+ tmp64 = 0x50000000aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31-1/2 up)
+ tmp64 = 0x500000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // toward zero to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] && (fstar.w[2] ||
+ fstar.w[1]
+ || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RZ
+ if (is_midpoint_lt_even || is_inexact_gt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // exact, the result is already correct
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_rninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_rninta,
+ x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005 <=>
+ // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1/2 up)
+ tmp64 = 0x500000005ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31-1/2 up)
+ tmp64 = 0x4fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1/2 < x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest-away to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint, it was already rounded away from zero
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ // no need to check for midpoints - already rounded away from zero!
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int32_xrninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (int, bid128_to_int32_xrninta,
+ x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005 <=>
+ // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31+1/2 up)
+ tmp64 = 0x500000005ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^31-1/2 up)
+ tmp64 = 0x4fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^31-1/2 < x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest-away to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint, it was already rounded away from zero
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull || (fstar.w[1] == 0x8000000000000000ull && fstar.w[0] > 0x0ull)) { // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0]))) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2] ||
+ fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ // no need to check for midpoints - already rounded away from zero!
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_int64.c b/gcc-4.9/libgcc/config/libbid/bid128_to_int64.c
new file mode 100644
index 000000000..17a186f5a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_int64.c
@@ -0,0 +1,2994 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128_to_int64_rnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_rnint,
+ x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull) ||
+ (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0000000000000005ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ }
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0) &&
+ (fstar.w[1] || fstar.w[0]) &&
+ (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] &&
+ fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_xrnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64,
+ bid128_to_int64_xrnint, x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0000000000000005ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0) &&
+ (fstar.w[1] || fstar.w[0]) &&
+ (fstar.w[1] < ten2mk128trunc[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] &&
+ fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_floor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_floor,
+ x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 10*2^63, 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return -1 or 0
+ if (x_sign)
+ res = 0xffffffffffffffffull;
+ else
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // toward zero to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result is negative and inexact, need to add 1 to it
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] &&
+ fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_xfloor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64,
+ bid128_to_int64_xfloor, x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 10*2^63, 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return -1 or 0
+ if (x_sign)
+ res = 0xffffffffffffffffull;
+ else
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // toward zero to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result is negative and inexact, need to add 1 to it
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] &&
+ fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_ceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_ceil,
+ x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+2), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x5000000000000000a, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x000000000000000aull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n > 2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 10*(2^63-1), 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=34
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffff6ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1 < n <= 2^63 - 1
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0 or 1
+ if (x_sign)
+ res = 0x0000000000000000ull;
+ else
+ res = 0x0000000000000001ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded
+ // up to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result is positive and inexact, need to add 1 to it
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_xceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xceil,
+ x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+2), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x5000000000000000a, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x000000000000000aull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n > 2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 10*(2^63-1), 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=34
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffff6ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1 < n <= 2^63 - 1
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0 or 1
+ if (x_sign)
+ res = 0x0000000000000000ull;
+ else
+ res = 0x0000000000000001ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded
+ // up to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result is positive and inexact, need to add 1 to it
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_int
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_int,
+ x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x000000000000000aull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // toward zero to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_xint64_xint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64, bid128_to_int64_xint,
+ x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x000000000000000aull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // toward zero to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_rninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64,
+ bid128_to_int64_rninta, x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0000000000000005ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ }
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_int64_xrninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (SINT64,
+ bid128_to_int64_xrninta, x)
+
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=34
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=34
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0000000000000005ull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=34
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=34
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ if (q <= 19) { // 1 <= q <= 19 => 1 <= 20-q <= 19 =>
+ // 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C1, C1.w[0], ten2k64[20 - q]);
+ } else if (q == 20) {
+ ; // C1 * 10^0 = C1
+ } else { // if 21 <= q <= 34
+ __mul_128x64_to_128 (C, ten2k64[q - 20], C); // max 47-bit x 67-bit
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ }
+ }
+ // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ // Restore C1 which may have been modified above
+ C1.w[1] = x.w[1] & MASK_COEFF;
+ C1.w[0] = x.w[0];
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 34, -33 <= exp <= 18)
+ // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ if (x_sign)
+ res = -Cstar.w[0];
+ else
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 19
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1.w[0];
+ else
+ res = C1.w[0];
+ } else { // if (exp>0) => 1 <= exp <= 18, 1 <= q < 18, 2 <= q + exp <= 19
+ // res = +/-C * 10^exp (exact) where this fits in 64-bit integer
+ if (x_sign)
+ res = -C1.w[0] * ten2k64[exp];
+ else
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_int8.c b/gcc-4.9/libgcc/config/libbid/bid128_to_int8.c
new file mode 100644
index 000000000..1b186a2de
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_int8.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffffff80
+#define INVALID_RESULT 0x80
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_rnint, UINT128, x,
+ bid128_to_int32_rnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xrnint, UINT128, x,
+ bid128_to_int32_xrnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_rninta, UINT128, x,
+ bid128_to_int32_rninta, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xrninta, UINT128, x,
+ bid128_to_int32_xrninta, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_int, UINT128, x,
+ bid128_to_int32_int, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xint, UINT128, x,
+ bid128_to_int32_xint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_floor, UINT128, x,
+ bid128_to_int32_floor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_ceil, UINT128, x,
+ bid128_to_int32_ceil, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xfloor, UINT128, x,
+ bid128_to_int32_xfloor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid128_to_int8_xceil, UINT128, x,
+ bid128_to_int32_xceil, int, SIZE_MASK,
+ INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_uint16.c b/gcc-4.9/libgcc/config/libbid/bid128_to_uint16.c
new file mode 100644
index 000000000..5547dbc2f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_uint16.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffff0000
+#define INVALID_RESULT 0x8000
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_rnint,
+ UINT128, x, bid128_to_uint32_rnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xrnint,
+ UINT128, x, bid128_to_uint32_xrnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_rninta,
+ UINT128, x, bid128_to_uint32_rninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short,
+ bid128_to_uint16_xrninta, UINT128, x,
+ bid128_to_uint32_xrninta, unsigned int,
+ SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_int,
+ UINT128, x, bid128_to_uint32_int,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xint,
+ UINT128, x, bid128_to_uint32_xint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_floor,
+ UINT128, x, bid128_to_uint32_floor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_ceil,
+ UINT128, x, bid128_to_uint32_ceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xfloor,
+ UINT128, x, bid128_to_uint32_xfloor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid128_to_uint16_xceil,
+ UINT128, x, bid128_to_uint32_xceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_uint32.c b/gcc-4.9/libgcc/config/libbid/bid128_to_uint32.c
new file mode 100644
index 000000000..d654bc919
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_uint32.c
@@ -0,0 +1,3588 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128_to_uint32_rnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_rnint, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -1/2 then n cannot be converted to uint32 with RN
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x05, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x05 <=>
+ // C > 0x05 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1/2 up)
+ tmp64 = 0x05ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32-1/2 up)
+ tmp64 = 0x9fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -1/2 <= n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32-1/2 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_xrnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_xrnint, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ unsigned int tmp_inexact = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -1/2 then n cannot be converted to uint32 with RN
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x05, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x05 <=>
+ // C > 0x05 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1/2 up)
+ tmp64 = 0x05ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32-1/2 up)
+ tmp64 = 0x9fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -1/2 <= n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32-1/2 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar.w[0]; // the result is positive
+ if (tmp_inexact)
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_floor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_floor, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+ // x < 0 is invalid
+ if (x_sign) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // x > 0 from this point on
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ // n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32 up)
+ tmp64 = 0xa00000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ // n is not too large to be converted to int32: 0 <= n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +0.0...c(0)c(1)...c(q-1) or n = +0.c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // 1 <= x < 2^32 so x can be rounded down to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (is_midpoint_lt_even || is_inexact_gt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // the result is already correct
+ }
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_xfloor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_xfloor, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+ // x < 0 is invalid
+ if (x_sign) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // x > 0 from this point on
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ // n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32 up)
+ tmp64 = 0xa00000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ // n is not too large to be converted to int32: 0 <= n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +0.0...c(0)c(1)...c(q-1) or n = +0.c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // 1 <= x < 2^32 so x can be rounded down to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (is_midpoint_lt_even || is_inexact_gt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // the result is already correct
+ }
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_ceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_ceil, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_lt_midpoint = 0;
+ int is_midpoint_gt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=>
+ // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1 up)
+ tmp64 = 0x0aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^32 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x9fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6 <=>
+ // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32 up)
+ tmp64 = 0x9fffffff6ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^32-1 < n <= 2^32-1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // return 0
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^32-1 < x <= -1 or 1 <= x <= 2^32-1 so x can be rounded
+ // toward positive infinity to a 32-bit signed integer
+ if (x_sign) { // x <= -1 is invalid
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // x > 0 from this point on
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ ;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ ;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_inexact_lt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (is_midpoint_gt_even || is_inexact_lt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] + 1;
+ } else {
+ ; // the result is already correct
+ }
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_xceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_xceil, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_lt_midpoint = 0;
+ int is_midpoint_gt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x50000000a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=>
+ // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1 up)
+ tmp64 = 0x0aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^32 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x9fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6 <=>
+ // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32 up)
+ tmp64 = 0x9fffffff6ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^32-1 < n <= 2^32-1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // -2^32-1 < x <= -1 or 1 <= x <= 2^32-1 so x can be rounded
+ // toward positive infinity to a 32-bit signed integer
+ if (x_sign) { // x <= -1 is invalid
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // x > 0 from this point on
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_midpoint_gt_even = 1;
+ is_inexact_lt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_inexact_lt_midpoint = 0;
+ }
+ }
+ // general correction for RM
+ if (is_midpoint_gt_even || is_inexact_lt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] + 1;
+ } else {
+ ; // the result is already correct
+ }
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_int
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_int, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit uint fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=>
+ // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1 up)
+ tmp64 = 0x0aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit uint fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32 up)
+ tmp64 = 0xa00000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to uint32: -2^32 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // x = d(0)...d(k).d(k+1)..., k >= 0, d(0) != 0
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // x > 0 from this point on
+ // 1 <= x < 2^32 so x can be rounded to zero to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RZ
+ if (is_midpoint_lt_even || is_inexact_gt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // exact, the result is already correct
+ }
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_xint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_xint, x)
+
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ int is_inexact_gt_midpoint = 0;
+ int is_midpoint_lt_even = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit uint fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x0a <=>
+ // C >= 0x0a * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1 up)
+ tmp64 = 0x0aull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit uint fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32 up)
+ tmp64 = 0xa00000000ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to uint32: -2^32 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) {
+ // n = +/-0.0...c(0)c(1)...c(q-1) or n = +/-0.c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ // x = d(0)...d(k).d(k+1)..., k >= 0, d(0) != 0
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // x > 0 from this point on
+ // 1 <= x < 2^32 so x can be rounded to zero to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ is_inexact_gt_midpoint = 1;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ is_midpoint_lt_even = 1;
+ is_inexact_gt_midpoint = 0;
+ }
+ }
+ // general correction for RZ
+ if (is_midpoint_lt_even || is_inexact_gt_midpoint) {
+ Cstar.w[0] = Cstar.w[0] - 1;
+ } else {
+ ; // exact, the result is already correct
+ }
+ res = Cstar.w[0];
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_rninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_rninta, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05 <=>
+ // C >= 0x05 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1/2 up)
+ tmp64 = 0x05ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32-1/2 up)
+ tmp64 = 0x9fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -1/2 < n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest-away to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint, it was already rounded away from zero
+ res = Cstar.w[0]; // always positive
+ // no need to check for midpoints - already rounded away from zero!
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint32_xrninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (unsigned int,
+ bid128_to_uint32_xrninta, x)
+
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+ unsigned int tmp_inexact = 0;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x00000000;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x05 <=>
+ // C >= 0x05 * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 1/2 up)
+ tmp64 = 0x05ull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // too large if 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=34
+ if (q <= 11) {
+ tmp64 = C1.w[0] * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 34 and so -24 <= exp <= -2
+ // 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 23
+ // (scale 2^32-1/2 up)
+ tmp64 = 0x9fffffffbull;
+ if (q - 11 <= 19) { // 1 <= q - 11 <= 19; 10^(q-11) requires 64 bits
+ __mul_64x64_to_128MACH (C, tmp64, ten2k64[q - 11]);
+ } else { // 20 <= q - 11 <= 23, and 10^(q-11) requires 128 bits
+ __mul_128x64_to_128 (C, tmp64, ten2k128[q - 31]);
+ }
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -1/2 < n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x00000000; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x80000000;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 34, -33 <= exp <= 9)
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest-away to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint, it was already rounded away from zero
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ // *pfpsf |= INEXACT_EXCEPTION;
+ tmp_inexact = 1;
+ }
+ }
+ // no need to check for midpoints - already rounded away from zero!
+ res = Cstar.w[0]; // the result is positive
+ if (tmp_inexact)
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1.w[0];
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_uint64.c b/gcc-4.9/libgcc/config/libbid/bid128_to_uint64.c
new file mode 100644
index 000000000..f723c31b2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_uint64.c
@@ -0,0 +1,3401 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID128_to_uint64_rnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_rnint, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n < -1/2 then n cannot be converted to uint64 with RN
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 > 0x05, 1<=q<=34
+ // <=> C * 10^(21-q) > 0x05, 1<=q<=34
+ if (q == 21) {
+ // C > 5
+ if (C1.w[1] != 0 || C1.w[0] > 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) > 5 is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C > 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0x9fffffffffffffffb
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff
+ C.w[0] = C1.w[0] + C1.w[0];
+ C.w[1] = C1.w[1] + C1.w[1];
+ if (C.w[0] < C1.w[0])
+ C.w[1]++;
+ if (C.w[1] > 0x01 || (C.w[1] == 0x01
+ && C.w[0] >= 0xffffffffffffffffull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0x9fffffffffffffffb
+ if (C1.w[1] > 0x09 || (C1.w[1] == 0x09
+ && C1.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits
+ C.w[1] = 0x09;
+ C.w[0] = 0xfffffffffffffffbull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_xrnint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_xrnint, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n < -1/2 then n cannot be converted to uint64 with RN
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 > 0x05, 1<=q<=34
+ // <=> C * 10^(21-q) > 0x05, 1<=q<=34
+ if (q == 21) {
+ // C > 5
+ if (C1.w[1] != 0 || C1.w[0] > 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) > 5 is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C > 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0x9fffffffffffffffb
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff
+ C.w[0] = C1.w[0] + C1.w[0];
+ C.w[1] = C1.w[1] + C1.w[1];
+ if (C.w[0] < C1.w[0])
+ C.w[1]++;
+ if (C.w[1] > 0x01 || (C.w[1] == 0x01
+ && C.w[0] >= 0xffffffffffffffffull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0x9fffffffffffffffb
+ if (C1.w[1] > 0x09 || (C1.w[1] == 0x09
+ && C1.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits
+ C.w[1] = 0x09;
+ C.w[0] = 0xfffffffffffffffbull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] <= midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] <= midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[3] == 0) && (fstar.w[2] == 0)
+ && (fstar.w[1] || fstar.w[0])
+ && (fstar.w[1] < ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] <= ten2mk128trunc[ind - 1].w[0]))) {
+ // the result is a midpoint; round to nearest
+ if (Cstar.w[0] & 0x01) { // Cstar.w[0] is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar.w[0]--; // Cstar.w[0] is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_floor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_floor, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // if n < 0 then n cannot be converted to uint64 with RM
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 0
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ // if n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0xa0000000000000000
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C >= 0x10000000000000000
+ if (C1.w[1] >= 0x01) {
+ // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0xa0000000000000000
+ if (C1.w[1] >= 0x0a) {
+ // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits
+ C.w[1] = 0x0a;
+ C.w[0] = 0x0000000000000000ull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ // n is not too large to be converted to int64 if 0 <= n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // 1 <= x < 2^64 so x can be rounded
+ // down to a 64-bit unsigned signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_xfloor
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_xfloor, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // if n < 0 then n cannot be converted to uint64 with RM
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) > 0
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ // if n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0xa0000000000000000
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C >= 0x10000000000000000
+ if (C1.w[1] >= 0x01) {
+ // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0xa0000000000000000
+ if (C1.w[1] >= 0x0a) {
+ // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits
+ C.w[1] = 0x0a;
+ C.w[0] = 0x0000000000000000ull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ // n is not too large to be converted to int64 if 0 <= n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // 1 <= x < 2^64 so x can be rounded
+ // down to a 64-bit unsigned signed integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1] ||
+ (fstar.w[1] == ten2mk128trunc[ind - 1].w[1] &&
+ fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_ceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_ceil,
+ x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n <= -1 then n cannot be converted to uint64 with RZ
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34
+ // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34
+ if (q == 21) {
+ // C >= a
+ if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n > 2^64 - 1 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 > 10 * (2^64 - 1)
+ // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 > 0x9fffffffffffffff6
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) > 0x9fffffffffffffff6
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C > 0xffffffffffffffff
+ if (C1.w[1]) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C > 0x9fffffffffffffff6
+ if (C1.w[1] > 0x09 || (C1.w[1] == 0x09
+ && C1.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C > 10^(q-21) * 0x9fffffffffffffff6 max 44 bits x 68 bits
+ C.w[1] = 0x09;
+ C.w[0] = 0xfffffffffffffff6ull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n <= 2^64 - 1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0 or 1
+ if (x_sign)
+ res = 0x0000000000000000ull;
+ else
+ res = 0x0000000000000001ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded
+ // to zero to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x <= 2^64 - 1 so x can be rounded
+ // to zero to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result is positive and inexact, need to add 1 to it
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ } // else the result is exact
+ }
+
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_xceil
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_xceil, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n <= -1 then n cannot be converted to uint64 with RZ
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34
+ // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34
+ if (q == 21) {
+ // C >= a
+ if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n > 2^64 - 1 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 > 10 * (2^64 - 1)
+ // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 > 0x9fffffffffffffff6
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) > 0x9fffffffffffffff6
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C > 0xffffffffffffffff
+ if (C1.w[1]) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C > 0x9fffffffffffffff6
+ if (C1.w[1] > 0x09 || (C1.w[1] == 0x09
+ && C1.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C > 10^(q-21) * 0x9fffffffffffffff6 max 44 bits x 68 bits
+ C.w[1] = 0x09;
+ C.w[0] = 0xfffffffffffffff6ull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1] || (C1.w[1] == C.w[1] && C1.w[0] > C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n <= 2^64 - 1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0 or 1
+ if (x_sign)
+ res = 0x0000000000000000ull;
+ else
+ res = 0x0000000000000001ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded
+ // to zero to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x <= 2^64 - 1 so x can be rounded
+ // to zero to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // if the result is positive and inexact, need to add 1 to it
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ if (!x_sign) { // positive and inexact
+ Cstar.w[0]++;
+ if (Cstar.w[0] == 0x0)
+ Cstar.w[1]++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_int
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_int,
+ x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n <= -1 then n cannot be converted to uint64 with RZ
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34
+ // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34
+ if (q == 21) {
+ // C >= a
+ if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0xa0000000000000000
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C >= 0x10000000000000000
+ if (C1.w[1] >= 0x01) {
+ // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0xa0000000000000000
+ if (C1.w[1] >= 0x0a) {
+ // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits
+ C.w[1] = 0x0a;
+ C.w[0] = 0x0000000000000000ull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded
+ // to zero to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64 so x can be rounded
+ // to zero to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_xint
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64, bid128_to_uint64_xint,
+ x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n <= -1 then n cannot be converted to uint64 with RZ
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x0a, 1<=q<=34
+ // <=> C * 10^(21-q) >= 0x0a, 1<=q<=34
+ if (q == 21) {
+ // C >= a
+ if (C1.w[1] != 0 || C1.w[0] >= 0x0aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) >= a is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= a * 10^(q-21) is true because C > 2^64 and a*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*2^65
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0xa0000000000000000
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C >= 0x10000000000000000
+ if (C1.w[1] >= 0x01) {
+ // actually C1.w[1] == 0x01 && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0xa0000000000000000
+ if (C1.w[1] >= 0x0a) {
+ // actually C1.w[1] == 0x0a && C1.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0xa0000000000000000 max 44 bits x 68 bits
+ C.w[1] = 0x0a;
+ C.w[0] = 0x0000000000000000ull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded
+ // to zero to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64 so x can be rounded
+ // to zero to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[2] || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_rninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_rninta, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n <= -1/2 then n cannot be converted to uint64 with RN
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x05, 1<=q<=34
+ // <=> C * 10^(21-q) >= 0x05, 1<=q<=34
+ if (q == 21) {
+ // C >= 5
+ if (C1.w[1] != 0 || C1.w[0] >= 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) >= 5 is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0x9fffffffffffffffb
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff
+ C.w[0] = C1.w[0] + C1.w[0];
+ C.w[1] = C1.w[1] + C1.w[1];
+ if (C.w[0] < C1.w[0])
+ C.w[1]++;
+ if (C.w[1] > 0x01 || (C.w[1] == 0x01
+ && C.w[0] >= 0xffffffffffffffffull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0x9fffffffffffffffb
+ if (C1.w[1] > 0x09 || (C1.w[1] == 0x09
+ && C1.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits
+ C.w[1] = 0x09;
+ C.w[0] = 0xfffffffffffffffbull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 < n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID128_to_uint64_xrninta
+ ****************************************************************************/
+
+BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE (UINT64,
+ bid128_to_uint64_xrninta, x)
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ UINT64 tmp64, tmp64A;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT128 C1, C;
+ UINT128 Cstar; // C* represents up to 34 decimal digits ~ 113 bits
+ UINT256 fstar;
+ UINT256 P256;
+
+ // unpack x
+x_sign = x.w[1] & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+x_exp = x.w[1] & MASK_EXP; // biased and shifted left 49 bit positions
+C1.w[1] = x.w[1] & MASK_COEFF;
+C1.w[0] = x.w[0];
+
+ // check for NaN or Infinity
+if ((x.w[1] & MASK_SPECIAL) == MASK_SPECIAL) {
+ // x is special
+if ((x.w[1] & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x.w[1] & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is QNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+} else { // x is not a NaN, so it must be infinity
+ if (!x_sign) { // x is +inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ } else { // x is -inf
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ }
+ BID_RETURN (res);
+}
+}
+ // check for non-canonical values (after the check for special values)
+if ((C1.w[1] > 0x0001ed09bead87c0ull)
+ || (C1.w[1] == 0x0001ed09bead87c0ull
+ && (C1.w[0] > 0x378d8e63ffffffffull))
+ || ((x.w[1] & 0x6000000000000000ull) == 0x6000000000000000ull)) {
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else if ((C1.w[1] == 0x0ull) && (C1.w[0] == 0x0ull)) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+} else { // x is not special and is not zero
+
+ // q = nr. of decimal digits in x
+ // determine first the nr. of bits in x
+ if (C1.w[1] == 0) {
+ if (C1.w[0] >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1.w[0] >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1.w[0] >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) (C1.w[0]); // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1.w[0]; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // C1.w[1] != 0 => nr. bits = 64 + nr_bits (C1.w[1])
+ tmp1.d = (double) C1.w[1]; // exact conversion
+ x_nr_bits =
+ 65 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1.w[1] > nr_digits[x_nr_bits - 1].threshold_hi
+ || (C1.w[1] == nr_digits[x_nr_bits - 1].threshold_hi
+ && C1.w[0] >= nr_digits[x_nr_bits - 1].threshold_lo))
+ q++;
+ }
+ exp = (x_exp >> 49) - 6176;
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20
+ // if n <= -1/2 then n cannot be converted to uint64 with RN
+ // too large if c(0)c(1)...c(19).c(20)...c(q-1) >= 1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^21 >= 0x05, 1<=q<=34
+ // <=> C * 10^(21-q) >= 0x05, 1<=q<=34
+ if (q == 21) {
+ // C >= 5
+ if (C1.w[1] != 0 || C1.w[0] >= 0x05ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to 64-bit unsigned int fall through
+ // to '1 <= q + exp <= 20'
+ } else {
+ // if 1 <= q <= 20
+ // C * 10^(21-q) >= 5 is true because C >= 1 and 10^(21-q) >= 10
+ // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 5 * 10^(q-21) is true because C > 2^64 and 5*10^(q-21) < 2^64
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=34
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1.w[0], ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q <= 19) {
+ // C * 10^(21-q) >= 0x9fffffffffffffffb
+ __mul_64x64_to_128MACH (C, C1.w[0], ten2k64[21 - q]);
+ if (C.w[1] > 0x09 || (C.w[1] == 0x09
+ && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 20) {
+ // C * 10 >= 0x9fffffffffffffffb <=> C * 2 > 1ffffffffffffffff
+ C.w[0] = C1.w[0] + C1.w[0];
+ C.w[1] = C1.w[1] + C1.w[1];
+ if (C.w[0] < C1.w[0])
+ C.w[1]++;
+ if (C.w[1] > 0x01 || (C.w[1] == 0x01
+ && C.w[0] >= 0xffffffffffffffffull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else if (q == 21) {
+ // C >= 0x9fffffffffffffffb
+ if (C1.w[1] > 0x09 || (C1.w[1] == 0x09
+ && C1.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if 22 <= q <= 34 => 1 <= q - 21 <= 13
+ // C >= 10^(q-21) * 0x9fffffffffffffffb max 44 bits x 68 bits
+ C.w[1] = 0x09;
+ C.w[0] = 0xfffffffffffffffbull;
+ __mul_128x64_to_128 (C, ten2k64[q - 21], C);
+ if (C1.w[1] > C.w[1]
+ || (C1.w[1] == C.w[1] && C1.w[0] >= C.w[0])) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 < n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (ind <= 18) { // 0 <= ind <= 18
+ if ((C1.w[1] == 0) && (C1.w[0] < midpoint64[ind])) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x8000000000000000ull;
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ } else { // 19 <= ind <= 33
+ if ((C1.w[1] < midpoint128[ind - 19].w[1])
+ || ((C1.w[1] == midpoint128[ind - 19].w[1])
+ && (C1.w[0] < midpoint128[ind - 19].w[0]))) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x00000001; // return +1
+ } else {
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 34, -33 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 34, -33 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 33; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 127 bits
+ tmp64 = C1.w[0];
+ if (ind <= 19) {
+ C1.w[0] = C1.w[0] + midpoint64[ind - 1];
+ } else {
+ C1.w[0] = C1.w[0] + midpoint128[ind - 20].w[0];
+ C1.w[1] = C1.w[1] + midpoint128[ind - 20].w[1];
+ }
+ if (C1.w[0] < tmp64)
+ C1.w[1]++;
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 33
+ // kx = 10^(-x) = ten2mk128[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 118 bits
+ __mul_128x128_to_256 (P256, C1, ten2mk128[ind - 1]);
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[1] = P256.w[3];
+ Cstar.w[0] = P256.w[2];
+ fstar.w[3] = 0;
+ fstar.w[2] = P256.w[2] & maskhigh128[ind - 1];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[1] = 0;
+ Cstar.w[0] = P256.w[3];
+ fstar.w[3] = P256.w[3] & maskhigh128[ind - 1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[1] = P256.w[1];
+ fstar.w[0] = P256.w[0];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind], e.g.
+ // if x=1, T*=ten2mk128trunc[0]=0x19999999999999999999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-128 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 102
+ if (ind - 1 <= 21) { // 0 <= ind - 1 <= 21
+ Cstar.w[0] =
+ (Cstar.w[0] >> shift) | (Cstar.w[1] << (64 - shift));
+ // redundant, it will be 0! Cstar.w[1] = (Cstar.w[1] >> shift);
+ } else { // 22 <= ind - 1 <= 33
+ Cstar.w[0] = (Cstar.w[0] >> (shift - 64)); // 2 <= shift - 64 <= 38
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[1] > 0x8000000000000000ull ||
+ (fstar.w[1] == 0x8000000000000000ull
+ && fstar.w[0] > 0x0ull)) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[1] - 0x8000000000000000ull; // f* - 1/2
+ if (tmp64 > ten2mk128trunc[ind - 1].w[1]
+ || (tmp64 == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] >= ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else if (ind - 1 <= 21) { // if 3 <= ind <= 21
+ if (fstar.w[3] > 0x0 ||
+ (fstar.w[3] == 0x0 && fstar.w[2] > onehalf128[ind - 1]) ||
+ (fstar.w[3] == 0x0 && fstar.w[2] == onehalf128[ind - 1] &&
+ (fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[2] - onehalf128[ind - 1];
+ tmp64A = fstar.w[3];
+ if (tmp64 > fstar.w[2])
+ tmp64A--;
+ if (tmp64A || tmp64
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 22 <= ind <= 33
+ if (fstar.w[3] > onehalf128[ind - 1] ||
+ (fstar.w[3] == onehalf128[ind - 1] &&
+ (fstar.w[2] || fstar.w[1] || fstar.w[0]))) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[3] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[2]
+ || fstar.w[1] > ten2mk128trunc[ind - 1].w[1]
+ || (fstar.w[1] == ten2mk128trunc[ind - 1].w[1]
+ && fstar.w[0] > ten2mk128trunc[ind - 1].w[0])) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ res = Cstar.w[0]; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 20, but x < 2^64 - 1/2 so in this case C1.w[1] has to be 0
+ // res = C (exact)
+ res = C1.w[0];
+ } else {
+ // if (exp > 0) => 1 <= exp <= 19, 1 <= q < 19, 2 <= q + exp <= 20
+ // res = C * 10^exp (exact) - must fit in 64 bits
+ res = C1.w[0] * ten2k64[exp];
+ }
+ }
+}
+
+BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid128_to_uint8.c b/gcc-4.9/libgcc/config/libbid/bid128_to_uint8.c
new file mode 100644
index 000000000..1d39956de
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid128_to_uint8.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffffff00
+#define INVALID_RESULT 0x80
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_rnint,
+ UINT128, x, bid128_to_uint32_rnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xrnint,
+ UINT128, x, bid128_to_uint32_xrnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_rninta,
+ UINT128, x, bid128_to_uint32_rninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xrninta,
+ UINT128, x, bid128_to_uint32_xrninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_int,
+ UINT128, x, bid128_to_uint32_int,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xint,
+ UINT128, x, bid128_to_uint32_xint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_floor,
+ UINT128, x, bid128_to_uint32_floor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_ceil,
+ UINT128, x, bid128_to_uint32_ceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xfloor,
+ UINT128, x, bid128_to_uint32_xfloor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid128_to_uint8_xceil,
+ UINT128, x, bid128_to_uint32_xceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid32_to_bid128.c b/gcc-4.9/libgcc/config/libbid/bid32_to_bid128.c
new file mode 100644
index 000000000..1df387019
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid32_to_bid128.c
@@ -0,0 +1,264 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+/*
+ * Takes a BID32 as input and converts it to a BID128 and returns it.
+ */
+TYPE0_FUNCTION_ARGTYPE1_NORND (UINT128, bid32_to_bid128, UINT32, x)
+
+ UINT128 new_coeff, res;
+ UINT32 sign_x;
+ int exponent_x;
+ UINT32 coefficient_x;
+
+if (!unpack_BID32 (&sign_x, &exponent_x, &coefficient_x, x)) {
+if (((x) & 0x78000000) == 0x78000000) {
+#ifdef SET_STATUS_FLAGS
+ if (((x) & 0x7e000000) == 0x7e000000) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (coefficient_x & 0x000fffff);
+ __mul_64x128_low (res, res.w[0], power10_table_128[27]);
+ res.w[1] |=
+ ((((UINT64) coefficient_x) << 32) & 0xfc00000000000000ull);
+
+ BID_RETURN (res);
+}
+}
+
+new_coeff.w[0] = coefficient_x;
+new_coeff.w[1] = 0;
+get_BID128_very_fast (&res, ((UINT64) sign_x) << 32,
+ exponent_x + DECIMAL_EXPONENT_BIAS_128 -
+ DECIMAL_EXPONENT_BIAS_32, new_coeff);
+BID_RETURN (res);
+} // convert_bid32_to_bid128
+
+
+/*
+ * Takes a BID128 as input and converts it to a BID32 and returns it.
+ */
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid128_to_bid32 (UINT32 * pres,
+ UINT128 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+
+UINT32
+bid128_to_bid32 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CX, T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1, CX1;
+ UINT64 sign_x, carry, cy;
+ SINT64 D;
+ UINT32 res;
+ int_float f64, fx;
+ int exponent_x, extra_digits, amount, bin_expon_cx, uf_check = 0;
+ unsigned rmode, status;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ BID_SWAP128 (x);
+ // unpack arguments, check for NaN or Infinity or 0
+ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ if (((x.w[1]) & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CX.w[0];
+ TP128 = reciprocals10_128[27];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[27] - 64;
+ res = ((CX.w[1] >> 32) & 0xfc000000) | (Qh.w[1] >> amount);
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN_VAL (res);
+ }
+ // x is 0
+ exponent_x =
+ exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS_32;
+ if (exponent_x < 0)
+ exponent_x = 0;
+ if (exponent_x > DECIMAL_MAX_EXPON_32)
+ exponent_x = DECIMAL_MAX_EXPON_32;
+ res = (sign_x >> 32) | (exponent_x << 23);
+ BID_RETURN_VAL (res);
+
+ }
+
+ if (CX.w[1] || (CX.w[0] >= 10000000)) {
+ // find number of digits in coefficient
+ // 2^64
+ f64.i = 0x5f800000;
+ // fx ~ CX
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+ extra_digits = estimate_decimal_digits[bin_expon_cx] - 7;
+ // scale = 38-estimate_decimal_digits[bin_expon_cx];
+ D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+ if (D > 0
+ || (!D
+ && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0]))
+ extra_digits++;
+
+ exponent_x += extra_digits;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ if (exponent_x <
+ DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32) {
+ uf_check = 1;
+ if (-extra_digits + exponent_x - DECIMAL_EXPONENT_BIAS_128 +
+ DECIMAL_EXPONENT_BIAS_32 + 35 >= 0) {
+ if (exponent_x ==
+ DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32 - 1) {
+ T128 = round_const_table_128[rmode][extra_digits];
+ __add_carry_out (CX1.w[0], carry, T128.w[0], CX.w[0]);
+ CX1.w[1] = CX.w[1] + T128.w[1] + carry;
+ if (__unsigned_compare_ge_128
+ (CX1, power10_table_128[extra_digits + 7]))
+ uf_check = 0;
+ }
+ extra_digits =
+ extra_digits + DECIMAL_EXPONENT_BIAS_128 -
+ DECIMAL_EXPONENT_BIAS_32 - exponent_x;
+ exponent_x =
+ DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS_32;
+ } else
+ rmode = ROUNDING_TO_ZERO;
+ }
+
+ T128 = round_const_table_128[rmode][extra_digits];
+ __add_carry_out (CX.w[0], carry, T128.w[0], CX.w[0]);
+ CX.w[1] = CX.w[1] + T128.w[1] + carry;
+
+ TP128 = reciprocals10_128[extra_digits];
+ __mul_128x128_full (Qh, Ql, CX, TP128);
+ amount = recip_scale[extra_digits];
+
+ if (amount >= 64) {
+ CX.w[0] = Qh.w[1] >> (amount - 64);
+ CX.w[1] = 0;
+ } else {
+ __shr_128 (CX, Qh, amount);
+ }
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (!(rnd_mode))
+#endif
+ if (CX.w[0] & 1) {
+ // check whether fractional part of initial_P/10^ed1 is exactly .5
+
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ if (!Qh1.w[1] && !Qh1.w[0]
+ && (Ql.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Ql.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) {
+ CX.w[0]--;
+ }
+ }
+#endif
+
+
+ {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Ql.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Ql.w[0] < reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if ((!Qh1.w[1]) && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Ql.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Ql.w[0] < reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], cy, Ql.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Ql.w[1],
+ reciprocals10_128[extra_digits].w[1], cy);
+ __shr_128_long (Qh, Qh1, (128 - amount));
+ Tmp.w[0] = 1;
+ Tmp.w[1] = 0;
+ __shl_128_long (Tmp1, Tmp, amount);
+ Qh.w[0] += carry;
+ if (Qh.w[0] < carry)
+ Qh.w[1]++;
+ if (__unsigned_compare_ge_128 (Qh, Tmp1))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS) {
+ if (uf_check) {
+ status |= UNDERFLOW_EXCEPTION;
+ }
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, status);
+#endif
+ }
+ }
+
+ }
+
+ res =
+ get_BID32 ((UINT32) (sign_x >> 32),
+ exponent_x - DECIMAL_EXPONENT_BIAS_128 +
+ DECIMAL_EXPONENT_BIAS_32, CX.w[0], rnd_mode, pfpsf);
+ BID_RETURN_VAL (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid32_to_bid64.c b/gcc-4.9/libgcc/config/libbid/bid32_to_bid64.c
new file mode 100644
index 000000000..99eb22799
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid32_to_bid64.c
@@ -0,0 +1,216 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*
+ * Takes a BID32 as input and converts it to a BID64 and returns it.
+ */
+TYPE0_FUNCTION_ARGTYPE1_NORND (UINT64, bid32_to_bid64, UINT32, x)
+
+ UINT64 res;
+ UINT32 sign_x;
+ int exponent_x;
+ UINT32 coefficient_x;
+
+if (!unpack_BID32 (&sign_x, &exponent_x, &coefficient_x, x)) {
+ // Inf, NaN, 0
+if (((x) & 0x78000000) == 0x78000000) {
+ if (((x) & 0x7e000000) == 0x7e000000) { // sNaN
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ }
+ res = (coefficient_x & 0x000fffff);
+ res *= 1000000000;
+ res |= ((((UINT64) coefficient_x) << 32) & 0xfc00000000000000ull);
+
+ BID_RETURN (res);
+}
+}
+
+res =
+very_fast_get_BID64_small_mantissa (((UINT64) sign_x) << 32,
+ exponent_x +
+ DECIMAL_EXPONENT_BIAS -
+ DECIMAL_EXPONENT_BIAS_32,
+ (UINT64) coefficient_x);
+BID_RETURN (res);
+} // convert_bid32_to_bid64
+
+
+/*
+ * Takes a BID64 as input and converts it to a BID32 and returns it.
+ */
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_to_bid32 (UINT32 * pres,
+ UINT64 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x;
+#else
+
+UINT32
+bid64_to_bid32 (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 Q;
+ UINT64 sign_x, coefficient_x, remainder_h, carry, Stemp;
+ UINT32 res;
+ int_float tempx;
+ int exponent_x, bin_expon_cx, extra_digits, rmode = 0, amount;
+ unsigned status = 0;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+#endif
+
+ // unpack arguments, check for NaN or Infinity, 0
+ if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) {
+ if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ res = (coefficient_x & 0x0003ffffffffffffull);
+ res /= 1000000000ull;
+ res |= ((coefficient_x >> 32) & 0xfc000000);
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res);
+ }
+ exponent_x =
+ exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_32;
+ if (exponent_x < 0)
+ exponent_x = 0;
+ if (exponent_x > DECIMAL_MAX_EXPON_32)
+ exponent_x = DECIMAL_MAX_EXPON_32;
+ res = (sign_x >> 32) | (exponent_x << 23);
+ BID_RETURN (res);
+ }
+
+ exponent_x =
+ exponent_x - DECIMAL_EXPONENT_BIAS + DECIMAL_EXPONENT_BIAS_32;
+
+ // check number of digits
+ if (coefficient_x >= 10000000) {
+ tempx.d = (float) coefficient_x;
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f;
+ extra_digits = estimate_decimal_digits[bin_expon_cx] - 7;
+ // add test for range
+ if (coefficient_x >= power10_index_binexp[bin_expon_cx])
+ extra_digits++;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+
+ exponent_x += extra_digits;
+ if ((exponent_x < 0) && (exponent_x + MAX_FORMAT_DIGITS_32 >= 0)) {
+ status = UNDERFLOW_EXCEPTION;
+ if (exponent_x == -1)
+ if (coefficient_x + round_const_table[rmode][extra_digits] >=
+ power10_table_128[extra_digits + 7].w[0])
+ status = 0;
+ extra_digits -= exponent_x;
+ exponent_x = 0;
+ }
+ coefficient_x += round_const_table[rmode][extra_digits];
+ __mul_64x64_to_128 (Q, coefficient_x,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+
+ coefficient_x = Q.w[1] >> amount;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (coefficient_x & 1) {
+ // check whether fractional part of initial_P/10^extra_digits
+ // is exactly .5
+
+ // get remainder
+ remainder_h = Q.w[1] << (64 - amount);
+
+ if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits]))
+ coefficient_x--;
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ {
+ status |= INEXACT_EXCEPTION;
+ // get remainder
+ remainder_h = Q.w[1] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp, carry, Q.w[0],
+ reciprocals10_64[extra_digits]);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (pfpsf, status);
+ }
+
+#endif
+
+ }
+
+ res =
+ get_BID32 ((UINT32) (sign_x >> 32),
+ exponent_x, coefficient_x, rnd_mode, pfpsf);
+ BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_add.c b/gcc-4.9/libgcc/config/libbid/bid64_add.c
new file mode 100644
index 000000000..0340119fd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_add.c
@@ -0,0 +1,595 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID64 add
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * if(exponent_a < exponent_b)
+ * switch a, b
+ * diff_expon = exponent_a - exponent_b
+ * if(diff_expon > 16)
+ * return normalize(a)
+ * if(coefficient_a*10^diff_expon guaranteed below 2^62)
+ * S = sign_a*coefficient_a*10^diff_expon + sign_b*coefficient_b
+ * if(|S|<10^16)
+ * return get_BID64(sign(S),exponent_b,|S|)
+ * else
+ * determine number of extra digits in S (1, 2, or 3)
+ * return rounded result
+ * else // large exponent difference
+ * if(number_digits(coefficient_a*10^diff_expon) +/- 10^16)
+ * guaranteed the same as
+ * number_digits(coefficient_a*10^diff_expon) )
+ * S = normalize(coefficient_a + (sign_a^sign_b)*10^(16-diff_expon))
+ * corr = 10^16 + (sign_a^sign_b)*coefficient_b
+ * corr*10^exponent_b is rounded so it aligns with S*10^exponent_S
+ * return get_BID64(sign_a,exponent(S),S+rounded(corr))
+ * else
+ * add sign_a*coefficient_a*10^diff_expon, sign_b*coefficient_b
+ * in 128-bit integer arithmetic, then round to 16 decimal digits
+ *
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+
+#if DECIMAL_CALL_BY_REFERENCE
+void bid64_add (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+#else
+UINT64 bid64_add (UINT64 x,
+ UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_sub (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 y = *py;
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ // check if y is not NaN
+ if (((y & NAN_MASK64) != NAN_MASK64))
+ y ^= 0x8000000000000000ull;
+ bid64_add (pres, px,
+ &y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+}
+#else
+
+UINT64
+bid64_sub (UINT64 x,
+ UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ // check if y is not NaN
+ if (((y & NAN_MASK64) != NAN_MASK64))
+ y ^= 0x8000000000000000ull;
+
+ return bid64_add (x,
+ y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+}
+#endif
+
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_add (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x, y;
+#else
+
+UINT64
+bid64_add (UINT64 x,
+ UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 CA, CT, CT_new;
+ UINT64 sign_x, sign_y, coefficient_x, coefficient_y, C64_new;
+ UINT64 valid_x, valid_y;
+ UINT64 res;
+ UINT64 sign_a, sign_b, coefficient_a, coefficient_b, sign_s, sign_ab,
+ rem_a;
+ UINT64 saved_ca, saved_cb, C0_64, C64, remainder_h, T1, carry, tmp;
+ int_double tempx;
+ int exponent_x, exponent_y, exponent_a, exponent_b, diff_dec_expon;
+ int bin_expon_ca, extra_digits, amount, scale_k, scale_ca;
+ unsigned rmode, status;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+ y = *py;
+#endif
+
+ valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x);
+ valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y);
+
+ // unpack arguments, check for NaN or Infinity
+ if (!valid_x) {
+ // x is Inf. or NaN
+
+ // test if x is NaN
+ if ((x & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if (((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ || ((y & SNAN_MASK64) == SNAN_MASK64))
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = coefficient_x & QUIET_MASK64;
+ BID_RETURN (res);
+ }
+ // x is Infinity?
+ if ((x & INFINITY_MASK64) == INFINITY_MASK64) {
+ // check if y is Inf
+ if (((y & NAN_MASK64) == INFINITY_MASK64)) {
+ if (sign_x == (y & 0x8000000000000000ull)) {
+ res = coefficient_x;
+ BID_RETURN (res);
+ }
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = NAN_MASK64;
+ BID_RETURN (res);
+ }
+ }
+ // check if y is NaN
+ if (((y & NAN_MASK64) == NAN_MASK64)) {
+ res = coefficient_y & QUIET_MASK64;
+#ifdef SET_STATUS_FLAGS
+ if (((y & SNAN_MASK64) == SNAN_MASK64))
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res);
+ }
+ // otherwise return +/-Inf
+ {
+ res = coefficient_x;
+ BID_RETURN (res);
+ }
+ }
+ // x is 0
+ {
+ if (((y & INFINITY_MASK64) != INFINITY_MASK64) && coefficient_y) {
+ if (exponent_y <= exponent_x) {
+ res = y;
+ BID_RETURN (res);
+ }
+ }
+ }
+
+ }
+ if (!valid_y) {
+ // y is Inf. or NaN?
+ if (((y & INFINITY_MASK64) == INFINITY_MASK64)) {
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = coefficient_y & QUIET_MASK64;
+ BID_RETURN (res);
+ }
+ // y is 0
+ if (!coefficient_x) { // x==0
+ if (exponent_x <= exponent_y)
+ res = ((UINT64) exponent_x) << 53;
+ else
+ res = ((UINT64) exponent_y) << 53;
+ if (sign_x == sign_y)
+ res |= sign_x;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rnd_mode == ROUNDING_DOWN && sign_x != sign_y)
+ res |= 0x8000000000000000ull;
+#endif
+#endif
+ BID_RETURN (res);
+ } else if (exponent_y >= exponent_x) {
+ res = x;
+ BID_RETURN (res);
+ }
+ }
+ // sort arguments by exponent
+ if (exponent_x < exponent_y) {
+ sign_a = sign_y;
+ exponent_a = exponent_y;
+ coefficient_a = coefficient_y;
+ sign_b = sign_x;
+ exponent_b = exponent_x;
+ coefficient_b = coefficient_x;
+ } else {
+ sign_a = sign_x;
+ exponent_a = exponent_x;
+ coefficient_a = coefficient_x;
+ sign_b = sign_y;
+ exponent_b = exponent_y;
+ coefficient_b = coefficient_y;
+ }
+
+ // exponent difference
+ diff_dec_expon = exponent_a - exponent_b;
+
+ /* get binary coefficients of x and y */
+
+ //--- get number of bits in the coefficients of x and y ---
+
+ // version 2 (original)
+ tempx.d = (double) coefficient_a;
+ bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+
+ if (diff_dec_expon > MAX_FORMAT_DIGITS) {
+ // normalize a to a 16-digit coefficient
+
+ scale_ca = estimate_decimal_digits[bin_expon_ca];
+ if (coefficient_a >= power10_table_128[scale_ca].w[0])
+ scale_ca++;
+
+ scale_k = 16 - scale_ca;
+
+ coefficient_a *= power10_table_128[scale_k].w[0];
+
+ diff_dec_expon -= scale_k;
+ exponent_a -= scale_k;
+
+ /* get binary coefficients of x and y */
+
+ //--- get number of bits in the coefficients of x and y ---
+ tempx.d = (double) coefficient_a;
+ bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+
+ if (diff_dec_expon > MAX_FORMAT_DIGITS) {
+#ifdef SET_STATUS_FLAGS
+ if (coefficient_b) {
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (((rnd_mode) & 3) && coefficient_b) // not ROUNDING_TO_NEAREST
+ {
+ switch (rnd_mode) {
+ case ROUNDING_DOWN:
+ if (sign_b) {
+ coefficient_a -= ((((SINT64) sign_a) >> 63) | 1);
+ if (coefficient_a < 1000000000000000ull) {
+ exponent_a--;
+ coefficient_a = 9999999999999999ull;
+ } else if (coefficient_a >= 10000000000000000ull) {
+ exponent_a++;
+ coefficient_a = 1000000000000000ull;
+ }
+ }
+ break;
+ case ROUNDING_UP:
+ if (!sign_b) {
+ coefficient_a += ((((SINT64) sign_a) >> 63) | 1);
+ if (coefficient_a < 1000000000000000ull) {
+ exponent_a--;
+ coefficient_a = 9999999999999999ull;
+ } else if (coefficient_a >= 10000000000000000ull) {
+ exponent_a++;
+ coefficient_a = 1000000000000000ull;
+ }
+ }
+ break;
+ default: // RZ
+ if (sign_a != sign_b) {
+ coefficient_a--;
+ if (coefficient_a < 1000000000000000ull) {
+ exponent_a--;
+ coefficient_a = 9999999999999999ull;
+ }
+ }
+ break;
+ }
+ } else
+#endif
+#endif
+ // check special case here
+ if ((coefficient_a == 1000000000000000ull)
+ && (diff_dec_expon == MAX_FORMAT_DIGITS + 1)
+ && (sign_a ^ sign_b)
+ && (coefficient_b > 5000000000000000ull)) {
+ coefficient_a = 9999999999999999ull;
+ exponent_a--;
+ }
+
+ res =
+ fast_get_BID64_check_OF (sign_a, exponent_a, coefficient_a,
+ rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+ }
+ // test whether coefficient_a*10^(exponent_a-exponent_b) may exceed 2^62
+ if (bin_expon_ca + estimate_bin_expon[diff_dec_expon] < 60) {
+ // coefficient_a*10^(exponent_a-exponent_b)<2^63
+
+ // multiply by 10^(exponent_a-exponent_b)
+ coefficient_a *= power10_table_128[diff_dec_expon].w[0];
+
+ // sign mask
+ sign_b = ((SINT64) sign_b) >> 63;
+ // apply sign to coeff. of b
+ coefficient_b = (coefficient_b + sign_b) ^ sign_b;
+
+ // apply sign to coefficient a
+ sign_a = ((SINT64) sign_a) >> 63;
+ coefficient_a = (coefficient_a + sign_a) ^ sign_a;
+
+ coefficient_a += coefficient_b;
+ // get sign
+ sign_s = ((SINT64) coefficient_a) >> 63;
+ coefficient_a = (coefficient_a + sign_s) ^ sign_s;
+ sign_s &= 0x8000000000000000ull;
+
+ // coefficient_a < 10^16 ?
+ if (coefficient_a < power10_table_128[MAX_FORMAT_DIGITS].w[0]) {
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rnd_mode == ROUNDING_DOWN && (!coefficient_a)
+ && sign_a != sign_b)
+ sign_s = 0x8000000000000000ull;
+#endif
+#endif
+ res = very_fast_get_BID64 (sign_s, exponent_b, coefficient_a);
+ BID_RETURN (res);
+ }
+ // otherwise rounding is necessary
+
+ // already know coefficient_a<10^19
+ // coefficient_a < 10^17 ?
+ if (coefficient_a < power10_table_128[17].w[0])
+ extra_digits = 1;
+ else if (coefficient_a < power10_table_128[18].w[0])
+ extra_digits = 2;
+ else
+ extra_digits = 3;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_s && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ coefficient_a += round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_a,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C64 = CT.w[1] >> amount;
+
+ } else {
+ // coefficient_a*10^(exponent_a-exponent_b) is large
+ sign_s = sign_a;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_s && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+
+ // check whether we can take faster path
+ scale_ca = estimate_decimal_digits[bin_expon_ca];
+
+ sign_ab = sign_a ^ sign_b;
+ sign_ab = ((SINT64) sign_ab) >> 63;
+
+ // T1 = 10^(16-diff_dec_expon)
+ T1 = power10_table_128[16 - diff_dec_expon].w[0];
+
+ // get number of digits in coefficient_a
+ if (coefficient_a >= power10_table_128[scale_ca].w[0]) {
+ scale_ca++;
+ }
+
+ scale_k = 16 - scale_ca;
+
+ // addition
+ saved_ca = coefficient_a - T1;
+ coefficient_a =
+ (SINT64) saved_ca *(SINT64) power10_table_128[scale_k].w[0];
+ extra_digits = diff_dec_expon - scale_k;
+
+ // apply sign
+ saved_cb = (coefficient_b + sign_ab) ^ sign_ab;
+ // add 10^16 and rounding constant
+ coefficient_b =
+ saved_cb + 10000000000000000ull +
+ round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_b,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C0_64 = CT.w[1] >> amount;
+
+ // result coefficient
+ C64 = C0_64 + coefficient_a;
+ // filter out difficult (corner) cases
+ // this test ensures the number of digits in coefficient_a does not change
+ // after adding (the appropriately scaled and rounded) coefficient_b
+ if ((UINT64) (C64 - 1000000000000000ull - 1) >
+ 9000000000000000ull - 2) {
+ if (C64 >= 10000000000000000ull) {
+ // result has more than 16 digits
+ if (!scale_k) {
+ // must divide coeff_a by 10
+ saved_ca = saved_ca + T1;
+ __mul_64x64_to_128 (CA, saved_ca, 0x3333333333333334ull);
+ //reciprocals10_64[1]);
+ coefficient_a = CA.w[1] >> 1;
+ rem_a =
+ saved_ca - (coefficient_a << 3) - (coefficient_a << 1);
+ coefficient_a = coefficient_a - T1;
+
+ saved_cb += rem_a * power10_table_128[diff_dec_expon].w[0];
+ } else
+ coefficient_a =
+ (SINT64) (saved_ca - T1 -
+ (T1 << 3)) * (SINT64) power10_table_128[scale_k -
+ 1].w[0];
+
+ extra_digits++;
+ coefficient_b =
+ saved_cb + 100000000000000000ull +
+ round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_b,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C0_64 = CT.w[1] >> amount;
+
+ // result coefficient
+ C64 = C0_64 + coefficient_a;
+ } else if (C64 <= 1000000000000000ull) {
+ // less than 16 digits in result
+ coefficient_a =
+ (SINT64) saved_ca *(SINT64) power10_table_128[scale_k +
+ 1].w[0];
+ //extra_digits --;
+ exponent_b--;
+ coefficient_b =
+ (saved_cb << 3) + (saved_cb << 1) + 100000000000000000ull +
+ round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT_new, coefficient_b,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C0_64 = CT_new.w[1] >> amount;
+
+ // result coefficient
+ C64_new = C0_64 + coefficient_a;
+ if (C64_new < 10000000000000000ull) {
+ C64 = C64_new;
+#ifdef SET_STATUS_FLAGS
+ CT = CT_new;
+#endif
+ } else
+ exponent_b++;
+ }
+
+ }
+
+ }
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits is
+ // exactly .5
+ // this is the same as fractional part of
+ // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero
+
+ // get remainder
+ remainder_h = CT.w[1] << (64 - amount);
+
+ // test whether fractional part is 0
+ if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status = INEXACT_EXCEPTION;
+
+ // get remainder
+ remainder_h = CT.w[1] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if ((remainder_h == 0x8000000000000000ull)
+ && (CT.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ //if(!C64 && rmode==ROUNDING_DOWN) sign_s=sign_y;
+ break;
+ default:
+ // round up
+ __add_carry_out (tmp, carry, CT.w[0],
+ reciprocals10_64[extra_digits]);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ break;
+ }
+ __set_status_flags (pfpsf, status);
+
+#endif
+
+ res =
+ fast_get_BID64_check_OF (sign_s, exponent_b + extra_digits, C64,
+ rnd_mode, pfpsf);
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_compare.c b/gcc-4.9/libgcc/config/libbid/bid64_compare.c
new file mode 100644
index 000000000..071632c6e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_compare.c
@@ -0,0 +1,3172 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+static const UINT64 mult_factor[16] = {
+ 1ull, 10ull, 100ull, 1000ull,
+ 10000ull, 100000ull, 1000000ull, 10000000ull,
+ 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull,
+ 1000000000000ull, 10000000000000ull,
+ 100000000000000ull, 1000000000000000ull
+};
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y, exp_t;
+ UINT64 sig_x, sig_y, sig_t;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y, lcv;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equivalent.
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if (((x & MASK_INF) == MASK_INF) && ((y & MASK_INF) == MASK_INF)) {
+ res = (((x ^ y) & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // ONE INFINITY (CASE3')
+ if (((x & MASK_INF) == MASK_INF) || ((y & MASK_INF) == MASK_INF)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ } else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ => not equal : return 0
+ if ((x ^ y) & MASK_SIGN) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ if (exp_x > exp_y) { // to simplify the loop below,
+ SWAP (exp_x, exp_y, exp_t); // put the larger exp in y,
+ SWAP (sig_x, sig_y, sig_t); // and the smaller exp in x
+ }
+ if (exp_y - exp_x > 15) {
+ res = 0; // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ for (lcv = 0; lcv < (exp_y - exp_x); lcv++) {
+ // recalculate y's significand upwards
+ sig_y = sig_y * 10;
+ if (sig_y > 9999999999999999ull) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ }
+ res = (sig_y == sig_x);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered, rather than equal :
+ // return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ } else {
+ // x is pos infinity, it is greater, unless y is positive
+ // infinity => return y!=pos_infinity
+ res = (((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ //(+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ //(ZERO x 10^A == ZERO x 10^B) for any valid A, B => therefore ignore the
+ // exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // is x is zero, it is greater if Y is negative
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // is y is zero, X is greater if it is positive
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x > exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x < exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) { // difference cannot be greater than 10^15
+ if (x & MASK_SIGN) // if both are negative
+ res = 0;
+ else // if both are positive
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ if (x & MASK_SIGN) // if both are negative
+ res = 1;
+ else // if both are positive
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // if postitive, return whichever significand is larger (converse if neg.)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] > 0)
+ || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] == 0)
+ && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_greater_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_greater_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 1
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ // x is -inf, so it is less than y unless y is -inf
+ res = (((y & MASK_INF) == MASK_INF)
+ && (y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else { // x is pos_inf, no way for it to be less than y
+ res = 1;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, they are equal
+ res = 1;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // if x is zero, it is lessthan if Y is positive
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // if y is zero, X is less if it is negative
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_greater_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_greater_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered, rather than equal :
+ // return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ } else {
+ // x is pos infinity, it is greater, unless y is positive infinity =>
+ // return y!=pos_infinity
+ res = (((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // is x is zero, it is greater if Y is negative
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // is y is zero, X is greater if it is positive
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ // difference cannot be greater than 10^15
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] > 0)
+ || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+ // if postitive, return whichever significand is larger (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] == 0)
+ && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ // x is -inf, so it is less than y unless y is -inf
+ res = (((y & MASK_INF) != MASK_INF)
+ || (y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else {
+ // x is pos_inf, no way for it to be less than y
+ res = 0;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, they are equal
+ res = 0;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // if x is zero, it is lessthan if Y is positive
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // if y is zero, X is less if it is negative
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_less_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_less_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered, rather than equal :
+ // return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (LESSEQUAL).
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ // if x is neg infinity, it must be lessthan or equal to y return 1
+ res = 1;
+ BID_RETURN (res);
+ } else {
+ // x is pos infinity, it is greater, unless y is positive infinity =>
+ // return y==pos_infinity
+ res = !(((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 1
+ // if y is negative infinity, then x is greater, return 0
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, they are equal -> return 1
+ res = 1;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // if x is zero, it is lessthan if Y is positive
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // if y is zero, X is less if it is negative
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_less_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_less_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ // x is -inf, so it is less than y unless y is -inf
+ res = (((y & MASK_INF) != MASK_INF)
+ || (y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else {
+ // x is pos_inf, no way for it to be less than y
+ res = 0;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, they are equal
+ res = 0;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // if x is zero, it is lessthan if Y is positive
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // if y is zero, X is less if it is negative
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_not_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_not_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y, exp_t;
+ UINT64 sig_x, sig_y, sig_t;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y, lcv;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 1
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equivalent.
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if (((x & MASK_INF) == MASK_INF) && ((y & MASK_INF) == MASK_INF)) {
+ res = (((x ^ y) & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // ONE INFINITY (CASE3')
+ if (((x & MASK_INF) == MASK_INF) || ((y & MASK_INF) == MASK_INF)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ } else if ((x_is_zero && !y_is_zero) || (!x_is_zero && y_is_zero)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ => not equal : return 1
+ if ((x ^ y) & MASK_SIGN) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ if (exp_x > exp_y) { // to simplify the loop below,
+ SWAP (exp_x, exp_y, exp_t); // put the larger exp in y,
+ SWAP (sig_x, sig_y, sig_t); // and the smaller exp in x
+ }
+
+ if (exp_y - exp_x > 15) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^16
+
+ for (lcv = 0; lcv < (exp_y - exp_x); lcv++) {
+
+ // recalculate y's significand upwards
+ sig_y = sig_y * 10;
+ if (sig_y > 9999999999999999ull) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ }
+
+ {
+ res = sig_y != sig_x;
+ BID_RETURN (res);
+ }
+
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_not_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_not_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (LESSEQUAL).
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, it must be lessthan or equal to y return 1
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater, unless y is positive
+ // infinity => return y==pos_infinity
+ else {
+ res = !(((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 1
+ // if y is negative infinity, then x is greater, return 0
+ {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither
+ // number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal -> return 1
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_not_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_not_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 1
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y & MASK_INF) == MASK_INF)
+ && (y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither
+ // number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_ordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_ordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is ordered, rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 0;
+ BID_RETURN (res);
+ } else {
+ res = 1;
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_quiet_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_quiet_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ if ((x & MASK_SNAN) == MASK_SNAN || (y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if sNaN
+ }
+ res = 1;
+ BID_RETURN (res);
+ } else {
+ res = 0;
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater,
+ // unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // is x is zero, it is greater if Y is negative
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // is y is zero, X is greater if it is positive
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_greater_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_greater_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 1
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y & MASK_INF) == MASK_INF)
+ && (y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_greater_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_greater_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return 0
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater,
+ // unless y is positive infinity => return y!=pos_infinity
+ else {
+ res = (((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 0
+ // if y is negative infinity, then x is greater, return 1
+ {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // is x is zero, it is greater if Y is negative
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // is y is zero, X is greater if it is positive
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y & MASK_INF) != MASK_INF)
+ || (y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 0;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_less_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_less_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 0;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (LESSEQUAL).
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, it must be lessthan or equal to y return 1
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater,
+ // unless y is positive infinity => return y==pos_infinity
+ else {
+ res = !(((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 1
+ // if y is negative infinity, then x is greater, return 0
+ {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal -> return 1
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_less_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_less_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?0:1; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y & MASK_INF) != MASK_INF)
+ || (y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 0;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal
+ if (x_is_zero && y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_not_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_not_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered,
+ // rather than equal : return 0
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (LESSEQUAL).
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, it must be lessthan or equal to y return 1
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, it is greater,
+ // unless y is positive infinity => return y==pos_infinity
+ else {
+ res = !(((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN));
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return 1
+ // if y is negative infinity, then x is greater, return 0
+ {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal -> return 1
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 1 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_signaling_not_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_signaling_not_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0, non_canon_x, non_canon_y;
+
+ // NaN (CASE1)
+ // if either number is NAN, the comparison is unordered : return 1
+ if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) {
+ *pfpsf |= INVALID_EXCEPTION; // set invalid exception if NaN
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, { res = (y == neg_inf)?1:0; BID_RETURN (res) }
+ if ((x & MASK_SIGN) == MASK_SIGN)
+ // x is -inf, so it is less than y unless y is -inf
+ {
+ res = (((y & MASK_INF) == MASK_INF)
+ && (y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else
+ // x is pos_inf, no way for it to be less than y
+ {
+ res = 1;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull) {
+ non_canon_x = 1;
+ } else {
+ non_canon_x = 0;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ non_canon_x = 0;
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull) {
+ non_canon_y = 1;
+ } else {
+ non_canon_y = 0;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ non_canon_y = 0;
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO==-ZERO) => therefore ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // therefore ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (non_canon_x || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (non_canon_y || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ // if both numbers are zero, they are equal
+ if (x_is_zero && y_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero, it is lessthan if Y is positive
+ else if (x_is_zero) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, X is less if it is negative
+ else if (y_is_zero) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is less than if y is positive
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // difference cannot be greater than 10^15
+
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if postitive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // return 0 if values are equal
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if positive, return whichever significand abs is smaller
+ // (converse if negative)
+ {
+ res = (((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) !=
+ MASK_SIGN));
+ BID_RETURN (res);
+ }
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_div.c b/gcc-4.9/libgcc/config/libbid/bid64_div.c
new file mode 100644
index 000000000..9a6379074
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_div.c
@@ -0,0 +1,1795 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID64 divide
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * if(coefficient_x<coefficient_y)
+ * p = number_digits(coefficient_y) - number_digits(coefficient_x)
+ * A = coefficient_x*10^p
+ * B = coefficient_y
+ * CA= A*10^(15+j), j=0 for A>=B, 1 otherwise
+ * Q = 0
+ * else
+ * get Q=(int)(coefficient_x/coefficient_y)
+ * (based on double precision divide)
+ * check for exact divide case
+ * Let R = coefficient_x - Q*coefficient_y
+ * Let m=16-number_digits(Q)
+ * CA=R*10^m, Q=Q*10^m
+ * B = coefficient_y
+ * endif
+ * if (CA<2^64)
+ * Q += CA/B (64-bit unsigned divide)
+ * else
+ * get final Q using double precision divide, followed by 3 integer
+ * iterations
+ * if exact result, eliminate trailing zeros
+ * check for underflow
+ * round coefficient to nearest
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+#include "bid_div_macros.h"
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+#include <fenv.h>
+
+#define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT
+#endif
+
+extern UINT32 convert_table[5][128][2];
+extern SINT8 factors[][2];
+extern UINT8 packed_10000_zeros[];
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_div (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x, y;
+#else
+
+UINT64
+bid64_div (UINT64 x,
+ UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CA, CT;
+ UINT64 sign_x, sign_y, coefficient_x, coefficient_y, A, B, QX, PD;
+ UINT64 A2, Q, Q2, B2, B4, B5, R, T, DU, res;
+ UINT64 valid_x, valid_y;
+ SINT64 D;
+ int_double t_scale, tempq, temp_b;
+ int_float tempx, tempy;
+ double da, db, dq, da_h, da_l;
+ int exponent_x, exponent_y, bin_expon_cx;
+ int diff_expon, ed1, ed2, bin_index;
+ int rmode, amount;
+ int nzeros, i, j, k, d5;
+ UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+ y = *py;
+#endif
+
+ valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x);
+ valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y);
+
+ // unpack arguments, check for NaN or Infinity
+ if (!valid_x) {
+ // x is Inf. or NaN
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+
+ // test if x is NaN
+ if ((x & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (coefficient_x & QUIET_MASK64);
+ }
+ // x is Infinity?
+ if ((x & INFINITY_MASK64) == INFINITY_MASK64) {
+ // check if y is Inf or NaN
+ if ((y & INFINITY_MASK64) == INFINITY_MASK64) {
+ // y==Inf, return NaN
+ if ((y & NAN_MASK64) == INFINITY_MASK64) { // Inf/Inf
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (NAN_MASK64);
+ }
+ } else {
+ // otherwise return +/-Inf
+ BID_RETURN (((x ^ y) & 0x8000000000000000ull) |
+ INFINITY_MASK64);
+ }
+ }
+ // x==0
+ if (((y & INFINITY_MASK64) != INFINITY_MASK64)
+ && !(coefficient_y)) {
+ // y==0 , return NaN
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (NAN_MASK64);
+ }
+ if (((y & INFINITY_MASK64) != INFINITY_MASK64)) {
+ if ((y & SPECIAL_ENCODING_MASK64) == SPECIAL_ENCODING_MASK64)
+ exponent_y = ((UINT32) (y >> 51)) & 0x3ff;
+ else
+ exponent_y = ((UINT32) (y >> 53)) & 0x3ff;
+ sign_y = y & 0x8000000000000000ull;
+
+ exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53));
+ }
+
+ }
+ if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (coefficient_y & QUIET_MASK64);
+ }
+ // y is Infinity?
+ if ((y & INFINITY_MASK64) == INFINITY_MASK64) {
+ // return +/-0
+ BID_RETURN (((x ^ y) & 0x8000000000000000ull));
+ }
+ // y is 0
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ BID_RETURN ((sign_x ^ sign_y) | INFINITY_MASK64);
+ }
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+
+ if (coefficient_x < coefficient_y) {
+ // get number of decimal digits for c_x, c_y
+
+ //--- get number of bits in the coefficients of x and y ---
+ tempx.d = (float) coefficient_x;
+ tempy.d = (float) coefficient_y;
+ bin_index = (tempy.i - tempx.i) >> 23;
+
+ A = coefficient_x * power10_index_binexp[bin_index];
+ B = coefficient_y;
+
+ temp_b.d = (double) B;
+
+ // compare A, B
+ DU = (A - B) >> 63;
+ ed1 = 15 + (int) DU;
+ ed2 = estimate_decimal_digits[bin_index] + ed1;
+ T = power10_table_128[ed1].w[0];
+ __mul_64x64_to_128 (CA, A, T);
+
+ Q = 0;
+ diff_expon = diff_expon - ed2;
+
+ // adjust double precision db, to ensure that later A/B - (int)(da/db) > -1
+ if (coefficient_y < 0x0020000000000000ull) {
+ temp_b.i += 1;
+ db = temp_b.d;
+ } else
+ db = (double) (B + 2 + (B & 1));
+
+ } else {
+ // get c_x/c_y
+
+ // set last bit before conversion to DP
+ A2 = coefficient_x | 1;
+ da = (double) A2;
+
+ db = (double) coefficient_y;
+
+ tempq.d = da / db;
+ Q = (UINT64) tempq.d;
+
+ R = coefficient_x - coefficient_y * Q;
+
+ // will use to get number of dec. digits of Q
+ bin_expon_cx = (tempq.i >> 52) - 0x3ff;
+
+ // R<0 ?
+ D = ((SINT64) R) >> 63;
+ Q += D;
+ R += (coefficient_y & D);
+
+ // exact result ?
+ if (((SINT64) R) <= 0) {
+ // can have R==-1 for coeff_y==1
+ res =
+ get_BID64 (sign_x ^ sign_y, diff_expon, (Q + R), rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ // get decimal digits of Q
+ DU = power10_index_binexp[bin_expon_cx] - Q - 1;
+ DU >>= 63;
+
+ ed2 = 16 - estimate_decimal_digits[bin_expon_cx] - (int) DU;
+
+ T = power10_table_128[ed2].w[0];
+ __mul_64x64_to_128 (CA, R, T);
+ B = coefficient_y;
+
+ Q *= power10_table_128[ed2].w[0];
+ diff_expon -= ed2;
+
+ }
+
+ if (!CA.w[1]) {
+ Q2 = CA.w[0] / B;
+ B2 = B + B;
+ B4 = B2 + B2;
+ R = CA.w[0] - Q2 * B;
+ Q += Q2;
+ } else {
+
+ // 2^64
+ t_scale.i = 0x43f0000000000000ull;
+ // convert CA to DP
+ da_h = CA.w[1];
+ da_l = CA.w[0];
+ da = da_h * t_scale.d + da_l;
+
+ // quotient
+ dq = da / db;
+ Q2 = (UINT64) dq;
+
+ // get w[0] remainder
+ R = CA.w[0] - Q2 * B;
+
+ // R<0 ?
+ D = ((SINT64) R) >> 63;
+ Q2 += D;
+ R += (B & D);
+
+ // now R<6*B
+
+ // quick divide
+
+ // 4*B
+ B2 = B + B;
+ B4 = B2 + B2;
+
+ R = R - B4;
+ // R<0 ?
+ D = ((SINT64) R) >> 63;
+ // restore R if negative
+ R += (B4 & D);
+ Q2 += ((~D) & 4);
+
+ R = R - B2;
+ // R<0 ?
+ D = ((SINT64) R) >> 63;
+ // restore R if negative
+ R += (B2 & D);
+ Q2 += ((~D) & 2);
+
+ R = R - B;
+ // R<0 ?
+ D = ((SINT64) R) >> 63;
+ // restore R if negative
+ R += (B & D);
+ Q2 += ((~D) & 1);
+
+ Q += Q2;
+ }
+
+#ifdef SET_STATUS_FLAGS
+ if (R) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!R)
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ {
+ // eliminate trailing zeros
+
+ // check whether CX, CY are short
+ if ((coefficient_x <= 1024) && (coefficient_y <= 1024)) {
+ i = (int) coefficient_y - 1;
+ j = (int) coefficient_x - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+
+ __mul_64x64_to_128 (CT, Q, reciprocals10_64[nzeros]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[nzeros];
+ Q = CT.w[1] >> amount;
+
+ diff_expon += nzeros;
+ } else {
+ tdigit[0] = Q & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ __mul_64x64_to_128 (CT, Q, reciprocals10_64[nzeros]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[nzeros];
+ Q = CT.w[1] >> amount;
+ }
+ diff_expon += nzeros;
+
+ }
+ if (diff_expon >= 0) {
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, Q,
+ rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ }
+#endif
+
+ if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // round to nearest code
+ // R*10
+ R += R;
+ R = (R << 2) + R;
+ B5 = B4 + B;
+
+ // compare 10*R to 5*B
+ R = B5 - R;
+ // correction for (R==0 && (Q&1))
+ R -= (Q & 1);
+ // R<0 ?
+ D = ((UINT64) R) >> 63;
+ Q += D;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // round to nearest code
+ // R*10
+ R += R;
+ R = (R << 2) + R;
+ B5 = B4 + B;
+
+ // compare 10*R to 5*B
+ R = B5 - R;
+ // correction for (R==0 && (Q&1))
+ R -= (Q & 1);
+ // R<0 ?
+ D = ((UINT64) R) >> 63;
+ Q += D;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case 0: // round to nearest code
+ case ROUNDING_TIES_AWAY:
+ // R*10
+ R += R;
+ R = (R << 2) + R;
+ B5 = B4 + B;
+ // compare 10*R to 5*B
+ R = B5 - R;
+ // correction for (R==0 && (Q&1))
+ R -= ((Q | (rmode >> 2)) & 1);
+ // R<0 ?
+ D = ((UINT64) R) >> 63;
+ Q += D;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ Q++;
+ break;
+ }
+#endif
+#endif
+
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, Q, rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ } else {
+ // UF occurs
+
+#ifdef SET_STATUS_FLAGS
+ if ((diff_expon + 16 < 0)) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ rmode = rnd_mode;
+ res =
+ get_BID64_UF (sign_x ^ sign_y, diff_expon, Q, R, rmode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+ }
+}
+
+
+
+TYPE0_FUNCTION_ARGTYPE1_ARG128 (UINT64, bid64dq_div, UINT64, x, y)
+ UINT256 CA4 =
+ { {0x0ull, 0x0ull, 0x0ull, 0x0ull} }, CA4r, P256, QB256;
+UINT128 CX, CY, T128, CQ, CQ2, CR, CA, TP128, Qh, Ql, Tmp;
+UINT64 sign_x, sign_y, T, carry64, D, Q_low, QX, valid_y, PD, res;
+int_float fx, fy, f64;
+UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+int nzeros, i, j, k, d5, done = 0;
+unsigned rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+fexcept_t binaryflags = 0;
+#endif
+
+valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y);
+
+ // unpack arguments, check for NaN or Infinity
+CX.w[1] = 0;
+if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) {
+#ifdef SET_STATUS_FLAGS
+ if (((y.w[1] & SNAN_MASK64) == SNAN_MASK64) || // y is sNaN
+ ((x & SNAN_MASK64) == SNAN_MASK64))
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // test if x is NaN
+ if (((x) & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+ res = CX.w[0];
+ BID_RETURN (res & QUIET_MASK64);
+ }
+ // x is Infinity?
+ if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) {
+ // otherwise return +/-Inf
+ res =
+ (((x) ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // x is 0
+ if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) {
+ if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ // return 0
+ res = ((x) ^ y.w[1]) & 0x8000000000000000ull;
+ exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS_128;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ res |= (((UINT64) exponent_x) << 53);
+ BID_RETURN (res);
+ }
+}
+exponent_x += (DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS);
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ Tmp.w[1] = (CY.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CY.w[0];
+ TP128 = reciprocals10_128[18];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[18];
+ __shr_128 (Tmp, Qh, amount);
+ res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0];
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return +/-0
+ res = sign_x ^ sign_y;
+ BID_RETURN (res);
+ }
+ // y is 0, return +/-Inf
+ res =
+ (((x) ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 15;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ if (digits_q <= 16) {
+ if (!CR.w[1] && !CR.w[0]) {
+ res = get_BID64 (sign_x ^ sign_y, diff_expon,
+ CQ.w[0], rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+
+ ed2 = 16 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ __mul_64x128_to_192 (CA4, (T128.w[0]), CR);
+ diff_expon = diff_expon - ed2;
+ CQ.w[0] *= T128.w[0];
+ } else {
+ ed2 = digits_q - 16;
+ diff_expon += ed2;
+ T128 = reciprocals10_128[ed2];
+ __mul_128x128_to_256 (P256, CQ, T128);
+ amount = recip_scale[ed2];
+ CQ.w[0] = (P256.w[2] >> amount) | (P256.w[3] << (64 - amount));
+ CQ.w[1] = 0;
+
+ __mul_64x64_to_128 (CQ2, CQ.w[0], (power10_table_128[ed2].w[0]));
+
+ __mul_64x64_to_128 (QB256, CQ2.w[0], CY.w[0]);
+ QB256.w[1] += CQ2.w[0] * CY.w[1] + CQ2.w[1] * CY.w[0];
+
+ CA4.w[1] = CX.w[1] - QB256.w[1];
+ CA4.w[0] = CX.w[0] - QB256.w[0];
+ if (CX.w[0] < QB256.w[0])
+ CA4.w[1]--;
+ if (CR.w[0] || CR.w[1])
+ CA4.w[0] |= 1;
+ done = 1;
+
+ }
+
+}
+if (!done) {
+ __div_256_by_128 (&CQ, &CA4, CY);
+}
+
+
+
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+ {
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ Q_low = CQ.w[0];
+
+ {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ if(diff_expon>=0){
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0],
+ rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ }
+#endif
+
+ if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ } else {
+ // UF occurs
+
+#ifdef SET_STATUS_FLAGS
+ if ((diff_expon + 16 < 0)) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ rmode = rnd_mode;
+ res =
+ get_BID64_UF (sign_x ^ sign_y, diff_expon, CQ.w[0], CA4.w[1] | CA4.w[0], rmode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+ }
+
+}
+
+
+//#define LEAVE_TRAILING_ZEROS
+
+TYPE0_FUNCTION_ARG128_ARGTYPE2 (UINT64, bid64qd_div, x, UINT64, y)
+
+ UINT256 CA4 =
+ { {0x0ull, 0x0ull, 0x0ull, 0x0ull} }, CA4r, P256, QB256;
+UINT128 CX, CY, T128, CQ, CQ2, CR, CA, TP128, Qh, Ql, Tmp;
+UINT64 sign_x, sign_y, T, carry64, D, Q_low, QX, PD, res, valid_y;
+int_float fx, fy, f64;
+UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+int nzeros, i, j, k, d5, done = 0;
+unsigned rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+fexcept_t binaryflags = 0;
+#endif
+
+valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], (y));
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ // test if x is NaN
+ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN
+ (y & 0x7e00000000000000ull) == 0x7e00000000000000ull)
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CX.w[0];
+ TP128 = reciprocals10_128[18];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[18];
+ __shr_128 (Tmp, Qh, amount);
+ res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0];
+ BID_RETURN (res);
+ }
+ // x is Infinity?
+ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ if (((y & 0x7c00000000000000ull) != 0x7c00000000000000ull)) {
+ // otherwise return +/-Inf
+ res =
+ ((x.w[1] ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // x is 0
+ if (((y & INFINITY_MASK64) != INFINITY_MASK64) &&
+ !(CY.w[0])) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ // return 0
+ if (((y & 0x7800000000000000ull) != 0x7800000000000000ull)) {
+ if (!CY.w[0]) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ exponent_x =
+ exponent_x - exponent_y - DECIMAL_EXPONENT_BIAS_128 +
+ (DECIMAL_EXPONENT_BIAS << 1);
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ res = (sign_x ^ sign_y) | (((UINT64) exponent_x) << 53);
+ BID_RETURN (res);
+ }
+}
+CY.w[1] = 0;
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (CY.w[0] & QUIET_MASK64);
+ }
+ // y is Infinity?
+ if (((y) & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return +/-0
+ res = sign_x ^ sign_y;
+ BID_RETURN (res);
+ }
+ // y is 0, return +/-Inf
+ res =
+ ((x.w[1] ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon =
+ exponent_x - exponent_y - DECIMAL_EXPONENT_BIAS_128 +
+ (DECIMAL_EXPONENT_BIAS << 1);
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 15;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ if (digits_q <= 16) {
+ if (!CR.w[1] && !CR.w[0]) {
+ res = get_BID64 (sign_x ^ sign_y, diff_expon,
+ CQ.w[0], rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+
+ ed2 = 16 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ __mul_64x128_to_192 (CA4, (T128.w[0]), CR);
+ diff_expon = diff_expon - ed2;
+ CQ.w[0] *= T128.w[0];
+ } else {
+ ed2 = digits_q - 16;
+ diff_expon += ed2;
+ T128 = reciprocals10_128[ed2];
+ __mul_128x128_to_256 (P256, CQ, T128);
+ amount = recip_scale[ed2];
+ CQ.w[0] = (P256.w[2] >> amount) | (P256.w[3] << (64 - amount));
+ CQ.w[1] = 0;
+
+ __mul_64x64_to_128 (CQ2, CQ.w[0], (power10_table_128[ed2].w[0]));
+
+ __mul_64x64_to_128 (QB256, CQ2.w[0], CY.w[0]);
+ QB256.w[1] += CQ2.w[0] * CY.w[1] + CQ2.w[1] * CY.w[0];
+
+ CA4.w[1] = CX.w[1] - QB256.w[1];
+ CA4.w[0] = CX.w[0] - QB256.w[0];
+ if (CX.w[0] < QB256.w[0])
+ CA4.w[1]--;
+ if (CR.w[0] || CR.w[1])
+ CA4.w[0] |= 1;
+ done = 1;
+ if(CA4.w[1]|CA4.w[0]) {
+ __mul_64x128_low(CY, (power10_table_128[ed2].w[0]),CY);
+ }
+
+ }
+
+}
+
+if (!done) {
+ __div_256_by_128 (&CQ, &CA4, CY);
+}
+
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+ {
+ if(!done) {
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+ //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2];
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ //T128 = reciprocals10_128[17];
+ Q_low = CQ.w[0];
+
+ {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ }
+ if(diff_expon>=0){
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0],
+ rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ }
+#endif
+
+ if (diff_expon >= 0) {
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+ //if(CQ.w[0]<carry64)
+ //CQ.w[1] ++;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ } else {
+ // UF occurs
+
+#ifdef SET_STATUS_FLAGS
+ if ((diff_expon + 16 < 0)) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ rmode = rnd_mode;
+ res =
+ get_BID64_UF (sign_x ^ sign_y, diff_expon, CQ.w[0], CA4.w[1] | CA4.w[0], rmode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+ }
+
+}
+
+//#define LEAVE_TRAILING_ZEROS
+
+extern UINT32 convert_table[5][128][2];
+extern SINT8 factors[][2];
+extern UINT8 packed_10000_zeros[];
+
+
+//UINT64* bid64_div128x128(UINT64 res, UINT128 *px, UINT128 *py, unsigned rnd_mode, unsigned *pfpsf)
+
+TYPE0_FUNCTION_ARG128_ARG128 (UINT64, bid64qq_div, x, y)
+ UINT256 CA4 =
+ { {0x0ull, 0x0ull, 0x0ull, 0x0ull} }, CA4r, P256, QB256;
+UINT128 CX, CY, T128, CQ, CQ2, CR, CA, TP128, Qh, Ql, Tmp;
+UINT64 sign_x, sign_y, T, carry64, D, Q_low, QX, valid_y, PD, res;
+int_float fx, fy, f64;
+UINT32 QX32, tdigit[3], digit, digit_h, digit_low;
+int exponent_x, exponent_y, bin_index, bin_expon, diff_expon, ed2,
+ digits_q, amount;
+int nzeros, i, j, k, d5, done = 0;
+unsigned rmode;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+fexcept_t binaryflags = 0;
+#endif
+
+valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y);
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ // test if x is NaN
+ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull || // sNaN
+ (y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull)
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CX.w[0];
+ TP128 = reciprocals10_128[18];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[18];
+ __shr_128 (Tmp, Qh, amount);
+ res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0];
+ BID_RETURN (res);
+ }
+ // x is Infinity?
+ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is Inf.
+ if (((y.w[1] & 0x7c00000000000000ull) == 0x7800000000000000ull))
+ // return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) {
+ // otherwise return +/-Inf
+ res =
+ ((x.w[1] ^ y.
+ w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // x is 0
+ if (((y.w[1] & 0x7800000000000000ull) != 0x7800000000000000ull)) {
+ if ((!CY.w[0]) && !(CY.w[1] & 0x0001ffffffffffffull)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x=y=0, return NaN
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ // return 0
+ res = (x.w[1] ^ y.w[1]) & 0x8000000000000000ull;
+ exponent_x = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ res |= (((UINT64) exponent_x) << 53);
+ BID_RETURN (res);
+ }
+}
+if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((y.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ Tmp.w[1] = (CY.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CY.w[0];
+ TP128 = reciprocals10_128[18];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[18];
+ __shr_128 (Tmp, Qh, amount);
+ res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0];
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // return +/-0
+ res = sign_x ^ sign_y;
+ BID_RETURN (res);
+ }
+ // y is 0, return +/-Inf
+ res =
+ ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+diff_expon = exponent_x - exponent_y + DECIMAL_EXPONENT_BIAS;
+
+if (__unsigned_compare_gt_128 (CY, CX)) {
+ // CX < CY
+
+ // 2^64
+ f64.i = 0x5f800000;
+
+ // fx ~ CX, fy ~ CY
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ fy.d = (float) CY.w[1] * f64.d + (float) CY.w[0];
+ // expon_cy - expon_cx
+ bin_index = (fy.i - fx.i) >> 23;
+
+ if (CX.w[1]) {
+ T = power10_index_binexp_128[bin_index].w[0];
+ __mul_64x128_short (CA, T, CX);
+ } else {
+ T128 = power10_index_binexp_128[bin_index];
+ __mul_64x128_short (CA, CX.w[0], T128);
+ }
+
+ ed2 = 15;
+ if (__unsigned_compare_gt_128 (CY, CA))
+ ed2++;
+
+ T128 = power10_table_128[ed2];
+ __mul_128x128_to_256 (CA4, CA, T128);
+
+ ed2 += estimate_decimal_digits[bin_index];
+ CQ.w[0] = CQ.w[1] = 0;
+ diff_expon = diff_expon - ed2;
+
+} else {
+ // get CQ = CX/CY
+ __div_128_by_128 (&CQ, &CR, CX, CY);
+
+ // get number of decimal digits in CQ
+ // 2^64
+ f64.i = 0x5f800000;
+ fx.d = (float) CQ.w[1] * f64.d + (float) CQ.w[0];
+ // binary expon. of CQ
+ bin_expon = (fx.i - 0x3f800000) >> 23;
+
+ digits_q = estimate_decimal_digits[bin_expon];
+ TP128.w[0] = power10_index_binexp_128[bin_expon].w[0];
+ TP128.w[1] = power10_index_binexp_128[bin_expon].w[1];
+ if (__unsigned_compare_ge_128 (CQ, TP128))
+ digits_q++;
+
+ if (digits_q <= 16) {
+ if (!CR.w[1] && !CR.w[0]) {
+ res = get_BID64 (sign_x ^ sign_y, diff_expon,
+ CQ.w[0], rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+
+ ed2 = 16 - digits_q;
+ T128.w[0] = power10_table_128[ed2].w[0];
+ __mul_64x128_to_192 (CA4, (T128.w[0]), CR);
+ diff_expon = diff_expon - ed2;
+ CQ.w[0] *= T128.w[0];
+ } else {
+ ed2 = digits_q - 16;
+ diff_expon += ed2;
+ T128 = reciprocals10_128[ed2];
+ __mul_128x128_to_256 (P256, CQ, T128);
+ amount = recip_scale[ed2];
+ CQ.w[0] = (P256.w[2] >> amount) | (P256.w[3] << (64 - amount));
+ CQ.w[1] = 0;
+
+ __mul_64x64_to_128 (CQ2, CQ.w[0], (power10_table_128[ed2].w[0]));
+
+ __mul_64x64_to_128 (QB256, CQ2.w[0], CY.w[0]);
+ QB256.w[1] += CQ2.w[0] * CY.w[1] + CQ2.w[1] * CY.w[0];
+
+ CA4.w[1] = CX.w[1] - QB256.w[1];
+ CA4.w[0] = CX.w[0] - QB256.w[0];
+ if (CX.w[0] < QB256.w[0])
+ CA4.w[1]--;
+ if (CR.w[0] || CR.w[1])
+ CA4.w[0] |= 1;
+ done = 1;
+ if(CA4.w[1]|CA4.w[0]) {
+ __mul_64x128_low(CY, (power10_table_128[ed2].w[0]),CY);
+ }
+ }
+
+}
+
+if (!done) {
+ __div_256_by_128 (&CQ, &CA4, CY);
+}
+
+
+
+#ifdef SET_STATUS_FLAGS
+ if (CA4.w[0] || CA4.w[1]) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#ifndef LEAVE_TRAILING_ZEROS
+ else
+#endif
+#else
+#ifndef LEAVE_TRAILING_ZEROS
+ if (!CA4.w[0] && !CA4.w[1])
+#endif
+#endif
+#ifndef LEAVE_TRAILING_ZEROS
+ // check whether result is exact
+ {
+ if(!done) {
+ // check whether CX, CY are short
+ if (!CX.w[1] && !CY.w[1] && (CX.w[0] <= 1024) && (CY.w[0] <= 1024)) {
+ i = (int) CY.w[0] - 1;
+ j = (int) CX.w[0] - 1;
+ // difference in powers of 2 factors for Y and X
+ nzeros = ed2 - factors[i][0] + factors[j][0];
+ // difference in powers of 5 factors
+ d5 = ed2 - factors[i][1] + factors[j][1];
+ if (d5 < nzeros)
+ nzeros = d5;
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+ //__mul_128x128_to_256(P256, CQ, reciprocals10_128[nzeros]);Qh.w[1]=P256.w[3];Qh.w[0]=P256.w[2];
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128_long (CQ, Qh, amount);
+
+ diff_expon += nzeros;
+ } else {
+ // decompose Q as Qh*10^17 + Ql
+ //T128 = reciprocals10_128[17];
+ Q_low = CQ.w[0];
+
+ {
+ tdigit[0] = Q_low & 0x3ffffff;
+ tdigit[1] = 0;
+ QX = Q_low >> 26;
+ QX32 = QX;
+ nzeros = 0;
+
+ for (j = 0; QX32; j++, QX32 >>= 7) {
+ k = (QX32 & 127);
+ tdigit[0] += convert_table[j][k][0];
+ tdigit[1] += convert_table[j][k][1];
+ if (tdigit[0] >= 100000000) {
+ tdigit[0] -= 100000000;
+ tdigit[1]++;
+ }
+ }
+
+ if (tdigit[1] >= 100000000) {
+ tdigit[1] -= 100000000;
+ if (tdigit[1] >= 100000000)
+ tdigit[1] -= 100000000;
+ }
+
+ digit = tdigit[0];
+ if (!digit && !tdigit[1])
+ nzeros += 16;
+ else {
+ if (!digit) {
+ nzeros += 8;
+ digit = tdigit[1];
+ }
+ // decompose digit
+ PD = (UINT64) digit *0x068DB8BBull;
+ digit_h = (UINT32) (PD >> 40);
+ digit_low = digit - digit_h * 10000;
+
+ if (!digit_low)
+ nzeros += 4;
+ else
+ digit_h = digit_low;
+
+ if (!(digit_h & 1))
+ nzeros +=
+ 3 & (UINT32) (packed_10000_zeros[digit_h >> 3] >>
+ (digit_h & 7));
+ }
+
+ if (nzeros) {
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Qh, Ql, CQ, reciprocals10_128[nzeros]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[nzeros];
+ __shr_128 (CQ, Qh, amount);
+ }
+ diff_expon += nzeros;
+
+ }
+ }
+ }
+ if(diff_expon>=0){
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0],
+ rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ }
+#endif
+
+ if(diff_expon>=0) {
+
+#ifdef IEEE_ROUND_NEAREST
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+
+ CQ.w[0] += carry64;
+ //if(CQ.w[0]<carry64)
+ //CQ.w[1] ++;
+#else
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+#else
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST: // round to nearest code
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 1 : 0;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) & ((CQ.w[0]) | D);
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_TIES_AWAY:
+ // rounding
+ // 2*CA4 - CY
+ CA4r.w[1] = (CA4.w[1] + CA4.w[1]) | (CA4.w[0] >> 63);
+ CA4r.w[0] = CA4.w[0] + CA4.w[0];
+ __sub_borrow_out (CA4r.w[0], carry64, CA4r.w[0], CY.w[0]);
+ CA4r.w[1] = CA4r.w[1] - CY.w[1] - carry64;
+ D = (CA4r.w[1] | CA4r.w[0]) ? 0 : 1;
+ carry64 = (1 + (((SINT64) CA4r.w[1]) >> 63)) | D;
+ CQ.w[0] += carry64;
+ if (CQ.w[0] < carry64)
+ CQ.w[1]++;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ break;
+ default: // rounding up
+ CQ.w[0]++;
+ if (!CQ.w[0])
+ CQ.w[1]++;
+ break;
+ }
+#endif
+#endif
+
+
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, diff_expon, CQ.w[0], rnd_mode,
+ pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ } else {
+ // UF occurs
+
+#ifdef SET_STATUS_FLAGS
+ if ((diff_expon + 16 < 0)) {
+ // set status flags
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+ }
+#endif
+ rmode = rnd_mode;
+ res =
+ get_BID64_UF (sign_x ^ sign_y, diff_expon, CQ.w[0], CA4.w[1] | CA4.w[0], rmode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+
+ }
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_fma.c b/gcc-4.9/libgcc/config/libbid/bid64_fma.c
new file mode 100644
index 000000000..6b1ae30a8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_fma.c
@@ -0,0 +1,506 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID64 fma
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * if multiplication is guranteed exact (short coefficients)
+ * call the unpacked arg. equivalent of bid64_add(x*y, z)
+ * else
+ * get full coefficient_x*coefficient_y product
+ * call subroutine to perform addition of 64-bit argument
+ * to 128-bit product
+ *
+ ****************************************************************************/
+
+#include "bid_inline_add.h"
+
+#if DECIMAL_CALL_BY_REFERENCE
+extern void bid64_mul (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+#else
+
+extern UINT64 bid64_mul (UINT64 x,
+ UINT64 y _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_fma (UINT64 * pres, UINT64 * px, UINT64 * py,
+ UINT64 *
+ pz _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x, y, z;
+#else
+
+UINT64
+bid64_fma (UINT64 x, UINT64 y,
+ UINT64 z _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 P, PU, CT, CZ;
+ UINT64 sign_x, sign_y, coefficient_x, coefficient_y, sign_z,
+ coefficient_z;
+ UINT64 C64, remainder_y, res;
+ UINT64 CYh, CY0L, T, valid_x, valid_y, valid_z;
+ int_double tempx, tempy;
+ int extra_digits, exponent_x, exponent_y, bin_expon_cx, bin_expon_cy,
+ bin_expon_product, rmode;
+ int digits_p, bp, final_exponent, exponent_z, digits_z, ez, ey,
+ scale_z, uf_status;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+ y = *py;
+ z = *pz;
+#endif
+
+ valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x);
+ valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y);
+ valid_z = unpack_BID64 (&sign_z, &exponent_z, &coefficient_z, z);
+
+ // unpack arguments, check for NaN, Infinity, or 0
+ if (!valid_x || !valid_y || !valid_z) {
+
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NAN
+ // if x = {0, f, inf, NaN}, y = NaN, z = {0, f, inf, NaN} then res = Q (y)
+ // check first for non-canonical NaN payload
+ y = y & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((y & 0x0003ffffffffffffull) > 999999999999999ull) {
+ y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (y)
+ res = y & 0xfdffffffffffffffull;
+ } else { // y is QNaN
+ // return y
+ res = y;
+ // if z = SNaN or x = SNaN signal invalid exception
+ if ((z & MASK_SNAN) == MASK_SNAN
+ || (x & MASK_SNAN) == MASK_SNAN) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ BID_RETURN (res)
+ } else if ((z & MASK_NAN) == MASK_NAN) { // z is NAN
+ // if x = {0, f, inf, NaN}, y = {0, f, inf}, z = NaN then res = Q (z)
+ // check first for non-canonical NaN payload
+ z = z & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((z & 0x0003ffffffffffffull) > 999999999999999ull) {
+ z = z & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ if ((z & MASK_SNAN) == MASK_SNAN) { // z is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (z)
+ res = z & 0xfdffffffffffffffull;
+ } else { // z is QNaN
+ // return z
+ res = z;
+ // if x = SNaN signal invalid exception
+ if ((x & MASK_SNAN) == MASK_SNAN) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ }
+ BID_RETURN (res)
+ } else if ((x & MASK_NAN) == MASK_NAN) { // x is NAN
+ // if x = NaN, y = {0, f, inf}, z = {0, f, inf} then res = Q (x)
+ // check first for non-canonical NaN payload
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull) {
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res = x & 0xfdffffffffffffffull;
+ } else { // x is QNaN
+ // return x
+ res = x; // clear out G[6]-G[16]
+ }
+ BID_RETURN (res)
+ }
+
+ if (!valid_x) {
+ // x is Inf. or 0
+
+ // x is Infinity?
+ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if y is 0
+ if (!coefficient_y) {
+ // y==0, return NaN
+#ifdef SET_STATUS_FLAGS
+ if ((z & 0x7e00000000000000ull) != 0x7c00000000000000ull)
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (0x7c00000000000000ull);
+ }
+ // test if z is Inf of oposite sign
+ if (((z & 0x7c00000000000000ull) == 0x7800000000000000ull)
+ && (((x ^ y) ^ z) & 0x8000000000000000ull)) {
+ // return NaN
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (0x7c00000000000000ull);
+ }
+ // otherwise return +/-Inf
+ BID_RETURN (((x ^ y) & 0x8000000000000000ull) |
+ 0x7800000000000000ull);
+ }
+ // x is 0
+ if (((y & 0x7800000000000000ull) != 0x7800000000000000ull)
+ && ((z & 0x7800000000000000ull) != 0x7800000000000000ull)) {
+
+ if (coefficient_z) {
+ exponent_y = exponent_x - DECIMAL_EXPONENT_BIAS + exponent_y;
+
+ sign_z = z & 0x8000000000000000ull;
+
+ if (exponent_y >= exponent_z)
+ BID_RETURN (z);
+ res =
+ add_zero64 (exponent_y, sign_z, exponent_z, coefficient_z,
+ &rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+ }
+ }
+ if (!valid_y) {
+ // y is Inf. or 0
+
+ // y is Infinity?
+ if ((y & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ // check if x is 0
+ if (!coefficient_x) {
+ // y==0, return NaN
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (0x7c00000000000000ull);
+ }
+ // test if z is Inf of oposite sign
+ if (((z & 0x7c00000000000000ull) == 0x7800000000000000ull)
+ && (((x ^ y) ^ z) & 0x8000000000000000ull)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // return NaN
+ BID_RETURN (0x7c00000000000000ull);
+ }
+ // otherwise return +/-Inf
+ BID_RETURN (((x ^ y) & 0x8000000000000000ull) |
+ 0x7800000000000000ull);
+ }
+ // y is 0
+ if (((z & 0x7800000000000000ull) != 0x7800000000000000ull)) {
+
+ if (coefficient_z) {
+ exponent_y += exponent_x - DECIMAL_EXPONENT_BIAS;
+
+ sign_z = z & 0x8000000000000000ull;
+
+ if (exponent_y >= exponent_z)
+ BID_RETURN (z);
+ res =
+ add_zero64 (exponent_y, sign_z, exponent_z, coefficient_z,
+ &rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+ }
+ }
+
+ if (!valid_z) {
+ // y is Inf. or 0
+
+ // test if y is NaN/Inf
+ if ((z & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ BID_RETURN (coefficient_z & QUIET_MASK64);
+ }
+ // z is 0, return x*y
+ if ((!coefficient_x) || (!coefficient_y)) {
+ //0+/-0
+ exponent_x += exponent_y - DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ if (exponent_x <= exponent_z)
+ res = ((UINT64) exponent_x) << 53;
+ else
+ res = ((UINT64) exponent_z) << 53;
+ if ((sign_x ^ sign_y) == sign_z)
+ res |= sign_z;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ else if (rnd_mode == ROUNDING_DOWN)
+ res |= 0x8000000000000000ull;
+#endif
+#endif
+ BID_RETURN (res);
+ }
+ }
+ }
+
+ /* get binary coefficients of x and y */
+
+ //--- get number of bits in the coefficients of x and y ---
+ // version 2 (original)
+ tempx.d = (double) coefficient_x;
+ bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52);
+
+ tempy.d = (double) coefficient_y;
+ bin_expon_cy = ((tempy.i & MASK_BINARY_EXPONENT) >> 52);
+
+ // magnitude estimate for coefficient_x*coefficient_y is
+ // 2^(unbiased_bin_expon_cx + unbiased_bin_expon_cx)
+ bin_expon_product = bin_expon_cx + bin_expon_cy;
+
+ // check if coefficient_x*coefficient_y<2^(10*k+3)
+ // equivalent to unbiased_bin_expon_cx + unbiased_bin_expon_cx < 10*k+1
+ if (bin_expon_product < UPPER_EXPON_LIMIT + 2 * BINARY_EXPONENT_BIAS) {
+ // easy multiply
+ C64 = coefficient_x * coefficient_y;
+ final_exponent = exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS;
+ if ((final_exponent > 0) || (!coefficient_z)) {
+ res =
+ get_add64 (sign_x ^ sign_y,
+ final_exponent, C64, sign_z, exponent_z, coefficient_z, rnd_mode, pfpsf);
+ BID_RETURN (res);
+ } else {
+ P.w[0] = C64;
+ P.w[1] = 0;
+ extra_digits = 0;
+ }
+ } else {
+ if (!coefficient_z) {
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_mul (&res, px,
+ py _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res =
+ bid64_mul (x,
+ y _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ BID_RETURN (res);
+ }
+ // get 128-bit product: coefficient_x*coefficient_y
+ __mul_64x64_to_128 (P, coefficient_x, coefficient_y);
+
+ // tighten binary range of P: leading bit is 2^bp
+ // unbiased_bin_expon_product <= bp <= unbiased_bin_expon_product+1
+ bin_expon_product -= 2 * BINARY_EXPONENT_BIAS;
+ __tight_bin_range_128 (bp, P, bin_expon_product);
+
+ // get number of decimal digits in the product
+ digits_p = estimate_decimal_digits[bp];
+ if (!(__unsigned_compare_gt_128 (power10_table_128[digits_p], P)))
+ digits_p++; // if power10_table_128[digits_p] <= P
+
+ // determine number of decimal digits to be rounded out
+ extra_digits = digits_p - MAX_FORMAT_DIGITS;
+ final_exponent =
+ exponent_x + exponent_y + extra_digits - DECIMAL_EXPONENT_BIAS;
+ }
+
+ if (((unsigned) final_exponent) >= 3 * 256) {
+ if (final_exponent < 0) {
+ //--- get number of bits in the coefficients of z ---
+ tempx.d = (double) coefficient_z;
+ bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+ // get number of decimal digits in the coeff_x
+ digits_z = estimate_decimal_digits[bin_expon_cx];
+ if (coefficient_z >= power10_table_128[digits_z].w[0])
+ digits_z++;
+ // underflow
+ if ((final_exponent + 16 < 0)
+ || (exponent_z + digits_z > 33 + final_exponent)) {
+ res =
+ BID_normalize (sign_z, exponent_z, coefficient_z,
+ sign_x ^ sign_y, 1, rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+
+ ez = exponent_z + digits_z - 16;
+ if (ez < 0)
+ ez = 0;
+ scale_z = exponent_z - ez;
+ coefficient_z *= power10_table_128[scale_z].w[0];
+ ey = final_exponent - extra_digits;
+ extra_digits = ez - ey;
+ if (extra_digits > 33) {
+ res =
+ BID_normalize (sign_z, exponent_z, coefficient_z,
+ sign_x ^ sign_y, 1, rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+ //else // extra_digits<=32
+
+ if (extra_digits > 17) {
+ CYh = __truncate (P, 16);
+ // get remainder
+ T = power10_table_128[16].w[0];
+ __mul_64x64_to_64 (CY0L, CYh, T);
+ remainder_y = P.w[0] - CY0L;
+
+ extra_digits -= 16;
+ P.w[0] = CYh;
+ P.w[1] = 0;
+ } else
+ remainder_y = 0;
+
+ // align coeff_x, CYh
+ __mul_64x64_to_128 (CZ, coefficient_z,
+ power10_table_128[extra_digits].w[0]);
+
+ if (sign_z == (sign_y ^ sign_x)) {
+ __add_128_128 (CT, CZ, P);
+ if (__unsigned_compare_ge_128
+ (CT, power10_table_128[16 + extra_digits])) {
+ extra_digits++;
+ ez++;
+ }
+ } else {
+ if (remainder_y && (__unsigned_compare_ge_128 (CZ, P))) {
+ P.w[0]++;
+ if (!P.w[0])
+ P.w[1]++;
+ }
+ __sub_128_128 (CT, CZ, P);
+ if (((SINT64) CT.w[1]) < 0) {
+ sign_z = sign_y ^ sign_x;
+ CT.w[0] = 0 - CT.w[0];
+ CT.w[1] = 0 - CT.w[1];
+ if (CT.w[0])
+ CT.w[1]--;
+ } else if(!(CT.w[1]|CT.w[0]))
+ sign_z = (rnd_mode!=ROUNDING_DOWN)? 0: 0x8000000000000000ull;
+ if (ez
+ &&
+ (__unsigned_compare_gt_128
+ (power10_table_128[15 + extra_digits], CT))) {
+ extra_digits--;
+ ez--;
+ }
+ }
+
+#ifdef SET_STATUS_FLAGS
+ uf_status = 0;
+ if ((!ez)
+ &&
+ __unsigned_compare_gt_128 (power10_table_128
+ [extra_digits + 15], CT)) {
+ rmode = rnd_mode;
+ if (sign_z && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ //__add_128_64(PU, CT, round_const_table[rmode][extra_digits]);
+ PU = power10_table_128[extra_digits + 15];
+ PU.w[0]--;
+ if (__unsigned_compare_gt_128 (PU, CT)
+ || (rmode == ROUNDING_DOWN)
+ || (rmode == ROUNDING_TO_ZERO))
+ uf_status = UNDERFLOW_EXCEPTION;
+ else if (extra_digits < 2) {
+ if ((rmode == ROUNDING_UP)) {
+ if (!extra_digits)
+ uf_status = UNDERFLOW_EXCEPTION;
+ else {
+ if (remainder_y && (sign_z != (sign_y ^ sign_x)))
+ remainder_y = power10_table_128[16].w[0] - remainder_y;
+
+ if (power10_table_128[15].w[0] > remainder_y)
+ uf_status = UNDERFLOW_EXCEPTION;
+ }
+ } else // RN or RN_away
+ {
+ if (remainder_y && (sign_z != (sign_y ^ sign_x)))
+ remainder_y = power10_table_128[16].w[0] - remainder_y;
+
+ if (!extra_digits) {
+ remainder_y += round_const_table[rmode][15];
+ if (remainder_y < power10_table_128[16].w[0])
+ uf_status = UNDERFLOW_EXCEPTION;
+ } else {
+ if (remainder_y < round_const_table[rmode][16])
+ uf_status = UNDERFLOW_EXCEPTION;
+ }
+ }
+ //__set_status_flags (pfpsf, uf_status);
+ }
+ }
+#endif
+ res =
+ __bid_full_round64_remainder (sign_z, ez - extra_digits, CT,
+ extra_digits, remainder_y,
+ rnd_mode, pfpsf, uf_status);
+ BID_RETURN (res);
+
+ } else {
+ if ((sign_z == (sign_x ^ sign_y))
+ || (final_exponent > 3 * 256 + 15)) {
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, final_exponent,
+ 1000000000000000ull, rnd_mode,
+ pfpsf);
+ BID_RETURN (res);
+ }
+ }
+ }
+
+
+ if (extra_digits > 0) {
+ res =
+ get_add128 (sign_z, exponent_z, coefficient_z, sign_x ^ sign_y,
+ final_exponent, P, extra_digits, rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+ // go to convert_format and exit
+ else {
+ C64 = __low_64 (P);
+
+ res =
+ get_add64 (sign_x ^ sign_y,
+ exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS, C64,
+ sign_z, exponent_z, coefficient_z,
+ rnd_mode, pfpsf);
+ BID_RETURN (res);
+ }
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_logb.c b/gcc-4.9/libgcc/config/libbid/bid64_logb.c
new file mode 100644
index 000000000..ad1125fc5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_logb.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define MAX_FORMAT_DIGITS 16
+#define DECIMAL_EXPONENT_BIAS 398
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_logb (int * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x;
+#else
+
+int
+bid64_logb (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 sign_x, coefficient_x;
+ int_double dx;
+ int exponent_x, bin_expon_cx, digits;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ x = *px;
+#endif
+ // unpack arguments, check for NaN or Infinity
+ if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) {
+ // x is Inf. or NaN
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (0x80000000);
+ }
+ // find number of digits in coefficient
+ if (coefficient_x >= 1000000000000000ull) {
+ digits = 16;
+ } else {
+ dx.d = (double)coefficient_x; // exact conversion;
+ bin_expon_cx = (int)(dx.i >> 52) - 1023;
+ digits = estimate_decimal_digits[bin_expon_cx];
+ if (coefficient_x >= power10_table_128[digits].w[0])
+ digits++;
+ }
+ exponent_x = exponent_x - DECIMAL_EXPONENT_BIAS + digits - 1;
+
+ BID_RETURN (exponent_x);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_minmax.c b/gcc-4.9/libgcc/config/libbid/bid64_minmax.c
new file mode 100644
index 000000000..e54946b18
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_minmax.c
@@ -0,0 +1,854 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64 minimum function - returns greater of two numbers
+ *****************************************************************************/
+
+static const UINT64 mult_factor[16] = {
+ 1ull, 10ull, 100ull, 1000ull,
+ 10000ull, 100000ull, 1000000ull, 10000000ull,
+ 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull,
+ 1000000000000ull, 10000000000000ull,
+ 100000000000000ull, 1000000000000000ull
+};
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_minnum (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+UINT64
+bid64_minnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT64 res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ // check for non-canonical x
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NaN
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull) {
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ x = x & (MASK_SIGN | MASK_INF);
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // check for non-canonical y
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NaN
+ y = y & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((y & 0x0003ffffffffffffull) > 999999999999999ull) {
+ y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity
+ y = y & (MASK_SIGN | MASK_INF);
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // NaN (CASE1)
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x = x & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y = y & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal, return either number
+ if (x == y) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return x
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // x is pos infinity, return y
+ else {
+ res = y;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return y
+ // if y is negative infinity, then x is greater, return x
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore
+ // ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (sig_y == 0) {
+ y_is_zero = 1;
+ }
+
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, neither is greater => return either
+ res = y;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // is x is zero, it is greater if Y is negative
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // is y is zero, X is greater if it is positive
+ res = ((x & MASK_SIGN) != MASK_SIGN) ? y : x;;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN) ? y : x; // difference cannot be >10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = y;
+ BID_RETURN (res);
+ }
+
+ res = (((sig_n_prime.w[1] > 0)
+ || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN)) ? y : x;
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // if postitive, return whichever significand is larger (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = y;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] == 0)
+ && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN)) ? y : x;
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64 minimum magnitude function - returns greater of two numbers
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_minnum_mag (UINT64 * pres, UINT64 * px,
+ UINT64 * py _EXC_FLAGS_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+UINT64
+bid64_minnum_mag (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT64 res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+
+ // check for non-canonical x
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NaN
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull) {
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ x = x & (MASK_SIGN | MASK_INF);
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // check for non-canonical y
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NaN
+ y = y & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((y & 0x0003ffffffffffffull) > 999999999999999ull) {
+ y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity
+ y = y & (MASK_SIGN | MASK_INF);
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // NaN (CASE1)
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x = x & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y = y & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal, return either number
+ if (x == y) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // x is infinity, its magnitude is greater than or equal to y
+ // return x only if y is infinity and x is negative
+ res = ((x & MASK_SIGN) == MASK_SIGN
+ && (y & MASK_INF) == MASK_INF) ? x : y;
+ BID_RETURN (res);
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // y is infinity, then it must be greater in magnitude, return x
+ res = x;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore
+ // ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (sig_x == 0) {
+ res = x; // x_is_zero, its magnitude must be smaller than y
+ BID_RETURN (res);
+ }
+ if (sig_y == 0) {
+ res = y; // y_is_zero, its magnitude must be smaller than x
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = y;
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = y; // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // now, sig_n_prime has: sig_x * 10^(exp_x-exp_y), this is
+ // the compensated signif.
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ // two numbers are equal, return minNum(x,y)
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x;
+ BID_RETURN (res);
+ }
+ // now, if compensated_x (sig_n_prime) is greater than y, return y,
+ // otherwise return x
+ res = ((sig_n_prime.w[1] != 0) || sig_n_prime.w[0] > sig_y) ? y : x;
+ BID_RETURN (res);
+ }
+ // exp_y must be greater than exp_x, thus adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? y : x;
+ // two numbers are equal, return either
+ BID_RETURN (res);
+ }
+
+ res = ((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ? y : x;
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64 maximum function - returns greater of two numbers
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_maxnum (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+UINT64
+bid64_maxnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT64 res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ // check for non-canonical x
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NaN
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull) {
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ x = x & (MASK_SIGN | MASK_INF);
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // check for non-canonical y
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NaN
+ y = y & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((y & 0x0003ffffffffffffull) > 999999999999999ull) {
+ y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity
+ y = y & (MASK_SIGN | MASK_INF);
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // NaN (CASE1)
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x = x & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y = y & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal (not Greater).
+ if (x == y) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x is neg infinity, there is no way it is greater than y, return y
+ // x is pos infinity, it is greater, unless y is positive infinity =>
+ // return y!=pos_infinity
+ if (((x & MASK_SIGN) == MASK_SIGN)) {
+ res = y;
+ BID_RETURN (res);
+ } else {
+ res = (((y & MASK_INF) != MASK_INF)
+ || ((y & MASK_SIGN) == MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so if y is positive infinity, then x is less, return y
+ // if y is negative infinity, then x is greater, return x
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore
+ // ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (sig_x == 0) {
+ x_is_zero = 1;
+ }
+ if (sig_y == 0) {
+ y_is_zero = 1;
+ }
+
+ if (x_is_zero && y_is_zero) {
+ // if both numbers are zero, neither is greater => return NOTGREATERTHAN
+ res = y;
+ BID_RETURN (res);
+ } else if (x_is_zero) {
+ // is x is zero, it is greater if Y is negative
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ } else if (y_is_zero) {
+ // is y is zero, X is greater if it is positive
+ res = ((x & MASK_SIGN) != MASK_SIGN) ? x : y;;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGN (CASE5)
+ // now, if the sign bits differ, x is greater if y is negative
+ if (((x ^ y) & MASK_SIGN) == MASK_SIGN) {
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN) ? x : y;
+ // difference cannot be > 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // if postitive, return whichever significand is larger
+ // (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ res = y;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] > 0)
+ || sig_n_prime.w[0] > sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // if postitive, return whichever significand is larger (converse if negative)
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = y;
+ BID_RETURN (res);
+ }
+ res = (((sig_n_prime.w[1] == 0)
+ && (sig_x > sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN)) ? x : y;
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64 maximum magnitude function - returns greater of two numbers
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_maxnum_mag (UINT64 * pres, UINT64 * px,
+ UINT64 * py _EXC_FLAGS_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+UINT64
+bid64_maxnum_mag (UINT64 x, UINT64 y _EXC_FLAGS_PARAM) {
+#endif
+
+ UINT64 res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y;
+ UINT128 sig_n_prime;
+
+ // check for non-canonical x
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NaN
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull) {
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ x = x & (MASK_SIGN | MASK_INF);
+ } else { // x is not special
+ // check for non-canonical values - treated as zero
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // check for non-canonical y
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NaN
+ y = y & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((y & 0x0003ffffffffffffull) > 999999999999999ull) {
+ y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ }
+ } else if ((y & MASK_INF) == MASK_INF) { // check for Infinity
+ y = y & (MASK_SIGN | MASK_INF);
+ } else { // y is not special
+ // check for non-canonical values - treated as zero
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11, then the exponent is G[0:w+1]
+ if (((y & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ y = (y & MASK_SIGN) | ((y & MASK_BINARY_EXPONENT2) << 2);
+ } // else canonical
+ } // else canonical
+ }
+
+ // NaN (CASE1)
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNaN
+ // if x is SNAN, then return quiet (x)
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ x = x & 0xfdffffffffffffffull; // quietize x
+ res = x;
+ } else { // x is QNaN
+ if ((y & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ *pfpsf |= INVALID_EXCEPTION; // set invalid flag
+ }
+ res = x;
+ } else {
+ res = y;
+ }
+ }
+ BID_RETURN (res);
+ } else if ((y & MASK_NAN) == MASK_NAN) { // y is NaN, but x is not
+ if ((y & MASK_SNAN) == MASK_SNAN) {
+ *pfpsf |= INVALID_EXCEPTION; // set exception if SNaN
+ y = y & 0xfdffffffffffffffull; // quietize y
+ res = y;
+ } else {
+ // will return x (which is not NaN)
+ res = x;
+ }
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal, return either number
+ if (x == y) {
+ res = x;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // x is infinity, its magnitude is greater than or equal to y
+ // return y as long as x isn't negative infinity
+ res = ((x & MASK_SIGN) == MASK_SIGN
+ && (y & MASK_INF) == MASK_INF) ? y : x;
+ BID_RETURN (res);
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // y is infinity, then it must be greater in magnitude
+ res = y;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ }
+
+ // ZERO (CASE4)
+ // some properties:
+ // (+ZERO == -ZERO) => therefore
+ // ignore the sign, and neither number is greater
+ // (ZERO x 10^A == ZERO x 10^B) for any valid A, B =>
+ // ignore the exponent field
+ // (Any non-canonical # is considered 0)
+ if (sig_x == 0) {
+ res = y; // x_is_zero, its magnitude must be smaller than y
+ BID_RETURN (res);
+ }
+ if (sig_y == 0) {
+ res = x; // y_is_zero, its magnitude must be smaller than x
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = x;
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = y;
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = x; // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = y;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down to the compensated significand
+ if (exp_x > exp_y) { // to simplify the loop below,
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // now, sig_n_prime has: sig_x * 10^(exp_x-exp_y),
+ // this is the compensated signif.
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ // two numbers are equal, return maxNum(x,y)
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y;
+ BID_RETURN (res);
+ }
+ // now, if compensated_x (sig_n_prime) is greater than y return y,
+ // otherwise return x
+ res = ((sig_n_prime.w[1] != 0) || sig_n_prime.w[0] > sig_y) ? x : y;
+ BID_RETURN (res);
+ }
+ // exp_y must be greater than exp_x, thus adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = ((y & MASK_SIGN) == MASK_SIGN) ? x : y;
+ // two numbers are equal, return either
+ BID_RETURN (res);
+ }
+
+ res = ((sig_n_prime.w[1] == 0) && (sig_x > sig_n_prime.w[0])) ? x : y;
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_mul.c b/gcc-4.9/libgcc/config/libbid/bid64_mul.c
new file mode 100644
index 000000000..213fc68eb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_mul.c
@@ -0,0 +1,374 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID64 multiply
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * if(number_digits(coefficient_x)+number_digits(coefficient_y) guaranteed
+ * below 16)
+ * return get_BID64(sign_x^sign_y, exponent_x + exponent_y - dec_bias,
+ * coefficient_x*coefficient_y)
+ * else
+ * get long product: coefficient_x*coefficient_y
+ * determine number of digits to round off (extra_digits)
+ * rounding is performed as a 128x128-bit multiplication by
+ * 2^M[extra_digits]/10^extra_digits, followed by a shift
+ * M[extra_digits] is sufficiently large for required accuracy
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_mul (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x, y;
+#else
+
+UINT64
+bid64_mul (UINT64 x,
+ UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 P, PU, C128, Q_high, Q_low, Stemp;
+ UINT64 sign_x, sign_y, coefficient_x, coefficient_y;
+ UINT64 C64, remainder_h, carry, CY, res;
+ UINT64 valid_x, valid_y;
+ int_double tempx, tempy;
+ int extra_digits, exponent_x, exponent_y, bin_expon_cx, bin_expon_cy,
+ bin_expon_product;
+ int rmode, digits_p, bp, amount, amount2, final_exponent, round_up;
+ unsigned status, uf_status;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+ y = *py;
+#endif
+
+ valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x);
+ valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y);
+
+ // unpack arguments, check for NaN or Infinity
+ if (!valid_x) {
+
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // x is Inf. or NaN
+
+ // test if x is NaN
+ if ((x & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (coefficient_x & QUIET_MASK64);
+ }
+ // x is Infinity?
+ if ((x & INFINITY_MASK64) == INFINITY_MASK64) {
+ // check if y is 0
+ if (((y & INFINITY_MASK64) != INFINITY_MASK64)
+ && !coefficient_y) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // y==0 , return NaN
+ BID_RETURN (NAN_MASK64);
+ }
+ // check if y is NaN
+ if ((y & NAN_MASK64) == NAN_MASK64)
+ // y==NaN , return NaN
+ BID_RETURN (coefficient_y & QUIET_MASK64);
+ // otherwise return +/-Inf
+ BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64);
+ }
+ // x is 0
+ if (((y & INFINITY_MASK64) != INFINITY_MASK64)) {
+ if ((y & SPECIAL_ENCODING_MASK64) == SPECIAL_ENCODING_MASK64)
+ exponent_y = ((UINT32) (y >> 51)) & 0x3ff;
+ else
+ exponent_y = ((UINT32) (y >> 53)) & 0x3ff;
+ sign_y = y & 0x8000000000000000ull;
+
+ exponent_x += exponent_y - DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53));
+ }
+ }
+ if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y & NAN_MASK64) == NAN_MASK64) {
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (coefficient_y & QUIET_MASK64);
+ }
+ // y is Infinity?
+ if ((y & INFINITY_MASK64) == INFINITY_MASK64) {
+ // check if x is 0
+ if (!coefficient_x) {
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+ // x==0, return NaN
+ BID_RETURN (NAN_MASK64);
+ }
+ // otherwise return +/-Inf
+ BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64);
+ }
+ // y is 0
+ exponent_x += exponent_y - DECIMAL_EXPONENT_BIAS;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ else if (exponent_x < 0)
+ exponent_x = 0;
+ BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53));
+ }
+ //--- get number of bits in the coefficients of x and y ---
+ // version 2 (original)
+ tempx.d = (double) coefficient_x;
+ bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52);
+ tempy.d = (double) coefficient_y;
+ bin_expon_cy = ((tempy.i & MASK_BINARY_EXPONENT) >> 52);
+
+ // magnitude estimate for coefficient_x*coefficient_y is
+ // 2^(unbiased_bin_expon_cx + unbiased_bin_expon_cx)
+ bin_expon_product = bin_expon_cx + bin_expon_cy;
+
+ // check if coefficient_x*coefficient_y<2^(10*k+3)
+ // equivalent to unbiased_bin_expon_cx + unbiased_bin_expon_cx < 10*k+1
+ if (bin_expon_product < UPPER_EXPON_LIMIT + 2 * BINARY_EXPONENT_BIAS) {
+ // easy multiply
+ C64 = coefficient_x * coefficient_y;
+
+ res =
+ get_BID64_small_mantissa (sign_x ^ sign_y,
+ exponent_x + exponent_y -
+ DECIMAL_EXPONENT_BIAS, C64, rnd_mode,
+ pfpsf);
+ BID_RETURN (res);
+ } else {
+ uf_status = 0;
+ // get 128-bit product: coefficient_x*coefficient_y
+ __mul_64x64_to_128 (P, coefficient_x, coefficient_y);
+
+ // tighten binary range of P: leading bit is 2^bp
+ // unbiased_bin_expon_product <= bp <= unbiased_bin_expon_product+1
+ bin_expon_product -= 2 * BINARY_EXPONENT_BIAS;
+
+ __tight_bin_range_128 (bp, P, bin_expon_product);
+
+ // get number of decimal digits in the product
+ digits_p = estimate_decimal_digits[bp];
+ if (!(__unsigned_compare_gt_128 (power10_table_128[digits_p], P)))
+ digits_p++; // if power10_table_128[digits_p] <= P
+
+ // determine number of decimal digits to be rounded out
+ extra_digits = digits_p - MAX_FORMAT_DIGITS;
+ final_exponent =
+ exponent_x + exponent_y + extra_digits - DECIMAL_EXPONENT_BIAS;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x ^ sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+
+ round_up = 0;
+ if (((unsigned) final_exponent) >= 3 * 256) {
+ if (final_exponent < 0) {
+ // underflow
+ if (final_exponent + 16 < 0) {
+ res = sign_x ^ sign_y;
+ __set_status_flags (pfpsf,
+ UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ if (rmode == ROUNDING_UP)
+ res |= 1;
+ BID_RETURN (res);
+ }
+
+ uf_status = UNDERFLOW_EXCEPTION;
+ if (final_exponent == -1) {
+ __add_128_64 (PU, P, round_const_table[rmode][extra_digits]);
+ if (__unsigned_compare_ge_128
+ (PU, power10_table_128[extra_digits + 16]))
+ uf_status = 0;
+ }
+ extra_digits -= final_exponent;
+ final_exponent = 0;
+
+ if (extra_digits > 17) {
+ __mul_128x128_full (Q_high, Q_low, P, reciprocals10_128[16]);
+
+ amount = recip_scale[16];
+ __shr_128 (P, Q_high, amount);
+
+ // get sticky bits
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & Q_high.w[0];
+
+ extra_digits -= 16;
+ if (remainder_h || (Q_low.w[1] > reciprocals10_128[16].w[1]
+ || (Q_low.w[1] ==
+ reciprocals10_128[16].w[1]
+ && Q_low.w[0] >=
+ reciprocals10_128[16].w[0]))) {
+ round_up = 1;
+ __set_status_flags (pfpsf,
+ UNDERFLOW_EXCEPTION |
+ INEXACT_EXCEPTION);
+ P.w[0] = (P.w[0] << 3) + (P.w[0] << 1);
+ P.w[0] |= 1;
+ extra_digits++;
+ }
+ }
+ } else {
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, final_exponent,
+ 1000000000000000ull, rnd_mode,
+ pfpsf);
+ BID_RETURN (res);
+ }
+ }
+
+
+ if (extra_digits > 0) {
+ // will divide by 10^(digits_p - 16)
+
+ // add a constant to P, depending on rounding mode
+ // 0.5*10^(digits_p - 16) for round-to-nearest
+ __add_128_64 (P, P, round_const_table[rmode][extra_digits]);
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Q_high, Q_low, P,
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+ __shr_128 (C128, Q_high, amount);
+
+ C64 = __low_64 (C128);
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if ((C64 & 1) && !round_up) {
+ // check whether fractional part of initial_P/10^extra_digits
+ // is exactly .5
+ // this is the same as fractional part of
+ // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero
+
+ // get remainder
+ remainder_h = Q_high.w[0] << (64 - amount);
+
+ // test whether fractional part is 0
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0]))) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status = INEXACT_EXCEPTION | uf_status;
+
+ // get remainder
+ remainder_h = Q_high.w[0] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Q_low.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1],
+ reciprocals10_128[extra_digits].w[1], CY);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ __set_status_flags (pfpsf, status);
+#endif
+
+ // convert to BID and return
+ res =
+ fast_get_BID64_check_OF (sign_x ^ sign_y, final_exponent, C64,
+ rmode, pfpsf);
+ BID_RETURN (res);
+ }
+ // go to convert_format and exit
+ C64 = __low_64 (P);
+ res =
+ get_BID64 (sign_x ^ sign_y,
+ exponent_x + exponent_y - DECIMAL_EXPONENT_BIAS, C64,
+ rmode, pfpsf);
+ BID_RETURN (res);
+ }
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_next.c b/gcc-4.9/libgcc/config/libbid/bid64_next.c
new file mode 100644
index 000000000..c9c982a2d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_next.c
@@ -0,0 +1,481 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64 nextup
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_nextup (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q1, ind;
+ UINT64 C1; // C1 represents x_signif (UINT64)
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ if (!(x & 0x8000000000000000ull)) { // x is +inf
+ res = 0x7800000000000000ull;
+ } else { // x is -inf
+ res = 0xf7fb86f26fc0ffffull; // -MAXFP = -999...99 * 10^emax
+ }
+ BID_RETURN (res);
+ }
+ // unpack the argument
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000001ull; // MINFP = 1 * 10^emin
+ } else { // x is not special and is not zero
+ if (x == 0x77fb86f26fc0ffffull) {
+ // x = +MAXFP = 999...99 * 10^emax
+ res = 0x7800000000000000ull; // +inf
+ } else if (x == 0x8000000000000001ull) {
+ // x = -MINFP = 1...99 * 10^emin
+ res = 0x8000000000000000ull; // -0
+ } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ // can add/subtract 1 ulp to the significand
+
+ // Note: we could check here if x >= 10^16 to speed up the case q1 =16
+ // q1 = nr. of decimal digits in x (1 <= q1 <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= MASK_BINARY_OR2) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q1 = nr_digits[x_nr_bits - 1].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q1++;
+ }
+ // if q1 < P16 then pad the significand with zeros
+ if (q1 < P16) {
+ if (x_exp > (UINT64) (P16 - q1)) {
+ ind = P16 - q1; // 1 <= ind <= P16 - 1
+ // pad with P16 - q1 zeros, until exponent = emin
+ // C1 = C1 * 10^ind
+ C1 = C1 * ten2k64[ind];
+ x_exp = x_exp - ind;
+ } else { // pad with zeros until the exponent reaches emin
+ ind = x_exp;
+ C1 = C1 * ten2k64[ind];
+ x_exp = EXP_MIN;
+ }
+ }
+ if (!x_sign) { // x > 0
+ // add 1 ulp (add 1 to the significand)
+ C1++;
+ if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16
+ C1 = 0x00038d7ea4c68000ull; // C1 = 10^15
+ x_exp++;
+ }
+ // Ok, because MAXFP = 999...99 * 10^emax was caught already
+ } else { // x < 0
+ // subtract 1 ulp (subtract 1 from the significand)
+ C1--;
+ if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1
+ C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1
+ x_exp--;
+ }
+ }
+ // assemble the result
+ // if significand has 54 bits
+ if (C1 & MASK_BINARY_OR2) {
+ res =
+ x_sign | (x_exp << 51) | MASK_STEERING_BITS | (C1 &
+ MASK_BINARY_SIG2);
+ } else { // significand fits in 53 bits
+ res = x_sign | (x_exp << 53) | C1;
+ }
+ } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ } // end x is not special and is not zero
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64 nextdown
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_nextdown (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q1, ind;
+ UINT64 C1; // C1 represents x_signif (UINT64)
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ if (x & 0x8000000000000000ull) { // x is -inf
+ res = 0xf800000000000000ull;
+ } else { // x is +inf
+ res = 0x77fb86f26fc0ffffull; // +MAXFP = +999...99 * 10^emax
+ }
+ BID_RETURN (res);
+ }
+ // unpack the argument
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x8000000000000001ull; // -MINFP = -1 * 10^emin
+ } else { // x is not special and is not zero
+ if (x == 0xf7fb86f26fc0ffffull) {
+ // x = -MAXFP = -999...99 * 10^emax
+ res = 0xf800000000000000ull; // -inf
+ } else if (x == 0x0000000000000001ull) {
+ // x = +MINFP = 1...99 * 10^emin
+ res = 0x0000000000000000ull; // -0
+ } else { // -MAXFP + 1ulp <= x <= -MINFP OR MINFP + 1 ulp <= x <= MAXFP
+ // can add/subtract 1 ulp to the significand
+
+ // Note: we could check here if x >= 10^16 to speed up the case q1 =16
+ // q1 = nr. of decimal digits in x (1 <= q1 <= 16)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid
+ // rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q1 = nr_digits[x_nr_bits - 1].digits;
+ if (q1 == 0) {
+ q1 = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q1++;
+ }
+ // if q1 < P16 then pad the significand with zeros
+ if (q1 < P16) {
+ if (x_exp > (UINT64) (P16 - q1)) {
+ ind = P16 - q1; // 1 <= ind <= P16 - 1
+ // pad with P16 - q1 zeros, until exponent = emin
+ // C1 = C1 * 10^ind
+ C1 = C1 * ten2k64[ind];
+ x_exp = x_exp - ind;
+ } else { // pad with zeros until the exponent reaches emin
+ ind = x_exp;
+ C1 = C1 * ten2k64[ind];
+ x_exp = EXP_MIN;
+ }
+ }
+ if (x_sign) { // x < 0
+ // add 1 ulp (add 1 to the significand)
+ C1++;
+ if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16
+ C1 = 0x00038d7ea4c68000ull; // C1 = 10^15
+ x_exp++;
+ // Ok, because -MAXFP = -999...99 * 10^emax was caught already
+ }
+ } else { // x > 0
+ // subtract 1 ulp (subtract 1 from the significand)
+ C1--;
+ if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1
+ C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1
+ x_exp--;
+ }
+ }
+ // assemble the result
+ // if significand has 54 bits
+ if (C1 & MASK_BINARY_OR2) {
+ res =
+ x_sign | (x_exp << 51) | MASK_STEERING_BITS | (C1 &
+ MASK_BINARY_SIG2);
+ } else { // significand fits in 53 bits
+ res = x_sign | (x_exp << 53) | C1;
+ }
+ } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp
+ } // end x is not special and is not zero
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64 nextafter
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_nextafter (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+UINT64
+bid64_nextafter (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res;
+ UINT64 tmp1, tmp2;
+ FPSC tmp_fpsf = 0; // dummy fpsf for calls to comparison functions
+ int res1, res2;
+
+ // check for NaNs or infinities
+ if (((x & MASK_SPECIAL) == MASK_SPECIAL) ||
+ ((y & MASK_SPECIAL) == MASK_SPECIAL)) {
+ // x is NaN or infinity or y is NaN or infinity
+
+ if ((x & MASK_NAN) == MASK_NAN) { // x is NAN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (x)
+ res = x & 0xfdffffffffffffffull;
+ } else { // x is QNaN
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ }
+ // return x
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((y & MASK_NAN) == MASK_NAN) { // y is NAN
+ if ((y & 0x0003ffffffffffffull) > 999999999999999ull)
+ y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ y = y & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (y)
+ res = y & 0xfdffffffffffffffull;
+ } else { // y is QNaN
+ // return y
+ res = y;
+ }
+ BID_RETURN (res);
+ } else { // at least one is infinity
+ if ((x & MASK_ANY_INF) == MASK_INF) { // x = inf
+ x = x & (MASK_SIGN | MASK_INF);
+ }
+ if ((y & MASK_ANY_INF) == MASK_INF) { // y = inf
+ y = y & (MASK_SIGN | MASK_INF);
+ }
+ }
+ }
+ // neither x nor y is NaN
+
+ // if not infinity, check for non-canonical values x (treated as zero)
+ if ((x & MASK_ANY_INF) != MASK_INF) { // x != inf
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull) {
+ // non-canonical
+ x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2);
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) x is unch.
+ ; // canonical
+ }
+ }
+ // no need to check for non-canonical y
+
+ // neither x nor y is NaN
+ tmp_fpsf = *pfpsf; // save fpsf
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_quiet_equal (&res1, px,
+ py _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ bid64_quiet_greater (&res2, px,
+ py _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#else
+ res1 =
+ bid64_quiet_equal (x,
+ y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+ res2 =
+ bid64_quiet_greater (x,
+ y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#endif
+ *pfpsf = tmp_fpsf; // restore fpsf
+ if (res1) { // x = y
+ // return x with the sign of y
+ res = (y & 0x8000000000000000ull) | (x & 0x7fffffffffffffffull);
+ } else if (res2) { // x > y
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_nextdown (&res,
+ px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#else
+ res =
+ bid64_nextdown (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#endif
+ } else { // x < y
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_nextup (&res, px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#else
+ res = bid64_nextup (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG);
+#endif
+ }
+ // if the operand x is finite but the result is infinite, signal
+ // overflow and inexact
+ if (((x & MASK_INF) != MASK_INF) && ((res & MASK_INF) == MASK_INF)) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the overflow flag
+ *pfpsf |= OVERFLOW_EXCEPTION;
+ }
+ // if the result is in (-10^emin, 10^emin), and is different from the
+ // operand x, signal underflow and inexact
+ tmp1 = 0x00038d7ea4c68000ull; // +100...0[16] * 10^emin
+ tmp2 = res & 0x7fffffffffffffffull;
+ tmp_fpsf = *pfpsf; // save fpsf
+#if DECIMAL_CALL_BY_REFERENCE
+ bid64_quiet_greater (&res1, &tmp1,
+ &tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+ bid64_quiet_not_equal (&res2, &x,
+ &res _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#else
+ res1 =
+ bid64_quiet_greater (tmp1,
+ tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+ res2 =
+ bid64_quiet_not_equal (x,
+ res _EXC_FLAGS_ARG _EXC_MASKS_ARG
+ _EXC_INFO_ARG);
+#endif
+ *pfpsf = tmp_fpsf; // restore fpsf
+ if (res1 && res2) {
+ // if (bid64_quiet_greater (tmp1, tmp2, &tmp_fpsf) &&
+ // bid64_quiet_not_equal (x, res, &tmp_fpsf)) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // set the underflow flag
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_noncomp.c b/gcc-4.9/libgcc/config/libbid/bid64_noncomp.c
new file mode 100644
index 000000000..3eee042c2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_noncomp.c
@@ -0,0 +1,954 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+static const UINT64 mult_factor[16] = {
+ 1ull, 10ull, 100ull, 1000ull,
+ 10000ull, 100000ull, 1000000ull, 10000000ull,
+ 100000000ull, 1000000000ull, 10000000000ull, 100000000000ull,
+ 1000000000000ull, 10000000000000ull,
+ 100000000000000ull, 1000000000000000ull
+};
+
+/*****************************************************************************
+ * BID64 non-computational functions:
+ * - bid64_isSigned
+ * - bid64_isNormal
+ * - bid64_isSubnormal
+ * - bid64_isFinite
+ * - bid64_isZero
+ * - bid64_isInf
+ * - bid64_isSignaling
+ * - bid64_isCanonical
+ * - bid64_isNaN
+ * - bid64_copy
+ * - bid64_negate
+ * - bid64_abs
+ * - bid64_copySign
+ * - bid64_class
+ * - bid64_sameQuantum
+ * - bid64_totalOrder
+ * - bid64_totalOrderMag
+ * - bid64_radix
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isSigned (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isSigned (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+}
+
+// return 1 iff x is not zero, nor NaN nor subnormal nor infinity
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isNormal (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isNormal (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT128 sig_x_prime;
+ UINT64 sig_x;
+ unsigned int exp_x;
+
+ if ((x & MASK_INF) == MASK_INF) { // x is either INF or NaN
+ res = 0;
+ } else {
+ // decode number into exponent and significand
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ // check for zero or non-canonical
+ if (sig_x > 9999999999999999ull || sig_x == 0) {
+ res = 0; // zero or non-canonical
+ BID_RETURN (res);
+ }
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ } else {
+ sig_x = (x & MASK_BINARY_SIG1);
+ if (sig_x == 0) {
+ res = 0; // zero
+ BID_RETURN (res);
+ }
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ }
+ // if exponent is less than -383, the number may be subnormal
+ // if (exp_x - 398 = -383) the number may be subnormal
+ if (exp_x < 15) {
+ __mul_64x64_to_128MACH (sig_x_prime, sig_x, mult_factor[exp_x]);
+ if (sig_x_prime.w[1] == 0
+ && sig_x_prime.w[0] < 1000000000000000ull) {
+ res = 0; // subnormal
+ } else {
+ res = 1; // normal
+ }
+ } else {
+ res = 1; // normal
+ }
+ }
+ BID_RETURN (res);
+}
+
+// return 1 iff x is not zero, nor NaN nor normal nor infinity
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isSubnormal (int *pres,
+ UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isSubnormal (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT128 sig_x_prime;
+ UINT64 sig_x;
+ unsigned int exp_x;
+
+ if ((x & MASK_INF) == MASK_INF) { // x is either INF or NaN
+ res = 0;
+ } else {
+ // decode number into exponent and significand
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ // check for zero or non-canonical
+ if (sig_x > 9999999999999999ull || sig_x == 0) {
+ res = 0; // zero or non-canonical
+ BID_RETURN (res);
+ }
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ } else {
+ sig_x = (x & MASK_BINARY_SIG1);
+ if (sig_x == 0) {
+ res = 0; // zero
+ BID_RETURN (res);
+ }
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ }
+ // if exponent is less than -383, the number may be subnormal
+ // if (exp_x - 398 = -383) the number may be subnormal
+ if (exp_x < 15) {
+ __mul_64x64_to_128MACH (sig_x_prime, sig_x, mult_factor[exp_x]);
+ if (sig_x_prime.w[1] == 0
+ && sig_x_prime.w[0] < 1000000000000000ull) {
+ res = 1; // subnormal
+ } else {
+ res = 0; // normal
+ }
+ } else {
+ res = 0; // normal
+ }
+ }
+ BID_RETURN (res);
+}
+
+//iff x is zero, subnormal or normal (not infinity or NaN)
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isFinite (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isFinite (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x & MASK_INF) != MASK_INF);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isZero (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isZero (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ // if infinity or nan, return 0
+ if ((x & MASK_INF) == MASK_INF) {
+ res = 0;
+ } else if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1]
+ // => sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ // if(sig_x > 9999999999999999ull) {return 1;}
+ res =
+ (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) >
+ 9999999999999999ull);
+ } else {
+ res = ((x & MASK_BINARY_SIG1) == 0);
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isInf (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isInf (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x & MASK_INF) == MASK_INF) && ((x & MASK_NAN) != MASK_NAN);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isSignaling (int *pres,
+ UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isSignaling (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x & MASK_SNAN) == MASK_SNAN);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isCanonical (int *pres,
+ UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isCanonical (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ if ((x & MASK_NAN) == MASK_NAN) { // NaN
+ if (x & 0x01fc000000000000ull) {
+ res = 0;
+ } else if ((x & 0x0003ffffffffffffull) > 999999999999999ull) { // payload
+ res = 0;
+ } else {
+ res = 1;
+ }
+ } else if ((x & MASK_INF) == MASK_INF) {
+ if (x & 0x03ffffffffffffffull) {
+ res = 0;
+ } else {
+ res = 1;
+ }
+ } else if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { // 54-bit coeff.
+ res =
+ (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) <=
+ 9999999999999999ull);
+ } else { // 53-bit coeff.
+ res = 1;
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_isNaN (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_isNaN (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+
+ res = ((x & MASK_NAN) == MASK_NAN);
+ BID_RETURN (res);
+}
+
+// copies a floating-point operand x to destination y, with no change
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_copy (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_copy (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+
+ res = x;
+ BID_RETURN (res);
+}
+
+// copies a floating-point operand x to destination y, reversing the sign
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_negate (UINT64 * pres,
+ UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_negate (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+
+ res = x ^ MASK_SIGN;
+ BID_RETURN (res);
+}
+
+// copies a floating-point operand x to destination y, changing the sign to positive
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_abs (UINT64 * pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_abs (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+
+ res = x & ~MASK_SIGN;
+ BID_RETURN (res);
+}
+
+// copies operand x to destination in the same format as x, but
+// with the sign of y
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_copySign (UINT64 * pres, UINT64 * px,
+ UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+UINT64
+bid64_copySign (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+
+ res = (x & ~MASK_SIGN) | (y & MASK_SIGN);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_class (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_class (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT128 sig_x_prime;
+ UINT64 sig_x;
+ int exp_x;
+
+ if ((x & MASK_NAN) == MASK_NAN) {
+ // is the NaN signaling?
+ if ((x & MASK_SNAN) == MASK_SNAN) {
+ res = signalingNaN;
+ BID_RETURN (res);
+ }
+ // if NaN and not signaling, must be quietNaN
+ res = quietNaN;
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) {
+ // is the Infinity negative?
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ res = negativeInfinity;
+ } else {
+ // otherwise, must be positive infinity
+ res = positiveInfinity;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // decode number into exponent and significand
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ // check for zero or non-canonical
+ if (sig_x > 9999999999999999ull || sig_x == 0) {
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ res = negativeZero;
+ } else {
+ res = positiveZero;
+ }
+ BID_RETURN (res);
+ }
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ } else {
+ sig_x = (x & MASK_BINARY_SIG1);
+ if (sig_x == 0) {
+ res =
+ ((x & MASK_SIGN) == MASK_SIGN) ? negativeZero : positiveZero;
+ BID_RETURN (res);
+ }
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ }
+ // if exponent is less than -383, number may be subnormal
+ // if (exp_x - 398 < -383)
+ if (exp_x < 15) { // sig_x *10^exp_x
+ __mul_64x64_to_128MACH (sig_x_prime, sig_x, mult_factor[exp_x]);
+ if (sig_x_prime.w[1] == 0
+ && (sig_x_prime.w[0] < 1000000000000000ull)) {
+ res =
+ ((x & MASK_SIGN) ==
+ MASK_SIGN) ? negativeSubnormal : positiveSubnormal;
+ BID_RETURN (res);
+ }
+ }
+ // otherwise, normal number, determine the sign
+ res =
+ ((x & MASK_SIGN) == MASK_SIGN) ? negativeNormal : positiveNormal;
+ BID_RETURN (res);
+}
+
+// true if the exponents of x and y are the same, false otherwise.
+// The special cases of sameQuantum (NaN, NaN) and sameQuantum (Inf, Inf) are
+// true.
+// If exactly one operand is infinite or exactly one operand is NaN, then false
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_sameQuantum (int *pres, UINT64 * px,
+ UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_sameQuantum (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ unsigned int exp_x, exp_y;
+
+ // if both operands are NaN, return true; if just one is NaN, return false
+ if ((x & MASK_NAN) == MASK_NAN || ((y & MASK_NAN) == MASK_NAN)) {
+ res = ((x & MASK_NAN) == MASK_NAN && (y & MASK_NAN) == MASK_NAN);
+ BID_RETURN (res);
+ }
+ // if both operands are INF, return true; if just one is INF, return false
+ if ((x & MASK_INF) == MASK_INF || (y & MASK_INF) == MASK_INF) {
+ res = ((x & MASK_INF) == MASK_INF && (y & MASK_INF) == MASK_INF);
+ BID_RETURN (res);
+ }
+ // decode exponents for both numbers, and return true if they match
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ }
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ }
+ res = (exp_x == exp_y);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_totalOrder (int *pres, UINT64 * px,
+ UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_totalOrder (UINT64 x, UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y, pyld_y, pyld_x;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ // NaN (CASE1)
+ // if x and y are unordered numerically because either operand is NaN
+ // (1) totalOrder(-NaN, number) is true
+ // (2) totalOrder(number, +NaN) is true
+ // (3) if x and y are both NaN:
+ // i) negative sign bit < positive sign bit
+ // ii) signaling < quiet for +NaN, reverse for -NaN
+ // iii) lesser payload < greater payload for +NaN (reverse for -NaN)
+ // iv) else if bitwise identical (in canonical form), return 1
+ if ((x & MASK_NAN) == MASK_NAN) {
+ // if x is -NaN
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ // return true, unless y is -NaN also
+ if ((y & MASK_NAN) != MASK_NAN || (y & MASK_SIGN) != MASK_SIGN) {
+ res = 1; // y is a number, return 1
+ BID_RETURN (res);
+ } else { // if y and x are both -NaN
+ // if x and y are both -sNaN or both -qNaN, we have to compare payloads
+ // this xnor statement evaluates to true if both are sNaN or qNaN
+ if (!
+ (((y & MASK_SNAN) == MASK_SNAN) ^ ((x & MASK_SNAN) ==
+ MASK_SNAN))) {
+ // it comes down to the payload. we want to return true if x has a
+ // larger payload, or if the payloads are equal (canonical forms
+ // are bitwise identical)
+ pyld_y = y & 0x0003ffffffffffffull;
+ pyld_x = x & 0x0003ffffffffffffull;
+ if (pyld_y > 999999999999999ull || pyld_y == 0) {
+ // if y is zero, x must be less than or numerically equal
+ // y's payload is 0
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if x is zero and y isn't, x has the smaller payload
+ // definitely (since we know y isn't 0 at this point)
+ if (pyld_x > 999999999999999ull || pyld_x == 0) {
+ // x's payload is 0
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (pyld_x >= pyld_y);
+ BID_RETURN (res);
+ } else {
+ // either x = -sNaN and y = -qNaN or x = -qNaN and y = -sNaN
+ res = (y & MASK_SNAN) == MASK_SNAN; // totalOrder(-qNaN, -sNaN) == 1
+ BID_RETURN (res);
+ }
+ }
+ } else { // x is +NaN
+ // return false, unless y is +NaN also
+ if ((y & MASK_NAN) != MASK_NAN || (y & MASK_SIGN) == MASK_SIGN) {
+ res = 0; // y is a number, return 1
+ BID_RETURN (res);
+ } else {
+ // x and y are both +NaN;
+ // must investigate payload if both quiet or both signaling
+ // this xnor statement will be true if both x and y are +qNaN or +sNaN
+ if (!
+ (((y & MASK_SNAN) == MASK_SNAN) ^ ((x & MASK_SNAN) ==
+ MASK_SNAN))) {
+ // it comes down to the payload. we want to return true if x has a
+ // smaller payload, or if the payloads are equal (canonical forms
+ // are bitwise identical)
+ pyld_y = y & 0x0003ffffffffffffull;
+ pyld_x = x & 0x0003ffffffffffffull;
+ // if x is zero and y isn't, x has the smaller
+ // payload definitely (since we know y isn't 0 at this point)
+ if (pyld_x > 999999999999999ull || pyld_x == 0) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ if (pyld_y > 999999999999999ull || pyld_y == 0) {
+ // if y is zero, x must be less than or numerically equal
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (pyld_x <= pyld_y);
+ BID_RETURN (res);
+ } else {
+ // return true if y is +qNaN and x is +sNaN
+ // (we know they're different bc of xor if_stmt above)
+ res = ((x & MASK_SNAN) == MASK_SNAN);
+ BID_RETURN (res);
+ }
+ }
+ }
+ } else if ((y & MASK_NAN) == MASK_NAN) {
+ // x is certainly not NAN in this case.
+ // return true if y is positive
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits are the same, these numbers are equal.
+ if (x == y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // OPPOSITE SIGNS (CASE 3)
+ // if signs are opposite, return 1 if x is negative
+ // (if x<y, totalOrder is true)
+ if (((x & MASK_SIGN) == MASK_SIGN) ^ ((y & MASK_SIGN) == MASK_SIGN)) {
+ res = (x & MASK_SIGN) == MASK_SIGN;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE4)
+ if ((x & MASK_INF) == MASK_INF) {
+ // if x==neg_inf, return (y == neg_inf)?1:0;
+ if ((x & MASK_SIGN) == MASK_SIGN) {
+ res = 1;
+ BID_RETURN (res);
+ } else {
+ // x is positive infinity, only return1 if y
+ // is positive infinity as well
+ // (we know y has same sign as x)
+ res = ((y & MASK_INF) == MASK_INF);
+ BID_RETURN (res);
+ }
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ // if y is -inf, x>y
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ if (sig_x == 0) {
+ x_is_zero = 1;
+ }
+ }
+
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ if (sig_y == 0) {
+ y_is_zero = 1;
+ }
+ }
+
+ // ZERO (CASE 5)
+ // if x and y represent the same entities, and
+ // both are negative , return true iff exp_x <= exp_y
+ if (x_is_zero && y_is_zero) {
+ if (!((x & MASK_SIGN) == MASK_SIGN) ^
+ ((y & MASK_SIGN) == MASK_SIGN)) {
+ // if signs are the same:
+ // totalOrder(x,y) iff exp_x >= exp_y for negative numbers
+ // totalOrder(x,y) iff exp_x <= exp_y for positive numbers
+ if (exp_x == exp_y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ res = (exp_x <= exp_y) ^ ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ } else {
+ // signs are different.
+ // totalOrder(-0, +0) is true
+ // totalOrder(+0, -0) is false
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ }
+ // if x is zero and y isn't, clearly x has the smaller payload.
+ if (x_is_zero) {
+ res = ((y & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if y is zero, and x isn't, clearly y has the smaller payload.
+ if (y_is_zero) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller,
+ // it is clear what needs to be done
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, it is
+ // definitely larger, so no need for compensation
+ if (exp_x - exp_y > 15) {
+ // difference cannot be greater than 10^15
+ res = ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, it is
+ // definitely smaller, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = ((x & MASK_SIGN) != MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down
+ // to the compensated significand
+ if (exp_x > exp_y) {
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+ // if x and y represent the same entities,
+ // and both are negative, return true iff exp_x <= exp_y
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ // case cannot occure, because all bits must
+ // be the same - would have been caught if (x==y)
+ res = (exp_x <= exp_y) ^ ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // if positive, return 1 if adjusted x is smaller than y
+ res = ((sig_n_prime.w[1] == 0)
+ && sig_n_prime.w[0] < sig_y) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // if x and y represent the same entities,
+ // and both are negative, return true iff exp_x <= exp_y
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ // Cannot occur, because all bits must be the same.
+ // Case would have been caught if (x==y)
+ res = (exp_x <= exp_y) ^ ((x & MASK_SIGN) == MASK_SIGN);
+ BID_RETURN (res);
+ }
+ // values are not equal, for positive numbers return 1
+ // if x is less than y. 0 otherwise
+ res = ((sig_n_prime.w[1] > 0)
+ || (sig_x < sig_n_prime.w[0])) ^ ((x & MASK_SIGN) ==
+ MASK_SIGN);
+ BID_RETURN (res);
+}
+
+// totalOrderMag is TotalOrder(abs(x), abs(y))
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_totalOrderMag (int *pres, UINT64 * px,
+ UINT64 * py _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+ UINT64 y = *py;
+#else
+int
+bid64_totalOrderMag (UINT64 x,
+ UINT64 y _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ int exp_x, exp_y;
+ UINT64 sig_x, sig_y, pyld_y, pyld_x;
+ UINT128 sig_n_prime;
+ char x_is_zero = 0, y_is_zero = 0;
+
+ // NaN (CASE 1)
+ // if x and y are unordered numerically because either operand is NaN
+ // (1) totalOrder(number, +NaN) is true
+ // (2) if x and y are both NaN:
+ // i) signaling < quiet for +NaN
+ // ii) lesser payload < greater payload for +NaN
+ // iii) else if bitwise identical (in canonical form), return 1
+ if ((x & MASK_NAN) == MASK_NAN) {
+ // x is +NaN
+
+ // return false, unless y is +NaN also
+ if ((y & MASK_NAN) != MASK_NAN) {
+ res = 0; // y is a number, return 1
+ BID_RETURN (res);
+
+ } else {
+
+ // x and y are both +NaN;
+ // must investigate payload if both quiet or both signaling
+ // this xnor statement will be true if both x and y are +qNaN or +sNaN
+ if (!
+ (((y & MASK_SNAN) == MASK_SNAN) ^ ((x & MASK_SNAN) ==
+ MASK_SNAN))) {
+ // it comes down to the payload. we want to return true if x has a
+ // smaller payload, or if the payloads are equal (canonical forms
+ // are bitwise identical)
+ pyld_y = y & 0x0003ffffffffffffull;
+ pyld_x = x & 0x0003ffffffffffffull;
+ // if x is zero and y isn't, x has the smaller
+ // payload definitely (since we know y isn't 0 at this point)
+ if (pyld_x > 999999999999999ull || pyld_x == 0) {
+ res = 1;
+ BID_RETURN (res);
+ }
+
+ if (pyld_y > 999999999999999ull || pyld_y == 0) {
+ // if y is zero, x must be less than or numerically equal
+ res = 0;
+ BID_RETURN (res);
+ }
+ res = (pyld_x <= pyld_y);
+ BID_RETURN (res);
+
+ } else {
+ // return true if y is +qNaN and x is +sNaN
+ // (we know they're different bc of xor if_stmt above)
+ res = ((x & MASK_SNAN) == MASK_SNAN);
+ BID_RETURN (res);
+ }
+ }
+
+ } else if ((y & MASK_NAN) == MASK_NAN) {
+ // x is certainly not NAN in this case.
+ // return true if y is positive
+ res = 1;
+ BID_RETURN (res);
+ }
+ // SIMPLE (CASE2)
+ // if all the bits (except sign bit) are the same,
+ // these numbers are equal.
+ if ((x & ~MASK_SIGN) == (y & ~MASK_SIGN)) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // INFINITY (CASE3)
+ if ((x & MASK_INF) == MASK_INF) {
+ // x is positive infinity, only return1
+ // if y is positive infinity as well
+ res = ((y & MASK_INF) == MASK_INF);
+ BID_RETURN (res);
+ } else if ((y & MASK_INF) == MASK_INF) {
+ // x is finite, so:
+ // if y is +inf, x<y
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if steering bits are 11 (condition will be 0),
+ // then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_x = (x & MASK_BINARY_EXPONENT2) >> 51;
+ sig_x = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_x > 9999999999999999ull || sig_x == 0) {
+ x_is_zero = 1;
+ }
+ } else {
+ exp_x = (x & MASK_BINARY_EXPONENT1) >> 53;
+ sig_x = (x & MASK_BINARY_SIG1);
+ if (sig_x == 0) {
+ x_is_zero = 1;
+ }
+ }
+
+ // if steering bits are 11 (condition will be 0),
+ // then exponent is G[0:w+1] =>
+ if ((y & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ exp_y = (y & MASK_BINARY_EXPONENT2) >> 51;
+ sig_y = (y & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (sig_y > 9999999999999999ull || sig_y == 0) {
+ y_is_zero = 1;
+ }
+ } else {
+ exp_y = (y & MASK_BINARY_EXPONENT1) >> 53;
+ sig_y = (y & MASK_BINARY_SIG1);
+ if (sig_y == 0) {
+ y_is_zero = 1;
+ }
+ }
+
+ // ZERO (CASE 5)
+ // if x and y represent the same entities,
+ // and both are negative , return true iff exp_x <= exp_y
+ if (x_is_zero && y_is_zero) {
+ // totalOrder(x,y) iff exp_x <= exp_y for positive numbers
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ // if x is zero and y isn't, clearly x has the smaller payload.
+ if (x_is_zero) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if y is zero, and x isn't, clearly y has the smaller payload.
+ if (y_is_zero) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ // REDUNDANT REPRESENTATIONS (CASE6)
+ // if both components are either bigger or smaller
+ if (sig_x > sig_y && exp_x >= exp_y) {
+ res = 0;
+ BID_RETURN (res);
+ }
+ if (sig_x < sig_y && exp_x <= exp_y) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 greater than exp_y, it is definitely
+ // larger, so no need for compensation
+ if (exp_x - exp_y > 15) {
+ res = 0; // difference cannot be greater than 10^15
+ BID_RETURN (res);
+ }
+ // if exp_x is 15 less than exp_y, it is definitely
+ // smaller, no need for compensation
+ if (exp_y - exp_x > 15) {
+ res = 1;
+ BID_RETURN (res);
+ }
+ // if |exp_x - exp_y| < 15, it comes down
+ // to the compensated significand
+ if (exp_x > exp_y) {
+
+ // otherwise adjust the x significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_x,
+ mult_factor[exp_x - exp_y]);
+
+ // if x and y represent the same entities,
+ // and both are negative, return true iff exp_x <= exp_y
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_y)) {
+ // case cannot occur, because all bits
+ // must be the same - would have been caught if (x==y)
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ // if positive, return 1 if adjusted x is smaller than y
+ res = ((sig_n_prime.w[1] == 0) && sig_n_prime.w[0] < sig_y);
+ BID_RETURN (res);
+ }
+ // adjust the y significand upwards
+ __mul_64x64_to_128MACH (sig_n_prime, sig_y,
+ mult_factor[exp_y - exp_x]);
+
+ // if x and y represent the same entities,
+ // and both are negative, return true iff exp_x <= exp_y
+ if (sig_n_prime.w[1] == 0 && (sig_n_prime.w[0] == sig_x)) {
+ res = (exp_x <= exp_y);
+ BID_RETURN (res);
+ }
+ // values are not equal, for positive numbers
+ // return 1 if x is less than y. 0 otherwise
+ res = ((sig_n_prime.w[1] > 0) || (sig_x < sig_n_prime.w[0]));
+ BID_RETURN (res);
+
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_radix (int *pres, UINT64 * px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_radix (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ int res;
+ if (x) // dummy test
+ res = 10;
+ else
+ res = 10;
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_quantize.c b/gcc-4.9/libgcc/config/libbid/bid64_quantize.c
new file mode 100644
index 000000000..6b2312a82
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_quantize.c
@@ -0,0 +1,236 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define MAX_FORMAT_DIGITS 16
+#define DECIMAL_EXPONENT_BIAS 398
+#define MAX_DECIMAL_EXPONENT 767
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_quantize (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x, y;
+#else
+
+UINT64
+bid64_quantize (UINT64 x,
+ UINT64 y _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CT;
+ UINT64 sign_x, sign_y, coefficient_x, coefficient_y, remainder_h, C64,
+ valid_x;
+ UINT64 tmp, carry, res;
+ int_float tempx;
+ int exponent_x, exponent_y, digits_x, extra_digits, amount, amount2;
+ int expon_diff, total_digits, bin_expon_cx;
+ unsigned rmode, status;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+ y = *py;
+#endif
+
+ valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x);
+ // unpack arguments, check for NaN or Infinity
+ if (!unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y)) {
+ // Inf. or NaN or 0
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+
+ // x=Inf, y=Inf?
+ if (((coefficient_x << 1) == 0xf000000000000000ull)
+ && ((coefficient_y << 1) == 0xf000000000000000ull)) {
+ res = coefficient_x;
+ BID_RETURN (res);
+ }
+ // Inf or NaN?
+ if ((y & 0x7800000000000000ull) == 0x7800000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if (((y & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ || (((y & 0x7c00000000000000ull) == 0x7800000000000000ull) && //Inf
+ ((x & 0x7c00000000000000ull) < 0x7800000000000000ull)))
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ if ((y & NAN_MASK64) != NAN_MASK64)
+ coefficient_y = 0;
+ if ((x & NAN_MASK64) != NAN_MASK64) {
+ res = 0x7c00000000000000ull | (coefficient_y & QUIET_MASK64);
+ if (((y & NAN_MASK64) != NAN_MASK64) && ((x & NAN_MASK64) == 0x7800000000000000ull))
+ res = x;
+ BID_RETURN (res);
+ }
+ }
+ }
+ // unpack arguments, check for NaN or Infinity
+ if (!valid_x) {
+ // x is Inf. or NaN or 0
+
+ // Inf or NaN?
+ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if (((x & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ || ((x & 0x7c00000000000000ull) == 0x7800000000000000ull)) //Inf
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ if ((x & NAN_MASK64) != NAN_MASK64)
+ coefficient_x = 0;
+ res = 0x7c00000000000000ull | (coefficient_x & QUIET_MASK64);
+ BID_RETURN (res);
+ }
+
+ res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, 0);
+ BID_RETURN (res);
+ }
+ // get number of decimal digits in coefficient_x
+ tempx.d = (float) coefficient_x;
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f;
+ digits_x = estimate_decimal_digits[bin_expon_cx];
+ if (coefficient_x >= power10_table_128[digits_x].w[0])
+ digits_x++;
+
+ expon_diff = exponent_x - exponent_y;
+ total_digits = digits_x + expon_diff;
+
+ // check range of scaled coefficient
+ if ((UINT32) (total_digits + 1) <= 17) {
+ if (expon_diff >= 0) {
+ coefficient_x *= power10_table_128[expon_diff].w[0];
+ res = very_fast_get_BID64 (sign_x, exponent_y, coefficient_x);
+ BID_RETURN (res);
+ }
+ // must round off -expon_diff digits
+ extra_digits = -expon_diff;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ coefficient_x += round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_x,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C64 = CT.w[1] >> amount;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rnd_mode == 0)
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits
+ // is exactly .5
+ // this is the same as fractional part of
+ // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & CT.w[1];
+
+ // test whether fractional part is 0
+ if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ remainder_h = CT.w[1] << (64 - amount);
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if ((remainder_h == 0x8000000000000000ull)
+ && (CT.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ //if(!C64 && rmode==ROUNDING_DOWN) sign_s=sign_y;
+ break;
+ default:
+ // round up
+ __add_carry_out (tmp, carry, CT.w[0],
+ reciprocals10_64[extra_digits]);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ break;
+ }
+ __set_status_flags (pfpsf, status);
+#endif
+
+ res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, C64);
+ BID_RETURN (res);
+ }
+
+ if (total_digits < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+ C64 = 0;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ if (rmode == ROUNDING_UP)
+ C64 = 1;
+#endif
+#endif
+ res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, C64);
+ BID_RETURN (res);
+ }
+ // else more than 16 digits in coefficient
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_rem.c b/gcc-4.9/libgcc/config/libbid/bid64_rem.c
new file mode 100644
index 000000000..35756fb80
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_rem.c
@@ -0,0 +1,228 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID64 remainder
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * if(exponent_x < exponent_y)
+ * scale coefficient_y so exponents are aligned
+ * perform coefficient divide (64-bit integer divide), unless
+ * coefficient_y is longer than 64 bits (clearly larger
+ * than coefficient_x)
+ * else // exponent_x > exponent_y
+ * use a loop to scale coefficient_x to 18_digits, divide by
+ * coefficient_y (64-bit integer divide), calculate remainder
+ * as new_coefficient_x and repeat until final remainder is obtained
+ * (when new_exponent_x < exponent_y)
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+
+#define MAX_FORMAT_DIGITS 16
+#define DECIMAL_EXPONENT_BIAS 398
+#define MASK_BINARY_EXPONENT 0x7ff0000000000000ull
+#define BINARY_EXPONENT_BIAS 0x3ff
+#define UPPER_EXPON_LIMIT 51
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_rem (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x, y;
+#else
+
+UINT64
+bid64_rem (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CY;
+ UINT64 sign_x, sign_y, coefficient_x, coefficient_y, res;
+ UINT64 Q, R, R2, T, valid_y, valid_x;
+ int_float tempx;
+ int exponent_x, exponent_y, bin_expon, e_scale;
+ int digits_x, diff_expon;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ x = *px;
+ y = *py;
+#endif
+
+ valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y);
+ valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x);
+
+ // unpack arguments, check for NaN or Infinity
+ if (!valid_x) {
+ // x is Inf. or NaN or 0
+#ifdef SET_STATUS_FLAGS
+ if ((y & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+
+ // test if x is NaN
+ if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if (((x & SNAN_MASK64) == SNAN_MASK64))
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = coefficient_x & QUIET_MASK64;;
+ BID_RETURN (res);
+ }
+ // x is Infinity?
+ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ if (((y & NAN_MASK64) != NAN_MASK64)) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ // return NaN
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // x is 0
+ // return x if y != 0
+ if (((y & 0x7800000000000000ull) < 0x7800000000000000ull) &&
+ coefficient_y) {
+ if ((y & 0x6000000000000000ull) == 0x6000000000000000ull)
+ exponent_y = (y >> 51) & 0x3ff;
+ else
+ exponent_y = (y >> 53) & 0x3ff;
+
+ if (exponent_y < exponent_x)
+ exponent_x = exponent_y;
+
+ x = exponent_x;
+ x <<= 53;
+
+ res = x | sign_x;
+ BID_RETURN (res);
+ }
+
+ }
+ if (!valid_y) {
+ // y is Inf. or NaN
+
+ // test if y is NaN
+ if ((y & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if (((y & SNAN_MASK64) == SNAN_MASK64))
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = coefficient_y & QUIET_MASK64;;
+ BID_RETURN (res);
+ }
+ // y is Infinity?
+ if ((y & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x);
+ BID_RETURN (res);
+ }
+ // y is 0, return NaN
+ {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+
+
+ diff_expon = exponent_x - exponent_y;
+ if (diff_expon <= 0) {
+ diff_expon = -diff_expon;
+
+ if (diff_expon > 16) {
+ // |x|<|y| in this case
+ res = x;
+ BID_RETURN (res);
+ }
+ // set exponent of y to exponent_x, scale coefficient_y
+ T = power10_table_128[diff_expon].w[0];
+ __mul_64x64_to_128 (CY, coefficient_y, T);
+
+ if (CY.w[1] || CY.w[0] > (coefficient_x << 1)) {
+ res = x;
+ BID_RETURN (res);
+ }
+
+ Q = coefficient_x / CY.w[0];
+ R = coefficient_x - Q * CY.w[0];
+
+ R2 = R + R;
+ if (R2 > CY.w[0] || (R2 == CY.w[0] && (Q & 1))) {
+ R = CY.w[0] - R;
+ sign_x ^= 0x8000000000000000ull;
+ }
+
+ res = very_fast_get_BID64 (sign_x, exponent_x, R);
+ BID_RETURN (res);
+ }
+
+
+ while (diff_expon > 0) {
+ // get number of digits in coeff_x
+ tempx.d = (float) coefficient_x;
+ bin_expon = ((tempx.i >> 23) & 0xff) - 0x7f;
+ digits_x = estimate_decimal_digits[bin_expon];
+ // will not use this test, dividend will have 18 or 19 digits
+ //if(coefficient_x >= power10_table_128[digits_x].w[0])
+ // digits_x++;
+
+ e_scale = 18 - digits_x;
+ if (diff_expon >= e_scale) {
+ diff_expon -= e_scale;
+ } else {
+ e_scale = diff_expon;
+ diff_expon = 0;
+ }
+
+ // scale dividend to 18 or 19 digits
+ coefficient_x *= power10_table_128[e_scale].w[0];
+
+ // quotient
+ Q = coefficient_x / coefficient_y;
+ // remainder
+ coefficient_x -= Q * coefficient_y;
+
+ // check for remainder == 0
+ if (!coefficient_x) {
+ res = very_fast_get_BID64_small_mantissa (sign_x, exponent_y, 0);
+ BID_RETURN (res);
+ }
+ }
+
+ R2 = coefficient_x + coefficient_x;
+ if (R2 > coefficient_y || (R2 == coefficient_y && (Q & 1))) {
+ coefficient_x = coefficient_y - coefficient_x;
+ sign_x ^= 0x8000000000000000ull;
+ }
+
+ res = very_fast_get_BID64 (sign_x, exponent_y, coefficient_x);
+ BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_round_integral.c b/gcc-4.9/libgcc/config/libbid/bid64_round_integral.c
new file mode 100644
index 000000000..c4b0d38b5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_round_integral.c
@@ -0,0 +1,1221 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64_round_integral_exact
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_round_integral_exact (UINT64 * pres,
+ UINT64 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64_round_integral_exact (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign;
+ int exp; // unbiased exponent
+ // Note: C1 represents the significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ // UINT64 res is C* at first - represents up to 16 decimal digits <= 54 bits
+ UINT128 fstar = { {0x0ull, 0x0ull} };
+ UINT128 P128;
+
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ res = x_sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398;
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ C1 = 0;
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS)
+ exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398;
+ C1 = (x & MASK_BINARY_SIG1);
+ }
+
+ // if x is 0 or non-canonical return 0 preserving the sign bit and
+ // the preferred exponent of MAX(Q(x), 0)
+ if (C1 == 0) {
+ if (exp < 0)
+ exp = 0;
+ res = x_sign | (((UINT64) exp + 398) << 53);
+ BID_RETURN (res);
+ }
+ // x is a finite non-zero number (not 0, non-canonical, or special)
+
+ switch (rnd_mode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // return 0 if (exp <= -(p+1))
+ if (exp <= -17) {
+ res = x_sign | 0x31c0000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_DOWN:
+ // return 0 if (exp <= -p)
+ if (exp <= -16) {
+ if (x_sign) {
+ res = 0xb1c0000000000001ull;
+ } else {
+ res = 0x31c0000000000000ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_UP:
+ // return 0 if (exp <= -p)
+ if (exp <= -16) {
+ if (x_sign) {
+ res = 0xb1c0000000000000ull;
+ } else {
+ res = 0x31c0000000000001ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_TO_ZERO:
+ // return 0 if (exp <= -p)
+ if (exp <= -16) {
+ res = x_sign | 0x31c0000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ } // end switch ()
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ q = 16;
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ }
+
+ if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res = x;
+ BID_RETURN (res);
+ }
+
+ switch (rnd_mode) {
+ case ROUNDING_TO_NEAREST:
+ if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // since round_to_even, subtract 1 if current result is odd
+ if ((res & 0x0000000000000001ull) && (fstar.w[1] == 0)
+ && (fstar.w[0] < ten2mk64[ind - 1])) {
+ res--;
+ }
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ // fstar.w[0] - 0x8000000000000000ull is f* - 1/2
+ if ((fstar.w[0] - 0x8000000000000000ull) > ten2mk64[ind - 1]) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 21
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ if (fstar.w[1] > onehalf128[ind - 1]
+ || fstar.w[0] > ten2mk64[ind - 1]) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp < 0
+ // the result is +0 or -0
+ res = x_sign | 0x31c0000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_TIES_AWAY:
+ if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // C* = floor(C*) - logical right shift; C* has p decimal digits,
+ // correct by Prop. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // midpoints are already rounded correctly
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ // fstar.w[0] - 0x8000000000000000ull is f* - 1/2
+ if ((fstar.w[0] - 0x8000000000000000ull) > ten2mk64[ind - 1]) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 21
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ if (fstar.w[1] > onehalf128[ind - 1]
+ || fstar.w[0] > ten2mk64[ind - 1]) {
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp < 0
+ // the result is +0 or -0
+ res = x_sign | 0x31c0000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_DOWN:
+ if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // if (0 < f* < 10^(-x)) then the result is exact
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (f* > 10^(-x)) then the result is inexact
+ if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1])) {
+ if (x_sign) {
+ // if negative and not exact, increment magnitude
+ res++;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0
+ // the result is +0 or -1
+ if (x_sign) {
+ res = 0xb1c0000000000001ull;
+ } else {
+ res = 0x31c0000000000000ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_UP:
+ if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // if (0 < f* < 10^(-x)) then the result is exact
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (f* > 10^(-x)) then the result is inexact
+ if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1])) {
+ if (!x_sign) {
+ // if positive and not exact, increment magnitude
+ res++;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0
+ // the result is -0 or +1
+ if (x_sign) {
+ res = 0xb1c0000000000000ull;
+ } else {
+ res = 0x31c0000000000001ull;
+ }
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ case ROUNDING_TO_ZERO:
+ if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // if (0 < f* < 10^(-x)) then the result is exact
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (f* > 10^(-x)) then the result is inexact
+ if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1])) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp < 0
+ // the result is +0 or -0
+ res = x_sign | 0x31c0000000000000ull;
+ *pfpsf |= INEXACT_EXCEPTION;
+ BID_RETURN (res);
+ }
+ break;
+ } // end switch ()
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_round_integral_nearest_even
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_round_integral_nearest_even (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_round_integral_nearest_even (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 fstar;
+ UINT128 P128;
+
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ res = x_sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398;
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ C1 = 0;
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS)
+ exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398;
+ C1 = (x & MASK_BINARY_SIG1);
+ }
+
+ // if x is 0 or non-canonical
+ if (C1 == 0) {
+ if (exp < 0)
+ exp = 0;
+ res = x_sign | (((UINT64) exp + 398) << 53);
+ BID_RETURN (res);
+ }
+ // x is a finite non-zero number (not 0, non-canonical, or special)
+
+ // return 0 if (exp <= -(p+1))
+ if (exp <= -17) {
+ res = x_sign | 0x31c0000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ q = 16;
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ }
+
+ if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res = x;
+ BID_RETURN (res);
+ } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // since round_to_even, subtract 1 if current result is odd
+ if ((res & 0x0000000000000001ull) && (fstar.w[1] == 0)
+ && (fstar.w[0] < ten2mk64[ind - 1])) {
+ res--;
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp < 0
+ // the result is +0 or -0
+ res = x_sign | 0x31c0000000000000ull;
+ BID_RETURN (res);
+ }
+}
+
+/*****************************************************************************
+ * BID64_round_integral_negative
+ *****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_round_integral_negative (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_round_integral_negative (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ // UINT64 res is C* at first - represents up to 34 decimal digits ~ 113 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ res = x_sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398;
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ C1 = 0;
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS)
+ exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398;
+ C1 = (x & MASK_BINARY_SIG1);
+ }
+
+ // if x is 0 or non-canonical
+ if (C1 == 0) {
+ if (exp < 0)
+ exp = 0;
+ res = x_sign | (((UINT64) exp + 398) << 53);
+ BID_RETURN (res);
+ }
+ // x is a finite non-zero number (not 0, non-canonical, or special)
+
+ // return 0 if (exp <= -p)
+ if (exp <= -16) {
+ if (x_sign) {
+ res = 0xb1c0000000000001ull;
+ } else {
+ res = 0x31c0000000000000ull;
+ }
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ q = 16;
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ }
+
+ if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res = x;
+ BID_RETURN (res);
+ } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // if (0 < f* < 10^(-x)) then the result is exact
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (f* > 10^(-x)) then the result is inexact
+ if (x_sign
+ && ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1]))) {
+ // if negative and not exact, increment magnitude
+ res++;
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0
+ // the result is +0 or -1
+ if (x_sign) {
+ res = 0xb1c0000000000001ull;
+ } else {
+ res = 0x31c0000000000000ull;
+ }
+ BID_RETURN (res);
+ }
+}
+
+/*****************************************************************************
+ * BID64_round_integral_positive
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_round_integral_positive (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_round_integral_positive (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ // UINT64 res is C* at first - represents up to 34 decimal digits ~ 113 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ res = x_sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398;
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ C1 = 0;
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS)
+ exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398;
+ C1 = (x & MASK_BINARY_SIG1);
+ }
+
+ // if x is 0 or non-canonical
+ if (C1 == 0) {
+ if (exp < 0)
+ exp = 0;
+ res = x_sign | (((UINT64) exp + 398) << 53);
+ BID_RETURN (res);
+ }
+ // x is a finite non-zero number (not 0, non-canonical, or special)
+
+ // return 0 if (exp <= -p)
+ if (exp <= -16) {
+ if (x_sign) {
+ res = 0xb1c0000000000000ull;
+ } else {
+ res = 0x31c0000000000001ull;
+ }
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ q = 16;
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ }
+
+ if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res = x;
+ BID_RETURN (res);
+ } else if ((q + exp) > 0) { // exp < 0 and 1 <= -exp < q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // if (0 < f* < 10^(-x)) then the result is exact
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ fstar.w[1] = 0;
+ fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ }
+ // if (f* > 10^(-x)) then the result is inexact
+ if (!x_sign
+ && ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind - 1]))) {
+ // if positive and not exact, increment magnitude
+ res++;
+ }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp <= 0
+ // the result is -0 or +1
+ if (x_sign) {
+ res = 0xb1c0000000000000ull;
+ } else {
+ res = 0x31c0000000000001ull;
+ }
+ BID_RETURN (res);
+ }
+}
+
+/*****************************************************************************
+ * BID64_round_integral_zero
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_round_integral_zero (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_round_integral_zero (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ // UINT64 res is C* at first - represents up to 34 decimal digits ~ 113 bits
+ UINT128 P128;
+
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ res = x_sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398;
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ C1 = 0;
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS)
+ exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398;
+ C1 = (x & MASK_BINARY_SIG1);
+ }
+
+ // if x is 0 or non-canonical
+ if (C1 == 0) {
+ if (exp < 0)
+ exp = 0;
+ res = x_sign | (((UINT64) exp + 398) << 53);
+ BID_RETURN (res);
+ }
+ // x is a finite non-zero number (not 0, non-canonical, or special)
+
+ // return 0 if (exp <= -p)
+ if (exp <= -16) {
+ res = x_sign | 0x31c0000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ q = 16;
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ }
+
+ if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res = x;
+ BID_RETURN (res);
+ } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 127 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // if (0 < f* < 10^(-x)) then the result is exact
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ // redundant fstar.w[1] = 0;
+ // redundant fstar.w[0] = P128.w[0];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ // redundant fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ // redundant fstar.w[0] = P128.w[0];
+ }
+ // if (f* > 10^(-x)) then the result is inexact
+ // if ((fstar.w[1] != 0) || (fstar.w[0] >= ten2mk64[ind-1])){
+ // // redundant
+ // }
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp < 0
+ // the result is +0 or -0
+ res = x_sign | 0x31c0000000000000ull;
+ BID_RETURN (res);
+ }
+}
+
+/*****************************************************************************
+ * BID64_round_integral_nearest_away
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_round_integral_nearest_away (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_round_integral_nearest_away (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res = 0xbaddbaddbaddbaddull;
+ UINT64 x_sign;
+ int exp; // unbiased exponent
+ // Note: C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (all are UINT64)
+ BID_UI64DOUBLE tmp1;
+ int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 P128;
+
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+
+ // check for NaNs and infinities
+ if ((x & MASK_NAN) == MASK_NAN) { // check for NaN
+ if ((x & 0x0003ffffffffffffull) > 999999999999999ull)
+ x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits
+ else
+ x = x & 0xfe03ffffffffffffull; // clear G6-G12
+ if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return quiet (SNaN)
+ res = x & 0xfdffffffffffffffull;
+ } else { // QNaN
+ res = x;
+ }
+ BID_RETURN (res);
+ } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity
+ res = x_sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ // if the steering bits are 11 (condition will be 0), then
+ // the exponent is G[0:w+1]
+ exp = ((x & MASK_BINARY_EXPONENT2) >> 51) - 398;
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ C1 = 0;
+ }
+ } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS)
+ exp = ((x & MASK_BINARY_EXPONENT1) >> 53) - 398;
+ C1 = (x & MASK_BINARY_SIG1);
+ }
+
+ // if x is 0 or non-canonical
+ if (C1 == 0) {
+ if (exp < 0)
+ exp = 0;
+ res = x_sign | (((UINT64) exp + 398) << 53);
+ BID_RETURN (res);
+ }
+ // x is a finite non-zero number (not 0, non-canonical, or special)
+
+ // return 0 if (exp <= -(p+1))
+ if (exp <= -17) {
+ res = x_sign | 0x31c0000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ q = 16;
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ }
+
+ if (exp >= 0) { // -exp <= 0
+ // the argument is an integer already
+ res = x;
+ BID_RETURN (res);
+ } else if ((q + exp) >= 0) { // exp < 0 and 1 <= -exp <= q
+ // need to shift right -exp digits from the coefficient; the exp will be 0
+ ind = -exp; // 1 <= ind <= 16; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^x where the result C1 fits in 64 bits
+ // FOR ROUND_TO_NEAREST, WE ADD 1/2 ULP(y) then truncate
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 16
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128 (P128, C1, ten2mk64[ind - 1]);
+
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // C* = floor(C*) - logical right shift; C* has p decimal digits,
+ // correct by Prop. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ if (ind - 1 <= 2) { // 0 <= ind - 1 <= 2 => shift = 0
+ res = P128.w[1];
+ } else if (ind - 1 <= 21) { // 3 <= ind - 1 <= 21 => 3 <= shift <= 63
+ shift = shiftright128[ind - 1]; // 3 <= shift <= 63
+ res = (P128.w[1] >> shift);
+ }
+ // midpoints are already rounded correctly
+ // set exponent to zero as it was negative before.
+ res = x_sign | 0x31c0000000000000ull | res;
+ BID_RETURN (res);
+ } else { // if exp < 0 and q + exp < 0
+ // the result is +0 or -0
+ res = x_sign | 0x31c0000000000000ull;
+ BID_RETURN (res);
+ }
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_scalb.c b/gcc-4.9/libgcc/config/libbid/bid64_scalb.c
new file mode 100644
index 000000000..118d80e92
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_scalb.c
@@ -0,0 +1,105 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define MAX_FORMAT_DIGITS 16
+#define DECIMAL_EXPONENT_BIAS 398
+#define MAX_DECIMAL_EXPONENT 767
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_scalb (UINT64 * pres, UINT64 * px,
+ int *pn _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x;
+ int n;
+#else
+
+UINT64
+bid64_scalb (UINT64 x,
+ int n _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 sign_x, coefficient_x, res;
+ SINT64 exp64;
+ int exponent_x, rmode;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+ n = *pn;
+#endif
+
+ // unpack arguments, check for NaN or Infinity
+ if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) {
+ // x is Inf. or NaN or 0
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // y is sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ if (coefficient_x)
+ res = coefficient_x & QUIET_MASK64;
+ else {
+ exp64 = (SINT64) exponent_x + (SINT64) n;
+ if(exp64<0) exp64=0;
+ if(exp64>MAX_DECIMAL_EXPONENT) exp64=MAX_DECIMAL_EXPONENT;
+ exponent_x = exp64;
+ res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x); // 0
+ }
+ BID_RETURN (res);
+ }
+
+ exp64 = (SINT64) exponent_x + (SINT64) n;
+ exponent_x = exp64;
+
+ if ((UINT32) exponent_x <= MAX_DECIMAL_EXPONENT) {
+ res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x);
+ BID_RETURN (res);
+ }
+ // check for overflow
+ if (exp64 > MAX_DECIMAL_EXPONENT) {
+ // try to normalize coefficient
+ while ((coefficient_x < 1000000000000000ull)
+ && (exp64 > MAX_DECIMAL_EXPONENT)) {
+ // coefficient_x < 10^15, scale by 10
+ coefficient_x = (coefficient_x << 1) + (coefficient_x << 3);
+ exponent_x--;
+ exp64--;
+ }
+ if (exp64 <= MAX_DECIMAL_EXPONENT) {
+ res = very_fast_get_BID64 (sign_x, exponent_x, coefficient_x);
+ BID_RETURN (res);
+ } else
+ exponent_x = 0x7fffffff; // overflow
+ }
+ // exponent < 0
+ // the BID pack routine will round the coefficient
+ rmode = rnd_mode;
+ res = get_BID64 (sign_x, exponent_x, coefficient_x, rmode, pfpsf);
+ BID_RETURN (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_sqrt.c b/gcc-4.9/libgcc/config/libbid/bid64_sqrt.c
new file mode 100644
index 000000000..6b4abe004
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_sqrt.c
@@ -0,0 +1,552 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * BID64 square root
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * if(exponent_x is odd)
+ * scale coefficient_x by 10, adjust exponent
+ * - get lower estimate for number of digits in coefficient_x
+ * - scale coefficient x to between 31 and 33 decimal digits
+ * - in parallel, check for exact case and return if true
+ * - get high part of result coefficient using double precision sqrt
+ * - compute remainder and refine coefficient in one iteration (which
+ * modifies it by at most 1)
+ * - result exponent is easy to compute from the adjusted arg. exponent
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+#include "bid_sqrt_macros.h"
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+#include <fenv.h>
+
+#define FE_ALL_FLAGS FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT
+#endif
+
+extern double sqrt (double);
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_sqrt (UINT64 * pres,
+ UINT64 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x;
+#else
+
+UINT64
+bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CA, CT;
+ UINT64 sign_x, coefficient_x;
+ UINT64 Q, Q2, A10, C4, R, R2, QE, res;
+ SINT64 D;
+ int_double t_scale;
+ int_float tempx;
+ double da, dq, da_h, da_l, dqe;
+ int exponent_x, exponent_q, bin_expon_cx;
+ int digits_x;
+ int scale;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ fexcept_t binaryflags = 0;
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+ x = *px;
+#endif
+
+ // unpack arguments, check for NaN or Infinity
+ if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) {
+ // x is Inf. or NaN or 0
+ if ((x & INFINITY_MASK64) == INFINITY_MASK64) {
+ res = coefficient_x;
+ if ((coefficient_x & SSNAN_MASK64) == SINFINITY_MASK64) // -Infinity
+ {
+ res = NAN_MASK64;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ }
+#ifdef SET_STATUS_FLAGS
+ if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res & QUIET_MASK64);
+ }
+ // x is 0
+ exponent_x = (exponent_x + DECIMAL_EXPONENT_BIAS) >> 1;
+ res = sign_x | (((UINT64) exponent_x) << 53);
+ BID_RETURN (res);
+ }
+ // x<0?
+ if (sign_x && coefficient_x) {
+ res = NAN_MASK64;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res);
+ }
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ //--- get number of bits in the coefficient of x ---
+ tempx.d = (float) coefficient_x;
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f;
+ digits_x = estimate_decimal_digits[bin_expon_cx];
+ // add test for range
+ if (coefficient_x >= power10_index_binexp[bin_expon_cx])
+ digits_x++;
+
+ A10 = coefficient_x;
+ if (exponent_x & 1) {
+ A10 = (A10 << 2) + A10;
+ A10 += A10;
+ }
+
+ dqe = sqrt ((double) A10);
+ QE = (UINT32) dqe;
+ if (QE * QE == A10) {
+ res =
+ very_fast_get_BID64 (0, (exponent_x + DECIMAL_EXPONENT_BIAS) >> 1,
+ QE);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ // if exponent is odd, scale coefficient by 10
+ scale = 31 - digits_x;
+ exponent_q = exponent_x - scale;
+ scale += (exponent_q & 1); // exp. bias is even
+
+ CT = power10_table_128[scale];
+ __mul_64x128_short (CA, coefficient_x, CT);
+
+ // 2^64
+ t_scale.i = 0x43f0000000000000ull;
+ // convert CA to DP
+ da_h = CA.w[1];
+ da_l = CA.w[0];
+ da = da_h * t_scale.d + da_l;
+
+ dq = sqrt (da);
+
+ Q = (UINT64) dq;
+
+ // get sign(sqrt(CA)-Q)
+ R = CA.w[0] - Q * Q;
+ R = ((SINT64) R) >> 63;
+ D = R + R + 1;
+
+ exponent_q = (exponent_q + DECIMAL_EXPONENT_BIAS) >> 1;
+
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ if (!((rnd_mode) & 3)) {
+#endif
+#endif
+
+ // midpoint to check
+ Q2 = Q + Q + D;
+ C4 = CA.w[0] << 2;
+
+ // get sign(-sqrt(CA)+Midpoint)
+ R2 = Q2 * Q2 - C4;
+ R2 = ((SINT64) R2) >> 63;
+
+ // adjust Q if R!=R2
+ Q += (D & (R ^ R2));
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ } else {
+ C4 = CA.w[0];
+ Q += D;
+ if ((SINT64) (Q * Q - C4) > 0)
+ Q--;
+ if (rnd_mode == ROUNDING_UP)
+ Q++;
+ }
+#endif
+#endif
+
+ res = fast_get_BID64 (0, exponent_q, Q);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+}
+
+
+TYPE0_FUNCTION_ARG1 (UINT64, bid64q_sqrt, x)
+
+ UINT256 M256, C4, C8;
+ UINT128 CX, CX2, A10, S2, T128, CS, CSM, CS2, C256, CS1,
+ mul_factor2_long = { {0x0ull, 0x0ull} }, QH, Tmp, TP128, Qh, Ql;
+UINT64 sign_x, Carry, B10, res, mul_factor, mul_factor2 = 0x0ull, CS0;
+SINT64 D;
+int_float fx, f64;
+int exponent_x, bin_expon_cx, done = 0;
+int digits, scale, exponent_q = 0, exact = 1, amount, extra_digits;
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+fexcept_t binaryflags = 0;
+#endif
+
+ // unpack arguments, check for NaN or Infinity
+if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ res = CX.w[1];
+ // NaN ?
+ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & 0x7e00000000000000ull) == 0x7e00000000000000ull) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CX.w[0];
+ TP128 = reciprocals10_128[18];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[18];
+ __shr_128 (Tmp, Qh, amount);
+ res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0];
+ BID_RETURN (res);
+ }
+ // x is Infinity?
+ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ if (sign_x) {
+ // -Inf, return NaN
+ res = 0x7c00000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ }
+ BID_RETURN (res);
+ }
+ // x is 0 otherwise
+
+ exponent_x =
+ ((exponent_x - DECIMAL_EXPONENT_BIAS_128) >> 1) +
+ DECIMAL_EXPONENT_BIAS;
+ if (exponent_x < 0)
+ exponent_x = 0;
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ //res= sign_x | (((UINT64)exponent_x)<<53);
+ res = get_BID64 (sign_x, exponent_x, 0, rnd_mode, pfpsf);
+ BID_RETURN (res);
+}
+if (sign_x) {
+ res = 0x7c00000000000000ull;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN (res);
+}
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fegetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+
+ // 2^64
+f64.i = 0x5f800000;
+
+ // fx ~ CX
+fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+digits = estimate_decimal_digits[bin_expon_cx];
+
+A10 = CX;
+if (exponent_x & 1) {
+ A10.w[1] = (CX.w[1] << 3) | (CX.w[0] >> 61);
+ A10.w[0] = CX.w[0] << 3;
+ CX2.w[1] = (CX.w[1] << 1) | (CX.w[0] >> 63);
+ CX2.w[0] = CX.w[0] << 1;
+ __add_128_128 (A10, A10, CX2);
+}
+
+C256.w[1] = A10.w[1];
+C256.w[0] = A10.w[0];
+CS.w[0] = short_sqrt128 (A10);
+CS.w[1] = 0;
+mul_factor = 0;
+ // check for exact result
+if (CS.w[0] < 10000000000000000ull) {
+ if (CS.w[0] * CS.w[0] == A10.w[0]) {
+ __sqr64_fast (S2, CS.w[0]);
+ if (S2.w[1] == A10.w[1]) // && S2.w[0]==A10.w[0])
+ {
+ res =
+ get_BID64 (0,
+ ((exponent_x - DECIMAL_EXPONENT_BIAS_128) >> 1) +
+ DECIMAL_EXPONENT_BIAS, CS.w[0], rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+ (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+ BID_RETURN (res);
+ }
+ }
+ if (CS.w[0] >= 1000000000000000ull) {
+ done = 1;
+ exponent_q = exponent_x;
+ C256.w[1] = A10.w[1];
+ C256.w[0] = A10.w[0];
+ }
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+ exact = 0;
+} else {
+ B10 = 0x3333333333333334ull;
+ __mul_64x64_to_128_full (CS2, CS.w[0], B10);
+ CS0 = CS2.w[1] >> 1;
+ if (CS.w[0] != ((CS0 << 3) + (CS0 << 1))) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+ exact = 0;
+ }
+ done = 1;
+ CS.w[0] = CS0;
+ exponent_q = exponent_x + 2;
+ mul_factor = 10;
+ mul_factor2 = 100;
+ if (CS.w[0] >= 10000000000000000ull) {
+ __mul_64x64_to_128_full (CS2, CS.w[0], B10);
+ CS0 = CS2.w[1] >> 1;
+ if (CS.w[0] != ((CS0 << 3) + (CS0 << 1))) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+ exact = 0;
+ }
+ exponent_q += 2;
+ CS.w[0] = CS0;
+ mul_factor = 100;
+ mul_factor2 = 10000;
+ }
+ if (exact) {
+ CS0 = CS.w[0] * mul_factor;
+ __sqr64_fast (CS1, CS0)
+ if ((CS1.w[0] != A10.w[0]) || (CS1.w[1] != A10.w[1])) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, INEXACT_EXCEPTION);
+#endif
+ exact = 0;
+ }
+ }
+}
+
+if (!done) {
+ // get number of digits in CX
+ D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+ if (D > 0
+ || (!D && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0]))
+ digits++;
+
+ // if exponent is odd, scale coefficient by 10
+ scale = 31 - digits;
+ exponent_q = exponent_x - scale;
+ scale += (exponent_q & 1); // exp. bias is even
+
+ T128 = power10_table_128[scale];
+ __mul_128x128_low (C256, CX, T128);
+
+
+ CS.w[0] = short_sqrt128 (C256);
+}
+ //printf("CS=%016I64x\n",CS.w[0]);
+
+exponent_q =
+ ((exponent_q - DECIMAL_EXPONENT_BIAS_128) >> 1) +
+ DECIMAL_EXPONENT_BIAS;
+if ((exponent_q < 0) && (exponent_q + MAX_FORMAT_DIGITS >= 0)) {
+ extra_digits = -exponent_q;
+ exponent_q = 0;
+
+ // get coeff*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (QH, CS.w[0], reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+
+ CS0 = QH.w[1] >> amount;
+
+#ifdef SET_STATUS_FLAGS
+ if (exact) {
+ if (CS.w[0] != CS0 * power10_table_128[extra_digits].w[0])
+ exact = 0;
+ }
+ if (!exact)
+ __set_status_flags (pfpsf, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+
+ CS.w[0] = CS0;
+ if (!mul_factor)
+ mul_factor = 1;
+ mul_factor *= power10_table_128[extra_digits].w[0];
+ __mul_64x64_to_128 (mul_factor2_long, mul_factor, mul_factor);
+ if (mul_factor2_long.w[1])
+ mul_factor2 = 0;
+ else
+ mul_factor2 = mul_factor2_long.w[1];
+}
+ // 4*C256
+C4.w[1] = (C256.w[1] << 2) | (C256.w[0] >> 62);
+C4.w[0] = C256.w[0] << 2;
+
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+if (!((rnd_mode) & 3)) {
+#endif
+#endif
+ // compare to midpoints
+ CSM.w[0] = (CS.w[0] + CS.w[0]) | 1;
+ //printf("C256=%016I64x %016I64x, CSM=%016I64x %016I64x %016I64x\n",C4.w[1],C4.w[0],CSM.w[1],CSM.w[0], CS.w[0]);
+ if (mul_factor)
+ CSM.w[0] *= mul_factor;
+ // CSM^2
+ __mul_64x64_to_128 (M256, CSM.w[0], CSM.w[0]);
+ //__mul_128x128_to_256(M256, CSM, CSM);
+
+ if (C4.w[1] > M256.w[1] ||
+ (C4.w[1] == M256.w[1] && C4.w[0] > M256.w[0])) {
+ // round up
+ CS.w[0]++;
+ } else {
+ C8.w[0] = CS.w[0] << 3;
+ C8.w[1] = 0;
+ if (mul_factor) {
+ if (mul_factor2) {
+ __mul_64x64_to_128 (C8, C8.w[0], mul_factor2);
+ } else {
+ __mul_64x128_low (C8, C8.w[0], mul_factor2_long);
+ }
+ }
+ // M256 - 8*CSM
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ M256.w[1] = M256.w[1] - C8.w[1] - Carry;
+
+ // if CSM' > C256, round up
+ if (M256.w[1] > C4.w[1] ||
+ (M256.w[1] == C4.w[1] && M256.w[0] > C4.w[0])) {
+ // round down
+ if (CS.w[0])
+ CS.w[0]--;
+ }
+ }
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+} else {
+ CS.w[0]++;
+ CSM.w[0] = CS.w[0];
+ C8.w[0] = CSM.w[0] << 1;
+ if (mul_factor)
+ CSM.w[0] *= mul_factor;
+ __mul_64x64_to_128 (M256, CSM.w[0], CSM.w[0]);
+ C8.w[1] = 0;
+ if (mul_factor) {
+ if (mul_factor2) {
+ __mul_64x64_to_128 (C8, C8.w[0], mul_factor2);
+ } else {
+ __mul_64x128_low (C8, C8.w[0], mul_factor2_long);
+ }
+ }
+ //printf("C256=%016I64x %016I64x, CSM=%016I64x %016I64x %016I64x\n",C256.w[1],C256.w[0],M256.w[1],M256.w[0], CS.w[0]);
+
+ if (M256.w[1] > C256.w[1] ||
+ (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0])) {
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ M256.w[1] = M256.w[1] - Carry - C8.w[1];
+ M256.w[0]++;
+ if (!M256.w[0]) {
+ M256.w[1]++;
+
+ }
+
+ if ((M256.w[1] > C256.w[1] ||
+ (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0]))
+ && (CS.w[0] > 1)) {
+
+ CS.w[0]--;
+
+ if (CS.w[0] > 1) {
+ __sub_borrow_out (M256.w[0], Carry, M256.w[0], C8.w[0]);
+ M256.w[1] = M256.w[1] - Carry - C8.w[1];
+ M256.w[0]++;
+ if (!M256.w[0]) {
+ M256.w[1]++;
+ }
+
+ if (M256.w[1] > C256.w[1] ||
+ (M256.w[1] == C256.w[1] && M256.w[0] > C256.w[0]))
+ CS.w[0]--;
+ }
+ }
+ }
+
+ else {
+ /*__add_carry_out(M256.w[0], Carry, M256.w[0], C8.w[0]);
+ M256.w[1] = M256.w[1] + Carry + C8.w[1];
+ M256.w[0]++;
+ if(!M256.w[0])
+ {
+ M256.w[1]++;
+ }
+ CS.w[0]++;
+ if(M256.w[1]<C256.w[1] ||
+ (M256.w[1]==C256.w[1] && M256.w[0]<=C256.w[0]))
+ {
+ CS.w[0]++;
+ }*/
+ CS.w[0]++;
+ }
+ //printf("C256=%016I64x %016I64x, CSM=%016I64x %016I64x %016I64x %d\n",C4.w[1],C4.w[0],M256.w[1],M256.w[0], CS.w[0], exact);
+ // RU?
+ if (((rnd_mode) != ROUNDING_UP) || exact) {
+ if (CS.w[0])
+ CS.w[0]--;
+ }
+
+}
+#endif
+#endif
+ //printf("C256=%016I64x %016I64x, CSM=%016I64x %016I64x %016I64x %d\n",C4.w[1],C4.w[0],M256.w[1],M256.w[0], CS.w[0], exact);
+
+res = get_BID64 (0, exponent_q, CS.w[0], rnd_mode, pfpsf);
+#ifdef UNCHANGED_BINARY_STATUS_FLAGS
+(void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS);
+#endif
+BID_RETURN (res);
+
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_string.c b/gcc-4.9/libgcc/config/libbid/bid64_string.c
new file mode 100644
index 000000000..f22e62657
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_string.c
@@ -0,0 +1,511 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include "bid_internal.h"
+#include "bid128_2_str.h"
+#include "bid128_2_str_macros.h"
+
+#define MAX_FORMAT_DIGITS 16
+#define DECIMAL_EXPONENT_BIAS 398
+#define MAX_DECIMAL_EXPONENT 767
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid64_to_string (char *ps, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x;
+#else
+
+void
+bid64_to_string (char *ps, UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+// the destination string (pointed to by ps) must be pre-allocated
+ UINT64 sign_x, coefficient_x, D, ER10;
+ int istart, exponent_x, j, digits_x, bin_expon_cx;
+ int_float tempx;
+ UINT32 MiDi[12], *ptr;
+ UINT64 HI_18Dig, LO_18Dig, Tmp;
+ char *c_ptr_start, *c_ptr;
+ int midi_ind, k_lcv, len;
+ unsigned int save_fpsf;
+
+#if DECIMAL_CALL_BY_REFERENCE
+ x = *px;
+#endif
+
+ save_fpsf = *pfpsf; // place holder only
+ // unpack arguments, check for NaN or Infinity
+ if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) {
+ // x is Inf. or NaN or 0
+
+ // Inf or NaN?
+ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) {
+ if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) {
+ ps[0] = (sign_x) ? '-' : '+';
+ ps[1] = ((x & MASK_SNAN) == MASK_SNAN)? 'S':'Q';
+ ps[2] = 'N';
+ ps[3] = 'a';
+ ps[4] = 'N';
+ ps[5] = 0;
+ return;
+ }
+ // x is Inf
+ ps[0] = (sign_x) ? '-' : '+';
+ ps[1] = 'I';
+ ps[2] = 'n';
+ ps[3] = 'f';
+ ps[4] = 0;
+ return;
+ }
+ // 0
+ istart = 0;
+ if (sign_x) {
+ ps[istart++] = '-';
+ }
+
+ ps[istart++] = '0';
+ ps[istart++] = 'E';
+
+ exponent_x -= 398;
+ if (exponent_x < 0) {
+ ps[istart++] = '-';
+ exponent_x = -exponent_x;
+ } else
+ ps[istart++] = '+';
+
+ if (exponent_x) {
+ // get decimal digits in coefficient_x
+ tempx.d = (float) exponent_x;
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f;
+ digits_x = estimate_decimal_digits[bin_expon_cx];
+ if ((UINT64)exponent_x >= power10_table_128[digits_x].w[0])
+ digits_x++;
+
+ j = istart + digits_x - 1;
+ istart = j + 1;
+
+ // 2^32/10
+ ER10 = 0x1999999a;
+
+ while (exponent_x > 9) {
+ D = (UINT64) exponent_x *ER10;
+ D >>= 32;
+ exponent_x = exponent_x - (D << 1) - (D << 3);
+
+ ps[j--] = '0' + (char) exponent_x;
+ exponent_x = D;
+ }
+ ps[j] = '0' + (char) exponent_x;
+ } else {
+ ps[istart++] = '0';
+ }
+
+ ps[istart] = 0;
+
+ return;
+ }
+ // convert expon, coeff to ASCII
+ exponent_x -= DECIMAL_EXPONENT_BIAS;
+
+ ER10 = 0x1999999a;
+
+ istart = 0;
+ if (sign_x) {
+ ps[0] = '-';
+ istart = 1;
+ }
+ // if zero or non-canonical, set coefficient to '0'
+ if ((coefficient_x > 9999999999999999ull) || // non-canonical
+ ((coefficient_x == 0)) // significand is zero
+ ) {
+ ps[istart++] = '0';
+ } else {
+ /* ****************************************************
+ This takes a bid coefficient in C1.w[1],C1.w[0]
+ and put the converted character sequence at location
+ starting at &(str[k]). The function returns the number
+ of MiDi returned. Note that the character sequence
+ does not have leading zeros EXCEPT when the input is of
+ zero value. It will then output 1 character '0'
+ The algorithm essentailly tries first to get a sequence of
+ Millenial Digits "MiDi" and then uses table lookup to get the
+ character strings of these MiDis.
+ **************************************************** */
+ /* Algorithm first decompose possibly 34 digits in hi and lo
+ 18 digits. (The high can have at most 16 digits). It then
+ uses macro that handle 18 digit portions.
+ The first step is to get hi and lo such that
+ 2^(64) C1.w[1] + C1.w[0] = hi * 10^18 + lo, 0 <= lo < 10^18.
+ We use a table lookup method to obtain the hi and lo 18 digits.
+ [C1.w[1],C1.w[0]] = c_8 2^(107) + c_7 2^(101) + ... + c_0 2^(59) + d
+ where 0 <= d < 2^59 and each c_j has 6 bits. Because d fits in
+ 18 digits, we set hi = 0, and lo = d to begin with.
+ We then retrieve from a table, for j = 0, 1, ..., 8
+ that gives us A and B where c_j 2^(59+6j) = A * 10^18 + B.
+ hi += A ; lo += B; After each accumulation into lo, we normalize
+ immediately. So at the end, we have the decomposition as we need. */
+
+ Tmp = coefficient_x >> 59;
+ LO_18Dig = (coefficient_x << 5) >> 5;
+ HI_18Dig = 0;
+ k_lcv = 0;
+
+ while (Tmp) {
+ midi_ind = (int) (Tmp & 0x000000000000003FLL);
+ midi_ind <<= 1;
+ Tmp >>= 6;
+ HI_18Dig += mod10_18_tbl[k_lcv][midi_ind++];
+ LO_18Dig += mod10_18_tbl[k_lcv++][midi_ind];
+ __L0_Normalize_10to18 (HI_18Dig, LO_18Dig);
+ }
+
+ ptr = MiDi;
+ __L1_Split_MiDi_6_Lead (LO_18Dig, ptr);
+ len = ptr - MiDi;
+ c_ptr_start = &(ps[istart]);
+ c_ptr = c_ptr_start;
+
+ /* now convert the MiDi into character strings */
+ __L0_MiDi2Str_Lead (MiDi[0], c_ptr);
+ for (k_lcv = 1; k_lcv < len; k_lcv++) {
+ __L0_MiDi2Str (MiDi[k_lcv], c_ptr);
+ }
+ istart = istart + (c_ptr - c_ptr_start);
+ }
+
+ ps[istart++] = 'E';
+
+ if (exponent_x < 0) {
+ ps[istart++] = '-';
+ exponent_x = -exponent_x;
+ } else
+ ps[istart++] = '+';
+
+ if (exponent_x) {
+ // get decimal digits in coefficient_x
+ tempx.d = (float) exponent_x;
+ bin_expon_cx = ((tempx.i >> 23) & 0xff) - 0x7f;
+ digits_x = estimate_decimal_digits[bin_expon_cx];
+ if ((UINT64)exponent_x >= power10_table_128[digits_x].w[0])
+ digits_x++;
+
+ j = istart + digits_x - 1;
+ istart = j + 1;
+
+ // 2^32/10
+ ER10 = 0x1999999a;
+
+ while (exponent_x > 9) {
+ D = (UINT64) exponent_x *ER10;
+ D >>= 32;
+ exponent_x = exponent_x - (D << 1) - (D << 3);
+
+ ps[j--] = '0' + (char) exponent_x;
+ exponent_x = D;
+ }
+ ps[j] = '0' + (char) exponent_x;
+ } else {
+ ps[istart++] = '0';
+ }
+
+ ps[istart] = 0;
+
+ return;
+
+}
+
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_from_string (UINT64 * pres, char *ps
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#else
+UINT64
+bid64_from_string (char *ps
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 sign_x, coefficient_x = 0, rounded = 0, res;
+ int expon_x = 0, sgn_expon, ndigits, add_expon = 0, midpoint =
+ 0, rounded_up = 0;
+ int dec_expon_scale = 0, right_radix_leading_zeros = 0, rdx_pt_enc =
+ 0;
+ unsigned fpsc;
+ char c;
+ unsigned int save_fpsf;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ save_fpsf = *pfpsf; // place holder only
+ // eliminate leading whitespace
+ while (((*ps == ' ') || (*ps == '\t')) && (*ps))
+ ps++;
+
+ // get first non-whitespace character
+ c = *ps;
+
+ // detect special cases (INF or NaN)
+ if (!c || (c != '.' && c != '-' && c != '+' && (c < '0' || c > '9'))) {
+ // Infinity?
+ if ((tolower_macro (ps[0]) == 'i' && tolower_macro (ps[1]) == 'n' &&
+ tolower_macro (ps[2]) == 'f') && (!ps[3] ||
+ (tolower_macro (ps[3]) == 'i' &&
+ tolower_macro (ps[4]) == 'n' && tolower_macro (ps[5]) == 'i' &&
+ tolower_macro (ps[6]) == 't' && tolower_macro (ps[7]) == 'y' &&
+ !ps[8]))) {
+ res = 0x7800000000000000ull;
+ BID_RETURN (res);
+ }
+ // return sNaN
+ if (tolower_macro (ps[0]) == 's' && tolower_macro (ps[1]) == 'n' &&
+ tolower_macro (ps[2]) == 'a' && tolower_macro (ps[3]) == 'n') {
+ // case insensitive check for snan
+ res = 0x7e00000000000000ull;
+ BID_RETURN (res);
+ } else {
+ // return qNaN
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ }
+ // detect +INF or -INF
+ if ((tolower_macro (ps[1]) == 'i' && tolower_macro (ps[2]) == 'n' &&
+ tolower_macro (ps[3]) == 'f') && (!ps[4] ||
+ (tolower_macro (ps[4]) == 'i' && tolower_macro (ps[5]) == 'n' &&
+ tolower_macro (ps[6]) == 'i' && tolower_macro (ps[7]) == 't' &&
+ tolower_macro (ps[8]) == 'y' && !ps[9]))) {
+ if (c == '+')
+ res = 0x7800000000000000ull;
+ else if (c == '-')
+ res = 0xf800000000000000ull;
+ else
+ res = 0x7c00000000000000ull;
+ BID_RETURN (res);
+ }
+ // if +sNaN, +SNaN, -sNaN, or -SNaN
+ if (tolower_macro (ps[1]) == 's' && tolower_macro (ps[2]) == 'n'
+ && tolower_macro (ps[3]) == 'a' && tolower_macro (ps[4]) == 'n') {
+ if (c == '-')
+ res = 0xfe00000000000000ull;
+ else
+ res = 0x7e00000000000000ull;
+ BID_RETURN (res);
+ }
+ // determine sign
+ if (c == '-')
+ sign_x = 0x8000000000000000ull;
+ else
+ sign_x = 0;
+
+ // get next character if leading +/- sign
+ if (c == '-' || c == '+') {
+ ps++;
+ c = *ps;
+ }
+ // if c isn't a decimal point or a decimal digit, return NaN
+ if (c != '.' && (c < '0' || c > '9')) {
+ // return NaN
+ res = 0x7c00000000000000ull | sign_x;
+ BID_RETURN (res);
+ }
+
+ rdx_pt_enc = 0;
+
+ // detect zero (and eliminate/ignore leading zeros)
+ if (*(ps) == '0' || *(ps) == '.') {
+
+ if (*(ps) == '.') {
+ rdx_pt_enc = 1;
+ ps++;
+ }
+ // if all numbers are zeros (with possibly 1 radix point, the number is zero
+ // should catch cases such as: 000.0
+ while (*ps == '0') {
+ ps++;
+ // for numbers such as 0.0000000000000000000000000000000000001001,
+ // we want to count the leading zeros
+ if (rdx_pt_enc) {
+ right_radix_leading_zeros++;
+ }
+ // if this character is a radix point, make sure we haven't already
+ // encountered one
+ if (*(ps) == '.') {
+ if (rdx_pt_enc == 0) {
+ rdx_pt_enc = 1;
+ // if this is the first radix point, and the next character is NULL,
+ // we have a zero
+ if (!*(ps + 1)) {
+ res =
+ ((UINT64) (398 - right_radix_leading_zeros) << 53) |
+ sign_x;
+ BID_RETURN (res);
+ }
+ ps = ps + 1;
+ } else {
+ // if 2 radix points, return NaN
+ res = 0x7c00000000000000ull | sign_x;
+ BID_RETURN (res);
+ }
+ } else if (!*(ps)) {
+ //pres->w[1] = 0x3040000000000000ull | sign_x;
+ res =
+ ((UINT64) (398 - right_radix_leading_zeros) << 53) | sign_x;
+ BID_RETURN (res);
+ }
+ }
+ }
+
+ c = *ps;
+
+ ndigits = 0;
+ while ((c >= '0' && c <= '9') || c == '.') {
+ if (c == '.') {
+ if (rdx_pt_enc) {
+ // return NaN
+ res = 0x7c00000000000000ull | sign_x;
+ BID_RETURN (res);
+ }
+ rdx_pt_enc = 1;
+ ps++;
+ c = *ps;
+ continue;
+ }
+ dec_expon_scale += rdx_pt_enc;
+
+ ndigits++;
+ if (ndigits <= 16) {
+ coefficient_x = (coefficient_x << 1) + (coefficient_x << 3);
+ coefficient_x += (UINT64) (c - '0');
+ } else if (ndigits == 17) {
+ // coefficient rounding
+ switch(rnd_mode){
+ case ROUNDING_TO_NEAREST:
+ midpoint = (c == '5' && !(coefficient_x & 1)) ? 1 : 0;
+ // if coefficient is even and c is 5, prepare to round up if
+ // subsequent digit is nonzero
+ // if str[MAXDIG+1] > 5, we MUST round up
+ // if str[MAXDIG+1] == 5 and coefficient is ODD, ROUND UP!
+ if (c > '5' || (c == '5' && (coefficient_x & 1))) {
+ coefficient_x++;
+ rounded_up = 1;
+ break;
+
+ case ROUNDING_DOWN:
+ if(sign_x) { coefficient_x++; rounded_up=1; }
+ break;
+ case ROUNDING_UP:
+ if(!sign_x) { coefficient_x++; rounded_up=1; }
+ break;
+ case ROUNDING_TIES_AWAY:
+ if(c>='5') { coefficient_x++; rounded_up=1; }
+ break;
+ }
+ if (coefficient_x == 10000000000000000ull) {
+ coefficient_x = 1000000000000000ull;
+ add_expon = 1;
+ }
+ }
+ if (c > '0')
+ rounded = 1;
+ add_expon += 1;
+ } else { // ndigits > 17
+ add_expon++;
+ if (midpoint && c > '0') {
+ coefficient_x++;
+ midpoint = 0;
+ rounded_up = 1;
+ }
+ if (c > '0')
+ rounded = 1;
+ }
+ ps++;
+ c = *ps;
+ }
+
+ add_expon -= (dec_expon_scale + right_radix_leading_zeros);
+
+ if (!c) {
+ res =
+ fast_get_BID64_check_OF (sign_x,
+ add_expon + DECIMAL_EXPONENT_BIAS,
+ coefficient_x, 0, &fpsc);
+ BID_RETURN (res);
+ }
+
+ if (c != 'E' && c != 'e') {
+ // return NaN
+ res = 0x7c00000000000000ull | sign_x;
+ BID_RETURN (res);
+ }
+ ps++;
+ c = *ps;
+ sgn_expon = (c == '-') ? 1 : 0;
+ if (c == '-' || c == '+') {
+ ps++;
+ c = *ps;
+ }
+ if (!c || c < '0' || c > '9') {
+ // return NaN
+ res = 0x7c00000000000000ull | sign_x;
+ BID_RETURN (res);
+ }
+
+ while (c >= '0' && c <= '9') {
+ expon_x = (expon_x << 1) + (expon_x << 3);
+ expon_x += (int) (c - '0');
+
+ ps++;
+ c = *ps;
+ }
+
+ if (c) {
+ // return NaN
+ res = 0x7c00000000000000ull | sign_x;
+ BID_RETURN (res);
+ }
+
+ if (sgn_expon)
+ expon_x = -expon_x;
+
+ expon_x += add_expon + DECIMAL_EXPONENT_BIAS;
+
+ if (expon_x < 0) {
+ if (rounded_up)
+ coefficient_x--;
+ rnd_mode = 0;
+ res =
+ get_BID64_UF (sign_x, expon_x, coefficient_x, rounded, rnd_mode,
+ &fpsc);
+ BID_RETURN (res);
+ }
+ res = get_BID64 (sign_x, expon_x, coefficient_x, rnd_mode, &fpsc);
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_bid128.c b/gcc-4.9/libgcc/config/libbid/bid64_to_bid128.c
new file mode 100644
index 000000000..276659b88
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_bid128.c
@@ -0,0 +1,262 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define BID_128RES
+#include "bid_internal.h"
+
+/*
+ * Takes a BID64 as input and converts it to a BID128 and returns it.
+ */
+TYPE0_FUNCTION_ARGTYPE1_NORND (UINT128, bid64_to_bid128, UINT64, x)
+
+ UINT128 new_coeff, res;
+ UINT64 sign_x;
+ int exponent_x;
+ UINT64 coefficient_x;
+
+if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) {
+if (((x) << 1) >= 0xf000000000000000ull) {
+#ifdef SET_STATUS_FLAGS
+ if (((x) & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ res.w[0] = (coefficient_x & 0x0003ffffffffffffull);
+ __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]);
+ res.w[1] |= ((coefficient_x) & 0xfc00000000000000ull);
+ BID_RETURN (res);
+}
+}
+
+new_coeff.w[0] = coefficient_x;
+new_coeff.w[1] = 0;
+get_BID128_very_fast (&res, sign_x,
+ exponent_x + DECIMAL_EXPONENT_BIAS_128 -
+ DECIMAL_EXPONENT_BIAS, new_coeff);
+BID_RETURN (res);
+} // convert_bid64_to_bid128
+
+
+
+/*
+ * Takes a BID128 as input and converts it to a BID64 and returns it.
+ */
+#if DECIMAL_CALL_BY_REFERENCE
+
+void
+bid128_to_bid64 (UINT64 * pres,
+ UINT128 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+
+UINT64
+bid128_to_bid64 (UINT128 x _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 CX, T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1, CX1;
+ UINT64 sign_x, carry, cy, res;
+ SINT64 D;
+ int_float f64, fx;
+ int exponent_x, extra_digits, amount, bin_expon_cx;
+ unsigned rmode, status, uf_check = 0;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ BID_SWAP128 (x);
+ // unpack arguments, check for NaN or Infinity or 0
+ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) {
+ if ((x.w[1] << 1) >= 0xf000000000000000ull) {
+ Tmp.w[1] = (CX.w[1] & 0x00003fffffffffffull);
+ Tmp.w[0] = CX.w[0];
+ TP128 = reciprocals10_128[18];
+ __mul_128x128_full (Qh, Ql, Tmp, TP128);
+ amount = recip_scale[18];
+ __shr_128 (Tmp, Qh, amount);
+ res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0];
+#ifdef SET_STATUS_FLAGS
+ if ((x.w[1] & SNAN_MASK64) == SNAN_MASK64) // sNaN
+ __set_status_flags (pfpsf, INVALID_EXCEPTION);
+#endif
+ BID_RETURN_VAL (res);
+ }
+ exponent_x =
+ exponent_x - DECIMAL_EXPONENT_BIAS_128 + DECIMAL_EXPONENT_BIAS;
+ if (exponent_x < 0) {
+ res = sign_x;
+ BID_RETURN_VAL (res);
+ }
+ if (exponent_x > DECIMAL_MAX_EXPON_64)
+ exponent_x = DECIMAL_MAX_EXPON_64;
+ res = sign_x | (((UINT64) exponent_x) << 53);
+ BID_RETURN_VAL (res);
+ }
+
+ if (CX.w[1] || (CX.w[0] >= 10000000000000000ull)) {
+ // find number of digits in coefficient
+ // 2^64
+ f64.i = 0x5f800000;
+ // fx ~ CX
+ fx.d = (float) CX.w[1] * f64.d + (float) CX.w[0];
+ bin_expon_cx = ((fx.i >> 23) & 0xff) - 0x7f;
+ extra_digits = estimate_decimal_digits[bin_expon_cx] - 16;
+ // scale = 38-estimate_decimal_digits[bin_expon_cx];
+ D = CX.w[1] - power10_index_binexp_128[bin_expon_cx].w[1];
+ if (D > 0
+ || (!D
+ && CX.w[0] >= power10_index_binexp_128[bin_expon_cx].w[0]))
+ extra_digits++;
+
+ exponent_x += extra_digits;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rnd_mode;
+ if (sign_x && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ if (exponent_x < DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS) {
+ uf_check = 1;
+ if (-extra_digits + exponent_x - DECIMAL_EXPONENT_BIAS_128 +
+ DECIMAL_EXPONENT_BIAS + 35 >= 0) {
+ if (exponent_x ==
+ DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS - 1) {
+ T128 = round_const_table_128[rmode][extra_digits];
+ __add_carry_out (CX1.w[0], carry, T128.w[0], CX.w[0]);
+ CX1.w[1] = CX.w[1] + T128.w[1] + carry;
+ if (__unsigned_compare_ge_128
+ (CX1, power10_table_128[extra_digits + 16]))
+ uf_check = 0;
+ }
+ extra_digits =
+ extra_digits + DECIMAL_EXPONENT_BIAS_128 -
+ DECIMAL_EXPONENT_BIAS - exponent_x;
+ exponent_x = DECIMAL_EXPONENT_BIAS_128 - DECIMAL_EXPONENT_BIAS;
+ //uf_check = 2;
+ } else
+ rmode = ROUNDING_TO_ZERO;
+ }
+
+ T128 = round_const_table_128[rmode][extra_digits];
+ __add_carry_out (CX.w[0], carry, T128.w[0], CX.w[0]);
+ CX.w[1] = CX.w[1] + T128.w[1] + carry;
+
+ TP128 = reciprocals10_128[extra_digits];
+ __mul_128x128_full (Qh, Ql, CX, TP128);
+ amount = recip_scale[extra_digits];
+
+ if (amount >= 64) {
+ CX.w[0] = Qh.w[1] >> (amount - 64);
+ CX.w[1] = 0;
+ } else {
+ __shr_128 (CX, Qh, amount);
+ }
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (!(rmode))
+#endif
+ if (CX.w[0] & 1) {
+ // check whether fractional part of initial_P/10^ed1 is exactly .5
+
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ if (!Qh1.w[1] && !Qh1.w[0]
+ && (Ql.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Ql.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Ql.w[0] < reciprocals10_128[extra_digits].w[0]))) {
+ CX.w[0]--;
+ }
+ }
+#endif
+
+ {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Ql.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Ql.w[0] < reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if ((!Qh1.w[1]) && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Ql.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Ql.w[0] < reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], cy, Ql.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Ql.w[1],
+ reciprocals10_128[extra_digits].w[1], cy);
+ __shr_128_long (Qh, Qh1, (128 - amount));
+ Tmp.w[0] = 1;
+ Tmp.w[1] = 0;
+ __shl_128_long (Tmp1, Tmp, amount);
+ Qh.w[0] += carry;
+ if (Qh.w[0] < carry)
+ Qh.w[1]++;
+ if (__unsigned_compare_ge_128 (Qh, Tmp1))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS) {
+ if (uf_check)
+ status |= UNDERFLOW_EXCEPTION;
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (pfpsf, status);
+#endif
+ }
+
+
+ }
+
+ }
+
+ res =
+ get_BID64 (sign_x,
+ exponent_x - DECIMAL_EXPONENT_BIAS_128 +
+ DECIMAL_EXPONENT_BIAS, CX.w[0], rnd_mode, pfpsf);
+ BID_RETURN_VAL (res);
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_int16.c b/gcc-4.9/libgcc/config/libbid/bid64_to_int16.c
new file mode 100644
index 000000000..489b7c5ce
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_int16.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffff8000
+#define INVALID_RESULT 0x8000
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_rnint, UINT64, x,
+ bid64_to_int32_rnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xrnint, UINT64, x,
+ bid64_to_int32_xrnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_rninta, UINT64, x,
+ bid64_to_int32_rninta, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xrninta, UINT64, x,
+ bid64_to_int32_xrninta, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_int, UINT64, x,
+ bid64_to_int32_int, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xint, UINT64, x,
+ bid64_to_int32_xint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_floor, UINT64, x,
+ bid64_to_int32_floor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_ceil, UINT64, x,
+ bid64_to_int32_ceil, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xfloor, UINT64, x,
+ bid64_to_int32_xfloor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (short, bid64_to_int16_xceil, UINT64, x,
+ bid64_to_int32_xceil, int, SIZE_MASK,
+ INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_int32.c b/gcc-4.9/libgcc/config/libbid/bid64_to_int32.c
new file mode 100644
index 000000000..1c0022c9a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_int32.c
@@ -0,0 +1,2587 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64_to_int32_rnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_rnint (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_rnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=16
+ // <=> C * 10^(11-q) > 0x500000005, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x500000005 <=>
+ // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1/2 up)
+ // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000005ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1/2 up)
+ // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x4fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 <= n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (C1 <= midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0]
+ && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_xrnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_xrnint (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_xrnint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000005, 1<=q<=16
+ // <=> C * 10^(11-q) > 0x500000005, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x500000005 <=>
+ // C > 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1/2 up)
+ // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000005ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1/2 up)
+ // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x4fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (C1 <= midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0]
+ && (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_floor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_floor (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_floor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x500000000 <=>
+ // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1 up)
+ // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000000ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1 up)
+ // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 <= n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return -1 or 0
+ if (x_sign)
+ res = 0xffffffff;
+ else
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_xfloor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_xfloor (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_xfloor (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n < -2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x500000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x500000000 <=>
+ // C > 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1 up)
+ // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000000ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1 up)
+ // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 <= n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return -1 or 0
+ if (x_sign)
+ res = 0xffffffff;
+ else
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_ceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_ceil (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_ceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1 up)
+ // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x50000000aull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=16
+ // <=> C * 10^(11-q) > 0x4fffffff6, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x4fffffff6 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x4fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x4fffffff6 <=>
+ // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1 up)
+ // Note: 0x4fffffff6*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x4fffffff6ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1 < n <= 2^31 - 1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0 or 1
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_xceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_xceil (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_xceil (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1 up)
+ // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x50000000aull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^31 - 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x4fffffff6, 1<=q<=16
+ // <=> C * 10^(11-q) > 0x4fffffff6, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x4fffffff6 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x4fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x4fffffff6 <=>
+ // C > 0x4fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1 up)
+ // Note: 0x4fffffff6*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x4fffffff6ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1 < n <= 2^31 - 1
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0 or 1
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x <= 2^31-1 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_int
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_int (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_int (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1 up)
+ // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x50000000aull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1 up)
+ // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_xint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_xint (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_xint (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x50000000a, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x50000000a, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x50000000a has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x50000000aull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x50000000a <=>
+ // C >= 0x50000000a * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1 up)
+ // Note: 0x50000000a*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x50000000aull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x500000000 <=>
+ // C >= 0x500000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1 up)
+ // Note: 0x500000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1 < n < 2^31
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1 < x <= -1 or 1 <= x < 2^31 so x can be rounded
+ // to nearest to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_rninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_rninta (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_rninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000005, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x500000005 <=>
+ // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1/2 up)
+ // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000005ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1/2 up)
+ // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x4fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (C1 < midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest away to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*)-1 (logical right shift; C* has p decimal digits,
+ // correct by Pr. 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int32_xrninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int32_xrninta (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+int
+bid64_to_int32_xrninta (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in a signed 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10
+ // if n <= -2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x500000005, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x500000005, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x500000005ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x500000005 <=>
+ // C >= 0x500000005 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31+1/2 up)
+ // Note: 0x500000005*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x500000005ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^31 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^31-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x4fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x4fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x500000005 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x4fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x4fffffffb <=>
+ // C >= 0x4fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^31-1/2 up)
+ // Note: 0x4fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x4fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32: -2^31 - 1/2 < n < 2^31 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1;
+ if (C1 < midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffff; // return -1
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^31-1/2 <= x <= -1 or 1 <= x < 2^31-1/2 so x can be rounded
+ // to nearest away to a 32-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*)-1 (logical right shift; C* has p decimal digits,
+ // correct by Pr. 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_int64.c b/gcc-4.9/libgcc/config/libbid/bid64_to_int64.c
new file mode 100644
index 000000000..a0a78cb64
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_int64.c
@@ -0,0 +1,2329 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64_to_int64_rnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_rnint (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_rnint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=16
+ // <=> C * 10^(20-q) > 0x50000000000000005, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] > 0x05ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] > 0x04ull ||
+ (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 <= midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0] &&
+ (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_xrnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_xrnint (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_xrnint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64+1), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000005, 1<=q<=16
+ // <=> C * 10^(20-q) > 0x50000000000000005, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] > 0x05ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] > 0x04ull ||
+ (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1/2 <= n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 <= midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1/2 <= x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0] &&
+ (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_floor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_floor (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_floor (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=16
+ // <=> C * 10^(20-q) > 0x50000000000000000, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] != 0)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] >= 0x05ull) {
+ // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63 <= n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return -1 or 0
+ if (x_sign)
+ res = 0xffffffffffffffffull;
+ else
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_xfloor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_xfloor (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_xfloor (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n < -2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 > 0x50000000000000000, 1<=q<=16
+ // <=> C * 10^(20-q) > 0x50000000000000000, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] != 0)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] >= 0x05ull) {
+ // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63 <= n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return -1 or 0
+ if (x_sign)
+ res = 0xffffffffffffffffull;
+ else
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63 <= x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (x_sign) { // negative and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_ceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_ceil (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_ceil (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16
+ // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n > 2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64-2), 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=16
+ // <=> if C * 10^(20-q) > 0x4fffffffffffffff6, 1<=q<=16
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffff6ull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] > 0x04ull ||
+ (C.w[1] == 0x04ull && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0 or 1
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_xceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_xceil (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_xceil (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16
+ // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n > 2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) > 2^63 - 1
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 5*(2^64-2), 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 > 0x4fffffffffffffff6, 1<=q<=16
+ // <=> if C * 10^(20-q) > 0x4fffffffffffffff6, 1<=q<=16
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffff6ull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] > 0x04ull ||
+ (C.w[1] == 0x04ull && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0 or 1
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x <= 2^63 - 1 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ if (!x_sign) { // positive and inexact
+ Cstar++;
+ }
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_int
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_int (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_int (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16
+ // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] >= 0x05ull) {
+ // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_xint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_xint (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_xint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+2), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x5000000000000000a, 1<=q<=16
+ // <=> C * 10^(20-q) >= 0x5000000000000000a, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x5000000000000000a, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x0aull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*2^64, 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000000, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x50000000000000000, 1<=q<=16
+ C.w[1] = 0x0000000000000005ull;
+ C.w[0] = 0x0000000000000000ull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] >= 0x05ull) {
+ // actually C.w[1] == 0x05ull && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1 < n < 2^63
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1 < x <= -1 or 1 <= x < 2^63 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_rninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_rninta (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_rninta (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=16
+ // <=> C * 10^(20-q) >= 0x50000000000000005, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x05ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] > 0x04ull ||
+ (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1/2 < n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 < midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1/2 < x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_int64_xrninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_int64_xrninta (SINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+SINT64
+bid64_to_int64_xrninta (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ SINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 19) { // x >= 10^19 ~= 2^63.11... (cannot fit in SINT64)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 19) { // x = c(0)c(1)...c(18).c(19)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in a signed 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 19'
+ if (x_sign) { // if n < 0 and q + exp = 19
+ // if n <= -2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63+1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64+1), 1<=q<=16
+ // <=> 0.c(0)c(1)...c(q-1) * 10^20 >= 0x50000000000000005, 1<=q<=16
+ // <=> C * 10^(20-q) >= 0x50000000000000005, 1<=q<=16
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ // Note: C1 * 10^(11-q) has 19 or 20 digits; 0x50000000000000005, has 20
+ if (C.w[1] > 0x05ull || (C.w[1] == 0x05ull && C.w[0] >= 0x05ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } else { // if n > 0 and q + exp = 19
+ // if n >= 2^63 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(18).c(19)...c(q-1) >= 2^63-1/2
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 5*(2^64-1), 1<=q<=16
+ // <=> if 0.c(0)c(1)...c(q-1) * 10^20 >= 0x4fffffffffffffffb, 1<=q<=16
+ // <=> if C * 10^(20-q) >= 0x4fffffffffffffffb, 1<=q<=16
+ C.w[1] = 0x0000000000000004ull;
+ C.w[0] = 0xfffffffffffffffbull;
+ // 1 <= q <= 16 => 4 <= 20-q <= 19 => 10^(20-q) is 64-bit, and so is C1
+ __mul_64x64_to_128MACH (C, C1, ten2k64[20 - q]);
+ if (C.w[1] > 0x04ull ||
+ (C.w[1] == 0x04ull && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 19'
+ } // end else if n > 0 and q + exp = 19
+ } // end else if ((q + exp) == 19)
+
+ // n is not too large to be converted to int64: -2^63-1/2 < n < 2^63-1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else
+ // res = +/-1
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 < midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (x_sign) { // n < 0
+ res = 0xffffffffffffffffull; // return -1
+ } else { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 19, 1 <= q <= 16, -15 <= exp <= 18)
+ // -2^63-1/2 < x <= -1 or 1 <= x < 2^63-1/2 so x can be rounded
+ // to nearest to a 64-bit signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 19
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ if (x_sign)
+ res = -Cstar;
+ else
+ res = Cstar;
+ } else if (exp == 0) {
+ // 1 <= q <= 16
+ // res = +/-C (exact)
+ if (x_sign)
+ res = -C1;
+ else
+ res = C1;
+ } else { // if (exp > 0) => 1 <= exp <= 18, 1 <= q <= 16, 2 <= q + exp <= 20
+ // (the upper limit of 20 on q + exp is due to the fact that
+ // +/-C * 10^exp is guaranteed to fit in 64 bits)
+ // res = +/-C * 10^exp (exact)
+ if (x_sign)
+ res = -C1 * ten2k64[exp];
+ else
+ res = C1 * ten2k64[exp];
+ }
+ }
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_int8.c b/gcc-4.9/libgcc/config/libbid/bid64_to_int8.c
new file mode 100644
index 000000000..7af3b8c60
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_int8.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffffff80
+#define INVALID_RESULT 0x80
+
+
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_rnint, UINT64, x,
+ bid64_to_int32_rnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xrnint, UINT64, x,
+ bid64_to_int32_xrnint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_rninta, UINT64, x,
+ bid64_to_int32_rninta, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xrninta, UINT64, x,
+ bid64_to_int32_xrninta, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_int, UINT64, x,
+ bid64_to_int32_int, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xint, UINT64, x,
+ bid64_to_int32_xint, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_floor, UINT64, x,
+ bid64_to_int32_floor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_ceil, UINT64, x,
+ bid64_to_int32_ceil, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xfloor, UINT64, x,
+ bid64_to_int32_xfloor, int, SIZE_MASK,
+ INVALID_RESULT)
+
+BID_TO_SMALL_INT_CVT_FUNCTION (char, bid64_to_int8_xceil, UINT64, x,
+ bid64_to_int32_xceil, int, SIZE_MASK,
+ INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_uint16.c b/gcc-4.9/libgcc/config/libbid/bid64_to_uint16.c
new file mode 100644
index 000000000..c27cf9f3e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_uint16.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffff0000
+#define INVALID_RESULT 0x8000
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_rnint,
+ UINT64, x, bid64_to_uint32_rnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xrnint,
+ UINT64, x, bid64_to_uint32_xrnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_rninta,
+ UINT64, x, bid64_to_uint32_rninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xrninta,
+ UINT64, x, bid64_to_uint32_xrninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_int,
+ UINT64, x, bid64_to_uint32_int,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xint,
+ UINT64, x, bid64_to_uint32_xint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_floor,
+ UINT64, x, bid64_to_uint32_floor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_ceil,
+ UINT64, x, bid64_to_uint32_ceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xfloor,
+ UINT64, x, bid64_to_uint32_xfloor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned short, bid64_to_uint16_xceil,
+ UINT64, x, bid64_to_uint32_xceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_uint32.c b/gcc-4.9/libgcc/config/libbid/bid64_to_uint32.c
new file mode 100644
index 000000000..ecfbc6d5e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_uint32.c
@@ -0,0 +1,2270 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64_to_uint32_rnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_rnint (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_rnint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x9fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1/2 <= n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (C1 <= midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32-1/2 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0] &&
+ (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_xrnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_xrnint (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_xrnint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x9fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1/2 <= n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (C1 <= midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32-1/2 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0] &&
+ (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_floor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_floor (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_floor (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ if (x_sign) { // if n < 0 the conversion is invalid
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ // n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0xa00000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ // n is not too large to be converted to int32 if -1 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // 1 <= x < 2^32 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_xfloor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_xfloor (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_xfloor (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ if (x_sign) { // if n < 0 the conversion is invalid
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ // if n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0xa00000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ // n is not too large to be converted to int32 if -1 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // 1 <= x < 2^32 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) {
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_ceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_ceil (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_ceil (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^32 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=16
+ // <=> C * 10^(11-q) > 0x9fffffff6, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffff6 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x9fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x9fffffff6 <=>
+ // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1 up)
+ // Note: 0x9fffffff6*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x9fffffff6ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0 or 1
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // x <= -1 or 1 <= x <= 2^32 - 1 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x <= 2^32 - 1 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_xceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_xceil (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_xceil (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n > 2^32 - 1 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) > 2^32 - 1
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 > 0x9fffffff6, 1<=q<=16
+ // <=> C * 10^(11-q) > 0x9fffffff6, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffff6 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 > 0x9fffffff6ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) > 0x9fffffff6 <=>
+ // C > 0x9fffffff6 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1 up)
+ // Note: 0x9fffffff6*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x9fffffff6ull * ten2k64[q - 11];
+ if (C1 > tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0 or 1
+ if (x_sign)
+ res = 0x00000000;
+ else
+ res = 0x00000001;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // x <= -1 or 1 <= x < 2^32 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_int
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_int (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_int (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0xa00000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // x <= -1 or 1 <= x < 2^32 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_xint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_xint (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_xint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0xa00000000, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0xa00000000, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0xa00000000 has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0xa00000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0xa00000000 <=>
+ // C >= 0xa00000000 * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0xa00000000*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0xa00000000ull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1 < n < 2^32
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // x <= -1 or 1 <= x < 2^32 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_rninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_rninta (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_rninta (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x9fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1/2 < n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (C1 < midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32-1/2 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint32_xrninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint32_xrninta (unsigned int *pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+unsigned int
+bid64_to_uint32_xrninta (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ unsigned int res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 10) { // x >= 10^10 ~= 2^33.2... (cannot fit in 32 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 10) { // x = c(0)c(1)...c(9).c(10)...c(q-1)
+ // in this case 2^29.89... ~= 10^9 <= x < 10^10 ~= 2^33.2...
+ // so x rounded to an integer may or may not fit in an unsigned 32-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 10'
+ if (x_sign) { // if n < 0 and q + exp = 10 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 10
+ // if n >= 2^32 - 1/2 then n is too large
+ // too large if c(0)c(1)...c(9).c(10)...c(q-1) >= 2^32-1/2
+ // <=> 0.c(0)c(1)...c(q-1) * 10^11 >= 0x9fffffffb, 1<=q<=16
+ // <=> C * 10^(11-q) >= 0x9fffffffb, 1<=q<=16
+ if (q <= 11) {
+ // Note: C * 10^(11-q) has 10 or 11 digits; 0x9fffffffb has 11 digits
+ tmp64 = C1 * ten2k64[11 - q]; // C scaled up to 11-digit int
+ // c(0)c(1)...c(9)c(10) or c(0)c(1)...c(q-1)0...0 (11 digits)
+ if (tmp64 >= 0x9fffffffbull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit unsigned int fall through
+ // to '1 <= q + exp <= 10'
+ } else { // if (q > 11), i.e. 12 <= q <= 16 and so -15 <= exp <= -2
+ // C * 10^(11-q) >= 0x9fffffffb <=>
+ // C >= 0x9fffffffb * 10^(q-11) where 1 <= q - 11 <= 5
+ // (scale 2^32-1/2 up)
+ // Note: 0x9fffffffb*10^(q-11) has q-1 or q digits, where q <= 16
+ tmp64 = 0x9fffffffbull * ten2k64[q - 11];
+ if (C1 >= tmp64) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 32-bit int fall through
+ // to '1 <= q + exp <= 10'
+ }
+ }
+ }
+ // n is not too large to be converted to int32 if -1/2 < n < 2^32 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x00000000;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1;
+ if (C1 < midpoint64[ind]) {
+ res = 0x00000000; // return 0
+ } else if (x_sign) { // n < 0
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ } else { // n > 0
+ res = 0x00000001; // return +1
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 10, 1 <= q <= 16, -15 <= exp <= 9)
+ // -2^32-1/2 <= x <= -1 or 1 <= x < 2^32-1/2 so if positive, x can be
+ // rounded to nearest to a 32-bit unsigned integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x80000000;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^32-1/2 so x can be rounded
+ // to nearest to a 32-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 10
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_uint64.c b/gcc-4.9/libgcc/config/libbid/bid64_to_uint64.c
new file mode 100644
index 000000000..5f800a0ed
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_uint64.c
@@ -0,0 +1,2273 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64_to_uint64_rnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_rnint (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_rnint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 <= midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ } else { // if n < 0
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0] &&
+ (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_xrnint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_xrnint (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_xrnint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) <= 0.5 <=> c(0)c(1)...c(q-1) <= 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 <= midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ } else { // if n < 0
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero, so
+ // it will need a correction
+ // check for midpoints
+ if ((fstar.w[1] == 0) && fstar.w[0] &&
+ (fstar.w[0] <= ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // the result is a midpoint; round to nearest
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result >= 1
+ Cstar--; // Cstar is now even
+ } // else MP in [ODD, EVEN]
+ }
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_floor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_floor (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_floor (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ if (x_sign) { // if n < 0 the conversion is invalid
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ // n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65)
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // 1 <= x < 2^64 so x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_xfloor
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_xfloor (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_xfloor (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ if (x_sign) { // if n < 0 the conversion is invalid
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ // n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65)
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // 1 <= x < 2^64 so x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_ceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_ceil (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_ceil (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n > 2^64 - 1 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65 - 2)
+ // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 > 0x9fffffffffffffff6
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffff6
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0 or 1
+ if (x_sign)
+ res = 0x0000000000000000ull;
+ else
+ res = 0x0000000000000001ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x <= 2^64 - 1 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x <= 2^64 - 1 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_xceil
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_xceil (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_xceil (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n > 2^64 - 1 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 > 2^64 - 1
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65 - 2)
+ // <=> C * 10^(21-q) > 0x9fffffffffffffff6, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 > 0x9fffffffffffffff6
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffff6
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] > 0xfffffffffffffff6ull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0 or 1
+ if (x_sign)
+ res = 0x0000000000000000ull;
+ else
+ res = 0x0000000000000001ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x <= 2^64 - 1 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x <= 2^64 - 1 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ Cstar++;
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_int
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_int (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_int (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM)
+{
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65)
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_xint
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_xint (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_xint (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65)
+ // <=> C * 10^(21-q) >= 0xa0000000000000000, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0xa0000000000000000
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0xa0000000000000000
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] >= 0x0a) {
+ // actually C.w[1] == 0x0a && C.w[0] >= 0x0000000000000000ull) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1 < n < 2^64
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) <= 0) { // n = +/-0.[0...0]c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 fits in 64 bits
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = C1 * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* < 10^(-x)) then
+ // the result is exact
+ // else // if (f* > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ }
+
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_rninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_rninta (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_rninta (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 < midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ } else { // if n < 0
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+
+ // if the result was a midpoint it was rounded away from zero
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
+
+/*****************************************************************************
+ * BID64_to_uint64_xrninta
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_uint64_xrninta (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT64
+bid64_to_uint64_xrninta (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+ UINT64 x_sign;
+ UINT64 x_exp;
+ int exp; // unbiased exponent
+ // Note: C1 represents x_significand (UINT64)
+ UINT64 tmp64;
+ BID_UI64DOUBLE tmp1;
+ unsigned int x_nr_bits;
+ int q, ind, shift;
+ UINT64 C1;
+ UINT128 C;
+ UINT64 Cstar; // C* represents up to 16 decimal digits ~ 54 bits
+ UINT128 fstar;
+ UINT128 P128;
+
+ // check for NaN or Infinity
+ if ((x & MASK_NAN) == MASK_NAN || (x & MASK_INF) == MASK_INF) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // unpack x
+ x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative
+ // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] =>
+ if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) {
+ x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased
+ C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2;
+ if (C1 > 9999999999999999ull) { // non-canonical
+ x_exp = 0;
+ C1 = 0;
+ }
+ } else {
+ x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased
+ C1 = x & MASK_BINARY_SIG1;
+ }
+
+ // check for zeros (possibly from non-canonical values)
+ if (C1 == 0x0ull) {
+ // x is 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ }
+ // x is not special and is not zero
+
+ // q = nr. of decimal digits in x (1 <= q <= 54)
+ // determine first the nr. of bits in x
+ if (C1 >= 0x0020000000000000ull) { // x >= 2^53
+ // split the 64-bit value in two 32-bit halves to avoid rounding errors
+ if (C1 >= 0x0000000100000000ull) { // x >= 2^32
+ tmp1.d = (double) (C1 >> 32); // exact conversion
+ x_nr_bits =
+ 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ } else { // x < 2^32
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ } else { // if x < 2^53
+ tmp1.d = (double) C1; // exact conversion
+ x_nr_bits =
+ 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff);
+ }
+ q = nr_digits[x_nr_bits - 1].digits;
+ if (q == 0) {
+ q = nr_digits[x_nr_bits - 1].digits1;
+ if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo)
+ q++;
+ }
+ exp = x_exp - 398; // unbiased exponent
+
+ if ((q + exp) > 20) { // x >= 10^20 ~= 2^66.45... (cannot fit in 64 bits)
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 20) { // x = c(0)c(1)...c(19).c(20)...c(q-1)
+ // in this case 2^63.11... ~= 10^19 <= x < 10^20 ~= 2^66.43...
+ // so x rounded to an integer may or may not fit in an unsigned 64-bit int
+ // the cases that do not fit are identified here; the ones that fit
+ // fall through and will be handled with other cases further,
+ // under '1 <= q + exp <= 20'
+ if (x_sign) { // if n < 0 and q + exp = 20 then x is much less than -1/2
+ // => set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ } else { // if n > 0 and q + exp = 20
+ // if n >= 2^64 - 1/2 then n is too large
+ // <=> c(0)c(1)...c(19).c(20)...c(q-1) >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^20 >= 2^64-1/2
+ // <=> 0.c(0)c(1)...c(19)c(20)...c(q-1) * 10^21 >= 5*(2^65-1)
+ // <=> C * 10^(21-q) >= 0x9fffffffffffffffb, 1<=q<=16
+ if (q == 1) {
+ // C * 10^20 >= 0x9fffffffffffffffb
+ __mul_128x64_to_128 (C, C1, ten2k128[0]); // 10^20 * C
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ } else { // if (2 <= q <= 16) => 5 <= 21 - q <= 19
+ // Note: C * 10^(21-q) has 20 or 21 digits; 0x9fffffffffffffffb
+ // has 21 digits
+ __mul_64x64_to_128MACH (C, C1, ten2k64[21 - q]);
+ if (C.w[1] > 0x09 ||
+ (C.w[1] == 0x09 && C.w[0] >= 0xfffffffffffffffbull)) {
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // else cases that can be rounded to a 64-bit int fall through
+ // to '1 <= q + exp <= 20'
+ }
+ }
+ }
+ // n is not too large to be converted to int64 if -1/2 <= n < 2^64 - 1/2
+ // Note: some of the cases tested for above fall through to this point
+ if ((q + exp) < 0) { // n = +/-0.0...c(0)c(1)...c(q-1)
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ // return 0
+ res = 0x0000000000000000ull;
+ BID_RETURN (res);
+ } else if ((q + exp) == 0) { // n = +/-0.c(0)c(1)...c(q-1)
+ // if 0.c(0)c(1)...c(q-1) < 0.5 <=> c(0)c(1)...c(q-1) < 5 * 10^(q-1)
+ // res = 0
+ // else if x > 0
+ // res = +1
+ // else // if x < 0
+ // invalid exc
+ ind = q - 1; // 0 <= ind <= 15
+ if (C1 < midpoint64[ind]) {
+ res = 0x0000000000000000ull; // return 0
+ } else if (!x_sign) { // n > 0
+ res = 0x0000000000000001ull; // return +1
+ } else { // if n < 0
+ res = 0x8000000000000000ull;
+ *pfpsf |= INVALID_EXCEPTION;
+ BID_RETURN (res);
+ }
+ // set inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } else { // if (1 <= q + exp <= 20, 1 <= q <= 16, -15 <= exp <= 19)
+ // x <= -1 or 1 <= x < 2^64-1/2 so if positive x can be rounded
+ // to nearest to a 64-bit unsigned signed integer
+ if (x_sign) { // x <= -1
+ // set invalid flag
+ *pfpsf |= INVALID_EXCEPTION;
+ // return Integer Indefinite
+ res = 0x8000000000000000ull;
+ BID_RETURN (res);
+ }
+ // 1 <= x < 2^64-1/2 so x can be rounded
+ // to nearest to a 64-bit unsigned integer
+ if (exp < 0) { // 2 <= q <= 16, -15 <= exp <= -1, 1 <= q + exp <= 20
+ ind = -exp; // 1 <= ind <= 15; ind is a synonym for 'x'
+ // chop off ind digits from the lower part of C1
+ // C1 = C1 + 1/2 * 10^ind where the result C1 fits in 64 bits
+ C1 = C1 + midpoint64[ind - 1];
+ // calculate C* and f*
+ // C* is actually floor(C*) in this case
+ // C* and f* need shifting and masking, as shown by
+ // shiftright128[] and maskhigh128[]
+ // 1 <= x <= 15
+ // kx = 10^(-x) = ten2mk64[ind - 1]
+ // C* = (C1 + 1/2 * 10^x) * 10^(-x)
+ // the approximation of 10^(-x) was rounded up to 54 bits
+ __mul_64x64_to_128MACH (P128, C1, ten2mk64[ind - 1]);
+ Cstar = P128.w[1];
+ fstar.w[1] = P128.w[1] & maskhigh128[ind - 1];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mk128trunc[ind].w[0], e.g.
+ // if x=1, T*=ten2mk128trunc[0].w[0]=0x1999999999999999
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has p decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has p decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has p decimal digits,
+ // correct by Property 1)
+ // n = C* * 10^(e+x)
+
+ // shift right C* by Ex-64 = shiftright128[ind]
+ shift = shiftright128[ind - 1]; // 0 <= shift <= 39
+ Cstar = Cstar >> shift;
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind - 1 <= 2) { // fstar.w[1] is 0
+ if (fstar.w[0] > 0x8000000000000000ull) {
+ // f* > 1/2 and the result may be exact
+ tmp64 = fstar.w[0] - 0x8000000000000000ull; // f* - 1/2
+ if ((tmp64 > ten2mk128trunc[ind - 1].w[1])) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ } else { // if 3 <= ind - 1 <= 14
+ if (fstar.w[1] > onehalf128[ind - 1] ||
+ (fstar.w[1] == onehalf128[ind - 1] && fstar.w[0])) {
+ // f2* > 1/2 and the result may be exact
+ // Calculate f2* - 1/2
+ tmp64 = fstar.w[1] - onehalf128[ind - 1];
+ if (tmp64 || fstar.w[0] > ten2mk128trunc[ind - 1].w[1]) {
+ // ten2mk128trunc[ind -1].w[1] is identical to
+ // ten2mk128[ind -1].w[1]
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ // set the inexact flag
+ *pfpsf |= INEXACT_EXCEPTION;
+ }
+ }
+
+ // if the result was a midpoint it was rounded away from zero
+ res = Cstar; // the result is positive
+ } else if (exp == 0) {
+ // 1 <= q <= 10
+ // res = +C (exact)
+ res = C1; // the result is positive
+ } else { // if (exp > 0) => 1 <= exp <= 9, 1 <= q < 9, 2 <= q + exp <= 10
+ // res = +C * 10^exp (exact)
+ res = C1 * ten2k64[exp]; // the result is positive
+ }
+ }
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid64_to_uint8.c b/gcc-4.9/libgcc/config/libbid/bid64_to_uint8.c
new file mode 100644
index 000000000..311cce96a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid64_to_uint8.c
@@ -0,0 +1,67 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+#define SIZE_MASK 0xffffff00
+#define INVALID_RESULT 0x80
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_rnint,
+ UINT64, x, bid64_to_uint32_rnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xrnint,
+ UINT64, x, bid64_to_uint32_xrnint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_rninta,
+ UINT64, x, bid64_to_uint32_rninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xrninta,
+ UINT64, x, bid64_to_uint32_xrninta,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_int,
+ UINT64, x, bid64_to_uint32_int,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xint,
+ UINT64, x, bid64_to_uint32_xint,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_floor,
+ UINT64, x, bid64_to_uint32_floor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_ceil,
+ UINT64, x, bid64_to_uint32_ceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xfloor,
+ UINT64, x, bid64_to_uint32_xfloor,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
+
+BID_TO_SMALL_UINT_CVT_FUNCTION (unsigned char, bid64_to_uint8_xceil,
+ UINT64, x, bid64_to_uint32_xceil,
+ unsigned int, SIZE_MASK, INVALID_RESULT)
diff --git a/gcc-4.9/libgcc/config/libbid/bid_b2d.h b/gcc-4.9/libgcc/config/libbid/bid_b2d.h
new file mode 100644
index 000000000..00cdf0776
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_b2d.h
@@ -0,0 +1,3055 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+const UINT64 d2b[] =
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 80, 81, 800, 801, 880, 881,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 90, 91, 810, 811, 890, 891,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 82, 83, 820, 821, 808, 809,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 92, 93, 830, 831, 818, 819,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 84, 85, 840, 841, 88, 89,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 94, 95, 850, 851, 98, 99,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 860, 861, 888, 889,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 870, 871, 898, 899,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 180, 181, 900, 901,
+ 980, 981,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 190, 191, 910, 911,
+ 990, 991,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 182, 183, 920, 921,
+ 908, 909,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 192, 193, 930, 931,
+ 918, 919,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 184, 185, 940, 941,
+ 188, 189,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 194, 195, 950, 951,
+ 198, 199,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 186, 187, 960, 961,
+ 988, 989,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 196, 197, 970, 971,
+ 998, 999,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 280, 281, 802, 803,
+ 882, 883,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 290, 291, 812, 813,
+ 892, 893,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 282, 283, 822, 823,
+ 828, 829,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 292, 293, 832, 833,
+ 838, 839,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 284, 285, 842, 843,
+ 288, 289,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 294, 295, 852, 853,
+ 298, 299,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 286, 287, 862, 863,
+ 888, 889,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 296, 297, 872, 873,
+ 898, 899,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 380, 381, 902, 903,
+ 982, 983,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 390, 391, 912, 913,
+ 992, 993,
+ 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 382, 383, 922, 923,
+ 928, 929,
+ 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 392, 393, 932, 933,
+ 938, 939,
+ 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 384, 385, 942, 943,
+ 388, 389,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 394, 395, 952, 953,
+ 398, 399,
+ 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 386, 387, 962, 963,
+ 988, 989,
+ 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 396, 397, 972, 973,
+ 998, 999,
+ 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 480, 481, 804, 805,
+ 884, 885,
+ 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 490, 491, 814, 815,
+ 894, 895,
+ 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 482, 483, 824, 825,
+ 848, 849,
+ 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 492, 493, 834, 835,
+ 858, 859,
+ 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 484, 485, 844, 845,
+ 488, 489,
+ 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 494, 495, 854, 855,
+ 498, 499,
+ 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 486, 487, 864, 865,
+ 888, 889,
+ 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 496, 497, 874, 875,
+ 898, 899,
+ 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 580, 581, 904, 905,
+ 984, 985,
+ 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 590, 591, 914, 915,
+ 994, 995,
+ 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 582, 583, 924, 925,
+ 948, 949,
+ 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 592, 593, 934, 935,
+ 958, 959,
+ 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 584, 585, 944, 945,
+ 588, 589,
+ 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 594, 595, 954, 955,
+ 598, 599,
+ 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 586, 587, 964, 965,
+ 988, 989,
+ 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 596, 597, 974, 975,
+ 998, 999,
+ 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 680, 681, 806, 807,
+ 886, 887,
+ 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 690, 691, 816, 817,
+ 896, 897,
+ 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 682, 683, 826, 827,
+ 868, 869,
+ 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 692, 693, 836, 837,
+ 878, 879,
+ 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 684, 685, 846, 847,
+ 688, 689,
+ 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 694, 695, 856, 857,
+ 698, 699,
+ 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 686, 687, 866, 867,
+ 888, 889,
+ 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 696, 697, 876, 877,
+ 898, 899,
+ 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 780, 781, 906, 907,
+ 986, 987,
+ 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 790, 791, 916, 917,
+ 996, 997,
+ 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 782, 783, 926, 927,
+ 968, 969,
+ 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 792, 793, 936, 937,
+ 978, 979,
+ 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 784, 785, 946, 947,
+ 788, 789,
+ 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 794, 795, 956, 957,
+ 798, 799,
+ 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 786, 787, 966, 967,
+ 988, 989,
+ 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 796, 797, 976, 977,
+ 998, 999
+};
+
+const UINT64 d2b2[] =
+ { 0000ull, 1000ull, 2000ull, 3000ull, 4000ull, 5000ull, 6000ull,
+ 7000ull, 8000ull, 9000ull, 80000ull, 81000ull, 800000ull, 801000ull,
+ 880000ull,
+ 881000ull,
+ 10000ull, 11000ull, 12000ull, 13000ull, 14000ull, 15000ull, 16000ull,
+ 17000ull, 18000ull, 19000ull, 90000ull, 91000ull, 810000ull,
+ 811000ull, 890000ull, 891000ull,
+ 20000ull, 21000ull, 22000ull, 23000ull, 24000ull, 25000ull, 26000ull,
+ 27000ull, 28000ull, 29000ull, 82000ull, 83000ull, 820000ull,
+ 821000ull, 808000ull, 809000ull,
+ 30000ull, 31000ull, 32000ull, 33000ull, 34000ull, 35000ull, 36000ull,
+ 37000ull, 38000ull, 39000ull, 92000ull, 93000ull, 830000ull,
+ 831000ull, 818000ull, 819000ull,
+ 40000ull, 41000ull, 42000ull, 43000ull, 44000ull, 45000ull, 46000ull,
+ 47000ull, 48000ull, 49000ull, 84000ull, 85000ull, 840000ull,
+ 841000ull, 88000ull, 89000ull,
+ 50000ull, 51000ull, 52000ull, 53000ull, 54000ull, 55000ull, 56000ull,
+ 57000ull, 58000ull, 59000ull, 94000ull, 95000ull, 850000ull,
+ 851000ull, 98000ull, 99000ull,
+ 60000ull, 61000ull, 62000ull, 63000ull, 64000ull, 65000ull, 66000ull,
+ 67000ull, 68000ull, 69000ull, 86000ull, 87000ull, 860000ull,
+ 861000ull, 888000ull, 889000ull,
+ 70000ull, 71000ull, 72000ull, 73000ull, 74000ull, 75000ull, 76000ull,
+ 77000ull, 78000ull, 79000ull, 96000ull, 97000ull, 870000ull,
+ 871000ull, 898000ull, 899000ull,
+ 100000ull, 101000ull, 102000ull, 103000ull, 104000ull, 105000ull,
+ 106000ull, 107000ull, 108000ull, 109000ull, 180000ull, 181000ull,
+ 900000ull, 901000ull, 980000ull, 981000ull,
+ 110000ull, 111000ull, 112000ull, 113000ull, 114000ull, 115000ull,
+ 116000ull, 117000ull, 118000ull, 119000ull, 190000ull, 191000ull,
+ 910000ull, 911000ull, 990000ull, 991000ull,
+ 120000ull, 121000ull, 122000ull, 123000ull, 124000ull, 125000ull,
+ 126000ull, 127000ull, 128000ull, 129000ull, 182000ull, 183000ull,
+ 920000ull, 921000ull, 908000ull, 909000ull,
+ 130000ull, 131000ull, 132000ull, 133000ull, 134000ull, 135000ull,
+ 136000ull, 137000ull, 138000ull, 139000ull, 192000ull, 193000ull,
+ 930000ull, 931000ull, 918000ull, 919000ull,
+ 140000ull, 141000ull, 142000ull, 143000ull, 144000ull, 145000ull,
+ 146000ull, 147000ull, 148000ull, 149000ull, 184000ull, 185000ull,
+ 940000ull, 941000ull, 188000ull, 189000ull,
+ 150000ull, 151000ull, 152000ull, 153000ull, 154000ull, 155000ull,
+ 156000ull, 157000ull, 158000ull, 159000ull, 194000ull, 195000ull,
+ 950000ull, 951000ull, 198000ull, 199000ull,
+ 160000ull, 161000ull, 162000ull, 163000ull, 164000ull, 165000ull,
+ 166000ull, 167000ull, 168000ull, 169000ull, 186000ull, 187000ull,
+ 960000ull, 961000ull, 988000ull, 989000ull,
+ 170000ull, 171000ull, 172000ull, 173000ull, 174000ull, 175000ull,
+ 176000ull, 177000ull, 178000ull, 179000ull, 196000ull, 197000ull,
+ 970000ull, 971000ull, 998000ull, 999000ull,
+ 200000ull, 201000ull, 202000ull, 203000ull, 204000ull, 205000ull,
+ 206000ull, 207000ull, 208000ull, 209000ull, 280000ull, 281000ull,
+ 802000ull, 803000ull, 882000ull, 883000ull,
+ 210000ull, 211000ull, 212000ull, 213000ull, 214000ull, 215000ull,
+ 216000ull, 217000ull, 218000ull, 219000ull, 290000ull, 291000ull,
+ 812000ull, 813000ull, 892000ull, 893000ull,
+ 220000ull, 221000ull, 222000ull, 223000ull, 224000ull, 225000ull,
+ 226000ull, 227000ull, 228000ull, 229000ull, 282000ull, 283000ull,
+ 822000ull, 823000ull, 828000ull, 829000ull,
+ 230000ull, 231000ull, 232000ull, 233000ull, 234000ull, 235000ull,
+ 236000ull, 237000ull, 238000ull, 239000ull, 292000ull, 293000ull,
+ 832000ull, 833000ull, 838000ull, 839000ull,
+ 240000ull, 241000ull, 242000ull, 243000ull, 244000ull, 245000ull,
+ 246000ull, 247000ull, 248000ull, 249000ull, 284000ull, 285000ull,
+ 842000ull, 843000ull, 288000ull, 289000ull,
+ 250000ull, 251000ull, 252000ull, 253000ull, 254000ull, 255000ull,
+ 256000ull, 257000ull, 258000ull, 259000ull, 294000ull, 295000ull,
+ 852000ull, 853000ull, 298000ull, 299000ull,
+ 260000ull, 261000ull, 262000ull, 263000ull, 264000ull, 265000ull,
+ 266000ull, 267000ull, 268000ull, 269000ull, 286000ull, 287000ull,
+ 862000ull, 863000ull, 888000ull, 889000ull,
+ 270000ull, 271000ull, 272000ull, 273000ull, 274000ull, 275000ull,
+ 276000ull, 277000ull, 278000ull, 279000ull, 296000ull, 297000ull,
+ 872000ull, 873000ull, 898000ull, 899000ull,
+ 300000ull, 301000ull, 302000ull, 303000ull, 304000ull, 305000ull,
+ 306000ull, 307000ull, 308000ull, 309000ull, 380000ull, 381000ull,
+ 902000ull, 903000ull, 982000ull, 983000ull,
+ 310000ull, 311000ull, 312000ull, 313000ull, 314000ull, 315000ull,
+ 316000ull, 317000ull, 318000ull, 319000ull, 390000ull, 391000ull,
+ 912000ull, 913000ull, 992000ull, 993000ull,
+ 320000ull, 321000ull, 322000ull, 323000ull, 324000ull, 325000ull,
+ 326000ull, 327000ull, 328000ull, 329000ull, 382000ull, 383000ull,
+ 922000ull, 923000ull, 928000ull, 929000ull,
+ 330000ull, 331000ull, 332000ull, 333000ull, 334000ull, 335000ull,
+ 336000ull, 337000ull, 338000ull, 339000ull, 392000ull, 393000ull,
+ 932000ull, 933000ull, 938000ull, 939000ull,
+ 340000ull, 341000ull, 342000ull, 343000ull, 344000ull, 345000ull,
+ 346000ull, 347000ull, 348000ull, 349000ull, 384000ull, 385000ull,
+ 942000ull, 943000ull, 388000ull, 389000ull,
+ 350000ull, 351000ull, 352000ull, 353000ull, 354000ull, 355000ull,
+ 356000ull, 357000ull, 358000ull, 359000ull, 394000ull, 395000ull,
+ 952000ull, 953000ull, 398000ull, 399000ull,
+ 360000ull, 361000ull, 362000ull, 363000ull, 364000ull, 365000ull,
+ 366000ull, 367000ull, 368000ull, 369000ull, 386000ull, 387000ull,
+ 962000ull, 963000ull, 988000ull, 989000ull,
+ 370000ull, 371000ull, 372000ull, 373000ull, 374000ull, 375000ull,
+ 376000ull, 377000ull, 378000ull, 379000ull, 396000ull, 397000ull,
+ 972000ull, 973000ull, 998000ull, 999000ull,
+ 400000ull, 401000ull, 402000ull, 403000ull, 404000ull, 405000ull,
+ 406000ull, 407000ull, 408000ull, 409000ull, 480000ull, 481000ull,
+ 804000ull, 805000ull, 884000ull, 885000ull,
+ 410000ull, 411000ull, 412000ull, 413000ull, 414000ull, 415000ull,
+ 416000ull, 417000ull, 418000ull, 419000ull, 490000ull, 491000ull,
+ 814000ull, 815000ull, 894000ull, 895000ull,
+ 420000ull, 421000ull, 422000ull, 423000ull, 424000ull, 425000ull,
+ 426000ull, 427000ull, 428000ull, 429000ull, 482000ull, 483000ull,
+ 824000ull, 825000ull, 848000ull, 849000ull,
+ 430000ull, 431000ull, 432000ull, 433000ull, 434000ull, 435000ull,
+ 436000ull, 437000ull, 438000ull, 439000ull, 492000ull, 493000ull,
+ 834000ull, 835000ull, 858000ull, 859000ull,
+ 440000ull, 441000ull, 442000ull, 443000ull, 444000ull, 445000ull,
+ 446000ull, 447000ull, 448000ull, 449000ull, 484000ull, 485000ull,
+ 844000ull, 845000ull, 488000ull, 489000ull,
+ 450000ull, 451000ull, 452000ull, 453000ull, 454000ull, 455000ull,
+ 456000ull, 457000ull, 458000ull, 459000ull, 494000ull, 495000ull,
+ 854000ull, 855000ull, 498000ull, 499000ull,
+ 460000ull, 461000ull, 462000ull, 463000ull, 464000ull, 465000ull,
+ 466000ull, 467000ull, 468000ull, 469000ull, 486000ull, 487000ull,
+ 864000ull, 865000ull, 888000ull, 889000ull,
+ 470000ull, 471000ull, 472000ull, 473000ull, 474000ull, 475000ull,
+ 476000ull, 477000ull, 478000ull, 479000ull, 496000ull, 497000ull,
+ 874000ull, 875000ull, 898000ull, 899000ull,
+ 500000ull, 501000ull, 502000ull, 503000ull, 504000ull, 505000ull,
+ 506000ull, 507000ull, 508000ull, 509000ull, 580000ull, 581000ull,
+ 904000ull, 905000ull, 984000ull, 985000ull,
+ 510000ull, 511000ull, 512000ull, 513000ull, 514000ull, 515000ull,
+ 516000ull, 517000ull, 518000ull, 519000ull, 590000ull, 591000ull,
+ 914000ull, 915000ull, 994000ull, 995000ull,
+ 520000ull, 521000ull, 522000ull, 523000ull, 524000ull, 525000ull,
+ 526000ull, 527000ull, 528000ull, 529000ull, 582000ull, 583000ull,
+ 924000ull, 925000ull, 948000ull, 949000ull,
+ 530000ull, 531000ull, 532000ull, 533000ull, 534000ull, 535000ull,
+ 536000ull, 537000ull, 538000ull, 539000ull, 592000ull, 593000ull,
+ 934000ull, 935000ull, 958000ull, 959000ull,
+ 540000ull, 541000ull, 542000ull, 543000ull, 544000ull, 545000ull,
+ 546000ull, 547000ull, 548000ull, 549000ull, 584000ull, 585000ull,
+ 944000ull, 945000ull, 588000ull, 589000ull,
+ 550000ull, 551000ull, 552000ull, 553000ull, 554000ull, 555000ull,
+ 556000ull, 557000ull, 558000ull, 559000ull, 594000ull, 595000ull,
+ 954000ull, 955000ull, 598000ull, 599000ull,
+ 560000ull, 561000ull, 562000ull, 563000ull, 564000ull, 565000ull,
+ 566000ull, 567000ull, 568000ull, 569000ull, 586000ull, 587000ull,
+ 964000ull, 965000ull, 988000ull, 989000ull,
+ 570000ull, 571000ull, 572000ull, 573000ull, 574000ull, 575000ull,
+ 576000ull, 577000ull, 578000ull, 579000ull, 596000ull, 597000ull,
+ 974000ull, 975000ull, 998000ull, 999000ull,
+ 600000ull, 601000ull, 602000ull, 603000ull, 604000ull, 605000ull,
+ 606000ull, 607000ull, 608000ull, 609000ull, 680000ull, 681000ull,
+ 806000ull, 807000ull, 886000ull, 887000ull,
+ 610000ull, 611000ull, 612000ull, 613000ull, 614000ull, 615000ull,
+ 616000ull, 617000ull, 618000ull, 619000ull, 690000ull, 691000ull,
+ 816000ull, 817000ull, 896000ull, 897000ull,
+ 620000ull, 621000ull, 622000ull, 623000ull, 624000ull, 625000ull,
+ 626000ull, 627000ull, 628000ull, 629000ull, 682000ull, 683000ull,
+ 826000ull, 827000ull, 868000ull, 869000ull,
+ 630000ull, 631000ull, 632000ull, 633000ull, 634000ull, 635000ull,
+ 636000ull, 637000ull, 638000ull, 639000ull, 692000ull, 693000ull,
+ 836000ull, 837000ull, 878000ull, 879000ull,
+ 640000ull, 641000ull, 642000ull, 643000ull, 644000ull, 645000ull,
+ 646000ull, 647000ull, 648000ull, 649000ull, 684000ull, 685000ull,
+ 846000ull, 847000ull, 688000ull, 689000ull,
+ 650000ull, 651000ull, 652000ull, 653000ull, 654000ull, 655000ull,
+ 656000ull, 657000ull, 658000ull, 659000ull, 694000ull, 695000ull,
+ 856000ull, 857000ull, 698000ull, 699000ull,
+ 660000ull, 661000ull, 662000ull, 663000ull, 664000ull, 665000ull,
+ 666000ull, 667000ull, 668000ull, 669000ull, 686000ull, 687000ull,
+ 866000ull, 867000ull, 888000ull, 889000ull,
+ 670000ull, 671000ull, 672000ull, 673000ull, 674000ull, 675000ull,
+ 676000ull, 677000ull, 678000ull, 679000ull, 696000ull, 697000ull,
+ 876000ull, 877000ull, 898000ull, 899000ull,
+ 700000ull, 701000ull, 702000ull, 703000ull, 704000ull, 705000ull,
+ 706000ull, 707000ull, 708000ull, 709000ull, 780000ull, 781000ull,
+ 906000ull, 907000ull, 986000ull, 987000ull,
+ 710000ull, 711000ull, 712000ull, 713000ull, 714000ull, 715000ull,
+ 716000ull, 717000ull, 718000ull, 719000ull, 790000ull, 791000ull,
+ 916000ull, 917000ull, 996000ull, 997000ull,
+ 720000ull, 721000ull, 722000ull, 723000ull, 724000ull, 725000ull,
+ 726000ull, 727000ull, 728000ull, 729000ull, 782000ull, 783000ull,
+ 926000ull, 927000ull, 968000ull, 969000ull,
+ 730000ull, 731000ull, 732000ull, 733000ull, 734000ull, 735000ull,
+ 736000ull, 737000ull, 738000ull, 739000ull, 792000ull, 793000ull,
+ 936000ull, 937000ull, 978000ull, 979000ull,
+ 740000ull, 741000ull, 742000ull, 743000ull, 744000ull, 745000ull,
+ 746000ull, 747000ull, 748000ull, 749000ull, 784000ull, 785000ull,
+ 946000ull, 947000ull, 788000ull, 789000ull,
+ 750000ull, 751000ull, 752000ull, 753000ull, 754000ull, 755000ull,
+ 756000ull, 757000ull, 758000ull, 759000ull, 794000ull, 795000ull,
+ 956000ull, 957000ull, 798000ull, 799000ull,
+ 760000ull, 761000ull, 762000ull, 763000ull, 764000ull, 765000ull,
+ 766000ull, 767000ull, 768000ull, 769000ull, 786000ull, 787000ull,
+ 966000ull, 967000ull, 988000ull, 989000ull,
+ 770000ull, 771000ull, 772000ull, 773000ull, 774000ull, 775000ull,
+ 776000ull, 777000ull, 778000ull, 779000ull, 796000ull, 797000ull,
+ 976000ull, 977000ull, 998000ull, 999000ull
+};
+
+const UINT64 d2b3[] =
+ { 0000000ull, 1000000ull, 2000000ull, 3000000ull, 4000000ull,
+ 5000000ull, 6000000ull, 7000000ull, 8000000ull, 9000000ull,
+ 80000000ull,
+ 81000000ull, 800000000ull, 801000000ull, 880000000ull, 881000000ull,
+ 10000000ull, 11000000ull, 12000000ull, 13000000ull, 14000000ull,
+ 15000000ull, 16000000ull, 17000000ull, 18000000ull, 19000000ull,
+ 90000000ull, 91000000ull, 810000000ull, 811000000ull, 890000000ull,
+ 891000000ull,
+ 20000000ull, 21000000ull, 22000000ull, 23000000ull, 24000000ull,
+ 25000000ull, 26000000ull, 27000000ull, 28000000ull, 29000000ull,
+ 82000000ull, 83000000ull, 820000000ull, 821000000ull, 808000000ull,
+ 809000000ull,
+ 30000000ull, 31000000ull, 32000000ull, 33000000ull, 34000000ull,
+ 35000000ull, 36000000ull, 37000000ull, 38000000ull, 39000000ull,
+ 92000000ull, 93000000ull, 830000000ull, 831000000ull, 818000000ull,
+ 819000000ull,
+ 40000000ull, 41000000ull, 42000000ull, 43000000ull, 44000000ull,
+ 45000000ull, 46000000ull, 47000000ull, 48000000ull, 49000000ull,
+ 84000000ull, 85000000ull, 840000000ull, 841000000ull, 88000000ull,
+ 89000000ull,
+ 50000000ull, 51000000ull, 52000000ull, 53000000ull, 54000000ull,
+ 55000000ull, 56000000ull, 57000000ull, 58000000ull, 59000000ull,
+ 94000000ull, 95000000ull, 850000000ull, 851000000ull, 98000000ull,
+ 99000000ull,
+ 60000000ull, 61000000ull, 62000000ull, 63000000ull, 64000000ull,
+ 65000000ull, 66000000ull, 67000000ull, 68000000ull, 69000000ull,
+ 86000000ull, 87000000ull, 860000000ull, 861000000ull, 888000000ull,
+ 889000000ull,
+ 70000000ull, 71000000ull, 72000000ull, 73000000ull, 74000000ull,
+ 75000000ull, 76000000ull, 77000000ull, 78000000ull, 79000000ull,
+ 96000000ull, 97000000ull, 870000000ull, 871000000ull, 898000000ull,
+ 899000000ull,
+ 100000000ull, 101000000ull, 102000000ull, 103000000ull, 104000000ull,
+ 105000000ull, 106000000ull, 107000000ull, 108000000ull,
+ 109000000ull, 180000000ull, 181000000ull, 900000000ull,
+ 901000000ull, 980000000ull, 981000000ull,
+ 110000000ull, 111000000ull, 112000000ull, 113000000ull, 114000000ull,
+ 115000000ull, 116000000ull, 117000000ull, 118000000ull,
+ 119000000ull, 190000000ull, 191000000ull, 910000000ull,
+ 911000000ull, 990000000ull, 991000000ull,
+ 120000000ull, 121000000ull, 122000000ull, 123000000ull, 124000000ull,
+ 125000000ull, 126000000ull, 127000000ull, 128000000ull,
+ 129000000ull, 182000000ull, 183000000ull, 920000000ull,
+ 921000000ull, 908000000ull, 909000000ull,
+ 130000000ull, 131000000ull, 132000000ull, 133000000ull, 134000000ull,
+ 135000000ull, 136000000ull, 137000000ull, 138000000ull,
+ 139000000ull, 192000000ull, 193000000ull, 930000000ull,
+ 931000000ull, 918000000ull, 919000000ull,
+ 140000000ull, 141000000ull, 142000000ull, 143000000ull, 144000000ull,
+ 145000000ull, 146000000ull, 147000000ull, 148000000ull,
+ 149000000ull, 184000000ull, 185000000ull, 940000000ull,
+ 941000000ull, 188000000ull, 189000000ull,
+ 150000000ull, 151000000ull, 152000000ull, 153000000ull, 154000000ull,
+ 155000000ull, 156000000ull, 157000000ull, 158000000ull,
+ 159000000ull, 194000000ull, 195000000ull, 950000000ull,
+ 951000000ull, 198000000ull, 199000000ull,
+ 160000000ull, 161000000ull, 162000000ull, 163000000ull, 164000000ull,
+ 165000000ull, 166000000ull, 167000000ull, 168000000ull,
+ 169000000ull, 186000000ull, 187000000ull, 960000000ull,
+ 961000000ull, 988000000ull, 989000000ull,
+ 170000000ull, 171000000ull, 172000000ull, 173000000ull, 174000000ull,
+ 175000000ull, 176000000ull, 177000000ull, 178000000ull,
+ 179000000ull, 196000000ull, 197000000ull, 970000000ull,
+ 971000000ull, 998000000ull, 999000000ull,
+ 200000000ull, 201000000ull, 202000000ull, 203000000ull, 204000000ull,
+ 205000000ull, 206000000ull, 207000000ull, 208000000ull,
+ 209000000ull, 280000000ull, 281000000ull, 802000000ull,
+ 803000000ull, 882000000ull, 883000000ull,
+ 210000000ull, 211000000ull, 212000000ull, 213000000ull, 214000000ull,
+ 215000000ull, 216000000ull, 217000000ull, 218000000ull,
+ 219000000ull, 290000000ull, 291000000ull, 812000000ull,
+ 813000000ull, 892000000ull, 893000000ull,
+ 220000000ull, 221000000ull, 222000000ull, 223000000ull, 224000000ull,
+ 225000000ull, 226000000ull, 227000000ull, 228000000ull,
+ 229000000ull, 282000000ull, 283000000ull, 822000000ull,
+ 823000000ull, 828000000ull, 829000000ull,
+ 230000000ull, 231000000ull, 232000000ull, 233000000ull, 234000000ull,
+ 235000000ull, 236000000ull, 237000000ull, 238000000ull,
+ 239000000ull, 292000000ull, 293000000ull, 832000000ull,
+ 833000000ull, 838000000ull, 839000000ull,
+ 240000000ull, 241000000ull, 242000000ull, 243000000ull, 244000000ull,
+ 245000000ull, 246000000ull, 247000000ull, 248000000ull,
+ 249000000ull, 284000000ull, 285000000ull, 842000000ull,
+ 843000000ull, 288000000ull, 289000000ull,
+ 250000000ull, 251000000ull, 252000000ull, 253000000ull, 254000000ull,
+ 255000000ull, 256000000ull, 257000000ull, 258000000ull,
+ 259000000ull, 294000000ull, 295000000ull, 852000000ull,
+ 853000000ull, 298000000ull, 299000000ull,
+ 260000000ull, 261000000ull, 262000000ull, 263000000ull, 264000000ull,
+ 265000000ull, 266000000ull, 267000000ull, 268000000ull,
+ 269000000ull, 286000000ull, 287000000ull, 862000000ull,
+ 863000000ull, 888000000ull, 889000000ull,
+ 270000000ull, 271000000ull, 272000000ull, 273000000ull, 274000000ull,
+ 275000000ull, 276000000ull, 277000000ull, 278000000ull,
+ 279000000ull, 296000000ull, 297000000ull, 872000000ull,
+ 873000000ull, 898000000ull, 899000000ull,
+ 300000000ull, 301000000ull, 302000000ull, 303000000ull, 304000000ull,
+ 305000000ull, 306000000ull, 307000000ull, 308000000ull,
+ 309000000ull, 380000000ull, 381000000ull, 902000000ull,
+ 903000000ull, 982000000ull, 983000000ull,
+ 310000000ull, 311000000ull, 312000000ull, 313000000ull, 314000000ull,
+ 315000000ull, 316000000ull, 317000000ull, 318000000ull,
+ 319000000ull, 390000000ull, 391000000ull, 912000000ull,
+ 913000000ull, 992000000ull, 993000000ull,
+ 320000000ull, 321000000ull, 322000000ull, 323000000ull, 324000000ull,
+ 325000000ull, 326000000ull, 327000000ull, 328000000ull,
+ 329000000ull, 382000000ull, 383000000ull, 922000000ull,
+ 923000000ull, 928000000ull, 929000000ull,
+ 330000000ull, 331000000ull, 332000000ull, 333000000ull, 334000000ull,
+ 335000000ull, 336000000ull, 337000000ull, 338000000ull,
+ 339000000ull, 392000000ull, 393000000ull, 932000000ull,
+ 933000000ull, 938000000ull, 939000000ull,
+ 340000000ull, 341000000ull, 342000000ull, 343000000ull, 344000000ull,
+ 345000000ull, 346000000ull, 347000000ull, 348000000ull,
+ 349000000ull, 384000000ull, 385000000ull, 942000000ull,
+ 943000000ull, 388000000ull, 389000000ull,
+ 350000000ull, 351000000ull, 352000000ull, 353000000ull, 354000000ull,
+ 355000000ull, 356000000ull, 357000000ull, 358000000ull,
+ 359000000ull, 394000000ull, 395000000ull, 952000000ull,
+ 953000000ull, 398000000ull, 399000000ull,
+ 360000000ull, 361000000ull, 362000000ull, 363000000ull, 364000000ull,
+ 365000000ull, 366000000ull, 367000000ull, 368000000ull,
+ 369000000ull, 386000000ull, 387000000ull, 962000000ull,
+ 963000000ull, 988000000ull, 989000000ull,
+ 370000000ull, 371000000ull, 372000000ull, 373000000ull, 374000000ull,
+ 375000000ull, 376000000ull, 377000000ull, 378000000ull,
+ 379000000ull, 396000000ull, 397000000ull, 972000000ull,
+ 973000000ull, 998000000ull, 999000000ull,
+ 400000000ull, 401000000ull, 402000000ull, 403000000ull, 404000000ull,
+ 405000000ull, 406000000ull, 407000000ull, 408000000ull,
+ 409000000ull, 480000000ull, 481000000ull, 804000000ull,
+ 805000000ull, 884000000ull, 885000000ull,
+ 410000000ull, 411000000ull, 412000000ull, 413000000ull, 414000000ull,
+ 415000000ull, 416000000ull, 417000000ull, 418000000ull,
+ 419000000ull, 490000000ull, 491000000ull, 814000000ull,
+ 815000000ull, 894000000ull, 895000000ull,
+ 420000000ull, 421000000ull, 422000000ull, 423000000ull, 424000000ull,
+ 425000000ull, 426000000ull, 427000000ull, 428000000ull,
+ 429000000ull, 482000000ull, 483000000ull, 824000000ull,
+ 825000000ull, 848000000ull, 849000000ull,
+ 430000000ull, 431000000ull, 432000000ull, 433000000ull, 434000000ull,
+ 435000000ull, 436000000ull, 437000000ull, 438000000ull,
+ 439000000ull, 492000000ull, 493000000ull, 834000000ull,
+ 835000000ull, 858000000ull, 859000000ull,
+ 440000000ull, 441000000ull, 442000000ull, 443000000ull, 444000000ull,
+ 445000000ull, 446000000ull, 447000000ull, 448000000ull,
+ 449000000ull, 484000000ull, 485000000ull, 844000000ull,
+ 845000000ull, 488000000ull, 489000000ull,
+ 450000000ull, 451000000ull, 452000000ull, 453000000ull, 454000000ull,
+ 455000000ull, 456000000ull, 457000000ull, 458000000ull,
+ 459000000ull, 494000000ull, 495000000ull, 854000000ull,
+ 855000000ull, 498000000ull, 499000000ull,
+ 460000000ull, 461000000ull, 462000000ull, 463000000ull, 464000000ull,
+ 465000000ull, 466000000ull, 467000000ull, 468000000ull,
+ 469000000ull, 486000000ull, 487000000ull, 864000000ull,
+ 865000000ull, 888000000ull, 889000000ull,
+ 470000000ull, 471000000ull, 472000000ull, 473000000ull, 474000000ull,
+ 475000000ull, 476000000ull, 477000000ull, 478000000ull,
+ 479000000ull, 496000000ull, 497000000ull, 874000000ull,
+ 875000000ull, 898000000ull, 899000000ull,
+ 500000000ull, 501000000ull, 502000000ull, 503000000ull, 504000000ull,
+ 505000000ull, 506000000ull, 507000000ull, 508000000ull,
+ 509000000ull, 580000000ull, 581000000ull, 904000000ull,
+ 905000000ull, 984000000ull, 985000000ull,
+ 510000000ull, 511000000ull, 512000000ull, 513000000ull, 514000000ull,
+ 515000000ull, 516000000ull, 517000000ull, 518000000ull,
+ 519000000ull, 590000000ull, 591000000ull, 914000000ull,
+ 915000000ull, 994000000ull, 995000000ull,
+ 520000000ull, 521000000ull, 522000000ull, 523000000ull, 524000000ull,
+ 525000000ull, 526000000ull, 527000000ull, 528000000ull,
+ 529000000ull, 582000000ull, 583000000ull, 924000000ull,
+ 925000000ull, 948000000ull, 949000000ull,
+ 530000000ull, 531000000ull, 532000000ull, 533000000ull, 534000000ull,
+ 535000000ull, 536000000ull, 537000000ull, 538000000ull,
+ 539000000ull, 592000000ull, 593000000ull, 934000000ull,
+ 935000000ull, 958000000ull, 959000000ull,
+ 540000000ull, 541000000ull, 542000000ull, 543000000ull, 544000000ull,
+ 545000000ull, 546000000ull, 547000000ull, 548000000ull,
+ 549000000ull, 584000000ull, 585000000ull, 944000000ull,
+ 945000000ull, 588000000ull, 589000000ull,
+ 550000000ull, 551000000ull, 552000000ull, 553000000ull, 554000000ull,
+ 555000000ull, 556000000ull, 557000000ull, 558000000ull,
+ 559000000ull, 594000000ull, 595000000ull, 954000000ull,
+ 955000000ull, 598000000ull, 599000000ull,
+ 560000000ull, 561000000ull, 562000000ull, 563000000ull, 564000000ull,
+ 565000000ull, 566000000ull, 567000000ull, 568000000ull,
+ 569000000ull, 586000000ull, 587000000ull, 964000000ull,
+ 965000000ull, 988000000ull, 989000000ull,
+ 570000000ull, 571000000ull, 572000000ull, 573000000ull, 574000000ull,
+ 575000000ull, 576000000ull, 577000000ull, 578000000ull,
+ 579000000ull, 596000000ull, 597000000ull, 974000000ull,
+ 975000000ull, 998000000ull, 999000000ull,
+ 600000000ull, 601000000ull, 602000000ull, 603000000ull, 604000000ull,
+ 605000000ull, 606000000ull, 607000000ull, 608000000ull,
+ 609000000ull, 680000000ull, 681000000ull, 806000000ull,
+ 807000000ull, 886000000ull, 887000000ull,
+ 610000000ull, 611000000ull, 612000000ull, 613000000ull, 614000000ull,
+ 615000000ull, 616000000ull, 617000000ull, 618000000ull,
+ 619000000ull, 690000000ull, 691000000ull, 816000000ull,
+ 817000000ull, 896000000ull, 897000000ull,
+ 620000000ull, 621000000ull, 622000000ull, 623000000ull, 624000000ull,
+ 625000000ull, 626000000ull, 627000000ull, 628000000ull,
+ 629000000ull, 682000000ull, 683000000ull, 826000000ull,
+ 827000000ull, 868000000ull, 869000000ull,
+ 630000000ull, 631000000ull, 632000000ull, 633000000ull, 634000000ull,
+ 635000000ull, 636000000ull, 637000000ull, 638000000ull,
+ 639000000ull, 692000000ull, 693000000ull, 836000000ull,
+ 837000000ull, 878000000ull, 879000000ull,
+ 640000000ull, 641000000ull, 642000000ull, 643000000ull, 644000000ull,
+ 645000000ull, 646000000ull, 647000000ull, 648000000ull,
+ 649000000ull, 684000000ull, 685000000ull, 846000000ull,
+ 847000000ull, 688000000ull, 689000000ull,
+ 650000000ull, 651000000ull, 652000000ull, 653000000ull, 654000000ull,
+ 655000000ull, 656000000ull, 657000000ull, 658000000ull,
+ 659000000ull, 694000000ull, 695000000ull, 856000000ull,
+ 857000000ull, 698000000ull, 699000000ull,
+ 660000000ull, 661000000ull, 662000000ull, 663000000ull, 664000000ull,
+ 665000000ull, 666000000ull, 667000000ull, 668000000ull,
+ 669000000ull, 686000000ull, 687000000ull, 866000000ull,
+ 867000000ull, 888000000ull, 889000000ull,
+ 670000000ull, 671000000ull, 672000000ull, 673000000ull, 674000000ull,
+ 675000000ull, 676000000ull, 677000000ull, 678000000ull,
+ 679000000ull, 696000000ull, 697000000ull, 876000000ull,
+ 877000000ull, 898000000ull, 899000000ull,
+ 700000000ull, 701000000ull, 702000000ull, 703000000ull, 704000000ull,
+ 705000000ull, 706000000ull, 707000000ull, 708000000ull,
+ 709000000ull, 780000000ull, 781000000ull, 906000000ull,
+ 907000000ull, 986000000ull, 987000000ull,
+ 710000000ull, 711000000ull, 712000000ull, 713000000ull, 714000000ull,
+ 715000000ull, 716000000ull, 717000000ull, 718000000ull,
+ 719000000ull, 790000000ull, 791000000ull, 916000000ull,
+ 917000000ull, 996000000ull, 997000000ull,
+ 720000000ull, 721000000ull, 722000000ull, 723000000ull, 724000000ull,
+ 725000000ull, 726000000ull, 727000000ull, 728000000ull,
+ 729000000ull, 782000000ull, 783000000ull, 926000000ull,
+ 927000000ull, 968000000ull, 969000000ull,
+ 730000000ull, 731000000ull, 732000000ull, 733000000ull, 734000000ull,
+ 735000000ull, 736000000ull, 737000000ull, 738000000ull,
+ 739000000ull, 792000000ull, 793000000ull, 936000000ull,
+ 937000000ull, 978000000ull, 979000000ull,
+ 740000000ull, 741000000ull, 742000000ull, 743000000ull, 744000000ull,
+ 745000000ull, 746000000ull, 747000000ull, 748000000ull,
+ 749000000ull, 784000000ull, 785000000ull, 946000000ull,
+ 947000000ull, 788000000ull, 789000000ull,
+ 750000000ull, 751000000ull, 752000000ull, 753000000ull, 754000000ull,
+ 755000000ull, 756000000ull, 757000000ull, 758000000ull,
+ 759000000ull, 794000000ull, 795000000ull, 956000000ull,
+ 957000000ull, 798000000ull, 799000000ull,
+ 760000000ull, 761000000ull, 762000000ull, 763000000ull, 764000000ull,
+ 765000000ull, 766000000ull, 767000000ull, 768000000ull,
+ 769000000ull, 786000000ull, 787000000ull, 966000000ull,
+ 967000000ull, 988000000ull, 989000000ull,
+ 770000000ull, 771000000ull, 772000000ull, 773000000ull, 774000000ull,
+ 775000000ull, 776000000ull, 777000000ull, 778000000ull,
+ 779000000ull, 796000000ull, 797000000ull, 976000000ull,
+ 977000000ull, 998000000ull, 999000000ull
+};
+
+const UINT64 d2b4[] =
+ { 0000000000ull, 1000000000ull, 2000000000ull, 3000000000ull,
+ 4000000000ull, 5000000000ull, 6000000000ull, 7000000000ull,
+ 8000000000ull,
+ 9000000000ull, 80000000000ull, 81000000000ull, 800000000000ull,
+ 801000000000ull,
+ 880000000000ull, 881000000000ull,
+ 10000000000ull, 11000000000ull, 12000000000ull, 13000000000ull,
+ 14000000000ull, 15000000000ull, 16000000000ull, 17000000000ull,
+ 18000000000ull, 19000000000ull, 90000000000ull, 91000000000ull,
+ 810000000000ull, 811000000000ull, 890000000000ull, 891000000000ull,
+ 20000000000ull, 21000000000ull, 22000000000ull, 23000000000ull,
+ 24000000000ull, 25000000000ull, 26000000000ull, 27000000000ull,
+ 28000000000ull, 29000000000ull, 82000000000ull, 83000000000ull,
+ 820000000000ull, 821000000000ull, 808000000000ull, 809000000000ull,
+ 30000000000ull, 31000000000ull, 32000000000ull, 33000000000ull,
+ 34000000000ull, 35000000000ull, 36000000000ull, 37000000000ull,
+ 38000000000ull, 39000000000ull, 92000000000ull, 93000000000ull,
+ 830000000000ull, 831000000000ull, 818000000000ull, 819000000000ull,
+ 40000000000ull, 41000000000ull, 42000000000ull, 43000000000ull,
+ 44000000000ull, 45000000000ull, 46000000000ull, 47000000000ull,
+ 48000000000ull, 49000000000ull, 84000000000ull, 85000000000ull,
+ 840000000000ull, 841000000000ull, 88000000000ull, 89000000000ull,
+ 50000000000ull, 51000000000ull, 52000000000ull, 53000000000ull,
+ 54000000000ull, 55000000000ull, 56000000000ull, 57000000000ull,
+ 58000000000ull, 59000000000ull, 94000000000ull, 95000000000ull,
+ 850000000000ull, 851000000000ull, 98000000000ull, 99000000000ull,
+ 60000000000ull, 61000000000ull, 62000000000ull, 63000000000ull,
+ 64000000000ull, 65000000000ull, 66000000000ull, 67000000000ull,
+ 68000000000ull, 69000000000ull, 86000000000ull, 87000000000ull,
+ 860000000000ull, 861000000000ull, 888000000000ull, 889000000000ull,
+ 70000000000ull, 71000000000ull, 72000000000ull, 73000000000ull,
+ 74000000000ull, 75000000000ull, 76000000000ull, 77000000000ull,
+ 78000000000ull, 79000000000ull, 96000000000ull, 97000000000ull,
+ 870000000000ull, 871000000000ull, 898000000000ull, 899000000000ull,
+ 100000000000ull, 101000000000ull, 102000000000ull, 103000000000ull,
+ 104000000000ull, 105000000000ull, 106000000000ull, 107000000000ull,
+ 108000000000ull, 109000000000ull, 180000000000ull, 181000000000ull,
+ 900000000000ull, 901000000000ull, 980000000000ull, 981000000000ull,
+ 110000000000ull, 111000000000ull, 112000000000ull, 113000000000ull,
+ 114000000000ull, 115000000000ull, 116000000000ull, 117000000000ull,
+ 118000000000ull, 119000000000ull, 190000000000ull, 191000000000ull,
+ 910000000000ull, 911000000000ull, 990000000000ull, 991000000000ull,
+ 120000000000ull, 121000000000ull, 122000000000ull, 123000000000ull,
+ 124000000000ull, 125000000000ull, 126000000000ull, 127000000000ull,
+ 128000000000ull, 129000000000ull, 182000000000ull, 183000000000ull,
+ 920000000000ull, 921000000000ull, 908000000000ull, 909000000000ull,
+ 130000000000ull, 131000000000ull, 132000000000ull, 133000000000ull,
+ 134000000000ull, 135000000000ull, 136000000000ull, 137000000000ull,
+ 138000000000ull, 139000000000ull, 192000000000ull, 193000000000ull,
+ 930000000000ull, 931000000000ull, 918000000000ull, 919000000000ull,
+ 140000000000ull, 141000000000ull, 142000000000ull, 143000000000ull,
+ 144000000000ull, 145000000000ull, 146000000000ull, 147000000000ull,
+ 148000000000ull, 149000000000ull, 184000000000ull, 185000000000ull,
+ 940000000000ull, 941000000000ull, 188000000000ull, 189000000000ull,
+ 150000000000ull, 151000000000ull, 152000000000ull, 153000000000ull,
+ 154000000000ull, 155000000000ull, 156000000000ull, 157000000000ull,
+ 158000000000ull, 159000000000ull, 194000000000ull, 195000000000ull,
+ 950000000000ull, 951000000000ull, 198000000000ull, 199000000000ull,
+ 160000000000ull, 161000000000ull, 162000000000ull, 163000000000ull,
+ 164000000000ull, 165000000000ull, 166000000000ull, 167000000000ull,
+ 168000000000ull, 169000000000ull, 186000000000ull, 187000000000ull,
+ 960000000000ull, 961000000000ull, 988000000000ull, 989000000000ull,
+ 170000000000ull, 171000000000ull, 172000000000ull, 173000000000ull,
+ 174000000000ull, 175000000000ull, 176000000000ull, 177000000000ull,
+ 178000000000ull, 179000000000ull, 196000000000ull, 197000000000ull,
+ 970000000000ull, 971000000000ull, 998000000000ull, 999000000000ull,
+ 200000000000ull, 201000000000ull, 202000000000ull, 203000000000ull,
+ 204000000000ull, 205000000000ull, 206000000000ull, 207000000000ull,
+ 208000000000ull, 209000000000ull, 280000000000ull, 281000000000ull,
+ 802000000000ull, 803000000000ull, 882000000000ull, 883000000000ull,
+ 210000000000ull, 211000000000ull, 212000000000ull, 213000000000ull,
+ 214000000000ull, 215000000000ull, 216000000000ull, 217000000000ull,
+ 218000000000ull, 219000000000ull, 290000000000ull, 291000000000ull,
+ 812000000000ull, 813000000000ull, 892000000000ull, 893000000000ull,
+ 220000000000ull, 221000000000ull, 222000000000ull, 223000000000ull,
+ 224000000000ull, 225000000000ull, 226000000000ull, 227000000000ull,
+ 228000000000ull, 229000000000ull, 282000000000ull, 283000000000ull,
+ 822000000000ull, 823000000000ull, 828000000000ull, 829000000000ull,
+ 230000000000ull, 231000000000ull, 232000000000ull, 233000000000ull,
+ 234000000000ull, 235000000000ull, 236000000000ull, 237000000000ull,
+ 238000000000ull, 239000000000ull, 292000000000ull, 293000000000ull,
+ 832000000000ull, 833000000000ull, 838000000000ull, 839000000000ull,
+ 240000000000ull, 241000000000ull, 242000000000ull, 243000000000ull,
+ 244000000000ull, 245000000000ull, 246000000000ull, 247000000000ull,
+ 248000000000ull, 249000000000ull, 284000000000ull, 285000000000ull,
+ 842000000000ull, 843000000000ull, 288000000000ull, 289000000000ull,
+ 250000000000ull, 251000000000ull, 252000000000ull, 253000000000ull,
+ 254000000000ull, 255000000000ull, 256000000000ull, 257000000000ull,
+ 258000000000ull, 259000000000ull, 294000000000ull, 295000000000ull,
+ 852000000000ull, 853000000000ull, 298000000000ull, 299000000000ull,
+ 260000000000ull, 261000000000ull, 262000000000ull, 263000000000ull,
+ 264000000000ull, 265000000000ull, 266000000000ull, 267000000000ull,
+ 268000000000ull, 269000000000ull, 286000000000ull, 287000000000ull,
+ 862000000000ull, 863000000000ull, 888000000000ull, 889000000000ull,
+ 270000000000ull, 271000000000ull, 272000000000ull, 273000000000ull,
+ 274000000000ull, 275000000000ull, 276000000000ull, 277000000000ull,
+ 278000000000ull, 279000000000ull, 296000000000ull, 297000000000ull,
+ 872000000000ull, 873000000000ull, 898000000000ull, 899000000000ull,
+ 300000000000ull, 301000000000ull, 302000000000ull, 303000000000ull,
+ 304000000000ull, 305000000000ull, 306000000000ull, 307000000000ull,
+ 308000000000ull, 309000000000ull, 380000000000ull, 381000000000ull,
+ 902000000000ull, 903000000000ull, 982000000000ull, 983000000000ull,
+ 310000000000ull, 311000000000ull, 312000000000ull, 313000000000ull,
+ 314000000000ull, 315000000000ull, 316000000000ull, 317000000000ull,
+ 318000000000ull, 319000000000ull, 390000000000ull, 391000000000ull,
+ 912000000000ull, 913000000000ull, 992000000000ull, 993000000000ull,
+ 320000000000ull, 321000000000ull, 322000000000ull, 323000000000ull,
+ 324000000000ull, 325000000000ull, 326000000000ull, 327000000000ull,
+ 328000000000ull, 329000000000ull, 382000000000ull, 383000000000ull,
+ 922000000000ull, 923000000000ull, 928000000000ull, 929000000000ull,
+ 330000000000ull, 331000000000ull, 332000000000ull, 333000000000ull,
+ 334000000000ull, 335000000000ull, 336000000000ull, 337000000000ull,
+ 338000000000ull, 339000000000ull, 392000000000ull, 393000000000ull,
+ 932000000000ull, 933000000000ull, 938000000000ull, 939000000000ull,
+ 340000000000ull, 341000000000ull, 342000000000ull, 343000000000ull,
+ 344000000000ull, 345000000000ull, 346000000000ull, 347000000000ull,
+ 348000000000ull, 349000000000ull, 384000000000ull, 385000000000ull,
+ 942000000000ull, 943000000000ull, 388000000000ull, 389000000000ull,
+ 350000000000ull, 351000000000ull, 352000000000ull, 353000000000ull,
+ 354000000000ull, 355000000000ull, 356000000000ull, 357000000000ull,
+ 358000000000ull, 359000000000ull, 394000000000ull, 395000000000ull,
+ 952000000000ull, 953000000000ull, 398000000000ull, 399000000000ull,
+ 360000000000ull, 361000000000ull, 362000000000ull, 363000000000ull,
+ 364000000000ull, 365000000000ull, 366000000000ull, 367000000000ull,
+ 368000000000ull, 369000000000ull, 386000000000ull, 387000000000ull,
+ 962000000000ull, 963000000000ull, 988000000000ull, 989000000000ull,
+ 370000000000ull, 371000000000ull, 372000000000ull, 373000000000ull,
+ 374000000000ull, 375000000000ull, 376000000000ull, 377000000000ull,
+ 378000000000ull, 379000000000ull, 396000000000ull, 397000000000ull,
+ 972000000000ull, 973000000000ull, 998000000000ull, 999000000000ull,
+ 400000000000ull, 401000000000ull, 402000000000ull, 403000000000ull,
+ 404000000000ull, 405000000000ull, 406000000000ull, 407000000000ull,
+ 408000000000ull, 409000000000ull, 480000000000ull, 481000000000ull,
+ 804000000000ull, 805000000000ull, 884000000000ull, 885000000000ull,
+ 410000000000ull, 411000000000ull, 412000000000ull, 413000000000ull,
+ 414000000000ull, 415000000000ull, 416000000000ull, 417000000000ull,
+ 418000000000ull, 419000000000ull, 490000000000ull, 491000000000ull,
+ 814000000000ull, 815000000000ull, 894000000000ull, 895000000000ull,
+ 420000000000ull, 421000000000ull, 422000000000ull, 423000000000ull,
+ 424000000000ull, 425000000000ull, 426000000000ull, 427000000000ull,
+ 428000000000ull, 429000000000ull, 482000000000ull, 483000000000ull,
+ 824000000000ull, 825000000000ull, 848000000000ull, 849000000000ull,
+ 430000000000ull, 431000000000ull, 432000000000ull, 433000000000ull,
+ 434000000000ull, 435000000000ull, 436000000000ull, 437000000000ull,
+ 438000000000ull, 439000000000ull, 492000000000ull, 493000000000ull,
+ 834000000000ull, 835000000000ull, 858000000000ull, 859000000000ull,
+ 440000000000ull, 441000000000ull, 442000000000ull, 443000000000ull,
+ 444000000000ull, 445000000000ull, 446000000000ull, 447000000000ull,
+ 448000000000ull, 449000000000ull, 484000000000ull, 485000000000ull,
+ 844000000000ull, 845000000000ull, 488000000000ull, 489000000000ull,
+ 450000000000ull, 451000000000ull, 452000000000ull, 453000000000ull,
+ 454000000000ull, 455000000000ull, 456000000000ull, 457000000000ull,
+ 458000000000ull, 459000000000ull, 494000000000ull, 495000000000ull,
+ 854000000000ull, 855000000000ull, 498000000000ull, 499000000000ull,
+ 460000000000ull, 461000000000ull, 462000000000ull, 463000000000ull,
+ 464000000000ull, 465000000000ull, 466000000000ull, 467000000000ull,
+ 468000000000ull, 469000000000ull, 486000000000ull, 487000000000ull,
+ 864000000000ull, 865000000000ull, 888000000000ull, 889000000000ull,
+ 470000000000ull, 471000000000ull, 472000000000ull, 473000000000ull,
+ 474000000000ull, 475000000000ull, 476000000000ull, 477000000000ull,
+ 478000000000ull, 479000000000ull, 496000000000ull, 497000000000ull,
+ 874000000000ull, 875000000000ull, 898000000000ull, 899000000000ull,
+ 500000000000ull, 501000000000ull, 502000000000ull, 503000000000ull,
+ 504000000000ull, 505000000000ull, 506000000000ull, 507000000000ull,
+ 508000000000ull, 509000000000ull, 580000000000ull, 581000000000ull,
+ 904000000000ull, 905000000000ull, 984000000000ull, 985000000000ull,
+ 510000000000ull, 511000000000ull, 512000000000ull, 513000000000ull,
+ 514000000000ull, 515000000000ull, 516000000000ull, 517000000000ull,
+ 518000000000ull, 519000000000ull, 590000000000ull, 591000000000ull,
+ 914000000000ull, 915000000000ull, 994000000000ull, 995000000000ull,
+ 520000000000ull, 521000000000ull, 522000000000ull, 523000000000ull,
+ 524000000000ull, 525000000000ull, 526000000000ull, 527000000000ull,
+ 528000000000ull, 529000000000ull, 582000000000ull, 583000000000ull,
+ 924000000000ull, 925000000000ull, 948000000000ull, 949000000000ull,
+ 530000000000ull, 531000000000ull, 532000000000ull, 533000000000ull,
+ 534000000000ull, 535000000000ull, 536000000000ull, 537000000000ull,
+ 538000000000ull, 539000000000ull, 592000000000ull, 593000000000ull,
+ 934000000000ull, 935000000000ull, 958000000000ull, 959000000000ull,
+ 540000000000ull, 541000000000ull, 542000000000ull, 543000000000ull,
+ 544000000000ull, 545000000000ull, 546000000000ull, 547000000000ull,
+ 548000000000ull, 549000000000ull, 584000000000ull, 585000000000ull,
+ 944000000000ull, 945000000000ull, 588000000000ull, 589000000000ull,
+ 550000000000ull, 551000000000ull, 552000000000ull, 553000000000ull,
+ 554000000000ull, 555000000000ull, 556000000000ull, 557000000000ull,
+ 558000000000ull, 559000000000ull, 594000000000ull, 595000000000ull,
+ 954000000000ull, 955000000000ull, 598000000000ull, 599000000000ull,
+ 560000000000ull, 561000000000ull, 562000000000ull, 563000000000ull,
+ 564000000000ull, 565000000000ull, 566000000000ull, 567000000000ull,
+ 568000000000ull, 569000000000ull, 586000000000ull, 587000000000ull,
+ 964000000000ull, 965000000000ull, 988000000000ull, 989000000000ull,
+ 570000000000ull, 571000000000ull, 572000000000ull, 573000000000ull,
+ 574000000000ull, 575000000000ull, 576000000000ull, 577000000000ull,
+ 578000000000ull, 579000000000ull, 596000000000ull, 597000000000ull,
+ 974000000000ull, 975000000000ull, 998000000000ull, 999000000000ull,
+ 600000000000ull, 601000000000ull, 602000000000ull, 603000000000ull,
+ 604000000000ull, 605000000000ull, 606000000000ull, 607000000000ull,
+ 608000000000ull, 609000000000ull, 680000000000ull, 681000000000ull,
+ 806000000000ull, 807000000000ull, 886000000000ull, 887000000000ull,
+ 610000000000ull, 611000000000ull, 612000000000ull, 613000000000ull,
+ 614000000000ull, 615000000000ull, 616000000000ull, 617000000000ull,
+ 618000000000ull, 619000000000ull, 690000000000ull, 691000000000ull,
+ 816000000000ull, 817000000000ull, 896000000000ull, 897000000000ull,
+ 620000000000ull, 621000000000ull, 622000000000ull, 623000000000ull,
+ 624000000000ull, 625000000000ull, 626000000000ull, 627000000000ull,
+ 628000000000ull, 629000000000ull, 682000000000ull, 683000000000ull,
+ 826000000000ull, 827000000000ull, 868000000000ull, 869000000000ull,
+ 630000000000ull, 631000000000ull, 632000000000ull, 633000000000ull,
+ 634000000000ull, 635000000000ull, 636000000000ull, 637000000000ull,
+ 638000000000ull, 639000000000ull, 692000000000ull, 693000000000ull,
+ 836000000000ull, 837000000000ull, 878000000000ull, 879000000000ull,
+ 640000000000ull, 641000000000ull, 642000000000ull, 643000000000ull,
+ 644000000000ull, 645000000000ull, 646000000000ull, 647000000000ull,
+ 648000000000ull, 649000000000ull, 684000000000ull, 685000000000ull,
+ 846000000000ull, 847000000000ull, 688000000000ull, 689000000000ull,
+ 650000000000ull, 651000000000ull, 652000000000ull, 653000000000ull,
+ 654000000000ull, 655000000000ull, 656000000000ull, 657000000000ull,
+ 658000000000ull, 659000000000ull, 694000000000ull, 695000000000ull,
+ 856000000000ull, 857000000000ull, 698000000000ull, 699000000000ull,
+ 660000000000ull, 661000000000ull, 662000000000ull, 663000000000ull,
+ 664000000000ull, 665000000000ull, 666000000000ull, 667000000000ull,
+ 668000000000ull, 669000000000ull, 686000000000ull, 687000000000ull,
+ 866000000000ull, 867000000000ull, 888000000000ull, 889000000000ull,
+ 670000000000ull, 671000000000ull, 672000000000ull, 673000000000ull,
+ 674000000000ull, 675000000000ull, 676000000000ull, 677000000000ull,
+ 678000000000ull, 679000000000ull, 696000000000ull, 697000000000ull,
+ 876000000000ull, 877000000000ull, 898000000000ull, 899000000000ull,
+ 700000000000ull, 701000000000ull, 702000000000ull, 703000000000ull,
+ 704000000000ull, 705000000000ull, 706000000000ull, 707000000000ull,
+ 708000000000ull, 709000000000ull, 780000000000ull, 781000000000ull,
+ 906000000000ull, 907000000000ull, 986000000000ull, 987000000000ull,
+ 710000000000ull, 711000000000ull, 712000000000ull, 713000000000ull,
+ 714000000000ull, 715000000000ull, 716000000000ull, 717000000000ull,
+ 718000000000ull, 719000000000ull, 790000000000ull, 791000000000ull,
+ 916000000000ull, 917000000000ull, 996000000000ull, 997000000000ull,
+ 720000000000ull, 721000000000ull, 722000000000ull, 723000000000ull,
+ 724000000000ull, 725000000000ull, 726000000000ull, 727000000000ull,
+ 728000000000ull, 729000000000ull, 782000000000ull, 783000000000ull,
+ 926000000000ull, 927000000000ull, 968000000000ull, 969000000000ull,
+ 730000000000ull, 731000000000ull, 732000000000ull, 733000000000ull,
+ 734000000000ull, 735000000000ull, 736000000000ull, 737000000000ull,
+ 738000000000ull, 739000000000ull, 792000000000ull, 793000000000ull,
+ 936000000000ull, 937000000000ull, 978000000000ull, 979000000000ull,
+ 740000000000ull, 741000000000ull, 742000000000ull, 743000000000ull,
+ 744000000000ull, 745000000000ull, 746000000000ull, 747000000000ull,
+ 748000000000ull, 749000000000ull, 784000000000ull, 785000000000ull,
+ 946000000000ull, 947000000000ull, 788000000000ull, 789000000000ull,
+ 750000000000ull, 751000000000ull, 752000000000ull, 753000000000ull,
+ 754000000000ull, 755000000000ull, 756000000000ull, 757000000000ull,
+ 758000000000ull, 759000000000ull, 794000000000ull, 795000000000ull,
+ 956000000000ull, 957000000000ull, 798000000000ull, 799000000000ull,
+ 760000000000ull, 761000000000ull, 762000000000ull, 763000000000ull,
+ 764000000000ull, 765000000000ull, 766000000000ull, 767000000000ull,
+ 768000000000ull, 769000000000ull, 786000000000ull, 787000000000ull,
+ 966000000000ull, 967000000000ull, 988000000000ull, 989000000000ull,
+ 770000000000ull, 771000000000ull, 772000000000ull, 773000000000ull,
+ 774000000000ull, 775000000000ull, 776000000000ull, 777000000000ull,
+ 778000000000ull, 779000000000ull, 796000000000ull, 797000000000ull,
+ 976000000000ull, 977000000000ull, 998000000000ull, 999000000000ull
+};
+
+const UINT64 d2b5[] = { 0000000000000ull, 1000000000000ull, 2000000000000ull,
+ 3000000000000ull, 4000000000000ull, 5000000000000ull,
+ 6000000000000ull,
+ 7000000000000ull, 8000000000000ull, 9000000000000ull,
+ 80000000000000ull,
+ 81000000000000ull, 800000000000000ull, 801000000000000ull,
+ 880000000000000ull,
+ 881000000000000ull,
+ 10000000000000ull, 11000000000000ull, 12000000000000ull,
+ 13000000000000ull, 14000000000000ull, 15000000000000ull,
+ 16000000000000ull, 17000000000000ull, 18000000000000ull,
+ 19000000000000ull, 90000000000000ull, 91000000000000ull,
+ 810000000000000ull, 811000000000000ull, 890000000000000ull,
+ 891000000000000ull,
+ 20000000000000ull, 21000000000000ull, 22000000000000ull,
+ 23000000000000ull, 24000000000000ull, 25000000000000ull,
+ 26000000000000ull, 27000000000000ull, 28000000000000ull,
+ 29000000000000ull, 82000000000000ull, 83000000000000ull,
+ 820000000000000ull, 821000000000000ull, 808000000000000ull,
+ 809000000000000ull,
+ 30000000000000ull, 31000000000000ull, 32000000000000ull,
+ 33000000000000ull, 34000000000000ull, 35000000000000ull,
+ 36000000000000ull, 37000000000000ull, 38000000000000ull,
+ 39000000000000ull, 92000000000000ull, 93000000000000ull,
+ 830000000000000ull, 831000000000000ull, 818000000000000ull,
+ 819000000000000ull,
+ 40000000000000ull, 41000000000000ull, 42000000000000ull,
+ 43000000000000ull, 44000000000000ull, 45000000000000ull,
+ 46000000000000ull, 47000000000000ull, 48000000000000ull,
+ 49000000000000ull, 84000000000000ull, 85000000000000ull,
+ 840000000000000ull, 841000000000000ull, 88000000000000ull,
+ 89000000000000ull,
+ 50000000000000ull, 51000000000000ull, 52000000000000ull,
+ 53000000000000ull, 54000000000000ull, 55000000000000ull,
+ 56000000000000ull, 57000000000000ull, 58000000000000ull,
+ 59000000000000ull, 94000000000000ull, 95000000000000ull,
+ 850000000000000ull, 851000000000000ull, 98000000000000ull,
+ 99000000000000ull,
+ 60000000000000ull, 61000000000000ull, 62000000000000ull,
+ 63000000000000ull, 64000000000000ull, 65000000000000ull,
+ 66000000000000ull, 67000000000000ull, 68000000000000ull,
+ 69000000000000ull, 86000000000000ull, 87000000000000ull,
+ 860000000000000ull, 861000000000000ull, 888000000000000ull,
+ 889000000000000ull,
+ 70000000000000ull, 71000000000000ull, 72000000000000ull,
+ 73000000000000ull, 74000000000000ull, 75000000000000ull,
+ 76000000000000ull, 77000000000000ull, 78000000000000ull,
+ 79000000000000ull, 96000000000000ull, 97000000000000ull,
+ 870000000000000ull, 871000000000000ull, 898000000000000ull,
+ 899000000000000ull,
+ 100000000000000ull, 101000000000000ull, 102000000000000ull,
+ 103000000000000ull, 104000000000000ull, 105000000000000ull,
+ 106000000000000ull, 107000000000000ull, 108000000000000ull,
+ 109000000000000ull, 180000000000000ull, 181000000000000ull,
+ 900000000000000ull, 901000000000000ull, 980000000000000ull,
+ 981000000000000ull,
+ 110000000000000ull, 111000000000000ull, 112000000000000ull,
+ 113000000000000ull, 114000000000000ull, 115000000000000ull,
+ 116000000000000ull, 117000000000000ull, 118000000000000ull,
+ 119000000000000ull, 190000000000000ull, 191000000000000ull,
+ 910000000000000ull, 911000000000000ull, 990000000000000ull,
+ 991000000000000ull,
+ 120000000000000ull, 121000000000000ull, 122000000000000ull,
+ 123000000000000ull, 124000000000000ull, 125000000000000ull,
+ 126000000000000ull, 127000000000000ull, 128000000000000ull,
+ 129000000000000ull, 182000000000000ull, 183000000000000ull,
+ 920000000000000ull, 921000000000000ull, 908000000000000ull,
+ 909000000000000ull,
+ 130000000000000ull, 131000000000000ull, 132000000000000ull,
+ 133000000000000ull, 134000000000000ull, 135000000000000ull,
+ 136000000000000ull, 137000000000000ull, 138000000000000ull,
+ 139000000000000ull, 192000000000000ull, 193000000000000ull,
+ 930000000000000ull, 931000000000000ull, 918000000000000ull,
+ 919000000000000ull,
+ 140000000000000ull, 141000000000000ull, 142000000000000ull,
+ 143000000000000ull, 144000000000000ull, 145000000000000ull,
+ 146000000000000ull, 147000000000000ull, 148000000000000ull,
+ 149000000000000ull, 184000000000000ull, 185000000000000ull,
+ 940000000000000ull, 941000000000000ull, 188000000000000ull,
+ 189000000000000ull,
+ 150000000000000ull, 151000000000000ull, 152000000000000ull,
+ 153000000000000ull, 154000000000000ull, 155000000000000ull,
+ 156000000000000ull, 157000000000000ull, 158000000000000ull,
+ 159000000000000ull, 194000000000000ull, 195000000000000ull,
+ 950000000000000ull, 951000000000000ull, 198000000000000ull,
+ 199000000000000ull,
+ 160000000000000ull, 161000000000000ull, 162000000000000ull,
+ 163000000000000ull, 164000000000000ull, 165000000000000ull,
+ 166000000000000ull, 167000000000000ull, 168000000000000ull,
+ 169000000000000ull, 186000000000000ull, 187000000000000ull,
+ 960000000000000ull, 961000000000000ull, 988000000000000ull,
+ 989000000000000ull,
+ 170000000000000ull, 171000000000000ull, 172000000000000ull,
+ 173000000000000ull, 174000000000000ull, 175000000000000ull,
+ 176000000000000ull, 177000000000000ull, 178000000000000ull,
+ 179000000000000ull, 196000000000000ull, 197000000000000ull,
+ 970000000000000ull, 971000000000000ull, 998000000000000ull,
+ 999000000000000ull,
+ 200000000000000ull, 201000000000000ull, 202000000000000ull,
+ 203000000000000ull, 204000000000000ull, 205000000000000ull,
+ 206000000000000ull, 207000000000000ull, 208000000000000ull,
+ 209000000000000ull, 280000000000000ull, 281000000000000ull,
+ 802000000000000ull, 803000000000000ull, 882000000000000ull,
+ 883000000000000ull,
+ 210000000000000ull, 211000000000000ull, 212000000000000ull,
+ 213000000000000ull, 214000000000000ull, 215000000000000ull,
+ 216000000000000ull, 217000000000000ull, 218000000000000ull,
+ 219000000000000ull, 290000000000000ull, 291000000000000ull,
+ 812000000000000ull, 813000000000000ull, 892000000000000ull,
+ 893000000000000ull,
+ 220000000000000ull, 221000000000000ull, 222000000000000ull,
+ 223000000000000ull, 224000000000000ull, 225000000000000ull,
+ 226000000000000ull, 227000000000000ull, 228000000000000ull,
+ 229000000000000ull, 282000000000000ull, 283000000000000ull,
+ 822000000000000ull, 823000000000000ull, 828000000000000ull,
+ 829000000000000ull,
+ 230000000000000ull, 231000000000000ull, 232000000000000ull,
+ 233000000000000ull, 234000000000000ull, 235000000000000ull,
+ 236000000000000ull, 237000000000000ull, 238000000000000ull,
+ 239000000000000ull, 292000000000000ull, 293000000000000ull,
+ 832000000000000ull, 833000000000000ull, 838000000000000ull,
+ 839000000000000ull,
+ 240000000000000ull, 241000000000000ull, 242000000000000ull,
+ 243000000000000ull, 244000000000000ull, 245000000000000ull,
+ 246000000000000ull, 247000000000000ull, 248000000000000ull,
+ 249000000000000ull, 284000000000000ull, 285000000000000ull,
+ 842000000000000ull, 843000000000000ull, 288000000000000ull,
+ 289000000000000ull,
+ 250000000000000ull, 251000000000000ull, 252000000000000ull,
+ 253000000000000ull, 254000000000000ull, 255000000000000ull,
+ 256000000000000ull, 257000000000000ull, 258000000000000ull,
+ 259000000000000ull, 294000000000000ull, 295000000000000ull,
+ 852000000000000ull, 853000000000000ull, 298000000000000ull,
+ 299000000000000ull,
+ 260000000000000ull, 261000000000000ull, 262000000000000ull,
+ 263000000000000ull, 264000000000000ull, 265000000000000ull,
+ 266000000000000ull, 267000000000000ull, 268000000000000ull,
+ 269000000000000ull, 286000000000000ull, 287000000000000ull,
+ 862000000000000ull, 863000000000000ull, 888000000000000ull,
+ 889000000000000ull,
+ 270000000000000ull, 271000000000000ull, 272000000000000ull,
+ 273000000000000ull, 274000000000000ull, 275000000000000ull,
+ 276000000000000ull, 277000000000000ull, 278000000000000ull,
+ 279000000000000ull, 296000000000000ull, 297000000000000ull,
+ 872000000000000ull, 873000000000000ull, 898000000000000ull,
+ 899000000000000ull,
+ 300000000000000ull, 301000000000000ull, 302000000000000ull,
+ 303000000000000ull, 304000000000000ull, 305000000000000ull,
+ 306000000000000ull, 307000000000000ull, 308000000000000ull,
+ 309000000000000ull, 380000000000000ull, 381000000000000ull,
+ 902000000000000ull, 903000000000000ull, 982000000000000ull,
+ 983000000000000ull,
+ 310000000000000ull, 311000000000000ull, 312000000000000ull,
+ 313000000000000ull, 314000000000000ull, 315000000000000ull,
+ 316000000000000ull, 317000000000000ull, 318000000000000ull,
+ 319000000000000ull, 390000000000000ull, 391000000000000ull,
+ 912000000000000ull, 913000000000000ull, 992000000000000ull,
+ 993000000000000ull,
+ 320000000000000ull, 321000000000000ull, 322000000000000ull,
+ 323000000000000ull, 324000000000000ull, 325000000000000ull,
+ 326000000000000ull, 327000000000000ull, 328000000000000ull,
+ 329000000000000ull, 382000000000000ull, 383000000000000ull,
+ 922000000000000ull, 923000000000000ull, 928000000000000ull,
+ 929000000000000ull,
+ 330000000000000ull, 331000000000000ull, 332000000000000ull,
+ 333000000000000ull, 334000000000000ull, 335000000000000ull,
+ 336000000000000ull, 337000000000000ull, 338000000000000ull,
+ 339000000000000ull, 392000000000000ull, 393000000000000ull,
+ 932000000000000ull, 933000000000000ull, 938000000000000ull,
+ 939000000000000ull,
+ 340000000000000ull, 341000000000000ull, 342000000000000ull,
+ 343000000000000ull, 344000000000000ull, 345000000000000ull,
+ 346000000000000ull, 347000000000000ull, 348000000000000ull,
+ 349000000000000ull, 384000000000000ull, 385000000000000ull,
+ 942000000000000ull, 943000000000000ull, 388000000000000ull,
+ 389000000000000ull,
+ 350000000000000ull, 351000000000000ull, 352000000000000ull,
+ 353000000000000ull, 354000000000000ull, 355000000000000ull,
+ 356000000000000ull, 357000000000000ull, 358000000000000ull,
+ 359000000000000ull, 394000000000000ull, 395000000000000ull,
+ 952000000000000ull, 953000000000000ull, 398000000000000ull,
+ 399000000000000ull,
+ 360000000000000ull, 361000000000000ull, 362000000000000ull,
+ 363000000000000ull, 364000000000000ull, 365000000000000ull,
+ 366000000000000ull, 367000000000000ull, 368000000000000ull,
+ 369000000000000ull, 386000000000000ull, 387000000000000ull,
+ 962000000000000ull, 963000000000000ull, 988000000000000ull,
+ 989000000000000ull,
+ 370000000000000ull, 371000000000000ull, 372000000000000ull,
+ 373000000000000ull, 374000000000000ull, 375000000000000ull,
+ 376000000000000ull, 377000000000000ull, 378000000000000ull,
+ 379000000000000ull, 396000000000000ull, 397000000000000ull,
+ 972000000000000ull, 973000000000000ull, 998000000000000ull,
+ 999000000000000ull,
+ 400000000000000ull, 401000000000000ull, 402000000000000ull,
+ 403000000000000ull, 404000000000000ull, 405000000000000ull,
+ 406000000000000ull, 407000000000000ull, 408000000000000ull,
+ 409000000000000ull, 480000000000000ull, 481000000000000ull,
+ 804000000000000ull, 805000000000000ull, 884000000000000ull,
+ 885000000000000ull,
+ 410000000000000ull, 411000000000000ull, 412000000000000ull,
+ 413000000000000ull, 414000000000000ull, 415000000000000ull,
+ 416000000000000ull, 417000000000000ull, 418000000000000ull,
+ 419000000000000ull, 490000000000000ull, 491000000000000ull,
+ 814000000000000ull, 815000000000000ull, 894000000000000ull,
+ 895000000000000ull,
+ 420000000000000ull, 421000000000000ull, 422000000000000ull,
+ 423000000000000ull, 424000000000000ull, 425000000000000ull,
+ 426000000000000ull, 427000000000000ull, 428000000000000ull,
+ 429000000000000ull, 482000000000000ull, 483000000000000ull,
+ 824000000000000ull, 825000000000000ull, 848000000000000ull,
+ 849000000000000ull,
+ 430000000000000ull, 431000000000000ull, 432000000000000ull,
+ 433000000000000ull, 434000000000000ull, 435000000000000ull,
+ 436000000000000ull, 437000000000000ull, 438000000000000ull,
+ 439000000000000ull, 492000000000000ull, 493000000000000ull,
+ 834000000000000ull, 835000000000000ull, 858000000000000ull,
+ 859000000000000ull,
+ 440000000000000ull, 441000000000000ull, 442000000000000ull,
+ 443000000000000ull, 444000000000000ull, 445000000000000ull,
+ 446000000000000ull, 447000000000000ull, 448000000000000ull,
+ 449000000000000ull, 484000000000000ull, 485000000000000ull,
+ 844000000000000ull, 845000000000000ull, 488000000000000ull,
+ 489000000000000ull,
+ 450000000000000ull, 451000000000000ull, 452000000000000ull,
+ 453000000000000ull, 454000000000000ull, 455000000000000ull,
+ 456000000000000ull, 457000000000000ull, 458000000000000ull,
+ 459000000000000ull, 494000000000000ull, 495000000000000ull,
+ 854000000000000ull, 855000000000000ull, 498000000000000ull,
+ 499000000000000ull,
+ 460000000000000ull, 461000000000000ull, 462000000000000ull,
+ 463000000000000ull, 464000000000000ull, 465000000000000ull,
+ 466000000000000ull, 467000000000000ull, 468000000000000ull,
+ 469000000000000ull, 486000000000000ull, 487000000000000ull,
+ 864000000000000ull, 865000000000000ull, 888000000000000ull,
+ 889000000000000ull,
+ 470000000000000ull, 471000000000000ull, 472000000000000ull,
+ 473000000000000ull, 474000000000000ull, 475000000000000ull,
+ 476000000000000ull, 477000000000000ull, 478000000000000ull,
+ 479000000000000ull, 496000000000000ull, 497000000000000ull,
+ 874000000000000ull, 875000000000000ull, 898000000000000ull,
+ 899000000000000ull,
+ 500000000000000ull, 501000000000000ull, 502000000000000ull,
+ 503000000000000ull, 504000000000000ull, 505000000000000ull,
+ 506000000000000ull, 507000000000000ull, 508000000000000ull,
+ 509000000000000ull, 580000000000000ull, 581000000000000ull,
+ 904000000000000ull, 905000000000000ull, 984000000000000ull,
+ 985000000000000ull,
+ 510000000000000ull, 511000000000000ull, 512000000000000ull,
+ 513000000000000ull, 514000000000000ull, 515000000000000ull,
+ 516000000000000ull, 517000000000000ull, 518000000000000ull,
+ 519000000000000ull, 590000000000000ull, 591000000000000ull,
+ 914000000000000ull, 915000000000000ull, 994000000000000ull,
+ 995000000000000ull,
+ 520000000000000ull, 521000000000000ull, 522000000000000ull,
+ 523000000000000ull, 524000000000000ull, 525000000000000ull,
+ 526000000000000ull, 527000000000000ull, 528000000000000ull,
+ 529000000000000ull, 582000000000000ull, 583000000000000ull,
+ 924000000000000ull, 925000000000000ull, 948000000000000ull,
+ 949000000000000ull,
+ 530000000000000ull, 531000000000000ull, 532000000000000ull,
+ 533000000000000ull, 534000000000000ull, 535000000000000ull,
+ 536000000000000ull, 537000000000000ull, 538000000000000ull,
+ 539000000000000ull, 592000000000000ull, 593000000000000ull,
+ 934000000000000ull, 935000000000000ull, 958000000000000ull,
+ 959000000000000ull,
+ 540000000000000ull, 541000000000000ull, 542000000000000ull,
+ 543000000000000ull, 544000000000000ull, 545000000000000ull,
+ 546000000000000ull, 547000000000000ull, 548000000000000ull,
+ 549000000000000ull, 584000000000000ull, 585000000000000ull,
+ 944000000000000ull, 945000000000000ull, 588000000000000ull,
+ 589000000000000ull,
+ 550000000000000ull, 551000000000000ull, 552000000000000ull,
+ 553000000000000ull, 554000000000000ull, 555000000000000ull,
+ 556000000000000ull, 557000000000000ull, 558000000000000ull,
+ 559000000000000ull, 594000000000000ull, 595000000000000ull,
+ 954000000000000ull, 955000000000000ull, 598000000000000ull,
+ 599000000000000ull,
+ 560000000000000ull, 561000000000000ull, 562000000000000ull,
+ 563000000000000ull, 564000000000000ull, 565000000000000ull,
+ 566000000000000ull, 567000000000000ull, 568000000000000ull,
+ 569000000000000ull, 586000000000000ull, 587000000000000ull,
+ 964000000000000ull, 965000000000000ull, 988000000000000ull,
+ 989000000000000ull,
+ 570000000000000ull, 571000000000000ull, 572000000000000ull,
+ 573000000000000ull, 574000000000000ull, 575000000000000ull,
+ 576000000000000ull, 577000000000000ull, 578000000000000ull,
+ 579000000000000ull, 596000000000000ull, 597000000000000ull,
+ 974000000000000ull, 975000000000000ull, 998000000000000ull,
+ 999000000000000ull,
+ 600000000000000ull, 601000000000000ull, 602000000000000ull,
+ 603000000000000ull, 604000000000000ull, 605000000000000ull,
+ 606000000000000ull, 607000000000000ull, 608000000000000ull,
+ 609000000000000ull, 680000000000000ull, 681000000000000ull,
+ 806000000000000ull, 807000000000000ull, 886000000000000ull,
+ 887000000000000ull,
+ 610000000000000ull, 611000000000000ull, 612000000000000ull,
+ 613000000000000ull, 614000000000000ull, 615000000000000ull,
+ 616000000000000ull, 617000000000000ull, 618000000000000ull,
+ 619000000000000ull, 690000000000000ull, 691000000000000ull,
+ 816000000000000ull, 817000000000000ull, 896000000000000ull,
+ 897000000000000ull,
+ 620000000000000ull, 621000000000000ull, 622000000000000ull,
+ 623000000000000ull, 624000000000000ull, 625000000000000ull,
+ 626000000000000ull, 627000000000000ull, 628000000000000ull,
+ 629000000000000ull, 682000000000000ull, 683000000000000ull,
+ 826000000000000ull, 827000000000000ull, 868000000000000ull,
+ 869000000000000ull,
+ 630000000000000ull, 631000000000000ull, 632000000000000ull,
+ 633000000000000ull, 634000000000000ull, 635000000000000ull,
+ 636000000000000ull, 637000000000000ull, 638000000000000ull,
+ 639000000000000ull, 692000000000000ull, 693000000000000ull,
+ 836000000000000ull, 837000000000000ull, 878000000000000ull,
+ 879000000000000ull,
+ 640000000000000ull, 641000000000000ull, 642000000000000ull,
+ 643000000000000ull, 644000000000000ull, 645000000000000ull,
+ 646000000000000ull, 647000000000000ull, 648000000000000ull,
+ 649000000000000ull, 684000000000000ull, 685000000000000ull,
+ 846000000000000ull, 847000000000000ull, 688000000000000ull,
+ 689000000000000ull,
+ 650000000000000ull, 651000000000000ull, 652000000000000ull,
+ 653000000000000ull, 654000000000000ull, 655000000000000ull,
+ 656000000000000ull, 657000000000000ull, 658000000000000ull,
+ 659000000000000ull, 694000000000000ull, 695000000000000ull,
+ 856000000000000ull, 857000000000000ull, 698000000000000ull,
+ 699000000000000ull,
+ 660000000000000ull, 661000000000000ull, 662000000000000ull,
+ 663000000000000ull, 664000000000000ull, 665000000000000ull,
+ 666000000000000ull, 667000000000000ull, 668000000000000ull,
+ 669000000000000ull, 686000000000000ull, 687000000000000ull,
+ 866000000000000ull, 867000000000000ull, 888000000000000ull,
+ 889000000000000ull,
+ 670000000000000ull, 671000000000000ull, 672000000000000ull,
+ 673000000000000ull, 674000000000000ull, 675000000000000ull,
+ 676000000000000ull, 677000000000000ull, 678000000000000ull,
+ 679000000000000ull, 696000000000000ull, 697000000000000ull,
+ 876000000000000ull, 877000000000000ull, 898000000000000ull,
+ 899000000000000ull,
+ 700000000000000ull, 701000000000000ull, 702000000000000ull,
+ 703000000000000ull, 704000000000000ull, 705000000000000ull,
+ 706000000000000ull, 707000000000000ull, 708000000000000ull,
+ 709000000000000ull, 780000000000000ull, 781000000000000ull,
+ 906000000000000ull, 907000000000000ull, 986000000000000ull,
+ 987000000000000ull,
+ 710000000000000ull, 711000000000000ull, 712000000000000ull,
+ 713000000000000ull, 714000000000000ull, 715000000000000ull,
+ 716000000000000ull, 717000000000000ull, 718000000000000ull,
+ 719000000000000ull, 790000000000000ull, 791000000000000ull,
+ 916000000000000ull, 917000000000000ull, 996000000000000ull,
+ 997000000000000ull,
+ 720000000000000ull, 721000000000000ull, 722000000000000ull,
+ 723000000000000ull, 724000000000000ull, 725000000000000ull,
+ 726000000000000ull, 727000000000000ull, 728000000000000ull,
+ 729000000000000ull, 782000000000000ull, 783000000000000ull,
+ 926000000000000ull, 927000000000000ull, 968000000000000ull,
+ 969000000000000ull,
+ 730000000000000ull, 731000000000000ull, 732000000000000ull,
+ 733000000000000ull, 734000000000000ull, 735000000000000ull,
+ 736000000000000ull, 737000000000000ull, 738000000000000ull,
+ 739000000000000ull, 792000000000000ull, 793000000000000ull,
+ 936000000000000ull, 937000000000000ull, 978000000000000ull,
+ 979000000000000ull,
+ 740000000000000ull, 741000000000000ull, 742000000000000ull,
+ 743000000000000ull, 744000000000000ull, 745000000000000ull,
+ 746000000000000ull, 747000000000000ull, 748000000000000ull,
+ 749000000000000ull, 784000000000000ull, 785000000000000ull,
+ 946000000000000ull, 947000000000000ull, 788000000000000ull,
+ 789000000000000ull,
+ 750000000000000ull, 751000000000000ull, 752000000000000ull,
+ 753000000000000ull, 754000000000000ull, 755000000000000ull,
+ 756000000000000ull, 757000000000000ull, 758000000000000ull,
+ 759000000000000ull, 794000000000000ull, 795000000000000ull,
+ 956000000000000ull, 957000000000000ull, 798000000000000ull,
+ 799000000000000ull,
+ 760000000000000ull, 761000000000000ull, 762000000000000ull,
+ 763000000000000ull, 764000000000000ull, 765000000000000ull,
+ 766000000000000ull, 767000000000000ull, 768000000000000ull,
+ 769000000000000ull, 786000000000000ull, 787000000000000ull,
+ 966000000000000ull, 967000000000000ull, 988000000000000ull,
+ 989000000000000ull,
+ 770000000000000ull, 771000000000000ull, 772000000000000ull,
+ 773000000000000ull, 774000000000000ull, 775000000000000ull,
+ 776000000000000ull, 777000000000000ull, 778000000000000ull,
+ 779000000000000ull, 796000000000000ull, 797000000000000ull,
+ 976000000000000ull, 977000000000000ull, 998000000000000ull,
+ 999000000000000ull
+};
+
+const UINT64 d2b6[] =
+ { 0000000000000000ull, 1000000000000000ull, 2000000000000000ull,
+ 3000000000000000ull, 4000000000000000ull, 5000000000000000ull,
+ 6000000000000000ull, 7000000000000000ull, 8000000000000000ull,
+ 9000000000000000ull, 80000000000000000ull, 81000000000000000ull,
+ 800000000000000000ull, 801000000000000000ull, 880000000000000000ull,
+ 881000000000000000ull,
+ 10000000000000000ull, 11000000000000000ull, 12000000000000000ull,
+ 13000000000000000ull, 14000000000000000ull, 15000000000000000ull,
+ 16000000000000000ull, 17000000000000000ull, 18000000000000000ull,
+ 19000000000000000ull, 90000000000000000ull, 91000000000000000ull,
+ 810000000000000000ull, 811000000000000000ull, 890000000000000000ull,
+ 891000000000000000ull,
+ 20000000000000000ull, 21000000000000000ull, 22000000000000000ull,
+ 23000000000000000ull, 24000000000000000ull, 25000000000000000ull,
+ 26000000000000000ull, 27000000000000000ull, 28000000000000000ull,
+ 29000000000000000ull, 82000000000000000ull, 83000000000000000ull,
+ 820000000000000000ull, 821000000000000000ull, 808000000000000000ull,
+ 809000000000000000ull,
+ 30000000000000000ull, 31000000000000000ull, 32000000000000000ull,
+ 33000000000000000ull, 34000000000000000ull, 35000000000000000ull,
+ 36000000000000000ull, 37000000000000000ull, 38000000000000000ull,
+ 39000000000000000ull, 92000000000000000ull, 93000000000000000ull,
+ 830000000000000000ull, 831000000000000000ull, 818000000000000000ull,
+ 819000000000000000ull,
+ 40000000000000000ull, 41000000000000000ull, 42000000000000000ull,
+ 43000000000000000ull, 44000000000000000ull, 45000000000000000ull,
+ 46000000000000000ull, 47000000000000000ull, 48000000000000000ull,
+ 49000000000000000ull, 84000000000000000ull, 85000000000000000ull,
+ 840000000000000000ull, 841000000000000000ull, 88000000000000000ull,
+ 89000000000000000ull,
+ 50000000000000000ull, 51000000000000000ull, 52000000000000000ull,
+ 53000000000000000ull, 54000000000000000ull, 55000000000000000ull,
+ 56000000000000000ull, 57000000000000000ull, 58000000000000000ull,
+ 59000000000000000ull, 94000000000000000ull, 95000000000000000ull,
+ 850000000000000000ull, 851000000000000000ull, 98000000000000000ull,
+ 99000000000000000ull,
+ 60000000000000000ull, 61000000000000000ull, 62000000000000000ull,
+ 63000000000000000ull, 64000000000000000ull, 65000000000000000ull,
+ 66000000000000000ull, 67000000000000000ull, 68000000000000000ull,
+ 69000000000000000ull, 86000000000000000ull, 87000000000000000ull,
+ 860000000000000000ull, 861000000000000000ull, 888000000000000000ull,
+ 889000000000000000ull,
+ 70000000000000000ull, 71000000000000000ull, 72000000000000000ull,
+ 73000000000000000ull, 74000000000000000ull, 75000000000000000ull,
+ 76000000000000000ull, 77000000000000000ull, 78000000000000000ull,
+ 79000000000000000ull, 96000000000000000ull, 97000000000000000ull,
+ 870000000000000000ull, 871000000000000000ull, 898000000000000000ull,
+ 899000000000000000ull,
+ 100000000000000000ull, 101000000000000000ull, 102000000000000000ull,
+ 103000000000000000ull, 104000000000000000ull, 105000000000000000ull,
+ 106000000000000000ull, 107000000000000000ull, 108000000000000000ull,
+ 109000000000000000ull, 180000000000000000ull, 181000000000000000ull,
+ 900000000000000000ull, 901000000000000000ull, 980000000000000000ull,
+ 981000000000000000ull,
+ 110000000000000000ull, 111000000000000000ull, 112000000000000000ull,
+ 113000000000000000ull, 114000000000000000ull, 115000000000000000ull,
+ 116000000000000000ull, 117000000000000000ull, 118000000000000000ull,
+ 119000000000000000ull, 190000000000000000ull, 191000000000000000ull,
+ 910000000000000000ull, 911000000000000000ull, 990000000000000000ull,
+ 991000000000000000ull,
+ 120000000000000000ull, 121000000000000000ull, 122000000000000000ull,
+ 123000000000000000ull, 124000000000000000ull, 125000000000000000ull,
+ 126000000000000000ull, 127000000000000000ull, 128000000000000000ull,
+ 129000000000000000ull, 182000000000000000ull, 183000000000000000ull,
+ 920000000000000000ull, 921000000000000000ull, 908000000000000000ull,
+ 909000000000000000ull,
+ 130000000000000000ull, 131000000000000000ull, 132000000000000000ull,
+ 133000000000000000ull, 134000000000000000ull, 135000000000000000ull,
+ 136000000000000000ull, 137000000000000000ull, 138000000000000000ull,
+ 139000000000000000ull, 192000000000000000ull, 193000000000000000ull,
+ 930000000000000000ull, 931000000000000000ull, 918000000000000000ull,
+ 919000000000000000ull,
+ 140000000000000000ull, 141000000000000000ull, 142000000000000000ull,
+ 143000000000000000ull, 144000000000000000ull, 145000000000000000ull,
+ 146000000000000000ull, 147000000000000000ull, 148000000000000000ull,
+ 149000000000000000ull, 184000000000000000ull, 185000000000000000ull,
+ 940000000000000000ull, 941000000000000000ull, 188000000000000000ull,
+ 189000000000000000ull,
+ 150000000000000000ull, 151000000000000000ull, 152000000000000000ull,
+ 153000000000000000ull, 154000000000000000ull, 155000000000000000ull,
+ 156000000000000000ull, 157000000000000000ull, 158000000000000000ull,
+ 159000000000000000ull, 194000000000000000ull, 195000000000000000ull,
+ 950000000000000000ull, 951000000000000000ull, 198000000000000000ull,
+ 199000000000000000ull,
+ 160000000000000000ull, 161000000000000000ull, 162000000000000000ull,
+ 163000000000000000ull, 164000000000000000ull, 165000000000000000ull,
+ 166000000000000000ull, 167000000000000000ull, 168000000000000000ull,
+ 169000000000000000ull, 186000000000000000ull, 187000000000000000ull,
+ 960000000000000000ull, 961000000000000000ull, 988000000000000000ull,
+ 989000000000000000ull,
+ 170000000000000000ull, 171000000000000000ull, 172000000000000000ull,
+ 173000000000000000ull, 174000000000000000ull, 175000000000000000ull,
+ 176000000000000000ull, 177000000000000000ull, 178000000000000000ull,
+ 179000000000000000ull, 196000000000000000ull, 197000000000000000ull,
+ 970000000000000000ull, 971000000000000000ull, 998000000000000000ull,
+ 999000000000000000ull,
+ 200000000000000000ull, 201000000000000000ull, 202000000000000000ull,
+ 203000000000000000ull, 204000000000000000ull, 205000000000000000ull,
+ 206000000000000000ull, 207000000000000000ull, 208000000000000000ull,
+ 209000000000000000ull, 280000000000000000ull, 281000000000000000ull,
+ 802000000000000000ull, 803000000000000000ull, 882000000000000000ull,
+ 883000000000000000ull,
+ 210000000000000000ull, 211000000000000000ull, 212000000000000000ull,
+ 213000000000000000ull, 214000000000000000ull, 215000000000000000ull,
+ 216000000000000000ull, 217000000000000000ull, 218000000000000000ull,
+ 219000000000000000ull, 290000000000000000ull, 291000000000000000ull,
+ 812000000000000000ull, 813000000000000000ull, 892000000000000000ull,
+ 893000000000000000ull,
+ 220000000000000000ull, 221000000000000000ull, 222000000000000000ull,
+ 223000000000000000ull, 224000000000000000ull, 225000000000000000ull,
+ 226000000000000000ull, 227000000000000000ull, 228000000000000000ull,
+ 229000000000000000ull, 282000000000000000ull, 283000000000000000ull,
+ 822000000000000000ull, 823000000000000000ull, 828000000000000000ull,
+ 829000000000000000ull,
+ 230000000000000000ull, 231000000000000000ull, 232000000000000000ull,
+ 233000000000000000ull, 234000000000000000ull, 235000000000000000ull,
+ 236000000000000000ull, 237000000000000000ull, 238000000000000000ull,
+ 239000000000000000ull, 292000000000000000ull, 293000000000000000ull,
+ 832000000000000000ull, 833000000000000000ull, 838000000000000000ull,
+ 839000000000000000ull,
+ 240000000000000000ull, 241000000000000000ull, 242000000000000000ull,
+ 243000000000000000ull, 244000000000000000ull, 245000000000000000ull,
+ 246000000000000000ull, 247000000000000000ull, 248000000000000000ull,
+ 249000000000000000ull, 284000000000000000ull, 285000000000000000ull,
+ 842000000000000000ull, 843000000000000000ull, 288000000000000000ull,
+ 289000000000000000ull,
+ 250000000000000000ull, 251000000000000000ull, 252000000000000000ull,
+ 253000000000000000ull, 254000000000000000ull, 255000000000000000ull,
+ 256000000000000000ull, 257000000000000000ull, 258000000000000000ull,
+ 259000000000000000ull, 294000000000000000ull, 295000000000000000ull,
+ 852000000000000000ull, 853000000000000000ull, 298000000000000000ull,
+ 299000000000000000ull,
+ 260000000000000000ull, 261000000000000000ull, 262000000000000000ull,
+ 263000000000000000ull, 264000000000000000ull, 265000000000000000ull,
+ 266000000000000000ull, 267000000000000000ull, 268000000000000000ull,
+ 269000000000000000ull, 286000000000000000ull, 287000000000000000ull,
+ 862000000000000000ull, 863000000000000000ull, 888000000000000000ull,
+ 889000000000000000ull,
+ 270000000000000000ull, 271000000000000000ull, 272000000000000000ull,
+ 273000000000000000ull, 274000000000000000ull, 275000000000000000ull,
+ 276000000000000000ull, 277000000000000000ull, 278000000000000000ull,
+ 279000000000000000ull, 296000000000000000ull, 297000000000000000ull,
+ 872000000000000000ull, 873000000000000000ull, 898000000000000000ull,
+ 899000000000000000ull,
+ 300000000000000000ull, 301000000000000000ull, 302000000000000000ull,
+ 303000000000000000ull, 304000000000000000ull, 305000000000000000ull,
+ 306000000000000000ull, 307000000000000000ull, 308000000000000000ull,
+ 309000000000000000ull, 380000000000000000ull, 381000000000000000ull,
+ 902000000000000000ull, 903000000000000000ull, 982000000000000000ull,
+ 983000000000000000ull,
+ 310000000000000000ull, 311000000000000000ull, 312000000000000000ull,
+ 313000000000000000ull, 314000000000000000ull, 315000000000000000ull,
+ 316000000000000000ull, 317000000000000000ull, 318000000000000000ull,
+ 319000000000000000ull, 390000000000000000ull, 391000000000000000ull,
+ 912000000000000000ull, 913000000000000000ull, 992000000000000000ull,
+ 993000000000000000ull,
+ 320000000000000000ull, 321000000000000000ull, 322000000000000000ull,
+ 323000000000000000ull, 324000000000000000ull, 325000000000000000ull,
+ 326000000000000000ull, 327000000000000000ull, 328000000000000000ull,
+ 329000000000000000ull, 382000000000000000ull, 383000000000000000ull,
+ 922000000000000000ull, 923000000000000000ull, 928000000000000000ull,
+ 929000000000000000ull,
+ 330000000000000000ull, 331000000000000000ull, 332000000000000000ull,
+ 333000000000000000ull, 334000000000000000ull, 335000000000000000ull,
+ 336000000000000000ull, 337000000000000000ull, 338000000000000000ull,
+ 339000000000000000ull, 392000000000000000ull, 393000000000000000ull,
+ 932000000000000000ull, 933000000000000000ull, 938000000000000000ull,
+ 939000000000000000ull,
+ 340000000000000000ull, 341000000000000000ull, 342000000000000000ull,
+ 343000000000000000ull, 344000000000000000ull, 345000000000000000ull,
+ 346000000000000000ull, 347000000000000000ull, 348000000000000000ull,
+ 349000000000000000ull, 384000000000000000ull, 385000000000000000ull,
+ 942000000000000000ull, 943000000000000000ull, 388000000000000000ull,
+ 389000000000000000ull,
+ 350000000000000000ull, 351000000000000000ull, 352000000000000000ull,
+ 353000000000000000ull, 354000000000000000ull, 355000000000000000ull,
+ 356000000000000000ull, 357000000000000000ull, 358000000000000000ull,
+ 359000000000000000ull, 394000000000000000ull, 395000000000000000ull,
+ 952000000000000000ull, 953000000000000000ull, 398000000000000000ull,
+ 399000000000000000ull,
+ 360000000000000000ull, 361000000000000000ull, 362000000000000000ull,
+ 363000000000000000ull, 364000000000000000ull, 365000000000000000ull,
+ 366000000000000000ull, 367000000000000000ull, 368000000000000000ull,
+ 369000000000000000ull, 386000000000000000ull, 387000000000000000ull,
+ 962000000000000000ull, 963000000000000000ull, 988000000000000000ull,
+ 989000000000000000ull,
+ 370000000000000000ull, 371000000000000000ull, 372000000000000000ull,
+ 373000000000000000ull, 374000000000000000ull, 375000000000000000ull,
+ 376000000000000000ull, 377000000000000000ull, 378000000000000000ull,
+ 379000000000000000ull, 396000000000000000ull, 397000000000000000ull,
+ 972000000000000000ull, 973000000000000000ull, 998000000000000000ull,
+ 999000000000000000ull,
+ 400000000000000000ull, 401000000000000000ull, 402000000000000000ull,
+ 403000000000000000ull, 404000000000000000ull, 405000000000000000ull,
+ 406000000000000000ull, 407000000000000000ull, 408000000000000000ull,
+ 409000000000000000ull, 480000000000000000ull, 481000000000000000ull,
+ 804000000000000000ull, 805000000000000000ull, 884000000000000000ull,
+ 885000000000000000ull,
+ 410000000000000000ull, 411000000000000000ull, 412000000000000000ull,
+ 413000000000000000ull, 414000000000000000ull, 415000000000000000ull,
+ 416000000000000000ull, 417000000000000000ull, 418000000000000000ull,
+ 419000000000000000ull, 490000000000000000ull, 491000000000000000ull,
+ 814000000000000000ull, 815000000000000000ull, 894000000000000000ull,
+ 895000000000000000ull,
+ 420000000000000000ull, 421000000000000000ull, 422000000000000000ull,
+ 423000000000000000ull, 424000000000000000ull, 425000000000000000ull,
+ 426000000000000000ull, 427000000000000000ull, 428000000000000000ull,
+ 429000000000000000ull, 482000000000000000ull, 483000000000000000ull,
+ 824000000000000000ull, 825000000000000000ull, 848000000000000000ull,
+ 849000000000000000ull,
+ 430000000000000000ull, 431000000000000000ull, 432000000000000000ull,
+ 433000000000000000ull, 434000000000000000ull, 435000000000000000ull,
+ 436000000000000000ull, 437000000000000000ull, 438000000000000000ull,
+ 439000000000000000ull, 492000000000000000ull, 493000000000000000ull,
+ 834000000000000000ull, 835000000000000000ull, 858000000000000000ull,
+ 859000000000000000ull,
+ 440000000000000000ull, 441000000000000000ull, 442000000000000000ull,
+ 443000000000000000ull, 444000000000000000ull, 445000000000000000ull,
+ 446000000000000000ull, 447000000000000000ull, 448000000000000000ull,
+ 449000000000000000ull, 484000000000000000ull, 485000000000000000ull,
+ 844000000000000000ull, 845000000000000000ull, 488000000000000000ull,
+ 489000000000000000ull,
+ 450000000000000000ull, 451000000000000000ull, 452000000000000000ull,
+ 453000000000000000ull, 454000000000000000ull, 455000000000000000ull,
+ 456000000000000000ull, 457000000000000000ull, 458000000000000000ull,
+ 459000000000000000ull, 494000000000000000ull, 495000000000000000ull,
+ 854000000000000000ull, 855000000000000000ull, 498000000000000000ull,
+ 499000000000000000ull,
+ 460000000000000000ull, 461000000000000000ull, 462000000000000000ull,
+ 463000000000000000ull, 464000000000000000ull, 465000000000000000ull,
+ 466000000000000000ull, 467000000000000000ull, 468000000000000000ull,
+ 469000000000000000ull, 486000000000000000ull, 487000000000000000ull,
+ 864000000000000000ull, 865000000000000000ull, 888000000000000000ull,
+ 889000000000000000ull,
+ 470000000000000000ull, 471000000000000000ull, 472000000000000000ull,
+ 473000000000000000ull, 474000000000000000ull, 475000000000000000ull,
+ 476000000000000000ull, 477000000000000000ull, 478000000000000000ull,
+ 479000000000000000ull, 496000000000000000ull, 497000000000000000ull,
+ 874000000000000000ull, 875000000000000000ull, 898000000000000000ull,
+ 899000000000000000ull,
+ 500000000000000000ull, 501000000000000000ull, 502000000000000000ull,
+ 503000000000000000ull, 504000000000000000ull, 505000000000000000ull,
+ 506000000000000000ull, 507000000000000000ull, 508000000000000000ull,
+ 509000000000000000ull, 580000000000000000ull, 581000000000000000ull,
+ 904000000000000000ull, 905000000000000000ull, 984000000000000000ull,
+ 985000000000000000ull,
+ 510000000000000000ull, 511000000000000000ull, 512000000000000000ull,
+ 513000000000000000ull, 514000000000000000ull, 515000000000000000ull,
+ 516000000000000000ull, 517000000000000000ull, 518000000000000000ull,
+ 519000000000000000ull, 590000000000000000ull, 591000000000000000ull,
+ 914000000000000000ull, 915000000000000000ull, 994000000000000000ull,
+ 995000000000000000ull,
+ 520000000000000000ull, 521000000000000000ull, 522000000000000000ull,
+ 523000000000000000ull, 524000000000000000ull, 525000000000000000ull,
+ 526000000000000000ull, 527000000000000000ull, 528000000000000000ull,
+ 529000000000000000ull, 582000000000000000ull, 583000000000000000ull,
+ 924000000000000000ull, 925000000000000000ull, 948000000000000000ull,
+ 949000000000000000ull,
+ 530000000000000000ull, 531000000000000000ull, 532000000000000000ull,
+ 533000000000000000ull, 534000000000000000ull, 535000000000000000ull,
+ 536000000000000000ull, 537000000000000000ull, 538000000000000000ull,
+ 539000000000000000ull, 592000000000000000ull, 593000000000000000ull,
+ 934000000000000000ull, 935000000000000000ull, 958000000000000000ull,
+ 959000000000000000ull,
+ 540000000000000000ull, 541000000000000000ull, 542000000000000000ull,
+ 543000000000000000ull, 544000000000000000ull, 545000000000000000ull,
+ 546000000000000000ull, 547000000000000000ull, 548000000000000000ull,
+ 549000000000000000ull, 584000000000000000ull, 585000000000000000ull,
+ 944000000000000000ull, 945000000000000000ull, 588000000000000000ull,
+ 589000000000000000ull,
+ 550000000000000000ull, 551000000000000000ull, 552000000000000000ull,
+ 553000000000000000ull, 554000000000000000ull, 555000000000000000ull,
+ 556000000000000000ull, 557000000000000000ull, 558000000000000000ull,
+ 559000000000000000ull, 594000000000000000ull, 595000000000000000ull,
+ 954000000000000000ull, 955000000000000000ull, 598000000000000000ull,
+ 599000000000000000ull,
+ 560000000000000000ull, 561000000000000000ull, 562000000000000000ull,
+ 563000000000000000ull, 564000000000000000ull, 565000000000000000ull,
+ 566000000000000000ull, 567000000000000000ull, 568000000000000000ull,
+ 569000000000000000ull, 586000000000000000ull, 587000000000000000ull,
+ 964000000000000000ull, 965000000000000000ull, 988000000000000000ull,
+ 989000000000000000ull,
+ 570000000000000000ull, 571000000000000000ull, 572000000000000000ull,
+ 573000000000000000ull, 574000000000000000ull, 575000000000000000ull,
+ 576000000000000000ull, 577000000000000000ull, 578000000000000000ull,
+ 579000000000000000ull, 596000000000000000ull, 597000000000000000ull,
+ 974000000000000000ull, 975000000000000000ull, 998000000000000000ull,
+ 999000000000000000ull,
+ 600000000000000000ull, 601000000000000000ull, 602000000000000000ull,
+ 603000000000000000ull, 604000000000000000ull, 605000000000000000ull,
+ 606000000000000000ull, 607000000000000000ull, 608000000000000000ull,
+ 609000000000000000ull, 680000000000000000ull, 681000000000000000ull,
+ 806000000000000000ull, 807000000000000000ull, 886000000000000000ull,
+ 887000000000000000ull,
+ 610000000000000000ull, 611000000000000000ull, 612000000000000000ull,
+ 613000000000000000ull, 614000000000000000ull, 615000000000000000ull,
+ 616000000000000000ull, 617000000000000000ull, 618000000000000000ull,
+ 619000000000000000ull, 690000000000000000ull, 691000000000000000ull,
+ 816000000000000000ull, 817000000000000000ull, 896000000000000000ull,
+ 897000000000000000ull,
+ 620000000000000000ull, 621000000000000000ull, 622000000000000000ull,
+ 623000000000000000ull, 624000000000000000ull, 625000000000000000ull,
+ 626000000000000000ull, 627000000000000000ull, 628000000000000000ull,
+ 629000000000000000ull, 682000000000000000ull, 683000000000000000ull,
+ 826000000000000000ull, 827000000000000000ull, 868000000000000000ull,
+ 869000000000000000ull,
+ 630000000000000000ull, 631000000000000000ull, 632000000000000000ull,
+ 633000000000000000ull, 634000000000000000ull, 635000000000000000ull,
+ 636000000000000000ull, 637000000000000000ull, 638000000000000000ull,
+ 639000000000000000ull, 692000000000000000ull, 693000000000000000ull,
+ 836000000000000000ull, 837000000000000000ull, 878000000000000000ull,
+ 879000000000000000ull,
+ 640000000000000000ull, 641000000000000000ull, 642000000000000000ull,
+ 643000000000000000ull, 644000000000000000ull, 645000000000000000ull,
+ 646000000000000000ull, 647000000000000000ull, 648000000000000000ull,
+ 649000000000000000ull, 684000000000000000ull, 685000000000000000ull,
+ 846000000000000000ull, 847000000000000000ull, 688000000000000000ull,
+ 689000000000000000ull,
+ 650000000000000000ull, 651000000000000000ull, 652000000000000000ull,
+ 653000000000000000ull, 654000000000000000ull, 655000000000000000ull,
+ 656000000000000000ull, 657000000000000000ull, 658000000000000000ull,
+ 659000000000000000ull, 694000000000000000ull, 695000000000000000ull,
+ 856000000000000000ull, 857000000000000000ull, 698000000000000000ull,
+ 699000000000000000ull,
+ 660000000000000000ull, 661000000000000000ull, 662000000000000000ull,
+ 663000000000000000ull, 664000000000000000ull, 665000000000000000ull,
+ 666000000000000000ull, 667000000000000000ull, 668000000000000000ull,
+ 669000000000000000ull, 686000000000000000ull, 687000000000000000ull,
+ 866000000000000000ull, 867000000000000000ull, 888000000000000000ull,
+ 889000000000000000ull,
+ 670000000000000000ull, 671000000000000000ull, 672000000000000000ull,
+ 673000000000000000ull, 674000000000000000ull, 675000000000000000ull,
+ 676000000000000000ull, 677000000000000000ull, 678000000000000000ull,
+ 679000000000000000ull, 696000000000000000ull, 697000000000000000ull,
+ 876000000000000000ull, 877000000000000000ull, 898000000000000000ull,
+ 899000000000000000ull,
+ 700000000000000000ull, 701000000000000000ull, 702000000000000000ull,
+ 703000000000000000ull, 704000000000000000ull, 705000000000000000ull,
+ 706000000000000000ull, 707000000000000000ull, 708000000000000000ull,
+ 709000000000000000ull, 780000000000000000ull, 781000000000000000ull,
+ 906000000000000000ull, 907000000000000000ull, 986000000000000000ull,
+ 987000000000000000ull,
+ 710000000000000000ull, 711000000000000000ull, 712000000000000000ull,
+ 713000000000000000ull, 714000000000000000ull, 715000000000000000ull,
+ 716000000000000000ull, 717000000000000000ull, 718000000000000000ull,
+ 719000000000000000ull, 790000000000000000ull, 791000000000000000ull,
+ 916000000000000000ull, 917000000000000000ull, 996000000000000000ull,
+ 997000000000000000ull,
+ 720000000000000000ull, 721000000000000000ull, 722000000000000000ull,
+ 723000000000000000ull, 724000000000000000ull, 725000000000000000ull,
+ 726000000000000000ull, 727000000000000000ull, 728000000000000000ull,
+ 729000000000000000ull, 782000000000000000ull, 783000000000000000ull,
+ 926000000000000000ull, 927000000000000000ull, 968000000000000000ull,
+ 969000000000000000ull,
+ 730000000000000000ull, 731000000000000000ull, 732000000000000000ull,
+ 733000000000000000ull, 734000000000000000ull, 735000000000000000ull,
+ 736000000000000000ull, 737000000000000000ull, 738000000000000000ull,
+ 739000000000000000ull, 792000000000000000ull, 793000000000000000ull,
+ 936000000000000000ull, 937000000000000000ull, 978000000000000000ull,
+ 979000000000000000ull,
+ 740000000000000000ull, 741000000000000000ull, 742000000000000000ull,
+ 743000000000000000ull, 744000000000000000ull, 745000000000000000ull,
+ 746000000000000000ull, 747000000000000000ull, 748000000000000000ull,
+ 749000000000000000ull, 784000000000000000ull, 785000000000000000ull,
+ 946000000000000000ull, 947000000000000000ull, 788000000000000000ull,
+ 789000000000000000ull,
+ 750000000000000000ull, 751000000000000000ull, 752000000000000000ull,
+ 753000000000000000ull, 754000000000000000ull, 755000000000000000ull,
+ 756000000000000000ull, 757000000000000000ull, 758000000000000000ull,
+ 759000000000000000ull, 794000000000000000ull, 795000000000000000ull,
+ 956000000000000000ull, 957000000000000000ull, 798000000000000000ull,
+ 799000000000000000ull,
+ 760000000000000000ull, 761000000000000000ull, 762000000000000000ull,
+ 763000000000000000ull, 764000000000000000ull, 765000000000000000ull,
+ 766000000000000000ull, 767000000000000000ull, 768000000000000000ull,
+ 769000000000000000ull, 786000000000000000ull, 787000000000000000ull,
+ 966000000000000000ull, 967000000000000000ull, 988000000000000000ull,
+ 989000000000000000ull,
+ 770000000000000000ull, 771000000000000000ull, 772000000000000000ull,
+ 773000000000000000ull, 774000000000000000ull, 775000000000000000ull,
+ 776000000000000000ull, 777000000000000000ull, 778000000000000000ull,
+ 779000000000000000ull, 796000000000000000ull, 797000000000000000ull,
+ 976000000000000000ull, 977000000000000000ull, 998000000000000000ull,
+ 999000000000000000ull
+};
+
+const UINT64 b2d[] =
+ { 0x000ull, 0x001ull, 0x002ull, 0x003ull, 0x004ull, 0x005ull,
+ 0x006ull, 0x007ull, 0x008ull, 0x009ull,
+ 0x010ull, 0x011ull, 0x012ull, 0x013ull, 0x014ull, 0x015ull, 0x016ull,
+ 0x017ull, 0x018ull, 0x019ull,
+ 0x020ull, 0x021ull, 0x022ull, 0x023ull, 0x024ull, 0x025ull, 0x026ull,
+ 0x027ull, 0x028ull, 0x029ull,
+ 0x030ull, 0x031ull, 0x032ull, 0x033ull, 0x034ull, 0x035ull, 0x036ull,
+ 0x037ull, 0x038ull, 0x039ull,
+ 0x040ull, 0x041ull, 0x042ull, 0x043ull, 0x044ull, 0x045ull, 0x046ull,
+ 0x047ull, 0x048ull, 0x049ull,
+ 0x050ull, 0x051ull, 0x052ull, 0x053ull, 0x054ull, 0x055ull, 0x056ull,
+ 0x057ull, 0x058ull, 0x059ull,
+ 0x060ull, 0x061ull, 0x062ull, 0x063ull, 0x064ull, 0x065ull, 0x066ull,
+ 0x067ull, 0x068ull, 0x069ull,
+ 0x070ull, 0x071ull, 0x072ull, 0x073ull, 0x074ull, 0x075ull, 0x076ull,
+ 0x077ull, 0x078ull, 0x079ull,
+ 0x00aull, 0x00bull, 0x02aull, 0x02bull, 0x04aull, 0x04bull, 0x06aull,
+ 0x06bull, 0x04eull, 0x04full,
+ 0x01aull, 0x01bull, 0x03aull, 0x03bull, 0x05aull, 0x05bull, 0x07aull,
+ 0x07bull, 0x05eull, 0x05full,
+ 0x080ull, 0x081ull, 0x082ull, 0x083ull, 0x084ull, 0x085ull, 0x086ull,
+ 0x087ull, 0x088ull, 0x089ull,
+ 0x090ull, 0x091ull, 0x092ull, 0x093ull, 0x094ull, 0x095ull, 0x096ull,
+ 0x097ull, 0x098ull, 0x099ull,
+ 0x0a0ull, 0x0a1ull, 0x0a2ull, 0x0a3ull, 0x0a4ull, 0x0a5ull, 0x0a6ull,
+ 0x0a7ull, 0x0a8ull, 0x0a9ull,
+ 0x0b0ull, 0x0b1ull, 0x0b2ull, 0x0b3ull, 0x0b4ull, 0x0b5ull, 0x0b6ull,
+ 0x0b7ull, 0x0b8ull, 0x0b9ull,
+ 0x0c0ull, 0x0c1ull, 0x0c2ull, 0x0c3ull, 0x0c4ull, 0x0c5ull, 0x0c6ull,
+ 0x0c7ull, 0x0c8ull, 0x0c9ull,
+ 0x0d0ull, 0x0d1ull, 0x0d2ull, 0x0d3ull, 0x0d4ull, 0x0d5ull, 0x0d6ull,
+ 0x0d7ull, 0x0d8ull, 0x0d9ull,
+ 0x0e0ull, 0x0e1ull, 0x0e2ull, 0x0e3ull, 0x0e4ull, 0x0e5ull, 0x0e6ull,
+ 0x0e7ull, 0x0e8ull, 0x0e9ull,
+ 0x0f0ull, 0x0f1ull, 0x0f2ull, 0x0f3ull, 0x0f4ull, 0x0f5ull, 0x0f6ull,
+ 0x0f7ull, 0x0f8ull, 0x0f9ull,
+ 0x08aull, 0x08bull, 0x0aaull, 0x0abull, 0x0caull, 0x0cbull, 0x0eaull,
+ 0x0ebull, 0x0ceull, 0x0cfull,
+ 0x09aull, 0x09bull, 0x0baull, 0x0bbull, 0x0daull, 0x0dbull, 0x0faull,
+ 0x0fbull, 0x0deull, 0x0dfull,
+ 0x100ull, 0x101ull, 0x102ull, 0x103ull, 0x104ull, 0x105ull, 0x106ull,
+ 0x107ull, 0x108ull, 0x109ull,
+ 0x110ull, 0x111ull, 0x112ull, 0x113ull, 0x114ull, 0x115ull, 0x116ull,
+ 0x117ull, 0x118ull, 0x119ull,
+ 0x120ull, 0x121ull, 0x122ull, 0x123ull, 0x124ull, 0x125ull, 0x126ull,
+ 0x127ull, 0x128ull, 0x129ull,
+ 0x130ull, 0x131ull, 0x132ull, 0x133ull, 0x134ull, 0x135ull, 0x136ull,
+ 0x137ull, 0x138ull, 0x139ull,
+ 0x140ull, 0x141ull, 0x142ull, 0x143ull, 0x144ull, 0x145ull, 0x146ull,
+ 0x147ull, 0x148ull, 0x149ull,
+ 0x150ull, 0x151ull, 0x152ull, 0x153ull, 0x154ull, 0x155ull, 0x156ull,
+ 0x157ull, 0x158ull, 0x159ull,
+ 0x160ull, 0x161ull, 0x162ull, 0x163ull, 0x164ull, 0x165ull, 0x166ull,
+ 0x167ull, 0x168ull, 0x169ull,
+ 0x170ull, 0x171ull, 0x172ull, 0x173ull, 0x174ull, 0x175ull, 0x176ull,
+ 0x177ull, 0x178ull, 0x179ull,
+ 0x10aull, 0x10bull, 0x12aull, 0x12bull, 0x14aull, 0x14bull, 0x16aull,
+ 0x16bull, 0x14eull, 0x14full,
+ 0x11aull, 0x11bull, 0x13aull, 0x13bull, 0x15aull, 0x15bull, 0x17aull,
+ 0x17bull, 0x15eull, 0x15full,
+ 0x180ull, 0x181ull, 0x182ull, 0x183ull, 0x184ull, 0x185ull, 0x186ull,
+ 0x187ull, 0x188ull, 0x189ull,
+ 0x190ull, 0x191ull, 0x192ull, 0x193ull, 0x194ull, 0x195ull, 0x196ull,
+ 0x197ull, 0x198ull, 0x199ull,
+ 0x1a0ull, 0x1a1ull, 0x1a2ull, 0x1a3ull, 0x1a4ull, 0x1a5ull, 0x1a6ull,
+ 0x1a7ull, 0x1a8ull, 0x1a9ull,
+ 0x1b0ull, 0x1b1ull, 0x1b2ull, 0x1b3ull, 0x1b4ull, 0x1b5ull, 0x1b6ull,
+ 0x1b7ull, 0x1b8ull, 0x1b9ull,
+ 0x1c0ull, 0x1c1ull, 0x1c2ull, 0x1c3ull, 0x1c4ull, 0x1c5ull, 0x1c6ull,
+ 0x1c7ull, 0x1c8ull, 0x1c9ull,
+ 0x1d0ull, 0x1d1ull, 0x1d2ull, 0x1d3ull, 0x1d4ull, 0x1d5ull, 0x1d6ull,
+ 0x1d7ull, 0x1d8ull, 0x1d9ull,
+ 0x1e0ull, 0x1e1ull, 0x1e2ull, 0x1e3ull, 0x1e4ull, 0x1e5ull, 0x1e6ull,
+ 0x1e7ull, 0x1e8ull, 0x1e9ull,
+ 0x1f0ull, 0x1f1ull, 0x1f2ull, 0x1f3ull, 0x1f4ull, 0x1f5ull, 0x1f6ull,
+ 0x1f7ull, 0x1f8ull, 0x1f9ull,
+ 0x18aull, 0x18bull, 0x1aaull, 0x1abull, 0x1caull, 0x1cbull, 0x1eaull,
+ 0x1ebull, 0x1ceull, 0x1cfull,
+ 0x19aull, 0x19bull, 0x1baull, 0x1bbull, 0x1daull, 0x1dbull, 0x1faull,
+ 0x1fbull, 0x1deull, 0x1dfull,
+ 0x200ull, 0x201ull, 0x202ull, 0x203ull, 0x204ull, 0x205ull, 0x206ull,
+ 0x207ull, 0x208ull, 0x209ull,
+ 0x210ull, 0x211ull, 0x212ull, 0x213ull, 0x214ull, 0x215ull, 0x216ull,
+ 0x217ull, 0x218ull, 0x219ull,
+ 0x220ull, 0x221ull, 0x222ull, 0x223ull, 0x224ull, 0x225ull, 0x226ull,
+ 0x227ull, 0x228ull, 0x229ull,
+ 0x230ull, 0x231ull, 0x232ull, 0x233ull, 0x234ull, 0x235ull, 0x236ull,
+ 0x237ull, 0x238ull, 0x239ull,
+ 0x240ull, 0x241ull, 0x242ull, 0x243ull, 0x244ull, 0x245ull, 0x246ull,
+ 0x247ull, 0x248ull, 0x249ull,
+ 0x250ull, 0x251ull, 0x252ull, 0x253ull, 0x254ull, 0x255ull, 0x256ull,
+ 0x257ull, 0x258ull, 0x259ull,
+ 0x260ull, 0x261ull, 0x262ull, 0x263ull, 0x264ull, 0x265ull, 0x266ull,
+ 0x267ull, 0x268ull, 0x269ull,
+ 0x270ull, 0x271ull, 0x272ull, 0x273ull, 0x274ull, 0x275ull, 0x276ull,
+ 0x277ull, 0x278ull, 0x279ull,
+ 0x20aull, 0x20bull, 0x22aull, 0x22bull, 0x24aull, 0x24bull, 0x26aull,
+ 0x26bull, 0x24eull, 0x24full,
+ 0x21aull, 0x21bull, 0x23aull, 0x23bull, 0x25aull, 0x25bull, 0x27aull,
+ 0x27bull, 0x25eull, 0x25full,
+ 0x280ull, 0x281ull, 0x282ull, 0x283ull, 0x284ull, 0x285ull, 0x286ull,
+ 0x287ull, 0x288ull, 0x289ull,
+ 0x290ull, 0x291ull, 0x292ull, 0x293ull, 0x294ull, 0x295ull, 0x296ull,
+ 0x297ull, 0x298ull, 0x299ull,
+ 0x2a0ull, 0x2a1ull, 0x2a2ull, 0x2a3ull, 0x2a4ull, 0x2a5ull, 0x2a6ull,
+ 0x2a7ull, 0x2a8ull, 0x2a9ull,
+ 0x2b0ull, 0x2b1ull, 0x2b2ull, 0x2b3ull, 0x2b4ull, 0x2b5ull, 0x2b6ull,
+ 0x2b7ull, 0x2b8ull, 0x2b9ull,
+ 0x2c0ull, 0x2c1ull, 0x2c2ull, 0x2c3ull, 0x2c4ull, 0x2c5ull, 0x2c6ull,
+ 0x2c7ull, 0x2c8ull, 0x2c9ull,
+ 0x2d0ull, 0x2d1ull, 0x2d2ull, 0x2d3ull, 0x2d4ull, 0x2d5ull, 0x2d6ull,
+ 0x2d7ull, 0x2d8ull, 0x2d9ull,
+ 0x2e0ull, 0x2e1ull, 0x2e2ull, 0x2e3ull, 0x2e4ull, 0x2e5ull, 0x2e6ull,
+ 0x2e7ull, 0x2e8ull, 0x2e9ull,
+ 0x2f0ull, 0x2f1ull, 0x2f2ull, 0x2f3ull, 0x2f4ull, 0x2f5ull, 0x2f6ull,
+ 0x2f7ull, 0x2f8ull, 0x2f9ull,
+ 0x28aull, 0x28bull, 0x2aaull, 0x2abull, 0x2caull, 0x2cbull, 0x2eaull,
+ 0x2ebull, 0x2ceull, 0x2cfull,
+ 0x29aull, 0x29bull, 0x2baull, 0x2bbull, 0x2daull, 0x2dbull, 0x2faull,
+ 0x2fbull, 0x2deull, 0x2dfull,
+ 0x300ull, 0x301ull, 0x302ull, 0x303ull, 0x304ull, 0x305ull, 0x306ull,
+ 0x307ull, 0x308ull, 0x309ull,
+ 0x310ull, 0x311ull, 0x312ull, 0x313ull, 0x314ull, 0x315ull, 0x316ull,
+ 0x317ull, 0x318ull, 0x319ull,
+ 0x320ull, 0x321ull, 0x322ull, 0x323ull, 0x324ull, 0x325ull, 0x326ull,
+ 0x327ull, 0x328ull, 0x329ull,
+ 0x330ull, 0x331ull, 0x332ull, 0x333ull, 0x334ull, 0x335ull, 0x336ull,
+ 0x337ull, 0x338ull, 0x339ull,
+ 0x340ull, 0x341ull, 0x342ull, 0x343ull, 0x344ull, 0x345ull, 0x346ull,
+ 0x347ull, 0x348ull, 0x349ull,
+ 0x350ull, 0x351ull, 0x352ull, 0x353ull, 0x354ull, 0x355ull, 0x356ull,
+ 0x357ull, 0x358ull, 0x359ull,
+ 0x360ull, 0x361ull, 0x362ull, 0x363ull, 0x364ull, 0x365ull, 0x366ull,
+ 0x367ull, 0x368ull, 0x369ull,
+ 0x370ull, 0x371ull, 0x372ull, 0x373ull, 0x374ull, 0x375ull, 0x376ull,
+ 0x377ull, 0x378ull, 0x379ull,
+ 0x30aull, 0x30bull, 0x32aull, 0x32bull, 0x34aull, 0x34bull, 0x36aull,
+ 0x36bull, 0x34eull, 0x34full,
+ 0x31aull, 0x31bull, 0x33aull, 0x33bull, 0x35aull, 0x35bull, 0x37aull,
+ 0x37bull, 0x35eull, 0x35full,
+ 0x380ull, 0x381ull, 0x382ull, 0x383ull, 0x384ull, 0x385ull, 0x386ull,
+ 0x387ull, 0x388ull, 0x389ull,
+ 0x390ull, 0x391ull, 0x392ull, 0x393ull, 0x394ull, 0x395ull, 0x396ull,
+ 0x397ull, 0x398ull, 0x399ull,
+ 0x3a0ull, 0x3a1ull, 0x3a2ull, 0x3a3ull, 0x3a4ull, 0x3a5ull, 0x3a6ull,
+ 0x3a7ull, 0x3a8ull, 0x3a9ull,
+ 0x3b0ull, 0x3b1ull, 0x3b2ull, 0x3b3ull, 0x3b4ull, 0x3b5ull, 0x3b6ull,
+ 0x3b7ull, 0x3b8ull, 0x3b9ull,
+ 0x3c0ull, 0x3c1ull, 0x3c2ull, 0x3c3ull, 0x3c4ull, 0x3c5ull, 0x3c6ull,
+ 0x3c7ull, 0x3c8ull, 0x3c9ull,
+ 0x3d0ull, 0x3d1ull, 0x3d2ull, 0x3d3ull, 0x3d4ull, 0x3d5ull, 0x3d6ull,
+ 0x3d7ull, 0x3d8ull, 0x3d9ull,
+ 0x3e0ull, 0x3e1ull, 0x3e2ull, 0x3e3ull, 0x3e4ull, 0x3e5ull, 0x3e6ull,
+ 0x3e7ull, 0x3e8ull, 0x3e9ull,
+ 0x3f0ull, 0x3f1ull, 0x3f2ull, 0x3f3ull, 0x3f4ull, 0x3f5ull, 0x3f6ull,
+ 0x3f7ull, 0x3f8ull, 0x3f9ull,
+ 0x38aull, 0x38bull, 0x3aaull, 0x3abull, 0x3caull, 0x3cbull, 0x3eaull,
+ 0x3ebull, 0x3ceull, 0x3cfull,
+ 0x39aull, 0x39bull, 0x3baull, 0x3bbull, 0x3daull, 0x3dbull, 0x3faull,
+ 0x3fbull, 0x3deull, 0x3dfull,
+ 0x00cull, 0x00dull, 0x10cull, 0x10dull, 0x20cull, 0x20dull, 0x30cull,
+ 0x30dull, 0x02eull, 0x02full,
+ 0x01cull, 0x01dull, 0x11cull, 0x11dull, 0x21cull, 0x21dull, 0x31cull,
+ 0x31dull, 0x03eull, 0x03full,
+ 0x02cull, 0x02dull, 0x12cull, 0x12dull, 0x22cull, 0x22dull, 0x32cull,
+ 0x32dull, 0x12eull, 0x12full,
+ 0x03cull, 0x03dull, 0x13cull, 0x13dull, 0x23cull, 0x23dull, 0x33cull,
+ 0x33dull, 0x13eull, 0x13full,
+ 0x04cull, 0x04dull, 0x14cull, 0x14dull, 0x24cull, 0x24dull, 0x34cull,
+ 0x34dull, 0x22eull, 0x22full,
+ 0x05cull, 0x05dull, 0x15cull, 0x15dull, 0x25cull, 0x25dull, 0x35cull,
+ 0x35dull, 0x23eull, 0x23full,
+ 0x06cull, 0x06dull, 0x16cull, 0x16dull, 0x26cull, 0x26dull, 0x36cull,
+ 0x36dull, 0x32eull, 0x32full,
+ 0x07cull, 0x07dull, 0x17cull, 0x17dull, 0x27cull, 0x27dull, 0x37cull,
+ 0x37dull, 0x33eull, 0x33full,
+ 0x00eull, 0x00full, 0x10eull, 0x10full, 0x20eull, 0x20full, 0x30eull,
+ 0x30full, 0x06eull, 0x06full,
+ 0x01eull, 0x01full, 0x11eull, 0x11full, 0x21eull, 0x21full, 0x31eull,
+ 0x31full, 0x07eull, 0x07full,
+ 0x08cull, 0x08dull, 0x18cull, 0x18dull, 0x28cull, 0x28dull, 0x38cull,
+ 0x38dull, 0x0aeull, 0x0afull,
+ 0x09cull, 0x09dull, 0x19cull, 0x19dull, 0x29cull, 0x29dull, 0x39cull,
+ 0x39dull, 0x0beull, 0x0bfull,
+ 0x0acull, 0x0adull, 0x1acull, 0x1adull, 0x2acull, 0x2adull, 0x3acull,
+ 0x3adull, 0x1aeull, 0x1afull,
+ 0x0bcull, 0x0bdull, 0x1bcull, 0x1bdull, 0x2bcull, 0x2bdull, 0x3bcull,
+ 0x3bdull, 0x1beull, 0x1bfull,
+ 0x0ccull, 0x0cdull, 0x1ccull, 0x1cdull, 0x2ccull, 0x2cdull, 0x3ccull,
+ 0x3cdull, 0x2aeull, 0x2afull,
+ 0x0dcull, 0x0ddull, 0x1dcull, 0x1ddull, 0x2dcull, 0x2ddull, 0x3dcull,
+ 0x3ddull, 0x2beull, 0x2bfull,
+ 0x0ecull, 0x0edull, 0x1ecull, 0x1edull, 0x2ecull, 0x2edull, 0x3ecull,
+ 0x3edull, 0x3aeull, 0x3afull,
+ 0x0fcull, 0x0fdull, 0x1fcull, 0x1fdull, 0x2fcull, 0x2fdull, 0x3fcull,
+ 0x3fdull, 0x3beull, 0x3bfull,
+ 0x08eull, 0x08full, 0x18eull, 0x18full, 0x28eull, 0x28full, 0x38eull,
+ 0x38full, 0x0eeull, 0x0efull,
+ 0x09eull, 0x09full, 0x19eull, 0x19full, 0x29eull, 0x29full, 0x39eull,
+ 0x39full, 0x0feull, 0x0ffull
+};
+
+const UINT64 b2d2[] =
+ { 0x000ull << 10, 0x001ull << 10, 0x002ull << 10, 0x003ull << 10,
+ 0x004ull << 10, 0x005ull << 10, 0x006ull << 10, 0x007ull << 10,
+ 0x008ull << 10,
+ 0x009ull << 10,
+ 0x010ull << 10, 0x011ull << 10, 0x012ull << 10, 0x013ull << 10,
+ 0x014ull << 10, 0x015ull << 10, 0x016ull << 10, 0x017ull << 10,
+ 0x018ull << 10, 0x019ull << 10,
+ 0x020ull << 10, 0x021ull << 10, 0x022ull << 10, 0x023ull << 10,
+ 0x024ull << 10, 0x025ull << 10, 0x026ull << 10, 0x027ull << 10,
+ 0x028ull << 10, 0x029ull << 10,
+ 0x030ull << 10, 0x031ull << 10, 0x032ull << 10, 0x033ull << 10,
+ 0x034ull << 10, 0x035ull << 10, 0x036ull << 10, 0x037ull << 10,
+ 0x038ull << 10, 0x039ull << 10,
+ 0x040ull << 10, 0x041ull << 10, 0x042ull << 10, 0x043ull << 10,
+ 0x044ull << 10, 0x045ull << 10, 0x046ull << 10, 0x047ull << 10,
+ 0x048ull << 10, 0x049ull << 10,
+ 0x050ull << 10, 0x051ull << 10, 0x052ull << 10, 0x053ull << 10,
+ 0x054ull << 10, 0x055ull << 10, 0x056ull << 10, 0x057ull << 10,
+ 0x058ull << 10, 0x059ull << 10,
+ 0x060ull << 10, 0x061ull << 10, 0x062ull << 10, 0x063ull << 10,
+ 0x064ull << 10, 0x065ull << 10, 0x066ull << 10, 0x067ull << 10,
+ 0x068ull << 10, 0x069ull << 10,
+ 0x070ull << 10, 0x071ull << 10, 0x072ull << 10, 0x073ull << 10,
+ 0x074ull << 10, 0x075ull << 10, 0x076ull << 10, 0x077ull << 10,
+ 0x078ull << 10, 0x079ull << 10,
+ 0x00aull << 10, 0x00bull << 10, 0x02aull << 10, 0x02bull << 10,
+ 0x04aull << 10, 0x04bull << 10, 0x06aull << 10, 0x06bull << 10,
+ 0x04eull << 10, 0x04full << 10,
+ 0x01aull << 10, 0x01bull << 10, 0x03aull << 10, 0x03bull << 10,
+ 0x05aull << 10, 0x05bull << 10, 0x07aull << 10, 0x07bull << 10,
+ 0x05eull << 10, 0x05full << 10,
+ 0x080ull << 10, 0x081ull << 10, 0x082ull << 10, 0x083ull << 10,
+ 0x084ull << 10, 0x085ull << 10, 0x086ull << 10, 0x087ull << 10,
+ 0x088ull << 10, 0x089ull << 10,
+ 0x090ull << 10, 0x091ull << 10, 0x092ull << 10, 0x093ull << 10,
+ 0x094ull << 10, 0x095ull << 10, 0x096ull << 10, 0x097ull << 10,
+ 0x098ull << 10, 0x099ull << 10,
+ 0x0a0ull << 10, 0x0a1ull << 10, 0x0a2ull << 10, 0x0a3ull << 10,
+ 0x0a4ull << 10, 0x0a5ull << 10, 0x0a6ull << 10, 0x0a7ull << 10,
+ 0x0a8ull << 10, 0x0a9ull << 10,
+ 0x0b0ull << 10, 0x0b1ull << 10, 0x0b2ull << 10, 0x0b3ull << 10,
+ 0x0b4ull << 10, 0x0b5ull << 10, 0x0b6ull << 10, 0x0b7ull << 10,
+ 0x0b8ull << 10, 0x0b9ull << 10,
+ 0x0c0ull << 10, 0x0c1ull << 10, 0x0c2ull << 10, 0x0c3ull << 10,
+ 0x0c4ull << 10, 0x0c5ull << 10, 0x0c6ull << 10, 0x0c7ull << 10,
+ 0x0c8ull << 10, 0x0c9ull << 10,
+ 0x0d0ull << 10, 0x0d1ull << 10, 0x0d2ull << 10, 0x0d3ull << 10,
+ 0x0d4ull << 10, 0x0d5ull << 10, 0x0d6ull << 10, 0x0d7ull << 10,
+ 0x0d8ull << 10, 0x0d9ull << 10,
+ 0x0e0ull << 10, 0x0e1ull << 10, 0x0e2ull << 10, 0x0e3ull << 10,
+ 0x0e4ull << 10, 0x0e5ull << 10, 0x0e6ull << 10, 0x0e7ull << 10,
+ 0x0e8ull << 10, 0x0e9ull << 10,
+ 0x0f0ull << 10, 0x0f1ull << 10, 0x0f2ull << 10, 0x0f3ull << 10,
+ 0x0f4ull << 10, 0x0f5ull << 10, 0x0f6ull << 10, 0x0f7ull << 10,
+ 0x0f8ull << 10, 0x0f9ull << 10,
+ 0x08aull << 10, 0x08bull << 10, 0x0aaull << 10, 0x0abull << 10,
+ 0x0caull << 10, 0x0cbull << 10, 0x0eaull << 10, 0x0ebull << 10,
+ 0x0ceull << 10, 0x0cfull << 10,
+ 0x09aull << 10, 0x09bull << 10, 0x0baull << 10, 0x0bbull << 10,
+ 0x0daull << 10, 0x0dbull << 10, 0x0faull << 10, 0x0fbull << 10,
+ 0x0deull << 10, 0x0dfull << 10,
+ 0x100ull << 10, 0x101ull << 10, 0x102ull << 10, 0x103ull << 10,
+ 0x104ull << 10, 0x105ull << 10, 0x106ull << 10, 0x107ull << 10,
+ 0x108ull << 10, 0x109ull << 10,
+ 0x110ull << 10, 0x111ull << 10, 0x112ull << 10, 0x113ull << 10,
+ 0x114ull << 10, 0x115ull << 10, 0x116ull << 10, 0x117ull << 10,
+ 0x118ull << 10, 0x119ull << 10,
+ 0x120ull << 10, 0x121ull << 10, 0x122ull << 10, 0x123ull << 10,
+ 0x124ull << 10, 0x125ull << 10, 0x126ull << 10, 0x127ull << 10,
+ 0x128ull << 10, 0x129ull << 10,
+ 0x130ull << 10, 0x131ull << 10, 0x132ull << 10, 0x133ull << 10,
+ 0x134ull << 10, 0x135ull << 10, 0x136ull << 10, 0x137ull << 10,
+ 0x138ull << 10, 0x139ull << 10,
+ 0x140ull << 10, 0x141ull << 10, 0x142ull << 10, 0x143ull << 10,
+ 0x144ull << 10, 0x145ull << 10, 0x146ull << 10, 0x147ull << 10,
+ 0x148ull << 10, 0x149ull << 10,
+ 0x150ull << 10, 0x151ull << 10, 0x152ull << 10, 0x153ull << 10,
+ 0x154ull << 10, 0x155ull << 10, 0x156ull << 10, 0x157ull << 10,
+ 0x158ull << 10, 0x159ull << 10,
+ 0x160ull << 10, 0x161ull << 10, 0x162ull << 10, 0x163ull << 10,
+ 0x164ull << 10, 0x165ull << 10, 0x166ull << 10, 0x167ull << 10,
+ 0x168ull << 10, 0x169ull << 10,
+ 0x170ull << 10, 0x171ull << 10, 0x172ull << 10, 0x173ull << 10,
+ 0x174ull << 10, 0x175ull << 10, 0x176ull << 10, 0x177ull << 10,
+ 0x178ull << 10, 0x179ull << 10,
+ 0x10aull << 10, 0x10bull << 10, 0x12aull << 10, 0x12bull << 10,
+ 0x14aull << 10, 0x14bull << 10, 0x16aull << 10, 0x16bull << 10,
+ 0x14eull << 10, 0x14full << 10,
+ 0x11aull << 10, 0x11bull << 10, 0x13aull << 10, 0x13bull << 10,
+ 0x15aull << 10, 0x15bull << 10, 0x17aull << 10, 0x17bull << 10,
+ 0x15eull << 10, 0x15full << 10,
+ 0x180ull << 10, 0x181ull << 10, 0x182ull << 10, 0x183ull << 10,
+ 0x184ull << 10, 0x185ull << 10, 0x186ull << 10, 0x187ull << 10,
+ 0x188ull << 10, 0x189ull << 10,
+ 0x190ull << 10, 0x191ull << 10, 0x192ull << 10, 0x193ull << 10,
+ 0x194ull << 10, 0x195ull << 10, 0x196ull << 10, 0x197ull << 10,
+ 0x198ull << 10, 0x199ull << 10,
+ 0x1a0ull << 10, 0x1a1ull << 10, 0x1a2ull << 10, 0x1a3ull << 10,
+ 0x1a4ull << 10, 0x1a5ull << 10, 0x1a6ull << 10, 0x1a7ull << 10,
+ 0x1a8ull << 10, 0x1a9ull << 10,
+ 0x1b0ull << 10, 0x1b1ull << 10, 0x1b2ull << 10, 0x1b3ull << 10,
+ 0x1b4ull << 10, 0x1b5ull << 10, 0x1b6ull << 10, 0x1b7ull << 10,
+ 0x1b8ull << 10, 0x1b9ull << 10,
+ 0x1c0ull << 10, 0x1c1ull << 10, 0x1c2ull << 10, 0x1c3ull << 10,
+ 0x1c4ull << 10, 0x1c5ull << 10, 0x1c6ull << 10, 0x1c7ull << 10,
+ 0x1c8ull << 10, 0x1c9ull << 10,
+ 0x1d0ull << 10, 0x1d1ull << 10, 0x1d2ull << 10, 0x1d3ull << 10,
+ 0x1d4ull << 10, 0x1d5ull << 10, 0x1d6ull << 10, 0x1d7ull << 10,
+ 0x1d8ull << 10, 0x1d9ull << 10,
+ 0x1e0ull << 10, 0x1e1ull << 10, 0x1e2ull << 10, 0x1e3ull << 10,
+ 0x1e4ull << 10, 0x1e5ull << 10, 0x1e6ull << 10, 0x1e7ull << 10,
+ 0x1e8ull << 10, 0x1e9ull << 10,
+ 0x1f0ull << 10, 0x1f1ull << 10, 0x1f2ull << 10, 0x1f3ull << 10,
+ 0x1f4ull << 10, 0x1f5ull << 10, 0x1f6ull << 10, 0x1f7ull << 10,
+ 0x1f8ull << 10, 0x1f9ull << 10,
+ 0x18aull << 10, 0x18bull << 10, 0x1aaull << 10, 0x1abull << 10,
+ 0x1caull << 10, 0x1cbull << 10, 0x1eaull << 10, 0x1ebull << 10,
+ 0x1ceull << 10, 0x1cfull << 10,
+ 0x19aull << 10, 0x19bull << 10, 0x1baull << 10, 0x1bbull << 10,
+ 0x1daull << 10, 0x1dbull << 10, 0x1faull << 10, 0x1fbull << 10,
+ 0x1deull << 10, 0x1dfull << 10,
+ 0x200ull << 10, 0x201ull << 10, 0x202ull << 10, 0x203ull << 10,
+ 0x204ull << 10, 0x205ull << 10, 0x206ull << 10, 0x207ull << 10,
+ 0x208ull << 10, 0x209ull << 10,
+ 0x210ull << 10, 0x211ull << 10, 0x212ull << 10, 0x213ull << 10,
+ 0x214ull << 10, 0x215ull << 10, 0x216ull << 10, 0x217ull << 10,
+ 0x218ull << 10, 0x219ull << 10,
+ 0x220ull << 10, 0x221ull << 10, 0x222ull << 10, 0x223ull << 10,
+ 0x224ull << 10, 0x225ull << 10, 0x226ull << 10, 0x227ull << 10,
+ 0x228ull << 10, 0x229ull << 10,
+ 0x230ull << 10, 0x231ull << 10, 0x232ull << 10, 0x233ull << 10,
+ 0x234ull << 10, 0x235ull << 10, 0x236ull << 10, 0x237ull << 10,
+ 0x238ull << 10, 0x239ull << 10,
+ 0x240ull << 10, 0x241ull << 10, 0x242ull << 10, 0x243ull << 10,
+ 0x244ull << 10, 0x245ull << 10, 0x246ull << 10, 0x247ull << 10,
+ 0x248ull << 10, 0x249ull << 10,
+ 0x250ull << 10, 0x251ull << 10, 0x252ull << 10, 0x253ull << 10,
+ 0x254ull << 10, 0x255ull << 10, 0x256ull << 10, 0x257ull << 10,
+ 0x258ull << 10, 0x259ull << 10,
+ 0x260ull << 10, 0x261ull << 10, 0x262ull << 10, 0x263ull << 10,
+ 0x264ull << 10, 0x265ull << 10, 0x266ull << 10, 0x267ull << 10,
+ 0x268ull << 10, 0x269ull << 10,
+ 0x270ull << 10, 0x271ull << 10, 0x272ull << 10, 0x273ull << 10,
+ 0x274ull << 10, 0x275ull << 10, 0x276ull << 10, 0x277ull << 10,
+ 0x278ull << 10, 0x279ull << 10,
+ 0x20aull << 10, 0x20bull << 10, 0x22aull << 10, 0x22bull << 10,
+ 0x24aull << 10, 0x24bull << 10, 0x26aull << 10, 0x26bull << 10,
+ 0x24eull << 10, 0x24full << 10,
+ 0x21aull << 10, 0x21bull << 10, 0x23aull << 10, 0x23bull << 10,
+ 0x25aull << 10, 0x25bull << 10, 0x27aull << 10, 0x27bull << 10,
+ 0x25eull << 10, 0x25full << 10,
+ 0x280ull << 10, 0x281ull << 10, 0x282ull << 10, 0x283ull << 10,
+ 0x284ull << 10, 0x285ull << 10, 0x286ull << 10, 0x287ull << 10,
+ 0x288ull << 10, 0x289ull << 10,
+ 0x290ull << 10, 0x291ull << 10, 0x292ull << 10, 0x293ull << 10,
+ 0x294ull << 10, 0x295ull << 10, 0x296ull << 10, 0x297ull << 10,
+ 0x298ull << 10, 0x299ull << 10,
+ 0x2a0ull << 10, 0x2a1ull << 10, 0x2a2ull << 10, 0x2a3ull << 10,
+ 0x2a4ull << 10, 0x2a5ull << 10, 0x2a6ull << 10, 0x2a7ull << 10,
+ 0x2a8ull << 10, 0x2a9ull << 10,
+ 0x2b0ull << 10, 0x2b1ull << 10, 0x2b2ull << 10, 0x2b3ull << 10,
+ 0x2b4ull << 10, 0x2b5ull << 10, 0x2b6ull << 10, 0x2b7ull << 10,
+ 0x2b8ull << 10, 0x2b9ull << 10,
+ 0x2c0ull << 10, 0x2c1ull << 10, 0x2c2ull << 10, 0x2c3ull << 10,
+ 0x2c4ull << 10, 0x2c5ull << 10, 0x2c6ull << 10, 0x2c7ull << 10,
+ 0x2c8ull << 10, 0x2c9ull << 10,
+ 0x2d0ull << 10, 0x2d1ull << 10, 0x2d2ull << 10, 0x2d3ull << 10,
+ 0x2d4ull << 10, 0x2d5ull << 10, 0x2d6ull << 10, 0x2d7ull << 10,
+ 0x2d8ull << 10, 0x2d9ull << 10,
+ 0x2e0ull << 10, 0x2e1ull << 10, 0x2e2ull << 10, 0x2e3ull << 10,
+ 0x2e4ull << 10, 0x2e5ull << 10, 0x2e6ull << 10, 0x2e7ull << 10,
+ 0x2e8ull << 10, 0x2e9ull << 10,
+ 0x2f0ull << 10, 0x2f1ull << 10, 0x2f2ull << 10, 0x2f3ull << 10,
+ 0x2f4ull << 10, 0x2f5ull << 10, 0x2f6ull << 10, 0x2f7ull << 10,
+ 0x2f8ull << 10, 0x2f9ull << 10,
+ 0x28aull << 10, 0x28bull << 10, 0x2aaull << 10, 0x2abull << 10,
+ 0x2caull << 10, 0x2cbull << 10, 0x2eaull << 10, 0x2ebull << 10,
+ 0x2ceull << 10, 0x2cfull << 10,
+ 0x29aull << 10, 0x29bull << 10, 0x2baull << 10, 0x2bbull << 10,
+ 0x2daull << 10, 0x2dbull << 10, 0x2faull << 10, 0x2fbull << 10,
+ 0x2deull << 10, 0x2dfull << 10,
+ 0x300ull << 10, 0x301ull << 10, 0x302ull << 10, 0x303ull << 10,
+ 0x304ull << 10, 0x305ull << 10, 0x306ull << 10, 0x307ull << 10,
+ 0x308ull << 10, 0x309ull << 10,
+ 0x310ull << 10, 0x311ull << 10, 0x312ull << 10, 0x313ull << 10,
+ 0x314ull << 10, 0x315ull << 10, 0x316ull << 10, 0x317ull << 10,
+ 0x318ull << 10, 0x319ull << 10,
+ 0x320ull << 10, 0x321ull << 10, 0x322ull << 10, 0x323ull << 10,
+ 0x324ull << 10, 0x325ull << 10, 0x326ull << 10, 0x327ull << 10,
+ 0x328ull << 10, 0x329ull << 10,
+ 0x330ull << 10, 0x331ull << 10, 0x332ull << 10, 0x333ull << 10,
+ 0x334ull << 10, 0x335ull << 10, 0x336ull << 10, 0x337ull << 10,
+ 0x338ull << 10, 0x339ull << 10,
+ 0x340ull << 10, 0x341ull << 10, 0x342ull << 10, 0x343ull << 10,
+ 0x344ull << 10, 0x345ull << 10, 0x346ull << 10, 0x347ull << 10,
+ 0x348ull << 10, 0x349ull << 10,
+ 0x350ull << 10, 0x351ull << 10, 0x352ull << 10, 0x353ull << 10,
+ 0x354ull << 10, 0x355ull << 10, 0x356ull << 10, 0x357ull << 10,
+ 0x358ull << 10, 0x359ull << 10,
+ 0x360ull << 10, 0x361ull << 10, 0x362ull << 10, 0x363ull << 10,
+ 0x364ull << 10, 0x365ull << 10, 0x366ull << 10, 0x367ull << 10,
+ 0x368ull << 10, 0x369ull << 10,
+ 0x370ull << 10, 0x371ull << 10, 0x372ull << 10, 0x373ull << 10,
+ 0x374ull << 10, 0x375ull << 10, 0x376ull << 10, 0x377ull << 10,
+ 0x378ull << 10, 0x379ull << 10,
+ 0x30aull << 10, 0x30bull << 10, 0x32aull << 10, 0x32bull << 10,
+ 0x34aull << 10, 0x34bull << 10, 0x36aull << 10, 0x36bull << 10,
+ 0x34eull << 10, 0x34full << 10,
+ 0x31aull << 10, 0x31bull << 10, 0x33aull << 10, 0x33bull << 10,
+ 0x35aull << 10, 0x35bull << 10, 0x37aull << 10, 0x37bull << 10,
+ 0x35eull << 10, 0x35full << 10,
+ 0x380ull << 10, 0x381ull << 10, 0x382ull << 10, 0x383ull << 10,
+ 0x384ull << 10, 0x385ull << 10, 0x386ull << 10, 0x387ull << 10,
+ 0x388ull << 10, 0x389ull << 10,
+ 0x390ull << 10, 0x391ull << 10, 0x392ull << 10, 0x393ull << 10,
+ 0x394ull << 10, 0x395ull << 10, 0x396ull << 10, 0x397ull << 10,
+ 0x398ull << 10, 0x399ull << 10,
+ 0x3a0ull << 10, 0x3a1ull << 10, 0x3a2ull << 10, 0x3a3ull << 10,
+ 0x3a4ull << 10, 0x3a5ull << 10, 0x3a6ull << 10, 0x3a7ull << 10,
+ 0x3a8ull << 10, 0x3a9ull << 10,
+ 0x3b0ull << 10, 0x3b1ull << 10, 0x3b2ull << 10, 0x3b3ull << 10,
+ 0x3b4ull << 10, 0x3b5ull << 10, 0x3b6ull << 10, 0x3b7ull << 10,
+ 0x3b8ull << 10, 0x3b9ull << 10,
+ 0x3c0ull << 10, 0x3c1ull << 10, 0x3c2ull << 10, 0x3c3ull << 10,
+ 0x3c4ull << 10, 0x3c5ull << 10, 0x3c6ull << 10, 0x3c7ull << 10,
+ 0x3c8ull << 10, 0x3c9ull << 10,
+ 0x3d0ull << 10, 0x3d1ull << 10, 0x3d2ull << 10, 0x3d3ull << 10,
+ 0x3d4ull << 10, 0x3d5ull << 10, 0x3d6ull << 10, 0x3d7ull << 10,
+ 0x3d8ull << 10, 0x3d9ull << 10,
+ 0x3e0ull << 10, 0x3e1ull << 10, 0x3e2ull << 10, 0x3e3ull << 10,
+ 0x3e4ull << 10, 0x3e5ull << 10, 0x3e6ull << 10, 0x3e7ull << 10,
+ 0x3e8ull << 10, 0x3e9ull << 10,
+ 0x3f0ull << 10, 0x3f1ull << 10, 0x3f2ull << 10, 0x3f3ull << 10,
+ 0x3f4ull << 10, 0x3f5ull << 10, 0x3f6ull << 10, 0x3f7ull << 10,
+ 0x3f8ull << 10, 0x3f9ull << 10,
+ 0x38aull << 10, 0x38bull << 10, 0x3aaull << 10, 0x3abull << 10,
+ 0x3caull << 10, 0x3cbull << 10, 0x3eaull << 10, 0x3ebull << 10,
+ 0x3ceull << 10, 0x3cfull << 10,
+ 0x39aull << 10, 0x39bull << 10, 0x3baull << 10, 0x3bbull << 10,
+ 0x3daull << 10, 0x3dbull << 10, 0x3faull << 10, 0x3fbull << 10,
+ 0x3deull << 10, 0x3dfull << 10,
+ 0x00cull << 10, 0x00dull << 10, 0x10cull << 10, 0x10dull << 10,
+ 0x20cull << 10, 0x20dull << 10, 0x30cull << 10, 0x30dull << 10,
+ 0x02eull << 10, 0x02full << 10,
+ 0x01cull << 10, 0x01dull << 10, 0x11cull << 10, 0x11dull << 10,
+ 0x21cull << 10, 0x21dull << 10, 0x31cull << 10, 0x31dull << 10,
+ 0x03eull << 10, 0x03full << 10,
+ 0x02cull << 10, 0x02dull << 10, 0x12cull << 10, 0x12dull << 10,
+ 0x22cull << 10, 0x22dull << 10, 0x32cull << 10, 0x32dull << 10,
+ 0x12eull << 10, 0x12full << 10,
+ 0x03cull << 10, 0x03dull << 10, 0x13cull << 10, 0x13dull << 10,
+ 0x23cull << 10, 0x23dull << 10, 0x33cull << 10, 0x33dull << 10,
+ 0x13eull << 10, 0x13full << 10,
+ 0x04cull << 10, 0x04dull << 10, 0x14cull << 10, 0x14dull << 10,
+ 0x24cull << 10, 0x24dull << 10, 0x34cull << 10, 0x34dull << 10,
+ 0x22eull << 10, 0x22full << 10,
+ 0x05cull << 10, 0x05dull << 10, 0x15cull << 10, 0x15dull << 10,
+ 0x25cull << 10, 0x25dull << 10, 0x35cull << 10, 0x35dull << 10,
+ 0x23eull << 10, 0x23full << 10,
+ 0x06cull << 10, 0x06dull << 10, 0x16cull << 10, 0x16dull << 10,
+ 0x26cull << 10, 0x26dull << 10, 0x36cull << 10, 0x36dull << 10,
+ 0x32eull << 10, 0x32full << 10,
+ 0x07cull << 10, 0x07dull << 10, 0x17cull << 10, 0x17dull << 10,
+ 0x27cull << 10, 0x27dull << 10, 0x37cull << 10, 0x37dull << 10,
+ 0x33eull << 10, 0x33full << 10,
+ 0x00eull << 10, 0x00full << 10, 0x10eull << 10, 0x10full << 10,
+ 0x20eull << 10, 0x20full << 10, 0x30eull << 10, 0x30full << 10,
+ 0x06eull << 10, 0x06full << 10,
+ 0x01eull << 10, 0x01full << 10, 0x11eull << 10, 0x11full << 10,
+ 0x21eull << 10, 0x21full << 10, 0x31eull << 10, 0x31full << 10,
+ 0x07eull << 10, 0x07full << 10,
+ 0x08cull << 10, 0x08dull << 10, 0x18cull << 10, 0x18dull << 10,
+ 0x28cull << 10, 0x28dull << 10, 0x38cull << 10, 0x38dull << 10,
+ 0x0aeull << 10, 0x0afull << 10,
+ 0x09cull << 10, 0x09dull << 10, 0x19cull << 10, 0x19dull << 10,
+ 0x29cull << 10, 0x29dull << 10, 0x39cull << 10, 0x39dull << 10,
+ 0x0beull << 10, 0x0bfull << 10,
+ 0x0acull << 10, 0x0adull << 10, 0x1acull << 10, 0x1adull << 10,
+ 0x2acull << 10, 0x2adull << 10, 0x3acull << 10, 0x3adull << 10,
+ 0x1aeull << 10, 0x1afull << 10,
+ 0x0bcull << 10, 0x0bdull << 10, 0x1bcull << 10, 0x1bdull << 10,
+ 0x2bcull << 10, 0x2bdull << 10, 0x3bcull << 10, 0x3bdull << 10,
+ 0x1beull << 10, 0x1bfull << 10,
+ 0x0ccull << 10, 0x0cdull << 10, 0x1ccull << 10, 0x1cdull << 10,
+ 0x2ccull << 10, 0x2cdull << 10, 0x3ccull << 10, 0x3cdull << 10,
+ 0x2aeull << 10, 0x2afull << 10,
+ 0x0dcull << 10, 0x0ddull << 10, 0x1dcull << 10, 0x1ddull << 10,
+ 0x2dcull << 10, 0x2ddull << 10, 0x3dcull << 10, 0x3ddull << 10,
+ 0x2beull << 10, 0x2bfull << 10,
+ 0x0ecull << 10, 0x0edull << 10, 0x1ecull << 10, 0x1edull << 10,
+ 0x2ecull << 10, 0x2edull << 10, 0x3ecull << 10, 0x3edull << 10,
+ 0x3aeull << 10, 0x3afull << 10,
+ 0x0fcull << 10, 0x0fdull << 10, 0x1fcull << 10, 0x1fdull << 10,
+ 0x2fcull << 10, 0x2fdull << 10, 0x3fcull << 10, 0x3fdull << 10,
+ 0x3beull << 10, 0x3bfull << 10,
+ 0x08eull << 10, 0x08full << 10, 0x18eull << 10, 0x18full << 10,
+ 0x28eull << 10, 0x28full << 10, 0x38eull << 10, 0x38full << 10,
+ 0x0eeull << 10, 0x0efull << 10,
+ 0x09eull << 10, 0x09full << 10, 0x19eull << 10, 0x19full << 10,
+ 0x29eull << 10, 0x29full << 10, 0x39eull << 10, 0x39full << 10,
+ 0x0feull << 10, 0x0ffull << 10
+};
+
+const UINT64 b2d3[] =
+ { 0x000ull << 20, 0x001ull << 20, 0x002ull << 20, 0x003ull << 20,
+ 0x004ull << 20, 0x005ull << 20, 0x006ull << 20, 0x007ull << 20,
+ 0x008ull << 20,
+ 0x009ull << 20,
+ 0x010ull << 20, 0x011ull << 20, 0x012ull << 20, 0x013ull << 20,
+ 0x014ull << 20, 0x015ull << 20, 0x016ull << 20, 0x017ull << 20,
+ 0x018ull << 20, 0x019ull << 20,
+ 0x020ull << 20, 0x021ull << 20, 0x022ull << 20, 0x023ull << 20,
+ 0x024ull << 20, 0x025ull << 20, 0x026ull << 20, 0x027ull << 20,
+ 0x028ull << 20, 0x029ull << 20,
+ 0x030ull << 20, 0x031ull << 20, 0x032ull << 20, 0x033ull << 20,
+ 0x034ull << 20, 0x035ull << 20, 0x036ull << 20, 0x037ull << 20,
+ 0x038ull << 20, 0x039ull << 20,
+ 0x040ull << 20, 0x041ull << 20, 0x042ull << 20, 0x043ull << 20,
+ 0x044ull << 20, 0x045ull << 20, 0x046ull << 20, 0x047ull << 20,
+ 0x048ull << 20, 0x049ull << 20,
+ 0x050ull << 20, 0x051ull << 20, 0x052ull << 20, 0x053ull << 20,
+ 0x054ull << 20, 0x055ull << 20, 0x056ull << 20, 0x057ull << 20,
+ 0x058ull << 20, 0x059ull << 20,
+ 0x060ull << 20, 0x061ull << 20, 0x062ull << 20, 0x063ull << 20,
+ 0x064ull << 20, 0x065ull << 20, 0x066ull << 20, 0x067ull << 20,
+ 0x068ull << 20, 0x069ull << 20,
+ 0x070ull << 20, 0x071ull << 20, 0x072ull << 20, 0x073ull << 20,
+ 0x074ull << 20, 0x075ull << 20, 0x076ull << 20, 0x077ull << 20,
+ 0x078ull << 20, 0x079ull << 20,
+ 0x00aull << 20, 0x00bull << 20, 0x02aull << 20, 0x02bull << 20,
+ 0x04aull << 20, 0x04bull << 20, 0x06aull << 20, 0x06bull << 20,
+ 0x04eull << 20, 0x04full << 20,
+ 0x01aull << 20, 0x01bull << 20, 0x03aull << 20, 0x03bull << 20,
+ 0x05aull << 20, 0x05bull << 20, 0x07aull << 20, 0x07bull << 20,
+ 0x05eull << 20, 0x05full << 20,
+ 0x080ull << 20, 0x081ull << 20, 0x082ull << 20, 0x083ull << 20,
+ 0x084ull << 20, 0x085ull << 20, 0x086ull << 20, 0x087ull << 20,
+ 0x088ull << 20, 0x089ull << 20,
+ 0x090ull << 20, 0x091ull << 20, 0x092ull << 20, 0x093ull << 20,
+ 0x094ull << 20, 0x095ull << 20, 0x096ull << 20, 0x097ull << 20,
+ 0x098ull << 20, 0x099ull << 20,
+ 0x0a0ull << 20, 0x0a1ull << 20, 0x0a2ull << 20, 0x0a3ull << 20,
+ 0x0a4ull << 20, 0x0a5ull << 20, 0x0a6ull << 20, 0x0a7ull << 20,
+ 0x0a8ull << 20, 0x0a9ull << 20,
+ 0x0b0ull << 20, 0x0b1ull << 20, 0x0b2ull << 20, 0x0b3ull << 20,
+ 0x0b4ull << 20, 0x0b5ull << 20, 0x0b6ull << 20, 0x0b7ull << 20,
+ 0x0b8ull << 20, 0x0b9ull << 20,
+ 0x0c0ull << 20, 0x0c1ull << 20, 0x0c2ull << 20, 0x0c3ull << 20,
+ 0x0c4ull << 20, 0x0c5ull << 20, 0x0c6ull << 20, 0x0c7ull << 20,
+ 0x0c8ull << 20, 0x0c9ull << 20,
+ 0x0d0ull << 20, 0x0d1ull << 20, 0x0d2ull << 20, 0x0d3ull << 20,
+ 0x0d4ull << 20, 0x0d5ull << 20, 0x0d6ull << 20, 0x0d7ull << 20,
+ 0x0d8ull << 20, 0x0d9ull << 20,
+ 0x0e0ull << 20, 0x0e1ull << 20, 0x0e2ull << 20, 0x0e3ull << 20,
+ 0x0e4ull << 20, 0x0e5ull << 20, 0x0e6ull << 20, 0x0e7ull << 20,
+ 0x0e8ull << 20, 0x0e9ull << 20,
+ 0x0f0ull << 20, 0x0f1ull << 20, 0x0f2ull << 20, 0x0f3ull << 20,
+ 0x0f4ull << 20, 0x0f5ull << 20, 0x0f6ull << 20, 0x0f7ull << 20,
+ 0x0f8ull << 20, 0x0f9ull << 20,
+ 0x08aull << 20, 0x08bull << 20, 0x0aaull << 20, 0x0abull << 20,
+ 0x0caull << 20, 0x0cbull << 20, 0x0eaull << 20, 0x0ebull << 20,
+ 0x0ceull << 20, 0x0cfull << 20,
+ 0x09aull << 20, 0x09bull << 20, 0x0baull << 20, 0x0bbull << 20,
+ 0x0daull << 20, 0x0dbull << 20, 0x0faull << 20, 0x0fbull << 20,
+ 0x0deull << 20, 0x0dfull << 20,
+ 0x100ull << 20, 0x101ull << 20, 0x102ull << 20, 0x103ull << 20,
+ 0x104ull << 20, 0x105ull << 20, 0x106ull << 20, 0x107ull << 20,
+ 0x108ull << 20, 0x109ull << 20,
+ 0x110ull << 20, 0x111ull << 20, 0x112ull << 20, 0x113ull << 20,
+ 0x114ull << 20, 0x115ull << 20, 0x116ull << 20, 0x117ull << 20,
+ 0x118ull << 20, 0x119ull << 20,
+ 0x120ull << 20, 0x121ull << 20, 0x122ull << 20, 0x123ull << 20,
+ 0x124ull << 20, 0x125ull << 20, 0x126ull << 20, 0x127ull << 20,
+ 0x128ull << 20, 0x129ull << 20,
+ 0x130ull << 20, 0x131ull << 20, 0x132ull << 20, 0x133ull << 20,
+ 0x134ull << 20, 0x135ull << 20, 0x136ull << 20, 0x137ull << 20,
+ 0x138ull << 20, 0x139ull << 20,
+ 0x140ull << 20, 0x141ull << 20, 0x142ull << 20, 0x143ull << 20,
+ 0x144ull << 20, 0x145ull << 20, 0x146ull << 20, 0x147ull << 20,
+ 0x148ull << 20, 0x149ull << 20,
+ 0x150ull << 20, 0x151ull << 20, 0x152ull << 20, 0x153ull << 20,
+ 0x154ull << 20, 0x155ull << 20, 0x156ull << 20, 0x157ull << 20,
+ 0x158ull << 20, 0x159ull << 20,
+ 0x160ull << 20, 0x161ull << 20, 0x162ull << 20, 0x163ull << 20,
+ 0x164ull << 20, 0x165ull << 20, 0x166ull << 20, 0x167ull << 20,
+ 0x168ull << 20, 0x169ull << 20,
+ 0x170ull << 20, 0x171ull << 20, 0x172ull << 20, 0x173ull << 20,
+ 0x174ull << 20, 0x175ull << 20, 0x176ull << 20, 0x177ull << 20,
+ 0x178ull << 20, 0x179ull << 20,
+ 0x10aull << 20, 0x10bull << 20, 0x12aull << 20, 0x12bull << 20,
+ 0x14aull << 20, 0x14bull << 20, 0x16aull << 20, 0x16bull << 20,
+ 0x14eull << 20, 0x14full << 20,
+ 0x11aull << 20, 0x11bull << 20, 0x13aull << 20, 0x13bull << 20,
+ 0x15aull << 20, 0x15bull << 20, 0x17aull << 20, 0x17bull << 20,
+ 0x15eull << 20, 0x15full << 20,
+ 0x180ull << 20, 0x181ull << 20, 0x182ull << 20, 0x183ull << 20,
+ 0x184ull << 20, 0x185ull << 20, 0x186ull << 20, 0x187ull << 20,
+ 0x188ull << 20, 0x189ull << 20,
+ 0x190ull << 20, 0x191ull << 20, 0x192ull << 20, 0x193ull << 20,
+ 0x194ull << 20, 0x195ull << 20, 0x196ull << 20, 0x197ull << 20,
+ 0x198ull << 20, 0x199ull << 20,
+ 0x1a0ull << 20, 0x1a1ull << 20, 0x1a2ull << 20, 0x1a3ull << 20,
+ 0x1a4ull << 20, 0x1a5ull << 20, 0x1a6ull << 20, 0x1a7ull << 20,
+ 0x1a8ull << 20, 0x1a9ull << 20,
+ 0x1b0ull << 20, 0x1b1ull << 20, 0x1b2ull << 20, 0x1b3ull << 20,
+ 0x1b4ull << 20, 0x1b5ull << 20, 0x1b6ull << 20, 0x1b7ull << 20,
+ 0x1b8ull << 20, 0x1b9ull << 20,
+ 0x1c0ull << 20, 0x1c1ull << 20, 0x1c2ull << 20, 0x1c3ull << 20,
+ 0x1c4ull << 20, 0x1c5ull << 20, 0x1c6ull << 20, 0x1c7ull << 20,
+ 0x1c8ull << 20, 0x1c9ull << 20,
+ 0x1d0ull << 20, 0x1d1ull << 20, 0x1d2ull << 20, 0x1d3ull << 20,
+ 0x1d4ull << 20, 0x1d5ull << 20, 0x1d6ull << 20, 0x1d7ull << 20,
+ 0x1d8ull << 20, 0x1d9ull << 20,
+ 0x1e0ull << 20, 0x1e1ull << 20, 0x1e2ull << 20, 0x1e3ull << 20,
+ 0x1e4ull << 20, 0x1e5ull << 20, 0x1e6ull << 20, 0x1e7ull << 20,
+ 0x1e8ull << 20, 0x1e9ull << 20,
+ 0x1f0ull << 20, 0x1f1ull << 20, 0x1f2ull << 20, 0x1f3ull << 20,
+ 0x1f4ull << 20, 0x1f5ull << 20, 0x1f6ull << 20, 0x1f7ull << 20,
+ 0x1f8ull << 20, 0x1f9ull << 20,
+ 0x18aull << 20, 0x18bull << 20, 0x1aaull << 20, 0x1abull << 20,
+ 0x1caull << 20, 0x1cbull << 20, 0x1eaull << 20, 0x1ebull << 20,
+ 0x1ceull << 20, 0x1cfull << 20,
+ 0x19aull << 20, 0x19bull << 20, 0x1baull << 20, 0x1bbull << 20,
+ 0x1daull << 20, 0x1dbull << 20, 0x1faull << 20, 0x1fbull << 20,
+ 0x1deull << 20, 0x1dfull << 20,
+ 0x200ull << 20, 0x201ull << 20, 0x202ull << 20, 0x203ull << 20,
+ 0x204ull << 20, 0x205ull << 20, 0x206ull << 20, 0x207ull << 20,
+ 0x208ull << 20, 0x209ull << 20,
+ 0x210ull << 20, 0x211ull << 20, 0x212ull << 20, 0x213ull << 20,
+ 0x214ull << 20, 0x215ull << 20, 0x216ull << 20, 0x217ull << 20,
+ 0x218ull << 20, 0x219ull << 20,
+ 0x220ull << 20, 0x221ull << 20, 0x222ull << 20, 0x223ull << 20,
+ 0x224ull << 20, 0x225ull << 20, 0x226ull << 20, 0x227ull << 20,
+ 0x228ull << 20, 0x229ull << 20,
+ 0x230ull << 20, 0x231ull << 20, 0x232ull << 20, 0x233ull << 20,
+ 0x234ull << 20, 0x235ull << 20, 0x236ull << 20, 0x237ull << 20,
+ 0x238ull << 20, 0x239ull << 20,
+ 0x240ull << 20, 0x241ull << 20, 0x242ull << 20, 0x243ull << 20,
+ 0x244ull << 20, 0x245ull << 20, 0x246ull << 20, 0x247ull << 20,
+ 0x248ull << 20, 0x249ull << 20,
+ 0x250ull << 20, 0x251ull << 20, 0x252ull << 20, 0x253ull << 20,
+ 0x254ull << 20, 0x255ull << 20, 0x256ull << 20, 0x257ull << 20,
+ 0x258ull << 20, 0x259ull << 20,
+ 0x260ull << 20, 0x261ull << 20, 0x262ull << 20, 0x263ull << 20,
+ 0x264ull << 20, 0x265ull << 20, 0x266ull << 20, 0x267ull << 20,
+ 0x268ull << 20, 0x269ull << 20,
+ 0x270ull << 20, 0x271ull << 20, 0x272ull << 20, 0x273ull << 20,
+ 0x274ull << 20, 0x275ull << 20, 0x276ull << 20, 0x277ull << 20,
+ 0x278ull << 20, 0x279ull << 20,
+ 0x20aull << 20, 0x20bull << 20, 0x22aull << 20, 0x22bull << 20,
+ 0x24aull << 20, 0x24bull << 20, 0x26aull << 20, 0x26bull << 20,
+ 0x24eull << 20, 0x24full << 20,
+ 0x21aull << 20, 0x21bull << 20, 0x23aull << 20, 0x23bull << 20,
+ 0x25aull << 20, 0x25bull << 20, 0x27aull << 20, 0x27bull << 20,
+ 0x25eull << 20, 0x25full << 20,
+ 0x280ull << 20, 0x281ull << 20, 0x282ull << 20, 0x283ull << 20,
+ 0x284ull << 20, 0x285ull << 20, 0x286ull << 20, 0x287ull << 20,
+ 0x288ull << 20, 0x289ull << 20,
+ 0x290ull << 20, 0x291ull << 20, 0x292ull << 20, 0x293ull << 20,
+ 0x294ull << 20, 0x295ull << 20, 0x296ull << 20, 0x297ull << 20,
+ 0x298ull << 20, 0x299ull << 20,
+ 0x2a0ull << 20, 0x2a1ull << 20, 0x2a2ull << 20, 0x2a3ull << 20,
+ 0x2a4ull << 20, 0x2a5ull << 20, 0x2a6ull << 20, 0x2a7ull << 20,
+ 0x2a8ull << 20, 0x2a9ull << 20,
+ 0x2b0ull << 20, 0x2b1ull << 20, 0x2b2ull << 20, 0x2b3ull << 20,
+ 0x2b4ull << 20, 0x2b5ull << 20, 0x2b6ull << 20, 0x2b7ull << 20,
+ 0x2b8ull << 20, 0x2b9ull << 20,
+ 0x2c0ull << 20, 0x2c1ull << 20, 0x2c2ull << 20, 0x2c3ull << 20,
+ 0x2c4ull << 20, 0x2c5ull << 20, 0x2c6ull << 20, 0x2c7ull << 20,
+ 0x2c8ull << 20, 0x2c9ull << 20,
+ 0x2d0ull << 20, 0x2d1ull << 20, 0x2d2ull << 20, 0x2d3ull << 20,
+ 0x2d4ull << 20, 0x2d5ull << 20, 0x2d6ull << 20, 0x2d7ull << 20,
+ 0x2d8ull << 20, 0x2d9ull << 20,
+ 0x2e0ull << 20, 0x2e1ull << 20, 0x2e2ull << 20, 0x2e3ull << 20,
+ 0x2e4ull << 20, 0x2e5ull << 20, 0x2e6ull << 20, 0x2e7ull << 20,
+ 0x2e8ull << 20, 0x2e9ull << 20,
+ 0x2f0ull << 20, 0x2f1ull << 20, 0x2f2ull << 20, 0x2f3ull << 20,
+ 0x2f4ull << 20, 0x2f5ull << 20, 0x2f6ull << 20, 0x2f7ull << 20,
+ 0x2f8ull << 20, 0x2f9ull << 20,
+ 0x28aull << 20, 0x28bull << 20, 0x2aaull << 20, 0x2abull << 20,
+ 0x2caull << 20, 0x2cbull << 20, 0x2eaull << 20, 0x2ebull << 20,
+ 0x2ceull << 20, 0x2cfull << 20,
+ 0x29aull << 20, 0x29bull << 20, 0x2baull << 20, 0x2bbull << 20,
+ 0x2daull << 20, 0x2dbull << 20, 0x2faull << 20, 0x2fbull << 20,
+ 0x2deull << 20, 0x2dfull << 20,
+ 0x300ull << 20, 0x301ull << 20, 0x302ull << 20, 0x303ull << 20,
+ 0x304ull << 20, 0x305ull << 20, 0x306ull << 20, 0x307ull << 20,
+ 0x308ull << 20, 0x309ull << 20,
+ 0x310ull << 20, 0x311ull << 20, 0x312ull << 20, 0x313ull << 20,
+ 0x314ull << 20, 0x315ull << 20, 0x316ull << 20, 0x317ull << 20,
+ 0x318ull << 20, 0x319ull << 20,
+ 0x320ull << 20, 0x321ull << 20, 0x322ull << 20, 0x323ull << 20,
+ 0x324ull << 20, 0x325ull << 20, 0x326ull << 20, 0x327ull << 20,
+ 0x328ull << 20, 0x329ull << 20,
+ 0x330ull << 20, 0x331ull << 20, 0x332ull << 20, 0x333ull << 20,
+ 0x334ull << 20, 0x335ull << 20, 0x336ull << 20, 0x337ull << 20,
+ 0x338ull << 20, 0x339ull << 20,
+ 0x340ull << 20, 0x341ull << 20, 0x342ull << 20, 0x343ull << 20,
+ 0x344ull << 20, 0x345ull << 20, 0x346ull << 20, 0x347ull << 20,
+ 0x348ull << 20, 0x349ull << 20,
+ 0x350ull << 20, 0x351ull << 20, 0x352ull << 20, 0x353ull << 20,
+ 0x354ull << 20, 0x355ull << 20, 0x356ull << 20, 0x357ull << 20,
+ 0x358ull << 20, 0x359ull << 20,
+ 0x360ull << 20, 0x361ull << 20, 0x362ull << 20, 0x363ull << 20,
+ 0x364ull << 20, 0x365ull << 20, 0x366ull << 20, 0x367ull << 20,
+ 0x368ull << 20, 0x369ull << 20,
+ 0x370ull << 20, 0x371ull << 20, 0x372ull << 20, 0x373ull << 20,
+ 0x374ull << 20, 0x375ull << 20, 0x376ull << 20, 0x377ull << 20,
+ 0x378ull << 20, 0x379ull << 20,
+ 0x30aull << 20, 0x30bull << 20, 0x32aull << 20, 0x32bull << 20,
+ 0x34aull << 20, 0x34bull << 20, 0x36aull << 20, 0x36bull << 20,
+ 0x34eull << 20, 0x34full << 20,
+ 0x31aull << 20, 0x31bull << 20, 0x33aull << 20, 0x33bull << 20,
+ 0x35aull << 20, 0x35bull << 20, 0x37aull << 20, 0x37bull << 20,
+ 0x35eull << 20, 0x35full << 20,
+ 0x380ull << 20, 0x381ull << 20, 0x382ull << 20, 0x383ull << 20,
+ 0x384ull << 20, 0x385ull << 20, 0x386ull << 20, 0x387ull << 20,
+ 0x388ull << 20, 0x389ull << 20,
+ 0x390ull << 20, 0x391ull << 20, 0x392ull << 20, 0x393ull << 20,
+ 0x394ull << 20, 0x395ull << 20, 0x396ull << 20, 0x397ull << 20,
+ 0x398ull << 20, 0x399ull << 20,
+ 0x3a0ull << 20, 0x3a1ull << 20, 0x3a2ull << 20, 0x3a3ull << 20,
+ 0x3a4ull << 20, 0x3a5ull << 20, 0x3a6ull << 20, 0x3a7ull << 20,
+ 0x3a8ull << 20, 0x3a9ull << 20,
+ 0x3b0ull << 20, 0x3b1ull << 20, 0x3b2ull << 20, 0x3b3ull << 20,
+ 0x3b4ull << 20, 0x3b5ull << 20, 0x3b6ull << 20, 0x3b7ull << 20,
+ 0x3b8ull << 20, 0x3b9ull << 20,
+ 0x3c0ull << 20, 0x3c1ull << 20, 0x3c2ull << 20, 0x3c3ull << 20,
+ 0x3c4ull << 20, 0x3c5ull << 20, 0x3c6ull << 20, 0x3c7ull << 20,
+ 0x3c8ull << 20, 0x3c9ull << 20,
+ 0x3d0ull << 20, 0x3d1ull << 20, 0x3d2ull << 20, 0x3d3ull << 20,
+ 0x3d4ull << 20, 0x3d5ull << 20, 0x3d6ull << 20, 0x3d7ull << 20,
+ 0x3d8ull << 20, 0x3d9ull << 20,
+ 0x3e0ull << 20, 0x3e1ull << 20, 0x3e2ull << 20, 0x3e3ull << 20,
+ 0x3e4ull << 20, 0x3e5ull << 20, 0x3e6ull << 20, 0x3e7ull << 20,
+ 0x3e8ull << 20, 0x3e9ull << 20,
+ 0x3f0ull << 20, 0x3f1ull << 20, 0x3f2ull << 20, 0x3f3ull << 20,
+ 0x3f4ull << 20, 0x3f5ull << 20, 0x3f6ull << 20, 0x3f7ull << 20,
+ 0x3f8ull << 20, 0x3f9ull << 20,
+ 0x38aull << 20, 0x38bull << 20, 0x3aaull << 20, 0x3abull << 20,
+ 0x3caull << 20, 0x3cbull << 20, 0x3eaull << 20, 0x3ebull << 20,
+ 0x3ceull << 20, 0x3cfull << 20,
+ 0x39aull << 20, 0x39bull << 20, 0x3baull << 20, 0x3bbull << 20,
+ 0x3daull << 20, 0x3dbull << 20, 0x3faull << 20, 0x3fbull << 20,
+ 0x3deull << 20, 0x3dfull << 20,
+ 0x00cull << 20, 0x00dull << 20, 0x10cull << 20, 0x10dull << 20,
+ 0x20cull << 20, 0x20dull << 20, 0x30cull << 20, 0x30dull << 20,
+ 0x02eull << 20, 0x02full << 20,
+ 0x01cull << 20, 0x01dull << 20, 0x11cull << 20, 0x11dull << 20,
+ 0x21cull << 20, 0x21dull << 20, 0x31cull << 20, 0x31dull << 20,
+ 0x03eull << 20, 0x03full << 20,
+ 0x02cull << 20, 0x02dull << 20, 0x12cull << 20, 0x12dull << 20,
+ 0x22cull << 20, 0x22dull << 20, 0x32cull << 20, 0x32dull << 20,
+ 0x12eull << 20, 0x12full << 20,
+ 0x03cull << 20, 0x03dull << 20, 0x13cull << 20, 0x13dull << 20,
+ 0x23cull << 20, 0x23dull << 20, 0x33cull << 20, 0x33dull << 20,
+ 0x13eull << 20, 0x13full << 20,
+ 0x04cull << 20, 0x04dull << 20, 0x14cull << 20, 0x14dull << 20,
+ 0x24cull << 20, 0x24dull << 20, 0x34cull << 20, 0x34dull << 20,
+ 0x22eull << 20, 0x22full << 20,
+ 0x05cull << 20, 0x05dull << 20, 0x15cull << 20, 0x15dull << 20,
+ 0x25cull << 20, 0x25dull << 20, 0x35cull << 20, 0x35dull << 20,
+ 0x23eull << 20, 0x23full << 20,
+ 0x06cull << 20, 0x06dull << 20, 0x16cull << 20, 0x16dull << 20,
+ 0x26cull << 20, 0x26dull << 20, 0x36cull << 20, 0x36dull << 20,
+ 0x32eull << 20, 0x32full << 20,
+ 0x07cull << 20, 0x07dull << 20, 0x17cull << 20, 0x17dull << 20,
+ 0x27cull << 20, 0x27dull << 20, 0x37cull << 20, 0x37dull << 20,
+ 0x33eull << 20, 0x33full << 20,
+ 0x00eull << 20, 0x00full << 20, 0x10eull << 20, 0x10full << 20,
+ 0x20eull << 20, 0x20full << 20, 0x30eull << 20, 0x30full << 20,
+ 0x06eull << 20, 0x06full << 20,
+ 0x01eull << 20, 0x01full << 20, 0x11eull << 20, 0x11full << 20,
+ 0x21eull << 20, 0x21full << 20, 0x31eull << 20, 0x31full << 20,
+ 0x07eull << 20, 0x07full << 20,
+ 0x08cull << 20, 0x08dull << 20, 0x18cull << 20, 0x18dull << 20,
+ 0x28cull << 20, 0x28dull << 20, 0x38cull << 20, 0x38dull << 20,
+ 0x0aeull << 20, 0x0afull << 20,
+ 0x09cull << 20, 0x09dull << 20, 0x19cull << 20, 0x19dull << 20,
+ 0x29cull << 20, 0x29dull << 20, 0x39cull << 20, 0x39dull << 20,
+ 0x0beull << 20, 0x0bfull << 20,
+ 0x0acull << 20, 0x0adull << 20, 0x1acull << 20, 0x1adull << 20,
+ 0x2acull << 20, 0x2adull << 20, 0x3acull << 20, 0x3adull << 20,
+ 0x1aeull << 20, 0x1afull << 20,
+ 0x0bcull << 20, 0x0bdull << 20, 0x1bcull << 20, 0x1bdull << 20,
+ 0x2bcull << 20, 0x2bdull << 20, 0x3bcull << 20, 0x3bdull << 20,
+ 0x1beull << 20, 0x1bfull << 20,
+ 0x0ccull << 20, 0x0cdull << 20, 0x1ccull << 20, 0x1cdull << 20,
+ 0x2ccull << 20, 0x2cdull << 20, 0x3ccull << 20, 0x3cdull << 20,
+ 0x2aeull << 20, 0x2afull << 20,
+ 0x0dcull << 20, 0x0ddull << 20, 0x1dcull << 20, 0x1ddull << 20,
+ 0x2dcull << 20, 0x2ddull << 20, 0x3dcull << 20, 0x3ddull << 20,
+ 0x2beull << 20, 0x2bfull << 20,
+ 0x0ecull << 20, 0x0edull << 20, 0x1ecull << 20, 0x1edull << 20,
+ 0x2ecull << 20, 0x2edull << 20, 0x3ecull << 20, 0x3edull << 20,
+ 0x3aeull << 20, 0x3afull << 20,
+ 0x0fcull << 20, 0x0fdull << 20, 0x1fcull << 20, 0x1fdull << 20,
+ 0x2fcull << 20, 0x2fdull << 20, 0x3fcull << 20, 0x3fdull << 20,
+ 0x3beull << 20, 0x3bfull << 20,
+ 0x08eull << 20, 0x08full << 20, 0x18eull << 20, 0x18full << 20,
+ 0x28eull << 20, 0x28full << 20, 0x38eull << 20, 0x38full << 20,
+ 0x0eeull << 20, 0x0efull << 20,
+ 0x09eull << 20, 0x09full << 20, 0x19eull << 20, 0x19full << 20,
+ 0x29eull << 20, 0x29full << 20, 0x39eull << 20, 0x39full << 20,
+ 0x0feull << 20, 0x0ffull << 20
+};
+
+const UINT64 b2d4[] =
+ { 0x000ull << 30, 0x001ull << 30, 0x002ull << 30, 0x003ull << 30,
+ 0x004ull << 30, 0x005ull << 30, 0x006ull << 30, 0x007ull << 30,
+ 0x008ull << 30,
+ 0x009ull << 30,
+ 0x010ull << 30, 0x011ull << 30, 0x012ull << 30, 0x013ull << 30,
+ 0x014ull << 30, 0x015ull << 30, 0x016ull << 30, 0x017ull << 30,
+ 0x018ull << 30, 0x019ull << 30,
+ 0x020ull << 30, 0x021ull << 30, 0x022ull << 30, 0x023ull << 30,
+ 0x024ull << 30, 0x025ull << 30, 0x026ull << 30, 0x027ull << 30,
+ 0x028ull << 30, 0x029ull << 30,
+ 0x030ull << 30, 0x031ull << 30, 0x032ull << 30, 0x033ull << 30,
+ 0x034ull << 30, 0x035ull << 30, 0x036ull << 30, 0x037ull << 30,
+ 0x038ull << 30, 0x039ull << 30,
+ 0x040ull << 30, 0x041ull << 30, 0x042ull << 30, 0x043ull << 30,
+ 0x044ull << 30, 0x045ull << 30, 0x046ull << 30, 0x047ull << 30,
+ 0x048ull << 30, 0x049ull << 30,
+ 0x050ull << 30, 0x051ull << 30, 0x052ull << 30, 0x053ull << 30,
+ 0x054ull << 30, 0x055ull << 30, 0x056ull << 30, 0x057ull << 30,
+ 0x058ull << 30, 0x059ull << 30,
+ 0x060ull << 30, 0x061ull << 30, 0x062ull << 30, 0x063ull << 30,
+ 0x064ull << 30, 0x065ull << 30, 0x066ull << 30, 0x067ull << 30,
+ 0x068ull << 30, 0x069ull << 30,
+ 0x070ull << 30, 0x071ull << 30, 0x072ull << 30, 0x073ull << 30,
+ 0x074ull << 30, 0x075ull << 30, 0x076ull << 30, 0x077ull << 30,
+ 0x078ull << 30, 0x079ull << 30,
+ 0x00aull << 30, 0x00bull << 30, 0x02aull << 30, 0x02bull << 30,
+ 0x04aull << 30, 0x04bull << 30, 0x06aull << 30, 0x06bull << 30,
+ 0x04eull << 30, 0x04full << 30,
+ 0x01aull << 30, 0x01bull << 30, 0x03aull << 30, 0x03bull << 30,
+ 0x05aull << 30, 0x05bull << 30, 0x07aull << 30, 0x07bull << 30,
+ 0x05eull << 30, 0x05full << 30,
+ 0x080ull << 30, 0x081ull << 30, 0x082ull << 30, 0x083ull << 30,
+ 0x084ull << 30, 0x085ull << 30, 0x086ull << 30, 0x087ull << 30,
+ 0x088ull << 30, 0x089ull << 30,
+ 0x090ull << 30, 0x091ull << 30, 0x092ull << 30, 0x093ull << 30,
+ 0x094ull << 30, 0x095ull << 30, 0x096ull << 30, 0x097ull << 30,
+ 0x098ull << 30, 0x099ull << 30,
+ 0x0a0ull << 30, 0x0a1ull << 30, 0x0a2ull << 30, 0x0a3ull << 30,
+ 0x0a4ull << 30, 0x0a5ull << 30, 0x0a6ull << 30, 0x0a7ull << 30,
+ 0x0a8ull << 30, 0x0a9ull << 30,
+ 0x0b0ull << 30, 0x0b1ull << 30, 0x0b2ull << 30, 0x0b3ull << 30,
+ 0x0b4ull << 30, 0x0b5ull << 30, 0x0b6ull << 30, 0x0b7ull << 30,
+ 0x0b8ull << 30, 0x0b9ull << 30,
+ 0x0c0ull << 30, 0x0c1ull << 30, 0x0c2ull << 30, 0x0c3ull << 30,
+ 0x0c4ull << 30, 0x0c5ull << 30, 0x0c6ull << 30, 0x0c7ull << 30,
+ 0x0c8ull << 30, 0x0c9ull << 30,
+ 0x0d0ull << 30, 0x0d1ull << 30, 0x0d2ull << 30, 0x0d3ull << 30,
+ 0x0d4ull << 30, 0x0d5ull << 30, 0x0d6ull << 30, 0x0d7ull << 30,
+ 0x0d8ull << 30, 0x0d9ull << 30,
+ 0x0e0ull << 30, 0x0e1ull << 30, 0x0e2ull << 30, 0x0e3ull << 30,
+ 0x0e4ull << 30, 0x0e5ull << 30, 0x0e6ull << 30, 0x0e7ull << 30,
+ 0x0e8ull << 30, 0x0e9ull << 30,
+ 0x0f0ull << 30, 0x0f1ull << 30, 0x0f2ull << 30, 0x0f3ull << 30,
+ 0x0f4ull << 30, 0x0f5ull << 30, 0x0f6ull << 30, 0x0f7ull << 30,
+ 0x0f8ull << 30, 0x0f9ull << 30,
+ 0x08aull << 30, 0x08bull << 30, 0x0aaull << 30, 0x0abull << 30,
+ 0x0caull << 30, 0x0cbull << 30, 0x0eaull << 30, 0x0ebull << 30,
+ 0x0ceull << 30, 0x0cfull << 30,
+ 0x09aull << 30, 0x09bull << 30, 0x0baull << 30, 0x0bbull << 30,
+ 0x0daull << 30, 0x0dbull << 30, 0x0faull << 30, 0x0fbull << 30,
+ 0x0deull << 30, 0x0dfull << 30,
+ 0x100ull << 30, 0x101ull << 30, 0x102ull << 30, 0x103ull << 30,
+ 0x104ull << 30, 0x105ull << 30, 0x106ull << 30, 0x107ull << 30,
+ 0x108ull << 30, 0x109ull << 30,
+ 0x110ull << 30, 0x111ull << 30, 0x112ull << 30, 0x113ull << 30,
+ 0x114ull << 30, 0x115ull << 30, 0x116ull << 30, 0x117ull << 30,
+ 0x118ull << 30, 0x119ull << 30,
+ 0x120ull << 30, 0x121ull << 30, 0x122ull << 30, 0x123ull << 30,
+ 0x124ull << 30, 0x125ull << 30, 0x126ull << 30, 0x127ull << 30,
+ 0x128ull << 30, 0x129ull << 30,
+ 0x130ull << 30, 0x131ull << 30, 0x132ull << 30, 0x133ull << 30,
+ 0x134ull << 30, 0x135ull << 30, 0x136ull << 30, 0x137ull << 30,
+ 0x138ull << 30, 0x139ull << 30,
+ 0x140ull << 30, 0x141ull << 30, 0x142ull << 30, 0x143ull << 30,
+ 0x144ull << 30, 0x145ull << 30, 0x146ull << 30, 0x147ull << 30,
+ 0x148ull << 30, 0x149ull << 30,
+ 0x150ull << 30, 0x151ull << 30, 0x152ull << 30, 0x153ull << 30,
+ 0x154ull << 30, 0x155ull << 30, 0x156ull << 30, 0x157ull << 30,
+ 0x158ull << 30, 0x159ull << 30,
+ 0x160ull << 30, 0x161ull << 30, 0x162ull << 30, 0x163ull << 30,
+ 0x164ull << 30, 0x165ull << 30, 0x166ull << 30, 0x167ull << 30,
+ 0x168ull << 30, 0x169ull << 30,
+ 0x170ull << 30, 0x171ull << 30, 0x172ull << 30, 0x173ull << 30,
+ 0x174ull << 30, 0x175ull << 30, 0x176ull << 30, 0x177ull << 30,
+ 0x178ull << 30, 0x179ull << 30,
+ 0x10aull << 30, 0x10bull << 30, 0x12aull << 30, 0x12bull << 30,
+ 0x14aull << 30, 0x14bull << 30, 0x16aull << 30, 0x16bull << 30,
+ 0x14eull << 30, 0x14full << 30,
+ 0x11aull << 30, 0x11bull << 30, 0x13aull << 30, 0x13bull << 30,
+ 0x15aull << 30, 0x15bull << 30, 0x17aull << 30, 0x17bull << 30,
+ 0x15eull << 30, 0x15full << 30,
+ 0x180ull << 30, 0x181ull << 30, 0x182ull << 30, 0x183ull << 30,
+ 0x184ull << 30, 0x185ull << 30, 0x186ull << 30, 0x187ull << 30,
+ 0x188ull << 30, 0x189ull << 30,
+ 0x190ull << 30, 0x191ull << 30, 0x192ull << 30, 0x193ull << 30,
+ 0x194ull << 30, 0x195ull << 30, 0x196ull << 30, 0x197ull << 30,
+ 0x198ull << 30, 0x199ull << 30,
+ 0x1a0ull << 30, 0x1a1ull << 30, 0x1a2ull << 30, 0x1a3ull << 30,
+ 0x1a4ull << 30, 0x1a5ull << 30, 0x1a6ull << 30, 0x1a7ull << 30,
+ 0x1a8ull << 30, 0x1a9ull << 30,
+ 0x1b0ull << 30, 0x1b1ull << 30, 0x1b2ull << 30, 0x1b3ull << 30,
+ 0x1b4ull << 30, 0x1b5ull << 30, 0x1b6ull << 30, 0x1b7ull << 30,
+ 0x1b8ull << 30, 0x1b9ull << 30,
+ 0x1c0ull << 30, 0x1c1ull << 30, 0x1c2ull << 30, 0x1c3ull << 30,
+ 0x1c4ull << 30, 0x1c5ull << 30, 0x1c6ull << 30, 0x1c7ull << 30,
+ 0x1c8ull << 30, 0x1c9ull << 30,
+ 0x1d0ull << 30, 0x1d1ull << 30, 0x1d2ull << 30, 0x1d3ull << 30,
+ 0x1d4ull << 30, 0x1d5ull << 30, 0x1d6ull << 30, 0x1d7ull << 30,
+ 0x1d8ull << 30, 0x1d9ull << 30,
+ 0x1e0ull << 30, 0x1e1ull << 30, 0x1e2ull << 30, 0x1e3ull << 30,
+ 0x1e4ull << 30, 0x1e5ull << 30, 0x1e6ull << 30, 0x1e7ull << 30,
+ 0x1e8ull << 30, 0x1e9ull << 30,
+ 0x1f0ull << 30, 0x1f1ull << 30, 0x1f2ull << 30, 0x1f3ull << 30,
+ 0x1f4ull << 30, 0x1f5ull << 30, 0x1f6ull << 30, 0x1f7ull << 30,
+ 0x1f8ull << 30, 0x1f9ull << 30,
+ 0x18aull << 30, 0x18bull << 30, 0x1aaull << 30, 0x1abull << 30,
+ 0x1caull << 30, 0x1cbull << 30, 0x1eaull << 30, 0x1ebull << 30,
+ 0x1ceull << 30, 0x1cfull << 30,
+ 0x19aull << 30, 0x19bull << 30, 0x1baull << 30, 0x1bbull << 30,
+ 0x1daull << 30, 0x1dbull << 30, 0x1faull << 30, 0x1fbull << 30,
+ 0x1deull << 30, 0x1dfull << 30,
+ 0x200ull << 30, 0x201ull << 30, 0x202ull << 30, 0x203ull << 30,
+ 0x204ull << 30, 0x205ull << 30, 0x206ull << 30, 0x207ull << 30,
+ 0x208ull << 30, 0x209ull << 30,
+ 0x210ull << 30, 0x211ull << 30, 0x212ull << 30, 0x213ull << 30,
+ 0x214ull << 30, 0x215ull << 30, 0x216ull << 30, 0x217ull << 30,
+ 0x218ull << 30, 0x219ull << 30,
+ 0x220ull << 30, 0x221ull << 30, 0x222ull << 30, 0x223ull << 30,
+ 0x224ull << 30, 0x225ull << 30, 0x226ull << 30, 0x227ull << 30,
+ 0x228ull << 30, 0x229ull << 30,
+ 0x230ull << 30, 0x231ull << 30, 0x232ull << 30, 0x233ull << 30,
+ 0x234ull << 30, 0x235ull << 30, 0x236ull << 30, 0x237ull << 30,
+ 0x238ull << 30, 0x239ull << 30,
+ 0x240ull << 30, 0x241ull << 30, 0x242ull << 30, 0x243ull << 30,
+ 0x244ull << 30, 0x245ull << 30, 0x246ull << 30, 0x247ull << 30,
+ 0x248ull << 30, 0x249ull << 30,
+ 0x250ull << 30, 0x251ull << 30, 0x252ull << 30, 0x253ull << 30,
+ 0x254ull << 30, 0x255ull << 30, 0x256ull << 30, 0x257ull << 30,
+ 0x258ull << 30, 0x259ull << 30,
+ 0x260ull << 30, 0x261ull << 30, 0x262ull << 30, 0x263ull << 30,
+ 0x264ull << 30, 0x265ull << 30, 0x266ull << 30, 0x267ull << 30,
+ 0x268ull << 30, 0x269ull << 30,
+ 0x270ull << 30, 0x271ull << 30, 0x272ull << 30, 0x273ull << 30,
+ 0x274ull << 30, 0x275ull << 30, 0x276ull << 30, 0x277ull << 30,
+ 0x278ull << 30, 0x279ull << 30,
+ 0x20aull << 30, 0x20bull << 30, 0x22aull << 30, 0x22bull << 30,
+ 0x24aull << 30, 0x24bull << 30, 0x26aull << 30, 0x26bull << 30,
+ 0x24eull << 30, 0x24full << 30,
+ 0x21aull << 30, 0x21bull << 30, 0x23aull << 30, 0x23bull << 30,
+ 0x25aull << 30, 0x25bull << 30, 0x27aull << 30, 0x27bull << 30,
+ 0x25eull << 30, 0x25full << 30,
+ 0x280ull << 30, 0x281ull << 30, 0x282ull << 30, 0x283ull << 30,
+ 0x284ull << 30, 0x285ull << 30, 0x286ull << 30, 0x287ull << 30,
+ 0x288ull << 30, 0x289ull << 30,
+ 0x290ull << 30, 0x291ull << 30, 0x292ull << 30, 0x293ull << 30,
+ 0x294ull << 30, 0x295ull << 30, 0x296ull << 30, 0x297ull << 30,
+ 0x298ull << 30, 0x299ull << 30,
+ 0x2a0ull << 30, 0x2a1ull << 30, 0x2a2ull << 30, 0x2a3ull << 30,
+ 0x2a4ull << 30, 0x2a5ull << 30, 0x2a6ull << 30, 0x2a7ull << 30,
+ 0x2a8ull << 30, 0x2a9ull << 30,
+ 0x2b0ull << 30, 0x2b1ull << 30, 0x2b2ull << 30, 0x2b3ull << 30,
+ 0x2b4ull << 30, 0x2b5ull << 30, 0x2b6ull << 30, 0x2b7ull << 30,
+ 0x2b8ull << 30, 0x2b9ull << 30,
+ 0x2c0ull << 30, 0x2c1ull << 30, 0x2c2ull << 30, 0x2c3ull << 30,
+ 0x2c4ull << 30, 0x2c5ull << 30, 0x2c6ull << 30, 0x2c7ull << 30,
+ 0x2c8ull << 30, 0x2c9ull << 30,
+ 0x2d0ull << 30, 0x2d1ull << 30, 0x2d2ull << 30, 0x2d3ull << 30,
+ 0x2d4ull << 30, 0x2d5ull << 30, 0x2d6ull << 30, 0x2d7ull << 30,
+ 0x2d8ull << 30, 0x2d9ull << 30,
+ 0x2e0ull << 30, 0x2e1ull << 30, 0x2e2ull << 30, 0x2e3ull << 30,
+ 0x2e4ull << 30, 0x2e5ull << 30, 0x2e6ull << 30, 0x2e7ull << 30,
+ 0x2e8ull << 30, 0x2e9ull << 30,
+ 0x2f0ull << 30, 0x2f1ull << 30, 0x2f2ull << 30, 0x2f3ull << 30,
+ 0x2f4ull << 30, 0x2f5ull << 30, 0x2f6ull << 30, 0x2f7ull << 30,
+ 0x2f8ull << 30, 0x2f9ull << 30,
+ 0x28aull << 30, 0x28bull << 30, 0x2aaull << 30, 0x2abull << 30,
+ 0x2caull << 30, 0x2cbull << 30, 0x2eaull << 30, 0x2ebull << 30,
+ 0x2ceull << 30, 0x2cfull << 30,
+ 0x29aull << 30, 0x29bull << 30, 0x2baull << 30, 0x2bbull << 30,
+ 0x2daull << 30, 0x2dbull << 30, 0x2faull << 30, 0x2fbull << 30,
+ 0x2deull << 30, 0x2dfull << 30,
+ 0x300ull << 30, 0x301ull << 30, 0x302ull << 30, 0x303ull << 30,
+ 0x304ull << 30, 0x305ull << 30, 0x306ull << 30, 0x307ull << 30,
+ 0x308ull << 30, 0x309ull << 30,
+ 0x310ull << 30, 0x311ull << 30, 0x312ull << 30, 0x313ull << 30,
+ 0x314ull << 30, 0x315ull << 30, 0x316ull << 30, 0x317ull << 30,
+ 0x318ull << 30, 0x319ull << 30,
+ 0x320ull << 30, 0x321ull << 30, 0x322ull << 30, 0x323ull << 30,
+ 0x324ull << 30, 0x325ull << 30, 0x326ull << 30, 0x327ull << 30,
+ 0x328ull << 30, 0x329ull << 30,
+ 0x330ull << 30, 0x331ull << 30, 0x332ull << 30, 0x333ull << 30,
+ 0x334ull << 30, 0x335ull << 30, 0x336ull << 30, 0x337ull << 30,
+ 0x338ull << 30, 0x339ull << 30,
+ 0x340ull << 30, 0x341ull << 30, 0x342ull << 30, 0x343ull << 30,
+ 0x344ull << 30, 0x345ull << 30, 0x346ull << 30, 0x347ull << 30,
+ 0x348ull << 30, 0x349ull << 30,
+ 0x350ull << 30, 0x351ull << 30, 0x352ull << 30, 0x353ull << 30,
+ 0x354ull << 30, 0x355ull << 30, 0x356ull << 30, 0x357ull << 30,
+ 0x358ull << 30, 0x359ull << 30,
+ 0x360ull << 30, 0x361ull << 30, 0x362ull << 30, 0x363ull << 30,
+ 0x364ull << 30, 0x365ull << 30, 0x366ull << 30, 0x367ull << 30,
+ 0x368ull << 30, 0x369ull << 30,
+ 0x370ull << 30, 0x371ull << 30, 0x372ull << 30, 0x373ull << 30,
+ 0x374ull << 30, 0x375ull << 30, 0x376ull << 30, 0x377ull << 30,
+ 0x378ull << 30, 0x379ull << 30,
+ 0x30aull << 30, 0x30bull << 30, 0x32aull << 30, 0x32bull << 30,
+ 0x34aull << 30, 0x34bull << 30, 0x36aull << 30, 0x36bull << 30,
+ 0x34eull << 30, 0x34full << 30,
+ 0x31aull << 30, 0x31bull << 30, 0x33aull << 30, 0x33bull << 30,
+ 0x35aull << 30, 0x35bull << 30, 0x37aull << 30, 0x37bull << 30,
+ 0x35eull << 30, 0x35full << 30,
+ 0x380ull << 30, 0x381ull << 30, 0x382ull << 30, 0x383ull << 30,
+ 0x384ull << 30, 0x385ull << 30, 0x386ull << 30, 0x387ull << 30,
+ 0x388ull << 30, 0x389ull << 30,
+ 0x390ull << 30, 0x391ull << 30, 0x392ull << 30, 0x393ull << 30,
+ 0x394ull << 30, 0x395ull << 30, 0x396ull << 30, 0x397ull << 30,
+ 0x398ull << 30, 0x399ull << 30,
+ 0x3a0ull << 30, 0x3a1ull << 30, 0x3a2ull << 30, 0x3a3ull << 30,
+ 0x3a4ull << 30, 0x3a5ull << 30, 0x3a6ull << 30, 0x3a7ull << 30,
+ 0x3a8ull << 30, 0x3a9ull << 30,
+ 0x3b0ull << 30, 0x3b1ull << 30, 0x3b2ull << 30, 0x3b3ull << 30,
+ 0x3b4ull << 30, 0x3b5ull << 30, 0x3b6ull << 30, 0x3b7ull << 30,
+ 0x3b8ull << 30, 0x3b9ull << 30,
+ 0x3c0ull << 30, 0x3c1ull << 30, 0x3c2ull << 30, 0x3c3ull << 30,
+ 0x3c4ull << 30, 0x3c5ull << 30, 0x3c6ull << 30, 0x3c7ull << 30,
+ 0x3c8ull << 30, 0x3c9ull << 30,
+ 0x3d0ull << 30, 0x3d1ull << 30, 0x3d2ull << 30, 0x3d3ull << 30,
+ 0x3d4ull << 30, 0x3d5ull << 30, 0x3d6ull << 30, 0x3d7ull << 30,
+ 0x3d8ull << 30, 0x3d9ull << 30,
+ 0x3e0ull << 30, 0x3e1ull << 30, 0x3e2ull << 30, 0x3e3ull << 30,
+ 0x3e4ull << 30, 0x3e5ull << 30, 0x3e6ull << 30, 0x3e7ull << 30,
+ 0x3e8ull << 30, 0x3e9ull << 30,
+ 0x3f0ull << 30, 0x3f1ull << 30, 0x3f2ull << 30, 0x3f3ull << 30,
+ 0x3f4ull << 30, 0x3f5ull << 30, 0x3f6ull << 30, 0x3f7ull << 30,
+ 0x3f8ull << 30, 0x3f9ull << 30,
+ 0x38aull << 30, 0x38bull << 30, 0x3aaull << 30, 0x3abull << 30,
+ 0x3caull << 30, 0x3cbull << 30, 0x3eaull << 30, 0x3ebull << 30,
+ 0x3ceull << 30, 0x3cfull << 30,
+ 0x39aull << 30, 0x39bull << 30, 0x3baull << 30, 0x3bbull << 30,
+ 0x3daull << 30, 0x3dbull << 30, 0x3faull << 30, 0x3fbull << 30,
+ 0x3deull << 30, 0x3dfull << 30,
+ 0x00cull << 30, 0x00dull << 30, 0x10cull << 30, 0x10dull << 30,
+ 0x20cull << 30, 0x20dull << 30, 0x30cull << 30, 0x30dull << 30,
+ 0x02eull << 30, 0x02full << 30,
+ 0x01cull << 30, 0x01dull << 30, 0x11cull << 30, 0x11dull << 30,
+ 0x21cull << 30, 0x21dull << 30, 0x31cull << 30, 0x31dull << 30,
+ 0x03eull << 30, 0x03full << 30,
+ 0x02cull << 30, 0x02dull << 30, 0x12cull << 30, 0x12dull << 30,
+ 0x22cull << 30, 0x22dull << 30, 0x32cull << 30, 0x32dull << 30,
+ 0x12eull << 30, 0x12full << 30,
+ 0x03cull << 30, 0x03dull << 30, 0x13cull << 30, 0x13dull << 30,
+ 0x23cull << 30, 0x23dull << 30, 0x33cull << 30, 0x33dull << 30,
+ 0x13eull << 30, 0x13full << 30,
+ 0x04cull << 30, 0x04dull << 30, 0x14cull << 30, 0x14dull << 30,
+ 0x24cull << 30, 0x24dull << 30, 0x34cull << 30, 0x34dull << 30,
+ 0x22eull << 30, 0x22full << 30,
+ 0x05cull << 30, 0x05dull << 30, 0x15cull << 30, 0x15dull << 30,
+ 0x25cull << 30, 0x25dull << 30, 0x35cull << 30, 0x35dull << 30,
+ 0x23eull << 30, 0x23full << 30,
+ 0x06cull << 30, 0x06dull << 30, 0x16cull << 30, 0x16dull << 30,
+ 0x26cull << 30, 0x26dull << 30, 0x36cull << 30, 0x36dull << 30,
+ 0x32eull << 30, 0x32full << 30,
+ 0x07cull << 30, 0x07dull << 30, 0x17cull << 30, 0x17dull << 30,
+ 0x27cull << 30, 0x27dull << 30, 0x37cull << 30, 0x37dull << 30,
+ 0x33eull << 30, 0x33full << 30,
+ 0x00eull << 30, 0x00full << 30, 0x10eull << 30, 0x10full << 30,
+ 0x20eull << 30, 0x20full << 30, 0x30eull << 30, 0x30full << 30,
+ 0x06eull << 30, 0x06full << 30,
+ 0x01eull << 30, 0x01full << 30, 0x11eull << 30, 0x11full << 30,
+ 0x21eull << 30, 0x21full << 30, 0x31eull << 30, 0x31full << 30,
+ 0x07eull << 30, 0x07full << 30,
+ 0x08cull << 30, 0x08dull << 30, 0x18cull << 30, 0x18dull << 30,
+ 0x28cull << 30, 0x28dull << 30, 0x38cull << 30, 0x38dull << 30,
+ 0x0aeull << 30, 0x0afull << 30,
+ 0x09cull << 30, 0x09dull << 30, 0x19cull << 30, 0x19dull << 30,
+ 0x29cull << 30, 0x29dull << 30, 0x39cull << 30, 0x39dull << 30,
+ 0x0beull << 30, 0x0bfull << 30,
+ 0x0acull << 30, 0x0adull << 30, 0x1acull << 30, 0x1adull << 30,
+ 0x2acull << 30, 0x2adull << 30, 0x3acull << 30, 0x3adull << 30,
+ 0x1aeull << 30, 0x1afull << 30,
+ 0x0bcull << 30, 0x0bdull << 30, 0x1bcull << 30, 0x1bdull << 30,
+ 0x2bcull << 30, 0x2bdull << 30, 0x3bcull << 30, 0x3bdull << 30,
+ 0x1beull << 30, 0x1bfull << 30,
+ 0x0ccull << 30, 0x0cdull << 30, 0x1ccull << 30, 0x1cdull << 30,
+ 0x2ccull << 30, 0x2cdull << 30, 0x3ccull << 30, 0x3cdull << 30,
+ 0x2aeull << 30, 0x2afull << 30,
+ 0x0dcull << 30, 0x0ddull << 30, 0x1dcull << 30, 0x1ddull << 30,
+ 0x2dcull << 30, 0x2ddull << 30, 0x3dcull << 30, 0x3ddull << 30,
+ 0x2beull << 30, 0x2bfull << 30,
+ 0x0ecull << 30, 0x0edull << 30, 0x1ecull << 30, 0x1edull << 30,
+ 0x2ecull << 30, 0x2edull << 30, 0x3ecull << 30, 0x3edull << 30,
+ 0x3aeull << 30, 0x3afull << 30,
+ 0x0fcull << 30, 0x0fdull << 30, 0x1fcull << 30, 0x1fdull << 30,
+ 0x2fcull << 30, 0x2fdull << 30, 0x3fcull << 30, 0x3fdull << 30,
+ 0x3beull << 30, 0x3bfull << 30,
+ 0x08eull << 30, 0x08full << 30, 0x18eull << 30, 0x18full << 30,
+ 0x28eull << 30, 0x28full << 30, 0x38eull << 30, 0x38full << 30,
+ 0x0eeull << 30, 0x0efull << 30,
+ 0x09eull << 30, 0x09full << 30, 0x19eull << 30, 0x19full << 30,
+ 0x29eull << 30, 0x29full << 30, 0x39eull << 30, 0x39full << 30,
+ 0x0feull << 30, 0x0ffull << 30
+};
+
+const UINT64 b2d5[] =
+ { 0x000ull << 40, 0x001ull << 40, 0x002ull << 40, 0x003ull << 40,
+ 0x004ull << 40, 0x005ull << 40, 0x006ull << 40, 0x007ull << 40,
+ 0x008ull << 40,
+ 0x009ull << 40,
+ 0x010ull << 40, 0x011ull << 40, 0x012ull << 40, 0x013ull << 40,
+ 0x014ull << 40, 0x015ull << 40, 0x016ull << 40, 0x017ull << 40,
+ 0x018ull << 40, 0x019ull << 40,
+ 0x020ull << 40, 0x021ull << 40, 0x022ull << 40, 0x023ull << 40,
+ 0x024ull << 40, 0x025ull << 40, 0x026ull << 40, 0x027ull << 40,
+ 0x028ull << 40, 0x029ull << 40,
+ 0x030ull << 40, 0x031ull << 40, 0x032ull << 40, 0x033ull << 40,
+ 0x034ull << 40, 0x035ull << 40, 0x036ull << 40, 0x037ull << 40,
+ 0x038ull << 40, 0x039ull << 40,
+ 0x040ull << 40, 0x041ull << 40, 0x042ull << 40, 0x043ull << 40,
+ 0x044ull << 40, 0x045ull << 40, 0x046ull << 40, 0x047ull << 40,
+ 0x048ull << 40, 0x049ull << 40,
+ 0x050ull << 40, 0x051ull << 40, 0x052ull << 40, 0x053ull << 40,
+ 0x054ull << 40, 0x055ull << 40, 0x056ull << 40, 0x057ull << 40,
+ 0x058ull << 40, 0x059ull << 40,
+ 0x060ull << 40, 0x061ull << 40, 0x062ull << 40, 0x063ull << 40,
+ 0x064ull << 40, 0x065ull << 40, 0x066ull << 40, 0x067ull << 40,
+ 0x068ull << 40, 0x069ull << 40,
+ 0x070ull << 40, 0x071ull << 40, 0x072ull << 40, 0x073ull << 40,
+ 0x074ull << 40, 0x075ull << 40, 0x076ull << 40, 0x077ull << 40,
+ 0x078ull << 40, 0x079ull << 40,
+ 0x00aull << 40, 0x00bull << 40, 0x02aull << 40, 0x02bull << 40,
+ 0x04aull << 40, 0x04bull << 40, 0x06aull << 40, 0x06bull << 40,
+ 0x04eull << 40, 0x04full << 40,
+ 0x01aull << 40, 0x01bull << 40, 0x03aull << 40, 0x03bull << 40,
+ 0x05aull << 40, 0x05bull << 40, 0x07aull << 40, 0x07bull << 40,
+ 0x05eull << 40, 0x05full << 40,
+ 0x080ull << 40, 0x081ull << 40, 0x082ull << 40, 0x083ull << 40,
+ 0x084ull << 40, 0x085ull << 40, 0x086ull << 40, 0x087ull << 40,
+ 0x088ull << 40, 0x089ull << 40,
+ 0x090ull << 40, 0x091ull << 40, 0x092ull << 40, 0x093ull << 40,
+ 0x094ull << 40, 0x095ull << 40, 0x096ull << 40, 0x097ull << 40,
+ 0x098ull << 40, 0x099ull << 40,
+ 0x0a0ull << 40, 0x0a1ull << 40, 0x0a2ull << 40, 0x0a3ull << 40,
+ 0x0a4ull << 40, 0x0a5ull << 40, 0x0a6ull << 40, 0x0a7ull << 40,
+ 0x0a8ull << 40, 0x0a9ull << 40,
+ 0x0b0ull << 40, 0x0b1ull << 40, 0x0b2ull << 40, 0x0b3ull << 40,
+ 0x0b4ull << 40, 0x0b5ull << 40, 0x0b6ull << 40, 0x0b7ull << 40,
+ 0x0b8ull << 40, 0x0b9ull << 40,
+ 0x0c0ull << 40, 0x0c1ull << 40, 0x0c2ull << 40, 0x0c3ull << 40,
+ 0x0c4ull << 40, 0x0c5ull << 40, 0x0c6ull << 40, 0x0c7ull << 40,
+ 0x0c8ull << 40, 0x0c9ull << 40,
+ 0x0d0ull << 40, 0x0d1ull << 40, 0x0d2ull << 40, 0x0d3ull << 40,
+ 0x0d4ull << 40, 0x0d5ull << 40, 0x0d6ull << 40, 0x0d7ull << 40,
+ 0x0d8ull << 40, 0x0d9ull << 40,
+ 0x0e0ull << 40, 0x0e1ull << 40, 0x0e2ull << 40, 0x0e3ull << 40,
+ 0x0e4ull << 40, 0x0e5ull << 40, 0x0e6ull << 40, 0x0e7ull << 40,
+ 0x0e8ull << 40, 0x0e9ull << 40,
+ 0x0f0ull << 40, 0x0f1ull << 40, 0x0f2ull << 40, 0x0f3ull << 40,
+ 0x0f4ull << 40, 0x0f5ull << 40, 0x0f6ull << 40, 0x0f7ull << 40,
+ 0x0f8ull << 40, 0x0f9ull << 40,
+ 0x08aull << 40, 0x08bull << 40, 0x0aaull << 40, 0x0abull << 40,
+ 0x0caull << 40, 0x0cbull << 40, 0x0eaull << 40, 0x0ebull << 40,
+ 0x0ceull << 40, 0x0cfull << 40,
+ 0x09aull << 40, 0x09bull << 40, 0x0baull << 40, 0x0bbull << 40,
+ 0x0daull << 40, 0x0dbull << 40, 0x0faull << 40, 0x0fbull << 40,
+ 0x0deull << 40, 0x0dfull << 40,
+ 0x100ull << 40, 0x101ull << 40, 0x102ull << 40, 0x103ull << 40,
+ 0x104ull << 40, 0x105ull << 40, 0x106ull << 40, 0x107ull << 40,
+ 0x108ull << 40, 0x109ull << 40,
+ 0x110ull << 40, 0x111ull << 40, 0x112ull << 40, 0x113ull << 40,
+ 0x114ull << 40, 0x115ull << 40, 0x116ull << 40, 0x117ull << 40,
+ 0x118ull << 40, 0x119ull << 40,
+ 0x120ull << 40, 0x121ull << 40, 0x122ull << 40, 0x123ull << 40,
+ 0x124ull << 40, 0x125ull << 40, 0x126ull << 40, 0x127ull << 40,
+ 0x128ull << 40, 0x129ull << 40,
+ 0x130ull << 40, 0x131ull << 40, 0x132ull << 40, 0x133ull << 40,
+ 0x134ull << 40, 0x135ull << 40, 0x136ull << 40, 0x137ull << 40,
+ 0x138ull << 40, 0x139ull << 40,
+ 0x140ull << 40, 0x141ull << 40, 0x142ull << 40, 0x143ull << 40,
+ 0x144ull << 40, 0x145ull << 40, 0x146ull << 40, 0x147ull << 40,
+ 0x148ull << 40, 0x149ull << 40,
+ 0x150ull << 40, 0x151ull << 40, 0x152ull << 40, 0x153ull << 40,
+ 0x154ull << 40, 0x155ull << 40, 0x156ull << 40, 0x157ull << 40,
+ 0x158ull << 40, 0x159ull << 40,
+ 0x160ull << 40, 0x161ull << 40, 0x162ull << 40, 0x163ull << 40,
+ 0x164ull << 40, 0x165ull << 40, 0x166ull << 40, 0x167ull << 40,
+ 0x168ull << 40, 0x169ull << 40,
+ 0x170ull << 40, 0x171ull << 40, 0x172ull << 40, 0x173ull << 40,
+ 0x174ull << 40, 0x175ull << 40, 0x176ull << 40, 0x177ull << 40,
+ 0x178ull << 40, 0x179ull << 40,
+ 0x10aull << 40, 0x10bull << 40, 0x12aull << 40, 0x12bull << 40,
+ 0x14aull << 40, 0x14bull << 40, 0x16aull << 40, 0x16bull << 40,
+ 0x14eull << 40, 0x14full << 40,
+ 0x11aull << 40, 0x11bull << 40, 0x13aull << 40, 0x13bull << 40,
+ 0x15aull << 40, 0x15bull << 40, 0x17aull << 40, 0x17bull << 40,
+ 0x15eull << 40, 0x15full << 40,
+ 0x180ull << 40, 0x181ull << 40, 0x182ull << 40, 0x183ull << 40,
+ 0x184ull << 40, 0x185ull << 40, 0x186ull << 40, 0x187ull << 40,
+ 0x188ull << 40, 0x189ull << 40,
+ 0x190ull << 40, 0x191ull << 40, 0x192ull << 40, 0x193ull << 40,
+ 0x194ull << 40, 0x195ull << 40, 0x196ull << 40, 0x197ull << 40,
+ 0x198ull << 40, 0x199ull << 40,
+ 0x1a0ull << 40, 0x1a1ull << 40, 0x1a2ull << 40, 0x1a3ull << 40,
+ 0x1a4ull << 40, 0x1a5ull << 40, 0x1a6ull << 40, 0x1a7ull << 40,
+ 0x1a8ull << 40, 0x1a9ull << 40,
+ 0x1b0ull << 40, 0x1b1ull << 40, 0x1b2ull << 40, 0x1b3ull << 40,
+ 0x1b4ull << 40, 0x1b5ull << 40, 0x1b6ull << 40, 0x1b7ull << 40,
+ 0x1b8ull << 40, 0x1b9ull << 40,
+ 0x1c0ull << 40, 0x1c1ull << 40, 0x1c2ull << 40, 0x1c3ull << 40,
+ 0x1c4ull << 40, 0x1c5ull << 40, 0x1c6ull << 40, 0x1c7ull << 40,
+ 0x1c8ull << 40, 0x1c9ull << 40,
+ 0x1d0ull << 40, 0x1d1ull << 40, 0x1d2ull << 40, 0x1d3ull << 40,
+ 0x1d4ull << 40, 0x1d5ull << 40, 0x1d6ull << 40, 0x1d7ull << 40,
+ 0x1d8ull << 40, 0x1d9ull << 40,
+ 0x1e0ull << 40, 0x1e1ull << 40, 0x1e2ull << 40, 0x1e3ull << 40,
+ 0x1e4ull << 40, 0x1e5ull << 40, 0x1e6ull << 40, 0x1e7ull << 40,
+ 0x1e8ull << 40, 0x1e9ull << 40,
+ 0x1f0ull << 40, 0x1f1ull << 40, 0x1f2ull << 40, 0x1f3ull << 40,
+ 0x1f4ull << 40, 0x1f5ull << 40, 0x1f6ull << 40, 0x1f7ull << 40,
+ 0x1f8ull << 40, 0x1f9ull << 40,
+ 0x18aull << 40, 0x18bull << 40, 0x1aaull << 40, 0x1abull << 40,
+ 0x1caull << 40, 0x1cbull << 40, 0x1eaull << 40, 0x1ebull << 40,
+ 0x1ceull << 40, 0x1cfull << 40,
+ 0x19aull << 40, 0x19bull << 40, 0x1baull << 40, 0x1bbull << 40,
+ 0x1daull << 40, 0x1dbull << 40, 0x1faull << 40, 0x1fbull << 40,
+ 0x1deull << 40, 0x1dfull << 40,
+ 0x200ull << 40, 0x201ull << 40, 0x202ull << 40, 0x203ull << 40,
+ 0x204ull << 40, 0x205ull << 40, 0x206ull << 40, 0x207ull << 40,
+ 0x208ull << 40, 0x209ull << 40,
+ 0x210ull << 40, 0x211ull << 40, 0x212ull << 40, 0x213ull << 40,
+ 0x214ull << 40, 0x215ull << 40, 0x216ull << 40, 0x217ull << 40,
+ 0x218ull << 40, 0x219ull << 40,
+ 0x220ull << 40, 0x221ull << 40, 0x222ull << 40, 0x223ull << 40,
+ 0x224ull << 40, 0x225ull << 40, 0x226ull << 40, 0x227ull << 40,
+ 0x228ull << 40, 0x229ull << 40,
+ 0x230ull << 40, 0x231ull << 40, 0x232ull << 40, 0x233ull << 40,
+ 0x234ull << 40, 0x235ull << 40, 0x236ull << 40, 0x237ull << 40,
+ 0x238ull << 40, 0x239ull << 40,
+ 0x240ull << 40, 0x241ull << 40, 0x242ull << 40, 0x243ull << 40,
+ 0x244ull << 40, 0x245ull << 40, 0x246ull << 40, 0x247ull << 40,
+ 0x248ull << 40, 0x249ull << 40,
+ 0x250ull << 40, 0x251ull << 40, 0x252ull << 40, 0x253ull << 40,
+ 0x254ull << 40, 0x255ull << 40, 0x256ull << 40, 0x257ull << 40,
+ 0x258ull << 40, 0x259ull << 40,
+ 0x260ull << 40, 0x261ull << 40, 0x262ull << 40, 0x263ull << 40,
+ 0x264ull << 40, 0x265ull << 40, 0x266ull << 40, 0x267ull << 40,
+ 0x268ull << 40, 0x269ull << 40,
+ 0x270ull << 40, 0x271ull << 40, 0x272ull << 40, 0x273ull << 40,
+ 0x274ull << 40, 0x275ull << 40, 0x276ull << 40, 0x277ull << 40,
+ 0x278ull << 40, 0x279ull << 40,
+ 0x20aull << 40, 0x20bull << 40, 0x22aull << 40, 0x22bull << 40,
+ 0x24aull << 40, 0x24bull << 40, 0x26aull << 40, 0x26bull << 40,
+ 0x24eull << 40, 0x24full << 40,
+ 0x21aull << 40, 0x21bull << 40, 0x23aull << 40, 0x23bull << 40,
+ 0x25aull << 40, 0x25bull << 40, 0x27aull << 40, 0x27bull << 40,
+ 0x25eull << 40, 0x25full << 40,
+ 0x280ull << 40, 0x281ull << 40, 0x282ull << 40, 0x283ull << 40,
+ 0x284ull << 40, 0x285ull << 40, 0x286ull << 40, 0x287ull << 40,
+ 0x288ull << 40, 0x289ull << 40,
+ 0x290ull << 40, 0x291ull << 40, 0x292ull << 40, 0x293ull << 40,
+ 0x294ull << 40, 0x295ull << 40, 0x296ull << 40, 0x297ull << 40,
+ 0x298ull << 40, 0x299ull << 40,
+ 0x2a0ull << 40, 0x2a1ull << 40, 0x2a2ull << 40, 0x2a3ull << 40,
+ 0x2a4ull << 40, 0x2a5ull << 40, 0x2a6ull << 40, 0x2a7ull << 40,
+ 0x2a8ull << 40, 0x2a9ull << 40,
+ 0x2b0ull << 40, 0x2b1ull << 40, 0x2b2ull << 40, 0x2b3ull << 40,
+ 0x2b4ull << 40, 0x2b5ull << 40, 0x2b6ull << 40, 0x2b7ull << 40,
+ 0x2b8ull << 40, 0x2b9ull << 40,
+ 0x2c0ull << 40, 0x2c1ull << 40, 0x2c2ull << 40, 0x2c3ull << 40,
+ 0x2c4ull << 40, 0x2c5ull << 40, 0x2c6ull << 40, 0x2c7ull << 40,
+ 0x2c8ull << 40, 0x2c9ull << 40,
+ 0x2d0ull << 40, 0x2d1ull << 40, 0x2d2ull << 40, 0x2d3ull << 40,
+ 0x2d4ull << 40, 0x2d5ull << 40, 0x2d6ull << 40, 0x2d7ull << 40,
+ 0x2d8ull << 40, 0x2d9ull << 40,
+ 0x2e0ull << 40, 0x2e1ull << 40, 0x2e2ull << 40, 0x2e3ull << 40,
+ 0x2e4ull << 40, 0x2e5ull << 40, 0x2e6ull << 40, 0x2e7ull << 40,
+ 0x2e8ull << 40, 0x2e9ull << 40,
+ 0x2f0ull << 40, 0x2f1ull << 40, 0x2f2ull << 40, 0x2f3ull << 40,
+ 0x2f4ull << 40, 0x2f5ull << 40, 0x2f6ull << 40, 0x2f7ull << 40,
+ 0x2f8ull << 40, 0x2f9ull << 40,
+ 0x28aull << 40, 0x28bull << 40, 0x2aaull << 40, 0x2abull << 40,
+ 0x2caull << 40, 0x2cbull << 40, 0x2eaull << 40, 0x2ebull << 40,
+ 0x2ceull << 40, 0x2cfull << 40,
+ 0x29aull << 40, 0x29bull << 40, 0x2baull << 40, 0x2bbull << 40,
+ 0x2daull << 40, 0x2dbull << 40, 0x2faull << 40, 0x2fbull << 40,
+ 0x2deull << 40, 0x2dfull << 40,
+ 0x300ull << 40, 0x301ull << 40, 0x302ull << 40, 0x303ull << 40,
+ 0x304ull << 40, 0x305ull << 40, 0x306ull << 40, 0x307ull << 40,
+ 0x308ull << 40, 0x309ull << 40,
+ 0x310ull << 40, 0x311ull << 40, 0x312ull << 40, 0x313ull << 40,
+ 0x314ull << 40, 0x315ull << 40, 0x316ull << 40, 0x317ull << 40,
+ 0x318ull << 40, 0x319ull << 40,
+ 0x320ull << 40, 0x321ull << 40, 0x322ull << 40, 0x323ull << 40,
+ 0x324ull << 40, 0x325ull << 40, 0x326ull << 40, 0x327ull << 40,
+ 0x328ull << 40, 0x329ull << 40,
+ 0x330ull << 40, 0x331ull << 40, 0x332ull << 40, 0x333ull << 40,
+ 0x334ull << 40, 0x335ull << 40, 0x336ull << 40, 0x337ull << 40,
+ 0x338ull << 40, 0x339ull << 40,
+ 0x340ull << 40, 0x341ull << 40, 0x342ull << 40, 0x343ull << 40,
+ 0x344ull << 40, 0x345ull << 40, 0x346ull << 40, 0x347ull << 40,
+ 0x348ull << 40, 0x349ull << 40,
+ 0x350ull << 40, 0x351ull << 40, 0x352ull << 40, 0x353ull << 40,
+ 0x354ull << 40, 0x355ull << 40, 0x356ull << 40, 0x357ull << 40,
+ 0x358ull << 40, 0x359ull << 40,
+ 0x360ull << 40, 0x361ull << 40, 0x362ull << 40, 0x363ull << 40,
+ 0x364ull << 40, 0x365ull << 40, 0x366ull << 40, 0x367ull << 40,
+ 0x368ull << 40, 0x369ull << 40,
+ 0x370ull << 40, 0x371ull << 40, 0x372ull << 40, 0x373ull << 40,
+ 0x374ull << 40, 0x375ull << 40, 0x376ull << 40, 0x377ull << 40,
+ 0x378ull << 40, 0x379ull << 40,
+ 0x30aull << 40, 0x30bull << 40, 0x32aull << 40, 0x32bull << 40,
+ 0x34aull << 40, 0x34bull << 40, 0x36aull << 40, 0x36bull << 40,
+ 0x34eull << 40, 0x34full << 40,
+ 0x31aull << 40, 0x31bull << 40, 0x33aull << 40, 0x33bull << 40,
+ 0x35aull << 40, 0x35bull << 40, 0x37aull << 40, 0x37bull << 40,
+ 0x35eull << 40, 0x35full << 40,
+ 0x380ull << 40, 0x381ull << 40, 0x382ull << 40, 0x383ull << 40,
+ 0x384ull << 40, 0x385ull << 40, 0x386ull << 40, 0x387ull << 40,
+ 0x388ull << 40, 0x389ull << 40,
+ 0x390ull << 40, 0x391ull << 40, 0x392ull << 40, 0x393ull << 40,
+ 0x394ull << 40, 0x395ull << 40, 0x396ull << 40, 0x397ull << 40,
+ 0x398ull << 40, 0x399ull << 40,
+ 0x3a0ull << 40, 0x3a1ull << 40, 0x3a2ull << 40, 0x3a3ull << 40,
+ 0x3a4ull << 40, 0x3a5ull << 40, 0x3a6ull << 40, 0x3a7ull << 40,
+ 0x3a8ull << 40, 0x3a9ull << 40,
+ 0x3b0ull << 40, 0x3b1ull << 40, 0x3b2ull << 40, 0x3b3ull << 40,
+ 0x3b4ull << 40, 0x3b5ull << 40, 0x3b6ull << 40, 0x3b7ull << 40,
+ 0x3b8ull << 40, 0x3b9ull << 40,
+ 0x3c0ull << 40, 0x3c1ull << 40, 0x3c2ull << 40, 0x3c3ull << 40,
+ 0x3c4ull << 40, 0x3c5ull << 40, 0x3c6ull << 40, 0x3c7ull << 40,
+ 0x3c8ull << 40, 0x3c9ull << 40,
+ 0x3d0ull << 40, 0x3d1ull << 40, 0x3d2ull << 40, 0x3d3ull << 40,
+ 0x3d4ull << 40, 0x3d5ull << 40, 0x3d6ull << 40, 0x3d7ull << 40,
+ 0x3d8ull << 40, 0x3d9ull << 40,
+ 0x3e0ull << 40, 0x3e1ull << 40, 0x3e2ull << 40, 0x3e3ull << 40,
+ 0x3e4ull << 40, 0x3e5ull << 40, 0x3e6ull << 40, 0x3e7ull << 40,
+ 0x3e8ull << 40, 0x3e9ull << 40,
+ 0x3f0ull << 40, 0x3f1ull << 40, 0x3f2ull << 40, 0x3f3ull << 40,
+ 0x3f4ull << 40, 0x3f5ull << 40, 0x3f6ull << 40, 0x3f7ull << 40,
+ 0x3f8ull << 40, 0x3f9ull << 40,
+ 0x38aull << 40, 0x38bull << 40, 0x3aaull << 40, 0x3abull << 40,
+ 0x3caull << 40, 0x3cbull << 40, 0x3eaull << 40, 0x3ebull << 40,
+ 0x3ceull << 40, 0x3cfull << 40,
+ 0x39aull << 40, 0x39bull << 40, 0x3baull << 40, 0x3bbull << 40,
+ 0x3daull << 40, 0x3dbull << 40, 0x3faull << 40, 0x3fbull << 40,
+ 0x3deull << 40, 0x3dfull << 40,
+ 0x00cull << 40, 0x00dull << 40, 0x10cull << 40, 0x10dull << 40,
+ 0x20cull << 40, 0x20dull << 40, 0x30cull << 40, 0x30dull << 40,
+ 0x02eull << 40, 0x02full << 40,
+ 0x01cull << 40, 0x01dull << 40, 0x11cull << 40, 0x11dull << 40,
+ 0x21cull << 40, 0x21dull << 40, 0x31cull << 40, 0x31dull << 40,
+ 0x03eull << 40, 0x03full << 40,
+ 0x02cull << 40, 0x02dull << 40, 0x12cull << 40, 0x12dull << 40,
+ 0x22cull << 40, 0x22dull << 40, 0x32cull << 40, 0x32dull << 40,
+ 0x12eull << 40, 0x12full << 40,
+ 0x03cull << 40, 0x03dull << 40, 0x13cull << 40, 0x13dull << 40,
+ 0x23cull << 40, 0x23dull << 40, 0x33cull << 40, 0x33dull << 40,
+ 0x13eull << 40, 0x13full << 40,
+ 0x04cull << 40, 0x04dull << 40, 0x14cull << 40, 0x14dull << 40,
+ 0x24cull << 40, 0x24dull << 40, 0x34cull << 40, 0x34dull << 40,
+ 0x22eull << 40, 0x22full << 40,
+ 0x05cull << 40, 0x05dull << 40, 0x15cull << 40, 0x15dull << 40,
+ 0x25cull << 40, 0x25dull << 40, 0x35cull << 40, 0x35dull << 40,
+ 0x23eull << 40, 0x23full << 40,
+ 0x06cull << 40, 0x06dull << 40, 0x16cull << 40, 0x16dull << 40,
+ 0x26cull << 40, 0x26dull << 40, 0x36cull << 40, 0x36dull << 40,
+ 0x32eull << 40, 0x32full << 40,
+ 0x07cull << 40, 0x07dull << 40, 0x17cull << 40, 0x17dull << 40,
+ 0x27cull << 40, 0x27dull << 40, 0x37cull << 40, 0x37dull << 40,
+ 0x33eull << 40, 0x33full << 40,
+ 0x00eull << 40, 0x00full << 40, 0x10eull << 40, 0x10full << 40,
+ 0x20eull << 40, 0x20full << 40, 0x30eull << 40, 0x30full << 40,
+ 0x06eull << 40, 0x06full << 40,
+ 0x01eull << 40, 0x01full << 40, 0x11eull << 40, 0x11full << 40,
+ 0x21eull << 40, 0x21full << 40, 0x31eull << 40, 0x31full << 40,
+ 0x07eull << 40, 0x07full << 40,
+ 0x08cull << 40, 0x08dull << 40, 0x18cull << 40, 0x18dull << 40,
+ 0x28cull << 40, 0x28dull << 40, 0x38cull << 40, 0x38dull << 40,
+ 0x0aeull << 40, 0x0afull << 40,
+ 0x09cull << 40, 0x09dull << 40, 0x19cull << 40, 0x19dull << 40,
+ 0x29cull << 40, 0x29dull << 40, 0x39cull << 40, 0x39dull << 40,
+ 0x0beull << 40, 0x0bfull << 40,
+ 0x0acull << 40, 0x0adull << 40, 0x1acull << 40, 0x1adull << 40,
+ 0x2acull << 40, 0x2adull << 40, 0x3acull << 40, 0x3adull << 40,
+ 0x1aeull << 40, 0x1afull << 40,
+ 0x0bcull << 40, 0x0bdull << 40, 0x1bcull << 40, 0x1bdull << 40,
+ 0x2bcull << 40, 0x2bdull << 40, 0x3bcull << 40, 0x3bdull << 40,
+ 0x1beull << 40, 0x1bfull << 40,
+ 0x0ccull << 40, 0x0cdull << 40, 0x1ccull << 40, 0x1cdull << 40,
+ 0x2ccull << 40, 0x2cdull << 40, 0x3ccull << 40, 0x3cdull << 40,
+ 0x2aeull << 40, 0x2afull << 40,
+ 0x0dcull << 40, 0x0ddull << 40, 0x1dcull << 40, 0x1ddull << 40,
+ 0x2dcull << 40, 0x2ddull << 40, 0x3dcull << 40, 0x3ddull << 40,
+ 0x2beull << 40, 0x2bfull << 40,
+ 0x0ecull << 40, 0x0edull << 40, 0x1ecull << 40, 0x1edull << 40,
+ 0x2ecull << 40, 0x2edull << 40, 0x3ecull << 40, 0x3edull << 40,
+ 0x3aeull << 40, 0x3afull << 40,
+ 0x0fcull << 40, 0x0fdull << 40, 0x1fcull << 40, 0x1fdull << 40,
+ 0x2fcull << 40, 0x2fdull << 40, 0x3fcull << 40, 0x3fdull << 40,
+ 0x3beull << 40, 0x3bfull << 40,
+ 0x08eull << 40, 0x08full << 40, 0x18eull << 40, 0x18full << 40,
+ 0x28eull << 40, 0x28full << 40, 0x38eull << 40, 0x38full << 40,
+ 0x0eeull << 40, 0x0efull << 40,
+ 0x09eull << 40, 0x09full << 40, 0x19eull << 40, 0x19full << 40,
+ 0x29eull << 40, 0x29full << 40, 0x39eull << 40, 0x39full << 40,
+ 0x0feull << 40, 0x0ffull << 40
+};
diff --git a/gcc-4.9/libgcc/config/libbid/bid_binarydecimal.c b/gcc-4.9/libgcc/config/libbid/bid_binarydecimal.c
new file mode 100644
index 000000000..52a5fd1aa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_binarydecimal.c
@@ -0,0 +1,147479 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+// Counting leading zeros in an unsigned 32-bit word
+// The "_nz" version will return the wrong answer (31) for zero inputs
+
+#define CLZ32_MASK16 0xFFFF0000ul
+#define CLZ32_MASK8 0xFF00FF00ul
+#define CLZ32_MASK4 0xF0F0F0F0ul
+#define CLZ32_MASK2 0xCCCCCCCCul
+#define CLZ32_MASK1 0xAAAAAAAAul
+
+#define clz32_nz(n) \
+ (((((n) & CLZ32_MASK16) <= ((n) & ~CLZ32_MASK16)) ? 16 : 0) + \
+ ((((n) & CLZ32_MASK8) <= ((n) & ~CLZ32_MASK8)) ? 8 : 0) + \
+ ((((n) & CLZ32_MASK4) <= ((n) & ~CLZ32_MASK4)) ? 4 : 0) + \
+ ((((n) & CLZ32_MASK2) <= ((n) & ~CLZ32_MASK2)) ? 2 : 0) + \
+ ((((n) & CLZ32_MASK1) <= ((n) & ~CLZ32_MASK1)) ? 1 : 0))
+
+#define clz32(n) (((n)==0) ? 32 : clz32_nz(n))
+
+// Counting trailing zeros in an unsigned 32-bit word
+// The ctz32_1bit version is for a single bit
+
+#define ctz32_1bit(n) \
+ ((((n) & ~CLZ32_MASK16) ? 0 : 16) + \
+ (((n) & ~CLZ32_MASK8) ? 0 : 8) + \
+ (((n) & ~CLZ32_MASK4) ? 0 : 4) + \
+ (((n) & ~CLZ32_MASK2) ? 0 : 2) + \
+ (((n) & ~CLZ32_MASK1) ? 0 : 1))
+
+#define ctz32(n) (((n) == 0) ? 32 : ctz32_1bit((n) & -(n)))
+
+// Counting leading zeros in an unsigned 64-bit word
+// The "_nz" version will return the wrong answer (63) for zero inputs
+
+#define CLZ64_MASK32 0xFFFFFFFF00000000ull
+#define CLZ64_MASK16 0xFFFF0000FFFF0000ull
+#define CLZ64_MASK8 0xFF00FF00FF00FF00ull
+#define CLZ64_MASK4 0xF0F0F0F0F0F0F0F0ull
+#define CLZ64_MASK2 0xCCCCCCCCCCCCCCCCull
+#define CLZ64_MASK1 0xAAAAAAAAAAAAAAAAull
+
+#define clz64_nz(n) \
+ (((((n) & CLZ64_MASK32) <= ((n) & ~CLZ64_MASK32)) ? 32 : 0) + \
+ ((((n) & CLZ64_MASK16) <= ((n) & ~CLZ64_MASK16)) ? 16 : 0) + \
+ ((((n) & CLZ64_MASK8) <= ((n) & ~CLZ64_MASK8)) ? 8 : 0) + \
+ ((((n) & CLZ64_MASK4) <= ((n) & ~CLZ64_MASK4)) ? 4 : 0) + \
+ ((((n) & CLZ64_MASK2) <= ((n) & ~CLZ64_MASK2)) ? 2 : 0) + \
+ ((((n) & CLZ64_MASK1) <= ((n) & ~CLZ64_MASK1)) ? 1 : 0)) \
+
+#define clz64(n) (((n)==0) ? 64 : clz64_nz(n))
+
+// Counting trailing zeros in an unsigned 64-bit word
+// The ctz64_1bit version is for a single bit
+
+#define ctz64_1bit(n) \
+ ((((n) & ~CLZ64_MASK32) ? 0 : 32) + \
+ (((n) & ~CLZ64_MASK16) ? 0 : 16) + \
+ (((n) & ~CLZ64_MASK8) ? 0 : 8) + \
+ (((n) & ~CLZ64_MASK4) ? 0 : 4) + \
+ (((n) & ~CLZ64_MASK2) ? 0 : 2) + \
+ (((n) & ~CLZ64_MASK1) ? 0 : 1))
+
+#define ctz64(n) (((n) == 0) ? 64 : ctz64_1bit((n) & -(n)))
+
+// Counting leading zeros in an unsigned 2-part 128-bit word
+
+#define clz128(n_hi,n_lo) (((n_hi) == 0) ? 64 + clz64(n_lo) : clz64_nz(n_hi))
+
+// Counting trailing zeros in a 2-part 128-bit word
+
+#define ctz128(hi,lo) (((lo) == 0) ? 64 + ctz64(hi) : ctz64(lo))
+
+// Shift 2-part 2^64 * hi + lo left by "c" bits
+// The "short" form requires a shift 0 < c < 64 and will be faster
+// Note that shifts of 64 can't be relied on as ANSI
+
+#define sll128_short(hi,lo,c) \
+ ((hi) = ((hi) << (c)) + ((lo)>>(64-(c))), \
+ (lo) = (lo) << (c) \
+ )
+
+#define sll128(hi,lo,c) \
+ (((c) == 0) ? hi = hi, lo = lo : \
+ (((c) >= 64) ? hi = lo << ((c) - 64), lo = 0 : sll128_short(hi,lo,c)))
+
+// Shift 2-part 2^64 * hi + lo right by "c" bits
+// The "short" form requires a shift 0 < c < 64 and will be faster
+// Note that shifts of 64 can't be relied on as ANSI
+
+#define srl128_short(hi,lo,c) \
+ ((lo) = ((hi) << (64 - (c))) + ((lo) >> (c)), \
+ (hi) = (hi) >> (c) \
+ )
+
+#define srl128(hi,lo,c) \
+ (((c) == 0) ? hi = hi, lo = lo : \
+ (((c) >= 64) ? lo = hi >> ((c) - 64), hi = 0 : srl128_short(hi,lo,c)))
+
+// Shift 4-part 2^196 * x3 + 2^128 * x2 + 2^64 * x1 + x0
+// right by "c" bits (must have c < 64)
+
+#define srl256(x3,x2,x1,x0,c) \
+ ((x0) = ((x1) << (64 - (c))) + ((x0) >> (c)), \
+ (x1) = ((x2) << (64 - (c))) + ((x1) >> (c)), \
+ (x2) = ((x3) << (64 - (c))) + ((x2) >> (c)), \
+ (x3) = (x3) >> (c) \
+ )
+
+// Compare "<" two 2-part unsigned integers
+
+#define lt128(x_hi,x_lo,y_hi,y_lo) \
+ (((x_hi) < (y_hi)) || (((x_hi) == (y_hi)) && ((x_lo) < (y_lo))))
+
+// Likewise "<="
+
+#define le128(x_hi,x_lo,y_hi,y_lo) \
+ (((x_hi) < (y_hi)) || (((x_hi) == (y_hi)) && ((x_lo) <= (y_lo))))
+
+// 128x256->384 bit multiplication (missing from existing macros)
+// I derived this by propagating (A).w[2] = 0 in __mul_192x256_to_448
+
+#define __mul_128x256_to_384(P, A, B) \
+{ \
+UINT512 P0,P1; \
+UINT64 CY; \
+ __mul_64x256_to_320(P0, (A).w[0], B); \
+ __mul_64x256_to_320(P1, (A).w[1], B); \
+ (P).w[0] = P0.w[0]; \
+ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \
+ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \
+ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \
+ __add_carry_in_out((P).w[4],CY,P1.w[3],P0.w[4],CY); \
+ (P).w[5] = P1.w[4] + CY; \
+}
+
+// Multiply a 64-bit number by 10, getting "carry" and "sum"
+
+#define __mul_10x64(sum,carryout,input,carryin) \
+{ unsigned long long s3 = (input) + ((input) >> 2); \
+ (carryout) = ((s3 < (unsigned long long)(input))<<3) + (s3>>61); \
+ s3 = (s3<<3) + ((input&3)<<1); \
+ (sum) = s3 + (carryin); \
+ if ((unsigned long long)(sum) < s3) ++(carryout); \
+}
+
+// Multiply a 256-bit number by 10, assuming no overflow
+
+#define __mul_10x256_to_256(p3,p2,p1,p0,a3,a2,a1,a0) \
+{ unsigned long long c0,c1,c2,c3; \
+ __mul_10x64(p0,c0,a0,0ull); \
+ __mul_10x64(p1,c1,a1,c0); \
+ __mul_10x64(p2,c2,a2,c1); \
+ __mul_10x64(p3,c3,a3,c2); \
+}
+
+// Set up indices for low and high parts, depending on the endian-ness.
+// Note that this only affects 128-bit input and output operands, not any
+// of the internal workings, where w[0] is always the low-order part.
+
+#if BID_BIG_ENDIAN
+typedef union {
+ struct {
+ unsigned short hi;
+ unsigned short lo1;
+ unsigned short lo2;
+ unsigned short lo3;
+ unsigned short lo4;
+ unsigned short pad;
+ unsigned pad128;
+ } i;
+ BINARY80 f;
+}
+BID_BINARY80LDOUBLE;
+#else
+typedef union {
+ struct {
+ unsigned short lo4;
+ unsigned short lo3;
+ unsigned short lo2;
+ unsigned short lo1;
+ unsigned short hi;
+ unsigned short pad;
+ unsigned pad128;
+ } i;
+ BINARY80 f;
+}
+BID_BINARY80LDOUBLE;
+#endif
+
+// Pack and return binary floating-point numbers from raw fields
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_binary32(s,e,c) \
+ { union {UINT32 i; float f; } x_out; \
+ x_out.i = (((UINT32)(s)) << 31) + \
+ (((UINT32)(e)) << 23) + \
+ (c); \
+ return x_out.f; \
+}
+#else
+#define return_binary32(s,e,c) \
+ { union {UINT32 i; float f; } x_out; \
+ x_out.i = (((UINT32)(s)) << 31) + \
+ (((UINT32)(e)) << 23) + \
+ (c); \
+ *pres = x_out.f; \
+ return; \
+}
+#endif
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_binary64(s,e,c) \
+ { union {UINT64 i; double f; } x_out; \
+ x_out.i = (((UINT64)(s)) << 63) + \
+ (((UINT64)(e)) << 52) + \
+ (c); \
+ return x_out.f; \
+ }
+#else
+#define return_binary64(s,e,c) \
+ { union {UINT64 i; double f; } x_out; \
+ x_out.i = (((UINT64)(s)) << 63) + \
+ (((UINT64)(e)) << 52) + \
+ (c); \
+ *pres = x_out.f; \
+ return; \
+ }
+#endif
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_binary80(s,e,c) \
+ { BID_BINARY80LDOUBLE x_out; \
+ x_out.i.pad128 = 0; \
+ x_out.i.pad = 0; \
+ x_out.i.lo4 = (c)&0xffff; \
+ x_out.i.lo3 = ((c)&0xffff0000) >> 16; \
+ x_out.i.lo2 = ((c)&0xffff00000000ull) >> 32; \
+ x_out.i.lo1 = ((c)&0xffff000000000000ull) >> 48; \
+ x_out.i.hi = (((UINT64)(s)) << 15) + \
+ (e); \
+ return x_out.f; \
+ }
+#else
+#define return_binary80(s,e,c) \
+ { BID_BINARY80LDOUBLE x_out; \
+ x_out.i.pad128 = 0; \
+ x_out.i.pad = 0; \
+ x_out.i.lo4 = (c)&0xffff; \
+ x_out.i.lo3 = ((c)&0xffff0000) >> 16; \
+ x_out.i.lo2 = ((c)&0xffff00000000ull) >> 32; \
+ x_out.i.lo1 = ((c)&0xffff000000000000ull) >> 48; \
+ x_out.i.hi = ((s) << 15) + \
+ (e); \
+ *pres = x_out.f; \
+ return; \
+ }
+#endif
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_binary128(s,e,c_hi,c_lo) \
+ { union {UINT128 i; BINARY128 f; } x_out; \
+ x_out.i.w[LOW_128W] = (c_lo); \
+ x_out.i.w[HIGH_128W] = (((UINT64)(s)) << 63) + \
+ (((UINT64)(e)) << 48) + \
+ (c_hi); \
+ return x_out.f; \
+ }
+#else
+#define return_binary128(s,e,c_hi,c_lo) \
+ { union {UINT128 i; BINARY128 f; } x_out; \
+ x_out.i.w[LOW_128W] = (c_lo); \
+ x_out.i.w[HIGH_128W] = (((UINT64)(s)) << 63) + \
+ (((UINT64)(e)) << 48) + \
+ (c_hi); \
+ *pres = x_out.f; \
+ return; \
+ }
+#endif
+
+// Special cases of returning zero, infinity, NaN as binary FP
+// Take parameters for the sign, and for NaN the significand
+
+#define return_binary32_zero(s) return_binary32(s,0,0)
+#define return_binary32_inf(s) return_binary32(s,255,0)
+#define return_binary32_nan(s,c_hi,c_lo) \
+ return_binary32(s,255,(c_hi>>42)+(1ul<<22))
+
+#define return_binary64_zero(s) return_binary64(s,0,0)
+#define return_binary64_inf(s) return_binary64(s,2047,0)
+#define return_binary64_nan(s,c_hi,c_lo) \
+ return_binary64(s,2047,(c_hi>>13)+(1ull<<51))
+
+#define return_binary80_zero(s) return_binary80(s,0,0)
+#define return_binary80_inf(s) return_binary80(s,32767,(1ull<<63))
+#define return_binary80_nan(s,c_hi,c_lo) \
+ return_binary80(s,32767,(c_hi>>2)+(3ull<<62))
+
+#define return_binary128_zero(s) return_binary128(s,0,0,0)
+#define return_binary128_inf(s) return_binary128(s,32767,0,0)
+#define return_binary128_nan(s,c_hi,c_lo) \
+ return_binary128(s,32767,(c_hi>>17)+(1ull<<47),((c_lo>>17)+(c_hi<<47)))
+
+// Return finite values of maximal magnitude in the various formats
+
+#define return_binary32_max(s) return_binary32(s,254,((1ul<<23)-1ul))
+#define return_binary64_max(s) return_binary64(s,2046,((1ull<<52)-1ull))
+#define return_binary80_max(s) return_binary80(s,32766,0xFFFFFFFFFFFFFFFFull)
+#define return_binary128_max(s) \
+ return_binary128(s,32766,((1ull<<48)-1ull),0xFFFFFFFFFFFFFFFFull)
+
+#define return_bid32_max(s) return_bid32(s,191,9999999ul)
+#define return_bid64_max(s) return_bid64(s,767,9999999999999999ull)
+#define return_bid128_max(s) \
+ return_bid128(s,12287,542101086242752ull,4003012203950112767ull)
+
+// Handle overflow by either infinity or maximal value as appropriate
+
+#define return_binary32_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_binary32_max(s) \
+ else return_binary32_inf(s) \
+}
+
+#define return_binary64_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_binary64_max(s) \
+ else return_binary64_inf(s) \
+}
+
+#define return_binary80_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_binary80_max(s) \
+ else return_binary80_inf(s) \
+}
+
+#define return_binary128_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_binary128_max(s) \
+ else return_binary128_inf(s) \
+}
+
+#define return_bid32_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_bid32_max(s) \
+ else return_bid32_inf(s) \
+}
+
+#define return_bid64_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_bid64_max(s) \
+ else return_bid64_inf(s) \
+}
+
+#define return_bid128_ovf(s) \
+{ if ((rnd_mode==ROUNDING_TO_ZERO) || \
+ (rnd_mode==((s!=0) ? ROUNDING_UP : ROUNDING_DOWN))) \
+ return_bid128_max(s) \
+ else return_bid128_inf(s) \
+}
+
+// Unpack binary floating-point number x into
+//
+// int s (sign in the LSB)
+// int e (true "integer" exponent)
+// c (normalized coefficient with explicit 1 bit)
+// t (trailing zero count, valid in normalized case only)
+// [c_hi,c_lo in the case of quad]
+//
+// Call the given zero, infinity or nan macros if appropriate
+
+#define unpack_binary32(x,s,e,c,t,zero,inf,nan) \
+{ union { UINT32 i; float f; } x_in; \
+ x_in.f = x; \
+ c = x_in.i; \
+ e = (c >> 23) & ((1ull<<8)-1); \
+ s = c >> 31; \
+ c = c & ((1ull<<23)-1); \
+ if (e == 0) \
+ { int l; \
+ if (c == 0) zero; \
+ l = clz32(c) - (32 - 24); \
+ c = c << l; \
+ e = -(l + 149); \
+ t = 0; \
+ *pfpsf |= DENORMAL_EXCEPTION; \
+ } \
+ else if (e == ((1ull<<8)-1)) \
+ { if (c == 0) inf; \
+ if ((c&(1ul<<22))==0) *pfpsf |= INVALID_EXCEPTION; \
+ nan(s,(((unsigned long long) c)) << 42,0ull) \
+ } \
+ else \
+ { c += 1ull<<23; \
+ t = ctz32(c); \
+ e -= 150; \
+ } \
+}
+
+#define unpack_binary64(x,s,e,c,t,zero,inf,nan) \
+{ union { UINT64 i; double f; } x_in; \
+ x_in.f = x; \
+ c = x_in.i; \
+ e = (c >> 52) & ((1ull<<11)-1); \
+ s = c >> 63; \
+ c = c & ((1ull<<52)-1); \
+ if (e == 0) \
+ { int l; \
+ if (c == 0) zero; \
+ l = clz64(c) - (64 - 53); \
+ c = c << l; \
+ e = -(l + 1074); \
+ t = 0; \
+ *pfpsf |= DENORMAL_EXCEPTION; \
+ } \
+ else if (e == ((1ull<<11)-1)) \
+ { if (c == 0) inf; \
+ if ((c&(1ull<<51))==0) *pfpsf |= INVALID_EXCEPTION; \
+ nan(s,(((unsigned long long) c) << 13),0ull) \
+ } \
+ else \
+ { c += 1ull<<52; \
+ t = ctz64(c); \
+ e -= 1075; \
+ } \
+}
+
+#define unpack_binary80(x,s,e,c,t,zero,inf,nan) \
+{ BID_BINARY80LDOUBLE x_in; \
+ x_in.f = x; \
+ c = x_in.i.lo4 + ((UINT64)x_in.i.lo3 << 16) + \
+ ((UINT64)x_in.i.lo2 << 32) + ((UINT64)x_in.i.lo1 << 48); \
+ e = x_in.i.hi; \
+ s = e >> 15; \
+ e = (e & ((1<<15)-1)); \
+ if (e == 0) \
+ { int l; \
+ if (c == 0) zero; \
+ l = clz64(c); \
+ c = c << l; \
+ e -= (l + 16445); \
+ t = 0; \
+ *pfpsf |= DENORMAL_EXCEPTION; \
+ } \
+ else if (e == ((1ull<<15)-1)) \
+ { if ((c & ((1ull<<63)-1)) == 0) inf; \
+ if ((c&(1ull<<62))==0) *pfpsf |= INVALID_EXCEPTION; \
+ nan(s,(((unsigned long long) c) << 2),0ull) \
+ } \
+ else \
+ { t = ctz64(c); \
+ e -= 16446; \
+ } \
+}
+
+#define unpack_binary128(x,s,e,c_hi,c_lo,t,zero,inf,nan) \
+{ union { UINT128 i; BINARY128 f; } x_in; \
+ x_in.f = x; \
+ c_lo = x_in.i.w[LOW_128W]; \
+ c_hi = x_in.i.w[HIGH_128W]; \
+ e = (c_hi >> 48) & ((1ull<<15)-1); \
+ s = c_hi >> 63; \
+ c_hi = c_hi & ((1ull<<48)-1); \
+ if (e == 0) \
+ { int l; \
+ if ((c_hi == 0) && (c_lo == 0)) zero; \
+ l = clz128(c_hi,c_lo) - (128 - 113); \
+ sll128(c_hi,c_lo,l); \
+ e = -(l + 16494); \
+ t = 0; \
+ *pfpsf |= DENORMAL_EXCEPTION; \
+ } \
+ else if (e == ((1ull<<15)-1)) \
+ { if ((c_hi == 0) && (c_lo == 0)) inf; \
+ if ((c_hi&(1ull<<47))==0) *pfpsf |= INVALID_EXCEPTION; \
+ nan(s,((((unsigned long long) c_hi) << 17) + \
+ (((unsigned long long) c_lo) >> 47)), \
+ (((unsigned long long) c_lo) << 17)) \
+ } \
+ else \
+ { c_hi += 1ull<<48; \
+ t = ctz128(c_hi,c_lo); \
+ e -= 16495; \
+ } \
+}
+
+// Pack and return decimal number from raw fields
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_bid32(s,e,c) \
+ { if ((UINT32) (c) < (1ul<<23)) \
+ return (((UINT32) (s) << 31) + ((UINT32) (e) << 23) + (UINT32) (c)); \
+ else \
+ return (((UINT32) (s) << 31) + ((0x3ull<<29) - (1ull<<23)) + \
+ ((UINT32) (e) << 21) + (UINT32) (c)); \
+ }
+#else
+#define return_bid32(s,e,c) \
+ { if ((UINT32) (c) < (1ul<<23)) \
+ *pres = (((UINT32) (s) << 31) + ((UINT32) (e) << 23) + (UINT32) (c)); \
+ else \
+ *pres = (((UINT32) (s) << 31) + ((0x3ull<<29) - (1ull<<23)) + \
+ ((UINT32) (e) << 21) + (UINT32) (c)); \
+ return; \
+ }
+#endif
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_bid64(s,e,c) \
+ { if ((c) < (1ull<<53)) \
+ return (((UINT64) (s) << 63) + ((UINT64) (e) << 53) + (c)); \
+ else \
+ return (((UINT64) (s) << 63) + ((0x3ull<<61) - (1ull<<53)) + \
+ ((UINT64) (e) << 51) + (c)); \
+ }
+#else
+#define return_bid64(s,e,c) \
+ { if ((c) < (1ull<<53)) \
+ *pres = (((UINT64) (s) << 63) + ((UINT64) (e) << 53) + (c)); \
+ else \
+ *pres = (((UINT64) (s) << 63) + ((0x3ull<<61) - (1ull<<53)) + \
+ ((UINT64) (e) << 51) + (c)); \
+ return; \
+ }
+#endif
+
+#if !DECIMAL_CALL_BY_REFERENCE
+#define return_bid128(s,e,c_hi,c_lo) \
+ { UINT128 x_out; \
+ x_out.w[LOW_128W] = c_lo; \
+ x_out.w[HIGH_128W] = ((UINT64) (s) << 63) + ((UINT64) (e) << 49) + \
+ (c_hi); \
+ return x_out; \
+ }
+#else
+#define return_bid128(s,e,c_hi,c_lo) \
+ { UINT128 x_out; \
+ x_out.w[LOW_128W] = c_lo; \
+ x_out.w[HIGH_128W] = ((UINT64) (s) << 63) + ((UINT64) (e) << 49) + (c_hi); \
+ *pres = x_out; \
+ return; \
+ }
+#endif
+
+// Special cases of returning zero, infinity, NaN as decimal FP
+// Take parameters for the sign, and for NaN the significand
+
+#define return_bid32_zero(s) return_bid32(s,101,0)
+#define return_bid32_inf(s) return_bid32(s,(0xF<<4),0)
+#define return_bid32_nan(s,c_hi,c_lo) \
+ return_bid32(s,(0x1F<<3),(((c_hi>>44) > 999999ul) ? 0 : (c_hi>>44)));
+
+#define return_bid64_zero(s) return_bid64(s,398,0)
+#define return_bid64_inf(s) return_bid64(s,(0xF<<6),0)
+#define return_bid64_nan(s,c_hi,c_lo) \
+ return_bid64(s,(0x1F<<5), \
+ (((c_hi>>14) > 999999999999999ull) ? 0 : (c_hi>>14)));
+
+#define return_bid128_zero(s) return_bid128(s,6176,0,0)
+#define return_bid128_inf(s) return_bid128(s,(0xF<<10),0,0)
+#define return_bid128_nan(s,c_hi,c_lo) \
+ { if (lt128(54210108624275ull,4089650035136921599ull, \
+ (c_hi>>18),((c_lo>>18)+(c_hi<<46)))) \
+ return_bid128(s,(0x1F<<9),0ull,0ull) \
+ else return_bid128(s,(0x1F<<9),(c_hi>>18),((c_lo>>18)+(c_hi<<46))) \
+ }
+
+// Unpack decimal floating-point number x into sign,exponent,coefficient
+// In special cases, call the macros provided
+// Coefficient is normalized in the binary sense with postcorrection k,
+// so that x = 10^e * c / 2^k and the range of c is:
+//
+// 2^23 <= c < 2^24 (decimal32)
+// 2^53 <= c < 2^54 (decimal64)
+// 2^112 <= c < 2^113 (decimal128)
+
+#define unpack_bid32(x,s,e,k,c,zero,inf,nan) \
+{ s = x >> 31; \
+ if ((x & (3ull<<29)) == (3ull<<29)) \
+ { if ((x & (0xFull<<27)) == (0xFull<<27)) \
+ { if ((x & (0x1Full<<26)) != (0x1Full<<26)) inf; \
+ if ((x & (1ul<<25))!=0) *pfpsf |= INVALID_EXCEPTION; \
+ nan(s,((((x) & 0xFFFFul) > 999999ul) ? 0 : \
+ (((unsigned long long) x) << 44)),0ull); \
+ } \
+ e = ((x >> 21) & ((1ull<<8)-1)) - 101; \
+ c = (1ull<<23) + (x & ((1ull<<21)-1)); \
+ if ((unsigned long)(c) > 9999999ul) c = 0; \
+ k = 0; \
+ } \
+ else \
+ { e = ((x >> 23) & ((1ull<<8)-1)) - 101; \
+ c = x & ((1ull<<23)-1); \
+ if (c == 0) zero; \
+ k = clz32(c) - 8; \
+ c = c << k; \
+ } \
+}
+
+#define unpack_bid64(x,s,e,k,c,zero,inf,nan) \
+{ s = x >> 63; \
+ if ((x & (3ull<<61)) == (3ull<<61)) \
+ { if ((x & (0xFull<<59)) == (0xFull<<59)) \
+ { if ((x & (0x1Full<<58)) != (0x1Full<<58)) inf; \
+ if ((x & (1ull<<57))!=0) *pfpsf |= INVALID_EXCEPTION; \
+ nan(s,((((x) & 0x3FFFFFFFFFFFFull) > 999999999999999ull) ? 0 : \
+ (((unsigned long long) x) << 14)),0ull); \
+ } \
+ e = ((x >> 51) & ((1ull<<10)-1)) - 398; \
+ c = (1ull<<53) + (x & ((1ull<<51)-1)); \
+ if ((unsigned long long)(c) > 9999999999999999ull) c = 0; \
+ k = 0; \
+ } \
+ else \
+ { e = ((x >> 53) & ((1ull<<10)-1)) - 398; \
+ c = x & ((1ull<<53)-1); \
+ if (c == 0) zero; \
+ k = clz64(c) - 10; \
+ c = c << k; \
+ } \
+}
+
+#define unpack_bid128(x,s,e,k,c,zero,inf,nan) \
+{ s = x.w[HIGH_128W] >> 63; \
+ if ((x.w[HIGH_128W] & (3ull<<61)) == (3ull<<61)) \
+ { if ((x.w[HIGH_128W] & (0xFull<<59)) == (0xFull<<59)) \
+ { if ((x.w[HIGH_128W] & (0x1Full<<58)) != (0x1Full<<58)) inf; \
+ if ((x.w[HIGH_128W] & (1ull<<57))!=0) \
+ *pfpsf |= INVALID_EXCEPTION; \
+ if (lt128(54210108624275ull,4089650035136921599ull, \
+ (x.w[HIGH_128W] & 0x3FFFFFFFFFFFull),x.w[LOW_128W])) \
+ nan(s,0ull,0ull); \
+ nan(s,((((unsigned long long) x.w[HIGH_128W]) << 18) + \
+ (((unsigned long long) x.w[LOW_128W]) >> 46)), \
+ (((unsigned long long) x.w[LOW_128W]) << 18)); \
+ } \
+ zero; \
+ } \
+ else \
+ { e = ((x.w[HIGH_128W] >> 49) & ((1ull<<14)-1)) - 6176; \
+ c.w[1] = x.w[HIGH_128W] & ((1ull<<49)-1); \
+ c.w[0] = x.w[LOW_128W]; \
+ if (lt128(542101086242752ull,4003012203950112767ull, \
+ c.w[1],c.w[0])) \
+ { c.w[1] = 0ull; c.w[0] = 0ull; } \
+ if ((c.w[1] == 0) && (c.w[0] == 0)) zero; \
+ k = clz128(c.w[1],c.w[0]) - 15; \
+ sll128(c.w[1],c.w[0],k); \
+ } \
+}
+
+// Rounding boundaries table, indexed by
+// 4 * rounding_mode + 2 * sign + lsb of truncation
+// We round up if the round/sticky data is strictly > this boundary
+//
+// NB: This depends on the particular values of the rounding mode
+// numbers, which are supposed to be defined as here:
+//
+// #define ROUNDING_TO_NEAREST 0x00000
+// #define ROUNDING_DOWN 0x00001
+// #define ROUNDING_UP 0x00002
+// #define ROUNDING_TO_ZERO 0x00003
+// #define ROUNDING_TIES_AWAY 0x00004
+//
+// Some of the shortcuts below in "underflow after rounding" also use
+// the concrete values.
+//
+// So we add a directive here to double-check that this is the case
+
+#if ((ROUNDING_TO_NEAREST!=0) || (ROUNDING_DOWN!=1) || \
+ (ROUNDING_UP!=2) || (ROUNDING_TO_ZERO!=3) || \
+ (ROUNDING_TIES_AWAY!=4))
+#error "Rounding mode numbers don't match tables for binary/decimal conversion"
+#endif
+
+static const UINT128 roundbound_128[] = { {{0ull, (1ull << 63)}}, // ROUNDING_TO_NEAREST | positive | even
+{{~0ull, (1ull << 63) - 1}}, // ROUNDING_TO_NEAREST | positive | odd
+{{0ull, (1ull << 63)}}, // ROUNDING_TO_NEAREST | negative | even
+{{~0ull, (1ull << 63) - 1}}, // ROUNDING_TO_NEAREST | negative | odd
+
+{{~0ull, ~0ull}}, // ROUNDING_DOWN | positive | even
+{{~0ull, ~0ull}}, // ROUNDING_DOWN | positive | odd
+{{0ull, 0ull}}, // ROUNDING_DOWN | negative | even
+{{0ull, 0ull}}, // ROUNDING_DOWN | negative | odd
+
+{{0ull, 0ull}}, // ROUNDING_UP | positive | even
+{{0ull, 0ull}}, // ROUNDING_UP | positive | odd
+{{~0ull, ~0ull}}, // ROUNDING_UP | negative | even
+{{~0ull, ~0ull}}, // ROUNDING_UP | negative | odd
+
+{{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | positive | even
+{{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | positive | odd
+{{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | negative | even
+{{~0ull, ~0ull}}, // ROUNDING_TO_ZERO | negative | odd
+
+{{~0ull, (1ull << 63) - 1}}, // ROUNDING_TIES_AWAY | positive | even
+{{~0ull, (1ull << 63) - 1}}, // ROUNDING_TIES_AWAY | positive | odd
+{{~0ull, (1ull << 63) - 1}}, // ROUNDING_TIES_AWAY | negative | even
+{{~0ull, (1ull << 63) - 1}} // ROUNDING_TIES_AWAY | negative | odd
+};
+
+// Table of powers of 5
+
+static const UINT128 power_five[] = { {{1ull, 0ull}},
+{{5ull, 0ull}},
+{{25ull, 0ull}},
+{{125ull, 0ull}},
+{{625ull, 0ull}},
+{{3125ull, 0ull}},
+{{15625ull, 0ull}},
+{{78125ull, 0ull}},
+{{390625ull, 0ull}},
+{{1953125ull, 0ull}},
+{{9765625ull, 0ull}},
+{{48828125ull, 0ull}},
+{{244140625ull, 0ull}},
+{{1220703125ull, 0ull}},
+{{6103515625ull, 0ull}},
+{{30517578125ull, 0ull}},
+{{152587890625ull, 0ull}},
+{{762939453125ull, 0ull}},
+{{3814697265625ull, 0ull}},
+{{19073486328125ull, 0ull}},
+{{95367431640625ull, 0ull}},
+{{476837158203125ull, 0ull}},
+{{2384185791015625ull, 0ull}},
+{{11920928955078125ull, 0ull}},
+{{59604644775390625ull, 0ull}},
+{{298023223876953125ull, 0ull}},
+{{1490116119384765625ull, 0ull}},
+{{7450580596923828125ull, 0ull}},
+{{359414837200037393ull, 2ull}},
+{{1797074186000186965ull, 10ull}},
+{{8985370930000934825ull, 50ull}},
+{{8033366502585570893ull, 252ull}},
+{{3273344365508751233ull, 1262ull}},
+{{16366721827543756165ull, 6310ull}},
+{{8046632842880574361ull, 31554ull}},
+{{3339676066983768573ull, 157772ull}},
+{{16698380334918842865ull, 788860ull}},
+{{9704925379756007861ull, 3944304ull}},
+{{11631138751360936073ull, 19721522ull}},
+{{2815461535676025517ull, 98607613ull}},
+{{14077307678380127585ull, 493038065ull}},
+{{15046306170771983077ull, 2465190328ull}},
+{{1444554559021708921ull, 12325951644ull}},
+{{7222772795108544605ull, 61629758220ull}},
+{{17667119901833171409ull, 308148791101ull}},
+{{14548623214327650581ull, 1540743955509ull}},
+{{17402883850509598057ull, 7703719777548ull}},
+{{13227442957709783821ull, 38518598887744ull}},
+{{10796982567420264257ull, 192592994438723ull}}
+};
+
+
+// Tables of values for the various conversions:
+//
+// exponents: table of output exponents
+// breakpoints: test values to decide between two possible exponents
+// multipliers1/multipliers2: corresponding reciprocal multipliers
+// coefflimits: used in exactness checks
+//
+
+static const UINT128 breakpoints_binary32[] =
+ { {{17291492046443221751ull, 474778387287989ull}},
+{{17522542451896487724ull, 379822709830391ull}},
+{{10328685146775279856ull, 303858167864313ull}},
+{{12836547420098537447ull, 486173068582901ull}},
+{{6579889121336919634ull, 388938454866321ull}},
+{{1574562482327625384ull, 311150763893057ull}},
+{{6208648786466110938ull, 497841222228891ull}},
+{{1277570214430978427ull, 398272977783113ull}},
+{{8400753801028603388ull, 318618382226490ull}},
+{{13441206081645765421ull, 509789411562384ull}},
+{{14442313680058522660ull, 407831529249907ull}},
+{{4175153314562997481ull, 326265223399926ull}},
+{{17748291747526526940ull, 522024357439881ull}},
+{{10509284583279311229ull, 417619485951905ull}},
+{{8407427666623448983ull, 334095588761524ull}},
+{{2383837822371787403ull, 534552942018439ull}},
+{{5596419072639340246ull, 427642353614751ull}},
+{{787786443369561873ull, 342113882891801ull}},
+{{12328504753617029967ull, 547382212626881ull}},
+{{6173454988151713650ull, 437905770101505ull}},
+{{4938763990521370920ull, 350324616081204ull}},
+{{15280720014318014119ull, 560519385729926ull}},
+{{8535227196712500972ull, 448415508583941ull}},
+{{3138832942628090454ull, 358732406867153ull}},
+{{9889763983586293010ull, 286985925493722ull}},
+{{1066227114770427523ull, 459177480789956ull}},
+{{15610376950783983311ull, 367341984631964ull}},
+{{16177650375369096972ull, 293873587705571ull}},
+{{58798897397182893ull, 470197740328915ull}},
+{{47039117917746314ull, 376158192263132ull}},
+{{11105677738559928021ull, 300926553810505ull}},
+{{17769084381695884834ull, 481482486096808ull}},
+{{3147221061130976897ull, 385185988877447ull}},
+{{13585823293130512487ull, 308148791101957ull}},
+{{6979922010041178687ull, 493038065763132ull}},
+{{16651984052258673919ull, 394430452610505ull}},
+{{13321587241806939135ull, 315544362088404ull}},
+{{10246493142665371647ull, 504870979341447ull}},
+{{818496884648476671ull, 403896783473158ull}},
+{{8033495137202601983ull, 323117426778526ull}},
+{{5474894590040342527ull, 516987882845642ull}},
+{{15447962116258004991ull, 413590306276513ull}},
+{{1290323248780673023ull, 330872245021211ull}},
+{{13132563642274807807ull, 529395592033937ull}},
+{{3127353284336025599ull, 423516473627150ull}},
+{{2501882627468820479ull, 338813178901720ull}},
+{{4003012203950112767ull, 542101086242752ull}},
+{{14270456207385821183ull, 433680868994201ull}},
+{{7727016151166746623ull, 346944695195361ull}},
+{{4984528212382973951ull, 555111512312578ull}},
+{{11366320199390199807ull, 444089209850062ull}},
+{{1714358530028339199ull, 355271367880050ull}},
+{{1371486824022671359ull, 284217094304040ull}},
+{{2194378918436274175ull, 454747350886464ull}},
+{{5444851949490929663ull, 363797880709171ull}},
+{{666532744850833407ull, 291038304567337ull}},
+{{4755801206503243775ull, 465661287307739ull}},
+{{7493989779944505343ull, 372529029846191ull}},
+{{2305843009213693951ull, 298023223876953ull}},
+{{18446744073709551615ull, 476837158203124ull}},
+{{18446744073709551615ull, 381469726562499ull}},
+{{18446744073709551615ull, 305175781249999ull}},
+{{18446744073709551615ull, 488281249999999ull}},
+{{18446744073709551615ull, 390624999999999ull}},
+{{18446744073709551615ull, 312499999999999ull}},
+{{18446744073709551615ull, 499999999999999ull}},
+{{18446744073709551615ull, 399999999999999ull}},
+{{18446744073709551615ull, 319999999999999ull}},
+{{18446744073709551615ull, 511999999999999ull}},
+{{18446744073709551615ull, 409599999999999ull}},
+{{18446744073709551615ull, 327679999999999ull}},
+{{18446744073709551615ull, 524287999999999ull}},
+{{18446744073709551615ull, 419430399999999ull}},
+{{18446744073709551615ull, 335544319999999ull}},
+{{18446744073709551615ull, 536870911999999ull}},
+{{18446744073709551615ull, 429496729599999ull}},
+{{18446744073709551615ull, 343597383679999ull}},
+{{18446744073709551615ull, 549755813887999ull}},
+{{18446744073709551615ull, 439804651110399ull}},
+{{18446744073709551615ull, 351843720888319ull}},
+{{18446744073709551615ull, 281474976710655ull}},
+{{11068046444225730969ull, 450359962737049ull}},
+{{12543785970122495098ull, 360287970189639ull}},
+{{13724377590839906402ull, 288230376151711ull}},
+{{14580306515860029597ull, 461168601842738ull}},
+{{596198768462292708ull, 368934881474191ull}},
+{{15234354273737475459ull, 295147905179352ull}},
+{{9617571579012319442ull, 472236648286964ull}},
+{{11383406077951765876ull, 377789318629571ull}},
+{{5417376047619502378ull, 302231454903657ull}},
+{{12357150490933114128ull, 483570327845851ull}},
+{{6196371578004580979ull, 386856262276681ull}},
+{{1267748447661754460ull, 309485009821345ull}},
+{{2028397516258807136ull, 495176015714152ull}},
+{{12690764457232776679ull, 396140812571321ull}},
+{{6463262751044311020ull, 316912650057057ull}},
+{{14030569216412807955ull, 507060240091291ull}},
+{{7535106558388336041ull, 405648192073033ull}},
+{{13406782876194489479ull, 324518553658426ull}},
+{{14072154972427362520ull, 519229685853482ull}},
+{{3879026348458069369ull, 415383748682786ull}},
+{{17860616337734096788ull, 332306998946228ull}},
+{{6440893251923092922ull, 531691198313966ull}},
+{{1463365786796564015ull, 425352958651173ull}},
+{{8549390258921071858ull, 340282366920938ull}},
+{{9989675599531804650ull, 544451787073501ull}},
+{{4302391664883533397ull, 435561429658801ull}},
+{{18199308590874468010ull, 348449143727040ull}},
+{{10672149671689597200ull, 557518629963265ull}},
+{{8537719737351677760ull, 446014903970612ull}},
+{{17898222234107073178ull, 356811923176489ull}},
+{{18007926602027568865ull, 285449538541191ull}},
+{{2987240860050737922ull, 456719261665907ull}},
+{{13457839132266321307ull, 365375409332725ull}},
+{{10766271305813057046ull, 292300327466180ull}},
+{{17226034089300891273ull, 467680523945888ull}},
+{{2712780827214982049ull, 374144419156711ull}},
+{{16927619920739626932ull, 299315535325368ull}},
+{{4948098984731941152ull, 478904856520590ull}},
+{{3958479187785552922ull, 383123885216472ull}}
+};
+
+static const int exponents_binary32[] = { -27,
+ -24,
+ -21,
+ -17,
+ -14,
+ -11,
+ -7,
+ -4,
+ -1,
+ 3,
+ 6,
+ 9,
+ 13,
+ 16,
+ 19,
+ 23,
+ 26,
+ 29,
+ 33,
+ 36,
+ 39,
+ 43,
+ 46,
+ 49,
+ 52,
+ 56,
+ 59,
+ 62,
+ 66,
+ 69,
+ 72,
+ 76,
+ 79,
+ 82,
+ 86,
+ 89,
+ 92,
+ 96,
+ 99,
+ 102,
+ 106,
+ 109,
+ 112,
+ 116,
+ 119,
+ 122,
+ 126,
+ 129,
+ 132,
+ 136,
+ 139,
+ 142,
+ 145,
+ 149,
+ 152,
+ 155,
+ 159,
+ 162,
+ 165,
+ 169,
+ 172,
+ 175,
+ 179,
+ 182,
+ 185,
+ 189,
+ 192,
+ 195,
+ 199,
+ 202,
+ 205,
+ 209,
+ 212,
+ 215,
+ 219,
+ 222,
+ 225,
+ 229,
+ 232,
+ 235,
+ 238,
+ 242,
+ 245,
+ 248,
+ 252,
+ 255,
+ 258,
+ 262,
+ 265,
+ 268,
+ 272,
+ 275,
+ 278,
+ 282,
+ 285,
+ 288,
+ 292,
+ 295,
+ 298,
+ 302,
+ 305,
+ 308,
+ 312,
+ 315,
+ 318,
+ 322,
+ 325,
+ 328,
+ 332,
+ 335,
+ 338,
+ 341,
+ 345,
+ 348,
+ 351,
+ 355,
+ 358,
+ 361,
+ 365,
+ 368,
+};
+
+static const UINT256 multipliers1_binary32[] =
+ { {{6013890151484785128ull, 7481633477359093489ull,
+ 655737588518723529ull, 651851512427ull}},
+{{12129048707783369314ull, 13963727865126254765ull,
+ 14654730040930568123ull, 814814390533ull}},
+{{1326252829447047930ull, 12842973812980430553ull,
+ 4483354495881046442ull, 1018517988167ull}},
+{{12358123064472874716ull, 12638544651540156999ull,
+ 9719625587566735882ull, 636573742604ull}},
+{{10835967812163705491ull, 6574808777570420441ull,
+ 12149531984458419853ull, 795717178255ull}},
+{{18156645783632019768ull, 12830196990390413455ull,
+ 10575228962145636912ull, 994646472819ull}},
+{{18265432642411094211ull, 8018873118994008409ull,
+ 4303675092127329118ull, 621654045512ull}},
+{{8996732747731704052ull, 800219361887734704ull, 5379593865159161398ull,
+ 777067556890ull}},
+{{11245915934664630065ull, 10223646239214444188ull,
+ 15947864368303727555ull, 971334446112ull}},
+{{16252069496020169599ull, 4083935890295333665ull,
+ 9967415230189829722ull, 607084028820ull}},
+{{6480028814743048286ull, 14328291899723942890ull,
+ 12459269037737287152ull, 758855036025ull}},
+{{17323408055283586166ull, 17910364874654928612ull,
+ 1739028241889445228ull, 948568795032ull}},
+{{1603757997697465546ull, 1970606009804554575ull,
+ 1086892651180903268ull, 592855496895ull}},
+{{15839755552403995644ull, 2463257512255693218ull,
+ 15193673869258292797ull, 741069371118ull}},
+{{10576322403650218747ull, 7690757908747004427ull,
+ 9768720299718090188ull, 926336713898ull}},
+{{4304358493067692765ull, 14030095729821653575ull,
+ 10717136205751194271ull, 578960446186ull}},
+{{768762097907228052ull, 12925933643849679065ull,
+ 4173048220334217031ull, 723700557733ull}},
+{{5572638640811422969ull, 11545731036384710927ull,
+ 9827996293845159193ull, 904625697166ull}},
+{{10400428178148221212ull, 298552870099362473ull,
+ 1530811665225836592ull, 565391060729ull}},
+{{17612221241112664419ull, 373191087624203091ull,
+ 6525200599959683644ull, 706738825911ull}},
+{{17403590532963442619ull, 466488859530253864ull,
+ 3544814731522216651ull, 883423532389ull}},
+{{10877244083102151637ull, 16432456601702266329ull,
+ 4521352216415079358ull, 552139707743ull}},
+{{18208241122305077450ull, 11317198715273057103ull,
+ 1040004252091461294ull, 690174634679ull}},
+{{18148615384453958909ull, 4923126357236545571ull,
+ 15135063370396490330ull, 862718293348ull}},
+{{18074083212140060732ull, 15377279983400457772ull,
+ 472085139286061296ull, 1078397866686ull}},
+{{2072929970732762150ull, 9610799989625286108ull,
+ 14130111267335952022ull, 673998666678ull}},
+{{2591162463415952687ull, 2790127950176831827ull,
+ 8439267047315164220ull, 842498333348ull}},
+{{17074011134552104570ull, 3487659937721039783ull,
+ 10549083809143955275ull, 1053122916685ull}},
+{{17588785986736147213ull, 18320688525571507528ull,
+ 8899020389928665998ull, 658201822928ull}},
+{{3539238409710632400ull, 13677488620109608603ull,
+ 11123775487410832498ull, 822752278660ull}},
+{{18259106067420454212ull, 7873488738282234945ull,
+ 13904719359263540623ull, 1028440348325ull}},
+{{4494412264496702026ull, 11838459489067478697ull,
+ 10996292608753406841ull, 642775217703ull}},
+{{10229701349048265437ull, 963016306052184659ull,
+ 9133679742514370648ull, 803469022129ull}},
+{{8175440667882943892ull, 1203770382565230824ull,
+ 16028785696570351214ull, 1004336277661ull}},
+{{5109650417426839933ull, 14587414544385432977ull,
+ 12323834069570163460ull, 627710173538ull}},
+{{10998749040210937820ull, 18234268180481791221ull,
+ 6181420550107928517ull, 784637716923ull}},
+{{18360122318691060179ull, 8957777170320075314ull,
+ 3115089669207522743ull, 980797146154ull}},
+{{16086762467609300516ull, 12516139759091128927ull,
+ 6558617061682089618ull, 612998216346ull}},
+{{15496767066084237741ull, 6421802662009135351ull,
+ 17421643363957387831ull, 766247770432ull}},
+{{14759272814177909272ull, 3415567309084031285ull,
+ 3330310131237183173ull, 957809713041ull}},
+{{11530388518074887247ull, 4440572577391213505ull,
+ 13610658878091709243ull, 598631070650ull}},
+{{577927592311445347ull, 939029703311628978ull, 7789951560759860746ull,
+ 748288838313ull}},
+{{9945781527244082491ull, 10397159165994312030ull,
+ 14349125469377213836ull, 935361047891ull}},
+{{1604427436100163653ull, 15721596515601220827ull,
+ 6662360409147064695ull, 584600654932ull}},
+{{15840592350407368278ull, 15040309626074138129ull,
+ 8327950511433830869ull, 730750818665ull}},
+{{5965682382727046636ull, 4965328977310508950ull,
+ 15021624157719676491ull, 913438523331ull}},
+{{17563609544486567859ull, 797487601605374141ull,
+ 7082672089361103855ull, 570899077082ull}},
+{{8119453875326046112ull, 14831917557288881389ull,
+ 18076712148556155626ull, 713623846352ull}},
+{{14761003362584945544ull, 9316524909756325928ull,
+ 4149146111985642917ull, 892029807941ull}},
+{{9225627101615590965ull, 8128671077811397657ull,
+ 4899059329204720775ull, 557518629963ull}},
+{{16143719895446876610ull, 5549152828836859167ull,
+ 1512138143078513065ull, 696898287454ull}},
+{{15567963850881207859ull, 11548127054473461863ull,
+ 11113544715702917139ull, 871122859317ull}},
+{{14848268795174121920ull, 9823472799664439425ull, 56872839346482712ull,
+ 1088903574147ull}},
+{{2362638969342744344ull, 6139670499790274641ull,
+ 16176446589087409359ull, 680564733841ull}},
+{{7564984730105818334ull, 3062902106310455397ull,
+ 6385500181077097987ull, 850705917302ull}},
+{{14067916931059660821ull, 17663685688170232958ull,
+ 17205247263201148291ull, 1063382396627ull}},
+{{4180762063484900109ull, 8733960545892701647ull,
+ 8447436530287023730ull, 664613997892ull}},
+{{614266560928737233ull, 1694078645511101251ull,
+ 10559295662858779663ull, 830767497365ull}},
+{{14602891256443085253ull, 15952656362171040275ull,
+ 17810805597000862482ull, 1038459371706ull}},
+{{6820964026063234331ull, 14582096244784288076ull,
+ 15743439516552926955ull, 649037107316ull}},
+{{8526205032579042914ull, 13615934287552972191ull,
+ 1232555321981607078ull, 811296384146ull}},
+{{6046070272296415738ull, 7796545822586439431ull,
+ 10764066189331784656ull, 1014120480182ull}},
+{{10696322947826341692ull, 4872841139116524644ull,
+ 2115855349904977506ull, 633825300114ull}},
+{{13370403684782927115ull, 15314423460750431613ull,
+ 11868191224235997690ull, 792281625142ull}},
+{{2877946550696495182ull, 9919657289083263709ull,
+ 5611866993440221305ull, 990352031428ull}},
+{{4104559603399003441ull, 17729000851745509578ull,
+ 12730788907754914123ull, 618970019642ull}},
+{{14354071541103530109ull, 17549565046254499068ull,
+ 6690114097838866846ull, 773712524553ull}},
+{{17942589426379412636ull, 12713584270963348027ull,
+ 12974328640725971462ull, 967140655691ull}},
+{{8908275382273438946ull, 3334304150924704613ull,
+ 5803112391240038212ull, 604462909807ull}},
+{{15747030246269186586ull, 4167880188655880766ull,
+ 2642204470622659861ull, 755578637259ull}},
+{{10460415770981707425ull, 9821536254247238862ull,
+ 17137813643560488538ull, 944473296573ull}},
+{{1926073838436179237ull, 10750146177331912193ull,
+ 13016976536438999288ull, 590295810358ull}},
+{{7019278316472611950ull, 13437682721664890241ull,
+ 7047848633693973302ull, 737869762948ull}},
+{{13385783914018152841ull, 7573731365226336993ull,
+ 8809810792117466628ull, 922337203685ull}},
+{{1448585918620263670ull, 13956954140121236429ull,
+ 7811974754287110594ull, 576460752303ull}},
+{{6422418416702717491ull, 8222820638296769728ull,
+ 5153282424431500339ull, 720575940379ull}},
+{{8028023020878396864ull, 5666839779443574256ull,
+ 1829917012111987520ull, 900719925474ull}},
+{{5017514388048998040ull, 3541774862152233910ull,
+ 5755384150997380104ull, 562949953421ull}},
+{{15495265021916023358ull, 4427218577690292387ull,
+ 11805916207174113034ull, 703687441776ull}},
+{{14757395258967641293ull, 14757395258967641292ull,
+ 14757395258967641292ull, 879609302220ull}},
+{{0ull, 0ull, 0ull, 1099511627776ull}},
+{{0ull, 0ull, 0ull, 687194767360ull}},
+{{0ull, 0ull, 0ull, 858993459200ull}},
+{{0ull, 0ull, 0ull, 1073741824000ull}},
+{{0ull, 0ull, 0ull, 671088640000ull}},
+{{0ull, 0ull, 0ull, 838860800000ull}},
+{{0ull, 0ull, 0ull, 1048576000000ull}},
+{{0ull, 0ull, 0ull, 655360000000ull}},
+{{0ull, 0ull, 0ull, 819200000000ull}},
+{{0ull, 0ull, 0ull, 1024000000000ull}},
+{{0ull, 0ull, 0ull, 640000000000ull}},
+{{0ull, 0ull, 0ull, 800000000000ull}},
+{{0ull, 0ull, 0ull, 1000000000000ull}},
+{{0ull, 0ull, 0ull, 625000000000ull}},
+{{0ull, 0ull, 0ull, 781250000000ull}},
+{{0ull, 0ull, 0ull, 976562500000ull}},
+{{0ull, 0ull, 0ull, 610351562500ull}},
+{{0ull, 0ull, 0ull, 762939453125ull}},
+{{0ull, 0ull, 4611686018427387904ull, 953674316406ull}},
+{{0ull, 0ull, 16717361816799281152ull, 596046447753ull}},
+{{0ull, 0ull, 7061644215716937728ull, 745058059692ull}},
+{{0ull, 0ull, 8827055269646172160ull, 931322574615ull}},
+{{0ull, 0ull, 12434438571169939456ull, 582076609134ull}},
+{{0ull, 0ull, 6319676177107648512ull, 727595761418ull}},
+{{0ull, 0ull, 17122967258239336448ull, 909494701772ull}},
+{{0ull, 0ull, 1478482499544809472ull, 568434188608ull}},
+{{0ull, 0ull, 1848103124431011840ull, 710542735760ull}},
+{{0ull, 0ull, 2310128905538764800ull, 888178419700ull}},
+{{0ull, 0ull, 10667202602816503808ull, 555111512312ull}},
+{{0ull, 0ull, 13334003253520629760ull, 693889390390ull}},
+{{0ull, 0ull, 7444132030046011392ull, 867361737988ull}},
+{{0ull, 0ull, 9305165037557514240ull, 1084202172485ull}},
+{{0ull, 0ull, 8121571157687140352ull, 677626357803ull}},
+{{0ull, 0ull, 5540277928681537536ull, 847032947254ull}},
+{{0ull, 0ull, 16148719447706697728ull, 1058791184067ull}},
+{{0ull, 0ull, 7787106645602992128ull, 661744490042ull}},
+{{0ull, 0ull, 510511270148964352ull, 827180612553ull}},
+{{0ull, 0ull, 5249825106113593344ull, 1033975765691ull}},
+{{0ull, 0ull, 975297682107301888ull, 646234853557ull}},
+{{0ull, 0ull, 5830808121061515264ull, 807793566946ull}}
+};
+
+static const UINT256 multipliers2_binary32[] =
+ { {{12230317112597168372ull, 12964188775534322552ull,
+ 9551240831114137572ull, 325925756213ull}},
+{{15287896390746460465ull, 16205235969417903190ull,
+ 16550737057320059869ull, 407407195266ull}},
+{{9886498451578299773ull, 6421486906490215276ull,
+ 11465049284795299029ull, 509258994083ull}},
+{{15402433569091213166ull, 6319272325770078499ull,
+ 4859812793783367941ull, 318286871302ull}},
+{{14641355942936628554ull, 12510776425639986028ull,
+ 15298138029083985734ull, 397858589127ull}},
+{{18301694928670785692ull, 6415098495195206727ull,
+ 14510986517927594264ull, 497323236409ull}},
+{{18356088358060322914ull, 4009436559497004204ull,
+ 2151837546063664559ull, 310827022756ull}},
+{{4498366373865852026ull, 400109680943867352ull, 2689796932579580699ull,
+ 388533778445ull}},
+{{5622957967332315033ull, 14335195156461997902ull,
+ 7973932184151863777ull, 485667223056ull}},
+{{17349406784864860608ull, 2041967945147666832ull,
+ 4983707615094914861ull, 303542014410ull}},
+{{3240014407371524143ull, 7164145949861971445ull,
+ 15453006555723419384ull, 379427518012ull}},
+{{8661704027641793083ull, 8955182437327464306ull, 869514120944722614ull,
+ 474284397516ull}},
+{{10025251035703508581ull, 985303004902277287ull,
+ 9766818362445227442ull, 296427748447ull}},
+{{7919877776201997822ull, 10455000792982622417ull,
+ 7596836934629146398ull, 370534685559ull}},
+{{14511533238679885182ull, 3845378954373502213ull,
+ 4884360149859045094ull, 463168356949ull}},
+{{11375551283388622191ull, 16238419901765602595ull,
+ 5358568102875597135ull, 289480223093ull}},
+{{9607753085808389834ull, 15686338858779615340ull,
+ 11309896147021884323ull, 361850278866ull}},
+{{12009691357260487293ull, 14996237555047131271ull,
+ 4913998146922579596ull, 452312848583ull}},
+{{14423586125928886414ull, 149276435049681236ull,
+ 9988777869467694104ull, 282695530364ull}},
+{{18029482657411108018ull, 186595543812101545ull,
+ 12485972336834617630ull, 353369412955ull}},
+{{8701795266481721310ull, 9456616466619902740ull,
+ 10995779402615884133ull, 441711766194ull}},
+{{14661994078405851627ull, 8216228300851133164ull,
+ 11484048145062315487ull, 276069853871ull}},
+{{18327492598007314533ull, 5658599357636528551ull,
+ 9743374162900506455ull, 345087317339ull}},
+{{18297679729081755263ull, 2461563178618272785ull,
+ 7567531685198245165ull, 431359146674ull}},
+{{9037041606070030366ull, 7688639991700228886ull, 236042569643030648ull,
+ 539198933343ull}},
+{{1036464985366381075ull, 4805399994812643054ull,
+ 7065055633667976011ull, 336999333339ull}},
+{{10518953268562752152ull, 1395063975088415913ull,
+ 4219633523657582110ull, 421249166674ull}},
+{{17760377604130828093ull, 10967202005715295699ull,
+ 14497913941426753445ull, 526561458342ull}},
+{{8794392993368073607ull, 9160344262785753764ull,
+ 4449510194964332999ull, 329100911464ull}},
+{{10992991241710092008ull, 6838744310054804301ull,
+ 5561887743705416249ull, 411376139330ull}},
+{{18352925070565002914ull, 13160116405995893280ull,
+ 16175731716486546119ull, 514220174162ull}},
+{{11470578169103126821ull, 15142601781388515156ull,
+ 14721518341231479228ull, 321387608851ull}},
+{{14338222711378908527ull, 481508153026092329ull,
+ 13790211908111961132ull, 401734511064ull}},
+{{4087720333941471946ull, 601885191282615412ull,
+ 17237764885139951415ull, 502168138830ull}},
+{{11778197245568195775ull, 7293707272192716488ull,
+ 6161917034785081730ull, 313855086769ull}},
+{{14722746556960244718ull, 18340506127095671418ull,
+ 12314082311908740066ull, 392318858461ull}},
+{{9180061159345530090ull, 13702260622014813465ull,
+ 1557544834603761371ull, 490398573077ull}},
+{{17266753270659426066ull, 6258069879545564463ull,
+ 3279308530841044809ull, 306499108173ull}},
+{{16971755569896894679ull, 12434273367859343483ull,
+ 8710821681978693915ull, 383123885216ull}},
+{{16603008443943730444ull, 10931155691396791450ull,
+ 10888527102473367394ull, 478904856520ull}},
+{{14988566295892219432ull, 11443658325550382560ull,
+ 6805329439045854621ull, 299315535325ull}},
+{{288963796155722674ull, 469514851655814489ull, 13118347817234706181ull,
+ 374144419156ull}},
+{{4972890763622041246ull, 5198579582997156015ull,
+ 16397934771543382726ull, 467680523945ull}},
+{{10025585754904857635ull, 17084170294655386221ull,
+ 3331180204573532347ull, 292300327466ull}},
+{{17143668212058459947ull, 16743526849891844872ull,
+ 13387347292571691242ull, 365375409332ull}},
+{{2982841191363523318ull, 11706036525510030283ull,
+ 16734184115714614053ull, 456719261665ull}},
+{{18005176809098059738ull, 9622115837657462878ull,
+ 3541336044680551927ull, 285449538541ull}},
+{{13283098974517798864ull, 7415958778644440694ull,
+ 9038356074278077813ull, 356811923176ull}},
+{{7380501681292472772ull, 13881634491732938772ull,
+ 11297945092847597266ull, 446014903970ull}},
+{{13836185587662571291ull, 13287707575760474636ull,
+ 11672901701457136195ull, 278759314981ull}},
+{{17295231984578214113ull, 11997948451273205391ull,
+ 756069071539256532ull, 348449143727ull}},
+{{17007353962295379738ull, 14997435564091506739ull,
+ 14780144394706234377ull, 435561429658ull}},
+{{16647506434441836768ull, 4911736399832219712ull,
+ 9251808456528017164ull, 544451787073ull}},
+{{10404691521526147980ull, 12293207286749913128ull,
+ 17311595331398480487ull, 340282366920ull}},
+{{13005864401907684975ull, 10754823090010003506ull,
+ 3192750090538548993ull, 425352958651ull}},
+{{7033958465529830411ull, 18055214880939892287ull,
+ 17825995668455349953ull, 531691198313ull}},
+{{11313753068597225863ull, 4366980272946350823ull,
+ 4223718265143511865ull, 332306998946ull}},
+{{9530505317319144425ull, 10070411359610326433ull,
+ 14503019868284165639ull, 415383748682ull}},
+{{16524817665076318435ull, 7976328181085520137ull,
+ 8905402798500431241ull, 519229685853ull}},
+{{3410482013031617166ull, 16514420159246919846ull,
+ 7871719758276463477ull, 324518553658ull}},
+{{13486474553144297265ull, 6807967143776486095ull,
+ 616277660990803539ull, 405648192073ull}},
+{{12246407173002983677ull, 3898272911293219715ull,
+ 5382033094665892328ull, 507060240091ull}},
+{{5348161473913170846ull, 2436420569558262322ull,
+ 1057927674952488753ull, 316912650057ull}},
+{{15908573879246239366ull, 7657211730375215806ull,
+ 5934095612117998845ull, 396140812571ull}},
+{{10662345312203023399ull, 14183200681396407662ull,
+ 2805933496720110652ull, 495176015714ull}},
+{{2052279801699501721ull, 18087872462727530597ull,
+ 6365394453877457061ull, 309485009821ull}},
+{{7177035770551765055ull, 8774782523127249534ull,
+ 12568429085774209231ull, 386856262276ull}},
+{{18194666750044482126ull, 6356792135481674013ull,
+ 15710536357217761539ull, 483570327845ull}},
+{{13677509727991495281ull, 1667152075462352306ull,
+ 12124928232474794914ull, 302231454903ull}},
+{{7873515123134593293ull, 11307312131182716191ull,
+ 10544474272166105738ull, 377789318629ull}},
+{{5230207885490853713ull, 4910768127123619431ull,
+ 17792278858635020077ull, 472236648286ull}},
+{{10186408956072865427ull, 5375073088665956096ull,
+ 6508488268219499644ull, 295147905179ull}},
+{{12733011195091081783ull, 6718841360832445120ull,
+ 3523924316846986651ull, 368934881474ull}},
+{{15916263993863852229ull, 3786865682613168496ull,
+ 13628277432913509122ull, 461168601842ull}},
+{{9947664996164907643ull, 6978477070060618214ull,
+ 13129359413998331105ull, 288230376151ull}},
+{{3211209208351358746ull, 13334782356003160672ull,
+ 11800013249070525977ull, 360287970189ull}},
+{{4014011510439198432ull, 2833419889721787128ull, 914958506055993760ull,
+ 450359962737ull}},
+{{2508757194024499020ull, 1770887431076116955ull,
+ 12101064112353465860ull, 281474976710ull}},
+{{16971004547812787487ull, 2213609288845146193ull,
+ 5902958103587056517ull, 351843720888ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 439804651110ull}},
+{{0ull, 0ull, 0ull, 549755813888ull}},
+{{0ull, 0ull, 0ull, 343597383680ull}},
+{{0ull, 0ull, 0ull, 429496729600ull}},
+{{0ull, 0ull, 0ull, 536870912000ull}},
+{{0ull, 0ull, 0ull, 335544320000ull}},
+{{0ull, 0ull, 0ull, 419430400000ull}},
+{{0ull, 0ull, 0ull, 524288000000ull}},
+{{0ull, 0ull, 0ull, 327680000000ull}},
+{{0ull, 0ull, 0ull, 409600000000ull}},
+{{0ull, 0ull, 0ull, 512000000000ull}},
+{{0ull, 0ull, 0ull, 320000000000ull}},
+{{0ull, 0ull, 0ull, 400000000000ull}},
+{{0ull, 0ull, 0ull, 500000000000ull}},
+{{0ull, 0ull, 0ull, 312500000000ull}},
+{{0ull, 0ull, 0ull, 390625000000ull}},
+{{0ull, 0ull, 0ull, 488281250000ull}},
+{{0ull, 0ull, 0ull, 305175781250ull}},
+{{0ull, 0ull, 9223372036854775808ull, 381469726562ull}},
+{{0ull, 0ull, 2305843009213693952ull, 476837158203ull}},
+{{0ull, 0ull, 17582052945254416384ull, 298023223876ull}},
+{{0ull, 0ull, 3530822107858468864ull, 372529029846ull}},
+{{0ull, 0ull, 13636899671677861888ull, 465661287307ull}},
+{{0ull, 0ull, 6217219285584969728ull, 291038304567ull}},
+{{0ull, 0ull, 3159838088553824256ull, 363797880709ull}},
+{{0ull, 0ull, 8561483629119668224ull, 454747350886ull}},
+{{0ull, 0ull, 739241249772404736ull, 284217094304ull}},
+{{0ull, 0ull, 924051562215505920ull, 355271367880ull}},
+{{0ull, 0ull, 1155064452769382400ull, 444089209850ull}},
+{{0ull, 0ull, 5333601301408251904ull, 277555756156ull}},
+{{0ull, 0ull, 6667001626760314880ull, 346944695195ull}},
+{{0ull, 0ull, 3722066015023005696ull, 433680868994ull}},
+{{0ull, 0ull, 13875954555633532928ull, 542101086242ull}},
+{{0ull, 0ull, 13284157615698345984ull, 338813178901ull}},
+{{0ull, 0ull, 2770138964340768768ull, 423516473627ull}},
+{{0ull, 0ull, 17297731760708124672ull, 529395592033ull}},
+{{0ull, 0ull, 3893553322801496064ull, 330872245021ull}},
+{{0ull, 0ull, 9478627671929257984ull, 413590306276ull}},
+{{0ull, 0ull, 11848284589911572480ull, 516987882845ull}},
+{{0ull, 0ull, 9711020877908426752ull, 323117426778ull}},
+{{0ull, 0ull, 2915404060530757632ull, 403896783473ull}}
+};
+
+// **********************************************************************
+
+static const UINT128 breakpoints_binary64[] =
+ { {{5261314576080512960ull, 21426681862861333ull}},
+{{4728754506986910400ull, 34282690980578133ull}},
+{{11161701235073348928ull, 27426152784462506ull}},
+{{5240012173316768832ull, 21940922227570005ull}},
+{{8384019477306830144ull, 35105475564112008ull}},
+{{14085913211329284736ull, 28084380451289606ull}},
+{{7579381754321517504ull, 22467504361031685ull}},
+{{12127010806914427968ull, 35948006977650696ull}},
+{{6012259830789632064ull, 28758405582120557ull}},
+{{15877854308857436608ull, 23006724465696445ull}},
+{{12702283447085949312ull, 18405379572557156ull}},
+{{12944955885853698240ull, 29448607316091450ull}},
+{{10355964708682958592ull, 23558885852873160ull}},
+{{8284771766946366848ull, 18847108682298528ull}},
+{{9566286012372276672ull, 30155373891677645ull}},
+{{7653028809897821312ull, 24124299113342116ull}},
+{{2433074233176346752ull, 19299439290673693ull}},
+{{203569958340244480ull, 30879102865077909ull}},
+{{3852204781414105920ull, 24703282292062327ull}},
+{{14149810269357015680ull, 19762625833649861ull}},
+{{15260998801487404480ull, 31620201333839778ull}},
+{{1140752596964192576ull, 25296161067071823ull}},
+{{8291299707055174720ull, 20236928853657458ull}},
+{{9576730716546369216ull, 32379086165851933ull}},
+{{15040082202720916032ull, 25903268932681546ull}},
+{{8342716947434822464ull, 20722615146145237ull}},
+{{17037695930637626304ull, 33156184233832379ull}},
+{{17319505559252011392ull, 26524947387065903ull}},
+{{2787558003175878144ull, 21219957909652723ull}},
+{{770743990339494720ull, 33951932655444357ull}},
+{{11684641636497326720ull, 27161546124355485ull}},
+{{9347713309197861376ull, 21729236899484388ull}},
+{{11266992479974667904ull, 34766779039175021ull}},
+{{5324245169237824000ull, 27813423231340017ull}},
+{{15327442579615990144ull, 22250738585072013ull}},
+{{2387815238934122304ull, 35601181736115222ull}},
+{{12978298635373028800ull, 28480945388892177ull}},
+{{3003941278814602368ull, 22784756311113742ull}},
+{{13471199467277412864ull, 18227805048890993ull}},
+{{17864570332901950336ull, 29164488078225589ull}},
+{{17981005081063470592ull, 23331590462580471ull}},
+{{10695455250108866112ull, 18665272370064377ull}},
+{{2355333141206544512ull, 29864435792103004ull}},
+{{5573615327707145920ull, 23891548633682403ull}},
+{{11837589891649537408ull, 19113238906945922ull}},
+{{4182748567671618560ull, 30581182251113476ull}},
+{{18103594113104936128ull, 24464945800890780ull}},
+{{14482875290483948864ull, 19571956640712624ull}},
+{{12104554020548587264ull, 31315130625140199ull}},
+{{13372992031180780160ull, 25052104500112159ull}},
+{{14387742439686534400ull, 20041683600089727ull}},
+{{8262992644530813824ull, 32066693760143564ull}},
+{{10299742930366561344ull, 25653355008114851ull}},
+{{4550445529551338752ull, 20522684006491881ull}},
+{{18348759291507873024ull, 32836294410387009ull}},
+{{18368356247948208704ull, 26269035528309607ull}},
+{{7315987368874746304ull, 21015228422647686ull}},
+{{4326882160715773504ull, 33624365476236298ull}},
+{{10840203358056439424ull, 26899492380989038ull}},
+{{16050860315928972160ull, 21519593904791230ull}},
+{{7234632431776803904ull, 34431350247665969ull}},
+{{9477054760163353472ull, 27545080198132775ull}},
+{{7581643808130682752ull, 22036064158506220ull}},
+{{12130630093009092416ull, 35257702653609952ull}},
+{{2325806444923453248ull, 28206162122887962ull}},
+{{12928691600164493568ull, 22564929698310369ull}},
+{{14032302094873505216ull, 18051943758648295ull}},
+{{4004939278088056704ull, 28883110013837273ull}},
+{{10582649051954265984ull, 23106488011069818ull}},
+{{15844816871047233408ull, 18485190408855854ull}},
+{{14283660549449842560ull, 29576304654169367ull}},
+{{4048230810076053376ull, 23661043723335494ull}},
+{{6927933462802753024ull, 18928834978668395ull}},
+{{11084693540484404864ull, 30286135965869432ull}},
+{{1489057202903703232ull, 24228908772695546ull}},
+{{15948641021290603904ull, 19383127018156436ull}},
+{{18139128004581145600ull, 31013003229050298ull}},
+{{3443255959439185472ull, 24810402583240239ull}},
+{{6443953582293258688ull, 19848322066592191ull}},
+{{2931628102185393280ull, 31757315306547506ull}},
+{{17102697740715955904ull, 25405852245238004ull}},
+{{17371507007314675072ull, 20324681796190403ull}},
+{{5658318323252018176ull, 32519490873904646ull}},
+{{837305843859704192ull, 26015592699123717ull}},
+{{11737891119313494336ull, 20812474159298973ull}},
+{{15091276976159680640ull, 33299958654878357ull}},
+{{4694323951443923840ull, 26639966923902686ull}},
+{{66110346413228736ull, 21311973539122149ull}},
+{{7484474183744986688ull, 34099157662595438ull}},
+{{13366276976479809984ull, 27279326130076350ull}},
+{{10693021581183848000ull, 21823460904061080ull}},
+{{17108834529894156800ull, 34917537446497728ull}},
+{{2619021179689594432ull, 27934029957198183ull}},
+{{9473914573235496192ull, 22347223965758546ull}},
+{{7779565687692973312ull, 35755558345213674ull}},
+{{9913001364896288960ull, 28604446676170939ull}},
+{{11619749906658941440ull, 22883557340936751ull}},
+{{5606451110585242816ull, 18306845872749401ull}},
+{{1591624147452567936ull, 29290953396399042ull}},
+{{12341345762187785280ull, 23432762717119233ull}},
+{{17251774239234048896ull, 18746210173695386ull}},
+{{1777397079581105984ull, 29993936277912619ull}},
+{{5111266478406795072ull, 23995149022330095ull}},
+{{4089013182725436096ull, 19196119217864076ull}},
+{{17610467536586428672ull, 30713790748582521ull}},
+{{10399025214527232640ull, 24571032598866017ull}},
+{{940522542137965440ull, 19656826079092814ull}},
+{{8883533696904565376ull, 31450921726548502ull}},
+{{18174873401749383296ull, 25160737381238801ull}},
+{{10850549906657596288ull, 20128589904991041ull}},
+{{9982182221168333440ull, 32205743847985666ull}},
+{{4296396962192756416ull, 25764595078388533ull}},
+{{10815815199238025792ull, 20611676062710826ull}},
+{{9926606689297020608ull, 32978681700337322ull}},
+{{562587721953795840ull, 26382945360269858ull}},
+{{7828767807046857280ull, 21106356288215886ull}},
+{{5147330861791151040ull, 33770170061145418ull}},
+{{11496562318916741504ull, 27016136048916334ull}},
+{{12886598669875303488ull, 21612908839133067ull}},
+{{5861162612832844352ull, 34580654142612908ull}},
+{{12067627719750096128ull, 27664523314090326ull}},
+{{5964753361058166592ull, 22131618651272261ull}},
+{{2164907748209245888ull, 35410589842035618ull}},
+{{9110623828051217344ull, 28328471873628494ull}},
+{{10977847877182884160ull, 22662777498902795ull}},
+{{8782278301746307328ull, 18130221999122236ull}},
+{{6672947653310271104ull, 29008355198595578ull}},
+{{12717055752132037568ull, 23206684158876462ull}},
+{{2794946972221809408ull, 18565347327101170ull}},
+{{4471915155554895040ull, 29704555723361872ull}},
+{{14645578568669646976ull, 23763644578689497ull}},
+{{4337765225451896960ull, 19010915662951598ull}},
+{{3251075545981124800ull, 30417465060722557ull}},
+{{13668906881010630784ull, 24333972048578045ull}},
+{{10935125504808504640ull, 19467177638862436ull}},
+{{10117503178209786752ull, 31147484222179898ull}},
+{{15472700172051650048ull, 24917987377743918ull}},
+{{1310113693415589056ull, 19934389902195135ull}},
+{{2096181909464942528ull, 31895023843512216ull}},
+{{16434340786539595328ull, 25516019074809772ull}},
+{{5768774999747855616ull, 20412815259847818ull}},
+{{5540691184854658688ull, 32660504415756509ull}},
+{{8121901762625637248ull, 26128403532605207ull}},
+{{17565567854326240768ull, 20902722826084165ull}},
+{{9658164493212433600ull, 33444356521734665ull}},
+{{7726531594569946880ull, 26755485217387732ull}},
+{{17249271719881688448ull, 21404388173910185ull}},
+{{9152090678101149952ull, 34247021078256297ull}},
+{{18389718986706650944ull, 27397616862605037ull}},
+{{7333077559881500096ull, 21918093490084030ull}},
+{{11732924095810400192ull, 35068949584134448ull}},
+{{16765036906132140800ull, 28055159667307558ull}},
+{{2343983080679981632ull, 22444127733846047ull}},
+{{7439721743829880960ull, 35910604374153675ull}},
+{{5951777395063904768ull, 28728483499322940ull}},
+{{4761421916051123840ull, 22982786799458352ull}},
+{{14877183977066630016ull, 18386229439566681ull}},
+{{16424796733822787392ull, 29417967103306690ull}},
+{{13139837387058229888ull, 23534373682645352ull}},
+{{3133172280162763264ull, 18827498946116282ull}},
+{{8702424463002331584ull, 30123998313786051ull}},
+{{3272590755659954944ull, 24099198651028841ull}},
+{{17375467863495605248ull, 19279358920823072ull}},
+{{13043353322625327104ull, 30846974273316916ull}},
+{{6745333843358351360ull, 24677579418653533ull}},
+{{12774964704170501696ull, 19742063534922826ull}},
+{{13061245897188982144ull, 31587301655876522ull}},
+{{3070299088267365056ull, 25269841324701218ull}},
+{{9834936900097712704ull, 20215873059760974ull}},
+{{4667852595930609344ull, 32345396895617559ull}},
+{{7423630891486397760ull, 25876317516494047ull}},
+{{17006951157414849216ull, 20701054013195237ull}},
+{{12453726592896117440ull, 33121686421112380ull}},
+{{9962981274316893952ull, 26497349136889904ull}},
+{{11659733834195425472ull, 21197879309511923ull}},
+{{14966225319970770432ull, 33916606895219077ull}},
+{{4594282626492795712ull, 27133285516175262ull}},
+{{14743472545419967552ull, 21706628412940209ull}},
+{{12521509628446217088ull, 34730605460704335ull}},
+{{10017207702756973632ull, 27784484368563468ull}},
+{{15392463791689399552ull, 22227587494850774ull}},
+{{13559895622477308352ull, 35564139991761239ull}},
+{{14537265312723756992ull, 28451311993408991ull}},
+{{7940463435437095296ull, 22761049594727193ull}},
+{{13731068377833496832ull, 18208839675781754ull}},
+{{10901662960307864000ull, 29134143481250807ull}},
+{{1342632738762470592ull, 23307314785000646ull}},
+{{15831501449977617728ull, 18645851828000516ull}},
+{{17951704690480367744ull, 29833362924800826ull}},
+{{10672014937642383872ull, 23866690339840661ull}},
+{{4848263135371996800ull, 19093352271872529ull}},
+{{15135918646079015488ull, 30549363634996046ull}},
+{{8419386102121302080ull, 24439490907996837ull}},
+{{17803555325922772608ull, 19551592726397469ull}},
+{{17417642077250705216ull, 31282548362235951ull}},
+{{10244764847058653888ull, 25026038689788761ull}},
+{{4506463062905012736ull, 20020830951831009ull}},
+{{14589038530131841088ull, 32033329522929614ull}},
+{{15360579638847383168ull, 25626663618343691ull}},
+{{8599114896335996224ull, 20501330894674953ull}},
+{{10069235019395683648ull, 32802129431479925ull}},
+{{8055388015516546880ull, 26241703545183940ull}},
+{{6444310412413237504ull, 20993362836147152ull}},
+{{14000245474603090368ull, 33589380537835443ull}},
+{{132149935456741312ull, 26871504430268355ull}},
+{{105719948365393024ull, 21497203544214684ull}},
+{{7547849546868449536ull, 34395525670743494ull}},
+{{9727628452236669952ull, 27516420536594795ull}},
+{{7782102761789335936ull, 22013136429275836ull}},
+{{5072666789379116928ull, 35221018286841338ull}},
+{{11436831060987114176ull, 28176814629473070ull}},
+{{9149464848789691328ull, 22541451703578456ull}},
+{{3630223064289842752ull, 18033161362862765ull}},
+{{5808356902863748416ull, 28853058180580424ull}},
+{{8336034337032909056ull, 23082446544464339ull}},
+{{10358176284368237568ull, 18465957235571471ull}},
+{{9194384425505359424ull, 29545531576914354ull}},
+{{11044856355146197888ull, 23636425261531483ull}},
+{{16214582713600778944ull, 18909140209225186ull}},
+{{117890638567874048ull, 30254624334760299ull}},
+{{3783661325596209536ull, 24203699467808239ull}},
+{{6716277875218877952ull, 19362959574246591ull}},
+{{3367346970866384128ull, 30980735318794546ull}},
+{{17451272835660748544ull, 24784588255035636ull}},
+{{10271669453786688512ull, 19827670604028509ull}},
+{{5366624681832970688ull, 31724272966445615ull}},
+{{4293299745466376576ull, 25379418373156492ull}},
+{{14502686240598832192ull, 20303534698525193ull}},
+{{1068205096506669632ull, 32485655517640310ull}},
+{{854564077205335680ull, 25988524414112248ull}},
+{{8062348891248089216ull, 20790819531289798ull}},
+{{9210409411255032384ull, 33265311250063677ull}},
+{{18436373973229756864ull, 26612249000050941ull}},
+{{11059750363841895168ull, 21289799200040753ull}},
+{{14006251767405121984ull, 34063678720065205ull}},
+{{11205001413924097600ull, 27250942976052164ull}},
+{{12653349945881188352ull, 21800754380841731ull}},
+{{12866662283926080768ull, 34881207009346770ull}},
+{{10293329827140864640ull, 27904965607477416ull}},
+{{4545315046970781376ull, 22323972485981933ull}},
+{{3583155260411339840ull, 35718355977571093ull}},
+{{10245221837812892544ull, 28574684782056874ull}},
+{{11885526284992224320ull, 22859747825645499ull}},
+{{13197769842735689792ull, 18287798260516399ull}},
+{{10048385304151372736ull, 29260477216826239ull}},
+{{11728057058063008512ull, 23408381773460991ull}},
+{{5693096831708496448ull, 18726705418768793ull}},
+{{5419606115991684032ull, 29962728670030069ull}},
+{{8025033707535257536ull, 23970182936024055ull}},
+{{6420026966028206016ull, 19176146348819244ull}},
+{{17650740775128950336ull, 30681834158110790ull}},
+{{14120592620103160256ull, 24545467326488632ull}},
+{{3917776466598707520ull, 19636373861190906ull}},
+{{17336488790783663040ull, 31418198177905449ull}},
+{{17558539847368840768ull, 25134558542324359ull}},
+{{17736180692636982912ull, 20107646833859487ull}},
+{{13620493849251531392ull, 32172234934175180ull}},
+{{10896395079401225152ull, 25737787947340144ull}},
+{{12406464878262890432ull, 20590230357872115ull}},
+{{1403599731511073088ull, 32944368572595385ull}},
+{{1122879785208858432ull, 26355494858076308ull}},
+{{8277001457650907392ull, 21084395886461046ull}},
+{{5864504702757631232ull, 33735033418337674ull}},
+{{8380952576948015296ull, 26988026734670139ull}},
+{{10394110876300322560ull, 21590421387736111ull}},
+{{9251879772596695424ull, 34544674220377778ull}},
+{{14780201447561177024ull, 27635739376302222ull}},
+{{4445463528565120960ull, 22108591501041778ull}},
+{{3423392830962283200ull, 35373746401666845ull}},
+{{2738714264769826560ull, 28298997121333476ull}},
+{{16948366670783502528ull, 22639197697066780ull}},
+{{13558693336626802048ull, 18111358157653424ull}},
+{{10625862894377152256ull, 28978173052245479ull}},
+{{12190039130243632128ull, 23182538441796383ull}},
+{{17130728933678726336ull, 18546030753437106ull}},
+{{1583724590692589952ull, 29673649205499371ull}},
+{{16024374931521713216ull, 23738919364399496ull}},
+{{9130151130475460224ull, 18991135491519597ull}},
+{{18297590623502646720ull, 30385816786431355ull}},
+{{14638072498802117376ull, 24308653429145084ull}},
+{{15399806813783604224ull, 19446922743316067ull}},
+{{9882295643086125504ull, 31115076389305708ull}},
+{{15284534143952721024ull, 24892061111444566ull}},
+{{8538278500420266496ull, 19913648889155653ull}},
+{{9971896785930516096ull, 31861838222649045ull}},
+{{7977517428744412864ull, 25489470578119236ull}},
+{{2692665128253619968ull, 20391576462495389ull}},
+{{11686961834689612608ull, 32626522339992622ull}},
+{{1970871838267869440ull, 26101217871994098ull}},
+{{8955395100098116160ull, 20880974297595278ull}},
+{{10639283345415075584ull, 33409558876152445ull}},
+{{8511426676332060480ull, 26727647100921956ull}},
+{{3119792526323738048ull, 21382117680737565ull}},
+{{4991668042117980864ull, 34211388289180104ull}},
+{{7682683248436295040ull, 27369110631344083ull}},
+{{13524844228232856640ull, 21895288505075266ull}},
+{{14261053135688750016ull, 35032461608120426ull}},
+{{7719493693809089664ull, 28025969286496341ull}},
+{{2486246140305361408ull, 22420775429197073ull}},
+{{288645009746667968ull, 35873240686715317ull}},
+{{11298962452023065344ull, 28698592549372253ull}},
+{{16417867591102272896ull, 22958874039497802ull}},
+{{5755596443397997696ull, 18367099231598242ull}},
+{{12898303124178706624ull, 29387358770557187ull}},
+{{2939944869859144640ull, 23509887016445750ull}},
+{{2351955895887315712ull, 18807909613156600ull}},
+{{3763129433419705152ull, 30092655381050560ull}},
+{{3010503546735764096ull, 24074124304840448ull}},
+{{9787100466872431936ull, 19259299443872358ull}},
+{{11970011932253980800ull, 30814879110195773ull}},
+{{16954707175287005248ull, 24651903288156618ull}},
+{{2495719296003873216ull, 19721522630525295ull}},
+{{3993150873606197184ull, 31554436208840472ull}},
+{{14262567143110688704ull, 25243548967072377ull}},
+{{4031356085004730304ull, 20194839173657902ull}},
+{{10139518550749478848ull, 32311742677852643ull}},
+{{15490312470083403712ull, 25849394142282114ull}},
+{{16081598790808633280ull, 20679515313825691ull}},
+{{18351860435809992640ull, 33087224502121106ull}},
+{{10992139533906083776ull, 26469779601696885ull}},
+{{8793711627124867008ull, 21175823681357508ull}},
+{{10380589788657876928ull, 33881317890172013ull}},
+{{15683169460410122176ull, 27105054312137610ull}},
+{{12546535568328097728ull, 21684043449710088ull}},
+{{16385108094583046080ull, 34694469519536141ull}},
+{{9418737660924526528ull, 27755575615628913ull}},
+{{14913687758223441856ull, 22204460492503130ull}},
+{{5415156339447955392ull, 35527136788005009ull}},
+{{8021473886300274624ull, 28421709430404007ull}},
+{{17485225553265950656ull, 22737367544323205ull}},
+{{13988180442612760512ull, 18189894035458564ull}},
+{{11313042263954685888ull, 29103830456733703ull}},
+{{16429131440647569344ull, 23283064365386962ull}},
+{{5764607523034234816ull, 18626451492309570ull}},
+{{9223372036854775744ull, 29802322387695312ull}},
+{{18446744073709551552ull, 23841857910156249ull}},
+{{18446744073709551552ull, 19073486328124999ull}},
+{{18446744073709551552ull, 30517578124999999ull}},
+{{18446744073709551552ull, 24414062499999999ull}},
+{{18446744073709551552ull, 19531249999999999ull}},
+{{18446744073709551552ull, 31249999999999999ull}},
+{{18446744073709551552ull, 24999999999999999ull}},
+{{18446744073709551552ull, 19999999999999999ull}},
+{{18446744073709551552ull, 31999999999999999ull}},
+{{18446744073709551552ull, 25599999999999999ull}},
+{{18446744073709551552ull, 20479999999999999ull}},
+{{18446744073709551552ull, 32767999999999999ull}},
+{{18446744073709551552ull, 26214399999999999ull}},
+{{18446744073709551552ull, 20971519999999999ull}},
+{{18446744073709551552ull, 33554431999999999ull}},
+{{18446744073709551552ull, 26843545599999999ull}},
+{{18446744073709551552ull, 21474836479999999ull}},
+{{18446744073709551552ull, 34359738367999999ull}},
+{{18446744073709551552ull, 27487790694399999ull}},
+{{18446744073709551552ull, 21990232555519999ull}},
+{{18446744073709551552ull, 35184372088831999ull}},
+{{18446744073709551552ull, 28147497671065599ull}},
+{{18446744073709551552ull, 22517998136852479ull}},
+{{18446744073709551552ull, 18014398509481983ull}},
+{{7378697629483820608ull, 28823037615171174ull}},
+{{9592306918328966784ull, 23058430092136939ull}},
+{{11363194349405083776ull, 18446744073709551ull}},
+{{10802413329564313408ull, 29514790517935282ull}},
+{{1263233034167630080ull, 23611832414348226ull}},
+{{15767981686301745344ull, 18889465931478580ull}},
+{{6782026624373240960ull, 30223145490365729ull}},
+{{9114970114240503040ull, 24178516392292583ull}},
+{{14670673720876223104ull, 19342813113834066ull}},
+{{16094380323918136320ull, 30948500982134506ull}},
+{{9186155444392598720ull, 24758800785707605ull}},
+{{7348924355514078976ull, 19807040628566084ull}},
+{{690232524596795392ull, 31691265005705735ull}},
+{{552186019677436352ull, 25353012004564588ull}},
+{{7820446445225769728ull, 20282409603651670ull}},
+{{12512714312361231552ull, 32451855365842672ull}},
+{{2631473820405164608ull, 25961484292674138ull}},
+{{9483876685807952320ull, 20769187434139310ull}},
+{{15174202697292723712ull, 33230699894622896ull}},
+{{8450013343092268608ull, 26584559915698317ull}},
+{{17828057118699545856ull, 21267647932558653ull}},
+{{6388798501467811456ull, 34028236692093846ull}},
+{{1421689986432338880ull, 27222589353675077ull}},
+{{12205398433371602048ull, 21778071482940061ull}},
+{{12149939863910742656ull, 34844914372704098ull}},
+{{17098649520612414784ull, 27875931498163278ull}},
+{{2610873172264200832ull, 22300745198530623ull}},
+{{488048260880811008ull, 35681192317648997ull}},
+{{11458485052930379776ull, 28544953854119197ull}},
+{{1788090412860483200ull, 22835963083295358ull}},
+{{8809169959772207168ull, 18268770466636286ull}},
+{{6715974306151710848ull, 29230032746618058ull}},
+{{12751477074405189312ull, 23384026197294446ull}},
+{{6511832844782241152ull, 18707220957835557ull}},
+{{14108281366393496128ull, 29931553532536891ull}},
+{{7597276278372886592ull, 23945242826029513ull}},
+{{13456518652182129920ull, 19156194260823610ull}},
+{{3083685769781856256ull, 30649910817317777ull}},
+{{13534995060051216000ull, 24519928653854221ull}},
+{{7138647233299062464ull, 19615942923083377ull}},
+{{15111184388020410240ull, 31385508676933403ull}},
+{{1020901066190597248ull, 25108406941546723ull}},
+{{8195418482436298432ull, 20086725553237378ull}},
+{{9423320757156167168ull, 32138760885179805ull}},
+{{7538656605724933760ull, 25711008708143844ull}},
+{{9720274099321857280ull, 20568806966515075ull}},
+{{15552438558914971712ull, 32910091146424120ull}},
+{{12441950847131977344ull, 26328072917139296ull}},
+{{6264211862963671552ull, 21062458333711437ull}},
+{{13712087795483784832ull, 33699933333938299ull}},
+{{14659019051128938176ull, 26959946667150639ull}},
+{{15416564055645060864ull, 21567957333720511ull}},
+{{17287804859548276736ull, 34508731733952818ull}},
+{{2762197443412890432ull, 27606985387162255ull}},
+{{2209757954730312320ull, 22085588309729804ull}},
+{{10914310357052320384ull, 35336941295567686ull}},
+{{5042099470899945984ull, 28269553036454149ull}},
+{{7723028391461867136ull, 22615642429163319ull}},
+{{9867771527911404032ull, 18092513943330655ull}},
+{{15788434444658246400ull, 28948022309329048ull}},
+{{1562701111500866176ull, 23158417847463239ull}},
+{{4939509703942603264ull, 18526734277970591ull}},
+{{524517896824344576ull, 29642774844752946ull}},
+{{15177009576427116928ull, 23714219875802356ull}},
+{{8452258846399783232ull, 18971375900641885ull}},
+{{13523614154239653184ull, 30354201441027016ull}},
+{{7129542508649812224ull, 24283361152821613ull}},
+{{13082331636403670400ull, 19426688922257290ull}},
+{{2484986544536321088ull, 31082702275611665ull}},
+{{1987989235629056832ull, 24866161820489332ull}},
+{{12658437832728976448ull, 19892929456391465ull}},
+{{1806756458656810688ull, 31828687130226345ull}},
+{{1445405166925448576ull, 25462949704181076ull}},
+{{15913719392508000128ull, 20370359763344860ull}},
+{{7015206954303248640ull, 32592575621351777ull}},
+{{16680212007668329856ull, 26074060497081421ull}},
+{{9654820791392753536ull, 20859248397665137ull}},
+{{690318007260764416ull, 33374797436264220ull}},
+{{552254405808611520ull, 26699837949011376ull}},
+{{15199198783614530496ull, 21359870359209100ull}},
+{{5871973980073697216ull, 34175792574734561ull}},
+{{1008230369317047424ull, 27340634059787649ull}},
+{{4495933110195548288ull, 21872507247830119ull}},
+{{14572190605796697920ull, 34996011596528190ull}},
+{{11657752484637358336ull, 27996809277222552ull}},
+{{1947504358226065984ull, 22397447421778042ull}},
+{{6805355787903615936ull, 35835915874844867ull}},
+{{16512331074548623680ull, 28668732699875893ull}},
+{{2141818415413168000ull, 22934986159900715ull}},
+{{1713454732330534400ull, 18347988927920572ull}},
+{{6430876386470765376ull, 29356782284672915ull}},
+{{5144701109176612288ull, 23485425827738332ull}},
+{{15183807331567020800ull, 18788340662190665ull}},
+{{5847347656797681664ull, 30061345059505065ull}},
+{{4677878125438145344ull, 24049076047604052ull}},
+{{14810348944576247232ull, 19239260838083241ull}},
+{{16317860681838174912ull, 30782817340933186ull}},
+{{9364939730728629632ull, 24626253872746549ull}},
+{{11181300599324814016ull, 19701003098197239ull}},
+{{6822034514693971456ull, 31521604957115583ull}},
+{{12836325241238997824ull, 25217283965692466ull}},
+{{6579711378249287936ull, 20173827172553973ull}},
+{{6838189390456950400ull, 32278123476086357ull}},
+{{16538597956591291264ull, 25822498780869085ull}},
+{{13230878365273033024ull, 20657999024695268ull}},
+{{17480056569694942528ull, 33052798439512429ull}},
+{{17673394070497864320ull, 26442238751609943ull}},
+{{3070668812172560448ull, 21153791001287955ull}},
+{{4913070099476096768ull, 33846065602060728ull}},
+{{11309153709064698048ull, 27076852481648582ull}},
+{{1668625337767937792ull, 21661481985318866ull}},
+{{13737846984654431488ull, 34658371176510185ull}},
+{{10990277587723545152ull, 27726696941208148ull}},
+{{16170919699662656768ull, 22181357552966518ull}},
+{{3737378631008788928ull, 35490172084746430ull}},
+{{2989902904807031104ull, 28392137667797144ull}},
+{{6081271138587535232ull, 22713710134237715ull}},
+{{4865016910870028160ull, 18170968107390172ull}},
+{{11473375872133955392ull, 29073548971824275ull}},
+{{9178700697707164352ull, 23258839177459420ull}},
+{{7342960558165731456ull, 18607071341967536ull}},
+{{4370039263581349696ull, 29771314147148058ull}},
+{{10874729040348900416ull, 23817051317718446ull}},
+{{5010434417537209984ull, 19053641054174757ull}},
+{{11706043882801446336ull, 30485825686679611ull}},
+{{5675486291499246720ull, 24388660549343689ull}},
+{{8229737847941307712ull, 19510928439474951ull}},
+{{5788882927222271680ull, 31217485503159922ull}},
+{{15699152786003548288ull, 24973988402527937ull}},
+{{5180624599319017984ull, 19979190722022350ull}},
+{{8288999358910428800ull, 31966705155235760ull}},
+{{6631199487128343040ull, 25573364124188608ull}},
+{{12683657219186495104ull, 20458691299350886ull}},
+{{12915153921214571520ull, 32733906078961418ull}},
+{{17710820766455477824ull, 26187124863169134ull}},
+{{17858005427906292608ull, 20949699890535307ull}},
+{{13815413425682426880ull, 33519519824856492ull}},
+{{3673633111062120832ull, 26815615859885194ull}},
+{{6628255303591606976ull, 21452492687908155ull}},
+{{10605208485746571200ull, 34323988300653048ull}},
+{{15862864418081077632ull, 27459190640522438ull}},
+{{1622245090239131136ull, 21967352512417951ull}},
+{{13663638588608340736ull, 35147764019868721ull}},
+{{7241562056144762304ull, 28118211215894977ull}},
+{{16861296089141540800ull, 22494568972715981ull}},
+{{1152632039433092992ull, 35991310356345571ull}},
+{{15679500890514115712ull, 28793048285076456ull}},
+{{8854251897669382208ull, 23034438628061165ull}},
+{{7083401518135505792ull, 18427550902448932ull}},
+{{15022791243758719616ull, 29484081443918291ull}},
+{{8328884180265065344ull, 23587265155134633ull}},
+{{14041804973695872896ull, 18869812124107706ull}},
+{{15088190328429576000ull, 30191699398572330ull}},
+{{12070552262743660800ull, 24153359518857864ull}},
+{{13345790624936838976ull, 19322687615086291ull}},
+{{13974567370415121728ull, 30916300184138066ull}},
+{{7490305081590187072ull, 24733040147310453ull}},
+{{13370941694755970304ull, 19786432117848362ull}},
+{{6636111452641911168ull, 31658291388557380ull}},
+{{5308889162113528960ull, 25326633110845904ull}},
+{{7936460144432733440ull, 20261306488676723ull}},
+{{9008987416350463232ull, 32418090381882757ull}},
+{{18275236377306101568ull, 25934472305506205ull}},
+{{14620189101844881216ull, 20747577844404964ull}},
+{{12324256118726079040ull, 33196124551047943ull}},
+{{17238102524464683840ull, 26556899640838354ull}},
+{{17479830834313657408ull, 21245519712670683ull}},
+{{5831636446450389952ull, 33992831540273094ull}},
+{{8354657971902222272ull, 27194265232218475ull}},
+{{6683726377521777792ull, 21755412185774780ull}},
+{{10693962204034844480ull, 34808659497239648ull}},
+{{15933867392711696256ull, 27846927597791718ull}},
+{{1679047469943626048ull, 22277542078233375ull}},
+{{2686475951909801664ull, 35644067325173400ull}},
+{{2149180761527841344ull, 28515253860138720ull}},
+{{1719344609222273024ull, 22812203088110976ull}},
+{{16132870946345459712ull, 18249762470488780ull}},
+{{7365849440443183936ull, 29199619952782049ull}},
+{{9582028367096457472ull, 23359695962225639ull}},
+{{11354971508419076288ull, 18687756769780511ull}},
+{{10789256783986701440ull, 29900410831648818ull}},
+{{16010103056673181824ull, 23920328665319054ull}},
+{{16497431260080455744ull, 19136262932255243ull}},
+{{4259797127677267328ull, 30618020691608390ull}},
+{{3407837702141813824ull, 24494416553286712ull}},
+{{13794316605939182016ull, 19595533242629369ull}},
+{{11002860125276960320ull, 31352853188206991ull}},
+{{5112939285479657920ull, 25082282550565593ull}},
+{{11469049057867546944ull, 20065826040452474ull}},
+{{7282432048362344192ull, 32105321664723959ull}},
+{{9515294453431785664ull, 25684257331779167ull}},
+{{233537933261607872ull, 20547405865423334ull}},
+{{7752358322702393280ull, 32875849384677334ull}},
+{{9891235472903824960ull, 26300679507741867ull}},
+{{534290748839239296ull, 21040543606193494ull}},
+{{8233562827626603520ull, 33664869769909590ull}},
+{{6586850262101282816ull, 26931895815927672ull}},
+{{16337526653906757248ull, 21545516652742137ull}},
+{{11382647387283170304ull, 34472826644387420ull}},
+{{9106117909826536256ull, 27578261315509936ull}},
+{{3595545513119318656ull, 22062609052407949ull}},
+{{13131570450474730496ull, 35300174483852718ull}},
+{{17883953989863605056ull, 28240139587082174ull}},
+{{17996512006632794368ull, 22592111669665739ull}},
+{{18086558420048145792ull, 18073689335732591ull}},
+{{3113051768883661056ull, 28917902937172147ull}},
+{{13558487859332659776ull, 23134322349737717ull}},
+{{3468092657982307200ull, 18507457879790174ull}},
+{{12927645882255512128ull, 29611932607664278ull}},
+{{17720814335288230336ull, 23689546086131422ull}},
+{{6797953838746763648ull, 18951636868905138ull}},
+{{7187377327252911552ull, 30322618990248221ull}},
+{{2060553047060418880ull, 24258095192198577ull}},
+{{12716488881874066048ull, 19406476153758861ull}},
+{{12967684581514685120ull, 31050361846014178ull}},
+{{17752845294695568704ull, 24840289476811342ull}},
+{{6823578606272634304ull, 19872231581449074ull}},
+{{18296423399520035584ull, 31795570530318518ull}},
+{{3569092275390297472ull, 25436456424254815ull}},
+{{2855273820312237952ull, 20349165139403852ull}},
+{{8257786927241491136ull, 32558664223046163ull}},
+{{13984927171277013504ull, 26046931378436930ull}},
+{{11187941737021610816ull, 20837545102749544ull}},
+{{6832660335008846336ull, 33340072164399271ull}},
+{{1776779453265166784ull, 26672057731519417ull}},
+{{12489470006837864384ull, 21337646185215533ull}},
+{{16293803196198672704ull, 34140233896344853ull}},
+{{1966996112733207168ull, 27312187117075883ull}},
+{{8952294519670386368ull, 21849749693660706ull}},
+{{6944973601988797568ull, 34959599509857130ull}},
+{{5555978881591038080ull, 27967679607885704ull}},
+{{8134131920014740736ull, 22374143686308563ull}},
+{{9325262257281674880ull, 35798629898093701ull}},
+{{3770860991083429568ull, 28638903918474961ull}},
+{{17774084051834384960ull, 22911123134779968ull}},
+{{3151220797241777024ull, 18328898507823975ull}},
+{{5041953275586843200ull, 29326237612518360ull}},
+{{4033562620469474560ull, 23460990090014688ull}},
+{{10605547725859400320ull, 18768792072011750ull}},
+{{16968876361375040512ull, 30030067315218800ull}},
+{{13575101089100032384ull, 24024053852175040ull}},
+{{10860080871280025920ull, 19219243081740032ull}},
+{{2618734135080400192ull, 30750788930784052ull}},
+{{13163033752290051072ull, 24600631144627241ull}},
+{{6841078187090130560ull, 19680504915701793ull}},
+{{7256376284602298560ull, 31488807865122869ull}},
+{{9494449842423749184ull, 25191046292098295ull}},
+{{7595559873938999360ull, 20152837033678636ull}},
+{{4774198168818578304ull, 32244539253885818ull}},
+{{11198056164538683264ull, 25795631403108654ull}},
+{{12647793746372856960ull, 20636505122486923ull}},
+{{16547121179454660800ull, 33018408195979077ull}},
+{{5858999314079907968ull, 26414726556783262ull}},
+{{15755245895489657344ull, 21131781245426609ull}},
+{{14140346988557720832ull, 33810849992682575ull}},
+{{11312277590846176640ull, 27048679994146060ull}},
+{{9049822072676941312ull, 21638943995316848ull}},
+{{10790366501541195776ull, 34622310392506957ull}},
+{{1253595571749136000ull, 27697848314005566ull}},
+{{15760271716366950080ull, 22158278651204452ull}},
+{{10459039487219478848ull, 35453245841927124ull}},
+{{12056580404517493376ull, 28362596673541699ull}},
+{{13334613138355905024ull, 22690077338833359ull}},
+{{14357039325426634368ull, 18152061871066687ull}},
+{{8213867661714973696ull, 29043298993706700ull}},
+{{6571094129371978944ull, 23234639194965360ull}},
+{{5256875303497583168ull, 18587711355972288ull}},
+{{4721651670854222720ull, 29740338169555661ull}},
+{{87972521941467840ull, 23792270535644529ull}},
+{{3759726832295084608ull, 19033816428515623ull}},
+{{2326214116930225024ull, 30454106285624997ull}},
+{{12929017737769910976ull, 24363285028499997ull}},
+{{2964516560732108160ull, 19490628022799998ull}},
+{{1053877682429462720ull, 31185004836479997ull}},
+{{11911148590169301120ull, 24948003869183997ull}},
+{{2150221242651620288ull, 19958403095347198ull}},
+{{18197749247210233728ull, 31933444952555516ull}},
+{{10868850583026276672ull, 25546755962044413ull}},
+{{16073778095904841984ull, 20437404769635530ull}},
+{{7271300879738195520ull, 32699847631416849ull}},
+{{9506389518532466752ull, 26159878105133479ull}},
+{{11294460429567883712ull, 20927902484106783ull}},
+{{14381787872566703680ull, 33484643974570853ull}},
+{{437383853827631936ull, 26787715179656683ull}},
+{{7728604712545926208ull, 21430172143725346ull}},
+{{4987069910589661312ull, 34288275429960554ull}},
+{{7679004743213639360ull, 27430620343968443ull}},
+{{13521901424054732096ull, 21944496275174754ull}},
+{{10566995834261840448ull, 35111194040279607ull}},
+{{1074899037925651712ull, 28088955232223686ull}},
+{{15617314489308162624ull, 22471164185778948ull}},
+{{2851610294441598336ull, 35953862697246318ull}},
+{{9659985865037099264ull, 28763090157797054ull}},
+{{11417337506771589760ull, 23010472126237643ull}},
+{{16512567634901092416ull, 18408377700990114ull}},
+{{15352061771616016960ull, 29453404321584183ull}},
+{{1213602973067082560ull, 23562723457267347ull}},
+{{12038928822679397056ull, 18850178765813877ull}},
+{{4504890857319393984ull, 30160286025302204ull}},
+{{7293261500597425472ull, 24128228820241763ull}},
+{{13213306829961761024ull, 19302583056193410ull}},
+{{2694546854229266048ull, 30884132889909457ull}},
+{{13223683927609143808ull, 24707306311927565ull}},
+{{10578947142087315072ull, 19765845049542052ull}},
+{{2168920168372062784ull, 31625352079267284ull}},
+{{5424484949439560576ull, 25300281663413827ull}},
+{{15407634403777379392ull, 20240225330731061ull}},
+{{17273517416559986432ull, 32384360529169698ull}},
+{{2750767489022258176ull, 25907488423335759ull}}
+};
+
+static const int exponents_binary64[] = { -55,
+ -51,
+ -48,
+ -45,
+ -41,
+ -38,
+ -35,
+ -31,
+ -28,
+ -25,
+ -22,
+ -18,
+ -15,
+ -12,
+ -8,
+ -5,
+ -2,
+ 2,
+ 5,
+ 8,
+ 12,
+ 15,
+ 18,
+ 22,
+ 25,
+ 28,
+ 32,
+ 35,
+ 38,
+ 42,
+ 45,
+ 48,
+ 52,
+ 55,
+ 58,
+ 62,
+ 65,
+ 68,
+ 71,
+ 75,
+ 78,
+ 81,
+ 85,
+ 88,
+ 91,
+ 95,
+ 98,
+ 101,
+ 105,
+ 108,
+ 111,
+ 115,
+ 118,
+ 121,
+ 125,
+ 128,
+ 131,
+ 135,
+ 138,
+ 141,
+ 145,
+ 148,
+ 151,
+ 155,
+ 158,
+ 161,
+ 164,
+ 168,
+ 171,
+ 174,
+ 178,
+ 181,
+ 184,
+ 188,
+ 191,
+ 194,
+ 198,
+ 201,
+ 204,
+ 208,
+ 211,
+ 214,
+ 218,
+ 221,
+ 224,
+ 228,
+ 231,
+ 234,
+ 238,
+ 241,
+ 244,
+ 248,
+ 251,
+ 254,
+ 258,
+ 261,
+ 264,
+ 267,
+ 271,
+ 274,
+ 277,
+ 281,
+ 284,
+ 287,
+ 291,
+ 294,
+ 297,
+ 301,
+ 304,
+ 307,
+ 311,
+ 314,
+ 317,
+ 321,
+ 324,
+ 327,
+ 331,
+ 334,
+ 337,
+ 341,
+ 344,
+ 347,
+ 351,
+ 354,
+ 357,
+ 360,
+ 364,
+ 367,
+ 370,
+ 374,
+ 377,
+ 380,
+ 384,
+ 387,
+ 390,
+ 394,
+ 397,
+ 400,
+ 404,
+ 407,
+ 410,
+ 414,
+ 417,
+ 420,
+ 424,
+ 427,
+ 430,
+ 434,
+ 437,
+ 440,
+ 444,
+ 447,
+ 450,
+ 454,
+ 457,
+ 460,
+ 463,
+ 467,
+ 470,
+ 473,
+ 477,
+ 480,
+ 483,
+ 487,
+ 490,
+ 493,
+ 497,
+ 500,
+ 503,
+ 507,
+ 510,
+ 513,
+ 517,
+ 520,
+ 523,
+ 527,
+ 530,
+ 533,
+ 537,
+ 540,
+ 543,
+ 547,
+ 550,
+ 553,
+ 556,
+ 560,
+ 563,
+ 566,
+ 570,
+ 573,
+ 576,
+ 580,
+ 583,
+ 586,
+ 590,
+ 593,
+ 596,
+ 600,
+ 603,
+ 606,
+ 610,
+ 613,
+ 616,
+ 620,
+ 623,
+ 626,
+ 630,
+ 633,
+ 636,
+ 640,
+ 643,
+ 646,
+ 649,
+ 653,
+ 656,
+ 659,
+ 663,
+ 666,
+ 669,
+ 673,
+ 676,
+ 679,
+ 683,
+ 686,
+ 689,
+ 693,
+ 696,
+ 699,
+ 703,
+ 706,
+ 709,
+ 713,
+ 716,
+ 719,
+ 723,
+ 726,
+ 729,
+ 733,
+ 736,
+ 739,
+ 743,
+ 746,
+ 749,
+ 752,
+ 756,
+ 759,
+ 762,
+ 766,
+ 769,
+ 772,
+ 776,
+ 779,
+ 782,
+ 786,
+ 789,
+ 792,
+ 796,
+ 799,
+ 802,
+ 806,
+ 809,
+ 812,
+ 816,
+ 819,
+ 822,
+ 826,
+ 829,
+ 832,
+ 836,
+ 839,
+ 842,
+ 845,
+ 849,
+ 852,
+ 855,
+ 859,
+ 862,
+ 865,
+ 869,
+ 872,
+ 875,
+ 879,
+ 882,
+ 885,
+ 889,
+ 892,
+ 895,
+ 899,
+ 902,
+ 905,
+ 909,
+ 912,
+ 915,
+ 919,
+ 922,
+ 925,
+ 929,
+ 932,
+ 935,
+ 939,
+ 942,
+ 945,
+ 948,
+ 952,
+ 955,
+ 958,
+ 962,
+ 965,
+ 968,
+ 972,
+ 975,
+ 978,
+ 982,
+ 985,
+ 988,
+ 992,
+ 995,
+ 998,
+ 1002,
+ 1005,
+ 1008,
+ 1012,
+ 1015,
+ 1018,
+ 1022,
+ 1025,
+ 1028,
+ 1032,
+ 1035,
+ 1038,
+ 1041,
+ 1045,
+ 1048,
+ 1051,
+ 1055,
+ 1058,
+ 1061,
+ 1065,
+ 1068,
+ 1071,
+ 1075,
+ 1078,
+ 1081,
+ 1085,
+ 1088,
+ 1091,
+ 1095,
+ 1098,
+ 1101,
+ 1105,
+ 1108,
+ 1111,
+ 1115,
+ 1118,
+ 1121,
+ 1125,
+ 1128,
+ 1131,
+ 1134,
+ 1138,
+ 1141,
+ 1144,
+ 1148,
+ 1151,
+ 1154,
+ 1158,
+ 1161,
+ 1164,
+ 1168,
+ 1171,
+ 1174,
+ 1178,
+ 1181,
+ 1184,
+ 1188,
+ 1191,
+ 1194,
+ 1198,
+ 1201,
+ 1204,
+ 1208,
+ 1211,
+ 1214,
+ 1218,
+ 1221,
+ 1224,
+ 1228,
+ 1231,
+ 1234,
+ 1237,
+ 1241,
+ 1244,
+ 1247,
+ 1251,
+ 1254,
+ 1257,
+ 1261,
+ 1264,
+ 1267,
+ 1271,
+ 1274,
+ 1277,
+ 1281,
+ 1284,
+ 1287,
+ 1291,
+ 1294,
+ 1297,
+ 1301,
+ 1304,
+ 1307,
+ 1311,
+ 1314,
+ 1317,
+ 1321,
+ 1324,
+ 1327,
+ 1330,
+ 1334,
+ 1337,
+ 1340,
+ 1344,
+ 1347,
+ 1350,
+ 1354,
+ 1357,
+ 1360,
+ 1364,
+ 1367,
+ 1370,
+ 1374,
+ 1377,
+ 1380,
+ 1384,
+ 1387,
+ 1390,
+ 1394,
+ 1397,
+ 1400,
+ 1404,
+ 1407,
+ 1410,
+ 1414,
+ 1417,
+ 1420,
+ 1424,
+ 1427,
+ 1430,
+ 1433,
+ 1437,
+ 1440,
+ 1443,
+ 1447,
+ 1450,
+ 1453,
+ 1457,
+ 1460,
+ 1463,
+ 1467,
+ 1470,
+ 1473,
+ 1477,
+ 1480,
+ 1483,
+ 1487,
+ 1490,
+ 1493,
+ 1497,
+ 1500,
+ 1503,
+ 1507,
+ 1510,
+ 1513,
+ 1517,
+ 1520,
+ 1523,
+ 1526,
+ 1530,
+ 1533,
+ 1536,
+ 1540,
+ 1543,
+ 1546,
+ 1550,
+ 1553,
+ 1556,
+ 1560,
+ 1563,
+ 1566,
+ 1570,
+ 1573,
+ 1576,
+ 1580,
+ 1583,
+ 1586,
+ 1590,
+ 1593,
+ 1596,
+ 1600,
+ 1603,
+ 1606,
+ 1610,
+ 1613,
+ 1616,
+ 1620,
+ 1623,
+ 1626,
+ 1629,
+ 1633,
+ 1636,
+ 1639,
+ 1643,
+ 1646,
+ 1649,
+ 1653,
+ 1656,
+ 1659,
+ 1663,
+ 1666,
+ 1669,
+ 1673,
+ 1676,
+ 1679,
+ 1683,
+ 1686,
+ 1689,
+ 1693,
+ 1696,
+ 1699,
+ 1703,
+ 1706,
+ 1709,
+ 1713,
+ 1716,
+ 1719,
+ 1722,
+ 1726,
+ 1729,
+ 1732,
+ 1736,
+ 1739,
+ 1742,
+ 1746,
+ 1749,
+ 1752,
+ 1756,
+ 1759,
+ 1762,
+ 1766,
+ 1769,
+ 1772,
+ 1776,
+ 1779,
+ 1782,
+ 1786,
+ 1789,
+ 1792,
+ 1796,
+ 1799,
+ 1802,
+ 1806,
+ 1809,
+ 1812,
+ 1815,
+ 1819,
+ 1822,
+ 1825,
+ 1829,
+ 1832,
+ 1835,
+ 1839,
+ 1842,
+ 1845,
+ 1849,
+ 1852,
+ 1855,
+ 1859,
+ 1862,
+ 1865,
+ 1869,
+ 1872,
+ 1875,
+ 1879,
+ 1882,
+ 1885,
+ 1889,
+ 1892,
+ 1895,
+ 1899,
+ 1902,
+ 1905,
+ 1909,
+ 1912,
+ 1915,
+ 1918,
+ 1922,
+ 1925,
+ 1928,
+ 1932,
+ 1935,
+ 1938,
+ 1942,
+ 1945,
+ 1948,
+ 1952,
+ 1955,
+ 1958,
+ 1962,
+ 1965,
+ 1968,
+ 1972,
+ 1975,
+ 1978,
+ 1982,
+ 1985,
+ 1988,
+ 1992,
+ 1995,
+ 1998,
+ 2002,
+ 2005,
+ 2008,
+ 2011,
+ 2015,
+ 2018,
+ 2021,
+ 2025,
+ 2028,
+ 2031,
+ 2035,
+ 2038,
+ 2041,
+ 2045,
+ 2048,
+ 2051,
+ 2055,
+ 2058,
+ 2061,
+ 2065,
+ 2068,
+ 2071,
+ 2075,
+ 2078,
+ 2081,
+ 2085,
+ 2088,
+ 2091,
+ 2095,
+ 2098,
+ 2101,
+ 2105,
+ 2108,
+ 2111,
+ 2114,
+ 2118,
+ 2121,
+ 2124,
+ 2128,
+ 2131,
+ 2134,
+ 2138,
+ 2141,
+ 2144,
+ 2148,
+ 2151,
+ 2154,
+ 2158,
+ 2161,
+};
+
+static const UINT256 multipliers1_binary64[] =
+ { {{1837554224478941466ull, 10276842184138466546ull,
+ 11651621577776737258ull, 7754513766366540701ull}},
+{{5760157408726726321ull, 11034712383513929495ull,
+ 9588106495324154738ull, 4846571103979087938ull}},
+{{2588510742481019997ull, 4570018442537636061ull,
+ 2761761082300417615ull, 6058213879973859923ull}},
+{{7847324446528662900ull, 1100837034744657172ull,
+ 17287259408157685731ull, 7572767349967324903ull}},
+{{14127949815935190120ull, 16828924211211268396ull,
+ 17722066157739635437ull, 4732979593729578064ull}},
+{{17659937269918987650ull, 7201097208731921783ull,
+ 3705838623464992681ull, 5916224492161972581ull}},
+{{17463235568971346659ull, 13613057529342290133ull,
+ 9243984297758628755ull, 7395280615202465726ull}},
+{{13220365239820785614ull, 6202317946625237381ull,
+ 1165804167671755068ull, 4622050384501541079ull}},
+{{2690398494493818305ull, 7752897433281546727ull,
+ 15292313264871857547ull, 5777562980626926348ull}},
+{{17198056173399436594ull, 5079435773174545504ull,
+ 668647507380270318ull, 7221953725783657936ull}},
+{{3050826143039744126ull, 15572666753322957689ull,
+ 835809384225337897ull, 9027442157229572420ull}},
+{{13435981385468309839ull, 2815387693185766699ull,
+ 9745752901995611994ull, 5642151348268482762ull}},
+{{12183290713407999394ull, 12742606653336984182ull,
+ 2958819090639739184ull, 7052689185335603453ull}},
+{{6005741354905223435ull, 15928258316671230228ull,
+ 8310209881727061884ull, 8815861481669504316ull}},
+{{12976960383670540455ull, 731789411064743084ull,
+ 14417253212934189486ull, 5509913426043440197ull}},
+{{16221200479588175569ull, 10138108800685704663ull,
+ 4186508460885573145ull, 6887391782554300247ull}},
+{{15664814581057831557ull, 17284322019284518733ull,
+ 621449557679578527ull, 8609239728192875309ull}},
+{{12096352122374838675ull, 17720230289693906064ull,
+ 2694248982763430531ull, 5380774830120547068ull}},
+{{15120440152968548344ull, 17538601843689994676ull,
+ 3367811228454288164ull, 6725968537650683835ull}},
+{{453806117501133814ull, 3476508230902941730ull,
+ 18044822090850023918ull, 8407460672063354793ull}},
+{{4895314841865596538ull, 16007875699596502293ull,
+ 4360484779140183092ull, 5254662920039596746ull}},
+{{10730829570759383576ull, 1563100550786076250ull,
+ 14673978010780004674ull, 6568328650049495932ull}},
+{{4190164926594453662ull, 11177247725337371121ull,
+ 18342472513475005842ull, 8210410812561869915ull}},
+{{14148068125190003299ull, 11597465846763244854ull,
+ 9158202311708184699ull, 5131506757851168697ull}},
+{{8461713119632728315ull, 9885146290026668164ull,
+ 16059438908062618778ull, 6414383447313960871ull}},
+{{10577141399540910394ull, 3133060825678559397ull,
+ 15462612616650885569ull, 8017979309142451089ull}},
+{{8916556383926762949ull, 13487378062117569383ull,
+ 2746603857765721624ull, 5011237068214031931ull}},
+{{6534009461481065782ull, 16859222577646961729ull,
+ 17268312877489315742ull, 6264046335267539913ull}},
+{{12779197845278720131ull, 11850656185203926353ull,
+ 7750333041579480966ull, 7830057919084424892ull}},
+{{1069469625658118226ull, 2794974097325066067ull,
+ 14067330187841951412ull, 4893786199427765557ull}},
+{{15171895087354811494ull, 3493717621656332583ull,
+ 3749104679520275553ull, 6117232749284706947ull}},
+{{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull,
+ 7646540936605883684ull}},
+{{2053210247837747184ull, 17140985699504597031ull,
+ 9270056306212873643ull, 4779088085378677302ull}},
+{{16401570865079347692ull, 16814546105953358384ull,
+ 2364198345911316246ull, 5973860106723346628ull}},
+{{2055219507639632999ull, 11794810595586922173ull,
+ 2955247932389145308ull, 7467325133404183285ull}},
+{{3590355201488464576ull, 16595128659096602166ull,
+ 4152872966956909769ull, 4667078208377614553ull}},
+{{13711316038715356528ull, 6908852768588588995ull,
+ 9802777227123525116ull, 5833847760472018191ull}},
+{{12527459029966807756ull, 8636065960735736244ull,
+ 7641785515477018491ull, 7292309700590022739ull}},
+{{15659323787458509695ull, 6183396432492282401ull,
+ 4940545875918885210ull, 9115387125737528424ull}},
+{{2869548339520486704ull, 8476308788735064405ull,
+ 3087841172449303256ull, 5697116953585955265ull}},
+{{8198621442827996284ull, 10595385985918830506ull,
+ 8471487483989016974ull, 7121396191982444081ull}},
+{{1024904766680219546ull, 4020860445543762325ull,
+ 15201045373413659122ull, 8901745239978055101ull}},
+{{2946408488388831169ull, 7124723796892239357ull,
+ 11806496367597230903ull, 5563590774986284438ull}},
+{{8294696628913426865ull, 4294218727687911292ull,
+ 5534748422641762821ull, 6954488468732855548ull}},
+{{10368370786141783581ull, 9979459428037277019ull,
+ 6918435528302203526ull, 8693110585916069435ull}},
+{{4174388732124920786ull, 1625476124095910233ull,
+ 2018179195975183252ull, 5433194116197543397ull}},
+{{9829671933583538887ull, 2031845155119887791ull,
+ 7134410013396366969ull, 6791492645246929246ull}},
+{{7675403898552035704ull, 7151492462327247643ull,
+ 18141384553600234519ull, 8489365806558661557ull}},
+{{2491284427381328363ull, 11387211816595611633ull,
+ 13644208355213840526ull, 5305853629099163473ull}},
+{{7725791552654048358ull, 5010642733889738733ull,
+ 3220202388735136946ull, 6632317036373954342ull}},
+{{14268925459244948351ull, 15486675454216949224ull,
+ 13248625022773696990ull, 8290396295467442927ull}},
+{{8918078412028092720ull, 5067486140458205361ull,
+ 15197919666874642475ull, 5181497684667151829ull}},
+{{15759284033462503804ull, 1722671657145368797ull,
+ 5162341528311139382ull, 6476872105833939787ull}},
+{{5864046986545966042ull, 11376711608286486805ull,
+ 1841240891961536323ull, 8096090132292424734ull}},
+{{5970872375804922729ull, 4804601745965360301ull,
+ 14985833612758123914ull, 5060056332682765458ull}},
+{{12075276488183541315ull, 15229124219311476184ull,
+ 9508919979092879084ull, 6325070415853456823ull}},
+{{15094095610229426643ull, 589661200429793614ull,
+ 7274463955438710952ull, 7906338019816821029ull}},
+{{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull,
+ 4941461262385513143ull}},
+{{10639340690884892589ull, 5072358831263164165ull,
+ 3953792708276222467ull, 6176826577981891429ull}},
+{{17910861882033503640ull, 1728762520651567302ull,
+ 9553926903772665988ull, 7721033222477364286ull}},
+{{6582602657843551871ull, 10303848612262005372ull,
+ 1359518296430528338ull, 4825645764048352679ull}},
+{{8228253322304439839ull, 3656438728472730907ull,
+ 15534455925820324135ull, 6032057205060440848ull}},
+{{5673630634453161895ull, 18405606465873077346ull,
+ 971325833565853552ull, 7540071506325551061ull}},
+{{8157705164960614088ull, 11503504041170673341ull,
+ 2912921655192352422ull, 4712544691453469413ull}},
+{{14808817474628155514ull, 5156008014608565868ull,
+ 8252838087417828432ull, 5890680864316836766ull}},
+{{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull,
+ 7363351080396045958ull}},
+{{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull,
+ 9204188850495057447ull}},
+{{4661903025908358824ull, 7341007085979871558ull,
+ 13535789341626496214ull, 5752618031559410904ull}},
+{{15050750819240224337ull, 18399630894329615255ull,
+ 16919736677033120267ull, 7190772539449263630ull}},
+{{14201752505622892517ull, 18387852599484631165ull,
+ 11926298809436624526ull, 8988465674311579538ull}},
+{{11181938325228001776ull, 6880721856250506574ull,
+ 12065622774325278233ull, 5617791046444737211ull}},
+{{4754050869680226411ull, 13212588338740521122ull,
+ 10470342449479209887ull, 7022238808055921514ull}},
+{{15165935623955058822ull, 11904049404998263498ull,
+ 3864556024994236551ull, 8777798510069901893ull}},
+{{14090395783399299668ull, 14357559905764996542ull,
+ 4721190524835091796ull, 5486124068793688683ull}},
+{{8389622692394348777ull, 17946949882206245678ull,
+ 1289802137616476841ull, 6857655085992110854ull}},
+{{1263656328638160163ull, 8598629297475643386ull,
+ 10835624708875371860ull, 8572068857490138567ull}},
+{{5401471223826238006ull, 14597515347777052924ull,
+ 13689794470688189268ull, 5357543035931336604ull}},
+{{6751839029782797507ull, 18246894184721316155ull,
+ 17112243088360236585ull, 6696928794914170755ull}},
+{{3828112768801108980ull, 8973559675619481482ull,
+ 16778617842022907828ull, 8371160993642713444ull}},
+{{7004256498928081017ull, 14831846834116951734ull,
+ 1263264114409541584ull, 5231975621026695903ull}},
+{{17978692660514877079ull, 93064468936638051ull,
+ 15414138198294090693ull, 6539969526283369878ull}},
+{{17861679807216208444ull, 4728016604598185468ull,
+ 10044300711012837558ull, 8174961907854212348ull}},
+{{1940177842655354470ull, 16790068433156029630ull,
+ 15501059981237799281ull, 5109351192408882717ull}},
+{{11648594340173968895ull, 7152527486162873325ull,
+ 5541266921265085390ull, 6386688990511103397ull}},
+{{725684869935297407ull, 18164031394558367465ull,
+ 11538269670008744641ull, 7983361238138879246ull}},
+{{11982768089778030640ull, 4434990593957897809ull,
+ 2599732525328077497ull, 4989600773836799529ull}},
+{{1143402056940374587ull, 10155424260874760166ull,
+ 7861351675087484775ull, 6237000967295999411ull}},
+{{10652624608030244042ull, 8082594307666062303ull,
+ 5215003575431968065ull, 7796251209119999264ull}},
+{{13575419407659984382ull, 16580836488359758699ull,
+ 3259377234644980040ull, 4872657005699999540ull}},
+{{12357588241147592574ull, 2279301536740146758ull,
+ 4074221543306225051ull, 6090821257124999425ull}},
+{{6223613264579714909ull, 16684184976207347160ull,
+ 9704462947560169217ull, 7613526571406249281ull}},
+{{3889758290362321819ull, 3510086582488510119ull,
+ 17594504388293575521ull, 4758454107128905800ull}},
+{{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull,
+ 5948067633911132251ull}},
+{{4924825824084280865ull, 15860803826599919845ull,
+ 18268041069853935943ull, 7435084542388915313ull}},
+{{5383859149266369493ull, 16830531419266031759ull,
+ 4499996641017628108ull, 4646927838993072071ull}},
+{{2118137918155573962ull, 2591420200372988083ull,
+ 1013309782844647232ull, 5808659798741340089ull}},
+{{16482730452976631164ull, 3239275250466235103ull,
+ 5878323246983196944ull, 7260824748426675111ull}},
+{{15991727047793401051ull, 4049094063082793879ull,
+ 2736218040301608276ull, 9076030935533343889ull}},
+{{16912358432511957513ull, 11754055826281521982ull,
+ 13239351321256974932ull, 5672519334708339930ull}},
+{{11917076003785171083ull, 14692569782851902478ull,
+ 7325817114716442857ull, 7090649168385424913ull}},
+{{5672972967876688046ull, 4530654173282714386ull,
+ 13768957411822941476ull, 8863311460481781141ull}},
+{{8157294123350317933ull, 12055030895156472299ull,
+ 10911441391603032374ull, 5539569662801113213ull}},
+{{5584931635760509512ull, 5845416582090814566ull,
+ 18250987757931178372ull, 6924462078501391516ull}},
+{{16204536581555412698ull, 7306770727613518207ull,
+ 4366990623704421349ull, 8655577598126739396ull}},
+{{17045364391113214793ull, 6872574713972142831ull,
+ 11952741176670039151ull, 5409735998829212122ull}},
+{{16695019470464130587ull, 3979032374037790635ull,
+ 5717554433982773131ull, 6762169998536515153ull}},
+{{16257088319652775329ull, 362104449119850390ull,
+ 11758629060905854318ull, 8452712498170643941ull}},
+{{5548994181355596677ull, 14061373335982070206ull,
+ 9654986172279852900ull, 5282945311356652463ull}},
+{{16159614763549271654ull, 17576716669977587757ull,
+ 7457046696922428221ull, 6603681639195815579ull}},
+{{6364460399154425855ull, 8135837782189820985ull,
+ 4709622352725647373ull, 8254602048994769474ull}},
+{{15507002795539985920ull, 7390741623082332067ull,
+ 7555199988880917512ull, 5159126280621730921ull}},
+{{14772067475997594496ull, 9238427028852915084ull,
+ 14055686004528534794ull, 6448907850777163651ull}},
+{{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull,
+ 8061134813471454564ull}},
+{{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull,
+ 5038209258419659102ull}},
+{{9237700373798089483ull, 4698445753088498727ull,
+ 12429219171114694412ull, 6297761573024573878ull}},
+{{6935439448820223949ull, 5873057191360623409ull,
+ 6313151927038592207ull, 7872201966280717348ull}},
+{{15863864701581109728ull, 10588189772241471486ull,
+ 13169091991253895937ull, 4920126228925448342ull}},
+{{10606458840121611352ull, 17846923233729227262ull,
+ 7237992952212594113ull, 6150157786156810428ull}},
+{{4034701513297238382ull, 8473595986879370366ull,
+ 9047491190265742642ull, 7687697232696013035ull}},
+{{16356746501092937701ull, 9907683510226994382ull,
+ 3348838984702395199ull, 4804810770435008147ull}},
+{{11222561089511396318ull, 7772918369356355074ull,
+ 18021106786160157711ull, 6006013463043760183ull}},
+{{4804829325034469590ull, 5104461943268055939ull,
+ 17914697464272809235ull, 7507516828804700229ull}},
+{{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull,
+ 4692198018002937643ull}},
+{{10094841185520837735ull, 1105557131661051262ull,
+ 12266475137052861751ull, 5865247522503672054ull}},
+{{3395179445046271361ull, 15217004469858477790ull,
+ 6109721884461301380ull, 7331559403129590068ull}},
+{{13467346343162615009ull, 574511513613545621ull,
+ 7637152355576626726ull, 9164449253911987585ull}},
+{{10722934473690328333ull, 14194127751290629725ull,
+ 16302435268303861463ull, 5727780783694992240ull}},
+{{18015354110540298320ull, 13130973670685899252ull,
+ 1931300011670275213ull, 7159725979618740301ull}},
+{{4072448564465821284ull, 2578659033075210354ull,
+ 7025811033015231921ull, 8949657474523425376ull}},
+{{7156966371218526206ull, 13140876941740476231ull,
+ 4391131895634519950ull, 5593535921577140860ull}},
+{{4334521945595769854ull, 7202724140320819481ull,
+ 5488914869543149938ull, 6991919901971426075ull}},
+{{10029838450422100221ull, 18226777212255800159ull,
+ 2249457568501549518ull, 8739899877464282594ull}},
+{{13186178059154894494ull, 6780049739232487195ull,
+ 6017596998740856353ull, 5462437423415176621ull}},
+{{11871036555516230214ull, 13086748192467996898ull,
+ 12133682266853458345ull, 6828046779268970776ull}},
+{{5615423657540511959ull, 2523377185302832411ull,
+ 15167102833566822932ull, 8535058474086213470ull}},
+{{1203796776749126023ull, 10800482777669046065ull,
+ 4867753252551876428ull, 5334411546303883419ull}},
+{{6116431989363795432ull, 13500603472086307581ull,
+ 1473005547262457631ull, 6668014432879854274ull}},
+{{12257226005132132194ull, 12264068321680496572ull,
+ 11064628970932847847ull, 8335018041099817842ull}},
+{{16884138290062358430ull, 14582571728691392213ull,
+ 11527079125260417808ull, 5209386275687386151ull}},
+{{7270114807295784325ull, 18228214660864240267ull,
+ 9797162888148134356ull, 6511732844609232689ull}},
+{{4475957490692342502ull, 4338524252370748718ull,
+ 16858139628612555850ull, 8139666055761540861ull}},
+{{16632531486964877776ull, 7323263676159105852ull,
+ 12842180277096541358ull, 5087291284850963038ull}},
+{{2343920284996545604ull, 18377451632053658124ull,
+ 6829353309515900889ull, 6359114106063703798ull}},
+{{2929900356245682005ull, 9136756484784908943ull,
+ 17760063673749651920ull, 7948892632579629747ull}},
+{{8748716750294633109ull, 5710472802990568089ull,
+ 8794196786879838498ull, 4968057895362268592ull}},
+{{15547581956295679290ull, 16361463040592985919ull,
+ 10992745983599798122ull, 6210072369202835740ull}},
+{{14822791426942211209ull, 11228456763886456591ull,
+ 13740932479499747653ull, 7762590461503544675ull}},
+{{16181773669479963862ull, 9323628486642729321ull,
+ 6282239790473648331ull, 4851619038439715422ull}},
+{{6392159031567791115ull, 7042849589876023748ull,
+ 17076171774946836222ull, 6064523798049644277ull}},
+{{7990198789459738893ull, 18026934024199805493ull,
+ 7510156663401381565ull, 7580654747562055347ull}},
+{{7299717252626030761ull, 13572676774338572385ull,
+ 2388004905412169526ull, 4737909217226284592ull}},
+{{13736332584209926355ull, 7742473931068439673ull,
+ 2985006131765211908ull, 5922386521532855740ull}},
+{{3335357674980244231ull, 9678092413835549592ull,
+ 3731257664706514885ull, 7402983151916069675ull}},
+{{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull,
+ 4626864469947543547ull}},
+{{16440806238860479518ull, 5831627441398752654ull,
+ 13867799344317011026ull, 5783580587434429433ull}},
+{{11327635761720823589ull, 16512906338603216626ull,
+ 3499691125114100070ull, 7229475734293036792ull}},
+{{4936172665296253678ull, 11417760886399244975ull,
+ 4374613906392625088ull, 9036844667866295990ull}},
+{{10002636943451240405ull, 7136100553999528109ull,
+ 16569191746777554392ull, 5648027917416434993ull}},
+{{17114982197741438410ull, 8920125692499410136ull,
+ 6876431628189779278ull, 7060034896770543742ull}},
+{{2946983673467246397ull, 1926785078769486863ull,
+ 17818911572091999906ull, 8825043620963179677ull}},
+{{8759393823558110854ull, 5815926692658317193ull,
+ 13442662741771193893ull, 5515652263101987298ull}},
+{{15560928297875026471ull, 11881594384250284395ull,
+ 7579956390359216558ull, 6894565328877484123ull}},
+{{14839474353916395185ull, 5628620943458079686ull,
+ 4863259469521632794ull, 8618206661096855154ull}},
+{{4662985452770359087ull, 8129574108088687708ull,
+ 7651223186878408400ull, 5386379163185534471ull}},
+{{5828731815962948858ull, 10161967635110859635ull,
+ 4952342965170622596ull, 6732973953981918089ull}},
+{{2674228751526298169ull, 12702459543888574544ull,
+ 10802114724890666149ull, 8416217442477397611ull}},
+{{1671392969703936356ull, 10244880224144053042ull,
+ 4445478693842972391ull, 5260135901548373507ull}},
+{{11312613248984696253ull, 8194414261752678398ull,
+ 945162348876327585ull, 6575169876935466884ull}},
+{{4917394524376094508ull, 14854703845618235902ull,
+ 1181452936095409481ull, 8218962346169333605ull}},
+{{16908429633017222779ull, 2366660875870315582ull,
+ 3044251094273324878ull, 5136851466355833503ull}},
+{{11912165004416752666ull, 12181698131692670286ull,
+ 17640371923123819809ull, 6421064332944791878ull}},
+{{5666834218666165025ull, 1392064609333674146ull,
+ 12827092867049998954ull, 8026330416180989848ull}},
+{{8153457405093741045ull, 5481726399260934245ull,
+ 8016933041906249346ull, 5016456510113118655ull}},
+{{14803507774794564210ull, 16075530035930943614ull,
+ 5409480283955423778ull, 6270570637641398319ull}},
+{{9281012681638429454ull, 10871040508058903710ull,
+ 2150164336516891819ull, 7838213297051747899ull}},
+{{1188946907596630505ull, 4488557308323120867ull,
+ 17484753774818915051ull, 4898883310657342436ull}},
+{{15321241689777951843ull, 999010616976513179ull,
+ 3409198144814092198ull, 6123604138321678046ull}},
+{{14539866093795051900ull, 10472135308075417282ull,
+ 13484869717872391055ull, 7654505172902097557ull}},
+{{13699102327049295341ull, 13462613595188217657ull,
+ 10733886582883938361ull, 4784065733063810973ull}},
+{{3288819853529455465ull, 2993208938703108360ull,
+ 18029044247032310856ull, 5980082166329763716ull}},
+{{4111024816911819331ull, 3741511173378885450ull,
+ 4089561235080836954ull, 7475102707912204646ull}},
+{{7181076528997274986ull, 6950130501789191310ull,
+ 16391033827207686808ull, 4671939192445127903ull}},
+{{18199717698101369540ull, 8687663127236489137ull,
+ 15877106265582220606ull, 5839923990556409879ull}},
+{{8914589067344548213ull, 1636206872190835614ull,
+ 15234696813550387854ull, 7299904988195512349ull}},
+{{1919864297325909458ull, 11268630627093320326ull,
+ 5208312961655821105ull, 9124881235244390437ull}},
+{{15034973241110857124ull, 125365114292243347ull,
+ 5561038610248582143ull, 5703050772027744023ull}},
+{{14182030532961183500ull, 13991764448147467896ull,
+ 2339612244383339774ull, 7128813465034680029ull}},
+{{17727538166201479375ull, 8266333523329559062ull,
+ 7536201323906562622ull, 8911016831293350036ull}},
+{{6468025335448536706ull, 554772433653586510ull,
+ 13933497864296377447ull, 5569385519558343772ull}},
+{{17308403706165446690ull, 14528523597349146849ull,
+ 17416872330370471808ull, 6961731899447929715ull}},
+{{7800446577424644651ull, 18160654496686433562ull,
+ 17159404394535701856ull, 8702164874309912144ull}},
+{{9486965129317790811ull, 11350409060429020976ull,
+ 10724627746584813660ull, 5438853046443695090ull}},
+{{11858706411647238513ull, 14188011325536276220ull,
+ 4182412646376241267ull, 6798566308054618863ull}},
+{{14823383014559048142ull, 13123328138492957371ull,
+ 616329789542913680ull, 8498207885068273579ull}},
+{{6958771374885711137ull, 8202080086558098357ull,
+ 16526107182960178714ull, 5311379928167670986ull}},
+{{13310150237034526825ull, 1029228071342847138ull,
+ 11434261941845447585ull, 6639224910209588733ull}},
+{{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull,
+ 8299031137761985917ull}},
+{{2328104340435295250ull, 15215603238322186527ull,
+ 2591948866729097557ull, 5186894461101241198ull}},
+{{16745188480826282774ull, 5184445992620569446ull,
+ 12463308120266147755ull, 6483618076376551497ull}},
+{{11708113564178077660ull, 1868871472348323904ull,
+ 1744077095050520982ull, 8104522595470689372ull}},
+{{7317570977611298537ull, 15003102725499866152ull,
+ 10313420221261351421ull, 5065326622169180857ull}},
+{{9146963722014123172ull, 4918820351592668978ull,
+ 17503461295004077181ull, 6331658277711476071ull}},
+{{2210332615662878157ull, 10760211457918224127ull,
+ 17267640600327708572ull, 7914572847139345089ull}},
+{{8298986912430380704ull, 15948504198053665887ull,
+ 3874746347563736001ull, 4946608029462090681ull}},
+{{5762047622110587976ull, 6100572192284918647ull,
+ 9455118952882057906ull, 6183260036827613351ull}},
+{{2590873509210847066ull, 16849087277210924117ull,
+ 7207212672675184478ull, 7729075046034516689ull}},
+{{3925138952470473368ull, 5918993529829439669ull,
+ 16033722966490460059ull, 4830671903771572930ull}},
+{{9518109709015479614ull, 2787055893859411682ull,
+ 10818781671258299266ull, 6038339879714466163ull}},
+{{2674265099414573710ull, 12707191904179040411ull,
+ 8911791070645486178ull, 7547924849643082704ull}},
+{{17812316751629966233ull, 12553680958539288160ull,
+ 5569869419153428861ull, 4717453031026926690ull}},
+{{3818651865827906175ull, 1857043142891946489ull,
+ 16185708810796561885ull, 5896816288783658362ull}},
+{{9385000850712270622ull, 6932989947042321015ull,
+ 11008763976640926548ull, 7371020360979572953ull}},
+{{7119565044962950374ull, 8666237433802901269ull,
+ 18372640989228546089ull, 9213775451224466191ull}},
+{{6755571162315537936ull, 16945613442195283053ull,
+ 18400429645908923161ull, 5758609657015291369ull}},
+{{13056149971321810324ull, 7346958747461940104ull,
+ 9165479002103990240ull, 7198262071269114212ull}},
+{{16320187464152262904ull, 9183698434327425130ull,
+ 11456848752629987800ull, 8997827589086392765ull}},
+{{14811803183522552219ull, 5739811521454640706ull,
+ 9466373479607436327ull, 5623642243178995478ull}},
+{{9291381942548414466ull, 2563078383390912979ull,
+ 2609594812654519601ull, 7029552803973744348ull}},
+{{7002541409758130179ull, 7815533997666029128ull,
+ 3261993515818149501ull, 8786941004967180435ull}},
+{{4376588381098831362ull, 7190551757754962157ull,
+ 18179647011882201102ull, 5491838128104487771ull}},
+{{10082421494800927106ull, 18211561734048478504ull,
+ 18112872746425363473ull, 6864797660130609714ull}},
+{{12603026868501158883ull, 8929394112278434418ull,
+ 13417718896176928534ull, 8580997075163262143ull}},
+{{12488577811240612206ull, 969185301746633607ull,
+ 15303603337751662190ull, 5363123171977038839ull}},
+{{10999036245623377353ull, 10434853664038067817ull,
+ 14517818153762189833ull, 6703903964971298549ull}},
+{{18360481325456609595ull, 17655253098474972675ull,
+ 4312214636920573579ull, 8379879956214123187ull}},
+{{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull,
+ 5237424972633826992ull}},
+{{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull,
+ 6546781215792283740ull}},
+{{16633120851708517460ull, 12485656897476221727ull,
+ 608267404471350836ull, 8183476519740354675ull}},
+{{17313229559958905269ull, 17026907597777414387ull,
+ 16521068192290451936ull, 5114672824837721671ull}},
+{{17029850931521243682ull, 2836890423512216368ull,
+ 16039649221935677017ull, 6393341031047152089ull}},
+{{2840569590692002986ull, 8157799047817658365ull,
+ 6214503472137432559ull, 7991676288808940112ull}},
+{{4081199003396195818ull, 12016153432527118334ull,
+ 3884064670085895349ull, 4994797680505587570ull}},
+{{14324870791100020581ull, 1185133735376734205ull,
+ 14078452874462144995ull, 6243497100631984462ull}},
+{{4071030433592862014ull, 15316475224503081469ull,
+ 8374694056222905435ull, 7804371375789980578ull}},
+{{4850237030209232711ull, 7266954006100731966ull,
+ 9845869803566703801ull, 4877732109868737861ull}},
+{{15286168324616316697ull, 13695378526053302861ull,
+ 16919023272885767655ull, 6097165137335922326ull}},
+{{5272652350488232159ull, 12507537139139240673ull,
+ 11925407054252433761ull, 7621456421669902908ull}},
+{{14824622765123614859ull, 899681684320943564ull,
+ 16676751445762546909ull, 4763410263543689317ull}},
+{{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull,
+ 5954262829429611647ull}},
+{{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull,
+ 7442828536787014559ull}},
+{{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull,
+ 4651767835491884099ull}},
+{{9305436863705329478ull, 15401676660084534608ull,
+ 7278909286806688635ull, 5814709794364855124ull}},
+{{11631796079631661847ull, 14640409806678280356ull,
+ 9098636608508360794ull, 7268387242956068905ull}},
+{{14539745099539577309ull, 9077140221493074637ull,
+ 15984981779062838897ull, 9085484053695086131ull}},
+{{11393183696425929770ull, 17202427684501641408ull,
+ 7684770602700580358ull, 5678427533559428832ull}},
+{{14241479620532412213ull, 12279662568772275952ull,
+ 9605963253375725448ull, 7098034416949286040ull}},
+{{17801849525665515266ull, 15349578210965344940ull,
+ 12007454066719656810ull, 8872543021186607550ull}},
+{{1902783916686171233ull, 14205172400280728492ull,
+ 2892972773272397602ull, 5545339388241629719ull}},
+{{2378479895857714042ull, 8533093463496134807ull,
+ 17451274021872660715ull, 6931674235302037148ull}},
+{{16808157925104306264ull, 6054680810942780604ull,
+ 3367348453631274278ull, 8664592794127546436ull}},
+{{1281726666335415607ull, 17619233562121401590ull,
+ 11327964820374322231ull, 5415370496329716522ull}},
+{{10825530369774045317ull, 17412355934224364083ull,
+ 4936583988613126981ull, 6769213120412145653ull}},
+{{8920226943790168742ull, 7930386862498291392ull,
+ 10782416004193796631ull, 8461516400515182066ull}},
+{{5575141839868855464ull, 11874020816702513976ull,
+ 11350696021048510798ull, 5288447750321988791ull}},
+{{6968927299836069330ull, 5619153984023366662ull,
+ 9576684007883250594ull, 6610559687902485989ull}},
+{{17934531161649862470ull, 16247314516883984135ull,
+ 16582541028281451146ull, 8263199609878107486ull}},
+{{18126611003672245900ull, 14766257591479877988ull,
+ 5752402124248519062ull, 5164499756173817179ull}},
+{{4211519680880755759ull, 9234449952495071678ull,
+ 2578816636883260924ull, 6455624695217271474ull}},
+{{14487771637955720506ull, 11543062440618839597ull,
+ 12446892832958851963ull, 8069530869021589342ull}},
+{{11360700282936019269ull, 4908571016173080796ull,
+ 3167622002171894573ull, 5043456793138493339ull}},
+{{14200875353670024086ull, 10747399788643738899ull,
+ 17794585557997031928ull, 6304320991423116673ull}},
+{{13139408173660142203ull, 13434249735804673624ull,
+ 8408173892214126198ull, 7880401239278895842ull}},
+{{8212130108537588877ull, 3784720066450533111ull,
+ 9866794701061216778ull, 4925250774549309901ull}},
+{{5653476617244598192ull, 13954272119917942197ull,
+ 16945179394753908876ull, 6156563468186637376ull}},
+{{11678531789983135644ull, 17442840149897427746ull,
+ 2734730169732834479ull, 7695704335233296721ull}},
+{{11910768387166847682ull, 17819304121326974197ull,
+ 13238421402151491309ull, 4809815209520810450ull}},
+{{1053402428676395890ull, 8439072096376554035ull,
+ 7324654715834588329ull, 6012269011901013063ull}},
+{{15151811091127658574ull, 15160526138898080447ull,
+ 4544132376365847507ull, 7515336264876266329ull}},
+{{16387410959595868465ull, 7169485827597606327ull,
+ 14369297781297124452ull, 4697085165547666455ull}},
+{{15872577681067447677ull, 8961857284497007909ull,
+ 13349936208194017661ull, 5871356456934583069ull}},
+{{6005664046052145885ull, 15814007624048647791ull,
+ 2852362204960358364ull, 7339195571168228837ull}},
+{{2895394039137794452ull, 1320765456351258123ull,
+ 8177138774627835860ull, 9173994463960286046ull}},
+{{17950522338956979196ull, 10048850447074312134ull,
+ 499025715715009508ull, 5733746539975178779ull}},
+{{13214780886841448187ull, 12561063058842890168ull,
+ 14458840199925925597ull, 7167183174968973473ull}},
+{{16518476108551810234ull, 1866270768271448998ull,
+ 4238492194625243285ull, 8958978968711216842ull}},
+{{5712361549417493492ull, 3472262239383349576ull,
+ 7260743640068164957ull, 5599361855444510526ull}},
+{{7140451936771866865ull, 8952013817656574874ull,
+ 18299301586939982004ull, 6999202319305638157ull}},
+{{18148936957819609390ull, 11190017272070718592ull,
+ 9039068928392813793ull, 8749002899132047697ull}},
+{{11343085598637255869ull, 76231767403117264ull,
+ 17178633126313978381ull, 5468126811957529810ull}},
+{{14178856998296569836ull, 4706975727681284484ull,
+ 12249919371037697168ull, 6835158514946912263ull}},
+{{17723571247870712295ull, 5883719659601605605ull,
+ 10700713195369733556ull, 8543948143683640329ull}},
+{{13383075039132889136ull, 12900696824105779311ull,
+ 18217160793174553232ull, 5339967589802275205ull}},
+{{12117157780488723516ull, 16125871030132224139ull,
+ 8936392936186027828ull, 6674959487252844007ull}},
+{{10534761207183516491ull, 1710594713955728558ull,
+ 6558805151805146882ull, 8343699359066055009ull}},
+{{1972539736062309903ull, 5680807714649718253ull,
+ 15628468265946686561ull, 5214812099416284380ull}},
+{{7077360688505275283ull, 11712695661739535720ull,
+ 1088841258723806585ull, 6518515124270355476ull}},
+{{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull,
+ 8148143905337944345ull}},
+{{10140874056322134219ull, 503632201182659961ull,
+ 12379872279446443655ull, 5092589940836215215ull}},
+{{17287778588830055677ull, 14464598306760488663ull,
+ 10863154330880666664ull, 6365737426045269019ull}},
+{{16998037217610181693ull, 18080747883450610829ull,
+ 8967256895173445426ull, 7957171782556586274ull}},
+{{12929616270220057510ull, 15912153445584019672ull,
+ 10216221577910791295ull, 4973232364097866421ull}},
+{{16162020337775071888ull, 15278505788552636686ull,
+ 17381962990815877023ull, 6216540455122333026ull}},
+{{10979153385364064051ull, 14486446217263407954ull,
+ 12504081701665070471ull, 7770675568902916283ull}},
+{{11473656884279927936ull, 15971557913430711827ull,
+ 5509208054326975092ull, 4856672230564322677ull}},
+{{9730385086922522016ull, 1517703318078838168ull,
+ 11498196086336106770ull, 6070840288205403346ull}},
+{{12162981358653152520ull, 11120501184453323518ull,
+ 5149373071065357654ull, 7588550360256754183ull}},
+{{2990177330730832421ull, 2338627221855939295ull,
+ 10135887197056930390ull, 4742843975160471364ull}},
+{{17572779718695704238ull, 12146656064174699926ull,
+ 12669858996321162987ull, 5928554968950589205ull}},
+{{12742602611514854490ull, 10571634061790987004ull,
+ 2002265690119290022ull, 7410693711188236507ull}},
+{{17187498669051559864ull, 1995585270191978973ull,
+ 17392317120820413928ull, 4631683569492647816ull}},
+{{7649315281032286118ull, 2494481587739973717ull,
+ 3293652327315965794ull, 5789604461865809771ull}},
+{{14173330119717745552ull, 12341474021529742954ull,
+ 17952123464427120954ull, 7237005577332262213ull}},
+{{8493290612792406132ull, 6203470490057402885ull,
+ 8605096275251737481ull, 9046256971665327767ull}},
+{{7614149642208947785ull, 15406384102354346563ull,
+ 12295714199673417781ull, 5653910607290829854ull}},
+{{4906001034333796827ull, 5422922072660769492ull,
+ 6146270712736996419ull, 7067388259113537318ull}},
+{{6132501292917246033ull, 2166966572398573961ull,
+ 16906210427776021332ull, 8834235323891921647ull}},
+{{15362028354141748531ull, 10577726144603884533ull,
+ 17483910545001095188ull, 5521397077432451029ull}},
+{{5367477387395021951ull, 13222157680754855667ull,
+ 8019830125969205273ull, 6901746346790563787ull}},
+{{2097660715816389535ull, 2692639045661405872ull,
+ 5413101639034118688ull, 8627182933488204734ull}},
+{{1311037947385243460ull, 1682899403538378670ull,
+ 17218246579678487892ull, 5391989333430127958ull}},
+{{10862169471086330132ull, 2103624254422973337ull,
+ 12299436187743334057ull, 6739986666787659948ull}},
+{{18189397857285300569ull, 7241216336456104575ull,
+ 15374295234679167571ull, 8424983333484574935ull}},
+{{18285902688444394712ull, 2219917201071371407ull,
+ 16526463549315561588ull, 5265614583427859334ull}},
+{{18245692342128105486ull, 2774896501339214259ull,
+ 11434707399789676177ull, 6582018229284824168ull}},
+{{18195429409232743953ull, 8080306645101405728ull,
+ 14293384249737095221ull, 8227522786606030210ull}},
+{{11372143380770464971ull, 7356034662402072532ull,
+ 13545051174513072417ull, 5142201741628768881ull}},
+{{14215179225963081214ull, 13806729346429978569ull,
+ 3096255912859176809ull, 6427752177035961102ull}},
+{{3933915977171687805ull, 3423353627755309500ull,
+ 13093691927928746820ull, 8034690221294951377ull}},
+{{11682069522587080686ull, 11362968054201844245ull,
+ 1266028427314384906ull, 5021681388309344611ull}},
+{{767528847951687146ull, 4980338030897529499ull,
+ 15417593589425144845ull, 6277101735386680763ull}},
+{{14794469115221772644ull, 10837108557049299777ull,
+ 14660305968354043152ull, 7846377169233350954ull}},
+{{2329014169372526047ull, 6773192848155812361ull,
+ 13774377248648664874ull, 4903985730770844346ull}},
+{{7522953730143045462ull, 17689863097049541259ull,
+ 7994599523956055284ull, 6129982163463555433ull}},
+{{4792006144251418924ull, 3665584797602374958ull,
+ 14604935423372457010ull, 7662477704329444291ull}},
+{{16830061895439300539ull, 6902676516928872252ull,
+ 6822241630394091679ull, 4789048565205902682ull}},
+{{2590833295589574058ull, 4016659627733702412ull,
+ 17751174074847390407ull, 5986310706507378352ull}},
+{{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull,
+ 7482888383134222941ull}},
+{{8941617539820436589ull, 11784926618718307329ull,
+ 4644732709119747947ull, 4676805239458889338ull}},
+{{15788707943202933640ull, 10119472254970496257ull,
+ 15029287923254460742ull, 5846006549323611672ull}},
+{{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull,
+ 7307508186654514591ull}},
+{{16599405629006654981ull, 4282460352322930642ull,
+ 14259890343230319102ull, 9134385233318143238ull}},
+{{14986314536556547267ull, 16511595775483995363ull,
+ 4300745446091561534ull, 5708990770823839524ull}},
+{{14121207152268296180ull, 11416122682500218396ull,
+ 5375931807614451918ull, 7136238463529799405ull}},
+{{17651508940335370225ull, 5046781316270497187ull,
+ 11331600777945452802ull, 8920298079412249256ull}},
+{{8726350078495912439ull, 7765924341096448646ull,
+ 7082250486215908001ull, 5575186299632655785ull}},
+{{1684565561265114740ull, 14319091444797948712ull,
+ 13464499126197272905ull, 6968982874540819731ull}},
+{{2105706951581393425ull, 4063806250715272178ull,
+ 12218937889319203228ull, 8711228593176024664ull}},
+{{5927752863165758795ull, 11763250943551820919ull,
+ 7636836180824502017ull, 5444517870735015415ull}},
+{{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull,
+ 6805647338418769269ull}},
+{{8109192344089651141ull, 10309629067051791354ull,
+ 10779635027931437426ull, 8507059173023461586ull}},
+{{9679931233483419867ull, 11055204185334757500ull,
+ 11348957910884536295ull, 5316911983139663491ull}},
+{{12099914041854274834ull, 9207319213241058971ull,
+ 9574511370178282465ull, 6646139978924579364ull}},
+{{10513206533890455638ull, 16120835034978711618ull,
+ 11968139212722853081ull, 8307674973655724205ull}},
+{{11182440102108922678ull, 3157992869220612905ull,
+ 9785930017165477128ull, 5192296858534827628ull}},
+{{142992072353989635ull, 3947491086525766132ull,
+ 12232412521456846410ull, 6490371073168534535ull}},
+{{178740090442487044ull, 14157735895011983473ull,
+ 10678829633393670108ull, 8112963841460668169ull}},
+{{11640927602595024163ull, 18071956971237265478ull,
+ 18203483566939513577ull, 5070602400912917605ull}},
+{{5327787466389004395ull, 8754888158764418136ull,
+ 8919296403392228260ull, 6338253001141147007ull}},
+{{6659734332986255494ull, 10943610198455522670ull,
+ 6537434485812897421ull, 7922816251426433759ull}},
+{{17997392013398573396ull, 9145599383248395620ull,
+ 11003425581274142744ull, 4951760157141521099ull}},
+{{4049995943038665129ull, 11431999229060494526ull,
+ 9142595958165290526ull, 6189700196426901374ull}},
+{{14285866965653107219ull, 5066626999470842349ull,
+ 2204872910851837350ull, 7737125245533626718ull}},
+{{11234509862746885964ull, 17001699929951440180ull,
+ 15213103624564562055ull, 4835703278458516698ull}},
+{{14043137328433607455ull, 16640438894011912321ull,
+ 9793007493850926761ull, 6044629098073145873ull}},
+{{3718863605259845606ull, 6965490562232726690ull,
+ 16852945385741046356ull, 7555786372591432341ull}},
+{{6935975771714791408ull, 13576803638250229989ull,
+ 12838933875301847924ull, 4722366482869645213ull}},
+{{13281655733070877164ull, 16971004547812787486ull,
+ 2213609288845146193ull, 5902958103587056517ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 7378697629483820646ull}},
+{{0ull, 0ull, 0ull, 9223372036854775808ull}},
+{{0ull, 0ull, 0ull, 5764607523034234880ull}},
+{{0ull, 0ull, 0ull, 7205759403792793600ull}},
+{{0ull, 0ull, 0ull, 9007199254740992000ull}},
+{{0ull, 0ull, 0ull, 5629499534213120000ull}},
+{{0ull, 0ull, 0ull, 7036874417766400000ull}},
+{{0ull, 0ull, 0ull, 8796093022208000000ull}},
+{{0ull, 0ull, 0ull, 5497558138880000000ull}},
+{{0ull, 0ull, 0ull, 6871947673600000000ull}},
+{{0ull, 0ull, 0ull, 8589934592000000000ull}},
+{{0ull, 0ull, 0ull, 5368709120000000000ull}},
+{{0ull, 0ull, 0ull, 6710886400000000000ull}},
+{{0ull, 0ull, 0ull, 8388608000000000000ull}},
+{{0ull, 0ull, 0ull, 5242880000000000000ull}},
+{{0ull, 0ull, 0ull, 6553600000000000000ull}},
+{{0ull, 0ull, 0ull, 8192000000000000000ull}},
+{{0ull, 0ull, 0ull, 5120000000000000000ull}},
+{{0ull, 0ull, 0ull, 6400000000000000000ull}},
+{{0ull, 0ull, 0ull, 8000000000000000000ull}},
+{{0ull, 0ull, 0ull, 5000000000000000000ull}},
+{{0ull, 0ull, 0ull, 6250000000000000000ull}},
+{{0ull, 0ull, 0ull, 7812500000000000000ull}},
+{{0ull, 0ull, 0ull, 4882812500000000000ull}},
+{{0ull, 0ull, 0ull, 6103515625000000000ull}},
+{{0ull, 0ull, 0ull, 7629394531250000000ull}},
+{{0ull, 0ull, 0ull, 4768371582031250000ull}},
+{{0ull, 0ull, 0ull, 5960464477539062500ull}},
+{{0ull, 0ull, 0ull, 7450580596923828125ull}},
+{{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}},
+{{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}},
+{{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}},
+{{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}},
+{{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}},
+{{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}},
+{{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}},
+{{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}},
+{{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}},
+{{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}},
+{{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}},
+{{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}},
+{{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}},
+{{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}},
+{{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}},
+{{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}},
+{{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}},
+{{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}},
+{{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}},
+{{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}},
+{{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}},
+{{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}},
+{{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}},
+{{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}},
+{{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}},
+{{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}},
+{{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}},
+{{0ull, 9223372036854775808ull, 18445154669448718262ull,
+ 7523163845262640050ull}},
+{{0ull, 1152921504606846976ull, 16139907686832836818ull,
+ 4701977403289150031ull}},
+{{0ull, 10664523917613334528ull, 15563198590113658118ull,
+ 5877471754111437539ull}},
+{{0ull, 4107282860161892352ull, 14842312219214684744ull,
+ 7346839692639296924ull}},
+{{0ull, 5134103575202365440ull, 106146200308804314ull,
+ 9183549615799121156ull}},
+{{0ull, 7820500752928866304ull, 9289713412047778504ull,
+ 5739718509874450722ull}},
+{{0ull, 9775625941161082880ull, 2388769728204947322ull,
+ 7174648137343063403ull}},
+{{0ull, 2996160389596577792ull, 16821020215538347865ull,
+ 8968310171678829253ull}},
+{{0ull, 13401815289566330880ull, 12818980643925161367ull,
+ 5605193857299268283ull}},
+{{0ull, 12140583093530525696ull, 11412039786479063805ull,
+ 7006492321624085354ull}},
+{{0ull, 1340670811630993408ull, 5041677696244053949ull,
+ 8758115402030106693ull}},
+{{0ull, 3143762266483064832ull, 5456891569366227670ull,
+ 5473822126268816683ull}},
+{{0ull, 13153074869958606848ull, 2209428443280396683ull,
+ 6842277657836020854ull}},
+{{0ull, 11829657569020870656ull, 11985157590955271662ull,
+ 8552847072295026067ull}},
+{{0ull, 2781849962210656256ull, 5184880485133350837ull,
+ 5345529420184391292ull}},
+{{0ull, 8088998471190708224ull, 6481100606416688546ull,
+ 6681911775230489115ull}},
+{{0ull, 887876052133609472ull, 3489689739593472779ull,
+ 8352389719038111394ull}},
+{{0ull, 16695823597079363584ull, 6792742105673308390ull,
+ 5220243574398819621ull}},
+{{0ull, 11646407459494428672ull, 13102613650519023392ull,
+ 6525304467998524526ull}},
+{{0ull, 14558009324368035840ull, 7154895026294003432ull,
+ 8156630584998155658ull}},
+{{0ull, 9098755827730022400ull, 9083495409861140049ull,
+ 5097894115623847286ull}},
+{{0ull, 15985130803089915904ull, 2130997225471649253ull,
+ 6372367644529809108ull}},
+{{0ull, 6146355448580231168ull, 2663746531839561567ull,
+ 7965459555662261385ull}},
+{{0ull, 10759001183003726336ull, 13194056628468195739ull,
+ 4978412222288913365ull}},
+{{0ull, 8837065460327270016ull, 2657512730303080962ull,
+ 6223015277861141707ull}},
+{{0ull, 1822959788554311712ull, 17156948968161014915ull,
+ 7778769097326427133ull}},
+{{0ull, 17280250932342302484ull, 13028936114314328273ull,
+ 4861730685829016958ull}},
+{{0ull, 7765255610145714393ull, 7062798106038134534ull,
+ 6077163357286271198ull}},
+{{4611686018427387904ull, 483197475827367183ull,
+ 18051869669402443976ull, 7596454196607838997ull}},
+{{9799832789158199296ull, 301998422392104489ull,
+ 13588261552590221437ull, 4747783872879899373ull}},
+{{16861477004875137024ull, 4989184046417518515ull,
+ 3150268885455613084ull, 5934729841099874217ull}},
+{{16465160237666533376ull, 6236480058021898144ull,
+ 8549522125246904259ull, 7418412301374842771ull}},
+{{10290725148541583360ull, 1591957027049992388ull,
+ 3037608319065621210ull, 4636507688359276732ull}},
+{{12863406435676979200ull, 11213318320667266293ull,
+ 3797010398832026512ull, 5795634610449095915ull}},
+{{2244199989314060288ull, 14016647900834082867ull,
+ 134576980112645236ull, 7244543263061369894ull}},
+{{16640308041924739072ull, 17520809876042603583ull,
+ 9391593261995582353ull, 9055679078826712367ull}},
+{{17317721553844043776ull, 4032977144885545383ull,
+ 12787274816388320827ull, 5659799424266695229ull}},
+{{17035465923877666816ull, 429535412679543825ull,
+ 2149035465203237322ull, 7074749280333369037ull}},
+{{7459274349564919808ull, 9760291302704205590ull,
+ 7297980349931434556ull, 8843436600416711296ull}},
+{{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull,
+ 5527147875260444560ull}},
+{{9286322599418134528ull, 5319384571023966665ull,
+ 5701547148383933247ull, 6908934844075555700ull}},
+{{16219589267700056064ull, 2037544695352570427ull,
+ 7126933935479916559ull, 8636168555094444625ull}},
+{{7831400283098841088ull, 8190994462236438373ull,
+ 15983548755743417609ull, 5397605346934027890ull}},
+{{14400936372300939264ull, 14850429096222935870ull,
+ 10756063907824496203ull, 6747006683667534863ull}},
+{{8777798428521398272ull, 13951350351851281934ull,
+ 8833393866353232350ull, 8433758354584418579ull}},
+{{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull,
+ 5271098971615261612ull}},
+{{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull,
+ 6588873714519077015ull}},
+{{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull,
+ 8236092143148846269ull}},
+{{6186205317594251264ull, 3867513670791002824ull,
+ 2563215182517940054ull, 5147557589468028918ull}},
+{{7732756646992814080ull, 14057764125343529338ull,
+ 12427391015002200875ull, 6434446986835036147ull}},
+{{442573771886241792ull, 12960519138252023769ull,
+ 10922552750325363190ull, 8043058733543795184ull}},
+{{11805823653497370880ull, 3488638442980126951ull,
+ 6826595468953351994ull, 5026911708464871990ull}},
+{{10145593548444325696ull, 13584170090579934497ull,
+ 17756616373046465800ull, 6283639635581089987ull}},
+{{17293677953982795024ull, 16980212613224918121ull,
+ 17584084447880694346ull, 7854549544476362484ull}},
+{{3891019693598165034ull, 15224318901692961730ull,
+ 1766680743070658158ull, 4909093465297726553ull}},
+{{14087146653852482101ull, 9807026590261426354ull,
+ 6820036947265710602ull, 6136366831622158191ull}},
+{{8385561280460826818ull, 3035411200972007135ull,
+ 3913360165654750349ull, 7670458539527697739ull}},
+{{12158504827929098618ull, 4202975009821198411ull,
+ 140007094320525016ull, 4794036587204811087ull}},
+{{10586445016483985368ull, 5253718762276498014ull,
+ 14010066923182819982ull, 5992545734006013858ull}},
+{{4009684233750205902ull, 15790520489700398326ull,
+ 8289211617123749169ull, 7490682167507517323ull}},
+{{16341110701376042401ull, 2951546278421667097ull,
+ 2874914251488649279ull, 4681676354692198327ull}},
+{{6591330321437889289ull, 17524490903309247584ull,
+ 17428700869642975310ull, 5852095443365247908ull}},
+{{8239162901797361611ull, 12682241592281783672ull,
+ 3339132013344167522ull, 7315119304206559886ull}},
+{{10298953627246702013ull, 6629429953497453782ull,
+ 13397287053534985211ull, 9143899130258199857ull}},
+{{1825159998601800855ull, 1837550711722214662ull,
+ 1455775380818283901ull, 5714936956411374911ull}},
+{{11504822035107026876ull, 6908624408080156231ull,
+ 15654777281305018588ull, 7143671195514218638ull}},
+{{9769341525456395691ull, 8635780510100195289ull,
+ 10345099564776497427ull, 8929588994392773298ull}},
+{{17635053499478717067ull, 3091519809598928103ull,
+ 11077373246412698796ull, 5580993121495483311ull}},
+{{17432130855921008430ull, 3864399761998660129ull,
+ 9235030539588485591ull, 6976241401869354139ull}},
+{{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull,
+ 8720301752336692674ull}},
+{{9583626965064323420ull, 2442601561758029738ull,
+ 8944249865963774832ull, 5450188595210432921ull}},
+{{2756161669475628467ull, 3053251952197537173ull,
+ 15791998350882106444ull, 6812735744013041151ull}},
+{{8056888105271923487ull, 3816564940246921466ull,
+ 15128311920175245151ull, 8515919680016301439ull}},
+{{9647241084222340084ull, 9302882115295407772ull,
+ 16372723977750610075ull, 5322449800010188399ull}},
+{{12059051355277925104ull, 7016916625691871811ull,
+ 15854218953760874690ull, 6653062250012735499ull}},
+{{10462128175670018476ull, 17994517818969615572ull,
+ 15206087673773705458ull, 8316327812515919374ull}},
+{{15762202146648537356ull, 15858259655283397636ull,
+ 4892118777681178007ull, 5197704882822449609ull}},
+{{1256008609601120079ull, 15211138550676859142ull,
+ 10726834490528860413ull, 6497131103528062011ull}},
+{{10793382798856175906ull, 5178865133063910215ull,
+ 8796857094733687613ull, 8121413879410077514ull}},
+{{13663393276926191798ull, 5542633717378637836ull,
+ 10109721702635942662ull, 5075883674631298446ull}},
+{{17079241596157739747ull, 16151664183578073103ull,
+ 3413780091440152519ull, 6344854593289123058ull}},
+{{16737365976769786780ull, 15577894211045203475ull,
+ 13490597151154966457ull, 7931068241611403822ull}},
+{{8155010726267422785ull, 2818654854262170316ull,
+ 3819937201044466132ull, 4956917651007127389ull}},
+{{10193763407834278482ull, 3523318567827712895ull,
+ 9386607519732970569ull, 6196147063758909236ull}},
+{{8130518241365460198ull, 9015834228212029023ull,
+ 11733259399666213211ull, 7745183829698636545ull}},
+{{11999102928494494480ull, 3329053383418824187ull,
+ 415758097150301401ull, 4840739893561647841ull}},
+{{10387192642190730196ull, 8773002747700918138ull,
+ 5131383639865264655ull, 6050924866952059801ull}},
+{{3760618765883636937ull, 6354567416198759769ull,
+ 11025915568258968723ull, 7563656083690074751ull}},
+{{13879601774745742846ull, 1665761625910530903ull,
+ 13808726257802937308ull, 4727285052306296719ull}},
+{{12737816200004790653ull, 2082202032388163629ull,
+ 12649221803826283731ull, 5909106315382870899ull}},
+{{2087212194723824604ull, 16437810595767368249ull,
+ 11199841236355466759ull, 7386382894228588624ull}},
+{{12833722667770860138ull, 17191160649995687011ull,
+ 6999900772722166724ull, 4616489308892867890ull}},
+{{11430467316286187268ull, 3042206738785057148ull,
+ 17973248002757484214ull, 5770611636116084862ull}},
+{{14288084145357734085ull, 13026130460336097243ull,
+ 13243187966592079459ull, 7213264545145106078ull}},
+{{13248419163269779702ull, 11670977056992733650ull,
+ 7330612921385323516ull, 9016580681431382598ull}},
+{{12891947995471000218ull, 16517732697475234339ull,
+ 18416691131147990909ull, 5635362925894614123ull}},
+{{11503248975911362368ull, 6812107816561879212ull,
+ 18409177895507600733ull, 7044203657368267654ull}},
+{{14379061219889202960ull, 13126820789129736919ull,
+ 13788100332529725108ull, 8805254571710334568ull}},
+{{15904442290071833706ull, 17427635030060861382ull,
+ 8617562707831078192ull, 5503284107318959105ull}},
+{{10657180825735016325ull, 3337799713866525112ull,
+ 15383639403216235645ull, 6879105134148698881ull}},
+{{13321476032168770406ull, 8783935660760544294ull,
+ 5394491198738130844ull, 8598881417685873602ull}},
+{{3714236501678093600ull, 14713331824830115992ull,
+ 7983243017638719681ull, 5374300886053671001ull}},
+{{4642795627097617000ull, 4556606725755481278ull,
+ 14590739790475787506ull, 6717876107567088751ull}},
+{{15026866570726797057ull, 14919130444049127405ull,
+ 13626738719667346478ull, 8397345134458860939ull}},
+{{11697634615917942113ull, 4712770509103316724ull,
+ 6210868690578397597ull, 5248340709036788087ull}},
+{{14622043269897427641ull, 10502649154806533809ull,
+ 3151899844795609092ull, 6560425886295985109ull}},
+{{4442496032089620839ull, 13128311443508167262ull,
+ 8551560824421899269ull, 8200532357869981386ull}},
+{{16611618075338176737ull, 10511037661406298490ull,
+ 9956411533691074947ull, 5125332723668738366ull}},
+{{11541150557317945113ull, 8527111058330485209ull,
+ 3222142380259067876ull, 6406665904585922958ull}},
+{{591380141365267679ull, 10658888822913106512ull,
+ 13251050012178610653ull, 8008332380732403697ull}},
+{{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull,
+ 5005207737957752311ull}},
+{{9685387772296391182ull, 1986188617563206094ull,
+ 15540529592745350965ull, 6256509672447190388ull}},
+{{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull,
+ 7820637090558987986ull}},
+{{6413787692499708635ull, 9045699637415760105ull,
+ 5223509716691223585ull, 4887898181599367491ull}},
+{{12628920634052023698ull, 15918810565197088035ull,
+ 1917701127436641577ull, 6109872726999209364ull}},
+{{11174464774137641718ull, 6063455151214196332ull,
+ 2397126409295801972ull, 7637340908749011705ull}},
+{{16207412520690801882ull, 13013031506363648515ull,
+ 13027419051878345992ull, 4773338067968132315ull}},
+{{15647579632436114448ull, 16266289382954560644ull,
+ 11672587796420544586ull, 5966672584960165394ull}},
+{{1112730466835591444ull, 11109489691838424998ull,
+ 5367362708670904925ull, 7458340731200206743ull}},
+{{14530514597054408365ull, 9249274066612709575ull,
+ 10272130720560397434ull, 4661462957000129214ull}},
+{{13551457227890622552ull, 2338220546411111161ull,
+ 3616791363845720985ull, 5826828696250161518ull}},
+{{3104263479581114478ull, 7534461701441276856ull,
+ 13744361241661927039ull, 7283535870312701897ull}},
+{{3880329349476393097ull, 4806391108374208166ull,
+ 3345393496795245087ull, 9104419837890877372ull}},
+{{16260263898704909398ull, 9921523470374961959ull,
+ 11314242972351803987ull, 5690262398681798357ull}},
+{{15713643854953748843ull, 7790218319541314545ull,
+ 307745660157591272ull, 7112827998352247947ull}},
+{{5806996763410022342ull, 9737772899426643182ull,
+ 14219740130479152802ull, 8891034997940309933ull}},
+{{17464431032413427676ull, 10697794080569039892ull,
+ 11193180590763164453ull, 5556896873712693708ull}},
+{{3383794716807232979ull, 17983928619138687770ull,
+ 13991475738453955566ull, 6946121092140867135ull}},
+{{13453115432863817032ull, 13256538737068583904ull,
+ 12877658654640056554ull, 8682651365176083919ull}},
+{{8408197145539885645ull, 12897022729095252844ull,
+ 14966065686791117202ull, 5426657103235052449ull}},
+{{10510246431924857056ull, 6897906374514290247ull,
+ 4872524053206732791ull, 6783321379043815562ull}},
+{{8526122021478683416ull, 4010696949715474905ull,
+ 15314027103363191797ull, 8479151723804769452ull}},
+{{16858041309492646895ull, 4812528602785865767ull,
+ 347894902747219065ull, 5299469827377980908ull}},
+{{16460865618438420715ull, 10627346771909720113ull,
+ 434868628434023831ull, 6624337284222476135ull}},
+{{6741023967765862181ull, 8672497446459762238ull,
+ 14378643840824693501ull, 8280421605278095168ull}},
+{{18048198035135827576ull, 7726153913251045350ull,
+ 8986652400515433438ull, 5175263503298809480ull}},
+{{13336875507065008661ull, 434320354709030880ull,
+ 11233315500644291798ull, 6469079379123511850ull}},
+{{16671094383831260826ull, 9766272480241064408ull,
+ 4818272338950588939ull, 8086349223904389813ull}},
+{{10419433989894538017ull, 3798077290936971303ull,
+ 5317263221057812039ull, 5053968264940243633ull}},
+{{8412606468940784617ull, 135910595243826225ull,
+ 11258265044749652953ull, 6317460331175304541ull}},
+{{15127444104603368675ull, 4781574262482170685ull,
+ 237773250654902479ull, 7896825413969130677ull}},
+{{11760495574590799374ull, 9906012941692438534ull,
+ 2454451290873008001ull, 4935515883730706673ull}},
+{{5477247431383723409ull, 16994202195542936072ull,
+ 7679750132018647905ull, 6169394854663383341ull}},
+{{6846559289229654262ull, 7407694689146506378ull,
+ 14211373683450697786ull, 7711743568329229176ull}},
+{{8890785574195921818ull, 9241495199143954390ull,
+ 8882108552156686116ull, 4819839730205768235ull}},
+{{1890109930890126464ull, 11551868998929942988ull,
+ 6490949671768469741ull, 6024799662757210294ull}},
+{{2362637413612658080ull, 604778193380265023ull,
+ 17337059126565362985ull, 7530999578446512867ull}},
+{{8394177411148993156ull, 11907201416931135399ull,
+ 8529818944889657913ull, 4706874736529070542ull}},
+{{5881035745508853541ull, 1048943715881755537ull,
+ 1438901644257296584ull, 5883593420661338178ull}},
+{{11962980700313454830ull, 1311179644852194421ull,
+ 11021999092176396538ull, 7354491775826672722ull}},
+{{1118667820109654825ull, 10862346592920018835ull,
+ 4554126828365719864ull, 9193114719783340903ull}},
+{{16840068452064391930ull, 6788966620575011771ull,
+ 9763858295369656771ull, 5745696699864588064ull}},
+{{16438399546653102009ull, 3874522257291376810ull,
+ 12204822869212070964ull, 7182120874830735080ull}},
+{{11324627396461601703ull, 4843152821614221013ull,
+ 15256028586515088705ull, 8977651093538418850ull}},
+{{9383735132002195016ull, 14556185559577357893ull,
+ 14146703884999318344ull, 5611031933461511781ull}},
+{{16341354933430131674ull, 18195231949471697366ull,
+ 3848321800966984218ull, 7013789916826889727ull}},
+{{11203321629932888785ull, 13520667899984845900ull,
+ 198716232781342369ull, 8767237396033612159ull}},
+{{16225448055562831299ull, 1532888409849446831ull,
+ 7041726673129420837ull, 5479523372521007599ull}},
+{{15670124051026151219ull, 6527796530739196443ull,
+ 4190472322984388142ull, 6849404215651259499ull}},
+{{14975969045355301120ull, 17383117700278771362ull,
+ 626404385303097273ull, 8561755269564074374ull}},
+{{13971666671774451104ull, 3946919535033150245ull,
+ 14226560796096599508ull, 5351097043477546483ull}},
+{{3629525284435900168ull, 4933649418791437807ull,
+ 13171514976693361481ull, 6688871304346933104ull}},
+{{18371964660827038922ull, 10778747791916685162ull,
+ 16464393720866701851ull, 8361089130433666380ull}},
+{{16094163931444287230ull, 4430874360734234274ull,
+ 1066874038686912849ull, 5225680706521041488ull}},
+{{10894332877450583230ull, 10150278969345180747ull,
+ 1333592548358641061ull, 6532100883151301860ull}},
+{{9006230078385841133ull, 17299534730108863838ull,
+ 1666990685448301326ull, 8165126103939127325ull}},
+{{1017207780563762804ull, 6200523187890651995ull,
+ 3347712187618882281ull, 5103203814961954578ull}},
+{{15106567780986867217ull, 12362340003290702897ull,
+ 13408012271378378659ull, 6379004768702443222ull}},
+{{5048151670951420310ull, 10841238985685990718ull,
+ 7536643302368197516ull, 7973755960878054028ull}},
+{{16990152849626801406ull, 15999146402908520006ull,
+ 13933774100834899255ull, 4983597475548783767ull}},
+{{12014319025178725949ull, 15387246985208262104ull,
+ 12805531607616236165ull, 6229496844435979709ull}},
+{{15017898781473407436ull, 5399000676228163918ull,
+ 2171856454238131495ull, 7786871055544974637ull}},
+{{4774500719993491744ull, 10291904450283684305ull,
+ 3663253293112526136ull, 4866794409715609148ull}},
+{{10579811918419252584ull, 12864880562854605381ull,
+ 4579066616390657670ull, 6083493012144511435ull}},
+{{17836450916451453633ull, 6857728666713480918ull,
+ 1112147252060934184ull, 7604366265180639294ull}},
+{{6536095804354770617ull, 4286080416695925574ull,
+ 14530150087820247577ull, 4752728915737899558ull}},
+{{17393491792298239079ull, 9969286539297294871ull,
+ 8939315572920533663ull, 5940911144672374448ull}},
+{{17130178721945410945ull, 7849922155694230685ull,
+ 11174144466150667079ull, 7426138930840468060ull}},
+{{13012204710429575793ull, 11823730374949976034ull,
+ 16207212328198942732ull, 4641336831775292537ull}},
+{{7041883851182193933ull, 14779662968687470043ull,
+ 6423957354966514703ull, 5801671039719115672ull}},
+{{4190668795550354512ull, 13862892692431949650ull,
+ 8029946693708143379ull, 7252088799648894590ull}},
+{{14461708031292718948ull, 12716929847112549158ull,
+ 814061330280403416ull, 9065110999561118238ull}},
+{{4426881501130561438ull, 7948081154445343224ull,
+ 14343846386707415847ull, 5665694374725698898ull}},
+{{5533601876413201798ull, 5323415424629291126ull,
+ 8706435946529494001ull, 7082117968407123623ull}},
+{{16140374382371278055ull, 11265955299214001811ull,
+ 6271358914734479597ull, 8852647460508904529ull}},
+{{7781890979768354833ull, 9347065071222445084ull,
+ 15448814367777519508ull, 5532904662818065330ull}},
+{{9727363724710443541ull, 11683831339028056355ull,
+ 10087645922867123577ull, 6916130828522581663ull}},
+{{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull,
+ 8645163535653227079ull}},
+{{13940571185267692384ull, 481081949064316707ull,
+ 11916198643363904711ull, 5403227209783266924ull}},
+{{12814027963157227576ull, 14436410491612559596ull,
+ 14895248304204880888ull, 6754034012229083655ull}},
+{{16017534953946534470ull, 18045513114515699495ull,
+ 14007374361828713206ull, 8442542515286354569ull}},
+{{16928488373857665900ull, 6666759678144924280ull,
+ 1837079948501863898ull, 5276589072053971606ull}},
+{{2713866393612530759ull, 17556821634535931159ull,
+ 11519721972482105680ull, 6595736340067464507ull}},
+{{17227391047297827161ull, 3499282969460362332ull,
+ 9787966447175244197ull, 8244670425084330634ull}},
+{{1543747367706366168ull, 4492894865126420410ull,
+ 10729165047911915527ull, 5152919015677706646ull}},
+{{11153056246487733517ull, 1004432562980637608ull,
+ 4188084273035118601ull, 6441148769597133308ull}},
+{{13941320308109666897ull, 5867226722153184914ull,
+ 5235105341293898251ull, 8051435961996416635ull}},
+{{13325011210995929715ull, 1361173692132046619ull,
+ 966097829094992455ull, 5032147476247760397ull}},
+{{12044577995317524239ull, 15536525170447221986ull,
+ 5819308304796128472ull, 6290184345309700496ull}},
+{{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull,
+ 7862730431637125620ull}},
+{{1339376026593886980ull, 7526224270984504273ull,
+ 13769706649976751177ull, 4914206519773203512ull}},
+{{6285906051669746629ull, 14019466357158018245ull,
+ 17212133312470938971ull, 6142758149716504390ull}},
+{{12469068583014571190ull, 12912646928020134902ull,
+ 12291794603733897906ull, 7678447687145630488ull}},
+{{3181481845956719090ull, 12682090348439972218ull,
+ 7682371627333686191ull, 4799029804466019055ull}},
+{{13200224344300674670ull, 11240926917122577368ull,
+ 4991278515739719835ull, 5998787255582523819ull}},
+{{16500280430375843337ull, 9439472627975833806ull,
+ 1627412126247261890ull, 7498484069478154774ull}},
+{{5700989250557514182ull, 10511356410912284033ull,
+ 14852190634186702393ull, 4686552543423846733ull}},
+{{11737922581624280632ull, 17750881532067742945ull,
+ 4730180237451214279ull, 5858190679279808417ull}},
+{{837345171748187077ull, 17576915896657290778ull,
+ 10524411315241405753ull, 7322738349099760521ull}},
+{{10270053501540009654ull, 8136086815539449760ull,
+ 17767200162479145096ull, 9153422936374700651ull}},
+{{6418783438462506034ull, 5085054259712156100ull,
+ 8798657092335771733ull, 5720889335234187907ull}},
+{{8023479298078132543ull, 10968003843067583029ull,
+ 6386635346992326762ull, 7151111669042734884ull}},
+{{14641035141025053582ull, 4486632766979702978ull,
+ 7983294183740408453ull, 8938889586303418605ull}},
+{{13762332981568046393ull, 5109988488576008313ull,
+ 7295401874051449235ull, 5586805991439636628ull}},
+{{3367858171677894279ull, 1775799592292622488ull,
+ 9119252342564311544ull, 6983507489299545785ull}},
+{{4209822714597367849ull, 2219749490365778110ull,
+ 16010751446632777334ull, 8729384361624432231ull}},
+{{16466197251905518618ull, 15222401486760775030ull,
+ 16924248681786567689ull, 5455865226015270144ull}},
+{{11359374528027122464ull, 5192943803168805076ull,
+ 2708566778523657996ull, 6819831532519087681ull}},
+{{14199218160033903080ull, 6491179753961006345ull,
+ 7997394491581960399ull, 8524789415648859601ull}},
+{{1956982322380107569ull, 10974516373866710822ull,
+ 16527586603307195009ull, 5327993384780537250ull}},
+{{11669599939829910269ull, 18329831485760776431ull,
+ 11436111217279217953ull, 6659991730975671563ull}},
+{{9975313906359999932ull, 9077231301918806827ull,
+ 9683453003171634538ull, 8324989663719589454ull}},
+{{3928728182261306006ull, 10284955582126642171ull,
+ 1440472108554883682ull, 5203118539824743409ull}},
+{{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull,
+ 6503898174780929261ull}},
+{{9597402298603831562ull, 18376086106286572344ull,
+ 12627031211078628537ull, 8129872718476161576ull}},
+{{5998376436627394726ull, 4567524788788025859ull,
+ 7891894506924142836ull, 5081170449047600985ull}},
+{{2886284527356855504ull, 5709405985985032324ull,
+ 14476554152082566449ull, 6351463061309501231ull}},
+{{3607855659196069380ull, 11748443500908678309ull,
+ 13484006671675820157ull, 7939328826636876539ull}},
+{{4560752796211237315ull, 9648620197281617895ull,
+ 6121661160583693646ull, 4962080516648047837ull}},
+{{1089254976836658739ull, 2837403209747246561ull,
+ 12263762469157004962ull, 6202600645810059796ull}},
+{{5973254739473211328ull, 12770126049038834009ull,
+ 15329703086446256202ull, 7753250807262574745ull}},
+{{15262499258239226840ull, 12593014799076659159ull,
+ 2663535401387828270ull, 4845781754539109216ull}},
+{{14466438054371645646ull, 6517896461991048141ull,
+ 3329419251734785338ull, 6057227193173886520ull}},
+{{4247989512682393345ull, 17370742614343585985ull,
+ 4161774064668481672ull, 7571533991467358150ull}},
+{{14184208491494965601ull, 10856714133964741240ull,
+ 16436166845699964757ull, 4732208744667098843ull}},
+{{17730260614368707001ull, 18182578685883314454ull,
+ 15933522538697568042ull, 5915260930833873554ull}},
+{{12939453731106107943ull, 13504851320499367260ull,
+ 10693531136517184245ull, 7394076163542341943ull}},
+{{17310530618796093273ull, 10746375084525798489ull,
+ 13600985987964322009ull, 4621297602213963714ull}},
+{{7803105218212952879ull, 18044654874084636016ull,
+ 7777860448100626703ull, 5776622002767454643ull}},
+{{9753881522766191098ull, 17944132574178407116ull,
+ 5110639541698395475ull, 7220777503459318304ull}},
+{{12192351903457738873ull, 17818479699295620991ull,
+ 6388299427122994344ull, 9025971879324147880ull}},
+{{14537748967302168652ull, 11136549812059763119ull,
+ 3992687141951871465ull, 5641232424577592425ull}},
+{{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull,
+ 7051540530721990531ull}},
+{{12338939219948015734ull, 107036512240675234ull,
+ 7391495163906646141ull, 8814425663402488164ull}},
+{{12323523030894897738ull, 2372740829364115973ull,
+ 13843056514296429646ull, 5509016039626555102ull}},
+{{1569345733336458460ull, 12189298073559920775ull,
+ 8080448606015761249ull, 6886270049533193878ull}},
+{{15796740221952736787ull, 1401564536667737256ull,
+ 877188720664925754ull, 8607837561916492348ull}},
+{{9872962638720460492ull, 5487663853844723689ull,
+ 9771614987270354404ull, 5379898476197807717ull}},
+{{16952889316827963519ull, 6859579817305904611ull,
+ 16826204752515330909ull, 6724873095247259646ull}},
+{{16579425627607566495ull, 13186160790059768668ull,
+ 11809383903789387828ull, 8406091369059074558ull}},
+{{1138768980399953251ull, 17464722530642131226ull,
+ 2769178921440979488ull, 5253807105661921599ull}},
+{{10646833262354717372ull, 3384159089593112416ull,
+ 17296531707083388073ull, 6567258882077401998ull}},
+{{13308541577943396715ull, 8841884880418778424ull,
+ 12397292596999459283ull, 8209073602596752498ull}},
+{{8317838486214622947ull, 3220335041048042563ull,
+ 12359993891552049956ull, 5130671001622970311ull}},
+{{5785612089340890780ull, 4025418801310053204ull,
+ 10838306346012674541ull, 6413338752028712889ull}}
+};
+
+static const UINT256 multipliers2_binary64[] =
+ { {{918777112239470733ull, 5138421092069233273ull,
+ 15049182825743144437ull, 3877256883183270350ull}},
+{{12103450741218138969ull, 5517356191756964747ull,
+ 4794053247662077369ull, 2423285551989543969ull}},
+{{10517627408095285807ull, 11508381258123593838ull,
+ 10604252578004984615ull, 3029106939986929961ull}},
+{{3923662223264331450ull, 9773790554227104394ull,
+ 17867001740933618673ull, 3786383674983662451ull}},
+{{7063974907967595060ull, 17637834142460410006ull,
+ 8861033078869817718ull, 2366489796864789032ull}},
+{{18053340671814269633ull, 12823920641220736699ull,
+ 11076291348587272148ull, 2958112246080986290ull}},
+{{17954989821340449138ull, 16029900801525920874ull,
+ 4621992148879314377ull, 3697640307601232863ull}},
+{{15833554656765168615ull, 3101158973312618690ull,
+ 9806274120690653342ull, 2311025192250770539ull}},
+{{10568571284101684961ull, 13099820753495549171ull,
+ 7646156632435928773ull, 2888781490313463174ull}},
+{{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull,
+ 3610976862891828968ull}},
+{{10748785108374647871ull, 17009705413516254652ull,
+ 417904692112668948ull, 4513721078614786210ull}},
+{{15941362729588930728ull, 1407693846592883349ull,
+ 4872876450997805997ull, 2821075674134241381ull}},
+{{6091645356703999697ull, 6371303326668492091ull,
+ 10702781582174645400ull, 3526344592667801726ull}},
+{{3002870677452611718ull, 7964129158335615114ull,
+ 4155104940863530942ull, 4407930740834752158ull}},
+{{6488480191835270228ull, 365894705532371542ull,
+ 16431998643321870551ull, 2754956713021720098ull}},
+{{17333972276648863593ull, 14292426437197628139ull,
+ 11316626267297562380ull, 3443695891277150123ull}},
+{{17055779327383691587ull, 17865533046497035174ull,
+ 9534096815694565071ull, 4304619864096437654ull}},
+{{6048176061187419338ull, 18083487181701728840ull,
+ 1347124491381715265ull, 2690387415060273534ull}},
+{{7560220076484274172ull, 8769300921844997338ull,
+ 10907277651081919890ull, 3362984268825341917ull}},
+{{226903058750566907ull, 1738254115451470865ull,
+ 18245783082279787767ull, 4203730336031677396ull}},
+{{11671029457787574077ull, 8003937849798251146ull,
+ 2180242389570091546ull, 2627331460019798373ull}},
+{{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull,
+ 3284164325024747966ull}},
+{{11318454500152002639ull, 5588623862668685560ull,
+ 18394608293592278729ull, 4105205406280934957ull}},
+{{7074034062595001650ull, 15022104960236398235ull,
+ 13802473192708868157ull, 2565753378925584348ull}},
+{{4230856559816364158ull, 4942573145013334082ull,
+ 17253091490886085197ull, 3207191723656980435ull}},
+{{14511942736625231005ull, 10789902449694055506ull,
+ 16954678345180218592ull, 4008989654571225544ull}},
+{{13681650228818157283ull, 6743689031058784691ull,
+ 10596673965737636620ull, 2505618534107015965ull}},
+{{12490376767595308699ull, 8429611288823480864ull,
+ 17857528475599433679ull, 3132023167633769956ull}},
+{{15612970959494135874ull, 5925328092601963176ull,
+ 3875166520789740483ull, 3915028959542212446ull}},
+{{9758106849683834921ull, 1397487048662533033ull,
+ 16257037130775751514ull, 2446893099713882778ull}},
+{{16809319580532181555ull, 10970230847682942099ull,
+ 11097924376614913584ull, 3058616374642353473ull}},
+{{16399963457237839040ull, 13712788559603677624ull,
+ 37347415486478268ull, 3823270468302941842ull}},
+{{10249977160773649400ull, 17793864886607074323ull,
+ 4635028153106436821ull, 2389544042689338651ull}},
+{{8200785432539673846ull, 8407273052976679192ull,
+ 1182099172955658123ull, 2986930053361673314ull}},
+{{10250981790674592308ull, 5897405297793461086ull,
+ 10700996003049348462ull, 3733662566702091642ull}},
+{{1795177600744232288ull, 17520936366403076891ull,
+ 11299808520333230692ull, 2333539104188807276ull}},
+{{16079030056212454072ull, 3454426384294294497ull,
+ 14124760650416538366ull, 2916923880236009095ull}},
+{{6263729514983403878ull, 13541405017222643930ull,
+ 13044264794593285053ull, 3646154850295011369ull}},
+{{17053033930584030656ull, 3091698216246141200ull,
+ 2470272937959442605ull, 4557693562868764212ull}},
+{{10658146206615019160ull, 4238154394367532202ull,
+ 10767292623079427436ull, 2848558476792977632ull}},
+{{4099310721413998142ull, 5297692992959415253ull,
+ 13459115778849284295ull, 3560698095991222040ull}},
+{{9735824420194885581ull, 2010430222771881162ull,
+ 16823894723561605369ull, 4450872619989027550ull}},
+{{10696576281049191393ull, 12785733935300895486ull,
+ 5903248183798615451ull, 2781795387493142219ull}},
+{{4147348314456713433ull, 11370481400698731454ull,
+ 2767374211320881410ull, 3477244234366427774ull}},
+{{14407557429925667599ull, 4989729714018638509ull,
+ 12682589801005877571ull, 4346555292958034717ull}},
+{{11310566402917236201ull, 812738062047955116ull,
+ 10232461634842367434ull, 2716597058098771698ull}},
+{{14138208003646545252ull, 10239294614414719703ull,
+ 3567205006698183484ull, 3395746322623464623ull}},
+{{13061073986130793660ull, 12799118268018399629ull,
+ 18294064313654893067ull, 4244682903279330778ull}},
+{{10469014250545439990ull, 5693605908297805816ull,
+ 16045476214461696071ull, 2652926814549581736ull}},
+{{13086267813181799987ull, 2505321366944869366ull,
+ 1610101194367568473ull, 3316158518186977171ull}},
+{{7134462729622474176ull, 7743337727108474612ull,
+ 15847684548241624303ull, 4145198147733721463ull}},
+{{13682411242868822168ull, 11757115107083878488ull,
+ 16822331870292097045ull, 2590748842333575914ull}},
+{{17103014053586027710ull, 861335828572684398ull,
+ 11804542801010345499ull, 3238436052916969893ull}},
+{{12155395530127758829ull, 14911727840998019210ull,
+ 920620445980768161ull, 4048045066146212367ull}},
+{{12208808224757237173ull, 2402300872982680150ull,
+ 7492916806379061957ull, 2530028166341382729ull}},
+{{6037638244091770658ull, 7614562109655738092ull,
+ 13977832026401215350ull, 3162535207926728411ull}},
+{{7547047805114713322ull, 294830600214896807ull,
+ 12860604014574131284ull, 3953169009908410514ull}},
+{{11634433905837777682ull, 9407641161989086312ull,
+ 12649563527536219956ull, 2470730631192756571ull}},
+{{14543042382297222103ull, 11759551452486357890ull,
+ 11200268390992887041ull, 3088413288990945714ull}},
+{{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull,
+ 3860516611238682143ull}},
+{{3291301328921775936ull, 5151924306131002686ull,
+ 9903131185070039977ull, 2412822882024176339ull}},
+{{13337498698006995728ull, 11051591401091141261ull,
+ 7767227962910162067ull, 3016028602530220424ull}},
+{{2836815317226580948ull, 9202803232936538673ull,
+ 9709034953637702584ull, 3770035753162775530ull}},
+{{13302224619335082852ull, 5751752020585336670ull,
+ 10679832864450952019ull, 2356272345726734706ull}},
+{{7404408737314077757ull, 2578004007304282934ull,
+ 4126419043708914216ull, 2945340432158418383ull}},
+{{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull,
+ 3681675540198022979ull}},
+{{40173605984776736ull, 13251503298267717893ull,
+ 14517980288043107294ull, 4602094425247528723ull}},
+{{2330951512954179412ull, 3670503542989935779ull,
+ 6767894670813248107ull, 2876309015779705452ull}},
+{{16748747446474887977ull, 18423187484019583435ull,
+ 8459868338516560133ull, 3595386269724631815ull}},
+{{16324248289666222067ull, 9193926299742315582ull,
+ 5963149404718312263ull, 4494232837155789769ull}},
+{{5590969162614000888ull, 12663732964980029095ull,
+ 15256183424017414924ull, 2808895523222368605ull}},
+{{2377025434840113206ull, 15829666206225036369ull,
+ 5235171224739604943ull, 3511119404027960757ull}},
+{{7582967811977529411ull, 15175396739353907557ull,
+ 11155650049351894083ull, 4388899255034950946ull}},
+{{7045197891699649834ull, 7178779952882498271ull,
+ 11583967299272321706ull, 2743062034396844341ull}},
+{{4194811346197174389ull, 18196846977957898647ull,
+ 644901068808238420ull, 3428827542996055427ull}},
+{{631828164319080082ull, 4299314648737821693ull,
+ 14641184391292461738ull, 4286034428745069283ull}},
+{{2700735611913119003ull, 7298757673888526462ull,
+ 6844897235344094634ull, 2678771517965668302ull}},
+{{12599291551746174562ull, 18346819129215433885ull,
+ 17779493581034894100ull, 3348464397457085377ull}},
+{{1914056384400554490ull, 4486779837809740741ull,
+ 8389308921011453914ull, 4185580496821356722ull}},
+{{3502128249464040509ull, 7415923417058475867ull,
+ 9855004094059546600ull, 2615987810513347951ull}},
+{{18212718367112214348ull, 9269904271323094833ull,
+ 7707069099147045346ull, 3269984763141684939ull}},
+{{8930839903608104222ull, 2364008302299092734ull,
+ 5022150355506418779ull, 4087480953927106174ull}},
+{{970088921327677235ull, 17618406253432790623ull,
+ 16973902027473675448ull, 2554675596204441358ull}},
+{{15047669206941760256ull, 3576263743081436662ull,
+ 11994005497487318503ull, 3193344495255551698ull}},
+{{9586214471822424512ull, 18305387734133959540ull,
+ 5769134835004372320ull, 3991680619069439623ull}},
+{{15214756081743791128ull, 11440867333833724712ull,
+ 10523238299518814556ull, 2494800386918399764ull}},
+{{571701028470187294ull, 14301084167292155891ull,
+ 13154047874398518195ull, 3118500483647999705ull}},
+{{14549684340869897829ull, 13264669190687806959ull,
+ 2607501787715984032ull, 3898125604559999632ull}},
+{{16011081740684767999ull, 8290418244179879349ull,
+ 1629688617322490020ull, 2436328502849999770ull}},
+{{6178794120573796287ull, 10363022805224849187ull,
+ 11260482808507888333ull, 3045410628562499712ull}},
+{{3111806632289857455ull, 17565464524958449388ull,
+ 14075603510634860416ull, 3806763285703124640ull}},
+{{11168251182035936718ull, 10978415328099030867ull,
+ 8797252194146787760ull, 2379227053564452900ull}},
+{{9348627959117532993ull, 13723019160123788584ull,
+ 10996565242683484700ull, 2974033816955566125ull}},
+{{11685784948896916241ull, 17153773950154735730ull,
+ 18357392571781743779ull, 3717542271194457656ull}},
+{{11915301611487960555ull, 8415265709633015879ull,
+ 11473370357363589862ull, 2323463919496536035ull}},
+{{10282440995932562789ull, 1295710100186494041ull,
+ 9730026928277099424ull, 2904329899370670044ull}},
+{{17464737263343091390ull, 1619637625233117551ull,
+ 12162533660346374280ull, 3630412374213337555ull}},
+{{17219235560751476334ull, 2024547031541396939ull,
+ 10591481057005579946ull, 4538015467766671944ull}},
+{{8456179216255978757ull, 5877027913140760991ull,
+ 6619675660628487466ull, 2836259667354169965ull}},
+{{5958538001892585542ull, 16569656928280727047ull,
+ 12886280594212997236ull, 3545324584192712456ull}},
+{{2836486483938344023ull, 2265327086641357193ull,
+ 16107850742766246546ull, 4431655730240890570ull}},
+{{13302019098529934775ull, 6027515447578236149ull,
+ 14679092732656291995ull, 2769784831400556606ull}},
+{{2792465817880254756ull, 2922708291045407283ull,
+ 9125493878965589186ull, 3462231039250695758ull}},
+{{17325640327632482157ull, 12876757400661534911ull,
+ 2183495311852210674ull, 4327788799063369698ull}},
+{{17746054232411383205ull, 12659659393840847223ull,
+ 5976370588335019575ull, 2704867999414606061ull}},
+{{17570881772086841102ull, 11212888223873671125ull,
+ 12082149253846162373ull, 3381084999268257576ull}},
+{{8128544159826387665ull, 181052224559925195ull,
+ 15102686567307702967ull, 4226356249085321970ull}},
+{{2774497090677798339ull, 7030686667991035103ull,
+ 14050865122994702258ull, 2641472655678326231ull}},
+{{17303179418629411635ull, 18011730371843569686ull,
+ 12951895385315989918ull, 3301840819597907789ull}},
+{{12405602236431988736ull, 13291290927949686300ull,
+ 2354811176362823686ull, 4127301024497384737ull}},
+{{16976873434624768768ull, 3695370811541166033ull,
+ 13000972031295234564ull, 2579563140310865460ull}},
+{{7386033737998797248ull, 4619213514426457542ull,
+ 16251215039119043205ull, 3224453925388581825ull}},
+{{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull,
+ 4030567406735727282ull}},
+{{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull,
+ 2519104629209829551ull}},
+{{13842222223753820550ull, 2349222876544249363ull,
+ 6214609585557347206ull, 3148880786512286939ull}},
+{{12691091761264887783ull, 12159900632535087512ull,
+ 3156575963519296103ull, 3936100983140358674ull}},
+{{7931932350790554864ull, 14517466922975511551ull,
+ 6584545995626947968ull, 2460063114462724171ull}},
+{{5303229420060805676ull, 18146833653719389439ull,
+ 3618996476106297056ull, 3075078893078405214ull}},
+{{2017350756648619191ull, 4236797993439685183ull,
+ 13747117631987647129ull, 3843848616348006517ull}},
+{{8178373250546468851ull, 14177213791968272999ull,
+ 10897791529205973407ull, 2402405385217504073ull}},
+{{5611280544755698159ull, 13109831221532953345ull,
+ 18233925429934854663ull, 3003006731521880091ull}},
+{{11625786699372010603ull, 11775603008488803777ull,
+ 18180720768991180425ull, 3753758414402350114ull}},
+{{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull,
+ 2346099009001468821ull}},
+{{5047420592760418868ull, 9776150602685301439ull,
+ 6133237568526430875ull, 2932623761251836027ull}},
+{{1697589722523135681ull, 7608502234929238895ull,
+ 3054860942230650690ull, 3665779701564795034ull}},
+{{15957045208436083313ull, 287255756806772810ull,
+ 13041948214643089171ull, 4582224626955993792ull}},
+{{14584839273699939975ull, 16320435912500090670ull,
+ 8151217634151930731ull, 2863890391847496120ull}},
+{{9007677055270149160ull, 15788858872197725434ull,
+ 10189022042689913414ull, 3579862989809370150ull}},
+{{2036224282232910642ull, 10512701553392380985ull,
+ 3512905516507615960ull, 4474828737261712688ull}},
+{{12801855222464038911ull, 6570438470870238115ull,
+ 2195565947817259975ull, 2796767960788570430ull}},
+{{11390633009652660735ull, 3601362070160409740ull,
+ 11967829471626350777ull, 3495959950985713037ull}},
+{{14238291262065825919ull, 9113388606127900079ull,
+ 1124728784250774759ull, 4369949938732141297ull}},
+{{15816461066432223055ull, 12613396906471019405ull,
+ 12232170536225203984ull, 2731218711707588310ull}},
+{{5935518277758115107ull, 15766746133088774257ull,
+ 6066841133426729172ull, 3414023389634485388ull}},
+{{12031083865625031788ull, 1261688592651416205ull,
+ 7583551416783411466ull, 4267529237043106735ull}},
+{{9825270425229338820ull, 5400241388834523032ull,
+ 11657248663130714022ull, 2667205773151941709ull}},
+{{12281588031536673524ull, 15973673772897929598ull,
+ 736502773631228815ull, 3334007216439927137ull}},
+{{6128613002566066097ull, 15355406197695024094ull,
+ 5532314485466423923ull, 4167509020549908921ull}},
+{{17665441181885955023ull, 7291285864345696106ull,
+ 14986911599484984712ull, 2604693137843693075ull}},
+{{12858429440502667971ull, 9114107330432120133ull,
+ 14121953480928842986ull, 3255866422304616344ull}},
+{{2237978745346171251ull, 2169262126185374359ull,
+ 17652441851161053733ull, 4069833027880770430ull}},
+{{8316265743482438888ull, 3661631838079552926ull,
+ 6421090138548270679ull, 2543645642425481519ull}},
+{{1171960142498272802ull, 18412097852881604870ull,
+ 3414676654757950444ull, 3179557053031851899ull}},
+{{10688322214977616811ull, 4568378242392454471ull,
+ 18103403873729601768ull, 3974446316289814873ull}},
+{{13597730412002092363ull, 2855236401495284044ull,
+ 4397098393439919249ull, 2484028947681134296ull}},
+{{16997163015002615453ull, 8180731520296492959ull,
+ 5496372991799899061ull, 3105036184601417870ull}},
+{{16634767750325881413ull, 14837600418798004103ull,
+ 16093838276604649634ull, 3881295230751772337ull}},
+{{17314258871594757739ull, 13885186280176140468ull,
+ 3141119895236824165ull, 2425809519219857711ull}},
+{{3196079515783895558ull, 3521424794938011874ull,
+ 17761457924328193919ull, 3032261899024822138ull}},
+{{13218471431584645255ull, 18236839048954678554ull,
+ 12978450368555466590ull, 3790327373781027673ull}},
+{{12873230663167791189ull, 6786338387169286192ull,
+ 1194002452706084763ull, 2368954608613142296ull}},
+{{16091538328959738986ull, 3871236965534219836ull,
+ 1492503065882605954ull, 2961193260766427870ull}},
+{{1667678837490122116ull, 14062418243772550604ull,
+ 11089000869208033250ull, 3701491575958034837ull}},
+{{10265671310286102131ull, 13400697420785232031ull,
+ 9236468552468714733ull, 2313432234973771773ull}},
+{{8220403119430239759ull, 2915813720699376327ull,
+ 16157271709013281321ull, 2891790293717214716ull}},
+{{5663817880860411795ull, 8256453169301608313ull,
+ 1749845562557050035ull, 3614737867146518396ull}},
+{{11691458369502902647ull, 5708880443199622487ull,
+ 2187306953196312544ull, 4518422333933147995ull}},
+{{14224690508580396011ull, 3568050276999764054ull,
+ 17507967910243553004ull, 2824013958708217496ull}},
+{{8557491098870719205ull, 4460062846249705068ull,
+ 3438215814094889639ull, 3530017448385271871ull}},
+{{10696863873588399007ull, 963392539384743431ull,
+ 18132827822900775761ull, 4412521810481589838ull}},
+{{13603068948633831235ull, 12131335383183934404ull,
+ 6721331370885596946ull, 2757826131550993649ull}},
+{{17003836185792289044ull, 5940797192125142197ull,
+ 13013350232034384087ull, 3447282664438742061ull}},
+{{7419737176958197593ull, 2814310471729039843ull,
+ 2431629734760816397ull, 4309103330548427577ull}},
+{{2331492726385179544ull, 4064787054044343854ull,
+ 13048983630293980008ull, 2693189581592767235ull}},
+{{12137737944836250237ull, 5080983817555429817ull,
+ 11699543519440087106ull, 3366486976990959044ull}},
+{{1337114375763149085ull, 15574601808799063080ull,
+ 14624429399300108882ull, 4208108721238698805ull}},
+{{835696484851968178ull, 14345812148926802329ull,
+ 11446111383776262003ull, 2630067950774186753ull}},
+{{5656306624492348127ull, 13320579167731115007ull,
+ 472581174438163792ull, 3287584938467733442ull}},
+{{2458697262188047254ull, 16650723959663893759ull,
+ 9814098504902480548ull, 4109481173084666802ull}},
+{{8454214816508611390ull, 1183330437935157791ull,
+ 10745497583991438247ull, 2568425733177916751ull}},
+{{5956082502208376333ull, 15314221102701110951ull,
+ 8820185961561909904ull, 3210532166472395939ull}},
+{{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull,
+ 4013165208090494924ull}},
+{{13300100739401646331ull, 2740863199630467122ull,
+ 13231838557807900481ull, 2508228255056559327ull}},
+{{7401753887397282105ull, 8037765017965471807ull,
+ 11928112178832487697ull, 3135285318820699159ull}},
+{{4640506340819214727ull, 14658892290884227663ull,
+ 10298454205113221717ull, 3919106648525873949ull}},
+{{9817845490653091061ull, 11467650691016336241ull,
+ 8742376887409457525ull, 2449441655328671218ull}},
+{{16883992881743751730ull, 499505308488256589ull,
+ 1704599072407046099ull, 3061802069160839023ull}},
+{{7269933046897525950ull, 14459439690892484449ull,
+ 15965806895790971335ull, 3827252586451048778ull}},
+{{16072923200379423479ull, 15954678834448884636ull,
+ 14590315328296744988ull, 2392032866531905486ull}},
+{{1644409926764727733ull, 1496604469351554180ull,
+ 9014522123516155428ull, 2990041083164881858ull}},
+{{2055512408455909666ull, 1870755586689442725ull,
+ 2044780617540418477ull, 3737551353956102323ull}},
+{{3590538264498637493ull, 3475065250894595655ull,
+ 17418888950458619212ull, 2335969596222563951ull}},
+{{18323230885905460578ull, 4343831563618244568ull,
+ 17161925169645886111ull, 2919961995278204939ull}},
+{{4457294533672274107ull, 818103436095417807ull,
+ 16840720443629969735ull, 3649952494097756174ull}},
+{{959932148662954729ull, 14857687350401435971ull,
+ 11827528517682686360ull, 4562440617622195218ull}},
+{{16740858657410204370ull, 9286054594000897481ull,
+ 12003891341979066879ull, 2851525386013872011ull}},
+{{7091015266480591750ull, 6995882224073733948ull,
+ 10393178159046445695ull, 3564406732517340014ull}},
+{{8863769083100739688ull, 4133166761664779531ull,
+ 3768100661953281311ull, 4455508415646675018ull}},
+{{3234012667724268353ull, 9500758253681569063ull,
+ 6966748932148188723ull, 2784692759779171886ull}},
+{{17877573889937499153ull, 7264261798674573424ull,
+ 17931808202040011712ull, 3480865949723964857ull}},
+{{3900223288712322326ull, 9080327248343216781ull,
+ 8579702197267850928ull, 4351082437154956072ull}},
+{{4743482564658895406ull, 5675204530214510488ull,
+ 5362313873292406830ull, 2719426523221847545ull}},
+{{5929353205823619257ull, 16317377699622913918ull,
+ 11314578360042896441ull, 3399283154027309431ull}},
+{{16635063544134299879ull, 6561664069246478685ull,
+ 9531536931626232648ull, 4249103942534136789ull}},
+{{12702757724297631377ull, 4101040043279049178ull,
+ 8263053591480089357ull, 2655689964083835493ull}},
+{{6655075118517263413ull, 9737986072526199377ull,
+ 14940503007777499600ull, 3319612455104794366ull}},
+{{12930529916573967170ull, 12172482590657749221ull,
+ 9452256722867098692ull, 4149515568880992958ull}},
+{{10387424207072423433ull, 16831173656015869071ull,
+ 1295974433364548778ull, 2593447230550620599ull}},
+{{8372594240413141387ull, 11815595033165060531ull,
+ 15455026096987849685ull, 3241809038188275748ull}},
+{{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull,
+ 4052261297735344686ull}},
+{{3658785488805649269ull, 16724923399604708884ull,
+ 14380082147485451518ull, 2532663311084590428ull}},
+{{4573481861007061586ull, 11682782212651110297ull,
+ 17975102684356814398ull, 3165829138855738035ull}},
+{{10328538344686214887ull, 5380105728959112063ull,
+ 17857192337018630094ull, 3957286423569672544ull}},
+{{13372865493069966160ull, 17197624135881608751ull,
+ 11160745210636643808ull, 2473304014731045340ull}},
+{{12104395847910069796ull, 3050286096142459323ull,
+ 13950931513295804761ull, 3091630018413806675ull}},
+{{10518808791460199341ull, 8424543638605462058ull,
+ 12826978373192368047ull, 3864537523017258344ull}},
+{{11185941513090012492ull, 12182868801769495642ull,
+ 8016861483245230029ull, 2415335951885786465ull}},
+{{4759054854507739807ull, 1393527946929705841ull,
+ 14632762872483925441ull, 3019169939857233081ull}},
+{{10560504586562062663ull, 6353595952089520205ull,
+ 4455895535322743089ull, 3773962424821541352ull}},
+{{8906158375814983117ull, 15500212516124419888ull,
+ 2784934709576714430ull, 2358726515513463345ull}},
+{{11132697969768728896ull, 10151893608300749052ull,
+ 8092854405398280942ull, 2948408144391829181ull}},
+{{13915872462210911119ull, 3466494973521160507ull,
+ 14727754025175239082ull, 3685510180489786476ull}},
+{{12783154559336250995ull, 13556490753756226442ull,
+ 18409692531469048852ull, 4606887725612233095ull}},
+{{12601157618012544776ull, 17696178757952417334ull,
+ 18423586859809237388ull, 2879304828507645684ull}},
+{{6528074985660905162ull, 3673479373730970052ull,
+ 4582739501051995120ull, 3599131035634557106ull}},
+{{8160093732076131452ull, 4591849217163712565ull,
+ 14951796413169769708ull, 4498913794543196382ull}},
+{{7405901591761276110ull, 12093277797582096161ull,
+ 4733186739803718163ull, 2811821121589497739ull}},
+{{13869063008128983041ull, 10504911228550232297ull,
+ 1304797406327259800ull, 3514776401986872174ull}},
+{{3501270704879065090ull, 13131139035687790372ull,
+ 10854368794763850558ull, 4393470502483590217ull}},
+{{11411666227404191489ull, 3595275878877481078ull,
+ 18313195542795876359ull, 2745919064052243885ull}},
+{{5041210747400463553ull, 18329152903879015060ull,
+ 9056436373212681736ull, 3432398830065304857ull}},
+{{6301513434250579442ull, 4464697056139217209ull,
+ 15932231484943240075ull, 4290498537581631071ull}},
+{{15467660942475081911ull, 484592650873316803ull,
+ 16875173705730606903ull, 2681561585988519419ull}},
+{{14722890159666464485ull, 14440798868873809716ull,
+ 16482281113735870724ull, 3351951982485649274ull}},
+{{18403612699583080606ull, 18050998586092262145ull,
+ 11379479355315062597ull, 4189939978107061593ull}},
+{{4584728909598343523ull, 13587717125521357793ull,
+ 194645569430832267ull, 2618712486316913496ull}},
+{{10342597155425317307ull, 12372960388474309337ull,
+ 243306961788540334ull, 3273390607896141870ull}},
+{{17539932462709034538ull, 6242828448738110863ull,
+ 9527505739090451226ull, 4091738259870177337ull}},
+{{17879986816834228443ull, 8513453798888707193ull,
+ 17483906133000001776ull, 2557336412418860835ull}},
+{{8514925465760621841ull, 10641817248610883992ull,
+ 17243196647822614316ull, 3196670515523576044ull}},
+{{10643656832200777301ull, 13302271560763604990ull,
+ 3107251736068716279ull, 3995838144404470056ull}},
+{{2040599501698097909ull, 15231448753118334975ull,
+ 1942032335042947674ull, 2497398840252793785ull}},
+{{16385807432404786099ull, 9815938904543142910ull,
+ 7039226437231072497ull, 3121748550315992231ull}},
+{{11258887253651206815ull, 16881609649106316542ull,
+ 4187347028111452717ull, 3902185687894990289ull}},
+{{2425118515104616356ull, 12856849039905141791ull,
+ 14146306938638127708ull, 2438866054934368930ull}},
+{{16866456199162934157ull, 16071061299881427238ull,
+ 8459511636442883827ull, 3048582568667961163ull}},
+{{11859698212098891888ull, 15477140606424396144ull,
+ 5962703527126216880ull, 3810728210834951454ull}},
+{{7412311382561807430ull, 9673212879015247590ull,
+ 17561747759736049262ull, 2381705131771844658ull}},
+{{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull,
+ 2977131414714805823ull}},
+{{52521489184354349ull, 12808552114247630408ull,
+ 11299329810091719308ull, 3721414268393507279ull}},
+{{32825930740221468ull, 17228717108259544813ull,
+ 13979610158948406423ull, 2325883917745942049ull}},
+{{4652718431852664739ull, 16924210366897043112ull,
+ 3639454643403344317ull, 2907354897182427562ull}},
+{{5815898039815830924ull, 7320204903339140178ull,
+ 13772690341108956205ull, 3634193621478034452ull}},
+{{16493244586624564463ull, 13761942147601313126ull,
+ 17215862926386195256ull, 4542742026847543065ull}},
+{{5696591848212964885ull, 8601213842250820704ull,
+ 3842385301350290179ull, 2839213766779714416ull}},
+{{7120739810266206107ull, 6139831284386137976ull,
+ 4802981626687862724ull, 3549017208474643020ull}},
+{{8900924762832757633ull, 7674789105482672470ull,
+ 6003727033359828405ull, 4436271510593303775ull}},
+{{951391958343085617ull, 7102586200140364246ull,
+ 10669858423490974609ull, 2772669694120814859ull}},
+{{10412611984783632829ull, 13489918768602843211ull,
+ 8725637010936330357ull, 3465837117651018574ull}},
+{{8404078962552153132ull, 3027340405471390302ull,
+ 1683674226815637139ull, 4332296397063773218ull}},
+{{640863333167707804ull, 18032988817915476603ull,
+ 5663982410187161115ull, 2707685248164858261ull}},
+{{14636137221741798467ull, 17929550003966957849ull,
+ 11691664031161339298ull, 3384606560206072826ull}},
+{{4460113471895084371ull, 13188565468103921504ull,
+ 5391208002096898315ull, 4230758200257591033ull}},
+{{2787570919934427732ull, 5937010408351256988ull,
+ 14898720047379031207ull, 2644223875160994395ull}},
+{{3484463649918034665ull, 2809576992011683331ull,
+ 14011714040796401105ull, 3305279843951242994ull}},
+{{18190637617679707043ull, 8123657258441992067ull,
+ 8291270514140725573ull, 4131599804939053743ull}},
+{{9063305501836122950ull, 7383128795739938994ull,
+ 12099573098979035339ull, 2582249878086908589ull}},
+{{2105759840440377880ull, 4617224976247535839ull,
+ 1289408318441630462ull, 3227812347608635737ull}},
+{{16467257855832636061ull, 14994903257164195606ull,
+ 6223446416479425981ull, 4034765434510794671ull}},
+{{5680350141468009635ull, 11677657544941316206ull,
+ 10807183037940723094ull, 2521728396569246669ull}},
+{{16323809713689787851ull, 5373699894321869449ull,
+ 18120664815853291772ull, 3152160495711558336ull}},
+{{6569704086830071102ull, 6717124867902336812ull,
+ 4204086946107063099ull, 3940200619639447921ull}},
+{{13329437091123570247ull, 1892360033225266555ull,
+ 14156769387385384197ull, 2462625387274654950ull}},
+{{12050110345477074904ull, 6977136059958971098ull,
+ 8472589697376954438ull, 3078281734093318688ull}},
+{{5839265894991567822ull, 17944792111803489681ull,
+ 10590737121721193047ull, 3847852167616648360ull}},
+{{15178756230438199649ull, 18133024097518262906ull,
+ 6619210701075745654ull, 2404907604760405225ull}},
+{{9750073251192973753ull, 13442908085043052825ull,
+ 12885699394772069972ull, 3006134505950506531ull}},
+{{16799277582418605095ull, 16803635106303816031ull,
+ 11495438225037699561ull, 3757668132438133164ull}},
+{{17417077516652710041ull, 3584742913798803163ull,
+ 16408020927503338034ull, 2348542582773833227ull}},
+{{17159660877388499647ull, 13704300679103279762ull,
+ 15898340140951784638ull, 2935678228467291534ull}},
+{{12226204059880848751ull, 7907003812024323895ull,
+ 10649553139334954990ull, 3669597785584114418ull}},
+{{10671069056423673034ull, 660382728175629061ull,
+ 4088569387313917930ull, 4586997231980143023ull}},
+{{8975261169478489598ull, 5024425223537156067ull,
+ 9472884894712280562ull, 2866873269987589389ull}},
+{{6607390443420724094ull, 15503903566276220892ull,
+ 16452792136817738606ull, 3583591587484486736ull}},
+{{8259238054275905117ull, 10156507420990500307ull,
+ 2119246097312621642ull, 4479489484355608421ull}},
+{{2856180774708746746ull, 10959503156546450596ull,
+ 3630371820034082478ull, 2799680927722255263ull}},
+{{3570225968385933433ull, 4476006908828287437ull,
+ 18373022830324766810ull, 3499601159652819078ull}},
+{{9074468478909804695ull, 14818380672890135104ull,
+ 13742906501051182704ull, 4374501449566023848ull}},
+{{5671542799318627935ull, 9261487920556334440ull,
+ 8589316563156989190ull, 2734063405978764905ull}},
+{{7089428499148284918ull, 2353487863840642242ull,
+ 15348331722373624392ull, 3417579257473456131ull}},
+{{18085157660790131956ull, 2941859829800802802ull,
+ 14573728634539642586ull, 4271974071841820164ull}},
+{{15914909556421220376ull, 6450348412052889655ull,
+ 18331952433442052424ull, 2669983794901137602ull}},
+{{15281950927099137566ull, 8062935515066112069ull,
+ 13691568504947789722ull, 3337479743626422003ull}},
+{{5267380603591758246ull, 855297356977864279ull,
+ 12502774612757349249ull, 4171849679533027504ull}},
+{{10209641904885930760ull, 12063775894179634934ull,
+ 7814234132973343280ull, 2607406049708142190ull}},
+{{3538680344252637642ull, 15079719867724543668ull,
+ 544420629361903292ull, 3259257562135177738ull}},
+{{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull,
+ 4074071952668972172ull}},
+{{14293809065015842918ull, 9475188137446105788ull,
+ 15413308176577997635ull, 2546294970418107607ull}},
+{{17867261331269803647ull, 7232299153380244331ull,
+ 14654949202295109140ull, 3182868713022634509ull}},
+{{17722390645659866655ull, 9040373941725305414ull,
+ 4483628447586722713ull, 3978585891278293137ull}},
+{{6464808135110028755ull, 17179448759646785644ull,
+ 14331482825810171455ull, 2486616182048933210ull}},
+{{8081010168887535944ull, 16862624931131094151ull,
+ 8690981495407938511ull, 3108270227561166513ull}},
+{{5489576692682032026ull, 16466595145486479785ull,
+ 15475412887687311043ull, 3885337784451458141ull}},
+{{14960200478994739776ull, 7985778956715355913ull,
+ 11977976064018263354ull, 2428336115282161338ull}},
+{{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull,
+ 3035420144102701673ull}},
+{{6081490679326576260ull, 5560250592226661759ull,
+ 11798058572387454635ull, 3794275180128377091ull}},
+{{10718460702220192019ull, 1169313610927969647ull,
+ 5067943598528465195ull, 2371421987580235682ull}},
+{{8786389859347852119ull, 15296700068942125771ull,
+ 15558301535015357301ull, 2964277484475294602ull}},
+{{6371301305757427245ull, 5285817030895493502ull,
+ 10224504881914420819ull, 3705346855594118253ull}},
+{{17817121371380555740ull, 997792635095989486ull,
+ 8696158560410206964ull, 2315841784746323908ull}},
+{{13048029677370918867ull, 1247240793869986858ull,
+ 10870198200512758705ull, 2894802230932904885ull}},
+{{7086665059858872776ull, 6170737010764871477ull,
+ 18199433769068336285ull, 3618502788666131106ull}},
+{{13470017343250978874ull, 12325107281883477250ull,
+ 13525920174480644548ull, 4523128485832663883ull}},
+{{13030446857959249701ull, 16926564088031949089ull,
+ 6147857099836708890ull, 2826955303645414927ull}},
+{{2453000517166898414ull, 11934833073185160554ull,
+ 3073135356368498209ull, 3533694129556768659ull}},
+{{12289622683313398825ull, 1083483286199286980ull,
+ 17676477250742786474ull, 4417117661945960823ull}},
+{{16904386213925650074ull, 5288863072301942266ull,
+ 17965327309355323402ull, 2760698538716225514ull}},
+{{11907110730552286784ull, 15834450877232203641ull,
+ 13233287099839378444ull, 3450873173395281893ull}},
+{{1048830357908194768ull, 1346319522830702936ull,
+ 2706550819517059344ull, 4313591466744102367ull}},
+{{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull,
+ 2695994666715063979ull}},
+{{14654456772397940874ull, 10275184164066262476ull,
+ 6149718093871667028ull, 3369993333393829974ull}},
+{{18318070965497426093ull, 12843980205082828095ull,
+ 16910519654194359593ull, 4212491666742287467ull}},
+{{18366323381076973164ull, 1109958600535685703ull,
+ 8263231774657780794ull, 2632807291713929667ull}},
+{{18346218207918828551ull, 10610820287524382937ull,
+ 5717353699894838088ull, 3291009114642412084ull}},
+{{9097714704616371977ull, 13263525359405478672ull,
+ 7146692124868547610ull, 4113761393303015105ull}},
+{{5686071690385232486ull, 12901389368055812074ull,
+ 15995897624111312016ull, 2571100870814384440ull}},
+{{16330961649836316415ull, 16126736710069765092ull,
+ 1548127956429588404ull, 3213876088517980551ull}},
+{{1966957988585843903ull, 1711676813877654750ull,
+ 15770218000819149218ull, 4017345110647475688ull}},
+{{15064406798148316151ull, 5681484027100922122ull,
+ 9856386250511968261ull, 2510840694154672305ull}},
+{{9607136460830619381ull, 11713541052303540557ull,
+ 16932168831567348230ull, 3138550867693340381ull}},
+{{16620606594465662130ull, 5418554278524649888ull,
+ 7330152984177021576ull, 3923188584616675477ull}},
+{{10387879121541038832ull, 3386596424077906180ull,
+ 6887188624324332437ull, 2451992865385422173ull}},
+{{12984848901926298539ull, 8844931548524770629ull,
+ 13220671798832803450ull, 3064991081731777716ull}},
+{{2396003072125709462ull, 1832792398801187479ull,
+ 16525839748541004313ull, 3831238852164722145ull}},
+{{8415030947719650270ull, 12674710295319211934ull,
+ 3411120815197045839ull, 2394524282602951341ull}},
+{{1295416647794787029ull, 11231701850721627014ull,
+ 8875587037423695203ull, 2993155353253689176ull}},
+{{10842642846598259595ull, 9427941294974645863ull,
+ 11094483796779619004ull, 3741444191567111470ull}},
+{{13694180806764994103ull, 15115835346213929472ull,
+ 2322366354559873973ull, 2338402619729444669ull}},
+{{17117726008456242628ull, 5059736127485248128ull,
+ 7514643961627230371ull, 2923003274661805836ull}},
+{{2950413436860751669ull, 1712984140929172257ull,
+ 9393304952034037964ull, 3653754093327257295ull}},
+{{8299702814503327491ull, 2141230176161465321ull,
+ 7129945171615159551ull, 4567192616659071619ull}},
+{{16716529305133049442ull, 8255797887741997681ull,
+ 2150372723045780767ull, 2854495385411919762ull}},
+{{7060603576134148090ull, 5708061341250109198ull,
+ 11911337940662001767ull, 3568119231764899702ull}},
+{{18049126507022460921ull, 2523390658135248593ull,
+ 5665800388972726401ull, 4460149039706124628ull}},
+{{4363175039247956220ull, 13106334207403000131ull,
+ 12764497279962729808ull, 2787593149816327892ull}},
+{{842282780632557370ull, 16382917759253750164ull,
+ 15955621599953412260ull, 3484491437270409865ull}},
+{{1052853475790696713ull, 2031903125357636089ull,
+ 6109468944659601614ull, 4355614296588012332ull}},
+{{12187248468437655206ull, 15104997508630686267ull,
+ 13041790127267026816ull, 2722258935367507707ull}},
+{{10622374567119681103ull, 434502812078806218ull,
+ 11690551640656395617ull, 3402823669209384634ull}},
+{{4054596172044825571ull, 5154814533525895677ull,
+ 5389817513965718713ull, 4253529586511730793ull}},
+{{4839965616741709934ull, 14750974129522154558ull,
+ 14897850992297043955ull, 2658455991569831745ull}},
+{{15273329057781913225ull, 13827031643475305293ull,
+ 4787255685089141232ull, 3323069989462289682ull}},
+{{5256603266945227819ull, 17283789554344131617ull,
+ 15207441643216202348ull, 4153837486827862102ull}},
+{{14814592087909237147ull, 1578996434610306452ull,
+ 4892965008582738564ull, 2596148429267413814ull}},
+{{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull,
+ 3245185536584267267ull}},
+{{9312742082076019330ull, 7078867947505991736ull,
+ 14562786853551610862ull, 4056481920730334084ull}},
+{{5820463801297512082ull, 18259350522473408547ull,
+ 18325113820324532596ull, 2535301200456458802ull}},
+{{2663893733194502198ull, 4377444079382209068ull,
+ 13683020238550889938ull, 3169126500570573503ull}},
+{{3329867166493127747ull, 14695177136082537143ull,
+ 12492089279761224518ull, 3961408125713216879ull}},
+{{8998696006699286698ull, 4572799691624197810ull,
+ 14725084827491847180ull, 2475880078570760549ull}},
+{{2024997971519332565ull, 5715999614530247263ull,
+ 4571297979082645263ull, 3094850098213450687ull}},
+{{16366305519681329418ull, 2533313499735421174ull,
+ 1102436455425918675ull, 3868562622766813359ull}},
+{{5617254931373442982ull, 17724222001830495898ull,
+ 7606551812282281027ull, 2417851639229258349ull}},
+{{16244940701071579536ull, 17543591483860731968ull,
+ 14119875783780239188ull, 3022314549036572936ull}},
+{{1859431802629922803ull, 3482745281116363345ull,
+ 17649844729725298986ull, 3777893186295716170ull}},
+{{12691359922712171512ull, 6788401819125114994ull,
+ 15642838974505699770ull, 2361183241434822606ull}},
+{{6640827866535438582ull, 17708874310761169551ull,
+ 10330176681277348904ull, 2951479051793528258ull}},
+{{3689348814741910324ull, 3689348814741910323ull,
+ 3689348814741910323ull, 3689348814741910323ull}},
+{{0ull, 0ull, 0ull, 4611686018427387904ull}},
+{{0ull, 0ull, 0ull, 2882303761517117440ull}},
+{{0ull, 0ull, 0ull, 3602879701896396800ull}},
+{{0ull, 0ull, 0ull, 4503599627370496000ull}},
+{{0ull, 0ull, 0ull, 2814749767106560000ull}},
+{{0ull, 0ull, 0ull, 3518437208883200000ull}},
+{{0ull, 0ull, 0ull, 4398046511104000000ull}},
+{{0ull, 0ull, 0ull, 2748779069440000000ull}},
+{{0ull, 0ull, 0ull, 3435973836800000000ull}},
+{{0ull, 0ull, 0ull, 4294967296000000000ull}},
+{{0ull, 0ull, 0ull, 2684354560000000000ull}},
+{{0ull, 0ull, 0ull, 3355443200000000000ull}},
+{{0ull, 0ull, 0ull, 4194304000000000000ull}},
+{{0ull, 0ull, 0ull, 2621440000000000000ull}},
+{{0ull, 0ull, 0ull, 3276800000000000000ull}},
+{{0ull, 0ull, 0ull, 4096000000000000000ull}},
+{{0ull, 0ull, 0ull, 2560000000000000000ull}},
+{{0ull, 0ull, 0ull, 3200000000000000000ull}},
+{{0ull, 0ull, 0ull, 4000000000000000000ull}},
+{{0ull, 0ull, 0ull, 2500000000000000000ull}},
+{{0ull, 0ull, 0ull, 3125000000000000000ull}},
+{{0ull, 0ull, 0ull, 3906250000000000000ull}},
+{{0ull, 0ull, 0ull, 2441406250000000000ull}},
+{{0ull, 0ull, 0ull, 3051757812500000000ull}},
+{{0ull, 0ull, 0ull, 3814697265625000000ull}},
+{{0ull, 0ull, 0ull, 2384185791015625000ull}},
+{{0ull, 0ull, 0ull, 2980232238769531250ull}},
+{{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}},
+{{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}},
+{{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}},
+{{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}},
+{{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}},
+{{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}},
+{{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}},
+{{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}},
+{{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}},
+{{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}},
+{{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}},
+{{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}},
+{{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}},
+{{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}},
+{{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}},
+{{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}},
+{{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}},
+{{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}},
+{{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}},
+{{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}},
+{{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}},
+{{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}},
+{{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}},
+{{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}},
+{{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}},
+{{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}},
+{{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}},
+{{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}},
+{{0ull, 4611686018427387904ull, 9222577334724359131ull,
+ 3761581922631320025ull}},
+{{0ull, 576460752303423488ull, 17293325880271194217ull,
+ 2350988701644575015ull}},
+{{0ull, 5332261958806667264ull, 17004971331911604867ull,
+ 2938735877055718769ull}},
+{{0ull, 2053641430080946176ull, 7421156109607342372ull,
+ 3673419846319648462ull}},
+{{0ull, 2567051787601182720ull, 53073100154402157ull,
+ 4591774807899560578ull}},
+{{0ull, 3910250376464433152ull, 4644856706023889252ull,
+ 2869859254937225361ull}},
+{{0ull, 4887812970580541440ull, 10417756900957249469ull,
+ 3587324068671531701ull}},
+{{0ull, 10721452231653064704ull, 17633882144623949740ull,
+ 4484155085839414626ull}},
+{{0ull, 15924279681637941248ull, 15632862358817356491ull,
+ 2802596928649634141ull}},
+{{0ull, 15293663583620038656ull, 5706019893239531902ull,
+ 3503246160812042677ull}},
+{{0ull, 9893707442670272512ull, 11744210884976802782ull,
+ 4379057701015053346ull}},
+{{0ull, 1571881133241532416ull, 11951817821537889643ull,
+ 2736911063134408341ull}},
+{{0ull, 15799909471834079232ull, 1104714221640198341ull,
+ 3421138828918010427ull}},
+{{0ull, 5914828784510435328ull, 15215950832332411639ull,
+ 4276423536147513033ull}},
+{{0ull, 10614297017960103936ull, 2592440242566675418ull,
+ 2672764710092195646ull}},
+{{0ull, 4044499235595354112ull, 12463922340063120081ull,
+ 3340955887615244557ull}},
+{{0ull, 9667310062921580544ull, 1744844869796736389ull,
+ 4176194859519055697ull}},
+{{0ull, 8347911798539681792ull, 12619743089691430003ull,
+ 2610121787199409810ull}},
+{{0ull, 5823203729747214336ull, 6551306825259511696ull,
+ 3262652233999262263ull}},
+{{0ull, 7279004662184017920ull, 3577447513147001716ull,
+ 4078315292499077829ull}},
+{{0ull, 13772749950719787008ull, 4541747704930570024ull,
+ 2548947057811923643ull}},
+{{0ull, 17215937438399733760ull, 1065498612735824626ull,
+ 3186183822264904554ull}},
+{{0ull, 12296549761144891392ull, 10555245302774556591ull,
+ 3982729777831130692ull}},
+{{0ull, 14602872628356638976ull, 15820400351088873677ull,
+ 2489206111144456682ull}},
+{{0ull, 4418532730163635008ull, 10552128402006316289ull,
+ 3111507638930570853ull}},
+{{0ull, 10134851931131931664ull, 17801846520935283265ull,
+ 3889384548663213566ull}},
+{{0ull, 17863497503025927050ull, 6514468057157164136ull,
+ 2430865342914508479ull}},
+{{9223372036854775808ull, 3882627805072857196ull,
+ 3531399053019067267ull, 3038581678643135599ull}},
+{{11529215046068469760ull, 241598737913683591ull,
+ 18249306871555997796ull, 3798227098303919498ull}},
+{{14123288431433875456ull, 9374371248050828052ull,
+ 16017502813149886526ull, 2373891936439949686ull}},
+{{17654110539292344320ull, 2494592023208759257ull,
+ 10798506479582582350ull, 2967364920549937108ull}},
+{{8232580118833266688ull, 12341612065865724880ull,
+ 13498133099478227937ull, 3709206150687421385ull}},
+{{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull,
+ 2318253844179638366ull}},
+{{15655075254693265408ull, 5606659160333633146ull,
+ 11121877236270789064ull, 2897817305224547957ull}},
+{{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull,
+ 3622271631530684947ull}},
+{{17543526057817145344ull, 17983776974876077599ull,
+ 13919168667852566984ull, 4527839539413356183ull}},
+{{17882232813776797696ull, 11239860609297548499ull,
+ 15617009445048936221ull, 2829899712133347614ull}},
+{{17741104998793609216ull, 214767706339771912ull,
+ 10297889769456394469ull, 3537374640166684518ull}},
+{{3729637174782459904ull, 4880145651352102795ull,
+ 3648990174965717278ull, 4421718300208355648ull}},
+{{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull,
+ 2763573937630222280ull}},
+{{13866533336563843072ull, 11883064322366759140ull,
+ 2850773574191966623ull, 3454467422037777850ull}},
+{{17333166670704803840ull, 10242144384531061021ull,
+ 12786839004594734087ull, 4318084277547222312ull}},
+{{13139072178404196352ull, 13318869267972994994ull,
+ 7991774377871708804ull, 2698802673467013945ull}},
+{{7200468186150469632ull, 16648586584966243743ull,
+ 14601403990767023909ull, 3373503341833767431ull}},
+{{4388899214260699136ull, 6975675175925640967ull,
+ 13640068970031391983ull, 4216879177292209289ull}},
+{{9660591036554018816ull, 11277326012594607460ull,
+ 1607514078628538133ull, 2635549485807630806ull}},
+{{12075738795692523520ull, 261599460461095613ull,
+ 11232764635140448475ull, 3294436857259538507ull}},
+{{1259615439333490688ull, 14162057380858533229ull,
+ 9429269775498172689ull, 4118046071574423134ull}},
+{{3093102658797125632ull, 1933756835395501412ull,
+ 1281607591258970027ull, 2573778794734014459ull}},
+{{3866378323496407040ull, 16252254099526540477ull,
+ 15437067544355876245ull, 3217223493417518073ull}},
+{{9444658922797896704ull, 6480259569126011884ull,
+ 5461276375162681595ull, 4021529366771897592ull}},
+{{15126283863603461248ull, 1744319221490063475ull,
+ 3413297734476675997ull, 2513455854232435995ull}},
+{{14296168811076938656ull, 6792085045289967248ull,
+ 18101680223378008708ull, 3141819817790544993ull}},
+{{17870211013846173320ull, 8490106306612459060ull,
+ 8792042223940347173ull, 3927274772238181242ull}},
+{{1945509846799082517ull, 7612159450846480865ull,
+ 10106712408390104887ull, 2454546732648863276ull}},
+{{7043573326926241051ull, 4903513295130713177ull,
+ 12633390510487631109ull, 3068183415811079095ull}},
+{{13416152677085189217ull, 10741077637340779375ull,
+ 11180052119682150982ull, 3835229269763848869ull}},
+{{15302624450819325117ull, 2101487504910599205ull,
+ 9293375584015038316ull, 2397018293602405543ull}},
+{{5293222508241992684ull, 2626859381138249007ull,
+ 7005033461591409991ull, 2996272867003006929ull}},
+{{2004842116875102951ull, 17118632281704974971ull,
+ 13367977845416650392ull, 3745341083753758661ull}},
+{{17393927387542797009ull, 10699145176065609356ull,
+ 10660829162599100447ull, 2340838177346099163ull}},
+{{3295665160718944645ull, 8762245451654623792ull,
+ 8714350434821487655ull, 2926047721682623954ull}},
+{{4119581450898680806ull, 6341120796140891836ull,
+ 1669566006672083761ull, 3657559652103279943ull}},
+{{5149476813623351007ull, 12538087013603502699ull,
+ 15922015563622268413ull, 4571949565129099928ull}},
+{{912579999300900428ull, 10142147392715883139ull,
+ 9951259727263917758ull, 2857468478205687455ull}},
+{{14975783054408289246ull, 3454312204040078115ull,
+ 7827388640652509294ull, 3571835597757109319ull}},
+{{14108042799582973654ull, 13541262291904873452ull,
+ 5172549782388248713ull, 4464794497196386649ull}},
+{{18040898786594134342ull, 1545759904799464051ull,
+ 14762058660061125206ull, 2790496560747741655ull}},
+{{17939437464815280023ull, 11155571917854105872ull,
+ 13840887306649018603ull, 3488120700934677069ull}},
+{{3977552757309548413ull, 9332778878890244437ull,
+ 3466051078029109542ull, 4360150876168346337ull}},
+{{4791813482532161710ull, 1221300780879014869ull,
+ 13695496969836663224ull, 2725094297605216460ull}},
+{{10601452871592590042ull, 1526625976098768586ull,
+ 17119371212295829030ull, 3406367872006520575ull}},
+{{4028444052635961744ull, 11131654506978236541ull,
+ 16787527996942398383ull, 4257959840008150719ull}},
+{{4823620542111170042ull, 13874813094502479694ull,
+ 17409734025730080845ull, 2661224900005094199ull}},
+{{15252897714493738360ull, 3508458312845935905ull,
+ 17150481513735213153ull, 3326531125006367749ull}},
+{{5231064087835009238ull, 8997258909484807786ull,
+ 7603043836886852729ull, 4158163906257959687ull}},
+{{7881101073324268678ull, 17152501864496474626ull,
+ 11669431425695364811ull, 2598852441411224804ull}},
+{{628004304800560040ull, 16828941312193205379ull,
+ 14586789282119206014ull, 3248565551764031005ull}},
+{{14620063436282863761ull, 11812804603386730915ull,
+ 4398428547366843806ull, 4060706939705038757ull}},
+{{6831696638463095899ull, 2771316858689318918ull,
+ 5054860851317971331ull, 2537941837315649223ull}},
+{{17762992834933645682ull, 17299204128643812359ull,
+ 1706890045720076259ull, 3172427296644561529ull}},
+{{17592055025239669198ull, 17012319142377377545ull,
+ 6745298575577483228ull, 3965534120805701911ull}},
+{{4077505363133711393ull, 1409327427131085158ull,
+ 11133340637377008874ull, 2478458825503563694ull}},
+{{14320253740771915049ull, 10985031320768632255ull,
+ 4693303759866485284ull, 3098073531879454618ull}},
+{{13288631157537505907ull, 13731289150960790319ull,
+ 15090001736687882413ull, 3872591914849318272ull}},
+{{15222923501102023048ull, 10887898728564187901ull,
+ 9431251085429926508ull, 2420369946780823920ull}},
+{{5193596321095365098ull, 13609873410705234877ull,
+ 11789063856787408135ull, 3025462433476029900ull}},
+{{11103681419796594277ull, 12400655744954155692ull,
+ 14736329820984260169ull, 3781828041845037375ull}},
+{{16163172924227647231ull, 832880812955265451ull,
+ 16127735165756244462ull, 2363642526153148359ull}},
+{{15592280136857171135ull, 10264473053048857622ull,
+ 15547982938767917673ull, 2954553157691435449ull}},
+{{10266978134216688110ull, 17442277334738459932ull,
+ 5599920618177733379ull, 3693191447114294312ull}},
+{{15640233370740205877ull, 8595580324997843505ull,
+ 3499950386361083362ull, 2308244654446433945ull}},
+{{5715233658143093634ull, 1521103369392528574ull,
+ 8986624001378742107ull, 2885305818058042431ull}},
+{{16367414109533642851ull, 15736437267022824429ull,
+ 6621593983296039729ull, 3606632272572553039ull}},
+{{6624209581634889851ull, 5835488528496366825ull,
+ 3665306460692661758ull, 4508290340715691299ull}},
+{{15669346034590275917ull, 17482238385592392977ull,
+ 18431717602428771262ull, 2817681462947307061ull}},
+{{5751624487955681184ull, 12629425945135715414ull,
+ 9204588947753800366ull, 3522101828684133827ull}},
+{{16412902646799377288ull, 6563410394564868459ull,
+ 6894050166264862554ull, 4402627285855167284ull}},
+{{7952221145035916853ull, 8713817515030430691ull,
+ 13532153390770314904ull, 2751642053659479552ull}},
+{{5328590412867508163ull, 10892271893788038364ull,
+ 16915191738462893630ull, 3439552567074349440ull}},
+{{6660738016084385203ull, 4391967830380272147ull,
+ 2697245599369065422ull, 4299440708842936801ull}},
+{{1857118250839046800ull, 16580037949269833804ull,
+ 13214993545674135648ull, 2687150443026835500ull}},
+{{2321397813548808500ull, 2278303362877740639ull,
+ 16518741932092669561ull, 3358938053783544375ull}},
+{{16736805322218174337ull, 7459565222024563702ull,
+ 16036741396688449047ull, 4198672567229430469ull}},
+{{5848817307958971057ull, 11579757291406434170ull,
+ 12328806382143974606ull, 2624170354518394043ull}},
+{{16534393671803489629ull, 5251324577403266904ull,
+ 10799321959252580354ull, 3280212943147992554ull}},
+{{2221248016044810420ull, 15787527758608859439ull,
+ 4275780412210949634ull, 4100266178934990693ull}},
+{{8305809037669088369ull, 14478890867557925053ull,
+ 4978205766845537473ull, 2562666361834369183ull}},
+{{14993947315513748365ull, 4263555529165242604ull,
+ 1611071190129533938ull, 3203332952292961479ull}},
+{{295690070682633840ull, 14552816448311329064ull,
+ 15848897042944081134ull, 4004166190366201848ull}},
+{{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull,
+ 2502603868978876155ull}},
+{{4842693886148195591ull, 10216466345636378855ull,
+ 7770264796372675482ull, 3128254836223595194ull}},
+{{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull,
+ 3910318545279493993ull}},
+{{12430265883104630126ull, 13746221855562655860ull,
+ 11835126895200387600ull, 2443949090799683745ull}},
+{{15537832353880787657ull, 17182777319453319825ull,
+ 958850563718320788ull, 3054936363499604682ull}},
+{{5587232387068820859ull, 3031727575607098166ull,
+ 10421935241502676794ull, 3818670454374505852ull}},
+{{17327078297200176749ull, 6506515753181824257ull,
+ 15737081562793948804ull, 2386669033984066157ull}},
+{{7823789816218057224ull, 8133144691477280322ull,
+ 5836293898210272293ull, 2983336292480082697ull}},
+{{556365233417795722ull, 14778116882773988307ull,
+ 11907053391190228270ull, 3729170365600103371ull}},
+{{16488629335381979991ull, 4624637033306354787ull,
+ 5136065360280198717ull, 2330731478500064607ull}},
+{{15999100650800087084ull, 10392482310060331388ull,
+ 1808395681922860492ull, 2913414348125080759ull}},
+{{1552131739790557239ull, 12990602887575414236ull,
+ 16095552657685739327ull, 3641767935156350948ull}},
+{{1940164674738196549ull, 11626567591041879891ull,
+ 1672696748397622543ull, 4552209918945438686ull}},
+{{17353503986207230507ull, 14184133772042256787ull,
+ 14880493523030677801ull, 2845131199340899178ull}},
+{{17080193964331650230ull, 3895109159770657272ull,
+ 9377244866933571444ull, 3556413999176123973ull}},
+{{2903498381705011171ull, 4868886449713321591ull,
+ 16333242102094352209ull, 4445517498970154966ull}},
+{{8732215516206713838ull, 14572269077139295754ull,
+ 5596590295381582226ull, 2778448436856346854ull}},
+{{1691897358403616490ull, 8991964309569343885ull,
+ 16219109906081753591ull, 3473060546070433567ull}},
+{{6726557716431908516ull, 6628269368534291952ull,
+ 15662201364174804085ull, 4341325682588041959ull}},
+{{4204098572769942823ull, 6448511364547626422ull,
+ 16706404880250334409ull, 2713328551617526224ull}},
+{{14478495252817204336ull, 12672325224111920931ull,
+ 2436262026603366395ull, 3391660689521907781ull}},
+{{13486433047594117516ull, 11228720511712513260ull,
+ 7657013551681595898ull, 4239575861902384726ull}},
+{{17652392691601099256ull, 11629636338247708691ull,
+ 173947451373609532ull, 2649734913688990454ull}},
+{{17453804846073986166ull, 14537045422809635864ull,
+ 9440806351071787723ull, 3312168642111238067ull}},
+{{3370511983882931091ull, 13559620760084656927ull,
+ 7189321920412346750ull, 4140210802639047584ull}},
+{{9024099017567913788ull, 3863076956625522675ull,
+ 4493326200257716719ull, 2587631751649404740ull}},
+{{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull,
+ 3234539689561755925ull}},
+{{8335547191915630413ull, 14106508276975308012ull,
+ 11632508206330070277ull, 4043174611952194906ull}},
+{{14433089031802044817ull, 11122410682323261459ull,
+ 11882003647383681827ull, 2526984132470121816ull}},
+{{13429675271325168117ull, 9291327334476688920ull,
+ 14852504559229602284ull, 3158730165587652270ull}},
+{{16787094089156460146ull, 11614159168095861150ull,
+ 9342258662182227047ull, 3948412706984565338ull}},
+{{5880247787295399687ull, 14176378507700995075ull,
+ 10450597682291279808ull, 2467757941865353336ull}},
+{{2738623715691861705ull, 17720473134626243844ull,
+ 13063247102864099760ull, 3084697427331691670ull}},
+{{3423279644614827131ull, 3703847344573253189ull,
+ 7105686841725348893ull, 3855871784164614588ull}},
+{{4445392787097960909ull, 4620747599571977195ull,
+ 13664426312933118866ull, 2409919865102884117ull}},
+{{945054965445063232ull, 14999306536319747302ull,
+ 3245474835884234870ull, 3012399831378605147ull}},
+{{10404690743661104848ull, 9525761133544908319ull,
+ 17891901600137457300ull, 3765499789223256433ull}},
+{{13420460742429272386ull, 15176972745320343507ull,
+ 4264909472444828956ull, 2353437368264535271ull}},
+{{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull,
+ 2941796710330669089ull}},
+{{15204862387011503223ull, 655589822426097210ull,
+ 5510999546088198269ull, 3677245887913336361ull}},
+{{9782705946909603221ull, 5431173296460009417ull,
+ 11500435451037635740ull, 4596557359891670451ull}},
+{{17643406262886971773ull, 12617855347142281693ull,
+ 4881929147684828385ull, 2872848349932294032ull}},
+{{8219199773326551005ull, 1937261128645688405ull,
+ 6102411434606035482ull, 3591060437415367540ull}},
+{{14885685735085576660ull, 11644948447661886314ull,
+ 7628014293257544352ull, 4488825546769209425ull}},
+{{13915239602855873316ull, 7278092779788678946ull,
+ 16296723979354434980ull, 2805515966730755890ull}},
+{{8170677466715065837ull, 9097615974735848683ull,
+ 11147532937338267917ull, 3506894958413444863ull}},
+{{5601660814966444393ull, 15983705986847198758ull,
+ 9322730153245446992ull, 4383618698016806079ull}},
+{{17336096064636191458ull, 9989816241779499223ull,
+ 12744235373419486226ull, 2739761686260503799ull}},
+{{17058434062367851418ull, 3263898265369598221ull,
+ 11318608198346969879ull, 3424702107825629749ull}},
+{{7487984522677650560ull, 17914930886994161489ull,
+ 313202192651548636ull, 4280877634782037187ull}},
+{{16209205372742001360ull, 1973459767516575122ull,
+ 16336652434903075562ull, 2675548521738773241ull}},
+{{11038134679072725892ull, 11690196746250494711ull,
+ 6585757488346680740ull, 3344435652173466552ull}},
+{{9185982330413519461ull, 14612745932813118389ull,
+ 8232196860433350925ull, 4180544565216833190ull}},
+{{8047081965722143615ull, 11438809217221892945ull,
+ 533437019343456424ull, 2612840353260520744ull}},
+{{14670538475580067423ull, 14298511521527366181ull,
+ 666796274179320530ull, 3266050441575650930ull}},
+{{4503115039192920567ull, 8649767365054431919ull,
+ 10056867379578926471ull, 4082563051969563662ull}},
+{{9731975927136657210ull, 12323633630800101805ull,
+ 1673856093809441140ull, 2551601907480977289ull}},
+{{16776655927348209417ull, 15404542038500127256ull,
+ 6704006135689189329ull, 3189502384351221611ull}},
+{{2524075835475710155ull, 5420619492842995359ull,
+ 3768321651184098758ull, 3986877980439027014ull}},
+{{8495076424813400703ull, 17222945238309035811ull,
+ 16190259087272225435ull, 2491798737774391883ull}},
+{{6007159512589362975ull, 16916995529458906860ull,
+ 15626137840662893890ull, 3114748422217989854ull}},
+{{7508949390736703718ull, 11922872374968857767ull,
+ 10309300263973841555ull, 3893435527772487318ull}},
+{{11610622396851521680ull, 5145952225141842152ull,
+ 1831626646556263068ull, 2433397204857804574ull}},
+{{14513277996064402100ull, 6432440281427302690ull,
+ 11512905345050104643ull, 3041746506072255717ull}},
+{{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull,
+ 3802183132590319647ull}},
+{{3268047902177385309ull, 11366412245202738595ull,
+ 7265075043910123788ull, 2376364457868949779ull}},
+{{17920117933003895348ull, 14208015306503423243ull,
+ 4469657786460266831ull, 2970455572336187224ull}},
+{{17788461397827481281ull, 13148333114701891150ull,
+ 5587072233075333539ull, 3713069465420234030ull}},
+{{6506102355214787897ull, 5911865187474988017ull,
+ 17326978200954247174ull, 2320668415887646268ull}},
+{{12744313962445872775ull, 16613203521198510829ull,
+ 3211978677483257351ull, 2900835519859557836ull}},
+{{2095334397775177256ull, 16154818383070750633ull,
+ 4014973346854071689ull, 3626044399824447295ull}},
+{{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull,
+ 4532555499780559119ull}},
+{{2213440750565280719ull, 13197412614077447420ull,
+ 7171923193353707923ull, 2832847187362849449ull}},
+{{2766800938206600899ull, 11885079749169421371ull,
+ 13576590010119522808ull, 3541058984203561811ull}},
+{{17293559228040414836ull, 14856349686461776713ull,
+ 12359051494222015606ull, 4426323730254452264ull}},
+{{3890945489884177417ull, 4673532535611222542ull,
+ 7724407183888759754ull, 2766452331409032665ull}},
+{{14087053899209997579ull, 15065287706368803985ull,
+ 14267194998288337596ull, 3458065414261290831ull}},
+{{3773759318730333261ull, 384865559251453366ull,
+ 13222307729433034092ull, 4322581767826613539ull}},
+{{16193657629488622000ull, 9463913011386934161ull,
+ 5958099321681952355ull, 2701613604891633462ull}},
+{{6407013981578613788ull, 7218205245806279798ull,
+ 16670996188957216252ull, 3377017006114541827ull}},
+{{17232139513828043043ull, 9022756557257849747ull,
+ 16227059217769132411ull, 4221271257643177284ull}},
+{{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull,
+ 2638294536026985803ull}},
+{{10580305233661041188ull, 8778410817267965579ull,
+ 14983233023095828648ull, 3297868170033732253ull}},
+{{8613695523648913581ull, 10973013521584956974ull,
+ 4893983223587622098ull, 4122335212542165317ull}},
+{{771873683853183084ull, 11469819469417986013ull,
+ 5364582523955957763ull, 2576459507838853323ull}},
+{{5576528123243866759ull, 9725588318345094612ull,
+ 2094042136517559300ull, 3220574384798566654ull}},
+{{6970660154054833449ull, 12156985397931368265ull,
+ 11840924707501724933ull, 4025717980998208317ull}},
+{{15885877642352740666ull, 9903958882920799117ull,
+ 9706420951402272035ull, 2516073738123880198ull}},
+{{6022288997658762120ull, 7768262585223610993ull,
+ 2909654152398064236ull, 3145092172654850248ull}},
+{{12139547265500840554ull, 9710328231529513741ull,
+ 3637067690497580295ull, 3931365215818562810ull}},
+{{9893060050151719298ull, 12986484172347027944ull,
+ 6884853324988375588ull, 2457103259886601756ull}},
+{{12366325062689649123ull, 16233105215433784930ull,
+ 8606066656235469485ull, 3071379074858252195ull}},
+{{6234534291507285595ull, 6456323464010067451ull,
+ 6145897301866948953ull, 3839223843572815244ull}},
+{{1590740922978359545ull, 15564417211074761917ull,
+ 13064557850521618903ull, 2399514902233009527ull}},
+{{6600112172150337335ull, 14843835495416064492ull,
+ 11719011294724635725ull, 2999393627791261909ull}},
+{{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull,
+ 3749242034739077387ull}},
+{{12073866662133532899ull, 14479050242310917824ull,
+ 16649467353948127004ull, 2343276271711923366ull}},
+{{15092333327666916124ull, 18098812802888647280ull,
+ 11588462155580382947ull, 2929095339639904208ull}},
+{{418672585874093539ull, 18011829985183421197ull,
+ 14485577694475478684ull, 3661369174549880260ull}},
+{{5135026750770004827ull, 4068043407769724880ull,
+ 18106972118094348356ull, 4576711468187350325ull}},
+{{3209391719231253017ull, 11765899166710853858ull,
+ 13622700583022661674ull, 2860444667617093953ull}},
+{{13235111685893842080ull, 5484001921533791514ull,
+ 3193317673496163381ull, 3575555834521367442ull}},
+{{7320517570512526791ull, 11466688420344627297ull,
+ 13215019128724980034ull, 4469444793151709302ull}},
+{{16104538527638799005ull, 11778366281142779964ull,
+ 3647700937025724617ull, 2793402995719818314ull}},
+{{1683929085838947140ull, 887899796146311244ull,
+ 13782998208136931580ull, 3491753744649772892ull}},
+{{2104911357298683925ull, 1109874745182889055ull,
+ 17228747760171164475ull, 4364692180812216115ull}},
+{{8233098625952759309ull, 16834572780235163323ull,
+ 8462124340893283844ull, 2727932613007635072ull}},
+{{5679687264013561232ull, 2596471901584402538ull,
+ 10577655426116604806ull, 3409915766259543840ull}},
+{{16322981116871727348ull, 12468961913835278980ull,
+ 13222069282645756007ull, 4262394707824429800ull}},
+{{978491161190053785ull, 14710630223788131219ull,
+ 8263793301653597504ull, 2663996692390268625ull}},
+{{15058172006769730943ull, 18388287779735164023ull,
+ 14941427645494384784ull, 3329995865487835781ull}},
+{{14211028990034775774ull, 4538615650959403413ull,
+ 4841726501585817269ull, 4162494831859794727ull}},
+{{11187736127985428811ull, 5142477791063321085ull,
+ 9943608091132217649ull, 2601559269912371704ull}},
+{{149612104699622302ull, 11039783257256539261ull,
+ 12429510113915272061ull, 3251949087390464630ull}},
+{{4798701149301915781ull, 18411415089998061980ull,
+ 6313515605539314268ull, 4064936359238080788ull}},
+{{12222560255168473171ull, 2283762394394012929ull,
+ 13169319290316847226ull, 2540585224523800492ull}},
+{{1443142263678427752ull, 12078075029847291970ull,
+ 16461649112896059032ull, 3175731530654750615ull}},
+{{11027299866452810498ull, 15097593787309114962ull,
+ 15965375372692685886ull, 3969664413318438269ull}},
+{{11503748434960394466ull, 4824310098640808947ull,
+ 12284202617146622631ull, 2481040258324023918ull}},
+{{9767999525273105178ull, 1418701604873623280ull,
+ 6131881234578502481ull, 3101300322905029898ull}},
+{{12209999406591381472ull, 6385063024519417004ull,
+ 16888223580077903909ull, 3876625403631287372ull}},
+{{16854621665974389228ull, 6296507399538329579ull,
+ 1331767700693914135ull, 2422890877269554608ull}},
+{{16456591064040598631ull, 3258948230995524070ull,
+ 1664709625867392669ull, 3028613596586943260ull}},
+{{11347366793195972481ull, 8685371307171792992ull,
+ 2080887032334240836ull, 3785766995733679075ull}},
+{{7092104245747482801ull, 14651729103837146428ull,
+ 17441455459704758186ull, 2366104372333549421ull}},
+{{8865130307184353501ull, 9091289342941657227ull,
+ 7966761269348784021ull, 2957630465416936777ull}},
+{{6469726865553053972ull, 15975797697104459438ull,
+ 14570137605113367930ull, 3697038081771170971ull}},
+{{17878637346252822445ull, 14596559579117675052ull,
+ 6800492993982161004ull, 2310648801106981857ull}},
+{{3901552609106476440ull, 18245699473897093816ull,
+ 13112302260905089159ull, 2888311001383727321ull}},
+{{4876940761383095549ull, 18195438323943979366ull,
+ 2555319770849197737ull, 3610388751729659152ull}},
+{{15319547988583645245ull, 8909239849647810495ull,
+ 3194149713561497172ull, 4512985939662073940ull}},
+{{16492246520505860134ull, 14791646942884657367ull,
+ 11219715607830711540ull, 2820616212288796212ull}},
+{{16003622132204937264ull, 42814604896270093ull,
+ 14024644509788389426ull, 3525770265360995265ull}},
+{{6169469609974007867ull, 9276890292975113425ull,
+ 3695747581953323070ull, 4407212831701244082ull}},
+{{15385133552302224677ull, 1186370414682057986ull,
+ 6921528257148214823ull, 2754508019813277551ull}},
+{{10008044903523005038ull, 15318021073634736195ull,
+ 4040224303007880624ull, 3443135024766596939ull}},
+{{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull,
+ 4303918780958246174ull}},
+{{14159853356215006054ull, 2743831926922361844ull,
+ 14109179530489953010ull, 2689949238098903858ull}},
+{{17699816695268757568ull, 12653161945507728113ull,
+ 8413102376257665454ull, 3362436547623629823ull}},
+{{8289712813803783248ull, 6593080395029884334ull,
+ 5904691951894693914ull, 4203045684529537279ull}},
+{{569384490199976626ull, 8732361265321065613ull,
+ 10607961497575265552ull, 2626903552830960799ull}},
+{{5323416631177358686ull, 10915451581651332016ull,
+ 8648265853541694036ull, 3283629441038700999ull}},
+{{6654270788971698358ull, 13644314477064165020ull,
+ 6198646298499729641ull, 4104536801298376249ull}},
+{{13382291279962087282ull, 1610167520524021281ull,
+ 15403368982630800786ull, 2565335500811485155ull}},
+{{2892806044670445390ull, 11236081437509802410ull,
+ 14642525209861113078ull, 3206669376014356444ull}}
+};
+
+// **********************************************************************
+
+#if __ENABLE_BINARY80__
+
+static const UINT128 breakpoints_binary80[] =
+ { {{6337302757928054309ull, 494016656451265ull}},
+{{5069842206342443447ull, 395213325161012ull}},
+{{15123920209299685727ull, 316170660128809ull}},
+{{13130225890653766194ull, 505873056206095ull}},
+{{10504180712523012955ull, 404698444964876ull}},
+{{4713995755276500041ull, 323758755971901ull}},
+{{163695578958579419ull, 518014009555042ull}},
+{{11199002907392594505ull, 414411207644033ull}},
+{{16337899955397896250ull, 331528966115226ull}},
+{{315198225443261738ull, 530446345784363ull}},
+{{7630856209838430037ull, 424357076627490ull}},
+{{6104684967870744030ull, 339485661301992ull}},
+{{13456844763335100771ull, 543177058083187ull}},
+{{3386778181184259970ull, 434541646466550ull}},
+{{2709422544947407976ull, 347633317173240ull}},
+{{4335076071915852762ull, 556213307477184ull}},
+{{7157409672274592533ull, 444970645981747ull}},
+{{16793974182045404996ull, 355976516785397ull}},
+{{6056481716152503350ull, 284781213428318ull}},
+{{6001021931102095037ull, 455649941485309ull}},
+{{8490166359623586353ull, 364519953188247ull}},
+{{17860179531924600052ull, 291615962550597ull}},
+{{13818891992111718790ull, 466585540080956ull}},
+{{7365764778947464709ull, 373268432064765ull}},
+{{5892611823157971767ull, 298614745651812ull}},
+{{13117527731794665151ull, 477783593042899ull}},
+{{14183371000177642444ull, 382226874434319ull}},
+{{15036045614884024278ull, 305781499547455ull}},
+{{5610928910104887229ull, 489250399275929ull}},
+{{8178091942825820106ull, 391400319420743ull}},
+{{13921171183744476731ull, 313120255536594ull}},
+{{11205827449765431801ull, 500992408858551ull}},
+{{5275313145070435117ull, 400793927086841ull}},
+{{530901701314437771ull, 320635141669473ull}},
+{{15606837981070741726ull, 513016226671156ull}},
+{{8796121570114683058ull, 410412981336925ull}},
+{{7036897256091746446ull, 328330385069540ull}},
+{{11259035609746794314ull, 525328616111264ull}},
+{{12696577302539345774ull, 420262892889011ull}},
+{{6467913027289566296ull, 336210314311209ull}},
+{{17727358473147126720ull, 537936502897934ull}},
+{{17871235593259611699ull, 430349202318347ull}},
+{{6918290845123868713ull, 344279361854678ull}},
+{{7379916537456279618ull, 550846978967485ull}},
+{{5903933229965023694ull, 440677583173988ull}},
+{{12101844213455839602ull, 352542066539190ull}},
+{{9681475370764671681ull, 282033653231352ull}},
+{{732965334255833398ull, 451253845170164ull}},
+{{4275721082146577041ull, 361003076136131ull}},
+{{18177972124684902926ull, 288802460908904ull}},
+{{18016708955270113712ull, 462083937454247ull}},
+{{7034669534732270323ull, 369667149963398ull}},
+{{13006433257269636905ull, 295733719970718ull}},
+{{17120944396889508724ull, 473173951953149ull}},
+{{17386104332253517303ull, 378539161562519ull}},
+{{17598232280544724165ull, 302831329250015ull}},
+{{9710427575162007049ull, 484530126800025ull}},
+{{7768342060129605639ull, 387624101440020ull}},
+{{6214673648103684511ull, 310099281152016ull}},
+{{2564780207482074571ull, 496158849843226ull}},
+{{16809219424953300950ull, 396927079874580ull}},
+{{13447375539962640760ull, 317541663899664ull}},
+{{10447754419714494246ull, 508066662239463ull}},
+{{15736901165255416043ull, 406453329791570ull}},
+{{12589520932204332835ull, 325162663833256ull}},
+{{12764535862043111889ull, 520260262133210ull}},
+{{10211628689634489511ull, 416208209706568ull}},
+{{15548000581191412255ull, 332966567765254ull}},
+{{13808754485680528639ull, 532746508424407ull}},
+{{3668305959060602265ull, 426197206739526ull}},
+{{17692040026216123105ull, 340957765391620ull}},
+{{9860519968236245352ull, 545532424626593ull}},
+{{15267113604072816928ull, 436425939701274ull}},
+{{15903039698000163865ull, 349140751761019ull}},
+{{14376817072574531215ull, 558625202817631ull}},
+{{7812104843317714649ull, 446900162254105ull}},
+{{6249683874654171719ull, 357520129803284ull}},
+{{8689095914465247698ull, 286016103842627ull}},
+{{17591902277886306641ull, 457625766148203ull}},
+{{3005475378083314343ull, 366100612918563ull}},
+{{9783077931950472121ull, 292880490334850ull}},
+{{15652924691120755393ull, 468608784535760ull}},
+{{12522339752896604314ull, 374887027628608ull}},
+{{17396569431801104098ull, 299909622102886ull}},
+{{2009069387688394294ull, 479855395364619ull}},
+{{5296604324892625759ull, 383884316291695ull}},
+{{4237283459914100607ull, 307107453033356ull}},
+{{17847699980088291941ull, 491371924853369ull}},
+{{17967508798812543876ull, 393097539882695ull}},
+{{14374007039050035101ull, 314478031906156ull}},
+{{15619713632996235515ull, 503164851049850ull}},
+{{12495770906396988412ull, 402531880839880ull}},
+{{9996616725117590729ull, 322025504671904ull}},
+{{4926540315962414197ull, 515240807475047ull}},
+{{15009278696995662327ull, 412192645980037ull}},
+{{4628725328112709215ull, 329754116784030ull}},
+{{7405960524980334745ull, 527606586854448ull}},
+{{13303466049468088442ull, 422085269483558ull}},
+{{18021470469058291400ull, 337668215586846ull}},
+{{3008911047299893978ull, 540269144938955ull}},
+{{2407128837839915182ull, 432215315951164ull}},
+{{5615051885013842469ull, 345772252760931ull}},
+{{1605385386538327304ull, 553235604417490ull}},
+{{1284308309230661843ull, 442588483533992ull}},
+{{12095493091610260444ull, 354070786827193ull}},
+{{17055092102772029002ull, 283256629461754ull}},
+{{16220100920209515433ull, 453210607138807ull}},
+{{5597383106683791700ull, 362568485711046ull}},
+{{788557670605123037ull, 290054788568837ull}},
+{{4951041087710107183ull, 464087661710139ull}},
+{{7650181684909996069ull, 371270129368111ull}},
+{{2430796533186086532ull, 297016103494489ull}},
+{{11267972082581559098ull, 475225765591182ull}},
+{{1635680036581426632ull, 380180612472946ull}},
+{{16065939288232782598ull, 304144489978356ull}},
+{{18326805231688631511ull, 486631183965370ull}},
+{{14661444185350905209ull, 389304947172296ull}},
+{{8039806533538813844ull, 311443957737837ull}},
+{{16553039268404012473ull, 498310332380539ull}},
+{{16931780229465120302ull, 398648265904431ull}},
+{{9856075368830185918ull, 318918612723545ull}},
+{{15769720590128297469ull, 510269780357672ull}},
+{{5237078842618817329ull, 408215824286138ull}},
+{{11568360703578874509ull, 326572659428910ull}},
+{{62633052016647599ull, 522516255086257ull}},
+{{11118152885839049049ull, 418013004069005ull}},
+{{8894522308671239239ull, 334410403255204ull}},
+{{3163189249648251813ull, 535056645208327ull}},
+{{13598597843944332420ull, 428045316166661ull}},
+{{7189529460413555613ull, 342436252933329ull}},
+{{435200692435958011ull, 547898004693327ull}},
+{{11416206998174497378ull, 438318403754661ull}},
+{{5443616783797687579ull, 350654723003729ull}},
+{{16088484483560120774ull, 561047556805966ull}},
+{{9181438772106186296ull, 448838045444773ull}},
+{{14723848647168769683ull, 359070436355818ull}},
+{{711032473509284777ull, 287256349084655ull}},
+{{1137651957614855643ull, 459610158535448ull}},
+{{8288819195575705161ull, 367688126828358ull}},
+{{14009752985944384775ull, 294150501462686ull}},
+{{15036907148027194994ull, 470640802340298ull}},
+{{961479274196025025ull, 376512641872239ull}},
+{{4458532234098730343ull, 301210113497791ull}},
+{{18201698018783699519ull, 481936181596465ull}},
+{{14561358415026959615ull, 385548945277172ull}},
+{{4270389102537747046ull, 308439156221738ull}},
+{{3143273749318484950ull, 493502649954781ull}},
+{{17272014258422429253ull, 394802119963824ull}},
+{{17506960221479853725ull, 315841695971059ull}},
+{{16943089910142034991ull, 505346713553695ull}},
+{{13554471928113627993ull, 404277370842956ull}},
+{{7154228727748992071ull, 323421896674365ull}},
+{{11446765964398387314ull, 517475034678984ull}},
+{{12846761586260620174ull, 413980027743187ull}},
+{{2898711639524675493ull, 331184022194550ull}},
+{{4637938623239480789ull, 529894435511280ull}},
+{{3710350898591584631ull, 423915548409024ull}},
+{{6657629533615178028ull, 339132438727219ull}},
+{{18030904883268105491ull, 542611901963550ull}},
+{{14424723906614484393ull, 434089521570840ull}},
+{{11539779125291587514ull, 347271617256672ull}},
+{{3706251341498898730ull, 555634587610676ull}},
+{{17722396332166760277ull, 444507670088540ull}},
+{{14177917065733408221ull, 355606136070832ull}},
+{{3963636023102905931ull, 284484908856666ull}},
+{{17409864081190380459ull, 455175854170665ull}},
+{{13927891264952304367ull, 364140683336532ull}},
+{{3763615382478022847ull, 291312546669226ull}},
+{{17089831056190567525ull, 466100074670761ull}},
+{{9982516030210543697ull, 372880059736609ull}},
+{{11675361638910345281ull, 298304047789287ull}},
+{{3923183363288911157ull, 477286476462860ull}},
+{{3138546690631128925ull, 381829181170288ull}},
+{{9889534981988723786ull, 305463344936230ull}},
+{{15823255971181958059ull, 488741351897968ull}},
+{{1590558332719835477ull, 390993081518375ull}},
+{{1272446666175868382ull, 312794465214700ull}},
+{{2035914665881389411ull, 500471144343520ull}},
+{{1628731732705111529ull, 400376915474816ull}},
+{{16060380645131730516ull, 320301532379852ull}},
+{{10939213773243127533ull, 512482451807764ull}},
+{{12440719833336412349ull, 409985961446211ull}},
+{{6263227051927219556ull, 327988769156969ull}},
+{{17399860912567371936ull, 524782030651150ull}},
+{{13919888730053897549ull, 419825624520920ull}},
+{{11135910984043118039ull, 335860499616736ull}},
+{{10438759944985168216ull, 537376799386778ull}},
+{{15729705585471955219ull, 429901439509422ull}},
+{{5205066838893743529ull, 343921151607538ull}},
+{{4638758127488079324ull, 550273842572061ull}},
+{{21657687248553136ull, 440219074057649ull}},
+{{3706674964540752832ull, 352175259246119ull}},
+{{6654688786374512588ull, 281740207396895ull}},
+{{10647502058199220142ull, 450784331835032ull}},
+{{1139304017075555467ull, 360627465468026ull}},
+{{15668838472628085666ull, 288501972374420ull}},
+{{6623397482495385450ull, 461603155799073ull}},
+{{12677415615480129006ull, 369282524639258ull}},
+{{17520630121867923851ull, 295426019711406ull}},
+{{2207566491795305900ull, 472681631538251ull}},
+{{16523448452403886013ull, 378145305230600ull}},
+{{13218758761923108810ull, 302516244184480ull}},
+{{2703269945367422481ull, 484025990695169ull}},
+{{5851964771035848308ull, 387220792556135ull}},
+{{4681571816828678646ull, 309776634044908ull}},
+{{3801166092183975511ull, 495642614471853ull}},
+{{10419630503231001055ull, 396514091577482ull}},
+{{957006773100980197ull, 317211273261986ull}},
+{{12599257281187299286ull, 507538037219177ull}},
+{{2700708195466018782ull, 406030429775342ull}},
+{{13228613000598545995ull, 324824343820273ull}},
+{{17476431986215763269ull, 519718950112437ull}},
+{{6602447959488789969ull, 415775160089950ull}},
+{{5281958367591031975ull, 332620128071960ull}},
+{{8451133388145651160ull, 532192204915136ull}},
+{{3071557895774610605ull, 425753763932109ull}},
+{{6146595131361598807ull, 340603011145687ull}},
+{{13523901024920468415ull, 544964817833099ull}},
+{{14508469634678285055ull, 435971854266479ull}},
+{{15296124522484538367ull, 348777483413183ull}},
+{{2337706347523799448ull, 558043973461094ull}},
+{{5559513892760949882ull, 446435178768875ull}},
+{{4447611114208759905ull, 357148143015100ull}},
+{{3558088891367007924ull, 285718514412080ull}},
+{{5692942226187212679ull, 457149623059328ull}},
+{{11933051410433590789ull, 365719698447462ull}},
+{{2167743498863051985ull, 292575758757970ull}},
+{{3468389598180883176ull, 468121214012752ull}},
+{{13842758122770437511ull, 374496971210201ull}},
+{{7384857683474439685ull, 299597576968161ull}},
+{{4437074664075282850ull, 479356123149058ull}},
+{{10928357360744046927ull, 383484898519246ull}},
+{{5053337073853327218ull, 306787918815397ull}},
+{{11774688132907233872ull, 490860670104635ull}},
+{{9419750506325787098ull, 392688536083708ull}},
+{{14914498034544450324ull, 314150828866966ull}},
+{{16484499225787299873ull, 502641326187146ull}},
+{{9498250565887929575ull, 402113060949717ull}},
+{{219902823226523014ull, 321690448759774ull}},
+{{7730542146646257468ull, 514704718015638ull}},
+{{13563131346800826621ull, 411763774412510ull}},
+{{10850505077440661297ull, 329411019530008ull}},
+{{13671459309163147752ull, 527057631248013ull}},
+{{18315865076814338848ull, 421646104998410ull}},
+{{14652692061451471078ull, 337316883998728ull}},
+{{1308214409870891786ull, 539707014397966ull}},
+{{15803966786864354722ull, 431765611518372ull}},
+{{5264475800007663131ull, 345412489214698ull}},
+{{4733812465270350686ull, 552659982743517ull}},
+{{14855096416442011519ull, 442127986194813ull}},
+{{816030688927878245ull, 353702388955851ull}},
+{{15410219810109943889ull, 282961911164680ull}},
+{{6209607622466358606ull, 452739057863489ull}},
+{{8657034912714997208ull, 362191246290791ull}},
+{{3236279115430087443ull, 289752997032633ull}},
+{{1488697769946229586ull, 463604795252213ull}},
+{{8569655845440804315ull, 370883836201770ull}},
+{{6855724676352643452ull, 296707068961416ull}},
+{{3590461852680408877ull, 474731310338266ull}},
+{{17629764741111968395ull, 379785048270612ull}},
+{{6725114163405754069ull, 303828038616490ull}},
+{{10760182661449206511ull, 486124861786384ull}},
+{{12297494943901275532ull, 388899889429107ull}},
+{{2459298325637199779ull, 311119911543286ull}},
+{{15002923765245250616ull, 497791858469257ull}},
+{{4623641382712379847ull, 398233486775406ull}},
+{{9564291427993554ull, 318586789420325ull}},
+{{15302866284789687ull, 509738863072520ull}},
+{{12242293027831749ull, 407791090458016ull}},
+{{14767189093389906692ull, 326232872366412ull}},
+{{8870107290456209415ull, 521972595786260ull}},
+{{7096085832364967532ull, 417578076629008ull}},
+{{13055566295375794672ull, 334062461303206ull}},
+{{13510208443117450829ull, 534499938085130ull}},
+{{10808166754493960663ull, 427599950468104ull}},
+{{12335882218337078853ull, 342079960374483ull}},
+{{16048062734597415842ull, 547327936599173ull}},
+{{1770403743452201704ull, 437862349279339ull}},
+{{5105671809503671686ull, 350289879423471ull}},
+{{790377265722054052ull, 560463807077554ull}},
+{{4321650627319553565ull, 448371045662043ull}},
+{{10836018131339463498ull, 358696836529634ull}},
+{{12358163319813481122ull, 286957469223707ull}},
+{{5015666052733928502ull, 459131950757932ull}},
+{{15080579286412873771ull, 367305560606345ull}},
+{{12064463429130299017ull, 293844448485076ull}},
+{{11924443857124657781ull, 470151117576122ull}},
+{{2160857456215905578ull, 376120894060898ull}},
+{{9107383594456545109ull, 300896715248718ull}},
+{{10882464936388561851ull, 481434744397949ull}},
+{{12395320763852759804ull, 385147795518359ull}},
+{{13605605425824118166ull, 308118236414687ull}},
+{{7011573422350947774ull, 492989178263500ull}},
+{{5609258737880758219ull, 394391342610800ull}},
+{{4487406990304606575ull, 315513074088640ull}},
+{{7179851184487370520ull, 504820918541824ull}},
+{{9433229762331806739ull, 403856734833459ull}},
+{{11235932624607355715ull, 323085387866767ull}},
+{{3220096940404127851ull, 516936620586828ull}},
+{{9954775181807122927ull, 413549296469462ull}},
+{{585122515961877695ull, 330839437175570ull}},
+{{936196025539004313ull, 529343099480912ull}},
+{{11817003264656934420ull, 423474479584729ull}},
+{{13142951426467457859ull, 338779583667783ull}},
+{{17339373467606022251ull, 542047333868453ull}},
+{{2803452329859086831ull, 433637867094763ull}},
+{{9621459493371090111ull, 346910293675810ull}},
+{{15394335189393744178ull, 555056469881296ull}},
+{{8626119336773085019ull, 444045175905037ull}},
+{{17968941913644198985ull, 355236140724029ull}},
+{{18064502345657269511ull, 284188912579223ull}},
+{{6767110864600169279ull, 454702260126758ull}},
+{{12792386321163956069ull, 363761808101406ull}},
+{{6544560242189254532ull, 291009446481125ull}},
+{{10471296387502807252ull, 465615114369800ull}},
+{{8377037110002245801ull, 372492091495840ull}},
+{{6701629688001796641ull, 297993673196672ull}},
+{{14411956315544784949ull, 476789877114675ull}},
+{{11529565052435827959ull, 381431901691740ull}},
+{{9223652041948662367ull, 305145521353392ull}},
+{{448008150218495ull, 488232834165428ull}},
+{{7379056036003995442ull, 390586267332342ull}},
+{{16971291273028927323ull, 312469013865873ull}},
+{{5017973148394821778ull, 499950422185398ull}},
+{{11393076148199678069ull, 399960337748318ull}},
+{{16493158548043563102ull, 319968270198654ull}},
+{{15321007232643969993ull, 511949232317847ull}},
+{{4878108156631355348ull, 409559385854278ull}},
+{{11281184154788904925ull, 327647508683422ull}},
+{{3292499388694606587ull, 524236013893476ull}},
+{{17391394769923326562ull, 419388811114780ull}},
+{{13913115815938661250ull, 335511048891824ull}},
+{{11192938861276127030ull, 536817678226919ull}},
+{{12643699903762811947ull, 429454142581535ull}},
+{{10114959923010249558ull, 343563314065228ull}},
+{{12494587062074488970ull, 549701302504365ull}},
+{{9995669649659591176ull, 439761042003492ull}},
+{{617838090243852294ull, 351808833602794ull}},
+{{8367238573873984317ull, 562894133764470ull}},
+{{6693790859099187453ull, 450315307011576ull}},
+{{1665683872537439639ull, 360252245609261ull}},
+{{16089942356997593004ull, 288201796487408ull}},
+{{3607814882744686868ull, 461122874379854ull}},
+{{6575600720937659817ull, 368898299503883ull}},
+{{12639178206233948500ull, 295118639603106ull}},
+{{12843987500490496954ull, 472189823364970ull}},
+{{10275190000392397563ull, 377751858691976ull}},
+{{4530803185572007727ull, 302201486953581ull}},
+{{18317331541140943334ull, 483522379125729ull}},
+{{18343214047654664990ull, 386817903300583ull}},
+{{3606524793898001022ull, 309454322640467ull}},
+{{9459788484978711959ull, 495126916224747ull}},
+{{189133158499148921ull, 396101532979798ull}},
+{{7530004156283139783ull, 316881226383838ull}},
+{{8358657835311113330ull, 507009962214141ull}},
+{{2997577453506980341ull, 405607969771313ull}},
+{{9776759592289404919ull, 324486375817050ull}},
+{{15642815347663047870ull, 519178201307280ull}},
+{{12514252278130438296ull, 415342561045824ull}},
+{{13700750637246260960ull, 332274048836659ull}},
+{{10853154575368286567ull, 531638478138655ull}},
+{{8682523660294629253ull, 425310782510924ull}},
+{{10635367742977613726ull, 340248626008739ull}},
+{{5948541944538450992ull, 544397801613983ull}},
+{{12137531185114581440ull, 435518241291186ull}},
+{{6020676133349754829ull, 348414593032949ull}},
+{{17011779442843428373ull, 557463348852718ull}},
+{{2541377110049011728ull, 445970679082175ull}},
+{{2033101688039209383ull, 356776543265740ull}},
+{{1626481350431367506ull, 285421234612592ull}},
+{{6291718975432098333ull, 456673975380147ull}},
+{{16101421624571409636ull, 365339180304117ull}},
+{{5502439670173307062ull, 292271344243294ull}},
+{{16182601101761111946ull, 467634150789270ull}},
+{{12946080881408889557ull, 374107320631416ull}},
+{{6667515890385201322ull, 299285856505133ull}},
+{{6978676609874411793ull, 478857370408213ull}},
+{{12961638917383350080ull, 383085896326570ull}},
+{{10369311133906680064ull, 306468717061256ull}},
+{{9212200184766867457ull, 490349947298010ull}},
+{{7369760147813493965ull, 392279957838408ull}},
+{{13274505747734615819ull, 313823966270726ull}},
+{{13860511566891564664ull, 502118346033162ull}},
+{{3709711624029431084ull, 401694676826530ull}},
+{{2967769299223544867ull, 321355741461224ull}},
+{{12127128508241492434ull, 514169186337958ull}},
+{{17080400436077014594ull, 411335349070366ull}},
+{{9974971534119701352ull, 329068279256293ull}},
+{{12270605639849611840ull, 526509246810069ull}},
+{{13505833326621599795ull, 421207397448055ull}},
+{{10804666661297279836ull, 336965917958444ull}},
+{{6219420213849916768ull, 539145468733511ull}},
+{{1286187356338023091ull, 431316374986809ull}},
+{{4718298699812328796ull, 345053099989447ull}},
+{{11238626734441636397ull, 552084959983115ull}},
+{{8990901387553309118ull, 441667967986492ull}},
+{{18260767554268378264ull, 353334374389193ull}},
+{{3540567599188971641ull, 282667499511355ull}},
+{{5664908158702354626ull, 452267999218168ull}},
+{{11910624156445704347ull, 361814399374534ull}},
+{{13217848139898473801ull, 289451519499627ull}},
+{{6391161764869916789ull, 463122431199404ull}},
+{{8802278226637843754ull, 370497944959523ull}},
+{{14420520210794095650ull, 296398355967618ull}},
+{{936739448819091101ull, 474237369548190ull}},
+{{749391559055272880ull, 379389895638552ull}},
+{{11667559691469949274ull, 303511916510841ull}},
+{{11289397876868098192ull, 485619066417346ull}},
+{{5342169486752568230ull, 388495253133877ull}},
+{{15341782033627785554ull, 310796202507101ull}},
+{{17168153624320636240ull, 497273924011362ull}},
+{{6355825269972688346ull, 397819139209090ull}},
+{{5084660215978150676ull, 318255311367272ull}},
+{{11824805160306951406ull, 509208498187635ull}},
+{{9459844128245561124ull, 407366798550108ull}},
+{{14946572932080269546ull, 325893438840086ull}},
+{{16535819061844610627ull, 521429502144138ull}},
+{{2160608805249957532ull, 417143601715311ull}},
+{{16485882303167607318ull, 333714881372248ull}},
+{{4241318796616709770ull, 533943810195598ull}},
+{{10771752666777188463ull, 427155048156478ull}},
+{{15996099762905571416ull, 341724038525182ull}},
+{{10836364361681272974ull, 546758461640292ull}},
+{{1290393859861197733ull, 437406769312234ull}},
+{{4721663902630868509ull, 349925415449787ull}},
+{{11244011058951299938ull, 559880664719659ull}},
+{{12684557661902950274ull, 447904531775727ull}},
+{{2768948500038539572ull, 358323625420582ull}},
+{{13283205244256562627ull, 286658900336465ull}},
+{{2806384317100948588ull, 458654240538345ull}},
+{{2245107453680758870ull, 366923392430676ull}},
+{{16553481221912248389ull, 293538713944540ull}},
+{{8038825881350045807ull, 469661942311265ull}},
+{{6431060705080036645ull, 375729553849012ull}},
+{{16212895008289760286ull, 300583643079209ull}},
+{{14872585569037885488ull, 480933828926735ull}},
+{{11898068455230308390ull, 384747063141388ull}},
+{{16897152393668067358ull, 307797650513110ull}},
+{{8588699756159356158ull, 492476240820977ull}},
+{{17939006249153215896ull, 393980992656781ull}},
+{{10661856184580662393ull, 315184794125425ull}},
+{{17058969895329059830ull, 504295670600680ull}},
+{{13647175916263247864ull, 403436536480544ull}},
+{{14607089547752508614ull, 322749229184435ull}},
+{{4924599202694462167ull, 516398766695097ull}},
+{{15007725806381300703ull, 413119013356077ull}},
+{{4627483015621219916ull, 330495210684862ull}},
+{{11093321639735862189ull, 528792337095779ull}},
+{{12564006126530600074ull, 423033869676623ull}},
+{{17429902530708300706ull, 338427095741298ull}},
+{{5751751160681819190ull, 541483353186078ull}},
+{{11980098558029275998ull, 433186682548862ull}},
+{{2205381216939600152ull, 346549346039090ull}},
+{{3528609947103360244ull, 554478953662544ull}},
+{{6512236772424598518ull, 443583162930035ull}},
+{{5209789417939678814ull, 354866530344028ull}},
+{{11546529163835563698ull, 283893224275222ull}},
+{{3717051403169260624ull, 454229158840356ull}},
+{{17731036381503049792ull, 363383327072284ull}},
+{{17874177919944350157ull, 290706661657827ull}},
+{{13841289412943318958ull, 465130658652524ull}},
+{{14762380345096565490ull, 372104526922019ull}},
+{{15499253090819162715ull, 297683621537615ull}},
+{{6352060871601108728ull, 476293794460185ull}},
+{{5081648697280886982ull, 381035035568148ull}},
+{{11444016587308530232ull, 304828028454518ull}},
+{{14621077724951738048ull, 487724845527229ull}},
+{{15386210994703300762ull, 390179876421783ull}},
+{{1240922351536909640ull, 312143901137427ull}},
+{{5674824577200965747ull, 499430241819883ull}},
+{{11918557291244593244ull, 399544193455906ull}},
+{{5845497018253764272ull, 319635354764725ull}},
+{{9352795229206022835ull, 511416567623560ull}},
+{{7482236183364818268ull, 409133254098848ull}},
+{{13364486576175675261ull, 327306603279078ull}},
+{{17693829707139170094ull, 523690565246525ull}},
+{{14155063765711336075ull, 418952452197220ull}},
+{{11324051012569068860ull, 335161961757776ull}},
+{{10739783990626689530ull, 536259138812442ull}},
+{{1213129563017530978ull, 429007311049954ull}},
+{{4659852465155935105ull, 343205848839963ull}},
+{{3766415129507585846ull, 549129358143941ull}},
+{{17770527362573709969ull, 439303486515152ull}},
+{{6837724260575147329ull, 351442789212122ull}},
+{{14629707631662146050ull, 562308462739395ull}},
+{{11703766105329716840ull, 449846770191516ull}},
+{{5673664069521863148ull, 359877416153213ull}},
+{{11917628885101311165ull, 287901932922570ull}},
+{{621462142452546248ull, 460643092676113ull}},
+{{7875867343445857645ull, 368514474140890ull}},
+{{6300693874756686116ull, 294811579312712ull}},
+{{13770459014352608109ull, 471698526900339ull}},
+{{14705716026223996810ull, 377358821520271ull}},
+{{8075224006237287125ull, 301887057216217ull}},
+{{16609707224721569723ull, 483019291545947ull}},
+{{5909068150293435132ull, 386415433236758ull}},
+{{12105952149718568752ull, 309132346589406ull}},
+{{11990825810065889357ull, 494611754543050ull}},
+{{9592660648052711486ull, 395689403634440ull}},
+{{7674128518442169188ull, 316551522907552ull}},
+{{15967954444249381025ull, 506482436652083ull}},
+{{1706317111173773850ull, 405185949321667ull}},
+{{12433100133164750050ull, 324148759457333ull}},
+{{16203611398321689757ull, 518638015131733ull}},
+{{1894842674431620836ull, 414910412105387ull}},
+{{12583920583771027638ull, 331928329684309ull}},
+{{9066226489807913251ull, 531085327494895ull}},
+{{7252981191846330601ull, 424868261995916ull}},
+{{2113036138735154157ull, 339894609596733ull}},
+{{18138253080943887945ull, 543831375354772ull}},
+{{7131904835271289710ull, 435065100283818ull}},
+{{13084221497700852414ull, 348052080227054ull}},
+{{9866707952095632893ull, 556883328363287ull}},
+{{514668732192685668ull, 445506662690630ull}},
+{{411734985754148534ull, 356405330152504ull}},
+{{4018736803345229150ull, 285124264122003ull}},
+{{2740630070610456318ull, 456198822595205ull}},
+{{2192504056488365054ull, 364959058076164ull}},
+{{5443352059932602366ull, 291967246460931ull}},
+{{1330665666408343140ull, 467147594337490ull}},
+{{1064532533126674512ull, 373718075469992ull}},
+{{11919672470727070579ull, 298974460375993ull}},
+{{15382127138421402604ull, 478359136601589ull}},
+{{15995050525479032406ull, 382687309281271ull}},
+{{9106691605641315602ull, 306149847425017ull}},
+{{18260055383768015286ull, 489839755880027ull}},
+{{7229346677530591582ull, 391871804704022ull}},
+{{16851523786250204235ull, 313497443763217ull}},
+{{12205042799032685484ull, 501595910021148ull}},
+{{17142731868709969034ull, 401276728016918ull}},
+{{2646139050742244257ull, 321021382413535ull}},
+{{4233822481187590812ull, 513634211861656ull}},
+{{18144453243917713942ull, 410907369489324ull}},
+{{18204911409876081477ull, 328725895591459ull}},
+{{18059811811575999394ull, 525961432946335ull}},
+{{14447849449260799515ull, 420769146357068ull}},
+{{490233115182908642ull, 336615317085655ull}},
+{{784372984292653828ull, 538584507337048ull}},
+{{8006196016917943708ull, 430867605869638ull}},
+{{13783654443018175613ull, 344694084695710ull}},
+{{3607103035119529365ull, 551510535513137ull}},
+{{13953728872321354462ull, 441208428410509ull}},
+{{14852331912598993892ull, 352966742728407ull}},
+{{4503167900595374467ull, 282373394182726ull}},
+{{18273115085178330118ull, 451797430692361ull}},
+{{10929143253400753771ull, 361437944553889ull}},
+{{12432663417462513340ull, 289150355643111ull}},
+{{12513563838456200698ull, 462640569028978ull}},
+{{17389548700248781204ull, 370112455223182ull}},
+{{6532941330715204317ull, 296089964178546ull}},
+{{3074008499660506261ull, 473743942685674ull}},
+{{6148555614470315332ull, 378995154148539ull}},
+{{8608193306318162589ull, 303196123318831ull}},
+{{6394411660625239496ull, 485113797310130ull}},
+{{5115529328500191597ull, 388091037848104ull}},
+{{7781772277542063600ull, 310472830278483ull}},
+{{8761486829325391438ull, 496756528445573ull}},
+{{14387887092944133796ull, 397405222756458ull}},
+{{442263230129576067ull, 317924178205167ull}},
+{{4396969982949232031ull, 508678685128267ull}},
+{{14585622430585116595ull, 406942948102613ull}},
+{{600451500242362306ull, 325554358482091ull}},
+{{12028768844613510660ull, 520886973571345ull}},
+{{9623015075690808528ull, 416709578857076ull}},
+{{4009063245810736499ull, 333367663085661ull}},
+{{17482547637522909368ull, 533388260937057ull}},
+{{6607340480534506848ull, 426710608749646ull}},
+{{1596523569685695155ull, 341368486999717ull}},
+{{6243786526239022571ull, 546189579199547ull}},
+{{16063075665216949027ull, 436951663359637ull}},
+{{5471762902689738575ull, 349561330687710ull}},
+{{8754820644303581720ull, 559298129100336ull}},
+{{3314507700700955053ull, 447438503280269ull}},
+{{6340954975302674365ull, 357950802624215ull}},
+{{5072763980242139492ull, 286360642099372ull}},
+{{11805771183129333511ull, 458177027358995ull}},
+{{9444616946503466809ull, 366541621887196ull}},
+{{3866344742460863124ull, 293233297509757ull}},
+{{9875500402679291321ull, 469173276015611ull}},
+{{4211051507401522734ull, 375338620812489ull}},
+{{7058190020663128510ull, 300270896649991ull}},
+{{3914406403577184970ull, 480433434639986ull}},
+{{17888920381829389269ull, 384346747711988ull}},
+{{3243089861237780445ull, 307477398169591ull}},
+{{16256990222206179682ull, 491963837071345ull}},
+{{13005592177764943746ull, 393571069657076ull}},
+{{6715124927470044673ull, 314856855725661ull}},
+{{3365502254468250831ull, 503770969161058ull}},
+{{10071099433058421311ull, 403016775328846ull}},
+{{4367530731704826726ull, 322413420263077ull}},
+{{10677397985469633085ull, 515861472420923ull}},
+{{15920616017859527114ull, 412689177936738ull}},
+{{1668446370061890721ull, 330151342349391ull}},
+{{13737560636324756124ull, 528242147759025ull}},
+{{10990048509059804899ull, 422593718207220ull}},
+{{8792038807247843919ull, 338074974565776ull}},
+{{6688564462112729625ull, 540919959305242ull}},
+{{16418898013915914669ull, 432735967444193ull}},
+{{2067071966907000766ull, 346188773955355ull}},
+{{3307315147051201226ull, 553902038328568ull}},
+{{10024549747124781627ull, 443121630662854ull}},
+{{11708988612441735624ull, 354497304530283ull}},
+{{16745888519437209146ull, 283597843624226ull}},
+{{967979927906162371ull, 453756549798763ull}},
+{{8153081571808750543ull, 363005239839010ull}},
+{{6522465257447000435ull, 290404191871208ull}},
+{{6746595597173290372ull, 464646706993933ull}},
+{{12775974107222452944ull, 371717365595146ull}},
+{{6531430471036052032ull, 297373892476117ull}},
+{{14139637568399593575ull, 475798227961787ull}},
+{{3933012425235854213ull, 380638582369430ull}},
+{{3146409940188683371ull, 304510865895544ull}},
+{{12412953533785714040ull, 487217385432870ull}},
+{{9930362827028571232ull, 389773908346296ull}},
+{{4254941446880946662ull, 311819126677037ull}},
+{{10497255129751424983ull, 498910602683259ull}},
+{{12087152918543050309ull, 399128482146607ull}},
+{{2291024705350619601ull, 319302785717286ull}},
+{{14733685972786722331ull, 510884457147657ull}},
+{{4408251148745557219ull, 408707565718126ull}},
+{{18283996177964087068ull, 326966052574500ull}},
+{{10807649811032987692ull, 523145684119201ull}},
+{{4956771034084479831ull, 418516547295361ull}},
+{{276068012525673541ull, 334813237836289ull}},
+{{7820406449524898313ull, 535701180538062ull}},
+{{17324371603845649620ull, 428560944430449ull}},
+{{17548846097818430019ull, 342848755544359ull}},
+{{17010107312283757061ull, 548558008870975ull}},
+{{13608085849827005649ull, 438846407096780ull}},
+{{10886468679861604519ull, 351077125677424ull}},
+{{6350303443552836261ull, 561723401083879ull}},
+{{8769591569584179332ull, 449378720867103ull}},
+{{14394370885151164112ull, 359502976693682ull}},
+{{4136799078637110643ull, 287602381354946ull}},
+{{17686924970045107998ull, 460163810167913ull}},
+{{3081493531810355429ull, 368131048134331ull}},
+{{17222590084415925636ull, 294504838507464ull}},
+{{16488097690839750048ull, 471207741611943ull}},
+{{2122431708446069069ull, 376966193289555ull}},
+{{1697945366756855255ull, 301572954631644ull}},
+{{10095410216294789055ull, 482516727410630ull}},
+{{8076328173035831244ull, 386013381928504ull}},
+{{10150411353170575318ull, 308810705542803ull}},
+{{12551309350331010186ull, 494097128868485ull}},
+{{10041047480264808149ull, 395277703094788ull}},
+{{15411535613695667165ull, 316222162475830ull}},
+{{6211712908203515849ull, 505955459961329ull}},
+{{8658719141304723002ull, 404764367969063ull}},
+{{14305672942527599048ull, 323811494375250ull}},
+{{4442332634334606861ull, 518098391000401ull}},
+{{18311261366435326781ull, 414478712800320ull}},
+{{14649009093148261425ull, 331582970240256ull}},
+{{16059716919553397634ull, 530532752384410ull}},
+{{12847773535642718107ull, 424426201907528ull}},
+{{17656916457997995132ull, 339540961526022ull}},
+{{13493671073829150919ull, 543265538441636ull}},
+{{7105588044321410412ull, 434612430753309ull}},
+{{9373819250199038652ull, 347689944602647ull}},
+{{240715541350820551ull, 556303911364236ull}},
+{{14949967692048297734ull, 445043129091388ull}},
+{{891927709412907217ull, 356034503273111ull}},
+{{15470937426497967066ull, 284827602618488ull}},
+{{2617406993945285367ull, 455724164189582ull}},
+{{13161972039381959263ull, 364579331351665ull}},
+{{10529577631505567411ull, 291663465081332ull}},
+{{2089928951441266565ull, 466661544130132ull}},
+{{12739989605378744221ull, 373329235304105ull}},
+{{10191991684302995377ull, 298663388243284ull}},
+{{5239140250659061634ull, 477861421189255ull}},
+{{4191312200527249307ull, 382289136951404ull}},
+{{7042398575163709769ull, 305831309561123ull}},
+{{7578488905520025307ull, 489330095297797ull}},
+{{17130837568641751215ull, 391464076238237ull}},
+{{6325972425429580325ull, 313171260990590ull}},
+{{10121555880687328521ull, 501074017584944ull}},
+{{11786593519291773140ull, 400859214067955ull}},
+{{9429274815433418512ull, 320687371254364ull}},
+{{4018793260467738650ull, 513099794006983ull}},
+{{10593732237858011566ull, 410479835205586ull}},
+{{4785636975544498930ull, 328383868164469ull}},
+{{15035716790355018934ull, 525414189063150ull}},
+{{12028573432284015147ull, 420331351250520ull}},
+{{9622858745827212118ull, 336265081000416ull}},
+{{8017876363839718742ull, 538024129600666ull}},
+{{2724952276329864670ull, 430419303680533ull}},
+{{9558659450547712383ull, 344335442944426ull}},
+{{7915157491392519166ull, 550936708711082ull}},
+{{17400172437339746302ull, 440749366968865ull}},
+{{13920137949871797042ull, 352599493575092ull}},
+{{3757412730413616987ull, 282079594860074ull}},
+{{13390557998145607826ull, 451327351776118ull}},
+{{18091144028000306907ull, 361061881420894ull}},
+{{18162264037142155849ull, 288849505136715ull}},
+{{10612878385717897742ull, 462159208218745ull}},
+{{8490302708574318193ull, 369727366574996ull}},
+{{3102893352117544231ull, 295781893259997ull}},
+{{8653978178129981094ull, 473251029215995ull}},
+{{6923182542503984875ull, 378600823372796ull}},
+{{1849197219261277577ull, 302880658698237ull}},
+{{6648064365559954446ull, 484609053917179ull}},
+{{9007800307189873880ull, 387687243133743ull}},
+{{14584937875235719750ull, 310149794506994ull}},
+{{12267854156151420631ull, 496239671211191ull}},
+{{6124934510179226182ull, 396991736968953ull}},
+{{12278645237627201592ull, 317593389575162ull}},
+{{4888437121235881254ull, 508149423320260ull}},
+{{3910749696988705003ull, 406519538656208ull}},
+{{10507297387074784649ull, 325215630924966ull}},
+{{9432978189835834792ull, 520345009479946ull}},
+{{3857033737126757510ull, 416276007583957ull}},
+{{14153673433927136978ull, 333020806067165ull}},
+{{4199133420573867549ull, 532833289707465ull}},
+{{3359306736459094039ull, 426266631765972ull}},
+{{13755491833393006201ull, 341013305412777ull}},
+{{7251391674461168629ull, 545621288660444ull}},
+{{9490462154310845226ull, 436497030928355ull}},
+{{7592369723448676181ull, 349197624742684ull}},
+{{1079745113292150920ull, 558716199588295ull}},
+{{863796090633720736ull, 446972959670636ull}},
+{{15448432131474617881ull, 357578367736508ull}},
+{{1290699260953963335ull, 286062694189207ull}},
+{{5754467632268251660ull, 457700310702731ull}},
+{{914225291072691005ull, 366160248562185ull}},
+{{731380232858152804ull, 292928198849748ull}},
+{{15927603631540685779ull, 468685118159596ull}},
+{{9052734090490638300ull, 374948094527677ull}},
+{{18310233716618241609ull, 299958475622141ull}},
+{{3470932243395814313ull, 479933560995427ull}},
+{{13844792238942382420ull, 383946848796341ull}},
+{{7386484976411995613ull, 307157479037073ull}},
+{{8129027147517282657ull, 491451966459317ull}},
+{{17571268162239557095ull, 393161573167453ull}},
+{{2988968085565914707ull, 314529258533963ull}},
+{{1093000122163553208ull, 503246813654341ull}},
+{{15631795356698483859ull, 402597450923472ull}},
+{{5126738655874966440ull, 322077960738778ull}},
+{{4513433034658035982ull, 515324737182045ull}},
+{{3610746427726428785ull, 412259789745636ull}},
+{{17645992401148784321ull, 329807831796508ull}},
+{{6097494953386592975ull, 527692530874414ull}},
+{{8567344777451184703ull, 422154024699531ull}},
+{{3164527007219037439ull, 337723219759625ull}},
+{{5063243211550459903ull, 540357151615400ull}},
+{{4050594569240367922ull, 432285721292320ull}},
+{{3240475655392294338ull, 345828577033856ull}},
+{{16252807492853401910ull, 553325723254169ull}},
+{{16691594809024631851ull, 442660578603335ull}},
+{{13353275847219705481ull, 354128462882668ull}},
+{{18061318307259585031ull, 283302770306134ull}},
+{{17830062847389605080ull, 453284432489815ull}},
+{{14264050277911684064ull, 362627545991852ull}},
+{{4032542592845526605ull, 290102036793482ull}},
+{{10141416963294752891ull, 464163258869571ull}},
+{{4423784755893891990ull, 371330607095657ull}},
+{{14607074248940844561ull, 297064485676525ull}},
+{{4924574724595799682ull, 475303177082441ull}},
+{{250310964934729422ull, 380242541665953ull}},
+{{7578946401431604184ull, 304194033332762ull}},
+{{15815663057032477018ull, 486710453332419ull}},
+{{16341879260367891938ull, 389368362665935ull}},
+{{13073503408294313550ull, 311494690132748ull}},
+{{17228256638528991357ull, 498391504212397ull}},
+{{6403907681339372439ull, 398713203369918ull}},
+{{12501823774555318598ull, 318970562695934ull}},
+{{8934871595062778787ull, 510352900313495ull}},
+{{7147897276050223030ull, 408282320250796ull}},
+{{2028969006098268100ull, 326625856200637ull}},
+{{6935699224499139284ull, 522601369921019ull}},
+{{9237908194341221750ull, 418081095936815ull}},
+{{7390326555472977400ull, 334464876749452ull}},
+{{15513871303498674164ull, 535143802799123ull}},
+{{1343050598573208361ull, 428115042239299ull}},
+{{4763789293600477012ull, 342492033791439ull}},
+{{15000760499244583866ull, 547987254066302ull}},
+{{4621910769911846446ull, 438389803253042ull}},
+{{14765575060155208127ull, 350711842602433ull}},
+{{1488827207796871064ull, 561138948163894ull}},
+{{4880410580979407174ull, 448911158531115ull}},
+{{3904328464783525739ull, 359128926824892ull}},
+{{14191509216052551561ull, 287303141459913ull}},
+{{570321857232620558ull, 459685026335862ull}},
+{{11524303930011827416ull, 367748021068689ull}},
+{{12908791958751372256ull, 294198416854951ull}},
+{{13275369504518374964ull, 470717466967922ull}},
+{{3241597974130879324ull, 376573973574338ull}},
+{{9971976008788524106ull, 301259178859470ull}},
+{{15955161614061638570ull, 482014686175152ull}},
+{{5385431661765490209ull, 385611748940122ull}},
+{{15376391773638123137ull, 308489399152097ull}},
+{{9844831578853355726ull, 493583038643356ull}},
+{{4186516448340774258ull, 394866430914685ull}},
+{{3349213158672619406ull, 315893144731748ull}},
+{{1669392239134280727ull, 505429031570797ull}},
+{{12403560235533155551ull, 404343225256637ull}},
+{{2544150558942703794ull, 323474580205310ull}},
+{{4070640894308326071ull, 517559328328496ull}},
+{{18013907974414302150ull, 414047462662796ull}},
+{{10721777564789531397ull, 331237970130237ull}},
+{{2397448844695608942ull, 529980752208380ull}},
+{{1917959075756487153ull, 423984601766704ull}},
+{{5223716075347100046ull, 339187681413363ull}},
+{{4668596905813449750ull, 542700290261381ull}},
+{{45528709908849477ull, 434160232209105ull}},
+{{36422967927079582ull, 347328185767284ull}},
+{{7436974378167147977ull, 555725097227654ull}},
+{{9638928317275628705ull, 444580077782123ull}},
+{{15089840283304323610ull, 355664062225698ull}},
+{{1003825782417727918ull, 284531249780559ull}},
+{{8984818881352185316ull, 455249999648894ull}},
+{{10877203919823658576ull, 364199999719115ull}},
+{{8701763135858926861ull, 291359999775292ull}},
+{{17612169832116193301ull, 466175999640467ull}},
+{{6711038236209133994ull, 372940799712374ull}},
+{{9058179403709217518ull, 298352639769899ull}},
+{{3425040601709017060ull, 477364223631839ull}},
+{{6429381296109123971ull, 381891378905471ull}},
+{{1454156222145388854ull, 305513103124377ull}},
+{{6015998770174532489ull, 488820964999003ull}},
+{{12191496645623446638ull, 391056771999202ull}},
+{{2374499687014936664ull, 312845417599362ull}},
+{{7488548313965808985ull, 500552668158979ull}},
+{{9680187465914557511ull, 400442134527183ull}},
+{{15122847602215466655ull, 320353707621746ull}},
+{{16817858534060926003ull, 512565932194794ull}},
+{{17143635641990651125ull, 410052745755835ull}},
+{{13714908513592520900ull, 328042196604668ull}},
+{{18254504807006123117ull, 524867514567469ull}},
+{{18292952660346808817ull, 419894011653975ull}},
+{{14634362128277447053ull, 335915209323180ull}},
+{{4968235331534363670ull, 537464334917089ull}},
+{{7663937079969401259ull, 429971467933671ull}},
+{{2441800849233610684ull, 343977174346937ull}},
+{{7596230173515687418ull, 550363478955099ull}},
+{{9766332953554460257ull, 440290783164079ull}},
+{{11502415177585478529ull, 352232626531263ull}},
+{{16580629771552203469ull, 281786101225010ull}},
+{{8082263560773973935ull, 450857761960017ull}},
+{{17533857292844910118ull, 360686209568013ull}},
+{{2959039390050197124ull, 288548967654411ull}},
+{{15802509468306046369ull, 461678348247057ull}},
+{{5263309945161016449ull, 369342678597646ull}},
+{{521299141386902836ull, 295474142878117ull}},
+{{4523427440960954861ull, 472758628604987ull}},
+{{14686788396994494858ull, 378206902883989ull}},
+{{15438779532337506209ull, 302565522307191ull}},
+{{17323349622256189289ull, 484104835691506ull}},
+{{10169330883063041108ull, 387283868553205ull}},
+{{8135464706450432886ull, 309827094842564ull}},
+{{1948697086094961649ull, 495723351748103ull}},
+{{8937655298359789965ull, 396578681398482ull}},
+{{18218170682913562942ull, 317262945118785ull}},
+{{10702329018952149091ull, 507620712190057ull}},
+{{1183165585677898626ull, 406096569752046ull}},
+{{15703927727509960194ull, 324877255801636ull}},
+{{17747586734532115664ull, 519803609282618ull}},
+{{3130022943399961561ull, 415842887426095ull}},
+{{2504018354719969249ull, 332674309940876ull}},
+{{15074475811777681768ull, 532278895905401ull}},
+{{8370231834680235091ull, 425823116724321ull}},
+{{3006836653002277750ull, 340658493379457ull}},
+{{8500287459545554723ull, 545053589407131ull}},
+{{3110881152894533455ull, 436042871525705ull}},
+{{2488704922315626764ull, 348834297220564ull}},
+{{11360625505188823469ull, 558134875552902ull}},
+{{1709802774667238129ull, 446507900442322ull}},
+{{12435888663959521473ull, 357206320353857ull}},
+{{2570013301683796532ull, 285765056283086ull}},
+{{15180067726919805421ull, 457224090052937ull}},
+{{4765356552052023690ull, 365779272042350ull}},
+{{3812285241641618952ull, 292623417633880ull}},
+{{6099656386626590323ull, 468197468214208ull}},
+{{12258422738785092905ull, 374557974571366ull}},
+{{6117389376286164001ull, 299646379657093ull}},
+{{6098474187315952078ull, 479434207451349ull}},
+{{8568128164594671986ull, 383547365961079ull}},
+{{10543851346417647912ull, 306837892768863ull}},
+{{13180813339526326336ull, 490940628430181ull}},
+{{6855301856879150745ull, 392752502744145ull}},
+{{5484241485503320596ull, 314202002195316ull}},
+{{1396088747321492308ull, 502723203512506ull}},
+{{15874266256824835139ull, 402178562810004ull}},
+{{16388761820201778434ull, 321742850248003ull}},
+{{4085926023871383556ull, 514788560396806ull}},
+{{18026136078064748137ull, 411830848317444ull}},
+{{18110257677193708833ull, 329464678653955ull}},
+{{10529668209800382517ull, 527143485846329ull}},
+{{12113083382582216337ull, 421714788677063ull}},
+{{17069164335549593716ull, 337371830941650ull}},
+{{8863918863169798329ull, 539794929506641ull}},
+{{3401786275793928340ull, 431835943605313ull}},
+{{10100126650118963318ull, 345468754884250ull}},
+{{16160202640190341310ull, 552750007814800ull}},
+{{12928162112152273048ull, 442200006251840ull}},
+{{10342529689721818438ull, 353760005001472ull}},
+{{895326122293634104ull, 283008004001178ull}},
+{{16189917054637455859ull, 452812806401884ull}},
+{{16641282458451875011ull, 362250245121507ull}},
+{{5934328337277679362ull, 289800196097206ull}},
+{{2116227710160466333ull, 463680313755530ull}},
+{{1692982168128373066ull, 370944251004424ull}},
+{{5043734549244608776ull, 296755400803539ull}},
+{{15448672908275194689ull, 474808641285662ull}},
+{{4980240697136335104ull, 379846913028530ull}},
+{{3984192557709068083ull, 303877530422824ull}},
+{{13753405721818329580ull, 486204048676518ull}},
+{{18381422206938484310ull, 388963238941214ull}},
+{{18394486580292697771ull, 311170591152971ull}},
+{{3605736825274944172ull, 497872945844755ull}},
+{{2884589460219955338ull, 398298356675804ull}},
+{{5997020382917874593ull, 318638685340643ull}},
+{{5905883797926689026ull, 509821896545029ull}},
+{{8414055853083261544ull, 407857517236023ull}},
+{{14109942311950429882ull, 326286013788818ull}},
+{{439814810669225872ull, 522057622062110ull}},
+{{351851848535380697ull, 417646097649688ull}},
+{{7660179108312125204ull, 334116878119750ull}},
+{{12256286573299400327ull, 534587004991600ull}},
+{{9805029258639520261ull, 427669603993280ull}},
+{{7844023406911616209ull, 342135683194624ull}},
+{{1482391006832854965ull, 547417093111399ull}},
+{{4875261620208194295ull, 437933674489119ull}},
+{{7589558110908465759ull, 350346939591295ull}},
+{{12143292977453545215ull, 560555103346072ull}},
+{{2335936752479015526ull, 448444082676858ull}},
+{{9247447031467033067ull, 358755266141486ull}},
+{{3708608810431716130ull, 287004212913189ull}},
+{{13312471726174566455ull, 459206740661102ull}},
+{{3271279751455832517ull, 367365392528882ull}},
+{{13685070245390396983ull, 293892314023105ull}},
+{{3449368318915083558ull, 470227702436969ull}},
+{{6448843469873977169ull, 376182161949575ull}},
+{{5159074775899181735ull, 300945729559660ull}},
+{{8254519641438690777ull, 481513167295456ull}},
+{{2914266898409042298ull, 385210533836365ull}},
+{{2331413518727233838ull, 308168427069092ull}},
+{{7419610444705484465ull, 493069483310547ull}},
+{{17003734799990118541ull, 394455586648437ull}},
+{{6224290210508274187ull, 315564469318750ull}},
+{{9958864336813238699ull, 504903150910000ull}},
+{{7967091469450590959ull, 403922520728000ull}},
+{{6373673175560472767ull, 323138016582400ull}},
+{{10197877080896756428ull, 517020826531840ull}},
+{{8158301664717405142ull, 413616661225472ull}},
+{{17594687775999655083ull, 330893328980377ull}},
+{{13394105182631806841ull, 529429326368604ull}},
+{{14404632960847355796ull, 423543461094883ull}},
+{{455659924452153667ull, 338834768875907ull}},
+{{4418404693865356190ull, 542135630201451ull}},
+{{18292119014059926245ull, 433708504161160ull}},
+{{14633695211247940996ull, 346966803328928ull}},
+{{1277819449545243655ull, 555146885326286ull}},
+{{15779650818603836216ull, 444117508261028ull}},
+{{1555674210657338003ull, 355294006608823ull}},
+{{8623236998009691049ull, 284235205287058ull}},
+{{10107830382073595355ull, 454776328459293ull}},
+{{15464961935142696931ull, 363821062767434ull}},
+{{16061318362856067868ull, 291056850213947ull}},
+{{10940714121602067296ull, 465690960342316ull}},
+{{5063222482539743513ull, 372552768273853ull}},
+{{11429275615515615457ull, 298042214619082ull}},
+{{3529445725857343439ull, 476867543390532ull}},
+{{13891603024911605720ull, 381494034712425ull}},
+{{11113282419929284576ull, 305195227769940ull}},
+{{17781251871886855322ull, 488312364431904ull}},
+{{17914350312251394581ull, 390649891545523ull}},
+{{3263433805575384695ull, 312519913236419ull}},
+{{12600191718404436159ull, 500031861178270ull}},
+{{10080153374723548927ull, 400025488942616ull}},
+{{4374773885036928818ull, 320020391154093ull}},
+{{3310289401317175786ull, 512032625846549ull}},
+{{6337580335795650952ull, 409626100677239ull}},
+{{8759413083378431085ull, 327700880541791ull}},
+{{6636363303921669089ull, 524321408866866ull}},
+{{1619741828395424948ull, 419457127093493ull}},
+{{8674491092200160605ull, 335565701674794ull}},
+{{2811139303294525999ull, 536905122679671ull}},
+{{17006306701603262092ull, 429524098143736ull}},
+{{9915696546540699350ull, 343619278514989ull}},
+{{4797068030239387991ull, 549790845623983ull}},
+{{11216352053675331039ull, 439832676499186ull}},
+{{5283732828198354508ull, 351866141199349ull}},
+{{7916335077300593929ull, 281492912959479ull}},
+{{1598089679455219318ull, 450388660735167ull}},
+{{12346518187789906424ull, 360310928588133ull}},
+{{17255912179715745785ull, 288248742870506ull}},
+{{1784017784351820994ull, 461197988592811ull}},
+{{16184609486449098088ull, 368958390874248ull}},
+{{1879641144933547501ull, 295166712699399ull}},
+{{10386123461377496648ull, 472266740319038ull}},
+{{15687596398585817965ull, 377813392255230ull}},
+{{12550077118868654372ull, 302250713804184ull}},
+{{9012076945964116025ull, 483601142086695ull}},
+{{7209661556771292820ull, 386880913669356ull}},
+{{2078380430675123933ull, 309504730935485ull}},
+{{3325408689080198293ull, 495207569496776ull}},
+{{17417722210231799927ull, 396166055597420ull}},
+{{13934177768185439941ull, 316932844477936ull}},
+{{14915986799612883260ull, 507092551164698ull}},
+{{864742995464575638ull, 405674040931759ull}},
+{{4381143211113570834ull, 324539232745407ull}},
+{{10699177952523623658ull, 519262772392651ull}},
+{{4869993547276988603ull, 415410217914121ull}},
+{{206646023079680559ull, 332328174331297ull}},
+{{4019982451669399218ull, 531725078930075ull}},
+{{3215985961335519374ull, 425380063144060ull}},
+{{2572788769068415499ull, 340304050515248ull}},
+{{427113215767554476ull, 544486480824397ull}},
+{{11409737016839774550ull, 435589184659517ull}},
+{{1749091983987998994ull, 348471347727614ull}},
+{{10177244803864619036ull, 557554156364182ull}},
+{{763098213607874583ull, 446043325091346ull}},
+{{15367873829853940959ull, 356834660073076ull}},
+{{8604950249141242444ull, 285467728058461ull}},
+{{6389222769142167264ull, 456748364893538ull}},
+{{12490075844797554457ull, 365398691914830ull}},
+{{9992060675838043566ull, 292318953531864ull}},
+{{4919250637115138736ull, 467710325650983ull}},
+{{11314098139175931635ull, 374168260520786ull}},
+{{5361929696598834985ull, 299334608416629ull}},
+{{15957785144041956622ull, 478935373466606ull}},
+{{9076879300491654975ull, 383148298773285ull}},
+{{7261503440393323980ull, 306518639018628ull}},
+{{7929056689887408044ull, 490429822429805ull}},
+{{6343245351909926435ull, 392343857943844ull}},
+{{8763945096269851471ull, 313875086355075ull}},
+{{14022312154031762355ull, 502200138168120ull}},
+{{11217849723225409884ull, 401760110534496ull}},
+{{5284930963838417584ull, 321408088427597ull}},
+{{12145238356883378457ull, 514252941484155ull}},
+{{9716190685506702766ull, 411402353187324ull}},
+{{11462301363147272536ull, 329121882549859ull}},
+{{7271635736809905088ull, 526595012079775ull}},
+{{5817308589447924070ull, 421276009663820ull}},
+{{4653846871558339256ull, 337020807731056ull}},
+{{67457365009522164ull, 539233292369690ull}},
+{{53965892007617731ull, 431386633895752ull}},
+{{11111219157831825154ull, 345109307116601ull}},
+{{10399253023047099600ull, 552174891386562ull}},
+{{940704788953859034ull, 441739913109250ull}},
+{{752563831163087227ull, 353391930487400ull}},
+{{602051064930469781ull, 282713544389920ull}},
+{{963281703888751651ull, 452341671023872ull}},
+{{11838671807336732290ull, 361873336819097ull}},
+{{2092239816385565186ull, 289498669455278ull}},
+{{18104978965184545590ull, 463197871128444ull}},
+{{18173331986889546795ull, 370558296902755ull}},
+{{14538665589511637436ull, 296446637522204ull}},
+{{12193818498992888928ull, 474314620035527ull}},
+{{2376357169710490496ull, 379451696028422ull}},
+{{12969132179994123366ull, 303561356822737ull}},
+{{5993216229022956094ull, 485698170916380ull}},
+{{4794572983218364875ull, 388558536733104ull}},
+{{7525007201316602223ull, 310846829386483ull}},
+{{8350662707364653234ull, 497354927018373ull}},
+{{14059227795375543233ull, 397883941614698ull}},
+{{179335792074703617ull, 318307153291759ull}},
+{{7665634896803346434ull, 509291445266814ull}},
+{{9821856732184587470ull, 407433156213451ull}},
+{{4168136571005759653ull, 325946524970761ull}},
+{{17737064957834946414ull, 521514439953217ull}},
+{{6810954336784136485ull, 417211551962574ull}},
+{{9138112284169219511ull, 333769241570059ull}},
+{{3552933210445020249ull, 534030786512095ull}},
+{{2842346568356016199ull, 427224629209676ull}},
+{{17031272513652454252ull, 341779703367740ull}},
+{{8803291948134375187ull, 546847525388385ull}},
+{{7042633558507500150ull, 437478020310708ull}},
+{{13012804476289820766ull, 349982416248566ull}},
+{{13441789532579892579ull, 559971865997706ull}},
+{{7064082811322003740ull, 447977492798165ull}},
+{{5651266249057602992ull, 358381994238532ull}},
+{{15589059443471813363ull, 286705595390825ull}},
+{{6495751035845349765ull, 458728952625321ull}},
+{{1507252013934369489ull, 366983162100257ull}},
+{{12273848055373226561ull, 293586529680205ull}},
+{{1191412814887610881ull, 469738447488329ull}},
+{{4642479066651999028ull, 375790757990663ull}},
+{{11092680882805419869ull, 300632606392530ull}},
+{{17748289412488671790ull, 481012170228048ull}},
+{{3130585085765206463ull, 384809736182439ull}},
+{{6193816883354075493ull, 307847788945951ull}},
+{{2531409383882700143ull, 492556462313522ull}},
+{{13093173951331891084ull, 394045169850817ull}},
+{{3095841531581692221ull, 315236135880654ull}},
+{{12332044080014528200ull, 504377817409046ull}},
+{{6176286449269712237ull, 403502253927237ull}},
+{{16009075603641500759ull, 322801803141789ull}},
+{{14546474521600670245ull, 516482885026863ull}},
+{{569133173054805226ull, 413186308021491ull}},
+{{15212701797411485474ull, 330549046417192ull}},
+{{9582927616890735465ull, 528878474267508ull}},
+{{15045039722996409018ull, 423102779414006ull}},
+{{8346682963655216891ull, 338482223531205ull}},
+{{13354692741848347027ull, 541571557649928ull}},
+{{18062451822962498268ull, 433257246119942ull}},
+{{7071263828886177968ull, 346605796895954ull}},
+{{245975681992153779ull, 554569275033527ull}},
+{{11264826989819453993ull, 443655420026821ull}},
+{{5322512777113652871ull, 354924336021457ull}},
+{{15326056665916653266ull, 283939468817165ull}},
+{{6074946591757093610ull, 454303150107465ull}},
+{{4859957273405674888ull, 363442520085972ull}},
+{{14956012262950270880ull, 290754016068777ull}},
+{{9172224361752792115ull, 465206425710044ull}},
+{{11027128304144144015ull, 372165140568035ull}},
+{{8821702643315315212ull, 297732112454428ull}},
+{{10425375414562594017ull, 476371379927085ull}},
+{{8340300331650075213ull, 381097103941668ull}},
+{{14050937894803880817ull, 304877683153334ull}},
+{{11413454187460478338ull, 487804293045335ull}},
+{{9130763349968382670ull, 390243434436268ull}},
+{{14683308309458526782ull, 312194747549014ull}},
+{{12425246850907911882ull, 499511596078423ull}},
+{{17318895110210150152ull, 399609276862738ull}},
+{{2787069643942389152ull, 319687421490191ull}},
+{{15527357874533553613ull, 511499874384305ull}},
+{{12421886299626842890ull, 409199899507444ull}},
+{{13626857854443384635ull, 327359919605955ull}},
+{{3356228493399863801ull, 523775871369529ull}},
+{{6374331609461801364ull, 419020697095623ull}},
+{{12478162917053261737ull, 335216557676498ull}},
+{{16275711852543308457ull, 536346492282397ull}},
+{{5641871852550826119ull, 429077193825918ull}},
+{{11892195111524481542ull, 343261755060734ull}},
+{{7959465734213439497ull, 549218808097175ull}},
+{{6367572587370751598ull, 439375046477740ull}},
+{{5094058069896601278ull, 351500037182192ull}},
+{{11839841726576472368ull, 562400059491507ull}},
+{{2093175751777357248ull, 449920047593206ull}},
+{{16431935860389527091ull, 359936038074564ull}},
+{{16834897503053531996ull, 287948830459651ull}},
+{{1110394301692278932ull, 460718128735443ull}},
+{{8267013070837643792ull, 368574502988354ull}},
+{{10302959271412025356ull, 294859602390683ull}},
+{{12795386019517330247ull, 471775363825093ull}},
+{{17615006445097684844ull, 377420291060074ull}},
+{{17781353970820058198ull, 301936232848059ull}},
+{{17382119909086362148ull, 483097972556895ull}},
+{{13905695927269089718ull, 386478378045516ull}},
+{{7435207927073361451ull, 309182702436413ull}},
+{{8206983868575467999ull, 494692323898261ull}},
+{{2876238280118464076ull, 395753859118609ull}},
+{{5990339438836681584ull, 316603087294887ull}},
+{{13273891916880600858ull, 506564939671819ull}},
+{{14308462348246391010ull, 405251951737455ull}},
+{{11446769878597112808ull, 324201561389964ull}},
+{{7246785361529649523ull, 518722498223943ull}},
+{{13176125918707540264ull, 414977998579154ull}},
+{{14230249549707942535ull, 331982398863323ull}},
+{{632306391081246117ull, 531171838181318ull}},
+{{7884542742348817540ull, 424937470545054ull}},
+{{9996983008620964355ull, 339949976436043ull}},
+{{12305823999051632645ull, 543919962297669ull}},
+{{13534008013983216439ull, 435135969838135ull}},
+{{10827206411186573151ull, 348108775870508ull}},
+{{13634181443156606719ull, 556974041392813ull}},
+{{18286042784009106021ull, 445579233114250ull}},
+{{14628834227207284817ull, 356463386491400ull}},
+{{11703067381765827853ull, 285170709193120ull}},
+{{278163737115772950ull, 456273134708993ull}},
+{{7601228619176439006ull, 365018507767194ull}},
+{{9770331710083061528ull, 292014806213755ull}},
+{{15632530736132898445ull, 467223689942008ull}},
+{{1437978144680587786ull, 373778951953607ull}},
+{{12218428959970201199ull, 299023161562885ull}},
+{{1102742262242770302ull, 478437058500617ull}},
+{{11950240254019947211ull, 382749646800493ull}},
+{{16938889832699778415ull, 306199717440394ull}},
+{{16034177288093914495ull, 489919547904631ull}},
+{{9137993015733221273ull, 391935638323705ull}},
+{{7310394412586577018ull, 313548510658964ull}},
+{{628584615912792260ull, 501677617054343ull}},
+{{7881565322214054454ull, 401342093643474ull}},
+{{9994601072513153886ull, 321073674914779ull}},
+{{4923315271795315249ull, 513717879863647ull}},
+{{15006698661661983169ull, 410974303890917ull}},
+{{4626661299845765888ull, 328779443112734ull}},
+{{14781355709237046068ull, 526047108980374ull}},
+{{15514433382131547178ull, 420837687184299ull}},
+{{16100895520447148065ull, 336670149747439ull}},
+{{14693386388489705935ull, 538672239595903ull}},
+{{686662666566033778ull, 430937791676723ull}},
+{{7928027762736647669ull, 344750233341378ull}},
+{{8995495605636725947ull, 551600373346205ull}},
+{{7196396484509380758ull, 441280298676964ull}},
+{{9446466002349414929ull, 353024238941571ull}},
+{{3867823987137621620ull, 282419391153257ull}},
+{{9877867194162104916ull, 451871025845211ull}},
+{{4212944940587773609ull, 361496820676169ull}},
+{{7059704767212129211ull, 289197456540935ull}},
+{{11295527627539406737ull, 462715930465496ull}},
+{{5347073287289615066ull, 370172744372397ull}},
+{{15345705074057423023ull, 296138195497917ull}},
+{{9795732859524235544ull, 473821112796668ull}},
+{{15215283917103209081ull, 379056890237334ull}},
+{{15861575948424477588ull, 303245512189867ull}},
+{{10621126258511522848ull, 485192819503788ull}},
+{{15875598636293038925ull, 388154255603030ull}},
+{{12700478909034431140ull, 310523404482424ull}},
+{{9252719810229358855ull, 496837447171879ull}},
+{{11091524662925397407ull, 397469957737503ull}},
+{{16251917359824138572ull, 317975966190002ull}},
+{{11245672516750980422ull, 508761545904004ull}},
+{{12685886828142694661ull, 407009236723203ull}},
+{{17527407091997976375ull, 325607389378562ull}},
+{{13286456088229120908ull, 520971823005700ull}},
+{{10629164870583296726ull, 416777458404560ull}},
+{{8503331896466637381ull, 333421966723648ull}},
+{{9915982219604709486ull, 533475146757837ull}},
+{{554088146199946942ull, 426780117406270ull}},
+{{443270516959957554ull, 341424093925016ull}},
+{{11777279271361663056ull, 546278550280025ull}},
+{{9421823417089330445ull, 437022840224020ull}},
+{{7537458733671464356ull, 349618272179216ull}},
+{{4681236344390522323ull, 559389235486746ull}},
+{{55640260770507535ull, 447511388389397ull}},
+{{11112558652842136998ull, 358009110711517ull}},
+{{1511349292789888952ull, 286407288569214ull}},
+{{9796856497947642969ull, 458251661710742ull}},
+{{458787568874293729ull, 366601329368594ull}},
+{{4056378869841345306ull, 293281063494875ull}},
+{{6490206191746152490ull, 469249701591800ull}},
+{{5192164953396921992ull, 375399761273440ull}},
+{{4153731962717537594ull, 300319809018752ull}},
+{{10335319955089970473ull, 480511694430003ull}},
+{{15646953593555797025ull, 384409355544002ull}},
+{{5138865245360816973ull, 307527484435202ull}},
+{{11911533207319217481ull, 492043975096323ull}},
+{{16907924195339194631ull, 393635180077058ull}},
+{{2458292912045624735ull, 314908144061647ull}},
+{{7622617474014909900ull, 503853030498635ull}},
+{{6098093979211927920ull, 403082424398908ull}},
+{{12257172812853362982ull, 322465939519126ull}},
+{{12232778871081560125ull, 515945503230602ull}},
+{{2407525467381427454ull, 412756402584482ull}},
+{{12994066818130872932ull, 330205122067585ull}},
+{{2343762835299845076ull, 528328195308137ull}},
+{{12943056712465607030ull, 422662556246509ull}},
+{{14043794184714395947ull, 338130044997207ull}},
+{{7712675436575392223ull, 541008071995532ull}},
+{{17238186793486044748ull, 432806457596425ull}},
+{{13790549434788835798ull, 346245166077140ull}},
+{{3618135021952585662ull, 553992265723425ull}},
+{{2894508017562068529ull, 443193812578740ull}},
+{{2315606414049654823ull, 354555050062992ull}},
+{{12920531575465454828ull, 283644040050393ull}},
+{{16983501706002817402ull, 453830464080629ull}},
+{{17276150179544164245ull, 363064371264503ull}},
+{{2752873699409600426ull, 290451497011603ull}},
+{{715249104313450359ull, 464722395218565ull}},
+{{572199283450760287ull, 371777916174852ull}},
+{{11525805870986339199ull, 297422332939881ull}},
+{{11062591764094322073ull, 475875732703810ull}},
+{{8850073411275457658ull, 380700586163048ull}},
+{{14458756358504186773ull, 304560468930438ull}},
+{{997917285155236897ull, 487296750288702ull}},
+{{11866380272349920487ull, 389837400230961ull}},
+{{5803755403138026067ull, 311869920184769ull}},
+{{16664706274504662353ull, 498991872295630ull}},
+{{13331765019603729883ull, 399193497836504ull}},
+{{14354760830424894229ull, 319354798269203ull}},
+{{831524440228368828ull, 510967677230726ull}},
+{{15422614811150336355ull, 408774141784580ull}},
+{{12338091848920269084ull, 327019313427664ull}},
+{{8672900514046699565ull, 523230901484263ull}},
+{{14317018040721180298ull, 418584721187410ull}},
+{{11453614432576944238ull, 334867776949928ull}},
+{{14636434277381200459ull, 535788443119885ull}},
+{{11709147421904960367ull, 428630754495908ull}},
+{{16746015567007788940ull, 342904603596726ull}},
+{{968183204019090041ull, 548647365754763ull}},
+{{8153244192699092679ull, 438917892603810ull}},
+{{6522595354159274143ull, 351134314083048ull}},
+{{6746803751912928307ull, 561814902532877ull}},
+{{16465489445756073615ull, 449451922026301ull}},
+{{9483042741862948569ull, 359561537621041ull}},
+{{3897085378748448532ull, 287649230096833ull}},
+{{2545987791255607328ull, 460238768154933ull}},
+{{9415487862488306508ull, 368191014523946ull}},
+{{3843041475248734883ull, 294552811619157ull}},
+{{9838215175139886137ull, 471284498590651ull}},
+{{4181223325369998586ull, 377027598872521ull}},
+{{18102373919263640162ull, 301622079098016ull}},
+{{3138356567628451997ull, 482595326556827ull}},
+{{13578731698328492567ull, 386076261245461ull}},
+{{7173636543920883730ull, 308861008996369ull}},
+{{409772026047682999ull, 494177614394191ull}},
+{{15085212879805787692ull, 395342091515352ull}},
+{{4689472674360809507ull, 316273673212282ull}},
+{{11192505093719205535ull, 506037877139651ull}},
+{{5264655260233454104ull, 404830301711721ull}},
+{{522375393444852960ull, 323864241369377ull}},
+{{4525149444253675060ull, 518182786191003ull}},
+{{10998817184886760694ull, 414546228952802ull}},
+{{1420356118425587909ull, 331636983162242ull}},
+{{5961918604222850978ull, 530619173059587ull}},
+{{15837581327604011752ull, 424495338447669ull}},
+{{16359413876825119724ull, 339596270758135ull}},
+{{7728318129210639943ull, 543354033213017ull}},
+{{17250700947594242924ull, 434683226570413ull}},
+{{2732514313849663370ull, 347746581256331ull}},
+{{15440069346385192361ull, 556394530010129ull}},
+{{16041404291850064212ull, 445115624008103ull}},
+{{1765076989254320400ull, 356092499206483ull}},
+{{8790759220887276966ull, 284873999365186ull}},
+{{6686517123935822500ull, 455798398984298ull}},
+{{12727911328632478646ull, 364638719187438ull}},
+{{17561026692389803563ull, 291710975349950ull}},
+{{9650898634114134086ull, 466737560559921ull}},
+{{4031370092549396945ull, 373390048447937ull}},
+{{14293142518265248526ull, 298712038758349ull}},
+{{11800981584998666672ull, 477939262013359ull}},
+{{13130134082740843661ull, 382351409610687ull}},
+{{3125409636708854282ull, 305881127688550ull}},
+{{5000655418734166851ull, 489409804301680ull}},
+{{4000524334987333481ull, 391527843441344ull}},
+{{6889768282731777108ull, 313222274753075ull}},
+{{11023629252370843373ull, 501155639604920ull}},
+{{8818903401896674698ull, 400924511683936ull}},
+{{3365773906775429435ull, 320739609347149ull}},
+{{12763935880324507743ull, 513183374955438ull}},
+{{17589846333743426841ull, 410546699964350ull}},
+{{14071877066994741473ull, 328437359971480ull}},
+{{4068259233482034740ull, 525499775954369ull}},
+{{6943956201527538115ull, 420399820763495ull}},
+{{5555164961222030492ull, 336319856610796ull}},
+{{1509566308471428142ull, 538111770577274ull}},
+{{4897001861519052836ull, 430489416461819ull}},
+{{7606950303957152592ull, 344391533169455ull}},
+{{12171120486331444148ull, 551026453071128ull}},
+{{17115594018548975964ull, 440821162456902ull}},
+{{6313777585355360125ull, 352656929965522ull}},
+{{16119068512510019070ull, 282125543972417ull}},
+{{11033114361048389219ull, 451400870355868ull}},
+{{16205189118322532021ull, 361120696284694ull}},
+{{16653500109399935940ull, 288896557027755ull}},
+{{8198856101330345889ull, 462234491244409ull}},
+{{10248433695806187034ull, 369787592995527ull}},
+{{820049327161128981ull, 295830074396422ull}},
+{{5001427738199716693ull, 473328119034275ull}},
+{{4001142190559773354ull, 378662495227420ull}},
+{{3200913752447818683ull, 302929996181936ull}},
+{{16189508448142240863ull, 484687993891097ull}},
+{{5572909129029972044ull, 387750395112878ull}},
+{{11837024932707798281ull, 310200316090302ull}},
+{{4181844633364835958ull, 496320505744484ull}},
+{{7034824521433779089ull, 397056404595587ull}},
+{{16695906061372754241ull, 317645123676469ull}},
+{{15645403253970675816ull, 508232197882351ull}},
+{{8826973788434630330ull, 406585758305881ull}},
+{{3372230216005793940ull, 325268606644705ull}},
+{{5395568345609270305ull, 520429770631528ull}},
+{{11695152305971236890ull, 416343816505222ull}},
+{{1977424215293168866ull, 333075053204178ull}},
+{{17921274003436711478ull, 532920085126684ull}},
+{{18026368017491279506ull, 426336068101347ull}},
+{{7042396784509202958ull, 341068854481078ull}},
+{{7578486040472814410ull, 545710167169725ull}},
+{{6062788832378251528ull, 436568133735780ull}},
+{{4850231065902601222ull, 349254506988624ull}},
+{{15139067334927982602ull, 558807211181798ull}},
+{{1043207423716655112ull, 447045768945439ull}},
+{{4523914753715234413ull, 357636615156351ull}},
+{{18376527061939828823ull, 286109292125080ull}},
+{{10955699225394174501ull, 457774867400129ull}},
+{{12453908195057249924ull, 366219893920103ull}},
+{{17341824185529620585ull, 292975915136082ull}},
+{{12989523437879751644ull, 468761464217732ull}},
+{{3012921120819980669ull, 375009171374186ull}},
+{{17167732155623625828ull, 300007337099348ull}},
+{{5332278560546339385ull, 480011739358958ull}},
+{{11644520477920892155ull, 384009391487166ull}},
+{{5626267567594803400ull, 307207513189733ull}},
+{{5312679293409775118ull, 491532021103573ull}},
+{{11628841064211640740ull, 393225616882858ull}},
+{{16681770480853133239ull, 314580493506286ull}},
+{{865391066171640920ull, 503328789610059ull}},
+{{4381661667679223059ull, 402663031688047ull}},
+{{14573375778369109417ull, 322130425350437ull}},
+{{8560005986422933774ull, 515408680560700ull}},
+{{6848004789138347019ull, 412326944448560ull}},
+{{5478403831310677615ull, 329861555558848ull}},
+{{5076097315355173862ull, 527778488894157ull}},
+{{15128924296509870059ull, 422222791115325ull}},
+{{12103139437207896047ull, 337778232892260ull}},
+{{918279025823082059ull, 540445172627617ull}},
+{{11802669664884196617ull, 432356138102093ull}},
+{{16820833361391177940ull, 345884910481674ull}},
+{{15845286934000153734ull, 553415856770679ull}},
+{{16365578361942033311ull, 442732685416543ull}},
+{{2024416245327895679ull, 354186148333235ull}},
+{{1619532996262316543ull, 283348918666588ull}},
+{{17348648052987347762ull, 453358269866540ull}},
+{{13878918442389878209ull, 362686615893232ull}},
+{{3724437124428081921ull, 290149292714586ull}},
+{{17027145843310662043ull, 464238868343337ull}},
+{{6243019045164708988ull, 371391094674670ull}},
+{{4994415236131767191ull, 297112875739736ull}},
+{{612366748327006859ull, 475380601183578ull}},
+{{7868591028145426133ull, 380304480946862ull}},
+{{17362919266742071876ull, 304243584757489ull}},
+{{16712624382561584033ull, 486789735611983ull}},
+{{2302053061823536256ull, 389431788489587ull}},
+{{12909688893684559975ull, 311545430791669ull}},
+{{9587455785669564990ull, 498472689266671ull}},
+{{3980615813793741669ull, 398778151413337ull}},
+{{14252539095260724304ull, 319022521130669ull}},
+{{11736016108191427918ull, 510436033809071ull}},
+{{5699464071811232011ull, 408348827047257ull}},
+{{15627617701674716578ull, 326679061637805ull}},
+{{6557444248969994910ull, 522686498620489ull}},
+{{8935304213917906251ull, 418149198896391ull}},
+{{3458894556392414677ull, 334519359117113ull}},
+{{1844882475485953161ull, 535230974587381ull}},
+{{16233301239356403821ull, 428184779669904ull}},
+{{16675989806227033380ull, 342547823735923ull}},
+{{4545490801511791469ull, 548076517977478ull}},
+{{11015090270693253822ull, 438461214381982ull}},
+{{1433374587070782411ull, 350768971505586ull}},
+{{13361445783538982827ull, 561230354408937ull}},
+{{3310458997347365615ull, 448984283527150ull}},
+{{2648367197877892492ull, 359187426821720ull}},
+{{2118693758302313994ull, 287349941457376ull}},
+{{14457956457509433360ull, 459759906331801ull}},
+{{7877016351265636365ull, 367807925065441ull}},
+{{2612264266270598768ull, 294246340052353ull}},
+{{490274011291047706ull, 470794144083765ull}},
+{{392219209032838165ull, 376635315267012ull}},
+{{11381821811452001502ull, 301308252213609ull}},
+{{7142868454097471433ull, 482093203541775ull}},
+{{5714294763277977146ull, 385674562833420ull}},
+{{4571435810622381717ull, 308539650266736ull}},
+{{18382343741221541717ull, 493663440426777ull}},
+{{7327177363493412727ull, 394930752341422ull}},
+{{16929788335020461151ull, 315944601873137ull}},
+{{12330266077065096550ull, 505511362997020ull}},
+{{9864212861652077240ull, 404409090397616ull}},
+{{4202021474579751468ull, 323527272318093ull}},
+{{3033885544585692026ull, 517643635708949ull}},
+{{6116457250410463944ull, 414114908567159ull}},
+{{8582514615070281478ull, 331291926853727ull}},
+{{17421372198854360689ull, 530067082965963ull}},
+{{2869051314857757582ull, 424053666372771ull}},
+{{17052636310853847358ull, 339242933098216ull}},
+{{1458776394172783511ull, 542788692957147ull}},
+{{12235067559563957778ull, 434230954365717ull}},
+{{2409356418167345576ull, 347384763492574ull}},
+{{11233667898551573568ull, 555815621588118ull}},
+{{16365631948325079501ull, 444652497270494ull}},
+{{16781854373401973924ull, 355721997816395ull}},
+{{13425483498721579139ull, 284577598253116ull}},
+{{14102075968470705976ull, 455324157204986ull}},
+{{7592311960034654458ull, 364259325763989ull}},
+{{9763198382769633889ull, 291407460611191ull}},
+{{8242419782947593577ull, 466251936977906ull}},
+{{2904587011616164538ull, 373001549582325ull}},
+{{2323669609292931630ull, 298401239665860ull}},
+{{3717871374868690609ull, 477441983465376ull}},
+{{17731692358862593780ull, 381953586772300ull}},
+{{14185353887090075024ull, 305562869417840ull}},
+{{4249822145634568422ull, 488900591068545ull}},
+{{3399857716507654738ull, 391120472854836ull}},
+{{17477281432173765083ull, 312896378283868ull}},
+{{5827557403026562194ull, 500634205254190ull}},
+{{4662045922421249755ull, 400507364203352ull}},
+{{14797683182162730773ull, 320405891362681ull}},
+{{16297595461976548591ull, 512649426180290ull}},
+{{13038076369581238873ull, 410119540944232ull}},
+{{3051763466181170452ull, 328095632755386ull}},
+{{15950867990115603693ull, 524953012408617ull}},
+{{5381996762608662308ull, 419962409926894ull}},
+{{7994946224828840169ull, 335969927941515ull}},
+{{12791913959726144271ull, 537551884706424ull}},
+{{13922879982522825740ull, 430041507765139ull}},
+{{14827652800760170915ull, 344033206212111ull}},
+{{16345546851732452818ull, 550453129939378ull}},
+{{2008391037160231285ull, 440362503951503ull}},
+{{8985410459212005674ull, 352290003161202ull}},
+{{18256374811595335509ull, 281832002528961ull}},
+{{3384757995359164552ull, 450931204046339ull}},
+{{6397155211029241965ull, 360744963237071ull}},
+{{1428375354081483248ull, 288595970589657ull}},
+{{5974749381272283521ull, 461753552943451ull}},
+{{1090450690275916493ull, 369402842354761ull}},
+{{15629755811188374487ull, 295522273883808ull}},
+{{2871516409449937241ull, 472835638214094ull}},
+{{5986561942301860116ull, 378268510571275ull}},
+{{4789249553841488093ull, 302614808457020ull}},
+{{7662799286146380949ull, 484183693531232ull}},
+{{17198285873142835728ull, 387346954824985ull}},
+{{13758628698514268583ull, 309877563859988ull}},
+{{18324457102880919409ull, 495804102175981ull}},
+{{10970216867562825204ull, 396643281740785ull}},
+{{8776173494050260163ull, 317314625392628ull}},
+{{10352528775738505938ull, 507703400628205ull}},
+{{8282023020590804750ull, 406162720502564ull}},
+{{10314967231214554123ull, 324930176402051ull}},
+{{9125249940459465951ull, 519888282243282ull}},
+{{18368246396593303731ull, 415910625794625ull}},
+{{14694597117274642984ull, 332728500635700ull}},
+{{5064611313929877159ull, 532365601017121ull}},
+{{362340236401991404ull, 425892480813697ull}},
+{{11357918633347324093ull, 340713984650957ull}},
+{{3415274554388077256ull, 545142375441532ull}},
+{{13800266087736192774ull, 436113900353225ull}},
+{{11040212870188954219ull, 348891120282580ull}},
+{{17664340592302326751ull, 558225792452128ull}},
+{{3063426029616130431ull, 446580633961703ull}},
+{{9829438453176724991ull, 357264507169362ull}},
+{{484853133057559347ull, 285811605735490ull}},
+{{775765012892094955ull, 457298569176784ull}},
+{{4309960825055586287ull, 365838855341427ull}},
+{{14516015104270199999ull, 292671084273141ull}},
+{{15846926537348499352ull, 468273734837026ull}},
+{{8988192415136889159ull, 374618987869621ull}},
+{{3501205117367601004ull, 299695190295697ull}},
+{{9291277002530071929ull, 479512304473115ull}},
+{{7433021602024057543ull, 383609843578492ull}},
+{{17014463725844977004ull, 306887874862793ull}},
+{{5087049072900501268ull, 491020599780470ull}},
+{{4069639258320401014ull, 392816479824376ull}},
+{{18013106665623962104ull, 314253183859500ull}},
+{{10374226591288787751ull, 502805094175201ull}},
+{{4610032458289119877ull, 402244075340161ull}},
+{{18445421225598937194ull, 321795260272128ull}},
+{{7376581072506837572ull, 514872416435406ull}},
+{{2211916043263559735ull, 411897933148325ull}},
+{{1769532834610847788ull, 329518346518660ull}},
+{{2831252535377356460ull, 527229354429856ull}},
+{{17022397287269526461ull, 421783483543884ull}},
+{{17307266644557531492ull, 337426786835107ull}},
+{{12934231372324409095ull, 539882858936172ull}},
+{{2968687468375706629ull, 431906287148938ull}},
+{{9753647604184385950ull, 345525029719150ull}},
+{{15605836166695017520ull, 552840047550640ull}},
+{{12484668933356014016ull, 442272038040512ull}},
+{{2609037517200990566ull, 353817630432410ull}},
+{{2087230013760792453ull, 283054104345928ull}},
+{{18096963280984909217ull, 452886566953484ull}},
+{{18166919439529837697ull, 362309253562787ull}},
+{{7154837922140049511ull, 289847402850230ull}},
+{{11447740675424079218ull, 463755844560368ull}},
+{{16536890169823084021ull, 371004675648294ull}},
+{{16918860950600377540ull, 296803740518635ull}},
+{{8623433447251052448ull, 474885984829817ull}},
+{{17966793202026572928ull, 379908787863853ull}},
+{{3305388117395527373ull, 303927030291083ull}},
+{{1599272173090933473ull, 486283248465733ull}},
+{{8658115367956567425ull, 389026598772586ull}},
+{{3237143479623343617ull, 311221279018069ull}},
+{{12558127196881170433ull, 497954046428910ull}},
+{{10046501757504936346ull, 398363237143128ull}},
+{{15415899035487769723ull, 318690589714502ull}},
+{{9908043197812790265ull, 509904943543204ull}},
+{{11615783372992142535ull, 407923954834563ull}},
+{{16671324327877534674ull, 326339163867650ull}},
+{{8227374850894503863ull, 522142662188241ull}},
+{{2892551065973692767ull, 417714129750593ull}},
+{{9692738482262774860ull, 334171303800474ull}},
+{{4440335127394708807ull, 534674086080759ull}},
+{{7241616916657677369ull, 427739268864607ull}},
+{{16861339977551872864ull, 342191415091685ull}},
+{{8531399890373444967ull, 547506264146697ull}},
+{{17893166356524486943ull, 438005011317357ull}},
+{{6935835455735768908ull, 350404009053886ull}},
+{{3718639099693409607ull, 560646414486218ull}},
+{{10353608909238548332ull, 448517131588974ull}},
+{{11972235942132748989ull, 358813705271179ull}},
+{{13267137568448109514ull, 287050964216943ull}},
+{{17538071294775064900ull, 459281542747109ull}},
+{{17719805850561962243ull, 367425234197687ull}},
+{{6797147050965749148ull, 293940187358150ull}},
+{{10875435281545198637ull, 470304299773040ull}},
+{{8700348225236158909ull, 376243439818432ull}},
+{{18028325024414658097ull, 300994751854745ull}},
+{{10398575965353901339ull, 481591602967593ull}},
+{{15697558401766941718ull, 385273282374074ull}},
+{{16247395536155463697ull, 308218625899259ull}},
+{{14927786413623010946ull, 493149801438815ull}},
+{{11942229130898408757ull, 394519841151052ull}},
+{{2175085675234906359ull, 315615872920842ull}},
+{{7169485895117760498ull, 504985396673347ull}},
+{{16803635160319939368ull, 403988317338677ull}},
+{{6064210498772130848ull, 323190653870942ull}},
+{{13392085612777319680ull, 517105046193507ull}},
+{{3334970860738035098ull, 413684036954806ull}},
+{{17425371947558069371ull, 330947229563844ull}},
+{{16812548671867180024ull, 529515567302151ull}},
+{{9760690122751833696ull, 423612453841721ull}},
+{{4119203283459556633ull, 338889963073377ull}},
+{{10280074068277200937ull, 542223940917403ull}},
+{{15602756884105581396ull, 433779152733922ull}},
+{{5103507877800644470ull, 347023322187138ull}},
+{{4476263789739120829ull, 555237315499421ull}},
+{{18338406290758937956ull, 444189852399536ull}},
+{{10981376217865240042ull, 355351881919629ull}},
+{{12474449789034102356ull, 284281505535703ull}},
+{{16269770847712653447ull, 454850408857125ull}},
+{{13015816678170122758ull, 363880327085700ull}},
+{{10412653342536098206ull, 291104261668560ull}},
+{{16660245348057757130ull, 465766818669696ull}},
+{{9638847463704295381ull, 372613454935757ull}},
+{{332380341479615658ull, 298090763948606ull}},
+{{11599854990593116023ull, 476945222317769ull}},
+{{12969232807216403141ull, 381556177854215ull}},
+{{10375386245773122513ull, 305244942283372ull}},
+{{1843222734269354728ull, 488391907653396ull}},
+{{16231973446383125075ull, 390713526122716ull}},
+{{9296229942364589737ull, 312570820898173ull}},
+{{11184619093041433256ull, 500113313437077ull}},
+{{1568997644949325959ull, 400090650749662ull}},
+{{12323244560185191736ull, 320072520599729ull}},
+{{8649144852070575809ull, 512116032959567ull}},
+{{17987362325882191617ull, 409692826367653ull}},
+{{3321843416480022324ull, 327754261094123ull}},
+{{1625600651626125395ull, 524406817750597ull}},
+{{12368526965526631285ull, 419525454200477ull}},
+{{2516123942937484382ull, 335620363360382ull}},
+{{7715147123441885334ull, 536992581376611ull}},
+{{2482768884011597944ull, 429594065101289ull}},
+{{5675563921951188678ull, 343675252081031ull}},
+{{1702204645638081239ull, 549880403329650ull}},
+{{1361763716510464991ull, 439904322663720ull}},
+{{1089410973208371993ull, 351923458130976ull}},
+{{15628924037534338887ull, 281538766504780ull}},
+{{6559534386345390604ull, 450462026407649ull}},
+{{8936976323818222806ull, 360369621126119ull}},
+{{10838929873796488568ull, 288295696900895ull}},
+{{17342287798074381709ull, 461273115041432ull}},
+{{6495132608975684721ull, 369018492033146ull}},
+{{1506757272438637453ull, 295214793626517ull}},
+{{6100160450643730249ull, 472343669802427ull}},
+{{15948174804740715168ull, 377874935841941ull}},
+{{9069191029050661811ull, 302299948673553ull}},
+{{10821356831739148575ull, 483679917877685ull}},
+{{8657085465391318860ull, 386943934302148ull}},
+{{14304366001796875735ull, 309555147441718ull}},
+{{750892714423539236ull, 495288235906750ull}},
+{{600714171538831389ull, 396230588725400ull}},
+{{480571337231065111ull, 316984470980320ull}},
+{{768914139569704178ull, 507175153568512ull}},
+{{11683177755881494312ull, 405740122854809ull}},
+{{13035891019447105773ull, 324592098283847ull}},
+{{6100030372147727944ull, 519347357254156ull}},
+{{1190675482976272032ull, 415477885803325ull}},
+{{952540386381017625ull, 332382308642660ull}},
+{{1524064618209628201ull, 531811693828256ull}},
+{{15976646953535343853ull, 425449355062604ull}},
+{{16470666377570185406ull, 340359484050083ull}},
+{{4216973315660834710ull, 544575174480134ull}},
+{{7062927467270578091ull, 435660139584107ull}},
+{{16718388418042193443ull, 348528111667285ull}},
+{{8302677395157957892ull, 557644978667657ull}},
+{{17710188360352097283ull, 446115982934125ull}},
+{{14168150688281677827ull, 356892786347300ull}},
+{{11334520550625342261ull, 285514229077840ull}},
+{{18135232881000547618ull, 456822766524544ull}},
+{{18197535119542348418ull, 365458213219635ull}},
+{{14558028095633878734ull, 292366570575708ull}},
+{{1156752064562744035ull, 467786512921134ull}},
+{{4614750466392105551ull, 374229210336907ull}},
+{{14759846817339415411ull, 299383368269525ull}},
+{{5169010834033513041ull, 479013389231241ull}},
+{{445859852484900110ull, 383210711384993ull}},
+{{7735385511471740734ull, 306568569107994ull}},
+{{1308570374129054205ull, 490509710572791ull}},
+{{15804251558270884657ull, 392407768458232ull}},
+{{5264703617132887079ull, 313926214766586ull}},
+{{1044828157928798680ull, 502281943626538ull}},
+{{8214560155826859591ull, 401825554901230ull}},
+{{6571648124661487672ull, 321460443920984ull}},
+{{17893334628942200923ull, 514336710273574ull}},
+{{18004016517895671061ull, 411469368218859ull}},
+{{18092562029058447172ull, 329175494575087ull}},
+{{14190703987525874183ull, 526680791320140ull}},
+{{11352563190020699346ull, 421344633056112ull}},
+{{1703352922532738830ull, 337075706444890ull}},
+{{2725364676052382129ull, 539321130311824ull}},
+{{5869640555583816026ull, 431456904249459ull}},
+{{8385061259208963144ull, 345165523399567ull}},
+{{17105446829476251354ull, 552264837439307ull}},
+{{6305659834097180437ull, 441811869951446ull}},
+{{1355179052535834026ull, 353449495961157ull}},
+{{12152189686254398190ull, 282759596768925ull}},
+{{996759424297485489ull, 452415354830281ull}},
+{{15554802798405629684ull, 361932283864224ull}},
+{{16133191053466414070ull, 289545827091379ull}},
+{{14745059241320531543ull, 463273323346207ull}},
+{{4417349763572604588ull, 370618658676966ull}},
+{{18291275069825724963ull, 296494926941572ull}},
+{{14508644852753518648ull, 474391883106516ull}},
+{{7917567067460904595ull, 379513506485213ull}},
+{{13712751283452544323ull, 303610805188170ull}},
+{{3493657979814519300ull, 485777288301073ull}},
+{{10173624013335436087ull, 388621830640858ull}},
+{{15517596840152169516ull, 310897464512686ull}},
+{{17449457314759650579ull, 497435943220298ull}},
+{{2891519407581989493ull, 397948754576239ull}},
+{{6002564340807501918ull, 318359003660991ull}},
+{{2225405315808182422ull, 509374405857586ull}},
+{{16537719511614187231ull, 407499524686068ull}},
+{{2162129165065618815ull, 325999619748855ull}},
+{{3459406664104990104ull, 521599391598168ull}},
+{{10146222960767812729ull, 417279513278534ull}},
+{{11806327183356160507ull, 333823610622827ull}},
+{{4132728234402215518ull, 534117776996524ull}},
+{{6995531402263682738ull, 427294221597219ull}},
+{{9285773936552856513ull, 341835377277775ull}},
+{{14857238298484570421ull, 546936603644440ull}},
+{{11885790638787656337ull, 437549282915552ull}},
+{{2129934881546304423ull, 350039426332442ull}},
+{{7097244625215997401ull, 560063082131907ull}},
+{{16745842144398528890ull, 448050465705525ull}},
+{{13396673715518823112ull, 358440372564420ull}},
+{{10717338972415058489ull, 286752298051536ull}},
+{{9769044726380272937ull, 458803676882458ull}},
+{{15193933410588038996ull, 367042941505966ull}},
+{{8465797913728520873ull, 293634353204773ull}},
+{{9855927847223723074ull, 469814965127637ull}},
+{{506044648295157813ull, 375851972102110ull}},
+{{404835718636126250ull, 300681577681688ull}},
+{{15405132408785443294ull, 481090524290700ull}},
+{{12324105927028354635ull, 384872419432560ull}},
+{{9859284741622683708ull, 307897935546048ull}},
+{{12085506771854383610ull, 492636696873677ull}},
+{{2289707787999686241ull, 394109357498942ull}},
+{{12899812674625479962ull, 315287485999153ull}},
+{{16950351464658857617ull, 504459977598645ull}},
+{{13560281171727086093ull, 403567982078916ull}},
+{{7158876122639758551ull, 322854385663133ull}},
+{{7764852981481703359ull, 516567017061013ull}},
+{{13590580014669183334ull, 413253613648810ull}},
+{{10872464011735346667ull, 330602890919048ull}},
+{{13706593604034644344ull, 528964625470477ull}},
+{{3586577253743894829ull, 423171700376382ull}},
+{{13937308247220846833ull, 338537360301105ull}},
+{{3852949121843803316ull, 541659776481769ull}},
+{{6771708112216952976ull, 433327821185415ull}},
+{{5417366489773562381ull, 346662256948332ull}},
+{{12357135198379610133ull, 554659611117331ull}},
+{{6196359343961777783ull, 443727688893865ull}},
+{{4957087475169422226ull, 354982151115092ull}},
+{{15033716424361268751ull, 283985720892073ull}},
+{{1917853390526568062ull, 454377153427318ull}},
+{{8912980341905075096ull, 363501722741854ull}},
+{{10819733088265970400ull, 290801378193483ull}},
+{{13622224126483642317ull, 465282205109573ull}},
+{{18276476930670734500ull, 372225764087658ull}},
+{{3553135100310856630ull, 297780611270127ull}},
+{{9374364975239280932ull, 476448978032203ull}},
+{{14878189609675245392ull, 381159182425762ull}},
+{{4523854058256375667ull, 304927345940610ull}},
+{{7238166493210201067ull, 487883753504976ull}},
+{{2101184379826250531ull, 390307002803981ull}},
+{{16438342762828641717ull, 312245602243184ull}},
+{{15233301976300095778ull, 499592963589095ull}},
+{{12186641581040076622ull, 399674370871276ull}},
+{{6059964450090150975ull, 319739496697021ull}},
+{{2317245490660420913ull, 511583194715234ull}},
+{{5543145207270247054ull, 409266555772187ull}},
+{{15502562610041928612ull, 327413244617749ull}},
+{{13736053731841354811ull, 523861191388399ull}},
+{{14678191800214994172ull, 419088953110719ull}},
+{{15431902254913905660ull, 335271162488575ull}},
+{{6244299534152697441ull, 536433859981721ull}},
+{{1306090812580247629ull, 429147087985377ull}},
+{{12112919094289929073ull, 343317670388301ull}},
+{{12001972921380065871ull, 549308272621282ull}},
+{{2222880707620232050ull, 439446618097026ull}},
+{{16535699825063826933ull, 351557294477620ull}},
+{{8010375646392571477ull, 562491671164193ull}},
+{{13786998146597877828ull, 449993336931354ull}},
+{{14718947332020212585ull, 359994669545083ull}},
+{{707111421390439099ull, 287995735636067ull}},
+{{4820727088966612881ull, 460793177017707ull}},
+{{14924628115399021274ull, 368634541614165ull}},
+{{11939702492319217019ull, 294907633291332ull}},
+{{4346128728743105939ull, 471852213266132ull}},
+{{14544949427220215720ull, 377481770612905ull}},
+{{11635959541776172576ull, 301985416490324ull}},
+{{7549488822616145153ull, 483176666384519ull}},
+{{9728939872834826445ull, 386541333107615ull}},
+{{7783151898267861156ull, 309233066486092ull}},
+{{16142391851970488173ull, 494772906377747ull}},
+{{5535215852092569892ull, 395818325102198ull}},
+{{11806870311157876560ull, 316654660081758ull}},
+{{15201643683110692173ull, 506647456130813ull}},
+{{1093268502262822769ull, 405317964904651ull}},
+{{15632010060777899508ull, 324254371923720ull}},
+{{6564472023535087597ull, 518806995077953ull}},
+{{12630275248311890724ull, 415045596062362ull}},
+{{2725522569165691932ull, 332036476849890ull}},
+{{4360836110665107092ull, 531258362959824ull}},
+{{7178017703273995997ull, 425006690367859ull}},
+{{9431762977361107120ull, 340005352294287ull}},
+{{333425504810130100ull, 544008563670860ull}},
+{{266740403848104080ull, 435206850936688ull}},
+{{7592089952562303910ull, 348165480749350ull}},
+{{12147343924099686257ull, 557064769198960ull}},
+{{9717875139279749005ull, 445651815359168ull}},
+{{15152997740907619851ull, 356521452287334ull}},
+{{15811747007468006204ull, 285217161829867ull}},
+{{10541399952981168633ull, 456347458927788ull}},
+{{15811817591868755553ull, 365077967142230ull}},
+{{12649454073495004442ull, 292062373713784ull}},
+{{9171080073366276138ull, 467299797942055ull}},
+{{7336864058693020911ull, 373839838353644ull}},
+{{9558840061696327052ull, 299071870682915ull}},
+{{15294144098714123283ull, 478514993092664ull}},
+{{15924664093713208949ull, 382811994474131ull}},
+{{9050382460228656836ull, 306249595579305ull}},
+{{14480611936365850938ull, 489999352926888ull}},
+{{516443104866949781ull, 391999482341511ull}},
+{{15170549742861201117ull, 313599585873208ull}},
+{{2136786700126459849ull, 501759337397134ull}},
+{{5398778174843078202ull, 401407469917707ull}},
+{{15387068984100193531ull, 321125975934165ull}},
+{{6172566300850758034ull, 513801561494665ull}},
+{{4938053040680606427ull, 411041249195732ull}},
+{{15018488876770216111ull, 328832999356585ull}},
+{{5582838129122794162ull, 526132798970537ull}},
+{{15534316947523966299ull, 420906239176429ull}},
+{{16116802372761083363ull, 336724991341143ull}},
+{{3650790907966271441ull, 538759986145830ull}},
+{{2920632726373017153ull, 431007988916664ull}},
+{{6025854995840324045ull, 344806391133331ull}},
+{{2262670363860697827ull, 551690225813330ull}},
+{{1810136291088558261ull, 441352180650664ull}},
+{{5137457847612756932ull, 353081744520531ull}},
+{{420617463348295222ull, 282465395616425ull}},
+{{672987941357272356ull, 451944632986280ull}},
+{{538390353085817885ull, 361555706389024ull}},
+{{4120061097210564631ull, 289244565111219ull}},
+{{13970795385020724056ull, 462791304177950ull}},
+{{11176636308016579245ull, 370233043342360ull}},
+{{8941309046413263396ull, 296186434673888ull}},
+{{10616745659519311110ull, 473898295478221ull}},
+{{4804047712873538565ull, 379118636382577ull}},
+{{14911284614524561821ull, 303294909106061ull}},
+{{16479357753755478268ull, 485271854569698ull}},
+{{2115439758778651645ull, 388217483655759ull}},
+{{5381700621764831639ull, 310573986924607ull}},
+{{12300069809565640946ull, 496918379079371ull}},
+{{6150707032910602433ull, 397534703263497ull}},
+{{15988612070554212916ull, 318027762610797ull}},
+{{10824384053919099374ull, 508844420177276ull}},
+{{4970158428393369176ull, 407075536141821ull}},
+{{286777927972785017ull, 325660428913457ull}},
+{{4148193499498366351ull, 521056686261531ull}},
+{{18075950058566334373ull, 416845349009224ull}},
+{{18150108861594977822ull, 333476279207379ull}},
+{{17972127734326233546ull, 533562046731807ull}},
+{{6999004557977166190ull, 426849637385446ull}},
+{{1909854831639822629ull, 341479709908357ull}},
+{{6745116545365626529ull, 546367535853371ull}},
+{{1706744421550590900ull, 437094028682697ull}},
+{{12433441981466203690ull, 349675222946157ull}},
+{{5136111911378284611ull, 559480356713852ull}},
+{{15176935973328358658ull, 447584285371081ull}},
+{{8452199963920776603ull, 358067428296865ull}},
+{{6761759971136621283ull, 286453942637492ull}},
+{{14508164768560504376ull, 458326308219987ull}},
+{{4227834185364582854ull, 366661046575990ull}},
+{{3382267348291666283ull, 293328837260792ull}},
+{{9100976572008576376ull, 469326139617267ull}},
+{{18348827701832592071ull, 375460911693813ull}},
+{{3611015717240342687ull, 300368729355051ull}},
+{{16845671591810279269ull, 480589966968081ull}},
+{{9787188458706313092ull, 384471973574465ull}},
+{{7829750766965050473ull, 307577578859572ull}},
+{{16216950041885991081ull, 492124126175315ull}},
+{{12973560033508792865ull, 393699300940252ull}},
+{{3000150397323213645ull, 314959440752202ull}},
+{{8489589450459052156ull, 503935105203523ull}},
+{{14170369189851062371ull, 403148084162818ull}},
+{{268248907655118927ull, 322518467330255ull}},
+{{429198252248190284ull, 516029547728408ull}},
+{{7722056231282372873ull, 412823638182726ull}},
+{{2488296170283987975ull, 330258910546181ull}},
+{{15049320316680111730ull, 528414256873889ull}},
+{{15728805068085999707ull, 422731405499111ull}},
+{{8893695239726889443ull, 338185124399289ull}},
+{{3161865939337292139ull, 541096199038863ull}},
+{{9908190380953654357ull, 432876959231090ull}},
+{{7926552304762923486ull, 346301567384872ull}},
+{{16371832502362587901ull, 554082507815795ull}},
+{{13097466001890070320ull, 443266006252636ull}},
+{{6788623986770145933ull, 354612805002109ull}},
+{{9120248004158027070ull, 283690244001687ull}},
+{{18281745621394753635ull, 453904390402699ull}},
+{{18314745311857713231ull, 363123512322159ull}},
+{{18341145064228080908ull, 290498809857727ull}},
+{{14588436843797288160ull, 464798095772364ull}},
+{{15360098289779740851ull, 371838476617891ull}},
+{{8598729817081882358ull, 297470781294313ull}},
+{{10068618892589101449ull, 475953250070901ull}},
+{{4365546299329370836ull, 380762600056721ull}},
+{{18249832298431137962ull, 304610080045376ull}},
+{{3374289974296448476ull, 487376128072603ull}},
+{{10078129608920979427ull, 389900902458082ull}},
+{{683806057652962895ull, 311920721966466ull}},
+{{12162136136470471603ull, 499073155146345ull}},
+{{9729708909176377282ull, 399258524117076ull}},
+{{4094418312599191502ull, 319406819293661ull}},
+{{17619115744384437374ull, 511050910869857ull}},
+{{6716594966023729252ull, 408840728695886ull}},
+{{1683927158077073079ull, 327072582956709ull}},
+{{10072981082407137572ull, 523316132730734ull}},
+{{11747733680667620381ull, 418652906184587ull}},
+{{2019489315050275658ull, 334922324947670ull}},
+{{3231182904080441054ull, 535875719916272ull}},
+{{13652992767490083812ull, 428700575933017ull}},
+{{3543696584508246403ull, 342960460746414ull}},
+{{13048612164697014892ull, 548736737194262ull}},
+{{3060192102273791267ull, 438989389755410ull}},
+{{2448153681819033014ull, 351191511804328ull}},
+{{227697076168542499ull, 561906418886925ull}},
+{{182157660934833999ull, 449525135109540ull}},
+{{145726128747867199ull, 359620108087632ull}},
+{{11184627347224024729ull, 287696086470105ull}},
+{{17895403755558439566ull, 460313738352168ull}},
+{{3248276560221020683ull, 368250990681735ull}},
+{{2598621248176816547ull, 294600792545388ull}},
+{{468445182340996152ull, 471361268072621ull}},
+{{15132151404840438214ull, 377089014458096ull}},
+{{8416372309130440248ull, 301671211566477ull}},
+{{17155544509350614720ull, 482673938506363ull}},
+{{2656389163254760807ull, 386139150805091ull}},
+{{16882506589571449938ull, 308911320644072ull}},
+{{12254615284346678608ull, 494258113030516ull}},
+{{6114343412735432563ull, 395406490424413ull}},
+{{12270172359672166697ull, 316325192339530ull}},
+{{1185531701765915099ull, 506120307743249ull}},
+{{4637774176154642403ull, 404896246194599ull}},
+{{7399568155665624245ull, 323916996955679ull}},
+{{771262604839267823ull, 518267195129087ull}},
+{{11685056528097145228ull, 414613756103269ull}},
+{{13037394037219626505ull, 331691004882615ull}},
+{{2413086385841850793ull, 530705607812185ull}},
+{{1930469108673480634ull, 424564486249748ull}},
+{{8923072916422605154ull, 339651588999798ull}},
+{{10587567851534257923ull, 543442542399677ull}},
+{{1091356651743585692ull, 434754033919742ull}},
+{{11941131765620599523ull, 347803227135793ull}},
+{{15416462010251048914ull, 556485163417269ull}},
+{{16022518422942749454ull, 445188130733815ull}},
+{{12818014738354199563ull, 356150504587052ull}},
+{{2875714161199539004ull, 284920403669642ull}},
+{{8290491472661172730ull, 455872645871427ull}},
+{{17700439622354669154ull, 364698116697141ull}},
+{{10471002883141825000ull, 291758493357713ull}},
+{{13064255798285009676ull, 466813589372341ull}},
+{{6762055823886097418ull, 373450871497873ull}},
+{{12788342288592698581ull, 298760697198298ull}},
+{{16771998847006407406ull, 478017115517277ull}},
+{{6038901448121305278ull, 382413692413822ull}},
+{{15899167602722775192ull, 305930953931057ull}},
+{{10681272905388799015ull, 489489526289692ull}},
+{{1166320694827218565ull, 391591621031754ull}},
+{{4622405370603685175ull, 313273296825403ull}},
+{{3706499778223985958ull, 501237274920645ull}},
+{{2965199822579188766ull, 400989819936516ull}},
+{{17129555117030992306ull, 320791855949212ull}},
+{{12649892928281946397ull, 513266969518740ull}},
+{{10119914342625557117ull, 410613575614992ull}},
+{{717233844616625047ull, 328490860491994ull}},
+{{8526271780870420722ull, 525585376787190ull}},
+{{6821017424696336578ull, 420468301429752ull}},
+{{16524860383982800232ull, 336374641143801ull}},
+{{614334911179108109ull, 538199425830083ull}},
+{{7870165558427107133ull, 430559540664066ull}},
+{{2606783631999775383ull, 344447632531253ull}},
+{{481504996457730290ull, 551116212050005ull}},
+{{385203997166184232ull, 440892969640004ull}},
+{{3997512012474857709ull, 352714375712003ull}},
+{{10576707239463706813ull, 282171500569602ull}},
+{{2165336324174289609ull, 451474400911364ull}},
+{{5421617874081342010ull, 361179520729091ull}},
+{{647945484523163285ull, 288943616583273ull}},
+{{15794108034204702549ull, 462309786533236ull}},
+{{8945937612621851716ull, 369847829226589ull}},
+{{10846098904839391696ull, 295878263381271ull}},
+{{9975060618259206067ull, 473405221410034ull}},
+{{11669397309349275177ull, 378724177128027ull}},
+{{1956820217995599495ull, 302979341702422ull}},
+{{6820261163534869515ull, 484766946723875ull}},
+{{5456208930827895612ull, 387813557379100ull}},
+{{4364967144662316490ull, 310250845903280ull}},
+{{6983947431459706384ull, 496401353445248ull}},
+{{12965855574651585753ull, 397121082756198ull}},
+{{17751382089205089249ull, 317696866204958ull}},
+{{6266118454276680859ull, 508314985927934ull}},
+{{8702243578163255011ull, 406651988742347ull}},
+{{18029841306756334978ull, 325321590993877ull}},
+{{14090350831842494672ull, 520514545590204ull}},
+{{14961629480215906061ull, 416411636472163ull}},
+{{901257139946993879ull, 333129309177731ull}},
+{{12510057868140921176ull, 533006894684369ull}},
+{{13697395109254647264ull, 426405515747495ull}},
+{{10957916087403717811ull, 341124412597996ull}},
+{{10153968110362127852ull, 545799060156794ull}},
+{{11812523303031612605ull, 436639248125435ull}},
+{{9450018642425290084ull, 349311398500348ull}},
+{{11430681013138553811ull, 558898237600557ull}},
+{{1765847181027022402ull, 447118590080446ull}},
+{{16170073003789259214ull, 357694872064356ull}},
+{{9246709588289497048ull, 286155897651485ull}},
+{{14794735341263195277ull, 457849436242376ull}},
+{{8146439458268645899ull, 366279548993901ull}},
+{{2827802751873006396ull, 293023639195121ull}},
+{{15592530847222541203ull, 468837822712193ull}},
+{{1405978233552301993ull, 375070258169755ull}},
+{{1124782586841841594ull, 300056206535804ull}},
+{{9178349768430767197ull, 480089930457286ull}},
+{{3653331000002703434ull, 384071944365829ull}},
+{{6612013614744073071ull, 307257555492663ull}},
+{{6889872968848606590ull, 491612088788261ull}},
+{{1822549560336974949ull, 393289671030609ull}},
+{{5147388463011490282ull, 314631736824487ull}},
+{{11925170355560294775ull, 503410778919179ull}},
+{{13229485099190146143ull, 402728623135343ull}},
+{{17962285708835937561ull, 322182898508274ull}},
+{{17671610689911769128ull, 515492637613239ull}},
+{{17826637366671325625ull, 412394110090591ull}},
+{{10571961078595150177ull, 329915288072473ull}},
+{{13225788911010329960ull, 527864460915957ull}},
+{{3201933499324443322ull, 422291568732766ull}},
+{{17318942058427195950ull, 337833254986212ull}},
+{{12952912034515872228ull, 540533207977940ull}},
+{{10362329627612697782ull, 432426566382352ull}},
+{{911166072606337579ull, 345941253105882ull}},
+{{5147214530912050450ull, 553506004969411ull}},
+{{428422809987730037ull, 442804803975529ull}},
+{{4032087062732094352ull, 354243843180423ull}},
+{{10604367279669496128ull, 283395074544338ull}},
+{{13277638832729283482ull, 453432119270941ull}},
+{{6932762251441516463ull, 362745695416753ull}},
+{{12924907430637033816ull, 290196556333402ull}},
+{{5922456630051612814ull, 464314490133444ull}},
+{{8427314118783200574ull, 371451592106755ull}},
+{{6741851295026560459ull, 297161273685404ull}},
+{{18165659701526317381ull, 475458037896646ull}},
+{{10843178946479143582ull, 380366430317317ull}},
+{{1295845527699494219ull, 304293144253854ull}},
+{{9452050473803011397ull, 486869030806166ull}},
+{{3872291564300498794ull, 389495224644933ull}},
+{{10476530880924219682ull, 311596179715946ull}},
+{{9383751779994930845ull, 498553887545514ull}},
+{{11196350238737854999ull, 398843110036411ull}},
+{{5267731376248373676ull, 319074488029129ull}},
+{{15807067831481218528ull, 510519180846606ull}},
+{{8956305450443064499ull, 408415344677285ull}},
+{{7165044360354451599ull, 326732275741828ull}},
+{{7774722161825212236ull, 522771641186925ull}},
+{{6219777729460169788ull, 418217312949540ull}},
+{{4975822183568135831ull, 334573850359632ull}},
+{{11650664308450927653ull, 535318160575411ull}},
+{{5631182632018831799ull, 428254528460329ull}},
+{{8194294920356975762ull, 342603622768263ull}},
+{{9421523057829250896ull, 548165796429221ull}},
+{{3847869631521490394ull, 438532637143377ull}},
+{{14146342149442923285ull, 350826109714701ull}},
+{{15255449809624856609ull, 561321775543522ull}},
+{{4825662218216064641ull, 449057420434818ull}},
+{{11239227404056672359ull, 359245936347854ull}},
+{{12680730737987248210ull, 287396749078283ull}},
+{{16599820366037686814ull, 459834798525253ull}},
+{{2211809848604418481ull, 367867838820203ull}},
+{{9148145508367355431ull, 294294271056162ull}},
+{{18326381628129679013ull, 470870833689859ull}},
+{{18350454117245653534ull, 376696666951887ull}},
+{{7301665664312702181ull, 301357333561510ull}},
+{{11682665062900323489ull, 482171733698416ull}},
+{{5656783235578348468ull, 385737386958733ull}},
+{{11904124217946499421ull, 308589909566986ull}},
+{{11667901119230578427ull, 493743855307178ull}},
+{{16713018524868283388ull, 394995084245742ull}},
+{{5991717190410806064ull, 315996067396594ull}},
+{{16965445134141110349ull, 505593707834550ull}},
+{{13572356107312888279ull, 404474966267640ull}},
+{{10857884885850310623ull, 323579973014112ull}},
+{{2615220558392855705ull, 517727956822580ull}},
+{{2092176446714284564ull, 414182365458064ull}},
+{{5363089972113337974ull, 331345892366451ull}},
+{{1202246325897520112ull, 530153427786322ull}},
+{{12029843504943747059ull, 424122742229057ull}},
+{{2245177174471177001ull, 339298193783246ull}},
+{{14660329923379614171ull, 542877110053193ull}},
+{{660217494477960367ull, 434301688042555ull}},
+{{528173995582368294ull, 347441350434044ull}},
+{{8223776022415609917ull, 555906160694470ull}},
+{{6579020817932487933ull, 444724928555576ull}},
+{{1573867839604080023ull, 355779942844461ull}},
+{{16016489530650905311ull, 284623954275568ull}},
+{{3490290360589986559ull, 455398326840910ull}},
+{{2792232288471989247ull, 364318661472728ull}},
+{{9612483460261412044ull, 291454929178182ull}},
+{{622578277450617978ull, 466327886685092ull}},
+{{11566109066186225352ull, 373062309348073ull}},
+{{16631584882432800928ull, 298449847478458ull}},
+{{4474442923441019546ull, 477519755965534ull}},
+{{7268903153494725960ull, 382015804772427ull}},
+{{16883168967021511737ull, 305612643817941ull}},
+{{1187628644041046518ull, 488980230108707ull}},
+{{12018149359458568184ull, 391184184086965ull}},
+{{9614519487566854547ull, 312947347269572ull}},
+{{625835921139325982ull, 500715755631316ull}},
+{{15258063995879102079ull, 400572604505052ull}},
+{{4827753567219461016ull, 320458083604042ull}},
+{{11413754522293047950ull, 512732933766467ull}},
+{{1752305988350617713ull, 410186347013174ull}},
+{{5091193605422404494ull, 328149077610539ull}},
+{{15524607398159667837ull, 525038524176862ull}},
+{{5040988289043913623ull, 420030819341490ull}},
+{{4032790631235130898ull, 336024655473192ull}},
+{{10141813824718119760ull, 537639448757107ull}},
+{{734753430290675162ull, 430111559005686ull}},
+{{15345198003200181422ull, 344089247204548ull}},
+{{2416223916668828337ull, 550542795527278ull}},
+{{9311676762818883316ull, 440434236421822ull}},
+{{70643780771286006ull, 352347389137458ull}},
+{{7435212654100849451ull, 281877911309966ull}},
+{{4517642617077538476ull, 451004658095946ull}},
+{{18371509352629672073ull, 360803726476756ull}},
+{{11007858667361827335ull, 288642981181405ull}},
+{{17612573867778923737ull, 461828769890248ull}},
+{{3022012649997408020ull, 369463015912199ull}},
+{{6106958934739836739ull, 295570412729759ull}},
+{{17149831925067559429ull, 472912660367614ull}},
+{{17409214354795957866ull, 378330128294091ull}},
+{{10238022669094855970ull, 302664102635273ull}},
+{{12691487455809859229ull, 484262564216437ull}},
+{{2774492335164066736ull, 387410051373150ull}},
+{{2219593868131253389ull, 309928041098520ull}},
+{{3551350189010005423ull, 495884865757632ull}},
+{{13909126595433735308ull, 396707892606105ull}},
+{{11127301276346988246ull, 317366314084884ull}},
+{{6735635597929450224ull, 507786102535815ull}},
+{{5388508478343560179ull, 406228882028652ull}},
+{{15378853226900579113ull, 324983105622921ull}},
+{{17227467533557105935ull, 519972968996674ull}},
+{{17471322841587595071ull, 415978375197339ull}},
+{{17666407088011986380ull, 332782700157871ull}},
+{{2440809637625805945ull, 532452320252595ull}},
+{{1952647710100644756ull, 425961856202076ull}},
+{{16319513427048157098ull, 340769484961660ull}},
+{{7664477409567499741ull, 545231175938657ull}},
+{{17199628371879730762ull, 436184940750925ull}},
+{{13759702697503784610ull, 348947952600740ull}},
+{{3568780242296503760ull, 558316724161185ull}},
+{{2855024193837203008ull, 446653379328948ull}},
+{{9662716984553583052ull, 357322703463158ull}},
+{{15108871217126687088ull, 285858162770526ull}},
+{{16795496317918878695ull, 457373060432842ull}},
+{{6057699424851282309ull, 365898448346274ull}},
+{{8535508354622936171ull, 292718758677019ull}},
+{{2588766923170966904ull, 468350013883231ull}},
+{{16828408797504414816ull, 374680011106584ull}},
+{{17152075852745442176ull, 299744008885267ull}},
+{{12685926105425066189ull, 479590414216428ull}},
+{{17527438513823873597ull, 383672331373142ull}},
+{{6643253181575278231ull, 306937865098514ull}},
+{{18007902720004265817ull, 491100584157622ull}},
+{{7027624546519592007ull, 392880467326098ull}},
+{{13000797266699494252ull, 314304373860878ull}},
+{{17111926811977280480ull, 502886998177405ull}},
+{{13689541449581824384ull, 402309598541924ull}},
+{{14640981974407369830ull, 321847678833539ull}},
+{{12357524714826060759ull, 514956286133663ull}},
+{{17264717401344669253ull, 411965028906930ull}},
+{{13811773921075735403ull, 329572023125544ull}},
+{{11030791829495445675ull, 527315237000871ull}},
+{{5135284648854446217ull, 421852189600697ull}},
+{{15176274163309287943ull, 337481751680557ull}},
+{{9524643402327219416ull, 539970802688892ull}},
+{{241017092377954886ull, 431976642151114ull}},
+{{3882162488644274232ull, 345581313720891ull}},
+{{17279506426056569741ull, 552930101953425ull}},
+{{13823605140845255793ull, 442344081562740ull}},
+{{11058884112676204634ull, 353875265250192ull}},
+{{1468409660657143061ull, 283100212200154ull}},
+{{9728153086535249544ull, 452960339520246ull}},
+{{4093173654486289312ull, 362368271616197ull}},
+{{14342585367814762419ull, 289894617292957ull}},
+{{8190741329535978578ull, 463831387668732ull}},
+{{17620639507854513832ull, 371065110134985ull}},
+{{14096511606283611066ull, 296852088107988ull}},
+{{418325681602315766ull, 474963340972782ull}},
+{{11402706989507583582ull, 379970672778225ull}},
+{{9122165591606066866ull, 303976538222580ull}},
+{{14595464946569706985ull, 486362461156128ull}},
+{{608325513030034619ull, 389089968924903ull}},
+{{7865358039907848341ull, 311271975139922ull}},
+{{16273921678594467669ull, 498035160223875ull}},
+{{13019137342875574135ull, 398428128179100ull}},
+{{10415309874300459308ull, 318742502543280ull}},
+{{16664495798880734894ull, 509988004069248ull}},
+{{2263550194878856945ull, 407990403255399ull}},
+{{5500188970644995879ull, 326392322604319ull}},
+{{16178999982515814053ull, 522227716166910ull}},
+{{12943199986012651243ull, 417782172933528ull}},
+{{17733257618293941640ull, 334225738346822ull}},
+{{13615816930302665332ull, 534761181354916ull}},
+{{7203304729500221942ull, 427808945083933ull}},
+{{13141341413083998200ull, 342247156067146ull}},
+{{13647448631450576474ull, 547595449707434ull}},
+{{14607307719902371503ull, 438076359765947ull}},
+{{4307148546438076556ull, 350461087812758ull}},
+{{3202088859559012166ull, 560737740500413ull}},
+{{9940368717131030379ull, 448590192400330ull}},
+{{7952294973704824303ull, 358872153920264ull}},
+{{10051184793705769766ull, 287097723136211ull}},
+{{8703198040445410979ull, 459356357017938ull}},
+{{14341256061840149429ull, 367485085614350ull}},
+{{11473004849472119543ull, 293988068491480ull}},
+{{18356807759155391270ull, 470380909586368ull}},
+{{3617399763098582046ull, 376304727669095ull}},
+{{2893919810478865637ull, 301043782135276ull}},
+{{15698318140991915989ull, 481670051416441ull}},
+{{8869305698051622468ull, 385336041133153ull}},
+{{14474142187925118620ull, 308268832906522ull}},
+{{8401232241712548500ull, 493230132650436ull}},
+{{3031636978628128477ull, 394584106120349ull}},
+{{6114658397644413105ull, 315667284896279ull}},
+{{17162151065714881614ull, 505067655834046ull}},
+{{10040372037829994968ull, 404054124667237ull}},
+{{653600000780175328ull, 323243299733790ull}},
+{{1045760001248280525ull, 517189279574064ull}},
+{{4525956815740534743ull, 413751423659251ull}},
+{{18378160711560069087ull, 331001138927400ull}},
+{{10958313064786558924ull, 529601822283841ull}},
+{{5077301637087336816ull, 423681457827073ull}},
+{{11440538939153690099ull, 338945166261658ull}},
+{{14615513487903993835ull, 542312266018653ull}},
+{{624364346097464098ull, 433849812814923ull}},
+{{7878189106361791925ull, 347079850251938ull}},
+{{8915753755436956757ull, 555327760403101ull}},
+{{3443254189607655082ull, 444262208322481ull}},
+{{17511998610653765359ull, 355409766657984ull}},
+{{17698947703264922610ull, 284327813326387ull}},
+{{13560921066256234884ull, 454924501322220ull}},
+{{10848736853004987907ull, 363939601057776ull}},
+{{4989640667662080002ull, 291151680846221ull}},
+{{604727438775507357ull, 465842689353954ull}},
+{{4173130765762316209ull, 372674151483163ull}},
+{{10717202242093673613ull, 298139321186530ull}},
+{{17147523587349877782ull, 477022913898448ull}},
+{{2649972425654171256ull, 381618331118759ull}},
+{{5809326755265247328ull, 305294664895007ull}},
+{{12984271623166306048ull, 488471463832011ull}},
+{{6698068483791134515ull, 390777171065609ull}},
+{{9047803601774817935ull, 312621736852487ull}},
+{{18165834577581619020ull, 500194778963979ull}},
+{{18222016476807205539ull, 400155823171183ull}},
+{{3509566737220033461ull, 320124658536947ull}},
+{{9304655594293963862ull, 512199453659115ull}},
+{{7443724475435171089ull, 409759562927292ull}},
+{{17023026024573867841ull, 327807650341833ull}},
+{{5100748750866726606ull, 524492240546934ull}},
+{{7769947815435291608ull, 419593792437547ull}},
+{{17284004696573964256ull, 335675033950037ull}},
+{{12897012255550701517ull, 537080054320060ull}},
+{{10317609804440561214ull, 429664043456048ull}},
+{{15632785473036269617ull, 343731234764838ull}},
+{{2876363868406569449ull, 549969975623742ull}},
+{{13369137538950986528ull, 439975980498993ull}},
+{{18074007660644609869ull, 351980784399194ull}},
+{{18148554943257598218ull, 281584627519355ull}},
+{{10590943835502605534ull, 450535404030969ull}},
+{{12162103883143994750ull, 360428323224775ull}},
+{{9729683106515195800ull, 288342658579820ull}},
+{{15567492970424313280ull, 461348253727712ull}},
+{{5075296746855629978ull, 369078602982170ull}},
+{{4060237397484503982ull, 295262882385736ull}},
+{{17564426280200937341ull, 472420611817177ull}},
+{{6672843394676929226ull, 377936489453742ull}},
+{{16406321159967274351ull, 302349191562993ull}},
+{{4114020967496177022ull, 483758706500790ull}},
+{{3291216773996941618ull, 387006965200632ull}},
+{{13701019863423284264ull, 309605572160505ull}},
+{{3474887707767703206ull, 495368915456809ull}},
+{{6469258980956072888ull, 396295132365447ull}},
+{{16243453628990589280ull, 317036105892357ull}},
+{{11232130547417301555ull, 507257769427772ull}},
+{{1607006808450020598ull, 405806215542218ull}},
+{{8664303076243837124ull, 324644972433774ull}},
+{{2794838477764408430ull, 519431955894039ull}},
+{{5925219596953437067ull, 415545564715231ull}},
+{{1050826862820839330ull, 332436451772185ull}},
+{{1681322980513342929ull, 531898322835496ull}},
+{{16102453643378315636ull, 425518658268396ull}},
+{{9192614099960742185ull, 340414926614717ull}},
+{{18397531374679097820ull, 544663882583547ull}},
+{{7339327470259457609ull, 435731106066838ull}},
+{{13250159605691386734ull, 348584884853470ull}},
+{{2753511295396667158ull, 557735815765553ull}},
+{{9581506665801154373ull, 446188652612442ull}},
+{{286507703157102852ull, 356950922089954ull}},
+{{3918554977267592605ull, 285560737671963ull}},
+{{2580339148886237845ull, 456897180275141ull}},
+{{16821666578076631568ull, 365517744220112ull}},
+{{6078635632977484608ull, 292414195376090ull}},
+{{9725817012763975373ull, 467862712601744ull}},
+{{11470002424953090622ull, 374290170081395ull}},
+{{9176001939962472497ull, 299432136065116ull}},
+{{7302905474456135350ull, 479091417704186ull}},
+{{2152975564822997956ull, 383273134163349ull}},
+{{5411729266600308688ull, 306618507330679ull}},
+{{16037464456044314548ull, 490589611729086ull}},
+{{9140622750093541315ull, 392471689383269ull}},
+{{11001847014816743375ull, 313977351506615ull}},
+{{17602955223706789400ull, 502363762410584ull}},
+{{17771712993707341843ull, 401891009928467ull}},
+{{6838672765482052828ull, 321512807942774ull}},
+{{18320574054255105172ull, 514420492708438ull}},
+{{3588412799178353168ull, 411536394166751ull}},
+{{17628125498310323827ull, 329229115333400ull}},
+{{9758256723586966507ull, 526766584533441ull}},
+{{4117256564127662883ull, 421413267626753ull}},
+{{10672502880785950952ull, 337130614101402ull}},
+{{2318609350289880231ull, 539408982562244ull}},
+{{5544236294973814508ull, 431527186049795ull}},
+{{4435389035979051606ull, 345221748839836ull}},
+{{18164668901792213540ull, 552354798143737ull}},
+{{7153037491949950186ull, 441883838514990ull}},
+{{5722429993559960148ull, 353507070811992ull}},
+{{15645990439073699088ull, 282805656649593ull}},
+{{2897491814066456602ull, 452489050639350ull}},
+{{2317993451253165282ull, 361991240511480ull}},
+{{1854394761002532225ull, 289592992409184ull}},
+{{10345729247087872207ull, 463348787854694ull}},
+{{11965932212412208089ull, 370679030283755ull}},
+{{9572745769929766471ull, 296543224227004ull}},
+{{4248346787661895384ull, 474469158763207ull}},
+{{14466723874355247277ull, 379575327010565ull}},
+{{11573379099484197821ull, 303660261608452ull}},
+{{3760011300207075222ull, 485856418573524ull}},
+{{6697357854907570501ull, 388685134858819ull}},
+{{9047235098667966724ull, 310948107887055ull}},
+{{14475576157868746758ull, 497516972619288ull}},
+{{512414482069266437ull, 398013578095431ull}},
+{{15167326844623054442ull, 318410862476344ull}},
+{{13199676507171156138ull, 509457379962151ull}},
+{{6870392390995014587ull, 407565903969721ull}},
+{{1806965098054101346ull, 326052723175777ull}},
+{{6580492971628472478ull, 521684357081243ull}},
+{{12643092006786598628ull, 417347485664994ull}},
+{{13803822420171189226ull, 333877988531995ull}},
+{{3639371798564351146ull, 534204781651193ull}},
+{{10290195068335301563ull, 427363825320954ull}},
+{{11921504869410151573ull, 341891060256763ull}},
+{{15385058976314332194ull, 547025696410821ull}},
+{{8618698366309555432ull, 437620557128657ull}},
+{{17963005137273375315ull, 350096445702925ull}},
+{{10294064145927848889ull, 560154313124681ull}},
+{{4545902502000368788ull, 448123450499745ull}},
+{{3636722001600295030ull, 358498760399796ull}},
+{{17666772860247877317ull, 286799008319836ull}},
+{{2441394873203231445ull, 458878413311739ull}},
+{{5642464713304495479ull, 367102730649391ull}},
+{{824622955901686060ull, 293682184519513ull}},
+{{16076791988410338989ull, 469891495231220ull}},
+{{12861433590728271191ull, 375913196184976ull}},
+{{6599798057840706629ull, 300730556947981ull}},
+{{3180979263061309961ull, 481168891116770ull}},
+{{2544783410449047969ull, 384935112893416ull}},
+{{16793221987326879668ull, 307948090314732ull}},
+{{12111759920755366176ull, 492716944503572ull}},
+{{2310710307120472294ull, 394173555602858ull}},
+{{9227265875180198482ull, 315338844482286ull}},
+{{7384927770804496924ull, 504542151171658ull}},
+{{13286639846127418186ull, 403633720937326ull}},
+{{6939963062160024225ull, 322906976749861ull}},
+{{3725243269972218115ull, 516651162799778ull}},
+{{10358892245461595138ull, 413320930239822ull}},
+{{908416166885455464ull, 330656744191858ull}},
+{{16210861125984370035ull, 529050790706972ull}},
+{{5589991271303675382ull, 423240632565578ull}},
+{{11850690646526760952ull, 338592506052462ull}},
+{{4203709775475176230ull, 541748009683940ull}},
+{{3362967820380140984ull, 433398407747152ull}},
+{{13758420700529843757ull, 346718726197721ull}},
+{{14634775491363929365ull, 554749961916354ull}},
+{{15397169207833053815ull, 443799969533083ull}},
+{{1249688922040712082ull, 355039975626467ull}},
+{{12067797581858300635ull, 284031980501173ull}},
+{{15619127316231370693ull, 454451168801877ull}},
+{{5116604223501275908ull, 363560935041502ull}},
+{{15161329823026751696ull, 290848748033201ull}},
+{{16879430087358982068ull, 465357996853122ull}},
+{{6124846440403365008ull, 372286397482498ull}},
+{{12278574781806512652ull, 297829117985998ull}},
+{{15956370836148509921ull, 476526588777597ull}},
+{{5386399039434987290ull, 381221271022078ull}},
+{{11687816861031810479ull, 304977016817662ull}},
+{{3943111718683255473ull, 487963226908260ull}},
+{{3154489374946604378ull, 390370581526608ull}},
+{{9902289129441104149ull, 312296465221286ull}},
+{{8464964977621945992ull, 499674344354058ull}},
+{{14150669611581377440ull, 399739475483246ull}},
+{{7631186874523191629ull, 319791580386597ull}},
+{{15899247813979016930ull, 511666528618555ull}},
+{{12719398251183213544ull, 409333222894844ull}},
+{{13864867415688481158ull, 327466578315875ull}},
+{{3737043791392018237ull, 523946525305401ull}},
+{{17747030292081255882ull, 419157220244320ull}},
+{{14197624233665004706ull, 335325776195456ull}},
+{{15337501144380186883ull, 536521241912730ull}},
+{{12270000915504149506ull, 429216993530184ull}},
+{{13505349547145229928ull, 343373594824147ull}},
+{{6851164016464726593ull, 549397751718636ull}},
+{{1791582398429870951ull, 439518201374909ull}},
+{{5122614733485807084ull, 351614561099927ull}},
+{{11885532388319201658ull, 562583297759883ull}},
+{{16887123540139181972ull, 450066638207906ull}},
+{{9820350017369435255ull, 360053310566325ull}},
+{{7856280013895548204ull, 288042648453060ull}},
+{{12570048022232877126ull, 460868237524896ull}},
+{{6366689603044391378ull, 368694590019917ull}},
+{{16161398126661244072ull, 294955672015933ull}},
+{{3722144114206528576ull, 471929075225494ull}},
+{{6667064106107133184ull, 377543260180395ull}},
+{{5333651284885706547ull, 302034608144316ull}},
+{{1155144426333309829ull, 483255373030906ull}},
+{{15681510800034289156ull, 386604298424724ull}},
+{{16234557454769341648ull, 309283438739779ull}},
+{{14907245483405215667ull, 494853501983647ull}},
+{{4547098757240351887ull, 395882801586918ull}},
+{{11016376635276102156ull, 316706241269534ull}},
+{{6558156172216032480ull, 506729986031255ull}},
+{{5246524937772825984ull, 405383988825004ull}},
+{{7886568764960171110ull, 324307191060003ull}},
+{{8929161209194363454ull, 518891505696005ull}},
+{{7143328967355490763ull, 415113204556804ull}},
+{{9404011988626302933ull, 332090563645443ull}},
+{{11357070367060174370ull, 531344901832709ull}},
+{{12775005108390049819ull, 425075921466167ull}},
+{{2841306457228219209ull, 340060737172934ull}},
+{{11924787961048971381ull, 544097179476694ull}},
+{{13229179183581087428ull, 435277743581355ull}},
+{{10583343346864869942ull, 348222194865084ull}},
+{{5865302910758060938ull, 557155511784135ull}},
+{{4692242328606448751ull, 445724409427308ull}},
+{{11132491492368979647ull, 356579527541846ull}},
+{{5216644379153273394ull, 285263622033477ull}},
+{{12035979821387147754ull, 456421795253563ull}},
+{{17007481486593538850ull, 365137436202850ull}},
+{{13605985189274831080ull, 292109948962280ull}},
+{{3322832229130178112ull, 467375918339649ull}},
+{{6347614598046052812ull, 373900734671719ull}},
+{{8767440493178752573ull, 299120587737375ull}},
+{{14027904789086004117ull, 478592940379800ull}},
+{{11222323831268803294ull, 382874352303840ull}},
+{{8977859065015042635ull, 306299481843072ull}},
+{{18053923318765978539ull, 490079170948915ull}},
+{{14443138655012782831ull, 392063336759132ull}},
+{{4175813294526405618ull, 313650669407306ull}},
+{{17749347715467979959ull, 501841071051689ull}},
+{{17888826987116294291ull, 401472856841351ull}},
+{{10621712774951125109ull, 321178285473081ull}},
+{{9616042810437979529ull, 513885256756930ull}},
+{{7692834248350383623ull, 411108205405544ull}},
+{{9843616213422217221ull, 328886564324435ull}},
+{{15749785941475547554ull, 526218502919096ull}},
+{{8910479938438527720ull, 420974802335277ull}},
+{{18196430394976553146ull, 336779841868221ull}},
+{{3288846928769112771ull, 538847746989155ull}},
+{{2631077543015290217ull, 431078197591324ull}},
+{{5794210849154142496ull, 344862558073059ull}},
+{{16649434988130448641ull, 551780092916894ull}},
+{{17008896805246269236ull, 441424074333515ull}},
+{{13607117444197015389ull, 353139259466812ull}},
+{{3506996325873791664ull, 282511407573450ull}},
+{{5611194121398066663ull, 452018252117520ull}},
+{{4488955297118453331ull, 361614601694016ull}},
+{{18348559496662403957ull, 289291681355212ull}},
+{{14600299935692205039ull, 462866690168340ull}},
+{{11680239948553764031ull, 370293352134672ull}},
+{{1965494329359190578ull, 296234681707738ull}},
+{{17902186185942346219ull, 473975490732380ull}},
+{{14321748948753876975ull, 379180392585904ull}},
+{{15146747973745011903ull, 303344314068723ull}},
+{{2098703869540557106ull, 485350902509958ull}},
+{{9057660725116266331ull, 388280722007966ull}},
+{{3556779765351102741ull, 310624577606373ull}},
+{{2001498809819854063ull, 496999324170197ull}},
+{{12669245492081614220ull, 397599459336157ull}},
+{{2756698764181470730ull, 318079567468926ull}},
+{{15478764466916084137ull, 508927307950281ull}},
+{{8693662758790956987ull, 407141846360225ull}},
+{{6954930207032765589ull, 325713477088180ull}},
+{{11127888331252424943ull, 521141563341088ull}},
+{{16281008294485760601ull, 416913250672870ull}},
+{{13024806635588608480ull, 333530600538296ull}},
+{{13460992987457952923ull, 533648960861274ull}},
+{{14458143204708272661ull, 426919168689019ull}},
+{{15255863378508528452ull, 341535334951215ull}},
+{{5962637331904093908ull, 546456535921945ull}},
+{{4770109865523275126ull, 437165228737556ull}},
+{{126739077676709777ull, 349732182990045ull}},
+{{202782524282735644ull, 559571492784072ull}},
+{{11230272463651919485ull, 447657194227257ull}},
+{{1605520341437714941ull, 358125755381806ull}},
+{{16041811532117813246ull, 286500604305444ull}},
+{{14598852007162770224ull, 458400966888711ull}},
+{{7989732790988305856ull, 366720773510969ull}},
+{{10081135047532555008ull, 293376618808775ull}},
+{{16129816076052088013ull, 469402590094040ull}},
+{{12903852860841670410ull, 375522072075232ull}},
+{{2944384659189515682ull, 300417657660186ull}},
+{{15779061898928956060ull, 480668252256297ull}},
+{{5244551889659344202ull, 384534601805038ull}},
+{{11574339141211296008ull, 307627681444030ull}},
+{{72198552228521997ull, 492204290310449ull}},
+{{3747107656524727921ull, 393763432248359ull}},
+{{6687034939961692660ull, 315010745798687ull}},
+{{14388604718680618579ull, 504017193277899ull}},
+{{15200232589686405186ull, 403213754622319ull}},
+{{15849534886491034472ull, 322571003697855ull}},
+{{6912511744676103539ull, 516113605916569ull}},
+{{9219358210482793155ull, 412890884733255ull}},
+{{7375486568386234524ull, 330312707786604ull}},
+{{732732065192244269ull, 528500332458567ull}},
+{{11654232096379526384ull, 422800265966853ull}},
+{{16702083306587441754ull, 338240212773482ull}},
+{{11965938031572265514ull, 541184340437572ull}},
+{{2194052795773991764ull, 432947472350058ull}},
+{{9133939866103014058ull, 346357977880046ull}},
+{{7235606156281001846ull, 554172764608074ull}},
+{{9477833739766711800ull, 443338211686459ull}},
+{{11271615806555279763ull, 354670569349167ull}},
+{{1638595015760403164ull, 283736455479334ull}},
+{{10000449654700465709ull, 453978328766934ull}},
+{{11689708538502282890ull, 363182663013547ull}},
+{{1973069201318005666ull, 290546130410838ull}},
+{{17914305981076450358ull, 464873808657340ull}},
+{{14331444784861160287ull, 371899046925872ull}},
+{{4086458198405107583ull, 297519237540698ull}},
+{{2848984302706261810ull, 476030780065117ull}},
+{{13347233886390740417ull, 380824624052093ull}},
+{{18056484738596412980ull, 304659699241674ull}},
+{{17822329137528529799ull, 487455518786679ull}},
+{{17947212124764734162ull, 389964415029343ull}},
+{{3289723255586056360ull, 311971532023475ull}},
+{{5263557208937690176ull, 499154451237560ull}},
+{{4210845767150152141ull, 399323560990048ull}},
+{{10747374243203942359ull, 319458848792038ull}},
+{{13506449974384397452ull, 511134158067261ull}},
+{{7115811164765607638ull, 408907326453809ull}},
+{{9381997746554396434ull, 327125861163047ull}},
+{{253801135519393001ull, 523401377860876ull}},
+{{14960436167383155694ull, 418721102288700ull}},
+{{11968348933906524555ull, 334976881830960ull}},
+{{702614220540887672ull, 535963010929537ull}},
+{{11630137820658441107ull, 428770408743629ull}},
+{{12993459071268663209ull, 343016326994903ull}},
+{{17100185699287950811ull, 548826123191845ull}},
+{{13680148559430360649ull, 439060898553476ull}},
+{{7254770032802378196ull, 351248718842781ull}},
+{{4228934422999984467ull, 561997950148450ull}},
+{{3383147538399987574ull, 449598360118760ull}},
+{{2706518030719990059ull, 359678688095008ull}},
+{{9543912054059812693ull, 287742950476006ull}},
+{{7891561657011879663ull, 460388720761610ull}},
+{{6313249325609503730ull, 368310976609288ull}},
+{{12429297089971423631ull, 294648781287430ull}},
+{{1440131270244726193ull, 471438050059889ull}},
+{{4841453830937691278ull, 377150440047911ull}},
+{{183814250008242699ull, 301720352038329ull}},
+{{7672800429497008965ull, 482752563261326ull}},
+{{2448891528855696849ull, 386202050609061ull}},
+{{16716508482052198772ull, 308961640487248ull}},
+{{4610320682832056096ull, 494338624779598ull}},
+{{11066954175749465523ull, 395470899823678ull}},
+{{16232260970083393065ull, 316376719858942ull}},
+{{11214222293165787611ull, 506202751774308ull}},
+{{16350075464016450735ull, 404962201419446ull}},
+{{9390711556471250265ull, 323969761135557ull}},
+{{267743231386359131ull, 518351617816892ull}},
+{{11282241029334818274ull, 414681294253513ull}},
+{{16404490452951675266ull, 331745035402810ull}},
+{{7800440651013128809ull, 530792056644497ull}},
+{{17308398965036234017ull, 424633645315597ull}},
+{{6468021542545166567ull, 339706916252478ull}},
+{{6659485653330356185ull, 543531066003965ull}},
+{{5327588522664284948ull, 434824852803172ull}},
+{{15330117262357158928ull, 347859882242537ull}},
+{{9770792360803812992ull, 556575811588060ull}},
+{{7816633888643050393ull, 445260649270448ull}},
+{{13632004740398260961ull, 356208519416358ull}},
+{{18284301421802429415ull, 284966815533086ull}},
+{{3429440571690514802ull, 455946904852939ull}},
+{{6432901272094322165ull, 364757523882351ull}},
+{{1456972202933547408ull, 291806019105881ull}},
+{{13399201968919406823ull, 466889630569409ull}},
+{{14408710389877435782ull, 373511704455527ull}},
+{{4148270682418127979ull, 298809363564422ull}},
+{{10326581906610915090ull, 478094981703075ull}},
+{{8261265525288732072ull, 382475985362460ull}},
+{{6609012420230985657ull, 305980788289968ull}},
+{{6885071057627666729ull, 489569261263949ull}},
+{{9197405660844043706ull, 391655409011159ull}},
+{{11047273343417145288ull, 313324327208927ull}},
+{{2918242090499791168ull, 501318923534284ull}},
+{{6023942487141743258ull, 401055138827427ull}},
+{{15887200433939125576ull, 320844111061941ull}},
+{{18040823064818780275ull, 513350577699106ull}},
+{{10743309637113113897ull, 410680462159285ull}},
+{{8594647709690491117ull, 328544369727428ull}},
+{{10062087520762875465ull, 525670991563885ull}},
+{{8049670016610300372ull, 420536793251108ull}},
+{{13818433642772060944ull, 336429434600886ull}},
+{{14730796198951476864ull, 538287095361418ull}},
+{{716590514935450521ull, 430629676289135ull}},
+{{573272411948360417ull, 344503741031308ull}},
+{{15674631118085017960ull, 551205985650092ull}},
+{{5161007264984193722ull, 440964788520074ull}},
+{{7818154626729265300ull, 352771830816059ull}},
+{{9943872516125322563ull, 282217464652847ull}},
+{{1152800766832874809ull, 451547943444556ull}},
+{{15679635872433941140ull, 361238354755644ull}},
+{{16233057512689063235ull, 288990683804515ull}},
+{{7526147946592949560ull, 462385094087225ull}},
+{{6020918357274359648ull, 369908075269780ull}},
+{{4816734685819487718ull, 295926460215824ull}},
+{{15085473126795000996ull, 473482336345318ull}},
+{{1000332057210269827ull, 378785869076255ull}},
+{{800265645768215862ull, 303028695261004ull}},
+{{8659122662712966025ull, 484845912417606ull}},
+{{3237949315428462497ull, 387876729934085ull}},
+{{2590359452342769997ull, 310301383947268ull}},
+{{455226309006521673ull, 496482214315629ull}},
+{{4053529861947127662ull, 397185771452503ull}},
+{{10621521519041522776ull, 317748617162002ull}},
+{{2237039171498795148ull, 508397787459204ull}},
+{{5478980151940946442ull, 406718229967363ull}},
+{{11761881751036577800ull, 325374583973890ull}},
+{{372266727948972864ull, 520599334358225ull}},
+{{297813382359178291ull, 416479467486580ull}},
+{{238250705887342633ull, 333183573989264ull}},
+{{7759898758903568859ull, 533093718382822ull}},
+{{17275965451348586057ull, 426474974706257ull}},
+{{6442074731595048199ull, 341179979765006ull}},
+{{2928621941068256472ull, 545887967624010ull}},
+{{2342897552854605178ull, 436710374099208ull}},
+{{9253015671767504788ull, 349368299279366ull}},
+{{7426127445344187015ull, 558989278846986ull}},
+{{2251553141533439289ull, 447191423077589ull}},
+{{5490591327968661754ull, 357753138462071ull}},
+{{703124247633019080ull, 286202510769657ull}},
+{{4814347610954740852ull, 457924017231451ull}},
+{{162129274021882358ull, 366339213785161ull}},
+{{14887098678185147179ull, 293071371028128ull}},
+{{1683264996644773548ull, 468914193645006ull}},
+{{16104007256283460131ull, 375131354916004ull}},
+{{16572554619768678428ull, 300105083932803ull}},
+{{4379994503178423545ull, 480168134292486ull}},
+{{18261390861510380129ull, 384134507433988ull}},
+{{3541066244982573134ull, 307307605947191ull}},
+{{16733752436197847984ull, 491692169515505ull}},
+{{13387001948958278387ull, 393353735612404ull}},
+{{14398950373908533033ull, 314682988489923ull}},
+{{902227709802190913ull, 503492781583878ull}},
+{{8100479797325573377ull, 402794225267102ull}},
+{{17548430282086189671ull, 322235380213681ull}},
+{{2252046748144531211ull, 515576608341891ull}},
+{{16559032657483266262ull, 412461286673512ull}},
+{{5868528496502792363ull, 329969029338810ull}},
+{{9389645594404467781ull, 527950446942096ull}},
+{{3822367660781663902ull, 422360357553677ull}},
+{{14125940572851062091ull, 337888286042941ull}},
+{{15222807287077878699ull, 540621257668706ull}},
+{{8488897014920392636ull, 432497006134965ull}},
+{{6791117611936314109ull, 345997604907972ull}},
+{{14555136993840012897ull, 553596167852755ull}},
+{{11644109595072010318ull, 442876934282204ull}},
+{{13004636490799518577ull, 354301547425763ull}},
+{{17782406822123435508ull, 283441237940610ull}},
+{{10005106841687945197ull, 453505980704977ull}},
+{{625387843866535511ull, 362804784563982ull}},
+{{11568356719318959379ull, 290243827651185ull}},
+{{62626677200783390ull, 464390124241897ull}},
+{{11118147785986357682ull, 371512099393517ull}},
+{{1515820599305265499ull, 297209679514814ull}},
+{{9804010588372245445ull, 475535487223702ull}},
+{{464510841213975709ull, 380428389778962ull}},
+{{11439655117196911537ull, 304342711823169ull}},
+{{7235401743289327490ull, 486948338917071ull}},
+{{2098972579889551669ull, 389558671133657ull}},
+{{12747224508137372304ull, 311646936906925ull}},
+{{1948815139310244071ull, 498635099051081ull}},
+{{16316447370415836550ull, 398908079240864ull}},
+{{16742506711074579563ull, 319126463392691ull}},
+{{962569034525955038ull, 510602341428307ull}},
+{{11838101671846495000ull, 408481873142645ull}},
+{{9470481337477196000ull, 326785498514116ull}},
+{{7774072510479692954ull, 522856797622586ull}},
+{{2529909193641844040ull, 418285438098069ull}},
+{{5713276169655385555ull, 334628350478455ull}},
+{{9141241871448616888ull, 535405360765528ull}},
+{{14691691126642714157ull, 428324288612422ull}},
+{{4374655271830350679ull, 342659430889938ull}},
+{{3310099620186650764ull, 548255089423901ull}},
+{{17405474955116961904ull, 438604071539120ull}},
+{{13924379964093569523ull, 350883257231296ull}},
+{{14900310313065890590ull, 561413211570074ull}},
+{{15609597065194622795ull, 449130569256059ull}},
+{{16177026466897608559ull, 359304455404847ull}},
+{{5562923544034266201ull, 287443564323878ull}},
+{{5211328855712915599ull, 459909702918205ull}},
+{{4169063084570332479ull, 367927762334564ull}},
+{{7024599282398176306ull, 294342209867651ull}},
+{{3860661222353261444ull, 470947535788242ull}},
+{{14156575422108340125ull, 376758028630593ull}},
+{{257213893460941130ull, 301406422904475ull}},
+{{411542229537505808ull, 482250276647160ull}},
+{{329233783630004647ull, 385800221317728ull}},
+{{7642084656387824364ull, 308640177054182ull}},
+{{15916684264962429305ull, 493824283286691ull}},
+{{9043998597228033121ull, 395059426629353ull}},
+{{14613896507266247143ull, 316047541303482ull}},
+{{8624839152658354136ull, 505676066085572ull}},
+{{17967917766352414278ull, 404540852868457ull}},
+{{6995636583598110776ull, 323632682294766ull}},
+{{3814320904273156596ull, 517812291671626ull}},
+{{17808851982386166569ull, 414249833337300ull}},
+{{14247081585908933255ull, 331399866669840ull}},
+{{4348586463744741593ull, 530239786671745ull}},
+{{3478869170995793274ull, 424191829337396ull}},
+{{17540490595764275912ull, 339353463469916ull}},
+{{2239343250029469197ull, 542965541551867ull}},
+{{12859521044249306327ull, 434372433241493ull}},
+{{17666314464883265708ull, 347497946593194ull}},
+{{17198056699587494164ull, 555996714549111ull}},
+{{10069096544928085008ull, 444797371639289ull}},
+{{11744626050684378329ull, 355837897311431ull}},
+{{5706352025805592340ull, 284670317849145ull}},
+{{9130163241288947745ull, 455472508558632ull}},
+{{18372177037256889165ull, 364378006846905ull}},
+{{14697741629805511332ull, 291502405477524ull}},
+{{12448340163463087162ull, 466403848764039ull}},
+{{13648020945512380053ull, 373123079011231ull}},
+{{7229067941667993719ull, 298498463208985ull}},
+{{11566508706668789950ull, 477597541134376ull}},
+{{5563858150593121637ull, 382078032907501ull}},
+{{761737705732586986ull, 305662426326001ull}},
+{{12286826773397870148ull, 489059882121601ull}},
+{{6140112603976385795ull, 391247905697281ull}},
+{{1222741268439198313ull, 312998324557825ull}},
+{{1956386029502717301ull, 500797319292520ull}},
+{{1565108823602173840ull, 400637855434016ull}},
+{{16009482317849380365ull, 320510284347212ull}},
+{{10857776449591367292ull, 512816454955540ull}},
+{{8686221159673093833ull, 410253163964432ull}},
+{{18017023371964206036ull, 328202531171545ull}},
+{{10380493321433178042ull, 525124049874473ull}},
+{{15683092286630363080ull, 420099239899578ull}},
+{{1478427385078559494ull, 336079391919663ull}},
+{{17122879075093336484ull, 537727027071460ull}},
+{{13698303260074669187ull, 430181621657168ull}},
+{{18337340237543555996ull, 344145297325734ull}},
+{{18271697935843958624ull, 550632475721175ull}},
+{{14617358348675166899ull, 440505980576940ull}},
+{{11693886678940133519ull, 352404784461552ull}},
+{{1976411713668286169ull, 281923827569242ull}},
+{{6851607556611168194ull, 451078124110787ull}},
+{{16549332489514665525ull, 360862499288629ull}},
+{{16928814806353642743ull, 288689999430903ull}},
+{{4950010801714366449ull, 461903999089446ull}},
+{{270659826629582836ull, 369523199271557ull}},
+{{11284574305529397238ull, 295618559417245ull}},
+{{18055318888847035582ull, 472989695067592ull}},
+{{7065557481593807819ull, 378391756054074ull}},
+{{9341794800016956578ull, 302713404843259ull}},
+{{3878825235801399556ull, 484341447749215ull}},
+{{3103060188641119645ull, 387473158199372ull}},
+{{13550494595138626685ull, 309978526559497ull}},
+{{6923396093254161404ull, 495965642495196ull}},
+{{1849368059861418800ull, 396772513996157ull}},
+{{12547540892114866009ull, 317418011196925ull}},
+{{1629321353674233999ull, 507868817915081ull}},
+{{16060852341907028492ull, 406295054332064ull}},
+{{16538030688267533117ull, 325036043465651ull}},
+{{635407398034680725ull, 520057669545043ull}},
+{{7887023547911565226ull, 416046135636034ull}},
+{{9998967653071162504ull, 332836908508827ull}},
+{{1240952985946218714ull, 532539053614124ull}},
+{{4682111203498885294ull, 426031242891299ull}},
+{{7435037777541018558ull, 340824994313039ull}},
+{{828013999839898724ull, 545319990900863ull}},
+{{8041108829355739626ull, 436255992720690ull}},
+{{6432887063484591700ull, 349004794176552ull}},
+{{13981968116317257044ull, 558407670682483ull}},
+{{117528048828074666ull, 446726136545987ull}},
+{{11162068883288190702ull, 357380909236789ull}},
+{{12619003921372462885ull, 285904727389431ull}},
+{{12811708644712119969ull, 457447563823090ull}},
+{{10249366915769695975ull, 365958051058472ull}},
+{{820795903131936134ull, 292766440846778ull}},
+{{16070668703978739107ull, 468426305354844ull}},
+{{16545883777924901609ull, 374741044283875ull}},
+{{13236707022339921287ull, 299792835427100ull}},
+{{2731987162034322444ull, 479668536683361ull}},
+{{16942984988595099248ull, 383734829346688ull}},
+{{2486341546650348428ull, 306987863477351ull}},
+{{15046192918866288455ull, 491180581563761ull}},
+{{8347605520351120441ull, 392944465251009ull}},
+{{10367433231022806676ull, 314355572200807ull}},
+{{1830497910668849389ull, 502968915521292ull}},
+{{12532444772760810481ull, 402375132417033ull}},
+{{17404653447692469031ull, 321900105933626ull}},
+{{2022003813114578187ull, 515040169493803ull}},
+{{8996300679975483196ull, 412032135595042ull}},
+{{18265086988206117526ull, 329625708476033ull}},
+{{7088046292678326103ull, 527401133561654ull}},
+{{9359785848884571206ull, 421920906849323ull}},
+{{14866526308591477611ull, 337536725479458ull}},
+{{1650349205294902238ull, 540058760767134ull}},
+{{5009628178977832114ull, 432047008613707ull}},
+{{15075748987407996661ull, 345637606890965ull}},
+{{5674454306143243041ull, 553020171025545ull}},
+{{4539563444914594433ull, 442416136820436ull}},
+{{18389046014899316839ull, 353932909456348ull}},
+{{3643190367693722501ull, 283146327565079ull}},
+{{13207802217793776649ull, 453034124104126ull}},
+{{6876892959493110996ull, 362427299283301ull}},
+{{1812165552852578473ull, 289941839426641ull}},
+{{13967511328789856527ull, 463906943082625ull}},
+{{11174009063031885222ull, 371125554466100ull}},
+{{8939207250425508177ull, 296900443572880ull}},
+{{14302731600680813084ull, 475040709716608ull}},
+{{374138836318919498ull, 380032567773287ull}},
+{{11367357513280866568ull, 304026054218629ull}},
+{{7119725577023655539ull, 486441686749807ull}},
+{{16763826905844655401ull, 389153349399845ull}},
+{{13411061524675724320ull, 311322679519876ull}},
+{{14079000809997338266ull, 498116287231802ull}},
+{{3884503018514049967ull, 398493029785442ull}},
+{{14175648859036970943ull, 318794423828353ull}},
+{{544945286007691570ull, 510071078125366ull}},
+{{15193351487773794548ull, 408056862500292ull}},
+{{4775983560735214992ull, 326445490000234ull}},
+{{15020271326660164634ull, 522312784000374ull}},
+{{15705565876070042031ull, 417850227200299ull}},
+{{16253801515597943948ull, 334280181760239ull}},
+{{14938035980730979347ull, 534848290816383ull}},
+{{882382340359052508ull, 427878632653107ull}},
+{{11773952316512972976ull, 342302906122485ull}},
+{{391579632711205145ull, 547684649795977ull}},
+{{11381310150394695086ull, 438147719836781ull}},
+{{5415699305573845745ull, 350518175869425ull}},
+{{8665118888918153193ull, 560829081391080ull}},
+{{6932095111134522554ull, 448663265112864ull}},
+{{9235024903649528366ull, 358930612090291ull}},
+{{3698671108177712370ull, 287144489672233ull}},
+{{2228524958342429469ull, 459431183475573ull}},
+{{9161517596157764221ull, 367544946780458ull}},
+{{14707911706410032023ull, 294035957424366ull}},
+{{16153961100772230591ull, 470457531878986ull}},
+{{9233820065875874150ull, 376366025503189ull}},
+{{11076404867442609643ull, 301092820402551ull}},
+{{10343550158424354783ull, 481748512644082ull}},
+{{896142497255663180ull, 385398810115266ull}},
+{{15474309256772171836ull, 308319048092212ull}},
+{{10001499551867833646ull, 493310476947540ull}},
+{{8001199641494266916ull, 394648381558032ull}},
+{{17469006157421144503ull, 315718705246425ull}},
+{{9503665778164279588ull, 505149928394281ull}},
+{{3913583807789513347ull, 404119942715425ull}},
+{{3130867046231610678ull, 323295954172340ull}},
+{{5009387273970577085ull, 517273526675744ull}},
+{{7696858633918371991ull, 413818821340595ull}},
+{{6157486907134697593ull, 331055057072476ull}},
+{{2473281421931695502ull, 529688091315962ull}},
+{{13046671581771087371ull, 423750473052769ull}},
+{{14126686080158780220ull, 339000378442215ull}},
+{{4155953654544496737ull, 542400605507545ull}},
+{{3324762923635597389ull, 433920484406036ull}},
+{{17417205597876119204ull, 347136387524828ull}},
+{{5731436068150328788ull, 555418220039726ull}},
+{{895800039778352707ull, 444334576031781ull}},
+{{15474035290790323458ull, 355467660825424ull}},
+{{16068577047374169090ull, 284374128660339ull}},
+{{14641676831572939574ull, 454998605856543ull}},
+{{645295021032620689ull, 363998884685235ull}},
+{{516236016826096551ull, 291199107748188ull}},
+{{15583372885889395775ull, 465918572397100ull}},
+{{12466698308711516620ull, 372734857917680ull}},
+{{9973358646969213296ull, 298187886334144ull}},
+{{4889327390925010305ull, 477100618134631ull}},
+{{222113097998097920ull, 381680494507705ull}},
+{{177690478398478336ull, 305344395606164ull}},
+{{7663002394921385985ull, 488551032969862ull}},
+{{17198448360162839757ull, 390840826375889ull}},
+{{17448107502872182129ull, 312672661100711ull}},
+{{2091530301402119144ull, 500276257761139ull}},
+{{5362573055863605638ull, 400221006208911ull}},
+{{600709629948974187ull, 320176804967129ull}},
+{{8339833037402179346ull, 512282887947406ull}},
+{{2982517615179833154ull, 409826310357925ull}},
+{{2386014092143866523ull, 327861048286340ull}},
+{{3817622547430186437ull, 524577677258144ull}},
+{{6743446852686059473ull, 419662141806515ull}},
+{{5394757482148847578ull, 335729713445212ull}},
+{{12320960786180066448ull, 537167541512339ull}},
+{{13546117443685963482ull, 429734033209871ull}},
+{{7147545140206860462ull, 343787226567897ull}},
+{{15125421039072887063ull, 550059562508635ull}},
+{{12100336831258309650ull, 440047650006908ull}},
+{{17058967094490468367ull, 352038120005526ull}},
+{{9957824860850464370ull, 281630496004421ull}},
+{{8553822147876922346ull, 450608793607074ull}},
+{{10532406533043448200ull, 360487034885659ull}},
+{{12115274041176668883ull, 288389627908527ull}},
+{{4627043206915028920ull, 461423404653644ull}},
+{{7390983380273933459ull, 369138723722915ull}},
+{{5912786704219146767ull, 295310978978332ull}},
+{{13149807541492545151ull, 472497566365331ull}},
+{{6830497218452125798ull, 377998053092265ull}},
+{{5464397774761700638ull, 302398442473812ull}},
+{{12432385254360631344ull, 483837507958099ull}},
+{{13635257018230415399ull, 387070006366479ull}},
+{{14597554429326242642ull, 309656005093183ull}},
+{{1219994198470526288ull, 495449608149094ull}},
+{{4665344173518331354ull, 396359686519275ull}},
+{{3732275338814665083ull, 317087749215420ull}},
+{{5971640542103464133ull, 507340398744672ull}},
+{{15845358877908502276ull, 405872318995737ull}},
+{{5297589472842981174ull, 324697855196590ull}},
+{{8476143156548769879ull, 519516568314544ull}},
+{{10470263339980926226ull, 415613254651635ull}},
+{{8376210671984740981ull, 332490603721308ull}},
+{{9712588260433675246ull, 531984965954093ull}},
+{{15148768237830760843ull, 425587972763274ull}},
+{{15808363405006518998ull, 340470378210619ull}},
+{{14225335003784699427ull, 544752605136991ull}},
+{{7690919188285849219ull, 435802084109593ull}},
+{{13531432980112500021ull, 348641667287674ull}},
+{{10582246323954269064ull, 557826667660279ull}},
+{{12155145873905325575ull, 446261334128223ull}},
+{{17102814328608081106ull, 357009067302578ull}},
+{{2614205018660733915ull, 285607253842063ull}},
+{{493379215115263941ull, 456971606147301ull}},
+{{15152098631059852446ull, 365577284917840ull}},
+{{12121678904847881957ull, 292461827934272ull}},
+{{4637290988788969838ull, 467938924694836ull}},
+{{20483976289265547ull, 374351139755869ull}},
+{{3705735995773322761ull, 299480911804695ull}},
+{{5929177593237316417ull, 479169458887512ull}},
+{{15811388518815584103ull, 383335567110009ull}},
+{{16338459629794377606ull, 306668453688007ull}},
+{{11384140148703362877ull, 490669525900812ull}},
+{{1728614489478869655ull, 392535620720650ull}},
+{{1382891591583095724ull, 314028496576520ull}},
+{{2212626546532953159ull, 502445594522432ull}},
+{{12838147681452093496ull, 401956475617945ull}},
+{{10270518145161674797ull, 321565180494356ull}},
+{{9054131402774859029ull, 514504288790970ull}},
+{{7243305122219887223ull, 411603431032776ull}},
+{{2105295283033999455ull, 329282744826221ull}},
+{{14436518897080130098ull, 526852391721953ull}},
+{{481168673438373109ull, 421481913377563ull}},
+{{7763632568234519133ull, 337185530702050ull}},
+{{12421812109175230614ull, 539496849123280ull}},
+{{9937449687340184491ull, 431597479298624ull}},
+{{11639308564614057916ull, 345277983438899ull}},
+{{7554847259156761696ull, 552444773502239ull}},
+{{9733226622067319680ull, 441955818801791ull}},
+{{4097232482911945421ull, 353564655041433ull}},
+{{10656483615813376983ull, 282851724033146ull}},
+{{9671676155817582526ull, 452562758453034ull}},
+{{11426689739395976344ull, 362050206762427ull}},
+{{1762654162032960429ull, 289640165409942ull}},
+{{6509595473994647010ull, 463424264655907ull}},
+{{16275722823421448577ull, 370739411724725ull}},
+{{13020578258737158862ull, 296591529379780ull}},
+{{2386181140269902563ull, 474546447007649ull}},
+{{5598293726957832374ull, 379637157606119ull}},
+{{8167983796308176222ull, 303709726084895ull}},
+{{13068774074093081955ull, 485935561735832ull}},
+{{3076321629790644918ull, 388748449388666ull}},
+{{17218452562800157227ull, 310998759510932ull}},
+{{12792128841512610271ull, 497598015217492ull}},
+{{2855005443726267570ull, 398078412173994ull}},
+{{5973353169722924379ull, 318462729739195ull}},
+{{9557365071556679007ull, 509540367582712ull}},
+{{267194427761522559ull, 407632294066170ull}},
+{{213755542209218047ull, 326105835252936ull}},
+{{11410055311760479845ull, 521769336404697ull}},
+{{1749346619924563230ull, 417415469123758ull}},
+{{8778174925423471230ull, 333932375299006ull}},
+{{6666382251193733322ull, 534291800478410ull}},
+{{5333105800954986657ull, 427433440382728ull}},
+{{11645182270247809972ull, 341946752306182ull}},
+{{3874896373428854663ull, 547114803689892ull}},
+{{14167963542968814700ull, 437691842951913ull}},
+{{266324390149320790ull, 350153474361531ull}},
+{{11494165468464644234ull, 560245558978449ull}},
+{{12884681189513625711ull, 448196447182759ull}},
+{{13997093766352810892ull, 358557157746207ull}},
+{{3818977383598428067ull, 286845726196966ull}},
+{{17178410257983215877ull, 458953161915145ull}},
+{{13742728206386572701ull, 367162529532116ull}},
+{{7304833750367347838ull, 293730023625693ull}},
+{{7998385185845846217ull, 469968037801109ull}},
+{{10088056963418587297ull, 375974430240887ull}},
+{{691747941251049191ull, 300779544192710ull}},
+{{1106796706001678706ull, 481247270708336ull}},
+{{15642832623768984258ull, 384997816566668ull}},
+{{1446219654789456436ull, 307998253253335ull}},
+{{2313951447663130299ull, 492797205205336ull}},
+{{16608556417098145532ull, 394237764164268ull}},
+{{2218798689452785456ull, 315390211331415ull}},
+{{3550077903124456729ull, 504624338130264ull}},
+{{6529411137241475706ull, 403699470504211ull}},
+{{1534180095051270242ull, 322959576403369ull}},
+{{9833385781565853034ull, 516735322245390ull}},
+{{7866708625252682427ull, 413388257796312ull}},
+{{17361413344427876911ull, 330710606237049ull}},
+{{16710214906858872088ull, 529136969979279ull}},
+{{17057520740229007994ull, 423309575983423ull}},
+{{2577970147957475425ull, 338647660786739ull}},
+{{11503449866215781327ull, 541836257258782ull}},
+{{1824062263488804415ull, 433469005807026ull}},
+{{16216645069758684825ull, 346775204645620ull}},
+{{7499888037904344104ull, 554840327432993ull}},
+{{13378608059807295930ull, 443872261946394ull}},
+{{14392235262587747067ull, 355097809557115ull}},
+{{11513788210070197653ull, 284078247645692ull}},
+{{3664665877144674953ull, 454525196233108ull}},
+{{10310430331199560608ull, 363620156986486ull}},
+{{4558995450217738163ull, 290896125589189ull}},
+{{14673090349832201708ull, 465433800942702ull}},
+{{4359774650381940720ull, 372347040754162ull}},
+{{14555866164531283546ull, 297877632603329ull}},
+{{12221339419024322704ull, 476604212165327ull}},
+{{2398373905735637516ull, 381283369732262ull}},
+{{12986745568814240983ull, 305026695785809ull}},
+{{9710746465877054603ull, 488042713257295ull}},
+{{7768597172701643682ull, 390434170605836ull}},
+{{2525528923419404623ull, 312347336484669ull}},
+{{11419543906954868043ull, 499755738375470ull}},
+{{9135635125563894434ull, 399804590700376ull}},
+{{3619159285709205224ull, 319843672560301ull}},
+{{16858701301360459328ull, 511749876096481ull}},
+{{9797612226346457139ull, 409399900877185ull}},
+{{7838089781077165711ull, 327519920701748ull}},
+{{8851594834981554815ull, 524031873122797ull}},
+{{18149322312210974822ull, 419225498498237ull}},
+{{7140760220284959211ull, 335380398798590ull}},
+{{11425216352455934738ull, 536608638077744ull}},
+{{12829521896706658113ull, 429286910462195ull}},
+{{10263617517365326490ull, 343429528369756ull}},
+{{9043090398300701739ull, 549487245391610ull}},
+{{7234472318640561391ull, 439589796313288ull}},
+{{13166275484396269759ull, 351671837050630ull}},
+{{2619296701324479999ull, 562674939281009ull}},
+{{5784786175801494322ull, 450139951424807ull}},
+{{15695875384866926427ull, 360111961139845ull}},
+{{12556700307893541142ull, 288089568911876ull}},
+{{12712022863145845180ull, 460943310259002ull}},
+{{2790920661032855498ull, 368754648207202ull}},
+{{13300782973052015368ull, 295003718565761ull}},
+{{13902555127399403942ull, 472005949705218ull}},
+{{53997657693792184ull, 377604759764175ull}},
+{{43198126155033747ull, 302083807811340ull}},
+{{69117001848053996ull, 483334092498144ull}},
+{{3744642416220353520ull, 386667273998515ull}},
+{{2995713932976282816ull, 309333819198812ull}},
+{{8482491107503962829ull, 494934110718099ull}},
+{{10475341700745080586ull, 395947288574479ull}},
+{{12069622175337974792ull, 316757830859583ull}},
+{{15622046665798849344ull, 506812529375333ull}},
+{{1429590888413348506ull, 405450023500267ull}},
+{{12211719154956409774ull, 324360018800213ull}},
+{{15849401833188345316ull, 518976030080341ull}},
+{{8990172651808765929ull, 415180824064273ull}},
+{{14570835750930833390ull, 332144659251418ull}},
+{{1177244313037871484ull, 531431454802270ull}},
+{{941795450430297187ull, 425145163841816ull}},
+{{15510831619311879043ull, 340116131073452ull}},
+{{10059935331931365176ull, 544185809717524ull}},
+{{11737297080287002464ull, 435348647774019ull}},
+{{13079186478971512294ull, 348278918219215ull}},
+{{2479954292644868055ull, 557246269150745ull}},
+{{1983963434115894444ull, 445797015320596ull}},
+{{16344566006260356848ull, 356637612256476ull}},
+{{9386303990266375155ull, 285310089805181ull}},
+{{7639388754942379602ull, 456496143688290ull}},
+{{6111511003953903681ull, 365196914950632ull}},
+{{15957255247388853915ull, 292157531960505ull}},
+{{7084864322112614648ull, 467452051136809ull}},
+{{9357240272432002041ull, 373961640909447ull}},
+{{107094588461780986ull, 299169312727558ull}},
+{{14928746600506490871ull, 478670900364092ull}},
+{{4564299650921372051ull, 382936720291274ull}},
+{{7340788535479007964ull, 306349376233019ull}},
+{{677215212540681772ull, 490159001972831ull}},
+{{15299167429000186711ull, 392127201578264ull}},
+{{15928682757942059692ull, 313701761262611ull}},
+{{18107194783223474860ull, 501922818020178ull}},
+{{3417709382353048919ull, 401538254416143ull}},
+{{10112865135366259781ull, 321230603532914ull}},
+{{5112537772360284681ull, 513968965652663ull}},
+{{11468727847372048391ull, 411175172522130ull}},
+{{9174982277897638713ull, 328940138017704ull}},
+{{3611925200410490971ull, 526304220828327ull}},
+{{13957586604554123746ull, 421043376662661ull}},
+{{7476720468901388674ull, 336834701330129ull}},
+{{894706306016490908ull, 538935522128207ull}},
+{{11783811489038923696ull, 431148417702565ull}},
+{{9427049191231138957ull, 344918734162052ull}},
+{{325883447002181039ull, 551869974659284ull}},
+{{3950055572343655154ull, 441495979727427ull}},
+{{14228090902100655093ull, 353196783781941ull}},
+{{7693123906938613751ull, 282557427025553ull}},
+{{8619649436359871678ull, 452091883240885ull}},
+{{6895719549087897343ull, 361673506592708ull}},
+{{12895273268754138520ull, 289338805274166ull}},
+{{13253739600522800987ull, 462942088438666ull}},
+{{6913642865676330466ull, 370353670750933ull}},
+{{12909611922024885019ull, 296282936600746ull}},
+{{13276681445755995384ull, 474052698561194ull}},
+{{14310693971346706631ull, 379242158848955ull}},
+{{11448555177077365304ull, 303393727079164ull}},
+{{7249641839098053518ull, 485429963326663ull}},
+{{13178411100762263460ull, 388343970661330ull}},
+{{10542728880609810768ull, 310675176529064ull}},
+{{5800319764749966260ull, 497080282446503ull}},
+{{12018953441283793654ull, 397664225957202ull}},
+{{2236465123543214277ull, 318131380765762ull}},
+{{7267693012411053167ull, 509010209225219ull}},
+{{9503503224670752856ull, 407208167380175ull}},
+{{7602802579736602285ull, 325766533904140ull}},
+{{12164484127578563656ull, 521226454246624ull}},
+{{13420936116804761248ull, 416981163397299ull}},
+{{14426097708185719322ull, 333584930717839ull}},
+{{12013709888871419945ull, 533735889148543ull}},
+{{16989665540580956603ull, 426988711318834ull}},
+{{17281081247206675605ull, 341590969055067ull}},
+{{12892334736563039676ull, 546545550488108ull}},
+{{17692565418734252387ull, 437236440390486ull}},
+{{10464703520245491586ull, 349789152312389ull}},
+{{5675479188167055569ull, 559662643699823ull}},
+{{11919080980017465101ull, 447730114959858ull}},
+{{16913962413497792727ull, 358184091967886ull}},
+{{9841821116056323858ull, 286547273574309ull}},
+{{4678867341464387204ull, 458475637718895ull}},
+{{3743093873171509763ull, 366780510175116ull}},
+{{17751870357504849103ull, 293424408140092ull}},
+{{13645597313040117273ull, 469479053024148ull}},
+{{18295175479915914465ull, 375583242419318ull}},
+{{3568093939707000602ull, 300466593935455ull}},
+{{5708950303531200963ull, 480746550296728ull}},
+{{11945857872308781417ull, 384597240237382ull}},
+{{2177988668363204487ull, 307677792189906ull}},
+{{14552828313606858149ull, 492284467503849ull}},
+{{15331611465627396843ull, 393827574003079ull}},
+{{15954637987243827797ull, 315062059202463ull}},
+{{3391327891138662537ull, 504099294723942ull}},
+{{13781108757136660999ull, 403279435779153ull}},
+{{18403584635193149445ull, 322623548623322ull}},
+{{14688340157341397820ull, 516197677797316ull}},
+{{8061323311131207933ull, 412958142237853ull}},
+{{13827756278388786992ull, 330366513790282ull}},
+{{7367014786454417895ull, 528586422064452ull}},
+{{16961658273389265286ull, 422869137651561ull}},
+{{9879977803969501905ull, 338295310121249ull}},
+{{4739918042125472079ull, 541272496193999ull}},
+{{7481283248442287987ull, 433017996955199ull}},
+{{9674375413495740712ull, 346414397564159ull}},
+{{4410954217367454170ull, 554263036102655ull}},
+{{3528763373893963336ull, 443410428882124ull}},
+{{6512359513857080992ull, 354728343105699ull}},
+{{8899236425827575117ull, 283782674484559ull}},
+{{3170731837098389218ull, 454052279175295ull}},
+{{2536585469678711374ull, 363241823340236ull}},
+{{16786663634710610392ull, 290593458672188ull}},
+{{4722568927085514688ull, 464949533875502ull}},
+{{14846101585894142720ull, 371959627100401ull}},
+{{8187532453973403853ull, 297567701680321ull}},
+{{5721354296873625518ull, 476108322688514ull}},
+{{8266432252240810738ull, 380886658150811ull}},
+{{2923796987050738267ull, 304709326520649ull}},
+{{12056772808765001874ull, 487534922433038ull}},
+{{17024115876495822145ull, 390027937946430ull}},
+{{13619292701196657716ull, 312022350357144ull}},
+{{10722821877688921376ull, 499235760571431ull}},
+{{4888908687409226778ull, 399388608457145ull}},
+{{3911126949927381422ull, 319510886765716ull}},
+{{17325849564109541245ull, 511217418825145ull}},
+{{13860679651287632996ull, 408973935060116ull}},
+{{7399194906288196074ull, 327179148048093ull}},
+{{8149363035319203395ull, 523486636876949ull}},
+{{10208839242997273039ull, 418789309501559ull}},
+{{11856420209139728754ull, 335031447601247ull}},
+{{4212877075655924714ull, 536050316161996ull}},
+{{18127696919492381064ull, 428840252929596ull}},
+{{10812808720851994528ull, 343072202343677ull}},
+{{2543098694395549952ull, 548915523749884ull}},
+{{5723827770258350285ull, 439132418999907ull}},
+{{15647108660432411197ull, 351305935199925ull}},
+{{6588629782982306300ull, 562089496319881ull}},
+{{1581555011643934717ull, 449671597055905ull}},
+{{1265244009315147773ull, 359737277644724ull}},
+{{4701544022194028542ull, 287789822115779ull}},
+{{14901168064994266314ull, 460463715385246ull}},
+{{8231585637253502728ull, 368370972308197ull}},
+{{17653314954028533152ull, 294696777846557ull}},
+{{13487908667478011750ull, 471514844554492ull}},
+{{3411629304498588754ull, 377211875643594ull}},
+{{6418652258340781326ull, 301769500514875ull}},
+{{10269843613345250122ull, 482831200823800ull}},
+{{8215874890676200097ull, 386264960659040ull}},
+{{6572699912540960078ull, 309011968527232ull}},
+{{14205668674807446448ull, 494419149643571ull}},
+{{7675186125104046835ull, 395535319714857ull}},
+{{17208195344308968438ull, 316428255771885ull}},
+{{9086368477184797884ull, 506285209235017ull}},
+{{18337141225973569277ull, 405028167388013ull}},
+{{3601666536553124452ull, 324022533910411ull}},
+{{16830712902710730093ull, 518436054256657ull}},
+{{6085872692684763428ull, 414748843405326ull}},
+{{1179349339405900419ull, 331799074724261ull}},
+{{12955005387275171640ull, 530878519558817ull}},
+{{2985306680336316666ull, 424702815647054ull}},
+{{6077594159010963656ull, 339762252517643ull}},
+{{6034801839675631526ull, 543619604028229ull}},
+{{8517190286482415544ull, 434895683222583ull}},
+{{14192449858669753082ull, 347916546578066ull}},
+{{15329222144387784284ull, 556666474524906ull}},
+{{8574028900768317104ull, 445333179619925ull}},
+{{6859223120614653683ull, 356266543695940ull}},
+{{5487378496491722946ull, 285013234956752ull}},
+{{12469154409128667038ull, 456021175930803ull}},
+{{17354021156786754277ull, 364816940744642ull}},
+{{6504519295945582775ull, 291853552595714ull}},
+{{17785928502996753086ull, 466965684153142ull}},
+{{6850045172913581823ull, 373572547322514ull}},
+{{9169384953072775781ull, 298858037858011ull}},
+{{7292318295432620604ull, 478172860572818ull}},
+{{13212552265829917129ull, 382538288458254ull}},
+{{14259390627405844027ull, 306030630766603ull}},
+{{678932115397888504ull, 489649009226566ull}},
+{{15300540951285952096ull, 391719207381252ull}},
+{{4861735131544941030ull, 313375365905002ull}},
+{{11468125025213815971ull, 501400585448003ull}},
+{{16553197649654873423ull, 401120468358402ull}},
+{{5863860490240078092ull, 320896374686722ull}},
+{{13071525599126035271ull, 513434199498755ull}},
+{{10457220479300828217ull, 410747359599004ull}},
+{{12055125198182572897ull, 328597887679203ull}},
+{{15598851502350206312ull, 525756620286725ull}},
+{{12479081201880165049ull, 420605296229380ull}},
+{{9983264961504132039ull, 336484236983504ull}},
+{{4905177494180880293ull, 538374779173607ull}},
+{{14992188439570435204ull, 430699823338885ull}},
+{{11993750751656348163ull, 344559858671108ull}},
+{{15500652387908246738ull, 551295773873773ull}},
+{{1332475466100866421ull, 441036619099019ull}},
+{{4755329187622603460ull, 352829295279215ull}},
+{{3804263350098082768ull, 282263436223372ull}},
+{{9776170174898842752ull, 451621497957395ull}},
+{{7820936139919074202ull, 361297198365916ull}},
+{{2567400097193349038ull, 289037758692733ull}},
+{{418491340767448138ull, 462460413908373ull}},
+{{7713490702097779157ull, 369968331126698ull}},
+{{13549490191162043972ull, 295974664901358ull}},
+{{17989835491117360032ull, 473559463842173ull}},
+{{3323821948668157056ull, 378847571073739ull}},
+{{6348406373676435968ull, 303078056858991ull}},
+{{2778752568398476902ull, 484924890974386ull}},
+{{16980397313686422814ull, 387939912779508ull}},
+{{2516271406723407282ull, 310351930223607ull}},
+{{7715383065499361974ull, 496563088357771ull}},
+{{2482957637657579256ull, 397250470686217ull}},
+{{13054412554351794374ull, 317800376548973ull}},
+{{17197711272220960676ull, 508480602478357ull}},
+{{6379471388292947894ull, 406784481982686ull}},
+{{1414228295892447992ull, 325427585586149ull}},
+{{9641462902911737434ull, 520684136937838ull}},
+{{15091867951813210594ull, 416547309550270ull}},
+{{12073494361450568475ull, 333237847640216ull}},
+{{11938893348837088914ull, 533180556224346ull}},
+{{5861765864327760808ull, 426544444979477ull}},
+{{15757459135687939616ull, 341235555983581ull}},
+{{17833236987616882739ull, 545976889573730ull}},
+{{14266589590093506191ull, 436781511658984ull}},
+{{15102620486816715276ull, 349425209327187ull}},
+{{9406797519939103149ull, 559080334923500ull}},
+{{7525438015951282519ull, 447264267938800ull}},
+{{6020350412761026015ull, 357811414351040ull}},
+{{4816280330208820812ull, 286249131480832ull}},
+{{11395397343076023623ull, 457998610369331ull}},
+{{5426969059718908575ull, 366398888295465ull}},
+{{4341575247775126860ull, 293119110636372ull}},
+{{10635869211182113299ull, 468990577018195ull}},
+{{8508695368945690639ull, 375192461614556ull}},
+{{3117607480414642188ull, 300153969291645ull}},
+{{4988171968663427501ull, 480246350866632ull}},
+{{15058584019156472970ull, 384197080693305ull}},
+{{12046867215325178376ull, 307357664554644ull}},
+{{8206941100294554433ull, 491772263287431ull}},
+{{2876204065493733223ull, 393417810629945ull}},
+{{2300963252394986578ull, 314734248503956ull}},
+{{14749587648057709495ull, 503574797606329ull}},
+{{15489018933188077919ull, 402859838085063ull}},
+{{1323168702324731366ull, 322287870468051ull}},
+{{13185116367945301155ull, 515660592748881ull}},
+{{6858744279614330601ull, 412528474199105ull}},
+{{5486995423691464480ull, 330022779359284ull}},
+{{16157890307390163815ull, 528036446974854ull}},
+{{16615661060654041375ull, 422429157579883ull}},
+{{2224482404297502131ull, 337943326063907ull}},
+{{7248520661617913732ull, 540709321702251ull}},
+{{2109467714552420663ull, 432567457361801ull}},
+{{16444969430609577823ull, 346053965889440ull}},
+{{7865207015265772901ull, 553686345423105ull}},
+{{6292165612212618321ull, 442949076338484ull}},
+{{8723081304512004980ull, 354359261070787ull}},
+{{18046511487835334953ull, 283487408856629ull}},
+{{17806371936310804956ull, 453579854170607ull}},
+{{6866399919564823318ull, 362863883336486ull}},
+{{1803771120909948331ull, 290291106669189ull}},
+{{10264731422939737977ull, 464465770670702ull}},
+{{833087508867969735ull, 371572616536562ull}},
+{{11734516451320106757ull, 297258093229249ull}},
+{{7707179877886439842ull, 475612949166799ull}},
+{{9855092717051062197ull, 380490359333439ull}},
+{{11573422988382760081ull, 304392287466751ull}},
+{{11138779151928595483ull, 487027659946802ull}},
+{{1532325692059055740ull, 389622127957442ull}},
+{{12293906997872975561ull, 311697702365953ull}},
+{{15980902381854850575ull, 498716323785525ull}},
+{{12784721905483880460ull, 398973059028420ull}},
+{{10227777524387104368ull, 319178447222736ull}},
+{{8985746409535546343ull, 510685515556378ull}},
+{{14567294757112257721ull, 408548412445102ull}},
+{{4275138176205985530ull, 326838729956082ull}},
+{{10529569896671487171ull, 522941967929731ull}},
+{{4734307102595279414ull, 418353574343785ull}},
+{{3787445682076223531ull, 334682859475028ull}},
+{{2370564276580047327ull, 535492575160045ull}},
+{{1896451421264037861ull, 428394060128036ull}},
+{{16274556395978871582ull, 342715248102428ull}},
+{{3903197345114732592ull, 548344396963886ull}},
+{{17879953135059427366ull, 438675517571108ull}},
+{{3235916063821810923ull, 350940414056887ull}},
+{{8866814516856807801ull, 561504662491019ull}},
+{{10782800428227356564ull, 449203729992815ull}},
+{{8626240342581885251ull, 359362983994252ull}},
+{{17969038718291239170ull, 287490387195401ull}},
+{{2925020246072610410ull, 459984619512643ull}},
+{{9718713826341908974ull, 367987695610114ull}},
+{{11464319875815437503ull, 294390156488091ull}},
+{{10964214171820879358ull, 471024250380946ull}},
+{{5082022522714793163ull, 376819400304757ull}},
+{{15133664462397565500ull, 301455520243805ull}},
+{{5767119066126553184ull, 482328832390089ull}},
+{{8303044067643152871ull, 385863065912071ull}},
+{{2953086439372611973ull, 308690452729657ull}},
+{{8414287117738089480ull, 493904724367451ull}},
+{{3042080879448561261ull, 395123779493961ull}},
+{{17191059962526490302ull, 316099023595168ull}},
+{{5369603051590922544ull, 505758437752270ull}},
+{{4295682441272738035ull, 404606750201816ull}},
+{{18193941211985831721ull, 323685400161452ull}},
+{{14352910680209689460ull, 517896640258324ull}},
+{{15171677358909661891ull, 414317312206659ull}},
+{{15826690701869639836ull, 331453849765327ull}},
+{{10565309864023782445ull, 530326159624524ull}},
+{{12141596705960936279ull, 424260927699619ull}},
+{{13402626179510659347ull, 339408742159695ull}},
+{{2997457813507503339ull, 543053987455513ull}},
+{{9776663880289823317ull, 434443189964410ull}},
+{{7821331104231858654ull, 347554551971528ull}},
+{{8824780952029063523ull, 556087283154445ull}},
+{{7059824761623250819ull, 444869826523556ull}},
+{{1958510994556690332ull, 355895861218845ull}},
+{{1566808795645352265ull, 284716688975076ull}},
+{{13574940517258294594ull, 455546702360121ull}},
+{{7170603599064725352ull, 364437361888097ull}},
+{{16804529323477511251ull, 291549889510477ull}},
+{{12129851658596376709ull, 466479823216764ull}},
+{{13393230141619011690ull, 373183858573411ull}},
+{{7025235298553299029ull, 298547086858729ull}},
+{{172330033459547477ull, 477675338973967ull}},
+{{11205910470993368951ull, 382140271179173ull}},
+{{16343426006278515807ull, 305712216943338ull}},
+{{4013388721594163353ull, 489139547109342ull}},
+{{14278757421501061652ull, 391311637687473ull}},
+{{354959492975118352ull, 313049310149979ull}},
+{{7946632818244010009ull, 500878896239966ull}},
+{{2667957439853297684ull, 400703116991973ull}},
+{{9513063581366458794ull, 320562493593578ull}},
+{{11531552915444423747ull, 512899989749725ull}},
+{{9225242332355538998ull, 410319991799780ull}},
+{{7380193865884431198ull, 328255993439824ull}},
+{{740263741189358947ull, 525209589503719ull}},
+{{4281559807693397481ull, 420167671602975ull}},
+{{3425247846154717985ull, 336134137282380ull}},
+{{5480396553847548776ull, 537814619651808ull}},
+{{11763014872561859667ull, 430251695721446ull}},
+{{5721063083307577410ull, 344201356577157ull}},
+{{12843049748034034180ull, 550722170523451ull}},
+{{6585090983685317021ull, 440577736418761ull}},
+{{1578723972206343293ull, 352462189135009ull}},
+{{4952327992506984958ull, 281969751308007ull}},
+{{11613073602753086256ull, 451151602092811ull}},
+{{5601110067460558681ull, 360921281674249ull}},
+{{8170236868710357268ull, 288737025339399ull}},
+{{2004332545710840660ull, 461979240543039ull}},
+{{5292814851310582851ull, 369583392434431ull}},
+{{544903066306555957ull, 295666713947545ull}},
+{{871844906090489532ull, 473066742316072ull}},
+{{11765522369098122595ull, 378453393852857ull}},
+{{2033720265794677430ull, 302762715082286ull}},
+{{14321998869497214857ull, 484420344131657ull}},
+{{4078901466113951239ull, 387536275305326ull}},
+{{18020516431858802284ull, 310029020244260ull}},
+{{10386082217264532039ull, 496046432390817ull}},
+{{930168144327804985ull, 396837145912654ull}},
+{{4433483330204154311ull, 317469716730123ull}},
+{{3404224513584736575ull, 507951546768197ull}},
+{{13791426055093520229ull, 406361237414557ull}},
+{{3654443214590995537ull, 325088989931646ull}},
+{{16915155587571323829ull, 520142383890633ull}},
+{{2464078025831328093ull, 416113907112507ull}},
+{{13039308864890793444ull, 332891125690005ull}},
+{{2416150110115717895ull, 532625801104009ull}},
+{{5622268902834484639ull, 426100640883207ull}},
+{{15565861566493318681ull, 340880512706565ull}},
+{{6458634432679758274ull, 545408820330505ull}},
+{{5166907546143806619ull, 436327056264404ull}},
+{{7822874851656955618ull, 349061645011523ull}},
+{{8827250947909218666ull, 558498632018437ull}},
+{{18129847202553105902ull, 446798905614749ull}},
+{{18193226576784395045ull, 357439124491799ull}},
+{{18243930076169426359ull, 285951299593439ull}},
+{{18122241677645351205ull, 457522079349503ull}},
+{{3429746897890549994ull, 366017663479603ull}},
+{{10122495147796260642ull, 292814130783682ull}},
+{{1438596977506375734ull, 468502609253892ull}},
+{{12218924026230831557ull, 374802087403113ull}},
+{{17153836850468485892ull, 299841669922490ull}},
+{{8999394887040025811ull, 479746671875985ull}},
+{{7199515909632020649ull, 383797337500788ull}},
+{{13138310357189437166ull, 307037870000630ull}},
+{{2574552497793547849ull, 491260592001009ull}},
+{{5748990812976748602ull, 393008473600807ull}},
+{{15667239094607129851ull, 314406778880645ull}},
+{{6620838477661856147ull, 503050846209033ull}},
+{{12675368411613305564ull, 402440676967226ull}},
+{{6450945914548734128ull, 321952541573781ull}},
+{{2942815833794153958ull, 515124066518050ull}},
+{{2354252667035323166ull, 412099253214440ull}},
+{{1883402133628258533ull, 329679402571552ull}},
+{{6702792228547123976ull, 527487044114483ull}},
+{{12740931412321519827ull, 421989635291586ull}},
+{{6503396315115305539ull, 337591708233269ull}},
+{{17784131733668309508ull, 540146733173230ull}},
+{{14227305386934647607ull, 432117386538584ull}},
+{{15071193124289628408ull, 345693909230867ull}},
+{{9356513739895764161ull, 553110254769388ull}},
+{{14863908621400431975ull, 442488203815510ull}},
+{{11891126897120345580ull, 353990563052408ull}},
+{{16891599147180097110ull, 283192450441926ull}},
+{{1201116932294783114ull, 453107920707083ull}},
+{{8339591175319647138ull, 362486336565666ull}},
+{{2982324125513807387ull, 289989069252533ull}},
+{{1082369786080181496ull, 463982510804053ull}},
+{{8244593458347965843ull, 371186008643242ull}},
+{{17663721210904103644ull, 296948806914593ull}},
+{{6125861048995103892ull, 475118091063350ull}},
+{{4900688839196083113ull, 380094472850680ull}},
+{{3920551071356866490ull, 304075578280544ull}},
+{{13651579343654807031ull, 486520925248870ull}},
+{{10921263474923845625ull, 389216740199096ull}},
+{{5047661965197166177ull, 311373392159277ull}},
+{{11765607959057376206ull, 498197427454843ull}},
+{{16791183996729721611ull, 398557941963874ull}},
+{{17122296012125687612ull, 318846353571099ull}},
+{{16327627175175369210ull, 510154165713759ull}},
+{{16751450554882205691ull, 408123332571007ull}},
+{{6022462814421943906ull, 326498666056806ull}},
+{{2257242873591289604ull, 522397865690890ull}},
+{{1805794298873031683ull, 417918292552712ull}},
+{{12512681883324156316ull, 334334634042169ull}},
+{{8952244569092919136ull, 534935414467471ull}},
+{{3472446840532424986ull, 427948331573977ull}},
+{{13846003916651670958ull, 342358665259181ull}},
+{{14774908637158852887ull, 547773864414690ull}},
+{{11819926909727082310ull, 438219091531752ull}},
+{{2077243898297845201ull, 350575273225402ull}},
+{{7012939052018462645ull, 560920437160643ull}},
+{{12989048871098590763ull, 448736349728514ull}},
+{{14080587911620782933ull, 358989079782811ull}},
+{{7575121514554716023ull, 287191263826249ull}},
+{{1052147979061814668ull, 459506022121999ull}},
+{{4531067197991362057ull, 367604817697599ull}},
+{{7314202573134999969ull, 294083854158079ull}},
+{{634677672790268981ull, 470534166652927ull}},
+{{11575788582457946154ull, 376427333322341ull}},
+{{5571282051224446600ull, 301141866657873ull}},
+{{5224702467217204237ull, 481826986652597ull}},
+{{15247808417999494359ull, 385461589322077ull}},
+{{4819549104915774841ull, 308369271457662ull}},
+{{11400627382607150069ull, 493390834332259ull}},
+{{12809850720827630378ull, 394712667465807ull}},
+{{2869182947178283656ull, 315770133972646ull}},
+{{15658739159710984820ull, 505232214356233ull}},
+{{1458944883543056886ull, 404185771484987ull}},
+{{12235202351060176478ull, 323348617187989ull}},
+{{8508277317470551396ull, 517357787500783ull}},
+{{14185319483460261763ull, 413886230000626ull}},
+{{7658906772026299087ull, 331108984000501ull}},
+{{4875553205758257894ull, 529774374400802ull}},
+{{14968489008832337284ull, 423819499520641ull}},
+{{8285442392323959504ull, 339055599616513ull}},
+{{9567359012976424884ull, 542488959386421ull}},
+{{3964538395639229584ull, 433991167509137ull}},
+{{14239677160737114637ull, 347192934007309ull}},
+{{11715437012953652449ull, 555508694411695ull}},
+{{9372349610362921959ull, 444406955529356ull}},
+{{3808530873548427244ull, 355525564423485ull}},
+{{3046824698838741795ull, 284420451538788ull}},
+{{1185570703400076549ull, 455072722462061ull}},
+{{15705851821687702532ull, 364058177969648ull}},
+{{1496635013124431056ull, 291246542375719ull}},
+{{9773313650482910336ull, 465994467801150ull}},
+{{7818650920386328269ull, 372795574240920ull}},
+{{6254920736309062615ull, 298236459392736ull}},
+{{2629175548610679538ull, 477178335028378ull}},
+{{9482038068372364277ull, 381742668022702ull}},
+{{206932825214070775ull, 305394134418162ull}},
+{{4020441335084423563ull, 488630615069059ull}},
+{{6905701882809449174ull, 390904492055247ull}},
+{{16592607950473290309ull, 312723593644197ull}},
+{{11790777461789623201ull, 500357749830716ull}},
+{{5743273154689788238ull, 400286199864573ull}},
+{{11973316153235651236ull, 320228959891658ull}},
+{{15467957030435131655ull, 512366335826653ull}},
+{{1306319180122374355ull, 409893068661323ull}},
+{{8423752973581720130ull, 327914454929058ull}},
+{{9788655942988841885ull, 524663127886493ull}},
+{{15209622383874894154ull, 419730502309194ull}},
+{{15857046721841825647ull, 335784401847355ull}},
+{{6924530681237369419ull, 537255042955769ull}},
+{{9228973359731805858ull, 429804034364615ull}},
+{{7383178687785444686ull, 343843227491692ull}},
+{{15502434715198621822ull, 550149163986707ull}},
+{{5023250142675076811ull, 440119331189366ull}},
+{{329251299398151125ull, 352095464951493ull}},
+{{7642098669002341547ull, 281676371961194ull}},
+{{1159311426178015505ull, 450682195137911ull}},
+{{15684844399910053697ull, 360545756110328ull}},
+{{1479829075702311988ull, 288436604888263ull}},
+{{17125121780091340474ull, 461498567821220ull}},
+{{13700097424073072379ull, 369198854256976ull}},
+{{7270729124516547580ull, 295359083405581ull}},
+{{4254468969742655482ull, 472574533448930ull}},
+{{3403575175794124385ull, 378059626759144ull}},
+{{6412208955377209831ull, 302447701407315ull}},
+{{10259534328603535730ull, 483916322251704ull}},
+{{11896976277624738907ull, 387133057801363ull}},
+{{16896278651583611772ull, 309706446241090ull}},
+{{8587301768824227220ull, 495530313985745ull}},
+{{6869841415059381776ull, 396424251188596ull}},
+{{1806524317305595097ull, 317139400950877ull}},
+{{6579787722430862479ull, 507423041521403ull}},
+{{12642527807428510630ull, 405938433217122ull}},
+{{2735324616458987857ull, 324750746573698ull}},
+{{687170571592470248ull, 519601194517917ull}},
+{{11617782901499707168ull, 415680955614333ull}},
+{{16672923950683586381ull, 332544764491466ull}},
+{{851236617900365947ull, 532071623186347ull}},
+{{11749035738546023727ull, 425657298549077ull}},
+{{2020530961352998335ull, 340525838839262ull}},
+{{6922198352906707660ull, 544841342142819ull}},
+{{9227107497067276451ull, 435873073714255ull}},
+{{7381685997653821161ull, 348698458971404ull}},
+{{742651152020382888ull, 557917534354247ull}},
+{{11662167365842037280ull, 446334027483397ull}},
+{{1951036263189809178ull, 357067221986718ull}},
+{{8939526640035667988ull, 285653777589374ull}},
+{{3235196179831337812ull, 457046044142999ull}},
+{{6277505758606980573ull, 365636835314399ull}},
+{{8711353421627494781ull, 292509468251519ull}},
+{{2870119030378260681ull, 468015149202431ull}},
+{{17053490483270249837ull, 374412119361944ull}},
+{{17332141201358110193ull, 299529695489555ull}},
+{{9284681848463424693ull, 479247512783289ull}},
+{{11117094293512650077ull, 383398010226631ull}},
+{{5204326620068209739ull, 306718408181305ull}},
+{{8326922592109135582ull, 490749453090088ull}},
+{{14040235703171129112ull, 392599562472070ull}},
+{{11232188562536903290ull, 314079649977656ull}},
+{{10592804070575224617ull, 502527439964250ull}},
+{{8474243256460179694ull, 402021951971400ull}},
+{{6779394605168143755ull, 321617561577120ull}},
+{{10847031368269030008ull, 514588098523392ull}},
+{{1298927465131403360ull, 411670478818714ull}},
+{{4728490786847033011ull, 329336383054971ull}},
+{{186887629471432172ull, 526938212887954ull}},
+{{3838858918319056060ull, 421550570310363ull}},
+{{10449784764139065495ull, 337240456248290ull}},
+{{16719655622622504792ull, 539584729997264ull}},
+{{17065073312839914156ull, 431667783997811ull}},
+{{9962709835530021002ull, 345334227198249ull}},
+{{4872289292622302634ull, 552534763517199ull}},
+{{7587180248839752430ull, 442027810813759ull}},
+{{9759093013813712267ull, 353622248651007ull}},
+{{428576781567149167ull, 282897798920806ull}},
+{{11753769294733169637ull, 452636478273289ull}},
+{{13092364250528446033ull, 362109182618631ull}},
+{{6784542585680846503ull, 289687346094905ull}},
+{{10855268137089354405ull, 463499753751848ull}},
+{{16062912139155304170ull, 370799803001478ull}},
+{{1782283267098512367ull, 296639842401183ull}},
+{{17609048486325261080ull, 474623747841892ull}},
+{{6708541159576388217ull, 379698998273514ull}},
+{{9056181742403020897ull, 303759198618811ull}},
+{{7111193158361012789ull, 486014717790098ull}},
+{{13067652156172630878ull, 388811774232078ull}},
+{{17832819354421925348ull, 311049419385662ull}},
+{{13775115708107439265ull, 497679071017060ull}},
+{{11020092566485951412ull, 398143256813648ull}},
+{{16194771682672581776ull, 318514605450918ull}},
+{{3775541803824668902ull, 509623368721470ull}},
+{{3020433443059735122ull, 407698694977176ull}},
+{{17173742013415429390ull, 326158955981740ull}},
+{{9031243147755135408ull, 521854329570785ull}},
+{{7224994518204108327ull, 417483463656628ull}},
+{{13158693244047107308ull, 333986770925302ull}},
+{{6296513931507730400ull, 534378833480484ull}},
+{{8726559959948094643ull, 427503066784387ull}},
+{{18049294412184206684ull, 342002453427509ull}},
+{{17810824615268999725ull, 547203925484015ull}},
+{{14248659692215199780ull, 437763140387212ull}},
+{{4020230124288339177ull, 350210512309770ull}},
+{{6432368198861342684ull, 560336819695632ull}},
+{{16213941003314805117ull, 448269455756505ull}},
+{{12971152802651844093ull, 358615564605204ull}},
+{{14066271056863385598ull, 286892451684163ull}},
+{{369940802529955017ull, 459027922694662ull}},
+{{11363999086249694983ull, 367222338155729ull}},
+{{12780548083741666310ull, 293777870524583ull}},
+{{16759528119244755773ull, 470044592839333ull}},
+{{2339576051170073649ull, 376035674271467ull}},
+{{12939707285161789888ull, 300828539417173ull}},
+{{17014182841516953498ull, 481325663067477ull}},
+{{6232648643729742152ull, 385060530453982ull}},
+{{16054165359209524691ull, 308048424363185ull}},
+{{7239920501025687890ull, 492877478981097ull}},
+{{16859982845046281282ull, 394301983184877ull}},
+{{6109288646553204379ull, 315441586547902ull}},
+{{13464210649227037330ull, 504706538476643ull}},
+{{18150066148865450510ull, 403765230781314ull}},
+{{18209401733834270731ull, 323012184625051ull}},
+{{3309601070941460908ull, 516819495400083ull}},
+{{10026378486236989373ull, 413455596320066ull}},
+{{4331753974247681175ull, 330764477056053ull}},
+{{3241457544054379557ull, 529223163289685ull}},
+{{2593166035243503645ull, 423378530631748ull}},
+{{9453230457678623562ull, 338702824505398ull}},
+{{11435819917543887377ull, 541924519208637ull}},
+{{1769958304551289255ull, 433539615366910ull}},
+{{1415966643641031404ull, 346831692293528ull}},
+{{17022941888793291540ull, 554930707669644ull}},
+{{17307702325776543555ull, 443944566135715ull}},
+{{13846161860621234844ull, 355155652908572ull}},
+{{3698231859013167228ull, 284124522326858ull}},
+{{2227822159679157243ull, 454599235722973ull}},
+{{9160955357227146440ull, 363679388578378ull}},
+{{14707461915265537799ull, 290943510862702ull}},
+{{8774543805457219185ull, 465509617380324ull}},
+{{10708983859107685671ull, 372407693904259ull}},
+{{12256535902028058860ull, 297926155123407ull}},
+{{4853062184277252884ull, 476681848197452ull}},
+{{14950496191647533277ull, 381345478557961ull}},
+{{8271048138576116298ull, 305076382846369ull}},
+{{2165630577496055107ull, 488122212554191ull}},
+{{16489899720964485379ull, 390497770043352ull}},
+{{5813222147287767656ull, 312398216034682ull}},
+{{12990504250402338574ull, 499837145655491ull}},
+{{6703054585579960536ull, 399869716524393ull}},
+{{12741141297947789075ull, 319895773219514ull}},
+{{9317779632490731550ull, 511833237151223ull}},
+{{14832921335476405887ull, 409466589720978ull}},
+{{798290624155393740ull, 327573271776783ull}},
+{{16034660257616271276ull, 524117234842852ull}},
+{{5449030576609196375ull, 419293787874282ull}},
+{{15427270905513088069ull, 335435030299425ull}},
+{{6236889375111389295ull, 536696048479081ull}},
+{{1300162685347201113ull, 429356838783265ull}},
+{{1040130148277760890ull, 343485471026612ull}},
+{{5353557051986327748ull, 549576753642579ull}},
+{{7972194456330972521ull, 439661402914063ull}},
+{{13756453194548598663ull, 351729122331250ull}},
+{{3563581037568206246ull, 562766595730001ull}},
+{{17608260089022206289ull, 450213276584000ull}},
+{{14086608071217765031ull, 360170621267200ull}},
+{{11269286456974212025ull, 288136497013760ull}},
+{{18030858331158739240ull, 461018395222016ull}},
+{{10735337850185081069ull, 368814716177613ull}},
+{{15966967909631885501ull, 295051772942090ull}},
+{{7100404581701465186ull, 472082836707345ull}},
+{{5680323665361172149ull, 377666269365876ull}},
+{{854910117547027396ull, 302133015492701ull}},
+{{12435902632300974803ull, 483412824788321ull}},
+{{6259373291098869519ull, 386730259830657ull}},
+{{16075545077104826585ull, 309384207864525ull}},
+{{7274128049658170920ull, 495014732583241ull}},
+{{2129953624984626413ull, 396011786066593ull}},
+{{9082660529471521777ull, 316809428853274ull}},
+{{3464210402928703873ull, 506895086165239ull}},
+{{6460717137084873422ull, 405516068932191ull}},
+{{1479224894925988414ull, 324412855145753ull}},
+{{17124155090849222756ull, 519060568233204ull}},
+{{17388672887421288528ull, 415248454586563ull}},
+{{2842891865711299852ull, 332198763669251ull}},
+{{15616673429363810734ull, 531518021870801ull}},
+{{8803989928749138264ull, 425214417496641ull}},
+{{3353843128257400288ull, 340171533997313ull}},
+{{1676800190469930137ull, 544274454395701ull}},
+{{16098835411343585403ull, 435419563516560ull}},
+{{12879068329074868322ull, 348335650813248ull}},
+{{16917160511777878992ull, 557337041301197ull}},
+{{6155030779938482547ull, 445869633040958ull}},
+{{12302722253434606684ull, 356695706432766ull}},
+{{6152828988005775024ull, 285356565146213ull}},
+{{6155177566067329716ull, 456570504233941ull}},
+{{1234793238111953449ull, 365256403387153ull}},
+{{8366532219973383406ull, 292205122709722ull}},
+{{17075800366699323773ull, 467528196335555ull}},
+{{13660640293359459018ull, 374022557068444ull}},
+{{14617861049429477537ull, 299218045654755ull}},
+{{4941833605377612444ull, 478748873047609ull}},
+{{7642815699044000278ull, 382999098438087ull}},
+{{17182299003460931192ull, 306399278750469ull}},
+{{16423631961311758938ull, 490238846000751ull}},
+{{9449556754307496827ull, 392191076800601ull}},
+{{3870296588704087139ull, 313752861440481ull}},
+{{17260520986152270392ull, 502004578304769ull}},
+{{17497765603663726636ull, 401603662643815ull}},
+{{13998212482930981309ull, 321282930115052ull}},
+{{7639744713721928802ull, 514052688184084ull}},
+{{9801144585719453365ull, 411242150547267ull}},
+{{462218039091742045ull, 328993720437814ull}},
+{{8118246492030607919ull, 526389952700502ull}},
+{{17562643637850217305ull, 421111962160401ull}},
+{{10360766095538263520ull, 336889569728321ull}},
+{{9198528123377400987ull, 539023311565314ull}},
+{{11048171313443831112ull, 431218649252251ull}},
+{{5149188236013154567ull, 344974919401801ull}},
+{{860003548137226661ull, 551959871042882ull}},
+{{11756049282735512298ull, 441567896834305ull}},
+{{9404839426188409838ull, 353254317467444ull}},
+{{11213220355692638194ull, 282603453973955ull}},
+{{17941152569108221110ull, 452165526358328ull}},
+{{3284875611060845918ull, 361732421086663ull}},
+{{10006598118332497381ull, 289385936869330ull}},
+{{16010556989331995810ull, 463017498990928ull}},
+{{1740399147239865678ull, 370413999192743ull}},
+{{8771016947275713189ull, 296331199354194ull}},
+{{2965580671415410133ull, 474129918966711ull}},
+{{17129859796099969399ull, 379303935173368ull}},
+{{2635841392654244550ull, 303443148138695ull}},
+{{4217346228246791280ull, 485509037021912ull}},
+{{14441923426823163993ull, 388407229617529ull}},
+{{15242887556200441518ull, 310725783694023ull}},
+{{2252527201469244489ull, 497161253910438ull}},
+{{9180719390659216238ull, 397729003128350ull}},
+{{7344575512527372990ull, 318183202502680ull}},
+{{11751320820043796785ull, 509093124004288ull}},
+{{16779754285518858074ull, 407274499203430ull}},
+{{13423803428415086459ull, 325819599362744ull}},
+{{10410039041238407365ull, 521311358980391ull}},
+{{4638682418248815569ull, 417049087184313ull}},
+{{11089643564082873101ull, 333639269747450ull}},
+{{17743429702532596963ull, 533822831595920ull}},
+{{14194743762026077570ull, 427058265276736ull}},
+{{7666446194878951733ull, 341646612221389ull}},
+{{1198267467580591803ull, 546634579554223ull}},
+{{8337311603548294089ull, 437307663643378ull}},
+{{14048546912322455917ull, 349846130914702ull}},
+{{7720279800748288175ull, 559753809463524ull}},
+{{9865572655340540863ull, 447803047570819ull}},
+{{11581806939014343014ull, 358242438056655ull}},
+{{9265445551211474411ull, 286593950445324ull}},
+{{3756666437712628088ull, 458550320712519ull}},
+{{6694681964912012793ull, 366840256570015ull}},
+{{5355745571929610235ull, 293472205256012ull}},
+{{12258541729829286699ull, 469555528409619ull}},
+{{13496182198605339682ull, 375644422727695ull}},
+{{10796945758884271746ull, 300515538182156ull}},
+{{9896415584731014147ull, 480824861091450ull}},
+{{7917132467784811318ull, 384659888873160ull}},
+{{6333705974227849054ull, 307727911098528ull}},
+{{6444580744022648163ull, 492364657757645ull}},
+{{5155664595218118531ull, 393891726206116ull}},
+{{435182861432584501ull, 315113380964893ull}},
+{{15453687837259776495ull, 504181409543828ull}},
+{{1294903825582090226ull, 403345127635063ull}},
+{{8414620689949492827ull, 322676102108050ull}},
+{{13463393103919188524ull, 516281763372880ull}},
+{{10770714483135350819ull, 413025410698304ull}},
+{{12305920401250190978ull, 330420328558643ull}},
+{{16000123827258395243ull, 528672525693829ull}},
+{{16489447876548626517ull, 422938020555063ull}},
+{{2123511857013170244ull, 338350416444051ull}},
+{{14465665415446803360ull, 541360666310481ull}},
+{{7883183517615532365ull, 433088533048385ull}},
+{{6306546814092425892ull, 346470826438708ull}},
+{{6401126087805971104ull, 554353322301933ull}},
+{{12499598499728597530ull, 443482657841546ull}},
+{{6310329985040967700ull, 354786126273237ull}},
+{{16116310432258505130ull, 283828901018589ull}},
+{{14718050247387877238ull, 454126241629743ull}},
+{{706393753684570821ull, 363300993303795ull}},
+{{565115002947656657ull, 290640794643036ull}},
+{{11972230448941981621ull, 465025271428857ull}},
+{{2199086729669764650ull, 372020217143086ull}},
+{{16516664642703453013ull, 297616173714468ull}},
+{{4290570539874062881ull, 476185877943150ull}},
+{{3432456431899250305ull, 380948702354520ull}},
+{{2745965145519400244ull, 304758961883616ull}},
+{{15461590677056771360ull, 487614339013785ull}},
+{{12369272541645417088ull, 390091471211028ull}},
+{{17274115662800154317ull, 312073176968822ull}},
+{{12881189801512605614ull, 499317083150116ull}},
+{{6615603026468174168ull, 399453666520093ull}},
+{{12671180050658359981ull, 319562933216074ull}},
+{{9205841636827645000ull, 511300693145719ull}},
+{{11054022124204026323ull, 409040554516575ull}},
+{{8843217699363221058ull, 327232443613260ull}},
+{{14149148318981153694ull, 523571909781216ull}},
+{{7629969840443012632ull, 418857527824973ull}},
+{{13482673501838230752ull, 335086022259978ull}},
+{{17882928788199258880ull, 536137635615965ull}},
+{{14306343030559407104ull, 428910108492772ull}},
+{{4066376794963705036ull, 343128086794218ull}},
+{{2816854057200017735ull, 549004938870749ull}},
+{{5942832060501924511ull, 439203951096599ull}},
+{{8443614463143449932ull, 351363160877279ull}},
+{{2441736696803788922ull, 562181057403647ull}},
+{{13021435801668762107ull, 449744845922917ull}},
+{{3038451011851189039ull, 359795876738334ull}},
+{{6120109624222861555ull, 287836701390667ull}},
+{{13481524213498488811ull, 460538722225067ull}},
+{{3406521741314970402ull, 368430977780054ull}},
+{{6414566207793886645ull, 294744782224043ull}},
+{{6573957117728308309ull, 471591651558469ull}},
+{{8948514508924556970ull, 377273321246775ull}},
+{{7158811607139645576ull, 301818656997420ull}},
+{{11454098571423432922ull, 482909851195872ull}},
+{{1784581227654925691ull, 386327880956698ull}},
+{{8806362611607761199ull, 309062304765358ull}},
+{{10400831363830507596ull, 494499687624573ull}},
+{{15699362720548226723ull, 395599750099658ull}},
+{{1491443732212850409ull, 316479800079727ull}},
+{{6075658786282470977ull, 506367680127563ull}},
+{{12239224658509797428ull, 405094144102050ull}},
+{{9791379726807837942ull, 324075315281640ull}},
+{{15666207562892540708ull, 518520504450624ull}},
+{{16222314865055942890ull, 414816403560499ull}},
+{{16667200706786664635ull, 331853122848399ull}},
+{{15599474686632932446ull, 530964996557439ull}},
+{{16168928564048256280ull, 424771997245951ull}},
+{{9245794036496694701ull, 339817597796761ull}},
+{{7414572828910890875ull, 543708156474818ull}},
+{{13310355892612533346ull, 434966525179854ull}},
+{{14337633528831937000ull, 347973220143883ull}},
+{{804120757679637262ull, 556757152230214ull}},
+{{4332645420885620132ull, 445405721784171ull}},
+{{18223511595676137399ull, 356324577427336ull}},
+{{10889460461798999596ull, 285059661941869ull}},
+{{6355090294652668384ull, 456095459106991ull}},
+{{1394723420980224384ull, 364876367285593ull}},
+{{8494476366268000153ull, 291901093828474ull}},
+{{2523115741803069276ull, 467041750125559ull}},
+{{5707841408184365744ull, 373633400100447ull}},
+{{15634319570773223564ull, 298906720080357ull}},
+{{10257516054269516411ull, 478250752128572ull}},
+{{827315213931792482ull, 382600601702858ull}},
+{{8040549800629254632ull, 306080481362286ull}},
+{{5486182051522986765ull, 489728770179658ull}},
+{{11767643270702210058ull, 391783016143726ull}},
+{{5724765801819857723ull, 313426412914981ull}},
+{{1780927653427951711ull, 501482260663970ull}},
+{{1424742122742361369ull, 401185808531176ull}},
+{{15897188957161530388ull, 320948646824940ull}},
+{{6988758257748897005ull, 513517834919905ull}},
+{{5591006606199117604ull, 410814267935924ull}},
+{{8162154099701204406ull, 328651414348739ull}},
+{{1991400115296196080ull, 525842262957983ull}},
+{{8971817721720777511ull, 420673810366386ull}},
+{{3488105362634711685ull, 336539048293109ull}},
+{{12959666209699359343ull, 538462477268974ull}},
+{{14057081782501397798ull, 430769981815179ull}},
+{{14935014240743028561ull, 344615985452143ull}},
+{{1759929896737383759ull, 551385576723430ull}},
+{{1407943917389907007ull, 441108461378744ull}},
+{{4815703948653835929ull, 352886769102995ull}},
+{{3852563158923068743ull, 282309415282396ull}},
+{{17232147498502640958ull, 451695064451833ull}},
+{{2717671554576381797ull, 361356051561467ull}},
+{{13242183687886836407ull, 289084841249173ull}},
+{{17498145085877027929ull, 462535745998677ull}},
+{{6619818439217801696ull, 370028596798942ull}},
+{{16363901195599972327ull, 296022877439153ull}},
+{{4046149024508493784ull, 473636603902646ull}},
+{{17994314478574436320ull, 378909283122116ull}},
+{{10706102768117638732ull, 303127426497693ull}},
+{{13440415614246311649ull, 485003882396309ull}},
+{{14441681306138959642ull, 388003105917047ull}},
+{{4174647415427347067ull, 310402484733638ull}},
+{{2990087049941844985ull, 496643975573821ull}},
+{{17149464898921117280ull, 397315180459056ull}},
+{{10030223104394983501ull, 317852144367245ull}},
+{{16048356967031973602ull, 508563430987592ull}},
+{{5459987944141758235ull, 406850744790074ull}},
+{{8057339170055316911ull, 325480595832059ull}},
+{{1823696227862776089ull, 520768953331295ull}},
+{{1458956982290220871ull, 416615162665036ull}},
+{{15924560844799817989ull, 333292130132028ull}},
+{{3343204463228246844ull, 533267408211246ull}},
+{{17431958829550238768ull, 426613926568996ull}},
+{{10256218248898280691ull, 341291141255197ull}},
+{{1652553939269607813ull, 546065826008316ull}},
+{{16079438410383327543ull, 436852660806652ull}},
+{{5484853098822841388ull, 349482128645322ull}},
+{{12465113772858456544ull, 559171405832515ull}},
+{{9972091018286765235ull, 447337124666012ull}},
+{{598975185145591542ull, 357869699732810ull}},
+{{479180148116473233ull, 286295759786248ull}},
+{{15524083495953998467ull, 458073215657996ull}},
+{{8729917982021288450ull, 366458572526397ull}},
+{{18051980829842761729ull, 293166858021117ull}},
+{{14125774068780777475ull, 469066972833788ull}},
+{{232572810798891010ull, 375253578267031ull}},
+{{14943453507606754101ull, 300202862613624ull}},
+{{12841479167945075592ull, 480324580181799ull}},
+{{13962532149097970797ull, 384259664145439ull}},
+{{14859374534020286960ull, 307407731316351ull}},
+{{16396301624948638490ull, 491852370106162ull}},
+{{5738343670475090146ull, 393481896084930ull}},
+{{4590674936380072117ull, 314785516867944ull}},
+{{14723777527691936033ull, 503656826988710ull}},
+{{11779022022153548826ull, 402925461590968ull}},
+{{16801915247206659707ull, 322340369272774ull}},
+{{15815017951304924563ull, 515744590836439ull}},
+{{16341363175785849973ull, 412595672669151ull}},
+{{9383741725886769655ull, 330076538135321ull}},
+{{7635289131935010802ull, 528122461016514ull}},
+{{9797580120289918965ull, 422497968813211ull}},
+{{4148715281490024849ull, 337998375050569ull}},
+{{14016642079867860405ull, 540797400080910ull}},
+{{11213313663894288324ull, 432637920064728ull}},
+{{16349348560599251305ull, 346110336051782ull}},
+{{11401562437991160796ull, 553776537682852ull}},
+{{1742552320909107990ull, 443021230146282ull}},
+{{12462088300953017362ull, 354416984117025ull}},
+{{9969670640762413889ull, 283533587293620ull}},
+{{15951473025219862223ull, 453653739669792ull}},
+{{5382480790692069132ull, 362922991735834ull}},
+{{7995333447295565629ull, 290338393388667ull}},
+{{16481882330414815329ull, 464541429421867ull}},
+{{5806808234848031617ull, 371633143537494ull}},
+{{8334795402620335617ull, 297306514829995ull}},
+{{13335672644192536987ull, 475690423727992ull}},
+{{3289840485870208943ull, 380552338982394ull}},
+{{6321221203438077478ull, 304441871185915ull}},
+{{10113953925500923964ull, 487106993897464ull}},
+{{11780511955142649495ull, 389685595117971ull}},
+{{5735060749372209272ull, 311748476094377ull}},
+{{12865446013737445159ull, 498797561751003ull}},
+{{17671054440473776774ull, 399038049400802ull}},
+{{6758145922895200772ull, 319230439520642ull}},
+{{14502382291374231559ull, 510768703233027ull}},
+{{4223208203615564601ull, 408614962586422ull}},
+{{14446613007118182650ull, 326891970069137ull}},
+{{8357185552421450948ull, 523027152110620ull}},
+{{6685748441937160758ull, 418421721688496ull}},
+{{1659249938807818283ull, 334737377350797ull}},
+{{6344148716834419577ull, 535579803761275ull}},
+{{5075318973467535661ull, 428463843009020ull}},
+{{4060255178774028529ull, 342771074407216ull}},
+{{17564454730264176616ull, 548433719051545ull}},
+{{14051563784211341293ull, 438746975241236ull}},
+{{7551902212627162711ull, 350997580192989ull}},
+{{1014997095977729368ull, 561596128308783ull}},
+{{8190695306266004141ull, 449276902647026ull}},
+{{2863207430270892990ull, 359421522117621ull}},
+{{17047961203184355684ull, 287537217694096ull}},
+{{1451296221901596833ull, 460059548310555ull}},
+{{1161036977521277466ull, 368047638648444ull}},
+{{4618178396758932296ull, 294438110918755ull}},
+{{7389085434814291674ull, 471100977470008ull}},
+{{13289965977335253985ull, 376880781976006ull}},
+{{6942623967126292865ull, 301504625580805ull}},
+{{11108198347402068584ull, 482407400929288ull}},
+{{16265256307405475514ull, 385925920743430ull}},
+{{13012205045924380411ull, 308740736594744ull}},
+{{9751481629253277688ull, 493985178551591ull}},
+{{4111836488660711827ull, 395188142841273ull}},
+{{10668166820412390108ull, 316150514273018ull}},
+{{13379718097917913850ull, 505840822836829ull}},
+{{14393123293076241403ull, 404672658269463ull}},
+{{446452190235262153ull, 323738126615571ull}},
+{{11782369948602150414ull, 517981002584913ull}},
+{{16804593588365540978ull, 414384802067930ull}},
+{{13443674870692432782ull, 331507841654344ull}},
+{{10441833348882161482ull, 530412546646951ull}},
+{{4664117864363818862ull, 424330037317561ull}},
+{{41945476749144767ull, 339464029854049ull}},
+{{7445810392282452273ull, 543142447766478ull}},
+{{13335345943309782465ull, 434513958213182ull}},
+{{3289579125164005326ull, 347611166570546ull}},
+{{16331373044488139491ull, 556177866512873ull}},
+{{1997051991364780623ull, 444942293210299ull}},
+{{5286990407833734821ull, 355953834568239ull}},
+{{7918941141008898180ull, 284763067654591ull}},
+{{5291608196130416442ull, 455620908247346ull}},
+{{543937742162422831ull, 364496726597877ull}},
+{{11503196637955669234ull, 291597381278301ull}},
+{{11026416991245250128ull, 466555810045282ull}},
+{{1442435963512379456ull, 373244648036226ull}},
+{{15911344029777544858ull, 298595718428980ull}},
+{{7011406373934520156ull, 477753149486369ull}},
+{{9298473913889526448ull, 382202519589095ull}},
+{{7438779131111621158ull, 305762015671276ull}},
+{{4523348980294773207ull, 489219225074042ull}},
+{{14686725628461549535ull, 391375380059233ull}},
+{{681334058543508659ull, 313100304047387ull}},
+{{4779483308411524177ull, 500960486475819ull}},
+{{7512935461471129665ull, 400768389180655ull}},
+{{6010348369176903732ull, 320614711344524ull}},
+{{16995255020166866618ull, 512983538151238ull}},
+{{2528157571907762324ull, 410386830520991ull}},
+{{16779921316493851152ull, 328309464416792ull}},
+{{12090478847422520551ull, 525295143066868ull}},
+{{17051080707421837087ull, 420236114453494ull}},
+{{17330213380679379993ull, 336188891562795ull}},
+{{9281597335377456373ull, 537902226500473ull}},
+{{14803975497785785745ull, 430321781200378ull}},
+{{775133954002897626ull, 344257424960303ull}},
+{{15997609585372277495ull, 550811879936484ull}},
+{{16487436483039732319ull, 440649503949187ull}},
+{{5811251556947965209ull, 352519603159350ull}},
+{{4649001245558372167ull, 282015682527480ull}},
+{{7438401992893395467ull, 451225092043968ull}},
+{{13329419223798537020ull, 360980073635174ull}},
+{{14352884193780739939ull, 288784058908139ull}},
+{{11896568265823452933ull, 462054494253023ull}},
+{{16895952242142582993ull, 369643595402418ull}},
+{{2448715349488335425ull, 295714876321935ull}},
+{{3917944559181336680ull, 473143802115096ull}},
+{{17891750906312710636ull, 378515041692076ull}},
+{{10624051910308258186ull, 302812033353661ull}},
+{{9619785427009392451ull, 484499253365858ull}},
+{{15074525971091334607ull, 387599402692686ull}},
+{{8370271962131157363ull, 310079522154149ull}},
+{{2324388695184120811ull, 496127235446639ull}},
+{{5548859770889206972ull, 396901788357311ull}},
+{{749739001969455254ull, 317521430685849ull}},
+{{8578280032634949053ull, 508034289097358ull}},
+{{14241321655591779889ull, 406427431277886ull}},
+{{7703708509731513588ull, 325141945022309ull}},
+{{1257887171344690771ull, 520227112035695ull}},
+{{1006309737075752617ull, 416181689628556ull}},
+{{15562443048628243386ull, 332945351702844ull}},
+{{13831862433579458449ull, 532712562724551ull}},
+{{7376141132121656436ull, 426170050179641ull}},
+{{2211564090955414825ull, 340936040143713ull}},
+{{18295897804496305013ull, 545497664229940ull}},
+{{14636718243597044011ull, 436398131383952ull}},
+{{4330676965393814562ull, 349118505107162ull}},
+{{10618431959372013623ull, 558589608171459ull}},
+{{12184094382239521221ull, 446871686537167ull}},
+{{2368577876307796330ull, 357497349229734ull}},
+{{5584211115788147387ull, 285997879383787ull}},
+{{12624086600002946143ull, 457596607014059ull}},
+{{13788618094744267238ull, 366077285611247ull}},
+{{3652196846311593144ull, 292861828488998ull}},
+{{2154166139356638707ull, 468578925582397ull}},
+{{12791379355711041935ull, 374863140465917ull}},
+{{2854405855085012902ull, 299890512372734ull}},
+{{11945746997619841289ull, 479824819796374ull}},
+{{13245946412837783355ull, 383859855837099ull}},
+{{14286105945012137007ull, 307087884669679ull}},
+{{11789723067793688242ull, 491340615471487ull}},
+{{2053080824751129947ull, 393072492377190ull}},
+{{1642464659800903957ull, 314457993901752ull}},
+{{6317292270423356655ull, 503132790242803ull}},
+{{12432531445822505970ull, 402506232194242ull}},
+{{2567327527174184130ull, 322004985755394ull}},
+{{11486421672962515254ull, 515207977208630ull}},
+{{9189137338370012203ull, 412166381766904ull}},
+{{11040658685437920086ull, 329733105413523ull}},
+{{13975705081958761815ull, 527572968661637ull}},
+{{3801866436083188805ull, 422058374929310ull}},
+{{3041493148866551044ull, 337646699943448ull}},
+{{1177040223444571347ull, 540234719909517ull}},
+{{12009678622981388047ull, 432187775927613ull}},
+{{16986440527868931084ull, 345750220742090ull}},
+{{8731560770880738119ull, 553200353187345ull}},
+{{6985248616704590495ull, 442560282549876ull}},
+{{1898850078621762073ull, 354048226039901ull}},
+{{16276475321865050951ull, 283238580831920ull}},
+{{7595616441274529906ull, 453181729331073ull}},
+{{13455190782503444571ull, 362545383464858ull}},
+{{18142850255486576303ull, 290036306771886ull}},
+{{3203118705585149823ull, 464058090835019ull}},
+{{6251843779210030181ull, 371246472668015ull}},
+{{5001475023368024145ull, 296997178134412ull}},
+{{11691708852130748956ull, 475195485015059ull}},
+{{13042715896446509488ull, 380156388012047ull}},
+{{3055475087673386944ull, 304125110409638ull}},
+{{1199411325535508787ull, 486600176655421ull}},
+{{15716924319396048322ull, 389280141324336ull}},
+{{8884190640774928334ull, 311424113059469ull}},
+{{3146658581014154366ull, 498278580895151ull}},
+{{17274722123778964785ull, 398622864716120ull}},
+{{13819777699023171828ull, 318898291772896ull}},
+{{14732946688953254279ull, 510237266836634ull}},
+{{15475706165904513746ull, 408189813469307ull}},
+{{5001867303239790350ull, 326551850775446ull}},
+{{624290055699843915ull, 522482961240714ull}},
+{{4188780859301785455ull, 417986368992571ull}},
+{{18108419946409069657ull, 334389095194056ull}},
+{{3148030211061139188ull, 535022552310491ull}},
+{{17275819427816552643ull, 428018041848392ull}},
+{{6441957912769421468ull, 342414433478714ull}},
+{{17685830289914894996ull, 547863093565942ull}},
+{{6769966602448095350ull, 438290474852754ull}},
+{{9105322096700386603ull, 350632379882203ull}},
+{{10879166539978708242ull, 561011807811525ull}},
+{{8703333231982966594ull, 448809446249220ull}},
+{{6962666585586373275ull, 359047556999376ull}},
+{{1880784453727188297ull, 287238045599501ull}},
+{{14077301570189232244ull, 459580872959201ull}},
+{{7572492441409475472ull, 367664698367361ull}},
+{{2368645138385670055ull, 294131758693889ull}},
+{{11168529850900892734ull, 470610813910222ull}},
+{{1556126251236893541ull, 376488651128178ull}},
+{{8623598630473335479ull, 301190920902542ull}},
+{{17487106623499247090ull, 481905473444067ull}},
+{{6610987669315577025ull, 385524378755254ull}},
+{{8978138950194371943ull, 308419503004203ull}},
+{{10675673505569084786ull, 493471204806725ull}},
+{{8540538804455267829ull, 394776963845380ull}},
+{{6832431043564214263ull, 315821571076304ull}},
+{{18310587299186563468ull, 505314513722086ull}},
+{{10959121024607340451ull, 404251610977669ull}},
+{{12456645634427782684ull, 323401288782135ull}},
+{{1483888941374900678ull, 517442062051417ull}},
+{{12255157597325651512ull, 413953649641133ull}},
+{{17182823707344341856ull, 331162919712906ull}},
+{{1667076228557574707ull, 529860671540651ull}},
+{{16091056241813701059ull, 423888537232520ull}},
+{{12872844993450960847ull, 339110829786016ull}},
+{{13217854360037716709ull, 542577327657626ull}},
+{{6884934673288263044ull, 434061862126101ull}},
+{{1818598923888700112ull, 347249489700881ull}},
+{{13977804722447651149ull, 555599183521409ull}},
+{{14871592592700031242ull, 444479346817127ull}},
+{{4518576444676204347ull, 355583477453702ull}},
+{{14682907599966694447ull, 284466781962961ull}},
+{{16113954530462890469ull, 455146851140738ull}},
+{{1823117180144581406ull, 364117480912591ull}},
+{{16215889003083306417ull, 291293984730072ull}},
+{{11188027145965648975ull, 466070375568116ull}},
+{{5261072902030608857ull, 372856300454493ull}},
+{{11587555951108307732ull, 298285040363594ull}},
+{{7472043077547561402ull, 477256064581751ull}},
+{{2288285647296138798ull, 381804851665401ull}},
+{{16588023776804552331ull, 305443881332320ull}},
+{{8094093969177732114ull, 488710210131713ull}},
+{{13853972804826006338ull, 390968168105370ull}},
+{{11083178243860805070ull, 312774534484296ull}},
+{{10354387560693467466ull, 500439255174874ull}},
+{{11972858863296684296ull, 400351404139899ull}},
+{{13267635905379257760ull, 320281123311919ull}},
+{{10160171004381081446ull, 512449797299071ull}},
+{{4438787988762954834ull, 409959837839257ull}},
+{{14619076835236094836ull, 327967870271405ull}},
+{{4943778862668200123ull, 524748592434249ull}},
+{{7644371904876470421ull, 419798873947399ull}},
+{{9804846338643086660ull, 335839099157919ull}},
+{{4619707697603207687ull, 537342558652671ull}},
+{{6417343340655826ull, 429874046922137ull}},
+{{11073180318898255630ull, 343899237537709ull}},
+{{6649042066011478039ull, 550238780060335ull}},
+{{5319233652809182431ull, 440191024048268ull}},
+{{11634084551731166591ull, 352152819238614ull}},
+{{12996616456126843596ull, 281722255390891ull}},
+{{13415888700319129108ull, 450755608625426ull}},
+{{7043362145513392963ull, 360604486900341ull}},
+{{1945340901668804047ull, 288483589520273ull}},
+{{17869940701637727768ull, 461573743232436ull}},
+{{10606603746568271891ull, 369258994585949ull}},
+{{12174631811996527836ull, 295407195668759ull}},
+{{8411364454968713569ull, 472651513070015ull}},
+{{6729091563974970855ull, 378121210456012ull}},
+{{16451319695405707653ull, 302496968364809ull}},
+{{15254065068423401276ull, 483995149383695ull}},
+{{12203252054738721021ull, 387196119506956ull}},
+{{6073252829049066493ull, 309756895605565ull}},
+{{9717204526478506390ull, 495611032968904ull}},
+{{11463112435924715435ull, 396488826375123ull}},
+{{16549187578223592994ull, 317191061100098ull}},
+{{4342607236706286852ull, 507505697760158ull}},
+{{10852783418848850128ull, 406004558208126ull}},
+{{4992877920337169779ull, 324803646566501ull}},
+{{609907043055651000ull, 519685834506402ull}},
+{{11555972078670251770ull, 415748667605121ull}},
+{{5555428848194291092ull, 332598934084097ull}},
+{{12578034971852776071ull, 532158294534555ull}},
+{{10062427977482220857ull, 425726635627644ull}},
+{{11739291196727687009ull, 340581308502115ull}},
+{{336121841054747598ull, 544930093603385ull}},
+{{268897472843798078ull, 435944074882708ull}},
+{{7593815607758859109ull, 348755259906166ull}},
+{{4771407342930353928ull, 558008415849866ull}},
+{{127777059602372819ull, 446406732679893ull}},
+{{7480919277165718902ull, 357125386143914ull}},
+{{9674084236474485445ull, 285700308915131ull}},
+{{8099837148875356065ull, 457120494264210ull}},
+{{6479869719100284852ull, 365696395411368ull}},
+{{12562593404764048528ull, 292557116329094ull}},
+{{9032103003396746675ull, 468091386126551ull}},
+{{3536333587975487017ull, 374473108901241ull}},
+{{17586462129348030906ull, 299578487120992ull}},
+{{13380944147989208158ull, 479325579393588ull}},
+{{18083452947875187172ull, 383460463514870ull}},
+{{14466762358300149738ull, 306768370811896ull}},
+{{15768122143796418934ull, 490829393299034ull}},
+{{16303846529779045471ull, 392663514639227ull}},
+{{5664379594339415730ull, 314130811711382ull}},
+{{12752356165684975491ull, 502609298738211ull}},
+{{6512536117806070070ull, 402087438990569ull}},
+{{8899377708986766379ull, 321669951192455ull}},
+{{14239004334378826207ull, 514671921907928ull}},
+{{323157023277329996ull, 411737537526343ull}},
+{{7637223248105684643ull, 329390030021074ull}},
+{{1151510752743364459ull, 527024048033719ull}},
+{{4610557416936601890ull, 421619238426975ull}},
+{{3688445933549281512ull, 337295390741580ull}},
+{{5901513493678850420ull, 539672625186528ull}},
+{{12099908424426900982ull, 431738100149222ull}},
+{{2301229110057700139ull, 345390480119378ull}},
+{{18439361835059961516ull, 552624768191004ull}},
+{{18440838282789879536ull, 442099814552803ull}},
+{{3684624182006172659ull, 353679851642243ull}},
+{{10326396975088758774ull, 282943881313794ull}},
+{{5454188715916283068ull, 452710210102071ull}},
+{{674002157991116131ull, 362168168081657ull}},
+{{11607248170618623875ull, 289734534465325ull}},
+{{124852999280246584ull, 463575255144521ull}},
+{{14857277658391838560ull, 370860204115616ull}},
+{{8196473311971560524ull, 296688163292493ull}},
+{{9425008484412586516ull, 474701061267989ull}},
+{{11229355602271979536ull, 379760849014391ull}},
+{{5294135667075673305ull, 303808679211513ull}},
+{{4781268252579166966ull, 486093886738421ull}},
+{{135665787321423249ull, 388875109390737ull}},
+{{11176579074082869569ull, 311100087512589ull}},
+{{6814480074306860341ull, 497760140020143ull}},
+{{12830281688929308919ull, 398208112016114ull}},
+{{13953574165885357458ull, 318566489612891ull}},
+{{14947021035932751287ull, 509706383380626ull}},
+{{8268268014004290707ull, 407765106704501ull}},
+{{2925265596461522242ull, 326212085363601ull}},
+{{15748471398564166557ull, 521939336581761ull}},
+{{8909428304109422922ull, 417551469265409ull}},
+{{10816891458029448661ull, 334041175412327ull}},
+{{2549631073879476565ull, 534465880659724ull}},
+{{5729053673845491575ull, 427572704527779ull}},
+{{8272591753818303583ull, 342058163622223ull}},
+{{9546797991367375410ull, 547293061795557ull}},
+{{258740763610079682ull, 437834449436446ull}},
+{{14964387869855705038ull, 350267559549156ull}},
+{{16564322962285307415ull, 560428095278650ull}},
+{{13251458369828245932ull, 448342476222920ull}},
+{{10601166695862596745ull, 358673980978336ull}},
+{{4791584541948167073ull, 286939184782669ull}},
+{{15045232896600887963ull, 459102695652270ull}},
+{{12036186317280710371ull, 367282156521816ull}},
+{{5939600239082657973ull, 293825725217453ull}},
+{{5814011567790342434ull, 470121160347925ull}},
+{{4651209254232273947ull, 376096928278340ull}},
+{{3720967403385819158ull, 300877542622672ull}},
+{{9642896660159220976ull, 481404068196275ull}},
+{{7714317328127376781ull, 385123254557020ull}},
+{{6171453862501901424ull, 308098603645616ull}},
+{{2495628550519221633ull, 492957765832986ull}},
+{{16753898099383018599ull, 394366212666388ull}},
+{{2335072035280683910ull, 315492970133111ull}},
+{{14804161700674825225ull, 504788752212977ull}},
+{{4464631731056039534ull, 403831001770382ull}},
+{{14639751829070562596ull, 323064801416305ull}},
+{{4976858852803348539ull, 516903682266089ull}},
+{{7670835896984589154ull, 413522945812871ull}},
+{{2447319902845761000ull, 330818356650297ull}},
+{{7605060659295127923ull, 529309370640475ull}},
+{{6084048527436102339ull, 423447496512380ull}},
+{{4867238821948881871ull, 338757997209904ull}},
+{{15166279744602031640ull, 542012795535846ull}},
+{{8443674980939714989ull, 433610236428677ull}},
+{{17822986428977502960ull, 346888189142941ull}},
+{{2691336583170632474ull, 555021102628707ull}},
+{{13221115710762236949ull, 444016882102965ull}},
+{{10576892568609789559ull, 355213505682372ull}},
+{{1082816425404011001ull, 284170804545898ull}},
+{{16489901539614058894ull, 454673287273436ull}},
+{{9502572416949336792ull, 363738629818749ull}},
+{{11291406748301379757ull, 290990903854999ull}},
+{{6998204353056476642ull, 465585446167999ull}},
+{{9287912297187091636ull, 372468356934399ull}},
+{{11119678652491583632ull, 297974685547519ull}},
+{{6723439399760802842ull, 476759496876031ull}},
+{{1689402705066731951ull, 381407597500825ull}},
+{{1351522164053385560ull, 305126078000660ull}},
+{{2162435462485416897ull, 488201724801056ull}},
+{{16487343628955974810ull, 390561379840844ull}},
+{{16879223717906690171ull, 312449103872675ull}},
+{{8560013874941152658ull, 499918566196281ull}},
+{{3158662285211011803ull, 399934852957025ull}},
+{{2526929828168809443ull, 319947882365620ull}},
+{{4043087725070095108ull, 511916611784992ull}},
+{{14302516624281807056ull, 409533289427993ull}},
+{{373966855199714675ull, 327626631542395ull}},
+{{598346968319543481ull, 524202610467832ull}},
+{{11546724018881365754ull, 419362088374265ull}},
+{{9237379215105092603ull, 335489670699412ull}},
+{{22411485200506873ull, 536783473119060ull}},
+{{17929188160405498ull, 429426778495248ull}},
+{{7393040980012145045ull, 343541422796198ull}},
+{{8139516753277521749ull, 549666276473917ull}},
+{{17579659846847748368ull, 439733021179133ull}},
+{{2995681433252467725ull, 351786416943307ull}},
+{{8482439107945858684ull, 562858267109291ull}},
+{{3096602471614776624ull, 450286613687433ull}},
+{{9855979606775641945ull, 360229290949946ull}},
+{{4195434870678603233ull, 288183432759957ull}},
+{{10402044607827675496ull, 461093492415931ull}},
+{{4632286871520230073ull, 368874793932745ull}},
+{{3705829497216184059ull, 295099835146196ull}},
+{{16997373639771625464ull, 472159736233913ull}},
+{{2529852467591569401ull, 377727788987131ull}},
+{{16781277233040896814ull, 302182231189704ull}},
+{{15781997128639703933ull, 483491569903527ull}},
+{{5246900073427942500ull, 386793255922822ull}},
+{{15265566502968084969ull, 309434604738257ull}},
+{{9667511145781294658ull, 495095367581212ull}},
+{{355311287141215080ull, 396076294064970ull}},
+{{284249029712972064ull, 316861035251976ull}},
+{{11522844891766486272ull, 506977656403161ull}},
+{{5528927098671278695ull, 405582125122529ull}},
+{{8112490493678933279ull, 324465700098023ull}},
+{{9290635975144382923ull, 519145120156837ull}},
+{{53811150631685692ull, 415316096125470ull}},
+{{43048920505348553ull, 332252876900376ull}},
+{{11136924717034288655ull, 531604603040601ull}},
+{{5220190958885520601ull, 425283682432481ull}},
+{{486803952366506158ull, 340226945945985ull}},
+{{778886323786409852ull, 544363113513576ull}},
+{{15380504317996769175ull, 435490490810860ull}},
+{{12304403454397415340ull, 348392392648688ull}},
+{{15997696712293954220ull, 557427828237901ull}},
+{{9108808555093253053ull, 445942262590321ull}},
+{{3597698029332692119ull, 356753810072257ull}},
+{{13946204867691884665ull, 285403048057805ull}},
+{{3867183714597463848ull, 456644876892489ull}},
+{{6783095786419881402ull, 365315901513991ull}},
+{{1737127814393994798ull, 292252721211193ull}},
+{{17536799761998032970ull, 467604353937908ull}},
+{{2961393365372695406ull, 374083483150327ull}},
+{{13437161136523887294ull, 299266786520261ull}},
+{{14120760188954399025ull, 478826858432418ull}},
+{{228561706937788250ull, 383061486745935ull}},
+{{182849365550230600ull, 306449189396748ull}},
+{{15049954243848010253ull, 490318703034796ull}},
+{{8350614580336497879ull, 392254962427837ull}},
+{{17748538108494929273ull, 313803969942269ull}},
+{{17329614529366155867ull, 502086351907631ull}},
+{{10174342808751014371ull, 401669081526105ull}},
+{{8139474247000811496ull, 321335265220884ull}},
+{{1955112350975567425ull, 514136424353415ull}},
+{{1564089880780453940ull, 411309139482732ull}},
+{{12319318348850094121ull, 329047311586185ull}},
+{{1264165284450598978ull, 526475698537897ull}},
+{{12079378671786210152ull, 421180558830317ull}},
+{{2284805307945147475ull, 336944447064254ull}},
+{{11034386122196056607ull, 539111115302806ull}},
+{{5138160083014934962ull, 431288892242245ull}},
+{{4110528066411947970ull, 345031113793796ull}},
+{{17644891350484847722ull, 552049782070073ull}},
+{{3047866636162147208ull, 441639825656059ull}},
+{{6127642123671628089ull, 353311860524847ull}},
+{{15970160143163033441ull, 282649488419877ull}},
+{{10794860970093212213ull, 452239181471804ull}},
+{{12325237590816480093ull, 361791345177443ull}},
+{{17238887702137004721ull, 289433076141954ull}},
+{{16514173879193476584ull, 463092921827127ull}},
+{{5832641473870960621ull, 370474337461702ull}},
+{{15734159623322499466ull, 296379469969361ull}},
+{{17795957767832178500ull, 474207151950978ull}},
+{{3168719770040011830ull, 379365721560783ull}},
+{{9913673445515830111ull, 303492577248626ull}},
+{{8483179883341507531ull, 485588123597802ull}},
+{{17854590350898936994ull, 388470498878241ull}},
+{{10594323465977239272ull, 310776399102593ull}},
+{{13261568730821672512ull, 497242238564149ull}},
+{{14298603799399248333ull, 397793790851319ull}},
+{{15128231854261308989ull, 318235032681055ull}},
+{{5758426893108542767ull, 509176052289689ull}},
+{{8296090329228744537ull, 407340841831751ull}},
+{{2947523448641085306ull, 325872673465401ull}},
+{{15784083962051467460ull, 521396277544641ull}},
+{{8937918354899263645ull, 417117022035713ull}},
+{{14529032313403231562ull, 333693617628570ull}},
+{{4799707627735618884ull, 533909788205713ull}},
+{{11218463731672315753ull, 427127830564570ull}},
+{{8974770985337852602ull, 341702264451656ull}},
+{{6980935947056743518ull, 546723623122650ull}},
+{{5584748757645394814ull, 437378898498120ull}},
+{{4467799006116315851ull, 349903118798496ull}},
+{{18216524854011836332ull, 559844990077593ull}},
+{{3505173438983738096ull, 447875992062075ull}},
+{{2804138751186990477ull, 358300793649660ull}},
+{{2243311000949592381ull, 286640634919728ull}},
+{{18346692860486989103ull, 458625015871564ull}},
+{{18366703103131501605ull, 366900012697251ull}},
+{{11004013667763290961ull, 293520010157801ull}},
+{{10227724238937444892ull, 469632016252482ull}},
+{{803481761666135267ull, 375705613001986ull}},
+{{15400180668300549506ull, 300564490401588ull}},
+{{2504196180829417271ull, 480903184642542ull}},
+{{13071403388889264786ull, 384722547714033ull}},
+{{17835820340595232475ull, 307778038171226ull}},
+{{2711870841758999698ull, 492444861073963ull}},
+{{9548194302891020405ull, 393955888859170ull}},
+{{7638555442312816324ull, 315164711087336ull}},
+{{4842991078216685472ull, 504263537739738ull}},
+{{11253090492057169024ull, 403410830191790ull}},
+{{9002472393645735219ull, 322728664153432ull}},
+{{18093304644575086674ull, 516365862645491ull}},
+{{10785294900918159016ull, 413092690116393ull}},
+{{16006933550218347859ull, 330474152093114ull}},
+{{14543047236123625605ull, 528758643348983ull}},
+{{566391344673169514ull, 423006914679187ull}},
+{{11521159519964266581ull, 338405531743349ull}},
+{{7365808787717095560ull, 541448850789359ull}},
+{{9581995844915586771ull, 433159080631487ull}},
+{{286899046448648771ull, 346527264505190ull}},
+{{459038474317838033ull, 554443623208304ull}},
+{{4056579594196180750ull, 443554898566643ull}},
+{{10623961304840765246ull, 354843918853314ull}},
+{{12188517858614522520ull, 283875135082651ull}},
+{{12122930944299415386ull, 454200216132242ull}},
+{{2319647125955711662ull, 363360172905794ull}},
+{{5545066515506479653ull, 290688138324635ull}},
+{{8872106424810367445ull, 465101021319416ull}},
+{{3408336325106383633ull, 372080817055533ull}},
+{{10105366689568927552ull, 297664653644426ull}},
+{{8789889073826463438ull, 476263445831082ull}},
+{{18099957703286901720ull, 381010756664865ull}},
+{{14479966162629521376ull, 304808605331892ull}},
+{{8410550601239592908ull, 487693768531028ull}},
+{{14107138110475494973ull, 390155014824822ull}},
+{{3907012858896575332ull, 312124011859858ull}},
+{{2561871759492610208ull, 499398418975773ull}},
+{{9428195037077908813ull, 399518735180618ull}},
+{{14921253659146147697ull, 319614988144494ull}},
+{{12805959410408105345ull, 511383981031191ull}},
+{{6555418713584573953ull, 409107184824953ull}},
+{{12623032600351479809ull, 327285747859962ull}},
+{{5439456901594726401ull, 523657196575940ull}},
+{{4351565521275781121ull, 418925757260752ull}},
+{{14549298861246355866ull, 335140605808601ull}},
+{{15900180548510348740ull, 536224969293762ull}},
+{{5341446809324458345ull, 428979975435010ull}},
+{{4273157447459566676ull, 343183980348008ull}},
+{{3147703101193396359ull, 549094368556813ull}},
+{{9896860110438537734ull, 439275494845450ull}},
+{{7917488088350830187ull, 351420395876360ull}},
+{{12667980941361328299ull, 562272633402176ull}},
+{{6445035938347152316ull, 449818106721741ull}},
+{{1466679935935811529ull, 359854485377393ull}},
+{{8552041578232469870ull, 287883588301914ull}},
+{{2615220080946220823ull, 460613741283063ull}},
+{{9470873694240797304ull, 368490993026450ull}},
+{{7576698955392637843ull, 294792794421160ull}},
+{{12122718328628220550ull, 471668471073856ull}},
+{{6008825848160666116ull, 377334776859085ull}},
+{{4807060678528532893ull, 301867821487268ull}},
+{{4001948270903742306ull, 482988514379629ull}},
+{{6890907431464904168ull, 386390811503703ull}},
+{{12891423574655743981ull, 309112649202962ull}},
+{{5868882460481549076ull, 494580238724740ull}},
+{{4695105968385239261ull, 395664190979792ull}},
+{{14824131218933922378ull, 316531352783833ull}},
+{{1582517061842813866ull, 506450164454134ull}},
+{{4955362464216161416ull, 405160131563307ull}},
+{{15032336415598660103ull, 324128105250645ull}},
+{{5604994191248304548ull, 518604968401033ull}},
+{{11862692982482464285ull, 414883974720826ull}},
+{{5800805571244061105ull, 331907179776661ull}},
+{{1902591284506677121ull, 531051487642658ull}},
+{{8900770657089162343ull, 424841190114126ull}},
+{{3431267710929419551ull, 339872952091301ull}},
+{{16558074781712802252ull, 543796723346081ull}},
+{{9557111010628331478ull, 435037378676865ull}},
+{{7645688808502665183ull, 348029902941492ull}},
+{{15922450908346174616ull, 556847844706387ull}},
+{{5359263097193119046ull, 445478275765110ull}},
+{{4287410477754495237ull, 356382620612088ull}},
+{{10808626011687416836ull, 285106096489670ull}},
+{{17293801618699866937ull, 456169754383472ull}},
+{{6456343665476072903ull, 364935803506778ull}},
+{{12543772561864678969ull, 291948642805422ull}},
+{{5312640840015845058ull, 467117828488676ull}},
+{{560763857270765723ull, 373694262790941ull}},
+{{15206006344784253871ull, 298955410232752ull}},
+{{9572214892687164901ull, 478328656372404ull}},
+{{11347120728891642244ull, 382662925097923ull}},
+{{16456394212597134442ull, 306130340078338ull}},
+{{4194137851703953168ull, 489808544125342ull}},
+{{14423356725588893504ull, 391846835300273ull}},
+{{470638936245383833ull, 313477468240219ull}},
+{{8131719927476434780ull, 501563949184350ull}},
+{{6505375941981147824ull, 401251159347480ull}},
+{{5204300753584918259ull, 321000927477984ull}},
+{{15705578835219689861ull, 513601483964774ull}},
+{{16253811882917662212ull, 410881187171819ull}},
+{{16692398321076040093ull, 328704949737455ull}},
+{{8261093240012112533ull, 525927919579929ull}},
+{{10298223406751600349ull, 420742335663943ull}},
+{{15617276354885100926ull, 336593868531154ull}},
+{{13919595723590430512ull, 538550189649847ull}},
+{{3756978949388523763ull, 430840151719878ull}},
+{{10384280788994639657ull, 344672121375902ull}},
+{{1857454003423782158ull, 551475394201444ull}},
+{{5175312017480936050ull, 441180315361155ull}},
+{{4140249613984748840ull, 352944252288924ull}},
+{{7001548505929709395ull, 282355401831139ull}},
+{{134431165261804062ull, 451768642929823ull}},
+{{7486242561693263896ull, 361414914343858ull}},
+{{13367691678838431763ull, 289131931475086ull}},
+{{14009609056657670175ull, 462611090360138ull}},
+{{139640801100405170ull, 370088872288111ull}},
+{{14869107899847965429ull, 296071097830488ull}},
+{{1654479751305282747ull, 473713756528782ull}},
+{{12391630245269957167ull, 378971005223025ull}},
+{{9913304196215965734ull, 303176804178420ull}},
+{{15861286713945545174ull, 485082886685472ull}},
+{{5310331741672615493ull, 388066309348378ull}},
+{{11626963022821913041ull, 310453047478702ull}},
+{{3845745577547419573ull, 496724875965924ull}},
+{{6765945276779845981ull, 397379900772739ull}},
+{{9102105036165787108ull, 317903920618191ull}},
+{{7184670428381438727ull, 508646272989106ull}},
+{{2058387527963240658ull, 406917018391285ull}},
+{{1646710022370592526ull, 325533614713028ull}},
+{{17392131294760589335ull, 520853783540844ull}},
+{{17603053850550381791ull, 416683026832675ull}},
+{{14082443080440305433ull, 333346421466140ull}},
+{{4085164854994937077ull, 533354274345825ull}},
+{{3268131883995949662ull, 426683419476660ull}},
+{{2614505507196759729ull, 341346735581328ull}},
+{{493859996772905244ull, 546154776930125ull}},
+{{395087997418324195ull, 436923821544100ull}},
+{{316070397934659356ull, 349539057235280ull}},
+{{505712636695454970ull, 559262491576448ull}},
+{{7783267738840184622ull, 447409993261158ull}},
+{{13605311820555968344ull, 357927994608926ull}},
+{{7194900641702864352ull, 286342395687141ull}},
+{{4133143397240762317ull, 458147833099426ull}},
+{{18063909976760251146ull, 366518266479540ull}},
+{{14451127981408200917ull, 293214613183632ull}},
+{{8364409511285480174ull, 469143381093812ull}},
+{{17759574053254115109ull, 375314704875049ull}},
+{{17897008057345202410ull, 300251763900039ull}},
+{{17567166447526592887ull, 480402822240063ull}},
+{{2985686713795543340ull, 384322257792051ull}},
+{{17145944630004075965ull, 307457806233640ull}},
+{{8986767334296969928ull, 491932489973825ull}},
+{{7189413867437575942ull, 393545991979060ull}},
+{{5751531093950060754ull, 314836793583248ull}},
+{{5513100935578186883ull, 503738869733197ull}},
+{{15478527192688280476ull, 402991095786557ull}},
+{{5004124124666803734ull, 322392876629246ull}},
+{{627900969983065329ull, 515828602606794ull}},
+{{4191669590728362586ull, 412662882085435ull}},
+{{3353335672582690069ull, 330130305668348ull}},
+{{1675988261390393787ull, 528208489069357ull}},
+{{12408837053338045999ull, 422566791255485ull}},
+{{9927069642670436799ull, 338053433004388ull}},
+{{12193962613530788556ull, 540885492807021ull}},
+{{6065821276082720521ull, 432708394245617ull}},
+{{15920703465091907387ull, 346166715396493ull}},
+{{3337032655695589880ull, 553866744634390ull}},
+{{2669626124556471904ull, 443093395707512ull}},
+{{13203747343870908492ull, 354474716566009ull}},
+{{14252346689838637117ull, 283579773252807ull}},
+{{8046359444774178095ull, 453727637204492ull}},
+{{17505134000045073445ull, 362982109763593ull}},
+{{2936060755810327787ull, 290385687810875ull}},
+{{4697697209296524459ull, 464617100497400ull}},
+{{3758157767437219567ull, 371693680397920ull}},
+{{3006526213949775653ull, 297354944318336ull}},
+{{15878488386545372015ull, 475767910909337ull}},
+{{5324093079752476966ull, 380614328727470ull}},
+{{4259274463801981573ull, 304491462981976ull}},
+{{17882885586308901486ull, 487186340771161ull}},
+{{10616959654305210865ull, 389749072616929ull}},
+{{12182916538186079015ull, 311799258093543ull}},
+{{15803317646355816102ull, 498878812949669ull}},
+{{16332002931826563205ull, 399103050359735ull}},
+{{13065602345461250564ull, 319282440287788ull}},
+{{17215614937996090579ull, 510851904460461ull}},
+{{10083143135654962140ull, 408681523568369ull}},
+{{11755863323265880035ull, 326945218854695ull}},
+{{362637243515856440ull, 523112350167513ull}},
+{{7668807424296505798ull, 418489880134010ull}},
+{{6135045939437204639ull, 334791904107208ull}},
+{{6126724688357617099ull, 535667046571533ull}},
+{{12280077380169914325ull, 428533637257226ull}},
+{{6134713089394021137ull, 342826909805781ull}},
+{{2436843313546613173ull, 548523055689250ull}},
+{{1949474650837290538ull, 438818444551400ull}},
+{{1559579720669832431ull, 351054755641120ull}},
+{{2495327553071731889ull, 561687609025792ull}},
+{{13064308486683116481ull, 449350087220633ull}},
+{{17830144418830313831ull, 359480069776506ull}},
+{{10574766720322340742ull, 287584055821205ull}},
+{{16919626752515745187ull, 460134489313928ull}},
+{{2467654957786865180ull, 368107591451143ull}},
+{{9352821595713312790ull, 294486073160914ull}},
+{{3896468108915569495ull, 471177717057463ull}},
+{{10495872116616276242ull, 376942173645970ull}},
+{{8396697693293020994ull, 301553738916776ull}},
+{{6056018679785012944ull, 482485982266842ull}},
+{{15912861388053741325ull, 385988785813473ull}},
+{{1662242666217262090ull, 308791028650779ull}},
+{{10038285895431439991ull, 494065645841246ull}},
+{{4341279901603241669ull, 395252516672997ull}},
+{{14541070365508324305ull, 316202013338397ull}},
+{{8508317325845677595ull, 505923221341436ull}},
+{{3117305045934631753ull, 404738577073149ull}},
+{{6183192851489615725ull, 323790861658519ull}},
+{{17271806191867205807ull, 518065378653630ull}},
+{{13817444953493764646ull, 414452302922904ull}},
+{{14743304777536922040ull, 331561842338323ull}},
+{{1453194755607613325ull, 530498947741318ull}},
+{{8541253433969911306ull, 424399158193054ull}},
+{{10522351561917839368ull, 339519326554443ull}},
+{{13146413684326632666ull, 543230922487109ull}},
+{{14206479762203216456ull, 434584737989687ull}},
+{{3986486180278752518ull, 347667790391750ull}},
+{{6378377888446004029ull, 556268464626800ull}},
+{{5102702310756803223ull, 445014771701440ull}},
+{{4082161848605442578ull, 356011817361152ull}},
+{{14333775923110085032ull, 284809453888921ull}},
+{{15555343847492315406ull, 455695126222274ull}},
+{{16133623892735762648ull, 364556100977819ull}},
+{{16596247928930520441ull, 291644880782255ull}},
+{{8107252612579281090ull, 466631809251609ull}},
+{{10175150904805335195ull, 373305447401287ull}},
+{{761423094360447510ull, 298644357921030ull}},
+{{1218276950976716016ull, 477830972673648ull}},
+{{8353319190265193459ull, 382264778138918ull}},
+{{14061352981695975413ull, 305811822511134ull}},
+{{11430118326487829692ull, 489298916017815ull}},
+{{9144094661190263754ull, 391439132814252ull}},
+{{18383322173177941972ull, 313151306251401ull}},
+{{3587873773891334894ull, 501042090002243ull}},
+{{10248996648596888561ull, 400833672001794ull}},
+{{11888546133619421172ull, 320666937601435ull}},
+{{574929740081522260ull, 513067100162297ull}},
+{{11527990236290948777ull, 410453680129837ull}},
+{{1843694559548938375ull, 328362944103870ull}},
+{{2949911295278301401ull, 525380710566192ull}},
+{{13427975480448372090ull, 420304568452953ull}},
+{{18121078013842518318ull, 336243654762362ull}},
+{{14236329563180388017ull, 537989847619780ull}},
+{{11389063650544310414ull, 430391878095824ull}},
+{{12800599735177358654ull, 344313502476659ull}},
+{{9412913132058042877ull, 550901603962655ull}},
+{{7530330505646434301ull, 440721283170124ull}},
+{{9713613219259057764ull, 352577026536099ull}},
+{{11460239390149156535ull, 282061621228879ull}},
+{{7268336580012919486ull, 451298593966207ull}},
+{{16882715708236066558ull, 361038875172965ull}},
+{{13506172566588853246ull, 288831100138372ull}},
+{{6852480847574523902ull, 462129760221396ull}},
+{{1792635863317708798ull, 369703808177117ull}},
+{{12502155134879898008ull, 295763046541693ull}},
+{{16314099401065926490ull, 473220874466709ull}},
+{{16740628335594651515ull, 378576699573367ull}},
+{{6013805038991900566ull, 302861359658694ull}},
+{{17000785691870861552ull, 484578175453910ull}},
+{{13600628553496689241ull, 387662540363128ull}},
+{{18259200472281172039ull, 310130032290502ull}},
+{{14457325496682233970ull, 496208051664804ull}},
+{{15255209212087697499ull, 396966441331843ull}},
+{{1136120925444427030ull, 317573153065475ull}},
+{{1817793480711083248ull, 508117044904760ull}},
+{{1454234784568866598ull, 406493635923808ull}},
+{{8542085457138913925ull, 325194908739046ull}},
+{{6288639101938441634ull, 520311853982474ull}},
+{{8720260096292663630ull, 416249483185979ull}},
+{{10665556891776041227ull, 332999586548783ull}},
+{{13375542212099755641ull, 532799338478053ull}},
+{{18079131399163625159ull, 426239470782442ull}},
+{{7084607489847079481ull, 340991576625954ull}},
+{{267325539529596200ull, 545586522601527ull}},
+{{11281906875849407929ull, 436469218081221ull}},
+{{5336176685937616020ull, 349175374464977ull}},
+{{12227231512242095956ull, 558680599143963ull}},
+{{17160482839277497411ull, 446944479315170ull}},
+{{13728386271421997928ull, 357555583452136ull}},
+{{7293360202395688019ull, 286044466761709ull}},
+{{601329879607369862ull, 457671146818735ull}},
+{{481063903685895889ull, 366136917454988ull}},
+{{7763548752432537358ull, 292909533963990ull}},
+{{12421678003892059773ull, 468655254342384ull}},
+{{13626691217855558141ull, 374924203473907ull}},
+{{3522655344800625867ull, 299939362779126ull}},
+{{16704294995906732356ull, 479902980446601ull}},
+{{9674087181983475562ull, 383922384357281ull}},
+{{4049920930844870126ull, 307137907485825ull}},
+{{6479873489351792202ull, 491420651977320ull}},
+{{5183898791481433762ull, 393136521581856ull}},
+{{457770218443236686ull, 314509217265485ull}},
+{{732432349509178698ull, 503214747624776ull}},
+{{15343341138574984251ull, 402571798099820ull}},
+{{12274672910859987401ull, 322057438479856ull}},
+{{12260779027892159195ull, 515291901567770ull}},
+{{9808623222313727356ull, 412233521254216ull}},
+{{4157549763109071561ull, 329786817003373ull}},
+{{2962730806232604175ull, 527658907205397ull}},
+{{13438231089211814310ull, 422127125764317ull}},
+{{3371887241885630801ull, 337701700611454ull}},
+{{12773717216500829929ull, 540322720978326ull}},
+{{6529624958458753620ull, 432258176782661ull}},
+{{1534351152025092573ull, 345806541426129ull}},
+{{9833659472723968763ull, 553290466281806ull}},
+{{4177578763437264687ull, 442632373025445ull}},
+{{3342063010749811749ull, 354105898420356ull}},
+{{17431045667567490692ull, 283284718736284ull}},
+{{16821626623882254138ull, 453255549978055ull}},
+{{13457301299105803311ull, 362604439982444ull}},
+{{14455189854026552972ull, 290083551985955ull}},
+{{4681559692732933139ull, 464133683177529ull}},
+{{7434596568928256834ull, 371306946542023ull}},
+{{13326374884626426114ull, 297045557233618ull}},
+{{17632851000660371459ull, 475272891573789ull}},
+{{17795629615270207490ull, 380218313259031ull}},
+{{10547154877474255669ull, 304174650607225ull}},
+{{16875447803958809070ull, 486679440971560ull}},
+{{13500358243167047256ull, 389343552777248ull}},
+{{18178984224017458451ull, 311474842221798ull}},
+{{6950281869976471583ull, 498359747554878ull}},
+{{12938923125464997913ull, 398687798043902ull}},
+{{2972440870888177684ull, 318950238435122ull}},
+{{8445254208162994618ull, 510320381496195ull}},
+{{6756203366530395694ull, 408256305196956ull}},
+{{1715613878482406232ull, 326605044157565ull}},
+{{2744982205571849971ull, 522568070652104ull}},
+{{5885334579199390300ull, 418054456521683ull}},
+{{12086965292843332886ull, 334443565217346ull}},
+{{11960446839065511972ull, 535109704347754ull}},
+{{13257706285994319901ull, 428087763478203ull}},
+{{17984862658279276567ull, 342470210782562ull}},
+{{14018384994279201215ull, 547952337252100ull}},
+{{11214707995423360972ull, 438361869801680ull}},
+{{8971766396338688777ull, 350689495841344ull}},
+{{3286779789916171074ull, 561103193346151ull}},
+{{17386819090900578152ull, 448882554676920ull}},
+{{13909455272720462522ull, 359106043741536ull}},
+{{7438215403434459694ull, 287284834993229ull}},
+{{833098201269404541ull, 459655735989167ull}},
+{{11734525005241254602ull, 367724588791333ull}},
+{{16766317633676824328ull, 294179671033066ull}},
+{{1000666510689546663ull, 470687473652907ull}},
+{{11868579652777368300ull, 376549978922325ull}},
+{{9494863722221894640ull, 301239983137860ull}},
+{{15191781955555031424ull, 481983973020576ull}},
+{{8464076749702114816ull, 385587178416461ull}},
+{{3081912585019781529ull, 308469742733169ull}},
+{{12309757765515471094ull, 493551588373070ull}},
+{{9847806212412376875ull, 394841270698456ull}},
+{{4188896155187991177ull, 315873016558765ull}},
+{{6702233848300785883ull, 505396826494024ull}},
+{{9051135893382539029ull, 404317461195219ull}},
+{{10930257529447941547ull, 323453968956175ull}},
+{{17488412047116706475ull, 517526350329880ull}},
+{{13990729637693365180ull, 414021080263904ull}},
+{{14881932524896602467ull, 331216864211123ull}},
+{{1674999151383102008ull, 529946982737798ull}},
+{{8718696950590302253ull, 423957586190238ull}},
+{{14353655189956062449ull, 339166068952190ull}},
+{{4519104230220148302ull, 542665710323505ull}},
+{{3615283384176118641ull, 434132568258804ull}},
+{{6581575522082805236ull, 347306054607043ull}},
+{{6841172020590578055ull, 555689687371269ull}},
+{{9162286431214372767ull, 444551749897015ull}},
+{{7329829144971498214ull, 355641399917612ull}},
+{{16931909760202929540ull, 284513119934089ull}},
+{{16023009172098956295ull, 455220991894543ull}},
+{{1750360893453434067ull, 364176793515635ull}},
+{{1400288714762747253ull, 291341434812508ull}},
+{{16997857202588036898ull, 466146295700012ull}},
+{{6219588132586608872ull, 372917036560010ull}},
+{{4975670506069287098ull, 298333629248008ull}},
+{{4271723994968949033ull, 477333806796813ull}},
+{{10796076825458979873ull, 381867045437450ull}},
+{{8636861460367183898ull, 305493636349960ull}},
+{{13818978336587494237ull, 488789818159936ull}},
+{{7365833854528085067ull, 391031854527949ull}},
+{{9582015898364378376ull, 312825483622359ull}},
+{{4263178993157274433ull, 500520773795775ull}},
+{{3410543194525819546ull, 400416619036620ull}},
+{{2728434555620655637ull, 320333295229296ull}},
+{{15433541733218779989ull, 512533272366873ull}},
+{{1278786942349293021ull, 410026617893499ull}},
+{{4712378368621344740ull, 328021294314799ull}},
+{{14918503019277972231ull, 524834070903678ull}},
+{{866755971196646815ull, 419867256722943ull}},
+{{8072102406441138098ull, 335893805378354ull}},
+{{1847317406080089988ull, 537430088605367ull}},
+{{12545900369089802960ull, 429944070884293ull}},
+{{17415417924755663014ull, 343955256707434ull}},
+{{16796622235383329854ull, 550328410731895ull}},
+{{13437297788306663883ull, 440262728585516ull}},
+{{7060489415903420783ull, 352210182868413ull}},
+{{13027089162206557273ull, 281768146294730ull}},
+{{2396598585820940021ull, 450829034071569ull}},
+{{5606627683398662340ull, 360663227257255ull}},
+{{4485302146718929872ull, 288530581805804ull}},
+{{14555181064234108441ull, 461648930889286ull}},
+{{7954796036645376430ull, 369319144711429ull}},
+{{10053185644058211467ull, 295455315769143ull}},
+{{12395748215751228024ull, 472728505230629ull}},
+{{13605947387342892742ull, 378182804184503ull}},
+{{18263455539358134840ull, 302546243347602ull}},
+{{14464133604005374452ull, 484073989356164ull}},
+{{15260655697946209884ull, 387259191484931ull}},
+{{8519175743615057584ull, 309807353187945ull}},
+{{13630681189784092135ull, 495691765100712ull}},
+{{3525847322343453062ull, 396553412080570ull}},
+{{2820677857874762449ull, 317242729664456ull}},
+{{15581131016825350889ull, 507588367463129ull}},
+{{16154253628202191034ull, 406070693970503ull}},
+{{1855356458336021858ull, 324856555176403ull}},
+{{17725965592305276265ull, 519770488282244ull}},
+{{17870121288586131335ull, 415816390625795ull}},
+{{14296097030868905068ull, 332653112500636ull}},
+{{15495057619906427463ull, 532244980001018ull}},
+{{1327999651699411001ull, 425795984000815ull}},
+{{1062399721359528800ull, 340636787200652ull}},
+{{5389188368917156404ull, 545018859521043ull}},
+{{11690048324617545770ull, 436015087616834ull}},
+{{13041387474435946939ull, 348812070093467ull}},
+{{6108824700129873809ull, 558099312149548ull}},
+{{12265757389587719694ull, 446479449719638ull}},
+{{17191303541153996401ull, 357183559775710ull}},
+{{13753042832923197121ull, 285746847820568ull}},
+{{18315519717935205071ull, 457194956512909ull}},
+{{18341764589090074380ull, 365755965210327ull}},
+{{7294714041788238857ull, 292604772168262ull}},
+{{15360891281603092495ull, 468167635469219ull}},
+{{15978061840024384319ull, 374534108375375ull}},
+{{12782449472019507455ull, 299627286700300ull}},
+{{2005175081521660313ull, 479403658720481ull}},
+{{16361535324184969543ull, 383522926976384ull}},
+{{16778577074089885957ull, 306818341581107ull}},
+{{12088328059576176239ull, 490909346529772ull}},
+{{2291964818177120345ull, 392727477223818ull}},
+{{9212269484025516922ull, 314181981779054ull}},
+{{3671584730215096106ull, 502691170846487ull}},
+{{14005314228397807855ull, 402152936677189ull}},
+{{14893600197460156607ull, 321722349341751ull}},
+{{16451062686452429925ull, 514755758946802ull}},
+{{5782152519678123293ull, 411804607157442ull}},
+{{15693768459968229604ull, 329443685725953ull}},
+{{2973936647497705428ull, 527109897161526ull}},
+{{17136544576965805635ull, 421687917729220ull}},
+{{13709235661572644508ull, 337350334183376ull}},
+{{14556079429032410566ull, 539760534693402ull}},
+{{4266165913742107807ull, 431808427754722ull}},
+{{14480979175219417215ull, 345446742203777ull}},
+{{8412171421383426251ull, 552714787526044ull}},
+{{10419085951848651324ull, 442171830020835ull}},
+{{8335268761478921059ull, 353737464016668ull}},
+{{14046912638666957494ull, 282989971213334ull}},
+{{11407013777641401020ull, 452783953941335ull}},
+{{9125611022113120816ull, 362227163153068ull}},
+{{14679186447174317299ull, 289781730522454ull}},
+{{12418651871253176710ull, 463650768835927ull}},
+{{2556223867518720721ull, 370920615068742ull}},
+{{13113025538240707546ull, 296736492054993ull}},
+{{17291492046443221751ull, 474778387287989ull}},
+{{17522542451896487724ull, 379822709830391ull}},
+{{10328685146775279856ull, 303858167864313ull}},
+{{12836547420098537447ull, 486173068582901ull}},
+{{6579889121336919634ull, 388938454866321ull}},
+{{1574562482327625384ull, 311150763893057ull}},
+{{6208648786466110938ull, 497841222228891ull}},
+{{1277570214430978427ull, 398272977783113ull}},
+{{8400753801028603388ull, 318618382226490ull}},
+{{13441206081645765421ull, 509789411562384ull}},
+{{14442313680058522660ull, 407831529249907ull}},
+{{4175153314562997481ull, 326265223399926ull}},
+{{17748291747526526940ull, 522024357439881ull}},
+{{10509284583279311229ull, 417619485951905ull}},
+{{8407427666623448983ull, 334095588761524ull}},
+{{2383837822371787403ull, 534552942018439ull}},
+{{5596419072639340246ull, 427642353614751ull}},
+{{787786443369561873ull, 342113882891801ull}},
+{{12328504753617029967ull, 547382212626881ull}},
+{{6173454988151713650ull, 437905770101505ull}},
+{{4938763990521370920ull, 350324616081204ull}},
+{{15280720014318014119ull, 560519385729926ull}},
+{{8535227196712500972ull, 448415508583941ull}},
+{{3138832942628090454ull, 358732406867153ull}},
+{{9889763983586293010ull, 286985925493722ull}},
+{{1066227114770427523ull, 459177480789956ull}},
+{{15610376950783983311ull, 367341984631964ull}},
+{{16177650375369096972ull, 293873587705571ull}},
+{{58798897397182893ull, 470197740328915ull}},
+{{47039117917746314ull, 376158192263132ull}},
+{{11105677738559928021ull, 300926553810505ull}},
+{{17769084381695884834ull, 481482486096808ull}},
+{{3147221061130976897ull, 385185988877447ull}},
+{{13585823293130512487ull, 308148791101957ull}},
+{{6979922010041178687ull, 493038065763132ull}},
+{{16651984052258673919ull, 394430452610505ull}},
+{{13321587241806939135ull, 315544362088404ull}},
+{{10246493142665371647ull, 504870979341447ull}},
+{{818496884648476671ull, 403896783473158ull}},
+{{8033495137202601983ull, 323117426778526ull}},
+{{5474894590040342527ull, 516987882845642ull}},
+{{15447962116258004991ull, 413590306276513ull}},
+{{1290323248780673023ull, 330872245021211ull}},
+{{13132563642274807807ull, 529395592033937ull}},
+{{3127353284336025599ull, 423516473627150ull}},
+{{2501882627468820479ull, 338813178901720ull}},
+{{4003012203950112767ull, 542101086242752ull}},
+{{14270456207385821183ull, 433680868994201ull}},
+{{7727016151166746623ull, 346944695195361ull}},
+{{4984528212382973951ull, 555111512312578ull}},
+{{11366320199390199807ull, 444089209850062ull}},
+{{1714358530028339199ull, 355271367880050ull}},
+{{1371486824022671359ull, 284217094304040ull}},
+{{2194378918436274175ull, 454747350886464ull}},
+{{5444851949490929663ull, 363797880709171ull}},
+{{666532744850833407ull, 291038304567337ull}},
+{{4755801206503243775ull, 465661287307739ull}},
+{{7493989779944505343ull, 372529029846191ull}},
+{{2305843009213693951ull, 298023223876953ull}},
+{{18446744073709551615ull, 476837158203124ull}},
+{{18446744073709551615ull, 381469726562499ull}},
+{{18446744073709551615ull, 305175781249999ull}},
+{{18446744073709551615ull, 488281249999999ull}},
+{{18446744073709551615ull, 390624999999999ull}},
+{{18446744073709551615ull, 312499999999999ull}},
+{{18446744073709551615ull, 499999999999999ull}},
+{{18446744073709551615ull, 399999999999999ull}},
+{{18446744073709551615ull, 319999999999999ull}},
+{{18446744073709551615ull, 511999999999999ull}},
+{{18446744073709551615ull, 409599999999999ull}},
+{{18446744073709551615ull, 327679999999999ull}},
+{{18446744073709551615ull, 524287999999999ull}},
+{{18446744073709551615ull, 419430399999999ull}},
+{{18446744073709551615ull, 335544319999999ull}},
+{{18446744073709551615ull, 536870911999999ull}},
+{{18446744073709551615ull, 429496729599999ull}},
+{{18446744073709551615ull, 343597383679999ull}},
+{{18446744073709551615ull, 549755813887999ull}},
+{{18446744073709551615ull, 439804651110399ull}},
+{{18446744073709551615ull, 351843720888319ull}},
+{{18446744073709551615ull, 281474976710655ull}},
+{{11068046444225730969ull, 450359962737049ull}},
+{{12543785970122495098ull, 360287970189639ull}},
+{{13724377590839906402ull, 288230376151711ull}},
+{{14580306515860029597ull, 461168601842738ull}},
+{{596198768462292708ull, 368934881474191ull}},
+{{15234354273737475459ull, 295147905179352ull}},
+{{9617571579012319442ull, 472236648286964ull}},
+{{11383406077951765876ull, 377789318629571ull}},
+{{5417376047619502378ull, 302231454903657ull}},
+{{12357150490933114128ull, 483570327845851ull}},
+{{6196371578004580979ull, 386856262276681ull}},
+{{1267748447661754460ull, 309485009821345ull}},
+{{2028397516258807136ull, 495176015714152ull}},
+{{12690764457232776679ull, 396140812571321ull}},
+{{6463262751044311020ull, 316912650057057ull}},
+{{14030569216412807955ull, 507060240091291ull}},
+{{7535106558388336041ull, 405648192073033ull}},
+{{13406782876194489479ull, 324518553658426ull}},
+{{14072154972427362520ull, 519229685853482ull}},
+{{3879026348458069369ull, 415383748682786ull}},
+{{17860616337734096788ull, 332306998946228ull}},
+{{6440893251923092922ull, 531691198313966ull}},
+{{1463365786796564015ull, 425352958651173ull}},
+{{8549390258921071858ull, 340282366920938ull}},
+{{9989675599531804650ull, 544451787073501ull}},
+{{4302391664883533397ull, 435561429658801ull}},
+{{18199308590874468010ull, 348449143727040ull}},
+{{10672149671689597200ull, 557518629963265ull}},
+{{8537719737351677760ull, 446014903970612ull}},
+{{17898222234107073178ull, 356811923176489ull}},
+{{18007926602027568865ull, 285449538541191ull}},
+{{2987240860050737922ull, 456719261665907ull}},
+{{13457839132266321307ull, 365375409332725ull}},
+{{10766271305813057046ull, 292300327466180ull}},
+{{17226034089300891273ull, 467680523945888ull}},
+{{2712780827214982049ull, 374144419156711ull}},
+{{16927619920739626932ull, 299315535325368ull}},
+{{4948098984731941152ull, 478904856520590ull}},
+{{3958479187785552922ull, 383123885216472ull}},
+{{14234829794454173307ull, 306499108173177ull}},
+{{8018332412159035998ull, 490398573077084ull}},
+{{10104014744469139122ull, 392318858461667ull}},
+{{704514166091490651ull, 313855086769334ull}},
+{{8505920295230205688ull, 502168138830934ull}},
+{{10494085050926074874ull, 401734511064747ull}},
+{{1016570411257039252ull, 321387608851798ull}},
+{{16383907916978904097ull, 514220174162876ull}},
+{{9417777518841212954ull, 411376139330301ull}},
+{{3844873200331060040ull, 329100911464241ull}},
+{{17219843564755427034ull, 526561458342785ull}},
+{{13775874851804341627ull, 421249166674228ull}},
+{{18399397510927293948ull, 336999333339382ull}},
+{{14681640758516029024ull, 539198933343012ull}},
+{{4366614977329002573ull, 431359146674410ull}},
+{{3493291981863202058ull, 345087317339528ull}},
+{{1899918356239212970ull, 552139707743245ull}},
+{{1519934684991370376ull, 441711766194596ull}},
+{{15973343006960737594ull, 353369412955676ull}},
+{{9089325590826679752ull, 282695530364541ull}},
+{{7164223315838866956ull, 452312848583266ull}},
+{{2042029837929183242ull, 361850278866613ull}},
+{{9012321499827167240ull, 289480223093290ull}},
+{{14419714399723467584ull, 463168356949264ull}},
+{{15225120334520684390ull, 370534685559411ull}},
+{{8490747452874637189ull, 296427748447529ull}},
+{{2517149480373688533ull, 474284397516047ull}},
+{{13081766028524681796ull, 379427518012837ull}},
+{{3086715193335924790ull, 303542014410270ull}},
+{{4938744309337479665ull, 485667223056432ull}},
+{{15019041891695714701ull, 388533778445145ull}},
+{{12015233513356571761ull, 310827022756116ull}},
+{{11845675991886694171ull, 497323236409786ull}},
+{{5787191978767445014ull, 397858589127829ull}},
+{{8319102397755866334ull, 318286871302263ull}},
+{{9621215021667475812ull, 509258994083621ull}},
+{{4007623202592070326ull, 407407195266897ull}},
+{{14274145006299387230ull, 325925756213517ull}},
+{{8081236751111378276ull, 521481209941628ull}},
+{{13843687030372923267ull, 417184967953302ull}},
+{{3696251994814517967ull, 333747974362642ull}},
+{{9603352006445139071ull, 533996758980227ull}},
+{{303983975672290610ull, 427197407184182ull}},
+{{11311233624763563458ull, 341757925747345ull}},
+{{18097973799621701533ull, 546812681195752ull}},
+{{7099681410213540580ull, 437450144956602ull}},
+{{16747791572396563433ull, 349960115965281ull}},
+{{971024812641129231ull, 559936185544451ull}},
+{{15534215109080544677ull, 447948948435560ull}},
+{{12427372087264435742ull, 358359158748448ull}},
+{{17320595299295369240ull, 286687326998758ull}},
+{{5576859590421128845ull, 458699723198014ull}},
+{{8150836487078813399ull, 366959778558411ull}},
+{{2831320374921140396ull, 293567822846729ull}},
+{{11908810229357645280ull, 469708516554766ull}},
+{{5837699368744205901ull, 375766813243813ull}},
+{{12048857124479185367ull, 300613450595050ull}},
+{{831427325457144971ull, 480981520952081ull}},
+{{15422537119333357270ull, 384785216761664ull}},
+{{16027378510208596139ull, 307828173409331ull}},
+{{18265107986849933176ull, 492525077454930ull}},
+{{14612086389479946541ull, 394020061963944ull}},
+{{15379017926325867556ull, 315216049571155ull}},
+{{6159684608411836474ull, 504345679313849ull}},
+{{8617096501471379502ull, 403476543451079ull}},
+{{10583026015919013925ull, 322781234760863ull}},
+{{13243492810728511957ull, 516449975617381ull}},
+{{6905445433840899242ull, 413159980493905ull}},
+{{5524356347072719393ull, 330527984395124ull}},
+{{16217667784800171676ull, 528844775032198ull}},
+{{1906087783614406371ull, 423075820025759ull}},
+{{5214219041633435420ull, 338460656020607ull}},
+{{12032099281355406996ull, 541537049632971ull}},
+{{5936330610342415273ull, 433229639706377ull}},
+{{15817110932499663188ull, 346583711765101ull}},
+{{17928679862515640455ull, 554533938824162ull}},
+{{6964246260528691717ull, 443627151059330ull}},
+{{5571397008422953374ull, 354901720847464ull}},
+{{8146466421480273022ull, 283921376677971ull}},
+{{5655648644884616189ull, 454274202684754ull}},
+{{8213867730649603275ull, 363419362147803ull}},
+{{13949791814003503266ull, 290735489718242ull}},
+{{7562271643437963933ull, 465176783549188ull}},
+{{13428514944234191793ull, 372141426839350ull}},
+{{10742811955387353434ull, 297713141471480ull}},
+{{17188499128619765495ull, 476341026354368ull}},
+{{2682752858670081426ull, 381072821083495ull}},
+{{2146202286936065141ull, 304858256866796ull}},
+{{14501970103323435195ull, 487773210986873ull}},
+{{533529638433017186ull, 390218568789499ull}},
+{{4116172525488324072ull, 312174855031599ull}},
+{{13964573670265139162ull, 499479768050558ull}},
+{{103612491986380360ull, 399583814440447ull}},
+{{11150936437814835258ull, 319667051552357ull}},
+{{3084103041536095120ull, 511467282483772ull}},
+{{13535328877454607065ull, 409173825987017ull}},
+{{3449565472479865006ull, 327339060789614ull}},
+{{12898002385451604656ull, 523742497263382ull}},
+{{2939704278877463078ull, 418993997810706ull}},
+{{17109158682069611755ull, 335195198248564ull}},
+{{16306607447085647839ull, 536312317197703ull}},
+{{1977239513442787302ull, 429049853758163ull}},
+{{8960489240238050488ull, 343239883006530ull}},
+{{14336782784380880780ull, 549183812810448ull}},
+{{401379783278973655ull, 439347050248359ull}},
+{{4010452641365089247ull, 351477640198687ull}},
+{{10106073040926053118ull, 562364224317899ull}},
+{{11774207247482752818ull, 449891379454319ull}},
+{{13108714612728112577ull, 359913103563455ull}},
+{{10486971690182490062ull, 287930482850764ull}},
+{{5711108260066253130ull, 460688772561223ull}},
+{{11947584237536823150ull, 368551018048978ull}},
+{{16936765019513279166ull, 294840814439182ull}},
+{{12341428772253605373ull, 471745303102692ull}},
+{{2494445388319063652ull, 377396242482154ull}},
+{{5684905125397161245ull, 301916993985723ull}},
+{{5406499385893547669ull, 483067190377157ull}},
+{{15393245952940569105ull, 386453752301725ull}},
+{{12314596762352455284ull, 309163001841380ull}},
+{{1256610746054376838ull, 494660802946209ull}},
+{{4694637411585411794ull, 395728642356967ull}},
+{{14823756373494060404ull, 316582913885573ull}},
+{{1581917309139034708ull, 506532662216918ull}},
+{{8644231476795048413ull, 405226129773534ull}},
+{{10604733996177949053ull, 324180903818827ull}},
+{{2210179134917077193ull, 518689446110124ull}},
+{{5457492122675572077ull, 414951556888099ull}},
+{{8055342512882367985ull, 331961245510479ull}},
+{{1820501576386057807ull, 531137992816767ull}},
+{{12524447705334577215ull, 424910394253413ull}},
+{{17398255793751482418ull, 339928315402730ull}},
+{{9390465196292820253ull, 543885304644369ull}},
+{{11201720971776166526ull, 435108243715495ull}},
+{{8961376777420933221ull, 348086594972396ull}},
+{{6959505214389672507ull, 556938551955834ull}},
+{{9256952986253648329ull, 445550841564667ull}},
+{{26864759519098016ull, 356440673251734ull}},
+{{3710840622357188736ull, 285152538601387ull}},
+{{9626693810513412301ull, 456244061762219ull}},
+{{11390703863152640164ull, 364995249409775ull}},
+{{9112563090522112131ull, 291996199527820ull}},
+{{14580100944835379410ull, 467193919244512ull}},
+{{4285383126384482882ull, 373755135395610ull}},
+{{3428306501107586305ull, 299004108316488ull}},
+{{1795941587030227766ull, 478406573306381ull}},
+{{16194148528591823505ull, 382725258645104ull}},
+{{16644667637615369127ull, 306180206916083ull}},
+{{4495375331733128665ull, 489888331065734ull}},
+{{7285649080128413255ull, 391910664852587ull}},
+{{16896565708328461573ull, 313528531882069ull}},
+{{15966458689099807548ull, 501645651011311ull}},
+{{9083818136537935715ull, 401316520809049ull}},
+{{10956403323972258895ull, 321053216647239ull}},
+{{6462198874129883263ull, 513685146635583ull}},
+{{12548456728787727257ull, 410948117308466ull}},
+{{6349416568288271482ull, 328758493846773ull}},
+{{6469717694519324048ull, 526013590154837ull}},
+{{16243820599841190208ull, 420810872123869ull}},
+{{16684405294614862490ull, 336648697699095ull}},
+{{8248304397674228368ull, 538637916318553ull}},
+{{13977341147623203341ull, 430910333054842ull}},
+{{3803175288614742026ull, 344728266443874ull}},
+{{13463778091267407888ull, 551565226310198ull}},
+{{18149720102497746957ull, 441252181048158ull}},
+{{3451729637772466596ull, 353001744838527ull}},
+{{13829430154443704246ull, 282401395870821ull}},
+{{14748390617626106148ull, 451842233393314ull}},
+{{15488061308842795241ull, 361473786714651ull}},
+{{8701100232332325870ull, 289179029371721ull}},
+{{6543062742247900745ull, 462686446994754ull}},
+{{8923799008540230919ull, 370149157595803ull}},
+{{14517736836316005382ull, 296119326076642ull}},
+{{8470983679137967319ull, 473790921722628ull}},
+{{14155484572794194501ull, 379032737378102ull}},
+{{3945690028751534954ull, 303226189902482ull}},
+{{10002452860744366251ull, 485161903843971ull}},
+{{4312613473853582677ull, 388129523075177ull}},
+{{14518137223308597111ull, 310503618460141ull}},
+{{15850321927809934732ull, 496805789536226ull}},
+{{8990908727506037462ull, 397444631628981ull}},
+{{3503378167262919646ull, 317955705303185ull}},
+{{5605405067620671435ull, 508729128485096ull}},
+{{794975239354626824ull, 406983302788077ull}},
+{{11704026635709432429ull, 325586642230461ull}},
+{{11347744987651271240ull, 520938627568738ull}},
+{{16456893619604837639ull, 416750902054990ull}},
+{{13165514895683870111ull, 333400721643992ull}},
+{{6307428574126550885ull, 533441154630388ull}},
+{{12424640488785061354ull, 426752923704310ull}},
+{{9939712391028049083ull, 341402338963448ull}},
+{{12214191010902968210ull, 546243742341517ull}},
+{{2392655179238553922ull, 436994993873214ull}},
+{{5603472958132753460ull, 349595995098571ull}},
+{{1586859103528584890ull, 559353592157714ull}},
+{{4958836097564778235ull, 447482873726171ull}},
+{{277720063309912265ull, 357986298980937ull}},
+{{11290222494873660782ull, 286389039184749ull}},
+{{6996309547572126281ull, 458222462695599ull}},
+{{9286396452799611348ull, 366577970156479ull}},
+{{11118465976981599402ull, 293262376125183ull}},
+{{14100196748428648720ull, 469219801800293ull}},
+{{212110954517188006ull, 375375841440235ull}},
+{{169688763613750405ull, 300300673152188ull}},
+{{15028897280749641941ull, 480481077043500ull}},
+{{12023117824599713552ull, 384384861634800ull}},
+{{9618494259679770842ull, 307507889307840ull}},
+{{15389590815487633347ull, 492012622892544ull}},
+{{16001021467132017001ull, 393610098314035ull}},
+{{12800817173705613601ull, 314888078651228ull}},
+{{16791958663187071438ull, 503820925841965ull}},
+{{13433566930549657150ull, 403056740673572ull}},
+{{3368155914955905074ull, 322445392538858ull}},
+{{1699700649187537795ull, 515912628062173ull}},
+{{8738458148833850882ull, 412730102449738ull}},
+{{14369464148550901352ull, 330184081959790ull}},
+{{4544398563971890548ull, 528294531135665ull}},
+{{3635518851177512438ull, 422635624908532ull}},
+{{13976461525167740920ull, 338108499926825ull}},
+{{3915594366558833856ull, 540973599882921ull}},
+{{17889870752214708378ull, 432778879906336ull}},
+{{10622547787029856379ull, 346223103925069ull}},
+{{5928030015022039237ull, 553956966280111ull}},
+{{1053075197275721066ull, 443165573024089ull}},
+{{4531808972562487176ull, 354532458419271ull}},
+{{18382842437017631034ull, 283625966735416ull}},
+{{3587106196034837392ull, 453801546776667ull}},
+{{13937731401053600883ull, 363041237421333ull}},
+{{82138676617149737ull, 290432989937067ull}},
+{{3820770697329349902ull, 464692783899307ull}},
+{{14124663002089210891ull, 371754227119445ull}},
+{{11299730401671368713ull, 297403381695556ull}},
+{{10700871013190369294ull, 475845410712890ull}},
+{{8560696810552295435ull, 380676328570312ull}},
+{{17916603892667567318ull, 304541062856249ull}},
+{{17598519784042376739ull, 487265700569999ull}},
+{{17768164641975811714ull, 389812560455999ull}},
+{{17903880528322559695ull, 311850048364799ull}},
+{{17578162401090364542ull, 498960077383679ull}},
+{{17751878735614201957ull, 399168061906943ull}},
+{{3133456544265630596ull, 319334449525555ull}},
+{{5013530470825008953ull, 510935119240888ull}},
+{{11389522006143827809ull, 408748095392710ull}},
+{{9111617604915062247ull, 326998476314168ull}},
+{{10889239353122189273ull, 523197562102669ull}},
+{{12400740297239661741ull, 418558049682135ull}},
+{{9920592237791729393ull, 334846439745708ull}},
+{{12183598765724856706ull, 535754303593133ull}},
+{{17125576642063706011ull, 428603442874506ull}},
+{{10011112498909054485ull, 342882754299605ull}},
+{{16017779998254487177ull, 548612406879368ull}},
+{{1746177554377858772ull, 438889925503495ull}},
+{{1396942043502287017ull, 351111940402796ull}},
+{{13303153713829390198ull, 561779104644473ull}},
+{{18021220600547332804ull, 449423283715578ull}},
+{{3348930036212135274ull, 359538626972463ull}},
+{{10057841658453528865ull, 287630901577970ull}},
+{{16092546653525646185ull, 460209442524752ull}},
+{{5495339693336696301ull, 368167554019802ull}},
+{{15464318198895088011ull, 294534043215841ull}},
+{{17364211488748320171ull, 471254469145346ull}},
+{{10202020376256745813ull, 377003575316277ull}},
+{{782918671521576004ull, 301602860253022ull}},
+{{4942018689176431930ull, 482564576404835ull}},
+{{3953614951341145544ull, 386051661123868ull}},
+{{10541589590556737082ull, 308841328899094ull}},
+{{5798496900665048361ull, 494146126238551ull}},
+{{949448705790128366ull, 395316900990841ull}},
+{{15516954223599743985ull, 316253520792672ull}},
+{{10069731498791949084ull, 506005633268276ull}},
+{{4366436384291648944ull, 404804506614621ull}},
+{{18250544366400960448ull, 323843605291696ull}},
+{{3375429283048164454ull, 518149768466715ull}},
+{{2700343426438531563ull, 414519814773372ull}},
+{{13228321185376556220ull, 331615851818697ull}},
+{{6407918637634848660ull, 530585362909916ull}},
+{{1436986095365968605ull, 424468290327933ull}},
+{{8528286505776595530ull, 339574632262346ull}},
+{{6266560779758732202ull, 543319411619754ull}},
+{{8702597438548896085ull, 434655529295803ull}},
+{{14340775580322937514ull, 347724423436642ull}},
+{{8187845669549058730ull, 556359077498628ull}},
+{{13928974165123067630ull, 445087261998902ull}},
+{{3764481702614633458ull, 356069809599122ull}},
+{{14079631806317437736ull, 284855847679297ull}},
+{{7770015631140259084ull, 455769356286876ull}},
+{{2526663690170296944ull, 364615485029501ull}},
+{{16778726211103878848ull, 291692388023600ull}},
+{{8399217864056654541ull, 466707820837761ull}},
+{{3030025476503413310ull, 373366256670209ull}},
+{{6113369195944640971ull, 298693005336167ull}},
+{{13470739528253335877ull, 477908808537867ull}},
+{{3397893993118848055ull, 382327046830294ull}},
+{{6407664009236988767ull, 305861637464235ull}},
+{{10252262414779182028ull, 489378619942776ull}},
+{{4512461117081435299ull, 391502895954221ull}},
+{{18367364152632789532ull, 313202316763376ull}},
+{{3562340941019090989ull, 501123706821403ull}},
+{{10228570382299093437ull, 400898965457122ull}},
+{{804158676355454103ull, 320719172365698ull}},
+{{16044049141136367858ull, 513150675785116ull}},
+{{9145890498167183963ull, 410520540628093ull}},
+{{14695410028017567817ull, 328416432502474ull}},
+{{12444609600602377538ull, 525466292003959ull}},
+{{13645036495223812353ull, 420373033603167ull}},
+{{3537331566695229236ull, 336298426882534ull}},
+{{13038428136196187425ull, 538077483012054ull}},
+{{14120091323698860263ull, 430461986409643ull}},
+{{228026614733357241ull, 344369589127715ull}},
+{{364842583573371585ull, 550991342604344ull}},
+{{3981222881600607591ull, 440793074083475ull}},
+{{3184978305280486073ull, 352634459266780ull}},
+{{2547982644224388858ull, 282107567413424ull}},
+{{11455469860242842820ull, 451372107861478ull}},
+{{16543073517678094902ull, 361097686289182ull}},
+{{5855761184658655275ull, 288878149031346ull}},
+{{1990520265970027794ull, 462205038450154ull}},
+{{5281765027517932559ull, 369764030760123ull}},
+{{11604109651498166693ull, 295811224608098ull}},
+{{14877226627655156386ull, 473297959372957ull}},
+{{4523083672640304462ull, 378638367498366ull}},
+{{18375862197079884863ull, 302910693998692ull}},
+{{14643984256360174488ull, 484657110397908ull}},
+{{647140960862408621ull, 387725688318327ull}},
+{{11585759212915657866ull, 310180550654661ull}},
+{{11158517111181231939ull, 496288881047458ull}},
+{{16305511318428806198ull, 397031104837966ull}},
+{{9355060240001134635ull, 317624883870373ull}},
+{{11278747569259905093ull, 508199814192597ull}},
+{{1644300425924103428ull, 406559851354078ull}},
+{{8694137970223103389ull, 325247881083262ull}},
+{{17599969567098875745ull, 520396609733219ull}},
+{{17769324468421010919ull, 416317287786575ull}},
+{{14215459574736808735ull, 333053830229260ull}},
+{{4297991245869342361ull, 532886128366817ull}},
+{{14506439440921204858ull, 426308902693453ull}},
+{{537105108511232917ull, 341047122154763ull}},
+{{15616763432585613960ull, 545675395447620ull}},
+{{12493410746068491168ull, 436540316358096ull}},
+{{6305379782112882611ull, 349232253086477ull}},
+{{13777956466122522501ull, 558771604938363ull}},
+{{18401062802381838647ull, 447017283950690ull}},
+{{14720850241905470918ull, 357613827160552ull}},
+{{4397982564040556088ull, 286091061728442ull}},
+{{10726120917206800064ull, 457745698765507ull}},
+{{1202199104281619405ull, 366196559012406ull}},
+{{15719154542392936816ull, 292957247209924ull}},
+{{14082600823602967937ull, 468731595535879ull}},
+{{14955429473624284673ull, 374985276428703ull}},
+{{896297134673696768ull, 299988221142963ull}},
+{{16191470674445556122ull, 479981153828740ull}},
+{{12953176539556444898ull, 383984923062992ull}},
+{{2983843602161335272ull, 307187938450394ull}},
+{{12152847392941957082ull, 491500701520630ull}},
+{{9722277914353565665ull, 393200561216504ull}},
+{{11467171146224762855ull, 314560448973203ull}},
+{{14658125019217710245ull, 503296718357125ull}},
+{{11726500015374168196ull, 402637374685700ull}},
+{{9381200012299334557ull, 322109899748560ull}},
+{{15009920019678935291ull, 515375839597696ull}},
+{{8318587201001237910ull, 412300671678157ull}},
+{{17722916205026721297ull, 329840537342525ull}},
+{{9909921854333202460ull, 527744859748041ull}},
+{{4238588668724651645ull, 422195887798433ull}},
+{{10769568564463541962ull, 337756710238746ull}},
+{{9852612073657846493ull, 540410736381994ull}},
+{{11571438473668187518ull, 432328589105595ull}},
+{{9257150778934550014ull, 345862871284476ull}},
+{{7432743616811459376ull, 553380594055162ull}},
+{{17014241337674898471ull, 442704475244129ull}},
+{{17300741884881829100ull, 354163580195303ull}},
+{{2772547063679732310ull, 283330864156243ull}},
+{{746726487145661373ull, 453329382649989ull}},
+{{4286730004458439422ull, 362663506119991ull}},
+{{18186779262534392830ull, 290130804895992ull}},
+{{14341451561087387235ull, 464209287833588ull}},
+{{405114804644178819ull, 371367430266871ull}},
+{{15081487102682984348ull, 297093944213496ull}},
+{{16751681734808954310ull, 475350310741594ull}},
+{{17090694202589073771ull, 380280248593275ull}},
+{{13672555362071259017ull, 304224198874620ull}},
+{{3429344505604462811ull, 486758718199393ull}},
+{{10122173233967390895ull, 389406974559514ull}},
+{{11787087401915823039ull, 311525579647611ull}},
+{{11480642213581496217ull, 498440927436178ull}},
+{{16563211400349017620ull, 398752741948942ull}},
+{{5871871490795393449ull, 319002193559154ull}},
+{{16773692014756450166ull, 510403509694646ull}},
+{{9729604797063249809ull, 408322807755717ull}},
+{{404986208166779201ull, 326658246204574ull}},
+{{8026675562550667368ull, 522653193927318ull}},
+{{13800038079524354541ull, 418122555141854ull}},
+{{14729379278361393956ull, 334498044113483ull}},
+{{1430913956926768390ull, 535196870581574ull}},
+{{4834079980283325035ull, 428157496465259ull}},
+{{7556612798968570351ull, 342525997172207ull}},
+{{15779929293091622885ull, 548041595475531ull}},
+{{8934594619731387985ull, 438433276380425ull}},
+{{7147675695785110388ull, 350746621104340ull}},
+{{11436281113256176621ull, 561194593766944ull}},
+{{12838373705346851620ull, 448955675013555ull}},
+{{10270698964277481296ull, 359164540010844ull}},
+{{11905907986163895360ull, 287331632008675ull}},
+{{602708704152680960ull, 459730611213881ull}},
+{{15239562222289786061ull, 367784488971104ull}},
+{{15880998592573739172ull, 294227591176883ull}},
+{{3273504859666520736ull, 470764145883014ull}},
+{{6308152702475126912ull, 376611316706411ull}},
+{{1357173347238191206ull, 301289053365129ull}},
+{{9550174985064926576ull, 482062485384206ull}},
+{{3950791173310030938ull, 385649988307365ull}},
+{{3160632938648024750ull, 308519990645892ull}},
+{{8746361516578749924ull, 493631985033427ull}},
+{{18065135657488730908ull, 394905588026741ull}},
+{{10762759711249074403ull, 315924470421393ull}},
+{{13531066723256608723ull, 505479152674229ull}},
+{{14514202193347197301ull, 404383322139383ull}},
+{{543315310452026871ull, 323506657711507ull}},
+{{4558653311465153318ull, 517610652338411ull}},
+{{18404317908139763947ull, 414088521870728ull}},
+{{3655407882286080188ull, 331270817496583ull}},
+{{2159303796915817977ull, 530033307994533ull}},
+{{9106140667016475028ull, 424026646395626ull}},
+{{3595563718871269699ull, 339221317116501ull}},
+{{16820948394419762489ull, 542754107386401ull}},
+{{9767409900793899668ull, 434203285909121ull}},
+{{4124579105893209411ull, 347362628727297ull}},
+{{10288675384171045381ull, 555780205963675ull}},
+{{8230940307336836305ull, 444624164770940ull}},
+{{6584752245869469044ull, 355699331816752ull}},
+{{16335848240921306204ull, 284559465453401ull}},
+{{311915482280717665ull, 455295144725443ull}},
+{{7628230015308394778ull, 364236115780354ull}},
+{{9791932826988626146ull, 291388892624283ull}},
+{{11977743708439891510ull, 466222228198853ull}},
+{{16960892596235733854ull, 372977782559082ull}},
+{{6190016447504766437ull, 298382226047266ull}},
+{{2525328686523805653ull, 477411561675626ull}},
+{{16777658208186685815ull, 381929249340500ull}},
+{{13422126566549348652ull, 305543399472400ull}},
+{{3028658432769406228ull, 488869439155841ull}},
+{{17180322005183166275ull, 391095551324672ull}},
+{{6365559974662712373ull, 312876441059738ull}},
+{{6495547144718429474ull, 500602305695581ull}},
+{{1507088901032833256ull, 400481844556465ull}},
+{{1205671120826266605ull, 320385475645172ull}},
+{{5618422608063936891ull, 512616761032275ull}},
+{{4494738086451149513ull, 410093408825820ull}},
+{{3595790469160919610ull, 328074727060656ull}},
+{{16821311194883202346ull, 524919563297049ull}},
+{{17146397770648472200ull, 419935650637639ull}},
+{{17406467031260688083ull, 335948520510111ull}},
+{{2024905546823728671ull, 537517632816179ull}},
+{{5309273252200893260ull, 430014106252943ull}},
+{{11626116231244535254ull, 344011285002354ull}},
+{{7533739525765525438ull, 550418056003767ull}},
+{{17095038064838151320ull, 440334444803013ull}},
+{{2607984007644790086ull, 352267555842411ull}},
+{{16843782465083473361ull, 281814044673928ull}},
+{{4813959055682095439ull, 450902471478286ull}},
+{{161818429803766028ull, 360721977182629ull}},
+{{3818803558584923146ull, 288577581746103ull}},
+{{2420736878993966710ull, 461724130793765ull}},
+{{1936589503195173368ull, 369379304635012ull}},
+{{12617318046781869664ull, 295503443708009ull}},
+{{9119662430625260493ull, 472805509932815ull}},
+{{7295729944500208394ull, 378244407946252ull}},
+{{16904630399825897685ull, 302595526357001ull}},
+{{1221966936528064034ull, 484152842171203ull}},
+{{8356271178706271873ull, 387322273736962ull}},
+{{17753063387190748468ull, 309857818989569ull}},
+{{17336854975279466580ull, 495772510383311ull}},
+{{10180135165481662941ull, 396618008306649ull}},
+{{11833456947127240676ull, 317294406645319ull}},
+{{7865484671177854112ull, 507671050632511ull}},
+{{2603038922200372966ull, 406136840506009ull}},
+{{5771779952502208696ull, 324909472404807ull}},
+{{12924196738745444237ull, 519855155847691ull}},
+{{6650008576254445066ull, 415884124678153ull}},
+{{12698704490487376699ull, 332707299742522ull}},
+{{5560531925812161426ull, 532331679588036ull}},
+{{759076725907818818ull, 425865343670429ull}},
+{{4296610195468165377ull, 340692274936343ull}},
+{{3185227498007154281ull, 545107639898149ull}},
+{{6237530813147633748ull, 436086111918519ull}},
+{{8679373465260017321ull, 348868889534815ull}},
+{{13886997544416027714ull, 558190223255704ull}},
+{{14798946850274732495ull, 446552178604563ull}},
+{{771111035994055026ull, 357241742883651ull}},
+{{15374284087762885313ull, 285793394306920ull}},
+{{6152110466711064886ull, 457269430891073ull}},
+{{12300386002852672555ull, 365815544712858ull}},
+{{17219006431765958690ull, 292652435770286ull}},
+{{1724968587632161642ull, 468243897232459ull}},
+{{5069323684847639637ull, 374595117785967ull}},
+{{15123505392103842679ull, 299676094228773ull}},
+{{2061515738914686348ull, 479481750766038ull}},
+{{9027910220615569724ull, 383585400612830ull}},
+{{7222328176492455779ull, 306868320490264ull}},
+{{487678638162198278ull, 490989312784423ull}},
+{{7768840540013579269ull, 392791450227538ull}},
+{{13593770061494684061ull, 314233160182030ull}},
+{{3303288024681942882ull, 502773056291249ull}},
+{{6331979234487464629ull, 402218445032999ull}},
+{{8754932202331882026ull, 321774756026399ull}},
+{{2939845079505280272ull, 514839609642239ull}},
+{{6041224878346134541ull, 411871687713791ull}},
+{{1143631087934997310ull, 329497350171033ull}},
+{{16587204999663636988ull, 527195760273652ull}},
+{{5891066370247088944ull, 421756608218922ull}},
+{{15780899540423402125ull, 337405286575137ull}},
+{{10492044005709802107ull, 539848458520220ull}},
+{{8393635204567841686ull, 431878766816176ull}},
+{{3025559348912363025ull, 345503013452941ull}},
+{{15908941402485511810ull, 552804821524705ull}},
+{{12727153121988409448ull, 442243857219764ull}},
+{{13871071312332637882ull, 353795085775811ull}},
+{{7407508235124199982ull, 283036068620649ull}},
+{{783966731972989002ull, 452857709793039ull}},
+{{4316522200320301525ull, 362286167834431ull}},
+{{18210613019223882512ull, 289828934267544ull}},
+{{18068934386532481051ull, 463726294828071ull}},
+{{10765798694484074517ull, 370981035862457ull}},
+{{1233941326103438967ull, 296784828689966ull}},
+{{13042352565991233317ull, 474855725903945ull}},
+{{10433882052792986654ull, 379884580723156ull}},
+{{4657756827492479000ull, 303907664578525ull}},
+{{7452410923987966400ull, 486252263325640ull}},
+{{5961928739190373120ull, 389001810660512ull}},
+{{15837589435578029465ull, 311201448528409ull}},
+{{14272096652699116175ull, 497922317645455ull}},
+{{11417677322159292940ull, 398337854116364ull}},
+{{12823490672469344675ull, 318670283293091ull}},
+{{13138887446467130834ull, 509872453268946ull}},
+{{6821761142431794344ull, 407897962615157ull}},
+{{16525455358171166445ull, 326318370092125ull}},
+{{7993984499364314696ull, 522109392147401ull}},
+{{2705838784749541434ull, 417687513717921ull}},
+{{16922066286767274440ull, 334150010974336ull}},
+{{1249864355634266841ull, 534640017558939ull}},
+{{4689240299249323796ull, 427712014047151ull}},
+{{62043424657548713ull, 342169611237721ull}},
+{{11167315923677808911ull, 547471377980353ull}},
+{{16312550368426067775ull, 437977102384282ull}},
+{{5671342665257033574ull, 350381681907426ull}},
+{{1695450634927433072ull, 560610691051882ull}},
+{{12424406952167677427ull, 448488552841505ull}},
+{{9939525561734141942ull, 358790842273204ull}},
+{{11640969264129223876ull, 287032673818563ull}},
+{{14936202007864847879ull, 459252278109701ull}},
+{{8259612791549967980ull, 367401822487761ull}},
+{{2918341418498064061ull, 293921457990209ull}},
+{{12048043899080723144ull, 470274332784334ull}},
+{{13327783934006488838ull, 376219466227467ull}},
+{{3283529517721370424ull, 300975572981974ull}},
+{{12632344857838013325ull, 481560916771158ull}},
+{{17484573515754231307ull, 385248733416926ull}},
+{{10298309997861474722ull, 308198986733541ull}},
+{{9098598367094538909ull, 493118378773666ull}},
+{{3589529878933720804ull, 394494703018933ull}},
+{{10250321532630797289ull, 315595762415146ull}},
+{{9021816822725455017ull, 504953219864234ull}},
+{{10906802272922274337ull, 403962575891387ull}},
+{{1346744188853998823ull, 323170060713110ull}},
+{{2154790702166398117ull, 517072097140976ull}},
+{{16481227820700759786ull, 413657677712780ull}},
+{{13184982256560607829ull, 330926142170224ull}},
+{{10027925166271241557ull, 529481827472359ull}},
+{{11711688947758903569ull, 423585461977887ull}},
+{{1990653528723302208ull, 338868369582310ull}},
+{{3185045645957283534ull, 542189391331696ull}},
+{{17305431775733468120ull, 433751513065356ull}},
+{{10154996605844864172ull, 347001210452285ull}},
+{{16247994569351782676ull, 555201936723656ull}},
+{{9309046840739515818ull, 444161549378925ull}},
+{{7447237472591612654ull, 355329239503140ull}},
+{{5957789978073290123ull, 284263391602512ull}},
+{{13221812779659174521ull, 454821426564019ull}},
+{{14266799038469249940ull, 363857141251215ull}},
+{{11413439230775399952ull, 291085713000972ull}},
+{{3504107510272998630ull, 465737140801556ull}},
+{{17560681267186040197ull, 372589712641244ull}},
+{{17737893828490742480ull, 298071770112995ull}},
+{{9933886051875636353ull, 476914832180793ull}},
+{{15325806470984329729ull, 381531865744634ull}},
+{{15949993991529374106ull, 305225492595707ull}},
+{{10762595127479357277ull, 488360788153132ull}},
+{{1231378472499665175ull, 390688630522506ull}},
+{{15742498036967373433ull, 312550904418004ull}},
+{{14119950414922066523ull, 500081447068807ull}},
+{{3917262702453832572ull, 400065157655046ull}},
+{{17891205420930707350ull, 320052126124036ull}},
+{{2800486970295759499ull, 512083401798459ull}},
+{{5929738390978517922ull, 409666721438767ull}},
+{{15811837157008545307ull, 327733377151013ull}},
+{{3162846562762210552ull, 524373403441622ull}},
+{{13598323694435499411ull, 419498722753297ull}},
+{{3499961326064578883ull, 335598978202638ull}},
+{{1910589306961415889ull, 536958365124221ull}},
+{{16285866704536774004ull, 429566692099376ull}},
+{{9339344548887508880ull, 343653353679501ull}},
+{{7564253648736193562ull, 549845365887202ull}},
+{{17119449363214685819ull, 439876292709761ull}},
+{{10006210675829838332ull, 351901034167809ull}},
+{{11694317355405780989ull, 281520827334247ull}},
+{{3953512509681608289ull, 450433323734796ull}},
+{{17920205266712927924ull, 360346658987836ull}},
+{{10646815398628432016ull, 288277327190269ull}},
+{{5966858193579760256ull, 461243723504431ull}},
+{{1084137740121897882ull, 368994978803545ull}},
+{{867310192097518305ull, 295195983042836ull}},
+{{12455742751581760258ull, 472313572868537ull}},
+{{2585896571781587560ull, 377850858294830ull}},
+{{2068717257425270048ull, 302280686635864ull}},
+{{10688645241364252724ull, 483649098617382ull}},
+{{1172218563607581532ull, 386919278893906ull}},
+{{15695170109853706519ull, 309535423115124ull}},
+{{14044225731540199461ull, 495256676984199ull}},
+{{14924729399974069892ull, 396205341587359ull}},
+{{15629132334721166236ull, 316964273269887ull}},
+{{10249216476586224686ull, 507142837231820ull}},
+{{8199373181268979748ull, 405714269785456ull}},
+{{2870149730273273475ull, 324571415828365ull}},
+{{4592239568437237561ull, 519314265325384ull}},
+{{7363140469491700372ull, 415451412260307ull}},
+{{16958558819819091267ull, 332361129808245ull}},
+{{8686950038000994412ull, 531777807693193ull}},
+{{14328257659884616176ull, 425422246154554ull}},
+{{15151954942649603264ull, 340337796923643ull}},
+{{2107035019787903283ull, 544540475077830ull}},
+{{1685628015830322626ull, 435632380062264ull}},
+{{5037851227406168424ull, 348505904049811ull}},
+{{681864334366048832ull, 557609446479698ull}},
+{{7924189096976659712ull, 446087557183758ull}},
+{{13718048907065148416ull, 356870045747006ull}},
+{{7285090310910208409ull, 285496036597605ull}},
+{{11656144497456333455ull, 456793658556168ull}},
+{{16703613227448887411ull, 365434926844934ull}},
+{{17052239396701020252ull, 292347941475947ull}},
+{{12526187775753991110ull, 467756706361516ull}},
+{{6331601405861282565ull, 374205365089213ull}},
+{{12443978754172846698ull, 299364292071370ull}},
+{{1463621932967003101ull, 478982867314193ull}},
+{{8549595175857423127ull, 383186293851354ull}},
+{{10529024955427848825ull, 306549035081083ull}},
+{{13157091113942647797ull, 490478456129733ull}},
+{{17904370520637938884ull, 392382764903786ull}},
+{{10634147601768440784ull, 313906211923029ull}},
+{{5946589718603774285ull, 502249939076847ull}},
+{{15825318219108750397ull, 401799951261477ull}},
+{{5281556945803179671ull, 321439961009182ull}},
+{{12139839928026997798ull, 514303937614691ull}},
+{{6022523127679687915ull, 411443150091753ull}},
+{{12196716131627570978ull, 329154520073402ull}},
+{{4757350551636472273ull, 526647232117444ull}},
+{{7495229256051088141ull, 421317785693955ull}},
+{{5996183404840870513ull, 337054228555164ull}},
+{{16972591077229213467ull, 539286765688262ull}},
+{{6199375232299550127ull, 431429412550610ull}},
+{{4959500185839640102ull, 345143530040488ull}},
+{{4245851482601513840ull, 552229648064781ull}},
+{{18154076445048852365ull, 441783718451824ull}},
+{{18212609970780992215ull, 353426974761459ull}},
+{{18259436791366704095ull, 282741579809167ull}},
+{{14457703607219085259ull, 452386527694668ull}},
+{{498116441549537238ull, 361909222155735ull}},
+{{398493153239629790ull, 289527377724588ull}},
+{{15394984304151048957ull, 463243804359340ull}},
+{{12315987443320839166ull, 370595043487472ull}},
+{{2474092325172850686ull, 296476034789978ull}},
+{{269198905534650775ull, 474361655663965ull}},
+{{215359124427720620ull, 379489324531172ull}},
+{{11240333743767907465ull, 303591459624937ull}},
+{{3227138731061010652ull, 485746335399900ull}},
+{{2581710984848808522ull, 388597068319920ull}},
+{{2065368787879046817ull, 310877654655936ull}},
+{{14372636504832205877ull, 497404247449497ull}},
+{{4119411574381944055ull, 397923397959598ull}},
+{{10674226888989375891ull, 318338718367678ull}},
+{{13389414207641091102ull, 509341949388285ull}},
+{{10711531366112872882ull, 407473559510628ull}},
+{{15947922722374118952ull, 325978847608502ull}},
+{{10759281096830949030ull, 521566156173604ull}},
+{{12296773692206669547ull, 417252924938883ull}},
+{{17216116583249156284ull, 333802339951106ull}},
+{{1720344830005277792ull, 534083743921771ull}},
+{{16133671122971863527ull, 427266995137416ull}},
+{{9217588083635580498ull, 341813596109933ull}},
+{{11058792119075018474ull, 546901753775893ull}},
+{{16225731324743835425ull, 437521403020714ull}},
+{{16669933874536978663ull, 350017122416571ull}},
+{{846452496065793599ull, 560027395866515ull}},
+{{677161996852634879ull, 448021916693212ull}},
+{{11609776041707838873ull, 358417533354569ull}},
+{{12977169648108181421ull, 286734026683655ull}},
+{{2316727363263538659ull, 458774442693849ull}},
+{{5542730705352741250ull, 367019554155079ull}},
+{{8123533379024103323ull, 293615643324063ull}},
+{{9308304591696654994ull, 469785029318501ull}},
+{{3757294858615413672ull, 375828023454801ull}},
+{{17763231145859972230ull, 300662418763840ull}},
+{{9974425759666403953ull, 481059870022145ull}},
+{{7979540607733123162ull, 384847896017716ull}},
+{{2694283671444588206ull, 307878316814173ull}},
+{{621505059569430807ull, 492605306902677ull}},
+{{11565250491881275615ull, 394084245522141ull}},
+{{5562851578763110169ull, 315267396417713ull}},
+{{5211213711279065947ull, 504427834268341ull}},
+{{479622154281342435ull, 403542267414673ull}},
+{{7762395352908894594ull, 322833813931738ull}},
+{{8730483749912321028ull, 516534102290781ull}},
+{{3295038185187946499ull, 413227281832625ull}},
+{{2636030548150357199ull, 330581825466100ull}},
+{{4217648877040571519ull, 528930920745760ull}},
+{{3374119101632457215ull, 423144736596608ull}},
+{{10077992910789786418ull, 338515789277286ull}},
+{{8746091027779837623ull, 541625262843658ull}},
+{{14375570451707690745ull, 433300210274926ull}},
+{{7811107546624242272ull, 346640168219941ull}},
+{{5119074445114966990ull, 554624269151906ull}},
+{{405910741350063268ull, 443699415321525ull}},
+{{324728593080050615ull, 354959532257220ull}},
+{{259782874464040492ull, 283967625805776ull}},
+{{11483699043368195756ull, 454348201289241ull}},
+{{5497610419952646282ull, 363478561031393ull}},
+{{11776785965445937672ull, 290782848825114ull}},
+{{7774811100487769306ull, 465252558120183ull}},
+{{13598546509874036091ull, 372202046496146ull}},
+{{7189488393157318549ull, 297761637196917ull}},
+{{15192530243793620002ull, 476418619515067ull}},
+{{4775326565551075355ull, 381134895612054ull}},
+{{7509610067182770607ull, 304907916489643ull}},
+{{8326027292750522649ull, 487852666383429ull}},
+{{10350170648942328442ull, 390282133106743ull}},
+{{15658834148637683400ull, 312225706485394ull}},
+{{13986088193594562471ull, 499561130376631ull}},
+{{7499521740133739653ull, 399648904301305ull}},
+{{5999617392106991723ull, 319719123441044ull}},
+{{16978085456855007403ull, 511550597505670ull}},
+{{13582468365484005922ull, 409240478004536ull}},
+{{7176625877645294415ull, 327392382403629ull}},
+{{414554960006740094ull, 523827811845807ull}},
+{{11399690412231123045ull, 419062249476645ull}},
+{{9119752329784898436ull, 335249799581316ull}},
+{{7212906098172016851ull, 536399679330106ull}},
+{{2080976063795703157ull, 429119743464085ull}},
+{{1664780851036562526ull, 343295794771268ull}},
+{{17421044620626141334ull, 549273271634028ull}},
+{{2868789252275182098ull, 439418617307223ull}},
+{{9673729031303966325ull, 351534893845778ull}},
+{{11788617635344435796ull, 562455830153245ull}},
+{{9430894108275548637ull, 449964664122596ull}},
+{{3855366471878528586ull, 359971731298077ull}},
+{{14152339621728553839ull, 287977385038461ull}},
+{{15265045765281865496ull, 460763816061538ull}},
+{{1143990167999761427ull, 368611052849231ull}},
+{{15672587393367450434ull, 294888842279384ull}},
+{{14008093385162189725ull, 471822147647015ull}},
+{{11206474708129751780ull, 377457718117612ull}},
+{{1586482137019980778ull, 301966174494090ull}},
+{{2538371419231969244ull, 483145879190544ull}},
+{{5720045950127485719ull, 386516703352435ull}},
+{{4576036760101988575ull, 309213362681948ull}},
+{{3632310001421271397ull, 494741380291117ull}},
+{{13973894445362748087ull, 395793104232893ull}},
+{{111069112064467500ull, 316634483386315ull}},
+{{177710579303148000ull, 506615173418104ull}},
+{{3831517278184428723ull, 405292138734483ull}},
+{{10443911452031363625ull, 324233710987586ull}},
+{{9331560693766361154ull, 518773937580138ull}},
+{{14843946184496909569ull, 415019150064110ull}},
+{{11875156947597527655ull, 332015320051288ull}},
+{{15310902301414133926ull, 531224512082061ull}},
+{{8559373026389396817ull, 424979609665649ull}},
+{{10536847235853427777ull, 339983687732519ull}},
+{{5790909133139753474ull, 543973900372031ull}},
+{{943378491769892456ull, 435179120297625ull}},
+{{754702793415913964ull, 348143296238100ull}},
+{{1207524469465462343ull, 557029273980960ull}},
+{{966019575572369875ull, 445623419184768ull}},
+{{8151513289941716546ull, 356498735347814ull}},
+{{10210559446695283560ull, 285198988278251ull}},
+{{8958197485228633050ull, 456318381245202ull}},
+{{18234604432408637409ull, 365054704996161ull}},
+{{10898334731184999604ull, 292043763996929ull}},
+{{6369289125670268397ull, 467270022395087ull}},
+{{16163477744761945687ull, 373816017916069ull}},
+{{16620131010551466873ull, 299052814332855ull}},
+{{8145465543172795381ull, 478484502932569ull}},
+{{10205721249280146628ull, 382787602346055ull}},
+{{8164576999424117302ull, 306230081876844ull}},
+{{1995276754852856714ull, 489968131002951ull}},
+{{16353616662849926664ull, 391974504802360ull}},
+{{13082893330279941331ull, 313579603841888ull}},
+{{17243280513705995807ull, 501727366147021ull}},
+{{10105275596222886322ull, 401381892917617ull}},
+{{705522847494488411ull, 321105514334094ull}},
+{{8507534185475002105ull, 513768822934550ull}},
+{{6806027348380001684ull, 411015058347640ull}},
+{{5444821878704001347ull, 328812046678112ull}},
+{{12401063820668312478ull, 526099274684979ull}},
+{{13610199871276560306ull, 420879419747983ull}},
+{{18266857526505068891ull, 336703535798386ull}},
+{{3401530339214737964ull, 538725657277419ull}},
+{{6410573086113700694ull, 430980525821935ull}},
+{{5128458468890960555ull, 344784420657548ull}},
+{{4516184735483626565ull, 551655073052077ull}},
+{{14680994232612632222ull, 441324058441661ull}},
+{{8055446571348195454ull, 353059246753329ull}},
+{{10133706071820466686ull, 282447397402663ull}},
+{{12524580900170836375ull, 451915835844261ull}},
+{{6330315905394758777ull, 361532668675409ull}},
+{{8753601539057717345ull, 289226134940327ull}},
+{{17695111277234258075ull, 462761815904523ull}},
+{{3088042577561675490ull, 370209452723619ull}},
+{{6159782876791250715ull, 296167562178895ull}},
+{{9855652602866001145ull, 473868099486232ull}},
+{{505824452808980269ull, 379094479588986ull}},
+{{15162054821214825508ull, 303275583671188ull}},
+{{2123194825492258874ull, 485240933873902ull}},
+{{12766602304619538069ull, 388192747099121ull}},
+{{6523933028953720132ull, 310554197679297ull}},
+{{14127641661067862534ull, 496886716286875ull}},
+{{11302113328854290027ull, 397509373029500ull}},
+{{9041690663083432022ull, 318007498423600ull}},
+{{14466705060933491235ull, 508811997477760ull}},
+{{11573364048746792988ull, 407049597982208ull}},
+{{16637388868481255037ull, 325639678385766ull}},
+{{794380486376635797ull, 521023485417227ull}},
+{{11703550833327039607ull, 416818788333781ull}},
+{{5673491851919721362ull, 333455030667025ull}},
+{{9077586963071554180ull, 533528049067240ull}},
+{{7262069570457243344ull, 426822439253792ull}},
+{{16877702100591525644ull, 341457951403033ull}},
+{{4868230472494979092ull, 546332722244854ull}},
+{{7583933192737893597ull, 437066177795883ull}},
+{{13445844183674135524ull, 349652942236706ull}},
+{{14134653064394796192ull, 559444707578730ull}},
+{{11307722451515836953ull, 447555766062984ull}},
+{{12735526775954579886ull, 358044612850387ull}},
+{{2809723791279843262ull, 286435690280310ull}},
+{{4495558066047749220ull, 458297104448496ull}},
+{{18353841711805840668ull, 366637683558796ull}},
+{{10993724554702762211ull, 293310146847037ull}},
+{{2832564028556778246ull, 469296234955260ull}},
+{{2266051222845422597ull, 375436987964208ull}},
+{{9191538607760158724ull, 300349590371366ull}},
+{{7327764142932433312ull, 480559344594186ull}},
+{{2172862499604036326ull, 384447475675349ull}},
+{{5427638814425139384ull, 307557980540279ull}},
+{{16062919732564043661ull, 492092768864446ull}},
+{{9160986971309324605ull, 393674215091557ull}},
+{{18396836021273190654ull, 314939372073245ull}},
+{{10988193560327553430ull, 503902995317193ull}},
+{{16169252477745863391ull, 403122396253754ull}},
+{{16624750796938601036ull, 322497917003003ull}},
+{{4463508386650299718ull, 515996667204806ull}},
+{{18328201968287881067ull, 412797333763844ull}},
+{{18351910389372215177ull, 330237867011075ull}},
+{{10916312549285992667ull, 528380587217721ull}},
+{{5043701224686883811ull, 422704469774177ull}},
+{{15103007423975238018ull, 338163575819341ull}},
+{{16786114248876560183ull, 541061721310946ull}},
+{{9739542584359337823ull, 432849377048757ull}},
+{{412936438003649612ull, 346279501639006ull}},
+{{11728744745031570349ull, 554047202622409ull}},
+{{13072344610767166602ull, 443237762097927ull}},
+{{3079178059129912635ull, 354590209678342ull}},
+{{13531388891529661078ull, 283672167742673ull}},
+{{17960873411705547401ull, 453875468388277ull}},
+{{6990001099880617274ull, 363100374710622ull}},
+{{16660047324130224789ull, 290480299768497ull}},
+{{11898680459640718370ull, 464768479629596ull}},
+{{5829595552970664373ull, 371814783703677ull}},
+{{15731722886602262468ull, 297451826962941ull}},
+{{17792058989079799302ull, 475922923140706ull}},
+{{10544298376521929118ull, 380738338512565ull}},
+{{8435438701217543295ull, 304590670810052ull}},
+{{17186050736689979595ull, 487345073296083ull}},
+{{2680794145126252706ull, 389876058636867ull}},
+{{13212681760326733135ull, 311900846909493ull}},
+{{17450942001780862692ull, 499041355055189ull}},
+{{17650102416166600477ull, 399233084044151ull}},
+{{10430733118191370058ull, 319386467235321ull}},
+{{9310475359622371447ull, 511018347576514ull}},
+{{11137729102439807481ull, 408814678061211ull}},
+{{5220834467209935661ull, 327051742448969ull}},
+{{15732032777019717705ull, 523282787918350ull}},
+{{12585626221615774164ull, 418626230334680ull}},
+{{10068500977292619331ull, 334900984267744ull}},
+{{5041555119442459960ull, 535841574828391ull}},
+{{343895280812057645ull, 428673259862713ull}},
+{{7653813854133466762ull, 342938607890170ull}},
+{{12246102166613546820ull, 548701772624272ull}},
+{{2418184103807016809ull, 438961418099418ull}},
+{{9313244912529434094ull, 351169134479534ull}},
+{{3833145415821363581ull, 561870615167255ull}},
+{{3066516332657090864ull, 449496492133804ull}},
+{{6142561880867583015ull, 359597193707043ull}},
+{{12292747134177887058ull, 287677754965634ull}},
+{{8600348970458888324ull, 460284407945015ull}},
+{{6880279176367110659ull, 368227526356012ull}},
+{{16572269785319419497ull, 294582021084809ull}},
+{{15447585212285340225ull, 471331233735695ull}},
+{{12358068169828272180ull, 377064986988556ull}},
+{{6197105721120707421ull, 301651989590845ull}},
+{{9915369153793131873ull, 482643183345352ull}},
+{{553597693550684852ull, 386114546676282ull}},
+{{11510924599066278851ull, 308891637341025ull}},
+{{18417479358506046162ull, 494226619745640ull}},
+{{14733983486804836930ull, 395381295796512ull}},
+{{4408489159960048897ull, 316305036637210ull}},
+{{7053582655936078236ull, 506088058619536ull}},
+{{1953517310006952266ull, 404870446895629ull}},
+{{5252162662747472136ull, 323896357516503ull}},
+{{4714111445654045094ull, 518234172026405ull}},
+{{3771289156523236075ull, 414587337621124ull}},
+{{6706380139960499183ull, 331669870096899ull}},
+{{18108905853420619340ull, 530671792155038ull}},
+{{3419078238510764502ull, 424537433724031ull}},
+{{17492657849776252894ull, 339629946979224ull}},
+{{16920206115416273662ull, 543407915166759ull}},
+{{17225513707074929252ull, 434726332133407ull}},
+{{6401713336176122755ull, 347781065706726ull}},
+{{2864043708397975763ull, 556449705130762ull}},
+{{13359281410944111580ull, 445159764104609ull}},
+{{14376773943497199587ull, 356127811283687ull}},
+{{4122721525313939023ull, 284902249026950ull}},
+{{6596354440502302437ull, 455843598443120ull}},
+{{5277083552401841949ull, 364674878754496ull}},
+{{532318027179563236ull, 291739903003597ull}},
+{{4541057658229211502ull, 466783844805755ull}},
+{{3632846126583369201ull, 373427075844604ull}},
+{{6595625716008605684ull, 298741660675683ull}},
+{{6863652330871858772ull, 477986657081093ull}},
+{{12869619494181307664ull, 382389325664874ull}},
+{{13985044410086956454ull, 305911460531899ull}},
+{{11308024611913399357ull, 489458336851039ull}},
+{{12735768504272629809ull, 391566669480831ull}},
+{{6499265988676193524ull, 313253335584665ull}},
+{{10398825581881909638ull, 501205336935464ull}},
+{{12008409280247438034ull, 400964269548371ull}},
+{{5917378609456040104ull, 320771415638697ull}},
+{{13157154589871574489ull, 513234265021915ull}},
+{{10525723671897259591ull, 410587412017532ull}},
+{{1041881308033987027ull, 328469929614026ull}},
+{{12735056537080110212ull, 525551887382441ull}},
+{{6498696414922177847ull, 420441509905953ull}},
+{{12577654761421562924ull, 336353207924762ull}},
+{{5366852359306859385ull, 538165132679620ull}},
+{{4293481887445487508ull, 430532106143696ull}},
+{{18192180768924031299ull, 344425684914956ull}},
+{{3282047527085077817ull, 551081095863931ull}},
+{{17383033280635703546ull, 440864876691144ull}},
+{{17595775439250473160ull, 352691901352915ull}},
+{{14076620351400378528ull, 282153521082332ull}},
+{{7765197303272964352ull, 451445633731732ull}},
+{{17280204286844102451ull, 361156506985385ull}},
+{{13824163429475281961ull, 288925205588308ull}},
+{{18429312672418540814ull, 462280328941293ull}},
+{{3675403693709101682ull, 369824263153035ull}},
+{{2940322954967281345ull, 295859410522428ull}},
+{{1015167913205739830ull, 473375056835885ull}},
+{{812134330564591864ull, 378700045468708ull}},
+{{8028405093935494137ull, 302960036374966ull}},
+{{5466750520812969973ull, 484736058199946ull}},
+{{684051601908465655ull, 387788846559957ull}},
+{{11615287725752503494ull, 310231077247965ull}},
+{{137716287494453974ull, 496369723596745ull}},
+{{110173029995563179ull, 397095778877396ull}},
+{{14845533682964091836ull, 317676623101916ull}},
+{{16374156263258726292ull, 508282596963066ull}},
+{{9409976195865070710ull, 406626077570453ull}},
+{{14906678586175877214ull, 325300862056362ull}},
+{{9093290478913762251ull, 520481379290180ull}},
+{{7274632383131009800ull, 416385103432144ull}},
+{{9509054721246718163ull, 333108082745715ull}},
+{{15214487553994749062ull, 532972932393144ull}},
+{{15860938857937709572ull, 426378345914515ull}},
+{{12688751086350167658ull, 341102676731612ull}},
+{{5544606479192626960ull, 545764282770580ull}},
+{{4435685183354101568ull, 436611426216464ull}},
+{{7237896961425191577ull, 349289140973171ull}},
+{{4201937508796485878ull, 558862625557074ull}},
+{{7050898821779099025ull, 447090100445659ull}},
+{{9330067872165189543ull, 357672080356527ull}},
+{{85356668248330988ull, 286137664285222ull}},
+{{3825919483939239905ull, 457820262856355ull}},
+{{3060735587151391924ull, 366256210285084ull}},
+{{6137937284463023862ull, 293004968228067ull}},
+{{13510048469882748503ull, 468807949164907ull}},
+{{3429341146422378156ull, 375046359331926ull}},
+{{17500868176105543817ull, 300037087465540ull}},
+{{9554645008059318492ull, 480059339944865ull}},
+{{7643716006447454793ull, 384047471955892ull}},
+{{17183019249383694804ull, 307237977564713ull}},
+{{5356737910562449748ull, 491580764103542ull}},
+{{15353436772675690768ull, 393264611282833ull}},
+{{1214702973914821645ull, 314611689026267ull}},
+{{5632873573005624955ull, 503378702442027ull}},
+{{15574345302630230933ull, 402702961953621ull}},
+{{8770127427362274423ull, 322162369562897ull}},
+{{17721552698521549401ull, 515459791300635ull}},
+{{14177242158817239521ull, 412367833040508ull}},
+{{273747282828060647ull, 329894266432407ull}},
+{{4127344467266807358ull, 527830826291851ull}},
+{{18059270832781087179ull, 422264661033480ull}},
+{{14447416666224869743ull, 337811728826784ull}},
+{{12047820221734060620ull, 540498766122855ull}},
+{{9638256177387248496ull, 432399012898284ull}},
+{{11399953756651709120ull, 345919210318627ull}},
+{{3482530751675093299ull, 553470736509804ull}},
+{{6475373416081984963ull, 442776589207843ull}},
+{{12558996362349408616ull, 354221271366274ull}},
+{{13736545904621437216ull, 283377017093019ull}},
+{{10910427003168568577ull, 453403227348831ull}},
+{{5038992787792944538ull, 362722581879065ull}},
+{{4031194230234355630ull, 290178065503252ull}},
+{{10139259583116879332ull, 464284904805203ull}},
+{{15490105295977324112ull, 371427923844162ull}},
+{{5013386607298038643ull, 297142339075330ull}},
+{{8021418571676861829ull, 475427742520528ull}},
+{{13795832486825310110ull, 380342194016422ull}},
+{{3657968359976427441ull, 304273755213138ull}},
+{{2163400561220373583ull, 486838008341021ull}},
+{{16488115707943940159ull, 389470406672816ull}},
+{{9501143751613241804ull, 311576325338253ull}},
+{{11512481187839276563ull, 498522120541205ull}},
+{{9209984950271421251ull, 398817696432964ull}},
+{{11057336774959047324ull, 319054157146371ull}},
+{{10313041210450655072ull, 510486651434194ull}},
+{{11939781783102434380ull, 408389321147355ull}},
+{{9551825426481947504ull, 326711456917884ull}},
+{{4214874238145385037ull, 522738331068615ull}},
+{{3371899390516308030ull, 418190664854892ull}},
+{{13765565956638777393ull, 334552531883913ull}},
+{{18335556715880133507ull, 535284051014261ull}},
+{{10979096557962196482ull, 428227240811409ull}},
+{{12472626061111667509ull, 342581792649127ull}},
+{{5198806438811026721ull, 548130868238604ull}},
+{{7848393965790731700ull, 438504694590883ull}},
+{{13657412802116406006ull, 350803755672706ull}},
+{{14473162853902428964ull, 561286009076330ull}},
+{{11578530283121943171ull, 449028807261064ull}},
+{{12952173041239464860ull, 359223045808851ull}},
+{{6672389618249661565ull, 287378436647081ull}},
+{{3297125759715637858ull, 459805498635330ull}},
+{{2637700607772510286ull, 367844398908264ull}},
+{{5799509300959918552ull, 294275519126611ull}},
+{{1900517252052049037ull, 470840830602578ull}},
+{{8899111431125459876ull, 376672664482062ull}},
+{{18187335589126098870ull, 301338131585649ull}},
+{{18031690498376027223ull, 482141010537039ull}},
+{{18114701213442732101ull, 385712808429631ull}},
+{{10802412156012275358ull, 308570246743705ull}},
+{{17283859449619640573ull, 493712394789928ull}},
+{{2759041115469981489ull, 394969915831943ull}},
+{{9585930521859805837ull, 315975932665554ull}},
+{{4269442390749958370ull, 505561492264887ull}},
+{{14483600356825697666ull, 404449193811909ull}},
+{{15276229100202468456ull, 323559355049527ull}},
+{{9684571301356308236ull, 517694968079244ull}},
+{{11437005855826956912ull, 414155974463395ull}},
+{{9149604684661565530ull, 331324779570716ull}},
+{{7260669865974684201ull, 530119647313146ull}},
+{{2119187078037837038ull, 424095717850517ull}},
+{{12763396106656000600ull, 339276574280413ull}},
+{{16732084955907690637ull, 542842518848661ull}},
+{{9696319149984242186ull, 434274015078929ull}},
+{{11446404134729304072ull, 347419212063143ull}},
+{{14624897800824976192ull, 555870739301029ull}},
+{{15389267055401891277ull, 444696591440823ull}},
+{{1243367200095782052ull, 355757273152659ull}},
+{{4684042574818535965ull, 284605818522127ull}},
+{{11183816934451567867ull, 455369309635403ull}},
+{{16325751177045074940ull, 364295447708322ull}},
+{{5681903312152239305ull, 291436358166658ull}},
+{{5401696484701672566ull, 466298173066653ull}},
+{{11700054817245158699ull, 373038538453322ull}},
+{{1981346224312306313ull, 298430830762658ull}},
+{{17927549217867331393ull, 477489329220252ull}},
+{{6963341744810044468ull, 381991463376202ull}},
+{{16638719840073766544ull, 305593170700961ull}},
+{{796510040924654208ull, 488949073121539ull}},
+{{4326556847481633690ull, 391159258497231ull}},
+{{18218640736952948244ull, 312927406797784ull}},
+{{18081778734898986222ull, 500683850876455ull}},
+{{14465422987919188977ull, 400547080701164ull}},
+{{15261687205077261505ull, 320437664560931ull}},
+{{17040001898639797762ull, 512700263297490ull}},
+{{13632001518911838209ull, 410160210637992ull}},
+{{3526903585645649921ull, 328128168510394ull}},
+{{13021743366516860520ull, 525005069616630ull}},
+{{10417394693213488416ull, 420004055693304ull}},
+{{12023264569312701056ull, 336003244554643ull}},
+{{15547874496158411367ull, 537605191287429ull}},
+{{16127648411668639416ull, 430084153029943ull}},
+{{1834072285109180563ull, 344067322423955ull}},
+{{2934515656174688902ull, 550507715878328ull}},
+{{9726310154423571768ull, 440406172702662ull}},
+{{402350494055036768ull, 352324938162130ull}},
+{{321880395244029414ull, 281859950529704ull}},
+{{7893706261874267709ull, 450975920847526ull}},
+{{2625616194757503844ull, 360780736678021ull}},
+{{16857888214773644368ull, 288624589342416ull}},
+{{1147179440444458727ull, 461799342947867ull}},
+{{11985789996581297951ull, 369439474358293ull}},
+{{16967329626748859007ull, 295551579486634ull}},
+{{16079680958572443442ull, 472882527178615ull}},
+{{12863744766857954753ull, 378306021742892ull}},
+{{2912298184002543156ull, 302644817394314ull}},
+{{12038374723887889697ull, 484231707830902ull}},
+{{2252002149626491111ull, 387385366264722ull}},
+{{12869648163926923858ull, 309908293011777ull}},
+{{5834041803315436880ull, 495853268818844ull}},
+{{8356582257394259827ull, 396682615055075ull}},
+{{6685265805915407862ull, 317346092044060ull}},
+{{10696425289464652579ull, 507753747270496ull}},
+{{4867791416829811740ull, 406202997816397ull}},
+{{14962279577689580362ull, 324962398253117ull}},
+{{9182252065335687286ull, 519939837204988ull}},
+{{14724499281752370475ull, 415951869763990ull}},
+{{11779599425401896380ull, 332761495811192ull}},
+{{4089963821675392916ull, 532418393297908ull}},
+{{10650668686824134979ull, 425934714638326ull}},
+{{4831186134717397660ull, 340747771710661ull}},
+{{351200186064015609ull, 545196434737058ull}},
+{{7659657778335033134ull, 436157147789646ull}},
+{{2438377407926116184ull, 348925718231717ull}},
+{{7590752667423696218ull, 558281149170747ull}},
+{{17140648578164687944ull, 446624919336597ull}},
+{{6333821233047929708ull, 357299935469278ull}},
+{{12445754615922164413ull, 285839948375422ull}},
+{{5155812126507821768ull, 457343917400676ull}},
+{{435300886464347091ull, 365875133920541ull}},
+{{15105635968139118966ull, 292700107136432ull}},
+{{9411622290054949053ull, 468320171418292ull}},
+{{150600202560138596ull, 374656137134634ull}},
+{{3809828976790021200ull, 299724909707707ull}},
+{{9785075177605944243ull, 479559855532331ull}},
+{{4138711327342845071ull, 383647884425865ull}},
+{{3310969061874276057ull, 306918307540692ull}},
+{{8986899313740752014ull, 491069292065107ull}},
+{{18257565895218332581ull, 392855433652085ull}},
+{{14606052716174666065ull, 314284346921668ull}},
+{{1233591457428003764ull, 502854955074670ull}},
+{{986873165942403011ull, 402283964059736ull}},
+{{15546893791721563702ull, 321827171247788ull}},
+{{2738937178303039984ull, 514923473996462ull}},
+{{13259196186868162957ull, 411938779197169ull}},
+{{14296705764236440689ull, 329551023357735ull}},
+{{4427985149068753486ull, 527281637372377ull}},
+{{14610434563480733758ull, 421825309897901ull}},
+{{7998998836042676683ull, 337460247918321ull}},
+{{5419700508184462047ull, 539936396669314ull}},
+{{8025109221289479961ull, 431949117335451ull}},
+{{2730738562289673645ull, 345559293868361ull}},
+{{15437228143889208802ull, 552894870189377ull}},
+{{4971084885627546395ull, 442315896151502ull}},
+{{15044914352727768086ull, 353852716921201ull}},
+{{8346582667440304145ull, 283082173536961ull}},
+{{5975834638420665987ull, 452931477659138ull}},
+{{12159365340220353436ull, 362345182127310ull}},
+{{9727492272176282748ull, 289876145701848ull}},
+{{11874638820740142074ull, 463801833122957ull}},
+{{2121013427108293013ull, 371041466498366ull}},
+{{16454206000654275703ull, 296833173198692ull}},
+{{11569334342079199833ull, 474933077117908ull}},
+{{16634165103147180512ull, 379946461694326ull}},
+{{9617983267775834087ull, 303957169355461ull}},
+{{8010075598957513892ull, 486331470968738ull}},
+{{13786758108649831760ull, 389065176774990ull}},
+{{11029406486919865408ull, 311252141419992ull}},
+{{2889655120104143360ull, 498003426271988ull}},
+{{9690421725567135335ull, 398402741017590ull}},
+{{7752337380453708268ull, 318722192814072ull}},
+{{16093088623467843552ull, 509955508502515ull}},
+{{12874470898774274841ull, 407964406802012ull}},
+{{2920879089535599226ull, 326371525441610ull}},
+{{4673406543256958763ull, 522194440706576ull}},
+{{49376419863656687ull, 417755552565261ull}},
+{{14796896394858566642ull, 334204442052208ull}},
+{{1538941343322244689ull, 534727107283534ull}},
+{{4920501889399706074ull, 427781685826827ull}},
+{{15004447955745495829ull, 342225348661461ull}},
+{{16628419099708972680ull, 547560557858338ull}},
+{{2234688835541447174ull, 438048446286671ull}},
+{{16545146327400799032ull, 350438757029336ull}},
+{{646792420647906189ull, 560702011246939ull}},
+{{4206782751260235274ull, 448561608997551ull}},
+{{18122821459975829512ull, 358849287198040ull}},
+{{14498257167980663610ull, 287079429758432ull}},
+{{8439816209801420483ull, 459327087613492ull}},
+{{17819899412066867356ull, 367461670090793ull}},
+{{3187873085427762915ull, 293969336072635ull}},
+{{5100596936684420664ull, 470350937716216ull}},
+{{391128734605626208ull, 376280750172973ull}},
+{{7691600617168321613ull, 301024600138378ull}},
+{{8617212172727404258ull, 481639360221405ull}},
+{{6893769738181923406ull, 385311488177124ull}},
+{{9204364605287449048ull, 308249190541699ull}},
+{{3658936924234187507ull, 493198704866719ull}},
+{{6616498354129260329ull, 394558963893375ull}},
+{{5293198683303408263ull, 315647171114700ull}},
+{{8469117893285453221ull, 505035473783520ull}},
+{{6775294314628362577ull, 404028379026816ull}},
+{{1730886636960779738ull, 323222703221453ull}},
+{{17526813878104888874ull, 517156325154324ull}},
+{{17710799917225821422ull, 413725060123459ull}},
+{{17857988748522567461ull, 330980048098767ull}},
+{{13815386738668466645ull, 529568076958028ull}},
+{{18431007020418593962ull, 423654461566422ull}},
+{{7366107986851054523ull, 338923569253138ull}},
+{{8096423964219776915ull, 542277710805021ull}},
+{{2787790356633911208ull, 433822168644017ull}},
+{{13298278729532859936ull, 347057734915213ull}},
+{{17587897152510665575ull, 555292375864341ull}},
+{{10380968907266622137ull, 444233900691473ull}},
+{{15683472755297118356ull, 355387120553178ull}},
+{{1478731760011963715ull, 284309696442543ull}},
+{{17123366074986783237ull, 454895514308068ull}},
+{{2630646415763695620ull, 363916411446455ull}},
+{{2104517132610956496ull, 291133129157164ull}},
+{{10745925041661351040ull, 465813006651462ull}},
+{{1218042403845260185ull, 372650405321170ull}},
+{{974433923076208148ull, 298120324256936ull}},
+{{12627140721147664007ull, 476992518811097ull}},
+{{2723014947434310559ull, 381594015048878ull}},
+{{9557109587431269094ull, 305275212039102ull}},
+{{533980080922389257ull, 488440339262564ull}},
+{{4116532879479821729ull, 390752271410051ull}},
+{{18050621562551498676ull, 312601817128040ull}},
+{{10434250426372846266ull, 500162907404865ull}},
+{{8347400341098277012ull, 400130325923892ull}},
+{{17745966717104352579ull, 320104260739113ull}},
+{{6257453858915502188ull, 512166817182582ull}},
+{{16074009531358132720ull, 409733453746065ull}},
+{{12859207625086506176ull, 327786762996852ull}},
+{{5817336941170768589ull, 524458820794964ull}},
+{{8343218367678525194ull, 419567056635971ull}},
+{{2985225879400909832ull, 335653645308777ull}},
+{{8465710221783366055ull, 537045832494043ull}},
+{{14151265806910513490ull, 429636665995234ull}},
+{{15010361460270321115ull, 343709332796187ull}},
+{{9259183077464872492ull, 549934932473900ull}},
+{{7407346461971897993ull, 439947945979120ull}},
+{{5925877169577518395ull, 351958356783296ull}},
+{{1051352920920104392ull, 281566685426637ull}},
+{{5371513488214077351ull, 450506696682619ull}},
+{{7986559605313172204ull, 360405357346095ull}},
+{{6389247684250537763ull, 288324285876876ull}},
+{{2844098665317039775ull, 461318857403002ull}},
+{{13343325376479362790ull, 369055085922401ull}},
+{{6985311486441579908ull, 295244068737921ull}},
+{{3797800748822707207ull, 472390509980674ull}},
+{{6727589413800076089ull, 377912407984539ull}},
+{{9071420345781971194ull, 302329926387631ull}},
+{{7135574923767333265ull, 483727882220210ull}},
+{{5708459939013866612ull, 386982305776168ull}},
+{{11945465580694913936ull, 309585844620934ull}},
+{{8044698484886131328ull, 495337351393495ull}},
+{{6435758787908905062ull, 396269881114796ull}},
+{{1459258215585213726ull, 317015904891837ull}},
+{{6024161959678252286ull, 507225447826939ull}},
+{{8508678382484512152ull, 405780358261551ull}},
+{{3117593891245699398ull, 324624286609241ull}},
+{{16056196670218850007ull, 519398858574785ull}},
+{{12844957336175080005ull, 415519086859828ull}},
+{{17654663498423884651ull, 332415269487862ull}},
+{{13490066338510574148ull, 531864431180580ull}},
+{{10792053070808459319ull, 425491544944464ull}},
+{{12322991271388677778ull, 340393235955571ull}},
+{{12338088404738063799ull, 544629177528914ull}},
+{{13559819538532361362ull, 435703342023131ull}},
+{{7158506816083978766ull, 348562673618505ull}},
+{{11453610905734366026ull, 557700277789608ull}},
+{{16541586354071313467ull, 446160222231686ull}},
+{{9543920268515140451ull, 356928177785349ull}},
+{{11324485029554022684ull, 285542542228279ull}},
+{{7051129603060705325ull, 456868067565247ull}},
+{{16708950126674295229ull, 365494454052197ull}},
+{{5988462471855615537ull, 292395563241758ull}},
+{{5892191140227074536ull, 467832901186813ull}},
+{{12092450541665480275ull, 374266320949450ull}},
+{{9673960433332384220ull, 299413056759560ull}},
+{{15478336693331814752ull, 479060890815296ull}},
+{{8693320539923541478ull, 383248712652237ull}},
+{{18022702876164564152ull, 306598970121789ull}},
+{{17768278157637571674ull, 490558352194863ull}},
+{{3146576081884326370ull, 392446681755891ull}},
+{{17274656124475102389ull, 313957345404712ull}},
+{{12882054540192522529ull, 502331752647540ull}},
+{{10305643632154018023ull, 401865402118032ull}},
+{{865817276239393772ull, 321492321694426ull}},
+{{12453354086208761005ull, 514387714711081ull}},
+{{6273334454225098481ull, 411510171768865ull}},
+{{5018667563380078785ull, 329208137415092ull}},
+{{11719216916150036379ull, 526733019864147ull}},
+{{1996675903436208457ull, 421386415891318ull}},
+{{8976038352232787412ull, 337109132713054ull}},
+{{3293614919346728889ull, 539374612340887ull}},
+{{13702938379703114081ull, 431499689872709ull}},
+{{14651699518504401588ull, 345199751898167ull}},
+{{8685323970639401248ull, 552319603037068ull}},
+{{14326956805995341645ull, 441855682429654ull}},
+{{15150914259538183639ull, 353484545943723ull}},
+{{1052684963404815941ull, 282787636754979ull}},
+{{9062993570931526153ull, 452460218807966ull}},
+{{3561046042003310599ull, 361968175046373ull}},
+{{10227534463086469126ull, 289574540037098ull}},
+{{12674706326196440278ull, 463319264059357ull}},
+{{2761067431473331576ull, 370655411247486ull}},
+{{16966249204146306553ull, 296524328997988ull}},
+{{5009905838182628546ull, 474438926396782ull}},
+{{15075971114771833807ull, 379551141117425ull}},
+{{12060776891817467045ull, 303640912893940ull}},
+{{850498953198395657ull, 485825460630305ull}},
+{{680399162558716525ull, 388660368504244ull}},
+{{4233668144788883543ull, 310928294803395ull}},
+{{6773869031662213670ull, 497485271685432ull}},
+{{16487141669555501905ull, 397988217348345ull}},
+{{13189713335644401524ull, 318390573878676ull}},
+{{13724843707547221792ull, 509424918205882ull}},
+{{3601177336553956787ull, 407539934564706ull}},
+{{17638337128210806723ull, 326031947651764ull}},
+{{17153292960911559787ull, 521651116242823ull}},
+{{2654587924503516860ull, 417320892994259ull}},
+{{5813019154344723811ull, 333856714395407ull}},
+{{12990179461693468421ull, 534170743032651ull}},
+{{6702794754612864414ull, 427336594426121ull}},
+{{1672886988948381208ull, 341869275540897ull}},
+{{6365967997059320256ull, 546990840865435ull}},
+{{5092774397647456204ull, 437592672692348ull}},
+{{11452917147601785610ull, 350074138153878ull}},
+{{14635318621420946653ull, 560118621046205ull}},
+{{11708254897136757322ull, 448094896836964ull}},
+{{13055952732451316181ull, 358475917469571ull}},
+{{6755413371219142621ull, 286780733975657ull}},
+{{14498010208692538518ull, 458849174361051ull}},
+{{7909059352212120491ull, 367079339488841ull}},
+{{2637898667027786069ull, 293663471591073ull}},
+{{531289052502547388ull, 469861554545717ull}},
+{{11493077686227768880ull, 375889243636573ull}},
+{{16573159778466035750ull, 300711394909258ull}},
+{{4380962757094195261ull, 481138231854814ull}},
+{{7194119020417266532ull, 384910585483851ull}},
+{{2065946401591902903ull, 307928468387081ull}},
+{{14373560686772775614ull, 492685549419329ull}},
+{{15188197364160130814ull, 394148439535463ull}},
+{{1082511447102373682ull, 315318751628371ull}},
+{{12800064759589528861ull, 504510002605393ull}},
+{{17618749437155443735ull, 403608002084314ull}},
+{{17784348364466265311ull, 322886401667451ull}},
+{{2629515679952652235ull, 516618242667923ull}},
+{{9482310173445942435ull, 413294594134338ull}},
+{{14964545768240574594ull, 330635675307470ull}},
+{{5496529155475367735ull, 529017080491953ull}},
+{{11775920953864114834ull, 423213664393562ull}},
+{{2042039133607471221ull, 338570931514850ull}},
+{{3267262613771953953ull, 541713490423760ull}},
+{{2613810091017563163ull, 433370792339008ull}},
+{{9469745702297871176ull, 346696633871206ull}},
+{{7772895494192773236ull, 554714614193930ull}},
+{{6218316395354218589ull, 443771691355144ull}},
+{{8664001931025285194ull, 355017353084115ull}},
+{{6931201544820228155ull, 284013882467292ull}},
+{{14779271286454275372ull, 454422211947667ull}},
+{{4444719399679599651ull, 363537769558134ull}},
+{{7245124334485590044ull, 290830215646507ull}},
+{{15281547749918854394ull, 465328345034411ull}},
+{{8535889385193173192ull, 372262676027529ull}},
+{{10518060322896448876ull, 297810140822023ull}},
+{{13139547701892407879ull, 476496225315237ull}},
+{{3132940532030105657ull, 381196980252190ull}},
+{{2506352425624084526ull, 304957584201752ull}},
+{{7699512695740445564ull, 487932134722803ull}},
+{{13538307786076177098ull, 390345707778242ull}},
+{{3451948599377121032ull, 312276566222594ull}},
+{{12901815388487214297ull, 499642505956150ull}},
+{{10321452310789771438ull, 399714004764920ull}},
+{{8257161848631817150ull, 319771203811936ull}},
+{{5832761328327086794ull, 511633926099098ull}},
+{{12044906692145490082ull, 409307140879278ull}},
+{{17014622983200212712ull, 327445712703422ull}},
+{{12466001514152699046ull, 523913140325476ull}},
+{{6283452396580248914ull, 419130512260381ull}},
+{{1337413102522288808ull, 335304409808305ull}},
+{{2139860964035662092ull, 536487055693288ull}},
+{{9090586400712350320ull, 429189644554630ull}},
+{{7272469120569880256ull, 343351715643704ull}},
+{{567904148686077440ull, 549362745029927ull}},
+{{11522369763174592922ull, 439490196023941ull}},
+{{5528546995797764014ull, 351592156819153ull}},
+{{5156326378534512100ull, 562547450910645ull}},
+{{4125061102827609680ull, 450037960728516ull}},
+{{18057444141229729036ull, 360030368582812ull}},
+{{7067257683499962583ull, 288024294866250ull}},
+{{11307612293599940133ull, 460838871786000ull}},
+{{9046089834879952106ull, 368671097428800ull}},
+{{7236871867903961685ull, 294936877943040ull}},
+{{11578994988646338696ull, 471899004708864ull}},
+{{12952544805658981280ull, 377519203767091ull}},
+{{6672687029785274700ull, 302015363013673ull}},
+{{6986950432914529198ull, 483224580821877ull}},
+{{16657606790557354328ull, 386579664657501ull}},
+{{9636736617703973139ull, 309263731726001ull}},
+{{8040080958842536376ull, 494821970761602ull}},
+{{17500111211299760070ull, 395857576609281ull}},
+{{10310740154297897733ull, 316686061287425ull}},
+{{16497184246876636373ull, 506697698059880ull}},
+{{13197747397501309098ull, 405358158447904ull}},
+{{14247546732742957602ull, 324286526758323ull}},
+{{659981883937270224ull, 518858442813318ull}},
+{{7906683136633636826ull, 415086754250654ull}},
+{{10014695324048819784ull, 332069403400523ull}},
+{{12334163703736201331ull, 531311045440837ull}},
+{{2488633333505140418ull, 425048836352670ull}},
+{{1990906666804112334ull, 340039069082136ull}},
+{{14253497111112310705ull, 544062510531417ull}},
+{{4024100059406027917ull, 435250008425134ull}},
+{{6908628862266732657ull, 348200006740107ull}},
+{{14743154994368682575ull, 557120010784171ull}},
+{{8105175180753035737ull, 445696008627337ull}},
+{{17552186588828159559ull, 356556806901869ull}},
+{{17731098085804437970ull, 285245445521495ull}},
+{{9923012863577549136ull, 456392712834393ull}},
+{{15317107920345859955ull, 365114170267514ull}},
+{{15943035151018598287ull, 292091336214011ull}},
+{{18130158612145936614ull, 467346137942418ull}},
+{{3436080445491018321ull, 373876910353935ull}},
+{{2748864356392814657ull, 299101528283148ull}},
+{{708834155486593128ull, 478562445253037ull}},
+{{11635113768615005472ull, 382849956202429ull}},
+{{12997439829633914701ull, 306279964961943ull}},
+{{17106554912672353198ull, 490047943939109ull}},
+{{17374592744879792882ull, 392038355151287ull}},
+{{6520976566420013659ull, 313630684121030ull}},
+{{10433562506272021855ull, 501809094593648ull}},
+{{15725547634501438130ull, 401447275674918ull}},
+{{1512391663375419534ull, 321157820539935ull}},
+{{2419826661400671255ull, 513852512863896ull}},
+{{16693256588088178297ull, 411082010291116ull}},
+{{9665256455728632314ull, 328865608232893ull}},
+{{11775061514423901380ull, 526184973172629ull}},
+{{13109398026281031427ull, 420947978538103ull}},
+{{17866216050508645788ull, 336758382830482ull}},
+{{13828550421846191968ull, 538813412528772ull}},
+{{3684142707993132928ull, 431050730023018ull}},
+{{10326011795878326989ull, 344840584018414ull}},
+{{5453572429179592213ull, 551744934429463ull}},
+{{11741555572827494416ull, 441395947543570ull}},
+{{9393244458261995533ull, 353116758034856ull}},
+{{3825246751867686103ull, 282493406427885ull}},
+{{6120394802988297765ull, 451989450284616ull}},
+{{1206967027648727889ull, 361591560227693ull}},
+{{8344271251602802957ull, 289273248182154ull}},
+{{2282787558338753763ull, 462837197091447ull}},
+{{12894276490896733980ull, 370269757673157ull}},
+{{2936723563233566537ull, 296215806138526ull}},
+{{15766804145399437429ull, 473945289821641ull}},
+{{8924094501577639620ull, 379156231857313ull}},
+{{14517973230745932342ull, 303324985485850ull}},
+{{4782013095483940132ull, 485319976777361ull}},
+{{136261661645241782ull, 388255981421889ull}},
+{{3798358144058103749ull, 310604785137511ull}},
+{{17145419474718696968ull, 496967656220017ull}},
+{{6337637950291136928ull, 397574124976014ull}},
+{{8759459174974819866ull, 318059299980811ull}},
+{{6636437050475891139ull, 508894879969298ull}},
+{{12687847269864533557ull, 407115903975438ull}},
+{{17528975445375447492ull, 325692723180350ull}},
+{{9599616638891164372ull, 521108357088561ull}},
+{{3990344496371021174ull, 416886685670849ull}},
+{{6881624411838727263ull, 333509348536679ull}},
+{{18389296688425784267ull, 533614957658686ull}},
+{{11022088535998717090ull, 426891966126949ull}},
+{{12507019643540883995ull, 341513572901559ull}},
+{{8943184985439683423ull, 546421716642495ull}},
+{{7154547988351746738ull, 437137373313996ull}},
+{{2034289575939487067ull, 349709898651197ull}},
+{{6944212136245089631ull, 559535837841915ull}},
+{{5555369708996071705ull, 447628670273532ull}},
+{{15512342211422588333ull, 358102936218825ull}},
+{{12409873769138070667ull, 286482348975060ull}},
+{{1409053956911361451ull, 458371758360097ull}},
+{{12195289609754820130ull, 366697406688077ull}},
+{{2377534058320035458ull, 293357925350462ull}},
+{{7493403308053967056ull, 469372680560739ull}},
+{{9684071461185083968ull, 375498144448591ull}},
+{{4057908354206156851ull, 300398515558873ull}},
+{{2803304551987940638ull, 480637624894197ull}},
+{{13310690085816083480ull, 384510099915357ull}},
+{{3269854439169046138ull, 307608079932286ull}},
+{{16299813546896204790ull, 492172927891657ull}},
+{{5661153208033143186ull, 393738342313326ull}},
+{{839573751684604225ull, 314990673850661ull}},
+{{12411364446921097730ull, 503985078161057ull}},
+{{2550393928053057538ull, 403188062528846ull}},
+{{16797710401410087323ull, 322550450023076ull}},
+{{1050894939062767455ull, 516080720036923ull}},
+{{8219413580734034610ull, 412864576029538ull}},
+{{13954228494071048334ull, 330291660823630ull}},
+{{3880021516804125719ull, 528466657317809ull}},
+{{6793366028185210898ull, 422773325854247ull}},
+{{16502739266773899688ull, 338218660683397ull}},
+{{11646987567870598209ull, 541149857093436ull}},
+{{5628241239554568244ull, 432919885674749ull}},
+{{8191941806385564918ull, 346335908539799ull}},
+{{2039060445991172899ull, 554137453663679ull}},
+{{5320597171534848643ull, 443309962930943ull}},
+{{11635175366711699560ull, 354647970344754ull}},
+{{12997489108111269971ull, 283718376275803ull}},
+{{17106633758236121631ull, 453949402041285ull}},
+{{13685307006588897305ull, 363159521633028ull}},
+{{18326943234754938490ull, 290527617306422ull}},
+{{14565713916640260292ull, 464844187690276ull}},
+{{7963222318570297910ull, 371875350152221ull}},
+{{2681229040114328005ull, 297500280121777ull}},
+{{7979315278924835131ull, 476000448194843ull}},
+{{13762149852623688751ull, 380800358555874ull}},
+{{14699068696840861324ull, 304640286844699ull}},
+{{12450463470719647150ull, 487424458951519ull}},
+{{13649719591317628043ull, 389939567161215ull}},
+{{10919775673054102434ull, 311951653728972ull}},
+{{2714245817918922602ull, 499122645966356ull}},
+{{16928791913302779374ull, 399298116773084ull}},
+{{17232382345384133823ull, 319438493418467ull}},
+{{12814416493646972824ull, 511101589469548ull}},
+{{17630230824401398905ull, 408881271575638ull}},
+{{3036138215295388154ull, 327105017260511ull}},
+{{15925867588698352017ull, 523368027616817ull}},
+{{5361996441474860967ull, 418694422093454ull}},
+{{7978945967921799097ull, 334955537674763ull}},
+{{9076964733932968232ull, 535928860279621ull}},
+{{3572222972404464262ull, 428743088223697ull}},
+{{13925824822149302379ull, 342994470578957ull}},
+{{7523924456471242514ull, 548791152926332ull}},
+{{17087186009402724981ull, 439032922341065ull}},
+{{13669748807522179985ull, 351226337872852ull}},
+{{7114202833067846683ull, 561962140596564ull}},
+{{9380711081196187670ull, 449569712477251ull}},
+{{3815220050215039812ull, 359655769981801ull}},
+{{17809571299139673143ull, 287724615985440ull}},
+{{10048570004913925412ull, 460359385576705ull}},
+{{8038856003931140330ull, 368287508461364ull}},
+{{10120433617886822587ull, 294630006769091ull}},
+{{8813996159135095493ull, 471408010830546ull}},
+{{3361848112566166071ull, 377126408664437ull}},
+{{13757524934278663826ull, 301701126931549ull}},
+{{10943993450620131153ull, 482721803090479ull}},
+{{12444543575238015245ull, 386177442472383ull}},
+{{17334332489674232843ull, 308941953977906ull}},
+{{1909490280285400286ull, 494307126364651ull}},
+{{16284987483195961522ull, 395445701091720ull}},
+{{13027989986556769217ull, 316356560873376ull}},
+{{13466086349007010101ull, 506170497397402ull}},
+{{3394171449721787435ull, 404936397917922ull}},
+{{13783383604003160917ull, 323949118334337ull}},
+{{7296018507437416175ull, 518318589334940ull}},
+{{5836814805949932940ull, 414654871467952ull}},
+{{15737498288985677321ull, 331723897174361ull}},
+{{17801299632893263068ull, 530758235478978ull}},
+{{3172993262088879485ull, 424606588383183ull}},
+{{9917092239154924234ull, 339685270706546ull}},
+{{8488649953164058129ull, 543496433130474ull}},
+{{10480268777273156826ull, 434797146504379ull}},
+{{12073563836560435784ull, 347837717203503ull}},
+{{15628353323754786931ull, 556540347525605ull}},
+{{12502682659003829545ull, 445232278020484ull}},
+{{13691494941944973959ull, 356185822416387ull}},
+{{3574498324072158521ull, 284948657933110ull}},
+{{5719197318515453634ull, 455917852692976ull}},
+{{886009040070452584ull, 364734282154381ull}},
+{{15466202491024003360ull, 291787425723504ull}},
+{{13677877541412674406ull, 466859881157607ull}},
+{{3563604403646318878ull, 373487904926086ull}},
+{{17608278781884696395ull, 298790323940868ull}},
+{{6037153162564052294ull, 478064518305390ull}},
+{{4829722530051241835ull, 382451614644312ull}},
+{{14931824468266724437ull, 305961291715449ull}},
+{{12822872705001028130ull, 489538066744719ull}},
+{{13947646978742732827ull, 391630453395775ull}},
+{{11158117582994186262ull, 313304362716620ull}},
+{{17852988132790698019ull, 501286980346592ull}},
+{{6903692876748737769ull, 401029584277274ull}},
+{{9212303116140900538ull, 320823667421819ull}},
+{{3671638541599709892ull, 513317867874911ull}},
+{{17694706092247409206ull, 410654294299928ull}},
+{{3087718429572196395ull, 328523435439943ull}},
+{{1251000672573603909ull, 525637496703909ull}},
+{{4690149352800793451ull, 420509997363127ull}},
+{{14820165926466365730ull, 336407997890501ull}},
+{{16333567852862364522ull, 538252796624802ull}},
+{{5688156652806070971ull, 430602237299842ull}},
+{{15618571766470587746ull, 344481789839873ull}},
+{{2853621937901478455ull, 551170863743798ull}},
+{{9661595179805003410ull, 440936690995038ull}},
+{{15107973773327823375ull, 352749352796030ull}},
+{{12086379018662258700ull, 282199482236824ull}},
+{{8270159985633882950ull, 451519171578919ull}},
+{{10305476803249016683ull, 361215337263135ull}},
+{{8244381442599213346ull, 288972269810508ull}},
+{{9501661493416831031ull, 462355631696813ull}},
+{{14980026824217285471ull, 369884505357450ull}},
+{{11984021459373828377ull, 295907604285960ull}},
+{{727690261288573788ull, 473452166857537ull}},
+{{11650198653256590000ull, 378761733486029ull}},
+{{13009507737347182323ull, 303009386788823ull}},
+{{17125863565013581394ull, 484815018862117ull}},
+{{6321993222527044468ull, 387852015089694ull}},
+{{8746943392763545898ull, 310281612071755ull}},
+{{13995109428421673437ull, 496450579314808ull}},
+{{128041098511607780ull, 397160463451847ull}},
+{{11170479323035017193ull, 317728370761477ull}},
+{{3115371657888386217ull, 508365393218364ull}},
+{{6181646141052619296ull, 406692314574691ull}},
+{{1255968098100185114ull, 325353851659753ull}},
+{{16766944215927937475ull, 520566162655604ull}},
+{{17102904187484260303ull, 416452930124483ull}},
+{{2614276905761677273ull, 333162344099587ull}},
+{{7872191863960593960ull, 533059750559339ull}},
+{{9987102305910385491ull, 426447800447471ull}},
+{{4300333029986398070ull, 341158240357977ull}},
+{{10569881662720147235ull, 545853184572763ull}},
+{{15834602959659938434ull, 436682547658210ull}},
+{{12667682367727950747ull, 349346038126568ull}},
+{{16578942973622810873ull, 558953661002509ull}},
+{{16952503193640159021ull, 447162928802007ull}},
+{{6183304925428306571ull, 357730343041606ull}},
+{{1257295125600734933ull, 286184274433285ull}},
+{{2011672200961175893ull, 457894839093256ull}},
+{{16366733019736582007ull, 366315871274604ull}},
+{{16782735230531175929ull, 293052697019683ull}},
+{{4716283480398419548ull, 468884315231494ull}},
+{{7462375599060645961ull, 375107452185195ull}},
+{{5969900479248516769ull, 300085961748156ull}},
+{{2173143137313806184ull, 480137538797050ull}},
+{{1738514509851044947ull, 384110031037640ull}},
+{{1390811607880835958ull, 307288024830112ull}},
+{{5914647387351247856ull, 491660839728179ull}},
+{{8421066724622908608ull, 393328671782543ull}},
+{{14115551009182147532ull, 314662937426034ull}},
+{{11516835170465705083ull, 503460699881655ull}},
+{{9213468136372564066ull, 402768559905324ull}},
+{{11060123323839961576ull, 322214847924259ull}},
+{{6628150873918207552ull, 515543756678815ull}},
+{{5302520699134566042ull, 412435005343052ull}},
+{{15310063003533383803ull, 329948004274441ull}},
+{{17117403176169593438ull, 527916806839106ull}},
+{{10004573726193764427ull, 422333445471285ull}},
+{{8003658980955011542ull, 337866756377028ull}},
+{{9116505554786108144ull, 540586810203245ull}},
+{{7293204443828886515ull, 432469448162596ull}},
+{{2145214740321198889ull, 345975558530077ull}},
+{{7121692399255828545ull, 553560893648123ull}},
+{{13076051548888483483ull, 442848714918498ull}},
+{{17839538868594607432ull, 354278971934798ull}},
+{{3203584650649954976ull, 283423177547839ull}},
+{{12504433070523748609ull, 453477084076542ull}},
+{{2624848826935178240ull, 362781667261234ull}},
+{{5789227876290052915ull, 290225333808987ull}},
+{{12952113416805994988ull, 464360534094379ull}},
+{{14051039548186706314ull, 371488427275503ull}},
+{{172785194323634081ull, 297190741820403ull}},
+{{15033851569885455823ull, 475505186912644ull}},
+{{15716430070650274982ull, 380404149530115ull}},
+{{12573144056520219985ull, 304323319624092ull}},
+{{5359635231464710684ull, 486917311398548ull}},
+{{11666405814655589193ull, 389533849118838ull}},
+{{16711822281208292001ull, 311627079295070ull}},
+{{8292171576223715586ull, 498603326872113ull}},
+{{14012434890462793115ull, 398882661497690ull}},
+{{11209947912370234492ull, 319106129198152ull}},
+{{3178521400824733895ull, 510569806717044ull}},
+{{6232165935401697439ull, 408455845373635ull}},
+{{4985732748321357951ull, 326764676298908ull}},
+{{4287823582572262398ull, 522823482078253ull}},
+{{10808956495541630565ull, 418258785662602ull}},
+{{1268467566949483806ull, 334607028530082ull}},
+{{5718896921861084412ull, 535371245648131ull}},
+{{885768722746957207ull, 428296996518505ull}},
+{{708614978197565765ull, 342637597214804ull}},
+{{8512481594599925871ull, 548220155543686ull}},
+{{3120636460938030374ull, 438576124434949ull}},
+{{6185857983492334622ull, 350860899547959ull}},
+{{17276070403071556042ull, 561377439276734ull}},
+{{17510205137199155157ull, 449101951421387ull}},
+{{6629466480275503479ull, 359281561137110ull}},
+{{5303573184220402783ull, 287425248909688ull}},
+{{4796368280010734130ull, 459880398255501ull}},
+{{147745809266676980ull, 367904318604401ull}},
+{{14875591906380982877ull, 294323454883520ull}},
+{{5354202976500020988ull, 470917527813633ull}},
+{{11662060010683837436ull, 376734022250906ull}},
+{{5640299193805159626ull, 301387217800725ull}},
+{{9024478710088255402ull, 482219548481160ull}},
+{{7219582968070604321ull, 385775638784928ull}},
+{{13154364003940304103ull, 308620511027942ull}},
+{{6289587147336845273ull, 493792817644708ull}},
+{{12410367347353296864ull, 395034254115766ull}},
+{{6238945063140727168ull, 316027403292613ull}},
+{{6292963286283253146ull, 505643845268181ull}},
+{{1345021814284692194ull, 404515076214545ull}},
+{{1076017451427753755ull, 323612060971636ull}},
+{{12789674366510136978ull, 517779297554617ull}},
+{{2853041863724288936ull, 414223438043694ull}},
+{{5971782305721341472ull, 331378750434955ull}},
+{{9554851689154146355ull, 530206000695928ull}},
+{{15022578980807137730ull, 424164800556742ull}},
+{{4639365555161889538ull, 339331840445394ull}},
+{{14801682517742843907ull, 542930944712630ull}},
+{{11841346014194275126ull, 434344755770104ull}},
+{{13162425626097330424ull, 347475804616083ull}},
+{{17370532187013818355ull, 555961287385733ull}},
+{{2828379305385323714ull, 444769029908587ull}},
+{{13330749888533989941ull, 355815223926869ull}},
+{{14353948725569102276ull, 284652179141495ull}},
+{{4519573887201012025ull, 455443486626393ull}},
+{{10994356739244630267ull, 364354789301114ull}},
+{{12484834206137614536ull, 291483831440891ull}},
+{{12597037100336362612ull, 466374130305426ull}},
+{{6388280865527179766ull, 373099304244341ull}},
+{{1421275877679833490ull, 298479443395473ull}},
+{{17031436663255374877ull, 477567109432756ull}},
+{{9935800515862389578ull, 382053687546205ull}},
+{{7948640412689911662ull, 305642950036964ull}},
+{{1649778216078127691ull, 489028720059143ull}},
+{{8698520202346322799ull, 391222976047314ull}},
+{{10648164976618968562ull, 312978380837851ull}},
+{{9658366333106529053ull, 500765409340562ull}},
+{{347995437001402596ull, 400612327472450ull}},
+{{278396349601122077ull, 320489861977960ull}},
+{{445434159361795323ull, 512783779164736ull}},
+{{15113742586457077551ull, 410227023331788ull}},
+{{1022947624939931071ull, 328181618665431ull}},
+{{12704762644129620684ull, 525090589864689ull}},
+{{13853158930045606870ull, 420072471891751ull}},
+{{7393178329294575173ull, 336057977513401ull}},
+{{4450387697387499631ull, 537692764021442ull}},
+{{14628356602135730674ull, 430154211217153ull}},
+{{634638837482853569ull, 344123368973723ull}},
+{{15772817398940207004ull, 550597390357956ull}},
+{{8928905104410255280ull, 440477912286365ull}},
+{{7143124083528204224ull, 352382329829092ull}},
+{{16782545711048294349ull, 281905863863273ull}},
+{{4715980249225809019ull, 451049382181238ull}},
+{{11151481828864467862ull, 360839505744990ull}},
+{{8921185463091574289ull, 288671604595992ull}},
+{{17963245555688429186ull, 461874567353587ull}},
+{{6991898815066922702ull, 369499653882870ull}},
+{{5593519052053538162ull, 295599723106296ull}},
+{{1570932853801840413ull, 472959556970074ull}},
+{{4946095097783382653ull, 378367645576059ull}},
+{{7646224892968616446ull, 302694116460847ull}},
+{{15923308643491696637ull, 484310586337355ull}},
+{{12738646914793357309ull, 387448469069884ull}},
+{{13880266346576596171ull, 309958775255907ull}},
+{{7451030895554912580ull, 495934040409452ull}},
+{{17028871160669661034ull, 396747232327561ull}},
+{{9933748113793818504ull, 317397785862049ull}},
+{{4825950537844378637ull, 507836457379279ull}},
+{{7550109245017413232ull, 406269165903423ull}},
+{{13418785025497751232ull, 325015332722738ull}},
+{{17780707226054491649ull, 520024532356381ull}},
+{{10535216966101682996ull, 416019625885105ull}},
+{{8428173572881346396ull, 332815700708084ull}},
+{{2417031272384423265ull, 532505121132935ull}},
+{{1933625017907538612ull, 426004096906348ull}},
+{{8925597643809851536ull, 340803277525078ull}},
+{{10591607415353852134ull, 545285244040125ull}},
+{{8473285932283081707ull, 436228195232100ull}},
+{{6778628745826465366ull, 348982556185680ull}},
+{{10845805993322344586ull, 558372089897088ull}},
+{{16055342424141696315ull, 446697671917670ull}},
+{{12844273939313357052ull, 357358137534136ull}},
+{{6586070336708775318ull, 285886510027309ull}},
+{{17916410168217861156ull, 457418416043694ull}},
+{{18022476949316199248ull, 365934732834955ull}},
+{{14417981559452959398ull, 292747786267964ull}},
+{{12000724050899004067ull, 468396458028743ull}},
+{{16979276870203023900ull, 374717166422994ull}},
+{{17272770310904329443ull, 299773733138395ull}},
+{{9189688423737375494ull, 479637973021433ull}},
+{{14730448368473721041ull, 383710378417146ull}},
+{{8095009880037066510ull, 306968302733717ull}},
+{{16641364622801216739ull, 491149284373947ull}},
+{{5934394068757152745ull, 392919427499158ull}},
+{{12126212884489542842ull, 314335541999326ull}},
+{{12023242985699447901ull, 502936867198922ull}},
+{{2239896759075737674ull, 402349493759138ull}},
+{{9170615036744410786ull, 321879595007310ull}},
+{{14672984058791057258ull, 515007352011696ull}},
+{{8049038432290935483ull, 412005881609357ull}},
+{{17507277190058479356ull, 329604705287485ull}},
+{{9564899430384015353ull, 527367528459977ull}},
+{{273221914823391636ull, 421894022767982ull}},
+{{11286623976084444279ull, 337515218214385ull}},
+{{18058598361735110846ull, 540024349143016ull}},
+{{10757529874646178353ull, 432019479314413ull}},
+{{15984721529200763329ull, 345615583451530ull}},
+{{7128810373011669711ull, 552984933522449ull}},
+{{9392397113151246092ull, 442387946817959ull}},
+{{11203266505262907196ull, 353910357454367ull}},
+{{1583915574726505111ull, 283128285963494ull}},
+{{9912962549046228824ull, 453005257541590ull}},
+{{7930370039236983059ull, 362404206033272ull}},
+{{17412342475615317417ull, 289923364826617ull}},
+{{13102352702016866574ull, 463877383722588ull}},
+{{17860579791097313906ull, 371101906978070ull}},
+{{14288463832877851124ull, 296881525582456ull}},
+{{15482844503120741153ull, 475010440931930ull}},
+{{12386275602496592922ull, 380008352745544ull}},
+{{13598369296739184661ull, 304006682196435ull}},
+{{3310646801073143842ull, 486410691514297ull}},
+{{13716563885084246043ull, 389128553211437ull}},
+{{3594553478583576188ull, 311302842569150ull}},
+{{5751285565733721901ull, 498084548110640ull}},
+{{4601028452586977521ull, 398467638488512ull}},
+{{14748869206295312986ull, 318774110790809ull}},
+{{12530144285846769808ull, 510038577265295ull}},
+{{10024115428677415846ull, 408030861812236ull}},
+{{4329943528200022354ull, 326424689449789ull}},
+{{14306607274603856413ull, 522279503119662ull}},
+{{4066588190199264484ull, 417823602495730ull}},
+{{3253270552159411587ull, 334258881996584ull}},
+{{12583930512938879186ull, 534814211194534ull}},
+{{13756493225093013672ull, 427851368955627ull}},
+{{3626496950590590291ull, 342281095164502ull}},
+{{9491743935686854789ull, 547649752263203ull}},
+{{14972092778033304477ull, 438119801810562ull}},
+{{4598976592942822935ull, 350495841448450ull}},
+{{7358362548708516697ull, 560793346317520ull}},
+{{5886690038966813358ull, 448634677054016ull}},
+{{1020003216431540363ull, 358907741643213ull}},
+{{8194700202629052936ull, 287126193314570ull}},
+{{13111520324206484699ull, 459401909303312ull}},
+{{3110518629881367112ull, 367521527442650ull}},
+{{2488414903905093690ull, 294017221954120ull}},
+{{3981463846248149904ull, 470427555126592ull}},
+{{14253217521224250893ull, 376342044101273ull}},
+{{334527572753669744ull, 301073635281019ull}},
+{{7913941745889692238ull, 481717816449630ull}},
+{{6331153396711753790ull, 385374253159704ull}},
+{{8754271532111313355ull, 308299402527763ull}},
+{{10317485636636191046ull, 493279044044421ull}},
+{{4564639694567042513ull, 394623235235537ull}},
+{{14719758199879364980ull, 315698588188429ull}},
+{{12483566675581252999ull, 505117741101487ull}},
+{{2608155710981181752ull, 404094192881190ull}},
+{{2086524568784945402ull, 323275354304952ull}},
+{{7027788124797822966ull, 517240566887923ull}},
+{{13000928129322079019ull, 413792453510338ull}},
+{{17779440132941483862ull, 331033962808270ull}},
+{{10000360138996822563ull, 529654340493233ull}},
+{{15378985740681278697ull, 423723472394586ull}},
+{{8613839777803112634ull, 338978777915669ull}},
+{{2714097200259249246ull, 542366044665071ull}},
+{{16928673019175040689ull, 433892835732056ull}},
+{{9853589600598122228ull, 347114268585645ull}},
+{{15765743360956995565ull, 555382829737032ull}},
+{{5233897059281775806ull, 444306263789626ull}},
+{{497768832683510321ull, 355445011031701ull}},
+{{15155610325114449550ull, 284356008825360ull}},
+{{5802232446473567664ull, 454969614120577ull}},
+{{15709832401404585100ull, 363975691296461ull}},
+{{8878517106381757757ull, 291180553037169ull}},
+{{3137580925985081442ull, 465888884859471ull}},
+{{17267459999755706446ull, 372711107887576ull}},
+{{10124619185062654834ull, 298168886310061ull}},
+{{8820693066616427088ull, 477070218096098ull}},
+{{14435252082776962317ull, 381656174476878ull}},
+{{480155221995838884ull, 305324939581503ull}},
+{{15525643614160983507ull, 488519903330404ull}},
+{{16109863706070697129ull, 390815922664323ull}},
+{{1819844520630826733ull, 312652738131459ull}},
+{{10290448862493143420ull, 500244381010334ull}},
+{{11921707904736425059ull, 400195504808267ull}},
+{{2158668694305319401ull, 320156403846614ull}},
+{{10832567540372331688ull, 512250246154582ull}},
+{{1287356402814044704ull, 409800196923666ull}},
+{{15787280381218877056ull, 327840157538932ull}},
+{{10502253350982561997ull, 524544252062292ull}},
+{{1023105051302228951ull, 419635401649834ull}},
+{{4507832855783693484ull, 335708321319867ull}},
+{{10901881383995819897ull, 537133314111787ull}},
+{{1342807477712835271ull, 429706651289430ull}},
+{{1074245982170268217ull, 343765321031544ull}},
+{{9097491200956249794ull, 550024513650470ull}},
+{{7277992960764999835ull, 440019610920376ull}},
+{{2133045553870089545ull, 352015688736301ull}},
+{{16463831702063712928ull, 281612550989040ull}},
+{{7895386649592389070ull, 450580081582465ull}},
+{{6316309319673911256ull, 360464065265972ull}},
+{{16121093899964859974ull, 288371252212777ull}},
+{{11036354980976134666ull, 461394003540444ull}},
+{{12518432799522818056ull, 369115202832355ull}},
+{{10014746239618254445ull, 295292162265884ull}},
+{{4955547539163476142ull, 472467459625415ull}},
+{{3964438031330780914ull, 377973967700332ull}},
+{{14239596869290355700ull, 302379174160265ull}},
+{{4336610917155017505ull, 483806678656425ull}},
+{{3469288733724014004ull, 387045342925140ull}},
+{{2775430986979211203ull, 309636274340112ull}},
+{{8130038393908648248ull, 495418038944179ull}},
+{{10193379529868828922ull, 396334431155343ull}},
+{{15533401253378883784ull, 317067544924274ull}},
+{{13785395561180483085ull, 507308071878839ull}},
+{{14717665263686296791ull, 405846457503071ull}},
+{{8084783396207127109ull, 324677166002457ull}},
+{{16625002248673313698ull, 519483465603931ull}},
+{{9610652984196740635ull, 415586772483145ull}},
+{{7688522387357392508ull, 332469417986516ull}},
+{{4922938190288007367ull, 531951068778426ull}},
+{{249001737488495570ull, 425560855022741ull}},
+{{14956596648958437749ull, 340448684018192ull}},
+{{9173159379365859106ull, 544717894429108ull}},
+{{14717225132976507931ull, 435774315543286ull}},
+{{8084431291639296022ull, 348619452434629ull}},
+{{1867043622397142665ull, 557791123895407ull}},
+{{12561681342143445102ull, 446232899116325ull}},
+{{10049345073714756081ull, 356986319293060ull}},
+{{8039476058971804865ull, 285589055434448ull}},
+{{9173812879612977461ull, 456942488695117ull}},
+{{18407096747916112938ull, 365553990956093ull}},
+{{3657630954107159381ull, 292443192764875ull}},
+{{5852209526571455010ull, 467909108423800ull}},
+{{4681767621257164008ull, 374327286739040ull}},
+{{3745414097005731206ull, 299461829391232ull}},
+{{9682011369951080253ull, 479138927025971ull}},
+{{4056260281218953879ull, 383311141620777ull}},
+{{14313054669200894073ull, 306648913296621ull}},
+{{15522189841237609870ull, 490638261274594ull}},
+{{16107100687731998219ull, 392510609019675ull}},
+{{12885680550185598575ull, 314008487215740ull}},
+{{2170344806587406105ull, 502413579545185ull}},
+{{1736275845269924884ull, 401930863636148ull}},
+{{8767718305699760553ull, 321544690908918ull}},
+{{10339000474377706563ull, 514471505454269ull}},
+{{11960549194244075573ull, 411577204363415ull}},
+{{9568439355395260458ull, 329261763490732ull}},
+{{552107709664775441ull, 526818821585172ull}},
+{{11509732611957551322ull, 421455057268137ull}},
+{{1829088460082220411ull, 337164045814510ull}},
+{{2926541536131552659ull, 539462473303216ull}},
+{{17098628487872883420ull, 431569978642572ull}},
+{{6300205160814486089ull, 345255982914058ull}},
+{{6390979442561267420ull, 552409572662493ull}},
+{{12491481183532834582ull, 441927658129994ull}},
+{{13682533761568177989ull, 353542126503995ull}},
+{{10946027009254542391ull, 282833701203196ull}},
+{{10134945585323447179ull, 452533921925114ull}},
+{{11797305283000668067ull, 362027137540091ull}},
+{{5748495411658624130ull, 289621710032073ull}},
+{{5508243843911888285ull, 463394736051317ull}},
+{{15474641519355241598ull, 370715788841053ull}},
+{{1311666771258462308ull, 296572631072843ull}},
+{{16856062092981180986ull, 474516209716548ull}},
+{{2416803230159213819ull, 379612967773239ull}},
+{{5622791398869281379ull, 303690374218591ull}},
+{{1617768608707029560ull, 485904598749746ull}},
+{{16051610145933264940ull, 388723678999796ull}},
+{{9151939302004701629ull, 310978943199837ull}},
+{{18332451697949432930ull, 497566309119739ull}},
+{{18355310173101456667ull, 398053047295791ull}},
+{{10994899323739255010ull, 318442437836633ull}},
+{{13902490103240897694ull, 509507900538613ull}},
+{{53945638366987185ull, 407606320430891ull}},
+{{14800551769661231041ull, 326085056344712ull}},
+{{8923487572490328373ull, 521736090151540ull}},
+{{7138790057992262698ull, 417388872121232ull}},
+{{16779078490619541128ull, 333911097696985ull}},
+{{8399781511281714189ull, 534257756315177ull}},
+{{17787871653251102321ull, 427406205052141ull}},
+{{10540948507858971533ull, 341924964041713ull}},
+{{13176168797832444131ull, 547079942466741ull}},
+{{6851586223524044981ull, 437663953973393ull}},
+{{12859966608303056631ull, 350131163178714ull}},
+{{9507900129059159641ull, 560209861085943ull}},
+{{14985017732731148359ull, 448167888868754ull}},
+{{15677363000926829010ull, 358534311095003ull}},
+{{1473843956515732238ull, 286827448876003ull}},
+{{17115545589392812875ull, 458923918201604ull}},
+{{17381785286256160623ull, 367139134561283ull}},
+{{2837381784779197529ull, 293711307649027ull}},
+{{8229159670388626369ull, 469938092238443ull}},
+{{13962025365794721742ull, 375950473790754ull}},
+{{14858969107377687716ull, 300760379032603ull}},
+{{1638257683352838407ull, 481216606452166ull}},
+{{16068001405649912019ull, 384973285161732ull}},
+{{5475703495036108968ull, 307978628129386ull}},
+{{1382427962573953703ull, 492765805007018ull}},
+{{8484639999542983609ull, 394212644005614ull}},
+{{10477060814376297210ull, 315370115204491ull}},
+{{9384599673518254890ull, 504592184327186ull}},
+{{3818330924072693589ull, 403673747461749ull}},
+{{6744013554000065194ull, 322938997969399ull}},
+{{18169119315883924958ull, 516702396751038ull}},
+{{3467249008481408996ull, 413361917400831ull}},
+{{17531194465752768490ull, 330689533920664ull}},
+{{16981864700978698614ull, 529103254273063ull}},
+{{2517445316557227922ull, 423282603418451ull}},
+{{16771351512213423630ull, 338626082734760ull}},
+{{8387418345831926192ull, 541801732375617ull}},
+{{17777981120891271923ull, 433441385900493ull}},
+{{3154338452487286569ull, 346753108720395ull}},
+{{5046941523979658511ull, 554804973952632ull}},
+{{15105599663409457778ull, 443843979162105ull}},
+{{12084479730727566222ull, 355075183329684ull}},
+{{13356932599323963301ull, 284060146663747ull}},
+{{6613696899950699989ull, 454496234661996ull}},
+{{1601608705218649668ull, 363596987729597ull}},
+{{12349333408400650704ull, 290877590183677ull}},
+{{5001538194473399834ull, 465404144293884ull}},
+{{7690579370320630190ull, 372323315435107ull}},
+{{17220509940482235122ull, 297858652348085ull}},
+{{9106071831062024579ull, 476573843756937ull}},
+{{18352903909075350633ull, 381259075005549ull}},
+{{18371671942002190829ull, 305007260004439ull}},
+{{18326628662977774357ull, 488011616007103ull}},
+{{3593256486156488516ull, 390409292805683ull}},
+{{10253302818409011459ull, 312327434244546ull}},
+{{9026586879970597689ull, 499723894791274ull}},
+{{10910618318718388474ull, 399779115833019ull}},
+{{12417843469716621102ull, 319823292666415ull}},
+{{1421805477837042148ull, 511717268266265ull}},
+{{1137444382269633718ull, 409373814613012ull}},
+{{11978001950041437944ull, 327499051690409ull}},
+{{8096756675840569741ull, 523998482704655ull}},
+{{6477405340672455793ull, 419198786163724ull}},
+{{8871273087279874958ull, 335359028930979ull}},
+{{3125990495422068963ull, 536574446289567ull}},
+{{13568838840563386140ull, 429259557031653ull}},
+{{18233768701934529558ull, 343407645625322ull}},
+{{14416634664127606000ull, 549452233000516ull}},
+{{7843958916560174477ull, 439561786400413ull}},
+{{13653864762731960228ull, 351649429120330ull}},
+{{3399439546661584749ull, 562639086592529ull}},
+{{6408900452071178122ull, 450111269274023ull}},
+{{12505817991140763144ull, 360089015419218ull}},
+{{17383352022396431162ull, 288071212335374ull}},
+{{16745316791608558889ull, 460913939736599ull}},
+{{17085602248028757434ull, 368731151789279ull}},
+{{17357830613164916271ull, 294984921431423ull}},
+{{5636436092612404094ull, 471975874290278ull}},
+{{11887846503573743922ull, 377580699432222ull}},
+{{2131579573375174491ull, 302064559545778ull}},
+{{18167922576367920478ull, 483303295273244ull}},
+{{18223686875836246706ull, 386642636218595ull}},
+{{14578949500668997365ull, 309314108974876ull}},
+{{15947621571586575137ull, 494902574359802ull}},
+{{5379399627785439463ull, 395922059487842ull}},
+{{15371566146454082540ull, 316737647590273ull}},
+{{2458412945875070125ull, 506780236144438ull}},
+{{9345427986183876747ull, 405424188915550ull}},
+{{7476342388947101397ull, 324339351132440ull}},
+{{11962147822315362236ull, 518942961811904ull}},
+{{13259067072594200112ull, 415154369449523ull}},
+{{17985951287559180736ull, 332123495559618ull}},
+{{6641429171643227238ull, 531397592895390ull}},
+{{5313143337314581790ull, 425118074316312ull}},
+{{15318561114077396402ull, 340094459453049ull}},
+{{13441651338298103274ull, 544151135124879ull}},
+{{14442669885380392942ull, 435320908099903ull}},
+{{486089464078583384ull, 348256726479923ull}},
+{{15535138401493374707ull, 557210762367876ull}},
+{{8738761906452789443ull, 445768609894301ull}},
+{{3301660710420321231ull, 356614887915441ull}},
+{{17398723827303898277ull, 285291910332352ull}},
+{{13080562864718595951ull, 456467056531764ull}},
+{{14153799106516787084ull, 365173645225411ull}},
+{{7633690470471519344ull, 292138916180329ull}},
+{{1145858308528699981ull, 467422265888527ull}},
+{{11984733091048690954ull, 373937812710821ull}},
+{{5898437658097042440ull, 299150250168657ull}},
+{{13126849067697178228ull, 478640400269851ull}},
+{{6812130439415832259ull, 382912320215881ull}},
+{{1760355536790755484ull, 306329856172705ull}},
+{{2816568858865208774ull, 490127769876328ull}},
+{{9631952716575987666ull, 392102215901062ull}},
+{{326864543776969486ull, 313681772720850ull}},
+{{522983270043151178ull, 501890836353360ull}},
+{{418386616034520942ull, 401512669082688ull}},
+{{7713406922311437400ull, 321210135266150ull}},
+{{12341451075698299841ull, 513936216425840ull}},
+{{9873160860558639872ull, 411148973140672ull}},
+{{519831058963091251ull, 328919178512538ull}},
+{{15589124953308587295ull, 526270685620060ull}},
+{{12471299962646869836ull, 421016548496048ull}},
+{{17355737599601316515ull, 336813238796838ull}},
+{{5633087270910644485ull, 538901182074942ull}},
+{{15574516260954246558ull, 431120945659953ull}},
+{{1391566564537666277ull, 344896756527963ull}},
+{{16983901762227907336ull, 551834810444740ull}},
+{{13587121409782325868ull, 441467848355792ull}},
+{{3490999498342040048ull, 353174278684634ull}},
+{{6482148413415542362ull, 282539422947707ull}},
+{{14060786276206778102ull, 452063076716331ull}},
+{{7559280206223512158ull, 361650461373065ull}},
+{{6047424164978809727ull, 289320369098452ull}},
+{{13365227478708005886ull, 462912590557523ull}},
+{{18070879612450225355ull, 370330072446018ull}},
+{{3388657245734449315ull, 296264057956815ull}},
+{{5421851593175118904ull, 474022492730904ull}},
+{{8026830089282005446ull, 379217994184723ull}},
+{{13800161700909425003ull, 303374395347778ull}},
+{{18390909906713169682ull, 485399032556445ull}},
+{{14712727925370535745ull, 388319226045156ull}},
+{{8080833525554518273ull, 310655380836125ull}},
+{{12929333640887229237ull, 497048609337800ull}},
+{{10343466912709783390ull, 397638887470240ull}},
+{{8274773530167826712ull, 318111109976192ull}},
+{{16928986463010433062ull, 508977775961907ull}},
+{{6164491540924525803ull, 407182220769526ull}},
+{{1242244417997710319ull, 325745776615621ull}},
+{{13055637513022067481ull, 521193242584993ull}},
+{{17823207639901474631ull, 416954594067994ull}},
+{{17947914926663090028ull, 333563675254395ull}},
+{{10269919808951392429ull, 533701880407033ull}},
+{{15594633476644934589ull, 426961504325626ull}},
+{{8786357966574037348ull, 341569203460501ull}},
+{{6679475117034639111ull, 546510725536802ull}},
+{{16411626537853442258ull, 437208580429441ull}},
+{{9439952415540843483ull, 349766864343553ull}},
+{{11414575050123439250ull, 559626982949685ull}},
+{{9131660040098751400ull, 447701586359748ull}},
+{{14684025661562821766ull, 358161269087798ull}},
+{{679174085024526443ull, 286529015270239ull}},
+{{8465376165523062956ull, 458446424432382ull}},
+{{17840347376644181335ull, 366757139545905ull}},
+{{14272277901315345068ull, 293405711636724ull}},
+{{11767598197878821139ull, 469449138618759ull}},
+{{13103427373044967234ull, 375559310895007ull}},
+{{3104044268952153141ull, 300447448716006ull}},
+{{16034517274549175995ull, 480715917945609ull}},
+{{16516962634381251119ull, 384572734356487ull}},
+{{5834872478021180249ull, 307658187485190ull}},
+{{9335795964833888398ull, 492253099976304ull}},
+{{11157985586609021042ull, 393802479981043ull}},
+{{16305086098771037480ull, 315041983984834ull}},
+{{15020091313807928998ull, 504067174375735ull}},
+{{12016073051046343199ull, 403253739500588ull}},
+{{16991556070320895205ull, 322602991600470ull}},
+{{8739745638803880713ull, 516164786560753ull}},
+{{14370494140526925216ull, 412931829248602ull}},
+{{4117697682937719527ull, 330345463398882ull}},
+{{10277665107442261566ull, 528552741438211ull}},
+{{4532783271211898930ull, 422842193150569ull}},
+{{7315575431711429467ull, 338273754520455ull}},
+{{11704920690738287147ull, 541238007232728ull}},
+{{16742634182074450364ull, 432990405786182ull}},
+{{6015409716175739645ull, 346392324628946ull}},
+{{2245957916397362785ull, 554227719406314ull}},
+{{5486115147859800551ull, 443382175525051ull}},
+{{699543303545930118ull, 354705740420041ull}},
+{{15317029901804385387ull, 283764592336032ull}},
+{{9749852583919375327ull, 454023347737652ull}},
+{{421184437651679615ull, 363218678190122ull}},
+{{11404993994347074661ull, 290574942552097ull}},
+{{3490595131987678166ull, 464919908083356ull}},
+{{17549871364557783825ull, 371935926466684ull}},
+{{17729245906388137383ull, 297548741173347ull}},
+{{13609398191253378521ull, 476077985877356ull}},
+{{7198169738260792493ull, 380862388701885ull}},
+{{5758535790608633995ull, 304689910961508ull}},
+{{5524308450231904068ull, 487503857538413ull}},
+{{11798144389669343901ull, 390003086030730ull}},
+{{9438515511735475121ull, 312002468824584ull}},
+{{4033578374551029224ull, 499203950119335ull}},
+{{3226862699640823379ull, 399363160095468ull}},
+{{9960187789196479349ull, 319490528076374ull}},
+{{4868254018488635990ull, 511184844922199ull}},
+{{7583952029532819115ull, 408947875937759ull}},
+{{9756510438368165615ull, 327158300750207ull}},
+{{853021442421423692ull, 523453281200332ull}},
+{{11750463598162869923ull, 418762624960265ull}},
+{{9400370878530295938ull, 335010099968212ull}},
+{{283198146680832208ull, 536016159949140ull}},
+{{226558517344665767ull, 428812927959312ull}},
+{{11249293258101463583ull, 343050342367449ull}},
+{{6930822768736610763ull, 548880547787919ull}},
+{{9234007029731198934ull, 439104438230335ull}},
+{{7387205623784959147ull, 351283550584268ull}},
+{{8130180183314024312ull, 562053680934829ull}},
+{{10193492961393129773ull, 449642944747863ull}},
+{{15533491998598324465ull, 359714355798290ull}},
+{{12426793598878659572ull, 287771484638632ull}},
+{{5125474499238214022ull, 460434375421812ull}},
+{{15168426043616302187ull, 368347500337449ull}},
+{{15824089649634952073ull, 294678000269959ull}},
+{{14250496995190192347ull, 471484800431935ull}},
+{{11400397596152153878ull, 377187840345548ull}},
+{{16499015706405543748ull, 301750272276438ull}},
+{{4262332241797408058ull, 482800435642302ull}},
+{{14477912237663657416ull, 386240348513841ull}},
+{{7892980975389015610ull, 308992278811073ull}},
+{{8939420745880514653ull, 494387646097717ull}},
+{{18219583040930142692ull, 395510116878173ull}},
+{{3507619988518383184ull, 316408093502539ull}},
+{{12990889611113233740ull, 506252949604062ull}},
+{{3014014059406766346ull, 405002359683250ull}},
+{{2411211247525413077ull, 324001887746600ull}},
+{{3857937996040660923ull, 518403020394560ull}},
+{{3086350396832528738ull, 414722416315648ull}},
+{{9847777946949843637ull, 331777933052518ull}},
+{{12067095900377839496ull, 530844692884029ull}},
+{{13343025535044181920ull, 424675754307223ull}},
+{{18053118057519166182ull, 339740603445778ull}},
+{{6748896003579203953ull, 543584965513246ull}},
+{{1709767988121452839ull, 434867972410597ull}},
+{{12435860834722893241ull, 347894377928477ull}},
+{{5139982076588987892ull, 556631004685564ull}},
+{{7801334476013100637ull, 445304803748451ull}},
+{{2551718766068570186ull, 356243842998761ull}},
+{{16798770271822497442ull, 284995074399008ull}},
+{{4741939546464533968ull, 455992119038414ull}},
+{{7482900451913537497ull, 364793695230731ull}},
+{{2296971546788919675ull, 291834956184585ull}},
+{{3675154474862271480ull, 466935929895336ull}},
+{{17697518838857458476ull, 373548743916268ull}},
+{{3089968626860235811ull, 298838995133015ull}},
+{{4943949802976377299ull, 478142392212824ull}},
+{{7644508657123012162ull, 382513913770259ull}},
+{{9804955740440320053ull, 306011131016207ull}},
+{{930533925736870792ull, 489617809625932ull}},
+{{11812473584815227603ull, 391694247700745ull}},
+{{9449978867852182082ull, 313355398160596ull}},
+{{7741268559079670686ull, 501368637056954ull}},
+{{9882363662005646872ull, 401094909645563ull}},
+{{15284588559088338144ull, 320875927716450ull}},
+{{6008597620831789414ull, 513401484346321ull}},
+{{1117529281923521208ull, 410721187477057ull}},
+{{11962069869764547936ull, 328576949981645ull}},
+{{692567717913725082ull, 525723119970633ull}},
+{{7932751803814800712ull, 420578495976506ull}},
+{{2656852628309930246ull, 336462796781205ull}},
+{{4250964205295888394ull, 538340474849928ull}},
+{{10779468993720531361ull, 430672379879942ull}},
+{{1244877565492604443ull, 344537903903954ull}},
+{{9370501734271987755ull, 551260646246326ull}},
+{{3807052572675679881ull, 441008516997061ull}},
+{{17803037317108185197ull, 352806813597648ull}},
+{{3174383409460817188ull, 282245450878119ull}},
+{{12457711084621128148ull, 451592721404990ull}},
+{{9966168867696902518ull, 361274177123992ull}},
+{{594237464673701368ull, 289019341699194ull}},
+{{8329477572961742835ull, 462430946718710ull}},
+{{6663582058369394268ull, 369944757374968ull}},
+{{12709563276179336061ull, 295955805899974ull}},
+{{9267254797661206728ull, 473529289439959ull}},
+{{11103152652870875705ull, 378823431551967ull}},
+{{1503824492812879918ull, 303058745241574ull}},
+{{9784816817984428515ull, 484893992386518ull}},
+{{15206551083871363459ull, 387915193909214ull}},
+{{15854589681839001090ull, 310332155127371ull}},
+{{17988645861458581098ull, 496531448203794ull}},
+{{18080265503908775201ull, 397225158563035ull}},
+{{14464212403127020161ull, 317780126850428ull}},
+{{1006646956551770319ull, 508448202960686ull}},
+{{15562712824209057548ull, 406758562368548ull}},
+{{1382123815141515068ull, 325406849894839ull}},
+{{9590095733710244756ull, 520650959831742ull}},
+{{293378957484375158ull, 416520767865394ull}},
+{{3924051980729410450ull, 333216614292315ull}},
+{{6278483169167056720ull, 533146582867704ull}},
+{{8712135350075555699ull, 426517266294163ull}},
+{{14348405909544265206ull, 341213813035330ull}},
+{{4510705381561272713ull, 545942100856529ull}},
+{{7297913119990928494ull, 436753680685223ull}},
+{{13217028125476563441ull, 349402944548178ull}},
+{{17457896186020591183ull, 559044711277085ull}},
+{{13966316948816472946ull, 447235769021668ull}},
+{{105007114827447387ull, 357788615217335ull}},
+{{84005691861957910ull, 286230892173868ull}},
+{{14891804365946773949ull, 457969427478188ull}},
+{{845397048531688189ull, 366375541982551ull}},
+{{15433712897792991844ull, 293100433586040ull}},
+{{6247196562759235335ull, 468960693737665ull}},
+{{4997757250207388268ull, 375168554990132ull}},
+{{15066252244391641584ull, 300134843992105ull}},
+{{5659259517317074918ull, 480215750387369ull}},
+{{8216756428595570258ull, 384172600309895ull}},
+{{6573405142876456206ull, 307338080247916ull}},
+{{3138750599118509284ull, 491740928396666ull}},
+{{17268395738262448720ull, 393392742717332ull}},
+{{6436018961126138329ull, 314714194173866ull}},
+{{2918932708318000681ull, 503542710678186ull}},
+{{17092541425622041837ull, 402834168542548ull}},
+{{2605986696271902500ull, 322267334834039ull}},
+{{11548276343518864647ull, 515627735734462ull}},
+{{1859923445331271071ull, 412502188587570ull}},
+{{1487938756265016857ull, 330001750870056ull}},
+{{13448748454249757941ull, 528002801392089ull}},
+{{14448347578141716676ull, 422402241113671ull}},
+{{7869329247771463017ull, 337921792890937ull}},
+{{16280275611176251151ull, 540674868625499ull}},
+{{16713569303682911244ull, 432539894900399ull}},
+{{17060204257688239318ull, 346031915920319ull}},
+{{16228280368075451940ull, 553651065472511ull}},
+{{9293275479718451229ull, 442920852378009ull}},
+{{11123969198516671306ull, 354336681902407ull}},
+{{1520477729329516398ull, 283469345521926ull}},
+{{13500810811152957207ull, 453550952835081ull}},
+{{7111299834180455442ull, 362840762268065ull}},
+{{5689039867344364354ull, 290272609814452ull}},
+{{12791812602492893290ull, 464436175703123ull}},
+{{17612147711478135278ull, 371548940562498ull}},
+{{3021671724956777253ull, 297239152449999ull}},
+{{12213372389414664251ull, 475582643919998ull}},
+{{17149395541015552047ull, 380466115135998ull}},
+{{2651469988586710668ull, 304372892108799ull}},
+{{11621049611222557716ull, 486996627374078ull}},
+{{16675537318461866819ull, 389597301899262ull}},
+{{5961732225285672808ull, 311677841519410ull}},
+{{9538771560457076494ull, 498684546431056ull}},
+{{3941668433623750872ull, 398947637144845ull}},
+{{3153334746899000697ull, 319158109715876ull}},
+{{16113382039264132086ull, 510652975545401ull}},
+{{9201356816669395345ull, 408522380436321ull}},
+{{3671736638593605953ull, 326817904349057ull}},
+{{9564127436491679848ull, 522908646958491ull}},
+{{3961953134451433555ull, 418326917566793ull}},
+{{10548260137044967490ull, 334661534053434ull}},
+{{5809169775046217015ull, 535458454485495ull}},
+{{4647335820036973612ull, 428366763588396ull}},
+{{28519841287668566ull, 342693410870717ull}},
+{{3734980560802180030ull, 548309457393147ull}},
+{{14056030892867474993ull, 438647565914517ull}},
+{{3866127084810159348ull, 350918052731614ull}},
+{{13564500965180075604ull, 561468884370582ull}},
+{{3472903142660239837ull, 449175107496466ull}},
+{{17535717773095833162ull, 359340085997172ull}},
+{{6649876588992845883ull, 287472068797738ull}},
+{{6950453727646643090ull, 459955310076381ull}},
+{{1871014167375404149ull, 367964248061105ull}},
+{{1496811333900323319ull, 294371398448884ull}},
+{{9773595763724337957ull, 470994237518214ull}},
+{{11508225425721380689ull, 376795390014571ull}},
+{{5517231525835194228ull, 301436312011657ull}},
+{{12516919256078221088ull, 482298099218651ull}},
+{{6324186590120666547ull, 385838479374921ull}},
+{{1370000457354622914ull, 308670783499937ull}},
+{{5881349546509306986ull, 493873253599899ull}},
+{{8394428451949355912ull, 395098602879919ull}},
+{{10404891576301395053ull, 316078882303935ull}},
+{{16647826522082232085ull, 505726211686296ull}},
+{{9628912402923875344ull, 404580969349037ull}},
+{{324432292855279629ull, 323664775479230ull}},
+{{519091668568447407ull, 517863640766768ull}},
+{{7793970964338578572ull, 414290912613414ull}},
+{{9924525586212773180ull, 331432730090731ull}},
+{{8500543308456616443ull, 530292368145170ull}},
+{{6800434646765293154ull, 424233894516136ull}},
+{{1750998902670324200ull, 339387115612909ull}},
+{{10180295873756339367ull, 543019384980654ull}},
+{{11833585513746981816ull, 434415507984523ull}},
+{{16845566040481406099ull, 347532406387618ull}},
+{{4816812776318787820ull, 556051850220190ull}},
+{{3853450221055030256ull, 444841480176152ull}},
+{{14150806621069755174ull, 355873184140921ull}},
+{{7631296482113893816ull, 284698547312737ull}},
+{{15899423186124140429ull, 455517675700379ull}},
+{{16408887363641222667ull, 364414140560303ull}},
+{{2059063446687247164ull, 291531312448243ull}},
+{{18051896773667236755ull, 466450099917188ull}},
+{{3373470974708058434ull, 373160079933751ull}},
+{{17456172038734088040ull, 298528063947000ull}},
+{{9483131188264989248ull, 477644902315201ull}},
+{{3897156135870081075ull, 382115921852161ull}},
+{{17875120167663706153ull, 305692737481728ull}},
+{{6464099379810467906ull, 489108379970766ull}},
+{{1481930689106464001ull, 391286703976613ull}},
+{{8564242180768991847ull, 313029363181290ull}},
+{{13702787489230386956ull, 500846981090064ull}},
+{{14651578806126219888ull, 400677584872051ull}},
+{{8031914230159065587ull, 320542067897641ull}},
+{{5472365138770684293ull, 512867308636226ull}},
+{{688543296274637111ull, 410293846908981ull}},
+{{15308229895987350982ull, 328235077527184ull}},
+{{13425121389354030601ull, 525176124043495ull}},
+{{10740097111483224481ull, 420140899234796ull}},
+{{4902728874444669262ull, 336112719387837ull}},
+{{11533715013853381142ull, 537780351020539ull}},
+{{12916320825824615237ull, 430224280816431ull}},
+{{6643707845917781866ull, 344179424653145ull}},
+{{10629932553468450986ull, 550687079445032ull}},
+{{1125248413290940142ull, 440549663556026ull}},
+{{15657593989600393407ull, 352439730844820ull}},
+{{12526075191680314725ull, 281951784675856ull}},
+{{12663022677204682914ull, 451122855481370ull}},
+{{10130418141763746331ull, 360898284385096ull}},
+{{4414985698669086742ull, 288718627508077ull}},
+{{10753325932612449110ull, 461949804012923ull}},
+{{15981358375573779934ull, 369559843210338ull}},
+{{1717040256233292978ull, 295647874568271ull}},
+{{13815310854198999734ull, 473036599309233ull}},
+{{18430946312843020434ull, 378429279447386ull}},
+{{11055408235532506024ull, 302743423557909ull}},
+{{6620606732626278669ull, 484389477692655ull}},
+{{5296485386101022935ull, 387511582154124ull}},
+{{7926537123622728671ull, 310009265723299ull}},
+{{1614412953570634904ull, 496014825157279ull}},
+{{4980879177598418247ull, 396811860125823ull}},
+{{11363400971562555244ull, 317449488100658ull}},
+{{14492092739758178067ull, 507919180961053ull}},
+{{525627747580811484ull, 406335344768843ull}},
+{{7799199827548469833ull, 325068275815074ull}},
+{{1410673279851820764ull, 520109241304119ull}},
+{{4817887438623366934ull, 416087393043295ull}},
+{{3854309950898693547ull, 332869914434636ull}},
+{{17234942365663640646ull, 532591863095417ull}},
+{{6409256263047091870ull, 426073490476334ull}},
+{{8816753825179583819ull, 340858792381067ull}},
+{{17796154935029244434ull, 545374067809707ull}},
+{{6858226318539574901ull, 436299254247766ull}},
+{{1797232240089749597ull, 349039403398213ull}},
+{{17632966843111240649ull, 558463045437140ull}},
+{{14106373474488992519ull, 446770436349712ull}},
+{{3906401150107373369ull, 357416349079770ull}},
+{{3125120920085898695ull, 285933079263816ull}},
+{{16068239916363168882ull, 457492926822105ull}},
+{{12854591933090535105ull, 365994341457684ull}},
+{{13973022361214338407ull, 292795473166147ull}},
+{{7599440518975300159ull, 468472757065836ull}},
+{{2390203600438329804ull, 374778205652669ull}},
+{{5601511695092574166ull, 299822564522135ull}},
+{{8962418712148118666ull, 479716103235416ull}},
+{{3480586154976584610ull, 383772882588333ull}},
+{{10163166553465088334ull, 307018306070666ull}},
+{{8882368856060320688ull, 491229289713066ull}},
+{{3416546270106346227ull, 392983431770453ull}},
+{{10111934645568897628ull, 314386745416362ull}},
+{{1421700173942594913ull, 503018792666180ull}},
+{{1137360139154075930ull, 402415034132944ull}},
+{{4599236926065171067ull, 321932027306355ull}},
+{{7358779081704273708ull, 515091243690168ull}},
+{{13265720894847239612ull, 412072994952134ull}},
+{{14301925530619702013ull, 329658395961707ull}},
+{{8125685590023881928ull, 527453433538732ull}},
+{{17568594916244836512ull, 421962746830985ull}},
+{{14054875932995869210ull, 337570197464788ull}},
+{{351708604341928797ull, 540112315943662ull}},
+{{11349413327699274007ull, 432089852754929ull}},
+{{12768879476901329529ull, 345671882203943ull}},
+{{16740858348300216923ull, 553075011526309ull}},
+{{17082035493382083861ull, 442460009221047ull}},
+{{6286930765221846443ull, 353968007376838ull}},
+{{12408242241661297800ull, 283174405901470ull}},
+{{1406443512948524865ull, 453079049442353ull}},
+{{8503852439842640538ull, 362463239553882ull}},
+{{17871128396099843400ull, 289970591643105ull}},
+{{10147061360050197824ull, 463952946628969ull}},
+{{11806997902782068583ull, 371162357303175ull}},
+{{9445598322225654866ull, 296929885842540ull}},
+{{15112957315561047786ull, 475087817348064ull}},
+{{15779714667190748552ull, 380070253878451ull}},
+{{8934422919010688518ull, 304056203102761ull}},
+{{6916379040933280983ull, 486489924964418ull}},
+{{12911800862230445433ull, 389191939971534ull}},
+{{14018789504526266669ull, 311353551977227ull}},
+{{7672667948274385378ull, 498165683163564ull}},
+{{9827483173361418626ull, 398532546530851ull}},
+{{4172637723947224577ull, 318826037224681ull}},
+{{17744266802541290293ull, 510121659559489ull}},
+{{17884762256774942558ull, 408097327647591ull}},
+{{10618460990678043723ull, 326477862118073ull}},
+{{13300188770342959634ull, 522364579388917ull}},
+{{3261453386790547061ull, 417891663511134ull}},
+{{6298511524174347972ull, 334313330808907ull}},
+{{13766967253420867078ull, 534901329294251ull}},
+{{7324224987994783339ull, 427921063435401ull}},
+{{2170031175653916348ull, 342336850748321ull}},
+{{14540096325271997127ull, 547738961197313ull}},
+{{564030615991866732ull, 438191168957851ull}},
+{{15208619751761134678ull, 350552935166280ull}},
+{{5887047529108263869ull, 560884696266049ull}},
+{{8398986838028521418ull, 448707757012839ull}},
+{{10408538285164727458ull, 358966205610271ull}},
+{{4637481813389871643ull, 287172964488217ull}},
+{{11109319716165704952ull, 459476743181147ull}},
+{{1508758143448743315ull, 367581394544918ull}},
+{{8585704144242815299ull, 294065115635934ull}},
+{{2669080186562773508ull, 470504185017495ull}},
+{{2135264149250218807ull, 376403348013996ull}},
+{{16465606578367816338ull, 301122678411196ull}},
+{{519528822195133879ull, 481796285457915ull}},
+{{415623057756107103ull, 385437028366332ull}},
+{{11400544890430616652ull, 308349622693065ull}},
+{{18240871824688986643ull, 493359396308904ull}},
+{{18282046274493099638ull, 394687517047123ull}},
+{{3557590575368748740ull, 315750013637699ull}},
+{{13070842550073818631ull, 505200021820318ull}},
+{{17835371669542875551ull, 404160017456254ull}},
+{{17957646150376210764ull, 323328013965003ull}},
+{{6596140952150475284ull, 517324822344006ull}},
+{{1587563946978469904ull, 413859857875205ull}},
+{{1270051157582775923ull, 331087886300164ull}},
+{{9410779481616262123ull, 529740618080262ull}},
+{{149925955809189052ull, 423792494464210ull}},
+{{119940764647351242ull, 339033995571368ull}},
+{{14949300482403403280ull, 542454392914188ull}},
+{{891393941696991654ull, 433963514331351ull}},
+{{15470510412325234616ull, 347170811465080ull}},
+{{6306072586010823770ull, 555473298344129ull}},
+{{8734206883550569339ull, 444378638675303ull}},
+{{14366063136324276117ull, 355502910940242ull}},
+{{4114152879575600247ull, 284402328752194ull}},
+{{13961342236804781043ull, 455043726003510ull}},
+{{11169073789443824834ull, 364034980802808ull}},
+{{16313956661038880514ull, 291227984642246ull}},
+{{276888954468836560ull, 465964775427595ull}},
+{{221511163575069248ull, 372771820342076ull}},
+{{14934604189827696691ull, 298217456273660ull}},
+{{5448622630014763089ull, 477147930037857ull}},
+{{15426944548237541441ull, 381718344030285ull}},
+{{12341555638590033153ull, 305374675224228ull}},
+{{16057140207002142722ull, 488599480358765ull}},
+{{12845712165601714177ull, 390879584287012ull}},
+{{2897872102997550695ull, 312703667429610ull}},
+{{4636595364796081113ull, 500325867887376ull}},
+{{19927477094954567ull, 400260694309901ull}},
+{{14773337240643604946ull, 320208555447920ull}},
+{{5190595511320216298ull, 512333688716673ull}},
+{{11531174038539993685ull, 409866950973338ull}},
+{{16603636860315815594ull, 327893560778670ull}},
+{{8119074902795753335ull, 524629697245873ull}},
+{{13873957551720423314ull, 419703757796698ull}},
+{{31119597150607682ull, 335763006237359ull}},
+{{7428488984924792937ull, 537220809979774ull}},
+{{9632140002681744673ull, 429776647983819ull}},
+{{11395060816887306061ull, 343821318387055ull}},
+{{18232097307019689699ull, 550114109419288ull}},
+{{3517631401390020789ull, 440091287535431ull}},
+{{17571500380079657924ull, 352073030028344ull}},
+{{17746549118805636662ull, 281658424022675ull}},
+{{9947734516379467044ull, 450653478436281ull}},
+{{4268838798361663312ull, 360522782749025ull}},
+{{3415071038689330649ull, 288418226199220ull}},
+{{5464113661902929039ull, 461469161918752ull}},
+{{15439337373748074201ull, 369175329535001ull}},
+{{8662121084256549038ull, 295340263628001ull}},
+{{6480696105326657814ull, 472544421804802ull}},
+{{16252603328487057221ull, 378035537443841ull}},
+{{9312733848047735453ull, 302428429955073ull}},
+{{11211025342134466402ull, 483885487928117ull}},
+{{1590122644223752475ull, 387108390342494ull}},
+{{4961446930120912303ull, 309686712273995ull}},
+{{7938315088193459686ull, 495498739638392ull}},
+{{17418698514780498718ull, 396398991710713ull}},
+{{2866912367598668005ull, 317119193368571ull}},
+{{15655106232383599778ull, 507390709389713ull}},
+{{1456038541681148852ull, 405912567511771ull}},
+{{15922226092312560375ull, 324730054009416ull}},
+{{18096864118216275953ull, 519568086415066ull}},
+{{10788142479831110439ull, 415654469132053ull}},
+{{16009211613348708998ull, 332523575305642ull}},
+{{10857343322390293104ull, 532037720489028ull}},
+{{16064572287396055129ull, 425630176391222ull}},
+{{5472960200433023457ull, 340504141112978ull}},
+{{5067387505950927208ull, 544806625780765ull}},
+{{4053910004760741767ull, 435845300624612ull}},
+{{14311174448034324383ull, 348676240499689ull}},
+{{11829832672629188043ull, 557881984799503ull}},
+{{16842563767587171081ull, 446305587839602ull}},
+{{6095353384585916218ull, 357044470271682ull}},
+{{15944329151894463944ull, 285635576217345ull}},
+{{7064182569321590695ull, 457016921947753ull}},
+{{13030043684941093202ull, 365613537558202ull}},
+{{3045337318469053915ull, 292490830046562ull}},
+{{8561888524292396588ull, 467985328074499ull}},
+{{10538859634175827593ull, 374388262459599ull}},
+{{12120436522082572398ull, 299510609967679ull}},
+{{8324651991106384867ull, 479216975948287ull}},
+{{17727768037110838863ull, 383373580758629ull}},
+{{17871563244430581414ull, 306698864606903ull}},
+{{6458408302637468323ull, 490718183371046ull}},
+{{1477377827368064335ull, 392574546696837ull}},
+{{12249948706120182437ull, 314059637357469ull}},
+{{8531871485566560931ull, 502495419771951ull}},
+{{3136148373711338421ull, 401996335817561ull}},
+{{17266313957936712030ull, 321597068654048ull}},
+{{5490009444247277309ull, 514555309846478ull}},
+{{11770705184881642493ull, 411644247877182ull}},
+{{2037866518421493348ull, 329315398301746ull}},
+{{14328632873700120327ull, 526904637282793ull}},
+{{394859854734365292ull, 421523709826235ull}},
+{{315887883787492233ull, 337218967860988ull}},
+{{15262815873027628866ull, 539550348577580ull}},
+{{12210252698422103093ull, 431640278862064ull}},
+{{13457550973479592797ull, 345312223089651ull}},
+{{14153383928083527830ull, 552499556943442ull}},
+{{3944009512983001617ull, 441999645554754ull}},
+{{6844556425128311617ull, 353599716443803ull}},
+{{12854342769586469940ull, 282879773155042ull}},
+{{5809553172370710611ull, 452607637048068ull}},
+{{12026340167380389135ull, 362086109638454ull}},
+{{13310420948646221631ull, 289668887710763ull}},
+{{17607324703092044287ull, 463470220337221ull}},
+{{10396510947731725107ull, 370776176269777ull}},
+{{938511128701559439ull, 296620941015822ull}},
+{{5190966620664405426ull, 474593505625315ull}},
+{{4152773296531524340ull, 379674804500252ull}},
+{{14390265081450950442ull, 303739843600201ull}},
+{{15645726500837700061ull, 485983749760322ull}},
+{{5137883571186339402ull, 388786999808258ull}},
+{{11489004486432892168ull, 311029599846606ull}},
+{{11003709548808806823ull, 497647359754570ull}},
+{{8802967639047045458ull, 398117887803656ull}},
+{{3353025296495726043ull, 318494310242925ull}},
+{{5364840474393161669ull, 509590896388680ull}},
+{{4291872379514529335ull, 407672717110944ull}},
+{{7122846718353533791ull, 326138173688755ull}},
+{{11396554749365654066ull, 521821077902008ull}},
+{{16495941428976343899ull, 417456862321606ull}},
+{{9507404328439164796ull, 333965489857285ull}},
+{{15211846925502663674ull, 534344783771656ull}},
+{{8480128725660220616ull, 427475827017325ull}},
+{{6784102980528176493ull, 341980661613860ull}},
+{{10854564768845082389ull, 547169058582176ull}},
+{{4994303000334155588ull, 437735246865741ull}},
+{{306093585525414147ull, 350188197492593ull}},
+{{15247144995808303928ull, 560301115988148ull}},
+{{1129669552420912173ull, 448240892790519ull}},
+{{4593084456678640061ull, 358592714232415ull}},
+{{3674467565342912049ull, 286874171385932ull}},
+{{9568496919290569602ull, 458998674217491ull}},
+{{3965448720690545358ull, 367198939373993ull}},
+{{10551056606036256933ull, 293759151499194ull}},
+{{5813644125432280123ull, 470014642398711ull}},
+{{961566485603913775ull, 376011713918969ull}},
+{{4458602003225041343ull, 300809371135175ull}},
+{{7133763205160066150ull, 481294993816280ull}},
+{{5707010564128052920ull, 385035995053024ull}},
+{{8254957266044352659ull, 308028796042419ull}},
+{{2139885181445233285ull, 492846073667871ull}},
+{{16469303404123827921ull, 394276858934296ull}},
+{{9486093908557152013ull, 315421487147437ull}},
+{{420354994723801929ull, 504674379435900ull}},
+{{336283995779041543ull, 403739503548720ull}},
+{{269027196623233234ull, 322991602838976ull}},
+{{11498489958822904144ull, 516786564542361ull}},
+{{5509443152316412992ull, 413429251633889ull}},
+{{8096903336595040717ull, 330743401307111ull}},
+{{5576347709068244501ull, 529189442091378ull}},
+{{11839775796738416247ull, 423351553673102ull}},
+{{2093123007906912351ull, 338681242938482ull}},
+{{7038345627392970085ull, 541889988701571ull}},
+{{1941327687172465745ull, 433511990961257ull}},
+{{12621108593963703565ull, 346809592769005ull}},
+{{1747029676632374089ull, 554895348430409ull}},
+{{5086972556047809594ull, 443916278744327ull}},
+{{15137624489063978645ull, 355133022995461ull}},
+{{8420750776509272593ull, 284106418396369ull}},
+{{2405154798189105179ull, 454570269434191ull}},
+{{16681519097518925436ull, 363656215547352ull}},
+{{5966517648531319702ull, 290924972437882ull}},
+{{13235777052392021847ull, 465479955900611ull}},
+{{6899272827171707154ull, 372383964720489ull}},
+{{9208767076479276047ull, 297907171776391ull}},
+{{7355329692883021028ull, 476651474842226ull}},
+{{2194914939564506499ull, 381321179873781ull}},
+{{16513327210619246492ull, 305056943899024ull}},
+{{15353277092765063418ull, 488091110238439ull}},
+{{15971970488953961058ull, 390472888190751ull}},
+{{9088227576421258523ull, 312378310552601ull}},
+{{7162466492790192990ull, 499805296884162ull}},
+{{16798019638457885362ull, 399844237507329ull}},
+{{17127764525508218613ull, 319875390005863ull}},
+{{5268330352361687841ull, 511800624009382ull}},
+{{15282710726115081243ull, 409440499207505ull}},
+{{12226168580892064994ull, 327552399366004ull}},
+{{8493823285201573021ull, 524083838985607ull}},
+{{17863105072386989386ull, 419267071188485ull}},
+{{14290484057909591509ull, 335413656950788ull}},
+{{728681604203884475ull, 536661851121262ull}},
+{{11650991727588838550ull, 429329480897009ull}},
+{{13010142196812981163ull, 343463584717607ull}},
+{{6058832255933128568ull, 549541735548172ull}},
+{{15915112248972233824ull, 439633388438537ull}},
+{{5353392169693966413ull, 351706710750830ull}},
+{{8565427471510346261ull, 562730737201328ull}},
+{{14231039606692097655ull, 450184589761062ull}},
+{{4006134055869857477ull, 360147671808850ull}},
+{{3204907244695885982ull, 288118137447080ull}},
+{{5127851591513417571ull, 460989019915328ull}},
+{{11480978902694554703ull, 368791215932262ull}},
+{{1806085492671823116ull, 295032972745810ull}},
+{{2889736788274916986ull, 472052756393296ull}},
+{{17069184689587574882ull, 377642205114636ull}},
+{{9965998936928149582ull, 302113764091709ull}},
+{{4877551854859308362ull, 483382022546735ull}},
+{{3902041483887446689ull, 386705618037388ull}},
+{{10500330816593777998ull, 309364494429910ull}},
+{{16800529306550044797ull, 494983191087856ull}},
+{{9751074630498125514ull, 395986552870285ull}},
+{{7800859704398500411ull, 316789242296228ull}},
+{{8792026712295690335ull, 506862787673965ull}},
+{{7033621369836552268ull, 405490230139172ull}},
+{{16694943540094972784ull, 324392184111337ull}},
+{{11954514405184315162ull, 519027494578140ull}},
+{{9563611524147452129ull, 415221995662512ull}},
+{{272191589834141057ull, 332177596530010ull}},
+{{435506543734625691ull, 531484154448016ull}},
+{{15105800493955341846ull, 425187323558412ull}},
+{{4705942765680452830ull, 340149858846730ull}},
+{{7529508425088724528ull, 544239774154768ull}},
+{{13402304369554800269ull, 435391819323814ull}},
+{{14411192310385750538ull, 348313455459051ull}},
+{{15679210067133380215ull, 557301528734482ull}},
+{{5164670424222883526ull, 445841222987586ull}},
+{{442387524636396497ull, 356672978390069ull}},
+{{4043258834451027521ull, 285338382712055ull}},
+{{6469214135121644034ull, 456541412339288ull}},
+{{12554068937581135873ull, 365233129871430ull}},
+{{10043255150064908699ull, 292186503897144ull}},
+{{5001161795878122948ull, 467498406235431ull}},
+{{311580621960588035ull, 373998724988345ull}},
+{{249264497568470428ull, 299198979990676ull}},
+{{11466869640335283655ull, 478718367985081ull}},
+{{5484146897526316601ull, 382974694388065ull}},
+{{4387317518021053280ull, 306379755510452ull}},
+{{10709056843575595572ull, 490207608816723ull}},
+{{15945943104344297104ull, 392166087053378ull}},
+{{1688708039249706714ull, 313732869642703ull}},
+{{17459328121767172035ull, 501972591428324ull}},
+{{17656811312155647951ull, 401578073142659ull}},
+{{17814797864466428684ull, 321262458514127ull}},
+{{13746281324178644602ull, 514019933622604ull}},
+{{14686373874084826004ull, 411215946898083ull}},
+{{681052655042129834ull, 328972757518467ull}},
+{{4779033062809318058ull, 526356412029547ull}},
+{{14891272894473185416ull, 421085129623637ull}},
+{{4534320686094727686ull, 336868103698910ull}},
+{{7254913097751564298ull, 538988965918256ull}},
+{{2114581663459341115ull, 431191172734605ull}},
+{{1691665330767472892ull, 344952938187684ull}},
+{{10085362158711777274ull, 551924701100294ull}},
+{{11757638541711332142ull, 441539760880235ull}},
+{{9406110833369065714ull, 353231808704188ull}},
+{{14903586296179073217ull, 282585446963350ull}},
+{{5398994000176965532ull, 452136715141361ull}},
+{{629846385399662102ull, 361709372113089ull}},
+{{4193225923061640005ull, 289367497690471ull}},
+{{17777207921124354978ull, 462987996304753ull}},
+{{3153719892673753012ull, 370390397043803ull}},
+{{9901673543622823056ull, 296312317635042ull}},
+{{1085282410828875597ull, 474099708216068ull}},
+{{8246923558146921124ull, 379279766572854ull}},
+{{10286887661259447222ull, 303423813258283ull}},
+{{12769671443273205233ull, 485478101213253ull}},
+{{17594434784102384833ull, 388382480970602ull}},
+{{6696850197798087220ull, 310705984776482ull}},
+{{14404309131218849875ull, 497129575642371ull}},
+{{7834098490233169577ull, 397703660513897ull}},
+{{17335325236412266631ull, 318162928411117ull}},
+{{12979125119291985317ull, 509060685457788ull}},
+{{17761997724917408900ull, 407248548366230ull}},
+{{14209598179933927120ull, 325798838692984ull}},
+{{11667310643668552422ull, 521278141908775ull}},
+{{9333848514934841938ull, 417022513527020ull}},
+{{7467078811947873550ull, 333618010821616ull}},
+{{4568628469632777034ull, 533788817314586ull}},
+{{18412298034673862920ull, 427031053851668ull}},
+{{3661791983513359366ull, 341624843081335ull}},
+{{5858867173621374986ull, 546599748930136ull}},
+{{997744924155189666ull, 437279799144109ull}},
+{{4487544754066062056ull, 349823839315287ull}},
+{{10869420421247609613ull, 559718142904459ull}},
+{{12384885151739998013ull, 447774514323567ull}},
+{{2529210491908177764ull, 358219611458854ull}},
+{{5712717208268452534ull, 286575689167083ull}},
+{{5450998718487613732ull, 458521102667333ull}},
+{{11739496604273911632ull, 366816882133866ull}},
+{{5702248468677218982ull, 293453505707093ull}},
+{{5434248735141640049ull, 469525609131349ull}},
+{{8036747802855222362ull, 375620487305079ull}},
+{{10118747057026088213ull, 300496389844063ull}},
+{{12500646476499830818ull, 480794223750501ull}},
+{{6311168366457954331ull, 384635379000401ull}},
+{{1359585878424453141ull, 307708303200321ull}},
+{{13243383849704855996ull, 492333285120513ull}},
+{{17973404709247705443ull, 393866628096410ull}},
+{{14378723767398164354ull, 315093302477128ull}},
+{{869865139385601028ull, 504149283963406ull}},
+{{15453287370476122115ull, 403319427170724ull}},
+{{16051978711122808015ull, 322655541736579ull}},
+{{14615119493570761855ull, 516248866778527ull}},
+{{4313397965372788838ull, 412999093422822ull}},
+{{14518764816523962040ull, 330399274738257ull}},
+{{8472628447470697971ull, 528638839581212ull}},
+{{17846149202202289346ull, 422911071664969ull}},
+{{17966268176503741800ull, 338328857331975ull}},
+{{10299285008696435264ull, 541326171731161ull}},
+{{4550079192215237888ull, 433060937384929ull}},
+{{7329412168514100634ull, 346448749907943ull}},
+{{8037710654880650691ull, 554317999852709ull}},
+{{10119517338646430876ull, 443454399882167ull}},
+{{716916241433324054ull, 354763519905734ull}},
+{{4262881807888569566ull, 283810815924587ull}},
+{{10509959707363621630ull, 454097305479339ull}},
+{{12097316580632807627ull, 363277844383471ull}},
+{{5988504449764335778ull, 290622275506777ull}},
+{{13270955934364847569ull, 464995640810843ull}},
+{{17995462376975698701ull, 371996512648674ull}},
+{{18085718716322469284ull, 297597210118939ull}},
+{{17869103501890219885ull, 476155536190303ull}},
+{{3227236357286444938ull, 380924428952243ull}},
+{{9960486715312976597ull, 304739543161794ull}},
+{{4868732300275031586ull, 487583269058871ull}},
+{{205637025478114945ull, 390066615247097ull}},
+{{11232556064608222926ull, 312053292197677ull}},
+{{3214694444405515389ull, 499285267516284ull}},
+{{6261104370266322634ull, 399428214013027ull}},
+{{16076929940438789077ull, 319542571210421ull}},
+{{18344390275218241877ull, 511268113936674ull}},
+{{18364861034916503825ull, 409014491149339ull}},
+{{18381237642675113383ull, 327211592919471ull}},
+{{3584538525086809150ull, 523538548671155ull}},
+{{2867630820069447320ull, 418830838936924ull}},
+{{5983453470797468179ull, 335064671149539ull}},
+{{16952223182759769734ull, 536103473839262ull}},
+{{6183080916723995140ull, 428882779071410ull}},
+{{4946464733379196112ull, 343106223257128ull}},
+{{4224994758664803457ull, 548969957211405ull}},
+{{3379995806931842765ull, 439175965769124ull}},
+{{6393345460287384535ull, 351340772615299ull}},
+{{17608050365943635903ull, 562145236184478ull}},
+{{3018393848529177753ull, 449716188947583ull}},
+{{9793412708307162849ull, 359772951158066ull}},
+{{4145381351903819956ull, 287818360926453ull}},
+{{2943261348304201606ull, 460509377482325ull}},
+{{2354609078643361285ull, 368407501985860ull}},
+{{1883687262914689028ull, 294726001588688ull}},
+{{17771294879631143737ull, 471561602541900ull}},
+{{14217035903704914990ull, 377249282033520ull}},
+{{11373628722963931992ull, 301799425626816ull}},
+{{10819108327258470541ull, 482879081002906ull}},
+{{4965937847064866109ull, 386303264802325ull}},
+{{3972750277651892887ull, 309042611841860ull}},
+{{6356400444243028620ull, 494468178946976ull}},
+{{1395771540652512573ull, 395574543157581ull}},
+{{15874012491489651351ull, 316459634526064ull}},
+{{14330373542157711192ull, 506335415241703ull}},
+{{396252389500437984ull, 405068332193363ull}},
+{{7695699541084171033ull, 324054665754690ull}},
+{{12313119265734673654ull, 518487465207504ull}},
+{{13539844227329649246ull, 414789972166003ull}},
+{{18210573011347540043ull, 331831977732802ull}},
+{{14379521559188422777ull, 530931164372484ull}},
+{{15192966062092648544ull, 424744931497987ull}},
+{{4775675220190298189ull, 339795945198390ull}},
+{{7641080352304477103ull, 543673512317424ull}},
+{{9802213096585492005ull, 434938809853939ull}},
+{{11531119292010303927ull, 347951047883151ull}},
+{{11071093237732665638ull, 556721676613042ull}},
+{{1478176960702311864ull, 445377341290434ull}},
+{{4871890383303759814ull, 356301873032347ull}},
+{{14965558750868738821ull, 285041498425877ull}},
+{{9187498742422340821ull, 456066397481404ull}},
+{{11039347808679782980ull, 364853117985123ull}},
+{{16210175876427647030ull, 291882494388098ull}},
+{{3800188513832773309ull, 467011991020958ull}},
+{{10418848440550039293ull, 373609592816766ull}},
+{{4645729937698121111ull, 298887674253413ull}},
+{{3743819085575083455ull, 478220278805461ull}},
+{{17752450527427708057ull, 382576223044368ull}},
+{{3133913977716435476ull, 306060978435495ull}},
+{{5014262364346296762ull, 489697565496792ull}},
+{{15079456335702768379ull, 391758052397433ull}},
+{{995518624336483733ull, 313406441917947ull}},
+{{5282178613680284297ull, 501450307068715ull}},
+{{4225742890944227438ull, 401160245654972ull}},
+{{14448640756981112920ull, 320928196523977ull}},
+{{8360429952202139379ull, 513485114438364ull}},
+{{10377692776503621826ull, 410788091550691ull}},
+{{4612805406460987138ull, 328630473240553ull}},
+{{3691139835595669097ull, 525808757184885ull}},
+{{2952911868476535278ull, 420647005747908ull}},
+{{9741027124265048868ull, 336517604598326ull}},
+{{8206945769340257543ull, 538428167357322ull}},
+{{17633603059697937004ull, 430742533885857ull}},
+{{6728184818274528957ull, 344594027108686ull}},
+{{3386398079755425685ull, 551350443373898ull}},
+{{10087816093288161194ull, 441080354699118ull}},
+{{15448950504114349602ull, 352864283759294ull}},
+{{16048509218033390004ull, 282291427007435ull}},
+{{7230870675143872391ull, 451666283211897ull}},
+{{16852742984340828883ull, 361333026569517ull}},
+{{6103496757988842460ull, 289066421255614ull}},
+{{17144292442265968582ull, 462506274008982ull}},
+{{6336736324328954219ull, 370005019207186ull}},
+{{1380040244721253052ull, 296004015365749ull}},
+{{9586762021037825530ull, 473606424585198ull}},
+{{15048107246314081070ull, 378885139668158ull}},
+{{970439352825533886ull, 303108111734527ull}},
+{{5242051779262764542ull, 484972978775243ull}},
+{{11572339052894032280ull, 387978383020194ull}},
+{{12947220057057136147ull, 310382706416155ull}},
+{{2268808017581866219ull, 496612330265849ull}},
+{{5504395228807403299ull, 397289864212679ull}},
+{{8092864997787832962ull, 317831891370143ull}},
+{{9259235181718622416ull, 508531026192229ull}},
+{{11096736960116808256ull, 406824820953783ull}},
+{{16256087197577267251ull, 325459856763026ull}},
+{{184297812930255340ull, 520735770820843ull}},
+{{7526135879828024918ull, 416588616656674ull}},
+{{9710257518604330258ull, 333270893325339ull}},
+{{4468365585541197443ull, 533233429320543ull}},
+{{10953390097916778601ull, 426586743456434ull}},
+{{12452060893075333204ull, 341269394765147ull}},
+{{5165902169952891833ull, 546031031624236ull}},
+{{443372921220403143ull, 436824825299389ull}},
+{{4044047151718232838ull, 349459860239511ull}},
+{{17538521886974903510ull, 559135776383217ull}},
+{{6652119880096102162ull, 447308621106574ull}},
+{{9011044718818792053ull, 357846896885259ull}},
+{{10898184589796943965ull, 286277517508207ull}},
+{{2679700084707469052ull, 458044028013132ull}},
+{{13211806511991706211ull, 366435222410505ull}},
+{{10569445209593364969ull, 293148177928404ull}},
+{{5843065891123652980ull, 469037084685447ull}},
+{{15742499157124653354ull, 375229667748357ull}},
+{{5215301696215902037ull, 300183734198686ull}},
+{{965785084461622612ull, 480293974717898ull}},
+{{8151325697053118736ull, 384235179774318ull}},
+{{13899758187126315635ull, 307388143819454ull}},
+{{11171566655176374047ull, 491821030111127ull}},
+{{1558555694657278591ull, 393456824088902ull}},
+{{12314890999951553842ull, 314765459271121ull}},
+{{12325127970438665502ull, 503624734833794ull}},
+{{13549451191092842725ull, 402899787867035ull}},
+{{10839560952874274180ull, 322319830293628ull}},
+{{13653948709856928364ull, 515711728469805ull}},
+{{10923158967885542691ull, 412569382775844ull}},
+{{12427875989050344476ull, 330055506220675ull}},
+{{1437857508770999546ull, 528088809953081ull}},
+{{15907681265984440930ull, 422471047962464ull}},
+{{16415493827529463067ull, 337976838369971ull}},
+{{439348420853768645ull, 540762941391955ull}},
+{{351478736683014916ull, 432610353113564ull}},
+{{3970531804088322256ull, 346088282490851ull}},
+{{17420897330767046579ull, 553741251985361ull}},
+{{10247369049871726940ull, 442993001588289ull}},
+{{11887244054639291875ull, 354394401270631ull}},
+{{5820446428969523177ull, 283515521016505ull}},
+{{9312714286351237083ull, 453624833626408ull}},
+{{14828869058564810313ull, 362899866901126ull}},
+{{8173746432109937927ull, 290319893520901ull}},
+{{5699296661892080037ull, 464511829633442ull}},
+{{15627483773739394999ull, 371609463706753ull}},
+{{1433940574765785030ull, 297287570965403ull}},
+{{17051700178592897340ull, 475660113544644ull}},
+{{17330708957616228195ull, 380528090835715ull}},
+{{13864567166092982556ull, 304422472668572ull}},
+{{7425912206781130798ull, 487075956269716ull}},
+{{2251380950682994315ull, 389660765015773ull}},
+{{9179802390030216098ull, 311728612012618ull}},
+{{10998335009306435434ull, 498765779220189ull}},
+{{12488016822187058670ull, 399012623376151ull}},
+{{6301064643007736613ull, 319210098700921ull}},
+{{2703005799328557935ull, 510736157921474ull}},
+{{5851753454204756671ull, 408588926337179ull}},
+{{8370751578105715660ull, 326871141069743ull}},
+{{9703853710227234733ull, 522993825711589ull}},
+{{11452431782923698109ull, 418395060569271ull}},
+{{5472596611597048164ull, 334716048455417ull}},
+{{12445503393297187386ull, 535545677528667ull}},
+{{2577705085153929262ull, 428436542022934ull}},
+{{5751512882865053733ull, 342749233618347ull}},
+{{12891769427325996296ull, 548398773789355ull}},
+{{10313415541860797037ull, 438719019031484ull}},
+{{11940081248230547953ull, 350975215225187ull}},
+{{4346734738201235432ull, 561560344360300ull}},
+{{3477387790560988345ull, 449248275488240ull}},
+{{2781910232448790676ull, 359398620390592ull}},
+{{13293574630184763510ull, 287518896312473ull}},
+{{17580370593553711294ull, 460030234099957ull}},
+{{6685598845359148388ull, 368024187279966ull}},
+{{1659130261545408387ull, 294419349823973ull}},
+{{17412003677440294713ull, 471070959718356ull}},
+{{10240254127210325447ull, 376856767774685ull}},
+{{8192203301768260358ull, 301485414219748ull}},
+{{9418176468087306249ull, 482376662751597ull}},
+{{155843544986024353ull, 385901330201278ull}},
+{{7503372465472640129ull, 308721064161022ull}},
+{{15694744759498134529ull, 493953702657635ull}},
+{{12555795807598507623ull, 395162962126108ull}},
+{{17423334275562626745ull, 316130369700886ull}},
+{{2051893137706830530ull, 505808591521419ull}},
+{{5330863324907374747ull, 404646873217135ull}},
+{{4264690659925899798ull, 323717498573708ull}},
+{{3134156241139529353ull, 517947997717933ull}},
+{{9886022622395444129ull, 414358398174346ull}},
+{{4219469283174444980ull, 331486718539477ull}},
+{{10440499667821022291ull, 530378749663163ull}},
+{{15731097363740638479ull, 424302999730530ull}},
+{{12584877890992510783ull, 339442399784424ull}},
+{{9067758181362286284ull, 543107839655079ull}},
+{{10943555359831739350ull, 434486271724063ull}},
+{{16133541917349212126ull, 347589017379250ull}},
+{{7366922994049187787ull, 556142427806801ull}},
+{{2204189580497439906ull, 444913942245441ull}},
+{{16520746923365593218ull, 355931153796352ull}},
+{{5837899909208653928ull, 284744923037082ull}},
+{{13029988669475756608ull, 455591876859331ull}},
+{{6734642120838694963ull, 364473501487465ull}},
+{{5387713696670955970ull, 291578801189972ull}},
+{{12309690729415439876ull, 466526081903955ull}},
+{{9847752583532351900ull, 373220865523164ull}},
+{{11567550881567791843ull, 298576692418531ull}},
+{{11129383781024646303ull, 477722707869650ull}},
+{{8903507024819717043ull, 382178166295720ull}},
+{{7122805619855773634ull, 305742533036576ull}},
+{{4017791362285417168ull, 489188052858522ull}},
+{{14282279534054064704ull, 391350442286817ull}},
+{{4047125997759431117ull, 313080353829454ull}},
+{{13854099225898910434ull, 500928566127126ull}},
+{{7393930565977218024ull, 400742852901701ull}},
+{{2225795638039864096ull, 320594282321361ull}},
+{{14629319465089513523ull, 512950851714177ull}},
+{{4324757942587790172ull, 410360681371342ull}},
+{{14527852798295963107ull, 328288545097073ull}},
+{{1108471588822079032ull, 525261672155318ull}},
+{{8265474900541483872ull, 420209337724254ull}},
+{{10301728735175097421ull, 336167470179403ull}},
+{{12793417161538245550ull, 537867952287045ull}},
+{{10234733729230596440ull, 430294361829636ull}},
+{{4498438168642566829ull, 344235489463709ull}},
+{{14576198699311927573ull, 550776783141934ull}},
+{{15350307774191452381ull, 440621426513547ull}},
+{{4901548589869341258ull, 352497141210838ull}},
+{{11299936501379293653ull, 281997712968670ull}},
+{{18079898402206869845ull, 451196340749872ull}},
+{{7085221092281675230ull, 360957072599898ull}},
+{{13046874503309160830ull, 288765658079918ull}},
+{{17185650390552747005ull, 462025052927869ull}},
+{{17437869127184107927ull, 369620042342295ull}},
+{{13950295301747286342ull, 295696033873836ull}},
+{{14941774853311837501ull, 473113654198138ull}},
+{{885373438423739031ull, 378490923358511ull}},
+{{15465694009706632517ull, 302792738686808ull}},
+{{2609017527079150089ull, 484468381898894ull}},
+{{5776562836405230394ull, 387574705519115ull}},
+{{4621250269124184315ull, 310059764415292ull}},
+{{11083349245340605228ull, 496095623064467ull}},
+{{1487981766788663536ull, 396876498451574ull}},
+{{4879734228172841152ull, 317501198761259ull}},
+{{15186272394560366489ull, 508001918018014ull}},
+{{15838366730390203515ull, 406401534414411ull}},
+{{8981344569570252488ull, 325121227531529ull}},
+{{3302104867086673012ull, 520193964050447ull}},
+{{13709730337895069379ull, 416155171240357ull}},
+{{3589086640832234857ull, 332924136992286ull}},
+{{16810585069557306741ull, 532678619187657ull}},
+{{6069770426162024746ull, 426142895350126ull}},
+{{1166467526187709474ull, 340914316280101ull}},
+{{12934394486126066128ull, 545462906048161ull}},
+{{6658166774158942579ull, 436370324838529ull}},
+{{9015882234069064386ull, 349096259870823ull}},
+{{10736062759768592695ull, 558554015793317ull}},
+{{1210152578331053510ull, 446843212634654ull}},
+{{4657470877406753131ull, 357474570107723ull}},
+{{11104674331409223151ull, 285979656086178ull}},
+{{14078130115512846719ull, 457567449737885ull}},
+{{11262504092410277375ull, 366053959790308ull}},
+{{16388700903412042546ull, 292843167832246ull}},
+{{396479742265895812ull, 468549068531595ull}},
+{{317183793812716649ull, 374839254825276ull}},
+{{15011142294017814612ull, 299871403860220ull}},
+{{5571083596718951764ull, 479794246176353ull}},
+{{11835564506858982057ull, 383835396941082ull}},
+{{2089753976003364999ull, 307068317552866ull}},
+{{14411652805831114969ull, 491309308084585ull}},
+{{11529322244664891975ull, 393047446467668ull}},
+{{16602155425215734226ull, 314437957174134ull}},
+{{15495402236119443793ull, 503100731478615ull}},
+{{12396321788895555034ull, 402480585182892ull}},
+{{2538359801632623381ull, 321984468146314ull}},
+{{11440073312096018056ull, 515175149034102ull}},
+{{1773361020192993798ull, 412140119227282ull}},
+{{12486735260380126008ull, 329712095381825ull}},
+{{1532032342898649997ull, 527539352610921ull}},
+{{15983021133286561290ull, 422031482088736ull}},
+{{9097068091887338709ull, 337625185670989ull}},
+{{3487262502794010965ull, 540200297073583ull}},
+{{10168507631719029418ull, 432160237658866ull}},
+{{4445457290633313211ull, 345728190127093ull}},
+{{3423382850271390815ull, 553165104203349ull}},
+{{6428055094959022975ull, 442532083362679ull}},
+{{8831792890709128703ull, 354025666690143ull}},
+{{14444131942051123609ull, 283220533352114ull}},
+{{12042564663056066805ull, 453152853363383ull}},
+{{17012749359928674090ull, 362522282690706ull}},
+{{9920850673201028949ull, 290017826152565ull}},
+{{15873361077121646319ull, 464028521844104ull}},
+{{16388037676439227378ull, 371222817475283ull}},
+{{2042383696925650933ull, 296978253980227ull}},
+{{6957162729822951816ull, 475165206368363ull}},
+{{12944427813342182099ull, 380132165094690ull}},
+{{10355542250673745679ull, 304105732075752ull}},
+{{1811472342110351794ull, 486569171321204ull}},
+{{5138526688430191758ull, 389255337056963ull}},
+{{11489518980227974053ull, 311404269645570ull}},
+{{18383230368364758485ull, 498246831432912ull}},
+{{7327886665207986142ull, 398597465146330ull}},
+{{5862309332166388913ull, 318877972117064ull}},
+{{16758392560950042908ull, 510204755387302ull}},
+{{6028016419276213680ull, 408163804309842ull}},
+{{15890459579646701913ull, 326531043447873ull}},
+{{3288642438983261122ull, 522449669516598ull}},
+{{10009611580670429544ull, 417959735613278ull}},
+{{15386386894020164282ull, 334367788490622ull}},
+{{9860823771464621558ull, 534988461584996ull}},
+{{4199310202429786923ull, 427990769267997ull}},
+{{14427494606169560508ull, 342392615414397ull}},
+{{8326596110903655521ull, 547828184663036ull}},
+{{2971928073981014093ull, 438262547730429ull}},
+{{6066891273926721598ull, 350610038184343ull}},
+{{6017677223540844233ull, 560976061094949ull}},
+{{8503490593574585710ull, 448780848875959ull}},
+{{10492141289601578891ull, 359024679100767ull}},
+{{1015015402197442466ull, 287219743280614ull}},
+{{9002722272999728593ull, 459551589248982ull}},
+{{18270224262625513844ull, 367641271399185ull}},
+{{14616179410100411075ull, 294113017119348ull}},
+{{1249794167709195781ull, 470580827390958ull}},
+{{8378532963651177271ull, 376464661912766ull}},
+{{3013477556179031493ull, 301171729530213ull}},
+{{1132215275144540067ull, 481874767248341ull}},
+{{15663167479083273346ull, 385499813798672ull}},
+{{5151836353782798030ull, 308399851038938ull}},
+{{4553589351310566526ull, 493439761662301ull}},
+{{18400266740016094513ull, 394751809329840ull}},
+{{14720213392012875610ull, 315801447463872ull}},
+{{8794946168252959684ull, 505282315942196ull}},
+{{3346608119860457424ull, 404225852753757ull}},
+{{13745332940114096909ull, 323380682203005ull}},
+{{3545788630473003438ull, 517409091524809ull}},
+{{6525979719120313074ull, 413927273219847ull}},
+{{16288830219521981428ull, 331141818575877ull}},
+{{11304733092267528993ull, 529826909721404ull}},
+{{12733135288555933517ull, 423861527777123ull}},
+{{17565205860328567460ull, 339089222221698ull}},
+{{5968236488074245998ull, 542542755554718ull}},
+{{12153286819943217444ull, 434034204443774ull}},
+{{13411978270696484279ull, 347227363555019ull}},
+{{10391118788888643876ull, 555563781688031ull}},
+{{4623546216369004778ull, 444451025350425ull}},
+{{3698836973095203822ull, 355560820280340ull}},
+{{2959069578476163058ull, 284448656224272ull}},
+{{8423860140303771216ull, 455117849958835ull}},
+{{6739088112243016972ull, 364094279967068ull}},
+{{12769968119278234224ull, 291275423973654ull}},
+{{9363902546619443790ull, 466040678357847ull}},
+{{112424407811734385ull, 372832542686278ull}},
+{{7468637155733208154ull, 298266034149022ull}},
+{{15639168263915043371ull, 477225654638435ull}},
+{{12511334611132034696ull, 381780523710748ull}},
+{{17387765318389448403ull, 305424418968598ull}},
+{{5684331620971655507ull, 488679070349758ull}},
+{{11926162926261145052ull, 390943256279806ull}},
+{{5851581526267005718ull, 312754605023845ull}},
+{{9362530442027209149ull, 500407368038152ull}},
+{{111326724137946673ull, 400325894430522ull}},
+{{11157107823536088308ull, 320260715544417ull}},
+{{3093977258690100000ull, 512417144871068ull}},
+{{9853879436435900646ull, 409933715896854ull}},
+{{11572452363890630840ull, 327946972717483ull}},
+{{14826574967483099021ull, 524715156347973ull}},
+{{793213529760748247ull, 419772125078379ull}},
+{{4323919638550508921ull, 335817700062703ull}},
+{{3228922606938903950ull, 537308320100325ull}},
+{{2583138085551123160ull, 429846656080260ull}},
+{{2066510468440898528ull, 343877324864208ull}},
+{{18063812008473078938ull, 550203719782732ull}},
+{{7072351977294642504ull, 440162975826186ull}},
+{{1968532767093803680ull, 352130380660949ull}},
+{{5264175028416953267ull, 281704304528759ull}},
+{{15801377674950945874ull, 450726887246014ull}},
+{{16330450954702667022ull, 360581509796811ull}},
+{{9375011949020223294ull, 288465207837449ull}},
+{{3931972674206626302ull, 461544332539919ull}},
+{{6834926954107211365ull, 369235466031935ull}},
+{{5467941563285769092ull, 295388372825548ull}},
+{{5059357686515320224ull, 472621396520877ull}},
+{{15115532593437987148ull, 378097117216701ull}},
+{{8403077260008479395ull, 302477693773361ull}},
+{{6066225986529746386ull, 483964310037378ull}},
+{{12231678418707617755ull, 387171448029902ull}},
+{{2406645105482273558ull, 309737158423922ull}},
+{{7539980983513548016ull, 495579453478275ull}},
+{{6031984786810838413ull, 396463562782620ull}},
+{{4825587829448670730ull, 317170850226096ull}},
+{{342242897634052522ull, 507473360361754ull}},
+{{3963143132849152341ull, 405978688289403ull}},
+{{10549212135763142519ull, 324782950631522ull}},
+{{2121344158253386738ull, 519652721010436ull}},
+{{16454470585570350683ull, 415722176808348ull}},
+{{2095530024230549577ull, 332577741446679ull}},
+{{10731545668252699969ull, 532124386314686ull}},
+{{4895887719860249652ull, 425699509051749ull}},
+{{7606058990630110045ull, 340559607241399ull}},
+{{1101647940782445102ull, 544895371586239ull}},
+{{4570667167367866405ull, 435916297268991ull}},
+{{18413928992861934417ull, 348733037815192ull}},
+{{14704891129611453774ull, 557972860504308ull}},
+{{695866459463432050ull, 446378288403447ull}},
+{{11624739611796476609ull, 357102630722757ull}},
+{{1921094059953360641ull, 285682104578206ull}},
+{{14141796940151107995ull, 457091367325129ull}},
+{{15002786366862796719ull, 365673093860103ull}},
+{{934182649264506406ull, 292538475088083ull}},
+{{16252087497790851542ull, 468061560140932ull}},
+{{5622972368748860587ull, 374449248112746ull}},
+{{809029080257178147ull, 299559398490197ull}},
+{{4983795343153395358ull, 479295037584315ull}},
+{{3987036274522716286ull, 383436030067452ull}},
+{{14257675463843903999ull, 306748824053961ull}},
+{{15433583112666425752ull, 490798118486338ull}},
+{{1278820045907409632ull, 392638494789071ull}},
+{{15780451295693568998ull, 314110795831256ull}},
+{{17870024443625889751ull, 502577273330010ull}},
+{{14296019554900711801ull, 402061818664008ull}},
+{{368769199694838471ull, 321649454931207ull}},
+{{4279379534253651877ull, 514639127889931ull}},
+{{18180898886370562794ull, 411711302311944ull}},
+{{18234067923838360558ull, 329369041849555ull}},
+{{10727764604431825278ull, 526990466959289ull}},
+{{12271560498287370545ull, 421592373567431ull}},
+{{6127899583887986113ull, 337273898853945ull}},
+{{9804639334220777781ull, 539638238166312ull}},
+{{465013837892801578ull, 431710590533050ull}},
+{{372011070314241262ull, 345368472426440ull}},
+{{595217712502786020ull, 552589555882304ull}},
+{{4165522984744139139ull, 442071644705843ull}},
+{{10711116017279131958ull, 353657315764674ull}},
+{{12258241628565215889ull, 282925852611739ull}},
+{{8545140161478614454ull, 452681364178783ull}},
+{{14214809758666712209ull, 362145091343026ull}},
+{{7682498992191459444ull, 289716073074421ull}},
+{{4913300758022514464ull, 463545716919074ull}},
+{{7619989421159921895ull, 370836573535259ull}},
+{{9785340351669847839ull, 296669258828207ull}},
+{{899149303704115249ull, 474670814125132ull}},
+{{11787365887189023169ull, 379736651300105ull}},
+{{9429892709751218535ull, 303789321040084ull}},
+{{4019781891376218687ull, 486062913664135ull}},
+{{3215825513100974949ull, 388850330931308ull}},
+{{9951358039964600606ull, 311080264745046ull}},
+{{8543475234459540323ull, 497728423592074ull}},
+{{10524129002309542582ull, 398182738873659ull}},
+{{12108652016589544388ull, 318546191098927ull}},
+{{4616447967575629729ull, 509673905758284ull}},
+{{7382507188802414106ull, 407739124606627ull}},
+{{16974052195267662255ull, 326191299685301ull}},
+{{1333041809234887345ull, 521906079496483ull}},
+{{8445131076871730522ull, 417524863597186ull}},
+{{3066756046755474095ull, 334019890877749ull}},
+{{12285507304292579198ull, 534431825404398ull}},
+{{17207103472917884005ull, 427545460323518ull}},
+{{2697636334108576234ull, 342036368258815ull}},
+{{4316218134573721975ull, 547258189214104ull}},
+{{7142323322400887903ull, 437806551371283ull}},
+{{13092556287404530969ull, 350245241097026ull}},
+{{13569392430363428904ull, 560392385755242ull}},
+{{3476816314806922477ull, 448313908604194ull}},
+{{6470801866587448304ull, 358651126883355ull}},
+{{5176641493269958643ull, 286920901506684ull}},
+{{15661324018715754476ull, 459073442410694ull}},
+{{16218408029714513904ull, 367258753928555ull}},
+{{12974726423771611123ull, 293807003142844ull}},
+{{9691515833808846828ull, 470091205028551ull}},
+{{4063863852305167139ull, 376072964022841ull}},
+{{18008486340811775004ull, 300858371218272ull}},
+{{14056182886331198714ull, 481373393949236ull}},
+{{7555597494323048648ull, 385098715159389ull}},
+{{9733826810200349241ull, 308078972127511ull}},
+{{8195425266836738140ull, 492926355404018ull}},
+{{13935037842953211158ull, 394341084323214ull}},
+{{14837379089104479250ull, 315472867458571ull}},
+{{16361108913083346153ull, 504756587933714ull}},
+{{16778235945208587246ull, 403805270346971ull}},
+{{9733239941424959473ull, 323044216277577ull}},
+{{815788647312293865ull, 516870746044124ull}},
+{{4341979732591745415ull, 413496596835299ull}},
+{{7162932600815306655ull, 330797277468239ull}},
+{{392645717078759679ull, 529275643949183ull}},
+{{7692814203146828389ull, 423420515159346ull}},
+{{2464902547775552388ull, 338736412127477ull}},
+{{7633192891182794144ull, 541978259403963ull}},
+{{13485251942430055962ull, 433582607523170ull}},
+{{10788201553944044769ull, 346866086018536ull}},
+{{9882424856826650985ull, 554985737629658ull}},
+{{15284637514945141434ull, 443988590103726ull}},
+{{8538361197214202824ull, 355190872082981ull}},
+{{3141340143029451936ull, 284152697666385ull}},
+{{5026144228847123098ull, 454644316266216ull}},
+{{331566568335788155ull, 363715453012973ull}},
+{{7643950884152451170ull, 290972362410378ull}},
+{{8540972599902011550ull, 465555779856605ull}},
+{{6832778079921609240ull, 372444623885284ull}},
+{{9155571278679197715ull, 297955699108227ull}},
+{{18338262860628626667ull, 476729118573163ull}},
+{{3602563844277170364ull, 381383294858531ull}},
+{{17639446334389377584ull, 305106635886824ull}},
+{{17155067690797273165ull, 488170617418919ull}},
+{{17413402967379728855ull, 390536493935135ull}},
+{{13930722373903783084ull, 312429195148108ull}},
+{{153062909794590995ull, 499886712236974ull}},
+{{3811799142577583119ull, 399909369789579ull}},
+{{6738788128803976819ull, 319927495831663ull}},
+{{7092712191344452587ull, 511883993330661ull}},
+{{1984820938333651746ull, 409507194664529ull}},
+{{5277205565408831720ull, 327605755731623ull}},
+{{4754180089912220429ull, 524169209170597ull}},
+{{14871390516155507313ull, 419335367336477ull}},
+{{4518414783440585204ull, 335468293869182ull}},
+{{10918812468246846650ull, 536749270190691ull}},
+{{5045701159855566996ull, 429399416152553ull}},
+{{11415258557368274243ull, 343519532922042ull}},
+{{3507018432821597497ull, 549631252675268ull}},
+{{10184312375741098644ull, 439705002140214ull}},
+{{11836798715334789238ull, 351764001712171ull}},
+{{11560180315051842135ull, 562822402739474ull}},
+{{12937493066783384031ull, 450257922191579ull}},
+{{14039343268168617548ull, 360206337753263ull}},
+{{163428170309163069ull, 288165070202611ull}},
+{{11329531516720391880ull, 461064112324177ull}},
+{{1684927583892492857ull, 368851289859342ull}},
+{{12415988511339725255ull, 295081031887473ull}},
+{{16176232803401650086ull, 472129651019957ull}},
+{{5562288613237499422ull, 377703720815966ull}},
+{{760482075848089214ull, 302162976652773ull}},
+{{15974166580324584036ull, 483460762644436ull}},
+{{9089984449517756906ull, 386768610115549ull}},
+{{10961336374356115848ull, 309414888092439ull}},
+{{6470091754744054387ull, 495063820947903ull}},
+{{12554771033279064156ull, 396051056758322ull}},
+{{2665119197139430678ull, 316840845406658ull}},
+{{574841900681178762ull, 506945352650653ull}},
+{{7838571150028763656ull, 405556282120522ull}},
+{{17338903364248741894ull, 324445025696417ull}},
+{{12984850123830345738ull, 519112041114268ull}},
+{{17766577728548097237ull, 415289632891414ull}},
+{{17902610997580388113ull, 332231706313131ull}},
+{{2818735892935248718ull, 531570730101011ull}},
+{{17012383973315840267ull, 425256584080808ull}},
+{{2541860734426941244ull, 340205267264647ull}},
+{{7756325989825016314ull, 544328427623435ull}},
+{{6205060791860013051ull, 435462742098748ull}},
+{{12342746262971831087ull, 348370193678998ull}},
+{{16059045206013019417ull, 557392309886397ull}},
+{{5468538535326594887ull, 445913847909118ull}},
+{{11753528457745096556ull, 356731078327294ull}},
+{{13092171580937987568ull, 285384862661835ull}},
+{{2500730455791228493ull, 456615780258937ull}},
+{{13068630808858713764ull, 365292624207149ull}},
+{{14144253461828881334ull, 292234099365719ull}},
+{{11562759094700479165ull, 467574558985151ull}},
+{{5560858461018473009ull, 374059647188121ull}},
+{{759337954072868084ull, 299247717750497ull}},
+{{4904289541258499257ull, 478796348400795ull}},
+{{3923431633006799406ull, 383037078720636ull}},
+{{17896140565373080817ull, 306429662976508ull}},
+{{6497732016145467369ull, 490287460762414ull}},
+{{8887534427658284218ull, 392229968609931ull}},
+{{3420678727384717051ull, 313783974887945ull}},
+{{5473085963815547282ull, 502054359820712ull}},
+{{15446515215278168795ull, 401643487856569ull}},
+{{16046560986964445359ull, 321314790285255ull}},
+{{7227753505433560959ull, 514103664456409ull}},
+{{9471551619088759090ull, 411282931565127ull}},
+{{198543665787186626ull, 329026345252102ull}},
+{{4007018680001408925ull, 526442152403363ull}},
+{{10584312573484947786ull, 421153721922690ull}},
+{{8467450058787958229ull, 336922977538152ull}},
+{{17237268908802643490ull, 539076764061043ull}},
+{{2721768682816383822ull, 431261411248835ull}},
+{{2177414946253107058ull, 345009128999068ull}},
+{{18241259172972612585ull, 552014606398508ull}},
+{{3524960894152359098ull, 441611685118807ull}},
+{{13888015159547618248ull, 353289348095045ull}},
+{{11110412127638094599ull, 282631478476036ull}},
+{{10397961774737130712ull, 452210365561658ull}},
+{{15697067049273525216ull, 361768292449326ull}},
+{{8868304824676909849ull, 289414633959461ull}},
+{{6810590089999235112ull, 463063414335138ull}},
+{{12827169701483208736ull, 370450731468110ull}},
+{{10261735761186566989ull, 296360585174488ull}},
+{{12729428403156596859ull, 474176936279181ull}},
+{{6494193907783367164ull, 379341549023345ull}},
+{{5195355126226693731ull, 303473239218676ull}},
+{{933870572478889324ull, 485557182749882ull}},
+{{11815142902208842429ull, 388445746199905ull}},
+{{9452114321767073943ull, 310756596959924ull}},
+{{4055336470601587339ull, 497210555135879ull}},
+{{6933617991223180194ull, 397768444108703ull}},
+{{12925592022462364802ull, 318214755286962ull}},
+{{5923551976972142390ull, 509143608459140ull}},
+{{4738841581577713912ull, 407314886767312ull}},
+{{14859119709487902099ull, 325851909413849ull}},
+{{12706545090954912390ull, 521363055062159ull}},
+{{13854584887505840235ull, 417090444049727ull}},
+{{3704970280520851541ull, 333672355239782ull}},
+{{9617301263575272790ull, 533875768383651ull}},
+{{4004492196118307908ull, 427100614706921ull}},
+{{17960989015862287619ull, 341680491765536ull}},
+{{2912140722186287929ull, 546688786824859ull}},
+{{6019061392490940666ull, 437351029459887ull}},
+{{15883295558218483503ull, 349880823567909ull}},
+{{14345226448923842635ull, 559809317708655ull}},
+{{11476181159139074108ull, 447847454166924ull}},
+{{12870293742053169609ull, 358277963333539ull}},
+{{13985583808384446011ull, 286622370666831ull}},
+{{14998236463931292971ull, 458595793066930ull}},
+{{11998589171145034376ull, 366876634453544ull}},
+{{13288220151657937824ull, 293501307562835ull}},
+{{2814408168943148903ull, 469602092100537ull}},
+{{13319572979380250092ull, 375681673680429ull}},
+{{14345007198246110397ull, 300545338944343ull}},
+{{815918628742314696ull, 480872542310950ull}},
+{{652734902993851757ull, 384698033848760ull}},
+{{522187922395081405ull, 307758427079008ull}},
+{{15592895934799771541ull, 492413483326412ull}},
+{{5095619118355996587ull, 393930786661130ull}},
+{{4076495294684797269ull, 315144629328904ull}},
+{{13901090100979496277ull, 504231406926246ull}},
+{{7431523266041686699ull, 403385125540997ull}},
+{{17013265057059080328ull, 322708100432797ull}},
+{{12463828832326887233ull, 516332960692476ull}},
+{{6281714251119599463ull, 413066368553981ull}},
+{{1336022586153769247ull, 330453094843185ull}},
+{{2137636137846030796ull, 528724951749096ull}},
+{{16467504169244465929ull, 422979961399276ull}},
+{{9484654520653662420ull, 338383969119421ull}},
+{{7796749603562039226ull, 541414350591074ull}},
+{{9926748497591541704ull, 433131480472859ull}},
+{{11630747612815143686ull, 346505184378287ull}},
+{{3851800921536588606ull, 554408295005260ull}},
+{{3081440737229270884ull, 443526636004208ull}},
+{{9843850219267237354ull, 354821308803366ull}},
+{{4185731360671879560ull, 283857047042693ull}},
+{{3007821362333096973ull, 454171275268309ull}},
+{{6095605904608387901ull, 363337020214647ull}},
+{{15944531167912441290ull, 290669616171717ull}},
+{{10753854609692264772ull, 465071385874748ull}},
+{{15981781317237632464ull, 372057108699798ull}},
+{{1717378609564375002ull, 297645686959839ull}},
+{{10126503404786820649ull, 476233099135742ull}},
+{{722505094345635873ull, 380986479308594ull}},
+{{4267352890218419021ull, 304789183446875ull}},
+{{6827764624349470435ull, 487662693515000ull}},
+{{5462211699479576348ull, 390130154812000ull}},
+{{4369769359583661078ull, 312104123849600ull}},
+{{6991630975333857725ull, 499366598159360ull}},
+{{5593304780267086180ull, 399493278527488ull}},
+{{11853341453697489590ull, 319594622821990ull}},
+{{518602252206431729ull, 511351396515185ull}},
+{{414881801765145383ull, 409081117212148ull}},
+{{7710603070895936953ull, 327264893769718ull}},
+{{8647616098691588801ull, 523623830031549ull}},
+{{10607441693695181364ull, 418899064025239ull}},
+{{12175302169698055414ull, 335119251220191ull}},
+{{12101785842033068017ull, 536190801952306ull}},
+{{5992079858884544090ull, 428952641561845ull}},
+{{4793663887107635272ull, 343162113249476ull}},
+{{291164589888395789ull, 549059381199162ull}},
+{{11300978116136447601ull, 439247504959329ull}},
+{{12730131307651068404ull, 351398003967463ull}},
+{{16678861277499799123ull, 562236806347941ull}},
+{{9653740207257928975ull, 449789445078353ull}},
+{{15101689795290163826ull, 359831556062682ull}},
+{{4702654206748310415ull, 287865244850146ull}},
+{{145549101313476017ull, 460584391760234ull}},
+{{3805788095792691137ull, 368467513408187ull}},
+{{14112676920859883879ull, 294774010726549ull}},
+{{11512236629150083237ull, 471638417162479ull}},
+{{12899138118061976913ull, 377310733729983ull}},
+{{17698008123933402177ull, 301848586983986ull}},
+{{2491371295100071220ull, 482957739174379ull}},
+{{5682445850821967299ull, 386366191339503ull}},
+{{11924654310141394486ull, 309092953071602ull}},
+{{4322051637258589885ull, 494548724914564ull}},
+{{7146990124548782231ull, 395638979931651ull}},
+{{2028243284897115462ull, 316511183945321ull}},
+{{14313235700061115708ull, 506417894312513ull}},
+{{382542115823161597ull, 405134315450011ull}},
+{{15063428951626170570ull, 324107452360008ull}},
+{{1965393434150410974ull, 518571923776014ull}},
+{{5261663562062239102ull, 414857539020811ull}},
+{{519982034907880958ull, 331886031216649ull}},
+{{8210668885336430180ull, 531017649946638ull}},
+{{13947232737752964790ull, 424814119957310ull}},
+{{11157786190202371832ull, 339851295965848ull}},
+{{14163109089581884608ull, 543762073545357ull}},
+{{3951789642181687040ull, 435009658836286ull}},
+{{17918826972712990925ull, 348007727069028ull}},
+{{6534030267889323541ull, 556812363310446ull}},
+{{1537875399569548509ull, 445449890648357ull}},
+{{12298346763881369777ull, 356359912518685ull}},
+{{9838677411105095822ull, 285087930014948ull}},
+{{12052535043026242992ull, 456140688023917ull}},
+{{2263330404937173747ull, 364912550419134ull}},
+{{5500013138691649320ull, 291930040335307ull}},
+{{12489369836648549236ull, 467088064536491ull}},
+{{6302147054576929066ull, 373670451629193ull}},
+{{12420415273145363899ull, 298936361303354ull}},
+{{8804617992806851269ull, 478298178085367ull}},
+{{18111740838471211985ull, 382638542468293ull}},
+{{3421346226551238618ull, 306110833974635ull}},
+{{5474153962481981789ull, 489777334359416ull}},
+{{689974355243675108ull, 391821867487533ull}},
+{{7930677113678760733ull, 313457493990026ull}},
+{{5310385752402196526ull, 501531990384042ull}},
+{{15316355046147488190ull, 401225592307233ull}},
+{{1185037592692259583ull, 320980473845787ull}},
+{{5585408963049525656ull, 513568758153259ull}},
+{{8157675985181530848ull, 410855006522607ull}},
+{{17594187232370955648ull, 328684005218085ull}},
+{{9703955498083977421ull, 525894408348937ull}},
+{{384466768983361290ull, 420715526679150ull}},
+{{307573415186689032ull, 336572421343320ull}},
+{{492117464298702451ull, 538515874149312ull}},
+{{11461740415664692931ull, 430812699319449ull}},
+{{12858741147273664668ull, 344650159455559ull}},
+{{9505939391412132499ull, 551440255128895ull}},
+{{7604751513129705999ull, 441152204103116ull}},
+{{2394452395761854476ull, 352921763282493ull}},
+{{9294259546093304227ull, 282337410625994ull}},
+{{3802768829523555794ull, 451739857001591ull}},
+{{17799610322586485928ull, 361391885601272ull}},
+{{6860990628585368096ull, 289113508481018ull}},
+{{7288236190994678630ull, 462581613569629ull}},
+{{9519937767537653227ull, 370065290855703ull}},
+{{14994647843513943228ull, 296052232684562ull}},
+{{9234041290654667873ull, 473683572295300ull}},
+{{7387233032523734298ull, 378946857836240ull}},
+{{5909786426018987438ull, 303157486268992ull}},
+{{13145007096372290225ull, 485051978030387ull}},
+{{3137308047614011533ull, 388041582424310ull}},
+{{2509846438091209226ull, 310433265939448ull}},
+{{326405486204024439ull, 496693225503117ull}},
+{{11329170833188950521ull, 397354580402493ull}},
+{{16442034296034981063ull, 317883664321994ull}},
+{{15239208429430238732ull, 508613862915191ull}},
+{{8502017928802280662ull, 406891090332153ull}},
+{{14180311972525645176ull, 325512872265722ull}},
+{{7931103897073390989ull, 520820595625156ull}},
+{{2655534302916802468ull, 416656476500125ull}},
+{{2124427442333441974ull, 333325181200100ull}},
+{{3399083907733507159ull, 533320289920160ull}},
+{{2719267126186805727ull, 426656231936128ull}},
+{{9554111330433265228ull, 341324985548902ull}},
+{{529182869725583072ull, 546119976878244ull}},
+{{4112695110522376781ull, 436895981502595ull}},
+{{3290156088417901425ull, 349516785202076ull}},
+{{16332296185694373249ull, 559226856323321ull}},
+{{9376488133813588276ull, 447381485058657ull}},
+{{122492877567049975ull, 357905188046926ull}},
+{{14855389561021281272ull, 286324150437540ull}},
+{{5321879223924498420ull, 458118640700065ull}},
+{{4257503379139598736ull, 366494912560052ull}},
+{{14474049147537409958ull, 293195930048041ull}},
+{{15779781006576035287ull, 469113488076866ull}},
+{{8934475990518917906ull, 375290790461493ull}},
+{{14526278421898954971ull, 300232632369194ull}},
+{{12173999030812596985ull, 480372211790711ull}},
+{{6049850409908167265ull, 384297769432569ull}},
+{{8529229142668444135ull, 307438215546055ull}},
+{{13646766628269510616ull, 491901144873688ull}},
+{{18296110932099429139ull, 393520915898950ull}},
+{{14636888745679543311ull, 314816732719160ull}},
+{{4972277919377717682ull, 503706772350657ull}},
+{{15045868779727905115ull, 402965417880525ull}},
+{{12036695023782324092ull, 322372334304420ull}},
+{{811967964342166932ull, 515795734887073ull}},
+{{8028272000957554192ull, 412636587909658ull}},
+{{13801315230249864000ull, 330109270327726ull}},
+{{14703406738915961753ull, 528174832524362ull}},
+{{4384027761648948756ull, 422539866019490ull}},
+{{3507222209319159005ull, 338031892815592ull}},
+{{9300904349652564731ull, 540851028504947ull}},
+{{62025850238231138ull, 432680822803958ull}},
+{{7428318309674405557ull, 346144658243166ull}},
+{{4506611665995228245ull, 553831453189066ull}},
+{{18362684591763823889ull, 443065162551252ull}},
+{{7311450043927238465ull, 354452130041002ull}},
+{{16917206479367521741ull, 283561704032801ull}},
+{{1242088663794662524ull, 453698726452483ull}},
+{{8372368560519550665ull, 362958981161986ull}},
+{{3008546033673730209ull, 290367184929589ull}},
+{{12192371283361788981ull, 464587495887342ull}},
+{{2375199397205610538ull, 371669996709874ull}},
+{{5589508332506398754ull, 297335997367899ull}},
+{{16321910961494058653ull, 475737595788638ull}},
+{{1989482324969515952ull, 380590076630911ull}},
+{{16348981118943254055ull, 304472061304728ull}},
+{{4022276901857744549ull, 487155298087566ull}},
+{{17975216780453836932ull, 389724238470052ull}},
+{{7001475794879248899ull, 311779390776042ull}},
+{{14891710086548708561ull, 498847025241667ull}},
+{{4534670439755146203ull, 399077620193334ull}},
+{{7317085166546027285ull, 319262096154667ull}},
+{{15396685081215553980ull, 510819353847467ull}},
+{{4938650435488622537ull, 408655483077974ull}},
+{{7640269163132808353ull, 326924386462379ull}},
+{{1156384216786762396ull, 523079018339807ull}},
+{{11993153817655140886ull, 418463214671845ull}},
+{{9594523054124112709ull, 334770571737476ull}},
+{{7972539257114759688ull, 535632914779962ull}},
+{{17446077849917538720ull, 428506331823969ull}},
+{{17646211094675941299ull, 342805065459175ull}},
+{{9787193677771954462ull, 548488104734681ull}},
+{{4140406127475653247ull, 438790483787745ull}},
+{{3312324901980522597ull, 351032387030196ull}},
+{{16367766287394567125ull, 561651819248313ull}},
+{{2026166585689922731ull, 449321455398651ull}},
+{{16378328527519579477ull, 359457164318920ull}},
+{{13102662822015663582ull, 287565731455136ull}},
+{{13585562885741241085ull, 460105170328218ull}},
+{{18247147938076813514ull, 368084136262574ull}},
+{{18287067165203361134ull, 294467309010059ull}},
+{{18191261020099646846ull, 471147694416095ull}},
+{{14553008816079717476ull, 376918155532876ull}},
+{{7953058238121863658ull, 301534524426301ull}},
+{{5346195551511161206ull, 482455239082082ull}},
+{{15345002885434659935ull, 385964191265665ull}},
+{{12276002308347727948ull, 308771353012532ull}},
+{{4884208434388723424ull, 494034164820052ull}},
+{{14975413191736709708ull, 395227331856041ull}},
+{{8290981738647457443ull, 316181865484833ull}},
+{{9576221967094021587ull, 505890984775733ull}},
+{{15039675203159037916ull, 404712787820586ull}},
+{{8342391347785320009ull, 323770230256469ull}},
+{{2279779712230781045ull, 518032368410351ull}},
+{{16581219028752266129ull, 414425894728280ull}},
+{{13264975223001812903ull, 331540715782624ull}},
+{{10155913912577169676ull, 530465145252199ull}},
+{{11814079944803646064ull, 424372116201759ull}},
+{{13140612770584827174ull, 339497692961407ull}},
+{{6267585173968082186ull, 543196308738252ull}},
+{{16082114583400196718ull, 434557046990601ull}},
+{{9176342851978247051ull, 347645637592481ull}},
+{{7303450933681374636ull, 556233020147970ull}},
+{{5842760746945099709ull, 444986416118376ull}},
+{{984859782814169444ull, 355989132894701ull}},
+{{15545283085218976848ull, 284791306315760ull}},
+{{6425708862640811340ull, 455666090105217ull}},
+{{16208613534338380042ull, 364532872084173ull}},
+{{1898844383244973064ull, 291626297667339ull}},
+{{10416848642675777549ull, 466602076267742ull}},
+{{954781284656801392ull, 373281661014194ull}},
+{{4453173842467351437ull, 298625328811355ull}},
+{{7125078147947762300ull, 477800526098168ull}},
+{{13078760147842030486ull, 382240420878534ull}},
+{{14152356933015534712ull, 305792336702827ull}},
+{{7886375833857214247ull, 489267738724524ull}},
+{{9998449481827681720ull, 391414190979619ull}},
+{{11688108400204055699ull, 313131352783695ull}},
+{{254229366616937503ull, 501010164453913ull}},
+{{7582081122777370649ull, 400808131563130ull}},
+{{6065664898221896519ull, 320646505250504ull}},
+{{17083761466638855077ull, 513034408400806ull}},
+{{9977660358569173738ull, 410427526720645ull}},
+{{7982128286855338991ull, 328342021376516ull}},
+{{5392707629484721739ull, 525347234202426ull}},
+{{624817288845867068ull, 420277787361941ull}},
+{{15257249090044334947ull, 336222229889552ull}},
+{{9654203285103294623ull, 537955567823284ull}},
+{{11412711442824546021ull, 430364454258627ull}},
+{{1751471524775816170ull, 344291563406902ull}},
+{{6491703254383216196ull, 550866501451043ull}},
+{{12572060232990393603ull, 440693201160834ull}},
+{{13746997001134225206ull, 352554560928667ull}},
+{{3618899971423559518ull, 282043648742934ull}},
+{{13168937583761515876ull, 451269837988694ull}},
+{{14224498881751123024ull, 361015870390955ull}},
+{{11379599105400898419ull, 288812696312764ull}},
+{{7139312124415706501ull, 462100314100423ull}},
+{{13090147329016385847ull, 369680251280338ull}},
+{{17850815492696929324ull, 295744201024270ull}},
+{{10114560714605535302ull, 473190721638833ull}},
+{{15470346201168248888ull, 378552577311066ull}},
+{{8686928146192688787ull, 302842061848853ull}},
+{{10209736219166391737ull, 484547298958165ull}},
+{{8167788975333113389ull, 387637839166532ull}},
+{{17602277624492221681ull, 310110271333225ull}},
+{{9716900125478003074ull, 496176434133161ull}},
+{{4084171285640492136ull, 396941147306529ull}},
+{{6956685843254304032ull, 317552917845223ull}},
+{{7441348534464976128ull, 508084668552357ull}},
+{{17021125271797711872ull, 406467734841885ull}},
+{{13616900217438169497ull, 325174187873508ull}},
+{{18097691533159160873ull, 520278700597613ull}},
+{{3410106782301597729ull, 416222960478091ull}},
+{{17485480684808919476ull, 332978368382472ull}},
+{{13219373836726629868ull, 532765389411956ull}},
+{{6886150254639393571ull, 426212311529565ull}},
+{{5508920203711514857ull, 340969849223652ull}},
+{{12503621140680334095ull, 545551758757843ull}},
+{{17381594542028087922ull, 436441407006274ull}},
+{{17594624448364380661ull, 349153125605019ull}},
+{{17083352673157278088ull, 558645000968031ull}},
+{{9977333323783912147ull, 446916000774425ull}},
+{{7981866659027129718ull, 357532800619540ull}},
+{{6385493327221703774ull, 286026240495632ull}},
+{{13906138138296636362ull, 457641984793011ull}},
+{{7435561695895398766ull, 366113587834409ull}},
+{{9637798171458229336ull, 292890870267527ull}},
+{{663081815365525645ull, 468625392428044ull}},
+{{4219814267034330839ull, 374900313942435ull}},
+{{3375851413627464671ull, 299920251153948ull}},
+{{1712013447062033151ull, 479872401846317ull}},
+{{12437657201875357490ull, 383897921477053ull}},
+{{17328823390984106639ull, 307118337181642ull}},
+{{12968722166606929329ull, 491389339490628ull}},
+{{17753675362769364110ull, 393111471592502ull}},
+{{6824242660731670641ull, 314489177274002ull}},
+{{14608137071912583349ull, 503182683638403ull}},
+{{618463213304335710ull, 402546146910723ull}},
+{{7873468200127289214ull, 322036917528578ull}},
+{{8908200305461752420ull, 515259068045725ull}},
+{{7126560244369401936ull, 412207254436580ull}},
+{{5701248195495521549ull, 329765803549264ull}},
+{{16500694742276655124ull, 527625285678822ull}},
+{{5821858164337503453ull, 422100228543058ull}},
+{{12036184160953823409ull, 337680182834446ull}},
+{{11879197028042296808ull, 540288292535114ull}},
+{{13192706437175747769ull, 432230634028091ull}},
+{{6864816334998687892ull, 345784507222473ull}},
+{{7294357321255990305ull, 553255211555957ull}},
+{{16903532301230523213ull, 442604169244765ull}},
+{{13522825840984418570ull, 354083335395812ull}},
+{{3439563043303714210ull, 283266668316650ull}},
+{{5503300869285942736ull, 453226669306640ull}},
+{{4402640695428754189ull, 362581335445312ull}},
+{{14590159000568734320ull, 290065068356249ull}},
+{{12276207956684243943ull, 464104109369999ull}},
+{{13510315180089305478ull, 371283287495999ull}},
+{{14497600958813354705ull, 297026629996799ull}},
+{{12128115089875636559ull, 475242607994879ull}},
+{{13391840886642419571ull, 380194086395903ull}},
+{{18092170338797756303ull, 304155269116722ull}},
+{{14190077283108768792ull, 486648430586756ull}},
+{{7662713011745104710ull, 389318744469405ull}},
+{{6130170409396083768ull, 311454995575524ull}},
+{{17186970284517554676ull, 498327992920838ull}},
+{{2681529783388312771ull, 398662394336671ull}},
+{{16902619085678291509ull, 318929915469336ull}},
+{{1218748833891894153ull, 510287864750939ull}},
+{{4664347881855425645ull, 408230291800751ull}},
+{{42129490742430193ull, 326584233440601ull}},
+{{11135453629413619279ull, 522534773504961ull}},
+{{5219014088788985100ull, 418027818803969ull}},
+{{7864560085773098403ull, 334422255043175ull}},
+{{12583296137236957445ull, 535075608069080ull}},
+{{10066636909789565956ull, 428060486455264ull}},
+{{11742658342573563088ull, 342448389164211ull}},
+{{11409555718633880294ull, 547917422662738ull}},
+{{16506342204390924882ull, 438333938130190ull}},
+{{13205073763512739905ull, 350667150504152ull}},
+{{6370722762652742556ull, 561067440806644ull}},
+{{8785927024864104368ull, 448853952645315ull}},
+{{7028741619891283494ull, 359083162116252ull}},
+{{16691039740138757765ull, 287266529693001ull}},
+{{880221881028640162ull, 459626447508803ull}},
+{{8082875134306732776ull, 367701158007042ull}},
+{{17534346551671117190ull, 294160926405633ull}},
+{{5918861594222325565ull, 470657482249014ull}},
+{{8424438090119770775ull, 376525985799211ull}},
+{{3050201657353906297ull, 301220788639369ull}},
+{{12259020281250070722ull, 481953261822990ull}},
+{{9807216225000056577ull, 385562609458392ull}},
+{{467075350516224615ull, 308450087566714ull}},
+{{8126018190309780031ull, 493520140106742ull}},
+{{17568860996473554994ull, 394816112085393ull}},
+{{2987042352953113026ull, 315852889668315ull}},
+{{4779267764724980842ull, 505364623469304ull}},
+{{7512763026521894996ull, 404291698775443ull}},
+{{13388908050701336643ull, 323433359020354ull}},
+{{10354206436896407660ull, 517493374432567ull}},
+{{904667520033305482ull, 413994699546054ull}},
+{{4413082830768554708ull, 331195759636843ull}},
+{{3371583714487777211ull, 529913215418949ull}},
+{{6386615786332132092ull, 423930572335159ull}},
+{{8798641443807615996ull, 339144457868127ull}},
+{{17767175124834095918ull, 542631132589003ull}},
+{{3145693655641545764ull, 434104906071203ull}},
+{{9895252553997057258ull, 347283924856962ull}},
+{{1075008827427650320ull, 555654279771140ull}},
+{{860007061942120256ull, 444523423816912ull}},
+{{11756052093779427174ull, 355618739053529ull}},
+{{13094190489765452062ull, 284494991242823ull}},
+{{17261355968882812977ull, 455191985988517ull}},
+{{6430387145622429735ull, 364153588790814ull}},
+{{8833658531239854111ull, 291322871032651ull}},
+{{6755156020499945932ull, 466116593652242ull}},
+{{16472171260625687715ull, 372893274921793ull}},
+{{2109690564274819202ull, 298314619937435ull}},
+{{3375504902839710724ull, 477303391899896ull}},
+{{17457799181239409872ull, 381842713519916ull}},
+{{10276890530249617574ull, 305474170815933ull}},
+{{12753676033657477796ull, 488758673305493ull}},
+{{17581638456409802883ull, 391006938644394ull}},
+{{17754659579869752629ull, 312805550915515ull}},
+{{9960711254082052591ull, 500488881464825ull}},
+{{7968569003265642073ull, 400391105171860ull}},
+{{6374855202612513658ull, 320312884137488ull}},
+{{6510419509438111530ull, 512500614619981ull}},
+{{1518986792808578901ull, 410000491695985ull}},
+{{1215189434246863121ull, 328000393356788ull}},
+{{16701698353762622286ull, 524800629370860ull}},
+{{13361358683010097829ull, 419840503496688ull}},
+{{18067784575891898909ull, 335872402797350ull}},
+{{10461711247717486639ull, 537395844475761ull}},
+{{4680020183432078988ull, 429916675580609ull}},
+{{7433364961487573514ull, 343933340464487ull}},
+{{15582732753122027945ull, 550293344743179ull}},
+{{16155535017239532679ull, 440234675794543ull}},
+{{1856381569565895174ull, 352187740635635ull}},
+{{1485105255652716139ull, 281750192508508ull}},
+{{17133563668011987115ull, 450800308013612ull}},
+{{6328153304925769046ull, 360640246410890ull}},
+{{5062522643940615237ull, 288512197128712ull}},
+{{11789385045046894702ull, 461619515405939ull}},
+{{13120856850779426085ull, 369295612324751ull}},
+{{6807336665881630544ull, 295436489859801ull}},
+{{3513041035926788225ull, 472698383775682ull}},
+{{13878479272967161550ull, 378158707020545ull}},
+{{11102783418373729240ull, 302526965616436ull}},
+{{10385755839914146137ull, 484043144986298ull}},
+{{15687302301415137556ull, 387234515989038ull}},
+{{1481795396906379075ull, 309787612791231ull}},
+{{13438919079275937490ull, 495660180465969ull}},
+{{14440484078162660315ull, 396528144372775ull}},
+{{11552387262530128252ull, 317222515498220ull}},
+{{37075546338653588ull, 507556024797153ull}},
+{{7408358066554743516ull, 406044819837722ull}},
+{{16994732897469525783ull, 324835855870177ull}},
+{{12434177376983599960ull, 519737369392284ull}},
+{{13636690716328790291ull, 415789895513827ull}},
+{{3530654943579211586ull, 332631916411062ull}},
+{{9338396724468648861ull, 532211066257699ull}},
+{{11160066194316829412ull, 425768853006159ull}},
+{{12617401770195373853ull, 340615082404927ull}},
+{{5430447573344956872ull, 544984131847884ull}},
+{{8033706873417875821ull, 435987305478307ull}},
+{{17495011942960031626ull, 348789844382645ull}},
+{{9545275035026498986ull, 558063751012233ull}},
+{{15014917657505019835ull, 446451000809786ull}},
+{{8322585311262105545ull, 357160800647829ull}},
+{{10347417063751594759ull, 285728640518263ull}},
+{{12866518487260641291ull, 457165824829221ull}},
+{{6603865975066602710ull, 365732659863377ull}},
+{{16351139224279013137ull, 292586127890701ull}},
+{{336381055653048758ull, 468137804625123ull}},
+{{7647802474006259652ull, 374510243700098ull}},
+{{13496939608688828368ull, 299608194960078ull}},
+{{17905754559160215066ull, 479373111936125ull}},
+{{14324603647328172053ull, 383498489548900ull}},
+{{11459682917862537642ull, 306798791639120ull}},
+{{18335492668580060228ull, 490878066622592ull}},
+{{7289696505380227536ull, 392702453298074ull}},
+{{9521106019046092352ull, 314161962638459ull}},
+{{4165723186248016794ull, 502659140221535ull}},
+{{3332578548998413435ull, 402127312177228ull}},
+{{10044760468682551394ull, 321701849741782ull}},
+{{1314221490924440938ull, 514722959586852ull}},
+{{12119423636965283720ull, 411778367669481ull}},
+{{6006190094830316653ull, 329422694135585ull}},
+{{9609904151728506645ull, 527076310616936ull}},
+{{3998574506640894992ull, 421661048493549ull}},
+{{6888208420054626317ull, 337328838794839ull}},
+{{18399831101571222754ull, 539726142071742ull}},
+{{7341167251773157557ull, 431780913657394ull}},
+{{9562282616160436368ull, 345424730925915ull}},
+{{15299652185856698190ull, 552679569481464ull}},
+{{15929070563427268875ull, 442143655585171ull}},
+{{9053907635999904777ull, 353714924468137ull}},
+{{18311172553025654791ull, 282971939574509ull}},
+{{18229829640615316696ull, 452755103319215ull}},
+{{14583863712492253357ull, 362204082655372ull}},
+{{4288393340509982039ull, 289763266124298ull}},
+{{3172080530074060939ull, 463621225798877ull}},
+{{13605710868284979721ull, 370896980639101ull}},
+{{7195219879886073453ull, 296717584511281ull}},
+{{4133654178333896879ull, 474748135218050ull}},
+{{3306923342667117503ull, 379798508174440ull}},
+{{2645538674133694003ull, 303838806539552ull}},
+{{7922210693355820728ull, 486142090463283ull}},
+{{13716466184168477228ull, 388913672370626ull}},
+{{7283824132592871459ull, 311130937896501ull}},
+{{4275420982664773689ull, 497809500634402ull}},
+{{14488383230357549921ull, 398247600507521ull}},
+{{7901357769544129613ull, 318598080406017ull}},
+{{16331521246012517705ull, 509756928649627ull}},
+{{5686519367326193517ull, 407805542919702ull}},
+{{15617261938086685783ull, 326244434335761ull}},
+{{17608921471454876607ull, 521991094937218ull}},
+{{3019090732938170316ull, 417592875949775ull}},
+{{2415272586350536253ull, 334074300759820ull}},
+{{3864436138160858005ull, 534518881215712ull}},
+{{14159595354754417373ull, 427615104972569ull}},
+{{15017025098545444222ull, 342092083978055ull}},
+{{5580496083963159139ull, 547347334364889ull}},
+{{8153745681912437634ull, 437877867491911ull}},
+{{2833647730788039784ull, 350302293993529ull}},
+{{11912533998744684301ull, 560483670389646ull}},
+{{5840678384253837118ull, 448386936311717ull}},
+{{15740589151628800664ull, 358709549049373ull}},
+{{1524424877077309561ull, 286967639239499ull}},
+{{9817777432807515945ull, 459148222783198ull}},
+{{15232919575729833402ull, 367318578226558ull}},
+{{1118289216358135752ull, 293854862581247ull}},
+{{5478611560914927527ull, 470167780129995ull}},
+{{4382889248731942021ull, 376134224103996ull}},
+{{18263706657953194910ull, 300907379283196ull}},
+{{3396488949531739593ull, 481451806853115ull}},
+{{2717191159625391675ull, 385161445482492ull}},
+{{13241799371926044309ull, 308129156385993ull}},
+{{17497530180339760572ull, 493006650217589ull}},
+{{17687372959013718781ull, 394405320174071ull}},
+{{10460549552469064701ull, 315524256139257ull}},
+{{1979484024982862229ull, 504838809822812ull}},
+{{12651633664212020753ull, 403871047858249ull}},
+{{13810655746111526925ull, 323096838286599ull}},
+{{11029002749552712111ull, 516954941258559ull}},
+{{12512551014384080012ull, 413563953006847ull}},
+{{2631343182023443363ull, 330851162405478ull}},
+{{520800276495599058ull, 529361859848765ull}},
+{{416640221196479247ull, 423489487879012ull}},
+{{11401358621182914367ull, 338791590303209ull}},
+{{7174127349666932018ull, 542066544485135ull}},
+{{5739301879733545614ull, 433653235588108ull}},
+{{11970139133270657137ull, 346922588470486ull}},
+{{11773524983749230774ull, 555076141552778ull}},
+{{16797517616483205265ull, 444060913242222ull}},
+{{6059316463702743566ull, 355248730593778ull}},
+{{12226150800446015499ull, 284198984475022ull}},
+{{4804446021745983506ull, 454718375160036ull}},
+{{154208002654876481ull, 363774700128029ull}},
+{{3812715216865811508ull, 291019760102423ull}},
+{{2410995532243388090ull, 465631616163877ull}},
+{{12996842870020441442ull, 372505292931101ull}},
+{{6708125481274442830ull, 298004234344881ull}},
+{{3354303140555287882ull, 476806774951810ull}},
+{{2683442512444230305ull, 381445419961448ull}},
+{{9525451639439204891ull, 305156335969158ull}},
+{{11551373808360817502ull, 488250137550653ull}},
+{{16619796676172474648ull, 390600110040522ull}},
+{{5917139711454159072ull, 312480088032418ull}},
+{{5778074723584744192ull, 499968140851869ull}},
+{{8311808593609705677ull, 399974512681495ull}},
+{{6649446874887764541ull, 319979610145196ull}},
+{{3260417370336602620ull, 511967376232314ull}},
+{{6297682711011192419ull, 409573900985851ull}},
+{{1348797354067043612ull, 327659120788681ull}},
+{{13226122210733000749ull, 524254593261889ull}},
+{{14270246583328310922ull, 419403674609511ull}},
+{{7726848451920738415ull, 335522939687609ull}},
+{{1294911078847450494ull, 536836703500175ull}},
+{{1035928863077960395ull, 429469362800140ull}},
+{{828743090462368316ull, 343575490240112ull}},
+{{5015337759481699629ull, 549720784384179ull}},
+{{7701619022327270026ull, 439776627507343ull}},
+{{13539992847345636667ull, 351821302005874ull}},
+{{10595942111527287699ull, 562914083209399ull}},
+{{12166102503963740482ull, 450331266567519ull}},
+{{13422230817912902709ull, 360265013254015ull}},
+{{10737784654330322167ull, 288212010603212ull}},
+{{2423060187960874174ull, 461139216965140ull}},
+{{1938448150368699339ull, 368911373572112ull}},
+{{12618804964520690441ull, 295129098857689ull}},
+{{9122041499007373736ull, 472206558172303ull}},
+{{14676330828689719635ull, 377765246537842ull}},
+{{4362367033467955062ull, 302212197230274ull}},
+{{14358484883032548746ull, 483539515568438ull}},
+{{418741462200308027ull, 386831612454751ull}},
+{{15092388428727887714ull, 309465289963800ull}},
+{{5701077412255068727ull, 495144463942081ull}},
+{{871513115062144658ull, 396115571153665ull}},
+{{697210492049715726ull, 316892456922932ull}},
+{{4804885602021455486ull, 507027931076691ull}},
+{{154559666875254065ull, 405622344861353ull}},
+{{7502345362984023899ull, 324497875889082ull}},
+{{15693101395516348561ull, 519196601422531ull}},
+{{8865132301671168526ull, 415357281138025ull}},
+{{7092105841336934820ull, 332285824910420ull}},
+{{11347369346139095713ull, 531657319856672ull}},
+{{1699197847427455924ull, 425325855885338ull}},
+{{8738055907425785385ull, 340260684708270ull}},
+{{13980889451881256617ull, 544417095533232ull}},
+{{3806013932021184647ull, 435533676426586ull}},
+{{17802206404584589010ull, 348426941141268ull}},
+{{6347437358883880478ull, 557483105826030ull}},
+{{5077949887107104382ull, 445986484660824ull}},
+{{7751708724427593829ull, 356789187728659ull}},
+{{9890715794283985386ull, 285431350182927ull}},
+{{1067750011886735325ull, 456690160292684ull}},
+{{4543548824251298583ull, 365352128234147ull}},
+{{14702885503626769836ull, 292281702587317ull}},
+{{8767221546835190445ull, 467650724139708ull}},
+{{14392474866951973003ull, 374120579311766ull}},
+{{7824631078819668079ull, 299296463449413ull}},
+{{8830060911369558603ull, 478874341519061ull}},
+{{3374699914353736559ull, 383099473215249ull}},
+{{6389108746224899570ull, 306479578572199ull}},
+{{17601271623443659959ull, 490367325715518ull}},
+{{3012970854529196998ull, 392293860572415ull}},
+{{2410376683623357598ull, 313835088457932ull}},
+{{7545951508539282481ull, 502136141532691ull}},
+{{2347412392089515661ull, 401708913226153ull}},
+{{9256627543155433175ull, 321367130580922ull}},
+{{53208810081051788ull, 514187408929476ull}},
+{{14799962307032482723ull, 411349927143580ull}},
+{{11839969845625986178ull, 329079941714864ull}},
+{{7875905308775846916ull, 526527906743783ull}},
+{{13679421876504498179ull, 421222325395026ull}},
+{{7254188686461688220ull, 336977860316021ull}},
+{{4228004268854880506ull, 539164576505634ull}},
+{{7071752229825814728ull, 431331661204507ull}},
+{{16725448228086382752ull, 345065328963605ull}},
+{{8313973091228660787ull, 552104526341769ull}},
+{{10340527287724838953ull, 441683621073415ull}},
+{{8272421830179871162ull, 353346896858732ull}},
+{{17685983908369627899ull, 282677517486985ull}},
+{{9850830179681853023ull, 452284027979177ull}},
+{{501966514261661772ull, 361827222383342ull}},
+{{11469619655635060387ull, 289461777906673ull}},
+{{14662042634274186296ull, 463138844650677ull}},
+{{4350936477935528391ull, 370511075720542ull}},
+{{14548795626574153682ull, 296408860576433ull}},
+{{1141980114067183952ull, 474254176922294ull}},
+{{4602932905995657485ull, 379403341537835ull}},
+{{3682346324796525988ull, 303522673230268ull}},
+{{2202405304932531258ull, 485636277168429ull}},
+{{5451273058687935329ull, 388509021734743ull}},
+{{11739716076434168910ull, 310807217387794ull}},
+{{7715499278068939286ull, 497291547820471ull}},
+{{2483050607713241106ull, 397833238256377ull}},
+{{13054486930396323854ull, 318266590605101ull}},
+{{13508481459150297520ull, 509226544968162ull}},
+{{3428087537836417370ull, 407381235974530ull}},
+{{2742470030269133896ull, 325904988779624ull}},
+{{11766649677914434880ull, 521447982047398ull}},
+{{16792017371815368550ull, 417158385637918ull}},
+{{2365567453226563870ull, 333726708510335ull}},
+{{3784907925162502193ull, 533962733616536ull}},
+{{17785321599097643047ull, 427170186893228ull}},
+{{3160210835052383468ull, 341736149514583ull}},
+{{1366988521341903226ull, 546777839223333ull}},
+{{8472288446557343227ull, 437422271378666ull}},
+{{3088481942503964258ull, 349937817102933ull}},
+{{1252222293264432490ull, 559900507364693ull}},
+{{8380475464095366639ull, 447920405891754ull}},
+{{10393729186018203634ull, 358336324713403ull}},
+{{15693680978298383553ull, 286669059770722ull}},
+{{10352494306309772393ull, 458670495633156ull}},
+{{4592646630305907591ull, 366936396506525ull}},
+{{3674117304244726073ull, 293549117205220ull}},
+{{5878587686791561717ull, 469678587528352ull}},
+{{15770916593658980343ull, 375742870022681ull}},
+{{8927384460185273951ull, 300594296018145ull}},
+{{14283815136296438322ull, 480950873629032ull}},
+{{4048354479553330011ull, 384760698903226ull}},
+{{17996078842610305302ull, 307808559122580ull}},
+{{10346982074466936867ull, 492493694596129ull}},
+{{11966934474315459817ull, 393994955676903ull}},
+{{16952245208936188500ull, 315195964541522ull}},
+{{12366197075330260307ull, 504313543266436ull}},
+{{6203608845522297922ull, 403450834613149ull}},
+{{8652235891159748661ull, 322760667690519ull}},
+{{2775530981629866888ull, 516417068304831ull}},
+{{16977820044271534803ull, 413133654643864ull}},
+{{17271604850159138166ull, 330506923715091ull}},
+{{1809126057061248803ull, 528811077944147ull}},
+{{12515347289874730012ull, 423048862355317ull}},
+{{2633580202415963363ull, 338439089884254ull}},
+{{11592425953349362027ull, 541502543814806ull}},
+{{5584591947937579299ull, 433202035051845ull}},
+{{4467673558350063439ull, 346561628041476ull}},
+{{18216324137585832472ull, 554498604866361ull}},
+{{10883710495326755654ull, 443598883893089ull}},
+{{12396317211003314846ull, 354879107114471ull}},
+{{6227704954060741554ull, 283903285691577ull}},
+{{13653676741239096810ull, 454245257106523ull}},
+{{18301639022475098094ull, 363396205685218ull}},
+{{3573264773754347506ull, 290716964548175ull}},
+{{5717223638006956009ull, 465147143277080ull}},
+{{4573778910405564807ull, 372117714621664ull}},
+{{7348371943066362169ull, 297694171697331ull}},
+{{4378697479422358824ull, 476310674715730ull}},
+{{3502957983537887059ull, 381048539772584ull}},
+{{6491715201572219970ull, 304838831818067ull}},
+{{14076093137257462276ull, 487742130908907ull}},
+{{3882176880322149174ull, 390193704727126ull}},
+{{17863136763225360632ull, 312154963781700ull}},
+{{10134274747451025396ull, 499447942050721ull}},
+{{4418070983218909993ull, 399558353640577ull}},
+{{14602503230800858964ull, 319646682912461ull}},
+{{15985307539797553697ull, 511434692659938ull}},
+{{1720199587612311988ull, 409147754127951ull}},
+{{16133554929057490883ull, 327318203302360ull}},
+{{7366943812782433797ull, 523709125283777ull}},
+{{16961601494451678007ull, 418967300227021ull}},
+{{9879932380819432082ull, 335173840181617ull}},
+{{1050496550343450039ull, 536278144290588ull}},
+{{8219094869758580678ull, 429022515432470ull}},
+{{6575275895806864542ull, 343218012345976ull}},
+{{3141743803807162621ull, 549148819753562ull}},
+{{13581441487271461066ull, 439319055802849ull}},
+{{14554502004559079176ull, 351455244642279ull}},
+{{12219156763068795713ull, 562328391427647ull}},
+{{2396627780971215924ull, 449862713142118ull}},
+{{9295999854260793385ull, 359890170513694ull}},
+{{11126148698150545031ull, 287912136410955ull}},
+{{17801837917040872050ull, 460659418257528ull}},
+{{3173423889406966671ull, 368527534606023ull}},
+{{9917436741009393983ull, 294822027684818ull}},
+{{12178549970873120049ull, 471715244295709ull}},
+{{13432188791440406363ull, 377372195436567ull}},
+{{3367053403668504444ull, 301897756349254ull}},
+{{12765983075353427757ull, 483036410158806ull}},
+{{6523437645540831882ull, 386429128127045ull}},
+{{5218750116432665505ull, 309143302501636ull}},
+{{971302556808444163ull, 494629284002618ull}},
+{{8155739674930575976ull, 395703427202094ull}},
+{{10213940554686371104ull, 316562741761675ull}},
+{{16342304887498193767ull, 506500386818680ull}},
+{{13073843909998555014ull, 405200309454944ull}},
+{{14148423942740754334ull, 324160247563955ull}},
+{{4190734234675655319ull, 518656396102329ull}},
+{{7041936202482434578ull, 414925116881863ull}},
+{{13012246591469768309ull, 331940093505490ull}},
+{{2372850472642077678ull, 531104149608785ull}},
+{{1898280378113662142ull, 424883319687028ull}},
+{{8897321931974750360ull, 339906655749622ull}},
+{{17925063905901510900ull, 543850649199395ull}},
+{{14340051124721208720ull, 435080519359516ull}},
+{{7782692085035056653ull, 348064415487613ull}},
+{{8762958521314180321ull, 556903064780181ull}},
+{{3321018002309433934ull, 445522451824145ull}},
+{{2656814401847547147ull, 356417961459316ull}},
+{{16882846780445679010ull, 285134369167452ull}},
+{{12255159589745445124ull, 456214990667924ull}},
+{{13493476486538266422ull, 364971992534339ull}},
+{{14484130003972523461ull, 291977594027471ull}},
+{{15795910376872216891ull, 467164150443954ull}},
+{{16326077116239683836ull, 373731320355163ull}},
+{{1992815248766016099ull, 298985056284131ull}},
+{{14256550842251356728ull, 478376090054609ull}},
+{{15094589488542995706ull, 382700872043687ull}},
+{{4696973961350575918ull, 306160697634950ull}},
+{{7515158338160921469ull, 489857116215920ull}},
+{{6012126670528737175ull, 391885692972736ull}},
+{{1120352521681079417ull, 313508554378189ull}},
+{{9171261664173547714ull, 501613687005102ull}},
+{{18405055775564569141ull, 401290949604081ull}},
+{{11034695805709744989ull, 321032759683265ull}},
+{{17655513289135591983ull, 513652415493224ull}},
+{{17813759446050383910ull, 410921932394579ull}},
+{{17940356371582217451ull, 328737545915663ull}},
+{{6568477306080085982ull, 525980073465062ull}},
+{{16322828289089799755ull, 420784058772049ull}},
+{{16747611446013750127ull, 336627247017639ull}},
+{{15728131869396269235ull, 538603595228223ull}},
+{{1514459051291284418ull, 430882876182579ull}},
+{{4900916055774937857ull, 344706300946063ull}},
+{{4152116874497990249ull, 551530081513701ull}},
+{{18079088758566033492ull, 441224065210960ull}},
+{{14463271006852826793ull, 352979252168768ull}},
+{{502570361256530465ull, 282383401735015ull}},
+{{804112578010448744ull, 451813442776024ull}},
+{{4332638877150269319ull, 361450754220819ull}},
+{{7155459916462125778ull, 289160603376655ull}},
+{{11448735866339401245ull, 462656965402648ull}},
+{{16537686322555341642ull, 370125572322118ull}},
+{{2162102613818542344ull, 296100457857695ull}},
+{{3459364182109667751ull, 473760732572312ull}},
+{{13835537789913465170ull, 379008586057849ull}},
+{{14757779046672682459ull, 303206868846279ull}},
+{{12544400030450560966ull, 485130990154047ull}},
+{{2656822394876628126ull, 388104792123238ull}},
+{{9504155545385123147ull, 310483833698590ull}},
+{{15206648872616197036ull, 496774133917744ull}},
+{{15854667912834867952ull, 397419307134195ull}},
+{{12683734330267894361ull, 317935445707356ull}},
+{{12915277298944810332ull, 508696713131770ull}},
+{{10332221839155848265ull, 406957370505416ull}},
+{{4576428656582768289ull, 325565896404333ull}},
+{{3632937035790518939ull, 520905434246933ull}},
+{{10285047258116235798ull, 416724347397546ull}},
+{{4538688991751078315ull, 333379477918037ull}},
+{{10951251201543635627ull, 533407164668859ull}},
+{{12450349775976818825ull, 426725731735087ull}},
+{{2581582191297634414ull, 341380585388070ull}},
+{{4130531506076215062ull, 546208936620912ull}},
+{{14372471649086703019ull, 436967149296729ull}},
+{{15187326134011272738ull, 349573719437383ull}},
+{{2163628925966574443ull, 559317951099814ull}},
+{{5420251955515169877ull, 447454360879851ull}},
+{{646852749670225578ull, 357963488703881ull}},
+{{15274877458703821755ull, 286370790963104ull}},
+{{13371757489700383839ull, 458193265540967ull}},
+{{3318708362276486425ull, 366554612432774ull}},
+{{6344315504563099463ull, 293243689946219ull}},
+{{17529602436784779788ull, 469189903913950ull}},
+{{14023681949427823830ull, 375351923131160ull}},
+{{11218945559542259064ull, 300281538504928ull}},
+{{14260964080525704179ull, 480450461607885ull}},
+{{11408771264420563343ull, 384360369286308ull}},
+{{16505714641020271321ull, 307488295429046ull}},
+{{583701722439061852ull, 491981272686475ull}},
+{{466961377951249481ull, 393585018149180ull}},
+{{373569102360999585ull, 314868014519344ull}},
+{{7976408193261419982ull, 503788823230950ull}},
+{{6381126554609135986ull, 403031058584760ull}},
+{{5104901243687308789ull, 322424846867808ull}},
+{{4478493175157783739ull, 515879754988493ull}},
+{{10961492169610047637ull, 412703803990794ull}},
+{{12458542550429948433ull, 330163043192635ull}},
+{{1486924006978365877ull, 528260869108217ull}},
+{{12257585649808423671ull, 422608695286573ull}},
+{{17184766149330559583ull, 338086956229258ull}},
+{{5359532950477433394ull, 540939129966814ull}},
+{{7976975175123857038ull, 432751303973451ull}},
+{{2692231325357175307ull, 346201043178761ull}},
+{{15375616564797211462ull, 553921669086017ull}},
+{{4921795622353948523ull, 443137335268814ull}},
+{{7626785312625069141ull, 354509868215051ull}},
+{{2412079435358144990ull, 283607894572041ull}},
+{{14927373540798762954ull, 453772631315265ull}},
+{{11941898832639010363ull, 363018105052212ull}},
+{{2174821436627387644ull, 290414484041770ull}},
+{{3479714298603820230ull, 464663174466832ull}},
+{{13851817883108787154ull, 371730539573465ull}},
+{{11081454306487029723ull, 297384431658772ull}},
+{{2972931631411606264ull, 475815090654036ull}},
+{{17135740564096926304ull, 380652072523228ull}},
+{{2640546007051810074ull, 304521658018583ull}},
+{{535524796540985795ull, 487234652829733ull}},
+{{7807117466716609282ull, 389787722263786ull}},
+{{2556345158631377102ull, 311830177811029ull}},
+{{11468849883294024011ull, 498928284497646ull}},
+{{5485731091893308885ull, 399142627598117ull}},
+{{15456631317740378078ull, 319314102078493ull}},
+{{2594517219933142985ull, 510902563325590ull}},
+{{2075613775946514388ull, 408722050660472ull}},
+{{12728537464982942480ull, 326977640528377ull}},
+{{5608264685005066675ull, 523164224845404ull}},
+{{8175960562745963663ull, 418531379876323ull}},
+{{13919466079680591577ull, 334825103901058ull}},
+{{135052839037484584ull, 535720166241694ull}},
+{{3797391085971897991ull, 428576132993355ull}},
+{{3037912868777518392ull, 342860906394684ull}},
+{{12239358219527850075ull, 548577450231494ull}},
+{{13480835390364190383ull, 438861960185195ull}},
+{{10784668312291352306ull, 351089568148156ull}},
+{{9876771670182343044ull, 561743309037050ull}},
+{{7901417336145874435ull, 449394647229640ull}},
+{{6321133868916699548ull, 359515717783712ull}},
+{{16124953539359090608ull, 287612574226969ull}},
+{{14731879218748814003ull, 460180118763151ull}},
+{{8096154560257140879ull, 368144095010521ull}},
+{{2787574833463802380ull, 294515276008417ull}},
+{{8149468548283994132ull, 471224441613467ull}},
+{{17587621282852926275ull, 376979553290773ull}},
+{{3002050582056610050ull, 301583642632619ull}},
+{{12181978560774396727ull, 482533828212190ull}},
+{{9745582848619517381ull, 386027062569752ull}},
+{{417768649411793259ull, 308821650055802ull}},
+{{4357778653800779537ull, 494114640089283ull}},
+{{10864920552524444276ull, 395291712071426ull}},
+{{5002587627277645098ull, 316233369657141ull}},
+{{625442574160411510ull, 505973391451426ull}},
+{{15257749318295970501ull, 404778713161140ull}},
+{{12206199454636776400ull, 323822970528912ull}},
+{{4772523868451200948ull, 518116752846260ull}},
+{{3818019094760960759ull, 414493402277008ull}},
+{{10433112905292589253ull, 331594721821606ull}},
+{{9314283018984322159ull, 530551554914570ull}},
+{{7451426415187457727ull, 424441243931656ull}},
+{{2271792317408055858ull, 339552995145325ull}},
+{{3634867707852889374ull, 543284792232520ull}},
+{{2907894166282311499ull, 434627833786016ull}},
+{{17083710591993490492ull, 347702267028812ull}},
+{{12576541688221943494ull, 556323627246100ull}},
+{{10061233350577554795ull, 445058901796880ull}},
+{{8048986680462043836ull, 356047121437504ull}},
+{{10128538159111545392ull, 284837697150003ull}},
+{{12516312239836562304ull, 455740315440005ull}},
+{{10013049791869249843ull, 364592252352004ull}},
+{{11699788648237310198ull, 291673801881603ull}},
+{{15030313022437785994ull, 466678083010565ull}},
+{{12024250417950228795ull, 373342466408452ull}},
+{{2240702704876362389ull, 298673973126762ull}},
+{{7274473142544090146ull, 477878357002819ull}},
+{{9508927328777182440ull, 382302685602255ull}},
+{{7607141863021745952ull, 305842148481804ull}},
+{{1103380536609062554ull, 489347437570887ull}},
+{{11950750873512981013ull, 391477950056709ull}},
+{{13249949513552295133ull, 313182360045367ull}},
+{{6442523962716030921ull, 501091776072588ull}},
+{{12532716799656645383ull, 400873420858070ull}},
+{{10026173439725316306ull, 320698736686456ull}},
+{{8663179874076685444ull, 513117978698330ull}},
+{{6930543899261348355ull, 410494382958664ull}},
+{{9233783934150989007ull, 328395506366931ull}},
+{{7395356665157761765ull, 525432810187090ull}},
+{{5916285332126209412ull, 420346248149672ull}},
+{{15801074709926698499ull, 336276998519737ull}},
+{{10524324276915076306ull, 538043197631580ull}},
+{{8419459421532061045ull, 430434558105264ull}},
+{{10424916351967559159ull, 344347646484211ull}},
+{{9301168533664274008ull, 550956234374738ull}},
+{{14819632456415239853ull, 440764987499790ull}},
+{{11855705965132191882ull, 352611989999832ull}},
+{{2105867142621932859ull, 282089591999866ull}},
+{{14437433872420823545ull, 451343347199785ull}},
+{{11549947097936658836ull, 361074677759828ull}},
+{{16618655307833147715ull, 288859742207862ull}},
+{{11832453233565395051ull, 462175587532580ull}},
+{{9465962586852316041ull, 369740470026064ull}},
+{{11262118884223763156ull, 295792376020851ull}},
+{{10640692585274200403ull, 473267801633362ull}},
+{{1133856438735539676ull, 378614241306690ull}},
+{{907085150988431741ull, 302891393045352ull}},
+{{5140685056323401109ull, 484626228872563ull}},
+{{11491245674542541533ull, 387700983098050ull}},
+{{9192996539634033226ull, 310160786478440ull}},
+{{14708794463414453163ull, 496257258365504ull}},
+{{15456384385473472853ull, 397005806692403ull}},
+{{1297061064153047313ull, 317604645353923ull}},
+{{16832692961612516994ull, 508167432566276ull}},
+{{9776805554548103272ull, 406533946053021ull}},
+{{4132095628896572294ull, 325227156842417ull}},
+{{10300701820976425994ull, 520363450947867ull}},
+{{861863827297320149ull, 416290760758294ull}},
+{{4378839876579766442ull, 333032608606635ull}},
+{{7006143802527626308ull, 532852173770616ull}},
+{{1915566227280190723ull, 426281739016493ull}},
+{{8911150611307973225ull, 341025391213194ull}},
+{{3189794533867026190ull, 545640625941111ull}},
+{{17309230886061262245ull, 436512500752888ull}},
+{{2779338264623278826ull, 349210000602311ull}},
+{{15514987667622977092ull, 558736000963697ull}},
+{{5033292504614561027ull, 446988800770958ull}},
+{{11405331633175469468ull, 357591040616766ull}},
+{{5434916491798465251ull, 286072832493413ull}},
+{{5006517572135634078ull, 457716531989461ull}},
+{{315865242966596939ull, 366173225591569ull}},
+{{3942041009115187875ull, 292938580473255ull}},
+{{6307265614584300600ull, 468701728757208ull}},
+{{12424510121151261126ull, 374961383005766ull}},
+{{6250259282179098578ull, 299969106404613ull}},
+{{6311066036744647401ull, 479950570247381ull}},
+{{1359504014653807598ull, 383960456197905ull}},
+{{1087603211723046078ull, 307168364958324ull}},
+{{9118862768240694372ull, 491469383933318ull}},
+{{14673787844076376144ull, 393175507146654ull}},
+{{15428379090003011238ull, 314540405717323ull}},
+{{2549313655553356042ull, 503264649147718ull}},
+{{9418148553926505480ull, 402611719318174ull}},
+{{11223867657883114707ull, 322089375454539ull}},
+{{6890141808387252562ull, 515343000727263ull}},
+{{12890811076193622696ull, 412274400581810ull}},
+{{10312648860954898156ull, 329819520465448ull}},
+{{12810889362785926727ull, 527711232744717ull}},
+{{2870013860744920735ull, 422168986195774ull}},
+{{5985359903337846911ull, 337735188956619ull}},
+{{16955273474824375705ull, 540376302330590ull}},
+{{13564218779859500564ull, 432301041864472ull}},
+{{3472677394403779805ull, 345840833491578ull}},
+{{1866935016304137365ull, 553345333586525ull}},
+{{1493548013043309892ull, 442676266869220ull}},
+{{1194838410434647913ull, 354141013495376ull}},
+{{15713265987315359623ull, 283312810796300ull}},
+{{6694481505995023781ull, 453300497274081ull}},
+{{1666236390054108702ull, 362640397819265ull}},
+{{1332989112043286961ull, 290112318255412ull}},
+{{5822131394011169462ull, 464179709208659ull}},
+{{8347053929950845892ull, 371343767366927ull}},
+{{17745689588186407683ull, 297075013893541ull}},
+{{2567661637904880031ull, 475320022229667ull}},
+{{13122175754549634995ull, 380256017783733ull}},
+{{17876438233123528642ull, 304204814226986ull}},
+{{2776859469804273565ull, 486727702763179ull}},
+{{5910836390585329175ull, 389382162210543ull}},
+{{12107366741952083986ull, 311505729768434ull}},
+{{8303740342897603409ull, 498409167629495ull}},
+{{6642992274318082727ull, 398727334103596ull}},
+{{1625045004712555858ull, 318981867282877ull}},
+{{6289420822281999697ull, 510370987652603ull}},
+{{12410234287309420404ull, 408296790122082ull}},
+{{2549489800363715677ull, 326637432097666ull}},
+{{15147230124807676052ull, 522619891356265ull}},
+{{12117784099846140842ull, 418095913085012ull}},
+{{2315529650393092027ull, 334476730468010ull}},
+{{3704847440628947243ull, 535162768748816ull}},
+{{17721273211470799087ull, 428130214999052ull}},
+{{6798320939692818623ull, 342504171999242ull}},
+{{14566662318250420121ull, 548006675198787ull}},
+{{4274632225116515450ull, 438405340159030ull}},
+{{3419705780093212360ull, 350724272127224ull}},
+{{12850226877632960423ull, 561158835403558ull}},
+{{17658879131590188985ull, 448927068322846ull}},
+{{10437754490530240864ull, 359141654658277ull}},
+{{971505962940372045ull, 287313323726622ull}},
+{{5243758355446505596ull, 459701317962595ull}},
+{{4195006684357204476ull, 367761054370076ull}},
+{{18113400606453404874ull, 294208843496060ull}},
+{{10534696896615896182ull, 470734149593697ull}},
+{{1049059887808896299ull, 376587319674958ull}},
+{{8217945539730937686ull, 301269855739966ull}},
+{{5770015234085679651ull, 482031769183946ull}},
+{{926663372526633398ull, 385625415347157ull}},
+{{11809377142247037688ull, 308500332277725ull}},
+{{448259353885708685ull, 493600531644361ull}},
+{{15116002742076208240ull, 394880425315488ull}},
+{{1024755749435235623ull, 315904340252391ull}},
+{{12707655643322107966ull, 505446944403825ull}},
+{{10166124514657686373ull, 404357555523060ull}},
+{{8132899611726149098ull, 323486044418448ull}},
+{{9323290564019928234ull, 517577671069517ull}},
+{{79934821732121941ull, 414062136855614ull}},
+{{3753296672127607876ull, 331249709484491ull}},
+{{17073321119629903571ull, 529999535175185ull}},
+{{13658656895703922857ull, 423999628140148ull}},
+{{18305623146046958932ull, 339199702512118ull}},
+{{7152904145223672352ull, 542719524019390ull}},
+{{5722323316178937881ull, 434175619215512ull}},
+{{15645905097168881275ull, 347340495372409ull}},
+{{13965401711244479070ull, 555744792595855ull}},
+{{11172321368995583256ull, 444595834076684ull}},
+{{12627205909938376928ull, 355676667261347ull}},
+{{2723067098466880896ull, 284541333809078ull}},
+{{667558542805099110ull, 455266134094525ull}},
+{{534046834244079288ull, 364212907275620ull}},
+{{427237467395263430ull, 291370325820496ull}},
+{{11751626392058152458ull, 466192521312793ull}},
+{{16779998743130342613ull, 372954017050234ull}},
+{{17113347809246184414ull, 298363213640187ull}},
+{{12623961235826253769ull, 477381141824300ull}},
+{{10099168988661003015ull, 381904913459440ull}},
+{{8079335190928802412ull, 305523930767552ull}},
+{{16616285120227994183ull, 488838289228083ull}},
+{{2224981651956664377ull, 391070631382467ull}},
+{{12848031765791062471ull, 312856505105973ull}},
+{{16867502010523789630ull, 500570408169557ull}},
+{{6115303978935211058ull, 400456326535646ull}},
+{{1202894368406258523ull, 320365061228517ull}},
+{{5613979804191923960ull, 512584097965627ull}},
+{{15559230287579270138ull, 410067278372501ull}},
+{{8758035415321505787ull, 328053822698001ull}},
+{{6634159035030588613ull, 524886116316802ull}},
+{{16375373672250201860ull, 419908893053441ull}},
+{{9410950123058251165ull, 335927114442753ull}},
+{{11368171382151291540ull, 537483383108405ull}},
+{{9094537105721033232ull, 429986706486724ull}},
+{{10964978499318736909ull, 343989365189379ull}},
+{{6475919154684248085ull, 550382984303007ull}},
+{{16248781767973129437ull, 440306387442405ull}},
+{{12999025414378503550ull, 352245109953924ull}},
+{{14088569146244713163ull, 281796087963139ull}},
+{{11473664189765810091ull, 450873740741023ull}},
+{{16557628981296468719ull, 360698992592818ull}},
+{{2178056740811444006ull, 288559194074255ull}},
+{{3484890785298310410ull, 461694710518808ull}},
+{{10166610257722468974ull, 369355768415046ull}},
+{{4443939391436064856ull, 295484614732037ull}},
+{{10799651841039614093ull, 472775383571259ull}},
+{{12329070287573601597ull, 378220306857007ull}},
+{{2484558600575060631ull, 302576245485606ull}},
+{{15043340205145827980ull, 484121992776969ull}},
+{{15724020978858572707ull, 387297594221575ull}},
+{{12579216783086858166ull, 309838075377260ull}},
+{{1680002779229421449ull, 495740920603617ull}},
+{{12412048667609268129ull, 396592736482893ull}},
+{{17308336563571235150ull, 317274189186314ull}},
+{{16625292057488245270ull, 507638702698103ull}},
+{{2232187201764865246ull, 406110962158483ull}},
+{{9164447390895712843ull, 324888769726786ull}},
+{{7284418195949319903ull, 519822031562858ull}},
+{{13206232186243276569ull, 415857625250286ull}},
+{{6875636934252710932ull, 332686100200229ull}},
+{{18379716724288158138ull, 532297760320366ull}},
+{{11014424564688616187ull, 425838208256293ull}},
+{{16190237281234713596ull, 340670566605034ull}},
+{{14836333205749810784ull, 545072906568055ull}},
+{{11869066564599848627ull, 436058325254444ull}},
+{{13184602066421789225ull, 348846660203555ull}},
+{{2648619232565311144ull, 558154656325689ull}},
+{{5808244200794159238ull, 446523725060551ull}},
+{{957246545893417067ull, 357218980048441ull}},
+{{15523192495682374946ull, 285775184038752ull}},
+{{10079712734124158622ull, 457240294462004ull}},
+{{11753119002041237221ull, 365792235569603ull}},
+{{16781192831116810423ull, 292633788455682ull}},
+{{12092513270819255384ull, 468214061529092ull}},
+{{2295312987171583661ull, 374571249223274ull}},
+{{5525599204479177252ull, 299656999378619ull}},
+{{16219656356650504249ull, 479451199005790ull}},
+{{12975725085320403399ull, 383560959204632ull}},
+{{3001882438772502073ull, 306848767363706ull}},
+{{15871058346261734287ull, 490958027781929ull}},
+{{16386195491751297752ull, 392766422225543ull}},
+{{2040909949175307232ull, 314213137780435ull}},
+{{3265455918680491572ull, 502741020448696ull}},
+{{17369759993912034550ull, 402192816358956ull}},
+{{10206459180387717317ull, 321754253087165ull}},
+{{16330334688620347707ull, 514806804939464ull}},
+{{16753616565638188489ull, 411845443951571ull}},
+{{9713544437768640468ull, 329476355161257ull}},
+{{784275841462183456ull, 527162168258012ull}},
+{{11695467117395477734ull, 421729734606409ull}},
+{{13045722508658292511ull, 337383787685127ull}},
+{{6115760754885626724ull, 539814060296204ull}},
+{{8581957418650411703ull, 431851248236963ull}},
+{{14244263564404150008ull, 345480998589570ull}},
+{{4344077629337088398ull, 552769597743313ull}},
+{{10853959732953491364ull, 442215678194650ull}},
+{{8683167786362793091ull, 353772542555720ull}},
+{{6946534229090234473ull, 283018034044576ull}},
+{{3735757137060554511ull, 452828854471322ull}},
+{{14056652153874174578ull, 362263083577057ull}},
+{{3866624093615519016ull, 289810466861646ull}},
+{{17254644994010561396ull, 463696746978633ull}},
+{{2735669550982718147ull, 370957397582907ull}},
+{{13256582085011905487ull, 296765918066325ull}},
+{{2763787262309497163ull, 474825468906121ull}},
+{{16968425068815239023ull, 379860375124896ull}},
+{{9885391240310280895ull, 303888300099917ull}},
+{{1059230725528808140ull, 486221280159868ull}},
+{{8226082209906867158ull, 388977024127894ull}},
+{{10270214582667404050ull, 311181619302315ull}},
+{{16432343332267846480ull, 497890590883704ull}},
+{{16835223480556187507ull, 398312472706963ull}},
+{{2400132340219219036ull, 318649978165571ull}},
+{{14908258188576481427ull, 509839965064913ull}},
+{{858560106635454172ull, 407871972051931ull}},
+{{15444243344276004631ull, 326297577641544ull}},
+{{13642742906615876440ull, 522076124226471ull}},
+{{7224845510550790828ull, 417660899381177ull}},
+{{16847922852666363632ull, 334128719504941ull}},
+{{1131234861072809549ull, 534605951207907ull}},
+{{11973034333083978609ull, 427684760966325ull}},
+{{9578427466467182887ull, 342147808773060ull}},
+{{15325483946347492620ull, 547436494036896ull}},
+{{8571038342336083772ull, 437949195229517ull}},
+{{17924877118094597987ull, 350359356183613ull}},
+{{6543710500499894841ull, 560574969893782ull}},
+{{16303014844625646842ull, 448459975915025ull}},
+{{13042411875700517474ull, 358767980732020ull}},
+{{10433929500560413979ull, 287014384585616ull}},
+{{9315589571412841720ull, 459223015336986ull}},
+{{3763122842388363053ull, 367378412269589ull}},
+{{6699847088652600765ull, 293902729815671ull}},
+{{3341057712360340578ull, 470244367705074ull}},
+{{6362194984630182786ull, 376195494164059ull}},
+{{8779104802446056552ull, 300956395331247ull}},
+{{17735916498655600806ull, 481530232529995ull}},
+{{14188733198924480645ull, 385224186023996ull}},
+{{7661637744397674193ull, 308179348819197ull}},
+{{15947969205778189032ull, 493086958110715ull}},
+{{12758375364622551225ull, 394469566488572ull}},
+{{2828002662214220334ull, 315575653190858ull}},
+{{835455444800842211ull, 504921045105373ull}},
+{{8047061985324494415ull, 403936836084298ull}},
+{{13816347217743416178ull, 323149468867438ull}},
+{{18416806733647555563ull, 517039150187901ull}},
+{{11044096572176134127ull, 413631320150321ull}},
+{{5145928442998996978ull, 330905056120257ull}},
+{{11922834323540305489ull, 529448089792411ull}},
+{{5848918644090334068ull, 423558471833929ull}},
+{{8368483730014177577ull, 338846777467143ull}},
+{{9700225153280773800ull, 542154843947429ull}},
+{{11449528937366529363ull, 433723875157943ull}},
+{{16538320779377044137ull, 346979100126354ull}},
+{{15393266802777539650ull, 555166560202167ull}},
+{{4935915812738211074ull, 444133248161734ull}},
+{{7638081464932479182ull, 355306598529387ull}},
+{{17178511616171714315ull, 284245278823509ull}},
+{{16417572141649011935ull, 454792446117615ull}},
+{{13134057713319209548ull, 363833956894092ull}},
+{{3128548541171546992ull, 291067165515274ull}},
+{{12384375295358295833ull, 465707464824438ull}},
+{{17286197865770457313ull, 372565971859550ull}},
+{{13828958292616365850ull, 298052777487640ull}},
+{{3679589194476633745ull, 476884443980225ull}},
+{{2943671355581306996ull, 381507555184180ull}},
+{{2354937084465045596ull, 305206044147344ull}},
+{{11146596964627893601ull, 488329670635750ull}},
+{{8917277571702314881ull, 390663736508600ull}},
+{{7133822057361851905ull, 312530989206880ull}},
+{{11414115291778963048ull, 500049582731008ull}},
+{{16509989862906991084ull, 400039666184806ull}},
+{{9518643075583682544ull, 320031732947845ull}},
+{{15229828920933892071ull, 512050772716552ull}},
+{{4805165507263293010ull, 409640618173242ull}},
+{{14912178850036365378ull, 327712494538593ull}},
+{{1723393271606722665ull, 524339991261750ull}},
+{{1378714617285378132ull, 419471993009400ull}},
+{{1102971693828302506ull, 335577594407520ull}},
+{{1764754710125284009ull, 536924151052032ull}},
+{{12479850212325958177ull, 429539320841625ull}},
+{{9983880169860766542ull, 343631456673300ull}},
+{{15974208271777226467ull, 549810330677280ull}},
+{{12779366617421781173ull, 439848264541824ull}},
+{{13912842108679335262ull, 351878611633459ull}},
+{{14819622501685378532ull, 281502889306767ull}},
+{{8954000743728964359ull, 450404622890828ull}},
+{{14541898224466992134ull, 360323698312662ull}},
+{{4254820950089773061ull, 288258958650130ull}},
+{{6807713520143636897ull, 461214333840208ull}},
+{{12824868445598730164ull, 368971467072166ull}},
+{{6570545941737073808ull, 295177173657733ull}},
+{{6823524692037407770ull, 472283477852373ull}},
+{{12837517383113746862ull, 377826782281898ull}},
+{{17648711535974818136ull, 302261425825518ull}},
+{{6101845569108247079ull, 483618281320830ull}},
+{{4881476455286597663ull, 386894625056664ull}},
+{{7594529978971188453ull, 309515700045331ull}},
+{{4772550336870080879ull, 495225120072530ull}},
+{{3818040269496064703ull, 396180096058024ull}},
+{{6743781030338762086ull, 316944076846419ull}},
+{{18168747278025839984ull, 507110522954270ull}},
+{{14534997822420671987ull, 405688418363416ull}},
+{{7938649443194627266ull, 324550734690733ull}},
+{{9012490294369493303ull, 519281175505173ull}},
+{{14588689864979415289ull, 415424940404138ull}},
+{{602905447757801261ull, 332339952323311ull}},
+{{12032695160638212988ull, 531743923717297ull}},
+{{2247458499026749744ull, 425395138973838ull}},
+{{9176664428705220442ull, 340316111179070ull}},
+{{14682663085928352707ull, 544505777886512ull}},
+{{4367432839258861519ull, 435604622309210ull}},
+{{3493946271407089215ull, 348483697847368ull}},
+{{1900965219509432421ull, 557573916555789ull}},
+{{5210120990349456260ull, 446059133244631ull}},
+{{478747977537654685ull, 356847306595705ull}},
+{{382998382030123748ull, 285477845276564ull}},
+{{7991495040732018643ull, 456764552442502ull}},
+{{17461242476811345884ull, 365411641954001ull}},
+{{10279645166707166384ull, 292329313563201ull}},
+{{9068734637247645568ull, 467726901701122ull}},
+{{18323034154023847424ull, 374181521360897ull}},
+{{7279729693735257293ull, 299345217088718ull}},
+{{7958218695234501345ull, 478952347341949ull}},
+{{10055923770929511399ull, 383161877873559ull}},
+{{11734087831485519443ull, 306529502298847ull}},
+{{4017145271409189816ull, 490447203678156ull}},
+{{17971111476094993145ull, 392357762942524ull}},
+{{18066237995617904839ull, 313886210354019ull}},
+{{17837934348762916774ull, 502217936566431ull}},
+{{10580998664268423096ull, 401774349253145ull}},
+{{8464798931414738476ull, 321419479402516ull}},
+{{6164980660779760916ull, 514271167044026ull}},
+{{1242635713881898410ull, 411416933635221ull}},
+{{15751503830073160020ull, 329133546908176ull}},
+{{17823708498633235386ull, 526613675053082ull}},
+{{6880269169422767663ull, 421290940042466ull}},
+{{1814866520796303807ull, 337032752033973ull}},
+{{17661181692241727384ull, 539252403254356ull}},
+{{10439596539051471584ull, 431401922603485ull}},
+{{8351677231241177267ull, 345121538082788ull}},
+{{9673334755243973304ull, 552194460932461ull}},
+{{4049318989453268320ull, 441755568745969ull}},
+{{6928804006304524979ull, 353404454996775ull}},
+{{5543043205043619983ull, 282723563997420ull}},
+{{8868869128069791974ull, 452357702395872ull}},
+{{18163141746681564548ull, 361886161916697ull}},
+{{7151815767861430992ull, 289508929533358ull}},
+{{7753556413836379265ull, 463214287253373ull}},
+{{13581542760552924058ull, 370571429802698ull}},
+{{18243931837926159893ull, 296457143842158ull}},
+{{7054198052230393889ull, 474331430147454ull}},
+{{9332707256526225435ull, 379465144117963ull}},
+{{14844863434704800994ull, 303572115294370ull}},
+{{5305037421818129975ull, 485715384470993ull}},
+{{11622727566938324626ull, 388572307576794ull}},
+{{12987530868292570024ull, 310857846061435ull}},
+{{2333305315558560423ull, 497372553698297ull}},
+{{12934690696672579308ull, 397898042958637ull}},
+{{2969054927854242800ull, 318318434366910ull}},
+{{4750487884566788480ull, 509309494987056ull}},
+{{111041492911520460ull, 407447595989645ull}},
+{{88833194329216368ull, 325958076791716ull}},
+{{11210179555152477159ull, 521532922866745ull}},
+{{8968143644121981727ull, 417226338293396ull}},
+{{3485166100555675058ull, 333781070634717ull}},
+{{9265614575630990417ull, 534049713015547ull}},
+{{33794031020971687ull, 427239770412438ull}},
+{{7405732854300597996ull, 341791816329950ull}},
+{{11849172566880956794ull, 546866906127920ull}},
+{{9479338053504765435ull, 437493524902336ull}},
+{{3894121628061902025ull, 349994819921869ull}},
+{{13609292234382863886ull, 559991711874990ull}},
+{{10887433787506291109ull, 447993369499992ull}},
+{{1331249400521212241ull, 358394695599994ull}},
+{{4754348335158880116ull, 286715756479995ull}},
+{{7606957336254208185ull, 458745210367992ull}},
+{{17153612313229097518ull, 366996168294393ull}},
+{{2654843406357547044ull, 293596934635515ull}},
+{{4247749450172075271ull, 469755095416824ull}},
+{{7087548374879570540ull, 375804076333459ull}},
+{{9359387514645566755ull, 300643261066767ull}},
+{{217624764465265516ull, 481029217706828ull}},
+{{7552797441056033059ull, 384823374165462ull}},
+{{17110284397070557417ull, 307858699332369ull}},
+{{16308408591087160897ull, 492573918931791ull}},
+{{9357378058127818395ull, 394059135145433ull}},
+{{14864600075986075362ull, 315247308116346ull}},
+{{16404662492093899933ull, 504395692986154ull}},
+{{16813078808417030270ull, 403516554388923ull}},
+{{2382416602507893246ull, 322813243511139ull}},
+{{11190564193496449840ull, 516501189617822ull}},
+{{1573753725313339226ull, 413200951694258ull}},
+{{8637700609734492027ull, 330560761355406ull}},
+{{6441623346091366597ull, 528897218168650ull}},
+{{5153298676873093277ull, 423117774534920ull}},
+{{4122638941498474622ull, 338494219627936ull}},
+{{17664268750623290365ull, 541590751404697ull}},
+{{6752717371014811645ull, 433272601123758ull}},
+{{12780871526295669963ull, 346618080899006ull}},
+{{13070696812589251294ull, 554588929438410ull}},
+{{10456557450071401035ull, 443671143550728ull}},
+{{15743943589540941474ull, 354936914840582ull}},
+{{5216457242148932533ull, 283949531872466ull}},
+{{967633957954471407ull, 454319250995946ull}},
+{{15531502425331218418ull, 363455400796756ull}},
+{{8735853125523064411ull, 290764320637405ull}},
+{{13977365000836903058ull, 465222913019848ull}},
+{{113845556443791477ull, 372178330415879ull}},
+{{3780425259896943505ull, 297742664332703ull}},
+{{2359331601093199284ull, 476388262932325ull}},
+{{1887465280874559427ull, 381110610345860ull}},
+{{1509972224699647542ull, 304888488276688ull}},
+{{17173350818487077360ull, 487821581242700ull}},
+{{13738680654789661888ull, 390257264994160ull}},
+{{10990944523831729510ull, 312205811995328ull}},
+{{13896162423388856894ull, 499529299192525ull}},
+{{11116929938711085515ull, 399623439354020ull}},
+{{8893543950968868412ull, 319698751483216ull}},
+{{6850972692066368813ull, 511518002373146ull}},
+{{1791429338911184727ull, 409214401898517ull}},
+{{12501189915354678751ull, 327371521518813ull}},
+{{16312555049825575679ull, 523794434430101ull}},
+{{9360695225118550220ull, 419035547544081ull}},
+{{3799207365352929852ull, 335228438035265ull}},
+{{6078731784564687764ull, 536365500856424ull}},
+{{8552334242393660534ull, 429092400685139ull}},
+{{10531216208656838751ull, 343273920548111ull}},
+{{9471248304367121355ull, 549238272876978ull}},
+{{14955696272977517730ull, 439390618301582ull}},
+{{4585859388898193538ull, 351512494641266ull}},
+{{18405421466462840630ull, 562419991426025ull}},
+{{14724337173170272504ull, 449935993140820ull}},
+{{11779469738536218003ull, 359948794512656ull}},
+{{5734226976087064079ull, 287959035610125ull}},
+{{9174763161739302527ull, 460734456976200ull}},
+{{7339810529391442021ull, 368587565580960ull}},
+{{5871848423513153617ull, 294870052464768ull}},
+{{5705608662879135464ull, 471792083943629ull}},
+{{8253835745045218695ull, 377433667154903ull}},
+{{13981766225519995602ull, 301946933723922ull}},
+{{7613430701864351671ull, 483115093958276ull}},
+{{2401395746749571013ull, 386492075166621ull}},
+{{16678511856367298103ull, 309193660133296ull}},
+{{860177266994304703ull, 494709856213275ull}},
+{{688141813595443762ull, 395767884970620ull}},
+{{550513450876355010ull, 316614307976496ull}},
+{{11948867965627898986ull, 506582892762393ull}},
+{{16937792001986139835ull, 405266314209914ull}},
+{{17239582416330822191ull, 324213051367931ull}},
+{{1757890162935943243ull, 518740882188691ull}},
+{{16163707389316395887ull, 414992705750952ull}},
+{{5552268281969296063ull, 331994164600762ull}},
+{{12572978065892784025ull, 531190663361219ull}},
+{{13747731267456137543ull, 424952530688975ull}},
+{{10998185013964910034ull, 339962024551180ull}},
+{{17597096022343856055ull, 543939239281888ull}},
+{{3009630373649353875ull, 435151391425511ull}},
+{{17165099557887124392ull, 348121113140408ull}},
+{{5328066404167937089ull, 556993781024654ull}},
+{{7951801938076259994ull, 445595024819723ull}},
+{{13740139179944828642ull, 356476019855778ull}},
+{{18370808973439683560ull, 285180815884622ull}},
+{{14635899098535852403ull, 456289305415396ull}},
+{{8019370464086771599ull, 365031444332317ull}},
+{{17483542815495148249ull, 292025155465853ull}},
+{{5837575616340775259ull, 467240248745366ull}},
+{{980711678330709884ull, 373792198996293ull}},
+{{8163266972148388553ull, 299033759197034ull}},
+{{1993180711211690716ull, 478454014715255ull}},
+{{1594544568969352573ull, 382763211772204ull}},
+{{4964984469917392381ull, 306210569417763ull}},
+{{4254626337125917487ull, 489936911068421ull}},
+{{18161096328668375283ull, 391949528854736ull}},
+{{10839528248192789903ull, 313559623083789ull}},
+{{6275198752882732875ull, 501695396934063ull}},
+{{12398856631790006946ull, 401356317547250ull}},
+{{9919085305432005557ull, 321085054037800ull}},
+{{15870536488691208892ull, 513736086460480ull}},
+{{12696429190952967113ull, 410988869168384ull}},
+{{13846492167504284014ull, 328791095334707ull}},
+{{7396992209039213129ull, 526065752535532ull}},
+{{16985640211457101473ull, 420852602028425ull}},
+{{13588512169165681178ull, 336682081622740ull}},
+{{3294875396955538270ull, 538691330596385ull}},
+{{2635900317564430616ull, 430953064477108ull}},
+{{9487417883535365139ull, 344762451581686ull}},
+{{7801170984172763576ull, 551619922530698ull}},
+{{13619634416822031507ull, 441295938024558ull}},
+{{18274405162941445852ull, 353036750419646ull}},
+{{10930175315611246358ull, 282429400335717ull}},
+{{2730885246010352881ull, 451887040537148ull}},
+{{9563405826292102951ull, 361509632429718ull}},
+{{15029422290517503007ull, 289207705943774ull}},
+{{12979029220602273842ull, 462732329510039ull}},
+{{14072572191223729397ull, 370185863608031ull}},
+{{7568708938237073194ull, 296148690886425ull}},
+{{12109934301179317111ull, 473837905418280ull}},
+{{9687947440943453688ull, 379070324334624ull}},
+{{11439706767496673274ull, 303256259467699ull}},
+{{7235484383768946269ull, 485210015148319ull}},
+{{9477736321757067338ull, 388168012118655ull}},
+{{7582189057405653870ull, 310534409694924ull}},
+{{1063456047623315223ull, 496855055511879ull}},
+{{4540113652840562502ull, 397484044409503ull}},
+{{11010788551756270648ull, 317987235527602ull}},
+{{2859866423842391744ull, 508779576844164ull}},
+{{5977241953815823718ull, 407023661475331ull}},
+{{1092444748310748651ull, 325618929180265ull}},
+{{1747911597297197842ull, 520990286688424ull}},
+{{5087678092579668597ull, 416792229350739ull}},
+{{7759491288805645201ull, 333433783480591ull}},
+{{5036488432605211675ull, 533494053568946ull}},
+{{339841931342259017ull, 426795242855157ull}},
+{{11339919989299538183ull, 341436194284125ull}},
+{{18143871982879261093ull, 546297910854600ull}},
+{{14515097586303408874ull, 437038328683680ull}},
+{{11612078069042727099ull, 349630662946944ull}},
+{{7511278466242632389ull, 559409060715111ull}},
+{{2319673958252195588ull, 447527248572089ull}},
+{{5545087981343666794ull, 358021798857671ull}},
+{{746721570333023112ull, 286417439086137ull}},
+{{4884103327274747302ull, 458267902537819ull}},
+{{7596631476561708165ull, 366614322030255ull}},
+{{6077305181249366532ull, 293291457624204ull}},
+{{17102385919482807098ull, 469266332198726ull}},
+{{9992559920844335355ull, 375413065758981ull}},
+{{4304699121933557960ull, 300330452607185ull}},
+{{6887518595093692737ull, 480528724171496ull}},
+{{1820666061333043866ull, 384422979337197ull}},
+{{12524579293292166063ull, 307538383469757ull}},
+{{5281931610299824408ull, 492061413551612ull}},
+{{15293591732465590496ull, 393649130841289ull}},
+{{15924222200714382720ull, 314919304673031ull}},
+{{18100057891659191705ull, 503870887476850ull}},
+{{14480046313327353364ull, 403096709981480ull}},
+{{11584037050661882691ull, 322477367985184ull}},
+{{7466412836833281337ull, 515963788776295ull}},
+{{5973130269466625069ull, 412771031021036ull}},
+{{1089155400831389732ull, 330216824816829ull}},
+{{9121346270814044218ull, 528346919706926ull}},
+{{3607728201909325051ull, 422677535765541ull}},
+{{17643577820495101334ull, 338142028612432ull}},
+{{13472329253824520841ull, 541027245779892ull}},
+{{3399165773575796026ull, 432821796623914ull}},
+{{6408681433602547144ull, 346257437299131ull}},
+{{2875192664280254785ull, 554011899678610ull}},
+{{2300154131424203828ull, 443209519742888ull}},
+{{9218820934623183708ull, 354567615794310ull}},
+{{7375056747698546967ull, 283654092635448ull}},
+{{8110741981575764824ull, 453846548216717ull}},
+{{17556640029486342828ull, 363077238573373ull}},
+{{2977265579363343293ull, 290461790858699ull}},
+{{12142322556465169916ull, 464738865373918ull}},
+{{17092555674655956579ull, 371791092299134ull}},
+{{17363393354466675586ull, 297432873839307ull}},
+{{13024034108179039645ull, 475892598142892ull}},
+{{3040529657059411070ull, 380714078514314ull}},
+{{6121772540389439179ull, 304571262811451ull}},
+{{2416138435139282040ull, 487314020498322ull}},
+{{13000957192337156602ull, 389851216398657ull}},
+{{3022068124385904635ull, 311880973118926ull}},
+{{15903355443243178386ull, 499009556990281ull}},
+{{9033335539852632385ull, 399207645592225ull}},
+{{7226668431882105908ull, 319366116473780ull}},
+{{11562669491011369453ull, 510985786358048ull}},
+{{16628833222292916209ull, 408788629086438ull}},
+{{2235020133608601997ull, 327030903269151ull}},
+{{14644078657999494166ull, 523249445230641ull}},
+{{8025914111657685009ull, 418599556184513ull}},
+{{13799428918809968654ull, 334879644947610ull}},
+{{3632342196386398230ull, 535807431916177ull}}
+};
+
+static const int exponents_binary80[] = { -65,
+ -62,
+ -59,
+ -55,
+ -52,
+ -49,
+ -45,
+ -42,
+ -39,
+ -35,
+ -32,
+ -29,
+ -25,
+ -22,
+ -19,
+ -15,
+ -12,
+ -9,
+ -6,
+ -2,
+ 1,
+ 4,
+ 8,
+ 11,
+ 14,
+ 18,
+ 21,
+ 24,
+ 28,
+ 31,
+ 34,
+ 38,
+ 41,
+ 44,
+ 48,
+ 51,
+ 54,
+ 58,
+ 61,
+ 64,
+ 68,
+ 71,
+ 74,
+ 78,
+ 81,
+ 84,
+ 87,
+ 91,
+ 94,
+ 97,
+ 101,
+ 104,
+ 107,
+ 111,
+ 114,
+ 117,
+ 121,
+ 124,
+ 127,
+ 131,
+ 134,
+ 137,
+ 141,
+ 144,
+ 147,
+ 151,
+ 154,
+ 157,
+ 161,
+ 164,
+ 167,
+ 171,
+ 174,
+ 177,
+ 181,
+ 184,
+ 187,
+ 190,
+ 194,
+ 197,
+ 200,
+ 204,
+ 207,
+ 210,
+ 214,
+ 217,
+ 220,
+ 224,
+ 227,
+ 230,
+ 234,
+ 237,
+ 240,
+ 244,
+ 247,
+ 250,
+ 254,
+ 257,
+ 260,
+ 264,
+ 267,
+ 270,
+ 274,
+ 277,
+ 280,
+ 283,
+ 287,
+ 290,
+ 293,
+ 297,
+ 300,
+ 303,
+ 307,
+ 310,
+ 313,
+ 317,
+ 320,
+ 323,
+ 327,
+ 330,
+ 333,
+ 337,
+ 340,
+ 343,
+ 347,
+ 350,
+ 353,
+ 357,
+ 360,
+ 363,
+ 367,
+ 370,
+ 373,
+ 377,
+ 380,
+ 383,
+ 386,
+ 390,
+ 393,
+ 396,
+ 400,
+ 403,
+ 406,
+ 410,
+ 413,
+ 416,
+ 420,
+ 423,
+ 426,
+ 430,
+ 433,
+ 436,
+ 440,
+ 443,
+ 446,
+ 450,
+ 453,
+ 456,
+ 460,
+ 463,
+ 466,
+ 470,
+ 473,
+ 476,
+ 479,
+ 483,
+ 486,
+ 489,
+ 493,
+ 496,
+ 499,
+ 503,
+ 506,
+ 509,
+ 513,
+ 516,
+ 519,
+ 523,
+ 526,
+ 529,
+ 533,
+ 536,
+ 539,
+ 543,
+ 546,
+ 549,
+ 553,
+ 556,
+ 559,
+ 563,
+ 566,
+ 569,
+ 572,
+ 576,
+ 579,
+ 582,
+ 586,
+ 589,
+ 592,
+ 596,
+ 599,
+ 602,
+ 606,
+ 609,
+ 612,
+ 616,
+ 619,
+ 622,
+ 626,
+ 629,
+ 632,
+ 636,
+ 639,
+ 642,
+ 646,
+ 649,
+ 652,
+ 656,
+ 659,
+ 662,
+ 666,
+ 669,
+ 672,
+ 675,
+ 679,
+ 682,
+ 685,
+ 689,
+ 692,
+ 695,
+ 699,
+ 702,
+ 705,
+ 709,
+ 712,
+ 715,
+ 719,
+ 722,
+ 725,
+ 729,
+ 732,
+ 735,
+ 739,
+ 742,
+ 745,
+ 749,
+ 752,
+ 755,
+ 759,
+ 762,
+ 765,
+ 768,
+ 772,
+ 775,
+ 778,
+ 782,
+ 785,
+ 788,
+ 792,
+ 795,
+ 798,
+ 802,
+ 805,
+ 808,
+ 812,
+ 815,
+ 818,
+ 822,
+ 825,
+ 828,
+ 832,
+ 835,
+ 838,
+ 842,
+ 845,
+ 848,
+ 852,
+ 855,
+ 858,
+ 862,
+ 865,
+ 868,
+ 871,
+ 875,
+ 878,
+ 881,
+ 885,
+ 888,
+ 891,
+ 895,
+ 898,
+ 901,
+ 905,
+ 908,
+ 911,
+ 915,
+ 918,
+ 921,
+ 925,
+ 928,
+ 931,
+ 935,
+ 938,
+ 941,
+ 945,
+ 948,
+ 951,
+ 955,
+ 958,
+ 961,
+ 964,
+ 968,
+ 971,
+ 974,
+ 978,
+ 981,
+ 984,
+ 988,
+ 991,
+ 994,
+ 998,
+ 1001,
+ 1004,
+ 1008,
+ 1011,
+ 1014,
+ 1018,
+ 1021,
+ 1024,
+ 1028,
+ 1031,
+ 1034,
+ 1038,
+ 1041,
+ 1044,
+ 1048,
+ 1051,
+ 1054,
+ 1058,
+ 1061,
+ 1064,
+ 1067,
+ 1071,
+ 1074,
+ 1077,
+ 1081,
+ 1084,
+ 1087,
+ 1091,
+ 1094,
+ 1097,
+ 1101,
+ 1104,
+ 1107,
+ 1111,
+ 1114,
+ 1117,
+ 1121,
+ 1124,
+ 1127,
+ 1131,
+ 1134,
+ 1137,
+ 1141,
+ 1144,
+ 1147,
+ 1151,
+ 1154,
+ 1157,
+ 1160,
+ 1164,
+ 1167,
+ 1170,
+ 1174,
+ 1177,
+ 1180,
+ 1184,
+ 1187,
+ 1190,
+ 1194,
+ 1197,
+ 1200,
+ 1204,
+ 1207,
+ 1210,
+ 1214,
+ 1217,
+ 1220,
+ 1224,
+ 1227,
+ 1230,
+ 1234,
+ 1237,
+ 1240,
+ 1244,
+ 1247,
+ 1250,
+ 1253,
+ 1257,
+ 1260,
+ 1263,
+ 1267,
+ 1270,
+ 1273,
+ 1277,
+ 1280,
+ 1283,
+ 1287,
+ 1290,
+ 1293,
+ 1297,
+ 1300,
+ 1303,
+ 1307,
+ 1310,
+ 1313,
+ 1317,
+ 1320,
+ 1323,
+ 1327,
+ 1330,
+ 1333,
+ 1337,
+ 1340,
+ 1343,
+ 1347,
+ 1350,
+ 1353,
+ 1356,
+ 1360,
+ 1363,
+ 1366,
+ 1370,
+ 1373,
+ 1376,
+ 1380,
+ 1383,
+ 1386,
+ 1390,
+ 1393,
+ 1396,
+ 1400,
+ 1403,
+ 1406,
+ 1410,
+ 1413,
+ 1416,
+ 1420,
+ 1423,
+ 1426,
+ 1430,
+ 1433,
+ 1436,
+ 1440,
+ 1443,
+ 1446,
+ 1449,
+ 1453,
+ 1456,
+ 1459,
+ 1463,
+ 1466,
+ 1469,
+ 1473,
+ 1476,
+ 1479,
+ 1483,
+ 1486,
+ 1489,
+ 1493,
+ 1496,
+ 1499,
+ 1503,
+ 1506,
+ 1509,
+ 1513,
+ 1516,
+ 1519,
+ 1523,
+ 1526,
+ 1529,
+ 1533,
+ 1536,
+ 1539,
+ 1543,
+ 1546,
+ 1549,
+ 1552,
+ 1556,
+ 1559,
+ 1562,
+ 1566,
+ 1569,
+ 1572,
+ 1576,
+ 1579,
+ 1582,
+ 1586,
+ 1589,
+ 1592,
+ 1596,
+ 1599,
+ 1602,
+ 1606,
+ 1609,
+ 1612,
+ 1616,
+ 1619,
+ 1622,
+ 1626,
+ 1629,
+ 1632,
+ 1636,
+ 1639,
+ 1642,
+ 1645,
+ 1649,
+ 1652,
+ 1655,
+ 1659,
+ 1662,
+ 1665,
+ 1669,
+ 1672,
+ 1675,
+ 1679,
+ 1682,
+ 1685,
+ 1689,
+ 1692,
+ 1695,
+ 1699,
+ 1702,
+ 1705,
+ 1709,
+ 1712,
+ 1715,
+ 1719,
+ 1722,
+ 1725,
+ 1729,
+ 1732,
+ 1735,
+ 1738,
+ 1742,
+ 1745,
+ 1748,
+ 1752,
+ 1755,
+ 1758,
+ 1762,
+ 1765,
+ 1768,
+ 1772,
+ 1775,
+ 1778,
+ 1782,
+ 1785,
+ 1788,
+ 1792,
+ 1795,
+ 1798,
+ 1802,
+ 1805,
+ 1808,
+ 1812,
+ 1815,
+ 1818,
+ 1822,
+ 1825,
+ 1828,
+ 1832,
+ 1835,
+ 1838,
+ 1841,
+ 1845,
+ 1848,
+ 1851,
+ 1855,
+ 1858,
+ 1861,
+ 1865,
+ 1868,
+ 1871,
+ 1875,
+ 1878,
+ 1881,
+ 1885,
+ 1888,
+ 1891,
+ 1895,
+ 1898,
+ 1901,
+ 1905,
+ 1908,
+ 1911,
+ 1915,
+ 1918,
+ 1921,
+ 1925,
+ 1928,
+ 1931,
+ 1934,
+ 1938,
+ 1941,
+ 1944,
+ 1948,
+ 1951,
+ 1954,
+ 1958,
+ 1961,
+ 1964,
+ 1968,
+ 1971,
+ 1974,
+ 1978,
+ 1981,
+ 1984,
+ 1988,
+ 1991,
+ 1994,
+ 1998,
+ 2001,
+ 2004,
+ 2008,
+ 2011,
+ 2014,
+ 2018,
+ 2021,
+ 2024,
+ 2028,
+ 2031,
+ 2034,
+ 2037,
+ 2041,
+ 2044,
+ 2047,
+ 2051,
+ 2054,
+ 2057,
+ 2061,
+ 2064,
+ 2067,
+ 2071,
+ 2074,
+ 2077,
+ 2081,
+ 2084,
+ 2087,
+ 2091,
+ 2094,
+ 2097,
+ 2101,
+ 2104,
+ 2107,
+ 2111,
+ 2114,
+ 2117,
+ 2121,
+ 2124,
+ 2127,
+ 2130,
+ 2134,
+ 2137,
+ 2140,
+ 2144,
+ 2147,
+ 2150,
+ 2154,
+ 2157,
+ 2160,
+ 2164,
+ 2167,
+ 2170,
+ 2174,
+ 2177,
+ 2180,
+ 2184,
+ 2187,
+ 2190,
+ 2194,
+ 2197,
+ 2200,
+ 2204,
+ 2207,
+ 2210,
+ 2214,
+ 2217,
+ 2220,
+ 2223,
+ 2227,
+ 2230,
+ 2233,
+ 2237,
+ 2240,
+ 2243,
+ 2247,
+ 2250,
+ 2253,
+ 2257,
+ 2260,
+ 2263,
+ 2267,
+ 2270,
+ 2273,
+ 2277,
+ 2280,
+ 2283,
+ 2287,
+ 2290,
+ 2293,
+ 2297,
+ 2300,
+ 2303,
+ 2307,
+ 2310,
+ 2313,
+ 2317,
+ 2320,
+ 2323,
+ 2326,
+ 2330,
+ 2333,
+ 2336,
+ 2340,
+ 2343,
+ 2346,
+ 2350,
+ 2353,
+ 2356,
+ 2360,
+ 2363,
+ 2366,
+ 2370,
+ 2373,
+ 2376,
+ 2380,
+ 2383,
+ 2386,
+ 2390,
+ 2393,
+ 2396,
+ 2400,
+ 2403,
+ 2406,
+ 2410,
+ 2413,
+ 2416,
+ 2419,
+ 2423,
+ 2426,
+ 2429,
+ 2433,
+ 2436,
+ 2439,
+ 2443,
+ 2446,
+ 2449,
+ 2453,
+ 2456,
+ 2459,
+ 2463,
+ 2466,
+ 2469,
+ 2473,
+ 2476,
+ 2479,
+ 2483,
+ 2486,
+ 2489,
+ 2493,
+ 2496,
+ 2499,
+ 2503,
+ 2506,
+ 2509,
+ 2513,
+ 2516,
+ 2519,
+ 2522,
+ 2526,
+ 2529,
+ 2532,
+ 2536,
+ 2539,
+ 2542,
+ 2546,
+ 2549,
+ 2552,
+ 2556,
+ 2559,
+ 2562,
+ 2566,
+ 2569,
+ 2572,
+ 2576,
+ 2579,
+ 2582,
+ 2586,
+ 2589,
+ 2592,
+ 2596,
+ 2599,
+ 2602,
+ 2606,
+ 2609,
+ 2612,
+ 2615,
+ 2619,
+ 2622,
+ 2625,
+ 2629,
+ 2632,
+ 2635,
+ 2639,
+ 2642,
+ 2645,
+ 2649,
+ 2652,
+ 2655,
+ 2659,
+ 2662,
+ 2665,
+ 2669,
+ 2672,
+ 2675,
+ 2679,
+ 2682,
+ 2685,
+ 2689,
+ 2692,
+ 2695,
+ 2699,
+ 2702,
+ 2705,
+ 2708,
+ 2712,
+ 2715,
+ 2718,
+ 2722,
+ 2725,
+ 2728,
+ 2732,
+ 2735,
+ 2738,
+ 2742,
+ 2745,
+ 2748,
+ 2752,
+ 2755,
+ 2758,
+ 2762,
+ 2765,
+ 2768,
+ 2772,
+ 2775,
+ 2778,
+ 2782,
+ 2785,
+ 2788,
+ 2792,
+ 2795,
+ 2798,
+ 2802,
+ 2805,
+ 2808,
+ 2811,
+ 2815,
+ 2818,
+ 2821,
+ 2825,
+ 2828,
+ 2831,
+ 2835,
+ 2838,
+ 2841,
+ 2845,
+ 2848,
+ 2851,
+ 2855,
+ 2858,
+ 2861,
+ 2865,
+ 2868,
+ 2871,
+ 2875,
+ 2878,
+ 2881,
+ 2885,
+ 2888,
+ 2891,
+ 2895,
+ 2898,
+ 2901,
+ 2904,
+ 2908,
+ 2911,
+ 2914,
+ 2918,
+ 2921,
+ 2924,
+ 2928,
+ 2931,
+ 2934,
+ 2938,
+ 2941,
+ 2944,
+ 2948,
+ 2951,
+ 2954,
+ 2958,
+ 2961,
+ 2964,
+ 2968,
+ 2971,
+ 2974,
+ 2978,
+ 2981,
+ 2984,
+ 2988,
+ 2991,
+ 2994,
+ 2998,
+ 3001,
+ 3004,
+ 3007,
+ 3011,
+ 3014,
+ 3017,
+ 3021,
+ 3024,
+ 3027,
+ 3031,
+ 3034,
+ 3037,
+ 3041,
+ 3044,
+ 3047,
+ 3051,
+ 3054,
+ 3057,
+ 3061,
+ 3064,
+ 3067,
+ 3071,
+ 3074,
+ 3077,
+ 3081,
+ 3084,
+ 3087,
+ 3091,
+ 3094,
+ 3097,
+ 3100,
+ 3104,
+ 3107,
+ 3110,
+ 3114,
+ 3117,
+ 3120,
+ 3124,
+ 3127,
+ 3130,
+ 3134,
+ 3137,
+ 3140,
+ 3144,
+ 3147,
+ 3150,
+ 3154,
+ 3157,
+ 3160,
+ 3164,
+ 3167,
+ 3170,
+ 3174,
+ 3177,
+ 3180,
+ 3184,
+ 3187,
+ 3190,
+ 3193,
+ 3197,
+ 3200,
+ 3203,
+ 3207,
+ 3210,
+ 3213,
+ 3217,
+ 3220,
+ 3223,
+ 3227,
+ 3230,
+ 3233,
+ 3237,
+ 3240,
+ 3243,
+ 3247,
+ 3250,
+ 3253,
+ 3257,
+ 3260,
+ 3263,
+ 3267,
+ 3270,
+ 3273,
+ 3277,
+ 3280,
+ 3283,
+ 3287,
+ 3290,
+ 3293,
+ 3296,
+ 3300,
+ 3303,
+ 3306,
+ 3310,
+ 3313,
+ 3316,
+ 3320,
+ 3323,
+ 3326,
+ 3330,
+ 3333,
+ 3336,
+ 3340,
+ 3343,
+ 3346,
+ 3350,
+ 3353,
+ 3356,
+ 3360,
+ 3363,
+ 3366,
+ 3370,
+ 3373,
+ 3376,
+ 3380,
+ 3383,
+ 3386,
+ 3389,
+ 3393,
+ 3396,
+ 3399,
+ 3403,
+ 3406,
+ 3409,
+ 3413,
+ 3416,
+ 3419,
+ 3423,
+ 3426,
+ 3429,
+ 3433,
+ 3436,
+ 3439,
+ 3443,
+ 3446,
+ 3449,
+ 3453,
+ 3456,
+ 3459,
+ 3463,
+ 3466,
+ 3469,
+ 3473,
+ 3476,
+ 3479,
+ 3483,
+ 3486,
+ 3489,
+ 3492,
+ 3496,
+ 3499,
+ 3502,
+ 3506,
+ 3509,
+ 3512,
+ 3516,
+ 3519,
+ 3522,
+ 3526,
+ 3529,
+ 3532,
+ 3536,
+ 3539,
+ 3542,
+ 3546,
+ 3549,
+ 3552,
+ 3556,
+ 3559,
+ 3562,
+ 3566,
+ 3569,
+ 3572,
+ 3576,
+ 3579,
+ 3582,
+ 3585,
+ 3589,
+ 3592,
+ 3595,
+ 3599,
+ 3602,
+ 3605,
+ 3609,
+ 3612,
+ 3615,
+ 3619,
+ 3622,
+ 3625,
+ 3629,
+ 3632,
+ 3635,
+ 3639,
+ 3642,
+ 3645,
+ 3649,
+ 3652,
+ 3655,
+ 3659,
+ 3662,
+ 3665,
+ 3669,
+ 3672,
+ 3675,
+ 3679,
+ 3682,
+ 3685,
+ 3688,
+ 3692,
+ 3695,
+ 3698,
+ 3702,
+ 3705,
+ 3708,
+ 3712,
+ 3715,
+ 3718,
+ 3722,
+ 3725,
+ 3728,
+ 3732,
+ 3735,
+ 3738,
+ 3742,
+ 3745,
+ 3748,
+ 3752,
+ 3755,
+ 3758,
+ 3762,
+ 3765,
+ 3768,
+ 3772,
+ 3775,
+ 3778,
+ 3781,
+ 3785,
+ 3788,
+ 3791,
+ 3795,
+ 3798,
+ 3801,
+ 3805,
+ 3808,
+ 3811,
+ 3815,
+ 3818,
+ 3821,
+ 3825,
+ 3828,
+ 3831,
+ 3835,
+ 3838,
+ 3841,
+ 3845,
+ 3848,
+ 3851,
+ 3855,
+ 3858,
+ 3861,
+ 3865,
+ 3868,
+ 3871,
+ 3874,
+ 3878,
+ 3881,
+ 3884,
+ 3888,
+ 3891,
+ 3894,
+ 3898,
+ 3901,
+ 3904,
+ 3908,
+ 3911,
+ 3914,
+ 3918,
+ 3921,
+ 3924,
+ 3928,
+ 3931,
+ 3934,
+ 3938,
+ 3941,
+ 3944,
+ 3948,
+ 3951,
+ 3954,
+ 3958,
+ 3961,
+ 3964,
+ 3968,
+ 3971,
+ 3974,
+ 3977,
+ 3981,
+ 3984,
+ 3987,
+ 3991,
+ 3994,
+ 3997,
+ 4001,
+ 4004,
+ 4007,
+ 4011,
+ 4014,
+ 4017,
+ 4021,
+ 4024,
+ 4027,
+ 4031,
+ 4034,
+ 4037,
+ 4041,
+ 4044,
+ 4047,
+ 4051,
+ 4054,
+ 4057,
+ 4061,
+ 4064,
+ 4067,
+ 4070,
+ 4074,
+ 4077,
+ 4080,
+ 4084,
+ 4087,
+ 4090,
+ 4094,
+ 4097,
+ 4100,
+ 4104,
+ 4107,
+ 4110,
+ 4114,
+ 4117,
+ 4120,
+ 4124,
+ 4127,
+ 4130,
+ 4134,
+ 4137,
+ 4140,
+ 4144,
+ 4147,
+ 4150,
+ 4154,
+ 4157,
+ 4160,
+ 4164,
+ 4167,
+ 4170,
+ 4173,
+ 4177,
+ 4180,
+ 4183,
+ 4187,
+ 4190,
+ 4193,
+ 4197,
+ 4200,
+ 4203,
+ 4207,
+ 4210,
+ 4213,
+ 4217,
+ 4220,
+ 4223,
+ 4227,
+ 4230,
+ 4233,
+ 4237,
+ 4240,
+ 4243,
+ 4247,
+ 4250,
+ 4253,
+ 4257,
+ 4260,
+ 4263,
+ 4266,
+ 4270,
+ 4273,
+ 4276,
+ 4280,
+ 4283,
+ 4286,
+ 4290,
+ 4293,
+ 4296,
+ 4300,
+ 4303,
+ 4306,
+ 4310,
+ 4313,
+ 4316,
+ 4320,
+ 4323,
+ 4326,
+ 4330,
+ 4333,
+ 4336,
+ 4340,
+ 4343,
+ 4346,
+ 4350,
+ 4353,
+ 4356,
+ 4359,
+ 4363,
+ 4366,
+ 4369,
+ 4373,
+ 4376,
+ 4379,
+ 4383,
+ 4386,
+ 4389,
+ 4393,
+ 4396,
+ 4399,
+ 4403,
+ 4406,
+ 4409,
+ 4413,
+ 4416,
+ 4419,
+ 4423,
+ 4426,
+ 4429,
+ 4433,
+ 4436,
+ 4439,
+ 4443,
+ 4446,
+ 4449,
+ 4453,
+ 4456,
+ 4459,
+ 4462,
+ 4466,
+ 4469,
+ 4472,
+ 4476,
+ 4479,
+ 4482,
+ 4486,
+ 4489,
+ 4492,
+ 4496,
+ 4499,
+ 4502,
+ 4506,
+ 4509,
+ 4512,
+ 4516,
+ 4519,
+ 4522,
+ 4526,
+ 4529,
+ 4532,
+ 4536,
+ 4539,
+ 4542,
+ 4546,
+ 4549,
+ 4552,
+ 4555,
+ 4559,
+ 4562,
+ 4565,
+ 4569,
+ 4572,
+ 4575,
+ 4579,
+ 4582,
+ 4585,
+ 4589,
+ 4592,
+ 4595,
+ 4599,
+ 4602,
+ 4605,
+ 4609,
+ 4612,
+ 4615,
+ 4619,
+ 4622,
+ 4625,
+ 4629,
+ 4632,
+ 4635,
+ 4639,
+ 4642,
+ 4645,
+ 4649,
+ 4652,
+ 4655,
+ 4658,
+ 4662,
+ 4665,
+ 4668,
+ 4672,
+ 4675,
+ 4678,
+ 4682,
+ 4685,
+ 4688,
+ 4692,
+ 4695,
+ 4698,
+ 4702,
+ 4705,
+ 4708,
+ 4712,
+ 4715,
+ 4718,
+ 4722,
+ 4725,
+ 4728,
+ 4732,
+ 4735,
+ 4738,
+ 4742,
+ 4745,
+ 4748,
+ 4751,
+ 4755,
+ 4758,
+ 4761,
+ 4765,
+ 4768,
+ 4771,
+ 4775,
+ 4778,
+ 4781,
+ 4785,
+ 4788,
+ 4791,
+ 4795,
+ 4798,
+ 4801,
+ 4805,
+ 4808,
+ 4811,
+ 4815,
+ 4818,
+ 4821,
+ 4825,
+ 4828,
+ 4831,
+ 4835,
+ 4838,
+ 4841,
+ 4844,
+ 4848,
+ 4851,
+ 4854,
+ 4858,
+ 4861,
+ 4864,
+ 4868,
+ 4871,
+ 4874,
+ 4878,
+ 4881,
+ 4884,
+ 4888,
+ 4891,
+ 4894,
+ 4898,
+ 4901,
+ 4904,
+ 4908,
+ 4911,
+ 4914,
+ 4918,
+ 4921,
+ 4924,
+ 4928,
+ 4931,
+ 4934,
+ 4938,
+ 4941,
+ 4944,
+ 4947,
+ 4951,
+ 4954,
+ 4957,
+ 4961,
+ 4964,
+ 4967,
+ 4971,
+ 4974,
+ 4977,
+ 4981,
+ 4984,
+ 4987,
+ 4991,
+ 4994,
+ 4997,
+ 5001,
+ 5004,
+ 5007,
+ 5011,
+ 5014,
+ 5017,
+ 5021,
+ 5024,
+ 5027,
+ 5031,
+ 5034,
+ 5037,
+ 5040,
+ 5044,
+ 5047,
+ 5050,
+ 5054,
+ 5057,
+ 5060,
+ 5064,
+ 5067,
+ 5070,
+ 5074,
+ 5077,
+ 5080,
+ 5084,
+ 5087,
+ 5090,
+ 5094,
+ 5097,
+ 5100,
+ 5104,
+ 5107,
+ 5110,
+ 5114,
+ 5117,
+ 5120,
+ 5124,
+ 5127,
+ 5130,
+ 5134,
+ 5137,
+ 5140,
+ 5143,
+ 5147,
+ 5150,
+ 5153,
+ 5157,
+ 5160,
+ 5163,
+ 5167,
+ 5170,
+ 5173,
+ 5177,
+ 5180,
+ 5183,
+ 5187,
+ 5190,
+ 5193,
+ 5197,
+ 5200,
+ 5203,
+ 5207,
+ 5210,
+ 5213,
+ 5217,
+ 5220,
+ 5223,
+ 5227,
+ 5230,
+ 5233,
+ 5236,
+ 5240,
+ 5243,
+ 5246,
+ 5250,
+ 5253,
+ 5256,
+ 5260,
+ 5263,
+ 5266,
+ 5270,
+ 5273,
+ 5276,
+ 5280,
+ 5283,
+ 5286,
+ 5290,
+ 5293,
+ 5296,
+ 5300,
+ 5303,
+ 5306,
+ 5310,
+ 5313,
+ 5316,
+ 5320,
+ 5323,
+ 5326,
+ 5329,
+ 5333,
+ 5336,
+ 5339,
+ 5343,
+ 5346,
+ 5349,
+ 5353,
+ 5356,
+ 5359,
+ 5363,
+ 5366,
+ 5369,
+ 5373,
+ 5376,
+ 5379,
+ 5383,
+ 5386,
+ 5389,
+ 5393,
+ 5396,
+ 5399,
+ 5403,
+ 5406,
+ 5409,
+ 5413,
+ 5416,
+ 5419,
+ 5423,
+ 5426,
+ 5429,
+ 5432,
+ 5436,
+ 5439,
+ 5442,
+ 5446,
+ 5449,
+ 5452,
+ 5456,
+ 5459,
+ 5462,
+ 5466,
+ 5469,
+ 5472,
+ 5476,
+ 5479,
+ 5482,
+ 5486,
+ 5489,
+ 5492,
+ 5496,
+ 5499,
+ 5502,
+ 5506,
+ 5509,
+ 5512,
+ 5516,
+ 5519,
+ 5522,
+ 5525,
+ 5529,
+ 5532,
+ 5535,
+ 5539,
+ 5542,
+ 5545,
+ 5549,
+ 5552,
+ 5555,
+ 5559,
+ 5562,
+ 5565,
+ 5569,
+ 5572,
+ 5575,
+ 5579,
+ 5582,
+ 5585,
+ 5589,
+ 5592,
+ 5595,
+ 5599,
+ 5602,
+ 5605,
+ 5609,
+ 5612,
+ 5615,
+ 5619,
+ 5622,
+ 5625,
+ 5628,
+ 5632,
+ 5635,
+ 5638,
+ 5642,
+ 5645,
+ 5648,
+ 5652,
+ 5655,
+ 5658,
+ 5662,
+ 5665,
+ 5668,
+ 5672,
+ 5675,
+ 5678,
+ 5682,
+ 5685,
+ 5688,
+ 5692,
+ 5695,
+ 5698,
+ 5702,
+ 5705,
+ 5708,
+ 5712,
+ 5715,
+ 5718,
+ 5721,
+ 5725,
+ 5728,
+ 5731,
+ 5735,
+ 5738,
+ 5741,
+ 5745,
+ 5748,
+ 5751,
+ 5755,
+ 5758,
+ 5761,
+ 5765,
+ 5768,
+ 5771,
+ 5775,
+ 5778,
+ 5781,
+ 5785,
+ 5788,
+ 5791,
+ 5795,
+ 5798,
+ 5801,
+ 5805,
+ 5808,
+ 5811,
+ 5815,
+ 5818,
+ 5821,
+ 5824,
+ 5828,
+ 5831,
+ 5834,
+ 5838,
+ 5841,
+ 5844,
+ 5848,
+ 5851,
+ 5854,
+ 5858,
+ 5861,
+ 5864,
+ 5868,
+ 5871,
+ 5874,
+ 5878,
+ 5881,
+ 5884,
+ 5888,
+ 5891,
+ 5894,
+ 5898,
+ 5901,
+ 5904,
+ 5908,
+ 5911,
+ 5914,
+ 5917,
+ 5921,
+ 5924,
+ 5927,
+ 5931,
+ 5934,
+ 5937,
+ 5941,
+ 5944,
+ 5947,
+ 5951,
+ 5954,
+ 5957,
+ 5961,
+ 5964,
+ 5967,
+ 5971,
+ 5974,
+ 5977,
+ 5981,
+ 5984,
+ 5987,
+ 5991,
+ 5994,
+ 5997,
+ 6001,
+ 6004,
+ 6007,
+ 6010,
+ 6014,
+ 6017,
+ 6020,
+ 6024,
+ 6027,
+ 6030,
+ 6034,
+ 6037,
+ 6040,
+ 6044,
+ 6047,
+ 6050,
+ 6054,
+ 6057,
+ 6060,
+ 6064,
+ 6067,
+ 6070,
+ 6074,
+ 6077,
+ 6080,
+ 6084,
+ 6087,
+ 6090,
+ 6094,
+ 6097,
+ 6100,
+ 6104,
+ 6107,
+ 6110,
+ 6113,
+ 6117,
+ 6120,
+ 6123,
+ 6127,
+ 6130,
+ 6133,
+ 6137,
+ 6140,
+ 6143,
+ 6147,
+ 6150,
+ 6153,
+ 6157,
+ 6160,
+ 6163,
+ 6167,
+ 6170,
+ 6173,
+ 6177,
+ 6180,
+ 6183,
+ 6187,
+ 6190,
+ 6193,
+ 6197,
+ 6200,
+ 6203,
+ 6206,
+ 6210,
+ 6213,
+ 6216,
+ 6220,
+ 6223,
+ 6226,
+ 6230,
+ 6233,
+ 6236,
+ 6240,
+ 6243,
+ 6246,
+ 6250,
+ 6253,
+ 6256,
+ 6260,
+ 6263,
+ 6266,
+ 6270,
+ 6273,
+ 6276,
+ 6280,
+ 6283,
+ 6286,
+ 6290,
+ 6293,
+ 6296,
+ 6300,
+ 6303,
+ 6306,
+ 6309,
+ 6313,
+ 6316,
+ 6319,
+ 6323,
+ 6326,
+ 6329,
+ 6333,
+ 6336,
+ 6339,
+ 6343,
+ 6346,
+ 6349,
+ 6353,
+ 6356,
+ 6359,
+ 6363,
+ 6366,
+ 6369,
+ 6373,
+ 6376,
+ 6379,
+ 6383,
+ 6386,
+ 6389,
+ 6393,
+ 6396,
+ 6399,
+ 6402,
+ 6406,
+ 6409,
+ 6412,
+ 6416,
+ 6419,
+ 6422,
+ 6426,
+ 6429,
+ 6432,
+ 6436,
+ 6439,
+ 6442,
+ 6446,
+ 6449,
+ 6452,
+ 6456,
+ 6459,
+ 6462,
+ 6466,
+ 6469,
+ 6472,
+ 6476,
+ 6479,
+ 6482,
+ 6486,
+ 6489,
+ 6492,
+ 6495,
+ 6499,
+ 6502,
+ 6505,
+ 6509,
+ 6512,
+ 6515,
+ 6519,
+ 6522,
+ 6525,
+ 6529,
+ 6532,
+ 6535,
+ 6539,
+ 6542,
+ 6545,
+ 6549,
+ 6552,
+ 6555,
+ 6559,
+ 6562,
+ 6565,
+ 6569,
+ 6572,
+ 6575,
+ 6579,
+ 6582,
+ 6585,
+ 6589,
+ 6592,
+ 6595,
+ 6598,
+ 6602,
+ 6605,
+ 6608,
+ 6612,
+ 6615,
+ 6618,
+ 6622,
+ 6625,
+ 6628,
+ 6632,
+ 6635,
+ 6638,
+ 6642,
+ 6645,
+ 6648,
+ 6652,
+ 6655,
+ 6658,
+ 6662,
+ 6665,
+ 6668,
+ 6672,
+ 6675,
+ 6678,
+ 6682,
+ 6685,
+ 6688,
+ 6691,
+ 6695,
+ 6698,
+ 6701,
+ 6705,
+ 6708,
+ 6711,
+ 6715,
+ 6718,
+ 6721,
+ 6725,
+ 6728,
+ 6731,
+ 6735,
+ 6738,
+ 6741,
+ 6745,
+ 6748,
+ 6751,
+ 6755,
+ 6758,
+ 6761,
+ 6765,
+ 6768,
+ 6771,
+ 6775,
+ 6778,
+ 6781,
+ 6785,
+ 6788,
+ 6791,
+ 6794,
+ 6798,
+ 6801,
+ 6804,
+ 6808,
+ 6811,
+ 6814,
+ 6818,
+ 6821,
+ 6824,
+ 6828,
+ 6831,
+ 6834,
+ 6838,
+ 6841,
+ 6844,
+ 6848,
+ 6851,
+ 6854,
+ 6858,
+ 6861,
+ 6864,
+ 6868,
+ 6871,
+ 6874,
+ 6878,
+ 6881,
+ 6884,
+ 6887,
+ 6891,
+ 6894,
+ 6897,
+ 6901,
+ 6904,
+ 6907,
+ 6911,
+ 6914,
+ 6917,
+ 6921,
+ 6924,
+ 6927,
+ 6931,
+ 6934,
+ 6937,
+ 6941,
+ 6944,
+ 6947,
+ 6951,
+ 6954,
+ 6957,
+ 6961,
+ 6964,
+ 6967,
+ 6971,
+ 6974,
+ 6977,
+ 6980,
+ 6984,
+ 6987,
+ 6990,
+ 6994,
+ 6997,
+ 7000,
+ 7004,
+ 7007,
+ 7010,
+ 7014,
+ 7017,
+ 7020,
+ 7024,
+ 7027,
+ 7030,
+ 7034,
+ 7037,
+ 7040,
+ 7044,
+ 7047,
+ 7050,
+ 7054,
+ 7057,
+ 7060,
+ 7064,
+ 7067,
+ 7070,
+ 7074,
+ 7077,
+ 7080,
+ 7083,
+ 7087,
+ 7090,
+ 7093,
+ 7097,
+ 7100,
+ 7103,
+ 7107,
+ 7110,
+ 7113,
+ 7117,
+ 7120,
+ 7123,
+ 7127,
+ 7130,
+ 7133,
+ 7137,
+ 7140,
+ 7143,
+ 7147,
+ 7150,
+ 7153,
+ 7157,
+ 7160,
+ 7163,
+ 7167,
+ 7170,
+ 7173,
+ 7176,
+ 7180,
+ 7183,
+ 7186,
+ 7190,
+ 7193,
+ 7196,
+ 7200,
+ 7203,
+ 7206,
+ 7210,
+ 7213,
+ 7216,
+ 7220,
+ 7223,
+ 7226,
+ 7230,
+ 7233,
+ 7236,
+ 7240,
+ 7243,
+ 7246,
+ 7250,
+ 7253,
+ 7256,
+ 7260,
+ 7263,
+ 7266,
+ 7270,
+ 7273,
+ 7276,
+ 7279,
+ 7283,
+ 7286,
+ 7289,
+ 7293,
+ 7296,
+ 7299,
+ 7303,
+ 7306,
+ 7309,
+ 7313,
+ 7316,
+ 7319,
+ 7323,
+ 7326,
+ 7329,
+ 7333,
+ 7336,
+ 7339,
+ 7343,
+ 7346,
+ 7349,
+ 7353,
+ 7356,
+ 7359,
+ 7363,
+ 7366,
+ 7369,
+ 7372,
+ 7376,
+ 7379,
+ 7382,
+ 7386,
+ 7389,
+ 7392,
+ 7396,
+ 7399,
+ 7402,
+ 7406,
+ 7409,
+ 7412,
+ 7416,
+ 7419,
+ 7422,
+ 7426,
+ 7429,
+ 7432,
+ 7436,
+ 7439,
+ 7442,
+ 7446,
+ 7449,
+ 7452,
+ 7456,
+ 7459,
+ 7462,
+ 7465,
+ 7469,
+ 7472,
+ 7475,
+ 7479,
+ 7482,
+ 7485,
+ 7489,
+ 7492,
+ 7495,
+ 7499,
+ 7502,
+ 7505,
+ 7509,
+ 7512,
+ 7515,
+ 7519,
+ 7522,
+ 7525,
+ 7529,
+ 7532,
+ 7535,
+ 7539,
+ 7542,
+ 7545,
+ 7549,
+ 7552,
+ 7555,
+ 7559,
+ 7562,
+ 7565,
+ 7568,
+ 7572,
+ 7575,
+ 7578,
+ 7582,
+ 7585,
+ 7588,
+ 7592,
+ 7595,
+ 7598,
+ 7602,
+ 7605,
+ 7608,
+ 7612,
+ 7615,
+ 7618,
+ 7622,
+ 7625,
+ 7628,
+ 7632,
+ 7635,
+ 7638,
+ 7642,
+ 7645,
+ 7648,
+ 7652,
+ 7655,
+ 7658,
+ 7661,
+ 7665,
+ 7668,
+ 7671,
+ 7675,
+ 7678,
+ 7681,
+ 7685,
+ 7688,
+ 7691,
+ 7695,
+ 7698,
+ 7701,
+ 7705,
+ 7708,
+ 7711,
+ 7715,
+ 7718,
+ 7721,
+ 7725,
+ 7728,
+ 7731,
+ 7735,
+ 7738,
+ 7741,
+ 7745,
+ 7748,
+ 7751,
+ 7755,
+ 7758,
+ 7761,
+ 7764,
+ 7768,
+ 7771,
+ 7774,
+ 7778,
+ 7781,
+ 7784,
+ 7788,
+ 7791,
+ 7794,
+ 7798,
+ 7801,
+ 7804,
+ 7808,
+ 7811,
+ 7814,
+ 7818,
+ 7821,
+ 7824,
+ 7828,
+ 7831,
+ 7834,
+ 7838,
+ 7841,
+ 7844,
+ 7848,
+ 7851,
+ 7854,
+ 7857,
+ 7861,
+ 7864,
+ 7867,
+ 7871,
+ 7874,
+ 7877,
+ 7881,
+ 7884,
+ 7887,
+ 7891,
+ 7894,
+ 7897,
+ 7901,
+ 7904,
+ 7907,
+ 7911,
+ 7914,
+ 7917,
+ 7921,
+ 7924,
+ 7927,
+ 7931,
+ 7934,
+ 7937,
+ 7941,
+ 7944,
+ 7947,
+ 7951,
+ 7954,
+ 7957,
+ 7960,
+ 7964,
+ 7967,
+ 7970,
+ 7974,
+ 7977,
+ 7980,
+ 7984,
+ 7987,
+ 7990,
+ 7994,
+ 7997,
+ 8000,
+ 8004,
+ 8007,
+ 8010,
+ 8014,
+ 8017,
+ 8020,
+ 8024,
+ 8027,
+ 8030,
+ 8034,
+ 8037,
+ 8040,
+ 8044,
+ 8047,
+ 8050,
+ 8053,
+ 8057,
+ 8060,
+ 8063,
+ 8067,
+ 8070,
+ 8073,
+ 8077,
+ 8080,
+ 8083,
+ 8087,
+ 8090,
+ 8093,
+ 8097,
+ 8100,
+ 8103,
+ 8107,
+ 8110,
+ 8113,
+ 8117,
+ 8120,
+ 8123,
+ 8127,
+ 8130,
+ 8133,
+ 8137,
+ 8140,
+ 8143,
+ 8146,
+ 8150,
+ 8153,
+ 8156,
+ 8160,
+ 8163,
+ 8166,
+ 8170,
+ 8173,
+ 8176,
+ 8180,
+ 8183,
+ 8186,
+ 8190,
+ 8193,
+ 8196,
+ 8200,
+ 8203,
+ 8206,
+ 8210,
+ 8213,
+ 8216,
+ 8220,
+ 8223,
+ 8226,
+ 8230,
+ 8233,
+ 8236,
+ 8240,
+ 8243,
+ 8246,
+ 8249,
+ 8253,
+ 8256,
+ 8259,
+ 8263,
+ 8266,
+ 8269,
+ 8273,
+ 8276,
+ 8279,
+ 8283,
+ 8286,
+ 8289,
+ 8293,
+ 8296,
+ 8299,
+ 8303,
+ 8306,
+ 8309,
+ 8313,
+ 8316,
+ 8319,
+ 8323,
+ 8326,
+ 8329,
+ 8333,
+ 8336,
+ 8339,
+ 8342,
+ 8346,
+ 8349,
+ 8352,
+ 8356,
+ 8359,
+ 8362,
+ 8366,
+ 8369,
+ 8372,
+ 8376,
+ 8379,
+ 8382,
+ 8386,
+ 8389,
+ 8392,
+ 8396,
+ 8399,
+ 8402,
+ 8406,
+ 8409,
+ 8412,
+ 8416,
+ 8419,
+ 8422,
+ 8426,
+ 8429,
+ 8432,
+ 8436,
+ 8439,
+ 8442,
+ 8445,
+ 8449,
+ 8452,
+ 8455,
+ 8459,
+ 8462,
+ 8465,
+ 8469,
+ 8472,
+ 8475,
+ 8479,
+ 8482,
+ 8485,
+ 8489,
+ 8492,
+ 8495,
+ 8499,
+ 8502,
+ 8505,
+ 8509,
+ 8512,
+ 8515,
+ 8519,
+ 8522,
+ 8525,
+ 8529,
+ 8532,
+ 8535,
+ 8538,
+ 8542,
+ 8545,
+ 8548,
+ 8552,
+ 8555,
+ 8558,
+ 8562,
+ 8565,
+ 8568,
+ 8572,
+ 8575,
+ 8578,
+ 8582,
+ 8585,
+ 8588,
+ 8592,
+ 8595,
+ 8598,
+ 8602,
+ 8605,
+ 8608,
+ 8612,
+ 8615,
+ 8618,
+ 8622,
+ 8625,
+ 8628,
+ 8631,
+ 8635,
+ 8638,
+ 8641,
+ 8645,
+ 8648,
+ 8651,
+ 8655,
+ 8658,
+ 8661,
+ 8665,
+ 8668,
+ 8671,
+ 8675,
+ 8678,
+ 8681,
+ 8685,
+ 8688,
+ 8691,
+ 8695,
+ 8698,
+ 8701,
+ 8705,
+ 8708,
+ 8711,
+ 8715,
+ 8718,
+ 8721,
+ 8725,
+ 8728,
+ 8731,
+ 8734,
+ 8738,
+ 8741,
+ 8744,
+ 8748,
+ 8751,
+ 8754,
+ 8758,
+ 8761,
+ 8764,
+ 8768,
+ 8771,
+ 8774,
+ 8778,
+ 8781,
+ 8784,
+ 8788,
+ 8791,
+ 8794,
+ 8798,
+ 8801,
+ 8804,
+ 8808,
+ 8811,
+ 8814,
+ 8818,
+ 8821,
+ 8824,
+ 8827,
+ 8831,
+ 8834,
+ 8837,
+ 8841,
+ 8844,
+ 8847,
+ 8851,
+ 8854,
+ 8857,
+ 8861,
+ 8864,
+ 8867,
+ 8871,
+ 8874,
+ 8877,
+ 8881,
+ 8884,
+ 8887,
+ 8891,
+ 8894,
+ 8897,
+ 8901,
+ 8904,
+ 8907,
+ 8911,
+ 8914,
+ 8917,
+ 8921,
+ 8924,
+ 8927,
+ 8930,
+ 8934,
+ 8937,
+ 8940,
+ 8944,
+ 8947,
+ 8950,
+ 8954,
+ 8957,
+ 8960,
+ 8964,
+ 8967,
+ 8970,
+ 8974,
+ 8977,
+ 8980,
+ 8984,
+ 8987,
+ 8990,
+ 8994,
+ 8997,
+ 9000,
+ 9004,
+ 9007,
+ 9010,
+ 9014,
+ 9017,
+ 9020,
+ 9023,
+ 9027,
+ 9030,
+ 9033,
+ 9037,
+ 9040,
+ 9043,
+ 9047,
+ 9050,
+ 9053,
+ 9057,
+ 9060,
+ 9063,
+ 9067,
+ 9070,
+ 9073,
+ 9077,
+ 9080,
+ 9083,
+ 9087,
+ 9090,
+ 9093,
+ 9097,
+ 9100,
+ 9103,
+ 9107,
+ 9110,
+ 9113,
+ 9116,
+ 9120,
+ 9123,
+ 9126,
+ 9130,
+ 9133,
+ 9136,
+ 9140,
+ 9143,
+ 9146,
+ 9150,
+ 9153,
+ 9156,
+ 9160,
+ 9163,
+ 9166,
+ 9170,
+ 9173,
+ 9176,
+ 9180,
+ 9183,
+ 9186,
+ 9190,
+ 9193,
+ 9196,
+ 9200,
+ 9203,
+ 9206,
+ 9210,
+ 9213,
+ 9216,
+ 9219,
+ 9223,
+ 9226,
+ 9229,
+ 9233,
+ 9236,
+ 9239,
+ 9243,
+ 9246,
+ 9249,
+ 9253,
+ 9256,
+ 9259,
+ 9263,
+ 9266,
+ 9269,
+ 9273,
+ 9276,
+ 9279,
+ 9283,
+ 9286,
+ 9289,
+ 9293,
+ 9296,
+ 9299,
+ 9303,
+ 9306,
+ 9309,
+ 9312,
+ 9316,
+ 9319,
+ 9322,
+ 9326,
+ 9329,
+ 9332,
+ 9336,
+ 9339,
+ 9342,
+ 9346,
+ 9349,
+ 9352,
+ 9356,
+ 9359,
+ 9362,
+ 9366,
+ 9369,
+ 9372,
+ 9376,
+ 9379,
+ 9382,
+ 9386,
+ 9389,
+ 9392,
+ 9396,
+ 9399,
+ 9402,
+ 9406,
+ 9409,
+ 9412,
+ 9415,
+ 9419,
+ 9422,
+ 9425,
+ 9429,
+ 9432,
+ 9435,
+ 9439,
+ 9442,
+ 9445,
+ 9449,
+ 9452,
+ 9455,
+ 9459,
+ 9462,
+ 9465,
+ 9469,
+ 9472,
+ 9475,
+ 9479,
+ 9482,
+ 9485,
+ 9489,
+ 9492,
+ 9495,
+ 9499,
+ 9502,
+ 9505,
+ 9508,
+ 9512,
+ 9515,
+ 9518,
+ 9522,
+ 9525,
+ 9528,
+ 9532,
+ 9535,
+ 9538,
+ 9542,
+ 9545,
+ 9548,
+ 9552,
+ 9555,
+ 9558,
+ 9562,
+ 9565,
+ 9568,
+ 9572,
+ 9575,
+ 9578,
+ 9582,
+ 9585,
+ 9588,
+ 9592,
+ 9595,
+ 9598,
+ 9601,
+ 9605,
+ 9608,
+ 9611,
+ 9615,
+ 9618,
+ 9621,
+ 9625,
+ 9628,
+ 9631,
+ 9635,
+ 9638,
+ 9641,
+ 9645,
+ 9648,
+ 9651,
+ 9655,
+ 9658,
+ 9661,
+ 9665,
+ 9668,
+ 9671,
+ 9675,
+ 9678,
+ 9681,
+ 9685,
+ 9688,
+ 9691,
+ 9695,
+ 9698,
+ 9701,
+ 9704,
+ 9708,
+ 9711,
+ 9714,
+ 9718,
+ 9721,
+ 9724,
+ 9728,
+ 9731,
+ 9734,
+ 9738,
+ 9741,
+ 9744,
+ 9748,
+ 9751,
+ 9754,
+ 9758,
+ 9761,
+ 9764,
+ 9768,
+ 9771,
+ 9774,
+ 9778,
+ 9781,
+ 9784,
+ 9788,
+ 9791,
+ 9794,
+ 9797,
+ 9801,
+ 9804,
+ 9807,
+ 9811,
+ 9814,
+ 9817,
+ 9821,
+ 9824,
+ 9827,
+ 9831,
+ 9834,
+ 9837,
+ 9841,
+ 9844,
+ 9847,
+ 9851,
+ 9854,
+ 9857,
+ 9861,
+ 9864,
+ 9867,
+ 9871,
+ 9874,
+ 9877,
+ 9881,
+ 9884,
+ 9887,
+ 9891,
+ 9894,
+ 9897,
+ 9900,
+ 9904,
+ 9907,
+ 9910,
+ 9914,
+ 9917,
+ 9920,
+ 9924,
+ 9927,
+ 9930,
+ 9934,
+ 9937,
+ 9940,
+ 9944,
+ 9947,
+ 9950,
+ 9954,
+ 9957,
+ 9960,
+ 9964,
+ 9967,
+ 9970,
+ 9974,
+ 9977,
+ 9980,
+ 9984,
+ 9987,
+ 9990,
+ 9993,
+ 9997,
+ 10000,
+ 10003,
+ 10007,
+ 10010,
+ 10013,
+ 10017,
+ 10020,
+ 10023,
+ 10027,
+ 10030,
+ 10033,
+ 10037,
+ 10040,
+ 10043,
+ 10047,
+ 10050,
+ 10053,
+ 10057,
+ 10060,
+ 10063,
+ 10067,
+ 10070,
+ 10073,
+ 10077,
+ 10080,
+ 10083,
+ 10087,
+ 10090,
+ 10093,
+ 10096,
+ 10100,
+ 10103,
+ 10106,
+ 10110,
+ 10113,
+ 10116,
+ 10120,
+ 10123,
+ 10126,
+ 10130,
+ 10133,
+ 10136,
+ 10140,
+ 10143,
+ 10146,
+ 10150,
+ 10153,
+ 10156,
+ 10160,
+ 10163,
+ 10166,
+ 10170,
+ 10173,
+ 10176,
+ 10180,
+ 10183,
+ 10186,
+ 10189,
+ 10193,
+ 10196,
+ 10199,
+ 10203,
+ 10206,
+ 10209,
+ 10213,
+ 10216,
+ 10219,
+ 10223,
+ 10226,
+ 10229,
+ 10233,
+ 10236,
+ 10239,
+ 10243,
+ 10246,
+ 10249,
+ 10253,
+ 10256,
+ 10259,
+ 10263,
+ 10266,
+ 10269,
+ 10273,
+ 10276,
+ 10279,
+ 10282,
+ 10286,
+ 10289,
+ 10292,
+ 10296,
+ 10299,
+ 10302,
+ 10306,
+ 10309,
+ 10312,
+ 10316,
+ 10319,
+ 10322,
+ 10326,
+ 10329,
+ 10332,
+ 10336,
+ 10339,
+ 10342,
+ 10346,
+ 10349,
+ 10352,
+ 10356,
+ 10359,
+ 10362,
+ 10366,
+ 10369,
+ 10372,
+ 10376,
+ 10379,
+ 10382,
+ 10385,
+ 10389,
+ 10392,
+ 10395,
+ 10399,
+ 10402,
+ 10405,
+ 10409,
+ 10412,
+ 10415,
+ 10419,
+ 10422,
+ 10425,
+ 10429,
+ 10432,
+ 10435,
+ 10439,
+ 10442,
+ 10445,
+ 10449,
+ 10452,
+ 10455,
+ 10459,
+ 10462,
+ 10465,
+ 10469,
+ 10472,
+ 10475,
+ 10478,
+ 10482,
+ 10485,
+ 10488,
+ 10492,
+ 10495,
+ 10498,
+ 10502,
+ 10505,
+ 10508,
+ 10512,
+ 10515,
+ 10518,
+ 10522,
+ 10525,
+ 10528,
+ 10532,
+ 10535,
+ 10538,
+ 10542,
+ 10545,
+ 10548,
+ 10552,
+ 10555,
+ 10558,
+ 10562,
+ 10565,
+ 10568,
+ 10572,
+ 10575,
+ 10578,
+ 10581,
+ 10585,
+ 10588,
+ 10591,
+ 10595,
+ 10598,
+ 10601,
+ 10605,
+ 10608,
+ 10611,
+ 10615,
+ 10618,
+ 10621,
+ 10625,
+ 10628,
+ 10631,
+ 10635,
+ 10638,
+ 10641,
+ 10645,
+ 10648,
+ 10651,
+ 10655,
+ 10658,
+ 10661,
+ 10665,
+ 10668,
+ 10671,
+ 10674,
+ 10678,
+ 10681,
+ 10684,
+ 10688,
+ 10691,
+ 10694,
+ 10698,
+ 10701,
+ 10704,
+ 10708,
+ 10711,
+ 10714,
+ 10718,
+ 10721,
+ 10724,
+ 10728,
+ 10731,
+ 10734,
+ 10738,
+ 10741,
+ 10744,
+ 10748,
+ 10751,
+ 10754,
+ 10758,
+ 10761,
+ 10764,
+ 10767,
+ 10771,
+ 10774,
+ 10777,
+ 10781,
+ 10784,
+ 10787,
+ 10791,
+ 10794,
+ 10797,
+ 10801,
+ 10804,
+ 10807,
+ 10811,
+ 10814,
+ 10817,
+ 10821,
+ 10824,
+ 10827,
+ 10831,
+ 10834,
+ 10837,
+ 10841,
+ 10844,
+ 10847,
+ 10851,
+ 10854,
+ 10857,
+ 10861,
+ 10864,
+ 10867,
+ 10870,
+ 10874,
+ 10877,
+ 10880,
+ 10884,
+ 10887,
+ 10890,
+ 10894,
+ 10897,
+ 10900,
+ 10904,
+ 10907,
+ 10910,
+ 10914,
+ 10917,
+ 10920,
+ 10924,
+ 10927,
+ 10930,
+ 10934,
+ 10937,
+ 10940,
+ 10944,
+ 10947,
+ 10950,
+ 10954,
+ 10957,
+ 10960,
+ 10963,
+ 10967,
+ 10970,
+ 10973,
+ 10977,
+ 10980,
+ 10983,
+ 10987,
+ 10990,
+ 10993,
+ 10997,
+ 11000,
+ 11003,
+ 11007,
+ 11010,
+ 11013,
+ 11017,
+ 11020,
+ 11023,
+ 11027,
+ 11030,
+ 11033,
+ 11037,
+ 11040,
+ 11043,
+ 11047,
+ 11050,
+ 11053,
+ 11057,
+ 11060,
+ 11063,
+ 11066,
+ 11070,
+ 11073,
+ 11076,
+ 11080,
+ 11083,
+ 11086,
+ 11090,
+ 11093,
+ 11096,
+ 11100,
+ 11103,
+ 11106,
+ 11110,
+ 11113,
+ 11116,
+ 11120,
+ 11123,
+ 11126,
+ 11130,
+ 11133,
+ 11136,
+ 11140,
+ 11143,
+ 11146,
+ 11150,
+ 11153,
+ 11156,
+ 11159,
+ 11163,
+ 11166,
+ 11169,
+ 11173,
+ 11176,
+ 11179,
+ 11183,
+ 11186,
+ 11189,
+ 11193,
+ 11196,
+ 11199,
+ 11203,
+ 11206,
+ 11209,
+ 11213,
+ 11216,
+ 11219,
+ 11223,
+ 11226,
+ 11229,
+ 11233,
+ 11236,
+ 11239,
+ 11243,
+ 11246,
+ 11249,
+ 11252,
+ 11256,
+ 11259,
+ 11262,
+ 11266,
+ 11269,
+ 11272,
+ 11276,
+ 11279,
+ 11282,
+ 11286,
+ 11289,
+ 11292,
+ 11296,
+ 11299,
+ 11302,
+ 11306,
+ 11309,
+ 11312,
+ 11316,
+ 11319,
+ 11322,
+ 11326,
+ 11329,
+ 11332,
+ 11336,
+ 11339,
+ 11342,
+ 11346,
+ 11349,
+ 11352,
+ 11355,
+ 11359,
+ 11362,
+ 11365,
+ 11369,
+ 11372,
+ 11375,
+ 11379,
+ 11382,
+ 11385,
+ 11389,
+ 11392,
+ 11395,
+ 11399,
+ 11402,
+ 11405,
+ 11409,
+ 11412,
+ 11415,
+ 11419,
+ 11422,
+ 11425,
+ 11429,
+ 11432,
+ 11435,
+ 11439,
+ 11442,
+ 11445,
+ 11448,
+ 11452,
+ 11455,
+ 11458,
+ 11462,
+ 11465,
+ 11468,
+ 11472,
+ 11475,
+ 11478,
+ 11482,
+ 11485,
+ 11488,
+ 11492,
+ 11495,
+ 11498,
+ 11502,
+ 11505,
+ 11508,
+ 11512,
+ 11515,
+ 11518,
+ 11522,
+ 11525,
+ 11528,
+ 11532,
+ 11535,
+ 11538,
+ 11542,
+ 11545,
+ 11548,
+ 11551,
+ 11555,
+ 11558,
+ 11561,
+ 11565,
+ 11568,
+ 11571,
+ 11575,
+ 11578,
+ 11581,
+ 11585,
+ 11588,
+ 11591,
+ 11595,
+ 11598,
+ 11601,
+ 11605,
+ 11608,
+ 11611,
+ 11615,
+ 11618,
+ 11621,
+ 11625,
+ 11628,
+ 11631,
+ 11635,
+ 11638,
+ 11641,
+ 11644,
+ 11648,
+ 11651,
+ 11654,
+ 11658,
+ 11661,
+ 11664,
+ 11668,
+ 11671,
+ 11674,
+ 11678,
+ 11681,
+ 11684,
+ 11688,
+ 11691,
+ 11694,
+ 11698,
+ 11701,
+ 11704,
+ 11708,
+ 11711,
+ 11714,
+ 11718,
+ 11721,
+ 11724,
+ 11728,
+ 11731,
+ 11734,
+ 11737,
+ 11741,
+ 11744,
+ 11747,
+ 11751,
+ 11754,
+ 11757,
+ 11761,
+ 11764,
+ 11767,
+ 11771,
+ 11774,
+ 11777,
+ 11781,
+ 11784,
+ 11787,
+ 11791,
+ 11794,
+ 11797,
+ 11801,
+ 11804,
+ 11807,
+ 11811,
+ 11814,
+ 11817,
+ 11821,
+ 11824,
+ 11827,
+ 11831,
+ 11834,
+ 11837,
+ 11840,
+ 11844,
+ 11847,
+ 11850,
+ 11854,
+ 11857,
+ 11860,
+ 11864,
+ 11867,
+ 11870,
+ 11874,
+ 11877,
+ 11880,
+ 11884,
+ 11887,
+ 11890,
+ 11894,
+ 11897,
+ 11900,
+ 11904,
+ 11907,
+ 11910,
+ 11914,
+ 11917,
+ 11920,
+ 11924,
+ 11927,
+ 11930,
+ 11933,
+ 11937,
+ 11940,
+ 11943,
+ 11947,
+ 11950,
+ 11953,
+ 11957,
+ 11960,
+ 11963,
+ 11967,
+ 11970,
+ 11973,
+ 11977,
+ 11980,
+ 11983,
+ 11987,
+ 11990,
+ 11993,
+ 11997,
+ 12000,
+ 12003,
+ 12007,
+ 12010,
+ 12013,
+ 12017,
+ 12020,
+ 12023,
+ 12027,
+ 12030,
+ 12033,
+ 12036,
+ 12040,
+ 12043,
+ 12046,
+ 12050,
+ 12053,
+ 12056,
+ 12060,
+ 12063,
+ 12066,
+ 12070,
+ 12073,
+ 12076,
+ 12080,
+ 12083,
+ 12086,
+ 12090,
+ 12093,
+ 12096,
+ 12100,
+ 12103,
+ 12106,
+ 12110,
+ 12113,
+ 12116,
+ 12120,
+ 12123,
+ 12126,
+ 12129,
+ 12133,
+ 12136,
+ 12139,
+ 12143,
+ 12146,
+ 12149,
+ 12153,
+ 12156,
+ 12159,
+ 12163,
+ 12166,
+ 12169,
+ 12173,
+ 12176,
+ 12179,
+ 12183,
+ 12186,
+ 12189,
+ 12193,
+ 12196,
+ 12199,
+ 12203,
+ 12206,
+ 12209,
+ 12213,
+ 12216,
+ 12219,
+ 12223,
+ 12226,
+ 12229,
+ 12232,
+ 12236,
+ 12239,
+ 12242,
+ 12246,
+ 12249,
+ 12252,
+ 12256,
+ 12259,
+ 12262,
+ 12266,
+ 12269,
+ 12272,
+ 12276,
+ 12279,
+ 12282,
+ 12286,
+ 12289,
+ 12292,
+ 12296,
+ 12299,
+ 12302,
+ 12306,
+ 12309,
+ 12312,
+ 12316,
+ 12319,
+ 12322,
+ 12325,
+ 12329,
+ 12332,
+ 12335,
+ 12339,
+ 12342,
+ 12345,
+ 12349,
+ 12352,
+ 12355,
+ 12359,
+ 12362,
+ 12365,
+ 12369,
+ 12372,
+ 12375,
+ 12379,
+ 12382,
+ 12385,
+ 12389,
+ 12392,
+ 12395,
+ 12399,
+ 12402,
+ 12405,
+ 12409,
+ 12412,
+ 12415,
+ 12418,
+ 12422,
+ 12425,
+ 12428,
+ 12432,
+ 12435,
+ 12438,
+ 12442,
+ 12445,
+ 12448,
+ 12452,
+ 12455,
+ 12458,
+ 12462,
+ 12465,
+ 12468,
+ 12472,
+ 12475,
+ 12478,
+ 12482,
+ 12485,
+ 12488,
+ 12492,
+ 12495,
+ 12498,
+ 12502,
+ 12505,
+ 12508,
+ 12512,
+ 12515,
+ 12518,
+ 12521,
+ 12525,
+ 12528,
+ 12531,
+ 12535,
+ 12538,
+ 12541,
+ 12545,
+ 12548,
+ 12551,
+ 12555,
+ 12558,
+ 12561,
+ 12565,
+ 12568,
+ 12571,
+ 12575,
+ 12578,
+ 12581,
+ 12585,
+ 12588,
+ 12591,
+ 12595,
+ 12598,
+ 12601,
+ 12605,
+ 12608,
+ 12611,
+ 12614,
+ 12618,
+ 12621,
+ 12624,
+ 12628,
+ 12631,
+ 12634,
+ 12638,
+ 12641,
+ 12644,
+ 12648,
+ 12651,
+ 12654,
+ 12658,
+ 12661,
+ 12664,
+ 12668,
+ 12671,
+ 12674,
+ 12678,
+ 12681,
+ 12684,
+ 12688,
+ 12691,
+ 12694,
+ 12698,
+ 12701,
+ 12704,
+ 12708,
+ 12711,
+ 12714,
+ 12717,
+ 12721,
+ 12724,
+ 12727,
+ 12731,
+ 12734,
+ 12737,
+ 12741,
+ 12744,
+ 12747,
+ 12751,
+ 12754,
+ 12757,
+ 12761,
+ 12764,
+ 12767,
+ 12771,
+ 12774,
+ 12777,
+ 12781,
+ 12784,
+ 12787,
+ 12791,
+ 12794,
+ 12797,
+ 12801,
+ 12804,
+ 12807,
+ 12810,
+ 12814,
+ 12817,
+ 12820,
+ 12824,
+ 12827,
+ 12830,
+ 12834,
+ 12837,
+ 12840,
+ 12844,
+ 12847,
+ 12850,
+ 12854,
+ 12857,
+ 12860,
+ 12864,
+ 12867,
+ 12870,
+ 12874,
+ 12877,
+ 12880,
+ 12884,
+ 12887,
+ 12890,
+ 12894,
+ 12897,
+ 12900,
+ 12903,
+ 12907,
+ 12910,
+ 12913,
+ 12917,
+ 12920,
+ 12923,
+ 12927,
+ 12930,
+ 12933,
+ 12937,
+ 12940,
+ 12943,
+ 12947,
+ 12950,
+ 12953,
+ 12957,
+ 12960,
+ 12963,
+ 12967,
+ 12970,
+ 12973,
+ 12977,
+ 12980,
+ 12983,
+ 12987,
+ 12990,
+ 12993,
+ 12997,
+ 13000,
+ 13003,
+ 13006,
+ 13010,
+ 13013,
+ 13016,
+ 13020,
+ 13023,
+ 13026,
+ 13030,
+ 13033,
+ 13036,
+ 13040,
+ 13043,
+ 13046,
+ 13050,
+ 13053,
+ 13056,
+ 13060,
+ 13063,
+ 13066,
+ 13070,
+ 13073,
+ 13076,
+ 13080,
+ 13083,
+ 13086,
+ 13090,
+ 13093,
+ 13096,
+ 13099,
+ 13103,
+ 13106,
+ 13109,
+ 13113,
+ 13116,
+ 13119,
+ 13123,
+ 13126,
+ 13129,
+ 13133,
+ 13136,
+ 13139,
+ 13143,
+ 13146,
+ 13149,
+ 13153,
+ 13156,
+ 13159,
+ 13163,
+ 13166,
+ 13169,
+ 13173,
+ 13176,
+ 13179,
+ 13183,
+ 13186,
+ 13189,
+ 13193,
+ 13196,
+ 13199,
+ 13202,
+ 13206,
+ 13209,
+ 13212,
+ 13216,
+ 13219,
+ 13222,
+ 13226,
+ 13229,
+ 13232,
+ 13236,
+ 13239,
+ 13242,
+ 13246,
+ 13249,
+ 13252,
+ 13256,
+ 13259,
+ 13262,
+ 13266,
+ 13269,
+ 13272,
+ 13276,
+ 13279,
+ 13282,
+ 13286,
+ 13289,
+ 13292,
+ 13295,
+ 13299,
+ 13302,
+ 13305,
+ 13309,
+ 13312,
+ 13315,
+ 13319,
+ 13322,
+ 13325,
+ 13329,
+ 13332,
+ 13335,
+ 13339,
+ 13342,
+ 13345,
+ 13349,
+ 13352,
+ 13355,
+ 13359,
+ 13362,
+ 13365,
+ 13369,
+ 13372,
+ 13375,
+ 13379,
+ 13382,
+ 13385,
+ 13388,
+ 13392,
+ 13395,
+ 13398,
+ 13402,
+ 13405,
+ 13408,
+ 13412,
+ 13415,
+ 13418,
+ 13422,
+ 13425,
+ 13428,
+ 13432,
+ 13435,
+ 13438,
+ 13442,
+ 13445,
+ 13448,
+ 13452,
+ 13455,
+ 13458,
+ 13462,
+ 13465,
+ 13468,
+ 13472,
+ 13475,
+ 13478,
+ 13482,
+ 13485,
+ 13488,
+ 13491,
+ 13495,
+ 13498,
+ 13501,
+ 13505,
+ 13508,
+ 13511,
+ 13515,
+ 13518,
+ 13521,
+ 13525,
+ 13528,
+ 13531,
+ 13535,
+ 13538,
+ 13541,
+ 13545,
+ 13548,
+ 13551,
+ 13555,
+ 13558,
+ 13561,
+ 13565,
+ 13568,
+ 13571,
+ 13575,
+ 13578,
+ 13581,
+ 13584,
+ 13588,
+ 13591,
+ 13594,
+ 13598,
+ 13601,
+ 13604,
+ 13608,
+ 13611,
+ 13614,
+ 13618,
+ 13621,
+ 13624,
+ 13628,
+ 13631,
+ 13634,
+ 13638,
+ 13641,
+ 13644,
+ 13648,
+ 13651,
+ 13654,
+ 13658,
+ 13661,
+ 13664,
+ 13668,
+ 13671,
+ 13674,
+ 13678,
+ 13681,
+ 13684,
+ 13687,
+ 13691,
+ 13694,
+ 13697,
+ 13701,
+ 13704,
+ 13707,
+ 13711,
+ 13714,
+ 13717,
+ 13721,
+ 13724,
+ 13727,
+ 13731,
+ 13734,
+ 13737,
+ 13741,
+ 13744,
+ 13747,
+ 13751,
+ 13754,
+ 13757,
+ 13761,
+ 13764,
+ 13767,
+ 13771,
+ 13774,
+ 13777,
+ 13780,
+ 13784,
+ 13787,
+ 13790,
+ 13794,
+ 13797,
+ 13800,
+ 13804,
+ 13807,
+ 13810,
+ 13814,
+ 13817,
+ 13820,
+ 13824,
+ 13827,
+ 13830,
+ 13834,
+ 13837,
+ 13840,
+ 13844,
+ 13847,
+ 13850,
+ 13854,
+ 13857,
+ 13860,
+ 13864,
+ 13867,
+ 13870,
+ 13873,
+ 13877,
+ 13880,
+ 13883,
+ 13887,
+ 13890,
+ 13893,
+ 13897,
+ 13900,
+ 13903,
+ 13907,
+ 13910,
+ 13913,
+ 13917,
+ 13920,
+ 13923,
+ 13927,
+ 13930,
+ 13933,
+ 13937,
+ 13940,
+ 13943,
+ 13947,
+ 13950,
+ 13953,
+ 13957,
+ 13960,
+ 13963,
+ 13967,
+ 13970,
+ 13973,
+ 13976,
+ 13980,
+ 13983,
+ 13986,
+ 13990,
+ 13993,
+ 13996,
+ 14000,
+ 14003,
+ 14006,
+ 14010,
+ 14013,
+ 14016,
+ 14020,
+ 14023,
+ 14026,
+ 14030,
+ 14033,
+ 14036,
+ 14040,
+ 14043,
+ 14046,
+ 14050,
+ 14053,
+ 14056,
+ 14060,
+ 14063,
+ 14066,
+ 14069,
+ 14073,
+ 14076,
+ 14079,
+ 14083,
+ 14086,
+ 14089,
+ 14093,
+ 14096,
+ 14099,
+ 14103,
+ 14106,
+ 14109,
+ 14113,
+ 14116,
+ 14119,
+ 14123,
+ 14126,
+ 14129,
+ 14133,
+ 14136,
+ 14139,
+ 14143,
+ 14146,
+ 14149,
+ 14153,
+ 14156,
+ 14159,
+ 14163,
+ 14166,
+ 14169,
+ 14172,
+ 14176,
+ 14179,
+ 14182,
+ 14186,
+ 14189,
+ 14192,
+ 14196,
+ 14199,
+ 14202,
+ 14206,
+ 14209,
+ 14212,
+ 14216,
+ 14219,
+ 14222,
+ 14226,
+ 14229,
+ 14232,
+ 14236,
+ 14239,
+ 14242,
+ 14246,
+ 14249,
+ 14252,
+ 14256,
+ 14259,
+ 14262,
+ 14265,
+ 14269,
+ 14272,
+ 14275,
+ 14279,
+ 14282,
+ 14285,
+ 14289,
+ 14292,
+ 14295,
+ 14299,
+ 14302,
+ 14305,
+ 14309,
+ 14312,
+ 14315,
+ 14319,
+ 14322,
+ 14325,
+ 14329,
+ 14332,
+ 14335,
+ 14339,
+ 14342,
+ 14345,
+ 14349,
+ 14352,
+ 14355,
+ 14359,
+ 14362,
+ 14365,
+ 14368,
+ 14372,
+ 14375,
+ 14378,
+ 14382,
+ 14385,
+ 14388,
+ 14392,
+ 14395,
+ 14398,
+ 14402,
+ 14405,
+ 14408,
+ 14412,
+ 14415,
+ 14418,
+ 14422,
+ 14425,
+ 14428,
+ 14432,
+ 14435,
+ 14438,
+ 14442,
+ 14445,
+ 14448,
+ 14452,
+ 14455,
+ 14458,
+ 14461,
+ 14465,
+ 14468,
+ 14471,
+ 14475,
+ 14478,
+ 14481,
+ 14485,
+ 14488,
+ 14491,
+ 14495,
+ 14498,
+ 14501,
+ 14505,
+ 14508,
+ 14511,
+ 14515,
+ 14518,
+ 14521,
+ 14525,
+ 14528,
+ 14531,
+ 14535,
+ 14538,
+ 14541,
+ 14545,
+ 14548,
+ 14551,
+ 14554,
+ 14558,
+ 14561,
+ 14564,
+ 14568,
+ 14571,
+ 14574,
+ 14578,
+ 14581,
+ 14584,
+ 14588,
+ 14591,
+ 14594,
+ 14598,
+ 14601,
+ 14604,
+ 14608,
+ 14611,
+ 14614,
+ 14618,
+ 14621,
+ 14624,
+ 14628,
+ 14631,
+ 14634,
+ 14638,
+ 14641,
+ 14644,
+ 14648,
+ 14651,
+ 14654,
+ 14657,
+ 14661,
+ 14664,
+ 14667,
+ 14671,
+ 14674,
+ 14677,
+ 14681,
+ 14684,
+ 14687,
+ 14691,
+ 14694,
+ 14697,
+ 14701,
+ 14704,
+ 14707,
+ 14711,
+ 14714,
+ 14717,
+ 14721,
+ 14724,
+ 14727,
+ 14731,
+ 14734,
+ 14737,
+ 14741,
+ 14744,
+ 14747,
+ 14750,
+ 14754,
+ 14757,
+ 14760,
+ 14764,
+ 14767,
+ 14770,
+ 14774,
+ 14777,
+ 14780,
+ 14784,
+ 14787,
+ 14790,
+ 14794,
+ 14797,
+ 14800,
+ 14804,
+ 14807,
+ 14810,
+ 14814,
+ 14817,
+ 14820,
+ 14824,
+ 14827,
+ 14830,
+ 14834,
+ 14837,
+ 14840,
+ 14844,
+ 14847,
+ 14850,
+ 14853,
+ 14857,
+ 14860,
+ 14863,
+ 14867,
+ 14870,
+ 14873,
+ 14877,
+ 14880,
+ 14883,
+ 14887,
+ 14890,
+ 14893,
+ 14897,
+ 14900,
+ 14903,
+ 14907,
+ 14910,
+ 14913,
+ 14917,
+ 14920,
+ 14923,
+ 14927,
+ 14930,
+ 14933,
+ 14937,
+ 14940,
+ 14943,
+ 14946,
+ 14950,
+ 14953,
+ 14956,
+ 14960,
+ 14963,
+ 14966,
+ 14970,
+ 14973,
+ 14976,
+ 14980,
+ 14983,
+ 14986,
+ 14990,
+ 14993,
+ 14996,
+ 15000,
+ 15003,
+ 15006,
+ 15010,
+ 15013,
+ 15016,
+ 15020,
+ 15023,
+ 15026,
+ 15030,
+ 15033,
+ 15036,
+ 15039,
+ 15043,
+ 15046,
+ 15049,
+ 15053,
+ 15056,
+ 15059,
+ 15063,
+ 15066,
+ 15069,
+ 15073,
+ 15076,
+ 15079,
+ 15083,
+ 15086,
+ 15089,
+ 15093,
+ 15096,
+ 15099,
+ 15103,
+ 15106,
+ 15109,
+ 15113,
+ 15116,
+ 15119,
+ 15123,
+ 15126,
+ 15129,
+ 15133,
+ 15136,
+ 15139,
+ 15142,
+ 15146,
+ 15149,
+ 15152,
+ 15156,
+ 15159,
+ 15162,
+ 15166,
+ 15169,
+ 15172,
+ 15176,
+ 15179,
+ 15182,
+ 15186,
+ 15189,
+ 15192,
+ 15196,
+ 15199,
+ 15202,
+ 15206,
+ 15209,
+ 15212,
+ 15216,
+ 15219,
+ 15222,
+ 15226,
+ 15229,
+ 15232,
+ 15235,
+ 15239,
+ 15242,
+ 15245,
+ 15249,
+ 15252,
+ 15255,
+ 15259,
+ 15262,
+ 15265,
+ 15269,
+ 15272,
+ 15275,
+ 15279,
+ 15282,
+ 15285,
+ 15289,
+ 15292,
+ 15295,
+ 15299,
+ 15302,
+ 15305,
+ 15309,
+ 15312,
+ 15315,
+ 15319,
+ 15322,
+ 15325,
+ 15329,
+ 15332,
+ 15335,
+ 15338,
+ 15342,
+ 15345,
+ 15348,
+ 15352,
+ 15355,
+ 15358,
+ 15362,
+ 15365,
+ 15368,
+ 15372,
+ 15375,
+ 15378,
+ 15382,
+ 15385,
+ 15388,
+ 15392,
+ 15395,
+ 15398,
+ 15402,
+ 15405,
+ 15408,
+ 15412,
+ 15415,
+ 15418,
+ 15422,
+ 15425,
+ 15428,
+ 15431,
+ 15435,
+ 15438,
+ 15441,
+ 15445,
+ 15448,
+ 15451,
+ 15455,
+ 15458,
+ 15461,
+ 15465,
+ 15468,
+ 15471,
+ 15475,
+ 15478,
+ 15481,
+ 15485,
+ 15488,
+ 15491,
+ 15495,
+ 15498,
+ 15501,
+ 15505,
+ 15508,
+ 15511,
+ 15515,
+ 15518,
+ 15521,
+ 15524,
+ 15528,
+ 15531,
+ 15534,
+ 15538,
+ 15541,
+ 15544,
+ 15548,
+ 15551,
+ 15554,
+ 15558,
+ 15561,
+ 15564,
+ 15568,
+ 15571,
+ 15574,
+ 15578,
+ 15581,
+ 15584,
+ 15588,
+ 15591,
+ 15594,
+ 15598,
+ 15601,
+ 15604,
+ 15608,
+ 15611,
+ 15614,
+ 15618,
+ 15621,
+ 15624,
+ 15627,
+ 15631,
+ 15634,
+ 15637,
+ 15641,
+ 15644,
+ 15647,
+ 15651,
+ 15654,
+ 15657,
+ 15661,
+ 15664,
+ 15667,
+ 15671,
+ 15674,
+ 15677,
+ 15681,
+ 15684,
+ 15687,
+ 15691,
+ 15694,
+ 15697,
+ 15701,
+ 15704,
+ 15707,
+ 15711,
+ 15714,
+ 15717,
+ 15720,
+ 15724,
+ 15727,
+ 15730,
+ 15734,
+ 15737,
+ 15740,
+ 15744,
+ 15747,
+ 15750,
+ 15754,
+ 15757,
+ 15760,
+ 15764,
+ 15767,
+ 15770,
+ 15774,
+ 15777,
+ 15780,
+ 15784,
+ 15787,
+ 15790,
+ 15794,
+ 15797,
+ 15800,
+ 15804,
+ 15807,
+ 15810,
+ 15814,
+ 15817,
+ 15820,
+ 15823,
+ 15827,
+ 15830,
+ 15833,
+ 15837,
+ 15840,
+ 15843,
+ 15847,
+ 15850,
+ 15853,
+ 15857,
+ 15860,
+ 15863,
+ 15867,
+ 15870,
+ 15873,
+ 15877,
+ 15880,
+ 15883,
+ 15887,
+ 15890,
+ 15893,
+ 15897,
+ 15900,
+ 15903,
+ 15907,
+ 15910,
+ 15913,
+ 15916,
+ 15920,
+ 15923,
+ 15926,
+ 15930,
+ 15933,
+ 15936,
+ 15940,
+ 15943,
+ 15946,
+ 15950,
+ 15953,
+ 15956,
+ 15960,
+ 15963,
+ 15966,
+ 15970,
+ 15973,
+ 15976,
+ 15980,
+ 15983,
+ 15986,
+ 15990,
+ 15993,
+ 15996,
+ 16000,
+ 16003,
+ 16006,
+ 16009,
+ 16013,
+ 16016,
+ 16019,
+ 16023,
+ 16026,
+ 16029,
+ 16033,
+ 16036,
+ 16039,
+ 16043,
+ 16046,
+ 16049,
+ 16053,
+ 16056,
+ 16059,
+ 16063,
+ 16066,
+ 16069,
+ 16073,
+ 16076,
+ 16079,
+ 16083,
+ 16086,
+ 16089,
+ 16093,
+ 16096,
+ 16099,
+ 16103,
+ 16106,
+ 16109,
+ 16112,
+ 16116,
+ 16119,
+ 16122,
+ 16126,
+ 16129,
+ 16132,
+ 16136,
+ 16139,
+ 16142,
+ 16146,
+ 16149,
+ 16152,
+ 16156,
+ 16159,
+ 16162,
+ 16166,
+ 16169,
+ 16172,
+ 16176,
+ 16179,
+ 16182,
+ 16186,
+ 16189,
+ 16192,
+ 16196,
+ 16199,
+ 16202,
+ 16205,
+ 16209,
+ 16212,
+ 16215,
+ 16219,
+ 16222,
+ 16225,
+ 16229,
+ 16232,
+ 16235,
+ 16239,
+ 16242,
+ 16245,
+ 16249,
+ 16252,
+ 16255,
+ 16259,
+ 16262,
+ 16265,
+ 16269,
+ 16272,
+ 16275,
+ 16279,
+ 16282,
+ 16285,
+ 16289,
+ 16292,
+ 16295,
+ 16299,
+ 16302,
+ 16305,
+ 16308,
+ 16312,
+ 16315,
+ 16318,
+ 16322,
+ 16325,
+ 16328,
+ 16332,
+ 16335,
+ 16338,
+ 16342,
+ 16345,
+ 16348,
+ 16352,
+ 16355,
+ 16358,
+ 16362,
+ 16365,
+ 16368,
+ 16372,
+ 16375,
+ 16378,
+ 16382,
+ 16385,
+ 16388,
+ 16392,
+ 16395,
+ 16398,
+ 16401,
+ 16405,
+ 16408,
+ 16411,
+ 16415,
+ 16418,
+ 16421,
+ 16425,
+ 16428,
+ 16431,
+ 16435,
+ 16438,
+ 16441,
+ 16445,
+ 16448,
+ 16451,
+ 16455,
+ 16458,
+ 16461,
+ 16465,
+ 16468,
+ 16471,
+ 16475,
+ 16478,
+ 16481,
+ 16485,
+ 16488,
+ 16491,
+ 16494,
+ 16498,
+ 16501,
+ 16504,
+ 16508,
+ 16511,
+ 16514,
+ 16518,
+ 16521,
+ 16524,
+ 16528,
+ 16531,
+ 16534,
+ 16538,
+ 16541,
+ 16544,
+ 16548,
+ 16551,
+ 16554,
+ 16558,
+ 16561,
+ 16564,
+ 16568,
+ 16571,
+ 16574,
+ 16578,
+ 16581,
+ 16584,
+ 16588,
+ 16591,
+ 16594,
+ 16597,
+ 16601,
+ 16604,
+ 16607,
+ 16611,
+ 16614,
+ 16617,
+ 16621,
+ 16624,
+ 16627,
+ 16631,
+ 16634,
+ 16637,
+ 16641,
+ 16644,
+ 16647,
+ 16651,
+ 16654,
+ 16657,
+ 16661,
+ 16664,
+ 16667,
+ 16671,
+ 16674,
+ 16677,
+ 16681,
+ 16684,
+ 16687,
+ 16690,
+ 16694,
+ 16697,
+ 16700,
+ 16704,
+ 16707,
+ 16710,
+ 16714,
+ 16717,
+ 16720,
+ 16724,
+ 16727,
+ 16730,
+ 16734,
+ 16737,
+ 16740,
+ 16744,
+ 16747,
+ 16750,
+ 16754,
+ 16757,
+ 16760,
+ 16764,
+ 16767,
+ 16770,
+ 16774,
+ 16777,
+ 16780,
+ 16784,
+ 16787,
+ 16790,
+ 16793,
+ 16797,
+ 16800,
+ 16803,
+ 16807,
+ 16810,
+ 16813,
+ 16817,
+ 16820,
+ 16823,
+ 16827,
+ 16830,
+ 16833,
+ 16837,
+ 16840,
+ 16843,
+ 16847,
+ 16850,
+ 16853,
+ 16857,
+ 16860,
+ 16863,
+ 16867,
+ 16870,
+ 16873,
+ 16877,
+ 16880,
+ 16883,
+ 16886,
+ 16890,
+ 16893,
+ 16896,
+ 16900,
+ 16903,
+ 16906,
+ 16910,
+ 16913,
+ 16916,
+ 16920,
+ 16923,
+ 16926,
+ 16930,
+ 16933,
+ 16936,
+ 16940,
+ 16943,
+ 16946,
+ 16950,
+ 16953,
+ 16956,
+ 16960,
+ 16963,
+ 16966,
+ 16970,
+ 16973,
+ 16976,
+ 16980,
+ 16983,
+ 16986,
+ 16989,
+ 16993,
+ 16996,
+ 16999,
+ 17003,
+ 17006,
+ 17009,
+ 17013,
+ 17016,
+ 17019,
+ 17023,
+ 17026,
+ 17029,
+ 17033,
+ 17036,
+ 17039,
+ 17043,
+ 17046,
+ 17049,
+ 17053,
+ 17056,
+ 17059,
+ 17063,
+ 17066,
+ 17069,
+ 17073,
+ 17076,
+ 17079,
+ 17082,
+ 17086,
+ 17089,
+ 17092,
+ 17096,
+ 17099,
+ 17102,
+ 17106,
+ 17109,
+ 17112,
+ 17116,
+ 17119,
+ 17122,
+ 17126,
+ 17129,
+ 17132,
+ 17136,
+ 17139,
+ 17142,
+ 17146,
+ 17149,
+ 17152,
+ 17156,
+ 17159,
+ 17162,
+ 17166,
+ 17169,
+ 17172,
+ 17175,
+ 17179,
+ 17182,
+ 17185,
+ 17189,
+ 17192,
+ 17195,
+ 17199,
+ 17202,
+ 17205,
+ 17209,
+ 17212,
+ 17215,
+ 17219,
+ 17222,
+ 17225,
+ 17229,
+ 17232,
+ 17235,
+ 17239,
+ 17242,
+ 17245,
+ 17249,
+ 17252,
+ 17255,
+ 17259,
+ 17262,
+ 17265,
+ 17269,
+ 17272,
+ 17275,
+ 17278,
+ 17282,
+ 17285,
+ 17288,
+ 17292,
+ 17295,
+ 17298,
+ 17302,
+ 17305,
+ 17308,
+ 17312,
+ 17315,
+ 17318,
+ 17322,
+ 17325,
+ 17328,
+ 17332,
+ 17335,
+ 17338,
+ 17342,
+ 17345,
+ 17348,
+ 17352,
+ 17355,
+ 17358,
+ 17362,
+ 17365,
+ 17368,
+ 17371,
+ 17375,
+ 17378,
+ 17381,
+ 17385,
+ 17388,
+ 17391,
+ 17395,
+ 17398,
+ 17401,
+ 17405,
+ 17408,
+ 17411,
+ 17415,
+ 17418,
+ 17421,
+ 17425,
+ 17428,
+ 17431,
+ 17435,
+ 17438,
+ 17441,
+ 17445,
+ 17448,
+ 17451,
+ 17455,
+ 17458,
+ 17461,
+ 17465,
+ 17468,
+ 17471,
+ 17474,
+ 17478,
+ 17481,
+ 17484,
+ 17488,
+ 17491,
+ 17494,
+ 17498,
+ 17501,
+ 17504,
+ 17508,
+ 17511,
+ 17514,
+ 17518,
+ 17521,
+ 17524,
+ 17528,
+ 17531,
+ 17534,
+ 17538,
+ 17541,
+ 17544,
+ 17548,
+ 17551,
+ 17554,
+ 17558,
+ 17561,
+ 17564,
+ 17567,
+ 17571,
+ 17574,
+ 17577,
+ 17581,
+ 17584,
+ 17587,
+ 17591,
+ 17594,
+ 17597,
+ 17601,
+ 17604,
+ 17607,
+ 17611,
+ 17614,
+ 17617,
+ 17621,
+ 17624,
+ 17627,
+ 17631,
+ 17634,
+ 17637,
+ 17641,
+ 17644,
+ 17647,
+ 17651,
+ 17654,
+ 17657,
+ 17660,
+ 17664,
+ 17667,
+ 17670,
+ 17674,
+ 17677,
+ 17680,
+ 17684,
+ 17687,
+ 17690,
+ 17694,
+ 17697,
+ 17700,
+ 17704,
+ 17707,
+ 17710,
+ 17714,
+ 17717,
+ 17720,
+ 17724,
+ 17727,
+ 17730,
+ 17734,
+ 17737,
+ 17740,
+ 17744,
+ 17747,
+ 17750,
+ 17754,
+ 17757,
+ 17760,
+ 17763,
+ 17767,
+ 17770,
+ 17773,
+ 17777,
+ 17780,
+ 17783,
+ 17787,
+ 17790,
+ 17793,
+ 17797,
+ 17800,
+ 17803,
+ 17807,
+ 17810,
+ 17813,
+ 17817,
+ 17820,
+ 17823,
+ 17827,
+ 17830,
+ 17833,
+ 17837,
+ 17840,
+ 17843,
+ 17847,
+ 17850,
+ 17853,
+ 17856,
+ 17860,
+ 17863,
+ 17866,
+ 17870,
+ 17873,
+ 17876,
+ 17880,
+ 17883,
+ 17886,
+ 17890,
+ 17893,
+ 17896,
+ 17900,
+ 17903,
+ 17906,
+ 17910,
+ 17913,
+ 17916,
+ 17920,
+ 17923,
+ 17926,
+ 17930,
+ 17933,
+ 17936,
+ 17940,
+ 17943,
+ 17946,
+ 17950,
+ 17953,
+ 17956,
+ 17959,
+ 17963,
+ 17966,
+ 17969,
+ 17973,
+ 17976,
+ 17979,
+ 17983,
+ 17986,
+ 17989,
+ 17993,
+ 17996,
+ 17999,
+ 18003,
+ 18006,
+ 18009,
+ 18013,
+ 18016,
+ 18019,
+ 18023,
+ 18026,
+ 18029,
+ 18033,
+ 18036,
+ 18039,
+ 18043,
+ 18046,
+ 18049,
+ 18052,
+ 18056,
+ 18059,
+ 18062,
+ 18066,
+ 18069,
+ 18072,
+ 18076,
+ 18079,
+ 18082,
+ 18086,
+ 18089,
+ 18092,
+ 18096,
+ 18099,
+ 18102,
+ 18106,
+ 18109,
+ 18112,
+ 18116,
+ 18119,
+ 18122,
+ 18126,
+ 18129,
+ 18132,
+ 18136,
+ 18139,
+ 18142,
+ 18145,
+ 18149,
+ 18152,
+ 18155,
+ 18159,
+ 18162,
+ 18165,
+ 18169,
+ 18172,
+ 18175,
+ 18179,
+ 18182,
+ 18185,
+ 18189,
+ 18192,
+ 18195,
+ 18199,
+ 18202,
+ 18205,
+ 18209,
+ 18212,
+ 18215,
+ 18219,
+ 18222,
+ 18225,
+ 18229,
+ 18232,
+ 18235,
+ 18239,
+ 18242,
+ 18245,
+ 18248,
+ 18252,
+ 18255,
+ 18258,
+ 18262,
+ 18265,
+ 18268,
+ 18272,
+ 18275,
+ 18278,
+ 18282,
+ 18285,
+ 18288,
+ 18292,
+ 18295,
+ 18298,
+ 18302,
+ 18305,
+ 18308,
+ 18312,
+ 18315,
+ 18318,
+ 18322,
+ 18325,
+ 18328,
+ 18332,
+ 18335,
+ 18338,
+ 18341,
+ 18345,
+ 18348,
+ 18351,
+ 18355,
+ 18358,
+ 18361,
+ 18365,
+ 18368,
+ 18371,
+ 18375,
+ 18378,
+ 18381,
+ 18385,
+ 18388,
+ 18391,
+ 18395,
+ 18398,
+ 18401,
+ 18405,
+ 18408,
+ 18411,
+ 18415,
+ 18418,
+ 18421,
+ 18425,
+ 18428,
+ 18431,
+ 18435,
+ 18438,
+ 18441,
+ 18444,
+ 18448,
+ 18451,
+ 18454,
+ 18458,
+ 18461,
+ 18464,
+ 18468,
+ 18471,
+ 18474,
+ 18478,
+ 18481,
+ 18484,
+ 18488,
+ 18491,
+ 18494,
+ 18498,
+ 18501,
+ 18504,
+ 18508,
+ 18511,
+ 18514,
+ 18518,
+ 18521,
+ 18524,
+ 18528,
+ 18531,
+ 18534,
+ 18537,
+ 18541,
+ 18544,
+ 18547,
+ 18551,
+ 18554,
+ 18557,
+ 18561,
+ 18564,
+ 18567,
+ 18571,
+ 18574,
+ 18577,
+ 18581,
+ 18584,
+ 18587,
+ 18591,
+ 18594,
+ 18597,
+ 18601,
+ 18604,
+ 18607,
+ 18611,
+ 18614,
+ 18617,
+ 18621,
+ 18624,
+ 18627,
+ 18630,
+ 18634,
+ 18637,
+ 18640,
+ 18644,
+ 18647,
+ 18650,
+ 18654,
+ 18657,
+ 18660,
+ 18664,
+ 18667,
+ 18670,
+ 18674,
+ 18677,
+ 18680,
+ 18684,
+ 18687,
+ 18690,
+ 18694,
+ 18697,
+ 18700,
+ 18704,
+ 18707,
+ 18710,
+ 18714,
+ 18717,
+ 18720,
+ 18724,
+ 18727,
+ 18730,
+ 18733,
+ 18737,
+ 18740,
+ 18743,
+ 18747,
+ 18750,
+ 18753,
+ 18757,
+ 18760,
+ 18763,
+ 18767,
+ 18770,
+ 18773,
+ 18777,
+ 18780,
+ 18783,
+ 18787,
+ 18790,
+ 18793,
+ 18797,
+ 18800,
+ 18803,
+ 18807,
+ 18810,
+ 18813,
+ 18817,
+ 18820,
+ 18823,
+ 18826,
+ 18830,
+ 18833,
+ 18836,
+ 18840,
+ 18843,
+ 18846,
+ 18850,
+ 18853,
+ 18856,
+ 18860,
+ 18863,
+ 18866,
+ 18870,
+ 18873,
+ 18876,
+ 18880,
+ 18883,
+ 18886,
+ 18890,
+ 18893,
+ 18896,
+ 18900,
+ 18903,
+ 18906,
+ 18910,
+ 18913,
+ 18916,
+ 18920,
+ 18923,
+ 18926,
+ 18929,
+ 18933,
+ 18936,
+ 18939,
+ 18943,
+ 18946,
+ 18949,
+ 18953,
+ 18956,
+ 18959,
+ 18963,
+ 18966,
+ 18969,
+ 18973,
+ 18976,
+ 18979,
+ 18983,
+ 18986,
+ 18989,
+ 18993,
+ 18996,
+ 18999,
+ 19003,
+ 19006,
+ 19009,
+ 19013,
+ 19016,
+ 19019,
+ 19022,
+ 19026,
+ 19029,
+ 19032,
+ 19036,
+ 19039,
+ 19042,
+ 19046,
+ 19049,
+ 19052,
+ 19056,
+ 19059,
+ 19062,
+ 19066,
+ 19069,
+ 19072,
+ 19076,
+ 19079,
+ 19082,
+ 19086,
+ 19089,
+ 19092,
+ 19096,
+ 19099,
+ 19102,
+ 19106,
+ 19109,
+ 19112,
+ 19116,
+ 19119,
+ 19122,
+ 19125,
+ 19129,
+ 19132,
+ 19135,
+ 19139,
+ 19142,
+ 19145,
+ 19149,
+ 19152,
+ 19155,
+ 19159,
+ 19162,
+ 19165,
+ 19169,
+ 19172,
+ 19175,
+ 19179,
+ 19182,
+ 19185,
+ 19189,
+ 19192,
+ 19195,
+ 19199,
+ 19202,
+ 19205,
+ 19209,
+ 19212,
+ 19215,
+ 19218,
+ 19222,
+ 19225,
+ 19228,
+ 19232,
+ 19235,
+ 19238,
+ 19242,
+ 19245,
+ 19248,
+ 19252,
+ 19255,
+ 19258,
+ 19262,
+ 19265,
+ 19268,
+ 19272,
+ 19275,
+ 19278,
+ 19282,
+ 19285,
+ 19288,
+ 19292,
+ 19295,
+ 19298,
+ 19302,
+ 19305,
+ 19308,
+ 19311,
+ 19315,
+ 19318,
+ 19321,
+ 19325,
+ 19328,
+ 19331,
+ 19335,
+ 19338,
+ 19341,
+ 19345,
+ 19348,
+ 19351,
+ 19355,
+ 19358,
+ 19361,
+ 19365,
+ 19368,
+ 19371,
+ 19375,
+ 19378,
+ 19381,
+ 19385,
+ 19388,
+ 19391,
+ 19395,
+ 19398,
+ 19401,
+ 19405,
+ 19408,
+ 19411,
+ 19414,
+ 19418,
+ 19421,
+ 19424,
+ 19428,
+ 19431,
+ 19434,
+ 19438,
+ 19441,
+ 19444,
+ 19448,
+ 19451,
+ 19454,
+ 19458,
+ 19461,
+ 19464,
+ 19468,
+ 19471,
+ 19474,
+ 19478,
+ 19481,
+ 19484,
+ 19488,
+ 19491,
+ 19494,
+ 19498,
+ 19501,
+ 19504,
+ 19507,
+ 19511,
+ 19514,
+ 19517,
+ 19521,
+ 19524,
+ 19527,
+ 19531,
+ 19534,
+ 19537,
+ 19541,
+ 19544,
+ 19547,
+ 19551,
+ 19554,
+ 19557,
+ 19561,
+ 19564,
+ 19567,
+ 19571,
+ 19574,
+ 19577,
+ 19581,
+ 19584,
+ 19587,
+ 19591,
+ 19594,
+ 19597,
+ 19601,
+ 19604,
+ 19607,
+ 19610,
+ 19614,
+ 19617,
+ 19620,
+ 19624,
+ 19627,
+ 19630,
+ 19634,
+ 19637,
+ 19640,
+ 19644,
+ 19647,
+ 19650,
+ 19654,
+ 19657,
+ 19660,
+ 19664,
+ 19667,
+ 19670,
+ 19674,
+ 19677,
+ 19680,
+ 19684,
+ 19687,
+ 19690,
+ 19694,
+ 19697,
+ 19700,
+ 19703,
+ 19707,
+ 19710,
+ 19713,
+ 19717,
+ 19720,
+ 19723,
+ 19727,
+ 19730,
+ 19733,
+ 19737,
+ 19740,
+ 19743,
+ 19747,
+ 19750,
+ 19753,
+ 19757,
+ 19760,
+ 19763,
+ 19767,
+ 19770,
+ 19773,
+ 19777,
+ 19780,
+ 19783,
+ 19787,
+ 19790,
+ 19793,
+ 19796,
+ 19800,
+ 19803,
+ 19806,
+ 19810,
+ 19813,
+ 19816,
+ 19820,
+ 19823,
+ 19826,
+ 19830,
+ 19833,
+ 19836,
+ 19840,
+ 19843,
+ 19846,
+ 19850,
+ 19853,
+ 19856,
+ 19860,
+ 19863,
+ 19866,
+ 19870,
+ 19873,
+ 19876,
+ 19880,
+ 19883,
+ 19886,
+ 19890,
+ 19893,
+ 19896,
+ 19899,
+ 19903,
+ 19906,
+ 19909,
+ 19913,
+ 19916,
+ 19919,
+ 19923,
+ 19926,
+ 19929,
+ 19933,
+ 19936,
+ 19939,
+ 19943,
+ 19946,
+ 19949,
+ 19953,
+ 19956,
+ 19959,
+ 19963,
+ 19966,
+ 19969,
+ 19973,
+ 19976,
+ 19979,
+ 19983,
+ 19986,
+ 19989,
+ 19992,
+ 19996,
+ 19999,
+ 20002,
+ 20006,
+ 20009,
+ 20012,
+ 20016,
+ 20019,
+ 20022,
+ 20026,
+ 20029,
+ 20032,
+ 20036,
+ 20039,
+ 20042,
+ 20046,
+ 20049,
+ 20052,
+ 20056,
+ 20059,
+ 20062,
+ 20066,
+ 20069,
+ 20072,
+ 20076,
+ 20079,
+ 20082,
+ 20086,
+ 20089,
+ 20092,
+ 20095,
+ 20099,
+ 20102,
+ 20105,
+ 20109,
+ 20112,
+ 20115,
+ 20119,
+ 20122,
+ 20125,
+ 20129,
+ 20132,
+ 20135,
+ 20139,
+ 20142,
+ 20145,
+ 20149,
+ 20152,
+ 20155,
+ 20159,
+ 20162,
+ 20165,
+ 20169,
+ 20172,
+ 20175,
+ 20179,
+ 20182,
+ 20185,
+ 20188,
+ 20192,
+ 20195,
+ 20198,
+ 20202,
+ 20205,
+ 20208,
+ 20212,
+ 20215,
+ 20218,
+ 20222,
+ 20225,
+ 20228,
+ 20232,
+ 20235,
+ 20238,
+ 20242,
+ 20245,
+ 20248,
+ 20252,
+ 20255,
+ 20258,
+ 20262,
+ 20265,
+ 20268,
+ 20272,
+ 20275,
+ 20278,
+ 20281,
+ 20285,
+ 20288,
+ 20291,
+ 20295,
+ 20298,
+ 20301,
+ 20305,
+ 20308,
+ 20311,
+ 20315,
+ 20318,
+ 20321,
+ 20325,
+ 20328,
+ 20331,
+ 20335,
+ 20338,
+ 20341,
+ 20345,
+ 20348,
+ 20351,
+ 20355,
+ 20358,
+ 20361,
+ 20365,
+ 20368,
+ 20371,
+ 20375,
+ 20378,
+ 20381,
+ 20384,
+ 20388,
+ 20391,
+ 20394,
+ 20398,
+ 20401,
+ 20404,
+ 20408,
+ 20411,
+ 20414,
+ 20418,
+ 20421,
+ 20424,
+ 20428,
+ 20431,
+ 20434,
+ 20438,
+ 20441,
+ 20444,
+ 20448,
+ 20451,
+ 20454,
+ 20458,
+ 20461,
+ 20464,
+ 20468,
+ 20471,
+ 20474,
+ 20477,
+ 20481,
+ 20484,
+ 20487,
+ 20491,
+ 20494,
+ 20497,
+ 20501,
+ 20504,
+ 20507,
+ 20511,
+ 20514,
+ 20517,
+ 20521,
+ 20524,
+ 20527,
+ 20531,
+ 20534,
+ 20537,
+ 20541,
+ 20544,
+ 20547,
+ 20551,
+ 20554,
+ 20557,
+ 20561,
+ 20564,
+ 20567,
+ 20571,
+ 20574,
+ 20577,
+ 20580,
+ 20584,
+ 20587,
+ 20590,
+ 20594,
+ 20597,
+ 20600,
+ 20604,
+ 20607,
+ 20610,
+ 20614,
+ 20617,
+ 20620,
+ 20624,
+ 20627,
+ 20630,
+ 20634,
+ 20637,
+ 20640,
+ 20644,
+ 20647,
+ 20650,
+ 20654,
+ 20657,
+ 20660,
+ 20664,
+ 20667,
+ 20670,
+ 20673,
+ 20677,
+ 20680,
+ 20683,
+ 20687,
+ 20690,
+ 20693,
+ 20697,
+ 20700,
+ 20703,
+ 20707,
+ 20710,
+ 20713,
+ 20717,
+ 20720,
+ 20723,
+ 20727,
+ 20730,
+ 20733,
+ 20737,
+ 20740,
+ 20743,
+ 20747,
+ 20750,
+ 20753,
+ 20757,
+ 20760,
+ 20763,
+ 20766,
+ 20770,
+ 20773,
+ 20776,
+ 20780,
+ 20783,
+ 20786,
+ 20790,
+ 20793,
+ 20796,
+ 20800,
+ 20803,
+ 20806,
+ 20810,
+ 20813,
+ 20816,
+ 20820,
+ 20823,
+ 20826,
+ 20830,
+ 20833,
+ 20836,
+ 20840,
+ 20843,
+ 20846,
+ 20850,
+ 20853,
+ 20856,
+ 20860,
+ 20863,
+ 20866,
+ 20869,
+ 20873,
+ 20876,
+ 20879,
+ 20883,
+ 20886,
+ 20889,
+ 20893,
+ 20896,
+ 20899,
+ 20903,
+ 20906,
+ 20909,
+ 20913,
+ 20916,
+ 20919,
+ 20923,
+ 20926,
+ 20929,
+ 20933,
+ 20936,
+ 20939,
+ 20943,
+ 20946,
+ 20949,
+ 20953,
+ 20956,
+ 20959,
+ 20962,
+ 20966,
+ 20969,
+ 20972,
+ 20976,
+ 20979,
+ 20982,
+ 20986,
+ 20989,
+ 20992,
+ 20996,
+ 20999,
+ 21002,
+ 21006,
+ 21009,
+ 21012,
+ 21016,
+ 21019,
+ 21022,
+ 21026,
+ 21029,
+ 21032,
+ 21036,
+ 21039,
+ 21042,
+ 21046,
+ 21049,
+ 21052,
+ 21056,
+ 21059,
+ 21062,
+ 21065,
+ 21069,
+ 21072,
+ 21075,
+ 21079,
+ 21082,
+ 21085,
+ 21089,
+ 21092,
+ 21095,
+ 21099,
+ 21102,
+ 21105,
+ 21109,
+ 21112,
+ 21115,
+ 21119,
+ 21122,
+ 21125,
+ 21129,
+ 21132,
+ 21135,
+ 21139,
+ 21142,
+ 21145,
+ 21149,
+ 21152,
+ 21155,
+ 21158,
+ 21162,
+ 21165,
+ 21168,
+ 21172,
+ 21175,
+ 21178,
+ 21182,
+ 21185,
+ 21188,
+ 21192,
+ 21195,
+ 21198,
+ 21202,
+ 21205,
+ 21208,
+ 21212,
+ 21215,
+ 21218,
+ 21222,
+ 21225,
+ 21228,
+ 21232,
+ 21235,
+ 21238,
+ 21242,
+ 21245,
+ 21248,
+ 21252,
+ 21255,
+ 21258,
+ 21261,
+ 21265,
+ 21268,
+ 21271,
+ 21275,
+ 21278,
+ 21281,
+ 21285,
+ 21288,
+ 21291,
+ 21295,
+ 21298,
+ 21301,
+ 21305,
+ 21308,
+ 21311,
+ 21315,
+ 21318,
+ 21321,
+ 21325,
+ 21328,
+ 21331,
+ 21335,
+ 21338,
+ 21341,
+ 21345,
+ 21348,
+ 21351,
+ 21354,
+ 21358,
+ 21361,
+ 21364,
+ 21368,
+ 21371,
+ 21374,
+ 21378,
+ 21381,
+ 21384,
+ 21388,
+ 21391,
+ 21394,
+ 21398,
+ 21401,
+ 21404,
+ 21408,
+ 21411,
+ 21414,
+ 21418,
+ 21421,
+ 21424,
+ 21428,
+ 21431,
+ 21434,
+ 21438,
+ 21441,
+ 21444,
+ 21447,
+ 21451,
+ 21454,
+ 21457,
+ 21461,
+ 21464,
+ 21467,
+ 21471,
+ 21474,
+ 21477,
+ 21481,
+ 21484,
+ 21487,
+ 21491,
+ 21494,
+ 21497,
+ 21501,
+ 21504,
+ 21507,
+ 21511,
+ 21514,
+ 21517,
+ 21521,
+ 21524,
+ 21527,
+ 21531,
+ 21534,
+ 21537,
+ 21541,
+ 21544,
+ 21547,
+ 21550,
+ 21554,
+ 21557,
+ 21560,
+ 21564,
+ 21567,
+ 21570,
+ 21574,
+ 21577,
+ 21580,
+ 21584,
+ 21587,
+ 21590,
+ 21594,
+ 21597,
+ 21600,
+ 21604,
+ 21607,
+ 21610,
+ 21614,
+ 21617,
+ 21620,
+ 21624,
+ 21627,
+ 21630,
+ 21634,
+ 21637,
+ 21640,
+ 21643,
+ 21647,
+ 21650,
+ 21653,
+ 21657,
+ 21660,
+ 21663,
+ 21667,
+ 21670,
+ 21673,
+ 21677,
+ 21680,
+ 21683,
+ 21687,
+ 21690,
+ 21693,
+ 21697,
+ 21700,
+ 21703,
+ 21707,
+ 21710,
+ 21713,
+ 21717,
+ 21720,
+ 21723,
+ 21727,
+ 21730,
+ 21733,
+ 21737,
+ 21740,
+ 21743,
+ 21746,
+ 21750,
+ 21753,
+ 21756,
+ 21760,
+ 21763,
+ 21766,
+ 21770,
+ 21773,
+ 21776,
+ 21780,
+ 21783,
+ 21786,
+ 21790,
+ 21793,
+ 21796,
+ 21800,
+ 21803,
+ 21806,
+ 21810,
+ 21813,
+ 21816,
+ 21820,
+ 21823,
+ 21826,
+ 21830,
+ 21833,
+ 21836,
+ 21839,
+ 21843,
+ 21846,
+ 21849,
+ 21853,
+ 21856,
+ 21859,
+ 21863,
+ 21866,
+ 21869,
+ 21873,
+ 21876,
+ 21879,
+ 21883,
+ 21886,
+ 21889,
+ 21893,
+ 21896,
+ 21899,
+ 21903,
+ 21906,
+ 21909,
+ 21913,
+ 21916,
+ 21919,
+ 21923,
+ 21926,
+ 21929,
+ 21932,
+ 21936,
+ 21939,
+ 21942,
+ 21946,
+ 21949,
+ 21952,
+ 21956,
+ 21959,
+ 21962,
+ 21966,
+ 21969,
+ 21972,
+ 21976,
+ 21979,
+ 21982,
+ 21986,
+ 21989,
+ 21992,
+ 21996,
+ 21999,
+ 22002,
+ 22006,
+ 22009,
+ 22012,
+ 22016,
+ 22019,
+ 22022,
+ 22026,
+ 22029,
+ 22032,
+ 22035,
+ 22039,
+ 22042,
+ 22045,
+ 22049,
+ 22052,
+ 22055,
+ 22059,
+ 22062,
+ 22065,
+ 22069,
+ 22072,
+ 22075,
+ 22079,
+ 22082,
+ 22085,
+ 22089,
+ 22092,
+ 22095,
+ 22099,
+ 22102,
+ 22105,
+ 22109,
+ 22112,
+ 22115,
+ 22119,
+ 22122,
+ 22125,
+ 22128,
+ 22132,
+ 22135,
+ 22138,
+ 22142,
+ 22145,
+ 22148,
+ 22152,
+ 22155,
+ 22158,
+ 22162,
+ 22165,
+ 22168,
+ 22172,
+ 22175,
+ 22178,
+ 22182,
+ 22185,
+ 22188,
+ 22192,
+ 22195,
+ 22198,
+ 22202,
+ 22205,
+ 22208,
+ 22212,
+ 22215,
+ 22218,
+ 22222,
+ 22225,
+ 22228,
+ 22231,
+ 22235,
+ 22238,
+ 22241,
+ 22245,
+ 22248,
+ 22251,
+ 22255,
+ 22258,
+ 22261,
+ 22265,
+ 22268,
+ 22271,
+ 22275,
+ 22278,
+ 22281,
+ 22285,
+ 22288,
+ 22291,
+ 22295,
+ 22298,
+ 22301,
+ 22305,
+ 22308,
+ 22311,
+ 22315,
+ 22318,
+ 22321,
+ 22324,
+ 22328,
+ 22331,
+ 22334,
+ 22338,
+ 22341,
+ 22344,
+ 22348,
+ 22351,
+ 22354,
+ 22358,
+ 22361,
+ 22364,
+ 22368,
+ 22371,
+ 22374,
+ 22378,
+ 22381,
+ 22384,
+ 22388,
+ 22391,
+ 22394,
+ 22398,
+ 22401,
+ 22404,
+ 22408,
+ 22411,
+ 22414,
+ 22417,
+ 22421,
+ 22424,
+ 22427,
+ 22431,
+ 22434,
+ 22437,
+ 22441,
+ 22444,
+ 22447,
+ 22451,
+ 22454,
+ 22457,
+ 22461,
+ 22464,
+ 22467,
+ 22471,
+ 22474,
+ 22477,
+ 22481,
+ 22484,
+ 22487,
+ 22491,
+ 22494,
+ 22497,
+ 22501,
+ 22504,
+ 22507,
+ 22511,
+ 22514,
+ 22517,
+ 22520,
+ 22524,
+ 22527,
+ 22530,
+ 22534,
+ 22537,
+ 22540,
+ 22544,
+ 22547,
+ 22550,
+ 22554,
+ 22557,
+ 22560,
+ 22564,
+ 22567,
+ 22570,
+ 22574,
+ 22577,
+ 22580,
+ 22584,
+ 22587,
+ 22590,
+ 22594,
+ 22597,
+ 22600,
+ 22604,
+ 22607,
+ 22610,
+ 22613,
+ 22617,
+ 22620,
+ 22623,
+ 22627,
+ 22630,
+ 22633,
+ 22637,
+ 22640,
+ 22643,
+ 22647,
+ 22650,
+ 22653,
+ 22657,
+ 22660,
+ 22663,
+ 22667,
+ 22670,
+ 22673,
+ 22677,
+ 22680,
+ 22683,
+ 22687,
+ 22690,
+ 22693,
+ 22697,
+ 22700,
+ 22703,
+ 22707,
+ 22710,
+ 22713,
+ 22716,
+ 22720,
+ 22723,
+ 22726,
+ 22730,
+ 22733,
+ 22736,
+ 22740,
+ 22743,
+ 22746,
+ 22750,
+ 22753,
+ 22756,
+ 22760,
+ 22763,
+ 22766,
+ 22770,
+ 22773,
+ 22776,
+ 22780,
+ 22783,
+ 22786,
+ 22790,
+ 22793,
+ 22796,
+ 22800,
+ 22803,
+ 22806,
+ 22809,
+ 22813,
+ 22816,
+ 22819,
+ 22823,
+ 22826,
+ 22829,
+ 22833,
+ 22836,
+ 22839,
+ 22843,
+ 22846,
+ 22849,
+ 22853,
+ 22856,
+ 22859,
+ 22863,
+ 22866,
+ 22869,
+ 22873,
+ 22876,
+ 22879,
+ 22883,
+ 22886,
+ 22889,
+ 22893,
+ 22896,
+ 22899,
+ 22902,
+ 22906,
+ 22909,
+ 22912,
+ 22916,
+ 22919,
+ 22922,
+ 22926,
+ 22929,
+ 22932,
+ 22936,
+ 22939,
+ 22942,
+ 22946,
+ 22949,
+ 22952,
+ 22956,
+ 22959,
+ 22962,
+ 22966,
+ 22969,
+ 22972,
+ 22976,
+ 22979,
+ 22982,
+ 22986,
+ 22989,
+ 22992,
+ 22996,
+ 22999,
+ 23002,
+ 23005,
+ 23009,
+ 23012,
+ 23015,
+ 23019,
+ 23022,
+ 23025,
+ 23029,
+ 23032,
+ 23035,
+ 23039,
+ 23042,
+ 23045,
+ 23049,
+ 23052,
+ 23055,
+ 23059,
+ 23062,
+ 23065,
+ 23069,
+ 23072,
+ 23075,
+ 23079,
+ 23082,
+ 23085,
+ 23089,
+ 23092,
+ 23095,
+ 23098,
+ 23102,
+ 23105,
+ 23108,
+ 23112,
+ 23115,
+ 23118,
+ 23122,
+ 23125,
+ 23128,
+ 23132,
+ 23135,
+ 23138,
+ 23142,
+ 23145,
+ 23148,
+ 23152,
+ 23155,
+ 23158,
+ 23162,
+ 23165,
+ 23168,
+ 23172,
+ 23175,
+ 23178,
+ 23182,
+ 23185,
+ 23188,
+ 23192,
+ 23195,
+ 23198,
+ 23201,
+ 23205,
+ 23208,
+ 23211,
+ 23215,
+ 23218,
+ 23221,
+ 23225,
+ 23228,
+ 23231,
+ 23235,
+ 23238,
+ 23241,
+ 23245,
+ 23248,
+ 23251,
+ 23255,
+ 23258,
+ 23261,
+ 23265,
+ 23268,
+ 23271,
+ 23275,
+ 23278,
+ 23281,
+ 23285,
+ 23288,
+ 23291,
+ 23294,
+ 23298,
+ 23301,
+ 23304,
+ 23308,
+ 23311,
+ 23314,
+ 23318,
+ 23321,
+ 23324,
+ 23328,
+ 23331,
+ 23334,
+ 23338,
+ 23341,
+ 23344,
+ 23348,
+ 23351,
+ 23354,
+ 23358,
+ 23361,
+ 23364,
+ 23368,
+ 23371,
+ 23374,
+ 23378,
+ 23381,
+ 23384,
+ 23388,
+ 23391,
+ 23394,
+ 23397,
+ 23401,
+ 23404,
+ 23407,
+ 23411,
+ 23414,
+ 23417,
+ 23421,
+ 23424,
+ 23427,
+ 23431,
+ 23434,
+ 23437,
+ 23441,
+ 23444,
+ 23447,
+ 23451,
+ 23454,
+ 23457,
+ 23461,
+ 23464,
+ 23467,
+ 23471,
+ 23474,
+ 23477,
+ 23481,
+ 23484,
+ 23487,
+ 23490,
+ 23494,
+ 23497,
+ 23500,
+ 23504,
+ 23507,
+ 23510,
+ 23514,
+ 23517,
+ 23520,
+ 23524,
+ 23527,
+ 23530,
+ 23534,
+ 23537,
+ 23540,
+ 23544,
+ 23547,
+ 23550,
+ 23554,
+ 23557,
+ 23560,
+ 23564,
+ 23567,
+ 23570,
+ 23574,
+ 23577,
+ 23580,
+ 23583,
+ 23587,
+ 23590,
+ 23593,
+ 23597,
+ 23600,
+ 23603,
+ 23607,
+ 23610,
+ 23613,
+ 23617,
+ 23620,
+ 23623,
+ 23627,
+ 23630,
+ 23633,
+ 23637,
+ 23640,
+ 23643,
+ 23647,
+ 23650,
+ 23653,
+ 23657,
+ 23660,
+ 23663,
+ 23667,
+ 23670,
+ 23673,
+ 23677,
+ 23680,
+ 23683,
+ 23686,
+ 23690,
+ 23693,
+ 23696,
+ 23700,
+ 23703,
+ 23706,
+ 23710,
+ 23713,
+ 23716,
+ 23720,
+ 23723,
+ 23726,
+ 23730,
+ 23733,
+ 23736,
+ 23740,
+ 23743,
+ 23746,
+ 23750,
+ 23753,
+ 23756,
+ 23760,
+ 23763,
+ 23766,
+ 23770,
+ 23773,
+ 23776,
+ 23779,
+ 23783,
+ 23786,
+ 23789,
+ 23793,
+ 23796,
+ 23799,
+ 23803,
+ 23806,
+ 23809,
+ 23813,
+ 23816,
+ 23819,
+ 23823,
+ 23826,
+ 23829,
+ 23833,
+ 23836,
+ 23839,
+ 23843,
+ 23846,
+ 23849,
+ 23853,
+ 23856,
+ 23859,
+ 23863,
+ 23866,
+ 23869,
+ 23873,
+ 23876,
+ 23879,
+ 23882,
+ 23886,
+ 23889,
+ 23892,
+ 23896,
+ 23899,
+ 23902,
+ 23906,
+ 23909,
+ 23912,
+ 23916,
+ 23919,
+ 23922,
+ 23926,
+ 23929,
+ 23932,
+ 23936,
+ 23939,
+ 23942,
+ 23946,
+ 23949,
+ 23952,
+ 23956,
+ 23959,
+ 23962,
+ 23966,
+ 23969,
+ 23972,
+ 23975,
+ 23979,
+ 23982,
+ 23985,
+ 23989,
+ 23992,
+ 23995,
+ 23999,
+ 24002,
+ 24005,
+ 24009,
+ 24012,
+ 24015,
+ 24019,
+ 24022,
+ 24025,
+ 24029,
+ 24032,
+ 24035,
+ 24039,
+ 24042,
+ 24045,
+ 24049,
+ 24052,
+ 24055,
+ 24059,
+ 24062,
+ 24065,
+ 24068,
+ 24072,
+ 24075,
+ 24078,
+ 24082,
+ 24085,
+ 24088,
+ 24092,
+ 24095,
+ 24098,
+ 24102,
+ 24105,
+ 24108,
+ 24112,
+ 24115,
+ 24118,
+ 24122,
+ 24125,
+ 24128,
+ 24132,
+ 24135,
+ 24138,
+ 24142,
+ 24145,
+ 24148,
+ 24152,
+ 24155,
+ 24158,
+ 24162,
+ 24165,
+ 24168,
+ 24171,
+ 24175,
+ 24178,
+ 24181,
+ 24185,
+ 24188,
+ 24191,
+ 24195,
+ 24198,
+ 24201,
+ 24205,
+ 24208,
+ 24211,
+ 24215,
+ 24218,
+ 24221,
+ 24225,
+ 24228,
+ 24231,
+ 24235,
+ 24238,
+ 24241,
+ 24245,
+ 24248,
+ 24251,
+ 24255,
+ 24258,
+ 24261,
+ 24264,
+ 24268,
+ 24271,
+ 24274,
+ 24278,
+ 24281,
+ 24284,
+ 24288,
+ 24291,
+ 24294,
+ 24298,
+ 24301,
+ 24304,
+ 24308,
+ 24311,
+ 24314,
+ 24318,
+ 24321,
+ 24324,
+ 24328,
+ 24331,
+ 24334,
+ 24338,
+ 24341,
+ 24344,
+ 24348,
+ 24351,
+ 24354,
+ 24358,
+ 24361,
+ 24364,
+ 24367,
+ 24371,
+ 24374,
+ 24377,
+ 24381,
+ 24384,
+ 24387,
+ 24391,
+ 24394,
+ 24397,
+ 24401,
+ 24404,
+ 24407,
+ 24411,
+ 24414,
+ 24417,
+ 24421,
+ 24424,
+ 24427,
+ 24431,
+ 24434,
+ 24437,
+ 24441,
+ 24444,
+ 24447,
+ 24451,
+ 24454,
+ 24457,
+ 24460,
+ 24464,
+ 24467,
+ 24470,
+ 24474,
+ 24477,
+ 24480,
+ 24484,
+ 24487,
+ 24490,
+ 24494,
+ 24497,
+ 24500,
+ 24504,
+ 24507,
+ 24510,
+ 24514,
+ 24517,
+ 24520,
+ 24524,
+ 24527,
+ 24530,
+ 24534,
+ 24537,
+ 24540,
+ 24544,
+ 24547,
+ 24550,
+ 24553,
+ 24557,
+ 24560,
+ 24563,
+ 24567,
+ 24570,
+ 24573,
+ 24577,
+ 24580,
+ 24583,
+ 24587,
+ 24590,
+ 24593,
+ 24597,
+ 24600,
+ 24603,
+ 24607,
+ 24610,
+ 24613,
+ 24617,
+ 24620,
+ 24623,
+ 24627,
+ 24630,
+ 24633,
+ 24637,
+ 24640,
+ 24643,
+ 24647,
+ 24650,
+ 24653,
+ 24656,
+ 24660,
+ 24663,
+ 24666,
+ 24670,
+ 24673,
+ 24676,
+ 24680,
+ 24683,
+ 24686,
+ 24690,
+ 24693,
+ 24696,
+ 24700,
+ 24703,
+ 24706,
+ 24710,
+ 24713,
+ 24716,
+ 24720,
+ 24723,
+ 24726,
+ 24730,
+ 24733,
+ 24736,
+ 24740,
+ 24743,
+ 24746,
+ 24749,
+ 24753,
+ 24756,
+ 24759,
+ 24763,
+ 24766,
+ 24769,
+ 24773,
+ 24776,
+ 24779,
+ 24783,
+ 24786,
+ 24789,
+ 24793,
+ 24796,
+ 24799,
+ 24803,
+ 24806,
+ 24809,
+ 24813,
+ 24816,
+ 24819,
+ 24823,
+ 24826,
+ 24829,
+ 24833,
+ 24836,
+ 24839,
+ 24843,
+ 24846,
+ 24849,
+ 24852,
+ 24856,
+ 24859,
+ 24862,
+ 24866,
+ 24869,
+ 24872,
+ 24876,
+ 24879,
+ 24882,
+ 24886,
+ 24889,
+ 24892,
+ 24896,
+ 24899,
+ 24902,
+ 24906,
+ 24909,
+ 24912,
+ 24916,
+ 24919,
+ 24922,
+ 24926,
+ 24929,
+ 24932,
+ 24936,
+ 24939,
+ 24942,
+ 24945,
+ 24949,
+ 24952,
+ 24955,
+ 24959,
+ 24962,
+ 24965,
+ 24969,
+ 24972,
+ 24975,
+ 24979,
+ 24982,
+ 24985,
+ 24989,
+ 24992,
+ 24995,
+ 24999,
+ 25002,
+ 25005,
+ 25009,
+ 25012,
+ 25015,
+ 25019,
+ 25022,
+ 25025,
+ 25029,
+ 25032,
+ 25035,
+ 25038,
+ 25042,
+ 25045,
+ 25048,
+ 25052,
+ 25055,
+ 25058,
+ 25062,
+ 25065,
+ 25068,
+ 25072,
+ 25075,
+ 25078,
+ 25082,
+ 25085,
+ 25088,
+ 25092,
+ 25095,
+ 25098,
+ 25102,
+ 25105,
+ 25108,
+ 25112,
+ 25115,
+ 25118,
+ 25122,
+ 25125,
+ 25128,
+ 25132,
+ 25135,
+ 25138,
+ 25141,
+ 25145,
+ 25148,
+ 25151,
+ 25155,
+ 25158,
+ 25161,
+ 25165,
+ 25168,
+ 25171,
+ 25175,
+ 25178,
+ 25181,
+ 25185,
+ 25188,
+ 25191,
+ 25195,
+ 25198,
+ 25201,
+ 25205,
+ 25208,
+ 25211,
+ 25215,
+ 25218,
+ 25221,
+ 25225,
+ 25228,
+ 25231,
+ 25234,
+ 25238,
+ 25241,
+ 25244,
+ 25248,
+ 25251,
+ 25254,
+ 25258,
+ 25261,
+ 25264,
+ 25268,
+ 25271,
+ 25274,
+ 25278,
+ 25281,
+ 25284,
+ 25288,
+ 25291,
+ 25294,
+ 25298,
+ 25301,
+ 25304,
+ 25308,
+ 25311,
+ 25314,
+ 25318,
+ 25321,
+ 25324,
+ 25328,
+ 25331,
+ 25334,
+ 25337,
+ 25341,
+ 25344,
+ 25347,
+ 25351,
+ 25354,
+ 25357,
+ 25361,
+ 25364,
+ 25367,
+ 25371,
+ 25374,
+ 25377,
+ 25381,
+ 25384,
+ 25387,
+ 25391,
+ 25394,
+ 25397,
+ 25401,
+ 25404,
+ 25407,
+ 25411,
+ 25414,
+ 25417,
+ 25421,
+ 25424,
+ 25427,
+ 25430,
+ 25434,
+ 25437,
+ 25440,
+ 25444,
+ 25447,
+ 25450,
+ 25454,
+ 25457,
+ 25460,
+ 25464,
+ 25467,
+ 25470,
+ 25474,
+ 25477,
+ 25480,
+ 25484,
+ 25487,
+ 25490,
+ 25494,
+ 25497,
+ 25500,
+ 25504,
+ 25507,
+ 25510,
+ 25514,
+ 25517,
+ 25520,
+ 25524,
+ 25527,
+ 25530,
+ 25533,
+ 25537,
+ 25540,
+ 25543,
+ 25547,
+ 25550,
+ 25553,
+ 25557,
+ 25560,
+ 25563,
+ 25567,
+ 25570,
+ 25573,
+ 25577,
+ 25580,
+ 25583,
+ 25587,
+ 25590,
+ 25593,
+ 25597,
+ 25600,
+ 25603,
+ 25607,
+ 25610,
+ 25613,
+ 25617,
+ 25620,
+ 25623,
+ 25626,
+ 25630,
+ 25633,
+ 25636,
+ 25640,
+ 25643,
+ 25646,
+ 25650,
+ 25653,
+ 25656,
+ 25660,
+ 25663,
+ 25666,
+ 25670,
+ 25673,
+ 25676,
+ 25680,
+ 25683,
+ 25686,
+ 25690,
+ 25693,
+ 25696,
+ 25700,
+ 25703,
+ 25706,
+ 25710,
+ 25713,
+ 25716,
+ 25719,
+ 25723,
+ 25726,
+ 25729,
+ 25733,
+ 25736,
+ 25739,
+ 25743,
+ 25746,
+ 25749,
+ 25753,
+ 25756,
+ 25759,
+ 25763,
+ 25766,
+ 25769,
+ 25773,
+ 25776,
+ 25779,
+ 25783,
+ 25786,
+ 25789,
+ 25793,
+ 25796,
+ 25799,
+ 25803,
+ 25806,
+ 25809,
+ 25813,
+ 25816,
+ 25819,
+ 25822,
+ 25826,
+ 25829,
+ 25832,
+ 25836,
+ 25839,
+ 25842,
+ 25846,
+ 25849,
+ 25852,
+ 25856,
+ 25859,
+ 25862,
+ 25866,
+ 25869,
+ 25872,
+ 25876,
+ 25879,
+ 25882,
+ 25886,
+ 25889,
+ 25892,
+ 25896,
+ 25899,
+ 25902,
+ 25906,
+ 25909,
+ 25912,
+ 25915,
+ 25919,
+ 25922,
+ 25925,
+ 25929,
+ 25932,
+ 25935,
+ 25939,
+ 25942,
+ 25945,
+ 25949,
+ 25952,
+ 25955,
+ 25959,
+ 25962,
+ 25965,
+ 25969,
+ 25972,
+ 25975,
+ 25979,
+ 25982,
+ 25985,
+ 25989,
+ 25992,
+ 25995,
+ 25999,
+ 26002,
+ 26005,
+ 26009,
+ 26012,
+ 26015,
+ 26018,
+ 26022,
+ 26025,
+ 26028,
+ 26032,
+ 26035,
+ 26038,
+ 26042,
+ 26045,
+ 26048,
+ 26052,
+ 26055,
+ 26058,
+ 26062,
+ 26065,
+ 26068,
+ 26072,
+ 26075,
+ 26078,
+ 26082,
+ 26085,
+ 26088,
+ 26092,
+ 26095,
+ 26098,
+ 26102,
+ 26105,
+ 26108,
+ 26111,
+ 26115,
+ 26118,
+ 26121,
+ 26125,
+ 26128,
+ 26131,
+ 26135,
+ 26138,
+ 26141,
+ 26145,
+ 26148,
+ 26151,
+ 26155,
+ 26158,
+ 26161,
+ 26165,
+ 26168,
+ 26171,
+ 26175,
+ 26178,
+ 26181,
+ 26185,
+ 26188,
+ 26191,
+ 26195,
+ 26198,
+ 26201,
+ 26204,
+ 26208,
+ 26211,
+ 26214,
+ 26218,
+ 26221,
+ 26224,
+ 26228,
+ 26231,
+ 26234,
+ 26238,
+ 26241,
+ 26244,
+ 26248,
+ 26251,
+ 26254,
+ 26258,
+ 26261,
+ 26264,
+ 26268,
+ 26271,
+ 26274,
+ 26278,
+ 26281,
+ 26284,
+ 26288,
+ 26291,
+ 26294,
+ 26298,
+ 26301,
+ 26304,
+ 26307,
+ 26311,
+ 26314,
+ 26317,
+ 26321,
+ 26324,
+ 26327,
+ 26331,
+ 26334,
+ 26337,
+ 26341,
+ 26344,
+ 26347,
+ 26351,
+ 26354,
+ 26357,
+ 26361,
+ 26364,
+ 26367,
+ 26371,
+ 26374,
+ 26377,
+ 26381,
+ 26384,
+ 26387,
+ 26391,
+ 26394,
+ 26397,
+ 26400,
+ 26404,
+ 26407,
+ 26410,
+ 26414,
+ 26417,
+ 26420,
+ 26424,
+ 26427,
+ 26430,
+ 26434,
+ 26437,
+ 26440,
+ 26444,
+ 26447,
+ 26450,
+ 26454,
+ 26457,
+ 26460,
+ 26464,
+ 26467,
+ 26470,
+ 26474,
+ 26477,
+ 26480,
+ 26484,
+ 26487,
+ 26490,
+ 26494,
+ 26497,
+ 26500,
+ 26503,
+ 26507,
+ 26510,
+ 26513,
+ 26517,
+ 26520,
+ 26523,
+ 26527,
+ 26530,
+ 26533,
+ 26537,
+ 26540,
+ 26543,
+ 26547,
+ 26550,
+ 26553,
+ 26557,
+ 26560,
+ 26563,
+ 26567,
+ 26570,
+ 26573,
+ 26577,
+ 26580,
+ 26583,
+ 26587,
+ 26590,
+ 26593,
+ 26596,
+ 26600,
+ 26603,
+ 26606,
+ 26610,
+ 26613,
+ 26616,
+ 26620,
+ 26623,
+ 26626,
+ 26630,
+ 26633,
+ 26636,
+ 26640,
+ 26643,
+ 26646,
+ 26650,
+ 26653,
+ 26656,
+ 26660,
+ 26663,
+ 26666,
+ 26670,
+ 26673,
+ 26676,
+ 26680,
+ 26683,
+ 26686,
+ 26689,
+ 26693,
+ 26696,
+ 26699,
+ 26703,
+ 26706,
+ 26709,
+ 26713,
+ 26716,
+ 26719,
+ 26723,
+ 26726,
+ 26729,
+ 26733,
+ 26736,
+ 26739,
+ 26743,
+ 26746,
+ 26749,
+ 26753,
+ 26756,
+ 26759,
+ 26763,
+ 26766,
+ 26769,
+ 26773,
+ 26776,
+ 26779,
+ 26783,
+ 26786,
+ 26789,
+ 26792,
+ 26796,
+ 26799,
+ 26802,
+ 26806,
+ 26809,
+ 26812,
+ 26816,
+ 26819,
+ 26822,
+ 26826,
+ 26829,
+ 26832,
+ 26836,
+ 26839,
+ 26842,
+ 26846,
+ 26849,
+ 26852,
+ 26856,
+ 26859,
+ 26862,
+ 26866,
+ 26869,
+ 26872,
+ 26876,
+ 26879,
+ 26882,
+ 26885,
+ 26889,
+ 26892,
+ 26895,
+ 26899,
+ 26902,
+ 26905,
+ 26909,
+ 26912,
+ 26915,
+ 26919,
+ 26922,
+ 26925,
+ 26929,
+ 26932,
+ 26935,
+ 26939,
+ 26942,
+ 26945,
+ 26949,
+ 26952,
+ 26955,
+ 26959,
+ 26962,
+ 26965,
+ 26969,
+ 26972,
+ 26975,
+ 26979,
+ 26982,
+ 26985,
+ 26988,
+ 26992,
+ 26995,
+ 26998,
+ 27002,
+ 27005,
+ 27008,
+ 27012,
+ 27015,
+ 27018,
+ 27022,
+ 27025,
+ 27028,
+ 27032,
+ 27035,
+ 27038,
+ 27042,
+ 27045,
+ 27048,
+ 27052,
+ 27055,
+ 27058,
+ 27062,
+ 27065,
+ 27068,
+ 27072,
+ 27075,
+ 27078,
+ 27081,
+ 27085,
+ 27088,
+ 27091,
+ 27095,
+ 27098,
+ 27101,
+ 27105,
+ 27108,
+ 27111,
+ 27115,
+ 27118,
+ 27121,
+ 27125,
+ 27128,
+ 27131,
+ 27135,
+ 27138,
+ 27141,
+ 27145,
+ 27148,
+ 27151,
+ 27155,
+ 27158,
+ 27161,
+ 27165,
+ 27168,
+ 27171,
+ 27174,
+ 27178,
+ 27181,
+ 27184,
+ 27188,
+ 27191,
+ 27194,
+ 27198,
+ 27201,
+ 27204,
+ 27208,
+ 27211,
+ 27214,
+ 27218,
+ 27221,
+ 27224,
+ 27228,
+ 27231,
+ 27234,
+ 27238,
+ 27241,
+ 27244,
+ 27248,
+ 27251,
+ 27254,
+ 27258,
+ 27261,
+ 27264,
+ 27268,
+ 27271,
+ 27274,
+ 27277,
+ 27281,
+ 27284,
+ 27287,
+ 27291,
+ 27294,
+ 27297,
+ 27301,
+ 27304,
+ 27307,
+ 27311,
+ 27314,
+ 27317,
+ 27321,
+ 27324,
+ 27327,
+ 27331,
+ 27334,
+ 27337,
+ 27341,
+ 27344,
+ 27347,
+ 27351,
+ 27354,
+ 27357,
+ 27361,
+ 27364,
+ 27367,
+ 27370,
+ 27374,
+ 27377,
+ 27380,
+ 27384,
+ 27387,
+ 27390,
+ 27394,
+ 27397,
+ 27400,
+ 27404,
+ 27407,
+ 27410,
+ 27414,
+ 27417,
+ 27420,
+ 27424,
+ 27427,
+ 27430,
+ 27434,
+ 27437,
+ 27440,
+ 27444,
+ 27447,
+ 27450,
+ 27454,
+ 27457,
+ 27460,
+ 27464,
+ 27467,
+ 27470,
+ 27473,
+ 27477,
+ 27480,
+ 27483,
+ 27487,
+ 27490,
+ 27493,
+ 27497,
+ 27500,
+ 27503,
+ 27507,
+ 27510,
+ 27513,
+ 27517,
+ 27520,
+ 27523,
+ 27527,
+ 27530,
+ 27533,
+ 27537,
+ 27540,
+ 27543,
+ 27547,
+ 27550,
+ 27553,
+ 27557,
+ 27560,
+ 27563,
+ 27566,
+ 27570,
+ 27573,
+ 27576,
+ 27580,
+ 27583,
+ 27586,
+ 27590,
+ 27593,
+ 27596,
+ 27600,
+ 27603,
+ 27606,
+ 27610,
+ 27613,
+ 27616,
+ 27620,
+ 27623,
+ 27626,
+ 27630,
+ 27633,
+ 27636,
+ 27640,
+ 27643,
+ 27646,
+ 27650,
+ 27653,
+ 27656,
+ 27660,
+ 27663,
+ 27666,
+ 27669,
+ 27673,
+ 27676,
+ 27679,
+ 27683,
+ 27686,
+ 27689,
+ 27693,
+ 27696,
+ 27699,
+ 27703,
+ 27706,
+ 27709,
+ 27713,
+ 27716,
+ 27719,
+ 27723,
+ 27726,
+ 27729,
+ 27733,
+ 27736,
+ 27739,
+ 27743,
+ 27746,
+ 27749,
+ 27753,
+ 27756,
+ 27759,
+ 27762,
+ 27766,
+ 27769,
+ 27772,
+ 27776,
+ 27779,
+ 27782,
+ 27786,
+ 27789,
+ 27792,
+ 27796,
+ 27799,
+ 27802,
+ 27806,
+ 27809,
+ 27812,
+ 27816,
+ 27819,
+ 27822,
+ 27826,
+ 27829,
+ 27832,
+ 27836,
+ 27839,
+ 27842,
+ 27846,
+ 27849,
+ 27852,
+ 27855,
+ 27859,
+ 27862,
+ 27865,
+ 27869,
+ 27872,
+ 27875,
+ 27879,
+ 27882,
+ 27885,
+ 27889,
+ 27892,
+ 27895,
+ 27899,
+ 27902,
+ 27905,
+ 27909,
+ 27912,
+ 27915,
+ 27919,
+ 27922,
+ 27925,
+ 27929,
+ 27932,
+ 27935,
+ 27939,
+ 27942,
+ 27945,
+ 27949,
+ 27952,
+ 27955,
+ 27958,
+ 27962,
+ 27965,
+ 27968,
+ 27972,
+ 27975,
+ 27978,
+ 27982,
+ 27985,
+ 27988,
+ 27992,
+ 27995,
+ 27998,
+ 28002,
+ 28005,
+ 28008,
+ 28012,
+ 28015,
+ 28018,
+ 28022,
+ 28025,
+ 28028,
+ 28032,
+ 28035,
+ 28038,
+ 28042,
+ 28045,
+ 28048,
+ 28051,
+ 28055,
+ 28058,
+ 28061,
+ 28065,
+ 28068,
+ 28071,
+ 28075,
+ 28078,
+ 28081,
+ 28085,
+ 28088,
+ 28091,
+ 28095,
+ 28098,
+ 28101,
+ 28105,
+ 28108,
+ 28111,
+ 28115,
+ 28118,
+ 28121,
+ 28125,
+ 28128,
+ 28131,
+ 28135,
+ 28138,
+ 28141,
+ 28145,
+ 28148,
+ 28151,
+ 28154,
+ 28158,
+ 28161,
+ 28164,
+ 28168,
+ 28171,
+ 28174,
+ 28178,
+ 28181,
+ 28184,
+ 28188,
+ 28191,
+ 28194,
+ 28198,
+ 28201,
+ 28204,
+ 28208,
+ 28211,
+ 28214,
+ 28218,
+ 28221,
+ 28224,
+ 28228,
+ 28231,
+ 28234,
+ 28238,
+ 28241,
+ 28244,
+ 28247,
+ 28251,
+ 28254,
+ 28257,
+ 28261,
+ 28264,
+ 28267,
+ 28271,
+ 28274,
+ 28277,
+ 28281,
+ 28284,
+ 28287,
+ 28291,
+ 28294,
+ 28297,
+ 28301,
+ 28304,
+ 28307,
+ 28311,
+ 28314,
+ 28317,
+ 28321,
+ 28324,
+ 28327,
+ 28331,
+ 28334,
+ 28337,
+ 28340,
+ 28344,
+ 28347,
+ 28350,
+ 28354,
+ 28357,
+ 28360,
+ 28364,
+ 28367,
+ 28370,
+ 28374,
+ 28377,
+ 28380,
+ 28384,
+ 28387,
+ 28390,
+ 28394,
+ 28397,
+ 28400,
+ 28404,
+ 28407,
+ 28410,
+ 28414,
+ 28417,
+ 28420,
+ 28424,
+ 28427,
+ 28430,
+ 28434,
+ 28437,
+ 28440,
+ 28443,
+ 28447,
+ 28450,
+ 28453,
+ 28457,
+ 28460,
+ 28463,
+ 28467,
+ 28470,
+ 28473,
+ 28477,
+ 28480,
+ 28483,
+ 28487,
+ 28490,
+ 28493,
+ 28497,
+ 28500,
+ 28503,
+ 28507,
+ 28510,
+ 28513,
+ 28517,
+ 28520,
+ 28523,
+ 28527,
+ 28530,
+ 28533,
+ 28536,
+ 28540,
+ 28543,
+ 28546,
+ 28550,
+ 28553,
+ 28556,
+ 28560,
+ 28563,
+ 28566,
+ 28570,
+ 28573,
+ 28576,
+ 28580,
+ 28583,
+ 28586,
+ 28590,
+ 28593,
+ 28596,
+ 28600,
+ 28603,
+ 28606,
+ 28610,
+ 28613,
+ 28616,
+ 28620,
+ 28623,
+ 28626,
+ 28630,
+ 28633,
+ 28636,
+ 28639,
+ 28643,
+ 28646,
+ 28649,
+ 28653,
+ 28656,
+ 28659,
+ 28663,
+ 28666,
+ 28669,
+ 28673,
+ 28676,
+ 28679,
+ 28683,
+ 28686,
+ 28689,
+ 28693,
+ 28696,
+ 28699,
+ 28703,
+ 28706,
+ 28709,
+ 28713,
+ 28716,
+ 28719,
+ 28723,
+ 28726,
+ 28729,
+ 28732,
+ 28736,
+ 28739,
+ 28742,
+ 28746,
+ 28749,
+ 28752,
+ 28756,
+ 28759,
+ 28762,
+ 28766,
+ 28769,
+ 28772,
+ 28776,
+ 28779,
+ 28782,
+ 28786,
+ 28789,
+ 28792,
+ 28796,
+ 28799,
+ 28802,
+ 28806,
+ 28809,
+ 28812,
+ 28816,
+ 28819,
+ 28822,
+ 28825,
+ 28829,
+ 28832,
+ 28835,
+ 28839,
+ 28842,
+ 28845,
+ 28849,
+ 28852,
+ 28855,
+ 28859,
+ 28862,
+ 28865,
+ 28869,
+ 28872,
+ 28875,
+ 28879,
+ 28882,
+ 28885,
+ 28889,
+ 28892,
+ 28895,
+ 28899,
+ 28902,
+ 28905,
+ 28909,
+ 28912,
+ 28915,
+ 28919,
+ 28922,
+ 28925,
+ 28928,
+ 28932,
+ 28935,
+ 28938,
+ 28942,
+ 28945,
+ 28948,
+ 28952,
+ 28955,
+ 28958,
+ 28962,
+ 28965,
+ 28968,
+ 28972,
+ 28975,
+ 28978,
+ 28982,
+ 28985,
+ 28988,
+ 28992,
+ 28995,
+ 28998,
+ 29002,
+ 29005,
+ 29008,
+ 29012,
+ 29015,
+ 29018,
+ 29021,
+ 29025,
+ 29028,
+ 29031,
+ 29035,
+ 29038,
+ 29041,
+ 29045,
+ 29048,
+ 29051,
+ 29055,
+ 29058,
+ 29061,
+ 29065,
+ 29068,
+ 29071,
+ 29075,
+ 29078,
+ 29081,
+ 29085,
+ 29088,
+ 29091,
+ 29095,
+ 29098,
+ 29101,
+ 29105,
+ 29108,
+ 29111,
+ 29115,
+ 29118,
+ 29121,
+ 29124,
+ 29128,
+ 29131,
+ 29134,
+ 29138,
+ 29141,
+ 29144,
+ 29148,
+ 29151,
+ 29154,
+ 29158,
+ 29161,
+ 29164,
+ 29168,
+ 29171,
+ 29174,
+ 29178,
+ 29181,
+ 29184,
+ 29188,
+ 29191,
+ 29194,
+ 29198,
+ 29201,
+ 29204,
+ 29208,
+ 29211,
+ 29214,
+ 29217,
+ 29221,
+ 29224,
+ 29227,
+ 29231,
+ 29234,
+ 29237,
+ 29241,
+ 29244,
+ 29247,
+ 29251,
+ 29254,
+ 29257,
+ 29261,
+ 29264,
+ 29267,
+ 29271,
+ 29274,
+ 29277,
+ 29281,
+ 29284,
+ 29287,
+ 29291,
+ 29294,
+ 29297,
+ 29301,
+ 29304,
+ 29307,
+ 29310,
+ 29314,
+ 29317,
+ 29320,
+ 29324,
+ 29327,
+ 29330,
+ 29334,
+ 29337,
+ 29340,
+ 29344,
+ 29347,
+ 29350,
+ 29354,
+ 29357,
+ 29360,
+ 29364,
+ 29367,
+ 29370,
+ 29374,
+ 29377,
+ 29380,
+ 29384,
+ 29387,
+ 29390,
+ 29394,
+ 29397,
+ 29400,
+ 29404,
+ 29407,
+ 29410,
+ 29413,
+ 29417,
+ 29420,
+ 29423,
+ 29427,
+ 29430,
+ 29433,
+ 29437,
+ 29440,
+ 29443,
+ 29447,
+ 29450,
+ 29453,
+ 29457,
+ 29460,
+ 29463,
+ 29467,
+ 29470,
+ 29473,
+ 29477,
+ 29480,
+ 29483,
+ 29487,
+ 29490,
+ 29493,
+ 29497,
+ 29500,
+ 29503,
+ 29506,
+ 29510,
+ 29513,
+ 29516,
+ 29520,
+ 29523,
+ 29526,
+ 29530,
+ 29533,
+ 29536,
+ 29540,
+ 29543,
+ 29546,
+ 29550,
+ 29553,
+ 29556,
+ 29560,
+ 29563,
+ 29566,
+ 29570,
+ 29573,
+ 29576,
+ 29580,
+ 29583,
+ 29586,
+ 29590,
+ 29593,
+ 29596,
+ 29600,
+ 29603,
+ 29606,
+ 29609,
+ 29613,
+ 29616,
+ 29619,
+ 29623,
+ 29626,
+ 29629,
+ 29633,
+ 29636,
+ 29639,
+ 29643,
+ 29646,
+ 29649,
+ 29653,
+ 29656,
+ 29659,
+ 29663,
+ 29666,
+ 29669,
+ 29673,
+ 29676,
+ 29679,
+ 29683,
+ 29686,
+ 29689,
+ 29693,
+ 29696,
+ 29699,
+ 29702,
+ 29706,
+ 29709,
+ 29712,
+ 29716,
+ 29719,
+ 29722,
+ 29726,
+ 29729,
+ 29732,
+ 29736,
+ 29739,
+ 29742,
+ 29746,
+ 29749,
+ 29752,
+ 29756,
+ 29759,
+ 29762,
+ 29766,
+ 29769,
+ 29772,
+ 29776,
+ 29779,
+ 29782,
+ 29786,
+ 29789,
+ 29792,
+ 29796,
+ 29799,
+ 29802,
+ 29805,
+ 29809,
+ 29812,
+ 29815,
+ 29819,
+ 29822,
+ 29825,
+ 29829,
+ 29832,
+ 29835,
+ 29839,
+ 29842,
+ 29845,
+ 29849,
+ 29852,
+ 29855,
+ 29859,
+ 29862,
+ 29865,
+ 29869,
+ 29872,
+ 29875,
+ 29879,
+ 29882,
+ 29885,
+ 29889,
+ 29892,
+ 29895,
+ 29898,
+ 29902,
+ 29905,
+ 29908,
+ 29912,
+ 29915,
+ 29918,
+ 29922,
+ 29925,
+ 29928,
+ 29932,
+ 29935,
+ 29938,
+ 29942,
+ 29945,
+ 29948,
+ 29952,
+ 29955,
+ 29958,
+ 29962,
+ 29965,
+ 29968,
+ 29972,
+ 29975,
+ 29978,
+ 29982,
+ 29985,
+ 29988,
+ 29991,
+ 29995,
+ 29998,
+ 30001,
+ 30005,
+ 30008,
+ 30011,
+ 30015,
+ 30018,
+ 30021,
+ 30025,
+ 30028,
+ 30031,
+ 30035,
+ 30038,
+ 30041,
+ 30045,
+ 30048,
+ 30051,
+ 30055,
+ 30058,
+ 30061,
+ 30065,
+ 30068,
+ 30071,
+ 30075,
+ 30078,
+ 30081,
+ 30085,
+ 30088,
+ 30091,
+ 30094,
+ 30098,
+ 30101,
+ 30104,
+ 30108,
+ 30111,
+ 30114,
+ 30118,
+ 30121,
+ 30124,
+ 30128,
+ 30131,
+ 30134,
+ 30138,
+ 30141,
+ 30144,
+ 30148,
+ 30151,
+ 30154,
+ 30158,
+ 30161,
+ 30164,
+ 30168,
+ 30171,
+ 30174,
+ 30178,
+ 30181,
+ 30184,
+ 30187,
+ 30191,
+ 30194,
+ 30197,
+ 30201,
+ 30204,
+ 30207,
+ 30211,
+ 30214,
+ 30217,
+ 30221,
+ 30224,
+ 30227,
+ 30231,
+ 30234,
+ 30237,
+ 30241,
+ 30244,
+ 30247,
+ 30251,
+ 30254,
+ 30257,
+ 30261,
+ 30264,
+ 30267,
+ 30271,
+ 30274,
+ 30277,
+ 30281,
+ 30284,
+ 30287,
+ 30290,
+ 30294,
+ 30297,
+ 30300,
+ 30304,
+ 30307,
+ 30310,
+ 30314,
+ 30317,
+ 30320,
+ 30324,
+ 30327,
+ 30330,
+ 30334,
+ 30337,
+ 30340,
+ 30344,
+ 30347,
+ 30350,
+ 30354,
+ 30357,
+ 30360,
+ 30364,
+ 30367,
+ 30370,
+ 30374,
+ 30377,
+ 30380,
+ 30383,
+ 30387,
+ 30390,
+ 30393,
+ 30397,
+ 30400,
+ 30403,
+ 30407,
+ 30410,
+ 30413,
+ 30417,
+ 30420,
+ 30423,
+ 30427,
+ 30430,
+ 30433,
+ 30437,
+ 30440,
+ 30443,
+ 30447,
+ 30450,
+ 30453,
+ 30457,
+ 30460,
+ 30463,
+ 30467,
+ 30470,
+ 30473,
+ 30476,
+ 30480,
+ 30483,
+ 30486,
+ 30490,
+ 30493,
+ 30496,
+ 30500,
+ 30503,
+ 30506,
+ 30510,
+ 30513,
+ 30516,
+ 30520,
+ 30523,
+ 30526,
+ 30530,
+ 30533,
+ 30536,
+ 30540,
+ 30543,
+ 30546,
+ 30550,
+ 30553,
+ 30556,
+ 30560,
+ 30563,
+ 30566,
+ 30570,
+ 30573,
+ 30576,
+ 30579,
+ 30583,
+ 30586,
+ 30589,
+ 30593,
+ 30596,
+ 30599,
+ 30603,
+ 30606,
+ 30609,
+ 30613,
+ 30616,
+ 30619,
+ 30623,
+ 30626,
+ 30629,
+ 30633,
+ 30636,
+ 30639,
+ 30643,
+ 30646,
+ 30649,
+ 30653,
+ 30656,
+ 30659,
+ 30663,
+ 30666,
+ 30669,
+ 30672,
+ 30676,
+ 30679,
+ 30682,
+ 30686,
+ 30689,
+ 30692,
+ 30696,
+ 30699,
+ 30702,
+ 30706,
+ 30709,
+ 30712,
+ 30716,
+ 30719,
+ 30722,
+ 30726,
+ 30729,
+ 30732,
+ 30736,
+ 30739,
+ 30742,
+ 30746,
+ 30749,
+ 30752,
+ 30756,
+ 30759,
+ 30762,
+ 30766,
+ 30769,
+ 30772,
+ 30775,
+ 30779,
+ 30782,
+ 30785,
+ 30789,
+ 30792,
+ 30795,
+ 30799,
+ 30802,
+ 30805,
+ 30809,
+ 30812,
+ 30815,
+ 30819,
+ 30822,
+ 30825,
+ 30829,
+ 30832,
+ 30835,
+ 30839,
+ 30842,
+ 30845,
+ 30849,
+ 30852,
+ 30855,
+ 30859,
+ 30862,
+ 30865,
+ 30868,
+ 30872,
+ 30875,
+ 30878,
+ 30882,
+ 30885,
+ 30888,
+ 30892,
+ 30895,
+ 30898,
+ 30902,
+ 30905,
+ 30908,
+ 30912,
+ 30915,
+ 30918,
+ 30922,
+ 30925,
+ 30928,
+ 30932,
+ 30935,
+ 30938,
+ 30942,
+ 30945,
+ 30948,
+ 30952,
+ 30955,
+ 30958,
+ 30961,
+ 30965,
+ 30968,
+ 30971,
+ 30975,
+ 30978,
+ 30981,
+ 30985,
+ 30988,
+ 30991,
+ 30995,
+ 30998,
+ 31001,
+ 31005,
+ 31008,
+ 31011,
+ 31015,
+ 31018,
+ 31021,
+ 31025,
+ 31028,
+ 31031,
+ 31035,
+ 31038,
+ 31041,
+ 31045,
+ 31048,
+ 31051,
+ 31055,
+ 31058,
+ 31061,
+ 31064,
+ 31068,
+ 31071,
+ 31074,
+ 31078,
+ 31081,
+ 31084,
+ 31088,
+ 31091,
+ 31094,
+ 31098,
+ 31101,
+ 31104,
+ 31108,
+ 31111,
+ 31114,
+ 31118,
+ 31121,
+ 31124,
+ 31128,
+ 31131,
+ 31134,
+ 31138,
+ 31141,
+ 31144,
+ 31148,
+ 31151,
+ 31154,
+ 31157,
+ 31161,
+ 31164,
+ 31167,
+ 31171,
+ 31174,
+ 31177,
+ 31181,
+ 31184,
+ 31187,
+ 31191,
+ 31194,
+ 31197,
+ 31201,
+ 31204,
+ 31207,
+ 31211,
+ 31214,
+ 31217,
+ 31221,
+ 31224,
+ 31227,
+ 31231,
+ 31234,
+ 31237,
+ 31241,
+ 31244,
+ 31247,
+ 31251,
+ 31254,
+ 31257,
+ 31260,
+ 31264,
+ 31267,
+ 31270,
+ 31274,
+ 31277,
+ 31280,
+ 31284,
+ 31287,
+ 31290,
+ 31294,
+ 31297,
+ 31300,
+ 31304,
+ 31307,
+ 31310,
+ 31314,
+ 31317,
+ 31320,
+ 31324,
+ 31327,
+ 31330,
+ 31334,
+ 31337,
+ 31340,
+ 31344,
+ 31347,
+ 31350,
+ 31353,
+ 31357,
+ 31360,
+ 31363,
+ 31367,
+ 31370,
+ 31373,
+ 31377,
+ 31380,
+ 31383,
+ 31387,
+ 31390,
+ 31393,
+ 31397,
+ 31400,
+ 31403,
+ 31407,
+ 31410,
+ 31413,
+ 31417,
+ 31420,
+ 31423,
+ 31427,
+ 31430,
+ 31433,
+ 31437,
+ 31440,
+ 31443,
+ 31446,
+ 31450,
+ 31453,
+ 31456,
+ 31460,
+ 31463,
+ 31466,
+ 31470,
+ 31473,
+ 31476,
+ 31480,
+ 31483,
+ 31486,
+ 31490,
+ 31493,
+ 31496,
+ 31500,
+ 31503,
+ 31506,
+ 31510,
+ 31513,
+ 31516,
+ 31520,
+ 31523,
+ 31526,
+ 31530,
+ 31533,
+ 31536,
+ 31540,
+ 31543,
+ 31546,
+ 31549,
+ 31553,
+ 31556,
+ 31559,
+ 31563,
+ 31566,
+ 31569,
+ 31573,
+ 31576,
+ 31579,
+ 31583,
+ 31586,
+ 31589,
+ 31593,
+ 31596,
+ 31599,
+ 31603,
+ 31606,
+ 31609,
+ 31613,
+ 31616,
+ 31619,
+ 31623,
+ 31626,
+ 31629,
+ 31633,
+ 31636,
+ 31639,
+ 31642,
+ 31646,
+ 31649,
+ 31652,
+ 31656,
+ 31659,
+ 31662,
+ 31666,
+ 31669,
+ 31672,
+ 31676,
+ 31679,
+ 31682,
+ 31686,
+ 31689,
+ 31692,
+ 31696,
+ 31699,
+ 31702,
+ 31706,
+ 31709,
+ 31712,
+ 31716,
+ 31719,
+ 31722,
+ 31726,
+ 31729,
+ 31732,
+ 31736,
+ 31739,
+ 31742,
+ 31745,
+ 31749,
+ 31752,
+ 31755,
+ 31759,
+ 31762,
+ 31765,
+ 31769,
+ 31772,
+ 31775,
+ 31779,
+ 31782,
+ 31785,
+ 31789,
+ 31792,
+ 31795,
+ 31799,
+ 31802,
+ 31805,
+ 31809,
+ 31812,
+ 31815,
+ 31819,
+ 31822,
+ 31825,
+ 31829,
+ 31832,
+ 31835,
+ 31838,
+ 31842,
+ 31845,
+ 31848,
+ 31852,
+ 31855,
+ 31858,
+ 31862,
+ 31865,
+ 31868,
+ 31872,
+ 31875,
+ 31878,
+ 31882,
+ 31885,
+ 31888,
+ 31892,
+ 31895,
+ 31898,
+ 31902,
+ 31905,
+ 31908,
+ 31912,
+ 31915,
+ 31918,
+ 31922,
+ 31925,
+ 31928,
+ 31931,
+ 31935,
+ 31938,
+ 31941,
+ 31945,
+ 31948,
+ 31951,
+ 31955,
+ 31958,
+ 31961,
+ 31965,
+ 31968,
+ 31971,
+ 31975,
+ 31978,
+ 31981,
+ 31985,
+ 31988,
+ 31991,
+ 31995,
+ 31998,
+ 32001,
+ 32005,
+ 32008,
+ 32011,
+ 32015,
+ 32018,
+ 32021,
+ 32025,
+ 32028,
+ 32031,
+ 32034,
+ 32038,
+ 32041,
+ 32044,
+ 32048,
+ 32051,
+ 32054,
+ 32058,
+ 32061,
+ 32064,
+ 32068,
+ 32071,
+ 32074,
+ 32078,
+ 32081,
+ 32084,
+ 32088,
+ 32091,
+ 32094,
+ 32098,
+ 32101,
+ 32104,
+ 32108,
+ 32111,
+ 32114,
+ 32118,
+ 32121,
+ 32124,
+ 32127,
+ 32131,
+ 32134,
+ 32137,
+ 32141,
+ 32144,
+ 32147,
+ 32151,
+ 32154,
+ 32157,
+ 32161,
+ 32164,
+ 32167,
+ 32171,
+ 32174,
+ 32177,
+ 32181,
+ 32184,
+ 32187,
+ 32191,
+ 32194,
+ 32197,
+ 32201,
+ 32204,
+ 32207,
+ 32211,
+ 32214,
+ 32217,
+ 32221,
+ 32224,
+ 32227,
+ 32230,
+ 32234,
+ 32237,
+ 32240,
+ 32244,
+ 32247,
+ 32250,
+ 32254,
+ 32257,
+ 32260,
+ 32264,
+ 32267,
+ 32270,
+ 32274,
+ 32277,
+ 32280,
+ 32284,
+ 32287,
+ 32290,
+ 32294,
+ 32297,
+ 32300,
+ 32304,
+ 32307,
+ 32310,
+ 32314,
+ 32317,
+ 32320,
+ 32323,
+ 32327,
+ 32330,
+ 32333,
+ 32337,
+ 32340,
+ 32343,
+ 32347,
+ 32350,
+ 32353,
+ 32357,
+ 32360,
+ 32363,
+ 32367,
+ 32370,
+ 32373,
+ 32377,
+ 32380,
+ 32383,
+ 32387,
+ 32390,
+ 32393,
+ 32397,
+ 32400,
+ 32403,
+ 32407,
+ 32410,
+ 32413,
+ 32417,
+ 32420,
+ 32423,
+ 32426,
+ 32430,
+ 32433,
+ 32436,
+ 32440,
+ 32443,
+ 32446,
+ 32450,
+ 32453,
+ 32456,
+ 32460,
+ 32463,
+ 32466,
+ 32470,
+ 32473,
+ 32476,
+ 32480,
+ 32483,
+ 32486,
+ 32490,
+ 32493,
+ 32496,
+ 32500,
+ 32503,
+ 32506,
+ 32510,
+ 32513,
+ 32516,
+ 32519,
+ 32523,
+ 32526,
+ 32529,
+ 32533,
+ 32536,
+ 32539,
+ 32543,
+ 32546,
+ 32549,
+ 32553,
+ 32556,
+ 32559,
+ 32563,
+ 32566,
+ 32569,
+ 32573,
+ 32576,
+ 32579,
+ 32583,
+ 32586,
+ 32589,
+ 32593,
+ 32596,
+ 32599,
+ 32603,
+ 32606,
+ 32609,
+ 32612,
+ 32616,
+ 32619,
+ 32622,
+ 32626,
+ 32629,
+ 32632,
+ 32636,
+ 32639,
+ 32642,
+ 32646,
+ 32649,
+ 32652,
+ 32656,
+ 32659,
+ 32662,
+ 32666,
+ 32669,
+ 32672,
+ 32676,
+ 32679,
+ 32682,
+ 32686,
+ 32689,
+ 32692,
+ 32696,
+ 32699,
+ 32702,
+ 32706,
+ 32709,
+ 32712,
+ 32715,
+ 32719,
+ 32722,
+ 32725,
+ 32729,
+ 32732,
+ 32735,
+ 32739,
+ 32742,
+ 32745,
+ 32749,
+ 32752,
+ 32755,
+ 32759,
+ 32762,
+ 32765,
+ 32769,
+ 32772,
+ 32775,
+ 32779,
+ 32782,
+ 32785,
+ 32789,
+ 32792,
+ 32795,
+ 32799,
+ 32802,
+ 32805,
+ 32808,
+ 32812,
+ 32815,
+ 32818,
+ 32822,
+ 32825,
+ 32828,
+ 32832,
+ 32835,
+ 32838,
+ 32842,
+ 32845,
+ 32848,
+ 32852,
+ 32855,
+ 32858,
+ 32862,
+ 32865,
+ 32868,
+ 32872,
+ 32875,
+ 32878,
+ 32882,
+};
+
+static const UINT256 multipliers1_binary80[] =
+ { {{12415850090107640902ull, 14557465677128539270ull,
+ 4938398379086257084ull, 5255184001115807319ull}},
+{{6296440575779775320ull, 18196832096410674088ull,
+ 1561311955430433451ull, 6568980001394759149ull}},
+{{7870550719724719149ull, 18134354102085954706ull,
+ 6563325962715429718ull, 8211225001743448936ull}},
+{{9530780218255337373ull, 6722285295376333787ull,
+ 4102078726697143574ull, 5132015626089655585ull}},
+{{7301789254391783812ull, 17626228656075193042ull,
+ 9739284426798817371ull, 6415019532612069481ull}},
+{{18350608604844505572ull, 17421099801666603398ull,
+ 16785791551925909618ull, 8018774415765086851ull}},
+{{6857444359600428079ull, 15499873394469015028ull,
+ 8185276710739999559ull, 5011734009853179282ull}},
+{{8571805449500535098ull, 14763155724658880881ull,
+ 1008223851570223641ull, 6264667512316474103ull}},
+{{15326442830303056777ull, 4618886600541437389ull,
+ 15095337869744943264ull, 7830834390395592628ull}},
+{{11884869778153104438ull, 2886804125338398368ull,
+ 211214131735813732ull, 4894271493997245393ull}},
+{{14856087222691380547ull, 3608505156672997960ull,
+ 4875703683097155069ull, 6117839367496556741ull}},
+{{123364954654674068ull, 9122317464268635355ull,
+ 10706315622298831740ull, 7647299209370695926ull}},
+{{16218004161155028957ull, 14924820452022672904ull,
+ 2079761245509381933ull, 4779562005856684954ull}},
+{{1825761127734234580ull, 4820967509746177419ull,
+ 11823073593741503225ull, 5974452507320856192ull}},
+{{16117259464949956936ull, 10637895405610109677ull,
+ 14778841992176879031ull, 7468065634151070240ull}},
+{{12379130174807417037ull, 13566213656147400404ull,
+ 9236776245110549394ull, 4667541021344418900ull}},
+{{15473912718509271297ull, 7734395033329474697ull,
+ 11545970306388186743ull, 5834426276680523625ull}},
+{{5507332842854425409ull, 5056307773234455468ull, 597404827703069717ull,
+ 7293032845850654532ull}},
+{{6884166053568031761ull, 10932070734970457239ull,
+ 746756034628837146ull, 9116291057313318165ull}},
+{{11220132811121101707ull, 11444230227783923678ull,
+ 2772565530856717168ull, 5697681910820823853ull}},
+{{4801793977046601325ull, 14305287784729904598ull,
+ 8077392931998284364ull, 7122102388526029816ull}},
+{{15225614508163027464ull, 17881609730912380747ull,
+ 10096741164997855455ull, 8902627985657537270ull}},
+{{7210166058388198213ull, 18093535109461319823ull,
+ 1698777209696271755ull, 5564142491035960794ull}},
+{{4401021554557859863ull, 18005232868399261875ull,
+ 11346843548975115502ull, 6955178113794950992ull}},
+{{889590924769936924ull, 13283169048644301536ull,
+ 14183554436218894378ull, 8693972642243688740ull}},
+{{555994327981210578ull, 12913666673830076364ull,
+ 18088093559491584794ull, 5433732901402305462ull}},
+{{694992909976513222ull, 6918711305432819647ull,
+ 13386744912509705185ull, 6792166126752881828ull}},
+{{14703799192752805239ull, 13260075150218412462ull,
+ 16733431140637131481ull, 8490207658441102285ull}},
+{{4578188477043115371ull, 1370017941245425933ull,
+ 12764237472111901128ull, 5306379786525688928ull}},
+{{10334421614731282117ull, 1712522426556782416ull,
+ 15955296840139876410ull, 6632974733157111160ull}},
+{{12918027018414102647ull, 11364025070050753828ull,
+ 1497376976465293896ull, 8291218416446388951ull}},
+{{17297138923363589962ull, 7102515668781721142ull,
+ 7853389637931890541ull, 5182011510278993094ull}},
+{{12398051617349711645ull, 13489830604404539332ull,
+ 593365010560087368ull, 6477514387848741368ull}},
+{{15497564521687139556ull, 16862288255505674165ull,
+ 741706263200109210ull, 8096892984810926710ull}},
+{{11991820835268156175ull, 15150616178118434257ull,
+ 14298624469782231968ull, 5060558115506829193ull}},
+{{1154717988803031506ull, 491526148938491206ull, 4038222531945626249ull,
+ 6325697644383536492ull}},
+{{10666769522858565191ull, 5226093704600501911ull,
+ 5047778164932032811ull, 7907122055479420615ull}},
+{{13584259979427685100ull, 960465556161619742ull,
+ 10072390380723602363ull, 4941951284674637884ull}},
+{{7756952937429830567ull, 15035640000484188390ull,
+ 12590487975904502953ull, 6177439105843297355ull}},
+{{472819134932512401ull, 4959491945323071776ull,
+ 11126423951453240788ull, 7721798882304121694ull}},
+{{295511959332820251ull, 12323054502681695668ull,
+ 2342328951230887588ull, 4826124301440076059ull}},
+{{369389949166025313ull, 15403818128352119585ull,
+ 16762969244320773197ull, 6032655376800095073ull}},
+{{5073423454884919546ull, 5419714605157985769ull,
+ 7118653500118802785ull, 7540819221000118842ull}},
+{{14700104705371544476ull, 14916536674292210865ull,
+ 9060844456001639644ull, 4713012013125074276ull}},
+{{4540072826432266883ull, 198926769155711966ull,
+ 11326055570002049556ull, 5891265016406342845ull}},
+{{14898463069895109412ull, 248658461444639957ull, 322511407220398233ull,
+ 7364081270507928557ull}},
+{{4788020782086723053ull, 4922509095233187851ull,
+ 5014825277452885695ull, 9205101588134910696ull}},
+{{686669979590507956ull, 9994097212161824263ull, 3134265798408053559ull,
+ 5753188492584319185ull}},
+{{14693395529770298657ull, 7880935496774892424ull,
+ 8529518266437454853ull, 7191485615730398981ull}},
+{{18366744412212873321ull, 14462855389396003434ull,
+ 15273583851474206470ull, 8989357019662998726ull}},
+{{16090901276060433730ull, 4427598599945114242ull,
+ 4934303888743991140ull, 5618348137289374204ull}},
+{{10890254558220766354ull, 5534498249931392803ull,
+ 6167879860929988925ull, 7022935171611717755ull}},
+{{9001132179348570039ull, 11529808830841628908ull,
+ 3098163807735098252ull, 8778668964514647194ull}},
+{{14849079648947632082ull, 16429502556130793875ull,
+ 6548038398261824311ull, 5486668102821654496ull}},
+{{13949663542757152199ull, 15925192176736104440ull,
+ 8185047997827280389ull, 6858335128527068120ull}},
+{{17437079428446440248ull, 6071432165637966838ull,
+ 10231309997284100487ull, 8572918910658835150ull}},
+{{6286488624351637251ull, 10712174131164811130ull,
+ 1782882729875174900ull, 5358074319161771969ull}},
+{{17081482817294322372ull, 13390217663956013912ull,
+ 6840289430771356529ull, 6697592898952214961ull}},
+{{2905109447908351349ull, 2902714024662853679ull,
+ 13162047806891583566ull, 8371991123690268701ull}},
+{{8733222432583801449ull, 15649254320696447261ull,
+ 10532122888520933680ull, 5232494452306417938ull}},
+{{15528214059157139716ull, 1114823827161007460ull,
+ 3941781573796391293ull, 6540618065383022423ull}},
+{{963523500236873028ull, 6005215802378647230ull, 315540948818101212ull,
+ 8175772581728778029ull}},
+{{14437260242930209355ull, 12976631913341430326ull,
+ 2503056102225007209ull, 5109857863580486268ull}},
+{{8823203266807985885ull, 2385731836394624196ull,
+ 3128820127781259012ull, 6387322329475607835ull}},
+{{11029004083509982357ull, 2982164795493280245ull,
+ 17746083215008737477ull, 7984152911844509793ull}},
+{{9198970561407432925ull, 4169696006396994105ull,
+ 4173772981739379067ull, 4990095569902818621ull}},
+{{16110399220186679060ull, 600433989568854727ull,
+ 9828902245601611738ull, 6237619462378523276ull}},
+{{15526313006805960921ull, 9973914523815844217ull,
+ 12286127807002014672ull, 7797024327973154095ull}},
+{{2786416601612643720ull, 6233696577384902636ull,
+ 14596358907017341026ull, 4873140204983221309ull}},
+{{3483020752015804650ull, 17015492758585904103ull,
+ 4410390578489512570ull, 6091425256229026637ull}},
+{{18188833995301919524ull, 12045993911377604320ull,
+ 10124674241539278617ull, 7614281570286283296ull}},
+{{11368021247063699703ull, 611217166969920844ull,
+ 6327921400962049136ull, 4758925981428927060ull}},
+{{14210026558829624628ull, 764021458712401055ull,
+ 7909901751202561420ull, 5948657476786158825ull}},
+{{13150847180109642881ull, 955026823390501319ull,
+ 14499063207430589679ull, 7435821845982698531ull}},
+{{15136808515209608657ull, 7514420792260145180ull,
+ 6756071495430424597ull, 4647388653739186582ull}},
+{{474266570302459205ull, 14004712008752569380ull,
+ 17668461406142806554ull, 5809235817173983227ull}},
+{{592833212878074006ull, 8282517974085935917ull,
+ 17473890739251120289ull, 7261544771467479034ull}},
+{{5352727534524980412ull, 14964833486034807800ull,
+ 12618991387209124553ull, 9076930964334348793ull}},
+{{3345454709078112758ull, 2435491901130673019ull, 969340589364620990ull,
+ 5673081852708967996ull}},
+{{18016876441629804659ull, 12267736913268117081ull,
+ 1211675736705776237ull, 7091352315886209995ull}},
+{{8686037496755092111ull, 1499613086302982640ull,
+ 15349652726164384009ull, 8864190394857762493ull}},
+{{5428773435471932570ull, 12466473225007833910ull,
+ 11899375963066433957ull, 5540118996786101558ull}},
+{{16009338831194691520ull, 1748033475977628675ull,
+ 5650847916978266639ull, 6925148745982626948ull}},
+{{15399987520565976496ull, 16020099900254199556ull,
+ 7063559896222833298ull, 8656435932478283685ull}},
+{{401620163498959502ull, 14624248456086262627ull,
+ 6720567944352964763ull, 5410272457798927303ull}},
+{{14337083259655863090ull, 13668624551680440379ull,
+ 3789023912013818050ull, 6762840572248659129ull}},
+{{13309668056142440958ull, 7862408652745774666ull,
+ 9347965908444660467ull, 8453550715310823911ull}},
+{{12930228553516413503ull, 2608162398752415214ull,
+ 12760007720418994648ull, 5283469197069264944ull}},
+{{6939413655040741070ull, 3260202998440519018ull,
+ 15950009650523743310ull, 6604336496336581180ull}},
+{{17897639105655702146ull, 13298625784905424580ull,
+ 1490767989445127521ull, 8255420620420726476ull}},
+{{1962652404180038033ull, 1394112087924808507ull,
+ 10155102030257980509ull, 5159637887762954047ull}},
+{{16288373560507211254ull, 6354326128333398537ull,
+ 8082191519395087732ull, 6449547359703692559ull}},
+{{6525408895351850355ull, 7942907660416748172ull,
+ 5491053380816471761ull, 8061934199629615699ull}},
+{{13301752596449682280ull, 16493532333828937367ull,
+ 1126065353796600898ull, 5038708874768509812ull}},
+{{12015504727134714946ull, 11393543380431395901ull,
+ 1407581692245751123ull, 6298386093460637265ull}},
+{{1184322853636229970ull, 9630243207111856973ull,
+ 6371163133734576808ull, 7872982616825796581ull}},
+{{3046044792736337684ull, 6018902004444910608ull,
+ 6287819967797804457ull, 4920614135516122863ull}},
+{{3807555990920422104ull, 12135313523983526164ull,
+ 3248088941319867667ull, 6150767669395153579ull}},
+{{4759444988650527630ull, 10557455886552019801ull,
+ 17895169231931998296ull, 7688459586743941973ull}},
+{{14503868163975049529ull, 6598409929095012375ull,
+ 13490323779171192887ull, 4805287241714963733ull}},
+{{13518149186541424007ull, 3636326392941377565ull,
+ 3027846668681827397ull, 6006609052143704667ull}},
+{{3062628427894616297ull, 9157094009604109861ull,
+ 17619866391134447958ull, 7508261315179630833ull}},
+{{4219985776647829138ull, 1111497737575180759ull,
+ 4094887466817948118ull, 4692663321987269271ull}},
+{{663296202382398518ull, 10612744208823751757ull, 506923315095047243ull,
+ 5865829152484086589ull}},
+{{5440806271405386052ull, 8654244242602301792ull,
+ 5245340162296196958ull, 7332286440605108236ull}},
+{{6801007839256732564ull, 1594433266398101432ull,
+ 6556675202870246198ull, 9165358050756385295ull}},
+{{4250629899535457853ull, 14831578846780977107ull,
+ 11015451029434985729ull, 5728348781722740809ull}},
+{{701601355991934412ull, 4704415503194057672ull,
+ 18380999805221120066ull, 7160435977153426011ull}},
+{{877001694989918015ull, 15103891415847347898ull,
+ 18364563738099012178ull, 8950544971441782514ull}},
+{{5159812077796086663ull, 14051618153331980340ull,
+ 16089538354739270515ull, 5594090607151114071ull}},
+{{6449765097245108329ull, 12952836673237587521ull,
+ 15500236924996700240ull, 6992613258938892589ull}},
+{{12673892389983773315ull, 16191045841546984401ull,
+ 5540238100963711588ull, 8740766573673615737ull}},
+{{1003653716098776466ull, 896031614112089443ull,
+ 14991863859170789503ull, 5462979108546009835ull}},
+{{15089625200405634295ull, 14955097572922275515ull,
+ 14128143805536098974ull, 6828723885682512294ull}},
+{{14250345482079654964ull, 9470499929298068586ull,
+ 8436807720065347910ull, 8535904857103140368ull}},
+{{13518151944727172257ull, 1307376437383904962ull,
+ 5273004825040842444ull, 5334940535689462730ull}},
+{{7674317894054189513ull, 1634220546729881203ull,
+ 15814628068155828863ull, 6668675669611828412ull}},
+{{4981211349140348987ull, 15877833738694515216ull,
+ 1321541011485234462ull, 8335844587014785516ull}},
+{{3113257093212718117ull, 5311960068256684106ull,
+ 10049335169033047347ull, 5209902866884240947ull}},
+{{13114943403370673454ull, 2028264066893467228ull,
+ 7949982942863921280ull, 6512378583605301184ull}},
+{{16393679254213341818ull, 2535330083616834035ull,
+ 9937478678579901600ull, 8140473229506626480ull}},
+{{7940206524669644684ull, 1584581302260521272ull,
+ 6210924174112438500ull, 5087795768441641550ull}},
+{{9925258155837055855ull, 1980726627825651590ull,
+ 16987027254495323933ull, 6359744710552051937ull}},
+{{3183200657941544011ull, 7087594303209452392ull,
+ 7398726012836991204ull, 7949680888190064922ull}},
+{{1989500411213465007ull, 13653118476360683553ull,
+ 9235889776450507406ull, 4968550555118790576ull}},
+{{7098561532444219163ull, 7843026058596078633ull,
+ 11544862220563134258ull, 6210688193898488220ull}},
+{{13484887933982661857ull, 580410536390322483ull,
+ 14431077775703917823ull, 7763360242373110275ull}},
+{{6122211949525469709ull, 7280285612885033408ull,
+ 6713580600601254687ull, 4852100151483193922ull}},
+{{7652764936906837136ull, 4488670997678903856ull,
+ 17615347787606344167ull, 6065125189353992402ull}},
+{{9565956171133546420ull, 999152728671241916ull,
+ 12795812697653154401ull, 7581406486692490503ull}},
+{{15202094643813242321ull, 12153685501487995957ull,
+ 14914911963674303356ull, 4738379054182806564ull}},
+{{5167560249484389189ull, 15192106876859994947ull,
+ 196895880883327579ull, 5922973817728508206ull}},
+{{1847764293428098582ull, 14378447577647605780ull,
+ 9469491887958935282ull, 7403717272160635257ull}},
+{{10378224720247337422ull, 13598215754457141516ull,
+ 17447647476042804311ull, 4627323295100397035ull}},
+{{12972780900309171777ull, 12386083674644038991ull,
+ 17197873326626117485ull, 5784154118875496294ull}},
+{{11604290106959076817ull, 1647546538022885027ull,
+ 12273969621427871049ull, 7230192648594370368ull}},
+{{9893676615271458117ull, 6671119190955994188ull,
+ 15342462026784838811ull, 9037740810742962960ull}},
+{{15406919921399437132ull, 1863606485133802415ull,
+ 9589038766740524257ull, 5648588006714351850ull}},
+{{14646963883321908510ull, 6941194124844640923ull,
+ 2762926421570879513ull, 7060735008392939813ull}},
+{{13697018835724997734ull, 13288178674483189058ull,
+ 8065344045390987295ull, 8825918760491174766ull}},
+{{13172322790755511488ull, 15222640699193075017ull,
+ 429154009941979155ull, 5516199225306984229ull}},
+{{2630345433162225648ull, 14416614855563955868ull,
+ 5148128530854861848ull, 6895249031633730286ull}},
+{{3287931791452782059ull, 18020768569454944835ull,
+ 15658532700423353118ull, 8619061289542162857ull}},
+{{18195858434153846451ull, 6651294337481952617ull,
+ 2869053910123513843ull, 5386913305963851786ull}},
+{{8909764987410144352ull, 3702431903425052868ull,
+ 12809689424509168112ull, 6733641632454814732ull}},
+{{11137206234262680440ull, 4628039879281316085ull,
+ 16012111780636460140ull, 8417052040568518415ull}},
+{{9266596905627869227ull, 12115896961405598361ull,
+ 16925098890538869443ull, 5260657525355324009ull}},
+{{16194932150462224438ull, 10533185183329610047ull,
+ 7321315557891423092ull, 6575821906694155012ull}},
+{{15631979169650392643ull, 13166481479162012559ull,
+ 9151644447364278865ull, 8219777383367693765ull}},
+{{16687516008672577258ull, 1311521896835175993ull,
+ 8025620788816368243ull, 5137360864604808603ull}},
+{{7024336955558557860ull, 15474460426326133704ull,
+ 5420339967593072399ull, 6421701080756010754ull}},
+{{8780421194448197325ull, 14731389514480279226ull,
+ 15998796996346116307ull, 8027126350945013442ull}},
+{{10099449264957511233ull, 6901275437336480564ull,
+ 14610934141143710596ull, 5016953969340633401ull}},
+{{12624311581196889041ull, 8626594296670600705ull,
+ 4428609621147474533ull, 6271192461675791752ull}},
+{{1945331421213947589ull, 15394928889265638786ull,
+ 5535762026434343166ull, 7838990577094739690ull}},
+{{5827518156686105147ull, 5010144537363636337ull,
+ 8071537284948852383ull, 4899369110684212306ull}},
+{{11896083714285019338ull, 1650994653277157517ull,
+ 866049569331289671ull, 6124211388355265383ull}},
+{{1035046587574110460ull, 15898801371878610609ull,
+ 14917620016946275800ull, 7655264235444081728ull}},
+{{12176119163302288798ull, 9936750857424131630ull,
+ 9323512510591422375ull, 4784540147152551080ull}},
+{{5996776917273085189ull, 7809252553352776634ull,
+ 11654390638239277969ull, 5980675183940688850ull}},
+{{16719343183446132294ull, 14373251710118358696ull,
+ 5344616260944321653ull, 7475843979925861063ull}},
+{{10449589489653832684ull, 11289125328037668137ull,
+ 10257914190731282889ull, 4672402487453663164ull}},
+{{17673672880494678759ull, 276348604764921459ull,
+ 12822392738414103612ull, 5840503109317078955ull}},
+{{17480405082190960545ull, 345435755956151824ull,
+ 11416304904590241611ull, 7300628886646348694ull}},
+{{3403762279029149065ull, 14266852750227353493ull,
+ 5047009093883026205ull, 9125786108307935868ull}},
+{{4433194433606912118ull, 11222625978105789885ull,
+ 12377752720531667186ull, 5703616317692459917ull}},
+{{10153179060436028051ull, 4804910435777461548ull,
+ 1637132845382420271ull, 7129520397115574897ull}},
+{{12691473825545035063ull, 1394452026294439031ull,
+ 6658102075155413243ull, 8911900496394468621ull}},
+{{14849700168606728771ull, 17012433580929882058ull,
+ 6467156806185827228ull, 5569937810246542888ull}},
+{{9338753173903635155ull, 2818797902452800957ull,
+ 8083946007732284036ull, 6962422262808178610ull}},
+{{16285127485806931848ull, 3523497378066001196ull,
+ 881560472810579237ull, 8703027828510223263ull}},
+{{954832641774556597ull, 4508028870504944700ull, 7468504323147693879ull,
+ 5439392392818889539ull}},
+{{1193540802218195746ull, 1023350069703792971ull,
+ 4723944385507229445ull, 6799240491023611924ull}},
+{{15326984058054908395ull, 5890873605557129117ull,
+ 5904930481884036806ull, 8499050613779514905ull}},
+{{11885208045498011699ull, 17516854058755369410ull,
+ 15219796597245992763ull, 5311906633612196815ull}},
+{{5633138020017738816ull, 17284381555016823859ull,
+ 14413059728130103050ull, 6639883292015246019ull}},
+{{2429736506594785615ull, 12382104906916254016ull,
+ 13404638641735240909ull, 8299854115019057524ull}},
+{{1518585316621741010ull, 10044658576036352712ull,
+ 17601271187939301376ull, 5187408821886910952ull}},
+{{1898231645777176262ull, 12555823220045440890ull,
+ 3554844911214575104ull, 6484261027358638691ull}},
+{{11596161594076246136ull, 15694779025056801112ull,
+ 18278614194300382592ull, 8105326284198298363ull}},
+{{7247600996297653835ull, 9809236890660500695ull,
+ 9118290862224045168ull, 5065828927623936477ull}},
+{{4447815226944679390ull, 12261546113325625869ull,
+ 16009549596207444364ull, 6332286159529920596ull}},
+{{10171455052108237141ull, 15326932641657032336ull,
+ 1565192921549753839ull, 7915357699412400746ull}},
+{{6357159407567648213ull, 16496861928676727066ull,
+ 5589931594395984053ull, 4947098562132750466ull}},
+{{17169821296314336074ull, 6786019355563745120ull,
+ 16210786529849755875ull, 6183873202665938082ull}},
+{{3015532546683368477ull, 3870838176027293497ull,
+ 11040111125457419036ull, 7729841503332422603ull}},
+{{13413922887745575058ull, 11642645896871834243ull,
+ 4594226444197192945ull, 4831150939582764127ull}},
+{{12155717591254580919ull, 718249315807629092ull,
+ 1131097036819103278ull, 6038938674478455159ull}},
+{{15194646989068226148ull, 10121183681614312173ull,
+ 15248929351306042809ull, 7548673343098068948ull}},
+{{11802497377381335295ull, 17854954847077414868ull,
+ 307208807711500947ull, 4717920839436293093ull}},
+{{14753121721726669118ull, 17707007540419380681ull,
+ 4995697028066764088ull, 5897401049295366366ull}},
+{{4606344096876172686ull, 3687015351814674236ull,
+ 15467993321938230919ull, 7371751311619207957ull}},
+{{5757930121095215857ull, 18443827245050506507ull,
+ 5499933597140624936ull, 9214689139524009947ull}},
+{{1292863316470815959ull, 11527392028156566567ull,
+ 1131615488999196633ull, 5759180712202506217ull}},
+{{15451137200870683660ull, 574181979913544496ull,
+ 6026205379676383696ull, 7198975890253132771ull}},
+{{867177427378802959ull, 717727474891930621ull, 2921070706168091716ull,
+ 8998719862816415964ull}},
+{{2847828901325445802ull, 9671951708662232446ull,
+ 11049041228209833130ull, 5624199914260259977ull}},
+{{12783158163511583060ull, 2866567598973014749ull,
+ 18422987553689679317ull, 7030249892825324971ull}},
+{{2143889649107315113ull, 8194895517143656341ull,
+ 18417048423684711242ull, 8787812366031656214ull}},
+{{3645774039905765898ull, 9733495716642173117ull,
+ 6898969246375556622ull, 5492382728769785134ull}},
+{{9168903568309595276ull, 2943497608947940588ull,
+ 17847083594824221586ull, 6865478410962231417ull}},
+{{11461129460386994095ull, 12902744048039701543ull,
+ 8473796438248113270ull, 8581848013702789272ull}},
+{{14080734940382953166ull, 3452529011597425560ull,
+ 5296122773905070794ull, 5363655008564243295ull}},
+{{17600918675478691457ull, 13539033301351557758ull,
+ 2008467448953950588ull, 6704568760705304119ull}},
+{{12777776307493588513ull, 16923791626689447198ull,
+ 16345642366474601947ull, 8380710950881630148ull}},
+{{3374424173756104917ull, 8271526757467210547ull, 992654442191850409ull,
+ 5237944344301018843ull}},
+{{18053088272477294858ull, 14951094465261401087ull,
+ 15075876108021976723ull, 6547430430376273553ull}},
+{{17954674322169230668ull, 14077182063149363455ull,
+ 5009787079745307192ull, 8184288037970341942ull}},
+{{18139200478996851024ull, 8798238789468352159ull,
+ 16966174980122980707ull, 5115180023731463713ull}},
+{{18062314580318675876ull, 6386112468408052295ull,
+ 7372660669871562172ull, 6393975029664329642ull}},
+{{17966207206970956941ull, 7982640585510065369ull,
+ 18439197874194228523ull, 7992468787080412052ull}},
+{{4311350476715766232ull, 2683307356730096904ull,
+ 2301126634516617019ull, 4995292991925257533ull}},
+{{5389188095894707790ull, 17189192251194784842ull,
+ 7488094311573159177ull, 6244116239906571916ull}},
+{{15959857156723160545ull, 7651432258711317340ull,
+ 9360117889466448972ull, 7805145299883214895ull}},
+{{751538686097199533ull, 14005517198549349146ull,
+ 12767602708557612463ull, 4878215812427009309ull}},
+{{10162795394476275224ull, 12895210479759298528ull,
+ 2124445330414851867ull, 6097769765533761637ull}},
+{{12703494243095344030ull, 11507327081271735256ull,
+ 7267242681445952738ull, 7622212206917202046ull}},
+{{7939683901934590019ull, 11803765444222222439ull,
+ 18377084731185884173ull, 4763882629323251278ull}},
+{{5312918858990849620ull, 919648749995614337ull,
+ 13747983877127579409ull, 5954853286654064098ull}},
+{{11252834592165949928ull, 5761246955921905825ull,
+ 7961607809554698453ull, 7443566608317580123ull}},
+{{115492592462636849ull, 5906622356664885093ull, 2670161871757992581ull,
+ 4652229130198487577ull}},
+{{4756051759005683966ull, 11994963964258494270ull,
+ 7949388358124878630ull, 5815286412748109471ull}},
+{{15168436735611880765ull, 5770332918468342029ull,
+ 5325049429228710384ull, 7269108015935136839ull}},
+{{5125487864232687244ull, 7212916148085427537ull,
+ 2044625768108500076ull, 9086385019918921049ull}},
+{{14732644961213899288ull, 13731444629408168018ull,
+ 12807106151136282307ull, 5678990637449325655ull}},
+{{9192434164662598301ull, 12552619768332822119ull,
+ 11397196670492964980ull, 7098738296811657069ull}},
+{{6878856687400859973ull, 15690774710416027649ull,
+ 411437782834042513ull, 8873422871014571337ull}},
+{{15828500475694007243ull, 2889205166368935424ull,
+ 11786363660339746331ull, 5545889294384107085ull}},
+{{1338881520907957438ull, 17446564513243332993ull,
+ 897896520142519201ull, 6932361617980133857ull}},
+{{6285287919562334701ull, 7973147586272002529ull,
+ 5734056668605536906ull, 8665452022475167321ull}},
+{{15457519995794928948ull, 9594903259847389484ull,
+ 15113000463946930326ull, 5415907514046979575ull}},
+{{875155921034109569ull, 2770257037954461048ull,
+ 14279564561506275004ull, 6769884392558724469ull}},
+{{1093944901292636962ull, 3462821297443076310ull,
+ 4014397646600680043ull, 8462355490698405587ull}},
+{{14518773618590061813ull, 18305164375397780357ull,
+ 203155519911731074ull, 5288972181686503492ull}},
+{{4313408967955413554ull, 13658083432392449639ull,
+ 253944399889663843ull, 6611215227108129365ull}},
+{{780075191516879039ull, 12460918272063174145ull,
+ 4929116518289467708ull, 8264019033885161706ull}},
+{{12016762040766519159ull, 17011445956894259648ull,
+ 7692383842358305221ull, 5165011896178226066ull}},
+{{15020952550958148949ull, 7429249390835660848ull,
+ 392107766093105719ull, 6456264870222782583ull}},
+{{329446614988134570ull, 4674875720117188157ull,
+ 14325192762898545861ull, 8070331087778478228ull}},
+{{2511747143581278059ull, 5227640334286936550ull,
+ 18176617513666366971ull, 5043956929861548892ull}},
+{{12363055966331373381ull, 1922864399431282783ull,
+ 4274027818373407098ull, 6304946162326936116ull}},
+{{10842133939486828822ull, 11626952536143879287ull,
+ 5342534772966758872ull, 7881182702908670145ull}},
+{{13693862739820349870ull, 7266845335089924554ull,
+ 14868299279172694055ull, 4925739189317918840ull}},
+{{7893956387920661530ull, 4471870650435017789ull, 138630025256315953ull,
+ 6157173986647398551ull}},
+{{14479131503328214816ull, 10201524331471160140ull,
+ 14008345586852558653ull, 7696467483309248188ull}},
+{{18272829226434910068ull, 8681795716383169039ull,
+ 17978588028637624966ull, 4810292177068280117ull}},
+{{18229350514616249681ull, 1628872608624185491ull,
+ 8638176980514867496ull, 6012865221335350147ull}},
+{{18175002124842924197ull, 2036090760780231864ull,
+ 6186035207216196466ull, 7516081526669187684ull}},
+{{11359376328026827623ull, 5884242743915032819ull,
+ 13089644041364898599ull, 4697550954168242302ull}},
+{{9587534391606146625ull, 2743617411466403120ull,
+ 7138683014851347441ull, 5871938692710302878ull}},
+{{11984417989507683281ull, 8041207782760391804ull,
+ 18146725805418960109ull, 7339923365887878597ull}},
+{{14980522486884604101ull, 14663195746877877659ull,
+ 8848349201491536424ull, 9174904207359848247ull}},
+{{7056983545089183612ull, 9164497341798673537ull,
+ 12447747278573292121ull, 5734315129599905154ull}},
+{{13432915449788867418ull, 16067307695675729825ull,
+ 6336312061361839343ull, 7167893911999881443ull}},
+{{2956086256953920561ull, 15472448601167274378ull,
+ 3308704058274911275ull, 8959867389999851804ull}},
+{{6459239929023588255ull, 7364437366515852534ull,
+ 11291312073276595355ull, 5599917118749907377ull}},
+{{17297421948134261126ull, 4593860689717427763ull,
+ 279082036313580482ull, 6999896398437384222ull}},
+{{17010091416740438504ull, 14965697899001560512ull,
+ 9572224582246751410ull, 8749870498046730277ull}},
+{{10631307135462774065ull, 13965247205303363224ull,
+ 8288483373117913583ull, 5468669061279206423ull}},
+{{13289133919328467581ull, 12844872988201816126ull,
+ 5748918197970004075ull, 6835836326599008029ull}},
+{{7388045362305808668ull, 11444405216824882254ull,
+ 11797833765889892998ull, 8544795408248760036ull}},
+{{5842333013742514ull, 2541067242088163505ull, 16597018140535958932ull,
+ 5340497130155475022ull}},
+{{4618988934694566046ull, 3176334052610204381ull,
+ 11522900638815172857ull, 6675621412694343778ull}},
+{{10385422186795595462ull, 8582103584190143380ull,
+ 5180253761664190263ull, 8344526765867929723ull}},
+{{15714260903602022972ull, 12281343767759921468ull,
+ 931815591826424962ull, 5215329228667456077ull}},
+{{1196082055792977098ull, 6128307672845126028ull,
+ 5776455508210419107ull, 6519161535834320096ull}},
+{{1495102569741221373ull, 3048698572629019631ull,
+ 7220569385263023884ull, 8148951919792900120ull}},
+{{7851968133729345214ull, 11128808644747913077ull,
+ 4512855865789389927ull, 5093094949870562575ull}},
+{{14426646185589069422ull, 9299324787507503442ull,
+ 1029383813809349505ull, 6366368687338203219ull}},
+{{8809935695131560969ull, 16235842002811767207ull,
+ 15121787822543850593ull, 7957960859172754023ull}},
+{{12423738837098307462ull, 3229872224116272648ull,
+ 16368646416730988477ull, 4973725536982971264ull}},
+{{15529673546372884327ull, 8649026298572728714ull,
+ 2014063947204183980ull, 6217156921228714081ull}},
+{{10188719896111329601ull, 10811282873215910893ull,
+ 7129265952432617879ull, 7771446151535892601ull}},
+{{8673792944283274953ull, 13674580823401026164ull,
+ 15985006266338855934ull, 4857153844709932875ull}},
+{{10842241180354093691ull, 7869853992396506897ull,
+ 15369571814496182014ull, 6071442305887416094ull}},
+{{18164487493870005017ull, 613945453640857813ull,
+ 9988592731265451710ull, 7589302882359270118ull}},
+{{13658647692882447088ull, 14218773963807699845ull,
+ 1631184438613519414ull, 4743314301474543824ull}},
+{{3238251560820895148ull, 8550095417904848999ull,
+ 2038980548266899268ull, 5929142876843179780ull}},
+{{17882872506308282647ull, 10687619272381061248ull,
+ 2548725685333624085ull, 7411428596053974725ull}},
+{{11176795316442676654ull, 8985605054451857232ull,
+ 3898796562547209005ull, 4632142872533734203ull}},
+{{13970994145553345818ull, 15843692336492209444ull,
+ 261809684756623352ull, 5790178590667167754ull}},
+{{17463742681941682272ull, 1357871346905710189ull,
+ 9550634142800554999ull, 7237723238333959692ull}},
+{{7994620297144939128ull, 15532397238914301449ull,
+ 11938292678500693748ull, 9047154047917449615ull}},
+{{16525852731784056715ull, 484376237466662597ull,
+ 14378961951704015449ull, 5654471279948406009ull}},
+{{6822257859447907182ull, 5217156315260716151ull,
+ 4138644384347855599ull, 7068089099935507512ull}},
+{{3916136305882496073ull, 1909759375648507285ull,
+ 5173305480434819499ull, 8835111374919384390ull}},
+{{4753428200390253998ull, 17334500674276174717ull,
+ 17068373980553925898ull, 5521944609324615243ull}},
+{{10553471268915205401ull, 12444753805990442588ull,
+ 16723781457265019469ull, 6902430761655769054ull}},
+{{13191839086144006752ull, 1720884202205889523ull,
+ 11681354784726498529ull, 8628038452069711318ull}},
+{{5939056419626310268ull, 12604767672447150712ull,
+ 2689160722026673676ull, 5392524032543569574ull}},
+{{7423820524532887835ull, 15755959590558938390ull,
+ 12584822939388117903ull, 6740655040679461967ull}},
+{{56403618811333985ull, 15083263469771285084ull,
+ 11119342655807759475ull, 8425818800849327459ull}},
+{{9258624298611859549ull, 7121196659393359225ull,
+ 4643746150666155720ull, 5266136750530829662ull}},
+{{16184966391692212340ull, 8901495824241699031ull,
+ 15028054725187470458ull, 6582670938163537077ull}},
+{{15619521971187877521ull, 1903497743447347981ull,
+ 4950010351202174361ull, 8228338672704421347ull}},
+{{12068044241206117403ull, 12718901135723062248ull,
+ 787913460287665023ull, 5142711670440263342ull}},
+{{15085055301507646754ull, 11286940401226439906ull,
+ 10208263862214357087ull, 6428389588050329177ull}},
+{{9632947090029782634ull, 9496989483105661979ull,
+ 17372015846195334263ull, 8035486985062911471ull}},
+{{3714748922054920194ull, 12853147454582120593ull,
+ 17775038931513165770ull, 5022179365664319669ull}},
+{{9255122170996038147ull, 6843062281372874933ull,
+ 8383740609109293501ull, 6277724207080399587ull}},
+{{16180588732172435587ull, 13165513870143481570ull,
+ 5867989742959228972ull, 7847155258850499484ull}},
+{{14724553976035160146ull, 17451818205694451789ull,
+ 12890865626204293915ull, 4904472036781562177ull}},
+{{4570634414761786471ull, 17203086738690676833ull,
+ 2278523977473203682ull, 6130590045976952722ull}},
+{{10324979036879620992ull, 12280486386508570233ull,
+ 12071527008696280411ull, 7663237557471190902ull}},
+{{17982326944118232880ull, 5369460982354162443ull,
+ 2933018362007787353ull, 4789523473419494314ull}},
+{{17866222661720403196ull, 11323512246370090958ull,
+ 12889644989364509999ull, 5986904341774367892ull}},
+{{13109406290295728187ull, 9542704289535225794ull,
+ 16112056236705637499ull, 7483630427217959865ull}},
+{{12805064949862218021ull, 3658347171745822169ull,
+ 3152506120299941581ull, 4677269017011224916ull}},
+{{2171273132045608814ull, 9184619983109665616ull,
+ 3940632650374926976ull, 5846586271264031145ull}},
+{{2714091415057011018ull, 11480774978887082020ull,
+ 9537476831396046624ull, 7308232839080038931ull}},
+{{3392614268821263772ull, 14350968723608852525ull,
+ 7310160020817670376ull, 9135291048850048664ull}},
+{{4426226927226983810ull, 8969355452255532828ull,
+ 4568850013011043985ull, 5709556905531280415ull}},
+{{5532783659033729762ull, 15823380333746803939ull,
+ 1099376497836417077ull, 7136946131914100519ull}},
+{{2304293555364774299ull, 5944167361901341212ull,
+ 15209278677577685059ull, 8921182664892625648ull}},
+{{10663555508957759745ull, 1409261591974644305ull,
+ 9505799173486053162ull, 5575739165557891030ull}},
+{{17941130404624587585ull, 10984949026823081189ull,
+ 2658876930002790644ull, 6969673956947363788ull}},
+{{8591354950498570769ull, 13731186283528851487ull,
+ 3323596162503488305ull, 8712092446184204735ull}},
+{{12287125871702688587ull, 1664462399564450323ull,
+ 8994776629205762047ull, 5445057778865127959ull}},
+{{10747221321200972829ull, 15915636054737726616ull,
+ 6631784768079814654ull, 6806322223581409949ull}},
+{{13434026651501216037ull, 10671173031567382462ull,
+ 12901416978527156222ull, 8507902779476762436ull}},
+{{3784580638760872119ull, 2057797126302226135ull,
+ 17286757648434248447ull, 5317439237172976522ull}},
+{{119039780023702245ull, 16407304463159946381ull,
+ 12385075023688034750ull, 6646799046466220653ull}},
+{{4760485743457015710ull, 11285758542095157168ull,
+ 1646285724327879726ull, 8308498808082775817ull}},
+{{2975303589660634819ull, 2441913070382085326ull,
+ 12558143623773394589ull, 5192811755051734885ull}},
+{{12942501523930569331ull, 7664077356404994561ull,
+ 1862621474434579524ull, 6491014693814668607ull}},
+{{2343068849631047952ull, 9580096695506243202ull,
+ 16163334898325388117ull, 8113768367268335758ull}},
+{{6076104049446792874ull, 8293403443905095953ull,
+ 5490398293025979669ull, 5071105229542709849ull}},
+{{12206816080235878997ull, 14978440323308757845ull,
+ 11474683884709862490ull, 6338881536928387311ull}},
+{{1423462045012685034ull, 9499678367281171499ull,
+ 9731668837459940209ull, 7923601921160484139ull}},
+{{17030564842628785810ull, 17466514025619201946ull,
+ 3776450014198768678ull, 4952251200725302587ull}},
+{{12064834016431206455ull, 12609770495169226625ull,
+ 108876499321072944ull, 6190314000906628234ull}},
+{{1245984465256844356ull, 15762213118961533282ull,
+ 9359467661006116988ull, 7737892501133285292ull}},
+{{5390426309212915627ull, 628011162496182493ull,
+ 15073039324983598926ull, 4836182813208303307ull}},
+{{11349718904943532437ull, 10008385989975003924ull,
+ 14229613137802110753ull, 6045228516510379134ull}},
+{{14187148631179415547ull, 17122168505896142809ull,
+ 8563644385397862633ull, 7556535645637973918ull}},
+{{1949438866846052861ull, 3783826288544007400ull, 740591722446276242ull,
+ 4722834778523733699ull}},
+{{2436798583557566076ull, 13953154897534785058ull,
+ 14760797708340009014ull, 5903543473154667123ull}},
+{{12269370266301733403ull, 8218071585063705514ull,
+ 13839311116997623364ull, 7379429341443333904ull}},
+{{12280042434865971281ull, 14359666777519591754ull,
+ 8649569448123514602ull, 4612143338402083690ull}},
+{{6126681006727688293ull, 8726211435044713885ull,
+ 1588589773299617445ull, 5765179173002604613ull}},
+{{12270037276836998270ull, 15519450312233280260ull,
+ 6597423235051909710ull, 7206473966253255766ull}},
+{{15337546596046247838ull, 10175940853436824517ull,
+ 17470151080669662946ull, 9008092457816569707ull}},
+{{11891809631742598851ull, 10971649051825403227ull,
+ 8613001416204845389ull, 5630057786135356067ull}},
+{{10253076021250860659ull, 18326247333209141938ull,
+ 6154565751828668832ull, 7037572232669195084ull}},
+{{3592972989708800016ull, 4461065092801875807ull,
+ 7693207189785836041ull, 8796965290836493855ull}},
+{{9163137146209081866ull, 14317380729069642139ull,
+ 11725783521257229381ull, 5498103306772808659ull}},
+{{6842235414333964429ull, 4061667856054888962ull,
+ 10045543383144148823ull, 6872629133466010824ull}},
+{{17776166304772231344ull, 465398801641223298ull,
+ 12556929228930186029ull, 8590786416832513530ull}},
+{{15721789958910032494ull, 2596717260239458513ull,
+ 12459766786508754172ull, 5369241510520320956ull}},
+{{5817179393355376905ull, 3245896575299323142ull,
+ 15574708483135942715ull, 6711551888150401195ull}},
+{{16494846278548996939ull, 17892428774406317639ull,
+ 14856699585492540489ull, 8389439860188001494ull}},
+{{17226807951734204943ull, 4265238956362866668ull,
+ 4673751222505449902ull, 5243399912617500934ull}},
+{{3086765865958204563ull, 14554920732308359144ull,
+ 15065561064986588185ull, 6554249890771876167ull}},
+{{3858457332447755704ull, 4358592860103285218ull,
+ 14220265312805847328ull, 8192812363464845209ull}},
+{{7023221851207235219ull, 2724120537564553261ull,
+ 1970136792862572724ull, 5120507727165528256ull}},
+{{13390713332436431928ull, 3405150671955691576ull,
+ 2462670991078215905ull, 6400634658956910320ull}},
+{{16738391665545539909ull, 8868124358372002374ull,
+ 3078338738847769881ull, 8000793323696137900ull}},
+{{5849808772538574540ull, 17071792770050971244ull,
+ 11147333748634631983ull, 5000495827310086187ull}},
+{{7312260965673218174ull, 16728054944136326151ull,
+ 9322481167365902075ull, 6250619784137607734ull}},
+{{4528640188664134814ull, 16298382661743019785ull,
+ 2429729422352601786ull, 7813274730172009668ull}},
+{{14359615163983554019ull, 14798175182016775269ull,
+ 10741952925825151924ull, 4883296706357506042ull}},
+{{4114460899697278811ull, 50974903811417471ull, 4204069120426664098ull,
+ 6104120882946882553ull}},
+{{531390106194210610ull, 9287090666619047647ull, 9866772418960718026ull,
+ 7630151103683603191ull}},
+{{7249647844012463487ull, 10416117685064292683ull,
+ 13084261789491530622ull, 4768844439802251994ull}},
+{{4450373786588191455ull, 3796775069475590046ull,
+ 7131955200009637470ull, 5961055549752814993ull}},
+{{14786339270090015127ull, 13969340873699263365ull,
+ 13526630018439434741ull, 7451319437191018741ull}},
+{{11547305053019953406ull, 11036681055275733555ull,
+ 10759986770738340665ull, 4657074648244386713ull}},
+{{9822445297847553854ull, 18407537337522054848ull,
+ 18061669481850313735ull, 5821343310305483391ull}},
+{{12278056622309442317ull, 18397735653475180656ull,
+ 17965400833885504265ull, 7276679137881854239ull}},
+{{15347570777886802897ull, 9162111511561812108ull,
+ 17845065023929492428ull, 9095848922352317799ull}},
+{{368859699324476003ull, 14949691731580908376ull,
+ 18070694667597014623ull, 5684905576470198624ull}},
+{{461074624155595003ull, 14075428646048747566ull,
+ 4141624260786716663ull, 7106131970587748281ull}},
+{{9799715317049269562ull, 12982599789133546553ull,
+ 9788716344410783733ull, 8882664963234685351ull}},
+{{17654037119224263236ull, 10419967877422160547ull,
+ 13035476742897821689ull, 5551665602021678344ull}},
+{{17455860380602941141ull, 17636645865205088588ull,
+ 16294345928622277111ull, 6939582002527097930ull}},
+{{3373081402044124810ull, 17434121313078972832ull,
+ 11144560373923070581ull, 8674477503158872413ull}},
+{{2108175876277578007ull, 13202168829888051972ull,
+ 9271193242915613065ull, 5421548439474295258ull}},
+{{2635219845346972508ull, 2667652982077901253ull,
+ 2365619516789740524ull, 6776935549342869073ull}},
+{{7905710825111103539ull, 3334566227597376566ull,
+ 7568710414414563559ull, 8471169436678586341ull}},
+{{329383247267051808ull, 9001632919889442210ull, 7036287018222796176ull,
+ 5294480897924116463ull}},
+{{9635101095938590568ull, 11252041149861802762ull,
+ 4183672754351107316ull, 6618101122405145579ull}},
+{{2820504333068462402ull, 14065051437327253453ull,
+ 617904924511496241ull, 8272626403006431974ull}},
+{{4068658217381482953ull, 1873128120688451552ull,
+ 14221248633101848863ull, 5170391501879019983ull}},
+{{5085822771726853692ull, 16176468206142728152ull,
+ 13164874772949923174ull, 6462989377348774979ull}},
+{{6357278464658567114ull, 10997213220823634382ull,
+ 11844407447760016064ull, 8078736721685968724ull}},
+{{17808357095693768159ull, 6873258263014771488ull,
+ 16626126691704785848ull, 5049210451053730452ull}},
+{{3813702295907658582ull, 8591572828768464361ull,
+ 2335914290921430694ull, 6311513063817163066ull}},
+{{9378813888311961132ull, 1516093999105804643ull,
+ 12143264900506564176ull, 7889391329771453832ull}},
+{{3555915670981281755ull, 947558749441127902ull, 7589540562816602610ull,
+ 4930869581107158645ull}},
+{{13668266625581378002ull, 10407820473656185685ull,
+ 14098611721948141166ull, 6163586976383948306ull}},
+{{3250275226694558791ull, 3786403555215456299ull,
+ 8399892615580400650ull, 7704483720479935383ull}},
+{{18172323081179956908ull, 6978188240437048090ull,
+ 12167461912378832262ull, 4815302325299959614ull}},
+{{13492031814620170327ull, 17946107337401085921ull,
+ 5985955353618764519ull, 6019127906624949518ull}},
+{{3029981712993049197ull, 17820948153323969498ull,
+ 16705816228878231457ull, 7523909883281186897ull}},
+{{6505424589048043652ull, 4220563568186399080ull,
+ 3523606115407812805ull, 4702443677050741811ull}},
+{{8131780736310054565ull, 9887390478660386754ull,
+ 18239565699541929718ull, 5878054596313427263ull}},
+{{941353883532792398ull, 3135866061470707635ull,
+ 18187771106000024244ull, 7347568245391784079ull}},
+{{15011750409698154210ull, 3919832576838384543ull,
+ 18123027864072642401ull, 9184460306739730099ull}},
+{{16299873033702428237ull, 13979110406592460099ull,
+ 9021049405831707548ull, 5740287691712331312ull}},
+{{15763155273700647393ull, 17473888008240575124ull,
+ 11276311757289634435ull, 7175359614640414140ull}},
+{{1257200018416257625ull, 17230673991873331002ull,
+ 14095389696612043044ull, 8969199518300517675ull}},
+{{5397436029937548920ull, 1545799208066056068ull,
+ 6503775551168832951ull, 5605749698937823547ull}},
+{{6746795037421936149ull, 15767307065364733797ull,
+ 3518033420533653284ull, 7007187123672279434ull}},
+{{13045179815204808091ull, 1262389757996365630ull,
+ 13620913812521842414ull, 8758983904590349292ull}},
+{{3541551366075617153ull, 14624051654029892231ull,
+ 17736443169680927316ull, 5474364940368968307ull}},
+{{18261997262876685153ull, 18280064567537365288ull,
+ 17558867943673771241ull, 6842956175461210384ull}},
+{{4380752504886304825ull, 9015022654139542899ull,
+ 3501840855882662436ull, 8553695219326512981ull}},
+{{432127306340246564ull, 14857761195691990120ull,
+ 4494493544140357974ull, 5346059512079070613ull}},
+{{540159132925308205ull, 9348829457760211842ull,
+ 10229802948602835372ull, 6682574390098838266ull}},
+{{9898570953011411064ull, 11686036822200264802ull,
+ 3563881648898768407ull, 8353217987623547833ull}},
+{{10798292864059519819ull, 14221302041516247357ull,
+ 13756641076630200014ull, 5220761242264717395ull}},
+{{18109552098501787678ull, 8553255515040533388ull,
+ 12584115327360362114ull, 6525951552830896744ull}},
+{{4190196049417682981ull, 1468197356945890928ull,
+ 15730144159200452643ull, 8157439441038620930ull}},
+{{2618872530886051863ull, 17058524412587039494ull,
+ 14443026117927670805ull, 5098399650649138081ull}},
+{{12496962700462340637ull, 7488097460451635655ull,
+ 4218724592127424795ull, 6372999563311422602ull}},
+{{11009517357150537892ull, 4748435807137156665ull,
+ 14496777777014056802ull, 7966249454139278252ull}},
+{{18410163394287555943ull, 7579458397888110819ull,
+ 18283858147488561309ull, 4978905908837048907ull}},
+{{18401018224432057024ull, 14086009015787526428ull,
+ 18243136665933313732ull, 6223632386046311134ull}},
+{{4554528706830519664ull, 17607511269734408036ull,
+ 13580548795561866357ull, 7779540482557888918ull}},
+{{12069952478623850598ull, 13310537552797698974ull,
+ 3876156978798778569ull, 4862212801598680574ull}},
+{{5864068561425037440ull, 2803113885714960006ull,
+ 14068568260353249020ull, 6077766001998350717ull}},
+{{16553457738636072608ull, 3503892357143700007ull,
+ 3750652270159397563ull, 7597207502497938397ull}},
+{{17263440114288627236ull, 18330833787710670168ull,
+ 4650000678063317428ull, 4748254689061211498ull}},
+{{3132556069151232429ull, 4466798160928786095ull,
+ 15035872884433922594ull, 5935318361326514372ull}},
+{{17750753141721204248ull, 14806869738015758426ull,
+ 348097031832851626ull, 7419147951658142966ull}},
+{{15705906732003140559ull, 13865979604687236920ull,
+ 14052618700177695978ull, 4636967469786339353ull}},
+{{1185639341294374083ull, 8109102469004270343ull,
+ 3730715319939956261ull, 5796209337232924192ull}},
+{{15317107231900131315ull, 14748064104682725832ull,
+ 4663394149924945326ull, 7245261671541155240ull}},
+{{699639966165612528ull, 9211708093998631483ull, 5829242687406181658ull,
+ 9056577089426444050ull}},
+{{16578176043349365494ull, 10369003577176532580ull,
+ 8254962698056251440ull, 5660360680891527531ull}},
+{{2275975980477155252ull, 12961254471470665726ull,
+ 5707017354142926396ull, 7075450851114409414ull}},
+{{12068342012451219872ull, 16201568089338332157ull,
+ 16357143729533433803ull, 8844313563893011767ull}},
+{{9848556766995706372ull, 7820137046622763646ull,
+ 17140743858599477983ull, 5527695977433132354ull}},
+{{3087323921889857157ull, 5163485289851066654ull,
+ 12202557786394571671ull, 6909619971791415443ull}},
+{{13082526939217097255ull, 1842670593886445413ull,
+ 10641511214565826685ull, 8637024964739269304ull}},
+{{10482422346224379736ull, 3457512130392722335ull,
+ 6650944509103641678ull, 5398140602962043315ull}},
+{{8491341914353086766ull, 13545262199845678727ull,
+ 3701994617952164193ull, 6747675753702554144ull}},
+{{6002491374513970554ull, 3096519694524934697ull,
+ 4627493272440205242ull, 8434594692128192680ull}},
+{{15280772155139701356ull, 6547010827505472089ull,
+ 2892183295275128276ull, 5271621682580120425ull}},
+{{5265907138642462983ull, 8183763534381840112ull,
+ 8226915137521298249ull, 6589527103225150531ull}},
+{{6582383923303078729ull, 14841390436404688044ull,
+ 5671957903474234907ull, 8236908879031438164ull}},
+{{13337361988919200014ull, 6970026013539236075ull,
+ 12768345726526172625ull, 5148068049394648852ull}},
+{{12060016467721612113ull, 13324218535351432998ull,
+ 15960432158157715781ull, 6435085061743311065ull}},
+{{5851648547797239333ull, 2820215113907127536ull,
+ 6115482142414981015ull, 8043856327179138832ull}},
+{{3657280342373274583ull, 8680163473833036566ull,
+ 3822176339009363134ull, 5027410204486961770ull}},
+{{13794972464821369037ull, 1626832305436519899ull,
+ 14001092460616479726ull, 6284262755608702212ull}},
+{{12632029562599323392ull, 11256912418650425682ull,
+ 17501365575770599657ull, 7855328444510877765ull}},
+{{12506704495051965024ull, 118041234015434195ull,
+ 13244196494070318738ull, 4909580277819298603ull}},
+{{11021694600387568376ull, 9370923579374068552ull,
+ 11943559599160510518ull, 6136975347274123254ull}},
+{{13777118250484460470ull, 2490282437362809882ull,
+ 5706077462095862340ull, 7671219184092654068ull}},
+{{13222384924980175698ull, 10779798560206531984ull,
+ 12789670450664689770ull, 4794511990057908792ull}},
+{{16527981156225219623ull, 4251376163403389172ull,
+ 15987088063330862213ull, 5993139987572385990ull}},
+{{2213232371571972912ull, 9925906222681624370ull,
+ 10760488042308801958ull, 7491424984465482488ull}},
+{{5994956250659870974ull, 1592005370748627327ull,
+ 6725305026443001224ull, 4682140615290926555ull}},
+{{2882009294897450814ull, 1990006713435784159ull,
+ 3794945264626363626ull, 5852675769113658194ull}},
+{{17437569673903977229ull, 11710880428649506006ull,
+ 13967053617637730340ull, 7315844711392072742ull}},
+{{12573590055525195728ull, 14638600535811882508ull,
+ 8235444985192387117ull, 9144805889240090928ull}},
+{{17081865821558023138ull, 11454968344096120519ull,
+ 5147153115745241948ull, 5715503680775056830ull}},
+{{16740646258520141019ull, 14318710430120150649ull,
+ 15657313431536328243ull, 7144379600968821037ull}},
+{{7090749767868012561ull, 13286702019222800408ull,
+ 5736583734138246592ull, 8930474501211026297ull}},
+{{4431718604917507851ull, 8304188762014250255ull,
+ 15114579879904873880ull, 5581546563256891435ull}},
+{{927962237719496910ull, 10380235952517812819ull,
+ 14281538831453704446ull, 6976933204071114294ull}},
+{{14995010852431534849ull, 3751922903792490215ull,
+ 8628551502462354750ull, 8721166505088892868ull}},
+{{16289410810410791137ull, 16180009870152470096ull,
+ 14616216725893747526ull, 5450729065680558042ull}},
+{{1915019439303937305ull, 11001640300835811813ull,
+ 9046898870512408600ull, 6813411332100697553ull}},
+{{7005460317557309535ull, 13752050376044764766ull,
+ 15920309606567898654ull, 8516764165125871941ull}},
+{{18213470753755482171ull, 3983345466600590074ull,
+ 12256036513318630611ull, 5322977603203669963ull}},
+{{13543466405339576906ull, 367495814823349689ull,
+ 10708359623220900360ull, 6653722004004587454ull}},
+{{3094274951392307421ull, 459369768529187112ull, 4162077492171349642ull,
+ 8317152505005734318ull}},
+{{1933921844620192138ull, 4898792123758129849ull,
+ 16436356487889257238ull, 5198220315628583948ull}},
+{{7029088324202628076ull, 15346862191552438119ull,
+ 2098701536152019931ull, 6497775394535729936ull}},
+{{4174674386825897191ull, 14571891721013159745ull,
+ 2623376920190024914ull, 8122219243169662420ull}},
+{{14138386537834655505ull, 13719118344060612744ull,
+ 10862982611973541379ull, 5076387026981039012ull}},
+{{17672983172293319381ull, 12537211911648378026ull,
+ 13578728264966926724ull, 6345483783726298765ull}},
+{{12867856928511873418ull, 15671514889560472533ull,
+ 3138352275926494693ull, 7931854729657873457ull}},
+{{10348253589533614838ull, 12100539815188989285ull,
+ 13490685218522528943ull, 4957409206036170910ull}},
+{{17547003005344406452ull, 10513988750558848702ull,
+ 7639984486298385371ull, 6196761507545213638ull}},
+{{12710381719825732257ull, 8530799919771172974ull,
+ 326608571018205906ull, 7745951884431517048ull}},
+{{3332302556463694757ull, 9943435968284371013ull, 204130356886378691ull,
+ 4841219927769698155ull}},
+{{8777064214007006350ull, 7817608941928075862ull,
+ 14090221001390137076ull, 6051524909712122693ull}},
+{{1747958230653982129ull, 9772011177410094828ull,
+ 3777718196455507633ull, 7564406137140153367ull}},
+{{10315845931013514639ull, 17636722031949779027ull,
+ 9278602900425774126ull, 4727753835712595854ull}},
+{{8283121395339505394ull, 12822530503082447976ull,
+ 2374881588677441850ull, 5909692294640744818ull}},
+{{10353901744174381743ull, 6804791091998284162ull,
+ 12191974022701578121ull, 7387115368300931022ull}},
+{{11082874608536376494ull, 15782209478567397361ull,
+ 3008297745761098421ull, 4616947105188081889ull}},
+{{18535205388306905ull, 5892703792927082990ull, 8372058200628760931ull,
+ 5771183881485102361ull}},
+{{9246541043590159439ull, 2754193722731465833ull,
+ 15076758769213339068ull, 7213979851856377951ull}},
+{{16169862322915087202ull, 3442742153414332291ull,
+ 14234262443089285931ull, 9017474814820472439ull}},
+{{7800320942608235550ull, 18292614910379815346ull,
+ 15813943054571885562ull, 5635921759262795274ull}},
+{{527029141405518629ull, 13642396601119993375ull,
+ 10544056781360081145ull, 7044902199078494093ull}},
+{{14493844482039061998ull, 3217937696117828006ull,
+ 17791756995127489336ull, 8806127748848117616ull}},
+{{4446966782847025845ull, 2011211060073642504ull,
+ 11119848121954680835ull, 5503829843030073510ull}},
+{{5558708478558782306ull, 16349071880374216842ull,
+ 4676438115588575235ull, 6879787303787591888ull}},
+{{16171757635053253691ull, 15824653832040383148ull,
+ 5845547644485719044ull, 8599734129734489860ull}},
+{{883976485053507749ull, 667036608170463660ull, 12876839314658350211ull,
+ 5374833831084056162ull}},
+{{1104970606316884686ull, 14668853815495243287ull,
+ 6872677106468161955ull, 6718542288855070203ull}},
+{{15216271313178269569ull, 13724381250941666204ull,
+ 3979160364657814540ull, 8398177861068837754ull}},
+{{286797533881642673ull, 17801110318693317186ull,
+ 7098661246338521991ull, 5248861163168023596ull}},
+{{9581868954206829149ull, 17639701879939258578ull,
+ 8873326557923152489ull, 6561076453960029495ull}},
+{{2753964155903760628ull, 8214569294641909511ull,
+ 6479972178976552708ull, 8201345567450036869ull}},
+{{8638756625080932249ull, 14357477846005969252ull,
+ 6355825621074039394ull, 5125840979656273043ull}},
+{{10798445781351165311ull, 8723475270652685757ull,
+ 3333096007915161339ull, 6407301224570341304ull}},
+{{18109743245116344542ull, 6292658069888469292ull,
+ 4166370009893951674ull, 8009126530712926630ull}},
+{{2095217491342939531ull, 8544597312107681212ull,
+ 16439039311465883508ull, 5005704081695579143ull}},
+{{2619021864178674414ull, 10680746640134601515ull,
+ 15937113120904966481ull, 6257130102119473929ull}},
+{{17108835385505506729ull, 17962619318595639797ull,
+ 6086333345849044389ull, 7821412627649342412ull}},
+{{12998865125154635658ull, 13532480083335968825ull,
+ 13027330378010428551ull, 4888382892280839007ull}},
+{{2413523351161130860ull, 12303914085742573128ull,
+ 11672476954085647785ull, 6110478615351048759ull}},
+{{3016904188951413575ull, 1544834551896052698ull,
+ 9978910174179671828ull, 7638098269188810949ull}},
+{{6497251136522021389ull, 10188893631789808744ull,
+ 8542661868075988844ull, 4773811418243006843ull}},
+{{8121563920652526736ull, 12736117039737260930ull,
+ 6066641316667598151ull, 5967264272803758554ull}},
+{{928582863960882612ull, 11308460281244188259ull,
+ 16806673682689273497ull, 7459080341004698192ull}},
+{{16721265354471409296ull, 150258648136535805ull,
+ 10504171051680795936ull, 4661925213127936370ull}},
+{{7066523637807097908ull, 187823310170669757ull, 3906841777746219112ull,
+ 5827406516409920463ull}},
+{{13444840565686260289ull, 234779137713337196ull, 271866203755385986ull,
+ 7284258145512400579ull}},
+{{16806050707107825362ull, 9516845958996447303ull,
+ 14174890809976396194ull, 9105322681890500723ull}},
+{{17421310719583472707ull, 10559714742800167468ull,
+ 6553463747021553669ull, 5690826676181562952ull}},
+{{3329894325769789268ull, 17811329446927597240ull,
+ 8191829683776942086ull, 7113533345226953690ull}},
+{{4162367907212236585ull, 13040789771804720742ull,
+ 1016415067866401800ull, 8891916681533692113ull}},
+{{16436537997289811578ull, 8150493607377950463ull,
+ 12164474463484970885ull, 5557447925958557570ull}},
+{{15933986478184876568ull, 14799803027649825983ull,
+ 5982221042501437798ull, 6946809907448196963ull}},
+{{15305797079303707806ull, 9276381747707506671ull,
+ 2866090284699409344ull, 8683512384310246204ull}},
+{{16483652202205899235ull, 5797738592317191669ull,
+ 11014678464791906648ull, 5427195240193903877ull}},
+{{6769507197475210331ull, 7247173240396489587ull,
+ 18380034099417271214ull, 6783994050242379846ull}},
+{{3850197978416625010ull, 18282338587350387792ull,
+ 13751670587416813209ull, 8479992562802974808ull}},
+{{2406373736510390632ull, 4508932589452910514ull,
+ 8594794117135508256ull, 5299995351751859255ull}},
+{{12231339207492764097ull, 5636165736816138142ull,
+ 6131806627991997416ull, 6624994189689824069ull}},
+{{6065801972511179314ull, 7045207171020172678ull,
+ 12276444303417384674ull, 8281242737112280086ull}},
+{{17626184288101650783ull, 9014940500314995827ull,
+ 3061091671208477517ull, 5175776710695175054ull}},
+{{17421044341699675575ull, 15880361643821132688ull,
+ 13049736625865372704ull, 6469720888368968817ull}},
+{{3329561353415042852ull, 1403707981066864245ull,
+ 2477112727049552169ull, 8087151110461211022ull}},
+{{4386818855098095735ull, 12406532534235259913ull,
+ 15383253509688133817ull, 5054469444038256888ull}},
+{{10095209587300007573ull, 1673107612511911179ull,
+ 782322813400615656ull, 6318086805047821111ull}},
+{{8007325965697621562ull, 2091384515639888974ull,
+ 14812961572032933282ull, 7897608506309776388ull}},
+{{392892710133625572ull, 5918801340702318513ull, 34728945665807493ull,
+ 4936005316443610243ull}},
+{{5102801906094419869ull, 12010187694305286045ull,
+ 13878469237364423078ull, 6170006645554512803ull}},
+{{10990188401045412740ull, 5789362581026831748ull,
+ 12736400528278140944ull, 7712508306943141004ull}},
+{{16092239787508158771ull, 3618351613141769842ull,
+ 17183622367028613898ull, 4820317691839463127ull}},
+{{10891927697530422655ull, 13746311553281988111ull,
+ 16867841940358379468ull, 6025397114799328909ull}},
+{{9003223603485640415ull, 17182889441602485139ull,
+ 7249744370165810623ull, 7531746393499161137ull}},
+{{3321171742964831308ull, 17656834928642635068ull,
+ 16060305277422101399ull, 4707341495936975710ull}},
+{{4151464678706039134ull, 17459357642375905931ull,
+ 10852009559922850941ull, 5884176869921219638ull}},
+{{577644829955161014ull, 7989138997687718702ull, 4341639913048787869ull,
+ 7355221087401524548ull}},
+{{9945428074298727075ull, 14598109765537036281ull,
+ 5427049891310984836ull, 9194026359251905685ull}},
+{{17745107592505174182ull, 18347190640315423483ull,
+ 5697749191283059474ull, 5746266474532441053ull}},
+{{17569698472204079824ull, 13710616263539503546ull,
+ 11733872507531212247ull, 7182833093165551316ull}},
+{{12738751053400323971ull, 12526584310996991529ull,
+ 14667340634414015309ull, 8978541366456939145ull}},
+{{1044190380734120626ull, 10134958203586813658ull,
+ 2249558868867677712ull, 5611588354035586966ull}},
+{{10528610012772426591ull, 12668697754483517072ull,
+ 12035320622939372948ull, 7014485442544483707ull}},
+{{13160762515965533238ull, 15835872193104396340ull,
+ 10432464760246828281ull, 8768106803180604634ull}},
+{{17448848609333234082ull, 2979891093049165856ull,
+ 11131976493581655580ull, 5480066751987877896ull}},
+{{3364316687956990987ull, 3724863866311457321ull,
+ 13914970616977069475ull, 6850083439984847370ull}},
+{{8817081878373626637ull, 44393814461933747ull, 8170341234366561036ull,
+ 8562604299981059213ull}},
+{{3204833164769822696ull, 9251118170893484400ull,
+ 7412306280692794599ull, 5351627687488162008ull}},
+{{4006041455962278370ull, 6952211695189467596ull,
+ 9265382850865993249ull, 6689534609360202510ull}},
+{{5007551819952847963ull, 13301950637414222399ull,
+ 2358356526727715753ull, 8361918261700253138ull}},
+{{10047248915111611833ull, 1396190120742807143ull,
+ 6085658847632210250ull, 5226198913562658211ull}},
+{{7947375125462126887ull, 10968609687783284737ull,
+ 2995387541112874908ull, 6532748641953322764ull}},
+{{14545904925255046513ull, 13710762109729105921ull,
+ 3744234426391093635ull, 8165935802441653455ull}},
+{{2173661550643322215ull, 6263383309366997249ull,
+ 9257675544135515378ull, 5103709876526033409ull}},
+{{7328762956731540672ull, 17052601173563522369ull,
+ 16183780448596782126ull, 6379637345657541761ull}},
+{{13772639714341813744ull, 12092379430099627153ull,
+ 6394667505463813946ull, 7974546682071927202ull}},
+{{1690370793822551734ull, 12169423162239654875ull,
+ 8608353209342271620ull, 4984091676294954501ull}},
+{{15948021547560353380ull, 15211778952799568593ull,
+ 15372127530105227429ull, 6230114595368693126ull}},
+{{6099968879168278012ull, 5179665635717297030ull,
+ 9991787375776758479ull, 7787643244210866408ull}},
+{{17647538604762337470ull, 10154820049964392499ull,
+ 6244867109860474049ull, 4867277027631791505ull}},
+{{17447737237525533933ull, 17305211080882878528ull,
+ 12417769905752980465ull, 6084096284539739381ull}},
+{{3362927473197365801ull, 7796455795821434449ull,
+ 1687154326909061870ull, 7605120355674674227ull}},
+{{13631044716816823386ull, 261098853961008626ull,
+ 17195372518814021333ull, 4753200222296671391ull}},
+{{7815433859166253424ull, 4938059585878648687ull,
+ 16882529630090138762ull, 5941500277870839239ull}},
+{{5157606305530428876ull, 15395946519203086667ull,
+ 16491476019185285548ull, 7426875347338549049ull}},
+{{917660931742824095ull, 399094537647153359ull, 3389643484349721612ull,
+ 4641797092086593156ull}},
+{{14982134219960693831ull, 498868172058941698ull,
+ 4237054355437152015ull, 5802246365108241445ull}},
+{{9504295738096091481ull, 14458643270355840835ull,
+ 9908003962723827922ull, 7252807956385301806ull}},
+{{7268683654192726447ull, 8849932051090025236ull,
+ 3161632916550009095ull, 9066009945481627258ull}},
+{{13766299320725229838ull, 12448736559572347628ull,
+ 6587706591271143588ull, 5666256215926017036ull}},
+{{17207874150906537297ull, 15560920699465434535ull,
+ 8234633239088929485ull, 7082820269907521295ull}},
+{{16898156670205783717ull, 5616092819049629457ull,
+ 5681605530433773953ull, 8853525337384401619ull}},
+{{3643818891237532967ull, 15039273057974488171ull,
+ 1245160447307414768ull, 5533453335865251012ull}},
+{{18389831669329079921ull, 352347248758558597ull,
+ 1556450559134268461ull, 6916816669831563765ull}},
+{{9152231531379186189ull, 5052120079375586151ull,
+ 6557249217345223480ull, 8646020837289454706ull}},
+{{12637673734753073224ull, 3157575049609741344ull,
+ 8709966779268152579ull, 5403763023305909191ull}},
+{{15797092168441341530ull, 17782026867294340392ull,
+ 6275772455657802819ull, 6754703779132386489ull}},
+{{1299621136842125297ull, 17615847565690537587ull,
+ 12456401587999641428ull, 8443379723915483111ull}},
+{{16953164275022185975ull, 1786532691701810183ull,
+ 14702780020140857749ull, 5277112327447176944ull}},
+{{16579769325350344564ull, 6844851883054650633ull,
+ 18378475025176072186ull, 6596390409308971180ull}},
+{{6889653601405766993ull, 17779436890673089100ull,
+ 4526349707760538616ull, 8245488011636213976ull}},
+{{13529405537733380179ull, 11112148056670680687ull,
+ 2828968567350336635ull, 5153430007272633735ull}},
+{{12300070903739337319ull, 9278499052410962955ull,
+ 17371268764470084506ull, 6441787509090792168ull}},
+{{10763402611246783745ull, 2374751778658927886ull,
+ 3267341881878054017ull, 8052234386363490211ull}},
+{{2115440613601851937ull, 13013434907730299689ull,
+ 18182989740669641424ull, 5032646491477181381ull}},
+{{7255986785429702825ull, 16266793634662874611ull,
+ 8893679120554888068ull, 6290808114346476727ull}},
+{{4458297463359740627ull, 1886747969619041648ull,
+ 6505412882266222182ull, 7863510142933095909ull}},
+{{2786435914599837892ull, 15014275536294064742ull,
+ 6371726060630082815ull, 4914693839333184943ull}},
+{{12706416930104573173ull, 14156158401940193023ull,
+ 3352971557360215615ull, 6143367299166481179ull}},
+{{11271335144203328562ull, 13083511983997853375ull,
+ 18026272501982433231ull, 7679209123958101473ull}},
+{{13962113492768162208ull, 15094724017639740215ull,
+ 4348891286097938913ull, 4799505702473813421ull}},
+{{12840955847532814855ull, 5033346966767511557ull,
+ 10047800126049811546ull, 5999382128092266776ull}},
+{{2216136754133854857ull, 15515055745314165255ull,
+ 12559750157562264432ull, 7499227660115333470ull}},
+{{8302614498974741142ull, 9696909840821353284ull,
+ 3238157830049027366ull, 4687017287572083419ull}},
+{{10378268123718426427ull, 2897765264171915797ull,
+ 17882755342843447920ull, 5858771609465104273ull}},
+{{17584521173075420938ull, 3622206580214894746ull,
+ 8518386123272146188ull, 7323464511831380342ull}},
+{{12757279429489500364ull, 4527758225268618433ull,
+ 1424610617235406927ull, 9154330639789225428ull}},
+{{1055770615789855872ull, 9747377918433968377ull,
+ 10113753672626905137ull, 5721456649868265892ull}},
+{{5931399288164707744ull, 16795908416469848375ull,
+ 12642192090783631421ull, 7151820812335332365ull}},
+{{2802563091778496775ull, 7159827465305146757ull,
+ 1967682058197375565ull, 8939776015419165457ull}},
+{{4057444941575254437ull, 6780735175029410675ull,
+ 12759016332441829488ull, 5587360009636978410ull}},
+{{460120158541680142ull, 8475918968786763344ull, 6725398378697511052ull,
+ 6984200012046223013ull}},
+{{575150198177100177ull, 10594898710983454180ull,
+ 13018433991799276719ull, 8730250015057778766ull}},
+{{9582840910715463419ull, 13539340722005740718ull,
+ 3524835226447160045ull, 5456406259411111729ull}},
+{{2755179101539553466ull, 3089117847225012186ull,
+ 9017730051486337961ull, 6820507824263889661ull}},
+{{12667345913779217640ull, 8473083327458653136ull,
+ 15883848582785310355ull, 8525634780329862076ull}},
+{{7917091196112011025ull, 2989834070447964258ull, 704033327386043164ull,
+ 5328521737706163798ull}},
+{{672991958285237973ull, 3737292588059955323ull,
+ 10103413696087329763ull, 6660652172132704747ull}},
+{{14676298003138711178ull, 59929716647556249ull, 8017581101681774300ull,
+ 8325815215165880934ull}},
+{{2255157224320612631ull, 9260828109759498464ull, 399302170123721033ull,
+ 5203634509478675584ull}},
+{{2818946530400765788ull, 16187721155626760984ull,
+ 499127712654651291ull, 6504543136848344480ull}},
+{{3523683163000957235ull, 15622965426106063326ull,
+ 623909640818314114ull, 8130678921060430600ull}},
+{{16037360032157761984ull, 14376039409743677482ull,
+ 389943525511446321ull, 5081674325662769125ull}},
+{{10823328003342426672ull, 4134991206897433141ull,
+ 5099115425316695806ull, 6352092907078461406ull}},
+{{18140846022605421244ull, 14392111045476567234ull,
+ 15597266318500645565ull, 7940116133848076757ull}},
+{{15949714782555776182ull, 11300912412636548473ull,
+ 12054134458276597430ull, 4962572583655047973ull}},
+{{6102085422912556515ull, 4902768478940909784ull,
+ 1232610017563583076ull, 6203215729568809967ull}},
+{{7627606778640695644ull, 6128460598676137230ull,
+ 15375820577236642557ull, 7754019661961012458ull}},
+{{155568218223046873ull, 6136130883386279721ull,
+ 14221573879200289502ull, 4846262288725632786ull}},
+{{4806146291206196496ull, 16893535641087625459ull,
+ 8553595312145586069ull, 6057827860907040983ull}},
+{{1395996845580357715ull, 7281861496077368112ull,
+ 6080308121754594683ull, 7572284826133801229ull}},
+{{872498028487723572ull, 2245320425834661118ull, 6106035585310315629ull,
+ 4732678016333625768ull}},
+{{10313994572464430273ull, 7418336550720714301ull,
+ 7632544481637894536ull, 5915847520417032210ull}},
+{{17504179234007925746ull, 9272920688400892876ull,
+ 317308565192592362ull, 7394809400521290263ull}},
+{{1716739984400177783ull, 10407261448677945952ull,
+ 7115846880886452082ull, 4621755875325806414ull}},
+{{2145924980500222229ull, 3785704773992656632ull,
+ 18118180637962840911ull, 5777194844157258017ull}},
+{{2682406225625277786ull, 120444949063432886ull, 8812667742171387427ull,
+ 7221493555196572522ull}},
+{{12576379818886373040ull, 13985614241611454819ull,
+ 1792462640859458475ull, 9026866943995715653ull}},
+{{5554394377590289198ull, 6435165891793465310ull,
+ 3426132159750855499ull, 5641791839997322283ull}},
+{{16166365008842637306ull, 3432271346314443733ull,
+ 18117723254970733086ull, 7052239799996652853ull}},
+{{6372898205771132920ull, 13513711219747830475ull,
+ 8812096013431252645ull, 8815299749995816067ull}},
+{{1677218369393264123ull, 10751912521556087999ull,
+ 3201716999180838951ull, 5509562343747385042ull}},
+{{15931581017023743866ull, 8828204633517722094ull,
+ 13225518285830824497ull, 6886952929684231302ull}},
+{{10691104234424904024ull, 15646941810324540522ull,
+ 7308525820433754813ull, 8608691162105289128ull}},
+{{11293626164942952919ull, 12085181640666531778ull,
+ 4567828637771096758ull, 5380431976315805705ull}},
+{{4893660669323915341ull, 5883105013978388915ull,
+ 10321471815641258852ull, 6725539970394757131ull}},
+{{1505389818227506272ull, 7353881267472986144ull,
+ 8290153751124185661ull, 8406924962993446414ull}},
+{{940868636392191420ull, 6902018801384310292ull, 569660076025228134ull,
+ 5254328101870904009ull}},
+{{1176085795490239275ull, 17850895538585163673ull,
+ 5323761113458923071ull, 6567910127338630011ull}},
+{{6081793262790186998ull, 17701933404804066687ull,
+ 2043015373396265935ull, 8209887659173287514ull}},
+{{10718649816884948730ull, 17981237405643623535ull,
+ 5888570626800054113ull, 5131179786983304696ull}},
+{{8786626252678798008ull, 8641488701772365707ull,
+ 7360713283500067642ull, 6413974733729130870ull}},
+{{6371596797421109606ull, 1578488840360681326ull,
+ 18424263641229860361ull, 8017468417161413587ull}},
+{{17817306053670357216ull, 12515770571293895588ull,
+ 9209321766554968773ull, 5010917760725883492ull}},
+{{3824888493378394904ull, 1809655158835205774ull,
+ 11511652208193710967ull, 6263647200907354365ull}},
+{{14004482653577769438ull, 16097127003826170929ull,
+ 554507204959974996ull, 7829559001134192957ull}},
+{{1835272630845024043ull, 837332340536581023ull, 2652410012313678325ull,
+ 4893474375708870598ull}},
+{{16129148843838443765ull, 5658351444098114182ull,
+ 12538884552246873714ull, 6116842969636088247ull}},
+{{10938064017943278899ull, 16296311341977418536ull,
+ 11061919671881204238ull, 7646053712045110309ull}},
+{{6836290011214549312ull, 5573508570308498681ull,
+ 9219542804139446601ull, 4778783570028193943ull}},
+{{13157048532445574544ull, 11578571731313011255ull,
+ 6912742486746920347ull, 5973479462535242429ull}},
+{{11834624647129580276ull, 9861528645713876165ull,
+ 13252614126861038338ull, 7466849328169053036ull}},
+{{9702483413669681624ull, 10775141421998560507ull,
+ 17506255866142924769ull, 4666780830105658147ull}},
+{{7516418248659714126ull, 18080612795925588538ull,
+ 17271133814251268057ull, 5833476037632072684ull}},
+{{172150773969866850ull, 8765707939624821961ull, 3142173194104533456ull,
+ 7291845047040090856ull}},
+{{4826874485889721466ull, 10957134924531027451ull,
+ 3927716492630666820ull, 9114806308800113570ull}},
+{{710953544467381965ull, 16071581364686667965ull,
+ 7066508826321554666ull, 5696753943000070981ull}},
+{{5500377949011615360ull, 10866104669003559148ull,
+ 13444822051329331237ull, 7120942428750088726ull}},
+{{6875472436264519199ull, 18194316854681836839ull,
+ 7582655527306888238ull, 8901178035937610908ull}},
+{{11214699300306406356ull, 6759762015748760120ull,
+ 13962531741421580957ull, 5563236272461006817ull}},
+{{14018374125383007945ull, 13061388538113338054ull,
+ 3618106621494812484ull, 6954045340576258522ull}},
+{{8299595619873984123ull, 16326735672641672568ull,
+ 13746005313723291413ull, 8692556675720323152ull}},
+{{5187247262421240077ull, 12510052804614739307ull,
+ 8591253321077057133ull, 5432847922325201970ull}},
+{{1872373059599162192ull, 1802507950486260422ull,
+ 1515694614491545609ull, 6791059902906502463ull}},
+{{11563838361353728548ull, 6864820956535213431ull,
+ 15729676323396595723ull, 8488824878633128078ull}},
+{{14144928003487162198ull, 1984670088620814442ull,
+ 5219361683695484423ull, 5305515549145705049ull}},
+{{8457787967504176940ull, 16315895666058181765ull,
+ 11135888123046743432ull, 6631894436432131311ull}},
+{{15183920977807609079ull, 1948125508863175590ull,
+ 9308174135381041387ull, 8289868045540164139ull}},
+{{4878264592702367770ull, 17358479507535342408ull,
+ 3511765825399456914ull, 5181167528462602587ull}},
+{{6097830740877959713ull, 12474727347564402202ull,
+ 18224765337031484855ull, 6476459410578253233ull}},
+{{16845660462952225449ull, 10981723166028114848ull,
+ 8945898616007192357ull, 8095574263222816542ull}},
+{{10528537789345140906ull, 9169419987981265732ull,
+ 979500616577107319ull, 5059733914514260339ull}},
+{{13160672236681426132ull, 6850088966549194261ull,
+ 15059433826003547861ull, 6324667393142825423ull}},
+{{2615782240569618953ull, 13174297226613880731ull,
+ 14212606264077046922ull, 7905834241428531779ull}},
+{{17775764964851869510ull, 12845621785061063360ull,
+ 6577035905834460374ull, 4941146400892832362ull}},
+{{3772962132355285271ull, 6833655194471553393ull,
+ 17444666919147851276ull, 6176433001116040452ull}},
+{{9327888683871494493ull, 8542068993089441741ull,
+ 3359089575225262479ull, 7720541251395050566ull}},
+{{8135773436633378010ull, 12256322148321982944ull,
+ 15934489039797952761ull, 4825338282121906603ull}},
+{{10169716795791722513ull, 1485344630120314968ull,
+ 15306425281320053048ull, 6031672852652383254ull}},
+{{12712145994739653141ull, 1856680787650393710ull,
+ 9909659564795290502ull, 7539591065815479068ull}},
+{{3333405228284895309ull, 14995483547563659781ull,
+ 15416909264851832371ull, 4712244416134674417ull}},
+{{8778442553783507040ull, 14132668416027186822ull,
+ 5436078525782626752ull, 5890305520168343022ull}},
+{{1749681155374607992ull, 17665835520033983528ull,
+ 16018470194083059248ull, 7362881900210428777ull}},
+{{2187101444218259990ull, 3635550326332927794ull,
+ 6188029687321660349ull, 9203602375263035972ull}},
+{{5978624421063800398ull, 4578061963171773823ull,
+ 13090890591430813526ull, 5752251484539397482ull}},
+{{2861594507902362593ull, 14945949490819493087ull,
+ 7140241202433741099ull, 7190314355674246853ull}},
+{{17412051190160116954ull, 14070750845096978454ull,
+ 13536987521469564278ull, 8987892944592808566ull}},
+{{6270845975422685192ull, 4182533259758223630ull,
+ 3848931182491089770ull, 5617433090370505354ull}},
+{{17061929506133132298ull, 14451538611552555345ull,
+ 14034536014968638020ull, 7021791362963131692ull}},
+{{7492353827384251661ull, 18064423264440694182ull,
+ 17543170018710797525ull, 8777239203703914615ull}},
+{{71035123687769384ull, 13596107549489127816ull,
+ 17882010289335330309ull, 5485774502314946634ull}},
+{{88793904609711730ull, 3160076381579246058ull, 13129140824814387079ull,
+ 6857218127893683293ull}},
+{{9334364417616915470ull, 17785153532256221284ull,
+ 2576367975735820136ull, 8571522659867104117ull}},
+{{15057349797865347977ull, 11115720957660138302ull,
+ 3916072994048581537ull, 5357201662416940073ull}},
+{{9598315210476909163ull, 59593141793009166ull, 9506777260988114826ull,
+ 6696502078021175091ull}},
+{{2774521976241360646ull, 9297863464096037266ull,
+ 7271785557807755628ull, 8370627597526468864ull}},
+{{6345762253578238308ull, 15034536701914799099ull,
+ 4544865973629847267ull, 5231642248454043040ull}},
+{{3320516798545409981ull, 14181484858966110970ull,
+ 5681082467037309084ull, 6539552810567553800ull}},
+{{13374018035036538284ull, 17726856073707638712ull,
+ 7101353083796636355ull, 8174441013209442250ull}},
+{{8358761271897836428ull, 8773442036853580243ull,
+ 9050031695800285626ull, 5109025633255901406ull}},
+{{5836765571444907630ull, 1743430509212199496ull,
+ 2089167582895581225ull, 6386282041569876758ull}},
+{{7295956964306134538ull, 6790974154942637274ull,
+ 11834831515474252339ull, 7982852551962345947ull}},
+{{9171659121118721990ull, 1938515837625454344ull,
+ 5090926687957713760ull, 4989282844976466217ull}},
+{{11464573901398402488ull, 2423144797031817930ull,
+ 10975344378374530104ull, 6236603556220582771ull}},
+{{5107345339893227302ull, 3028930996289772413ull,
+ 9107494454540774726ull, 7795754445275728464ull}},
+{{5497933846646961016ull, 15728139927963271470ull,
+ 5692184034087984203ull, 4872346528297330290ull}},
+{{16095789345163477078ull, 15048488891526701433ull,
+ 16338602079464756062ull, 6090433160371662862ull}},
+{{6284678626172182635ull, 9587239077553600984ull,
+ 11199880562476169270ull, 7613041450464578578ull}},
+{{3927924141357614147ull, 1380338405043612711ull,
+ 11611611369974993698ull, 4758150906540361611ull}},
+{{298219158269629780ull, 10948795043159291697ull,
+ 9902828194041354218ull, 5947688633175452014ull}},
+{{4984459966264425128ull, 4462621767094338813ull,
+ 3155163205696916965ull, 7434610791469315018ull}},
+{{5421130488128959657ull, 5094981613647655710ull,
+ 6583663021987961007ull, 4646631744668321886ull}},
+{{15999785147015975380ull, 1757040998632181733ull,
+ 17452950814339727067ull, 5808289680835402357ull}},
+{{6164673378487805512ull, 16031359303572390879ull,
+ 7981130462642495121ull, 7260362101044252947ull}},
+{{3094155704682368986ull, 6204141074183324887ull,
+ 5364727059875730998ull, 9075452626305316184ull}},
+{{8851376343067562473ull, 17712646226646741766ull,
+ 3352954412422331873ull, 5672157891440822615ull}},
+{{1840848391979677283ull, 8305749728026263496ull,
+ 18026251070810078554ull, 7090197364301028268ull}},
+{{2301060489974596603ull, 1158815123178053562ull,
+ 4086069764803046577ull, 8862746705376285336ull}},
+{{6049848824661510781ull, 12253474498054753236ull,
+ 2553793603001904110ull, 5539216690860178335ull}},
+{{7562311030826888476ull, 6093471085713665737ull,
+ 17027300059034543850ull, 6924020863575222918ull}},
+{{14064574806960998499ull, 16840210893996857979ull,
+ 12060753036938404004ull, 8655026079469028648ull}},
+{{6484516245136930110ull, 1301759771893260429ull,
+ 7537970648086502503ull, 5409391299668142905ull}},
+{{12717331324848550542ull, 15462257770148739248ull,
+ 14034149328535516032ull, 6761739124585178631ull}},
+{{15896664156060688177ull, 881078138976372444ull,
+ 12931000642242007137ull, 8452173905731473289ull}},
+{{712043060683154303ull, 12079888882928702538ull,
+ 1164346373760172604ull, 5282608691082170806ull}},
+{{10113425862708718686ull, 15099861103660878172ull,
+ 10678805004054991563ull, 6603260863852713507ull}},
+{{12641782328385898358ull, 14263140361148709811ull,
+ 8736820236641351550ull, 8254076079815891884ull}},
+{{5595270946027492522ull, 4302776707290555728ull,
+ 14683884684755620527ull, 5158797549884932427ull}},
+{{6994088682534365652ull, 766784865685806756ull,
+ 13743169837517137755ull, 6448496937356165534ull}},
+{{8742610853167957065ull, 14793539137389422157ull,
+ 7955590260041646385ull, 8060621171695206918ull}},
+{{7769974792443667118ull, 2328432933227306992ull, 360557894098641087ull,
+ 5037888232309504324ull}},
+{{9712468490554583897ull, 16745599221816297452ull,
+ 450697367623301358ull, 6297360290386880405ull}},
+{{12140585613193229871ull, 11708626990415596007ull,
+ 5175057727956514602ull, 7871700362983600506ull}},
+{{14505395035886850526ull, 11929577887437135408ull,
+ 7846097098400209530ull, 4919812726864750316ull}},
+{{18131743794858563157ull, 5688600322441643452ull,
+ 9807621373000261913ull, 6149765908580937895ull}},
+{{4217935669863652330ull, 11722436421479442220ull,
+ 7647840697822939487ull, 7687207385726172369ull}},
+{{11859581830519558515ull, 14244051791065733243ull,
+ 16309115482207806939ull, 4804504616078857730ull}},
+{{10212791269722060239ull, 13193378720404778650ull,
+ 11163022315904982866ull, 6005630770098572163ull}},
+{{3542617050297799491ull, 7268351363651197505ull,
+ 9342091876453840679ull, 7507038462623215204ull}},
+{{13743350702504594442ull, 11460248629923080296ull,
+ 15062179459638426232ull, 4691899039139509502ull}},
+{{17179188378130743052ull, 14325310787403850370ull,
+ 9604352287693256982ull, 5864873798924386878ull}},
+{{12250613435808653007ull, 8683266447400037155ull,
+ 2782068322761795420ull, 7331092248655483598ull}},
+{{10701580776333428355ull, 10854083059250046444ull,
+ 12700957440307020083ull, 9163865310819354497ull}},
+{{15911860022063168530ull, 4477958902817585075ull,
+ 1020569372550805696ull, 5727415819262096561ull}},
+{{15278139009151572758ull, 5597448628521981344ull,
+ 5887397734115895024ull, 7159269774077620701ull}},
+{{650929687729914332ull, 6996810785652476681ull,
+ 11970933186072256684ull, 8949087217597025876ull}},
+{{11936046100899666218ull, 13596378777887573733ull,
+ 16705205278149936235ull, 5593179510998141172ull}},
+{{1084999570842419060ull, 12383787453932079263ull,
+ 2434762523977868678ull, 6991474388747676466ull}},
+{{15191307518835187537ull, 6256362280560323270ull,
+ 12266825191827111656ull, 8739342985934595582ull}},
+{{4882881180844604307ull, 3910226425350202044ull,
+ 3055079726464556881ull, 5462089366209122239ull}},
+{{6103601476055755383ull, 9499469050115140459ull,
+ 17653907713362859813ull, 6827611707761402798ull}},
+{{3017815826642306325ull, 16486022331071313478ull,
+ 12844012604848798958ull, 8534514634701753498ull}},
+{{15721192946933605165ull, 5692077938492183019ull,
+ 12639193896457887253ull, 5334071646688595936ull}},
+{{15039805165239618552ull, 11726783441542616678ull,
+ 15798992370572359066ull, 6667589558360744920ull}},
+{{9576384419694747382ull, 5435107265073495040ull,
+ 1301996389505897217ull, 8334486947950931151ull}},
+{{5985240262309217114ull, 14926157086739404160ull,
+ 7731276771082267616ull, 5209054342469331969ull}},
+{{7481550327886521393ull, 210952284714703584ull,
+ 14275781982280222425ull, 6511317928086664961ull}},
+{{9351937909858151741ull, 4875376374320767384ull,
+ 4009669422568114319ull, 8139147410108331202ull}},
+{{5844961193661344838ull, 9964639261591561471ull,
+ 7117729407532459353ull, 5086967131317707001ull}},
+{{2694515473649293144ull, 17067485095416839743ull,
+ 13508847777842962095ull, 6358708914147133751ull}},
+{{17203202397343780141ull, 16722670350843661774ull,
+ 12274373703876314715ull, 7948386142683917189ull}},
+{{6140315479912474684ull, 8145825960063594657ull,
+ 9977326574136390649ull, 4967741339177448243ull}},
+{{12287080368317981259ull, 14793968468506881225ull,
+ 7859972199243100407ull, 6209676673971810304ull}},
+{{1523792405115312862ull, 13880774567206213628ull,
+ 9824965249053875509ull, 7762095842464762880ull}},
+{{10175742290051846347ull, 10981327113717577469ull,
+ 6140603280658672193ull, 4851309901540476800ull}},
+{{17331363880992195838ull, 18338344910574359740ull,
+ 7675754100823340241ull, 6064137376925596000ull}},
+{{3217460777530693181ull, 9087873082935785964ull,
+ 9594692626029175302ull, 7580171721156995000ull}},
+{{11234285022811459046ull, 1068234658407478323ull,
+ 5996682891268234564ull, 4737607325723121875ull}},
+{{9431170260086935904ull, 1335293323009347904ull,
+ 2884167595657905301ull, 5922009157153902344ull}},
+{{11788962825108669880ull, 6280802672189072784ull,
+ 3605209494572381626ull, 7402511446442377930ull}},
+{{7368101765692918675ull, 8537187688545558394ull,
+ 6864941952535126420ull, 4626569654026486206ull}},
+{{18433499243970924152ull, 10671484610681947992ull,
+ 17804549477523683833ull, 5783212067533107757ull}},
+{{4595129981254103573ull, 17951041781779822895ull,
+ 8420628791622441079ull, 7229015084416384697ull}},
+{{1132226458140241563ull, 17827116208797390715ull,
+ 15137472007955439253ull, 9036268855520480871ull}},
+{{16848542600833508641ull, 13447790639712063148ull,
+ 16378449032613231389ull, 5647668034700300544ull}},
+{{2613934177332334185ull, 2974680244357915224ull,
+ 2026317217056987621ull, 7059585043375375681ull}},
+{{3267417721665417731ull, 8330036323874781934ull,
+ 7144582539748622430ull, 8824481304219219601ull}},
+{{15877194131323049794ull, 594586683994350804ull,
+ 15994579133411358779ull, 5515300815137012250ull}},
+{{1399748590444260626ull, 14578291410275102218ull,
+ 10769851879909422665ull, 6894126018921265313ull}},
+{{10973057774910101591ull, 4387806207561714060ull,
+ 18074000868314166236ull, 8617657523651581641ull}},
+{{16081533146173589302ull, 11965750916580847095ull,
+ 4378721515055272041ull, 5386035952282238526ull}},
+{{15490230414289598724ull, 1122130590443895157ull,
+ 14696773930673865860ull, 6732544940352798157ull}},
+{{5527729962579834693ull, 1402663238054868947ull,
+ 4535909358060168613ull, 8415681175440997697ull}},
+{{1148988217398702731ull, 3182507532997987044ull,
+ 14364158394856075143ull, 5259800734650623560ull}},
+{{1436235271748378414ull, 17813192471529647517ull,
+ 17955197993570093928ull, 6574750918313279450ull}},
+{{6406980108112860921ull, 3819746515702507780ull,
+ 13220625455107841603ull, 8218438647891599313ull}},
+{{13227734604425313884ull, 81498563100373410ull, 1345361881801319146ull,
+ 5136524154932249571ull}},
+{{7311296218676866547ull, 9325245240730242571ull,
+ 15516760407533812644ull, 6420655193665311963ull}},
+{{4527434254918695279ull, 11656556550912803214ull,
+ 14784264490989877901ull, 8025818992081639954ull}},
+{{16664704464606348262ull, 9591190853534195960ull,
+ 13851851325296061592ull, 5016136870051024971ull}},
+{{2384136507048383711ull, 11988988566917744951ull,
+ 12703128138192689086ull, 6270171087563781214ull}},
+{{16815228689092643351ull, 5762863671792405380ull,
+ 6655538135886085550ull, 7837713859454726518ull}},
+{{1286145893828126286ull, 17436847850152417075ull,
+ 17994769390210967180ull, 4898571162159204073ull}},
+{{15442740422567321570ull, 3349315738980969727ull,
+ 8658403682481545264ull, 6123213952699005092ull}},
+{{14691739509781764058ull, 4186644673726212159ull,
+ 10823004603101931580ull, 7654017440873756365ull}},
+{{16099866221254684393ull, 11840024957933658407ull,
+ 9070220886152401189ull, 4783760900546097728ull}},
+{{15513146758140967587ull, 964973142134909297ull,
+ 11337776107690501487ull, 5979701125682622160ull}},
+{{5556375392394045771ull, 15041274482950800334ull,
+ 14172220134613126858ull, 7474626407103277700ull}},
+{{17307792675528442319ull, 14012482570271638112ull,
+ 18081009620987980094ull, 4671641504439548562ull}},
+{{3187996770701001283ull, 8292231175984771833ull,
+ 13377889989380199310ull, 5839551880549435703ull}},
+{{8596681981803639507ull, 1141916933126188983ull,
+ 12110676468297861234ull, 7299439850686794629ull}},
+{{6134166458827161480ull, 10650768203262512037ull,
+ 1303287530090162830ull, 9124299813358493287ull}},
+{{6139697045980669877ull, 2045044108611682119ull,
+ 7732083733947433625ull, 5702687383349058304ull}},
+{{3062935289048449442ull, 7167991154191990553ull,
+ 9665104667434292031ull, 7128359229186322880ull}},
+{{8440355129737949707ull, 4348302924312600287ull,
+ 12081380834292865039ull, 8910449036482903600ull}},
+{{12192750983727300423ull, 9635218355336457035ull,
+ 7550863021433040649ull, 5569030647801814750ull}},
+{{10629252711231737625ull, 16655708962597959198ull,
+ 215206739936525003ull, 6961288309752268438ull}},
+{{4063193852184896223ull, 16207950184820061094ull,
+ 9492380461775432062ull, 8701610387190335547ull}},
+{{16374554212897723851ull, 5518282847085150279ull,
+ 3626894779395951087ull, 5438506491993959717ull}},
+{{15856506747694766910ull, 2286167540429049945ull,
+ 9145304492672326763ull, 6798133114992449646ull}},
+{{5985575379336294926ull, 16692767480818476144ull,
+ 2208258578985632645ull, 8497666393740562058ull}},
+{{3740984612085184329ull, 12738822684725241542ull,
+ 5991847630293408307ull, 5311041496087851286ull}},
+{{13899602801961256219ull, 11311842337479164023ull,
+ 16713181574721536192ull, 6638801870109814107ull}},
+{{12762817484024182369ull, 14139802921848955029ull,
+ 16279790949974532336ull, 8298502337637267634ull}},
+{{10282603936728807933ull, 8837376826155596893ull,
+ 14786555362161470614ull, 5186563961023292271ull}},
+{{17464940939338397820ull, 1823348995839720308ull,
+ 13871508184274450364ull, 6483204951279115339ull}},
+{{3384432100463445659ull, 2279186244799650386ull,
+ 12727699211915675051ull, 8104006189098894174ull}},
+{{6726956081217041441ull, 17565392467495639155ull,
+ 3343125989019909002ull, 5065003868186808859ull}},
+{{3797009083093913897ull, 12733368547514773136ull,
+ 18013965541557049965ull, 6331254835233511073ull}},
+{{4746261353867392371ull, 2081652629111302708ull,
+ 8682398871664148745ull, 7914068544041888842ull}},
+{{12189785383021896040ull, 12830247939263033952ull,
+ 10038185313217480869ull, 4946292840026180526ull}},
+{{15237231728777370050ull, 2202751868796628728ull,
+ 3324359604667075279ull, 6182866050032725658ull}},
+{{599795587262160947ull, 16588497891277949623ull,
+ 13378821542688619906ull, 7728582562540907072ull}},
+{{7292401269679932448ull, 14979497200476106418ull,
+ 8361763464180387441ull, 4830364101588066920ull}},
+{{18338873623954691368ull, 4889313445312969310ull,
+ 10452204330225484302ull, 6037955126985083650ull}},
+{{13700219993088588401ull, 15335013843495987446ull,
+ 3841883375927079569ull, 7547443908731354563ull}},
+{{3950951477252979847ull, 2666854624543910298ull, 95334100740730779ull,
+ 4717152442957096602ull}},
+{{14162061383421000617ull, 17168626335962051584ull,
+ 9342539662780689281ull, 5896440553696370752ull}},
+{{17702576729276250771ull, 7625724864670400768ull,
+ 11678174578475861602ull, 7370550692120463440ull}},
+{{3681476837885761847ull, 308784043983225153ull,
+ 14597718223094827003ull, 9213188365150579300ull}},
+{{13830138069747070915ull, 16333891091985373384ull,
+ 18346945926289042684ull, 5758242728219112062ull}},
+{{17287672587183838643ull, 1970619791272165114ull,
+ 13710310371006527548ull, 7197803410273890078ull}},
+{{12386218697125022496ull, 2463274739090206393ull,
+ 7914515926903383627ull, 8997254262842362598ull}},
+{{823857658062057204ull, 17680447776427236660ull, 334886435887226862ull,
+ 5623283914276476624ull}},
+{{1029822072577571505ull, 12877187683679270017ull,
+ 418608044859033578ull, 7029104892845595780ull}},
+{{5898963609149352285ull, 6873112567744311713ull, 523260056073791973ull,
+ 8786381116056994725ull}},
+{{15216067301786814939ull, 6601538364053888772ull,
+ 2632880544259813935ull, 5491488197535621703ull}},
+{{573340053523967057ull, 3640236936639973062ull,
+ 17126158735606931131ull, 6864360246919527128ull}},
+{{9940047103759734629ull, 18385354226082130039ull,
+ 2960954345799112297ull, 8580450308649408911ull}},
+{{13130058467490915999ull, 4573317363660249418ull,
+ 8768125493765527042ull, 5362781442905880569ull}},
+{{7189201047508869191ull, 14940018741430087581ull,
+ 15571842885634296706ull, 6703476803632350711ull}},
+{{13598187327813474393ull, 9451651389932833668ull,
+ 14853117588615482979ull, 8379346004540438389ull}},
+{{17722239116738197304ull, 3601439109494327090ull,
+ 11589041502098370814ull, 5237091252837773993ull}},
+{{12929426859067970822ull, 13725170923722684671ull,
+ 651243822340799805ull, 6546364066047217492ull}},
+{{11550097555407575623ull, 3321405599371192127ull,
+ 814054777925999757ull, 8182955082559021865ull}},
+{{14136339999770816620ull, 4381721508820689031ull,
+ 12037999282272219608ull, 5114346926599388665ull}},
+{{13058738981286132871ull, 5477151886025861289ull,
+ 1212441047558110798ull, 6392933658249235832ull}},
+{{2488365671325502377ull, 16069811894387102420ull,
+ 1515551309447638497ull, 7991167072811544790ull}},
+{{10778600581433214794ull, 3126103406350857156ull,
+ 14782277623686937773ull, 4994479420507215493ull}},
+{{13473250726791518492ull, 8519315276365959349ull,
+ 4642788974326508504ull, 6243099275634019367ull}},
+{{3006505353207234403ull, 10649144095457449187ull,
+ 1191800199480747726ull, 7803874094542524209ull}},
+{{18019966910250379166ull, 2044029041233517837ull,
+ 12274090170743937089ull, 4877421309089077630ull}},
+{{8689900582530810246ull, 7166722319969285201ull,
+ 6119240676575145553ull, 6096776636361347038ull}},
+{{15474061746590900711ull, 13570088918388994405ull,
+ 16872422882573707749ull, 7620970795451683797ull}},
+{{11977131600833006896ull, 10787148583206815455ull,
+ 12851107310822261295ull, 4763106747157302373ull}},
+{{10359728482613870716ull, 8872249710581131415ull,
+ 2228826083245662907ull, 5953883433946627967ull}},
+{{8337974584839950491ull, 6478626119799026365ull,
+ 16621090659339242346ull, 7442354292433284958ull}},
+{{7517077124738663009ull, 8660827343301779382ull,
+ 5776495643659638562ull, 4651471432770803099ull}},
+{{172974369068552954ull, 1602662142272448420ull, 2608933536147160299ull,
+ 5814339290963503874ull}},
+{{216217961335691192ull, 15838385733122724237ull,
+ 12484538957038726181ull, 7267924113704379842ull}},
+{{4881958470097001894ull, 5962924111121241584ull,
+ 6382301659443631919ull, 9084905142130474803ull}},
+{{3051224043810626184ull, 10644356597091857846ull,
+ 1683095527938575997ull, 5678065713831546752ull}},
+{{13037402091618058538ull, 17917131764792210211ull,
+ 2103869409923219996ull, 7097582142289433440ull}},
+{{11685066596095185268ull, 3949670632280711148ull,
+ 2629836762404024996ull, 8871977677861791800ull}},
+{{16526538659414266601ull, 11691916182030220275ull,
+ 1643647976502515622ull, 5544986048663619875ull}},
+{{16046487305840445347ull, 5391523190682999536ull,
+ 15889618025910308240ull, 6931232560829524843ull}},
+{{1611365058591005067ull, 6739403988353749421ull,
+ 15250336513960497396ull, 8664040701036906054ull}},
+{{3312946170833072119ull, 13435499529575869196ull,
+ 4919774302797922968ull, 5415025438148066284ull}},
+{{4141182713541340149ull, 16794374411969836495ull,
+ 6149717878497403710ull, 6768781797685082855ull}},
+{{564792373499287282ull, 11769595978107519811ull,
+ 3075461329694366734ull, 8460977247106353569ull}},
+{{16493896297932912215ull, 2744311467889811977ull,
+ 13451378377127448969ull, 5288110779441470980ull}},
+{{6782312317133976557ull, 8042075353289652876ull,
+ 16814222971409311211ull, 6610138474301838725ull}},
+{{8477890396417470696ull, 5440908173184678191ull,
+ 7182720658979475302ull, 8262673092877298407ull}},
+{{12216210525402001041ull, 17235625663522587581ull,
+ 11406729439503253919ull, 5164170683048311504ull}},
+{{1435205101470337590ull, 16932846060975846573ull,
+ 14258411799379067399ull, 6455213353810389380ull}},
+{{6405692395265309891ull, 16554371557792420312ull,
+ 17823014749223834249ull, 8069016692262986725ull}},
+{{4003557747040818682ull, 3428953195979180839ull,
+ 13445227227478590358ull, 5043135432664366703ull}},
+{{392761165373635448ull, 13509563531828751857ull,
+ 12194848015920850043ull, 6303919290830458379ull}},
+{{5102637475144432214ull, 12275268396358551917ull,
+ 10631874001473674650ull, 7879899113538072974ull}},
+{{5494991431178964086ull, 12283728766151482852ull,
+ 2033235232493658752ull, 4924936945961295609ull}},
+{{6868739288973705107ull, 15354660957689353565ull,
+ 7153230059044461344ull, 6156171182451619511ull}},
+{{13197610129644519288ull, 746582123402140340ull,
+ 4329851555378188777ull, 7695213978064524389ull}},
+{{17471878367882600363ull, 11995828873194807472ull,
+ 5012000231325061937ull, 4809508736290327743ull}},
+{{3393103886143698838ull, 1159728036211345629ull,
+ 1653314270728939518ull, 6011885920362909679ull}},
+{{8853065876107011451ull, 10673032082118957844ull,
+ 15901700893693338109ull, 7514857400453637098ull}},
+{{14756538209421657965ull, 8976488060538042604ull,
+ 14550249076985724222ull, 4696785875283523186ull}},
+{{18445672761777072457ull, 1997238038817777447ull,
+ 8964439309377379470ull, 5870982344104403983ull}},
+{{18445404933793952667ull, 11719919585376997617ull,
+ 6593863118294336433ull, 7338727930130504979ull}},
+{{9221698111960277121ull, 814841426439083310ull, 3630642879440532638ull,
+ 9173409912663131224ull}},
+{{1151875301547785297ull, 14344333946806590781ull,
+ 2269151799650332898ull, 5733381195414457015ull}},
+{{6051530145362119525ull, 8707045396653462668ull,
+ 16671497804845079835ull, 7166726494268071268ull}},
+{{7564412681702649406ull, 6272120727389440431ull,
+ 2392628182346798178ull, 8958408117835089086ull}},
+{{11645286953705237735ull, 8531761473045788173ull,
+ 15330450669248912573ull, 5599005073646930678ull}},
+{{721550636849383457ull, 15276387859734623121ull,
+ 9939691299706364908ull, 6998756342058663348ull}},
+{{5513624314489117225ull, 648740750958727285ull,
+ 12424614124632956136ull, 8748445427573329185ull}},
+{{5751858205769392218ull, 405462969349204553ull, 847854800254515729ull,
+ 5467778392233330741ull}},
+{{11801508775639128176ull, 5118514730113893595ull,
+ 5671504518745532565ull, 6834722990291663426ull}},
+{{10140199951121522316ull, 11009829431069754898ull,
+ 16312752685286691514ull, 8543403737864579282ull}},
+{{10949310987878339351ull, 11492829412845984715ull,
+ 14807156446731570100ull, 5339627336165362051ull}},
+{{9074952716420536285ull, 14366036766057480894ull,
+ 13897259539987074721ull, 6674534170206702564ull}},
+{{2120318858670894548ull, 4122487902289687406ull,
+ 17371574424983843402ull, 8343167712758378205ull}},
+{{15160257341951472805ull, 7188240957358442532ull,
+ 13163077024828596078ull, 5214479820473986378ull}},
+{{503577603729789390ull, 18208673233552828974ull,
+ 7230474244180969289ull, 6518099775592482973ull}},
+{{9852844041517012545ull, 8925783486658872505ull,
+ 13649778823653599516ull, 8147624719490603716ull}},
+{{17687242572016602601ull, 14801986716016571123ull,
+ 17754483801638275505ull, 5092265449681627322ull}},
+{{17497367196593365347ull, 4667425339738550192ull,
+ 12969732715193068574ull, 6365331812102034153ull}},
+{{3424964922032155068ull, 15057653711527963549ull,
+ 2377107838709172005ull, 7956664765127542692ull}},
+{{4446446085483790870ull, 11716876578918671170ull,
+ 10709064436048008311ull, 4972915478204714182ull}},
+{{14781429643709514395ull, 10034409705220951058ull,
+ 4162958508205234581ull, 6216144347755892728ull}},
+{{9253415017782117185ull, 17154698149953576727ull,
+ 5203698135256543226ull, 7770180434694865910ull}},
+{{12700913413754905097ull, 15333372362148373358ull,
+ 17087369389817503228ull, 4856362771684291193ull}},
+{{6652769730338855563ull, 719971378975915082ull, 7524153681989715324ull,
+ 6070453464605363992ull}},
+{{17539334199778345262ull, 899964223719893852ull,
+ 9405192102487144155ull, 7588066830756704990ull}},
+{{1738711838006689981ull, 16703378704320791322ull,
+ 1266559045627077192ull, 4742541769222940619ull}},
+{{11396761834363138284ull, 2432479306691437536ull,
+ 15418256862316010203ull, 5928177211528675773ull}},
+{{14245952292953922855ull, 16875657188646460632ull,
+ 5437763022612849041ull, 7410221514410844717ull}},
+{{8903720183096201784ull, 3629756715262956039ull,
+ 5704444898346724603ull, 4631388446506777948ull}},
+{{6517964210442864326ull, 18372253949360858761ull,
+ 7130556122933405753ull, 5789235558133472435ull}},
+{{12759141281480968312ull, 9130259381418909739ull,
+ 4301509135239369288ull, 7236544447666840544ull}},
+{{11337240583423822486ull, 11412824226773637174ull,
+ 5376886419049211610ull, 9045680559583550680ull}},
+{{2474089346212501150ull, 11744701160160911138ull,
+ 3360554011905757256ull, 5653550349739719175ull}},
+{{12315983719620402245ull, 14680876450201138922ull,
+ 18035750570164360282ull, 7066937937174648968ull}},
+{{6171607612670726998ull, 9127723525896647845ull,
+ 4097944138995898737ull, 8833672421468311211ull}},
+{{6163097767132898326ull, 17234042249753874663ull,
+ 255372077658742758ull, 5521045263417694507ull}},
+{{3092186190488735004ull, 12319180775337567521ull,
+ 14154273152355592160ull, 6901306579272118133ull}},
+{{8476918756538306658ull, 15398975969171959401ull,
+ 3857783385162326488ull, 8626633224090147667ull}},
+{{16827289268904911422ull, 9624359980732474625ull,
+ 105271606512760103ull, 5391645765056342292ull}},
+{{7199053530848975565ull, 7418763957488205378ull, 131589508140950129ull,
+ 6739557206320427865ull}},
+{{18222188950415995264ull, 13885140965287644626ull,
+ 4776172903603575565ull, 8424446507900534831ull}},
+{{16000554112437384944ull, 10984056112518471843ull,
+ 9902637092393316584ull, 5265279067437834269ull}},
+{{15389006622119343276ull, 13730070140648089804ull,
+ 16989982383919033634ull, 6581598834297292836ull}},
+{{789514203939627479ull, 7939215638955336448ull, 2790733906189240427ull,
+ 8226998542871616046ull}},
+{{493446377462267175ull, 2656166765133391328ull,
+ 15579266746650438979ull, 5141874089294760028ull}},
+{{616807971827833968ull, 17155266511698902872ull,
+ 1027339359603497107ull, 6427342611618450036ull}},
+{{771009964784792460ull, 16832397121196240686ull,
+ 1284174199504371384ull, 8034178264523062545ull}},
+{{14316939283272659000ull, 10520248200747650428ull,
+ 12331823920758701875ull, 5021361415326914090ull}},
+{{17896174104090823750ull, 8538624232507175131ull,
+ 6191407864093601536ull, 6276701769158642613ull}},
+{{17758531611686141783ull, 10673280290633968914ull,
+ 12350945848544389824ull, 7845877211448303266ull}},
+{{15710768275731226518ull, 6670800181646230571ull,
+ 12331027173767631544ull, 4903673257155189541ull}},
+{{15026774326236645244ull, 8338500227057788214ull,
+ 1578725911927375718ull, 6129591571443986927ull}},
+{{9560095870941030747ull, 1199753246967459460ull,
+ 15808465445191383360ull, 7661989464304983658ull}},
+{{15198431956192920025ull, 749845779354662162ull,
+ 14491976921672002504ull, 4788743415190614786ull}},
+{{9774667908386374223ull, 937307224193327703ull, 8891599115235227322ull,
+ 5985929268988268483ull}},
+{{7606648867055579875ull, 10395006067096435437ull,
+ 6502812875616646248ull, 7482411586235335604ull}},
+{{7059998551123431374ull, 6496878791935272148ull,
+ 13287630084115179713ull, 4676507241397084752ull}},
+{{8824998188904289217ull, 12732784508346478089ull,
+ 16609537605143974641ull, 5845634051746355940ull}},
+{{15642933754557749425ull, 2080922580150933899ull,
+ 2315177932720416686ull, 7307042564682944926ull}},
+{{14941981174769798878ull, 11824525262043443182ull,
+ 12117344452755296665ull, 9133803205853681157ull}},
+{{4727052215803736395ull, 472799261136070133ull, 9879183292185754368ull,
+ 5708627003658550723ull}},
+{{10520501288182058397ull, 590999076420087666ull,
+ 7737293096804805056ull, 7135783754573188404ull}},
+{{3927254573372797188ull, 738748845525109583ull, 9671616371006006320ull,
+ 8919729693216485505ull}},
+{{9372063135999080099ull, 461718028453193489ull,
+ 17573975277947223710ull, 5574831058260303440ull}},
+{{16326764938426238028ull, 9800519572421267669ull,
+ 3520725023724478021ull, 6968538822825379301ull}},
+{{6573398117750633822ull, 16862335483953972491ull,
+ 9012592298082985430ull, 8710673528531724126ull}},
+{{1802530814380452187ull, 5927273659043844903ull,
+ 1021184167874477990ull, 5444170955332327579ull}},
+{{16088221573257728946ull, 16632464110659581936ull,
+ 15111538265125261199ull, 6805213694165409473ull}},
+{{1663532892862609566ull, 16178894119897089517ull,
+ 5054364776124412787ull, 8506517117706761842ull}},
+{{3345551067252824931ull, 7805965815721986996ull,
+ 7770664003505145896ull, 5316573198566726151ull}},
+{{4181938834066031164ull, 9757457269652483745ull,
+ 5101643985954044466ull, 6645716498208407689ull}},
+{{9839109561009926858ull, 2973449550210828873ull,
+ 10988741000869943487ull, 8307145622760509611ull}},
+{{17678658521699674047ull, 8775934996522849901ull,
+ 4562120116330020727ull, 5191966014225318507ull}},
+{{8263265096842428846ull, 6358232727226174473ull,
+ 1090964126985138005ull, 6489957517781648134ull}},
+{{14940767389480423962ull, 12559476927460105995ull,
+ 10587077195586198314ull, 8112446897227060167ull}},
+{{7032136609211571024ull, 12461359098089954151ull,
+ 13534452274882455802ull, 5070279310766912604ull}},
+{{4178484743087075876ull, 6353326835757666881ull,
+ 16918065343603069753ull, 6337849138458640755ull}},
+{{9834791947286232749ull, 12553344563124471505ull,
+ 16535895661076449287ull, 7922311423073300944ull}},
+{{17675960013122365228ull, 14763369379593876546ull,
+ 10334934788172780804ull, 4951444639420813090ull}},
+{{12871577979548180727ull, 7467650782794067ull, 3695296448361200198ull,
+ 6189305799276016363ull}},
+{{11477786456007838005ull, 9232706600333268392ull, 7434542024112343ull,
+ 7736632249095020454ull}},
+{{7173616535004898753ull, 12687970652849374601ull,
+ 13839704644047233926ull, 4835395155684387783ull}},
+{{13578706687183511346ull, 6636591279206942443ull,
+ 12687944786631654504ull, 6044243944605484729ull}},
+{{12361697340552001278ull, 8295739099008678054ull,
+ 2024872928007404418ull, 7555304930756855912ull}},
+{{3114374819417612895ull, 9796522955307811688ull,
+ 1265545580004627761ull, 4722065581723034945ull}},
+{{3892968524272016118ull, 16857339712562152514ull,
+ 6193617993433172605ull, 5902581977153793681ull}},
+{{14089582692194795956ull, 7236616585420526930ull,
+ 12353708510218853661ull, 7378227471442242101ull}},
+{{8388606328388719137ull, 13657456750203046567ull,
+ 1607077582491403364ull, 9222784339302802627ull}},
+{{12160407982884031317ull, 17759282505731679912ull,
+ 17145324553552984766ull, 5764240212064251641ull}},
+{{15200509978605039146ull, 12975731095309824082ull,
+ 7596597636659067246ull, 7205300265080314552ull}},
+{{9777265436401523124ull, 6996291832282504295ull,
+ 9495747045823834058ull, 9006625331350393190ull}},
+{{13028319925392033809ull, 8984368413603953088ull,
+ 1323155885212508382ull, 5629140832093995744ull}},
+{{16285399906740042261ull, 2007088480150165552ull,
+ 1653944856515635478ull, 7036426040117494680ull}},
+{{1910005809715501210ull, 11732232637042482749ull,
+ 2067431070644544347ull, 8795532550146868350ull}},
+{{3499596640285882208ull, 5026802388937857766ull,
+ 15127202474435003929ull, 5497207843841792718ull}},
+{{13597867837212128568ull, 10895189004599710111ull,
+ 9685631056188979103ull, 6871509804802240898ull}},
+{{12385648778087772806ull, 9007300237322249735ull,
+ 2883666783381448071ull, 8589387256002801123ull}},
+{{14658559513945939860ull, 12547091675967487940ull,
+ 17943192804109262708ull, 5368367035001750701ull}},
+{{18323199392432424825ull, 15683864594959359925ull,
+ 8593932949854414673ull, 6710458793752188377ull}},
+{{9068941185258367319ull, 5769772688417036195ull,
+ 15354102205745406246ull, 8388073492190235471ull}},
+{{3362245231572785623ull, 17441165985542811334ull,
+ 16513842906231960759ull, 5242545932618897169ull}},
+{{13426178576320757836ull, 17189771463501126263ull,
+ 6807245577507787237ull, 6553182415773621462ull}},
+{{12171037201973559391ull, 7652156274094244117ull,
+ 17732429008739509855ull, 8191478019717026827ull}},
+{{9912741260447168572ull, 11700126698949984429ull,
+ 8776925121248499707ull, 5119673762323141767ull}},
+{{17002612593986348618ull, 10013472355260092632ull,
+ 6359470383133236730ull, 6399592202903927209ull}},
+{{2806521668773384157ull, 3293468407220339983ull,
+ 12561023997343933817ull, 7999490253629909011ull}},
+{{8671605070624446954ull, 13587632800581182249ull,
+ 5544796989126264683ull, 4999681408518693132ull}},
+{{15451192356707946597ull, 12372854982299089907ull,
+ 6930996236407830854ull, 6249601760648366415ull}},
+{{14702304427457545342ull, 6242696691019086576ull,
+ 4052059277082400664ull, 7812002200810458019ull}},
+{{9188940267160965839ull, 3901685431886929110ull, 226694038962806463ull,
+ 4882501375506536262ull}},
+{{2262803297096431490ull, 265420771431273484ull, 9506739585558283887ull,
+ 6103126719383170327ull}},
+{{2828504121370539363ull, 14166834019571255567ull,
+ 7271738463520466954ull, 7628908399228962909ull}},
+{{8685344103497668958ull, 13465957280659422633ull,
+ 6850679548913985798ull, 4768067749518101818ull}},
+{{15468366147799474101ull, 7609074563969502483ull,
+ 17786721472997258056ull, 5960084686897627272ull}},
+{{14723771666321954722ull, 9511343204961878104ull,
+ 3786657767537020954ull, 7450105858622034091ull}},
+{{9202357291451221702ull, 10556275521528561719ull, 60818095496944144ull,
+ 4656316161638771307ull}},
+{{6891260595886639223ull, 13195344401910702149ull,
+ 13911080674653343892ull, 5820395202048464133ull}},
+{{13225761763285686933ull, 16494180502388377686ull,
+ 3553792788034516153ull, 7275494002560580167ull}},
+{{7308830167252332858ull, 6782667572703308396ull,
+ 18277299040325308904ull, 9094367503200725208ull}},
+{{13791390891387483844ull, 4239167232939567747ull,
+ 11423311900203318065ull, 5683979689500453255ull}},
+{{12627552595806966901ull, 9910645059601847588ull,
+ 9667453856826759677ull, 7104974611875566569ull}},
+{{15784440744758708626ull, 16999992342929697389ull,
+ 16696003339460837500ull, 8881218264844458211ull}},
+{{12171118474687886844ull, 1401623177476285060ull,
+ 8129159077949329486ull, 5550761415527786382ull}},
+{{15213898093359858554ull, 10975401008700132133ull,
+ 938076810581886049ull, 6938451769409732978ull}},
+{{5182314561417659481ull, 18330937279302553071ull,
+ 10395968050082133369ull, 8673064711762166222ull}},
+{{10156475628527119032ull, 4539306771923013813ull,
+ 1885794012873945452ull, 5420665444851353889ull}},
+{{17307280554086286694ull, 5674133464903767266ull,
+ 6968928534519819719ull, 6775831806064192361ull}},
+{{12410728655753082559ull, 2480980812702321179ull,
+ 13322846686577162553ull, 8469789757580240451ull}},
+{{5450862400631982647ull, 13079828054007420497ull,
+ 6020936169897032643ull, 5293618598487650282ull}},
+{{11425264019217366213ull, 11738099049081887717ull,
+ 16749542249226066612ull, 6617023248109562852ull}},
+{{446521968739544054ull, 14672623811352359647ull,
+ 2490183737823031649ull, 8271279060136953566ull}},
+{{7196605258103296890ull, 2252860854454142923ull,
+ 15391422891421558493ull, 5169549412585595978ull}},
+{{4384070554201733209ull, 7427762086495066558ull,
+ 10015906577422172308ull, 6461936765731994973ull}},
+{{14703460229606942319ull, 9284702608118833197ull,
+ 17131569240205103289ull, 8077420957164993716ull}},
+{{11495505652718032901ull, 17332154176142740508ull,
+ 1483858738273413747ull, 5048388098228121073ull}},
+{{14369382065897541126ull, 17053506701751037731ull,
+ 6466509441269155088ull, 6310485122785151341ull}},
+{{13350041563944538504ull, 2870139303479245548ull,
+ 12694822820013831765ull, 7888106403481439176ull}},
+{{17567148014320112373ull, 4099680073888222419ull,
+ 7934264262508644853ull, 4930066502175899485ull}},
+{{17347248999472752562ull, 9736286110787665928ull,
+ 14529516346563193970ull, 6162583127719874356ull}},
+{{3237317175631389087ull, 2946985601629806603ull,
+ 18161895433203992463ull, 7703228909649842945ull}},
+{{18164224299265475843ull, 8759395028659710982ull,
+ 4433655618111413433ull, 4814518068531151841ull}},
+{{13481908337227068996ull, 15560929804252026632ull,
+ 10153755541066654695ull, 6018147585663939801ull}},
+{{16852385421533836245ull, 14839476236887645386ull,
+ 17303880444760706273ull, 7522684482079924751ull}},
+{{15144426906886035557ull, 2357143620413696510ull,
+ 17732454305616523277ull, 4701677801299952969ull}},
+{{9707161596752768639ull, 7558115543944508542ull,
+ 8330509826738490384ull, 5877097251624941212ull}},
+{{2910579959086184990ull, 9447644429930635678ull,
+ 10413137283423112980ull, 7346371564531176515ull}},
+{{12861596985712507045ull, 11809555537413294597ull,
+ 8404735585851503321ull, 9182964455663970644ull}},
+{{10344341125284010856ull, 463443183242227267ull,
+ 14476331778011965384ull, 5739352784789981652ull}},
+{{8318740388177625665ull, 579303979052784084ull,
+ 18095414722514956730ull, 7174190980987477065ull}},
+{{10398425485222032082ull, 9947502010670755913ull,
+ 8784210347861532200ull, 8967738726234346332ull}},
+{{18028230974332239811ull, 6217188756669222445ull,
+ 14713503504268233433ull, 5604836703896466457ull}},
+{{8700230662633136052ull, 12383171964263915961ull,
+ 4556821325053128079ull, 7006045879870583072ull}},
+{{15486974346718807969ull, 10867278936902507047ull,
+ 5696026656316410099ull, 8757557349838228840ull}},
+{{16596887994340336837ull, 4486206326350372952ull,
+ 3560016660197756312ull, 5473473343648893025ull}},
+{{2299365919215869430ull, 5607757907937966191ull,
+ 9061706843674583294ull, 6841841679561116281ull}},
+{{16709265454302000499ull, 16233069421777233546ull,
+ 15938819573020617021ull, 8552302099451395351ull}},
+{{15054976927366138216ull, 12451511397824464918ull,
+ 16879291260778967494ull, 5345188812157122094ull}},
+{{9595349122352896962ull, 6341017210425805340ull,
+ 11875742039118933560ull, 6681486015196402618ull}},
+{{11994186402941121202ull, 7926271513032256675ull,
+ 5621305512043891142ull, 8351857518995503273ull}},
+{{5190523492624506800ull, 342233677217772518ull,
+ 15042530991095901724ull, 5219910949372189545ull}},
+{{15711526402635409307ull, 427792096522215647ull,
+ 4968105683587713443ull, 6524888686715236932ull}},
+{{15027721984866873730ull, 14369798175934933271ull,
+ 6210132104484641803ull, 8156110858394046165ull}},
+{{16309855268182877938ull, 6675280850745639342ull,
+ 6187175574516595079ull, 5097569286496278853ull}},
+{{11163947048373821614ull, 3732415045004661274ull,
+ 12345655486573131753ull, 6371961608120348566ull}},
+{{4731561773612501209ull, 9277204824683214497ull,
+ 6208697321361638883ull, 7964952010150435708ull}},
+{{14486441154576283016ull, 3492410006213315108ull,
+ 13103807862705800110ull, 4978095006344022317ull}},
+{{18108051443220353770ull, 13588884544621419693ull,
+ 2544701773100086425ull, 6222618757930027897ull}},
+{{8800006248743278500ull, 3151047625494610905ull,
+ 7792563234802495936ull, 7778273447412534871ull}},
+{{17029218951533018823ull, 1969404765934131815ull,
+ 11787881049392641816ull, 4861420904632834294ull}},
+{{16674837670988885624ull, 2461755957417664769ull,
+ 5511479274886026462ull, 6076776130791042868ull}},
+{{7008489033453943318ull, 12300566983626856770ull,
+ 6889349093607533077ull, 7595970163488803585ull}},
+{{8991991664336102478ull, 9993697373980479433ull,
+ 15835058229573177933ull, 4747481352180502240ull}},
+{{15851675598847516001ull, 17103807735902987195ull,
+ 1347078713256920800ull, 5934351690225627801ull}},
+{{15202908480132007098ull, 2933015596169182378ull,
+ 6295534409998538905ull, 7417939612782034751ull}},
+{{14113503818509892340ull, 13362349793674208746ull,
+ 10852238033890168671ull, 4636212257988771719ull}},
+{{8418507736282589617ull, 12091251223665373029ull,
+ 8953611523935322935ull, 5795265322485964649ull}},
+{{15134820688780624925ull, 10502378011154328382ull,
+ 15803700423346541573ull, 7244081653107455811ull}},
+{{9695153824121005349ull, 17739658532370298382ull,
+ 15142939510755789062ull, 9055102066384319764ull}},
+{{1447785121648240439ull, 6475600564304048585ull, 240965157367592356ull,
+ 5659438791490199853ull}},
+{{6421417420487688453ull, 8094500705380060731ull,
+ 4912892465136878349ull, 7074298489362749816ull}},
+{{3415085757182222662ull, 14729811900152463818ull,
+ 6141115581421097936ull, 8842873111703437270ull}},
+{{6746114616666277068ull, 9206132437595289886ull,
+ 17673255293670349922ull, 5526795694814648293ull}},
+{{17656015307687622143ull, 2284293510139336549ull,
+ 8256511061805773691ull, 6908494618518310367ull}},
+{{8234961079327363966ull, 16690424942956334399ull,
+ 5708952808829829209ull, 8635618273147887959ull}},
+{{12064379702220684335ull, 3513986561706627143ull,
+ 10485624533159725112ull, 5397261420717429974ull}},
+{{10468788609348467515ull, 4392483202133283929ull,
+ 3883658629594880582ull, 6746576775896787468ull}},
+{{17697671780112972297ull, 14713976039521380719ull,
+ 4854573286993600727ull, 8433220969870984335ull}},
+{{17978573890211689542ull, 16113764052341944805ull,
+ 9951637332012082310ull, 5270763106169365209ull}},
+{{8638159307482448215ull, 10918833028572655199ull,
+ 17051232683442490792ull, 6588453882711706511ull}},
+{{6186013115925672365ull, 13648541285715818999ull,
+ 16702354835875725586ull, 8235567353389633139ull}},
+{{10783787225094627084ull, 13142024321999774778ull,
+ 8133128763208634539ull, 5147229595868520712ull}},
+{{4256361994513508047ull, 11815844384072330569ull,
+ 10166410954010793174ull, 6434036994835650890ull}},
+{{9932138511569272963ull, 5546433443235637403ull,
+ 3484641655658715660ull, 8042546243544563613ull}},
+{{3901743560517101650ull, 12689892938877049185ull,
+ 4483744044000391239ull, 5026591402215352258ull}},
+{{9488865469073764966ull, 11250680155168923577ull,
+ 14828052091855264857ull, 6283239252769190322ull}},
+{{16472767854769594112ull, 228292138678990759ull,
+ 9311693077964305264ull, 7854049065961487903ull}},
+{{17213008936872078176ull, 142682586674369224ull,
+ 12737337201368772646ull, 4908780666225929939ull}},
+{{3069517097380546104ull, 9401725270197737339ull,
+ 11309985483283577903ull, 6135975832782412424ull}},
+{{17671954427007846342ull, 7140470569319783769ull,
+ 14137481854104472379ull, 7669969790978015530ull}},
+{{4127442489238822108ull, 2156951096611170904ull,
+ 13447612177242683141ull, 4793731119361259706ull}},
+{{5159303111548527635ull, 7307874889191351534ull,
+ 7586143184698578118ull, 5992163899201574633ull}},
+{{15672500926290435351ull, 18358215648343965225ull,
+ 14094364999300610551ull, 7490204874001968291ull}},
+{{2877784051290440239ull, 18391413807856060122ull,
+ 6503135115349187642ull, 4681378046251230182ull}},
+{{12820602100967826106ull, 13765895222965299344ull,
+ 17352290931041260361ull, 5851722557814037727ull}},
+{{16025752626209782633ull, 3372310973424460468ull,
+ 17078677645374187548ull, 7314653197267547159ull}},
+{{1585446709052676675ull, 4215388716780575586ull,
+ 16736661038290346531ull, 9143316496584433949ull}},
+{{5602590211585310826ull, 328774938774165789ull,
+ 12766256158145160534ull, 5714572810365271218ull}},
+{{11614923782909026436ull, 9634340710322483044ull,
+ 6734448160826674859ull, 7143216012956589023ull}},
+{{14518654728636283045ull, 7431239869475715901ull,
+ 3806374182605955670ull, 8929020016195736279ull}},
+{{11380002214611370855ull, 32838899994934534ull, 9296512891769804150ull,
+ 5580637510122335174ull}},
+{{5001630731409437761ull, 9264420661848443976ull,
+ 2397269077857479379ull, 6975796887652918968ull}},
+{{6252038414261797201ull, 6968839808883167066ull,
+ 2996586347321849224ull, 8719746109566148710ull}},
+{{8519210027341011155ull, 4355524880551979416ull,
+ 15707924522358319477ull, 5449841318478842943ull}},
+{{10649012534176263944ull, 10056092119117362174ull,
+ 15023219634520511442ull, 6812301648098553679ull}},
+{{4087893630865554121ull, 3346743112041926910ull,
+ 14167338524723251399ull, 8515377060123192099ull}},
+{{16389991574573135038ull, 9009243472667286174ull,
+ 6548743568738338172ull, 5322110662576995062ull}},
+{{11264117431361642989ull, 11261554340834107718ull,
+ 17409301497777698523ull, 6652638328221243827ull}},
+{{4856774752347277929ull, 9465256907615246744ull,
+ 17149940853794735250ull, 8315797910276554784ull}},
+{{3035484220217048706ull, 10527471585686917119ull,
+ 10718713033621709531ull, 5197373693922846740ull}},
+{{17629413330553474594ull, 8547653463681258494ull,
+ 13398391292027136914ull, 6496717117403558425ull}},
+{{12813394626337067434ull, 1461194792746797310ull,
+ 2912931059751757431ull, 8120896396754448032ull}},
+{{3396685623033279243ull, 7830775773107830175ull,
+ 1820581912344848394ull, 5075560247971530020ull}},
+{{18080915084073762765ull, 565097679530011910ull,
+ 2275727390431060493ull, 6344450309964412525ull}},
+{{13377771818237427648ull, 5318058117839902792ull,
+ 7456345256466213520ull, 7930562887455515656ull}},
+{{8361107386398392280ull, 3323786323649939245ull,
+ 4660215785291383450ull, 4956601804659697285ull}},
+{{15063070251425378254ull, 13378104941417199864ull,
+ 10436955750041617216ull, 6195752255824621606ull}},
+{{382093740572171202ull, 16722631176771499831ull,
+ 3822822650697245712ull, 7744690319780777008ull}},
+{{7156337615498688857ull, 10451644485482187394ull,
+ 2389264156685778570ull, 4840431449862985630ull}},
+{{18168794056228136880ull, 3841183569997958434ull,
+ 12209952232711999021ull, 6050539312328732037ull}},
+{{13487620533430395291ull, 9413165480924835947ull,
+ 1427382235607835064ull, 7563174140410915047ull}},
+{{6123919824180303105ull, 5883228425578022467ull,
+ 7809642924895978771ull, 4726983837756821904ull}},
+{{3043213761797990977ull, 2742349513545140180ull,
+ 9762053656119973464ull, 5908729797196027380ull}},
+{{3804017202247488722ull, 3427936891931425225ull,
+ 12202567070149966830ull, 7385912246495034225ull}},
+{{13906725797473150211ull, 15977518612739304477ull,
+ 709075391202647412ull, 4616195154059396391ull}},
+{{3548349191559274052ull, 1525154192214578981ull,
+ 14721402294285472978ull, 5770243942574245488ull}},
+{{9047122507876480469ull, 11129814777122999534ull,
+ 18401752867856841222ull, 7212804928217806860ull}},
+{{2085531097990824778ull, 4688896434548973610ull,
+ 4555447011111499912ull, 9016006160272258576ull}},
+{{5915142954671653390ull, 2930560271593108506ull,
+ 2847154381944687445ull, 5635003850170161610ull}},
+{{16617300730194342546ull, 8274886357918773536ull,
+ 12782315014285635114ull, 7043754812712702012ull}},
+{{2324881839033376566ull, 1120235910543691113ull,
+ 15977893767857043893ull, 8804693515890877515ull}},
+{{12982266195464330114ull, 3005990453303500897ull,
+ 7680340595696958481ull, 5502933447431798447ull}},
+{{2392774689048248930ull, 8369174085056764026ull,
+ 4988739726193810197ull, 6878666809289748059ull}},
+{{12214340398165086971ull, 15073153624748342936ull,
+ 1624238639314874842ull, 8598333511612185074ull}},
+{{7633962748853179357ull, 14032407033895102239ull,
+ 5626835167999184680ull, 5373958444757615671ull}},
+{{4930767417639086292ull, 17540508792368877799ull,
+ 2421857941571592946ull, 6717448055947019589ull}},
+{{1551773253621469961ull, 12702263953606321441ull,
+ 7639008445391879087ull, 8396810069933774486ull}},
+{{12499073329581888486ull, 14856443998645032756ull,
+ 162694259942536525ull, 5248006293708609054ull}},
+{{15623841661977360607ull, 4735496943024127233ull,
+ 9426739861782946465ull, 6560007867135761317ull}},
+{{5694744022189537047ull, 10531057197207546946ull,
+ 16395110845656070985ull, 8200009833919701646ull}},
+{{8170901032295848558ull, 18111125794323186601ull,
+ 5635258260107656461ull, 5125006146199813529ull}},
+{{14825312308797198602ull, 8803849187621819539ull,
+ 11655758843561958481ull, 6406257682749766911ull}},
+{{13919954367569110348ull, 15616497502954662328ull,
+ 9958012536025060197ull, 8007822103437208639ull}},
+{{8699971479730693968ull, 12066153948560357907ull,
+ 13141286862656744479ull, 5004888814648255399ull}},
+{{6263278331235979556ull, 10471006417273059480ull,
+ 11814922559893542695ull, 6256111018310319249ull}},
+{{7829097914044974444ull, 8477072003163936446ull, 933595144584764657ull,
+ 7820138772887899062ull}},
+{{281500177850721124ull, 16827385048045930039ull,
+ 14418555020647641622ull, 4887586733054936913ull}},
+{{14186933277595565117ull, 11810859273202636740ull,
+ 4188135720527388316ull, 6109483416318671142ull}},
+{{17733666596994456396ull, 14763574091503295925ull,
+ 14458541687514011203ull, 7636854270398338927ull}},
+{{13389384632335229200ull, 6921390797975866001ull,
+ 15954117582337338858ull, 4773033918998961829ull}},
+{{2901672735136872787ull, 17875110534324608310ull,
+ 6107588922639509860ull, 5966292398748702287ull}},
+{{12850462955775866792ull, 3897144094196208771ull,
+ 3022800134871999422ull, 7457865498435877859ull}},
+{{5725696338146222793ull, 16270773114154794194ull,
+ 18030151148790857302ull, 4661165936522423661ull}},
+{{16380492459537554299ull, 11115094355838716934ull,
+ 8702630880706407916ull, 5826457420653029577ull}},
+{{11252243537567167066ull, 13893867944798396168ull,
+ 15489974619310397799ull, 7283071775816286971ull}},
+{{14065304421958958833ull, 12755648912570607306ull,
+ 14750782255710609345ull, 9103839719770358714ull}},
+{{13402501282151737175ull, 1054751542715547710ull,
+ 13830924928246518745ull, 5689899824856474196ull}},
+{{7529754565834895660ull, 5930125446821822542ull,
+ 17288656160308148431ull, 7112374781070592745ull}},
+{{188821170438843767ull, 2800970790099890274ull, 7775762145103021827ull,
+ 8890468476338240932ull}},
+{{4729699249951665259ull, 17891507808308289085ull,
+ 14083223377544164449ull, 5556542797711400582ull}},
+{{10523810080866969477ull, 8529326705103197644ull,
+ 8380657185075429754ull, 6945678497139250728ull}},
+{{13154762601083711846ull, 1438286344524221247ull,
+ 10475821481344287193ull, 8682098121424063410ull}},
+{{15139255653318401760ull, 12428144011396108039ull,
+ 11159074444267567399ull, 5426311325890039631ull}},
+{{14312383548220614296ull, 10923493995817747145ull,
+ 9337157036907071345ull, 6782889157362549539ull}},
+{{4055421379993604158ull, 18266053513199571836ull,
+ 7059760277706451277ull, 8478611446703186924ull}},
+{{11758010399350778407ull, 13722126454963426349ull,
+ 13635722210421307856ull, 5299132154189491827ull}},
+{{862454943906309296ull, 17152658068704282937ull,
+ 12432966744599246916ull, 6623915192736864784ull}},
+{{5689754698310274524ull, 2994078512170802055ull,
+ 15541208430749058646ull, 8279893990921080980ull}},
+{{10473625714085003434ull, 15706357125388914996ull,
+ 489883232363385845ull, 5174933744325675613ull}},
+{{13092032142606254292ull, 5797888351453980033ull,
+ 5224040058881620211ull, 6468667180407094516ull}},
+{{2529982122975654153ull, 2635674420890087138ull,
+ 6530050073602025264ull, 8085833975508868145ull}},
+{{6192924845287171750ull, 1647296513056304461ull,
+ 15610496342069735550ull, 5053646234693042590ull}},
+{{12352842075036352591ull, 11282492678175156384ull,
+ 10289748390732393629ull, 6317057793366303238ull}},
+{{15441052593795440739ull, 268057792436781768ull,
+ 3638813451560716229ull, 7896322241707879048ull}},
+{{9650657871122150462ull, 2473379129486682557ull,
+ 2274258407225447643ull, 4935201401067424405ull}},
+{{16675008357330075982ull, 16926781967140516908ull,
+ 7454509027459197457ull, 6169001751334280506ull}},
+{{2397016372953043361ull, 7323419403643482424ull, 94764247469221014ull,
+ 7711252189167850633ull}},
+{{1498135233095652101ull, 18412195182559340227ull,
+ 11588442700736732893ull, 4819532618229906645ull}},
+{{15707727096651728838ull, 9180185922917011571ull,
+ 650495320638752405ull, 6024415772787383307ull}},
+{{15022972852387273143ull, 16086918422073652368ull,
+ 14648177206080604218ull, 7530519715984229133ull}},
+{{9389358032742045715ull, 14666010032223420634ull,
+ 11460953763014071588ull, 4706574822490143208ull}},
+{{2513325504072781335ull, 18332512540279275793ull,
+ 14326192203767589485ull, 5883218528112679010ull}},
+{{7753342898518364573ull, 9080582620066931029ull,
+ 8684368217854711049ull, 7354023160140848763ull}},
+{{14303364641575343620ull, 15962414293511051690ull,
+ 6243774253891000907ull, 9192528950176060954ull}},
+{{13551288919411977667ull, 7670665924230713354ull,
+ 8514044927109263471ull, 5745330593860038096ull}},
+{{7715739112410196275ull, 4976646386861003789ull,
+ 10642556158886579339ull, 7181663242325047620ull}},
+{{14256359908940133248ull, 1609121965148866832ull,
+ 13303195198608224174ull, 8977079052906309525ull}},
+{{8910224943087583280ull, 14840759283500205482ull,
+ 10620340008343834060ull, 5610674408066443453ull}},
+{{1914409142004703292ull, 104205030665705237ull,
+ 17887111028857180480ull, 7013343010083054316ull}},
+{{7004697445933267019ull, 130256288332131546ull, 3912144712361923984ull,
+ 8766678762603817896ull}},
+{{8989621922135679791ull, 81410180207582216ull, 2445090445226202490ull,
+ 5479174226627386185ull}},
+{{11237027402669599738ull, 9325134762114253578ull,
+ 7668049074960141016ull, 6848967783284232731ull}},
+{{4822912216482223865ull, 11656418452642816973ull,
+ 4973375325272788366ull, 8561209729105290914ull}},
+{{5320163144515083868ull, 2673575514474372704ull,
+ 7720045596722880633ull, 5350756080690806821ull}},
+{{6650203930643854835ull, 7953655411520353784ull,
+ 14261743014330988695ull, 6688445100863508526ull}},
+{{8312754913304818543ull, 5330383245973054326ull,
+ 8603806731058960061ull, 8360556376079385658ull}},
+{{583785802388123686ull, 5637332537946852906ull, 9989065225339237942ull,
+ 5225347735049616036ull}},
+{{9953104289839930415ull, 16270037709288341940ull,
+ 12486331531674047427ull, 6531684668812020045ull}},
+{{12441380362299913019ull, 15725861118183039521ull,
+ 1772856359310395572ull, 8164605836015025057ull}},
+{{858333698796363781ull, 605291162009623893ull, 12637250270637466993ull,
+ 5102878647509390660ull}},
+{{5684603141922842630ull, 5368299970939417770ull,
+ 15796562838296833741ull, 6378598309386738325ull}},
+{{16329125964258329095ull, 11322060982101660116ull,
+ 5910645492588878464ull, 7973247886733422907ull}},
+{{982331690806679877ull, 7076288113813537573ull, 1388310423654355088ull,
+ 4983279929208389317ull}},
+{{5839600631935737750ull, 8845360142266921966ull,
+ 6347074047995331764ull, 6229099911510486646ull}},
+{{16522872826774447995ull, 11056700177833652457ull,
+ 17157214596848940513ull, 7786374889388108307ull}},
+{{3409266489092948141ull, 18439652657214502546ull,
+ 8417416113816893868ull, 4866484305867567692ull}},
+{{13484955148220960984ull, 4602821747808576566ull,
+ 10521770142271117336ull, 6083105382334459615ull}},
+{{7632821898421425422ull, 5753527184760720708ull,
+ 8540526659411508766ull, 7603881727918074519ull}},
+{{13993885723368166697ull, 17431012545757614154ull,
+ 12255358189773274834ull, 4752426079948796574ull}},
+{{8268985117355432563ull, 12565393645342241885ull,
+ 6095825700361817735ull, 5940532599935995718ull}},
+{{14947917415121678608ull, 11095056038250414452ull,
+ 16843154162307047977ull, 7425665749919994647ull}},
+{{119076347596273322ull, 16880996265427177ull, 17444500379082986842ull,
+ 4641041093699996654ull}},
+{{4760531452922729557ull, 9244473282186559779ull,
+ 12582253436998957744ull, 5801301367124995818ull}},
+{{1338978297726024042ull, 11555591602733199724ull,
+ 6504444759393921372ull, 7251626708906244773ull}},
+{{1673722872157530052ull, 14444489503416499655ull,
+ 12742241967669789619ull, 9064533386132805966ull}},
+{{7963605822739538139ull, 6721962930421618332ull,
+ 3352215211366230608ull, 5665333366333003729ull}},
+{{9954507278424422673ull, 8402453663027022915ull,
+ 8801955032635176164ull, 7081666707916254661ull}},
+{{7831448079603140437ull, 10503067078783778644ull,
+ 15614129809221358109ull, 8852083384895318326ull}},
+{{14118027086606738581ull, 8870259933453555604ull,
+ 5147145112335960914ull, 5532552115559573954ull}},
+{{17647533858258423227ull, 1864452879962168697ull,
+ 15657303427274726951ull, 6915690144449467442ull}},
+{{8224359267540865321ull, 16165624155234874584ull,
+ 10348257247238632880ull, 8644612680561834303ull}},
+{{5140224542213040826ull, 10103515097021796615ull,
+ 13385189807165227406ull, 5402882925351146439ull}},
+{{1813594659338913128ull, 3406021834422469961ull,
+ 12119801240529146354ull, 6753603656688933049ull}},
+{{6878679342601029314ull, 13480899329882863259ull,
+ 1314693495379269230ull, 8442004570861166312ull}},
+{{1993331579911949370ull, 3813876062749401633ull, 821683434612043269ull,
+ 5276252856788228945ull}},
+{{7103350493317324616ull, 9379031096864139945ull,
+ 5638790311692441990ull, 6595316070985286181ull}},
+{{13490874135074043674ull, 2500416834225399123ull,
+ 11660173908042940392ull, 8244145088731607726ull}},
+{{6125953325207583344ull, 1562760521390874452ull,
+ 2675922674099449841ull, 5152590680457254829ull}},
+{{7657441656509479180ull, 6565136670165980969ull,
+ 7956589361051700205ull, 6440738350571568536ull}},
+{{14183488089064236879ull, 12818106856134864115ull,
+ 9945736701314625256ull, 8050922938214460670ull}},
+{{6558837046451454098ull, 8011316785084290072ull,
+ 1604399419894252881ull, 5031826836384037919ull}},
+{{8198546308064317622ull, 14625831999782750494ull,
+ 15840557330149979813ull, 6289783545480047398ull}},
+{{1024810848225621219ull, 4447231944446274406ull,
+ 10577324625832698959ull, 7862229431850059248ull}},
+{{14475564835423176974ull, 9697048992920003359ull,
+ 6610827891145436849ull, 4913893394906287030ull}},
+{{13482770025851583314ull, 16732997259577392103ull,
+ 17486906900786571869ull, 6142366743632858787ull}},
+{{12241776513887091238ull, 7081188519189576417ull,
+ 17246947607555826933ull, 7677958429541073484ull}},
+{{733581293538350168ull, 6731585833707179213ull, 1555970217867616025ull,
+ 4798724018463170928ull}},
+{{5528662635350325614ull, 13026168310561361920ull,
+ 1944962772334520031ull, 5998405023078963660ull}},
+{{6910828294187907017ull, 11671024369774314496ull,
+ 2431203465418150039ull, 7498006278848704575ull}},
+{{4319267683867441886ull, 14211919258750028416ull,
+ 8437031193527425630ull, 4686253924280440359ull}},
+{{5399084604834302357ull, 8541527036582759712ull,
+ 5934602973481894134ull, 5857817405350550449ull}},
+{{6748855756042877946ull, 1453536758873673832ull,
+ 12029939735279755572ull, 7322271756688188061ull}},
+{{8436069695053597433ull, 1816920948592092290ull,
+ 1202366613817530753ull, 9152839695860235077ull}},
+{{9884229577835886300ull, 12664790638938527441ull,
+ 3057322142849650672ull, 5720524809912646923ull}},
+{{16966972990722245779ull, 15830988298673159301ull,
+ 17656710733844227052ull, 7150656012390808653ull}},
+{{7373658183120643511ull, 1341991299631897511ull,
+ 8235830362023120104ull, 8938320015488510817ull}},
+{{11526065392091484051ull, 838744562269935944ull,
+ 16676609022332919825ull, 5586450009680319260ull}},
+{{14407581740114355063ull, 5660116721264807834ull,
+ 2399017204206598165ull, 6983062512100399076ull}},
+{{8786105138288168021ull, 11686831920008397697ull,
+ 2998771505258247706ull, 8728828140125498845ull}},
+{{17020530757498574773ull, 11915955968432636464ull,
+ 4180075200000098768ull, 5455517587578436778ull}},
+{{2828919373163666850ull, 14894944960540795581ull,
+ 14448466036854899268ull, 6819396984473045972ull}},
+{{8147835234881971467ull, 171937126966442860ull,
+ 18060582546068624086ull, 8524246230591307465ull}},
+{{14315769058656007975ull, 13942518759636190499ull,
+ 4370335063651808197ull, 5327653894119567166ull}},
+{{13283025304892622065ull, 3593090394263074412ull,
+ 14686290866419536055ull, 6659567367649458957ull}},
+{{16603781631115777581ull, 18326421048111006727ull,
+ 4522805527742256356ull, 8324459209561823697ull}},
+{{17294892547088442844ull, 2230641118214603396ull,
+ 14355968500907379983ull, 5202787005976139810ull}},
+{{3171871610151001939ull, 16623359453050417958ull,
+ 8721588589279449170ull, 6503483757470174763ull}},
+{{13188211549543528231ull, 11555827279458246639ull,
+ 6290299718171923559ull, 8129354696837718454ull}},
+{{15160161246105787001ull, 14139921077302486005ull,
+ 17766495379139615936ull, 5080846685523574033ull}},
+{{5115143502350070039ull, 17674901346628107507ull,
+ 8373061168642356208ull, 6351058356904467542ull}},
+{{1782243359510199645ull, 3646882609575582768ull,
+ 1242954423948169453ull, 7938822946130584428ull}},
+{{1113902099693874778ull, 4585144640198433182ull,
+ 10000218551822381716ull, 4961764341331615267ull}},
+{{10615749661472119280ull, 5731430800248041477ull,
+ 7888587171350589241ull, 6202205426664519084ull}},
+{{17881373095267537004ull, 11775974518737439750ull,
+ 9860733964188236551ull, 7752756783330648855ull}},
+{{6564172166114822724ull, 14277513101851981700ull,
+ 13080487755258729700ull, 4845472989581655534ull}},
+{{8205215207643528405ull, 17846891377314977125ull,
+ 7127237657218636317ull, 6056841236977069418ull}},
+{{14868205027981798410ull, 8473556166361557694ull,
+ 18132419108378071205ull, 7571051546221336772ull}},
+{{4680942124061236102ull, 7601815613189667511ull,
+ 2109389905881518695ull, 4731907216388335483ull}},
+{{1239491636649157224ull, 4890583498059696485ull,
+ 16471795437634062081ull, 5914884020485419353ull}},
+{{6161050564238834434ull, 10724915391002008510ull,
+ 6754686241760413889ull, 7393605025606774192ull}},
+{{17685714657931435233ull, 18232287165444725078ull,
+ 4221678901100258680ull, 4621003141004233870ull}},
+{{12883771285559518233ull, 4343614883096354732ull,
+ 14500470663230099159ull, 5776253926255292337ull}},
+{{16104714106949397792ull, 817832585443055511ull,
+ 4290530273755460237ull, 7220317407819115422ull}},
+{{15519206615259359335ull, 5633976750231207293ull,
+ 14586534879049101104ull, 9025396759773894277ull}},
+{{12005347143750793537ull, 3521235468894504558ull,
+ 11422427308619382142ull, 5640872974858683923ull}},
+{{5783311892833716113ull, 13624916372972906506ull,
+ 9666348117346839773ull, 7051091218573354904ull}},
+{{16452511902896920949ull, 3196087410933969420ull,
+ 12082935146683549717ull, 8813864023216693630ull}},
+{{1059447902455799785ull, 4303397641047424840ull,
+ 2940148448249830669ull, 5508665014510433519ull}},
+{{1324309878069749732ull, 9990933069736668954ull,
+ 17510243615594452048ull, 6885831268138041898ull}},
+{{10878759384441962972ull, 12488666337170836192ull,
+ 12664432482638289252ull, 8607289085172552373ull}},
+{{6799224615276226858ull, 17028788497586548428ull,
+ 10221113310862624734ull, 5379555678232845233ull}},
+{{8499030769095283572ull, 12062613585128409727ull,
+ 17388077657005668822ull, 6724444597791056541ull}},
+{{6012102442941716561ull, 5854894944555736351ull,
+ 7900039015974922316ull, 8405555747238820677ull}},
+{{10675093054479654707ull, 12882681377202111027ull,
+ 7243367394198020399ull, 5253472342024262923ull}},
+{{8732180299672180479ull, 11491665703075250880ull,
+ 4442523224320137595ull, 6566840427530328654ull}},
+{{10915225374590225599ull, 9752896110416675696ull,
+ 14776526067254947802ull, 8208550534412910817ull}},
+{{6822015859118891000ull, 10707246087437810214ull,
+ 2317799764393260520ull, 5130344084008069261ull}},
+{{17750891860753389558ull, 13384057609297262767ull,
+ 7508935723918963554ull, 6412930105010086576ull}},
+{{17576928807514349043ull, 7506699974766802651ull,
+ 9386169654898704443ull, 8016162631262608220ull}},
+{{8679737495482774200ull, 2385844475015557705ull,
+ 15089728071166466085ull, 5010101644539130137ull}},
+{{15461357887780855654ull, 7593991612196835035ull,
+ 5027102033675918894ull, 6262627055673912672ull}},
+{{14715011341298681663ull, 269117478391267986ull,
+ 6283877542094898618ull, 7828283819592390840ull}},
+{{13808568106739063944ull, 4779884442421930395ull,
+ 3927423463809311636ull, 4892677387245244275ull}},
+{{12649024114996442025ull, 5974855553027412994ull,
+ 297593311334251641ull, 6115846734056555344ull}},
+{{6587908106890776724ull, 12080255459711654147ull,
+ 371991639167814551ull, 7644808417570694180ull}},
+{{1811599557593041500ull, 14467688689960865698ull,
+ 9455866811334659902ull, 4778005260981683862ull}},
+{{11487871483846077683ull, 8861238825596306314ull,
+ 2596461477313549070ull, 5972506576227104828ull}},
+{{5136467317952821296ull, 1853176495140607085ull,
+ 3245576846641936338ull, 7465633220283881035ull}},
+{{5516135082934207262ull, 5769921327890267332ull,
+ 18169386593647067875ull, 4666020762677425646ull}},
+{{6895168853667759078ull, 2600715641435446261ull,
+ 13488361205204059036ull, 5832525953346782058ull}},
+{{13230647085512086751ull, 3250894551794307826ull,
+ 7637079469650297987ull, 7290657441683477573ull}},
+{{7314936820035332631ull, 17898676245025048495ull,
+ 14158035355490260387ull, 9113321802104346966ull}},
+{{11489364540163164750ull, 8880829643926961357ull,
+ 4237086078754024838ull, 5695826126315216854ull}},
+{{526647619921792226ull, 1877665018053925889ull,
+ 14519729635297306856ull, 7119782657894021067ull}},
+{{5269995543329628186ull, 2347081272567407361ull,
+ 13537976025694245666ull, 8899728322367526334ull}},
+{{14822962260649487377ull, 6078611813782017504ull,
+ 3849548997631515637ull, 5562330201479703959ull}},
+{{81958752102307605ull, 12209950785654909785ull, 200250228612006642ull,
+ 6952912751849629949ull}},
+{{4714134458555272410ull, 6039066445213861423ull,
+ 4861998804192396207ull, 8691140939812037436ull}},
+{{9863863064238127112ull, 10691945555899745245ull,
+ 12262121289475023437ull, 5431963087382523397ull}},
+{{16941514848725046794ull, 17976617963302069460ull,
+ 1492593556561615584ull, 6789953859228154247ull}},
+{{2730149487196756876ull, 4024028380418035210ull,
+ 15700800000984183193ull, 8487442324035192808ull}},
+{{6318029447925360952ull, 14044232783829741766ull,
+ 9813000000615114495ull, 5304651452521995505ull}},
+{{17120908846761476998ull, 12943604961359789303ull,
+ 16877936019196281023ull, 6630814315652494381ull}},
+{{16789450040024458343ull, 11567820183272348725ull,
+ 7262361968713187567ull, 8288517894565617977ull}},
+{{12799249284228980417ull, 14147416642186299809ull,
+ 16068191276514211989ull, 5180323684103511235ull}},
+{{2164003550004061809ull, 3849212747450711050ull,
+ 15473553077215377083ull, 6475404605129389044ull}},
+{{11928376474359853069ull, 199829915886000908ull, 895197272809669738ull,
+ 8094255756411736306ull}},
+{{16678607333329683976ull, 4736579715856138471ull,
+ 5171184313933431490ull, 5058909847757335191ull}},
+{{16236573148234717066ull, 15144096681674948897ull,
+ 1852294373989401458ull, 6323637309696668989ull}},
+{{6460658380011232621ull, 9706748815238910314ull,
+ 6927053985914139727ull, 7904546637120836236ull}},
+{{8649597505934408292ull, 12984247037165400802ull,
+ 13552780778051113137ull, 4940341648200522647ull}},
+{{1588624845563234557ull, 2395250741174587291ull,
+ 12329289954136503518ull, 6175427060250653309ull}},
+{{15820839112236206908ull, 12217435463323009921ull,
+ 1576554387388465685ull, 7719283825313316637ull}},
+{{2970495417506547462ull, 9941740173790575153ull,
+ 3291189501331485005ull, 4824552390820822898ull}},
+{{8324805290310572231ull, 17038861235665606845ull,
+ 13337358913519132064ull, 6030690488526028622ull}},
+{{15017692631315603193ull, 2851832470872456940ull,
+ 7448326605044139273ull, 7538363110657535778ull}},
+{{162685857717476188ull, 13311610340363755348ull,
+ 9266890146579974949ull, 4711476944160959861ull}},
+{{203357322146845234ull, 2804454870172530473ull,
+ 16195298701652356591ull, 5889346180201199826ull}},
+{{4865882671110944447ull, 17340626642997826803ull,
+ 11020751340210669930ull, 7361682725251499783ull}},
+{{1470667320461292654ull, 12452411266892507696ull,
+ 9164253156835949509ull, 9202103406564374729ull}},
+{{919167075288307909ull, 10088600051021511262ull,
+ 17256873269090938203ull, 5751314629102734205ull}},
+{{10372330880965160694ull, 7999064045349501173ull,
+ 7736033531081509042ull, 7189143286378417757ull}},
+{{17577099619633838772ull, 775458019832100658ull,
+ 14281727932279274207ull, 8986429107973022196ull}},
+{{15597373280698537137ull, 7402190290036144767ull,
+ 18149451994529322187ull, 5616518192483138872ull}},
+{{14885030582445783517ull, 4641051844117793055ull,
+ 4240070919452101118ull, 7020647740603923591ull}},
+{{13994602209629841492ull, 15024686842002017127ull,
+ 688402630887738493ull, 8775809675754904489ull}},
+{{15664155408659732788ull, 11696272285464954656ull,
+ 11959466690373306318ull, 5484881047346815305ull}},
+{{1133450187115114369ull, 5396968319976417513ull,
+ 1114275307684469186ull, 6856101309183519132ull}},
+{{6028498752321280866ull, 15969582436825297699ull,
+ 1392844134605586482ull, 8570126636479398915ull}},
+{{1461968710987106589ull, 14592675041443198966ull,
+ 17011428648624349215ull, 5356329147799624321ull}},
+{{11050832925588659044ull, 13629157783376610803ull,
+ 7429227755498272807ull, 6695411434749530402ull}},
+{{9201855138558435901ull, 12424761210793375600ull, 63162657518065201ull,
+ 8369264293436913003ull}},
+{{5751159461599022439ull, 847946729104777894ull,
+ 16180377725444648415ull, 5230790183398070626ull}},
+{{16412321363853553856ull, 14894991466663136079ull,
+ 11002100119951034710ull, 6538487729247588283ull}},
+{{15903715686389554416ull, 9395367296474144291ull,
+ 9140939131511405484ull, 8173109661559485354ull}},
+{{7633979294779777558ull, 15095476597151115990ull,
+ 10324772975622016331ull, 5108193538474678346ull}},
+{{319102081619946140ull, 14257659728011507084ull,
+ 3682594182672744606ull, 6385241923093347933ull}},
+{{398877602024932674ull, 8598702623159608047ull, 9214928746768318662ull,
+ 7981552403866684916ull}},
+{{7166827528906664778ull, 762503121047367125ull,
+ 14982702503584974972ull, 4988470252416678072ull}},
+{{13570220429560718876ull, 953128901309208906ull, 281634055771667099ull,
+ 6235587815520847591ull}},
+{{7739403500096122787ull, 15026469181918674845ull,
+ 14187100624996747585ull, 7794484769401059488ull}},
+{{7142970196773770694ull, 2474014211058089922ull,
+ 8866937890622967241ull, 4871552980875662180ull}},
+{{18152084782821989175ull, 7704203782250000306ull,
+ 11083672363278709051ull, 6089441226094577725ull}},
+{{13466733941672710661ull, 5018568709385112479ull, 19532398816222602ull,
+ 7611801532618222157ull}},
+{{15334237741186526019ull, 7748291461793083203ull,
+ 2318050758473833078ull, 4757375957886388848ull}},
+{{14556111158055769620ull, 461992290386578196ull,
+ 2897563448092291348ull, 5946719947357986060ull}},
+{{18195138947569712025ull, 577490362983222745ull,
+ 3621954310115364185ull, 7433399934197482575ull}},
+{{4454432814589988160ull, 11890146522932983976ull,
+ 9181250471463184471ull, 4645874958873426609ull}},
+{{5568041018237485200ull, 10250997135238842066ull,
+ 16088249107756368493ull, 5807343698591783261ull}},
+{{16183423309651632307ull, 17425432437475940486ull,
+ 6275253329413296904ull, 7259179623239729077ull}},
+{{11005907100209764576ull, 3335046473135373992ull,
+ 12455752680194009035ull, 9073974529049661346ull}},
+{{6878691937631102860ull, 18225305110205466409ull,
+ 12396531443548643550ull, 5671234080656038341ull}},
+{{13210050940466266479ull, 13558259350902057203ull,
+ 1660606249153640726ull, 7089042600820047927ull}},
+{{11900877657155445195ull, 7724452151772795696ull,
+ 15910815866724214620ull, 8861303251025059908ull}},
+{{7438048535722153247ull, 14051154631712773118ull,
+ 720887879847858329ull, 5538314531890662443ull}},
+{{74188632797915751ull, 3728885234358802686ull, 14736167905091986624ull,
+ 6922893164863328053ull}},
+{{9316107827852170496ull, 4661106542948503357ull,
+ 4585151826082819568ull, 8653616456079160067ull}},
+{{8128410401621300512ull, 2913191589342814598ull, 559876882088068278ull,
+ 5408510285049475042ull}},
+{{937140965171849832ull, 12864861523533294056ull,
+ 9923218139464861155ull, 6760637856311843802ull}},
+{{1171426206464812290ull, 11469390885989229666ull,
+ 3180650637476300636ull, 8450797320389804753ull}},
+{{5343827397467895585ull, 16391741340598044349ull,
+ 13517121694491157657ull, 5281748325243627970ull}},
+{{11291470265262257386ull, 6654618620465391724ull,
+ 7673030081259171264ull, 6602185406554534963ull}},
+{{14114337831577821732ull, 8318273275581739655ull,
+ 4979601583146576176ull, 8252731758193168704ull}},
+{{15738990172377220439ull, 5198920797238587284ull,
+ 3112250989466610110ull, 5157957348870730440ull}},
+{{1226993641761973932ull, 15722023033403009914ull,
+ 3890313736833262637ull, 6447446686088413050ull}},
+{{10757114089057243223ull, 5817470736471598680ull,
+ 14086264207896354105ull, 8059308357610516312ull}},
+{{6723196305660777015ull, 15165134256363218935ull,
+ 8803915129935221315ull, 5037067723506572695ull}},
+{{3792309363648583364ull, 14344731802026635765ull,
+ 6393207893991638740ull, 6296334654383215869ull}},
+{{9352072722988117109ull, 17930914752533294706ull,
+ 12603195885916936329ull, 7870418317979019836ull}},
+{{10456731470294961097ull, 4289292692692227335ull,
+ 17100369465552861014ull, 4919011448736887397ull}},
+{{8459228319441313468ull, 14584987902720059977ull,
+ 7540403776658912555ull, 6148764310921109247ull}},
+{{15185721417729029738ull, 13619548859972687067ull,
+ 4813818702396252790ull, 7685955388651386559ull}},
+{{7185232876866949635ull, 3900532019055541513ull,
+ 9926165716638739850ull, 4803722117907116599ull}},
+{{13593227114511074947ull, 14099037060674202699ull,
+ 7796021127371036908ull, 6004652647383895749ull}},
+{{12379847874711455780ull, 17623796325842753374ull,
+ 14356712427641184039ull, 7505815809229869686ull}},
+{{3125718903267271959ull, 17932401731292802715ull,
+ 4361259248848352120ull, 4691134880768668554ull}},
+{{17742206684366253660ull, 3968758090406451777ull,
+ 14674946097915215959ull, 5863918600960835692ull}},
+{{8342700300175653363ull, 349261594580676818ull,
+ 18343682622394019949ull, 7329898251201044615ull}},
+{{1205003338364790896ull, 5048263011653233927ull,
+ 18317917259565137032ull, 9162372814001305769ull}},
+{{7670656114119076166ull, 3155164382283271204ull,
+ 4531169259587128789ull, 5726483008750816106ull}},
+{{9588320142648845207ull, 8555641496281476909ull,
+ 14887333611338686794ull, 7158103760938520132ull}},
+{{16597086196738444413ull, 1471179833497070328ull,
+ 162422940463806877ull, 8947629701173150166ull}},
+{{10373178872961527758ull, 3225330405149362907ull,
+ 13936572393072043010ull, 5592268563233218853ull}},
+{{8354787572774521794ull, 13255035043291479442ull,
+ 3585657436057890050ull, 6990335704041523567ull}},
+{{1220112429113376434ull, 7345421767259573495ull,
+ 18317129850354526275ull, 8737919630051904458ull}},
+{{7680099295836942128ull, 2285045595323539482ull,
+ 16059892174898966826ull, 5461199768782440286ull}},
+{{376752082941401851ull, 12079679031009200161ull,
+ 10851493181768932724ull, 6826499710978050358ull}},
+{{5082626122104140218ull, 15099598788761500201ull,
+ 4340994440356390097ull, 8533124638722562948ull}},
+{{14705856372383557396ull, 2519720215334855769ull,
+ 11936493562077519619ull, 5333202899201601842ull}},
+{{4547262410197283033ull, 16984708324450733424ull,
+ 5697244915742123715ull, 6666503624002002303ull}},
+{{5684078012746603792ull, 16619199387136028876ull,
+ 2509870126250266740ull, 8333129530002502879ull}},
+{{12775920794821403178ull, 1163627580105242239ull,
+ 8486197856547498569ull, 5208205956251564299ull}},
+{{11358214975099366068ull, 6066220493558940703ull,
+ 5996061302256985307ull, 6510257445314455374ull}},
+{{9586082700446819681ull, 2971089598521287975ull,
+ 16718448664676007442ull, 8137821806643069217ull}},
+{{12908830715420344157ull, 6468617017503192888ull,
+ 3531501387781422795ull, 5086138629151918261ull}},
+{{16136038394275430196ull, 3474085253451603206ull,
+ 9026062753154166398ull, 6357673286439897826ull}},
+{{10946675955989511937ull, 13565978603669279816ull,
+ 2059206404587932189ull, 7947091608049872283ull}},
+{{6841672472493444961ull, 10784579636506993837ull,
+ 17427905067363315282ull, 4966932255031170176ull}},
+{{13163776609044194105ull, 4257352508778966488ull,
+ 3338137260494592487ull, 6208665318788962721ull}},
+{{16454720761305242631ull, 710004617546320206ull,
+ 8784357594045628513ull, 7760831648486203401ull}},
+{{5672514457388388741ull, 11972967932034919889ull,
+ 17019438542346987580ull, 4850519780303877125ull}},
+{{11702329090162873830ull, 14966209915043649861ull,
+ 7439240122651570763ull, 6063149725379846407ull}},
+{{792853307421428575ull, 14096076375377174423ull,
+ 4687364134887075550ull, 7578937156724808009ull}},
+{{7413062344779474715ull, 4198361716183346110ull,
+ 14458817630372891979ull, 4736835722953005005ull}},
+{{42955894119567586ull, 636266126801794734ull, 4238463982683951262ull,
+ 5921044653691256257ull}},
+{{9277066904504235291ull, 10018704695357019225ull,
+ 9909765996782326981ull, 7401305817114070321ull}},
+{{17327381861383616817ull, 8567533443811830967ull,
+ 17722818794057424123ull, 4625816135696293950ull}},
+{{17047541308302133117ull, 6097730786337400805ull,
+ 12930151455717004346ull, 5782270169620367438ull}},
+{{7474368580095502684ull, 16845535519776526815ull,
+ 6939317282791479624ull, 7227837712025459298ull}},
+{{4731274706691990451ull, 2610175326011106903ull,
+ 17897518640344125339ull, 9034797140031824122ull}},
+{{9874575719323575888ull, 17772260643252799478ull,
+ 15797635168642466240ull, 5646748212519890076ull}},
+{{3119847612299694052ull, 3768581730356447732ull,
+ 1300299887093531185ull, 7058435265649862596ull}},
+{{3899809515374617565ull, 9322413181372947569ull,
+ 1625374858866913981ull, 8823044082062328245ull}},
+{{13966595993177605738ull, 8132351247571786182ull,
+ 3321702296005515190ull, 5514402551288955153ull}},
+{{8234872954617231365ull, 942067022609956920ull, 8763813888434281892ull,
+ 6893003189111193941ull}},
+{{10293591193271539206ull, 1177583778262446150ull,
+ 15566453378970240269ull, 8616253986388992426ull}},
+{{1821808477367324100ull, 3041832870627722796ull,
+ 14340719380283788072ull, 5385158741493120266ull}},
+{{2277260596709155124ull, 3802291088284653495ull,
+ 8702527188499959282ull, 6731448426866400333ull}},
+{{16681633801168607617ull, 13976235897210592676ull,
+ 15489845004052337006ull, 8414310533583000416ull}},
+{{1202649088875603953ull, 4123461417329232519ull,
+ 9681153127532710629ull, 5258944083489375260ull}},
+{{15338369416376668653ull, 9766012790088928552ull,
+ 12101441409415888286ull, 6573680104361719075ull}},
+{{726217696761284200ull, 2984143950756384883ull,
+ 10515115743342472454ull, 8217100130452148844ull}},
+{{16594787124971660289ull, 15700148024504904263ull,
+ 15795319376443821091ull, 5135687581532593027ull}},
+{{16131797887787187458ull, 15013499012203742425ull,
+ 15132463202127388460ull, 6419609476915741284ull}},
+{{6329689304451820610ull, 320129691545126416ull, 468834928949683960ull,
+ 8024511846144676606ull}},
+{{3956055815282387881ull, 200081057215704010ull,
+ 14128079885875716187ull, 5015319903840422878ull}},
+{{14168441805957760660ull, 14085159376801793724ull,
+ 8436727820489869425ull, 6269149879800528598ull}},
+{{17710552257447200824ull, 3771391165720078443ull,
+ 1322537738757560974ull, 7836437349750660748ull}},
+{{8763252151690806563ull, 16192177533857212739ull,
+ 10049958123578251416ull, 4897773343594162967ull}},
+{{6342379171186120300ull, 1793477843611964308ull,
+ 7950761636045426367ull, 6122216679492703709ull}},
+{{7927973963982650375ull, 16076905359797119097ull,
+ 14550138063484170862ull, 7652770849365879636ull}},
+{{16484198773557626245ull, 5436379831445811531ull,
+ 18317208326532382597ull, 4782981780853674772ull}},
+{{15993562448519644902ull, 11407160807734652318ull,
+ 4449766334455926630ull, 5978727226067093466ull}},
+{{10768581023794780319ull, 5035578972813539590ull,
+ 14785579954924684096ull, 7473409032583866832ull}},
+{{2118677121444349796ull, 3147236858008462244ull,
+ 9240987471827927560ull, 4670880645364916770ull}},
+{{2648346401805437244ull, 3934046072510577805ull,
+ 2327862302930133642ull, 5838600806706145963ull}},
+{{7922119020684184459ull, 14140929627492998064ull,
+ 16744885933944830764ull, 7298251008382682453ull}},
+{{9902648775855230574ull, 17676162034366247580ull,
+ 7096049362148874743ull, 9122813760478353067ull}},
+{{15412527521764294917ull, 17965130299119986593ull,
+ 2129187842129352762ull, 5701758600298970667ull}},
+{{5430601346923204934ull, 13233040837045207434ull,
+ 16496542857943854665ull, 7127198250373713333ull}},
+{{16011623720508781975ull, 2706242991024345580ull,
+ 6785620517147654620ull, 8908997812967141667ull}},
+{{783892788463212927ull, 10914773906244991796ull,
+ 1935169814003590185ull, 5568123633104463542ull}},
+{{979865985579016158ull, 18255153401233627649ull,
+ 11642334304359263539ull, 6960154541380579427ull}},
+{{5836518500401158102ull, 18207255733114646657ull,
+ 9941231862021691520ull, 8700193176725724284ull}},
+{{15177039108819193574ull, 11379534833196654160ull,
+ 15436641950618333008ull, 5437620735453577677ull}},
+{{524554812314440351ull, 14224418541495817701ull,
+ 5460744382990752548ull, 6797025919316972097ull}},
+{{5267379533820438343ull, 17780523176869772126ull,
+ 11437616497165828589ull, 8496282399146215121ull}},
+{{17127170263919937677ull, 13418669994757301530ull,
+ 230981283087561012ull, 5310176499466384451ull}},
+{{12185590793045146288ull, 16773337493446626913ull,
+ 14123784659141614977ull, 6637720624332980563ull}},
+{{1396930436024269147ull, 7131613811526119930ull,
+ 13043044805499630818ull, 8297150780416225704ull}},
+{{5484767540942556121ull, 9068944650631212860ull,
+ 8151903003437269261ull, 5185719237760141065ull}},
+{{6855959426178195151ull, 15947866831716403979ull,
+ 14801564772723974480ull, 6482149047200176331ull}},
+{{3958263264295356035ull, 1488089465935953358ull,
+ 13890269947477580197ull, 8102686309000220414ull}},
+{{16308972595466761234ull, 3235898925423664800ull,
+ 4069732698746099719ull, 5064178943125137759ull}},
+{{1939471670623899927ull, 17879931712061744713ull,
+ 475479855005236744ull, 6330223678906422199ull}},
+{{7036025606707262812ull, 3903170566367629275ull,
+ 14429407874038709643ull, 7912779598633027748ull}},
+{{2091672994978345306ull, 133638594766074345ull,
+ 18241751958128969335ull, 4945487249145642342ull}},
+{{7226277262150319536ull, 14002106298739756643ull,
+ 13578817910806435860ull, 6181859061432052928ull}},
+{{4421160559260511516ull, 17502632873424695804ull,
+ 16973522388508044825ull, 7727323826790066160ull}},
+{{11986597386392595506ull, 4021616518249353021ull,
+ 10608451492817528016ull, 4829577391743791350ull}},
+{{1148188677708580670ull, 5027020647811691277ull,
+ 4037192329167134212ull, 6036971739679739188ull}},
+{{6046921865563113741ull, 6283775809764614096ull,
+ 5046490411458917765ull, 7546214674599673985ull}},
+{{3779326165976946088ull, 6233202890316577762ull,
+ 14683271553230293363ull, 4716384171624796240ull}},
+{{13947529744325958418ull, 3179817594468334298ull,
+ 18354089441537866704ull, 5895480214530995300ull}},
+{{8211040143552672215ull, 3974771993085417873ull,
+ 4495867728212781764ull, 7369350268163744126ull}},
+{{14875486197868228173ull, 4968464991356772341ull,
+ 14843206697120753013ull, 9211687835204680157ull}},
+{{11603021882881336560ull, 5411133628811676665ull,
+ 11582847194914164585ull, 5757304897002925098ull}},
+{{668719298319506988ull, 11375603054441983736ull,
+ 5255186956787929923ull, 7196631121253656373ull}},
+{{835899122899383735ull, 9607817799625091766ull,
+ 11180669714412300308ull, 8995788901567070466ull}},
+{{14357495007094278546ull, 15228258161620458161ull,
+ 11599604589935075596ull, 5622368063479419041ull}},
+{{4111810703585684471ull, 588578628316021086ull, 664447682136680784ull,
+ 7027960079349273802ull}},
+{{14363135416336881397ull, 735723285395026357ull,
+ 10053931639525626788ull, 8784950099186592252ull}},
+{{11282802644424244825ull, 9683199090226667281ull,
+ 15507079311558292550ull, 5490593811991620157ull}},
+{{268445250248142319ull, 2880626825928558294ull, 5548791084165701976ull,
+ 6863242264989525197ull}},
+{{9558928599664953707ull, 3600783532410697867ull,
+ 11547674873634515374ull, 8579052831236906496ull}},
+{{3668487365576902115ull, 16085547763038849879ull,
+ 7217296796021572108ull, 5361908019523066560ull}},
+{{18420667262253291356ull, 1660190630089010732ull,
+ 9021620995026965136ull, 6702385024403833200ull}},
+{{4579090004107062578ull, 2075238287611263416ull,
+ 11277026243783706420ull, 8377981280504791500ull}},
+{{2861931252566914112ull, 10520395966611815443ull,
+ 16271513439219592320ull, 5236238300315494687ull}},
+{{17412472120990806351ull, 13150494958264769303ull,
+ 15727705780597102496ull, 6545297875394368359ull}},
+{{17153904132811120035ull, 16438118697830961629ull,
+ 15047946207318990216ull, 8181622344242960449ull}},
+{{13027033092220643974ull, 10273824186144351018ull,
+ 2487437351933287029ull, 5113513965151850281ull}},
+{{7060419328421029160ull, 17453966251107826677ull,
+ 7720982708343996690ull, 6391892456439812851ull}},
+{{13437210178953674353ull, 12594085777030007538ull,
+ 5039542367002607959ull, 7989865570549766064ull}},
+{{13009942380273434375ull, 14788832638284836567ull,
+ 3149713979376629974ull, 4993665981593603790ull}},
+{{11650741956914405065ull, 9262668761001269901ull,
+ 13160514511075563276ull, 6242082476992004737ull}},
+{{728369390860842619ull, 11578335951251587377ull,
+ 2615585083562290383ull, 7802603096240005922ull}},
+{{11984445915356496397ull, 14153988997173323966ull,
+ 6246426695653819393ull, 4876626935150003701ull}},
+{{5757185357340844688ull, 3857428191184491246ull,
+ 12419719387994662146ull, 6095783668937504626ull}},
+{{16419853733530831668ull, 14045157275835389865ull,
+ 6301277198138551874ull, 7619729586171880783ull}},
+{{3344879555815687937ull, 13389909315824506570ull,
+ 10855827276477676777ull, 4762330991357425489ull}},
+{{13404471481624385729ull, 2902328589498469500ull,
+ 18181470114024483876ull, 5952913739196781861ull}},
+{{16755589352030482161ull, 3627910736873086875ull,
+ 8891779587248441133ull, 7441142173995977327ull}},
+{{8166400335805357399ull, 4573287219759373249ull,
+ 12474891269671357564ull, 4650713858747485829ull}},
+{{14819686438184084652ull, 5716609024699216561ull,
+ 1758556031807033243ull, 5813392323434357287ull}},
+{{4689549992447942103ull, 2534075262446632798ull,
+ 16033253095040955266ull, 7266740404292946608ull}},
+{{15085309527414703437ull, 12390966114913066805ull,
+ 1594822295091642466ull, 9083425505366183261ull}},
+{{11734161463847883600ull, 12356039840248054657ull,
+ 3302606943645970493ull, 5677140940853864538ull}},
+{{832643774527690788ull, 1609991745027904610ull,
+ 13351630716412238925ull, 7096426176067330672ull}},
+{{10264176755014389293ull, 6624175699712268666ull,
+ 16689538395515298656ull, 8870532720084163340ull}},
+{{11026796490311381212ull, 4140109812320167916ull,
+ 1207589460342285852ull, 5544082950052602088ull}},
+{{13783495612889226515ull, 5175137265400209895ull,
+ 1509486825427857315ull, 6930103687565752610ull}},
+{{12617683497684145240ull, 1857235563322874465ull,
+ 11110230568639597452ull, 8662629609457190762ull}},
+{{968523158411508919ull, 10384144263931572349ull,
+ 11555580123827136311ull, 5414143505910744226ull}},
+{{5822339966441774053ull, 8368494311487077532ull,
+ 5221103117929144581ull, 6767679382388430283ull}},
+{{7277924958052217566ull, 15072303907786234819ull,
+ 1914692878984042822ull, 8459599227985537854ull}},
+{{2242860089568942027ull, 4808503923939008858ull,
+ 15031741104647190476ull, 5287249517490961158ull}},
+{{12026947148815953341ull, 6010629904923761072ull,
+ 9566304343954212287ull, 6609061896863701448ull}},
+{{15033683936019941677ull, 2901601362727313436ull,
+ 11957880429942765359ull, 8261327371079626810ull}},
+{{172680423157687740ull, 8731029879345652754ull,
+ 12085361287141616253ull, 5163329606924766756ull}},
+{{9439222565801885483ull, 15525473367609453846ull,
+ 15106701608927020316ull, 6454162008655958445ull}},
+{{2575656170397581046ull, 960097635802265692ull, 5048318955876611684ull,
+ 8067702510819948057ull}},
+{{10833157143353263962ull, 9823433059231191865ull,
+ 14684414393491352062ull, 5042314069262467535ull}},
+{{18153132447618967856ull, 3055919287184214023ull,
+ 13743831973436802174ull, 6302892586578084419ull}},
+{{18079729541096321916ull, 13043271145835043337ull,
+ 12568103948368614813ull, 7878615733222605524ull}},
+{{4382301935544119342ull, 10457887475360596038ull,
+ 17078437004585160066ull, 4924134833264128452ull}},
+{{14701249456284924985ull, 3848987307345969239ull,
+ 2901302182021898467ull, 6155168541580160566ull}},
+{{13764875801928768327ull, 199548115755073645ull,
+ 12849999764382148892ull, 7693960676975200707ull}},
+{{10908890385419174157ull, 9348089609201696836ull,
+ 5725406843525149105ull, 4808725423109500442ull}},
+{{13636112981773967696ull, 16296798029929508949ull,
+ 16380130591261212189ull, 6010906778886875552ull}},
+{{3210083171935295907ull, 6535939482129722475ull,
+ 2028419165366963621ull, 7513633473608594441ull}},
+{{18147203046955417606ull, 6390805185544770498ull,
+ 12796977024422822023ull, 4696020921005371525ull}},
+{{13460631771839496200ull, 3376820463503575219ull,
+ 2161163225246363817ull, 5870026151256714407ull}},
+{{12214103696371982345ull, 8832711597806856928ull,
+ 16536512086840118483ull, 7337532689070893008ull}},
+{{15267629620464977932ull, 6429203478831183256ull,
+ 2223896034840596488ull, 9171915861338616261ull}},
+{{9542268512790611207ull, 4018252174269489535ull,
+ 3695778030989066757ull, 5732447413336635163ull}},
+{{7316149622560876105ull, 9634501236264249823ull, 8036520308945542ull,
+ 7165559266670793954ull}},
+{{4533501009773707227ull, 2819754508475536471ull,
+ 9233417687240957736ull, 8956949083338492442ull}},
+{{9750967158749648873ull, 1762346567797210294ull,
+ 10382572072952986489ull, 5598093177086557776ull}},
+{{2965336911582285284ull, 6814619228173900772ull,
+ 12978215091191233111ull, 6997616471358197220ull}},
+{{3706671139477856604ull, 3906588016789988061ull,
+ 16222768863989041389ull, 8747020589197746525ull}},
+{{4622512471387354330ull, 4747460519707436490ull,
+ 12445073549206844820ull, 5466887868248591578ull}},
+{{15001512626088968720ull, 5934325649634295612ull,
+ 6332969899653780217ull, 6833609835310739473ull}},
+{{305146708901659284ull, 12029593080470257420ull,
+ 12527898392994613175ull, 8542012294138424341ull}},
+{{9414088729918312861ull, 14436024702934992743ull,
+ 10135779504835327186ull, 5338757683836515213ull}},
+{{7155924893970503172ull, 8821658841813965121ull,
+ 17281410399471546887ull, 6673447104795644016ull}},
+{{13556592135890516869ull, 6415387533840068497ull,
+ 3155018925629881993ull, 8341808880994555021ull}},
+{{1555341057290491187ull, 15538832254718512571ull,
+ 4277729837732370197ull, 5213630550621596888ull}},
+{{15779234376895277696ull, 5588482263115977001ull,
+ 5347162297165462747ull, 6517038188276996110ull}},
+{{5888984915836933408ull, 2373916810467583348ull,
+ 15907324908311604242ull, 8146297735346245137ull}},
+{{12903987609252859188ull, 6095384024969627496ull,
+ 3024549040053670795ull, 5091436084591403211ull}},
+{{16129984511566073985ull, 3007544012784646466ull,
+ 17615744355349252206ull, 6364295105739254013ull}},
+{{10939108602602816673ull, 12982802052835583891ull,
+ 8184622388904401545ull, 7955368882174067517ull}},
+{{4531099867413066469ull, 1196722255381158076ull,
+ 7421232002278944918ull, 4972105551358792198ull}},
+{{5663874834266333086ull, 10719274856081223403ull, 53167965993905339ull,
+ 6215131939198490248ull}},
+{{2468157524405528453ull, 8787407551674141350ull, 66459957492381674ull,
+ 7768914923998112810ull}},
+{{15377656508035618995ull, 10103815738223726247ull,
+ 4653223491860126450ull, 4855571827498820506ull}},
+{{14610384616617135840ull, 3406397635924882001ull,
+ 15039901401679933871ull, 6069464784373525632ull}},
+{{4427922715489256088ull, 18093055100188266214ull,
+ 353132678390365722ull, 7586830980466907041ull}},
+{{16602509752462948767ull, 15919845456045054287ull,
+ 11749922970062448336ull, 4741769362791816900ull}},
+{{16141451172151298055ull, 1453062746346766243ull,
+ 14687403712578060421ull, 5927211703489771125ull}},
+{{15565127946761734664ull, 6428014451360845708ull,
+ 4524196585440411814ull, 7409014629362213907ull}},
+{{504832929871308357ull, 17852567087382692280ull, 521779856686563431ull,
+ 4630634143351383692ull}},
+{{631041162339135447ull, 17704022840800977446ull, 652224820858204289ull,
+ 5788292679189229615ull}},
+{{10012173489778695116ull, 8294970495719058095ull,
+ 14650339081354919074ull, 7235365848986537018ull}},
+{{7903530843795980991ull, 1145341082794046811ull,
+ 9089551814838873035ull, 9044207311233171273ull}},
+{{2633863768158794168ull, 16856739241242136921ull,
+ 17210184930342765406ull, 5652629569520732045ull}},
+{{7904015728625880613ull, 11847552014697895343ull,
+ 7677673107646293046ull, 7065786961900915057ull}},
+{{5268333642354962863ull, 5586067981517593371ull,
+ 14208777402985254212ull, 8832233702376143821ull}},
+{{986865517258157837ull, 12714664525303271665ull,
+ 11186328886079477834ull, 5520146063985089888ull}},
+{{5845267915000085201ull, 6669958619774313773ull,
+ 13982911107599347293ull, 6900182579981362360ull}},
+{{11918270912177494405ull, 12949134293145280120ull,
+ 17478638884499184116ull, 8625228224976702950ull}},
+{{7448919320110934003ull, 17316580970070575883ull,
+ 6312463284384602168ull, 5390767640610439344ull}},
+{{4699463131711279600ull, 3198982138878668238ull,
+ 7890579105480752711ull, 6738459550763049180ull}},
+{{15097700951493875308ull, 17833785728880499009ull,
+ 9863223881850940888ull, 8423074438453811475ull}},
+{{2518534067042590211ull, 11146116080550311881ull,
+ 3858671916943144103ull, 5264421524033632172ull}},
+{{7759853602230625668ull, 9320959082260501947ull,
+ 4823339896178930129ull, 6580526905042040215ull}},
+{{5088130984360894181ull, 16262884871253015338ull,
+ 1417488851796274757ull, 8225658631302550269ull}},
+{{7791767883652946767ull, 12470146053746828538ull,
+ 3191773541586365675ull, 5141036644564093918ull}},
+{{516337817711407651ull, 10975996548756147769ull,
+ 13213088963837732902ull, 6426295805705117397ull}},
+{{5257108290566647468ull, 4496623649090408903ull,
+ 2681303149515002416ull, 8032869757131396747ull}},
+{{10203221709245236523ull, 2810389780681505564ull,
+ 17816715532942734174ull, 5020543598207122966ull}},
+{{12754027136556545654ull, 12736359262706657763ull,
+ 13047522379323641909ull, 6275679497758903708ull}},
+{{11330847902268294164ull, 2085391023101158492ull,
+ 16309402974154552387ull, 7844599372198629635ull}},
+{{16305151975772459660ull, 17444270453934081721ull,
+ 7887533849632901289ull, 4902874607624143522ull}},
+{{6546381914433410863ull, 7970280012135438440ull, 636045275186350804ull,
+ 6128593259530179403ull}},
+{{8182977393041763579ull, 9962850015169298050ull,
+ 14630114649265102217ull, 7660741574412724253ull}},
+{{9726046889078490141ull, 17755996305549281041ull,
+ 11449664665004382837ull, 4787963484007952658ull}},
+{{16769244629775500580ull, 8359937326654437589ull,
+ 5088708794400702739ull, 5984954355009940823ull}},
+{{7126497731937212013ull, 5838235639890659083ull,
+ 1749199974573490520ull, 7481192943762426029ull}},
+{{2148218073247063557ull, 3648897274931661927ull,
+ 3399092993322125527ull, 4675745589851516268ull}},
+{{16520330646840993158ull, 18396179648946741120ull,
+ 4248866241652656908ull, 5844681987314395335ull}},
+{{2203669234841689831ull, 4548480487473874785ull, 699396783638433232ull,
+ 7305852484142994169ull}},
+{{7366272561979500192ull, 5685600609342343481ull,
+ 5485931997975429444ull, 9132315605178742711ull}},
+{{16133135397305657380ull, 12776872417693740483ull,
+ 10346236526375725258ull, 5707697253236714194ull}},
+{{15554733228204683821ull, 6747718485262399796ull,
+ 3709423621114880765ull, 7134621566545892743ull}},
+{{996672461546303161ull, 13046334125005387650ull, 25093507966213052ull,
+ 8918276958182365929ull}},
+{{5234606306893827380ull, 17377330864983143089ull,
+ 11544898488547352917ull, 5573923098863978705ull}},
+{{11154943902044672128ull, 7886605525946765149ull,
+ 596065055402027435ull, 6967403873579973382ull}},
+{{108621822273676448ull, 5246570889006068533ull, 9968453356107310102ull,
+ 8709254841974966727ull}},
+{{2373731648134741732ull, 17114164860910956545ull,
+ 13147812375208150669ull, 5443284276234354204ull}},
+{{7578850578595815069ull, 7557648020856531969ull,
+ 16434765469010188337ull, 6804105345292942755ull}},
+{{14085249241672156741ull, 14058746044498052865ull,
+ 15931770817835347517ull, 8505131681616178444ull}},
+{{1885751748404016107ull, 11092559287024976993ull,
+ 733984724292316390ull, 5315707301010111528ull}},
+{{6968875703932408038ull, 4642327071926445433ull, 917480905365395488ull,
+ 6644634126262639410ull}},
+{{13322780648342897951ull, 5802908839908056791ull,
+ 10370223168561520168ull, 8305792657828299262ull}},
+{{15244266932855393076ull, 3626818024942535494ull,
+ 1869703461923562201ull, 5191120411142687039ull}},
+{{9831961629214465536ull, 9145208549605557272ull,
+ 16172187382686616463ull, 6488900513928358798ull}},
+{{12289952036518081920ull, 6819824668579558686ull,
+ 10991862191503494771ull, 8111125642410448498ull}},
+{{3069534004396413296ull, 1956547408648530227ull,
+ 11481599888117072136ull, 5069453526506530311ull}},
+{{17671975560777680332ull, 2445684260810662783ull,
+ 9740313841718952266ull, 6336816908133162889ull}},
+{{17478283432544712511ull, 12280477362868104287ull,
+ 16787078320576078236ull, 7921021135166453611ull}},
+{{17841456172981527176ull, 16898670388647340987ull,
+ 8186080941146354945ull, 4950638209479033507ull}},
+{{17690134197799521066ull, 7288279930527012522ull,
+ 5620915158005555778ull, 6188297761848791884ull}},
+{{12889295710394625524ull, 18333721950013541461ull,
+ 7026143947506944722ull, 7735372202310989855ull}},
+{{10361652828210334905ull, 16070262237185851317ull,
+ 11308868994832922307ull, 4834607626444368659ull}},
+{{17563752053690306535ull, 15476141778054926242ull,
+ 9524400225113764980ull, 6043259533055460824ull}},
+{{12731318030258107360ull, 898433148859106187ull,
+ 11905500281392206226ull, 7554074416319326030ull}},
+{{5651230759697623148ull, 5173206736464329271ull,
+ 2829251657442740987ull, 4721296510199578769ull}},
+{{2452352431194641031ull, 1854822402153023685ull,
+ 8148250590230814138ull, 5901620637749473461ull}},
+{{7677126557420689193ull, 11541900039546055414ull,
+ 14796999256215905576ull, 7377025797186841826ull}},
+{{373036159921085683ull, 14427375049432569268ull,
+ 9272877033415106162ull, 9221282246483552283ull}},
+{{9456519636805454360ull, 13628795424322743696ull,
+ 3489705136670747399ull, 5763301404052220177ull}},
+{{11820649546006817950ull, 12424308261976041716ull,
+ 8973817439265822153ull, 7204126755065275221ull}},
+{{14775811932508522437ull, 1695327272187888433ull,
+ 15828957817509665596ull, 9005158443831594026ull}},
+{{2317353430176744667ull, 10282951581972206079ull,
+ 14504784654370928901ull, 5628224027394746266ull}},
+{{16731749843003094546ull, 17465375495892645502ull,
+ 8907608781108885318ull, 7035280034243432833ull}},
+{{11691315266899092375ull, 12608347333011031070ull,
+ 15746196994813494552ull, 8794100042804291041ull}},
+{{2695386023384544830ull, 7880217083131894419ull,
+ 2923844094117352239ull, 5496312526752681901ull}},
+{{17204290584512844750ull, 5238585335487480119ull,
+ 8266491136074078203ull, 6870390658440852376ull}},
+{{16893677212213668033ull, 1936545650931962245ull,
+ 10333113920092597754ull, 8587988323051065470ull}},
+{{12864391266847236473ull, 5822027050259864307ull,
+ 1846510181630485692ull, 5367492701906915919ull}},
+{{11468803065131657687ull, 7277533812824830384ull,
+ 16143195782320270827ull, 6709365877383644898ull}},
+{{14336003831414572109ull, 4485231247603650076ull,
+ 10955622691045562726ull, 8386707346729556123ull}},
+{{18183374431488883376ull, 16638327585034445009ull,
+ 4541421172689782751ull, 5241692091705972577ull}},
+{{8894159984078940508ull, 16186223462865668358ull,
+ 10288462484289616343ull, 6552115114632465721ull}},
+{{1894327943243899827ull, 15621093310154697544ull,
+ 17472264123789408333ull, 8190143893290582151ull}},
+{{1183954964527437392ull, 12069026328060379917ull,
+ 17837694105009462064ull, 5118839933306613844ull}},
+{{6091629724086684644ull, 15086282910075474896ull,
+ 3850373557552275964ull, 6398549916633267306ull}},
+{{7614537155108355805ull, 411109563884792004ull,
+ 14036338983795120764ull, 7998187395791584132ull}},
+{{13982457758797498186ull, 9480315514282770810ull,
+ 17996083901726726285ull, 4998867122369740082ull}},
+{{8254700161642096924ull, 16462080411280851417ull,
+ 13271732840303632048ull, 6248583902962175103ull}},
+{{14930061220480009059ull, 2130856440391512655ull,
+ 11977980031952152157ull, 7810729878702718879ull}},
+{{16248817290441087518ull, 3637628284458389361ull,
+ 14403766547611176954ull, 4881706174189199299ull}},
+{{6475963557769195686ull, 13770407392427762510ull,
+ 13393022166086583288ull, 6102132717736499124ull}},
+{{17318326484066270415ull, 17213009240534703137ull,
+ 16741277707608229110ull, 7627665897170623905ull}},
+{{3906425024900337154ull, 6146444756906801557ull,
+ 3545769539614061338ull, 4767291185731639941ull}},
+{{9494717299552809346ull, 16906427982988277754ull,
+ 9043897942944964576ull, 5959113982164549926ull}},
+{{2645024587586235874ull, 2686290905025795577ull,
+ 2081500391826429913ull, 7448892477705687408ull}},
+{{13182355413309867182ull, 13208146861709591995ull,
+ 1300937744891518695ull, 4655557798566054630ull}},
+{{11866258248209946073ull, 11898497558709602090ull,
+ 10849544217969174177ull, 5819447248207568287ull}},
+{{5609450773407656783ull, 1038063893104838901ull,
+ 8950244254034079818ull, 7274309060259460359ull}},
+{{11623499485186958883ull, 10520951903235824434ull,
+ 6576119299115211868ull, 9092886325324325449ull}},
+{{11876373196669237206ull, 15798966976377166079ull,
+ 15639289608015477177ull, 5683053953327703405ull}},
+{{10233780477409158603ull, 5913650665189293887ull,
+ 5714053954737182760ull, 7103817441659629257ull}},
+{{8180539578334060350ull, 7392063331486617359ull,
+ 11754253461848866354ull, 8879771802074536571ull}},
+{{12030366264099869575ull, 9231725600606523753ull,
+ 5040565404441847519ull, 5549857376296585357ull}},
+{{1202899774842673256ull, 6927970982330766788ull,
+ 10912392773979697303ull, 6937321720370731696ull}},
+{{1503624718553341570ull, 4048277709486070581ull,
+ 13640490967474621629ull, 8671652150463414620ull}},
+{{3245608458309532434ull, 4836016577642488065ull,
+ 17748678891526414326ull, 5419782594039634137ull}},
+{{8668696591314303446ull, 15268392758907885889ull,
+ 8350790559125854195ull, 6774728242549542672ull}},
+{{15447556757570267211ull, 14473804930207469457ull,
+ 10438488198907317744ull, 8468410303186928340ull}},
+{{2737193945840335151ull, 9046128081379668411ull,
+ 15747427161171849398ull, 5292756439491830212ull}},
+{{17256550487582582651ull, 2084288064869809705ull,
+ 1237539877755260132ull, 6615945549364787766ull}},
+{{7735630054196064602ull, 2605360081087262132ull,
+ 10770296884048850973ull, 8269931936705984707ull}},
+{{14058140820727316184ull, 3934193059893232784ull,
+ 4425592543316837906ull, 5168707460441240442ull}},
+{{17572676025909145230ull, 14141113361721316788ull,
+ 14755362716000823190ull, 6460884325551550552ull}},
+{{3519100958676879922ull, 8453019665296870178ull,
+ 18444203395001028988ull, 8076105406939438190ull}},
+{{6811124117600437855ull, 14506509327665319669ull,
+ 6915941103448255213ull, 5047565879337148869ull}},
+{{13125591165427935223ull, 4298078604299485874ull,
+ 13256612397737706921ull, 6309457349171436086ull}},
+{{7183616919930143220ull, 9984284273801745247ull,
+ 7347393460317357843ull, 7886821686464295108ull}},
+{{11407289602597421369ull, 3934334661912396827ull,
+ 13815492949553124460ull, 4929263554040184442ull}},
+{{9647425984819388807ull, 4917918327390496034ull,
+ 8045994150086629767ull, 6161579442550230553ull}},
+{{2835910444169460201ull, 1535711890810732139ull,
+ 14669178706035675113ull, 7701974303187788191ull}},
+{{17913345092101770290ull, 12489034977825177346ull,
+ 16085765718913378801ull, 4813733939492367619ull}},
+{{13168309328272437054ull, 1776235666999307971ull,
+ 15495521130214335598ull, 6017167424365459524ull}},
+{{11848700641913158413ull, 11443666620603910772ull,
+ 922657339058367881ull, 7521459280456824406ull}},
+{{16628809938050499816ull, 234762610236362376ull,
+ 14411718892193643638ull, 4700912050285515253ull}},
+{{2339268348853573154ull, 9516825299650228779ull,
+ 4179590559959890835ull, 5876140062856894067ull}},
+{{16759143491349130155ull, 7284345606135398069ull,
+ 612802181522475640ull, 7345175078571117584ull}},
+{{7113871308904248982ull, 9105432007669247587ull, 766002726903094550ull,
+ 9181468848213896980ull}},
+{{2140326558851461662ull, 1079208986365891838ull,
+ 9702123741169209902ull, 5738418030133685612ull}},
+{{11898780235419102885ull, 10572383269812140605ull,
+ 12127654676461512377ull, 7173022537667107015ull}},
+{{1038417238991714894ull, 17827165105692563661ull,
+ 10547882327149502567ull, 8966278172083883769ull}},
+{{2954853783583515761ull, 18059507218698934144ull,
+ 18121641500536908864ull, 5603923857552427355ull}},
+{{3693567229479394701ull, 4127639949664116064ull,
+ 18040365857243748177ull, 7004904821940534194ull}},
+{{4616959036849243376ull, 9771235955507532984ull,
+ 13327085284699909413ull, 8756131027425667743ull}},
+{{2885599398030777110ull, 8412865481405902067ull,
+ 15246957330578525239ull, 5472581892141042339ull}},
+{{17442057302820635100ull, 5904395833329989679ull,
+ 14447010644795768645ull, 6840727365176302924ull}},
+{{17190885610098405971ull, 11992180810089875003ull,
+ 18058763305994710806ull, 8550909206470378655ull}},
+{{8438460497097809780ull, 2883426987878783973ull,
+ 18204256093887776110ull, 5344318254043986659ull}},
+{{15159761639799650129ull, 12827655771703255774ull,
+ 18143634098932332233ull, 6680397817554983324ull}},
+{{9726330012894786853ull, 2199511659346906006ull,
+ 4232798549955863676ull, 8350497271943729156ull}},
+{{1467270239631853879ull, 10598066823946592062ull,
+ 11868871130577190605ull, 5219060794964830722ull}},
+{{11057459836394593157ull, 17859269548360627981ull,
+ 5612716876366712448ull, 6523825993706038403ull}},
+{{18433510813920629350ull, 3877342861741233360ull,
+ 2404210077031002657ull, 8154782492132548004ull}},
+{{11520944258700393344ull, 13952554334656740610ull,
+ 10726003334999152468ull, 5096739057582842502ull}},
+{{5177808286520715872ull, 17440692918320925763ull,
+ 4184132131894164777ull, 6370923821978553128ull}},
+{{1860574339723506935ull, 7965808092618993492ull,
+ 5230165164867705972ull, 7963654777473191410ull}},
+{{10386230999181967643ull, 14202002094741646740ull,
+ 7880539246469704136ull, 4977284235920744631ull}},
+{{12982788748977459553ull, 17752502618427058425ull,
+ 5238988039659742266ull, 6221605294900930789ull}},
+{{2393427880939660730ull, 12967256236179047224ull,
+ 11160421068002065737ull, 7777006618626163486ull}},
+{{1495892425587287956ull, 1187006119970822659ull,
+ 2363577149073903182ull, 4860629136641352179ull}},
+{{15704923587266273657ull, 10707129686818304131ull,
+ 16789529491624542689ull, 6075786420801690223ull}},
+{{15019468465655454167ull, 17995598126950268068ull,
+ 16375225846103290457ull, 7594733026002112779ull}},
+{{163795754179883047ull, 4329719801702835687ull, 7928673144600862584ull,
+ 4746708141251320487ull}},
+{{14039802748007017520ull, 5412149752128544608ull,
+ 5299155412323690326ull, 5933385176564150609ull}},
+{{17549753435008771900ull, 15988559227015456568ull,
+ 11235630283832000811ull, 7416731470705188261ull}},
+{{10968595896880482438ull, 7687006507670966403ull,
+ 9328111936608694459ull, 4635457169190742663ull}},
+{{9099058852673215143ull, 4997072116161320100ull,
+ 7048453902333480170ull, 5794321461488428329ull}},
+{{11373823565841518929ull, 15469712182056425933ull,
+ 13422253396344238116ull, 7242901826860535411ull}},
+{{382221402019734949ull, 890396153860980801ull, 12166130727002909742ull,
+ 9053627283575669264ull}},
+{{11768103422330804103ull, 14391555651445276712ull,
+ 7603831704376818588ull, 5658517052234793290ull}},
+{{14710129277913505129ull, 17989444564306595890ull,
+ 281417593616247427ull, 7073146315293491613ull}},
+{{9164289560537105603ull, 17875119686955856959ull,
+ 4963458010447697188ull, 8841432894116864516ull}},
+{{12645210002976772858ull, 1948577767492634791ull,
+ 12325533293384586551ull, 5525895558823040322ull}},
+{{11194826485293578169ull, 16270780264647957201ull,
+ 6183544579875957380ull, 6907369448528800403ull}},
+{{158475051334808999ull, 1891731257100394886ull, 3117744706417558822ull,
+ 8634211810661000504ull}},
+{{13934104962366419336ull, 15017390090969910515ull,
+ 1948590441510974263ull, 5396382381663125315ull}},
+{{12805945184530636266ull, 14160051595285000240ull,
+ 16270796107170881541ull, 6745477977078906643ull}},
+{{16007431480663295333ull, 3865006438824086588ull,
+ 15726809115536214023ull, 8431847471348633304ull}},
+{{781272638559783775ull, 9333158051906135974ull, 9829255697210133764ull,
+ 5269904669592895815ull}},
+{{10199962835054505527ull, 11666447564882669967ull,
+ 7674883603085279301ull, 6587380836991119769ull}},
+{{8138267525390744004ull, 748001400821173747ull,
+ 14205290522283987031ull, 8234226046238899711ull}},
+{{2780574194155521051ull, 7385029903154315448ull,
+ 15795835604068573750ull, 5146391278899312319ull}},
+{{3475717742694401313ull, 7915342088118502ull, 15133108486658329284ull,
+ 6432989098624140399ull}},
+{{13568019215222777450ull, 9894177610148127ull, 14304699589895523701ull,
+ 8041236373280175499ull}},
+{{15397541037155317762ull, 2312026870220036531ull,
+ 6634594234471008361ull, 5025772733300109687ull}},
+{{14635240278016759299ull, 7501719606202433568ull,
+ 3681556774661372547ull, 6282215916625137109ull}},
+{{18294050347520949123ull, 4765463489325654056ull,
+ 9213631986754103588ull, 7852769895781421386ull}},
+{{11433781467200593202ull, 12201786717683309593ull,
+ 10370206010148702646ull, 4907981184863388366ull}},
+{{457168778718577791ull, 6028861360249361184ull, 3739385475831102500ull,
+ 6134976481079235458ull}},
+{{571460973398222238ull, 7536076700311701480ull,
+ 13897603881643653933ull, 7668720601349044322ull}},
+{{357163108373888899ull, 7015890946908507377ull,
+ 13297688444454671612ull, 4792950375843152701ull}},
+{{5058139903894749028ull, 8769863683635634221ull,
+ 2787052500286175803ull, 5991187969803940877ull}},
+{{10934360898295824189ull, 6350643586117154872ull,
+ 8095501643785107658ull, 7488984962254926096ull}},
+{{6833975561434890118ull, 8580838259750609699ull,
+ 5059688527365692286ull, 4680615601409328810ull}},
+{{3930783433366224743ull, 1502675787833486316ull,
+ 15547982696061891166ull, 5850769501761661012ull}},
+{{4913479291707780929ull, 11101716771646633703ull,
+ 988234296367812341ull, 7313461877202076266ull}},
+{{1530163096207338257ull, 42087909276128417ull, 10458664907314541235ull,
+ 9141827346502595332ull}},
+{{12485566981198056171ull, 16167206007793437924ull,
+ 15760037603926364079ull, 5713642091564122082ull}},
+{{15606958726497570214ull, 15597321491314409501ull,
+ 10476674968053179291ull, 7142052614455152603ull}},
+{{5673640352839799055ull, 14884965845715623973ull,
+ 8484157691639086210ull, 8927565768068940754ull}},
+{{5851868229738568361ull, 13914789671999652887ull,
+ 9914284575701816785ull, 5579728605043087971ull}},
+{{2703149268745822548ull, 3558429034717402397ull,
+ 7781169701199883078ull, 6974660756303859964ull}},
+{{7990622604359666089ull, 13671408330251528804ull,
+ 9726462126499853847ull, 8718325945379824955ull}},
+{{14217511164579567114ull, 15462159234048287358ull,
+ 3773195819848714702ull, 5448953715862390597ull}},
+{{8548516918869683084ull, 10104327005705583390ull,
+ 9328180793238281282ull, 6811192144827988246ull}},
+{{1462274111732328047ull, 3407036720277203430ull,
+ 2436853954693075795ull, 8513990181034985308ull}},
+{{14748979375114868741ull, 18270299014669109807ull,
+ 10746405758537948179ull, 5321243863146865817ull}},
+{{13824538200466198023ull, 18226187749908999355ull,
+ 18044693216599823128ull, 6651554828933582271ull}},
+{{12668986732155359624ull, 4335990613676697578ull,
+ 17944180502322391007ull, 8314443536166977839ull}},
+{{12529802726024487669ull, 9627523161189017842ull,
+ 18132641841592576235ull, 5196527210104361149ull}},
+{{6438881370675833778ull, 7422717933058884399ull,
+ 8830744246708556582ull, 6495659012630451437ull}},
+{{3436915694917404319ull, 55025379468829691ull, 15650116326813083632ull,
+ 8119573765788064296ull}},
+{{18288973373819235363ull, 34390862168018556ull, 9781322704258177270ull,
+ 5074733603617540185ull}},
+{{4414472643564492588ull, 9266360614564799004ull,
+ 16838339398750109491ull, 6343417004521925231ull}},
+{{5518090804455615735ull, 6971264749778610851ull,
+ 16436238230010248960ull, 7929271255652406539ull}},
+{{1142963743571065883ull, 4357040468611631782ull,
+ 7966805884542711648ull, 4955794534782754087ull}},
+{{10652076716318608161ull, 5446300585764539727ull,
+ 5346821337251001656ull, 6194743168478442609ull}},
+{{8703409876970872297ull, 6807875732205674659ull,
+ 11295212689991139974ull, 7743428960598053261ull}},
+{{3133788163893101234ull, 18089980387910710374ull,
+ 9365350940458156435ull, 4839643100373783288ull}},
+{{13140607241721152350ull, 18000789466461000063ull,
+ 11706688675572695544ull, 6049553875467229110ull}},
+{{11814073033724052534ull, 4054242759366698463ull,
+ 5409988807611093623ull, 7561942344334036388ull}},
+{{14301324673718614690ull, 9451430752245268395ull,
+ 12604615041611709322ull, 4726213965208772742ull}},
+{{13264969823720880458ull, 2590916403451809686ull,
+ 6532396765159860845ull, 5907767456510965928ull}},
+{{7357840242796324765ull, 7850331522742150012ull,
+ 8165495956449826056ull, 7384709320638707410ull}},
+{{13822022188602478786ull, 4906457201713843757ull,
+ 9715120991208529189ull, 4615443325399192131ull}},
+{{3442469680470934770ull, 10744757520569692601ull,
+ 7532215220583273582ull, 5769304156748990164ull}},
+{{8914773119016056367ull, 4207574863857339943ull,
+ 9415269025729091978ull, 7211630195936237705ull}},
+{{6531780380342682555ull, 14482840616676450737ull,
+ 16380772300588752876ull, 9014537744920297131ull}},
+{{15611577783782646357ull, 18275147422277557518ull,
+ 7932139678654276595ull, 5634086090575185707ull}},
+{{10291100192873532138ull, 18232248259419558994ull,
+ 5303488579890457840ull, 7042607613218982134ull}},
+{{3640503204237139364ull, 4343566250564897127ull,
+ 15852732761717848109ull, 8803259516523727667ull}},
+{{9192843530289293959ull, 5020571915816754656ull,
+ 7602114966859961116ull, 5502037197827329792ull}},
+{{11491054412861617448ull, 6275714894770943320ull,
+ 9502643708574951395ull, 6877546497284162240ull}},
+{{14363818016077021810ull, 3232957600036291246ull,
+ 11878304635718689244ull, 8596933121605202800ull}},
+{{4365700241620750728ull, 11243970536877457837ull,
+ 7423940397324180777ull, 5373083201003251750ull}},
+{{10068811320453326313ull, 219905115814658584ull, 56553459800450164ull,
+ 6716354001254064688ull}},
+{{12586014150566657892ull, 274881394768323230ull, 70691824750562705ull,
+ 8395442501567580860ull}},
+{{3254572825676773279ull, 11701015917798671779ull,
+ 9267554427323877498ull, 5247151563479738037ull}},
+{{17903274087378130310ull, 5402897860393563915ull,
+ 16196129052582234777ull, 6558939454349672546ull}},
+{{17767406590795274983ull, 11365308343919342798ull,
+ 11021789278873017663ull, 8198674317937090683ull}},
+{{6492943100819658961ull, 14020846742590671105ull,
+ 4582775290081942087ull, 5124171448710681677ull}},
+{{12727864894451961605ull, 12914372409810950977ull,
+ 10340155131029815513ull, 6405214310888352096ull}},
+{{2074773062782788294ull, 2307907456981525010ull,
+ 12925193913787269392ull, 8006517888610440120ull}},
+{{5908419182666630588ull, 1442442160613453131ull,
+ 8078246196117043370ull, 5004073680381525075ull}},
+{{2773837959905900331ull, 11026424737621592222ull,
+ 5486121726718916308ull, 6255092100476906344ull}},
+{{12690669486737151221ull, 13783030922026990277ull,
+ 6857652158398645385ull, 7818865125596132930ull}},
+{{10237511438424413466ull, 1696865298625787067ull,
+ 8897718617426541270ull, 4886790703497583081ull}},
+{{8185203279603128928ull, 11344453660137009642ull,
+ 15733834290210564491ull, 6108488379371978851ull}},
+{{1008132062649135352ull, 9568881056743874149ull,
+ 15055606844335817710ull, 7635610474214973564ull}},
+{{2935925548369403547ull, 1368864642037533439ull, 186382240855110261ull,
+ 4772256546384358478ull}},
+{{17504964990743918146ull, 6322766820974304702ull,
+ 9456349837923663634ull, 5965320682980448097ull}},
+{{12657834201575121874ull, 17126830563072656686ull,
+ 16432123315831967446ull, 7456650853725560121ull}},
+{{3299460357557063267ull, 6092583083493022525ull,
+ 3352548044753897798ull, 4660406783578475076ull}},
+{{8736011465373716988ull, 16839100891221053964ull,
+ 4190685055942372247ull, 5825508479473093845ull}},
+{{10920014331717146235ull, 16437190095598929551ull,
+ 9850042338355353213ull, 7281885599341367306ull}},
+{{9038331896219044890ull, 6711429564216498227ull,
+ 3089180886089415709ull, 9102356999176709133ull}},
+{{3343114425923209104ull, 6500486486849005344ull,
+ 4236581063019578770ull, 5688973124485443208ull}},
+{{4178893032404011380ull, 17348980145416032488ull,
+ 5295726328774473462ull, 7111216405606804010ull}},
+{{5223616290505014225ull, 12462853144915264802ull,
+ 15843029947822867636ull, 8889020507008505012ull}},
+{{7876446199993021795ull, 17012655252426816309ull,
+ 678521680534516464ull, 5555637816880315633ull}},
+{{14457243768418665147ull, 2819074991823968770ull,
+ 5459838119095533485ull, 6944547271100394541ull}},
+{{8848182673668555626ull, 8135529758207348867ull,
+ 11436483667296804760ull, 8680684088875493176ull}},
+{{3224271161829153314ull, 5084706098879593042ull,
+ 7147802292060502975ull, 5425427555547183235ull}},
+{{13253710989141217451ull, 1744196605172103398ull,
+ 4323066846648240815ull, 6781784444433979044ull}},
+{{7343766699571746006ull, 16015303811747292960ull,
+ 5403833558310301018ull, 8477230555542473805ull}},
+{{4589854187232341254ull, 14621250900769446004ull,
+ 5683238983157632088ull, 5298269097214046128ull}},
+{{5737317734040426567ull, 18276563625961807505ull,
+ 7104048728947040110ull, 6622836371517557660ull}},
+{{11783333185977921113ull, 13622332495597483573ull,
+ 8880060911183800138ull, 8278545464396947075ull}},
+{{9670426250449894648ull, 13125643828175815137ull,
+ 3244195060276181134ull, 5174090915248091922ull}},
+{{16699718831489756213ull, 7183682748364993113ull,
+ 13278615862200002226ull, 6467613644060114902ull}},
+{{7039590484080031555ull, 18202975472311017200ull,
+ 7374897790895226974ull, 8084517055075143628ull}},
+{{4399744052550019722ull, 6765173651766997846ull,
+ 13832683156164292667ull, 5052823159421964767ull}},
+{{14723052102542300460ull, 3844781046281359403ull,
+ 12679167926777977930ull, 6316028949277455959ull}},
+{{13792129109750487671ull, 14029348344706475062ull,
+ 11237273890045084508ull, 7895036186596819949ull}},
+{{4008394675166666891ull, 17991714752296322722ull,
+ 9329139190491871769ull, 4934397616623012468ull}},
+{{14233865380813109421ull, 8654585385088239690ull,
+ 11661423988114839712ull, 6167997020778765585ull}},
+{{8568959689161610968ull, 10818231731360299613ull,
+ 741721929861385928ull, 7709996275973456982ull}},
+{{7661442814939700807ull, 6761394832100187258ull,
+ 14298634261445529917ull, 4818747672483410613ull}},
+{{353431481819850201ull, 13063429558552621977ull,
+ 4038234771524748684ull, 6023434590604263267ull}},
+{{5053475370702200655ull, 16329286948190777471ull,
+ 436107445978547951ull, 7529293238255329084ull}},
+{{10075951134329957266ull, 17123333370260317775ull,
+ 9495939190591368277ull, 4705808273909580677ull}},
+{{7983252899485058678ull, 7569108657543233507ull,
+ 16481610006666598251ull, 5882260342386975846ull}},
+{{5367380105928935443ull, 4849699803501653980ull,
+ 11378640471478472006ull, 7352825427983719808ull}},
+{{6709225132411169304ull, 15285496791231843283ull,
+ 14223300589348090007ull, 9191031784979649760ull}},
+{{1887422698543286863ull, 16470964522160983908ull,
+ 8889562868342556254ull, 5744394865612281100ull}},
+{{2359278373179108579ull, 11365333615846454077ull,
+ 11111953585428195318ull, 7180493582015351375ull}},
+{{7560783984901273627ull, 4983294982953291788ull,
+ 9278255963357856244ull, 8975616977519189219ull}},
+{{13948862027418071825ull, 12337931401200583175ull,
+ 3493066967884966200ull, 5609760610949493262ull}},
+{{12824391515845201878ull, 15422414251500728969ull,
+ 13589705746710983558ull, 7012200763686866577ull}},
+{{2195431339524338635ull, 10054645777521135404ull,
+ 3152074128106565736ull, 8765250954608583222ull}},
+{{10595516624057487455ull, 6284153610950709627ull,
+ 15805104385348767297ull, 5478281846630364513ull}},
+{{8632709761644471415ull, 12466878032115774938ull,
+ 5921322426403795409ull, 6847852308287955642ull}},
+{{1567515165200813460ull, 1748539484862554961ull,
+ 16625025069859520070ull, 8559815385359944552ull}},
+{{12508912024318978173ull, 14927895233321260562ull,
+ 10390640668662200043ull, 5349884615849965345ull}},
+{{6412767993543946908ull, 14048183023224187799ull,
+ 17599986854255137958ull, 6687355769812456681ull}},
+{{3404273973502545731ull, 8336856742175458941ull,
+ 8164925512536758736ull, 8359194712265570852ull}},
+{{4433514242652785034ull, 5210535463859661838ull,
+ 14326450482190250018ull, 5224496695165981782ull}},
+{{14765264840170757100ull, 15736541366679353105ull,
+ 8684691065883036714ull, 6530620868957477228ull}},
+{{4621522994931282663ull, 10447304671494415574ull,
+ 10855863832353795893ull, 8163276086196846535ull}},
+{{16723509927114215377ull, 8835408428897703685ull,
+ 13702443922862204289ull, 5102047553873029084ull}},
+{{7069329353610605509ull, 15655946554549517511ull,
+ 17128054903577755361ull, 6377559442341286355ull}},
+{{4224975673585868982ull, 5734875137904733177ull,
+ 16798382611044806298ull, 7971949302926607944ull}},
+{{14169824842059637874ull, 8195982979617846139ull,
+ 10498989131903003936ull, 4982468314329129965ull}},
+{{13100595034147159438ull, 10244978724522307674ull,
+ 17735422433306142824ull, 6228085392911412456ull}},
+{{7152371755829173489ull, 12806223405652884593ull,
+ 3722533967923126914ull, 7785106741139265571ull}},
+{{15999447393461703191ull, 12615575646960440774ull,
+ 20740720738260369ull, 4865691713212040982ull}},
+{{10775937204972353181ull, 1934411503418387256ull,
+ 9249297937777601270ull, 6082114641515051227ull}},
+{{13469921506215441476ull, 11641386416127759878ull,
+ 6949936403794613683ull, 7602643301893814034ull}},
+{{3807014922957263019ull, 4970023500866155972ull,
+ 8955396270799021456ull, 4751652063683633771ull}},
+{{4758768653696578773ull, 6212529376082694965ull,
+ 6582559320071388916ull, 5939565079604542214ull}},
+{{10560146835548111370ull, 7765661720103368706ull,
+ 17451571186944011953ull, 7424456349505677767ull}},
+{{11211777790644957511ull, 16382753621133075201ull,
+ 17824761019481089326ull, 4640285218441048604ull}},
+{{179664183024033176ull, 11255069989561568194ull,
+ 3834207200641810042ull, 5800356523051310756ull}},
+{{9447952265634817278ull, 4845465450097184434ull,
+ 4792759000802262553ull, 7250445653814138445ull}},
+{{2586568295188745789ull, 10668517831048868447ull,
+ 10602634769430216095ull, 9063057067267673056ull}},
+{{8534134212134047975ull, 13585352672046624635ull,
+ 6626646730893885059ull, 5664410667042295660ull}},
+{{6055981746740172064ull, 12370004821630892890ull,
+ 8283308413617356324ull, 7080513333802869575ull}},
+{{16793349220279990888ull, 15462506027038616112ull,
+ 5742449498594307501ull, 8850641667253586969ull}},
+{{10495843262674994305ull, 11969909276112829022ull,
+ 15118245982689911948ull, 5531651042033491855ull}},
+{{3896432041488967073ull, 14962386595141036278ull,
+ 14286121459935002031ull, 6914563802541864819ull}},
+{{14093912088715984649ull, 14091297225498907443ull,
+ 13245965806491364635ull, 8643204753177331024ull}},
+{{6502852046233796454ull, 6501217756723123200ull,
+ 8278728629057102897ull, 5402002970735831890ull}},
+{{8128565057792245568ull, 12738208214331291904ull,
+ 1125038749466602813ull, 6752503713419789863ull}},
+{{10160706322240306959ull, 2087702212631951168ull,
+ 15241356492115417229ull, 8440629641774737328ull}},
+{{6350441451400191850ull, 3610656892108663432ull,
+ 9525847807572135768ull, 5275393526109210830ull}},
+{{7938051814250239812ull, 4513321115135829290ull,
+ 2683937722610393902ull, 6594241907636513538ull}},
+{{699192730958023957ull, 14865023430774562421ull,
+ 12578294190117768185ull, 8242802384545641922ull}},
+{{2742838466062458925ull, 2373110616593019657ull,
+ 12473119887250993020ull, 5151751490341026201ull}},
+{{8040234101005461560ull, 2966388270741274571ull,
+ 1756341803781577563ull, 6439689362926282752ull}},
+{{5438606607829439046ull, 17543043393708756926ull,
+ 2195427254726971953ull, 8049611703657853440ull}},
+{{17234187185175563116ull, 4046873093426891222ull,
+ 1372142034204357471ull, 5031007314786158400ull}},
+{{12319361944614678087ull, 446905348356226124ull,
+ 1715177542755446839ull, 6288759143482698000ull}},
+{{15399202430768347609ull, 14393689740727446367ull,
+ 2143971928444308548ull, 7860948929353372500ull}},
+{{16542030546871299112ull, 18219428124809429787ull,
+ 10563354492132468650ull, 4913093080845857812ull}},
+{{16065852165161735985ull, 13550913119157011426ull,
+ 13204193115165585813ull, 6141366351057322265ull}},
+{{10858943169597394174ull, 3103583343664100571ull,
+ 2670183338674818555ull, 7676707938821652832ull}},
+{{4480996471784677407ull, 18080640654285920521ull,
+ 1668864586671761596ull, 4797942461763533020ull}},
+{{10212931608158234662ull, 4154056744147849035ull,
+ 2086080733339701996ull, 5997428077204416275ull}},
+{{8154478491770405424ull, 5192570930184811294ull,
+ 16442658971956791207ull, 7496785096505520343ull}},
+{{484863038929115486ull, 10162885859006588915ull,
+ 17194190885114076360ull, 4685490685315950214ull}},
+{{14441136853943558069ull, 12703607323758236143ull,
+ 12269366569537819642ull, 5856863356644937768ull}},
+{{13439735049002059683ull, 6656137117843019371ull,
+ 15336708211922274553ull, 7321079195806172210ull}},
+{{12187982792825186699ull, 12931857415731162118ull,
+ 9947513228048067383ull, 9151348994757715263ull}},
+{{3005803227088353783ull, 14999939912473058180ull,
+ 13134724795171123970ull, 5719593121723572039ull}},
+{{3757254033860442229ull, 9526552853736546917ull,
+ 11806719975536517059ull, 7149491402154465049ull}},
+{{9308253560752940690ull, 7296505048743295742ull, 923341914138482612ull,
+ 8936864252693081312ull}},
+{{1205972457043200027ull, 13783687692319335647ull,
+ 577088696336551632ull, 5585540157933175820ull}},
+{{15342523626586163746ull, 17229609615399169558ull,
+ 721360870420689540ull, 6981925197416469775ull}},
+{{9954782496377928875ull, 3090267945539410332ull,
+ 14736759143308025638ull, 8727406496770587218ull}},
+{{15445111097090981355ull, 15766475521244295169ull,
+ 13822160482994903927ull, 5454629060481617011ull}},
+{{5471330816081562981ull, 15096408383127981058ull,
+ 12666014585316242005ull, 6818286325602021264ull}},
+{{16062535556956729535ull, 5035452423627812610ull,
+ 15832518231645302507ull, 8522857907002526580ull}},
+{{14650770741525343863ull, 841314755553688929ull, 671951857923538259ull,
+ 5326786191876579113ull}},
+{{4478405371624516117ull, 14886701499724274874ull,
+ 5451625840831810727ull, 6658482739845723891ull}},
+{{14821378751385420954ull, 13996690856227955688ull,
+ 2202846282612375505ull, 8323103424807154864ull}},
+{{9263361719615888097ull, 1830402757501390449ull,
+ 1376778926632734691ull, 5201939640504471790ull}},
+{{16190888167947248025ull, 16123061502158901773ull,
+ 10944345695145694171ull, 6502424550630589737ull}},
+{{6403552154651896319ull, 15542140859271239313ull,
+ 18292118137359505618ull, 8128030688288237171ull}},
+{{15531435142725904959ull, 14325524055471912474ull,
+ 9126730826635997059ull, 5080019180180148232ull}},
+{{10190921891552605391ull, 13295219050912502689ull,
+ 11408413533294996324ull, 6350023975225185290ull}},
+{{17350338382868144643ull, 16619023813640628361ull,
+ 5037144879763969597ull, 7937529969031481613ull}},
+{{3926432461651508546ull, 12692732892739086678ull,
+ 5454058559066174950ull, 4960956230644676008ull}},
+{{14131412613919161490ull, 6642544079069082539ull,
+ 6817573198832718688ull, 6201195288305845010ull}},
+{{13052579748971563959ull, 8303180098836353174ull,
+ 17745338535395674168ull, 7751494110382306262ull}},
+{{3546176324679839570ull, 5189487561772720734ull,
+ 6479150566194908451ull, 4844683818988941414ull}},
+{{13656092442704575271ull, 1875173433788513013ull,
+ 17322310244598411372ull, 6055854773736176767ull}},
+{{3235057498098555376ull, 2343966792235641267ull,
+ 17041201787320626311ull, 7569818467170220959ull}},
+{{18162812000807454774ull, 8382508272788357647ull,
+ 17568280144716473300ull, 4731136541981388099ull}},
+{{18091828982581930564ull, 10478135340985447059ull,
+ 17348664162468203721ull, 5913920677476735124ull}},
+{{18003100209800025301ull, 17709355194659196728ull,
+ 3239086129375703035ull, 7392400846845918906ull}},
+{{11251937631125015813ull, 8762503987448304003ull,
+ 6636114849287202301ull, 4620250529278699316ull}},
+{{9453236020478881862ull, 15564816002737767908ull,
+ 8295143561609002876ull, 5775313161598374145ull}},
+{{11816545025598602328ull, 1009275929712658269ull,
+ 14980615470438641500ull, 7219141451997967681ull}},
+{{935623226716089197ull, 1261594912140822837ull, 4890711282766138163ull,
+ 9023926814997459602ull}},
+{{2890607525911249701ull, 16929397884583871937ull,
+ 7668380570156224255ull, 5639954259373412251ull}},
+{{8224945425816450030ull, 16550061337302452017ull,
+ 4973789694267892415ull, 7049942824216765314ull}},
+{{14892867800697950441ull, 16075890653200677117ull,
+ 15440609154689641327ull, 8812428530270956642ull}},
+{{11613885384649912978ull, 16964960685891505054ull,
+ 14262066740108413733ull, 5507767831419347901ull}},
+{{5293984693957615414ull, 7371142802082217606ull,
+ 3992525369853353455ull, 6884709789274184877ull}},
+{{15840852904301795075ull, 4602242484175384103ull,
+ 9602342730744079723ull, 8605887236592731096ull}},
+{{16818062092829703778ull, 570558543395921112ull,
+ 6001464206715049827ull, 5378679522870456935ull}},
+{{2575833542327578107ull, 14548256234527065103ull,
+ 2890144239966424379ull, 6723349403588071169ull}},
+{{17054849983191636345ull, 13573634274731443474ull,
+ 8224366318385418378ull, 8404186754485088961ull}},
+{{15270967257922160620ull, 13095207440134540075ull,
+ 16669443995059356246ull, 5252616721553180600ull}},
+{{14477023053975312871ull, 7145637263313399286ull,
+ 2390060920114643692ull, 6565770901941475751ull}},
+{{8872906780614365281ull, 8932046579141749108ull,
+ 16822634205425468327ull, 8207213627426844688ull}},
+{{14768938774738754109ull, 12500058139604675048ull,
+ 10514146378390917704ull, 5129508517141777930ull}},
+{{14429394713891020ull, 15625072674505843811ull, 3919310936133871322ull,
+ 6411885646427222413ull}},
+{{13853094798674527486ull, 10307968806277528955ull,
+ 9510824688594727057ull, 8014857058034028016ull}},
+{{6352341239957885727ull, 17971695549991925357ull,
+ 5944265430371704410ull, 5009285661271267510ull}},
+{{12552112568374745063ull, 13241247400635130888ull,
+ 16653703824819406321ull, 6261607076589084387ull}},
+{{15690140710468431328ull, 2716501195511749898ull,
+ 16205443762596869998ull, 7827008845736355484ull}},
+{{14418023962470157484ull, 15532871302477007398ull,
+ 905030314768267940ull, 4891880528585222178ull}},
+{{8799157916232921047ull, 969345054386707632ull,
+ 10354659930315110734ull, 6114850660731527722ull}},
+{{10998947395291151309ull, 10435053354838160348ull,
+ 3719952876039112609ull, 7643563325914409653ull}},
+{{16097714158911745376ull, 18051123392842319977ull,
+ 4630813556738139332ull, 4777227078696506033ull}},
+{{6287084643357518008ull, 4117160167343348356ull,
+ 10400202964350062070ull, 5971533848370632541ull}},
+{{7858855804196897510ull, 14369822246033961253ull,
+ 17611939723864965491ull, 7464417310463290676ull}},
+{{7217627886836754896ull, 6675295894557531831ull,
+ 1784090290560827624ull, 4665260819039556673ull}},
+{{4410348840118555716ull, 8344119868196914789ull,
+ 6841798881628422434ull, 5831576023799445841ull}},
+{{10124622068575582549ull, 1206777798391367678ull,
+ 13163934620462915947ull, 7289470029749307301ull}},
+{{3432405548864702378ull, 15343530303271373310ull,
+ 2619860220296481221ull, 9111837537186634127ull}},
+{{15980311523322602698ull, 11895549448758302270ull,
+ 8554941665326382619ull, 5694898460741646329ull}},
+{{10752017367298477565ull, 10257750792520489934ull,
+ 15305363100085366178ull, 7118623075927057911ull}},
+{{4216649672268321148ull, 3598816453795836610ull,
+ 14520017856679319819ull, 8898278844908822389ull}},
+{{7247092063595088622ull, 18390161348118255545ull,
+ 11380854169638268838ull, 5561424278068013993ull}},
+{{13670551097921248681ull, 13764329648293043623ull,
+ 391009656765672336ull, 6951780347585017492ull}},
+{{12476502853974172947ull, 17205412060366304529ull,
+ 488762070957090420ull, 8689725434481271865ull}},
+{{880285256092776236ull, 1530010500874164523ull,
+ 11834691340416651273ull, 5431078396550794915ull}},
+{{14935414625398134007ull, 6524199144520093557ull,
+ 10181678157093426187ull, 6788847995688493644ull}},
+{{4834210226465503797ull, 3543562912222729043ull,
+ 12727097696366782734ull, 8486059994610617055ull}},
+{{715538382327245921ull, 16049784875421369364ull,
+ 14871965087870321064ull, 5303787496631635659ull}},
+{{894422977909057401ull, 1615487020567160089ull,
+ 13978270341410513427ull, 6629734370789544574ull}},
+{{5729714740813709656ull, 15854416830991113823ull,
+ 8249465889908365975ull, 8287167963486930718ull}},
+{{10498600740649650391ull, 16826539547010527995ull,
+ 544230162765340830ull, 5179479977179331699ull}},
+{{8511564907384675084ull, 11809802396908384186ull,
+ 14515345758738839750ull, 6474349971474164623ull}},
+{{1416084097376068047ull, 5538880959280704425ull,
+ 13532496179996161784ull, 8092937464342705779ull}},
+{{12414267606928512290ull, 3461800599550440265ull,
+ 6151967103283907163ull, 5058085915214191112ull}},
+{{1682776453378476650ull, 18162308804720214044ull,
+ 7689958879104883953ull, 6322607394017738890ull}},
+{{2103470566723095813ull, 8867827950618103843ull, 389076562026329134ull,
+ 7903259242522173613ull}},
+{{17455570168697792547ull, 930706450708926997ull,
+ 2549015860480149661ull, 4939537026576358508ull}},
+{{7984404655590076972ull, 5775069081813546651ull,
+ 3186269825600187076ull, 6174421283220448135ull}},
+{{5368819801060208311ull, 7218836352266933314ull,
+ 17817895337282397557ull, 7718026604025560168ull}},
+{{7967198394090018098ull, 6817615729380527273ull,
+ 11136184585801498473ull, 4823766627515975105ull}},
+{{14570684011039910527ull, 13133705680153046995ull,
+ 85172676969709379ull, 6029708284394968882ull}},
+{{13601668995372500254ull, 11805446081763920840ull,
+ 9329837883066912532ull, 7537135355493711102ull}},
+{{8501043122107812659ull, 16601775837957226333ull,
+ 1219462658489432428ull, 4710709597183569439ull}},
+{{15237989921062153728ull, 2305475723736981300ull,
+ 15359386378393954248ull, 5888386996479461798ull}},
+{{600743327618140544ull, 2881844654671226626ull, 9975860936137667002ull,
+ 7360483745599327248ull}},
+{{9974301196377451487ull, 12825677855193809090ull,
+ 12469826170172083752ull, 9200604681999159060ull}},
+{{10845624266163295084ull, 8016048659496130681ull,
+ 17017013393212328153ull, 5750377926249474412ull}},
+{{18168716351131506759ull, 14631746842797551255ull,
+ 2824522667805858575ull, 7187972407811843016ull}},
+{{18099209420486995544ull, 13677997535069551165ull,
+ 3530653334757323219ull, 8984965509764803770ull}},
+{{13617848897018066167ull, 6242905450204775526ull,
+ 6818344352650714916ull, 5615603443603002356ull}},
+{{7798939084417806901ull, 7803631812755969408ull,
+ 8522930440813393645ull, 7019504304503752945ull}},
+{{9748673855522258626ull, 14366225784372349664ull,
+ 15265349069444129960ull, 8774380380629691181ull}},
+{{6092921159701411641ull, 8978891115232718540ull,
+ 11846686177616275177ull, 5483987737893556988ull}},
+{{7616151449626764552ull, 15835299912468286079ull,
+ 14808357722020343971ull, 6854984672366946235ull}},
+{{4908503293606067786ull, 15182438872157969695ull,
+ 13898761134098042060ull, 8568730840458682794ull}},
+{{9985343586144874222ull, 265652258243955251ull,
+ 13298411727238664192ull, 5355456775286676746ull}},
+{{7869993464253704874ull, 332065322804944064ull, 7399642622193554432ull,
+ 6694320969108345933ull}},
+{{9837491830317131092ull, 415081653506180080ull,
+ 13861239296169330944ull, 8367901211385432416ull}},
+{{6148432393948206933ull, 259426033441362550ull, 8663274560105831840ull,
+ 5229938257115895260ull}},
+{{16908912529290034474ull, 324282541801703187ull,
+ 10829093200132289800ull, 6537422821394869075ull}},
+{{16524454643185155188ull, 405353177252128984ull,
+ 8924680481737974346ull, 8171778526743586344ull}},
+{{10327784151990721993ull, 4865031754209968519ull,
+ 5577925301086233966ull, 5107361579214741465ull}},
+{{8298044171561014587ull, 15304661729617236457ull,
+ 11584092644785180361ull, 6384201974018426831ull}},
+{{14984241232878656137ull, 5295769106739381859ull,
+ 9868429787554087548ull, 7980252467523033539ull}},
+{{7059307761335466134ull, 12533227728566889470ull,
+ 3861925608007610765ull, 4987657792201895962ull}},
+{{18047506738524108475ull, 1831476605426448125ull,
+ 14050779046864289265ull, 6234572240252369952ull}},
+{{8724325367872971882ull, 6901031775210448061ull,
+ 17563473808580361581ull, 7793215300315462440ull}},
+{{7758546364134301378ull, 6618987868720223990ull,
+ 10977171130362725988ull, 4870759562697164025ull}},
+{{474810918313100915ull, 8273734835900279988ull,
+ 18333149931380795389ull, 6088449453371455031ull}},
+{{593513647891376143ull, 14953854563302737889ull,
+ 18304751395798606332ull, 7610561816714318789ull}},
+{{11900161076000579850ull, 122787065209435372ull,
+ 13746312631587822910ull, 4756601135446449243ull}},
+{{14875201345000724812ull, 9376855868366570023ull,
+ 12571204771057390733ull, 5945751419308061554ull}},
+{{13982315662823518111ull, 16332755853885600433ull,
+ 6490633926966962608ull, 7432189274135076943ull}},
+{{1821418261623616964ull, 10207972408678500271ull,
+ 10974175231995433486ull, 4645118296334423089ull}},
+{{16111830882311684916ull, 3536593473993349530ull,
+ 18329405058421679762ull, 5806397870418028861ull}},
+{{10916416566034830337ull, 13644113879346462721ull,
+ 9076698267744935990ull, 7257997338022536077ull}},
+{{18257206725970925826ull, 7831770312328302593ull,
+ 15957558853108557892ull, 9072496672528170096ull}},
+{{4493225176090746785ull, 14118228482059964929ull,
+ 9973474283192848682ull, 5670310420330106310ull}},
+{{10228217488540821385ull, 8424413565720180353ull,
+ 3243470817136285045ull, 7087888025412632888ull}},
+{{17396957879103414636ull, 15142202975577613345ull,
+ 4054338521420356306ull, 8859860031765791110ull}},
+{{3955569646798552291ull, 14075562878163396245ull,
+ 16369019631169886403ull, 5537412519853619443ull}},
+{{9556148076925578268ull, 12982767579276857402ull,
+ 15849588520534970100ull, 6921765649817024304ull}},
+{{2721813059302197027ull, 16228459474096071753ull,
+ 1365241576959161009ull, 8652207062271280381ull}},
+{{13230348208132342902ull, 3225258143668962989ull,
+ 3159118994813169583ull, 5407629413919550238ull}},
+{{2702877204883264916ull, 17866630734868367449ull,
+ 13172270780371237786ull, 6759536767399437797ull}},
+{{7990282524531469048ull, 13109916381730683503ull,
+ 2630280420181883521ull, 8449420959249297247ull}},
+{{11911455605473250011ull, 1276168710940595333ull,
+ 8561454290254759057ull, 5280888099530810779ull}},
+{{1054261451559398802ull, 6206896907103132071ull,
+ 6090131844391060917ull, 6601110124413513474ull}},
+{{15152884869731412214ull, 12370307152306302992ull,
+ 16836036842343601954ull, 8251387655516891842ull}},
+{{9470553043582132634ull, 12343127988618827274ull,
+ 15134209044892139125ull, 5157117284698057401ull}},
+{{2614819267622889985ull, 1593851930491370381ull,
+ 5082703250833010195ull, 6446396605872571752ull}},
+{{7880210102956000385ull, 15827372968396376688ull,
+ 6353379063541262743ull, 8057995757340714690ull}},
+{{4925131314347500241ull, 16809637132888817286ull,
+ 8582547933140677118ull, 5036247348337946681ull}},
+{{15379786179789151109ull, 11788674379256245799ull,
+ 15339870934853234302ull, 6295309185422433351ull}},
+{{14613046706309050982ull, 5512470937215531441ull,
+ 14563152650139154974ull, 7869136481778041689ull}},
+{{2215625163802075008ull, 17280352391041870863ull,
+ 2184441378695890002ull, 4918210301111276056ull}},
+{{16604589510034757472ull, 12377068451947562770ull,
+ 2730551723369862503ull, 6147762876389095070ull}},
+{{11532364850688671031ull, 10859649546507065559ull,
+ 12636561691067103937ull, 7684703595486368837ull}},
+{{14125257059321501251ull, 18316496012635385734ull,
+ 10203694066130633912ull, 4802939747178980523ull}},
+{{8433199287297100755ull, 4448875942084680552ull,
+ 8142931564235904487ull, 6003674683973725654ull}},
+{{10541499109121375944ull, 949408909178462786ull, 955292418440104801ull,
+ 7504593354967157068ull}},
+{{11200122961628247869ull, 12122595614305009001ull,
+ 9820429798379841308ull, 4690370846854473167ull}},
+{{165095646753146124ull, 15153244517881261252ull,
+ 7663851229547413731ull, 5862963558568091459ull}},
+{{206369558441432655ull, 14329869628924188661ull,
+ 4968128018506879260ull, 7328704448210114324ull}},
+{{4869647966479178723ull, 17912337036155235826ull,
+ 6210160023133599075ull, 9160880560262642905ull}},
+{{7655215997476874606ull, 8889367638383328439ull,
+ 15410565060526969182ull, 5725550350164151815ull}},
+{{4957333978418705354ull, 1888337511124384741ull,
+ 14651520307231323574ull, 7156937937705189769ull}},
+{{10808353491450769596ull, 11583793925760256734ull,
+ 4479342328756990755ull, 8946172422131487212ull}},
+{{2143534913729343094ull, 4934028194386466507ull,
+ 12022960992327895030ull, 5591357763832179507ull}},
+{{16514476697443842579ull, 15390907279837858941ull,
+ 10417015221982480883ull, 6989197204790224384ull}},
+{{6808037816522639511ull, 14626948081369935773ull,
+ 13021269027478101104ull, 8736496505987780480ull}},
+{{6560866644540343647ull, 9141842550856209858ull,
+ 8138293142173813190ull, 5460310316242362800ull}},
+{{17424455342530205366ull, 2203931151715486514ull,
+ 10172866427717266488ull, 6825387895302953500ull}},
+{{12557197141307980900ull, 2754913939644358143ull,
+ 12716083034646583110ull, 8531734869128691875ull}},
+{{14765777240958569919ull, 15556879267559887551ull,
+ 5641708887440420491ull, 5332334293205432422ull}},
+{{13845535532770824494ull, 14834413066022471535ull,
+ 16275508146155301422ull, 6665417866506790527ull}},
+{{12695233397536142714ull, 9319644295673313611ull,
+ 15732699164266738874ull, 8331772333133488159ull}},
+{{5628677864246395244ull, 10436463703223208911ull,
+ 16750466005307793652ull, 5207357708208430099ull}},
+{{2424161311880606151ull, 13045579629029011139ull,
+ 16326396488207354161ull, 6509197135260537624ull}},
+{{16865259695132921401ull, 2471916481004100211ull,
+ 1961251536549641086ull, 8136496419075672031ull}},
+{{8234944300244381924ull, 15380005855909726344ull,
+ 8143311237984607534ull, 5085310261922295019ull}},
+{{10293680375305477404ull, 10001635283032382122ull,
+ 5567453029053371514ull, 6356637827402868774ull}},
+{{3643728432277070947ull, 3278672066935701845ull,
+ 16182688323171490201ull, 7945797284253585967ull}},
+{{4583173279386863294ull, 13578385087903283413ull,
+ 17031709229623263231ull, 4966123302658491229ull}},
+{{10340652617660967022ull, 12361295341451716362ull,
+ 7454578481746915327ull, 6207654128323114037ull}},
+{{3702443735221432969ull, 10839933158387257549ull,
+ 13929909120611032063ull, 7759567660403892546ull}},
+{{4619870343727089558ull, 13692487251633117824ull,
+ 13317879218809282943ull, 4849729787752432841ull}},
+{{5774837929658861947ull, 12503923046114009376ull,
+ 2812290968229439967ull, 6062162234690541052ull}},
+{{7218547412073577434ull, 11018217789215123816ull,
+ 3515363710286799959ull, 7577702793363176315ull}},
+{{4511592132545985896ull, 13803915145900534241ull,
+ 18338003383425107638ull, 4736064245851985196ull}},
+{{10251176184109870274ull, 8031521895520891993ull,
+ 4475760155571832932ull, 5920080307314981496ull}},
+{{17425656248564725747ull, 10039402369401114991ull,
+ 5594700194464791165ull, 7400100384143726870ull}},
+{{17808564182994035448ull, 8580469490089390821ull,
+ 17331745676822658190ull, 4625062740089829293ull}},
+{{8425647173460380598ull, 1502214825756962719ull,
+ 7829624040746159026ull, 5781328425112286617ull}},
+{{5920372948398087843ull, 11101140569050979207ull,
+ 14398716069360086686ull, 7226660531390358271ull}},
+{{2788780167070221900ull, 4653053674458948201ull,
+ 13386709068272720454ull, 9033325664237947839ull}},
+{{13272202650487358448ull, 16743216601819006337ull,
+ 15284222195311532139ull, 5645828540148717399ull}},
+{{2755195257827034347ull, 16317334733846370018ull,
+ 14493591725712027270ull, 7057285675185896749ull}},
+{{12667366109138568742ull, 11173296380453186714ull,
+ 4281931601857870376ull, 8821607093982370937ull}},
+{{12528789836638993368ull, 6983310237783241696ull,
+ 14205422297229638745ull, 5513504433738981835ull}},
+{{15660987295798741710ull, 13340823815656440024ull,
+ 13145091853109660527ull, 6891880542173727294ull}},
+{{1129490046038875521ull, 12064343751143162127ull,
+ 7207992779532299851ull, 8614850677717159118ull}},
+{{7623460306415379057ull, 5234371835250782377ull,
+ 18340053542489851119ull, 5384281673573224448ull}},
+{{14141011401446611725ull, 1931278775636090067ull,
+ 4478322854402762283ull, 6730352091966530561ull}},
+{{13064578233380876752ull, 16249156524827276296ull,
+ 10209589586430840757ull, 8412940114958163201ull}},
+{{8165361395863047970ull, 12461565837230741637ull,
+ 17910208537587745233ull, 5258087571848852000ull}},
+{{14818387763256197867ull, 1741899241256263334ull,
+ 3941016598275129926ull, 6572609464811065001ull}},
+{{9299612667215471525ull, 11400746088425104976ull,
+ 9537956766271300311ull, 8215761831013831251ull}},
+{{5812257917009669703ull, 14042995332906772466ull,
+ 3655379969705868742ull, 5134851144383644532ull}},
+{{16488694433116862937ull, 8330372129278689774ull,
+ 4569224962132335928ull, 6418563930479555665ull}},
+{{11387496004541302863ull, 10412965161598362218ull,
+ 10323217221092807814ull, 8023204913099444581ull}},
+{{11728871021265702194ull, 1896417207571588482ull,
+ 8757853772396698836ull, 5014503070687152863ull}},
+{{5437716739727351934ull, 2370521509464485603ull,
+ 6335631197068485641ull, 6268128838358941079ull}},
+{{2185459906231802013ull, 7574837905257994908ull,
+ 3307852977908219147ull, 7835161047948676349ull}},
+{{10589284478249652067ull, 2428430681572552865ull,
+ 4373251120406330919ull, 4896975654967922718ull}},
+{{17848291616239452987ull, 16870596407247854793ull,
+ 14689935937362689456ull, 6121219568709903397ull}},
+{{8475306465017152522ull, 2641501435350266876ull,
+ 4527361866421198109ull, 7651524460887379247ull}},
+{{14520438577490496134ull, 3956781406307610749ull,
+ 9747130194154330674ull, 4782202788054612029ull}},
+{{4315490166580956456ull, 14169348794739289245ull,
+ 16795598761120301246ull, 5977753485068265036ull}},
+{{10006048726653583474ull, 8488313956569335748ull,
+ 2547754377690824942ull, 7472191856335331296ull}},
+{{15477152491013265479ull, 693510204428446938ull,
+ 1592346486056765589ull, 4670119910209582060ull}},
+{{10123068576911806041ull, 5478573773962946577ull,
+ 1990433107570956986ull, 5837649887761977575ull}},
+{{17265521739567145455ull, 16071589254308459029ull,
+ 16323099439745859944ull, 7297062359702471968ull}},
+{{7746844119176768107ull, 1642742494176022171ull,
+ 1957130225972773315ull, 9121327949628089961ull}},
+{{2535934565271786115ull, 17167615123355871521ull,
+ 12752421437301453081ull, 5700829968517556225ull}},
+{{7781604225017120547ull, 7624460848912675689ull,
+ 2105468741344652640ull, 7126037460646945282ull}},
+{{14338691299698788588ull, 9530576061140844611ull,
+ 11855207963535591608ull, 8907546825808681602ull}},
+{{6655839053098048916ull, 5956610038213027882ull,
+ 12021190995637132659ull, 5567216766130426001ull}},
+{{17543170853227336953ull, 2834076529338896948ull,
+ 1191430689264252112ull, 6959020957663032502ull}},
+{{3482219492824619575ull, 3542595661673621186ull,
+ 10712660398435090948ull, 8698776197078790627ull}},
+{{6788073201442775138ull, 11437494325400789049ull,
+ 4389569739808237890ull, 5436735123174244142ull}},
+{{13096777520230856827ull, 5073495869896210503ull,
+ 14710334211615073171ull, 6795918903967805177ull}},
+{{11759285881861183129ull, 1730183818942875225ull,
+ 4552859709236677752ull, 8494898629959756472ull}},
+{{432024648522157600ull, 1081364886839297016ull, 2845537318272923595ull,
+ 5309311643724847795ull}},
+{{540030810652697000ull, 15186764163831284982ull,
+ 17391979703123318205ull, 6636639554656059743ull}},
+{{9898410550170647058ull, 5148397149506942515ull,
+ 17128288610476759853ull, 8295799443320074679ull}},
+{{3880663584642960459ull, 5523591227655533024ull,
+ 17622709409189056764ull, 5184874652075046674ull}},
+{{4850829480803700574ull, 6904489034569416280ull,
+ 12805014724631545147ull, 6481093315093808343ull}},
+{{6063536851004625717ull, 4018925274784382446ull,
+ 11394582387362043530ull, 8101366643867260429ull}},
+{{17624768587160054785ull, 7123514315167626932ull,
+ 9427457001314971158ull, 5063354152417037768ull}},
+{{3584216660240516866ull, 18127764930814309474ull,
+ 11784321251643713947ull, 6329192690521297210ull}},
+{{13703642862155421890ull, 18048020145090498938ull,
+ 5507029527699866626ull, 7911490863151621513ull}},
+{{13176462807274526585ull, 15891698609108949740ull,
+ 14971108500880886401ull, 4944681789469763445ull}},
+{{16470578509093158232ull, 6029565206104023463ull,
+ 4878827570818944290ull, 6180852236837204307ull}},
+{{15976537117939059886ull, 16760328544484805137ull,
+ 1486848445096292458ull, 7726065296046505384ull}},
+{{3067806671070830573ull, 15086891358730391115ull,
+ 929280278185182786ull, 4828790810029065865ull}},
+{{17669816394120701928ull, 9635242161558213085ull,
+ 5773286366158866387ull, 6035988512536332331ull}},
+{{8252212437368713697ull, 7432366683520378453ull,
+ 2604921939271195080ull, 7544985640670415414ull}},
+{{7463475782569140013ull, 4645229177200236533ull,
+ 15463134267326660637ull, 4715616025419009633ull}},
+{{13941030746638812920ull, 10418222489927683570ull,
+ 5493859778876162084ull, 5894520031773762042ull}},
+{{8202916396443740342ull, 13022778112409604463ull,
+ 16090696760449978413ull, 7368150039717202552ull}},
+{{5641959477127287524ull, 2443414585229841867ull,
+ 1666626876852921401ull, 9210187549646503191ull}},
+{{1220381663990860750ull, 13056349161837120927ull,
+ 7959170825674157731ull, 5756367218529064494ull}},
+{{15360535135270739650ull, 11708750433869013254ull,
+ 725591495237921356ull, 7195459023161330618ull}},
+{{9977296882233648754ull, 14635938042336266568ull,
+ 10130361405902177503ull, 8994323778951663272ull}},
+{{6235810551396030472ull, 16064990304101248461ull,
+ 6331475878688860939ull, 5621452361844789545ull}},
+{{12406449207672425993ull, 15469551861699172672ull,
+ 12526030866788464078ull, 7026815452305986931ull}},
+{{15508061509590532492ull, 10113567790269190032ull,
+ 11045852565058192194ull, 8783519315382483664ull}},
+{{9692538443494082807ull, 10932665887345631674ull,
+ 6903657853161370121ull, 5489699572114052290ull}},
+{{2892301017512827701ull, 18277518377609427497ull,
+ 17852944353306488459ull, 6862124465142565362ull}},
+{{8227062290318422530ull, 18235211953584396467ull,
+ 13092808404778334766ull, 8577655581428206703ull}},
+{{2836070922235320130ull, 6785321452562859888ull,
+ 15100534280627541085ull, 5361034738392629189ull}},
+{{3545088652794150162ull, 13093337834130962764ull,
+ 5040609795502262644ull, 6701293422990786487ull}},
+{{4431360815992687702ull, 16366672292663703455ull,
+ 1689076225950440401ull, 8376616778738483109ull}},
+{{9687129537636511670ull, 3311641155273732803ull,
+ 3361515650432719203ull, 5235385486711551943ull}},
+{{7497225903618251684ull, 17974609499374329716ull,
+ 18036952618323062715ull, 6544231858389439928ull}},
+{{9371532379522814604ull, 17856575855790524241ull,
+ 4099446699194276778ull, 8180289822986799911ull}},
+{{17386422783270228888ull, 15772045928296465554ull,
+ 9479683214637504842ull, 5112681139366749944ull}},
+{{12509656442233010302ull, 10491685373515806135ull,
+ 11849604018296881053ull, 6390851424208437430ull}},
+{{11025384534363874973ull, 17726292735322145573ull,
+ 5588632986016325508ull, 7988564280260546788ull}},
+{{9196708343191115810ull, 1855560922721565175ull,
+ 12716267653114979251ull, 4992852675162841742ull}},
+{{6884199410561506859ull, 16154509208684120181ull,
+ 6671962529538948255ull, 6241065843953552178ull}},
+{{13216935281629271477ull, 15581450492427762322ull,
+ 17563325198778461127ull, 7801332304941940222ull}},
+{{12872270569445682578ull, 16655935585408433307ull,
+ 6365392230809150300ull, 4875832690588712639ull}},
+{{11478652193379715318ull, 2373175408050990018ull,
+ 3345054270084049972ull, 6094790863235890799ull}},
+{{5124943204869868339ull, 2966469260063737523ull,
+ 18016375892887226177ull, 7618488579044863498ull}},
+{{897246493829973760ull, 13383258333608305712ull,
+ 15871920951481904264ull, 4761555361903039686ull}},
+{{1121558117287467200ull, 16729072917010382140ull,
+ 10616529152497604522ull, 5951944202378799608ull}},
+{{1401947646609334000ull, 11687969109408201867ull,
+ 13270661440622005653ull, 7439930252973499510ull}},
+{{17017118343626691414ull, 9610823702593820118ull,
+ 3682477381961365629ull, 4649956408108437194ull}},
+{{12048025892678588460ull, 16625215646669663052ull,
+ 13826468764306482844ull, 5812445510135546492ull}},
+{{15060032365848235574ull, 2334775484627527199ull,
+ 17283085955383103556ull, 7265556887669433115ull}},
+{{14213354438882906564ull, 2918469355784408999ull,
+ 16992171425801491541ull, 9081946109586791394ull}},
+{{15800875551942898459ull, 4129886356578949576ull,
+ 15231793159553320117ull, 5676216318491744621ull}},
+{{1304350366219071457ull, 9774043964151074875ull,
+ 5204683394159486434ull, 7095270398114680777ull}},
+{{15465496013056003033ull, 2994182918334067785ull,
+ 11117540261126745947ull, 8869087997643350971ull}},
+{{2748405980518920040ull, 18012265388454650030ull,
+ 4642619653990522264ull, 5543179998527094357ull}},
+{{12658879512503425858ull, 4068587661858760921ull,
+ 10414960585915540735ull, 6928974998158867946ull}},
+{{1988541335347118610ull, 474048558896063248ull, 3795328695539650111ull,
+ 8661218747698584933ull}},
+{{1242838334591949132ull, 7213809376951121386ull,
+ 4677923443925975271ull, 5413261717311615583ull}},
+{{10776919955094712222ull, 4405575702761513828ull,
+ 1235718286480081185ull, 6766577146639519479ull}},
+{{13471149943868390278ull, 10118655646879280189ull,
+ 15379705913382265193ull, 8458221433299399348ull}},
+{{10725311724131437876ull, 17853374825368019878ull,
+ 388944159009139937ull, 5286388395812124593ull}},
+{{4183267618309521537ull, 8481660476427861136ull,
+ 5097866217188812826ull, 6607985494765155741ull}},
+{{5229084522886901921ull, 1378703558680050612ull,
+ 10984018789913403937ull, 8259981868456444676ull}},
+{{12491549863659089509ull, 12390904770243501392ull,
+ 16088383780550653268ull, 5162488667785277922ull}},
+{{15614437329573861886ull, 15488630962804376740ull,
+ 10887107688833540777ull, 6453110834731597403ull}},
+{{1071302588257775741ull, 5525730648223307214ull,
+ 8997198592614538068ull, 8066388543414496754ull}},
+{{14504622172943273550ull, 12676953691994342816ull,
+ 10234935138811474196ull, 5041492839634060471ull}},
+{{18130777716179091938ull, 15846192114992928520ull,
+ 8181982905086954841ull, 6301866049542575589ull}},
+{{4216728071514313306ull, 5972682088458996939ull,
+ 14839164649786081456ull, 7877332561928219486ull}},
+{{329612035482751864ull, 3732926305286873087ull, 4662791887688913006ull,
+ 4923332851205137179ull}},
+{{14247073099635603542ull, 13889529918463367166ull,
+ 1216803841183753353ull, 6154166064006421474ull}},
+{{8585469337689728620ull, 3526854342797045246ull,
+ 10744376838334467500ull, 7692707580008026842ull}},
+{{754232317628692484ull, 11427656001102929087ull,
+ 11326921542386430091ull, 4807942237505016776ull}},
+{{14777848452318029316ull, 9672883982951273454ull,
+ 14158651927983037614ull, 6009927796881270970ull}},
+{{9248938528542760837ull, 2867732941834316010ull,
+ 8474942873124021210ull, 7512409746101588713ull}},
+{{10392272598766613428ull, 6404019107073835410ull,
+ 16826054341770983016ull, 4695256091313492945ull}},
+{{3766968711603490976ull, 8005023883842294263ull,
+ 7197509871931565058ull, 5869070114141866182ull}},
+{{97024871076975816ull, 782907817948092021ull, 18220259376769232131ull,
+ 7336337642677332727ull}},
+{{4732967107273607674ull, 14813692827717278738ull,
+ 18163638202534152259ull, 9170422053346665909ull}},
+{{7569790460473392701ull, 6952715008109605259ull,
+ 13658116885797539114ull, 5731513783341666193ull}},
+{{4850552057164352972ull, 17914265796991782382ull,
+ 3237588051964760180ull, 7164392229177082742ull}},
+{{15286562108310217022ull, 3946088172530176361ull,
+ 13270357101810726034ull, 8955490286471353427ull}},
+{{2636572290052803783ull, 7077991126258748130ull,
+ 5988130179418009819ull, 5597181429044595892ull}},
+{{12519087399420780537ull, 4235802889396047258ull,
+ 7485162724272512274ull, 6996476786305744865ull}},
+{{6425487212421199863ull, 14518125648599834881ull,
+ 13968139423768028246ull, 8745595982882181081ull}},
+{{15545144553831719674ull, 4462142511947508896ull,
+ 1812558112213935798ull, 5465997489301363176ull}},
+{{984686618580097977ull, 14801050176789161929ull,
+ 2265697640267419747ull, 6832496861626703970ull}},
+{{5842544291652510375ull, 13889626702559064507ull,
+ 12055494087189050492ull, 8540621077033379962ull}},
+{{1345747173069125033ull, 17904388725954191125ull,
+ 12146369822920544461ull, 5337888173145862476ull}},
+{{6293869984763794195ull, 8545427852160575194ull,
+ 15182962278650680577ull, 6672360216432328095ull}},
+{{17090709517809518551ull, 15293470833628106896ull,
+ 14367016829885962817ull, 8340450270540410119ull}},
+{{10681693448630949095ull, 2640890243376484954ull,
+ 15896914546319808617ull, 5212781419087756324ull}},
+{{4128744773933910560ull, 7912798822647994097ull,
+ 1424399109190209155ull, 6515976773859695406ull}},
+{{9772616985844776104ull, 5279312509882604717ull,
+ 11003870923342537252ull, 8144970967324619257ull}},
+{{8413728625366679017ull, 12522942355531403756ull,
+ 18406634373157555542ull, 5090606854577887035ull}},
+{{10517160781708348771ull, 6430305907559478887ull,
+ 18396606948019556524ull, 6363258568222358794ull}},
+{{8534764958708048060ull, 8037882384449348609ull,
+ 13772386648169669847ull, 7954073210277948493ull}},
+{{16863443145260999798ull, 11941205517921924736ull,
+ 10913584664319737606ull, 4971295756423717808ull}},
+{{2632559857866698131ull, 5703134860547630113ull,
+ 13641980830399672008ull, 6214119695529647260ull}},
+{{7902385840760760568ull, 7128918575684537641ull,
+ 17052476037999590010ull, 7767649619412059075ull}},
+{{16468206196543945115ull, 9067260128230223929ull,
+ 8351954514536049804ull, 4854781012132536922ull}},
+{{6750199690397767682ull, 11334075160287779912ull,
+ 1216571106315286447ull, 6068476265165671153ull}},
+{{8437749612997209602ull, 9555907931932336986ull,
+ 6132399901321495963ull, 7585595331457088941ull}},
+{{9885279526550643905ull, 3666599448244016664ull,
+ 6138592947539628929ull, 4740997082160680588ull}},
+{{12356599408188304882ull, 9194935328732408734ull,
+ 7673241184424536161ull, 5926246352700850735ull}},
+{{6222377223380605294ull, 16105355179342898822ull,
+ 4979865462103282297ull, 7407807940876063419ull}},
+{{17724043819895042021ull, 3148317959448229907ull,
+ 806572904600857484ull, 4629879963047539637ull}},
+{{17543368756441414622ull, 3935397449310287384ull,
+ 5619902149178459759ull, 5787349953809424546ull}},
+{{3482466871842216661ull, 307560793210471327ull,
+ 16248249723327850507ull, 7234187442261780682ull}},
+{{18188141645084934539ull, 14219509046795252870ull,
+ 11086940117305037325ull, 9042734302827225853ull}},
+{{6755902509750696183ull, 11193036163460726996ull,
+ 9235180582529342280ull, 5651708939267016158ull}},
+{{8444878137188370228ull, 13991295204325908745ull,
+ 2320603691306902042ull, 7064636174083770198ull}},
+{{15167783689912850689ull, 8265746968552610123ull,
+ 12124126650988403361ull, 8830795217604712747ull}},
+{{7174021796981837729ull, 16695306901413851087ull,
+ 5271736147654058148ull, 5519247011002945467ull}},
+{{4355841227799909257ull, 2422389553057762243ull,
+ 1977984166140184782ull, 6899058763753681834ull}},
+{{833115516322498667ull, 12251358978176978612ull,
+ 11695852244530006785ull, 8623823454692102292ull}},
+{{9744069234556337475ull, 739570333719529776ull,
+ 16533279689686030049ull, 5389889659182563932ull}},
+{{12180086543195421844ull, 5536148935576800124ull,
+ 2219855538397985945ull, 6737362073978204916ull}},
+{{15225108178994277305ull, 11531872187898388059ull,
+ 2774819422997482431ull, 8421702592472756145ull}},
+{{7209849602657729364ull, 14124949145077574393ull,
+ 13263477185441896279ull, 5263564120295472590ull}},
+{{13623998021749549609ull, 13044500412919580087ull,
+ 7355974444947594541ull, 6579455150369340738ull}},
+{{12418311508759549107ull, 2470567460867311397ull,
+ 18418340093039268985ull, 8224318937961675922ull}},
+{{10067287702188412144ull, 13073319709110539383ull,
+ 16123148576576931019ull, 5140199336226047451ull}},
+{{7972423609308127276ull, 11729963617960786325ull,
+ 15542249702293775870ull, 6425249170282559314ull}},
+{{14577215530062546998ull, 5439082485596207098ull,
+ 10204440091012444030ull, 8031561462853199143ull}},
+{{13722445724716479778ull, 17234484608779793148ull,
+ 13295304084523859374ull, 5019725914283249464ull}},
+{{17153057155895599723ull, 12319733724119965627ull,
+ 16619130105654824218ull, 6274657392854061830ull}},
+{{16829635426442111749ull, 6176295118295181226ull,
+ 11550540595213754465ull, 7843321741067577288ull}},
+{{15130208159953707747ull, 15389399495002958026ull,
+ 7219087872008596540ull, 4902076088167235805ull}},
+{{9689388163087358876ull, 790005295044145917ull,
+ 13635545858438133580ull, 6127595110209044756ull}},
+{{16723421222286586499ull, 987506618805182396ull,
+ 17044432323047666975ull, 7659493887761305945ull}},
+{{1228766227074340754ull, 7534720664394320854ull,
+ 3735241174263710003ull, 4787183679850816216ull}},
+{{10759329820697701750ull, 4806714812065513163ull,
+ 4669051467829637504ull, 5983979599813520270ull}},
+{{8837476257444739284ull, 6008393515081891454ull,
+ 15059686371641822688ull, 7479974499766900337ull}},
+{{911736642475574149ull, 3755245946926182159ull, 2494774954635057324ull,
+ 4674984062354312711ull}},
+{{14974728858376631398ull, 4694057433657727698ull,
+ 16953526748575985367ull, 5843730077942890888ull}},
+{{9495039036116013439ull, 1255885773644771719ull,
+ 2745164362010430093ull, 7304662597428613611ull}},
+{{7257112776717628895ull, 6181543235483352553ull,
+ 17266513507795201328ull, 9130828246785767013ull}},
+{{16064910531516987819ull, 3863464522177095345ull,
+ 13097413951585694782ull, 5706767654241104383ull}},
+{{6246080109114071062ull, 14052702689576144990ull,
+ 11760081421054730573ull, 7133459567801380479ull}},
+{{17030972173247364635ull, 3730820306688017525ull,
+ 10088415757891025313ull, 8916824459751725599ull}},
+{{12950200617493296849ull, 13860977737748480713ull,
+ 13222788876322972676ull, 5573015287344828499ull}},
+{{2352692716584457350ull, 17326222172185600892ull,
+ 11916800076976327941ull, 6966269109181035624ull}},
+{{2940865895730571687ull, 7822719659949837403ull,
+ 14896000096220409927ull, 8707836386476294530ull}},
+{{17978942249327464968ull, 11806728815109730232ull,
+ 13921686078565144108ull, 5442397741547684081ull}},
+{{4026933737949779594ull, 14758411018887162791ull,
+ 3567049542924266423ull, 6802997176934605102ull}},
+{{421981154009836589ull, 13836327755181565585ull,
+ 13682183965510108837ull, 8503746471168256377ull}},
+{{11792953267324617628ull, 10953547856202172442ull,
+ 1633835950802736167ull, 5314841544480160236ull}},
+{{5517819547300996227ull, 9080248801825327649ull,
+ 2042294938503420209ull, 6643551930600200295ull}},
+{{11508960452553633188ull, 15961997020709047465ull,
+ 16387926728411438973ull, 8304439913250250368ull}},
+{{275571255204938887ull, 12282091147156848618ull,
+ 10242454205257149358ull, 5190274945781406480ull}},
+{{9567836105860949416ull, 6129241897091284964ull,
+ 12803067756571436698ull, 6487843682226758100ull}},
+{{11959795132326186770ull, 16884924408218882013ull,
+ 16003834695714295872ull, 8109804602783447625ull}},
+{{9780714966917560683ull, 10553077755136801258ull,
+ 3084867657180353064ull, 5068627876739654766ull}},
+{{3002521671792175046ull, 13191347193921001573ull,
+ 13079456608330217138ull, 6335784845924568457ull}},
+{{8364838108167606712ull, 7265811955546476158ull,
+ 2514262705130607711ull, 7919731057405710572ull}},
+{{616337799177366291ull, 11458661499857629455ull,
+ 10794786227561405627ull, 4949831910878569107ull}},
+{{14605480304253871576ull, 9711640856394648914ull,
+ 8881796766024369130ull, 6187289888598211384ull}},
+{{9033478343462563661ull, 2916179033638535335ull,
+ 11102245957530461413ull, 7734112360747764230ull}},
+{{12563452992305184145ull, 4128454905237778536ull,
+ 2327217705029150479ull, 4833820225467352644ull}},
+{{15704316240381480181ull, 548882613119835266ull,
+ 2909022131286438099ull, 6042275281834190805ull}},
+{{10407023263622074418ull, 14521161321681957795ull,
+ 8247963682535435527ull, 7552844102292738506ull}},
+{{4198546530550102559ull, 15993254853692305478ull,
+ 9766663320012035108ull, 4720527563932961566ull}},
+{{14471555200042404007ull, 1544824493405830231ull,
+ 2984957113160268078ull, 5900659454916201958ull}},
+{{13477757981625617104ull, 11154402653612063597ull,
+ 12954568428305110905ull, 7375824318645252447ull}},
+{{3012139421749857668ull, 107945261732915785ull,
+ 11581524516954000728ull, 9219780398306565559ull}},
+{{13411802184662130803ull, 67465788583072365ull,
+ 14155981850737332311ull, 5762362748941603474ull}},
+{{2929694675545499791ull, 13919390291011004169ull,
+ 8471605276566889580ull, 7202953436177004343ull}},
+{{8273804362859262643ull, 17399237863763755211ull,
+ 5977820577281224071ull, 9003691795221255429ull}},
+{{2865284717573345200ull, 17792052692493428863ull,
+ 6041980870014458996ull, 5627307372013284643ull}},
+{{17416663952248845212ull, 3793321791907234462ull,
+ 2940790069090685842ull, 7034134215016605804ull}},
+{{12547457903456280707ull, 13965024276738818886ull,
+ 3675987586363357302ull, 8792667768770757255ull}},
+{{3230475171232787538ull, 4116454154534373900ull,
+ 9215021269118180170ull, 5495417355481723284ull}},
+{{4038093964040984422ull, 14368939730022743183ull,
+ 11518776586397725212ull, 6869271694352154105ull}},
+{{435931436623842624ull, 17961174662528428979ull, 563412677714992803ull,
+ 8586589617940192632ull}},
+{{16413358212385759304ull, 8919891154866574159ull,
+ 352132923571870502ull, 5366618511212620395ull}},
+{{15905011747054811226ull, 1926491906728441891ull,
+ 14275224209747001840ull, 6708273139015775493ull}},
+{{15269578665391126128ull, 2408114883410552364ull,
+ 4008972206901588588ull, 8385341423769719367ull}},
+{{320114629014678022ull, 10728443838986371036ull,
+ 9423136656954574723ull, 5240838389856074604ull}},
+{{400143286268347528ull, 8798868780305575891ull,
+ 11778920821193218404ull, 6551047987320093255ull}},
+{{14335237163117598122ull, 10998585975381969863ull,
+ 10111965008064135101ull, 8188809984150116569ull}},
+{{15877052254589580682ull, 9179959243827425116ull,
+ 17849193176108554198ull, 5118006240093822855ull}},
+{{1399571244527424237ull, 2251577017929505588ull,
+ 17699805451708304844ull, 6397507800117278569ull}},
+{{1749464055659280296ull, 2814471272411881985ull,
+ 8289698759353217343ull, 7996884750146598212ull}},
+{{12622630080855519945ull, 8676573572898508096ull,
+ 14404433761450536647ull, 4998052968841623882ull}},
+{{15778287601069399931ull, 6234030947695747216ull,
+ 8782170164958395001ull, 6247566211052029853ull}},
+{{1276115427627198298ull, 12404224703047071925ull,
+ 15589398724625381655ull, 7809457763815037316ull}},
+{{3103415151480692888ull, 14670169467045501809ull,
+ 520002166036087726ull, 4880911102384398323ull}},
+{{8490954957778254014ull, 9114339796952101453ull,
+ 14485060762827273370ull, 6101138877980497903ull}},
+{{15225379715650205422ull, 2169552709335351008ull,
+ 13494639935106703809ull, 7626423597475622379ull}},
+{{9515862322281378389ull, 12885185489403064140ull,
+ 6128306950227995928ull, 4766514748422263987ull}},
+{{11894827902851722986ull, 16106481861753830175ull,
+ 3048697669357607006ull, 5958143435527829984ull}},
+{{10256848860137265828ull, 10909730290337511911ull,
+ 3810872086697008758ull, 7447679294409787480ull}},
+{{13328059565226872999ull, 2206895413033557040ull,
+ 2381795054185630474ull, 4654799559006117175ull}},
+{{16660074456533591248ull, 11981991303146722108ull,
+ 16812301873014201804ull, 5818499448757646468ull}},
+{{2378348996957437444ull, 14977489128933402636ull,
+ 2568633267558200639ull, 7273124310947058086ull}},
+{{2972936246196796805ull, 14110175392739365391ull,
+ 12434163621302526607ull, 9091405388683822607ull}},
+{{8775614181514079860ull, 15736388648103185225ull,
+ 14688881290955160985ull, 5682128367927389129ull}},
+{{15581203745319987728ull, 5835427754846817819ull,
+ 4526043558411787520ull, 7102660459909236412ull}},
+{{14864818663222596756ull, 7294284693558522274ull,
+ 5657554448014734400ull, 8878325574886545515ull}},
+{{13902197682941510877ull, 4558927933474076421ull,
+ 1230128520795515048ull, 5548953484304090947ull}},
+{{3542689048394724884ull, 5698659916842595527ull,
+ 15372718706276557522ull, 6936191855380113683ull}},
+{{18263419365775569817ull, 16346696932908020216ull,
+ 14604212364418308998ull, 8670239819225142104ull}},
+{{11414637103609731136ull, 5604999564640124731ull,
+ 9127632727761443124ull, 5418899887015713815ull}},
+{{9656610361084776016ull, 7006249455800155914ull,
+ 6797854891274416001ull, 6773624858769642269ull}},
+{{2847390914501194211ull, 13369497838177582797ull,
+ 13109004632520407905ull, 8467031073462052836ull}},
+{{4085462330776940334ull, 1438407121219907392ull,
+ 17416499932180030749ull, 5291894420913783022ull}},
+{{5106827913471175418ull, 6409694919952272144ull,
+ 12547252878370262628ull, 6614868026142228778ull}},
+{{6383534891838969272ull, 8012118649940340180ull,
+ 6460694061108052477ull, 8268585032677785973ull}},
+{{13213081344254131603ull, 7313417165426406564ull,
+ 6343776797406226750ull, 5167865645423616233ull}},
+{{16516351680317664504ull, 18365143493637784013ull,
+ 12541407015185171341ull, 6459832056779520291ull}},
+{{6810381545114916918ull, 9121371311765066305ull,
+ 11065072750554076273ull, 8074790070974400364ull}},
+{{15785703511765292834ull, 17230072115921636200ull,
+ 16139042505951073478ull, 5046743794359000227ull}},
+{{1285385315997064426ull, 12314218108047269443ull,
+ 15562117114011453944ull, 6308429742948750284ull}},
+{{15441789700278494244ull, 15392772635059086803ull,
+ 1005902318804765814ull, 7885537178685937856ull}},
+{{7345275553460364951ull, 5008796878484541348ull, 628688949252978634ull,
+ 4928460736678711160ull}},
+{{9181594441825456189ull, 15484368134960452493ull,
+ 785861186566223292ull, 6160575920848388950ull}},
+{{16088679070709208140ull, 908716094991014000ull,
+ 10205698520062554924ull, 7700719901060486187ull}},
+{{10055424419193255087ull, 9791319596224159558ull,
+ 4072718565825402875ull, 4812949938162803867ull}},
+{{3345908487136793051ull, 7627463476852811544ull, 479212188854365690ull,
+ 6016187422703504834ull}},
+{{4182385608920991314ull, 310957309211238622ull, 9822387272922732921ull,
+ 7520234278379381042ull}},
+{{16449049060857783283ull, 11723563364325493898ull,
+ 10750678064004095979ull, 4700146423987113151ull}},
+{{11337939289217453296ull, 10042768186979479469ull,
+ 8826661561577732070ull, 5875183029983891439ull}},
+{{337366056239652908ull, 3330088196869573529ull, 6421640933544777184ull,
+ 7343978787479864299ull}},
+{{5033393588726954039ull, 4162610246086966911ull,
+ 3415365148503583576ull, 9179973484349830374ull}},
+{{10063400020595428130ull, 2601631403804354319ull,
+ 15969661273096903447ull, 5737483427718643983ull}},
+{{7967564007316897259ull, 17087097310037606611ull,
+ 15350390572943741404ull, 7171854284648304979ull}},
+{{5347768990718733670ull, 2912127563837456648ull,
+ 14576302197752288852ull, 8964817855810381224ull}},
+{{3342355619199208544ull, 11043451764253186213ull,
+ 9110188873595180532ull, 5603011159881488265ull}},
+{{8789630542426398583ull, 13804314705316482766ull,
+ 15999422110421363569ull, 7003763949851860331ull}},
+{{1763666141178222421ull, 3420335326363439746ull,
+ 15387591619599316558ull, 8754704937314825414ull}},
+{{5713977356663776917ull, 15972767634259313553ull,
+ 5005558743822184944ull, 5471690585821765884ull}},
+{{11754157714257109051ull, 1519215469114590325ull,
+ 6256948429777731181ull, 6839613232277207355ull}},
+{{857639087539222601ull, 6510705354820625811ull, 3209499518794776072ull,
+ 8549516540346509194ull}},
+{{16676925494207871790ull, 4069190846762891131ull,
+ 6617623217674122949ull, 5343447837716568246ull}},
+{{16234470849332451833ull, 9698174576881001818ull,
+ 17495401058947429494ull, 6679309797145710307ull}},
+{{11069716524810788983ull, 2899346184246476465ull,
+ 17257565305256898964ull, 8349137246432137884ull}},
+{{1043800365661259ull, 11035463402008823599ull, 1562606278930786044ull,
+ 5218210779020086178ull}},
+{{13836362805739240285ull, 13794329252511029498ull,
+ 11176629885518258363ull, 6522763473775107722ull}},
+{{8072081470319274549ull, 12631225547211398969ull,
+ 4747415320043047146ull, 8153454342218884653ull}},
+{{16574265965018016353ull, 12506201985434512259ull,
+ 5272977584240598418ull, 5095908963886802908ull}},
+{{16106146437845132537ull, 6409380444938364516ull,
+ 6591221980300748023ull, 6369886204858503635ull}},
+{{1685938973596864055ull, 3400039537745567742ull,
+ 3627341456948547125ull, 7962357756073129544ull}},
+{{14888769913780203747ull, 4430867720304673790ull,
+ 2267088410592841953ull, 4976473597545705965ull}},
+{{9387590355370478875ull, 10150270668808230142ull,
+ 7445546531668440345ull, 6220591996932132456ull}},
+{{2511115907358322786ull, 17299524354437675582ull,
+ 9306933164585550431ull, 7775739996165165570ull}},
+{{15404505497381115454ull, 17729731749164629094ull,
+ 10428519246293356923ull, 4859837497603228481ull}},
+{{10032259834871618509ull, 17550478668028398464ull,
+ 17647335076294084058ull, 6074796872004035601ull}},
+{{12540324793589523136ull, 12714726298180722272ull,
+ 8224110790085441361ull, 7593496090005044502ull}},
+{{7837702995993451960ull, 1029174908721869564ull, 528383225376012947ull,
+ 4745935056253152814ull}},
+{{9797128744991814950ull, 15121526691184500667ull,
+ 9883851068574791991ull, 5932418820316441017ull}},
+{{7634724912812380783ull, 14290222345553237930ull,
+ 16966499854145877893ull, 7415523525395551271ull}},
+{{9383389088935125894ull, 11237231975184467658ull,
+ 17521591436482255539ull, 4634702203372219544ull}},
+{{2505864324314131559ull, 9434853950553196669ull,
+ 3455245221893267808ull, 5793377754215274431ull}},
+{{7744016423820052353ull, 11793567438191495836ull,
+ 18154114582648748472ull, 7241722192769093038ull}},
+{{9680020529775065441ull, 14741959297739369795ull,
+ 13469271191456159782ull, 9052152740961366298ull}},
+{{3744169821895721949ull, 4602038542659718218ull,
+ 13029980513087487768ull, 5657595463100853936ull}},
+{{13903584314224428244ull, 5752548178324647772ull,
+ 16287475641359359710ull, 7071994328876067420ull}},
+{{17379480392780535305ull, 16414057259760585523ull,
+ 1912600477989648021ull, 8839992911095084276ull}},
+{{8556332236274140614ull, 12564628796564059904ull,
+ 10418747335598305821ull, 5524995569434427672ull}},
+{{10695415295342675767ull, 1870727940422911168ull,
+ 13023434169497882277ull, 6906244461793034590ull}},
+{{13369269119178344708ull, 6950095943956026864ull,
+ 7055920675017577038ull, 8632805577241293238ull}},
+{{8355793199486465443ull, 18178868020254680502ull,
+ 18245008477168149360ull, 5395503485775808273ull}},
+{{1221369462503305996ull, 4276840951608799012ull,
+ 8971202541178022989ull, 6744379357219760342ull}},
+{{1526711828129132494ull, 9957737207938386669ull,
+ 1990631139617752928ull, 8430474196524700428ull}},
+{{3260037901794401761ull, 6223585754961491668ull,
+ 10467516499115871388ull, 5269046372827937767ull}},
+{{4075047377243002201ull, 7779482193701864585ull,
+ 8472709605467451331ull, 6586307966034922209ull}},
+{{9705495239981140656ull, 5112666723699942827ull,
+ 15202573025261702068ull, 8232884957543652761ull}},
+{{3760091515774518958ull, 12418788739167240075ull,
+ 2584079113147481936ull, 5145553098464782976ull}},
+{{88428376290760793ull, 15523485923959050094ull, 3230098891434352420ull,
+ 6431941373080978720ull}},
+{{9333907507218226799ull, 957613331239261001ull, 4037623614292940526ull,
+ 8039926716351223400ull}},
+{{17362907238079861510ull, 14433566387306701837ull,
+ 2523514758933087828ull, 5024954197719514625ull}},
+{{7868575992317663175ull, 18041957984133377297ull,
+ 7766079467093747689ull, 6281192747149393281ull}},
+{{14447406008824466873ull, 8717389424884557909ull,
+ 14319285352294572516ull, 7851490933936741601ull}},
+{{11335471764728985748ull, 14671740427407624501ull,
+ 2032024317543025966ull, 4907181833710463501ull}},
+{{334281650629068472ull, 9116303497404754819ull, 7151716415356170362ull,
+ 6133977292138079376ull}},
+{{14252910118568499302ull, 2172007334901167715ull,
+ 8939645519195212953ull, 7667471615172599220ull}},
+{{6602225814891618112ull, 12886719630381699582ull,
+ 14810650486351783903ull, 4792169759482874512ull}},
+{{17476154305469298448ull, 11496713519549736573ull,
+ 66569034230178263ull, 5990212199353593141ull}},
+{{8010134826554459348ull, 9759205881009782813ull,
+ 4694897311215110733ull, 7487765249191991426ull}},
+{{7312177275810231045ull, 8405346684844808210ull,
+ 7545996837936832112ull, 4679853280744994641ull}},
+{{18363593631617564614ull, 10506683356056010262ull,
+ 14044182065848428044ull, 5849816600931243301ull}},
+{{13731120002667179959ull, 13133354195070012828ull,
+ 3720169527028371343ull, 7312270751164054127ull}},
+{{17163900003333974949ull, 11805006725410128131ull,
+ 38525890358076275ull, 9140338438955067659ull}},
+{{8421594492870040391ull, 5072286194167636130ull,
+ 16164979745969655336ull, 5712711524346917286ull}},
+{{1303621079232774681ull, 6340357742709545163ull,
+ 10982852645607293362ull, 7140889405433646608ull}},
+{{15464584404323132063ull, 17148819215241707261ull,
+ 13728565807009116702ull, 8926111756792058260ull}},
+{{11971208261915651492ull, 6106325991098679134ull,
+ 17803725666235473747ull, 5578819847995036412ull}},
+{{5740638290539788556ull, 3021221470445961014ull,
+ 3807913009084790568ull, 6973524809993795516ull}},
+{{16399169900029511503ull, 3776526838057451267ull,
+ 4759891261355988210ull, 8716906012492244395ull}},
+{{7943638178304750738ull, 6972015292213294946ull, 669089029133798679ull,
+ 5448066257807652747ull}},
+{{706175686026162614ull, 4103333096839230779ull,
+ 14671419341699412061ull, 6810082822259565933ull}},
+{{14717777662814866979ull, 9740852389476426377ull,
+ 4504216121842101364ull, 8512603527824457417ull}},
+{{2281082011618210006ull, 15311404780277542294ull,
+ 14344350122219783112ull, 5320377204890285885ull}},
+{{12074724551377538316ull, 692511901637376251ull,
+ 4095379597492565179ull, 6650471506112857357ull}},
+{{10481719670794534991ull, 14700697932328884026ull,
+ 9730910515293094377ull, 8313089382641071696ull}},
+{{11162760812673972273ull, 2270407180064470660ull,
+ 6081819072058183986ull, 5195680864150669810ull}},
+{{13953451015842465341ull, 12061381011935364133ull,
+ 16825645876927505790ull, 6494601080188337262ull}},
+{{3606755714520917965ull, 5853354228064429359ull,
+ 11808685309304606430ull, 8118251350235421578ull}},
+{{9171751349216655584ull, 17493404447822432061ull,
+ 11992114336742766922ull, 5073907093897138486ull}},
+{{16076375204948207384ull, 12643383522923264268ull,
+ 5766770884073682845ull, 6342383867371423108ull}},
+{{1648724932475707614ull, 1969171348371916624ull,
+ 7208463605092103557ull, 7927979834214278885ull}},
+{{1030453082797317259ull, 3536575101946141842ull,
+ 6811132762396258675ull, 4954987396383924303ull}},
+{{10511438390351422382ull, 18255776932714841014ull,
+ 3902229934567935439ull, 6193734245479905379ull}},
+{{3915925951084502169ull, 18208035147466163364ull,
+ 266101399782531395ull, 7742167806849881724ull}},
+{{11670825756282589664ull, 9074178957952658150ull,
+ 9389685411718857930ull, 4838854879281176077ull}},
+{{5365160158498461271ull, 2119351660586046880ull,
+ 16348792783075960317ull, 6048568599101470096ull}},
+{{6706450198123076589ull, 7260875594159946504ull,
+ 1989246905135398780ull, 7560710748876837621ull}},
+{{4191531373826922868ull, 13761419283204742373ull,
+ 3549122324923318189ull, 4725444218048023513ull}},
+{{9851100235711041489ull, 3366716048723764254ull,
+ 9048088924581535641ull, 5906805272560029391ull}},
+{{3090503257784026054ull, 8820081079332093222ull,
+ 6698425137299531647ull, 7383506590700036739ull}},
+{{15766622591397179996ull, 12430079702223640119ull,
+ 1880672701598513327ull, 4614691619187522962ull}},
+{{15096592220819087091ull, 10925913609352162245ull,
+ 11574212913852917467ull, 5768364523984403702ull}},
+{{5035682220741695151ull, 9045705993262814903ull,
+ 5244394105461371026ull, 7210455654980504628ull}},
+{{1682916757499731035ull, 2083760454723742821ull,
+ 6555492631826713783ull, 9013069568725630785ull}},
+{{3357665982651025849ull, 8219879311843421119ull,
+ 15626397940960165874ull, 5633168480453519240ull}},
+{{18032140533595946023ull, 1051477102949500590ull,
+ 1086253352490655727ull, 7041460600566899051ull}},
+{{13316803630140156721ull, 15149404433969039450ull,
+ 15192874745895483370ull, 8801825750708623813ull}},
+{{12934688287264985855ull, 14080063789658037560ull,
+ 11801389725398371058ull, 5501141094192889883ull}},
+{{16168360359081232318ull, 8376707700217771142ull,
+ 10140051138320575919ull, 6876426367741112354ull}},
+{{10987078411996764589ull, 5859198606844826024ull,
+ 3451691886045944091ull, 8595532959676390443ull}},
+{{6866924007497977869ull, 1356156120064322313ull,
+ 18298208493274572721ull, 5372208099797744026ull}},
+{{13195341027799860240ull, 6306881168507790795ull,
+ 13649388579738440093ull, 6715260124747180033ull}},
+{{11882490266322437395ull, 12495287479062126398ull,
+ 3226677669390886404ull, 8394075155933975042ull}},
+{{2814870398024135468ull, 17032926711268604807ull,
+ 6628359561796691906ull, 5246296972458734401ull}},
+{{17353646052812333047ull, 12067786352230980200ull,
+ 12897135470673252787ull, 6557871215573418001ull}},
+{{3245313492305864693ull, 10473046921861337347ull,
+ 2286361283059402272ull, 8197339019466772502ull}},
+{{18169221997187023097ull, 6545654326163335841ull,
+ 15264033857194290132ull, 5123336887166732813ull}},
+{{8876469441201615159ull, 8182067907704169802ull,
+ 5244984266210698953ull, 6404171108958416017ull}},
+{{1872214764647243141ull, 14839270903057600157ull,
+ 11167916351190761595ull, 8005213886198020021ull}},
+{{3475977237118220915ull, 6968701305197306146ull,
+ 9285790728707919949ull, 5003258678873762513ull}},
+{{13568343583252551952ull, 13322562649924020586ull,
+ 16218924429312287840ull, 6254073348592203141ull}},
+{{7737057442210914132ull, 16653203312405025733ull,
+ 6438597481358196088ull, 7817591685740253927ull}},
+{{7141503910595515285ull, 10408252070253141083ull,
+ 10941652453489954411ull, 4885994803587658704ull}},
+{{4315193869817006202ull, 8398629069389038450ull,
+ 13677065566862443014ull, 6107493504484573380ull}},
+{{14617364374126033560ull, 1274914299881522254ull,
+ 17096331958578053768ull, 7634366880605716725ull}},
+{{4524166715401383071ull, 796821437425951409ull,
+ 12991050483324977557ull, 4771479300378572953ull}},
+{{10266894412679116743ull, 5607712815209827165ull,
+ 2403755048874058234ull, 5964349125473216192ull}},
+{{17445304034276283833ull, 16233013055867059764ull,
+ 3004693811092572792ull, 7455436406841520240ull}},
+{{1679942984567901588ull, 10145633159916912353ull,
+ 1877933631932857995ull, 4659647754275950150ull}},
+{{6711614749137264888ull, 8070355431468752537ull,
+ 11570789076770848302ull, 5824559692844937687ull}},
+{{13001204454848969014ull, 864572252481164863ull,
+ 9851800327536172474ull, 7280699616056172109ull}},
+{{11639819550133823364ull, 10304087352456231887ull,
+ 16926436427847603496ull, 9100874520070215136ull}},
+{{14192416246474721458ull, 6440054595285144929ull,
+ 10579022767404752185ull, 5688046575043884460ull}},
+{{3905462252811238111ull, 12661754262533819066ull,
+ 13223778459255940231ull, 7110058218804855575ull}},
+{{14105199852868823447ull, 11215506809739885928ull,
+ 11918037055642537385ull, 8887572773506069469ull}},
+{{8815749908043014654ull, 92162728446346849ull, 9754616168990279818ull,
+ 5554732983441293418ull}},
+{{15631373403481156222ull, 9338575447412709369ull,
+ 2969898174383073964ull, 6943416229301616773ull}},
+{{5704158699069281565ull, 11673219309265886712ull,
+ 8324058736406230359ull, 8679270286627020966ull}},
+{{3565099186918300978ull, 14213291095932261051ull,
+ 590850691826506070ull, 5424543929141888104ull}},
+{{18291432038930039935ull, 8543241833060550505ull,
+ 738563364783132588ull, 6780679911427360130ull}},
+{{9029231993380386206ull, 10679052291325688132ull,
+ 10146576242833691543ull, 8475849889284200162ull}},
+{{14866642032717517187ull, 13591936709719636938ull,
+ 10953296170198445118ull, 5297406180802625101ull}},
+{{9359930504042120676ull, 7766548850294770365ull,
+ 18303306231175444302ull, 6621757726003281376ull}},
+{{16311599148480038749ull, 484814026013687148ull,
+ 4432388715259753762ull, 8277197157504101721ull}},
+{{971377430945248410ull, 4914694784685942372ull,
+ 14299457993105815861ull, 5173248223440063575ull}},
+{{1214221788681560513ull, 10755054499284815869ull,
+ 13262636472954881922ull, 6466560279300079469ull}},
+{{6129463254279338545ull, 4220446087251244028ull,
+ 2743237535911438691ull, 8083200349125099337ull}},
+{{13054286570779362399ull, 331935795318333565ull,
+ 13243738506013118942ull, 5052000218203187085ull}},
+{{2482800158192039286ull, 9638291781002692765ull,
+ 2719615077234234965ull, 6315000272753983857ull}},
+{{7715186216167437011ull, 16659550744680753860ull,
+ 8011204864970181610ull, 7893750340942479821ull}},
+{{14045363421959423940ull, 15023905233852859066ull,
+ 7312846049820057458ull, 4933593963089049888ull}},
+{{8333332240594504117ull, 9556509505461298025ull,
+ 9141057562275071823ull, 6166992453861312360ull}},
+{{15028351319170518051ull, 7333950863399234627ull,
+ 11426321952843839779ull, 7708740567326640450ull}},
+{{7086876565267879830ull, 2277876280410827690ull,
+ 11753137238954787766ull, 4817962854579150281ull}},
+{{18081967743439625595ull, 12070717387368310420ull,
+ 856363493411320995ull, 6022453568223937852ull}},
+{{4155715605589980378ull, 10476710715783000122ull,
+ 1070454366764151244ull, 7528066960279922315ull}},
+{{7209008271921125640ull, 15771316234219150884ull,
+ 16809935043723452191ull, 4705041850174951446ull}},
+{{9011260339901407050ull, 15102459274346550701ull,
+ 11789046767799539431ull, 5881302312718689308ull}},
+{{15875761443304146717ull, 14266388074505800472ull,
+ 14736308459749424289ull, 7351627890898361635ull}},
+{{1397957730420631780ull, 3997927037850086879ull,
+ 13808699556259392458ull, 9189534863622952044ull}},
+{{7791252609153976718ull, 7110390417083692203ull,
+ 17853809259516896094ull, 5743459289764345027ull}},
+{{5127379743015082994ull, 18111360058209391062ull,
+ 17705575555968732213ull, 7179324112205431284ull}},
+{{15632596715623629550ull, 8804142017479575115ull,
+ 3685225371251363651ull, 8974155140256789106ull}},
+{{7464529938051074517ull, 3196745751711040495ull,
+ 6914951875459490186ull, 5608846962660493191ull}},
+{{4718976404136455242ull, 13219304226493576427ull,
+ 4032003825896974828ull, 7011058703325616489ull}},
+{{1287034486743181149ull, 16524130283116970534ull,
+ 9651690800798606439ull, 8763823379157020611ull}},
+{{14639454609496651930ull, 17245110454589188439ull,
+ 3726463741285435072ull, 5477389611973137882ull}},
+{{13687632243443427009ull, 3109643994526933933ull,
+ 13881451713461569649ull, 6846737014966422352ull}},
+{{3274482249022120049ull, 8498741011586055321ull,
+ 17351814641826962061ull, 8558421268708027940ull}},
+{{13575766451707294791ull, 7617556141454978527ull,
+ 1621512114287075480ull, 5349013292942517463ull}},
+{{12358022046206730584ull, 9521945176818723159ull,
+ 15861948198141008062ull, 6686266616178146828ull}},
+{{10835841539331025326ull, 2679059434168628141ull,
+ 1380691173966708462ull, 8357833270222683536ull}},
+{{9078243971295584781ull, 15509470201637556300ull,
+ 862931983729192788ull, 5223645793889177210ull}},
+{{11347804964119480976ull, 940093678337393759ull,
+ 10302037016516266794ull, 6529557242361471512ull}},
+{{9573070186721963316ull, 10398489134776518007ull,
+ 12877546270645333492ull, 8161946552951839390ull}},
+{{12900697894342308929ull, 15722427746090099562ull,
+ 3436780400725945528ull, 5101216595594899619ull}},
+{{6902500331073110353ull, 1206290608903072837ull,
+ 18131033556189595623ull, 6376520744493624523ull}},
+{{13239811432268775845ull, 15342921316411004758ull,
+ 18052105926809606624ull, 7970650930617030654ull}},
+{{3663196126740596999ull, 9589325822756877974ull,
+ 6670880185828616236ull, 4981656831635644159ull}},
+{{13802367195280522057ull, 11986657278446097467ull,
+ 3726914213858382391ull, 6227071039544555199ull}},
+{{12641272975673264667ull, 10371635579630233930ull,
+ 46956748895590085ull, 7783838799430693999ull}},
+{{12512481628223178321ull, 8788115246482590158ull,
+ 6946876995700825659ull, 4864899249644183749ull}},
+{{6417229998424197093ull, 6373458039675849794ull,
+ 13295282263053419978ull, 6081124062055229686ull}},
+{{17244909534885022174ull, 17190194586449588050ull,
+ 7395730791961999164ull, 7601405077569037108ull}},
+{{15389754477730526763ull, 1520499579676216723ull,
+ 13845703781831025286ull, 4750878173480648192ull}},
+{{14625507078735770550ull, 11123996511450046712ull,
+ 17307129727288781607ull, 5938597716850810240ull}},
+{{18281883848419713187ull, 9293309620885170486ull,
+ 3187168085401425393ull, 7423247146063512801ull}},
+{{6814491386834932838ull, 17337533559121701314ull,
+ 13521195099444360630ull, 4639529466289695500ull}},
+{{17741486270398441855ull, 12448544912047350834ull,
+ 16901493874305450788ull, 5799411832862119375ull}},
+{{12953485801143276511ull, 15560681140059188543ull,
+ 16515181324454425581ull, 7249264791077649219ull}},
+{{11580171233001707735ull, 5615793369791821967ull,
+ 16032290637140644073ull, 9061580988847061524ull}},
+{{14155136048267149190ull, 15039085902188358489ull,
+ 796809611358126737ull, 5663488118029413453ull}},
+{{3858862005051772776ull, 4963799322453284400ull,
+ 5607698032625046326ull, 7079360147536766816ull}},
+{{4823577506314715970ull, 15428121189921381308ull,
+ 7009622540781307907ull, 8849200184420958520ull}},
+{{12238107978301473289ull, 7336732734487169365ull,
+ 4381014087988317442ull, 5530750115263099075ull}},
+{{1462576917594677900ull, 18394287954963737515ull,
+ 864581591558008898ull, 6913437644078873844ull}},
+{{15663279202275511086ull, 13769487906849896085ull,
+ 1080726989447511123ull, 8641797055098592305ull}},
+{{12095392510635888381ull, 6300086932567491101ull,
+ 12204669414473164212ull, 5401123159436620190ull}},
+{{1284182583012696764ull, 7875108665709363877ull,
+ 6032464731236679457ull, 6751403949295775238ull}},
+{{6216914247193258859ull, 14455571850564092750ull,
+ 16763952950900625129ull, 8439254936619719047ull}},
+{{17720629459777950499ull, 2117203378961476112ull,
+ 17394999621953972562ull, 5274534335387324404ull}},
+{{3704042751012886508ull, 11869876260556620949ull,
+ 3297005453732914086ull, 6593167919234155506ull}},
+{{9241739457193496039ull, 5613973288841000378ull,
+ 13344628854020918416ull, 8241459899042694382ull}},
+{{10387773179173322928ull, 3508733305525625236ull,
+ 3728707015335686106ull, 5150912436901683989ull}},
+{{12984716473966653660ull, 13609288668761807353ull,
+ 9272569787596995536ull, 6438640546127104986ull}},
+{{2395837537176153363ull, 17011610835952259192ull,
+ 2367340197641468612ull, 8048300682658881233ull}},
+{{1497398460735095852ull, 1408884735615386187ull,
+ 13008802669594387643ull, 5030187926661800770ull}},
+{{15706806131201033527ull, 15596163974801396445ull,
+ 7037631300138208745ull, 6287734908327250963ull}},
+{{5798449608719128197ull, 5660146913219581845ull,
+ 4185353106745373028ull, 7859668635409063704ull}},
+{{5929874014663149075ull, 12760963857617014461ull,
+ 2615845691715858142ull, 4912292897130664815ull}},
+{{12024028536756324248ull, 6727832785166492268ull,
+ 17104865169926986390ull, 6140366121413331018ull}},
+{{15030035670945405310ull, 17633163018312891143ull,
+ 12157709425553957179ull, 7675457651766663773ull}},
+{{16311301321981960175ull, 8714883877231863012ull,
+ 9904411400184917189ull, 4797161032354164858ull}},
+{{1942382578767898602ull, 15505290864967216670ull,
+ 3157142213376370678ull, 5996451290442706073ull}},
+{{11651350260314649061ull, 10158241544354245029ull,
+ 8558113785147851252ull, 7495564113053382591ull}},
+{{9587936921910349615ull, 15572273002076178951ull,
+ 12266350143358488888ull, 4684727570658364119ull}},
+{{7373235133960549115ull, 1018597178885672073ull,
+ 10721251660770723207ull, 5855909463322955149ull}},
+{{13828229935878074298ull, 15108304528889253803ull,
+ 18013250594390791912ull, 7319886829153693936ull}},
+{{12673601401420204968ull, 438636587402015638ull,
+ 4069819169278938275ull, 9149858536442117421ull}},
+{{3309314857460240201ull, 16415048931622117438ull,
+ 4849479990013030373ull, 5718661585276323388ull}},
+{{13360015608680076059ull, 6683753109245483085ull,
+ 6061849987516287967ull, 7148326981595404235ull}},
+{{2864961455567931362ull, 3743005368129465953ull,
+ 2965626465967972055ull, 8935408726994255294ull}},
+{{13319815955798426861ull, 9256907382721998076ull,
+ 15688574596512146246ull, 5584630454371409558ull}},
+{{16649769944748033577ull, 2347762191547721787ull,
+ 10387346208785407000ull, 6980788067964261948ull}},
+{{16200526412507654067ull, 2934702739434652234ull,
+ 12984182760981758750ull, 8725985084955327435ull}},
+{{14737015026244671696ull, 15669247267428821358ull,
+ 5809271216399905266ull, 5453740678097079647ull}},
+{{9197896745951063812ull, 10363187047431250890ull,
+ 2649903002072493679ull, 6817175847621349559ull}},
+{{2273998895584053956ull, 8342297790861675709ull,
+ 17147436807872780811ull, 8521469809526686948ull}},
+{{3727092318953727675ull, 2908093110074853366ull,
+ 1493775968065712199ull, 5325918630954179343ull}},
+{{13882237435546935402ull, 17470174442875730419ull,
+ 15702278015364303960ull, 6657398288692724178ull}},
+{{12741110776006281348ull, 3390973979885111408ull,
+ 10404475482350604143ull, 8321747860865905223ull}},
+{{7963194235003925843ull, 9036887765069276486ull,
+ 13420326204110209445ull, 5201092413041190764ull}},
+{{730620756900131495ull, 15907795724763983512ull,
+ 16775407755137761806ull, 6501365516301488455ull}},
+{{913275946125164369ull, 10661372619100203582ull,
+ 16357573675494814354ull, 8126706895376860569ull}},
+{{14405855521610391443ull, 11275043905365015142ull,
+ 3305954519543177115ull, 5079191809610537856ull}},
+{{8783947365158213495ull, 9482118863278881024ull,
+ 4132443149428971394ull, 6348989762013172320ull}},
+{{10979934206447766869ull, 2629276542243825472ull,
+ 5165553936786214243ull, 7936237202516465400ull}},
+{{6862458879029854293ull, 17784198903398248584ull,
+ 3228471210491383901ull, 4960148251572790875ull}},
+{{8578073598787317866ull, 8395190573965647018ull,
+ 17870647068396393589ull, 6200185314465988593ull}},
+{{1499219961629371525ull, 15105674235884446677ull,
+ 8503250780213328274ull, 7750231643082485742ull}},
+{{3242855485232051155ull, 14052732415855167077ull,
+ 702845719205942267ull, 4843894776926553589ull}},
+{{8665255374967451848ull, 12954229501391570942ull,
+ 5490243167434815738ull, 6054868471158191986ull}},
+{{1608197181854539002ull, 6969414839884687870ull,
+ 16086175996148295481ull, 7568585588947739982ull}},
+{{14840181293941250588ull, 15885099320996399678ull,
+ 5442173979165296771ull, 4730365993092337489ull}},
+{{9326854580571787427ull, 15244688132818111694ull,
+ 11414403492384008868ull, 5912957491365421861ull}},
+{{2435196188859958476ull, 609116092313088002ull, 432946310197847374ull,
+ 7391196864206777327ull}},
+{{6133683636464861952ull, 14215755612977843713ull,
+ 7188120471514736464ull, 4619498040129235829ull}},
+{{12278790564008465343ull, 17769694516222304641ull,
+ 13596836607820808484ull, 5774372550161544786ull}},
+{{1513430149728417967ull, 3765374071568329186ull,
+ 7772673722921234798ull, 7217965687701930983ull}},
+{{11115159724015298267ull, 13930089626315187290ull,
+ 5104156135224155593ull, 9022457109627413729ull}},
+{{11558660845936949321ull, 1788776988805910200ull,
+ 14719312630583567006ull, 5639035693517133580ull}},
+{{14448326057421186651ull, 11459343272862163558ull,
+ 18399140788229458757ull, 7048794616896416975ull}},
+{{8837035534921707506ull, 489121035795540736ull,
+ 18387239966859435543ull, 8810993271120521219ull}},
+{{5523147209326067191ull, 7223229675013294816ull,
+ 9186181970073453262ull, 5506870794450325762ull}},
+{{6903934011657583989ull, 18252409130621394328ull,
+ 2259355425737040769ull, 6883588493062907203ull}},
+{{8629917514571979986ull, 8980453357994579198ull,
+ 16659252337453464674ull, 8604485616328634003ull}},
+{{782012428180099587ull, 10224469367173999903ull,
+ 8106189701694721469ull, 5377803510205396252ull}},
+{{14812573590507288196ull, 17392272727394887782ull,
+ 10132737127118401836ull, 6722254387756745315ull}},
+{{9292344951279334437ull, 3293596835534058112ull,
+ 8054235390470614392ull, 8402817984695931644ull}},
+{{5807715594549584023ull, 2058498022208786320ull,
+ 14257269155898909803ull, 5251761240434957277ull}},
+{{7259644493186980029ull, 16408180583043146612ull,
+ 3986528389591473541ull, 6564701550543696597ull}},
+{{9074555616483725036ull, 6675167673521769553ull,
+ 9594846505416729831ull, 8205876938179620746ull}},
+{{17200812306370797908ull, 11089508823592187826ull,
+ 10608465084312844048ull, 5128673086362262966ull}},
+{{12277643346108721577ull, 13861886029490234783ull,
+ 4037209318536279252ull, 6410841357952828708ull}},
+{{10735368164208514067ull, 17327357536862793479ull,
+ 5046511648170349065ull, 8013551697441035885ull}},
+{{13627134130271403148ull, 3912069432898164068ull,
+ 5459912789320162118ull, 5008469810900647428ull}},
+{{17033917662839253935ull, 14113458827977480893ull,
+ 6824890986650202647ull, 6260587263625809285ull}},
+{{7457339023266903706ull, 13030137516544463213ull,
+ 13142799751740141213ull, 7825734079532261606ull}},
+{{6966679898755508769ull, 10449678957053983460ull,
+ 3602563826410200354ull, 4891083799707663504ull}},
+{{8708349873444385961ull, 3838726659462703517ull,
+ 4503204783012750443ull, 6113854749634579380ull}},
+{{15497123360232870355ull, 186722305900991492ull,
+ 5629005978765938054ull, 7642318437043224225ull}},
+{{462330063290768164ull, 13951759496470283395ull,
+ 15047343782797181043ull, 4776449023152015140ull}},
+{{14412970634395623917ull, 12828013352160466339ull,
+ 362435654786924688ull, 5970561278940018926ull}},
+{{13404527274567141992ull, 16035016690200582924ull,
+ 9676416605338431668ull, 7463201598675023657ull}},
+{{17601201583459239553ull, 798513394520588519ull,
+ 17576975424404989553ull, 4664500999171889785ull}},
+{{17389815960896661537ull, 5609827761578123553ull,
+ 8136161225224073229ull, 5830626248964862232ull}},
+{{7902211895838663209ull, 11623970720400042346ull,
+ 10170201531530091536ull, 7288282811206077790ull}},
+{{654392832943553204ull, 14529963400500052933ull,
+ 3489379877557838612ull, 9110353514007597238ull}},
+{{2714838529803414704ull, 18304599162167308891ull,
+ 16015920478755812844ull, 5693970946254748273ull}},
+{{17228606217536432092ull, 4434004878999584497ull,
+ 6184842543162602344ull, 7117463682818435342ull}},
+{{7700699716638376403ull, 5542506098749480622ull,
+ 16954425215808028738ull, 8896829603523044177ull}},
+{{201251304471597348ull, 8075752330145813293ull, 3678986732238936105ull,
+ 5560518502201902611ull}},
+{{4863250149016884589ull, 14706376431109654520ull,
+ 18433791470580833843ull, 6950648127752378263ull}},
+{{6079062686271105736ull, 13771284520459680246ull,
+ 18430553319798654400ull, 8688310159690472829ull}},
+{{17634472234201604797ull, 8607052825287300153ull,
+ 13824938834087852952ull, 5430193849806545518ull}},
+{{8208032237469842285ull, 10758816031609125192ull,
+ 8057801505755040382ull, 6787742312258181898ull}},
+{{10260040296837302856ull, 4225148002656630682ull,
+ 848879845339024670ull, 8484677890322727373ull}},
+{{11024211203950702189ull, 16475775556942557888ull,
+ 2836392912550584370ull, 5302923681451704608ull}},
+{{13780264004938377736ull, 11371347409323421552ull,
+ 3545491140688230463ull, 6628654601814630760ull}},
+{{17225330006172972170ull, 9602498243226889036ull,
+ 4431863925860288079ull, 8285818252268288450ull}},
+{{1542459217003331799ull, 12919090429657887504ull,
+ 7381600972090067953ull, 5178636407667680281ull}},
+{{1928074021254164748ull, 2313804981790195668ull,
+ 13838687233539972846ull, 6473295509584600351ull}},
+{{2410092526567705935ull, 12115628264092520393ull,
+ 12686673023497578153ull, 8091619386980750439ull}},
+{{13035522875173285969ull, 654738637416743389ull,
+ 14846699667327068202ull, 5057262116862969024ull}},
+{{2459345538684443750ull, 10041795333625705045ull,
+ 111630510449283636ull, 6321577646078711281ull}},
+{{7685867941782942591ull, 12552244167032131306ull,
+ 4751224156488992449ull, 7901972057598389101ull}},
+{{9415353482041727024ull, 927623576754000210ull, 5275358107019314233ull,
+ 4938732535998993188ull}},
+{{2545819815697382971ull, 5771215489369888167ull,
+ 6594197633774142791ull, 6173415669998741485ull}},
+{{17017332824903892426ull, 2602333343284972304ull,
+ 12854433060645066393ull, 7716769587498426856ull}},
+{{10635833015564932766ull, 13155673385621577450ull,
+ 8034020662903166495ull, 4822980992186516785ull}},
+{{4071419232601390150ull, 11832905713599583909ull,
+ 14654211847056346023ull, 6028726240233145981ull}},
+{{9700960059179125591ull, 10179446123572091982ull,
+ 4482706753538268817ull, 7535907800291432477ull}},
+{{1451414018559565591ull, 17891368873301027249ull,
+ 5107534730175111962ull, 4709942375182145298ull}},
+{{6425953541626844892ull, 13140839054771508253ull,
+ 15607790449573665761ull, 5887427968977681622ull}},
+{{12644127945460944019ull, 2590990763182221604ull,
+ 10286366025112306394ull, 7359284961222102028ull}},
+{{15805159931826180024ull, 12462110490832552813ull,
+ 12857957531390382992ull, 9199106201527627535ull}},
+{{12184067966605056467ull, 7788819056770345508ull,
+ 14953752484760071226ull, 5749441375954767209ull}},
+{{15230084958256320584ull, 512651784108156077ull,
+ 4857132550667925321ull, 7186801719943459012ull}},
+{{5202548142538237018ull, 5252500748562583001ull,
+ 6071415688334906651ull, 8983502149929323765ull}},
+{{14780807635154867896ull, 976969958637920423ull,
+ 6100477814423010609ull, 5614688843705827353ull}},
+{{13864323525516196966ull, 5832898466724788433ull,
+ 12237283286456151165ull, 7018361054632284191ull}},
+{{3495346351613082496ull, 11902809101833373446ull,
+ 10684918089642801052ull, 8772951318290355239ull}},
+{{16019649525040340272ull, 16662627725500634211ull,
+ 13595602833667832513ull, 5483094573931472024ull}},
+{{15412875887873037436ull, 6993226601593629052ull,
+ 16994503542084790642ull, 6853868217414340030ull}},
+{{819350786131745179ull, 17964905288846812124ull,
+ 12019757390751212494ull, 8567335271767925038ull}},
+{{9735466278187116545ull, 6616379787101869673ull,
+ 2900662350792119905ull, 5354584544854953149ull}},
+{{16781018866161283585ull, 12882160752304724995ull,
+ 8237513956917537785ull, 6693230681068691436ull}},
+{{16364587564274216577ull, 2267642885098742532ull,
+ 10296892446146922232ull, 8366538351335864295ull}},
+{{1004495190816609553ull, 1417276803186714083ull,
+ 13353086806482908251ull, 5229086469584915184ull}},
+{{15090677043802925653ull, 15606654059265556315ull,
+ 16691358508103635313ull, 6536358086981143980ull}},
+{{14251660286326269162ull, 5673259518799781682ull,
+ 2417454061419992526ull, 8170447608726429976ull}},
+{{13518973697381306130ull, 17380845254532027263ull,
+ 1510908788387495328ull, 5106529755454018735ull}},
+{{12287031103299244759ull, 3279312494455482463ull,
+ 15723694040766532873ull, 6383162194317523418ull}},
+{{10747102860696668045ull, 8710826636496740983ull,
+ 10431245514103390283ull, 7978952742896904273ull}},
+{{13634468315576499384ull, 3138423638596769162ull,
+ 18048743492383088687ull, 4986845464310565170ull}},
+{{7819713357615848422ull, 17758087603528125165ull,
+ 13337557328624085050ull, 6233556830388206463ull}},
+{{14386327715447198431ull, 12974237467555380648ull,
+ 12060260642352718409ull, 7791946037985258079ull}},
+{{8991454822154499020ull, 1191369389581031049ull,
+ 14455191929111530862ull, 4869966273740786299ull}},
+{{15851004546120511679ull, 10712583773831064619ull,
+ 13457303892962025673ull, 6087457842175982874ull}},
+{{15202069664223251694ull, 18002415735716218678ull,
+ 7598257829347756283ull, 7609322302719978593ull}},
+{{4889607521712144405ull, 8945666825608942722ull,
+ 16278126189410817437ull, 4755826439199986620ull}},
+{{15335381438994956314ull, 15793769550438566306ull,
+ 1900913663053970180ull, 5944783048999983276ull}},
+{{9945854761888919584ull, 1295467864338656267ull,
+ 2376142078817462726ull, 7430978811249979095ull}},
+{{3910316216966880788ull, 14644725470493823879ull,
+ 8402617826901996059ull, 4644361757031236934ull}},
+{{276209252781213081ull, 13694220819689891945ull,
+ 1279900246772719266ull, 5805452196289046168ull}},
+{{4956947584403904256ull, 7894403987757589123ull,
+ 1599875308465899083ull, 7256815245361307710ull}},
+{{1584498462077492416ull, 5256318966269598500ull,
+ 11223216172437149662ull, 9071019056701634637ull}},
+{{10213683575653208568ull, 17120257409200662774ull,
+ 9320353116986912490ull, 5669386910438521648ull}},
+{{3543732432711734902ull, 12176949724646052660ull,
+ 11650441396233640613ull, 7086733638048152060ull}},
+{{4429665540889668627ull, 1386129100525402113ull,
+ 14563051745292050767ull, 8858417047560190075ull}},
+{{14297756009124512652ull, 7783859715469458176ull,
+ 6796064331593837777ull, 5536510654725118797ull}},
+{{17872195011405640815ull, 14341510662764210624ull,
+ 13106766432919685125ull, 6920638318406398496ull}},
+{{3893499690547499403ull, 4091830273173099569ull,
+ 16383458041149606407ull, 8650797898007998120ull}},
+{{13962652352660656887ull, 9474922948374269086ull,
+ 10239661275718504004ull, 5406748686254998825ull}},
+{{8229943403971045300ull, 11843653685467836358ull,
+ 17411262613075517909ull, 6758435857818748531ull}},
+{{1064057218109030817ull, 969509051552631736ull,
+ 17152392247917009483ull, 8448044822273435664ull}},
+{{665035761318144261ull, 16746844221716252499ull,
+ 10720245154948130926ull, 5280028013920897290ull}},
+{{14666352756929844038ull, 11710183240290539815ull,
+ 4176934406830387850ull, 6600035017401121613ull}},
+{{13721254927734917144ull, 5414357013508398961ull,
+ 9832854026965372717ull, 8250043771751402016ull}},
+{{1658255302193241359ull, 5689816142656443303ull,
+ 6145533766853357948ull, 5156277357344626260ull}},
+{{15907877183023715411ull, 7112270178320554128ull,
+ 7681917208566697435ull, 6445346696680782825ull}},
+{{1438102405070092647ull, 4278651704473304757ull,
+ 14214082529135759698ull, 8056683370850978531ull}},
+{{3204657012382501857ull, 7285843333723203377ull,
+ 6577958571496155859ull, 5035427106781861582ull}},
+{{8617507283905515225ull, 4495618148726616317ull,
+ 17445820251224970632ull, 6294283883477326977ull}},
+{{15383570123309281935ull, 5619522685908270396ull,
+ 7972217258749049578ull, 7867854854346658722ull}},
+{{391359290213525401ull, 8123887697120056902ull, 9594321805145543890ull,
+ 4917409283966661701ull}},
+{{9712571149621682560ull, 931487584545295319ull,
+ 16604588274859317767ull, 6146761604958327126ull}},
+{{7529027918599715295ull, 14999417535963782861ull,
+ 11532363306719371400ull, 7683452006197908908ull}},
+{{7011485458338516012ull, 9374635959977364288ull,
+ 16431099103554382933ull, 4802157503873693067ull}},
+{{8764356822923145015ull, 16329980968399093264ull,
+ 15927187861015590762ull, 6002696879842116334ull}},
+{{10955446028653931268ull, 11189104173644090772ull,
+ 10685612789414712645ull, 7503371099802645418ull}},
+{{16070525804763482851ull, 9299033117741250684ull,
+ 11290194011811583307ull, 4689606937376653386ull}},
+{{1641413182244801947ull, 7012105378749175452ull,
+ 4889370477909703326ull, 5862008671720816733ull}},
+{{2051766477806002434ull, 17988503760291245123ull,
+ 10723399115814517061ull, 7327510839651020916ull}},
+{{16399766152539666754ull, 8650571645081892691ull,
+ 13404248894768146327ull, 9159388549563776145ull}},
+{{7944010836123597770ull, 12324136305817264788ull,
+ 1460126531589009598ull, 5724617843477360091ull}},
+{{9930013545154497212ull, 6181798345416805177ull,
+ 15660216219768425710ull, 7155772304346700113ull}},
+{{17024202949870509419ull, 16950619968625782279ull,
+ 5740212219428368425ull, 8944715380433375142ull}},
+{{17557655871310150243ull, 3676608452750032068ull,
+ 17422690692424893978ull, 5590447112770859463ull}},
+{{3500325765428136188ull, 13819132602792315894ull,
+ 17166677347103729568ull, 6988058890963574329ull}},
+{{13598779243639946042ull, 17273915753490394867ull,
+ 7623288628597498248ull, 8735073613704467912ull}},
+{{6193394018061272325ull, 10796197345931496792ull,
+ 4764555392873436405ull, 5459421008565292445ull}},
+{{7741742522576590406ull, 18106932700841758894ull,
+ 10567380259519183410ull, 6824276260706615556ull}},
+{{453806116365962199ull, 13410293839197422810ull,
+ 13209225324398979263ull, 8530345325883269445ull}},
+{{4895314841156114279ull, 15298962677139471112ull,
+ 10561608836963055991ull, 5331465828677043403ull}},
+{{6119143551445142848ull, 14512017327996950986ull,
+ 8590325027776432085ull, 6664332285846304254ull}},
+{{16872301476161204368ull, 4304963604714025020ull,
+ 1514534247865764299ull, 8330415357307880318ull}},
+{{1321816385745976922ull, 384759243732571686ull,
+ 14781641960198266399ull, 5206509598317425198ull}},
+{{10875642519037246961ull, 14316007109947878319ull,
+ 9253680413393057190ull, 6508136997896781498ull}},
+{{8982867130369170797ull, 8671636850580072091ull,
+ 2343728479886545680ull, 8135171247370976873ull}},
+{{3308448947267037796ull, 5419773031612545057ull,
+ 12994045345997560810ull, 5084482029606860545ull}},
+{{8747247202511185149ull, 15998088326370457129ull,
+ 2407498627214787300ull, 6355602537008575682ull}},
+{{15545745021566369340ull, 1550866334253519795ull,
+ 12232745320873259934ull, 7944503171260719602ull}},
+{{7410247629265286886ull, 14804349514190613584ull,
+ 12257151843973175362ull, 4965314482037949751ull}},
+{{9262809536581608607ull, 9282064855883491172ull,
+ 10709753786539081299ull, 6206643102547437189ull}},
+{{11578511920727010759ull, 6990895051426976061ull,
+ 17998878251601239528ull, 7758303878184296486ull}},
+{{9542412959668075676ull, 4369309407141860038ull,
+ 6637612888823386801ull, 4848939923865185304ull}},
+{{2704644162730318787ull, 10073322777354712952ull,
+ 8297016111029233501ull, 6061174904831481630ull}},
+{{3380805203412898484ull, 17203339490120779094ull,
+ 1147898101931766068ull, 7576468631039352038ull}},
+{{15948061307415225265ull, 1528715144470711125ull,
+ 14552494368989517505ull, 4735292894399595023ull}},
+{{6100018578986867869ull, 6522579949015776811ull,
+ 13578931942809508977ull, 5919116117999493779ull}},
+{{3013337205306196932ull, 12764910954697108918ull,
+ 12361978910084498317ull, 7398895147499367224ull}},
+{{15718393808598536795ull, 10283912355899387025ull,
+ 7726236818802811448ull, 4624309467187104515ull}},
+{{5812934205466007281ull, 12854890444874233782ull,
+ 5046110005076126406ull, 5780386833983880644ull}},
+{{16489539793687284909ull, 6845241019238016419ull,
+ 6307637506345158008ull, 7225483542479850805ull}},
+{{16000238723681718232ull, 8556551274047520524ull,
+ 12496232901358835414ull, 9031854428099813506ull}},
+{{776777165446298087ull, 736158527852312424ull, 12421831581776660038ull,
+ 5644909017562383441ull}},
+{{970971456807872609ull, 10143570196670166338ull,
+ 1692231421938661335ull, 7056136271952979302ull}},
+{{10437086357864616569ull, 8067776727410320018ull,
+ 11338661314278102477ull, 8820170339941224127ull}},
+{{11134864992092773260ull, 7348203463845143963ull,
+ 14004192349064895904ull, 5512606462463265079ull}},
+{{9306895221688578671ull, 9185254329806429954ull,
+ 12893554417903731976ull, 6890758078079081349ull}},
+{{2410246990255947531ull, 11481567912258037443ull,
+ 2281884967097501258ull, 8613447597598851687ull}},
+{{17647305433405824871ull, 11787665963588661305ull,
+ 8343707132077020142ull, 5383404748499282304ull}},
+{{8224073736475117376ull, 5511210417631050824ull,
+ 10429633915096275178ull, 6729255935624102880ull}},
+{{10280092170593896720ull, 16112385058893589338ull,
+ 13037042393870343972ull, 8411569919530128600ull}},
+{{11036743625048573354ull, 846868624953717528ull,
+ 8148151496168964983ull, 5257231199706330375ull}},
+{{13795929531310716693ull, 14893643836474310622ull,
+ 5573503351783818324ull, 6571538999632912969ull}},
+{{8021539877283620058ull, 170310721883336662ull,
+ 11578565208157160810ull, 8214423749541141211ull}},
+{{401776404874874632ull, 4718130219604473318ull, 4930760245884531554ull,
+ 5134014843463213257ull}},
+{{9725592542948369098ull, 15121034811360367455ull,
+ 10775136325783052346ull, 6417518554329016571ull}},
+{{7545304660258073469ull, 9677921477345683511ull,
+ 8857234388801427529ull, 8021898192911270714ull}},
+{{11633344440302377774ull, 17577915969409521954ull,
+ 10147457511428280109ull, 5013686370569544196ull}},
+{{5318308513523196410ull, 8137336906479738731ull,
+ 12684321889285350137ull, 6267107963211930245ull}},
+{{2036199623476607608ull, 14783357151527061318ull,
+ 2020344306324523959ull, 7833884954014912807ull}},
+{{15107682819955043467ull, 16157127247345495179ull,
+ 8180244219093909330ull, 4896178096259320504ull}},
+{{14272917506516416430ull, 10973037022327093166ull,
+ 10225305273867386663ull, 6120222620324150630ull}},
+{{8617774846290744729ull, 9104610259481478554ull,
+ 3558259555479457521ull, 7650278275405188288ull}},
+{{9997795297359103360ull, 17219596458244393856ull,
+ 2223912222174660950ull, 4781423922128242680ull}},
+{{12497244121698879200ull, 12301123535950716512ull,
+ 2779890277718326188ull, 5976779902660303350ull}},
+{{15621555152123599000ull, 15376404419938395640ull,
+ 12698234884002683543ull, 7470974878325379187ull}},
+{{9763471970077249375ull, 16527781790102579131ull,
+ 5630553793287983262ull, 4669359298953361992ull}},
+{{7592653944169173815ull, 11436355200773448106ull,
+ 7038192241609979078ull, 5836699123691702490ull}},
+{{267445393356691460ull, 5072071964112034325ull,
+ 18021112338867249656ull, 7295873904614628112ull}},
+{{4945992760123252229ull, 6340089955140042906ull,
+ 4079646349874510454ull, 9119842380768285141ull}},
+{{7702931493504420547ull, 17797614277244690528ull,
+ 4855621977885262985ull, 5699901487980178213ull}},
+{{9628664366880525684ull, 8411959791273699448ull,
+ 10681213490783966636ull, 7124876859975222766ull}},
+{{12035830458600657105ull, 10514949739092124310ull,
+ 4128144826625182487ull, 8906096074969028458ull}},
+{{2910708018198022787ull, 13489372614573659550ull,
+ 7191776535068126958ull, 5566310046855642786ull}},
+{{12861757059602304291ull, 7638343731362298629ull,
+ 18213092705689934506ull, 6957887558569553482ull}},
+{{2242138269220716652ull, 324557627348097479ull,
+ 13542993845257642325ull, 8697359448211941853ull}},
+{{8318865445904029764ull, 2508691526306254876ull,
+ 10770214162499720405ull, 5435849655132463658ull}},
+{{10398581807380037204ull, 7747550426310206499ull,
+ 4239395666269874698ull, 6794812068915579573ull}},
+{{8386541240797658601ull, 461065996032982316ull, 9910930601264731277ull,
+ 8493515086144474466ull}},
+{{14464960312353312434ull, 2594009256734307899ull,
+ 10806017644217844952ull, 5308446928840296541ull}},
+{{13469514372014252638ull, 3242511570917884874ull,
+ 18119208073699694094ull, 6635558661050370676ull}},
+{{7613520928163039990ull, 13276511500502131901ull,
+ 4202266018415066001ull, 8294448326312963346ull}},
+{{7064293589315593946ull, 1380290660172750582ull,
+ 7238102279936804155ull, 5184030203945602091ull}},
+{{18053739023499268240ull, 15560421380498101939ull,
+ 4435941831493617289ull, 6480037754932002614ull}},
+{{17955487760946697396ull, 5615468670340463712ull,
+ 14768299326221797420ull, 8100047193665003267ull}},
+{{11222179850591685873ull, 12733039955817565628ull,
+ 6924344069674929435ull, 5062529496040627042ull}},
+{{14027724813239607341ull, 11304613926344569131ull,
+ 17878802123948437602ull, 6328161870050783802ull}},
+{{12922969998122121272ull, 4907395371075935606ull,
+ 13125130618080771195ull, 7910202337563479753ull}},
+{{3465170230398937891ull, 761279097708765802ull, 1285677608659400141ull,
+ 4943876460977174846ull}},
+{{13554834824853448172ull, 5563284890563345156ull,
+ 10830469047679025984ull, 6179845576221468557ull}},
+{{16943543531066810215ull, 6954106113204181445ull,
+ 18149772328026170384ull, 7724806970276835696ull}},
+{{12895557716130450336ull, 4346316320752613403ull,
+ 11343607705016356490ull, 4828004356423022310ull}},
+{{11507761126735675016ull, 14656267437795542562ull,
+ 4956137594415669804ull, 6035005445528777888ull}},
+{{5161329371564817962ull, 18320334297244428203ull,
+ 6195171993019587255ull, 7543756806910972360ull}},
+{{919987848014317275ull, 18367737963418849483ull,
+ 3871982495637242034ull, 4714848004319357725ull}},
+{{14985042865300060305ull, 13736300417418786045ull,
+ 9451664137973940447ull, 5893560005399197156ull}},
+{{4896245526342911669ull, 12558689503346094653ull,
+ 11814580172467425559ull, 7366950006748996445ull}},
+{{10731992926356027491ull, 11086675860755230412ull,
+ 933167160302118237ull, 9208687508436245557ull}},
+{{15930867615827292990ull, 9235015422185712959ull,
+ 2889072484402517850ull, 5755429692772653473ull}},
+{{15301898501356728333ull, 2320397240877365391ull,
+ 8223026623930535217ull, 7194287115965816841ull}},
+{{14515687108268522512ull, 7512182569524094643ull,
+ 14890469298340556925ull, 8992858894957271051ull}},
+{{6766461433454132618ull, 7000957115166253104ull,
+ 7000700302249154126ull, 5620536809348294407ull}},
+{{8458076791817665773ull, 17974568430812592188ull,
+ 4139189359384054753ull, 7025671011685368009ull}},
+{{10572595989772082216ull, 8633152483233576523ull,
+ 9785672717657456346ull, 8782088764606710011ull}},
+{{4302029484393857433ull, 10007406320448373231ull,
+ 3810202439322216264ull, 5488805477879193757ull}},
+{{765850837064933887ull, 12509257900560466539ull,
+ 9374439067580158234ull, 6861006847348992196ull}},
+{{14792371601613331071ull, 6413200338845807365ull,
+ 11718048834475197793ull, 8576258559186240245ull}},
+{{11551075260222025872ull, 15537465257847099363ull,
+ 9629623530760692572ull, 5360161599491400153ull}},
+{{9827158056850144435ull, 975087498599322588ull,
+ 16648715431878253620ull, 6700201999364250191ull}},
+{{12283947571062680544ull, 1218859373249153235ull,
+ 16199208271420429121ull, 8375252499205312739ull}},
+{{5371624222700481388ull, 12291002154349190532ull,
+ 7818662160424074248ull, 5234532812003320462ull}},
+{{6714530278375601735ull, 15363752692936488165ull,
+ 549955663675317002ull, 6543166015004150578ull}},
+{{13004848866396890073ull, 9981318829315834398ull,
+ 9910816616448922061ull, 8178957518755188222ull}},
+{{3516344523070668392ull, 8544167277536090451ull,
+ 1582574366853188384ull, 5111848449221992639ull}},
+{{18230488709120499201ull, 10680209096920113063ull,
+ 15813276013848649192ull, 6389810561527490798ull}},
+{{18176424867973236098ull, 13350261371150141329ull,
+ 10543222980456035682ull, 7987263201909363498ull}},
+{{4442736514842190705ull, 12955599375396226235ull,
+ 11201200381212410205ull, 4992039501193352186ull}},
+{{941734625125350477ull, 2359441163963119082ull, 4778128439660736949ull,
+ 6240049376491690233ull}},
+{{10400540318261463905ull, 7560987473381286756ull,
+ 10584346568003309090ull, 7800061720614612791ull}},
+{{15723709735768190749ull, 9337303189290692126ull,
+ 13532745632643150037ull, 4875038575384132994ull}},
+{{10431265132855462628ull, 16283315005040753062ull,
+ 7692560003949161738ull, 6093798219230166243ull}},
+{{3815709379214552476ull, 11130771719446165520ull,
+ 5004013986509064269ull, 7617247774037707804ull}},
+{{2384818362009095298ull, 9262575333867547402ull,
+ 12350880778422940976ull, 4760779858773567377ull}},
+{{12204394989366144930ull, 11578219167334434252ull,
+ 1603542917746512508ull, 5950974823466959222ull}},
+{{15255493736707681163ull, 14472773959168042815ull,
+ 11227800684037916443ull, 7438718529333699027ull}},
+{{16452212613083382583ull, 6739640715266332807ull,
+ 4711532418310003825ull, 4649199080833561892ull}},
+{{15953579747926840324ull, 13036236912510303913ull,
+ 5889415522887504781ull, 5811498851041952365ull}},
+{{6106916629626386693ull, 2460238085355716180ull,
+ 11973455422036768881ull, 7264373563802440456ull}},
+{{7633645787032983367ull, 7686983625122033129ull,
+ 14966819277545961101ull, 9080466954753050570ull}},
+{{16300243662964084364ull, 7110207774914964657ull,
+ 13965948066893613592ull, 5675291846720656606ull}},
+{{6540246523422941743ull, 8887759718643705822ull,
+ 8234063046762241182ull, 7094114808400820758ull}},
+{{17398680191133452987ull, 1886327611449856469ull,
+ 1069206771598025670ull, 8867643510501025948ull}},
+{{13180018128672102069ull, 15014012812438324005ull,
+ 9891626269103541851ull, 5542277194063141217ull}},
+{{2639964605557963874ull, 14155829997120517103ull,
+ 16976218854806815218ull, 6927846492578926521ull}},
+{{17135013812229618555ull, 8471415459545870570ull,
+ 7385215513226355311ull, 8659808115723658152ull}},
+{{15321069651070899501ull, 12212163689857250962ull,
+ 4615759695766472069ull, 5412380072327286345ull}},
+{{9927965026983848568ull, 1430146557039399991ull,
+ 10381385638135477991ull, 6765475090409107931ull}},
+{{7798270265302422806ull, 15622741251581413701ull,
+ 8365046029241959584ull, 8456843863011384914ull}},
+{{7179761925027708206ull, 9764213282238383563ull,
+ 9839839786703612644ull, 5285527414382115571ull}},
+{{4363016387857247353ull, 12205266602797979454ull,
+ 7688113714952127901ull, 6606909267977644464ull}},
+{{14677142521676334999ull, 1421525198215310605ull,
+ 9610142143690159877ull, 8258636584972055580ull}},
+{{11479057085261403327ull, 3194296258098263080ull,
+ 15229710876661125731ull, 5161647865607534737ull}},
+{{14348821356576754158ull, 17827928377904992562ull,
+ 5202080540544243451ull, 6452059832009418422ull}},
+{{8712654658866166890ull, 17673224453953852799ull,
+ 15725972712535080122ull, 8065074790011773027ull}},
+{{12362938189432436162ull, 15657451302148545903ull,
+ 7522889936120731124ull, 5040671743757358142ull}},
+{{10841986718363157299ull, 1125070053976130763ull,
+ 180240383296138098ull, 6300839679696697678ull}},
+{{8940797379526558719ull, 10629709604324939262ull,
+ 9448672515974948430ull, 7876049599620872097ull}},
+{{976312343776711296ull, 2031882484275699135ull,
+ 17434635368552812529ull, 4922530999763045060ull}},
+{{15055448485003052832ull, 7151539123772011822ull,
+ 3346550136981464045ull, 6153163749703806326ull}},
+{{9595938569399040231ull, 13551109923142402682ull,
+ 13406559708081605864ull, 7691454687129757907ull}},
+{{10609147624301788049ull, 8469443701964001676ull,
+ 6073256808337309713ull, 4807159179456098692ull}},
+{{13261434530377235061ull, 15198490645882389999ull,
+ 7591571010421637141ull, 6008948974320123365ull}},
+{{11965107144544155922ull, 5163055252070823787ull,
+ 14101149781454434331ull, 7511186217900154206ull}},
+{{5172348956126403499ull, 921066523330570915ull, 4201532594981633553ull,
+ 4694491386187596379ull}},
+{{1853750176730616470ull, 5763019172590601548ull, 640229725299654037ull,
+ 5868114232734495474ull}},
+{{2317187720913270588ull, 11815459984165639839ull,
+ 10023659193479343354ull, 7335142790918119342ull}},
+{{16731542706423751946ull, 5545952943352273990ull,
+ 3306201954994403385ull, 9168928488647649178ull}},
+{{5845528173087457063ull, 14995435635663641004ull,
+ 6678062240298890019ull, 5730580305404780736ull}},
+{{7306910216359321328ull, 14132608526152163351ull,
+ 8347577800373612524ull, 7163225381755975920ull}},
+{{4521951752021763756ull, 17665760657690204189ull,
+ 10434472250467015655ull, 8954031727194969900ull}},
+{{5132062854227296300ull, 17958629438697459474ull,
+ 15744917193396660592ull, 5596269829496856187ull}},
+{{15638450604638896183ull, 4001542724662272726ull,
+ 15069460473318437837ull, 6995337286871070234ull}},
+{{10324691218943844420ull, 9613614424255228812ull,
+ 9613453554793271488ull, 8744171608588837793ull}},
+{{15676304048694678571ull, 6008509015159518007ull,
+ 17537623517814264440ull, 5465107255368023620ull}},
+{{14983694042440960309ull, 7510636268949397509ull,
+ 3475285323558278934ull, 6831384069210029526ull}},
+{{4894559497769036674ull, 164923299331971079ull,
+ 13567478691302624476ull, 8539230086512536907ull}},
+{{9976628713746729778ull, 9326449098937257732ull,
+ 6173831172850446345ull, 5337018804070335567ull}},
+{{12470785892183412222ull, 16269747392098960069ull,
+ 3105602947635670027ull, 6671273505087919459ull}},
+{{1753424309947101565ull, 15725498221696312183ull,
+ 17717061739826751246ull, 8339091881359899323ull}},
+{{8013419221358020335ull, 5216750370132807210ull,
+ 8767320578178025577ull, 5211932425849937077ull}},
+{{793401989842749610ull, 11132623981093396917ull,
+ 15570836741149919875ull, 6514915532312421346ull}},
+{{5603438505730824917ull, 9304093957939358242ull,
+ 10240173889582624036ull, 8143644415390526683ull}},
+{{8113835084509153477ull, 15038430760566874709ull,
+ 4094265671775446070ull, 5089777759619079177ull}},
+{{14753979874063829750ull, 9574666413853817578ull,
+ 9729518108146695492ull, 6362222199523848971ull}},
+{{9219102805725011380ull, 11968333017317271973ull,
+ 7550211616755981461ull, 7952777749404811214ull}},
+{{8067782262791826064ull, 9786051145036988935ull, 107196242045100509ull,
+ 4970486093378007009ull}},
+{{5473041810062394676ull, 16844249949723624073ull,
+ 4745681320983763540ull, 6213107616722508761ull}},
+{{11452988281005381249ull, 2608568363444978475ull,
+ 10543787669657092330ull, 7766384520903135951ull}},
+{{4852274666414669329ull, 6242041245580499451ull,
+ 13507396321176764562ull, 4853990325564459969ull}},
+{{1453657314590948757ull, 17025923593830400122ull,
+ 3049187346188791990ull, 6067487906955574962ull}},
+{{11040443680093461754ull, 12059032455433224344ull,
+ 13034856219590765796ull, 7584359883694468702ull}},
+{{6900277300058413597ull, 16760267321500541023ull,
+ 3535099118816840718ull, 4740224927309042939ull}},
+{{4013660606645629092ull, 11726962115020900471ull,
+ 18253931953803214610ull, 5925281159136303673ull}},
+{{405389739879648460ull, 5435330606921349781ull, 8982356886971854551ull,
+ 7406601448920379592ull}},
+{{2559211596638474240ull, 10314610656966925469ull,
+ 5613973054357409094ull, 4629125905575237245ull}},
+{{7810700514225480704ull, 3669891284353881028ull,
+ 11629152336374149272ull, 5786407381969046556ull}},
+{{9763375642781850880ull, 4587364105442351285ull,
+ 14536440420467686590ull, 7233009227461308195ull}},
+{{16815905571904701503ull, 14957577168657714914ull,
+ 13558864507157220333ull, 9041261534326635244ull}},
+{{15121627000867826344ull, 11654328739624765773ull,
+ 17697662353828038516ull, 5650788458954147027ull}},
+{{5066975695802619218ull, 14567910924530957217ull,
+ 17510391923857660241ull, 7063485573692683784ull}},
+{{10945405638180661926ull, 4374830600381532809ull,
+ 3441245831112523686ull, 8829356967115854731ull}},
+{{18370093569931383464ull, 16569327180520621717ull,
+ 18291679708941184967ull, 5518348104447409206ull}},
+{{9127558907132065618ull, 16099972957223389243ull,
+ 13641227599321705401ull, 6897935130559261508ull}},
+{{6797762615487694118ull, 6289908141247072842ull,
+ 17051534499152131752ull, 8622418913199076885ull}},
+{{8860287653107196728ull, 3931192588279420526ull,
+ 12963052071183776297ull, 5389011820749423053ull}},
+{{1851987529529220102ull, 9525676753776663562ull,
+ 2368757033697556659ull, 6736264775936778817ull}},
+{{11538356448766300935ull, 7295409923793441548ull,
+ 7572632310549333728ull, 8420330969920973521ull}},
+{{16434844817333713893ull, 4559631202370900967ull,
+ 16262110240161803340ull, 5262706856200608450ull}},
+{{15931870003239754462ull, 5699539002963626209ull,
+ 11104265763347478367ull, 6578383570250760563ull}},
+{{6079779448767529365ull, 2512737735277144858ull,
+ 9268646185756960055ull, 8222979462813450704ull}},
+{{8411548173907093757ull, 8487990112189297392ull,
+ 5792903866098100034ull, 5139362164258406690ull}},
+{{10514435217383867197ull, 1386615603381845932ull,
+ 16464501869477400851ull, 6424202705323008362ull}},
+{{13143044021729833996ull, 15568327559509471127ull,
+ 11357255299991975255ull, 8030253381653760453ull}},
+{{15131931541222228103ull, 16647733752334501310ull,
+ 9404127571708678486ull, 5018908363533600283ull}},
+{{9691542389673009321ull, 11586295153563350830ull,
+ 7143473446208460204ull, 6273635454417000354ull}},
+{{2891055950236485843ull, 14482868941954188538ull,
+ 18152713844615351063ull, 7842044318021250442ull}},
+{{6418595987325191556ull, 15969322116362449692ull,
+ 15957132171311982318ull, 4901277698763281526ull}},
+{{8023244984156489445ull, 10738280608598286307ull,
+ 10723043177285202090ull, 6126597123454101908ull}},
+{{5417370211768223902ull, 4199478723893082076ull,
+ 13403803971606502613ull, 7658246404317627385ull}},
+{{12609228419209915747ull, 4930517211646870249ull,
+ 1459848454612982277ull, 4786404002698517116ull}},
+{{1926477468730230972ull, 10774832532985975716ull,
+ 1824810568266227846ull, 5983005003373146395ull}},
+{{2408096835912788715ull, 4245168629377693837ull,
+ 16116071265614948520ull, 7478756254216432993ull}},
+{{3810903531659186899ull, 2653230393361058648ull,
+ 3155015513368260969ull, 4674222658885270621ull}},
+{{4763629414573983623ull, 7928224010128711214ull,
+ 8555455410137714115ull, 5842778323606588276ull}},
+{{15177908805072255337ull, 5298593994233501113ull,
+ 10694319262672142644ull, 7303472904508235345ull}},
+{{5137327951058155459ull, 6623242492791876392ull,
+ 17979585096767566209ull, 9129341130635294181ull}},
+{{3210829969411347162ull, 15668741604063392505ull,
+ 13543083694693422832ull, 5705838206647058863ull}},
+{{8625223480191571857ull, 1139182931369689015ull,
+ 12317168599939390637ull, 7132297758308823579ull}},
+{{6169843331812076917ull, 6035664682639499173ull,
+ 10784774731496850392ull, 8915372197886029474ull}},
+{{6161995091596242025ull, 3772290426649686983ull,
+ 11352170225612919399ull, 5572107623678768421ull}},
+{{3090807846067914627ull, 103677014884720825ull, 355154726733985537ull,
+ 6965134529598460527ull}},
+{{8475195826012281188ull, 4741282287033288935ull,
+ 14279001463699645633ull, 8706418161998075658ull}},
+{{12214526418898757599ull, 14492516475464275344ull,
+ 13536061933239666424ull, 5441511351248797286ull}},
+{{15268158023623446998ull, 18115645594330344180ull,
+ 7696705379694807222ull, 6801889189060996608ull}},
+{{638453455819757132ull, 13421184956058154418ull,
+ 9620881724618509028ull, 8502361486326245760ull}},
+{{5010719428314736112ull, 17611612634391122319ull,
+ 6013051077886568142ull, 5313975928953903600ull}},
+{{1651713266966032235ull, 12791143756134127091ull,
+ 7516313847358210178ull, 6642469911192379500ull}},
+{{15899699638989704006ull, 6765557658312883055ull,
+ 9395392309197762723ull, 8303087388990474375ull}},
+{{16854841302009646860ull, 1922630527231857957ull,
+ 12789649220889683558ull, 5189429618119046484ull}},
+{{7233493572229894863ull, 11626660195894598255ull,
+ 15987061526112104447ull, 6486787022648808105ull}},
+{{4430180946859980674ull, 9921639226440859915ull,
+ 6148768852357966847ull, 8108483778311010132ull}},
+{{463020082573793970ull, 13118553544166619303ull,
+ 13066352569578505087ull, 5067802361444381332ull}},
+{{14413833158499406174ull, 11786505911780886224ull,
+ 16332940711973131359ull, 6334752951805476665ull}},
+{{18017291448124257717ull, 10121446371298719876ull,
+ 6581117834684250487ull, 7918441189756845832ull}},
+{{2037435118222885266ull, 13243433009702781779ull,
+ 4113198646677656554ull, 4949025743598028645ull}},
+{{16381851953060770294ull, 7330919225273701415ull,
+ 9753184326774458597ull, 6186282179497535806ull}},
+{{15865628922898574963ull, 13775335050019514673ull,
+ 2968108371613297438ull, 7732852724371919758ull}},
+{{2998489049170527496ull, 3997898387834808767ull,
+ 15690125787540474611ull, 4833032952732449848ull}},
+{{17583169366745323082ull, 385686966366123054ull,
+ 1165913160716041648ull, 6041291190915562311ull}},
+{{12755589671576878044ull, 482108707957653818ull,
+ 15292449506177215772ull, 7551613988644452888ull}},
+{{12583929563162936682ull, 9524689979328309444ull,
+ 9557780941360759857ull, 4719758742902783055ull}},
+{{15729911953953670852ull, 16517548492587774709ull,
+ 7335540158273561917ull, 5899698428628478819ull}},
+{{5827331887159924853ull, 6811877560452554675ull,
+ 4557739179414564493ull, 7374623035785598524ull}},
+{{2672478840522518162ull, 13126532968993081248ull,
+ 5697173974268205616ull, 9218278794731998155ull}},
+{{1670299275326573852ull, 8204083105620675780ull,
+ 1254890724703934558ull, 5761424246707498847ull}},
+{{2087874094158217315ull, 1031731845171068917ull,
+ 15403671461162081910ull, 7201780308384373558ull}},
+{{7221528636125159547ull, 10513036843318611954ull,
+ 10031217289597826579ull, 9002225385480466948ull}},
+{{9125141416005612621ull, 4264805017860438519ull,
+ 15492882842853417420ull, 5626390865925291842ull}},
+{{6794740751579627872ull, 5331006272325548149ull,
+ 10142731516711995967ull, 7032988582406614803ull}},
+{{13105111957901922744ull, 2052071821979547282ull,
+ 8066728377462607055ull, 8791235728008268504ull}},
+{{12802380992116089619ull, 8200073916378298907ull,
+ 5041705235914129409ull, 5494522330005167815ull}},
+{{11391290221717724120ull, 14861778413900261538ull,
+ 1690445526465273857ull, 6868152912506459769ull}},
+{{5015740740292379342ull, 4742164962093163211ull,
+ 6724742926508980226ull, 8585191140633074711ull}},
+{{828994953469043137ull, 7575539119735614911ull,
+ 11120493356709194497ull, 5365744462895671694ull}},
+{{14871301747118467633ull, 14081109918096906542ull,
+ 4677244659031717313ull, 6707180578619589618ull}},
+{{9365755147043308733ull, 3766329342338969466ull,
+ 15069927860644422450ull, 8383975723274487022ull}},
+{{10465282985329455862ull, 6965641857389243820ull,
+ 4807018894475376127ull, 5239984827046554389ull}},
+{{13081603731661819828ull, 4095366303309166871ull,
+ 10620459636521608063ull, 6549981033808192986ull}},
+{{11740318646149886881ull, 507521860709070685ull,
+ 4052202508797234271ull, 8187476292260241233ull}},
+{{9643542163057373253ull, 7234730190584251034ull,
+ 14061841614066741179ull, 5117172682662650770ull}},
+{{2831055666966940758ull, 4431726719802925889ull,
+ 8353929980728650666ull, 6396465853328313463ull}},
+{{8150505602136063851ull, 14763030436608433169ull,
+ 5830726457483425428ull, 7995582316660391829ull}},
+{{16623281047403509667ull, 3521986025494922ull, 5950047045140834845ull,
+ 4997238947912744893ull}},
+{{11555729272399611276ull, 4616088500959256557ull,
+ 12049244824853431460ull, 6246548684890931116ull}},
+{{609603535217350382ull, 5770110626199070697ull,
+ 15061556031066789325ull, 7808185856113663895ull}},
+{{11910217255579313749ull, 5912162150588113137ull,
+ 16331001547057825184ull, 4880116160071039934ull}},
+{{1052713514191978474ull, 7390202688235141422ull,
+ 11190379896967505672ull, 6100145200088799918ull}},
+{{10539263929594748901ull, 9237753360293926777ull,
+ 4764602834354606282ull, 7625181500110999898ull}},
+{{18116255002065187823ull, 10385281868611092139ull,
+ 7589562789899016830ull, 4765738437569374936ull}},
+{{18033632734154096875ull, 3758230298909089366ull,
+ 9486953487373771038ull, 5957173046961718670ull}},
+{{13318668880837845285ull, 13921159910491137516ull,
+ 2635319822362437989ull, 7446466308702148338ull}},
+{{17547540087378429112ull, 11006567953270654899ull,
+ 6258760907403911647ull, 4654041442938842711ull}},
+{{17322739090795648485ull, 9146523923160930720ull,
+ 3211765115827501655ull, 5817551803673553389ull}},
+{{3206679789785008991ull, 6821468885523775497ull,
+ 8626392413211764973ull, 7271939754591941736ull}},
+{{8620035755658649142ull, 13138522125332107275ull,
+ 10782990516514706216ull, 9089924693239927170ull}},
+{{3081679338072961762ull, 8211576328332567047ull,
+ 11351055091249079289ull, 5681202933274954481ull}},
+{{17687157227873365914ull, 14876156428843096712ull,
+ 353760808779185399ull, 7101503666593693102ull}},
+{{3662202461132155777ull, 13983509517626482987ull,
+ 9665573047828757557ull, 8876879583242116377ull}},
+{{18429777602703455025ull, 11045536457730245818ull,
+ 17570198200961443233ull, 5548049739526322735ull}},
+{{13813849966524542973ull, 18418606590590195177ull,
+ 17351061732774416137ull, 6935062174407903419ull}},
+{{3432254402873515004ull, 9188200182955580260ull,
+ 17077141147540632268ull, 8668827718009879274ull}},
+{{11368531038650722686ull, 14965997151202013470ull,
+ 15284899235640283071ull, 5418017323756174546ull}},
+{{4987291761458627549ull, 14095810420575128934ull,
+ 9882752007695578031ull, 6772521654695218183ull}},
+{{15457486738678060244ull, 13008077007291523263ull,
+ 7741753991192084635ull, 8465652068369022729ull}},
+{{16578458239314869509ull, 5824205120343508087ull,
+ 16367811290563522657ull, 5291032542730639205ull}},
+{{16111386780716198982ull, 11891942418856773013ull,
+ 6624706057922239609ull, 6613790678413299007ull}},
+{{6304175420613085015ull, 1029869968288802555ull,
+ 3669196553975411608ull, 8267238348016623759ull}},
+{{1634266628669484183ull, 643668730180501597ull, 9210776873875714111ull,
+ 5167023967510389849ull}},
+{{6654519304264243132ull, 14639643968007790708ull,
+ 16125157110772030542ull, 6458779959387987311ull}},
+{{8318149130330303915ull, 9076182923154962577ull,
+ 15544760370037650274ull, 8073474949234984139ull}},
+{{16728058252524909707ull, 10284300345399239514ull,
+ 7409632222059837469ull, 5045921843271865087ull}},
+{{11686700778801361326ull, 17467061450176437297ull,
+ 4650354259147408932ull, 6307402304089831359ull}},
+{{773317918219537945ull, 3387082739010995006ull, 1201256805506873262ull,
+ 7884252880112289199ull}},
+{{14318381754169374928ull, 15951984767164035590ull,
+ 7668314531082877644ull, 4927658050070180749ull}},
+{{8674605155856942852ull, 1493236885245492872ull,
+ 14197079182280984960ull, 6159572562587725936ull}},
+{{10843256444821178564ull, 1866546106556866090ull,
+ 17746348977851231200ull, 7699465703234657420ull}},
+{{11388721296440624507ull, 1166591316598041306ull,
+ 1868096074302243692ull, 4812166064521660888ull}},
+{{5012529583696004826ull, 1458239145747551633ull,
+ 2335120092877804615ull, 6015207580652076110ull}},
+{{10877347998047393936ull, 15657856987466603253ull,
+ 12142272152952031576ull, 7519009475815095137ull}},
+{{9104185507993315162ull, 9786160617166627033ull, 671391067953937879ull,
+ 4699380922384434461ull}},
+{{15991917903419031856ull, 7621014753030895887ull,
+ 5450924853369810253ull, 5874226152980543076ull}},
+{{15378211360846401916ull, 14137954459716007763ull,
+ 6813656066712262816ull, 7342782691225678845ull}},
+{{14611078182630614491ull, 17672443074645009704ull,
+ 13128756101817716424ull, 9178478364032098556ull}},
+{{9131923864144134057ull, 11045276921653131065ull,
+ 17428844600490848573ull, 5736548977520061597ull}},
+{{16026590848607555476ull, 18418282170493801735ull,
+ 7950997695331397004ull, 7170686221900076997ull}},
+{{15421552542332056440ull, 4576108639407700553ull,
+ 14550433137591634160ull, 8963357777375096246ull}},
+{{2720941311316453419ull, 2860067899629812846ull,
+ 4482334692567383446ull, 5602098610859435154ull}},
+{{12624548676000342582ull, 12798456911392041865ull,
+ 14826290402564005115ull, 7002623263574293942ull}},
+{{1945627789718264515ull, 11386385120812664428ull,
+ 9309490966350230586ull, 8753279079467867428ull}},
+{{10439389405428691130ull, 11728176718935303171ull,
+ 15041803890823669924ull, 5470799424667417142ull}},
+{{8437550738358476009ull, 14660220898669128964ull,
+ 9578882826674811597ull, 6838499280834271428ull}},
+{{10546938422948095011ull, 4490218068054247493ull,
+ 11973603533343514497ull, 8548124101042839285ull}},
+{{8897679523556253334ull, 14335601338602374443ull,
+ 9789345217553390512ull, 5342577563151774553ull}},
+{{6510413386017928763ull, 17919501673252968054ull,
+ 16848367540369126044ull, 6678221953939718191ull}},
+{{17361388769377186762ull, 3952633017856658451ull,
+ 16448773407034019652ull, 8347777442424647739ull}},
+{{8545024971647047774ull, 11693767673015187340ull,
+ 7974640370182568330ull, 5217360901515404837ull}},
+{{10681281214558809718ull, 5393837554414208367ull,
+ 14579986481155598317ull, 6521701126894256046ull}},
+{{8739915499771124243ull, 11353982961445148363ull,
+ 9001611064589722088ull, 8152126408617820058ull}},
+{{3156604178143258700ull, 7096239350903217727ull,
+ 10237692933795964209ull, 5095079005386137536ull}},
+{{17780813277961237087ull, 13481985207056410062ull,
+ 12797116167244955261ull, 6368848756732671920ull}},
+{{13002644560596770551ull, 3017423453538348866ull,
+ 15996395209056194077ull, 7961060945915839900ull}},
+{{12738338868800369499ull, 4191732667675161993ull,
+ 774374968805345490ull, 4975663091197399938ull}},
+{{2087865530718298161ull, 14463037871448728300ull,
+ 10191340747861457670ull, 6219578863996749922ull}},
+{{2609831913397872701ull, 8855425302456134567ull,
+ 3515803897972046280ull, 7774473579995937403ull}},
+{{8548673973514752294ull, 5534640814035084104ull,
+ 18338278500728386589ull, 4859045987497460876ull}},
+{{10685842466893440368ull, 11529987035971243034ull,
+ 4476104052200931620ull, 6073807484371826096ull}},
+{{4133931046762024652ull, 14412483794964053793ull,
+ 5595130065251164525ull, 7592259355464782620ull}},
+{{14112921950294735168ull, 11313645381066227572ull,
+ 12720328327636753636ull, 4745162097165489137ull}},
+{{17641152437868418959ull, 14142056726332784465ull,
+ 2065352354263778333ull, 5931452621456861422ull}},
+{{8216382492053359987ull, 3842512852633816870ull,
+ 11805062479684498725ull, 7414315776821076777ull}},
+{{523553039105962088ull, 4707413542109829496ull, 460635022161729847ull,
+ 4633947360513172986ull}},
+{{654441298882452610ull, 1272580909209898966ull, 9799165814556938117ull,
+ 5792434200641466232ull}},
+{{10041423660457841570ull, 6202412154939761611ull,
+ 12248957268196172646ull, 7240542750801832790ull}},
+{{7940093557144914059ull, 16976387230529477822ull,
+ 6087824548390439999ull, 9050678438502290988ull}},
+{{350872454788183383ull, 17527771046722005495ull,
+ 13028262379598800807ull, 5656674024063931867ull}},
+{{14273648623767392940ull, 17298027789975118964ull,
+ 11673641956071113105ull, 7070842530079914834ull}},
+{{17842060779709241175ull, 7787476682186734993ull,
+ 5368680408234115574ull, 8838553162599893543ull}},
+{{4233758959677193879ull, 255486907939321467ull,
+ 10272954282787404090ull, 5524095726624933464ull}},
+{{680512681169104444ull, 9542730671778927642ull,
+ 12841192853484255112ull, 6905119658281166830ull}},
+{{10074012888316156363ull, 11928413339723659552ull,
+ 6828119030000543082ull, 8631399572851458538ull}},
+{{6296258055197597727ull, 12066944355754675124ull,
+ 8879260412177727330ull, 5394624733032161586ull}},
+{{7870322568996997159ull, 5860308407838568097ull,
+ 1875703478367383355ull, 6743280916290201983ull}},
+{{14449589229673634353ull, 2713699491370822217ull,
+ 16179687403241392906ull, 8429101145362752478ull}},
+{{2113464240904939615ull, 6307748200534151790ull,
+ 5500618608598482662ull, 5268188215851720299ull}},
+{{11865202337985950326ull, 17108057287522465545ull,
+ 2264087242320715423ull, 6585235269814650374ull}},
+{{996444867200274196ull, 16773385590975694028ull,
+ 12053481089755670087ull, 8231544087268312967ull}},
+{{9846150078854947180ull, 17400895022000890623ull,
+ 14450954708738375660ull, 5144715054542695604ull}},
+{{7696001580141296071ull, 3304374703791561663ull,
+ 18063693385922969576ull, 6430893818178369505ull}},
+{{5008315956749232185ull, 4130468379739452079ull,
+ 8744558677121548258ull, 8038617272722961882ull}},
+{{10047726500609351972ull, 7193228755764545453ull,
+ 10077035191628355565ull, 5024135795451851176ull}},
+{{17171344144189077869ull, 13603221963133069720ull,
+ 12596293989535444456ull, 6280169744314813970ull}},
+{{3017436106526795720ull, 17004027453916337151ull,
+ 6521995450064529762ull, 7850212180393517463ull}},
+{{8803426594220329181ull, 15239203177125098623ull,
+ 10993776183931412957ull, 4906382612745948414ull}},
+{{6392597224348023572ull, 5213945916124209567ull,
+ 4518848193059490389ull, 6132978265932435518ull}},
+{{3379060512007641561ull, 11129118413582649863ull,
+ 14871932278179138794ull, 7666222832415544397ull}},
+{{9029441847645857832ull, 11567385026916544068ull,
+ 11600800683075655698ull, 4791389270259715248ull}},
+{{11286802309557322290ull, 5235859246790904277ull,
+ 14501000853844569623ull, 5989236587824644060ull}},
+{{273444831664489150ull, 1933138040061242443ull,
+ 18126251067305712029ull, 7486545734780805075ull}},
+{{16311804084286163383ull, 3514054284251970478ull,
+ 9023063907852376066ull, 4679091084238003172ull}},
+{{11166383068502928421ull, 13615939892169738906ull,
+ 11278829884815470082ull, 5848863855297503965ull}},
+{{4734606798773884718ull, 7796552828357397825ull, 263479300737173891ull,
+ 7311079819121879957ull}},
+{{10529944516894743801ull, 5134005017019359377ull,
+ 4941035144348855268ull, 9138849773902349946ull}},
+{{18110430369127684636ull, 12432125172491875418ull,
+ 7699832983645422446ull, 5711781108688968716ull}},
+{{13414665924554829987ull, 6316784428760068465ull,
+ 9624791229556778058ull, 7139726385861210895ull}},
+{{2933274350411373771ull, 17119352572804861390ull,
+ 7419303018518584668ull, 8924657982326513619ull}},
+{{15668354524289272319ull, 1476223321148262560ull,
+ 2331221377360421466ull, 5577911238954071012ull}},
+{{1138699081652038783ull, 11068651188290104009ull,
+ 2914026721700526832ull, 6972389048692588765ull}},
+{{6035059870492436382ull, 13835813985362630011ull,
+ 8254219420553046444ull, 8715486310865735956ull}},
+{{1466069409844078787ull, 17870755777706419565ull,
+ 14382259174700429835ull, 5447178944291084972ull}},
+{{6444272780732486388ull, 17726758703705636552ull,
+ 17977823968375537294ull, 6808973680363856215ull}},
+{{8055340975915607985ull, 12935076342777269882ull,
+ 17860593942042033714ull, 8511217100454820269ull}},
+{{9646274128374642895ull, 12696108732663181580ull,
+ 13468714222989965023ull, 5319510687784262668ull}},
+{{12057842660468303618ull, 11258449897401589071ull,
+ 16835892778737456279ull, 6649388359730328335ull}},
+{{10460617307157991618ull, 9461376353324598435ull,
+ 16433179954994432445ull, 8311735449662910419ull}},
+{{4232042807760050810ull, 8219203230041567974ull,
+ 7964894462657826326ull, 5194834656039319012ull}},
+{{14513425546554839320ull, 1050632000697184159ull,
+ 9956118078322282908ull, 6493543320049148765ull}},
+{{13530095914766161246ull, 1313290000871480199ull,
+ 17056833616330241539ull, 8116929150061435956ull}},
+{{15373838974369932635ull, 16961707315040532788ull,
+ 1437148973351625153ull, 5073080718788397473ull}},
+{{770554644252864178ull, 7367076088518502274ull, 6408122235116919346ull,
+ 6341350898485496841ull}},
+{{10186565342170856030ull, 18432217147502903650ull,
+ 12621838812323537086ull, 7926688623106871051ull}},
+{{10978289357284172923ull, 6908449698761926877ull,
+ 5582806248488516727ull, 4954180389441794407ull}},
+{{18334547715032604057ull, 4023876105025020692ull,
+ 2366821792183258005ull, 6192725486802243009ull}},
+{{4471440570081203456ull, 9641531149708663770ull,
+ 7570213258656460410ull, 7740906858502803761ull}},
+{{7406336374728140064ull, 10637642986995302760ull,
+ 16260598332728757516ull, 4838066786564252350ull}},
+{{9257920468410175080ull, 13297053733744128450ull,
+ 11102375879056171087ull, 6047583483205315438ull}},
+{{2349028548657943042ull, 12009631148752772659ull,
+ 4654597811965438051ull, 7559479354006644298ull}},
+{{17609043907407072065ull, 5200176458756788959ull,
+ 7520809650905786686ull, 4724674596254152686ull}},
+{{17399618865831452177ull, 15723592610300762007ull,
+ 177640026777457549ull, 5905843245317690858ull}},
+{{17137837563861927318ull, 5819432707593788797ull,
+ 9445422070326597745ull, 7382304056647113572ull}},
+{{13016991486627398526ull, 15166360488314587758ull,
+ 15126760830808899398ull, 4613940035404445982ull}},
+{{7047867321429472349ull, 9734578573538458890ull,
+ 9685079001656348440ull, 5767425044255557478ull}},
+{{18033206188641616244ull, 12168223216923073612ull,
+ 2882976715215659742ull, 7209281305319446848ull}},
+{{4094763662092468689ull, 5986906984299066208ull,
+ 3603720894019574678ull, 9011601631649308560ull}},
+{{2559227288807792931ull, 17576874920469080092ull,
+ 2252325558762234173ull, 5632251019780817850ull}},
+{{3199034111009741163ull, 8136035595304186403ull,
+ 12038778985307568525ull, 7040313774726022312ull}},
+{{17833850694044340166ull, 14781730512557620907ull,
+ 15048473731634460656ull, 8800392218407527890ull}},
+{{8840313674564018652ull, 9238581570348513067ull,
+ 14016982100698925814ull, 5500245136504704931ull}},
+{{6438706074777635411ull, 2324854926080865526ull,
+ 12909541607446269364ull, 6875306420630881164ull}},
+{{17271754630326820071ull, 2906068657601081907ull,
+ 16136927009307836705ull, 8594133025788601455ull}},
+{{8489003634740568593ull, 13345507957069145952ull,
+ 17003108408458479796ull, 5371333141117875909ull}},
+{{10611254543425710741ull, 16681884946336432440ull,
+ 7418827455290936033ull, 6714166426397344887ull}},
+{{13264068179282138426ull, 7017298127638376838ull,
+ 4661848300686282138ull, 8392708032996681109ull}},
+{{3678356593623948612ull, 8997497348201373428ull,
+ 5219498197142620288ull, 5245442520622925693ull}},
+{{4597945742029935765ull, 11246871685251716785ull,
+ 11136058764855663264ull, 6556803150778657116ull}},
+{{10359118195964807611ull, 14058589606564645981ull,
+ 13920073456069579080ull, 8196003938473321395ull}},
+{{8780291881691698709ull, 8786618504102903738ull,
+ 6394202900829792973ull, 5122502461545825872ull}},
+{{1751992815259847578ull, 15594959148556017577ull,
+ 7992753626037241216ull, 6403128076932282340ull}},
+{{6801677037502197376ull, 1046954861985470355ull,
+ 9990942032546551521ull, 8003910096165352925ull}},
+{{1945205139225179408ull, 12183561834809388732ull,
+ 8550181779555288652ull, 5002443810103345578ull}},
+{{2431506424031474260ull, 15229452293511735915ull,
+ 1464355187589335007ull, 6253054762629181973ull}},
+{{16874441085321506537ull, 14425129348462281989ull,
+ 6442130002914056663ull, 7816318453286477466ull}},
+{{12852368687539635538ull, 15933234870430008099ull,
+ 8638017270248673318ull, 4885199033304048416ull}},
+{{11453774840997156518ull, 10693171551182734316ull,
+ 10797521587810841648ull, 6106498791630060520ull}},
+{{14317218551246445648ull, 13366464438978417895ull,
+ 13496901984763552060ull, 7633123489537575650ull}},
+{{15865790622170110386ull, 17577412311216286992ull,
+ 13047249758904607941ull, 4770702180960984781ull}},
+{{1385494204003086367ull, 8136707333738195029ull,
+ 2474004143348596215ull, 5963377726201230977ull}},
+{{6343553773431245862ull, 5559198148745355882ull,
+ 7704191197613133173ull, 7454222157751538721ull}},
+{{8576407126821916568ull, 5780341852179541378ull,
+ 16344334544576677993ull, 4658888848594711700ull}},
+{{1497136871672619902ull, 11837113333651814627ull,
+ 1983674107011295875ull, 5823611060743389626ull}},
+{{15706479144872938589ull, 10184705648637380379ull,
+ 11702964670618895652ull, 7279513825929237032ull}},
+{{15021412912663785332ull, 12730882060796725474ull,
+ 14628705838273619565ull, 9099392282411546290ull}},
+{{14000069088842253737ull, 10262644297211647373ull,
+ 13754627167348400132ull, 5687120176507216431ull}},
+{{3665028305770653459ull, 12828305371514559217ull,
+ 12581597940758112261ull, 7108900220634020539ull}},
+{{9192971400640704728ull, 2200323659111035309ull,
+ 11115311407520252423ull, 8886125275792525674ull}},
+{{8051450134614134407ull, 8292731314585478924ull,
+ 11558755648127545668ull, 5553828297370328546ull}},
+{{10064312668267668009ull, 10365914143231848655ull,
+ 5225072523304656277ull, 6942285371712910683ull}},
+{{7968704816907197107ull, 17569078697467198723ull,
+ 1919654635703432442ull, 8677856714641138354ull}},
+{{2674597501353304240ull, 15592360204344387106ull,
+ 5811470165742033180ull, 5423660446650711471ull}},
+{{12566618913546406108ull, 1043706181720932266ull,
+ 2652651688750153572ull, 6779575558313389339ull}},
+{{6484901605078231826ull, 1304632727151165333ull,
+ 17150872666219855677ull, 8474469447891736673ull}},
+{{6358906512387588844ull, 3121238463683172285ull,
+ 3801766388746327942ull, 5296543404932335421ull}},
+{{12560319158911873958ull, 13124920116458741164ull,
+ 9363894004360297831ull, 6620679256165419276ull}},
+{{15700398948639842448ull, 11794464127146038551ull,
+ 11704867505450372289ull, 8275849070206774095ull}},
+{{16730278370540983386ull, 454011051825192238ull,
+ 14233071218547564537ull, 5172405668879233809ull}},
+{{11689475926321453425ull, 5179199833208878202ull,
+ 3956280967902291959ull, 6465507086099042262ull}},
+{{5388472871047040973ull, 1862313773083709849ull,
+ 14168723246732640757ull, 8081883857623802827ull}},
+{{14897010590472870368ull, 3469789117391012607ull,
+ 6549609019994206521ull, 5051177411014876767ull}},
+{{14009577219663700056ull, 8948922415166153663ull,
+ 3575325256565370247ull, 6313971763768595959ull}},
+{{12900285506152237166ull, 6574467000530304175ull,
+ 18304214625988876521ull, 7892464704710744948ull}},
+{{14980207468986230085ull, 15638256921399909869ull,
+ 2216762104388272017ull, 4932790440444215593ull}},
+{{4890201280950623894ull, 5712763096467723625ull,
+ 7382638648912727926ull, 6165988050555269491ull}},
+{{10724437619615667771ull, 16364325907439430339ull,
+ 4616612292713522003ull, 7707485063194086864ull}},
+{{4396930503046098405ull, 7921860682935950010ull,
+ 2885382682945951252ull, 4817178164496304290ull}},
+{{14719535165662398814ull, 9902325853669937512ull,
+ 12830100390537214873ull, 6021472705620380362ull}},
+{{18399418957077998518ull, 16989593335514809794ull,
+ 6814253451316742783ull, 7526840882025475453ull}},
+{{16111322866601136978ull, 17536024862337837977ull,
+ 6564751416286658191ull, 4704275551265922158ull}},
+{{6304095527969257510ull, 17308345059494909568ull,
+ 17429311307213098547ull, 5880344439082402697ull}},
+{{7880119409961571888ull, 17023745305941249056ull,
+ 7951581078734209472ull, 7350430548853003372ull}},
+{{9850149262451964859ull, 2832937558717009704ull,
+ 9939476348417761841ull, 9188038186066254215ull}},
+{{6156343289032478037ull, 13299801020266600825ull,
+ 13129701745402183006ull, 5742523866291408884ull}},
+{{12307115129717985451ull, 7401379238478475223ull,
+ 16412127181752728758ull, 7178154832864261105ull}},
+{{10772207893720093909ull, 28352011243318221ull, 6680100921908747236ull,
+ 8972693541080326382ull}},
+{{9038472942788752645ull, 9241092043881849696ull,
+ 18010121131475130734ull, 5607933463175203988ull}},
+{{11298091178485940807ull, 2327993017997536312ull,
+ 4065907340634361802ull, 7009916828969004986ull}},
+{{14122613973107426008ull, 12133363309351696198ull,
+ 14305756212647728060ull, 8762396036211256232ull}},
+{{4214947714764753351ull, 16806724105199585932ull,
+ 8941097632904830037ull, 5476497522632035145ull}},
+{{5268684643455941689ull, 7173347076217318703ull,
+ 15788058059558425451ull, 6845621903290043931ull}},
+{{1974169785892539207ull, 4354997826844260475ull,
+ 15123386556020643910ull, 8557027379112554914ull}},
+{{17374757180678694669ull, 16556931697059826508ull,
+ 14063802615940290347ull, 5348142111945346821ull}},
+{{3271702402138816720ull, 16084478602897395232ull,
+ 3744695214643199222ull, 6685177639931683527ull}},
+{{4089628002673520899ull, 10882226216766968232ull, 69182999876611124ull,
+ 8356472049914604409ull}},
+{{2556017501670950562ull, 16024763422334130953ull,
+ 11572454420991351712ull, 5222795031196627755ull}},
+{{7806707895516076107ull, 1584210204208112075ull,
+ 9853882007811801737ull, 6528493788995784694ull}},
+{{5146698850967707229ull, 6591948773687527998ull,
+ 3093980472909976363ull, 8160617236244730868ull}},
+{{17051744837136980730ull, 1814124974341011046ull,
+ 11157109832423511035ull, 5100385772652956792ull}},
+{{12091309009566450105ull, 16102714273208427520ull,
+ 13946387290529388793ull, 6375482215816195990ull}},
+{{15114136261958062631ull, 6293334786228370688ull,
+ 8209612076306960184ull, 7969352769770244988ull}},
+{{9446335163723789145ull, 3933334241392731680ull,
+ 14354379584546625923ull, 4980845481106403117ull}},
+{{11807918954654736431ull, 304981783313526696ull,
+ 4107916425401118692ull, 6226056851383003897ull}},
+{{14759898693318420538ull, 381227229141908370ull,
+ 9746581550178786269ull, 7782571064228754871ull}},
+{{13836622701751400741ull, 2544110027427386683ull,
+ 13009142496502823274ull, 4864106915142971794ull}},
+{{12684092358761863022ull, 12403509571139009162ull,
+ 7038056083773753284ull, 6080133643928714743ull}},
+{{6631743411597552969ull, 15504386963923761453ull,
+ 4185884086289803701ull, 7600167054910893429ull}},
+{{6450682641462164558ull, 11996084861666044860ull,
+ 4922020563144821265ull, 4750104409319308393ull}},
+{{8063353301827705697ull, 1160048021800392363ull,
+ 10764211722358414486ull, 5937630511649135491ull}},
+{{5467505608857244217ull, 10673432064105266262ull,
+ 8843578634520630203ull, 7422038139561419364ull}},
+{{17252249060817941348ull, 4365052030852097461ull,
+ 14750608683430169685ull, 4638773837225887102ull}},
+{{7730253270740262973ull, 10068001056992509731ull,
+ 9214888817432936298ull, 5798467296532358878ull}},
+{{5051130569997940812ull, 3361629284385861356ull,
+ 2295238984936394565ull, 7248084120665448598ull}},
+{{6313913212497426015ull, 8813722623909714599ull,
+ 12092420768025269014ull, 9060105150831810747ull}},
+{{10863724785451973115ull, 896890621516183720ull,
+ 5251919970802099182ull, 5662565719269881717ull}},
+{{13579655981814966394ull, 10344485313750005458ull,
+ 11176585981930011881ull, 7078207149087352146ull}},
+{{7751197940413932184ull, 17542292660614894727ull,
+ 4747360440557739043ull, 8847758936359190183ull}},
+{{11762027740399789471ull, 8658089903670615252ull,
+ 9884629302989668758ull, 5529849335224493864ull}},
+{{14702534675499736839ull, 1599240342733493257ull,
+ 12355786628737085948ull, 6912311669030617330ull}},
+{{4543110289092507337ull, 1999050428416866572ull,
+ 6221361249066581627ull, 8640389586288271663ull}},
+{{12062815967537592894ull, 17390307582256399271ull,
+ 10805879808307695372ull, 5400243491430169789ull}},
+{{10466833940994603213ull, 3291140404110947473ull,
+ 18119035778812007120ull, 6750304364287712236ull}},
+{{17695228444670641920ull, 4113925505138684341ull,
+ 4202050649805457284ull, 8437880455359640296ull}},
+{{13365360787132845152ull, 11794575477566453521ull,
+ 2626281656128410802ull, 5273675284599775185ull}},
+{{2871642928633892728ull, 5519847310103291094ull,
+ 7894538088587901407ull, 6592094105749718981ull}},
+{{12812925697647141718ull, 2288123119201725963ull,
+ 14479858629162264663ull, 8240117632187148726ull}},
+{{5702235551815769622ull, 8347605977142160583ull,
+ 4438225624799027510ull, 5150073520116967954ull}},
+{{2516108421342324123ull, 1211135434572924921ull,
+ 14771154067853560196ull, 6437591900146209942ull}},
+{{7756821545105293058ull, 1513919293216156151ull,
+ 9240570547962174437ull, 8046989875182762428ull}},
+{{11765542493331890018ull, 3252042567473791546ull,
+ 14998728629331134831ull, 5029368671989226517ull}},
+{{5483556079810086714ull, 17900111264624403145ull,
+ 4913352731381754826ull, 6286710839986533147ull}},
+{{11466131118189996296ull, 13151767043925728123ull,
+ 1530004895799805629ull, 7858388549983166434ull}},
+{{4860488939655053733ull, 10525697411667274029ull,
+ 5567939078302266422ull, 4911492843739479021ull}},
+{{10687297192996205070ull, 3933749727729316728ull,
+ 11571609866305220932ull, 6139366054674348776ull}},
+{{13359121491245256338ull, 4917187159661645910ull,
+ 14464512332881526165ull, 7674207568342935970ull}},
+{{3737764913600897307ull, 5379084984002222646ull,
+ 13652006226478341757ull, 4796379730214334981ull}},
+{{13895578178855897442ull, 11335542248430166211ull,
+ 3229949727815763484ull, 5995474662767918727ull}},
+{{12757786705142483899ull, 14169427810537707764ull,
+ 17872495215051868067ull, 7494343328459898408ull}},
+{{17196988727568828245ull, 6550049372372373400ull,
+ 11170309509407417542ull, 4683964580287436505ull}},
+{{3049491835751483690ull, 17410933752320242559ull,
+ 127828831477108215ull, 5854955725359295632ull}},
+{{17646922849971518324ull, 17151981171972915294ull,
+ 159786039346385269ull, 7318694656699119540ull}},
+{{12835281525609622097ull, 7604918409683980406ull,
+ 199732549182981587ull, 9148368320873899425ull}},
+{{3410364935078625907ull, 2447230996838793802ull,
+ 11654047889307833252ull, 5717730200546187140ull}},
+{{13486328205703058191ull, 3059038746048492252ull,
+ 14567559861634791565ull, 7147162750682733925ull}},
+{{16857910257128822739ull, 8435484450988003219ull,
+ 4374391771761325744ull, 8933953438353417407ull}},
+{{8230350901491820260ull, 5272177781867502012ull,
+ 9651523884991910446ull, 5583720898970885879ull}},
+{{10287938626864775325ull, 15813594264189153323ull,
+ 7452718837812500153ull, 6979651123713607349ull}},
+{{8248237265153581252ull, 5931934774954277942ull,
+ 13927584565693013096ull, 8724563904642009186ull}},
+{{543462272293600379ull, 3707459234346423714ull,
+ 13316426371985521089ull, 5452852440401255741ull}},
+{{9902699877221776281ull, 9246010061360417546ull,
+ 2810474909699737649ull, 6816065550501569677ull}},
+{{3155002809672444544ull, 16169198595127909837ull,
+ 8124779655552059965ull, 8520081938126962096ull}},
+{{4277719765258971792ull, 12411592131168637600ull,
+ 5077987284720037478ull, 5325051211329351310ull}},
+{{5347149706573714740ull, 6291118127106021192ull,
+ 15570856142754822656ull, 6656314014161689137ull}},
+{{6683937133217143425ull, 7863897658882526490ull,
+ 5628512123161364608ull, 8320392517702111422ull}},
+{{8789146726688102545ull, 4914936036801579056ull,
+ 17352878132258016592ull, 5200245323563819638ull}},
+{{10986433408360128181ull, 6143670046001973820ull,
+ 12467725628467744932ull, 6500306654454774548ull}},
+{{13733041760450160226ull, 7679587557502467275ull,
+ 15584657035584681165ull, 8125383318068468185ull}},
+{{6277308091067656189ull, 7105585232652735999ull,
+ 2822881619599343872ull, 5078364573792792616ull}},
+{{3234949095407182332ull, 8881981540815919999ull,
+ 3528602024499179840ull, 6347955717240990770ull}},
+{{17878744424541141627ull, 11102476926019899998ull,
+ 13634124567478750608ull, 7934944646551238462ull}},
+{{6562529246910825613ull, 6939048078762437499ull,
+ 3909641836246831226ull, 4959340404094524039ull}},
+{{3591475540211144113ull, 17897182135307822682ull,
+ 275366276881151128ull, 6199175505118155049ull}},
+{{13712716462118705949ull, 3924733595425226736ull,
+ 4955893864528826815ull, 7748969381397693811ull}},
+{{8570447788824191218ull, 9370487524781848566ull, 791590656116822807ull,
+ 4843105863373558632ull}},
+{{1489687699175463214ull, 7101423387549922804ull, 989488320146028509ull,
+ 6053882329216948290ull}},
+{{1862109623969329018ull, 13488465252864791409ull,
+ 10460232437037311444ull, 7567352911521185362ull}},
+{{12693033561049300396ull, 17653662819895270438ull,
+ 11149331291575707556ull, 4729595569700740851ull}},
+{{6642919914456849687ull, 3620334451159536432ull,
+ 9324978096042246542ull, 5911994462125926064ull}},
+{{8303649893071062109ull, 13748790100804196348ull,
+ 11656222620052808177ull, 7389993077657407580ull}},
+{{14413153220024189626ull, 1675464785361540861ull,
+ 16508511174387780919ull, 4618745673535879737ull}},
+{{4181383469748073321ull, 15929389036984089789ull,
+ 6800580912702562436ull, 5773432091919849672ull}},
+{{9838415355612479555ull, 1464992222520560620ull,
+ 8500726140878203046ull, 7216790114899812090ull}},
+{{12298019194515599443ull, 11054612315005476583ull,
+ 1402535639242977999ull, 9020987643624765113ull}},
+{{14603791024213331508ull, 13826661724519504720ull,
+ 12405799820595331009ull, 5638117277265478195ull}},
+{{18254738780266664385ull, 3448269100367217188ull,
+ 10895563757316775858ull, 7047646596581847744ull}},
+{{4371679401623778866ull, 13533708412313797294ull,
+ 13619454696645969822ull, 8809558245727309680ull}},
+{{16567357681297025503ull, 3846881739268735404ull,
+ 8512159185403731139ull, 5505973903579568550ull}},
+{{2262453027911730263ull, 196916155658531352ull, 1416826944899888116ull,
+ 6882467379474460688ull}},
+{{2828066284889662828ull, 246145194573164190ull, 1771033681124860145ull,
+ 8603084224343075860ull}},
+{{15602599483338202980ull, 11683055792676697378ull,
+ 10330268087557813398ull, 5376927640214422412ull}},
+{{10279877317317977917ull, 5380447703991095915ull,
+ 12912835109447266748ull, 6721159550268028015ull}},
+{{8238160628220084492ull, 6725559629988869894ull,
+ 11529357868381695531ull, 8401449437835035019ull}},
+{{537164374210164904ull, 1897631759529349732ull, 4900005658524865755ull,
+ 5250905898646896887ull}},
+{{671455467762706129ull, 16207097754693850877ull,
+ 1513321054728694289ull, 6563632373308621109ull}},
+{{5451005353130770566ull, 6423814138085149884ull,
+ 6503337336838255766ull, 8204540466635776386ull}},
+{{12630250382561507412ull, 17849941891585382389ull,
+ 8676271853951297757ull, 5127837791647360241ull}},
+{{1952754922919720552ull, 8477369309199564275ull,
+ 15457025835866510101ull, 6409797239559200301ull}},
+{{16276001708931814402ull, 15208397654926843247ull,
+ 5486224239550973914ull, 8012246549449000377ull}},
+{{17090030095723465858ull, 14116934552756664933ull,
+ 14958105195787828456ull, 5007654093405625235ull}},
+{{7527479564372168610ull, 17646168190945831167ull,
+ 14085945476307397666ull, 6259567616757031544ull}},
+{{4797663437037822858ull, 12834338201827513151ull,
+ 17607431845384247083ull, 7824459520946289430ull}},
+{{9916068675789721143ull, 5715618366928501767ull,
+ 6392958884937766523ull, 4890287200591430894ull}},
+{{7783399826309763524ull, 2532836940233239305ull,
+ 17214570643026983962ull, 6112859000739288617ull}},
+{{14340935801314592309ull, 12389418212146324939ull,
+ 7683155248501566240ull, 7641073750924110772ull}},
+{{6657241866607926241ull, 7743386382591453087ull,
+ 14025344067168254708ull, 4775671094327569232ull}},
+{{3709866314832519898ull, 9679232978239316359ull,
+ 17531680083960318385ull, 5969588867909461540ull}},
+{{25646875113261968ull, 16710727241226533353ull, 3467856031240846365ull,
+ 7461986084886826926ull}},
+{{11545244343014258490ull, 12750047534980277297ull,
+ 16002468074807692690ull, 4663741303054266828ull}},
+{{596497373485659401ull, 6714187381870570814ull, 1556341019800064247ull,
+ 5829676628817833536ull}},
+{{9968993753711850059ull, 3781048208910825613ull,
+ 1945426274750080309ull, 7287095786022291920ull}},
+{{17072928210567200477ull, 9337996279565919920ull,
+ 2431782843437600386ull, 9108869732527864900ull}},
+{{10670580131604500298ull, 10447933693156087854ull,
+ 10743236314003276049ull, 5693043582829915562ull}},
+{{4114853127650849565ull, 17671603134872497722ull,
+ 4205673355649319253ull, 7116304478537394453ull}},
+{{14366938446418337764ull, 8254445863308458440ull,
+ 9868777712989036971ull, 8895380598171743066ull}},
+{{8979336529011461103ull, 2853185655354092573ull,
+ 10779672089045536011ull, 5559612873857339416ull}},
+{{15835856679691714282ull, 17401540124474779428ull,
+ 13474590111306920013ull, 6949516092321674270ull}},
+{{1348076775905091237ull, 7916867100311310574ull,
+ 7619865602278874209ull, 8686895115402092838ull}},
+{{14677606040222845735ull, 16477256983763038868ull,
+ 150729982996908476ull, 5429309447126308024ull}},
+{{18347007550278557169ull, 2149827155994246969ull,
+ 188412478746135596ull, 6786636808907885030ull}},
+{{9098701382566032749ull, 2687283944992808712ull,
+ 9458887635287445303ull, 8483296011134856287ull}},
+{{5686688364103770468ull, 8597081493261587301ull,
+ 12829333799695735170ull, 5302060006959285179ull}},
+{{11720046473557100989ull, 1522979829722208318ull,
+ 11424981231192281059ull, 6627575008699106474ull}},
+{{5426686055091600428ull, 15738782842434924110ull,
+ 5057854502135575515ull, 8284468760873883093ull}},
+{{17226736839714413980ull, 7530896267308133616ull,
+ 5467002073048428649ull, 5177792975546176933ull}},
+{{3086676975933465859ull, 14025306352562554925ull,
+ 11445438609737923715ull, 6472241219432721166ull}},
+{{8470032238344220227ull, 12919946922275805752ull,
+ 5083426225317628836ull, 8090301524290901458ull}},
+{{5293770148965137642ull, 17298338863277154403ull,
+ 7788827409250905926ull, 5056438452681813411ull}},
+{{2005526667779034149ull, 12399551542241667196ull,
+ 5124348243136244504ull, 6320548065852266764ull}},
+{{2506908334723792686ull, 15499439427802083995ull,
+ 6405435303920305630ull, 7900685082315333455ull}},
+{{17707718773698228093ull, 5075463623948914592ull,
+ 10920926092591272875ull, 4937928176447083409ull}},
+{{3687904393413233500ull, 1732643511508755337ull,
+ 18262843634166478998ull, 6172410220558854261ull}},
+{{9221566510193929779ull, 11389176426240719979ull,
+ 8993496487425935035ull, 7715512775698567827ull}},
+{{3457636059657512160ull, 4812392257186756035ull,
+ 3315092295427515445ull, 4822195484811604892ull}},
+{{18157103129854053912ull, 10627176339910832947ull,
+ 4143865369284394306ull, 6027744356014506115ull}},
+{{18084692893890179485ull, 4060598388033765376ull,
+ 568145693178104979ull, 7534680445018132644ull}},
+{{11302933058681362179ull, 232030983307409408ull,
+ 9578463095091091420ull, 4709175278136332902ull}},
+{{14128666323351702723ull, 290038729134261760ull,
+ 2749706832009088467ull, 5886469097670416128ull}},
+{{17660832904189628404ull, 14197606466699990912ull,
+ 3437133540011360583ull, 7358086372088020160ull}},
+{{3629297056527483889ull, 13135322064947600737ull,
+ 4296416925014200729ull, 9197607965110025200ull}},
+{{13797525706398147191ull, 1292047262951168604ull,
+ 2685260578133875456ull, 5748504978193765750ull}},
+{{17246907132997683988ull, 1615059078688960755ull,
+ 12579947759522120128ull, 7185631222742207187ull}},
+{{16946947897819717081ull, 2018823848361200944ull,
+ 11113248680975262256ull, 8982039028427758984ull}},
+{{10591842436137323176ull, 1261764905225750590ull,
+ 6945780425609538910ull, 5613774392767349365ull}},
+{{4016431008316878162ull, 10800578168386964046ull,
+ 13293911550439311541ull, 7017217990959186706ull}},
+{{14243910797250873510ull, 18112408728911092961ull,
+ 7394017401194363618ull, 8771522488698983383ull}},
+{{1984915220640714088ull, 15931941473996821005ull,
+ 11538789903387559117ull, 5482201555436864614ull}},
+{{7092830044228280514ull, 6079868787213862544ull,
+ 5200115342379673089ull, 6852751944296080768ull}},
+{{8866037555285350642ull, 12211522002444716084ull,
+ 6500144177974591361ull, 8565939930370100960ull}},
+{{14764645508908119959ull, 714672223886865696ull,
+ 4062590111234119601ull, 5353712456481313100ull}},
+{{9062812425598333ull, 5505026298285970025ull, 5078237639042649501ull,
+ 6692140570601641375ull}},
+{{4623014533959385820ull, 11492968891284850435ull,
+ 1736111030375923972ull, 8365175713252051719ull}},
+{{583541074510922186ull, 16406477593907807330ull,
+ 8002598421626034338ull, 5228234820782532324ull}},
+{{9952798379993428540ull, 11284724955529983354ull,
+ 10003248027032542923ull, 6535293525978165405ull}},
+{{3217625938137009867ull, 9494220175985091289ull,
+ 17115746052218066558ull, 8169116907472706756ull}},
+{{13540231257404100927ull, 1322201591563294151ull,
+ 1473969245781515791ull, 5105698067170441723ull}},
+{{12313603053327738255ull, 15487810044736281401ull,
+ 15677519612509058450ull, 6382122583963052153ull}},
+{{1556945761377509106ull, 10136390519065575944ull,
+ 5761841460354159351ull, 7977653229953815192ull}},
+{{973091100860943192ull, 13252773102057066821ull,
+ 3601150912721349594ull, 4986033268721134495ull}},
+{{5828049894503566893ull, 7342594340716557718ull,
+ 18336496696183850705ull, 6232541585901418118ull}},
+{{16508434404984234425ull, 13789928944323085051ull,
+ 13697248833375037573ull, 7790676982376772648ull}},
+{{8011928493901452564ull, 10924548599415622109ull,
+ 8560780520859398483ull, 4869173113985482905ull}},
+{{14626596635804203608ull, 9043999730842139732ull,
+ 15312661669501636008ull, 6086466392481853631ull}},
+{{18283245794755254510ull, 11304999663552674665ull,
+ 14529141068449657106ull, 7608082990602317039ull}},
+{{4509499594080952213ull, 11677310808147809570ull,
+ 15998242195422117547ull, 4755051869126448149ull}},
+{{14860246529455966074ull, 9984952491757374058ull,
+ 6162744688995483222ull, 5943814836408060187ull}},
+{{9351936124965181785ull, 3257818577841941765ull,
+ 3091744842816966124ull, 7429768545510075234ull}},
+{{8150803087316932568ull, 11259508648005989411ull,
+ 6544026545187991731ull, 4643605340943797021ull}},
+{{5576817840718777806ull, 9462699791580098860ull,
+ 12791719199912377568ull, 5804506676179746276ull}},
+{{6971022300898472257ull, 11828374739475123575ull,
+ 15989648999890471960ull, 7255633345224682845ull}},
+{{4102091857695702417ull, 14785468424343904469ull,
+ 6152003194580926238ull, 9069541681530853557ull}},
+{{4869650420273507963ull, 4629231746787552389ull,
+ 6150845005826772851ull, 5668463550956783473ull}},
+{{10698749043769272857ull, 1174853665057052582ull,
+ 12300242275710853968ull, 7085579438695979341ull}},
+{{4150064267856815263ull, 1468567081321315728ull,
+ 1540244789356403748ull, 8856974298369974177ull}},
+{{2593790167410509540ull, 10141226462680598138ull,
+ 12491868039416222102ull, 5535608936481233860ull}},
+{{12465609746117912733ull, 3453161041495971864ull,
+ 15614835049270277628ull, 6919511170601542325ull}},
+{{15582012182647390916ull, 4316451301869964830ull,
+ 5683485756305683323ull, 8649388963251927907ull}},
+{{5127071595727231419ull, 391939054455034067ull, 1246335588477358125ull,
+ 5405868102032454942ull}},
+{{1797153476231651369ull, 5101609836496180488ull,
+ 10781291522451473464ull, 6757335127540568677ull}},
+{{2246441845289564211ull, 6377012295620225610ull,
+ 18088300421491729734ull, 8446668909425710846ull}},
+{{6015712171733365536ull, 17820690740044804718ull,
+ 6693501745004943179ull, 5279168068391069279ull}},
+{{16743012251521482728ull, 17664177406628617993ull,
+ 3755191162828791070ull, 6598960085488836599ull}},
+{{7093707259119689698ull, 12856849721430996684ull, 82302935108600934ull,
+ 8248700106861045749ull}},
+{{13656939073804581869ull, 3423845057466985023ull,
+ 2357282343656569536ull, 5155437566788153593ull}},
+{{12459487823828339433ull, 4279806321833731279ull,
+ 7558288947998099824ull, 6444296958485191991ull}},
+{{10962673761358036387ull, 5349757902292164099ull,
+ 4836175166570236876ull, 8055371198106489989ull}},
+{{4545828091635078790ull, 12566970725787378370ull,
+ 5328452488320091999ull, 5034606998816556243ull}},
+{{14905657151398624295ull, 11097027388806835058ull,
+ 2048879591972727095ull, 6293258748520695304ull}},
+{{9408699402393504561ull, 9259598217581155919ull,
+ 2561099489965908869ull, 7866573435650869130ull}},
+{{12797966154137022207ull, 8093091895201916401ull,
+ 6212373199656080947ull, 4916608397281793206ull}},
+{{2162399637389114046ull, 5504678850575007598ull,
+ 16988838536424876992ull, 6145760496602241507ull}},
+{{11926371583591168366ull, 6880848563218759497ull,
+ 16624362152103708336ull, 7682200620752801884ull}},
+{{536453212103398373ull, 4300530352011724686ull, 1166854308210041902ull,
+ 4801375387970501178ull}},
+{{9893938551984023774ull, 14599034976869431665ull,
+ 10681939922117328185ull, 6001719234963126472ull}},
+{{16979109208407417621ull, 4413735665804625869ull,
+ 13352424902646660232ull, 7502149043703908090ull}},
+{{12917786264468329965ull, 2758584791127891168ull,
+ 12956951582581550549ull, 4688843152314942556ull}},
+{{16147232830585412457ull, 8059917007337251864ull,
+ 16196189478226938186ull, 5861053940393678195ull}},
+{{1737296964522213955ull, 851524222316789023ull,
+ 15633550829356284829ull, 7326317425492097744ull}},
+{{16006679260934931155ull, 5676091296323374182ull,
+ 1095194462985804420ull, 9157896781865122181ull}},
+{{5392488519656944068ull, 12770929097056884672ull,
+ 2990339548579821714ull, 5723685488665701363ull}},
+{{6740610649571180085ull, 6740289334466330032ull,
+ 17572982491006940855ull, 7154606860832126703ull}},
+{{8425763311963975106ull, 3813675649655524636ull,
+ 17354542095331288165ull, 8943258576040158379ull}},
+{{14489474106832260250ull, 4689390290248396849ull,
+ 8540745800368361151ull, 5589536610025098987ull}},
+{{4276784578258161600ull, 1250051844383108158ull,
+ 6064246232033063535ull, 6986920762531373734ull}},
+{{14569352759677477808ull, 15397622860761048909ull,
+ 16803679826896105226ull, 8733650953164217167ull}},
+{{11411688484012117582ull, 14235200306403043472ull,
+ 17419828919451147622ull, 5458531845727635729ull}},
+{{14264610605015146977ull, 8570628346149028532ull,
+ 7939728094031770816ull, 6823164807159544662ull}},
+{{17830763256268933722ull, 10713285432686285665ull,
+ 701288080684937712ull, 8528956008949430828ull}},
+{{4226698007527001720ull, 6695803395428928541ull,
+ 9661677087282861878ull, 5330597505593394267ull}},
+{{9895058527836140054ull, 17593126281140936484ull,
+ 7465410340676189443ull, 6663246881991742834ull}},
+{{12368823159795175068ull, 17379721832998782701ull,
+ 108390888990460996ull, 8329058602489678543ull}},
+{{10036357484085678369ull, 1638954108769463380ull,
+ 6985273333260119979ull, 5205661626556049089ull}},
+{{12545446855107097962ull, 15883750691243992937ull,
+ 13343277685002537877ull, 6507077033195061361ull}},
+{{1846750513601708740ull, 6019630308772827460ull,
+ 2844039050971008635ull, 8133846291493826702ull}},
+{{10377591107855843771ull, 1456425933769323210ull,
+ 15612582462139044109ull, 5083653932183641688ull}},
+{{3748616847965028905ull, 6432218435639041917ull,
+ 1068984003964253520ull, 6354567415229552111ull}},
+{{9297457078383674035ull, 8040273044548802396ull,
+ 15171288060237480612ull, 7943209269036940138ull}},
+{{15034282710844572080ull, 14248542689697777305ull,
+ 14093741056075813286ull, 4964505793148087586ull}},
+{{4957795333273551388ull, 8587306325267445824ull,
+ 8393804283239990800ull, 6205632241435109483ull}},
+{{6197244166591939235ull, 10734132906584307280ull,
+ 5880569335622600596ull, 7757040301793886854ull}},
+{{3873277604119962022ull, 15932205103469967858ull,
+ 17510413890046289084ull, 4848150188621179283ull}},
+{{14064969042004728336ull, 1468512305627908206ull,
+ 17276331344130473452ull, 6060187735776474104ull}},
+{{8357839265651134611ull, 1835640382034885258ull,
+ 3148670106453540199ull, 7575234669720592631ull}},
+{{9835335559459347036ull, 8064804266412885142ull,
+ 8885447844174544480ull, 4734521668575370394ull}},
+{{3070797412469407987ull, 10081005333016106428ull,
+ 1883437768363404792ull, 5918152085719212993ull}},
+{{3838496765586759984ull, 12601256666270133035ull,
+ 6965983228881643894ull, 7397690107149016241ull}},
+{{93217469278031038ull, 3264099397991445243ull, 15882954564119497194ull,
+ 4623556316968135150ull}},
+{{13951579891879702510ull, 13303496284344082361ull,
+ 10630321168294595684ull, 5779445396210168938ull}},
+{{3604416809567464425ull, 16629370355430102952ull,
+ 4064529423513468797ull, 7224306745262711173ull}},
+{{4505521011959330531ull, 6951654889005464978ull,
+ 9692347797819223901ull, 9030383431578388966ull}},
+{{7427636650901969486ull, 6650627314842109563ull,
+ 1446031355209627034ull, 5643989644736493104ull}},
+{{4672859795200073953ull, 17536656180407412762ull,
+ 1807539194012033792ull, 7054987055920616380ull}},
+{{15064446780854868250ull, 3474076151799714336ull,
+ 2259423992515042241ull, 8818733819900770475ull}},
+{{9415279238034292656ull, 13700512640943291220ull,
+ 17553041059817759064ull, 5511708637437981546ull}},
+{{11769099047542865820ull, 17125640801179114025ull,
+ 12717929287917423022ull, 6889635796797476933ull}},
+{{876315754146418563ull, 12183678964619116724ull,
+ 2062353554614615066ull, 8612044745996846167ull}},
+{{9771069383196287410ull, 12226485371314335856ull,
+ 8206499999275216272ull, 5382527966248028854ull}},
+{{12213836728995359262ull, 15283106714142919820ull,
+ 1034752962239244532ull, 6728159957810036068ull}},
+{{15267295911244199078ull, 657139318969098159ull,
+ 1293441202799055666ull, 8410199947262545085ull}},
+{{16459588972168706280ull, 5022398092783074253ull,
+ 3114243760963103743ull, 5256374967039090678ull}},
+{{6739428159928719138ull, 1666311597551454913ull,
+ 13116176738058655487ull, 6570468708798863347ull}},
+{{13035971218338286826ull, 15917947552221482353ull,
+ 11783534904145931454ull, 8213085885998579184ull}},
+{{1229952983820347410ull, 5337031201711038567ull,
+ 7364709315091207159ull, 5133178678749111990ull}},
+{{15372499285057597975ull, 2059602983711410304ull,
+ 18429258680718784757ull, 6416473348436389987ull}},
+{{768880032612445853ull, 7186189748066650785ull,
+ 18424887332471093042ull, 8020591685545487484ull}},
+{{12009765066451248418ull, 9103054610969044644ull,
+ 2292182545939657343ull, 5012869803465929678ull}},
+{{15012206333064060522ull, 6767132245283917901ull,
+ 12088600219279347487ull, 6266087254332412097ull}},
+{{4930199861047911941ull, 3847229288177509473ull,
+ 1275692218817020647ull, 7832609067915515122ull}},
+{{14610589959223414723ull, 9322047332752025276ull,
+ 5408993655188025808ull, 4895380667447196951ull}},
+{{18263237449029268404ull, 11652559165940031595ull,
+ 2149556050557644356ull, 6119225834308996189ull}},
+{{18217360792859197601ull, 14565698957425039494ull,
+ 7298631081624443349ull, 7649032292886245236ull}},
+{{6774164477109610597ull, 11409404857604343636ull,
+ 13785016462870052901ull, 4780645183053903272ull}},
+{{8467705596387013246ull, 426698016723265833ull,
+ 17231270578587566127ull, 5975806478817379090ull}},
+{{15196318013911154461ull, 14368430576186246003ull,
+ 12315716186379681850ull, 7469758098521723863ull}},
+{{7191855749480777586ull, 13591955128543791656ull,
+ 14614851644128383012ull, 4668598811576077414ull}},
+{{8989819686850971983ull, 16989943910679739570ull,
+ 9045192518305702957ull, 5835748514470096768ull}},
+{{2013902571708939170ull, 7402371833067510751ull,
+ 11306490647882128697ull, 7294685643087620960ull}},
+{{16352436269918337675ull, 13864650809761776342ull,
+ 14133113309852660871ull, 9118357053859526200ull}},
+{{5608586650271573143ull, 15582935783742192070ull,
+ 8833195818657913044ull, 5698973158662203875ull}},
+{{16234105349694242237ull, 1031925655968188471ull,
+ 6429808754895003402ull, 7123716448327754844ull}},
+{{15680945668690414892ull, 10513279106815011397ull,
+ 8037260943618754252ull, 8904645560409693555ull}},
+{{12106434052145203259ull, 15794171478614157931ull,
+ 2717445080548027455ull, 5565403475256058472ull}},
+{{10521356546754116170ull, 15131028329840309510ull,
+ 3396806350685034319ull, 6956754344070073090ull}},
+{{3928323646587869405ull, 14302099393872998984ull,
+ 13469379975211068707ull, 8695942930087591362ull}},
+{{2455202279117418378ull, 6632969111956930413ull,
+ 13030048502934305846ull, 5434964331304744601ull}},
+{{7680688867324160876ull, 17514583426800938824ull,
+ 2452502573385718595ull, 6793705414130930752ull}},
+{{9600861084155201095ull, 17281543265073785626ull,
+ 3065628216732148244ull, 8492131767663663440ull}},
+{{10612224196024388589ull, 1577592503816340208ull,
+ 1916017635457592653ull, 5307582354789789650ull}},
+{{13265280245030485736ull, 6583676648197813164ull,
+ 11618394081176766624ull, 6634477943487237062ull}},
+{{16581600306288107170ull, 8229595810247266455ull,
+ 5299620564616182472ull, 8293097429359046328ull}},
+{{17281029219071148837ull, 5143497381404541534ull,
+ 3312262852885114045ull, 5183185893349403955ull}},
+{{12377914486984160238ull, 11041057745183064822ull,
+ 17975386621388556268ull, 6478982366686754943ull}},
+{{6249021071875424490ull, 13801322181478831028ull,
+ 17857547258308307431ull, 8098727958358443679ull}},
+{{13129010206776916114ull, 15543355391065351248ull,
+ 18078496064083774000ull, 5061704973974027299ull}},
+{{16411262758471145143ull, 982450165122137444ull,
+ 17986434061677329597ull, 6327131217467534124ull}},
+{{2067334374379379813ull, 5839748724830059710ull,
+ 4036298503387110380ull, 7908914021834417656ull}},
+{{15127142039269276095ull, 12873214989873563126ull,
+ 2522686564616943987ull, 4943071263646511035ull}},
+{{9685555512231819311ull, 11479832718914566004ull,
+ 16988416261053343696ull, 6178839079558138793ull}},
+{{12106944390289774138ull, 14349790898643207505ull,
+ 7400462271034515908ull, 7723548849447673492ull}},
+{{649311216290026981ull, 18191991348506780499ull,
+ 13848660956251348250ull, 4827218030904795932ull}},
+{{14646697075644697438ull, 13516617148778699815ull,
+ 17310826195314185313ull, 6034022538630994915ull}},
+{{13696685326128483893ull, 3060713380691211057ull,
+ 17026846725715343738ull, 7542528173288743644ull}},
+{{1642899301189220577ull, 6524631881359394815ull,
+ 1418407166717314028ull, 4714080108305464778ull}},
+{{15888682181768689433ull, 8155789851699243518ull,
+ 10996380995251418343ull, 5892600135381830972ull}},
+{{10637480690356085984ull, 5583051296196666494ull,
+ 13745476244064272929ull, 7365750169227288715ull}},
+{{4073478826090331671ull, 11590500138673221022ull,
+ 12570159286652953257ull, 9207187711534110894ull}},
+{{16380982321588621007ull, 326533559029681282ull,
+ 3244663535730707882ull, 5754492319708819309ull}},
+{{11252855865131000450ull, 9631538985641877411ull,
+ 8667515438090772756ull, 7193115399636024136ull}},
+{{9454383812986362659ull, 12039423732052346764ull,
+ 10834394297613465945ull, 8991394249545030170ull}},
+{{15132361919971252470ull, 607110804891634871ull,
+ 11383182454435804120ull, 5619621405965643856ull}},
+{{14303766381536677683ull, 758888506114543589ull,
+ 14228978068044755150ull, 7024526757457054820ull}},
+{{4044649921638683392ull, 10171982669497955295ull,
+ 17786222585055943937ull, 8780658446821318525ull}},
+{{9445435228665258976ull, 17886704214504691819ull,
+ 13422232124873658912ull, 5487911529263324078ull}},
+{{7195108017404185816ull, 3911636194421313158ull,
+ 7554418119237297833ull, 6859889411579155098ull}},
+{{18217257058610008078ull, 9501231261454029351ull,
+ 219650612191846483ull, 8574861764473943873ull}},
+{{18303314689272336905ull, 3632426529195074392ull,
+ 11666496678688373812ull, 5359288602796214920ull}},
+{{4432399287880869515ull, 4540533161493842991ull,
+ 14583120848360467265ull, 6699110753495268650ull}},
+{{928813091423698990ull, 10287352470294691643ull,
+ 9005529023595808273ull, 8373888441869085813ull}},
+{{16721409246635669533ull, 17958810340002652036ull,
+ 7934298648961074122ull, 5233680276168178633ull}},
+{{2455017484585035300ull, 13225140888148539238ull,
+ 14529559329628730557ull, 6542100345210223291ull}},
+{{12292143892586069933ull, 2696368054903510335ull,
+ 13550263143608525293ull, 8177625431512779114ull}},
+{{14600118960507375564ull, 3991073043528387911ull,
+ 13080600483182716212ull, 5111015894695486946ull}},
+{{13638462682206831551ull, 4988841304410484889ull,
+ 7127378567123619457ull, 6388769868369358683ull}},
+{{3213020297476375727ull, 10847737648940494016ull,
+ 4297537190477136417ull, 7985962335461698354ull}},
+{{2008137685922734829ull, 18309051076656278520ull,
+ 7297646762475598164ull, 4991226459663561471ull}},
+{{2510172107403418537ull, 4439569772110796534ull,
+ 4510372434667109802ull, 6239033074579451839ull}},
+{{12361087171109048979ull, 14772834251993271475ull,
+ 1026279524906499348ull, 7798791343224314799ull}},
+{{5419836472729461660ull, 9649370641018864ull, 7558953730707643949ull,
+ 4874244589515196749ull}},
+{{6774795590911827075ull, 4623747731728661484ull,
+ 14060378181811942840ull, 6092805736893995936ull}},
+{{8468494488639783843ull, 5779684664660826855ull,
+ 17575472727264928550ull, 7616007171117494920ull}},
+{{12210338083040946758ull, 17447360970695180496ull,
+ 10984670454540580343ull, 4760004481948434325ull}},
+{{15262922603801183448ull, 17197515194941587716ull,
+ 18342524086603113333ull, 5950005602435542906ull}},
+{{631909181041927693ull, 7661835938394820934ull,
+ 13704783071399115859ull, 7437507003044428633ull}},
+{{14230001293433368521ull, 2482804452283069131ull,
+ 1647960391983365556ull, 4648441876902767896ull}},
+{{13175815598364322747ull, 3103505565353836414ull,
+ 2059950489979206945ull, 5810552346128459870ull}},
+{{7246397461100627625ull, 8491067975119683422ull,
+ 11798310149328784489ull, 7263190432660574837ull}},
+{{18281368863230560339ull, 15225520987326992181ull,
+ 912829631378816899ull, 9078988040825718547ull}},
+{{13731698548732794164ull, 7210107607865676161ull,
+ 16711419584107618226ull, 5674367525516074091ull}},
+{{3329565130633828993ull, 18236006546686871010ull,
+ 16277588461707134878ull, 7092959406895092614ull}},
+{{13385328450147062049ull, 13571636146503812954ull,
+ 11123613540279142790ull, 8866199258618865768ull}},
+{{12977516299769301685ull, 3870586573137495192ull,
+ 6952258462674464244ull, 5541374536636791105ull}},
+{{16221895374711627106ull, 4838233216421868990ull,
+ 13302009096770468209ull, 6926718170795988881ull}},
+{{11053997181534758074ull, 10659477538954724142ull,
+ 2792453315680921549ull, 8658397713494986102ull}},
+{{2297062220031835893ull, 8968016471060396541ull,
+ 15580341377582739680ull, 5411498570934366313ull}},
+{{7483013793467182770ull, 11210020588825495676ull,
+ 5640368666696260888ull, 6764373213667957892ull}},
+{{9353767241833978462ull, 14012525736031869595ull,
+ 7050460833370326110ull, 8455466517084947365ull}},
+{{3540261516932542587ull, 4146142566592530593ull,
+ 6712381030070147771ull, 5284666573178092103ull}},
+{{9037012914593066138ull, 570992189813275337ull, 3778790269160296810ull,
+ 6605833216472615129ull}},
+{{15907952161668720576ull, 9937112274121369979ull,
+ 9335173854877758916ull, 8257291520590768911ull}},
+{{7636627091829256408ull, 15434067208180632045ull,
+ 12752012686939681178ull, 5160807200369230569ull}},
+{{14157469883213958414ull, 10069211973371014248ull,
+ 2104957803392437761ull, 6451009000461538212ull}},
+{{17696837354017448017ull, 17198200985141155714ull,
+ 2631197254240547201ull, 8063761250576922765ull}},
+{{15672209364688292915ull, 3831346588072140465ull,
+ 3950341293114035953ull, 5039850781610576728ull}},
+{{5755203650578202432ull, 9400869253517563486ull,
+ 4937926616392544941ull, 6299813477013220910ull}},
+{{16417376600077528847ull, 16362772585324342261ull,
+ 15395780307345456984ull, 7874766846266526137ull}},
+{{12566703384262149482ull, 10226732865827713913ull,
+ 2704833664449828759ull, 4921729278916578836ull}},
+{{1873321175045523140ull, 8171730063857254488ull,
+ 3381042080562285949ull, 6152161598645723545ull}},
+{{2341651468806903925ull, 14826348598248956014ull,
+ 8837988619130245340ull, 7690201998307154431ull}},
+{{15298590223286478665ull, 43095837050821700ull,
+ 12441271914597485194ull, 4806376248941971519ull}},
+{{676493705398546716ull, 9277241833168302934ull,
+ 10939903874819468588ull, 6007970311177464399ull}},
+{{10068989168602959202ull, 11596552291460378667ull,
+ 9063193825096947831ull, 7509962888971830499ull}},
+{{3987275221163155550ull, 14165374209803818523ull,
+ 3358653131471898442ull, 4693726805607394062ull}},
+{{372408008026556533ull, 8483345725399997346ull,
+ 13421688451194648861ull, 5867158507009242577ull}},
+{{9688882046887971474ull, 15215868175177384586ull,
+ 2942052508711147364ull, 7333948133761553222ull}},
+{{2887730521755188535ull, 573091145262179117ull,
+ 12900937672743710014ull, 9167435167201941527ull}},
+{{4110674585310686786ull, 14193240021071025660ull,
+ 14980615073105900614ull, 5729646979501213454ull}},
+{{5138343231638358483ull, 8518177989484006267ull,
+ 9502396804527599960ull, 7162058724376516818ull}},
+{{1811243021120560199ull, 10647722486855007834ull,
+ 2654623968804724142ull, 8952573405470646023ull}},
+{{5743712906627738029ull, 2043140535856991992ull,
+ 8576669008144034445ull, 5595358378419153764ull}},
+{{7179641133284672536ull, 7165611688248627894ull,
+ 10720836260180043056ull, 6994197973023942205ull}},
+{{18197923453460616478ull, 8957014610310784867ull,
+ 18012731343652441724ull, 8742747466279927756ull}},
+{{9067859149199191347ull, 14821506168299016350ull,
+ 2034585052928000269ull, 5464217166424954848ull}},
+{{2111451899644213375ull, 4691824655091606726ull,
+ 2543231316160000337ull, 6830271458031193560ull}},
+{{11862686911410042527ull, 10476466837291896311ull,
+ 3179039145200000421ull, 8537839322538991950ull}},
+{{14331708347272358436ull, 8853634782521129146ull,
+ 15821957521032163975ull, 5336149576586869968ull}},
+{{8691263397235672236ull, 6455357459724023529ull,
+ 1330702827580653353ull, 6670186970733587461ull}},
+{{15475765264971978199ull, 12680882843082417315ull,
+ 6275064552903204595ull, 8337733713416984326ull}},
+{{7366510281393792423ull, 5619708767712816870ull,
+ 17756973400846666584ull, 5211083570885615203ull}},
+{{18431509888597016336ull, 7024635959641021087ull,
+ 17584530732630945326ull, 6513854463607019004ull}},
+{{18427701342318882516ull, 18004166986406052167ull,
+ 3533919342079130041ull, 8142318079508773756ull}},
+{{18434842366590383429ull, 4335075338862700748ull,
+ 11432071625654232084ull, 5088948799692983597ull}},
+{{4596808884528427670ull, 5418844173578375936ull, 455031476785626393ull,
+ 6361185999616229497ull}},
+{{5746011105660534587ull, 11385241235400357824ull,
+ 5180475364409420895ull, 7951482499520286871ull}},
+{{3591256941037834117ull, 14033304799766305496ull,
+ 10155326130396969915ull, 4969676562200179294ull}},
+{{4489071176297292646ull, 12929944981280493966ull,
+ 3470785626141436586ull, 6212095702750224118ull}},
+{{14834711007226391616ull, 6939059189745841649ull,
+ 13561854069531571541ull, 7765119628437780147ull}},
+{{2354165351875412904ull, 6642755002804844983ull,
+ 6170315784243538261ull, 4853199767773612592ull}},
+{{16777764745126429842ull, 12915129771933444132ull,
+ 7712894730304422826ull, 6066499709717015740ull}},
+{{2525461857698485686ull, 6920540178062029358ull,
+ 9641118412880528533ull, 7583124637146269675ull}},
+{{15413471716343717266ull, 6631180620502462300ull,
+ 3719855998836636381ull, 4739452898216418547ull}},
+{{820095571720094967ull, 12900661794055465780ull, 38133980118407572ull,
+ 5924316122770523184ull}},
+{{1025119464650118708ull, 16125827242569332225ull, 47667475148009465ull,
+ 7405395153463153980ull}},
+{{12169914711474793953ull, 3161112998964750784ull,
+ 9253164208822281724ull, 4628371970914471237ull}},
+{{15212393389343492441ull, 3951391248705938480ull,
+ 16178141279455240059ull, 5785464963643089046ull}},
+{{568747662969813935ull, 327553042455035197ull, 10999304562464274266ull,
+ 7231831204553861308ull}},
+{{5322620597139655322ull, 9632813339923569804ull,
+ 13749130703080342832ull, 9039789005692326635ull}},
+{{12550009910067060385ull, 6020508337452231127ull,
+ 6287363680211520318ull, 5649868128557704147ull}},
+{{11075826369156437577ull, 16749007458670064717ull,
+ 3247518581837012493ull, 7062335160697130184ull}},
+{{9724906163383259ull, 7101201268055417185ull, 4059398227296265617ull,
+ 8827918950871412730ull}},
+{{11535293112420584297ull, 15967465838603105500ull,
+ 7148809910487553914ull, 5517449344294632956ull}},
+{{14419116390525730371ull, 10735960261399106067ull,
+ 8936012388109442393ull, 6896811680368291195ull}},
+{{13412209469729775060ull, 18031636345176270488ull,
+ 6558329466709415087ull, 8621014600460363994ull}},
+{{8382630918581109413ull, 18187301743376250911ull,
+ 8710641935120772333ull, 5388134125287727496ull}},
+{{5866602629798998862ull, 8899069123938149927ull,
+ 10888302418900965417ull, 6735167656609659370ull}},
+{{2721567268821360673ull, 15735522423350075313ull,
+ 4387005986771430963ull, 8418959570762074213ull}},
+{{13230194589081820181ull, 7528858505380103118ull,
+ 5047721750945838304ull, 5261849731726296383ull}},
+{{7314371199497499418ull, 9411073131725128898ull,
+ 1697966170254909976ull, 6577312164657870479ull}},
+{{18366336036226650080ull, 11763841414656411122ull,
+ 15957515768100801182ull, 8221640205822338098ull}},
+{{16090646041069044204ull, 2740714865732869047ull,
+ 14585133373490388643ull, 5138525128638961311ull}},
+{{15501621532908917351ull, 17260951637448250021ull,
+ 13619730698435597899ull, 6423156410798701639ull}},
+{{5541968860853982977ull, 16964503528382924623ull,
+ 12412977354617109470ull, 8028945513498377049ull}},
+{{10381259565674821217ull, 5991128686811939985ull,
+ 840581818994611563ull, 5018090945936485656ull}},
+{{17588260475520914425ull, 2877224840087537077ull,
+ 1050727273743264454ull, 6272613682420607070ull}},
+{{8150267539118979319ull, 12819903086964197155ull,
+ 10536781129033856375ull, 7840767103025758837ull}},
+{{2788074202735668122ull, 14929968456993705078ull,
+ 8891331214859854186ull, 4900479439391099273ull}},
+{{12708464790274360961ull, 9439088534387355539ull,
+ 15725850037002205637ull, 6125599299238874091ull}},
+{{11273894969415563297ull, 16410546686411582328ull,
+ 15045626527825369142ull, 7656999124048592614ull}},
+{{7046184355884727061ull, 5644905660579851051ull,
+ 4791830561463467810ull, 4785624452530370384ull}},
+{{4196044426428520922ull, 16279504112579589622ull,
+ 5989788201829334762ull, 5982030565662962980ull}},
+{{14468427569890426960ull, 11126008103869711219ull,
+ 7487235252286668453ull, 7477538207078703725ull}},
+{{6736924221967822898ull, 9259598074132263464ull,
+ 6985365041892861735ull, 4673461379424189828ull}},
+{{8421155277459778623ull, 6962811574237941426ull,
+ 8731706302366077169ull, 5841826724280237285ull}},
+{{1303072059969947470ull, 13315200486224814687ull,
+ 15526318896384984365ull, 7302283405350296606ull}},
+{{15463898130244598050ull, 2808942552498854646ull,
+ 10184526583626454649ull, 9127854256687870758ull}},
+{{5053250312975485877ull, 13284804141380253914ull,
+ 1753643096339146251ull, 5704908910429919224ull}},
+{{15539934928074133155ull, 11994319158297929488ull,
+ 2192053870423932814ull, 7131136138037399030ull}},
+{{978174586383114827ull, 5769526911017636053ull,
+ 11963439374884691826ull, 8913920172546748787ull}},
+{{2917202125703140719ull, 8217640337813410437ull,
+ 5171306600089238439ull, 5571200107841717992ull}},
+{{8258188675556313803ull, 5660364403839375142ull,
+ 6464133250111548049ull, 6964000134802147490ull}},
+{{1099363807590616445ull, 11687141523226606832ull,
+ 17303538599494210869ull, 8705000168502684362ull}},
+{{687102379744135279ull, 9610306461230323222ull,
+ 15426397643111269697ull, 5440625105314177726ull}},
+{{10082250011534944906ull, 16624569094965291931ull,
+ 10059625017034311313ull, 6800781381642722158ull}},
+{{7991126495991293228ull, 6945653313424451202ull,
+ 3351159234438113334ull, 8500976727053402698ull}},
+{{9606140078421946172ull, 18176091376172445713ull,
+ 6706160539951208737ull, 5313110454408376686ull}},
+{{16619361116454820619ull, 8885056164933393429ull,
+ 17606072711793786730ull, 6641388068010470857ull}},
+{{6939143340286362061ull, 1882948169311965979ull,
+ 8172532834460069701ull, 8301735085013088572ull}},
+{{2031121578465282337ull, 3482685615033672689ull,
+ 14331205058392319371ull, 5188584428133180357ull}},
+{{7150587991508990825ull, 18188415074074254573ull,
+ 4078948267708235501ull, 6485730535166475447ull}},
+{{13549921007813626435ull, 8900460787310654504ull,
+ 486999316207906473ull, 8107163168958094309ull}},
+{{8468700629883516522ull, 17092003038137628825ull,
+ 2610217581843635497ull, 5066976980598808943ull}},
+{{15197561805781783556ull, 7529945742389872319ull,
+ 17097830032586708084ull, 6333721225748511178ull}},
+{{14385266238799841541ull, 9412432177987340399ull,
+ 12148915503878609297ull, 7917151532185638973ull}},
+{{15908320426890982819ull, 17411985157310557509ull,
+ 9898915199137824762ull, 4948219707616024358ull}},
+{{6050342478331564812ull, 12541609409783421079ull,
+ 3150271962067505145ull, 6185274634520030448ull}},
+{{2951242079487068111ull, 1841953706947112637ull,
+ 3937839952584381432ull, 7731593293150038060ull}},
+{{4150369308893111522ull, 1151221066841945398ull,
+ 11684522007220014203ull, 4832245808218773787ull}},
+{{14411333672971165210ull, 15274084388834595459ull,
+ 9993966490597629849ull, 6040307260273467234ull}},
+{{13402481072786568608ull, 5257547430761080612ull,
+ 3269086076392261504ull, 7550384075341834043ull}},
+{{17599922707346381188ull, 3285967144225675382ull,
+ 18184079862241021104ull, 4718990047088646276ull}},
+{{12776531347328200677ull, 4107458930282094228ull,
+ 4283355754091724764ull, 5898737558860807846ull}},
+{{15970664184160250846ull, 5134323662852617785ull,
+ 14577566729469431763ull, 7373421948576009807ull}},
+{{6128272174918149846ull, 1806218560138384328ull,
+ 13610272393409401800ull, 9216777435720012259ull}},
+{{3830170109323843654ull, 1128886600086490205ull,
+ 6200577236667182173ull, 5760485897325007662ull}},
+{{9399398655082192471ull, 6022794268535500660ull,
+ 16974093582688753524ull, 7200607371656259577ull}},
+{{11749248318852740589ull, 7528492835669375825ull,
+ 7382558923078778193ull, 9000759214570324472ull}},
+{{425751171641881012ull, 16234523068361829651ull,
+ 4614099326924236370ull, 5625474509106452795ull}},
+{{14367247019834514977ull, 11069781798597511255ull,
+ 1155938140227907559ull, 7031843136383065994ull}},
+{{13347372756365755817ull, 9225541229819501165ull,
+ 10668294712139660257ull, 8789803920478832492ull}},
+{{10647950981942291338ull, 17295178314705657988ull,
+ 15891056231942063468ull, 5493627450299270307ull}},
+{{13309938727427864172ull, 3172228819672520869ull,
+ 15252134271500191432ull, 6867034312874087884ull}},
+{{2802365354002666503ull, 3965286024590651087ull, 618423765665687674ull,
+ 8583792891092609856ull}},
+{{8669007373892748421ull, 7089989783796544833ull, 386514853541054796ull,
+ 5364870556932881160ull}},
+{{15447945235793323430ull, 8862487229745681041ull,
+ 483143566926318495ull, 6706088196166101450ull}},
+{{5474873489459490575ull, 6466423018754713398ull,
+ 9827301495512673927ull, 8382610245207626812ull}},
+{{17256853986194345322ull, 10959043414362777729ull,
+ 15365435471550197012ull, 5239131403254766757ull}},
+{{7736009427460767940ull, 13698804267953472162ull,
+ 5371736284155582553ull, 6548914254068458447ull}},
+{{446639747471184117ull, 3288447279659676491ull, 2102984336767090288ull,
+ 8186142817585573059ull}},
+{{16420050906665347737ull, 2055279549787297806ull,
+ 17455266274975289094ull, 5116339260990983161ull}},
+{{11301691596476908863ull, 11792471474088898066ull,
+ 7984024788436947655ull, 6395424076238728952ull}},
+{{4903742458741360271ull, 10128903324183734679ull,
+ 9980030985546184569ull, 7994280095298411190ull}},
+{{9982368064354432026ull, 17859779623683303934ull,
+ 1625833347538977451ull, 4996425059561506994ull}},
+{{3254588043588264224ull, 17713038511176742014ull,
+ 11255663721278497622ull, 6245531324451883742ull}},
+{{13291607091340106088ull, 12917926102116151709ull,
+ 4846207614743346220ull, 7806914155564854678ull}},
+{{10613097441301260257ull, 17297075850677370626ull,
+ 16863937814496755099ull, 4879321347228034173ull}},
+{{4042999764771799513ull, 17009658794919325379ull,
+ 7244864212838780162ull, 6099151684035042717ull}},
+{{442063687537361487ull, 12038701456794380916ull,
+ 13667766284475863107ull, 7623939605043803396ull}},
+{{9499661841565626738ull, 5218345401282794120ull,
+ 17765725964652190250ull, 4764962253152377122ull}},
+{{11874577301957033422ull, 15746303788458268458ull,
+ 12983785418960462004ull, 5956202816440471403ull}},
+{{5619849590591515969ull, 1236135661863283957ull,
+ 11618045755273189602ull, 7445253520550589254ull}},
+{{5818249003333391433ull, 5384270807091940377ull,
+ 2649592578618355597ull, 4653283450344118284ull}},
+{{11884497272594127195ull, 11342024527292313375ull,
+ 3311990723272944496ull, 5816604312930147855ull}},
+{{10243935572315271090ull, 14177530659115391719ull,
+ 17975046459373344332ull, 7270755391162684818ull}},
+{{8193233446966700958ull, 17721913323894239649ull,
+ 13245436037361904607ull, 9088444238953356023ull}},
+{{16649985950422657859ull, 17993724855074981636ull,
+ 15195926550992272235ull, 5680277649345847514ull}},
+{{2365738364318770708ull, 17880470050416339142ull,
+ 9771536151885564486ull, 7100347061682309393ull}},
+{{12180544992253239193ull, 13127215526165648119ull,
+ 16826106208284343512ull, 8875433827102886741ull}},
+{{14530369647799356352ull, 8204509703853530074ull,
+ 12822159389391408647ull, 5547146141939304213ull}},
+{{8939590022894419631ull, 5643951111389524689ull,
+ 2192641181457097097ull, 6933932677424130267ull}},
+{{15786173547045412443ull, 11666624907664293765ull,
+ 16575859532103535083ull, 8667415846780162833ull}},
+{{12172201476117076729ull, 4985797558076489651ull,
+ 3442383179923627571ull, 5417134904237601771ull}},
+{{10603565826718958007ull, 1620560929168224160ull,
+ 18138037030186698176ull, 6771418630297002213ull}},
+{{13254457283398697509ull, 2025701161460280200ull,
+ 8837488232451209008ull, 8464273287871252767ull}},
+{{8284035802124185943ull, 1266063225912675125ull,
+ 12440959172923087486ull, 5290170804919532979ull}},
+{{14966730771082620333ull, 10805951069245619714ull,
+ 10939512947726471453ull, 6612713506149416224ull}},
+{{9485041426998499608ull, 18119124854984412547ull,
+ 13674391184658089316ull, 8265891882686770280ull}},
+{{3622307882660368303ull, 2101080997510482034ull,
+ 8546494490411305823ull, 5166182426679231425ull}},
+{{13751256890180236187ull, 16461409302170266254ull,
+ 15294804131441520182ull, 6457728033349039281ull}},
+{{7965699075870519426ull, 11353389590858057010ull,
+ 5283447109019736516ull, 8072160041686299102ull}},
+{{9590247940846462545ull, 16319240531141061439ull,
+ 17137212498419499034ull, 5045100026053936938ull}},
+{{7376123907630690277ull, 11175678627071550991ull,
+ 12198143586169597985ull, 6306375032567421173ull}},
+{{4608468866110974942ull, 134540228557275027ull, 1412621427429833770ull,
+ 7882968790709276467ull}},
+{{574450032105665387ull, 4695773661275684796ull,
+ 17023789456639503770ull, 4926855494193297791ull}},
+{{718062540132081734ull, 15093089113449381803ull,
+ 16668050802371991808ull, 6158569367741622239ull}},
+{{14732636230447265879ull, 419617318102175637ull,
+ 16223377484537601857ull, 7698211709677027799ull}},
+{{11513740653243235127ull, 11791475869882329533ull,
+ 17057139955477083016ull, 4811382318548142374ull}},
+{{557117761271880196ull, 14739344837352911917ull,
+ 12098052907491577962ull, 6014227898185177968ull}},
+{{5308083220017238149ull, 9200809009836364088ull,
+ 15122566134364472453ull, 7517784872731472460ull}},
+{{3317552012510773843ull, 8056348640361421507ull, 228231797123019475ull,
+ 4698615545457170288ull}},
+{{17981998070920631016ull, 5458749782024388979ull,
+ 285289746403774344ull, 5873269431821462860ull}},
+{{17865811570223400866ull, 6823437227530486224ull,
+ 356612183004717930ull, 7341586789776828575ull}},
+{{3885520389069699467ull, 17752668571267883589ull,
+ 14280823284038061124ull, 9176983487221035718ull}},
+{{4734293252382256119ull, 1872045820187651435ull,
+ 4313828534096400299ull, 5735614679513147324ull}},
+{{1306180547050432244ull, 16175115330516728006ull,
+ 5392285667620500373ull, 7169518349391434155ull}},
+{{10856097720667816113ull, 6383836107863746295ull,
+ 2128671066098237563ull, 8961897936739292694ull}},
+{{13702590103058466927ull, 1684054558201147482ull,
+ 15165477471593562189ull, 5601186210462057933ull}},
+{{7904865591968307851ull, 6716754216178822257ull,
+ 5121788784209789024ull, 7001482763077572417ull}},
+{{14492768008387772717ull, 8395942770223527821ull,
+ 11013921998689624184ull, 8751853453846965521ull}},
+{{11363823014456051900ull, 5247464231389704888ull,
+ 18412916295249484875ull, 5469908408654353450ull}},
+{{14204778768070064875ull, 1947644270809743206ull,
+ 13792773332207080286ull, 6837385510817941813ull}},
+{{8532601423232805286ull, 11657927375366954816ull,
+ 3405908609976686645ull, 8546731888522427267ull}},
+{{5332875889520503304ull, 9592047618818040712ull,
+ 18269593945731286817ull, 5341707430326517041ull}},
+{{6666094861900629130ull, 16601745541949938794ull,
+ 9001934376881944809ull, 6677134287908146302ull}},
+{{17555990614230562220ull, 6917123872155259780ull,
+ 2029045934247655204ull, 8346417859885182878ull}},
+{{1749122097039325580ull, 13546574456951813171ull,
+ 15103211764186948214ull, 5216511162428239298ull}},
+{{16021460676581320687ull, 7709846034334990655ull,
+ 9655642668378909460ull, 6520638953035299123ull}},
+{{15415139827299262954ull, 9637307542918738319ull,
+ 7457867317046248921ull, 8150798691294123904ull}},
+{{16551991419703121203ull, 17552532260392681209ull,
+ 4661167073153905575ull, 5094249182058827440ull}},
+{{6854931219346737791ull, 17328979307063463608ull,
+ 5826458841442381969ull, 6367811477573534300ull}},
+{{8568664024183422239ull, 7826166078547165798ull,
+ 7283073551802977462ull, 7959764346966917875ull}},
+{{743728996687250995ull, 279667780664590720ull, 2246077960663166962ull,
+ 4974852716854323672ull}},
+{{929661245859063744ull, 9572956762685514208ull, 2807597450828958702ull,
+ 6218565896067904590ull}},
+{{1162076557323829680ull, 2742823916502116952ull,
+ 12732868850390974186ull, 7773207370084880737ull}},
+{{726297848327393550ull, 6325950966241210999ull, 1040514003853277010ull,
+ 4858254606303050461ull}},
+{{14742930365691405650ull, 17130810744656289556ull,
+ 5912328523243984166ull, 6072818257878813076ull}},
+{{18428662957114257062ull, 12190141393965586137ull,
+ 7390410654054980208ull, 7591022822348516345ull}},
+{{4600385320555328808ull, 7618838371228491336ull,
+ 16148221704852832390ull, 4744389263967822715ull}},
+{{5750481650694161010ull, 300175927180838362ull,
+ 15573591112638652584ull, 5930486579959778394ull}},
+{{16411474100222477070ull, 375219908976047952ull,
+ 10243616853943539922ull, 7413108224949722993ull}},
+{{10257171312639048169ull, 4846198461537417874ull,
+ 17931475579783182211ull, 4633192640593576870ull}},
+{{3598092103944034403ull, 1446062058494384439ull,
+ 13190972437874201956ull, 5791490800741971088ull}},
+{{18332673185212206716ull, 1807577573117980548ull,
+ 16488715547342752445ull, 7239363500927463860ull}},
+{{4469097407805706779ull, 6871157984824863590ull,
+ 2164150360468888940ull, 9049204376159329826ull}},
+{{16628243935160730449ull, 13517845777370315551ull,
+ 5964279993720443491ull, 5655752735099581141ull}},
+{{16173618900523525157ull, 12285621203285506535ull,
+ 12067036010577942268ull, 7069690918874476426ull}},
+{{15605337607227018542ull, 15357026504106883169ull,
+ 5860422976367652027ull, 8837113648593095533ull}},
+{{2835806976875804733ull, 7292298555853108029ull,
+ 5968607369443476469ull, 5523196030370684708ull}},
+{{8156444739522143820ull, 13727059213243772940ull,
+ 7460759211804345586ull, 6903995037963355885ull}},
+{{10195555924402679775ull, 7935451979699940367ull,
+ 13937635033182819887ull, 8629993797454194856ull}},
+{{13289751480392756715ull, 11877186514953544585ull,
+ 8711021895739262429ull, 5393746123408871785ull}},
+{{2777131295208782182ull, 1011425088409767020ull,
+ 15500463388101465941ull, 6742182654261089731ull}},
+{{3471414119010977728ull, 5875967378939596679ull,
+ 14763893216699444522ull, 8427728317826362164ull}},
+{{9087162852022942936ull, 8284165630264635828ull, 4061223582377018ull,
+ 5267330198641476353ull}},
+{{11358953565028678670ull, 1131835000976018977ull,
+ 4616762547905359177ull, 6584162748301845441ull}},
+{{363633901003684625ull, 6026479769647411626ull,
+ 10382639203309086875ull, 8230203435377306801ull}},
+{{4838957206554690795ull, 1460706846815938314ull,
+ 18018364548136649057ull, 5143877147110816750ull}},
+{{15272068545048139302ull, 6437569576947310796ull,
+ 13299583648316035513ull, 6429846433888520938ull}},
+{{643341607600622511ull, 12658647989611526400ull,
+ 7401107523540268583ull, 8037308042360651173ull}},
+{{402088504750389069ull, 14829184021148285856ull,
+ 6931535211426361816ull, 5023317526475406983ull}},
+{{502610630937986337ull, 89735952725805704ull, 4052732995855564367ull,
+ 6279146908094258729ull}},
+{{628263288672482921ull, 13947227996189420842ull,
+ 9677602263246843362ull, 7848933635117823411ull}},
+{{5004350573847689730ull, 13328703516045775930ull,
+ 3742658405315583149ull, 4905583521948639632ull}},
+{{15478810254164387970ull, 2825821339775056200ull,
+ 4678323006644478937ull, 6131979402435799540ull}},
+{{901768743995933346ull, 8143962693146208155ull, 5847903758305598671ull,
+ 7664974253044749425ull}},
+{{16704506529493316006ull, 12007505710857461952ull,
+ 15184154895009468929ull, 4790608908152968390ull}},
+{{2433889088157093391ull, 1174324083289663729ull,
+ 9756821581907060354ull, 5988261135191210488ull}},
+{{7654047378623754642ull, 10691277140966855469ull,
+ 12196026977383825442ull, 7485326418989013110ull}},
+{{7089622620853540604ull, 11293734231531672572ull,
+ 3010830842437502997ull, 4678329011868133194ull}},
+{{8862028276066925755ull, 282109734132427003ull,
+ 12986910589901654555ull, 5847911264835166492ull}},
+{{6465849326656269289ull, 14187695222947697466ull,
+ 16233638237377068193ull, 7309889081043958115ull}},
+{{17305683695175112419ull, 3899560973402458120ull,
+ 15680361778293947338ull, 9137361351304947644ull}},
+{{10816052309484445262ull, 7048911626803924229ull,
+ 576854074578941278ull, 5710850844565592278ull}},
+{{18131751405282944482ull, 18034511570359681094ull,
+ 9944439630078452405ull, 7138563555706990347ull}},
+{{13441317219748904794ull, 8708081407667437656ull,
+ 7818863519170677603ull, 8923204444633737934ull}},
+{{8400823262343065496ull, 3136707870578454583ull, 275103681054285598ull,
+ 5577002777896086209ull}},
+{{5889343059501443966ull, 13144256875077844037ull,
+ 4955565619745244901ull, 6971253472370107761ull}},
+{{11973364842804192862ull, 2595263038565141334ull,
+ 10806143043108944031ull, 8714066840462634701ull}},
+{{2871667008325232635ull, 8539568426744295190ull,
+ 9059682411156783971ull, 5446291775289146688ull}},
+{{12812955797261316601ull, 6062774515002981083ull,
+ 11324603013945979964ull, 6807864719111433360ull}},
+{{11404508728149257848ull, 7578468143753726354ull,
+ 14155753767432474955ull, 8509830898889291700ull}},
+{{11739503973520674059ull, 2430699580632385019ull,
+ 18070718141500072655ull, 5318644311805807312ull}},
+{{10062693948473454670ull, 16873432531072644986ull,
+ 4141653603165539202ull, 6648305389757259141ull}},
+{{3354995398737042529ull, 11868418626986030425ull,
+ 9788753022384311907ull, 8310381737196573926ull}},
+{{13626087170279121341ull, 5111918632652575063ull,
+ 1506284620562807038ull, 5193988585747858704ull}},
+{{12420922944421513772ull, 15613270327670494637ull,
+ 1882855775703508797ull, 6492485732184823380ull}},
+{{1691095625244728503ull, 5681529854305954585ull,
+ 2353569719629385997ull, 8115607165231029225ull}},
+{{12586149811846425074ull, 5856799168154915567ull,
+ 13000196120836836008ull, 5072254478269393265ull}},
+{{11121001246380643439ull, 7320998960193644459ull,
+ 2415187095763881298ull, 6340318097836741582ull}},
+{{9289565539548416394ull, 18374620737096831382ull,
+ 12242355906559627430ull, 7925397622295926977ull}},
+{{1194292443790372343ull, 6872451942258131710ull, 733943413958685288ull,
+ 4953373513934954361ull}},
+{{10716237591592741236ull, 8590564927822664637ull,
+ 5529115285875744514ull, 6191716892418692951ull}},
+{{18006983007918314449ull, 1514834122923554988ull,
+ 2299708088917292739ull, 7739646115523366189ull}},
+{{2030992343094170723ull, 17087672391323079532ull,
+ 3743160564787001913ull, 4837278822202103868ull}},
+{{2538740428867713403ull, 7524532433871685703ull,
+ 4678950705983752392ull, 6046598527752629835ull}},
+{{17008483591366805466ull, 9405665542339607128ull,
+ 1237002364052302586ull, 7558248159690787294ull}},
+{{10630302244604253417ull, 10490226982389642359ull,
+ 14608184532814852828ull, 4723905099806742058ull}},
+{{8676191787327928867ull, 13112783727987052949ull,
+ 9036858629163790227ull, 5904881374758427573ull}},
+{{15456925752587298987ull, 11779293641556428282ull,
+ 15907759304882125688ull, 7381101718448034466ull}},
+{{14272264613794449771ull, 7362058525972767676ull,
+ 14554035583978716459ull, 4613188574030021541ull}},
+{{17840330767243062214ull, 4590887139038571691ull,
+ 4357486424691231862ull, 5766485717537526927ull}},
+{{17688727440626439863ull, 14961980960652990422ull,
+ 835172012436651923ull, 7208107146921908659ull}},
+{{12887537263928274021ull, 14090790182388850124ull,
+ 14879023070827978616ull, 9010133933652385823ull}},
+{{17278082826809947071ull, 8806743863993031327ull,
+ 16216918446908568491ull, 5631333708532741139ull}},
+{{16985917515085045935ull, 6396743811563901255ull,
+ 15659462040208322710ull, 7039167135665926424ull}},
+{{16620710875428919514ull, 17219301801309652377ull,
+ 1127583476550851771ull, 8798958919582408031ull}},
+{{3470415269501992841ull, 8456220616604838784ull,
+ 7622268700485364213ull, 5499349324739005019ull}},
+{{4338019086877491051ull, 15181961789183436384ull,
+ 4916149857179317362ull, 6874186655923756274ull}},
+{{5422523858596863813ull, 9754080199624519672ull,
+ 15368559358328922511ull, 8592733319904695342ull}},
+{{3389077411623039883ull, 13013829152406406651ull,
+ 4993663580528188665ull, 5370458324940434589ull}},
+{{18071404819810963566ull, 2432228385225844601ull,
+ 10853765494087623736ull, 6713072906175543236ull}},
+{{8754197969481540746ull, 3040285481532305752ull,
+ 13567206867609529670ull, 8391341132719429045ull}},
+{{5471373730925962966ull, 15735236481239854807ull,
+ 10785347301469649995ull, 5244588207949643153ull}},
+{{2227531145230065804ull, 15057359583122430605ull,
+ 18093370145264450398ull, 6555735259937053941ull}},
+{{7396099949964970158ull, 9598327442048262448ull,
+ 8781654626298399286ull, 8194669074921317427ull}},
+{{4622562468728106349ull, 1387268632852776126ull,
+ 3182691132222805602ull, 5121668171825823392ull}},
+{{15001575122764908744ull, 10957457827920745965ull,
+ 3978363915278507002ull, 6402085214782279240ull}},
+{{4916910848173972218ull, 4473450248046156649ull,
+ 4972954894098133753ull, 8002606518477849050ull}},
+{{14602284326177202397ull, 14325121451097317665ull,
+ 7719782827238721499ull, 5001629074048655656ull}},
+{{4417797352439339284ull, 13294715795444259178ull,
+ 9649728534048401874ull, 6252036342560819570ull}},
+{{14745618727403949912ull, 7395022707450548164ull,
+ 2838788630705726535ull, 7815045428201024463ull}},
+{{18439383741482244503ull, 11539418219797674458ull,
+ 8691771921832160940ull, 4884403392625640289ull}},
+{{13825857639998029821ull, 14424272774747093073ull,
+ 15476400920717589079ull, 6105504240782050361ull}},
+{{3447263994715373564ull, 13418654950006478438ull,
+ 5510443095614822637ull, 7631880300977562952ull}},
+{{15989598051979272190ull, 10692502352967742975ull,
+ 3444026934759264148ull, 4769925188110976845ull}},
+{{15375311546546702333ull, 13365627941209678719ull,
+ 8916719686876468089ull, 5962406485138721056ull}},
+{{14607453414755990013ull, 2871976871229934687ull,
+ 11145899608595585112ull, 7453008106423401320ull}},
+{{16047187411863575614ull, 1794985544518709179ull,
+ 6966187255372240695ull, 4658130066514625825ull}},
+{{15447298246402081613ull, 16078789985930550186ull,
+ 13319420087642688772ull, 5822662583143282281ull}},
+{{10085750771147826209ull, 1651743408703636117ull,
+ 2814217054271197254ull, 7278328228929102852ull}},
+{{17218874482362170665ull, 11288051297734320954ull,
+ 3517771317838996567ull, 9097910286161378565ull}},
+{{15373482569903744570ull, 13972561088725032452ull,
+ 4504450082863066806ull, 5686193928850861603ull}},
+{{770109138670129096ull, 8242329324051514758ull, 1018876585151445604ull,
+ 7107742411063577004ull}},
+{{10186008460192437178ull, 10302911655064393447ull,
+ 1273595731439307005ull, 8884678013829471255ull}},
+{{13283784315261355092ull, 8745162793628939856ull,
+ 7713526359790648734ull, 5552923758643419534ull}},
+{{16604730394076693865ull, 1708081455181399012ull,
+ 418535912883535110ull, 6941154698304274418ull}},
+{{2309168918886315715ull, 11358473855831524574ull,
+ 9746541927959194695ull, 8676443372880343022ull}},
+{{15278288629586111034ull, 14016575187535784714ull,
+ 1479902686547108780ull, 5422777108050214389ull}},
+{{9874488750127862985ull, 17520718984419730893ull,
+ 6461564376611273879ull, 6778471385062767986ull}},
+{{16954796956087216635ull, 17289212712097275712ull,
+ 17300327507618868157ull, 8473089231328459982ull}},
+{{10596748097554510397ull, 13111600954274491272ull,
+ 6201018673834404694ull, 5295680769580287489ull}},
+{{13245935121943137996ull, 7166129155988338282ull,
+ 12362959360720393772ull, 6619600961975359361ull}},
+{{7334046865574146687ull, 8957661444985422853ull,
+ 1618641145618328503ull, 8274501202469199202ull}},
+{{6889622300197535632ull, 12516067430756971139ull,
+ 5623336734438843218ull, 5171563251543249501ull}},
+{{4000341856819531635ull, 6421712251591438116ull,
+ 11640856936475941927ull, 6464454064429061876ull}},
+{{5000427321024414544ull, 3415454296061909741ull,
+ 14551071170594927409ull, 8080567580536327345ull}},
+{{5431110084853953042ull, 13663873981107163348ull,
+ 2176890453980747774ull, 5050354737835204591ull}},
+{{6788887606067441303ull, 7856470439529178377ull,
+ 16556171122758098430ull, 6312943422294005738ull}},
+{{13097795526011689532ull, 597216012556697163ull,
+ 11471841866592847230ull, 7891179277867507173ull}},
+{{5880279194543612006ull, 14208318063130099439ull,
+ 9475744175834223470ull, 4931987048667191983ull}},
+{{2738662974752127103ull, 8537025542057848491ull,
+ 7232994201365391434ull, 6164983810833989979ull}},
+{{17258386773722322591ull, 1447909890717534805ull,
+ 4429556733279351389ull, 7706229763542487474ull}},
+{{13092334742790145571ull, 3210786690912153205ull,
+ 7380158976726982522ull, 4816393602214054671ull}},
+{{2530360373205518252ull, 13236855400494967315ull,
+ 4613512702481340248ull, 6020492002767568339ull}},
+{{16998008521789061527ull, 16546069250618709143ull,
+ 1155204859674287406ull, 7525615003459460424ull}},
+{{17541284353759245311ull, 5729607263209305310ull,
+ 722003037296429629ull, 4703509377162162765ull}},
+{{12703233405344280830ull, 11773695097439019542ull,
+ 5514189815047924940ull, 5879386721452703456ull}},
+{{6655669719825575229ull, 14717118871798774428ull,
+ 6892737268809906175ull, 7349233401815879320ull}},
+{{8319587149781969037ull, 13784712571321080131ull,
+ 8615921586012382719ull, 9186541752269849150ull}},
+{{2893898959400036696ull, 15532974384716756938ull,
+ 773264972830351295ull, 5741588595168655719ull}},
+{{12840745736104821678ull, 14804531962468558268ull,
+ 14801639271320102831ull, 7176985743960819648ull}},
+{{16050932170131027097ull, 13893978934658309931ull,
+ 55305015440576923ull, 8971232179951024561ull}},
+{{7725989597118197984ull, 6377893824947749755ull,
+ 11563780680718830337ull, 5607020112469390350ull}},
+{{5045800977970359576ull, 12584053299612075098ull,
+ 5231353814043762113ull, 7008775140586737938ull}},
+{{15530623259317725278ull, 1895008569232930160ull,
+ 15762564304409478450ull, 8760968925733422422ull}},
+{{9706639537073578299ull, 5796066374197969254ull,
+ 5239916671828536127ull, 5475605578583389014ull}},
+{{2909927384487197065ull, 2633396949320073664ull,
+ 15773267876640445967ull, 6844506973229236267ull}},
+{{3637409230608996332ull, 17126804241932255792ull,
+ 15104898827373169554ull, 8555633716536545334ull}},
+{{2273380769130622707ull, 15315938669635047774ull,
+ 4828875748680843067ull, 5347271072835340834ull}},
+{{12065097998268054192ull, 14533237318616421813ull,
+ 15259466722705829642ull, 6684088841044176042ull}},
+{{1246314442552904028ull, 8943174611415751459ull,
+ 9850961366527511245ull, 8355111051305220053ull}},
+{{16919847591091422682ull, 7895327141348538613ull,
+ 8462693863293388480ull, 5221944407065762533ull}},
+{{7314751433582114640ull, 9869158926685673267ull,
+ 15190053347544123504ull, 6527430508832203166ull}},
+{{4531753273550255396ull, 12336448658357091584ull,
+ 9764194647575378572ull, 8159288136040253958ull}},
+{{2832345795968909623ull, 16933652448327958048ull,
+ 1490935636307223703ull, 5099555085025158724ull}},
+{{3540432244961137028ull, 16555379541982559656ull,
+ 1863669545384029629ull, 6374443856281448405ull}},
+{{4425540306201421285ull, 6859166372196035858ull,
+ 6941272950157424941ull, 7968054820351810506ull}},
+{{7377648709803276207ull, 6592821991836216363ull,
+ 8949981612275778492ull, 4980034262719881566ull}},
+{{4610374868826707355ull, 8241027489795270454ull,
+ 1964104978489947307ull, 6225042828399851958ull}},
+{{14986340622888160002ull, 5689598343816700163ull,
+ 11678503259967209942ull, 7781303535499814947ull}},
+{{7060619880091406049ull, 17391057020167601314ull,
+ 4993221528265812261ull, 4863314709687384342ull}},
+{{18049146886969033370ull, 7903763219927337930ull,
+ 15464898947187041135ull, 6079143387109230427ull}},
+{{13338061571856515904ull, 5268018006481784509ull,
+ 14719437665556413515ull, 7598929233886538034ull}},
+{{10642131491624016392ull, 986668244837421366ull,
+ 13811334559400146351ull, 4749330771179086271ull}},
+{{4079292327675244682ull, 15068393361328940420ull,
+ 12652482180822795034ull, 5936663463973857839ull}},
+{{5099115409594055852ull, 9612119664806399717ull,
+ 11203916707601105889ull, 7420829329967322299ull}},
+{{5492790140209978860ull, 17536789836572469583ull,
+ 4696604933036997228ull, 4638018331229576437ull}},
+{{2254301656835085671ull, 3474243222006035363ull,
+ 10482442184723634440ull, 5797522914036970546ull}},
+{{16652935126326020800ull, 4342804027507544203ull,
+ 3879680694049767242ull, 7246903642546213183ull}},
+{{16204482889480138096ull, 14651877071239206062ull,
+ 237914849134821148ull, 9058629553182766479ull}},
+{{5516115787497698406ull, 18380795206379279597ull,
+ 7066225808350345073ull, 5661643470739229049ull}},
+{{11506830752799510912ull, 9140935952691935784ull,
+ 13444468278865319246ull, 7077054338424036311ull}},
+{{14383538440999388640ull, 2202797904010143922ull,
+ 12193899330154261154ull, 8846317923030045389ull}},
+{{13601397544052005804ull, 5988434708433727855ull,
+ 9927030090560107173ull, 5528948701893778368ull}},
+{{12390060911637619351ull, 12097229403969547723ull,
+ 12408787613200133966ull, 6911185877367222960ull}},
+{{10875890121119636284ull, 5898164718107158846ull,
+ 15510984516500167458ull, 8638982346709028700ull}},
+{{2185745307272384774ull, 8298038967244362183ull, 470993285957828853ull,
+ 5399363966693142938ull}},
+{{16567239689372644679ull, 14984234727482840632ull,
+ 9812113644302061874ull, 6749204958366428672ull}},
+{{2262305538006254233ull, 9506921372498774983ull,
+ 12265142055377577343ull, 8436506197958035840ull}},
+{{8331469988894990752ull, 12859354885452816220ull,
+ 7665713784610985839ull, 5272816373723772400ull}},
+{{10414337486118738440ull, 11462507588388632371ull,
+ 9582142230763732299ull, 6591020467154715500ull}},
+{{8406235839221035145ull, 9716448467058402560ull,
+ 11977677788454665374ull, 8238775583943394375ull}},
+{{5253897399513146966ull, 1461094273484113696ull,
+ 14403577645425247715ull, 5149234739964621484ull}},
+{{6567371749391433707ull, 15661425897137305832ull,
+ 18004472056781559643ull, 6436543424955776855ull}},
+{{8209214686739292134ull, 14965096352994244386ull,
+ 17893904052549561650ull, 8045679281194721069ull}},
+{{9742445197639445488ull, 13964871239048790645ull,
+ 13489533042057169983ull, 5028549550746700668ull}},
+{{16789742515476694764ull, 12844403030383600402ull,
+ 16861916302571462479ull, 6285686938433375835ull}},
+{{11763806107491092647ull, 11443817769552112599ull,
+ 16465709359786940195ull, 7857108673041719794ull}},
+{{14269907844823014760ull, 4846543096756376422ull,
+ 14902754368294225526ull, 4910692920651074871ull}},
+{{8614012769173992642ull, 15281550907800246336ull,
+ 14016756941940394003ull, 6138366150813843589ull}},
+{{10767515961467490803ull, 14490252616322920016ull,
+ 3685888122143328792ull, 7672957688517304487ull}},
+{{6729697475917181752ull, 9056407885201825010ull,
+ 9221209103980662351ull, 4795598555323315304ull}},
+{{17635493881751252998ull, 6708823838074893358ull,
+ 11526511379975827939ull, 5994498194154144130ull}},
+{{12820995315334290439ull, 3774343779166228794ull,
+ 5184767188115009116ull, 7493122742692680163ull}},
+{{12624808090511319429ull, 11582336898833668804ull,
+ 934636483358186745ull, 4683201714182925102ull}},
+{{15781010113139149286ull, 642863068259922293ull,
+ 10391667641052509240ull, 5854002142728656377ull}},
+{{5891204586141772895ull, 803578835324902867ull,
+ 17601270569743024454ull, 7317502678410820471ull}},
+{{2752319714249828215ull, 10227845581010904392ull,
+ 17389902193751392663ull, 9146878348013525589ull}},
+{{1720199821406142634ull, 13309932515772897101ull,
+ 13174531880308314366ull, 5716798967508453493ull}},
+{{6761935795185066197ull, 7414043607861345568ull,
+ 2633106795103229246ull, 7145998709385566867ull}},
+{{8452419743981332746ull, 44182472971906152ull, 17126441549161200270ull,
+ 8932498386731958583ull}},
+{{5282762339988332966ull, 13862672100889605057ull,
+ 17621554995866832024ull, 5582811491707474114ull}},
+{{11215138943412804112ull, 17328340126112006321ull,
+ 12803571707978764222ull, 6978514364634342643ull}},
+{{183865623983841428ull, 12437053120785232094ull,
+ 11392778616546067374ull, 8723142955792928304ull}},
+{{13949974070272064604ull, 3161472182063382154ull,
+ 7120486635341292109ull, 5451964347370580190ull}},
+{{8214095550985304947ull, 8563526246006615597ull,
+ 18123980331031390944ull, 6814955434213225237ull}},
+{{14879305457159019088ull, 10704407807508269496ull,
+ 8819917358507074968ull, 8518694292766531547ull}},
+{{9299565910724386930ull, 6690254879692668435ull,
+ 3206605339853227903ull, 5324183932979082217ull}},
+{{7012771369978095759ull, 3751132581188447640ull,
+ 8619942693243922783ull, 6655229916223852771ull}},
+{{8765964212472619698ull, 77229708058171646ull, 6163242348127515575ull,
+ 8319037395279815964ull}},
+{{867041614367999408ull, 6965797595177439135ull,
+ 13075398504434473042ull, 5199398372049884977ull}},
+{{14918860073242162971ull, 17930619030826574726ull,
+ 2509190075260927590ull, 6499247965062356222ull}},
+{{9425203054697927906ull, 13189901751678442600ull,
+ 12359859630930935296ull, 8124059956327945277ull}},
+{{5890751909186204942ull, 8243688594799026625ull,
+ 10030755278545528512ull, 5077537472704965798ull}},
+{{11975125904910144081ull, 10304610743498783281ull,
+ 3315072061327134832ull, 6346921840881207248ull}},
+{{1133849325855516389ull, 12880763429373479102ull,
+ 4143840076658918540ull, 7933652301101509060ull}},
+{{14543713883941861455ull, 17273849180213200246ull,
+ 11813272084766599895ull, 4958532688188443162ull}},
+{{8956270318072551011ull, 16980625456839112404ull,
+ 5543218069103474061ull, 6198165860235553953ull}},
+{{11195337897590688764ull, 7390723765766726793ull,
+ 11540708604806730481ull, 7747707325294442441ull}},
+{{79557158353098621ull, 16148417399672674006ull, 295413850363124694ull,
+ 4842317078309026526ull}},
+{{9322818484796149085ull, 10962149712736066699ull,
+ 9592639349808681676ull, 6052896347886283157ull}},
+{{7041837087567798452ull, 13702687140920083374ull,
+ 16602485205688239999ull, 7566120434857853946ull}},
+{{18236206235012037744ull, 15481708490716133964ull,
+ 14988239271982537903ull, 4728825271786158716ull}},
+{{4348513720055495564ull, 14740449594967779552ull,
+ 288555016268620763ull, 5911031589732698396ull}},
+{{5435642150069369455ull, 13813875975282336536ull,
+ 360693770335775954ull, 7388789487165872995ull}},
+{{3397276343793355910ull, 13245358502978848239ull,
+ 16366334670955717635ull, 4617993429478670621ull}},
+{{18081653485023858599ull, 11945012110296172394ull,
+ 6622860283412483332ull, 5772491786848338277ull}},
+{{13378694819425047441ull, 14931265137870215493ull,
+ 12890261372692992069ull, 7215614733560422846ull}},
+{{2888310468999145589ull, 4829023367055605655ull,
+ 6889454679011464279ull, 9019518416950528558ull}},
+{{8722723070765547849ull, 9935668632050835390ull,
+ 18140967229664328886ull, 5637199010594080348ull}},
+{{1680031801602159003ull, 3196213753208768430ull,
+ 4229464963370859492ull, 7046498763242600436ull}},
+{{11323411788857474562ull, 3995267191510960537ull,
+ 5286831204213574365ull, 8808123454053250545ull}},
+{{159603340394839746ull, 4802885003908044288ull,
+ 14833484548701953738ull, 5505077158783281590ull}},
+{{199504175493549682ull, 15226978291739831168ull,
+ 9318483649022666364ull, 6881346448479101988ull}},
+{{249380219366937102ull, 586978790965237344ull, 11648104561278332956ull,
+ 8601683060598877485ull}},
+{{155862637104335689ull, 9590233781208049148ull, 9585908360012652049ull,
+ 5376051912874298428ull}},
+{{194828296380419611ull, 16599478244937449339ull,
+ 11982385450015815061ull, 6720064891092873035ull}},
+{{14078593425757688226ull, 6914289750889647961ull,
+ 10366295794092380923ull, 8400081113866091294ull}},
+{{1881591863457473285ull, 2015588085092336024ull,
+ 1867248852880350173ull, 5250050696166307059ull}},
+{{2351989829321841607ull, 7131171124792807934ull,
+ 16169119121382601428ull, 6562563370207883823ull}},
+{{12163359323507077816ull, 8913963905991009917ull,
+ 15599712883300863881ull, 8203204212759854779ull}},
+{{9907942586405617587ull, 17100442487312850958ull,
+ 7443977542849345973ull, 5127002632974909237ull}},
+{{3161556196152246176ull, 7540495053858899986ull,
+ 13916657946989070371ull, 6408753291218636546ull}},
+{{13175317282045083528ull, 4813932798896237078ull,
+ 8172450396881562156ull, 8010941614023295683ull}},
+{{3622887282850789301ull, 12232080036164923982ull,
+ 2801938488837282395ull, 5006838508764559802ull}},
+{{13751981140418262434ull, 10678414026778767073ull,
+ 12725795147901378802ull, 6258548135955699752ull}},
+{{3354918370240664331ull, 4124645496618683034ull,
+ 15907243934876723503ull, 7823185169944624690ull}},
+{{6708509999827803111ull, 9495432463027758752ull,
+ 14553713477725340093ull, 4889490731215390431ull}},
+{{8385637499784753888ull, 16480976597212086344ull,
+ 13580455828729287212ull, 6111863414019238039ull}},
+{{10482046874730942360ull, 2154476672805556314ull,
+ 12363883767484221112ull, 7639829267524047549ull}},
+{{11162965315134226879ull, 1346547920503472696ull,
+ 10033270363891332147ull, 4774893292202529718ull}},
+{{13953706643917783599ull, 15518242955911504582ull,
+ 3318215918009389375ull, 5968616615253162148ull}},
+{{8218761268042453691ull, 14786117676461992824ull,
+ 4147769897511736719ull, 7460770769066452685ull}},
+{{5136725792526533557ull, 16158852575429827371ull,
+ 4898199195158529401ull, 4662981730666532928ull}},
+{{1809221222230779042ull, 6363507664005120502ull,
+ 6122748993948161752ull, 5828727163333166160ull}},
+{{11484898564643249610ull, 7954384580006400627ull,
+ 7653436242435202190ull, 7285908954166457700ull}},
+{{9744437187376674109ull, 719608688153224976ull, 9566795303044002738ull,
+ 9107386192708072125ull}},
+{{6090273242110421318ull, 5061441448523153514ull,
+ 8285090073616195663ull, 5692116370442545078ull}},
+{{16836213589492802456ull, 1715115792226553988ull,
+ 1132990555165468771ull, 7115145463053181348ull}},
+{{2598522913156451454ull, 15978952795565356198ull,
+ 1416238193956835963ull, 8893931828816476685ull}},
+{{15459134876004945871ull, 7681002488014653671ull,
+ 3190991880436716429ull, 5558707393010297928ull}},
+{{14712232576578794434ull, 14212939128445704993ull,
+ 3988739850545895536ull, 6948384241262872410ull}},
+{{4555232665441329331ull, 17766173910557131242ull,
+ 14209296850037145228ull, 8685480301578590512ull}},
+{{7458706434328218736ull, 1880486657243431218ull,
+ 8880810531273215768ull, 5428425188486619070ull}},
+{{100011006055497612ull, 2350608321554289023ull, 1877641127236743902ull,
+ 6785531485608273838ull}},
+{{13960071812851535726ull, 12161632438797637086ull,
+ 11570423445900705685ull, 8481914357010342297ull}},
+{{4113358864604821925ull, 9906863283462217131ull, 313985626046859197ull,
+ 5301196473131463936ull}},
+{{530012562328639502ull, 16995265122755159318ull, 392482032558573996ull,
+ 6626495591414329920ull}},
+{{9885887739765575186ull, 2797337329734397531ull, 490602540698217496ull,
+ 8283119489267912400ull}},
+{{3872836828139790539ull, 1748335831083998457ull, 306626587936385935ull,
+ 5176949680792445250ull}},
+{{9452732053602126078ull, 16020477844137161783ull,
+ 9606655271775258226ull, 6471187100990556562ull}},
+{{7204229048575269693ull, 10802225268316676421ull,
+ 2784947052864296975ull, 8088983876238195703ull}},
+{{6808486164573237511ull, 13668919820339004619ull,
+ 8658120935681267465ull, 5055614922648872314ull}},
+{{3898921687289158984ull, 3251091720141592062ull,
+ 1599279132746808524ull, 6319518653311090393ull}},
+{{14097024145966224538ull, 4063864650176990077ull,
+ 6610784934360898559ull, 7899398316638862991ull}},
+{{11116483100442584288ull, 9457444434001700654ull,
+ 11049269611616643455ull, 4937123947899289369ull}},
+{{4672231838698454552ull, 7210119524074737914ull,
+ 18423273032948192223ull, 6171404934874111711ull}},
+{{15063661835227843998ull, 4400963386666034488ull,
+ 18417405272757852375ull, 7714256168592639639ull}},
+{{9414788647017402499ull, 9668131144307353411ull,
+ 18428407323114739590ull, 4821410105370399774ull}},
+{{7156799790344365220ull, 2861791893529415956ull,
+ 13812137117038648680ull, 6026762631712999718ull}},
+{{8945999737930456525ull, 3577239866911769945ull,
+ 8041799359443535042ull, 7533453289641249648ull}},
+{{17120464882275005088ull, 6847460935247244119ull,
+ 5026124599652209401ull, 4708408306025781030ull}},
+{{16788895084416368456ull, 13171012187486443053ull,
+ 15506027786420037559ull, 5885510382532226287ull}},
+{{7151060800238296858ull, 11852079215930665913ull,
+ 14770848714597659045ull, 7356887978165282859ull}},
+{{13550512018725258976ull, 980040964631168679ull,
+ 13851874874819685903ull, 9196109972706603574ull}},
+{{15386599039344368716ull, 7530054630535562280ull,
+ 4045735778334915785ull, 5747568732941627234ull}},
+{{786504725470909279ull, 14024254306596840755ull,
+ 14280541759773420539ull, 7184460916177034042ull}},
+{{14818188962120800311ull, 12918631864818663039ull,
+ 8627305162861999866ull, 8980576145221292553ull}},
+{{16178897128966582051ull, 12685830933939052303ull,
+ 16921280772857219676ull, 5612860090763307845ull}},
+{{15611935392780839659ull, 15857288667423815379ull,
+ 7316542910789360883ull, 7016075113454134807ull}},
+{{14903233222548661670ull, 15209924815852381320ull,
+ 4533992620059313200ull, 8770093891817668509ull}},
+{{9314520764092913544ull, 9506203009907738325ull,
+ 5139588396750764702ull, 5481308682386042818ull}},
+{{16254836973543529834ull, 2659381725529897098ull,
+ 15647857532793231686ull, 6851635852982553522ull}},
+{{11095174180074636484ull, 12547599193767147181ull,
+ 10336449879136763799ull, 8564544816228191903ull}},
+{{9240326871760341755ull, 14759778523745548844ull,
+ 13377810202101559230ull, 5352840510142619939ull}},
+{{11550408589700427193ull, 9226351117827160247ull,
+ 12110576734199561134ull, 6691050637678274924ull}},
+{{9826324718698146087ull, 2309566860429174501ull,
+ 15138220917749451418ull, 8363813297097843655ull}},
+{{8447295958400035257ull, 6055165306195621967ull,
+ 16378917101234488992ull, 5227383310686152284ull}},
+{{5947433929572656167ull, 7568956632744527459ull,
+ 2026902302833559624ull, 6534229138357690356ull}},
+{{2822606393538432304ull, 9461195790930659324ull,
+ 2533627878541949530ull, 8167786422947112945ull}},
+{{10987501032816295998ull, 10524933387759049981ull,
+ 13112732470157188216ull, 5104866514341945590ull}},
+{{18346062309447757902ull, 13156166734698812476ull,
+ 7167543550841709462ull, 6381083142927431988ull}},
+{{4485833813100145761ull, 7221836381518739788ull,
+ 8959429438552136828ull, 7976353928659289985ull}},
+{{12027018170042366909ull, 13737019775303988175ull,
+ 17128858445163555277ull, 4985221205412056240ull}},
+{{10422086694125570732ull, 3336216663847821507ull,
+ 2964328982744892481ull, 6231526506765070301ull}},
+{{8415922349229575511ull, 8781956848237164788ull,
+ 8317097246858503505ull, 7789408133456337876ull}},
+{{14483323505123260503ull, 17017938076216697752ull,
+ 14421557816141340498ull, 4868380083410211172ull}},
+{{18104154381404075628ull, 12049050558416096382ull,
+ 18026947270176675623ull, 6085475104262763965ull}},
+{{13406820939900318727ull, 10449627179592732574ull,
+ 8698626032438680817ull, 7606843880328454957ull}},
+{{3767577069010311301ull, 18060232033313927619ull,
+ 7742484279487869462ull, 4754277425205284348ull}},
+{{97785317835501222ull, 13351918004787633716ull, 9678105349359836828ull,
+ 5942846781506605435ull}},
+{{122231647294376527ull, 16689897505984542145ull,
+ 7485945668272408131ull, 7428558476883256794ull}},
+{{11605609825627455089ull, 8125342932026644888ull,
+ 9290402061097642986ull, 4642849048052035496ull}},
+{{14507012282034318862ull, 933306628178530302ull,
+ 11613002576372053733ull, 5803561310065044370ull}},
+{{8910393315688122769ull, 5778319303650550782ull,
+ 5292881183610291358ull, 7254451637581305463ull}},
+{{1914619607755377653ull, 16446271166417964286ull,
+ 2004415461085476293ull, 9068064546976631829ull}},
+{{15031695310129274745ull, 12584762488224921630ull,
+ 3558602672392116635ull, 5667540341860394893ull}},
+{{9566247100806817624ull, 11119267091853764134ull,
+ 9059939358917533698ull, 7084425427325493616ull}},
+{{2734436839153746221ull, 4675711827962429360ull,
+ 11324924198646917123ull, 8855531784156867020ull}},
+{{1709023024471091389ull, 616476883262824398ull,
+ 16301449661009099010ull, 5534707365098041887ull}},
+{{11359650817443640044ull, 9993968140933306305ull,
+ 15765126057833985858ull, 6918384206372552359ull}},
+{{364505466522386342ull, 3269088139311857074ull,
+ 15094721553865094419ull, 8647980257965690449ull}},
+{{4839501935003879368ull, 18184081151565768335ull,
+ 2516671943524602155ull, 5404987661228556531ull}},
+{{1437691400327461306ull, 18118415421029822515ull,
+ 16980897984687916406ull, 6756234576535695663ull}},
+{{15632172305691490344ull, 13424647239432502335ull,
+ 16614436462432507604ull, 8445293220669619579ull}},
+{{16687636718698263321ull, 17613776561500089767ull,
+ 8078179779806623300ull, 5278308262918512237ull}},
+{{16247859879945441248ull, 3570476628165560593ull,
+ 14709410743185667030ull, 6597885328648140296ull}},
+{{6474766794649637848ull, 13686467822061726550ull,
+ 18386763428982083787ull, 8247356660810175370ull}},
+{{17881787301938187367ull, 6248199379574885141ull,
+ 16103413161541190271ull, 5154597913006359606ull}},
+{{8517176072140570496ull, 3198563206041218523ull,
+ 10905894415071712031ull, 6443247391257949508ull}},
+{{6034784071748325216ull, 17833262062833686866ull,
+ 13632368018839640038ull, 8054059239072436885ull}},
+{{8383426063270091164ull, 6534102770843666387ull,
+ 10826073020988468976ull, 5033787024420273053ull}},
+{{5867596560660226051ull, 8167628463554582984ull,
+ 18144277294662974124ull, 6292233780525341316ull}},
+{{7334495700825282564ull, 10209535579443228730ull,
+ 4233602544619166039ull, 7865292225656676646ull}},
+{{9195745831443189507ull, 13298488764793099812ull,
+ 16481059645669142486ull, 4915807641035422903ull}},
+{{11494682289303986883ull, 7399738919136598957ull,
+ 15989638538659040204ull, 6144759551294278629ull}},
+{{533294806347819892ull, 9249673648920748697ull, 6151990118041636543ull,
+ 7680949439117848287ull}},
+{{11862524300035857193ull, 12698575058216549791ull,
+ 10762522851417104695ull, 4800593399448655179ull}},
+{{10216469356617433587ull, 11261532804343299335ull,
+ 8841467545843992965ull, 6000741749310818974ull}},
+{{8158900677344404079ull, 241857950146960457ull, 1828462395450215399ull,
+ 7500927186638523718ull}},
+{{16628527969408722310ull, 7068690246482932141ull,
+ 14977847052438548336ull, 4688079491649077323ull}},
+{{6950601906478739175ull, 8835862808103665177ull,
+ 14110622797120797516ull, 5860099364561346654ull}},
+{{13299938401525811873ull, 11044828510129581471ull,
+ 8414906459546221087ull, 7325124205701683318ull}},
+{{12013236983479876937ull, 9194349619234588935ull,
+ 1295261037578000551ull, 9156405257127104148ull}},
+{{14425802142316004942ull, 12663997539662699940ull,
+ 10032910185341026152ull, 5722753285704440092ull}},
+{{18032252677895006177ull, 15829996924578374925ull,
+ 12541137731676282690ull, 7153441607130550115ull}},
+{{8705257792086594009ull, 10564124118868192849ull,
+ 11064736146167965459ull, 8941802008913187644ull}},
+{{16970001166122591016ull, 4296734565078926578ull,
+ 16138832128209754220ull, 5588626255570742277ull}},
+{{11989129420798462962ull, 5370918206348658223ull,
+ 6338482104980029063ull, 6985782819463427847ull}},
+{{10374725757570690798ull, 2101961739508434875ull,
+ 3311416612797648425ull, 8732228524329284809ull}},
+{{4178360589267987797ull, 12842941133261241557ull,
+ 13598850429067000025ull, 5457642827705803005ull}},
+{{9834636755012372650ull, 2218618361294388234ull,
+ 3163504981051586320ull, 6822053534632253757ull}},
+{{3069923906910690005ull, 2773272951617985293ull,
+ 8566067244741870804ull, 8527566918290317196ull}},
+{{4224545451032875205ull, 10956667631616016616ull,
+ 14577164064818445060ull, 5329729323931448247ull}},
+{{5280681813791094006ull, 13695834539520020770ull,
+ 13609769062595668421ull, 6662161654914310309ull}},
+{{15824224304093643316ull, 3284735119117862250ull,
+ 3177153272962421815ull, 8327702068642887887ull}},
+{{14501826208485914976ull, 8970488477089745762ull,
+ 8903249823242595490ull, 5204813792901804929ull}},
+{{8903910723752617912ull, 1989738559507406395ull,
+ 15740748297480632267ull, 6506017241127256161ull}},
+{{6518202386263384486ull, 16322231254666421706ull,
+ 5840877316568626621ull, 8132521551409070202ull}},
+{{8685562509842003208ull, 12507237543380207518ull,
+ 8262234341282779542ull, 5082825969630668876ull}},
+{{1633581100447728202ull, 6410674892370483590ull,
+ 10327792926603474428ull, 6353532462038336095ull}},
+{{11265348412414436061ull, 8013343615463104487ull,
+ 8298055139826955131ull, 7941915577547920119ull}},
+{{13958371785400104394ull, 2702496750450746352ull,
+ 12103813490032928813ull, 4963697235967450074ull}},
+{{17447964731750130492ull, 7989806956490820844ull,
+ 5906394825686385208ull, 6204621544959312593ull}},
+{{3363211840978111499ull, 9987258695613526056ull,
+ 11994679550535369414ull, 7755776931199140741ull}},
+{{2102007400611319687ull, 1630350666331065881ull,
+ 9802517728298299836ull, 4847360581999462963ull}},
+{{7239195269191537513ull, 2037938332913832351ull,
+ 7641461141945486891ull, 6059200727499328704ull}},
+{{4437308068062033987ull, 16382480971424454151ull,
+ 9551826427431858613ull, 7574000909374160880ull}},
+{{9690846570179853098ull, 12544893616353977796ull,
+ 5969891517144911633ull, 4733750568358850550ull}},
+{{12113558212724816373ull, 1846058965160308533ull,
+ 16685736433285915350ull, 5917188210448563187ull}},
+{{1306889710623856754ull, 11530945743305161475ull,
+ 16245484523180006283ull, 7396485263060703984ull}},
+{{16957707133635768135ull, 4900998080352031969ull,
+ 10153427826987503927ull, 4622803289412939990ull}},
+{{7362075861762546457ull, 1514561582012652058ull,
+ 3468412746879604101ull, 5778504111766174988ull}},
+{{18425966864057958879ull, 6504887995943202976ull,
+ 4335515933599505126ull, 7223130139707718735ull}},
+{{4585714506362896982ull, 17354482031783779529ull,
+ 807708898571993503ull, 9028912674634648419ull}},
+{{14395286612545280374ull, 17764080297505944061ull,
+ 16645719126103353603ull, 5643070421646655261ull}},
+{{4159050210399436756ull, 17593414353455042173ull,
+ 6972090852347028292ull, 7053838027058319077ull}},
+{{9810498781426683848ull, 3545023868109251100ull,
+ 13326799583861173270ull, 8817297533822898846ull}},
+{{15354933775246453213ull, 16050697972850445649ull,
+ 3717563721485845389ull, 5510810958639311779ull}},
+{{5358609163775902805ull, 6228314410780893350ull, 35268633429918833ull,
+ 6888513698299139724ull}},
+{{15921633491574654314ull, 12397079031903504591ull,
+ 44085791787398541ull, 8610642122873924655ull}},
+{{16868549959875240802ull, 10054017404153384321ull,
+ 6945082647508205944ull, 5381651326796202909ull}},
+{{7250629394561887291ull, 12567521755191730402ull,
+ 13293039327812645334ull, 6727064158495253636ull}},
+{{18286658780057134921ull, 6486030157134887194ull,
+ 16616299159765806668ull, 8408830198119067045ull}},
+{{16040847755963097230ull, 13277140885064080304ull,
+ 12691029984067323119ull, 5255518873824416903ull}},
+{{1604315621244319921ull, 11984740087902712477ull,
+ 11252101461656765995ull, 6569398592280521129ull}},
+{{6617080544982787806ull, 10369239091451002692ull,
+ 230068771788793782ull, 8211748240350651412ull}},
+{{13359047377469018187ull, 1869088413729488778ull,
+ 9367165019222771922ull, 5132342650219157132ull}},
+{{7475437184981496925ull, 11559732554016636781ull,
+ 11708956274028464902ull, 6415428312773946415ull}},
+{{13955982499654259060ull, 5226293655666020168ull,
+ 10024509324108193224ull, 8019285390967433019ull}},
+{{8722489062283911913ull, 3266433534791262605ull,
+ 3959475318353926813ull, 5012053369354645637ull}},
+{{15514797346282277795ull, 8694727936916466160ull,
+ 9561030166369796420ull, 6265066711693307046ull}},
+{{946752609143295628ull, 10868409921145582701ull,
+ 2727915671107469717ull, 7831333389616633808ull}},
+{{2897563389928253720ull, 9098599209929683140ull,
+ 1704947294442168573ull, 4894583368510396130ull}},
+{{3621954237410317149ull, 15984935030839491829ull,
+ 11354556154907486524ull, 6118229210637995162ull}},
+{{9139128815190284340ull, 1534424714839813170ull,
+ 4969823156779582348ull, 7647786513297493953ull}},
+{{10323641527921315617ull, 10182387483629659039ull,
+ 14635354519055708727ull, 4779866570810933720ull}},
+{{8292865891474256617ull, 8116298336109685895ull,
+ 18294193148819635909ull, 5974833213513667150ull}},
+{{5754396345915432867ull, 14757058938564495273ull,
+ 13644369399169769078ull, 7468541516892083938ull}},
+{{15125712762265615302ull, 4611475818175421641ull,
+ 13139416892908493578ull, 4667838448057552461ull}},
+{{5072082897549855416ull, 14987716809574052860ull,
+ 2589213060853453260ull, 5834798060071940577ull}},
+{{6340103621937319269ull, 287901938258014459ull, 7848202344494204480ull,
+ 7293497575089925721ull}},
+{{3313443508994261183ull, 359877422822518074ull,
+ 14421938949045143504ull, 9116871968862407151ull}},
+{{6682588211548801143ull, 224923389264073796ull,
+ 15931240870794296546ull, 5698044980539004469ull}},
+{{8353235264436001429ull, 9504526273434868053ull,
+ 6078993033210706970ull, 7122556225673755587ull}},
+{{15053230098972389690ull, 2657285804938809258ull,
+ 2987055273085995809ull, 8903195282092194484ull}},
+{{14019954830285131461ull, 13190018674155225546ull,
+ 11090281582533523188ull, 5564497051307621552ull}},
+{{8301571501001638518ull, 16487523342694031933ull,
+ 13862851978166903985ull, 6955621314134526940ull}},
+{{14988650394679436051ull, 6774346123085376204ull,
+ 17328564972708629982ull, 8694526642668158675ull}},
+{{144534459819871724ull, 18069024382210523840ull,
+ 8524510098729199786ull, 5434079151667599172ull}},
+{{180668074774839655ull, 13362908440908378992ull,
+ 10655637623411499733ull, 6792598939584498965ull}},
+{{225835093468549568ull, 2868577495853310028ull,
+ 17931233047691762571ull, 8490748674480623706ull}},
+{{9364518970272619288ull, 17933761999404176431ull,
+ 15818706673234739510ull, 5306717921550389816ull}},
+{{7093962694413386206ull, 13193830462400444731ull,
+ 1326639267833872772ull, 6633397401937987271ull}},
+{{4255767349589344854ull, 16492288078000555914ull,
+ 15493357140074504677ull, 8291746752422484088ull}},
+{{7271540611920728438ull, 12613523057964041398ull,
+ 9683348212546565423ull, 5182341720264052555ull}},
+{{18312797801755686355ull, 11155217804027663843ull,
+ 7492499247255818875ull, 6477927150330065694ull}},
+{{18279311233767220040ull, 9332336236607191900ull,
+ 142252022214997786ull, 8097408937912582118ull}},
+{{2201197484249736717ull, 10444396166306882842ull,
+ 13923965569166537328ull, 5060880586195363823ull}},
+{{11974868892166946704ull, 13055495207883603552ull,
+ 12793270943030783756ull, 6326100732744204779ull}},
+{{14968586115208683380ull, 16319369009854504440ull,
+ 11379902660361091791ull, 7907625915930255974ull}},
+{{9355366322005427113ull, 17117134658800147131ull,
+ 2500753144298294465ull, 4942266197456409984ull}},
+{{7082521884079395987ull, 7561360268218020202ull,
+ 3125941430372868082ull, 6177832746820512480ull}},
+{{18076524391954020792ull, 228328298417749444ull,
+ 3907426787966085103ull, 7722290933525640600ull}},
+{{2074455708116487187ull, 7060234214152175259ull,
+ 2442141742478803189ull, 4826431833453525375ull}},
+{{16428127690427772695ull, 13436978786117606977ull,
+ 16887735233380667698ull, 6033039791816906718ull}},
+{{6700101557752552157ull, 7572851445792232914ull,
+ 11886297004871058815ull, 7541299739771133398ull}},
+{{8799249492022733002ull, 11650561181261227427ull,
+ 2817249609617023855ull, 4713312337356958374ull}},
+{{6387375846601028349ull, 9951515458149146380ull,
+ 12744934048876055627ull, 5891640421696197967ull}},
+{{7984219808251285436ull, 7827708304259045071ull,
+ 11319481542667681630ull, 7364550527120247459ull}},
+{{5368588741886718891ull, 561263343469030531ull, 9537665909907214134ull,
+ 9205688158900309324ull}},
+{{1049524954465505355ull, 14185847644950307794ull,
+ 15184413230546784641ull, 5753555099312693327ull}},
+{{10535278229936657502ull, 3897251500905721030ull,
+ 14368830519756092898ull, 7191943874140866659ull}},
+{{3945725750566046069ull, 14094936412986927096ull,
+ 13349352131267728218ull, 8989929842676083324ull}},
+{{2466078594103778793ull, 13421021276544217339ull,
+ 17566717118897105944ull, 5618706151672552077ull}},
+{{16917656297911887203ull, 16776276595680271673ull,
+ 8123338343339218718ull, 7023382689590690097ull}},
+{{7312012317107695292ull, 11746973707745563784ull,
+ 14765858947601411302ull, 8779228361988362621ull}},
+{{4570007698192309558ull, 2730172548913589461ull,
+ 11534504851464576016ull, 5487017726242726638ull}},
+{{10324195641167774851ull, 3412715686141986826ull,
+ 5194759027475944212ull, 6858772157803408298ull}},
+{{3681872514604942756ull, 4265894607677483533ull,
+ 15716820821199706073ull, 8573465197254260372ull}},
+{{4607013330841783175ull, 14195399175866896968ull,
+ 599640976395040487ull, 5358415748283912733ull}},
+{{5758766663552228968ull, 13132562951406233306ull,
+ 5361237238921188513ull, 6698019685354890916ull}},
+{{16421830366295062018ull, 2580645633975627920ull,
+ 6701546548651485642ull, 8372524606693613645ull}},
+{{10263643978934413761ull, 6224589539662155354ull,
+ 6494309602120872478ull, 5232827879183508528ull}},
+{{3606182936813241394ull, 17004108961432470001ull,
+ 8117887002651090597ull, 6541034848979385660ull}},
+{{9119414689443939646ull, 7420078146508423789ull,
+ 10147358753313863247ull, 8176293561224232075ull}},
+{{8005477190116156231ull, 11555077869208846724ull,
+ 4036256211607470577ull, 5110183475765145047ull}},
+{{10006846487645195289ull, 608789281228894693ull, 433634246081950318ull,
+ 6387729344706431309ull}},
+{{17120244127983882015ull, 9984358638390894174ull,
+ 5153728826029825801ull, 7984661680883039136ull}},
+{{6088466561562538355ull, 17769439195062778619ull,
+ 3221080516268641125ull, 4990413550551899460ull}},
+{{2998897183525785040ull, 8376740938546309562ull,
+ 4026350645335801407ull, 6238016938189874325ull}},
+{{12971993516262007108ull, 5859240154755499048ull,
+ 9644624325097139663ull, 7797521172737342906ull}},
+{{8107495947663754443ull, 10579554124363268761ull,
+ 10639576221613100193ull, 4873450732960839316ull}},
+{{14746055953007080957ull, 17836128673881473855ull,
+ 13299470277016375241ull, 6091813416201049145ull}},
+{{13820883922831463292ull, 8460102787069678607ull,
+ 2789279790988305340ull, 7614766770251311432ull}},
+{{15555581479410746414ull, 14510936278773324937ull,
+ 1743299869367690837ull, 4759229231407069645ull}},
+{{5609418793981269305ull, 4303612293184492460ull,
+ 6790810855137001451ull, 5949036539258837056ull}},
+{{7011773492476586631ull, 767829348053227671ull, 8488513568921251814ull,
+ 7436295674073546320ull}},
+{{11299887460438948501ull, 14314951397815431006ull,
+ 5305320980575782383ull, 4647684796295966450ull}},
+{{4901487288693909818ull, 13282003228841900854ull,
+ 15855023262574503787ull, 5809605995369958062ull}},
+{{15350231147722163080ull, 11990818017624988163ull,
+ 10595407041363353926ull, 7262007494212447578ull}},
+{{14576102916225315946ull, 5765150485176459396ull,
+ 4020886764849416600ull, 9077509367765559473ull}},
+{{18333436359495598274ull, 3603219053235287122ull,
+ 14042269274099355135ull, 5673443354853474670ull}},
+{{13693423412514722035ull, 18339081871826272615ull,
+ 8329464555769418110ull, 7091804193566843338ull}},
+{{12505093247216014640ull, 13700480302928064961ull,
+ 1188458657856996830ull, 8864755241958554173ull}},
+{{898154251868927294ull, 3951114170902652697ull, 3048629670374316971ull,
+ 5540472026224096358ull}},
+{{5734378833263547021ull, 327206695200927967ull,
+ 13034159124822672022ull, 6925590032780120447ull}},
+{{2556287523152045873ull, 9632380405855935767ull,
+ 11681012887600952123ull, 8656987540975150559ull}},
+{{8515208729611110527ull, 3714394744446265902ull,
+ 14218162082391676933ull, 5410617213109469099ull}},
+{{1420638875159112350ull, 9254679448985220282ull,
+ 13161016584562208262ull, 6763271516386836374ull}},
+{{10999170630803666245ull, 2344977274376749544ull,
+ 7227898693847984520ull, 8454089395483545468ull}},
+{{6874481644252291404ull, 1465610796485468465ull,
+ 13740808720509766133ull, 5283805872177215917ull}},
+{{13204788073742752158ull, 6443699514034223485ull,
+ 3340952845355043954ull, 6604757340221519897ull}},
+{{2670927036896276486ull, 17277996429397555165ull,
+ 8787877075121192846ull, 8255946675276899871ull}},
+{{3975172407273866756ull, 6187061749946084074ull,
+ 12409952199591827385ull, 5159966672048062419ull}},
+{{14192337545947109253ull, 12345513205859992996ull,
+ 10900754231062396327ull, 6449958340060078024ull}},
+{{17740421932433886566ull, 10820205488897603341ull,
+ 13625942788827995409ull, 8062447925075097530ull}},
+{{13393606716984873056ull, 18291843476629471848ull,
+ 13127900261444885034ull, 5039029953171935956ull}},
+{{16742008396231091320ull, 13641432308932064002ull,
+ 16409875326806106293ull, 6298787441464919945ull}},
+{{11704138458434088341ull, 3216732330882916291ull,
+ 6677286103225469155ull, 7873484301831149932ull}},
+{{5009243527307611261ull, 18151358771297680346ull,
+ 13396675851370694029ull, 4920927688644468707ull}},
+{{15484926445989289885ull, 8854140408839936720ull,
+ 12134158795785979633ull, 6151159610805585884ull}},
+{{909413983777060740ull, 15679361529477308805ull,
+ 15167698494732474541ull, 7688949513506982355ull}},
+{{2874226749074356915ull, 12105443965137011955ull,
+ 7173968549994102636ull, 4805593445941863972ull}},
+{{17427841491625109855ull, 15131804956421264943ull,
+ 8967460687492628295ull, 6006991807427329965ull}},
+{{17173115846103999415ull, 14303070177099193275ull,
+ 15821011877793173273ull, 7508739759284162456ull}},
+{{8427354394601305682ull, 2021889833045913941ull,
+ 9888132423620733296ull, 4692962349552601535ull}},
+{{15145879011679020007ull, 2527362291307392426ull,
+ 7748479511098528716ull, 5866202936940751919ull}},
+{{9708976727743999200ull, 3159202864134240533ull,
+ 5073913370445772991ull, 7332753671175939899ull}},
+{{16747906928107386904ull, 17784061635449964378ull,
+ 1730705694629828334ull, 9165942088969924874ull}},
+{{15079127848494504719ull, 6503352503728839832ull,
+ 5693377077571030613ull, 5728713805606203046ull}},
+{{402165736908579283ull, 12740876648088437695ull,
+ 16340093383818564074ull, 7160892257007753807ull}},
+{{14337765226417887816ull, 6702723773255771310ull,
+ 15813430711345817189ull, 8951115321259692259ull}},
+{{4349417248083791981ull, 6495045367498551021ull,
+ 7577551185377441791ull, 5594447075787307662ull}},
+{{10048457578532127880ull, 3507120690945800872ull,
+ 248566944867026431ull, 6993058844734134578ull}},
+{{12560571973165159850ull, 18218958918964414802ull,
+ 9534080717938558846ull, 8741323555917668222ull}},
+{{12462043501655612811ull, 6775163305925371347ull,
+ 1347114430284211375ull, 5463327222448542639ull}},
+{{10965868358642128109ull, 3857268113979326280ull,
+ 15518951093137427931ull, 6829159028060678298ull}},
+{{13707335448302660136ull, 209899124046769946ull,
+ 10175316829567009106ull, 8536448785075847873ull}},
+{{13178770673616550489ull, 4742872970956619120ull,
+ 17888788064547850451ull, 5335280490672404920ull}},
+{{16473463342020688112ull, 1316905195268385996ull,
+ 3914241006975261448ull, 6669100613340506151ull}},
+{{2145085103816308523ull, 1646131494085482496ull, 281115240291688906ull,
+ 8336375766675632689ull}},
+{{1340678189885192827ull, 5640518202230814464ull,
+ 11704912071250775326ull, 5210234854172270430ull}},
+{{1675847737356491034ull, 16274019789643293888ull,
+ 5407768052208693349ull, 6512793567715338038ull}},
+{{2094809671695613792ull, 6507466681771953648ull,
+ 15983082102115642495ull, 8140991959644172547ull}},
+{{1309256044809758620ull, 10984695703748552886ull,
+ 7683583304608582607ull, 5088119974777607842ull}},
+{{10859942092866974083ull, 9119183611258303203ull,
+ 381107093905952451ull, 6360149968472009803ull}},
+{{8963241597656329700ull, 6787293495645491100ull,
+ 14311441922664604276ull, 7950187460590012253ull}},
+{{14825398035389981871ull, 13465430471633207745ull,
+ 11250494210879071624ull, 4968867162868757658ull}},
+{{4696689488955313626ull, 16831788089541509682ull,
+ 4839745726744063722ull, 6211083953585947073ull}},
+{{15094233898048917841ull, 11816363075072111294ull,
+ 10661368176857467557ull, 7763854941982433841ull}},
+{{4822210167853185747ull, 9691069931133763511ull,
+ 18192570156604386983ull, 4852409338739021150ull}},
+{{1416076691389094279ull, 7502151395489816485ull,
+ 13517340658900707921ull, 6065511673423776438ull}},
+{{6381781882663755753ull, 13989375262789658510ull,
+ 7673303786771109093ull, 7581889591779720548ull}},
+{{17823671731947011058ull, 11049202548457230520ull,
+ 14019186903586718991ull, 4738680994862325342ull}},
+{{3832845591224212206ull, 9199817167144150247ull,
+ 8300611592628622931ull, 5923351243577906678ull}},
+{{179370970602877353ull, 6888085440502799905ull, 1152392453931002856ull,
+ 7404189054472383348ull}},
+{{11641321902695268106ull, 4305053400314249940ull,
+ 9943617320561652593ull, 4627618159045239592ull}},
+{{14551652378369085132ull, 9993002768820200329ull,
+ 12429521650702065741ull, 5784522698806549490ull}},
+{{4354507417679192703ull, 17102939479452638316ull,
+ 6313530026522806368ull, 7230653373508186863ull}},
+{{5443134272098990879ull, 2931930275606246279ull,
+ 3280226514726120057ull, 9038316716885233579ull}},
+{{10319487947702951156ull, 13361671468322373684ull,
+ 18191042636199682699ull, 5648947948053270986ull}},
+{{12899359934628688944ull, 12090403316975579201ull,
+ 13515431258394827566ull, 7061184935066588733ull}},
+{{2289141863003697468ull, 5889632109364698194ull,
+ 3059231017711370746ull, 8826481168833235917ull}},
+{{6042399682804698822ull, 8292706086780324275ull,
+ 4217862395283300668ull, 5516550730520772448ull}},
+{{2941313585078485623ull, 10365882608475405344ull,
+ 5272327994104125835ull, 6895688413150965560ull}},
+{{3676641981348107029ull, 8345667242166868776ull,
+ 6590409992630157294ull, 8619610516438706950ull}},
+{{2297901238342566893ull, 604356007926905081ull,
+ 17954064300676012021ull, 5387256572774191843ull}},
+{{7484062566355596521ull, 5367131028336019255ull,
+ 17830894357417627122ull, 6734070715967739804ull}},
+{{4743392189517107747ull, 15932285822274799877ull,
+ 3841873873062482286ull, 8417588394959674756ull}},
+{{5270463127661886294ull, 5345992620494362019ull,
+ 11624543207518827237ull, 5260992746849796722ull}},
+{{1976392891149969963ull, 11294176794045340428ull,
+ 5307306972543758238ull, 6576240933562245903ull}},
+{{2470491113937462454ull, 4894348955701899727ull,
+ 2022447697252309894ull, 8220301166952807379ull}},
+{{8461585973851995890ull, 16894026152595851041ull,
+ 17404930875278551347ull, 5137688229345504611ull}},
+{{15188668485742382766ull, 16505846672317425897ull,
+ 17144477575670801280ull, 6422110286681880764ull}},
+{{5150777551895814746ull, 2185564266687230756ull,
+ 2983852895878949985ull, 8027637858352350956ull}},
+{{12442608006789660024ull, 12895192712747988982ull,
+ 11088280096779119548ull, 5017273661470219347ull}},
+{{6329887971632299222ull, 16118990890934986228ull,
+ 9248664102546511531ull, 6271592076837774184ull}},
+{{7912359964540374027ull, 15537052595241344881ull,
+ 11560830128183139414ull, 7839490096047217730ull}},
+{{16474440023906203527ull, 5098971853598452646ull,
+ 11837204848541850038ull, 4899681310029511081ull}},
+{{11369677993027978601ull, 15597086853852841616ull,
+ 961448005395148835ull, 6124601637536888852ull}},
+{{14212097491284973251ull, 14884672548888664116ull,
+ 1201810006743936044ull, 7655752046921111065ull}},
+{{18105932968907884090ull, 79548306200639264ull,
+ 12280346300283429788ull, 4784845029325694415ull}},
+{{4185672137425303497ull, 99435382750799081ull, 10738746856926899331ull,
+ 5981056286657118019ull}},
+{{9843776190209017275ull, 13959352283720662563ull,
+ 8811747552731236259ull, 7476320358321397524ull}},
+{{3846517109666941845ull, 6418752168111720150ull,
+ 14730714257311798470ull, 4672700223950873452ull}},
+{{14031518423938453114ull, 17246812246994425995ull,
+ 18413392821639748087ull, 5840875279938591815ull}},
+{{12927712011495678488ull, 16946829290315644590ull,
+ 18405055008622297205ull, 7301094099923239769ull}},
+{{6936267977514822302ull, 7348478557612392026ull,
+ 9171260705495707795ull, 9126367624904049712ull}},
+{{8946853504374151843ull, 2286956089294051064ull,
+ 5732037940934817372ull, 5703979765565031070ull}},
+{{11183566880467689804ull, 2858695111617563830ull,
+ 16388419463023297523ull, 7129974706956288837ull}},
+{{4756086563729836446ull, 17408426944804118500ull,
+ 6650466273496958191ull, 8912468383695361047ull}},
+{{12195926139185923587ull, 17797795868143655918ull,
+ 11074070448576680725ull, 5570292739809600654ull}},
+{{6021535637127628676ull, 8412186779897406186ull,
+ 4619216023866075099ull, 6962865924762000818ull}},
+{{16750291583264311653ull, 5903547456444369828ull,
+ 14997392066687369682ull, 8703582405952501022ull}},
+{{1245560202685418975ull, 8301403178705119047ull,
+ 4761684023252218147ull, 5439739003720313139ull}},
+{{15392008308638937431ull, 5765067954954010904ull,
+ 1340419010637884780ull, 6799673754650391424ull}},
+{{793266312089120172ull, 7206334943692513631ull, 1675523763297355975ull,
+ 8499592193312989280ull}},
+{{7413320472696781964ull, 11421488367448902875ull,
+ 1047202352060847484ull, 5312245120820618300ull}},
+{{4654964572443589551ull, 14276860459311128594ull,
+ 1309002940076059355ull, 6640306401025772875ull}},
+{{15042077752409262746ull, 13234389555711522838ull,
+ 15471311730377237906ull, 8300383001282216093ull}},
+{{4789612576828401313ull, 12883179490747089678ull,
+ 11975412840699467643ull, 5187739375801385058ull}},
+{{15210387757890277449ull, 11492288345006474193ull,
+ 5745894014019558746ull, 6484674219751731323ull}},
+{{5177926642080683099ull, 5141988394403316934ull,
+ 2570681499097060529ull, 8105842774689664154ull}},
+{{17071262206582590649ull, 14742957792570542843ull,
+ 6218361955363050734ull, 5066151734181040096ull}},
+{{16727391739800850407ull, 9205325203858402746ull,
+ 7772952444203813418ull, 6332689667726300120ull}},
+{{11685867637896287201ull, 2283284467968227625ull,
+ 9716190555254766773ull, 7915862084657875150ull}},
+{{386138246044097645ull, 3732895801693836218ull, 1460933078606841329ull,
+ 4947413802911171969ull}},
+{{9706044844409897864ull, 9277805770544683176ull,
+ 6437852366685939565ull, 6184267253638964961ull}},
+{{12132556055512372329ull, 16208943231608241874ull,
+ 12659001476784812360ull, 7730334067048706201ull}},
+{{12194533553122620610ull, 10130589519755151171ull,
+ 994346895349425869ull, 4831458791905441376ull}},
+{{10631480922975887858ull, 17274922918121326868ull,
+ 1242933619186782336ull, 6039323489881801720ull}},
+{{13289351153719859823ull, 3146909573942106969ull,
+ 1553667023983477921ull, 7549154362352252150ull}},
+{{1388315443433830534ull, 13496033529782286616ull,
+ 14806099945271837412ull, 4718221476470157593ull}},
+{{1735394304292288167ull, 16870041912227858270ull,
+ 4672566876307633053ull, 5897776845587696992ull}},
+{{11392614917220136016ull, 7252494335002659125ull,
+ 5840708595384541317ull, 7372221056984621240ull}},
+{{405710591243006308ull, 13677303937180711811ull,
+ 7300885744230676646ull, 9215276321230776550ull}},
+{{16394470184022736607ull, 3936628942310556977ull,
+ 18398111645426336616ull, 5759547700769235343ull}},
+{{6658029674746257046ull, 4920786177888196222ull,
+ 18385953538355532866ull, 7199434625961544179ull}},
+{{17545909130287597116ull, 15374354759215021085ull,
+ 18370755904517028178ull, 8999293282451930224ull}},
+{{13272036215643442150ull, 14220657742936776082ull,
+ 11481722440323142611ull, 5624558301532456390ull}},
+{{7366673232699526879ull, 13164136160243582199ull,
+ 5128781013549152456ull, 7030697876915570488ull}},
+{{4596655522447020695ull, 16455170200304477749ull,
+ 6410976266936440570ull, 8788372346144463110ull}},
+{{5178752710743081886ull, 14896167393617686497ull,
+ 17841918222117439068ull, 5492732716340289443ull}},
+{{11085126906856240262ull, 173465168312556505ull,
+ 17690711759219410932ull, 6865915895425361804ull}},
+{{21350578288136615ull, 216831460390695632ull, 3666645625314712049ull,
+ 8582394869281702256ull}},
+{{13344111430085385ull, 11664734708812654530ull, 2291653515821695030ull,
+ 5363996793301063910ull}},
+{{9240052176142382539ull, 5357546349161042354ull,
+ 12087938931631894596ull, 6704995991626329887ull}},
+{{2326693183323202365ull, 6696932936451302943ull,
+ 10498237646112480341ull, 8381244989532912359ull}},
+{{8371712267218083334ull, 6491426094495758291ull,
+ 13478927556461382069ull, 5238278118458070224ull}},
+{{5852954315595216264ull, 12725968636547085768ull,
+ 16848659445576727586ull, 6547847648072587780ull}},
+{{7316192894494020330ull, 6684088758829081402ull,
+ 2614080233261357867ull, 8184809560090734726ull}},
+{{9184306577486150610ull, 1871712465054481924ull,
+ 15468858201070512379ull, 5115505975056709203ull}},
+{{11480383221857688263ull, 16174698636600266117ull,
+ 14724386732910752569ull, 6394382468820886504ull}},
+{{515420972039946616ull, 6383315240468168935ull,
+ 18405483416138440712ull, 7992978086026108130ull}},
+{{7239667135166048491ull, 3989572025292605584ull,
+ 16115113153513913349ull, 4995611303766317581ull}},
+{{9049583918957560614ull, 9598651050043144884ull,
+ 6308833386610227974ull, 6244514129707896977ull}},
+{{11311979898696950767ull, 2774941775699155297ull,
+ 12497727751690172872ull, 7805642662134871221ull}},
+{{152458409044512374ull, 1734338609811972061ull,
+ 10116922854020051997ull, 4878526663834294513ull}},
+{{4802259029733028371ull, 6779609280692352980ull,
+ 17257839585952452900ull, 6098158329792868141ull}},
+{{6002823787166285464ull, 8474511600865441225ull,
+ 7737241427158402413ull, 7622697912241085177ull}},
+{{15280979913047398175ull, 7602412759754594717ull,
+ 16364990938042471268ull, 4764186195150678235ull}},
+{{5266166836027084007ull, 9503015949693243397ull,
+ 15844552654125701181ull, 5955232743938347794ull}},
+{{11194394563461242912ull, 16490455955543942150ull,
+ 10582318780802350668ull, 7444040929922934743ull}},
+{{2384810583735888916ull, 1083162935360188036ull,
+ 13531478265642551024ull, 4652525581201834214ull}},
+{{2981013229669861145ull, 1353953669200235045ull,
+ 7690975795198412972ull, 5815656976502292768ull}},
+{{8337952555514714336ull, 1692442086500293806ull,
+ 9613719743998016215ull, 7269571220627865960ull}},
+{{1199068657538617111ull, 15950610663407530970ull,
+ 12017149679997520268ull, 9086964025784832450ull}},
+{{5361103929389023599ull, 745759627774931048ull,
+ 12122404568425838072ull, 5679352516115520281ull}},
+{{6701379911736279498ull, 932199534718663810ull, 1317947655250133878ull,
+ 7099190645144400352ull}},
+{{17600096926525125181ull, 10388621455253105570ull,
+ 1647434569062667347ull, 8873988306430500440ull}},
+{{15611746597505591142ull, 4187045400319497029ull,
+ 1029646605664167092ull, 5546242691519062775ull}},
+{{5679625191599825216ull, 5233806750399371287ull,
+ 15122116312362372577ull, 6932803364398828468ull}},
+{{2487845471072393615ull, 11153944456426602013ull,
+ 455901316743414105ull, 8666004205498535586ull}},
+{{3860746428633939962ull, 53686257625544402ull, 4896624341392021720ull,
+ 5416252628436584741ull}},
+{{14049305072647200760ull, 67107822031930502ull,
+ 10732466445167415054ull, 6770315785545730926ull}},
+{{8338259303954225142ull, 9307256814394688936ull,
+ 4192211019604493009ull, 8462894731932163658ull}},
+{{5211412064971390714ull, 17346250555065150345ull,
+ 7231817905680196034ull, 5289309207457602286ull}},
+{{11125951099641626296ull, 12459441156976662123ull,
+ 18263144418955020851ull, 6611636509322002857ull}},
+{{9295752856124644966ull, 10962615427793439750ull,
+ 8993872468411612352ull, 8264545636652503572ull}},
+{{1198159516650515200ull, 6851634642370899844ull,
+ 14844542329612033528ull, 5165341022907814732ull}},
+{{1497699395813144000ull, 8564543302963624805ull, 108933838305490294ull,
+ 6456676278634768416ull}},
+{{6483810263193817904ull, 1482307091849755198ull, 136167297881862868ull,
+ 8070845348293460520ull}},
+{{17887439469778299902ull, 10149813969260872806ull,
+ 85104561176164292ull, 5044278342683412825ull}},
+{{13135927300368099070ull, 12687267461576091008ull,
+ 4718066719897593269ull, 6305347928354266031ull}},
+{{16419909125460123837ull, 2024026271687950048ull,
+ 1285897381444603683ull, 7881684910442832539ull}},
+{{10262443203412577398ull, 17405917484300826444ull,
+ 16944586927898734965ull, 4926053069026770336ull}},
+{{12828054004265721748ull, 7922338800093869343ull,
+ 2733989586163867091ull, 6157566336283462921ull}},
+{{11423381486904764280ull, 5291237481689948775ull,
+ 8029173001132221768ull, 7696957920354328651ull}},
+{{14057142456956559531ull, 3307023426056217984ull,
+ 2712390116493944653ull, 4810598700221455407ull}},
+{{17571428071195699414ull, 8745465300997660384ull,
+ 17225545700899594528ull, 6013248375276819258ull}},
+{{3517541015285072652ull, 10931831626247075481ull,
+ 12308560089269717352ull, 7516560469096024073ull}},
+{{13727678180621640167ull, 6832394766404422175ull,
+ 775321028152491489ull, 4697850293185015046ull}},
+{{12547911707349662305ull, 13152179476432915623ull,
+ 10192523322045390169ull, 5872312866481268807ull}},
+{{11073203615759689977ull, 2605166290258980817ull,
+ 8128968134129349808ull, 7340391083101586009ull}},
+{{6446464417448760ull, 3256457862823726022ull, 14772896186089075164ull,
+ 9175488853876982511ull}},
+{{13839087095543069187ull, 11258658201119604571ull,
+ 16150589143946753833ull, 5734680533673114069ull}},
+{{12687172851001448579ull, 238264696117342002ull,
+ 6353178374651278580ull, 7168350667091392587ull}},
+{{6635594026897034916ull, 297830870146677503ull, 3329786949886710321ull,
+ 8960438333864240734ull}},
+{{11064775294451728679ull, 11715359339910143199ull,
+ 15916174898961357662ull, 5600273958665150458ull}},
+{{9219283099637272944ull, 5420827138032903191ull,
+ 10671846586846921270ull, 7000342448331438073ull}},
+{{6912417856119203276ull, 15999405959395904797ull,
+ 17951494251986039491ull, 8750428060414297591ull}},
+{{6626104169288196000ull, 7693785715408746546ull,
+ 18137212935132356538ull, 5469017537758935994ull}},
+{{17506002248465020808ull, 393860107406157374ull,
+ 13448144132060669865ull, 6836271922198669993ull}},
+{{12659130773726500202ull, 5104011152685084622ull,
+ 2975122109793673619ull, 8545339902748337492ull}},
+{{3300270715151674722ull, 884163961214483937ull,
+ 11082823355475821820ull, 5340837439217710932ull}},
+{{8737024412366981307ull, 1105204951518104921ull,
+ 13853529194344777275ull, 6676046799022138665ull}},
+{{15532966533886114537ull, 15216564244679794863ull,
+ 3481853437648807881ull, 8345058498777673332ull}},
+{{16625633111319903442ull, 2592823625283789933ull,
+ 11399530435385280734ull, 5215661561736045832ull}},
+{{6946983333867715590ull, 12464401568459513225ull,
+ 14249413044231600917ull, 6519576952170057290ull}},
+{{13295415185762032392ull, 1745443905292227819ull,
+ 8588394268434725339ull, 8149471190212571613ull}},
+{{6003791481887576293ull, 17231803505303500051ull,
+ 7673589426985397288ull, 5093419493882857258ull}},
+{{2893053333932082462ull, 3093010307919823448ull, 368614746876970803ull,
+ 6366774367353571573ull}},
+{{3616316667415103078ull, 17701320940181943022ull,
+ 5072454452023601407ull, 7958467959191964466ull}},
+{{16095255972416603136ull, 17980854615254796244ull,
+ 7781970050942138783ull, 4974042474494977791ull}},
+{{1672325891811202303ull, 17864382250641107402ull,
+ 5115776545250285575ull, 6217553093118722239ull}},
+{{11313779401618778687ull, 17718791794873996348ull,
+ 1783034663135469065ull, 7771941366398402799ull}},
+{{16294484162866512488ull, 4156715844155165861ull,
+ 8031925692100750022ull, 4857463353999001749ull}},
+{{6533047148300976897ull, 14419266842048733135ull,
+ 14651593133553325431ull, 6071829192498752186ull}},
+{{3554622916948833218ull, 13412397534133528515ull,
+ 9091119380086880981ull, 7589786490623440233ull}},
+{{18362540387588878425ull, 10688591468047149273ull,
+ 17211164658622770373ull, 4743616556639650145ull}},
+{{9118117429203934319ull, 17972425353486324496ull,
+ 7678897767996299254ull, 5929520695799562682ull}},
+{{11397646786504917899ull, 13242159655003129812ull,
+ 375250173140598260ull, 7411900869749453353ull}},
+{{16346901278420349495ull, 17499721821231731940ull,
+ 11763746404281343672ull, 4632438043593408345ull}},
+{{1986882524315885253ull, 3427908202830113310ull, 869624950069515879ull,
+ 5790547554491760432ull}},
+{{11706975192249632374ull, 18119943308819805349ull,
+ 1087031187586894848ull, 7238184443114700540ull}},
+{{798660935029876755ull, 4203185062315205071ull, 1358788984483618561ull,
+ 9047730553893375675ull}},
+{{7416692112034754828ull, 14156205710015472929ull,
+ 16990144179798119264ull, 5654831596183359796ull}},
+{{13882551158470831439ull, 17695257137519341161ull,
+ 2790936151038097464ull, 7068539495229199746ull}},
+{{3518130892806375587ull, 3672327348189624836ull,
+ 12712042225652397639ull, 8835674369036499682ull}},
+{{11422203844858760550ull, 9212733620259597378ull,
+ 12556712409460136428ull, 5522296480647812301ull}},
+{{5054382769218674879ull, 11515917025324496723ull,
+ 1860832456543006823ull, 6902870600809765377ull}},
+{{1706292443095955695ull, 9783210263228233000ull,
+ 6937726589106146433ull, 8628588251012206721ull}},
+{{1066432776934972310ull, 17643721460586115385ull,
+ 15865294164259811280ull, 5392867656882629200ull}},
+{{5944726989596103291ull, 3607907752023092615ull,
+ 1384873631615212485ull, 6741084571103286501ull}},
+{{2819222718567741209ull, 9121570708456253673ull,
+ 6342778057946403510ull, 8426355713879108126ull}},
+{{13291229245173308016ull, 1089295674357770641ull,
+ 17799294341498665906ull, 5266472321174442578ull}},
+{{2778978501184471308ull, 10584991629801989110ull,
+ 13025745890018556574ull, 6583090401468053223ull}},
+{{12697095163335364943ull, 4007867500397710579ull,
+ 11670496344095807814ull, 8228863001835066529ull}},
+{{5629841467870909137ull, 16339975243030732824ull,
+ 376531187418798027ull, 5143039376146916581ull}},
+{{7037301834838636422ull, 15813283035361028126ull,
+ 5082350002700885438ull, 6428799220183645726ull}},
+{{18019999330403071335ull, 10543231757346509349ull,
+ 15576309540230882606ull, 8035999025229557157ull}},
+{{13568342590715613537ull, 1977833829914180439ull,
+ 12041036471857995581ull, 5022499390768473223ull}},
+{{12348742219967129017ull, 7083978305820113453ull,
+ 10439609571395106572ull, 6278124238460591529ull}},
+{{1600869719676747559ull, 8854972882275141817ull,
+ 17661197982671271119ull, 7847655298075739411ull}},
+{{12529758620866436984ull, 12451887079063045491ull,
+ 8732405729955850497ull, 4904784561297337132ull}},
+{{11050512257655658326ull, 1729800793546643152ull,
+ 10915507162444813122ull, 6130980701621671415ull}},
+{{13813140322069572908ull, 11385623028788079748ull,
+ 9032697934628628498ull, 7663725877027089269ull}},
+{{17856584738148258876ull, 11727700411419937746ull,
+ 7951279218356586763ull, 4789828673141930793ull}},
+{{13097358885830547786ull, 10047939495847534279ull,
+ 14550785041373121358ull, 5987285841427413491ull}},
+{{11760012588860796829ull, 3336552332954642041ull,
+ 13576795283289013794ull, 7484107301784266864ull}},
+{{432478840396916162ull, 6697031226524039180ull, 8485497052055633621ull,
+ 4677567063615166790ull}},
+{{540598550496145203ull, 12982975051582436879ull,
+ 1383499278214766218ull, 5846958829518958488ull}},
+{{14510806243402345215ull, 7005346777623270290ull,
+ 1729374097768457773ull, 7308698536898698110ull}},
+{{8915135767398155711ull, 13368369490456475767ull,
+ 11385089659065348024ull, 9135873171123372637ull}},
+{{12489488882264929175ull, 8355230931535297354ull,
+ 9421524046129536467ull, 5709920731952107898ull}},
+{{6388489065976385661ull, 5832352645991733789ull,
+ 2553533020807144776ull, 7137400914940134873ull}},
+{{12597297350897869980ull, 7290440807489667236ull,
+ 7803602294436318874ull, 8921751143675168591ull}},
+{{17096682881165944546ull, 9168211523108429926ull,
+ 11794780461663781152ull, 5576094464796980369ull}},
+{{12147481564602654874ull, 11460264403885537408ull,
+ 908417521797562728ull, 6970118080996225462ull}},
+{{15184351955753318593ull, 14325330504856921760ull,
+ 10358893939101729218ull, 8712647601245281827ull}},
+{{9490219972345824121ull, 13565017583962964004ull,
+ 4168465702724886809ull, 5445404750778301142ull}},
+{{11862774965432280151ull, 3121213924671541293ull,
+ 14433954165260884320ull, 6806755938472876427ull}},
+{{993410651508186476ull, 3901517405839426617ull,
+ 13430756688148717496ull, 8508444923091095534ull}},
+{{12150096703261086308ull, 2438448378649641635ull,
+ 3782536911665560531ull, 5317778076931934709ull}},
+{{10575934860648969981ull, 16883118528594215756ull,
+ 9339857158009338567ull, 6647222596164918386ull}},
+{{13219918575811212476ull, 16492212142315381791ull,
+ 2451449410656897401ull, 8309028245206147983ull}},
+{{15179978137523089653ull, 3390103561306031763ull,
+ 8449684909301642732ull, 5193142653253842489ull}},
+{{14363286653476474163ull, 4237629451632539704ull,
+ 15173792155054441319ull, 6491428316567303111ull}},
+{{17954108316845592703ull, 685350796113286726ull,
+ 14355554175390663745ull, 8114285395709128889ull}},
+{{6609631679601107536ull, 11957559293639273964ull,
+ 2054692331978082984ull, 5071428372318205556ull}},
+{{8262039599501384419ull, 14946949117049092455ull,
+ 2568365414972603730ull, 6339285465397756945ull}},
+{{5715863480949342620ull, 9460314359456589761ull,
+ 7822142787143142567ull, 7924106831747196181ull}},
+{{15101629721661808898ull, 12830225502301450456ull,
+ 7194682251178158056ull, 4952566769841997613ull}},
+{{430293078367709506ull, 16037781877876813071ull,
+ 13605038832400085474ull, 6190708462302497016ull}},
+{{14372924403241800595ull, 10823855310491240530ull,
+ 17006298540500106843ull, 7738385577878121270ull}},
+{{13594763770453513276ull, 4459066559843331379ull,
+ 6017250569385178873ull, 4836490986173825794ull}},
+{{12381768694639503691ull, 10185519218231552128ull,
+ 16744935248586249399ull, 6045613732717282242ull}},
+{{15477210868299379613ull, 8120213004362052256ull,
+ 11707797023878035941ull, 7557017165896602803ull}},
+{{9673256792687112258ull, 7380976136939976612ull,
+ 5011530130710078511ull, 4723135728685376752ull}},
+{{12091570990858890323ull, 4614534152747582861ull,
+ 6264412663387598139ull, 5903919660856720940ull}},
+{{1279405683291449191ull, 1156481672507090673ull,
+ 7830515829234497674ull, 7379899576070901175ull}},
+{{12328843598125625505ull, 5334487063744319574ull,
+ 11811601420912642902ull, 4612437235044313234ull}},
+{{6187682460802256073ull, 15891480866535175276ull,
+ 5541129739286027819ull, 5765546543805391543ull}},
+{{7734603076002820091ull, 15252665064741581191ull,
+ 2314726155680146870ull, 7206933179756739429ull}},
+{{5056567826576137210ull, 9842459294072200681ull,
+ 7505093713027571492ull, 9008666474695924286ull}},
+{{14689569937678555516ull, 15374909095649901233ull,
+ 78997552214844278ull, 5630416546684952679ull}},
+{{4526904366816030683ull, 9995264332707600734ull,
+ 13933804995550719060ull, 7038020683356190848ull}},
+{{14882002495374814162ull, 12494080415884500917ull,
+ 17417256244438398825ull, 8797525854195238560ull}},
+{{11607094568822952803ull, 891271232286731217ull,
+ 10885785152773999266ull, 5498453658872024100ull}},
+{{673810155746527292ull, 10337461077213189830ull,
+ 13607231440967499082ull, 6873067073590030125ull}},
+{{10065634731537934923ull, 3698454309661711479ull,
+ 3173981245927210141ull, 8591333841987537657ull}},
+{{13208550734852291183ull, 4617376952752263626ull,
+ 13512953324772976098ull, 5369583651242211035ull}},
+{{7287316381710588171ull, 14995093227795105341ull,
+ 12279505637538832218ull, 6711979564052763794ull}},
+{{13720831495565623117ull, 9520494497889105868ull,
+ 6126010010068764465ull, 8389974455065954743ull}},
+{{17798891721583290256ull, 17479524107249160927ull,
+ 10746285283934059646ull, 5243734034416221714ull}},
+{{17636928633551724916ull, 12626033097206675351ull,
+ 4209484568062798750ull, 6554667543020277143ull}},
+{{17434474773512268241ull, 6559169334653568381ull,
+ 650169691651110534ull, 8193334428775346429ull}},
+{{13202389742658861603ull, 17934538889440643950ull,
+ 2712199066495638035ull, 5120834017984591518ull}},
+{{7279615141468801196ull, 17806487593373417034ull,
+ 12613620869974323352ull, 6401042522480739397ull}},
+{{18322890963690777303ull, 3811365418007219676ull,
+ 1931968032185740479ull, 8001303153100924247ull}},
+{{2228434815451960006ull, 9299632413895594154ull,
+ 8125009047757169655ull, 5000814470688077654ull}},
+{{12008915556169725816ull, 7012854498942104788ull,
+ 932889272841686261ull, 6251018088360097068ull}},
+{{15011144445212157269ull, 13377754142105018889ull,
+ 1166111591052107826ull, 7813772610450121335ull}},
+{{2464436250616516438ull, 12972782357243024710ull,
+ 7646348772048649247ull, 4883607881531325834ull}},
+{{12303917350125421355ull, 11604291928126392983ull,
+ 334563928206035751ull, 6104509851914157293ull}},
+{{10768210669229388789ull, 9893678891730603325ull,
+ 5029890928684932593ull, 7630637314892696616ull}},
+{{9035974677482061946ull, 17712764353400096838ull,
+ 3143681830428082870ull, 4769148321807935385ull}},
+{{2071596309997801624ull, 12917583404895345240ull,
+ 8541288306462491492ull, 5961435402259919231ull}},
+{{2589495387497252030ull, 16146979256119181550ull,
+ 6064924364650726461ull, 7451794252824899039ull}},
+{{15453492672467946231ull, 12397705044288182420ull,
+ 10708106755547785894ull, 4657371408015561899ull}},
+{{870121766875381172ull, 6273759268505452218ull, 8773447426007344464ull,
+ 5821714260019452374ull}},
+{{10311024245449002273ull, 7842199085631815272ull,
+ 1743437245654404772ull, 7277142825024315468ull}},
+{{12888780306811252842ull, 9802748857039769090ull,
+ 2179296557068005965ull, 9096428531280394335ull}},
+{{12667173710184420930ull, 8432561044863549633ull,
+ 8279589375808585584ull, 5685267832050246459ull}},
+{{1998909082448362451ull, 10540701306079437042ull,
+ 5737800701333344076ull, 7106584790062808074ull}},
+{{11722008389915228871ull, 13175876632599296302ull,
+ 16395622913521455903ull, 8883230987578510092ull}},
+{{2714569225269630141ull, 15152451923015642045ull,
+ 1023892284096134131ull, 5552019367236568808ull}},
+{{8004897550014425580ull, 14328878885342164652ull,
+ 1279865355120167664ull, 6940024209045711010ull}},
+{{10006121937518031974ull, 17911098606677705815ull,
+ 10823203730754985388ull, 8675030261307138762ull}},
+{{13171355238589851840ull, 1971064592318790326ull,
+ 11376188350149253772ull, 5421893913316961726ull}},
+{{7240822011382538992ull, 2463830740398487908ull,
+ 4996863400831791407ull, 6777367391646202158ull}},
+{{9051027514228173740ull, 16914846480780273597ull,
+ 15469451287894515066ull, 8471709239557752697ull}},
+{{7962735205606302540ull, 15183465068915058902ull,
+ 2750878027292990060ull, 5294818274723595436ull}},
+{{730046970153102366ull, 532587262434272012ull, 3438597534116237576ull,
+ 6618522843404494295ull}},
+{{912558712691377958ull, 665734078042840015ull, 18133304972927460682ull,
+ 8273153554255617868ull}},
+{{7487878223073193080ull, 5027769817204162913ull,
+ 2109943571224887118ull, 5170720971409761168ull}},
+{{13971533797268879254ull, 15508084308359979449ull,
+ 2637429464031108897ull, 6463401214262201460ull}},
+{{3629359191303935355ull, 5550047330167810600ull,
+ 3296786830038886122ull, 8079251517827751825ull}},
+{{2268349494564959597ull, 8080465599782269529ull,
+ 13589706814842773586ull, 5049532198642344890ull}},
+{{7447122886633587400ull, 877209962873061103ull, 7763761481698691175ull,
+ 6311915248302931113ull}},
+{{4697217589864596346ull, 14931570508873490091ull,
+ 14316387870550751872ull, 7889894060378663891ull}},
+{{629917984451678765ull, 9332231568045931307ull, 6641899409880525968ull,
+ 4931183787736664932ull}},
+{{14622455535846762168ull, 11665289460057414133ull,
+ 8302374262350657460ull, 6163979734670831165ull}},
+{{4443011364526288997ull, 14581611825071767667ull,
+ 14989653846365709729ull, 7704974668338538956ull}},
+{{471039093615236672ull, 2195978363028772936ull, 145161617123792773ull,
+ 4815609167711586848ull}},
+{{588798867019045839ull, 7356658972213354074ull, 181452021404740966ull,
+ 6019511459639483560ull}},
+{{9959370620628583107ull, 18419195752121468400ull,
+ 226815026755926207ull, 7524389324549354450ull}},
+{{6224606637892864442ull, 18429526372716999606ull,
+ 4753445410149841783ull, 4702743327843346531ull}},
+{{17004130334220856360ull, 18425221947468861603ull,
+ 1330120744259914325ull, 5878429159804183164ull}},
+{{16643476899348682546ull, 9196469379053913292ull,
+ 1662650930324892907ull, 7348036449755228955ull}},
+{{2357602050476301567ull, 6883900705390003712ull,
+ 15913371718188279846ull, 9185045562194036193ull}},
+{{1473501281547688480ull, 18137495996150916032ull,
+ 3028328296226593047ull, 5740653476371272621ull}},
+{{1841876601934610599ull, 18060183976761257136ull,
+ 8397096388710629213ull, 7175816845464090776ull}},
+{{2302345752418263249ull, 8740171915669407708ull,
+ 10496370485888286517ull, 8969771056830113470ull}},
+{{10662338132116190339ull, 7768450456507073769ull,
+ 1948545535252791169ull, 5606106910518820919ull}},
+{{17939608683572625827ull, 14322249089061230115ull,
+ 16270739974348152673ull, 7007633638148526148ull}},
+{{17812824836038394380ull, 4067753306044373932ull,
+ 1891680894225639226ull, 8759542047685657686ull}},
+{{1909643485669220680ull, 7154031834705121612ull,
+ 15017358614173188228ull, 5474713779803536053ull}},
+{{2387054357086525850ull, 8942539793381402015ull,
+ 4936640212434321573ull, 6843392224754420067ull}},
+{{16818876001640321024ull, 15789860760154140422ull,
+ 1559114247115514062ull, 8554240280943025084ull}},
+{{5900111482597812736ull, 5256976956668949860ull,
+ 10197818441301972097ull, 5346400175589390677ull}},
+{{7375139353247265920ull, 11182907214263575229ull,
+ 17358959070054853025ull, 6683000219486738346ull}},
+{{13830610209986470304ull, 143575962547305324ull,
+ 12475326800713790474ull, 8353750274358422933ull}},
+{{17867503418096319748ull, 4701420995019453731ull,
+ 10102922259659812998ull, 5221093921474014333ull}},
+{{17722693254193011781ull, 15100148280629092972ull,
+ 17240338843002154151ull, 6526367401842517916ull}},
+{{3706622494031713110ull, 14263499332358978312ull,
+ 3103679480043141073ull, 8157959252303147396ull}},
+{{2316639058769820694ull, 1997158055083279589ull,
+ 11163171711881738979ull, 5098724532689467122ull}},
+{{7507484841889663771ull, 16331505624136263198ull,
+ 4730592602997397915ull, 6373405665861833903ull}},
+{{160984015507303906ull, 15802696011742941094ull,
+ 1301554735319359490ull, 7966757082327292379ull}},
+{{13935673064974228654ull, 14488371025766726087ull,
+ 16954372774070457345ull, 4979223176454557736ull}},
+{{12807905312790397913ull, 4275405726926243897ull,
+ 2746221893878520066ull, 6224028970568197171ull}},
+{{2174823585705833679ull, 14567629195512580680ull,
+ 17267835422630313794ull, 7780036213210246463ull}},
+{{1359264741066146049ull, 13716454265622750829ull,
+ 17709926166785027977ull, 4862522633256404039ull}},
+{{6310766944760070466ull, 3310509776746274824ull,
+ 17525721690053897068ull, 6078153291570505049ull}},
+{{7888458680950088082ull, 4138137220932843530ull,
+ 8072094057285207623ull, 7597691614463131312ull}},
+{{9541972694021192955ull, 9503864790724109062ull,
+ 5045058785803254764ull, 4748557259039457070ull}},
+{{2704093830671715386ull, 11879830988405136328ull,
+ 15529695519108844263ull, 5935696573799321337ull}},
+{{3380117288339644233ull, 10238102717079032506ull,
+ 5577061343603891617ull, 7419620717249151672ull}},
+{{6724259323639665550ull, 17928029244242865076ull,
+ 3485663339752432260ull, 4637262948280719795ull}},
+{{8405324154549581937ull, 3963292481594029729ull,
+ 18192137229972704038ull, 5796578685350899743ull}},
+{{15118341211614365325ull, 14177487638847312969ull,
+ 18128485519038492143ull, 7245723356688624679ull}},
+{{5062868459235792944ull, 13110173530131753308ull,
+ 18048920880370727275ull, 9057154195860780849ull}},
+{{12387664823877146398ull, 5888015447118651865ull,
+ 4363046522590622691ull, 5660721372412988031ull}},
+{{1649522974564269286ull, 2748333290470926928ull, 842122134810890460ull,
+ 7075901715516235039ull}},
+{{2061903718205336607ull, 3435416613088658660ull,
+ 14887710723795776787ull, 8844877144395293798ull}},
+{{10512061860733111187ull, 18288036447676269326ull,
+ 4693133183944972587ull, 5528048215247058624ull}},
+{{3916705289061613176ull, 18248359541167948754ull,
+ 5866416479931215734ull, 6910060269058823280ull}},
+{{14119253648181792278ull, 13587077389605160134ull,
+ 7333020599914019668ull, 8637575336323529100ull}},
+{{4212847511686232270ull, 17715295405358000892ull,
+ 13806509911801038100ull, 5398484585202205687ull}},
+{{5266059389607790337ull, 3697375182987949499ull,
+ 12646451371323909722ull, 6748105731502757109ull}},
+{{1970888218582350018ull, 13845091015589712682ull,
+ 1973006158872723440ull, 8435132164378446387ull}},
+{{5843491155041356665ull, 8653181884743570426ull,
+ 17374029913791309814ull, 5271957602736528991ull}},
+{{16527735980656471639ull, 1593105319074687224ull,
+ 17105851373811749364ull, 6589947003420661239ull}},
+{{2212925902111037933ull, 1991381648843359031ull,
+ 16770628198837298801ull, 8237433754275826549ull}},
+{{8300607716460480564ull, 12773828576595569154ull,
+ 12787485633487005702ull, 5148396096422391593ull}},
+{{1152387608720824897ull, 6743913683889685635ull,
+ 2149298986576593416ull, 6435495120527989492ull}},
+{{15275542566183194834ull, 8429892104862107043ull,
+ 2686623733220741770ull, 8044368900659986865ull}},
+{{7241371094650802819ull, 9880368583966204806ull,
+ 13208354879331433366ull, 5027730562912491790ull}},
+{{18275085905168279332ull, 3127088693102980199ull,
+ 7287071562309515900ull, 6284663203640614738ull}},
+{{18232171363032961261ull, 3908860866378725249ull,
+ 18332211489741670683ull, 7855829004550768422ull}},
+{{4477578074254518932ull, 137195032273009329ull, 6845946162661156273ull,
+ 4909893127844230264ull}},
+{{10208658611245536569ull, 4783179808768649565ull,
+ 8557432703326445341ull, 6137366409805287830ull}},
+{{17372509282484308615ull, 10590660779388199860ull,
+ 1473418842303280868ull, 7671708012256609788ull}},
+{{1634446264697917077ull, 15842535023972400721ull,
+ 10144258813294326350ull, 4794817507660381117ull}},
+{{6654743849299784250ull, 10579796743110725093ull,
+ 17292009535045295842ull, 5993521884575476396ull}},
+{{12930115830052118216ull, 4001373892033630558ull,
+ 3168267845097068187ull, 7491902355719345496ull}},
+{{3469636375355185981ull, 195015673307325147ull, 1980167403185667617ull,
+ 4682438972324590935ull}},
+{{18172103524476146188ull, 4855455610061544337ull,
+ 16310267309264248233ull, 5853048715405738668ull}},
+{{8880071350313019023ull, 10681005531004318326ull,
+ 1941090062870758675ull, 7316310894257173336ull}},
+{{1876717151036497971ull, 8739570895328010004ull,
+ 2426362578588448344ull, 9145388617821466670ull}},
+{{10396320256252587040ull, 5462231809580006252ull,
+ 15351534666899943927ull, 5715867886138416668ull}},
+{{12995400320315733800ull, 2216103743547619911ull,
+ 742674259915378293ull, 7144834857673020836ull}},
+{{11632564381967279346ull, 7381815697861912793ull,
+ 928342824894222866ull, 8931043572091276045ull}},
+{{352823711088467735ull, 9225320829591083400ull, 2886057274772583243ull,
+ 5581902232557047528ull}},
+{{441029638860584669ull, 6919965018561466346ull, 3607571593465729054ull,
+ 6977377790696309410ull}},
+{{9774659085430506644ull, 17873328310056608740ull,
+ 13732836528686937125ull, 8721722238370386762ull}},
+{{15332533965248842461ull, 13476673202999074414ull,
+ 13194708848856723607ull, 5451076398981491726ull}},
+{{9942295419706277268ull, 12234155485321455114ull,
+ 7270014024216128701ull, 6813845498726864658ull}},
+{{3204497237778070777ull, 1457636301369655181ull,
+ 18310889567124936685ull, 8517306873408580822ull}},
+{{4308653782824988188ull, 3216865697569728440ull,
+ 6832619961025697524ull, 5323316795880363014ull}},
+{{5385817228531235234ull, 4021082121962160550ull,
+ 17764146988136897713ull, 6654145994850453767ull}},
+{{15955643572518819851ull, 9638038670880088591ull,
+ 17593497716743734237ull, 8317682493563067209ull}},
+{{16889806260465344263ull, 8329617178513749321ull,
+ 4078407045323752042ull, 5198551558476917006ull}},
+{{7277199770299516617ull, 1188649436287410844ull,
+ 14321380843509465861ull, 6498189448096146257ull}},
+{{9096499712874395771ull, 6097497813786651459ull,
+ 4066667999104668614ull, 8122736810120182822ull}},
+{{3379469311332803405ull, 17645994188898820874ull,
+ 16376725554722581595ull, 5076710506325114263ull}},
+{{13447708676020780064ull, 17445806717696138188ull,
+ 15859220924975839090ull, 6345888132906392829ull}},
+{{16809635845025975080ull, 12583886360265396927ull,
+ 5988968100937635151ull, 7932360166132991037ull}},
+{{17423551430782316281ull, 14782458002806954935ull,
+ 6048948072299715921ull, 4957725103833119398ull}},
+{{17167753270050507447ull, 4643014448226529957ull,
+ 16784557127229420710ull, 6197156379791399247ull}},
+{{7624633532280970597ull, 15027140097137938255ull,
+ 16369010390609387983ull, 7746445474739249059ull}},
+{{11682924985316688479ull, 16309491588352293265ull,
+ 7924788484917173537ull, 4841528421712030662ull}},
+{{768598176363696887ull, 6551806430158202870ull, 682613569291691114ull,
+ 6051910527140038328ull}},
+{{10184119757309396917ull, 17413130074552529395ull,
+ 853266961614613892ull, 7564888158925047910ull}},
+{{4059231839104679121ull, 1659834259740555064ull,
+ 14368349906291297395ull, 4728055099328154943ull}},
+{{5074039798880848901ull, 15909850879957857542ull,
+ 13348751364436733839ull, 5910068874160193679ull}},
+{{15565921785455836934ull, 15275627581519934023ull,
+ 12074253187118529395ull, 7387586092700242099ull}},
+{{16646230143550979940ull, 7241424229236264812ull,
+ 5240565232735386920ull, 4617241307937651312ull}},
+{{2361043605729173309ull, 9051780286545331016ull,
+ 6550706540919233650ull, 5771551634922064140ull}},
+{{2951304507161466636ull, 2091353321326887962ull,
+ 8188383176149042063ull, 7214439543652580175ull}},
+{{12912502670806609103ull, 16449249706940773664ull,
+ 5623792951758914674ull, 9018049429565725219ull}},
+{{8070314169254130690ull, 14892467085265371444ull,
+ 1209027585635627719ull, 5636280893478578262ull}},
+{{10087892711567663362ull, 14003897838154326401ull,
+ 10734656518899310457ull, 7045351116848222827ull}},
+{{17221551907886967106ull, 3669814242410744289ull,
+ 8806634630196750168ull, 8806688896060278534ull}},
+{{3845940914788272586ull, 2293633901506715181ull, 892460625445580951ull,
+ 5504180560037674084ull}},
+{{9419112161912728636ull, 16702100432165557688ull,
+ 1115575781806976188ull, 6880225700047092605ull}},
+{{11773890202390910795ull, 2430881466497395494ull,
+ 6006155745686108140ull, 8600282125058865756ull}},
+{{2746995358066931343ull, 10742672953415647992ull,
+ 12977219377908593395ull, 5375176328161791097ull}},
+{{3433744197583664178ull, 8816655173342172086ull,
+ 2386466167103578032ull, 6718970410202238872ull}},
+{{13515552283834356031ull, 11020818966677715107ull,
+ 2983082708879472540ull, 8398713012752798590ull}},
+{{6141377168182778568ull, 16111383891028347750ull,
+ 15699484748331834049ull, 5249195632970499118ull}},
+{{16900093497083249017ull, 6304171808503270975ull,
+ 10400983898560016754ull, 6561494541213123898ull}},
+{{16513430852926673367ull, 17103586797483864527ull,
+ 3777857836345245134ull, 8201868176516404873ull}},
+{{17238423310720252711ull, 6078055730000027425ull,
+ 13890376193784247969ull, 5126167610322753045ull}},
+{{7712971083118152176ull, 12209255680927422186ull,
+ 3527912186948146249ull, 6407709512903441307ull}},
+{{417841817042914412ull, 1426511545877114021ull,
+ 18244948288967346524ull, 8009636891129301633ull}},
+{{2566994144865515460ull, 10114941753027972071ull,
+ 4485563652963509721ull, 5006023056955813521ull}},
+{{17043800736364058037ull, 17255363209712352992ull,
+ 10218640584631775055ull, 6257528821194766901ull}},
+{{2858006846745520930ull, 16957517993713053337ull,
+ 17384986749217106723ull, 7821911026493458626ull}},
+{{13315469325284420341ull, 8292605736856964383ull,
+ 15477302736688079606ull, 4888694391558411641ull}},
+{{12032650638178137523ull, 1142385134216429671ull,
+ 5511570365577935796ull, 6110867989448014552ull}},
+{{10429127279295283999ull, 1427981417770537089ull,
+ 6889462956972419745ull, 7638584986810018190ull}},
+{{18047419595628022260ull, 12421703432175055440ull,
+ 18140972403389926052ull, 4774115616756261368ull}},
+{{4112530420825476208ull, 15527129290218819301ull,
+ 4229471430527855949ull, 5967644520945326711ull}},
+{{9752349044459233164ull, 5573853557491360414ull, 675153269732432033ull,
+ 7459555651181658389ull}},
+{{1483532134359632824ull, 15012873519500570019ull,
+ 2727813802796463972ull, 4662222281988536493ull}},
+{{15689473223231704742ull, 319347825666160907ull,
+ 8021453271922967870ull, 5827777852485670616ull}},
+{{15000155510612243023ull, 9622556818937476942ull,
+ 10026816589903709837ull, 7284722315607088270ull}},
+{{9526822351410527971ull, 16639882042099234082ull,
+ 3310148700524861488ull, 9105902894508860338ull}},
+{{10565949988058967886ull, 10399926276312021301ull,
+ 6680528956255426334ull, 5691189309068037711ull}},
+{{17819123503501097761ull, 3776535808535250818ull,
+ 3738975176891895014ull, 7113986636335047139ull}},
+{{13050532342521596393ull, 13944041797523839331ull,
+ 62032952687480863ull, 8892483295418808924ull}},
+{{5850739704862303794ull, 15632555151093481438ull,
+ 9262142632284451347ull, 5557802059636755577ull}},
+{{16536796667932655551ull, 14929007920439463893ull,
+ 16189364308782952088ull, 6947252574545944471ull}},
+{{6835937779633655726ull, 214515826839778251ull,
+ 15625019367551302207ull, 8684065718182430589ull}},
+{{1966618103057340877ull, 7051601419415943263ull,
+ 12071480113933257831ull, 5427541073864019118ull}},
+{{16293330684103839808ull, 4202815755842541174ull,
+ 5865978105561796481ull, 6784426342330023898ull}},
+{{11143291318275023952ull, 9865205713230564372ull,
+ 16555844668807021409ull, 8480532927912529872ull}},
+{{16187929110776665778ull, 17694968616837572492ull,
+ 10347402918004388380ull, 5300333079945331170ull}},
+{{1788167314761280607ull, 3671966697337414000ull,
+ 3710881610650709668ull, 6625416349931663963ull}},
+{{2235209143451600758ull, 4589958371671767500ull, 26915994885999181ull,
+ 8281770437414579954ull}},
+{{10620377751512026282ull, 5174566991508548639ull,
+ 4628508515231137392ull, 5176106523384112471ull}},
+{{8663786170962644948ull, 6468208739385685799ull,
+ 1173949625611533836ull, 6470133154230140589ull}},
+{{6218046695275918281ull, 8085260924232107249ull,
+ 6079123050441805199ull, 8087666442787675736ull}},
+{{15415494230615918686ull, 11970817105286148886ull,
+ 3799451906526128249ull, 5054791526742297335ull}},
+{{10045995751415122549ull, 1128463326325522396ull,
+ 137628864730272408ull, 6318489408427871669ull}},
+{{12557494689268903187ull, 1410579157906902995ull,
+ 4783722099340228414ull, 7898111760534839586ull}},
+{{5542591171579370540ull, 14716670028973978084ull,
+ 7601512330515030662ull, 4936319850334274741ull}},
+{{6928238964474213175ull, 9172465499362696797ull,
+ 14113576431571176232ull, 6170399812917843426ull}},
+{{13271984724020154372ull, 11465581874203370996ull,
+ 8418598502609194482ull, 7712999766147304283ull}},
+{{17518362489367372291ull, 11777674689804494776ull,
+ 2955781054917052599ull, 4820624853842065177ull}},
+{{3451209037999663747ull, 10110407343828230567ull,
+ 8306412337073703653ull, 6025781067302581471ull}},
+{{18149069352781743396ull, 17249695198212676112ull,
+ 5771329402914741662ull, 7532226334128226839ull}},
+{{11343168345488589623ull, 6169373480455534666ull,
+ 10524609904462795395ull, 4707641458830141774ull}},
+{{4955588395005961220ull, 3100030832142030429ull,
+ 3932390343723718436ull, 5884551823537677218ull}},
+{{10806171512184839429ull, 3875038540177538036ull,
+ 14138859966509423853ull, 7355689779422096522ull}},
+{{13507714390231049286ull, 9455484193649310449ull,
+ 8450202921282004008ull, 9194612224277620653ull}},
+{{1524792466253323948ull, 5909677621030819031ull,
+ 7587219835014946457ull, 5746632640173512908ull}},
+{{15741048638098818647ull, 11998783044715911692ull,
+ 9484024793768683071ull, 7183290800216891135ull}},
+{{1229566723913971693ull, 10386792787467501712ull,
+ 7243344973783465935ull, 8979113500271113919ull}},
+{{768479202446232308ull, 13409274519808270426ull,
+ 11444619636255748065ull, 5611945937669446199ull}},
+{{10183971039912566193ull, 2926535094478174320ull,
+ 9694088526892297178ull, 7014932422086807749ull}},
+{{12729963799890707741ull, 12881540904952493708ull,
+ 16729296677042759376ull, 8768665527608509686ull}},
+{{17179599411786468147ull, 8050963065595308567ull,
+ 5844124404724336706ull, 5480415954755318554ull}},
+{{16862813246305697279ull, 840331795139359901ull,
+ 16528527542760196691ull, 6850519943444148192ull}},
+{{7243458502599957887ull, 14885472799206363589ull,
+ 2213915354740694247ull, 8563149929305185241ull}},
+{{6833004573338667631ull, 16220949527145059099ull,
+ 12912912142781403664ull, 5351968705815740775ull}},
+{{3929569698245946635ull, 1829442835221772258ull,
+ 11529454160049366677ull, 6689960882269675969ull}},
+{{14135334159662209102ull, 6898489562454603226ull,
+ 576759644779544634ull, 8362451102837094962ull}},
+{{13446269868216268593ull, 8923241994961514920ull,
+ 4972160796414603300ull, 5226531939273184351ull}},
+{{16807837335270335741ull, 11154052493701893650ull,
+ 1603514977090866221ull, 6533164924091480439ull}},
+{{11786424632233143868ull, 107507561845203351ull,
+ 15839451776645746489ull, 8166456155114350548ull}},
+{{14284044422786796774ull, 11596407272221721854ull,
+ 676285323548815747ull, 5104035096946469093ull}},
+{{8631683491628720159ull, 9883823071849764414ull,
+ 5457042672863407588ull, 6380043871183086366ull}},
+{{1566232327681124390ull, 12354778839812205518ull,
+ 16044675377934035293ull, 7975054838978857957ull}},
+{{14813953260082866456ull, 10027579784096322400ull,
+ 12333765120422466010ull, 4984409274361786223ull}},
+{{70697501394031454ull, 3311102693265627193ull, 10805520382100694609ull,
+ 6230511592952232779ull}},
+{{4700057895169927222ull, 8750564385009421895ull,
+ 8895214459198480357ull, 7788139491190290974ull}},
+{{9855065212122286370ull, 7774945749844582636ull, 947823018571662319ull,
+ 4867587181993931859ull}},
+{{12318831515152857962ull, 5106996168878340391ull,
+ 15019836828496741611ull, 6084483977492414823ull}},
+{{10786853375513684548ull, 1772059192670537585ull,
+ 14163110017193539110ull, 7605604971865518529ull}},
+{{18270998405764522603ull, 14942595050701249702ull,
+ 1934414733104880087ull, 4753503107415949081ull}},
+{{13615375970350877446ull, 14066557794949174224ull,
+ 7029704434808488013ull, 5941878884269936351ull}},
+{{17019219962938596807ull, 3748139188404304068ull,
+ 4175444525083222113ull, 7427348605337420439ull}},
+{{1413640439981847196ull, 13871802038821159803ull,
+ 9527181855818095676ull, 4642092878335887774ull}},
+{{15602108605259472707ull, 17339752548526449753ull,
+ 2685605282917843787ull, 5802616097919859718ull}},
+{{5667577701292177172ull, 17063004667230674288ull,
+ 12580378640502080542ull, 7253270122399824647ull}},
+{{7084472126615221465ull, 12105383797183567052ull,
+ 11113787282200212774ull, 9066587652999780809ull}},
+{{13651167115989289224ull, 2954178854812341503ull, 28588023734051128ull,
+ 5666617283124863006ull}},
+{{12452272876559223626ull, 3692723568515426879ull,
+ 9259107066522339718ull, 7083271603906078757ull}},
+{{10953655077271641628ull, 13839276497499059407ull,
+ 16185569851580312551ull, 8854089504882598446ull}},
+{{13763563450935857874ull, 15567076838577993985ull,
+ 5504295138810307440ull, 5533805940551624029ull}},
+{{3369396258387658630ull, 1012101974512940866ull,
+ 11492054941940272205ull, 6917257425689530036ull}},
+{{13435117359839349095ull, 5876813486568563986ull,
+ 14365068677425340256ull, 8646571782111912545ull}},
+{{13008634368326981089ull, 3673008429105352491ull,
+ 2060638895749755804ull, 5404107363819945341ull}},
+{{11649106941981338457ull, 4591260536381690614ull,
+ 7187484638114582659ull, 6755134204774931676ull}},
+{{5338011640621897263ull, 1127389652049725364ull,
+ 8984355797643228324ull, 8443917755968664595ull}},
+{{12559629312243461597ull, 9927990569385854160ull,
+ 3309379364313323750ull, 5277448597480415372ull}},
+{{15699536640304326997ull, 3186616174877541892ull,
+ 4136724205391654688ull, 6596810746850519215ull}},
+{{1177676726670857130ull, 3983270218596927366ull, 559219238312180456ull,
+ 8246013433563149019ull}},
+{{14571106009451449418ull, 2489543886623079603ull,
+ 16490413088440970449ull, 5153758395976968136ull}},
+{{13602196493386923869ull, 7723615876706237408ull,
+ 2166272286841661445ull, 6442197994971210171ull}},
+{{17002745616733654836ull, 14266205864310184664ull,
+ 16542898413834240518ull, 8052747493714012713ull}},
+{{10626716010458534273ull, 4304692646766477511ull,
+ 3421782481005318468ull, 5032967183571257946ull}},
+{{8671708994645779937ull, 5380865808458096889ull,
+ 13500600138111423893ull, 6291208979464072432ull}},
+{{15451322261734612825ull, 11337768279000009015ull,
+ 16875750172639279866ull, 7864011224330090540ull}},
+{{16574605441225214872ull, 11697791192802393538ull,
+ 1323971821044774108ull, 4915007015206306588ull}},
+{{11494884764676742781ull, 14622238991002991923ull,
+ 1654964776305967635ull, 6143758769007883235ull}},
+{{9756919937418540573ull, 13666112720326352000ull,
+ 15903764025664623256ull, 7679698461259854043ull}},
+{{6098074960886587858ull, 8541320450203970000ull,
+ 7634009506826695583ull, 4799811538287408777ull}},
+{{7622593701108234822ull, 6064964544327574596ull,
+ 14154197901960757383ull, 5999764422859260971ull}},
+{{9528242126385293528ull, 2969519661982080341ull,
+ 13081061359023558825ull, 7499705528574076214ull}},
+{{8260994338204502407ull, 13385164834807269973ull,
+ 3563977330962336361ull, 4687315955358797634ull}},
+{{14937928941183015913ull, 2896397988226923754ull,
+ 13678343700557696260ull, 5859144944198497042ull}},
+{{9449039139623994083ull, 3620497485283654693ull,
+ 7874557588842344517ull, 7323931180248121303ull}},
+{{16422984942957380507ull, 9137307875031956270ull,
+ 5231510967625542742ull, 9154913975310151629ull}},
+{{5652679570920974913ull, 1099131403467584765ull,
+ 5575537363979658166ull, 5721821234568844768ull}},
+{{11677535482078606546ull, 10597286291189256764ull,
+ 6969421704974572707ull, 7152276543211055960ull}},
+{{14596919352598258182ull, 8634921845559183051ull,
+ 8711777131218215884ull, 8940345679013819950ull}},
+{{6817231586160217412ull, 14620198190329265215ull,
+ 833174688583997023ull, 5587716049383637469ull}},
+{{3909853464272883861ull, 13663561719484193615ull,
+ 5653154379157384183ull, 6984645061729546836ull}},
+{{275630811913716922ull, 12467766130927854115ull,
+ 7066442973946730229ull, 8730806327161933545ull}},
+{{16313170321941930740ull, 10098196841043602773ull,
+ 15945741904785176153ull, 5456753954476208465ull}},
+{{6556404847145249713ull, 17234432069731891371ull,
+ 6097119325699306479ull, 6820942443095260582ull}},
+{{3583820040504174237ull, 16931354068737476310ull,
+ 16844771193978908907ull, 8526178053869075727ull}},
+{{16074945580597272611ull, 8276253283747228741ull,
+ 17445511023877899923ull, 5328861283668172329ull}},
+{{6258623920464427051ull, 5733630586256648023ull,
+ 7971830724565211192ull, 6661076604585215412ull}},
+{{3211593882153145910ull, 7167038232820810029ull,
+ 9964788405706513990ull, 8326345755731519265ull}},
+{{4313089185559410146ull, 18314456950795169980ull,
+ 17757207799635041003ull, 5203966097332199540ull}},
+{{5391361481949262682ull, 18281385170066574571ull,
+ 3749765675834249638ull, 6504957621665249426ull}},
+{{2127515834009190448ull, 13628359425728442406ull,
+ 13910579131647587856ull, 8131197027081561782ull}},
+{{15164755451537907742ull, 8517724641080276503ull,
+ 4082425938852354506ull, 5081998141925976114ull}},
+{{14344258295994996774ull, 1423783764495569821ull,
+ 14326404460420218941ull, 6352497677407470142ull}},
+{{4095264814711582255ull, 6391415724046850181ull,
+ 8684633538670497868ull, 7940622096759337678ull}},
+{{4865383518408432862ull, 13218006864384057171ull,
+ 816209943241673263ull, 4962888810474586049ull}},
+{{1470043379583153173ull, 11910822562052683560ull,
+ 5631948447479479483ull, 6203611013093232561ull}},
+{{1837554224478941466ull, 10276842184138466546ull,
+ 11651621577776737258ull, 7754513766366540701ull}},
+{{5760157408726726321ull, 11034712383513929495ull,
+ 9588106495324154738ull, 4846571103979087938ull}},
+{{2588510742481019997ull, 4570018442537636061ull,
+ 2761761082300417615ull, 6058213879973859923ull}},
+{{7847324446528662900ull, 1100837034744657172ull,
+ 17287259408157685731ull, 7572767349967324903ull}},
+{{14127949815935190120ull, 16828924211211268396ull,
+ 17722066157739635437ull, 4732979593729578064ull}},
+{{17659937269918987650ull, 7201097208731921783ull,
+ 3705838623464992681ull, 5916224492161972581ull}},
+{{17463235568971346659ull, 13613057529342290133ull,
+ 9243984297758628755ull, 7395280615202465726ull}},
+{{13220365239820785614ull, 6202317946625237381ull,
+ 1165804167671755068ull, 4622050384501541079ull}},
+{{2690398494493818305ull, 7752897433281546727ull,
+ 15292313264871857547ull, 5777562980626926348ull}},
+{{17198056173399436594ull, 5079435773174545504ull,
+ 668647507380270318ull, 7221953725783657936ull}},
+{{3050826143039744126ull, 15572666753322957689ull,
+ 835809384225337897ull, 9027442157229572420ull}},
+{{13435981385468309839ull, 2815387693185766699ull,
+ 9745752901995611994ull, 5642151348268482762ull}},
+{{12183290713407999394ull, 12742606653336984182ull,
+ 2958819090639739184ull, 7052689185335603453ull}},
+{{6005741354905223435ull, 15928258316671230228ull,
+ 8310209881727061884ull, 8815861481669504316ull}},
+{{12976960383670540455ull, 731789411064743084ull,
+ 14417253212934189486ull, 5509913426043440197ull}},
+{{16221200479588175569ull, 10138108800685704663ull,
+ 4186508460885573145ull, 6887391782554300247ull}},
+{{15664814581057831557ull, 17284322019284518733ull,
+ 621449557679578527ull, 8609239728192875309ull}},
+{{12096352122374838675ull, 17720230289693906064ull,
+ 2694248982763430531ull, 5380774830120547068ull}},
+{{15120440152968548344ull, 17538601843689994676ull,
+ 3367811228454288164ull, 6725968537650683835ull}},
+{{453806117501133814ull, 3476508230902941730ull,
+ 18044822090850023918ull, 8407460672063354793ull}},
+{{4895314841865596538ull, 16007875699596502293ull,
+ 4360484779140183092ull, 5254662920039596746ull}},
+{{10730829570759383576ull, 1563100550786076250ull,
+ 14673978010780004674ull, 6568328650049495932ull}},
+{{4190164926594453662ull, 11177247725337371121ull,
+ 18342472513475005842ull, 8210410812561869915ull}},
+{{14148068125190003299ull, 11597465846763244854ull,
+ 9158202311708184699ull, 5131506757851168697ull}},
+{{8461713119632728315ull, 9885146290026668164ull,
+ 16059438908062618778ull, 6414383447313960871ull}},
+{{10577141399540910394ull, 3133060825678559397ull,
+ 15462612616650885569ull, 8017979309142451089ull}},
+{{8916556383926762949ull, 13487378062117569383ull,
+ 2746603857765721624ull, 5011237068214031931ull}},
+{{6534009461481065782ull, 16859222577646961729ull,
+ 17268312877489315742ull, 6264046335267539913ull}},
+{{12779197845278720131ull, 11850656185203926353ull,
+ 7750333041579480966ull, 7830057919084424892ull}},
+{{1069469625658118226ull, 2794974097325066067ull,
+ 14067330187841951412ull, 4893786199427765557ull}},
+{{15171895087354811494ull, 3493717621656332583ull,
+ 3749104679520275553ull, 6117232749284706947ull}},
+{{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull,
+ 7646540936605883684ull}},
+{{2053210247837747184ull, 17140985699504597031ull,
+ 9270056306212873643ull, 4779088085378677302ull}},
+{{16401570865079347692ull, 16814546105953358384ull,
+ 2364198345911316246ull, 5973860106723346628ull}},
+{{2055219507639632999ull, 11794810595586922173ull,
+ 2955247932389145308ull, 7467325133404183285ull}},
+{{3590355201488464576ull, 16595128659096602166ull,
+ 4152872966956909769ull, 4667078208377614553ull}},
+{{13711316038715356528ull, 6908852768588588995ull,
+ 9802777227123525116ull, 5833847760472018191ull}},
+{{12527459029966807756ull, 8636065960735736244ull,
+ 7641785515477018491ull, 7292309700590022739ull}},
+{{15659323787458509695ull, 6183396432492282401ull,
+ 4940545875918885210ull, 9115387125737528424ull}},
+{{2869548339520486704ull, 8476308788735064405ull,
+ 3087841172449303256ull, 5697116953585955265ull}},
+{{8198621442827996284ull, 10595385985918830506ull,
+ 8471487483989016974ull, 7121396191982444081ull}},
+{{1024904766680219546ull, 4020860445543762325ull,
+ 15201045373413659122ull, 8901745239978055101ull}},
+{{2946408488388831169ull, 7124723796892239357ull,
+ 11806496367597230903ull, 5563590774986284438ull}},
+{{8294696628913426865ull, 4294218727687911292ull,
+ 5534748422641762821ull, 6954488468732855548ull}},
+{{10368370786141783581ull, 9979459428037277019ull,
+ 6918435528302203526ull, 8693110585916069435ull}},
+{{4174388732124920786ull, 1625476124095910233ull,
+ 2018179195975183252ull, 5433194116197543397ull}},
+{{9829671933583538887ull, 2031845155119887791ull,
+ 7134410013396366969ull, 6791492645246929246ull}},
+{{7675403898552035704ull, 7151492462327247643ull,
+ 18141384553600234519ull, 8489365806558661557ull}},
+{{2491284427381328363ull, 11387211816595611633ull,
+ 13644208355213840526ull, 5305853629099163473ull}},
+{{7725791552654048358ull, 5010642733889738733ull,
+ 3220202388735136946ull, 6632317036373954342ull}},
+{{14268925459244948351ull, 15486675454216949224ull,
+ 13248625022773696990ull, 8290396295467442927ull}},
+{{8918078412028092720ull, 5067486140458205361ull,
+ 15197919666874642475ull, 5181497684667151829ull}},
+{{15759284033462503804ull, 1722671657145368797ull,
+ 5162341528311139382ull, 6476872105833939787ull}},
+{{5864046986545966042ull, 11376711608286486805ull,
+ 1841240891961536323ull, 8096090132292424734ull}},
+{{5970872375804922729ull, 4804601745965360301ull,
+ 14985833612758123914ull, 5060056332682765458ull}},
+{{12075276488183541315ull, 15229124219311476184ull,
+ 9508919979092879084ull, 6325070415853456823ull}},
+{{15094095610229426643ull, 589661200429793614ull,
+ 7274463955438710952ull, 7906338019816821029ull}},
+{{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull,
+ 4941461262385513143ull}},
+{{10639340690884892589ull, 5072358831263164165ull,
+ 3953792708276222467ull, 6176826577981891429ull}},
+{{17910861882033503640ull, 1728762520651567302ull,
+ 9553926903772665988ull, 7721033222477364286ull}},
+{{6582602657843551871ull, 10303848612262005372ull,
+ 1359518296430528338ull, 4825645764048352679ull}},
+{{8228253322304439839ull, 3656438728472730907ull,
+ 15534455925820324135ull, 6032057205060440848ull}},
+{{5673630634453161895ull, 18405606465873077346ull,
+ 971325833565853552ull, 7540071506325551061ull}},
+{{8157705164960614088ull, 11503504041170673341ull,
+ 2912921655192352422ull, 4712544691453469413ull}},
+{{14808817474628155514ull, 5156008014608565868ull,
+ 8252838087417828432ull, 5890680864316836766ull}},
+{{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull,
+ 7363351080396045958ull}},
+{{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull,
+ 9204188850495057447ull}},
+{{4661903025908358824ull, 7341007085979871558ull,
+ 13535789341626496214ull, 5752618031559410904ull}},
+{{15050750819240224337ull, 18399630894329615255ull,
+ 16919736677033120267ull, 7190772539449263630ull}},
+{{14201752505622892517ull, 18387852599484631165ull,
+ 11926298809436624526ull, 8988465674311579538ull}},
+{{11181938325228001776ull, 6880721856250506574ull,
+ 12065622774325278233ull, 5617791046444737211ull}},
+{{4754050869680226411ull, 13212588338740521122ull,
+ 10470342449479209887ull, 7022238808055921514ull}},
+{{15165935623955058822ull, 11904049404998263498ull,
+ 3864556024994236551ull, 8777798510069901893ull}},
+{{14090395783399299668ull, 14357559905764996542ull,
+ 4721190524835091796ull, 5486124068793688683ull}},
+{{8389622692394348777ull, 17946949882206245678ull,
+ 1289802137616476841ull, 6857655085992110854ull}},
+{{1263656328638160163ull, 8598629297475643386ull,
+ 10835624708875371860ull, 8572068857490138567ull}},
+{{5401471223826238006ull, 14597515347777052924ull,
+ 13689794470688189268ull, 5357543035931336604ull}},
+{{6751839029782797507ull, 18246894184721316155ull,
+ 17112243088360236585ull, 6696928794914170755ull}},
+{{3828112768801108980ull, 8973559675619481482ull,
+ 16778617842022907828ull, 8371160993642713444ull}},
+{{7004256498928081017ull, 14831846834116951734ull,
+ 1263264114409541584ull, 5231975621026695903ull}},
+{{17978692660514877079ull, 93064468936638051ull,
+ 15414138198294090693ull, 6539969526283369878ull}},
+{{17861679807216208444ull, 4728016604598185468ull,
+ 10044300711012837558ull, 8174961907854212348ull}},
+{{1940177842655354470ull, 16790068433156029630ull,
+ 15501059981237799281ull, 5109351192408882717ull}},
+{{11648594340173968895ull, 7152527486162873325ull,
+ 5541266921265085390ull, 6386688990511103397ull}},
+{{725684869935297407ull, 18164031394558367465ull,
+ 11538269670008744641ull, 7983361238138879246ull}},
+{{11982768089778030640ull, 4434990593957897809ull,
+ 2599732525328077497ull, 4989600773836799529ull}},
+{{1143402056940374587ull, 10155424260874760166ull,
+ 7861351675087484775ull, 6237000967295999411ull}},
+{{10652624608030244042ull, 8082594307666062303ull,
+ 5215003575431968065ull, 7796251209119999264ull}},
+{{13575419407659984382ull, 16580836488359758699ull,
+ 3259377234644980040ull, 4872657005699999540ull}},
+{{12357588241147592574ull, 2279301536740146758ull,
+ 4074221543306225051ull, 6090821257124999425ull}},
+{{6223613264579714909ull, 16684184976207347160ull,
+ 9704462947560169217ull, 7613526571406249281ull}},
+{{3889758290362321819ull, 3510086582488510119ull,
+ 17594504388293575521ull, 4758454107128905800ull}},
+{{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull,
+ 5948067633911132251ull}},
+{{4924825824084280865ull, 15860803826599919845ull,
+ 18268041069853935943ull, 7435084542388915313ull}},
+{{5383859149266369493ull, 16830531419266031759ull,
+ 4499996641017628108ull, 4646927838993072071ull}},
+{{2118137918155573962ull, 2591420200372988083ull,
+ 1013309782844647232ull, 5808659798741340089ull}},
+{{16482730452976631164ull, 3239275250466235103ull,
+ 5878323246983196944ull, 7260824748426675111ull}},
+{{15991727047793401051ull, 4049094063082793879ull,
+ 2736218040301608276ull, 9076030935533343889ull}},
+{{16912358432511957513ull, 11754055826281521982ull,
+ 13239351321256974932ull, 5672519334708339930ull}},
+{{11917076003785171083ull, 14692569782851902478ull,
+ 7325817114716442857ull, 7090649168385424913ull}},
+{{5672972967876688046ull, 4530654173282714386ull,
+ 13768957411822941476ull, 8863311460481781141ull}},
+{{8157294123350317933ull, 12055030895156472299ull,
+ 10911441391603032374ull, 5539569662801113213ull}},
+{{5584931635760509512ull, 5845416582090814566ull,
+ 18250987757931178372ull, 6924462078501391516ull}},
+{{16204536581555412698ull, 7306770727613518207ull,
+ 4366990623704421349ull, 8655577598126739396ull}},
+{{17045364391113214793ull, 6872574713972142831ull,
+ 11952741176670039151ull, 5409735998829212122ull}},
+{{16695019470464130587ull, 3979032374037790635ull,
+ 5717554433982773131ull, 6762169998536515153ull}},
+{{16257088319652775329ull, 362104449119850390ull,
+ 11758629060905854318ull, 8452712498170643941ull}},
+{{5548994181355596677ull, 14061373335982070206ull,
+ 9654986172279852900ull, 5282945311356652463ull}},
+{{16159614763549271654ull, 17576716669977587757ull,
+ 7457046696922428221ull, 6603681639195815579ull}},
+{{6364460399154425855ull, 8135837782189820985ull,
+ 4709622352725647373ull, 8254602048994769474ull}},
+{{15507002795539985920ull, 7390741623082332067ull,
+ 7555199988880917512ull, 5159126280621730921ull}},
+{{14772067475997594496ull, 9238427028852915084ull,
+ 14055686004528534794ull, 6448907850777163651ull}},
+{{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull,
+ 8061134813471454564ull}},
+{{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull,
+ 5038209258419659102ull}},
+{{9237700373798089483ull, 4698445753088498727ull,
+ 12429219171114694412ull, 6297761573024573878ull}},
+{{6935439448820223949ull, 5873057191360623409ull,
+ 6313151927038592207ull, 7872201966280717348ull}},
+{{15863864701581109728ull, 10588189772241471486ull,
+ 13169091991253895937ull, 4920126228925448342ull}},
+{{10606458840121611352ull, 17846923233729227262ull,
+ 7237992952212594113ull, 6150157786156810428ull}},
+{{4034701513297238382ull, 8473595986879370366ull,
+ 9047491190265742642ull, 7687697232696013035ull}},
+{{16356746501092937701ull, 9907683510226994382ull,
+ 3348838984702395199ull, 4804810770435008147ull}},
+{{11222561089511396318ull, 7772918369356355074ull,
+ 18021106786160157711ull, 6006013463043760183ull}},
+{{4804829325034469590ull, 5104461943268055939ull,
+ 17914697464272809235ull, 7507516828804700229ull}},
+{{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull,
+ 4692198018002937643ull}},
+{{10094841185520837735ull, 1105557131661051262ull,
+ 12266475137052861751ull, 5865247522503672054ull}},
+{{3395179445046271361ull, 15217004469858477790ull,
+ 6109721884461301380ull, 7331559403129590068ull}},
+{{13467346343162615009ull, 574511513613545621ull,
+ 7637152355576626726ull, 9164449253911987585ull}},
+{{10722934473690328333ull, 14194127751290629725ull,
+ 16302435268303861463ull, 5727780783694992240ull}},
+{{18015354110540298320ull, 13130973670685899252ull,
+ 1931300011670275213ull, 7159725979618740301ull}},
+{{4072448564465821284ull, 2578659033075210354ull,
+ 7025811033015231921ull, 8949657474523425376ull}},
+{{7156966371218526206ull, 13140876941740476231ull,
+ 4391131895634519950ull, 5593535921577140860ull}},
+{{4334521945595769854ull, 7202724140320819481ull,
+ 5488914869543149938ull, 6991919901971426075ull}},
+{{10029838450422100221ull, 18226777212255800159ull,
+ 2249457568501549518ull, 8739899877464282594ull}},
+{{13186178059154894494ull, 6780049739232487195ull,
+ 6017596998740856353ull, 5462437423415176621ull}},
+{{11871036555516230214ull, 13086748192467996898ull,
+ 12133682266853458345ull, 6828046779268970776ull}},
+{{5615423657540511959ull, 2523377185302832411ull,
+ 15167102833566822932ull, 8535058474086213470ull}},
+{{1203796776749126023ull, 10800482777669046065ull,
+ 4867753252551876428ull, 5334411546303883419ull}},
+{{6116431989363795432ull, 13500603472086307581ull,
+ 1473005547262457631ull, 6668014432879854274ull}},
+{{12257226005132132194ull, 12264068321680496572ull,
+ 11064628970932847847ull, 8335018041099817842ull}},
+{{16884138290062358430ull, 14582571728691392213ull,
+ 11527079125260417808ull, 5209386275687386151ull}},
+{{7270114807295784325ull, 18228214660864240267ull,
+ 9797162888148134356ull, 6511732844609232689ull}},
+{{4475957490692342502ull, 4338524252370748718ull,
+ 16858139628612555850ull, 8139666055761540861ull}},
+{{16632531486964877776ull, 7323263676159105852ull,
+ 12842180277096541358ull, 5087291284850963038ull}},
+{{2343920284996545604ull, 18377451632053658124ull,
+ 6829353309515900889ull, 6359114106063703798ull}},
+{{2929900356245682005ull, 9136756484784908943ull,
+ 17760063673749651920ull, 7948892632579629747ull}},
+{{8748716750294633109ull, 5710472802990568089ull,
+ 8794196786879838498ull, 4968057895362268592ull}},
+{{15547581956295679290ull, 16361463040592985919ull,
+ 10992745983599798122ull, 6210072369202835740ull}},
+{{14822791426942211209ull, 11228456763886456591ull,
+ 13740932479499747653ull, 7762590461503544675ull}},
+{{16181773669479963862ull, 9323628486642729321ull,
+ 6282239790473648331ull, 4851619038439715422ull}},
+{{6392159031567791115ull, 7042849589876023748ull,
+ 17076171774946836222ull, 6064523798049644277ull}},
+{{7990198789459738893ull, 18026934024199805493ull,
+ 7510156663401381565ull, 7580654747562055347ull}},
+{{7299717252626030761ull, 13572676774338572385ull,
+ 2388004905412169526ull, 4737909217226284592ull}},
+{{13736332584209926355ull, 7742473931068439673ull,
+ 2985006131765211908ull, 5922386521532855740ull}},
+{{3335357674980244231ull, 9678092413835549592ull,
+ 3731257664706514885ull, 7402983151916069675ull}},
+{{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull,
+ 4626864469947543547ull}},
+{{16440806238860479518ull, 5831627441398752654ull,
+ 13867799344317011026ull, 5783580587434429433ull}},
+{{11327635761720823589ull, 16512906338603216626ull,
+ 3499691125114100070ull, 7229475734293036792ull}},
+{{4936172665296253678ull, 11417760886399244975ull,
+ 4374613906392625088ull, 9036844667866295990ull}},
+{{10002636943451240405ull, 7136100553999528109ull,
+ 16569191746777554392ull, 5648027917416434993ull}},
+{{17114982197741438410ull, 8920125692499410136ull,
+ 6876431628189779278ull, 7060034896770543742ull}},
+{{2946983673467246397ull, 1926785078769486863ull,
+ 17818911572091999906ull, 8825043620963179677ull}},
+{{8759393823558110854ull, 5815926692658317193ull,
+ 13442662741771193893ull, 5515652263101987298ull}},
+{{15560928297875026471ull, 11881594384250284395ull,
+ 7579956390359216558ull, 6894565328877484123ull}},
+{{14839474353916395185ull, 5628620943458079686ull,
+ 4863259469521632794ull, 8618206661096855154ull}},
+{{4662985452770359087ull, 8129574108088687708ull,
+ 7651223186878408400ull, 5386379163185534471ull}},
+{{5828731815962948858ull, 10161967635110859635ull,
+ 4952342965170622596ull, 6732973953981918089ull}},
+{{2674228751526298169ull, 12702459543888574544ull,
+ 10802114724890666149ull, 8416217442477397611ull}},
+{{1671392969703936356ull, 10244880224144053042ull,
+ 4445478693842972391ull, 5260135901548373507ull}},
+{{11312613248984696253ull, 8194414261752678398ull,
+ 945162348876327585ull, 6575169876935466884ull}},
+{{4917394524376094508ull, 14854703845618235902ull,
+ 1181452936095409481ull, 8218962346169333605ull}},
+{{16908429633017222779ull, 2366660875870315582ull,
+ 3044251094273324878ull, 5136851466355833503ull}},
+{{11912165004416752666ull, 12181698131692670286ull,
+ 17640371923123819809ull, 6421064332944791878ull}},
+{{5666834218666165025ull, 1392064609333674146ull,
+ 12827092867049998954ull, 8026330416180989848ull}},
+{{8153457405093741045ull, 5481726399260934245ull,
+ 8016933041906249346ull, 5016456510113118655ull}},
+{{14803507774794564210ull, 16075530035930943614ull,
+ 5409480283955423778ull, 6270570637641398319ull}},
+{{9281012681638429454ull, 10871040508058903710ull,
+ 2150164336516891819ull, 7838213297051747899ull}},
+{{1188946907596630505ull, 4488557308323120867ull,
+ 17484753774818915051ull, 4898883310657342436ull}},
+{{15321241689777951843ull, 999010616976513179ull,
+ 3409198144814092198ull, 6123604138321678046ull}},
+{{14539866093795051900ull, 10472135308075417282ull,
+ 13484869717872391055ull, 7654505172902097557ull}},
+{{13699102327049295341ull, 13462613595188217657ull,
+ 10733886582883938361ull, 4784065733063810973ull}},
+{{3288819853529455465ull, 2993208938703108360ull,
+ 18029044247032310856ull, 5980082166329763716ull}},
+{{4111024816911819331ull, 3741511173378885450ull,
+ 4089561235080836954ull, 7475102707912204646ull}},
+{{7181076528997274986ull, 6950130501789191310ull,
+ 16391033827207686808ull, 4671939192445127903ull}},
+{{18199717698101369540ull, 8687663127236489137ull,
+ 15877106265582220606ull, 5839923990556409879ull}},
+{{8914589067344548213ull, 1636206872190835614ull,
+ 15234696813550387854ull, 7299904988195512349ull}},
+{{1919864297325909458ull, 11268630627093320326ull,
+ 5208312961655821105ull, 9124881235244390437ull}},
+{{15034973241110857124ull, 125365114292243347ull,
+ 5561038610248582143ull, 5703050772027744023ull}},
+{{14182030532961183500ull, 13991764448147467896ull,
+ 2339612244383339774ull, 7128813465034680029ull}},
+{{17727538166201479375ull, 8266333523329559062ull,
+ 7536201323906562622ull, 8911016831293350036ull}},
+{{6468025335448536706ull, 554772433653586510ull,
+ 13933497864296377447ull, 5569385519558343772ull}},
+{{17308403706165446690ull, 14528523597349146849ull,
+ 17416872330370471808ull, 6961731899447929715ull}},
+{{7800446577424644651ull, 18160654496686433562ull,
+ 17159404394535701856ull, 8702164874309912144ull}},
+{{9486965129317790811ull, 11350409060429020976ull,
+ 10724627746584813660ull, 5438853046443695090ull}},
+{{11858706411647238513ull, 14188011325536276220ull,
+ 4182412646376241267ull, 6798566308054618863ull}},
+{{14823383014559048142ull, 13123328138492957371ull,
+ 616329789542913680ull, 8498207885068273579ull}},
+{{6958771374885711137ull, 8202080086558098357ull,
+ 16526107182960178714ull, 5311379928167670986ull}},
+{{13310150237034526825ull, 1029228071342847138ull,
+ 11434261941845447585ull, 6639224910209588733ull}},
+{{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull,
+ 8299031137761985917ull}},
+{{2328104340435295250ull, 15215603238322186527ull,
+ 2591948866729097557ull, 5186894461101241198ull}},
+{{16745188480826282774ull, 5184445992620569446ull,
+ 12463308120266147755ull, 6483618076376551497ull}},
+{{11708113564178077660ull, 1868871472348323904ull,
+ 1744077095050520982ull, 8104522595470689372ull}},
+{{7317570977611298537ull, 15003102725499866152ull,
+ 10313420221261351421ull, 5065326622169180857ull}},
+{{9146963722014123172ull, 4918820351592668978ull,
+ 17503461295004077181ull, 6331658277711476071ull}},
+{{2210332615662878157ull, 10760211457918224127ull,
+ 17267640600327708572ull, 7914572847139345089ull}},
+{{8298986912430380704ull, 15948504198053665887ull,
+ 3874746347563736001ull, 4946608029462090681ull}},
+{{5762047622110587976ull, 6100572192284918647ull,
+ 9455118952882057906ull, 6183260036827613351ull}},
+{{2590873509210847066ull, 16849087277210924117ull,
+ 7207212672675184478ull, 7729075046034516689ull}},
+{{3925138952470473368ull, 5918993529829439669ull,
+ 16033722966490460059ull, 4830671903771572930ull}},
+{{9518109709015479614ull, 2787055893859411682ull,
+ 10818781671258299266ull, 6038339879714466163ull}},
+{{2674265099414573710ull, 12707191904179040411ull,
+ 8911791070645486178ull, 7547924849643082704ull}},
+{{17812316751629966233ull, 12553680958539288160ull,
+ 5569869419153428861ull, 4717453031026926690ull}},
+{{3818651865827906175ull, 1857043142891946489ull,
+ 16185708810796561885ull, 5896816288783658362ull}},
+{{9385000850712270622ull, 6932989947042321015ull,
+ 11008763976640926548ull, 7371020360979572953ull}},
+{{7119565044962950374ull, 8666237433802901269ull,
+ 18372640989228546089ull, 9213775451224466191ull}},
+{{6755571162315537936ull, 16945613442195283053ull,
+ 18400429645908923161ull, 5758609657015291369ull}},
+{{13056149971321810324ull, 7346958747461940104ull,
+ 9165479002103990240ull, 7198262071269114212ull}},
+{{16320187464152262904ull, 9183698434327425130ull,
+ 11456848752629987800ull, 8997827589086392765ull}},
+{{14811803183522552219ull, 5739811521454640706ull,
+ 9466373479607436327ull, 5623642243178995478ull}},
+{{9291381942548414466ull, 2563078383390912979ull,
+ 2609594812654519601ull, 7029552803973744348ull}},
+{{7002541409758130179ull, 7815533997666029128ull,
+ 3261993515818149501ull, 8786941004967180435ull}},
+{{4376588381098831362ull, 7190551757754962157ull,
+ 18179647011882201102ull, 5491838128104487771ull}},
+{{10082421494800927106ull, 18211561734048478504ull,
+ 18112872746425363473ull, 6864797660130609714ull}},
+{{12603026868501158883ull, 8929394112278434418ull,
+ 13417718896176928534ull, 8580997075163262143ull}},
+{{12488577811240612206ull, 969185301746633607ull,
+ 15303603337751662190ull, 5363123171977038839ull}},
+{{10999036245623377353ull, 10434853664038067817ull,
+ 14517818153762189833ull, 6703903964971298549ull}},
+{{18360481325456609595ull, 17655253098474972675ull,
+ 4312214636920573579ull, 8379879956214123187ull}},
+{{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull,
+ 5237424972633826992ull}},
+{{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull,
+ 6546781215792283740ull}},
+{{16633120851708517460ull, 12485656897476221727ull,
+ 608267404471350836ull, 8183476519740354675ull}},
+{{17313229559958905269ull, 17026907597777414387ull,
+ 16521068192290451936ull, 5114672824837721671ull}},
+{{17029850931521243682ull, 2836890423512216368ull,
+ 16039649221935677017ull, 6393341031047152089ull}},
+{{2840569590692002986ull, 8157799047817658365ull,
+ 6214503472137432559ull, 7991676288808940112ull}},
+{{4081199003396195818ull, 12016153432527118334ull,
+ 3884064670085895349ull, 4994797680505587570ull}},
+{{14324870791100020581ull, 1185133735376734205ull,
+ 14078452874462144995ull, 6243497100631984462ull}},
+{{4071030433592862014ull, 15316475224503081469ull,
+ 8374694056222905435ull, 7804371375789980578ull}},
+{{4850237030209232711ull, 7266954006100731966ull,
+ 9845869803566703801ull, 4877732109868737861ull}},
+{{15286168324616316697ull, 13695378526053302861ull,
+ 16919023272885767655ull, 6097165137335922326ull}},
+{{5272652350488232159ull, 12507537139139240673ull,
+ 11925407054252433761ull, 7621456421669902908ull}},
+{{14824622765123614859ull, 899681684320943564ull,
+ 16676751445762546909ull, 4763410263543689317ull}},
+{{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull,
+ 5954262829429611647ull}},
+{{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull,
+ 7442828536787014559ull}},
+{{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull,
+ 4651767835491884099ull}},
+{{9305436863705329478ull, 15401676660084534608ull,
+ 7278909286806688635ull, 5814709794364855124ull}},
+{{11631796079631661847ull, 14640409806678280356ull,
+ 9098636608508360794ull, 7268387242956068905ull}},
+{{14539745099539577309ull, 9077140221493074637ull,
+ 15984981779062838897ull, 9085484053695086131ull}},
+{{11393183696425929770ull, 17202427684501641408ull,
+ 7684770602700580358ull, 5678427533559428832ull}},
+{{14241479620532412213ull, 12279662568772275952ull,
+ 9605963253375725448ull, 7098034416949286040ull}},
+{{17801849525665515266ull, 15349578210965344940ull,
+ 12007454066719656810ull, 8872543021186607550ull}},
+{{1902783916686171233ull, 14205172400280728492ull,
+ 2892972773272397602ull, 5545339388241629719ull}},
+{{2378479895857714042ull, 8533093463496134807ull,
+ 17451274021872660715ull, 6931674235302037148ull}},
+{{16808157925104306264ull, 6054680810942780604ull,
+ 3367348453631274278ull, 8664592794127546436ull}},
+{{1281726666335415607ull, 17619233562121401590ull,
+ 11327964820374322231ull, 5415370496329716522ull}},
+{{10825530369774045317ull, 17412355934224364083ull,
+ 4936583988613126981ull, 6769213120412145653ull}},
+{{8920226943790168742ull, 7930386862498291392ull,
+ 10782416004193796631ull, 8461516400515182066ull}},
+{{5575141839868855464ull, 11874020816702513976ull,
+ 11350696021048510798ull, 5288447750321988791ull}},
+{{6968927299836069330ull, 5619153984023366662ull,
+ 9576684007883250594ull, 6610559687902485989ull}},
+{{17934531161649862470ull, 16247314516883984135ull,
+ 16582541028281451146ull, 8263199609878107486ull}},
+{{18126611003672245900ull, 14766257591479877988ull,
+ 5752402124248519062ull, 5164499756173817179ull}},
+{{4211519680880755759ull, 9234449952495071678ull,
+ 2578816636883260924ull, 6455624695217271474ull}},
+{{14487771637955720506ull, 11543062440618839597ull,
+ 12446892832958851963ull, 8069530869021589342ull}},
+{{11360700282936019269ull, 4908571016173080796ull,
+ 3167622002171894573ull, 5043456793138493339ull}},
+{{14200875353670024086ull, 10747399788643738899ull,
+ 17794585557997031928ull, 6304320991423116673ull}},
+{{13139408173660142203ull, 13434249735804673624ull,
+ 8408173892214126198ull, 7880401239278895842ull}},
+{{8212130108537588877ull, 3784720066450533111ull,
+ 9866794701061216778ull, 4925250774549309901ull}},
+{{5653476617244598192ull, 13954272119917942197ull,
+ 16945179394753908876ull, 6156563468186637376ull}},
+{{11678531789983135644ull, 17442840149897427746ull,
+ 2734730169732834479ull, 7695704335233296721ull}},
+{{11910768387166847682ull, 17819304121326974197ull,
+ 13238421402151491309ull, 4809815209520810450ull}},
+{{1053402428676395890ull, 8439072096376554035ull,
+ 7324654715834588329ull, 6012269011901013063ull}},
+{{15151811091127658574ull, 15160526138898080447ull,
+ 4544132376365847507ull, 7515336264876266329ull}},
+{{16387410959595868465ull, 7169485827597606327ull,
+ 14369297781297124452ull, 4697085165547666455ull}},
+{{15872577681067447677ull, 8961857284497007909ull,
+ 13349936208194017661ull, 5871356456934583069ull}},
+{{6005664046052145885ull, 15814007624048647791ull,
+ 2852362204960358364ull, 7339195571168228837ull}},
+{{2895394039137794452ull, 1320765456351258123ull,
+ 8177138774627835860ull, 9173994463960286046ull}},
+{{17950522338956979196ull, 10048850447074312134ull,
+ 499025715715009508ull, 5733746539975178779ull}},
+{{13214780886841448187ull, 12561063058842890168ull,
+ 14458840199925925597ull, 7167183174968973473ull}},
+{{16518476108551810234ull, 1866270768271448998ull,
+ 4238492194625243285ull, 8958978968711216842ull}},
+{{5712361549417493492ull, 3472262239383349576ull,
+ 7260743640068164957ull, 5599361855444510526ull}},
+{{7140451936771866865ull, 8952013817656574874ull,
+ 18299301586939982004ull, 6999202319305638157ull}},
+{{18148936957819609390ull, 11190017272070718592ull,
+ 9039068928392813793ull, 8749002899132047697ull}},
+{{11343085598637255869ull, 76231767403117264ull,
+ 17178633126313978381ull, 5468126811957529810ull}},
+{{14178856998296569836ull, 4706975727681284484ull,
+ 12249919371037697168ull, 6835158514946912263ull}},
+{{17723571247870712295ull, 5883719659601605605ull,
+ 10700713195369733556ull, 8543948143683640329ull}},
+{{13383075039132889136ull, 12900696824105779311ull,
+ 18217160793174553232ull, 5339967589802275205ull}},
+{{12117157780488723516ull, 16125871030132224139ull,
+ 8936392936186027828ull, 6674959487252844007ull}},
+{{10534761207183516491ull, 1710594713955728558ull,
+ 6558805151805146882ull, 8343699359066055009ull}},
+{{1972539736062309903ull, 5680807714649718253ull,
+ 15628468265946686561ull, 5214812099416284380ull}},
+{{7077360688505275283ull, 11712695661739535720ull,
+ 1088841258723806585ull, 6518515124270355476ull}},
+{{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull,
+ 8148143905337944345ull}},
+{{10140874056322134219ull, 503632201182659961ull,
+ 12379872279446443655ull, 5092589940836215215ull}},
+{{17287778588830055677ull, 14464598306760488663ull,
+ 10863154330880666664ull, 6365737426045269019ull}},
+{{16998037217610181693ull, 18080747883450610829ull,
+ 8967256895173445426ull, 7957171782556586274ull}},
+{{12929616270220057510ull, 15912153445584019672ull,
+ 10216221577910791295ull, 4973232364097866421ull}},
+{{16162020337775071888ull, 15278505788552636686ull,
+ 17381962990815877023ull, 6216540455122333026ull}},
+{{10979153385364064051ull, 14486446217263407954ull,
+ 12504081701665070471ull, 7770675568902916283ull}},
+{{11473656884279927936ull, 15971557913430711827ull,
+ 5509208054326975092ull, 4856672230564322677ull}},
+{{9730385086922522016ull, 1517703318078838168ull,
+ 11498196086336106770ull, 6070840288205403346ull}},
+{{12162981358653152520ull, 11120501184453323518ull,
+ 5149373071065357654ull, 7588550360256754183ull}},
+{{2990177330730832421ull, 2338627221855939295ull,
+ 10135887197056930390ull, 4742843975160471364ull}},
+{{17572779718695704238ull, 12146656064174699926ull,
+ 12669858996321162987ull, 5928554968950589205ull}},
+{{12742602611514854490ull, 10571634061790987004ull,
+ 2002265690119290022ull, 7410693711188236507ull}},
+{{17187498669051559864ull, 1995585270191978973ull,
+ 17392317120820413928ull, 4631683569492647816ull}},
+{{7649315281032286118ull, 2494481587739973717ull,
+ 3293652327315965794ull, 5789604461865809771ull}},
+{{14173330119717745552ull, 12341474021529742954ull,
+ 17952123464427120954ull, 7237005577332262213ull}},
+{{8493290612792406132ull, 6203470490057402885ull,
+ 8605096275251737481ull, 9046256971665327767ull}},
+{{7614149642208947785ull, 15406384102354346563ull,
+ 12295714199673417781ull, 5653910607290829854ull}},
+{{4906001034333796827ull, 5422922072660769492ull,
+ 6146270712736996419ull, 7067388259113537318ull}},
+{{6132501292917246033ull, 2166966572398573961ull,
+ 16906210427776021332ull, 8834235323891921647ull}},
+{{15362028354141748531ull, 10577726144603884533ull,
+ 17483910545001095188ull, 5521397077432451029ull}},
+{{5367477387395021951ull, 13222157680754855667ull,
+ 8019830125969205273ull, 6901746346790563787ull}},
+{{2097660715816389535ull, 2692639045661405872ull,
+ 5413101639034118688ull, 8627182933488204734ull}},
+{{1311037947385243460ull, 1682899403538378670ull,
+ 17218246579678487892ull, 5391989333430127958ull}},
+{{10862169471086330132ull, 2103624254422973337ull,
+ 12299436187743334057ull, 6739986666787659948ull}},
+{{18189397857285300569ull, 7241216336456104575ull,
+ 15374295234679167571ull, 8424983333484574935ull}},
+{{18285902688444394712ull, 2219917201071371407ull,
+ 16526463549315561588ull, 5265614583427859334ull}},
+{{18245692342128105486ull, 2774896501339214259ull,
+ 11434707399789676177ull, 6582018229284824168ull}},
+{{18195429409232743953ull, 8080306645101405728ull,
+ 14293384249737095221ull, 8227522786606030210ull}},
+{{11372143380770464971ull, 7356034662402072532ull,
+ 13545051174513072417ull, 5142201741628768881ull}},
+{{14215179225963081214ull, 13806729346429978569ull,
+ 3096255912859176809ull, 6427752177035961102ull}},
+{{3933915977171687805ull, 3423353627755309500ull,
+ 13093691927928746820ull, 8034690221294951377ull}},
+{{11682069522587080686ull, 11362968054201844245ull,
+ 1266028427314384906ull, 5021681388309344611ull}},
+{{767528847951687146ull, 4980338030897529499ull,
+ 15417593589425144845ull, 6277101735386680763ull}},
+{{14794469115221772644ull, 10837108557049299777ull,
+ 14660305968354043152ull, 7846377169233350954ull}},
+{{2329014169372526047ull, 6773192848155812361ull,
+ 13774377248648664874ull, 4903985730770844346ull}},
+{{7522953730143045462ull, 17689863097049541259ull,
+ 7994599523956055284ull, 6129982163463555433ull}},
+{{4792006144251418924ull, 3665584797602374958ull,
+ 14604935423372457010ull, 7662477704329444291ull}},
+{{16830061895439300539ull, 6902676516928872252ull,
+ 6822241630394091679ull, 4789048565205902682ull}},
+{{2590833295589574058ull, 4016659627733702412ull,
+ 17751174074847390407ull, 5986310706507378352ull}},
+{{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull,
+ 7482888383134222941ull}},
+{{8941617539820436589ull, 11784926618718307329ull,
+ 4644732709119747947ull, 4676805239458889338ull}},
+{{15788707943202933640ull, 10119472254970496257ull,
+ 15029287923254460742ull, 5846006549323611672ull}},
+{{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull,
+ 7307508186654514591ull}},
+{{16599405629006654981ull, 4282460352322930642ull,
+ 14259890343230319102ull, 9134385233318143238ull}},
+{{14986314536556547267ull, 16511595775483995363ull,
+ 4300745446091561534ull, 5708990770823839524ull}},
+{{14121207152268296180ull, 11416122682500218396ull,
+ 5375931807614451918ull, 7136238463529799405ull}},
+{{17651508940335370225ull, 5046781316270497187ull,
+ 11331600777945452802ull, 8920298079412249256ull}},
+{{8726350078495912439ull, 7765924341096448646ull,
+ 7082250486215908001ull, 5575186299632655785ull}},
+{{1684565561265114740ull, 14319091444797948712ull,
+ 13464499126197272905ull, 6968982874540819731ull}},
+{{2105706951581393425ull, 4063806250715272178ull,
+ 12218937889319203228ull, 8711228593176024664ull}},
+{{5927752863165758795ull, 11763250943551820919ull,
+ 7636836180824502017ull, 5444517870735015415ull}},
+{{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull,
+ 6805647338418769269ull}},
+{{8109192344089651141ull, 10309629067051791354ull,
+ 10779635027931437426ull, 8507059173023461586ull}},
+{{9679931233483419867ull, 11055204185334757500ull,
+ 11348957910884536295ull, 5316911983139663491ull}},
+{{12099914041854274834ull, 9207319213241058971ull,
+ 9574511370178282465ull, 6646139978924579364ull}},
+{{10513206533890455638ull, 16120835034978711618ull,
+ 11968139212722853081ull, 8307674973655724205ull}},
+{{11182440102108922678ull, 3157992869220612905ull,
+ 9785930017165477128ull, 5192296858534827628ull}},
+{{142992072353989635ull, 3947491086525766132ull,
+ 12232412521456846410ull, 6490371073168534535ull}},
+{{178740090442487044ull, 14157735895011983473ull,
+ 10678829633393670108ull, 8112963841460668169ull}},
+{{11640927602595024163ull, 18071956971237265478ull,
+ 18203483566939513577ull, 5070602400912917605ull}},
+{{5327787466389004395ull, 8754888158764418136ull,
+ 8919296403392228260ull, 6338253001141147007ull}},
+{{6659734332986255494ull, 10943610198455522670ull,
+ 6537434485812897421ull, 7922816251426433759ull}},
+{{17997392013398573396ull, 9145599383248395620ull,
+ 11003425581274142744ull, 4951760157141521099ull}},
+{{4049995943038665129ull, 11431999229060494526ull,
+ 9142595958165290526ull, 6189700196426901374ull}},
+{{14285866965653107219ull, 5066626999470842349ull,
+ 2204872910851837350ull, 7737125245533626718ull}},
+{{11234509862746885964ull, 17001699929951440180ull,
+ 15213103624564562055ull, 4835703278458516698ull}},
+{{14043137328433607455ull, 16640438894011912321ull,
+ 9793007493850926761ull, 6044629098073145873ull}},
+{{3718863605259845606ull, 6965490562232726690ull,
+ 16852945385741046356ull, 7555786372591432341ull}},
+{{6935975771714791408ull, 13576803638250229989ull,
+ 12838933875301847924ull, 4722366482869645213ull}},
+{{13281655733070877164ull, 16971004547812787486ull,
+ 2213609288845146193ull, 5902958103587056517ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 7378697629483820646ull}},
+{{0ull, 0ull, 0ull, 9223372036854775808ull}},
+{{0ull, 0ull, 0ull, 5764607523034234880ull}},
+{{0ull, 0ull, 0ull, 7205759403792793600ull}},
+{{0ull, 0ull, 0ull, 9007199254740992000ull}},
+{{0ull, 0ull, 0ull, 5629499534213120000ull}},
+{{0ull, 0ull, 0ull, 7036874417766400000ull}},
+{{0ull, 0ull, 0ull, 8796093022208000000ull}},
+{{0ull, 0ull, 0ull, 5497558138880000000ull}},
+{{0ull, 0ull, 0ull, 6871947673600000000ull}},
+{{0ull, 0ull, 0ull, 8589934592000000000ull}},
+{{0ull, 0ull, 0ull, 5368709120000000000ull}},
+{{0ull, 0ull, 0ull, 6710886400000000000ull}},
+{{0ull, 0ull, 0ull, 8388608000000000000ull}},
+{{0ull, 0ull, 0ull, 5242880000000000000ull}},
+{{0ull, 0ull, 0ull, 6553600000000000000ull}},
+{{0ull, 0ull, 0ull, 8192000000000000000ull}},
+{{0ull, 0ull, 0ull, 5120000000000000000ull}},
+{{0ull, 0ull, 0ull, 6400000000000000000ull}},
+{{0ull, 0ull, 0ull, 8000000000000000000ull}},
+{{0ull, 0ull, 0ull, 5000000000000000000ull}},
+{{0ull, 0ull, 0ull, 6250000000000000000ull}},
+{{0ull, 0ull, 0ull, 7812500000000000000ull}},
+{{0ull, 0ull, 0ull, 4882812500000000000ull}},
+{{0ull, 0ull, 0ull, 6103515625000000000ull}},
+{{0ull, 0ull, 0ull, 7629394531250000000ull}},
+{{0ull, 0ull, 0ull, 4768371582031250000ull}},
+{{0ull, 0ull, 0ull, 5960464477539062500ull}},
+{{0ull, 0ull, 0ull, 7450580596923828125ull}},
+{{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}},
+{{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}},
+{{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}},
+{{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}},
+{{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}},
+{{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}},
+{{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}},
+{{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}},
+{{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}},
+{{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}},
+{{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}},
+{{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}},
+{{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}},
+{{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}},
+{{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}},
+{{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}},
+{{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}},
+{{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}},
+{{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}},
+{{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}},
+{{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}},
+{{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}},
+{{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}},
+{{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}},
+{{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}},
+{{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}},
+{{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}},
+{{0ull, 9223372036854775808ull, 18445154669448718262ull,
+ 7523163845262640050ull}},
+{{0ull, 1152921504606846976ull, 16139907686832836818ull,
+ 4701977403289150031ull}},
+{{0ull, 10664523917613334528ull, 15563198590113658118ull,
+ 5877471754111437539ull}},
+{{0ull, 4107282860161892352ull, 14842312219214684744ull,
+ 7346839692639296924ull}},
+{{0ull, 5134103575202365440ull, 106146200308804314ull,
+ 9183549615799121156ull}},
+{{0ull, 7820500752928866304ull, 9289713412047778504ull,
+ 5739718509874450722ull}},
+{{0ull, 9775625941161082880ull, 2388769728204947322ull,
+ 7174648137343063403ull}},
+{{0ull, 2996160389596577792ull, 16821020215538347865ull,
+ 8968310171678829253ull}},
+{{0ull, 13401815289566330880ull, 12818980643925161367ull,
+ 5605193857299268283ull}},
+{{0ull, 12140583093530525696ull, 11412039786479063805ull,
+ 7006492321624085354ull}},
+{{0ull, 1340670811630993408ull, 5041677696244053949ull,
+ 8758115402030106693ull}},
+{{0ull, 3143762266483064832ull, 5456891569366227670ull,
+ 5473822126268816683ull}},
+{{0ull, 13153074869958606848ull, 2209428443280396683ull,
+ 6842277657836020854ull}},
+{{0ull, 11829657569020870656ull, 11985157590955271662ull,
+ 8552847072295026067ull}},
+{{0ull, 2781849962210656256ull, 5184880485133350837ull,
+ 5345529420184391292ull}},
+{{0ull, 8088998471190708224ull, 6481100606416688546ull,
+ 6681911775230489115ull}},
+{{0ull, 887876052133609472ull, 3489689739593472779ull,
+ 8352389719038111394ull}},
+{{0ull, 16695823597079363584ull, 6792742105673308390ull,
+ 5220243574398819621ull}},
+{{0ull, 11646407459494428672ull, 13102613650519023392ull,
+ 6525304467998524526ull}},
+{{0ull, 14558009324368035840ull, 7154895026294003432ull,
+ 8156630584998155658ull}},
+{{0ull, 9098755827730022400ull, 9083495409861140049ull,
+ 5097894115623847286ull}},
+{{0ull, 15985130803089915904ull, 2130997225471649253ull,
+ 6372367644529809108ull}},
+{{0ull, 6146355448580231168ull, 2663746531839561567ull,
+ 7965459555662261385ull}},
+{{0ull, 10759001183003726336ull, 13194056628468195739ull,
+ 4978412222288913365ull}},
+{{0ull, 8837065460327270016ull, 2657512730303080962ull,
+ 6223015277861141707ull}},
+{{0ull, 1822959788554311712ull, 17156948968161014915ull,
+ 7778769097326427133ull}},
+{{0ull, 17280250932342302484ull, 13028936114314328273ull,
+ 4861730685829016958ull}},
+{{0ull, 7765255610145714393ull, 7062798106038134534ull,
+ 6077163357286271198ull}},
+{{4611686018427387904ull, 483197475827367183ull,
+ 18051869669402443976ull, 7596454196607838997ull}},
+{{9799832789158199296ull, 301998422392104489ull,
+ 13588261552590221437ull, 4747783872879899373ull}},
+{{16861477004875137024ull, 4989184046417518515ull,
+ 3150268885455613084ull, 5934729841099874217ull}},
+{{16465160237666533376ull, 6236480058021898144ull,
+ 8549522125246904259ull, 7418412301374842771ull}},
+{{10290725148541583360ull, 1591957027049992388ull,
+ 3037608319065621210ull, 4636507688359276732ull}},
+{{12863406435676979200ull, 11213318320667266293ull,
+ 3797010398832026512ull, 5795634610449095915ull}},
+{{2244199989314060288ull, 14016647900834082867ull,
+ 134576980112645236ull, 7244543263061369894ull}},
+{{16640308041924739072ull, 17520809876042603583ull,
+ 9391593261995582353ull, 9055679078826712367ull}},
+{{17317721553844043776ull, 4032977144885545383ull,
+ 12787274816388320827ull, 5659799424266695229ull}},
+{{17035465923877666816ull, 429535412679543825ull,
+ 2149035465203237322ull, 7074749280333369037ull}},
+{{7459274349564919808ull, 9760291302704205590ull,
+ 7297980349931434556ull, 8843436600416711296ull}},
+{{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull,
+ 5527147875260444560ull}},
+{{9286322599418134528ull, 5319384571023966665ull,
+ 5701547148383933247ull, 6908934844075555700ull}},
+{{16219589267700056064ull, 2037544695352570427ull,
+ 7126933935479916559ull, 8636168555094444625ull}},
+{{7831400283098841088ull, 8190994462236438373ull,
+ 15983548755743417609ull, 5397605346934027890ull}},
+{{14400936372300939264ull, 14850429096222935870ull,
+ 10756063907824496203ull, 6747006683667534863ull}},
+{{8777798428521398272ull, 13951350351851281934ull,
+ 8833393866353232350ull, 8433758354584418579ull}},
+{{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull,
+ 5271098971615261612ull}},
+{{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull,
+ 6588873714519077015ull}},
+{{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull,
+ 8236092143148846269ull}},
+{{6186205317594251264ull, 3867513670791002824ull,
+ 2563215182517940054ull, 5147557589468028918ull}},
+{{7732756646992814080ull, 14057764125343529338ull,
+ 12427391015002200875ull, 6434446986835036147ull}},
+{{442573771886241792ull, 12960519138252023769ull,
+ 10922552750325363190ull, 8043058733543795184ull}},
+{{11805823653497370880ull, 3488638442980126951ull,
+ 6826595468953351994ull, 5026911708464871990ull}},
+{{10145593548444325696ull, 13584170090579934497ull,
+ 17756616373046465800ull, 6283639635581089987ull}},
+{{17293677953982795024ull, 16980212613224918121ull,
+ 17584084447880694346ull, 7854549544476362484ull}},
+{{3891019693598165034ull, 15224318901692961730ull,
+ 1766680743070658158ull, 4909093465297726553ull}},
+{{14087146653852482101ull, 9807026590261426354ull,
+ 6820036947265710602ull, 6136366831622158191ull}},
+{{8385561280460826818ull, 3035411200972007135ull,
+ 3913360165654750349ull, 7670458539527697739ull}},
+{{12158504827929098618ull, 4202975009821198411ull,
+ 140007094320525016ull, 4794036587204811087ull}},
+{{10586445016483985368ull, 5253718762276498014ull,
+ 14010066923182819982ull, 5992545734006013858ull}},
+{{4009684233750205902ull, 15790520489700398326ull,
+ 8289211617123749169ull, 7490682167507517323ull}},
+{{16341110701376042401ull, 2951546278421667097ull,
+ 2874914251488649279ull, 4681676354692198327ull}},
+{{6591330321437889289ull, 17524490903309247584ull,
+ 17428700869642975310ull, 5852095443365247908ull}},
+{{8239162901797361611ull, 12682241592281783672ull,
+ 3339132013344167522ull, 7315119304206559886ull}},
+{{10298953627246702013ull, 6629429953497453782ull,
+ 13397287053534985211ull, 9143899130258199857ull}},
+{{1825159998601800855ull, 1837550711722214662ull,
+ 1455775380818283901ull, 5714936956411374911ull}},
+{{11504822035107026876ull, 6908624408080156231ull,
+ 15654777281305018588ull, 7143671195514218638ull}},
+{{9769341525456395691ull, 8635780510100195289ull,
+ 10345099564776497427ull, 8929588994392773298ull}},
+{{17635053499478717067ull, 3091519809598928103ull,
+ 11077373246412698796ull, 5580993121495483311ull}},
+{{17432130855921008430ull, 3864399761998660129ull,
+ 9235030539588485591ull, 6976241401869354139ull}},
+{{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull,
+ 8720301752336692674ull}},
+{{9583626965064323420ull, 2442601561758029738ull,
+ 8944249865963774832ull, 5450188595210432921ull}},
+{{2756161669475628467ull, 3053251952197537173ull,
+ 15791998350882106444ull, 6812735744013041151ull}},
+{{8056888105271923487ull, 3816564940246921466ull,
+ 15128311920175245151ull, 8515919680016301439ull}},
+{{9647241084222340084ull, 9302882115295407772ull,
+ 16372723977750610075ull, 5322449800010188399ull}},
+{{12059051355277925104ull, 7016916625691871811ull,
+ 15854218953760874690ull, 6653062250012735499ull}},
+{{10462128175670018476ull, 17994517818969615572ull,
+ 15206087673773705458ull, 8316327812515919374ull}},
+{{15762202146648537356ull, 15858259655283397636ull,
+ 4892118777681178007ull, 5197704882822449609ull}},
+{{1256008609601120079ull, 15211138550676859142ull,
+ 10726834490528860413ull, 6497131103528062011ull}},
+{{10793382798856175906ull, 5178865133063910215ull,
+ 8796857094733687613ull, 8121413879410077514ull}},
+{{13663393276926191798ull, 5542633717378637836ull,
+ 10109721702635942662ull, 5075883674631298446ull}},
+{{17079241596157739747ull, 16151664183578073103ull,
+ 3413780091440152519ull, 6344854593289123058ull}},
+{{16737365976769786780ull, 15577894211045203475ull,
+ 13490597151154966457ull, 7931068241611403822ull}},
+{{8155010726267422785ull, 2818654854262170316ull,
+ 3819937201044466132ull, 4956917651007127389ull}},
+{{10193763407834278482ull, 3523318567827712895ull,
+ 9386607519732970569ull, 6196147063758909236ull}},
+{{8130518241365460198ull, 9015834228212029023ull,
+ 11733259399666213211ull, 7745183829698636545ull}},
+{{11999102928494494480ull, 3329053383418824187ull,
+ 415758097150301401ull, 4840739893561647841ull}},
+{{10387192642190730196ull, 8773002747700918138ull,
+ 5131383639865264655ull, 6050924866952059801ull}},
+{{3760618765883636937ull, 6354567416198759769ull,
+ 11025915568258968723ull, 7563656083690074751ull}},
+{{13879601774745742846ull, 1665761625910530903ull,
+ 13808726257802937308ull, 4727285052306296719ull}},
+{{12737816200004790653ull, 2082202032388163629ull,
+ 12649221803826283731ull, 5909106315382870899ull}},
+{{2087212194723824604ull, 16437810595767368249ull,
+ 11199841236355466759ull, 7386382894228588624ull}},
+{{12833722667770860138ull, 17191160649995687011ull,
+ 6999900772722166724ull, 4616489308892867890ull}},
+{{11430467316286187268ull, 3042206738785057148ull,
+ 17973248002757484214ull, 5770611636116084862ull}},
+{{14288084145357734085ull, 13026130460336097243ull,
+ 13243187966592079459ull, 7213264545145106078ull}},
+{{13248419163269779702ull, 11670977056992733650ull,
+ 7330612921385323516ull, 9016580681431382598ull}},
+{{12891947995471000218ull, 16517732697475234339ull,
+ 18416691131147990909ull, 5635362925894614123ull}},
+{{11503248975911362368ull, 6812107816561879212ull,
+ 18409177895507600733ull, 7044203657368267654ull}},
+{{14379061219889202960ull, 13126820789129736919ull,
+ 13788100332529725108ull, 8805254571710334568ull}},
+{{15904442290071833706ull, 17427635030060861382ull,
+ 8617562707831078192ull, 5503284107318959105ull}},
+{{10657180825735016325ull, 3337799713866525112ull,
+ 15383639403216235645ull, 6879105134148698881ull}},
+{{13321476032168770406ull, 8783935660760544294ull,
+ 5394491198738130844ull, 8598881417685873602ull}},
+{{3714236501678093600ull, 14713331824830115992ull,
+ 7983243017638719681ull, 5374300886053671001ull}},
+{{4642795627097617000ull, 4556606725755481278ull,
+ 14590739790475787506ull, 6717876107567088751ull}},
+{{15026866570726797057ull, 14919130444049127405ull,
+ 13626738719667346478ull, 8397345134458860939ull}},
+{{11697634615917942113ull, 4712770509103316724ull,
+ 6210868690578397597ull, 5248340709036788087ull}},
+{{14622043269897427641ull, 10502649154806533809ull,
+ 3151899844795609092ull, 6560425886295985109ull}},
+{{4442496032089620839ull, 13128311443508167262ull,
+ 8551560824421899269ull, 8200532357869981386ull}},
+{{16611618075338176737ull, 10511037661406298490ull,
+ 9956411533691074947ull, 5125332723668738366ull}},
+{{11541150557317945113ull, 8527111058330485209ull,
+ 3222142380259067876ull, 6406665904585922958ull}},
+{{591380141365267679ull, 10658888822913106512ull,
+ 13251050012178610653ull, 8008332380732403697ull}},
+{{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull,
+ 5005207737957752311ull}},
+{{9685387772296391182ull, 1986188617563206094ull,
+ 15540529592745350965ull, 6256509672447190388ull}},
+{{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull,
+ 7820637090558987986ull}},
+{{6413787692499708635ull, 9045699637415760105ull,
+ 5223509716691223585ull, 4887898181599367491ull}},
+{{12628920634052023698ull, 15918810565197088035ull,
+ 1917701127436641577ull, 6109872726999209364ull}},
+{{11174464774137641718ull, 6063455151214196332ull,
+ 2397126409295801972ull, 7637340908749011705ull}},
+{{16207412520690801882ull, 13013031506363648515ull,
+ 13027419051878345992ull, 4773338067968132315ull}},
+{{15647579632436114448ull, 16266289382954560644ull,
+ 11672587796420544586ull, 5966672584960165394ull}},
+{{1112730466835591444ull, 11109489691838424998ull,
+ 5367362708670904925ull, 7458340731200206743ull}},
+{{14530514597054408365ull, 9249274066612709575ull,
+ 10272130720560397434ull, 4661462957000129214ull}},
+{{13551457227890622552ull, 2338220546411111161ull,
+ 3616791363845720985ull, 5826828696250161518ull}},
+{{3104263479581114478ull, 7534461701441276856ull,
+ 13744361241661927039ull, 7283535870312701897ull}},
+{{3880329349476393097ull, 4806391108374208166ull,
+ 3345393496795245087ull, 9104419837890877372ull}},
+{{16260263898704909398ull, 9921523470374961959ull,
+ 11314242972351803987ull, 5690262398681798357ull}},
+{{15713643854953748843ull, 7790218319541314545ull,
+ 307745660157591272ull, 7112827998352247947ull}},
+{{5806996763410022342ull, 9737772899426643182ull,
+ 14219740130479152802ull, 8891034997940309933ull}},
+{{17464431032413427676ull, 10697794080569039892ull,
+ 11193180590763164453ull, 5556896873712693708ull}},
+{{3383794716807232979ull, 17983928619138687770ull,
+ 13991475738453955566ull, 6946121092140867135ull}},
+{{13453115432863817032ull, 13256538737068583904ull,
+ 12877658654640056554ull, 8682651365176083919ull}},
+{{8408197145539885645ull, 12897022729095252844ull,
+ 14966065686791117202ull, 5426657103235052449ull}},
+{{10510246431924857056ull, 6897906374514290247ull,
+ 4872524053206732791ull, 6783321379043815562ull}},
+{{8526122021478683416ull, 4010696949715474905ull,
+ 15314027103363191797ull, 8479151723804769452ull}},
+{{16858041309492646895ull, 4812528602785865767ull,
+ 347894902747219065ull, 5299469827377980908ull}},
+{{16460865618438420715ull, 10627346771909720113ull,
+ 434868628434023831ull, 6624337284222476135ull}},
+{{6741023967765862181ull, 8672497446459762238ull,
+ 14378643840824693501ull, 8280421605278095168ull}},
+{{18048198035135827576ull, 7726153913251045350ull,
+ 8986652400515433438ull, 5175263503298809480ull}},
+{{13336875507065008661ull, 434320354709030880ull,
+ 11233315500644291798ull, 6469079379123511850ull}},
+{{16671094383831260826ull, 9766272480241064408ull,
+ 4818272338950588939ull, 8086349223904389813ull}},
+{{10419433989894538017ull, 3798077290936971303ull,
+ 5317263221057812039ull, 5053968264940243633ull}},
+{{8412606468940784617ull, 135910595243826225ull,
+ 11258265044749652953ull, 6317460331175304541ull}},
+{{15127444104603368675ull, 4781574262482170685ull,
+ 237773250654902479ull, 7896825413969130677ull}},
+{{11760495574590799374ull, 9906012941692438534ull,
+ 2454451290873008001ull, 4935515883730706673ull}},
+{{5477247431383723409ull, 16994202195542936072ull,
+ 7679750132018647905ull, 6169394854663383341ull}},
+{{6846559289229654262ull, 7407694689146506378ull,
+ 14211373683450697786ull, 7711743568329229176ull}},
+{{8890785574195921818ull, 9241495199143954390ull,
+ 8882108552156686116ull, 4819839730205768235ull}},
+{{1890109930890126464ull, 11551868998929942988ull,
+ 6490949671768469741ull, 6024799662757210294ull}},
+{{2362637413612658080ull, 604778193380265023ull,
+ 17337059126565362985ull, 7530999578446512867ull}},
+{{8394177411148993156ull, 11907201416931135399ull,
+ 8529818944889657913ull, 4706874736529070542ull}},
+{{5881035745508853541ull, 1048943715881755537ull,
+ 1438901644257296584ull, 5883593420661338178ull}},
+{{11962980700313454830ull, 1311179644852194421ull,
+ 11021999092176396538ull, 7354491775826672722ull}},
+{{1118667820109654825ull, 10862346592920018835ull,
+ 4554126828365719864ull, 9193114719783340903ull}},
+{{16840068452064391930ull, 6788966620575011771ull,
+ 9763858295369656771ull, 5745696699864588064ull}},
+{{16438399546653102009ull, 3874522257291376810ull,
+ 12204822869212070964ull, 7182120874830735080ull}},
+{{11324627396461601703ull, 4843152821614221013ull,
+ 15256028586515088705ull, 8977651093538418850ull}},
+{{9383735132002195016ull, 14556185559577357893ull,
+ 14146703884999318344ull, 5611031933461511781ull}},
+{{16341354933430131674ull, 18195231949471697366ull,
+ 3848321800966984218ull, 7013789916826889727ull}},
+{{11203321629932888785ull, 13520667899984845900ull,
+ 198716232781342369ull, 8767237396033612159ull}},
+{{16225448055562831299ull, 1532888409849446831ull,
+ 7041726673129420837ull, 5479523372521007599ull}},
+{{15670124051026151219ull, 6527796530739196443ull,
+ 4190472322984388142ull, 6849404215651259499ull}},
+{{14975969045355301120ull, 17383117700278771362ull,
+ 626404385303097273ull, 8561755269564074374ull}},
+{{13971666671774451104ull, 3946919535033150245ull,
+ 14226560796096599508ull, 5351097043477546483ull}},
+{{3629525284435900168ull, 4933649418791437807ull,
+ 13171514976693361481ull, 6688871304346933104ull}},
+{{18371964660827038922ull, 10778747791916685162ull,
+ 16464393720866701851ull, 8361089130433666380ull}},
+{{16094163931444287230ull, 4430874360734234274ull,
+ 1066874038686912849ull, 5225680706521041488ull}},
+{{10894332877450583230ull, 10150278969345180747ull,
+ 1333592548358641061ull, 6532100883151301860ull}},
+{{9006230078385841133ull, 17299534730108863838ull,
+ 1666990685448301326ull, 8165126103939127325ull}},
+{{1017207780563762804ull, 6200523187890651995ull,
+ 3347712187618882281ull, 5103203814961954578ull}},
+{{15106567780986867217ull, 12362340003290702897ull,
+ 13408012271378378659ull, 6379004768702443222ull}},
+{{5048151670951420310ull, 10841238985685990718ull,
+ 7536643302368197516ull, 7973755960878054028ull}},
+{{16990152849626801406ull, 15999146402908520006ull,
+ 13933774100834899255ull, 4983597475548783767ull}},
+{{12014319025178725949ull, 15387246985208262104ull,
+ 12805531607616236165ull, 6229496844435979709ull}},
+{{15017898781473407436ull, 5399000676228163918ull,
+ 2171856454238131495ull, 7786871055544974637ull}},
+{{4774500719993491744ull, 10291904450283684305ull,
+ 3663253293112526136ull, 4866794409715609148ull}},
+{{10579811918419252584ull, 12864880562854605381ull,
+ 4579066616390657670ull, 6083493012144511435ull}},
+{{17836450916451453633ull, 6857728666713480918ull,
+ 1112147252060934184ull, 7604366265180639294ull}},
+{{6536095804354770617ull, 4286080416695925574ull,
+ 14530150087820247577ull, 4752728915737899558ull}},
+{{17393491792298239079ull, 9969286539297294871ull,
+ 8939315572920533663ull, 5940911144672374448ull}},
+{{17130178721945410945ull, 7849922155694230685ull,
+ 11174144466150667079ull, 7426138930840468060ull}},
+{{13012204710429575793ull, 11823730374949976034ull,
+ 16207212328198942732ull, 4641336831775292537ull}},
+{{7041883851182193933ull, 14779662968687470043ull,
+ 6423957354966514703ull, 5801671039719115672ull}},
+{{4190668795550354512ull, 13862892692431949650ull,
+ 8029946693708143379ull, 7252088799648894590ull}},
+{{14461708031292718948ull, 12716929847112549158ull,
+ 814061330280403416ull, 9065110999561118238ull}},
+{{4426881501130561438ull, 7948081154445343224ull,
+ 14343846386707415847ull, 5665694374725698898ull}},
+{{5533601876413201798ull, 5323415424629291126ull,
+ 8706435946529494001ull, 7082117968407123623ull}},
+{{16140374382371278055ull, 11265955299214001811ull,
+ 6271358914734479597ull, 8852647460508904529ull}},
+{{7781890979768354833ull, 9347065071222445084ull,
+ 15448814367777519508ull, 5532904662818065330ull}},
+{{9727363724710443541ull, 11683831339028056355ull,
+ 10087645922867123577ull, 6916130828522581663ull}},
+{{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull,
+ 8645163535653227079ull}},
+{{13940571185267692384ull, 481081949064316707ull,
+ 11916198643363904711ull, 5403227209783266924ull}},
+{{12814027963157227576ull, 14436410491612559596ull,
+ 14895248304204880888ull, 6754034012229083655ull}},
+{{16017534953946534470ull, 18045513114515699495ull,
+ 14007374361828713206ull, 8442542515286354569ull}},
+{{16928488373857665900ull, 6666759678144924280ull,
+ 1837079948501863898ull, 5276589072053971606ull}},
+{{2713866393612530759ull, 17556821634535931159ull,
+ 11519721972482105680ull, 6595736340067464507ull}},
+{{17227391047297827161ull, 3499282969460362332ull,
+ 9787966447175244197ull, 8244670425084330634ull}},
+{{1543747367706366168ull, 4492894865126420410ull,
+ 10729165047911915527ull, 5152919015677706646ull}},
+{{11153056246487733517ull, 1004432562980637608ull,
+ 4188084273035118601ull, 6441148769597133308ull}},
+{{13941320308109666897ull, 5867226722153184914ull,
+ 5235105341293898251ull, 8051435961996416635ull}},
+{{13325011210995929715ull, 1361173692132046619ull,
+ 966097829094992455ull, 5032147476247760397ull}},
+{{12044577995317524239ull, 15536525170447221986ull,
+ 5819308304796128472ull, 6290184345309700496ull}},
+{{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull,
+ 7862730431637125620ull}},
+{{1339376026593886980ull, 7526224270984504273ull,
+ 13769706649976751177ull, 4914206519773203512ull}},
+{{6285906051669746629ull, 14019466357158018245ull,
+ 17212133312470938971ull, 6142758149716504390ull}},
+{{12469068583014571190ull, 12912646928020134902ull,
+ 12291794603733897906ull, 7678447687145630488ull}},
+{{3181481845956719090ull, 12682090348439972218ull,
+ 7682371627333686191ull, 4799029804466019055ull}},
+{{13200224344300674670ull, 11240926917122577368ull,
+ 4991278515739719835ull, 5998787255582523819ull}},
+{{16500280430375843337ull, 9439472627975833806ull,
+ 1627412126247261890ull, 7498484069478154774ull}},
+{{5700989250557514182ull, 10511356410912284033ull,
+ 14852190634186702393ull, 4686552543423846733ull}},
+{{11737922581624280632ull, 17750881532067742945ull,
+ 4730180237451214279ull, 5858190679279808417ull}},
+{{837345171748187077ull, 17576915896657290778ull,
+ 10524411315241405753ull, 7322738349099760521ull}},
+{{10270053501540009654ull, 8136086815539449760ull,
+ 17767200162479145096ull, 9153422936374700651ull}},
+{{6418783438462506034ull, 5085054259712156100ull,
+ 8798657092335771733ull, 5720889335234187907ull}},
+{{8023479298078132543ull, 10968003843067583029ull,
+ 6386635346992326762ull, 7151111669042734884ull}},
+{{14641035141025053582ull, 4486632766979702978ull,
+ 7983294183740408453ull, 8938889586303418605ull}},
+{{13762332981568046393ull, 5109988488576008313ull,
+ 7295401874051449235ull, 5586805991439636628ull}},
+{{3367858171677894279ull, 1775799592292622488ull,
+ 9119252342564311544ull, 6983507489299545785ull}},
+{{4209822714597367849ull, 2219749490365778110ull,
+ 16010751446632777334ull, 8729384361624432231ull}},
+{{16466197251905518618ull, 15222401486760775030ull,
+ 16924248681786567689ull, 5455865226015270144ull}},
+{{11359374528027122464ull, 5192943803168805076ull,
+ 2708566778523657996ull, 6819831532519087681ull}},
+{{14199218160033903080ull, 6491179753961006345ull,
+ 7997394491581960399ull, 8524789415648859601ull}},
+{{1956982322380107569ull, 10974516373866710822ull,
+ 16527586603307195009ull, 5327993384780537250ull}},
+{{11669599939829910269ull, 18329831485760776431ull,
+ 11436111217279217953ull, 6659991730975671563ull}},
+{{9975313906359999932ull, 9077231301918806827ull,
+ 9683453003171634538ull, 8324989663719589454ull}},
+{{3928728182261306006ull, 10284955582126642171ull,
+ 1440472108554883682ull, 5203118539824743409ull}},
+{{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull,
+ 6503898174780929261ull}},
+{{9597402298603831562ull, 18376086106286572344ull,
+ 12627031211078628537ull, 8129872718476161576ull}},
+{{5998376436627394726ull, 4567524788788025859ull,
+ 7891894506924142836ull, 5081170449047600985ull}},
+{{2886284527356855504ull, 5709405985985032324ull,
+ 14476554152082566449ull, 6351463061309501231ull}},
+{{3607855659196069380ull, 11748443500908678309ull,
+ 13484006671675820157ull, 7939328826636876539ull}},
+{{4560752796211237315ull, 9648620197281617895ull,
+ 6121661160583693646ull, 4962080516648047837ull}},
+{{1089254976836658739ull, 2837403209747246561ull,
+ 12263762469157004962ull, 6202600645810059796ull}},
+{{5973254739473211328ull, 12770126049038834009ull,
+ 15329703086446256202ull, 7753250807262574745ull}},
+{{15262499258239226840ull, 12593014799076659159ull,
+ 2663535401387828270ull, 4845781754539109216ull}},
+{{14466438054371645646ull, 6517896461991048141ull,
+ 3329419251734785338ull, 6057227193173886520ull}},
+{{4247989512682393345ull, 17370742614343585985ull,
+ 4161774064668481672ull, 7571533991467358150ull}},
+{{14184208491494965601ull, 10856714133964741240ull,
+ 16436166845699964757ull, 4732208744667098843ull}},
+{{17730260614368707001ull, 18182578685883314454ull,
+ 15933522538697568042ull, 5915260930833873554ull}},
+{{12939453731106107943ull, 13504851320499367260ull,
+ 10693531136517184245ull, 7394076163542341943ull}},
+{{17310530618796093273ull, 10746375084525798489ull,
+ 13600985987964322009ull, 4621297602213963714ull}},
+{{7803105218212952879ull, 18044654874084636016ull,
+ 7777860448100626703ull, 5776622002767454643ull}},
+{{9753881522766191098ull, 17944132574178407116ull,
+ 5110639541698395475ull, 7220777503459318304ull}},
+{{12192351903457738873ull, 17818479699295620991ull,
+ 6388299427122994344ull, 9025971879324147880ull}},
+{{14537748967302168652ull, 11136549812059763119ull,
+ 3992687141951871465ull, 5641232424577592425ull}},
+{{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull,
+ 7051540530721990531ull}},
+{{12338939219948015734ull, 107036512240675234ull,
+ 7391495163906646141ull, 8814425663402488164ull}},
+{{12323523030894897738ull, 2372740829364115973ull,
+ 13843056514296429646ull, 5509016039626555102ull}},
+{{1569345733336458460ull, 12189298073559920775ull,
+ 8080448606015761249ull, 6886270049533193878ull}},
+{{15796740221952736787ull, 1401564536667737256ull,
+ 877188720664925754ull, 8607837561916492348ull}},
+{{9872962638720460492ull, 5487663853844723689ull,
+ 9771614987270354404ull, 5379898476197807717ull}},
+{{16952889316827963519ull, 6859579817305904611ull,
+ 16826204752515330909ull, 6724873095247259646ull}},
+{{16579425627607566495ull, 13186160790059768668ull,
+ 11809383903789387828ull, 8406091369059074558ull}},
+{{1138768980399953251ull, 17464722530642131226ull,
+ 2769178921440979488ull, 5253807105661921599ull}},
+{{10646833262354717372ull, 3384159089593112416ull,
+ 17296531707083388073ull, 6567258882077401998ull}},
+{{13308541577943396715ull, 8841884880418778424ull,
+ 12397292596999459283ull, 8209073602596752498ull}},
+{{8317838486214622947ull, 3220335041048042563ull,
+ 12359993891552049956ull, 5130671001622970311ull}},
+{{5785612089340890780ull, 4025418801310053204ull,
+ 10838306346012674541ull, 6413338752028712889ull}},
+{{7232015111676113475ull, 9643459520064954409ull,
+ 18159568950943231080ull, 8016673440035891111ull}},
+{{16049224490866040682ull, 6027162200040596505ull,
+ 18267259621980601281ull, 5010420900022431944ull}},
+{{6226472558300387140ull, 12145638768478133536ull,
+ 4387330453766199985ull, 6263026125028039931ull}},
+{{7783090697875483925ull, 1346990405315503208ull, 872477048780362078ull,
+ 7828782656285049914ull}},
+{{4864431686172177453ull, 14676927058604353217ull,
+ 5156984173915114202ull, 4892989160178156196ull}},
+{{10692225626142609721ull, 9122786786400665713ull,
+ 6446230217393892753ull, 6116236450222695245ull}},
+{{17976968051105650055ull, 16015169501428220045ull,
+ 12669473790169753845ull, 7645295562778369056ull}},
+{{13541448041154725236ull, 12315323947606331480ull,
+ 7918421118856096153ull, 4778309726736480660ull}},
+{{16926810051443406545ull, 1559096879225750638ull,
+ 9898026398570120192ull, 5972887158420600825ull}},
+{{11935140527449482373ull, 1948871099032188298ull,
+ 16984219016640038144ull, 7466108948025751031ull}},
+{{12071148848083314388ull, 1218044436895117686ull,
+ 17532665913041105696ull, 4666318092516094394ull}},
+{{5865564023249367176ull, 1522555546118897108ull,
+ 12692460354446606312ull, 5832897615645117993ull}},
+{{7331955029061708970ull, 1903194432648621385ull,
+ 2030517387776094178ull, 7291122019556397492ull}},
+{{13776629804754524117ull, 11602365077665552539ull,
+ 2538146734720117722ull, 9113902524445496865ull}},
+{{6304550618757883621ull, 11863164191968358241ull,
+ 13115556755268543336ull, 5696189077778435540ull}},
+{{12492374291874742430ull, 14828955239960447801ull,
+ 16394445944085679170ull, 7120236347223044425ull}},
+{{1780409809561264326ull, 9312822013095783944ull,
+ 6657999374824935251ull, 8900295434028805532ull}},
+{{1112756130975790204ull, 3514670748971171013ull,
+ 13384621646120360340ull, 5562684646268003457ull}},
+{{6002631182147125659ull, 4393338436213963766ull,
+ 2895719002368286713ull, 6953355807835004322ull}},
+{{16726661014538682881ull, 10103359063694842611ull,
+ 12843020789815134199ull, 8691694759793755402ull}},
+{{8148320124872982849ull, 13232128442450358488ull,
+ 12638574012061846778ull, 5432309224871097126ull}},
+{{10185400156091228561ull, 7316788516208172302ull,
+ 6574845478222532665ull, 6790386531088871408ull}},
+{{3508378158259259893ull, 13757671663687603282ull,
+ 8218556847778165831ull, 8487983163861089260ull}},
+{{6804422367339425337ull, 15516073817445833907ull,
+ 14359970066716129452ull, 5304989477413180787ull}},
+{{3893841940746893768ull, 948348198097740768ull,
+ 13338276564967773912ull, 6631236846766475984ull}},
+{{4867302425933617209ull, 1185435247622175960ull,
+ 16672845706209717390ull, 8289046058458094980ull}},
+{{3042064016208510756ull, 14575955085046023687ull,
+ 1197156529526297560ull, 5180653786536309363ull}},
+{{17637638075542802157ull, 18219943856307529608ull,
+ 15331503717190035662ull, 6475817233170386703ull}},
+{{3600303520718951080ull, 13551557783529636203ull,
+ 14552693628060156674ull, 8094771541462983379ull}},
+{{18391090764945202089ull, 13081409633133410530ull,
+ 6789590508323903969ull, 5059232213414364612ull}},
+{{13765491419326726803ull, 2516703986134599451ull,
+ 8486988135404879962ull, 6324040266767955765ull}},
+{{12595178255731020600ull, 12369252019523025122ull,
+ 15220421187683487856ull, 7905050333459944706ull}},
+{{12483672428259275779ull, 7730782512201890701ull,
+ 14124449260729567814ull, 4940656458412465441ull}},
+{{1769532480041931012ull, 440106103397587569ull, 3820503520629796056ull,
+ 6175820573015581802ull}},
+{{6823601618479801669ull, 550132629246984461ull,
+ 13999001437642020878ull, 7719775716269477252ull}},
+{{6570594020763569995ull, 14178890948561529000ull,
+ 17972747935381038856ull, 4824859822668423282ull}},
+{{8213242525954462494ull, 17723613685701911250ull,
+ 13242562882371522762ull, 6031074778335529103ull}},
+{{1043181120588302309ull, 12931145070272613255ull,
+ 11941517584537015549ull, 7538843472919411379ull}},
+{{7569517228008770799ull, 10387808678134077236ull,
+ 5157605481121940766ull, 4711777170574632112ull}},
+{{9461896535010963499ull, 3761388810812820737ull,
+ 6447006851402425958ull, 5889721463218290140ull}},
+{{16439056687191092278ull, 13925108050370801729ull,
+ 8058758564253032447ull, 7362151829022862675ull}},
+{{6713762803706701635ull, 12794699044536114258ull,
+ 5461762186888902655ull, 9202689786278578344ull}},
+{{8807787770744076426ull, 14914215930476153267ull,
+ 3413601366805564159ull, 5751681116424111465ull}},
+{{6398048695002707629ull, 14031083894667803680ull,
+ 8878687726934343103ull, 7189601395530139331ull}},
+{{7997560868753384536ull, 12927168849907366696ull,
+ 6486673640240540975ull, 8987001744412674164ull}},
+{{4998475542970865335ull, 14997009558833186041ull,
+ 13277543062005113917ull, 5616876090257921352ull}},
+{{10859780447140969573ull, 4911203893259318839ull,
+ 16596928827506392397ull, 7021095112822401690ull}},
+{{8963039540498824062ull, 10750690885001536453ull,
+ 11522788997528214688ull, 8776368891028002113ull}},
+{{7907742722025458991ull, 6719181803125960283ull, 284214095814052324ull,
+ 5485230556892501321ull}},
+{{5272992384104435834ull, 8398977253907450354ull,
+ 4966953638194953309ull, 6856538196115626651ull}},
+{{15814612516985320601ull, 15110407585811700846ull,
+ 1597006029316303732ull, 8570672745144533314ull}},
+{{5272446804688437472ull, 220632704277537221ull, 5609814786750077737ull,
+ 5356670465715333321ull}},
+{{11202244524287934743ull, 4887476898774309430ull,
+ 11623954501864985075ull, 6695838082144166651ull}},
+{{4779433618505142621ull, 1497660105040498884ull,
+ 9918257108903843440ull, 8369797602680208314ull}},
+{{12210518048420489946ull, 936037565650311802ull,
+ 10810596711492290054ull, 5231123501675130196ull}},
+{{6039775523670836625ull, 10393418993917665561ull,
+ 13513245889365362567ull, 6538904377093912745ull}},
+{{12161405423015933685ull, 8380087723969694047ull,
+ 3056499306424539497ull, 8173630471367390932ull}},
+{{14518407417026040409ull, 16766769873549528539ull,
+ 11133684103370112993ull, 5108519044604619332ull}},
+{{13536323252855162607ull, 7123404286654746962ull,
+ 13917105129212641242ull, 6385648805755774165ull}},
+{{7697032029214177451ull, 18127627395173209511ull,
+ 3561323356233637840ull, 7982061007194717707ull}},
+{{11728174045899942763ull, 11329767121983255944ull,
+ 18366728162141881314ull, 4988788129496698566ull}},
+{{14660217557374928454ull, 4938836865624294122ull,
+ 13735038165822575835ull, 6235985161870873208ull}},
+{{9101899909863884759ull, 1561860063602979749ull,
+ 17168797707278219794ull, 7794981452338591510ull}},
+{{7994530452878621927ull, 5587848558179250247ull,
+ 6118812548621499467ull, 4871863407711619694ull}},
+{{5381477047670889504ull, 2373124679296674905ull,
+ 16871887722631650142ull, 6089829259639524617ull}},
+{{11338532328015999784ull, 12189777885975619439ull,
+ 7254801598007398965ull, 7612286574549405772ull}},
+{{14004111732651081721ull, 9924454187948456101ull,
+ 13757623035609400161ull, 4757679109093378607ull}},
+{{3670081610531688440ull, 17017253753362958031ull,
+ 12585342776084362297ull, 5947098886366723259ull}},
+{{18422660068446774261ull, 7436509136421533826ull,
+ 11119992451678064968ull, 7433873607958404074ull}},
+{{16125848561206621817ull, 4647818210263458641ull,
+ 11561681300726178509ull, 4646171004974002546ull}},
+{{6322252646226113560ull, 10421458781256711206ull,
+ 5228729589052947328ull, 5807713756217503183ull}},
+{{17126187844637417758ull, 13026823476570889007ull,
+ 1924225967888796256ull, 7259642195271878979ull}},
+{{16796048787369384293ull, 16283529345713611259ull,
+ 16240340515143159032ull, 9074552744089848723ull}},
+{{8191687482892171231ull, 10177205841071007037ull,
+ 7844369812750780443ull, 5671595465056155452ull}},
+{{14851295372042601943ull, 8109821282911370892ull,
+ 9805462265938475554ull, 7089494331320194315ull}},
+{{117375141343700812ull, 913904566784437808ull, 7645141813995706539ull,
+ 8861867914150242894ull}},
+{{73359463339813008ull, 16712091418736131294ull, 166527615319928682ull,
+ 5538667446343901809ull}},
+{{9315071366029542068ull, 11666742236565388309ull,
+ 4819845537577298757ull, 6923334307929877261ull}},
+{{16255525225964315489ull, 748369740424571674ull,
+ 10636492940399011351ull, 8654167884912346576ull}},
+{{14771389284655085085ull, 7385260115406439152ull,
+ 6647808087749382094ull, 5408854928070216610ull}},
+{{17492532109304740ull, 8203107403273133ull, 17533132146541503426ull,
+ 6761068660087770762ull}},
+{{4633551683564018828ull, 9233625921108867224ull,
+ 12693043146322103474ull, 8451335825109713453ull}},
+{{2895969802227511768ull, 10382702219120429919ull,
+ 10238994975665008623ull, 5282084890693570908ull}},
+{{17455020308066553422ull, 8366691755473149494ull,
+ 12798743719581260779ull, 6602606113366963635ull}},
+{{12595403348228415969ull, 5846678675914048964ull,
+ 11386743631049188070ull, 8253257641708704544ull}},
+{{17095499129497535789ull, 17489232227728444314ull,
+ 7116714769405742543ull, 5158286026067940340ull}},
+{{12146001875017143928ull, 17249854266233167489ull,
+ 8895893461757178179ull, 6447857532584925425ull}},
+{{1347444288489266198ull, 16950631814364071458ull,
+ 15731552845623860628ull, 8059821915731156781ull}},
+{{5453838698733179278ull, 1370772847122768853ull,
+ 12138063537728606845ull, 5037388697331972988ull}},
+{{11428984391843862001ull, 6325152077330848970ull,
+ 15172579422160758556ull, 6296735871664966235ull}},
+{{5062858452950051693ull, 7906440096663561213ull,
+ 14354038259273560291ull, 7870919839581207794ull}},
+{{5470129542307476261ull, 2635682051201031806ull,
+ 13582959930473363086ull, 4919324899738254871ull}},
+{{16061033964739121134ull, 12517974600856065565ull,
+ 12367013894664315953ull, 6149156124672818589ull}},
+{{6241234400641737705ull, 1812410195787918245ull,
+ 1623709313048231230ull, 7686445155841023237ull}},
+{{6206614509614780018ull, 14967814427649612615ull,
+ 3320661329868838470ull, 4804028222400639523ull}},
+{{3146582118591087118ull, 9486395997707239961ull,
+ 17985884717618211800ull, 6005035278000799403ull}},
+{{8544913666666246801ull, 11857994997134049951ull,
+ 17870669878595376846ull, 7506294097500999254ull}},
+{{12258100069307486107ull, 2799560854781393315ull,
+ 6557482655694722625ull, 4691433810938124534ull}},
+{{10710939068206969730ull, 8111137086904129548ull,
+ 17420225356473179089ull, 5864292263672655667ull}},
+{{13388673835258712162ull, 14750607377057549839ull,
+ 17163595677164085957ull, 7330365329590819584ull}},
+{{12124156275646002298ull, 4603201166039773587ull,
+ 3007750522745555831ull, 9162956661988524481ull}},
+{{5271754663065057485ull, 9794529756415940348ull,
+ 13409059122784442154ull, 5726847913742827800ull}},
+{{6589693328831321856ull, 3019790158665149627ull,
+ 16761323903480552693ull, 7158559892178534750ull}},
+{{3625430642611764415ull, 8386423716758824938ull,
+ 11728282842495915058ull, 8948199865223168438ull}},
+{{6877580170059740664ull, 9853200841401653490ull,
+ 2718490758132559007ull, 5592624915764480274ull}},
+{{17820347249429451638ull, 7704815033324678958ull,
+ 12621485484520474567ull, 6990781144705600342ull}},
+{{13052062024932038739ull, 5019332773228460794ull,
+ 6553484818795817401ull, 8738476430882000428ull}},
+{{12769224784009912116ull, 14666298029336257756ull,
+ 13319300048602161683ull, 5461547769301250267ull}},
+{{15961530980012390145ull, 13721186518242934291ull,
+ 12037439042325314200ull, 6826934711626562834ull}},
+{{15340227706588099777ull, 17151483147803667864ull,
+ 5823426766051866942ull, 8533668389533203543ull}},
+{{9587642316617562361ull, 6107990948949904511ull,
+ 10557170756423498695ull, 5333542743458252214ull}},
+{{7372866877344565047ull, 3023302667759992735ull,
+ 3973091408674597561ull, 6666928429322815268ull}},
+{{4604397578253318405ull, 8390814353127378823ull,
+ 4966364260843246951ull, 8333660536653519085ull}},
+{{9795277514049405859ull, 12161787998345693620ull,
+ 5409820672240723296ull, 5208537835408449428ull}},
+{{12244096892561757324ull, 15202234997932117025ull,
+ 6762275840300904120ull, 6510672294260561785ull}},
+{{1470063060420032942ull, 556049673705594666ull,
+ 13064530818803518055ull, 8138340367825702231ull}},
+{{5530475431189908493ull, 7265060073707078522ull,
+ 15082860789393280640ull, 5086462729891063894ull}},
+{{16136466325842161424ull, 9081325092133848152ull,
+ 9630203949886824992ull, 6358078412363829868ull}},
+{{1723838833593150164ull, 11351656365167310191ull,
+ 12037754937358531240ull, 7947598015454787335ull}},
+{{7994928298636800709ull, 7094785228229568869ull,
+ 14441125863490163881ull, 4967248759659242084ull}},
+{{14605346391723388790ull, 13480167553714348990ull,
+ 18051407329362704851ull, 6209060949574052605ull}},
+{{9033310952799460179ull, 12238523423715548334ull,
+ 8729201106421217352ull, 7761326186967565757ull}},
+{{1034133327072274708ull, 7649077139822217709ull,
+ 7761593700726954797ull, 4850828866854728598ull}},
+{{5904352677267731289ull, 14173032443205160040ull,
+ 478620089053917688ull, 6063536083568410748ull}},
+{{7380440846584664111ull, 17716290554006450050ull,
+ 598275111317397110ull, 7579420104460513435ull}},
+{{9224461547542802974ull, 6460995577826643377ull,
+ 16514823009069230858ull, 4737137565287820896ull}},
+{{16142262952855891621ull, 17299616509138080029ull,
+ 2196784687626986956ull, 5921421956609776121ull}},
+{{6342770635787700814ull, 3177776562713048421ull,
+ 7357666877961121600ull, 7401777445762220151ull}},
+{{6270074656581006961ull, 1986110351695655263ull,
+ 11516070826366782856ull, 4626110903601387594ull}},
+{{3225907302298870797ull, 2482637939619569079ull,
+ 5171716496103702762ull, 5782638629501734493ull}},
+{{17867442183155752209ull, 12326669461379237156ull,
+ 11076331638557016356ull, 7228298286877168116ull}},
+{{3887558655235138645ull, 15408336826724046446ull,
+ 13845414548196270445ull, 9035372858596460145ull}},
+{{16264782214804125365ull, 11936053525916222980ull,
+ 1735855064981587172ull, 5647108036622787591ull}},
+{{1884233694795605090ull, 14920066907395278726ull,
+ 16004876886509147677ull, 7058885045778484488ull}},
+{{11578664155349282171ull, 4815025578961934695ull,
+ 1559352034426882981ull, 8823606307223105611ull}},
+{{14154194124734383213ull, 5315233996064903136ull,
+ 17115496086012659527ull, 5514753942014441006ull}},
+{{17692742655917979016ull, 2032356476653741016ull,
+ 12170998070661048601ull, 6893442427518051258ull}},
+{{3669184246187922154ull, 7152131614244564175ull,
+ 5990375551471534943ull, 8616803034397564073ull}},
+{{9210769181508533202ull, 11387611286543934465ull,
+ 15273199765738179099ull, 5385501896498477545ull}},
+{{16125147495313054407ull, 9622828089752530177ull,
+ 5256441651890560162ull, 6731877370623096932ull}},
+{{6321376313859154296ull, 2805163075335886914ull,
+ 6570552064863200203ull, 8414846713278871165ull}},
+{{8562546214589359339ull, 17894127986580786985ull,
+ 6412438049753194078ull, 5259279195799294478ull}},
+{{15314868786664087078ull, 13144287946371207923ull,
+ 17238919599046268406ull, 6574098994749118097ull}},
+{{14531899964902720943ull, 7206987896109234096ull,
+ 7713591443525671796ull, 8217623743436397622ull}},
+{{9082437478064200590ull, 13727739471923047118ull,
+ 209308633776156968ull, 5136014839647748514ull}},
+{{2129674810725474929ull, 17159674339903808898ull,
+ 9485007829074972018ull, 6420018549559685642ull}},
+{{11885465550261619469ull, 12226220888024985314ull,
+ 2632887749488939215ull, 8025023186949607053ull}},
+{{12040101987340900073ull, 14558917082656697677ull,
+ 3951397852644280961ull, 5015639491843504408ull}},
+{{1215069428893961379ull, 4363588298038708385ull,
+ 4939247315805351202ull, 6269549364804380510ull}},
+{{6130522804544839627ull, 14677857409403161289ull,
+ 15397431181611464810ull, 7836936706005475637ull}},
+{{15360791798908994527ull, 13785346899304363709ull,
+ 11929237497720859458ull, 4898085441253422273ull}},
+{{5365931693354079447ull, 8008311587275678829ull,
+ 1076488816868910611ull, 6122606801566777842ull}},
+{{11319100635119987212ull, 5398703465667210632ull,
+ 10568983057940914072ull, 7653258501958472302ull}},
+{{7074437896949992008ull, 3374189666042006645ull,
+ 1993928392785683391ull, 4783286563724045189ull}},
+{{13454733389614877914ull, 18052795137834672018ull,
+ 7104096509409492142ull, 5979108204655056486ull}},
+{{7595044700163821584ull, 13342621885438564215ull,
+ 18103492673616640986ull, 7473885255818820607ull}},
+{{11664431965243470346ull, 12950824696826490538ull,
+ 18232211948651482472ull, 4671178284886762879ull}},
+{{5357167919699562125ull, 16188530871033113173ull,
+ 18178578917386965186ull, 5838972856108453599ull}},
+{{11308145918051840560ull, 11012291551936615658ull,
+ 18111537628306318579ull, 7298716070135566999ull}},
+{{4911810360710024891ull, 9153678421493381669ull,
+ 18027736016955510320ull, 9123395087669458749ull}},
+{{5375724484657459509ull, 5721049013433363543ull,
+ 13573178019810887902ull, 5702121929793411718ull}},
+{{2107969587394436483ull, 16374683303646480237ull,
+ 7743100487908834069ull, 7127652412241764648ull}},
+{{7246648002670433507ull, 6633296074275936584ull,
+ 9678875609886042587ull, 8909565515302205810ull}},
+{{4529155001669020942ull, 1839967037208766413ull,
+ 10660983274606164521ull, 5568478447063878631ull}},
+{{10273129770513664082ull, 6911644814938345920ull,
+ 8714543074830317747ull, 6960598058829848289ull}},
+{{12841412213142080102ull, 4027870000245544496ull,
+ 15504864861965285088ull, 8700747573537310361ull}},
+{{8025882633213800064ull, 2517418750153465310ull,
+ 2773011511087221324ull, 5437967233460818976ull}},
+{{808981254662474272ull, 3146773437691831638ull, 3466264388859026655ull,
+ 6797459041826023720ull}},
+{{10234598605182868647ull, 17768524852396953259ull,
+ 4332830486073783318ull, 8496823802282529650ull}},
+{{4090781119025598953ull, 6493642014320707883ull,
+ 7319705072223502478ull, 5310514876426581031ull}},
+{{501790380354610787ull, 17340424554755660662ull,
+ 4537945321851990193ull, 6638143595533226289ull}},
+{{9850610012298039291ull, 7840472638162412115ull,
+ 10284117670742375646ull, 8297679494416532861ull}},
+{{3850788248472580605ull, 288609380424119668ull, 8733416553427678731ull,
+ 5186049684010333038ull}},
+{{4813485310590725757ull, 14195819780812313297ull,
+ 1693398654929822605ull, 6482562105012916298ull}},
+{{10628542656665795100ull, 3909716670733227909ull,
+ 11340120355517054065ull, 8103202631266145372ull}},
+{{8948682169629815889ull, 13972787965276737203ull,
+ 16310947259052934598ull, 5064501644541340857ull}},
+{{6574166693609881958ull, 8242612919741145696ull,
+ 6553626018534004536ull, 6330627055676676072ull}},
+{{8217708367012352447ull, 10303266149676432120ull,
+ 8192032523167505670ull, 7913283819595845090ull}},
+{{5136067729382720280ull, 1827855325120382171ull,
+ 9731706345407078948ull, 4945802387247403181ull}},
+{{1808398643301012445ull, 2284819156400477714ull,
+ 16776318950186236589ull, 6182252984059253976ull}},
+{{11483870340981041365ull, 7467709963927985046ull,
+ 2523654614023244120ull, 7727816230074067471ull}},
+{{2565732944685762949ull, 4667318727454990654ull,
+ 8494813161405609431ull, 4829885143796292169ull}},
+{{12430538217711979494ull, 1222462390891350413ull,
+ 15230202470184399693ull, 6037356429745365211ull}},
+{{1703114716857810656ull, 6139764007041575921ull,
+ 14426067069303111712ull, 7546695537181706514ull}},
+{{12593661744104601420ull, 3837352504400984950ull,
+ 13627977936741832724ull, 4716684710738566571ull}},
+{{6518705143275975967ull, 4796690630501231188ull,
+ 12423286402499903001ull, 5895855888423208214ull}},
+{{8148381429094969958ull, 10607549306553926889ull,
+ 6305735966270102943ull, 7369819860529010268ull}},
+{{14797162804796100352ull, 8647750614765020707ull,
+ 7882169957837628679ull, 9212274825661262835ull}},
+{{6942383743783868768ull, 12322373161869219798ull,
+ 2620513214434823972ull, 5757671766038289272ull}},
+{{17901351716584611768ull, 15402966452336524747ull,
+ 3275641518043529965ull, 7197089707547861590ull}},
+{{17765003627303376806ull, 5418650010138492222ull,
+ 13317923934409188265ull, 8996362134434826987ull}},
+{{6491441248637222600ull, 14915871302405027399ull,
+ 6017859449792048713ull, 5622726334021766867ull}},
+{{3502615542369140346ull, 4809781072724120537ull,
+ 2910638293812672988ull, 7028407917527208584ull}},
+{{8989955446388813336ull, 6012226340905150671ull,
+ 3638297867265841235ull, 8785509896909010730ull}},
+{{12536251181634090191ull, 1451798453852025217ull,
+ 6885622185468538676ull, 5490943685568131706ull}},
+{{1835255921760449027ull, 1814748067315031522ull,
+ 17830399768690449153ull, 6863679606960164632ull}},
+{{11517441939055337091ull, 6880121102571177306ull,
+ 3841255637153509825ull, 8579599508700205791ull}},
+{{11810087230336973586ull, 15829290735175455576ull,
+ 9318313800862025496ull, 5362249692937628619ull}},
+{{14762609037921216983ull, 1339869345259767854ull,
+ 7036206232650143967ull, 6702812116172035774ull}},
+{{9229889260546745420ull, 15509894736856873530ull,
+ 18018629827667455766ull, 8378515145215044717ull}},
+{{10380366806269103792ull, 5081998192108158052ull,
+ 13567486651505853806ull, 5236571965759402948ull}},
+{{12975458507836379740ull, 15575869776989973373ull,
+ 16959358314382317257ull, 6545714957199253685ull}},
+{{2384265079513310963ull, 5634779165955303005ull,
+ 7364139837695732860ull, 8182143696499067107ull}},
+{{3796008683909513304ull, 12745109015576840186ull,
+ 2296744389346139085ull, 5113839810311916942ull}},
+{{13968382891741667438ull, 2096328214188886520ull,
+ 12094302523537449665ull, 6392299762889896177ull}},
+{{17460478614677084297ull, 7232096286163496054ull,
+ 1282820099139648369ull, 7990374703612370222ull}},
+{{6301113115745789782ull, 16049275224920654794ull,
+ 14636820617244443942ull, 4993984189757731388ull}},
+{{17099763431537013035ull, 10838221994296042684ull,
+ 18296025771555554928ull, 6242480237197164235ull}},
+{{2927960215711714678ull, 13547777492870053356ull,
+ 18258346196017055756ull, 7803100296496455294ull}},
+{{11053347171674597482ull, 17690732969898559155ull,
+ 6799780354083271943ull, 4876937685310284559ull}},
+{{9204997946165858948ull, 17501730193945811040ull,
+ 3888039424176702025ull, 6096172106637855699ull}},
+{{11506247432707323685ull, 8042104687150100088ull,
+ 248363261793489628ull, 7620215133297319624ull}},
+{{7191404645442077303ull, 14249687466323588363ull,
+ 155227038620931017ull, 4762634458310824765ull}},
+{{4377569788375208725ull, 3977051277622321742ull,
+ 4805719816703551676ull, 5953293072888530956ull}},
+{{14695334272323786714ull, 4971314097027902177ull,
+ 6007149770879439595ull, 7441616341110663695ull}},
+{{2267054892561284840ull, 801228301428744909ull,
+ 10671997634440731603ull, 4651010213194164809ull}},
+{{7445504634128993954ull, 14836593432068094848ull,
+ 17951683061478302407ull, 5813762766492706011ull}},
+{{9306880792661242443ull, 13934055771657730656ull,
+ 17827917808420490105ull, 7267203458115882514ull}},
+{{11633600990826553054ull, 3582511659289999608ull,
+ 13061525223670836824ull, 9084004322644853143ull}},
+{{7271000619266595659ull, 2239069787056249755ull,
+ 15080982292435354871ull, 5677502701653033214ull}},
+{{4477064755655856669ull, 16633895289102475906ull,
+ 9627855828689417780ull, 7096878377066291518ull}},
+{{14819702981424596644ull, 2345625037668543266ull,
+ 2811447749006996418ull, 8871097971332864398ull}},
+{{13874000381817760807ull, 6077701666970227445ull,
+ 15592212898411536473ull, 5544436232083040248ull}},
+{{3507442421990037297ull, 12208813102140172211ull,
+ 1043522049304868975ull, 6930545290103800311ull}},
+{{18219361082769710333ull, 10649330359247827359ull,
+ 15139460616913249931ull, 8663181612629750388ull}},
+{{18304629704372150814ull, 4349988465316198147ull,
+ 238790848716005399ull, 5414488507893593993ull}},
+{{18269101112037800613ull, 825799563217859780ull,
+ 4910174579322394653ull, 6768110634866992491ull}},
+{{4389632316337699151ull, 5643935472449712630ull,
+ 1526032205725605412ull, 8460138293583740614ull}},
+{{16578578252993225681ull, 12750831707135846201ull,
+ 14788828183860667094ull, 5287586433489837883ull}},
+{{6888164760959368390ull, 6715167597065031944ull,
+ 13874349211398445964ull, 6609483041862297354ull}},
+{{8610205951199210487ull, 8393959496331289930ull,
+ 8119564477393281647ull, 8261853802327871693ull}},
+{{9993064737926894458ull, 12163753712848138062ull,
+ 7380570807584494981ull, 5163658626454919808ull}},
+{{3267958885553842265ull, 1369634085778008866ull,
+ 9225713509480618727ull, 6454573283068649760ull}},
+{{13308320643797078639ull, 15547100662504674794ull,
+ 11532141886850773408ull, 8068216603835812200ull}},
+{{12929386420800562054ull, 9716937914065421746ull,
+ 7207588679281733380ull, 5042635377397382625ull}},
+{{6938360989145926759ull, 12146172392581777183ull,
+ 13621171867529554629ull, 6303294221746728281ull}},
+{{4061265218005020544ull, 1347657435445057767ull,
+ 3191406779129779575ull, 7879117777183410352ull}},
+{{9455819788894219696ull, 7759814924794242960ull,
+ 1994629236956112234ull, 4924448610739631470ull}},
+{{11819774736117774620ull, 476396619138027892ull,
+ 11716658583049916101ull, 6155560763424539337ull}},
+{{14774718420147218275ull, 5207181792349922769ull,
+ 810765173530231414ull, 7694450954280674172ull}},
+{{2316669984950929566ull, 17089546675500865443ull,
+ 9730100270311170441ull, 4809031846425421357ull}},
+{{16730895536470825670ull, 7526875289093918091ull,
+ 16774311356316350956ull, 6011289808031776696ull}},
+{{16301933402161144183ull, 9408594111367397614ull,
+ 2521145121685887079ull, 7514112260039720871ull}},
+{{5577022357923327211ull, 12797900347245705365ull,
+ 8493244728694761280ull, 4696320162524825544ull}},
+{{11582963965831546917ull, 15997375434057131706ull,
+ 10616555910868451600ull, 5870400203156031930ull}},
+{{5255332920434657838ull, 1549975218861863017ull,
+ 4047322851730788693ull, 7338000253945039913ull}},
+{{11180852168970710202ull, 6549155042004716675ull,
+ 9670839583090873770ull, 9172500317431299891ull}},
+{{4682189596392999924ull, 8704907919680335826ull,
+ 3738431730218102154ull, 5732812698394562432ull}},
+{{15076109032346025713ull, 1657762862745643974ull,
+ 4673039662772627693ull, 7166015872993203040ull}},
+{{9621764253577756333ull, 6683889596859442872ull,
+ 5841299578465784616ull, 8957519841241503800ull}},
+{{6013602658486097709ull, 4177430998037151795ull,
+ 3650812236541115385ull, 5598449900775939875ull}},
+{{2905317304680234232ull, 9833474765973827648ull,
+ 18398573350958557943ull, 6998062375969924843ull}},
+{{3631646630850292789ull, 7680157439039896656ull,
+ 18386530670270809525ull, 8747577969962406054ull}},
+{{2269779144281432994ull, 7105941408613629362ull,
+ 6879895650491868049ull, 5467236231226503784ull}},
+{{12060595967206567050ull, 13494112779194424606ull,
+ 8599869563114835061ull, 6834045289033129730ull}},
+{{5852372922153433004ull, 3032582918710867046ull,
+ 1526464917038768019ull, 8542556611291412163ull}},
+{{17492791131628059340ull, 18036265388690149567ull,
+ 17094941637645087675ull, 5339097882057132601ull}},
+{{17254302896107686271ull, 17933645717435299055ull,
+ 7533618991774195882ull, 6673872352571415752ull}},
+{{16956192601707219934ull, 13193685109939348011ull,
+ 9417023739717744853ull, 8342340440714269690ull}},
+{{8291777366853318507ull, 10551896202925786459ull,
+ 10497325855750978437ull, 5213962775446418556ull}},
+{{5753035690139260230ull, 17801556272084620978ull,
+ 13121657319688723046ull, 6517453469308023195ull}},
+{{16414666649528851095ull, 13028573303251000414ull,
+ 11790385631183515904ull, 8146816836635028994ull}},
+{{5647480637528144031ull, 8142858314531875259ull,
+ 11980677037917085344ull, 5091760522896893121ull}},
+{{2447664778482792134ull, 10178572893164844074ull,
+ 1140788242114192968ull, 6364700653621116402ull}},
+{{12282953009958265975ull, 12723216116456055092ull,
+ 10649357339497517018ull, 7955875817026395502ull}},
+{{16900217668078692043ull, 12563696091212422336ull,
+ 2044162318758560232ull, 4972422385641497189ull}},
+{{2678528011388813437ull, 15704620114015527921ull,
+ 7166888916875588194ull, 6215527982051871486ull}},
+{{7959846032663404701ull, 10407403105664634093ull,
+ 18181983182949261051ull, 7769409977564839357ull}},
+{{7280746779628321890ull, 4198783931826702356ull,
+ 13669582498556982109ull, 4855881235978024598ull}},
+{{9100933474535402362ull, 9860165933210765849ull,
+ 7863606086341451828ull, 6069851544972530748ull}},
+{{15987852861596640857ull, 12325207416513457311ull,
+ 9829507607926814785ull, 7587314431215663435ull}},
+{{16909937066138982392ull, 785725607679828963ull,
+ 3837599245740565289ull, 4742071519509789647ull}},
+{{16525735314246340086ull, 5593843028027174108ull,
+ 185313038748318707ull, 5927589399387237059ull}},
+{{2210425069098373491ull, 2380617766606579732ull,
+ 14066699353717562096ull, 7409486749234046323ull}},
+{{10604887705041259240ull, 1487886104129112332ull,
+ 6485844086859782358ull, 4630929218271278952ull}},
+{{13256109631301574050ull, 11083229667016166223ull,
+ 8107305108574727947ull, 5788661522839098690ull}},
+{{11958451020699579658ull, 9242351065342819875ull,
+ 910759348863634126ull, 7235826903548873363ull}},
+{{10336377757447086669ull, 2329566794823749036ull,
+ 14973507241361706370ull, 9044783629436091703ull}},
+{{15683608135259204976ull, 6067665265192231051ull,
+ 16275971053492148337ull, 5652989768397557314ull}},
+{{14992824150646618316ull, 12196267599917676718ull,
+ 11121591780010409613ull, 7066237210496946643ull}},
+{{9517658151453497087ull, 1410276444614932186ull,
+ 9290303706585624113ull, 8832796513121183304ull}},
+{{10560222363085823583ull, 12410637823952802376ull,
+ 5806439816616015070ull, 5520497820700739565ull}},
+{{13200277953857279479ull, 6289925243086227162ull,
+ 11869735789197406742ull, 6900622275875924456ull}},
+{{7276975405466823541ull, 17085778590712559761ull,
+ 14837169736496758427ull, 8625777844844905570ull}},
+{{16077324674485234473ull, 8372768609981655898ull,
+ 13884917103737861921ull, 5391111153028065981ull}},
+{{10873283806251767283ull, 15077646780904457777ull,
+ 3521088324390163689ull, 6738888941285082477ull}},
+{{18203290776242097008ull, 5012000420848408509ull,
+ 9013046423915092516ull, 8423611176606353096ull}},
+{{13682899744365004582ull, 12355872299885031126ull,
+ 5633154014946932822ull, 5264756985378970685ull}},
+{{7880252643601479920ull, 6221468338001513100ull,
+ 11653128537111053932ull, 6580946231723713356ull}},
+{{9850315804501849900ull, 7776835422501891375ull,
+ 14566410671388817415ull, 8226182789654641695ull}},
+{{13073976405454738043ull, 11778051166704763965ull,
+ 16021535697259092740ull, 5141364243534151059ull}},
+{{2507412451536258842ull, 14722563958380954957ull,
+ 15415233603146478021ull, 6426705304417688824ull}},
+{{7745951582847711457ull, 4568146892694029984ull, 822297930223545911ull,
+ 8033381630522111031ull}},
+{{4841219739279819661ull, 9772620835574850596ull,
+ 7431465234030798050ull, 5020863519076319394ull}},
+{{6051524674099774576ull, 2992404007613787437ull, 65959505683721755ull,
+ 6276079398845399243ull}},
+{{12176091861052106123ull, 17575563064799398008ull,
+ 13917507437386815905ull, 7845099248556749053ull}},
+{{7610057413157566327ull, 4067197887858541899ull,
+ 11004285157580453893ull, 4903187030347968158ull}},
+{{4900885748019570005ull, 9695683378250565278ull,
+ 4531984410120791558ull, 6128983787934960198ull}},
+{{15349479221879238314ull, 2896232185958430789ull,
+ 14888352549505765256ull, 7661229734918700247ull}},
+{{11899267522888217898ull, 1810145116224019243ull,
+ 16222749371082185141ull, 4788268584324187654ull}},
+{{10262398385182884469ull, 6874367413707411958ull,
+ 11055064676997955618ull, 5985335730405234568ull}},
+{{3604625944623829778ull, 17816331303989040756ull,
+ 13818830846247444522ull, 7481669663006543210ull}},
+{{11476263252244669419ull, 15746893083420538376ull,
+ 13248455297332040730ull, 4676043539379089506ull}},
+{{14345329065305836774ull, 10460244317420897162ull,
+ 7337197084810275105ull, 5845054424223861883ull}},
+{{8708289294777520160ull, 17686991415203509357ull,
+ 4559810337585455977ull, 7306318030279827354ull}},
+{{15497047636899288103ull, 8273681213722222984ull,
+ 14923134958836595780ull, 9132897537849784192ull}},
+{{9685654773062055065ull, 14394422795431165173ull,
+ 9326959349272872362ull, 5708060961156115120ull}},
+{{16718754484754956735ull, 8769656457434180658ull,
+ 11658699186591090453ull, 7135076201445143900ull}},
+{{11675071069088920111ull, 15573756590220113727ull,
+ 14573373983238863066ull, 8918845251806429875ull}},
+{{14214448445821656925ull, 14345283887314958983ull,
+ 6802515730310595464ull, 5574278282379018672ull}},
+{{13156374538849683252ull, 17931604859143698729ull,
+ 8503144662888244330ull, 6967847852973773340ull}},
+{{2610410118279940353ull, 13191134037074847604ull,
+ 10628930828610305413ull, 8709809816217216675ull}},
+{{10854878360779738529ull, 10550301782385473704ull,
+ 4337238758667746931ull, 5443631135135760422ull}},
+{{13568597950974673161ull, 8576191209554454226ull,
+ 14644920485189459472ull, 6804538918919700527ull}},
+{{7737375401863565643ull, 10720239011943067783ull,
+ 13694464588059436436ull, 8505673648649625659ull}},
+{{11753388653805810383ull, 15923521419319193172ull,
+ 6253197358323453820ull, 5316046030406016037ull}},
+{{14691735817257262979ull, 1457657700439439849ull,
+ 12428182716331705180ull, 6645057538007520046ull}},
+{{4529611716289415012ull, 1822072125549299812ull,
+ 6311856358559855667ull, 8306321922509400058ull}},
+{{12054379359535660190ull, 17279696142964170046ull,
+ 8556596242527297695ull, 5191451201568375036ull}},
+{{5844602162564799430ull, 16987934160277824654ull,
+ 10695745303159122119ull, 6489314001960468795ull}},
+{{16529124740060775095ull, 16623231681919892913ull,
+ 8757995610521514745ull, 8111642502450585994ull}},
+{{3413173934896902579ull, 3471990773558851215ull,
+ 10085433275003334620ull, 5069776564031616246ull}},
+{{18101525473903291935ull, 4339988466948564018ull,
+ 3383419556899392467ull, 6337220705039520308ull}},
+{{13403534805524339111ull, 813299565258317119ull,
+ 4229274446124240584ull, 7921525881299400385ull}},
+{{15294738281093793801ull, 508312228286448199ull,
+ 14172511574896120125ull, 4950953675812125240ull}},
+{{14506736832939854347ull, 5247076303785448153ull,
+ 17715639468620150156ull, 6188692094765156550ull}},
+{{4298362985892654221ull, 6558845379731810192ull,
+ 12921177298920411887ull, 7735865118456445688ull}},
+{{2686476866182908888ull, 11016807389973463226ull,
+ 8075735811825257429ull, 4834915699035278555ull}},
+{{12581468119583411918ull, 18382695255894216936ull,
+ 5482983746354183882ull, 6043644623794098194ull}},
+{{15726835149479264898ull, 13754997033012995362ull,
+ 16077101719797505661ull, 7554555779742622742ull}},
+{{14440957986851928465ull, 10902716154846816053ull,
+ 5436502556446053134ull, 4721597362339139214ull}},
+{{4216139428282746870ull, 4405023156703744259ull,
+ 16019000232412342226ull, 5901996702923924017ull}},
+{{658488266926045683ull, 14729650982734456132ull,
+ 6188692235233264070ull, 7377495878654905022ull}},
+{{823110333657557103ull, 9188691691563294357ull,
+ 16959237330896355896ull, 9221869848318631277ull}},
+{{2820286967749667142ull, 5742932307227058973ull,
+ 12905366341023916387ull, 5763668655199144548ull}},
+{{8137044728114471831ull, 2566979365606435812ull,
+ 16131707926279895484ull, 7204585818998930685ull}},
+{{10171305910143089789ull, 3208724207008044765ull,
+ 6329576852567705643ull, 9005732273748663357ull}},
+{{8662909203053125070ull, 18146353693875885642ull,
+ 6261828542068509978ull, 5628582671092914598ull}},
+{{1605264466961630530ull, 13459570080490081245ull,
+ 17050657714440413281ull, 7035728338866143247ull}},
+{{6618266602129426066ull, 2989404545330437844ull,
+ 16701636124623128698ull, 8794660423582679059ull}},
+{{13359788663185667099ull, 6480063859258911556ull,
+ 8132679568675761484ull, 5496662764739174412ull}},
+{{16699735828982083874ull, 8100079824073639445ull,
+ 10165849460844701855ull, 6870828455923968015ull}},
+{{7039611730945441131ull, 5513413761664661403ull,
+ 8095625807628489415ull, 8588535569904960019ull}},
+{{2093914322627206755ull, 10363412628681495233ull,
+ 2753923120554111932ull, 5367834731190600012ull}},
+{{7229078921711396347ull, 12954265785851869041ull,
+ 3442403900692639915ull, 6709793413988250015ull}},
+{{13648034670566633338ull, 11581146213887448397ull,
+ 18138062931147963606ull, 8387241767485312518ull}},
+{{10835864678317839788ull, 2626530365252267344ull,
+ 6724603313540089350ull, 5242026104678320324ull}},
+{{13544830847897299735ull, 12506534993420109988ull,
+ 8405754141925111687ull, 6552532630847900405ull}},
+{{16931038559871624669ull, 11021482723347749581ull,
+ 15118878695833777513ull, 8190665788559875506ull}},
+{{12887742109133459370ull, 18417641748160813248ull,
+ 14060985203323498849ull, 5119166117849922191ull}},
+{{16109677636416824213ull, 9186994129918852848ull,
+ 12964545485726985658ull, 6398957647312402739ull}},
+{{1690352971811478650ull, 2260370625543790253ull,
+ 11593995838731344169ull, 7998697059140503424ull}},
+{{3362313616595868108ull, 12941946687033338668ull,
+ 7246247399207090105ull, 4999185661962814640ull}},
+{{4202892020744835135ull, 2342375303509509623ull,
+ 9057809249008862632ull, 6248982077453518300ull}},
+{{641929007503656015ull, 2927969129386887029ull,
+ 11322261561261078290ull, 7811227596816897875ull}},
+{{2707048638903478962ull, 6441666724294192297ull,
+ 4770570466574479979ull, 4882017248010561172ull}},
+{{7995496817056736606ull, 3440397386940352467ull,
+ 5963213083218099974ull, 6102521560013201465ull}},
+{{5382685002893532853ull, 13523868770530216392ull,
+ 12065702372450012871ull, 7628151950016501831ull}},
+{{3364178126808458034ull, 15369947009222467101ull,
+ 14458593010422339900ull, 4767594968760313644ull}},
+{{8816908676937960446ull, 765689687818532260ull,
+ 18073241263027924876ull, 5959493710950392055ull}},
+{{11021135846172450557ull, 957112109773165325ull,
+ 17979865560357518191ull, 7449367138687990069ull}},
+{{9194052913071475550ull, 7515724096249310184ull,
+ 13543258984437142821ull, 4655854461679993793ull}},
+{{11492566141339344438ull, 14006341138739025634ull,
+ 3094015675264264814ull, 5819818077099992242ull}},
+{{5142335639819404739ull, 8284554386569006235ull,
+ 13090891630935106826ull, 7274772596374990302ull}},
+{{1816233531346868020ull, 1132320946356481986ull,
+ 7140242501814107725ull, 9093465745468737878ull}},
+{{5746831975519180417ull, 3013543600686495193ull,
+ 18297709618915981040ull, 5683416090917961173ull}},
+{{11795225987826363425ull, 3766929500858118991ull,
+ 9037078968362812588ull, 7104270113647451467ull}},
+{{10132346466355566377ull, 4708661876072648739ull,
+ 6684662692026127831ull, 8880337642059314334ull}},
+{{4026873532258535034ull, 9860442700186487318ull,
+ 18012972237798493606ull, 5550211026287071458ull}},
+{{14256963952177944600ull, 3102181338378333339ull,
+ 13292843260393341200ull, 6937763782858839323ull}},
+{{13209518921795042846ull, 3877726672972916674ull,
+ 12004368057064288596ull, 8672204728573549154ull}},
+{{12867635344549289683ull, 11646951207462848729ull,
+ 12114416054092568276ull, 5420127955358468221ull}},
+{{2249486125404448391ull, 14558689009328560912ull,
+ 1307962012333546633ull, 6775159944198085277ull}},
+{{2811857656755560489ull, 4363303206378537428ull,
+ 6246638533844321196ull, 8468949930247606596ull}},
+{{10980783072327001114ull, 11950436540841361700ull,
+ 13127521120507476555ull, 5293093706404754122ull}},
+{{13725978840408751392ull, 10326359657624314221ull,
+ 7186029363779569886ull, 6616367133005942653ull}},
+{{3322415495228775528ull, 3684577535175616969ull,
+ 13594222723151850262ull, 8270458916257428316ull}},
+{{13605724730586454465ull, 16137919014766924317ull,
+ 17719761238824682221ull, 5169036822660892697ull}},
+{{3172097857950904369ull, 6337340713176491685ull,
+ 8314643493248689065ull, 6461296028326115872ull}},
+{{8576808340866018366ull, 12533361909898002510ull,
+ 10393304366560861331ull, 8076620035407644840ull}},
+{{748819194613873575ull, 5527508184472557617ull, 6495815229100538332ull,
+ 5047887522129778025ull}},
+{{5547710011694729872ull, 6909385230590697021ull,
+ 12731455054803060819ull, 6309859402662222531ull}},
+{{11546323533045800244ull, 4025045519810983372ull,
+ 11302632800076438120ull, 7887324253327778164ull}},
+{{16439824245008400961ull, 2515653449881864607ull,
+ 16287517536902549633ull, 4929577658329861352ull}},
+{{15938094287833113297ull, 7756252830779718663ull,
+ 1912652847418635425ull, 6161972072912326691ull}},
+{{15310931841364003717ull, 14307002056902036233ull,
+ 16225874114555457993ull, 7702465091140408363ull}},
+{{2651803373211420467ull, 2024347257922690790ull,
+ 7835328312383467294ull, 4814040681962755227ull}},
+{{12538126253369051392ull, 11753806109258139295ull,
+ 5182474372051946213ull, 6017550852453444034ull}},
+{{11060971798283926336ull, 857199581290510407ull,
+ 15701465001919708575ull, 7521938565566805042ull}},
+{{13830636401568535816ull, 7453278765947650860ull,
+ 14425101644627205763ull, 4701211603479253151ull}},
+{{17288295501960669770ull, 4704912439007175671ull,
+ 13419691037356619300ull, 5876514504349066439ull}},
+{{16998683359023449308ull, 5881140548758969589ull,
+ 12162927778268386221ull, 7345643130436333049ull}},
+{{7413296143497147923ull, 11963111704376099891ull,
+ 1368601667553319064ull, 9182053913045416312ull}},
+{{2327467080472023500ull, 7476944815235062432ull, 855376042220824415ull,
+ 5738783695653385195ull}},
+{{2909333850590029375ull, 4734495000616440136ull,
+ 14904278108058194231ull, 7173479619566731493ull}},
+{{3636667313237536719ull, 1306432732343162266ull,
+ 4795289579790579077ull, 8966849524458414367ull}},
+{{6884603089200848354ull, 3122363466928170368ull,
+ 9914585015010193779ull, 5604280952786508979ull}},
+{{8605753861501060442ull, 17738012388942376672ull,
+ 7781545250335354319ull, 7005351190983136224ull}},
+{{10757192326876325552ull, 17560829467750582936ull,
+ 9726931562919192899ull, 8756688988728920280ull}},
+{{6723245204297703470ull, 8669675408130420383ull,
+ 6079332226824495562ull, 5472930617955575175ull}},
+{{3792370486944741434ull, 1613722223308249671ull,
+ 2987479265103231549ull, 6841163272444468969ull}},
+{{128777090253538888ull, 6628838797562699993ull, 8346035099806427340ull,
+ 8551454090555586211ull}},
+{{11609700727476931565ull, 13366396285331463303ull,
+ 2910428928165323135ull, 5344658806597241382ull}},
+{{9900439890918776552ull, 12096309338236941225ull,
+ 12861408197061429727ull, 6680823508246551727ull}},
+{{16987235882075858594ull, 10508700654368788627ull,
+ 11465074227899399255ull, 8351029385308189659ull}},
+{{8311179417083717670ull, 13485466936621574748ull,
+ 4859828383223430582ull, 5219393365817618537ull}},
+{{10388974271354647087ull, 7633461633922192627ull,
+ 10686471497456676132ull, 6524241707272023171ull}},
+{{8374531820765920954ull, 9541827042402740784ull,
+ 8746403353393457261ull, 8155302134090028964ull}},
+{{5234082387978700597ull, 8269484910715406942ull,
+ 14689874132725686596ull, 5097063833806268102ull}},
+{{15765975021828151554ull, 10336856138394258677ull,
+ 9138970629052332437ull, 6371329792257835128ull}},
+{{5872410722003025730ull, 17532756191420211251ull,
+ 11423713286315415546ull, 7964162240322293910ull}},
+{{1364413692038197130ull, 15569658638065019936ull,
+ 2528134785519746812ull, 4977601400201433694ull}},
+{{1705517115047746412ull, 1015329223871723304ull,
+ 12383540518754459324ull, 6222001750251792117ull}},
+{{2131896393809683015ull, 1269161529839654130ull,
+ 1644367593160910443ull, 7777502187814740147ull}},
+{{5944121264558439788ull, 16934127020645641495ull,
+ 17168630810221426690ull, 4860938867384212591ull}},
+{{2818465562270661831ull, 11944286738952276061ull,
+ 16849102494349395459ull, 6076173584230265739ull}},
+{{8134767971265715193ull, 10318672405262957172ull,
+ 16449692099509356420ull, 7595216980287832174ull}},
+{{14307602018895847804ull, 15672542290144124040ull,
+ 5669371543765959858ull, 4747010612679895109ull}},
+{{17884502523619809755ull, 10367305825825379242ull,
+ 11698400448134837727ull, 5933763265849868886ull}},
+{{13132256117669986385ull, 8347446263854336149ull,
+ 5399628523313771351ull, 7417204082312336108ull}},
+{{10513503082757435443ull, 12134682942550041949ull,
+ 12598139863925882902ull, 4635752551445210067ull}},
+{{17753564871874182207ull, 5944981641332776628ull,
+ 11135988811479965724ull, 5794690689306512584ull}},
+{{3745212016133176143ull, 7431227051665970786ull,
+ 13919986014349957155ull, 7243363361633140730ull}},
+{{13904887057021245987ull, 4677347796155075578ull,
+ 8176610481082670636ull, 9054204202041425913ull}},
+{{13302240429065666646ull, 12146714409451698044ull,
+ 16639596596745138907ull, 5658877626275891195ull}},
+{{16627800536332083307ull, 10571706993387234651ull,
+ 16187809727504035730ull, 7073597032844863994ull}},
+{{16173064651987716230ull, 3991261704879267506ull,
+ 11011390122525268855ull, 8841996291056079993ull}},
+{{14719851425919710548ull, 9412067593190624047ull,
+ 18411333872646762794ull, 5526247681910049995ull}},
+{{13788128263972250281ull, 2541712454633504251ull,
+ 18402481322381065589ull, 6907809602387562494ull}},
+{{12623474311537924947ull, 7788826586719268218ull,
+ 13779729616121556178ull, 8634762002984453118ull}},
+{{12501357463138590996ull, 9479702635126930540ull,
+ 4000644991648584707ull, 5396726251865283199ull}},
+{{15626696828923238745ull, 7237942275481275271ull,
+ 389120221133342980ull, 6745907814831603999ull}},
+{{14921685017726660527ull, 9047427844351594089ull,
+ 14321458331698842437ull, 8432384768539504998ull}},
+{{2408524108438080974ull, 7960485411933440258ull,
+ 4339225438884388619ull, 5270240480337190624ull}},
+{{12234027172402377025ull, 5338920746489412418ull,
+ 5424031798605485774ull, 6587800600421488280ull}},
+{{6069161928648195473ull, 15897022969966541331ull,
+ 6780039748256857217ull, 8234750750526860350ull}},
+{{1487383196191428219ull, 3018110328588006476ull,
+ 18072582897942699473ull, 5146719219079287718ull}},
+{{1859228995239285273ull, 8384323929162395999ull,
+ 13367356585573598533ull, 6433399023849109648ull}},
+{{16159094299331270304ull, 15092090929880382902ull,
+ 16709195731966998166ull, 8041748779811387060ull}},
+{{5487747918654656036ull, 4820870812747851410ull,
+ 1219875295624598046ull, 5026092987382116913ull}},
+{{16083056935173095853ull, 15249460552789590070ull,
+ 6136530137958135461ull, 6282616234227646141ull}},
+{{10880449132111594008ull, 5226767635704823876ull,
+ 12282348690875057231ull, 7853270292784557676ull}},
+{{16023652744424522063ull, 10184258799956596778ull,
+ 16899839968651686577ull, 4908293932990348547ull}},
+{{10806193893675876771ull, 17342009518373133877ull,
+ 16513113942387220317ull, 6135367416237935684ull}},
+{{18119428385522233867ull, 7842453842684253634ull,
+ 2194648354274473781ull, 7669209270297419606ull}},
+{{15936328759378784071ull, 7207376660891352473ull,
+ 15206713276703709825ull, 4793255793935887253ull}},
+{{6085352893941316377ull, 13620906844541578496ull,
+ 5173333540597473569ull, 5991569742419859067ull}},
+{{7606691117426645471ull, 3191075500394809408ull,
+ 1854980907319454058ull, 7489462178024823834ull}},
+{{4754181948391653420ull, 6606108206174143784ull,
+ 5771049085502046690ull, 4680913861265514896ull}},
+{{5942727435489566774ull, 17481007294572455538ull,
+ 7213811356877558362ull, 5851142326581893620ull}},
+{{16651781331216734276ull, 12627887081360793614ull,
+ 9017264196096947953ull, 7313927908227367025ull}},
+{{11591354627166142037ull, 1949800796418828306ull,
+ 15883266263548572846ull, 9142409885284208781ull}},
+{{11856282660406226677ull, 15053683553043931403ull,
+ 12232884423931551980ull, 5714006178302630488ull}},
+{{10208667307080395442ull, 370360367595362638ull,
+ 15291105529914439976ull, 7142507722878288110ull}},
+{{3537462096995718495ull, 462950459494203298ull, 9890509875538274162ull,
+ 8928134653597860138ull}},
+{{6822599829049711963ull, 4901030055611264965ull,
+ 10793254690638809255ull, 5580084158498662586ull}},
+{{13139935804739527858ull, 1514601551086693302ull,
+ 4268196326443735761ull, 6975105198123328233ull}},
+{{7201547719069634014ull, 6504937957285754532ull,
+ 9946931426482057605ull, 8718881497654160291ull}},
+{{13724339361273297067ull, 6371429232517290534ull,
+ 3910989132337592051ull, 5449300936033850182ull}},
+{{7932052164736845526ull, 3352600522219225264ull,
+ 14112108452276765872ull, 6811626170042312727ull}},
+{{9915065205921056907ull, 4190750652774031580ull,
+ 13028449546918569436ull, 8514532712552890909ull}},
+{{15420287790555436375ull, 11842591194838545545ull,
+ 10448623976037799849ull, 5321582945345556818ull}},
+{{5440301682912131757ull, 968180938266018220ull, 3837407933192474004ull,
+ 6651978681681946023ull}},
+{{6800377103640164696ull, 1210226172832522775ull, 185073898063204601ull,
+ 8314973352102432529ull}},
+{{11167764717416184791ull, 12285606404088796494ull,
+ 11644886232357972635ull, 5196858345064020330ull}},
+{{4736333859915455181ull, 10745321986683607714ull,
+ 5332735753592689986ull, 6496072931330025413ull}},
+{{15143789361749094784ull, 4208280446499733834ull,
+ 11277605710418250387ull, 8120091164162531766ull}},
+{{14076554369520572144ull, 324332269848639694ull,
+ 2436817550584018588ull, 5075056977601582354ull}},
+{{8372320925045939372ull, 405415337310799618ull,
+ 12269393975084799043ull, 6343821222001977942ull}},
+{{1242029119452648407ull, 14341827226920663235ull,
+ 6113370432001222995ull, 7929776527502472428ull}},
+{{16917169264153762919ull, 6657799007611720569ull,
+ 13044228556855540180ull, 4956110329689045267ull}},
+{{7311403524910039936ull, 8322248759514650712ull,
+ 11693599677642037321ull, 6195137912111306584ull}},
+{{9139254406137549920ull, 15014496967820701294ull,
+ 14616999597052546651ull, 7743922390139133230ull}},
+{{1100347985408580796ull, 7078217595674244357ull,
+ 4523938729730453753ull, 4839951493836958269ull}},
+{{5987121000188113899ull, 13459458013020193350ull,
+ 10266609430590455095ull, 6049939367296197836ull}},
+{{16707273287089918182ull, 12212636497847853783ull,
+ 12833261788238068869ull, 7562424209120247295ull}},
+{{17359574832072280720ull, 9938740820368602566ull,
+ 14938317645289874899ull, 4726515130700154559ull}},
+{{12476096503235575092ull, 7811740007033365304ull,
+ 14061211038184955720ull, 5908143913375193199ull}},
+{{15595120629044468864ull, 9764675008791706630ull,
+ 12964827779303806746ull, 7385179891718991499ull}},
+{{5135264374725405136ull, 10714607898922204548ull,
+ 5797174352851185264ull, 4615737432324369687ull}},
+{{6419080468406756420ull, 13393259873652755685ull,
+ 2634781922636593676ull, 5769671790405462109ull}},
+{{12635536603935833429ull, 16741574842065944606ull,
+ 7905163421723129999ull, 7212089738006827636ull}},
+{{6571048718065015979ull, 16315282534155042854ull,
+ 9881454277153912499ull, 9015112172508534545ull}},
+{{17941963504072798699ull, 7891208574633207831ull,
+ 17705123969289665072ull, 5634445107817834090ull}},
+{{17815768361663610469ull, 9864010718291509789ull,
+ 12908032924757305532ull, 7043056384772292613ull}},
+{{8434652396797349375ull, 12330013397864387237ull,
+ 2299983100664468203ull, 8803820480965365767ull}},
+{{7577500757212037311ull, 5400415364451548071ull,
+ 8355018465556374483ull, 5502387800603353604ull}},
+{{4860189928087658735ull, 2138833187137047185ull,
+ 10443773081945468104ull, 6877984750754192005ull}},
+{{10686923428536961323ull, 2673541483921308981ull,
+ 17666402370859223034ull, 8597480938442740006ull}},
+{{8985170152049294779ull, 6282649445878206017ull,
+ 6429815463359626492ull, 5373425586526712504ull}},
+{{15843148708489006377ull, 7853311807347757521ull,
+ 8037269329199533115ull, 6716781983158390630ull}},
+{{5968877830329094260ull, 5204953740757308998ull, 823214624644640586ull,
+ 8395977478947988288ull}},
+{{17565606699237847624ull, 7864782106400706027ull,
+ 514509140402900366ull, 5247485924342492680ull}},
+{{17345322355619921626ull, 607605596146106726ull, 643136425503625458ull,
+ 6559357405428115850ull}},
+{{12458280907670126225ull, 9982879032037409216ull,
+ 10027292568734307630ull, 8199196756785144812ull}},
+{{7786425567293828891ull, 1627613376595992856ull,
+ 15490429892313718077ull, 5124497972990715507ull}},
+{{9733031959117286113ull, 6646202739172378974ull,
+ 14751351346964759692ull, 6405622466238394384ull}},
+{{2942917912041831834ull, 8307753423965473718ull,
+ 18439189183705949615ull, 8007028082797992980ull}},
+{{15674381750308308608ull, 12109874917619502929ull,
+ 2301121202961442701ull, 5004392551748745613ull}},
+{{5757919132603222048ull, 1302285591742214950ull,
+ 7488087522129191281ull, 6255490689685932016ull}},
+{{16420770952608803368ull, 6239543008105156591ull,
+ 9360109402661489101ull, 7819363362107415020ull}},
+{{17180510873021583961ull, 6205557389279416821ull,
+ 15073440413518206496ull, 4887102101317134387ull}},
+{{7640580535994816239ull, 7756946736599271027ull,
+ 14230114498470370216ull, 6108877626646417984ull}},
+{{4939039651566132395ull, 9696183420749088784ull,
+ 17787643123087962770ull, 7636097033308022480ull}},
+{{3086899782228832747ull, 10671800656395568394ull,
+ 11117276951929976731ull, 4772560645817514050ull}},
+{{13081996764640816742ull, 8728064802067072588ull,
+ 4673224153057695106ull, 5965700807271892563ull}},
+{{16352495955801020927ull, 1686708965729064927ull,
+ 1229844172894730979ull, 7457126009089865704ull}},
+{{17137839000016719936ull, 17195094168076523243ull,
+ 768652608059206861ull, 4660703755681166065ull}},
+{{16810612731593512015ull, 7658809654813490342ull,
+ 5572501778501396481ull, 5825879694601457581ull}},
+{{11789893877637114211ull, 14185198086944250832ull,
+ 11577313241554133505ull, 7282349618251821976ull}},
+{{14737367347046392764ull, 3896439553398149828ull,
+ 14471641551942666882ull, 9102937022814777470ull}},
+{{18434226628758771286ull, 7046960739301231546ull,
+ 4433089951536778897ull, 5689335639259235919ull}},
+{{13819411249093688299ull, 13420386942553927337ull,
+ 929676420993585717ull, 7111669549074044899ull}},
+{{3439206006084946661ull, 2940425622910245460ull,
+ 14997153581524145859ull, 8889586936342556123ull}},
+{{11372875790657867472ull, 17978667078814761076ull,
+ 7067377979238897209ull, 5555991835214097577ull}},
+{{14216094738322334339ull, 8638275793236287633ull,
+ 13445908492476009416ull, 6944989794017621971ull}},
+{{3935060367620754212ull, 10797844741545359542ull,
+ 12195699597167623866ull, 8681237242522027464ull}},
+{{16294470785045135095ull, 11360338981893237617ull,
+ 7622312248229764916ull, 5425773276576267165ull}},
+{{6533030426024255156ull, 14200423727366547022ull,
+ 14139576328714594049ull, 6782216595720333956ull}},
+{{17389660069385094753ull, 3915471603926020065ull,
+ 17674470410893242562ull, 8477770744650417445ull}},
+{{3951008515724602365ull, 7058855770881150445ull,
+ 13352387016021970553ull, 5298606715406510903ull}},
+{{9550446663083140860ull, 13435255732028825960ull,
+ 12078797751600075287ull, 6623258394258138629ull}},
+{{11938058328853926075ull, 12182383646608644546ull,
+ 1263439134217930397ull, 8279072992822673287ull}},
+{{12072972473961091701ull, 9919832788344096793ull,
+ 7707178486527288354ull, 5174420620514170804ull}},
+{{1256157537169200914ull, 3176418948575345184ull,
+ 9633973108159110443ull, 6468025775642713505ull}},
+{{1570196921461501143ull, 17805581741001345192ull,
+ 16654152403626275957ull, 8085032219553391881ull}},
+{{981373075913438214ull, 13434331597339534697ull,
+ 3491316224625340617ull, 5053145137220869926ull}},
+{{5838402363319185672ull, 2957856441392254659ull,
+ 13587517317636451580ull, 6316431421526087407ull}},
+{{2686316935721594185ull, 3697320551740318324ull,
+ 12372710628618176571ull, 7895539276907609259ull}},
+{{10902320121680772174ull, 4982335624005000ull, 5427101133672666405ull,
+ 4934712048067255787ull}},
+{{13627900152100965218ull, 4617913937957394154ull,
+ 2172190398663445102ull, 6168390060084069734ull}},
+{{7811503153271430714ull, 14995764459301518501ull,
+ 11938610035184082185ull, 7710487575105087167ull}},
+{{7188032480008338148ull, 2454823759422367207ull,
+ 14379160299631133222ull, 4819054734440679479ull}},
+{{4373354581583034781ull, 12291901736132734817ull,
+ 13362264356111528623ull, 6023818418050849349ull}},
+{{10078379245406181380ull, 10753191151738530617ull,
+ 2867772389857247067ull, 7529773022563561687ull}},
+{{17828202074447333123ull, 4414901460622887683ull,
+ 8709886771301861273ull, 4706108139102226054ull}},
+{{17673566574631778500ull, 10130312844205997508ull,
+ 1663986427272550783ull, 5882635173877782568ull}},
+{{3645214144580171508ull, 8051205036830108982ull,
+ 2079983034090688479ull, 7353293967347228210ull}},
+{{13779889717579990193ull, 5452320277610248323ull,
+ 11823350829468136407ull, 9191617459184035262ull}},
+{{6306588064273799919ull, 10325229201147487058ull,
+ 2777908249990197350ull, 5744760911990022039ull}},
+{{17106607117197025707ull, 3683164464579583014ull,
+ 17307443367769910400ull, 7180951139987527548ull}},
+{{12159886859641506325ull, 4603955580724478768ull,
+ 3187560136002836384ull, 8976188924984409436ull}},
+{{7599929287275941453ull, 2877472237952799230ull,
+ 11215597121856548548ull, 5610118078115255897ull}},
+{{276539572240151009ull, 3596840297440999038ull, 184438347038521973ull,
+ 7012647597644069872ull}},
+{{9569046502154964569ull, 9107736390228636701ull, 230547933798152466ull,
+ 8765809497055087340ull}},
+{{8286497073060546808ull, 10304021262320285842ull,
+ 9367464495478621099ull, 5478630935659429587ull}},
+{{1134749304470907701ull, 8268340559472969399ull,
+ 7097644600920888470ull, 6848288669574286984ull}},
+{{15253494685870798339ull, 1112053662486435940ull,
+ 8872055751151110588ull, 8560360836967858730ull}},
+{{310062141814473154ull, 9918405575908798271ull,
+ 10156720862896832021ull, 5350225523104911706ull}},
+{{14222635732550255154ull, 17009692988313385742ull,
+ 3472529041766264218ull, 6687781903881139633ull}},
+{{8554922628833043135ull, 12038744198536956370ull,
+ 8952347320635218177ull, 8359727379851424541ull}},
+{{9958512661448039863ull, 606686096444515875ull, 7901060084610705313ull,
+ 5224829612407140338ull}},
+{{7836454808382661925ull, 5370043638983032748ull, 652953068908605833ull,
+ 6531037015508925423ull}},
+{{9795568510478327406ull, 11324240567156178839ull,
+ 14651249391417921003ull, 8163796269386156778ull}},
+{{13039759346690036485ull, 4771807345258917822ull,
+ 13768716888063588531ull, 5102372668366347986ull}},
+{{7076327146507769798ull, 1353073163146259374ull,
+ 7987524073224709856ull, 6377965835457934983ull}},
+{{18068780969989488056ull, 1691341453932824217ull,
+ 5372719073103499416ull, 7972457294322418729ull}},
+{{4375459078602348179ull, 1057088408708015136ull,
+ 14887164466758156895ull, 4982785808951511705ull}},
+{{5469323848252935223ull, 15156418566167182632ull,
+ 4773897528165532406ull, 6228482261189389632ull}},
+{{6836654810316169029ull, 9722151170854202482ull,
+ 5967371910206915508ull, 7785602826486737040ull}},
+{{8884595274874993547ull, 15299716518638652359ull,
+ 3729607443879322192ull, 4866001766554210650ull}},
+{{6494058075166354030ull, 677901574588763833ull,
+ 13885381341703928549ull, 6082502208192763312ull}},
+{{12729258612385330442ull, 5459062986663342695ull,
+ 17356726677129910686ull, 7603127760240954140ull}},
+{{14873315660381913382ull, 17246972421946752896ull,
+ 1624582136351418370ull, 4751954850150596338ull}},
+{{144900501767840112ull, 12335343490578665313ull,
+ 11254099707294048771ull, 5939943562688245422ull}},
+{{4792811645637188043ull, 10807493344795943737ull,
+ 4844252597262785156ull, 7424929453360306778ull}},
+{{14524722324591712287ull, 15978055377352240643ull,
+ 7639343891716628626ull, 4640580908350191736ull}},
+{{13544216887312252455ull, 10749197184835524996ull,
+ 9549179864645785783ull, 5800726135437739670ull}},
+{{16930271109140315569ull, 8824810462617018341ull,
+ 2713102793952456421ull, 7250907669297174588ull}},
+{{7327780831143230749ull, 15642699096698660831ull,
+ 3391378492440570526ull, 9063634586621468235ull}},
+{{11497392047105601074ull, 5165000917009275115ull,
+ 18260512622271214243ull, 5664771616638417646ull}},
+{{9760054040454613439ull, 1844565127834205990ull,
+ 13602268740984241996ull, 7080964520798022058ull}},
+{{2976695513713490990ull, 2305706409792757488ull,
+ 7779463889375526687ull, 8851205650997527573ull}},
+{{1860434696070931869ull, 8358595533761555286ull,
+ 7168007940073398131ull, 5532003531873454733ull}},
+{{11548915406943440644ull, 5836558398774556203ull,
+ 13571695943519135568ull, 6915004414841818416ull}},
+{{9824458240251912901ull, 7295697998468195254ull,
+ 16964619929398919460ull, 8643755518552273020ull}},
+{{1528600381730057659ull, 13783183285897397842ull,
+ 1379515419019548854ull, 5402347199095170638ull}},
+{{11134122514017347882ull, 8005607070516971494ull,
+ 10947766310629211876ull, 6752933998868963297ull}},
+{{4694281105666909044ull, 10007008838146214368ull,
+ 18296393906713902749ull, 8441167498586204121ull}},
+{{2933925691041818153ull, 8560223533055077932ull,
+ 4517717164055107362ull, 5275729686616377576ull}},
+{{3667407113802272691ull, 1476907379464071607ull,
+ 5647146455068884203ull, 6594662108270471970ull}},
+{{18419316947535004576ull, 15681192279612253220ull,
+ 16282305105690881061ull, 8243327635338089962ull}},
+{{2288701055354602052ull, 12106588183971352215ull,
+ 14788126709484188567ull, 5152079772086306226ull}},
+{{16695934374475416277ull, 10521549211536802364ull,
+ 9261786350000459901ull, 6440099715107882783ull}},
+{{2423173894384718730ull, 17763622532848390860ull,
+ 6965546919073186972ull, 8050124643884853479ull}},
+{{10737855720845225014ull, 1878892046175468479ull,
+ 11270995852061823714ull, 5031327902428033424ull}},
+{{8810633632629143364ull, 11571987094574111407ull,
+ 14088744815077279642ull, 6289159878035041780ull}},
+{{6401606022359041301ull, 5241611831362863451ull,
+ 17610931018846599553ull, 7861449847543802225ull}},
+{{1695160754760706861ull, 14805222440670259417ull,
+ 4089302859138042864ull, 4913406154714876391ull}},
+{{6730636961878271480ull, 59783977128272655ull, 499942555495165677ull,
+ 6141757693393595489ull}},
+{{3801610183920451446ull, 4686415989837728723ull,
+ 5236614212796345000ull, 7677197116741994361ull}},
+{{70163355736588202ull, 2929009993648580452ull, 14802098929066185385ull,
+ 4798248197963746475ull}},
+{{87704194670735252ull, 8272948510488113469ull, 13890937642905343827ull,
+ 5997810247454683094ull}},
+{{4721316261765806969ull, 5729499619682753932ull,
+ 8140300016776903976ull, 7497262809318353868ull}},
+{{12174194700458405164ull, 3580937262301721207ull,
+ 14311059547340340793ull, 4685789255823971167ull}},
+{{10606057357145618551ull, 9087857596304539413ull,
+ 13277138415748038087ull, 5857236569779963959ull}},
+{{17869257714859411093ull, 6748135976953286362ull,
+ 11984737001257659705ull, 7321545712224954949ull}},
+{{13113200106719488058ull, 13046855989618995857ull,
+ 1145863196289910919ull, 9151932140281193687ull}},
+{{1278221039058598180ull, 15071814021152954267ull,
+ 7633693525322276180ull, 5719957587675746054ull}},
+{{15432834354105411437ull, 393023452731641217ull, 318744869798069418ull,
+ 7149946984594682568ull}},
+{{5455984887349600584ull, 9714651352769327330ull, 398431087247586772ull,
+ 8937433730743353210ull}},
+{{8021676573020888269ull, 15295029132335605389ull,
+ 4860705447957129636ull, 5585896081714595756ull}},
+{{14638781734703498241ull, 672042341709955120ull,
+ 6075881809946412046ull, 6982370102143244695ull}},
+{{18298477168379372801ull, 10063424963992219708ull,
+ 2983166244005627153ull, 8727962627679055869ull}},
+{{2213176193382332193ull, 17818855648563607078ull,
+ 4170321911717210922ull, 5454976642299409918ull}},
+{{11989842278582691049ull, 13050197523849733039ull,
+ 14436274426501289461ull, 6818720802874262397ull}},
+{{10375616829800975907ull, 2477688849530002587ull,
+ 4210284977844448115ull, 8523401003592827997ull}},
+{{4178917509411915990ull, 17689456595452109281ull,
+ 4937271120366474023ull, 5327125627245517498ull}},
+{{9835332905192282891ull, 17500134725887748697ull,
+ 15394960937312868337ull, 6658907034056896872ull}},
+{{16905852149917741518ull, 8040110352077522159ull,
+ 796957097931533806ull, 8323633792571121091ull}},
+{{17483686621339670305ull, 413382951621063445ull,
+ 16638999250703066293ull, 5202271120356950681ull}},
+{{8019550221392424169ull, 5128414707953717211ull,
+ 6963691008096669154ull, 6502838900446188352ull}},
+{{5412751758313142307ull, 15633890421796922322ull,
+ 8704613760120836442ull, 8128548625557735440ull}},
+{{7994655867373101846ull, 14382867532050464355ull,
+ 5440383600075522776ull, 5080342890973584650ull}},
+{{5381633815788989403ull, 17978584415063080444ull,
+ 16023851536949179278ull, 6350428613716980812ull}},
+{{6727042269736236754ull, 13249858481974074747ull,
+ 1583070347476922482ull, 7938035767146226016ull}},
+{{1898558409371454020ull, 12892847569661184621ull,
+ 989418967173076551ull, 4961272354466391260ull}},
+{{6984884030141705428ull, 11504373443649092872ull,
+ 1236773708966345689ull, 6201590443082989075ull}},
+{{8731105037677131785ull, 545408749279202378ull,
+ 15381025191490095824ull, 7751988053853736343ull}},
+{{10068626666975595270ull, 340880468299501486ull,
+ 16530669772322391746ull, 4844992533658585214ull}},
+{{3362411296864718279ull, 9649472622229152666ull,
+ 11439965178548213874ull, 6056240667073231518ull}},
+{{13426386157935673657ull, 2838468740931665024ull,
+ 5076584436330491535ull, 7570300833841539398ull}},
+{{8391491348709796036ull, 8691571990723372496ull,
+ 17007923327988720921ull, 4731438021150962123ull}},
+{{10489364185887245045ull, 15476151006831603524ull,
+ 16648218141558513247ull, 5914297526438702654ull}},
+{{13111705232359056306ull, 14733502740112116501ull,
+ 11586900640093365751ull, 7392871908048378318ull}},
+{{10500658779438104143ull, 16125968240211154669ull,
+ 2630126881630965690ull, 4620544942530236449ull}},
+{{17737509492725018083ull, 10934088263409167528ull,
+ 7899344620466095017ull, 5775681178162795561ull}},
+{{3725142792196720988ull, 18279296347688847315ull,
+ 14485866794010006675ull, 7219601472703494451ull}},
+{{44742471818513330ull, 18237434416183671240ull,
+ 13495647474085120440ull, 9024501840879368064ull}},
+{{27964044886570832ull, 11398396510114794525ull, 8434779671303200275ull,
+ 5640313650549605040ull}},
+{{4646641074535601443ull, 9636309619216105252ull,
+ 10543474589129000344ull, 7050392063187006300ull}},
+{{5808301343169501804ull, 12045387024020131565ull,
+ 13179343236411250430ull, 8812990078983757875ull}},
+{{5936031348694632580ull, 2916680871585194324ull,
+ 5931246513543337567ull, 5508118799364848672ull}},
+{{7420039185868290725ull, 17480909144763656617ull,
+ 7414058141929171958ull, 6885148499206060840ull}},
+{{13886735000762751310ull, 12627764394099794963ull,
+ 9267572677411464948ull, 8606435624007576050ull}},
+{{6373366366263025617ull, 17115724783167147660ull,
+ 10403918941809553496ull, 5379022265004735031ull}},
+{{7966707957828782021ull, 2947911905249382959ull,
+ 8393212658834553967ull, 6723777831255918789ull}},
+{{5346698928858589622ull, 17519947936843892411ull,
+ 15103201841970580362ull, 8404722289069898486ull}},
+{{1035843821322924562ull, 15561653478954820661ull,
+ 4827815132804224822ull, 5252951430668686554ull}},
+{{5906490795081043606ull, 10228694811838750018ull,
+ 15258140952860056836ull, 6566189288335858192ull}},
+{{16606485530706080316ull, 12785868514798437522ull,
+ 625932117365519429ull, 8207736610419822741ull}},
+{{14990739475118688101ull, 10297010830962717403ull,
+ 2697050582567143595ull, 5129835381512389213ull}},
+{{14126738325470972223ull, 8259577520276008850ull,
+ 7982999246636317398ull, 6412294226890486516ull}},
+{{8435050869983939470ull, 1101099863490235255ull,
+ 9978749058295396748ull, 8015367783613108145ull}},
+{{12189435821381044025ull, 9911559451536172842ull,
+ 17765933207503092727ull, 5009604864758192590ull}},
+{{6013422739871529223ull, 7777763295992828149ull,
+ 12984044472524090101ull, 6262006080947740738ull}},
+{{12128464443266799433ull, 14333890138418423090ull,
+ 7006683553800336818ull, 7827507601184675923ull}},
+{{12191976295469137550ull, 13570367354938902335ull,
+ 2073334211911516559ull, 4892192250740422452ull}},
+{{10628284350909034033ull, 12351273175246240015ull,
+ 2591667764889395699ull, 6115240313425528065ull}},
+{{8673669420208904637ull, 10827405450630412115ull,
+ 7851270724539132528ull, 7644050391781910081ull}},
+{{3115200378416871446ull, 6767128406644007572ull,
+ 16436259248905427590ull, 4777531494863693800ull}},
+{{3894000473021089308ull, 17682282545159785273ull,
+ 2098579987422232871ull, 5971914368579617251ull}},
+{{9479186609703749539ull, 17491167163022343687ull,
+ 16458283039559954801ull, 7464892960724521563ull}},
+{{12842020658705925318ull, 4014450449247882948ull,
+ 7980583890511277799ull, 4665558100452825977ull}},
+{{16052525823382406647ull, 406377043132465781ull,
+ 14587415881566485153ull, 5831947625566032471ull}},
+{{6230599223945844597ull, 5119657322342970131ull,
+ 13622583833530718537ull, 7289934531957540589ull}},
+{{3176563011504917842ull, 11011257671356100568ull,
+ 3193171736631234459ull, 9112418164946925737ull}},
+{{1985351882190573652ull, 4576193035383868903ull,
+ 13524947381462991297ull, 5695261353091828585ull}},
+{{16316747908020380776ull, 10331927312657224032ull,
+ 3071126171546575409ull, 7119076691364785732ull}},
+{{1949190811315924354ull, 17526595159248917945ull,
+ 3838907714433219261ull, 8898845864205982165ull}},
+{{12747459303140922482ull, 13259964983744267667ull,
+ 4705160330734455990ull, 5561778665128738853ull}},
+{{11322638110498765198ull, 7351584192825558776ull,
+ 10493136431845457892ull, 6952223331410923566ull}},
+{{14153297638123456497ull, 9189480241031948470ull,
+ 3893048502952046557ull, 8690279164263654458ull}},
+{{4234125005399772407ull, 8049268159858661746ull,
+ 7044841332772417002ull, 5431424477664784036ull}},
+{{14516028293604491317ull, 838213162968551374ull,
+ 8806051665965521253ull, 6789280597080980045ull}},
+{{8921663330150838338ull, 5659452472138077122ull,
+ 15619250600884289470ull, 8486600746351225056ull}},
+{{10187725599771661865ull, 17372215850368461913ull,
+ 9762031625552680918ull, 5304125466469515660ull}},
+{{17346343018141965235ull, 12491897776105801583ull,
+ 12202539531940851148ull, 6630156833086894575ull}},
+{{17071242754250068640ull, 15614872220132251979ull,
+ 10641488396498676031ull, 8287696041358618219ull}},
+{{8363683712192598948ull, 16676824165223739343ull,
+ 4345087238597978567ull, 5179810025849136387ull}},
+{{5842918621813360781ull, 16234344188102286275ull,
+ 819673029820085305ull, 6474762532311420484ull}},
+{{2691962258839313072ull, 6457872179845694132ull,
+ 1024591287275106632ull, 8093453165389275605ull}},
+{{10905848448629346478ull, 4036170112403558832ull,
+ 2946212563760635597ull, 5058408228368297253ull}},
+{{13632310560786683098ull, 9656898658931836444ull,
+ 8294451723128182400ull, 6323010285460371566ull}},
+{{17040388200983353872ull, 12071123323664795555ull,
+ 1144692617055452192ull, 7903762856825464458ull}},
+{{8344399616400902218ull, 7544452077290497222ull,
+ 5327118904087045524ull, 4939851785515915286ull}},
+{{1207127483646351965ull, 9430565096613121528ull,
+ 15882270666963582713ull, 6174814731894894107ull}},
+{{1508909354557939956ull, 16399892389193789814ull,
+ 15241152315277090487ull, 7718518414868617634ull}},
+{{14778126401880876185ull, 17167461770887200489ull,
+ 14137406215475569458ull, 4824074009292886021ull}},
+{{4637599947068931519ull, 12235955176754224804ull,
+ 3836699714062298111ull, 6030092511616107527ull}},
+{{5796999933836164398ull, 10683257952515393101ull,
+ 184188624150484735ull, 7537615639520134409ull}},
+{{5928967967861296701ull, 13594565247963202544ull,
+ 11644332936162522719ull, 4711009774700084005ull}},
+{{7411209959826620876ull, 12381520541526615276ull,
+ 720358114920989687ull, 5888762218375105007ull}},
+{{9264012449783276095ull, 10865214658480881191ull,
+ 14735505698933400821ull, 7360952772968881258ull}},
+{{6968329543801707215ull, 18193204341528489393ull,
+ 9196010086811975218ull, 9201190966211101573ull}},
+{{15884421010944536769ull, 15982438731882693774ull,
+ 8053349313471178463ull, 5750744353881938483ull}},
+{{10632154226825895154ull, 15366362396425979314ull,
+ 5455000623411585175ull, 7188430442352423104ull}},
+{{4066820746677593134ull, 14596266977105086239ull,
+ 6818750779264481469ull, 8985538052940528880ull}},
+{{9459291994314577565ull, 11428509869904372851ull,
+ 4261719237040300918ull, 5615961283087830550ull}},
+{{7212428974465834052ull, 5062265300525690256ull,
+ 14550521083155151956ull, 7019951603859788187ull}},
+{{9015536218082292565ull, 6327831625657112820ull,
+ 13576465335516552041ull, 8774939504824735234ull}},
+{{14858082173156208661ull, 15484109812104165272ull,
+ 13096976853125232929ull, 5484337190515459521ull}},
+{{125858642735709210ull, 5520079209848042879ull, 2536163011124377450ull,
+ 6855421488144324402ull}},
+{{13992381358701800225ull, 16123471049164829406ull,
+ 12393575800760247620ull, 8569276860180405502ull}},
+{{4133552330761237237ull, 853797368873242571ull, 3134298857047766859ull,
+ 5355798037612753439ull}},
+{{555254395024158642ull, 14902304766373716926ull,
+ 17752931626591872285ull, 6694747547015941798ull}},
+{{9917440030634974110ull, 4792822902684982445ull,
+ 12967792496385064549ull, 8368434433769927248ull}},
+{{8504243028360552771ull, 5301357323391807980ull,
+ 8104870310240665343ull, 5230271521106204530ull}},
+{{10630303785450690964ull, 2015010635812372071ull,
+ 907715850946055871ull, 6537839401382755663ull}},
+{{8676193713385975800ull, 16353821350047628801ull,
+ 14969702868964733550ull, 8172299251728444578ull}},
+{{16951836116934704635ull, 5609452325352380096ull,
+ 13967750311530346373ull, 5107687032330277861ull}},
+{{2743051072458829178ull, 11623501425117863025ull,
+ 3624629834130769254ull, 6384608790412847327ull}},
+{{8040499859000924377ull, 5306004744542552973ull,
+ 18365845347945625280ull, 7980760988016059158ull}},
+{{7331155421089271688ull, 3316252965339095608ull,
+ 6866967324038627896ull, 4987975617510036974ull}},
+{{9163944276361589609ull, 4145316206673869510ull,
+ 17807081191903060678ull, 6234969521887546217ull}},
+{{2231558308597211203ull, 14405017295197112696ull,
+ 8423793434596662135ull, 7793711902359432772ull}},
+{{1394723942873257002ull, 15920664837139277291ull,
+ 14488242933477689642ull, 4871069938974645482ull}},
+{{15578462983873734965ull, 10677459009569320805ull,
+ 8886931629992336245ull, 6088837423718306853ull}},
+{{5638020674560004994ull, 17958509780389038911ull,
+ 15720350555917808210ull, 7611046779647883566ull}},
+{{10441291949241084977ull, 15835754631170537223ull,
+ 5213533079021242227ull, 4756904237279927229ull}},
+{{8439928918123968318ull, 15183007270535783625ull,
+ 11128602367203940688ull, 5946130296599909036ull}},
+{{15161597166082348301ull, 532015014460177915ull,
+ 13910752959004925861ull, 7432662870749886295ull}},
+{{7170155219587773736ull, 2638352393251305149ull,
+ 15611749627019160519ull, 4645414294218678934ull}},
+{{13574380042912105074ull, 17132998546846295148ull,
+ 10291314996919174840ull, 5806767867773348668ull}},
+{{16967975053640131343ull, 2969504109848317319ull,
+ 12864143746148968551ull, 7258459834716685835ull}},
+{{16598282798622776274ull, 17546938192592560361ull,
+ 11468493664258822784ull, 9073074793395857294ull}},
+{{3456397721498153315ull, 10966836370370350226ull,
+ 2556122521734376336ull, 5670671745872410809ull}},
+{{13543869188727467452ull, 13708545462962937782ull,
+ 7806839170595358324ull, 7088339682340513511ull}},
+{{7706464449054558507ull, 17135681828703672228ull,
+ 5146862944816810001ull, 8860424602925641889ull}},
+{{14039912317513874875ull, 3792272115298713286ull,
+ 14746004386578976011ull, 5537765376828526180ull}},
+{{8326518360037567786ull, 128654125696003704ull,
+ 18432505483223720014ull, 6922206721035657725ull}},
+{{10408147950046959732ull, 9384189693974780438ull,
+ 9205573798747486305ull, 8652758401294572157ull}},
+{{1893406450351961929ull, 17394333604802707534ull,
+ 8059326633430872892ull, 5407974000809107598ull}},
+{{11590130099794728219ull, 3296172932293832801ull,
+ 850786254933815308ull, 6759967501011384498ull}},
+{{652604569461246561ull, 4120216165367291002ull,
+ 10286854855522044943ull, 8449959376264230622ull}},
+{{5019563874340667005ull, 9492664130995638732ull,
+ 1817598266273890185ull, 5281224610165144139ull}},
+{{6274454842925833756ull, 16477516182171936319ull,
+ 16107055888124526443ull, 6601530762706430173ull}},
+{{3231382535229904291ull, 15985209209287532495ull,
+ 6298761804873494342ull, 8251913453383037717ull}},
+{{8937143112159772038ull, 5379069737377319905ull,
+ 6242569137259627916ull, 5157445908364398573ull}},
+{{15783114908627102952ull, 6723837171721649881ull,
+ 12414897440001922799ull, 6446807385455498216ull}},
+{{5893835580501714977ull, 3793110446224674448ull,
+ 15518621800002403499ull, 8058509231819372770ull}},
+{{3683647237813571861ull, 64851019676727578ull, 14310824643428890091ull,
+ 5036568269887107981ull}},
+{{13827931084121740634ull, 13916121829878073184ull,
+ 4053472749003948901ull, 6295710337358884977ull}},
+{{17284913855152175793ull, 3560094232065427768ull,
+ 9678526954682324031ull, 7869637921698606221ull}},
+{{10803071159470109871ull, 9142587922681974211ull,
+ 8354922355890146471ull, 4918523701061628888ull}},
+{{8892152930910249434ull, 6816548884925079860ull,
+ 10443652944862683089ull, 6148154626327036110ull}},
+{{11115191163637811792ull, 13132372124583737729ull,
+ 3831194144223578053ull, 7685193282908795138ull}},
+{{29465449632550514ull, 10513575587078530033ull, 7006182358567124187ull,
+ 4803245801817996961ull}},
+{{4648517830468076047ull, 8530283465420774637ull,
+ 13369413966636293138ull, 6004057252272496201ull}},
+{{10422333306512482963ull, 1439482294921192488ull,
+ 2876709403013202711ull, 7505071565340620252ull}},
+{{6513958316570301852ull, 7817205461966827161ull,
+ 11021315413738027502ull, 4690669728337887657ull}},
+{{12754133914140265219ull, 548134790603758143ull,
+ 18388330285599922282ull, 5863337160422359571ull}},
+{{11330981374247943619ull, 9908540525109473487ull,
+ 18373726838572514948ull, 7329171450527949464ull}},
+{{9552040699382541620ull, 12385675656386841859ull,
+ 4520414474506092069ull, 9161464313159936831ull}},
+{{3664182427900394561ull, 10046890294455470114ull,
+ 9742788074207389399ull, 5725915195724960519ull}},
+{{13803600071730269009ull, 7946926849641949738ull,
+ 7566799074331848845ull, 7157393994656200649ull}},
+{{8031128052808060453ull, 14545344580479825077ull,
+ 14070184861342198960ull, 8946742493320250811ull}},
+{{7325298042218731735ull, 9090840362799890673ull,
+ 6488022529125180398ull, 5591714058325156757ull}},
+{{13768308571200802573ull, 2140178416645087533ull,
+ 12721714179833863402ull, 6989642572906445946ull}},
+{{3375327658718839504ull, 11898595057661135225ull,
+ 6678770687937553444ull, 8737053216133057433ull}},
+{{13638794832767744450ull, 16659993947892985323ull,
+ 15703446726029440662ull, 5460658260083160895ull}},
+{{12436807522532292658ull, 11601620398011455846ull,
+ 15017622389109412924ull, 6825822825103951119ull}},
+{{6322637366310590015ull, 14502025497514319808ull,
+ 14160341967959378251ull, 8532278531379938899ull}},
+{{3951648353944118760ull, 6757922926732755928ull,
+ 6544370720760917455ull, 5332674082112461812ull}},
+{{4939560442430148449ull, 3835717639988557006ull,
+ 8180463400951146819ull, 6665842602640577265ull}},
+{{15397822589892461369ull, 182961031558308353ull,
+ 14837265269616321428ull, 8332303253300721581ull}},
+{{2706110091041706500ull, 9337722681578718529ull,
+ 11579133802723894844ull, 5207689533312950988ull}},
+{{7994323632229521029ull, 11672153351973398161ull,
+ 14473917253404868555ull, 6509611916641188735ull}},
+{{14604590558714289190ull, 9978505671539359797ull,
+ 13480710548328697790ull, 8137014895801485919ull}},
+{{11433712108410124696ull, 1624880026284711969ull,
+ 15342973120346517975ull, 5085634309875928699ull}},
+{{457082080230492158ull, 15866158088138053674ull,
+ 14567030382005759564ull, 6357042887344910874ull}},
+{{9794724637142891005ull, 1385953536463015476ull,
+ 8985415940652423648ull, 7946303609181138593ull}},
+{{15345074935069082686ull, 866220960289384672ull,
+ 17145100008976234540ull, 4966439755738211620ull}},
+{{734599595126801742ull, 1082776200361730841ull, 2984630937510741559ull,
+ 6208049694672764526ull}},
+{{5529935512335890081ull, 15188528305734327263ull,
+ 12954160708743202756ull, 7760062118340955657ull}},
+{{10373738722851013157ull, 269458154229178731ull,
+ 1178821415323419867ull, 4850038823963097286ull}},
+{{8355487385136378542ull, 14171880748068637126ull,
+ 10696898806009050641ull, 6062548529953871607ull}},
+{{1220987194565697370ull, 3879792879803632696ull,
+ 8759437489083925398ull, 7578185662442339509ull}},
+{{763116996603560856ull, 16259928605159434147ull,
+ 7780491439891147325ull, 4736366039026462193ull}},
+{{14788954301036614782ull, 6489852701167128971ull,
+ 14337300318291322061ull, 5920457548783077741ull}},
+{{13874506857868380573ull, 12724001894886299118ull,
+ 4086567342581988864ull, 7400571935978847177ull}},
+{{4059880767740349955ull, 7952501184303936949ull,
+ 14083319635182212800ull, 4625357459986779485ull}},
+{{9686536978102825347ull, 9940626480379921186ull,
+ 3769091488695602288ull, 5781696824983474357ull}},
+{{2884799185773755876ull, 12425783100474901483ull,
+ 9323050379296890764ull, 7227121031229342946ull}},
+{{17441057037499358557ull, 15532228875593626853ull,
+ 2430440937266337647ull, 9033901289036678683ull}},
+{{13206503657650793050ull, 16625172074887098639ull,
+ 17659926650287318693ull, 5646188305647924176ull}},
+{{11896443553636103408ull, 6946407038326709587ull,
+ 3628164239149596751ull, 7057735382059905221ull}},
+{{10258868423617741356ull, 4071322779480999080ull,
+ 9146891317364383843ull, 8822169227574881526ull}},
+{{6411792764761088348ull, 238733727961930473ull, 1105121054925351998ull,
+ 5513855767234300954ull}},
+{{12626426974378748339ull, 9521789196807188899ull,
+ 10604773355511465805ull, 6892319709042876192ull}},
+{{11171347699546047519ull, 16513922514436374028ull,
+ 13255966694389332256ull, 8615399636303595240ull}},
+{{16205464349071055508ull, 10321201571522733767ull,
+ 8284979183993332660ull, 5384624772689747025ull}},
+{{15645144417911431481ull, 12901501964403417209ull,
+ 14967909998419053729ull, 6730780965862183781ull}},
+{{5721372467107125639ull, 2291819400222107800ull,
+ 4874829442741653450ull, 8413476207327729727ull}},
+{{3575857791941953524ull, 6044073143566205279ull,
+ 9964297429354615262ull, 5258422629579831079ull}},
+{{18304880295209605617ull, 16778463466312532406ull,
+ 7843685768265881173ull, 6573028286974788849ull}},
+{{13657728332157231214ull, 7138021277608501796ull,
+ 14416293228759739371ull, 8216285358718486061ull}},
+{{17759452244453045317ull, 2155420289291619670ull,
+ 11316026277188531059ull, 5135178349199053788ull}},
+{{12975943268711530838ull, 16529333416896688300ull,
+ 14145032846485663823ull, 6418972936498817235ull}},
+{{16219929085889413547ull, 16049980752693472471ull,
+ 13069605039679691875ull, 8023716170623521544ull}},
+{{17054984706321965323ull, 7725394961219726342ull,
+ 8168503149799807422ull, 5014822606639700965ull}},
+{{12095358846047680846ull, 433371664669882120ull,
+ 14822314955677147182ull, 6268528258299626206ull}},
+{{15119198557559601057ull, 9765086617692128458ull,
+ 9304521657741658169ull, 7835660322874532758ull}},
+{{14061185116902138565ull, 17632394182126050046ull,
+ 1203640017661148451ull, 4897287701796582974ull}},
+{{8353109359272897398ull, 17428806709230174654ull,
+ 10727922058931211372ull, 6121609627245728717ull}},
+{{1218014662236345939ull, 3339264312828166702ull,
+ 18021588592091402120ull, 7652012034057160896ull}},
+{{14596317219179879924ull, 2087040195517604188ull,
+ 11263492870057126325ull, 4782507521285725560ull}},
+{{18245396523974849905ull, 7220486262824393139ull,
+ 14079366087571407906ull, 5978134401607156950ull}},
+{{18195059636541174477ull, 18248979865385267232ull,
+ 8375835572609484074ull, 7472668002008946188ull}},
+{{11371912272838234049ull, 16017298434293179924ull,
+ 14458269269735703354ull, 4670417501255591367ull}},
+{{14214890341047792561ull, 10798251006011699097ull,
+ 13461150568742241289ull, 5838021876569489209ull}},
+{{3933554871027576989ull, 18109499775942011776ull,
+ 2991380155645637899ull, 7297527345711861512ull}},
+{{4916943588784471236ull, 18025188701500126816ull,
+ 3739225194557047374ull, 9121909182139826890ull}},
+{{3073089742990294522ull, 6654056920010191356ull,
+ 6948701765025542513ull, 5701193238837391806ull}},
+{{3841362178737868153ull, 12929257168440127099ull,
+ 17909249243136703949ull, 7126491548546739757ull}},
+{{190016704994947287ull, 2326513405267995162ull, 8551503498638716225ull,
+ 8908114435683424697ull}},
+{{4730446459049229959ull, 12983285924360966736ull,
+ 16873904732717667400ull, 5567571522302140435ull}},
+{{5913058073811537448ull, 16229107405451208420ull,
+ 16480694897469696346ull, 6959464402877675544ull}},
+{{7391322592264421810ull, 11063012219959234717ull,
+ 2154124548127568817ull, 8699330503597094431ull}},
+{{6925419629378957583ull, 18443597683542991458ull,
+ 8263856870220812366ull, 5437081564748184019ull}},
+{{17880146573578472787ull, 13831125067573963514ull,
+ 5718135069348627554ull, 6796351955935230024ull}},
+{{13126811180118315176ull, 8065534297612678585ull,
+ 7147668836685784443ull, 8495439944919037530ull}},
+{{1286727959932865129ull, 2735115926794230164ull,
+ 9078979041356003181ull, 5309649965574398456ull}},
+{{1608409949916081411ull, 8030580926920175609ull,
+ 11348723801695003976ull, 6637062456967998070ull}},
+{{6622198455822489668ull, 10038226158650219511ull,
+ 4962532715263979162ull, 8296328071209997588ull}},
+{{11056403062530137899ull, 10885577367583775098ull,
+ 12324954983894762784ull, 5185205044506248492ull}},
+{{4597131791307896565ull, 13606971709479718873ull,
+ 15406193729868453480ull, 6481506305632810615ull}},
+{{10358100757562258610ull, 17008714636849648591ull,
+ 14646056143908178946ull, 8101882882041013269ull}},
+{{13391342001117493488ull, 15242132666458418273ull,
+ 11459628099156305793ull, 5063676801275633293ull}},
+{{2904119446114703147ull, 5217607777790859130ull, 489477068663218530ull,
+ 6329596001594541617ull}},
+{{12853521344498154742ull, 15745381759093349720ull,
+ 5223532354256411066ull, 7911995001993177021ull}},
+{{8033450840311346714ull, 14452549617860731479ull,
+ 5570550730623950868ull, 4944996876245735638ull}},
+{{5430127531961795488ull, 18065687022325914349ull,
+ 16186560450134714393ull, 6181246095307169547ull}},
+{{11399345433379632264ull, 8747050722625229224ull,
+ 15621514544241005088ull, 7726557619133961934ull}},
+{{7124590895862270165ull, 5466906701640768265ull,
+ 5151760571723240276ull, 4829098511958726209ull}},
+{{13517424638255225611ull, 6833633377050960331ull,
+ 11051386733081438249ull, 6036373139948407761ull}},
+{{12285094779391644109ull, 13153727739741088318ull,
+ 18425919434779185715ull, 7545466424935509701ull}},
+{{3066498218692389664ull, 5915236828124486247ull,
+ 13822042655950685024ull, 4715916515584693563ull}},
+{{17668180828647650792ull, 7394046035155607808ull,
+ 12665867301510968376ull, 5894895644480866954ull}},
+{{3638481962100011874ull, 9242557543944509761ull,
+ 6608962090033934662ull, 7368619555601083693ull}},
+{{9159788471052402747ull, 2329824893075861393ull,
+ 12872888630969806232ull, 9210774444501354616ull}},
+{{17254082840476221477ull, 1456140558172413370ull,
+ 8045555394356128895ull, 5756734027813346635ull}},
+{{12344231513740501038ull, 15655233752997680425ull,
+ 5445258224517773214ull, 7195917534766683294ull}},
+{{1595231336893462585ull, 10345670154392324724ull,
+ 16029944817501992326ull, 8994896918458354117ull}},
+{{10220391622413189924ull, 1854357828067815048ull,
+ 12324558520152439156ull, 5621810574036471323ull}},
+{{12775489528016487405ull, 2317947285084768810ull,
+ 10794012131763161041ull, 7027263217545589154ull}},
+{{6745989873165833448ull, 7509120124783348917ull,
+ 4269143127849175493ull, 8784079021931986443ull}},
+{{6522086679942339857ull, 6999043087203287025ull, 362371445692040731ull,
+ 5490049388707491527ull}},
+{{12764294368355312725ull, 4137117840576720877ull,
+ 14288022362397214626ull, 6862561735884364408ull}},
+{{2120309905161977195ull, 14394769337575676905ull,
+ 17860027952996518282ull, 8578202169855455510ull}},
+{{12854408736794705507ull, 13608416854412185969ull,
+ 6550831452195436022ull, 5361376356159659694ull}},
+{{2232952865711218171ull, 7787149031160456654ull,
+ 17411911352099070836ull, 6701720445199574617ull}},
+{{12014563118993798522ull, 9733936288950570817ull,
+ 7929831134841674833ull, 8377150556499468272ull}},
+{{591572921730042221ull, 17612925226662576521ull,
+ 4956144459276046770ull, 5235719097812167670ull}},
+{{5351152170589940680ull, 12792784496473444843ull,
+ 15418552610949834271ull, 6544648872265209587ull}},
+{{2077254194810037945ull, 11379294602164418150ull,
+ 14661504745259904935ull, 8180811090331511984ull}},
+{{15133341927038437428ull, 14029588153993843199ull,
+ 9163440465787440584ull, 5113006931457194990ull}},
+{{14304991390370658881ull, 17536985192492303999ull,
+ 2230928545379524922ull, 6391258664321493738ull}},
+{{13269553219535935697ull, 12697859453760604191ull,
+ 12012032718579181961ull, 7989073330401867172ull}},
+{{15210999789851041667ull, 1018633130959295763ull,
+ 16730892485966764534ull, 4993170831501166982ull}},
+{{14402063718886414179ull, 10496663450553895512ull,
+ 11690243570603679859ull, 6241463539376458728ull}},
+{{18002579648608017724ull, 8509143294764981486ull,
+ 14612804463254599824ull, 7801829424220573410ull}},
+{{6639926261952623174ull, 5318214559228113429ull,
+ 13744688807961512794ull, 4876143390137858381ull}},
+{{12911593845868166871ull, 15871140235889917594ull,
+ 3345802954669727280ull, 6095179237672322977ull}},
+{{6916120270480432781ull, 1392181221152845377ull,
+ 8793939711764547005ull, 7618974047090403721ull}},
+{{15851790215118740248ull, 3175956272434222312ull,
+ 17025427365921311638ull, 4761858779431502325ull}},
+{{1367993695188873694ull, 13193317377397553699ull,
+ 7446726152119475835ull, 5952323474289377907ull}},
+{{15545050174268255829ull, 11879960703319554219ull,
+ 4696721671721956890ull, 7440404342861722384ull}},
+{{7409813349703965942ull, 12036661458002109291ull,
+ 2935451044826223056ull, 4650252714288576490ull}},
+{{4650580668702569523ull, 15045826822502636614ull,
+ 12892685842887554628ull, 5812815892860720612ull}},
+{{15036597872732987711ull, 360539454418744151ull,
+ 16115857303609443286ull, 7266019866075900765ull}},
+{{14184061322488846735ull, 9674046354878205997ull,
+ 6309763574229640395ull, 9082524832594875957ull}},
+{{11170881335769223162ull, 3740435962585184796ull,
+ 6249445243107219199ull, 5676578020371797473ull}},
+{{13963601669711528952ull, 63858934804093091ull,
+ 12423492572311411903ull, 7095722525464746841ull}},
+{{12842816068712023286ull, 13914881723787280076ull,
+ 1694307660107101166ull, 8869653156830933552ull}},
+{{17250132079799790362ull, 4085115058939662143ull,
+ 1058942287566938229ull, 5543533223019333470ull}},
+{{16950979081322350048ull, 9718079842101965583ull,
+ 10547049896313448594ull, 6929416528774166837ull}},
+{{16577037833225549656ull, 2924227765772681171ull,
+ 17795498388819198647ull, 8661770660967708546ull}},
+{{8054805636552274583ull, 8745171381249007588ull,
+ 15733872511439387058ull, 5413606663104817841ull}},
+{{10068507045690343229ull, 1708092189706483677ull,
+ 5832282584017070111ull, 6767008328881022302ull}},
+{{17197319825540316940ull, 15970173292415268308ull,
+ 16513725266876113446ull, 8458760411101277877ull}},
+{{1524952854107922280ull, 5369672289332154789ull,
+ 12626921301011264856ull, 5286725256938298673ull}},
+{{6517877086062290754ull, 6712090361665193486ull,
+ 1948593570981917358ull, 6608406571172873342ull}},
+{{17370718394432639250ull, 17613484988936267665ull,
+ 11659114000582172505ull, 8260508213966091677ull}},
+{{3939169968879317675ull, 4090899090444085435ull,
+ 9592789259577551768ull, 5162817633728807298ull}},
+{{312276442671759190ull, 5113623863055106794ull, 2767614537617163902ull,
+ 6453522042161009123ull}},
+{{9613717590194474795ull, 15615401865673659300ull,
+ 17294576227303618589ull, 8066902552701261403ull}},
+{{15231945530726322555ull, 12065469175259731014ull,
+ 8503267132851067666ull, 5041814095438288377ull}},
+{{9816559876553127386ull, 5858464432219887960ull,
+ 15240769934491222487ull, 6302267619297860471ull}},
+{{12270699845691409232ull, 2711394521847472046ull,
+ 14439276399686640205ull, 7877834524122325589ull}},
+{{3057501385129742866ull, 4000464585368363981ull,
+ 11330390759017844080ull, 4923646577576453493ull}},
+{{8433562749839566487ull, 5000580731710454976ull, 327930393490141388ull,
+ 6154558221970566867ull}},
+{{10541953437299458108ull, 6250725914638068720ull,
+ 14244971047144840447ull, 7693197777463208583ull}},
+{{6588720898312161318ull, 10824232724289874806ull,
+ 15820635932106607135ull, 4808248610914505364ull}},
+{{17459273159744977455ull, 8918604886934955603ull,
+ 1329050841423707303ull, 6010310763643131706ull}},
+{{17212405431253833915ull, 6536570090241306600ull,
+ 10884685588634409937ull, 7512888454553914632ull}},
+{{10757753394533646197ull, 15614571352469286385ull,
+ 6802928492896506210ull, 4695555284096196645ull}},
+{{18058877761594445650ull, 10294842153731832173ull,
+ 13115346634548020667ull, 5869444105120245806ull}},
+{{8738539146710893351ull, 8256866673737402313ull,
+ 7170811256330250026ull, 7336805131400307258ull}},
+{{15534859951816004592ull, 1097711305316977083ull,
+ 18186886107267588341ull, 9171006414250384072ull}},
+{{7403444460671308918ull, 2991912575036804629ull,
+ 11366803817042242713ull, 5731879008906490045ull}},
+{{13865991594266524052ull, 8351576737223393690ull,
+ 373446716020639679ull, 7164848761133112557ull}},
+{{8109117455978379257ull, 5827784903101854209ull,
+ 5078494413453187503ull, 8956060951416390696ull}},
+{{16597413456054956796ull, 10559894592079740736ull,
+ 3174059008408242189ull, 5597538094635244185ull}},
+{{2300022746359144378ull, 17811554258527063825ull,
+ 8579259778937690640ull, 6996922618294055231ull}},
+{{7486714451376318377ull, 3817698749449278165ull,
+ 6112388705244725397ull, 8746153272867569039ull}},
+{{6985039541323892938ull, 4691904727619492805ull,
+ 10737771968419035229ull, 5466345795542230649ull}},
+{{13342985445082254076ull, 10476566927951753910ull,
+ 18033900978951181940ull, 6832932244427788311ull}},
+{{7455359769498041787ull, 13095708659939692388ull,
+ 17930690205261589521ull, 8541165305534735389ull}},
+{{13882971892791051925ull, 1267288884821225886ull,
+ 13512524387502187403ull, 5338228315959209618ull}},
+{{8130342829134039098ull, 15419169161308696070ull,
+ 7667283447522958445ull, 6672785394949012023ull}},
+{{939556499562773065ull, 5438903396353706376ull, 4972418290976310153ull,
+ 8340981743686265029ull}},
+{{587222812226733166ull, 14928529668789536245ull,
+ 5413604441073887797ull, 5213113589803915643ull}},
+{{5345714533710804361ull, 4825604030704756594ull,
+ 2155319532914971843ull, 6516391987254894554ull}},
+{{15905515203993281259ull, 1420319019953557838ull,
+ 11917521452998490612ull, 8145489984068618192ull}},
+{{5329260984068412883ull, 10111071424325749457ull,
+ 7448450908124056632ull, 5090931240042886370ull}},
+{{11273262248512904008ull, 12638839280407186821ull,
+ 87191598300294982ull, 6363664050053607963ull}},
+{{256519755358966297ull, 6575177063654207719ull,
+ 13944047553157532440ull, 7954580062567009953ull}},
+{{7077853874740435792ull, 4109485664783879824ull,
+ 1797500693082375919ull, 4971612539104381221ull}},
+{{8847317343425544740ull, 525171062552461876ull, 6858561884780357803ull,
+ 6214515673880476526ull}},
+{{11059146679281930925ull, 14491521883472741057ull,
+ 17796574392830223061ull, 7768144592350595657ull}},
+{{18441181720619676588ull, 11363044186384157112ull,
+ 4205329967877807557ull, 4855090370219122286ull}},
+{{4604733077065044119ull, 368747177698032679ull,
+ 14480034496702035255ull, 6068862962773902857ull}},
+{{1144230327903917245ull, 14295992027404704561ull,
+ 4264985065595380356ull, 7586078703467378572ull}},
+{{12244359001008418038ull, 18158367053982716158ull,
+ 11888987702851888530ull, 4741299189667111607ull}},
+{{6082076714405746740ull, 13474586780623619390ull,
+ 10249548610137472759ull, 5926623987083889509ull}},
+{{16825967929861959232ull, 12231547457352136333ull,
+ 17423621781099228853ull, 7408279983854861886ull}},
+{{12822072965377418472ull, 9950560170058779160ull,
+ 6278077594759630129ull, 4630174989909288679ull}},
+{{16027591206721773090ull, 17049886231000861854ull,
+ 3235910975022149757ull, 5787718737386610849ull}},
+{{10811116971547440555ull, 7477299733468913606ull,
+ 8656574737205075101ull, 7234648421733263561ull}},
+{{4290524177579524885ull, 13958310685263529912ull,
+ 15432404439933731780ull, 9043310527166579451ull}},
+{{2681577610987203054ull, 17947316215144482003ull,
+ 7339409765744888410ull, 5652069079479112157ull}},
+{{17187030069016167529ull, 13210773232075826695ull,
+ 13785948225608498417ull, 7065086349348890196ull}},
+{{16872101567842821507ull, 2678408484812619657ull,
+ 17232435282010623022ull, 8831357936686112745ull}},
+{{3627534452260681586ull, 15509063358290050998ull,
+ 3852743023615557532ull, 5519598710428820466ull}},
+{{13757790102180627790ull, 939585124153012131ull,
+ 14039300816374222724ull, 6899498388036025582ull}},
+{{12585551609298396834ull, 1174481405191265164ull,
+ 8325753983613002597ull, 8624372985045031978ull}},
+{{17089341792666273829ull, 3039893887458234679ull,
+ 9815282258185514527ull, 5390233115653144986ull}},
+{{16749991222405454383ull, 17634925414604957061ull,
+ 3045730785877117350ull, 6737791394566431233ull}},
+{{7102430972724654266ull, 12820284731401420519ull,
+ 8418849500773784592ull, 8422239243208039041ull}},
+{{11356548385593990772ull, 8012677957125887824ull,
+ 16790995984052085130ull, 5263899527005024400ull}},
+{{14195685481992488465ull, 792475409552583972ull,
+ 2542000906355554797ull, 6579874408756280501ull}},
+{{17744606852490610582ull, 5602280280368117869ull,
+ 7789187151371831400ull, 8224843010945350626ull}},
+{{13396222292020325566ull, 3501425175230073668ull,
+ 9479927988034782529ull, 5140526881840844141ull}},
+{{16745277865025406957ull, 8988467487464979989ull,
+ 16461596003470866065ull, 6425658602301055176ull}},
+{{7096539275999594984ull, 15847270377758612891ull,
+ 2130250930629030965ull, 8032073252876318971ull}},
+{{2129494038286052913ull, 12210386995312827009ull,
+ 17472307896139002017ull, 5020045783047699356ull}},
+{{7273553566284954046ull, 1427925688858870049ull,
+ 3393640796464200906ull, 6275057228809624196ull}},
+{{13703627976283580461ull, 11008279147928363369ull,
+ 4242050995580251132ull, 7843821536012030245ull}},
+{{1647238457536155932ull, 16103546504310002914ull,
+ 4957124881451350909ull, 4902388460007518903ull}},
+{{11282420108774970723ull, 6294375075105339930ull,
+ 1584720083386800733ull, 6127985575009398629ull}},
+{{4879653099113937596ull, 12479654862309062817ull,
+ 6592586122660888820ull, 7659981968761748286ull}},
+{{14578998233014680758ull, 17023156325797940068ull,
+ 17955424381945219224ull, 4787488730476092678ull}},
+{{18223747791268350947ull, 2832201333537873469ull,
+ 13220908440576748223ull, 5984360913095115848ull}},
+{{8944626683803274971ull, 17375309722204505549ull,
+ 16526135550720935278ull, 7480451141368894810ull}},
+{{7896234686590740809ull, 6247882557950428064ull,
+ 14940520737627972453ull, 4675281963355559256ull}},
+{{9870293358238426011ull, 12421539215865422984ull,
+ 228906848325413950ull, 5844102454194449071ull}},
+{{12337866697798032514ull, 6303551982977002922ull,
+ 14121191615688931150ull, 7305128067743061338ull}},
+{{6198961335392764835ull, 17102812015576029461ull,
+ 8428117482756388129ull, 9131410084678826673ull}},
+{{6180193843834171974ull, 3771728482093936557ull,
+ 16796788472791212341ull, 5707131302924266670ull}},
+{{12336928323220102871ull, 9326346621044808600ull,
+ 11772613554134239618ull, 7133914128655333338ull}},
+{{15421160404025128589ull, 2434561239451234942ull,
+ 5492394905813023715ull, 8917392660819166673ull}},
+{{5026539234088317464ull, 17662501839152879503ull,
+ 14961961862201609581ull, 5573370413011979170ull}},
+{{1671488024183008926ull, 8243069243658935667ull,
+ 9479080290897236169ull, 6966713016264973963ull}},
+{{15924418085510924870ull, 14915522573001057487ull,
+ 7237164345194157307ull, 8708391270331217454ull}},
+{{16870290331085409900ull, 7016358598911966977ull,
+ 18358285771028512029ull, 5442744543957010908ull}},
+{{7252804858574598662ull, 13382134267067346626ull,
+ 4501113140076088420ull, 6803430679946263636ull}},
+{{18289378110073024136ull, 16727667833834183282ull,
+ 5626391425095110525ull, 8504288349932829545ull}},
+{{16042547337223027989ull, 12760635405360058503ull,
+ 15045709686752913838ull, 5315180218708018465ull}},
+{{15441498153101397082ull, 6727422219845297321ull,
+ 4972079053158978586ull, 6643975273385023082ull}},
+{{5466814636094582641ull, 17632649811661397460ull,
+ 15438470853303499040ull, 8304969091731278852ull}},
+{{12640131184413889959ull, 11020406132288373412ull,
+ 425672246459911092ull, 5190605682332049283ull}},
+{{15800163980517362448ull, 13775507665360466765ull,
+ 14367148363357052577ull, 6488257102915061603ull}},
+{{5915146920364539348ull, 3384326526418419745ull,
+ 13347249435768927818ull, 8110321378643827004ull}},
+{{15226181871296306853ull, 6726890097438900244ull,
+ 17565402934210355694ull, 5068950861652391877ull}},
+{{585983265410831950ull, 17631984658653401114ull,
+ 8121695612480780905ull, 6336188577065489847ull}},
+{{9955851118618315745ull, 8204922768034587680ull,
+ 5540433497173588228ull, 7920235721331862309ull}},
+{{6222406949136447341ull, 14351448766876393108ull,
+ 5768613944947186594ull, 4950147325832413943ull}},
+{{7778008686420559176ull, 8715938921740715577ull,
+ 2599081412756595339ull, 6187684157290517429ull}},
+{{14334196876453086874ull, 6283237633748506567ull,
+ 7860537784373132078ull, 7734605196613146786ull}},
+{{15876402075424261152ull, 17762081576374980316ull,
+ 9524522133660595452ull, 4834128247883216741ull}},
+{{1398758520570774824ull, 3755857896759173780ull,
+ 16517338685503132220ull, 6042660309854020926ull}},
+{{1748448150713468530ull, 4694822370948967225ull,
+ 11423301320024139467ull, 7553325387317526158ull}},
+{{12621995140264387592ull, 628420972629410563ull,
+ 2527877306587699263ull, 4720828367073453849ull}},
+{{11165807906903096585ull, 14620584271068926916ull,
+ 7771532651662011982ull, 5901035458841817311ull}},
+{{13957259883628870732ull, 9052358301981382837ull,
+ 5102729796150127074ull, 7376294323552271639ull}},
+{{3611516799253924702ull, 2092075840621952739ull,
+ 1766726226760270939ull, 9220367904440339549ull}},
+{{18398099064029560603ull, 17448448464884578125ull,
+ 3410046900938863288ull, 5762729940275212218ull}},
+{{9162565774754787042ull, 3363816507396171041ull,
+ 13485930663028354919ull, 7203412425344015272ull}},
+{{16064893236870871706ull, 18039828689527377513ull,
+ 16857413328785443648ull, 9004265531680019090ull}},
+{{3123029245403212961ull, 11274892930954610946ull,
+ 15147569348918290184ull, 5627665957300011931ull}},
+{{13127158593608792009ull, 14093616163693263682ull,
+ 14322775667720474826ull, 7034582446625014914ull}},
+{{7185576205156214203ull, 8393648167761803795ull,
+ 8680097547795817725ull, 8793228058281268643ull}},
+{{2185142119008939925ull, 7551873114064821324ull,
+ 3119217958158692126ull, 5495767536425792902ull}},
+{{2731427648761174906ull, 216469355726250847ull,
+ 13122394484553140966ull, 6869709420532241127ull}},
+{{17249342616233632344ull, 9493958731512589366ull,
+ 11791307087264038303ull, 8587136775665301409ull}},
+{{6169153116718632311ull, 12851253234836450210ull,
+ 452037901898942083ull, 5366960484790813381ull}},
+{{16934813432753066197ull, 11452380525118174858ull,
+ 5176733395801065508ull, 6708700605988516726ull}},
+{{11945144754086556938ull, 14315475656397718573ull,
+ 15694288781606107693ull, 8385875757485645907ull}},
+{{9771558480517792039ull, 11253015294462268060ull,
+ 7503087479290123356ull, 5241172348428528692ull}},
+{{12214448100647240048ull, 14066269118077835075ull,
+ 9378859349112654195ull, 6551465435535660865ull}},
+{{10656374107381662156ull, 12971150379169905940ull,
+ 16335260204818205648ull, 8189331794419576081ull}},
+{{15883605853968314656ull, 8106968986981191212ull,
+ 3292008600370296674ull, 5118332371512235051ull}},
+{{1407763243750841703ull, 910339196871713208ull,
+ 17950068805745034555ull, 6397915464390293813ull}},
+{{1759704054688552129ull, 14972982051371805222ull,
+ 8602527951899129481ull, 7997394330487867267ull}},
+{{14934873089462508793ull, 2440584754466296407ull,
+ 3070736960723261974ull, 4998371456554917042ull}},
+{{14056905343400748087ull, 12274102979937646317ull,
+ 13061793237758853275ull, 6247964320693646302ull}},
+{{3736073623968771397ull, 10730942706494669993ull,
+ 7103869510343790786ull, 7809955400867057878ull}},
+{{13864261061048951883ull, 11318525209986556649ull,
+ 18274976499247032953ull, 4881222125541911173ull}},
+{{3495268271029026142ull, 313098457201032100ull, 9008662568776627480ull,
+ 6101527656927388967ull}},
+{{4369085338786282677ull, 391373071501290125ull, 6649142192543396446ull,
+ 7626909571159236209ull}},
+{{5036521345955120625ull, 14079666224970470040ull,
+ 15684928916408092538ull, 4766818481974522630ull}},
+{{6295651682443900782ull, 8376210744358311742ull,
+ 10382789108655339865ull, 5958523102468153288ull}},
+{{17092936639909651785ull, 15081949448875277581ull,
+ 12978486385819174831ull, 7448153878085191610ull}},
+{{12988928409157226318ull, 16343747433188130344ull,
+ 12723240009564372173ull, 4655096173803244756ull}},
+{{16236160511446532897ull, 6594626236202999218ull,
+ 15904050011955465217ull, 5818870217254055945ull}},
+{{11071828602453390313ull, 12854968813681136927ull,
+ 6045004459662167809ull, 7273587771567569932ull}},
+{{9228099734639349987ull, 2233652961819257447ull,
+ 7556255574577709762ull, 9091984714459462415ull}},
+{{12685091361790675598ull, 6007719119564423808ull,
+ 11640188761752150457ull, 5682490446537164009ull}},
+{{15856364202238344498ull, 12121334917882917664ull,
+ 715177896908024359ull, 7103113058171455012ull}},
+{{1373711179088379006ull, 10539982628926259177ull,
+ 893972371135030449ull, 8878891322714318765ull}},
+{{12387784532998706639ull, 18116704189147381745ull,
+ 2864575741173087982ull, 5549307076696449228ull}},
+{{1649672610966219587ull, 13422508199579451374ull,
+ 3580719676466359978ull, 6936633845870561535ull}},
+{{11285462800562550291ull, 7554763212619538409ull,
+ 18310957650865113685ull, 8670792307338201918ull}},
+{{135885222710512076ull, 7027570017100905458ull, 6832662513363308149ull,
+ 5419245192086376199ull}},
+{{9393228565242915903ull, 13396148539803519726ull,
+ 3929142123276747282ull, 6774056490107970249ull}},
+{{2518163669698869071ull, 7521813637899623850ull,
+ 9523113672523322007ull, 8467570612634962811ull}},
+{{6185538311989181073ull, 11618662551328346762ull,
+ 3646103036113382302ull, 5292231632896851757ull}},
+{{16955294926841252150ull, 5299956152305657644ull,
+ 9169314813569115782ull, 6615289541121064696ull}},
+{{2747374584842013571ull, 15848317227236847864ull,
+ 11461643516961394727ull, 8269111926401330870ull}},
+{{1717109115526258482ull, 16822727294664111771ull,
+ 2551841179673483800ull, 5168194954000831794ull}},
+{{15981444449689986814ull, 2581665044620588097ull,
+ 12413173511446630559ull, 6460243692501039742ull}},
+{{6141747506830319806ull, 17062139361057898834ull,
+ 6293094852453512390ull, 8075304615626299678ull}},
+{{8450278210196337783ull, 6052151082233798867ull,
+ 17768242338065608956ull, 5047065384766437298ull}},
+{{5951161744318034324ull, 7565188852792248584ull,
+ 12986930885727235387ull, 6308831730958046623ull}},
+{{7438952180397542905ull, 4844800047562922826ull,
+ 11621977588731656330ull, 7886039663697558279ull}},
+{{9261031131175852220ull, 7639686048154214670ull,
+ 14181265020598367062ull, 4928774789810973924ull}},
+{{2352916877115039467ull, 326235523337992530ull,
+ 17726581275747958828ull, 6160968487263717405ull}},
+{{12164518133248575142ull, 407794404172490662ull,
+ 8323168539402784823ull, 7701210609079646757ull}},
+{{2991137814852971560ull, 7172400530248888520ull,
+ 7507823346340434466ull, 4813256630674779223ull}},
+{{3738922268566214449ull, 18188872699665886458ull,
+ 4773093164498155178ull, 6016570788343474029ull}},
+{{13897024872562543870ull, 13512718837727582264ull,
+ 10578052474050081877ull, 7520713485429342536ull}},
+{{8685640545351589919ull, 10751292282793432867ull,
+ 6611282796281301173ull, 4700445928393339085ull}},
+{{6245364663262099494ull, 18050801371919178988ull,
+ 12875789513779014370ull, 5875557410491673856ull}},
+{{7806705829077624368ull, 13340129678044197927ull,
+ 16094736892223767963ull, 7344446763114592320ull}},
+{{5146696267919642556ull, 12063476079127859505ull,
+ 1671677041570158338ull, 9180558453893240401ull}},
+{{14745900213518246357ull, 12151358567882300094ull,
+ 12574013197049818721ull, 5737849033683275250ull}},
+{{9209003230043032139ull, 1354140154570711406ull,
+ 6494144459457497594ull, 7172311292104094063ull}},
+{{2287882000699014365ull, 10916047230068165066ull,
+ 3505994555894484088ull, 8965389115130117579ull}},
+{{6041612268864271882ull, 6822529518792603166ull,
+ 18332147661929910219ull, 5603368196956323486ull}},
+{{16775387372935115661ull, 3916475880063366053ull,
+ 13691812540557611966ull, 7004210246195404358ull}},
+{{7134176160886730864ull, 14118966886933983375ull,
+ 7891393638842239149ull, 8755262807744255448ull}},
+{{11376389128195288646ull, 11130197313547433561ull,
+ 4932121024276399468ull, 5472039254840159655ull}},
+{{385428354961947096ull, 13912746641934291952ull,
+ 1553465261918111431ull, 6840049068550199569ull}},
+{{481785443702433869ull, 12779247283990477036ull,
+ 6553517595825027193ull, 8550061335687749461ull}},
+{{9524487939168796977ull, 1069500524852966291ull,
+ 6401791506604335948ull, 5343788334804843413ull}},
+{{7293923905533608317ull, 1336875656066207864ull,
+ 12613925401682807839ull, 6679735418506054266ull}},
+{{9117404881917010396ull, 15506152625364923542ull,
+ 6544034715248733990ull, 8349669273132567833ull}},
+{{1086692032770743593ull, 5079659372425689310ull,
+ 15619236743098928504ull, 5218543295707854895ull}},
+{{10581737077818205300ull, 6349574215532111637ull,
+ 14912359910446272726ull, 6523179119634818619ull}},
+{{17838857365700144528ull, 17160339806269915354ull,
+ 14028763869630453003ull, 8153973899543523274ull}},
+{{15760971871989978234ull, 8419369369705003144ull,
+ 13379663436946421031ull, 5096233687214702046ull}},
+{{1254470766277921177ull, 5912525693703866027ull,
+ 7501207259328250481ull, 6370292109018377558ull}},
+{{15403146513129565183ull, 12002343135557220437ull,
+ 153137037305537293ull, 7962865136272971948ull}},
+{{11932809579919672192ull, 9807307468936956725ull,
+ 9319082685170736616ull, 4976790710170607467ull}},
+{{1080953919617426527ull, 12259134336171195907ull,
+ 7037167338036032866ull, 6220988387713259334ull}},
+{{15186250454803946871ull, 6100545883359219075ull,
+ 18019831209399816891ull, 7776235484641574167ull}},
+{{7185563525038772843ull, 1506998167885817970ull,
+ 18179923533515967413ull, 4860147177900983854ull}},
+{{18205326443153241861ull, 6495433728284660366ull,
+ 13501532380040183458ull, 6075183972376229818ull}},
+{{13533286017086776518ull, 17342664197210601266ull,
+ 7653543438195453514ull, 7593979965470287273ull}},
+{{13069989779106623228ull, 15450851141684013695ull,
+ 16312679694940628206ull, 4746237478418929545ull}},
+{{11725801205455891131ull, 10090191890250241311ull,
+ 6555791563393621546ull, 5932796848023661932ull}},
+{{10045565488392476010ull, 3389367825958025831ull,
+ 8194739454242026933ull, 7415996060029577415ull}},
+{{13196007457886379362ull, 4424197900437460096ull,
+ 12039241186542348689ull, 4634997537518485884ull}},
+{{16495009322357974203ull, 10141933393974213024ull,
+ 15049051483177935861ull, 5793746921898107355ull}},
+{{2172017579237916137ull, 17289102760895154185ull,
+ 14199628335545031922ull, 7242183652372634194ull}},
+{{7326707992474783075ull, 12388006414264166923ull,
+ 8526163382576514095ull, 9052729565465792743ull}},
+{{2273349486083045470ull, 14660033036556186183ull,
+ 12246381141751403165ull, 5657955978416120464ull}},
+{{16676744912885970550ull, 4489983240413069016ull,
+ 15307976427189253957ull, 7072444973020150580ull}},
+{{2399187067397911571ull, 10224165068943724175ull,
+ 688226460277015830ull, 8840556216275188226ull}},
+{{8417020944764776588ull, 1778417149662439705ull,
+ 5041827556100522798ull, 5525347635171992641ull}},
+{{15132962199383358639ull, 11446393473932825439ull,
+ 10913970463553041401ull, 6906684543964990801ull}},
+{{14304516730801810395ull, 472933787133868087ull,
+ 18254149097868689656ull, 8633355679956238501ull}},
+{{15857851984392213353ull, 295583616958667554ull,
+ 13714686195381624987ull, 5395847299972649063ull}},
+{{10598942943635490883ull, 14204537576480498155ull,
+ 12531671725799643329ull, 6744809124965811329ull}},
+{{8636992661116975699ull, 3920613915318458982ull,
+ 1829531601967390450ull, 8431011406207264162ull}},
+{{786434394770721908ull, 7062069715501424768ull, 5755143269657006935ull,
+ 5269382128879540101ull}},
+{{983042993463402385ull, 4215901125949393056ull,
+ 11805615105498646573ull, 6586727661099425126ull}},
+{{1228803741829252982ull, 9881562425864129224ull,
+ 5533646845018532408ull, 8233409576374281408ull}},
+{{768002338643283114ull, 6175976516165080765ull, 3458529278136582755ull,
+ 5145880985233925880ull}},
+{{5571688941731491796ull, 3108284626778963052ull,
+ 4323161597670728444ull, 6432351231542407350ull}},
+{{6964611177164364745ull, 3885355783473703815ull,
+ 14627324033943186363ull, 8040439039428009187ull}},
+{{11270411013368809822ull, 122504355457370932ull,
+ 6836234512000797525ull, 5025274399642505742ull}},
+{{14088013766711012277ull, 4764816462749101569ull,
+ 17768665176855772714ull, 6281592999553132177ull}},
+{{3774959153106601634ull, 15179392615291152770ull,
+ 8375773415787552180ull, 7851991249441415222ull}},
+{{6971035489119013926ull, 263748347702194673ull, 623172366439832209ull,
+ 4907494530900884514ull}},
+{{13325480379826155311ull, 4941371453055131245ull,
+ 10002337494904566069ull, 6134368163626105642ull}},
+{{2821792419500530426ull, 10788400334746301961ull,
+ 3279549831775931778ull, 7667960204532632053ull}},
+{{13292835308256301277ull, 11354436227643826629ull,
+ 4355561654073651313ull, 4792475127832895033ull}},
+{{2780986080038212884ull, 357987229272619575ull,
+ 10056138086019452046ull, 5990593909791118791ull}},
+{{17311290655329929816ull, 9670856073445550276ull,
+ 7958486589096927153ull, 7488242387238898489ull}},
+{{1596184622726430327ull, 17573500091971938683ull,
+ 16503269164254049230ull, 4680151492024311555ull}},
+{{15830288833690201621ull, 12743503078110147545ull,
+ 16017400436890173634ull, 5850189365030389444ull}},
+{{5952802986830588314ull, 6706006810782908624ull,
+ 1575006472403165427ull, 7312736706287986806ull}},
+{{7441003733538235393ull, 3770822495051247876ull,
+ 11192130127358732592ull, 9140920882859983507ull}},
+{{13873999370316172929ull, 2356764059407029922ull,
+ 4689238320385513918ull, 5713075551787489692ull}},
+{{8119127176040440353ull, 12169327111113563211ull,
+ 5861547900481892397ull, 7141344439734362115ull}},
+{{5537222951623162537ull, 1376600833609790302ull,
+ 2715248857174977593ull, 8926680549667952644ull}},
+{{17295822400046640298ull, 12389590567074588698ull,
+ 10920402572589136803ull, 5579175343542470402ull}},
+{{12396405963203524564ull, 10875302190415847969ull,
+ 4427131178881645196ull, 6973969179428088003ull}},
+{{1660449398722241993ull, 13594127738019809962ull,
+ 922227955174668591ull, 8717461474285110004ull}},
+{{5649466892628789150ull, 15413858863903463082ull,
+ 9799764508838943677ull, 5448413421428193752ull}},
+{{16285205652640762245ull, 5432265524597165140ull,
+ 12249705636048679597ull, 6810516776785242190ull}},
+{{1909762992091401190ull, 11402017924173844330ull,
+ 6088760008206073688ull, 8513145970981552738ull}},
+{{5805287888484513648ull, 7126261202608652706ull,
+ 8417161023556183959ull, 5320716231863470461ull}},
+{{16479981897460417868ull, 4296140484833427978ull,
+ 15133137297872617853ull, 6650895289829338076ull}},
+{{11376605334970746527ull, 9981861624469172877ull,
+ 469677548631220700ull, 8313619112286672596ull}},
+{{9416221343570410531ull, 15462035552148008856ull,
+ 9516920504749288745ull, 5196011945179170372ull}},
+{{11770276679463013164ull, 5492486384902847358ull,
+ 11896150630936610932ull, 6495014931473962965ull}},
+{{5489473812473990647ull, 6865607981128559198ull,
+ 1035130233388599953ull, 8118768664342453707ull}},
+{{17265979188078407867ull, 15820220034273819258ull,
+ 16787857460363732634ull, 5074230415214033566ull}},
+{{12359101948243234025ull, 10551903005987498265ull,
+ 11761449788599889985ull, 6342788019017541958ull}},
+{{1613819380021878819ull, 17801564775911760736ull,
+ 5478440198895086673ull, 7928485023771927448ull}},
+{{1008637112513674262ull, 4208448957303768604ull,
+ 3424025124309429171ull, 4955303139857454655ull}},
+{{1260796390642092828ull, 648875178202322851ull,
+ 18115089460668950176ull, 6194128924821818318ull}},
+{{15411053543584779747ull, 811093972752903563ull,
+ 13420489788981411912ull, 7742661156027272898ull}},
+{{7326065455526793390ull, 506933732970564727ull,
+ 12999492136540770349ull, 4839163222517045561ull}},
+{{4545895800981103833ull, 5245353184640593813ull,
+ 2414307115393799224ull, 6048954028146306952ull}},
+{{10294055769653767695ull, 6556691480800742266ull,
+ 3017883894242249030ull, 7561192535182883690ull}},
+{{11045470874460992714ull, 17932990230782627628ull,
+ 6497863452328793547ull, 4725745334489302306ull}},
+{{13806838593076240892ull, 17804551770050896631ull,
+ 17345701352265767742ull, 5907181668111627882ull}},
+{{12646862222917913211ull, 13032317675708844981ull,
+ 12458754653477433870ull, 7383977085139534853ull}},
+{{10210131898537389709ull, 3533512528890640209ull,
+ 10092564667637090121ull, 4614985678212209283ull}},
+{{17374350891599125040ull, 9028576679540688165ull,
+ 8004019816118974747ull, 5768732097765261604ull}},
+{{7882880559216742588ull, 6674034830998472303ull,
+ 10005024770148718434ull, 7210915122206577005ull}},
+{{5241914680593540331ull, 17565915575602866187ull,
+ 17117966981113285946ull, 9013643902758221256ull}},
+{{970353666157268755ull, 15590383253179179271ull,
+ 10698729363195803716ull, 5633527439223888285ull}},
+{{15048000137978749656ull, 1041234992764422472ull,
+ 17985097722422142550ull, 7041909299029860356ull}},
+{{363256098763885453ull, 10524915777810303899ull,
+ 4034628079318126571ull, 8802386623787325446ull}},
+{{16367936126223286073ull, 4272229351917745984ull,
+ 16356700604855992819ull, 5501491639867078403ull}},
+{{2013176084069555975ull, 728600671469794577ull,
+ 15834189737642603120ull, 6876864549833848004ull}},
+{{7128156123514332872ull, 910750839337243221ull, 1345993098343702284ull,
+ 8596080687292310006ull}},
+{{6760940586410151997ull, 9792591311440552821ull,
+ 14676303741746977639ull, 5372550429557693753ull}},
+{{13062861751440077900ull, 7629053120873303122ull,
+ 4510321621901558337ull, 6715688036947117192ull}},
+{{7105205152445321567ull, 14148002419519016807ull,
+ 5637902027376947921ull, 8394610046183896490ull}},
+{{11358282247919407836ull, 1924972484558303648ull,
+ 8135374785537980355ull, 5246631278864935306ull}},
+{{14197852809899259795ull, 16241273660980043272ull,
+ 945846445067699635ull, 6558289098581169133ull}},
+{{17747316012374074743ull, 15689906057797666186ull,
+ 5793994074762012448ull, 8197861373226461416ull}},
+{{15703758526161184619ull, 9806191286123541366ull,
+ 3621246296726257780ull, 5123663358266538385ull}},
+{{10406326120846704965ull, 12257739107654426708ull,
+ 9138243889335210129ull, 6404579197833172981ull}},
+{{13007907651058381206ull, 1487115829285869673ull,
+ 16034490880096400566ull, 8005723997291466226ull}},
+{{1212413254270406398ull, 14764505448585832258ull,
+ 14633242818487638257ull, 5003577498307166391ull}},
+{{10738888604692783806ull, 4620573755450126610ull,
+ 13679867504682159918ull, 6254471872883957989ull}},
+{{4200238719011203949ull, 14999089231167434071ull,
+ 3264776325570536185ull, 7818089841104947487ull}},
+{{9542678227023084324ull, 2456901741838564438ull,
+ 8958014231122666972ull, 4886306150690592179ull}},
+{{2704975746924079597ull, 3071127177298205548ull,
+ 6585831770475945811ull, 6107882688363240224ull}},
+{{3381219683655099496ull, 17673967026904920647ull,
+ 8232289713094932263ull, 7634853360454050280ull}},
+{{9030791329925519041ull, 17963758419456657260ull,
+ 5145181070684332664ull, 4771783350283781425ull}},
+{{11288489162406898802ull, 4007953950611269959ull,
+ 11043162356782803735ull, 5964729187854726781ull}},
+{{9498925434581235598ull, 398256419836699545ull,
+ 18415638964405892573ull, 7455911484818408476ull}},
+{{17466043442681742009ull, 2554753271611631167ull,
+ 2286402315898907050ull, 4659944678011505298ull}},
+{{17220868284924789607ull, 12416813626369314767ull,
+ 12081374931728409620ull, 5824930847514381622ull}},
+{{16914399337728599105ull, 15521017032961643459ull,
+ 5878346627805736217ull, 7281163559392977028ull}},
+{{16531313153733360977ull, 5566213235919890612ull,
+ 7347933284757170272ull, 9101454449241221285ull}},
+{{1108698684228574803ull, 3478883272449931633ull,
+ 6898301312186925372ull, 5688409030775763303ull}},
+{{5997559373713106407ull, 4348604090562414541ull,
+ 4011190621806268811ull, 7110511288469704129ull}},
+{{12108635235568770913ull, 824069094775630272ull,
+ 9625674295685223918ull, 8888139110587130161ull}},
+{{7567897022230481821ull, 14350101239516932632ull,
+ 17545261480871734708ull, 5555086944116956350ull}},
+{{9459871277788102276ull, 17937626549396165790ull,
+ 12708204814234892577ull, 6943858680146195438ull}},
+{{2601467060380352037ull, 8586975131463043526ull,
+ 6661883980938839914ull, 8679823350182744298ull}},
+{{15460974968019883735ull, 9978545475591790107ull,
+ 8775363506514162850ull, 5424889593864215186ull}},
+{{14714532691597466765ull, 3249809807634961826ull,
+ 1745832346287927755ull, 6781111992330268983ull}},
+{{9169793827642057648ull, 17897320314825865995ull,
+ 16017348488142073405ull, 8476389990412836228ull}},
+{{3425278133062592078ull, 13491668205979860199ull,
+ 787470768234020070ull, 5297743744008022643ull}},
+{{18116655721610403809ull, 7641213220620049440ull,
+ 14819396515574688800ull, 6622179680010028303ull}},
+{{4199075578303453146ull, 9551516525775061801ull,
+ 13912559626040973096ull, 8277724600012535379ull}},
+{{14153637282508127976ull, 5969697828609413625ull,
+ 6389506757061914233ull, 5173577875007834612ull}},
+{{3856988547852996258ull, 12073808304189154936ull,
+ 7986883446327392791ull, 6466972343759793265ull}},
+{{4821235684816245322ull, 10480574361809055766ull,
+ 14595290326336628893ull, 8083715429699741581ull}},
+{{16848330358292317039ull, 8856201985344353805ull,
+ 11427899463174087010ull, 5052322143562338488ull}},
+{{7225354892583232586ull, 1846880444825666449ull,
+ 14284874328967608763ull, 6315402679452923110ull}},
+{{13643379634156428637ull, 16143658611314246773ull,
+ 8632720874354735145ull, 7894253349316153888ull}},
+{{10832955280561461850ull, 3172257604430322377ull,
+ 5395450546471709466ull, 4933908343322596180ull}},
+{{18152880119129215217ull, 13188694042392678779ull,
+ 6744313183089636832ull, 6167385429153245225ull}},
+{{18079414130484131117ull, 16485867552990848474ull,
+ 13042077497289433944ull, 7709231786441556531ull}},
+{{15911319849979969852ull, 10303667220619280296ull,
+ 5845455426592202263ull, 4818269866525972832ull}},
+{{1442405738765410699ull, 8267898007346712467ull,
+ 7306819283240252829ull, 6022837333157466040ull}},
+{{15638065228738927086ull, 14946558527610778487ull,
+ 9133524104050316036ull, 7528546666446832550ull}},
+{{16691319795602911285ull, 118227042901960746ull,
+ 1096766546604059619ull, 4705341666529270344ull}},
+{{11640777707648863298ull, 13982841858909614645ull,
+ 1370958183255074523ull, 5881677083161587930ull}},
+{{715914079278915410ull, 12866866305209630403ull,
+ 10937069765923618962ull, 7352096353951984912ull}},
+{{14729950654380807974ull, 6860210844657262195ull,
+ 13671337207404523703ull, 9190120442439981140ull}},
+{{6900376149774311032ull, 11205160805551870728ull,
+ 17767957791482603122ull, 5743825276524988212ull}},
+{{8625470187217888790ull, 4783078970085062602ull,
+ 3763203165643702287ull, 7179781595656235266ull}},
+{{1558465697167585179ull, 1367162694178940349ull,
+ 13927375993909403667ull, 8974726994570294082ull}},
+{{3279884069943434689ull, 16995377748357695382ull,
+ 13316296014620765195ull, 5609204371606433801ull}},
+{{13323227124284069170ull, 16632536167019731323ull,
+ 2810311962993792782ull, 7011505464508042252ull}},
+{{12042347886927698558ull, 11567298171919888346ull,
+ 3512889953742240978ull, 8764381830635052815ull}},
+{{12138153447757199503ull, 11841247375877318120ull,
+ 9113085248729982467ull, 5477738644146908009ull}},
+{{15172691809696499378ull, 10189873201419259746ull,
+ 16003042579339865988ull, 6847173305183635011ull}},
+{{9742492725265848415ull, 12737341501774074683ull,
+ 15392117205747444581ull, 8558966631479543764ull}},
+{{3783214944077461308ull, 10266681447822490629ull,
+ 396701216737377055ull, 5349354144674714853ull}},
+{{9340704698524214538ull, 8221665791350725382ull,
+ 5107562539349109223ull, 6686692680843393566ull}},
+{{2452508836300492365ull, 5665396220761018824ull,
+ 15607825211041162337ull, 8358365851054241957ull}},
+{{1532818022687807728ull, 15070087684044106525ull,
+ 12060733766114420412ull, 5223978656908901223ull}},
+{{6527708546787147564ull, 390865531345581540ull,
+ 10464231189215637612ull, 6529973321136126529ull}},
+{{8159635683483934455ull, 488581914181976925ull,
+ 17691975004946934919ull, 8162466651420158161ull}},
+{{7405615311391152987ull, 7222892724004817434ull,
+ 4139955350450752468ull, 5101541657137598851ull}},
+{{33647102384165425ull, 9028615905006021793ull, 563258169636052681ull,
+ 6376927071421998564ull}},
+{{4653744896407594685ull, 15897455899684915145ull,
+ 704072712045065851ull, 7971158839277498205ull}},
+{{14437805606323216438ull, 7630066928089378013ull,
+ 2745888454241860109ull, 4981974274548436378ull}},
+{{4212198952621856836ull, 14149269678539110421ull,
+ 12655732604657100944ull, 6227467843185545472ull}},
+{{9876934709204708949ull, 17686587098173888026ull,
+ 15819665755821376180ull, 7784334803981931840ull}},
+{{10784770211680330997ull, 1830744899503904208ull,
+ 9887291097388360113ull, 4865209252488707400ull}},
+{{13480962764600413746ull, 6900117142807268164ull,
+ 12359113871735450141ull, 6081511565610884250ull}},
+{{16851203455750517183ull, 13236832446936473109ull,
+ 6225520302814536868ull, 7601889457013605313ull}},
+{{12837845169057767191ull, 17496392316190071501ull,
+ 15420165235327555302ull, 4751180910633503320ull}},
+{{2212248406040045277ull, 12647118358382813569ull,
+ 828462470449892512ull, 5938976138291879151ull}},
+{{7376996525977444500ull, 15808897947978516961ull,
+ 14870636143344529352ull, 7423720172864848938ull}},
+{{16139837874804372573ull, 9880561217486573100ull,
+ 13905833608017718749ull, 4639825108040530586ull}},
+{{1728053269795914100ull, 16962387540285604280ull,
+ 8158919973167372628ull, 5799781385050663233ull}},
+{{2160066587244892625ull, 2756240351647453734ull,
+ 14810335984886603690ull, 7249726731313329041ull}},
+{{11923455270910891589ull, 12668672476414092975ull,
+ 4677861925826090900ull, 9062158414141661302ull}},
+{{14369688571960389099ull, 17141292334613583917ull,
+ 16758721758923470524ull, 5663849008838538313ull}},
+{{4127052659668322662ull, 2979871344557428281ull,
+ 7113344143372174444ull, 7079811261048172892ull}},
+{{9770501843012791231ull, 3724839180696785351ull,
+ 8891680179215218055ull, 8849764076310216115ull}},
+{{13024092679524076376ull, 9245553515576572700ull,
+ 3251457102795817332ull, 5531102547693885072ull}},
+{{16280115849405095470ull, 11556941894470715875ull,
+ 4064321378494771665ull, 6913878184617356340ull}},
+{{15738458793328981433ull, 611119312806231132ull,
+ 5080401723118464582ull, 8642347730771695425ull}},
+{{613164708975837588ull, 14217007625786058170ull,
+ 14704466123017510123ull, 5401467331732309640ull}},
+{{9989827923074572793ull, 13159573513805184808ull,
+ 18380582653771887654ull, 6751834164665387050ull}},
+{{12487284903843215991ull, 7226094855401705202ull,
+ 13752356280360083760ull, 8439792705831733813ull}},
+{{12416239083329397898ull, 4516309284626065751ull,
+ 10901065684438746302ull, 5274870441144833633ull}},
+{{10908612835734359469ull, 14868758642637357997ull,
+ 18238018123975820781ull, 6593588051431042041ull}},
+{{18247452063095337240ull, 4750890248014533784ull,
+ 8962464599687612265ull, 8241985064288802552ull}},
+{{11404657539434585775ull, 14498521451077553375ull,
+ 5601540374804757665ull, 5151240665180501595ull}},
+{{9644135905865844315ull, 4288093758564778007ull,
+ 2390239450078559178ull, 6439050831475626994ull}},
+{{7443483863904917489ull, 14583489235060748317ull,
+ 12211171349452974780ull, 8048813539344533742ull}},
+{{6958020424154267383ull, 18338052808767743506ull,
+ 3020296074980721333ull, 5030508462090333589ull}},
+{{17920897567047610037ull, 9087507955677515670ull,
+ 8387056112153289571ull, 6288135577612916986ull}},
+{{13177749921954736738ull, 6747698926169506684ull,
+ 1260448103336836156ull, 7860169472016146233ull}},
+{{17459465738076486269ull, 13440683865710717485ull,
+ 12316995110653992357ull, 4912605920010091395ull}},
+{{7989274117313444124ull, 2965796776856233145ull,
+ 10784557869890102543ull, 6140757400012614244ull}},
+{{14598278665069193059ull, 17542304026352455143ull,
+ 13480697337362628178ull, 7675946750015767805ull}},
+{{16041453193309327518ull, 15575626034897672368ull,
+ 10731278845065336563ull, 4797466718759854878ull}},
+{{1605072417927107782ull, 14857846525194702557ull,
+ 4190726519476894896ull, 5996833398449818598ull}},
+{{6618026540836272631ull, 125564082783826580ull,
+ 14461780186200894429ull, 7496041748062273247ull}},
+{{13359638624877446203ull, 2384320560953585564ull,
+ 15956141644016640874ull, 4685026092538920779ull}},
+{{16699548281096807753ull, 12203772738046757763ull,
+ 15333491036593413188ull, 5856282615673650974ull}},
+{{16262749332943621787ull, 15254715922558447204ull,
+ 9943491758886990677ull, 7320353269592063718ull}},
+{{1881692592469975618ull, 5233336847915895294ull,
+ 3205992661753962539ull, 9150441586990079648ull}},
+{{15011115925575898473ull, 964992520733740606ull,
+ 2003745413596226587ull, 5719025991868799780ull}},
+{{9540522870115097284ull, 15041298706199339470ull,
+ 2504681766995283233ull, 7148782489835999725ull}},
+{{2702281550789095796ull, 4966565327467010626ull,
+ 7742538227171491946ull, 8935978112294999656ull}},
+{{6300611987670572777ull, 7715789348094269545ull,
+ 4839086391982182466ull, 5584986320184374785ull}},
+{{12487451003015603875ull, 421364648263061123ull,
+ 10660544008405115987ull, 6981232900230468481ull}},
+{{10997627735342116940ull, 14361763865610990116ull,
+ 17937366028933782887ull, 8726541125288085601ull}},
+{{16096889371443598895ull, 15893631443647950678ull,
+ 4293324740442532448ull, 5454088203305053501ull}},
+{{10897739677449722811ull, 1420295230850386732ull,
+ 9978341943980553465ull, 6817610254131316876ull}},
+{{13622174596812153514ull, 6387055056990371319ull,
+ 12472927429975691831ull, 8522012817664146095ull}},
+{{15431388150648677802ull, 10909438438260063930ull,
+ 14713108671375889250ull, 5326258011040091309ull}},
+{{10065863151456071445ull, 4413426010970304105ull,
+ 4556327783937697851ull, 6657822513800114137ull}},
+{{17194014957747477210ull, 905096495285492227ull,
+ 10307095748349510218ull, 8322278142250142671ull}},
+{{8440416339378479304ull, 5177371327980820546ull,
+ 13359463870359525742ull, 5201423838906339169ull}},
+{{1327148387368323322ull, 15695086196830801491ull,
+ 2864271782667243465ull, 6501779798632923962ull}},
+{{15493993539492567865ull, 5783799690756338151ull,
+ 12803711765188830140ull, 8127224748291154952ull}},
+{{16601274989823936772ull, 12838246843577487152ull,
+ 8002319853243018837ull, 5079515467681971845ull}},
+{{2304849663570369348ull, 2212750499189695229ull,
+ 14614585834981161451ull, 6349394334602464806ull}},
+{{7492748097890349589ull, 16600996179269282748ull,
+ 9044860256871676005ull, 7936742918253081008ull}},
+{{13906339598036244302ull, 12681465621256995669ull,
+ 5653037660544797503ull, 4960464323908175630ull}},
+{{3547866442263141665ull, 11240146008143856683ull,
+ 16289669112535772687ull, 6200580404885219537ull}},
+{{18269891108111090793ull, 9438496491752432949ull,
+ 6527028335387552147ull, 7750725506106524422ull}},
+{{13724524951783125698ull, 3593217298131576641ull,
+ 17914450764899383804ull, 4844203441316577763ull}},
+{{3320598134446743410ull, 4491521622664470802ull,
+ 17781377437696841851ull, 6055254301645722204ull}},
+{{13374119704913205071ull, 1002716009903200598ull,
+ 3779977723411500698ull, 7569067877057152756ull}},
+{{3747138797143365265ull, 5238383524616888278ull,
+ 11585858113986963744ull, 4730667423160720472ull}},
+{{13907295533283982389ull, 6547979405771110347ull,
+ 14482322642483704680ull, 5913334278950900590ull}},
+{{12772433398177590083ull, 8184974257213887934ull,
+ 8879531266249855042ull, 7391667848688625738ull}},
+{{3371084855433605898ull, 9727294929186067863ull,
+ 10161393059833547305ull, 4619792405430391086ull}},
+{{18048914124574171084ull, 16770804679909972732ull,
+ 3478369287937158323ull, 5774740506787988858ull}},
+{{4114398582008162239ull, 16351819831460078012ull,
+ 13571333646776223712ull, 7218425633484986072ull}},
+{{5142998227510202799ull, 1993030715615545899ull,
+ 16964167058470279641ull, 9023032041856232590ull}},
+{{908530882980182797ull, 12774859243328185947ull,
+ 5990918393116536871ull, 5639395026160145369ull}},
+{{14970721659007392209ull, 11356888035732844529ull,
+ 12100334009823058993ull, 7049243782700181711ull}},
+{{4878344018477076549ull, 361051989383891950ull,
+ 10513731493851435838ull, 8811554728375227139ull}},
+{{16884023066830336555ull, 14060715548647096180ull,
+ 4265239174443453446ull, 5507221705234516962ull}},
+{{2658284759828369078ull, 8352522398954094418ull,
+ 14554921004909092616ull, 6884027131543146202ull}},
+{{12546227986640237155ull, 10440652998692618022ull,
+ 8970279219281589962ull, 8605033914428932753ull}},
+{{3229706473222760318ull, 11137094142610274168ull,
+ 17135639558119463486ull, 5378146196518082970ull}},
+{{4037133091528450398ull, 4697995641408066902ull,
+ 12196177410794553550ull, 6722682745647603713ull}},
+{{14269788401265338805ull, 15095866588614859435ull,
+ 1410163708211028225ull, 8403353432059504642ull}},
+{{6612774741577142801ull, 2517387590243205291ull,
+ 5493038336059280545ull, 5252095895037190401ull}},
+{{3654282408544040597ull, 7758420506231394518ull,
+ 11477983938501488585ull, 6565119868796488001ull}},
+{{13791225047534826555ull, 14309711651216631051ull,
+ 512421867844697019ull, 8206399835995610002ull}},
+{{6313672645495572645ull, 6637726772796700455ull,
+ 4931949685830323541ull, 5128999897497256251ull}},
+{{3280404788442077902ull, 12908844484423263473ull,
+ 1553251088860516522ull, 6411249871871570314ull}},
+{{8712192003979985281ull, 6912683568674303533ull,
+ 11164935897930421461ull, 8014062339839462892ull}},
+{{7750963011701184753ull, 6626270239635133660ull,
+ 16201456973061289221ull, 5008788962399664307ull}},
+{{9688703764626480941ull, 12894523817971304979ull,
+ 15640135197899223622ull, 6260986202999580384ull}},
+{{7499193687355713272ull, 6894782735609355416ull,
+ 1103424923664477912ull, 7826232753749475481ull}},
+{{4686996054597320795ull, 4309239209755847135ull,
+ 12218855623358768455ull, 4891395471093422175ull}},
+{{1247059049819263090ull, 774862993767421015ull,
+ 10661883510771072665ull, 6114244338866777719ull}},
+{{15393881867556242574ull, 5580264760636664172ull,
+ 8715668370036452927ull, 7642805423583472149ull}},
+{{397804130367875801ull, 10405194503038996964ull,
+ 7753135740486477031ull, 4776753389739670093ull}},
+{{497255162959844751ull, 8394807110371358301ull,
+ 14303105694035484193ull, 5970941737174587616ull}},
+{{5233254972127193843ull, 15105194906391585780ull,
+ 17878882117544355241ull, 7463677171468234520ull}},
+{{12494156394434271960ull, 2523217788853659256ull,
+ 11174301323465222026ull, 4664798232167646575ull}},
+{{15617695493042839950ull, 12377394272921849878ull,
+ 9356190635904139628ull, 5830997790209558219ull}},
+{{10298747329448774129ull, 15471742841152312348ull,
+ 7083552276452786631ull, 7288747237761947774ull}},
+{{12873434161810967662ull, 14727992533013002531ull,
+ 18077812382420759097ull, 9110934047202434717ull}},
+{{5740053341918160837ull, 2287466305492044726ull,
+ 13604475748226668388ull, 5694333779501521698ull}},
+{{16398438714252476854ull, 2859332881865055907ull,
+ 7782222648428559677ull, 7117917224376902123ull}},
+{{15886362374388208163ull, 8185852120758707788ull,
+ 5116092292108311692ull, 8897396530471127654ull}},
+{{705604447137854294ull, 14339529612328968176ull,
+ 17032615737849858519ull, 5560872831544454783ull}},
+{{882005558922317867ull, 13312725996983822316ull,
+ 16679083653884935245ull, 6951091039430568479ull}},
+{{1102506948652897334ull, 2805849440947614183ull,
+ 16237168548928781153ull, 8688863799288210599ull}},
+{{7606595870549142690ull, 13282870946660728624ull,
+ 17065759370721570076ull, 5430539874555131624ull}},
+{{9508244838186428362ull, 16603588683325910780ull,
+ 2885455139692410979ull, 6788174843193914531ull}},
+{{11885306047733035453ull, 16142799835730000571ull,
+ 17441876979897677436ull, 8485218553992393163ull}},
+{{5122473270619453206ull, 865877860476474549ull, 8595330103222354446ull,
+ 5303261596245245727ull}},
+{{11014777606701704412ull, 10305719362450368994ull,
+ 6132476610600555153ull, 6629076995306557159ull}},
+{{4545099971522354707ull, 17493835221490349147ull,
+ 3053909744823306037ull, 8286346244133196449ull}},
+{{534844472987777740ull, 13239490022645162169ull,
+ 13437908636583036033ull, 5178966402583247780ull}},
+{{5280241609662110079ull, 2714304473024288999ull,
+ 16797385795728795042ull, 6473708003229059725ull}},
+{{1988615993650249694ull, 12616252628135137057ull,
+ 7161674189378830090ull, 8092135004036324657ull}},
+{{12772100042099875819ull, 12496843911011848564ull,
+ 16005261414430238566ull, 5057584377522702910ull}},
+{{15965125052624844774ull, 6397682851910034897ull,
+ 10783204731183022400ull, 6321980471903378638ull}},
+{{6121348260498892255ull, 7997103564887543622ull,
+ 4255633877124002192ull, 7902475589879223298ull}},
+{{17660900718093971372ull, 4998189728054714763ull,
+ 7271457191629889274ull, 4939047243674514561ull}},
+{{17464439879190076310ull, 15471109196923169262ull,
+ 13701007507964749496ull, 6173809054593143201ull}},
+{{12607177812132819580ull, 892142422444409962ull,
+ 3291201329673773159ull, 7717261318241429002ull}},
+{{12491172151010400142ull, 7475118041668838082ull,
+ 6668686849473496128ull, 4823288323900893126ull}},
+{{6390593151908224369ull, 9343897552086047603ull,
+ 17559230598696645968ull, 6029110404876116407ull}},
+{{3376555421457892557ull, 11679871940107559504ull,
+ 17337352229943419556ull, 7536388006095145509ull}},
+{{2110347138411182848ull, 16523291999422000498ull,
+ 13141688152928331174ull, 4710242503809465943ull}},
+{{11861305959868754368ull, 11430742962422724814ull,
+ 11815424172733026064ull, 5887803129761832429ull}},
+{{5603260412981167152ull, 14288428703028406018ull,
+ 934222160634118868ull, 7359753912202290537ull}},
+{{16227447553081234748ull, 17860535878785507522ull,
+ 5779463719220036489ull, 9199692390252863171ull}},
+{{14753840739103159622ull, 4245305896599860345ull,
+ 1306321815298828854ull, 5749807743908039482ull}},
+{{4607242868596785815ull, 14530004407604601240ull,
+ 10856274305978311875ull, 7187259679885049352ull}},
+{{5759053585745982269ull, 13550819491078363646ull,
+ 13570342882472889844ull, 8984074599856311690ull}},
+{{17434466546373402630ull, 17692634218778753086ull,
+ 13093150319972944056ull, 5615046624910194806ull}},
+{{12569711146111977479ull, 3669048699763889742ull,
+ 7143065863111404263ull, 7018808281137743508ull}},
+{{6488766895785196041ull, 18421368929987025890ull,
+ 8928832328889255328ull, 8773510351422179385ull}},
+{{8667165328293135430ull, 11513355581241891181ull,
+ 17109735251624254340ull, 5483443969638862115ull}},
+{{15445642678793807191ull, 14391694476552363976ull,
+ 16775483046102930021ull, 6854304962048577644ull}},
+{{860309274782707373ull, 4154560040408291259ull, 2522609733919110911ull,
+ 8567881202560722056ull}},
+{{16678594361235049772ull, 9514129052896263892ull,
+ 1576631083699444319ull, 5354925751600451285ull}},
+{{2401498877834260599ull, 7280975297692941962ull,
+ 6582474873051693303ull, 6693657189500564106ull}},
+{{12225245634147601557ull, 4489533103688789548ull,
+ 17451465628169392437ull, 8367071486875705132ull}},
+{{16864150558197026781ull, 5111801199019187419ull,
+ 1683793980751094465ull, 5229419679297315708ull}},
+{{16468502179318895572ull, 11001437517201372178ull,
+ 2104742475938868081ull, 6536774599121644635ull}},
+{{11362255687293843657ull, 18363482914929103127ull,
+ 16465986150205748813ull, 8170968248902055793ull}},
+{{14018938832199734142ull, 13783019831044383406ull,
+ 3373712316237511152ull, 5106855155563784871ull}},
+{{8300301503394891869ull, 17228774788805479258ull,
+ 18052198450579052652ull, 6383568944454731088ull}},
+{{1152004842388839029ull, 3089224412297297457ull,
+ 4118503989514264200ull, 7979461180568413861ull}},
+{{12249218072561494153ull, 1930765257685810910ull,
+ 4879908002660109077ull, 4987163237855258663ull}},
+{{6088150553847091883ull, 7025142590534651542ull,
+ 1488198984897748442ull, 6233954047319073329ull}},
+{{16833560229163640662ull, 18004800275023090235ull,
+ 6471934749549573456ull, 7792442559148841661ull}},
+{{8215132134013581462ull, 11253000171889431397ull,
+ 6350802227682177362ull, 4870276599468026038ull}},
+{{14880601185944364731ull, 4842878178007013438ull,
+ 17161874821457497511ull, 6087845749335032547ull}},
+{{9377379445575680106ull, 1441911704081378894ull,
+ 16840657508394483985ull, 7609807186668790684ull}},
+{{1249176135057412162ull, 12430409861119331569ull,
+ 1302038905891776682ull, 4756129491667994178ull}},
+{{6173156187249153107ull, 6314640289544388653ull,
+ 10850920669219496661ull, 5945161864584992722ull}},
+{{12328131252488829288ull, 12504986380357873720ull,
+ 4340278799669595018ull, 7431452330731240903ull}},
+{{7705082032805518305ull, 12427302506151058979ull,
+ 9630203277434578742ull, 4644657706707025564ull}},
+{{5019666522579509977ull, 6310756095834047916ull,
+ 12037754096793223428ull, 5805822133383781955ull}},
+{{6274583153224387471ull, 7888445119792559895ull,
+ 10435506602564141381ull, 7257277666729727444ull}},
+{{3231542923103096435ull, 14472242418168087773ull,
+ 13044383253205176726ull, 9071597083412159305ull}},
+{{4325557336153129224ull, 4433465492927666954ull,
+ 1235210505612153598ull, 5669748177132599566ull}},
+{{14630318707046187338ull, 14765203903014359500ull,
+ 10767385168869967805ull, 7087185221415749457ull}},
+{{18287898383807734172ull, 4621446823485785663ull,
+ 18070917479514847661ull, 8858981526769686821ull}},
+{{18347465517520915714ull, 5194247273892309991ull,
+ 13600166433910473740ull, 5536863454231054263ull}},
+{{18322645878473756738ull, 6492809092365387489ull,
+ 12388522023960704271ull, 6921079317788817829ull}},
+{{9068249292810032210ull, 3504325347029346458ull,
+ 1650594474668716627ull, 8651349147236022287ull}},
+{{10279341826433658036ull, 18331104406389199200ull,
+ 7949150574309029747ull, 5407093217022513929ull}},
+{{12849177283042072545ull, 18302194489559111096ull,
+ 14548124236313675088ull, 6758866521278142411ull}},
+{{16061471603802590681ull, 4430999038239337254ull,
+ 13573469276964705957ull, 8448583151597678014ull}},
+{{5426733733949231272ull, 5075217408113279736ull,
+ 3871732279675553319ull, 5280364469748548759ull}},
+{{6783417167436539089ull, 1732335741714211766ull, 227979331167053745ull,
+ 6600455587185685949ull}},
+{{17702643496150449669ull, 6777105695570152611ull,
+ 4896660182386205085ull, 8250569483982107436ull}},
+{{8758309175880337092ull, 6541534068945039334ull,
+ 12283784650846153986ull, 5156605927488817147ull}},
+{{1724514432995645556ull, 17400289623036074976ull,
+ 10743044795130304578ull, 6445757409361021434ull}},
+{{2155643041244556945ull, 12526989991940317912ull,
+ 4205433957058104915ull, 8057196761701276793ull}},
+{{1347276900777848091ull, 5523525735749004743ull,
+ 14157611269229785332ull, 5035747976063297995ull}},
+{{15519154181254473826ull, 6904407169686255928ull,
+ 13085328068109843761ull, 6294684970079122494ull}},
+{{952198652858540666ull, 13242194980535207815ull,
+ 7133288048282528893ull, 7868356212598903118ull}},
+{{7512653185677669772ull, 10582214872048198836ull,
+ 18293363085458744270ull, 4917722632874314448ull}},
+{{9390816482097087215ull, 4004396553205472737ull,
+ 4419959783113878722ull, 6147153291092893061ull}},
+{{16350206621048746923ull, 14228867728361616729ull,
+ 10136635747319736306ull, 7683941613866116326ull}},
+{{3301350110514384971ull, 13504728348653398360ull,
+ 1723711323647447287ull, 4802463508666322704ull}},
+{{4126687638142981214ull, 12269224417389360046ull,
+ 2154639154559309109ull, 6003079385832903380ull}},
+{{14381731584533502325ull, 1501472466454536345ull,
+ 2693298943199136387ull, 7503849232291129225ull}},
+{{2071053212692357097ull, 17079321356029942880ull,
+ 13212526885567930001ull, 4689905770181955765ull}},
+{{2588816515865446372ull, 7514093639755264888ull,
+ 2680600551677748790ull, 5862382212727444707ull}},
+{{3236020644831807964ull, 169245012839305302ull,
+ 17185808744879349700ull, 7327977765909305883ull}},
+{{13268397842894535763ull, 211556266049131627ull,
+ 16870574912671799221ull, 9159972207386632354ull}},
+{{5986905642595390900ull, 2438065675494401219ull,
+ 15155795338847262417ull, 5724982629616645221ull}},
+{{2871946034816850721ull, 7659268112795389428ull,
+ 5109686118276914309ull, 7156228287020806527ull}},
+{{3589932543521063401ull, 14185771159421624689ull,
+ 1775421629418754982ull, 8945285358776008159ull}},
+{{13772922885769134386ull, 4254420956211127526ull,
+ 8027167546027803720ull, 5590803349235005099ull}},
+{{7992781570356642174ull, 5318026195263909408ull,
+ 5422273414107366746ull, 6988504186543756374ull}},
+{{9990976962945802718ull, 15870904780934662568ull,
+ 16001213804488984240ull, 8735630233179695467ull}},
+{{6244360601841126699ull, 9919315488084164105ull,
+ 7694915618591921198ull, 5459768895737309667ull}},
+{{12417136770728796277ull, 3175772323250429323ull,
+ 5006958504812513594ull, 6824711119671637084ull}},
+{{10909734944983607443ull, 13193087440917812462ull,
+ 6258698131015641992ull, 8530888899589546355ull}},
+{{2206898322187366748ull, 8245679650573632789ull,
+ 1605843322671082293ull, 5331805562243466472ull}},
+{{7370308921161596339ull, 14918785581644428890ull,
+ 2007304153338852866ull, 6664756952804333090ull}},
+{{18436258188306771231ull, 9425109940200760304ull,
+ 11732502228528341891ull, 8330946191005416362ull}},
+{{11522661367691732020ull, 3584850703411781238ull,
+ 11944499911257601586ull, 5206841369378385226ull}},
+{{5179954672759889217ull, 13704435416119502356ull,
+ 5707252852217226174ull, 6508551711722981533ull}},
+{{6474943340949861521ull, 7907172233294602137ull,
+ 11745752083698920622ull, 8135689639653726916ull}},
+{{15576054634162133211ull, 330296627381738431ull,
+ 16564467089166601197ull, 5084806024783579322ull}},
+{{14858382274275278609ull, 5024556802654560943ull,
+ 11482211824603475688ull, 6356007530979474153ull}},
+{{13961291824416710357ull, 6280696003318201179ull,
+ 517706725472180898ull, 7945009413724342692ull}},
+{{6419964381046750021ull, 8537121020501263641ull,
+ 9546938740274888869ull, 4965630883577714182ull}},
+{{12636641494735825431ull, 15283087294053967455ull,
+ 2710301388488835278ull, 6207038604472142728ull}},
+{{11184115849992393884ull, 9880487080712683511ull,
+ 3387876735611044098ull, 7758798255590178410ull}},
+{{13907601433886328034ull, 10786990443872815098ull,
+ 6729108978184290465ull, 4849248909743861506ull}},
+{{8161129755503134234ull, 18095424073268406777ull,
+ 17634758259585138889ull, 6061561137179826882ull}},
+{{14813098212806305697ull, 8784222036303344759ull,
+ 12820075787626647804ull, 7576951421474783603ull}},
+{{16175715410645022917ull, 14713510809544366282ull,
+ 5706704358052960925ull, 4735594638421739752ull}},
+{{10996272226451502838ull, 4556830456648294141ull,
+ 7133380447566201157ull, 5919493298027174690ull}},
+{{18357026301491766451ull, 10307724089237755580ull,
+ 18140097596312527254ull, 7399366622533968362ull}},
+{{2249769401577578224ull, 1830641537346209334ull,
+ 15949247016122717438ull, 4624604139083730226ull}},
+{{12035583788826748588ull, 11511673958537537475ull,
+ 10713186733298620989ull, 5780755173854662783ull}},
+{{10432793717606047831ull, 554534392889758132ull,
+ 8779797398195888333ull, 7225943967318328479ull}},
+{{13040992147007559788ull, 5304854009539585569ull,
+ 6363060729317472512ull, 9032429959147910599ull}},
+{{1233091064238643012ull, 3315533755962240981ull,
+ 10894441983464502176ull, 5645268724467444124ull}},
+{{6153049848725691669ull, 4144417194952801226ull,
+ 13618052479330627720ull, 7056585905584305155ull}},
+{{16914684347761890394ull, 5180521493691001532ull,
+ 12410879580735896746ull, 8820732381980381444ull}},
+{{1348305680496405688ull, 7849511951984263862ull,
+ 16980171774814711274ull, 5512957738737738402ull}},
+{{10908754137475282918ull, 588517903125554019ull,
+ 12001842681663613285ull, 6891197173422173003ull}},
+{{9024256653416715744ull, 5347333397334330428ull,
+ 10390617333652128702ull, 8613996466777716254ull}},
+{{14863532445240223148ull, 17177141428616120229ull,
+ 1882449815105192534ull, 5383747791736072659ull}},
+{{4744357501268115223ull, 12248054748915374479ull,
+ 16188120324163654380ull, 6729684739670090823ull}},
+{{1318760858157756124ull, 15310068436144218099ull,
+ 15623464386777180071ull, 8412105924587613529ull}},
+{{16965126600844455242ull, 16486321800231218167ull,
+ 2847136214094655688ull, 5257566202867258456ull}},
+{{16594722232628181148ull, 2161158176579471093ull,
+ 3558920267618319611ull, 6571957753584073070ull}},
+{{6908344735503062723ull, 16536505776006502579ull,
+ 13672022371377675321ull, 8214947191980091337ull}},
+{{2011872450475720250ull, 3417787082362982256ull,
+ 1627484954469965220ull, 5134341994987557086ull}},
+{{2514840563094650313ull, 4272233852953727820ull,
+ 11257728229942232333ull, 6417927493734446357ull}},
+{{3143550703868312891ull, 9951978334619547679ull, 237102232145626704ull,
+ 8022409367168057947ull}},
+{{8882248217558777413ull, 6219986459137217299ull,
+ 16289089959586874354ull, 5014005854480036216ull}},
+{{6491124253521083862ull, 16998355110776297432ull,
+ 1914618375774041326ull, 6267507318100045271ull}},
+{{8113905316901354827ull, 12024571851615595982ull,
+ 16228331024999715370ull, 7834384147625056588ull}},
+{{459504804635958863ull, 12127043425687135393ull, 919334853770046298ull,
+ 4896490092265660368ull}},
+{{5186067024222336483ull, 5935432245254143433ull,
+ 1149168567212557873ull, 6120612615332075460ull}},
+{{11094269798705308508ull, 12030976324995067195ull,
+ 1436460709015697341ull, 7650765769165094325ull}},
+{{4628075614977123865ull, 9825203212335610949ull,
+ 3203630952348504790ull, 4781728605728183953ull}},
+{{10396780537148792736ull, 3058131978564737878ull,
+ 8616224708863018892ull, 5977160757160229941ull}},
+{{3772603634581215111ull, 3822664973205922348ull,
+ 15381966904506161519ull, 7471450946450287426ull}},
+{{11581249308468035253ull, 9306694635894783323ull,
+ 14225415333743738853ull, 4669656841531429641ull}},
+{{9864875617157656162ull, 16245054313295867058ull,
+ 3946711111897509854ull, 5837071051914287052ull}},
+{{3107722484592294394ull, 11082945854765058015ull,
+ 4933388889871887318ull, 7296338814892858815ull}},
+{{17719711161022531705ull, 4630310281601546710ull,
+ 1555050093912471244ull, 9120423518616073519ull}},
+{{6463133457211694412ull, 12117315962855742502ull,
+ 7889435336336376383ull, 5700264699135045949ull}},
+{{17302288858369393822ull, 10534958935142290223ull,
+ 14473480188847858383ull, 7125330873918807436ull}},
+{{17016175054534354374ull, 8557012650500474875ull,
+ 18091850236059822979ull, 8906663592398509295ull}},
+{{8329266399870277532ull, 3042289897349102845ull,
+ 18224935425178471218ull, 5566664745249068309ull}},
+{{15023269018265234819ull, 13026234408541154364ull,
+ 8946111226190925310ull, 6958330931561335387ull}},
+{{332342199121991907ull, 7059420973821667148ull, 6570953014311268734ull,
+ 8697913664451669234ull}},
+{{9431085911306020750ull, 18247196163920705679ull,
+ 8718531652371930862ull, 5436196040282293271ull}},
+{{7177171370705138034ull, 13585623168046106291ull,
+ 6286478547037525674ull, 6795245050352866589ull}},
+{{4359778194954034638ull, 7758656923202857056ull,
+ 12469784202224294997ull, 8494056312941083236ull}},
+{{2724861371846271649ull, 7155003586215479612ull,
+ 17016987163244960181ull, 5308785195588177022ull}},
+{{3406076714807839561ull, 13555440501196737419ull,
+ 12047861917201424418ull, 6635981494485221278ull}},
+{{18092653948791963163ull, 7720928589641145965ull,
+ 5836455359647004715ull, 8294976868106526598ull}},
+{{13613751727208670929ull, 2519737359312022276ull,
+ 17482842655061541659ull, 5184360542566579123ull}},
+{{17017189659010838661ull, 16984729754422191557ull,
+ 17241867300399539169ull, 6480450678208223904ull}},
+{{7436429018481384614ull, 7395854137745575735ull,
+ 3105590051789872346ull, 8100563347760279881ull}},
+{{11565297164191947240ull, 9234094854518372738ull,
+ 13470208828437139976ull, 5062852092350174925ull}},
+{{5233249418385158242ull, 11542618568147965923ull,
+ 3002702980264261258ull, 6328565115437718657ull}},
+{{1929875754554059899ull, 5204901173330181596ull,
+ 8365064743757714477ull, 7910706394297148321ull}},
+{{10429544383451063245ull, 5558906242545057449ull,
+ 16757380510917041308ull, 4944191496435717700ull}},
+{{17648616497741216960ull, 6948632803181321811ull,
+ 2499981564936750019ull, 6180239370544647126ull}},
+{{17449084603749133296ull, 4074104985549264360ull,
+ 12348348993025713332ull, 7725299213180808907ull}},
+{{10905677877343208310ull, 11769687652823066033ull,
+ 5411875111427376880ull, 4828312008238005567ull}},
+{{18243783365106398291ull, 14712109566028832541ull,
+ 2153157870856833196ull, 6035390010297506959ull}},
+{{8969671151100834152ull, 18390136957536040677ull,
+ 16526505393853205207ull, 7544237512871883698ull}},
+{{7911887478651715297ull, 18411364626101107279ull,
+ 14940751889585641158ull, 4715148445544927311ull}},
+{{5278173329887256217ull, 13790833745771608291ull,
+ 14064253843554663544ull, 5893935556931159139ull}},
+{{1986030643931682368ull, 17238542182214510364ull,
+ 12968631286015941526ull, 7367419446163948924ull}},
+{{2482538304914602959ull, 12324805690913362147ull,
+ 16210789107519926908ull, 9209274307704936155ull}},
+{{17692487505067484514ull, 16926375593675627149ull,
+ 7825900182986260365ull, 5755796442315585097ull}},
+{{8280551326052191930ull, 7322911436812370225ull,
+ 14394061247160213361ull, 7194745552894481371ull}},
+{{14962375175992627817ull, 13765325314442850685ull,
+ 13380890540522878797ull, 8993431941118101714ull}},
+{{11657327494209086338ull, 10909171330740475630ull,
+ 12974742606254187152ull, 5620894963198813571ull}},
+{{5348287330906582114ull, 13636464163425594538ull,
+ 11606742239390346036ull, 7026118703998516964ull}},
+{{15908731200488003450ull, 17045580204281993172ull,
+ 14508427799237932545ull, 8782648379998146205ull}},
+{{719584963450226349ull, 3735958600035163877ull,
+ 11373610383737401793ull, 5489155237498841378ull}},
+{{5511167222740170840ull, 9281634268471342750ull,
+ 4993640942816976433ull, 6861444046873551723ull}},
+{{16112331065279989357ull, 16213728854016566341ull,
+ 1630365160093832637ull, 8576805058591939654ull}},
+{{12376049925013687301ull, 12439423542974047915ull,
+ 14854036280340809110ull, 5360503161619962283ull}},
+{{10858376387839721222ull, 6325907391862784086ull,
+ 13955859331998623484ull, 6700628952024952854ull}},
+{{4349598447944875719ull, 7907384239828480108ull,
+ 8221452128143503547ull, 8375786190031191068ull}},
+{{11941871066820323132ull, 2636272140679106115ull,
+ 14361779616944465525ull, 5234866368769494417ull}},
+{{10315652815098016011ull, 7907026194276270548ull,
+ 4117166465898418194ull, 6543582960961868022ull}},
+{{12894566018872520014ull, 660410705990562377ull,
+ 14369830119227798551ull, 8179478701202335027ull}},
+{{1141574734154243153ull, 7330285718885183342ull,
+ 6675300815303680142ull, 5112174188251459392ull}},
+{{10650340454547579749ull, 18386229185461254985ull,
+ 8344126019129600177ull, 6390217735314324240ull}},
+{{17924611586611862590ull, 9147728426544405019ull,
+ 10430157523912000222ull, 7987772169142905300ull}},
+{{8897039232418720167ull, 1105644248162865233ull,
+ 15742220489299775947ull, 4992357605714315812ull}},
+{{15732985058950788113ull, 15217113365485745253ull,
+ 1231031537915168317ull, 6240447007142894766ull}},
+{{5831173268406321429ull, 5186333651575017855ull,
+ 10762161459248736205ull, 7800558758928618457ull}},
+{{10562012320395032749ull, 5547301541448080111ull,
+ 18255565958098929888ull, 4875349224330386535ull}},
+{{8590829382066403032ull, 6934126926810100139ull,
+ 18207771429196274456ull, 6094186530412983169ull}},
+{{6126850709155615886ull, 8667658658512625174ull,
+ 8924656231213179358ull, 7617733163016228962ull}},
+{{17664339748504423641ull, 805600643143002829ull,
+ 10189596162935625003ull, 4761083226885143101ull}},
+{{8245366630348365839ull, 14842058859210917249ull,
+ 17348681222096919157ull, 5951354033606428876ull}},
+{{14918394306362845203ull, 4717515518731482849ull,
+ 3239107453911597331ull, 7439192542008036096ull}},
+{{2406467413835696396ull, 642604189993482829ull, 2024442158694748332ull,
+ 4649495338755022560ull}},
+{{7619770285722008399ull, 803255237491853536ull, 2530552698368435415ull,
+ 5811869173443778200ull}},
+{{9524712857152510499ull, 14839127102146980632ull,
+ 3163190872960544268ull, 7264836466804722750ull}},
+{{11905891071440638123ull, 102164803974174174ull,
+ 13177360628055456144ull, 9081045583505903437ull}},
+{{2829495901223010923ull, 63853002483858859ull, 10541693401748354042ull,
+ 5675653489691189648ull}},
+{{17371927931810927366ull, 9303188289959599381ull,
+ 13177116752185442552ull, 7094566862113987060ull}},
+{{7879851859481495495ull, 11628985362449499227ull,
+ 16471395940231803190ull, 8868208577642483825ull}},
+{{2619064402962240733ull, 2656429833103549113ull,
+ 3377093435003795138ull, 5542630361026552391ull}},
+{{7885516522130188820ull, 12543909328234212199ull,
+ 18056424849036907634ull, 6928287951283190488ull}},
+{{5245209634235348120ull, 6456514623437989441ull,
+ 4123786987586582927ull, 8660359939103988111ull}},
+{{14807471067465562335ull, 10952850667289825256ull,
+ 9494895894882696185ull, 5412724961939992569ull}},
+{{62594760622401303ull, 18302749352539669475ull,
+ 16480305887030758135ull, 6765906202424990711ull}},
+{{13913301506060165341ull, 18266750672247198939ull,
+ 15988696340361059765ull, 8457382753031238389ull}},
+{{6389970432073909386ull, 13722562179368193289ull,
+ 12298778221939356305ull, 5285864220644523993ull}},
+{{12599149058519774637ull, 3318144668928077899ull,
+ 1538414722142031670ull, 6607330275805654992ull}},
+{{11137250304722330392ull, 13371052873014873182ull,
+ 1923018402677539587ull, 8259162844757068740ull}},
+{{2349095422024068591ull, 6051065036420601787ull,
+ 10425258538528238050ull, 5161976777973167962ull}},
+{{16771427332812249451ull, 16787203332380528041ull,
+ 3808201136305521754ull, 6452470972466459953ull}},
+{{7129226110733148101ull, 11760632128620884244ull,
+ 9371937438809290097ull, 8065588715583074941ull}},
+{{13679138356062993371ull, 432866052746970796ull,
+ 8163303908469500263ull, 5040992947239421838ull}},
+{{17098922945078741714ull, 14376140621215877207ull,
+ 980757848732099520ull, 6301241184049277298ull}},
+{{16761967662921039239ull, 17970175776519846509ull,
+ 10449319347769900208ull, 7876551480061596622ull}},
+{{12782072798539343476ull, 11231359860324904068ull,
+ 1919138573928799726ull, 4922844675038497889ull}},
+{{15977590998174179345ull, 4815827788551354277ull,
+ 7010609235838387562ull, 6153555843798122361ull}},
+{{6136930692435560469ull, 15243156772543968655ull,
+ 13374947563225372356ull, 7691944804747652951ull}},
+{{10753110710413307150ull, 303600945985204601ull,
+ 15276871254656939579ull, 4807465502967283094ull}},
+{{18053074406444021841ull, 14214559237763669463ull,
+ 9872717031466398665ull, 6009331878709103868ull}},
+{{17954656989627639397ull, 3933140991922423117ull,
+ 12340896289332998332ull, 7511664848386379835ull}},
+{{13527503627730968575ull, 11681585156806290256ull,
+ 5407217171619430005ull, 4694790530241487397ull}},
+{{16909379534663710719ull, 766923390725699108ull,
+ 11370707482951675411ull, 5868488162801859246ull}},
+{{2689980344620086783ull, 14793712293689287598ull,
+ 4990012316834818455ull, 7335610203502324058ull}},
+{{12585847467629884286ull, 13880454348684221593ull,
+ 15460887432898298877ull, 9169512754377905072ull}},
+{{948625639627595823ull, 10981126977141332448ull,
+ 9663054645561436798ull, 5730945471486190670ull}},
+{{1185782049534494779ull, 4503036684571889752ull,
+ 2855446270097020190ull, 7163681839357738338ull}},
+{{1482227561918118473ull, 14852167892569637998ull,
+ 12792679874476051045ull, 8954602299197172922ull}},
+{{14761450281480987758ull, 11588447942069717700ull,
+ 12607110939974919807ull, 5596626436998233076ull}},
+{{5068778141683081ull, 9873873909159759222ull, 15758888674968649759ull,
+ 6995783046247791345ull}},
+{{9229708009531879659ull, 7730656368022311123ull,
+ 5863552788428648487ull, 8744728807809739182ull}},
+{{3462724496743730835ull, 11749189257655026308ull,
+ 17499778548050069016ull, 5465455504881086988ull}},
+{{4328405620929663544ull, 14686486572068782885ull,
+ 3427979111353034654ull, 6831819381101358736ull}},
+{{10022193044589467334ull, 9134736178231202798ull,
+ 4284973889191293318ull, 8539774226376698420ull}},
+{{1652184634441029180ull, 1097524092967113845ull,
+ 11901480717599334132ull, 5337358891485436512ull}},
+{{6676916811478674379ull, 1371905116208892306ull,
+ 14876850896999167665ull, 6671698614356795640ull}},
+{{17569518051203118781ull, 6326567413688503286ull,
+ 149319547539407965ull, 8339623267945994551ull}},
+{{6369262763574561335ull, 6259947642769008506ull,
+ 7010853744853211834ull, 5212264542466246594ull}},
+{{17184950491322977476ull, 17048306590316036440ull,
+ 17986939217921290600ull, 6515330678082808242ull}},
+{{3034444040444170229ull, 2863639164185493935ull,
+ 13260301985546837443ull, 8144163347603510303ull}},
+{{8814056552918688249ull, 17930675542111791373ull,
+ 15205217768607855257ull, 5090102092252193939ull}},
+{{15629256709575748215ull, 8578286372357575504ull,
+ 14394836192332431168ull, 6362627615315242424ull}},
+{{1089826813260133653ull, 10722857965446969381ull,
+ 17993545240415538960ull, 7953284519144053030ull}},
+{{2986984767501277485ull, 6701786228404355863ull,
+ 6634279756832323946ull, 4970802824465033144ull}},
+{{17568789014658760569ull, 17600604822360220636ull,
+ 8292849696040404932ull, 6213503530581291430ull}},
+{{3514242194613899095ull, 3554011954240724180ull,
+ 1142690083195730358ull, 7766879413226614288ull}},
+{{11419773408488462742ull, 16056315526682616324ull,
+ 714181301997331473ull, 4854299633266633930ull}},
+{{14274716760610578428ull, 6235336353071106693ull,
+ 10116098664351440150ull, 6067874541583292412ull}},
+{{4008337895481059323ull, 17017542478193659175ull,
+ 12645123330439300187ull, 7584843176979115515ull}},
+{{9422740212316743933ull, 8330121039657343032ull,
+ 5597359072310868665ull, 4740526985611947197ull}},
+{{11778425265395929916ull, 15024337317999066694ull,
+ 11608384858815973735ull, 5925658732014933996ull}},
+{{5499659544890136587ull, 14168735629071445464ull,
+ 14510481073519967169ull, 7407073415018667495ull}},
+{{3437287215556335367ull, 1937930740528571559ull,
+ 15986579698591061337ull, 4629420884386667184ull}},
+{{18131667074727582921ull, 7034099444088102352ull,
+ 1536480549529275055ull, 5786776105483333981ull}},
+{{4217839769699927035ull, 4180938286682740037ull,
+ 6532286705338981723ull, 7233470131854167476ull}},
+{{9883985730552296697ull, 614486839926037142ull, 8165358381673727154ull,
+ 9041837664817709345ull}},
+{{1565805063167797532ull, 4995740293381161118ull,
+ 16632564034614549231ull, 5651148540511068340ull}},
+{{11180628365814522723ull, 1632989348299063493ull,
+ 2343960969558634923ull, 7063935675638835426ull}},
+{{140727401985989691ull, 15876294740655993079ull,
+ 12153323248803069461ull, 8829919594548544282ull}},
+{{7005483653882325413ull, 12228527222123689626ull,
+ 12207513048929306317ull, 5518699746592840176ull}},
+{{17980226604207682574ull, 1450600972372448320ull,
+ 15259391311161632897ull, 6898374683241050220ull}},
+{{4028539181550051602ull, 6424937233892948305ull, 627495065242489505ull,
+ 8622968354051312776ull}},
+{{14047052034537252011ull, 15544800817251562450ull,
+ 392184415776555940ull, 5389355221282070485ull}},
+{{8335443006316789206ull, 984256947854901447ull, 5101916538148082830ull,
+ 6736694026602588106ull}},
+{{5807617739468598603ull, 10453693221673402617ull,
+ 15600767709539879345ull, 8420867533253235132ull}},
+{{15158976133236343887ull, 18062773309614346395ull,
+ 527107781607648782ull, 5263042208283271958ull}},
+{{14337034148118041955ull, 13355094600163157186ull,
+ 9882256763864336786ull, 6578802760354089947ull}},
+{{8697920648292776636ull, 7470496213349170675ull,
+ 7741134936403033079ull, 8223503450442612434ull}},
+{{3130357395969291446ull, 11586589160984313528ull,
+ 9449895353679283578ull, 5139689656526632771ull}},
+{{3912946744961614307ull, 5259864414375616102ull,
+ 7200683173671716569ull, 6424612070658290964ull}},
+{{14114555468056793691ull, 11186516536396908031ull,
+ 9000853967089645711ull, 8030765088322863705ull}},
+{{15739126195176577913ull, 13909101862889149375ull,
+ 17154748775499498329ull, 5019228180201789815ull}},
+{{15062221725543334487ull, 3551319273329273007ull,
+ 16831749950946985008ull, 6274035225252237269ull}},
+{{14216091138501780205ull, 4439149091661591259ull,
+ 7204629383401567548ull, 7842544031565296587ull}},
+{{6579213952349918676ull, 11997840219143270345ull,
+ 2197050355412285765ull, 4901590019728310367ull}},
+{{12835703458864786249ull, 1162242218646924219ull,
+ 16581370999547520919ull, 6126987524660387958ull}},
+{{11432943305153594908ull, 15287860828590818986ull,
+ 11503341712579625340ull, 7658734405825484948ull}},
+{{11757275584148384721ull, 331540981014486058ull,
+ 16412960607217041646ull, 4786709003640928092ull}},
+{{5473222443330705094ull, 9637798263122883381ull,
+ 2069456685311750441ull, 5983386254551160116ull}},
+{{11453214072590769271ull, 16658933847330992130ull,
+ 2586820856639688051ull, 7479232818188950145ull}},
+{{11769944813796618699ull, 8105990645368176129ull,
+ 13145978081468274792ull, 4674520511368093840ull}},
+{{877372961963609661ull, 10132488306710220162ull,
+ 16432472601835343490ull, 5843150639210117300ull}},
+{{10320088239309287884ull, 3442238346532999394ull,
+ 2093846678584627747ull, 7303938299012646626ull}},
+{{3676738262281834047ull, 18137855988448412955ull,
+ 11840680385085560491ull, 9129922873765808282ull}},
+{{18438862478422003944ull, 9030316983566564144ull,
+ 12012111259105863211ull, 5706201796103630176ull}},
+{{4601834024317953313ull, 6676210211030817277ull,
+ 15015139073882329014ull, 7132752245129537720ull}},
+{{10363978548824829546ull, 17568634800643297404ull,
+ 322179768643359651ull, 8915940306411922151ull}},
+{{15700858629870294274ull, 8674553741188366925ull,
+ 7118891383043181638ull, 5572462691507451344ull}},
+{{5791015232055704131ull, 1619820139630682849ull,
+ 8898614228803977048ull, 6965578364384314180ull}},
+{{11850455058497018067ull, 2024775174538353561ull,
+ 11123267786004971310ull, 8706972955480392725ull}},
+{{489005383919554436ull, 15100542539368634688ull,
+ 9257885375466801020ull, 5441858097175245453ull}},
+{{611256729899443045ull, 428934100501241744ull, 16184042737760889180ull,
+ 6802322621469056816ull}},
+{{764070912374303806ull, 536167625626552180ull, 1783309348491559859ull,
+ 8502903276836321021ull}},
+{{9700916357088715687ull, 16476005830512452776ull,
+ 3420411352020918863ull, 5314314548022700638ull}},
+{{12126145446360894609ull, 15983321269713178066ull,
+ 13498886226880924387ull, 6642893185028375797ull}},
+{{5934309771096342453ull, 15367465568714084679ull,
+ 3038549728318991772ull, 8303616481285469747ull}},
+{{10626472634576295889ull, 381293943591527116ull,
+ 18039994644695227522ull, 5189760300803418591ull}},
+{{13283090793220369861ull, 9699989466344184703ull,
+ 17938307287441646498ull, 6487200376004273239ull}},
+{{11992177473098074423ull, 2901614796075455071ull,
+ 17811198090874670219ull, 8109000470005341549ull}},
+{{14412639948327378370ull, 17954410312043017083ull,
+ 13437841816010362838ull, 5068125293753338468ull}},
+{{13404113916981835059ull, 13219640853198995546ull,
+ 16797302270012953548ull, 6335156617191673085ull}},
+{{7531770359372518015ull, 16524551066498744433ull,
+ 7161569782234028223ull, 7918945771489591357ull}},
+{{16236571520676293520ull, 17245373444202797126ull,
+ 6781824123109961591ull, 4949341107180994598ull}},
+{{11072342363990591092ull, 16945030786826108504ull,
+ 17700652190742227797ull, 6186676383976243247ull}},
+{{13840427954988238864ull, 7346230428250471918ull,
+ 17514129220000396843ull, 7733345479970304059ull}},
+{{4038581453440261386ull, 2285551008442850997ull,
+ 8640487753286554075ull, 4833340924981440037ull}},
+{{9659912835227714637ull, 16691996815835727458ull,
+ 15412295710035580497ull, 6041676156226800046ull}},
+{{2851519007179867488ull, 7029937964512495611ull,
+ 10041997600689699814ull, 7552095195283500058ull}},
+{{17923100443983274844ull, 18228769283102473468ull,
+ 10887934518858450287ull, 4720059497052187536ull}},
+{{3957131481269541939ull, 18174275585450703932ull,
+ 13609918148573062859ull, 5900074371315234420ull}},
+{{4946414351586927424ull, 18106158463385992011ull,
+ 17012397685716328574ull, 7375092964144043025ull}},
+{{1571331921056271376ull, 13409326042377714206ull,
+ 7430439051863247006ull, 9218866205180053782ull}},
+{{14817140505942333322ull, 3769142758058683474ull, 32338388987141475ull,
+ 5761791378237533614ull}},
+{{9298053595573140844ull, 99742429145966439ull, 9263795023088702652ull,
+ 7202239222796917017ull}},
+{{7010880976039038151ull, 124678036432458049ull,
+ 16191429797288266219ull, 9002799028496146271ull}},
+{{15911015656092868605ull, 16218824837266143944ull,
+ 17037172650946248242ull, 5626749392810091419ull}},
+{{1442025496406534140ull, 11050159009727904123ull,
+ 16684779795255422399ull, 7033436741012614274ull}},
+{{15637589925790331387ull, 9201012743732492249ull,
+ 11632602707214502191ull, 8791795926265767843ull}},
+{{2855964675977875261ull, 12668161992473889512ull,
+ 4964533682795369917ull, 5494872453916104902ull}},
+{{3569955844972344076ull, 2000144435310198178ull,
+ 15429039140348988205ull, 6868590567395131127ull}},
+{{13685816843070205903ull, 7111866562565135626ull,
+ 14674612907008847352ull, 8585738209243913909ull}},
+{{13165321545346266593ull, 4444916601603209766ull,
+ 11477476076094223547ull, 5366086380777446193ull}},
+{{7233279894828057434ull, 944459733576624304ull, 511787039835615722ull,
+ 6707607975971807742ull}},
+{{9041599868535071792ull, 10403946703825556188ull,
+ 9863105836649295460ull, 8384509969964759677ull}},
+{{14874371954689195678ull, 15725838726745748425ull,
+ 8470284157119503614ull, 5240318731227974798ull}},
+{{4757906888079330886ull, 10433926371577409724ull,
+ 1364483159544603710ull, 6550398414034968498ull}},
+{{5947383610099163607ull, 3819035927616986347ull,
+ 10928975986285530446ull, 8187998017543710622ull}},
+{{1411271747098283302ull, 16221955510042780179ull,
+ 2218923973001068624ull, 5117498760964819139ull}},
+{{15599147739155017840ull, 1830700313843923607ull,
+ 16608713021533499493ull, 6396873451206023923ull}},
+{{14887248655516384396ull, 6900061410732292413ull,
+ 16149205258489486462ull, 7996091814007529904ull}},
+{{11610373418911434200ull, 18147596436989846470ull,
+ 10093253286555929038ull, 4997557383754706190ull}},
+{{5289594736784516941ull, 13461123509382532280ull,
+ 3393194571340135490ull, 6246946729693382738ull}},
+{{6611993420980646177ull, 7603032349873389542ull,
+ 13464865251029945171ull, 7808683412116728422ull}},
+{{17967553943395067573ull, 2446052209457174511ull,
+ 3803854763466327828ull, 4880427132572955264ull}},
+{{17847756410816446562ull, 3057565261821468139ull,
+ 4754818454332909785ull, 6100533915716194080ull}},
+{{17698009495093170298ull, 8433642595704223078ull,
+ 5943523067916137231ull, 7625667394645242600ull}},
+{{6449569916005843532ull, 12188555649956221280ull,
+ 3714701917447585769ull, 4766042121653276625ull}},
+{{8061962395007304415ull, 1400636507163112888ull,
+ 9255063415236870116ull, 5957552652066595781ull}},
+{{10077452993759130519ull, 1750795633953891110ull,
+ 16180515287473475549ull, 7446940815083244726ull}},
+{{1686722102672068671ull, 3400090280434875896ull,
+ 5501136036243534314ull, 4654338009427027954ull}},
+{{2108402628340085838ull, 13473484887398370678ull,
+ 16099792082159193700ull, 5817922511783784942ull}},
+{{11858875322279883105ull, 16841856109247963347ull,
+ 10901368065844216317ull, 7272403139729731178ull}},
+{{10211908134422465978ull, 7217262081277790472ull,
+ 4403338045450494589ull, 9090503924662163973ull}},
+{{6382442584014041236ull, 6816631810012312997ull,
+ 5057929287620253070ull, 5681564952913852483ull}},
+{{12589739248444939449ull, 17744161799370167054ull,
+ 1710725591097928433ull, 7101956191142315604ull}},
+{{6513802023701398503ull, 8345144193930545106ull,
+ 2138406988872410542ull, 8877445238927894505ull}},
+{{8682812283240761969ull, 604029102779202787ull,
+ 12865719414113726349ull, 5548403274329934065ull}},
+{{6241829335623564557ull, 5366722396901391388ull,
+ 2247091212359994224ull, 6935504092912417582ull}},
+{{7802286669529455696ull, 6708402996126739235ull,
+ 12032236052304768588ull, 8669380116140521977ull}},
+{{2570586159242215858ull, 13416123909433987830ull,
+ 602618505049398511ull, 5418362572587826236ull}},
+{{12436604735907545631ull, 12158468868365096883ull,
+ 753273131311748139ull, 6772953215734782795ull}},
+{{10934069901457044134ull, 10586400067028983200ull,
+ 14776649469421848886ull, 8466191519668478493ull}},
+{{6833793688410652584ull, 2004814023465726596ull,
+ 11541248927602349506ull, 5291369699792799058ull}},
+{{8542242110513315730ull, 11729389566186934053ull,
+ 5203189122648161074ull, 6614212124740998823ull}},
+{{15289488656569032566ull, 5438364920878891758ull,
+ 1892300384882813439ull, 8267765155926248529ull}},
+{{4944244391928257450ull, 10316507103190389205ull,
+ 12711902786620228159ull, 5167353222453905330ull}},
+{{10791991508337709716ull, 8283947860560598602ull,
+ 6666506446420509391ull, 6459191528067381663ull}},
+{{4266617348567361337ull, 5743248807273360349ull,
+ 3721447039598248835ull, 8073989410084227079ull}},
+{{4972478852068294788ull, 1283687495332156266ull,
+ 9243433427389987378ull, 5046243381302641924ull}},
+{{15438970601940144293ull, 10827981406019971140ull,
+ 11554291784237484222ull, 6307804226628302405ull}},
+{{851969178715628750ull, 4311604720670188118ull, 607806675014691566ull,
+ 7884755283285378007ull}},
+{{14367538791979431681ull, 16529811005701031285ull,
+ 7297408199525264084ull, 4927972052053361254ull}},
+{{4124365434692125889ull, 2215519683416737491ull,
+ 18345132286261355914ull, 6159965065066701567ull}},
+{{543770774937769457ull, 11992771641125697672ull,
+ 18319729339399306988ull, 7699956331333376959ull}},
+{{339856734336105911ull, 16718854312558336853ull,
+ 18367359864765648723ull, 4812472707083360599ull}},
+{{5036506936347520293ull, 16286881872270533162ull,
+ 18347513812529673000ull, 6015590883854200749ull}},
+{{15519005707289176174ull, 1911858266628614836ull,
+ 9099334210379927539ull, 7519488604817750937ull}},
+{{476006530200959301ull, 17335812481138741937ull,
+ 17216298927555924471ull, 4699680378011094335ull}},
+{{5206694181178587030ull, 17058079582996039517ull,
+ 16908687641017517685ull, 5874600472513867919ull}},
+{{11120053744900621691ull, 7487541423462885684ull,
+ 16524173532844509203ull, 7343250590642334899ull}},
+{{13900067181125777114ull, 4747740760901219201ull,
+ 16043530897628248600ull, 9179063238302918624ull}},
+{{1770012960562528840ull, 2967337975563262001ull,
+ 10027206811017655375ull, 5736914523939324140ull}},
+{{6824202219130548954ull, 17544230524736241213ull,
+ 12534008513772069218ull, 7171143154924155175ull}},
+{{13141938792340574097ull, 12706916119065525708ull,
+ 11055824623787698619ull, 8963928943655193969ull}},
+{{17437083782067634619ull, 5635979565202259615ull,
+ 18439105435935781397ull, 5602455589784496230ull}},
+{{17184668709157155369ull, 11656660474930212423ull,
+ 13825509758064950938ull, 7003069487230620288ull}},
+{{16869149868019056307ull, 5347453556807989721ull,
+ 17281887197581188673ull, 8753836859038275360ull}},
+{{3625689639870828336ull, 14871373519073463336ull,
+ 10801179498488242920ull, 5471148036898922100ull}},
+{{4532112049838535420ull, 142472825132277554ull,
+ 13501474373110303651ull, 6838935046123652625ull}},
+{{14888512099152945083ull, 14013149086697510654ull,
+ 3041784911105715851ull, 8548668807654565782ull}},
+{{4693634043543202773ull, 6452375169972250207ull,
+ 15736173624723236119ull, 5342918004784103613ull}},
+{{1255356536001615562ull, 3453782944037924855ull,
+ 5835158975621881437ull, 6678647505980129517ull}},
+{{15404253725284183165ull, 8928914698474793972ull,
+ 11905634737954739700ull, 8348309382475161896ull}},
+{{404286541447838670ull, 14803943723401522041ull,
+ 7441021711221712312ull, 5217693364046976185ull}},
+{{5117044195237186241ull, 58185580542350935ull, 13912963157454528295ull,
+ 6522116705058720231ull}},
+{{1784619225619094898ull, 13907790030960102381ull,
+ 12779517928390772464ull, 8152645881323400289ull}},
+{{3421230025225628263ull, 8692368769350063988ull,
+ 1069669677603150934ull, 5095403675827125181ull}},
+{{4276537531532035329ull, 1642088924832804177ull,
+ 5948773115431326572ull, 6369254594783906476ull}},
+{{9957357932842432065ull, 2052611156041005221ull,
+ 7435966394289158215ull, 7961568243479883095ull}},
+{{8529191717240213993ull, 8200411000166710119ull,
+ 11565008024071805740ull, 4975980152174926934ull}},
+{{6049803628122879587ull, 10250513750208387649ull,
+ 5232887993234981367ull, 6219975190218658668ull}},
+{{12173940553580987388ull, 8201456169333096657ull,
+ 6541109991543726709ull, 7774968987773323335ull}},
+{{691183818347035261ull, 7431753115046879363ull,
+ 11005722772355911049ull, 4859355617358327084ull}},
+{{14699037828215957789ull, 13901377412235987107ull,
+ 13757153465444888811ull, 6074194521697908855ull}},
+{{13762111266842559332ull, 12765035746867595980ull,
+ 12584755813378723110ull, 7592743152122386069ull}},
+{{17824691578631375390ull, 3366461323364859583ull,
+ 10171315392575395896ull, 4745464470076491293ull}},
+{{17669178454861831334ull, 4208076654206074479ull,
+ 17325830259146632774ull, 5931830587595614116ull}},
+{{17474787050149901263ull, 14483467854612368907ull,
+ 3210543750223739351ull, 7414788234494517646ull}},
+{{8615898897129994338ull, 15969696436773812423ull,
+ 15841647899172000806ull, 4634242646559073528ull}},
+{{6158187602985105018ull, 10738748509112489721ull,
+ 1355315800255449392ull, 5792803308198841911ull}},
+{{12309420522158769176ull, 13423435636390612151ull,
+ 15529202805601475452ull, 7241004135248552388ull}},
+{{10775089634271073566ull, 16779294545488265189ull,
+ 964759433292292699ull, 9051255169060690486ull}},
+{{9040274030633114931ull, 8181216081716471791ull,
+ 14438032701089846649ull, 5657034480662931553ull}},
+{{6688656519864005760ull, 14838206120572977643ull,
+ 4212482821080144599ull, 7071293100828664442ull}},
+{{3749134631402619296ull, 13936071632288834150ull,
+ 14488975563204956557ull, 8839116376035830552ull}},
+{{16178267199908800772ull, 11015887779394215295ull,
+ 9055609727003097848ull, 5524447735022394095ull}},
+{{15611147981458613061ull, 13769859724242769119ull,
+ 6707826140326484406ull, 6905559668777992619ull}},
+{{14902248958395878422ull, 7988952618448685591ull,
+ 3773096656980717604ull, 8631949585972490774ull}},
+{{16231434626638505870ull, 14216467423385204302ull,
+ 16193243465895112214ull, 5394968491232806733ull}},
+{{11065921246443356529ull, 8547212242376729570ull,
+ 6406496277086726556ull, 6743710614041008417ull}},
+{{4609029521199419854ull, 10684015302970911963ull,
+ 12619806364785796099ull, 8429638267551260521ull}},
+{{574800441535943457ull, 4371666555143126025ull, 969849950350040706ull,
+ 5268523917219537826ull}},
+{{5330186570347317225ull, 14687955230783683339ull,
+ 10435684474792326690ull, 6585654896524422282ull}},
+{{2051047194506758627ull, 9136572001624828366ull,
+ 3821233556635632555ull, 8232068620655527853ull}},
+{{15116962551848887854ull, 3404514491801823776ull,
+ 4694113982110964299ull, 5145042887909704908ull}},
+{{449459116101558201ull, 18090701170034443433ull,
+ 5867642477638705373ull, 6431303609887131135ull}},
+{{5173509913554335655ull, 8778318407260890579ull,
+ 2722867078620993813ull, 8039129512358913919ull}},
+{{927600686757765833ull, 7792292013751750564ull, 8619320951779202989ull,
+ 5024455945224321199ull}},
+{{1159500858447207291ull, 14352051035617076109ull,
+ 6162465171296615832ull, 6280569931530401499ull}},
+{{6061062091486397018ull, 17940063794521345136ull,
+ 3091395445693381886ull, 7850712414413001874ull}},
+{{3788163807178998136ull, 6600853853148452806ull,
+ 6543808171985751583ull, 4906695259008126171ull}},
+{{13958576795828523478ull, 3639381298008178103ull,
+ 3568074196554801575ull, 6133369073760157714ull}},
+{{12836534976358266443ull, 18384284677792386341ull,
+ 13683464782548277776ull, 7666711342200197142ull}},
+{{10328677369437610479ull, 11490177923620241463ull,
+ 3940479470665285706ull, 4791694588875123214ull}},
+{{8299160693369625195ull, 5139350367670526021ull,
+ 14148971375186382941ull, 5989618236093904017ull}},
+{{14985636885139419398ull, 11035873978015545430ull,
+ 3851156163700814964ull, 7487022795117380022ull}},
+{{4754337034784749220ull, 16120793273114491702ull,
+ 16242030657595173064ull, 4679389246948362513ull}},
+{{15166293330335712333ull, 1704247517683563011ull,
+ 6467480266711802619ull, 5849236558685453142ull}},
+{{14346180644492252512ull, 15965367452386617476ull,
+ 17307722370244529081ull, 7311545698356816427ull}},
+{{17932725805615315639ull, 6121651260201108133ull,
+ 17022966944378273448ull, 9139432122946020534ull}},
+{{13513796637723266227ull, 3826032037625692583ull,
+ 6027668321809033001ull, 5712145076841262834ull}},
+{{12280559778726694879ull, 9394226065459503633ull,
+ 16757957439116067059ull, 7140181346051578542ull}},
+{{1515641668126204887ull, 7131096563396991638ull,
+ 11724074762040308016ull, 8925226682564473178ull}},
+{{14782334097861041767ull, 4456935352123119773ull,
+ 11939232744702580414ull, 5578266676602795736ull}},
+{{4642859567044138496ull, 14794541227008675525ull,
+ 14924040930878225517ull, 6972833345753494670ull}},
+{{10415260477232561024ull, 4658118478478680694ull,
+ 9431679126743006089ull, 8716041682191868338ull}},
+{{1897851779842962736ull, 14440539095117645194ull,
+ 10506485472641766709ull, 5447526051369917711ull}},
+{{11595686761658479228ull, 4215615813614892780ull,
+ 8521420822374820483ull, 6809407564212397139ull}},
+{{14494608452073099035ull, 657833748591228071ull,
+ 6040090009541137700ull, 8511759455265496424ull}},
+{{15976659310186768753ull, 9634518129724293352ull,
+ 3775056255963211062ull, 5319849659540935265ull}},
+{{1524080064023909325ull, 2819775625300590883ull,
+ 9330506338381401732ull, 6649812074426169081ull}},
+{{15740158135312050368ull, 3524719531625738603ull,
+ 16274818941404140069ull, 8312265093032711351ull}},
+{{7531755825356337528ull, 4508792716479780579ull,
+ 17089290866018669399ull, 5195165683145444594ull}},
+{{4803008763268034006ull, 1024304877172337820ull,
+ 12138241545668560941ull, 6493957103931805743ull}},
+{{6003760954085042508ull, 5892067114892810179ull,
+ 10561115913658313272ull, 8117446379914757179ull}},
+{{1446507587089457616ull, 3682541946808006362ull,
+ 4294854436822751843ull, 5073403987446723237ull}},
+{{11031506520716597827ull, 18438235488792171664ull,
+ 9980254064455827707ull, 6341754984308404046ull}},
+{{13789383150895747284ull, 18436108342562826676ull,
+ 3251945543715008826ull, 7927193730385505058ull}},
+{{17841736506164617861ull, 16134253732529154576ull,
+ 6644151983249268420ull, 4954496081490940661ull}},
+{{3855426558996220710ull, 1721073091951891605ull,
+ 12916875997488973430ull, 6193120101863675826ull}},
+{{9430969217172663791ull, 11374713401794640314ull,
+ 6922722960006440979ull, 7741400127329594783ull}},
+{{10506041779160302774ull, 4803352866907956244ull,
+ 11244230877645107468ull, 4838375079580996739ull}},
+{{13132552223950378467ull, 6004191083634945305ull,
+ 9443602578628996431ull, 6047968849476245924ull}},
+{{2580632224655809372ull, 2893552836116293728ull,
+ 11804503223286245539ull, 7559961061845307405ull}},
+{{1612895140409880857ull, 17949371587068541244ull,
+ 9683657523767597413ull, 4724975663653317128ull}},
+{{2016118925512351072ull, 8601656428553512843ull,
+ 12104571904709496767ull, 5906219579566646410ull}},
+{{16355206712172602551ull, 6140384517264503149ull,
+ 5907342844032095151ull, 7382774474458308013ull}},
+{{12527847204321570547ull, 10755269350931396324ull,
+ 5997932286733753421ull, 4614234046536442508ull}},
+{{15659809005401963183ull, 18055772707091633309ull,
+ 7497415358417191776ull, 5767792558170553135ull}},
+{{5739703201470290267ull, 4122971810154990021ull,
+ 4760083179594101817ull, 7209740697713191419ull}},
+{{11786315020265250738ull, 9765400781121125430ull,
+ 1338417956065239367ull, 9012175872141489274ull}},
+{{2754760869238393807ull, 13020904515841785250ull,
+ 5448197240968162508ull, 5632609920088430796ull}},
+{{12666823123402768067ull, 16276130644802231562ull,
+ 6810246551210203135ull, 7040762400110538495ull}},
+{{6610156867398684276ull, 15733477287575401549ull,
+ 3901122170585366015ull, 8800953000138173119ull}},
+{{6437191051337871624ull, 16750952332375707824ull,
+ 9355730384256935615ull, 5500595625086358199ull}},
+{{8046488814172339530ull, 16327004397042246876ull,
+ 7082976961893781615ull, 6875744531357947749ull}},
+{{10058111017715424413ull, 15797069477875420691ull,
+ 13465407220794614923ull, 8594680664197434686ull}},
+{{3980476376858446306ull, 7567325414458443980ull,
+ 3804193494569246423ull, 5371675415123396679ull}},
+{{4975595471073057883ull, 4847470749645667071ull, 143555849784170125ull,
+ 6714594268904245849ull}},
+{{1607808320413934449ull, 10671024455484471743ull,
+ 4791130830657600560ull, 8393242836130307311ull}},
+{{7922409227899790887ull, 6669390284677794839ull,
+ 9911985796802082206ull, 5245776772581442069ull}},
+{{5291325516447350705ull, 17560109892702019357ull,
+ 17001668264429990661ull, 6557220965726802586ull}},
+{{11225842913986576285ull, 8115079310595360484ull,
+ 12028713293682712519ull, 8196526207158503233ull}},
+{{16239523858096385986ull, 11989453596763182158ull,
+ 600416780910613468ull, 5122828879474064521ull}},
+{{11076032785765706675ull, 14986816995953977698ull,
+ 5362206994565654739ull, 6403536099342580651ull}},
+{{4621668945352357535ull, 14121835226515084219ull,
+ 2091072724779680520ull, 8004420124178225814ull}},
+{{582700081631529508ull, 8826147016571927637ull,
+ 15141978508269464037ull, 5002762577611391133ull}},
+{{5340061120466799788ull, 15644369789142297450ull,
+ 5092415080054666334ull, 6253453222014238917ull}},
+{{15898448437438275543ull, 10332090199573096004ull,
+ 10977204868495720822ull, 7816816527517798646ull}},
+{{713158236544146407ull, 1845870356305797099ull, 2249067024382437610ull,
+ 4885510329698624154ull}},
+{{14726505850962346720ull, 11530709982237022181ull,
+ 12034705817332822820ull, 6106887912123280192ull}},
+{{4573074258420769688ull, 14413387477796277727ull,
+ 15043382271666028525ull, 7633609890154100240ull}},
+{{9775700439154062911ull, 11314210182836367531ull,
+ 9402113919791267828ull, 4771006181346312650ull}},
+{{7607939530515190735ull, 14142762728545459414ull,
+ 2529270362884308977ull, 5963757726682890813ull}},
+{{286552376289212611ull, 3843395355399660556ull, 7773273972032774126ull,
+ 7454697158353613516ull}},
+{{9402467272035533690ull, 16237180152406951559ull,
+ 14081668269375259636ull, 4659185723971008447ull}},
+{{7141398071617029208ull, 1849731116799137833ull,
+ 12990399318291686642ull, 5823982154963760559ull}},
+{{13538433607948674414ull, 11535535932853698099ull,
+ 11626313129437220398ull, 7279977693704700699ull}},
+{{12311355991508455114ull, 5196047879212346816ull,
+ 9921205393369137594ull, 9099972117130875874ull}},
+{{7694597494692784446ull, 7859215942935104664ull,
+ 10812439389283098900ull, 5687482573206797421ull}},
+{{9618246868365980558ull, 9824019928668880830ull,
+ 18127235255031261529ull, 7109353216508496776ull}},
+{{2799436548602699889ull, 16891710929263488942ull,
+ 4212299995079525295ull, 8886691520635620971ull}},
+{{15584705898158851143ull, 17474848358430762444ull,
+ 326844487711009357ull, 5554182200397263107ull}},
+{{1034138298989012312ull, 8008502392756289344ull,
+ 14243613664920925409ull, 6942727750496578883ull}},
+{{1292672873736265390ull, 14622314009372749584ull,
+ 13192831062723768857ull, 8678409688120723604ull}},
+{{807920546085165869ull, 2221417228216886634ull,
+ 17468891451057131344ull, 5424006055075452252ull}},
+{{10233272719461233144ull, 2776771535271108292ull,
+ 3389370240111862564ull, 6780007568844315316ull}},
+{{12791590899326541430ull, 3470964419088885365ull,
+ 4236712800139828205ull, 8475009461055394145ull}},
+{{10300587321292782346ull, 4475195771144247305ull,
+ 14177160546155862388ull, 5296880913159621340ull}},
+{{17487420170043365836ull, 5593994713930309131ull,
+ 17721450682694827985ull, 6621101141449526675ull}},
+{{17247589194126819391ull, 11604179410840274318ull,
+ 17540127334941147077ull, 8276376426811908344ull}},
+{{6168057227901874216ull, 9558455140988865401ull,
+ 10962579584338216923ull, 5172735266757442715ull}},
+{{12321757553304730674ull, 7336382907808693847ull,
+ 9091538461995383250ull, 6465919083446803394ull}},
+{{10790510923203525438ull, 18393850671615643117ull,
+ 2141051040639453254ull, 8082398854308504243ull}},
+{{9049912336215897351ull, 6884470651332389044ull,
+ 17479057964895515948ull, 5051499283942815151ull}},
+{{11312390420269871688ull, 8605588314165486305ull,
+ 17237136437692007031ull, 6314374104928518939ull}},
+{{305429970055175898ull, 6145299374279469978ull,
+ 16934734528687620885ull, 7892967631160648674ull}},
+{{4802579749711872841ull, 6146655118138362688ull,
+ 15195895098857150957ull, 4933104769475405421ull}},
+{{6003224687139841051ull, 12295004916100341264ull,
+ 5159810818289274984ull, 6166380961844256777ull}},
+{{7504030858924801313ull, 15368756145125426580ull,
+ 11061449541288981634ull, 7707976202305320971ull}},
+{{13913391323682776629ull, 14217158609130779516ull,
+ 4607562954091919569ull, 4817485126440825607ull}},
+{{17391739154603470786ull, 3936390206131310683ull,
+ 1147767674187511558ull, 6021856408051032009ull}},
+{{17127987924826950579ull, 14143859794518914162ull,
+ 6046395611161777351ull, 7527320510063790011ull}},
+{{15316678471444232016ull, 15757441399215403207ull,
+ 1473154247762416892ull, 4704575318789868757ull}},
+{{14534162070877902116ull, 1250057675309702393ull,
+ 6453128828130409020ull, 5880719148487335946ull}},
+{{4332644533315213932ull, 1562572094137127992ull,
+ 17289783072017787083ull, 7350898935609169932ull}},
+{{5415805666644017415ull, 15788273172953573702ull,
+ 3165484766312682237ull, 9188623669511462416ull}},
+{{17219936596934674597ull, 12173513742309677515ull,
+ 1978427978945426398ull, 5742889793444664010ull}},
+{{16913234727740955342ull, 5993520141032321086ull,
+ 11696407010536558806ull, 7178612241805830012ull}},
+{{11918171372821418369ull, 16715272213145177166ull,
+ 14620508763170698507ull, 8973265302257287515ull}},
+{{2837171089585998577ull, 8141202124002041777ull,
+ 6831974967767992615ull, 5608290813910804697ull}},
+{{8158149880409886125ull, 5564816636575164317ull,
+ 13151654728137378673ull, 7010363517388505871ull}},
+{{14809373368939745560ull, 11567706814146343300ull,
+ 11827882391744335437ull, 8762954396735632339ull}},
+{{32486318732565167ull, 9535659768055158515ull, 5086583485626515696ull,
+ 5476846497959770212ull}},
+{{13875665953697870171ull, 11919574710068948143ull,
+ 6358229357033144620ull, 6846058122449712765ull}},
+{{12732896423694949810ull, 14899468387586185179ull,
+ 12559472714718818679ull, 8557572653062140956ull}},
+{{5652217255595649679ull, 16229696769882447593ull,
+ 17073042483554037482ull, 5348482908163838097ull}},
+{{11676957587921950003ull, 11063748925498283683ull,
+ 7506245049160383141ull, 6685603635204797622ull}},
+{{9984510966475049600ull, 18441372175300242508ull,
+ 159434274595703118ull, 8357004544005997028ull}},
+{{15463691390901681808ull, 6914171591135263663ull,
+ 9323018458477090257ull, 5223127840003748142ull}},
+{{14717928220199714356ull, 13254400507346467483ull,
+ 2430401036241587013ull, 6528909800004685178ull}},
+{{13785724256822255041ull, 2732942578900920642ull,
+ 12261373332156759575ull, 8161137250005856472ull}},
+{{13227763678941297305ull, 8625618139454157257ull,
+ 7663358332597974734ull, 5100710781253660295ull}},
+{{2699646543394457919ull, 1558650637462920764ull,
+ 4967511897320080514ull, 6375888476567075369ull}},
+{{3374558179243072398ull, 11171685333683426763ull,
+ 10821075890077488546ull, 7969860595708844211ull}},
+{{18249999926522777913ull, 11593989351979529630ull,
+ 4457329422084736389ull, 4981162872318027632ull}},
+{{13589127871298696583ull, 657428634692248326ull,
+ 5571661777605920487ull, 6226453590397534540ull}},
+{{7763037802268594921ull, 14656843848647474120ull,
+ 6964577222007400608ull, 7783066987996918175ull}},
+{{4851898626417871826ull, 9160527405404671325ull,
+ 11270389791395707236ull, 4864416867498073859ull}},
+{{10676559301449727686ull, 11450659256755839156ull,
+ 9476301220817246141ull, 6080521084372592324ull}},
+{{13345699126812159607ull, 478266015662635233ull,
+ 11845376526021557677ull, 7600651355465740405ull}},
+{{1423532926616517899ull, 2604759269002840973ull,
+ 9709203337977167500ull, 4750407097166087753ull}},
+{{6391102176698035277ull, 3255949086253551216ull,
+ 16748190190898847279ull, 5938008871457609691ull}},
+{{7988877720872544096ull, 17904994413099102732ull,
+ 16323551720196171194ull, 7422511089322012114ull}},
+{{14216420612400115868ull, 15802307526614327111ull,
+ 14813905843549994900ull, 4639069430826257571ull}},
+{{13158839747072756931ull, 1306140334558357273ull,
+ 13905696286010105722ull, 5798836788532821964ull}},
+{{2613491628558782452ull, 10856047455052722400ull,
+ 17382120357512632152ull, 7248545985666027455ull}},
+{{3266864535698478065ull, 13570059318815903000ull,
+ 17115964428463402286ull, 9060682482082534319ull}},
+{{2041790334811548791ull, 3869601055832551471ull,
+ 17615006795430708285ull, 5662926551301583949ull}},
+{{16387295973796599701ull, 9448687338218077242ull,
+ 8183700439006221644ull, 7078658189126979937ull}},
+{{11260747930390973818ull, 11810859172772596553ull,
+ 14841311567185164959ull, 8848322736408724921ull}},
+{{120438428853276780ull, 14299316010623954702ull,
+ 2358290701849646243ull, 5530201710255453076ull}},
+{{9373920072921371783ull, 13262458994852555473ull,
+ 2947863377312057804ull, 6912752137819316345ull}},
+{{16329086109579102633ull, 16578073743565694341ull,
+ 8296515240067460159ull, 8640940172274145431ull}},
+{{12511521827700633098ull, 17278825117369640819ull,
+ 12102851052683244455ull, 5400587607671340894ull}},
+{{11027716266198403468ull, 16986845378284663120ull,
+ 5905191778999279761ull, 6750734509589176118ull}},
+{{13784645332748004335ull, 7398498667573665188ull,
+ 16604861760603875510ull, 8438418136986470147ull}},
+{{17838775369822278517ull, 12375648806152838ull, 8072195591163728242ull,
+ 5274011335616543842ull}},
+{{13075097175423072339ull, 9238841597862466856ull,
+ 866872452099884494ull, 6592514169520679803ull}},
+{{16343871469278840423ull, 2325179960473307762ull,
+ 14918648620407019330ull, 8240642711900849753ull}},
+{{14826605686726663169ull, 6064923493723205255ull,
+ 2406626360113305225ull, 5150401694938031096ull}},
+{{13921571089980941057ull, 12192840385581394473ull,
+ 3008282950141631531ull, 6438002118672538870ull}},
+{{3566905807194012609ull, 10629364463549355188ull,
+ 12983725724531815222ull, 8047502648340673587ull}},
+{{11452688166351033689ull, 2031666771290959088ull,
+ 5808985568618690562ull, 5029689155212920992ull}},
+{{14315860207938792111ull, 11762955500968474668ull,
+ 7261231960773363202ull, 6287111444016151240ull}},
+{{17894825259923490138ull, 5480322339355817527ull,
+ 9076539950966704003ull, 7858889305020189050ull}},
+{{18101794815093263193ull, 1119358452883692002ull,
+ 10284523487781577906ull, 4911805815637618156ull}},
+{{13403871482011803183ull, 10622570102959390811ull,
+ 12855654359726972382ull, 6139757269547022695ull}},
+{{12143153334087366074ull, 4054840591844462706ull,
+ 11457881931231327574ull, 7674696586933778369ull}},
+{{12201156852231991701ull, 16369333425184952903ull,
+ 243647179378497877ull, 4796685366833611481ull}},
+{{10639760046862601722ull, 6626608726199027417ull,
+ 4916244992650510251ull, 5995856708542014351ull}},
+{{17911386077005640056ull, 3671574889321396367ull,
+ 1533620222385749910ull, 7494820885677517939ull}},
+{{18112145325769606891ull, 16129792361108036441ull,
+ 17099413703486951357ull, 4684263053548448711ull}},
+{{8805123601929844902ull, 6327182396102881840ull,
+ 16762581110931301293ull, 5855328816935560889ull}},
+{{11006404502412306127ull, 12520664013555990204ull,
+ 7118168333381962904ull, 7319161021169451112ull}},
+{{13758005628015382659ull, 15650830016944987755ull,
+ 8897710416727453630ull, 9148951276461813890ull}},
+{{6292910508295920210ull, 5170082742163229443ull,
+ 10172755028882046423ull, 5718094547788633681ull}},
+{{3254452116942512358ull, 1850917409276648900ull,
+ 17327629804529945933ull, 7147618184735792101ull}},
+{{4068065146178140448ull, 6925332780023199029ull,
+ 7824479200380268704ull, 8934522730919740127ull}},
+{{4848383725575031732ull, 4328332987514499393ull,
+ 11807828527878749796ull, 5584076706824837579ull}},
+{{10672165675396177569ull, 5410416234393124241ull,
+ 10148099641421049341ull, 6980095883531046974ull}},
+{{17951893112672609865ull, 11374706311418793205ull,
+ 3461752514921535868ull, 8725119854413808718ull}},
+{{13525776204634075118ull, 16332563481491521561ull,
+ 15998653377108123629ull, 5453199909008630448ull}},
+{{3072162200510430185ull, 6580646296582238240ull,
+ 1551572647675602921ull, 6816499886260788061ull}},
+{{3840202750638037731ull, 12837493889155185704ull,
+ 6551151828021891555ull, 8520624857825985076ull}},
+{{2400126719148773582ull, 5717590671508297113ull,
+ 13317841929368458030ull, 5325390536141240672ull}},
+{{7611844417363354882ull, 16370360376240147199ull,
+ 16647302411710572537ull, 6656738170176550840ull}},
+{{4903119503276805698ull, 6627892415018020287ull,
+ 2362383940928664056ull, 8320922712720688551ull}},
+{{9981978717189085417ull, 4142432759386262679ull,
+ 8394018990721496891ull, 5200576695450430344ull}},
+{{7865787378058968868ull, 566354930805440445ull,
+ 10492523738401871114ull, 6500720869313037930ull}},
+{{14443920241001098988ull, 9931315700361576364ull,
+ 3892282636147563084ull, 8125901086641297413ull}},
+{{18250822187480462676ull, 15430444349580761035ull,
+ 4738519656805920879ull, 5078688179150810883ull}},
+{{18201841715923190441ull, 14676369418548563390ull,
+ 1311463552580013195ull, 6348360223938513604ull}},
+{{13528930108049212243ull, 13733775754758316334ull,
+ 1639329440725016494ull, 7935450279923142005ull}},
+{{3843895299103369748ull, 3971923828296559805ull,
+ 3330423909666829261ull, 4959656424951963753ull}},
+{{9416555142306600089ull, 9576590803798087660ull,
+ 8774715905510924480ull, 6199570531189954691ull}},
+{{11770693927883250111ull, 11970738504747609575ull,
+ 6356708863461267696ull, 7749463163987443364ull}},
+{{14274212732568113175ull, 7481711565467255984ull,
+ 13196315076518068118ull, 4843414477492152102ull}},
+{{17842765915710141469ull, 128767419979294172ull,
+ 7272021808792809340ull, 6054268096865190128ull}},
+{{3856713320928125220ull, 160959274974117716ull, 9090027260991011675ull,
+ 7567835121081487660ull}},
+{{11633817862434854071ull, 16241500611354681236ull,
+ 14904639074974158104ull, 4729896950675929787ull}},
+{{14542272328043567589ull, 1855131690483799929ull,
+ 14019112825290309727ull, 5912371188344912234ull}},
+{{4342782354772295774ull, 16153972668386913624ull,
+ 8300518994758111350ull, 7390463985431140293ull}},
+{{2714238971732684859ull, 5484546899314433111ull,
+ 7493667380937513546ull, 4619039990894462683ull}},
+{{17227856769948019785ull, 16079055660997817196ull,
+ 4755398207744504028ull, 5773799988618078354ull}},
+{{3088076888725473115ull, 1652075502537719880ull,
+ 15167619796535405844ull, 7217249985772597942ull}},
+{{3860096110906841394ull, 2065094378172149850ull,
+ 9736152708814481497ull, 9021562482215747428ull}},
+{{7024246087744163775ull, 12819899032426063416ull,
+ 15308467479863826743ull, 5638476551384842142ull}},
+{{8780307609680204719ull, 11413187772105191366ull,
+ 9912212312975007621ull, 7048095689231052678ull}},
+{{1752012475245480091ull, 431426659849325496ull, 3166893354363983719ull,
+ 8810119611538815848ull}},
+{{1095007797028425057ull, 7187170690046910291ull,
+ 1979308346477489824ull, 5506324757211759905ull}},
+{{15203817801567695033ull, 8983963362558637863ull,
+ 7085821451524250184ull, 6882905946514699881ull}},
+{{14393086233532230887ull, 11229954203198297329ull,
+ 13468962832832700634ull, 8603632433143374851ull}},
+{{2078149868316562449ull, 11630407395426323735ull,
+ 6112258761306743944ull, 5377270270714609282ull}},
+{{16432745390677866773ull, 14538009244282904668ull,
+ 16863695488488205738ull, 6721587838393261602ull}},
+{{2094187664637781850ull, 8949139518498855028ull,
+ 11856247323755481365ull, 8401984797991577003ull}},
+{{10532239327253389464ull, 7899055208275478344ull,
+ 5104311568133481901ull, 5251240498744735627ull}},
+{{13165299159066736830ull, 14485505028771735834ull,
+ 1768703441739464472ull, 6564050623430919534ull}},
+{{7233251911978645230ull, 18106881285964669793ull,
+ 11434251339029106398ull, 8205063279288649417ull}},
+{{16049997491055123029ull, 6705114785300530716ull,
+ 228878059252109643ull, 5128164549555405886ull}},
+{{1615752790109352170ull, 3769707463198275492ull,
+ 9509469610919912862ull, 6410205686944257357ull}},
+{{2019690987636690212ull, 13935506365852620173ull,
+ 16498523032077278981ull, 8012757108680321696ull}},
+{{3568149876486625335ull, 11015534487871581560ull,
+ 10311576895048299363ull, 5007973192925201060ull}},
+{{4460187345608281668ull, 9157732091412089046ull,
+ 12889471118810374204ull, 6259966491156501325ull}},
+{{14798606218865127893ull, 11447165114265111307ull,
+ 2276780843230804043ull, 7824958113945626657ull}},
+{{6943285877577010982ull, 4848635187202000615ull,
+ 12952203073087722287ull, 4890598821216016660ull}},
+{{4067421328543875823ull, 1449107965575112865ull,
+ 16190253841359652859ull, 6113248526520020825ull}},
+{{9695962679107232682ull, 15646443012251054793ull,
+ 6402759246417402361ull, 7641560658150026032ull}},
+{{17589191720510490187ull, 2861497855015827389ull,
+ 4001724529010876476ull, 4775975411343766270ull}},
+{{8151431595355949021ull, 3576872318769784237ull,
+ 14225527698118371403ull, 5969969264179707837ull}},
+{{14800975512622324180ull, 18306148453744394008ull,
+ 3946851567365800541ull, 7462461580224634797ull}},
+{{9250609695388952613ull, 13747185792803940207ull,
+ 4772625238817319290ull, 4664038487640396748ull}},
+{{6951576100808802862ull, 7960610204150149451ull,
+ 5965781548521649113ull, 5830048109550495935ull}},
+{{4077784107583615673ull, 14562448773615074718ull,
+ 2845540917224673487ull, 7287560136938119919ull}},
+{{14320602171334295400ull, 13591374948591455493ull,
+ 17391984201813005571ull, 9109450171172649898ull}},
+{{11256219366297628577ull, 6188766333655965731ull,
+ 15481676144560516386ull, 5693406356982906186ull}},
+{{9458588189444647817ull, 16959329953924732972ull,
+ 10128723143845869674ull, 7116757946228632733ull}},
+{{11823235236805809771ull, 11975790405551140407ull,
+ 17272589948234724997ull, 8895947432785790916ull}},
+{{14307051050644712963ull, 9790712012683156706ull,
+ 1571996680791927315ull, 5559967145491119323ull}},
+{{8660441776451115396ull, 7626703997426557979ull,
+ 15800053906272072856ull, 6949958931863899153ull}},
+{{6213866202136506341ull, 9533379996783197474ull,
+ 5915009327557927358ull, 8687448664829873942ull}},
+{{8495352394762704367ull, 1346676479562110517ull,
+ 17531938885005868311ull, 5429655415518671213ull}},
+{{15230876511880768363ull, 15518403654734801858ull,
+ 8079865550975171676ull, 6787069269398339017ull}},
+{{9815223602996184645ull, 951260494708950707ull,
+ 14711517957146352500ull, 8483836586747923771ull}},
+{{3828671742658921452ull, 9817909846047870000ull,
+ 6888855714002776360ull, 5302397866717452357ull}},
+{{4785839678323651814ull, 12272387307559837500ull,
+ 13222755660930858354ull, 6627997333396815446ull}},
+{{5982299597904564768ull, 6117112097595021067ull,
+ 7305072539308797135ull, 8284996666746019308ull}},
+{{1433094239476659028ull, 10740724088637970023ull,
+ 13789042373922774017ull, 5178122916716262067ull}},
+{{15626425854627987497ull, 18037591129224850432ull,
+ 12624616948976079617ull, 6472653645895327584ull}},
+{{1086288244575432755ull, 8711930856248899329ull,
+ 15780771186220099522ull, 8090817057369159480ull}},
+{{12208145198928115232ull, 10056642803582949984ull,
+ 9862981991387562201ull, 5056760660855724675ull}},
+{{15260181498660144040ull, 17182489522906075384ull,
+ 7717041470807064847ull, 6320950826069655844ull}},
+{{628482799615628434ull, 16866425885205206327ull,
+ 9646301838508831059ull, 7901188532587069805ull}},
+{{7310330777400849627ull, 8235673169039560002ull,
+ 8334781658281713364ull, 4938242832866918628ull}},
+{{18361285508605837842ull, 10294591461299450002ull,
+ 10418477072852141705ull, 6172803541083648285ull}},
+{{13728234848902521494ull, 17479925345051700407ull,
+ 17634782359492565035ull, 7716004426354560356ull}},
+{{15497675808205157790ull, 8619110331443618802ull,
+ 1798366937828077339ull, 4822502766471600223ull}},
+{{10148722723401671430ull, 6162201895877135599ull,
+ 16083016727567260386ull, 6028128458089500278ull}},
+{{8074217385824701383ull, 16926124406701195307ull,
+ 10880398872604299674ull, 7535160572611875348ull}},
+{{2740542856926744413ull, 15190513772615634971ull,
+ 16023621332232463104ull, 4709475357882422092ull}},
+{{17260736626440594228ull, 541398142059992097ull,
+ 1582782591581027265ull, 5886844197353027616ull}},
+{{7740862727768579072ull, 5288433696002378026ull,
+ 1978478239476284081ull, 7358555246691284520ull}},
+{{452706372855948032ull, 11222228138430360437ull,
+ 2473097799345355101ull, 9198194058364105650ull}},
+{{2588784492248661472ull, 9319735595732669225ull,
+ 6157372143018234842ull, 5748871286477566031ull}},
+{{7847666633738214744ull, 2426297457811060723ull,
+ 3085029160345405649ull, 7186089108096957539ull}},
+{{5197897273745380526ull, 7644557840691213808ull,
+ 17691344505713920773ull, 8982611385121196923ull}},
+{{3248685796090862829ull, 7083691659645702582ull,
+ 8751247306857506531ull, 5614132115700748077ull}},
+{{13284229281968354344ull, 4242928556129740323ull,
+ 15550745151999271068ull, 7017665144625935096ull}},
+{{11993600584033055026ull, 5303660695162175404ull,
+ 991687366289537219ull, 8772081430782418871ull}},
+{{16719372401875435200ull, 1008944925262665675ull,
+ 7537333631572042618ull, 5482550894239011794ull}},
+{{16287529483916906095ull, 10484553193433107902ull,
+ 198295002610277464ull, 6853188617798764743ull}},
+{{11136039818041356811ull, 13105691491791384878ull,
+ 14082926808545010542ull, 8566485772248455928ull}},
+{{2348338867848460103ull, 3579371163942227645ull,
+ 8801829255340631589ull, 5354053607655284955ull}},
+{{7547109603237963033ull, 9085899973355172460ull,
+ 6390600550748401582ull, 6692567009569106194ull}},
+{{9433887004047453791ull, 2134002929839189767ull,
+ 17211622725290277786ull, 8365708761961382742ull}},
+{{12813708405170740475ull, 5945437849576881508ull,
+ 6145578184879035712ull, 5228567976225864214ull}},
+{{16017135506463425594ull, 7431797311971101885ull,
+ 16905344767953570448ull, 6535709970282330267ull}},
+{{6186361327797118281ull, 9289746639963877357ull,
+ 16519994941514575156ull, 8169637462852912834ull}},
+{{6172318839086892878ull, 15029463686832199156ull,
+ 14936682856873997376ull, 5106023414283070521ull}},
+{{7715398548858616097ull, 340085534830697329ull, 4835795515810333009ull,
+ 6382529267853838152ull}},
+{{14255934204500658025ull, 5036792936965759565ull,
+ 6044744394762916261ull, 7978161584817297690ull}},
+{{11215801887026605218ull, 5453838594817293680ull,
+ 8389651265154210567ull, 4986350990510811056ull}},
+{{14019752358783256522ull, 2205612225094229196ull,
+ 10487064081442763209ull, 6232938738138513820ull}},
+{{17524690448479070652ull, 7368701299795174399ull,
+ 13108830101803454011ull, 7791173422673142275ull}},
+{{17870460557940501014ull, 2299595303158290047ull,
+ 5887175804413464805ull, 4869483389170713922ull}},
+{{17726389678998238363ull, 7486180147375250463ull,
+ 16582341792371606814ull, 6086854236463392402ull}},
+{{17546301080320410050ull, 134353147364287271ull,
+ 11504555203609732710ull, 7608567795579240503ull}},
+{{17883967202841338137ull, 13919028772384843256ull,
+ 14107876029897164799ull, 4755354872237025314ull}},
+{{3908214929842121056ull, 12787099947053666167ull,
+ 8411473000516680191ull, 5944193590296281643ull}},
+{{273582643875263416ull, 11372188915389694805ull,
+ 5902655232218462335ull, 7430241987870352054ull}},
+{{2476832161635733587ull, 14025147099759641109ull,
+ 17524217575418702671ull, 4643901242418970033ull}},
+{{7707726220472054887ull, 12919747856272163482ull,
+ 8070213913991214627ull, 5804876553023712542ull}},
+{{411285738735292801ull, 11537998801912816449ull, 864395355634242476ull,
+ 7256095691279640678ull}},
+{{5125793191846503905ull, 14422498502391020561ull,
+ 10303866231397578903ull, 9070119614099550847ull}},
+{{14732835790972534701ull, 15931590591635469706ull,
+ 13357445422264568670ull, 5668824758812219279ull}},
+{{9192672701860892568ull, 10691116202689561325ull,
+ 12085120759403322934ull, 7086030948515274099ull}},
+{{16102526895753503614ull, 4140523216507175848ull,
+ 10494714930826765764ull, 8857538685644092624ull}},
+{{10064079309845939759ull, 11811199047171760713ull,
+ 6559196831766728602ull, 5535961678527557890ull}},
+{{17191785155734812603ull, 5540626772109925083ull,
+ 17422368076563186561ull, 6919952098159447362ull}},
+{{16878045426241127849ull, 11537469483564794258ull,
+ 12554588058849207393ull, 8649940122699309203ull}},
+{{15160464409828092810ull, 293389399586914555ull,
+ 5540774527567060669ull, 5406212576687068252ull}},
+{{14338894493857728108ull, 4978422767911031098ull,
+ 6925968159458825836ull, 6757765720858835315ull}},
+{{8700246080467384327ull, 6223028459888788873ull,
+ 4045774180896144391ull, 8447207151073544144ull}},
+{{16966868846360584965ull, 10806921815071574901ull,
+ 2528608863060090244ull, 5279504469420965090ull}},
+{{7373528002668567494ull, 13508652268839468627ull,
+ 12384133115679888613ull, 6599380586776206362ull}},
+{{4605223984908321463ull, 3050757280767172072ull,
+ 6256794357745084959ull, 8249225733470257953ull}},
+{{2878264990567700915ull, 8824252328120564401ull,
+ 15439711519659147859ull, 5155766083418911220ull}},
+{{8209517256637014047ull, 6418629391723317597ull, 852895325864383208ull,
+ 6444707604273639026ull}},
+{{14873582589223655463ull, 8023286739654146996ull,
+ 10289491194185254818ull, 8055884505342048782ull}},
+{{72617081410008856ull, 9626240230711229777ull, 1819245977938396357ull,
+ 5034927815838780489ull}},
+{{4702457370189898974ull, 16644486306816425125ull,
+ 6885743490850383350ull, 6293659769798475611ull}},
+{{10489757731164761622ull, 11582235846665755598ull,
+ 3995493345135591284ull, 7867074712248094514ull}},
+{{1944412563550588110ull, 16462269441020873057ull,
+ 7108869359137132456ull, 4916921695155059071ull}},
+{{7042201722865623041ull, 2131092727566539705ull,
+ 4274400680494027667ull, 6146152118943823839ull}},
+{{13414438172009416705ull, 16498923964740338343ull,
+ 731314832190146679ull, 7682690148679779799ull}},
+{{15301552885146967297ull, 17229356505603793320ull,
+ 7374600797759923530ull, 4801681342924862374ull}},
+{{680197032724157505ull, 12313323595149965843ull,
+ 18441623034054680221ull, 6002101678656077967ull}},
+{{14685304346187360593ull, 1556596438655293591ull,
+ 18440342774140962373ull, 7502627098320097459ull}},
+{{16095844244008182227ull, 3278715783373252446ull,
+ 9219371224624407531ull, 4689141936450060912ull}},
+{{10896433268155451976ull, 17933452784498729270ull,
+ 11524214030780509413ull, 5861427420562576140ull}},
+{{4397169548339539161ull, 8581757925341247876ull,
+ 14405267538475636767ull, 7326784275703220175ull}},
+{{5496461935424423952ull, 6115511388249171941ull,
+ 13394898404667158055ull, 9158480344629025219ull}},
+{{5741131718853958922ull, 10739723645296814319ull,
+ 6065968493703279832ull, 5724050215393140762ull}},
+{{2564728630140060748ull, 13424654556621017899ull,
+ 16805832653983875598ull, 7155062769241425952ull}},
+{{17040968842957239647ull, 7557446158921496565ull,
+ 2560546743770292882ull, 8943828461551782441ull}},
+{{12956448536061968732ull, 9335089867753323257ull,
+ 13129556760924902811ull, 5589892788469864025ull}},
+{{2360502614795297203ull, 7057176316264266168ull,
+ 2576887895873964802ull, 6987365985587330032ull}},
+{{2950628268494121503ull, 18044842432185108518ull,
+ 3221109869842456002ull, 8734207481984162540ull}},
+{{15679200723090989652ull, 15889712538543080727ull,
+ 11236565705506310809ull, 5458879676240101587ull}},
+{{14987314885436349160ull, 6027082617896687197ull,
+ 9434021113455500608ull, 6823599595300126984ull}},
+{{4899085551513272738ull, 7533853272370858997ull,
+ 11792526391819375760ull, 8529499494125158730ull}},
+{{5367771478909489414ull, 4708658295231786873ull,
+ 11982015013314497754ull, 5330937183828224206ull}},
+{{11321400367064249671ull, 15109194905894509399ull,
+ 5754146729788346384ull, 6663671479785280258ull}},
+{{9540064440402924185ull, 439749558658585133ull,
+ 16416055449090208789ull, 8329589349731600322ull}},
+{{8268383284465521568ull, 2580686483375309660ull,
+ 14871720674108768397ull, 5205993343582250201ull}},
+{{10335479105581901959ull, 7837544122646524979ull,
+ 4754592787353796784ull, 6507491679477812752ull}},
+{{8307662863549989545ull, 9796930153308156224ull,
+ 5943240984192245980ull, 8134364599347265940ull}},
+{{5192289289718743466ull, 15346453382672373448ull,
+ 12937897651974929545ull, 5083977874592041212ull}},
+{{6490361612148429332ull, 5348008673058303098ull,
+ 16172372064968661932ull, 6354972343240051515ull}},
+{{17336324052040312473ull, 6685010841322878872ull,
+ 15603779062783439511ull, 7943715429050064394ull}},
+{{10835202532525195296ull, 11095660803467881151ull,
+ 14364047932667037598ull, 4964822143156290246ull}},
+{{8932317147229106216ull, 4646203967480075631ull,
+ 8731687878979021190ull, 6206027678945362808ull}},
+{{6553710415608994866ull, 15031126996204870347ull,
+ 10914609848723776487ull, 7757534598681703510ull}},
+{{1790226000541927839ull, 16311983400269125823ull,
+ 2209945137024972400ull, 4848459124176064694ull}},
+{{16072840555959573511ull, 1943235176626855662ull,
+ 11985803458135991309ull, 6060573905220080867ull}},
+{{10867678658094691080ull, 7040729989210957482ull,
+ 10370568304242601232ull, 7575717381525101084ull}},
+{{11403985179736569829ull, 4400456243256848426ull,
+ 15704977227006401578ull, 4734823363453188177ull}},
+{{5031609437815936479ull, 14723942340925836341ull,
+ 5796163478475838260ull, 5918529204316485222ull}},
+{{10901197815697308502ull, 18404927926157295426ull,
+ 16468576384949573633ull, 7398161505395606527ull}},
+{{11424934653238205718ull, 4585550926207227785ull,
+ 17210389268234565377ull, 4623850940872254079ull}},
+{{446110261265593435ull, 10343624676186422636ull,
+ 16901300566865818817ull, 5779813676090317599ull}},
+{{557637826581991794ull, 17541216863660416199ull,
+ 16514939690154885617ull, 7224767095112896999ull}},
+{{14532105338509653455ull, 8091463024293356536ull,
+ 16031988594266219118ull, 9030958868891121249ull}},
+{{9082565836568533409ull, 445478371755959931ull, 3102463843775305093ull,
+ 5644349293056950781ull}},
+{{6741521277283278858ull, 5168533983122337818ull,
+ 8489765823146519270ull, 7055436616321188476ull}},
+{{17650273633458874380ull, 15684039515757698080ull,
+ 10612207278933149087ull, 8819295770401485595ull}},
+{{11031421020911796488ull, 16720053724989643156ull,
+ 4326786540119524227ull, 5512059856500928497ull}},
+{{13789276276139745609ull, 16288381137809666041ull,
+ 10020169193576793188ull, 6890074820626160621ull}},
+{{3401537289892518300ull, 1913732348552530936ull,
+ 17136897510398379390ull, 8612593525782700776ull}},
+{{2125960806182823937ull, 15031140773127495547ull,
+ 10710560943998987118ull, 5382870953614187985ull}},
+{{16492509063010693634ull, 9565553929554593625ull,
+ 17999887198426121802ull, 6728588692017734981ull}},
+{{6780578273481203330ull, 2733570375088466224ull,
+ 8664800942750488541ull, 8410735865022168727ull}},
+{{4237861420925752081ull, 4014324493643985342ull,
+ 12333029616860137194ull, 5256709915638855454ull}},
+{{14520698813011965910ull, 14241277653909757485ull,
+ 6192914984220395684ull, 6570887394548569318ull}},
+{{4315815460982793675ull, 17801597067387196857ull,
+ 16964515767130270413ull, 8213609243185711647ull}},
+{{14226599709182715807ull, 13431841176330691987ull,
+ 17520351382097500864ull, 5133505776991069779ull}},
+{{13171563618051006855ull, 16789801470413364984ull,
+ 17288753209194488176ull, 6416882221238837224ull}},
+{{16464454522563758568ull, 2540507764307154614ull,
+ 3164197437783558605ull, 8021102776548546531ull}},
+{{5678598058174961201ull, 3893660361905665586ull,
+ 18118524463110581792ull, 5013189235342841581ull}},
+{{16321619609573477309ull, 4867075452382081982ull,
+ 8813097523606063528ull, 6266486544178551977ull}},
+{{11178652475112070829ull, 6083844315477602478ull,
+ 15628057922934967314ull, 7833108180223189971ull}},
+{{2374971778517656364ull, 8414088715600889453ull,
+ 7461693192620660619ull, 4895692612639493732ull}},
+{{7580400741574458359ull, 5905924876073723912ull,
+ 9327116490775825774ull, 6119615765799367165ull}},
+{{9475500926968072949ull, 16605778131946930698ull,
+ 16270581631897170121ull, 7649519707249208956ull}},
+{{10533874097782433497ull, 3461082304825749830ull,
+ 945741483080955518ull, 4780949817030755598ull}},
+{{3943970585373266063ull, 13549724917886963096ull,
+ 10405548890705970205ull, 5976187271288444497ull}},
+{{4929963231716582579ull, 3102098092076540158ull,
+ 17618622131809850661ull, 7470234089110555621ull}},
+{{16916285075105027824ull, 4244654316761531550ull,
+ 13317481841594850615ull, 4668896305694097263ull}},
+{{11921984307026508972ull, 694131877524526534ull,
+ 12035166283566175365ull, 5836120382117621579ull}},
+{{5679108346928360407ull, 5479350865333046072ull,
+ 10432271836030331302ull, 7295150477647026974ull}},
+{{7098885433660450508ull, 16072560618521083398ull,
+ 3816967758183138319ull, 9118938097058783718ull}},
+{{18271861451319945280ull, 16962879414216758979ull,
+ 16220662904146625161ull, 5699336310661739823ull}},
+{{18228140795722543696ull, 7368541212488785012ull,
+ 15664142611755893548ull, 7124170388327174779ull}},
+{{4338431920943628004ull, 9210676515610981266ull,
+ 14968492246267479031ull, 8905212985408968474ull}},
+{{7323205969017155406ull, 12674201849897945147ull,
+ 13966993672344562298ull, 5565758115880605296ull}},
+{{4542321442844056354ull, 6619380275517655626ull,
+ 17458742090430702873ull, 6957197644850756620ull}},
+{{14901273840409846250ull, 12885911362824457436ull,
+ 3376683539328826975ull, 8696497056063445776ull}},
+{{89924113401378099ull, 14971223629406367754ull, 2110427212080516859ull,
+ 5435310660039653610ull}},
+{{9335777178606498431ull, 14102343518330571788ull,
+ 11861406051955421882ull, 6794138325049567012ull}},
+{{11669721473258123039ull, 8404557361058438927ull,
+ 14826757564944277353ull, 8492672906311958765ull}},
+{{14211104948427408755ull, 16782063396729994089ull,
+ 11572566487303867297ull, 5307920566444974228ull}},
+{{3928823130252097232ull, 7142521190630328900ull,
+ 14465708109129834122ull, 6634900708056217785ull}},
+{{4911028912815121540ull, 18151523525142686933ull,
+ 4247077081130128940ull, 8293625885070272232ull}},
+{{5375236079723144915ull, 2121330166359403525ull,
+ 2654423175706330588ull, 5183516178168920145ull}},
+{{11330731118081319047ull, 2651662707949254406ull,
+ 7929714988060301139ull, 6479395222711150181ull}},
+{{4940041860746873001ull, 17149636440218731720ull,
+ 14523829753502764327ull, 8099244028388937726ull}},
+{{3087526162966795626ull, 17636051802777789181ull,
+ 4465707577511839800ull, 5062027517743086079ull}},
+{{8471093722135882436ull, 3598320679762684860ull, 970448453462411847ull,
+ 6327534397178857599ull}},
+{{10588867152669853045ull, 18332958904985519787ull,
+ 15048118622110178520ull, 7909417996473571998ull}},
+{{4312198961204964201ull, 11458099315615949867ull,
+ 4793388120391473671ull, 4943386247795982499ull}},
+{{778562683078817348ull, 9710938126092549430ull, 1380049132061954185ull,
+ 6179232809744978124ull}},
+{{10196575390703297492ull, 16750358676043074691ull,
+ 1725061415077442731ull, 7724041012181222655ull}},
+{{4067016609975866981ull, 8163131163313227730ull,
+ 7995692412064483563ull, 4827525632613264159ull}},
+{{14307142799324609534ull, 5592227935714146758ull,
+ 5382929496653216550ull, 6034407040766580199ull}},
+{{8660556462300986109ull, 16213656956497459256ull,
+ 2116975852389132783ull, 7543008800958225249ull}},
+{{5412847788938116319ull, 17051064625451993891ull,
+ 12852324953811677749ull, 4714380500598890780ull}},
+{{2154373717745257494ull, 7478772726532828652ull,
+ 16065406192264597187ull, 5892975625748613475ull}},
+{{2692967147181571867ull, 4736779889738647911ull,
+ 15470071721903358580ull, 7366219532185766844ull}},
+{{17201266989259128546ull, 5920974862173309888ull,
+ 890845578669646609ull, 9207774415232208556ull}},
+{{10750791868286955342ull, 15229824334926788440ull,
+ 9780150523523304938ull, 5754859009520130347ull}},
+{{13438489835358694177ull, 9813908381803709742ull,
+ 7613502135976743269ull, 7193573761900162934ull}},
+{{7574740257343591913ull, 16879071495682025082ull,
+ 293505633116153278ull, 8991967202375203668ull}},
+{{9345898679267132850ull, 5937733666373877772ull,
+ 9406813057552371607ull, 5619979501484502292ull}},
+{{11682373349083916062ull, 2810481064539959311ull,
+ 11758516321940464509ull, 7024974376855627865ull}},
+{{9991280667927507173ull, 8124787349102337043ull, 863087347143416924ull,
+ 8781217971069534832ull}},
+{{3938707408240998032ull, 14301364130043736460ull,
+ 539429591964635577ull, 5488261231918459270ull}},
+{{4923384260301247539ull, 4041647107272506863ull,
+ 9897659026810570280ull, 6860326539898074087ull}},
+{{1542544306949171520ull, 5052058884090633579ull,
+ 7760387765085824946ull, 8575408174872592609ull}},
+{{17104991256339089864ull, 7769222820984033890ull,
+ 16379457399247110351ull, 5359630109295370380ull}},
+{{12157867033569086522ull, 5099842507802654459ull,
+ 2027577675349336323ull, 6699537636619212976ull}},
+{{10585647773533970249ull, 1763117116325930170ull,
+ 2534472094186670404ull, 8374422045774016220ull}},
+{{11227715876886119310ull, 10325320234558482164ull,
+ 10807417095721444810ull, 5234013778608760137ull}},
+{{14034644846107649137ull, 3683278256343326897ull,
+ 18120957388079193917ull, 6542517223260950171ull}},
+{{3708248002352397709ull, 9215783838856546526ull,
+ 18039510716671604492ull, 8178146529076187714ull}},
+{{16152713056752412280ull, 14983236936140117386ull,
+ 15886380216347140711ull, 5111341580672617321ull}},
+{{10967519284085739542ull, 14117360151747758829ull,
+ 6022917215151762177ull, 6389176975840771652ull}},
+{{18321085123534562332ull, 3811642134402534824ull,
+ 7528646518939702722ull, 7986471219800964565ull}},
+{{11450678202209101457ull, 6993962352428972169ull,
+ 7011247083551008153ull, 4991544512375602853ull}},
+{{478289697479213110ull, 13354138958963603116ull,
+ 13375744872866148095ull, 6239430640469503566ull}},
+{{597862121849016387ull, 12080987680277115991ull,
+ 7496309054227909311ull, 7799288300586879458ull}},
+{{7291192853796717098ull, 14468146327814279350ull,
+ 9296879177319831223ull, 4874555187866799661ull}},
+{{18337363104100672180ull, 13473496891340461283ull,
+ 16232784990077176933ull, 6093193984833499576ull}},
+{{18310017861698452321ull, 3006813058893412892ull,
+ 1844237163886919551ull, 7616492481041874471ull}},
+{{2220389126706756893ull, 8796787189449464914ull,
+ 8070177255070406575ull, 4760307800651171544ull}},
+{{11998858445238221924ull, 6384297968384443238ull,
+ 10087721568838008219ull, 5950384750813964430ull}},
+{{5775201019693001597ull, 3368686442053166144ull,
+ 3386279924192734466ull, 7437980938517455538ull}},
+{{3609500637308125998ull, 6717115044710616744ull,
+ 6728110971047846945ull, 4648738086573409711ull}},
+{{4511875796635157498ull, 13008079824315658834ull,
+ 3798452695382420777ull, 5810922608216762139ull}},
+{{14863216782648722680ull, 2425041725112409830ull,
+ 136379850800638068ull, 7263653260270952674ull}},
+{{9355648941456127542ull, 3031302156390512288ull,
+ 9393846850355573393ull, 9079566575338690842ull}},
+{{5847280588410079714ull, 13423778893812539940ull,
+ 10482840299899621274ull, 5674729109586681776ull}},
+{{7309100735512599642ull, 7556351580410899117ull,
+ 13103550374874526593ull, 7093411386983352220ull}},
+{{13748061937818137457ull, 14057125493941011800ull,
+ 16379437968593158241ull, 8866764233729190275ull}},
+{{8592538711136335911ull, 1868174406072050519ull,
+ 7931305721157029949ull, 5541727646080743922ull}},
+{{6128987370493031984ull, 6946904026017451053ull, 690760114591511628ull,
+ 6927159557600929903ull}},
+{{12272920231543677884ull, 8683630032521813816ull,
+ 14698508198521553247ull, 8658949447001162378ull}},
+{{7670575144714798678ull, 12344797797967215491ull,
+ 13798253642503358683ull, 5411843404375726486ull}},
+{{4976532912466110443ull, 10819311229031631460ull,
+ 8024445016274422546ull, 6764804255469658108ull}},
+{{6220666140582638054ull, 4300766999434763517ull,
+ 10030556270343028183ull, 8456005319337072635ull}},
+{{6193759347077842736ull, 9605508402287809054ull,
+ 3963254659750698662ull, 5285003324585670397ull}},
+{{16965571220702079228ull, 2783513466004985509ull,
+ 9565754343115761232ull, 6606254155732087996ull}},
+{{7371905970595435322ull, 3479391832506231887ull,
+ 11957192928894701540ull, 8257817694665109995ull}},
+{{11524970259263228933ull, 11397991932171170737ull,
+ 5167402571345494510ull, 5161136059165693747ull}},
+{{571154768796872454ull, 5024117878359187614ull, 1847567195754480234ull,
+ 6451420073957117184ull}},
+{{9937315497850866375ull, 15503519384803760325ull,
+ 2309458994693100292ull, 8064275092446396480ull}},
+{{8516665195370485437ull, 466327578647574395ull, 1443411871683187683ull,
+ 5040171932778997800ull}},
+{{6034145475785718892ull, 14417967528591631706ull,
+ 1804264839603984603ull, 6300214915973747250ull}},
+{{16766053881586924422ull, 13410773392312151728ull,
+ 11478703086359756562ull, 7875268644967184062ull}},
+{{10478783675991827764ull, 12993419388622482734ull,
+ 2562503410547459947ull, 4922042903104490039ull}},
+{{3875107558135008897ull, 11630088217350715514ull,
+ 17038187318466488646ull, 6152553628880612548ull}},
+{{14067256484523536929ull, 5314238234833618584ull,
+ 2850990074373559192ull, 7690692036100765686ull}},
+{{8792035302827210581ull, 3321398896771011615ull,
+ 15616926851765638207ull, 4806682522562978553ull}},
+{{6378358110106625322ull, 17986806676245928231ull,
+ 5686100509424884046ull, 6008353153203723192ull}},
+{{3361261619205893748ull, 13260136308452634481ull,
+ 7107625636781105058ull, 7510441441504653990ull}},
+{{13630003558072153353ull, 12899271211210284454ull,
+ 18277324078270354373ull, 4694025900940408743ull}},
+{{7814132410735415883ull, 2289030958730691856ull,
+ 18234969079410555063ull, 5867532376175510929ull}},
+{{9767665513419269854ull, 16696346753695528532ull,
+ 8958653293981030116ull, 7334415470219388662ull}},
+{{12209581891774087317ull, 2423689368409859049ull,
+ 1974944580621511838ull, 9168019337774235828ull}},
+{{713459654717722717ull, 15349863910538325618ull,
+ 10457712399743220706ull, 5730012086108897392ull}},
+{{10115196605251929205ull, 9963957851318131214ull,
+ 13072140499679025883ull, 7162515107636121740ull}},
+{{3420623719710135698ull, 7843261295720276114ull,
+ 16340175624598782354ull, 8953143884545152175ull}},
+{{6749575843246222715ull, 9513724328252560475ull,
+ 17130138793015320827ull, 5595714927840720109ull}},
+{{3825283785630390490ull, 7280469391888312690ull,
+ 7577615435986987322ull, 6994643659800900137ull}},
+{{14004976768892763920ull, 18323958776715166670ull,
+ 14083705313411122056ull, 8743304574751125171ull}},
+{{4141424462130589546ull, 11452474235446979169ull,
+ 6496472811668257333ull, 5464565359219453232ull}},
+{{9788466596090624837ull, 480534739026560249ull, 8120591014585321667ull,
+ 6830706699024316540ull}},
+{{16847269263540668950ull, 14435726479065364023ull,
+ 10150738768231652083ull, 8538383373780395675ull}},
+{{17447072317353999950ull, 6716486040202158562ull,
+ 4038368720931088600ull, 5336489608612747297ull}},
+{{12585468359837724129ull, 8395607550252698203ull,
+ 9659646919591248654ull, 6670612010765934121ull}},
+{{11120149431369767257ull, 1271137400961096946ull,
+ 16686244667916448722ull, 8338265013457417651ull}},
+{{11561779413033492440ull, 5406146894028073495ull,
+ 8123059908234086499ull, 5211415633410886032ull}},
+{{9840538247864477646ull, 2145997599107703965ull,
+ 10153824885292608124ull, 6514269541763607540ull}},
+{{16912358828257984961ull, 2682496998884629956ull,
+ 12692281106615760155ull, 8142836927204509425ull}},
+{{1346852230806464793ull, 17817461688798751387ull,
+ 1015146663993768240ull, 5089273079502818391ull}},
+{{15518623343790244703ull, 3825083037288887617ull,
+ 15103991385274374013ull, 6361591349378522988ull}},
+{{5563221124455642167ull, 9393039815038497426ull, 433245157883415900ull,
+ 7951989186723153736ull}},
+{{8088699221212164258ull, 15094021921253836699ull,
+ 270778223677134937ull, 4969993241701971085ull}},
+{{5499188008087817419ull, 5032469346285132162ull,
+ 4950158798023806576ull, 6212491552127463856ull}},
+{{16097357046964547581ull, 6290586682856415202ull,
+ 6187698497529758220ull, 7765614440159329820ull}},
+{{14672534172780230143ull, 13154988713640035309ull,
+ 13090683597810874695ull, 4853509025099581137ull}},
+{{4505609660693123966ull, 11832049873622656233ull,
+ 2528296441981429657ull, 6066886281374476422ull}},
+{{10243698094293792862ull, 955004286746156579ull,
+ 12383742589331562880ull, 7583607851718095527ull}},
+{{4096468299719926587ull, 596877679216347862ull,
+ 14657368145973308656ull, 4739754907323809704ull}},
+{{14343957411504684041ull, 746097099020434827ull,
+ 18321710182466635820ull, 5924693634154762130ull}},
+{{13318260745953467147ull, 932621373775543534ull,
+ 13678765691228518967ull, 7405867042693452663ull}},
+{{3712226947793529063ull, 7500417386250796565ull,
+ 15466757584658906210ull, 4628666901683407914ull}},
+{{9251969703169299233ull, 152149695958719898ull,
+ 10110074943968856955ull, 5785833627104259893ull}},
+{{2341590092106848233ull, 14025245175230563585ull,
+ 17249279698388459097ull, 7232292033880324866ull}},
+{{7538673633560948195ull, 3696498413756040769ull,
+ 12338227586130798064ull, 9040365042350406083ull}},
+{{16240886067044062382ull, 2310311508597525480ull,
+ 5405549232118054838ull, 5650228151469003802ull}},
+{{1854363510095526362ull, 12111261422601682659ull,
+ 15980308577002344355ull, 7062785189336254752ull}},
+{{16153012442901571664ull, 10527390759824715419ull,
+ 1528641647543378828ull, 8828481486670318441ull}},
+{{7789789767599788338ull, 15802991261745222945ull,
+ 12484616075783081527ull, 5517800929168949025ull}},
+{{14348923227927123327ull, 15142053058754140777ull,
+ 1770712039446688197ull, 6897251161461186282ull}},
+{{4101095979626740446ull, 5092508268160512260ull,
+ 11436762086163136055ull, 8621563951826482852ull}},
+{{11786557024121488587ull, 10100346695241402018ull,
+ 16371348340706735842ull, 5388477469891551782ull}},
+{{5509824243297084926ull, 3402061332196976715ull,
+ 11240813389028643995ull, 6735596837364439728ull}},
+{{2275594285693968253ull, 18087634720528384606ull,
+ 14051016736285804993ull, 8419496046705549660ull}},
+{{15257304483840893870ull, 4387242672689158522ull,
+ 18005257497033403929ull, 5262185029190968537ull}},
+{{9848258567946341530ull, 10095739359288836057ull,
+ 8671513816009591199ull, 6577731286488710672ull}},
+{{16922009228360314816ull, 8007988180683657167ull,
+ 10839392270011988999ull, 8222164108110888340ull}},
+{{17493784795366278616ull, 11922521640568367585ull,
+ 15997992205612268932ull, 5138852567569305212ull}},
+{{8032172938925684558ull, 14903152050710459482ull,
+ 1550746183305784549ull, 6423565709461631516ull}},
+{{816844136802329889ull, 4793882008105910641ull, 1938432729132230687ull,
+ 8029457136827039395ull}},
+{{12039742631569925941ull, 9913705282707276006ull,
+ 17352421520203501843ull, 5018410710516899621ull}},
+{{5826306252607631618ull, 7780445584956707104ull,
+ 7855468844972213592ull, 6273013388146124527ull}},
+{{7282882815759539523ull, 9725556981195883880ull,
+ 5207650037787879086ull, 7841266735182655659ull}},
+{{4551801759849712202ull, 1466787094820039521ull, 948938264403730477ull,
+ 4900791709489159787ull}},
+{{10301438218239528156ull, 6445169886952437305ull,
+ 15021230885786826808ull, 6125989636861449733ull}},
+{{17488483791226798099ull, 8056462358690546631ull,
+ 4941480551951369798ull, 7657487046076812167ull}},
+{{17847831397157830668ull, 423602955754203740ull,
+ 10005954372610687980ull, 4785929403798007604ull}},
+{{3863045172737736719ull, 529503694692754676ull,
+ 12507442965763359975ull, 5982411754747509505ull}},
+{{4828806465922170899ull, 14496937673648107057ull,
+ 1799245651922036256ull, 7478014693434386882ull}},
+{{14547219087269826572ull, 9060586046030066910ull,
+ 5736214550878660564ull, 4673759183396491801ull}},
+{{8960651822232507407ull, 11325732557537583638ull,
+ 11781954207025713609ull, 5842198979245614751ull}},
+{{1977442740935858450ull, 322107641639815836ull,
+ 10115756740354754108ull, 7302748724057018439ull}},
+{{2471803426169823063ull, 402634552049769795ull, 8033009907016054731ull,
+ 9128435905071273049ull}},
+{{17685778205851997078ull, 16392547659526963785ull,
+ 16549846237953503966ull, 5705272440669545655ull}},
+{{8272164702032832636ull, 11267312537553928924ull,
+ 16075621779014492054ull, 7131590550836932069ull}},
+{{10340205877541040795ull, 4860768635087635347ull,
+ 6259469168485951356ull, 8914488188546165087ull}},
+{{4156785664249456545ull, 12261352433784547900ull,
+ 10829697257944801453ull, 5571555117841353179ull}},
+{{5195982080311820681ull, 1491632486948521163ull,
+ 8925435554003613913ull, 6964443897301691474ull}},
+{{1883291581962387947ull, 6476226627113039358ull,
+ 1933422405649741583ull, 8705554871627114343ull}},
+{{15012115294008656179ull, 10965170669586731454ull,
+ 8125918031172170345ull, 5440971794766946464ull}},
+{{9541772080656044416ull, 18318149355410802222ull,
+ 10157397538965212931ull, 6801214743458683080ull}},
+{{2703843063965279712ull, 18286000675836114874ull,
+ 12696746923706516164ull, 8501518429323353850ull}},
+{{6301587933405687724ull, 2205378385542795988ull,
+ 12547152845743960507ull, 5313449018327096156ull}},
+{{7876984916757109655ull, 16591781037210658697ull,
+ 15683941057179950633ull, 6641811272908870195ull}},
+{{14457917164373774972ull, 6904668241231159659ull,
+ 14993240303047550388ull, 8302264091136087744ull}},
+{{6730355218519915406ull, 13538789687624250595ull,
+ 9370775189404718992ull, 5188915056960054840ull}},
+{{3801258004722506353ull, 16923487109530313244ull,
+ 11713468986755898740ull, 6486143821200068550ull}},
+{{4751572505903132941ull, 2707614813203339939ull,
+ 5418464196590097618ull, 8107679776500085688ull}},
+{{663889806975764137ull, 6303945276679475366ull, 3386540122868811011ull,
+ 5067299860312553555ull}},
+{{10053234295574480979ull, 3268245577421956303ull,
+ 18068233208868177476ull, 6334124825390691943ull}},
+{{7954856851040713319ull, 4085306971777445379ull,
+ 17973605492657833941ull, 7917656031738364929ull}},
+{{2665942522686751873ull, 4859159866574597314ull,
+ 4315974405270064357ull, 4948535019836478081ull}},
+{{12555800190213215649ull, 10685635851645634546ull,
+ 10006654025014968350ull, 6185668774795597601ull}},
+{{6471378200911743753ull, 4133672777702267375ull,
+ 17120003549696098342ull, 7732085968494497001ull}},
+{{10962140403210921702ull, 16418603541346080821ull,
+ 3782473190918979607ull, 4832553730309060626ull}},
+{{18314361522441040031ull, 15911568408255213122ull,
+ 13951463525503500317ull, 6040692162886325782ull}},
+{{13669579866196524231ull, 6054402455036852691ull,
+ 8215957370024599589ull, 7550865203607907228ull}},
+{{6237644407159133692ull, 6089844543611726884ull,
+ 14358345393120150551ull, 4719290752254942017ull}},
+{{7797055508948917115ull, 3000619661087270701ull,
+ 4112873686118024477ull, 5899113440318677522ull}},
+{{14358005404613534298ull, 8362460594786476280ull,
+ 14364464144502306404ull, 7373891800398346902ull}},
+{{17947506755766917872ull, 10453075743483095350ull,
+ 8732208143773107197ull, 9217364750497933628ull}},
+{{6605505703926935766ull, 8839015348890628546ull,
+ 14681002126712967806ull, 5760852969061208517ull}},
+{{17480254166763445516ull, 1825397149258509874ull,
+ 4516194603109046046ull, 7201066211326510647ull}},
+{{12626945671599531087ull, 11505118473427913151ull,
+ 1033557235458919653ull, 9001332764158138309ull}},
+{{14809370072390788785ull, 9496542055106139671ull,
+ 2951816281375518735ull, 5625832977598836443ull}},
+{{13900026572061098078ull, 7258991550455286685ull,
+ 17524828407001562131ull, 7032291221998545553ull}},
+{{3539975159794208885ull, 4462053419641720453ull,
+ 8070977453469788952ull, 8790364027498181942ull}},
+{{4518327484085074505ull, 2788783387276075283ull, 432674889991230191ull,
+ 5493977517186363714ull}},
+{{1036223336678955227ull, 17321037289377257816ull,
+ 9764215649343813546ull, 6867471896482954642ull}},
+{{1295279170848694034ull, 12427924574866796462ull,
+ 2981897524824991125ull, 8584339870603693303ull}},
+{{14644607537062597484ull, 10073295868505441740ull,
+ 8781214980656701309ull, 5365212419127308314ull}},
+{{18305759421328246854ull, 17203305854059190079ull,
+ 1753146688966100828ull, 6706515523909135393ull}},
+{{18270513258232920664ull, 3057388243864435983ull,
+ 6803119379635013940ull, 8383144404886419241ull}},
+{{18336599814036657271ull, 11134239689270048297ull,
+ 15781164658340353472ull, 5239465253054012025ull}},
+{{9085691712263657877ull, 13917799611587560372ull,
+ 5891397767643278128ull, 6549331566317515032ull}},
+{{11357114640329572346ull, 17397249514484450465ull,
+ 7364247209554097660ull, 8186664457896893790ull}},
+{{180667622564900860ull, 1649908909698005733ull,
+ 18437712561253474750ull, 5116665286185558618ull}},
+{{4837520546633513979ull, 11285758173977282974ull,
+ 13823768664712067629ull, 6395831607731948273ull}},
+{{15270272720146668282ull, 272139662189440005ull,
+ 3444652775607920825ull, 7994789509664935342ull}},
+{{11849763459305361628ull, 11699302334936869763ull,
+ 15987966040037114227ull, 4996743443540584588ull}},
+{{10200518305704314131ull, 10012441900243699300ull,
+ 1538213476336841168ull, 6245929304425730736ull}},
+{{12750647882130392664ull, 12515552375304624125ull,
+ 1922766845421051460ull, 7807411630532163420ull}},
+{{10274997935545189367ull, 17045592271420165886ull,
+ 10425101315242932970ull, 4879632269082602137ull}},
+{{3620375382576710901ull, 12083618302420431550ull,
+ 17643062662481054117ull, 6099540336353252671ull}},
+{{13748841265075664434ull, 1269464822743375725ull,
+ 17442142309673929743ull, 7624425420441565839ull}},
+{{10898868799885984223ull, 7710944541855691684ull,
+ 17818867971187287945ull, 4765265887775978649ull}},
+{{13623585999857480279ull, 14250366695747002509ull,
+ 8438526908701946219ull, 5956582359719973312ull}},
+{{3194424444539686637ull, 13201272351256365233ull,
+ 10548158635877432774ull, 7445727949649966640ull}},
+{{13525730323905773908ull, 3639109201107840366ull,
+ 6592599147423395484ull, 4653579968531229150ull}},
+{{7683790868027441577ull, 4548886501384800458ull,
+ 17464120971134020163ull, 5816974960664036437ull}},
+{{381366548179526163ull, 1074422108303612669ull, 7995093158635361492ull,
+ 7271218700830045547ull}},
+{{5088394203651795608ull, 1343027635379515836ull,
+ 5382180429866813961ull, 9089023376037556934ull}},
+{{12403618414137148063ull, 12368607318180667157ull,
+ 17198920823948922437ull, 5680639610023473083ull}},
+{{1669464962389271367ull, 1625701092443670235ull,
+ 16886965011508765143ull, 7100799512529341354ull}},
+{{15921889258268752920ull, 15867184420836751505ull,
+ 11885334227531180620ull, 8875999390661676693ull}},
+{{3033651758776888719ull, 693618226168193883ull, 9734176901420681840ull,
+ 5547499619163547933ull}},
+{{17627122753753274611ull, 867022782710242353ull,
+ 16779407145203240204ull, 6934374523954434916ull}},
+{{8198845386909429552ull, 1083778478387802942ull,
+ 2527514857794498639ull, 8667968154943043646ull}},
+{{512592348391005566ull, 7594890576633458695ull,
+ 15414754841403725361ull, 5417480096839402278ull}},
+{{14475798490770920669ull, 14105299239219211272ull,
+ 10045071514899880893ull, 6771850121049252848ull}},
+{{18094748113463650837ull, 3796565993741850378ull,
+ 12556339393624851117ull, 8464812651311566060ull}},
+{{15920903589342169677ull, 4678696755302350438ull,
+ 17071084157870307756ull, 5290507907069728787ull}},
+{{10677757449822936288ull, 5848370944127938048ull,
+ 16727169178910496791ull, 6613134883837160984ull}},
+{{13347196812278670360ull, 2698777661732534656ull,
+ 2462217399928569373ull, 8266418604796451231ull}},
+{{8341998007674168975ull, 3992579047796528112ull,
+ 8456414902596437714ull, 5166511627997782019ull}},
+{{10427497509592711219ull, 14214095846600435948ull,
+ 5958832609818159238ull, 6458139534997227524ull}},
+{{13034371886990889024ull, 8544247771395769127ull,
+ 7448540762272699048ull, 8072674418746534405ull}},
+{{15064011457010387496ull, 5340154857122355704ull,
+ 6961180985634130857ull, 5045421511716584003ull}},
+{{383270247553432754ull, 11286879589830332535ull,
+ 4089790213615275667ull, 6306776889645730004ull}},
+{{14314145864723954654ull, 9496913468860527764ull,
+ 5112237767019094584ull, 7883471112057162505ull}},
+{{18169713202307247467ull, 5935570918037829852ull,
+ 14724363650455403875ull, 4927169445035726565ull}},
+{{4265397429174507718ull, 2807777629119899412ull,
+ 4570396507787091132ull, 6158961806294658207ull}},
+{{5331746786468134647ull, 3509722036399874265ull,
+ 1101309616306476011ull, 7698702257868322759ull}},
+{{14861556787611053915ull, 18334477337245779079ull,
+ 7605847537832629362ull, 4811688911167701724ull}},
+{{13965259966086429489ull, 13694724634702448041ull,
+ 9507309422290786703ull, 6014611138959627155ull}},
+{{3621516902325873149ull, 12506719774950672148ull,
+ 7272450759436095475ull, 7518263923699533944ull}},
+{{11486820100808446526ull, 5510856850130476140ull,
+ 4545281724647559672ull, 4698914952312208715ull}},
+{{14358525126010558158ull, 6888571062663095175ull,
+ 1069916137382061686ull, 5873643690390260894ull}},
+{{13336470389085809793ull, 17834085865183644777ull,
+ 10560767208582352915ull, 7342054612987826117ull}},
+{{2835529931075098529ull, 17680921313052168068ull,
+ 17812645029155329048ull, 9177568266234782646ull}},
+{{10995578243776712389ull, 11050575820657605042ull,
+ 6521217124794692751ull, 5735980166396739154ull}},
+{{4521100767866114678ull, 9201533757394618399ull,
+ 17374893442848141747ull, 7169975207995923942ull}},
+{{1039689941405255444ull, 6890231178315885095ull,
+ 12495244766705401376ull, 8962469009994904928ull}},
+{{7567335241019366509ull, 4306394486447428184ull,
+ 7809527979190875860ull, 5601543131246815580ull}},
+{{9459169051274208136ull, 5382993108059285230ull,
+ 9761909973988594825ull, 7001928914058519475ull}},
+{{2600589277237984361ull, 11340427403501494442ull,
+ 7590701449058355627ull, 8752411142573149344ull}},
+{{6237054316701128130ull, 4781924117974740074ull,
+ 4744188405661472267ull, 5470256964108218340ull}},
+{{17019689932731185970ull, 1365719129041037188ull,
+ 5930235507076840334ull, 6837821205135272925ull}},
+{{2827868342204430847ull, 10930520948156072294ull,
+ 12024480402273438321ull, 8547276506419091156ull}},
+{{15602475769159932991ull, 18360790638666014943ull,
+ 16738672288275674758ull, 5342047816511931972ull}},
+{{14891408693022528335ull, 13727616261477742871ull,
+ 2476596286635041832ull, 6677559770639914966ull}},
+{{14002574847850772515ull, 17159520326847178589ull,
+ 12319117395148578098ull, 8346949713299893707ull}},
+{{11057452289120426774ull, 15336386222706874522ull,
+ 5393605362754167359ull, 5216843570812433567ull}},
+{{4598443324545757659ull, 14558796759956205249ull,
+ 2130320685015321295ull, 6521054463515541959ull}},
+{{10359740174109584978ull, 13586809931517868657ull,
+ 16497958911551315331ull, 8151318079394427448ull}},
+{{18004052654886960371ull, 6185913197984973958ull,
+ 10311224319719572082ull, 5094573799621517155ull}},
+{{13281693781753924656ull, 16955763534335993256ull,
+ 8277344381222077198ull, 6368217249526896444ull}},
+{{16602117227192405820ull, 11971332381065215762ull,
+ 10346680476527596498ull, 7960271561908620555ull}},
+{{14988009285422641542ull, 12093768756593147755ull,
+ 4160832288616053859ull, 4975169726192887847ull}},
+{{14123325588350914023ull, 10505524927314046790ull,
+ 589354342342679420ull, 6218962157741109809ull}},
+{{8430784948583866721ull, 13131906159142558488ull,
+ 5348378946355737179ull, 7773702697176387261ull}},
+{{5269240592864916701ull, 5901598340250405103ull,
+ 5648579850686029689ull, 4858564185735242038ull}},
+{{1974864722653757972ull, 11988683943740394283ull,
+ 16284096850212312919ull, 6073205232169052547ull}},
+{{16303638958599361176ull, 10374168911248104949ull,
+ 15743435044338003245ull, 7591506540211315684ull}},
+{{12495617358338294687ull, 8789698578743759545ull,
+ 616274865856476220ull, 4744691587632072303ull}},
+{{1784463642640704647ull, 10987123223429699432ull,
+ 14605401637602758987ull, 5930864484540090378ull}},
+{{2230579553300880809ull, 9122218010859736386ull,
+ 9033380010148672926ull, 7413580605675112973ull}},
+{{6005798239240438410ull, 1089700238359947337ull,
+ 7951705515556614531ull, 4633487878546945608ull}},
+{{12118933817477935916ull, 15197183353232097883ull,
+ 9939631894445768163ull, 5791859848183682010ull}},
+{{10536981253420031991ull, 14384793173112734450ull,
+ 3201167831202434396ull, 7239824810229602513ull}},
+{{3947854529920264181ull, 17980991466390918063ull,
+ 8613145807430430899ull, 9049781012787003141ull}},
+{{9384938108841246969ull, 8932276657280629837ull,
+ 7689059138857713264ull, 5656113132991876963ull}},
+{{16342858654478946615ull, 11165345821600787296ull,
+ 4999637905144753676ull, 7070141416239846204ull}},
+{{1981829244389131653ull, 13956682277000984121ull,
+ 6249547381430942095ull, 8837676770299807755ull}},
+{{12767858323811677043ull, 15640455450766696931ull,
+ 1600124104180644857ull, 5523547981437379847ull}},
+{{11348136886337208400ull, 5715511258176207452ull,
+ 15835213185507969784ull, 6904434976796724808ull}},
+{{14185171107921510500ull, 7144389072720259315ull,
+ 1347272408175410614ull, 8630543720995906011ull}},
+{{6559888933237250111ull, 18300301225732325784ull,
+ 16982946319605489297ull, 5394089825622441256ull}},
+{{8199861166546562638ull, 9040318476883243518ull,
+ 2781938825797310006ull, 6742612282028051571ull}},
+{{1026454421328427489ull, 2077026059249278590ull,
+ 17312481587528801220ull, 8428265352535064463ull}},
+{{14476592068612430893ull, 10521513323885574926ull,
+ 17737830019846582618ull, 5267665845334415289ull}},
+{{8872368048910762808ull, 3928519618002192850ull,
+ 8337229469526064561ull, 6584582306668019112ull}},
+{{1867088024283677702ull, 9522335540930128967ull,
+ 10421536836907580701ull, 8230727883335023890ull}},
+{{8084459042818380420ull, 8257302722295024556ull,
+ 11125146541494625842ull, 5144204927084389931ull}},
+{{10105573803522975525ull, 1098256366014004887ull,
+ 9294747158440894399ull, 6430256158855487414ull}},
+{{8020281235976331502ull, 15207878512799669821ull,
+ 2395061911196342190ull, 8037820198569359268ull}},
+{{7318518781698901141ull, 4893238052072405734ull,
+ 10720285731352489677ull, 5023637624105849542ull}},
+{{18371520513978402234ull, 10728233583517895071ull,
+ 4176985127335836288ull, 6279547030132311928ull}},
+{{18352714624045614888ull, 13410291979397368839ull,
+ 5221231409169795360ull, 7849433787665389910ull}},
+{{18387975667669591161ull, 8381432487123355524ull,
+ 17098327686013285812ull, 4905896117290868693ull}},
+{{4538225510877437336ull, 10476790608904194406ull,
+ 7537851552234443553ull, 6132370146613585867ull}},
+{{14896153925451572478ull, 17707674279557630911ull,
+ 4810628421865666537ull, 7665462683266982334ull}},
+{{16227625231048314655ull, 4149767397082437463ull,
+ 16841700818948205298ull, 4790914177041863958ull}},
+{{15672845520383005414ull, 14410581283207822637ull,
+ 11828753986830480814ull, 5988642721302329948ull}},
+{{5755998845196593056ull, 8789854567155002489ull,
+ 14785942483538101018ull, 7485803401627912435ull}},
+{{15126714324316340420ull, 10105345122899264459ull,
+ 6935371042997619184ull, 4678627126017445272ull}},
+{{14296706886968037621ull, 12631681403624080574ull,
+ 8669213803747023980ull, 5848283907521806590ull}},
+{{8647511571855271218ull, 15789601754530100718ull,
+ 1613145217829004167ull, 7310354884402258238ull}},
+{{1586017427964313214ull, 15125316174735237994ull,
+ 11239803559141031017ull, 9137943605502822797ull}},
+{{5602946910905083663ull, 2535793581568441890ull,
+ 9330720233676838338ull, 5711214753439264248ull}},
+{{16227055675486130387ull, 12393114013815328170ull,
+ 11663400292096047922ull, 7139018441799080310ull}},
+{{11060447557502887175ull, 6268020480414384405ull,
+ 5355878328265284095ull, 8923773052248850388ull}},
+{{9218622732652998437ull, 10835041827900072109ull,
+ 12570795992020578367ull, 5577358157655531492ull}},
+{{16134964434243635950ull, 8932116266447702232ull,
+ 15713494990025722959ull, 6971697697069414365ull}},
+{{1721961469094993321ull, 6553459314632239887ull,
+ 5806810682249989987ull, 8714622121336767957ull}},
+{{7993754945825452682ull, 1790069062431455977ull,
+ 5935099685619937694ull, 5446638825835479973ull}},
+{{14603879700709203756ull, 11460958364894095779ull,
+ 12030560625452310021ull, 6808298532294349966ull}},
+{{13643163607459116791ull, 491139900835456012ull,
+ 5814828744960611719ull, 8510373165367937458ull}},
+{{17750349291516723803ull, 7224491465663241863ull,
+ 8245953984027770228ull, 5318983228354960911ull}},
+{{17576250595968516849ull, 9030614332079052329ull,
+ 5695756461607324881ull, 6648729035443701139ull}},
+{{8135255189678482349ull, 15899953933526203316ull,
+ 2508009558581768197ull, 8310911294304626424ull}},
+{{14307906530403827277ull, 12243314217667571024ull,
+ 1567505974113605123ull, 5194319558940391515ull}},
+{{17884883163004784096ull, 10692456753657075876ull,
+ 15794440522924170116ull, 6492899448675489393ull}},
+{{3909359880046428503ull, 13365570942071344846ull,
+ 5907992598373048933ull, 8116124310844361742ull}},
+{{16278407980311181527ull, 10659324848008284480ull,
+ 17527553429265319295ull, 5072577694277726088ull}},
+{{1901265901679425292ull, 8712470041582967697ull,
+ 3462697712872097503ull, 6340722117847157611ull}},
+{{6988268395526669519ull, 6278901533551321717ull,
+ 18163430196372285591ull, 7925902647308947013ull}},
+{{6673510756417862402ull, 10841842486110657929ull,
+ 13657986881946372446ull, 4953689154568091883ull}},
+{{12953574463949715906ull, 4328931070783546603ull,
+ 12460797584005577654ull, 6192111443210114854ull}},
+{{11580282061509756978ull, 14634535875334209062ull,
+ 6352624943152196259ull, 7740139304012643568ull}},
+{{2625990270016210208ull, 6840741912870186712ull,
+ 3970390589470122662ull, 4837587065007902230ull}},
+{{3282487837520262760ull, 17774299427942509198ull,
+ 14186360273692429135ull, 6046983831259877787ull}},
+{{13326481833755104257ull, 17606188266500748593ull,
+ 13121264323688148515ull, 7558729789074847234ull}},
+{{1411522118455858305ull, 8698024657349273919ull,
+ 12812476220732480726ull, 4724206118171779521ull}},
+{{15599460703351986593ull, 1649158784831816590ull,
+ 2180537220633437196ull, 5905257647714724402ull}},
+{{10275953842335207433ull, 2061448481039770738ull,
+ 11949043562646572303ull, 7381572059643405502ull}},
+{{11034157169886892550ull, 8205934328290938567ull,
+ 2856466208226719785ull, 4613482537277128439ull}},
+{{9181010443931227783ull, 14869103928791061113ull,
+ 17405640815565563443ull, 5766853171596410548ull}},
+{{16087949073341422633ull, 13974693892561438487ull,
+ 3310306945747402688ull, 7208566464495513186ull}},
+{{15498250323249390387ull, 17468367365701798109ull,
+ 13361255719039029168ull, 9010708080619391482ull}},
+{{11992249461244562944ull, 10917729603563623818ull,
+ 12962470842826781134ull, 5631692550387119676ull}},
+{{5766939789700927872ull, 4423789967599753965ull,
+ 16203088553533476418ull, 7039615687983899595ull}},
+{{11820360755553547744ull, 14753109496354468264ull,
+ 15642174673489457618ull, 8799519609979874494ull}},
+{{7387725472220967340ull, 13832379453648930569ull,
+ 5164673152503523107ull, 5499699756237421559ull}},
+{{13846342858703597079ull, 12678788298633775307ull,
+ 1844155422202015980ull, 6874624695296776949ull}},
+{{12696242554952108445ull, 15848485373292219134ull,
+ 6916880296179907879ull, 8593280869120971186ull}},
+{{3323465578417679874ull, 16822832385948718815ull,
+ 8934736203539830328ull, 5370800543200606991ull}},
+{{17989390028304263555ull, 2581796408726346902ull,
+ 6556734235997400007ull, 6713500679000758739ull}},
+{{13263365498525553635ull, 17062303566190097340ull,
+ 3584231776569362104ull, 8391875848750948424ull}},
+{{17512975473433246830ull, 10663939728868810837ull,
+ 2240144860355851315ull, 5244922405469342765ull}},
+{{8056161286509394826ull, 8718238642658625643ull,
+ 7411867093872202048ull, 6556153006836678456ull}},
+{{5458515589709355628ull, 10897798303323282054ull,
+ 9264833867340252560ull, 8195191258545848070ull}},
+{{17246630298850510980ull, 6811123939577051283ull,
+ 1178835148660269946ull, 5121994536591155044ull}},
+{{16946601855135750820ull, 17737276961326089912ull,
+ 1473543935825337432ull, 6402493170738943805ull}},
+{{2736508245210136909ull, 3724852127948060775ull,
+ 6453615938209059695ull, 8003116463423679756ull}},
+{{8627846680897417424ull, 9245561607608619840ull,
+ 13256881998235438117ull, 5001947789639799847ull}},
+{{10784808351121771780ull, 16168638027938162704ull,
+ 11959416479366909742ull, 6252434737049749809ull}},
+{{13481010438902214725ull, 10987425498067927572ull,
+ 1114212543926473466ull, 7815543421312187262ull}},
+{{17649003561168660012ull, 11478826954719842636ull,
+ 14531440895236209628ull, 4884714638320117038ull}},
+{{3614510377751273398ull, 14348533693399803296ull,
+ 8940929082190486227ull, 6105893297900146298ull}},
+{{4518137972189091748ull, 13323981098322366216ull,
+ 1952789315883331976ull, 7632366622375182873ull}},
+{{2823836232618182343ull, 8327488186451478885ull,
+ 12749708368495552245ull, 4770229138984489295ull}},
+{{8141481309200115832ull, 15021046251491736510ull,
+ 11325449442192052402ull, 5962786423730611619ull}},
+{{953479599645368982ull, 9552935777509894830ull, 9545125784312677599ull,
+ 7453483029663264524ull}},
+{{14430982805060519326ull, 12888113888584766124ull,
+ 15189075652050199307ull, 4658426893539540327ull}},
+{{18038728506325649157ull, 11498456342303569751ull,
+ 14374658546635361230ull, 5823033616924425409ull}},
+{{17936724614479673543ull, 5149698391024686381ull,
+ 4133265128012037826ull, 7278792021155531762ull}},
+{{8585847712817428216ull, 15660495025635633785ull,
+ 14389953446869823090ull, 9098490026444414702ull}},
+{{16895369866579362395ull, 14399495409449659019ull,
+ 4382034885866251527ull, 5686556266527759189ull}},
+{{16507526314796815090ull, 13387683243384685870ull,
+ 10089229625760202313ull, 7108195333159698986ull}},
+{{11411035856641243054ull, 2899545998948693626ull,
+ 3388164995345477084ull, 8885244166449623733ull}},
+{{11743583428828164813ull, 11035588286197709324ull,
+ 4423446131304617129ull, 5553277604031014833ull}},
+{{14679479286035206016ull, 18406171376174524559ull,
+ 10140993682558159315ull, 6941597005038768541ull}},
+{{13737663089116619616ull, 18396028201790767795ull,
+ 17287928121625087048ull, 8676996256298460676ull}},
+{{6280196421484193308ull, 11497517626119229872ull,
+ 1581583039160903597ull, 5423122660186537923ull}},
+{{7850245526855241635ull, 536838977366873628ull,
+ 15812036854233293209ull, 6778903325233172403ull}},
+{{9812806908569052044ull, 5282734740135979939ull,
+ 15153360049364228607ull, 8473629156541465504ull}},
+{{3827161308641963576ull, 10219238240226069318ull,
+ 9470850030852642879ull, 5296018222838415940ull}},
+{{14007323672657230277ull, 8162361781855198743ull,
+ 11838562538565803599ull, 6620022778548019925ull}},
+{{12897468572394149943ull, 5591266208891610525ull,
+ 963145117925090787ull, 8275028473185024907ull}},
+{{10366760866960037666ull, 1188698371343562626ull,
+ 16742866763199039406ull, 5171892795740640566ull}},
+{{3735079046845271275ull, 10709245001034229091ull,
+ 11705211417144023449ull, 6464865994675800708ull}},
+{{57162790129201189ull, 17998242269720174268ull,
+ 14631514271430029311ull, 8081082493344750885ull}},
+{{9259098780685526552ull, 18166430446216190773ull,
+ 11450539428857462271ull, 5050676558340469303ull}},
+{{16185559494284296093ull, 18096352039342850562ull,
+ 9701488267644439935ull, 6313345697925586629ull}},
+{{11008577331000594309ull, 18008754030751175299ull,
+ 16738546352982937823ull, 7891682122406983286ull}},
+{{4574517822661677491ull, 18173000296860566418ull,
+ 5849905452186948235ull, 4932301326504364554ull}},
+{{14941519315181872672ull, 18104564352648320118ull,
+ 16535753852088461102ull, 6165376658130455692ull}},
+{{9453527107122565031ull, 13407333403955624340ull,
+ 2222948241401024762ull, 7706720822663069616ull}},
+{{15131826478806378953ull, 12991269395899653116ull,
+ 1389342650875640476ull, 4816700514164418510ull}},
+{{468039024798422075ull, 16239086744874566396ull,
+ 10960050350449326403ull, 6020875642705523137ull}},
+{{585048780998027594ull, 15687172412665820091ull,
+ 18311748956489045908ull, 7526094553381903921ull}},
+{{16506556552619624910ull, 581110721061361748ull,
+ 4527314070164571837ull, 4703809095863689951ull}},
+{{2186451617064979522ull, 5338074419754090090ull,
+ 1047456569278326892ull, 5879761369829612439ull}},
+{{11956436558186000210ull, 6672593024692612612ull,
+ 15144378766880072327ull, 7349701712287015548ull}},
+{{14945545697732500262ull, 3729055262438377861ull,
+ 483729384890538793ull, 9187127140358769436ull}},
+{{11646809070296506616ull, 13859874585092455923ull,
+ 9525702902411362553ull, 5741954462724230897ull}},
+{{9946825319443245366ull, 3489785176083406192ull,
+ 16518814646441591096ull, 7177443078405288621ull}},
+{{12433531649304056707ull, 4362231470104257740ull,
+ 6813460252769825158ull, 8971803848006610777ull}},
+{{16994329317669811250ull, 16561452724097324799ull,
+ 15787627704049610483ull, 5607377405004131735ull}},
+{{16631225628659876159ull, 16090129886694268095ull,
+ 15122848611634625200ull, 7009221756255164669ull}},
+{{16177346017397457294ull, 1665918284658283503ull,
+ 5068502709261117789ull, 8761527195318955837ull}},
+{{17028370288514492665ull, 3347041937125121141ull,
+ 5473657202501892570ull, 5475954497074347398ull}},
+{{7450404805360952119ull, 13407174458261177235ull,
+ 16065443539982141520ull, 6844943121342934247ull}},
+{{4701319988273802245ull, 16758968072826471544ull,
+ 15470118406550288996ull, 8556178901678667809ull}},
+{{2938324992671126403ull, 1250983008661768907ull,
+ 2751294976452848767ull, 5347611813549167381ull}},
+{{17507964296121071716ull, 15398786816109374845ull,
+ 8050804738993448862ull, 6684514766936459226ull}},
+{{8049897314869175933ull, 10025111483281942749ull,
+ 840133886887035270ull, 8355643458670574033ull}},
+{{7337028831006928910ull, 1654008658623826314ull,
+ 12054298725372866804ull, 5222277161669108770ull}},
+{{18394658075613436946ull, 2067510823279782892ull,
+ 5844501369861307697ull, 6527846452086385963ull}},
+{{4546578520807244566ull, 7196074547527116520ull,
+ 2693940693899246717ull, 8159808065107982454ull}},
+{{2841611575504527854ull, 6803389601418141777ull,
+ 15518770988969192910ull, 5099880040692489033ull}},
+{{8163700487808047721ull, 17727609038627453029ull,
+ 5563405680929327425ull, 6374850050865611292ull}},
+{{14816311628187447555ull, 8324453243002152574ull,
+ 6954257101161659282ull, 7968562563582014115ull}},
+{{4648508749189766818ull, 9814469295303733263ull,
+ 2040567679012343099ull, 4980351602238758822ull}},
+{{1198949918059820619ull, 7656400600702278675ull,
+ 11774081635620204682ull, 6225439502798448527ull}},
+{{15333745452856939485ull, 347128714023072535ull,
+ 10105916026097867949ull, 7781799378498060659ull}},
+{{16501119935676669034ull, 2522798455478114286ull,
+ 4010354507097473516ull, 4863624611561287912ull}},
+{{11403027882741060485ull, 3153498069347642858ull,
+ 5012943133871841895ull, 6079530764451609890ull}},
+{{5030412816571549798ull, 17776930641966717285ull,
+ 15489550954194578176ull, 7599413455564512362ull}},
+{{5449851019570912576ull, 11110581651229198303ull,
+ 14292655364798999264ull, 4749633409727820226ull}},
+{{2200627756036252816ull, 13888227064036497879ull,
+ 8642447169143973272ull, 5937041762159775283ull}},
+{{16585842750327479732ull, 17360283830045622348ull,
+ 6191372943002578686ull, 7421302202699719104ull}},
+{{1142779682099899025ull, 6238491375351126064ull,
+ 3869608089376611679ull, 4638313876687324440ull}},
+{{1428474602624873781ull, 3186428200761519676ull,
+ 4837010111720764599ull, 5797892345859155550ull}},
+{{1785593253281092226ull, 17818093306234063307ull,
+ 15269634676505731556ull, 7247365432323944437ull}},
+{{16067049621883528994ull, 3825872559083027517ull,
+ 5251985290350000734ull, 9059206790404930547ull}},
+{{12347749022890899573ull, 16226228404709055910ull,
+ 976647797255056506ull, 5662004244003081592ull}},
+{{6211314241758848658ull, 11059413469031544080ull,
+ 1220809746568820633ull, 7077505305003851990ull}},
+{{7764142802198560823ull, 18435952854716818004ull,
+ 10749384220065801599ull, 8846881631254814987ull}},
+{{14075961288228876323ull, 18439999561839093108ull,
+ 4412522128327432047ull, 5529301019534259367ull}},
+{{17594951610286095403ull, 18438313433871478481ull,
+ 903966641981902155ull, 6911626274417824209ull}},
+{{8158631457575455542ull, 18436205773911960198ull,
+ 5741644320904765598ull, 8639532843022280261ull}},
+{{487458642557271810ull, 6910942590267587220ull, 5894370709779172451ull,
+ 5399708026888925163ull}},
+{{609323303196589762ull, 4026992219407096121ull, 2756277368796577660ull,
+ 6749635033611156454ull}},
+{{5373340147423125106ull, 5033740274258870151ull,
+ 12668718747850497883ull, 8437043792013945567ull}},
+{{10275866619780535048ull, 840244662198099892ull,
+ 14835478245047643033ull, 5273152370008715979ull}},
+{{12844833274725668810ull, 5661991846175012769ull,
+ 13932661787882165887ull, 6591440462510894974ull}},
+{{2220983538124922300ull, 2465803789291378058ull,
+ 8192455197997931551ull, 8239300578138618718ull}},
+{{5999800729755464342ull, 8458656395948193142ull, 508598480321319315ull,
+ 5149562861336636699ull}},
+{{16723122949049106235ull, 5961634476507853523ull,
+ 14470806155683812856ull, 6436953576670795873ull}},
+{{16292217667883994889ull, 7452043095634816904ull,
+ 4253449639322602358ull, 8046191970838494842ull}},
+{{10182636042427496806ull, 45840916344372661ull, 7270092043004014378ull,
+ 5028869981774059276ull}},
+{{17339981071461758911ull, 9280673182285241634ull,
+ 9087615053755017972ull, 6286087477217574095ull}},
+{{12451604302472422831ull, 11600841477856552043ull,
+ 6747832798766384561ull, 7857609346521967619ull}},
+{{5476409679831570318ull, 332996896019263171ull, 1911552490015296399ull,
+ 4911005841576229762ull}},
+{{2233826081362074993ull, 14251304175306242676ull,
+ 11612812649373896306ull, 6138757301970287202ull}},
+{{2792282601702593741ull, 8590758182278027537ull,
+ 5292643774862594575ull, 7673446627462859003ull}},
+{{13274391672132590848ull, 12286752891564849066ull,
+ 1002059350075427657ull, 4795904142164286877ull}},
+{{7369617553310962752ull, 1523383059173897621ull,
+ 5864260206021672476ull, 5994880177705358596ull}},
+{{13823707960066091344ull, 1904228823967372026ull,
+ 7330325257527090595ull, 7493600222131698245ull}},
+{{13251503493468694994ull, 17331044079475465180ull,
+ 6887296295168125573ull, 4683500138832311403ull}},
+{{16564379366835868743ull, 7828747044062167763ull,
+ 3997434350532769063ull, 5854375173540389254ull}},
+{{16093788190117448024ull, 5174247786650321800ull,
+ 14220164975020737137ull, 7317968966925486567ull}},
+{{1670491163937258414ull, 11079495751740290155ull,
+ 13163520200348533517ull, 9147461208656858209ull}},
+{{17184958041956644173ull, 9230527854051375298ull,
+ 1309671097576751592ull, 5717163255410536381ull}},
+{{12257825515591029408ull, 11538159817564219123ull,
+ 6248774890398327394ull, 7146454069263170476ull}},
+{{10710595876061398856ull, 5199327735100498096ull,
+ 7810968612997909243ull, 8933067586578963095ull}},
+{{6694122422538374285ull, 943736825224117358ull,
+ 11799384410764775133ull, 5583167241611851934ull}},
+{{17591025065027743665ull, 5791357049957534601ull,
+ 5525858476601193108ull, 6978959052014814918ull}},
+{{8153723276002515869ull, 7239196312446918252ull,
+ 16130695132606267193ull, 8723698815018518647ull}},
+{{14319449084356348226ull, 16053712741347793667ull,
+ 16999213485519998851ull, 5452311759386574154ull}},
+{{13287625337018047378ull, 15455454908257354180ull,
+ 12025644820045222756ull, 6815389699233217693ull}},
+{{16609531671272559223ull, 872574561612141109ull,
+ 1196997969774364734ull, 8519237124041522117ull}},
+{{12686800303759043467ull, 14380417156289751905ull,
+ 3053966740322671910ull, 5324523202525951323ull}},
+{{2023442324416640621ull, 8752149408507414074ull,
+ 17652516480685503600ull, 6655654003157439153ull}},
+{{11752674942375576584ull, 10940186760634267592ull,
+ 8230587545574715788ull, 8319567503946798942ull}},
+{{7345421838984735365ull, 16060988762251193053ull,
+ 532431197556809463ull, 5199729689966749339ull}},
+{{13793463317158307111ull, 15464549934386603412ull,
+ 14500597052228175541ull, 6499662112458436673ull}},
+{{17241829146447883888ull, 5495629362701090553ull,
+ 4290688260003055715ull, 8124577640573045842ull}},
+{{3858614188888845574ull, 1128925342474487644ull,
+ 7293366180929297726ull, 5077861025358153651ull}},
+{{4823267736111056968ull, 10634528714947885363ull,
+ 4505021707734234253ull, 6347326281697692064ull}},
+{{1417398651711433305ull, 17904846912112244608ull,
+ 5631277134667792816ull, 7934157852122115080ull}},
+{{885874157319645816ull, 11190529320070152880ull,
+ 3519548209167370510ull, 4958848657576321925ull}},
+{{1107342696649557270ull, 4764789613232915292ull,
+ 9011121279886601042ull, 6198560821970402406ull}},
+{{1384178370811946587ull, 15179359053395919923ull,
+ 2040529563003475494ull, 7748201027463003008ull}},
+{{17006012546253324281ull, 4875413389945062047ull,
+ 1275330976877172184ull, 4842625642164376880ull}},
+{{16645829664389267447ull, 6094266737431327559ull,
+ 1594163721096465230ull, 6053282052705471100ull}},
+{{16195601062059196405ull, 16841205458643935257ull,
+ 1992704651370581537ull, 7566602565881838875ull}},
+{{3204721636145915897ull, 3608224384011377680ull,
+ 17386341471602471125ull, 4729126603676149296ull}},
+{{4005902045182394872ull, 9121966498441610004ull,
+ 3286182765793537290ull, 5911408254595186621ull}},
+{{5007377556477993589ull, 2179086086197236697ull,
+ 8719414475669309517ull, 7389260318243983276ull}},
+{{14658826018867215754ull, 3667771813086966887ull,
+ 14673006084148094256ull, 4618287698902489547ull}},
+{{13711846505156631788ull, 4584714766358708609ull,
+ 13729571586757729916ull, 5772859623628111934ull}},
+{{3304750076163626023ull, 5730893457948385762ull,
+ 7938592446592386587ull, 7216074529535139918ull}},
+{{13354309632059308336ull, 2551930804008094298ull,
+ 699868521385707426ull, 9020093161918924898ull}},
+{{12958129538464455614ull, 6206642770932446840ull,
+ 5049103844293455045ull, 5637558226199328061ull}},
+{{16197661923080569518ull, 12369989482092946454ull,
+ 10923065823794206710ull, 7046947782749160076ull}},
+{{11023705366995936089ull, 6239114815761407260ull,
+ 13653832279742758388ull, 8808684728436450095ull}},
+{{16113187891227235864ull, 13122818796705655345ull,
+ 15451174202480305848ull, 5505427955272781309ull}},
+{{6306426808751881118ull, 16403523495882069182ull,
+ 5478909697818218598ull, 6881784944090976637ull}},
+{{17106405547794627205ull, 11281032332997810669ull,
+ 11460323140700161152ull, 8602231180113720796ull}},
+{{12997346476585335955ull, 7050645208123631668ull,
+ 16386073999792376528ull, 5376394487571075497ull}},
+{{16246683095731669944ull, 8813306510154539585ull,
+ 6647534444458306948ull, 6720493109463844372ull}},
+{{6473295814382423718ull, 11016633137693174482ull,
+ 8309418055572883685ull, 8400616386829805465ull}},
+{{8657495902416402728ull, 9191238720271928003ull,
+ 16722601330801522063ull, 5250385241768628415ull}},
+{{6210183859593115506ull, 6877362381912522100ull,
+ 16291565645074514675ull, 6562981552210785519ull}},
+{{7762729824491394382ull, 3985016958963264721ull,
+ 15752771037915755440ull, 8203726940263481899ull}},
+{{16380921186375591249ull, 2490635599352040450ull,
+ 7539638889483653198ull, 5127329337664676187ull}},
+{{11252779446114713253ull, 12336666536044826371ull,
+ 4812862593427178593ull, 6409161672080845234ull}},
+{{9454288289216003662ull, 1585775114773869252ull,
+ 15239450278638749050ull, 8011452090101056542ull}},
+{{15132302217614778097ull, 5602795465161056186ull,
+ 4912970405721830252ull, 5007157556313160339ull}},
+{{9692005735163696813ull, 7003494331451320233ull,
+ 1529526988724899911ull, 6258946945391450424ull}},
+{{16726693187382008920ull, 4142681895886762387ull,
+ 1911908735906124889ull, 7823683681739313030ull}},
+{{8148340232900061623ull, 14118391230997696252ull,
+ 15030001015223491767ull, 4889802301087070643ull}},
+{{10185425291125077029ull, 13036303020319732411ull,
+ 14175815250601976805ull, 6112252876358838304ull}},
+{{8120095595478958382ull, 2460320720117501802ull,
+ 17719769063252471007ull, 7640316095448547880ull}},
+{{9686745765601736893ull, 8455229477714520482ull,
+ 11074855664532794379ull, 4775197559655342425ull}},
+{{2885060170147395308ull, 5957350828715762699ull, 8511525383829262ull,
+ 5968996949569178032ull}},
+{{17441383267966407847ull, 16670060572749479181ull,
+ 10639406729786577ull, 7461246186961472540ull}},
+{{13206707551692698857ull, 3501258830327342632ull,
+ 9230021666060892419ull, 4663278866850920337ull}},
+{{16508384439615873571ull, 18211631593191342002ull,
+ 16149213101003503427ull, 5829098583563650421ull}},
+{{11412108512665066155ull, 18152853473061789599ull,
+ 6351458320972215572ull, 7286373229454563027ull}},
+{{9653449622403944790ull, 4244322767617685383ull,
+ 3327636882787881562ull, 9107966536818203784ull}},
+{{12950935041643547350ull, 7264387748188441268ull,
+ 2079773051742425976ull, 5692479085511377365ull}},
+{{16188668802054434187ull, 9080484685235551585ull,
+ 7211402333105420374ull, 7115598856889221706ull}},
+{{6400777947285879022ull, 2127233819689663674ull,
+ 18237624953236551276ull, 8894498571111527132ull}},
+{{8612172235481062293ull, 10552893174160815604ull,
+ 2175143558918068739ull, 5559061606944704458ull}},
+{{10765215294351327866ull, 8579430449273631601ull,
+ 11942301485502361732ull, 6948827008680880572ull}},
+{{18068205136366547737ull, 10724288061592039501ull,
+ 14927876856877952165ull, 8686033760851100715ull}},
+{{13598471219442786288ull, 9008523047708718640ull,
+ 7024080026335026151ull, 5428771100531937947ull}},
+{{16998089024303482859ull, 6648967791208510396ull,
+ 4168414014491394785ull, 6785963875664922434ull}},
+{{2800867206669801958ull, 12922895757438025900ull,
+ 14433889554969019289ull, 8482454844581153042ull}},
+{{10973914041023402032ull, 1159280820757684331ull,
+ 13632866990283024960ull, 5301534277863220651ull}},
+{{9105706532851864636ull, 1449101025947105414ull,
+ 12429397719426393296ull, 6626917847329025814ull}},
+{{2158761129210054987ull, 1811376282433881768ull,
+ 6313375112428215812ull, 8283647309161282268ull}},
+{{1349225705756284367ull, 10355482213375951913ull,
+ 13169231482122410690ull, 5177279568225801417ull}},
+{{6298218150622743362ull, 3720980729865164083ull,
+ 2626481297370849651ull, 6471599460282251772ull}},
+{{3261086669851041299ull, 39539893904067200ull, 3283101621713562064ull,
+ 8089499325352814715ull}},
+{{2038179168656900812ull, 24712433690042000ull, 18192839578066833954ull,
+ 5055937078345509196ull}},
+{{2547723960821126015ull, 9254262578967328308ull,
+ 4294305398873990826ull, 6319921347931886496ull}},
+{{3184654951026407518ull, 2344456186854384577ull,
+ 5367881748592488533ull, 7899901684914858120ull}},
+{{13519624390459974459ull, 3771128125997684312ull,
+ 3354926092870305333ull, 4937438553071786325ull}},
+{{16899530488074968074ull, 9325596175924493294ull,
+ 8805343634515269570ull, 6171798191339732906ull}},
+{{11901041073238934284ull, 2433623183050840810ull,
+ 1783307506289311155ull, 7714747739174666133ull}},
+{{12049836689201721832ull, 17661915553902633170ull,
+ 3420410200644513423ull, 4821717336984166333ull}},
+{{5838923824647376482ull, 17465708423950903559ull,
+ 8887198769233029683ull, 6027146671230207916ull}},
+{{2686968762381832698ull, 17220449511511241545ull,
+ 11108998461541287104ull, 7533933339037759895ull}},
+{{13208570522557115196ull, 10762780944694525965ull,
+ 13860653066104386296ull, 4708708336898599934ull}},
+{{2675655097914230283ull, 13453476180868157457ull,
+ 8102444295775707062ull, 5885885421123249918ull}},
+{{7956254890820175758ull, 7593473189230421013ull, 904683332864858020ull,
+ 7357356776404062398ull}},
+{{14557004631952607602ull, 9491841486538026266ull,
+ 10354226202935848333ull, 9196695970505077997ull}},
+{{13709813913397767655ull, 8238243938299960368ull,
+ 8777234386048599160ull, 5747934981565673748ull}},
+{{17137267391747209569ull, 10297804922874950460ull,
+ 10971542982560748950ull, 7184918726957092185ull}},
+{{2974840165974460345ull, 3648884116738912268ull,
+ 18326114746628324092ull, 8981148408696365231ull}},
+{{11082647140588813524ull, 11503924609816595975ull,
+ 18371350744283784413ull, 5613217755435228269ull}},
+{{9241622907308629001ull, 544847706988581257ull, 9129130375072566805ull,
+ 7016522194294035337ull}},
+{{16163714652563174155ull, 5292745652163114475ull,
+ 16023098987268096410ull, 8770652742867544171ull}},
+{{7796478648638289895ull, 7919652051029334451ull,
+ 7708593857828866304ull, 5481657964292215107ull}},
+{{5133912292370474464ull, 9899565063786668064ull,
+ 5024056303858694976ull, 6852072455365268884ull}},
+{{6417390365463093080ull, 12374456329733335080ull,
+ 6280070379823368720ull, 8565090569206586105ull}},
+{{4010868978414433175ull, 7734035206083334425ull,
+ 15454259033458075210ull, 5353181605754116315ull}},
+{{9625272241445429373ull, 444171970749392223ull,
+ 14706137773395206109ull, 6691477007192645394ull}},
+{{7419904283379398812ull, 5166900981864128183ull,
+ 9159300179889231828ull, 8364346258990806743ull}},
+{{11554969204753206114ull, 12452685150519855922ull,
+ 12642091640071851748ull, 5227716411869254214ull}},
+{{5220339469086731834ull, 15565856438149819903ull,
+ 6579242513235038877ull, 6534645514836567768ull}},
+{{1913738317931026889ull, 5622262492405111167ull,
+ 8224053141543798597ull, 8168306893545709710ull}},
+{{8113615476347973662ull, 5819757066966888431ull, 528347195037486219ull,
+ 5105191808466068569ull}},
+{{5530333327007579173ull, 2663010315281222635ull,
+ 5272120012224245678ull, 6381489760582585711ull}},
+{{2301230640332086062ull, 12552134930956304102ull,
+ 1978463996852919193ull, 7976862200728232139ull}},
+{{15273327205489717501ull, 927555304206608207ull,
+ 17377441062528932160ull, 4985538875455145086ull}},
+{{14479972988434758972ull, 1159444130258260259ull,
+ 12498429291306389392ull, 6231923594318931358ull}},
+{{13488280217116060811ull, 1449305162822825324ull,
+ 6399664577278210932ull, 7789904492898664198ull}},
+{{17653547172552313815ull, 10129187763619041635ull,
+ 17834848416081045544ull, 4868690308061665123ull}},
+{{17455247947263004365ull, 12661484704523802044ull,
+ 17681874501673919026ull, 6085862885077081404ull}},
+{{3372315860369203840ull, 6603483843799976748ull,
+ 3655599053382847167ull, 7607328606346351756ull}},
+{{11331069449585528208ull, 11044706430016067323ull,
+ 11508121445219055287ull, 4754580378966469847ull}},
+{{9552150793554522356ull, 9194197019092696250ull,
+ 9773465788096431205ull, 5943225473708087309ull}},
+{{2716816455088377137ull, 16104432292293258217ull,
+ 16828518253547926910ull, 7429031842135109136ull}},
+{{13227225330498705471ull, 5453584164255898481ull,
+ 10517823908467454319ull, 4643144901334443210ull}},
+{{2698973607841218126ull, 2205294186892485198ull,
+ 3923907848729542091ull, 5803931126668054013ull}},
+{{12597089046656298466ull, 16591675788897770209ull,
+ 9516570829339315517ull, 7254913908335067516ull}},
+{{1911303253038209370ull, 6904536680840049050ull,
+ 11895713536674144397ull, 9068642385418834395ull}},
+{{5806250551576268760ull, 6621178434738724608ull,
+ 5128977951207646296ull, 5667901490886771497ull}},
+{{7257813189470335950ull, 8276473043423405760ull,
+ 11022908457436945774ull, 7084876863608464371ull}},
+{{9072266486837919938ull, 1122219267424481392ull,
+ 9166949553368794314ull, 8856096079510580464ull}},
+{{5670166554273699961ull, 5313073060567688774ull,
+ 5729343470855496446ull, 5535060049694112790ull}},
+{{16311080229696900759ull, 15864713362564386775ull,
+ 16385051375424146365ull, 6918825062117640987ull}},
+{{15777164268693738045ull, 5995833647923319757ull,
+ 15869628200852795053ull, 8648531327647051234ull}},
+{{12166570677147280230ull, 6053239039165768800ull,
+ 14530203643960384812ull, 5405332079779407021ull}},
+{{15208213346434100288ull, 7566548798957211000ull,
+ 4327696499668317303ull, 6756665099724258777ull}},
+{{563522609333073744ull, 4846499980269125847ull,
+ 10021306643012784533ull, 8445831374655323471ull}},
+{{7269730658474252946ull, 5334905496881897606ull,
+ 13180845679524072189ull, 5278644609159577169ull}},
+{{18310535359947591990ull, 11280317889529759911ull,
+ 2640999044122926524ull, 6598305761449471462ull}},
+{{18276483181507102084ull, 14100397361912199889ull,
+ 12524620842008433963ull, 8247882201811839327ull}},
+{{4505272960800856947ull, 6506905341981430979ull,
+ 14745417053896353083ull, 5154926376132399579ull}},
+{{1019905182573683279ull, 3521945659049400820ull,
+ 13820085298943053450ull, 6443657970165499474ull}},
+{{1274881478217104099ull, 13625804110666526833ull,
+ 8051734586824041004ull, 8054572462706874343ull}},
+{{12326015969954159822ull, 17739499606021355078ull,
+ 11949863144406107483ull, 5034107789191796464ull}},
+{{6184147925587923969ull, 17562688489099305944ull,
+ 14937328930507634354ull, 6292634736489745580ull}},
+{{7730184906984904961ull, 12729988574519356622ull,
+ 224917089424991327ull, 7865793420612181976ull}},
+{{219679548438177697ull, 14873771886715679745ull, 140573180890619579ull,
+ 4916120887882613735ull}},
+{{4886285453975110025ull, 13980528839967211777ull,
+ 14010774531395438186ull, 6145151109853267168ull}},
+{{10719542835896275435ull, 8252289013104238913ull,
+ 17513468164244297733ull, 7681438887316583960ull}},
+{{18228929318503641907ull, 7463523642403843272ull,
+ 10945917602652686083ull, 4800899304572864975ull}},
+{{4339417574420000768ull, 4717718534577416187ull,
+ 9070710984888469700ull, 6001124130716081219ull}},
+{{812585949597613056ull, 5897148168221770234ull, 6726702712683199221ull,
+ 7501405163395101524ull}},
+{{5119552236925896064ull, 5991560614352300348ull,
+ 13427561232281775321ull, 4688378227121938452ull}},
+{{6399440296157370080ull, 12101136786367763339ull,
+ 16784451540352219151ull, 5860472783902423065ull}},
+{{3387614351769324696ull, 10514734964532316270ull,
+ 7145506370158110227ull, 7325590979878028832ull}},
+{{13457889976566431678ull, 8531732687238007433ull,
+ 8931882962697637784ull, 9156988724847536040ull}},
+{{1493652207712937943ull, 5332332929523754646ull,
+ 5582426851686023615ull, 5723117953029710025ull}},
+{{11090437296495948236ull, 2053730143477305403ull,
+ 11589719583034917423ull, 7153897441287137531ull}},
+{{9251360602192547391ull, 16402220734628795466ull,
+ 9875463460366258874ull, 8942371801608921914ull}},
+{{10393786394797730024ull, 14863073977570385070ull,
+ 10783850681156299700ull, 5588982376005576196ull}},
+{{3768860956642386722ull, 132098398253429722ull,
+ 13479813351445374626ull, 6986227970006970245ull}},
+{{13934448232657759210ull, 9388495034671562960ull,
+ 3014708634024554570ull, 8732784962508712807ull}},
+{{8709030145411099506ull, 10479495415097114754ull,
+ 8801721923906428462ull, 5457990601567945504ull}},
+{{1662915644909098575ull, 3875997232016617635ull,
+ 11002152404883035578ull, 6822488251959931880ull}},
+{{15913702611418536930ull, 14068368576875547851ull,
+ 13752690506103794472ull, 8528110314949914850ull}},
+{{7640221122922891630ull, 8792730360547217407ull,
+ 13207117584742259449ull, 5330068946843696781ull}},
+{{4938590385226226633ull, 15602598969111409663ull,
+ 2673838925645660599ull, 6662586183554620977ull}},
+{{1561551963105395387ull, 14891562692961874175ull,
+ 7953984675484463653ull, 8328232729443276221ull}},
+{{7893499004581953973ull, 11613069692314865311ull,
+ 7277083431391483735ull, 5205145455902047638ull}},
+{{5255187737300054562ull, 9904651096966193735ull,
+ 18319726326094130477ull, 6506431819877559547ull}},
+{{1957298653197680299ull, 16992499889635130073ull,
+ 18287971889190275192ull, 8133039774846949434ull}},
+{{12752526704317019947ull, 10620312431021956295ull,
+ 16041668449171309899ull, 5083149859279343396ull}},
+{{11328972361968887030ull, 8663704520350057465ull,
+ 1605341487754585758ull, 6353937324099179246ull}},
+{{326157397178945075ull, 1606258613582796024ull,
+ 11230048896548008006ull, 7942421655123974057ull}},
+{{203848373236840672ull, 14838969688771411227ull, 101251532701423147ull,
+ 4964013534452483786ull}},
+{{14089868521828214552ull, 13937026092536876129ull,
+ 9349936452731554742ull, 6205016918065604732ull}},
+{{3777277597003104478ull, 8197910578816319354ull,
+ 11687420565914443428ull, 7756271147582005915ull}},
+{{6972484516554328203ull, 14347066148614975404ull,
+ 4998794844482833190ull, 4847669467238753697ull}},
+{{8715605645692910253ull, 8710460648913943447ull,
+ 10860179574030929392ull, 6059586834048442121ull}},
+{{6282821038688749912ull, 10888075811142429309ull,
+ 18186910485966049644ull, 7574483542560552651ull}},
+{{6232606158394162647ull, 16028419418818794126ull,
+ 9060976044515087075ull, 4734052214100345407ull}},
+{{17014129734847479117ull, 15423838255096104753ull,
+ 6714534037216470940ull, 5917565267625431759ull}},
+{{7432604113277185184ull, 833053745160579326ull, 3781481528093200772ull,
+ 7396956584531789699ull}},
+{{33691552370852836ull, 9744030627580137887ull, 57582945844556530ull,
+ 4623097865332368562ull}},
+{{13877172495745729757ull, 2956666247620396550ull,
+ 9295350719160471471ull, 5778872331665460702ull}},
+{{8123093582827386389ull, 17530890864807659400ull,
+ 2395816362095813530ull, 7223590414581825878ull}},
+{{10153866978534232986ull, 12690241544154798442ull,
+ 12218142489474542721ull, 9029488018227282347ull}},
+{{10957852880011283520ull, 1013871937455667170ull,
+ 5330496046707895249ull, 5643430011392051467ull}},
+{{4473944063159328592ull, 5879025940246971867ull,
+ 2051434039957481157ull, 7054287514240064334ull}},
+{{980744060521772836ull, 11960468443736102738ull,
+ 11787664586801627254ull, 8817859392800080417ull}},
+{{5224651056253495927ull, 2863606758907676307ull, 449761339109935178ull,
+ 5511162120500050261ull}},
+{{1919127801889482004ull, 12802880485489371192ull,
+ 5173887692314806876ull, 6888952650625062826ull}},
+{{2398909752361852505ull, 16003600606861713990ull,
+ 15690731652248284403ull, 8611190813281328532ull}},
+{{15334376650508321528ull, 7696407370074877291ull,
+ 583335245800401944ull, 5381994258300830333ull}},
+{{14556284794708014006ull, 9620509212593596614ull,
+ 5340855075677890334ull, 6727492822876037916ull}},
+{{8971983956530241699ull, 2802264478887219960ull,
+ 6676068844597362918ull, 8409366028595047395ull}},
+{{5607489972831401062ull, 15586473354586676187ull,
+ 1866700018659657871ull, 5255853767871904622ull}},
+{{2397676447611863424ull, 14871405674805957330ull,
+ 11556747060179348147ull, 6569817209839880777ull}},
+{{12220467596369605087ull, 13977571075080058758ull,
+ 610875769942021472ull, 8212271512299850972ull}},
+{{3026106229303615276ull, 8735981921925036724ull,
+ 9605169393068539228ull, 5132669695187406857ull}},
+{{3782632786629519095ull, 10919977402406295905ull,
+ 16618147759763061939ull, 6415837118984258571ull}},
+{{9339977001714286772ull, 9038285734580481977ull,
+ 16160998681276439520ull, 8019796398730323214ull}},
+{{17366700672139898993ull, 5648928584112801235ull,
+ 5488938157370386796ull, 5012372749206452009ull}},
+{{17096689821747485837ull, 7061160730141001544ull,
+ 11472858715140371399ull, 6265465936508065011ull}},
+{{2924118203474805680ull, 4214764894248864027ull,
+ 9729387375498076345ull, 7831832420635081264ull}},
+{{17968474941667611214ull, 14163443104974009776ull,
+ 6080867109686297715ull, 4894895262896925790ull}},
+{{4013849603374962402ull, 13092617862790124317ull,
+ 16824455923962647952ull, 6118619078621157237ull}},
+{{9628998022646090906ull, 16365772328487655396ull,
+ 7195511849671146228ull, 7648273848276446547ull}},
+{{15241495801008582624ull, 1005235668450008814ull,
+ 2191351896830772441ull, 4780171155172779092ull}},
+{{9828497714405952472ull, 5868230603989898922ull,
+ 2739189871038465551ull, 5975213943965973865ull}},
+{{3062250106152664782ull, 2723602236559985749ull,
+ 8035673357225469843ull, 7469017429957467331ull}},
+{{4219749325559109441ull, 17843152462345848757ull,
+ 2716452839052224699ull, 4668135893723417082ull}},
+{{9886372675376274705ull, 17692254559504923042ull,
+ 12618938085670056682ull, 5835169867154271352ull}},
+{{3134593807365567573ull, 12891946162526377995ull,
+ 15773672607087570853ull, 7293962333942839190ull}},
+{{17753300314489123179ull, 2279874647875808781ull,
+ 10493718722004687759ull, 9117452917428548988ull}},
+{{13401655705769395939ull, 8342450682563462344ull,
+ 15781946238107705657ull, 5698408073392843117ull}},
+{{16752069632211744923ull, 15039749371631715834ull,
+ 5892374742352468359ull, 7123010091741053897ull}},
+{{11716715003409905346ull, 14188000696112256889ull,
+ 11977154446367973353ull, 8903762614676317371ull}},
+{{405417849490108986ull, 1949971407429078700ull, 5179878519766289394ull,
+ 5564851634172698357ull}},
+{{506772311862636232ull, 11660836296141124183ull,
+ 11086534168135249646ull, 6956064542715872946ull}},
+{{14468523445110459002ull, 5352673333321629420ull,
+ 4634795673314286250ull, 8695080678394841183ull}},
+{{18266199190048812684ull, 7957106851753406291ull,
+ 9814276323462510762ull, 5434425423996775739ull}},
+{{18221062969133627951ull, 723011527836982056ull,
+ 7656159385900750549ull, 6793031779995969674ull}},
+{{4329584637707483323ull, 5515450428223615475ull, 346827195521162378ull,
+ 8491289724994962093ull}},
+{{400147389353483125ull, 8058842536067147576ull, 2522610006414420438ull,
+ 5307056078121851308ull}},
+{{500184236691853906ull, 850181133229158662ull, 3153262508018025548ull,
+ 6633820097652314135ull}},
+{{9848602332719593190ull, 1062726416536448327ull,
+ 17776636190304695647ull, 8292275122065392668ull}},
+{{13072905485590827600ull, 7581733037976362060ull,
+ 1887025582085658971ull, 5182671951290870418ull}},
+{{16341131856988534500ull, 4865480279043064671ull,
+ 11582154014461849522ull, 6478339939113588022ull}},
+{{15814728802808280221ull, 15305222385658606647ull,
+ 5254320481222536094ull, 8097924923891985028ull}},
+{{16801734529396256994ull, 4954077972609241250ull,
+ 12507322337618860867ull, 5061203077432490642ull}},
+{{11778796124890545435ull, 1580911447334163659ull,
+ 6410780885168800276ull, 6326503846790613303ull}},
+{{10111809137685793889ull, 1976139309167704574ull,
+ 3401790088033612441ull, 7908129808488266629ull}},
+{{1708194692626233277ull, 12764302114298285119ull,
+ 4431961814234701727ull, 4942581130305166643ull}},
+{{15970301421064955308ull, 11343691624445468494ull,
+ 928266249365989255ull, 6178226412881458304ull}},
+{{10739504739476418327ull, 9567928512129447714ull,
+ 1160332811707486569ull, 7722783016101822880ull}},
+{{11323876480600149359ull, 17509170366149374581ull,
+ 725208007317179105ull, 4826739385063639300ull}},
+{{319787545468022986ull, 8051404902404554515ull, 906510009146473882ull,
+ 6033424231329549125ull}},
+{{14234792487117192445ull, 840884091150917335ull,
+ 5744823529860480257ull, 7541780289161936406ull}},
+{{15814274332089327134ull, 12054767603037793094ull,
+ 17425572761444963872ull, 4713612680726210253ull}},
+{{10544470878256883109ull, 15068459503797241368ull,
+ 7946907896524041128ull, 5892015850907762817ull}},
+{{13180588597821103887ull, 388830306037000094ull,
+ 14545320889082439315ull, 7365019813634703521ull}},
+{{7252363710421604050ull, 14321095937828413830ull,
+ 4346593056070885431ull, 9206274767043379402ull}},
+{{18367785374295666244ull, 15868213988783840499ull,
+ 7328306678471691298ull, 5753921729402112126ull}},
+{{18348045699442194900ull, 10611895449125024816ull,
+ 18383755384944389931ull, 7192402161752640157ull}},
+{{4488313050593192009ull, 8653183292978893117ull,
+ 9144636175898323702ull, 8990502702190800197ull}},
+{{5111038665834438958ull, 796553539684420294ull, 8021240619150146266ull,
+ 5619064188869250123ull}},
+{{15612170369147824505ull, 10219063961460301175ull,
+ 5414864755510294928ull, 7023830236086562654ull}},
+{{14903526943007392728ull, 12773829951825376469ull,
+ 15991952981242644468ull, 8779787795108203317ull}},
+{{11620547348593314407ull, 17207015756745636101ull,
+ 12300813622490346744ull, 5487367371942627073ull}},
+{{690626130459479296ull, 3062025622222493511ull, 1540958972830769719ull,
+ 6859209214928283842ull}},
+{{14698340718356512832ull, 17662590083060280600ull,
+ 11149570752893237956ull, 8574011518660354802ull}},
+{{9186462948972820520ull, 1815746765057899567ull,
+ 11580167738985661627ull, 5358757199162721751ull}},
+{{6871392667788637746ull, 16104741511604538171ull,
+ 9863523655304689129ull, 6698446498953402189ull}},
+{{3977554816308409279ull, 6295868834223509002ull,
+ 16941090587558249316ull, 8373058123691752736ull}},
+{{7097657778620143704ull, 13158290058244468934ull,
+ 10588181617223905822ull, 5233161327307345460ull}},
+{{18095444260129955437ull, 7224490535950810359ull,
+ 13235227021529882278ull, 6541451659134181825ull}},
+{{18007619306735056393ull, 18253985206793288757ull,
+ 2708975721630189135ull, 8176814573917727282ull}},
+{{13560605075923104198ull, 18326269781886887329ull,
+ 6304795844446256113ull, 5110509108698579551ull}},
+{{3115698289621716535ull, 9072779172076445450ull,
+ 3269308787130432238ull, 6388136385873224439ull}},
+{{13117994898881921476ull, 2117601928240781004ull,
+ 17921694039195204010ull, 7985170482341530548ull}},
+{{17422118848655976731ull, 5935187223577876031ull,
+ 1977686737642226698ull, 4990731551463456593ull}},
+{{17165962542392583010ull, 16642356066327120847ull,
+ 7083794440480171276ull, 6238414439329320741ull}},
+{{16845767159563340858ull, 2356201009199349443ull,
+ 13466429069027602000ull, 7798018049161650926ull}},
+{{8222761465513394084ull, 1472625630749593402ull,
+ 3804832149714863346ull, 4873761280726031829ull}},
+{{1055079795036966797ull, 11064154075291767561ull,
+ 9367726205570967086ull, 6092201600907539786ull}},
+{{5930535762223596400ull, 4606820557259933643ull,
+ 2486285720108933050ull, 7615252001134424733ull}},
+{{1400741842176053798ull, 7490948866714846431ull,
+ 3859771584281777108ull, 4759532500709015458ull}},
+{{15585985358002230960ull, 9363686083393558038ull,
+ 14048086517206997193ull, 5949415625886269322ull}},
+{{10259109660648012892ull, 16316293622669335452ull,
+ 8336736109653970683ull, 7436769532357836653ull}},
+{{15635315574759783866ull, 7891840504954640705ull,
+ 7516303077747425629ull, 4647980957723647908ull}},
+{{5709086413167566120ull, 14476486649620688786ull,
+ 9395378847184282036ull, 5809976197154559885ull}},
+{{16359730053314233458ull, 18095608312025860982ull,
+ 16355909577407740449ull, 7262470246443199856ull}},
+{{11226290529788016014ull, 8784452334750162516ull,
+ 1998142898050123946ull, 9078087808053999821ull}},
+{{16239803617972285817ull, 10101968727646239476ull,
+ 3554682320495021418ull, 5673804880033749888ull}},
+{{1853010448755805655ull, 3404088872703023538ull,
+ 4443352900618776773ull, 7092256100042187360ull}},
+{{11539635097799532877ull, 8866797109306167326ull,
+ 5554191125773470966ull, 8865320125052734200ull}},
+{{2600585917697320144ull, 930062174888966675ull, 3471369453608419354ull,
+ 5540825078157958875ull}},
+{{17085790452403813892ull, 10385949755465984151ull,
+ 18174269872292687904ull, 6926031347697448593ull}},
+{{16745552047077379461ull, 12982437194332480189ull,
+ 8882779285083696168ull, 8657539184621810742ull}},
+{{12771813038637056115ull, 8114023246457800118ull,
+ 940051034749922201ull, 5410961990388631714ull}},
+{{6741394261441544336ull, 14754215076499638052ull,
+ 10398435830292178559ull, 6763702487985789642ull}},
+{{8426742826801930420ull, 13831082827197159661ull,
+ 3774672751010447391ull, 8454628109982237053ull}},
+{{7572557275964900465ull, 15561955794639306644ull,
+ 4665013478595223571ull, 5284142568738898158ull}},
+{{9465696594956125581ull, 14840758724871745401ull,
+ 15054638885098805272ull, 6605178210923622697ull}},
+{{16443806762122544880ull, 104204332380130135ull,
+ 4983240551091342879ull, 8256472763654528372ull}},
+{{17194908253967672406ull, 6982656735378663190ull,
+ 12337897381286865107ull, 5160295477284080232ull}},
+{{12270263280604814699ull, 4116634900795941084ull,
+ 15422371726608581384ull, 6450369346605100290ull}},
+{{15337829100756018374ull, 5145793625994926355ull,
+ 10054592621405950922ull, 8062961683256375363ull}},
+{{7280300178758817532ull, 7827807034674216876ull,
+ 3978277379165025374ull, 5039351052035234602ull}},
+{{9100375223448521915ull, 561386756487995287ull,
+ 14196218760811057526ull, 6299188815044043252ull}},
+{{6763783010883264489ull, 9925105482464769917ull,
+ 17745273451013821907ull, 7873986018805054065ull}},
+{{6533207391015734258ull, 3897347917326787246ull,
+ 4173266879242556836ull, 4921241261753158791ull}},
+{{17389881275624443630ull, 4871684896658484057ull,
+ 604897580625808141ull, 6151551577191448489ull}},
+{{7902293539248390826ull, 10701292139250492976ull,
+ 5367807994209648080ull, 7689439471489310611ull}},
+{{4938933462030244266ull, 6688307587031558110ull,
+ 1049036987167336098ull, 4805899669680819132ull}},
+{{15397038864392581141ull, 17583756520644223445ull,
+ 1311296233959170122ull, 6007374587101023915ull}},
+{{5411240525208562714ull, 12756323613950503499ull,
+ 15474178347731126365ull, 7509218233876279893ull}},
+{{1076182319041657744ull, 10278545267932758639ull,
+ 11977204476545647930ull, 4693261396172674933ull}},
+{{15180285954084235892ull, 3624809548061172490ull,
+ 1136447540399896201ull, 5866576745215843667ull}},
+{{9751985405750519057ull, 9142697953503853517ull,
+ 15255617480782033963ull, 7333220931519804583ull}},
+{{16801667775615536725ull, 6816686423452428992ull,
+ 14457835832550154550ull, 9166526164399755729ull}},
+{{10501042359759710454ull, 18095487069939931832ull,
+ 2118618367702764737ull, 5729078852749847331ull}},
+{{13126302949699638067ull, 8784300782142751078ull,
+ 16483331014910619634ull, 7161348565937309163ull}},
+{{7184506650269771775ull, 1757003940823663040ull,
+ 15992477750210886639ull, 8951685707421636454ull}},
+{{4490316656418607360ull, 8015656490655871256ull,
+ 5383612575454416245ull, 5594803567138522784ull}},
+{{5612895820523259200ull, 14631256631747226974ull,
+ 6729515719318020306ull, 6993504458923153480ull}},
+{{16239491812508849808ull, 9065698752829257909ull,
+ 8411894649147525383ull, 8741880573653941850ull}},
+{{12455525392031725082ull, 12583590748159368049ull,
+ 9869120174144591268ull, 5463675358533713656ull}},
+{{1734348684757492640ull, 15729488435199210062ull,
+ 12336400217680739085ull, 6829594198167142070ull}},
+{{11391307892801641608ull, 5826802488716848865ull,
+ 6197128235246148049ull, 8536992747708927588ull}},
+{{202038405359944149ull, 15170966601516500301ull,
+ 13096577183883618338ull, 5335620467318079742ull}},
+{{4864234025127318090ull, 9740336215040849568ull,
+ 7147349442999747115ull, 6669525584147599678ull}},
+{{6080292531409147613ull, 7563734250373674056ull,
+ 18157558840604459702ull, 8336906980184499597ull}},
+{{3800182832130717258ull, 115647888056158381ull,
+ 13654317284591481266ull, 5210566862615312248ull}},
+{{9361914558590784477ull, 9367931896924973784ull,
+ 17067896605739351582ull, 6513208578269140310ull}},
+{{11702393198238480596ull, 2486542834301441422ull,
+ 12111498720319413670ull, 8141510722836425388ull}},
+{{2702309730471662469ull, 15389147326720564601ull,
+ 16793058737054409351ull, 5088444201772765867ull}},
+{{7989573181516965990ull, 14624748139973317847ull,
+ 16379637402890623785ull, 6360555252215957334ull}},
+{{5375280458468819583ull, 4445877119684483597ull,
+ 11251174716758503924ull, 7950694065269946668ull}},
+{{5665393295756706191ull, 12002045236657578056ull,
+ 16255356234828840760ull, 4969183790793716667ull}},
+{{7081741619695882739ull, 15002556545821972570ull,
+ 15707509275108663046ull, 6211479738492145834ull}},
+{{18075549061474629232ull, 9529823645422689904ull,
+ 10411014557031053000ull, 7764349673115182293ull}},
+{{11297218163421643270ull, 5956139778389181190ull,
+ 8812727107358102077ull, 4852718545696988933ull}},
+{{4898150667422278280ull, 12056860741413864392ull,
+ 15627594902625015500ull, 6065898182121236166ull}},
+{{6122688334277847849ull, 15071075926767330490ull,
+ 10311121591426493567ull, 7582372727651545208ull}},
+{{8438366227351042810ull, 16336951481870663412ull,
+ 6444450994641558479ull, 4738982954782215755ull}},
+{{10547957784188803512ull, 15809503333910941361ull,
+ 3443877724874560195ull, 5923728693477769694ull}},
+{{17796633248663392294ull, 15150193148961288797ull,
+ 13528219192947976052ull, 7404660866847212117ull}},
+{{13428738789628314136ull, 245498681246029690ull,
+ 10760980004806178985ull, 4627913041779507573ull}},
+{{7562551450180616862ull, 4918559369984925017ull,
+ 18062911024435111635ull, 5784891302224384466ull}},
+{{14064875331153158981ull, 1536513194053768367ull,
+ 13355266743689113736ull, 7231114127780480583ull}},
+{{12969408145514060823ull, 1920641492567210459ull,
+ 12082397411184004266ull, 9038892659725600729ull}},
+{{5800037081732594062ull, 5812086951281894441ull, 633969354348920810ull,
+ 5649307912328500456ull}},
+{{11861732370593130482ull, 16488480725957143859ull,
+ 792461692936151012ull, 7061634890410625570ull}},
+{{10215479444814025198ull, 2163856833736878208ull,
+ 10213949153024964574ull, 8827043613013281962ull}},
+{{6384674653008765749ull, 15187468576367712592ull,
+ 10995404239067990762ull, 5516902258133301226ull}},
+{{7980843316260957186ull, 9760963683604864932ull,
+ 4520883261980212645ull, 6896127822666626533ull}},
+{{9976054145326196483ull, 16812890622933469069ull,
+ 10262790095902653710ull, 8620159778333283166ull}},
+{{8540876850042566754ull, 5896370620906030264ull,
+ 1802557791511770665ull, 5387599861458301979ull}},
+{{10676096062553208442ull, 11982149294559925734ull,
+ 16088255294671877043ull, 6734499826822877473ull}},
+{{4121748041336734745ull, 10366000599772519264ull,
+ 6275261063057682592ull, 8418124783528596842ull}},
+{{2576092525835459216ull, 6478750374857824540ull,
+ 8533724182838439524ull, 5261327989705373026ull}},
+{{3220115657294324019ull, 8098437968572280675ull,
+ 1443783191693273597ull, 6576659987131716283ull}},
+{{17860202626900068736ull, 14734733479142738747ull,
+ 15639787044898755708ull, 8220824983914645353ull}},
+{{8856783632598849008ull, 18432580461318987525ull,
+ 2857337875420640461ull, 5138015614946653346ull}},
+{{15682665559175949164ull, 9205667521366570694ull,
+ 12795044381130576385ull, 6422519518683316682ull}},
+{{10379959912115160647ull, 16118770420135601272ull,
+ 6770433439558444673ull, 8028149398354145853ull}},
+{{6487474945071975405ull, 3156702484943668939ull,
+ 6537363908937721873ull, 5017593373971341158ull}},
+{{3497657662912581352ull, 8557564124606974078ull,
+ 17395076923026928149ull, 6271991717464176447ull}},
+{{13595444115495502497ull, 15308641174186105501ull,
+ 17132160135356272282ull, 7839989646830220559ull}},
+{{10802995581398383013ull, 14179586752293703842ull,
+ 17625129112238752032ull, 4899993529268887849ull}},
+{{4280372439893202958ull, 17724483440367129803ull,
+ 8196353335016276328ull, 6124991911586109812ull}},
+{{738779531439115794ull, 3708860226749360638ull,
+ 10245441668770345411ull, 7656239889482637265ull}},
+{{14296795262431611083ull, 12194632504656446ull,
+ 17932616089049935642ull, 4785149930926648290ull}},
+{{8647622041184738046ull, 9238615327485596366ull,
+ 13192398074457643744ull, 5981437413658310363ull}},
+{{1586155514626146749ull, 11548269159356995458ull,
+ 11878811574644666776ull, 7476796767072887954ull}},
+{{5603033215068729622ull, 7217668224598122161ull,
+ 12035943252580304639ull, 4672997979420554971ull}},
+{{11615477537263299932ull, 4410399262320264797ull,
+ 10433243047297992895ull, 5841247474275693714ull}},
+{{684288866296961203ull, 901313059472943093ull, 3818181772267715311ull,
+ 7301559342844617143ull}},
+{{5467047101298589407ull, 14961699379623342578ull,
+ 161041196907256234ull, 9126949178555771429ull}},
+{{8028590456739006284ull, 13962748130691977015ull,
+ 2406493757280729098ull, 5704343236597357143ull}},
+{{5424052052496369951ull, 8230063126510195461ull,
+ 16843175251883075085ull, 7130429045746696428ull}},
+{{11391751084047850342ull, 14899264926565132230ull,
+ 2607224991144292240ull, 8913036307183370536ull}},
+{{2508158409102518560ull, 9312040579103207644ull,
+ 1629515619465182650ull, 5570647691989606585ull}},
+{{3135198011378148200ull, 2416678687024233747ull,
+ 6648580542758866217ull, 6963309614987008231ull}},
+{{17754055569504848962ull, 7632534377207680087ull,
+ 3699039660021194867ull, 8704137018733760289ull}},
+{{18013813758581612457ull, 2464490976541106102ull,
+ 13841114833581716552ull, 5440085636708600180ull}},
+{{13293895161372239763ull, 3080613720676382628ull,
+ 17301393541977145690ull, 6800107045885750225ull}},
+{{16617368951715299704ull, 13074139187700254093ull,
+ 7791683872189268400ull, 8500133807357187782ull}},
+{{12691698604035756267ull, 8171336992312658808ull,
+ 258116401690904846ull, 5312583629598242364ull}},
+{{15864623255044695334ull, 990799203536047702ull, 322645502113631058ull,
+ 6640729536997802955ull}},
+{{10607407031951093359ull, 10461871041274835436ull,
+ 14238364932924202534ull, 8300911921247253693ull}},
+{{15853001431824209158ull, 1926983382369384243ull,
+ 11204821092291320536ull, 5188069950779533558ull}},
+{{15204565771352873543ull, 2408729227961730304ull,
+ 4782654328509374862ull, 6485087438474416948ull}},
+{{558963140481540313ull, 12234283571806938689ull,
+ 5978317910636718577ull, 8106359298093021185ull}},
+{{11878567008869432456ull, 728898204738254824ull,
+ 15265663740216418871ull, 5066474561308138240ull}},
+{{14848208761086790569ull, 14746180811204982242ull,
+ 635335601560971972ull, 6333093201635172801ull}},
+{{9336888914503712404ull, 18432726014006227803ull,
+ 5405855520378602869ull, 7916366502043966001ull}},
+{{3529712562351126301ull, 13826296767967586329ull,
+ 14907874746305096553ull, 4947729063777478750ull}},
+{{9023826721366295780ull, 3447812904677319199ull,
+ 9411471396026594884ull, 6184661329721848438ull}},
+{{6668097383280481820ull, 4309766130846648999ull,
+ 2540967208178467797ull, 7730826662152310548ull}},
+{{11085089892191382994ull, 4999446840992849576ull,
+ 10811476541966318181ull, 4831766663845194092ull}},
+{{13856362365239228742ull, 10860994569668449874ull,
+ 13514345677457897726ull, 6039708329806492615ull}},
+{{8097080919694260120ull, 4352871175230786535ull,
+ 12281246078394984254ull, 7549635412258115769ull}},
+{{11978204602449994431ull, 16555602539801405296ull,
+ 758249771355783302ull, 4718522132661322356ull}},
+{{14972755753062493039ull, 11471131137896980812ull,
+ 947812214194729128ull, 5898152665826652945ull}},
+{{269200617618564682ull, 14338913922371226016ull,
+ 5796451286170799314ull, 7372690832283316181ull}},
+{{336500772023205852ull, 8700270366109256712ull,
+ 11857250126140887047ull, 9215863540354145226ull}},
+{{210312982514503658ull, 12355198006459367301ull,
+ 12022467347265442308ull, 5759914712721340766ull}},
+{{4874577246570517476ull, 15443997508074209126ull,
+ 5804712147227027077ull, 7199893390901675958ull}},
+{{15316593595067922653ull, 5469938829810597695ull,
+ 16479262220888559655ull, 8999866738627094947ull}},
+{{16490400024558533514ull, 10336240796272705415ull,
+ 7993695878841655832ull, 5624916711641934342ull}},
+{{16001314012270778989ull, 12920300995340881769ull,
+ 768747811697293982ull, 7031145889552417928ull}},
+{{6166584460056310024ull, 6927004207321326404ull, 960934764621617478ull,
+ 8788932361940522410ull}},
+{{13077487324389969573ull, 18164435684857992714ull,
+ 5212270246315898827ull, 5493082726212826506ull}},
+{{7123487118632686158ull, 18093858587645102989ull,
+ 15738709844749649342ull, 6866353407766033132ull}},
+{{13516044916718245602ull, 13393951197701602928ull,
+ 1226643232227510062ull, 8582941759707541416ull}},
+{{8447528072948903501ull, 3759533480136113926ull, 766652020142193789ull,
+ 5364338599817213385ull}},
+{{1336038054331353569ull, 9311102868597530312ull,
+ 5570001043605130140ull, 6705423249771516731ull}},
+{{1670047567914191961ull, 11638878585746912890ull,
+ 2350815286079024771ull, 8381779062214395914ull}},
+{{5655465748373757880ull, 4968456106878126604ull,
+ 6080945572226778386ull, 5238611913883997446ull}},
+{{7069332185467197349ull, 15433942170452434063ull,
+ 16824554002138248790ull, 6548264892354996807ull}},
+{{4224979213406608783ull, 10069055676210766771ull,
+ 16419006484245423084ull, 8185331115443746009ull}},
+{{334768999165436537ull, 15516531834486505040ull,
+ 3344350025012307571ull, 5115831947152341256ull}},
+{{418461248956795672ull, 14783978774680743396ull,
+ 4180437531265384464ull, 6394789933940426570ull}},
+{{523076561195994589ull, 33229394641377629ull, 14448918950936506389ull,
+ 7993487417425533212ull}},
+{{2632765859961190570ull, 2326611380864554970ull,
+ 18253946381190092301ull, 4995929635890958257ull}},
+{{12514329361806264021ull, 7519950244508081616ull,
+ 8982374921205451664ull, 6244912044863697822ull}},
+{{15642911702257830026ull, 9399937805635102020ull,
+ 2004596614652038772ull, 7806140056079622278ull}},
+{{553447777056367958ull, 15098333165376714571ull,
+ 15087930939439687944ull, 4878837535049763923ull}},
+{{14526867776602623660ull, 426172383011341597ull,
+ 14248227655872222027ull, 6098546918812204904ull}},
+{{4323526665471115863ull, 14367773534046340709ull,
+ 17810284569840277533ull, 7623183648515256130ull}},
+{{5008047175133141366ull, 11285701467992656895ull,
+ 15743113874577561362ull, 4764489780322035081ull}},
+{{1648372950489038804ull, 4883754798136045311ull,
+ 5843834287939787991ull, 5955612225402543852ull}},
+{{15895524243393462217ull, 1493007479242668734ull,
+ 7304792859924734989ull, 7444515281753179815ull}},
+{{5323016633693525982ull, 3238972683740361911ull,
+ 11483024565094041224ull, 4652822051095737384ull}},
+{{2042084773689519573ull, 4048715854675452389ull,
+ 14353780706367551530ull, 5816027563869671730ull}},
+{{7164291985539287370ull, 14284266855199091294ull,
+ 8718853846104663604ull, 7270034454837089663ull}},
+{{18178737018778885021ull, 17855333568998864117ull,
+ 6286881289203441601ull, 9087543068546362079ull}},
+{{13667553645950497090ull, 4242054452983208217ull,
+ 10846829833393232857ull, 5679714417841476299ull}},
+{{3249384002155957650ull, 9914254084656398176ull,
+ 8946851273314153167ull, 7099643022301845374ull}},
+{{4061730002694947063ull, 7781131587393109816ull,
+ 1960192054787915651ull, 8874553777877306718ull}},
+{{2538581251684341914ull, 2557364232906999683ull,
+ 15060178089524610994ull, 5546596111173316698ull}},
+{{17008284619887591105ull, 12420077327988525411ull,
+ 9601850575050987934ull, 6933245138966645873ull}},
+{{16648669756432100977ull, 6301724623130880956ull,
+ 16613999237241122822ull, 8666556423708307341ull}},
+{{1182046560915287303ull, 17773635944738964310ull,
+ 12689592532489395715ull, 5416597764817692088ull}},
+{{10700930237998884936ull, 17605358912496317483ull,
+ 15861990665611744644ull, 6770747206022115110ull}},
+{{8764476779071218266ull, 3559954566910845238ull,
+ 10604116295159904998ull, 8463434007527643888ull}},
+{{866111968492123513ull, 16060029659601441986ull,
+ 6627572684474940623ull, 5289646254704777430ull}},
+{{10306011997469930199ull, 15463351056074414578ull,
+ 17507837892448451587ull, 6612057818380971787ull}},
+{{3659142959982636940ull, 14717502801665630319ull,
+ 17273111347133176580ull, 8265072272976214734ull}},
+{{9204493377630229944ull, 18421811287895794757ull,
+ 6184008573530847458ull, 5165670170610134209ull}},
+{{16117302740465175334ull, 13803892073014967638ull,
+ 12341696735340947227ull, 6457087713262667761ull}},
+{{10923256388726693359ull, 12643179072841321644ull,
+ 1592062863894020322ull, 8071359641578334702ull}},
+{{16050407279808959158ull, 12513672938953213931ull,
+ 14830097345215926413ull, 5044599775986459188ull}},
+{{15451323081333811043ull, 1807033118409353702ull, 90877607810356401ull,
+ 6305749719983073986ull}},
+{{10090781814812487996ull, 6870477416439080032ull,
+ 9336969046617721309ull, 7882187149978842482ull}},
+{{6306738634257804997ull, 6599891394488118972ull,
+ 10447291672563463722ull, 4926366968736776551ull}},
+{{7883423292822256247ull, 17473236279964924523ull,
+ 8447428572276941748ull, 6157958710920970689ull}},
+{{5242593097600432404ull, 3394801276246604038ull,
+ 15170971733773565090ull, 7697448388651213361ull}},
+{{17111678741282433965ull, 6733436816081515427ull,
+ 2564328305967396325ull, 4810905242907008351ull}},
+{{16777912408175654552ull, 13028482038529282188ull,
+ 17040468437741409118ull, 6013631553633760438ull}},
+{{2525646436510016574ull, 7062230511306826928ull,
+ 12077213510321985590ull, 7517039442042200548ull}},
+{{1578529022818760359ull, 18248952124848930542ull,
+ 16771630480806016801ull, 4698149651276375342ull}},
+{{11196533315378226256ull, 8976132100778999465ull,
+ 11741166064152745194ull, 5872687064095469178ull}},
+{{160608588940619108ull, 1996793089118973524ull, 5453085543336155685ull,
+ 7340858830119336473ull}},
+{{200760736175773885ull, 7107677379826104809ull,
+ 11428042947597582510ull, 9176073537649170591ull}},
+{{11654690506178328438ull, 18277356417673479217ull,
+ 14060055869889570924ull, 5735045961030731619ull}},
+{{733305077440746836ull, 4399951448382297406ull,
+ 12963383818934575752ull, 7168807451288414524ull}},
+{{10140003383655709353ull, 5499939310477871757ull,
+ 16204229773668219690ull, 8961009314110518155ull}},
+{{8643345123998512298ull, 8049148087476057752ull,
+ 7821800599328943354ull, 5600630821319073847ull}},
+{{10804181404998140372ull, 838063072490296382ull,
+ 5165564730733791289ull, 7000788526648842309ull}},
+{{4281854719392899657ull, 5659264859040258382ull,
+ 11068641931844627015ull, 8750985658311052886ull}},
+{{16511217254902725998ull, 10454569564541243344ull,
+ 2306215188975503980ull, 5469366036444408054ull}},
+{{2192277494918855881ull, 13068211955676554181ull,
+ 12106141023074155783ull, 6836707545555510067ull}},
+{{7352032887075957755ull, 11723578926168304822ull,
+ 10520990260415306825ull, 8545884431944387584ull}},
+{{18430078609704637309ull, 409707801214108657ull,
+ 6575618912759566766ull, 5341177769965242240ull}},
+{{9202540206848632924ull, 9735506788372411630ull,
+ 8219523640949458457ull, 6676472212456552800ull}},
+{{2279803221706015347ull, 16781069503892902442ull,
+ 10274404551186823071ull, 8345590265570691000ull}},
+{{6036563031993647496ull, 17405697467574145882ull,
+ 6421502844491764419ull, 5215993915981681875ull}},
+{{16769075826846835178ull, 17145435816040294448ull,
+ 3415192537187317620ull, 6519992394977102344ull}},
+{{2514600709848992357ull, 2985050696340816445ull,
+ 4268990671484147026ull, 8149990493721377930ull}},
+{{3877468452869314175ull, 6477342703640398182ull,
+ 7279805188104979795ull, 5093744058575861206ull}},
+{{14070207602941418527ull, 3484992361123109823ull,
+ 18323128521986000552ull, 6367180073219826507ull}},
+{{12976073485249385254ull, 4356240451403887279ull,
+ 18292224634055112786ull, 7958975091524783134ull}},
+{{15027574955921947640ull, 7334336300554817453ull,
+ 6820954377857057587ull, 4974359432202989459ull}},
+{{4949410639620270838ull, 4556234357266133913ull,
+ 3914506953893934080ull, 6217949290253736824ull}},
+{{10798449317952726451ull, 5695292946582667391ull,
+ 4893133692367417600ull, 7772436612817171030ull}},
+{{13666559851361535888ull, 3559558091614167119ull,
+ 16893266613011799712ull, 4857772883010731893ull}},
+{{12471513795774531956ull, 4449447614517708899ull,
+ 7281525210982585928ull, 6072216103763414867ull}},
+{{10977706226290777041ull, 5561809518147136124ull,
+ 4490220495300844506ull, 7590270129704268584ull}},
+{{16084438428286511459ull, 8087816967269347981ull,
+ 2806387809563027816ull, 4743918831065167865ull}},
+{{6270489980075975611ull, 10109771209086684977ull,
+ 8119670780381172674ull, 5929898538831459831ull}},
+{{12449798493522357418ull, 3413841974503580413ull,
+ 5537902457049077939ull, 7412373173539324789ull}},
+{{10086967067665167339ull, 18274552298560595422ull,
+ 5767032044869367663ull, 4632733233462077993ull}},
+{{3385336797726683365ull, 18231504354773356374ull,
+ 11820476074514097483ull, 5790916541827597491ull}},
+{{13455043034013130014ull, 18177694425039307563ull,
+ 10163909074715233950ull, 7238645677284496864ull}},
+{{12207117774089024614ull, 13498745994444358646ull,
+ 12704886343394042438ull, 9048307096605621080ull}},
+{{3017762590378252480ull, 3825030228100336250ull,
+ 7940553964621276524ull, 5655191935378513175ull}},
+{{12995575274827591408ull, 4781287785125420312ull,
+ 5314006437349207751ull, 7068989919223141469ull}},
+{{16244469093534489259ull, 1364923712979387486ull,
+ 11254194065113897593ull, 8836237399028926836ull}},
+{{5541107165031667883ull, 12382292366680586939ull,
+ 16257243327550961803ull, 5522648374393079272ull}},
+{{2314697937862196950ull, 10866179439923345770ull,
+ 1874810085729150638ull, 6903310467991349091ull}},
+{{12116744459182521995ull, 4359352263049406404ull,
+ 16178570662443602010ull, 8629138084989186363ull}},
+{{16796337323843852055ull, 7336281182833266906ull,
+ 7805763654813557304ull, 5393211303118241477ull}},
+{{11772049617950039261ull, 9170351478541583633ull,
+ 14368890586944334534ull, 6741514128897801846ull}},
+{{880003967155385364ull, 2239567311322203734ull, 8737741196825642360ull,
+ 8426892661122252308ull}},
+{{14385060534754279565ull, 1399729569576377333ull,
+ 14684460284870802283ull, 5266807913201407692ull}},
+{{4146267613160685744ull, 15584720017252635379ull,
+ 18355575356088502853ull, 6583509891501759615ull}},
+{{571148498023469276ull, 5645841966283630512ull,
+ 18332783176683240663ull, 8229387364377199519ull}},
+{{356967811264668297ull, 10446180256568350926ull,
+ 18375518513068107270ull, 5143367102735749699ull}},
+{{9669581800935611180ull, 3834353283855662849ull,
+ 18357712122907746184ull, 6429208878419687124ull}},
+{{16698663269596901878ull, 4792941604819578561ull,
+ 4500396079925131114ull, 8036511098024608906ull}},
+{{3519135515856981818ull, 7607274521439624505ull,
+ 7424433568380594850ull, 5022819436265380566ull}},
+{{9010605413248615177ull, 285721114944754823ull, 57169923620967755ull,
+ 6278524295331725708ull}},
+{{6651570748133381067ull, 14192209448963107241ull, 71462404526209693ull,
+ 7848155369164657135ull}},
+{{15686446763651832927ull, 11175973914815635977ull,
+ 6962193030469962914ull, 4905097105727910709ull}},
+{{5773000399282627446ull, 4746595356664769164ull,
+ 13314427306514841547ull, 6131371382159888386ull}},
+{{7216250499103284308ull, 1321558177403573551ull,
+ 7419662096288776126ull, 7664214227699860483ull}},
+{{11427685589580634549ull, 14661031916159397181ull,
+ 2331445800966791126ull, 4790133892312412802ull}},
+{{449548931693629474ull, 9102917858344470669ull,
+ 12137679288063264716ull, 5987667365390516002ull}},
+{{5173622183044424746ull, 11378647322930588336ull,
+ 5948727073224305087ull, 7484584206738145003ull}},
+{{3233513864402765466ull, 14029183604472699566ull,
+ 1412111411551496727ull, 4677865129211340627ull}},
+{{13265264367358232641ull, 12924793487163486553ull,
+ 15600197319721534621ull, 5847331411514175783ull}},
+{{2746522403915627089ull, 2320933803672194480ull,
+ 14888560631224530373ull, 7309164264392719729ull}},
+{{3433153004894533861ull, 7512853273017631004ull,
+ 4775642733748499254ull, 9136455330490899662ull}},
+{{11369092664913859471ull, 83847277208631473ull,
+ 16819834763874975746ull, 5710284581556812288ull}},
+{{376307775860160627ull, 9328181133365565150ull, 2578049381134168066ull,
+ 7137855726946015361ull}},
+{{9693756756679976592ull, 2436854379852180629ull,
+ 7834247744845097987ull, 8922319658682519201ull}},
+{{8364440982138679322ull, 17663935051903470557ull,
+ 16425619886596656001ull, 5576449786676574500ull}},
+{{15067237246100737056ull, 8244860759597174484ull,
+ 2085280784536268386ull, 6970562233345718126ull}},
+{{387302483916369704ull, 1082703912641692298ull,
+ 11829973017525111291ull, 8713202791682147657ull}},
+{{4853750070875118969ull, 16817591009896915350ull,
+ 476204108312112700ull, 5445751744801342286ull}},
+{{15290559625448674520ull, 2575244688661592571ull,
+ 9818627172244916684ull, 6807189681001677857ull}},
+{{14501513513383455246ull, 3219055860826990714ull,
+ 16884969983733533759ull, 8508987101252097321ull}},
+{{13675131964292047433ull, 8929438940657951052ull,
+ 3635577212192376743ull, 5318116938282560826ull}},
+{{17093914955365059291ull, 6550112657395050911ull,
+ 13767843552095246737ull, 6647646172853201032ull}},
+{{16755707675778936209ull, 12799326840171201543ull,
+ 17209804440119058421ull, 8309557716066501290ull}},
+{{17389846325002916987ull, 10305422284320694916ull,
+ 15367813793501799417ull, 5193473572541563306ull}},
+{{3290563832544094618ull, 17493463873828256550ull,
+ 9986395205022473463ull, 6491841965676954133ull}},
+{{13336576827534894080ull, 17255143823857932783ull,
+ 17094680024705479733ull, 8114802457096192666ull}},
+{{15252889544850390656ull, 13090307899124901941ull,
+ 15295861033868312737ull, 5071751535685120416ull}},
+{{5231053875780824608ull, 2527826818623963715ull, 673082218625839306ull,
+ 6339689419606400521ull}},
+{{1927131326298642856ull, 12383155560134730452ull,
+ 5453038791709687036ull, 7924611774508000651ull}},
+{{10427829115791427593ull, 16962844261938982340ull,
+ 1102306235604860445ull, 4952882359067500407ull}},
+{{13034786394739284491ull, 7368497272141564213ull,
+ 15212940849788239269ull, 6191102948834375508ull}},
+{{2458424938141941902ull, 13822307608604343171ull,
+ 569431988525747470ull, 7738878686042969386ull}},
+{{17677416650834571353ull, 4027256236950326577ull,
+ 4967581011255980073ull, 4836799178776855866ull}},
+{{8261712758261050479ull, 9645756314615296126ull,
+ 15432848300924750899ull, 6045998973471069832ull}},
+{{1103768910971537291ull, 7445509374841732254ull, 844316302446387008ull,
+ 7557498716838837291ull}},
+{{14524913624639374519ull, 4653443359276082658ull,
+ 16668598753524849544ull, 4723436698024273306ull}},
+{{8932769993944442340ull, 5816804199095103323ull,
+ 11612376405051286122ull, 5904295872530341633ull}},
+{{6554276474003165021ull, 16494377285723654962ull,
+ 680412451031943940ull, 7380369840662927042ull}},
+{{8708108814679366043ull, 1085613766722508543ull,
+ 5036943800322352867ull, 4612731150414329401ull}},
+{{6273449999921819649ull, 15192075263685299391ull,
+ 10907865768830328987ull, 5765913938017911751ull}},
+{{3230126481474886657ull, 14378408061179236335ull,
+ 9023146192610523330ull, 7207392422522389689ull}},
+{{17872716157125772033ull, 8749638039619269610ull,
+ 15890618759190542067ull, 9009240528152987111ull}},
+{{15782133616630995425ull, 3162680765548349554ull,
+ 16849165752135170648ull, 5630775330095616944ull}},
+{{10504294983933968473ull, 3953350956935436943ull,
+ 2614713116459411694ull, 7038469162619521181ull}},
+{{8518682711490072687ull, 14165060733024071987ull,
+ 7880077414001652521ull, 8798086453274401476ull}},
+{{3018333685467601478ull, 1935633930498963136ull,
+ 14148420420605808634ull, 5498804033296500922ull}},
+{{3772917106834501847ull, 11642914449978479728ull,
+ 8462153488902484984ull, 6873505041620626153ull}},
+{{4716146383543127309ull, 14553643062473099660ull,
+ 15189377879555494134ull, 8591881302025782691ull}},
+{{12170963526569230376ull, 4484340895618299383ull,
+ 7187518165508489882ull, 5369925813766114182ull}},
+{{10602018389784150066ull, 14828798156377650037ull,
+ 18207769743740388160ull, 6712407267207642727ull}},
+{{17864209005657575486ull, 89253621762510930ull,
+ 18148026161248097297ull, 8390509084009553409ull}},
+{{15776816646963372583ull, 11584998559670039091ull,
+ 4424987323138978954ull, 5244068177505970881ull}},
+{{15109334790276827825ull, 5257876162732773056ull,
+ 10142920172351111597ull, 6555085221882463601ull}},
+{{439924414136483165ull, 11184031221843354225ull,
+ 17290336233866277400ull, 8193856527353079501ull}},
+{{11804167804903771738ull, 6990019513652096390ull,
+ 13112303155380117327ull, 5121160329595674688ull}},
+{{5531837719274938865ull, 4125838373637732584ull,
+ 16390378944225146659ull, 6401450411994593360ull}},
+{{6914797149093673581ull, 545611948619777826ull, 2041229606571881708ull,
+ 8001813014993241701ull}},
+{{8933434236610933892ull, 9564379504742136949ull,
+ 3581611513321120019ull, 5001133134370776063ull}},
+{{15778478814191055269ull, 7343788362500283282ull,
+ 18312072446933563736ull, 6251416417963470078ull}},
+{{10499726480884043278ull, 9179735453125354103ull,
+ 13666718521812178862ull, 7814270522454337598ull}},
+{{13479858078193608905ull, 1125648639775958410ull,
+ 3930013057705223885ull, 4883919076533960999ull}},
+{{7626450560887235323ull, 6018746818147335917ull, 300830303704141952ull,
+ 6104898845667451249ull}},
+{{14144749219536432058ull, 7523433522684169896ull,
+ 4987723898057565344ull, 7631123557084314061ull}},
+{{8840468262210270036ull, 4702145951677606185ull,
+ 5423170445499672292ull, 4769452223177696288ull}},
+{{15662271346190225449ull, 5877682439597007731ull,
+ 6778963056874590365ull, 5961815278972120360ull}},
+{{14966153164310393908ull, 11958789067923647568ull,
+ 8473703821093237956ull, 7452269098715150450ull}},
+{{9353845727693996192ull, 16697615204307055538ull,
+ 9907750906610661626ull, 4657668186696969031ull}},
+{{2468935122762719432ull, 11648646968529043615ull,
+ 7773002614835939129ull, 5822085233371211289ull}},
+{{16921226958735563002ull, 725750655379140806ull,
+ 14327939286972311816ull, 7277606541714014111ull}},
+{{11928161661564677945ull, 907188319223926008ull,
+ 13298238090288001866ull, 9097008177142517639ull}},
+{{7455101038477923716ull, 5178678717942341659ull,
+ 15228927834071083022ull, 5685630110714073524ull}},
+{{4707190279670016741ull, 15696720434282702882ull,
+ 589415718879302161ull, 7107037638392591906ull}},
+{{15107359886442296734ull, 5785842487571214890ull,
+ 9960141685453903510ull, 8883797047990739882ull}},
+{{14053785947453823363ull, 17451209610014173018ull,
+ 10836774571836077597ull, 5552373154994212426ull}},
+{{8343860397462503395ull, 7978953957235552561ull,
+ 4322596177940321189ull, 6940466443742765533ull}},
+{{15041511515255517148ull, 14585378464971828605ull,
+ 10014931240852789390ull, 8675583054678456916ull}},
+{{11706787706248392170ull, 4504175522180004974ull,
+ 15482704062387769177ull, 5422239409174035572ull}},
+{{5410112595955714404ull, 10241905421152394122ull,
+ 906636004275159855ull, 6777799261467544466ull}},
+{{15986012781799418813ull, 8190695758013104748ull,
+ 10356667042198725627ull, 8472249076834430582ull}},
+{{767885951769860950ull, 2813341839544496516ull, 1861230882946815613ull,
+ 5295155673021519114ull}},
+{{959857439712326188ull, 8128363317858008549ull,
+ 11549910640538295324ull, 6618944591276898892ull}},
+{{5811507818067795638ull, 10160454147322510686ull,
+ 14437388300672869155ull, 8273680739096123615ull}},
+{{17467250441574535986ull, 4044440832862875226ull,
+ 15940896715561625078ull, 5171050461935077259ull}},
+{{12610691015113394175ull, 14278923077933369841ull,
+ 15314434876024643443ull, 6463813077418846574ull}},
+{{1928305713609579006ull, 13236967828989324398ull,
+ 9919671558176028496ull, 8079766346773558218ull}},
+{{15040249126288150591ull, 8273104893118327748ull,
+ 10811480742287405714ull, 5049853966733473886ull}},
+{{353567334150636623ull, 1118009079543133878ull, 4290978891004481335ull,
+ 6312317458416842358ull}},
+{{9665331204543071586ull, 15232569404711081059ull,
+ 14587095650610377476ull, 7890396823021052947ull}},
+{{3734988993625725790ull, 296983841089649854ull, 6811091772417791971ull,
+ 4931498014388158092ull}},
+{{13892108278886933045ull, 14206287856644226029ull,
+ 8513864715522239963ull, 6164372517985197615ull}},
+{{3530077293326502594ull, 13146173802377894633ull,
+ 6030644875975412050ull, 7705465647481497019ull}},
+{{13735513354397533881ull, 12828044644913572049ull,
+ 1463310038270938579ull, 4815916029675935637ull}},
+{{3334333637714753640ull, 11423369787714577158ull,
+ 6440823566266061128ull, 6019895037094919546ull}},
+{{13391289083998217857ull, 14279212234643221447ull,
+ 17274401494687352218ull, 7524868796368649432ull}},
+{{15287084705139968017ull, 13536193665079401308ull,
+ 10796500934179595136ull, 4703042997730405895ull}},
+{{662111807715408405ull, 16920242081349251636ull,
+ 8883940149297106016ull, 5878803747163007369ull}},
+{{827639759644260506ull, 2703558527977012929ull,
+ 15716611205048770425ull, 7348504683953759211ull}},
+{{5646235717982713537ull, 7991134178398654065ull,
+ 15034077987883575127ull, 9185630854942199014ull}},
+{{15058112369807665721ull, 11911987889140240646ull,
+ 4784612723999846550ull, 5741019284338874384ull}},
+{{9599268425404806343ull, 5666612824570525000ull,
+ 5980765904999808188ull, 7176274105423592980ull}},
+{{11999085531756007928ull, 7083266030713156250ull,
+ 7475957381249760235ull, 8970342631779491225ull}},
+{{12111114475774892859ull, 2121198259982028704ull,
+ 16201688409349569907ull, 5606464144862182015ull}},
+{{15138893094718616074ull, 16486555880259699592ull,
+ 15640424493259574479ull, 7008080181077727519ull}},
+{{476872294688718476ull, 15996508831897236587ull,
+ 14938844598147080195ull, 8760100226347159399ull}},
+{{16438946248676306712ull, 7691975010722078914ull,
+ 16254306901483006978ull, 5475062641466974624ull}},
+{{11325310773990607582ull, 391596726547822835ull,
+ 1871139553144207107ull, 6843828301833718281ull}},
+{{9544952449060871573ull, 14324553963466942256ull,
+ 6950610459857646787ull, 8554785377292147851ull}},
+{{5965595280663044733ull, 6647003217953144958ull,
+ 2038288528197335290ull, 5346740860807592407ull}},
+{{16680366137683581725ull, 17532126059296207005ull,
+ 16382918715528832824ull, 6683426076009490508ull}},
+{{7015399616822313444ull, 3468413500410707141ull,
+ 2031904320701489415ull, 8354282595011863136ull}},
+{{6690467769727639854ull, 9085287465397773819ull,
+ 1269940200438430884ull, 5221426621882414460ull}},
+{{3751398693732161914ull, 11356609331747217274ull,
+ 1587425250548038605ull, 6526783277353018075ull}},
+{{13912620404019978200ull, 360703609401857880ull,
+ 15819339618467211969ull, 8158479096691272593ull}},
+{{8695387752512486375ull, 11754654801944630935ull,
+ 2969558233900925624ull, 5099049435432045371ull}},
+{{6257548672213220065ull, 14693318502430788669ull,
+ 17547005847658320742ull, 6373811794290056713ull}},
+{{12433621858693912985ull, 9143276091183710028ull,
+ 8098699254290737216ull, 7967264742862570892ull}},
+{{16994385698538471424ull, 5714547556989818767ull,
+ 14285059070786486568ull, 4979540464289106807ull}},
+{{16631296104745701376ull, 7143184446237273459ull,
+ 13244637820055720306ull, 6224425580361383509ull}},
+{{16177434112504738816ull, 18152352594651367632ull,
+ 2720739219787486670ull, 7780531975451729387ull}},
+{{10110896320315461760ull, 6733534353229716866ull,
+ 17841363076863036833ull, 4862832484657330866ull}},
+{{3415248363539551392ull, 13028603959964533987ull,
+ 13078331809224020233ull, 6078540605821663583ull}},
+{{18104118509706602952ull, 2450696894673503771ull,
+ 11736228743102637388ull, 7598175757277079479ull}},
+{{9009231059352932893ull, 10755057596025715665ull,
+ 14252671992080230223ull, 4748859848298174674ull}},
+{{15873224842618554020ull, 8832135976604756677ull,
+ 8592467953245511971ull, 5936074810372718343ull}},
+{{6006472997991028813ull, 6428483952328557943ull,
+ 6128898923129502060ull, 7420093512965897929ull}},
+{{10671574651385474864ull, 13241174507060124522ull,
+ 15359776873024408547ull, 4637558445603686205ull}},
+{{4116096277377067772ull, 11939782115397767749ull,
+ 5364663035998346972ull, 5796948057004607757ull}},
+{{9756806365148722619ull, 14924727644247209686ull,
+ 11317514813425321619ull, 7246185071255759696ull}},
+{{2972635919581127466ull, 14044223536881624204ull,
+ 14146893516781652024ull, 9057731339069699620ull}},
+{{11081269486592980474ull, 8777639710551015127ull,
+ 18065180484843308323ull, 5661082086918562262ull}},
+{{9239900839813837689ull, 6360363619761381005ull,
+ 13358103569199359596ull, 7076352608648202828ull}},
+{{16161562068194685015ull, 7950454524701726256ull,
+ 16697629461499199495ull, 8845440760810253535ull}},
+{{10100976292621678135ull, 11886563105579660766ull,
+ 17353547441078081540ull, 5528400475506408459ull}},
+{{3402848328922321860ull, 14858203881974575958ull,
+ 17080248282920214021ull, 6910500594383010574ull}},
+{{13476932448007678133ull, 4737696797186056235ull,
+ 12126938316795491719ull, 8638125742978763218ull}},
+{{6117239770791104881ull, 9878589525882367003ull,
+ 12191022466424570228ull, 5398828589361727011ull}},
+{{3034863695061493197ull, 12348236907352958754ull,
+ 10627092064603324881ull, 6748535736702158764ull}},
+{{13016951655681642305ull, 1600238078909034730ull,
+ 13283865080754156102ull, 8435669670877698455ull}},
+{{12747280803228414345ull, 14835206854600310418ull,
+ 15219944703112429419ull, 5272293544298561534ull}},
+{{6710728967180742123ull, 13932322549823000119ull,
+ 9801558842035760966ull, 6590366930373201918ull}},
+{{3776725190548539749ull, 8192031150423974341ull,
+ 3028576515689925400ull, 8237958662966502398ull}},
+{{4666296253306531295ull, 5120019469014983963ull,
+ 15727918377588367087ull, 5148724164354063998ull}},
+{{1221184298205776215ull, 1788338317841342050ull,
+ 10436525935130683051ull, 6435905205442579998ull}},
+{{10749852409611996077ull, 16070480952583841274ull,
+ 3822285382058578005ull, 8044881506803224998ull}},
+{{11330343774434885452ull, 12349893604578594748ull,
+ 16223986419068774965ull, 5028050941752015623ull}},
+{{14162929718043606815ull, 1602308950441079723ull,
+ 15668297005408580803ull, 6285063677190019529ull}},
+{{13091976129127120615ull, 15837944243333513366ull,
+ 5750313201478562291ull, 7856329596487524412ull}},
+{{3570799062277062480ull, 7592872142869751902ull,
+ 12817317787778877240ull, 4910205997804702757ull}},
+{{13686870864701103908ull, 9491090178587189877ull,
+ 2186589179441432838ull, 6137757497255878447ull}},
+{{3273530525594216173ull, 2640490686379211539ull,
+ 16568294529583954760ull, 7672196871569848058ull}},
+{{18186857642992242773ull, 1650306678987007211ull,
+ 14966870099417359629ull, 4795123044731155036ull}},
+{{18121886035312915562ull, 6674569367161146918ull,
+ 261843550562147920ull, 5993903805913943796ull}},
+{{13428985507286368644ull, 8343211708951433648ull,
+ 327304438202684900ull, 7492379757392429745ull}},
+{{8393115942053980403ull, 14437879354949421838ull,
+ 11733780319945147822ull, 4682737348370268590ull}},
+{{1268022890712699695ull, 8823977156832001490ull,
+ 5443853363076658970ull, 5853421685462835738ull}},
+{{10808400650245650427ull, 1806599409185226054ull,
+ 16028188740700599521ull, 7316777106828544672ull}},
+{{4287128775952287225ull, 6869935279908920472ull,
+ 1588491852166197785ull, 9145971383535680841ull}},
+{{2679455484970179516ull, 15822924596011545055ull,
+ 12522022453672343375ull, 5716232114709800525ull}},
+{{17184377411494888107ull, 15166969726587043414ull,
+ 1817470011808265507ull, 7145290143387250657ull}},
+{{12257099727513834326ull, 14347026139806416364ull,
+ 6883523533187719788ull, 8931612679234063321ull}},
+{{16884059366550922262ull, 18190263374233786035ull,
+ 15831417254310794627ull, 5582257924521289575ull}},
+{{16493388189761264923ull, 18126143199364844640ull,
+ 15177585549461105380ull, 6977822405651611969ull}},
+{{2169991163492029538ull, 4210934925496504185ull,
+ 5136923881544218014ull, 8722278007064514962ull}},
+{{12885459523250988221ull, 16466892383717478827ull,
+ 7822263444392524162ull, 5451423754415321851ull}},
+{{11495138385636347372ull, 11360243442792072726ull,
+ 5166143287063267299ull, 6814279693019152314ull}},
+{{5145550945190658407ull, 9588618285062703004ull,
+ 15681051145683859932ull, 8517849616273940392ull}},
+{{12439341377598937313ull, 15216258465018965185ull,
+ 9800656966052412457ull, 5323656010171212745ull}},
+{{1714118666716507929ull, 5185265025991542770ull,
+ 16862507225992903476ull, 6654570012714015931ull}},
+{{11366020370250410719ull, 6481581282489428462ull,
+ 16466448014063741441ull, 8318212515892519914ull}},
+{{2492076712979118795ull, 15580203347624362549ull,
+ 14903216027217226304ull, 5198882822432824946ull}},
+{{7726781909651286398ull, 1028510110820901570ull,
+ 9405647997166757073ull, 6498603528041031183ull}},
+{{435105350209332190ull, 5897323656953514867ull, 7145373978031058437ull,
+ 8123254410051288979ull}},
+{{16412841908376690283ull, 5991670294809640743ull,
+ 2160015727055717571ull, 5077034006282055612ull}},
+{{15904366367043474949ull, 2877901850084663025ull,
+ 2700019658819646964ull, 6346292507852569515ull}},
+{{6045399903522179974ull, 3597377312605828782ull,
+ 17210082628806722417ull, 7932865634815711893ull}},
+{{17613432994983526196ull, 13777575866447112748ull,
+ 13062144652217895462ull, 4958041021759819933ull}},
+{{3570047170019856129ull, 7998597796204115128ull,
+ 2492622759990205616ull, 6197551277199774917ull}},
+{{4462558962524820161ull, 9998247245255143910ull,
+ 7727464468415144924ull, 7746939096499718646ull}},
+{{16624157406860176313ull, 15472276565139240751ull,
+ 217979274332077673ull, 4841836935312324154ull}},
+{{16168510740147832487ull, 5505287651141887227ull,
+ 9495846129769872900ull, 6052296169140405192ull}},
+{{15598952406757402705ull, 6881609563927359034ull,
+ 11869807662212341125ull, 7565370211425506490ull}},
+{{14361031272650764595ull, 6606848986668293348ull,
+ 12030315807310101107ull, 4728356382140941556ull}},
+{{17951289090813455743ull, 3646875214907978781ull,
+ 15037894759137626384ull, 5910445477676176945ull}},
+{{8604053308234655967ull, 4558594018634973477ull,
+ 4962310393639869268ull, 7388056847095221182ull}},
+{{7683376326860353932ull, 12072493298501634231ull,
+ 16936502051307082004ull, 4617535529434513238ull}},
+{{4992534390148054510ull, 15090616623127042789ull,
+ 11947255527279076697ull, 5771919411793141548ull}},
+{{10852354006112456042ull, 5028212723626639774ull,
+ 14934069409098845872ull, 7214899264741426935ull}},
+{{4342070470785794244ull, 6285265904533299718ull,
+ 14055900742946169436ull, 9018624080926783669ull}},
+{{16548852099523285115ull, 13151663227188088131ull,
+ 11090780973555049849ull, 5636640050579239793ull}},
+{{16074379105976718489ull, 2604520978702946452ull, 28418161661648600ull,
+ 7045800063224049742ull}},
+{{1646229808761346495ull, 3255651223378683066ull,
+ 9258894738931836558ull, 8807250079030062177ull}},
+{{5640579648903229464ull, 15869840069893840628ull,
+ 17316024257900867608ull, 5504531299393788860ull}},
+{{7050724561129036830ull, 1390556013657749169ull,
+ 3198286248666532895ull, 6880664124242236076ull}},
+{{13425091719838683941ull, 15573253072354350173ull,
+ 3997857810833166118ull, 8600830155302795095ull}},
+{{10696525334112871415ull, 5121597151794080954ull,
+ 9416190159411810680ull, 5375518847064246934ull}},
+{{4147284630786313461ull, 6401996439742601193ull,
+ 2546865662409987542ull, 6719398558830308668ull}},
+{{9795791806910279730ull, 17225867586533027299ull,
+ 3183582078012484427ull, 8399248198537885835ull}},
+{{3816526870105230879ull, 8460324232369448110ull,
+ 18130639863253660431ull, 5249530124086178646ull}},
+{{13994030624486314407ull, 5963719272034422233ull,
+ 13439927792212299731ull, 6561912655107723308ull}},
+{{3657480225325729297ull, 2842963071615639888ull,
+ 16799909740265374664ull, 8202390818884654135ull}},
+{{2285925140828580811ull, 1776851919759774930ull,
+ 17417472615306941021ull, 5126494261802908834ull}},
+{{12080778462890501821ull, 6832750918127106566ull,
+ 12548468732278900468ull, 6408117827253636043ull}},
+{{5877601041758351469ull, 8540938647658883208ull,
+ 11073899896921237681ull, 8010147284067045054ull}},
+{{3673500651098969668ull, 16867301700855271765ull,
+ 2309501417148385646ull, 5006342052541903159ull}},
+{{9203561832301099989ull, 11860755089214313898ull,
+ 16721934826717645770ull, 6257927565677378948ull}},
+{{2281080253521599178ull, 5602571824663116565ull,
+ 2455674459687505597ull, 7822409457096723686ull}},
+{{3731518167664693438ull, 5807450399628141805ull,
+ 15369854592586854710ull, 4889005910685452303ull}},
+{{9276083728008254702ull, 16482685036389953064ull,
+ 14600632222306180483ull, 6111257388356815379ull}},
+{{11595104660010318377ull, 15991670277060053426ull,
+ 13639104259455337700ull, 7639071735446019224ull}},
+{{11858626430933836890ull, 771421886307757583ull,
+ 8524440162159586063ull, 4774419834653762015ull}},
+{{10211597020239908208ull, 14799335413166860691ull,
+ 6043864184272094674ull, 5968024793317202519ull}},
+{{8152810256872497356ull, 9275797229603800056ull,
+ 2943144211912730439ull, 7460030991646503149ull}},
+{{5095506410545310848ull, 12714902296143456891ull,
+ 4145308141659150476ull, 4662519369779064468ull}},
+{{1757696994754250656ull, 15893627870179321114ull,
+ 5181635177073938095ull, 5828149212223830585ull}},
+{{11420493280297589128ull, 15255348819296763488ull,
+ 11088729989769810523ull, 7285186515279788231ull}},
+{{14275616600371986409ull, 14457500005693566456ull,
+ 9249226468784875250ull, 9106483144099735289ull}},
+{{8922260375232491506ull, 13647623521985866939ull,
+ 17309981589059016791ull, 5691551965062334555ull}},
+{{6541139450613226478ull, 12447843384054945770ull,
+ 17025790967896383085ull, 7114439956327918194ull}},
+{{17399796350121308906ull, 1724746174786518500ull,
+ 12058866673015703049ull, 8893049945409897743ull}},
+{{1651500681971042258ull, 12607181405310043823ull,
+ 14454320698275896261ull, 5558156215881186089ull}},
+{{15899433907745966535ull, 1923918701355391066ull,
+ 4232842817562706615ull, 6947695269851482612ull}},
+{{10650920347827682360ull, 16239956431976402545ull,
+ 5291053521953383268ull, 8684619087314353265ull}},
+{{18186040263460771235ull, 926600733130475782ull,
+ 14836123497289334303ull, 5427886929571470790ull}},
+{{13509178292471188236ull, 14993308971695258440ull,
+ 9321782334756892070ull, 6784858661964338488ull}},
+{{16886472865588985295ull, 9518264177764297242ull,
+ 11652227918446115088ull, 8481073327455423110ull}},
+{{15165731559420503714ull, 5948915111102685776ull,
+ 2670956430601434026ull, 5300670829659639444ull}},
+{{510420375566078026ull, 16659515925733133029ull,
+ 3338695538251792532ull, 6625838537074549305ull}},
+{{5249711487884985436ull, 2377650833456864670ull,
+ 8785055441242128570ull, 8282298171343186631ull}},
+{{17116127735210279610ull, 6097717789337928322ull,
+ 12408188678417412212ull, 5176436357089491644ull}},
+{{12171787632158073704ull, 7622147236672410403ull,
+ 15510235848021765265ull, 6470545446361864555ull}},
+{{10603048521770204226ull, 14139370064267900908ull,
+ 14776108791599818677ull, 8088181807952330694ull}},
+{{15850277362961153449ull, 11142949299381132019ull,
+ 4623381976322498769ull, 5055113629970206684ull}},
+{{15201160685274053908ull, 93628568944251312ull, 5779227470403123462ull,
+ 6318892037462758355ull}},
+{{554706782883015769ull, 9340407748035089949ull, 2612348319576516423ull,
+ 7898615046828447944ull}},
+{{2652534748515578808ull, 12755283870163013074ull,
+ 1632717699735322764ull, 4936634404267779965ull}},
+{{12539040472499249317ull, 15944104837703766342ull,
+ 6652583143096541359ull, 6170793005334724956ull}},
+{{6450428553769285838ull, 15318445028702320024ull,
+ 8315728928870676699ull, 7713491256668406195ull}},
+{{4031517846105803649ull, 7268185133725256063ull,
+ 2891487571330478985ull, 4820932035417753872ull}},
+{{427711289204866657ull, 13696917435583957983ull,
+ 3614359464163098731ull, 6026165044272192340ull}},
+{{14369697166788247034ull, 12509460776052559574ull,
+ 4517949330203873414ull, 7532706305340240425ull}},
+{{4369374710815266492ull, 3206726966605461830ull,
+ 14352933377445890644ull, 4707941440837650265ull}},
+{{14685090425373858923ull, 4008408708256827287ull,
+ 4106108666525199593ull, 5884926801047062832ull}},
+{{13744677013289935750ull, 9622196903748422013ull,
+ 5132635833156499491ull, 7356158501308828540ull}},
+{{3345788211330255975ull, 7416060111258139613ull,
+ 6415794791445624364ull, 9195198126636035675ull}},
+{{4396960641295103937ull, 13858409606391113066ull,
+ 1704028735439821275ull, 5746998829147522297ull}},
+{{14719572838473655729ull, 12711325989561503428ull,
+ 6741721937727164498ull, 7183748536434402871ull}},
+{{18399466048092069661ull, 6665785450097103477ull,
+ 3815466403731567719ull, 8979685670543003589ull}},
+{{13805509289271237490ull, 11083644933951771529ull,
+ 4690509511545923776ull, 5612303544089377243ull}},
+{{3421828556306883151ull, 13854556167439714412ull,
+ 1251450871005016816ull, 7015379430111721554ull}},
+{{4277285695383603938ull, 17318195209299643015ull,
+ 10787685625611046828ull, 8769224287639651942ull}},
+{{9590832587255834317ull, 1600499968957501076ull,
+ 2130617497579516364ull, 5480765179774782464ull}},
+{{11988540734069792897ull, 2000624961196876345ull,
+ 2663271871974395455ull, 6850956474718478080ull}},
+{{1150617862305077409ull, 16335839256778259144ull,
+ 3329089839967994318ull, 8563695593398097600ull}},
+{{719136163940673381ull, 5598213517059024061ull, 2080681149979996449ull,
+ 5352309745873811000ull}},
+{{5510606223353229630ull, 11609452914751167980ull,
+ 2600851437474995561ull, 6690387182342263750ull}},
+{{6888257779191537037ull, 676758088156796263ull,
+ 12474436333698520260ull, 8362983977927829687ull}},
+{{11222690139635792504ull, 9646345841952773472ull,
+ 14714051736202657018ull, 5226864986204893554ull}},
+{{14028362674544740630ull, 2834560265586191032ull,
+ 9169192633398545465ull, 6533581232756116943ull}},
+{{17535453343180925788ull, 8154886350410126694ull,
+ 6849804773320793927ull, 8166976540945146179ull}},
+{{6347972321060690714ull, 12014332996647411040ull,
+ 1975284974111802252ull, 5104360338090716362ull}},
+{{7934965401325863392ull, 15017916245809263800ull,
+ 11692478254494528623ull, 6380450422613395452ull}},
+{{9918706751657329240ull, 14160709288834191846ull,
+ 14615597818118160779ull, 7975563028266744315ull}},
+{{1587505701358442871ull, 6544600296307675952ull,
+ 6828905627110156535ull, 4984726892666715197ull}},
+{{1984382126698053589ull, 3569064351957207036ull,
+ 13147818052315083573ull, 6230908615833393996ull}},
+{{2480477658372566986ull, 9073016458373896699ull,
+ 16434772565393854466ull, 7788635769791742495ull}},
+{{17691199600978712030ull, 10282321304911073340ull,
+ 17189261881012240897ull, 4867897356119839059ull}},
+{{3667255427513838422ull, 17464587649566229580ull,
+ 16874891332837913217ull, 6084871695149798824ull}},
+{{4584069284392298027ull, 7995676506675623263ull,
+ 2646870092337839906ull, 7606089618937248531ull}},
+{{9782572330386268123ull, 9608983835099652443ull,
+ 17795194872207007605ull, 4753806011835780331ull}},
+{{7616529394555447250ull, 16622915812301953458ull,
+ 17632307571831371602ull, 5942257514794725414ull}},
+{{297289706339533254ull, 11555272728522666015ull,
+ 12817012427934438695ull, 7427821893493406768ull}},
+{{7103335094103290140ull, 14139574482967748115ull,
+ 8010632767459024184ull, 4642388683433379230ull}},
+{{4267482849201724771ull, 17674468103709685144ull,
+ 789918922469004422ull, 5802985854291724038ull}},
+{{5334353561502155963ull, 12869713092782330622ull,
+ 10210770689941031336ull, 7253732317864655047ull}},
+{{15891313988732470762ull, 16087141365977913277ull,
+ 8151777343998901266ull, 9067165397330818809ull}},
+{{12237914252171488178ull, 14666149372163583702ull,
+ 16624075886067783051ull, 5666978373331761755ull}},
+{{6074020778359584415ull, 13721000696777091724ull,
+ 16168408839157340910ull, 7083722966664702194ull}},
+{{7592525972949480518ull, 7927878834116588847ull,
+ 10987139012091900330ull, 8854653708330877743ull}},
+{{11662857760734507180ull, 9566610289750255933ull,
+ 13784490910198519562ull, 5534158567706798589ull}},
+{{743514145635970263ull, 2734890825333044109ull, 3395555582465985741ull,
+ 6917698209633498237ull}},
+{{5541078700472350733ull, 8030299550093693040ull,
+ 8856130496509870080ull, 8647122762041872796ull}},
+{{3463174187795219208ull, 5018937218808558150ull,
+ 14758453597173444608ull, 5404451726276170497ull}},
+{{13552339771598799818ull, 6273671523510697687ull,
+ 4613008941184642048ull, 6755564657845213122ull}},
+{{12328738696071111869ull, 7842089404388372109ull,
+ 14989633213335578368ull, 8444455822306516402ull}},
+{{10011304694258138870ull, 4901305877742732568ull,
+ 13980206776762124384ull, 5277784888941572751ull}},
+{{12514130867822673587ull, 6126632347178415710ull,
+ 12863572452525267576ull, 6597231111176965939ull}},
+{{6419291547923566176ull, 7658290433973019638ull,
+ 11467779547229196566ull, 8246538888971207424ull}},
+{{17847115272734392572ull, 174745502805749369ull,
+ 7167362217018247854ull, 5154086805607004640ull}},
+{{8473836035635827003ull, 9441803915361962520ull,
+ 8959202771272809817ull, 6442608507008755800ull}},
+{{10592295044544783754ull, 16413940912629841054ull,
+ 11199003464091012271ull, 8053260633760944750ull}},
+{{2008498384413101942ull, 17176242098034732515ull,
+ 2387691146629494765ull, 5033287896100590469ull}},
+{{16345681035798541140ull, 7635244567261251931ull,
+ 7596299951714256361ull, 6291609870125738086ull}},
+{{15820415276320788521ull, 14155741727503952818ull,
+ 272002902788044643ull, 7864512337657172608ull}},
+{{14499445566127880730ull, 6541495570476276559ull,
+ 170001814242527902ull, 4915320211035732880ull}},
+{{13512620939232463008ull, 17400241499950121507ull,
+ 212502267803159877ull, 6144150263794666100ull}},
+{{12279090155613190856ull, 7915243819655488172ull,
+ 265627834753949847ull, 7680187829743332625ull}},
+{{16897803384113020093ull, 11864556414925761963ull,
+ 11695232442789688414ull, 4800117393589582890ull}},
+{{16510568211713887212ull, 5607323481802426646ull,
+ 5395668516632334710ull, 6000146741986978613ull}},
+{{11414838227787583207ull, 16232526389107809116ull,
+ 11356271664217806291ull, 7500183427483723266ull}},
+{{16357645929222015313ull, 7839485983978686745ull,
+ 11709355808563516836ull, 4687614642177327041ull}},
+{{6611999356245355429ull, 9799357479973358432ull, 801636705422232333ull,
+ 5859518302721658802ull}},
+{{8264999195306694286ull, 16860882868394085944ull,
+ 10225417918632566224ull, 7324397878402073502ull}},
+{{10331248994133367857ull, 2629359511783055814ull,
+ 3558400361435931973ull, 9155497348002591878ull}},
+{{1845344602905967007ull, 3949192704078103836ull,
+ 16059058281179621195ull, 5722185842501619923ull}},
+{{2306680753632458758ull, 324804861670241891ull,
+ 15462136833047138590ull, 7152732303127024904ull}},
+{{16718408997322737160ull, 9629378113942578171ull,
+ 880926967599371621ull, 8940915378908781131ull}},
+{{8143162614113016773ull, 8324204330427805309ull,
+ 16691480419245464927ull, 5588072111817988206ull}},
+{{14790639286068658870ull, 5793569394607368732ull,
+ 11640978487202055351ull, 6985090139772485258ull}},
+{{41555033876271972ull, 2630275724831823012ull, 5327851072147793381ull,
+ 8731362674715606573ull}},
+{{9249343933027445790ull, 3949765337233583334ull,
+ 5635749929306064815ull, 5457101671697254108ull}},
+{{2338307879429531430ull, 325520653114591264ull, 7044687411632581019ull,
+ 6821377089621567635ull}},
+{{2922884849286914287ull, 14241958871675402792ull,
+ 4194173246113338369ull, 8526721362026959544ull}},
+{{1826803030804321430ull, 1983695267156044889ull,
+ 2621358278820836481ull, 5329200851266849715ull}},
+{{6895189806932789691ull, 7091305102372444015ull,
+ 17111755903808209313ull, 6661501064083562143ull}},
+{{4007301240238599210ull, 13475817396392942923ull,
+ 16778008861332873737ull, 8326876330104452679ull}},
+{{198720265935430554ull, 1504856845104507471ull,
+ 17403784565974127942ull, 5204297706315282924ull}},
+{{14083458387701451905ull, 11104443093235410146ull,
+ 3307986633758108311ull, 6505372132894103656ull}},
+{{8380950947772039073ull, 9268867848116874779ull,
+ 4134983292197635389ull, 8131715166117629570ull}},
+{{2932251333143830469ull, 8098885414286740689ull,
+ 7196050576050910022ull, 5082321978823518481ull}},
+{{8277000184857175990ull, 900234731003650053ull,
+ 13606749238491025432ull, 6352902473529398101ull}},
+{{14957936249498857891ull, 1125293413754562566ull,
+ 3173378492831618078ull, 7941128091911747627ull}},
+{{4737024137509398278ull, 14538366438878765316ull,
+ 18124262622515618962ull, 4963205057444842266ull}},
+{{5921280171886747847ull, 8949586011743680837ull,
+ 13431956241289747895ull, 6204006321806052833ull}},
+{{12013286233285822713ull, 6575296496252213142ull,
+ 2954887246330021157ull, 7755007902257566042ull}},
+{{2896617877376251292ull, 6415403319371327166ull,
+ 6458490547383651127ull, 4846879938910978776ull}},
+{{12844144383575089923ull, 3407568130786771053ull,
+ 8073113184229563909ull, 6058599923638723470ull}},
+{{2220122424186698691ull, 8871146181910851721ull, 868019443432179078ull,
+ 7573249904548404338ull}},
+{{12916791561185156442ull, 932780345266894421ull,
+ 5154198170572499828ull, 4733281190342752711ull}},
+{{2310931396199281841ull, 1165975431583618027ull,
+ 1831061694788236881ull, 5916601487928440889ull}},
+{{16723722300531266013ull, 6069155307906910437ull,
+ 6900513136912684005ull, 7395751859910551111ull}},
+{{12758169447045735210ull, 6099065076655512975ull,
+ 11230349738211509359ull, 4622344912444094444ull}},
+{{11336025790379781109ull, 3012145327392003315ull,
+ 14037937172764386699ull, 5777931140555118055ull}},
+{{9558346219547338482ull, 17600239714522167856ull,
+ 12935735447528095469ull, 7222413925693897569ull}},
+{{11947932774434173102ull, 8165241587870546108ull,
+ 2334611254127955625ull, 9028017407117371962ull}},
+{{16690830020876133997ull, 16632491038487561077ull,
+ 6070818052257360169ull, 5642510879448357476ull}},
+{{7028479470813003784ull, 6955555742827287635ull,
+ 7588522565321700212ull, 7053138599310446845ull}},
+{{4173913320088866826ull, 8694444678534109544ull,
+ 14097339225079513169ull, 8816423249138058556ull}},
+{{2608695825055541766ull, 16963242970152288225ull,
+ 18034209052529471538ull, 5510264530711286597ull}},
+{{7872555799746815112ull, 11980681675835584473ull,
+ 8707703260379675711ull, 6887830663389108247ull}},
+{{14452380768110906794ull, 10364166076367092687ull,
+ 6272943057047206735ull, 8609788329236385309ull}},
+{{15950267007710398602ull, 13395132825370514785ull,
+ 6226432419868198161ull, 5381117705772740818ull}},
+{{6102775704355834541ull, 2908857976430979770ull,
+ 17006412561690023510ull, 6726397132215926022ull}},
+{{16851841667299568984ull, 12859444507393500520ull,
+ 12034643665257753579ull, 8407996415269907528ull}},
+{{10532401042062230615ull, 5731309807907243873ull,
+ 7521652290786095987ull, 5254997759543692205ull}},
+{{17777187321005176173ull, 2552451241456666937ull,
+ 14013751381910007888ull, 6568747199429615256ull}},
+{{8386426095974306504ull, 3190564051820833672ull,
+ 17517189227387509860ull, 8210933999287019070ull}},
+{{5241516309983941565ull, 11217474569242796853ull,
+ 6336557248689805758ull, 5131833749554386919ull}},
+{{11163581405907314860ull, 4798471174698720258ull,
+ 3309010542434869294ull, 6414792186942983649ull}},
+{{4731104720529367767ull, 15221461005228176131ull,
+ 8747949196470974521ull, 8018490233678729561ull}},
+{{651097441117160903ull, 2595884100626528226ull,
+ 16996683293862828836ull, 5011556396049205975ull}},
+{{10037243838251226936ull, 3244855125783160282ull,
+ 16634168098901148141ull, 6264445495061507469ull}},
+{{3323182760959257862ull, 8667754925656338257ull,
+ 6957652068344271464ull, 7830556868826884337ull}},
+{{13606204271668005924ull, 5417346828535211410ull,
+ 15877747588783639425ull, 4894098043016802710ull}},
+{{7784383302730231597ull, 11383369554096402167ull,
+ 10623812449124773473ull, 6117622553771003388ull}},
+{{5118793109985401592ull, 394153887338338997ull,
+ 13279765561405966842ull, 7647028192213754235ull}},
+{{5505088702954569947ull, 4858032198013849777ull,
+ 5994010466665035324ull, 4779392620133596397ull}},
+{{11493046897120600338ull, 6072540247517312221ull,
+ 12104199101758682059ull, 5974240775166995496ull}},
+{{531250566118586710ull, 2978989290969252373ull,
+ 15130248877198352574ull, 7467800968958744370ull}},
+{{2637874613037810646ull, 15696926362137946445ull,
+ 14068091566676358262ull, 4667375605599215231ull}},
+{{7909029284724651211ull, 10397785915817657248ull,
+ 12973428439918059924ull, 5834219506999019039ull}},
+{{9886286605905814014ull, 12997232394772071560ull,
+ 11605099531470187001ull, 7292774383748773799ull}},
+{{12357858257382267517ull, 2411482438182925738ull,
+ 9894688395910345848ull, 9115967979685967249ull}},
+{{12335347429291305103ull, 1507176523864328586ull,
+ 17713395293512435915ull, 5697479987303729530ull}},
+{{6195812249759355570ull, 15719028710112574445ull,
+ 12918372080035769085ull, 7121849984129661913ull}},
+{{12356451330626582366ull, 5813727832358554344ull,
+ 2312907044762547645ull, 8902312480162077392ull}},
+{{7722782081641613979ull, 5939422904437790417ull,
+ 1445566902976592278ull, 5563945300101298370ull}},
+{{14265163620479405378ull, 16647650667402013829ull,
+ 11030330665575516155ull, 6954931625126622962ull}},
+{{3996396470317093010ull, 16197877315825129383ull,
+ 4564541295114619386ull, 8693664531408278703ull}},
+{{9415276821589264988ull, 14735359340818093768ull,
+ 9770367337087718972ull, 5433540332130174189ull}},
+{{11769096026986581234ull, 18419199176022617210ull,
+ 16824645189787036619ull, 6791925415162717736ull}},
+{{5487997996878450735ull, 18412312951600883609ull,
+ 2584062413524244158ull, 8489906768953397171ull}},
+{{14959213794117501469ull, 6896009576323164351ull,
+ 17755940072948510263ull, 5306191730595873231ull}},
+{{14087331224219488933ull, 4008325951976567535ull,
+ 17583239072758249925ull, 6632739663244841539ull}},
+{{12997478011846973262ull, 9622093458398097323ull,
+ 17367362822520424502ull, 8290924579056051924ull}},
+{{5817580748190664337ull, 1402122393071422923ull,
+ 1631229727220489506ull, 5181827861910032453ull}},
+{{2660289916810942517ull, 10976025028194054462ull,
+ 6650723177452999786ull, 6477284827387540566ull}},
+{{12548734432868453954ull, 4496659248387792269ull,
+ 17536776008671025541ull, 8096606034234425707ull}},
+{{10148802029756477673ull, 5116255039456064120ull,
+ 8654641996205697011ull, 5060378771396516067ull}},
+{{12686002537195597092ull, 1783632780892692246ull,
+ 6206616476829733360ull, 6325473464245645084ull}},
+{{6634131134639720556ull, 2229540976115865308ull,
+ 7758270596037166700ull, 7906841830307056355ull}},
+{{13369703996004601156ull, 10616835146927191625ull,
+ 2543076113309535235ull, 4941776143941910222ull}},
+{{2877071939723587733ull, 8659357915231601628ull,
+ 12402217178491694852ull, 6177220179927387777ull}},
+{{3596339924654484666ull, 10824197394039502035ull,
+ 1667713417832454853ull, 7721525224909234722ull}},
+{{18388613517404910580ull, 9070966380488382723ull,
+ 5654006904572672187ull, 4825953265568271701ull}},
+{{18374080878328750321ull, 6727021957183090500ull,
+ 11679194649143228138ull, 6032441581960339626ull}},
+{{4520857024201386286ull, 17632149483333638934ull,
+ 5375621274574259364ull, 7540551977450424533ull}},
+{{16660593695408030141ull, 1796721390228748525ull,
+ 5665606305822606055ull, 4712844985906515333ull}},
+{{6990684063977873964ull, 16080959793068099369ull,
+ 11693693900705645472ull, 5891056232383144166ull}},
+{{13350041098399730358ull, 1654455667625572595ull,
+ 5393745339027281033ull, 7363820290478930208ull}},
+{{12075865354572275044ull, 6679755602959353648ull,
+ 6742181673784101291ull, 9204775363098662760ull}},
+{{7547415846607671903ull, 1869004242635902078ull,
+ 4213863546115063307ull, 5752984601936664225ull}},
+{{210897771404814070ull, 16171313358577041310ull,
+ 9879015451071217037ull, 7191230752420830281ull}},
+{{9486994251110793396ull, 6379083642939137925ull,
+ 16960455332266409201ull, 8989038440526037851ull}},
+{{8235214416157939824ull, 15516142322905430963ull,
+ 8294441573452811798ull, 5618149025328773657ull}},
+{{5682332001770036876ull, 10171805866777012896ull,
+ 14979737985243402652ull, 7022686281660967071ull}},
+{{7102915002212546095ull, 12714757333471266120ull,
+ 14112986463126865411ull, 8778357852076208839ull}},
+{{4439321876382841310ull, 5640880324205847373ull,
+ 15738145567095372738ull, 5486473657547630524ull}},
+{{10160838363905939541ull, 16274472442112085024ull,
+ 1225937885159664306ull, 6858092071934538156ull}},
+{{12701047954882424426ull, 11119718515785330472ull,
+ 1532422356449580383ull, 8572615089918172695ull}},
+{{7938154971801515267ull, 13867353100006913401ull,
+ 7875293000422069595ull, 5357884431198857934ull}},
+{{14534379733179281987ull, 12722505356581253847ull,
+ 620744213672811186ull, 6697355538998572418ull}},
+{{13556288648046714580ull, 6679759658871791501ull,
+ 9999302303945789791ull, 8371694423748215522ull}},
+{{10778523414242890565ull, 11092378814435951544ull,
+ 10861249958393506523ull, 5232309014842634701ull}},
+{{13473154267803613206ull, 9253787499617551526ull,
+ 18188248466419271058ull, 6540386268553293376ull}},
+{{7618070797899740699ull, 2343862337667163600ull,
+ 4288566509314537207ull, 8175482835691616721ull}},
+{{4761294248687337937ull, 8382442988683059106ull,
+ 14209569114390055514ull, 5109676772307260450ull}},
+{{15174989847713948229ull, 1254681698999048074ull,
+ 8538589356132793585ull, 6387095965384075563ull}},
+{{9745365272787659478ull, 6180038142176197997ull,
+ 6061550676738604077ull, 7983869956730094454ull}},
+{{8396696304705981126ull, 6168366848073817700ull,
+ 17623527228243791260ull, 4989918722956309033ull}},
+{{10495870380882476408ull, 7710458560092272125ull,
+ 8194350980022575363ull, 6237398403695386292ull}},
+{{17731523994530483413ull, 5026387181687952252ull,
+ 10242938725028219204ull, 7796748004619232865ull}},
+{{1858830459726776325ull, 12364864025409745966ull,
+ 17931051749211106762ull, 4872967502887020540ull}},
+{{11546910111513246215ull, 6232707994907406649ull,
+ 3967070612804331837ull, 6091209378608775676ull}},
+{{598579584109394056ull, 12402571012061646216ull,
+ 4958838266005414796ull, 7614011723260969595ull}},
+{{374112240068371285ull, 16974978919393304693ull, 793430907039690295ull,
+ 4758757327038105997ull}},
+{{5079326318512852011ull, 16607037630814242962ull,
+ 5603474652227000773ull, 5948446658797632496ull}},
+{{15572529934995840821ull, 6923738983235639990ull,
+ 7004343315283750967ull, 7435558323497040620ull}},
+{{5121145190945012609ull, 11244865892163356850ull,
+ 13601086608907120162ull, 4647223952185650387ull}},
+{{15624803525536041570ull, 4832710328349420254ull,
+ 12389672242706512299ull, 5809029940232062984ull}},
+{{10307632370065276154ull, 1429201892009387414ull,
+ 15487090303383140374ull, 7261287425290078730ull}},
+{{3661168425726819384ull, 11009874401866510076ull,
+ 10135490842374149659ull, 9076609281612598413ull}},
+{{11511602302934037923ull, 4575328491952874845ull,
+ 8640524785697537489ull, 5672880801007874008ull}},
+{{554444823385383692ull, 10330846633368481461ull,
+ 10800655982121921861ull, 7091101001259842510ull}},
+{{5304742047659117519ull, 17525244310137989730ull,
+ 4277447940797626518ull, 8863876251574803138ull}},
+{{7927149798214336353ull, 6341591675408855677ull,
+ 7285090981425904478ull, 5539922657234251961ull}},
+{{14520623266195308346ull, 17150361631115845404ull,
+ 13718049745209768501ull, 6924903321542814951ull}},
+{{18150779082744135432ull, 7602893983612643043ull,
+ 12535876163084822723ull, 8656129151928518689ull}},
+{{9038393917501390693ull, 2445965730544207950ull, 917393574286932346ull,
+ 5410080719955324181ull}},
+{{2074620360021962558ull, 12280829200035035746ull,
+ 5758427986286053336ull, 6762600899944155226ull}},
+{{11816647486882229006ull, 15351036500043794682ull,
+ 16421407019712342478ull, 8453251124930194032ull}},
+{{11997090697728781033ull, 4982711794099983772ull,
+ 10263379387320214049ull, 5283281953081371270ull}},
+{{14996363372160976291ull, 10840075761052367619ull,
+ 3605852197295491753ull, 6604102441351714088ull}},
+{{14133768196773832460ull, 18161780719742847428ull,
+ 4507315246619364691ull, 8255128051689642610ull}},
+{{18056977159838421095ull, 9045269940625585690ull,
+ 7428758047564490836ull, 5159455032306026631ull}},
+{{13347849412943250561ull, 11306587425781982113ull,
+ 4674261541028225641ull, 6449318790382533289ull}},
+{{2849753710896899489ull, 298176226945313930ull,
+ 10454512944712669956ull, 8061648487978166611ull}},
+{{6392782087737950085ull, 9409732178695597014ull,
+ 4228227581231724770ull, 5038530304986354132ull}},
+{{17214349646527213414ull, 2538793186514720459ull,
+ 5285284476539655963ull, 6298162881232942665ull}},
+{{16906251039731628864ull, 17008549538425564286ull,
+ 11218291614101957857ull, 7872703601541178331ull}},
+{{5954720881404880136ull, 3712814433874895823ull,
+ 4705589249600029709ull, 4920439750963236457ull}},
+{{2831715083328712266ull, 9252704060771007683ull,
+ 10493672580427425040ull, 6150549688704045571ull}},
+{{17374701909443054044ull, 11565880075963759603ull,
+ 8505404707106893396ull, 7688187110880056964ull}},
+{{8553345684188214826ull, 16452047084332125560ull,
+ 14539249978796584180ull, 4805116944300035602ull}},
+{{10691682105235268532ull, 2118314781705605334ull,
+ 8950690436640954418ull, 6006396180375044503ull}},
+{{4141230594689309857ull, 11871265513986782476ull,
+ 6576677027373805118ull, 7507995225468805629ull}},
+{{11811641158535594469ull, 2807854927814351143ull,
+ 6416266151322322151ull, 4692497015918003518ull}},
+{{10152865429742105182ull, 17344876715050102641ull,
+ 17243704726007678496ull, 5865621269897504397ull}},
+{{17302767805605019381ull, 3234351820103076685ull,
+ 7719572852227434409ull, 7332026587371880497ull}},
+{{7793401701724110514ull, 8654625793556233761ull,
+ 14261152083711680915ull, 9165033234214850621ull}},
+{{16400091109646038832ull, 3103298111758952148ull,
+ 11219063061533494524ull, 5728145771384281638ull}},
+{{2053369813347996923ull, 3879122639698690186ull,
+ 4800456790062092347ull, 7160182214230352048ull}},
+{{11790084303539771962ull, 237217281195974828ull,
+ 6000570987577615434ull, 8950227767787940060ull}},
+{{16592174726567133285ull, 4759946819174872171ull,
+ 12973728904090785454ull, 5593892354867462537ull}},
+{{16128532389781528702ull, 15173305560823366022ull,
+ 2382103074831318105ull, 6992365443584328172ull}},
+{{10937293450372135069ull, 5131573895747043816ull,
+ 2977628843539147632ull, 8740456804480410215ull}},
+{{6835808406482584418ull, 3207233684841902385ull,
+ 8778547054853049126ull, 5462785502800256384ull}},
+{{13156446526530618427ull, 13232414142907153789ull,
+ 10973183818566311407ull, 6828481878500320480ull}},
+{{2610500102881109321ull, 11928831660206554333ull,
+ 13716479773207889259ull, 8535602348125400600ull}},
+{{3937405573514387278ull, 5149676778415402506ull,
+ 8572799858254930787ull, 5334751467578375375ull}},
+{{14145129003747759905ull, 1825409954591865228ull,
+ 6104313804391275580ull, 6668439334472969219ull}},
+{{17681411254684699881ull, 2281762443239831535ull,
+ 3018706237061706571ull, 8335549168091211524ull}},
+{{17968411061819019282ull, 17567002591520752373ull,
+ 11110063435018342414ull, 5209718230057007202ull}},
+{{8625455771991610390ull, 12735381202546164659ull,
+ 4664207256918152210ull, 6512147787571259003ull}},
+{{6170133696562125084ull, 6695854466327930016ull,
+ 1218573052720302359ull, 8140184734464073754ull}},
+{{3856333560351328178ull, 11102438069096038116ull,
+ 5373294176377576878ull, 5087615459040046096ull}},
+{{4820416950439160222ull, 4654675549515271837ull,
+ 6716617720471971098ull, 6359519323800057620ull}},
+{{10637207206476338181ull, 15041716473748865604ull,
+ 8395772150589963872ull, 7949399154750072025ull}},
+{{15871626540902487172ull, 9401072796093041002ull,
+ 16776572640187197180ull, 4968374471718795015ull}},
+{{10616161139273333156ull, 11751340995116301253ull,
+ 16359029781806608571ull, 6210468089648493769ull}},
+{{17881887442519054349ull, 10077490225467988662ull,
+ 6613729171976097002ull, 7763085112060617212ull}},
+{{6564493633147021064ull, 10910117409344880818ull,
+ 13356952769339836434ull, 4851928195037885757ull}},
+{{17428989078288552138ull, 4414274724826325214ull,
+ 2861132906392631831ull, 6064910243797357197ull}},
+{{12562864311005914365ull, 906157387605518614ull,
+ 8188102151418177693ull, 7581137804746696496ull}},
+{{3240104175951308574ull, 2872191376467143086ull,
+ 5117563844636361058ull, 4738211127966685310ull}},
+{{13273502256793911526ull, 12813611257438704665ull,
+ 15620326842650227130ull, 5922763909958356637ull}},
+{{2756819765710225695ull, 6793642034943605024ull,
+ 5690350498030620201ull, 7403454887447945797ull}},
+{{1723012353568891060ull, 15775241317908222900ull,
+ 5862312070482831577ull, 4627159304654966123ull}},
+{{2153765441961113824ull, 5883993592103114913ull,
+ 2716204069676151568ull, 5783949130818707654ull}},
+{{7303892820878780184ull, 7354991990128893641ull,
+ 12618627123949965268ull, 7229936413523384567ull}},
+{{13741552044525863134ull, 9193739987661117051ull,
+ 11161597886510068681ull, 9037420516904230709ull}},
+{{6282627018614970507ull, 17275302538356667917ull,
+ 9281841688282486877ull, 5648387823065144193ull}},
+{{12464969791696101038ull, 7759070117663671184ull,
+ 16213988128780496501ull, 7060484778831430241ull}},
+{{15581212239620126297ull, 14310523665506976884ull,
+ 6432427105693456914ull, 8825605973539287802ull}},
+{{514885612907803128ull, 13555763309369248457ull,
+ 8631952959485798475ull, 5516003733462054876ull}},
+{{5255293034562141814ull, 12333018118284172667ull,
+ 10789941199357248094ull, 6895004666827568595ull}},
+{{1957430274775289363ull, 6192900611000440026ull,
+ 8875740480769172214ull, 8618755833534460744ull}},
+{{5835079940161943756ull, 17705620937157438728ull,
+ 5547337800480732633ull, 5386722395959037965ull}},
+{{7293849925202429695ull, 8296968116164634698ull,
+ 11545858269028303696ull, 6733402994948797456ull}},
+{{18340684443357812927ull, 10371210145205793372ull,
+ 14432322836285379620ull, 8416753743685996820ull}},
+{{2239555740243857271ull, 15705378377608396666ull,
+ 18243573809533138070ull, 5260471089803748012ull}},
+{{12022816712159597397ull, 10408350935155720024ull,
+ 4357723188206870972ull, 6575588862254685016ull}},
+{{15028520890199496746ull, 13010438668944650030ull,
+ 5447153985258588715ull, 8219486077818356270ull}},
+{{4781139537947297562ull, 5825681158876712317ull,
+ 17239529296068781659ull, 5137178798636472668ull}},
+{{10588110440861509857ull, 2670415430168502492ull,
+ 3102667546376425458ull, 6421473498295590836ull}},
+{{13235138051076887321ull, 12561391324565403923ull,
+ 3878334432970531822ull, 8026841872869488545ull}},
+{{5966118272709360624ull, 3239183559425989548ull,
+ 13953174066675052149ull, 5016776170543430340ull}},
+{{7457647840886700780ull, 8660665467709874839ull,
+ 17441467583343815186ull, 6270970213179287925ull}},
+{{4710373782680988071ull, 1602459797782567741ull,
+ 7966776423897605271ull, 7838712766474109907ull}},
+{{5249826623389311496ull, 7919066401255186694ull,
+ 2673392255722309342ull, 4899195479046318692ull}},
+{{15785655316091415178ull, 675460964714207559ull,
+ 3341740319652886678ull, 6123994348807898365ull}},
+{{15120383126686881069ull, 10067698242747535257ull,
+ 8788861417993496251ull, 7654992936009872956ull}},
+{{2532710426538218812ull, 3986468392503515584ull,
+ 14716410423100710965ull, 4784370585006170597ull}},
+{{3165888033172773515ull, 9594771509056782384ull,
+ 4560454973593724994ull, 5980463231257713247ull}},
+{{3957360041465966894ull, 2770092349466202172ull,
+ 1088882698564768339ull, 7475579039072141559ull}},
+{{11696722062771005117ull, 17872208782912234021ull,
+ 7598080714244062067ull, 4672236899420088474ull}},
+{{785844523181592684ull, 17728574960212904623ull, 274228855950301776ull,
+ 5840296124275110593ull}},
+{{14817363709259154567ull, 3713974626556579162ull,
+ 4954472088365265125ull, 7300370155343888241ull}},
+{{9298332599719167400ull, 9254154301623111857ull,
+ 10804776128883969310ull, 9125462694179860301ull}},
+{{17340672920892949385ull, 1172160420087057006ull,
+ 9058828089766174771ull, 5703414183862412688ull}},
+{{12452469114261410923ull, 15300258580390984970ull,
+ 11323535112207718463ull, 7129267729828015860ull}},
+{{6342214355971987846ull, 14513637207061343309ull,
+ 14154418890259648079ull, 8911584662285019825ull}},
+{{6269726981696186356ull, 15988552282054421424ull,
+ 1928982778771198193ull, 5569740413928137391ull}},
+{{7837158727120232945ull, 6150632297285863068ull,
+ 16246286528746161454ull, 6962175517410171738ull}},
+{{9796448408900291181ull, 16911662408462104643ull,
+ 11084486124077926009ull, 8702719396762714673ull}},
+{{3816937246348988036ull, 3652259977647733546ull, 10274799907621900ull,
+ 5439199622976696671ull}},
+{{13994543594791010853ull, 4565324972059666932ull,
+ 13847901555166691087ull, 6798999528720870838ull}},
+{{17493179493488763566ull, 1094970196647195761ull,
+ 8086504907103588051ull, 8498749410901088548ull}},
+{{4015708155789395373ull, 16825257437400355015ull,
+ 14277437603794518339ull, 5311718381813180342ull}},
+{{407949176309356312ull, 16419885778323055865ull,
+ 8623424967888372116ull, 6639647977266475428ull}},
+{{5121622488814083294ull, 2078113149194268215ull,
+ 10779281209860465146ull, 8299559971583094285ull}},
+{{10118543083149883915ull, 5910506736673805538ull,
+ 9042893765376484668ull, 5187224982239433928ull}},
+{{3424806817082579086ull, 7388133420842256923ull,
+ 11303617206720605835ull, 6484031227799292410ull}},
+{{18116066576635387569ull, 4623480757625433249ull,
+ 4906149471545981486ull, 8105039034749115513ull}},
+{{4405012582756035375ull, 16724733528798059493ull,
+ 14595558465784708188ull, 5065649396718197195ull}},
+{{10117951746872432123ull, 2459172837288022750ull,
+ 13632762063803497332ull, 6332061745897746494ull}},
+{{3424067646735764345ull, 3073966046610028438ull,
+ 7817580542899595857ull, 7915077182372183118ull}},
+{{15975100334492016428ull, 13450443825199737533ull,
+ 274301820884859506ull, 4946923238982614449ull}},
+{{6133817362832856823ull, 7589682744644896109ull,
+ 4954563294533462287ull, 6183654048728268061ull}},
+{{12278957721968458932ull, 4875417412378732232ull,
+ 10804890136594215763ull, 7729567560910335076ull}},
+{{7674348576230286833ull, 741292873523013693ull,
+ 15976428372226160660ull, 4830979725568959422ull}},
+{{14204621738715246445ull, 926616091903767116ull,
+ 10747163428427925017ull, 6038724656961199278ull}},
+{{17755777173394058056ull, 5769956133307096799ull,
+ 4210582248680130463ull, 7548405821201499098ull}},
+{{18014889761012368141ull, 10523751610958017355ull,
+ 7243299923852469443ull, 4717753638250936936ull}},
+{{17906926182838072272ull, 8543003495270133790ull,
+ 9054124904815586804ull, 5897192047813671170ull}},
+{{13160285691692814532ull, 10678754369087667238ull,
+ 2094284094164707697ull, 7371490059767088963ull}},
+{{7226985077761242357ull, 17960128979786971952ull,
+ 16452913172988048333ull, 9214362574708861203ull}},
+{{4516865673600776473ull, 13530923621580551422ull,
+ 7977227723903836256ull, 5758976609193038252ull}},
+{{14869454128855746400ull, 16913654526975689277ull,
+ 9971534654879795320ull, 7198720761491297815ull}},
+{{4751759605787519288ull, 2695324085010059981ull,
+ 7852732300172356247ull, 8998400951864122269ull}},
+{{5275692762830893507ull, 8602106580772369344ull,
+ 7213800696821416606ull, 5624000594915076418ull}},
+{{6594615953538616883ull, 1529261189110685872ull,
+ 18240622907881546566ull, 7030000743643845522ull}},
+{{8243269941923271104ull, 11134948523243133148ull,
+ 13577406597997157399ull, 8787500929554806903ull}},
+{{14375415750556820248ull, 13876871854668040073ull,
+ 15403408151389305230ull, 5492188080971754314ull}},
+{{4134211632913861598ull, 8122717781480274284ull,
+ 10030888152381855730ull, 6865235101214692893ull}},
+{{5167764541142326998ull, 930025189995567047ull,
+ 17150296208904707567ull, 8581543876518366116ull}},
+{{10147381865855036230ull, 7498794771388311260ull,
+ 1495563093710666421ull, 5363464922823978823ull}},
+{{12684227332318795287ull, 13985179482662776979ull,
+ 15704511922420496738ull, 6704331153529973528ull}},
+{{11243598146971106205ull, 8258102316473695416ull,
+ 1183895829316069307ull, 8380413941912466911ull}},
+{{7027248841856941378ull, 2855470938582365683ull,
+ 7657463920963625173ull, 5237758713695291819ull}},
+{{4172375033893788819ull, 8181024691655345008ull,
+ 4960143882777143562ull, 6547198392119114774ull}},
+{{5215468792367236023ull, 1002908827714405452ull,
+ 15423551890326205261ull, 8183997990148893467ull}},
+{{12483040032084298323ull, 2932661026535197359ull,
+ 7333876922240184336ull, 5114998743843058417ull}},
+{{10992114021677984999ull, 3665826283168996699ull,
+ 13779032171227618324ull, 6393748429803823021ull}},
+{{9128456508670093345ull, 4582282853961245874ull,
+ 3388732158752359193ull, 7992185537254778777ull}},
+{{10316971336346196245ull, 14393141829794248431ull,
+ 13647172645288694255ull, 4995115960784236735ull}},
+{{8284528152005357402ull, 13379741268815422635ull,
+ 12447279788183479915ull, 6243894950980295919ull}},
+{{5743974171579308848ull, 12112990567591890390ull,
+ 10947413716801961990ull, 7804868688725369899ull}},
+{{17425041912519231742ull, 2958933086317543589ull,
+ 4536290563787532292ull, 4878042930453356187ull}},
+{{7946244335366875966ull, 3698666357896929487ull,
+ 1058677186307027461ull, 6097553663066695234ull}},
+{{5321119400781207053ull, 9235018965798549763ull,
+ 10546718519738560134ull, 7621942078833369042ull}},
+{{1019856616274560456ull, 1160200835196705698ull,
+ 11203385093263987988ull, 4763713799270855651ull}},
+{{10498192807197976378ull, 1450251043995882122ull,
+ 9392545348152597081ull, 5954642249088569564ull}},
+{{3899368972142694665ull, 6424499823422240557ull,
+ 11740681685190746351ull, 7443302811360711955ull}},
+{{4742948616802878118ull, 10932841417279982204ull,
+ 5032083044030522517ull, 4652064257100444972ull}},
+{{5928685771003597647ull, 18277737790027365659ull,
+ 6290103805038153146ull, 5815080321375556215ull}},
+{{2799171195327109154ull, 13623800200679431266ull,
+ 3250943737870303529ull, 7268850401719445269ull}},
+{{12722336031013662251ull, 3194692195567125370ull,
+ 8675365690765267316ull, 9086063002149306586ull}},
+{{12563146037810926811ull, 11220054659084229164ull,
+ 10033789575155679976ull, 5678789376343316616ull}},
+{{15703932547263658514ull, 14025068323855286455ull,
+ 12542236968944599970ull, 7098486720429145770ull}},
+{{15018229665652185238ull, 8307963367964332261ull,
+ 6454424174325974155ull, 8873108400536432213ull}},
+{{11692236550246309726ull, 2886634095764013711ull,
+ 6339858118167427799ull, 5545692750335270133ull}},
+{{10003609669380499253ull, 17443350674987180851ull,
+ 12536508666136672652ull, 6932115937919087666ull}},
+{{7892826068298236162ull, 3357444270024424448ull,
+ 6447263795816065008ull, 8665144922398859583ull}},
+{{4933016292686397602ull, 2098402668765265280ull,
+ 10947068900026122486ull, 5415715576499287239ull}},
+{{6166270365857997002ull, 11846375372811357408ull,
+ 9072150106605265203ull, 6769644470624109049ull}},
+{{7707837957322496252ull, 10196283197586808856ull,
+ 15951873651683969408ull, 8462055588280136311ull}},
+{{4817398723326560158ull, 6372676998491755535ull,
+ 16887450059943562736ull, 5288784742675085194ull}},
+{{1410062385730812293ull, 7965846248114694419ull,
+ 11885940538074677612ull, 6610980928343856493ull}},
+{{15597636037445679079ull, 9957307810143368023ull,
+ 1022367617311183303ull, 8263726160429820617ull}},
+{{16666051551044631280ull, 13140846408980686870ull,
+ 12168194806887959324ull, 5164828850268637885ull}},
+{{11609192401951013292ull, 16426058011225858588ull,
+ 1375185453327785443ull, 6456036062835797357ull}},
+{{14511490502438766615ull, 15920886495604935331ull,
+ 6330667835087119708ull, 8070045078544746696ull}},
+{{6763838554810535183ull, 727182022898308774ull, 3956667396929449818ull,
+ 5043778174090466685ull}},
+{{17678170230367944786ull, 10132349565477661775ull,
+ 9557520264589200176ull, 6304722717613083356ull}},
+{{17486026769532543079ull, 12665436956847077219ull,
+ 11946900330736500220ull, 7880903397016354195ull}},
+{{8622923721744145472ull, 17139270134884199070ull,
+ 5160969697496618685ull, 4925564623135221372ull}},
+{{1555282615325406032ull, 7589029613323085126ull,
+ 6451212121870773357ull, 6156955778919026715ull}},
+{{11167475306011533348ull, 14097973035081244311ull,
+ 3452329133911078792ull, 7696194723648783394ull}},
+{{13897201093898290199ull, 8811233146925777694ull,
+ 6769391727121812149ull, 4810121702280489621ull}},
+{{8148129330518086940ull, 15625727452084610022ull,
+ 13073425677329653090ull, 6012652127850612026ull}},
+{{961789626292832867ull, 10308787278250986720ull,
+ 7118410059807290555ull, 7515815159813265033ull}},
+{{601118516433020542ull, 4137149039693172748ull,
+ 15978221333448026357ull, 4697384474883290645ull}},
+{{751398145541275678ull, 9783122318043853839ull, 6137718611527869234ull,
+ 5871730593604113307ull}},
+{{14774305737208758309ull, 3005530860700041490ull,
+ 3060462245982448639ull, 7339663242005141634ull}},
+{{9244510134656172078ull, 17591971631157215575ull,
+ 13048949844332836606ull, 9174579052506427042ull}},
+{{12695347861801189405ull, 6383296251045871830ull,
+ 12767279671135410783ull, 5734111907816516901ull}},
+{{6645812790396710948ull, 3367434295379951884ull,
+ 2124041533637099767ull, 7167639884770646127ull}},
+{{8307265987995888685ull, 18044350924507103567ull,
+ 16490109972328538420ull, 8959549855963307658ull}},
+{{12109570270138512284ull, 2054347290962163921ull,
+ 14918004751132724417ull, 5599718659977067286ull}},
+{{1301904782390976643ull, 7179620132130092806ull,
+ 9424133902061129713ull, 6999648324971334108ull}},
+{{10850753014843496612ull, 13586211183590003911ull,
+ 11780167377576412141ull, 8749560406214167635ull}},
+{{13699249661918267239ull, 10797224998957446396ull,
+ 5056761601771563636ull, 5468475253883854772ull}},
+{{17124062077397834048ull, 13496531248696807995ull,
+ 6320952002214454545ull, 6835594067354818465ull}},
+{{16793391578319904656ull, 3035606005588846282ull,
+ 12512876021195456086ull, 8544492584193523081ull}},
+{{15107555754877328314ull, 15732311808775192638ull,
+ 903018485606078197ull, 5340307865120951926ull}},
+{{9661072656741884585ull, 5830331705686827086ull,
+ 10352145143862373555ull, 6675384831401189907ull}},
+{{2852968784072579923ull, 2676228613681145954ull,
+ 8328495411400579040ull, 8344231039251487384ull}},
+{{6394791508472750356ull, 1672642883550716221ull,
+ 5205309632125361900ull, 5215144399532179615ull}},
+{{12605175404018325849ull, 2090803604438395276ull,
+ 1894951021729314471ull, 6518930499415224519ull}},
+{{15756469255022907311ull, 16448562560830157807ull,
+ 16203746832443806800ull, 8148663124269030648ull}},
+{{16765322312030398926ull, 10280351600518848629ull,
+ 10127341770277379250ull, 5092914452668144155ull}},
+{{7121594834755834945ull, 3627067463793784979ull,
+ 8047491194419336159ull, 6366143065835180194ull}},
+{{4290307525017405777ull, 18368892385024394936ull,
+ 835991956169394390ull, 7957678832293975243ull}},
+{{2681442203135878611ull, 6868871722212858931ull,
+ 16663396037101729158ull, 4973549270183734526ull}},
+{{17186860809202011975ull, 17809461689620849471ull,
+ 11605873009522385639ull, 6216936587729668158ull}},
+{{16871889993075127065ull, 17650141093598673935ull,
+ 5283969225048206241ull, 7771170734662085198ull}},
+{{17462460273313036272ull, 4113809155858089353ull,
+ 17137538820937292613ull, 4856981709163803248ull}},
+{{7993017286359131628ull, 9753947463249999596ull,
+ 2975179452462064150ull, 6071227136454754061ull}},
+{{9991271607948914534ull, 2969062292207723687ull,
+ 8330660334004968092ull, 7589033920568442576ull}},
+{{13162073782609153440ull, 11079035969484603112ull,
+ 5206662708753105057ull, 4743146200355276610ull}},
+{{16452592228261441800ull, 13736906573590178ull,
+ 15731700422796157130ull, 5928932750444095762ull}},
+{{11342368248472026442ull, 9240543170071763531ull,
+ 10441253491640420604ull, 7411165938055119703ull}},
+{{4783137146081322574ull, 14998711518149628015ull,
+ 13443312459916344733ull, 4631978711284449814ull}},
+{{1367235414174265314ull, 4913331342404871307ull,
+ 7580768538040655109ull, 5789973389105562268ull}},
+{{15544102322999995354ull, 10753350196433477037ull,
+ 9475960672550818886ull, 7237466736381952835ull}},
+{{5595069848467830481ull, 4218315708687070489ull,
+ 7233264822261135704ull, 9046833420477441044ull}},
+{{15026133701360863811ull, 2636447317929419055ull,
+ 13744162550767985623ull, 5654270887798400652ull}},
+{{14170981108273691859ull, 17130617202693937531ull,
+ 17180203188459982028ull, 7067838609748000815ull}},
+{{13102040366914726920ull, 2966527429657870298ull,
+ 16863567967147589632ull, 8834798262185001019ull}},
+{{12800461247749092229ull, 1854079643536168936ull,
+ 8233886970253549568ull, 5521748913865625637ull}},
+{{16000576559686365286ull, 2317599554420211170ull,
+ 14904044731244324864ull, 6902186142332032046ull}},
+{{10777348662753180800ull, 2896999443025263963ull,
+ 9406683877200630272ull, 8627732677915040058ull}},
+{{4429999905007044048ull, 1810624651890789977ull,
+ 10490863441677781824ull, 5392332923696900036ull}},
+{{10149185899686192964ull, 2263280814863487471ull,
+ 13113579302097227280ull, 6740416154621125045ull}},
+{{8074796356180353301ull, 2829101018579359339ull,
+ 2556916072339370388ull, 8425520193276406307ull}},
+{{2740904713399026861ull, 10991560173466875395ull,
+ 17738973609707964156ull, 5265950120797753941ull}},
+{{17261188947030947288ull, 13739450216833594243ull,
+ 8338658956852791483ull, 6582437650997192427ull}},
+{{16964800165361296206ull, 12562626752614604900ull,
+ 5811637677638601450ull, 8228047063746490534ull}},
+{{1379628066496034321ull, 12463327738811515967ull,
+ 17467331603806289618ull, 5142529414841556583ull}},
+{{15559593138402206613ull, 6355787636659619150ull,
+ 17222478486330474119ull, 6428161768551945729ull}},
+{{10226119386147982458ull, 3333048527397136034ull,
+ 7693040052630928937ull, 8035202210689932162ull}},
+{{11003010634769876941ull, 13612370375691679781ull,
+ 9419836051321718489ull, 5022001381681207601ull}},
+{{18365449311889734080ull, 3180404914332436014ull,
+ 16386481082579536016ull, 6277501727101509501ull}},
+{{13733439603007391792ull, 3975506142915545018ull,
+ 6648043297942256308ull, 7846877158876886877ull}},
+{{13195085770307007774ull, 11708063376176991444ull,
+ 6460870070427604144ull, 4904298224298054298ull}},
+{{16493857212883759717ull, 14635079220221239305ull,
+ 17299459624889280988ull, 6130372780372567872ull}},
+{{6782263460822535934ull, 18293849025276549132ull,
+ 3177580457402049619ull, 7662965975465709841ull}},
+{{13462286699868860767ull, 9127812631584149255ull,
+ 13515202831944750772ull, 4789353734666068650ull}},
+{{12216172356408688055ull, 11409765789480186569ull,
+ 7670631503076162657ull, 5986692168332585813ull}},
+{{1435157390228696356ull, 427149181568069500ull,
+ 14199975397272591226ull, 7483365210415732266ull}},
+{{10120345405747711031ull, 4878654256907431341ull,
+ 13486670641722757420ull, 4677103256509832666ull}},
+{{17262117775612026693ull, 6098317821134289176ull,
+ 7634966265298670967ull, 5846379070637290833ull}},
+{{3130903145805481750ull, 3011211257990473567ull,
+ 14155393850050726613ull, 7307973838296613541ull}},
+{{17748686987539015899ull, 8375700090915479862ull,
+ 3859184257281244554ull, 9134967297870766927ull}},
+{{6481243348784497033ull, 9846498575249562818ull,
+ 9329519188441859702ull, 5709354561169229329ull}},
+{{17324926222835397099ull, 3084751182207177714ull,
+ 16273585003979712532ull, 7136693201461536661ull}},
+{{12432785741689470566ull, 3855938977758972143ull,
+ 6506923199692476953ull, 8920866501826920827ull}},
+{{14688020116197000960ull, 13939176907167827349ull,
+ 1760983990594104143ull, 5575541563641825517ull}},
+{{4524967089964087488ull, 12812285115532396283ull,
+ 6812916006670018083ull, 6969426954552281896ull}},
+{{1044522844027721455ull, 11403670375988107450ull,
+ 8516145008337522604ull, 8711783693190352370ull}},
+{{5264512795944713814ull, 16350666021847342964ull,
+ 9934276648638339531ull, 5444864808243970231ull}},
+{{6580640994930892267ull, 15826646508881790801ull,
+ 7806159792370536510ull, 6806081010304962789ull}},
+{{12837487262091003238ull, 10559936099247462693ull,
+ 14369385758890558542ull, 8507601262881203486ull}},
+{{10329272548020570976ull, 1988274043602276279ull,
+ 4369180080879211185ull, 5317250789300752179ull}},
+{{8299904666598325816ull, 7097028572930233253ull, 849789082671626077ull,
+ 6646563486625940224ull}},
+{{14986566851675295173ull, 13482971734590179470ull,
+ 1062236353339532596ull, 8308204358282425280ull}},
+{{4754918263869671580ull, 17650229370973637977ull,
+ 663897720837207872ull, 5192627723926515800ull}},
+{{10555333848264477378ull, 3616042640007495855ull,
+ 829872151046509841ull, 6490784654908144750ull}},
+{{8582481291903208819ull, 9131739318436757723ull,
+ 10260712225662913109ull, 8113480818635180937ull}},
+{{3058207798225811560ull, 8013180083236667529ull,
+ 17942160187107790453ull, 5070925511646988085ull}},
+{{8434445766209652354ull, 14628161122473222315ull,
+ 8592642178602574354ull, 6338656889558735107ull}},
+{{5931371189334677538ull, 9061829366236752086ull,
+ 6129116704825830039ull, 7923321111948418884ull}},
+{{17542165048616337174ull, 12581172381539051909ull,
+ 13054069977370919582ull, 4952075694967761802ull}},
+{{8092648255488257755ull, 6503093440069039079ull,
+ 7094215434858873670ull, 6190094618709702253ull}},
+{{5504124300932934289ull, 17352238836941074657ull,
+ 13479455312000979991ull, 7737618273387127816ull}},
+{{14969292734151553691ull, 17762678300729253516ull,
+ 8424659570000612494ull, 4836011420866954885ull}},
+{{264871843979890498ull, 12979975839056791088ull,
+ 15142510480928153522ull, 6045014276083693606ull}},
+{{331089804974863122ull, 7001597761966213052ull, 9704766064305416095ull,
+ 7556267845104617008ull}},
+{{9430303164964065259ull, 11293527628869965013ull,
+ 6065478790190885059ull, 4722667403190385630ull}},
+{{16399564974632469478ull, 9505223517660068362ull,
+ 16805220524593382132ull, 5903334253987982037ull}},
+{{11276084181435811040ull, 11881529397075085453ull,
+ 7171467600459563953ull, 7379167817484977547ull}},
+{{9353395622611075852ull, 508426845530846552ull, 2176324241073533519ull,
+ 4611979885928110967ull}},
+{{11691744528263844815ull, 14470591612195721902ull,
+ 16555463356624080610ull, 5764974857410138708ull}},
+{{5391308623475030210ull, 8864867478389876570ull,
+ 2247585122070549147ull, 7206218571762673386ull}},
+{{15962507816198563571ull, 6469398329559957808ull,
+ 12032853439442962242ull, 9007773214703341732ull}},
+{{9976567385124102232ull, 8655059974402361534ull,
+ 16743905436506627209ull, 5629858259189588582ull}},
+{{3247337194550351982ull, 15430510986430339822ull,
+ 11706509758778508203ull, 7037322823986985728ull}},
+{{13282543530042715785ull, 14676452714610536873ull,
+ 14633137198473135254ull, 8796653529983732160ull}},
+{{1384060678635615510ull, 4561096928204197642ull,
+ 9145710749045709534ull, 5497908456239832600ull}},
+{{10953447885149295195ull, 14924743197110022860ull,
+ 11432138436307136917ull, 6872385570299790750ull}},
+{{13691809856436618994ull, 4820870941105364863ull,
+ 5066801008529145339ull, 8590481962874738438ull}},
+{{15474910187913968727ull, 707201328977159087ull,
+ 17001808685612879549ull, 5369051226796711523ull}},
+{{14731951716465073005ull, 5495687679648836763ull,
+ 16640574838588711532ull, 6711314033495889404ull}},
+{{13803253627153953352ull, 6869609599561045954ull,
+ 2353974474526337799ull, 8389142541869861756ull}},
+{{13238719535398608749ull, 11211035027366735577ull,
+ 10694606083433736932ull, 5243214088668663597ull}},
+{{2713341363966097225ull, 14013793784208419472ull,
+ 17979943622719559069ull, 6554017610835829496ull}},
+{{3391676704957621531ull, 3682184174978360628ull,
+ 4028185454689897221ull, 8192522013544786871ull}},
+{{11343169977453289265ull, 4607208118575169344ull,
+ 9435144936822267619ull, 5120326258465491794ull}},
+{{14178962471816611581ull, 1147324129791573776ull,
+ 2570559134173058716ull, 6400407823081864743ull}},
+{{17723703089770764476ull, 1434155162239467220ull,
+ 17048256972998487107ull, 8000509778852330928ull}},
+{{1853942394251951990ull, 17037248040895524677ull,
+ 10655160608124054441ull, 5000318611782706830ull}},
+{{6929114011242327891ull, 7461501995837242134ull,
+ 4095578723300292244ull, 6250398264728383538ull}},
+{{17884764550907685672ull, 9326877494796552667ull,
+ 14342845440980141113ull, 7812997830910479422ull}},
+{{8872134835103609593ull, 17358513480316315177ull,
+ 4352592382185200291ull, 4883123644319049639ull}},
+{{15701854562306899895ull, 17086455831968006067ull,
+ 829054459304112460ull, 6103904555398812049ull}},
+{{15015632184456236965ull, 2911325716250455968ull,
+ 5648004092557528480ull, 7629880694248515061ull}},
+{{9384770115285148103ull, 1819578572656534980ull,
+ 5835845567062149252ull, 4768675433905321913ull}},
+{{11730962644106435129ull, 2274473215820668725ull,
+ 11906492977255074469ull, 5960844292381652391ull}},
+{{828645249850880199ull, 7454777538203223811ull,
+ 10271430203141455182ull, 7451055365477065489ull}},
+{{16658804345652657788ull, 47549942949626977ull,
+ 17948858923031879249ull, 4656909603423165930ull}},
+{{6988447376783658523ull, 4671123447114421626ull,
+ 13212701616935073253ull, 5821137004278957413ull}},
+{{17958931257834348962ull, 10450590327320414936ull,
+ 2680818965886677854ull, 7276421255348696767ull}},
+{{4001919998583384587ull, 3839865872295742863ull,
+ 17186081762640511030ull, 9095526569185870958ull}},
+{{9418729026755697223ull, 16234974225467003001ull,
+ 6129615083222931489ull, 5684704105741169349ull}},
+{{16385097301872009432ull, 6458659726551590039ull,
+ 12273704872456052266ull, 7105880132176461686ull}},
+{{15869685608912623886ull, 17296696695044263357ull,
+ 6118759053715289524ull, 8882350165220577108ull}},
+{{12224396514784083881ull, 1587063397547888790ull,
+ 13047596445426831761ull, 5551468853262860692ull}},
+{{6057123606625329043ull, 6595515265362248892ull,
+ 16309495556783539701ull, 6939336066578575865ull}},
+{{7571404508281661304ull, 12856080100130199019ull,
+ 6551811390697260914ull, 8674170083223219832ull}},
+{{2426284808462344363ull, 12646736081008762291ull,
+ 4094882119185788071ull, 5421356302014512395ull}},
+{{16867914065860094166ull, 11196734082833564959ull,
+ 506916630554847185ull, 6776695377518140494ull}},
+{{16473206563897729803ull, 160859548259792487ull,
+ 9857017825048334790ull, 8470869221897675617ull}},
+{{17213283130077162983ull, 13935595272944534016ull,
+ 17689851186723679003ull, 5294293263686047260ull}},
+{{3069859838886902113ull, 12807808072753279617ull,
+ 3665569909695047138ull, 6617866579607559076ull}},
+{{8449010817036015545ull, 6786388054086823713ull,
+ 4581962387118808923ull, 8272333224509448845ull}},
+{{16809846806715979476ull, 1935649524590570868ull,
+ 5169569501162949529ull, 5170208265318405528ull}},
+{{2565564434685422729ull, 7031247924165601490ull,
+ 6461961876453686911ull, 6462760331648006910ull}},
+{{12430327580211554219ull, 4177373886779613958ull,
+ 17300824382421884447ull, 8078450414560008637ull}},
+{{3157268719204833483ull, 9528387706878340580ull,
+ 13118858248227371731ull, 5049031509100005398ull}},
+{{3946585899006041853ull, 7298798615170537821ull,
+ 7175200773429438856ull, 6311289386375006748ull}},
+{{9544918392184940221ull, 9123498268963172276ull,
+ 8969000966786798570ull, 7889111732968758435ull}},
+{{15188946031970363446ull, 10313872436529370576ull,
+ 3299782595028055154ull, 4930694833105474022ull}},
+{{539438466253402691ull, 3668968508806937413ull,
+ 13348100280639844751ull, 6163368541381842527ull}},
+{{5285984101244141268ull, 18421268691290835478ull,
+ 12073439332372418034ull, 7704210676727303159ull}},
+{{17138798118559752005ull, 16124978950484160077ull,
+ 14463428610373843127ull, 4815131672954564474ull}},
+{{7588439592917526294ull, 15544537669677812193ull,
+ 8855913726112528101ull, 6018914591193205593ull}},
+{{14097235509574295771ull, 5595614031815101529ull,
+ 15681578176068048031ull, 7523643238991506991ull}},
+{{1893243165842853001ull, 10414787797525520312ull,
+ 16718515387683611875ull, 4702277024369691869ull}},
+{{2366553957303566251ull, 8406798728479512486ull,
+ 7063086179322351132ull, 5877846280462114837ull}},
+{{12181564483484233622ull, 10508498410599390607ull,
+ 13440543742580326819ull, 7347307850577643546ull}},
+{{10615269585927904124ull, 8523936994821850355ull,
+ 7577307641370632716ull, 9184134813222054433ull}},
+{{4328700481991246125ull, 14550832658618432280ull,
+ 16265032321925115207ull, 5740084258263784020ull}},
+{{5410875602489057657ull, 13576854804845652446ull,
+ 1884546328696842393ull, 7175105322829730026ull}},
+{{15986966539966097879ull, 3136010450774901845ull,
+ 11579054947725828800ull, 8968881653537162532ull}},
+{{12297697096692505126ull, 1960006531734313653ull,
+ 16460281379183418808ull, 5605551033460726582ull}},
+{{1537063315583467696ull, 2450008164667892067ull,
+ 11351979687124497702ull, 7006938791825908228ull}},
+{{15756387199761498332ull, 12285882242689640891ull,
+ 14189974608905622127ull, 8758673489782385285ull}},
+{{7541898990637242505ull, 14596205429322107413ull,
+ 11174577139779707781ull, 5474170931113990803ull}},
+{{14039059756723941036ull, 4410198731370470554ull,
+ 9356535406297246823ull, 6842713663892488504ull}},
+{{8325452659050150487ull, 901062395785700289ull,
+ 11695669257871558529ull, 8553392079865610630ull}},
+{{16732622957974813814ull, 12092379043434532440ull,
+ 2698107267742336176ull, 5345870049916006644ull}},
+{{2469034623758965652ull, 15115473804293165551ull,
+ 3372634084677920220ull, 6682337562395008305ull}},
+{{16921351334980870776ull, 447598181656905322ull,
+ 8827478624274788180ull, 8352921952993760381ull}},
+{{15187530602790432139ull, 9503120900390341634ull,
+ 7823017149385436564ull, 5220576220621100238ull}},
+{{9761041216633264366ull, 11878901125487927043ull,
+ 555399399877019897ull, 6525720275776375298ull}},
+{{7589615502364192554ull, 1013568351577745092ull,
+ 9917621286701050680ull, 8157150344720469122ull}},
+{{13966881725832396154ull, 633480219736090682ull,
+ 10810199322615544579ull, 5098218965450293201ull}},
+{{8235230120435719385ull, 14626908329952277065ull,
+ 18124435171696818627ull, 6372773706812866501ull}},
+{{14905723668972037135ull, 13671949394012958427ull,
+ 8820485909338859572ull, 7965967133516083127ull}},
+{{7010234283893829257ull, 17768340408112874825ull,
+ 12430332720977869088ull, 4978729458447551954ull}},
+{{13374478873294674476ull, 3763681436431541915ull,
+ 6314543864367560553ull, 6223411823059439943ull}},
+{{12106412573190955190ull, 9316287813966815298ull,
+ 3281493812032062787ull, 7779264778824299929ull}},
+{{12178193876671734898ull, 3516836874515565609ull,
+ 13580148678588509002ull, 4862040486765187455ull}},
+{{1387684290557504911ull, 13619418129999232820ull,
+ 12363499829808248348ull, 6077550608456484319ull}},
+{{1734605363196881138ull, 17024272662499041025ull,
+ 10842688768832922531ull, 7596938260570605399ull}},
+{{12613343398066520472ull, 8334327404848206688ull,
+ 13694209508161658438ull, 4748086412856628374ull}},
+{{15766679247583150589ull, 1194537219205482552ull,
+ 7894389848347297240ull, 5935108016070785468ull}},
+{{1261604985769386620ull, 1493171524006853191ull,
+ 9867987310434121550ull, 7418885020088481835ull}},
+{{7706032143746948494ull, 14768290257786446956ull,
+ 3861649059807632016ull, 4636803137555301147ull}},
+{{9632540179683685617ull, 13618748523507079ull, 215375306332152117ull,
+ 5796003921944126434ull}},
+{{7428989206177219118ull, 4628709454081771753ull,
+ 9492591169769965954ull, 7245004902430158042ull}},
+{{13897922526148911801ull, 15009258854456990499ull,
+ 2642366925357681634ull, 9056256128037697553ull}},
+{{6380358569629375924ull, 13992472802463006966ull,
+ 13180694374417020781ull, 5660160080023560970ull}},
+{{17198820248891495712ull, 3655532947796594995ull,
+ 7252495931166500169ull, 7075200100029451213ull}},
+{{16886839292686981736ull, 9181102203173131648ull,
+ 13677305932385513115ull, 8844000125036814016ull}},
+{{10554274557929363585ull, 3432345867769513328ull,
+ 8548316207740945697ull, 5527500078148008760ull}},
+{{13192843197411704482ull, 8902118353139279564ull,
+ 10685395259676182121ull, 6909375097685010950ull}},
+{{16491053996764630602ull, 15739333959851487359ull,
+ 4133372037740451843ull, 8636718872106263688ull}},
+{{17224437775618975982ull, 7531240715693485647ull,
+ 2583357523587782402ull, 5397949295066414805ull}},
+{{16918861201096332074ull, 190678857762081251ull,
+ 7840882922912115907ull, 6747436618833018506ull}},
+{{16536890482943027188ull, 14073406627484765276ull,
+ 577731616785369075ull, 8434295773541273133ull}},
+{{1112184514984616185ull, 6490036132964284346ull,
+ 2666925269704549624ull, 5271434858463295708ull}},
+{{10613602680585546039ull, 8112545166205355432ull,
+ 3333656587130687030ull, 6589293573079119635ull}},
+{{13267003350731932549ull, 917309420901918482ull,
+ 18002128789195522500ull, 8236616966348899543ull}},
+{{12903563112634845747ull, 9796690424918474859ull,
+ 18168859520888283418ull, 5147885603968062214ull}},
+{{11517767872366169280ull, 3022490994293317766ull,
+ 13487702364255578465ull, 6434857004960077768ull}},
+{{5173837803602935792ull, 8389799761294035112ull,
+ 16859627955319473081ull, 8043571256200097210ull}},
+{{3233648627251834870ull, 16772839896877241705ull,
+ 15148953490502058579ull, 5027232035125060756ull}},
+{{8653746802492181491ull, 16354363852669164227ull,
+ 489447789418021608ull, 6284040043906325946ull}},
+{{6205497484687838960ull, 1996210742126903668ull,
+ 9835181773627302819ull, 7855050054882907432ull}},
+{{13101807964784675158ull, 17388532778325172456ull,
+ 6146988608517064261ull, 4909406284301817145ull}},
+{{16377259955980843948ull, 7900607917624301858ull,
+ 12295421779073718231ull, 6136757855377271431ull}},
+{{11248202908121279126ull, 5264073878602989419ull,
+ 10757591205414759885ull, 7670947319221589289ull}},
+{{4724283808362105502ull, 5595889183340562339ull,
+ 18252709549452694688ull, 4794342074513493305ull}},
+{{1293668742025243974ull, 6994861479175702924ull,
+ 8980828881533704648ull, 5992927593141866632ull}},
+{{1617085927531554967ull, 8743576848969628655ull,
+ 11226036101917130810ull, 7491159491427333290ull}},
+{{7928207732348303710ull, 10076421549033405813ull,
+ 11627958582125594660ull, 4681974682142083306ull}},
+{{14521945683862767542ull, 12595526936291757266ull,
+ 5311576190802217517ull, 5852468352677604133ull}},
+{{8929060067973683619ull, 1909350615082532871ull,
+ 11251156256930159801ull, 7315585440847005166ull}},
+{{6549639066539716620ull, 6998374287280553993ull,
+ 4840573284307923943ull, 9144481801058756458ull}},
+{{15622739462655792648ull, 11291512957191428101ull,
+ 7637044321119840368ull, 5715301125661722786ull}},
+{{5693366273037577097ull, 14114391196489285127ull,
+ 322933364545024652ull, 7144126407077153483ull}},
+{{2505021822869583468ull, 17642988995611606409ull,
+ 14238724760963444527ull, 8930158008846441853ull}},
+{{13094853685361959428ull, 17944397149898335861ull,
+ 11205045984815846781ull, 5581348755529026158ull}},
+{{2533509051420285572ull, 8595438382090756115ull,
+ 4782935444165032669ull, 6976685944411282698ull}},
+{{17001944369557520677ull, 15355983996040833047ull,
+ 15202041342061066644ull, 8720857430514103372ull}},
+{{17543744258614532279ull, 374117960670744846ull, 277903801933390845ull,
+ 5450535894071314608ull}},
+{{12706308286413389541ull, 5079333469265818962ull,
+ 347379752416738556ull, 6813169867589143260ull}},
+{{6659513321161961118ull, 6349166836582273703ull, 434224690520923195ull,
+ 8516462334486429075ull}},
+{{11079724853367307555ull, 1662386263650227112ull,
+ 16412291496071434661ull, 5322788959054018171ull}},
+{{13849656066709134444ull, 6689668847990171794ull,
+ 15903678351661905422ull, 6653486198817522714ull}},
+{{8088698046531642247ull, 17585458096842490551ull,
+ 10656225902722605969ull, 8316857748521903393ull}},
+{{11972965306723358260ull, 4073382282885474738ull,
+ 18189356235270098491ull, 5198036092826189620ull}},
+{{5742834596549422017ull, 480041835179455519ull, 4289951220378071498ull,
+ 6497545116032737026ull}},
+{{2566857227259389617ull, 9823424330829095207ull,
+ 14585811062327365180ull, 8121931395040921282ull}},
+{{8521814794678200367ull, 15363012243622960312ull,
+ 13727817932381991141ull, 5076207121900575801ull}},
+{{10652268493347750459ull, 5368707249246536678ull,
+ 3324714360195325215ull, 6345258902375719752ull}},
+{{4091963579829912265ull, 2099198043130782944ull,
+ 4155892950244156519ull, 7931573627969649690ull}},
+{{2557477237393695166ull, 8229527804597821196ull,
+ 7209119112329985728ull, 4957233517481031056ull}},
+{{3196846546742118957ull, 10286909755747276495ull,
+ 9011398890412482160ull, 6196541896851288820ull}},
+{{17831116238709812409ull, 12858637194684095618ull,
+ 11264248613015602700ull, 7745677371064111025ull}},
+{{15756133667621020660ull, 17260020283532335569ull,
+ 122626355493669831ull, 4841048356915069391ull}},
+{{5860109029244112112ull, 16963339335988031558ull,
+ 13988340999649251001ull, 6051310446143836738ull}},
+{{16548508323409915948ull, 7369116114702875735ull,
+ 8262054212706787944ull, 7564138057679795923ull}},
+{{17260346729772279324ull, 4605697571689297334ull,
+ 2857940873728048513ull, 4727586286049872452ull}},
+{{12352061375360573347ull, 10368807983039009572ull,
+ 3572426092160060641ull, 5909482857562340565ull}},
+{{15440076719200716683ull, 17572695997226149869ull,
+ 9077218633627463705ull, 7386853571952925706ull}},
+{{11955890958714141879ull, 4065405970625261812ull,
+ 10284947664444552720ull, 4616783482470578566ull}},
+{{14944863698392677349ull, 5081757463281577265ull,
+ 3632812543700915092ull, 5770979353088223208ull}},
+{{4846021567708682974ull, 6352196829101971582ull,
+ 4541015679626143865ull, 7213724191360279010ull}},
+{{15280898996490629525ull, 12551932054804852381ull,
+ 14899641636387455639ull, 9017155239200348762ull}},
+{{11856404882020337406ull, 14762486561894114594ull,
+ 13923962041169547678ull, 5635722024500217976ull}},
+{{5597134065670645949ull, 9229736165512867435ull,
+ 17404952551461934598ull, 7044652530625272470ull}},
+{{2384731563660919532ull, 2313798170036308486ull,
+ 12532818652472642440ull, 8805815663281590588ull}},
+{{15325515282570238420ull, 1446123856272692803ull,
+ 17056383694650177333ull, 5503634789550994117ull}},
+{{14545208084785410120ull, 6419340838768253908ull,
+ 7485421563030557954ull, 6879543486938742647ull}},
+{{18181510105981762650ull, 17247548085315093193ull,
+ 4745090935360809538ull, 8599429358673428309ull}},
+{{4445914788597519801ull, 15391403571749321150ull,
+ 5271524843814199913ull, 5374643349170892693ull}},
+{{14780765522601675559ull, 5404196409404487725ull,
+ 11201092073195137796ull, 6718304186463615866ull}},
+{{4640898847969930736ull, 6755245511755609657ull,
+ 4777993054639146437ull, 8397880233079519833ull}},
+{{14429776826049676470ull, 6527871454060949987ull,
+ 14515460705217936283ull, 5248675145674699895ull}},
+{{13425535014134707684ull, 3548153299148799580ull,
+ 13532639863095032450ull, 6560843932093374869ull}},
+{{16781918767668384605ull, 13658563660790775283ull,
+ 3080741773586626850ull, 8201054915116718587ull}},
+{{8182856220579046426ull, 13148288306421622456ull,
+ 18066364672987499445ull, 5125659321947949116ull}},
+{{10228570275723808033ull, 2600302327744864358ull,
+ 4136211767524822691ull, 6407074152434936396ull}},
+{{3562340807799984233ull, 17085435964963244160ull,
+ 5170264709406028363ull, 8008842690543670495ull}},
+{{2226463004874990146ull, 8372554468888333648ull,
+ 10148944471019849583ull, 5005526681589794059ull}},
+{{2783078756093737682ull, 5854007067683029156ull,
+ 8074494570347424075ull, 6256908351987242574ull}},
+{{3478848445117172102ull, 2705822816176398541ull, 869746176079504286ull,
+ 7821135439984053218ull}},
+{{4480123287411926516ull, 15526197315392412800ull,
+ 5155277378477078082ull, 4888209649990033261ull}},
+{{5600154109264908145ull, 10184374607385740192ull,
+ 11055782741523735507ull, 6110262062487541576ull}},
+{{7000192636581135181ull, 8118782240804787336ull,
+ 13819728426904669384ull, 7637827578109426970ull}},
+{{4375120397863209488ull, 5074238900502992085ull,
+ 13249016285242806269ull, 4773642236318391856ull}},
+{{10080586515756399764ull, 10954484644056128010ull,
+ 16561270356553507836ull, 5967052795397989820ull}},
+{{3377361107840723897ull, 13693105805070160013ull,
+ 2254843871982333179ull, 7458815994247487276ull}},
+{{4416693701614146388ull, 6252348118955156056ull,
+ 10632649456843734045ull, 4661759996404679547ull}},
+{{5520867127017682985ull, 12427121167121332974ull,
+ 8679125802627279652ull, 5827199995505849434ull}},
+{{16124455945626879539ull, 15533901458901666217ull,
+ 1625535216429323757ull, 7283999994382311793ull}},
+{{6320511876751435711ull, 5582318768344919060ull,
+ 6643605038964042601ull, 9104999992977889741ull}},
+{{13173691959824423128ull, 15018164276284044172ull,
+ 6458096158566220577ull, 5690624995611181088ull}},
+{{16467114949780528910ull, 4937647290072891503ull,
+ 8072620198207775722ull, 7113281244513976360ull}},
+{{15972207668798273233ull, 15395431149445890187ull,
+ 10090775247759719652ull, 8891601555642470450ull}},
+{{7676786783785226819ull, 398772431548905559ull,
+ 10918420548277212687ull, 5557250972276544031ull}},
+{{4984297461304145619ull, 14333523594718295661ull,
+ 9036339666919127954ull, 6946563715345680039ull}},
+{{10842057845057569928ull, 8693532456543093768ull,
+ 6683738565221522039ull, 8683204644182100049ull}},
+{{6776286153160981205ull, 12350986812980515461ull,
+ 15706551649331921034ull, 5427002902613812530ull}},
+{{13082043709878614410ull, 6215361479370868518ull,
+ 10409817524810125485ull, 6783753628267265663ull}},
+{{7129182600493492205ull, 12380887867640973552ull,
+ 8400585887585268952ull, 8479692035334082079ull}},
+{{4455739125308432628ull, 7738054917275608470ull,
+ 12167895207381874951ull, 5299807522083801299ull}},
+{{14793045943490316593ull, 5060882628167122683ull,
+ 10598182990799955785ull, 6624759402604751624ull}},
+{{13879621410935507837ull, 10937789303636291258ull,
+ 13247728738499944731ull, 8280949253255939530ull}},
+{{13286449400262080303ull, 4530275305558988084ull,
+ 12891516479989853361ull, 5175593283284962206ull}},
+{{16608061750327600378ull, 10274530150376123009ull,
+ 6891023563132540893ull, 6469491604106202758ull}},
+{{6925019132627336760ull, 17454848706397541666ull,
+ 17837151490770451924ull, 8086864505132753447ull}},
+{{8939822976319473379ull, 1685908404643687733ull,
+ 18065748709372614309ull, 5054290315707970904ull}},
+{{15786464738826729628ull, 6719071524231997570ull,
+ 4135441813006216270ull, 6317862894634963631ull}},
+{{10509708886678636227ull, 17622211442144772771ull,
+ 557616247830382433ull, 7897328618293704539ull}},
+{{4262725044960453690ull, 4096353123699401126ull,
+ 16489411219389846685ull, 4935830386433565336ull}},
+{{14551778343055342921ull, 9732127423051639311ull,
+ 2165019950527756740ull, 6169787983041956671ull}},
+{{13578036910391790747ull, 12165159278814549139ull,
+ 16541332993441859637ull, 7712234978802445838ull}},
+{{6180430059781175265ull, 9909067558472787164ull,
+ 5726647102473774369ull, 4820146861751528649ull}},
+{{7725537574726469081ull, 16998020466518371859ull,
+ 11769994896519605865ull, 6025183577189410811ull}},
+{{5045235949980698447ull, 7412467527865801112ull,
+ 10100807602222119428ull, 7531479471486763514ull}},
+{{3153272468737936530ull, 13856164241770901503ull,
+ 10924690769816212546ull, 4707174669679227196ull}},
+{{17776648641204584374ull, 8096833265358851070ull,
+ 13655863462270265683ull, 5883968337099033995ull}},
+{{12997438764650954659ull, 5509355563271175934ull,
+ 12458143309410444200ull, 7354960421373792494ull}},
+{{7023426418958917516ull, 6886694454088969918ull,
+ 6349307099908279442ull, 9193700526717240618ull}},
+{{18224699567131487160ull, 8915870052232994102ull,
+ 8580002955870062555ull, 5746062829198275386ull}},
+{{13557502422059583141ull, 6533151546863854724ull,
+ 1501631657982802386ull, 7182578536497844233ull}},
+{{16946878027574478926ull, 17389811470434594213ull,
+ 6488725590905890886ull, 8978223170622305291ull}},
+{{12897641776447743281ull, 6256946150594233479ull,
+ 1749610485102487852ull, 5611389481638940807ull}},
+{{11510366202132291197ull, 7821182688242791849ull,
+ 16022071161660273527ull, 7014236852048676008ull}},
+{{552899697383200285ull, 5164792341876101908ull, 1580844878365790293ull,
+ 8767796065060845011ull}},
+{{9568934347719275986ull, 5533838222886257644ull,
+ 17128929113474476597ull, 5479872540663028131ull}},
+{{11961167934649094982ull, 11528983797035209959ull,
+ 16799475373415707842ull, 6849840675828785164ull}},
+{{10339773899883980824ull, 5187857709439236641ull,
+ 2552600143060083187ull, 8562300844785981456ull}},
+{{17991573733495957775ull, 936568059185828948ull,
+ 1595375089412551992ull, 5351438027991238410ull}},
+{{4042723093160395603ull, 1170710073982286186ull,
+ 11217590898620465798ull, 6689297534989048012ull}},
+{{14276775903305270311ull, 10686759629332633540ull,
+ 14021988623275582247ull, 8361621918736310015ull}},
+{{18146356976420569753ull, 13596753795973977818ull,
+ 15681271917188320760ull, 5226013699210193759ull}},
+{{13459574183670936383ull, 16995942244967472273ull,
+ 14989903878058013046ull, 6532517124012742199ull}},
+{{2989409674306506767ull, 12021555769354564534ull,
+ 14125693829145128404ull, 8165646405015927749ull}},
+{{15703439101723730441ull, 16736844392701378641ull,
+ 11134401652429399204ull, 5103529003134954843ull}},
+{{5794240821872499339ull, 2474311417167171686ull,
+ 9306316047109361102ull, 6379411253918693554ull}},
+{{16466173064195399982ull, 12316261308313740415ull,
+ 2409523022031925569ull, 7974264067398366943ull}},
+{{17208887192763206845ull, 780134290055005903ull,
+ 8423480916411035337ull, 4983915042123979339ull}},
+{{16899422972526620652ull, 5586853880996145283ull,
+ 5917665127086406267ull, 6229893802654974174ull}},
+{{16512592697230887911ull, 2371881332817793700ull,
+ 16620453445712783642ull, 7787367253318717717ull}},
+{{1096998398914529137ull, 6094111851438508967ull,
+ 12693626412784183728ull, 4867104533324198573ull}},
+{{15206306053925325133ull, 7617639814298136208ull,
+ 2031974960698065948ull, 6083880666655248217ull}},
+{{561138493697104800ull, 9522049767872670261ull, 7151654719299970339ull,
+ 7604850833319060271ull}},
+{{2656554567774384452ull, 3645438095706724961ull,
+ 11387313227203563318ull, 4753031770824412669ull}},
+{{7932379228145368469ull, 13780169656488182009ull,
+ 399083478722290435ull, 5941289713530515837ull}},
+{{14527160053609098490ull, 12613526052182839607ull,
+ 5110540366830250948ull, 7426612141913144796ull}},
+{{15997004061146768412ull, 17106825819469050562ull,
+ 12417459766123682650ull, 4641632588695715497ull}},
+{{10772883039578684707ull, 12160160237481537395ull,
+ 1686766652372439601ull, 5802040735869644372ull}},
+{{8854417781045967980ull, 1365142241569758032ull,
+ 2108458315465549502ull, 7252550919837055465ull}},
+{{11068022226307459975ull, 10929799838816973348ull,
+ 7247258912759324781ull, 9065688649796319331ull}},
+{{16140885928296938293ull, 9136967908474302294ull,
+ 2223693811260884036ull, 5666055406122699582ull}},
+{{10952735373516397058ull, 11421209885592877868ull,
+ 12002989300930880853ull, 7082569257653374477ull}},
+{{13690919216895496322ull, 441454301708933623ull,
+ 1168678570881437355ull, 8853211572066718097ull}},
+{{15474353538200767057ull, 16416810003063941178ull,
+ 12259639152869368106ull, 5533257232541698810ull}},
+{{10119569885896183014ull, 11297640466975150665ull,
+ 6101176904231934325ull, 6916571540677123513ull}},
+{{17261148375797616671ull, 286992528436774619ull,
+ 12238157148717305811ull, 8645714425846404391ull}},
+{{8482374725659816467ull, 16320271394768841801ull,
+ 14566377245589397987ull, 5403571516154002744ull}},
+{{15214654425502158488ull, 15788653225033664347ull,
+ 18207971556986747484ull, 6754464395192503430ull}},
+{{14406632013450310206ull, 1289072457582528818ull,
+ 13536592409378658548ull, 8443080493990629288ull}},
+{{13615831026833831783ull, 10029042322843856319ull,
+ 8460370255861661592ull, 5276925308744143305ull}},
+{{12408102765114901825ull, 12536302903554820399ull,
+ 15187148838254464894ull, 6596156635930179131ull}},
+{{10898442437966239377ull, 6447006592588749691ull,
+ 14372250029390693214ull, 8245195794912723914ull}},
+{{4505683514515205659ull, 17864437175650132269ull,
+ 13594342286796571162ull, 5153247371820452446ull}},
+{{10243790411571394977ull, 13107174432707889528ull,
+ 7769555821640938145ull, 6441559214775565558ull}},
+{{12804738014464243721ull, 2548909985602698198ull,
+ 488572740196396874ull, 8051949018469456948ull}},
+{{3391275240612764422ull, 6204754759429074278ull,
+ 9528729999477523854ull, 5032468136543410592ull}},
+{{13462466087620731335ull, 16979315486141118655ull,
+ 11910912499346904817ull, 6290585170679263240ull}},
+{{12216396591098526265ull, 7389086302394234607ull,
+ 14888640624183631022ull, 7863231463349079050ull}},
+{{14552776897077660772ull, 6492920569008725ull, 13917086408542157293ull,
+ 4914519664593174406ull}},
+{{4355913066064912253ull, 4619802169138648811ull,
+ 8172985973822920808ull, 6143149580741468008ull}},
+{{833205314153752412ull, 5774752711423311014ull,
+ 10216232467278651010ull, 7678936975926835010ull}},
+{{14355811376628258970ull, 8220906463066957287ull,
+ 10996831310476544785ull, 4799335609954271881ull}},
+{{13333078202357935808ull, 14887819097261084513ull,
+ 18357725156523068885ull, 5999169512442839851ull}},
+{{2831289697665256048ull, 4774715816294191930ull,
+ 18335470427226448203ull, 7498961890553549814ull}},
+{{6381242079468172934ull, 678354375970176004ull, 6847982998589142223ull,
+ 4686851181595968634ull}},
+{{7976552599335216167ull, 14683001025244883717ull,
+ 17783350785091203586ull, 5858563976994960792ull}},
+{{14582376767596408113ull, 9130379244701328838ull,
+ 3782444407654452867ull, 7323204971243700991ull}},
+{{9004598922640734333ull, 6801288037449273144ull, 116369491140678180ull,
+ 9154006214054626239ull}},
+{{5627874326650458958ull, 13474177060260571523ull,
+ 6990259959604005718ull, 5721253883784141399ull}},
+{{2423156889885685794ull, 7619349288470938596ull,
+ 4126138931077619244ull, 7151567354730176749ull}},
+{{3028946112357107242ull, 9524186610588673245ull,
+ 9769359682274411959ull, 8939459193412720936ull}},
+{{4198934329436885979ull, 12870145659259002634ull,
+ 6105849801421507474ull, 5587161995882950585ull}},
+{{14472039948650883281ull, 6864310037218977484ull,
+ 12243998270204272247ull, 6983952494853688231ull}},
+{{18090049935813604101ull, 3968701528096333951ull,
+ 10693311819327952405ull, 8729940618567110289ull}},
+{{18223810237524584419ull, 4786281464273902671ull,
+ 18212534933148440013ull, 5456212886604443930ull}},
+{{18168076778478342620ull, 10594537848769766243ull,
+ 13542296629580774208ull, 6820266108255554913ull}},
+{{18098409954670540371ull, 13243172310962207804ull,
+ 3092812731693804048ull, 8525332635319443642ull}},
+{{2088134184814311924ull, 8276982694351379878ull,
+ 6544693975736015434ull, 5328332897074652276ull}},
+{{11833539767872665713ull, 1122856331084449039ull,
+ 8180867469670019293ull, 6660416121343315345ull}},
+{{10180238691413444237ull, 6015256432282949203ull,
+ 14837770355514912020ull, 8325520151679144181ull}},
+{{4056806172919708696ull, 12982907307031619060ull,
+ 11579449481410513964ull, 5203450094799465113ull}},
+{{5071007716149635870ull, 16228634133789523825ull,
+ 639253796480978743ull, 6504312618499331392ull}},
+{{10950445663614432742ull, 15674106648809516877ull,
+ 799067245601223429ull, 8130390773124164240ull}},
+{{9149871548972714416ull, 12102159664719642000ull,
+ 499417028500764643ull, 5081494233202602650ull}},
+{{11437339436215893020ull, 10516013562472164596ull,
+ 9847643322480731612ull, 6351867791503253312ull}},
+{{14296674295269866275ull, 13145016953090205745ull,
+ 12309554153100914515ull, 7939834739379066640ull}},
+{{2017892406902584566ull, 5909792586467684639ull,
+ 7693471345688071572ull, 4962396712111916650ull}},
+{{16357423563910394419ull, 7387240733084605798ull,
+ 393467145255313657ull, 6202995890139895813ull}},
+{{11223407418033217216ull, 13845736934783145152ull,
+ 5103519949996529975ull, 7753744862674869766ull}},
+{{7014629636270760760ull, 15571114611880547576ull,
+ 17024758024029994946ull, 4846090539171793603ull}},
+{{8768287045338450950ull, 10240521227995908662ull,
+ 16669261511610105779ull, 6057613173964742004ull}},
+{{1736986769818287879ull, 8188965516567497924ull,
+ 2389832815803080608ull, 7572016467455927506ull}},
+{{10308988767991205733ull, 5118103447854686202ull,
+ 6105331528304313284ull, 4732510292159954691ull}},
+{{3662863923134231358ull, 6397629309818357753ull,
+ 3019978391953003701ull, 5915637865199943364ull}},
+{{9190265922345177101ull, 12608722655700335095ull,
+ 3774972989941254626ull, 7394547331499929205ull}},
+{{12661445229106817544ull, 12492137678240097338ull,
+ 4665201127926978093ull, 4621592082187455753ull}},
+{{6603434499528746122ull, 1780114042517957961ull,
+ 10443187428336110521ull, 5776990102734319691ull}},
+{{12865979142838320557ull, 6836828571574835355ull,
+ 8442298266992750247ull, 7221237628417899614ull}},
+{{11470787910120512792ull, 3934349696041156290ull,
+ 1329500796886162001ull, 9026547035522374518ull}},
+{{11780928462252708399ull, 13988183606094192441ull,
+ 14665996053336014962ull, 5641591897201484073ull}},
+{{891102522533721787ull, 8261857470762964744ull, 4497437011387854991ull,
+ 7051989871501855092ull}},
+{{1113878153167152233ull, 5715635820026318026ull,
+ 5621796264234818739ull, 8814987339377318865ull}},
+{{5307859864156858050ull, 1266429378302754814ull,
+ 15042837711215231472ull, 5509367087110824290ull}},
+{{15858196867050848370ull, 1583036722878443517ull,
+ 9580175102164263532ull, 6886708858888530363ull}},
+{{5987688028531396751ull, 1978795903598054397ull,
+ 7363532859277941511ull, 8608386073610662954ull}},
+{{6048148027045816922ull, 8154276467389865854ull,
+ 9213894055476101348ull, 5380241296006664346ull}},
+{{16783557070662046960ull, 10192845584237332317ull,
+ 2293995532490350877ull, 6725301620008330433ull}},
+{{7144388283045394988ull, 17352742998724053301ull,
+ 7479180434040326500ull, 8406627025010413041ull}},
+{{6771085686117065819ull, 1622092337347757505ull,
+ 16203702817343673823ull, 5254141890631508150ull}},
+{{13075543126073720178ull, 15862673476966860593ull,
+ 11031256484824816470ull, 6567677363289385188ull}},
+{{2509370852309986511ull, 10604969809353799934ull,
+ 13789070606031020588ull, 8209596704111731485ull}},
+{{15403414837975905281ull, 15851478167700900766ull,
+ 10924012137983081819ull, 5130997940069832178ull}},
+{{10030896510615105793ull, 15202661691198738054ull,
+ 4431643135624076466ull, 6413747425087290223ull}},
+{{3315248601414106434ull, 9779955077143646760ull, 927867901102707679ull,
+ 8017184281359112779ull}},
+{{2072030375883816521ull, 13030000950855861081ull,
+ 16720818502685049963ull, 5010740175849445486ull}},
+{{7201723988282158555ull, 11675815170142438447ull,
+ 11677651091501536646ull, 6263425219811806858ull}},
+{{4390468966925310290ull, 5371396925823272251ull,
+ 5373691827522145000ull, 7829281524764758573ull}},
+{{438200095114624980ull, 3357123078639545157ull, 5664400401415034577ull,
+ 4893300952977974108ull}},
+{{5159436137320669128ull, 8808089866726819350ull,
+ 7080500501768793221ull, 6116626191222467635ull}},
+{{15672667208505612218ull, 15621798351835912091ull,
+ 4238939608783603622ull, 7645782739028084544ull}},
+{{7489573996102313685ull, 5151937951470057153ull,
+ 2649337255489752264ull, 4778614211892552840ull}},
+{{13973653513555280010ull, 6439922439337571441ull,
+ 3311671569362190330ull, 5973267764865691050ull}},
+{{3632008836661936300ull, 17273275086026740110ull,
+ 13362961498557513720ull, 7466584706082113812ull}},
+{{16105063578195873900ull, 10795796928766712568ull,
+ 17575222973453221883ull, 4666615441301321132ull}},
+{{1684585399035290758ull, 8883060142531002807ull,
+ 3522284643106975738ull, 5833269301626651416ull}},
+{{15940789804076277160ull, 1880453141308977700ull,
+ 4402855803883719673ull, 7291586627033314270ull}},
+{{1479243181385794834ull, 6962252445063610030ull,
+ 14726941791709425399ull, 9114483283791642837ull}},
+{{14759585043648285483ull, 11268936805805838124ull,
+ 11510181629032084826ull, 5696552052369776773ull}},
+{{2737230850805238ull, 4862798970402521848ull, 552668981007942321ull,
+ 7120690065462220967ull}},
+{{3421538563506547ull, 10690184731430540214ull, 14525894281542091613ull,
+ 8900862581827776208ull}},
+{{13837196516884355304ull, 8987208466357781585ull,
+ 9078683925963807258ull, 5563039113642360130ull}},
+{{3461437590823280418ull, 2010638546092451174ull,
+ 2124982870599983265ull, 6953798892052950163ull}},
+{{13550169025383876331ull, 7124984201042951871ull,
+ 16491286643532142793ull, 8692248615066187703ull}},
+{{15386384668506004563ull, 15982330171720314679ull,
+ 17224583179848671101ull, 5432655384416367314ull}},
+{{14621294817205117799ull, 6142854659368229637ull,
+ 12307356937956063069ull, 6790819230520459143ull}},
+{{4441560466224233537ull, 12290254342637674951ull,
+ 10772510154017690932ull, 8488524038150573929ull}},
+{{9693504319031227817ull, 16904781001003322652ull,
+ 18262033892329526592ull, 5305327523844108705ull}},
+{{12116880398789034771ull, 2684232177544601699ull,
+ 8992484310129744529ull, 6631659404805135882ull}},
+{{10534414480058905560ull, 7966976240358140028ull,
+ 2017233350807404853ull, 8289574256006419853ull}},
+{{15807381086891591783ull, 7285203159437531469ull,
+ 3566613853468321985ull, 5180983910004012408ull}},
+{{5924168303332326017ull, 13718189967724302241ull,
+ 4458267316835402481ull, 6476229887505015510ull}},
+{{12016896397592795425ull, 3312679404373214089ull,
+ 14796206182899028910ull, 8095287359381269387ull}},
+{{593031220854415285ull, 15905482683015422518ull,
+ 6941785855098199116ull, 5059554599613293367ull}},
+{{9964661062922794914ull, 1435109280059726531ull,
+ 4065546300445360992ull, 6324443249516616709ull}},
+{{7844140310226105738ull, 1793886600074658164ull,
+ 9693618893984089144ull, 7905554061895770886ull}},
+{{14125959730746091894ull, 1121179125046661352ull,
+ 1446825790312667811ull, 4940971288684856804ull}},
+{{17657449663432614868ull, 15236531961590490402ull,
+ 1808532237890834763ull, 6176214110856071005ull}},
+{{12848440042435992777ull, 14433978933560725099ull,
+ 6872351315790931358ull, 7720267638570088756ull}},
+{{5724432017308801534ull, 4409550815048065283ull,
+ 13518591609224107907ull, 4825167274106305472ull}},
+{{2543854003208614013ull, 900252500382693700ull,
+ 16898239511530134884ull, 6031459092632881840ull}},
+{{3179817504010767516ull, 1125315625478367125ull,
+ 2676055315703116989ull, 7539323865791102301ull}},
+{{4293228949220423650ull, 3009165275137673405ull,
+ 3978377581528142070ull, 4712077416119438938ull}},
+{{9978222204952917466ull, 12984828630776867564ull,
+ 14196344013764953395ull, 5890096770149298672ull}},
+{{12472777756191146832ull, 11619349770043696551ull,
+ 17745430017206191744ull, 7362620962686623340ull}},
+{{10979286176811545636ull, 14524187212554620689ull,
+ 3735043447798188064ull, 9203276203358279176ull}},
+{{18391268906575685783ull, 9077617007846637930ull,
+ 2334402154873867540ull, 5752047627098924485ull}},
+{{13765714096364831420ull, 11347021259808297413ull,
+ 7529688712019722329ull, 7190059533873655606ull}},
+{{3372084565173875563ull, 348718519478208055ull, 188738853169877104ull,
+ 8987574417342069508ull}},
+{{9025081880874754083ull, 217949074673880034ull, 9341333820085948998ull,
+ 5617234010838793442ull}},
+{{2057980314238666796ull, 9495808380197125851ull,
+ 2453295238252660439ull, 7021542513548491803ull}},
+{{16407533448080497207ull, 7258074456819019409ull,
+ 16901677103097989261ull, 8776928141935614753ull}},
+{{3337179377409228899ull, 6842139544725581083ull,
+ 3646019161795161432ull, 5485580088709759221ull}},
+{{18006532277043699835ull, 8552674430906976353ull,
+ 9169209970671339694ull, 6856975110887199026ull}},
+{{8673107291022461082ull, 1467471001778944634ull,
+ 2238140426484398810ull, 8571218888608998783ull}},
+{{10032378075316426080ull, 5528855394539228300ull,
+ 8316366794193831112ull, 5357011805380624239ull}},
+{{12540472594145532600ull, 6911069243174035375ull,
+ 5783772474314900986ull, 6696264756725780299ull}},
+{{11063904724254527846ull, 17862208590822320027ull,
+ 2618029574466238328ull, 8370330945907225374ull}},
+{{4609097443445385952ull, 11163880369263950017ull,
+ 15471326539323562667ull, 5231456841192015858ull}},
+{{10373057822734120344ull, 9343164443152549617ull,
+ 10115786137299677526ull, 6539321051490019823ull}},
+{{17578008296845038334ull, 2455583517085911213ull,
+ 8033046653197209004ull, 8174151314362524779ull}},
+{{13292098194741842911ull, 10758111735033470316ull,
+ 2714811149034561675ull, 5108844571476577987ull}},
+{{16615122743427303638ull, 8835953650364449991ull,
+ 17228571991575365806ull, 6386055714345722483ull}},
+{{16157217410856741644ull, 1821570026100786681ull,
+ 16924028971041819354ull, 7982569642932153104ull}},
+{{3180731854144381672ull, 5750167284740379580ull,
+ 10577518106901137096ull, 4989106026832595690ull}},
+{{3975914817680477089ull, 7187709105925474475ull,
+ 3998525596771645562ull, 6236382533540744613ull}},
+{{358207503673208457ull, 18208008419261618902ull,
+ 9609843014391944856ull, 7795478166925930766ull}},
+{{14058937745077918998ull, 11380005262038511813ull,
+ 1394465865567577631ull, 4872173854328706729ull}},
+{{3738614126065235036ull, 9613320559120751863ull,
+ 6354768350386859943ull, 6090217317910883411ull}},
+{{61581639154155890ull, 7404964680473551925ull, 3331774419556187025ull,
+ 7612771647388604264ull}},
+{{2344331533685041384ull, 16157317971364439713ull,
+ 2082359012222616890ull, 4757982279617877665ull}},
+{{7542100435533689633ull, 10973275427350773833ull,
+ 7214634783705659017ull, 5947477849522347081ull}},
+{{14039311562844499946ull, 18328280302615855195ull,
+ 13629979498059461675ull, 7434347311902933851ull}},
+{{6468726717564118514ull, 9149332179921215545ull,
+ 6212894177073469595ull, 4646467069939333657ull}},
+{{12697594415382536047ull, 6824979206474131527ull,
+ 12377803739769224898ull, 5808083837424167071ull}},
+{{11260307000800782154ull, 17754596044947440217ull,
+ 10860568656284143218ull, 7260104796780208839ull}},
+{{240325695718813981ull, 12969873019329524464ull,
+ 8964024801927791119ull, 9075130995975261049ull}},
+{{150203559824258738ull, 15023699664722034646ull,
+ 17131730547273339209ull, 5671956872484538155ull}},
+{{9411126486635099230ull, 4944566525620379595ull,
+ 16802977165664286108ull, 7089946090605672694ull}},
+{{7152222089866486134ull, 6180708157025474494ull,
+ 11780349420225581827ull, 8862432613257090868ull}},
+{{18305196861448717546ull, 1557099588927227606ull,
+ 16586090424495764450ull, 5539020383285681792ull}},
+{{13658124039956121124ull, 11169746523013810316ull,
+ 2285868956910153946ull, 6923775479107102241ull}},
+{{17072655049945151405ull, 4738811116912487087ull,
+ 7469022214565080337ull, 8654719348883877801ull}},
+{{17587938433856801484ull, 14490971994138774189ull,
+ 16197353930171644970ull, 5409199593052423625ull}},
+{{8149864987038838143ull, 8890342955818691929ull,
+ 6411634357432392501ull, 6761499491315529532ull}},
+{{14799017252225935583ull, 15724614713200752815ull,
+ 8014542946790490626ull, 8451874364144411915ull}},
+{{16166914810282291596ull, 14439570214177858413ull,
+ 2703246332530362689ull, 5282421477590257447ull}},
+{{6373585457570700782ull, 4214404712440159305ull,
+ 17214115970945117074ull, 6603026846987821808ull}},
+{{12578667840390763882ull, 14491377927404974939ull,
+ 3070900889971844726ull, 8253783558734777261ull}},
+{{5555824391030533474ull, 4445425186200721433ull,
+ 4225156065446096906ull, 5158614724209235788ull}},
+{{11556466507215554747ull, 14780153519605677599ull,
+ 5281445081807621132ull, 6448268405261544735ull}},
+{{9833897115592055529ull, 28447825797545383ull, 1990120333832138512ull,
+ 8060335506576930919ull}},
+{{13063714724886116562ull, 17779891123465864ull, 8161354236286168426ull,
+ 5037709691610581824ull}},
+{{16329643406107645702ull, 9245596900759108138ull,
+ 10201692795357710532ull, 6297137114513227280ull}},
+{{11188682220779781320ull, 11556996125948885173ull,
+ 12752115994197138165ull, 7871421393141534100ull}},
+{{9298769397201057277ull, 9528965587931747185ull,
+ 17193444533227987161ull, 4919638370713458812ull}},
+{{16235147764928709500ull, 16522893003342071885ull,
+ 3045061592825432335ull, 6149547963391823516ull}},
+{{6458876650878723163ull, 16041930235750201953ull,
+ 3806326991031790419ull, 7686934954239779395ull}},
+{{15566012952867671737ull, 7720363388130182268ull, 73111360181175060ull,
+ 4804334346399862122ull}},
+{{1010772117375038055ull, 9650454235162727836ull,
+ 9314761237081244633ull, 6005417932999827652ull}},
+{{1263465146718797569ull, 16674753812380797699ull,
+ 11643451546351555791ull, 7506772416249784565ull}},
+{{16930566781195106145ull, 17339250160379080417ull,
+ 9583000225683416321ull, 4691732760156115353ull}},
+{{7328150421211718969ull, 7839004645191686810ull,
+ 16590436300531658306ull, 5864665950195144191ull}},
+{{18383560063369424519ull, 575383769634832704ull,
+ 16126359357237184979ull, 7330832437743930239ull}},
+{{4532706005502229033ull, 14554287767325704593ull,
+ 15546263178119093319ull, 9163540547179912799ull}},
+{{14362156299507362906ull, 16013958882219647226ull,
+ 16633943513965515180ull, 5727212841987445499ull}},
+{{8729323337529427824ull, 1570704529065007417ull,
+ 16180743374029506072ull, 7159016052484306874ull}},
+{{15523340190339172684ull, 1963380661331259271ull,
+ 11002557180682106782ull, 8948770065605383593ull}},
+{{16619616646603064784ull, 15062170968614200756ull,
+ 18405813283994786498ull, 5592981291003364745ull}},
+{{2327776734544279363ull, 9604341673912975138ull,
+ 9172208549711319411ull, 6991226613754205932ull}},
+{{12133092955035125012ull, 7393741073963831018ull,
+ 11465260687139149264ull, 8739033267192757415ull}},
+{{12194869115324341037ull, 4621088171227394386ull,
+ 14083316957103050146ull, 5461895791995473384ull}},
+{{6020214357300650488ull, 14999732250889018791ull,
+ 17604146196378812682ull, 6827369739994341730ull}},
+{{2913581928198425206ull, 9526293276756497681ull,
+ 12781810708618740045ull, 8534212174992927163ull}},
+{{13350203751192485514ull, 8259776307186505002ull,
+ 5682788683673018576ull, 5333882609370579477ull}},
+{{7464382652135831084ull, 10324720383983131253ull,
+ 11715171873018661124ull, 6667353261713224346ull}},
+{{13942164333597176759ull, 12905900479978914066ull,
+ 5420592804418550597ull, 8334191577141530433ull}},
+{{13325538726925623378ull, 10372030809200515243ull,
+ 14917085548830063883ull, 5208869735713456520ull}},
+{{12045237390229641319ull, 8353352493073256150ull,
+ 199612862328028238ull, 6511087169641820651ull}},
+{{5833174700932275841ull, 1218318579486794380ull,
+ 14084574133192199010ull, 8138858962052275813ull}},
+{{12869106224937448209ull, 5373135130606634391ull,
+ 11108701842458818333ull, 5086786851282672383ull}},
+{{11474696762744422357ull, 11328104931685680893ull,
+ 9274191284646135012ull, 6358483564103340479ull}},
+{{508312898148364234ull, 14160131164607101117ull,
+ 6981053087380280861ull, 7948104455129175599ull}},
+{{2623538570556421598ull, 11155924987093132150ull,
+ 11280687207253757394ull, 4967565284455734749ull}},
+{{12502795250050302806ull, 4721534197011639379ull,
+ 265800953785033031ull, 6209456605569668437ull}},
+{{11016808044135490603ull, 1290231727837161320ull,
+ 4943937210658679193ull, 7761820756962085546ull}},
+{{6885505027584681627ull, 12335609875966695585ull,
+ 7701646775089062399ull, 4851137973101303466ull}},
+{{13218567302908239938ull, 10807826326530981577ull,
+ 403686432006552191ull, 6063922466376629333ull}},
+{{2688151073353136210ull, 8898096889736339068ull,
+ 5116294058435578143ull, 7579903082970786666ull}},
+{{10903466457700485939ull, 12478839583726293773ull,
+ 7809369804949624243ull, 4737439426856741666ull}},
+{{18241019090552995328ull, 10986863461230479312ull,
+ 538340219332254496ull, 5921799283570927083ull}},
+{{4354529789481692544ull, 13733579326538099141ull,
+ 14507983329447481832ull, 7402249104463658853ull}},
+{{5027424127639751792ull, 8583487079086311963ull,
+ 11373332590118370097ull, 4626405690289786783ull}},
+{{1672594141122301836ull, 15341044867285277858ull,
+ 9604979719220574717ull, 5783007112862233479ull}},
+{{11314114713257653103ull, 5341248028824433610ull,
+ 7394538630598330493ull, 7228758891077791849ull}},
+{{4919271354717290571ull, 11288246054457929917ull,
+ 13854859306675301020ull, 9035948613847239811ull}},
+{{5380387605912000559ull, 16278525820890982006ull,
+ 6353444057458369185ull, 5647467883654524882ull}},
+{{15948856544244776506ull, 6513099220831563795ull,
+ 17165177108677737290ull, 7059334854568156102ull}},
+{{15324384661878582729ull, 17364746062894230552ull,
+ 12233099348992395804ull, 8824168568210195128ull}},
+{{9577740413674114206ull, 1629594252454118287ull,
+ 7645687093120247378ull, 5515105355131371955ull}},
+{{7360489498665254853ull, 11260364852422423667ull,
+ 4945422847972921318ull, 6893881693914214944ull}},
+{{4588925854904180662ull, 4852084028673253776ull,
+ 6181778559966151648ull, 8617352117392768680ull}},
+{{2868078659315112914ull, 3032552517920783610ull,
+ 3863611599978844780ull, 5385845073370480425ull}},
+{{12808470360998666950ull, 3790690647400979512ull,
+ 9441200518400943879ull, 6732306341713100531ull}},
+{{16010587951248333688ull, 126677290823836486ull,
+ 7189814629573791945ull, 8415382927141375664ull}},
+{{5394931451102820651ull, 11608388352833367564ull,
+ 4493634143483619965ull, 5259614329463359790ull}},
+{{6743664313878525814ull, 675427385759545743ull,
+ 14840414716209300765ull, 6574517911829199737ull}},
+{{3817894373920769363ull, 5455970250626820083ull,
+ 4715460339979462244ull, 8218147389786499672ull}},
+{{80340974486786900ull, 12633353443496538360ull, 2947162712487163902ull,
+ 5136342118616562295ull}},
+{{100426218108483625ull, 6568319767515897142ull,
+ 17519011445891118590ull, 6420427648270702868ull}},
+{{9348904809490380339ull, 17433771746249647235ull,
+ 3452020233654346621ull, 8025534560338378586ull}},
+{{3537222496717793760ull, 13201950350619723474ull,
+ 6769198664461354542ull, 5015959100211486616ull}},
+{{13644900157752018008ull, 7279065901419878534ull,
+ 8461498330576693178ull, 6269948875264358270ull}},
+{{7832753160335246702ull, 18322204413629623976ull,
+ 1353500876366090664ull, 7837436094080447838ull}},
+{{4895470725209529189ull, 11451377758518514985ull,
+ 14680996103010970377ull, 4898397558800279898ull}},
+{{10731024424939299390ull, 479164142865980019ull,
+ 9127873091908937164ull, 6122996948500349873ull}},
+{{8802094512746736333ull, 598955178582475024ull,
+ 16021527383313559359ull, 7653746185625437341ull}},
+{{5501309070466710209ull, 7291876014255128746ull,
+ 12319297623784668551ull, 4783591366015898338ull}},
+{{16100008374938163569ull, 4503158999391523028ull,
+ 6175749992876059881ull, 5979489207519872923ull}},
+{{1678266394963152845ull, 10240634767666791690ull,
+ 3108001472667686947ull, 7474361509399841154ull}},
+{{5660602515279358432ull, 4094553720578050854ull,
+ 6554186938844692246ull, 4671475943374900721ull}},
+{{16299125180953973848ull, 14341564187577339375ull,
+ 12804419691983253211ull, 5839344929218625901ull}},
+{{15762220457765079406ull, 13315269216044286315ull,
+ 2170466559696902802ull, 7299181161523282377ull}},
+{{15091089553778961353ull, 7420714483200582086ull,
+ 7324769218048516407ull, 9123976451904102971ull}},
+{{4820244952684462942ull, 11555475579641445660ull,
+ 2272137752066628802ull, 5702485282440064357ull}},
+{{6025306190855578677ull, 5220972437697031267ull,
+ 7451858208510673907ull, 7128106603050080446ull}},
+{{2919946720142085442ull, 1914529528693901180ull, 91450723783566576ull,
+ 8910133253812600558ull}},
+{{11048338736943579210ull, 1196580955433688237ull,
+ 13892214757646892822ull, 5568833283632875348ull}},
+{{18422109439606861916ull, 10719098231146886104ull,
+ 17365268447058616027ull, 6961041604541094185ull}},
+{{4580892725799025779ull, 8787186770506219727ull,
+ 7871527503541106322ull, 8701302005676367732ull}},
+{{9780586981265472968ull, 10103677749993775233ull,
+ 14143076726567967259ull, 5438313753547729832ull}},
+{{16837419745009229114ull, 8017911169064831137ull,
+ 17678845908209959074ull, 6797892191934662290ull}},
+{{7211716625979372680ull, 799016924476263114ull,
+ 12875185348407673035ull, 8497365239918327863ull}},
+{{9119008909664495829ull, 16640286642293522110ull,
+ 14964519870395877502ull, 5310853274948954914ull}},
+{{2175389100225843979ull, 11576986266012126830ull,
+ 9482277801140071070ull, 6638566593686193643ull}},
+{{11942608412137080781ull, 5247860795660382729ull,
+ 7241161232997700934ull, 8298208242107742054ull}},
+{{546601229944593632ull, 17114971052569902918ull,
+ 18360783825905726795ull, 5186380151317338783ull}},
+{{9906623574285517848ull, 16782027797284990743ull,
+ 18339293763954770590ull, 6482975189146673479ull}},
+{{7771593449429509406ull, 11754162709751462621ull,
+ 18312431186516075334ull, 8103718986433341849ull}},
+{{7163088915107137331ull, 2734665675167276234ull,
+ 4527740463931465228ull, 5064824366520838656ull}},
+{{18177233180738697472ull, 3418332093959095292ull,
+ 5659675579914331535ull, 6331030458151048320ull}},
+{{4274797402213820224ull, 18107973172731032828ull,
+ 7074594474892914418ull, 7913788072688810400ull}},
+{{11895120413238413448ull, 15929169251384283421ull,
+ 4421621546808071511ull, 4946117545430506500ull}},
+{{1033842461265853098ull, 15299775545802966373ull,
+ 5527026933510089389ull, 6182646931788133125ull}},
+{{5903989095009704276ull, 5289661376971544254ull,
+ 11520469685314999641ull, 7728308664735166406ull}},
+{{17525051239663228885ull, 14835253406675684918ull,
+ 2588607534894486871ull, 4830192915459479004ull}},
+{{12682942012724260298ull, 13932380739917218244ull,
+ 3235759418618108589ull, 6037741144324348755ull}},
+{{15853677515905325372ull, 3580417869614359093ull,
+ 17879757328554799449ull, 7547176430405435943ull}},
+{{12214391456654522310ull, 13766976214577444193ull,
+ 18092377357987831511ull, 4716985269003397464ull}},
+{{1432931265535989175ull, 12597034249794417338ull,
+ 4168727623775237773ull, 5896231586254246831ull}},
+{{11014536118774762277ull, 1911234756960857960ull,
+ 599223511291659313ull, 7370289482817808539ull}},
+{{13768170148468452846ull, 7000729464628460354ull,
+ 14584087444396737853ull, 9212861853522260673ull}},
+{{13216792361220170933ull, 6681298924606481673ull,
+ 2197525625106879302ull, 5758038658451412921ull}},
+{{2685932396243049954ull, 17574995692612877900ull,
+ 7358593049810987031ull, 7197548323064266151ull}},
+{{3357415495303812442ull, 17357058597338709471ull,
+ 4586555293836345885ull, 8996935403830332689ull}},
+{{9015913712205964633ull, 13154004632550387371ull,
+ 14395812104716185938ull, 5623084627393957930ull}},
+{{6658206121830067887ull, 7219133753833208406ull,
+ 8771393094040456615ull, 7028855784242447413ull}},
+{{17546129689142360666ull, 4412231173864122603ull,
+ 15575927385977958673ull, 8786069730303059266ull}},
+{{8660488046500281465ull, 14286859529733546387ull,
+ 14346640634663612074ull, 5491293581439412041ull}},
+{{6213924039697963927ull, 8635202375312157176ull,
+ 4098242738047351381ull, 6864116976799265052ull}},
+{{7767405049622454908ull, 15405688987567584374ull,
+ 5122803422559189226ull, 8580146220999081315ull}},
+{{242942137586646414ull, 14240241635657128138ull, 895909129885799314ull,
+ 5362591388124425822ull}},
+{{9527049708838083825ull, 8576930007716634364ull,
+ 10343258449212024951ull, 6703239235155532277ull}},
+{{11908812136047604781ull, 6109476491218405051ull,
+ 17540759079942419093ull, 8379049043944415346ull}},
+{{5137164575816059036ull, 6124265816225197109ull,
+ 15574660443391399837ull, 5236905652465259591ull}},
+{{11033141738197461699ull, 12267018288708884290ull,
+ 14856639535811861892ull, 6546132065581574489ull}},
+{{4568055135892051316ull, 15333772860886105363ull,
+ 4735741364482663653ull, 8182665081976968112ull}},
+{{549191450718838121ull, 11889451047267509804ull,
+ 2959838352801664783ull, 5114165676235605070ull}},
+{{686489313398547651ull, 10250127790656999351ull,
+ 12923169977856856787ull, 6392707095294506337ull}},
+{{14693169697030348275ull, 8200973719893861284ull,
+ 2318904417038907272ull, 7990883869118132922ull}},
+{{18406603097498743480ull, 5125608574933663302ull,
+ 6061001279076704949ull, 4994302418198833076ull}},
+{{13784881835018653542ull, 11018696737094467032ull,
+ 7576251598845881186ull, 6242878022748541345ull}},
+{{17231102293773316928ull, 4549998884513307982ull,
+ 14082000516984739387ull, 7803597528435676681ull}},
+{{6157752915180935176ull, 537906293607123537ull, 1883721295474380261ull,
+ 4877248455272297926ull}},
+{{12308877162403556874ull, 5284068885436292325ull,
+ 11578023656197751134ull, 6096560569090372407ull}},
+{{1551038397722282380ull, 15828458143650141215ull,
+ 9860843551819801013ull, 7620700711362965509ull}},
+{{7886928026217508344ull, 12198629348995032211ull,
+ 8468870229101069585ull, 4762937944601853443ull}},
+{{5246974014344497526ull, 1413228630961626552ull,
+ 5974401767948949078ull, 5953672430752316804ull}},
+{{6558717517930621907ull, 10989907825556808998ull,
+ 7468002209936186347ull, 7442090538440396005ull}},
+{{17934256503988802404ull, 4562849381759311671ull,
+ 6973344390423810419ull, 4651306586525247503ull}},
+{{17806134611558615101ull, 1091875708771751685ull,
+ 4104994469602375120ull, 5814133233156559379ull}},
+{{8422610209166105164ull, 1364844635964689607ull, 519557068575580996ull,
+ 7267666541445699224ull}},
+{{5916576743030243551ull, 1706055794955862009ull, 649446335719476245ull,
+ 9084583176807124030ull}},
+{{15227075510462371979ull, 3372127881061107707ull,
+ 14240962015106836365ull, 5677864485504452518ull}},
+{{14422158369650577070ull, 8826845869753772538ull,
+ 8577830482028769648ull, 7097330606880565648ull}},
+{{8804325925208445530ull, 11033557337192215673ull,
+ 10722288102535962060ull, 8871663258600707060ull}},
+{{17031918749323748216ull, 16119345372599910603ull,
+ 15924802100939752095ull, 5544789536625441912ull}},
+{{16678212418227297366ull, 15537495697322500350ull,
+ 1459258552465138503ull, 6930986920781802391ull}},
+{{11624393485929345900ull, 14810183603225737534ull,
+ 15659131245863586841ull, 8663733650977252988ull}},
+{{2653559910278453283ull, 2338835724375004103ull, 563584991809965968ull,
+ 5414833531860783118ull}},
+{{17152007943130230316ull, 2923544655468755128ull,
+ 9927853276617233268ull, 6768541914825978897ull}},
+{{2993265855203236279ull, 3654430819335943911ull,
+ 17021502614198929489ull, 8460677393532473621ull}},
+{{8788320187143104531ull, 13813234308153434704ull,
+ 12944282143088024882ull, 5287923370957796013ull}},
+{{10985400233928880663ull, 8043170848337017572ull,
+ 2345294623577867391ull, 6609904213697245017ull}},
+{{13731750292411100829ull, 5442277541993884061ull,
+ 7543304297899722143ull, 8262380267121556271ull}},
+{{10888186941970631970ull, 10318952491387259394ull,
+ 11632094213828408195ull, 5163987666950972669ull}},
+{{4386861640608514155ull, 8287004595806686339ull, 705059712003346532ull,
+ 6454984583688715837ull}},
+{{871891032333254789ull, 10358755744758357924ull,
+ 5493010658431571069ull, 8068730729610894796ull}},
+{{9768303932063060051ull, 8780065349687667654ull,
+ 12656503698374507726ull, 5042956706006809247ull}},
+{{2987007878224049256ull, 1751709650254808760ull,
+ 11208943604540746754ull, 6303695882508511559ull}},
+{{3733759847780061570ull, 11413009099673286758ull,
+ 9399493487248545538ull, 7879619853135639449ull}},
+{{16168657960144702193ull, 11744816705723192127ull,
+ 17403898475598810721ull, 4924762408209774655ull}},
+{{15599136431753489838ull, 845962826871826447ull,
+ 17143187076071125498ull, 6155953010262218319ull}},
+{{14887234521264474393ull, 10280825570444558867ull,
+ 16817297826661518968ull, 7694941262827772899ull}},
+{{6998678566576602544ull, 6425515981527849292ull,
+ 8204968132449755403ull, 4809338289267358062ull}},
+{{8748348208220753180ull, 3420208958482423711ull,
+ 1032838128707418446ull, 6011672861584197578ull}},
+{{6323749241848553570ull, 13498633234957805447ull,
+ 10514419697739048865ull, 7514591076980246972ull}},
+{{10869872303796427838ull, 1519116744207546548ull,
+ 15794884347941681349ull, 4696619423112654357ull}},
+{{13587340379745534797ull, 6510581948686821089ull,
+ 5908547379644937974ull, 5870774278890817947ull}},
+{{3149117419399754784ull, 17361599472713302170ull,
+ 2773998206128784563ull, 7338467848613522434ull}},
+{{13159768811104469288ull, 17090313322464239808ull,
+ 12690869794515756512ull, 9173084810766903042ull}},
+{{8224855506940293305ull, 10681445826540149880ull,
+ 12543479639999735724ull, 5733178006729314401ull}},
+{{10281069383675366631ull, 13351807283175187350ull,
+ 1844291494717505943ull, 7166472508411643002ull}},
+{{3627964692739432481ull, 12078073085541596284ull,
+ 11528736405251658237ull, 8958090635514553752ull}},
+{{11490849969816921109ull, 9854638687677191629ull,
+ 7205460253282286398ull, 5598806647196596095ull}},
+{{528504406988987674ull, 3094926322741713729ull, 4395139298175470094ull,
+ 6998508308995745119ull}},
+{{5272316527163622496ull, 13092029940281917969ull,
+ 882238104291949713ull, 8748135386244681399ull}},
+{{14824412875545733820ull, 1264989685035116874ull,
+ 7468927842823550427ull, 5467584616402925874ull}},
+{{9307144057577391467ull, 15416295161576059805ull,
+ 112787766674662225ull, 6834480770503657343ull}},
+{{16245616090399127238ull, 5435310896687911044ull,
+ 13976042763625491494ull, 8543100963129571678ull}},
+{{930138019644678716ull, 17232127365712108115ull,
+ 4123340708838544279ull, 5339438101955982299ull}},
+{{14997730579838012107ull, 16928473188712747239ull,
+ 542489867620792445ull, 6674297627444977874ull}},
+{{14135477206370127229ull, 7325533430608770337ull,
+ 9901484371380766365ull, 8342872034306222342ull}},
+{{1917144226340247663ull, 6884301403344175413ull,
+ 1576741713685591074ull, 5214295021441388964ull}},
+{{7008116301352697482ull, 17828748791034995074ull,
+ 1970927142106988842ull, 6517868776801736205ull}},
+{{17983517413545647661ull, 13062563951938968034ull,
+ 7075344946061123957ull, 8147335971002170256ull}},
+{{15851384401893417692ull, 10469945479175548973ull,
+ 4422090591288202473ull, 5092084981876356410ull}},
+{{5979172447084608403ull, 17699117867396824121ull,
+ 14750985275965028899ull, 6365106227345445512ull}},
+{{12085651577283148407ull, 17512211315818642247ull,
+ 18438731594956286124ull, 7956382784181806890ull}},
+{{14471061263443049611ull, 1721760035531875596ull,
+ 16135893265275066732ull, 4972739240113629306ull}},
+{{18088826579303812013ull, 2152200044414844495ull,
+ 10946494544739057607ull, 6215924050142036633ull}},
+{{17999347205702377113ull, 16525308110800719331ull,
+ 18294804199351209912ull, 7769905062677545791ull}},
+{{8943748994350291744ull, 10328317569250449582ull,
+ 18351781652235588051ull, 4856190664173466119ull}},
+{{1956314206083088871ull, 8298710943135674074ull,
+ 18328041046867097160ull, 6070238330216832649ull}},
+{{11668764794458636897ull, 10373388678919592592ull,
+ 9074993253301707738ull, 7587797912771040812ull}},
+{{7292977996536648061ull, 11095053942752133274ull,
+ 14895242820168343144ull, 4742373695481900507ull}},
+{{18339594532525585884ull, 13868817428440166592ull,
+ 14007367506783041026ull, 5927967119352375634ull}},
+{{4477749091947430739ull, 8112649748695432433ull,
+ 8285837346624025475ull, 7409958899190469543ull}},
+{{14327808228535613972ull, 2764563083720951318ull,
+ 12096177369281097778ull, 4631224311994043464ull}},
+{{8686388248814741657ull, 12679075891505964956ull,
+ 15120221711601372222ull, 5789030389992554330ull}},
+{{10857985311018427071ull, 6625472827527680387ull,
+ 9676905102646939470ull, 7236287987490692913ull}},
+{{8960795620345645935ull, 17505213071264376292ull,
+ 16707817396736062241ull, 9045359984363366141ull}},
+{{14823869299570804517ull, 4023229141899153326ull,
+ 12748228882173732853ull, 5653349990227103838ull}},
+{{9306464587608729838ull, 9640722445801329562ull,
+ 6711914065862390258ull, 7066687487783879798ull}},
+{{2409708697656136490ull, 2827531020396886145ull,
+ 17613264619182763631ull, 8833359359729849747ull}},
+{{13035282982103555066ull, 8684735915389135696ull,
+ 8702447377775533317ull, 5520849599831156092ull}},
+{{16294103727629443833ull, 15467605912663807524ull,
+ 10878059222219416646ull, 6901061999788945115ull}},
+{{1920885585827253175ull, 10111135353974983598ull,
+ 8985888009346882904ull, 8626327499736181394ull}},
+{{15035611546424196947ull, 6319459596234364748ull,
+ 10227866024269189719ull, 5391454687335113371ull}},
+{{347770359320694567ull, 3287638476865568032ull, 8173146511909099245ull,
+ 6739318359168891714ull}},
+{{434712949150868209ull, 8721234114509347944ull, 993061103031598248ull,
+ 8424147948961114643ull}},
+{{271695593219292631ull, 5450771321568342465ull,
+ 16761564253890606569ull, 5265092468100696651ull}},
+{{4951305509951503692ull, 11425150170387815985ull,
+ 16340269298935870307ull, 6581365585125870814ull}},
+{{10800817905866767519ull, 9669751694557382077ull,
+ 11201964586815062076ull, 8226706981407338518ull}},
+{{9056354200380423652ull, 15266966845953139606ull,
+ 2389541848332025893ull, 5141691863379586574ull}},
+{{2097070713620753756ull, 5248650502159260796ull,
+ 12210299347269808175ull, 6427114829224483217ull}},
+{{2621338392025942195ull, 1949127109271688091ull,
+ 1427816128805096507ull, 8033893536530604022ull}},
+{{17779237559512071536ull, 17359105507790662720ull,
+ 14727443135785349028ull, 5021183460331627513ull}},
+{{3777302875680537804ull, 3252137811028776785ull,
+ 4574245864449522574ull, 6276479325414534392ull}},
+{{9333314613028060159ull, 13288544300640746789ull,
+ 5717807330561903217ull, 7845599156768167990ull}},
+{{8139164642356231552ull, 1387811160259384887ull,
+ 17408687636883353223ull, 4903499472980104993ull}},
+{{5562269784517901535ull, 15569822005606394821ull,
+ 7925801490822027816ull, 6129374341225131242ull}},
+{{11564523249074764823ull, 1015533433298441910ull,
+ 683879826672758963ull, 7661717926531414053ull}},
+{{2616141012244340111ull, 16775609460307383858ull,
+ 2733267900884168303ull, 4788573704082133783ull}},
+{{12493548302160200946ull, 16357825806956841918ull,
+ 17251642931387374091ull, 5985717130102667228ull}},
+{{6393563340845475375ull, 15835596240268664494ull,
+ 3117809590524665998ull, 7482146412628334036ull}},
+{{17831035143310585821ull, 5285561631740527404ull,
+ 11172003030932692057ull, 4676341507892708772ull}},
+{{3842049855428680661ull, 11218638058103047160ull,
+ 13965003788665865071ull, 5845426884865885965ull}},
+{{4802562319285850826ull, 9411611554201421046ull,
+ 3621196680550167627ull, 7306783606082357457ull}},
+{{15226574935962089340ull, 7152828424324388403ull,
+ 9138181869115097438ull, 9133479507602946821ull}},
+{{7210766325762611886ull, 18305575820484906464ull,
+ 8017206677410629850ull, 5708424692251841763ull}},
+{{9013457907203264857ull, 13658597738751357272ull,
+ 5409822328335899409ull, 7135530865314802204ull}},
+{{11266822384004081071ull, 3238189118157032878ull,
+ 6762277910419874262ull, 8919413581643502755ull}},
+{{2430077971575162766ull, 15858926254130309261ull,
+ 1920580684798727461ull, 5574633488527189222ull}},
+{{7649283482896341361ull, 5988599762380722864ull,
+ 11624097892853185135ull, 6968291860658986527ull}},
+{{9561604353620426701ull, 2874063684548515676ull,
+ 9918436347639093515ull, 8710364825823733159ull}},
+{{15199374757867542496ull, 17937190867338679961ull,
+ 13116551744915515302ull, 5443978016139833224ull}},
+{{5164160392052264408ull, 13198116547318574144ull,
+ 16395689681144394128ull, 6804972520174791530ull}},
+{{6455200490065330510ull, 16497645684148217680ull,
+ 11271240064575716852ull, 8506215650218489413ull}},
+{{4034500306290831569ull, 1087656515737860242ull,
+ 9350368049573516985ull, 5316384781386555883ull}},
+{{14266497419718315269ull, 5971256663099713206ull,
+ 7076274043539508327ull, 6645480976733194854ull}},
+{{8609749737793118278ull, 2852384810447253604ull,
+ 18068714591279161217ull, 8306851220916493567ull}},
+{{14604465622975474732ull, 13311955552598003262ull,
+ 18210475647190557616ull, 5191782013072808479ull}},
+{{9032209991864567607ull, 16639944440747504078ull,
+ 18151408540560809116ull, 6489727516341010599ull}},
+{{2066890452975933701ull, 2353186477224828482ull,
+ 18077574657273623492ull, 8112159395426263249ull}},
+{{5903492551537346467ull, 10694113585120293609ull,
+ 4380955133154932826ull, 5070099622141414531ull}},
+{{11991051707849070988ull, 4144269944545591203ull,
+ 864507898016278129ull, 6337624527676768164ull}},
+{{10377128616383950831ull, 9792023449109376908ull,
+ 1080634872520347661ull, 7922030659595960205ull}},
+{{15709077422094745077ull, 8425857664907054519ull,
+ 2981239804538911240ull, 4951269162247475128ull}},
+{{15024660759191043442ull, 10532322081133818149ull,
+ 3726549755673639050ull, 6189086452809343910ull}},
+{{4945767893706640591ull, 3942030564562496879ull,
+ 13881559231446824621ull, 7736358066011679887ull}},
+{{10008633961207732226ull, 4769612112065254501ull,
+ 15593503547295347244ull, 4835223791257299929ull}},
+{{17122478469937053186ull, 5962015140081568126ull,
+ 5656821378837020343ull, 6044029739071624912ull}},
+{{12179726050566540674ull, 2840832906674572254ull,
+ 7071026723546275429ull, 7555037173839531140ull}},
+{{3000642763176700018ull, 4081363575885301611ull,
+ 13642763739071197951ull, 4721898233649706962ull}},
+{{17585861509253038734ull, 490018451429239109ull,
+ 7830082636984221631ull, 5902372792062133703ull}},
+{{8147268831284134705ull, 14447581119568712599ull,
+ 5175917277802889134ull, 7377965990077667129ull}},
+{{5572400020677780477ull, 8836104362606114941ull,
+ 11081582615680999322ull, 9222457487597083911ull}},
+{{5788593022137306750ull, 10134251245056209742ull,
+ 13843518162441706432ull, 5764035929748177444ull}},
+{{16459113314526409246ull, 12667814056320262177ull,
+ 17304397703052133040ull, 7205044912185221805ull}},
+{{6738833587875847845ull, 15834767570400327722ull,
+ 7795439073533002588ull, 9006306140231527257ull}},
+{{8823457010849792808ull, 673357694645429018ull,
+ 16401364467026596378ull, 5628941337644704535ull}},
+{{1805949226707465201ull, 10065069155161562081ull,
+ 15890019565355857568ull, 7036176672055880669ull}},
+{{6869122551811719405ull, 12581336443951952601ull,
+ 6027466401412658248ull, 8795220840069850837ull}},
+{{15822416640950794389ull, 7863335277469970375ull,
+ 6073009510096605357ull, 5497013025043656773ull}},
+{{15166334782761105082ull, 14440855115264850873ull,
+ 12202947906048144600ull, 6871266281304570966ull}},
+{{5122860423169217640ull, 18051068894081063592ull,
+ 6030312845705404942ull, 8589082851630713708ull}},
+{{3201787764480761025ull, 6670232040373276841ull,
+ 12992317565420653897ull, 5368176782269196067ull}},
+{{8613920724028339185ull, 12949476068893983955ull,
+ 11628710938348429467ull, 6710220977836495084ull}},
+{{6155714886608036077ull, 11575159067690092040ull,
+ 14535888672935536834ull, 8387776222295618855ull}},
+{{3847321804130022549ull, 11846160435733695429ull,
+ 16002459448225792377ull, 5242360138934761784ull}},
+{{9420838273589916090ull, 972642489384955574ull, 1556330236572688856ull,
+ 6552950173668452231ull}},
+{{2552675805132619304ull, 1215803111731194468ull,
+ 15780470850998024782ull, 8191187717085565288ull}},
+{{10818794415062662873ull, 14594935000114160254ull,
+ 9862794281873765488ull, 5119492323178478305ull}},
+{{4300120981973552783ull, 18243668750142700318ull,
+ 16940178870769594764ull, 6399365403973097881ull}},
+{{14598523264321716787ull, 4357841863968823781ull,
+ 7340165533179829744ull, 7999206754966372352ull}},
+{{11429920049414766944ull, 2723651164980514863ull,
+ 4587603458237393590ull, 4999504221853982720ull}},
+{{9675714043341070776ull, 12627935993080419387ull,
+ 5734504322796741987ull, 6249380277317478400ull}},
+{{7482956535748950566ull, 11173233972923136330ull,
+ 7168130403495927484ull, 7811725346646848000ull}},
+{{9288533853270482008ull, 16206643269931736014ull,
+ 4480081502184954677ull, 4882328341654280000ull}},
+{{2387295279733326702ull, 6423246032132506306ull,
+ 5600101877731193347ull, 6102910427067850000ull}},
+{{12207491136521434185ull, 3417371521738244978ull,
+ 7000127347163991684ull, 7628638033834812500ull}},
+{{12241367978753284270ull, 11359229237941178919ull,
+ 13598451628832270610ull, 4767898771146757812ull}},
+{{10690023955014217433ull, 4975664510571697841ull,
+ 16998064536040338263ull, 5959873463933447265ull}},
+{{17974215962195159695ull, 1607894619787234397ull,
+ 7412522614768259117ull, 7449841829916809082ull}},
+{{13539727985585668762ull, 3310777146580715450ull,
+ 9244512652657549852ull, 4656151143698005676ull}},
+{{7701287945127310144ull, 4138471433225894313ull,
+ 11555640815821937315ull, 5820188929622507095ull}},
+{{14238295949836525584ull, 561403273104979987ull,
+ 9832865001350033740ull, 7275236162028133869ull}},
+{{13186183918868269076ull, 701754091381224984ull,
+ 16902767270114930079ull, 9094045202535167336ull}},
+{{8241364949292668173ull, 7356125334754347471ull,
+ 10564229543821831299ull, 5683778251584479585ull}},
+{{5690020168188447312ull, 4583470650015546435ull,
+ 17816972948204677028ull, 7104722814480599481ull}},
+{{2500839191808171235ull, 5729338312519433044ull,
+ 8436158129973682573ull, 8880903518100749352ull}},
+{{10786396531734882830ull, 5886679454538339604ull,
+ 5272598831233551608ull, 5550564698812968345ull}},
+{{13482995664668603538ull, 7358349318172924505ull,
+ 11202434557469327414ull, 6938205873516210431ull}},
+{{3018686525553590710ull, 18421308684570931440ull,
+ 9391357178409271363ull, 8672757341895263039ull}},
+{{1886679078470994194ull, 9207474918643138198ull,
+ 12787127264146876458ull, 5420473338684539399ull}},
+{{11581720884943518550ull, 2285971611449146939ull,
+ 11372223061756207669ull, 6775591673355674249ull}},
+{{9865465087752010284ull, 7469150532738821578ull, 380220771913095874ull,
+ 8469489591694592812ull}},
+{{10777601698272394332ull, 9279905101389151390ull,
+ 9461010019300460729ull, 5293430994809120507ull}},
+{{4248630085985717106ull, 16211567395163827142ull,
+ 7214576505698188007ull, 6616788743511400634ull}},
+{{14534159644336922191ull, 15652773225527396023ull,
+ 18241592668977510817ull, 8270985929389250792ull}},
+{{16001378805351658225ull, 2865454238313540658ull,
+ 11400995418110944261ull, 5169366205868281745ull}},
+{{10778351469834796974ull, 8193503816319313727ull,
+ 416186217356516614ull, 6461707757335352182ull}},
+{{8861253318866108313ull, 1018507733544366351ull,
+ 9743604808550421576ull, 8077134696669190227ull}},
+{{12455812351932399552ull, 636567333465228969ull,
+ 3783909996130319533ull, 5048209185418243892ull}},
+{{1734707384633335728ull, 5407395185258924116ull,
+ 4729887495162899416ull, 6310261481772804865ull}},
+{{2168384230791669659ull, 6759243981573655145ull,
+ 10524045387381012174ull, 7887826852216006081ull}},
+{{12884455190313263297ull, 18059585543765698177ull,
+ 18106743413181602368ull, 4929891782635003800ull}},
+{{2270510932609415409ull, 4127737855997571106ull,
+ 4186685192767451345ull, 6162364728293754751ull}},
+{{12061510702616545070ull, 9771358338424351786ull,
+ 621670472531926277ull, 7702955910367193439ull}},
+{{12150130207562728573ull, 8412941970728913818ull,
+ 7306073072973535779ull, 4814347443979495899ull}},
+{{5964290722598634908ull, 5904491444983754369ull,
+ 4520905322789531820ull, 6017934304974369874ull}},
+{{12067049421675681539ull, 7380614306229692961ull,
+ 14874503690341690583ull, 7522417881217962342ull}},
+{{624376860906219106ull, 11530412969034639957ull,
+ 4684878788036168710ull, 4701511175761226464ull}},
+{{5392157094560161786ull, 5189644174438524138ull,
+ 5856098485045210888ull, 5876888969701533080ull}},
+{{15963568405054978041ull, 6487055218048155172ull,
+ 7320123106306513610ull, 7346111212126916350ull}},
+{{1507716432609170935ull, 17332191059414969774ull,
+ 18373525919737917820ull, 9182639015158645437ull}},
+{{14777380825662895546ull, 1609247375279580300ull,
+ 13789296709049892590ull, 5739149384474153398ull}},
+{{24981958369067817ull, 11234931255954251184ull, 8013248849457589929ull,
+ 7173936730592691748ull}},
+{{31227447961334771ull, 208606014660650268ull, 10016561061821987412ull,
+ 8967420913240864685ull}},
+{{9242889191830610040ull, 9353750796017682225ull,
+ 8566193672852436084ull, 5604638070775540428ull}},
+{{16165297508215650454ull, 11692188495022102781ull,
+ 10707742091065545105ull, 7005797588469425535ull}},
+{{6371563829987399355ull, 780177563495464765ull, 8772991595404543478ull,
+ 8757246985586781919ull}},
+{{6288070402955818549ull, 14322669032466829190ull,
+ 12400648774768921529ull, 5473279365991738699ull}},
+{{17083460040549548994ull, 4068278235301372775ull,
+ 10889124950033764008ull, 6841599207489673374ull}},
+{{16742639032259548339ull, 5085347794126715969ull,
+ 4388034150687429202ull, 8551999009362091718ull}},
+{{3546620367521135856ull, 7790028389756585385ull,
+ 16577579399461806963ull, 5344999380851307323ull}},
+{{9044961477828807724ull, 5125849468768343827ull,
+ 16110288230899870800ull, 6681249226064134154ull}},
+{{6694515828858621751ull, 6407311835960429784ull,
+ 10914488251770062692ull, 8351561532580167693ull}},
+{{4184072393036638594ull, 13227941934330044423ull,
+ 9127398166569983134ull, 5219725957862604808ull}},
+{{618404472868410339ull, 7311555381057779721ull,
+ 11409247708212478918ull, 6524657447328256010ull}},
+{{5384691609512900827ull, 18362816263177000459ull,
+ 5038187598410822839ull, 8155821809160320013ull}},
+{{1059589246731869065ull, 18394289192126707143ull,
+ 5454710258220458226ull, 5097388630725200008ull}},
+{{15159544613697000043ull, 13769489453303608120ull,
+ 6818387822775572783ull, 6371735788406500010ull}},
+{{502686693411698438ull, 12600175798202122247ull,
+ 17746356815324241787ull, 7964669735508125012ull}},
+{{7231708211023393380ull, 5569266864662632452ull,
+ 1868100972722875309ull, 4977918584692578133ull}},
+{{9039635263779241725ull, 11573269599255678469ull,
+ 6946812234330982040ull, 6222398230865722666ull}},
+{{15911230098151440060ull, 14466586999069598086ull,
+ 17906887329768503358ull, 7777997788582153332ull}},
+{{5332832792917262134ull, 4429930855991110900ull,
+ 1968432544250538791ull, 4861248617863845833ull}},
+{{6666040991146577667ull, 925727551561500721ull, 7072226698740561393ull,
+ 6076560772329807291ull}},
+{{12944237257360609988ull, 5768845457879263805ull,
+ 4228597354998313837ull, 7595700965412259114ull}},
+{{10395991295064075194ull, 5911371420388233830ull,
+ 7254559365301334052ull, 4747313103382661946ull}},
+{{3771617081975318185ull, 7389214275485292288ull,
+ 18291571243481443373ull, 5934141379228327432ull}},
+{{4714521352469147731ull, 13848203862784003264ull,
+ 4417719980642252600ull, 7417676724035409291ull}},
+{{2946575845293217332ull, 8655127414240002040ull, 455231978687713923ull,
+ 4636047952522130807ull}},
+{{3683219806616521665ull, 6207223249372614646ull,
+ 14404098028641806116ull, 5795059940652663508ull}},
+{{13827396795125427889ull, 7759029061715768307ull,
+ 18005122535802257645ull, 7243824925815829385ull}},
+{{12672559975479396957ull, 14310472345572098288ull,
+ 8671345114470658344ull, 9054781157269786732ull}},
+{{7920349984674623099ull, 8944045215982561430ull,
+ 14642962733398937273ull, 5659238223293616707ull}},
+{{677065443988503065ull, 15791742538405589692ull,
+ 13692017398321283687ull, 7074047779117020884ull}},
+{{846331804985628831ull, 15127992154579599211ull,
+ 17115021747901604609ull, 8842559723896276105ull}},
+{{16669858442611875684ull, 2537466068971167650ull,
+ 3779359564797421025ull, 5526599827435172566ull}},
+{{11613951016410068796ull, 7783518604641347467ull,
+ 13947571492851552089ull, 6908249784293965707ull}},
+{{9905752752085198091ull, 14341084274229072238ull,
+ 12822778347637052207ull, 8635312230367457134ull}},
+{{1579409451625860903ull, 15880706699034252005ull,
+ 3402550448845769725ull, 5397070143979660709ull}},
+{{6585947832959714033ull, 6015825318510651294ull,
+ 8864874079484600061ull, 6746337679974575886ull}},
+{{17455806828054418349ull, 12131467666565702021ull,
+ 1857720562500974268ull, 8432922099968219858ull}},
+{{13215722276747705420ull, 16805539328458339571ull,
+ 5772761369990496821ull, 5270576312480137411ull}},
+{{11907966827507243871ull, 7171866105290760752ull,
+ 2604265694060733123ull, 6588220390600171764ull}},
+{{14884958534384054839ull, 4353146613186063036ull,
+ 3255332117575916404ull, 8235275488250214705ull}},
+{{79727047135258467ull, 11944088670096065206ull,
+ 13563797619553417512ull, 5147047180156384190ull}},
+{{9323030845773848891ull, 14930110837620081507ull,
+ 7731374987586996082ull, 6433808975195480238ull}},
+{{7042102538789923210ull, 9439266510170326076ull, 440846697628969295ull,
+ 8042261218994350298ull}},
+{{13624686123598477814ull, 12817070596497535653ull,
+ 4887215204445493713ull, 5026413261871468936ull}},
+{{3195799599215933556ull, 2186280190339755855ull,
+ 6109019005556867142ull, 6283016577339336170ull}},
+{{17829807554302080657ull, 11956222274779470626ull,
+ 16859645793800859735ull, 7853770721674170212ull}},
+{{15755315739866188315ull, 14390167949378250997ull,
+ 1313906584270761526ull, 4908606701046356383ull}},
+{{5859086619550571681ull, 8764337899868037939ull,
+ 15477441285620615620ull, 6135758376307945478ull}},
+{{2712172256010826697ull, 10955422374835047424ull,
+ 10123429570170993717ull, 7669697970384931848ull}},
+{{1695107660006766686ull, 9152981993485598592ull,
+ 6327143481356871073ull, 4793561231490582405ull}},
+{{2118884575008458357ull, 16052913510284386144ull,
+ 12520615370123476745ull, 5991951539363228006ull}},
+{{2648605718760572947ull, 6231083832573318968ull,
+ 6427397175799570124ull, 7489939424204035008ull}},
+{{1655378574225358092ull, 13117799432213100163ull,
+ 4017123234874731327ull, 4681212140127521880ull}},
+{{15904281273063861327ull, 11785563271838987299ull,
+ 5021404043593414159ull, 5851515175159402350ull}},
+{{15268665572902438754ull, 10120268071371346220ull,
+ 15500127091346543507ull, 7314393968949252937ull}},
+{{639087892418496827ull, 8038649070786794872ull, 5540100808901015672ull,
+ 9142992461186566172ull}},
+{{399429932761560517ull, 5024155669241746795ull,
+ 12685935042417910603ull, 5714370288241603857ull}},
+{{14334345471234114358ull, 1668508568124795589ull,
+ 2022360747740224542ull, 7142962860302004822ull}},
+{{4082873783760479235ull, 11309007747010770295ull,
+ 11751322971530056485ull, 8928703575377506027ull}},
+{{9469325142491381378ull, 9373972851095425386ull,
+ 5038733847992591351ull, 5580439734610941267ull}},
+{{2613284391259450915ull, 7105780045441893829ull,
+ 1686731291563351285ull, 6975549668263676584ull}},
+{{7878291507501701547ull, 13493911075229755190ull,
+ 2108414114454189106ull, 8719437085329595730ull}},
+{{312246173761175563ull, 13045380440445984898ull,
+ 5929444839961256095ull, 5449648178330997331ull}},
+{{9613679754056245262ull, 11695039532130093218ull,
+ 2800120031524182215ull, 6812060222913746664ull}},
+{{2793727655715530769ull, 10007113396735228619ull,
+ 3500150039405227769ull, 8515075278642183330ull}},
+{{17886980849318064395ull, 17783660919027987646ull,
+ 6799279793055655259ull, 5321922049151364581ull}},
+{{13135354024792804685ull, 17617890130357596654ull,
+ 13110785759746956978ull, 6652402561439205726ull}},
+{{7195820494136230049ull, 12798990626092220010ull,
+ 7165110162828920415ull, 8315503201799007158ull}},
+{{9109073827262531685ull, 14916898168948719362ull,
+ 18313251907050238971ull, 5197189501124379473ull}},
+{{2162970247223388798ull, 14034436692758511299ull,
+ 9056506828530635002ull, 6496486876405474342ull}},
+{{16538770864311399709ull, 8319673829093363315ull,
+ 2097261498808517945ull, 8120608595506842928ull}},
+{{8030888780980930866ull, 16729011189251821832ull,
+ 1310788436755323715ull, 5075380372191776830ull}},
+{{10038610976226163583ull, 16299577968137389386ull,
+ 10861857582798930452ull, 6344225465239721037ull}},
+{{3324891683427928670ull, 1927728386462185117ull,
+ 18189007996926050970ull, 7930281831549651296ull}},
+{{4383900311356149371ull, 5816516259966253602ull,
+ 11368129998078781856ull, 4956426144718532060ull}},
+{{14703247426049962522ull, 7270645324957817002ull,
+ 14210162497598477320ull, 6195532680898165075ull}},
+{{9155687245707677344ull, 9088306656197271253ull,
+ 13151017103570708746ull, 7744415851122706344ull}},
+{{8028147537780992292ull, 10291877678550682437ull,
+ 8219385689731692966ull, 4840259906951691465ull}},
+{{14646870440653628269ull, 3641475061333577238ull,
+ 14885918130592004112ull, 6050324883689614331ull}},
+{{9085216013962259528ull, 4551843826666971548ull,
+ 13995711644812617236ull, 7562906104612017914ull}},
+{{14901632045581188013ull, 12068274428521633025ull,
+ 13359005796435273676ull, 4726816315382511196ull}},
+{{4791982001694321305ull, 15085343035652041282ull,
+ 16698757245544092095ull, 5908520394228138995ull}},
+{{15213349538972677439ull, 14244992776137663698ull,
+ 16261760538502727215ull, 7385650492785173744ull}},
+{{14120029480285311303ull, 15820649512727121667ull,
+ 10163600336564204509ull, 4616031557990733590ull}},
+{{13038350831929251225ull, 5940753835626738372ull,
+ 3481128383850479829ull, 5770039447488416988ull}},
+{{16297938539911564031ull, 12037628312960810869ull,
+ 4351410479813099786ull, 7212549309360521235ull}},
+{{6537365119607291327ull, 5823663354346237779ull, 827577081338986829ull,
+ 9015686636700651544ull}},
+{{1780010190540863127ull, 5945632605680092564ull, 517235675836866768ull,
+ 5634804147937907215ull}},
+{{2225012738176078909ull, 7432040757100115705ull,
+ 14481602650078247172ull, 7043505184922384018ull}},
+{{7392951941147486540ull, 9290050946375144631ull,
+ 8878631275743033157ull, 8804381481152980023ull}},
+{{11538123990858260944ull, 8112124850698159346ull,
+ 12466673574980477579ull, 5502738425720612514ull}},
+{{5199282951718050372ull, 5528470044945311279ull,
+ 6359969931870821166ull, 6878423032150765643ull}},
+{{1887417671220175061ull, 16133959593036414907ull,
+ 3338276396411138553ull, 8598028790188457054ull}},
+{{17320537109008467077ull, 3166195718006677460ull,
+ 15921480803039125308ull, 5373767993867785658ull}},
+{{3203927312551032230ull, 3957744647508346826ull,
+ 10678478966944130827ull, 6717209992334732073ull}},
+{{13228281177543566096ull, 335494790958045628ull,
+ 17959784727107551438ull, 8396512490418415091ull}},
+{{17491047772819504618ull, 14044742299630942229ull,
+ 8919022445228525696ull, 5247820306511509432ull}},
+{{8028751660742217060ull, 17555927874538677787ull,
+ 11148778056535657120ull, 6559775383139386790ull}},
+{{5424253557500383421ull, 3498165769463795618ull,
+ 4712600533814795593ull, 8199719228924233488ull}},
+{{8001844491865127543ull, 13715568651983342021ull,
+ 2945375333634247245ull, 5124824518077645930ull}},
+{{14613991633258797332ull, 3309402759697013814ull,
+ 12905091203897584865ull, 6406030647597057412ull}},
+{{9044117504718720857ull, 8748439468048655172ull,
+ 16131364004871981081ull, 8007538309496321765ull}},
+{{14875945477303976344ull, 16996989713598879242ull,
+ 12387945512258682127ull, 5004711443435201103ull}},
+{{9371559809775194622ull, 16634551123571211149ull,
+ 10873245871895964755ull, 6255889304294001379ull}},
+{{16326135780646381181ull, 16181502886036626032ull,
+ 8979871321442568040ull, 7819861630367501724ull}},
+{{10203834862903988238ull, 10113439303772891270ull,
+ 14835791612756380833ull, 4887413518979688577ull}},
+{{3531421541775209490ull, 17253485148143501992ull,
+ 4709681460663312329ull, 6109266898724610722ull}},
+{{4414276927219011862ull, 7731798379897213778ull,
+ 15110473862683916220ull, 7636583623405763402ull}},
+{{7370609097939270318ull, 14055746024290534419ull,
+ 14055732182604835541ull, 4772864764628602126ull}},
+{{4601575353996699993ull, 3734624475081004312ull,
+ 8346293191401268619ull, 5966080955785752658ull}},
+{{5751969192495874991ull, 56594575423867486ull, 1209494452396809966ull,
+ 7457601194732190823ull}},
+{{17430038800592085582ull, 13870429664922080890ull,
+ 7673463060389088084ull, 4661000746707619264ull}},
+{{12564176463885331169ull, 17338037081152601113ull,
+ 9591828825486360105ull, 5826250933384524080ull}},
+{{1870162524574500249ull, 7837488296158587680ull,
+ 11989786031857950132ull, 7282813666730655100ull}},
+{{2337703155718125312ull, 9796860370198234600ull,
+ 14987232539822437665ull, 9103517083413318875ull}},
+{{1461064472323828320ull, 17652252777442366385ull,
+ 7061177328175329588ull, 5689698177133324297ull}},
+{{6438016608832173304ull, 3618571898093406365ull,
+ 13438157678646549890ull, 7112122721416655371ull}},
+{{12659206779467604534ull, 13746586909471533764ull,
+ 12186011079880799458ull, 8890153401770819214ull}},
+{{17135376274022028642ull, 13203302836847096506ull,
+ 3004570906498111757ull, 5556345876106762009ull}},
+{{12195848305672759994ull, 2669070490776706921ull,
+ 8367399651550027601ull, 6945432345133452511ull}},
+{{1409752326808786280ull, 7948024131898271556ull,
+ 5847563546010146597ull, 8681790431416815639ull}},
+{{10104467241110267233ull, 7273358091650113674ull,
+ 10572256243897423479ull, 5426119019635509774ull}},
+{{3407212014533058234ull, 4480011596135254189ull,
+ 3991948268017003541ull, 6782648774544387218ull}},
+{{8870701036593710696ull, 10211700513596455640ull,
+ 14213307371876030234ull, 8478310968180484022ull}},
+{{5544188147871069185ull, 10993998839425172679ull,
+ 4271631088995130992ull, 5298944355112802514ull}},
+{{2318549166411448577ull, 13742498549281465849ull,
+ 14562910898098689548ull, 6623680443891003142ull}},
+{{7509872476441698625ull, 17178123186601832311ull,
+ 8980266585768586127ull, 8279600554863753928ull}},
+{{11611199325417143497ull, 17653856019267227050ull,
+ 5612666616105366329ull, 5174750346789846205ull}},
+{{5290627119916653563ull, 8232261968801870101ull,
+ 11627519288559095816ull, 6468437933487307756ull}},
+{{11224969918323204858ull, 10290327461002337626ull,
+ 14534399110698869770ull, 8085547416859134695ull}},
+{{11627292217379390940ull, 11043140681553848920ull,
+ 16001528471827875462ull, 5053467135536959184ull}},
+{{14534115271724238675ull, 4580553815087535342ull,
+ 1555166516075292712ull, 6316833919421198981ull}},
+{{8944272052800522536ull, 5725692268859419178ull,
+ 6555644163521503794ull, 7896042399276498726ull}},
+{{10201856051427714489ull, 8190243686464524890ull,
+ 17932335657483103583ull, 4935026499547811703ull}},
+{{3528948027429867303ull, 5626118589653268209ull,
+ 17803733553426491575ull, 6168783124434764629ull}},
+{{9022871052714722033ull, 2420962218639197357ull,
+ 8419608886500950757ull, 7710978905543455787ull}},
+{{7945137417160395223ull, 3818944395863192300ull,
+ 2956412544849400271ull, 4819361815964659867ull}},
+{{9931421771450494029ull, 161994476401602471ull,
+ 17530573736343914051ull, 6024202269955824833ull}},
+{{7802591195885729632ull, 14037551150784166801ull,
+ 8078159115147728851ull, 7530252837444781042ull}},
+{{16405834543497050780ull, 6467626460026410298ull,
+ 9660535465394718436ull, 4706408023402988151ull}},
+{{11283921142516537667ull, 8084533075033012873ull,
+ 7463983313316010141ull, 5883010029253735189ull}},
+{{269843372863508371ull, 14717352362218653996ull,
+ 13941665160072400580ull, 7353762536567168986ull}},
+{{337304216079385464ull, 18396690452773317495ull,
+ 8203709413235724917ull, 9192203170708961233ull}},
+{{7128344162690697771ull, 13803774542197017386ull,
+ 16656533429340797833ull, 5745126981693100770ull}},
+{{18133802240218148022ull, 3419660122464108020ull,
+ 11597294749821221484ull, 7181408727116375963ull}},
+{{4220508726563133411ull, 4274575153080135026ull,
+ 9884932418849138951ull, 8976760908895469954ull}},
+{{7249503972529346286ull, 9589138498316166247ull,
+ 10789768780208099748ull, 5610475568059668721ull}},
+{{4450193947234294954ull, 11986423122895207809ull,
+ 18098896993687512589ull, 7013094460074585901ull}},
+{{10174428452470256596ull, 1147970848336846049ull,
+ 8788563186827227025ull, 8766368075093232377ull}},
+{{17888232828862380133ull, 12246696826278998540ull,
+ 17022067037835486650ull, 5478980046933270235ull}},
+{{3913546962368423550ull, 6084998995993972368ull,
+ 16665897778866970409ull, 6848725058666587794ull}},
+{{4891933702960529437ull, 12217934763419853364ull,
+ 11609000186728937203ull, 8560906323333234743ull}},
+{{12280830601205106706ull, 5330366217923714400ull,
+ 14173154144346667608ull, 5350566452083271714ull}},
+{{15351038251506383383ull, 6662957772404643000ull,
+ 8493070643578558702ull, 6688208065104089643ull}},
+{{742053740673427612ull, 17552069252360579559ull,
+ 6004652286045810473ull, 8360260081380112054ull}},
+{{7381312615561974114ull, 4052514255084280368ull,
+ 17587965734060795258ull, 5225162550862570033ull}},
+{{9226640769452467642ull, 14289014855710126268ull,
+ 8149899112293830360ull, 6531453188578212542ull}},
+{{11533300961815584553ull, 17861268569637657835ull,
+ 964001853512512142ull, 8164316485722765678ull}},
+{{4902470091921046394ull, 6551606837596148243ull,
+ 14437559213727483801ull, 5102697803576728548ull}},
+{{1516401596473920088ull, 12801194565422573208ull,
+ 18046949017159354751ull, 6378372254470910685ull}},
+{{1895501995592400110ull, 11389807188350828606ull,
+ 8723628216167029727ull, 7972965318088638357ull}},
+{{15019746802527413781ull, 14036158520360349734ull,
+ 7758110644318087531ull, 4983103323805398973ull}},
+{{9551311466304491418ull, 12933512132023049264ull,
+ 14309324323824997318ull, 6228879154756748716ull}},
+{{11939139332880614272ull, 6943518128174035772ull,
+ 17886655404781246648ull, 7786098943445935895ull}},
+{{16685334119905159728ull, 4339698830108772357ull,
+ 18096688655629361011ull, 4866311839653709934ull}},
+{{7021609594599285948ull, 812937519208577543ull,
+ 13397488782681925456ull, 6082889799567137418ull}},
+{{4165325974821719531ull, 1016171899010721929ull,
+ 7523488941497631012ull, 7603612249458921773ull}},
+{{14132543780332044467ull, 9858479473736477013ull,
+ 7008023597649713334ull, 4752257655911826108ull}},
+{{3830621670132891872ull, 3099727305315820459ull,
+ 8760029497062141668ull, 5940322069889782635ull}},
+{{176591069238726936ull, 3874659131644775574ull, 6338350852900289181ull,
+ 7425402587362228294ull}},
+{{13945427473556368047ull, 4727504966491678685ull,
+ 17796527338344844450ull, 4640876617101392683ull}},
+{{3596726286663296347ull, 15132753244969374165ull,
+ 17633973154503667658ull, 5801095771376740854ull}},
+{{9107593876756508337ull, 9692569519356941898ull,
+ 12819094406274808765ull, 7251369714220926068ull}},
+{{2161120309090859613ull, 16727397917623565277ull,
+ 16023868007843510956ull, 9064212142776157585ull}},
+{{3656543202395481210ull, 1231251661659952490ull,
+ 3097388477261112492ull, 5665132589235098491ull}},
+{{13794051039849127321ull, 1539064577074940612ull,
+ 17706793651858554327ull, 7081415736543873113ull}},
+{{17242563799811409151ull, 15758888776625839477ull,
+ 8298434009541029196ull, 8851769670679841392ull}},
+{{13082445384095824672ull, 625933448536373865ull,
+ 5186521255963143248ull, 5532356044174900870ull}},
+{{2517998674837617127ull, 782416810670467332ull,
+ 15706523606808704868ull, 6915445055218626087ull}},
+{{3147498343547021409ull, 978021013338084165ull,
+ 15021468490083493181ull, 8644306319023282609ull}},
+{{4273029473930582333ull, 2917106142549996555ull,
+ 2470888778661101382ull, 5402691449389551631ull}},
+{{729600823985840012ull, 12869754715042271502ull,
+ 16923669028608540439ull, 6753364311736939538ull}},
+{{10135373066837075823ull, 11475507375375451473ull,
+ 11931214248905899741ull, 8441705389671174423ull}},
+{{17863823212841642149ull, 9478035118823351122ull,
+ 14374537933207269194ull, 5276065868544484014ull}},
+{{13106406979197276879ull, 2624171861674413095ull,
+ 8744800379654310685ull, 6595082335680605018ull}},
+{{11771322705569208194ull, 7891900845520404273ull,
+ 1707628437713112548ull, 8243852919600756273ull}},
+{{439547663339673266ull, 14155810065305028479ull,
+ 12596482819639165102ull, 5152408074750472670ull}},
+{{14384492634456755294ull, 8471390544776509790ull,
+ 6522231487694180570ull, 6440510093438090838ull}},
+{{8757243756216168309ull, 1365866144115861430ull,
+ 17376161396472501521ull, 8050637616797613547ull}},
+{{861591329207717289ull, 12382881386140883154ull,
+ 8554257863581619498ull, 5031648510498508467ull}},
+{{10300361198364422420ull, 6255229695821328134ull,
+ 6081136311049636469ull, 6289560638123135584ull}},
+{{3652079461100752216ull, 12430723138204048072ull,
+ 7601420388812045586ull, 7861950797653919480ull}},
+{{2282549663187970135ull, 12380887979804917949ull,
+ 4750887743007528491ull, 4913719248533699675ull}},
+{{7464873097412350573ull, 10864423956328759532ull,
+ 1326923660332022710ull, 6142149060667124594ull}},
+{{9331091371765438216ull, 4357157908556173607ull,
+ 10882026612269804196ull, 7677686325833905742ull}},
+{{12749461134994480741ull, 11946595729702384312ull,
+ 2189580614241239718ull, 4798553953646191089ull}},
+{{15936826418743100927ull, 5709872625273204582ull,
+ 7348661786228937552ull, 5998192442057738861ull}},
+{{10697660986574100350ull, 7137340781591505728ull,
+ 13797513251213559844ull, 7497740552572173576ull}},
+{{6686038116608812719ull, 13684210025349466888ull,
+ 8623445782008474902ull, 4686087845357608485ull}},
+{{8357547645761015899ull, 7881890494832057802ull,
+ 15390993245937981532ull, 5857609806697010606ull}},
+{{1223562520346494065ull, 9852363118540072253ull,
+ 10015369520567701107ull, 7322012258371263258ull}},
+{{6141139168860505485ull, 7703767879747702412ull,
+ 3295839863854850576ull, 9152515322964079073ull}},
+{{13061584017392591737ull, 4814854924842314007ull,
+ 13589114960977751370ull, 5720322076852549420ull}},
+{{11715294003313351767ull, 15241940692907668317ull,
+ 16986393701222189212ull, 7150402596065686775ull}},
+{{809059448859525996ull, 605681792425033781ull, 16621306108100348612ull,
+ 8938003245082108469ull}},
+{{2811505164750897700ull, 9601923157120421921ull,
+ 12694159326776411834ull, 5586252028176317793ull}},
+{{8126067474366010029ull, 2779031909545751593ull,
+ 2032641103188351081ull, 6982815035220397242ull}},
+{{14769270361384900440ull, 8085475905359577395ull,
+ 11764173415840214659ull, 8728518794025496552ull}},
+{{6924950966651868823ull, 2747579431636041920ull,
+ 7352608384900134162ull, 5455324246265935345ull}},
+{{8656188708314836029ull, 12657846326399828208ull,
+ 13802446499552555606ull, 6819155307832419181ull}},
+{{10820235885393545036ull, 6598935871145009452ull,
+ 3418000069158530796ull, 8523944134790523977ull}},
+{{15986019465225741455ull, 13347706956320406715ull,
+ 13665465089292551507ull, 5327465084244077485ull}},
+{{15370838313104788915ull, 12072947676973120490ull,
+ 3246773306333525672ull, 6659331355305096857ull}},
+{{9990175854526210336ull, 15091184596216400613ull,
+ 8670152651344294994ull, 8324164194131371071ull}},
+{{8549702918292575412ull, 14043676391062638287ull,
+ 12336374434731266227ull, 5202602621332106919ull}},
+{{6075442629438331361ull, 12942909470400909955ull,
+ 10808782024986694880ull, 6503253276665133649ull}},
+{{2982617268370526297ull, 16178636838001137444ull,
+ 18122663549660756504ull, 8129066595831417061ull}},
+{{11087507829586354744ull, 10111648023750710902ull,
+ 13632507727751666767ull, 5080666622394635663ull}},
+{{4636012750128167622ull, 8027874011261000724ull,
+ 12428948641262195555ull, 6350833277993294579ull}},
+{{5795015937660209527ull, 5423156495648863001ull,
+ 10924499783150356540ull, 7938541597491618224ull}},
+{{15151100007106100715ull, 12612844846635315183ull,
+ 6827812364468972837ull, 4961588498432261390ull}},
+{{14327188990455237989ull, 1930998003011980267ull,
+ 17758137492440991855ull, 6201985623040326737ull}},
+{{13297300219641659582ull, 16248805559047139046ull,
+ 8362613810269076106ull, 7752482028800408422ull}},
+{{3699126618848649335ull, 14767189492831849808ull,
+ 614947612990784662ull, 4845301268000255264ull}}
+};
+
+static const UINT256 multipliers2_binary80[] =
+ { {{6207925045053820451ull, 7278732838564269635ull,
+ 11692571226397904350ull, 2627592000557903659ull}},
+{{3148220287889887660ull, 18321788085060112852ull,
+ 10004028014569992533ull, 3284490000697379574ull}},
+{{3935275359862359575ull, 9067177051042977353ull,
+ 3281662981357714859ull, 4105612500871724468ull}},
+{{13988762145982444495ull, 3361142647688166893ull,
+ 11274411400203347595ull, 2566007813044827792ull}},
+{{3650894627195891906ull, 18036486364892372329ull,
+ 14093014250254184493ull, 3207509766306034740ull}},
+{{9175304302422252786ull, 8710549900833301699ull,
+ 17616267812817730617ull, 4009387207882543425ull}},
+{{3428722179800214040ull, 16973308734089283322ull,
+ 4092638355369999779ull, 2505867004926589641ull}},
+{{13509274761605043357ull, 16604949899184216248ull,
+ 9727483962639887628ull, 3132333756158237051ull}},
+{{16886593452006304197ull, 2309443300270718694ull,
+ 7547668934872471632ull, 3915417195197796314ull}},
+{{5942434889076552219ull, 1443402062669199184ull,
+ 9328979102722682674ull, 2447135746998622696ull}},
+{{7428043611345690274ull, 11027624615191274788ull,
+ 11661223878403353342ull, 3058919683748278370ull}},
+{{9285054514182112842ull, 4561158732134317677ull,
+ 5353157811149415870ull, 3823649604685347963ull}},
+{{8109002080577514479ull, 16685782262866112260ull,
+ 1039880622754690966ull, 2389781002928342477ull}},
+{{10136252600721893098ull, 11633855791727864517ull,
+ 5911536796870751612ull, 2987226253660428096ull}},
+{{17282001769329754276ull, 14542319739659830646ull,
+ 7389420996088439515ull, 3734032817075535120ull}},
+{{6189565087403708519ull, 6783106828073700202ull,
+ 4618388122555274697ull, 2333770510672209450ull}},
+{{16960328396109411457ull, 13090569553519513156ull,
+ 14996357190048869179ull, 2917213138340261812ull}},
+{{2753666421427212705ull, 11751525923472003542ull,
+ 298702413851534858ull, 3646516422925327266ull}},
+{{12665455063638791689ull, 5466035367485228619ull,
+ 9596750054169194381ull, 4558145528656659082ull}},
+{{5610066405560550854ull, 5722115113891961839ull,
+ 10609654802283134392ull, 2848840955410411926ull}},
+{{2400896988523300663ull, 7152643892364952299ull,
+ 4038696465999142182ull, 3561051194263014908ull}},
+{{16836179290936289540ull, 18164176902310966181ull,
+ 5048370582498927727ull, 4451313992828768635ull}},
+{{12828455066048874915ull, 18270139591585435719ull,
+ 849388604848135877ull, 2782071245517980397ull}},
+{{11423882814133705740ull, 9002616434199630937ull,
+ 5673421774487557751ull, 3477589056897475496ull}},
+{{444795462384968462ull, 6641584524322150768ull, 7091777218109447189ull,
+ 4346986321121844370ull}},
+{{277997163990605289ull, 6456833336915038182ull, 9044046779745792397ull,
+ 2716866450701152731ull}},
+{{9570868491843032419ull, 12682727689571185631ull,
+ 6693372456254852592ull, 3396083063376440914ull}},
+{{7351899596376402620ull, 15853409611963982039ull,
+ 17590087607173341548ull, 4245103829220551142ull}},
+{{11512466275376333494ull, 685008970622712966ull,
+ 6382118736055950564ull, 2653189893262844464ull}},
+{{5167210807365641059ull, 856261213278391208ull, 7977648420069938205ull,
+ 3316487366578555580ull}},
+{{6459013509207051324ull, 5682012535025376914ull,
+ 9972060525087422756ull, 4145609208223194475ull}},
+{{8648569461681794981ull, 12774629871245636379ull,
+ 3926694818965945270ull, 2591005755139496547ull}},
+{{6199025808674855823ull, 6744915302202269666ull, 296682505280043684ull,
+ 3238757193924370684ull}},
+{{16972154297698345586ull, 8431144127752837082ull,
+ 370853131600054605ull, 4048446492405463355ull}},
+{{15219282454488853896ull, 7575308089059217128ull,
+ 16372684271745891792ull, 2530279057753414596ull}},
+{{577358994401515753ull, 9469135111324021411ull, 2019111265972813124ull,
+ 3162848822191768246ull}},
+{{14556756798284058404ull, 11836418889155026763ull,
+ 11747261119320792213ull, 3953561027739710307ull}},
+{{6792129989713842550ull, 9703604814935585679ull,
+ 5036195190361801181ull, 2470975642337318942ull}},
+{{3878476468714915284ull, 16741192037096870003ull,
+ 15518616024807027284ull, 3088719552921648677ull}},
+{{236409567466256201ull, 2479745972661535888ull, 5563211975726620394ull,
+ 3860899441152060847ull}},
+{{147755979666410126ull, 6161527251340847834ull,
+ 10394536512470219602ull, 2413062150720038029ull}},
+{{9408067011437788465ull, 16925281101030835600ull,
+ 17604856659015162406ull, 3016327688400047536ull}},
+{{11760083764297235581ull, 11933229339433768692ull,
+ 3559326750059401392ull, 3770409610500059421ull}},
+{{16573424389540548046ull, 7458268337146105432ull,
+ 4530422228000819822ull, 2356506006562537138ull}},
+{{2270036413216133442ull, 99463384577855983ull, 14886399821855800586ull,
+ 2945632508203171422ull}},
+{{16672603571802330514ull, 9347701267577095786ull,
+ 9384627740464974924ull, 3682040635253964278ull}},
+{{11617382427898137335ull, 11684626584471369733ull,
+ 2507412638726442847ull, 4602550794067455348ull}},
+{{9566707026650029786ull, 14220420642935687939ull,
+ 10790504936058802587ull, 2876594246292159592ull}},
+{{7346697764885149329ull, 13163839785242222020ull,
+ 13488131170073503234ull, 3595742807865199490ull}},
+{{9183372206106436661ull, 7231427694698001717ull,
+ 7636791925737103235ull, 4494678509831499363ull}},
+{{8045450638030216865ull, 2213799299972557121ull,
+ 2467151944371995570ull, 2809174068644687102ull}},
+{{14668499315965158985ull, 11990621161820472209ull,
+ 12307311967319770270ull, 3511467585805858877ull}},
+{{4500566089674285020ull, 5764904415420814454ull,
+ 1549081903867549126ull, 4389334482257323597ull}},
+{{16647911861328591849ull, 17438123314920172745ull,
+ 3274019199130912155ull, 2743334051410827248ull}},
+{{6974831771378576100ull, 17185968125222828028ull,
+ 4092523998913640194ull, 3429167564263534060ull}},
+{{8718539714223220124ull, 12259088119673759227ull,
+ 5115654998642050243ull, 4286459455329417575ull}},
+{{3143244312175818626ull, 5356087065582405565ull,
+ 10114813401792363258ull, 2679037159580885984ull}},
+{{8540741408647161186ull, 15918480868832782764ull,
+ 12643516752240454072ull, 3348796449476107480ull}},
+{{10675926760808951483ull, 1451357012331426839ull,
+ 15804395940300567591ull, 4185995561845134350ull}},
+{{13589983253146676533ull, 7824627160348223630ull,
+ 5266061444260466840ull, 2616247226153208969ull}},
+{{7764107029578569858ull, 9780783950435279538ull,
+ 11194262823752971454ull, 3270309032691511211ull}},
+{{481761750118436514ull, 3002607901189323615ull, 9381142511263826414ull,
+ 4087886290864389014ull}},
+{{7218630121465104678ull, 15711687993525490971ull,
+ 1251528051112503604ull, 2554928931790243134ull}},
+{{4411601633403992943ull, 1192865918197312098ull,
+ 10787782100745405314ull, 3193661164737803917ull}},
+{{14737874078609766987ull, 10714454434601415930ull,
+ 18096413644359144546ull, 3992076455922254896ull}},
+{{13822857317558492271ull, 11308220040053272860ull,
+ 11310258527724465341ull, 2495047784951409310ull}},
+{{17278571646948115338ull, 300216994784427363ull,
+ 4914451122800805869ull, 3118809731189261638ull}},
+{{16986528540257756269ull, 4986957261907922108ull,
+ 15366435940355783144ull, 3898512163986577047ull}},
+{{1393208300806321860ull, 3116848288692451318ull,
+ 16521551490363446321ull, 2436570102491610654ull}},
+{{10964882412862678133ull, 8507746379292952051ull,
+ 11428567326099532093ull, 3045712628114513318ull}},
+{{9094416997650959762ull, 15246368992543577968ull,
+ 5062337120769639308ull, 3807140785143141648ull}},
+{{5684010623531849852ull, 305608583484960422ull, 3163960700481024568ull,
+ 2379462990714463530ull}},
+{{16328385316269588122ull, 382010729356200527ull,
+ 13178322912456056518ull, 2974328738393079412ull}},
+{{15798795626909597249ull, 9700885448550026467ull,
+ 16472903640570070647ull, 3717910922991349265ull}},
+{{7568404257604804329ull, 12980582432984848398ull,
+ 3378035747715212298ull, 2323694326869593291ull}},
+{{237133285151229603ull, 7002356004376284690ull,
+ 18057602739926179085ull, 2904617908586991613ull}},
+{{9519788643293812811ull, 13364631023897743766ull,
+ 8736945369625560144ull, 3630772385733739517ull}},
+{{2676363767262490206ull, 16705788779872179708ull,
+ 15532867730459338084ull, 4538465482167174396ull}},
+{{10896099391393832187ull, 1217745950565336509ull,
+ 484670294682310495ull, 2836540926354483998ull}},
+{{18231810257669678138ull, 15357240493488834348ull,
+ 9829209905207663926ull, 3545676157943104997ull}},
+{{4343018748377546056ull, 9973178580006267128ull,
+ 16898198399936967812ull, 4432095197428881246ull}},
+{{2714386717735966285ull, 15456608649358692763ull,
+ 5949687981533216978ull, 2770059498393050779ull}},
+{{17228041452452121568ull, 10097388774843590145ull,
+ 2825423958489133319ull, 3462574372991313474ull}},
+{{7699993760282988248ull, 8010049950127099778ull,
+ 12755151984966192457ull, 4328217966239141842ull}},
+{{9424182118604255559ull, 16535496264897907121ull,
+ 12583656009031258189ull, 2705136228899463651ull}},
+{{16391913666682707353ull, 6834312275840220189ull,
+ 11117883992861684833ull, 3381420286124329564ull}},
+{{6654834028071220479ull, 13154576363227663141ull,
+ 13897354991077106041ull, 4226775357655411955ull}},
+{{6465114276758206752ull, 1304081199376207607ull,
+ 6380003860209497324ull, 2641734598534632472ull}},
+{{3469706827520370535ull, 1630101499220259509ull,
+ 7975004825261871655ull, 3302168248168290590ull}},
+{{8948819552827851073ull, 15872684929307488098ull,
+ 745383994722563760ull, 4127710310210363238ull}},
+{{10204698238944794825ull, 9920428080817180061ull,
+ 14300923051983766062ull, 2579818943881477023ull}},
+{{17367558817108381435ull, 3177163064166699268ull,
+ 13264467796552319674ull, 3224773679851846279ull}},
+{{3262704447675925178ull, 13194825867063149894ull,
+ 11968898727263011688ull, 4030967099814807849ull}},
+{{15874248335079616948ull, 8246766166914468683ull,
+ 563032676898300449ull, 2519354437384254906ull}},
+{{15231124400422133281ull, 14920143727070473758ull,
+ 9927162882977651369ull, 3149193046730318632ull}},
+{{9815533463672890793ull, 4815121603555928486ull,
+ 12408953603722064212ull, 3936491308412898290ull}},
+{{1523022396368168842ull, 12232823039077231112ull,
+ 12367282020753678036ull, 2460307067758061431ull}},
+{{1903777995460211052ull, 15291028798846538890ull,
+ 10847416507514709641ull, 3075383834697576789ull}},
+{{11603094531180039623ull, 5278727943276009900ull,
+ 18170956652820774956ull, 3844229793371970986ull}},
+{{16475306118842300573ull, 12522577001402281995ull,
+ 15968533926440372251ull, 2402643620857481866ull}},
+{{15982446630125487812ull, 11041535233325464590ull,
+ 10737295371195689506ull, 3003304526071852333ull}},
+{{10754686250802083957ull, 4578547004802054930ull,
+ 18033305232421999787ull, 3754130657589815416ull}},
+{{11333364925178690377ull, 555748868787590379ull,
+ 11270815770263749867ull, 2346331660993634635ull}},
+{{9555020138045975067ull, 14529744141266651686ull,
+ 9476833694402299429ull, 2932914576242043294ull}},
+{{2720403135702693026ull, 4327122121301150896ull,
+ 2622670081148098479ull, 3666143220302554118ull}},
+{{3400503919628366282ull, 797216633199050716ull,
+ 12501709638289898907ull, 4582679025378192647ull}},
+{{11348686986622504735ull, 16639161460245264361ull,
+ 14731097551572268672ull, 2864174390861370404ull}},
+{{350800677995967206ull, 2352207751597028836ull,
+ 18413871939465335841ull, 3580217988576713005ull}},
+{{438500847494959008ull, 7551945707923673949ull, 9182281869049506089ull,
+ 4475272485720891257ull}},
+{{2579906038898043332ull, 16249181113520765978ull,
+ 17268141214224411065ull, 2797045303575557035ull}},
+{{12448254585477329973ull, 6476418336618793760ull,
+ 16973490499353125928ull, 3496306629469446294ull}},
+{{15560318231846662466ull, 8095522920773492200ull,
+ 11993491087336631602ull, 4370383286836807868ull}},
+{{9725198894904164041ull, 9671387843910820529ull,
+ 16719303966440170559ull, 2731489554273004917ull}},
+{{16768184637057592956ull, 7477548786461137757ull,
+ 7064071902768049487ull, 3414361942841256147ull}},
+{{7125172741039827482ull, 4735249964649034293ull,
+ 4218403860032673955ull, 4267952428551570184ull}},
+{{6759075972363586129ull, 653688218691952481ull, 2636502412520421222ull,
+ 2667470267844731365ull}},
+{{13060530983881870565ull, 10040482310219716409ull,
+ 7907314034077914431ull, 3334337834805914206ull}},
+{{2490605674570174494ull, 7938916869347257608ull, 660770505742617231ull,
+ 4167922293507392758ull}},
+{{1556628546606359059ull, 11879352070983117861ull,
+ 14248039621371299481ull, 2604951433442120473ull}},
+{{6557471701685336727ull, 1014132033446733614ull,
+ 3974991471431960640ull, 3256189291802650592ull}},
+{{17420211663961446717ull, 1267665041808417017ull,
+ 4968739339289950800ull, 4070236614753313240ull}},
+{{3970103262334822342ull, 792290651130260636ull, 3105462087056219250ull,
+ 2543897884220820775ull}},
+{{4962629077918527928ull, 10213735350767601603ull,
+ 17716885664102437774ull, 3179872355276025968ull}},
+{{1591600328970772006ull, 3543797151604726196ull,
+ 3699363006418495602ull, 3974840444095032461ull}},
+{{10218122242461508312ull, 6826559238180341776ull,
+ 4617944888225253703ull, 2484275277559395288ull}},
+{{12772652803076885390ull, 3921513029298039316ull,
+ 5772431110281567129ull, 3105344096949244110ull}},
+{{15965816003846106737ull, 9513577305049937049ull,
+ 16438910924706734719ull, 3881680121186555137ull}},
+{{3061105974762734855ull, 12863514843297292512ull,
+ 3356790300300627343ull, 2426050075741596961ull}},
+{{3826382468453418568ull, 11467707535694227736ull,
+ 8807673893803172083ull, 3032562594676996201ull}},
+{{4782978085566773210ull, 9722948401190396766ull,
+ 15621278385681353008ull, 3790703243346245251ull}},
+{{16824419358761396969ull, 6076842750743997978ull,
+ 7457455981837151678ull, 2369189527091403282ull}},
+{{11807152161596970403ull, 16819425475284773281ull,
+ 98447940441663789ull, 2961486908864254103ull}},
+{{923882146714049291ull, 7189223788823802890ull,
+ 13958117980834243449ull, 3701858636080317628ull}},
+{{5189112360123668711ull, 16022479914083346566ull,
+ 17947195774876177963ull, 2313661647550198517ull}},
+{{15709762487009361697ull, 15416413874176795303ull,
+ 8598936663313058742ull, 2892077059437748147ull}},
+{{15025517090334314217ull, 10047145305866218321ull,
+ 6136984810713935524ull, 3615096324297185184ull}},
+{{4946838307635729059ull, 12558931632332772902ull,
+ 7671231013392419405ull, 4518870405371481480ull}},
+{{16926831997554494374ull, 10155175279421677015ull,
+ 4794519383370262128ull, 2824294003357175925ull}},
+{{16546853978515730063ull, 12693969099277096269ull,
+ 10604835247640215564ull, 3530367504196469906ull}},
+{{6848509417862498867ull, 15867461374096370337ull,
+ 4032672022695493647ull, 4412959380245587383ull}},
+{{15809533432232531552ull, 16834692386451313316ull,
+ 9437949041825765385ull, 2758099612653492114ull}},
+{{1315172716581112824ull, 7208307427781977934ull,
+ 2574064265427430924ull, 3447624515816865143ull}},
+{{10867337932581166838ull, 9010384284727472417ull,
+ 17052638387066452367ull, 4309530644771081428ull}},
+{{18321301253931699034ull, 12549019205595752116ull,
+ 1434526955061756921ull, 2693456652981925893ull}},
+{{4454882493705072176ull, 1851215951712526434ull,
+ 6404844712254584056ull, 3366820816227407366ull}},
+{{14791975153986116028ull, 2314019939640658042ull,
+ 17229427927173005878ull, 4208526020284259207ull}},
+{{13856670489668710422ull, 15281320517557574988ull,
+ 17685921482124210529ull, 2630328762677662004ull}},
+{{17320838112085888027ull, 5266592591664805023ull,
+ 3660657778945711546ull, 3287910953347077506ull}},
+{{17039361621679972130ull, 15806612776435782087ull,
+ 13799194260536915240ull, 4109888691683846882ull}},
+{{17567130041191064437ull, 9879132985272363804ull,
+ 13236182431262959929ull, 2568680432302404301ull}},
+{{3512168477779278930ull, 16960602250017842660ull,
+ 2710169983796536199ull, 3210850540378005377ull}},
+{{4390210597224098663ull, 16589066794094915421ull,
+ 7999398498173058153ull, 4013563175472506721ull}},
+{{5049724632478755617ull, 3450637718668240282ull,
+ 16528839107426631106ull, 2508476984670316700ull}},
+{{15535527827453220329ull, 13536669185190076160ull,
+ 2214304810573737266ull, 3135596230837895876ull}},
+{{972665710606973795ull, 7697464444632819393ull, 2767881013217171583ull,
+ 3919495288547369845ull}},
+{{12137131115197828382ull, 11728444305536593976ull,
+ 4035768642474426191ull, 2449684555342106153ull}},
+{{15171413893997285477ull, 10048869363493354566ull,
+ 9656396821520420643ull, 3062105694177632691ull}},
+{{9740895330641831038ull, 7949400685939305304ull,
+ 7458810008473137900ull, 3827632117722040864ull}},
+{{6088059581651144399ull, 14191747465566841623ull,
+ 4661756255295711187ull, 2392270073576275540ull}},
+{{2998388458636542595ull, 13127998313531164125ull,
+ 5827195319119638984ull, 2990337591970344425ull}},
+{{8359671591723066147ull, 16409997891913955156ull,
+ 11895680167326936634ull, 3737921989962930531ull}},
+{{14448166781681692150ull, 14867934700873609876ull,
+ 5128957095365641444ull, 2336201243726831582ull}},
+{{18060208477102115188ull, 138174302382460729ull,
+ 15634568406061827614ull, 2920251554658539477ull}},
+{{8740202541095480273ull, 9396089914832851720ull,
+ 5708152452295120805ull, 3650314443323174347ull}},
+{{10925253176369350341ull, 16356798411968452554ull,
+ 2523504546941513102ull, 4562893054153967934ull}},
+{{11439969253658231867ull, 5611312989052894942ull,
+ 15412248397120609401ull, 2851808158846229958ull}},
+{{5076589530218014026ull, 11625827254743506582ull,
+ 10041938459545985943ull, 3564760198557787448ull}},
+{{15569108949627293340ull, 9920598050001995323ull,
+ 12552423074432482429ull, 4455950248197234310ull}},
+{{7424850084303364386ull, 8506216790464941029ull,
+ 3233578403092913614ull, 2784968905123271444ull}},
+{{13892748623806593386ull, 1409398951226400478ull,
+ 4041973003866142018ull, 3481211131404089305ull}},
+{{8142563742903465924ull, 10985120725887776406ull,
+ 9664152273260065426ull, 4351513914255111631ull}},
+{{477416320887278299ull, 11477386472107248158ull,
+ 12957624198428622747ull, 2719696196409444769ull}},
+{{9820142437963873681ull, 9735047071706672293ull,
+ 2361972192753614722ull, 3399620245511805962ull}},
+{{16886864065882230006ull, 2945436802778564558ull,
+ 12175837277796794211ull, 4249525306889757452ull}},
+{{5942604022749005850ull, 17981799066232460513ull,
+ 16833270335477772189ull, 2655953316806098407ull}},
+{{12039941046863645216ull, 8642190777508411929ull,
+ 16429901900919827333ull, 3319941646007623009ull}},
+{{1214868253297392808ull, 15414424490312902816ull,
+ 6702319320867620454ull, 4149927057509528762ull}},
+{{759292658310870505ull, 5022329288018176356ull, 8800635593969650688ull,
+ 2593704410943455476ull}},
+{{949115822888588131ull, 6277911610022720445ull,
+ 11000794492462063360ull, 3242130513679319345ull}},
+{{5798080797038123068ull, 7847389512528400556ull,
+ 18362679134004967104ull, 4052663142099149181ull}},
+{{12847172535003602726ull, 4904618445330250347ull,
+ 13782517467966798392ull, 2532914463811968238ull}},
+{{11447279650327115503ull, 6130773056662812934ull,
+ 8004774798103722182ull, 3166143079764960298ull}},
+{{5085727526054118571ull, 16886838357683291976ull,
+ 782596460774876919ull, 3957678849706200373ull}},
+{{3178579703783824107ull, 17471803001193139341ull,
+ 2794965797197992026ull, 2473549281066375233ull}},
+{{8584910648157168037ull, 12616381714636648368ull,
+ 8105393264924877937ull, 3091936601332969041ull}},
+{{10731138310196460047ull, 1935419088013646748ull,
+ 14743427599583485326ull, 3864920751666211301ull}},
+{{15930333480727563337ull, 15044694985290692929ull,
+ 11520485258953372280ull, 2415575469791382063ull}},
+{{6077858795627290460ull, 359124657903814546ull, 9788920555264327447ull,
+ 3019469337239227579ull}},
+{{16820695531388888882ull, 14283963877661931894ull,
+ 7624464675653021404ull, 3774336671549034474ull}},
+{{5901248688690667648ull, 18150849460393483242ull,
+ 9376976440710526281ull, 2358960419718146546ull}},
+{{16599932897718110367ull, 8853503770209690340ull,
+ 2497848514033382044ull, 2948700524647683183ull}},
+{{2303172048438086343ull, 11066879712762112926ull,
+ 16957368697823891267ull, 3685875655809603978ull}},
+{{12102337097402383737ull, 9221913622525253253ull,
+ 11973338835425088276ull, 4607344569762004973ull}},
+{{9869803695090183788ull, 14987068050933059091ull,
+ 9789179781354374124ull, 2879590356101253108ull}},
+{{7725568600435341830ull, 287090989956772248ull,
+ 12236474726692967656ull, 3599487945126566385ull}},
+{{9656960750544177288ull, 358863737445965310ull, 1460535353084045858ull,
+ 4499359931408207982ull}},
+{{1423914450662722901ull, 4835975854331116223ull,
+ 14747892650959692373ull, 2812099957130129988ull}},
+{{15614951118610567338ull, 10656655836341283182ull,
+ 18434865813699615466ull, 3515124946412662485ull}},
+{{10295316861408433365ull, 4097447758571828170ull,
+ 9208524211842355621ull, 4393906183015828107ull}},
+{{11046259056807658757ull, 4866747858321086558ull,
+ 3449484623187778311ull, 2746191364384892567ull}},
+{{4584451784154797638ull, 1471748804473970294ull,
+ 18146913834266886601ull, 3432739205481115708ull}},
+{{14953936767048272856ull, 6451372024019850771ull,
+ 4236898219124056635ull, 4290924006851394636ull}},
+{{7040367470191476583ull, 1726264505798712780ull,
+ 11871433423807311205ull, 2681827504282121647ull}},
+{{8800459337739345729ull, 6769516650675778879ull,
+ 10227605761331751102ull, 3352284380352652059ull}},
+{{6388888153746794257ull, 17685267850199499407ull,
+ 8172821183237300973ull, 4190355475440815074ull}},
+{{10910584123732828267ull, 13359135415588381081ull,
+ 9719699257950701012ull, 2618972172150509421ull}},
+{{18249916173093423237ull, 16698919269485476351ull,
+ 16761310090865764169ull, 3273715215188136776ull}},
+{{18200709197939391142ull, 7038591031574681727ull,
+ 2504893539872653596ull, 4092144018985170971ull}},
+{{18292972276353201320ull, 13622491431588951887ull,
+ 17706459526916266161ull, 2557590011865731856ull}},
+{{18254529327014113746ull, 3193056234204026147ull,
+ 3686330334935781086ull, 3196987514832164821ull}},
+{{18206475640340254279ull, 13214692329609808492ull,
+ 9219598937097114261ull, 3996234393540206026ull}},
+{{2155675238357883116ull, 10565025715219824260ull,
+ 10373935354113084317ull, 2497646495962628766ull}},
+{{2694594047947353895ull, 17817968162452168229ull,
+ 3744047155786579588ull, 3122058119953285958ull}},
+{{7979928578361580273ull, 3825716129355658670ull,
+ 13903430981588000294ull, 3902572649941607447ull}},
+{{375769343048599767ull, 16226130636129450381ull,
+ 15607173391133582039ull, 2439107906213504654ull}},
+{{5081397697238137612ull, 15670977276734425072ull,
+ 10285594702062201741ull, 3048884882766880818ull}},
+{{6351747121547672015ull, 5753663540635867628ull,
+ 3633621340722976369ull, 3811106103458601023ull}},
+{{13193213987822070818ull, 15125254758965887027ull,
+ 9188542365592942086ull, 2381941314661625639ull}},
+{{11879831466350200618ull, 9683196411852582976ull,
+ 6873991938563789704ull, 2977426643327032049ull}},
+{{14849789332937750772ull, 12103995514815728720ull,
+ 13204175941632125034ull, 3721783304158790061ull}},
+{{9281118333086094233ull, 12176683215187218354ull,
+ 10558452972733772098ull, 2326114565099243788ull}},
+{{2378025879502841983ull, 5997481982129247135ull,
+ 13198066215917215123ull, 2907643206374054735ull}},
+{{16807590404660716191ull, 2885166459234171014ull,
+ 11885896751469131000ull, 3634554007967568419ull}},
+{{11786115968971119430ull, 3606458074042713768ull,
+ 10245684920909025846ull, 4543192509959460524ull}},
+{{7366322480606949644ull, 16089094351558859817ull,
+ 15626925112422916961ull, 2839495318724662827ull}},
+{{13819589119186074959ull, 6276309884166411059ull,
+ 14921970372101258298ull, 3549369148405828534ull}},
+{{12662800380555205795ull, 17068759392062789632ull,
+ 9429090928271797064ull, 4436711435507285668ull}},
+{{7914250237847003622ull, 10667974620039243520ull,
+ 15116553867024648973ull, 2772944647192053542ull}},
+{{9892812797308754527ull, 17946654293476442304ull,
+ 9672320296926035408ull, 3466180808990066928ull}},
+{{12366015996635943159ull, 3986573793136001264ull,
+ 12090400371157544261ull, 4332726011237583660ull}},
+{{7728759997897464474ull, 4797451629923694742ull,
+ 16779872268828240971ull, 2707953757023489787ull}},
+{{437577960517054785ull, 1385128518977230524ull,
+ 16363154317607913310ull, 3384942196279362234ull}},
+{{546972450646318481ull, 10954782685576313963ull,
+ 11230570860155115829ull, 4231177745349202793ull}},
+{{16482758846149806715ull, 9152582187698890178ull,
+ 101577759955865537ull, 2644486090843251746ull}},
+{{11380076520832482585ull, 16052413753051000627ull,
+ 9350344236799607729ull, 3305607613554064682ull}},
+{{9613409632613215328ull, 6230459136031587072ull,
+ 2464558259144733854ull, 4132009516942580853ull}},
+{{6008381020383259580ull, 17729095015301905632ull,
+ 3846191921179152610ull, 2582505948089113033ull}},
+{{7510476275479074475ull, 12937996732272606232ull,
+ 9419425919901328667ull, 3228132435111391291ull}},
+{{9388095344348843093ull, 11560809896913369886ull,
+ 7162596381449272930ull, 4035165543889239114ull}},
+{{1255873571790639030ull, 11837192203998244083ull,
+ 9088308756833183485ull, 2521978464930774446ull}},
+{{15404900020020462499ull, 961432199715641391ull,
+ 2137013909186703549ull, 3152473081163468058ull}},
+{{14644439006598190219ull, 5813476268071939643ull,
+ 11894639423338155244ull, 3940591351454335072ull}},
+{{6846931369910174935ull, 12856794704399738085ull,
+ 7434149639586347027ull, 2462869594658959420ull}},
+{{13170350230815106573ull, 11459307362072284702ull,
+ 9292687049482933784ull, 3078586993323699275ull}},
+{{7239565751664107408ull, 14324134202590355878ull,
+ 7004172793426279326ull, 3848233741654624094ull}},
+{{18359786650072230842ull, 4340897858191584519ull,
+ 18212666051173588291ull, 2405146088534140058ull}},
+{{18338047294162900649ull, 814436304312092745ull,
+ 13542460527112209556ull, 3006432610667675073ull}},
+{{9087501062421462099ull, 1018045380390115932ull,
+ 3093017603608098233ull, 3758040763334593842ull}},
+{{14903060200868189620ull, 12165493408812292217ull,
+ 6544822020682449299ull, 2348775477084121151ull}},
+{{4793767195803073313ull, 10595180742587977368ull,
+ 3569341507425673720ull, 2935969346355151439ull}},
+{{5992208994753841641ull, 13243975928234971710ull,
+ 18296734939564255862ull, 3669961682943939298ull}},
+{{16713633280297077859ull, 7331597873438938829ull,
+ 13647546637600544020ull, 4587452103679924123ull}},
+{{12751863809399367614ull, 13805620707754112576ull,
+ 6223873639286646060ull, 2867157564799952577ull}},
+{{15939829761749209517ull, 17257025884692640720ull,
+ 12391528067535695479ull, 3583946955999940721ull}},
+{{1478043128476960281ull, 16959596337438412997ull,
+ 1654352029137455637ull, 4479933694999925902ull}},
+{{3229619964511794128ull, 12905590720112702075ull,
+ 14869028073493073485ull, 2799958559374953688ull}},
+{{17872083010921906371ull, 2296930344858713881ull,
+ 139541018156790241ull, 3499948199218692111ull}},
+{{8505045708370219252ull, 7482848949500780256ull,
+ 14009484327978151513ull, 4374935249023365138ull}},
+{{5315653567731387033ull, 16205995639506457420ull,
+ 13367613723413732599ull, 2734334530639603211ull}},
+{{6644566959664233791ull, 15645808530955683871ull,
+ 12097831135839777845ull, 3417918163299504014ull}},
+{{3694022681152904334ull, 5722202608412441127ull,
+ 5898916882944946499ull, 4272397704124380018ull}},
+{{9226293203361647065ull, 1270533621044081752ull,
+ 8298509070267979466ull, 2670248565077737511ull}},
+{{11532866504202058831ull, 10811539063159877998ull,
+ 5761450319407586428ull, 3337810706347171889ull}},
+{{5192711093397797731ull, 13514423828949847498ull,
+ 11813498917686870939ull, 4172263382933964861ull}},
+{{7857130451801011486ull, 6140671883879960734ull,
+ 9689279832767988289ull, 2607664614333728038ull}},
+{{598041027896488549ull, 12287525873277338822ull,
+ 2888227754105209553ull, 3259580767917160048ull}},
+{{9970923321725386495ull, 1524349286314509815ull,
+ 3610284692631511942ull, 4074475959896450060ull}},
+{{13149356103719448415ull, 14787776359228732346ull,
+ 11479799969749470771ull, 2546547474935281287ull}},
+{{7213323092794534711ull, 13873034430608527529ull,
+ 9738063943759450560ull, 3183184343669101609ull}},
+{{13628339884420556293ull, 17341293038260659411ull,
+ 16784265948126701104ull, 3978980429586377011ull}},
+{{6211869418549153731ull, 10838308148912912132ull,
+ 8184323208365494238ull, 2486862768491485632ull}},
+{{7764836773186442164ull, 4324513149286364357ull,
+ 10230404010456867798ull, 3108578460614357040ull}},
+{{14317731984910440609ull, 14629013473462731254ull,
+ 12788005013071084747ull, 3885723075767946300ull}},
+{{4336896472141637477ull, 6837290411700513082ull,
+ 17215875170024203775ull, 2428576922354966437ull}},
+{{14644492627031822654ull, 3934926996198253448ull,
+ 7684785907248091007ull, 3035721152943708047ull}},
+{{18305615783789778317ull, 306972726820428906ull,
+ 4994296365632725855ull, 3794651441179635059ull}},
+{{16052695883295999352ull, 7109386981903849922ull,
+ 815592219306759707ull, 2371657150737271912ull}},
+{{10842497817265223382ull, 4275047708952424499ull,
+ 1019490274133449634ull, 2964571438421589890ull}},
+{{8941436253154141324ull, 14567181673045306432ull,
+ 10497734879521587850ull, 3705714298026987362ull}},
+{{5588397658221338327ull, 13716174564080704424ull,
+ 11172770318128380310ull, 2316071436266867101ull}},
+{{6985497072776672909ull, 7921846168246104722ull, 130904842378311676ull,
+ 2895089295333583877ull}},
+{{17955243377825616944ull, 9902307710307630902ull,
+ 4775317071400277499ull, 3618861619166979846ull}},
+{{13220682185427245372ull, 7766198619457150724ull,
+ 15192518376105122682ull, 4523577023958724807ull}},
+{{17486298402746804166ull, 9465560155588107106ull,
+ 16412853012706783532ull, 2827235639974203004ull}},
+{{12634500966578729399ull, 11831950194485133883ull,
+ 2069322192173927799ull, 3534044549967753756ull}},
+{{11181440189796023845ull, 10178251724679029450ull,
+ 2586652740217409749ull, 4417555687459692195ull}},
+{{11600086137049902807ull, 8667250337138087358ull,
+ 17757559027131738757ull, 2760972304662307621ull}},
+{{5276735634457602701ull, 15445748939849997102ull,
+ 8361890728632509734ull, 3451215380827884527ull}},
+{{15819291579926779184ull, 10083814137957720569ull,
+ 5840677392363249264ull, 4314019226034855659ull}},
+{{2969528209813155134ull, 6302383836223575356ull,
+ 1344580361013336838ull, 2696262016271784787ull}},
+{{3711910262266443918ull, 17101351832134245003ull,
+ 15515783506548834759ull, 3370327520339730983ull}},
+{{28201809405666993ull, 16765003771740418350ull,
+ 14783043364758655545ull, 4212909400424663729ull}},
+{{13852684186160705583ull, 3560598329696679612ull,
+ 2321873075333077860ull, 2633068375265414831ull}},
+{{17315855232700881978ull, 4450747912120849515ull,
+ 16737399399448511037ull, 3291335469081768538ull}},
+{{17033133022448714569ull, 10175120908578449798ull,
+ 11698377212455862988ull, 4114169336352210673ull}},
+{{6034022120603058702ull, 15582822604716306932ull,
+ 393956730143832511ull, 2571355835220131671ull}},
+{{7542527650753823377ull, 14866842237467995761ull,
+ 14327503967961954351ull, 3214194794025164588ull}},
+{{14039845581869667125ull, 13971866778407606797ull,
+ 17909379959952442939ull, 4017743492531455735ull}},
+{{11080746497882235905ull, 6426573727291060296ull,
+ 18110891502611358693ull, 2511089682832159834ull}},
+{{13850933122352794882ull, 12644903177541213274ull,
+ 13415242341409422558ull, 3138862103540199793ull}},
+{{8090294366086217794ull, 6582756935071740785ull,
+ 2933994871479614486ull, 3923577629425249742ull}},
+{{16585649024872355881ull, 17949281139702001702ull,
+ 15668804849956922765ull, 2452236018390781088ull}},
+{{11508689244235669044ull, 8601543369345338416ull,
+ 1139261988736601841ull, 3065295022988476361ull}},
+{{14385861555294586304ull, 15363615230109060924ull,
+ 6035763504348140205ull, 3831618778735595451ull}},
+{{18214535508913892248ull, 11908102528031857029ull,
+ 1466509181003893676ull, 2394761736709747157ull}},
+{{8933111330860201598ull, 14885128160039821287ull,
+ 6444822494682254999ull, 2993452170887183946ull}},
+{{6554703145147864094ull, 13994724181622388705ull,
+ 17279400155207594557ull, 3741815213608979932ull}},
+{{15625904511785884819ull, 11052545622727686892ull,
+ 1576253060149970790ull, 2338634508505612458ull}},
+{{1085636566022804407ull, 4592309991554832808ull,
+ 11193688362042239296ull, 2923293135632015572ull}},
+{{1357045707528505509ull, 5740387489443541010ull,
+ 13992110452552799120ull, 3654116419540019465ull}},
+{{10919679171265407694ull, 7175484361804426262ull,
+ 3655080010408835188ull, 4567645524425024332ull}},
+{{2213113463613491905ull, 13708049762982542222ull,
+ 11507797043360297800ull, 2854778452765640207ull}},
+{{11989763866371640689ull, 17135062203728177777ull,
+ 9773060285772984346ull, 3568473065957050259ull}},
+{{1152146777682387150ull, 12195455717805446414ull,
+ 7604639338788842529ull, 4460591332446312824ull}},
+{{14555149791333655681ull, 704630795987322152ull,
+ 4752899586743026581ull, 2787869582778945515ull}},
+{{18193937239167069601ull, 5492474513411540594ull,
+ 1329438465001395322ull, 3484836978473681894ull}},
+{{13519049512104061193ull, 16088965178619201551ull,
+ 10885170118106519960ull, 4356046223092102367ull}},
+{{15366934972706120102ull, 10055603236637000969ull,
+ 13720760351457656831ull, 2722528889432563979ull}},
+{{5373610660600486415ull, 7957818027368863308ull,
+ 12539264420894683135ull, 3403161111790704974ull}},
+{{6717013325750608019ull, 5335586515783691231ull,
+ 6450708489263578111ull, 4253951389738381218ull}},
+{{11115662356235211868ull, 10252270600005888875ull,
+ 8643378824217124223ull, 2658719618586488261ull}},
+{{9282891926866626931ull, 8203652231579973190ull,
+ 15415909548698793183ull, 3323399523233110326ull}},
+{{2380242871728507855ull, 5642879271047578584ull,
+ 10046514899018715671ull, 4154249404041387908ull}},
+{{1487651794830317410ull, 10444328572045818471ull,
+ 15502443848741473102ull, 2596405877525867442ull}},
+{{15694622798820060474ull, 3832038678202497280ull,
+ 10154682774072065570ull, 3245507346907334303ull}},
+{{1171534424815523976ull, 14013420384607897409ull,
+ 8081667449162694058ull, 4056884183634167879ull}},
+{{12261424061578172245ull, 13370073758807323784ull,
+ 11968571183367765642ull, 2535552614771354924ull}},
+{{15326780076972715307ull, 7489220161654378922ull,
+ 14960713979209707053ull, 3169440768464193655ull}},
+{{9935103059361118325ull, 13973211220495361557ull,
+ 14089206455584745912ull, 3961800960580242069ull}},
+{{8515282421314392905ull, 8733257012809600973ull,
+ 11111597043954160147ull, 2476125600362651293ull}},
+{{15255789045070379036ull, 6304885247584613312ull, 54438249660536472ull,
+ 3095157000453314117ull}},
+{{622992232628422178ull, 7881106559480766641ull, 4679733830503058494ull,
+ 3868946250566642646ull}},
+{{11918585191461233622ull, 314005581248091246ull,
+ 16759891699346575271ull, 2418091406604151653ull}},
+{{5674859452471766219ull, 14227565031842277770ull,
+ 7114806568901055376ull, 3022614258255189567ull}},
+{{16316946352444483582ull, 17784456289802847212ull,
+ 4281822192698931316ull, 3778267822818986959ull}},
+{{974719433423026431ull, 1891913144272003700ull, 9593667898077913929ull,
+ 2361417389261866849ull}},
+{{1218399291778783038ull, 6976577448767392529ull,
+ 16603770891024780315ull, 2951771736577333561ull}},
+{{6134685133150866702ull, 4109035792531852757ull,
+ 6919655558498811682ull, 3689714670721666952ull}},
+{{6140021217432985641ull, 7179833388759795877ull,
+ 4324784724061757301ull, 2306071669201041845ull}},
+{{12286712540218619955ull, 13586477754377132750ull,
+ 10017666923504584530ull, 2882589586501302306ull}},
+{{6135018638418499135ull, 7759725156116640130ull,
+ 3298711617525954855ull, 3603236983126627883ull}},
+{{16892145334877899727ull, 5087970426718412258ull,
+ 17958447577189607281ull, 4504046228908284853ull}},
+{{15169276852726075234ull, 14709196562767477421ull,
+ 13529872744957198502ull, 2815028893067678033ull}},
+{{5126538010625430330ull, 9163123666604570969ull,
+ 3077282875914334416ull, 3518786116334597542ull}},
+{{11019858531709175816ull, 11453904583255713711ull,
+ 13069975631747693828ull, 4398482645418246927ull}},
+{{13804940609959316741ull, 16382062401389596877ull,
+ 15086263797483390498ull, 2749051653386404329ull}},
+{{3421117707166982215ull, 11254205964882220289ull,
+ 5022771691572074411ull, 3436314566733005412ull}},
+{{8888083152386115672ull, 9456071437675387457ull,
+ 6278464614465093014ull, 4295393208416256765ull}},
+{{17084267016309792055ull, 1298358630119729256ull,
+ 6229883393254377086ull, 2684620755260160478ull}},
+{{2908589696677688453ull, 10846320324504437379ull,
+ 17010726278422747165ull, 3355775944075200597ull}},
+{{17470795176129274278ull, 18169586424057934627ull,
+ 7428349792746270244ull, 4194719930094000747ull}},
+{{8613403975867102472ull, 2132619478181433334ull,
+ 2336875611252724951ull, 2621699956308750467ull}},
+{{1543382932979102282ull, 16500832403008955380ull,
+ 16756152569348069900ull, 3277124945385938083ull}},
+{{1929228666223877852ull, 2179296430051642609ull,
+ 16333504693257699472ull, 4096406181732422604ull}},
+{{12734982962458393418ull, 1362060268782276630ull,
+ 985068396431286362ull, 2560253863582764128ull}},
+{{6695356666218215964ull, 10925947372832621596ull,
+ 1231335495539107952ull, 3200317329478455160ull}},
+{{8369195832772769955ull, 13657434216040776995ull,
+ 1539169369423884940ull, 4000396661848068950ull}},
+{{2924904386269287270ull, 17759268421880261430ull,
+ 14797038911172091799ull, 2500247913655043093ull}},
+{{12879502519691384895ull, 17587399508922938883ull,
+ 4661240583682951037ull, 3125309892068803867ull}},
+{{11487692131186843215ull, 8149191330871509892ull,
+ 1214864711176300893ull, 3906637365086004834ull}},
+{{16403179618846552818ull, 7399087591008387634ull,
+ 5370976462912575962ull, 2441648353178753021ull}},
+{{11280602486703415214ull, 25487451905708735ull,
+ 11325406597068107857ull, 3052060441473441276ull}},
+{{9489067089951881113ull, 4643545333309523823ull,
+ 14156758246335134821ull, 3815075551841801595ull}},
+{{12848195958861007552ull, 5208058842532146341ull,
+ 6542130894745765311ull, 2384422219901125997ull}},
+{{2225186893294095728ull, 1898387534737795023ull,
+ 12789349636859594543ull, 2980527774876407496ull}},
+{{16616541671899783372ull, 16208042473704407490ull,
+ 15986687046074493178ull, 3725659718595509370ull}},
+{{14997024563364752511ull, 14741712564492642585ull,
+ 14603365422223946140ull, 2328537324122193356ull}},
+{{4911222648923776927ull, 18427140705615803232ull,
+ 18254206777779932675ull, 2910671655152741695ull}},
+{{6139028311154721159ull, 18422239863592366136ull,
+ 18206072453797527940ull, 3638339568940927119ull}},
+{{7673785388943401449ull, 4581055755780906054ull,
+ 18145904548819522022ull, 4547924461176158899ull}},
+{{184429849662238002ull, 16698217902645229996ull,
+ 9035347333798507311ull, 2842452788235099312ull}},
+{{230537312077797502ull, 16261086359879149591ull,
+ 11294184167248134139ull, 3553065985293874140ull}},
+{{14123229695379410589ull, 15714671931421549084ull,
+ 14117730209060167674ull, 4441332481617342675ull}},
+{{18050390596466907426ull, 14433355975565856081ull,
+ 6517738371448910844ull, 2775832801010839172ull}},
+{{8727930190301470571ull, 18041694969457320102ull,
+ 8147172964311138555ull, 3469791001263548965ull}},
+{{1686540701022062405ull, 17940432693394262224ull,
+ 14795652223816311098ull, 4337238751579436206ull}},
+{{1054087938138789004ull, 15824456451798801794ull,
+ 4635596621457806532ull, 2710774219737147629ull}},
+{{10540981959528262062ull, 1333826491038950626ull,
+ 10406181795249646070ull, 3388467774671434536ull}},
+{{3952855412555551770ull, 10890655150653464091ull,
+ 13007727244062057587ull, 4235584718339293170ull}},
+{{164691623633525904ull, 4500816459944721105ull,
+ 12741515545966173896ull, 2647240448962058231ull}},
+{{4817550547969295284ull, 5626020574930901381ull,
+ 11315208414030329466ull, 3309050561202572789ull}},
+{{10633624203389007009ull, 16255897755518402534ull,
+ 308952462255748120ull, 4136313201503215987ull}},
+{{2034329108690741477ull, 10159936097199001584ull,
+ 16333996353405700239ull, 2585195750939509991ull}},
+{{2542911385863426846ull, 8088234103071364076ull,
+ 15805809423329737395ull, 3231494688674387489ull}},
+{{3178639232329283557ull, 5498606610411817191ull,
+ 5922203723880008032ull, 4039368360842984362ull}},
+{{8904178547846884080ull, 3436629131507385744ull,
+ 8313063345852392924ull, 2524605225526865226ull}},
+{{11130223184808605099ull, 4295786414384232180ull,
+ 1167957145460715347ull, 3155756531908581533ull}},
+{{13912778981010756374ull, 758046999552902321ull,
+ 6071632450253282088ull, 3944695664885726916ull}},
+{{1777957835490640878ull, 473779374720563951ull,
+ 13018142318263077113ull, 2465434790553579322ull}},
+{{16057505349645464809ull, 5203910236828092842ull,
+ 7049305860974070583ull, 3081793488191974153ull}},
+{{10848509650202055204ull, 1893201777607728149ull,
+ 13423318344644976133ull, 3852241860239967691ull}},
+{{9086161540589978454ull, 3489094120218524045ull,
+ 6083730956189416131ull, 2407651162649979807ull}},
+{{15969387944164860972ull, 18196425705555318768ull,
+ 2992977676809382259ull, 3009563953312474759ull}},
+{{1514990856496524599ull, 18133846113516760557ull,
+ 17576280151293891536ull, 3761954941640593448ull}},
+{{3252712294524021826ull, 11333653820947975348ull,
+ 10985175094558682210ull, 2351221838525370905ull}},
+{{4065890368155027283ull, 4943695239330193377ull,
+ 18343154886625740667ull, 2939027298156713631ull}},
+{{9694048978621172007ull, 1567933030735353817ull,
+ 18317257589854787930ull, 3673784122695892039ull}},
+{{16729247241703852913ull, 11183288325273968079ull,
+ 18284885968891097008ull, 4592230153369865049ull}},
+{{17373308553705989927ull, 6989555203296230049ull,
+ 4510524702915853774ull, 2870143845856165656ull}},
+{{7881577636850323697ull, 17960316040975063370ull,
+ 5638155878644817217ull, 3587679807320207070ull}},
+{{628600009208128813ull, 8615336995936665501ull,
+ 16271066885160797330ull, 4484599759150258837ull}},
+{{2698718014968774460ull, 9996271640887803842ull,
+ 12475259812439192283ull, 2802874849468911773ull}},
+{{12596769555565743883ull, 7883653532682366898ull,
+ 1759016710266826642ull, 3503593561836139717ull}},
+{{6522589907602404046ull, 631194878998182815ull, 6810456906260921207ull,
+ 4379491952295174646ull}},
+{{10994147719892584385ull, 7312025827014946115ull,
+ 18091593621695239466ull, 2737182470184484153ull}},
+{{9130998631438342577ull, 18363404320623458452ull,
+ 8779433971836885620ull, 3421478087730605192ull}},
+{{11413748289297928221ull, 4507511327069771449ull,
+ 10974292464796107026ull, 4276847609663256490ull}},
+{{216063653170123282ull, 7428880597845995060ull,
+ 11470618808924954795ull, 2673029756039535306ull}},
+{{270079566462654103ull, 4674414728880105921ull, 5114901474301417686ull,
+ 3341287195049419133ull}},
+{{4949285476505705532ull, 15066390447954908209ull,
+ 11005312861304160011ull, 4176608993811773916ull}},
+{{14622518468884535718ull, 7110651020758123678ull,
+ 16101692575169875815ull, 2610380621132358697ull}},
+{{9054776049250893839ull, 4276627757520266694ull,
+ 6292057663680181057ull, 3262975776415448372ull}},
+{{2095098024708841491ull, 9957470715327721272ull,
+ 7865072079600226321ull, 4078719720519310465ull}},
+{{1309436265443025932ull, 17752634243148295555ull,
+ 16444885095818611210ull, 2549199825324569040ull}},
+{{15471853387085946127ull, 12967420767080593635ull,
+ 2109362296063712397ull, 3186499781655711301ull}},
+{{14728130715430044754ull, 2374217903568578332ull,
+ 7248388888507028401ull, 3983124727069639126ull}},
+{{18428453733998553780ull, 13013101235798831217ull,
+ 18365301110599056462ull, 2489452954418524453ull}},
+{{9200509112216028512ull, 7043004507893763214ull,
+ 9121568332966656866ull, 3111816193023155567ull}},
+{{2277264353415259832ull, 18027127671721979826ull,
+ 6790274397780933178ull, 3889770241278944459ull}},
+{{6034976239311925299ull, 15878640813253625295ull,
+ 1938078489399389284ull, 2431106400799340287ull}},
+{{2932034280712518720ull, 1401556942857480003ull,
+ 16257656167031400318ull, 3038883000999175358ull}},
+{{17500100906172812112ull, 10975318215426625811ull,
+ 11098698171934474589ull, 3798603751248969198ull}},
+{{8631720057144313618ull, 9165416893855335084ull,
+ 2325000339031658714ull, 2374127344530605749ull}},
+{{10789650071430392023ull, 2233399080464393047ull,
+ 7517936442216961297ull, 2967659180663257186ull}},
+{{8875376570860602124ull, 7403434869007879213ull, 174048515916425813ull,
+ 3709573975829071483ull}},
+{{7852953366001570280ull, 6932989802343618460ull,
+ 16249681386943623797ull, 2318483734893169676ull}},
+{{9816191707501962850ull, 13277923271356910979ull,
+ 1865357659969978130ull, 2898104668616462096ull}},
+{{7658553615950065658ull, 7374032052341362916ull,
+ 2331697074962472663ull, 3622630835770577620ull}},
+{{9573192019937582072ull, 4605854046999315741ull,
+ 2914621343703090829ull, 4528288544713222025ull}},
+{{8289088021674682747ull, 5184501788588266290ull,
+ 13350853385882901528ull, 2830180340445763765ull}},
+{{1137987990238577626ull, 6480627235735332863ull,
+ 2853508677071463198ull, 3537725425557204707ull}},
+{{15257543043080385744ull, 17324156081523941886ull,
+ 17401943901621492709ull, 4422156781946505883ull}},
+{{4924278383497853186ull, 13133440560166157631ull,
+ 8570371929299738991ull, 2763847988716566177ull}},
+{{1543661960944928579ull, 11805114681780309135ull,
+ 15324650930052061643ull, 3454809985895707721ull}},
+{{15764635506463324436ull, 10144707333797998514ull,
+ 5320755607282913342ull, 4318512482369634652ull}},
+{{14464583209966965676ull, 1728756065196361167ull,
+ 12548844291406596647ull, 2699070301481021657ull}},
+{{13469042994031319191ull, 15996003136777615171ull,
+ 1850997308976082096ull, 3373837876851277072ull}},
+{{12224617724111761085ull, 1548259847262467348ull,
+ 2313746636220102621ull, 4217297346064096340ull}},
+{{16863758114424626486ull, 3273505413752736044ull,
+ 10669463684492339946ull, 2635810841290060212ull}},
+{{2632953569321231492ull, 13315253804045695864ull,
+ 13336829605615424932ull, 3294763551612575265ull}},
+{{3291191961651539365ull, 16644067255057119830ull,
+ 2835978951737117453ull, 4118454439515719082ull}},
+{{15892053031314375815ull, 12708385043624393845ull,
+ 6384172863263086312ull, 2574034024697324426ull}},
+{{6030008233860806057ull, 15885481304530492307ull,
+ 17203588115933633698ull, 3217542530871655532ull}},
+{{2925824273898619667ull, 10633479593808339576ull,
+ 3057741071207490507ull, 4021928163589569416ull}},
+{{1828640171186637292ull, 4340081736916518283ull,
+ 1911088169504681567ull, 2513705102243480885ull}},
+{{16120858269265460327ull, 813416152718259949ull,
+ 7000546230308239863ull, 3142131377804351106ull}},
+{{6316014781299661696ull, 14851828246179988649ull,
+ 17974054824740075636ull, 3927664222255438882ull}},
+{{15476724284380758320ull, 59020617007717097ull,
+ 15845470283889935177ull, 2454790138909649301ull}},
+{{5510847300193784188ull, 4685461789687034276ull,
+ 5971779799580255259ull, 3068487673637061627ull}},
+{{6888559125242230235ull, 1245141218681404941ull,
+ 2853038731047931170ull, 3835609592046327034ull}},
+{{6611192462490087849ull, 5389899280103265992ull,
+ 6394835225332344885ull, 2397255995028954396ull}},
+{{8263990578112609812ull, 11349060118556470394ull,
+ 7993544031665431106ull, 2996569993786192995ull}},
+{{1106616185785986456ull, 4962953111340812185ull,
+ 5380244021154400979ull, 3745712492232741244ull}},
+{{12220850162184711295ull, 796002685374313663ull,
+ 12586024550076276420ull, 2341070307645463277ull}},
+{{10664376684303501215ull, 995003356717892079ull,
+ 1897472632313181813ull, 2926337884556829097ull}},
+{{8718784836951988615ull, 5855440214324753003ull,
+ 6983526808818865170ull, 3657922355696036371ull}},
+{{6286795027762597864ull, 16542672304760717062ull,
+ 4117722492596193558ull, 4572402944620045464ull}},
+{{17764304947633787377ull, 5727484172048060259ull,
+ 2573576557872620974ull, 2857751840387528415ull}},
+{{17593695166114846318ull, 16382727251914851132ull,
+ 17052028752622939929ull, 3572189800484410518ull}},
+{{3545374883934006281ull, 6643351009611400204ull,
+ 12091663903923899104ull, 4465237250605513148ull}},
+{{11439231339313529734ull, 4152094381007125127ull,
+ 16780661976807212748ull, 2790773281628445717ull}},
+{{9687353155714524263ull, 5190117976258906409ull,
+ 7140769415726852223ull, 3488466602035557147ull}},
+{{16720877463070543233ull, 1875961451896245107ull,
+ 4314275751231177375ull, 4360583252544446434ull}},
+{{8144705405205395569ull, 8090004935076235048ull,
+ 7308108362946873763ull, 2725364532840279021ull}},
+{{10180881756506744461ull, 5500820150417905906ull,
+ 13746821472110980108ull, 3406705666050348776ull}},
+{{3502730158778654768ull, 6876025188022382383ull,
+ 17183526840138725135ull, 4258382082562935970ull}},
+{{9106735376877741086ull, 11215044770155070845ull,
+ 15351390293514091113ull, 2661488801601834981ull}},
+{{15995105239524564261ull, 183747907411674844ull,
+ 5354179811610450180ull, 3326861002002293727ull}},
+{{1547137475696153711ull, 229684884264593556ull, 2081038746085674821ull,
+ 4158576252502867159ull}},
+{{10190332959164871877ull, 2449396061879064924ull,
+ 8218178243944628619ull, 2599110157814291974ull}},
+{{12737916198956089846ull, 16896803132630994867ull,
+ 1049350768076009965ull, 3248887697267864968ull}},
+{{11310709230267724404ull, 7285945860506579872ull,
+ 1311688460095012457ull, 4061109621584831210ull}},
+{{7069193268917327753ull, 16082931208885082180ull,
+ 5431491305986770689ull, 2538193513490519506ull}},
+{{8836491586146659691ull, 6268605955824189013ull,
+ 16012736169338239170ull, 3172741891863149382ull}},
+{{15657300501110712517ull, 17059129481635012074ull,
+ 10792548174818023154ull, 3965927364828936728ull}},
+{{14397498831621583227ull, 15273641944449270450ull,
+ 6745342609261264471ull, 2478704603018085455ull}},
+{{8773501502672203226ull, 14480366412134200159ull,
+ 3819992243149192685ull, 3098380753772606819ull}},
+{{6355190859912866129ull, 4265399959885586487ull, 163304285509102953ull,
+ 3872975942215758524ull}},
+{{10889523315086623187ull, 14195090020996961314ull,
+ 9325437215297965153ull, 2420609963884849077ull}},
+{{4388532107003503175ull, 3908804470964037931ull,
+ 16268482537549844346ull, 3025762454856061346ull}},
+{{873979115326991065ull, 14109377625559823222ull,
+ 11112231135082529624ull, 3782203068570076683ull}},
+{{14381295002361533128ull, 8818361015974889513ull,
+ 4639301450212887063ull, 2363876917856297927ull}},
+{{4141560697669752697ull, 6411265251541223988ull,
+ 1187440794338720925ull, 2954846147320372409ull}},
+{{5176950872087190872ull, 12625767582853917889ull,
+ 6095987011350789060ull, 3693557684150465511ull}},
+{{14764809341122964055ull, 17114476776138474488ull,
+ 10727520909735325018ull, 2308473552594040944ull}},
+{{9267602694153453ull, 12169723933318317303ull, 13409401137169156273ull,
+ 2885591940742551180ull}},
+{{13846642558649855528ull, 1377096861365732916ull,
+ 16761751421461445342ull, 3606989925928188975ull}},
+{{17308303198312319409ull, 10944743113561941953ull,
+ 16340503258399418773ull, 4508737407410236219ull}},
+{{3900160471304117775ull, 9146307455189907673ull,
+ 7906971527285942781ull, 2817960879631397637ull}},
+{{9486886607557535123ull, 16044570337414772495ull,
+ 14495400427534816380ull, 3522451099539247046ull}},
+{{7246922241019530999ull, 1608968848058914003ull,
+ 8895878497563744668ull, 4403063874424058808ull}},
+{{2223483391423512923ull, 10228977566891597060ull,
+ 5559924060977340417ull, 2751914921515036755ull}},
+{{2779354239279391153ull, 17397907977041884229ull,
+ 2338219057794287617ull, 3439893651893795944ull}},
+{{8085878817526626846ull, 7912326916020191574ull,
+ 2922773822242859522ull, 4299867064867244930ull}},
+{{441988242526753875ull, 9556890340940007638ull, 6438419657329175105ull,
+ 2687416915542028081ull}},
+{{9775857340013218151ull, 16557798944602397451ull,
+ 12659710590088856785ull, 3359271144427535101ull}},
+{{7608135656589134785ull, 6862190625470833102ull,
+ 1989580182328907270ull, 4199088930534418877ull}},
+{{143398766940821337ull, 18123927196201434401ull,
+ 3549330623169260995ull, 2624430581584011798ull}},
+{{4790934477103414575ull, 18043222976824405097ull,
+ 13660035315816352052ull, 3280538226980014747ull}},
+{{10600354114806656122ull, 4107284647320954755ull,
+ 12463358126343052162ull, 4100672783725018434ull}},
+{{4319378312540466125ull, 7178738923002984626ull,
+ 12401284847391795505ull, 2562920489828136521ull}},
+{{14622594927530358464ull, 13585109672181118686ull,
+ 1666548003957580669ull, 3203650612285170652ull}},
+{{9054871622558172271ull, 3146329034944234646ull,
+ 2083185004946975837ull, 4004563265356463315ull}},
+{{1047608745671469766ull, 4272298656053840606ull,
+ 17442891692587717562ull, 2502852040847789571ull}},
+{{10532882968944113015ull, 14563745356922076565ull,
+ 17191928597307259048ull, 3128565051059736964ull}},
+{{17777789729607529173ull, 18204681696152595706ull,
+ 3043166672924522194ull, 3910706313824671206ull}},
+{{15722804599432093637ull, 15989612078522760220ull,
+ 15737037225859990083ull, 2444191446140419503ull}},
+{{1206761675580565430ull, 15375329079726062372ull,
+ 15059610513897599700ull, 3055239307675524379ull}},
+{{1508452094475706788ull, 772417275948026349ull,
+ 14212827123944611722ull, 3819049134594405474ull}},
+{{3248625568261010695ull, 5094446815894904372ull,
+ 13494702970892770230ull, 2386905709121503421ull}},
+{{4060781960326263368ull, 15591430556723406273ull,
+ 3033320658333799075ull, 2983632136401879277ull}},
+{{9687663468835217114ull, 14877602177476869937ull,
+ 8403336841344636748ull, 3729540170502349096ull}},
+{{17584004714090480456ull, 75129324068267902ull, 5252085525840397968ull,
+ 2330962606563968185ull}},
+{{12756633855758324762ull, 93911655085334878ull,
+ 11176792925727885364ull, 2913703258204960231ull}},
+{{6722420282843130145ull, 117389568856668598ull, 9359305138732468801ull,
+ 3642129072756200289ull}},
+{{17626397390408688489ull, 4758422979498223651ull,
+ 16310817441842973905ull, 4552661340945250361ull}},
+{{8710655359791736354ull, 14503229408254859542ull,
+ 3276731873510776834ull, 2845413338090781476ull}},
+{{1664947162884894634ull, 8905664723463798620ull,
+ 4095914841888471043ull, 3556766672613476845ull}},
+{{2081183953606118293ull, 6520394885902360371ull,
+ 9731579570787976708ull, 4445958340766846056ull}},
+{{17441641035499681597ull, 13298618840543751039ull,
+ 6082237231742485442ull, 2778723962979278785ull}},
+{{17190365275947214092ull, 7399901513824912991ull,
+ 12214482558105494707ull, 3473404953724098481ull}},
+{{16876270576506629711ull, 4638190873853753335ull,
+ 1433045142349704672ull, 4341756192155123102ull}},
+{{17465198137957725426ull, 2898869296158595834ull,
+ 14730711269250729132ull, 2713597620096951938ull}},
+{{12608125635592380974ull, 3623586620198244793ull,
+ 9190017049708635607ull, 3391997025121189923ull}},
+{{1925098989208312505ull, 18364541330529969704ull,
+ 6875835293708406604ull, 4239996281401487404ull}},
+{{1203186868255195316ull, 2254466294726455257ull,
+ 13520769095422529936ull, 2649997675875929627ull}},
+{{6115669603746382049ull, 2818082868408069071ull,
+ 12289275350850774516ull, 3312497094844912034ull}},
+{{3032900986255589657ull, 3522603585510086339ull,
+ 6138222151708692337ull, 4140621368556140043ull}},
+{{18036464180905601200ull, 13730842287012273721ull,
+ 1530545835604238758ull, 2587888355347587527ull}},
+{{8710522170849837788ull, 7940180821910566344ull,
+ 15748240349787462160ull, 3234860444184484408ull}},
+{{10888152713562297234ull, 9925226027388207930ull,
+ 1238556363524776084ull, 4043575555230605511ull}},
+{{11416781464403823676ull, 15426638303972405764ull,
+ 7691626754844066908ull, 2527234722019128444ull}},
+{{14270976830504779595ull, 836553806255955589ull,
+ 9614533443555083636ull, 3159043402523910555ull}},
+{{4003662982848810781ull, 1045692257819944487ull,
+ 7406480786016466641ull, 3948804253154888194ull}},
+{{9419818391921588594ull, 12182772707205935064ull,
+ 9240736509687679554ull, 2468002658221805121ull}},
+{{11774772989901985743ull, 6005093847152643022ull,
+ 16162606655536987347ull, 3085003322777256401ull}},
+{{5495094200522706370ull, 2894681290513415874ull,
+ 6368200264139070472ull, 3856254153471570502ull}},
+{{8046119893754079386ull, 1809175806570884921ull,
+ 17815183220369082757ull, 2410158845919731563ull}},
+{{14669335885619987136ull, 6873155776640994055ull,
+ 17657293007033965542ull, 3012698557399664454ull}},
+{{13724983838597596016ull, 17814816757656018377ull,
+ 12848244221937681119ull, 3765873196749580568ull}},
+{{1660585871482415654ull, 18051789501176093342ull,
+ 8030152638711050699ull, 2353670747968487855ull}},
+{{11299104376207795375ull, 17953050858042728773ull,
+ 5426004779961425470ull, 2942088434960609819ull}},
+{{288822414977580507ull, 13217941535698635159ull,
+ 2170819956524393934ull, 3677610543700762274ull}},
+{{14196086074004139346ull, 7299054882768518140ull,
+ 11936896982510268226ull, 4597013179625952842ull}},
+{{18095925833107362899ull, 9173595320157711741ull,
+ 12072246632496305545ull, 2873133237266220526ull}},
+{{8784849236102039912ull, 16078680168624527581ull,
+ 5866936253765606123ull, 3591416546582775658ull}},
+{{15592747563554937794ull, 15486664192353271572ull,
+ 16557042354061783462ull, 4489270683228469572ull}},
+{{522095190367060313ull, 5067479101793406829ull, 1124779434433838856ull,
+ 2805794177017793483ull}},
+{{5264305006386213296ull, 6334348877241758536ull,
+ 15241032348324462282ull, 3507242721272241853ull}},
+{{6580381257982766619ull, 17141308133406973978ull,
+ 5216232380123414140ull, 4384053401590302317ull}},
+{{8724424304666617041ull, 1489945546524582928ull,
+ 5565988246790827790ull, 2740033375993938948ull}},
+{{10905530380833271302ull, 11085803970010504468ull,
+ 6957485308488534737ull, 3425041719992423685ull}},
+{{13631912976041589127ull, 22196907230966873ull,
+ 13308542654038056326ull, 4281302149990529606ull}},
+{{1602416582384911348ull, 13848931122301518008ull,
+ 3706153140346397299ull, 2675813843744081004ull}},
+{{2003020727981139185ull, 12699477884449509606ull,
+ 4632691425432996624ull, 3344767304680101255ull}},
+{{11727147946831199790ull, 15874347355561887007ull,
+ 1179178263363857876ull, 4180959130850126569ull}},
+{{14246996494410581725ull, 698095060371403571ull,
+ 12266201460670880933ull, 2613099456781329105ull}},
+{{13197059599585839252ull, 5484304843891642368ull,
+ 1497693770556437454ull, 3266374320976661382ull}},
+{{16496324499482299065ull, 16078753091719328768ull,
+ 11095489250050322625ull, 4082967901220826727ull}},
+{{10310202812176436916ull, 3131691654683498624ull,
+ 13852209808922533497ull, 2551854938263016704ull}},
+{{12887753515220546144ull, 8526300586781761184ull,
+ 17315262261153166871ull, 3189818672828770880ull}},
+{{16109691894025682680ull, 6046189715049813576ull,
+ 3197333752731906973ull, 3987273341035963601ull}},
+{{10068557433766051675ull, 6084711581119827437ull,
+ 13527548641525911618ull, 2492045838147477250ull}},
+{{17197382810634952498ull, 16829261513254560104ull,
+ 7686063765052613714ull, 3115057297684346563ull}},
+{{3049984439584139006ull, 11813204854713424323ull,
+ 4995893687888379239ull, 3893821622105433204ull}},
+{{18047141339235944543ull, 14300782061836972057ull,
+ 12345805591785012832ull, 2433638513815895752ull}},
+{{8723868618762766967ull, 17875977577296215072ull,
+ 15432256989731266040ull, 3042048142269869690ull}},
+{{10904835773453458709ull, 3898227897910717224ull,
+ 10066949200309306743ull, 3802560177837337113ull}},
+{{6815522358408411693ull, 9353921463835280121ull,
+ 17821058296261786474ull, 2376600111148335695ull}},
+{{13131088966437902520ull, 2469029792939324343ull,
+ 17664636851899845189ull, 2970750138935419619ull}},
+{{11802175189619990246ull, 7697973259601543333ull,
+ 17469110046447418582ull, 3713437673669274524ull}},
+{{9682202502726187856ull, 199547268823576679ull, 1694821742174860806ull,
+ 2320898546043296578ull}},
+{{7491067109980346916ull, 9472806122884246657ull,
+ 11341899214573351815ull, 2901123182554120722ull}},
+{{13975519905902821549ull, 7229321635177920417ull,
+ 4954001981361913961ull, 3626403978192650903ull}},
+{{3634341827096363224ull, 13648338062399788426ull,
+ 1580816458275004547ull, 4533004972740813629ull}},
+{{6883149660362614919ull, 6224368279786173814ull,
+ 3293853295635571794ull, 2833128107963008518ull}},
+{{17827309112308044457ull, 17003832386587493075ull,
+ 13340688656399240550ull, 3541410134953760647ull}},
+{{17672450371957667667ull, 12031418446379590536ull,
+ 12064174802071662784ull, 4426762668692200809ull}},
+{{11045281482473542292ull, 7519636528987244085ull,
+ 622580223653707384ull, 2766726667932625506ull}},
+{{18418287871519315769ull, 9399545661234055106ull,
+ 10001597316421910038ull, 3458408334915781882ull}},
+{{13799487802544368903ull, 2526060039687793075ull,
+ 3278624608672611740ull, 4323010418644727353ull}},
+{{6318836867376536612ull, 10802159561659646480ull,
+ 13578355426488852097ull, 2701881511652954595ull}},
+{{7898546084220670765ull, 18114385470501946004ull,
+ 12361258264683677217ull, 3377351889566193244ull}},
+{{9873182605275838457ull, 8807923782845268793ull,
+ 15451572830854596522ull, 4221689861957741555ull}},
+{{17699954174365868796ull, 10116638382705680899ull,
+ 7351390010070428874ull, 2638556163723588472ull}},
+{{17513256699529948090ull, 3422425941527325316ull,
+ 9189237512588036093ull, 3298195204654485590ull}},
+{{3444826800702883497ull, 8889718445336544550ull,
+ 2263174853880269308ull, 4122744005818106988ull}},
+{{15988074805721465898ull, 14779446065190116151ull,
+ 10637856320529944125ull, 2576715003636316867ull}},
+{{15373407488724444468ull, 4639249526205481477ull,
+ 8685634382235042253ull, 3220893754545396084ull}},
+{{5381701305623391873ull, 10410747926184239751ull,
+ 10857042977793802816ull, 4026117193181745105ull}},
+{{10281092343655701777ull, 6506717453865149844ull,
+ 18314866907189596520ull, 2516323245738590690ull}},
+{{12851365429569627221ull, 8133396817331437305ull,
+ 13670211597132219842ull, 3145404057173238363ull}},
+{{2229148731679870314ull, 943373984809520824ull,
+ 12476078477987886899ull, 3931755071466547954ull}},
+{{1393217957299918946ull, 16730509805001808179ull,
+ 12409235067169817215ull, 2457346919666592471ull}},
+{{15576580501907062395ull, 16301451237824872319ull,
+ 10899857815534883615ull, 3071683649583240589ull}},
+{{14859039608956440089ull, 15765128028853702495ull,
+ 18236508287845992423ull, 3839604561979050736ull}},
+{{16204428783238856912ull, 16770734045674645915ull,
+ 11397817679903745264ull, 2399752851236906710ull}},
+{{15643849960621183236ull, 2516673483383755778ull,
+ 5023900063024905773ull, 2999691064046133388ull}},
+{{10331440413921703237ull, 7757527872657082627ull,
+ 6279875078781132216ull, 3749613830057666735ull}},
+{{4151307249487370571ull, 4848454920410676642ull,
+ 10842450951879289491ull, 2343508643786041709ull}},
+{{14412506098713989022ull, 1448882632085957898ull,
+ 18164749708276499768ull, 2929385804732552136ull}},
+{{8792260586537710469ull, 1811103290107447373ull,
+ 4259193061636073094ull, 3661732255915690171ull}},
+{{15602011751599525990ull, 11487251149489085024ull,
+ 712305308617703463ull, 4577165319894612714ull}},
+{{9751257344749703744ull, 14097060996071759996ull,
+ 5056876836313452568ull, 2860728324934132946ull}},
+{{12189071680937129680ull, 17621326245089699995ull,
+ 15544468082246591518ull, 3575910406167666182ull}},
+{{10624653582744024196ull, 12803285769507349186ull,
+ 10207213065953463590ull, 4469888007709582728ull}},
+{{11252094507642403027ull, 3390367587514705337ull,
+ 6379508166220914744ull, 2793680004818489205ull}},
+{{230060079270840071ull, 4237959484393381672ull,
+ 12586071226203531334ull, 3492100006023111506ull}},
+{{287575099088550089ull, 14520821392346502898ull,
+ 6509216995899638359ull, 4365125007528889383ull}},
+{{4791420455357731710ull, 15993042397857646167ull,
+ 10985789650078355830ull, 2728203129705555864ull}},
+{{1377589550769776733ull, 10767930960467281901ull,
+ 13732237062597944788ull, 3410253912131944830ull}},
+{{6333672956889608820ull, 13459913700584102376ull,
+ 7941924291392655177ull, 4262817390164931038ull}},
+{{3958545598056005513ull, 1494917035223982129ull, 352016663693021582ull,
+ 2664260868853081899ull}},
+{{9559868015997394795ull, 11092018330884753469ull,
+ 14275078884898440689ull, 3330326086066352373ull}},
+{{16561521038424131397ull, 29964858323778124ull, 4008790550840887150ull,
+ 4162907607582940467ull}},
+{{1127578612160306316ull, 13853786091734525040ull,
+ 199651085061860516ull, 2601817254739337792ull}},
+{{1409473265200382894ull, 17317232614668156300ull,
+ 249563856327325645ull, 3252271568424172240ull}},
+{{1761841581500478618ull, 7811482713053031663ull, 311954820409157057ull,
+ 4065339460530215300ull}},
+{{8018680016078880992ull, 16411391741726614549ull,
+ 9418343799610498968ull, 2540837162831384562ull}},
+{{14635036038525989144ull, 2067495603448716570ull,
+ 2549557712658347903ull, 3176046453539230703ull}},
+{{9070423011302710622ull, 16419427559593059425ull,
+ 17022005196105098590ull, 3970058066924038378ull}},
+{{17198229428132663899ull, 5650456206318274236ull,
+ 15250439265993074523ull, 2481286291827523986ull}},
+{{3051042711456278258ull, 2451384239470454892ull,
+ 9839677045636567346ull, 3101607864784404983ull}},
+{{3813803389320347822ull, 12287602336192844423ull,
+ 7687910288618321278ull, 3877009830980506229ull}},
+{{9301156145966299245ull, 3068065441693139860ull,
+ 7110786939600144751ull, 2423131144362816393ull}},
+{{11626445182457874056ull, 17670139857398588537ull,
+ 13500169692927568842ull, 3028913930453520491ull}},
+{{697998422790178858ull, 12864302784893459864ull,
+ 12263526097732073149ull, 3786142413066900614ull}},
+{{436249014243861786ull, 10346032249772106367ull,
+ 3053017792655157814ull, 2366339008166812884ull}},
+{{14380369323086990945ull, 3709168275360357150ull,
+ 3816272240818947268ull, 2957923760208516105ull}},
+{{8752089617003962873ull, 4636460344200446438ull,
+ 9382026319451071989ull, 3697404700260645131ull}},
+{{858369992200088892ull, 5203630724338972976ull, 3557923440443226041ull,
+ 2310877937662903207ull}},
+{{1072962490250111115ull, 11116224423851104124ull,
+ 18282462355836196263ull, 2888597422078629008ull}},
+{{1341203112812638893ull, 9283594511386492251ull,
+ 4406333871085693713ull, 3610746777598286261ull}},
+{{15511561946297962328ull, 16216179157660503217ull,
+ 10119603357284505045ull, 4513433471997857826ull}},
+{{2777197188795144599ull, 12440954982751508463ull,
+ 10936438116730203557ull, 2820895919998661141ull}},
+{{17306554541276094461ull, 1716135673157221866ull,
+ 18282233664340142351ull, 3526119899998326426ull}},
+{{12409821139740342268ull, 15980227646728691045ull,
+ 13629420043570402130ull, 4407649874997908033ull}},
+{{10061981221551407870ull, 14599328297632819807ull,
+ 1600858499590419475ull, 2754781171873692521ull}},
+{{7965790508511871933ull, 13637474353613636855ull,
+ 6612759142915412248ull, 3443476464842115651ull}},
+{{5345552117212452012ull, 17046842942017046069ull,
+ 3654262910216877406ull, 4304345581052644564ull}},
+{{5646813082471476460ull, 6042590820333265889ull,
+ 11507286355740324187ull, 2690215988157902852ull}},
+{{11670202371516733479ull, 2941552506989194457ull,
+ 14384107944675405234ull, 3362769985197378565ull}},
+{{752694909113753136ull, 12900312670591268880ull,
+ 4145076875562092830ull, 4203462481496723207ull}},
+{{470434318196095710ull, 3451009400692155146ull, 9508202074867389875ull,
+ 2627164050935452004ull}},
+{{9811414934599895446ull, 18148819806147357644ull,
+ 11885252593584237343ull, 3283955063669315005ull}},
+{{12264268668249869307ull, 18074338739256809151ull,
+ 1021507686698132967ull, 4104943829586643757ull}},
+{{14582696945297250173ull, 18213990739676587575ull,
+ 2944285313400027056ull, 2565589893491652348ull}},
+{{13616685163194174812ull, 4320744350886182853ull,
+ 3680356641750033821ull, 3206987366864565435ull}},
+{{3185798398710554803ull, 10012616457035116471ull,
+ 18435503857469705988ull, 4008734208580706793ull}},
+{{8908653026835178608ull, 15481257322501723602ull,
+ 4604660883277484386ull, 2505458880362941746ull}},
+{{1912444246689197452ull, 10128199616272378695ull,
+ 14979198140951631291ull, 3131823600453677182ull}},
+{{16225613363643660527ull, 8048563501913085464ull,
+ 9500625639334763306ull, 3914779500567096478ull}},
+{{10141008352277287830ull, 9642038207123066319ull,
+ 1326205006156839162ull, 2446737187854435299ull}},
+{{8064574421919221883ull, 2829175722049057091ull,
+ 15492814312978212665ull, 3058421484818044123ull}},
+{{5469032008971639450ull, 8148155670988709268ull,
+ 14754331872795377927ull, 3823026856022555154ull}},
+{{12641517042462050464ull, 12010126322009025148ull,
+ 13833143438924499108ull, 2389391785014096971ull}},
+{{15801896303077563080ull, 15012657902511281435ull,
+ 12679743280228235981ull, 2986739731267621214ull}},
+{{15140684360419565946ull, 4930764322856938082ull,
+ 6626307063430519169ull, 3733424664084526518ull}},
+{{14074613743689616620ull, 14610942747854056061ull,
+ 17976499969926238192ull, 2333390415052829073ull}},
+{{3758209124329857063ull, 18263678434817570077ull,
+ 8635566907125634028ull, 2916738018816036342ull}},
+{{9309447423839709233ull, 4382853969812410980ull,
+ 1571086597052266728ull, 3645922523520045428ull}},
+{{11636809279799636541ull, 5478567462265513725ull,
+ 1963858246315333410ull, 4557403154400056785ull}},
+{{9578848809088466791ull, 8035790682343333982ull,
+ 12756626450015553141ull, 2848376971500035490ull}},
+{{2750188974505807680ull, 14656424371356555382ull,
+ 6722411025664665618ull, 3560471214375044363ull}},
+{{12661108254987035408ull, 9097158427340918419ull,
+ 3791327763653444119ull, 4450589017968805454ull}},
+{{5607349650153203178ull, 12603253044729155868ull,
+ 16204637907565566286ull, 2781618136230503408ull}},
+{{7009187062691503973ull, 6530694269056669027ull,
+ 1809053310747406242ull, 3477022670288129261ull}},
+{{4149797809936992062ull, 17386739873175612092ull,
+ 6873002656861645706ull, 4346278337860161576ull}},
+{{11816995668065395847ull, 15478398439162145461ull,
+ 4295626660538528566ull, 2716423961162600985ull}},
+{{936186529799581096ull, 10124626012097906019ull,
+ 9981219344100548612ull, 3395529951453251231ull}},
+{{15005291217531640082ull, 12655782515122382523ull,
+ 7864838161698297861ull, 4244412439316564039ull}},
+{{7072464001743581099ull, 10215707081165183029ull,
+ 11833052878702518019ull, 2652757774572852524ull}},
+{{13452266020606864278ull, 8157947833029090882ull,
+ 14791316098378147524ull, 3315947218216065655ull}},
+{{7591960488903804540ull, 10197434791286363603ull,
+ 13877459104545296501ull, 4144934022770082069ull}},
+{{2439132296351183885ull, 8679239753767671204ull,
+ 10979254949554504265ull, 2590583764231301293ull}},
+{{3048915370438979857ull, 15460735710636976909ull,
+ 18335754705370518235ull, 3238229705289126616ull}},
+{{8422830231476112725ull, 14714233619868833232ull,
+ 4472949308003596178ull, 4047787131611408271ull}},
+{{5264268894672570453ull, 13808082030845408674ull,
+ 9713122345143329467ull, 2529866957257130169ull}},
+{{15803708155195488874ull, 12648416520129372938ull,
+ 16753088949856549738ull, 3162333696571412711ull}},
+{{10531263157139585285ull, 6587148613306940365ull,
+ 16329675168893299269ull, 3952917120714265889ull}},
+{{8887882482425934755ull, 6422810892530531680ull,
+ 3288517952917230187ull, 2470573200446416181ull}},
+{{11109853103032418444ull, 3416827597235776696ull,
+ 8722333459573925638ull, 3088216500558020226ull}},
+{{13887316378790523055ull, 13494406533399496678ull,
+ 1679544787612631239ull, 3860270625697525283ull}},
+{{4067886718316689005ull, 15351533111015767280ull,
+ 17190616556753752188ull, 2412669141060953301ull}},
+{{5084858397895861257ull, 742672315060157484ull, 7653212640660026524ull,
+ 3015836426326191627ull}},
+{{6356072997369826571ull, 928340393825196855ull, 4954829782397645251ull,
+ 3769795532907739534ull}},
+{{10890074650997223463ull, 16721113810636605698ull,
+ 16931826669280691993ull, 2356122208067337208ull}},
+{{4389221276891753520ull, 7066334208013593411ull,
+ 2718039262891313376ull, 2945152760084171511ull}},
+{{874840577687303996ull, 8832917760016991764ull,
+ 17232607133896305432ull, 3681440950105214388ull}},
+{{1093550722109129995ull, 11041147200021239705ull,
+ 3094014843660830174ull, 4601801187631517986ull}},
+{{12212684247386676007ull, 2289030981585886911ull,
+ 6545445295715406763ull, 2876125742269698741ull}},
+{{10654169290805957105ull, 16696346782264522351ull,
+ 12793492638071646357ull, 3595157177837123426ull}},
+{{8706025595080058477ull, 7035375422548489227ull,
+ 6768493760734782139ull, 4493946472296404283ull}},
+{{3135422987711342596ull, 2091266629879111815ull,
+ 1924465591245544885ull, 2808716545185252677ull}},
+{{17754336789921341957ull, 7225769305776277672ull,
+ 7017268007484319010ull, 3510895681481565846ull}},
+{{3746176913692125831ull, 18255583669075122899ull,
+ 17994957046210174570ull, 4388619601851957307ull}},
+{{35517561843884692ull, 16021425811599339716ull, 8941005144667665154ull,
+ 2742887251157473317ull}},
+{{44396952304855865ull, 10803410227644398837ull,
+ 15787942449261969347ull, 3428609063946841646ull}},
+{{4667182208808457735ull, 8892576766128110642ull,
+ 10511556024722685876ull, 4285761329933552058ull}},
+{{7528674898932673989ull, 14781232515684844959ull,
+ 11181408533879066576ull, 2678600831208470036ull}},
+{{4799157605238454582ull, 29796570896504583ull, 13976760667348833221ull,
+ 3348251039010587545ull}},
+{{1387260988120680323ull, 4648931732048018633ull,
+ 3635892778903877814ull, 4185313798763234432ull}},
+{{12396253163643894962ull, 16740640387812175357ull,
+ 2272432986814923633ull, 2615821124227021520ull}},
+{{1660258399272704991ull, 7090742429483055485ull,
+ 2840541233518654542ull, 3269776405283776900ull}},
+{{6687009017518269142ull, 18086800073708595164ull,
+ 3550676541898318177ull, 4087220506604721125ull}},
+{{13402752672803694022ull, 4386721018426790121ull,
+ 4525015847900142813ull, 2554512816627950703ull}},
+{{2918382785722453815ull, 10095087291460875556ull,
+ 1044583791447790612ull, 3193141020784938379ull}},
+{{3647978482153067269ull, 12618859114326094445ull,
+ 15140787794591901977ull, 3991426275981172973ull}},
+{{4585829560559360995ull, 969257918812727172ull,
+ 11768835380833632688ull, 2494641422488233108ull}},
+{{5732286950699201244ull, 1211572398515908965ull,
+ 14711044226042040860ull, 3118301778110291385ull}},
+{{11777044706801389459ull, 1514465498144886206ull,
+ 4553747227270387363ull, 3897877222637864232ull}},
+{{2748966923323480508ull, 17087442000836411543ull,
+ 2846092017043992101ull, 2436173264148665145ull}},
+{{17271266709436514347ull, 7524244445763350716ull,
+ 8169301039732378031ull, 3045216580185831431ull}},
+{{3142339313086091318ull, 4793619538776800492ull,
+ 5599940281238084635ull, 3806520725232289289ull}},
+{{11187334107533582882ull, 690169202521806355ull,
+ 15029177721842272657ull, 2379075453270180805ull}},
+{{9372481615989590698ull, 5474397521579645848ull,
+ 4951414097020677109ull, 2973844316587726007ull}},
+{{11715602019986988372ull, 11454682920401945214ull,
+ 1577581602848458482ull, 3717305395734657509ull}},
+{{2710565244064479829ull, 11770862843678603663ull,
+ 3291831510993980503ull, 2323315872334160943ull}},
+{{17223264610362763498ull, 10101892536170866674ull,
+ 17949847444024639341ull, 2904144840417701178ull}},
+{{12305708726098678564ull, 17239051688640971247ull,
+ 13213937268176023368ull, 3630181050522126473ull}},
+{{10770449889195960301ull, 3102070537091662443ull,
+ 2682363529937865499ull, 4537726313152658092ull}},
+{{4425688171533781237ull, 18079695150178146691ull,
+ 10899849243065941744ull, 2836078945720411307ull}},
+{{920424195989838642ull, 4152874864013131748ull, 9013125535405039277ull,
+ 3545098682150514134ull}},
+{{1150530244987298302ull, 9802779598443802589ull,
+ 2043034882401523288ull, 4431373352688142668ull}},
+{{3024924412330755391ull, 6126737249027376618ull,
+ 10500268838355727863ull, 2769608345430089167ull}},
+{{13004527552268220046ull, 3046735542856832868ull,
+ 8513650029517271925ull, 3462010431787611459ull}},
+{{16255659440335275058ull, 8420105446998428989ull,
+ 6030376518469202002ull, 4327513039734514324ull}},
+{{12465630159423240863ull, 9874251922801406022ull,
+ 12992357360898027059ull, 2704695649834071452ull}},
+{{6358665662424275271ull, 7731128885074369624ull,
+ 16240446701122533824ull, 3380869562292589315ull}},
+{{7948332078030344089ull, 9663911106342962030ull,
+ 15688872357975779376ull, 4226086952865736644ull}},
+{{356021530341577152ull, 6039944441464351269ull, 582173186880086302ull,
+ 2641304345541085403ull}},
+{{5056712931354359343ull, 16773302588685214894ull,
+ 14562774538882271589ull, 3301630431926356753ull}},
+{{15544263201047724987ull, 7131570180574354905ull,
+ 4368410118320675775ull, 4127038039907945942ull}},
+{{2797635473013746261ull, 11374760390500053672ull,
+ 16565314379232586071ull, 2579398774942466213ull}},
+{{3497044341267182826ull, 9606764469697679186ull,
+ 6871584918758568877ull, 3224248468678082767ull}},
+{{13594677463438754341ull, 16620141605549486886ull,
+ 3977795130020823192ull, 4030310585847603459ull}},
+{{3884987396221833559ull, 10387588503468429304ull,
+ 180278947049320543ull, 2518944116154752162ull}},
+{{4856234245277291949ull, 8372799610908148726ull,
+ 9448720720666426487ull, 3148680145193440202ull}},
+{{15293664843451390744ull, 5854313495207798003ull,
+ 2587528863978257301ull, 3935850181491800253ull}},
+{{7252697517943425263ull, 5964788943718567704ull,
+ 3923048549200104765ull, 2459906363432375158ull}},
+{{9065871897429281579ull, 12067672198075597534ull,
+ 14127182723354906764ull, 3074882954290468947ull}},
+{{2108967834931826165ull, 15084590247594496918ull,
+ 13047292385766245551ull, 3843603692863086184ull}},
+{{15153162952114555066ull, 16345397932387642429ull,
+ 8154557741103903469ull, 2402252308039428865ull}},
+{{5106395634861030120ull, 6596689360202389325ull,
+ 14804883194807267241ull, 3002815385049286081ull}},
+{{10994680562003675554ull, 12857547718680374560ull,
+ 4671045938226920339ull, 3753519231311607602ull}},
+{{6871675351252297221ull, 5730124314961540148ull,
+ 7531089729819213116ull, 2345949519569754751ull}},
+{{8589594189065371526ull, 7162655393701925185ull,
+ 4802176143846628491ull, 2932436899462193439ull}},
+{{15348678754759102312ull, 4341633223700018577ull,
+ 1391034161380897710ull, 3665546124327741799ull}},
+{{5350790388166714178ull, 14650413566479799030ull,
+ 15573850757008285849ull, 4581932655409677248ull}},
+{{17179302047886360073ull, 2238979451408792537ull,
+ 9733656723130178656ull, 2863707909631048280ull}},
+{{7639069504575786379ull, 2798724314260990672ull,
+ 12167070903912723320ull, 3579634887038810350ull}},
+{{9548836880719732974ull, 3498405392826238340ull,
+ 5985466593036128342ull, 4474543608798512938ull}},
+{{15191395087304608917ull, 16021561425798562674ull,
+ 8352602639074968117ull, 2796589755499070586ull}},
+{{9765871822275985338ull, 6191893726966039631ull,
+ 1217381261988934339ull, 3495737194373838233ull}},
+{{7595653759417593769ull, 3128181140280161635ull,
+ 6133412595913555828ull, 4369671492967297791ull}},
+{{2441440590422302154ull, 11178485249529876830ull,
+ 10750911900087054248ull, 2731044683104561119ull}},
+{{12275172774882653500ull, 13973106561912346037ull,
+ 8826953856681429906ull, 3413805853880701399ull}},
+{{1508907913321153163ull, 8243011165535656739ull,
+ 6422006302424399479ull, 4267257317350876749ull}},
+{{17083968510321578391ull, 12069411006100867317ull,
+ 6319596948228943626ull, 2667035823344297968ull}},
+{{7519902582619809276ull, 5863391720771308339ull,
+ 7899496185286179533ull, 3333794779180372460ull}},
+{{4788192209847373691ull, 11940925669391523328ull,
+ 9874370231607724416ull, 4167243473975465575ull}},
+{{2992620131154608557ull, 7463078543369702080ull,
+ 13089010422395909616ull, 2604527171234665984ull}},
+{{3740775163943260697ull, 9328848179212127600ull,
+ 16361263027994887020ull, 3255658964043332480ull}},
+{{4675968954929075871ull, 11661060224015159500ull,
+ 2004834711284057159ull, 4069573705054165601ull}},
+{{12145852633685448227ull, 14205691667650556543ull,
+ 12782236740621005484ull, 2543483565658853500ull}},
+{{10570629773679422380ull, 17757114584563195679ull,
+ 15977795925776256855ull, 3179354457073566875ull}},
+{{8601601198671890071ull, 17584707212276606695ull,
+ 15360558888792933165ull, 3974193071341958594ull}},
+{{12293529776811013150ull, 13296285016886573136ull,
+ 14212035323922971132ull, 2483870669588724121ull}},
+{{15366912221013766438ull, 16620356271108216420ull,
+ 3929986099621550203ull, 3104838336985905152ull}},
+{{761896202557656431ull, 16163759320457882622ull,
+ 4912482624526937754ull, 3881047921232381440ull}},
+{{14311243181880698982ull, 14714035593713564542ull,
+ 3070301640329336096ull, 2425654950770238400ull}},
+{{8665681940496097919ull, 18392544492141955678ull,
+ 3837877050411670120ull, 3032068688462798000ull}},
+{{1608730388765346591ull, 4543936541467892982ull,
+ 4797346313014587651ull, 3790085860578497500ull}},
+{{14840514548260505331ull, 534117329203739161ull,
+ 12221713482488893090ull, 2368803662861560937ull}},
+{{4715585130043467952ull, 9891018698359449760ull,
+ 1442083797828952650ull, 2961004578576951172ull}},
+{{5894481412554334940ull, 3140401336094536392ull,
+ 1802604747286190813ull, 3701255723221188965ull}},
+{{3684050882846459338ull, 4268593844272779197ull,
+ 3432470976267563210ull, 2313284827013243103ull}},
+{{9216749621985462076ull, 14559114342195749804ull,
+ 18125646775616617724ull, 2891606033766553878ull}},
+{{11520937027481827595ull, 18198892927744687255ull,
+ 13433686432665996347ull, 3614507542208192348ull}},
+{{9789485265924896590ull, 18136930141253471165ull,
+ 16792108040832495434ull, 4518134427760240435ull}},
+{{8424271300416754321ull, 15947267356710807382ull,
+ 8189224516306615694ull, 2823834017350150272ull}},
+{{1306967088666167093ull, 10710712159033733420ull,
+ 10236530645383269618ull, 3529792521687687840ull}},
+{{1633708860832708866ull, 4165018161937390967ull,
+ 12795663306729087023ull, 4412240652109609800ull}},
+{{7938597065661524897ull, 9520665378851951210ull,
+ 7997289566705679389ull, 2757650407568506125ull}},
+{{699874295222130313ull, 16512517741992326917ull,
+ 14608297976809487140ull, 3447063009460632656ull}},
+{{5486528887455050796ull, 2193903103780857030ull,
+ 18260372471011858926ull, 4308828761825790820ull}},
+{{17264138609941570459ull, 15206247495145199355ull,
+ 2189360757527636020ull, 2693017976141119263ull}},
+{{16968487243999575170ull, 561065295221947578ull,
+ 16571759002191708738ull, 3366272470176399078ull}},
+{{11987237018144693155ull, 9924703655882210281ull,
+ 11491326715884860114ull, 4207840587720498848ull}},
+{{574494108699351366ull, 10814625803353769330ull,
+ 7182079197428037571ull, 2629900367325311780ull}},
+{{9941489672728965015ull, 8906596235764823758ull,
+ 8977598996785046964ull, 3287375459156639725ull}},
+{{3203490054056430461ull, 11133245294706029698ull,
+ 15833684764408696609ull, 4109219323945799656ull}},
+{{6613867302212656942ull, 40749281550186705ull, 9896052977755435381ull,
+ 2568262077466124785ull}},
+{{12879020146193209082ull, 4662622620365121285ull,
+ 16981752240621682130ull, 3210327596832655981ull}},
+{{2263717127459347640ull, 15051650312311177415ull,
+ 7392132245494938950ull, 4012909496040819977ull}},
+{{8332352232303174131ull, 4795595426767097980ull,
+ 16149297699502806604ull, 2508068435025512485ull}},
+{{10415440290378967664ull, 5994494283458872475ull,
+ 6351564069096344543ull, 3135085543781890607ull}},
+{{8407614344546321676ull, 2881431835896202690ull,
+ 3327769067943042775ull, 3918856929727363259ull}},
+{{9866444983768838951ull, 8718423925076208537ull,
+ 18220756731960259398ull, 2449285581079602036ull}},
+{{16944742248138436593ull, 1674657869490484863ull,
+ 4329201841240772632ull, 3061606976349502546ull}},
+{{16569241791745657837ull, 2093322336863106079ull,
+ 14634874338405741598ull, 3827008720436878182ull}},
+{{17273305147482118005ull, 15143384515821605011ull,
+ 4535110443076200594ull, 2391880450273048864ull}},
+{{16979945415925259602ull, 9705858607922230456ull,
+ 5668888053845250743ull, 2989850562841311080ull}},
+{{2778187696197022886ull, 7520637241475400167ull,
+ 7086110067306563429ull, 3737313203551638850ull}},
+{{8653896337764221160ull, 7006241285135819056ull,
+ 9040504810493990047ull, 2335820752219774281ull}},
+{{10817370422205276450ull, 4146115587992385916ull,
+ 15912317031544875463ull, 2919775940274717851ull}},
+{{13521713027756595562ull, 570958466563094491ull,
+ 15278710271003706425ull, 3649719925343397314ull}},
+{{12290455266268356548ull, 5325384101631256018ull,
+ 9875015801899857223ull, 4562149906679246643ull}},
+{{12293220559845110747ull, 10245894091160616867ull,
+ 3866041866973716812ull, 2851343691674529152ull}},
+{{10754839681379000529ull, 12807367613950771084ull,
+ 4832552333717146015ull, 3564179614593161440ull}},
+{{13443549601723750662ull, 11397523499011075951ull,
+ 6040690417146432519ull, 4455224518241451800ull}},
+{{15319747528718426020ull, 14040981214523004325ull,
+ 3775431510716520324ull, 2784515323900907375ull}},
+{{5314626355615868813ull, 17551226518153755407ull,
+ 107603369968262501ull, 3480644154876134219ull}},
+{{2031596926092448112ull, 8103975092410030547ull,
+ 13969562267742491839ull, 4350805193595167773ull}},
+{{17410649143303637734ull, 11982513460397350947ull,
+ 11036819426552751351ull, 2719253245996979858ull}},
+{{17151625410702159263ull, 10366455807069300780ull,
+ 4572652246336163381ull, 3399066557496224823ull}},
+{{2992787689668147463ull, 17569755777264013880ull,
+ 1104129289492816322ull, 4248833196870281029ull}},
+{{1870492306042592165ull, 15592783379217396579ull,
+ 2995923815146704153ull, 2655520748043925643ull}},
+{{16173173437835403918ull, 5655921168739582011ull,
+ 17579962824215543904ull, 3319400935054907053ull}},
+{{15604780778866866993ull, 7069901460924477514ull,
+ 8139895474987266168ull, 4149251168818633817ull}},
+{{14364674005219179775ull, 4418688413077798446ull,
+ 16616649717935511115ull, 2593281980511646135ull}},
+{{8732470469669198910ull, 911674497919860154ull,
+ 16159126128992000990ull, 3241602475639557669ull}},
+{{1692216050231722830ull, 10362965159254601001ull,
+ 6363849605957837525ull, 4052003094549447087ull}},
+{{12586850077463296529ull, 8782696233747819577ull,
+ 10894935031364730309ull, 2532501934093404429ull}},
+{{1898504541546956949ull, 15590056310612162376ull,
+ 18230354807633300790ull, 3165627417616755536ull}},
+{{2373130676933696186ull, 10264198351410427162ull,
+ 4341199435832074372ull, 3957034272020944421ull}},
+{{6094892691510948020ull, 15638496006486292784ull,
+ 5019092656608740434ull, 2473146420013090263ull}},
+{{7618615864388685025ull, 10324747971253090172ull,
+ 1662179802333537639ull, 3091433025016362829ull}},
+{{9523269830485856282ull, 8294248945638974811ull,
+ 6689410771344309953ull, 3864291281270453536ull}},
+{{3646200634839966224ull, 16713120637092829017ull,
+ 4180881732090193720ull, 2415182050794033460ull}},
+{{9169436811977345684ull, 2444656722656484655ull,
+ 5226102165112742151ull, 3018977563492541825ull}},
+{{6850109996544294201ull, 16890878958602769531ull,
+ 11144313724818315592ull, 3773721954365677281ull}},
+{{1975475738626489924ull, 10556799349126730957ull, 47667050370365389ull,
+ 2358576221478548301ull}},
+{{7081030691710500309ull, 17807685204835801600ull,
+ 4671269831390344640ull, 2948220276848185376ull}},
+{{8851288364638125386ull, 3812862432335200384ull,
+ 5839087289237930801ull, 3685275346060231720ull}},
+{{11064110455797656732ull, 9377764058846388384ull,
+ 7298859111547413501ull, 4606594182575289650ull}},
+{{6915069034873535458ull, 8166945545992686692ull,
+ 9173472963144521342ull, 2879121364109556031ull}},
+{{8643836293591919322ull, 985309895636082557ull, 6855155185503263774ull,
+ 3598901705136945039ull}},
+{{15416481385417287056ull, 10455009406399879004ull,
+ 3957257963451691813ull, 4498627131421181299ull}},
+{{411928829031028602ull, 8840223888213618330ull, 167443217943613431ull,
+ 2811641957138238312ull}},
+{{9738283073143561561ull, 6438593841839635008ull, 209304022429516789ull,
+ 3514552446422797890ull}},
+{{12172853841429451951ull, 12659928320726931664ull,
+ 9485002064891671794ull, 4393190558028497362ull}},
+{{7608033650893407470ull, 12524141218881720194ull,
+ 10539812308984682775ull, 2745744098767810851ull}},
+{{286670026761983529ull, 11043490505174762339ull,
+ 8563079367803465565ull, 3432180123459763564ull}},
+{{14193395588734643123ull, 18416049149895840827ull,
+ 10703849209754331956ull, 4290225154324704455ull}},
+{{6565029233745458000ull, 2286658681830124709ull,
+ 13607434783737539329ull, 2681390721452940284ull}},
+{{12817972560609210404ull, 7470009370715043790ull,
+ 17009293479671924161ull, 3351738401816175355ull}},
+{{6799093663906737197ull, 13949197731821192642ull,
+ 16649930831162517297ull, 4189673002270219194ull}},
+{{8861119558369098652ull, 1800719554747163545ull,
+ 15017892787903961215ull, 2618545626418886996ull}},
+{{15688085466388761219ull, 16085957498716118143ull,
+ 325621911170399902ull, 3273182033023608746ull}},
+{{14998420814558563620ull, 10884074836540371871ull,
+ 9630399425817775686ull, 4091477541279510932ull}},
+{{16291542036740184118ull, 2190860754410344515ull,
+ 15242371677990885612ull, 2557173463299694332ull}},
+{{15752741527497842244ull, 2738575943012930644ull,
+ 606220523779055399ull, 3196466829124617916ull}},
+{{1244182835662751189ull, 17258277984048327018ull,
+ 757775654723819248ull, 3995583536405772395ull}},
+{{5389300290716607397ull, 10786423740030204386ull,
+ 16614510848698244694ull, 2497239710253607746ull}},
+{{15959997400250535054ull, 4259657638182979674ull,
+ 11544766524018030060ull, 3121549637817009683ull}},
+{{10726624713458393010ull, 5324572047728724593ull,
+ 9819272136595149671ull, 3901937047271262104ull}},
+{{18233355491979965391ull, 10245386557471534726ull,
+ 6137045085371968544ull, 2438710654544538815ull}},
+{{13568322328120180931ull, 12806733196839418408ull,
+ 3059620338287572776ull, 3048388318180673519ull}},
+{{16960402910150226164ull, 16008416496049273010ull,
+ 17659583478141629682ull, 3810485397725841898ull}},
+{{15211937837271279256ull, 14616946328458183535ull,
+ 15648925692265906455ull, 2381553373578651186ull}},
+{{14403236278161711166ull, 13659496892145341515ull,
+ 10337785078477607261ull, 2976941716973313983ull}},
+{{13392359329274751054ull, 3239313059899513182ull,
+ 8310545329669621173ull, 3721177146216642479ull}},
+{{3758538562369331505ull, 4330413671650889691ull,
+ 12111619858684595089ull, 2325735716385401549ull}},
+{{86487184534276477ull, 10024703107991000018ull, 1304466768073580149ull,
+ 2907169645481751937ull}},
+{{9331481017522621404ull, 17142564903416137926ull,
+ 6242269478519363090ull, 3633962056852189921ull}},
+{{2440979235048500947ull, 12204834092415396600ull,
+ 12414522866576591767ull, 4542452571065237401ull}},
+{{1525612021905313092ull, 14545550335400704731ull,
+ 841547763969287998ull, 2839032856915773376ull}},
+{{15742073082663805077ull, 8958565882396105105ull,
+ 1051934704961609998ull, 3548791071144716720ull}},
+{{5842533298047592634ull, 1974835316140355574ull,
+ 1314918381202012498ull, 4435988838930895900ull}},
+{{17486641366561909109ull, 5845958091015110137ull,
+ 10045196025106033619ull, 2772493024331809937ull}},
+{{8023243652920222674ull, 2695761595341499768ull,
+ 17168181049809929928ull, 3465616280414762421ull}},
+{{10029054566150278342ull, 3369701994176874710ull,
+ 7625168256980248698ull, 4332020350518453027ull}},
+{{1656473085416536060ull, 6717749764787934598ull,
+ 2459887151398961484ull, 2707512719074033142ull}},
+{{11293963393625445883ull, 8397187205984918247ull,
+ 12298230976103477663ull, 3384390898842541427ull}},
+{{9505768223604419449ull, 5884797989053759905ull,
+ 10761102701701959175ull, 4230488623553176784ull}},
+{{17470320185821231916ull, 10595527770799681796ull,
+ 6725689188563724484ull, 2644055389720735490ull}},
+{{3391156158566988279ull, 13244409713499602246ull,
+ 17630483522559431413ull, 3305069237150919362ull}},
+{{13462317235063511156ull, 2720454086592339095ull,
+ 12814732366344513459ull, 4131336546438649203ull}},
+{{15331477299555776329ull, 17841184868616069598ull,
+ 5703364719751626959ull, 2582085341524155752ull}},
+{{9940974587589944603ull, 17689795067342699094ull,
+ 7129205899689533699ull, 3227606676905194690ull}},
+{{3202846197632654946ull, 17500557815750985964ull,
+ 18134879411466692932ull, 4034508346131493362ull}},
+{{11225150910375185149ull, 1714476597989590419ull,
+ 15945985650594070987ull, 2521567716332183351ull}},
+{{9419752619541593532ull, 15978153802769151736ull,
+ 15320796044815200829ull, 3151959645415229189ull}},
+{{11774690774426991915ull, 6137634198179275958ull,
+ 5315937000736837325ull, 3939949556769036487ull}},
+{{2747495715589482043ull, 6141864383075741426ull,
+ 10239989653101605184ull, 2462468472980647804ull}},
+{{12657741681341628362ull, 7677330478844676782ull,
+ 12799987066377006480ull, 3078085591225809755ull}},
+{{6598805064822259644ull, 9596663098555845978ull,
+ 11388297814543870196ull, 3847606989032262194ull}},
+{{8735939183941300182ull, 15221286473452179544ull,
+ 11729372152517306776ull, 2404754368145163871ull}},
+{{10919923979926625227ull, 579864018105672814ull,
+ 10050029172219245567ull, 3005942960181454839ull}},
+{{4426532938053505726ull, 14559888077914254730ull,
+ 7950850446846669054ull, 3757428700226818549ull}},
+{{7378269104710828983ull, 4488244030269021302ull,
+ 7275124538492862111ull, 2348392937641761593ull}},
+{{18446208417743312037ull, 998619019408888723ull,
+ 13705591691543465543ull, 2935491172052201991ull}},
+{{18446074503751752142ull, 15083331829543274616ull,
+ 12520303596001944024ull, 3669363965065252489ull}},
+{{4610849055980138561ull, 407420713219541655ull, 1815321439720266319ull,
+ 4586704956331565612ull}},
+{{9799309687628668457ull, 7172166973403295390ull,
+ 10357947936679942257ull, 2866690597707228507ull}},
+{{3025765072681059763ull, 13576894735181507142ull,
+ 8335748902422539917ull, 3583363247134035634ull}},
+{{13005578377706100511ull, 3136060363694720215ull,
+ 1196314091173399089ull, 4479204058917544543ull}},
+{{15046015513707394676ull, 13489252773377669894ull,
+ 7665225334624456286ull, 2799502536823465339ull}},
+{{9584147355279467537ull, 7638193929867311560ull,
+ 4969845649853182454ull, 3499378171029331674ull}},
+{{11980184194099334421ull, 324370375479363642ull,
+ 15435679099171253876ull, 4374222713786664592ull}},
+{{12099301139739471917ull, 9426103521529378084ull,
+ 9647299436982033672ull, 2733889196116665370ull}},
+{{15124126424674339896ull, 11782629401911722605ull,
+ 2835752259372766282ull, 3417361495145831713ull}},
+{{5070099975560761158ull, 5504914715534877449ull,
+ 8156376342643345757ull, 4271701868932289641ull}},
+{{14698027530793945484ull, 5746414706422992357ull,
+ 16626950260220560858ull, 2669813668082681025ull}},
+{{4537476358210268143ull, 16406390419883516255ull,
+ 6948629769993537360ull, 3337267085103351282ull}},
+{{1060159429335447274ull, 2061243951144843703ull,
+ 17909159249346697509ull, 4171583856379189102ull}},
+{{7580128670975736403ull, 3594120478679221266ull,
+ 6581538512414298039ull, 2607239910236993189ull}},
+{{251788801864894695ull, 18327708653631190295ull,
+ 12838609158945260452ull, 3259049887796241486ull}},
+{{14149794057613282081ull, 4462891743329436252ull,
+ 6824889411826799758ull, 4073812359745301858ull}},
+{{18066993322863077109ull, 16624365394863061369ull,
+ 8877241900819137752ull, 2546132724840813661ull}},
+{{8748683598296682674ull, 2333712669869275096ull,
+ 15708238394451310095ull, 3182665906051017076ull}},
+{{10935854497870853342ull, 16752198892618757582ull,
+ 1188553919354586002ull, 3978332382563771346ull}},
+{{2223223042741895435ull, 15081810326314111393ull,
+ 5354532218024004155ull, 2486457739102357091ull}},
+{{7390714821854757198ull, 14240576889465251337ull,
+ 2081479254102617290ull, 3108072173877946364ull}},
+{{13850079545745834401ull, 8577349074976788363ull,
+ 2601849067628271613ull, 3885090217347432955ull}},
+{{6350456706877452549ull, 7666686181074186679ull,
+ 17767056731763527422ull, 2428181385842145596ull}},
+{{3326384865169427782ull, 359985689487957541ull, 3762076840994857662ull,
+ 3035226732302681996ull}},
+{{8769667099889172631ull, 9673354148714722734ull,
+ 4702596051243572077ull, 3794033415378352495ull}},
+{{869355919003344991ull, 8351689352160395661ull, 9856651559668314404ull,
+ 2371270884611470309ull}},
+{{5698380917181569142ull, 10439611690200494576ull,
+ 16932500468012780909ull, 2964088605764337886ull}},
+{{7122976146476961428ull, 17661200631178006124ull,
+ 11942253548161200328ull, 3705110757205422358ull}},
+{{13675232128402876700ull, 11038250394486253827ull,
+ 2852222449173362301ull, 2315694223253388974ull}},
+{{12482354142076207971ull, 18409499011535205188ull,
+ 12788650098321478684ull, 2894617779066736217ull}},
+{{15602942677595259964ull, 4565129690709454869ull,
+ 2150754567619684644ull, 3618272223833420272ull}},
+{{5668620291711911243ull, 5706412113386818587ull,
+ 2688443209524605805ull, 4522840279791775340ull}},
+{{1237044673106250575ull, 5872350580080455569ull,
+ 10903649042807654436ull, 2826775174869859587ull}},
+{{6157991859810201123ull, 7340438225100569461ull,
+ 9017875285082180141ull, 3533468968587324484ull}},
+{{12309175843190139307ull, 13787233799803099730ull,
+ 11272344106352725176ull, 4416836210734155605ull}},
+{{12304920920421224971ull, 8617021124876937331ull,
+ 9351058075684147187ull, 2760522631708847253ull}},
+{{10769465132099143310ull, 6159590387668783760ull,
+ 16300508613032571888ull, 3450653289636059066ull}},
+{{13461831415123929137ull, 7699487984585979700ull,
+ 11152263729435939052ull, 4313316612045073833ull}},
+{{17637016671307231519ull, 14035552027221013120ull,
+ 52635803256380051ull, 2695822882528171146ull}},
+{{3599526765424487783ull, 12932754015598878497ull,
+ 9289166790925250872ull, 3369778603160213932ull}},
+{{9111094475207997632ull, 16165942519498598121ull,
+ 11611458488656563590ull, 4212223253950267415ull}},
+{{17223649093073468280ull, 5492028056259235921ull,
+ 14174690583051434100ull, 2632639533718917134ull}},
+{{7694503311059671638ull, 6865035070324044902ull,
+ 8494991191959516817ull, 3290799417148646418ull}},
+{{394757101969813740ull, 13192979856332444032ull,
+ 1395366953094620213ull, 4113499271435808023ull}},
+{{246723188731133588ull, 10551455419421471472ull,
+ 7789633373325219489ull, 2570937044647380014ull}},
+{{308403985913916984ull, 17801005292704227244ull, 513669679801748553ull,
+ 3213671305809225018ull}},
+{{385504982392396230ull, 8416198560598120343ull, 9865459136606961500ull,
+ 4017089132261531272ull}},
+{{7158469641636329500ull, 14483496137228601022ull,
+ 6165911960379350937ull, 2510680707663457045ull}},
+{{18171459088900187683ull, 4269312116253587565ull,
+ 12319075968901576576ull, 3138350884579321306ull}},
+{{8879265805843070892ull, 5336640145316984457ull,
+ 6175472924272194912ull, 3922938605724151633ull}},
+{{17078756174720389067ull, 3335400090823115285ull,
+ 15388885623738591580ull, 2451836628577594770ull}},
+{{7513387163118322622ull, 4169250113528894107ull,
+ 10012734992818463667ull, 3064795785721993463ull}},
+{{4780047935470515374ull, 599876623483729730ull, 7904232722595691680ull,
+ 3830994732152491829ull}},
+{{7599215978096460013ull, 374922889677331081ull, 7245988460836001252ull,
+ 2394371707595307393ull}},
+{{14110705991047962920ull, 468653612096663851ull,
+ 13669171594472389469ull, 2992964634494134241ull}},
+{{13026696470382565746ull, 5197503033548217718ull,
+ 3251406437808323124ull, 3741205793117667802ull}},
+{{3529999275561715687ull, 12471811432822411882ull,
+ 6643815042057589856ull, 2338253620698542376ull}},
+{{13635871131306920417ull, 15589764291028014852ull,
+ 8304768802571987320ull, 2922817025873177970ull}},
+{{17044838914133650521ull, 1040461290075466949ull,
+ 1157588966360208343ull, 3653521282341472463ull}},
+{{7470990587384899439ull, 15135634667876497399ull,
+ 15282044263232424140ull, 4566901602926840578ull}},
+{{11586898144756644006ull, 236399630568035066ull,
+ 14162963682947652992ull, 2854313501829275361ull}},
+{{5260250644091029199ull, 295499538210043833ull, 3868646548402402528ull,
+ 3567891877286594202ull}},
+{{11186999323541174402ull, 369374422762554791ull,
+ 14059180222357778968ull, 4459864846608242752ull}},
+{{13909403604854315858ull, 230859014226596744ull,
+ 8786987638973611855ull, 2787415529130151720ull}},
+{{17386754506067894822ull, 14123631823065409642ull,
+ 10983734548717014818ull, 3484269411412689650ull}},
+{{12510071095730092719ull, 8431167741976986245ull,
+ 4506296149041492715ull, 4355336764265862063ull}},
+{{10124637444045001902ull, 2963636829521922451ull,
+ 9733964120792014803ull, 2722085477666163789ull}},
+{{8044110786628864473ull, 17539604092184566776ull,
+ 16779141169417406407ull, 3402606847082704736ull}},
+{{10055138483286080591ull, 17312819096803320566ull,
+ 2527182388062206393ull, 4253258558853380921ull}},
+{{1672775533626412466ull, 3902982907860993498ull,
+ 13108704038607348756ull, 2658286599283363075ull}},
+{{11314341453887791390ull, 4878728634826241872ull,
+ 11774194029831798041ull, 3322858249104203844ull}},
+{{14142926817359739237ull, 10710096811960190244ull,
+ 14717742537289747551ull, 4153572811380254805ull}},
+{{18062701297704612832ull, 13611339535116200758ull,
+ 11504432095019786171ull, 2595983007112659253ull}},
+{{13355004585275990231ull, 12402488400467863044ull,
+ 545482063492569002ull, 3244978758890824067ull}},
+{{16693755731594987789ull, 6279738463730052997ull,
+ 14516910634647874965ull, 4056223448613530083ull}},
+{{12739440341460561320ull, 6230679549044977075ull,
+ 6767226137441227901ull, 2535139655383456302ull}},
+{{11312614408398313746ull, 12400035454733609248ull,
+ 17682404708656310684ull, 3168924569229320377ull}},
+{{14140768010497892183ull, 15500044318417011560ull,
+ 8267947830538224643ull, 3961155711536650472ull}},
+{{8837980006561182614ull, 7381684689796938273ull,
+ 5167467394086390402ull, 2475722319710406545ull}},
+{{15659161026628866172ull, 3733825391397033ull, 11071020261035375907ull,
+ 3094652899638008181ull}},
+{{5738893228003919003ull, 13839725337021410004ull, 3717271012056171ull,
+ 3868316124547510227ull}},
+{{12810180304357225185ull, 6343985326424687300ull,
+ 16143224358878392771ull, 2417697577842193891ull}},
+{{16012725380446531481ull, 3318295639603471221ull,
+ 15567344430170603060ull, 3022121972302742364ull}},
+{{6180848670276000639ull, 4147869549504339027ull,
+ 1012436464003702209ull, 3777652465378427956ull}},
+{{1557187409708806448ull, 14121633514508681652ull,
+ 9856144826857089688ull, 2361032790861517472ull}},
+{{1946484262136008059ull, 17652041893135852065ull,
+ 12320181033571362110ull, 2951290988576896840ull}},
+{{7044791346097397978ull, 12841680329565039273ull,
+ 15400226291964202638ull, 3689113735721121050ull}},
+{{13417675201049135377ull, 6828728375101523283ull,
+ 10026910828100477490ull, 4611392169651401313ull}},
+{{6080203991442015659ull, 8879641252865839956ull,
+ 17796034313631268191ull, 2882120106032125820ull}},
+{{7600254989302519573ull, 6487865547654912041ull,
+ 3798298818329533623ull, 3602650132540157276ull}},
+{{14112004755055537370ull, 3498145916141252147ull,
+ 4747873522911917029ull, 4503312665675196595ull}},
+{{6514159962696016905ull, 4492184206801976544ull, 661577942606254191ull,
+ 2814570416046997872ull}},
+{{8142699953370021131ull, 1003544240075082776ull, 826972428257817739ull,
+ 3518213020058747340ull}},
+{{10178374941712526413ull, 15089488355376017182ull,
+ 1033715535322272173ull, 4397766275073434175ull}},
+{{1749798320142941104ull, 11736773231323704691ull,
+ 7563601237217501964ull, 2748603921920896359ull}},
+{{16022305955460840092ull, 14670966539154630863ull,
+ 4842815528094489551ull, 3435754902401120449ull}},
+{{15416196425898662211ull, 13727022155515900675ull,
+ 10665205428545499843ull, 4294693628001400561ull}},
+{{7329279756972969930ull, 6273545837983743970ull,
+ 18194968438909407162ull, 2684183517500875350ull}},
+{{18384971733070988221ull, 17065304334334455770ull,
+ 13520338511781983144ull, 3355229396876094188ull}},
+{{13757842629483959468ull, 2884886344208518097ull,
+ 16900423139727478931ull, 4194036746095117735ull}},
+{{1681122615786392812ull, 17943955029626181475ull,
+ 17480293489970756187ull, 2621272966309448584ull}},
+{{15936461325015154726ull, 17818257768605338939ull,
+ 3403622788753893618ull, 3276591207886810731ull}},
+{{15308890637841555504ull, 13049450173901897866ull,
+ 18089586541224530735ull, 4095739009858513413ull}},
+{{14179742667078360094ull, 15073435386329768022ull,
+ 13611834597479025661ull, 2559836881161570883ull}},
+{{8501306296993174309ull, 5006736177630046316ull,
+ 12403107228421394173ull, 3199796101451963604ull}},
+{{10626632871241467887ull, 10870106240464945799ull,
+ 15503884035526742716ull, 3999745126814954505ull}},
+{{13559174572166999285ull, 16017188437145366932ull,
+ 2772398494563132341ull, 2499840704259346566ull}},
+{{16948968215208749107ull, 6186427491149544953ull,
+ 12688870155058691235ull, 3124800880324183207ull}},
+{{7351152213728772671ull, 3121348345509543288ull,
+ 11249401675395976140ull, 3906001100405229009ull}},
+{{4594470133580482920ull, 11174214752798240363ull,
+ 113347019481403231ull, 2441250687753268131ull}},
+{{1131401648548215745ull, 9356082422570412550ull,
+ 13976741829633917751ull, 3051563359691585163ull}},
+{{10637624097540045490ull, 7083417009785627783ull,
+ 12859241268615009285ull, 3814454199614481454ull}},
+{{13566044088603610287ull, 6732978640329711316ull,
+ 3425339774456992899ull, 2384033874759050909ull}},
+{{16957555110754512859ull, 3804537281984751241ull,
+ 8893360736498629028ull, 2980042343448813636ull}},
+{{7361885833160977361ull, 4755671602480939052ull,
+ 11116700920623286285ull, 3725052929311017045ull}},
+{{13824550682580386659ull, 5278137760764280859ull,
+ 9253781084603247880ull, 2328158080819385653ull}},
+{{12669002334798095420ull, 6597672200955351074ull,
+ 16178912374181447754ull, 2910197601024232066ull}},
+{{6612880881642843467ull, 17470462288048964651ull,
+ 11000268430872033884ull, 3637747001280290083ull}},
+{{3654415083626166429ull, 3391333786351654198ull,
+ 9138649520162654452ull, 4547183751600362604ull}},
+{{16119067482548517730ull, 11342955653324559681ull,
+ 14935027986956434840ull, 2841989844750226627ull}},
+{{6313776297903483451ull, 14178694566655699602ull,
+ 14057098965268155646ull, 3552487305937783284ull}},
+{{17115592409234130121ull, 8499996171464848694ull,
+ 17571373706585194558ull, 4440609132422229105ull}},
+{{6085559237343943422ull, 700811588738142530ull, 4064579538974664743ull,
+ 2775380707763893191ull}},
+{{16830321083534705085ull, 14711072541204841874ull,
+ 469038405290943024ull, 3469225884704866489ull}},
+{{11814529317563605549ull, 18388840676506052343ull,
+ 5197984025041066684ull, 4336532355881083111ull}},
+{{14301609851118335324ull, 2269653385961506906ull,
+ 10166269043291748534ull, 2710332722425676944ull}},
+{{8653640277043143347ull, 12060438769306659441ull,
+ 12707836304114685667ull, 3387915903032096180ull}},
+{{15428736364731317088ull, 10463862443205936397ull,
+ 15884795380143357084ull, 4234894878790120225ull}},
+{{11948803237170767132ull, 15763286063858486056ull,
+ 3010468084948516321ull, 2646809299243825141ull}},
+{{14936004046463458915ull, 5869049524540943858ull,
+ 8374771124613033306ull, 3308511624054781426ull}},
+{{9446633021224547835ull, 16559683942530955631ull,
+ 1245091868911515824ull, 4135639530068476783ull}},
+{{12821674665906424253ull, 10349802464081847269ull,
+ 7695711445710779246ull, 2584774706292797989ull}},
+{{2192035277100866605ull, 3713881043247533279ull,
+ 14231325325565861962ull, 3230968382865997486ull}},
+{{16575102151658246968ull, 13865723340914192406ull,
+ 8565784620102551644ull, 4038710478582496858ull}},
+{{5747752826359016451ull, 17889449124926146062ull,
+ 9965301405991482681ull, 2524194049114060536ull}},
+{{16408063069803546371ull, 8526753350875518865ull,
+ 12456626757489353352ull, 3155242561392575670ull}},
+{{6675020781972269252ull, 10658441688594398582ull,
+ 6347411410006915882ull, 3944053201740719588ull}},
+{{18006946044014831995ull, 11273212073798887017ull,
+ 13190504168109098234ull, 2465033251087949742ull}},
+{{8673624499736376281ull, 4868143055393832964ull,
+ 7264758173281596985ull, 3081291563859937178ull}},
+{{10842030624670470352ull, 10696864837669679109ull,
+ 18304319753456772039ull, 3851614454824921472ull}},
+{{9082112149632737922ull, 13603069551184631299ull,
+ 11440199845910482524ull, 2407259034265575920ull}},
+{{6740954168613534498ull, 17003836938980789124ull,
+ 14300249807388103155ull, 3009073792831969900ull}},
+{{8426192710766918123ull, 16643110155298598501ull,
+ 17875312259235128944ull, 3761342241039962375ull}},
+{{7572213453443017779ull, 10401943847061624063ull,
+ 18089599189663037446ull, 2350838900649976484ull}},
+{{4853580798376384320ull, 3779057771972254271ull,
+ 4165254913369245192ull, 2938548625812470606ull}},
+{{1455289979543092495ull, 4723822214965317839ull,
+ 14429940678566332298ull, 3673185782265588257ull}},
+{{15654170529711029331ull, 15128149805561423106ull,
+ 4202367792925751660ull, 4591482227831985322ull}},
+{{14395542599496781236ull, 231721591621113633ull,
+ 7238165889005982692ull, 2869676392394990826ull}},
+{{4159370194088812833ull, 289651989526392042ull,
+ 18271079398112254173ull, 3587095490493738532ull}},
+{{14422584779465791849ull, 4973751005335377956ull,
+ 4392105173930766100ull, 4483869363117173166ull}},
+{{18237487524020895714ull, 12331966415189387030ull,
+ 16580123788988892524ull, 2802418351948233228ull}},
+{{13573487368171343834ull, 15414958018986733788ull,
+ 2278410662526564039ull, 3503022939935291536ull}},
+{{16966859210214179793ull, 14657011505306029331ull,
+ 2848013328158205049ull, 4378778674919114420ull}},
+{{8298443997170168419ull, 2243103163175186476ull,
+ 11003380366953653964ull, 2736736671824446512ull}},
+{{10373054996462710523ull, 2803878953968983095ull,
+ 13754225458692067455ull, 3420920839780558140ull}},
+{{8354632727151000250ull, 17339906747743392581ull,
+ 17192781823365084318ull, 4276151049725697675ull}},
+{{7527488463683069108ull, 6225755698912232459ull,
+ 8439645630389483747ull, 2672594406078561047ull}},
+{{4797674561176448481ull, 3170508605212902670ull,
+ 5937871019559466780ull, 3340743007598201309ull}},
+{{15220465238325336409ull, 3963135756516128337ull,
+ 12034024792876721379ull, 4175928759497751636ull}},
+{{2595261746312253400ull, 171116838608886259ull,
+ 16744637532402726670ull, 2609955474686094772ull}},
+{{17079135238172480462ull, 9437268085115883631ull,
+ 2484052841793856721ull, 3262444343357618466ull}},
+{{16737233029288212673ull, 16408271124822242443ull,
+ 12328438089097096709ull, 4078055429197023082ull}},
+{{8154927634091438969ull, 12561012462227595479ull,
+ 12316959824113073347ull, 2548784643248139426ull}},
+{{5581973524186910807ull, 11089579559357106445ull,
+ 6172827743286565876ull, 3185980804060174283ull}},
+{{11589152923661026413ull, 13861974449196383056ull,
+ 3104348660680819441ull, 3982476005075217854ull}},
+{{7243220577288141508ull, 1746205003106657554ull,
+ 15775275968207675863ull, 2489047503172011158ull}},
+{{18277397758464952693ull, 16017814309165485654ull,
+ 10495722923404819020ull, 3111309378965013948ull}},
+{{13623375161226415058ull, 1575523812747305452ull,
+ 13119653654256023776ull, 3889136723706267435ull}},
+{{17737981512621285220ull, 984702382967065907ull,
+ 5893940524696320908ull, 2430710452316417147ull}},
+{{17560790872349218620ull, 1230877978708832384ull,
+ 2755739637443013231ull, 3038388065395521434ull}},
+{{3504244516726971659ull, 15373655528668204193ull,
+ 12668046583658542346ull, 3797985081744401792ull}},
+{{13719367869022827047ull, 14220220723845015524ull,
+ 7917529114786588966ull, 2373740676090251120ull}},
+{{17149209836278533809ull, 8551903867951493597ull,
+ 9896911393483236208ull, 2967175845112813900ull}},
+{{7601454240066003549ull, 10689879834939366997ull,
+ 12371139241854045260ull, 3708969806391017375ull}},
+{{7056751909254946170ull, 15904546933691880181ull,
+ 14649491053799860143ull, 2318106128994385859ull}},
+{{13432625904996070617ull, 15268997648687462322ull,
+ 13700177798822437275ull, 2897632661242982324ull}},
+{{7567410344390312463ull, 14474561042431939999ull,
+ 17125222248528046594ull, 3622040826553727905ull}},
+{{4847576912060502675ull, 8869829266185149191ull,
+ 7571469755377894531ull, 4527551033192159882ull}},
+{{9947264597678896028ull, 3237800282152024292ull,
+ 9343854615538571986ull, 2829719395745099926ull}},
+{{12434080747098620035ull, 13270622389544806173ull,
+ 2456446232568439174ull, 3537149244681374908ull}},
+{{1707542878591111331ull, 7364905950076231909ull,
+ 3070557790710548968ull, 4421436555851718635ull}},
+{{3373057308333138534ull, 4603066218797644943ull,
+ 18059999683689950769ull, 2763397847407324146ull}},
+{{18051379690698586880ull, 10365518791924444082ull,
+ 13351627567757662653ull, 3454247309259155183ull}},
+{{13340852576518457791ull, 17568584508332943007ull,
+ 12077848441269690412ull, 4317809136573943979ull}},
+{{15255561887965117976ull, 1756993280853313571ull,
+ 5242812266579862556ull, 2698630710358714987ull}},
+{{14457766341529009566ull, 2196241601066641964ull,
+ 1941829314797440291ull, 3373288387948393734ull}},
+{{18072207926911261957ull, 16580360056615466167ull,
+ 11650658680351576171ull, 4216610484935492167ull}},
+{{18212658981960620579ull, 8056882026170972402ull,
+ 14199190702860816963ull, 2635381553084682604ull}},
+{{13542451690595999916ull, 5459416514286327599ull,
+ 17748988378576021204ull, 3294226941355853255ull}},
+{{12316378594817611991ull, 6824270642857909499ull,
+ 17574549454792638601ull, 4117783676694816569ull}},
+{{5391893612547313542ull, 15794384197854663197ull,
+ 4066564381604317269ull, 2573614797934260356ull}},
+{{11351553034111529832ull, 5907922192036165284ull,
+ 5083205477005396587ull, 3217018497417825445ull}},
+{{14189441292639412290ull, 2773216721617818701ull,
+ 10965692864684133638ull, 4021273121772281806ull}},
+{{11174243817113326633ull, 15568318506293300400ull,
+ 2241872022000195619ull, 2513295701107676129ull}},
+{{13967804771391658291ull, 14848712114439237596ull,
+ 7414026045927632428ull, 3141619626384595161ull}},
+{{17459755964239572864ull, 114146069339495379ull,
+ 13879218575836928440ull, 3927024532980743951ull}},
+{{8606504468436039088ull, 71341293337184612ull, 15592040637539162131ull,
+ 2454390333112964969ull}},
+{{10758130585545048860ull, 13924234671953644477ull,
+ 5654992741641788951ull, 3067987916391206212ull}},
+{{18059349250358698979ull, 12793607321514667692ull,
+ 7068740927052236189ull, 3834984895489007765ull}},
+{{2063721244619411054ull, 10301847585160361260ull,
+ 6723806088621341570ull, 2396865559680629853ull}},
+{{2579651555774263818ull, 3653937444595675767ull,
+ 13016443629204064867ull, 2996081949600787316ull}},
+{{17059622499999993484ull, 18402479861026758420ull,
+ 16270554536505081083ull, 3745102437000984145ull}},
+{{1438892025645220120ull, 9195706903928030061ull,
+ 3251567557674593821ull, 2340689023125615091ull}},
+{{6410301050483913053ull, 16106319648337425480ull,
+ 17899517502375405988ull, 2925861278907018863ull}},
+{{8012876313104891317ull, 1686155486712230234ull,
+ 17762710859541869582ull, 3657326598633773579ull}},
+{{792723354526338338ull, 11331066395245063601ull,
+ 17591702555999949073ull, 4571658248292216974ull}},
+{{12024667142647431221ull, 164387469387082894ull,
+ 6383128079072580267ull, 2857286405182635609ull}},
+{{5807461891454513218ull, 14040542392016017330ull,
+ 12590596117268113237ull, 3571608006478294511ull}},
+{{16482699401172917331ull, 3715619934737857950ull,
+ 11126559128157753643ull, 4464510008097868139ull}},
+{{5690001107305685428ull, 16419449997467267ull, 4648256445884902075ull,
+ 2790318755061167587ull}},
+{{2500815365704718881ull, 13855582367778997796ull,
+ 1198634538928739689ull, 3487898443826459484ull}},
+{{3126019207130898601ull, 3484419904441583533ull,
+ 1498293173660924612ull, 4359873054783074355ull}},
+{{4259605013670505578ull, 11401134477130765516ull,
+ 17077334298033935546ull, 2724920659239421471ull}},
+{{5324506267088131972ull, 5028046059558681087ull,
+ 16734981854115031529ull, 3406150824049276839ull}},
+{{2043946815432777061ull, 10896743592875739263ull,
+ 16307041299216401507ull, 4257688530061596049ull}},
+{{8194995787286567519ull, 4504621736333643087ull,
+ 3274371784369169086ull, 2661055331288497531ull}},
+{{5632058715680821495ull, 14854149207271829667ull,
+ 17928022785743625069ull, 3326319164110621913ull}},
+{{2428387376173638965ull, 4732628453807623372ull,
+ 8574970426897367625ull, 4157898955138277392ull}},
+{{10741114146963300161ull, 14487107829698234367ull,
+ 5359356516810854765ull, 2598686846961423370ull}},
+{{8814706665276737297ull, 4273826731840629247ull,
+ 15922567682868344265ull, 3248358558701779212ull}},
+{{6406697313168533717ull, 9953969433228174463ull,
+ 1456465529875878715ull, 4060448198377224016ull}},
+{{10921714848371415430ull, 3915387886553915087ull,
+ 910290956172424197ull, 2537780123985765010ull}},
+{{9040457542036881383ull, 9505920876619781763ull,
+ 10361235732070306054ull, 3172225154982206262ull}},
+{{6688885909118713824ull, 2659029058919951396ull,
+ 3728172628233106760ull, 3965281443727757828ull}},
+{{13403925730053971948ull, 1661893161824969622ull,
+ 11553479929500467533ull, 2478300902329848642ull}},
+{{7531535125712689127ull, 6689052470708599932ull,
+ 5218477875020808608ull, 3097876127912310803ull}},
+{{9414418907140861409ull, 8361315588385749915ull,
+ 1911411325348622856ull, 3872345159890388504ull}},
+{{3578168807749344429ull, 5225822242741093697ull,
+ 1194632078342889285ull, 2420215724931492815ull}},
+{{9084397028114068440ull, 11143963821853755025ull,
+ 15328348153210775318ull, 3025269656164366018ull}},
+{{15967182303569973454ull, 4706582740462417973ull,
+ 9937063154658693340ull, 3781587070205457523ull}},
+{{12285331948944927361ull, 12164986249643787041ull,
+ 3904821462447989385ull, 2363491918878410952ull}},
+{{1521606880898995489ull, 1371174756772570090ull,
+ 4881026828059986732ull, 2954364898598013690ull}},
+{{11125380637978520169ull, 1713968445965712612ull,
+ 15324655571929759223ull, 3692956123247517112ull}},
+{{16176734935591350914ull, 7988759306369652238ull,
+ 9577909732456099514ull, 2308097577029698195ull}},
+{{10997546632634412834ull, 762577096107289490ull,
+ 7360701147142736489ull, 2885121971287122744ull}},
+{{4523561253938240235ull, 5564907388561499767ull,
+ 9200876433928420611ull, 3606402464108903430ull}},
+{{1042765548995412389ull, 2344448217274486805ull,
+ 2277723505555749956ull, 4508003080136129288ull}},
+{{2957571477335826695ull, 10688652172651330061ull,
+ 1423577190972343722ull, 2817501925085080805ull}},
+{{8308650365097171273ull, 4137443178959386768ull,
+ 6391157507142817557ull, 3521877406356351006ull}},
+{{10385812956371464091ull, 9783489992126621364ull,
+ 17212318920783297754ull, 4402346757945438757ull}},
+{{15714505134586940865ull, 10726367263506526256ull,
+ 13063542334703255048ull, 2751466723715899223ull}},
+{{1196387344524124465ull, 13407959079383157821ull,
+ 11717741899951680906ull, 3439333404644874029ull}},
+{{6107170199082543486ull, 7536576812374171468ull, 812119319657437421ull,
+ 4299166755806092537ull}},
+{{13040353411281365487ull, 7016203516947551119ull,
+ 12036789620854368148ull, 2686979222378807835ull}},
+{{11688755745674318954ull, 8770254396184438899ull,
+ 10434301007640572281ull, 3358724027973509794ull}},
+{{9999258663665510789ull, 15574504013657936528ull,
+ 3819504222695939543ull, 4198405034966887243ull}},
+{{6249536664790944243ull, 16651594036177292186ull, 81347129971268262ull,
+ 2624003146854304527ull}},
+{{17035292867843456112ull, 11591120508366839424ull,
+ 13936741967746249040ull, 3280003933567880658ull}},
+{{2847372011094768524ull, 14488900635458549281ull,
+ 8197555422828035492ull, 4100004916959850823ull}},
+{{13308822553002700087ull, 18278934934016369108ull,
+ 12041001166908604038ull, 2562503073099906764ull}},
+{{16636028191253375109ull, 13625296630665685577ull,
+ 15051251458635755048ull, 3203128841374883455ull}},
+{{6959977183784555174ull, 17031620788332106972ull,
+ 14202378304867305906ull, 4003911051718604319ull}},
+{{13573357776720122792ull, 15256449011134954761ull,
+ 15794015468183148047ull, 2502444407324127699ull}},
+{{3131639165617989778ull, 14458875245491305548ull,
+ 15130833316801547155ull, 3128055509155159624ull}},
+{{3914548957022487222ull, 13461908038436744031ull,
+ 466797572292382328ull, 3910069386443949531ull}},
+{{9364122125780136370ull, 8413692524022965019ull,
+ 16432649547178596619ull, 2443793366527468456ull}},
+{{7093466638797782559ull, 5905429636601318370ull,
+ 2094067860263694158ull, 3054741708159335571ull}},
+{{18090205335352004006ull, 16605159082606423770ull,
+ 16452642880611781409ull, 3818427135199169463ull}},
+{{15918064353022390408ull, 3460695398987933000ull,
+ 17200430828023445237ull, 2386516959499480914ull}},
+{{1450836367568436394ull, 8937555267162304155ull,
+ 12277166498174530738ull, 2983146199374351143ull}},
+{{15648603514742709204ull, 1948572047098104385ull,
+ 10734772104290775519ull, 3728932749217938929ull}},
+{{2862848169073111397ull, 8135386557077397097ull,
+ 18238447611250204459ull, 2330582968261211830ull}},
+{{8190246229768777150ull, 5557547177919358467ull,
+ 13574687477207979766ull, 2913228710326514788ull}},
+{{5626121768783583533ull, 16170306009253973892ull,
+ 16968359346509974707ull, 3641535887908143485ull}},
+{{7032652210979479417ull, 15601196493140079461ull,
+ 7375391127855304672ull, 4551919859885179357ull}},
+{{6701250641075868588ull, 9750747808212549663ull,
+ 6915462464123259372ull, 2844949912428237098ull}},
+{{3764877282917447830ull, 12188434760265687079ull,
+ 17867700117008850023ull, 3556187390535296372ull}},
+{{94410585219421884ull, 10623857431904720945ull, 3887881072551510913ull,
+ 4445234238169120466ull}},
+{{11588221661830608438ull, 18169125941008920350ull,
+ 7041611688772082224ull, 2778271398855700291ull}},
+{{5261905040433484739ull, 4264663352551598822ull,
+ 4190328592537714877ull, 3472839248569625364ull}},
+{{15800753337396631731ull, 9942515209116886431ull,
+ 5237910740672143596ull, 4341049060712031705ull}},
+{{16792999863513976688ull, 15437444042552829827ull,
+ 14802909258988559507ull, 2713155662945019815ull}},
+{{16379563810965082956ull, 14685119034763649380ull,
+ 13891950555308311480ull, 3391444578681274769ull}},
+{{2027710689996802079ull, 18356398793454561726ull,
+ 3529880138853225638ull, 4239305723351593462ull}},
+{{15102377236530165012ull, 6861063227481713174ull,
+ 16041233142065429736ull, 2649566077094745913ull}},
+{{9654599508807930456ull, 8576329034352141468ull,
+ 6216483372299623458ull, 3311957596368432392ull}},
+{{12068249386009913070ull, 1497039256085401027ull,
+ 7770604215374529323ull, 4139946995460540490ull}},
+{{5236812857042501717ull, 17076550599549233306ull,
+ 9468313653036468730ull, 2587466872162837806ull}},
+{{15769388108157902954ull, 12122316212581765824ull,
+ 2612020029440810105ull, 3234333590203547258ull}},
+{{1264991061487827077ull, 1317837210445043569ull,
+ 12488397073655788440ull, 4042916987754434072ull}},
+{{12319834459498361683ull, 823648256528152230ull,
+ 7805248171034867775ull, 2526823117346521295ull}},
+{{6176421037518176296ull, 14864618375942354000ull,
+ 5144874195366196814ull, 3158528896683151619ull}},
+{{7720526296897720370ull, 9357400933073166692ull,
+ 1819406725780358114ull, 3948161120853939524ull}},
+{{14048700972415851039ull, 10460061601598117086ull,
+ 10360501240467499629ull, 2467600700533712202ull}},
+{{8337504178665037991ull, 17686763020425034262ull,
+ 3727254513729598728ull, 3084500875667140253ull}},
+{{1198508186476521681ull, 3661709701821741212ull,
+ 9270754160589386315ull, 3855626094583925316ull}},
+{{9972439653402601859ull, 18429469628134445921ull,
+ 15017593387223142254ull, 2409766309114953322ull}},
+{{17077235585180640227ull, 13813464998313281593ull,
+ 9548619697174152010ull, 3012207886393691653ull}},
+{{7511486426193636572ull, 8043459211036826184ull,
+ 16547460639895077917ull, 3765259857992114566ull}},
+{{4694679016371022858ull, 7333005016111710317ull,
+ 5730476881507035794ull, 2353287411245071604ull}},
+{{10480034788891166476ull, 18389628306994413704ull,
+ 7163096101883794742ull, 2941609264056339505ull}},
+{{13100043486113958095ull, 13763663346888241322ull,
+ 13565556145782131332ull, 3677011580070424381ull}},
+{{7151682320787671810ull, 17204579183610301653ull,
+ 3121887126945500453ull, 4596264475088030477ull}},
+{{6775644459705988834ull, 13058704998970132485ull,
+ 4257022463554631735ull, 2872665296930019048ull}},
+{{13081241593059873946ull, 11711695230285277702ull,
+ 5321278079443289669ull, 3590831621162523810ull}},
+{{7128179954470066624ull, 804560982574433416ull,
+ 15874969636158887895ull, 4488539526453154762ull}},
+{{4455112471543791640ull, 7420379641750102741ull,
+ 14533542041026692838ull, 2805337204033221726ull}},
+{{10180576607857127454ull, 52102515332852618ull, 8943555514428590240ull,
+ 3506671505041527158ull}},
+{{3502348722966633510ull, 65128144166065773ull, 1956072356180961992ull,
+ 4383339381301908948ull}},
+{{4494810961067839896ull, 40705090103791108ull, 10445917259467877053ull,
+ 2739587113313693092ull}},
+{{5618513701334799869ull, 4662567381057126789ull,
+ 13057396574334846316ull, 3424483891642116365ull}},
+{{11634828145095887741ull, 5828209226321408486ull,
+ 2486687662636394183ull, 4280604864552645457ull}},
+{{2660081572257541934ull, 10560159794091962160ull,
+ 13083394835216216124ull, 2675378040345403410ull}},
+{{3325101965321927418ull, 13200199742614952700ull,
+ 7130871507165494347ull, 3344222550431754263ull}},
+{{4156377456652409272ull, 11888563659841302971ull,
+ 4301903365529480030ull, 4180278188039692829ull}},
+{{291892901194061843ull, 2818666268973426453ull, 4994532612669618971ull,
+ 2612673867524808018ull}},
+{{4976552144919965208ull, 17358390891498946778ull,
+ 15466537802691799521ull, 3265842334406010022ull}},
+{{15444062218004732318ull, 7862930559091519760ull,
+ 10109800216509973594ull, 4082302918007512528ull}},
+{{9652538886252957699ull, 9526017617859587754ull,
+ 6318625135318733496ull, 2551439323754695330ull}},
+{{2842301570961421315ull, 11907522022324484693ull,
+ 17121653456003192678ull, 3189299154693369162ull}},
+{{8164562982129164548ull, 5661030491050830058ull,
+ 12178694783149215040ull, 3986623943366711453ull}},
+{{9714537882258115747ull, 3538144056906768786ull,
+ 9917527248681953352ull, 2491639964604194658ull}},
+{{2919800315967868875ull, 4422680071133460983ull,
+ 3173537023997665882ull, 3114549955755243323ull}},
+{{17484808450241999806ull, 14751722125771602036ull,
+ 17801979335279246064ull, 3893187444694054153ull}},
+{{1704633244546474071ull, 9219826328607251273ull,
+ 4208708056908446934ull, 2433242152933783846ull}},
+{{6742477574110480492ull, 2301410873904288283ull,
+ 14484257107990334476ull, 3041552691167229807ull}},
+{{3816410949210712711ull, 2876763592380360354ull,
+ 13493635366560530191ull, 3801940863959037259ull}},
+{{6996942861684083349ull, 8715506272878807077ull,
+ 6127679094886637417ull, 2376213039974398287ull}},
+{{13357864595532492090ull, 15506068859525896750ull,
+ 3047912850180908867ull, 2970266299967997859ull}},
+{{7473958707560839304ull, 14770900055979983034ull,
+ 17644949118008299796ull, 3712832874959997323ull}},
+{{9282910210652912469ull, 8440498132713588ull, 8722250189541493421ull,
+ 2320520546849998327ull}},
+{{11603637763316140587ull, 4622236641093279889ull,
+ 6291126718499478872ull, 2900650683562497909ull}},
+{{669489148863012021ull, 5777795801366599862ull,
+ 12475594416551736494ull, 3625813354453122386ull}},
+{{10060233472933540834ull, 16445616788563025635ull,
+ 6371120983834894809ull, 4532266693066402983ull}},
+{{3981802911369769070ull, 3360981465210809166ull,
+ 10899479642537891112ull, 2832666683166501864ull}},
+{{14200625676066987145ull, 4201226831513511457ull,
+ 13624349553172363890ull, 3540833353958127330ull}},
+{{3915724039801570219ull, 14474905576246665130ull,
+ 7807064904610679054ull, 4426041692447659163ull}},
+{{7059013543303369291ull, 4435129966726777802ull,
+ 2573572556167980457ull, 2766276057779786977ull}},
+{{18047138965983987422ull, 10155598476835860156ull,
+ 7828651713637363475ull, 3457845072224733721ull}},
+{{4112179633770432661ull, 8082812077617437292ull,
+ 14397500660474092248ull, 4322306340280917151ull}},
+{{11793484307961296221ull, 5051757548510898307ull,
+ 15915966940437389511ull, 2701441462675573219ull}},
+{{10130169366524232372ull, 1703010917211234980ull,
+ 15283272657119348985ull, 3376801828344466524ull}},
+{{12662711708155290465ull, 6740449664941431629ull,
+ 657346747689634615ull, 4221002285430583156ull}},
+{{10220037826810750493ull, 11130310068229476624ull,
+ 9634213754160797442ull, 2638126428394114472ull}},
+{{12775047283513438116ull, 4689515548432069972ull,
+ 12042767192700996803ull, 3297658035492643090ull}},
+{{15968809104391797645ull, 1250208417112699561ull,
+ 5830086954021470196ull, 4122072544365803863ull}},
+{{3062976662603791672ull, 10004752297550213034ull,
+ 10561333373904500728ull, 2576295340228627414ull}},
+{{13052092865109515398ull, 12505940371937766292ull,
+ 3978294680525850102ull, 3220369175285784268ull}},
+{{16315116081386894248ull, 6409053428067432057ull,
+ 4972868350657312628ull, 4025461469107230335ull}},
+{{3279418523225727049ull, 13229030429396920844ull,
+ 10025571746801902248ull, 2515913418192018959ull}},
+{{4099273154032158811ull, 16536288036746151055ull,
+ 7920278665074989906ull, 3144891772740023699ull}},
+{{512405424112810610ull, 11446988009077913011ull,
+ 5288662312916349479ull, 3931114715925029624ull}},
+{{16461154454566364295ull, 14071896533314777487ull,
+ 3305413945572718424ull, 2456946697453143515ull}},
+{{15964757049780567465ull, 17589870666643471859ull,
+ 17966825487248061742ull, 3071183371816429393ull}},
+{{15344260293798321427ull, 12763966296449564016ull,
+ 8623473803777913466ull, 3838979214770536742ull}},
+{{9590162683623950892ull, 12589164953708365414ull,
+ 777985108933808012ull, 2399362009231585464ull}},
+{{2764331317675162807ull, 15736456192135456768ull,
+ 972481386167260015ull, 2999202511539481830ull}},
+{{3455414147093953509ull, 15058884221741933056ull,
+ 10438973769563850827ull, 3749003139424352287ull}},
+{{2159633841933720943ull, 7105959629375014208ull,
+ 13441887633618488623ull, 2343126962140220179ull}},
+{{2699542302417151179ull, 4270763518291379856ull,
+ 12190673523595722875ull, 2928908702675275224ull}},
+{{3374427878021438973ull, 726768379436836916ull,
+ 15238341904494653594ull, 3661135878344094030ull}},
+{{4218034847526798717ull, 10131832511150821953ull,
+ 9824555343763541184ull, 4576419847930117538ull}},
+{{14165486825772718958ull, 6332395319469263720ull,
+ 10752033108279601144ull, 2860262404956323461ull}},
+{{17706858532215898698ull, 7915494149336579650ull,
+ 18051727403776889334ull, 3575328006195404326ull}},
+{{12910201128415097564ull, 670995649815948755ull,
+ 13341287217866335860ull, 4469160007744255408ull}},
+{{5763032696045742026ull, 9642744317989743780ull,
+ 8338304511166459912ull, 2793225004840159630ull}},
+{{7203790870057177532ull, 12053430397487179725ull,
+ 1199508602103299082ull, 3491531256050199538ull}},
+{{13616424605998859819ull, 5843415960004198848ull,
+ 10722757789483899661ull, 4364414070062749422ull}},
+{{8510265378749287387ull, 5957977984216318232ull,
+ 2090037600000049384ull, 2727758793789218389ull}},
+{{10637831723436609233ull, 7447472480270397790ull,
+ 7224233018427449634ull, 3409698492236522986ull}},
+{{4073917617440985734ull, 85968563483221430ull, 18253663309889087851ull,
+ 4262123115295653732ull}},
+{{16381256566182779796ull, 16194631416672871057ull,
+ 2185167531825904098ull, 2663826947059783583ull}},
+{{6641512652446311033ull, 11019917233986313014ull,
+ 16566517470064543835ull, 3329783683824729478ull}},
+{{17525262852412664599ull, 9163210524055503363ull,
+ 11484774800725903986ull, 4162229604780911848ull}},
+{{8647446273544221422ull, 10338692595962077506ull,
+ 7177984250453689991ull, 2601393502988069905ull}},
+{{1585935805075500970ull, 8311679726525208979ull,
+ 13584166331494500393ull, 3251741878735087381ull}},
+{{15817477811626539924ull, 15001285676583899127ull,
+ 3145149859085961779ull, 4064677348418859227ull}},
+{{16803452659907669309ull, 7069960538651243002ull,
+ 18106619726424583776ull, 2540423342761787016ull}},
+{{11780943788029810828ull, 8837450673314053753ull,
+ 4186530584321178104ull, 3175529178452233771ull}},
+{{891121679755099823ull, 11046813341642567192ull, 621477211974084726ull,
+ 3969411473065292214ull}},
+{{556951049846937389ull, 2292572320099216591ull,
+ 14223481312765966666ull, 2480882170665807633ull}},
+{{14531246867590835448ull, 12089087436978796546ull,
+ 3944293585675294620ull, 3101102713332259542ull}},
+{{8940686547633768502ull, 15111359296223495683ull,
+ 14153739018948894083ull, 3876378391665324427ull}},
+{{3282086083057411362ull, 7138756550925990850ull,
+ 6540243877629364850ull, 2422736494790827767ull}},
+{{13325979640676540011ull, 18146817725512264370ull,
+ 3563618828609318158ull, 3028420618488534709ull}},
+{{7434102513990899205ull, 13460150120035554655ull,
+ 9066209554189035602ull, 3785525773110668386ull}},
+{{11563843098885393859ull, 13024279843449609563ull,
+ 10278066989795535155ull, 2365953608194167741ull}},
+{{9843117855179354420ull, 11668663785884624050ull,
+ 17459269755671806848ull, 2957442010242709676ull}},
+{{3080525282119417217ull, 14585829732355780063ull,
+ 3377343120880206944ull, 3696802512803387096ull}},
+{{8842857328965717617ull, 9116143582722362539ull,
+ 2110839450550129340ull, 2310501570502116935ull}},
+{{6441885642779759117ull, 11395179478402953174ull,
+ 16473607368469825387ull, 2888126963127646168ull}},
+{{17275729090329474704ull, 9632288329576303563ull,
+ 2145265136877730118ull, 3610158703909557711ull}},
+{{16982975344484455476ull, 2816988375115603646ull,
+ 16516639476379326360ull, 4512698379886947138ull}},
+{{6002673571875396769ull, 1760617734447252279ull,
+ 14934585691164466879ull, 2820436487429341961ull}},
+{{2891655946416858057ull, 16035830223341229061ull,
+ 4833174058673419886ull, 3525545609286677452ull}},
+{{8226255951448460475ull, 10821415742321760518ull,
+ 6041467573341774858ull, 4406932011608346815ull}},
+{{529723951227899893ull, 11375070857378488228ull,
+ 10693446260979691142ull, 2754332507255216759ull}},
+{{662154939034874866ull, 4995466534868334477ull, 8755121807797226024ull,
+ 3442915634069020949ull}},
+{{5439379692220981486ull, 6244333168585418096ull,
+ 15555588278173920434ull, 4303644542586276186ull}},
+{{3399612307638113429ull, 8514394248793274214ull,
+ 14333928692286088175ull, 2689777839116422616ull}},
+{{13472887421402417594ull, 6031306792564204863ull,
+ 17917410865357610219ull, 3362222298895528270ull}},
+{{12229423258325634089ull, 2927447472277868175ull,
+ 13173391544842236966ull, 4202777873619410338ull}},
+{{14560918564094603162ull, 15664712725455831321ull,
+ 12845055733953786007ull, 2626736171012131461ull}},
+{{4366090149836090240ull, 14969204888392401248ull,
+ 2221261612160068797ull, 3283420213765164327ull}},
+{{5457612687295112800ull, 4876448055208337848ull,
+ 16611635070482249709ull, 4104275267206455408ull}},
+{{3411007929559445500ull, 5353623043718905107ull,
+ 10382271919051406068ull, 2565172042004034630ull}},
+{{18098817967231470587ull, 6692028804648631383ull,
+ 3754467861959481777ull, 3206465052505043288ull}},
+{{18011836440611950330ull, 12976722024238177133ull,
+ 4693084827449352221ull, 4008081315631304110ull}},
+{{13563240784596162908ull, 10416294274362554660ull,
+ 16768236072438008850ull, 2505050822269565068ull}},
+{{16954050980745203635ull, 3796995806098417517ull,
+ 2513551016837959447ull, 3131313527836956336ull}},
+{{7357505670649340832ull, 134558739195633993ull, 3141938771047449309ull,
+ 3914141909796195420ull}},
+{{16127656090224307780ull, 2389942221210965197ull,
+ 11187083768759431626ull, 2446338693622622137ull}},
+{{6324512057498221013ull, 12210799813368482305ull,
+ 148796655667125820ull, 3057923367028277672ull}},
+{{12517326090300164170ull, 15263499766710602881ull,
+ 185995819583907275ull, 3822404208785347090ull}},
+{{905799778796520750ull, 7233844344980432849ull, 4727933405667329951ull,
+ 2389002630490841931ull}},
+{{5743935741923038842ull, 4430619412798153157ull,
+ 1298230738656774535ull, 2986253288113552414ull}},
+{{11791605695831186456ull, 926588247570303542ull,
+ 10846160460175743977ull, 3732816610141940517ull}},
+{{2758067541467103631ull, 12108332700799909474ull,
+ 9084693296823533937ull, 2333010381338712823ull}},
+{{12670956463688655347ull, 1300357820717723130ull,
+ 6744180602602029518ull, 2916262976673391029ull}},
+{{6615323542756043376ull, 10848819312751929721ull,
+ 13041911771679924801ull, 3645328720841738786ull}},
+{{12880840446872442124ull, 18172710159367300055ull,
+ 7079017677745130193ull, 4556660901052173483ull}},
+{{14968054306936358183ull, 4440414821963480678ull,
+ 2118543039377012419ull, 2847913063157608427ull}},
+{{9486695846815671921ull, 938832509026962944ull,
+ 16483236854503429236ull, 3559891328947010533ull}},
+{{11858369808519589901ull, 1173540636283703680ull,
+ 6768988012847122833ull, 4449864161183763167ull}},
+{{7411481130324743689ull, 12262677943745784560ull,
+ 11148146535670533626ull, 2781165100739851979ull}},
+{{9264351412905929611ull, 6104975392827454892ull,
+ 9323497151160779129ull, 3476456375924814974ull}},
+{{11580439266132412013ull, 12242905259461706519ull,
+ 2430999402096198103ull, 4345570469906018718ull}},
+{{14155303568973839364ull, 14569344814804648430ull,
+ 15354432681592287526ull, 2715981543691261698ull}},
+{{8470757424362523397ull, 8988308981651034730ull,
+ 9969668815135583600ull, 3394976929614077123ull}},
+{{1365074743598378438ull, 11235386227063793413ull,
+ 7850400000492091596ull, 4243721162017596404ull}},
+{{3159014723962680476ull, 16245488428769646691ull,
+ 14129872037162333055ull, 2652325726260997752ull}},
+{{17783826460235514307ull, 15695174517534670459ull,
+ 17662340046452916319ull, 3315407157826247190ull}},
+{{17618097056867004980ull, 15007282128490950170ull,
+ 12854553021211369591ull, 4144258947282808988ull}},
+{{15622996678969266017ull, 16297080357947925712ull,
+ 17257467675111881802ull, 2590161842051755617ull}},
+{{1082001775002030905ull, 11147978410580131333ull,
+ 7736776538607688541ull, 3237702302564694522ull}},
+{{5964188237179926535ull, 99914957943000454ull, 447598636404834869ull,
+ 4047127878205868153ull}},
+{{17562675703519617796ull, 2368289857928069235ull,
+ 11808964193821491553ull, 2529454923878667595ull}},
+{{17341658610972134341ull, 7572048340837474448ull,
+ 10149519223849476537ull, 3161818654848334494ull}},
+{{3230329190005616311ull, 14076746444474230965ull,
+ 3463526992957069863ull, 3952273318560418118ull}},
+{{4324798752967204146ull, 15715495555437476209ull,
+ 15999762425880332376ull, 2470170824100261323ull}},
+{{10017684459636393087ull, 1197625370587293645ull,
+ 15388017013923027567ull, 3087713530125326654ull}},
+{{17133791592972879262ull, 15332089768516280768ull,
+ 10011649230549008650ull, 3859641912656658318ull}},
+{{10708619745608049539ull, 14194242123750063384ull,
+ 1645594750665742502ull, 2412276195410411449ull}},
+{{13385774682010061924ull, 8519430617832803422ull,
+ 6668679456759566032ull, 3015345244263014311ull}},
+{{7508846315657801597ull, 10649288272291004278ull,
+ 3724163302522069636ull, 3769181555328767889ull}},
+{{81342928858738094ull, 15879177207036653482ull,
+ 13856817110144763282ull, 2355738472080479930ull}},
+{{9325050697928198425ull, 10625599471941041044ull,
+ 8097649350826178295ull, 2944673090100599913ull}},
+{{11656313372410248032ull, 8670313321498913401ull,
+ 14733747706960110773ull, 3680841362625749891ull}},
+{{735333660230646327ull, 15449577670301029656ull,
+ 13805498615272750562ull, 4601051703282187364ull}},
+{{459583537644153955ull, 14267672062365531439ull,
+ 17851808671400244909ull, 2875657314551367102ull}},
+{{14409537477337356155ull, 3999532022674750586ull,
+ 13091388802395530329ull, 3594571643189208878ull}},
+{{8788549809816919386ull, 9611101046770826137ull,
+ 7140863966139637103ull, 4493214553986511098ull}},
+{{17022058677204044377ull, 12924467181872848191ull,
+ 9074725997264661093ull, 2808259096241569436ull}},
+{{16665887328077667567ull, 2320525922058896527ull,
+ 11343407496580826367ull, 3510323870301961795ull}},
+{{16220673141669696554ull, 16735715457855784371ull,
+ 9567573352298645054ull, 4387904837877452244ull}},
+{{7832077704329866394ull, 5848136142732477328ull,
+ 15203105382041428967ull, 2742440523673407652ull}},
+{{9790097130412332993ull, 2698484159988208756ull, 557137653842234593ull,
+ 3428050654591759566ull}},
+{{12237621413015416241ull, 7984791218412648849ull,
+ 9919794104157569049ull, 4285063318239699457ull}},
+{{730984355493553295ull, 16519709557576375291ull,
+ 17729086361166950415ull, 2678164573899812160ull}},
+{{14748788499649105330ull, 16037950928543081209ull,
+ 3714613877749136403ull, 3347705717374765201ull}},
+{{4600927569279217951ull, 15435752642251463608ull,
+ 9254953365613808408ull, 4184632146718456501ull}},
+{{2875579730799511220ull, 9647345401407164755ull,
+ 8090188862722324207ull, 2615395091699035313ull}},
+{{17429532718781552736ull, 7447495733331568039ull,
+ 14724422096830293163ull, 3269243864623794141ull}},
+{{17175229880049553016ull, 4697683648237072145ull,
+ 4570469565755702742ull, 4086554830779742677ull}},
+{{3816989647389888779ull, 16771110335430333803ull,
+ 5162386487811008165ull, 2554096769237339173ull}},
+{{159551040809973070ull, 7128829864005753542ull,
+ 11064669128191148111ull, 3192620961546673966ull}},
+{{9422810837867242145ull, 4299351311579804023ull,
+ 4607464373384159331ull, 3990776201933342458ull}},
+{{12806785801308108197ull, 381251560523683562ull,
+ 7491351251792487486ull, 2494235126208339036ull}},
+{{6785110214780359438ull, 9699936487509380261ull,
+ 9364189064740609357ull, 3117793907760423795ull}},
+{{13093073786902837202ull, 16736606627814113230ull,
+ 7093550312498373792ull, 3897242384700529744ull}},
+{{3571485098386885347ull, 10460379142383820769ull,
+ 4433468945311483620ull, 2435776490437831090ull}},
+{{9076042391410994588ull, 13075473927979775961ull,
+ 14765208218494130333ull, 3044720613047288862ull}},
+{{15956739007691131139ull, 2509284354692556239ull,
+ 9233138236262887109ull, 3805900766309111078ull}},
+{{16890490907448038818ull, 3874145730896541601ull,
+ 1159025379236916539ull, 2378687978943194424ull}},
+{{7278055579027884810ull, 230996145193289098ull, 1448781724046145674ull,
+ 2973359973678993030ull}},
+{{18320941510639631821ull, 9512117218346387180ull,
+ 11034349191912457900ull, 3716699967098741287ull}},
+{{2227216407294994080ull, 15168445298321267796ull,
+ 13813997272586368043ull, 2322937479436713304ull}},
+{{2784020509118742600ull, 14348870604474196841ull,
+ 17267496590732960054ull, 2903671849295891630ull}},
+{{8091711654825816154ull, 8712716218737970243ull,
+ 12360998701561424260ull, 3629589811619864538ull}},
+{{5502953550104882288ull, 10890895273422462804ull,
+ 6227876340097004517ull, 4536987264524830673ull}},
+{{12662718005670327238ull, 9112652555102733204ull,
+ 15421637758629097583ull, 2835617040328019170ull}},
+{{15828397507087909048ull, 6779129675451028601ull,
+ 10053675161431596171ull, 3544521300410023963ull}},
+{{5950438828577722598ull, 3862226075886397848ull,
+ 7955407933362107310ull, 4430651625512529954ull}},
+{{3719024267861076624ull, 16248949352711162367ull,
+ 9583815976778704972ull, 2769157265945331221ull}},
+{{37094316398957876ull, 1864442617179401343ull, 16591455989400769120ull,
+ 3461446582431664026ull}},
+{{13881425950780861056ull, 2330553271474251678ull,
+ 11515947949896185592ull, 4326808228039580033ull}},
+{{4064205200810650256ull, 1456595794671407299ull, 279938441044034139ull,
+ 2704255142524737521ull}},
+{{468570482585924916ull, 15655802798621422836ull,
+ 4961609069732430577ull, 3380318928155921901ull}},
+{{585713103232406145ull, 5734695442994614833ull,
+ 10813697355592926126ull, 4225398660194902376ull}},
+{{11895285735588723601ull, 17419242707153797982ull,
+ 6758560847245578828ull, 2640874162621813985ull}},
+{{5645735132631128693ull, 3327309310232695862ull,
+ 13059887077484361440ull, 3301092703277267481ull}},
+{{16280540952643686674ull, 4159136637790869827ull,
+ 2489800791573288088ull, 4126365879096584352ull}},
+{{7869495086188610220ull, 2599460398619293642ull,
+ 1556125494733305055ull, 2578978674435365220ull}},
+{{613496820880986966ull, 17084383553556280765ull,
+ 1945156868416631318ull, 3223723343044206525ull}},
+{{5378557044528621612ull, 12132107405090575148ull,
+ 7043132103948177052ull, 4029654178805258156ull}},
+{{12584970189685164316ull, 16805939165036385275ull,
+ 13625329601822386465ull, 2518533861753286347ull}},
+{{11119526718679067490ull, 7172365901013317882ull,
+ 12419975983850595178ull, 3148167327191607934ull}},
+{{4676036361494058555ull, 18188829413121423161ull,
+ 6301597942958468164ull, 3935209158989509918ull}},
+{{14451737772002256357ull, 2144646346346113667ull,
+ 17773556769631206315ull, 2459505724368443698ull}},
+{{13452986196575432542ull, 16515865988214805796ull,
+ 12993573925184232085ull, 3074382155460554623ull}},
+{{16816232745719290677ull, 6809774429986343533ull,
+ 11630281388052902203ull, 3842977694325693279ull}},
+{{12815988475288250626ull, 1950266009527770756ull,
+ 14186454895174145733ull, 2401861058953558299ull}},
+{{16019985594110313282ull, 7049518530337101349ull,
+ 13121382600540294262ull, 3002326323691947874ull}},
+{{6189923937355727890ull, 18035270199776152495ull,
+ 7178356213820592019ull, 3752907904614934843ull}},
+{{10786231488488411788ull, 8966200865646401357ull,
+ 2180629624424176060ull, 2345567440384334277ull}},
+{{18094475379037902638ull, 11207751082058001696ull,
+ 7337473048957607979ull, 2931959300480417846ull}},
+{{4171350150087826682ull, 9398002834145114217ull,
+ 18395213348051785782ull, 3664949125600522307ull}},
+{{9825873706037171256ull, 2524131505826616963ull,
+ 18382330666637344324ull, 4581186407000652884ull}},
+{{3835328057059538083ull, 10800954227996411410ull,
+ 2265584629793564394ull, 2863241504375408053ull}},
+{{14017532108179198412ull, 4277820748140738454ull,
+ 7443666805669343397ull, 3579051880469260066ull}},
+{{8298543098369222207ull, 9958961953603310972ull, 81211470231903438ull,
+ 4473814850586575083ull}},
+{{14409961473335539687ull, 1612665202574681453ull,
+ 16191658233390797313ull, 2796134281616609426ull}},
+{{4177393786387260897ull, 6627517521645739721ull,
+ 11016200754883720833ull, 3495167852020761783ull}},
+{{9833428251411464025ull, 12896082920484562555ull,
+ 9158564925177263137ull, 4368959815025952229ull}},
+{{3840049647918471064ull, 1142522797661769741ull,
+ 8029946087449483413ull, 2730599884391220143ull}},
+{{9411748078325476734ull, 6039839515504600080ull,
+ 5425746590884466362ull, 3413249855489025179ull}},
+{{11764685097906845917ull, 16773171431235525908ull,
+ 2170497220178195048ull, 4266562319361281474ull}},
+{{16576300223046554506ull, 10483232144522203692ull,
+ 5968246781038759809ull, 2666601449600800921ull}},
+{{2273631205098641517ull, 17715726199080142520ull,
+ 12071994494725837665ull, 3333251812001001151ull}},
+{{2842039006373301896ull, 8309599693568014438ull,
+ 10478307099979909178ull, 4166564765001251439ull}},
+{{15611332434265477397ull, 9805185826907396927ull,
+ 13466470965128525092ull, 2604102978125782149ull}},
+{{14902479524404458842ull, 12256482283634246159ull,
+ 2998030651128492653ull, 3255128722657227687ull}},
+{{14016413387078185649ull, 1485544799260643987ull,
+ 17582596369192779529ull, 4068910903321534608ull}},
+{{6454415357710172079ull, 12457680545606372252ull,
+ 10989122730745487205ull, 2543069314575959130ull}},
+{{8068019197137715098ull, 1737042626725801603ull,
+ 4513031376577083199ull, 3178836643219948913ull}},
+{{5473337977994755969ull, 16006361338689415716ull,
+ 10252975239148741902ull, 3973545804024936141ull}},
+{{12644208273101498289ull, 5392289818253496918ull,
+ 8713952533681657641ull, 2483466127515585088ull}},
+{{6581888304522097053ull, 11352048291244259052ull,
+ 10892440667102072051ull, 3104332659394481360ull}},
+{{8227360380652621316ull, 9578374345627935911ull,
+ 13615550833877590064ull, 3880415824243101700ull}},
+{{12059629265548970179ull, 5986483966017459944ull,
+ 17733091308028269598ull, 2425259890151938562ull}},
+{{15074536581936212723ull, 16706476994376600738ull,
+ 12942992098180561189ull, 3031574862689923203ull}},
+{{9619798690565490096ull, 7048038187688587211ull,
+ 11567054104298313583ull, 3789468578362404004ull}},
+{{3706531172389737358ull, 11322552894946448863ull,
+ 16452780852041221797ull, 2368417861476502502ull}},
+{{21477947059783793ull, 318133063400897367ull, 11342604028196751439ull,
+ 2960522326845628128ull}},
+{{13861905489106893454ull, 14232724384533285420ull,
+ 14178255035245939298ull, 3700652908557035160ull}},
+{{17887062967546584217ull, 13507138758760691291ull,
+ 8861409397028712061ull, 2312908067848146975ull}},
+{{17747142691005842367ull, 3048865393168700402ull,
+ 6465075727858502173ull, 2891135084810183719ull}},
+{{12960556326902527150ull, 8422767759888263407ull,
+ 3469658641395739812ull, 3613918856012729649ull}},
+{{11589009390200771034ull, 10528459699860329259ull,
+ 8948759320172062669ull, 4517398570015912061ull}},
+{{4937287859661787944ull, 8886130321626399739ull,
+ 7898817584321233120ull, 2823374106259945038ull}},
+{{1559923806149847026ull, 11107662902032999674ull,
+ 650149943546765592ull, 3529217632824931298ull}},
+{{11173276794542084591ull, 13884578627541249592ull,
+ 10036059466288232798ull, 4411522041031164122ull}},
+{{6983297996588802869ull, 4066175623785893091ull,
+ 10884223184857533403ull, 2757201275644477576ull}},
+{{4117436477308615683ull, 471033511304978460ull,
+ 13605278981071916754ull, 3446501594555596970ull}},
+{{5146795596635769603ull, 9812163925985998883ull,
+ 7783226689485120134ull, 4308126993194496213ull}},
+{{910904238683662050ull, 1520916435313861398ull, 7170359690141894036ull,
+ 2692579370746560133ull}},
+{{10362002335209353370ull, 1901145544142326747ull,
+ 13574635631104755449ull, 3365724213433200166ull}},
+{{8340816900584303809ull, 6988117948605296338ull,
+ 7744922502026168503ull, 4207155266791500208ull}},
+{{9824696581292577785ull, 11285102745519392067ull,
+ 4840576563766355314ull, 2629472041744687630ull}},
+{{7669184708188334327ull, 4883006395044464276ull,
+ 15274092741562719951ull, 3286840052180859537ull}},
+{{9586480885235417908ull, 1492071975378192441ull,
+ 5257557871671236227ull, 4108550065226074422ull}},
+{{17520765599340605953ull, 17073446049107227939ull,
+ 17121031725076686353ull, 2567843790766296513ull}},
+{{17289270980748369537ull, 7506749506101871212ull,
+ 7566231601063694230ull, 3209804738457870642ull}},
+{{3164844652225910305ull, 160064845772563208ull, 234417464474841980ull,
+ 4012255923072338303ull}},
+{{1978027907641193941ull, 9323412565462627813ull,
+ 7064039942937858093ull, 2507659951920211439ull}},
+{{7084220902978880330ull, 16265951725255672670ull,
+ 4218363910244934712ull, 3134574939900264299ull}},
+{{18078648165578376220ull, 1885695582860039221ull,
+ 661268869378780487ull, 3918218674875330374ull}},
+{{13604998112700179090ull, 8096088766928606369ull,
+ 14248351098643901516ull, 2448886671797081483ull}},
+{{3171189585593060150ull, 10120110958660757962ull,
+ 13198752854877488991ull, 3061108339746351854ull}},
+{{13187359018846100996ull, 8038452679898559548ull,
+ 7275069031742085431ull, 3826385424682939818ull}},
+{{17465471423633588931ull, 11941561952577681573ull,
+ 9158604163266191298ull, 2391490890426837386ull}},
+{{7996781224259822451ull, 5703580403867326159ull,
+ 2224883167227963315ull, 2989363613033546733ull}},
+{{5384290511897390160ull, 2517789486406769795ull,
+ 7392789977462342048ull, 3736704516291933416ull}},
+{{1059338560722174898ull, 1573618429004231122ull,
+ 4620493735913963780ull, 2335440322682458385ull}},
+{{10547545237757494430ull, 1967023036255288902ull,
+ 10387303188319842629ull, 2919300403353072981ull}},
+{{3961059510342092230ull, 7070464813746499032ull,
+ 17595815003827191190ull, 3649125504191341226ull}},
+{{4951324387927615287ull, 18061453054037899598ull,
+ 12771396717929213179ull, 4561406880239176533ull}},
+{{16929635797736923267ull, 8982565149559993296ull,
+ 10287965957919452189ull, 2850879300149485333ull}},
+{{2715300673461602467ull, 15839892455377379525ull,
+ 17471643465826703140ull, 3563599125186856666ull}},
+{{8005811860254390988ull, 1353121495512172790ull,
+ 12616182295428603118ull, 4454498906483570833ull}},
+{{391946394231606464ull, 14680758989977271706ull, 967584907001795092ull,
+ 2784061816552231771ull}},
+{{9713305029644283887ull, 18350948737471589632ull,
+ 15044539189034407577ull, 3480077270690289713ull}},
+{{12141631287055354859ull, 9103627866557323328ull,
+ 4970615931010845760ull, 4350096588362862142ull}},
+{{7588519554409596787ull, 5689767416598327080ull,
+ 16941693012163942312ull, 2718810367726788838ull}},
+{{9485649443011995984ull, 7112209270747908850ull,
+ 11953744228350152082ull, 3398512959658486048ull}},
+{{2633689766910219172ull, 18113633625289661871ull,
+ 14942180285437690102ull, 4248141199573107560ull}},
+{{8563585131959968839ull, 6709334997378650765ull,
+ 9338862678398556314ull, 2655088249733192225ull}},
+{{15316167433377348952ull, 17610040783578089264ull,
+ 16285264366425583296ull, 3318860312166490281ull}},
+{{698465218012134574ull, 3565806905763059965ull, 6521522402749815409ull,
+ 4148575390208112852ull}},
+{{2742383770471278061ull, 13757844362170382238ull,
+ 13299323538573410438ull, 2592859618880070532ull}},
+{{12651351749943873384ull, 7973933415858201989ull,
+ 16624154423216763048ull, 3241074523600088165ull}},
+{{1979131632147678018ull, 9967416769822752487ull,
+ 6945134973738790098ull, 4051343154500110207ull}},
+{{8154486297733380617ull, 10841321499566608208ull,
+ 11258238386227825667ull, 2532089471562568879ull}},
+{{10193107872166725772ull, 8939965856030872356ull,
+ 9461111964357394180ull, 3165111839453211099ull}},
+{{12741384840208407214ull, 11174957320038590445ull,
+ 7214703937019354821ull, 3956389799316513874ull}},
+{{10269208534343948461ull, 9290191334237812980ull,
+ 9120875979064484667ull, 2472743624572821171ull}},
+{{12836510667929935576ull, 7001053149369878321ull,
+ 6789408955403217930ull, 3090929530716026464ull}},
+{{2210580279630255758ull, 17974688473567123710ull,
+ 8486761194254022412ull, 3863661913395033080ull}},
+{{15216670730051073561ull, 2010808259124676510ull,
+ 5304225746408764008ull, 2414788695871895675ull}},
+{{9797466375709066143ull, 2513510323905845638ull,
+ 2018596164583567106ull, 3018485869839869594ull}},
+{{3023460932781556871ull, 12365259941737082856ull,
+ 11746617242584234690ull, 3773107337299836992ull}},
+{{1889663082988473044ull, 12339973482013064689ull,
+ 7341635776615146681ull, 2358192085812398120ull}},
+{{6973764872162979209ull, 1589908797234167149ull,
+ 9177044720768933352ull, 2947740107265497650ull}},
+{{13328892108631111916ull, 1987385996542708936ull,
+ 2247933864106390882ull, 3684675134081872063ull}},
+{{16661115135788889895ull, 11707604532533161978ull,
+ 16644975385415152314ull, 4605843917602340078ull}},
+{{15024882978295444088ull, 11928938851260614140ull,
+ 5791423597457082292ull, 2878652448501462549ull}},
+{{334359649159753494ull, 14911173564075767676ull,
+ 11850965515248740769ull, 3598315560626828186ull}},
+{{417949561449691868ull, 4803908899812545883ull, 5590334857206150154ull,
+ 4497894450783535233ull}},
+{{16402119540401915081ull, 7614129080810229080ull,
+ 15023174331822313606ull, 2811184031739709520ull}},
+{{2055905351792842236ull, 294289314158010543ull, 332223841068340392ull,
+ 3513980039674636901ull}},
+{{16404939745023216507ull, 367861642697513178ull,
+ 5026965819762813394ull, 4392475049593296126ull}},
+{{14864773359066898221ull, 4841599545113333640ull,
+ 16976911692633922083ull, 2745296905995810078ull}},
+{{134222625124071160ull, 1440313412964279147ull,
+ 11997767578937626796ull, 3431621132494762598ull}},
+{{14002836336687252662ull, 1800391766205348933ull,
+ 5773837436817257687ull, 4289526415618453248ull}},
+{{11057615719643226866ull, 8042773881519424939ull,
+ 3608648398010786054ull, 2680954009761533280ull}},
+{{9210333631126645678ull, 830095315044505366ull, 4510810497513482568ull,
+ 3351192512201916600ull}},
+{{2289545002053531289ull, 1037619143805631708ull,
+ 5638513121891853210ull, 4188990640252395750ull}},
+{{10654337663138232864ull, 5260197983305907721ull,
+ 17359128756464571968ull, 2618119150157747343ull}},
+{{17929608097350178984ull, 6575247479132384651ull,
+ 17087224927153327056ull, 3272648937697184179ull}},
+{{17800324103260335826ull, 8219059348915480814ull,
+ 16747345140514270916ull, 4090811172121480224ull}},
+{{6513516546110321987ull, 14360284129926951317ull,
+ 10467090712821419322ull, 2556756982575925140ull}},
+{{12753581701065290388ull, 8726983125553913338ull,
+ 13083863391026774153ull, 3195946228219906425ull}},
+{{6718605089476837177ull, 15520414925369779577ull,
+ 2519771183501303979ull, 3994932785274883032ull}},
+{{15728343226991492996ull, 7394416319142418283ull,
+ 1574856989688314987ull, 2496832990796801895ull}},
+{{15048743015311978341ull, 4631334380500634950ull,
+ 15803629292392557446ull, 3121041238496002368ull}},
+{{9587556732285197118ull, 15012540012480569496ull,
+ 1307792541781145191ull, 3901301548120002961ull}},
+{{5992222957678248199ull, 16300366535441437791ull,
+ 12346585384681685504ull, 2438313467575001850ull}},
+{{2878592678670422344ull, 1928714095592245623ull,
+ 6209859693997331073ull, 3047891834468752313ull}},
+{{17433298903620191642ull, 7022578637917694932ull,
+ 12374010635924051745ull, 3809864793085940391ull}},
+{{1672439777907843969ull, 15918326694767029093ull,
+ 14651285675093614196ull, 2381165495678712744ull}},
+{{6702235740812192865ull, 1451164294749234750ull,
+ 18314107093867017746ull, 2976456869598390930ull}},
+{{17601166712870016889ull, 11037327405291319245ull,
+ 13669261830478996374ull, 3720571086997988663ull}},
+{{13306572204757454508ull, 2286643609879686624ull,
+ 15460817671690454590ull, 2325356929373742914ull}},
+{{16633215255946818134ull, 12081676549204384088ull,
+ 10102650052758292429ull, 2906696161717178643ull}},
+{{2344774996223971052ull, 1267037631223316399ull,
+ 8016626547520477633ull, 3633370202146473304ull}},
+{{16766026800562127527ull, 6195483057456533402ull,
+ 10020783184400597041ull, 4541712752683091630ull}},
+{{15090452768778717608ull, 15401391956978803136ull,
+ 1651303471822985246ull, 2838570470426932269ull}},
+{{416321887263845394ull, 10028367909368728113ull,
+ 6675815358206119462ull, 3548213088033665336ull}},
+{{5132088377507194647ull, 3312087849856134333ull,
+ 8344769197757649328ull, 4435266360042081670ull}},
+{{5513398245155690606ull, 2070054906160083958ull, 603794730171142926ull,
+ 2772041475026301044ull}},
+{{16115119843299389066ull, 11810940669554880755ull,
+ 754743412713928657ull, 3465051843782876305ull}},
+{{15532213785696848428ull, 928617781661437232ull,
+ 5555115284319798726ull, 4331314804728595381ull}},
+{{9707633616060530268ull, 14415444168820561982ull,
+ 5777790061913568155ull, 2707071752955372113ull}},
+{{2911169983220887027ull, 13407619192598314574ull,
+ 11833923595819348098ull, 3383839691194215141ull}},
+{{12862334515880884591ull, 7536151953893117409ull,
+ 957346439492021411ull, 4229799613992768927ull}},
+{{1121430044784471014ull, 2404251961969504429ull,
+ 7515870552323595238ull, 2643624758745480579ull}},
+{{6013473574407976671ull, 12228686989316656344ull,
+ 4783152171977106143ull, 3304530948431850724ull}},
+{{7516841968009970839ull, 10674172718218432526ull,
+ 5978940214971382679ull, 4130663685539813405ull}},
+{{86340211578843870ull, 13588886976527602185ull, 6042680643570808126ull,
+ 2581664803462383378ull}},
+{{4719611282900942742ull, 7762736683804726923ull,
+ 16776722841318285966ull, 3227081004327979222ull}},
+{{1287828085198790523ull, 480048817901132846ull,
+ 11747531514793081650ull, 4033851255409974028ull}},
+{{14639950608531407789ull, 4911716529615595932ull,
+ 16565579233600451839ull, 2521157034631233767ull}},
+{{18299938260664259736ull, 1527959643592107011ull,
+ 16095288023573176895ull, 3151446293289042209ull}},
+{{18263236807402936766ull, 15745007609772297476ull,
+ 6284051974184307406ull, 3939307866611302762ull}},
+{{2191150967772059671ull, 5228943737680298019ull,
+ 8539218502292580033ull, 2462067416632064226ull}},
+{{16573996764997238301ull, 11147865690527760427ull,
+ 1450651091010949233ull, 3077584270790080283ull}},
+{{16105809937819159972ull, 99774057877536822ull,
+ 15648371919045850254ull, 3846980338487600353ull}},
+{{5454445192709587079ull, 13897416841455624226ull,
+ 2862703421762574552ull, 2404362711554750221ull}},
+{{16041428527741759656ull, 17371771051819530282ull,
+ 8190065295630606094ull, 3005453389443437776ull}},
+{{10828413622822423762ull, 12491341777919637045ull,
+ 10237581619538257618ull, 3756816736804297220ull}},
+{{9073601523477708803ull, 12418774629627161057ull,
+ 15621860549066186819ull, 2348010460502685762ull}},
+{{15953687922774523908ull, 10911782268606563417ull,
+ 10303953649477957716ull, 2935013075628357203ull}},
+{{6107051848185991173ull, 13639727835758204272ull,
+ 8268256043420059241ull, 3668766344535446504ull}},
+{{7633814810232488966ull, 3214601739415591628ull,
+ 10335320054275074052ull, 4585957930669308130ull}},
+{{13994506293250081412ull, 11232498123989520575ull,
+ 11071261052349309186ull, 2866223706668317581ull}},
+{{12881446848135213861ull, 4817250618132124911ull, 4018260154472771ull,
+ 3582779633335396977ull}},
+{{11490122541741629422ull, 1409877254237768235ull,
+ 4616708843620478868ull, 4478474541669246221ull}},
+{{4875483579374824437ull, 10104545320753380955ull,
+ 5191286036476493244ull, 2799046588543278888ull}},
+{{1482668455791142642ull, 12630681650941726194ull,
+ 6489107545595616555ull, 3498808235679098610ull}},
+{{11076707606593704110ull, 11176666045249769838ull,
+ 17334756468849296502ull, 4373510294598873262ull}},
+{{2311256235693677165ull, 2373730259853718245ull,
+ 6222536774603422410ull, 2733443934124295789ull}},
+{{7500756313044484360ull, 12190534861671923614ull,
+ 12389856986681665916ull, 3416804917655369736ull}},
+{{152573354450829642ull, 15238168577089904518ull,
+ 15487321233352082395ull, 4271006147069212170ull}},
+{{13930416401813932239ull, 7218012351467496371ull,
+ 14291261789272439401ull, 2669378841918257606ull}},
+{{12801334483840027394ull, 13634201457761758368ull,
+ 8640705199735773443ull, 3336723552397822008ull}},
+{{16001668104800034243ull, 12431065803774810056ull,
+ 10800881499669716804ull, 4170904440497277510ull}},
+{{10001042565500021402ull, 16992788164214032093ull,
+ 2138864918866185098ull, 2606815275310798444ull}},
+{{17112989225302414656ull, 12017613168412764308ull,
+ 2673581148582731373ull, 3258519094138498055ull}},
+{{2944492457918466704ull, 1186958405233791674ull,
+ 17177034491010577929ull, 4073148867673122568ull}},
+{{6451993804626429594ull, 12271064049339589556ull,
+ 10735646556881611205ull, 2545718042295701605ull}},
+{{8064992255783036993ull, 1503772006392323233ull,
+ 18031244214529401911ull, 3182147552869627006ull}},
+{{14692926338156184145ull, 15714773063272567753ull,
+ 13315683231306976580ull, 3977684441087033758ull}},
+{{2265549933706533235ull, 598361127690579038ull, 3710616001139472459ull,
+ 2486052775679396099ull}},
+{{12055309453987942351ull, 14583009464895387509ull,
+ 26583982996952669ull, 3107565969599245124ull}},
+{{1234078762202764227ull, 4393703775837070675ull, 33229978746190837ull,
+ 3884457461999056405ull}},
+{{16912200290872585306ull, 5051907869111863123ull,
+ 2326611745930063225ull, 2427785913749410253ull}},
+{{16528564345163343728ull, 10926570854817216808ull,
+ 7519950700839966935ull, 3034732392186762816ull}},
+{{2213961357744628044ull, 9046527550094133107ull,
+ 9399938376049958669ull, 3793415490233453520ull}},
+{{17524626913086250192ull, 7959922728022527143ull,
+ 5874961485031224168ull, 2370884681395908450ull}},
+{{17294097622930424836ull, 9949903410028158929ull,
+ 16567073893143806018ull, 2963605851744885562ull}},
+{{7782563973380867332ull, 3214007225680422854ull,
+ 11485470329574981715ull, 3704507314681106953ull}},
+{{252416464935654179ull, 18149655580546121948ull, 260889928343281715ull,
+ 2315317071675691846ull}},
+{{315520581169567724ull, 18075383457255264531ull,
+ 9549484447283877952ull, 2894146339594614807ull}},
+{{14229458781744123366ull, 4147485247859529047ull,
+ 7325169540677459537ull, 3617682924493268509ull}},
+{{13175137458752766304ull, 9796042578251799213ull,
+ 13768147944274212325ull, 4522103655616585636ull}},
+{{10540303920934172892ull, 8428369620621068460ull,
+ 17828464502026158511ull, 2826314784760366022ull}},
+{{13175379901167716115ull, 5923776007348947671ull,
+ 13062208590677922331ull, 3532893480950457528ull}},
+{{11857538858032257240ull, 2793033990758796685ull,
+ 16327760738347402914ull, 4416116851188071910ull}},
+{{9716804795483854727ull, 6357332262651635832ull,
+ 5593164443039738917ull, 2760073031992544944ull}},
+{{12146005994354818409ull, 12558351346741932694ull,
+ 6991455553799673646ull, 3450091289990681180ull}},
+{{5959135456088747203ull, 6474567146572640060ull,
+ 8739319442249592058ull, 4312614112488351475ull}},
+{{12947831696910242810ull, 8658290485035287941ull,
+ 3156231642192301084ull, 2695383820305219672ull}},
+{{2349731565855639800ull, 10822863106294109927ull,
+ 3945289552740376355ull, 3369229775381524590ull}},
+{{16772222512601713462ull, 8916892864440249504ull,
+ 14154983977780246252ull, 4211537219226905737ull}},
+{{10482639070376070914ull, 14796430077129931748ull,
+ 1929335958471572051ull, 2632210762016816086ull}},
+{{13103298837970088642ull, 13883851577985026781ull,
+ 11635041984944240872ull, 3290263452521020107ull}},
+{{2544065492180447091ull, 17354814472481283477ull,
+ 9932116462752913186ull, 4112829315651275134ull}},
+{{3895883941826473384ull, 15458445063728190077ull,
+ 1595886770793182837ull, 2570518322282046959ull}},
+{{9481540945710479634ull, 5487998274378073884ull,
+ 15829916518773642259ull, 3213147902852558698ull}},
+{{11851926182138099542ull, 2248311824545204451ull,
+ 10564023611612277016ull, 4016434878565698373ull}},
+{{5101610854622618262ull, 1405194890340752782ull,
+ 8908357766471367087ull, 2510271799103561483ull}},
+{{15600385605133048635ull, 15591551668208104689ull,
+ 6523761189661820954ull, 3137839748879451854ull}},
+{{5665423951134147082ull, 10266067548405355054ull,
+ 17378073523932052001ull, 3922299686099314817ull}},
+{{17375948024741005638ull, 17945507263821816668ull,
+ 3943766924816450644ull, 2451437303812071761ull}},
+{{3273190957216705432ull, 3985140006067719220ull,
+ 9541394674447951210ull, 3064296629765089701ull}},
+{{4091488696520881790ull, 14204797044439424833ull,
+ 16538429361487326916ull, 3830370787206362126ull}},
+{{14086395481394020879ull, 18101370189629416328ull,
+ 5724832332502191418ull, 2393981742003976329ull}},
+{{17607994351742526098ull, 13403340700181994602ull,
+ 11767726434055127177ull, 2992477177504970411ull}},
+{{12786620902823381815ull, 2919117819945329541ull,
+ 10097972024141521068ull, 3740596471881213014ull}},
+{{10297481073478307587ull, 11047820674320606771ull,
+ 1699546496661062763ull, 2337872794925758134ull}},
+{{8260165323420496579ull, 9198089824473370560ull,
+ 11347805157681104262ull, 2922340993657197667ull}},
+{{10325206654275620724ull, 2274240243736937392ull,
+ 9573070428673992424ull, 3652926242071497084ull}},
+{{12906508317844525904ull, 2842800304671171740ull,
+ 11966338035842490530ull, 4566157802589371355ull}},
+{{17289939735507604498ull, 6388436208846870241ull,
+ 5173118263187862629ull, 2853848626618357097ull}},
+{{7777366614102341911ull, 12597231279485975706ull,
+ 11078083847412216190ull, 3567310783272946371ull}},
+{{498336230773151581ull, 6523167062502693825ull, 9235918790837882334ull,
+ 4459138479091182964ull}},
+{{11840675190301689498ull, 17912037469346347352ull,
+ 14995821281128452266ull, 2786961549431989352ull}},
+{{14800843987877111872ull, 13166674799828158382ull,
+ 298032527701013717ull, 3483701936789986691ull}},
+{{9277682947991614032ull, 2623285444503034266ull,
+ 14207598714908430859ull, 4354627420987483363ull}},
+{{10410237860922146674ull, 17780454467310254080ull,
+ 6573906187604075334ull, 2721642138117177102ull}},
+{{13012797326152683343ull, 13002196047283041792ull,
+ 17440754771359869976ull, 3402052672646471377ull}},
+{{16265996657690854179ull, 16252745059103802240ull,
+ 7965885408917673758ull, 4252565840808089222ull}},
+{{10166247911056783862ull, 5546279643512488496ull,
+ 366992362146158195ull, 2657853650505055764ull}},
+{{12707809888820979827ull, 2321163535963222716ull,
+ 458740452682697744ull, 3322317063131319705ull}},
+{{15884762361026224784ull, 2901454419954028395ull,
+ 5185111584280760084ull, 4152896328914149631ull}},
+{{7622133466427696538ull, 11036781049326043555ull,
+ 10158223767816556908ull, 2595560205571343519ull}},
+{{4915980814607232768ull, 13795976311657554444ull,
+ 8086093691343308231ull, 3244450256964179399ull}},
+{{6144976018259040960ull, 12633284371144555151ull,
+ 5495931095751747385ull, 4055562821205224249ull}},
+{{10758139039052982456ull, 978273704324265113ull,
+ 14964171980913311876ull, 2534726763253265155ull}},
+{{18059359817243615974ull, 1222842130405331391ull,
+ 14093528957714251941ull, 3168408454066581444ull}},
+{{17962513753127132064ull, 6140238681434052143ull,
+ 17616911197142814926ull, 3960510567583226805ull}},
+{{18144100123345539396ull, 17672707231178446301ull,
+ 13316412507427953280ull, 2475319104739516753ull}},
+{{8845067098899760533ull, 3644139965263506261ull,
+ 2810457579002777889ull, 3094148880924395942ull}},
+{{15668019892052088570ull, 9166860975006770730ull,
+ 12736444010608248169ull, 3867686101155494927ull}},
+{{14404198450959943261ull, 17258503155447701466ull,
+ 14877806534271236961ull, 2417303813222184329ull}},
+{{8781876026845153268ull, 7738070889027463121ull,
+ 4762200112556882490ull, 3021629766527730412ull}},
+{{15589031051983829488ull, 449216574429553093ull,
+ 5952750140696103113ull, 3777037208159663015ull}},
+{{12048987416703587382ull, 11809975405086940443ull,
+ 10637997865576146301ull, 2360648255099789384ull}},
+{{10449548252452096324ull, 927411201076511842ull,
+ 13297497331970182877ull, 2950810318874736730ull}},
+{{3838563278710344597ull, 5770950019773027707ull,
+ 7398499628107952788ull, 3688512898593420913ull}},
+{{186518079960542842ull, 7213687524716284634ull,
+ 13859810553562328889ull, 4610641123241776141ull}},
+{{4728259818402727180ull, 16037769749016147656ull,
+ 10968224605190149507ull, 2881650702026110088ull}},
+{{5910324773003408975ull, 15435526167842796666ull,
+ 13710280756487686884ull, 3602063377532637610ull}},
+{{16611278003109037027ull, 847663636093944216ull,
+ 7914478908754832798ull, 4502579221915797013ull}},
+{{10382048751943148142ull, 14364847827840878847ull,
+ 7252392327185464450ull, 2814112013697373133ull}},
+{{8365874921501547273ull, 8732687747946322751ull,
+ 13677176427409218467ull, 3517640017121716416ull}},
+{{5845657633449546188ull, 6304173666505515535ull,
+ 17096470534261523084ull, 4397050021402145520ull}},
+{{10571065048547048223ull, 13163480578420723017ull,
+ 10685294083913451927ull, 2748156263376340950ull}},
+{{17825517329111198183ull, 11842664704598515867ull,
+ 4133245568037039101ull, 3435195329220426188ull}},
+{{17670210642961609825ull, 968272825465981122ull,
+ 5166556960046298877ull, 4293994161525532735ull}},
+{{15655567670278394045ull, 2911013525129932153ull,
+ 10146627127670018654ull, 2683746350953457959ull}},
+{{5734401532565828844ull, 12862138943267191000ull,
+ 8071597891160135413ull, 3354682938691822449ull}},
+{{7168001915707286055ull, 2242615623801825038ull,
+ 14701183382377557171ull, 4193353673364778061ull}},
+{{18315059252599217496ull, 17542535829371998312ull,
+ 11494082623199667183ull, 2620846045852986288ull}},
+{{4447079992039470254ull, 17316483768287609987ull,
+ 14367603278999583979ull, 3276057557316232860ull}},
+{{947163971621949914ull, 17033918691932124580ull,
+ 17959504098749479974ull, 4095071946645291075ull}},
+{{9815349519118494504ull, 6034513164030189958ull,
+ 8918847052504731032ull, 2559419966653306922ull}},
+{{3045814862043342322ull, 7543141455037737448ull,
+ 1925186778776137982ull, 3199274958316633653ull}},
+{{3807268577554177903ull, 205554781942396002ull, 7018169491897560382ull,
+ 3999093697895792066ull}},
+{{6991228879398749093ull, 13963529793996161213ull,
+ 8998041950863363142ull, 2499433561184870041ull}},
+{{13350722117675824270ull, 8231040205640425708ull,
+ 15859238457006591832ull, 3124291951481087551ull}},
+{{16688402647094780338ull, 10288800257050532135ull,
+ 15212362052830851886ull, 3905364939351359439ull}},
+{{17347780682075319567ull, 1818814142229194680ull,
+ 16425255310660364285ull, 2440853087094599649ull}},
+{{3237981778884597843ull, 6885203696213881255ull,
+ 6696511083043291644ull, 3051066358868249562ull}},
+{{17882535278887911016ull, 8606504620267351568ull,
+ 17594010890658890363ull, 3813832948585311952ull}},
+{{11176584549304944385ull, 3073222378453400778ull,
+ 10996256806661806477ull, 2383645592865819970ull}},
+{{4747358649776404673ull, 8453213991494138877ull,
+ 4521948971472482288ull, 2979556991082274963ull}},
+{{10545884330647893745ull, 10566517489367673596ull,
+ 1040750195913214956ull, 3724446238852843704ull}},
+{{15814549743509709399ull, 15827445467709571805ull,
+ 650468872445759347ull, 2327778899283027315ull}},
+{{5933129124104973037ull, 15172620816209576853ull,
+ 14648144145839362896ull, 2909723624103784143ull}},
+{{12028097423558604200ull, 519031946552419450ull,
+ 13698494163871815717ull, 3637154530129730179ull}},
+{{5811749742593479442ull, 5260475951617912217ull,
+ 12511431686412381742ull, 4546443162662162724ull}},
+{{15161558635189394411ull, 17122855525043358847ull,
+ 17043016840862514396ull, 2841526976663851702ull}},
+{{14340262275559355110ull, 2956825332594646943ull,
+ 12080399014223367188ull, 3551908720829814628ull}},
+{{13313641826021805983ull, 3696031665743308679ull,
+ 15100498767779208985ull, 4439885901037268285ull}},
+{{15238555168904710596ull, 13839234837158037684ull,
+ 11743654739075699567ull, 2774928688148292678ull}},
+{{601449887421336628ull, 12687357528020159202ull,
+ 5456196386989848651ull, 3468660860185365848ull}},
+{{9975184396131446593ull, 11247510891597811098ull,
+ 6820245483737310814ull, 4335826075231707310ull}},
+{{10846176266009542025ull, 2418008288821244032ull,
+ 18097711482617982971ull, 2709891297019817068ull}},
+{{13557720332511927531ull, 16857568416308718752ull,
+ 4175395279562927097ull, 3387364121274771336ull}},
+{{16947150415639909414ull, 7236902465103734728ull,
+ 5219244099453658872ull, 4234205151593464170ull}},
+{{10591969009774943384ull, 4523064040689834205ull,
+ 7873713580585924699ull, 2646378219745915106ull}},
+{{17851647280646067134ull, 1042144032434904852ull,
+ 618769938877630066ull, 3307972774682393883ull}},
+{{3867815027098032301ull, 10526052077398406874ull,
+ 14608520478879201294ull, 4134965968352992353ull}},
+{{7029070410363658092ull, 1967096529946616392ull,
+ 2212796271658418953ull, 2584353730220620221ull}},
+{{8786338012954572615ull, 7070556680860658394ull,
+ 7377681358000411595ull, 3230442162775775276ull}},
+{{1759550479338439961ull, 4226509832648435089ull,
+ 9222101697500514494ull, 4038052703469719095ull}},
+{{12628934095654994736ull, 16476626700687435642ull,
+ 12681342588578903414ull, 2523782939668574434ull}},
+{{6562795582713967612ull, 11372411339004518745ull,
+ 6628306198868853460ull, 3154728674585718043ull}},
+{{12815180496819847418ull, 14215514173755648431ull,
+ 3673696730158678921ull, 3943410843232147554ull}},
+{{14927016838153486493ull, 1967167330956198413ull,
+ 6907746474776562230ull, 2464631777020092221ull}},
+{{4823712992409694404ull, 11682331200550023825ull,
+ 13246369111898090691ull, 3080789721275115276ull}},
+{{10641327258939505909ull, 9991227982260141877ull,
+ 16557961389872613364ull, 3850987151593894095ull}},
+{{8956672546050885145ull, 15467889525767364481ull,
+ 17266254896311465208ull, 2406866969746183809ull}},
+{{15807526700990994335ull, 888117833499653985ull,
+ 7747760565107167799ull, 3008583712182729762ull}},
+{{5924350320956579207ull, 14945205347156731194ull,
+ 461328669529183940ull, 3760729640228412203ull}},
+{{8314404969025249908ull, 117381305118181188ull,
+ 16429231482951597627ull, 2350456025142757626ull}},
+{{10393006211281562385ull, 13981784686679890197ull,
+ 11313167316834721225ull, 2938070031428447033ull}},
+{{17602943782529340886ull, 3642172803067699034ull,
+ 306401090761237820ull, 3672587539285558792ull}},
+{{12780307691306900299ull, 4552716003834623793ull,
+ 383001363451547275ull, 4590734424106948490ull}},
+{{1070163279425730831ull, 539604493182945919ull, 4851061870584604951ull,
+ 2869209015066842806ull}},
+{{15172762154564327251ull, 14509563671760846110ull,
+ 15287199375085531996ull, 3586511268833553507ull}},
+{{9742580656350633255ull, 18136954589701057638ull,
+ 14497313200429527091ull, 4483139086041941884ull}},
+{{1477426891791757881ull, 9029753609349467072ull,
+ 18284192787123230240ull, 2801961928776213677ull}},
+{{1846783614739697351ull, 11287192011686833840ull,
+ 9020182928621874088ull, 3502452410970267097ull}},
+{{2308479518424621688ull, 14108990014608542300ull,
+ 15886914679204730514ull, 4378065513712833871ull}},
+{{10666171735870164363ull, 13429804777557726841ull,
+ 16846850702144038427ull, 2736290946070521169ull}},
+{{17944400688265093358ull, 12175569953519770647ull,
+ 7223505322397884322ull, 3420363682588151462ull}},
+{{17818814841903978794ull, 5996090405044937501ull,
+ 18252753689852131211ull, 4275454603235189327ull}},
+{{13442602285403680698ull, 1441713493939391986ull,
+ 18325500083798663863ull, 2672159127021993329ull}},
+{{7579880819899825065ull, 15637199922706403695ull,
+ 9071817049466166116ull, 3340198908777491662ull}},
+{{4863165006447393427ull, 1099755829673453003ull,
+ 2116399274977931838ull, 4175248635971864578ull}},
+{{733635119815926940ull, 14522405448828071839ull,
+ 5934435565288595302ull, 2609530397482415361ull}},
+{{14752101955052072387ull, 8929634774180313990ull,
+ 12029730475038132032ull, 3261912996853019201ull}},
+{{9216755406960314675ull, 11162043467725392488ull,
+ 1202105038515501328ull, 4077391246066274002ull}},
+{{5760472129350196672ull, 6976277167328370305ull,
+ 5363001667499576234ull, 2548369528791421251ull}},
+{{11812276180115133744ull, 17943718496015238689ull,
+ 2092066065947082388ull, 3185461910989276564ull}},
+{{930287169861753468ull, 3982904046309496746ull, 2615082582433852986ull,
+ 3981827388736595705ull}},
+{{5193115499590983822ull, 7101001047370823370ull,
+ 13163641660089627876ull, 2488642117960372315ull}},
+{{15714766411343505585ull, 8876251309213529212ull,
+ 11842866056684646941ull, 3110802647450465394ull}},
+{{1196713940469830365ull, 15707000154944299420ull,
+ 5580210534001032868ull, 3888503309313081743ull}},
+{{9971318249648419786ull, 593503059985411329ull,
+ 10405160611391727399ull, 2430314568320676089ull}},
+{{17075833830487912637ull, 14576936880263927873ull,
+ 17618136782667047152ull, 3037893210400845111ull}},
+{{7509734232827727084ull, 18221171100329909842ull,
+ 17410984959906421036ull, 3797366513001056389ull}},
+{{9305269913944717332ull, 2164859900851417843ull,
+ 13187708609155207100ull, 2373354070625660243ull}},
+{{7019901374003508760ull, 2706074876064272304ull,
+ 11872949743016620971ull, 2966692588282075304ull}},
+{{8774876717504385950ull, 17217651650362504092ull,
+ 14841187178770776213ull, 3708365735352594130ull}},
+{{14707669985295017027ull, 13066875290690259009ull,
+ 13887428005159123037ull, 2317728584595371331ull}},
+{{4549529426336607572ull, 2498536058080660050ull,
+ 12747598988021515893ull, 2897160730744214164ull}},
+{{14910283819775535273ull, 7734856091028212966ull,
+ 15934498735026894866ull, 3621450913430267705ull}},
+{{9414482737864643283ull, 445198076930490400ull, 6083065363501454871ull,
+ 4526813641787834632ull}},
+{{5884051711165402052ull, 7195777825722638356ull,
+ 3801915852188409294ull, 2829258526117396645ull}},
+{{7355064638956752565ull, 18218094319008073753ull,
+ 9364080833662899521ull, 3536573157646745806ull}},
+{{13805516817123328610ull, 8937559843477928479ull,
+ 2481729005223848594ull, 4420716447058432258ull}},
+{{15545977038343162237ull, 10197660920601093203ull,
+ 6162766646692293275ull, 2762947779411520161ull}},
+{{14820785279501564893ull, 8135390132323978600ull,
+ 12315144326792754498ull, 3453684724264400201ull}},
+{{79237525667404500ull, 945865628550197443ull, 1558872353208779411ull,
+ 4317105905330500252ull}},
+{{16190424518037985476ull, 16732067082339731065ull,
+ 10197667257610262939ull, 2698191190831562657ull}},
+{{6402972592265318133ull, 16303397834497275928ull,
+ 17358770090440216578ull, 3372738988539453321ull}},
+{{8003715740331647667ull, 11155875256266819102ull,
+ 7863404557768107011ull, 4215923735674316652ull}},
+{{390636319279891888ull, 4666579025953067987ull,
+ 14137999885459842690ull, 2634952334796447907ull}},
+{{14323353454382028572ull, 15056595819296110791ull,
+ 13060813838397415458ull, 3293690418495559884ull}},
+{{13292505799550147810ull, 9597372737265362681ull,
+ 16326017297996769323ull, 4117113023119449855ull}},
+{{1390287097077760526ull, 3692514951577157724ull,
+ 17121289838889062683ull, 2573195639449656159ull}},
+{{1737858871347200657ull, 3957671044059251ull, 16789926280183940450ull,
+ 3216494549312070199ull}},
+{{16007381644466164533ull, 9228319125659849871ull,
+ 16375721831802537658ull, 4020618186640087749ull}},
+{{16922142555432434689ull, 10379385471964794073ull,
+ 12540669154090279988ull, 2512886366650054843ull}},
+{{7317620139008379650ull, 12974231839955992592ull,
+ 11064150424185462081ull, 3141107958312568554ull}},
+{{9147025173760474562ull, 2382731744662827028ull,
+ 4606815993377051794ull, 3926384947890710693ull}},
+{{14940262770455072409ull, 6100893358841654796ull,
+ 5185103005074351323ull, 2453990592431694183ull}},
+{{228584389359288896ull, 3014430680124680592ull, 1869692737915551250ull,
+ 3067488240539617729ull}},
+{{285730486699111119ull, 12991410387010626548ull,
+ 6948801940821826966ull, 3834360300674522161ull}},
+{{9401953591041720258ull, 3507945473454253688ull,
+ 15872216259082111614ull, 2396475187921576350ull}},
+{{11752441988802150322ull, 13608303878672592918ull,
+ 10616898286997863709ull, 2995593984901970438ull}},
+{{5467180449147912095ull, 3175321793058577436ull,
+ 4047750821892553829ull, 3744492481127463048ull}},
+{{12640359817572220867ull, 4290419129875304849ull,
+ 2529844263682846143ull, 2340307800704664405ull}},
+{{1965391716683112372ull, 751337893916743158ull, 7773991348030945583ull,
+ 2925384750880830506ull}},
+{{11680111682708666273ull, 14774230422678092659ull,
+ 494117148183906170ull, 3656730938601038133ull}},
+{{9988453584958444937ull, 9244415991492840016ull,
+ 5229332453657270617ull, 4570913673251297666ull}},
+{{6242783490599028086ull, 17306975040751494770ull,
+ 7880018801963182039ull, 2856821045782061041ull}},
+{{17026851400103560915ull, 17022032782511980558ull,
+ 14461709520881365453ull, 3571026307227576301ull}},
+{{12060192213274675336ull, 7442482922857811986ull,
+ 4242078845819543105ull, 4463782884034470377ull}},
+{{12149306151724059989ull, 16180766872854602251ull,
+ 14180514324705684200ull, 2789864302521543985ull}},
+{{10574946671227687082ull, 1779214517358701198ull,
+ 3890584850599941539ull, 3487330378151929982ull}},
+{{3995311302179833045ull, 16059076201980540210ull,
+ 14086603100104702731ull, 4359162972689912477ull}},
+{{7108755582289783557ull, 7731079617024143679ull,
+ 11109969946779133159ull, 2724476857931195298ull}},
+{{4274258459434841542ull, 5052163502852791695ull,
+ 4664090396619140641ull, 3405596072413994123ull}},
+{{731137055866164024ull, 10926890396993377523ull,
+ 1218426977346537897ull, 4256995090517492654ull}},
+{{16597861724412210179ull, 18358521544189330711ull,
+ 14596574916123749897ull, 2660621931573432908ull}},
+{{16135641137087874820ull, 9113093874954499677ull,
+ 18245718645154687372ull, 3325777414466791135ull}},
+{{6334493366077679812ull, 11391367343693124597ull,
+ 18195462288015971311ull, 4157221768083488919ull}},
+{{6264901363012243835ull, 14037133617449284729ull,
+ 18289692957651063925ull, 2598263605052180574ull}},
+{{12442812722192692697ull, 3711358966529442199ull,
+ 13638744160209054099ull, 3247829506315225718ull}},
+{{10941829884313477968ull, 27512689734414845ull, 7825058163406541816ull,
+ 4059786882894032148ull}},
+{{9144486686909617682ull, 17195431084009278ull, 14114033388983864443ull,
+ 2537366801808770092ull}},
+{{2207236321782246294ull, 13856552344137175310ull,
+ 17642541736229830553ull, 3171708502260962615ull}},
+{{11982417439082583676ull, 3485632374889305425ull,
+ 17441491151859900288ull, 3964635627826203269ull}},
+{{571481871785532942ull, 2178520234305815891ull,
+ 13206774979126131632ull, 2477897267391377043ull}},
+{{14549410395014079889ull, 2723150292882269863ull,
+ 11896782705480276636ull, 3097371584239221304ull}},
+{{13575076975340211957ull, 3403937866102837329ull,
+ 14870978381850345795ull, 3871714480299026630ull}},
+{{1566894081946550617ull, 18268362230810130995ull,
+ 4682675470229078217ull, 2419821550186891644ull}},
+{{15793675657715351983ull, 9000394733230500031ull,
+ 5853344337786347772ull, 3024776937733614555ull}},
+{{15130408553716802075ull, 11250493416538125039ull,
+ 2704994403805546811ull, 3780971172167018194ull}},
+{{16374034373714083153ull, 4725715376122634197ull,
+ 6302307520805854661ull, 2363106982604386371ull}},
+{{6632484911860440229ull, 10518830238580680651ull,
+ 3266198382579930422ull, 2953883728255482964ull}},
+{{3678920121398162383ull, 3925165761371075006ull,
+ 4082747978224913028ull, 3692354660319353705ull}},
+{{16134383131156015201ull, 11676600637711697686ull,
+ 14080932532459040402ull, 2307721662699596065ull}},
+{{10944606877090243193ull, 5372378760284846300ull,
+ 3766107610291636791ull, 2884652078374495082ull}},
+{{13680758596362803992ull, 2103787431928669971ull,
+ 13931006549719321797ull, 3605815097968118852ull}},
+{{12489262227026117086ull, 7241420308338225368ull,
+ 17413758187149152246ull, 4507268872460148565ull}},
+{{7805788891891323179ull, 18360945747993554567ull,
+ 13189441876181914105ull, 2817043045287592853ull}},
+{{5145550096436766069ull, 9116124129709779497ull,
+ 2651744289945228920ull, 3521303806609491067ull}},
+{{11043623638973345490ull, 11395155162137224371ull,
+ 17149738417713699862ull, 4401629758261863833ull}},
+{{4596421765144646980ull, 2510285957908377328ull,
+ 3801057483429980558ull, 2751018598913664896ull}},
+{{5745527206430808724ull, 12361229484240247468ull,
+ 4751321854287475697ull, 3438773248642081120ull}},
+{{7181909008038510905ull, 1616478800018145623ull,
+ 5939152317859344622ull, 4298466560802601400ull}},
+{{11406222157665151172ull, 14845357305293504726ull,
+ 3711970198662090388ull, 2686541600501625875ull}},
+{{5034405660226663157ull, 109952557907329292ull, 28276729900225082ull,
+ 3358177000627032344ull}},
+{{6293007075283328946ull, 9360812734238937423ull, 35345912375281352ull,
+ 4197721250783790430ull}},
+{{10850658449693162448ull, 5850507958899335889ull,
+ 13857149250516714557ull, 2623575781739869018ull}},
+{{18175009080543840963ull, 11924820967051557765ull,
+ 8098064526291117388ull, 3279469727174836273ull}},
+{{8883703295397637492ull, 14906026208814447207ull,
+ 14734266676291284639ull, 4099337158968545341ull}},
+{{12469843587264605289ull, 16233795408150111360ull,
+ 11514759681895746851ull, 2562085724355340838ull}},
+{{15587304484080756611ull, 15680558241760251296ull,
+ 5170077565514907756ull, 3202607155444176048ull}},
+{{1037386531391394147ull, 1153953728490762505ull,
+ 6462596956893634696ull, 4003258944305220060ull}},
+{{12177581628188091102ull, 721221080306726565ull,
+ 13262495134913297493ull, 2502036840190762537ull}},
+{{1386918979952950166ull, 5513212368810796111ull,
+ 2743060863359458154ull, 3127546050238453172ull}},
+{{15568706780223351419ull, 16114887497868270946ull,
+ 3428826079199322692ull, 3909432562798066465ull}},
+{{14342127756066982541ull, 848432649312893533ull,
+ 13672231345568046443ull, 2443395351748791540ull}},
+{{4092601639801564464ull, 14895598866923280629ull,
+ 17090289181960058053ull, 3054244189685989425ull}},
+{{9727438068179343484ull, 4784440528371937074ull,
+ 7527803422167908855ull, 3817805237107486782ull}},
+{{10691334811039477582ull, 9907804357873542527ull, 93191120427555130ull,
+ 2386128273192179239ull}},
+{{8752482495371959073ull, 3161383410487152351ull,
+ 13951546955816607625ull, 2982660341490224048ull}},
+{{6328917100787560937ull, 8563415281536328343ull,
+ 17439433694770759531ull, 3728325426862780060ull}},
+{{10873102215633307442ull, 3046291541746511262ull,
+ 1676274022376948899ull, 2330203391789237538ull}},
+{{4368005732686858494ull, 17642922482465302790ull,
+ 11318714564825961931ull, 2912754239736546922ull}},
+{{14683379202713348926ull, 17441967084654240583ull,
+ 4925021169177676606ull, 3640942799670683653ull}},
+{{13742537984964298253ull, 12579086818963024921ull,
+ 10767962479899483662ull, 4551178499588354566ull}},
+{{1671557212961604552ull, 3250243243424502672ull,
+ 2118290531509789385ull, 2844486562242721604ull}},
+{{2089446516202005690ull, 8674490072708016244ull,
+ 2647863164387236731ull, 3555608202803402005ull}},
+{{2611808145252507113ull, 6231426572457632401ull,
+ 7921514973911433818ull, 4444510253504252506ull}},
+{{13161595136851286706ull, 8506327626213408154ull,
+ 9562632877122034040ull, 2777818908440157816ull}},
+{{7228621884209332574ull, 10632909532766760193ull,
+ 11953291096402542550ull, 3472273635550197270ull}},
+{{13647463373689053621ull, 4067764879103674433ull,
+ 5718241833648402380ull, 4340342044437746588ull}},
+{{1612135580914576657ull, 11765725086294572329ull,
+ 12797273182885027295ull, 2712713777773591617ull}},
+{{6626855494570608726ull, 10095470339440827507ull,
+ 2161533423324120407ull, 3390892222216989522ull}},
+{{3671883349785873003ull, 8007651905873646480ull,
+ 11925288816009926317ull, 4238615277771236902ull}},
+{{2294927093616170627ull, 7310625450384723002ull,
+ 2841619491578816044ull, 2649134548607023064ull}},
+{{12092030903874989092ull, 9138281812980903752ull,
+ 3552024364473520055ull, 3311418185758778830ull}},
+{{15115038629843736365ull, 6811166247798741786ull,
+ 13663402492446675877ull, 4139272732198473537ull}},
+{{14058585162079723132ull, 6562821914087907568ull,
+ 1622097530138090567ull, 2587045457624045961ull}},
+{{17573231452599653915ull, 3591841374182496556ull,
+ 6639307931100001113ull, 3233806822030057451ull}},
+{{3519795242040015778ull, 9101487736155508600ull,
+ 3687448895447613487ull, 4042258527537571814ull}},
+{{2199872026275009861ull, 12605958862738274731ull,
+ 16139713614936922141ull, 2526411579710982383ull}},
+{{16584898088125926038ull, 1922390523140679701ull,
+ 15562956000243764773ull, 3158014474638727979ull}},
+{{6896064554875243836ull, 7014674172353237531ull,
+ 14842008981877318062ull, 3947518093298409974ull}},
+{{2004197337583333446ull, 18219229413002937169ull,
+ 4664569595245935884ull, 2467198808311506234ull}},
+{{7116932690406554711ull, 4327292692544119845ull,
+ 15054084030912195664ull, 3083998510389382792ull}},
+{{13507851881435581292ull, 5409115865680149806ull,
+ 370860964930692964ull, 3854998137986728491ull}},
+{{3830721407469850404ull, 12604069452904869437ull,
+ 16372689167577540766ull, 2409373836241705306ull}},
+{{9400087777764700909ull, 6531714779276310988ull,
+ 11242489422617150150ull, 3011717295302131633ull}},
+{{11750109722205876136ull, 17388015510950164543ull,
+ 218053722989273975ull, 3764646619127664542ull}},
+{{14261347604019754441ull, 17785038721984934695ull,
+ 13971341632150459946ull, 2352904136954790338ull}},
+{{13214998486597305147ull, 13007926365626392561ull,
+ 8240805003333299125ull, 2941130171193487923ull}},
+{{2683690052964467722ull, 2424849901750826990ull,
+ 5689320235739236003ull, 3676412713991859904ull}},
+{{12577984603060360460ull, 16866120432470697449ull,
+ 7111650294674045003ull, 4595515892489824880ull}},
+{{943711349271643432ull, 8235482261080491954ull, 4444781434171278127ull,
+ 2872197432806140550ull}},
+{{10403011223444330098ull, 5682666807923227038ull,
+ 14779348829568873467ull, 3590246791007675687ull}},
+{{3780391992450636814ull, 2491647491476645894ull,
+ 13862500018533703930ull, 4487808488759594609ull}},
+{{16197803050563811721ull, 6168965700600291587ull,
+ 1746533483942483100ull, 2804880305474746631ull}},
+{{15635567794777376747ull, 7711207125750364484ull,
+ 16018224910210267587ull, 3506100381843433288ull}},
+{{1097715669762169318ull, 5027322888760567702ull,
+ 1576037064053282868ull, 4382625477304291611ull}},
+{{14521130348883519536ull, 12365448842330130621ull,
+ 17125924229529159456ull, 2739140923315182256ull}},
+{{4316354880822235708ull, 15456811052912663277ull,
+ 2960661213201897704ull, 3423926154143977821ull}},
+{{10007129619455182538ull, 874269742431277480ull,
+ 8312512534929760035ull, 4279907692679972276ull}},
+{{6254456012159489087ull, 16687319653515406089ull,
+ 14418692371185875829ull, 2674942307924982672ull}},
+{{12429756033626749262ull, 7024091511612093899ull,
+ 18023365463982344787ull, 3343677884906228340ull}},
+{{10925509023606048674ull, 4168428371087729470ull,
+ 4082462756268379368ull, 4179597356132785426ull}},
+{{2216757121326392517ull, 2605267731929830919ull,
+ 7163225241095125009ull, 2612248347582990891ull}},
+{{16606004456940154358ull, 7868270683339676552ull,
+ 4342345532941518357ull, 3265310434478738614ull}},
+{{2310761497465641332ull, 14447024372601983595ull,
+ 14651303953031673754ull, 4081638043098423267ull}},
+{{17585127000411883497ull, 13641076251303627650ull,
+ 6851221961431102144ull, 2551023776936514542ull}},
+{{12758036713660078563ull, 17051345314129534563ull,
+ 17787399488643653488ull, 3188779721170643177ull}},
+{{11335859873647710299ull, 2867437568952366588ull,
+ 8399191305522403149ull, 3985974651463303972ull}},
+{{16308284457884594745ull, 4097991489808923069ull,
+ 14472866602806277776ull, 2491234157164564982ull}},
+{{6550297517073579719ull, 5122489362261153837ull,
+ 8867711216653071412ull, 3114042696455706228ull}},
+{{12799557914769362553ull, 6403111702826442296ull,
+ 11084639020816339265ull, 3892553370569632785ull}},
+{{7999723696730851596ull, 15531159860334996195ull, 10370360369130184ull,
+ 2432845856606020491ull}},
+{{5387968602486176591ull, 967205751709193628ull,
+ 13848021005743576443ull, 3041057320757525613ull}},
+{{6734960753107720738ull, 15044065244918655747ull,
+ 3474968201897306841ull, 3801321650946907017ull}},
+{{1903507461478631510ull, 2485011750433077986ull,
+ 13701070172254286536ull, 2375826031841816885ull}},
+{{11602756363703065195ull, 3106264688041347482ull,
+ 3291279660035694458ull, 2969782539802271107ull}},
+{{5280073417774055685ull, 13106202896906460161ull,
+ 17949157630326781784ull, 3712228174752838883ull}},
+{{14829260932177254564ull, 8191376810566537600ull,
+ 8912380509740544663ull, 2320142609220524302ull}},
+{{89832091512016588ull, 5627534994780784097ull, 1917103600320905021ull,
+ 2900178261525655378ull}},
+{{4723976132817408639ull, 11646104761903368025ull,
+ 11619751537255907084ull, 3625222826907069222ull}},
+{{10516656184449148703ull, 14557630952379210031ull,
+ 5301317384715108047ull, 4531528533633836528ull}},
+{{13490439142921799796ull, 16016048372878088125ull,
+ 3313323365446942529ull, 2832205333521147830ull}},
+{{3027990873370086032ull, 6185002410815446445ull,
+ 13365026243663453970ull, 3540256666901434787ull}},
+{{8396674610139995444ull, 16954625050374083864ull,
+ 12094596786151929558ull, 4425320833626793484ull}},
+{{5247921631337497153ull, 5984954638056414511ull,
+ 16782495028199731782ull, 2765825521016745927ull}},
+{{1948216020744483537ull, 16704565334425293947ull,
+ 16366432766822276823ull, 3457281901270932409ull}},
+{{16270328081212768133ull, 16269020649604229529ull,
+ 6622982903245682317ull, 4321602376588665512ull}},
+{{3251426023116898227ull, 12473980915216337408ull,
+ 4139364314528551448ull, 2701001485367915945ull}},
+{{4064282528896122784ull, 15592476144020421760ull,
+ 9785891411588077214ull, 3376251856709894931ull}},
+{{5080353161120153480ull, 10267223143170751392ull,
+ 7620678246057708614ull, 4220314820887368664ull}},
+{{3175220725700095925ull, 1805328446054331716ull,
+ 4762923903786067884ull, 2637696763054605415ull}},
+{{3969025907125119906ull, 2256660557567914645ull,
+ 1341968861305196951ull, 3297120953818256769ull}},
+{{9572968402333787787ull, 16655883752242057018ull,
+ 6289147095058884092ull, 4121401192272820961ull}},
+{{10594791269886005271ull, 1186555308296509828ull,
+ 15459931980480272318ull, 2575875745170513100ull}},
+{{13243489087357506588ull, 10706566172225413093ull,
+ 878170901890788781ull, 3219844681463141376ull}},
+{{2719303303914719523ull, 17994893733709154271ull,
+ 1097713627363485976ull, 4024805851828926720ull}},
+{{8617093592587781558ull, 11246808583568221419ull,
+ 686071017102178735ull, 2515503657393079200ull}},
+{{6159680972307339044ull, 9446824711032888870ull, 857588771377723419ull,
+ 3144379571741349000ull}},
+{{16922973252238949613ull, 7196844870363723183ull,
+ 1071985964222154274ull, 3930474464676686250ull}},
+{{17494387310290425364ull, 9109714062404714893ull,
+ 5281677246066234325ull, 2456546540422928906ull}},
+{{8032926082580867993ull, 15998828596433281521ull,
+ 15825468594437568714ull, 3070683175528661132ull}},
+{{14652843621653472895ull, 10775163708686826093ull,
+ 1335091669337409277ull, 3838353969410826416ull}},
+{{11463870272747114512ull, 9040320327142960260ull,
+ 834432293335880798ull, 2398971230881766510ull}},
+{{14329837840933893139ull, 2077028372073924517ull,
+ 10266412403524626806ull, 2998714038602208137ull}},
+{{4077239245885202712ull, 11819657501947181455ull,
+ 17444701522833171411ull, 3748392548252760171ull}},
+{{9465803556319333551ull, 5081442929503294457ull,
+ 8597095442557038180ull, 2342745342657975107ull}},
+{{16443940463826554843ull, 6351803661879118071ull,
+ 6134683284768909821ull, 2928431678322468884ull}},
+{{15943239561355805650ull, 12551440595776285493ull,
+ 7668354105961137276ull, 3660539597903086105ull}},
+{{6093991396412593350ull, 15689300744720356867ull,
+ 14197128650878809499ull, 4575674497378857631ull}},
+{{1502901613544176892ull, 7499969956236529090ull,
+ 15790734434440337793ull, 2859796560861786019ull}},
+{{11101999053784996923ull, 13986648463723049266ull,
+ 15126732024623034337ull, 3574745701077232524ull}},
+{{4654126780376470345ull, 3648252524371647871ull, 461670957069241306ull,
+ 4468432126346540656ull}},
+{{9826358265376375822ull, 6891843846159667823ull, 288544348168275816ull,
+ 2792770078966587910ull}},
+{{7671261813293081873ull, 8614804807699584779ull,
+ 9584052472065120578ull, 3490962598708234887ull}},
+{{4977391248188964438ull, 1545133972769705166ull,
+ 7368379571654012819ull, 4363703248385293609ull}},
+{{16945927585400266486ull, 17106609797476923392ull,
+ 16134452278352227771ull, 2727314530240808505ull}},
+{{2735665408040781491ull, 16771576228418766337ull,
+ 6333007292658121002ull, 3409143162801010632ull}},
+{{8031267778478364768ull, 11741098248668682113ull,
+ 7916259115822651253ull, 4261428953501263290ull}},
+{{16548757407617447740ull, 9644029414631620272ull,
+ 9559347965816544937ull, 2663393095938289556ull}},
+{{2239202685812258059ull, 16666722786716913245ull,
+ 11949184957270681171ull, 3329241369922861945ull}},
+{{7410689375692710477ull, 16221717464968753652ull,
+ 1101423141306187752ull, 4161551712403577432ull}},
+{{13855052896662719857ull, 10138573415605471032ull,
+ 688389463316367345ull, 2600969820252235895ull}},
+{{17318816120828399821ull, 17284902787934226694ull,
+ 14695544884427622893ull, 3251212275315294868ull}},
+{{12425148114180723968ull, 7771070429635619656ull,
+ 18369431105534528617ull, 4064015344144118585ull}},
+{{7765717571362952480ull, 16386134064590732045ull,
+ 4563365413317998529ull, 2540009590090074116ull}},
+{{14318832982631078504ull, 6647609525456251344ull,
+ 5704206766647498162ull, 3175011987612592645ull}},
+{{17898541228288848130ull, 17532883943675089988ull,
+ 11741944476736760606ull, 3968764984515740806ull}},
+{{1963216230825754273ull, 6346366446369543339ull,
+ 2727029279533087475ull, 2480478115322338004ull}},
+{{16289078343814356553ull, 3321272039534541269ull,
+ 3408786599416359344ull, 3100597644152922505ull}},
+{{6526289874485781980ull, 4151590049418176587ull,
+ 8872669267697837084ull, 3875747055191153131ull}},
+{{1773088162339919785ull, 11818115817741136175ull,
+ 3239575283097454225ull, 2422341909494470707ull}},
+{{16051418258207063444ull, 937586716894256506ull,
+ 17884527159153981494ull, 3027927386868088383ull}},
+{{10840900785904053496ull, 10395355432972596441ull,
+ 17743972930515088963ull, 3784909233585110479ull}},
+{{18304778037258503195ull, 4191254136394178823ull,
+ 18007512109213012458ull, 2365568270990694049ull}},
+{{18269286528145741090ull, 14462439707347499337ull,
+ 8674332081234101860ull, 2956960338738367562ull}},
+{{9001550104900012651ull, 18078049634184374172ull,
+ 1619543064687851517ull, 3696200423422959453ull}},
+{{14849340852417283715ull, 13604624030578927809ull,
+ 3318057424643601150ull, 2310125264639349658ull}},
+{{4726618010239440931ull, 7782408001368883954ull,
+ 13370943817659277246ull, 2887656580799187072ull}},
+{{15131644549654076972ull, 504637964856329134ull,
+ 16713679772074096558ull, 3609570725998983840ull}},
+{{9691183650212820407ull, 9854169492925187226ull,
+ 2445355641383069081ull, 4511963407498729801ull}},
+{{10668675799810400659ull, 17688070979146711776ull,
+ 13057562321932887935ull, 2819977129686706125ull}},
+{{13335844749763000823ull, 17498402705506001816ull,
+ 2486894847133946207ull, 3524971412108382657ull}},
+{{16669805937203751029ull, 17261317363455114366ull,
+ 7720304577344820663ull, 4406214265135478321ull}},
+{{5806942692324956489ull, 17705852379800528335ull,
+ 16354405406908982674ull, 2753883915709673950ull}},
+{{2646992346978807707ull, 12908943437895884611ull,
+ 11219634721781452535ull, 3442354894637092438ull}},
+{{17143798489005673346ull, 11524493278942467859ull,
+ 4801171365372039861ull, 4302943618296365548ull}},
+{{8409031046414851889ull, 9508651308552736364ull,
+ 12224104140212300721ull, 2689339761435228467ull}},
+{{10511288808018564862ull, 16497500154118308359ull,
+ 10668444156837987997ull, 3361674701794035584ull}},
+{{8527424991595818173ull, 6786817137365721737ull,
+ 13335555196047484997ull, 4202093377242544480ull}},
+{{16858855665815856118ull, 6547603720067270037ull,
+ 8334721997529678123ull, 2626308360776590300ull}},
+{{7238511526987656436ull, 3572818631656699643ull,
+ 10418402496912097654ull, 3282885450970737875ull}},
+{{4436453390307182641ull, 13689395326425650362ull,
+ 8411317102712734163ull, 4103606813713422344ull}},
+{{7384469387369377055ull, 6250029069802337524ull,
+ 5257073189195458852ull, 2564754258570888965ull}},
+{{9230586734211721318ull, 7812536337252921905ull,
+ 11183027504921711469ull, 3205942823213611206ull}},
+{{16149919436192039551ull, 14377356439993540285ull,
+ 4755412344297363528ull, 4007428529017014008ull}},
+{{12399542656833718672ull, 8985847774995962678ull,
+ 2972132715185852205ull, 2504642830635633755ull}},
+{{6276056284187372532ull, 15843995737172341252ull,
+ 17550223949264478968ull, 3130803538294542193ull}},
+{{7845070355234215664ull, 1358250597755874949ull,
+ 8102721881298434999ull, 3913504422868177742ull}},
+{{7209011981235078742ull, 7766435651238503699ull, 452515157384133970ull,
+ 2445940264292611089ull}},
+{{4399578958116460524ull, 484672527193353816ull, 5177329965157555367ull,
+ 3057425330365763861ull}},
+{{5499473697645575655ull, 14440898714273855982ull,
+ 11083348474874332112ull, 3821781662957204826ull}},
+{{17272229116310648496ull, 9025561696421159988ull,
+ 11538778815223845474ull, 2388613539348253016ull}},
+{{3143542321678759004ull, 2058580083671674178ull,
+ 14423473519029806843ull, 2985766924185316270ull}},
+{{13152799938953224563ull, 16408283159871756434ull,
+ 8805969861932482745ull, 3732208655231645338ull}},
+{{12832185980273153256ull, 3337647947278765915ull,
+ 10115417182135189620ull, 2332630409519778336ull}},
+{{11428546456914053666ull, 4172059934098457394ull,
+ 12644271477668987025ull, 2915788011899722920ull}},
+{{5062311034287791275ull, 9826760936050459647ull,
+ 15805339347086233781ull, 3644735014874653650ull}},
+{{1716202774432351189ull, 16895137188490462463ull,
+ 10533302147003016418ull, 4555918768593317063ull}},
+{{7990155761661301349ull, 15171146761233926943ull,
+ 13500842869517967117ull, 2847449230370823164ull}},
+{{5376008683649238783ull, 5128875396260244967ull,
+ 16876053586897458897ull, 3559311537963528955ull}},
+{{2108324836134160574ull, 11022780263752694113ull,
+ 16483380965194435717ull, 4449139422454411194ull}},
+{{12846918068652320119ull, 9195080674059127772ull,
+ 14913799121673910227ull, 2780712139034006996ull}},
+{{16058647585815400149ull, 6882164824146521811ull,
+ 195504828382836168ull, 3475890173792508746ull}},
+{{15461623463841862282ull, 8602706030183152264ull,
+ 9467753072333321018ull, 4344862717240635932ull}},
+{{9663514664901163926ull, 9988377287291858069ull,
+ 15140717707063101444ull, 2715539198275397457ull}},
+{{16691079349553842812ull, 12485471609114822586ull,
+ 5090839078546713093ull, 3394423997844246822ull}},
+{{11640477150087527707ull, 1771781456111364521ull,
+ 15586920885038167175ull, 4243029997305308527ull}},
+{{357769191163622961ull, 8024892437710684682ull,
+ 16659354580789936340ull, 2651893748315817829ull}},
+{{9670583525809304509ull, 10031115547138355852ull,
+ 6989135170705256713ull, 3314867185394772287ull}},
+{{12088229407261630636ull, 17150580452350332719ull,
+ 4124732944954182987ull, 4143583981743465359ull}},
+{{14472672407179601004ull, 8413269773505263997ull,
+ 9495487118237446223ull, 2589739988589665849ull}},
+{{4255782453692337542ull, 5904901198454192093ull,
+ 16481044916224195683ull, 3237174985737082311ull}},
+{{9931414085542809832ull, 2769440479640352212ull,
+ 15989620126852856700ull, 4046468732171352889ull}},
+{{15430505840319031953ull, 10954272336629995940ull,
+ 3075983551641953581ull, 2529042957607095556ull}},
+{{841388226689238325ull, 18304526439214882830ull,
+ 3844979439552441976ull, 3161303697008869445ull}},
+{{10275107320216323715ull, 4433913975309051921ull,
+ 9417910317867940375ull, 3951629621261086806ull}},
+{{17951157121203672082ull, 9688725262209239306ull,
+ 1274507930240074830ull, 2469768513288179254ull}},
+{{13215574364649814294ull, 2887534540906773325ull,
+ 10816506949654869346ull, 3087210641610224067ull}},
+{{2684409900530104156ull, 12832790212988242465ull,
+ 8908947668641198778ull, 3859013302012780084ull}},
+{{13206971233899784857ull, 12632179901545039444ull,
+ 14791464329755525044ull, 2411883313757987552ull}},
+{{16508714042374731072ull, 15790224876931299305ull,
+ 42586338484854689ull, 3014854142197484441ull}},
+{{6800834497686250127ull, 5902723040881960420ull,
+ 4664918941533456266ull, 3768567677746855551ull}},
+{{13473893597908682138ull, 8300887918978613166ull,
+ 9833103366099492022ull, 2355354798591784719ull}},
+{{7618994960531076864ull, 1152737861868490650ull,
+ 7679693189196977124ull, 2944193498239730899ull}},
+{{300371663809070272ull, 1440922327335613313ull, 4987930468068833501ull,
+ 3680241872799663624ull}},
+{{4987150598188725744ull, 6412838927596904545ull,
+ 6234913085086041876ull, 4600302340999579530ull}},
+{{14646184169936423350ull, 13231396366602841148ull,
+ 8508506696606164076ull, 2875188963124737206ull}},
+{{18307730212420529188ull, 16539245458253551435ull,
+ 1412261333902929287ull, 3593986203905921508ull}},
+{{18272976747098273580ull, 16062370804389551390ull,
+ 1765326667378661609ull, 4492482754882401885ull}},
+{{6808924448509033084ull, 3121452725102387763ull,
+ 3409172176325357458ull, 2807801721801501178ull}},
+{{3899469542208903451ull, 13125187943232760512ull,
+ 13484837257261472630ull, 3509752152251876472ull}},
+{{4874336927761129313ull, 7183112892186174832ull,
+ 16856046571576840788ull, 4387190190314845590ull}},
+{{3046460579850705821ull, 13712817594471135078ull,
+ 5923343088808137588ull, 2741993868946778494ull}},
+{{13031447761668158084ull, 17141021993088918847ull,
+ 16627550897864947793ull, 3427492336183473117ull}},
+{{11677623683657809701ull, 7591219436078984847ull,
+ 6949380567049021030ull, 4284365420229341397ull}},
+{{14216043829927212919ull, 132826129121977625ull,
+ 6649205863619332096ull, 2677728387643338373ull}},
+{{3934996732126852437ull, 166032661402472032ull,
+ 12923193347951553024ull, 3347160484554172966ull}},
+{{4918745915158565546ull, 207540826753090040ull, 6930619648084665472ull,
+ 4183950605692716208ull}},
+{{3074216196974103467ull, 129713016720681275ull, 4331637280052915920ull,
+ 2614969128557947630ull}},
+{{17677828301499793045ull, 162141270900851593ull,
+ 14637918636920920708ull, 3268711410697434537ull}},
+{{8262227321592577594ull, 202676588626064492ull, 4462340240868987173ull,
+ 4085889263371793172ull}},
+{{14387264112850136805ull, 2432515877104984259ull,
+ 12012334687397892791ull, 2553680789607370732ull}},
+{{13372394122635283102ull, 16875702901663394036ull,
+ 15015418359247365988ull, 3192100987009213415ull}},
+{{16715492653294103877ull, 2647884553369690929ull,
+ 14157586930631819582ull, 3990126233761516769ull}},
+{{3529653880667733067ull, 15489985901138220543ull,
+ 1930962804003805382ull, 2493828896100947981ull}},
+{{18247125406116830046ull, 10139110339567999870ull,
+ 7025389523432144632ull, 3117286120126184976ull}},
+{{13585534720791261749ull, 12673887924459999838ull,
+ 8781736904290180790ull, 3896607650157731220ull}},
+{{3879273182067150689ull, 3309493934360111995ull,
+ 14711957602036138802ull, 2435379781348582012ull}},
+{{237405459156550458ull, 13360239454804915802ull,
+ 18389947002545173502ull, 3044224726685727515ull}},
+{{9520128860800463880ull, 7476927281651368944ull,
+ 18375747734754078974ull, 3805280908357159394ull}},
+{{5950080538000289925ull, 61393532604717686ull, 16096528352648687263ull,
+ 2378300567723224621ull}},
+{{16660972709355138214ull, 13911799971038060819ull,
+ 6285602385528695366ull, 2972875709654030777ull}},
+{{16214529868266534864ull, 8166377926942800216ull,
+ 12468689000338257112ull, 3716094637067538471ull}},
+{{10134081167666584290ull, 5103986204339250135ull,
+ 14710459652852492551ull, 2322559148167211544ull}},
+{{8055915441155842458ull, 1768296736996674765ull,
+ 18388074566065615689ull, 2903198935209014430ull}},
+{{14681580319872190977ull, 6822056939673231360ull,
+ 13761721170727243803ull, 3628998669011268038ull}},
+{{18351975399840238721ull, 3915885156164151296ull,
+ 7978779426554278946ull, 4536248336264085048ull}},
+{{11469984624900149201ull, 7059114241029982464ull,
+ 4986737141596424341ull, 2835155210165053155ull}},
+{{14337480781125186501ull, 13435578819714865984ull,
+ 1621735408568142522ull, 3543944012706316444ull}},
+{{17921850976406483126ull, 7571101487788806672ull,
+ 2027169260710178153ull, 4429930015882895555ull}},
+{{11201156860254051954ull, 16261153475936473930ull,
+ 17407881852439719009ull, 2768706259926809721ull}},
+{{4778074038462789134ull, 6491383789638428701ull,
+ 7924794260267485050ull, 3460882824908512152ull}},
+{{10584278566505874322ull, 17337601773902811684ull,
+ 9905992825334356312ull, 4326103531135640190ull}},
+{{15838546140920947259ull, 10836001108689257302ull,
+ 1579559497406584791ull, 2703814706959775119ull}},
+{{10574810639296408266ull, 8933315367434183724ull,
+ 15809507427040394701ull, 3379768383699718898ull}},
+{{13218513299120510332ull, 15778330227720117559ull,
+ 10538512246945717568ull, 4224710479624648623ull}},
+{{15179099839591400814ull, 9861456392325073474ull,
+ 13504099181982155336ull, 2640444049765405389ull}},
+{{9750502762634475209ull, 12326820490406341843ull,
+ 3045065922195530458ull, 3300555062206756737ull}},
+{{7576442434865706107ull, 6185153576153151496ull,
+ 8418018421171800977ull, 4125693827758445921ull}},
+{{4735276521791066317ull, 15394936031164189445ull,
+ 16790476559300845370ull, 2578558642349028700ull}},
+{{10530781670666220801ull, 10020298002100460998ull,
+ 2541351625416505097ull, 3223198302936285876ull}},
+{{3940105051478000193ull, 17137058521052964152ull,
+ 3176689531770631371ull, 4028997878670357345ull}},
+{{2462565657173750121ull, 8404818566444408643ull,
+ 13514646003425114367ull, 2518123674168973340ull}},
+{{16913265126749351363ull, 5894337189628122899ull,
+ 16893307504281392959ull, 3147654592711216675ull}},
+{{16529895390009301299ull, 2756235468607765720ull,
+ 16504948361924353295ull, 3934568240889020844ull}},
+{{10331184618755813312ull, 8640176195520935431ull,
+ 1092220689347945001ull, 2459105150555638028ull}},
+{{8302294755017378736ull, 15411906262828557193ull,
+ 1365275861684931251ull, 3073881438194547535ull}},
+{{14989554462199111324ull, 14653196810108308587ull,
+ 15541652882388327776ull, 3842351797743184418ull}},
+{{7062628529660750626ull, 9158248006317692867ull,
+ 14325219069920092764ull, 2401469873589490261ull}},
+{{4216599643648550378ull, 11447810007897116084ull,
+ 4071465782117952243ull, 3001837341986862827ull}},
+{{5270749554560687972ull, 9698076491444007201ull, 477646209220052400ull,
+ 3752296677483578534ull}},
+{{14823433517668899743ull, 6061297807152504500ull,
+ 14133586936044696462ull, 2345185423427236583ull}},
+{{82547823376573062ull, 16799994295795406434ull,
+ 13055297651628482673ull, 2931481779284045729ull}},
+{{9326556816075492136ull, 7164934814462094330ull,
+ 2484064009253439630ull, 3664352224105057162ull}},
+{{2434823983239589362ull, 18179540554932393721ull,
+ 12328452048421575345ull, 4580440280131321452ull}},
+{{13050980035593213111ull, 4444683819191664219ull,
+ 16928654567118260399ull, 2862775175082075907ull}},
+{{11702039026064128485ull, 944168755562192370ull,
+ 16549132190470437595ull, 3578468968852594884ull}},
+{{5404176745725384798ull, 15015268999734904175ull,
+ 2239671164378495377ull, 4473086211065743606ull}},
+{{10295139493719447355ull, 2467014097193233253ull,
+ 15234852533018723323ull, 2795678881916089753ull}},
+{{17480610385576697098ull, 16918825676773705278ull,
+ 5208507610991240441ull, 3494598602395112192ull}},
+{{12627390945116095564ull, 7313474040684967886ull,
+ 6510634513739050552ull, 4368248252993890240ull}},
+{{3280433322270171824ull, 4570921275428104929ull,
+ 4069146571086906595ull, 2730155158121181400ull}},
+{{8712227671265102683ull, 1101965575857743257ull,
+ 5086433213858633244ull, 3412693947651476750ull}},
+{{15501970607508766258ull, 1377456969822179071ull,
+ 15581413554178067363ull, 4265867434564345937ull}},
+{{16606260657334060768ull, 17001811670634719583ull,
+ 2820854443720210245ull, 2666167146602716211ull}},
+{{16146139803240188055ull, 7417206533011235767ull,
+ 17361126109932426519ull, 3332708933253395263ull}},
+{{15570988735622847165ull, 4659822147836656805ull,
+ 17089721618988145245ull, 4165886166566744079ull}},
+{{12037710968977973430ull, 5218231851611604455ull,
+ 17598605039508672634ull, 2603678854104215049ull}},
+{{10435452692795078884ull, 15746161851369281377ull,
+ 8163198244103677080ull, 3254598567630268812ull}},
+{{17656001884421236509ull, 1235958240502050105ull,
+ 10203997805129596351ull, 4068248209537836015ull}},
+{{4117472150122190962ull, 7690002927954863172ull,
+ 13295027655847079575ull, 2542655130961147509ull}},
+{{5146840187652738702ull, 5000817641516191061ull,
+ 2783726514526685757ull, 3178318913701434387ull}},
+{{11045236252993311282ull, 10862708070322626730ull,
+ 17314716198440520908ull, 3972898642126792983ull}},
+{{11514958676548207455ull, 16012564580806417514ull,
+ 17739226651666407423ull, 2483061651329245614ull}},
+{{5170326308830483511ull, 15404019707580633989ull,
+ 12950661277728233471ull, 3103827064161557018ull}},
+{{11074593904465492293ull, 14643338616048404582ull,
+ 6964954560305516031ull, 3879783830201946273ull}},
+{{2309935171863544779ull, 16069615662671334720ull,
+ 15882311646259417279ull, 2424864893876216420ull}},
+{{2887418964829430974ull, 15475333559911780496ull,
+ 1406145484114719983ull, 3031081117345270526ull}},
+{{3609273706036788717ull, 14732480931462337716ull,
+ 10981053891998175787ull, 3788851396681588157ull}},
+{{11479168103127768756ull, 6901957572950267120ull,
+ 9169001691712553819ull, 2368032122925992598ull}},
+{{14348960128909710945ull, 4015760947760445996ull,
+ 2237880077785916466ull, 2960040153657490748ull}},
+{{17936200161137138682ull, 14243073221555333303ull,
+ 2797350097232395582ull, 3700050192071863435ull}},
+{{18127654128351793532ull, 4290234745044695410ull,
+ 17889244875266104903ull, 2312531370044914646ull}},
+{{13436195623584966107ull, 751107412878481359ull,
+ 13138184057227855321ull, 2890664212556143308ull}},
+{{12183558511053819730ull, 5550570284525489603ull,
+ 16422730071534819151ull, 3613330265695179135ull}},
+{{10617762120389886758ull, 2326526837229474100ull,
+ 15916726570991136035ull, 4516662832118973919ull}},
+{{15859473362098455032ull, 17594980337764278976ull,
+ 16865483134510541877ull, 2822914270074358699ull}},
+{{1377597628913517174ull, 8158667366923185009ull,
+ 16470167899710789443ull, 3528642837592948374ull}},
+{{6333683054569284371ull, 5586648190226593357ull,
+ 11364337837783710996ull, 4410803546991185468ull}},
+{{6264394918319496684ull, 12715027155746396656ull,
+ 16326083185469595180ull, 2756752216869490917ull}},
+{{7830493647899370855ull, 15893783944682995820ull,
+ 6572545926554830263ull, 3445940271086863647ull}},
+{{9788117059874213569ull, 15255543912426356871ull,
+ 3603996389766149925ull, 4307425338858579559ull}},
+{{13035102190062465337ull, 11840557954480166996ull,
+ 9170026771244925559ull, 2692140836786612224ull}},
+{{16293877737578081671ull, 10189011424672820841ull,
+ 11462533464056156949ull, 3365176045983265280ull}},
+{{6532289116690438376ull, 17347950299268413956ull,
+ 14328166830070196186ull, 4206470057479081600ull}},
+{{13306052734786299793ull, 15454154955470146626ull,
+ 8955104268793872616ull, 2629043785924426000ull}},
+{{7409193881628098934ull, 870949620628131667ull,
+ 11193880335992340771ull, 3286304732405532500ull}},
+{{4649806333607735763ull, 14923745081067328296ull,
+ 13992350419990425963ull, 4107880915506915625ull}},
+{{2906128958504834852ull, 7021497666453386233ull,
+ 1827689984852934371ull, 2567425572191822266ull}},
+{{8244347216558431469ull, 4165186064639344887ull,
+ 11507984517920943772ull, 3209281965239777832ull}},
+{{5693748002270651432ull, 5206482580799181109ull,
+ 14384980647401179715ull, 4011602456549722290ull}},
+{{5864435510632851097ull, 948208603785794241ull,
+ 13602298923053125226ull, 2507251535343576431ull}},
+{{11942230406718451775ull, 10408632791587018609ull,
+ 12391187635389018628ull, 3134064419179470539ull}},
+{{1092729953115901007ull, 13010790989483773262ull,
+ 10877298525808885381ull, 3917580523974338174ull}},
+{{14518014275979601842ull, 10437587377641052240ull,
+ 2186625560203165459ull, 2448487827483961359ull}},
+{{18147517844974502302ull, 8435298203623927396ull,
+ 16568340005536120536ull, 3060609784354951698ull}},
+{{4237653232508576261ull, 10544122754529909246ull,
+ 11487052970065374862ull, 3825762230443689623ull}},
+{{16483591325600023875ull, 1978390703153805374ull,
+ 14096937133931941145ull, 2391101394027306014ull}},
+{{11381117120145254036ull, 7084674397369644622ull,
+ 8397799380560150623ull, 2988876742534132518ull}},
+{{5003024363326791737ull, 4244156978284667874ull,
+ 1273877188845412471ull, 3736095928167665648ull}},
+{{7738576245506632740ull, 9570127139068999277ull, 796173243028382794ull,
+ 2335059955104791030ull}},
+{{14284906325310678829ull, 2739286886981473288ull,
+ 10218588590640254301ull, 2918824943880988787ull}},
+{{17856132906638348536ull, 8035794627154229514ull,
+ 8161549719872929972ull, 3648531179851235984ull}},
+{{13096794096443159862ull, 10044743283942786893ull,
+ 10201937149841162465ull, 4560663974814044980ull}},
+{{10491339319490668866ull, 17807179598532711568ull,
+ 15599582755505502348ull, 2850414984258778112ull}},
+{{13114174149363336082ull, 3812230424456337844ull,
+ 1052734370672326320ull, 3563018730323472641ull}},
+{{16392717686704170102ull, 4765288030570422305ull,
+ 5927603981767795804ull, 4453773412904340801ull}},
+{{3327919526549024458ull, 12201677055961289749ull,
+ 15233967534673342137ull, 2783608383065213000ull}},
+{{8771585426613668477ull, 1417038264669448474ull, 595715344632126056ull,
+ 3479510478831516251ull}},
+{{1741109746412309788ull, 1771297830836810593ull,
+ 14579702236072321282ull, 4349388098539395313ull}},
+{{12617408637576163377ull, 5718747162700394524ull,
+ 2194784869904118945ull, 2718367561587122071ull}},
+{{15771760796970204222ull, 11760119971802881059ull,
+ 16578539142662312393ull, 3397959451983902588ull}},
+{{15103014977785367373ull, 865091909471437612ull,
+ 2276429854618338876ull, 4247449314979878236ull}},
+{{216012324261078800ull, 9764054480274424316ull,
+ 10646140695991237605ull, 2654655821862423897ull}},
+{{270015405326348500ull, 16816754118770418299ull,
+ 17919361888416434910ull, 3318319777328029871ull}},
+{{14172577311940099337ull, 11797570611608247065ull,
+ 17787516342093155734ull, 4147899721660037339ull}},
+{{1940331792321480230ull, 2761795613827766512ull,
+ 8811354704594528382ull, 2592437326037523337ull}},
+{{2425414740401850287ull, 12675616554139483948ull,
+ 15625879399170548381ull, 3240546657546904171ull}},
+{{3031768425502312859ull, 2009462637392191223ull,
+ 14920663230535797573ull, 4050683321933630214ull}},
+{{8812384293580027393ull, 3561757157583813466ull,
+ 4713728500657485579ull, 2531677076208518884ull}},
+{{1792108330120258433ull, 18287254502261930545ull,
+ 5892160625821856973ull, 3164596345260648605ull}},
+{{6851821431077710945ull, 9024010072545249469ull,
+ 11976886800704709121ull, 3955745431575810756ull}},
+{{6588231403637263293ull, 17169221341409250678ull,
+ 16708926287295219008ull, 2472340894734881722ull}},
+{{17458661291401354924ull, 3014782603052011731ull,
+ 11662785822264247953ull, 3090426118418602153ull}},
+{{17211640595824305751ull, 8380164272242402568ull,
+ 743424222548146229ull, 3863032648023252692ull}},
+{{10757275372390191095ull, 7543445679365195557ull,
+ 9688012175947367201ull, 2414395405014532932ull}},
+{{18058280233915126772ull, 14040993117633882350ull,
+ 12110015219934209001ull, 3017994256268166165ull}},
+{{13349478255539132657ull, 3716183341760189226ull,
+ 1302460969635597540ull, 3772492820335207707ull}},
+{{12955109928139345815ull, 11545986625454894074ull,
+ 16954939170518106126ull, 2357808012709504816ull}},
+{{6970515373319406460ull, 5209111244963841785ull,
+ 2746929889438081042ull, 2947260015886881021ull}},
+{{13324830235076645979ull, 15734761093059578039ull,
+ 8045348380224989206ull, 3684075019858601276ull}},
+{{12044351775418419570ull, 10445079329469696741ull,
+ 10056685475281236508ull, 4605093774823251595ull}},
+{{9833562868850206183ull, 15751546617773336271ull,
+ 3979585412837078865ull, 2878183609264532247ull}},
+{{7680267567635369825ull, 5854375216934506627ull, 362795747618960678ull,
+ 3597729511580665309ull}},
+{{4988648441116824377ull, 16541341058022909092ull,
+ 5065180702951088751ull, 4497161889475831636ull}},
+{{12341277312552791044ull, 17255867188905400038ull,
+ 12389109976199206277ull, 2810726180922394772ull}},
+{{6203224603836212997ull, 7734775930849586336ull,
+ 15486387470249007847ull, 3513407726152993465ull}},
+{{7754030754795266246ull, 5056783895134595016ull,
+ 5522926282529096097ull, 4391759657691241832ull}},
+{{4846269221747041404ull, 14689704980527591645ull,
+ 3451828926580685060ull, 2744849786057026145ull}},
+{{10669522545611189659ull, 18362131225659489556ull,
+ 8926472176653244229ull, 3431062232571282681ull}},
+{{13336903182013987073ull, 9117605976792198233ull,
+ 15769776239243943191ull, 4288827790714103351ull}},
+{{1418035461117660065ull, 12616032763136205752ull,
+ 16773639177168546350ull, 2680517369196314594ull}},
+{{1772544326397075081ull, 6546668917065481382ull,
+ 11743676934605907130ull, 3350646711495393243ull}},
+{{11439052444851119659ull, 17406708183186627535ull,
+ 10067910149829996008ull, 4188308389369241554ull}},
+{{14066936805673031643ull, 10879192614491642209ull,
+ 10904129862071135409ull, 2617692743355775971ull}},
+{{3748612951809125842ull, 18210676786541940666ull,
+ 9018476309161531357ull, 3272115929194719964ull}},
+{{13909138226616183110ull, 8928287927895262120ull,
+ 11273095386451914197ull, 4090144911493399955ull}},
+{{8693211391635114444ull, 7886022964148232777ull,
+ 4739841607318752421ull, 2556340569683374972ull}},
+{{15478200257971280959ull, 14469214723612678875ull,
+ 5924802009148440526ull, 3195425712104218715ull}},
+{{14736064304036713295ull, 8863146367661072786ull,
+ 2794316493008162754ull, 3994282140130273394ull}},
+{{13821726208450333713ull, 10151152498215558395ull,
+ 6358133826557489625ull, 2496426337581420871ull}},
+{{12665471742135529238ull, 17300626641196835898ull,
+ 3335981264769474127ull, 3120532921976776089ull}},
+{{6608467640814635739ull, 17014097283068656969ull,
+ 8781662599389230563ull, 3900666152470970111ull}},
+{{15659507321577617097ull, 8327967792704216653ull,
+ 12406068152259350958ull, 2437916345294356319ull}},
+{{5739326096689857659ull, 1186587704025495009ull,
+ 10895899171896800794ull, 3047395431617945399ull}},
+{{11785843639289709978ull, 10706606666886644569ull,
+ 9008187946443613088ull, 3809244289522431749ull}},
+{{448623246914986880ull, 6691629166804152856ull, 7935960475740952132ull,
+ 2380777680951519843ull}},
+{{560779058643733600ull, 8364536458505191070ull, 5308264576248802261ull,
+ 2975972101189399804ull}},
+{{9924345860159442808ull, 15067356591558876741ull,
+ 6635330720311002826ull, 3719965126486749755ull}},
+{{8508559171813345707ull, 14028783888151685867ull,
+ 1841238690980682814ull, 2324978204054218597ull}},
+{{6024012946339294230ull, 8312607823334831526ull,
+ 6913234382153241422ull, 2906222755067773246ull}},
+{{16753388219778893595ull, 1167387742313763599ull,
+ 17864915014546327586ull, 3632778443834716557ull}},
+{{16330049256296229090ull, 10682606714746980307ull,
+ 8496085712900745770ull, 4540973054793395697ull}},
+{{7900437775971449230ull, 11288315215144250596ull,
+ 16839268616631435866ull, 2838108159245872310ull}},
+{{9875547219964311537ull, 4887021982075537437ull,
+ 11825713733934519025ull, 3547635199057340388ull}},
+{{16956120043382777325ull, 10720463496021809700ull,
+ 14782142167418148781ull, 4434543998821675485ull}},
+{{1374202990259460020ull, 9006132694227325015ull,
+ 11544681863850036940ull, 2771589999263547178ull}},
+{{15552811793106488737ull, 11257665867784156268ull,
+ 5207480292957770367ull, 3464487499079433973ull}},
+{{994270667673559305ull, 9460396316302807432ull,
+ 11121036384624600863ull, 4330609373849292466ull}},
+{{621419167295974566ull, 12830276725330336501ull,
+ 11562333758817763443ull, 2706630858655807791ull}},
+{{5388459977547356111ull, 11426159888235532722ull,
+ 9841231180094816400ull, 3383288573319759739ull}},
+{{15958947008788970947ull, 14282699860294415902ull,
+ 7689852956691132596ull, 4229110716649699674ull}},
+{{5362655862065718938ull, 18150059449538785747ull,
+ 9417844116359345776ull, 2643194197906062296ull}},
+{{2091633809154760769ull, 4240830238213930568ull,
+ 11772305145449182221ull, 3303992747382577870ull}},
+{{2614542261443450961ull, 9912723816194801114ull,
+ 5492009394956701968ull, 4129990934228222338ull}},
+{{6245774931829544755ull, 6195452385121750696ull,
+ 8044191890275326634ull, 2581244333892638961ull}},
+{{7807218664786930943ull, 16967687518256964178ull,
+ 14666925881271546196ull, 3226555417365798701ull}},
+{{535651294128887871ull, 2762865324111653607ull, 4498599296307269034ull,
+ 4033194271707248377ull}},
+{{7252311086471636775ull, 6338476845997171408ull,
+ 14340839606260512906ull, 2520746419817030235ull}},
+{{9065388858089545969ull, 17146468094351240068ull,
+ 13314363489398253228ull, 3150933024771287794ull}},
+{{11331736072611932461ull, 2986341044229498469ull,
+ 7419582324893040728ull, 3938666280964109743ull}},
+{{9388178054596151740ull, 1866463152643436543ull,
+ 11554767980699232311ull, 2461666425602568589ull}},
+{{7123536549817801771ull, 16168136996086459391ull,
+ 608401920591876676ull, 3077083032003210737ull}},
+{{4292734668844864310ull, 1763427171398522623ull,
+ 5372188419167233750ull, 3846353790004013421ull}},
+{{9600488195669122050ull, 14937200037406240351ull,
+ 5663460771193215045ull, 2403971118752508388ull}},
+{{7388924226159014658ull, 4836441991475636727ull,
+ 7079325963991518807ull, 3004963898440635485ull}},
+{{4624469264271380419ull, 1433866470917158005ull,
+ 13460843473416786413ull, 3756204873050794356ull}},
+{{5196136299383306714ull, 3202009553536917705ull,
+ 17636399207740267316ull, 2347628045656746472ull}},
+{{11106856392656521296ull, 4002511941921147131ull,
+ 3598754935965782529ull, 2934535057070933091ull}},
+{{9271884472393263716ull, 9614825945828821818ull,
+ 18333501725239391873ull, 3668168821338666363ull}},
+{{2366483553636803837ull, 16630218450713415177ull,
+ 18305191138121851937ull, 4585211026673332954ull}},
+{{13008267267091472159ull, 3476357504054802629ull,
+ 16052430479753545365ull, 2865756891670833096ull}},
+{{2425276028582176486ull, 8957132898495891191ull,
+ 1618794025982380090ull, 3582196114588541371ull}},
+{{16866653091009884319ull, 1973044086265088180ull,
+ 15858550587760138825ull, 4477745143235676713ull}},
+{{1318286145026401892ull, 12762367599984149873ull,
+ 2994065089709004909ull, 2798590714522297946ull}},
+{{6259543699710390269ull, 2117901444698023629ull,
+ 12965953398991031945ull, 3498238393152872432ull}},
+{{12436115643065375740ull, 7259062824299917440ull,
+ 16207441748738789931ull, 4372797991441090540ull}},
+{{7772572276915859837ull, 2231071255973754448ull, 906279056106967899ull,
+ 2732998744650681588ull}},
+{{9715715346144824797ull, 16623897125249356772ull,
+ 1132848820133709873ull, 3416248430813351985ull}},
+{{12144644182681030996ull, 6944813351279532253ull,
+ 6027747043594525246ull, 4270310538516689981ull}},
+{{9896245623389338325ull, 18175566399831871370ull,
+ 6073184911460272230ull, 2668944086572931238ull}},
+{{3146934992381897098ull, 13496085962935063405ull,
+ 16814853176180116096ull, 3336180108216164047ull}},
+{{8545354758904759276ull, 16870107453668829256ull,
+ 16406880451797757216ull, 4170225135270205059ull}},
+{{5340846724315474548ull, 10543817158543018285ull,
+ 7948457273159904308ull, 2606390709543878162ull}},
+{{11287744423821731088ull, 13179771448178772856ull,
+ 712199554595104577ull, 3257988386929847703ull}},
+{{14109680529777163860ull, 2639656254941302358ull,
+ 14725307498526044434ull, 4072485483662309628ull}},
+{{4206864312683339509ull, 6261471177765701878ull,
+ 18426689223433553579ull, 2545303427288943517ull}},
+{{14481952427708950194ull, 3215152953779739443ull,
+ 9198303474009778262ull, 3181629284111179397ull}},
+{{13490754516208799838ull, 13242313229079450112ull,
+ 16109565360939610731ull, 3977036605138974246ull}},
+{{8431721572630499899ull, 5970602758960962368ull,
+ 5456792332159868803ull, 2485647878211858904ull}},
+{{10539651965788124874ull, 2851567430273815056ull,
+ 6820990415199836004ull, 3107059847764823630ull}},
+{{13174564957235156092ull, 3564459287842268820ull,
+ 17749610055854570813ull, 3883824809706029537ull}},
+{{17457475135126748366ull, 4533630064115111964ull,
+ 4175977257268024902ull, 2427390506066268461ull}},
+{{3375099845198883841ull, 14890409616998665764ull,
+ 9831657590012419031ull, 3034238132582835576ull}},
+{{4218874806498604801ull, 14001326002820944301ull,
+ 12289571987515523789ull, 3792797665728544470ull}},
+{{4942639763275321953ull, 11056671760976784140ull,
+ 3069296473769814464ull, 2370498541080340294ull}},
+{{6178299704094152441ull, 13820839701220980175ull,
+ 13059992629067043888ull, 2963123176350425367ull}},
+{{3111188611690302647ull, 17276049626526225219ull,
+ 11713304767906416956ull, 3703903970438031709ull}},
+{{18085393946802296819ull, 1574158979724114953ull,
+ 9626658489155204550ull, 2314939981523769818ull}},
+{{8771684378220707311ull, 11191070761509919500ull,
+ 2809951074589229879ull, 2893674976904712273ull}},
+{{10964605472775884139ull, 9377152433460011471ull,
+ 8124124861663925253ull, 3617093721130890341ull}},
+{{9094070822542467270ull, 16333126560252402243ull,
+ 14766842095507294470ull, 4521367151413612926ull}},
+{{3377951254875348092ull, 5596518081730363498ull,
+ 4617590291264671140ull, 2825854469633508079ull}},
+{{13445811105448960922ull, 6995647602162954372ull,
+ 1160301845653451021ull, 3532318087041885099ull}},
+{{16807263881811201153ull, 13356245521131080869ull,
+ 15285435362348977488ull, 4415397608802356373ull}},
+{{12810382935345694673ull, 8347653450706925543ull,
+ 11859240110681804882ull, 2759623505501472733ull}},
+{{11401292650754730437ull, 1211194776528881121ull,
+ 988992083070092391ull, 3449529381876840917ull}},
+{{416557758161249334ull, 15349051525943265114ull,
+ 5847926122265003392ull, 4311911727346051146ull}},
+{{4872034617278168738ull, 9593157203714540696ull,
+ 8266639844843015024ull, 2694944829591281966ull}},
+{{6090043271597710922ull, 11991446504643175870ull,
+ 1109927769198992972ull, 3368681036989102458ull}},
+{{16835926126351914461ull, 14989308130803969837ull,
+ 10610781748353517023ull, 4210851296236378072ull}},
+{{12828296838183640490ull, 16285846609393563004ull,
+ 6631738592720948139ull, 2631782060147736295ull}},
+{{16035371047729550613ull, 15745622243314565851ull,
+ 3677987222473797270ull, 3289727575184670369ull}},
+{{15432527791234550362ull, 10458655767288431506ull,
+ 9209170046519634492ull, 4112159468980837961ull}},
+{{14257015887948981880ull, 15760031891410045499ull,
+ 17284946325143241317ull, 2570099668113023725ull}},
+{{13209583841508839446ull, 5864981808980393162ull,
+ 7771124851146887935ull, 3212624585141279657ull}},
+{{7288607765031273499ull, 2719541242798103549ull,
+ 14325592082360997823ull, 4015780731426599571ull}},
+{{6861222862358239889ull, 8617242304389896574ull,
+ 6647652042261929687ull, 2509862957141624732ull}},
+{{17799900614802575670ull, 6159866862059982813ull,
+ 8309565052827412109ull, 3137328696427030915ull}},
+{{8414817713221055875ull, 12311519596002366421ull,
+ 5775270297606877232ull, 3921660870533788644ull}},
+{{7565104079976853874ull, 7694699747501479013ull,
+ 12832915972859074078ull, 2451038044083617902ull}},
+{{14068066118398455246ull, 395002647522072958ull,
+ 6817772929219066790ull, 3063797555104522378ull}},
+{{8361710611143293250ull, 9717125346257367006ull,
+ 17745588198378609295ull, 3829746943880652972ull}},
+{{614383113537170377ull, 12990732369051936235ull,
+ 1867620587131855001ull, 2393591839925408108ull}},
+{{14603036947203626683ull, 2403357406032756581ull,
+ 2334525733914818752ull, 2991989799906760135ull}},
+{{4418738128722369642ull, 3004196757540945727ull,
+ 16753215222675687152ull, 3739987249883450168ull}},
+{{9679240358092562883ull, 1877622973463091079ull,
+ 10470759514172304470ull, 2337492031177156355ull}},
+{{7487364429188315699ull, 11570400753683639657ull,
+ 8476763374287992683ull, 2921865038971445444ull}},
+{{13970891554912782528ull, 9851314923677161667ull,
+ 10595954217859990854ull, 3652331298714306805ull}},
+{{12851928425213590256ull, 3090771617741676276ull,
+ 17856628790752376472ull, 4565414123392883506ull}},
+{{17255827302613269718ull, 1931732261088547672ull,
+ 15772079012647623199ull, 2853383827120552191ull}},
+{{3123040054557035531ull, 16249723381642848303ull,
+ 15103412747382141094ull, 3566729783900690239ull}},
+{{17738858123478458126ull, 11088782190198784570ull,
+ 14267579915800288464ull, 4458412229875862799ull}},
+{{15698472345601424233ull, 6930488868874240356ull,
+ 15834766475016262146ull, 2786507643672414249ull}},
+{{1176346358292228675ull, 17886483122947576254ull,
+ 5958400038488163970ull, 3483134554590517812ull}},
+{{10693804984720061652ull, 13134731866829694509ull,
+ 7448000048110204963ull, 4353918193238147265ull}},
+{{8989471124663732484ull, 5903364407554865116ull,
+ 16184215076137347862ull, 2721198870773842040ull}},
+{{11236838905829665605ull, 16602577546298357203ull,
+ 1783524771462133211ull, 3401498588467302551ull}},
+{{9434362613859694103ull, 16141535914445558600ull,
+ 16064464019609830226ull, 4251873235584128188ull}},
+{{5896476633662308814ull, 14700145964955862029ull,
+ 816917975401368083ull, 2657420772240080118ull}},
+{{11982281810505273922ull, 13763496437767439632ull,
+ 10244519506106485912ull, 3321775965300100147ull}},
+{{14977852263131592402ull, 17204370547209299540ull,
+ 8193963364205719486ull, 4152219956625125184ull}},
+{{137785627602469444ull, 6141045573578424309ull, 5121227102628574679ull,
+ 2595137472890703240ull}},
+{{4783918052930474708ull, 3064620948545642482ull,
+ 6401533878285718349ull, 3243921841113379050ull}},
+{{15203269603017869193ull, 8442462204109441006ull,
+ 17225289384711923744ull, 4054902301391723812ull}},
+{{4890357483458780342ull, 5276538877568400629ull,
+ 1542433828590176532ull, 2534313938369827383ull}},
+{{10724632872750863331ull, 6595673596960500786ull,
+ 15763100341019884377ull, 3167892422962284228ull}},
+{{4182419054083803356ull, 12856278014628013887ull,
+ 1257131352565303855ull, 3959865528702855286ull}},
+{{9531540936443458954ull, 14952702786783590535ull,
+ 14620765150635478621ull, 2474915955439284553ull}},
+{{7302740152126935788ull, 4855820428197324457ull,
+ 4440898383012184565ull, 3093644944299105692ull}},
+{{13740111208586057639ull, 10681461553674043475ull,
+ 5551122978765230706ull, 3867056180373882115ull}},
+{{6281726496152592073ull, 11287599489473665076ull,
+ 1163608852514575239ull, 2416910112733676322ull}},
+{{7852158120190740091ull, 9497813343414693441ull,
+ 10677883102497994857ull, 3021137640917095402ull}},
+{{14426883668665813017ull, 16483952697695754705ull,
+ 4123981841267717763ull, 3776422051146369253ull}},
+{{2099273265275051280ull, 7996627426846152739ull,
+ 4883331660006017554ull, 2360263781966480783ull}},
+{{16459149636875977812ull, 772412246702915115ull,
+ 1492478556580134039ull, 2950329727458100979ull}},
+{{15962251027667584360ull, 14800573363660807606ull,
+ 15700656251007331260ull, 3687912159322626223ull}},
+{{10729441747729704642ull, 53972630866457892ull,
+ 15014134295331776172ull, 4609890199153282779ull}},
+{{15929273129185841210ull, 9257104931146311990ull,
+ 7077990925368666155ull, 2881181374470801737ull}},
+{{10688219374627525704ull, 6959695145505502084ull,
+ 13459174675138220598ull, 3601476718088502171ull}},
+{{13360274218284407130ull, 17922990968736653413ull,
+ 12212282325495387843ull, 4501845897610627714ull}},
+{{10656014395641448408ull, 8896026346246714431ull,
+ 12244362471862005306ull, 2813653686006642321ull}},
+{{8708331976124422606ull, 1896660895953617231ull,
+ 1470395034545342921ull, 3517067107508302902ull}},
+{{6273728951728140354ull, 6982512138369409443ull,
+ 11061365830036454459ull, 4396333884385378627ull}},
+{{1615237585616393769ull, 2058227077267186950ull,
+ 4607510634559090085ull, 2747708677740861642ull}},
+{{11242419018875268019ull, 7184469865011371591ull,
+ 14982760330053638414ull, 3434635847176077052ull}},
+{{9441337755166697120ull, 18203959368118990297ull,
+ 281706338857496401ull, 4293294808970096316ull}},
+{{17430051143047655460ull, 4459945577433287079ull,
+ 9399438498640711059ull, 2683309255606310197ull}},
+{{17175877910382181421ull, 963245953364220945ull,
+ 16360984141728276728ull, 3354136569507887746ull}},
+{{7634789332695563064ull, 1204057441705276182ull,
+ 11227858140305570102ull, 4192670711884859683ull}},
+{{160057314507339011ull, 14587593956347961326ull,
+ 4711568328477287361ull, 2620419194928037302ull}},
+{{9423443679988949572ull, 4399434390152787945ull,
+ 15112832447451385010ull, 3275523993660046627ull}},
+{{16390990618413574869ull, 14722665024545760739ull,
+ 14279354540886843358ull, 4094404992075058284ull}},
+{{7938526127294790341ull, 4589979621913712558ull,
+ 18147968624909052907ull, 2559003120046911427ull}},
+{{699785622263712119ull, 1125788508964752794ull,
+ 18073274762708928230ull, 3198753900058639284ull}},
+{{10098104064684415956ull, 10630607673060716800ull,
+ 4144849379676608671ull, 3998442375073299106ull}},
+{{6311315040427759973ull, 13561658823304029856ull,
+ 7202216880725268323ull, 2499026484420811941ull}},
+{{7889143800534699966ull, 12340387510702649416ull,
+ 13614457119333973308ull, 3123783105526014926ull}},
+{{9861429750668374957ull, 15425484388378311770ull,
+ 7794699362312690827ull, 3904728881907518658ull}},
+{{10775079612595122252ull, 7335084733522750904ull,
+ 9483373119872819671ull, 2440455551192199161ull}},
+{{13468849515743902815ull, 4557169898476050726ull,
+ 16465902418268412493ull, 3050569438990248951ull}},
+{{7612689857825102711ull, 10308148391522451312ull,
+ 15970692004408127712ull, 3813211798737811189ull}},
+{{4757931161140689195ull, 6442592744701532070ull,
+ 12287525511968773772ull, 2383257374211131993ull}},
+{{15170785988280637301ull, 8053240930876915087ull,
+ 1524348834678803503ull, 2979071717763914992ull}},
+{{14351796466923408722ull, 5454865145168755955ull,
+ 1905436043348504379ull, 3723839647204893740ull}},
+{{6664029782613436500ull, 1103447706516778520ull,
+ 10414269563947591045ull, 2327399779503058587ull}},
+{{8330037228266795624ull, 5990995651573361054ull,
+ 8406150936507100902ull, 2909249724378823234ull}},
+{{1189174498478718722ull, 16712116601321477126ull,
+ 1284316633779100319ull, 3636562155473529043ull}},
+{{10709840159953174211ull, 16278459733224458503ull,
+ 15440453847506039111ull, 4545702694341911303ull}},
+{{13611179127611815738ull, 17091566360906368420ull,
+ 16567812682332356300ull, 2841064183963694564ull}},
+{{17013973909514769672ull, 2917713877423408909ull,
+ 2263021779205893760ull, 3551330229954618206ull}},
+{{7432409331611298378ull, 3647142346779261137ull,
+ 12052149260862143008ull, 4439162787443272757ull}},
+{{16174470878325531247ull, 2279463966737038210ull,
+ 9838436297252533332ull, 2774476742152045473ull}},
+{{10994716561052138250ull, 2849329958421297763ull,
+ 16909731389993054569ull, 3468095927690056841ull}},
+{{9131709682887784909ull, 8173348466454010108ull,
+ 7302106182209154499ull, 4335119909612571052ull}},
+{{14930690588659641376ull, 2802499782320062365ull,
+ 13787188400735497370ull, 2709449943507856907ull}},
+{{4828305180542388008ull, 12726496764754853765ull,
+ 12622299482491983808ull, 3386812429384821134ull}},
+{{10647067494105372914ull, 15908120955943567206ull,
+ 6554502316260203952ull, 4233515536731026418ull}},
+{{2042731165388470167ull, 9942575597464729504ull,
+ 8708249966090015374ull, 2645947210456891511ull}},
+{{2553413956735587709ull, 3204847459976136072ull,
+ 6273626439185131314ull, 3307434013071114389ull}},
+{{3191767445919484636ull, 13229431361824945898ull,
+ 12453719067408802046ull, 4134292516338892986ull}},
+{{6606540672127065802ull, 3656708582713203282ull,
+ 12395260435557889183ull, 2583932822711808116ull}},
+{{17481547877013608060ull, 18405943783673667814ull,
+ 15494075544447361478ull, 3229916028389760145ull}},
+{{12628562809412234267ull, 13784057692737308960ull,
+ 5532536375277038136ull, 4037395035487200182ull}},
+{{7892851755882646417ull, 8615036057960818100ull,
+ 17292893289830312547ull, 2523371897179500113ull}},
+{{9866064694853308021ull, 6157109054023634721ull,
+ 7781058557005726972ull, 3154214871474375142ull}},
+{{16944266886994022930ull, 7696386317529543401ull,
+ 502951159402382907ull, 3942768589342968928ull}},
+{{3672637776730182476ull, 2504398439242270674ull, 314344474626489317ull,
+ 2464230368339355580ull}},
+{{13814169257767503903ull, 7742184067480226246ull,
+ 392930593283111646ull, 3080287960424194475ull}},
+{{8044339535354604070ull, 454358047495507000ull,
+ 14326221296886053270ull, 3850359950530243093ull}},
+{{5027712209596627544ull, 14119031834966855587ull,
+ 11259731319767477245ull, 2406474969081401933ull}},
+{{1672954243568396526ull, 3813731738426405772ull, 239606094427182845ull,
+ 3008093711351752417ull}},
+{{2091192804460495657ull, 9378850691460395119ull,
+ 4911193636461366460ull, 3760117139189690521ull}},
+{{8224524530428891642ull, 15085153719017522757ull,
+ 14598711068856823797ull, 2350073211993556575ull}},
+{{14892341681463502456ull, 5021384093489739734ull,
+ 13636702817643641843ull, 2937591514991945719ull}},
+{{9392055064974602262ull, 1665044098434786764ull,
+ 12434192503627164400ull, 3671989393739932149ull}},
+{{11740068831218252828ull, 2081305123043483455ull,
+ 1707682574251791788ull, 4589986742174915187ull}},
+{{14255072047152489873ull, 10524187738756952967ull,
+ 17208202673403227531ull, 2868741713859321991ull}},
+{{13207154040513224438ull, 8543548655018803305ull,
+ 16898567323326646510ull, 3585927142324152489ull}},
+{{2673884495359366835ull, 1456063781918728324ull,
+ 7288151098876144426ull, 4482408927905190612ull}},
+{{10894549846454380080ull, 5521725882126593106ull,
+ 13778466473652366074ull, 2801505579940744132ull}},
+{{4394815271213199292ull, 16125529389513017191ull,
+ 17223083092065457592ull, 3501881974925930165ull}},
+{{881833070589111211ull, 1710167663181719873ull, 7693795809799658279ull,
+ 4377352468657412707ull}},
+{{12080360715186664267ull, 7986383817129656776ull,
+ 2502779371911092472ull, 2735845292910882942ull}},
+{{15100450893983330334ull, 9982979771412070970ull,
+ 12351846251743641398ull, 3419806616138603677ull}},
+{{9652191580624387109ull, 3255352677410312905ull,
+ 1604749759397388036ull, 4274758270173254597ull}},
+{{17561834783958711703ull, 11257967460236221373ull,
+ 3308811608837061474ull, 2671723918858284123ull}},
+{{8117235424666225917ull, 4849087288440500909ull,
+ 17971072566328490555ull, 3339654898572855153ull}},
+{{14758230299260170300ull, 1449673092123238232ull,
+ 8628782652628449482ull, 4174568623216068942ull}},
+{{9223893937037606438ull, 5517731701004411799ull, 781303139465393022ull,
+ 2609105389510043089ull}},
+{{6918181402869620143ull, 16120536663110290557ull,
+ 5588314942759129181ull, 3261381736887553861ull}},
+{{13259412772014413083ull, 6315612773605699484ull,
+ 11597079696876299381ull, 4076727171109442326ull}},
+{{17510505019363783985ull, 6253100992717256129ull,
+ 2636488792120299209ull, 2547954481943401454ull}},
+{{8053073218922566269ull, 12428062259323958066ull,
+ 12518983027005149819ull, 3184943102429251817ull}},
+{{842969486798432028ull, 10923391805727559679ull,
+ 1813670728474273562ull, 3981178878036564772ull}},
+{{7444384956890101874ull, 11438805897007112703ull,
+ 10356916242151196784ull, 2488236798772852982ull}},
+{{4693795177685239438ull, 14298507371258890879ull,
+ 3722773265834220172ull, 3110295998466066228ull}},
+{{1255557953679161393ull, 17873134214073613599ull,
+ 4653466582292775215ull, 3887869998082582785ull}},
+{{7702252748690557727ull, 18088237911437090355ull,
+ 14437631660001454269ull, 2429918748801614240ull}},
+{{5016129917435809255ull, 8775239334014199232ull,
+ 18047039575001817837ull, 3037398436002017800ull}},
+{{6270162396794761568ull, 15580735185945136944ull,
+ 4112055395042720680ull, 3796748045002522251ull}},
+{{3918851497996725980ull, 9737959491215710590ull, 264191612688006473ull,
+ 2372967528126576407ull}},
+{{14121936409350683283ull, 16784135382447026141ull,
+ 14165297571142171803ull, 2966209410158220508ull}},
+{{3817362456406190392ull, 16368483209631394773ull,
+ 17706621963927714754ull, 3707761762697775635ull}},
+{{4691694544467562947ull, 14841988024447009637ull,
+ 8760795718241127769ull, 2317351101686109772ull}},
+{{10476304199011841588ull, 4717426975276598334ull,
+ 10950994647801409712ull, 2896688877107637215ull}},
+{{3872008211910026177ull, 5896783719095747918ull,
+ 9077057291324374236ull, 3620861096384546519ull}},
+{{14063382301742308529ull, 7370979648869684897ull,
+ 6734635595728079891ull, 4526076370480683149ull}},
+{{1872084910947860975ull, 2301019271329859109ull,
+ 6514990256543743884ull, 2828797731550426968ull}},
+{{6951792157112214122ull, 2876274089162323886ull,
+ 8143737820679679855ull, 3535997164438033710ull}},
+{{17913112233245043461ull, 17430400666735068569ull,
+ 956300238994824010ull, 4419996455547542138ull}},
+{{4278166118137070307ull, 15505686435136805760ull,
+ 5209373667799152910ull, 2762497784717213836ull}},
+{{5347707647671337884ull, 10158736007066231392ull,
+ 6511717084748941138ull, 3453122230896517295ull}},
+{{6684634559589172354ull, 3475047971978013432ull,
+ 3527960337508788519ull, 4316402788620646619ull}},
+{{4177896599743232722ull, 9089434010127340251ull,
+ 18345876275438850488ull, 2697751742887904136ull}},
+{{610684731251652998ull, 11361792512659175314ull,
+ 4485601270589011494ull, 3372189678609880171ull}},
+{{9986727950919342055ull, 4978868603969193334ull, 995315569808876464ull,
+ 4215237098262350214ull}},
+{{1630018950897200881ull, 3111792877480745834ull,
+ 14457130286412711502ull, 2634523186413968883ull}},
+{{11260895725476276909ull, 13113113133705708100ull,
+ 13459726839588501473ull, 3293153983017461104ull}},
+{{14076119656845346136ull, 2556333361849971413ull,
+ 16824658549485626842ull, 4116442478771826380ull}},
+{{11103417794742035287ull, 6209394369583620037ull,
+ 1292039556573740968ull, 2572776549232391488ull}},
+{{44214188145380397ull, 7761742961979525047ull, 1615049445717176210ull,
+ 3215970686540489360ull}},
+{{13890325790463889208ull, 478806665619630500ull,
+ 2018811807146470263ull, 4019963358175611700ull}},
+{{17904825655894706563ull, 7216783193653350918ull,
+ 10485129416321319722ull, 2512477098859757312ull}},
+{{13157660033013607396ull, 18244351028921464456ull,
+ 13106411770401649652ull, 3140596373574696640ull}},
+{{16447075041267009245ull, 4358694712442278954ull,
+ 16383014713002062066ull, 3925745466968370800ull}},
+{{14891107919219268682ull, 7335870213703812250ull,
+ 10239384195626288791ull, 2453590916855231750ull}},
+{{9390512862169310044ull, 4558151748702377409ull,
+ 3575858207678085181ull, 3066988646069039688ull}},
+{{16349827096139025459ull, 10309375704305359665ull,
+ 4469822759597606476ull, 3833735807586299610ull}},
+{{3301112907445809056ull, 15666731852045625599ull,
+ 7405325243175891951ull, 2396084879741437256ull}},
+{{17961449189589425032ull, 14971728796629644094ull,
+ 9256656553969864939ull, 2995106099676796570ull}},
+{{13228439450132005482ull, 14102974977359667214ull,
+ 2347448655607555366ull, 3743882624595995713ull}},
+{{3656088637905115523ull, 4202673342422404105ull,
+ 12996370455823191864ull, 2339926640372497320ull}},
+{{9181796815808782307ull, 5253341678028005131ull,
+ 16245463069778989830ull, 2924908300465621650ull}},
+{{6865560001333589980ull, 15790049134389782222ull,
+ 11083456800368961479ull, 3656135375582027063ull}},
+{{17805322038521763283ull, 15125875399559839873ull,
+ 9242634982033813945ull, 4570169219477533829ull}},
+{{4210797246435020196ull, 2536143097083818065ull,
+ 8082489872984827668ull, 2856355762173458643ull}},
+{{9875182576471163149ull, 3170178871354772581ull,
+ 5491426322803646681ull, 3570444702716823304ull}},
+{{16955664239016341840ull, 8574409607620853630ull,
+ 6864282903504558351ull, 4463055878396029130ull}},
+{{5985604130957825746ull, 12276535032404115375ull,
+ 8901862833117736873ull, 2789409923997518206ull}},
+{{2870319145269894278ull, 1510610735222980507ull,
+ 1903956504542395284ull, 3486762404996897758ull}},
+{{17422956986869531560ull, 1888263419028725633ull,
+ 11603317667532769913ull, 4358453006246122197ull}},
+{{3971819089152375369ull, 12709379682961423281ull,
+ 9557916551421675147ull, 2724033128903826373ull}},
+{{9576459879867857115ull, 11275038585274391197ull,
+ 16559081707704481838ull, 3405041411129782966ull}},
+{{16582260868262209298ull, 4870426194738213188ull,
+ 11475480097775826490ull, 4256301763912228708ull}},
+{{1140541005809105003ull, 7655702390138771147ull,
+ 16395547097964667364ull, 2660188602445142942ull}},
+{{15260734312543544966ull, 9569627987673463933ull,
+ 11271061835601058397ull, 3325235753056428678ull}},
+{{5240859835397267496ull, 16573721003019217821ull,
+ 4865455257646547188ull, 4156544691320535848ull}},
+{{5581380406336986137ull, 1135203590032235330ull,
+ 3040909536029091993ull, 2597840432075334905ull}},
+{{16200097544776008479ull, 6030690505967682066ull,
+ 8412822938463752895ull, 3247300540094168631ull}},
+{{11026749894115234791ull, 2926677114032214679ull,
+ 5904342654652303215ull, 4059125675117710789ull}},
+{{13809247711463103600ull, 8746702223911216030ull,
+ 5996057168371383461ull, 2536953546948569243ull}},
+{{8038187602474103692ull, 15545063798316407942ull,
+ 2883385442036841422ull, 3171191933685711554ull}},
+{{824362466237853807ull, 10207957711040734120ull,
+ 12827603839400827586ull, 3963989917107139442ull}},
+{{515226541398658630ull, 10991659587827846729ull,
+ 12628938418052905145ull, 2477493698191962151ull}},
+{{5255719195175711191ull, 18351260503212196315ull,
+ 11174487004138743527ull, 3096867122739952689ull}},
+{{1957962975542251085ull, 18327389610587857490ull,
+ 133050699891265697ull, 3871083903424940862ull}},
+{{5835412878141294832ull, 4537089478976329075ull,
+ 13918214742714204773ull, 2419427439640588038ull}},
+{{2682580079249230636ull, 10283047867147799248ull,
+ 8174396391537980158ull, 3024284299550735048ull}},
+{{3353225099061538295ull, 3630437797079973252ull,
+ 10217995489422475198ull, 3780355374438418810ull}},
+{{11319137723768237242ull, 16104081678457146994ull,
+ 10997933199316434902ull, 2362722109024011756ull}},
+{{4925550117855520745ull, 10906730061216657935ull,
+ 13747416499145543628ull, 2953402636280014695ull}},
+{{1545251628892013027ull, 13633412576520822419ull,
+ 12572584605504541631ull, 3691753295350018369ull}},
+{{17106683332553365806ull, 15438411887966595867ull,
+ 940336350799256663ull, 2307345809593761481ull}},
+{{16771668147264319354ull, 14686328841530856930ull,
+ 5787106456926458733ull, 2884182261992201851ull}},
+{{11741213147225623384ull, 4522852996631407451ull,
+ 2622197052730685513ull, 3605227827490252314ull}},
+{{10064830415604641326ull, 10265252264216647218ull,
+ 12501118352768132699ull, 4506534784362815392ull}},
+{{10902205028180288733ull, 4109939655921710559ull,
+ 7813198970480082937ull, 2816584240226759620ull}},
+{{9016070266797973012ull, 9749110588329526103ull,
+ 9766498713100103671ull, 3520730300283449525ull}},
+{{6658401815070078361ull, 7574702216984519725ull,
+ 16819809409802517493ull, 4400912875354311906ull}},
+{{6467344143632492928ull, 7040031894829018780ull,
+ 15124066899553961337ull, 2750570547096444941ull}},
+{{8084180179540616159ull, 13411725886963661379ull,
+ 5070025569160287959ull, 3438213183870556177ull}},
+{{5493539205998382295ull, 12152971340277188820ull,
+ 10949217979877747853ull, 4297766479838195221ull}},
+{{12656834040603764743ull, 9901450096886936964ull,
+ 9149104246637286360ull, 2686104049898872013ull}},
+{{15821042550754705928ull, 12376812621108671205ull,
+ 16048066326723995854ull, 3357630062373590016ull}},
+{{5941245133161218698ull, 6247643739531063199ull,
+ 1613338834695443202ull, 4197037577966987521ull}},
+{{10630807235866843542ull, 8516463355634302403ull,
+ 12537551817753121761ull, 2623148486229367200ull}},
+{{8676823026406166524ull, 15257265212970265908ull,
+ 15671939772191402201ull, 3278935607786709000ull}},
+{{10846028783007708155ull, 5236523460930668673ull,
+ 1143180641529701136ull, 4098669509733386251ull}},
+{{18307983035448287357ull, 3272827163081667920ull,
+ 16855388965451920874ull, 2561668443583366406ull}},
+{{4438234720600807580ull, 13314405990706860709ull,
+ 11845864169960125284ull, 3202085554479208008ull}},
+{{10159479419178397379ull, 16643007488383575886ull,
+ 14807330212450156605ull, 4002606943099010010ull}},
+{{1737988618559110458ull, 12707722689453428881ull,
+ 13866267401208735782ull, 2501629339436881256ull}},
+{{6784171791626275976ull, 6661281324962010293ull,
+ 17332834251510919728ull, 3127036674296101570ull}},
+{{13091900757960232874ull, 8326601656202512866ull,
+ 12442670777533873852ull, 3908795842870126963ull}},
+{{12794123992152533451ull, 14427498071981346349ull,
+ 5470826226744977205ull, 2442997401793829352ull}},
+{{2157596934908503101ull, 4199314534694519225ull,
+ 6838532783431221507ull, 3053746752242286690ull}},
+{{7308682187063016780ull, 637457149940761127ull,
+ 17771538016143802692ull, 3817183440302858362ull}},
+{{11485455394555467344ull, 9621782755567751512ull,
+ 15718897278517264586ull, 2385739650189286476ull}},
+{{14356819243194334180ull, 2803856407604913582ull,
+ 1201877524437029117ull, 2982174562736608096ull}},
+{{8722652017138141917ull, 8116506527933529882ull,
+ 1502346905546286396ull, 3727718203420760120ull}},
+{{10063343529138726602ull, 14296188616813231984ull,
+ 938966815966428997ull, 2329823877137975075ull}},
+{{12579179411423408252ull, 4035177715734376268ull,
+ 15008766575240199959ull, 2912279846422468843ull}},
+{{15723974264279260315ull, 432286126240582431ull,
+ 14149272200622862045ull, 3640349808028086054ull}},
+{{15043281811921687490ull, 5152043676228115943ull,
+ 8463218213923801748ull, 4550437260035107568ull}},
+{{16319580160092136537ull, 12443399334497348272ull,
+ 5289511383702376092ull, 2844023287521942230ull}},
+{{1952731126405619056ull, 15554249168121685341ull,
+ 15835261266482745923ull, 3555029109402427787ull}},
+{{7052599926434411724ull, 14831125441724718772ull,
+ 15182390564676044500ull, 4443786386753034734ull}},
+{{13631246990876283135ull, 46081364223173424ull, 4877308084495139909ull,
+ 2777366491720646709ull}},
+{{17039058738595353919ull, 4669287723706354684ull,
+ 10708321124046312790ull, 3471708114650808386ull}},
+{{2852079349534640783ull, 15059981691487719164ull,
+ 4162029368203115179ull, 4339635143313510483ull}},
+{{11005921630313926297ull, 7106645547966130525ull,
+ 295425345913253035ull, 2712271964570944052ull}},
+{{18369088056319795776ull, 4271620916530275252ull,
+ 369281682391566294ull, 3390339955713680065ull}},
+{{4514615996690193103ull, 14562898182517619874ull,
+ 5073288121416845771ull, 4237924944642100081ull}},
+{{7433321016358758594ull, 6795968354859818469ull,
+ 14700020121953998367ull, 2648703090401312550ull}},
+{{13903337288875836146ull, 3883274425147385182ull,
+ 9151653115587722151ull, 3310878863001640688ull}},
+{{8155799574240019375ull, 242407013006843574ull,
+ 11439566394484652689ull, 4138598578752050860ull}},
+{{485688715472624205ull, 11680719429197746994ull,
+ 16373101033407683738ull, 2586624111720031787ull}},
+{{9830482931195556065ull, 5377527249642407934ull,
+ 15854690273332216769ull, 3233280139650039734ull}},
+{{3064731627139669273ull, 11333595080480397822ull,
+ 10594990804810495153ull, 4041600174562549668ull}},
+{{15750515322244457008ull, 165967897659166782ull,
+ 15845241289861335279ull, 2526000109101593542ull}},
+{{10464772115950795451ull, 14042517927356122190ull,
+ 10583179575471893290ull, 3157500136376991928ull}},
+{{3857593108083718506ull, 8329775372340376930ull,
+ 13228974469339866613ull, 3946875170471239910ull}},
+{{7022681710979711970ull, 7511952616926429533ull,
+ 3656423024910028729ull, 2466796981544524944ull}},
+{{13390038157152027867ull, 14001626789585424820ull,
+ 4570528781137535911ull, 3083496226930656180ull}},
+{{16737547696440034834ull, 12890347468554393121ull,
+ 5713160976421919889ull, 3854370283663320225ull}},
+{{3543438282633939915ull, 1138938140205413845ull,
+ 15099940656332169691ull, 2408981427289575140ull}},
+{{9040983871719812798ull, 15258730730538931018ull,
+ 428181746705660497ull, 3011226784111968926ull}},
+{{2077857802794990189ull, 5238355357891500061ull,
+ 9758599220236851430ull, 3764033480139961157ull}},
+{{3604504135960562820ull, 17109030153964351250ull,
+ 8404967521861726095ull, 2352520925087475723ull}},
+{{13729002206805479333ull, 16774601674028051158ull,
+ 5894523383899769715ull, 2940651156359344654ull}},
+{{7937880721652073359ull, 16356566074107676044ull,
+ 16591526266729487952ull, 3675813945449180817ull}},
+{{9922350902065091698ull, 1998963518925043439ull,
+ 6904349778129696229ull, 4594767431811476022ull}},
+{{13118998341431764167ull, 3555195208541846101ull,
+ 18150276666613223855ull, 2871729644882172513ull}},
+{{2563689871507541497ull, 18279052065959471339ull,
+ 8852787777984366106ull, 3589662056102715642ull}},
+{{17039670394666590583ull, 13625443045594563365ull,
+ 1842612685625681825ull, 4487077570128394553ull}},
+{{12955637005880313067ull, 1598372875855520247ull,
+ 12680847974584520901ull, 2804423481330246595ull}},
+{{11582860238923003429ull, 6609652113246788213ull,
+ 11239373949803263222ull, 3505529351662808244ull}},
+{{643517243371590575ull, 17485437178413261075ull,
+ 14049217437254079027ull, 4381911689578510305ull}},
+{{16543099341603101773ull, 8622555227294594219ull,
+ 1863231870642717536ull, 2738694805986568941ull}},
+{{16067188158576489313ull, 10778194034118242774ull,
+ 6940725856730784824ull, 3423368507483211176ull}},
+{{10860613161365835833ull, 13472742542647803468ull,
+ 8675907320913481030ull, 4279210634354013970ull}},
+{{16011255262708423204ull, 3808778070727489263ull,
+ 10034128093998313548ull, 2674506646471258731ull}},
+{{15402383059958141100ull, 4760972588409361579ull,
+ 7930974099070504031ull, 3343133308089073414ull}},
+{{14641292806520288471ull, 1339529717084314070ull,
+ 690345586983354231ull, 4178916635111341768ull}},
+{{4539121985647792391ull, 7754735100818778150ull, 431465991864596394ull,
+ 2611822896944588605ull}},
+{{14897274518914516296ull, 470046839168696879ull,
+ 5151018508258133397ull, 3264778621180735756ull}},
+{{14009907130215757466ull, 5199244567388259003ull,
+ 6438773135322666746ull, 4080973276475919695ull}},
+{{6450348947171154465ull, 7861213873045049781ull,
+ 10941762237217748572ull, 2550608297797449809ull}},
+{{12674622202391330985ull, 9826517341306312226ull,
+ 18288888814949573619ull, 3188260372246812261ull}},
+{{6619905716134387923ull, 7671460658205502379ull,
+ 9026052963404803312ull, 3985325465308515327ull}},
+{{1831598063370298500ull, 4794662911378438987ull,
+ 12558812129769083926ull, 2490828415817822079ull}},
+{{16124555634495036837ull, 15216700676077824541ull,
+ 11086829143783967003ull, 3113535519772277599ull}},
+{{6320636487836632334ull, 14409189826669892773ull,
+ 9246850411302570850ull, 3891919399715346999ull}},
+{{6256240814111589161ull, 13617429660096070887ull,
+ 12696810534705188637ull, 2432449624822091874ull}},
+{{3208614999212098547ull, 3186729019837924897ull,
+ 6647641131526709989ull, 3040562031027614843ull}},
+{{8622454767442511087ull, 8595097293224794025ull,
+ 3697865395980999582ull, 3800702538784518554ull}},
+{{16918249275720039190ull, 760249789838108361ull,
+ 6922851890915512643ull, 2375439086740324096ull}},
+{{7312753539367885275ull, 14785370292579799164ull,
+ 8653564863644390803ull, 2969298858425405120ull}},
+{{9140941924209856594ull, 13870026847297361051ull,
+ 10816956079555488504ull, 3711623573031756400ull}},
+{{3407245693417466419ull, 8668766779560850657ull,
+ 6760597549722180315ull, 2319764733144847750ull}},
+{{8870743135199220928ull, 6224272456023675417ull,
+ 17674118974007501202ull, 2899705916431059687ull}},
+{{15700114937426414064ull, 17003712606884370079ull,
+ 17480962699081988598ull, 3624632395538824609ull}},
+{{15013457653355629676ull, 12031268721750686791ull,
+ 8016145318570322036ull, 4530790494423530762ull}},
+{{16300940060988350403ull, 16742914987948955052ull,
+ 9621776842533839176ull, 2831744059014706726ull}},
+{{1929431002525886388ull, 2481899661226642200ull,
+ 2803849016312523163ull, 3539680073768383408ull}},
+{{2411788753157357985ull, 16937432631815466462ull,
+ 3504811270390653953ull, 4424600092210479260ull}},
+{{15342426026005512453ull, 3668366367243584682ull,
+ 11413879080848934529ull, 2765375057631549537ull}},
+{{9954660495652114758ull, 9197143977481868757ull, 432290795779004449ull,
+ 3456718822039436922ull}},
+{{17055011637992531351ull, 16108115990279723850ull,
+ 9763735531578531369ull, 4320898527549296152ull}},
+{{15271068292172719999ull, 3150043466283745550ull,
+ 6102334707236582106ull, 2700561579718310095ull}},
+{{9865463328361124190ull, 13160926369709457746ull,
+ 3016232365618339728ull, 3375701974647887619ull}},
+{{3108457123596629430ull, 16451157962136822183ull,
+ 17605348512305088372ull, 4219627468309859523ull}},
+{{8860314729888975250ull, 1058601689480738056ull,
+ 8697499810976986281ull, 2637267167693662202ull}},
+{{11075393412361219062ull, 5934938130278310474ull,
+ 1648502726866457043ull, 3296583959617077753ull}},
+{{4620869728596748020ull, 2806986644420500189ull,
+ 6672314427010459208ull, 4120729949521347191ull}},
+{{5193886589586661464ull, 1754366652762812618ull,
+ 11087725544522618861ull, 2575456218450841994ull}},
+{{15715730273838102638ull, 6804644334380903676ull,
+ 4636284893798497768ull, 3219320273063552493ull}},
+{{1197918768588076682ull, 8505805417976129596ull,
+ 10407042135675510114ull, 4024150341329440616ull}},
+{{9972071267222323734ull, 9927814404662468901ull,
+ 6504401334797193821ull, 2515093963330900385ull}},
+{{17076775102455292572ull, 17021454024255474030ull,
+ 12742187686923880180ull, 3143867454163625481ull}},
+{{12122596841214339907ull, 2830073456609790922ull,
+ 2092676553372686514ull, 3929834317704531852ull}},
+{{12188309044186350346ull, 6380481928808507230ull,
+ 10531294882712704879ull, 2456146448565332407ull}},
+{{6012014268378162124ull, 3363916392583246134ull,
+ 8552432584963493195ull, 3070183060706665509ull}},
+{{16738389872327478463ull, 18039953546011221379ull,
+ 15302226749631754397ull, 3837728825883331886ull}},
+{{8155650660990980088ull, 13580813975470707314ull,
+ 4952205700092458594ull, 2398580516177082429ull}},
+{{971191289383949301ull, 7752645432483608335ull,
+ 10801943143542961147ull, 2998225645221353036ull}},
+{{15049047167012100339ull, 5079120772177122514ull,
+ 13502428929428701434ull, 3747782056526691295ull}},
+{{14017340497809950616ull, 7786136501038089475ull,
+ 15356547108534020252ull, 2342363785329182059ull}},
+{{12909989603835050366ull, 9732670626297611844ull,
+ 14583997867240137411ull, 2927954731661477574ull}},
+{{16137487004793812957ull, 7554152264444626901ull,
+ 9006625297195395956ull, 3659943414576846968ull}},
+{{6336800700710102484ull, 9442690330555783627ull,
+ 11258281621494244945ull, 4574929268221058710ull}},
+{{1654657428730120101ull, 17430896502665834527ull,
+ 2424739995006515186ull, 2859330792638161694ull}},
+{{15903379841194813838ull, 12565248591477517350ull,
+ 12254297030612919791ull, 3574163490797702117ull}},
+{{10655852764638741489ull, 11094874720919508784ull,
+ 1482813232983986027ull, 4467704363497127647ull}},
+{{6659907977899213431ull, 4628453691360999038ull,
+ 7844287298256073123ull, 2792315227185704779ull}},
+{{17548257009228792597ull, 1173881095773860893ull,
+ 5193673104392703500ull, 3490394033982130974ull}},
+{{8100263206253827034ull, 1467351369717326117ull,
+ 15715463417345655183ull, 4362992542477663717ull}},
+{{7368507513122335848ull, 7834623633714410679ull,
+ 12128007645054728441ull, 2726870339048539823ull}},
+{{4598948372975531906ull, 14404965560570401253ull,
+ 10548323537891022647ull, 3408587923810674779ull}},
+{{10360371484646802786ull, 13394520932285613662ull,
+ 8573718403936390405ull, 4260734904763343474ull}},
+{{1863546159476863838ull, 10677418591892202491ull,
+ 9970260020887631907ull, 2662959315477089671ull}},
+{{16164490754628243509ull, 8735087221437865209ull,
+ 7851139007682151980ull, 3328699144346362089ull}},
+{{6370555388003140674ull, 10918859026797331512ull,
+ 14425609778030077879ull, 4160873930432952611ull}},
+{{3981597117501962922ull, 13741815919389414051ull,
+ 6710163102055104722ull, 2600546206520595382ull}},
+{{365310378450065748ull, 7953897862381991756ull,
+ 17611075914423656711ull, 3250682758150744227ull}},
+{{456637973062582185ull, 5330686309550101791ull,
+ 17402158874602182985ull, 4063353447688430284ull}},
+{{7202927760805195722ull, 14860893989537283379ull,
+ 1652977259771588557ull, 2539595904805268928ull}},
+{{4391973682579106748ull, 4741059431639440512ull,
+ 2066221574714485697ull, 3174494881006586160ull}},
+{{5489967103223883435ull, 10538010307976688544ull,
+ 2582776968393107121ull, 3968118601258232700ull}},
+{{3431229439514927147ull, 18115471488553900100ull,
+ 10837607642100467758ull, 2480074125786395437ull}},
+{{4289036799393658933ull, 13420967323837599317ull,
+ 18158695571052972602ull, 3100092657232994296ull}},
+{{9972982017669461571ull, 7552837117942223338ull,
+ 4251625390106664137ull, 3875115821541242871ull}},
+{{10844799779470801386ull, 16249738244782359346ull,
+ 9574794896457746941ull, 2421947388463276794ull}},
+{{4332627687483725924ull, 6477114750695785471ull,
+ 2745121583717407869ull, 3027434235579095993ull}},
+{{804098590927269501ull, 12708079456797119743ull,
+ 8043087998074147740ull, 3784292794473869991ull}},
+{{7420090646970625294ull, 17165921697352975647ull,
+ 11944459026437424193ull, 2365182996546168744ull}},
+{{4663427290285893714ull, 7622344066409055847ull,
+ 14930573783046780242ull, 2956478745682710930ull}},
+{{1217598094429979238ull, 304558046156544001ull, 9439845191953699495ull,
+ 3695598432103388663ull}},
+{{12290213855087206784ull, 7107877806488921856ull,
+ 12817432272612144040ull, 2309749020064617914ull}},
+{{15362767318859008480ull, 8884847258111152320ull,
+ 6798418303910404242ull, 2887186275080772393ull}},
+{{756715074864208984ull, 1882687035784164593ull,
+ 13109708898315393207ull, 3608982843850965491ull}},
+{{5557579862007649134ull, 16188416850012369453ull,
+ 11775450104466853604ull, 4511228554813706864ull}},
+{{5779330422968474661ull, 894388494402955100ull, 7359656315291783503ull,
+ 2819517846758566790ull}},
+{{7224163028710593326ull, 14953043673285857587ull,
+ 18422942430969505186ull, 3524397308448208487ull}},
+{{4418517767460853753ull, 9467932554752546176ull,
+ 18416992020284493579ull, 4405496635560260609ull}},
+{{2761573604663033596ull, 3611614837506647408ull,
+ 4593090985036726631ull, 2753435397225162881ull}},
+{{3451967005828791995ull, 18349576602165472972ull,
+ 10353049749723296192ull, 3441794246531453601ull}},
+{{4314958757285989993ull, 4490226678997289599ull,
+ 17552998205581508145ull, 4302242808164317001ull}},
+{{9614378250944825602ull, 14335606720441775759ull,
+ 4053094850847360734ull, 2688901755102698126ull}},
+{{7406286795253644098ull, 8696136363697443891ull,
+ 14289740600413976726ull, 3361127193878372657ull}},
+{{4646172475639667219ull, 1646798417767029056ull,
+ 4027117695235307196ull, 4201408992347965822ull}},
+{{2903857797274792012ull, 10252621047959168968ull,
+ 16352006614804230709ull, 2625880620217478638ull}},
+{{3629822246593490015ull, 17427462328376349114ull,
+ 11216636231650512578ull, 3282350775271848298ull}},
+{{13760649845096638326ull, 12560955873615660584ull,
+ 4797423252708364915ull, 4102938469089810373ull}},
+{{8600406153185398954ull, 5544754411796093913ull,
+ 5304232542156422024ull, 2564336543181131483ull}},
+{{15362193709909136597ull, 6930943014745117391ull,
+ 2018604659268139626ull, 3205420678976414354ull}},
+{{14591056118959032842ull, 17887050805286172547ull,
+ 11746627860939950340ull, 4006775848720517942ull}},
+{{6813567065135701574ull, 1956034716449082034ull,
+ 2729956394660081059ull, 2504234905450323714ull}},
+{{17740330868274402776ull, 16280101450843516254ull,
+ 12635817530179877131ull, 3130293631812904642ull}},
+{{12952041548488227661ull, 15738440795127007414ull,
+ 6571399875870070606ull, 3912867039766130803ull}},
+{{3483339949377754385ull, 5224839478526991730ull,
+ 1801281913205100177ull, 2445541899853831752ull}},
+{{13577546973576968789ull, 11142735366586127566ull,
+ 2251602391506375221ull, 3056927374817289690ull}},
+{{7748561680116435178ull, 93361152950495746ull, 12037875026237744835ull,
+ 3821159218521612112ull}},
+{{9454537068500159890ull, 16199251785089917505ull,
+ 7523671891398590521ull, 2388224511576007570ull}},
+{{16429857354052587767ull, 6414006676080233169ull,
+ 181217827393462344ull, 2985280639470009463ull}},
+{{6702263637283570996ull, 8017508345100291462ull,
+ 14061580339523991642ull, 3731600799337511828ull}},
+{{18023972828584395585ull, 9622628734115070067ull,
+ 18011859749057270584ull, 2332250499585944892ull}},
+{{17918280017303106577ull, 12028285917643837584ull,
+ 4068080612612036614ull, 2915313124482431116ull}},
+{{3951105947919331605ull, 5811985360200021173ull,
+ 5085100765765045768ull, 3644141405603038895ull}},
+{{9550568453326552410ull, 7264981700250026466ull,
+ 1744689938778919306ull, 4555176757003798619ull}},
+{{10580791301756483160ull, 9152299581083654445ull,
+ 17231332276232682230ull, 2846985473127374136ull}},
+{{17837675145622991854ull, 2217002439499792248ull,
+ 3092421271581301172ull, 3558731841409217671ull}},
+{{3850349858319188202ull, 2771253049374740311ull,
+ 17700584644758790177ull, 4448414801761522088ull}},
+{{9323997689090574482ull, 13261248201927682454ull,
+ 11062865402974243860ull, 2780259251100951305ull}},
+{{2431625074508442295ull, 16576560252409603068ull,
+ 18440267772145192729ull, 3475324063876189131ull}},
+{{3039531343135552868ull, 6885642260229840123ull,
+ 18438648696754103008ull, 4344155079845236414ull}},
+{{18040608153955578207ull, 4303526412643650076ull,
+ 6912469417043926476ull, 2715096924903272759ull}},
+{{4104016118734921143ull, 5379408015804562596ull,
+ 4028900752877520191ull, 3393871156129090949ull}},
+{{5130020148418651428ull, 2112574001328315341ull,
+ 9647811959524288143ull, 4242338945161363686ull}},
+{{5512105601975351095ull, 8237887778471278944ull,
+ 1418196456275292185ull, 2651461840725852304ull}},
+{{6890132002469188868ull, 14909045741516486584ull,
+ 1772745570344115231ull, 3314327300907315380ull}},
+{{8612665003086486085ull, 14024621158468220326ull,
+ 2215931962930144039ull, 4142909126134144225ull}},
+{{771229608501665900ull, 15682917251683719560ull,
+ 12914172522899809784ull, 2589318203833840140ull}},
+{{964037010627082374ull, 1156902490895097834ull,
+ 16142715653624762231ull, 3236647754792300175ull}},
+{{10428418300138628776ull, 15281186168901036004ull,
+ 15566708548603564884ull, 4045809693490375219ull}},
+{{15741133474441418793ull, 327369318708371694ull,
+ 7423349833663534101ull, 2528631058431484512ull}},
+{{10453044806196997683ull, 5020897666812852522ull,
+ 9279187292079417626ull, 3160788823039355640ull}},
+{{3842933970891471296ull, 15499494120370841461ull,
+ 11598984115099272032ull, 3950986028799194550ull}},
+{{4707676741020863512ull, 9687183825231775913ull,
+ 2637679053509657116ull, 2469366267999496594ull}},
+{{10496281944703467294ull, 12108979781539719891ull,
+ 12520470853741847203ull, 3086707834999370742ull}},
+{{8508666412451946213ull, 10524538708497261960ull,
+ 6427216530322533196ull, 3858384793749213428ull}},
+{{5317916507782466383ull, 15801208729665564533ull,
+ 13240382368306359055ull, 2411490496093258392ull}},
+{{11259081653155470883ull, 15139824893654567762ull,
+ 16550477960382948819ull, 3014363120116572990ull}},
+{{4850480029589562796ull, 14313095098640821799ull,
+ 11464725413623910216ull, 3767953900145716238ull}},
+{{9949079046134558604ull, 8945684436650513624ull,
+ 2553767365087555981ull, 2354971187591072649ull}},
+{{12436348807668198254ull, 15793791564240529934ull,
+ 7803895224786832880ull, 2943713984488840811ull}},
+{{6322063972730472010ull, 1295495381591110802ull,
+ 5143183012556153197ull, 3679642480611051014ull}},
+{{17125952002767865820ull, 6231055245416276406ull,
+ 15652350802549967304ull, 4599553100763813767ull}},
+{{6092033983302528234ull, 3894409528385172754ull,
+ 16700248279234811421ull, 2874720687977383604ull}},
+{{16838414515982936100ull, 9479697928908853846ull,
+ 2428566275333962660ull, 3593400859971729506ull}},
+{{11824646108123894317ull, 11849622411136067308ull,
+ 12259079881022229133ull, 4491751074964661882ull}},
+{{16613775854432209756ull, 9711857016173736019ull,
+ 12273610944066281112ull, 2807344421852913676ull}},
+{{16155533799612874291ull, 12139821270217170024ull,
+ 15342013680082851390ull, 3509180527316142095ull}},
+{{1747673175806541248ull, 5951404550916686723ull,
+ 14565831081676176334ull, 4386475659145177619ull}},
+{{17233196799374945944ull, 17554685899605092913ull,
+ 6797801416833916256ull, 2741547286965736012ull}},
+{{7706437943936518718ull, 3496613300796814526ull,
+ 8497251771042395321ull, 3426934108707170015ull}},
+{{409675393065872590ull, 8982452644423406062ull, 6009878695375606247ull,
+ 4283667635883962519ull}},
+{{14091105175948334081ull, 12531561930405710644ull,
+ 10673703212250835760ull, 2677292272427476574ull}},
+{{17613881469935417601ull, 15664452413007138305ull,
+ 4118756978458768892ull, 3346615340534345718ull}},
+{{8182293782137108289ull, 1133821442549371266ull,
+ 14371818259928236924ull, 4183269175667932147ull}},
+{{9725619632263080585ull, 9932010438448132849ull,
+ 6676543403241454125ull, 2614543234792457592ull}},
+{{16768710558756238635ull, 17026699066487553965ull,
+ 8345679254051817656ull, 3268179043490571990ull}},
+{{7125830143163134581ull, 2836629759399890841ull,
+ 1208727030709996263ull, 4085223804363214988ull}},
+{{15982858885545428873ull, 8690422627266013631ull,
+ 9978826431048523472ull, 2553264877727009367ull}},
+{{15366887588504398188ull, 10863028284082517039ull,
+ 7861847020383266436ull, 3191581097158761709ull}},
+{{14596923467203109831ull, 13578785355103146299ull,
+ 14438994793906470949ull, 3989476371448452136ull}},
+{{6817234157788249692ull, 10792583856153160389ull,
+ 9024371746191544343ull, 2493422732155282585ull}},
+{{13133228715662700019ull, 8879043801764062582ull,
+ 15892150701166818333ull, 3116778415194103231ull}},
+{{7193163857723599216ull, 15710490770632466132ull,
+ 15253502358031135012ull, 3895973018992629039ull}},
+{{13719099447932025318ull, 595684694790515524ull,
+ 16450968001410541239ull, 2434983136870393149ull}},
+{{17148874309915031648ull, 14579663923770308117ull,
+ 6728651946481012836ull, 3043728921087991437ull}},
+{{7601034832111625847ull, 18224579904712885147ull,
+ 13022500951528653949ull, 3804661151359989296ull}},
+{{2444803760856072203ull, 13696205449659247169ull,
+ 8139063094705408718ull, 2377913219599993310ull}},
+{{7667690719497478157ull, 7896884775219283153ull, 950456831526985090ull,
+ 2972391524499991638ull}},
+{{14196299417799235600ull, 647733932169328133ull,
+ 10411443076263507171ull, 3715489405624989547ull}},
+{{11178530145338216202ull, 16545734772101687747ull,
+ 4201308913450998029ull, 2322180878515618467ull}},
+{{9361476663245382349ull, 6847110409844945972ull, 639950123386359633ull,
+ 2902726098144523084ull}},
+{{11701845829056727936ull, 13170574030733570369ull,
+ 799937654232949541ull, 3628407622680653855ull}},
+{{792249231038746208ull, 2628159483134799250ull,
+ 14834980123073350639ull, 4535509528350817318ull}},
+{{5106841787826604284ull, 8560128704600331387ull,
+ 4660176558493456245ull, 2834693455219260824ull}},
+{{1771866216355867451ull, 15311846899177802138ull,
+ 5825220698116820306ull, 3543366819024076030ull}},
+{{11438204807299610122ull, 9916436587117476864ull,
+ 16504897909500801191ull, 4429208523780095037ull}},
+{{7148878004562256326ull, 13115301894589504896ull,
+ 12621404202651694696ull, 2768255327362559398ull}},
+{{8936097505702820408ull, 16394127368236881120ull,
+ 6553383216459842562ull, 3460319159203199248ull}},
+{{11170121882128525510ull, 11269287173441325592ull,
+ 8191729020574803203ull, 4325398949003999060ull}},
+{{6981326176330328444ull, 4737461474187134543ull,
+ 14343202674714027810ull, 2703374343127499412ull}},
+{{4114971701985522650ull, 15145198879588693987ull,
+ 17929003343392534762ull, 3379217928909374265ull}},
+{{532028609054515409ull, 9708126562631091676ull, 8576196123958504741ull,
+ 4224022411136717832ull}},
+{{9555889917513847939ull, 8373422110858126249ull,
+ 5360122577474065463ull, 2640014006960448645ull}},
+{{16556548415319697827ull, 5855091620145269907ull,
+ 11311839240269969733ull, 3300017508700560806ull}},
+{{16083999500722234380ull, 11930550543608975288ull,
+ 4916427013482686358ull, 4125021885875701008ull}},
+{{10052499687951396488ull, 2844908071328221651ull,
+ 3072766883426678974ull, 2578138678672313130ull}},
+{{7953938591511857706ull, 12779507126015052872ull,
+ 13064330641138124525ull, 3222673348340391412ull}},
+{{9942423239389822132ull, 2139325852236652378ull,
+ 16330413301422655657ull, 4028341685425489265ull}},
+{{10825700543046026737ull, 12866293703716377496ull,
+ 3288979285748077929ull, 2517713553390930791ull}},
+{{13532125678807533421ull, 2247809074363308158ull,
+ 17946282162467261124ull, 3147141941738663488ull}},
+{{7691785061654640968ull, 2809761342954135198ull,
+ 3986108629374524789ull, 3933927427173329361ull}},
+{{195679645106762701ull, 4061943848560028451ull,
+ 14020532939427547753ull, 2458704641983330850ull}},
+{{14079657611665617088ull, 9689115829127423467ull,
+ 8302294137429658883ull, 3073380802479163563ull}},
+{{12987885996154633456ull, 7499708767981891430ull,
+ 5766181653359685700ull, 3841726003098954454ull}},
+{{3505742729169258006ull, 13910690016843457952ull,
+ 17438921588631967274ull, 2401078751936846533ull}},
+{{4382178411461572508ull, 8164990484199546632ull,
+ 7963593930507795381ull, 3001348439921058167ull}},
+{{5477723014326965634ull, 14817924123676821194ull,
+ 5342806394707356322ull, 3751685549901322709ull}},
+{{8035262902381741426ull, 13872888595725401150ull,
+ 5645097005905791653ull, 2344803468688326693ull}},
+{{820706591122400974ull, 3506052689374587726ull,
+ 11668057275809627471ull, 2931004335860408366ull}},
+{{10249255275757777025ull, 18217623917000398369ull,
+ 5361699557907258530ull, 3663755419825510458ull}},
+{{17423255113124609185ull, 13548657859395722153ull,
+ 15925496484238848971ull, 4579694274781888072ull}},
+{{3972005418061798885ull, 6162068152908632394ull,
+ 9953435302649280607ull, 2862308921738680045ull}},
+{{14188378809432024414ull, 3090899172708402588ull,
+ 17053480146738988663ull, 3577886152173350056ull}},
+{{17735473511790030518ull, 17698682021167666947ull,
+ 2870106109714184212ull, 4472357690216687571ull}},
+{{8778827935655075122ull, 1838304226375016034ull,
+ 17934717383067222797ull, 2795223556385429731ull}},
+{{1750162882714068094ull, 6909566301396157947ull,
+ 17806710710406640592ull, 3494029445481787164ull}},
+{{16022761658674748829ull, 8636957876745197433ull,
+ 3811644314298749124ull, 4367536806852233956ull}},
+{{3096697009030636163ull, 14621470709820524204ull,
+ 11605649733291494010ull, 2729710504282646222ull}},
+{{3870871261288295203ull, 9053466350420879447ull,
+ 5283690129759591705ull, 3412138130353307778ull}},
+{{226903058182981100ull, 15928518956453487213ull,
+ 15827984699054265439ull, 4265172662941634722ull}},
+{{2447657420578057140ull, 16872853375424511364ull,
+ 14504176455336303803ull, 2665732914338521701ull}},
+{{3059571775722571424ull, 16479380700853251301ull,
+ 4295162513888216042ull, 3332166142923152127ull}},
+{{8436150738080602184ull, 11375853839211788318ull,
+ 757267123932882149ull, 4165207678653940159ull}},
+{{660908192872988461ull, 9415751658721061651ull, 7390820980099133199ull,
+ 2603254799158712599ull}},
+{{14661193296373399289ull, 7158003554973939159ull,
+ 4626840206696528595ull, 3254068498948390749ull}},
+{{13714805602039361207ull, 4335818425290036045ull,
+ 10395236276798048648ull, 4067585623685488436ull}},
+{{10877596510488294706ull, 2709886515806272528ull,
+ 15720394709853556213ull, 2542241014803430272ull}},
+{{13596995638110368383ull, 7999044163185228564ull,
+ 1203749313607393650ull, 3177801268504287841ull}},
+{{16996244547637960478ull, 775433167126759897ull,
+ 6116372660436629967ull, 3972251585630359801ull}},
+{{3705123814632643443ull, 7402174757095306792ull,
+ 15351947958841363489ull, 2482657241018974875ull}},
+{{4631404768290804304ull, 13864404464796521394ull,
+ 14578248930124316457ull, 3103321551273718594ull}},
+{{15012627997218281188ull, 3495447525713488030ull,
+ 8999439125800619764ull, 3879151939092148243ull}},
+{{4771206479834037838ull, 11408026740425705827ull,
+ 3318806444411693400ull, 2424469961932592652ull}},
+{{1352322081365159394ull, 14260033425532132284ull,
+ 4148508055514616750ull, 3030587452415740815ull}},
+{{1690402601706449242ull, 8601669745060389547ull, 573949050965883034ull,
+ 3788234315519676019ull}},
+{{17197402690562388441ull, 9987729609090131370ull,
+ 16499619221349534560ull, 2367646447199797511ull}},
+{{12273381326348209743ull, 12484662011362664213ull,
+ 16012838008259530296ull, 2959558058999746889ull}},
+{{1506668602653098466ull, 15605827514203330267ull,
+ 6180989455042249158ull, 3699447573749683612ull}},
+{{17082568941154044206ull, 5141956177949693512ull,
+ 13086490446256181532ull, 2312154733593552257ull}},
+{{2906467102733003641ull, 6427445222437116891ull,
+ 2523055002538063203ull, 2890193416991940322ull}},
+{{17468141933698418263ull, 3422620509619008209ull,
+ 12377190790027354812ull, 3612741771239925402ull}},
+{{8000119361840859116ull, 4278275637023760262ull,
+ 6248116450679417707ull, 4515927214049906753ull}},
+{{388388582723149044ull, 368079263926156212ull, 15434287827743105827ull,
+ 2822454508781191720ull}},
+{{485485728403936305ull, 14295157135189858977ull, 846115710969330667ull,
+ 3528068135976489651ull}},
+{{5218543178932308285ull, 13257260400559935817ull,
+ 14892702693993827046ull, 4410085169970612063ull}},
+{{14790804532901162438ull, 3674101731922571981ull,
+ 16225468211387223760ull, 2756303231231632539ull}},
+{{4653447610844289336ull, 4592627164903214977ull,
+ 15670149245806641796ull, 3445379039039540674ull}},
+{{10428495531982749574ull, 5740783956129018721ull,
+ 10364314520403526437ull, 4306723798799425843ull}},
+{{18047024753557688244ull, 5893832981794330652ull,
+ 4171853566038510071ull, 2691702374249641152ull}},
+{{4112036868237558688ull, 2755605208815525412ull,
+ 5214816957548137589ull, 3364627967812051440ull}},
+{{5140046085296948360ull, 8056192529446794669ull,
+ 6518521196935171986ull, 4205784959765064300ull}},
+{{5518371812524286677ull, 9646806349331634572ull,
+ 13297447784939258299ull, 2628615599853165187ull}},
+{{6897964765655358347ull, 7446821918237155311ull,
+ 12010123712746684970ull, 3285769499816456484ull}},
+{{4010769938641810029ull, 85155360941668331ull, 15012654640933356213ull,
+ 4107211874770570605ull}},
+{{200888202437437316ull, 2359065109802236659ull,
+ 11688752159797041585ull, 2567007421731606628ull}},
+{{14086168308328960357ull, 7560517405680183727ull,
+ 14610940199746301981ull, 3208759277164508285ull}},
+{{12996024366983812543ull, 14062332775527617563ull,
+ 4428617194400713764ull, 4010949096455635357ull}},
+{{5816672220151188887ull, 18012330021559536785ull,
+ 5073728755714140054ull, 2506843185284772098ull}},
+{{11882526293616374013ull, 13292040490094645173ull,
+ 15565532981497450876ull, 3133553981605965122ull}},
+{{1018099811738303804ull, 16615050612618306467ull,
+ 10233544190017037787ull, 3916942477007456403ull}},
+{{16777213446832297542ull, 8078563623672747589ull,
+ 4090122109546954665ull, 2448089048129660252ull}},
+{{7136458753258208215ull, 14709890548018322391ull,
+ 5112652636933693331ull, 3060111310162075315ull}},
+{{4308887423145372365ull, 13775677166595515085ull,
+ 1779129777739728760ull, 3825139137702594144ull}},
+{{4998897648679551680ull, 8609798229122196928ull,
+ 1111956111087330475ull, 2390711961064121340ull}},
+{{6248622060849439600ull, 6150561767975358256ull,
+ 1389945138859163094ull, 2988389951330151675ull}},
+{{7810777576061799500ull, 16911574246823973628ull,
+ 15572489478856117579ull, 3735487439162689593ull}},
+{{14105108021893400496ull, 8263890895051289565ull,
+ 2815276896643991631ull, 2334679649476680996ull}},
+{{3796326972084586908ull, 5718177600386724053ull,
+ 3519096120804989539ull, 2918349561845851245ull}},
+{{9357094733533121538ull, 2536035982056017162ull,
+ 9010556169433624828ull, 3647936952307314056ull}},
+{{2472996380061626115ull, 3170044977570021453ull,
+ 11263195211792031035ull, 4559921190384142570ull}},
+{{3851465746752210274ull, 18122179175477121072ull,
+ 11651183025797407300ull, 2849950743990089106ull}},
+{{4814332183440262842ull, 4205979895636849724ull,
+ 5340606745391983318ull, 3562438429987611383ull}},
+{{6017915229300328553ull, 14480846906400837963ull,
+ 2064072413312591243ull, 4453048037484514229ull}},
+{{1455354009099011394ull, 6744686307286829775ull,
+ 3595888267534063479ull, 2783155023427821393ull}},
+{{15654250566655927954ull, 3819171865681149314ull,
+ 9106546352844967253ull, 3478943779284776741ull}},
+{{10344441171465134134ull, 9385650850528824547ull,
+ 15994868959483596970ull, 4348679724105970926ull}},
+{{4159432722952014882ull, 10477717800007903246ull,
+ 5385107081249860202ull, 2717924827566231829ull}},
+{{14422662940544794410ull, 3873775213155103249ull,
+ 11343069869989713157ull, 3397406034457789786ull}},
+{{4193270620398829301ull, 9453905034871266966ull,
+ 4955465300632365638ull, 4246757543072237233ull}},
+{{16455852193031432025ull, 1297004628367153949ull,
+ 14626380858963698284ull, 2654223464420148270ull}},
+{{6734757186007126319ull, 1621255785458942437ull,
+ 9059604036849847047ull, 3317779330525185338ull}},
+{{13030132500936295803ull, 15861627787105841758ull,
+ 2101133009207533000ull, 4147224163156481673ull}},
+{{3532146794657796973ull, 9913517366941151099ull,
+ 12842423176823177885ull, 2592015101972801045ull}},
+{{18250241548604409928ull, 17003582727103826777ull,
+ 2217970915746808644ull, 3240018877466001307ull}},
+{{8977743880473348698ull, 2807734335170231856ull,
+ 16607521699965674518ull, 4050023596832501633ull}},
+{{5611089925295842937ull, 15589892014763558622ull,
+ 3462172034837464717ull, 2531264748020313521ull}},
+{{16237234443474579479ull, 5652306963172284565ull,
+ 8939401061974218801ull, 3164080935025391901ull}},
+{{6461484999061060636ull, 11677069722392743611ull,
+ 15785937345895161405ull, 3955101168781739876ull}},
+{{1732585115199468946ull, 9604011585709158709ull, 642838804329700070ull,
+ 2471938230488587423ull}},
+{{6777417412426724086ull, 2781642445281672578ull,
+ 14638606560694288800ull, 3089922788110734278ull}},
+{{17695143802388180916ull, 3477053056602090722ull,
+ 9074886164013085192ull, 3862403485138417848ull}},
+{{15671150894920000976ull, 2173158160376306701ull,
+ 5671803852508178245ull, 2414002178211511155ull}},
+{{5753880563367837508ull, 7328133718897771281ull,
+ 2478068797207834902ull, 3017502722764388944ull}},
+{{11804036722637184789ull, 18383539185476989909ull,
+ 3097585996509793627ull, 3771878403455486180ull}},
+{{9683365960861934446ull, 9183868981709424741ull,
+ 11159363284673396825ull, 2357424002159678862ull}},
+{{16715893469504805961ull, 16091522245564168830ull,
+ 4725832068986970223ull, 2946780002699598578ull}},
+{{11671494800026231643ull, 15502716788527823134ull,
+ 15130662123088488587ull, 3683475003374498222ull}},
+{{5365996463178013746ull, 14766709967232391014ull,
+ 9689955617005834926ull, 4604343754218122778ull}},
+{{17188805844768422303ull, 4617507711092856479ull,
+ 10667908279056034733ull, 2877714846386326736ull}},
+{{16874321287533139975ull, 10383570657293458503ull,
+ 13334885348820043416ull, 3597143557982908420ull}},
+{{16481215590989037064ull, 12979463321616823129ull,
+ 16668606686025054270ull, 4496429447478635525ull}},
+{{3383230716727066309ull, 3500478557583126552ull,
+ 12723722187979352871ull, 2810268404674147203ull}},
+{{4229038395908832887ull, 18210656252261071902ull,
+ 11292966716546803184ull, 3512835505842684004ull}},
+{{14509670031740816916ull, 4316576241616788261ull,
+ 14116208395683503981ull, 4391044382303355005ull}},
+{{11374386779051704525ull, 5003703160224186615ull,
+ 11128473256515883940ull, 2744402738939596878ull}},
+{{9606297455387242752ull, 6254628950280233269ull,
+ 4687219533790079117ull, 3430503423674496098ull}},
+{{16619557837661441344ull, 12429972206277679490ull,
+ 15082396454092374704ull, 4288129279593120122ull}},
+{{14998909666965788744ull, 7768732628923549681ull,
+ 14038183802235122094ull, 2680080799745700076ull}},
+{{4913579028425072218ull, 487543749299661294ull,
+ 17547729752793902618ull, 3350100999682125095ull}},
+{{15365345822386116080ull, 9832801723479352425ull,
+ 17322976172564990368ull, 4187626249602656369ull}},
+{{2685812111350240694ull, 6145501077174595266ull,
+ 3909331080212037124ull, 2617266406001660231ull}},
+{{12580637176042576676ull, 7681876346468244082ull,
+ 274977831837658501ull, 3271583007502075289ull}},
+{{6502424433198445037ull, 14214031451512693007ull,
+ 4955408308224461030ull, 4089478759377594111ull}},
+{{10981544298390110004ull, 4272083638768045225ull,
+ 10014659220281370000ull, 2555924224610996319ull}},
+{{18338616391415025409ull, 5340104548460056531ull,
+ 7906638006924324596ull, 3194905280763745399ull}},
+{{18311584470841393857ull, 6675130685575070664ull,
+ 5271611490228017841ull, 3993631600954681749ull}},
+{{11444740294275871161ull, 15701171724552888925ull,
+ 5600600190606205102ull, 2496019750596676093ull}},
+{{470867312562675239ull, 10403092618836335349ull,
+ 11612436256685144282ull, 3120024688245845116ull}},
+{{5200270159130731953ull, 3780493736690643378ull,
+ 14515545320856430353ull, 3900030860307306395ull}},
+{{7861854867884095375ull, 13892023631500121871ull,
+ 6766372816321575018ull, 2437519287692066497ull}},
+{{5215632566427731314ull, 8141657502520376531ull,
+ 13069652038829356677ull, 3046899109615083121ull}},
+{{1907854689607276238ull, 14788757896577858568ull,
+ 2502006993254532134ull, 3808623887018853902ull}},
+{{1192409181004547649ull, 4631287666933773701ull,
+ 15398812426066246296ull, 2380389929386783688ull}},
+{{6102197494683072465ull, 5789109583667217126ull, 801771458873256254ull,
+ 2975487411733479611ull}},
+{{16851118905208616390ull, 16459759016438797215ull,
+ 14837272378873734029ull, 3719359264666849513ull}},
+{{17449478343396467100ull, 12593192394487942211ull,
+ 2355766209155001912ull, 2324599540416780946ull}},
+{{17200161910818195970ull, 15741490493109927764ull,
+ 12168079798298528198ull, 2905749425520976182ull}},
+{{3053458314813193347ull, 10453491079532633898ull,
+ 5986727711018384440ull, 3632186781901220228ull}},
+{{13040194930371267492ull, 13066863849415792372ull,
+ 7483409638772980550ull, 4540233477376525285ull}},
+{{17373493868336817990ull, 3555103887457482328ull,
+ 6982974033446806796ull, 2837645923360328303ull}},
+{{3270123261711470872ull, 4443879859321852911ull,
+ 4117031523381120591ull, 3547057404200410379ull}},
+{{17922712132421502302ull, 943163805724928234ull, 534603385799012835ull,
+ 4433821755250512974ull}},
+{{15813381101190826843ull, 16730378443073937810ull,
+ 14169185171406546733ull, 2771138597031570608ull}},
+{{10543354339633757745ull, 7077914998560258551ull,
+ 17711481464258183417ull, 3463923246289463260ull}},
+{{8567506906114809278ull, 13459079766627711093ull,
+ 3692607756613177655ull, 4329904057861829076ull}},
+{{7660534825535449751ull, 15329453881783401289ull,
+ 11531251884738011842ull, 2706190036163643172ull}},
+{{14187354550346700092ull, 9938445315374475803ull,
+ 14414064855922514803ull, 3382737545204553965ull}},
+{{13122507169505987211ull, 7811370625790706850ull,
+ 4182523014620979792ull, 4228421931505692457ull}},
+{{12813252999368629911ull, 4882106641119191781ull,
+ 14143291930206582130ull, 2642763707191057785ull}},
+{{2181508193928623677ull, 15326005338253765535ull,
+ 3844056857476063950ull, 3303454633988822232ull}},
+{{16561943297692943308ull, 9934134635962431110ull,
+ 4805071071845079938ull, 4129318292486027790ull}},
+{{5739528542630701664ull, 10820520165903907348ull,
+ 16838227475185338673ull, 2580823932803767368ull}},
+{{7174410678288377079ull, 18137336225807272089ull,
+ 2601040270272121725ull, 3226029916004709211ull}},
+{{13579699366287859253ull, 8836612226976926399ull,
+ 17086358393122315869ull, 4032537395005886513ull}},
+{{15404841131570993889ull, 7828725651074272951ull,
+ 3761444968060365562ull, 2520335871878679071ull}},
+{{14644365396036354458ull, 562535026988065381ull, 90120191648069049ull,
+ 3150419839848348839ull}},
+{{4470398689763279360ull, 5314854802162469631ull,
+ 13947708294842250023ull, 3938024799810436048ull}},
+{{9711528208743131456ull, 10239313278992625375ull,
+ 8717317684276406264ull, 2461265499881522530ull}},
+{{7527724242501526416ull, 12799141598740781719ull,
+ 1673275068490732022ull, 3076581874851903163ull}},
+{{4797969284699520116ull, 6775554961571201341ull,
+ 15926651890895578740ull, 3845727343564878953ull}},
+{{5304573812150894025ull, 13458093887836776646ull,
+ 3036628404168654856ull, 2403579589728049346ull}},
+{{15854089302043393339ull, 16822617359795970807ull,
+ 13019157542065594378ull, 3004474487160061682ull}},
+{{15205925609126853769ull, 11804899662890187701ull,
+ 7050574890727217165ull, 3755593108950077103ull}},
+{{11809546514917977558ull, 9683905298520061265ull,
+ 11324138334345592584ull, 2347245693093798189ull}},
+{{926875088365308235ull, 12104881623150076582ull, 320114862649827018ull,
+ 2934057116367247737ull}},
+{{10381965897311411102ull, 5907729992082819919ull,
+ 5011829596739671677ull, 3667571395459059671ull}},
+{{8365771353211875973ull, 11996348508530912803ull,
+ 1653100977497201692ull, 4584464244323824589ull}},
+{{2922764086543728532ull, 16721089854686596310ull,
+ 3339031120149445009ull, 2865290152702390368ull}},
+{{12876827145034436472ull, 7066304263076081675ull,
+ 4173788900186806262ull, 3581612690877987960ull}},
+{{11484347912865657686ull, 18056252365699877902ull,
+ 5217236125233507827ull, 4477015863597484950ull}},
+{{2566031427113648150ull, 8979314719348729737ull,
+ 17095830633553106104ull, 2798134914748428093ull}},
+{{7819225302319448092ull, 11224143399185912171ull,
+ 7534730236659218918ull, 3497668643435535117ull}},
+{{5162345609471922210ull, 4806807212127614406ull,
+ 14030098814251411552ull, 4372085804294418896ull}},
+{{17061524061202115094ull, 3004254507579759003ull,
+ 8768811758907132220ull, 2732553627684011810ull}},
+{{16715219058075255963ull, 3755318134474698754ull,
+ 1737642661779139467ull, 3415692034605014763ull}},
+{{11670651785739294145ull, 82461649665985539ull,
+ 16007111382506088046ull, 4269615043256268453ull}},
+{{4988314356873364889ull, 13886596586323404674ull,
+ 12310287623279998980ull, 2668509402035167783ull}},
+{{15458764982946481919ull, 17358245732904255842ull,
+ 10776173510672610821ull, 3335636752543959729ull}},
+{{10100084191828326591ull, 7862749110848156091ull,
+ 18081902906768151431ull, 4169545940679949661ull}},
+{{4006709610679010168ull, 11831747221921179413ull,
+ 13607032325943788596ull, 2605966212924968538ull}},
+{{9620073031776150613ull, 14789684027401474266ull,
+ 7785418370574959937ull, 3257457766156210673ull}},
+{{2801719252865412459ull, 4652046978969679121ull,
+ 14343458981646087826ull, 4071822207695263341ull}},
+{{13280289579109352547ull, 7519215380283437354ull,
+ 11270504872742498843ull, 2544888879809539588ull}},
+{{7376989937031914875ull, 4787333206926908789ull,
+ 14088131090928123554ull, 3181111099761924485ull}},
+{{13832923439717281498ull, 15207538545513411794ull,
+ 3775105808377990730ull, 3976388874702405607ull}},
+{{13257263168250688840ull, 14116397609373270275ull,
+ 9276970157877326062ull, 2485243046689003504ull}},
+{{11959892941885973146ull, 8422124974861812036ull,
+ 11596212697346657578ull, 3106553808361254380ull}},
+{{14949866177357466433ull, 1304284181722489237ull,
+ 14495265871683321973ull, 3883192260451567975ull}},
+{{11649509370062110473ull, 3121020622790249725ull,
+ 15977070197443158089ull, 2426995162782229984ull}},
+{{726828657295474379ull, 8512961796915200061ull, 1524593673094395995ull,
+ 3033743953477787481ull}},
+{{5520221840046730877ull, 6029516227716612172ull,
+ 6517428109795382898ull, 3792179941847234351ull}},
+{{12673510686883982607ull, 8380133660750270511ull,
+ 10990921596263196167ull, 2370112463654521469ull}},
+{{11230202340177590354ull, 5863481057510450235ull,
+ 18350338013756383113ull, 2962640579568151836ull}},
+{{9426066906794600038ull, 11941037340315450698ull,
+ 4491178443485927275ull, 3703300724460189796ull}},
+{{10502977835174012928ull, 5157305328483462734ull,
+ 12030358564033480355ull, 2314562952787618622ull}},
+{{3905350257112740352ull, 1834945642176940514ull,
+ 5814576168187074636ull, 2893203690984523278ull}},
+{{14105059858245701248ull, 2293682052721175642ull,
+ 16491592247088619103ull, 3616504613730654097ull}},
+{{8407952785952350752ull, 16702160621183633265ull,
+ 6779432253578610166ull, 4520630767163317622ull}},
+{{16784185537288688980ull, 5827164369812382886ull,
+ 18072203213768795066ull, 2825394229477073513ull}},
+{{11756859884756085417ull, 16507327499120254416ull,
+ 8755195961928830120ull, 3531742786846341892ull}},
+{{14696074855945106771ull, 2187415300190766404ull,
+ 10943994952411037651ull, 4414678483557927365ull}},
+{{18408418821820467540ull, 17508035627115086666ull,
+ 9145839854470592483ull, 2759174052223704603ull}},
+{{13787151490420808617ull, 17273358515466470429ull,
+ 6820613799660852700ull, 3448967565279630754ull}},
+{{3398881307743847059ull, 3144954070623536421ull,
+ 17749139286430841684ull, 4311209456599538442ull}},
+{{4430143826553598364ull, 11188968330994486071ull,
+ 15704898072446663956ull, 2694505910374711526ull}},
+{{925993764764610051ull, 13986210413743107589ull,
+ 10407750553703554137ull, 3368132387968389408ull}},
+{{5769178224383150468ull, 3647704961896720774ull,
+ 13009688192129442672ull, 4210165484960486760ull}},
+{{17440794445521632755ull, 2279815601185450483ull,
+ 8131055120080901670ull, 2631353428100304225ull}},
+{{17189307038474653039ull, 12073141538336588912ull,
+ 14775504918528514991ull, 3289191785125380281ull}},
+{{3039889724383764683ull, 10479740904493348237ull,
+ 4634323092878480027ull, 4111489731406725352ull}},
+{{4205774086953546879ull, 4243995056094648696ull,
+ 2896451933049050017ull, 2569681082129203345ull}},
+{{5257217608691933599ull, 9916679838545698774ull,
+ 8232250934738700425ull, 3212101352661504181ull}},
+{{15794894047719692806ull, 17007535816609511371ull,
+ 14901999686850763435ull, 4015126690826880226ull}},
+{{7565965770611114052ull, 8323866876167250655ull,
+ 13925435822709115051ull, 2509454181766800141ull}},
+{{4845771194836504661ull, 5793147576781675415ull,
+ 3571736723104230102ull, 3136817727208500177ull}},
+{{1445527975118242922ull, 16464806507831870077ull,
+ 9076356922307675531ull, 3921022159010625221ull}},
+{{3209297993662595778ull, 7984661058181224846ull,
+ 7978566085655991159ull, 2450638849381640763ull}},
+{{13234994528933020531ull, 5369140304299143153ull,
+ 5361521588642601045ull, 3063298561727050954ull}},
+{{2708685105884111951ull, 11323111398801316846ull,
+ 15925274022658027114ull, 3829123202158813692ull}},
+{{15527986246459733682ull, 11688630642678210932ull,
+ 729924227306491138ull, 2393202001349258558ull}},
+{{963238734365115486ull, 5387416266492987858ull,
+ 10135777320987889731ull, 2991502501686573197ull}},
+{{10427420454811170166ull, 2122584314688846918ull,
+ 17281407669662250068ull, 3739378127108216496ull}},
+{{1905451765829593450ull, 10549987233535305132ull,
+ 10800879793538906292ull, 2337111329442635310ull}},
+{{2381814707286991812ull, 13187484041919131415ull,
+ 4277727705068857057ull, 2921389161803294138ull}},
+{{16812326439390903477ull, 2649296997116750556ull,
+ 14570531668190847130ull, 3651736452254117672ull}},
+{{2568663975529077730ull, 12534993283250714004ull,
+ 18213164585238558912ull, 4564670565317647090ull}},
+{{10828787021560449389ull, 7834370802031696252ull,
+ 15994913884201487224ull, 2852919103323529431ull}},
+{{13535983776950561737ull, 9792963502539620315ull,
+ 15381956336824471126ull, 3566148879154411789ull}},
+{{12308293702760814267ull, 3017832341319749586ull,
+ 5392387365748425196ull, 4457686098943014737ull}},
+{{12304369582652896821ull, 11109517250179619299ull,
+ 14899457149661235507ull, 2786053811839384210ull}},
+{{10768775959888733122ull, 9275210544297136220ull,
+ 9400949400221768576ull, 3482567264799230263ull}},
+{{13460969949860916402ull, 11594013180371420275ull,
+ 7139500731849822816ull, 4353209080999037829ull}},
+{{6107263209449378800ull, 7246258237732137672ull,
+ 6768030966619833212ull, 2720755675624398643ull}},
+{{7634079011811723499ull, 9057822797165172090ull,
+ 3848352689847403611ull, 3400944594530498304ull}},
+{{319226727909878566ull, 6710592478029077209ull, 4810440862309254514ull,
+ 4251180743163122880ull}},
+{{11728731751012143864ull, 8805806317195561159ull,
+ 3006525538943284071ull, 2656987964476951800ull}},
+{{10049228670337791926ull, 6395571878067063545ull,
+ 3758156923679105089ull, 3321234955596189750ull}},
+{{17173221856349627811ull, 12606150866011217335ull,
+ 13921068191453657169ull, 4151543694495237187ull}},
+{{17650792687859599238ull, 961315263615928978ull,
+ 6394824610444841779ull, 2594714809059523242ull}},
+{{12840118822969723240ull, 15036702134802074935ull,
+ 17216902799910828031ull, 3243393511324404052ull}},
+{{11438462510284766145ull, 14184191650075205765ull,
+ 3074384426178983423ull, 4054241889155505066ull}},
+{{9454882078141672793ull, 15782648808938085459ull,
+ 6533176284789252543ull, 2533901180722190666ull}},
+{{7206916579249703087ull, 15116624992745218920ull,
+ 17389842392841341487ull, 3167376475902738332ull}},
+{{9008645724062128859ull, 14284095222504135746ull,
+ 3290558917342125243ull, 3959220594878422916ull}},
+{{10242089595966218441ull, 6621716504851390889ull,
+ 11279971360193604085ull, 2474512871799014322ull}},
+{{17414298013385160955ull, 12888831649491626515ull,
+ 4876592163387229298ull, 3093141089748767903ull}},
+{{17156186498304063290ull, 6887667525009757336ull,
+ 1484054185806648719ull, 3866426362185959879ull}},
+{{10722616561440039556ull, 11222321230772180191ull,
+ 7845062893770237305ull, 2416516476366224924ull}},
+{{8791584683372661541ull, 192843483183061527ull, 9806328617212796632ull,
+ 3020645595457781155ull}},
+{{6377794835788439022ull, 241054353978826909ull, 7646224753088607886ull,
+ 3775806994322226444ull}},
+{{6291964781581468341ull, 13985717026518930530ull,
+ 14002262507535155736ull, 2359879371451391527ull}},
+{{17088328013831611234ull, 17482146283148663162ull,
+ 12891142115991556766ull, 2949849214314239409ull}},
+{{12137037980434738235ull, 12629310817081053145ull,
+ 2278869589707282246ull, 3687311517892799262ull}},
+{{1336239420261259081ull, 6563266484496540624ull,
+ 12071959023988878616ull, 4609139397365999077ull}},
+{{835149637663286926ull, 4102041552810337890ull, 9850817399206743087ull,
+ 2880712123353749423ull}},
+{{10267309083933884466ull, 515865922585534458ull,
+ 7701835730581040955ull, 3600890154192186779ull}},
+{{3610764318062579774ull, 14479890458514081785ull,
+ 5015608644798913289ull, 4501112692740233474ull}},
+{{13785942744857582119ull, 2132402508930219259ull,
+ 7746441421426708710ull, 2813195432962645921ull}},
+{{12620742412644589744ull, 11888875173017549882ull,
+ 14294737795210773791ull, 3516494291203307401ull}},
+{{6552555978950961372ull, 10249407947844549449ull,
+ 4033364188731303527ull, 4395617864004134252ull}},
+{{15624562532912820618ull, 13323408995043925261ull,
+ 11744224654811840512ull, 2747261165002583907ull}},
+{{5695645110858862060ull, 16654261243804906577ull,
+ 10068594800087412736ull, 3434076456253229884ull}},
+{{11731242407000965479ull, 2371082481046581605ull,
+ 12585743500109265921ull, 4292595570316537355ull}},
+{{9637869513589297377ull, 13011141596722583263ull,
+ 5560246678354597248ull, 2682872231447835847ull}},
+{{7435650873559233817ull, 16263926995903229079ull,
+ 2338622329515858656ull, 3353590289309794809ull}},
+{{4682877573521654367ull, 1883164671169484733ull,
+ 7534963930322211225ull, 4191987861637243511ull}},
+{{5232641492664727931ull, 12706192965549397718ull,
+ 11626881484092463871ull, 2619992413523277194ull}},
+{{15764173902685685722ull, 11271055188509359243ull,
+ 5310229818260804031ull, 3274990516904096493ull}},
+{{15093531359929719249ull, 9477132967209311150ull,
+ 11249473291253392943ull, 4093738146130120616ull}},
+{{4821771081528686627ull, 12840737132146901325ull,
+ 7030920807033370589ull, 2558586341331325385ull}},
+{{10638899870338246187ull, 2215863359901462944ull,
+ 13400337027219101141ull, 3198232926664156731ull}},
+{{13298624837922807734ull, 7381515218304216584ull,
+ 12138735265596488522ull, 3997791158330195914ull}},
+{{8311640523701754834ull, 9225133029867523269ull,
+ 12198395559425193230ull, 2498619473956372446ull}},
+{{15001236673054581446ull, 2308044250479628278ull,
+ 6024622412426715730ull, 3123274342445465558ull}},
+{{9528173804463450999ull, 12108427349954311156ull,
+ 16754150052388170470ull, 3904092928056831947ull}},
+{{15178480664644432683ull, 2956081075294056568ull,
+ 8165500773528912592ull, 2440058080035519967ull}},
+{{526356757095989237ull, 3695101344117570711ull, 5595189948483752836ull,
+ 3050072600044399959ull}},
+{{14493004001652150259ull, 4618876680146963388ull,
+ 2382301417177303141ull, 3812590750055499949ull}},
+{{18281499537887369720ull, 5192640934305546069ull,
+ 3794781394949508415ull, 2382869218784687468ull}},
+{{9016816367077048438ull, 1879115149454544683ull,
+ 4743476743686885519ull, 2978586523480859335ull}},
+{{6659334440418922643ull, 16183951992100344566ull,
+ 1317659911181218994ull, 3723233154351074169ull}},
+{{17997142080543990364ull, 14726656013490103257ull,
+ 12352752490556731631ull, 2327020721469421355ull}},
+{{8661369545397824243ull, 13796633998435241168ull,
+ 10829254594768526635ull, 2908775901836776694ull}},
+{{10826711931747280304ull, 12634106479616663556ull,
+ 4313196206605882486ull, 3635969877295970868ull}},
+{{13533389914684100379ull, 6569261062666053637ull,
+ 5391495258257353108ull, 4544962346619963585ull}},
+{{10764211705891256689ull, 13329160201021059331ull,
+ 14898899582479315452ull, 2840601466637477240ull}},
+{{8843578613936682957ull, 16661450251276324164ull,
+ 176880404389592699ull, 3550751833296846551ull}},
+{{11054473267420853697ull, 16215126795668017301ull,
+ 14056158560769154586ull, 4438439791621058188ull}},
+{{9214888801351727513ull, 14746140265719898717ull,
+ 18008471137335497424ull, 2774024869763161367ull}},
+{{16130297020117047295ull, 18432675332149873396ull,
+ 17898902903241983876ull, 3467531087203951709ull}},
+{{1716127201436757502ull, 4594100091477790130ull,
+ 8538570573770316134ull, 4334413859004939637ull}},
+{{5684265519325361343ull, 16706370612455782543ull,
+ 7642449617820141535ull, 2709008661878087273ull}},
+{{2493645880729313775ull, 16271277247142340275ull,
+ 14164748040702564823ull, 3386260827347609091ull}},
+{{16952115406193805930ull, 15727410540500537439ull,
+ 13094249032450818125ull, 4232826034184511364ull}},
+{{17512601156512210563ull, 12135474597026529851ull,
+ 17407277682136537136ull, 2645516271365319602ull}},
+{{17279065427212875299ull, 15169343246283162314ull,
+ 12535725065815895612ull, 3306895339206649503ull}},
+{{12375459747161318316ull, 514934984144401277ull,
+ 11057970313842481612ull, 4133619174008311879ull}},
+{{10040505351189517900ull, 9545206401945026606ull,
+ 13828760473792632863ull, 2583511983755194924ull}},
+{{3327259652132121566ull, 7319821984003895354ull,
+ 17285950592240791079ull, 3229389979693993655ull}},
+{{13382446602019927766ull, 4538091461577481288ull,
+ 16995752221873600945ull, 4036737474617492069ull}},
+{{8364029126262454854ull, 14365522209554395565ull,
+ 12928188147884694542ull, 2522960921635932543ull}},
+{{15066722426255456471ull, 8733530725088218648ull,
+ 11548549166428480274ull, 3153701152044915679ull}},
+{{386658959109768973ull, 1693541369505497503ull, 9824000439608212439ull,
+ 3942126440056144599ull}},
+{{7159190877084687464ull, 7975992383582017795ull,
+ 13057529302396214630ull, 2463829025035090374ull}},
+{{4337302577928471426ull, 746618442622746436ull, 7098539591140492480ull,
+ 3079786281293862968ull}},
+{{5421628222410589282ull, 933273053278433045ull, 8873174488925615600ull,
+ 3849732851617328710ull}},
+{{5694360648220312254ull, 583295658299020653ull, 934048037151121846ull,
+ 2406083032260830444ull}},
+{{11729636828702778221ull, 9952491609728551624ull,
+ 1167560046438902307ull, 3007603790326038055ull}},
+{{14662046035878472776ull, 7828928493733301626ull,
+ 15294508113330791596ull, 3759504737907547568ull}},
+{{13775464790851433389ull, 14116452345438089324ull,
+ 9559067570831744747ull, 2349690461192217230ull}},
+{{17219330988564291736ull, 13033879413370223751ull,
+ 2725462426684905126ull, 2937113076490271538ull}},
+{{16912477717277976766ull, 7068977229858003881ull,
+ 12630200070210907216ull, 3671391345612839422ull}},
+{{7305539091315307246ull, 8836221537322504852ull,
+ 6564378050908858212ull, 4589239182016049278ull}},
+{{13789333968926842837ull, 14746010497681341340ull,
+ 17937794337100200094ull, 2868274488760030798ull}},
+{{17236667461158553546ull, 9209141085246900867ull,
+ 13198870884520474310ull, 3585343110950038498ull}},
+{{16934148308020804028ull, 2288054319703850276ull,
+ 7275216568795817080ull, 4481678888687548123ull}},
+{{1360470655658226710ull, 1430033949814906423ull,
+ 2241167346283691723ull, 2801049305429717577ull}},
+{{15535646374854947099ull, 15622600492550796740ull,
+ 7413145201282002557ull, 3501311631787146971ull}},
+{{972813894859132258ull, 5693192560406332214ull, 4654745483175115293ull,
+ 4376639539733933714ull}},
+{{14443066739569121373ull, 5864088359467651585ull,
+ 7520901945411834962ull, 2735399712333708571ull}},
+{{4218775369179238005ull, 16553482486189340290ull,
+ 4789441413337405798ull, 3419249640417135714ull}},
+{{14496841248328823314ull, 11468481070881899554ull,
+ 15210173803526533056ull, 4274062050521419642ull}},
+{{13672211798632902475ull, 7167800669301187221ull,
+ 14118044645631471064ull, 2671288781575887276ull}},
+{{3255206693008964382ull, 8959750836626484027ull,
+ 17647555807039338830ull, 3339110976969859095ull}},
+{{17904066421543369189ull, 1976316508928329225ull,
+ 17447758740371785634ull, 4173888721212323869ull}},
+{{4272512485823523887ull, 5846883836507593670ull,
+ 13210692221946059973ull, 2608680450757702418ull}},
+{{14564012644134180667ull, 11920290814061879991ull,
+ 7289993240577799158ull, 3260850563447128023ull}},
+{{13593329786740337930ull, 5676991480722574181ull,
+ 4500805532294861044ull, 4076063204308910029ull}},
+{{10801674125926405158ull, 12771491712306384671ull,
+ 5118846466897982104ull, 2547539502693068768ull}},
+{{8890406638980618544ull, 15964364640382980839ull,
+ 6398558083622477630ull, 3184424378366335960ull}},
+{{6501322280298385276ull, 10732083763623950241ull,
+ 7998197604528097038ull, 3980530472957919950ull}},
+{{15592541471254960558ull, 2095866333837580996ull,
+ 387187484402672745ull, 2487831545598699969ull}},
+{{1043932765359149081ull, 7231518935724364150ull,
+ 5095670373930728835ull, 3109789431998374961ull}},
+{{10528287993553712159ull, 4427712651228067283ull,
+ 10981273985840798948ull, 3887236789997968701ull}},
+{{4274336986757376147ull, 11990692443872317860ull,
+ 9169139250364193294ull, 2429522993748730438ull}},
+{{5342921233446720184ull, 5764993517985621517ull,
+ 2238052026100465810ull, 3036903742185913048ull}},
+{{11290337560235788134ull, 16429613934336802704ull,
+ 2797565032625582262ull, 3796129677732391310ull}},
+{{7056460975147367584ull, 5656822690533113786ull,
+ 15583536200673152626ull, 2372581048582744568ull}},
+{{18043948255788985288ull, 16294400400021168040ull,
+ 1032676177131889166ull, 2965726310728430711ull}},
+{{4108191246026679994ull, 11144628463171684243ull,
+ 15125903276697025170ull, 3707157888410538388ull}},
+{{261776519552981044ull, 11577078807909690556ull, 230317511080864923ull,
+ 2316973680256586493ull}},
+{{327220649441226305ull, 9859662491459725291ull, 4899582907278469058ull,
+ 2896217100320733116ull}},
+{{14244083867083696593ull, 3101206077469880805ull,
+ 6124478634098086323ull, 3620271375400916395ull}},
+{{3970046778572457030ull, 17711565652119514719ull,
+ 3043912274195219999ull, 4525339219251145494ull}},
+{{9398808264248867500ull, 17987257560215778555ull,
+ 15737503226654176211ull, 2828337012031965933ull}},
+{{7136824311883696470ull, 17872385931842335290ull,
+ 5836820978035556552ull, 3535421265039957417ull}},
+{{18144402426709396396ull, 3893738341093367496ull,
+ 11907712240971833595ull, 4419276581299946771ull}},
+{{11340251516693372748ull, 127743453969660733ull,
+ 5136477141393702045ull, 2762047863312466732ull}},
+{{340256340584552222ull, 4771365335889463821ull, 6420596426742127556ull,
+ 3452559829140583415ull}},
+{{5037006444158078182ull, 5964206669861829776ull,
+ 3414059515000271541ull, 4315699786425729269ull}},
+{{3148129027598798864ull, 6033472177877337562ull,
+ 4439630206088863665ull, 2697312366516080793ull}},
+{{13158533321353274388ull, 12153526240774059856ull,
+ 10161223776038467485ull, 3371640458145100991ull}},
+{{16448166651691592985ull, 1356849745685411108ull,
+ 8089843701620696453ull, 4214550572681376239ull}},
+{{1056732120452469808ull, 3153874100267075895ull,
+ 11973681341154017139ull, 2634094107925860149ull}},
+{{15155973205847750971ull, 17777400680616008580ull,
+ 1132043621160357711ull, 3292617634907325187ull}},
+{{498222433600137098ull, 17610064832342622822ull,
+ 15250112581732610851ull, 4115772043634156483ull}},
+{{14146447076282249398ull, 8700447511000445311ull,
+ 7225477354369187830ull, 2572357527271347802ull}},
+{{13071372826925423844ull, 1652187351895780831ull,
+ 18255218729816260596ull, 3215446909089184752ull}},
+{{11727530015229391901ull, 2065234189869726039ull,
+ 4372279338560774129ull, 4019308636361480941ull}},
+{{14247235287159451794ull, 12819986414737048534ull,
+ 5038517595814177782ull, 2512067897725925588ull}},
+{{8585672072094538935ull, 6801610981566534860ull,
+ 6298146994767722228ull, 3140084872157406985ull}},
+{{10732090090118173668ull, 8502013726958168575ull,
+ 12484369761887040689ull, 3925106090196758731ull}},
+{{13625085333964940399ull, 16842973625417325119ull,
+ 5496888091965706478ull, 2453191306372974207ull}},
+{{12419670649028787594ull, 11830344994916880591ull,
+ 2259424096529745194ull, 3066489132966217759ull}},
+{{10912902292858596589ull, 5564559206791324931ull,
+ 16659338175944345205ull, 3833111416207772198ull}},
+{{4514720923822928916ull, 5783692513458272034ull,
+ 5800400341537827849ull, 2395694635129857624ull}},
+{{14866773191633436953ull, 11841301660250227946ull,
+ 7250500426922284811ull, 2994618293912322030ull}},
+{{9360094452687020383ull, 10189941056885397029ull,
+ 18286497570507631822ull, 3743272867390402537ull}},
+{{8155902042143081692ull, 1757027142125985239ull,
+ 4511531953926188033ull, 2339545542119001586ull}},
+{{5583191534251464211ull, 6807969946084869453ull,
+ 14862786979262510849ull, 2924431927648751982ull}},
+{{11590675436241718167ull, 13121648451033474720ull,
+ 9355111687223362753ull, 3655539909560939978ull}},
+{{14488344295302147709ull, 2567002508509679688ull,
+ 2470517572174427634ull, 4569424886951174973ull}},
+{{9055215184563842318ull, 6216062586245937709ull,
+ 3849916491822711223ull, 2855890554344484358ull}},
+{{15930704999132190802ull, 3158392214380034232ull,
+ 14035767651633164837ull, 3569863192930605447ull}},
+{{1466637175205686886ull, 8559676286402430695ull,
+ 12933023546114068142ull, 4462328991163256809ull}},
+{{7834177262144636160ull, 738111660574131280ull, 1165610688680210733ull,
+ 2788955619477035506ull}},
+{{9792721577680795200ull, 5534325594145052004ull,
+ 10680385397705039224ull, 3486194524346294382ull}},
+{{12240901972100993999ull, 6917906992681315005ull,
+ 4127109710276523222ull, 4357743155432867978ull}},
+{{9956406741776815202ull, 18158749925707985590ull,
+ 7191129587350214917ull, 2723589472145542486ull}},
+{{3222136390366243194ull, 8863379351852818276ull,
+ 18212284021042544455ull, 3404486840181928107ull}},
+{{4027670487957803993ull, 6467538171388634941ull,
+ 18153669007875792665ull, 4255608550227410134ull}},
+{{4823137064187321448ull, 15571426403186366598ull,
+ 6734357111494982511ull, 2659755343892131334ull}},
+{{15252293367088927617ull, 14852596985555570343ull,
+ 17641318426223503947ull, 3324694179865164167ull}},
+{{14453680690433771617ull, 13954060213517075025ull,
+ 17439962014351992030ull, 4155867724831455209ull}},
+{{2116021403880025405ull, 4109601615020783987ull,
+ 3982447231328913163ull, 2597417328019659506ull}},
+{{16480084810132195468ull, 525316000348592079ull,
+ 14201431076015917262ull, 3246771660024574382ull}},
+{{15988419994237856431ull, 9880017037290515907ull,
+ 8528416808165120769ull, 4058464575030717978ull}},
+{{7686919487184966318ull, 17704225694375042202ull,
+ 9941946523530588384ull, 2536540359394198736ull}},
+{{385277322126432089ull, 3683538044259251137ull,
+ 12427433154413235481ull, 3170675449242748420ull}},
+{{5093282671085428015ull, 9216108573751451825ull,
+ 15534291443016544351ull, 3963344311553435525ull}},
+{{14712516715496862270ull, 12677596886235739246ull,
+ 12014775161099034171ull, 2477090194720897203ull}},
+{{9167273857516302029ull, 11235310089367286154ull,
+ 10406782932946404810ull, 3096362743401121504ull}},
+{{2235720285040601728ull, 4820765574854331885ull,
+ 13008478666183006013ull, 3870453429251401880ull}},
+{{3703168187364070032ull, 5318821493497651380ull,
+ 8130299166364378758ull, 2419033393282126175ull}},
+{{4628960234205087540ull, 15871898903726840033ull,
+ 5551187939528085543ull, 3023791741602657719ull}},
+{{10397886311183747329ull, 15228187611231162137ull,
+ 2327298905982719025ull, 3779739677003322149ull}},
+{{18027893990558311841ull, 2600088229378394479ull,
+ 3760404825452893343ull, 2362337298127076343ull}},
+{{17923181469770501897ull, 17085168342005156811ull,
+ 88820013388728774ull, 2952921622658845429ull}},
+{{17792290818785739467ull, 12133088390651670206ull,
+ 4722711035163298872ull, 3691152028323556786ull}},
+{{6508495743313699263ull, 7583180244157293879ull,
+ 7563380415404449699ull, 2306970017702222991ull}},
+{{3523933660714736175ull, 4867289286769229445ull,
+ 4842539500828174220ull, 2883712522127778739ull}},
+{{9016603094320808122ull, 6084111608461536806ull,
+ 1441488357607829871ull, 3604640652659723424ull}},
+{{2047381831046234345ull, 2993453492149533104ull,
+ 1801860447009787339ull, 4505800815824654280ull}},
+{{1279613644403896466ull, 18011809497089315854ull,
+ 1126162779381117086ull, 2816125509890408925ull}},
+{{10822889092359646390ull, 13291389834506869009ull,
+ 6019389492653784262ull, 3520156887363011156ull}},
+{{18140297383876945891ull, 7390865256278810453ull,
+ 7524236865817230328ull, 4400196109203763945ull}},
+{{13643528874136785134ull, 4619290785174256533ull,
+ 16231863087204238715ull, 2750122568252352465ull}},
+{{3219353037388817706ull, 1162427463040432763ull,
+ 6454770803723134682ull, 3437653210315440582ull}},
+{{17859249352018185844ull, 10676406365655316761ull,
+ 17291835541508694160ull, 4297066512894300727ull}},
+{{4244501817370284297ull, 6672753978534572976ull,
+ 17724926241084015706ull, 2685666570558937954ull}},
+{{5305627271712855371ull, 17564314510022992028ull,
+ 12932785764500243824ull, 3357083213198672443ull}},
+{{6632034089641069213ull, 3508649063819188419ull,
+ 11554296187197916877ull, 4196354016498340554ull}},
+{{1839178296811974306ull, 4498748674100686714ull,
+ 11833121135426085952ull, 2622721260311462846ull}},
+{{11522344907869743691ull, 5623435842625858392ull,
+ 5568029382427831632ull, 3278401575389328558ull}},
+{{14402931134837179614ull, 7029294803282322990ull,
+ 16183408764889565348ull, 4098001969236660697ull}},
+{{4390145940845849355ull, 13616681288906227677ull,
+ 3197101450414896486ull, 2561251230772912936ull}},
+{{10099368444484699597ull, 7797479574278008788ull,
+ 3996376813018620608ull, 3201564038466141170ull}},
+{{12624210555605874496ull, 9746849467847510985ull,
+ 14218843053128051568ull, 4001955048082676462ull}},
+{{972602569612589704ull, 6091780917404694366ull, 4275090889777644326ull,
+ 2501221905051672789ull}},
+{{10439125248870512938ull, 16838098183610643765ull,
+ 9955549630649443311ull, 3126527381314590986ull}},
+{{17660592579515529077ull, 16435936711085916802ull,
+ 3221065001457028331ull, 3908159226643238733ull}},
+{{15649556380624593577ull, 7966617435215004049ull,
+ 4319008635124336659ull, 2442599516652024208ull}},
+{{5726887420498578259ull, 5346585775591367158ull,
+ 5398760793905420824ull, 3053249395815030260ull}},
+{{16381981312477998632ull, 6683232219489208947ull,
+ 6748450992381776030ull, 3816561744768787825ull}},
+{{7932895311085055193ull, 18012078192462919304ull,
+ 15746996916307079778ull, 2385351090480492390ull}},
+{{9916119138856318992ull, 13291725703723873322ull,
+ 10460374108529073915ull, 2981688863100615488ull}},
+{{3171776886715622931ull, 12002971111227453749ull,
+ 13075467635661342394ull, 3727111078875769360ull}},
+{{4288203563410958284ull, 12113542962944546497ull,
+ 8172167272288338996ull, 2329444424297355850ull}},
+{{9971940472691085759ull, 15141928703680683121ull,
+ 991837053505647937ull, 2911805530371694813ull}},
+{{17076611609291245103ull, 5092352824318690189ull,
+ 5851482335309447826ull, 3639756912964618516ull}},
+{{7510706456331892666ull, 15588813067253138545ull,
+ 7314352919136809782ull, 4549696141205773145ull}},
+{{16223406581275902677ull, 5131322148605823686ull,
+ 16100685620528975874ull, 2843560088253608215ull}},
+{{11055886189740102538ull, 15637524722612055416ull,
+ 15514171007233831938ull, 3554450110317010269ull}},
+{{13819857737175128172ull, 10323533866410293462ull,
+ 5557655703760126211ull, 4443062637896262837ull}},
+{{4025725067307067204ull, 4146365657292739462ull,
+ 5779377824063772834ull, 2776914148685164273ull}},
+{{14255528370988609813ull, 14406329108470700135ull,
+ 11835908298507103946ull, 3471142685856455341ull}},
+{{13207724445308374362ull, 8784539348733599361ull,
+ 959827317851716221ull, 4338928357320569177ull}},
+{{1337298750676652120ull, 7796180102172193553ull,
+ 12129107119725792398ull, 2711830223325355735ull}},
+{{6283309456773203054ull, 521853090860466133ull,
+ 10549697881229852594ull, 3389787779156694669ull}},
+{{12465822839393891721ull, 9875688400430358474ull,
+ 17798808369964703646ull, 4237234723945868336ull}},
+{{12402825293048570230ull, 1560619231841586142ull,
+ 11124255231227939779ull, 2648271702466167710ull}},
+{{6280159579455936979ull, 15785832095084146390ull,
+ 4681947002180148915ull, 3310339628082709638ull}},
+{{17073571511174697032ull, 15120604100427795083ull,
+ 15075805789579961952ull, 4137924535103387047ull}},
+{{8365139185270491693ull, 9450377562767371927ull,
+ 16339907646128558076ull, 2586202834439616904ull}},
+{{5844737963160726713ull, 11812971953459214909ull,
+ 1978140483951145979ull, 3232753543049521131ull}},
+{{11917608472378296295ull, 10154528923396630732ull,
+ 16307733660221096186ull, 4040941928811901413ull}},
+{{16671877332091210992ull, 10958266595550282111ull,
+ 12498176546851879068ull, 2525588705507438383ull}},
+{{16228160646686625836ull, 13697833244437852639ull,
+ 11011034665137460931ull, 3156985881884297979ull}},
+{{15673514789930894391ull, 12510605537119927895ull,
+ 9152107312994438260ull, 3946232352355372474ull}},
+{{16713475771347890851ull, 17042500497554730742ull,
+ 10331753089048911816ull, 2466395220222107796ull}},
+{{11668472677330087755ull, 2856381548233861812ull,
+ 12914691361311139771ull, 3082994025277634745ull}},
+{{14585590846662609694ull, 17405534990574490977ull,
+ 2308306146356761001ull, 3853742531597043432ull}},
+{{2198465251523049203ull, 3960930341467975005ull,
+ 1442691341472975626ull, 2408589082248152145ull}},
+{{7359767582831199407ull, 14174534963689744564ull,
+ 6415050195268607436ull, 3010736352810190181ull}},
+{{9199709478538999259ull, 17718168704612180705ull,
+ 12630498762513147199ull, 3763420441012737726ull}},
+{{17279033470155344297ull, 17991384468023694796ull,
+ 3282375708143329095ull, 2352137775632961079ull}},
+{{3152047763984628755ull, 17877544566602230592ull,
+ 17938027690461325081ull, 2940172219541201348ull}},
+{{3940059704980785944ull, 8511872652970624528ull,
+ 3975790539367104736ull, 3675215274426501686ull}},
+{{4925074631225982430ull, 10639840816213280660ull,
+ 14193110211063656728ull, 4594019093033127107ull}},
+{{12301543681371014827ull, 6649900510133300412ull,
+ 6564850872701091503ull, 2871261933145704442ull}},
+{{15376929601713768534ull, 3700689619239237611ull,
+ 17429435627731140187ull, 3589077416432130552ull}},
+{{14609475983714822763ull, 14176005621659110ull, 3340050460954373618ull,
+ 4486346770540163191ull}},
+{{4519236471394376323ull, 4620546021940924848ull,
+ 9005060565737565367ull, 2803966731587601994ull}},
+{{5649045589242970404ull, 1163996508998768156ull,
+ 2032953670317180901ull, 3504958414484502493ull}},
+{{7061306986553713004ull, 6066681654675848099ull,
+ 7152878106323864030ull, 4381198018105628116ull}},
+{{2107473857382376676ull, 17626734089454568774ull,
+ 13693920853307190826ull, 2738248761316017572ull}},
+{{11857714358582746653ull, 12810045574963435159ull,
+ 17117401066633988533ull, 3422810951645021965ull}},
+{{10210456929801045412ull, 2177498913422130237ull,
+ 7561693278010321955ull, 4278513689556277457ull}},
+{{8687378590339347335ull, 17501837885384689062ull,
+ 16255273344824920981ull, 2674071055972673410ull}},
+{{1635851201069408360ull, 8042239301448697616ull,
+ 11095719644176375419ull, 3342588819965841763ull}},
+{{2044814001336760450ull, 5441113108383484116ull,
+ 9257963536793081370ull, 4178236024957302204ull}},
+{{10501380787690251089ull, 8012381711167065476ull,
+ 15009599247350451664ull, 2611397515598313877ull}},
+{{13126725984612813862ull, 10015477138958831845ull,
+ 4926941003905900868ull, 3264246894497892347ull}},
+{{2573349425483853615ull, 12519346423698539807ull,
+ 1546990236454988181ull, 4080308618122365434ull}},
+{{8525872418568490365ull, 10130434524025281331ull,
+ 5578554916211755517ull, 2550192886326478396ull}},
+{{6045654504783225053ull, 17274729173458989568ull,
+ 6973193645264694396ull, 3187741107908097995ull}},
+{{7557068130979031316ull, 3146667393114185344ull,
+ 4104806038153480092ull, 3984676384885122494ull}},
+{{4723167581861894573ull, 11190039157551141648ull,
+ 16400561829128088769ull, 2490422740553201558ull}},
+{{5903959477327368216ull, 152490891656763348ull,
+ 11277330249555335154ull, 3113028425691501948ull}},
+{{7379949346659210269ull, 9413985651425729993ull,
+ 14096662811944168942ull, 3891285532114377435ull}},
+{{16141683387730476179ull, 1272055013713693341ull,
+ 6504571248251411637ull, 2432053457571485897ull}},
+{{6342046179380931511ull, 6201754785569504581ull,
+ 12742400078741652450ull, 3040066821964357371ull}},
+{{12539243742653552293ull, 16975565518816656534ull,
+ 11316314079999677658ull, 3800083527455446714ull}},
+{{3225341320731082279ull, 15221414467687798238ull,
+ 11684382318427186440ull, 2375052204659654196ull}},
+{{13255048687768628657ull, 580024010900196181ull,
+ 14605477898033983051ull, 2968815255824567745ull}},
+{{2733752804428622109ull, 14560088068907408939ull,
+ 4421789317260315101ull, 3711019069780709682ull}},
+{{17849496567263746482ull, 11405898052280824538ull,
+ 7375304341715084842ull, 2319386918612943551ull}},
+{{13088498672224907295ull, 5034000528496254865ull,
+ 4607444408716468149ull, 2899233648266179439ull}},
+{{2525565284998970406ull, 10904186679047706486ull,
+ 1147619492468197282ull, 3624042060332724299ull}},
+{{12380328643103488816ull, 4406861311954857299ull,
+ 15269582420867410315ull, 4530052575415905373ull}},
+{{5431862392725986558ull, 448445310758091860ull,
+ 11849332022255825399ull, 2831282859634940858ull}},
+{{6789827990907483197ull, 14395614693729778537ull,
+ 5588292990965005940ull, 3539103574543676073ull}},
+{{13098971007061741900ull, 17994518367162223171ull,
+ 11597052257133645329ull, 4423879468179595091ull}},
+{{5881013870199894736ull, 4329044951835307626ull,
+ 4942314651494834379ull, 2764924667612246932ull}},
+{{16574639374604644228ull, 799620171366746628ull,
+ 6177893314368542974ull, 3456155834515308665ull}},
+{{2271555144546253669ull, 10222897251063209094ull,
+ 12334052661388066621ull, 4320194793144135831ull}},
+{{15254780020623572255ull, 8695153791128199635ull,
+ 14626311941008623494ull, 2700121745715084894ull}},
+{{14456789007352077415ull, 1645570202055473736ull,
+ 9059517889406003560ull, 3375152182143856118ull}},
+{{18070986259190096768ull, 2056962752569342170ull,
+ 2101025324902728642ull, 4218940227679820148ull}},
+{{15906052430421198384ull, 5897287738783226760ull,
+ 10536512864918981209ull, 2636837642299887592ull}},
+{{1435821464316946364ull, 11983295691906421355ull,
+ 13170641081148726511ull, 3296047052874859490ull}},
+{{15629834885678346667ull, 10367433596455638789ull,
+ 7239929314581132331ull, 4120058816093574363ull}},
+{{12074489812762660619ull, 4173802988571080291ull,
+ 2219112812399513755ull, 2575036760058483977ull}},
+{{10481426247525937870ull, 605567717286462460ull,
+ 7385577033926780098ull, 3218795950073104971ull}},
+{{13101782809407422337ull, 9980331683462853883ull,
+ 4620285273981087218ull, 4023494937591381214ull}},
+{{5882771246665945009ull, 10849393320591671581ull,
+ 16722736351520343223ull, 2514684335994613258ull}},
+{{11965150076759819165ull, 8950055632312201572ull,
+ 11680048402545653221ull, 3143355419993266573ull}},
+{{14956437595949773956ull, 15799255558817639869ull,
+ 765002447899902814ull, 3929194274991583217ull}},
+{{11653616506682302675ull, 5262848705833637014ull,
+ 12007341576005909019ull, 2455746421869739510ull}},
+{{5343648596498102535ull, 1966874863864658364ull,
+ 5785804933152610466ull, 3069683027337174388ull}},
+{{6679560745622628169ull, 11681965616685598763ull,
+ 7232256166440763082ull, 3837103784171467985ull}},
+{{1868882456800448654ull, 11912914528855887131ull,
+ 16049375150093946686ull, 2398189865107167490ull}},
+{{16171161126282724529ull, 5667771124215083105ull,
+ 10838346900762657550ull, 2997737331383959363ull}},
+{{6378893352571241950ull, 16308085942123629690ull,
+ 8936247607525934033ull, 3747171664229949204ull}},
+{{8598494363784414123ull, 3275024686186186700ull,
+ 14808526791558484579ull, 2341982290143718252ull}},
+{{10748117954730517653ull, 17928838913014897087ull,
+ 63914415738554107ull, 2927477862679647816ull}},
+{{8823461424985759162ull, 17799362622841233455ull, 79893019673192634ull,
+ 3659347328349559770ull}},
+{{6417640762804811049ull, 13025831241696766011ull,
+ 9323238311446266601ull, 4574184160436949712ull}},
+{{1705182467539312954ull, 1223615498419396901ull,
+ 5827023944653916626ull, 2858865100273093570ull}},
+{{6743164102851529096ull, 10752891409879021934ull,
+ 16507151967672171590ull, 3573581375341366962ull}},
+{{17652327165419187178ull, 4217742225494001609ull,
+ 11410567922735438680ull, 4466976719176708703ull}},
+{{4115175450745910130ull, 2636088890933751006ull,
+ 14049133979350731031ull, 2791860449485442939ull}},
+{{14367341350287163471ull, 17130169168949352469ull,
+ 12949731455761025884ull, 3489825561856803674ull}},
+{{4124118632576790626ull, 2965967387477138971ull,
+ 6963792282846506548ull, 4362281952321004593ull}},
+{{271731136146800190ull, 11077101654027987665ull,
+ 15881585222847536352ull, 2726426220200627870ull}},
+{{4951349938610888141ull, 13846377067534984581ull,
+ 10628609491704644632ull, 3408032775250784838ull}},
+{{10800873441690998080ull, 17307971334418730726ull,
+ 4062389827776029982ull, 4260040969063481048ull}},
+{{2138859882629485896ull, 6205796065584318800ull,
+ 2538993642360018739ull, 2662525605664675655ull}},
+{{2673574853286857370ull, 3145559063553010596ull,
+ 17008800108232187136ull, 3328157007080844568ull}},
+{{3341968566608571713ull, 3931948829441263245ull,
+ 2814256061580682304ull, 4160196258851055711ull}},
+{{4394573363344051273ull, 2457468018400789528ull,
+ 8676439066129008296ull, 2600122661781909819ull}},
+{{5493216704180064091ull, 3071835023000986910ull,
+ 6233862814233872466ull, 3250153327227387274ull}},
+{{16089892917079855921ull, 13063165815606009445ull,
+ 17015700554647116390ull, 4062691659034234092ull}},
+{{12362026082388603903ull, 3552792616326367999ull,
+ 1411440809799671936ull, 2539182286896396308ull}},
+{{10840846584558366974ull, 4440990770407959999ull,
+ 1764301012249589920ull, 3173977858620495385ull}},
+{{8939372212270570814ull, 5551238463009949999ull,
+ 6817062283739375304ull, 3967472323275619231ull}},
+{{12504636660310188615ull, 3469524039381218749ull,
+ 11178192954978191421ull, 2479670202047262019ull}},
+{{1795737770105572057ull, 8948591067653911341ull,
+ 9361055175295351372ull, 3099587752559077524ull}},
+{{6856358231059352975ull, 11185738834567389176ull,
+ 11701318969119189215ull, 3874484690698846905ull}},
+{{4285223894412095609ull, 13908615799245700091ull,
+ 395795328058411403ull, 2421552931686779316ull}},
+{{744843849587731607ull, 12774083730629737210ull, 494744160073014254ull,
+ 3026941164608474145ull}},
+{{10154426848839440317ull, 6744232626432395704ull,
+ 5230116218518655722ull, 3783676455760592681ull}},
+{{6346516780524650198ull, 8826831409947635219ull,
+ 14798037682642629586ull, 2364797784850370425ull}},
+{{3321459957228424844ull, 1810167225579768216ull,
+ 4662489048021123271ull, 2955997231062963032ull}},
+{{4151824946535531055ull, 16097767087256873982ull,
+ 5828111310026404088ull, 3694996538828703790ull}},
+{{16429948646866870621ull, 10061104429535546238ull,
+ 17477627624048666267ull, 2309372836767939868ull}},
+{{11314063771728812469ull, 7964694518492044894ull,
+ 3400290456351281218ull, 2886716045959924836ull}},
+{{4919207677806239778ull, 732496111260280310ull, 4250363070439101523ull,
+ 3608395057449906045ull}},
+{{15372381634112575530ull, 14750678194357514099ull,
+ 9924639856476264807ull, 4510493821812382556ull}},
+{{7301895512106665754ull, 16136702899114528168ull,
+ 15426271947152441312ull, 2819058638632739097ull}},
+{{9127369390133332193ull, 1724134550183608594ull,
+ 5447781878658387929ull, 3523823298290923872ull}},
+{{2185839700811889433ull, 6766854206156898647ull,
+ 6809727348322984911ull, 4404779122863654840ull}},
+{{8283678840648512752ull, 11146812906489143510ull,
+ 4256079592701865569ull, 2752986951789784275ull}},
+{{1131226513955865132ull, 98458077829265676ull, 708413472449944058ull,
+ 3441233689737230344ull}},
+{{1414033142444831414ull, 9346444634141357903ull, 885516840562430072ull,
+ 4301542112171537930ull}},
+{{7801299741669101490ull, 5841527896338348689ull,
+ 5165134043778906699ull, 2688463820107211206ull}},
+{{14363310695513764767ull, 2690223851995547957ull,
+ 15679789591578409182ull, 3360579775134014007ull}},
+{{4119080314110042246ull, 12586151851849210755ull,
+ 14988050971045623573ull, 4200724718917517509ull}},
+{{268582187105082452ull, 10172187916619450674ull,
+ 11673374866117208685ull, 2625452949323448443ull}},
+{{9559099770736128873ull, 17326920914201701246ull,
+ 9980032564219122952ull, 3281816186654310554ull}},
+{{2725502676565385283ull, 3211907069042574942ull,
+ 3251668668419127883ull, 4102270233317888193ull}},
+{{15538497228135529514ull, 18148342982647467002ull,
+ 13561507963830424686ull, 2563918895823680120ull}},
+{{10199749498314636084ull, 13462056691454557945ull,
+ 16951884954788030858ull, 3204898619779600150ull}},
+{{17361372891320683009ull, 7604198827463421623ull,
+ 11966484156630262765ull, 4006123274724500188ull}},
+{{17768387084716508737ull, 7058467276378332466ull,
+ 16702424634748690036ull, 2503827046702812617ull}},
+{{12987111819040860113ull, 8823084095472915583ull,
+ 7042972738153698833ull, 3129783808378515772ull}},
+{{11622203755373687237ull, 15640541137768532383ull,
+ 8803715922692123541ull, 3912229760473144715ull}},
+{{14181406374749636380ull, 12081181220319026691ull,
+ 3196479442468883261ull, 2445143600295715447ull}},
+{{13115071950009657570ull, 1266418470116619652ull,
+ 17830657358368267789ull, 3056429500369644308ull}},
+{{16393839937512071963ull, 6194709106073162469ull,
+ 3841577624250783120ull, 3820536875462055386ull}},
+{{12551992970158738929ull, 3871693191295726543ull,
+ 7012672033584127354ull, 2387835547163784616ull}},
+{{11078305194271035757ull, 14062988525974433987ull,
+ 8765840041980159192ull, 2984794433954730770ull}},
+{{9236195474411406792ull, 17578735657468042484ull,
+ 1733928015620423182ull, 3730993042443413463ull}},
+{{14995994208361905053ull, 6375023767490138648ull,
+ 8001234037403846345ull, 2331870651527133414ull}},
+{{298248686742829701ull, 12580465727790061215ull, 778170509900032123ull,
+ 2914838314408916768ull}},
+{{14207868913710700838ull, 11113896141310188614ull,
+ 972713137375040154ull, 3643547893011145960ull}},
+{{8536464105283600239ull, 4668998139782959960ull,
+ 1215891421718800193ull, 4554434866263932450ull}},
+{{5335290065802250149ull, 14447338883432819735ull,
+ 5371618157001638024ull, 2846521791414957781ull}},
+{{2057426563825424783ull, 18059173604291024669ull,
+ 11326208714679435434ull, 3558152239268697226ull}},
+{{7183469223209168882ull, 13350594968509005028ull,
+ 4934388856494518485ull, 4447690299085871533ull}},
+{{13713040301360506360ull, 10649964864531822094ull,
+ 5389836044522768005ull, 2779806436928669708ull}},
+{{7917928339845857141ull, 17924142099092165522ull,
+ 6737295055653460006ull, 3474758046160837135ull}},
+{{674038387952545619ull, 13181805587010431095ull,
+ 3809932801139437104ull, 4343447557701046419ull}},
+{{7338803020111422868ull, 8238628491881519434ull, 75364991498454238ull,
+ 2714654723563154012ull}},
+{{18396875811994054393ull, 1074913577997123484ull, 94206239373067798ull,
+ 3393318404453942515ull}},
+{{4549350691283016375ull, 10567014009351180164ull,
+ 13952815854498498459ull, 4241648005567428143ull}},
+{{12066716218906661042ull, 4298540746630793650ull,
+ 15638038936702643393ull, 2651030003479642589ull}},
+{{5860023236778550495ull, 9984861951715879967ull,
+ 5712490615596140529ull, 3313787504349553237ull}},
+{{2713343027545800214ull, 17092763458072237863ull,
+ 11752299287922563565ull, 4142234380436941546ull}},
+{{8613368419857206990ull, 12988820170508842616ull,
+ 11956873073378990132ull, 2588896487773088466ull}},
+{{10766710524821508738ull, 16236025213136053270ull,
+ 5722719304868961857ull, 3236120609716360583ull}},
+{{4235016119172110114ull, 6459973461137902876ull,
+ 2541713112658814418ull, 4045150762145450729ull}},
+{{11870257111337344629ull, 8649169431638577201ull,
+ 13117785741480228771ull, 2528219226340906705ull}},
+{{1002763333889517075ull, 6199775771120833598ull,
+ 2562174121568122252ull, 3160274032926133382ull}},
+{{10476826204216672151ull, 7749719713901041997ull,
+ 12426089688814928623ull, 3950342541157666727ull}},
+{{8853859386849114047ull, 11761103848829233104ull,
+ 14683835083150412245ull, 2468964088223541704ull}},
+{{11067324233561392558ull, 866321755754377668ull,
+ 18354793853938015307ull, 3086205110279427130ull}},
+{{13834155291951740698ull, 14917960249975135797ull,
+ 13720120280567743325ull, 3857756387849283913ull}},
+{{10952190066683531888ull, 11629568165448153825ull,
+ 1657546147713757722ull, 2411097742405802446ull}},
+{{18301923601781802764ull, 5313588169955416473ull,
+ 11295304721496972961ull, 3013872178007253057ull}},
+{{9042346446945089743ull, 11253671230871658496ull,
+ 284072846589052489ull, 3767340222509066322ull}},
+{{5651466529340681090ull, 116015491653704704ull, 4789231547545545710ull,
+ 2354587639068166451ull}},
+{{7064333161675851362ull, 9368391401421906688ull,
+ 1374853416004544233ull, 2943234548835208064ull}},
+{{8830416452094814202ull, 16322175270204771264ull,
+ 1718566770005680291ull, 3679043186044010080ull}},
+{{11038020565118517753ull, 15791033069328576176ull,
+ 2148208462507100364ull, 4598803982555012600ull}},
+{{6898762853199073596ull, 646023631475584302ull, 1342630289066937728ull,
+ 2874252489096882875ull}},
+{{17846825603353617802ull, 807529539344480377ull,
+ 15513345916615835872ull, 3592815611371103593ull}},
+{{8473473948909858541ull, 1009411924180600472ull,
+ 5556624340487631128ull, 4491019514213879492ull}},
+{{5295921218068661588ull, 630882452612875295ull,
+ 12696262249659545263ull, 2806887196383674682ull}},
+{{2008215504158439081ull, 14623661121048257831ull,
+ 6646955775219655770ull, 3508608995479593353ull}},
+{{16345327435480212563ull, 9056204364455546480ull,
+ 12920380737451957617ull, 4385761244349491691ull}},
+{{10215829647175132852ull, 17189342773853186310ull,
+ 5769394951693779558ull, 2741100777718432307ull}},
+{{3546415022114140257ull, 12263306430461707080ull,
+ 2600057671189836544ull, 3426375972148040384ull}},
+{{4433018777642675321ull, 15329133038077133850ull,
+ 3250072088987295680ull, 4282969965185050480ull}},
+{{7382322754454059980ull, 9580708148798208656ull,
+ 2031295055617059800ull, 2676856228240656550ull}},
+{{9227903443067574975ull, 11975885185997760820ull,
+ 11762490856376100558ull, 3346070285300820687ull}},
+{{11534879303834468718ull, 5746484445642425217ull,
+ 10091427552042737794ull, 4182587856626025859ull}},
+{{291770537255461093ull, 8203238796953903665ull, 4001299210813017169ull,
+ 2614117410391266162ull}},
+{{4976399189996714270ull, 14865734514619767485ull,
+ 14224996050371047269ull, 3267646762989082702ull}},
+{{10832185005923280742ull, 4747110087992545644ull,
+ 8557873026109033279ull, 4084558453736353378ull}},
+{{15993487665556826272ull, 9884472832636422883ull,
+ 9960356659745533703ull, 2552849033585220861ull}},
+{{15380173563518644936ull, 7743905022368140700ull,
+ 17062131843109305033ull, 3191061291981526076ull}},
+{{778472880688754553ull, 14291567296387563780ull,
+ 2880920730177079675ull, 3988826614976907596ull}},
+{{9709917587285247404ull, 6626386551028533410ull,
+ 11023947493215450605ull, 2493016634360567247ull}},
+{{2914024947251783447ull, 12894669207213054667ull,
+ 9168248348091925352ull, 3116270792950709059ull}},
+{{17477589239346893021ull, 16118336509016318333ull,
+ 6848624416687518786ull, 3895338491188386324ull}},
+{{13229336283805502090ull, 14685646336562586862ull,
+ 13503762297284475049ull, 2434586556992741452ull}},
+{{7313298317902101804ull, 4521999865421069866ull,
+ 16879702871605593812ull, 3043233196240926815ull}},
+{{18364994934232403063ull, 5652499831776337332ull,
+ 16487942571079604361ull, 3804041495301158519ull}},
+{{2254749797040476107ull, 15062027440928680593ull,
+ 17222493134565834581ull, 2377525934563224074ull}},
+{{7430123264727983037ull, 4992476245878687029ull,
+ 12304744381352517419ull, 2971907418204030093ull}},
+{{13899340099337366701ull, 1628909288920970882ull,
+ 1545872421408483062ull, 3714884272755037617ull}},
+{{13298773580513242092ull, 14853126360857770513ull,
+ 12495385309448771673ull, 2321802670471898510ull}},
+{{2788408920359388903ull, 4731349895790049430ull,
+ 6395859599956188784ull, 2902253338089873138ull}},
+{{12708883187304011937ull, 5914187369737561787ull,
+ 17218196536800011788ull, 3627816672612341422ull}},
+{{11274417965702627017ull, 7392734212171952234ull,
+ 12299373634145238927ull, 4534770840765426778ull}},
+{{11658197246991529790ull, 11537987910248552002ull,
+ 12298794539768162233ull, 2834231775478391736ull}},
+{{5349374521884636429ull, 587426832528526291ull,
+ 15373493174710202792ull, 3542789719347989670ull}},
+{{2075032133928407632ull, 734283540660657864ull, 9993494431532977682ull,
+ 4428487149184987088ull}},
+{{1296895083705254770ull, 5070613231340299069ull,
+ 6245934019708111051ull, 2767804468240616930ull}},
+{{6232804873058956367ull, 1726580520747985932ull,
+ 17030789561489914622ull, 3459755585300771162ull}},
+{{7791006091323695458ull, 11381597687789758223ull,
+ 12065114915007617469ull, 4324694481625963953ull}},
+{{11786907834718391518ull, 9419341564082292841ull,
+ 623167794238679062ull, 2702934051016227471ull}},
+{{898576738115825685ull, 2550804918248090244ull,
+ 14614017798080512540ull, 3378667563770284338ull}},
+{{1123220922644782106ull, 3188506147810112805ull,
+ 9044150210745864867ull, 4223334454712855423ull}},
+{{3007856085866682768ull, 18133717406877178167ull,
+ 12570122909357247397ull, 2639584034195534639ull}},
+{{17594878162615517172ull, 8832088703314308996ull,
+ 11100967618269171343ull, 3299480042744418299ull}},
+{{3546853629559844849ull, 6428424860715498342ull,
+ 9264523504409076275ull, 4124350053430522874ull}},
+{{16051841573757066743ull, 1711922528733492511ull,
+ 10402013208683060576ull, 2577718783394076796ull}},
+{{15453115948768945525ull, 2139903160916865639ull,
+ 13002516510853825720ull, 3222148479242595995ull}},
+{{14704708917533794002ull, 2674878951146082049ull,
+ 11641459620139894246ull, 4027685599053244994ull}},
+{{2272914045817539395ull, 15506857399748464993ull,
+ 11887598281014821807ull, 2517303499408278121ull}},
+{{7452828575699312148ull, 14771885731258193337ull,
+ 1024439795986363547ull, 3146629374260347652ull}},
+{{13927721738051528089ull, 13853171145645353767ull,
+ 1280549744982954434ull, 3933286717825434565ull}},
+{{15622355113923286912ull, 13269917984455734008ull,
+ 3106186599828040473ull, 2458304198640896603ull}},
+{{1081199818694557023ull, 2752339425287503799ull,
+ 17717791305067214304ull, 3072880248301120753ull}},
+{{15186557828650359991ull, 3440424281609379748ull,
+ 8312181076051854168ull, 3841100310376400942ull}},
+{{268226606051699187ull, 2150265176005862343ull, 583427154105020951ull,
+ 2400687693985250589ull}},
+{{14170341312846787695ull, 16522889525289491640ull,
+ 5340969961058664092ull, 3000859617481563236ull}},
+{{17712926641058484619ull, 2206867832902312934ull,
+ 6676212451323330116ull, 3751074521851954045ull}},
+{{6458893132234164983ull, 10602664432418721392ull,
+ 6478475791290775274ull, 2344421576157471278ull}},
+{{8073616415292706229ull, 4029958503668625932ull,
+ 17321466775968244901ull, 2930526970196839097ull}},
+{{10092020519115882786ull, 9649134148013170319ull,
+ 7816775414678142414ull, 3663158712746048872ull}},
+{{8003339630467465578ull, 2838045648161687091ull,
+ 9770969268347678018ull, 4578948390932561090ull}},
+{{2696244259828472034ull, 6385464548528442336ull,
+ 10718541811144686665ull, 2861842744332850681ull}},
+{{3370305324785590043ull, 12593516704087940824ull,
+ 18009863282358246235ull, 3577303430416063351ull}},
+{{4212881655981987553ull, 11130209861682538126ull,
+ 17900643084520419890ull, 4471629288020079189ull}},
+{{16468109090270905933ull, 11568067181978974232ull,
+ 13493744937038956383ull, 2794768305012549493ull}},
+{{2138392289129080800ull, 9848397959046329887ull,
+ 3032123116016531767ull, 3493460381265686867ull}},
+{{16508048416693514712ull, 7698811430380524454ull,
+ 17625211950302828421ull, 4366825476582108583ull}},
+{{5705844242006058791ull, 7117600153201521736ull,
+ 17933286496580349619ull, 2729265922863817864ull}},
+{{7132305302507573489ull, 4285314173074514266ull,
+ 3969864047015885408ull, 3411582403579772331ull}},
+{{18138753664989242669ull, 5356642716343142832ull,
+ 350644040342468856ull, 4264478004474715414ull}},
+{{11336721040618276668ull, 3347901697714464270ull,
+ 14054210580496206747ull, 2665298752796697133ull}},
+{{4947529263918070027ull, 18019935177425244050ull,
+ 3732705170338094721ull, 3331623440995871417ull}},
+{{15407783616752363342ull, 8689860916499391350ull,
+ 9277567481350006306ull, 4164529301244839271ull}},
+{{5018178742042839185ull, 10042849091239507498ull,
+ 12716008703484835797ull, 2602830813278024544ull}},
+{{15496095464408324789ull, 17165247382476772276ull,
+ 15895010879356044746ull, 3253538516597530680ull}},
+{{923375256800854370ull, 12233187191241189538ull,
+ 1422019525485504317ull, 4066923145746913351ull}},
+{{5188795553927921886ull, 9951585003739437413ull,
+ 7806291231069522054ull, 2541826966091820844ull}},
+{{11097680460837290261ull, 3216109217819520958ull,
+ 9757864038836902568ull, 3177283707614776055ull}},
+{{4648728539191837018ull, 4020136522274401198ull,
+ 7585644030118740306ull, 3971604634518470069ull}},
+{{16740513392277061848ull, 7124271344848888652ull,
+ 7046870528037906643ull, 2482252896574043793ull}},
+{{2478897666636775694ull, 4293653162633722912ull,
+ 13420274178474771208ull, 3102816120717554741ull}},
+{{3098622083295969618ull, 5367066453292153640ull,
+ 2940284667811300298ull, 3878520150896943427ull}},
+{{1936638802059981011ull, 7966102551734983929ull,
+ 17978578981877920350ull, 2424075094310589641ull}},
+{{7032484521002364168ull, 734256152813954103ull, 8638165672065236726ull,
+ 3030093867888237052ull}},
+{{4178919632825567306ull, 10141192227872218437ull,
+ 10797707090081545907ull, 3787617334860296315ull}},
+{{4917667779729673518ull, 4032402133206442571ull,
+ 4442723922087272240ull, 2367260834287685197ull}},
+{{1535398706234703994ull, 5040502666508053214ull,
+ 10165090921036478204ull, 2959076042859606496ull}},
+{{11142620419648155800ull, 6300628333135066517ull,
+ 12706363651295597755ull, 3698845053574508120ull}},
+{{9269980771493791327ull, 1632049698995722621ull,
+ 7941477282059748597ull, 2311778158484067575ull}},
+{{16199161982794627063ull, 6651748142172041180ull,
+ 5315160584147297842ull, 2889722698105084469ull}},
+{{1802208404783732213ull, 17538057214569827284ull,
+ 11255636748611510206ull, 3612153372631355586ull}},
+{{2252760505979665266ull, 12699199481357508297ull,
+ 4846173898909611950ull, 4515191715789194483ull}},
+{{12937190362305760551ull, 3325313657421054781ull,
+ 723015677604813517ull, 2821994822368246552ull}},
+{{2336429897600036977ull, 8768328090203706381ull, 903769597006016896ull,
+ 3527493527960308190ull}},
+{{7532223390427434125ull, 10960410112754632976ull,
+ 10353084033112296928ull, 4409366909950385237ull}},
+{{4707639619017146328ull, 6850256320471645610ull,
+ 8776520529908879532ull, 2755854318718990773ull}},
+{{15107921560626208718ull, 8562820400589557012ull,
+ 15582336680813487319ull, 3444817898398738466ull}},
+{{438157877073209282ull, 6091839482309558362ull,
+ 10254548814162083341ull, 4306022372998423083ull}},
+{{4885534691598143705ull, 6113242685657167928ull,
+ 4103249999637608136ull, 2691263983124014427ull}},
+{{6106918364497679631ull, 7641553357071459910ull, 517376481119622266ull,
+ 3364079978905018034ull}},
+{{16857019992476875347ull, 328569659484549079ull,
+ 9870092638254303641ull, 4205099973631272542ull}},
+{{17453166522939128948ull, 11734571083246312934ull,
+ 1557121880481551871ull, 2628187483519545339ull}},
+{{12593086116819135377ull, 10056527835630503264ull,
+ 15781460405884103551ull, 3285234354399431673ull}},
+{{15741357646023919221ull, 7958973776110741176ull,
+ 5891767452072965727ull, 4106542942999289592ull}},
+{{9838348528764949513ull, 11891887637710295091ull,
+ 3682354657545603579ull, 2566589339374555995ull}},
+{{7686249642528798988ull, 10253173528710480960ull,
+ 18438001377214168186ull, 3208236674218194993ull}},
+{{9607812053160998735ull, 3593094874033325392ull,
+ 9212443666235546521ull, 4010295842772743742ull}},
+{{6004882533225624209ull, 13774899342339298130ull,
+ 1146091272969828671ull, 2506434901732964839ull}},
+{{16729475203386806069ull, 12606938159496734758ull,
+ 15267672146494449551ull, 3133043627166206048ull}},
+{{11688471967378731779ull, 11146986680943530544ull,
+ 637846109408510323ull, 3916304533957757561ull}},
+{{7305294979611707362ull, 4661023666376012638ull,
+ 11927868864448788712ull, 2447690333723598475ull}},
+{{18354990761369410010ull, 5826279582970015797ull,
+ 10298150062133597986ull, 3059612917154498094ull}},
+{{9108680396429598801ull, 16506221515567295555ull,
+ 3649315540812221674ull, 3824516146443122618ull}},
+{{3387082238554805299ull, 14928074465656947626ull,
+ 6892508231435026450ull, 2390322591526951636ull}},
+{{13457224835048282431ull, 9436721045216408724ull,
+ 8615635289293783063ull, 2987903239408689545ull}},
+{{16821531043810353039ull, 7184215288093123001ull,
+ 15381230130044616733ull, 3734879049260861931ull}},
+{{3595927874740388793ull, 6795977564271895828ull,
+ 7307425822064191506ull, 2334299405788038707ull}},
+{{4494909843425485992ull, 17718343992194645593ull,
+ 4522596259152851478ull, 2917874257235048384ull}},
+{{10230323322709245393ull, 12924557953388531183ull,
+ 5653245323941064348ull, 3647342821543810480ull}},
+{{8176218134959168838ull, 16155697441735663979ull,
+ 7066556654926330435ull, 4559178526929763100ull}},
+{{2804293325135786572ull, 7791467891871096035ull,
+ 13639969946183732330ull, 2849486579331101937ull}},
+{{17340424711701896927ull, 515962827984094235ull,
+ 3214904377447501701ull, 3561858224163877422ull}},
+{{17063844871199983254ull, 5256639553407505698ull,
+ 13242002508664152934ull, 4452322780204846777ull}},
+{{15276589062927377438ull, 17120457776161854773ull,
+ 1358722540274013727ull, 2782701737628029236ull}},
+{{5260678273377058085ull, 16788886201774930563ull,
+ 1698403175342517159ull, 3478377172035036545ull}},
+{{1964161823293934703ull, 16374421733791275300ull,
+ 6734689987605534353ull, 4347971465043795681ull}},
+{{10450973176413484997ull, 3316484555978465206ull,
+ 15738396288321928731ull, 2717482165652372300ull}},
+{{3840344433662080438ull, 17980663750255245220ull,
+ 1226251286692859297ull, 3396852707065465376ull}},
+{{4800430542077600548ull, 8640771632536892813ull,
+ 1532814108366074122ull, 4246065883831831720ull}},
+{{5306112098012194295ull, 10012168288762945912ull,
+ 958008817728796326ull, 2653791177394894825ull}},
+{{6632640122515242868ull, 3291838324098906582ull,
+ 5809197040588383312ull, 3317238971743618531ull}},
+{{17514172189998829393ull, 4114797905123633227ull,
+ 2649810282308091236ull, 4146548714679523164ull}},
+{{8640514609535574419ull, 11795120727557046575ull,
+ 10879503463297332830ull, 2591592946674701977ull}},
+{{6188957243492080119ull, 5520528872591532411ull,
+ 18211065347549053942ull, 3239491183343377471ull}},
+{{3124510535937712245ull, 16124033127594191322ull,
+ 18152145666008929523ull, 4049363979179221839ull}},
+{{6564505103388458057ull, 7771677695532675624ull,
+ 18262620068896662808ull, 2530852486987013649ull}},
+{{8205631379235572572ull, 9714597119415844530ull,
+ 8993217030838664798ull, 3163565608733767062ull}},
+{{1033667187189689907ull, 2919874362415029855ull,
+ 2018149251693555190ull, 3954457010917208828ull}},
+{{7563571019634638048ull, 15659979531791557371ull,
+ 10484715319163247801ull, 2471535631823255517ull}},
+{{4842777756115909656ull, 5739916359457283002ull,
+ 17717580167381447656ull, 3089419539779069396ull}},
+{{15276844231999662877ull, 7174895449321603752ull,
+ 3700231135517257954ull, 3861774424723836746ull}},
+{{9548027644999789299ull, 9095995674253390249ull,
+ 6924330478125674125ull, 2413609015452397966ull}},
+{{16546720574677124527ull, 15981680611244125715ull,
+ 17878785134511868464ull, 3017011269315497457ull}},
+{{16071714699919017755ull, 1530356690345605528ull,
+ 8513423362857671869ull, 3771264086644371822ull}},
+{{10044821687449386097ull, 3262315940679697407ull,
+ 709203583358657014ull, 2357040054152732389ull}},
+{{7944341090884344717ull, 13301266962704397567ull,
+ 5498190497625709171ull, 2946300067690915486ull}},
+{{5318740345178042992ull, 12014897684953109055ull,
+ 16096110158886912272ull, 3682875084613644357ull}},
+{{2036739413045165836ull, 15018622106191386319ull,
+ 6285079643326476628ull, 4603593855767055447ull}},
+{{8190491160794310504ull, 163266779514840641ull,
+ 10845703804720129749ull, 2877246159854409654ull}},
+{{14849799969420276033ull, 4815769492820938705ull,
+ 4333757719045386378ull, 3596557699818012068ull}},
+{{4727191906493181330ull, 15243083902880949190ull,
+ 5417197148806732972ull, 4495697124772515085ull}},
+{{16789552996840402043ull, 303555402445817435ull,
+ 5691591227217902060ull, 2809810702982821928ull}},
+{{16375255227623114650ull, 379444253057271794ull,
+ 7114489034022377575ull, 3512263378728527410ull}},
+{{11245696997674117504ull, 14309363371603753455ull,
+ 18116483329382747776ull, 4390329223410659262ull}},
+{{13946089651187405296ull, 8943352107252345909ull,
+ 6711116062436829456ull, 2743955764631662039ull}},
+{{3597554008702092908ull, 11179190134065432387ull,
+ 3777209059618648916ull, 3429944705789577549ull}},
+{{18332000566159779847ull, 13973987667581790483ull,
+ 9333197342950699049ull, 4287430882236971936ull}},
+{{9151657344636168453ull, 1816213264597537196ull,
+ 5833248339344186906ull, 2679644301398107460ull}},
+{{11439571680795210566ull, 11493638617601697303ull,
+ 7291560424180233632ull, 3349555376747634325ull}},
+{{9687778582566625303ull, 14367048272002121629ull,
+ 13726136548652679944ull, 4186944220934542906ull}},
+{{8360704623317834767ull, 8979405170001326018ull,
+ 13190521361335312869ull, 2616840138084089316ull}},
+{{1227508742292517650ull, 15835942480929045427ull,
+ 16488151701669141086ull, 3271050172605111645ull}},
+{{15369443983147810775ull, 10571556064306530975ull,
+ 6775131571804262646ull, 4088812715756389557ull}},
+{{16523431517108463590ull, 1995536521764193955ull,
+ 6540300241591358106ull, 2555507947347743473ull}},
+{{16042603377958191584ull, 11717792689060018252ull,
+ 12787061320416585536ull, 3194384934184679341ull}},
+{{1606510148738187864ull, 14647240861325022816ull,
+ 2148768595238568208ull, 3992981167730849177ull}},
+{{1004068842961367415ull, 9154525538328139260ull,
+ 12872195418092574890ull, 2495613229831780735ull}},
+{{1255086053701709269ull, 2219784886055398267ull,
+ 11478558254188330709ull, 3119516537289725919ull}},
+{{15403915622409300298ull, 7386417125996635737ull,
+ 9736511799308025482ull, 3899395671612157399ull}},
+{{2709918236364730830ull, 9228196722175285240ull,
+ 13002848902208597782ull, 2437122294757598374ull}},
+{{3387397795455913538ull, 2311873865864330742ull,
+ 7030189090905971420ull, 3046402868446997968ull}},
+{{13457619281174667730ull, 2889842332330413427ull,
+ 8787736363632464275ull, 3808003585558747460ull}},
+{{6105169041520473379ull, 17947052522202366056ull,
+ 14715707264125065979ull, 2380002240974217162ull}},
+{{7631461301900591724ull, 17822129634325569666ull,
+ 9171262043301556666ull, 2975002801217771453ull}},
+{{315954590520963847ull, 13054290006052186275ull,
+ 16075763572554333737ull, 3718753501522214316ull}},
+{{16338372683571460069ull, 1241402226141534565ull,
+ 823980195991682778ull, 2324220938451383948ull}},
+{{6587907799182161374ull, 10775124819531694015ull,
+ 1029975244989603472ull, 2905276173064229935ull}},
+{{3623198730550313813ull, 13468906024414617519ull,
+ 15122527111519168052ull, 3631595216330287418ull}},
+{{18364056468470055978ull, 16836132530518271898ull,
+ 9679786852544184257ull, 4539494020412859273ull}},
+{{16089221311221172890ull, 3605053803932838080ull,
+ 17579081828908584921ull, 2837183762758037045ull}},
+{{1664782565316914497ull, 9118003273343435505ull,
+ 8138794230853567439ull, 3546479703447546307ull}},
+{{6692664225073531025ull, 6785818073251906477ull,
+ 5561806770139571395ull, 4433099629309432884ull}},
+{{6488758149884650843ull, 1935293286568747596ull,
+ 12699501268192007930ull, 2770687268318395552ull}},
+{{8110947687355813553ull, 11642488645065710303ull,
+ 15874376585240009912ull, 3463359085397994440ull}},
+{{5526998590767379037ull, 14553110806332137879ull,
+ 1396226657840460774ull, 4329198856747493051ull}},
+{{10371903146870693755ull, 4484008235530198270ull,
+ 17013542725646145648ull, 2705749285467183156ull}},
+{{3741506896733591385ull, 5605010294412747838ull,
+ 2820184333348130444ull, 3382186606833978946ull}},
+{{13900255657771765039ull, 7006262868015934797ull,
+ 12748602453539938863ull, 4227733258542473682ull}},
+{{10993502795321047102ull, 11296443320151041104ull,
+ 12579562551889849693ull, 2642333286589046051ull}},
+{{13741878494151308877ull, 285496094906637668ull,
+ 11112767171434924213ull, 3302916608236307564ull}},
+{{17177348117689136096ull, 4968556137060684989ull,
+ 13890958964293655266ull, 4128645760295384455ull}},
+{{13041685582769404012ull, 7717033604090316022ull,
+ 15599378380324616397ull, 2580403600184615284ull}},
+{{7078734941606979207ull, 14257978023540282932ull,
+ 1052478901696218880ull, 3225504500230769106ull}},
+{{8848418677008724009ull, 17822472529425353665ull,
+ 10538970663975049408ull, 4031880625288461382ull}},
+{{17059476719198922266ull, 11139045330890846040ull,
+ 1975170646557017976ull, 2519925390805288364ull}},
+{{2877601825289101216ull, 13923806663613557551ull,
+ 2468963308196272470ull, 3149906738506610455ull}},
+{{17432060336893540232ull, 8181386292662171130ull,
+ 16921262190527504300ull, 3937383423133263068ull}},
+{{15506723728985850549ull, 14336738469768632764ull,
+ 1352416832224914379ull, 2460864639458289418ull}},
+{{936660587522761570ull, 13309237068783403052ull,
+ 10913893077135918782ull, 3076080799322861772ull}},
+{{1170825734403451963ull, 7413174299124478007ull,
+ 13642366346419898478ull, 3845100999153577215ull}},
+{{7649295111643239333ull, 21547918525410850ull, 15444007994153518405ull,
+ 2403188124470985759ull}},
+{{338246852699273358ull, 4638620916584151467ull,
+ 14693323974264510102ull, 3003985155588732199ull}},
+{{14257866621156255409ull, 15021648182584965141ull,
+ 13754968949403249723ull, 3754981444485915249ull}},
+{{11217009647436353583ull, 7082687104901909261ull,
+ 1679326565735949221ull, 2346863402803697031ull}},
+{{186204004013278267ull, 13465044899554774481ull,
+ 15934216262452100238ull, 2933579253504621288ull}},
+{{4844441023443985737ull, 7607934087588692293ull,
+ 1471026254355573682ull, 3666974066880776611ull}},
+{{10667237297732370076ull, 286545572631089558ull,
+ 15673840873226630815ull, 4583717583600970763ull}},
+{{2055337292655343393ull, 7096620010535512830ull,
+ 7490307536552950307ull, 2864823489750606727ull}},
+{{11792543652673955050ull, 4259088994742003133ull,
+ 4751198402263799980ull, 3581029362188258409ull}},
+{{905621510560280100ull, 5323861243427503917ull,
+ 10550684021257137879ull, 4476286702735323011ull}},
+{{2871856453313869015ull, 10244942304783271804ull,
+ 4288334504072017222ull, 2797679189209576882ull}},
+{{3589820566642336268ull, 3582805844124313947ull,
+ 14583790166944797336ull, 3497098986511971102ull}},
+{{18322333763585084047ull, 4478507305155392433ull,
+ 9006365671826220862ull, 4371373733139963878ull}},
+{{4533929574599595674ull, 16634125121004283983ull,
+ 1017292526464000134ull, 2732108583212477424ull}},
+{{1055725949822106688ull, 11569284364400579171ull,
+ 1271615658080000168ull, 3415135729015596780ull}},
+{{15154715492559797072ull, 14461605455500723963ull,
+ 1589519572600000210ull, 4268919661269495975ull}},
+{{7165854173636179218ull, 13650189428115340381ull,
+ 7910978760516081987ull, 2668074788293434984ull}},
+{{13569003735472611926ull, 12451050766716787572ull,
+ 9888723450645102484ull, 3335093485366793730ull}},
+{{16961254669340764908ull, 15563813458395984465ull,
+ 3137532276451602297ull, 4168866856708492163ull}},
+{{3683255140696896212ull, 2809854383856408435ull,
+ 18101858737278109100ull, 2605541785442807601ull}},
+{{18439126981153283976ull, 3512317979820510543ull,
+ 8792265366315472663ull, 3256927231803509502ull}},
+{{18437222708014217066ull, 18225455530057801891ull,
+ 1766959671039565020ull, 4071159039754386878ull}},
+{{9217421183295191715ull, 2167537669431350374ull,
+ 14939407849681891850ull, 2544474399846491798ull}},
+{{2298404442264213835ull, 11932794123643963776ull,
+ 9450887775247589004ull, 3180592999808114748ull}},
+{{2873005552830267294ull, 14915992654554954720ull,
+ 11813609719059486255ull, 3975741249760143435ull}},
+{{1795628470518917059ull, 16240024436737928556ull,
+ 5077663065198484957ull, 2484838281100089647ull}},
+{{2244535588148646323ull, 6464972490640246983ull,
+ 1735392813070718293ull, 3106047851375112059ull}},
+{{16640727540467971616ull, 12692901631727696632ull,
+ 16004299071620561578ull, 3882559814218890073ull}},
+{{10400454712792482260ull, 12544749538257198299ull,
+ 3085157892121769130ull, 2426599883886806296ull}},
+{{8388882372563214921ull, 6457564885966722066ull,
+ 3856447365152211413ull, 3033249854858507870ull}},
+{{1262730928849242843ull, 12683642125885790487ull,
+ 14043931243295040074ull, 3791562318573134837ull}},
+{{7706735858171858633ull, 12538962347106006958ull,
+ 11083300036273093998ull, 2369726449108209273ull}},
+{{410047785860047484ull, 6450330897027732890ull, 19066990059203786ull,
+ 2962158061385261592ull}},
+{{9735931769179835162ull, 17286285658139441920ull, 23833737574004732ull,
+ 3702697576731576990ull}},
+{{6084957355737396977ull, 1580556499482375392ull,
+ 13849954141265916670ull, 2314185985457235618ull}},
+{{7606196694671746221ull, 11199067661207745048ull,
+ 8089070639727620029ull, 2892732481821544523ull}},
+{{9507745868339682776ull, 163776521227517598ull, 5499652281232137133ull,
+ 3615915602276930654ull}},
+{{2661310298569827661ull, 4816406669961784902ull,
+ 16097937388394947224ull, 4519894502846163317ull}},
+{{15498376991888306001ull, 3010254168726115563ull,
+ 12367053876960535967ull, 2824934064278852073ull}},
+{{14761285221432994597ull, 17597875766189808166ull,
+ 1623759290918506246ull, 3531167580348565092ull}},
+{{9228234489936467438ull, 12773972670882484400ull,
+ 2029699113648132808ull, 4413959475435706365ull}},
+{{5767646556210292149ull, 7983732919301552750ull,
+ 3574404955243776957ull, 2758724672147316478ull}},
+{{16432930232117640994ull, 14591352167554328841ull,
+ 13691378230909497004ull, 3448405840184145597ull}},
+{{6706104734864887530ull, 18239190209442911052ull,
+ 3279164733354707543ull, 4310507300230181997ull}},
+{{13414687496145330515ull, 18317022908542901263ull,
+ 4355320967560386166ull, 2694067062643863748ull}},
+{{12156673351754275239ull, 13672906598823850771ull,
+ 5444151209450482708ull, 3367583828304829685ull}},
+{{10584155671265456145ull, 17091133248529813464ull,
+ 11416875030240491289ull, 4209479785381037106ull}},
+{{6615097294540910091ull, 3764429252690051559ull,
+ 11747232912327694960ull, 2630924865863148191ull}},
+{{3657185599748749709ull, 4705536565862564449ull,
+ 10072355121982230796ull, 3288656082328935239ull}},
+{{9183168018113325040ull, 5881920707328205561ull,
+ 7978757884050400591ull, 4110820102911169049ull}},
+{{17268695057389297910ull, 10593729469721210331ull,
+ 16515938723599970129ull, 2569262564319480655ull}},
+{{16974182803309234484ull, 17853847855578900818ull,
+ 16033237386072574757ull, 3211578205399350819ull}},
+{{11994356467281767297ull, 8482251764191462311ull,
+ 15429860714163330543ull, 4014472756749188524ull}},
+{{14414001819692186417ull, 12218936380260745800ull,
+ 420290909497305781ull, 2509045472968242828ull}},
+{{18017502274615233021ull, 1438612420043768538ull,
+ 525363636871632227ull, 3136306841210303535ull}},
+{{13298505806414265468ull, 15633323580336874385ull,
+ 14491762601371703995ull, 3920383551512879418ull}},
+{{1394037101367834061ull, 7464984228496852539ull,
+ 13669037644284702901ull, 2450239719695549636ull}},
+{{15577604431991956289ull, 13942916304048453577ull,
+ 17086297055355878626ull, 3062799649619437045ull}},
+{{5636947484707781649ull, 8205273343205791164ull,
+ 7522813263912684571ull, 3828499562024296307ull}},
+{{12746464214797139339ull, 2822452830289925525ull,
+ 2395915280731733905ull, 2392812226265185192ull}},
+{{2098022213214260461ull, 8139752056289794811ull,
+ 2994894100914667381ull, 2991015282831481490ull}},
+{{16457585821799989288ull, 14786376088789631417ull,
+ 12966989662998110034ull, 3738769103539351862ull}},
+{{3368462110983911449ull, 13853171073920907540ull,
+ 3492682520946430867ull, 2336730689712094914ull}},
+{{4210577638729889312ull, 12704777823973746521ull,
+ 13589225188037814392ull, 2920913362140118642ull}},
+{{9874908066839749543ull, 15880972279967183151ull,
+ 7763159448192492182ull, 3651141702675148303ull}},
+{{7731949065122299025ull, 10627843313104203131ull,
+ 5092263291813227324ull, 4563927128343935379ull}},
+{{2526625156487742939ull, 15865774107544902765ull,
+ 876821548169573125ull, 2852454455214959612ull}},
+{{7769967464037066578ull, 5997159579148964744ull,
+ 1096026935211966407ull, 3565568069018699515ull}},
+{{9712459330046333222ull, 2884763455508818026ull,
+ 15205091724297121721ull, 4456960086273374393ull}},
+{{10681973099706346168ull, 13332192205761481026ull,
+ 2585653300044619219ull, 2785600053920858996ull}},
+{{4129094337778156902ull, 12053554238774463379ull,
+ 3232066625055774024ull, 3482000067401073745ull}},
+{{549681903795308223ull, 15066942798468079224ull,
+ 8651769299747105434ull, 4352500084251342181ull}},
+{{343551189872067640ull, 14028525267469937419ull,
+ 7713198821555634848ull, 2720312552657088863ull}},
+{{14264497042622248261ull, 17535656584337421773ull,
+ 5029812508517155656ull, 3400390690821361079ull}},
+{{3995563247995646614ull, 3472826656712225601ull,
+ 1675579617219056667ull, 4250488363526701349ull}},
+{{14026442076065748894ull, 18311417724940998664ull,
+ 3353080269975604368ull, 2656555227204188343ull}},
+{{17533052595082186118ull, 4442528082466696714ull,
+ 18026408392751669173ull, 3320694034005235428ull}},
+{{12692943706997956839ull, 10164846121510758797ull,
+ 4086266417230034850ull, 4150867542506544286ull}},
+{{10238932826087416977ull, 10964714844371612152ull,
+ 16388974566050935493ull, 2594292214066590178ull}},
+{{12798666032609271221ull, 18317579573891903094ull,
+ 11262846170708893558ull, 3242865267583237723ull}},
+{{6774960503906813218ull, 13673602430510103060ull,
+ 9466871694958729044ull, 4053581584479047154ull}},
+{{13457722351796534069ull, 17769373555923590220ull,
+ 10528480827776593556ull, 2533488490299404471ull}},
+{{16822152939745667586ull, 3764972871194936159ull,
+ 8548915016293354042ull, 3166860612874255589ull}},
+{{16416005156254696579ull, 13929588125848446007ull,
+ 15297829788794080456ull, 3958575766092819486ull}},
+{{17177532250300267218ull, 8705992578655278754ull,
+ 4949457599568912381ull, 2474109853808012179ull}},
+{{12248543276020558214ull, 15494176741746486347ull,
+ 1575135981033752572ull, 3092637317260015224ull}},
+{{10698993076598309864ull, 920976853473556318ull,
+ 1968919976292190716ull, 3865796646575019030ull}},
+{{2075184654446555761ull, 9798982570275748507ull,
+ 15065633040464782909ull, 2416122904109386893ull}},
+{{16429038873340358413ull, 16860414231272073537ull,
+ 4996983245298814924ull, 3020153630136733617ull}},
+{{6701240536393284304ull, 2628773715380540306ull,
+ 10857915075050906560ull, 3775192037670917021ull}},
+{{8799961353673190594ull, 1642983572112837691ull,
+ 9092039931120510552ull, 2359495023544323138ull}},
+{{6388265673664100339ull, 2053729465141047114ull,
+ 2141677877045862382ull, 2949368779430403923ull}},
+{{17208704128934901231ull, 11790533868281084700ull,
+ 16512155401589491689ull, 3686710974288004903ull}},
+{{3064136087459074923ull, 903109280069192164ull,
+ 16028508233559476708ull, 4608388717860006129ull}},
+{{11138457091516697635ull, 9787815336898020910ull,
+ 3100288618333591086ull, 2880242948662503831ull}},
+{{4699699327541096236ull, 3011397134267750330ull,
+ 17710418828199152570ull, 3600303685828129788ull}},
+{{15097996196281146103ull, 12987618454689463720ull,
+ 3691279461539389096ull, 4500379607285162236ull}},
+{{9436247622675716314ull, 8117261534180914825ull,
+ 11530421700316893993ull, 2812737254553226397ull}},
+{{16406995546772033297ull, 14758262936153531435ull,
+ 577969070113953779ull, 3515921568191532997ull}},
+{{15897058415037653717ull, 13836142651764526390ull,
+ 5334147356069830128ull, 4394901960239416246ull}},
+{{5323975490971145669ull, 8647589157352828994ull,
+ 17168900152825807542ull, 2746813725149635153ull}},
+{{15878341400568707894ull, 1586114409836260434ull,
+ 7626067135750095716ull, 3433517156437043942ull}},
+{{10624554713856109060ull, 1982643012295325543ull,
+ 309211882832843837ull, 4291896445546304928ull}},
+{{13557875723801150019ull, 3544994891898272416ull,
+ 193257426770527398ull, 2682435278466440580ull}},
+{{16947344654751437523ull, 13654615651727616328ull,
+ 241571783463159247ull, 3353044098083050725ull}},
+{{2737436744729745288ull, 12456583546232132507ull,
+ 4913650747756336963ull, 4191305122603813406ull}},
+{{17851799029951948469ull, 5479521707181388864ull,
+ 16906089772629874314ull, 2619565701627383378ull}},
+{{3868004713730383970ull, 16072774170831511889ull,
+ 11909240178932567084ull, 3274457127034229223ull}},
+{{9446691910590367867ull, 1644223639829838245ull,
+ 10274864205238320952ull, 4093071408792786529ull}},
+{{8210025453332673869ull, 1027639774893648903ull,
+ 17951005174342420355ull, 2558169630495491580ull}},
+{{5650845798238454432ull, 15119607773899224841ull,
+ 3992012394218473827ull, 3197712038119364476ull}},
+{{11675243266225455944ull, 14287823698946643147ull,
+ 4990015492773092284ull, 3997140047649205595ull}},
+{{4991184032177216013ull, 18153261848696427775ull,
+ 812916673769488725ull, 2498212529780753497ull}},
+{{1627294021794132112ull, 8856519255588371007ull,
+ 5627831860639248811ull, 3122765662225941871ull}},
+{{15869175582524828852ull, 6458963051058075854ull,
+ 2423103807371673110ull, 3903457077782427339ull}},
+{{5306548720650630129ull, 17871909962193461121ull,
+ 17655340944103153357ull, 2439660673614017086ull}},
+{{11244871919240675565ull, 8504829397459662689ull,
+ 12845804143274165889ull, 3049575842017521358ull}},
+{{221031843768680744ull, 15242722765251966266ull,
+ 6833883142237931553ull, 3811969802521901698ull}},
+{{4749830920782813369ull, 2609172700641397060ull,
+ 8882862982326095125ull, 2382481126576188561ull}},
+{{5937288650978516711ull, 7873151894229134229ull,
+ 15715264746335006810ull, 2978101408220235701ull}},
+{{12033296832150533793ull, 618067830931641978ull,
+ 5809022877636594801ull, 3722626760275294627ull}},
+{{12132496538521471525ull, 11915507440400745996ull,
+ 1324796289309177798ull, 2326641725172059142ull}},
+{{15165620673151839406ull, 5671012263646156687ull,
+ 10879367398491248056ull, 2908302156465073927ull}},
+{{14345339823012411353ull, 7088765329557695859ull,
+ 8987523229686672166ull, 3635377695581342409ull}},
+{{13319988760338126287ull, 18084328698801895632ull,
+ 15846090055535728111ull, 4544222119476678011ull}},
+{{8324992975211328930ull, 18220234464392266626ull,
+ 7597963275496136117ull, 2840138824672923757ull}},
+{{1182869182159385354ull, 8940235025208169571ull,
+ 14109140112797558051ull, 3550173530841154696ull}},
+{{15313644532981395405ull, 6563607763082824059ull,
+ 17636425140996947564ull, 4437716913551443370ull}},
+{{7265184823899678176ull, 13325626888781540845ull,
+ 15634451731550480131ull, 2773573070969652106ull}},
+{{13693167048301985624ull, 12045347592549538152ull,
+ 10319692627583324356ull, 3466966338712065133ull}},
+{{17116458810377482030ull, 15056684490686922690ull,
+ 17511301802906543349ull, 4333707923390081416ull}},
+{{15309472774913314173ull, 11716270815893020633ull,
+ 10944563626816589593ull, 2708567452118800885ull}},
+{{5301782913359479004ull, 810280464584112080ull,
+ 18292390551948124896ull, 3385709315148501106ull}},
+{{6627228641699348755ull, 1012850580730140100ull,
+ 13642116153080380312ull, 4232136643935626383ull}},
+{{13365389937916868780ull, 633031612956337562ull,
+ 15443851623316319551ull, 2645085402459766489ull}},
+{{7483365385541310167ull, 14626347571477585665ull,
+ 5469756473863235726ull, 3306356753074708112ull}},
+{{13965892750354025612ull, 9059562427492206273ull,
+ 6837195592329044658ull, 4132945941343385140ull}},
+{{1811153941330184152ull, 10273912535610016825ull,
+ 13496619282060428719ull, 2583091213339615712ull}},
+{{6875628445090118094ull, 8230704651085133127ull,
+ 16870774102575535899ull, 3228864016674519640ull}},
+{{3982849537935259713ull, 5676694795429028505ull,
+ 2641723554509868258ull, 4036080020843149551ull}},
+{{14018496007278007081ull, 8159620265570530719ull,
+ 8568606249209749517ull, 2522550013026968469ull}},
+{{12911433990670120947ull, 14811211350390551303ull,
+ 15322443829939574800ull, 3153187516283710586ull}},
+{{11527606469910263279ull, 67270114278637513ull, 9929682750569692693ull,
+ 3941484395354638233ull}},
+{{287225016052832694ull, 2347886830637842398ull,
+ 17735266765174527693ull, 2463427747096648895ull}},
+{{9582403306920816675ull, 7546544556724690901ull,
+ 17557397438040771712ull, 3079284683870811119ull}},
+{{16589690152078408748ull, 9433180695905863626ull,
+ 17335060779123576736ull, 3849105854838513899ull}},
+{{14980242363476393372ull, 5895737934941164766ull,
+ 8528569977738541508ull, 2405691159274071187ull}},
+{{9501930917490715906ull, 7369672418676455958ull,
+ 6049026453745788981ull, 3007113949092588984ull}},
+{{2654041610008619075ull, 13823776541772957852ull,
+ 7561283067182236226ull, 3758892436365736230ull}},
+{{10882148043110162730ull, 13251546357035486561ull,
+ 114115898561509737ull, 2349307772728585144ull}},
+{{18214371072315091316ull, 2729374891012194489ull,
+ 142644873201887172ull, 2936634715910731430ull}},
+{{8932905785111700433ull, 3411718613765243112ull,
+ 9401678128357134773ull, 3670793394888414287ull}},
+{{11166132231389625542ull, 8876334285633941794ull,
+ 7140411642019030562ull, 4588491743610517859ull}},
+{{11590518663045903868ull, 10159394946948601525ull,
+ 2156914267048200149ull, 2867807339756573662ull}},
+{{653090273525216122ull, 17310929702113139811ull,
+ 11919514870665025994ull, 3584759174695717077ull}},
+{{14651420897188683865ull, 12415290090786648955ull,
+ 1064335533049118781ull, 4480948968369646347ull}},
+{{6851295051529233464ull, 10065399315955349549ull,
+ 16806110772651556902ull, 2800593105231028966ull}},
+{{13175804832838929734ull, 3358377108089411128ull,
+ 11784266428959670320ull, 3500741381538786208ull}},
+{{16469756041048662167ull, 4197971385111763910ull,
+ 14730333036199587900ull, 4375926726923482760ull}},
+{{5681911507228025950ull, 11847104152549628252ull,
+ 9206458147624742437ull, 2734954204327176725ull}},
+{{7102389384035032438ull, 973822135404871603ull,
+ 16119758702958315951ull, 3418692755408970906ull}},
+{{4266300711616402643ull, 15052335724538253216ull,
+ 10926326341843119130ull, 4273365944261213633ull}},
+{{2666437944760251652ull, 14019395846263796164ull,
+ 18358169009720419216ull, 2670853715163258520ull}},
+{{3333047430950314565ull, 17524244807829745205ull,
+ 4500967188440972404ull, 3338567143954073151ull}},
+{{8777995307115281110ull, 3458561936077629890ull,
+ 1014522967123827602ull, 4173208929942591439ull}},
+{{10097933085374438598ull, 6773287228475906585ull,
+ 7551605882093474107ull, 2608255581214119649ull}},
+{{17234102375145436152ull, 3854923017167495327ull,
+ 14051193371044230538ull, 3260319476517649561ull}},
+{{16930941950504407285ull, 14042025808314144967ull,
+ 3728933658523124460ull, 4075399345647061952ull}},
+{{17499367746706336410ull, 17999638167051116412ull,
+ 2330583536576952787ull, 2547124591029413720ull}},
+{{3427465609673368896ull, 17887861690386507612ull,
+ 2913229420721190984ull, 3183905738786767150ull}},
+{{4284332012091711120ull, 3913083039273582899ull,
+ 12864908812756264539ull, 3979882173483458937ull}},
+{{371864498343625498ull, 139833890332295360ull, 1123038980331583481ull,
+ 2487426358427161836ull}},
+{{464830622929531872ull, 4786478381342757104ull, 1403798725414479351ull,
+ 3109282948033952295ull}},
+{{581038278661914840ull, 1371411958251058476ull,
+ 15589806462050262901ull, 3886603685042440368ull}},
+{{9586520961018472583ull, 3162975483120605499ull,
+ 9743629038781414313ull, 2429127303151525230ull}},
+{{7371465182845702825ull, 8565405372328144778ull,
+ 2956164261621992083ull, 3036409128939406538ull}},
+{{18437703515411904339ull, 6095070696982793068ull,
+ 12918577363882265912ull, 3795511411174258172ull}},
+{{2300192660277664404ull, 3809419185614245668ull,
+ 17297482889281192003ull, 2372194631983911357ull}},
+{{2875240825347080505ull, 150087963590419181ull, 7786795556319326292ull,
+ 2965243289979889197ull}},
+{{8205737050111238535ull, 187609954488023976ull,
+ 14345180463826545769ull, 3706554112474861496ull}},
+{{5128585656319524085ull, 11646471267623484745ull,
+ 8965737789891591105ull, 2316596320296788435ull}},
+{{11022418088826793010ull, 723031029247192219ull,
+ 6595486218937100978ull, 2895745400370985544ull}},
+{{9166336592606103358ull, 10127160823413766082ull,
+ 8244357773671376222ull, 3619681750463731930ull}},
+{{2234548703902853390ull, 3435578992412431795ull,
+ 1082075180234444470ull, 4524602188079664913ull}},
+{{17537494004435141033ull, 15982294925539933583ull,
+ 12205512033714997553ull, 2827876367549790570ull}},
+{{17310181487116538387ull, 6142810601642753267ull,
+ 6033518005288971134ull, 3534845459437238213ull}},
+{{17026040840468285079ull, 16901885288908217392ull,
+ 12153583525038601821ull, 4418556824296547766ull}},
+{{10641275525292678175ull, 12869521314781329822ull,
+ 2984303684721738234ull, 2761598015185342354ull}},
+{{4078222369761071910ull, 6863529606621886470ull,
+ 12953751642756948601ull, 3451997518981677942ull}},
+{{14321149999056115696ull, 13191098026704745991ull,
+ 6968817516591409943ull, 4314996898727097428ull}},
+{{15868247777051154166ull, 15161965294331548100ull,
+ 13578882984724407022ull, 2696873061704435892ull}},
+{{1388565647604391091ull, 9729084581059659318ull,
+ 16973603730905508778ull, 3371091327130544865ull}},
+{{10959079096360264672ull, 2937983689469798339ull,
+ 7381946608349722261ull, 4213864158913181082ull}},
+{{4543581426011471468ull, 4142082815132317914ull,
+ 9225402648645964317ull, 2633665099320738176ull}},
+{{14902848819369115143ull, 9789289537342785296ull,
+ 11531753310807455396ull, 3292081374150922720ull}},
+{{181816950501842313ull, 12236611921678481621ull,
+ 14414691638509319245ull, 4115101717688653400ull}},
+{{2419478603277345398ull, 9953725460262744965ull,
+ 9009182274068324528ull, 2571938573555408375ull}},
+{{7636034272524069651ull, 12442156825328431206ull,
+ 6649791824158017756ull, 3214923216944260469ull}},
+{{321670803800311256ull, 15552696031660539008ull,
+ 12923925798624910099ull, 4018654021180325586ull}},
+{{201044252375194535ull, 7414592010574142928ull,
+ 12689139642567956716ull, 2511658763237703491ull}},
+{{251305315468993169ull, 9268240013217678660ull,
+ 11249738534782557991ull, 3139573454047129364ull}},
+{{314131644336241461ull, 6973613998094710421ull,
+ 14062173168478197489ull, 3924466817558911705ull}},
+{{2502175286923844865ull, 15887723794877663773ull,
+ 1871329202657791574ull, 2452791760974319816ull}},
+{{7739405127082193985ull, 10636282706742303908ull,
+ 2339161503322239468ull, 3065989701217899770ull}},
+{{9674256408852742481ull, 13295353383427879885ull,
+ 12147323916007575143ull, 3832487126522374712ull}},
+{{8352253264746658003ull, 15227124892283506784ull,
+ 7592077447504734464ull, 2395304454076484195ull}},
+{{10440316580933322504ull, 587162041644831864ull,
+ 4878410790953530177ull, 2994130567595605244ull}},
+{{13050395726166653129ull, 5345638570483427734ull,
+ 6098013488691912721ull, 3742663209494506555ull}},
+{{3544811310426770302ull, 14870239152620612094ull,
+ 1505415421218751498ull, 2339164505934066597ull}},
+{{13654386174888238686ull, 9364426903920989309ull,
+ 6493455294950827277ull, 2923955632417583246ull}},
+{{3232924663328134645ull, 16317219648328624541ull,
+ 17340191155543309904ull, 3654944540521979057ull}},
+{{8652841847587556210ull, 1949780486701229060ull,
+ 7840180889146973669ull, 4568680675652473822ull}},
+{{14631398191596998439ull, 3524455813401962114ull,
+ 288427037289470639ull, 2855425422282796139ull}},
+{{9065875702641472241ull, 18240627822034616355ull,
+ 14195591851894002010ull, 3569281777853495173ull}},
+{{6720658609874452397ull, 13577412740688494636ull,
+ 3909431759585338801ull, 4461602222316868967ull}},
+{{13423783668026308556ull, 1568353935289227291ull,
+ 9360923877381918607ull, 2788501388948043104ull}},
+{{12168043566605497791ull, 15795500474393697826ull,
+ 11701154846727398258ull, 3485626736185053880ull}},
+{{5986682421402096431ull, 10521003556137346475ull,
+ 14626443558409247823ull, 4357033420231317350ull}},
+{{1435833504162616318ull, 13493156250226923403ull,
+ 4529841205578391985ull, 2723145887644573344ull}},
+{{15629849935485434109ull, 3031387257501490541ull,
+ 5662301506972989982ull, 3403932359555716680ull}},
+{{5702254364074628924ull, 13012606108731638985ull,
+ 7077876883716237477ull, 4254915449444645850ull}},
+{{15093124023615112838ull, 10438721827170968317ull,
+ 9035359070750036327ull, 2659322155902903656ull}},
+{{5031346974236727335ull, 8436716265536322493ull,
+ 11294198838437545409ull, 3324152694878629570ull}},
+{{10900869736223297073ull, 15157581350347791020ull,
+ 4894376511192155953ull, 4155190868598286963ull}},
+{{16036415621994336479ull, 2555959316326287531ull,
+ 753142310281403519ull, 2596994292873929352ull}},
+{{15433833509065532694ull, 17030007200690023126ull,
+ 941427887851754398ull, 3246242866092411690ull}},
+{{10068919849477140060ull, 12064136964007753100ull,
+ 10400156896669468806ull, 4057803582615514612ull}},
+{{15516446942777988345ull, 2928399584077457783ull,
+ 15723470097273193812ull, 2536127239134696632ull}},
+{{14783872660045097528ull, 3660499480096822229ull,
+ 1207593547881940649ull, 3170159048918370791ull}},
+{{4644782769774208197ull, 9187310368548415691ull,
+ 15344549990134589523ull, 3962698811147963488ull}},
+{{597146221895186172ull, 3436225971129065855ull, 9590343743834118452ull,
+ 2476686756967477180ull}},
+{{14581490832651146426ull, 4295282463911332318ull,
+ 11987929679792648065ull, 3095858446209346475ull}},
+{{9003491503959157225ull, 9980789098316553302ull,
+ 10373226081313422177ull, 3869823057761683094ull}},
+{{1015496171547085362ull, 17767208232516315574ull,
+ 1871580282393500956ull, 2418639411101051934ull}},
+{{10492742251288632510ull, 3762266216935842851ull,
+ 11562847389846652004ull, 3023299263876314917ull}},
+{{8504241795683402733ull, 4702832771169803564ull, 618501182026151293ull,
+ 3779124079845393647ull}},
+{{14538523159156902517ull, 5245113491194821179ull,
+ 7304092266407426414ull, 2361952549903371029ull}},
+{{13561467930518740242ull, 15779763900848302282ull,
+ 13741801351436670921ull, 2952440687379213786ull}},
+{{7728462876293649494ull, 5889646820778214141ull,
+ 7953879652441062844ull, 3690550859224017233ull}},
+{{7136132306897224886ull, 12904401299841159646ull,
+ 16500389828844134037ull, 2306594287015010770ull}},
+{{18143537420476306915ull, 2295443569519285845ull,
+ 11402115249200391739ull, 2883242858768763463ull}},
+{{8844363720313219932ull, 16704362517181271019ull,
+ 9640958043073101769ull, 3604053573460954329ull}},
+{{6443768631964137011ull, 7045395091194425062ull,
+ 16662883572268765116ull, 4505066966826192911ull}},
+{{17862413450259749344ull, 13626743968851291471ull,
+ 17331831260309060053ull, 2815666854266370569ull}},
+{{17716330794397298776ull, 3198371905781950627ull,
+ 7829731020104161355ull, 3519583567832963212ull}},
+{{17533727474569235565ull, 17833022937509601996ull,
+ 9787163775130201693ull, 4399479459791204015ull}},
+{{1735207634750996421ull, 13451482345157195200ull,
+ 13034506387097457914ull, 2749674662369502509ull}},
+{{2169009543438745526ull, 7590980894591718192ull,
+ 2458074928589658681ull, 3437093327961878137ull}},
+{{2711261929298431907ull, 14100412136667035644ull,
+ 7684279679164461255ull, 4296366659952347671ull}},
+{{10917910742666295750ull, 15730286613057979133ull,
+ 11720203827118870140ull, 2685229162470217294ull}},
+{{18259074446760257591ull, 1216114192612922300ull,
+ 5426882747043811868ull, 3356536453087771618ull}},
+{{4377098984740770373ull, 1520142740766152876ull,
+ 16006975470659540643ull, 4195670566359714522ull}},
+{{11959058902317757291ull, 17090990277474703211ull,
+ 14616045687589600805ull, 2622294103974821576ull}},
+{{10337137609469808710ull, 7528679791561215302ull,
+ 18270057109487001007ull, 3277867629968526970ull}},
+{{3698049974982485079ull, 4799163721024131224ull,
+ 13614199350003975451ull, 4097334537460658713ull}},
+{{2311281234364053175ull, 693634316426388063ull, 1591345566111402801ull,
+ 2560834085912911696ull}},
+{{16724159598237230180ull, 5478728913960372982ull,
+ 1989181957639253501ull, 3201042607391139620ull}},
+{{11681827460941761917ull, 11460097160877854132ull,
+ 2486477447049066876ull, 4001303259238924525ull}},
+{{16524514199943377007ull, 16385932762403434640ull,
+ 3859891413619360749ull, 2500814537024327828ull}},
+{{2208898676219669642ull, 6647357897722129589ull,
+ 4824864267024200937ull, 3126018171280409785ull}},
+{{7372809363701974956ull, 12920883390580049890ull,
+ 10642766352207639075ull, 3907522714100512231ull}},
+{{9219691870741122252ull, 5769709109898837229ull,
+ 13569257997770856278ull, 2442201696312820144ull}},
+{{16136300856853790719ull, 16435508424228322344ull,
+ 16961572497213570347ull, 3052752120391025180ull}},
+{{1723631997357686782ull, 15932699511858015027ull,
+ 2755221547807411318ull, 3815940150488781476ull}},
+{{17218171062844411903ull, 5346251176483871487ull,
+ 10945385504234407882ull, 2384962594055488422ull}},
+{{16911027810128126975ull, 15906186007459615167ull,
+ 4458359843438234044ull, 2981203242569360528ull}},
+{{16527098744232770815ull, 1435988435614967343ull,
+ 5572949804297792556ull, 3726504053211700660ull}},
+{{17246965742786563615ull, 10120864809114130397ull,
+ 12706465664540896155ull, 2329065033257312912ull}},
+{{7723649123201040807ull, 8039394992965275093ull,
+ 15883082080676120194ull, 2911331291571641140ull}},
+{{14266247422428688913ull, 825871704351818058ull,
+ 1407108527135598627ull, 3639164114464551426ull}},
+{{8609437241181085333ull, 14867397685721936285ull,
+ 10982257695774274091ull, 4548955143080689282ull}},
+{{7686741284951872285ull, 6986280544362516226ull,
+ 11475597078286309211ull, 2843096964425430801ull}},
+{{385054569335064548ull, 4121164662025757379ull, 509438292575722802ull,
+ 3553871205531788502ull}},
+{{14316376266950994397ull, 14374827864386972531ull,
+ 9860169902574429310ull, 4442339006914735627ull}},
+{{6641892157630677546ull, 4372581396814469928ull,
+ 3856763179895324367ull, 2776461879321709767ull}},
+{{8302365197038346933ull, 854040727590699506ull, 209267956441767555ull,
+ 3470577349152137209ull}},
+{{1154584459443157858ull, 14902608964770538095ull,
+ 4873270963979597347ull, 4338221686440171511ull}},
+{{7639144314793055517ull, 7008287593767892357ull,
+ 9963323380128330198ull, 2711388554025107194ull}},
+{{14160616411918707301ull, 17983731529064641254ull,
+ 3230782188305636939ull, 3389235692531383993ull}},
+{{8477398478043608318ull, 17867978392903413664ull,
+ 8650163753809434078ull, 4236544615664229991ull}},
+{{5298374048777255199ull, 6555800477137245636ull,
+ 12323881373771978155ull, 2647840384790143744ull}},
+{{6622967560971568998ull, 3583064577994169141ull,
+ 15404851717214972694ull, 3309800480987679680ull}},
+{{12890395469641849152ull, 13702202759347487234ull,
+ 809320572809164251ull, 4137250601234599601ull}},
+{{12668183186953543624ull, 6258033715378485569ull,
+ 12035040404074197417ull, 2585781625771624750ull}},
+{{2000170928409765818ull, 12434228162650494866ull,
+ 5820428468237970963ull, 3232227032214530938ull}},
+{{11723585697366983080ull, 10931099184885730678ull,
+ 16498907622152239512ull, 4040283790268163672ull}},
+{{2715555042426976521ull, 6831936990553581674ull,
+ 10311817263845149695ull, 2525177368917602295ull}},
+{{12617815839888496460ull, 3928235219764589188ull,
+ 8278085561379049215ull, 3156471711147002869ull}},
+{{15772269799860620574ull, 298608006278348581ull,
+ 14959292970151199423ull, 3945589638933753586ull}},
+{{12163511634126581811ull, 7104159031565049719ull,
+ 13961244124771887543ull, 2465993524333595991ull}},
+{{10592703524230839360ull, 4268512771028924245ull,
+ 12839869137537471525ull, 3082491905416994989ull}},
+{{17852565423715937104ull, 9947326982213543210ull,
+ 2214778366639675694ull, 3853114881771243737ull}},
+{{15769539408249848594ull, 1605393345456076602ull,
+ 12913451525218267069ull, 2408196801107027335ull}},
+{{10488552223457534934ull, 6618427700247483657ull,
+ 11530128388095445932ull, 3010246001383784169ull}},
+{{17722376297749306572ull, 8273034625309354571ull,
+ 577602429837143703ull, 3762807501729730212ull}},
+{{8770642176879622656ull, 12088175668459428463ull,
+ 9584373555502990622ull, 2351754688581081382ull}},
+{{6351616702672140415ull, 5886847548719509771ull,
+ 2757094907523962470ull, 2939693360726351728ull}},
+{{3327834859912787615ull, 16581931472754163022ull,
+ 3446368634404953087ull, 3674616700907939660ull}},
+{{13383165611745760327ull, 16115728322515315873ull,
+ 4307960793006191359ull, 4593270876134924575ull}},
+{{1446949479700018348ull, 16989859229213154277ull,
+ 9610004523269951455ull, 2870794297584327859ull}},
+{{6420372868052410839ull, 16625638018089054942ull,
+ 7400819635660051415ull, 3588492871980409824ull}},
+{{17248838121920289357ull, 16170361504183930773ull,
+ 9251024544575064269ull, 4485616089975512280ull}},
+{{13086366835413874800ull, 12412318949328650685ull,
+ 5781890340359415168ull, 2803510056234695175ull}},
+{{2522900488985179788ull, 15515398686660813357ull,
+ 2615676907021881056ull, 3504387570293368969ull}},
+{{7765311629658862639ull, 947504284616465080ull, 7881282152204739225ull,
+ 4380484462866711211ull}},
+{{4853319768536789150ull, 12121405223953760435ull,
+ 2619958335914268063ull, 2737802789291694507ull}},
+{{1454963692243598533ull, 10540070511514812640ull,
+ 17110005975174998791ull, 3422253486614618133ull}},
+{{1818704615304498166ull, 8563402120966127896ull,
+ 7552449413686584777ull, 4277816858268272667ull}},
+{{1136690384565311354ull, 16881341371672299695ull,
+ 2414437874340421533ull, 2673635536417670417ull}},
+{{15255921035988802904ull, 7266618659308210906ull,
+ 7629733361352914821ull, 3342044420522088021ull}},
+{{9846529258131227822ull, 13694959342562651537ull,
+ 14148852720118531430ull, 4177555525652610026ull}},
+{{17683295832400487149ull, 3947663570674269306ull,
+ 13454718968501470048ull, 2610972203532881266ull}},
+{{12880747753645833128ull, 4934579463342836633ull,
+ 7595026673772061752ull, 3263715254416101583ull}},
+{{2265876636775127698ull, 6168224329178545792ull,
+ 4882097323787689286ull, 4079644068020126979ull}},
+{{1416172897984454812ull, 17690198261018754832ull,
+ 745467818153611851ull, 2549777542512579362ull}},
+{{1770216122480568514ull, 17501061807846055636ull,
+ 10155206809546790622ull, 3187221928140724202ull}},
+{{2212770153100710643ull, 12652955222952793737ull,
+ 3470636475078712470ull, 3984027410175905253ull}},
+{{12912196391756413912ull, 3296410995918108181ull,
+ 4474990806137889246ull, 2490017131359940783ull}},
+{{2305187434413353678ull, 13343885781752411035ull,
+ 982052489244973653ull, 3112521414199925979ull}},
+{{16716542348298855809ull, 2844799171908350081ull,
+ 15062623666838380779ull, 3890651767749907473ull}},
+{{3530309940045703025ull, 17918900546938576465ull,
+ 2496610764132906130ull, 2431657354843692171ull}},
+{{9024573443484516685ull, 13175253646818444773ull,
+ 16955821510448296375ull, 3039571693554615213ull}},
+{{15892402822783033760ull, 11857381040095668062ull,
+ 7359718832778206757ull, 3799464616943269017ull}},
+{{5321065745812008196ull, 9716706159273486491ull,
+ 16129039316554848983ull, 2374665385589543135ull}},
+{{2039646163837622341ull, 7534196680664470210ull,
+ 15549613127266173325ull, 2968331731986928919ull}},
+{{11772929741651803734ull, 14029431869257975666ull,
+ 14825330390655328752ull, 3710414664983661149ull}},
+{{11969767106959765238ull, 8768394918286234791ull,
+ 11571674503373274422ull, 2319009165614788218ull}},
+{{10350522865272318644ull, 1737121611003017681ull,
+ 5241221092361817220ull, 2898761457018485273ull}},
+{{17549839600017786208ull, 2171402013753772101ull,
+ 11163212383879659429ull, 3623451821273106591ull}},
+{{8102241444740069048ull, 7325938535619603031ull,
+ 9342329461422186382ull, 4529314776591383239ull}},
+{{11981429930603625011ull, 18413769640044415606ull,
+ 12756484941029948344ull, 2830821735369614524ull}},
+{{5753415376399755456ull, 4570467976345967892ull,
+ 15945606176287435431ull, 3538527169212018155ull}},
+{{7191769220499694320ull, 1101398952005071961ull,
+ 15320321701931906385ull, 4423158961515022694ull}},
+{{16024070808880778710ull, 12217589391071639735ull,
+ 4963515045280053586ull, 2764474350946889184ull}},
+{{15418402492673585484ull, 6048614701984773861ull,
+ 6204393806600066983ull, 3455592938683611480ull}},
+{{5437945060559818142ull, 2949082359053579423ull,
+ 7755492258250083729ull, 4319491173354514350ull}},
+{{10316244690490968195ull, 13372391520476956899ull,
+ 235496642978914426ull, 2699681983346571469ull}},
+{{8283619844686322340ull, 7492117363741420316ull,
+ 4906056822151030937ull, 3374602479183214336ull}},
+{{10354524805857902925ull, 13976832723104163299ull,
+ 6132571027688788671ull, 4218253098979017920ull}},
+{{4165734994447495376ull, 15653049479581183918ull,
+ 3832856892305492919ull, 2636408186861886200ull}},
+{{14430540779914145028ull, 14954625831049091993ull,
+ 4791071115381866149ull, 3295510233577357750ull}},
+{{4203117919610517573ull, 4858224233529201280ull,
+ 15212210931082108495ull, 4119387791971697187ull}},
+{{2626948699756573483ull, 9953919173596832656ull,
+ 7201788822712623857ull, 2574617369982310742ull}},
+{{3283685874695716854ull, 17054084985423428724ull,
+ 18225608065245555629ull, 3218271712477888427ull}},
+{{4104607343369646067ull, 7482548176497122193ull,
+ 18170324063129556633ull, 4022839640597360534ull}},
+{{14094594635674498552ull, 16205807656379171130ull,
+ 6744766521028584991ull, 2514274775373350334ull}},
+{{8394871257738347382ull, 15645573552046576009ull,
+ 17654330188140507047ull, 3142843469216687917ull}},
+{{15105275090600322132ull, 14945280921630832107ull,
+ 8232854679893470097ull, 3928554336520859897ull}},
+{{7134953922411507380ull, 2423271548378188211ull,
+ 16674749221001888571ull, 2455346460325537435ull}},
+{{4307006384586996321ull, 16864147490754898976ull,
+ 16231750507824972809ull, 3069183075406921794ull}},
+{{5383757980733745402ull, 7245126308161460008ull,
+ 11066316097926440204ull, 3836478844258652243ull}},
+{{3364848737958590876ull, 13751575979455688313ull,
+ 4610604551990331175ull, 2397799277661657652ull}},
+{{8817746940875626499ull, 12577783955892222487ull,
+ 5763255689987913969ull, 2997249097077072065ull}},
+{{6410497657667145220ull, 1887171889583114397ull,
+ 11815755630912280366ull, 3746561371346340081ull}},
+{{6312404045255659715ull, 15014540486271610210ull,
+ 467318241679093372ull, 2341600857091462551ull}},
+{{17113877093424350451ull, 321431534129961146ull,
+ 14419205857381030428ull, 2927001071364328188ull}},
+{{12168974329925662256ull, 401789417662451433ull,
+ 18024007321726288035ull, 3658751339205410235ull}},
+{{1376159857124914108ull, 14337294827360228004ull,
+ 17918323133730472139ull, 4573439174006762794ull}},
+{{10083471947557847125ull, 6654966257886448550ull,
+ 15810637977008932991ull, 2858399483754226746ull}},
+{{3380967897592533099ull, 3707021803930672784ull,
+ 10539925434406390431ull, 3572999354692783433ull}},
+{{4226209871990666373ull, 22091236485953076ull, 17786592811435375943ull,
+ 4466249193365979291ull}},
+{{11864753206848942291ull, 6931336050444802528ull,
+ 8810777497933416012ull, 2791405745853737057ull}},
+{{14830941508561177864ull, 8664170063056003160ull,
+ 15625157890844157919ull, 3489257182317171321ull}},
+{{91932811991920714ull, 6218526560392616047ull, 5696389308273033687ull,
+ 4361571477896464152ull}},
+{{6974987035136032302ull, 10804108127886466885ull,
+ 3560243317670646054ull, 2725982173685290095ull}},
+{{13330419812347428282ull, 4281763123003307798ull,
+ 18285362202370471280ull, 3407477717106612618ull}},
+{{7439652728579509544ull, 5352203903754134748ull,
+ 13633330716108313292ull, 4259347146383265773ull}},
+{{13873154992216969273ull, 12568499476701110025ull,
+ 10826674706781389759ull, 2662091966489541108ull}},
+{{3506385684989047880ull, 11098938327448999628ull,
+ 13533343383476737199ull, 3327614958111926385ull}},
+{{4382982106236309849ull, 9261986890883861631ull,
+ 3081621174063757787ull, 4159518697639907982ull}},
+{{9656892844038775512ull, 3482898797588719567ull,
+ 15761071289072012329ull, 2599699186024942488ull}},
+{{7459430036621081486ull, 8965309515413287363ull,
+ 1254595037630463795ull, 3249623982531178111ull}},
+{{4712601527348963953ull, 6594950875839221300ull,
+ 15403301852320243456ull, 4062029978163972638ull}},
+{{12168747991447878279ull, 4121844297399513312ull,
+ 5015377639272764256ull, 2538768736352482899ull}},
+{{15210934989309847849ull, 5152305371749391640ull,
+ 1657536030663567416ull, 3173460920440603624ull}},
+{{566924662927758195ull, 6440381714686739551ull, 2071920038329459270ull,
+ 3966826150550754530ull}},
+{{7271856941970930728ull, 17860296626961375931ull,
+ 5906636042383299947ull, 2479266344094221581ull}},
+{{4478135159036275506ull, 17713684765274332010ull,
+ 11994981071406512838ull, 3099082930117776976ull}},
+{{14821040985650120190ull, 12918733919738139204ull,
+ 14993726339258141048ull, 3873853662647221220ull}},
+{{39778579176549311ull, 8074208699836337003ull, 147706925181562347ull,
+ 2421158539154513263ull}},
+{{13884781279252850351ull, 5481074856368033349ull,
+ 14019691711759116646ull, 3026448173943141578ull}},
+{{3520918543783899226ull, 16074715607314817495ull,
+ 8301242602844119999ull, 3783060217428926973ull}},
+{{9118103117506018872ull, 16964226282212842790ull,
+ 7494119635991268951ull, 2364412635893079358ull}},
+{{2174256860027747782ull, 16593596834338665584ull,
+ 144277508134310381ull, 2955515794866349198ull}},
+{{2717821075034684728ull, 6906937987641168268ull,
+ 9403718922022663785ull, 3694394743582936497ull}},
+{{10922010208751453763ull, 15846051288344199927ull,
+ 17406539372332634625ull, 2308996714739335310ull}},
+{{9040826742511929300ull, 5972506055148086197ull,
+ 12534802178561017474ull, 2886245893424169138ull}},
+{{15912719446567299529ull, 16689004605789883554ull,
+ 6445130686346496034ull, 3607807366780211423ull}},
+{{10667527271354348603ull, 11637883720382578635ull,
+ 3444727339505732139ull, 4509759208475264279ull}},
+{{4361361535382773925ull, 4967834316025417695ull,
+ 9070483614832164443ull, 2818599505297040174ull}},
+{{840015900801079502ull, 1598106876604384215ull, 2114732481685429746ull,
+ 3523249381621300218ull}},
+{{14885077931283513089ull, 11221005632610256076ull,
+ 11866787638961562990ull, 4404061727026625272ull}},
+{{79801670197419873ull, 2401442501954022144ull, 7416742274350976869ull,
+ 2752538579391640795ull}},
+{{99752087746774841ull, 7613489145869915584ull, 4659241824511333182ull,
+ 3440673224239550994ull}},
+{{124690109683468551ull, 293489395482618672ull, 15047424317493942286ull,
+ 4300841530299438742ull}},
+{{77931318552167845ull, 14018488927458800382ull, 4792954180006326024ull,
+ 2688025956437149214ull}},
+{{9320786185044985614ull, 17523111159323500477ull,
+ 15214564761862683338ull, 3360032445546436517ull}},
+{{16262668749733619921ull, 12680516912299599788ull,
+ 5183147897046190461ull, 4200040556933045647ull}},
+{{940795931728736643ull, 10231166079400943820ull,
+ 10156996463294950894ull, 2625025348083153529ull}},
+{{1175994914660920804ull, 3565585562396403967ull,
+ 17307931597546076522ull, 3281281685103941911ull}},
+{{15305051698608314716ull, 13680353989850280766ull,
+ 17023228478505207748ull, 4101602106379927389ull}},
+{{4953971293202808794ull, 17773593280511201287ull,
+ 12945360808279448794ull, 2563501316487454618ull}},
+{{1580778098076123088ull, 12993619563784225801ull,
+ 6958328973494535185ull, 3204376645609318273ull}},
+{{6587658641022541764ull, 2406966399448118539ull,
+ 13309597235295556886ull, 4005470807011647841ull}},
+{{1811443641425394651ull, 15339412054937237799ull,
+ 1400969244418641197ull, 2503419254382279901ull}},
+{{16099362607063907025ull, 5339207013389383536ull,
+ 6362897573950689401ull, 3129274067977849876ull}},
+{{1677459185120332166ull, 11285694785164117325ull,
+ 7953621967438361751ull, 3911592584972312345ull}},
+{{3354254999913901556ull, 13971088268368655184ull,
+ 16500228775717445854ull, 2444745365607695215ull}},
+{{4192818749892376944ull, 8240488298606043172ull,
+ 16013599951219419414ull, 3055931707009619019ull}},
+{{5241023437365471180ull, 1077238336402778157ull,
+ 15405313920596886364ull, 3819914633762023774ull}},
+{{5581482657567113440ull, 9896645997106512156ull,
+ 5016635181945666073ull, 2387446646101264859ull}},
+{{6976853321958891800ull, 16982493514810528099ull,
+ 1659107959004694687ull, 2984308307626581074ull}},
+{{4109380634021226846ull, 16616430875085772220ull,
+ 11297256985610644167ull, 3730385384533226342ull}},
+{{11791734933118042587ull, 17302798324569689493ull,
+ 2449099597579264700ull, 2331490865333266464ull}},
+{{904610611115389521ull, 3181753832002560251ull, 3061374496974080876ull,
+ 2914363581666583080ull}},
+{{14965821319176400613ull, 3977192290003200313ull,
+ 3826718121217601095ull, 3642954477083228850ull}},
+{{4872218593688337055ull, 359804344076612488ull,
+ 14006769688376777177ull, 4553693096354036062ull}},
+{{3045136621055210659ull, 11754092761116352565ull,
+ 4142545036808097831ull, 2846058185221272539ull}},
+{{8418106794746401228ull, 10080929932968052802ull,
+ 566495277582734385ull, 3557572731526590674ull}},
+{{1299261456578225727ull, 17212848434637453907ull,
+ 9931491133833193789ull, 4446965914408238342ull}},
+{{16952939474857248744ull, 13063873280862102643ull,
+ 1595495940218358214ull, 2779353696505148964ull}},
+{{16579488325144173025ull, 7106469564222852496ull,
+ 1994369925272947768ull, 3474192120631436205ull}},
+{{2277616332720664666ull, 8883086955278565621ull,
+ 7104648425018572614ull, 4342740150789295256ull}},
+{{3729353217164109368ull, 940243328621715609ull, 4440405265636607884ull,
+ 2714212594243309535ull}},
+{{9273377539882524614ull, 1175304160777144511ull, 938820563618371951ull,
+ 3392765742804136919ull}},
+{{6980035906425767863ull, 15304188256253594351ull,
+ 15008583759805128650ull, 4240957178505171148ull}},
+{{11280051469157186771ull, 14176803678585884373ull,
+ 156992813023429598ull, 2650598236565731968ull}},
+{{265006281164319751ull, 8497632561377579659ull, 196241016279286998ull,
+ 3313247795707164960ull}},
+{{14166315906737563401ull, 1398668664867198765ull,
+ 245301270349108748ull, 4141559744633956200ull}},
+{{11159790450924671078ull, 10097539952396775036ull,
+ 153313293968192967ull, 2588474840396222625ull}},
+{{13949738063655838847ull, 8010238922068580891ull,
+ 4803327635887629113ull, 3235593550495278281ull}},
+{{12825486561142410655ull, 14624484671013114018ull,
+ 10615845563286924295ull, 4044491938119097851ull}},
+{{12627615119141394564ull, 16057831947024278117ull,
+ 4329060467840633732ull, 2527807461324436157ull}},
+{{1949460843644579492ull, 1625545860070796031ull,
+ 10023011603228180070ull, 3159759326655545196ull}},
+{{16271884109837888077ull, 11255304361943270846ull,
+ 12528764504035225087ull, 3949699158319431495ull}},
+{{5558241550221292144ull, 13952094253855626135ull,
+ 14748006842663097535ull, 2468561973949644684ull}},
+{{2336115919349227276ull, 12828431798892144765ull,
+ 18435008553328871919ull, 3085702467437055855ull}},
+{{7531830917613921999ull, 11423853730187793052ull,
+ 18432074673233701995ull, 3857128084296319819ull}},
+{{13930766360363477058ull, 4834065572153676705ull,
+ 9214203661557369795ull, 2410705052685199887ull}},
+{{3578399895172182610ull, 1430895946764707978ull,
+ 6906068558519324340ull, 3013381315856499859ull}},
+{{13696371905820004071ull, 1788619933455884972ull,
+ 4020899679721767521ull, 3766726644820624824ull}},
+{{17783604477992278352ull, 12647102504478397867ull,
+ 2513062299826104700ull, 2354204153012890515ull}},
+{{17617819579062960036ull, 15808878130597997334ull,
+ 16976385930064794587ull, 2942755191266113143ull}},
+{{12798902436973924237ull, 15149411644820108764ull,
+ 16608796394153605330ull, 3678443989082641429ull}},
+{{15998628046217405296ull, 9713392519170360147ull,
+ 6925937437409842951ull, 4598054986353301787ull}},
+{{7693299519672184358ull, 12988399352122556948ull,
+ 2022867889167457892ull, 2873784366470813617ull}},
+{{9616624399590230448ull, 16235499190153196185ull,
+ 7140270879886710269ull, 3592230458088517021ull}},
+{{16632466517915175964ull, 6459315932409331519ull,
+ 13537024618285775741ull, 4490288072610646276ull}},
+{{17312820601338066834ull, 6342915466969526151ull,
+ 17684012423283385646ull, 2806430045381653922ull}},
+{{17029339733245195638ull, 17152016370566683497ull,
+ 12881643492249456249ull, 3508037556727067403ull}},
+{{7451616611274330835ull, 7604962407926190660ull,
+ 11490368346884432408ull, 4385046945908834254ull}},
+{{13880632418901232580ull, 4753101504953869162ull,
+ 2569794198375382351ull, 2740654341193021409ull}},
+{{8127418486771764917ull, 1329690862764948549ull,
+ 7823928766396615843ull, 3425817926491276761ull}},
+{{14770959126892094050ull, 15497171633738349398ull,
+ 14391596976423157707ull, 4282272408114095951ull}},
+{{4620163435880170878ull, 7379889261872774422ull,
+ 15912277137905555423ull, 2676420255071309969ull}},
+{{14998576331704989405ull, 4613175558913580123ull,
+ 6055288367099780567ull, 3345525318839137462ull}},
+{{14136534396203848852ull, 1154783430214587250ull,
+ 16792482495729501517ull, 4181906648548921827ull}},
+{{13447020016054793437ull, 3027582653097810983ull,
+ 8189458550617244496ull, 2613691655343076142ull}},
+{{12197089001641103892ull, 3784478316372263729ull,
+ 1013451151416779812ull, 3267114569178845178ull}},
+{{1411303196769216152ull, 4730597895465329662ull,
+ 10490185976125750573ull, 4083893211473556472ull}},
+{{14717122553262923807ull, 5262466693879524990ull,
+ 6556366235078594108ull, 2552433257170972795ull}},
+{{9173031154723878951ull, 6578083367349406238ull,
+ 3583771775420854731ull, 3190541571463715994ull}},
+{{2242916906550072881ull, 3610918190759369894ull,
+ 13703086756130844222ull, 3988176964329644992ull}},
+{{15236881121875959263ull, 16091881924506769895ull,
+ 8564429222581777638ull, 2492610602706028120ull}},
+{{14434415383917561174ull, 10891480368778686561ull,
+ 10705536528227222048ull, 3115763253382535150ull}},
+{{4207961174614787756ull, 13614350460973358202ull,
+ 4158548623429251752ull, 3894704066728168938ull}},
+{{7241661752561630252ull, 8508969038108348876ull,
+ 7210778908070670249ull, 2434190041705105586ull}},
+{{9052077190702037814ull, 15247897316062823999ull,
+ 18236845671943113619ull, 3042737552131381982ull}},
+{{6703410469950159364ull, 14448185626651142095ull,
+ 13572685053074116216ull, 3803421940164227478ull}},
+{{11107160571359931459ull, 9030116016656963809ull,
+ 3871242139743934731ull, 2377138712602642174ull}},
+{{48892658917750611ull, 6675959002393816858ull, 14062424711534694222ull,
+ 2971423390753302717ull}},
+{{9284487860501964072ull, 17568320789847046880ull,
+ 3742972834136204065ull, 3714279238441628397ull}},
+{{5802804912813727545ull, 4062671466013322444ull,
+ 4645201030548821493ull, 2321424524026017748ull}},
+{{7253506141017159431ull, 9690025350944040959ull,
+ 5806501288186026866ull, 2901780655032522185ull}},
+{{4455196657844061385ull, 2889159651825275391ull,
+ 11869812628659921487ull, 3627225818790652731ull}},
+{{957309803877688827ull, 17446507620063757951ull,
+ 10225579767397513954ull, 4534032273488315914ull}},
+{{7515847655064637373ull, 15515753280967236623ull,
+ 11002673373050834125ull, 2833770170930197446ull}},
+{{4783123550403408812ull, 5559633545926882067ull,
+ 4529969679458766849ull, 3542212713662746808ull}},
+{{1367218419576873111ull, 11561227950835990488ull,
+ 5662462099323458561ull, 4427765892078433510ull}},
+{{854511512235545695ull, 308238441631412199ull, 17374096867359325313ull,
+ 2767353682549020943ull}},
+{{14903197445576595830ull, 4996984070466653152ull,
+ 17105935065771768737ull, 3459192103186276179ull}},
+{{182252733261193171ull, 10857916106510704345ull,
+ 16770732813787323017ull, 4323990128982845224ull}},
+{{11643123004356715492ull, 18315412612637659975ull,
+ 10481708008617076885ull, 2702493830614278265ull}},
+{{9942217737018506461ull, 9059207710514911257ull,
+ 17713821029198734011ull, 3378117288267847831ull}},
+{{17039458189700520980ull, 6712323619716251167ull,
+ 17530590268071029610ull, 4222646610334809789ull}},
+{{17567190396203907469ull, 8806888280750044883ull,
+ 13262461926758087458ull, 2639154131459256118ull}},
+{{17347301976827496432ull, 1785238314082780296ull,
+ 7354705371592833515ull, 3298942664324070148ull}},
+{{3237383397324818924ull, 16066605947885639083ull,
+ 9193381714491041893ull, 4123678330405087685ull}},
+{{18164265687823869492ull, 12347471726642218378ull,
+ 8051706580770595135ull, 2577298956503179803ull}},
+{{13481960072925061056ull, 10822653639875385069ull,
+ 5452947207535856015ull, 3221623695628974754ull}},
+{{3017392035874162608ull, 8916631031416843433ull,
+ 16039556046274595827ull, 4027029619536218442ull}},
+{{13415085068489821390ull, 3267051385421833193ull,
+ 14636408547349010296ull, 2516893512210136526ull}},
+{{2933798280330113026ull, 4083814231777291492ull,
+ 9072138647331487062ull, 3146116890262670658ull}},
+{{3667247850412641282ull, 14328139826576390173ull,
+ 2116801272309583019ull, 3932646112828338323ull}},
+{{4597872915721594754ull, 6649244382396549906ull,
+ 17463901859689347051ull, 2457903820517711451ull}},
+{{14970713181506769250ull, 3699869459568299478ull,
+ 17218191306184295910ull, 3072379775647139314ull}},
+{{9490019440028685754ull, 13848208861315150156ull,
+ 12299367095875594079ull, 3840474719558924143ull}},
+{{15154634186872704405ull, 15572659565963050703ull,
+ 14604633462563328155ull, 2400296699724327589ull}},
+{{14331606715163492602ull, 14854138439026425475ull,
+ 4420733772921996482ull, 3000370874655409487ull}},
+{{13302822375526977848ull, 9344301011928256036ull,
+ 914231197725107699ull, 3750463593319261859ull}},
+{{17537636021559136963ull, 3534345123241466070ull,
+ 16712295563074049976ull, 2344039745824538661ull}},
+{{12698672990094145396ull, 4417931404051832588ull,
+ 7055311398560398758ull, 2930049682280673327ull}},
+{{15873341237617681745ull, 14745786291919566543ull,
+ 4207453229773110543ull, 3662562102850841659ull}},
+{{15229990528594714277ull, 13820546846472070275ull,
+ 647630518789000275ull, 4578202628563552074ull}},
+{{7212901071158002471ull, 6331998769831349970ull,
+ 5016455092670513076ull, 2861376642852220046ull}},
+{{18239498375802278897ull, 7914998462289187462ull,
+ 15493940902692917153ull, 3576720803565275057ull}},
+{{13576000932898072813ull, 14505434096288872232ull,
+ 5532368073083982729ull, 4470901004456593822ull}},
+{{8485000583061295508ull, 2148367282539463289ull,
+ 17292788100959652918ull, 2794313127785371138ull}},
+{{15217936747254007289ull, 11908831140029104919ull,
+ 12392613089344790339ull, 3492891409731713923ull}},
+{{14410734915640121207ull, 10274352906608993245ull,
+ 10879080343253600020ull, 4366114262164642404ull}},
+{{11312552331488769707ull, 15644842603485396586ull,
+ 16022797251388275820ull, 2728821413852901502ull}},
+{{4917318377506186325ull, 1109309180647194117ull,
+ 10805124527380568968ull, 3411026767316126878ull}},
+{{10758333990310120811ull, 1386636475808992646ull,
+ 4283033622370935402ull, 4263783459145158598ull}},
+{{2112272725516437603ull, 5478333815808008308ull,
+ 16511954069263998338ull, 2664864661965724123ull}},
+{{2640340906895547003ull, 16071289306614786193ull,
+ 16028256568152610018ull, 3331080827457155154ull}},
+{{7912112152046821658ull, 10865739596413706933ull,
+ 10811948673335986715ull, 4163851034321443943ull}},
+{{7250913104242957488ull, 4485244238544872881ull,
+ 13674996948476073553ull, 2602406896450902464ull}},
+{{13675327398731084764ull, 10218241316608479005ull,
+ 17093746185595091941ull, 3253008620563628080ull}},
+{{3259101193131692243ull, 17384487664187986661ull,
+ 2920438658284313310ull, 4066260775704535101ull}},
+{{4342781254921001604ull, 6253618771690103759ull,
+ 4131117170641389771ull, 2541412984815334438ull}},
+{{816790550223864101ull, 3205337446185241795ull,
+ 14387268500156513022ull, 3176766231019168047ull}},
+{{14856046243061993839ull, 13230043844586328051ull,
+ 13372399606768253373ull, 3970957788773960059ull}},
+{{6979185892700052197ull, 10574620412080148984ull,
+ 6051906745016464406ull, 2481848617983725037ull}},
+{{8723982365875065246ull, 3994903478245410422ull,
+ 12176569449697968412ull, 3102310772479656296ull}},
+{{1681605920489055750ull, 4993629347806763028ull,
+ 15220711812122460515ull, 3877888465599570370ull}},
+{{10274375737160435652ull, 815175333165532940ull,
+ 14124630901003925726ull, 2423680290999731481ull}},
+{{12842969671450544565ull, 10242341203311691983ull,
+ 3820730570972743445ull, 3029600363749664352ull}},
+{{11442026070885792802ull, 17414612522567002883ull,
+ 4775913213715929306ull, 3787000454687080440ull}},
+{{4845423285089926549ull, 15495818845031764706ull,
+ 2984945758572455816ull, 2366875284179425275ull}},
+{{15280151143217183995ull, 923029482580154266ull,
+ 17566240253497733483ull, 2958594105224281593ull}},
+{{9876816892166704185ull, 14988844908507356545ull,
+ 8122742261590003141ull, 3698242631530351992ull}},
+{{17702225603672659876ull, 11673871077030791792ull,
+ 5076713913493751963ull, 2311401644706469995ull}},
+{{3681037930881273229ull, 9980652827861101837ull,
+ 1734206373439802050ull, 2889252055883087494ull}},
+{{9212983432028979440ull, 3252443997971601488ull,
+ 11391130003654528371ull, 3611565069853859367ull}},
+{{11516229290036224299ull, 17900613052746665572ull,
+ 9627226486140772559ull, 4514456337317324209ull}},
+{{16421015343127415995ull, 18105412185607747838ull,
+ 17546231599906452609ull, 2821535210823327630ull}},
+{{11302897142054494186ull, 8796707176727521086ull,
+ 12709417463028289954ull, 3526919013529159538ull}},
+{{4905249390713341924ull, 1772511934054625550ull,
+ 6663399791930586635ull, 4408648766911449423ull}},
+{{16900838924478002415ull, 17248721023279998632ull,
+ 11082153897597698502ull, 2755405479319655889ull}},
+{{2679304581887951403ull, 12337529242245222483ull, 17634316714959416ull,
+ 3444256849149569862ull}},
+{{17184188782642102965ull, 15421911552806528103ull,
+ 9245414932748475078ull, 4305321061436962327ull}},
+{{17657647016792396209ull, 5027008702076692160ull,
+ 12695913360608878780ull, 2690825663398101454ull}},
+{{3625314697280943646ull, 6283760877595865201ull,
+ 6646519663906322667ull, 3363532079247626818ull}},
+{{9143329390028567461ull, 3243015078567443597ull,
+ 17531521616737679142ull, 4204415099059533522ull}},
+{{8020423877981548615ull, 15861942479386815960ull,
+ 15568887028888437367ull, 2627759436912208451ull}},
+{{10025529847476935769ull, 15215742080806132046ull,
+ 14849422767683158805ull, 3284699296140260564ull}},
+{{3308540272491393903ull, 5184619545725501346ull, 115034385894396891ull,
+ 4105874120175325706ull}},
+{{6679523688734509094ull, 934544206864744389ull, 4683582509611385961ull,
+ 2566171325109578566ull}},
+{{12961090629345524271ull, 5779866277008318390ull,
+ 15077850173869008259ull, 3207714156386973207ull}},
+{{6977991249827129530ull, 2613146827833010084ull,
+ 14235626698908872420ull, 4009642695483716509ull}},
+{{13584616567996731765ull, 10856588804250407110ull,
+ 11203109696031739214ull, 2506026684677322818ull}},
+{{7757398673141138898ull, 4347363968458233080ull,
+ 4780515083184898210ull, 3132533355846653523ull}},
+{{9696748341426423622ull, 14657576997427567158ull,
+ 1363957835553734858ull, 3915666694808316904ull}},
+{{1448781694964126860ull, 13772671641819617378ull,
+ 852473647221084286ull, 2447291684255198065ull}},
+{{11034349155559934383ull, 7992467515419745914ull,
+ 5677278077453743262ull, 3059114605318997581ull}},
+{{4569564407595142170ull, 767212357419906585ull,
+ 11708283615244566982ull, 3823893256648746976ull}},
+{{14385192800815433617ull, 14314565778669605327ull,
+ 7317677259527854363ull, 2389933285405466860ull}},
+{{13369804982591904117ull, 13281521204909618755ull,
+ 9147096574409817954ull, 2987416606756833575ull}},
+{{12100570209812492242ull, 7378529469282247636ull,
+ 6822184699584884539ull, 3734270758446041969ull}},
+{{16786228417987583459ull, 2305737909087710820ull,
+ 15793080483309022597ull, 2333919224028776230ull}},
+{{2536041448774927708ull, 7493858404787026430ull,
+ 10517978567281502438ull, 2917399030035970288ull}},
+{{12393423847823435443ull, 143950969129007229ull,
+ 13147473209101878048ull, 3646748787544962860ull}},
+{{1656721754497130592ull, 179938711411259037ull,
+ 16434341511377347560ull, 4558435984431203575ull}},
+{{3341294105774400572ull, 112461694632036898ull,
+ 17188992472251924081ull, 2849022490269502234ull}},
+{{13399989669072776523ull, 4752263136717434026ull,
+ 12262868553460129293ull, 3561278112836877793ull}},
+{{7526615049486194845ull, 10552014939324180437ull,
+ 1493527636542997904ull, 4451597641046097242ull}},
+{{7009977415142565731ull, 6595009337077612773ull,
+ 5545140791266761594ull, 2782248525653810776ull}},
+{{13374157787355595067ull, 17467133708201791774ull,
+ 6931425989083451992ull, 3477810657067263470ull}},
+{{7494325197339718026ull, 3387173061542688102ull,
+ 17887654523209090799ull, 4347263321334079337ull}},
+{{72267229909935862ull, 9034512191105261920ull, 4262255049364599893ull,
+ 2717039575833799586ull}},
+{{90334037387419828ull, 15904826257308965304ull,
+ 14551190848560525674ull, 3396299469792249482ull}},
+{{112917546734274784ull, 10657660784781430822ull,
+ 8965616523845881285ull, 4245374337240311853ull}},
+{{13905631521991085452ull, 8966880999702088215ull,
+ 7909353336617369755ull, 2653358960775194908ull}},
+{{12770353384061468911ull, 6596915231200222365ull,
+ 9886691670771712194ull, 3316698700968993635ull}},
+{{2127883674794672427ull, 17469516075855053765ull,
+ 7746678570037252338ull, 4145873376211242044ull}},
+{{3635770305960364219ull, 15530133565836796507ull,
+ 14065046143128058519ull, 2591170860132026277ull}},
+{{18379770937732618986ull, 14800980938868607729ull,
+ 3746249623627909437ull, 3238963575165032847ull}},
+{{9139655616883610020ull, 4666168118303595950ull, 71126011107498893ull,
+ 4048704468956291059ull}},
+{{1100598742124868359ull, 5222198083153441421ull,
+ 16185354821438044472ull, 2530440293097681911ull}},
+{{5987434446083473352ull, 6527747603941801776ull,
+ 15620007508370167686ull, 3163050366372102389ull}},
+{{7484293057604341690ull, 17383056541782028028ull,
+ 5689951330180545895ull, 3953812957965127987ull}},
+{{13901055197857489365ull, 17781939366254849373ull,
+ 1250376572149147232ull, 2471133098728204992ull}},
+{{3541260942039697994ull, 3780680134109010101ull,
+ 1562970715186434041ull, 3088916373410256240ull}},
+{{9038262195977010396ull, 9337536186063650530ull,
+ 1953713393983042551ull, 3861145466762820300ull}},
+{{10260599890913019402ull, 12753489143930863437ull,
+ 10444442908094177402ull, 2413215916726762687ull}},
+{{17437435882068662156ull, 6718489393058803488ull,
+ 8443867616690333849ull, 3016519895908453359ull}},
+{{3350050778876276079ull, 13009797759750892265ull,
+ 5943148502435529407ull, 3770649869885566699ull}},
+{{13622996782866142309ull, 15048652627485389521ull,
+ 1408624804808511927ull, 2356656168678479187ull}},
+{{3193687923300514175ull, 14199129765929348998ull,
+ 15595839061292803621ull, 2945820210848098983ull}},
+{{13215481940980418526ull, 3913854152129522535ull,
+ 14883112808188616623ull, 3682275263560123729ull}},
+{{11907666407798135254ull, 280631671734515265ull,
+ 4768832954953607067ull, 4602844079450154662ull}},
+{{524762477232752678ull, 16316295859329929705ull,
+ 16815578652128168128ull, 2876777549656346663ull}},
+{{5267639114968328751ull, 1948625750452860515ull,
+ 16407787296732822257ull, 3595971937070433329ull}},
+{{1972862875283023035ull, 7047468206493463548ull,
+ 6674676065633864109ull, 4494964921338041662ull}},
+{{10456411333906665205ull, 6710510638272108669ull,
+ 18006730596303328780ull, 2809353075836276038ull}},
+{{17682200185810719410ull, 8388138297840135836ull,
+ 13285041208524385167ull, 3511691344795345048ull}},
+{{3656006158553847646ull, 5873486853872781892ull,
+ 16606301510655481459ull, 4389614180994181310ull}},
+{{11508375885950930587ull, 1365086274456794730ull,
+ 5767252425732288008ull, 2743508863121363319ull}},
+{{5162097820583887426ull, 1706357843070993413ull,
+ 2597379513737972106ull, 3429386078901704149ull}},
+{{11064308294157247186ull, 11356319340693517574ull,
+ 7858410410599853036ull, 4286732598627130186ull}},
+{{2303506665420891588ull, 16321071624788224292ull,
+ 9523192525052296051ull, 2679207874141956366ull}},
+{{2879383331776114484ull, 15789653512557892461ull,
+ 2680618619460594256ull, 3349009842677445458ull}},
+{{8210915183147531009ull, 1290322816987813960ull,
+ 12574145311180518629ull, 4186262303346806822ull}},
+{{5131821989467206881ull, 3112294769831077677ull,
+ 3247154801060436239ull, 2616413939591754264ull}},
+{{11026463505261396505ull, 17725426517571010808ull,
+ 4058943501325545298ull, 3270517424489692830ull}},
+{{13783079381576745631ull, 12933411110108987702ull,
+ 14297051413511707431ull, 4088146780612116037ull}},
+{{4002738595058078116ull, 15000910971459199170ull,
+ 11241500142658511096ull, 2555091737882572523ull}},
+{{14226795280677373453ull, 304394640614447346ull,
+ 9440189159895750967ull, 3193864672353215654ull}},
+{{8560122063991941008ull, 14215551356050222895ull,
+ 2576864413014912900ull, 3992330840441519568ull}},
+{{12267605317636044986ull, 18108091634386165117ull,
+ 1610540258134320562ull, 2495206775275949730ull}},
+{{1499448591762892520ull, 13411742506127930589ull,
+ 11236547359522676511ull, 3119008469094937162ull}},
+{{6485996758131003554ull, 12152992114232525332ull,
+ 4822312162548569831ull, 3898760586368671453ull}},
+{{13277120010686653030ull, 14513149099036410188ull,
+ 5319788110806550096ull, 2436725366480419658ull}},
+{{16596400013358316287ull, 18141436373795512735ull,
+ 15873107175362963428ull, 3045906708100524572ull}},
+{{16133813998270507454ull, 4230051393534839303ull,
+ 1394639895494152670ull, 3807383385125655716ull}},
+{{17001162776560149015ull, 16478840176241438276ull,
+ 10095021971538621226ull, 2379614615703534822ull}},
+{{2804709396990634653ull, 11375178183447022038ull,
+ 3395405427568500725ull, 2974518269629418528ull}},
+{{12729258783093069124ull, 383914674026613835ull,
+ 4244256784460625907ull, 3718147837036773160ull}},
+{{5649943730219474251ull, 16380847735762491311ull,
+ 2652660490287891191ull, 2323842398147983225ull}},
+{{2450743644346954909ull, 15864373651275726235ull,
+ 7927511631287251893ull, 2904802997684979031ull}},
+{{16898487610715857348ull, 5995409008812494081ull,
+ 5297703520681676963ull, 3631003747106223789ull}},
+{{7288051458112657973ull, 2882575242588229698ull,
+ 11233815419279484108ull, 4538754683882779736ull}},
+{{9166718179747799137ull, 11024981563472419369ull,
+ 7021134637049677567ull, 2836721677426737335ull}},
+{{16070083743112136826ull, 9169540935913136307ull,
+ 4164732277884709055ull, 3545902096783421669ull}},
+{{15475918660462783128ull, 6850240151464032480ull,
+ 9817601365783274223ull, 4432377620979277086ull}},
+{{9672449162789239455ull, 11198929122306102156ull,
+ 1524314835187158485ull, 2770236013112048179ull}},
+{{12090561453486549319ull, 163603347600463983ull,
+ 15740451599266111819ull, 3462795016390060223ull}},
+{{10501515798430798745ull, 14039562239782743691ull,
+ 15063878480655251869ull, 4328493770487575279ull}},
+{{4257604364805555264ull, 11080569409077908759ull,
+ 16332453078050614274ull, 2705308606554734549ull}},
+{{710319437579556175ull, 4627339724492610141ull, 6580508292281104131ull,
+ 3381635758193418187ull}},
+{{5499585315401833123ull, 1172488637188374772ull,
+ 3613949346923992260ull, 4227044697741772734ull}},
+{{12660612858980921510ull, 9956177435097510040ull,
+ 16093776397109658874ull, 2641902936088607958ull}},
+{{15825766073726151887ull, 3221849757017111742ull,
+ 10893848459532297785ull, 3302378670110759948ull}},
+{{10558835555302914051ull, 8638998214698777582ull,
+ 13617310574415372231ull, 4127973337638449935ull}},
+{{1987586203636933378ull, 12316902911827817845ull,
+ 15428348136650689500ull, 2579983336024031209ull}},
+{{7096168772973554627ull, 15396128639784772306ull,
+ 5450377115531198163ull, 3224979170030039012ull}},
+{{18093583003071719091ull, 14633474781303577478ull,
+ 6812971394413997704ull, 4031223962537548765ull}},
+{{6696803358492436528ull, 9145921738314735924ull,
+ 6563950130722442517ull, 2519514976585967978ull}},
+{{8371004198115545660ull, 16044088191320807809ull,
+ 17428309700257828954ull, 3149393720732459972ull}},
+{{15075441266071819979ull, 10831738202296233953ull,
+ 3338643051612734577ull, 3936742150915574966ull}},
+{{2504621763653805631ull, 18299051422503615981ull,
+ 15921709962540122822ull, 2460463844322234353ull}},
+{{7742463222994644943ull, 13650442241274744168ull,
+ 6067079397892989816ull, 3075579805402792942ull}},
+{{9678079028743306178ull, 17063052801593430210ull,
+ 16807221284221013078ull, 3844474756753491177ull}},
+{{10660485411391954266ull, 6052721982568505977ull,
+ 3586984274997051318ull, 2402796722970931986ull}},
+{{17937292782667330736ull, 16789274515065408279ull,
+ 13707102380601089955ull, 3003495903713664982ull}},
+{{17809929959906775516ull, 16374907125404372445ull,
+ 7910505938896586636ull, 3754369879642081228ull}},
+{{13437049234155428649ull, 1010944916522956970ull,
+ 14167438248665142456ull, 2346481174776300767ull}},
+{{7572939505839510004ull, 1263681145653696213ull,
+ 13097611792404040166ull, 2933101468470375959ull}},
+{{14077860400726775408ull, 10802973468921896074ull,
+ 11760328722077662303ull, 3666376835587969949ull}},
+{{8373953464053693452ull, 8892030817724982189ull, 865352847314914167ull,
+ 4582971044484962437ull}},
+{{7539563924247252360ull, 12475048288719195724ull,
+ 2846688538785515306ull, 2864356902803101523ull}},
+{{9424454905309065450ull, 6370438324044218847ull,
+ 17393418728764057845ull, 3580446128503876903ull}},
+{{7168882613208943908ull, 12574733923482661463ull,
+ 17130087392527684402ull, 4475557660629846129ull}},
+{{11398080660896671799ull, 12470894720604051318ull,
+ 3788775592688720895ull, 2797223537893653831ull}},
+{{5024228789266063940ull, 10976932382327676244ull,
+ 124283472433513215ull, 3496529422367067289ull}},
+{{6280285986582579925ull, 9109479459482207401ull,
+ 4767040358969279423ull, 4370661777958834111ull}},
+{{15454393787682582214ull, 12610953689817461481ull,
+ 9896929251996881495ull, 2731663611224271319ull}},
+{{5482934179321064055ull, 11152006093844438948ull,
+ 7759475546568713965ull, 3414579514030339149ull}},
+{{6853667724151330068ull, 104949562023384973ull,
+ 14311030451638280361ull, 4268224392537923936ull}},
+{{6589385336808275245ull, 11594808522333085368ull,
+ 8944394032273925225ull, 2667640245336202460ull}},
+{{8236731671010344056ull, 658452597634192998ull,
+ 11180492540342406532ull, 3334550306670253075ull}},
+{{1072542551908154262ull, 823065747042741248ull, 9363929657000620261ull,
+ 4168187883337816344ull}},
+{{670339094942596414ull, 2820259101115407232ull, 5852456035625387663ull,
+ 2605117427086135215ull}},
+{{837923868678245517ull, 17360381931676422752ull,
+ 2703884026104346674ull, 3256396783857669019ull}},
+{{1047404835847806896ull, 12477105377740752632ull,
+ 17214913087912597055ull, 4070495979822086273ull}},
+{{654628022404879310ull, 14715719888729052251ull,
+ 3841791652304291303ull, 2544059987388803921ull}},
+{{14653343083288262850ull, 13782963842483927409ull,
+ 9413925583807752033ull, 3180074984236004901ull}},
+{{4481620798828164850ull, 3393646747822745550ull,
+ 16379092998187077946ull, 3975093730295006126ull}},
+{{16636071054549766744ull, 6732715235816603872ull,
+ 5625247105439535812ull, 2484433581434378829ull}},
+{{2348344744477656813ull, 8415894044770754841ull,
+ 11643244900226807669ull, 3105541976792973536ull}},
+{{7547116949024458921ull, 15131553574390831455ull,
+ 14554056125283509586ull, 3881927470991216920ull}},
+{{11634477120781368682ull, 14068907002421657563ull,
+ 9096285078302193491ull, 2426204669369510575ull}},
+{{9931410382549322948ull, 12974447734599684050ull,
+ 6758670329450353960ull, 3032755836711888219ull}},
+{{3190890941331877877ull, 16218059668249605063ull,
+ 3836651893385554546ull, 3790944795889860274ull}},
+{{8911835865973505529ull, 14747973311083391068ull,
+ 7009593451793359495ull, 2369340497431162671ull}},
+{{11139794832466881911ull, 13823280620426850931ull,
+ 4150305796314311465ull, 2961675621788953339ull}},
+{{9313057522156214485ull, 3444042720251399952ull, 576196226965501428ull,
+ 3702094527236191674ull}},
+{{5820660951347634053ull, 11375898737011900778ull,
+ 4971808660280826296ull, 2313809079522619796ull}},
+{{16499198226039318374ull, 14219873421264875972ull,
+ 6214760825351032870ull, 2892261349403274745ull}},
+{{2177253708839596352ull, 8551469739726319158ull,
+ 12380137050116178992ull, 3615326686754093431ull}},
+{{11944939172904271248ull, 10689337174657898947ull,
+ 10863485294217835836ull, 4519158358442616789ull}},
+{{5159743973851475578ull, 15904207771015962650ull,
+ 9095521318099841349ull, 2824473974026635493ull}},
+{{15673052004169120280ull, 6045201658487789600ull,
+ 15981087666052189591ull, 3530592467533294366ull}},
+{{1144570931501848734ull, 2944816054682349097ull,
+ 10752987545710461181ull, 4413240584416617958ull}},
+{{12244571878257125219ull, 4146353043390162137ull,
+ 2108931197641650334ull, 2758275365260386224ull}},
+{{1470656792539242812ull, 14406313341092478480ull,
+ 2636163997052062917ull, 3447844206575482780ull}},
+{{1838320990674053515ull, 4172833621083434388ull,
+ 3295204996315078647ull, 4309805258219353475ull}},
+{{10372322656026059255ull, 9525550040818228348ull,
+ 18200404187192781818ull, 2693628286387095921ull}},
+{{12965403320032574069ull, 2683565514168009627ull,
+ 8915447178708813561ull, 3367035357983869902ull}},
+{{11595068131613329682ull, 7966142911137399938ull,
+ 1920936936531241143ull, 4208794197479837378ull}},
+{{11858603600685718955ull, 11896368347101956817ull,
+ 5812271603759413618ull, 2630496373424898361ull}},
+{{988196445574984982ull, 5647088397022670214ull,
+ 11877025523126654927ull, 3288120466781122951ull}},
+{{10458617593823507035ull, 2447174477850949863ull,
+ 10234595885480930755ull, 4110150583476403689ull}},
+{{13454165023780773753ull, 17670385113152701328ull,
+ 17925837474494051481ull, 2568844114672752305ull}},
+{{16817706279725967191ull, 8252923336158712948ull,
+ 8572238787835400640ull, 3211055143340940382ull}},
+{{2575388775947907373ull, 10316154170198391186ull,
+ 1491926447939474992ull, 4013818929176175478ull}},
+{{6221304003394830012ull, 6447596356373994491ull,
+ 14767512085244335582ull, 2508636830735109673ull}},
+{{3164943985816149611ull, 17282867482322268922ull,
+ 4624332051273255765ull, 3135796038418887092ull}},
+{{13179552019124962822ull, 7768526297620672440ull,
+ 5780415064091569707ull, 3919745048023608865ull}},
+{{8237220011953101764ull, 2549485926799226323ull,
+ 15141974461125700827ull, 2449840655014755540ull}},
+{{5684838996513989301ull, 17021915463781196616ull,
+ 480724002697574417ull, 3062300818768444426ull}},
+{{7106048745642486626ull, 7442336274444332058ull,
+ 9824277040226743830ull, 3827876023460555532ull}},
+{{9052966484453942045ull, 39774153100319632ull, 15363545186996490702ull,
+ 2392422514662847207ull}},
+{{11316208105567427557ull, 9273089728230175348ull,
+ 14592745465318225473ull, 2990528143328559009ull}},
+{{14145260131959284446ull, 16203048178715107089ull,
+ 4405873776365618129ull, 3738160179160698762ull}},
+{{1923258554833470923ull, 3209376084055860075ull,
+ 7365357128655899235ull, 2336350111975436726ull}},
+{{16239131248824002365ull, 17846778160351988805ull,
+ 18430068447674649851ull, 2920437639969295907ull}},
+{{6463856005747839244ull, 17696786682012598103ull,
+ 18425899541165924410ull, 3650547049961619884ull}},
+{{3468133988757411151ull, 12897611315660971821ull,
+ 4585630352747853897ull, 4563183812452024856ull}},
+{{4473426752187075922ull, 1143478044647025532ull,
+ 2866018970467408686ull, 2851989882782515535ull}},
+{{5591783440233844902ull, 10652719592663557723ull,
+ 17417581768366424569ull, 3564987353478144418ull}},
+{{2378043281864918223ull, 17927585509256835058ull,
+ 12548605173603254903ull, 4456234191847680523ull}},
+{{6097963069592961794ull, 18122269970926603767ull,
+ 5537035224288340362ull, 2785146369904800327ull}},
+{{3010767818563814338ull, 13429465426803478901ull,
+ 2309608011933037549ull, 3481432962381000409ull}},
+{{8375145791632155827ull, 2951773728222184914ull,
+ 7498696033343684841ull, 4351791202976250511ull}},
+{{9846152138197485296ull, 13374073626207335331ull,
+ 11604214048480884881ull, 2719869501860156569ull}},
+{{7696004154319468716ull, 2882533977477005452ull, 670209505318942390ull,
+ 3399836877325195712ull}},
+{{9620005192899335894ull, 12826539508701032623ull,
+ 837761881648677987ull, 4249796096656494640ull}},
+{{12930032273203166790ull, 5710744183724451437ull,
+ 523601176030423742ull, 2656122560410309150ull}},
+{{2327482286221794776ull, 16361802266510340105ull,
+ 9877873506892805485ull, 3320153200512886437ull}},
+{{7521038876204631373ull, 6617194777855761419ull,
+ 16959027902043394761ull, 4150191500641108046ull}},
+{{2394806288414200657ull, 15664961782228320647ull,
+ 5987706420349733821ull, 2593869687900692529ull}},
+{{16828565915799914533ull, 5746144172503237096ull,
+ 12096319043864555181ull, 3242337109875865661ull}},
+{{2588963321040341550ull, 11794366234056434275ull,
+ 1285340749548530264ull, 4052921387344832077ull}},
+{{17759003140146071133ull, 7371478896285271421ull,
+ 3109180977681525367ull, 2533075867090520048ull}},
+{{8363695869900425204ull, 4602662601929201373ull,
+ 3886476222101906709ull, 3166344833863150060ull}},
+{{15066305855802919409ull, 10365014270838889620ull,
+ 4858095277627383386ull, 3957931042328937575ull}},
+{{193069123022048823ull, 11089819937701693917ull,
+ 9953838576158196472ull, 2473706901455585984ull}},
+{{4853022422204948932ull, 13862274922127117396ull,
+ 12442298220197745590ull, 3092133626819482480ull}},
+{{6066278027756186165ull, 8104471615804120937ull,
+ 15552872775247181988ull, 3865167033524353100ull}},
+{{15320638813416086113ull, 14288666796732351393ull,
+ 497173447674712934ull, 2415729395952720688ull}},
+{{5315740461487943929ull, 8637461459060663434ull, 621466809593391168ull,
+ 3019661744940900860ull}},
+{{15868047613714705720ull, 10796826823825829292ull,
+ 776833511991738960ull, 3774577181176126075ull}},
+{{694157721716915267ull, 6748016764891143308ull,
+ 16626422009490694514ull, 2359110738235078796ull}},
+{{867697152146144084ull, 17658392992968704943ull,
+ 2336283438153816526ull, 2948888422793848496ull}},
+{{14919679495464843816ull, 12849619204356105370ull,
+ 2920354297692270658ull, 3686110528492310620ull}},
+{{9426227332476278962ull, 6838651968590355905ull,
+ 3650442872115338323ull, 4607638160615388275ull}},
+{{17420607128866144112ull, 1968314471155278488ull,
+ 18422427859567944116ull, 2879773850384617671ull}},
+{{3329014837373128523ull, 2460393088944098111ull,
+ 18416348806032542241ull, 3599717312980772089ull}},
+{{17996326601998574366ull, 7687177379607510542ull,
+ 9185377952258514089ull, 4499646641225965112ull}},
+{{6636018107821721075ull, 16333700908323163849ull,
+ 5740861220161571305ull, 2812279150766228195ull}},
+{{12906708653204539248ull, 6582068080121791099ull,
+ 2564390506774576228ull, 3515348938457785244ull}},
+{{11521699798078286156ull, 8227585100152238874ull,
+ 3205488133468220285ull, 4394186173072231555ull}},
+{{11812748392226316751ull, 7448083696808843248ull,
+ 18144331147913495342ull, 2746366358170144721ull}},
+{{14765935490282895939ull, 86732584156278252ull, 8845355879609705466ull,
+ 3432957947712680902ull}},
+{{10675289144068308ull, 9331787767050123624ull, 1833322812657356024ull,
+ 4291197434640851128ull}},
+{{6672055715042693ull, 5832367354406327265ull, 1145826757910847515ull,
+ 2681998396650531955ull}},
+{{4620026088071191270ull, 2678773174580521177ull,
+ 15267341502670723106ull, 3352497995813164943ull}},
+{{10386718628516376991ull, 12571838505080427279ull,
+ 14472490859911015978ull, 4190622494766456179ull}},
+{{13409228170463817475ull, 12469085084102654953ull,
+ 6739463778230691034ull, 2619139059229035112ull}},
+{{2926477157797608132ull, 6362984318273542884ull,
+ 8424329722788363793ull, 3273923824036293890ull}},
+{{3658096447247010165ull, 12565416416269316509ull,
+ 1307040116630678933ull, 4092404780045367363ull}},
+{{4592153288743075305ull, 10159228269382016770ull,
+ 16957801137390031997ull, 2557752987528354601ull}},
+{{14963563647783619940ull, 17310721355154908866ull,
+ 7362193366455376284ull, 3197191234410443252ull}},
+{{9481082522874749116ull, 3191657620234084467ull,
+ 9202741708069220356ull, 3996489043013054065ull}},
+{{3619833567583024246ull, 11218158049501078600ull,
+ 17280928613611732482ull, 2497805651883158790ull}},
+{{4524791959478780307ull, 4799325525021572442ull,
+ 12377788730159889795ull, 3122257064853948488ull}},
+{{14879361986203251192ull, 1387470887849577648ull,
+ 15472235912699862244ull, 3902821331067435610ull}},
+{{9299601241377031995ull, 10090541341760761838ull,
+ 14281833463864801806ull, 2439263331917147256ull}},
+{{2401129514866514186ull, 3389804640346176490ull,
+ 17852291829831002258ull, 3049079164896434070ull}},
+{{12224783930437918540ull, 13460627837287496420ull,
+ 13091992750433977014ull, 3811348956120542588ull}},
+{{16863861993378474896ull, 3801206379877297358ull,
+ 17405867505876011442ull, 2382093097575339117ull}},
+{{11856455454868317812ull, 13974880011701397506ull,
+ 7922276327062850590ull, 2977616371969173897ull}},
+{{5597197281730621456ull, 8245227977771971075ull,
+ 14514531427255951142ull, 3722020464961467371ull}},
+{{1192405291867944458ull, 541581467680094018ull, 6765739132821275512ull,
+ 2326262790600917107ull}},
+{{10713878651689706381ull, 676976834600117522ull,
+ 3845487897599206486ull, 2907828488251146384ull}},
+{{4168976277757357168ull, 10069593080104922711ull,
+ 4806859871999008107ull, 3634785610313932980ull}},
+{{599534328769308556ull, 7975305331703765485ull, 6008574839998760134ull,
+ 4543482012892416225ull}},
+{{2680551964694511800ull, 372879813887465524ull,
+ 15284574321067694844ull, 2839676258057760140ull}},
+{{3350689955868139749ull, 466099767359331905ull, 658973827625066939ull,
+ 3549595322572200176ull}},
+{{8800048463262562591ull, 14417682764481328593ull,
+ 823717284531333673ull, 4436994153215250220ull}},
+{{17029245335607571379ull, 2093522700159748514ull,
+ 9738195339686859354ull, 2773121345759531387ull}},
+{{12063184632654688416ull, 11840275412054461451ull,
+ 7561058156181186288ull, 3466401682199414234ull}},
+{{10467294772390972616ull, 14800344265068076814ull,
+ 227950658371707052ull, 4333002102749267793ull}},
+{{1930373214316969981ull, 26843128812772201ull, 11671684207550786668ull,
+ 2708126314218292370ull}},
+{{7024652536323600380ull, 33553911015965251ull, 5366233222583707527ull,
+ 3385157892772865463ull}},
+{{4169129651977112571ull, 13877000444052120276ull,
+ 2096105509802246504ull, 4231447365966081829ull}},
+{{11829078069340471165ull, 8673125277532575172ull,
+ 3615908952840098017ull, 2644654603728801143ull}},
+{{14786347586675588956ull, 15453092615343106869ull,
+ 18354944246332286233ull, 3305818254661001428ull}},
+{{4647876428062322483ull, 5481307713896719875ull,
+ 4496936234205806176ull, 4132272818326251786ull}},
+{{599079758325257600ull, 3425817321185449922ull, 7422271164806016764ull,
+ 2582670511453907366ull}},
+{{9972221734761347808ull, 4282271651481812402ull, 54466919152745147ull,
+ 3228338139317384208ull}},
+{{3241905131596908952ull, 741153545924877599ull, 68083648940931434ull,
+ 4035422674146730260ull}},
+{{8943719734889149951ull, 5074906984630436403ull,
+ 9265924317442857954ull, 2522139171341706412ull}},
+{{6567963650184049535ull, 15567005767642821312ull,
+ 11582405396803572442ull, 3152673964177133015ull}},
+{{8209954562730061919ull, 10235385172698750832ull,
+ 9866320727577077649ull, 3940842455221416269ull}},
+{{5131221601706288699ull, 17926330779005189030ull,
+ 8472293463949367482ull, 2463026534513385168ull}},
+{{15637399038987636682ull, 13184541436901710479ull,
+ 10590366829936709353ull, 3078783168141731460ull}},
+{{14935062780307157948ull, 2645618740844974387ull,
+ 13237958537420886692ull, 3848478960177164325ull}},
+{{7028571228478279766ull, 10876883749882884800ull,
+ 10579567095101748134ull, 2405299350110727703ull}},
+{{8785714035597849707ull, 4372732650498830192ull,
+ 8612772850449797264ull, 3006624187638409629ull}},
+{{10982142544497312134ull, 5465915813123537740ull,
+ 15377652081489634484ull, 3758280234548012036ull}},
+{{16087211127165595892ull, 12639569420056986895ull,
+ 387660514076245744ull, 2348925146592507523ull}},
+{{15497327890529606961ull, 15799461775071233619ull,
+ 14319633697877470892ull, 2936156433240634403ull}},
+{{14759973844734620797ull, 1302583145129490408ull,
+ 13287856103919450712ull, 3670195541550793004ull}},
+{{3223232208724380ull, 1628228931411863011ull, 16609820129899313390ull,
+ 4587744426938491255ull}},
+{{16142915584626310402ull, 14852701137414578093ull,
+ 17298666608828152724ull, 2867340266836557034ull}},
+{{6343586425500724290ull, 119132348058671001ull,
+ 12399961224180415098ull, 3584175333545696293ull}},
+{{12541169050303293266ull, 9372287471928114559ull,
+ 1664893474943355160ull, 4480219166932120367ull}},
+{{14755759684080640148ull, 5857679669955071599ull,
+ 7958087449480678831ull, 2800136979332575229ull}},
+{{13833013586673412280ull, 2710413569016451595ull,
+ 14559295330278236443ull, 3500171224165719036ull}},
+{{12679580964914377446ull, 17223075016552728206ull,
+ 18199119162847795553ull, 4375214030207148795ull}},
+{{3313052084644098000ull, 3846892857704373273ull,
+ 9068606467566178269ull, 2734508768879467997ull}},
+{{8753001124232510404ull, 9420302090557854495ull,
+ 15947444102885110740ull, 3418135961099334996ull}},
+{{6329565386863250101ull, 11775377613197318119ull,
+ 1487561054896836809ull, 4272669951374168746ull}},
+{{10873507394430613169ull, 442081980607241968ull,
+ 5541411677737910910ull, 2670418719608855466ull}},
+{{13591884243038266462ull, 9775974512613828268ull,
+ 16150136634027164445ull, 3338023399511069332ull}},
+{{16989855303797833077ull, 16831654159194673239ull,
+ 1740926718824403940ull, 4172529249388836666ull}},
+{{17536188592514727529ull, 1296411812641894966ull,
+ 5699765217692640367ull, 2607830780868022916ull}},
+{{12696863703788633603ull, 15455572821084532420ull,
+ 7124706522115800458ull, 3259788476085028645ull}},
+{{15871079629735792004ull, 10096093989500889717ull,
+ 13517569171072138477ull, 4074735595106285806ull}},
+{{12225267777798563955ull, 8615901752651750025ull,
+ 3836794713492698644ull, 2546709746941428629ull}},
+{{1446526666966041231ull, 10769877190814687532ull,
+ 9407679410293261209ull, 3183387183676785786ull}},
+{{1808158333707551539ull, 18074032506945747319ull,
+ 2536227226011800703ull, 3979233979595982233ull}},
+{{8047627986208301568ull, 18213799344482173930ull,
+ 13114357062325845199ull, 2487021237247488895ull}},
+{{836162945905601152ull, 18155563162175329509ull,
+ 11781260309479918595ull, 3108776546559361119ull}},
+{{5656889700809389344ull, 18082767934291773982ull,
+ 10114889368422510340ull, 3885970683199201399ull}},
+{{17370614118288032052ull, 2078357922077582930ull,
+ 13239334882905150819ull, 2428731676999500874ull}},
+{{12489895611005264257ull, 16433005457879142375ull,
+ 7325796566776662715ull, 3035914596249376093ull}},
+{{11000683495329192417ull, 15929570803921540065ull,
+ 13768931726898216298ull, 3794893245311720116ull}},
+{{18404642230649215021ull, 14567667770878350444ull,
+ 17828954366166160994ull, 2371808278319825072ull}},
+{{4559058714601967160ull, 8986212676743162248ull,
+ 3839448883998149627ull, 2964760347899781341ull}},
+{{5698823393252458950ull, 6621079827501564906ull,
+ 9410997123425074938ull, 3705950434874726676ull}},
+{{8173450639210174748ull, 8749860910615865970ull,
+ 15105245238995447644ull, 2316219021796704172ull}},
+{{993441262157942627ull, 10937326138269832463ull, 434812475034757939ull,
+ 2895273777245880216ull}},
+{{15076859632979591995ull, 9059971654409902674ull,
+ 543515593793447424ull, 3619092221557350270ull}},
+{{9622702504369714186ull, 11324964568012378343ull,
+ 9902766529096585088ull, 4523865276946687837ull}},
+{{12931718092872153222ull, 7078102855007736464ull,
+ 8495072089899059632ull, 2827415798091679898ull}},
+{{16164647616090191528ull, 8847628568759670580ull,
+ 1395468075519048732ull, 3534269747614599873ull}},
+{{1759065446403187794ull, 11059535710949588226ull,
+ 6356021112826198819ull, 4417837184518249841ull}},
+{{5711101922429380275ull, 4606366810129798689ull,
+ 15501728241584844022ull, 2761148240323906150ull}},
+{{11750563421464113248ull, 14981330549517024169ull,
+ 10153788265126279219ull, 3451435300404882688ull}},
+{{853146221547977848ull, 14114977168468892308ull,
+ 12692235331407849024ull, 4314294125506103360ull}},
+{{9756588425322261963ull, 8821860730293057692ull,
+ 7932647082129905640ull, 2696433828441314600ull}},
+{{12195735531652827454ull, 11027325912866322115ull,
+ 9915808852662382050ull, 3370542285551643250ull}},
+{{10632983396138646413ull, 4560785354228126836ull,
+ 3171389028973201755ull, 4213177856939554063ull}},
+{{15868986659441429816ull, 544647837178885320ull,
+ 8899647170749332953ull, 2633236160587221289ull}},
+{{1389489250592235654ull, 5292495814900994555ull,
+ 15736244981864054095ull, 3291545200734026611ull}},
+{{15571919618522458280ull, 2003933750198855289ull,
+ 15058620208902679715ull, 4114431500917533264ull}},
+{{2814920733935454569ull, 17393359658370142220ull,
+ 9411637630564174821ull, 2571519688073458290ull}},
+{{3518650917419318211ull, 7906641517680514063ull,
+ 2541175001350442719ull, 3214399610091822863ull}},
+{{18233371702056311476ull, 5271615878673254674ull,
+ 17011526806970217111ull, 4017999512614778578ull}},
+{{16007543332212582577ull, 10212288951811866027ull,
+ 15243890272783773598ull, 2511249695384236611ull}},
+{{15397743146838340317ull, 3541989152910056726ull,
+ 14443176822552329094ull, 3139062119230295764ull}},
+{{10023806896693149588ull, 13650858477992346716ull,
+ 18053971028190411367ull, 3923827649037869705ull}},
+{{15488251347287994300ull, 15449315576386298553ull,
+ 4366202864977925248ull, 2452392280648668566ull}},
+{{5525256128827829163ull, 864900396773321576ull,
+ 14681125618077182369ull, 3065490350810835707ull}},
+{{6906570161034786454ull, 5692811514394039874ull,
+ 13739721004169090057ull, 3831862938513544634ull}},
+{{8928292369074129438ull, 15087222242564744681ull,
+ 13199011646033069189ull, 2394914336570965396ull}},
+{{15772051479770049701ull, 5023969747923767139ull,
+ 16498764557541336487ull, 2993642920713706745ull}},
+{{15103378331285174223ull, 1668276166477321020ull,
+ 6788397641644506897ull, 3742053650892133432ull}},
+{{216239420198458081ull, 12571887650116795398ull,
+ 4242748526027816810ull, 2338783531807583395ull}},
+{{9493671312102848410ull, 6491487525791218439ull, 691749639107383109ull,
+ 2923479414759479244ull}},
+{{7255403121701172608ull, 12726045425666410953ull,
+ 864687048884228886ull, 3654349268449349055ull}},
+{{13680939920553853664ull, 6684184745228237883ull,
+ 14915916866387449820ull, 4567936585561686318ull}},
+{{6244744441132464588ull, 13400987502622424485ull,
+ 4710762023064768233ull, 2854960365976053949ull}},
+{{12417616569842968639ull, 2916176322995866894ull,
+ 10500138547258348196ull, 3568700457470067436ull}},
+{{6298648675448934990ull, 3645220403744833618ull,
+ 13125173184072935245ull, 4460875571837584295ull}},
+{{8548341440582972273ull, 4584105761554214963ull,
+ 15120762267686666384ull, 2788047232398490184ull}},
+{{6073740782301327437ull, 5730132201942768704ull, 454208760898781364ull,
+ 3485059040498112731ull}},
+{{7592175977876659297ull, 7162665252428460880ull,
+ 14402819006405640417ull, 4356323800622640913ull}},
+{{4745109986172912061ull, 16005880828836257810ull,
+ 2084232851362443404ull, 2722702375389150571ull}},
+{{15154759519570915884ull, 1560606962335770646ull,
+ 16440349119485217968ull, 3403377969236438213ull}},
+{{9720077362608869046ull, 1950758702919713308ull,
+ 6715378344074358748ull, 4254222461545547767ull}},
+{{15298420388485318962ull, 10442596226179596625ull,
+ 11114640492687556073ull, 2658889038465967354ull}},
+{{5287967430324484991ull, 17664931301151883686ull,
+ 4669928579004669283ull, 3323611298082459193ull}},
+{{15833331324760382046ull, 17469478108012466703ull,
+ 10449096742183224508ull, 4154514122603073991ull}},
+{{16813361105616320635ull, 1695051780653015881ull,
+ 13448214491505597174ull, 2596571326626921244ull}},
+{{7181643326738237082ull, 11342186762671045660ull,
+ 16810268114381996467ull, 3245714158283651555ull}},
+{{8977054158422796352ull, 9566047434911419171ull,
+ 16401149124550107680ull, 4057142697854564444ull}},
+{{3304815839800553768ull, 5978779646819636982ull,
+ 1027346165989041492ull, 2535714186159102778ull}},
+{{13354391836605468018ull, 7473474558524546227ull,
+ 10507554744341077673ull, 3169642732698878472ull}},
+{{12081303777329447118ull, 13953529216583070688ull,
+ 13134443430426347091ull, 3962053415873598090ull}},
+{{7550814860830904449ull, 6415112751150725228ull,
+ 12820713162443854836ull, 2476283384920998806ull}},
+{{9438518576038630561ull, 8018890938938406535ull,
+ 6802519416200042737ull, 3095354231151248508ull}},
+{{7186462201620900298ull, 14635299692100396073ull,
+ 8503149270250053421ull, 3869192788939060635ull}},
+{{16020753922081532446ull, 11452905316776441497ull,
+ 3008625284692589436ull, 2418245493086912897ull}},
+{{6190884347319751846ull, 14316131645970551872ull,
+ 8372467624293124699ull, 3022806866358641121ull}},
+{{7738605434149689807ull, 13283478539035801936ull,
+ 15077270548793793778ull, 3778508582948301401ull}},
+{{4836628396343556129ull, 12913860105324764114ull,
+ 2505765065355039255ull, 2361567864342688376ull}},
+{{15269157532284220970ull, 11530639113228567238ull,
+ 3132206331693799069ull, 2951959830428360470ull}},
+{{9863074878500500404ull, 578240836253545336ull,
+ 13138629951472024645ull, 3689949788035450587ull}},
+{{6164421799062812753ull, 2667243531872159787ull,
+ 5905800710456321451ull, 2306218617522156617ull}},
+{{3093841230401128037ull, 17169112470122363446ull,
+ 11993936906497789717ull, 2882773271902695771ull}},
+{{13090673574856185854ull, 7626332532370790595ull,
+ 10380735114694849243ull, 3603466589878369714ull}},
+{{11751655950142844413ull, 4921229647036100340ull,
+ 3752546856513785746ull, 4504333237347962143ull}},
+{{16568157005694053566ull, 7687454547824950616ull,
+ 9262870812962197947ull, 2815208273342476339ull}},
+{{2263452183408015342ull, 4997632166353800367ull,
+ 6966902497775359530ull, 3519010341678095424ull}},
+{{16664373284542182889ull, 15470412244797026266ull,
+ 8708628122219199412ull, 4398762927097619280ull}},
+{{15026919321266252210ull, 445635616143365608ull,
+ 5442892576386999633ull, 2749226829436012050ull}},
+{{336905077873263646ull, 5168730538606594915ull,
+ 16026987757338525349ull, 3436533536795015062ull}},
+{{14256189402623743270ull, 11072599191685631547ull,
+ 10810362659818380878ull, 4295666920993768828ull}},
+{{6604275367426145592ull, 2308688476376131813ull,
+ 15979848699241263857ull, 2684791825621105517ull}},
+{{12867030227710069894ull, 7497546613897552670ull,
+ 6139752818769416109ull, 3355989782026381897ull}},
+{{6860415747782811559ull, 13983619285799328742ull,
+ 12286377041889158040ull, 4194987227532977371ull}},
+{{18122817897646420936ull, 8739762053624580463ull,
+ 5373142641967029823ull, 2621867017208110857ull}},
+{{18041836353630638266ull, 6313016548603337675ull,
+ 11328114320886175183ull, 3277333771510138571ull}},
+{{17940609423610909929ull, 3279584667326784190ull,
+ 9548456882680331075ull, 4096667214387673214ull}},
+{{6601194871329430802ull, 18190641481575097783ull,
+ 1356099533247819017ull, 2560417008992295759ull}},
+{{3639807570734400598ull, 8903243796686708517ull,
+ 15530182471841937484ull, 3200521261240369698ull}},
+{{9161445481845388652ull, 11129054745858385646ull,
+ 10189356052947646047ull, 4000651576550462123ull}},
+{{1114217407725980003ull, 13873188243802572885ull,
+ 4062504523878584827ull, 2500407235344038827ull}},
+{{6004457778084862908ull, 12729799286325828202ull,
+ 466444636420843130ull, 3125509044180048534ull}},
+{{16728944259460854443ull, 6688877071052509444ull,
+ 9806427832380829721ull, 3906886305225060667ull}},
+{{1232218125308258219ull, 15709763215476288163ull,
+ 3823174386024324623ull, 2441803940765662917ull}},
+{{15375330711917486486ull, 15025518000917972299ull,
+ 9390654000957793683ull, 3052254925957078646ull}},
+{{14607477371469470203ull, 14170211482720077470ull,
+ 2514945464342466296ull, 3815318657446348308ull}},
+{{4517987338741030973ull, 8856382176700048419ull,
+ 10795212952068817243ull, 2384574160903967692ull}},
+{{1035798154998900812ull, 6458791702447672620ull,
+ 13494016190086021554ull, 2980717701129959615ull}},
+{{1294747693748626015ull, 17296861664914366583ull,
+ 12255834219180139038ull, 3725897126412449519ull}},
+{{7726746336233973116ull, 6198852522144091210ull,
+ 14577425414628668755ull, 2328685704007780949ull}},
+{{435060883437690586ull, 3136879634252726109ull, 4386723713003672232ull,
+ 2910857130009726187ull}},
+{{5155512122724501137ull, 3921099542815907636ull, 871718622827202386ull,
+ 3638571412512157734ull}},
+{{6444390153405626421ull, 14124746465374660353ull,
+ 10313020315388778790ull, 4548214265640197167ull}},
+{{15556958891946986273ull, 4216280522431774816ull,
+ 13363166724759068600ull, 2842633916025123229ull}},
+{{999454541224181226ull, 5270350653039718521ull, 2868900350666672038ull,
+ 3553292395031404037ull}},
+{{5861004194957614436ull, 15811310353154423959ull,
+ 8197811456760727951ull, 4441615493789255046ull}},
+{{10580656649489590879ull, 16799597998362596830ull,
+ 511946142048067065ull, 2776009683618284404ull}},
+{{4002448775007212790ull, 7164439442671082326ull, 639932677560083832ull,
+ 3470012104522855505ull}},
+{{14226433005613791795ull, 8955549303338852907ull,
+ 5411601865377492694ull, 4337515130653569381ull}},
+{{6585677619294925920ull, 985532296159395163ull, 5688094175074626886ull,
+ 2710946956658480863ull}},
+{{3620411005691269496ull, 10455287407054019762ull,
+ 2498431700415895703ull, 3388683695823101079ull}},
+{{13748885793968862678ull, 8457423240390136798ull,
+ 16958097680802033341ull, 4235854619778876348ull}},
+{{3981367602803151270ull, 7591732534457529451ull,
+ 1375439013646495030ull, 2647409137361797718ull}},
+{{365023485076551183ull, 266293631217136006ull, 10942670803912894596ull,
+ 3309261421702247147ull}},
+{{9679651393200464787ull, 332867039021420007ull, 9066652486463730341ull,
+ 4136576777127808934ull}},
+{{12967311148391372348ull, 2513884908602081456ull,
+ 1054971785612443559ull, 2585360485704880584ull}},
+{{16209138935489215435ull, 16977414191034765532ull,
+ 1318714732015554448ull, 3231700607131100730ull}},
+{{1814679595651967678ull, 2775023665083905300ull,
+ 10871765451874218869ull, 4039625758913875912ull}},
+{{10357546784137255607ull, 4040232799891134764ull,
+ 6794853407421386793ull, 2524766099321172445ull}},
+{{12946933480171569508ull, 9661977018291306359ull,
+ 13105252777704121395ull, 3155957624151465556ull}},
+{{11571980831787073981ull, 7465785254436745045ull,
+ 16381565972130151744ull, 3944947030189331945ull}},
+{{9538331029080615191ull, 4666115784022965653ull,
+ 3320949704940262984ull, 2465591893868332466ull}},
+{{16534599804778156892ull, 5832644730028707066ull,
+ 13374559168030104538ull, 3081989867335415582ull}},
+{{11444877719117920307ull, 16514177949390659641ull,
+ 7494826923182854864ull, 3852487334169269478ull}},
+{{235519546807618336ull, 10321361218369162276ull, 72580808561896386ull,
+ 2407804583855793424ull}},
+{{294399433509522920ull, 3678329486106677037ull, 90726010702370483ull,
+ 3009755729819741780ull}},
+{{4979685310314291554ull, 18432969912915510008ull,
+ 113407513377963103ull, 3762194662274677225ull}},
+{{3112303318946432221ull, 18438135223213275611ull,
+ 11600094741929696699ull, 2351371663921673265ull}},
+{{17725437203965203988ull, 18435983010589206609ull,
+ 665060372129957162ull, 2939214579902091582ull}},
+{{8321738449674341273ull, 13821606726381732454ull,
+ 10054697502017222261ull, 3674018224877614477ull}},
+{{1178801025238150784ull, 3441950352695001856ull,
+ 17180057895948915731ull, 4592522781097018096ull}},
+{{736750640773844240ull, 18292120034930233824ull,
+ 10737536184968072331ull, 2870326738185636310ull}},
+{{920938300967305300ull, 18253464025235404376ull,
+ 4198548194355314606ull, 3587908422732045388ull}},
+{{1151172876209131625ull, 13593457994689479662ull,
+ 5248185242944143258ull, 4484885528415056735ull}},
+{{14554541102912870978ull, 13107597265108312692ull,
+ 10197644804481171392ull, 2803053455259410459ull}},
+{{18193176378641088722ull, 16384496581385390865ull,
+ 8135369987174076336ull, 3503816819074263074ull}},
+{{8906412418019197190ull, 2033876653022186966ull, 945840447112819613ull,
+ 4379771023842828843ull}},
+{{954821742834610340ull, 3577015917352560806ull,
+ 16732051343941369922ull, 2737356889901768026ull}},
+{{10416899215398038733ull, 13694641933545476815ull,
+ 11691692143071936594ull, 3421696112377210033ull}},
+{{8409438000820160512ull, 7894930380077070211ull, 779557123557757031ull,
+ 4277120140471512542ull}},
+{{2950055741298906368ull, 11851860515189250738ull,
+ 14322281257505761856ull, 2673200087794695338ull}},
+{{12910941713478408768ull, 14814825643986563422ull,
+ 8679479535027426512ull, 3341500109743369173ull}},
+{{6915305104993235152ull, 71787981273652662ull, 15461035437211671045ull,
+ 4176875137179211466ull}},
+{{18157123745902935682ull, 2350710497509726865ull,
+ 14274833166684682307ull, 2610546960737007166ull}},
+{{8861346627096505891ull, 16773446177169322294ull,
+ 8620169421501077075ull, 3263183700921258958ull}},
+{{1853311247015856555ull, 16355121703034264964ull,
+ 1551839740021570536ull, 4078979626151573698ull}},
+{{10381691566239686155ull, 10221951064396415602ull,
+ 5581585855940869489ull, 2549362266344733561ull}},
+{{3753742420944831886ull, 17389124848922907407ull,
+ 11588668338353474765ull, 3186702832930916951ull}},
+{{80492007753651953ull, 7901348005871470547ull, 9874149404514455553ull,
+ 3983378541163646189ull}},
+{{16191208569341890135ull, 16467557549738138851ull,
+ 8477186387035228672ull, 2489611588227278868ull}},
+{{15627324693249974765ull, 2137702863463121948ull,
+ 10596482983794035841ull, 3112014485284098585ull}},
+{{1087411792852916840ull, 7283814597756290340ull,
+ 17857289748169932705ull, 3890018106605123231ull}},
+{{9903004407387848833ull, 16081599169666151222ull,
+ 18078335120247289796ull, 2431261316628202019ull}},
+{{3155383472380035233ull, 1655254888373137412ull,
+ 17986232881881724342ull, 3039076645785252524ull}},
+{{3944229340475044041ull, 11292440647321197573ull,
+ 4036047028642603811ull, 3798845807231565656ull}},
+{{4770986347010596478ull, 4751932395362054531ull,
+ 2522529392901627382ull, 2374278629519728535ull}},
+{{1352046915335857693ull, 15163287531057343972ull,
+ 16988219796409197939ull, 2967848286899660668ull}},
+{{1690058644169822117ull, 14342423395394292061ull,
+ 2788530671801945808ull, 3709810358624575836ull}},
+{{3362129661819832775ull, 8964014622121432538ull,
+ 10966203706730991938ull, 2318631474140359897ull}},
+{{13426034114129566777ull, 1981646240797014864ull,
+ 18319440651841127827ull, 2898289342675449871ull}},
+{{16782542642661958471ull, 16312115856278432292ull,
+ 18287614796374021879ull, 3622861678344312339ull}},
+{{2531434229617896472ull, 15778458801920652462ull,
+ 18247832477040139445ull, 4528577097930390424ull}},
+{{15417204448793349007ull, 12167379760414101740ull,
+ 11404895298150087153ull, 2830360686206494015ull}},
+{{824761487282134643ull, 1374166645235463464ull, 9644433104260221038ull,
+ 3537950857758117519ull}},
+{{1030951859102668304ull, 10941080343399105138ull,
+ 7443855361897888393ull, 4422438572197646899ull}},
+{{5256030930366555594ull, 18367390260692910471ull,
+ 2346566591972486293ull, 2764024107623529312ull}},
+{{1958352644530806588ull, 9124179770583974377ull,
+ 2933208239965607867ull, 3455030134529411640ull}},
+{{7059626824090896139ull, 6793538694802580067ull,
+ 3666510299957009834ull, 4318787668161764550ull}},
+{{2106423755843116135ull, 8857647702679000446ull,
+ 16126626992755294858ull, 2699242292601102843ull}},
+{{11856401731658670977ull, 1848687591493974749ull,
+ 15546597722516730669ull, 3374052865751378554ull}},
+{{985444109291175009ull, 6922545507794856341ull,
+ 10209875116291137528ull, 4217566082189223193ull}},
+{{2921745577520678333ull, 4326590942371785213ull,
+ 17910386993750430715ull, 2635978801368264495ull}},
+{{8263867990328235820ull, 796552659537343612ull,
+ 17776297723760650490ull, 3294973501710330619ull}},
+{{10329834987910294775ull, 10219062861276455323ull,
+ 17608686136273425208ull, 4118716877137913274ull}},
+{{4150303858230240282ull, 6386914288297784577ull,
+ 15617114853598278659ull, 2574198048211195796ull}},
+{{9799565841215188257ull, 3371956841944842817ull,
+ 1074649493288296708ull, 3217747560263994746ull}},
+{{16861143319946373225ull, 4214946052431053521ull,
+ 10566683903465146693ull, 4022184450329993432ull}},
+{{3620685547325401410ull, 4940184291983102403ull,
+ 6604177439665716683ull, 2513865281456245895ull}},
+{{18360914989438915474ull, 1563544346551490099ull,
+ 3643535781154757950ull, 3142331601820307369ull}},
+{{18339457718371256439ull, 11177802470044138432ull,
+ 9166105744870835341ull, 3927914502275384211ull}},
+{{11462161073982035274ull, 9291969552991280472ull,
+ 3422973081330578136ull, 2454946563922115132ull}},
+{{14327701342477544093ull, 11614961941239100590ull,
+ 4278716351663222670ull, 3068683204902643915ull}},
+{{8686254641242154308ull, 5295330389694099930ull, 736709421151640434ull,
+ 3835854006128304894ull}},
+{{10040595169203734347ull, 7921267511986200360ull,
+ 14295501443501938983ull, 2397408753830190558ull}},
+{{12550743961504667933ull, 5289898371555362546ull,
+ 8646004767522647921ull, 2996760942287738198ull}},
+{{6465057915026059108ull, 11224058982871591087ull,
+ 1584133922548534093ull, 3745951177859672748ull}},
+{{10958190224532368799ull, 9320879873508438381ull,
+ 10213455738447609616ull, 2341219486162295467ull}},
+{{18309423799092848902ull, 11651099841885547976ull,
+ 8155133654632124116ull, 2926524357702869334ull}},
+{{4440035675156509512ull, 14563874802356934971ull,
+ 970545031435379337ull, 3658155447128586668ull}},
+{{938358575518248986ull, 4369785447664005002ull, 1213181289294224172ull,
+ 4572694308910733335ull}},
+{{5198160128126293520ull, 11954487941644778934ull,
+ 7675767333449971963ull, 2857933943069208334ull}},
+{{15721072197012642708ull, 10331423908628585763ull,
+ 371337129957689146ull, 3572417428836510418ull}},
+{{15039654227838415481ull, 3690907848930956396ull,
+ 9687543449301887241ull, 4465521786045638022ull}},
+{{176411855544233868ull, 13836032451650317508ull,
+ 1443028637386291621ull, 2790951116278523764ull}},
+{{220514819430292335ull, 3459982509280733173ull, 1803785796732864527ull,
+ 3488688895348154705ull}},
+{{4887329542715253322ull, 18160036191883080178ull,
+ 6866418264343468562ull, 4360861119185193381ull}},
+{{7666266982624421231ull, 15961708638354313015ull,
+ 6597354424428361803ull, 2725538199490745863ull}},
+{{4971147709853138634ull, 15340449779515503365ull,
+ 3635007012108064350ull, 3406922749363432329ull}},
+{{10825620655743811197ull, 9952190187539603398ull,
+ 9155444783562468342ull, 4258653436704290411ull}},
+{{2154326891412494094ull, 1608432848784864220ull,
+ 3416309980512848762ull, 2661658397940181507ull}},
+{{2692908614265617617ull, 11233913097835856083ull,
+ 18105445530923224664ull, 3327072997425226883ull}},
+{{17201193823114185734ull, 14042391372294820103ull,
+ 18020120895226642926ull, 4158841246781533604ull}},
+{{17668275167087447940ull, 4164808589256874660ull,
+ 2039203522661876021ull, 2599275779238458503ull}},
+{{3638599885149758309ull, 9817696754998481230ull,
+ 16384062458609508738ull, 3249094724048073128ull}},
+{{13771621893291973694ull, 3048748906893325729ull,
+ 2033333999552334307ull, 4061368405060091411ull}},
+{{1689734655666401703ull, 18046369131304186245ull,
+ 17411734814216066605ull, 2538355253162557131ull}},
+{{6723854338010390032ull, 8722903358848069094ull,
+ 17152982499342695353ull, 3172944066453196414ull}},
+{{17628189959367763348ull, 15515315216987474271ull,
+ 12217856087323593383ull, 3966180083066495518ull}},
+{{17935147752245933949ull, 16614601038258253275ull,
+ 3024474036149857960ull, 2478862551916559699ull}},
+{{17807248671880029532ull, 2321507224113264978ull,
+ 17615650600469486163ull, 3098578189895699623ull}},
+{{13035688802995261107ull, 16736942085423744935ull,
+ 17407877232159469799ull, 3873222737369624529ull}},
+{{15064834529513120048ull, 17378117831030922440ull,
+ 3962394242458586768ull, 2420764210856015331ull}},
+{{384299088181848444ull, 3275903215079101435ull, 341306784645845557ull,
+ 3025955263570019164ull}},
+{{14315431915509474267ull, 8706565037276264697ull,
+ 426633480807306946ull, 3782444079462523955ull}},
+{{2029615919552339561ull, 10053289166725053340ull,
+ 16407546990000424505ull, 2364027549664077471ull}},
+{{2537019899440424451ull, 17178297476833704579ull,
+ 15897747719073142727ull, 2955034437080096839ull}},
+{{17006332929582694275ull, 16861185827614742819ull,
+ 15260498630414040505ull, 3693793046350121049ull}},
+{{8323115071775489970ull, 3620712114618132406ull,
+ 2620282616367693460ull, 2308620653968825656ull}},
+{{1180521802864586655ull, 4525890143272665508ull,
+ 3275353270459616825ull, 2885775817461032070ull}},
+{{1475652253580733318ull, 10269048697518219789ull,
+ 13317563624929296839ull, 3607219771826290087ull}},
+{{6456251335403304552ull, 8224624853470386832ull,
+ 12035268512734233145ull, 4509024714782862609ull}},
+{{4035157084627065345ull, 16669605579487461530ull,
+ 604513792817813859ull, 2818140446739289131ull}},
+{{14267318392638607489ull, 16225320955931939008ull,
+ 14590700296304431036ull, 3522675558424111413ull}},
+{{17834147990798259361ull, 1834907121205372144ull,
+ 4403317315098375084ull, 4403344448030139267ull}},
+{{11146342494248912101ull, 10370188987608133398ull,
+ 446230312722790475ull, 2752090280018837042ull}},
+{{4709556080956364318ull, 8351050216082778844ull,
+ 9781159927758263902ull, 3440112850023546302ull}},
+{{5886945101195455398ull, 1215440733248697747ull,
+ 3003077872843054070ull, 4300141062529432878ull}},
+{{1373497679033465672ull, 14594708513562599804ull,
+ 15711981725809072505ull, 2687588164080895548ull}},
+{{1716872098791832089ull, 4408327586671086043ull,
+ 1193233083551789016ull, 3359485205101119436ull}},
+{{15981148178771953824ull, 5510409483338857553ull,
+ 1491541354439736270ull, 4199356506376399295ull}},
+{{3070688584091389284ull, 17279063982368949683ull,
+ 7849742374165917024ull, 2624597816485249559ull}},
+{{17673418785396400317ull, 3152085904251635487ull,
+ 5200491949280008377ull, 3280747270606561949ull}},
+{{17480087463318112492ull, 8551793398741932263ull,
+ 11112300955027398375ull, 4100934088258202436ull}},
+{{17842583692214902164ull, 12262399901854789520ull,
+ 16168560133746899792ull, 2563083805161376522ull}},
+{{3856485541559076088ull, 15327999877318486901ull,
+ 10987328130328848932ull, 3203854756451720653ull}},
+{{9432292945376233014ull, 713255772938557010ull,
+ 18345846181338449070ull, 4004818445564650816ull}},
+{{10506869109287533538ull, 14280842913368761843ull,
+ 11466153863336530668ull, 2503011528477906760ull}},
+{{8521900368182029019ull, 17851053641710952304ull,
+ 14332692329170663335ull, 3128764410597383450ull}},
+{{10652375460227536273ull, 17702131033711302476ull,
+ 8692493374608553361ull, 3910955513246729313ull}},
+{{15881106699496985979ull, 4146302868428482191ull,
+ 16962023405198815611ull, 2444347195779205820ull}},
+{{15239697355943844570ull, 571192567108214835ull,
+ 2755785182788967898ull, 3055433994724007276ull}},
+{{14437935676502417808ull, 9937362745740044352ull,
+ 3444731478486209872ull, 3819292493405009095ull}},
+{{9023709797814011130ull, 6210851716087527720ull,
+ 9070486201694963026ull, 2387057808378130684ull}},
+{{11279637247267513912ull, 16986936681964185458ull,
+ 11338107752118703782ull, 2983822260472663355ull}},
+{{4876174522229616582ull, 12010298815600456015ull,
+ 9560948671720991824ull, 3729777825590829194ull}},
+{{9965138104034592220ull, 7506436759750285009ull,
+ 10587278938253007794ull, 2331111140994268246ull}},
+{{17068108648470628179ull, 159673912833080453ull,
+ 4010726635961483935ull, 2913888926242835308ull}},
+{{7500077755306121512ull, 14034650446323514279ull,
+ 5013408294951854918ull, 3642361157803544135ull}},
+{{4763411175705263986ull, 8319941021049617041ull,
+ 1655074350262430744ull, 4552951447254430169ull}},
+{{14506347030884259751ull, 5199963138156010650ull,
+ 12563636514982488975ull, 2845594654534018855ull}},
+{{8909561751750548881ull, 1888267904267625409ull,
+ 11092859625300723315ull, 3556993318167523569ull}},
+{{15748638208115574005ull, 16195392935616695473ull,
+ 31016476343740431ull, 4446241647709404462ull}},
+{{2925369852431151897ull, 17039649612401516527ull,
+ 13854443352997001481ull, 2778901029818377788ull}},
+{{17491770370821103584ull, 7464503960219731946ull,
+ 17318054191246251852ull, 3473626287272972235ull}},
+{{12641340926671603671ull, 9330629950274664933ull,
+ 17035881720630426911ull, 4342032859091215294ull}},
+{{10206681088383446247ull, 12749172746562747439ull,
+ 6035740056966628915ull, 2713770536932009559ull}},
+{{8146665342051919904ull, 11324779914776046395ull,
+ 2932989052780898240ull, 3392213171165011949ull}},
+{{5571645659137511976ull, 14155974893470057994ull,
+ 8277922334403510704ull, 4240266463956264936ull}},
+{{8093964555388332889ull, 8847484308418786246ull,
+ 5173701459002194190ull, 2650166539972665585ull}},
+{{894083657380640304ull, 1835983348668707000ull,
+ 11078812842180130642ull, 3312708174965831981ull}},
+{{1117604571725800379ull, 11518351222690659558ull, 13457997442999590ull,
+ 4140885218707289977ull}},
+{{14533560912610788949ull, 2587283495754274319ull,
+ 11537626294470344504ull, 2588053261692056235ull}},
+{{13555265122336098282ull, 3234104369692842899ull,
+ 9810346849660542726ull, 3235066577115070294ull}},
+{{12332395384492734949ull, 13266002498970829432ull,
+ 3039561525220902599ull, 4043833221393837868ull}},
+{{7707747115307959343ull, 15208780589497850251ull,
+ 11123097990117839932ull, 2527395763371148667ull}},
+{{5022997875707561275ull, 564231663162761198ull, 9292186469219912012ull,
+ 3159244704213935834ull}},
+{{15502119381489227402ull, 705289578953451497ull,
+ 2391861049670114207ull, 3949055880267419793ull}},
+{{2771295585789685270ull, 7358335014486989042ull,
+ 13024128202112291139ull, 2468159925167137370ull}},
+{{12687491519091882396ull, 4586232749681348398ull,
+ 7056788215785588116ull, 3085199906458921713ull}},
+{{6635992362010077186ull, 5732790937101685498ull,
+ 13432671288159373049ull, 3856499883073652141ull}},
+{{8759181244683686146ull, 15112209381757023196ull,
+ 10701262564313302107ull, 2410312426921032588ull}},
+{{10948976555854607682ull, 14278575708768891091ull,
+ 13376578205391627634ull, 3012890533651290735ull}},
+{{9074534676390871698ull, 8624847599106338056ull,
+ 12109036738312146639ull, 3766113167064113419ull}},
+{{5671584172744294812ull, 12308058777082543141ull,
+ 5262304952231397697ull, 2353820729415070887ull}},
+{{11701166234357756418ull, 1550015416071015214ull,
+ 1966195171861859218ull, 2942275911768838609ull}},
+{{5403085756092419715ull, 11160891306943544826ull,
+ 7069429983254711926ull, 3677844889711048261ull}},
+{{15977229231970300451ull, 4727742096824655224ull,
+ 13448473497495777812ull, 4597306112138810326ull}},
+{{9985768269981437782ull, 12178210847370185323ull,
+ 3793609917507473228ull, 2873316320086756454ull}},
+{{7870524319049409324ull, 15222763559212731654ull,
+ 13965384433739117343ull, 3591645400108445567ull}},
+{{614783361956985847ull, 14416768430588526664ull,
+ 12845044523746508775ull, 4489556750135556959ull}},
+{{384239601223116154ull, 15928009296758911021ull,
+ 14945681854982649840ull, 2805972968834723099ull}},
+{{5091985519956283097ull, 1463267547239087160ull,
+ 14070416300300924397ull, 3507466211043403874ull}},
+{{6364981899945353871ull, 6440770452476246854ull,
+ 8364648338521379688ull, 4384332763804254843ull}},
+{{17813171742748009882ull, 4025481532797654283ull,
+ 2922062202362168353ull, 2740207977377659277ull}},
+{{17654778660007624448ull, 9643537934424455758ull,
+ 8264263771380098345ull, 3425259971722074096ull}},
+{{12845101288154754752ull, 16666108436457957602ull,
+ 10330329714225122931ull, 4281574964652592620ull}},
+{{12639874323524109624ull, 8110474763572529549ull,
+ 15679828108245477640ull, 2675984352907870387ull}},
+{{1964784849122973318ull, 10138093454465661937ull,
+ 14988099116879459146ull, 3344980441134837984ull}},
+{{7067667079831104551ull, 3449244781227301613ull, 288379822389772317ull,
+ 4181225551418547481ull}},
+{{6723134934108134297ull, 4461620997480757460ull,
+ 11709452435062077458ull, 2613265969636592175ull}},
+{{8403918667635167871ull, 14800398283705722633ull,
+ 10025129525400208918ull, 3266582462045740219ull}},
+{{15116584352971347742ull, 9277125817777377483ull,
+ 7919725888322873244ull, 4083228077557175274ull}},
+{{7142022211393398387ull, 15021575672965636735ull,
+ 9561514698629183681ull, 2552017548473234546ull}},
+{{4315841745814360080ull, 4941911535924882207ull,
+ 2728521336431703794ull, 3190021935591543183ull}},
+{{783116163840562195ull, 15400761456760878567ull,
+ 17245709725821793454ull, 3987527419489428978ull}},
+{{7406976630041433228ull, 5013789892048161200ull,
+ 15390254597066008813ull, 2492204637180893111ull}},
+{{9258720787551791535ull, 10878923383487589404ull,
+ 14626132227905123112ull, 3115255796476116389ull}},
+{{11573400984439739419ull, 13598654229359486755ull,
+ 4447607229599240178ull, 3894069745595145487ull}},
+{{4927532606061143185ull, 13110844911777067126ull,
+ 9697283546140606967ull, 2433793590996965929ull}},
+{{15382787794431204789ull, 11776870121293946003ull,
+ 16733290451103146613ull, 3042241988746207411ull}},
+{{14616798724611618082ull, 886029596335268792ull,
+ 16304927045451545363ull, 3802802485932759264ull}},
+{{9135499202882261302ull, 16694669562205400659ull,
+ 10190579403407215851ull, 2376751553707974540ull}},
+{{6807687985175438723ull, 16256650934329362920ull,
+ 12738224254259019814ull, 2970939442134968175ull}},
+{{8509609981469298404ull, 11097441631056927842ull,
+ 11311094299396386864ull, 3713674302668710219ull}},
+{{9930192256845699406ull, 6935901019410579901ull,
+ 4763590927909047838ull, 2321046439167943887ull}},
+{{17024426339484512162ull, 17893248311118000684ull,
+ 1342802641458921893ull, 2901308048959929859ull}},
+{{2833788850646088586ull, 8531502333615337144ull,
+ 15513561357105816079ull, 3626635061199912323ull}},
+{{3542236063307610733ull, 6052691898591783526ull,
+ 14780265677954882195ull, 4533293826499890404ull}},
+{{16048955594849420420ull, 1477089427406170751ull, 14294011867025564ull,
+ 2833308641562431503ull}},
+{{15449508475134387621ull, 1846361784257713439ull,
+ 13852925570115945667ull, 3541635801953039378ull}},
+{{14700199575490596622ull, 16143010285604305511ull,
+ 8092784925790156275ull, 4427044752441299223ull}},
+{{16105153762322704745ull, 7783538419288996992ull,
+ 11975519606259929528ull, 2766902970275812014ull}},
+{{1684698129193829315ull, 9729423024111246241ull,
+ 5746027470970136102ull, 3458628712844765018ull}},
+{{6717558679919674548ull, 2938406743284281993ull,
+ 16405906375567445936ull, 4323285891055956272ull}},
+{{15727689221018266353ull, 1836504214552676245ull,
+ 10253691484729653710ull, 2702053681909972670ull}},
+{{5824553470990669229ull, 11519002305045621115ull,
+ 3593742319057291329ull, 3377567102387465838ull}},
+{{2669005820310948632ull, 563694826024862682ull,
+ 13715549935676389970ull, 4221958877984332297ull}},
+{{6279814656121730799ull, 4963995284692927080ull,
+ 1654689682156661875ull, 2638724298740207686ull}},
+{{7849768320152163499ull, 1593308087438770946ull,
+ 11291734139550603152ull, 3298405373425259607ull}},
+{{588838363335428565ull, 1991635109298463683ull, 9502981656010866036ull,
+ 4123006716781574509ull}},
+{{16508925041580500517ull, 10468143980166315609ull,
+ 8245206544220485224ull, 2576879197988484068ull}},
+{{6801098246693461935ull, 13085179975207894512ull,
+ 10306508180275606530ull, 3221098997485605085ull}},
+{{8501372808366827418ull, 7133102932155092332ull,
+ 17494821243771896067ull, 4026373746857006356ull}},
+{{14536730042084042945ull, 2152346323383238755ull,
+ 1710891240502659234ull, 2516483591785628973ull}},
+{{13559226534177665777ull, 11913804941083824252ull,
+ 6750300069055711946ull, 3145604489732036216ull}},
+{{16949033167722082221ull, 5668884139500004507ull,
+ 8437875086319639933ull, 3932005612165045270ull}},
+{{8287302720612607436ull, 5848895596401196769ull, 661985910522387054ull,
+ 2457503507603153294ull}},
+{{14970814419193147199ull, 16534491532356271769ull,
+ 10050854425007759625ull, 3071879384503941617ull}},
+{{4878459968709270287ull, 6833056360163176000ull,
+ 17175254049687087436ull, 3839849230629927021ull}},
+{{3049037480443293929ull, 13494032261956760808ull,
+ 13040376790268123599ull, 2399905769143704388ull}},
+{{3811296850554117411ull, 12255854309018563106ull,
+ 16300470987835154499ull, 2999882211429630485ull}},
+{{13987493100047422572ull, 10708131867845815978ull,
+ 6540530679511779412ull, 3749852764287038107ull}},
+{{13353869205957027012ull, 15915954454258410794ull,
+ 1781988665481168180ull, 2343657977679398817ull}},
+{{7468964470591507957ull, 1448198994113461877ull,
+ 6839171850278848130ull, 2929572472099248521ull}},
+{{13947891606666772850ull, 11033620779496603154ull,
+ 13160650831275948066ull, 3661965590124060651ull}},
+{{8211492471478690254ull, 4568653937515978135ull,
+ 11839127520667547179ull, 4577456987655075814ull}},
+{{12049711822315263265ull, 549565701733792382ull,
+ 2787768681989829083ull, 2860910617284422384ull}},
+{{5838767741039303273ull, 14522015182449404190ull,
+ 3484710852487286353ull, 3576138271605527980ull}},
+{{16521831713153904899ull, 4317460922779591525ull,
+ 4355888565609107942ull, 4470172839506909975ull}},
+{{12631987829934884514ull, 16533471132019408415ull,
+ 9639959381146774319ull, 2793858024691818734ull}},
+{{11178298768991217739ull, 16055152896596872615ull,
+ 2826577189578692091ull, 3492322530864773418ull}},
+{{9361187442811634269ull, 15457255102318702865ull,
+ 12756593523828140922ull, 4365403163580966772ull}},
+{{17379957197825741178ull, 14272470457376577194ull,
+ 17196242989247363884ull, 2728376977238104232ull}},
+{{12501574460427400665ull, 17840588071720721493ull,
+ 3048559662849653239ull, 3410471221547630291ull}},
+{{1791910020252087119ull, 17689049071223513963ull,
+ 17645757633844230261ull, 4263089026934537863ull}},
+{{17260844827153412114ull, 13361498678728390178ull,
+ 17946127548793725769ull, 2664430641834086164ull}},
+{{12352683997086989334ull, 2866815293128324011ull,
+ 3985915362282605596ull, 3330538302292607706ull}},
+{{10829168977931348763ull, 3583519116410405014ull,
+ 14205766239708032803ull, 4163172877865759632ull}},
+{{2156544592779705073ull, 18380600512252360798ull,
+ 8878603899817520501ull, 2601983048666099770ull}},
+{{11919052777829407149ull, 9140692585033287285ull,
+ 1874882837917124819ull, 3252478810832624713ull}},
+{{1063757917004595224ull, 6814179712864221203ull,
+ 6955289565823793928ull, 4065598513540780891ull}},
+{{16805749762623729679ull, 4258862320540138251ull,
+ 2041212969426177253ull, 2540999070962988057ull}},
+{{16395501184852274195ull, 9935263919102560718ull,
+ 7163202230210109470ull, 3176248838703735071ull}},
+{{11271004444210566936ull, 3195707862023425090ull,
+ 4342316769335248934ull, 3970311048379668839ull}},
+{{11656063796058992239ull, 15832375469046804393ull,
+ 9631477008475612439ull, 2481444405237293024ull}},
+{{735021689791576587ull, 15178783317881117588ull,
+ 12039346260594515549ull, 3101805506546616280ull}},
+{{918777112239470733ull, 5138421092069233273ull,
+ 15049182825743144437ull, 3877256883183270350ull}},
+{{12103450741218138969ull, 5517356191756964747ull,
+ 4794053247662077369ull, 2423285551989543969ull}},
+{{10517627408095285807ull, 11508381258123593838ull,
+ 10604252578004984615ull, 3029106939986929961ull}},
+{{3923662223264331450ull, 9773790554227104394ull,
+ 17867001740933618673ull, 3786383674983662451ull}},
+{{7063974907967595060ull, 17637834142460410006ull,
+ 8861033078869817718ull, 2366489796864789032ull}},
+{{18053340671814269633ull, 12823920641220736699ull,
+ 11076291348587272148ull, 2958112246080986290ull}},
+{{17954989821340449138ull, 16029900801525920874ull,
+ 4621992148879314377ull, 3697640307601232863ull}},
+{{15833554656765168615ull, 3101158973312618690ull,
+ 9806274120690653342ull, 2311025192250770539ull}},
+{{10568571284101684961ull, 13099820753495549171ull,
+ 7646156632435928773ull, 2888781490313463174ull}},
+{{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull,
+ 3610976862891828968ull}},
+{{10748785108374647871ull, 17009705413516254652ull,
+ 417904692112668948ull, 4513721078614786210ull}},
+{{15941362729588930728ull, 1407693846592883349ull,
+ 4872876450997805997ull, 2821075674134241381ull}},
+{{6091645356703999697ull, 6371303326668492091ull,
+ 10702781582174645400ull, 3526344592667801726ull}},
+{{3002870677452611718ull, 7964129158335615114ull,
+ 4155104940863530942ull, 4407930740834752158ull}},
+{{6488480191835270228ull, 365894705532371542ull,
+ 16431998643321870551ull, 2754956713021720098ull}},
+{{17333972276648863593ull, 14292426437197628139ull,
+ 11316626267297562380ull, 3443695891277150123ull}},
+{{17055779327383691587ull, 17865533046497035174ull,
+ 9534096815694565071ull, 4304619864096437654ull}},
+{{6048176061187419338ull, 18083487181701728840ull,
+ 1347124491381715265ull, 2690387415060273534ull}},
+{{7560220076484274172ull, 8769300921844997338ull,
+ 10907277651081919890ull, 3362984268825341917ull}},
+{{226903058750566907ull, 1738254115451470865ull,
+ 18245783082279787767ull, 4203730336031677396ull}},
+{{11671029457787574077ull, 8003937849798251146ull,
+ 2180242389570091546ull, 2627331460019798373ull}},
+{{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull,
+ 3284164325024747966ull}},
+{{11318454500152002639ull, 5588623862668685560ull,
+ 18394608293592278729ull, 4105205406280934957ull}},
+{{7074034062595001650ull, 15022104960236398235ull,
+ 13802473192708868157ull, 2565753378925584348ull}},
+{{4230856559816364158ull, 4942573145013334082ull,
+ 17253091490886085197ull, 3207191723656980435ull}},
+{{14511942736625231005ull, 10789902449694055506ull,
+ 16954678345180218592ull, 4008989654571225544ull}},
+{{13681650228818157283ull, 6743689031058784691ull,
+ 10596673965737636620ull, 2505618534107015965ull}},
+{{12490376767595308699ull, 8429611288823480864ull,
+ 17857528475599433679ull, 3132023167633769956ull}},
+{{15612970959494135874ull, 5925328092601963176ull,
+ 3875166520789740483ull, 3915028959542212446ull}},
+{{9758106849683834921ull, 1397487048662533033ull,
+ 16257037130775751514ull, 2446893099713882778ull}},
+{{16809319580532181555ull, 10970230847682942099ull,
+ 11097924376614913584ull, 3058616374642353473ull}},
+{{16399963457237839040ull, 13712788559603677624ull,
+ 37347415486478268ull, 3823270468302941842ull}},
+{{10249977160773649400ull, 17793864886607074323ull,
+ 4635028153106436821ull, 2389544042689338651ull}},
+{{8200785432539673846ull, 8407273052976679192ull,
+ 1182099172955658123ull, 2986930053361673314ull}},
+{{10250981790674592308ull, 5897405297793461086ull,
+ 10700996003049348462ull, 3733662566702091642ull}},
+{{1795177600744232288ull, 17520936366403076891ull,
+ 11299808520333230692ull, 2333539104188807276ull}},
+{{16079030056212454072ull, 3454426384294294497ull,
+ 14124760650416538366ull, 2916923880236009095ull}},
+{{6263729514983403878ull, 13541405017222643930ull,
+ 13044264794593285053ull, 3646154850295011369ull}},
+{{17053033930584030656ull, 3091698216246141200ull,
+ 2470272937959442605ull, 4557693562868764212ull}},
+{{10658146206615019160ull, 4238154394367532202ull,
+ 10767292623079427436ull, 2848558476792977632ull}},
+{{4099310721413998142ull, 5297692992959415253ull,
+ 13459115778849284295ull, 3560698095991222040ull}},
+{{9735824420194885581ull, 2010430222771881162ull,
+ 16823894723561605369ull, 4450872619989027550ull}},
+{{10696576281049191393ull, 12785733935300895486ull,
+ 5903248183798615451ull, 2781795387493142219ull}},
+{{4147348314456713433ull, 11370481400698731454ull,
+ 2767374211320881410ull, 3477244234366427774ull}},
+{{14407557429925667599ull, 4989729714018638509ull,
+ 12682589801005877571ull, 4346555292958034717ull}},
+{{11310566402917236201ull, 812738062047955116ull,
+ 10232461634842367434ull, 2716597058098771698ull}},
+{{14138208003646545252ull, 10239294614414719703ull,
+ 3567205006698183484ull, 3395746322623464623ull}},
+{{13061073986130793660ull, 12799118268018399629ull,
+ 18294064313654893067ull, 4244682903279330778ull}},
+{{10469014250545439990ull, 5693605908297805816ull,
+ 16045476214461696071ull, 2652926814549581736ull}},
+{{13086267813181799987ull, 2505321366944869366ull,
+ 1610101194367568473ull, 3316158518186977171ull}},
+{{7134462729622474176ull, 7743337727108474612ull,
+ 15847684548241624303ull, 4145198147733721463ull}},
+{{13682411242868822168ull, 11757115107083878488ull,
+ 16822331870292097045ull, 2590748842333575914ull}},
+{{17103014053586027710ull, 861335828572684398ull,
+ 11804542801010345499ull, 3238436052916969893ull}},
+{{12155395530127758829ull, 14911727840998019210ull,
+ 920620445980768161ull, 4048045066146212367ull}},
+{{12208808224757237173ull, 2402300872982680150ull,
+ 7492916806379061957ull, 2530028166341382729ull}},
+{{6037638244091770658ull, 7614562109655738092ull,
+ 13977832026401215350ull, 3162535207926728411ull}},
+{{7547047805114713322ull, 294830600214896807ull,
+ 12860604014574131284ull, 3953169009908410514ull}},
+{{11634433905837777682ull, 9407641161989086312ull,
+ 12649563527536219956ull, 2470730631192756571ull}},
+{{14543042382297222103ull, 11759551452486357890ull,
+ 11200268390992887041ull, 3088413288990945714ull}},
+{{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull,
+ 3860516611238682143ull}},
+{{3291301328921775936ull, 5151924306131002686ull,
+ 9903131185070039977ull, 2412822882024176339ull}},
+{{13337498698006995728ull, 11051591401091141261ull,
+ 7767227962910162067ull, 3016028602530220424ull}},
+{{2836815317226580948ull, 9202803232936538673ull,
+ 9709034953637702584ull, 3770035753162775530ull}},
+{{13302224619335082852ull, 5751752020585336670ull,
+ 10679832864450952019ull, 2356272345726734706ull}},
+{{7404408737314077757ull, 2578004007304282934ull,
+ 4126419043708914216ull, 2945340432158418383ull}},
+{{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull,
+ 3681675540198022979ull}},
+{{40173605984776736ull, 13251503298267717893ull,
+ 14517980288043107294ull, 4602094425247528723ull}},
+{{2330951512954179412ull, 3670503542989935779ull,
+ 6767894670813248107ull, 2876309015779705452ull}},
+{{16748747446474887977ull, 18423187484019583435ull,
+ 8459868338516560133ull, 3595386269724631815ull}},
+{{16324248289666222067ull, 9193926299742315582ull,
+ 5963149404718312263ull, 4494232837155789769ull}},
+{{5590969162614000888ull, 12663732964980029095ull,
+ 15256183424017414924ull, 2808895523222368605ull}},
+{{2377025434840113206ull, 15829666206225036369ull,
+ 5235171224739604943ull, 3511119404027960757ull}},
+{{7582967811977529411ull, 15175396739353907557ull,
+ 11155650049351894083ull, 4388899255034950946ull}},
+{{7045197891699649834ull, 7178779952882498271ull,
+ 11583967299272321706ull, 2743062034396844341ull}},
+{{4194811346197174389ull, 18196846977957898647ull,
+ 644901068808238420ull, 3428827542996055427ull}},
+{{631828164319080082ull, 4299314648737821693ull,
+ 14641184391292461738ull, 4286034428745069283ull}},
+{{2700735611913119003ull, 7298757673888526462ull,
+ 6844897235344094634ull, 2678771517965668302ull}},
+{{12599291551746174562ull, 18346819129215433885ull,
+ 17779493581034894100ull, 3348464397457085377ull}},
+{{1914056384400554490ull, 4486779837809740741ull,
+ 8389308921011453914ull, 4185580496821356722ull}},
+{{3502128249464040509ull, 7415923417058475867ull,
+ 9855004094059546600ull, 2615987810513347951ull}},
+{{18212718367112214348ull, 9269904271323094833ull,
+ 7707069099147045346ull, 3269984763141684939ull}},
+{{8930839903608104222ull, 2364008302299092734ull,
+ 5022150355506418779ull, 4087480953927106174ull}},
+{{970088921327677235ull, 17618406253432790623ull,
+ 16973902027473675448ull, 2554675596204441358ull}},
+{{15047669206941760256ull, 3576263743081436662ull,
+ 11994005497487318503ull, 3193344495255551698ull}},
+{{9586214471822424512ull, 18305387734133959540ull,
+ 5769134835004372320ull, 3991680619069439623ull}},
+{{15214756081743791128ull, 11440867333833724712ull,
+ 10523238299518814556ull, 2494800386918399764ull}},
+{{571701028470187294ull, 14301084167292155891ull,
+ 13154047874398518195ull, 3118500483647999705ull}},
+{{14549684340869897829ull, 13264669190687806959ull,
+ 2607501787715984032ull, 3898125604559999632ull}},
+{{16011081740684767999ull, 8290418244179879349ull,
+ 1629688617322490020ull, 2436328502849999770ull}},
+{{6178794120573796287ull, 10363022805224849187ull,
+ 11260482808507888333ull, 3045410628562499712ull}},
+{{3111806632289857455ull, 17565464524958449388ull,
+ 14075603510634860416ull, 3806763285703124640ull}},
+{{11168251182035936718ull, 10978415328099030867ull,
+ 8797252194146787760ull, 2379227053564452900ull}},
+{{9348627959117532993ull, 13723019160123788584ull,
+ 10996565242683484700ull, 2974033816955566125ull}},
+{{11685784948896916241ull, 17153773950154735730ull,
+ 18357392571781743779ull, 3717542271194457656ull}},
+{{11915301611487960555ull, 8415265709633015879ull,
+ 11473370357363589862ull, 2323463919496536035ull}},
+{{10282440995932562789ull, 1295710100186494041ull,
+ 9730026928277099424ull, 2904329899370670044ull}},
+{{17464737263343091390ull, 1619637625233117551ull,
+ 12162533660346374280ull, 3630412374213337555ull}},
+{{17219235560751476334ull, 2024547031541396939ull,
+ 10591481057005579946ull, 4538015467766671944ull}},
+{{8456179216255978757ull, 5877027913140760991ull,
+ 6619675660628487466ull, 2836259667354169965ull}},
+{{5958538001892585542ull, 16569656928280727047ull,
+ 12886280594212997236ull, 3545324584192712456ull}},
+{{2836486483938344023ull, 2265327086641357193ull,
+ 16107850742766246546ull, 4431655730240890570ull}},
+{{13302019098529934775ull, 6027515447578236149ull,
+ 14679092732656291995ull, 2769784831400556606ull}},
+{{2792465817880254756ull, 2922708291045407283ull,
+ 9125493878965589186ull, 3462231039250695758ull}},
+{{17325640327632482157ull, 12876757400661534911ull,
+ 2183495311852210674ull, 4327788799063369698ull}},
+{{17746054232411383205ull, 12659659393840847223ull,
+ 5976370588335019575ull, 2704867999414606061ull}},
+{{17570881772086841102ull, 11212888223873671125ull,
+ 12082149253846162373ull, 3381084999268257576ull}},
+{{8128544159826387665ull, 181052224559925195ull,
+ 15102686567307702967ull, 4226356249085321970ull}},
+{{2774497090677798339ull, 7030686667991035103ull,
+ 14050865122994702258ull, 2641472655678326231ull}},
+{{17303179418629411635ull, 18011730371843569686ull,
+ 12951895385315989918ull, 3301840819597907789ull}},
+{{12405602236431988736ull, 13291290927949686300ull,
+ 2354811176362823686ull, 4127301024497384737ull}},
+{{16976873434624768768ull, 3695370811541166033ull,
+ 13000972031295234564ull, 2579563140310865460ull}},
+{{7386033737998797248ull, 4619213514426457542ull,
+ 16251215039119043205ull, 3224453925388581825ull}},
+{{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull,
+ 4030567406735727282ull}},
+{{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull,
+ 2519104629209829551ull}},
+{{13842222223753820550ull, 2349222876544249363ull,
+ 6214609585557347206ull, 3148880786512286939ull}},
+{{12691091761264887783ull, 12159900632535087512ull,
+ 3156575963519296103ull, 3936100983140358674ull}},
+{{7931932350790554864ull, 14517466922975511551ull,
+ 6584545995626947968ull, 2460063114462724171ull}},
+{{5303229420060805676ull, 18146833653719389439ull,
+ 3618996476106297056ull, 3075078893078405214ull}},
+{{2017350756648619191ull, 4236797993439685183ull,
+ 13747117631987647129ull, 3843848616348006517ull}},
+{{8178373250546468851ull, 14177213791968272999ull,
+ 10897791529205973407ull, 2402405385217504073ull}},
+{{5611280544755698159ull, 13109831221532953345ull,
+ 18233925429934854663ull, 3003006731521880091ull}},
+{{11625786699372010603ull, 11775603008488803777ull,
+ 18180720768991180425ull, 3753758414402350114ull}},
+{{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull,
+ 2346099009001468821ull}},
+{{5047420592760418868ull, 9776150602685301439ull,
+ 6133237568526430875ull, 2932623761251836027ull}},
+{{1697589722523135681ull, 7608502234929238895ull,
+ 3054860942230650690ull, 3665779701564795034ull}},
+{{15957045208436083313ull, 287255756806772810ull,
+ 13041948214643089171ull, 4582224626955993792ull}},
+{{14584839273699939975ull, 16320435912500090670ull,
+ 8151217634151930731ull, 2863890391847496120ull}},
+{{9007677055270149160ull, 15788858872197725434ull,
+ 10189022042689913414ull, 3579862989809370150ull}},
+{{2036224282232910642ull, 10512701553392380985ull,
+ 3512905516507615960ull, 4474828737261712688ull}},
+{{12801855222464038911ull, 6570438470870238115ull,
+ 2195565947817259975ull, 2796767960788570430ull}},
+{{11390633009652660735ull, 3601362070160409740ull,
+ 11967829471626350777ull, 3495959950985713037ull}},
+{{14238291262065825919ull, 9113388606127900079ull,
+ 1124728784250774759ull, 4369949938732141297ull}},
+{{15816461066432223055ull, 12613396906471019405ull,
+ 12232170536225203984ull, 2731218711707588310ull}},
+{{5935518277758115107ull, 15766746133088774257ull,
+ 6066841133426729172ull, 3414023389634485388ull}},
+{{12031083865625031788ull, 1261688592651416205ull,
+ 7583551416783411466ull, 4267529237043106735ull}},
+{{9825270425229338820ull, 5400241388834523032ull,
+ 11657248663130714022ull, 2667205773151941709ull}},
+{{12281588031536673524ull, 15973673772897929598ull,
+ 736502773631228815ull, 3334007216439927137ull}},
+{{6128613002566066097ull, 15355406197695024094ull,
+ 5532314485466423923ull, 4167509020549908921ull}},
+{{17665441181885955023ull, 7291285864345696106ull,
+ 14986911599484984712ull, 2604693137843693075ull}},
+{{12858429440502667971ull, 9114107330432120133ull,
+ 14121953480928842986ull, 3255866422304616344ull}},
+{{2237978745346171251ull, 2169262126185374359ull,
+ 17652441851161053733ull, 4069833027880770430ull}},
+{{8316265743482438888ull, 3661631838079552926ull,
+ 6421090138548270679ull, 2543645642425481519ull}},
+{{1171960142498272802ull, 18412097852881604870ull,
+ 3414676654757950444ull, 3179557053031851899ull}},
+{{10688322214977616811ull, 4568378242392454471ull,
+ 18103403873729601768ull, 3974446316289814873ull}},
+{{13597730412002092363ull, 2855236401495284044ull,
+ 4397098393439919249ull, 2484028947681134296ull}},
+{{16997163015002615453ull, 8180731520296492959ull,
+ 5496372991799899061ull, 3105036184601417870ull}},
+{{16634767750325881413ull, 14837600418798004103ull,
+ 16093838276604649634ull, 3881295230751772337ull}},
+{{17314258871594757739ull, 13885186280176140468ull,
+ 3141119895236824165ull, 2425809519219857711ull}},
+{{3196079515783895558ull, 3521424794938011874ull,
+ 17761457924328193919ull, 3032261899024822138ull}},
+{{13218471431584645255ull, 18236839048954678554ull,
+ 12978450368555466590ull, 3790327373781027673ull}},
+{{12873230663167791189ull, 6786338387169286192ull,
+ 1194002452706084763ull, 2368954608613142296ull}},
+{{16091538328959738986ull, 3871236965534219836ull,
+ 1492503065882605954ull, 2961193260766427870ull}},
+{{1667678837490122116ull, 14062418243772550604ull,
+ 11089000869208033250ull, 3701491575958034837ull}},
+{{10265671310286102131ull, 13400697420785232031ull,
+ 9236468552468714733ull, 2313432234973771773ull}},
+{{8220403119430239759ull, 2915813720699376327ull,
+ 16157271709013281321ull, 2891790293717214716ull}},
+{{5663817880860411795ull, 8256453169301608313ull,
+ 1749845562557050035ull, 3614737867146518396ull}},
+{{11691458369502902647ull, 5708880443199622487ull,
+ 2187306953196312544ull, 4518422333933147995ull}},
+{{14224690508580396011ull, 3568050276999764054ull,
+ 17507967910243553004ull, 2824013958708217496ull}},
+{{8557491098870719205ull, 4460062846249705068ull,
+ 3438215814094889639ull, 3530017448385271871ull}},
+{{10696863873588399007ull, 963392539384743431ull,
+ 18132827822900775761ull, 4412521810481589838ull}},
+{{13603068948633831235ull, 12131335383183934404ull,
+ 6721331370885596946ull, 2757826131550993649ull}},
+{{17003836185792289044ull, 5940797192125142197ull,
+ 13013350232034384087ull, 3447282664438742061ull}},
+{{7419737176958197593ull, 2814310471729039843ull,
+ 2431629734760816397ull, 4309103330548427577ull}},
+{{2331492726385179544ull, 4064787054044343854ull,
+ 13048983630293980008ull, 2693189581592767235ull}},
+{{12137737944836250237ull, 5080983817555429817ull,
+ 11699543519440087106ull, 3366486976990959044ull}},
+{{1337114375763149085ull, 15574601808799063080ull,
+ 14624429399300108882ull, 4208108721238698805ull}},
+{{835696484851968178ull, 14345812148926802329ull,
+ 11446111383776262003ull, 2630067950774186753ull}},
+{{5656306624492348127ull, 13320579167731115007ull,
+ 472581174438163792ull, 3287584938467733442ull}},
+{{2458697262188047254ull, 16650723959663893759ull,
+ 9814098504902480548ull, 4109481173084666802ull}},
+{{8454214816508611390ull, 1183330437935157791ull,
+ 10745497583991438247ull, 2568425733177916751ull}},
+{{5956082502208376333ull, 15314221102701110951ull,
+ 8820185961561909904ull, 3210532166472395939ull}},
+{{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull,
+ 4013165208090494924ull}},
+{{13300100739401646331ull, 2740863199630467122ull,
+ 13231838557807900481ull, 2508228255056559327ull}},
+{{7401753887397282105ull, 8037765017965471807ull,
+ 11928112178832487697ull, 3135285318820699159ull}},
+{{4640506340819214727ull, 14658892290884227663ull,
+ 10298454205113221717ull, 3919106648525873949ull}},
+{{9817845490653091061ull, 11467650691016336241ull,
+ 8742376887409457525ull, 2449441655328671218ull}},
+{{16883992881743751730ull, 499505308488256589ull,
+ 1704599072407046099ull, 3061802069160839023ull}},
+{{7269933046897525950ull, 14459439690892484449ull,
+ 15965806895790971335ull, 3827252586451048778ull}},
+{{16072923200379423479ull, 15954678834448884636ull,
+ 14590315328296744988ull, 2392032866531905486ull}},
+{{1644409926764727733ull, 1496604469351554180ull,
+ 9014522123516155428ull, 2990041083164881858ull}},
+{{2055512408455909666ull, 1870755586689442725ull,
+ 2044780617540418477ull, 3737551353956102323ull}},
+{{3590538264498637493ull, 3475065250894595655ull,
+ 17418888950458619212ull, 2335969596222563951ull}},
+{{18323230885905460578ull, 4343831563618244568ull,
+ 17161925169645886111ull, 2919961995278204939ull}},
+{{4457294533672274107ull, 818103436095417807ull,
+ 16840720443629969735ull, 3649952494097756174ull}},
+{{959932148662954729ull, 14857687350401435971ull,
+ 11827528517682686360ull, 4562440617622195218ull}},
+{{16740858657410204370ull, 9286054594000897481ull,
+ 12003891341979066879ull, 2851525386013872011ull}},
+{{7091015266480591750ull, 6995882224073733948ull,
+ 10393178159046445695ull, 3564406732517340014ull}},
+{{8863769083100739688ull, 4133166761664779531ull,
+ 3768100661953281311ull, 4455508415646675018ull}},
+{{3234012667724268353ull, 9500758253681569063ull,
+ 6966748932148188723ull, 2784692759779171886ull}},
+{{17877573889937499153ull, 7264261798674573424ull,
+ 17931808202040011712ull, 3480865949723964857ull}},
+{{3900223288712322326ull, 9080327248343216781ull,
+ 8579702197267850928ull, 4351082437154956072ull}},
+{{4743482564658895406ull, 5675204530214510488ull,
+ 5362313873292406830ull, 2719426523221847545ull}},
+{{5929353205823619257ull, 16317377699622913918ull,
+ 11314578360042896441ull, 3399283154027309431ull}},
+{{16635063544134299879ull, 6561664069246478685ull,
+ 9531536931626232648ull, 4249103942534136789ull}},
+{{12702757724297631377ull, 4101040043279049178ull,
+ 8263053591480089357ull, 2655689964083835493ull}},
+{{6655075118517263413ull, 9737986072526199377ull,
+ 14940503007777499600ull, 3319612455104794366ull}},
+{{12930529916573967170ull, 12172482590657749221ull,
+ 9452256722867098692ull, 4149515568880992958ull}},
+{{10387424207072423433ull, 16831173656015869071ull,
+ 1295974433364548778ull, 2593447230550620599ull}},
+{{8372594240413141387ull, 11815595033165060531ull,
+ 15455026096987849685ull, 3241809038188275748ull}},
+{{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull,
+ 4052261297735344686ull}},
+{{3658785488805649269ull, 16724923399604708884ull,
+ 14380082147485451518ull, 2532663311084590428ull}},
+{{4573481861007061586ull, 11682782212651110297ull,
+ 17975102684356814398ull, 3165829138855738035ull}},
+{{10328538344686214887ull, 5380105728959112063ull,
+ 17857192337018630094ull, 3957286423569672544ull}},
+{{13372865493069966160ull, 17197624135881608751ull,
+ 11160745210636643808ull, 2473304014731045340ull}},
+{{12104395847910069796ull, 3050286096142459323ull,
+ 13950931513295804761ull, 3091630018413806675ull}},
+{{10518808791460199341ull, 8424543638605462058ull,
+ 12826978373192368047ull, 3864537523017258344ull}},
+{{11185941513090012492ull, 12182868801769495642ull,
+ 8016861483245230029ull, 2415335951885786465ull}},
+{{4759054854507739807ull, 1393527946929705841ull,
+ 14632762872483925441ull, 3019169939857233081ull}},
+{{10560504586562062663ull, 6353595952089520205ull,
+ 4455895535322743089ull, 3773962424821541352ull}},
+{{8906158375814983117ull, 15500212516124419888ull,
+ 2784934709576714430ull, 2358726515513463345ull}},
+{{11132697969768728896ull, 10151893608300749052ull,
+ 8092854405398280942ull, 2948408144391829181ull}},
+{{13915872462210911119ull, 3466494973521160507ull,
+ 14727754025175239082ull, 3685510180489786476ull}},
+{{12783154559336250995ull, 13556490753756226442ull,
+ 18409692531469048852ull, 4606887725612233095ull}},
+{{12601157618012544776ull, 17696178757952417334ull,
+ 18423586859809237388ull, 2879304828507645684ull}},
+{{6528074985660905162ull, 3673479373730970052ull,
+ 4582739501051995120ull, 3599131035634557106ull}},
+{{8160093732076131452ull, 4591849217163712565ull,
+ 14951796413169769708ull, 4498913794543196382ull}},
+{{7405901591761276110ull, 12093277797582096161ull,
+ 4733186739803718163ull, 2811821121589497739ull}},
+{{13869063008128983041ull, 10504911228550232297ull,
+ 1304797406327259800ull, 3514776401986872174ull}},
+{{3501270704879065090ull, 13131139035687790372ull,
+ 10854368794763850558ull, 4393470502483590217ull}},
+{{11411666227404191489ull, 3595275878877481078ull,
+ 18313195542795876359ull, 2745919064052243885ull}},
+{{5041210747400463553ull, 18329152903879015060ull,
+ 9056436373212681736ull, 3432398830065304857ull}},
+{{6301513434250579442ull, 4464697056139217209ull,
+ 15932231484943240075ull, 4290498537581631071ull}},
+{{15467660942475081911ull, 484592650873316803ull,
+ 16875173705730606903ull, 2681561585988519419ull}},
+{{14722890159666464485ull, 14440798868873809716ull,
+ 16482281113735870724ull, 3351951982485649274ull}},
+{{18403612699583080606ull, 18050998586092262145ull,
+ 11379479355315062597ull, 4189939978107061593ull}},
+{{4584728909598343523ull, 13587717125521357793ull,
+ 194645569430832267ull, 2618712486316913496ull}},
+{{10342597155425317307ull, 12372960388474309337ull,
+ 243306961788540334ull, 3273390607896141870ull}},
+{{17539932462709034538ull, 6242828448738110863ull,
+ 9527505739090451226ull, 4091738259870177337ull}},
+{{17879986816834228443ull, 8513453798888707193ull,
+ 17483906133000001776ull, 2557336412418860835ull}},
+{{8514925465760621841ull, 10641817248610883992ull,
+ 17243196647822614316ull, 3196670515523576044ull}},
+{{10643656832200777301ull, 13302271560763604990ull,
+ 3107251736068716279ull, 3995838144404470056ull}},
+{{2040599501698097909ull, 15231448753118334975ull,
+ 1942032335042947674ull, 2497398840252793785ull}},
+{{16385807432404786099ull, 9815938904543142910ull,
+ 7039226437231072497ull, 3121748550315992231ull}},
+{{11258887253651206815ull, 16881609649106316542ull,
+ 4187347028111452717ull, 3902185687894990289ull}},
+{{2425118515104616356ull, 12856849039905141791ull,
+ 14146306938638127708ull, 2438866054934368930ull}},
+{{16866456199162934157ull, 16071061299881427238ull,
+ 8459511636442883827ull, 3048582568667961163ull}},
+{{11859698212098891888ull, 15477140606424396144ull,
+ 5962703527126216880ull, 3810728210834951454ull}},
+{{7412311382561807430ull, 9673212879015247590ull,
+ 17561747759736049262ull, 2381705131771844658ull}},
+{{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull,
+ 2977131414714805823ull}},
+{{52521489184354349ull, 12808552114247630408ull,
+ 11299329810091719308ull, 3721414268393507279ull}},
+{{32825930740221468ull, 17228717108259544813ull,
+ 13979610158948406423ull, 2325883917745942049ull}},
+{{4652718431852664739ull, 16924210366897043112ull,
+ 3639454643403344317ull, 2907354897182427562ull}},
+{{5815898039815830924ull, 7320204903339140178ull,
+ 13772690341108956205ull, 3634193621478034452ull}},
+{{16493244586624564463ull, 13761942147601313126ull,
+ 17215862926386195256ull, 4542742026847543065ull}},
+{{5696591848212964885ull, 8601213842250820704ull,
+ 3842385301350290179ull, 2839213766779714416ull}},
+{{7120739810266206107ull, 6139831284386137976ull,
+ 4802981626687862724ull, 3549017208474643020ull}},
+{{8900924762832757633ull, 7674789105482672470ull,
+ 6003727033359828405ull, 4436271510593303775ull}},
+{{951391958343085617ull, 7102586200140364246ull,
+ 10669858423490974609ull, 2772669694120814859ull}},
+{{10412611984783632829ull, 13489918768602843211ull,
+ 8725637010936330357ull, 3465837117651018574ull}},
+{{8404078962552153132ull, 3027340405471390302ull,
+ 1683674226815637139ull, 4332296397063773218ull}},
+{{640863333167707804ull, 18032988817915476603ull,
+ 5663982410187161115ull, 2707685248164858261ull}},
+{{14636137221741798467ull, 17929550003966957849ull,
+ 11691664031161339298ull, 3384606560206072826ull}},
+{{4460113471895084371ull, 13188565468103921504ull,
+ 5391208002096898315ull, 4230758200257591033ull}},
+{{2787570919934427732ull, 5937010408351256988ull,
+ 14898720047379031207ull, 2644223875160994395ull}},
+{{3484463649918034665ull, 2809576992011683331ull,
+ 14011714040796401105ull, 3305279843951242994ull}},
+{{18190637617679707043ull, 8123657258441992067ull,
+ 8291270514140725573ull, 4131599804939053743ull}},
+{{9063305501836122950ull, 7383128795739938994ull,
+ 12099573098979035339ull, 2582249878086908589ull}},
+{{2105759840440377880ull, 4617224976247535839ull,
+ 1289408318441630462ull, 3227812347608635737ull}},
+{{16467257855832636061ull, 14994903257164195606ull,
+ 6223446416479425981ull, 4034765434510794671ull}},
+{{5680350141468009635ull, 11677657544941316206ull,
+ 10807183037940723094ull, 2521728396569246669ull}},
+{{16323809713689787851ull, 5373699894321869449ull,
+ 18120664815853291772ull, 3152160495711558336ull}},
+{{6569704086830071102ull, 6717124867902336812ull,
+ 4204086946107063099ull, 3940200619639447921ull}},
+{{13329437091123570247ull, 1892360033225266555ull,
+ 14156769387385384197ull, 2462625387274654950ull}},
+{{12050110345477074904ull, 6977136059958971098ull,
+ 8472589697376954438ull, 3078281734093318688ull}},
+{{5839265894991567822ull, 17944792111803489681ull,
+ 10590737121721193047ull, 3847852167616648360ull}},
+{{15178756230438199649ull, 18133024097518262906ull,
+ 6619210701075745654ull, 2404907604760405225ull}},
+{{9750073251192973753ull, 13442908085043052825ull,
+ 12885699394772069972ull, 3006134505950506531ull}},
+{{16799277582418605095ull, 16803635106303816031ull,
+ 11495438225037699561ull, 3757668132438133164ull}},
+{{17417077516652710041ull, 3584742913798803163ull,
+ 16408020927503338034ull, 2348542582773833227ull}},
+{{17159660877388499647ull, 13704300679103279762ull,
+ 15898340140951784638ull, 2935678228467291534ull}},
+{{12226204059880848751ull, 7907003812024323895ull,
+ 10649553139334954990ull, 3669597785584114418ull}},
+{{10671069056423673034ull, 660382728175629061ull,
+ 4088569387313917930ull, 4586997231980143023ull}},
+{{8975261169478489598ull, 5024425223537156067ull,
+ 9472884894712280562ull, 2866873269987589389ull}},
+{{6607390443420724094ull, 15503903566276220892ull,
+ 16452792136817738606ull, 3583591587484486736ull}},
+{{8259238054275905117ull, 10156507420990500307ull,
+ 2119246097312621642ull, 4479489484355608421ull}},
+{{2856180774708746746ull, 10959503156546450596ull,
+ 3630371820034082478ull, 2799680927722255263ull}},
+{{3570225968385933433ull, 4476006908828287437ull,
+ 18373022830324766810ull, 3499601159652819078ull}},
+{{9074468478909804695ull, 14818380672890135104ull,
+ 13742906501051182704ull, 4374501449566023848ull}},
+{{5671542799318627935ull, 9261487920556334440ull,
+ 8589316563156989190ull, 2734063405978764905ull}},
+{{7089428499148284918ull, 2353487863840642242ull,
+ 15348331722373624392ull, 3417579257473456131ull}},
+{{18085157660790131956ull, 2941859829800802802ull,
+ 14573728634539642586ull, 4271974071841820164ull}},
+{{15914909556421220376ull, 6450348412052889655ull,
+ 18331952433442052424ull, 2669983794901137602ull}},
+{{15281950927099137566ull, 8062935515066112069ull,
+ 13691568504947789722ull, 3337479743626422003ull}},
+{{5267380603591758246ull, 855297356977864279ull,
+ 12502774612757349249ull, 4171849679533027504ull}},
+{{10209641904885930760ull, 12063775894179634934ull,
+ 7814234132973343280ull, 2607406049708142190ull}},
+{{3538680344252637642ull, 15079719867724543668ull,
+ 544420629361903292ull, 3259257562135177738ull}},
+{{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull,
+ 4074071952668972172ull}},
+{{14293809065015842918ull, 9475188137446105788ull,
+ 15413308176577997635ull, 2546294970418107607ull}},
+{{17867261331269803647ull, 7232299153380244331ull,
+ 14654949202295109140ull, 3182868713022634509ull}},
+{{17722390645659866655ull, 9040373941725305414ull,
+ 4483628447586722713ull, 3978585891278293137ull}},
+{{6464808135110028755ull, 17179448759646785644ull,
+ 14331482825810171455ull, 2486616182048933210ull}},
+{{8081010168887535944ull, 16862624931131094151ull,
+ 8690981495407938511ull, 3108270227561166513ull}},
+{{5489576692682032026ull, 16466595145486479785ull,
+ 15475412887687311043ull, 3885337784451458141ull}},
+{{14960200478994739776ull, 7985778956715355913ull,
+ 11977976064018263354ull, 2428336115282161338ull}},
+{{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull,
+ 3035420144102701673ull}},
+{{6081490679326576260ull, 5560250592226661759ull,
+ 11798058572387454635ull, 3794275180128377091ull}},
+{{10718460702220192019ull, 1169313610927969647ull,
+ 5067943598528465195ull, 2371421987580235682ull}},
+{{8786389859347852119ull, 15296700068942125771ull,
+ 15558301535015357301ull, 2964277484475294602ull}},
+{{6371301305757427245ull, 5285817030895493502ull,
+ 10224504881914420819ull, 3705346855594118253ull}},
+{{17817121371380555740ull, 997792635095989486ull,
+ 8696158560410206964ull, 2315841784746323908ull}},
+{{13048029677370918867ull, 1247240793869986858ull,
+ 10870198200512758705ull, 2894802230932904885ull}},
+{{7086665059858872776ull, 6170737010764871477ull,
+ 18199433769068336285ull, 3618502788666131106ull}},
+{{13470017343250978874ull, 12325107281883477250ull,
+ 13525920174480644548ull, 4523128485832663883ull}},
+{{13030446857959249701ull, 16926564088031949089ull,
+ 6147857099836708890ull, 2826955303645414927ull}},
+{{2453000517166898414ull, 11934833073185160554ull,
+ 3073135356368498209ull, 3533694129556768659ull}},
+{{12289622683313398825ull, 1083483286199286980ull,
+ 17676477250742786474ull, 4417117661945960823ull}},
+{{16904386213925650074ull, 5288863072301942266ull,
+ 17965327309355323402ull, 2760698538716225514ull}},
+{{11907110730552286784ull, 15834450877232203641ull,
+ 13233287099839378444ull, 3450873173395281893ull}},
+{{1048830357908194768ull, 1346319522830702936ull,
+ 2706550819517059344ull, 4313591466744102367ull}},
+{{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull,
+ 2695994666715063979ull}},
+{{14654456772397940874ull, 10275184164066262476ull,
+ 6149718093871667028ull, 3369993333393829974ull}},
+{{18318070965497426093ull, 12843980205082828095ull,
+ 16910519654194359593ull, 4212491666742287467ull}},
+{{18366323381076973164ull, 1109958600535685703ull,
+ 8263231774657780794ull, 2632807291713929667ull}},
+{{18346218207918828551ull, 10610820287524382937ull,
+ 5717353699894838088ull, 3291009114642412084ull}},
+{{9097714704616371977ull, 13263525359405478672ull,
+ 7146692124868547610ull, 4113761393303015105ull}},
+{{5686071690385232486ull, 12901389368055812074ull,
+ 15995897624111312016ull, 2571100870814384440ull}},
+{{16330961649836316415ull, 16126736710069765092ull,
+ 1548127956429588404ull, 3213876088517980551ull}},
+{{1966957988585843903ull, 1711676813877654750ull,
+ 15770218000819149218ull, 4017345110647475688ull}},
+{{15064406798148316151ull, 5681484027100922122ull,
+ 9856386250511968261ull, 2510840694154672305ull}},
+{{9607136460830619381ull, 11713541052303540557ull,
+ 16932168831567348230ull, 3138550867693340381ull}},
+{{16620606594465662130ull, 5418554278524649888ull,
+ 7330152984177021576ull, 3923188584616675477ull}},
+{{10387879121541038832ull, 3386596424077906180ull,
+ 6887188624324332437ull, 2451992865385422173ull}},
+{{12984848901926298539ull, 8844931548524770629ull,
+ 13220671798832803450ull, 3064991081731777716ull}},
+{{2396003072125709462ull, 1832792398801187479ull,
+ 16525839748541004313ull, 3831238852164722145ull}},
+{{8415030947719650270ull, 12674710295319211934ull,
+ 3411120815197045839ull, 2394524282602951341ull}},
+{{1295416647794787029ull, 11231701850721627014ull,
+ 8875587037423695203ull, 2993155353253689176ull}},
+{{10842642846598259595ull, 9427941294974645863ull,
+ 11094483796779619004ull, 3741444191567111470ull}},
+{{13694180806764994103ull, 15115835346213929472ull,
+ 2322366354559873973ull, 2338402619729444669ull}},
+{{17117726008456242628ull, 5059736127485248128ull,
+ 7514643961627230371ull, 2923003274661805836ull}},
+{{2950413436860751669ull, 1712984140929172257ull,
+ 9393304952034037964ull, 3653754093327257295ull}},
+{{8299702814503327491ull, 2141230176161465321ull,
+ 7129945171615159551ull, 4567192616659071619ull}},
+{{16716529305133049442ull, 8255797887741997681ull,
+ 2150372723045780767ull, 2854495385411919762ull}},
+{{7060603576134148090ull, 5708061341250109198ull,
+ 11911337940662001767ull, 3568119231764899702ull}},
+{{18049126507022460921ull, 2523390658135248593ull,
+ 5665800388972726401ull, 4460149039706124628ull}},
+{{4363175039247956220ull, 13106334207403000131ull,
+ 12764497279962729808ull, 2787593149816327892ull}},
+{{842282780632557370ull, 16382917759253750164ull,
+ 15955621599953412260ull, 3484491437270409865ull}},
+{{1052853475790696713ull, 2031903125357636089ull,
+ 6109468944659601614ull, 4355614296588012332ull}},
+{{12187248468437655206ull, 15104997508630686267ull,
+ 13041790127267026816ull, 2722258935367507707ull}},
+{{10622374567119681103ull, 434502812078806218ull,
+ 11690551640656395617ull, 3402823669209384634ull}},
+{{4054596172044825571ull, 5154814533525895677ull,
+ 5389817513965718713ull, 4253529586511730793ull}},
+{{4839965616741709934ull, 14750974129522154558ull,
+ 14897850992297043955ull, 2658455991569831745ull}},
+{{15273329057781913225ull, 13827031643475305293ull,
+ 4787255685089141232ull, 3323069989462289682ull}},
+{{5256603266945227819ull, 17283789554344131617ull,
+ 15207441643216202348ull, 4153837486827862102ull}},
+{{14814592087909237147ull, 1578996434610306452ull,
+ 4892965008582738564ull, 2596148429267413814ull}},
+{{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull,
+ 3245185536584267267ull}},
+{{9312742082076019330ull, 7078867947505991736ull,
+ 14562786853551610862ull, 4056481920730334084ull}},
+{{5820463801297512082ull, 18259350522473408547ull,
+ 18325113820324532596ull, 2535301200456458802ull}},
+{{2663893733194502198ull, 4377444079382209068ull,
+ 13683020238550889938ull, 3169126500570573503ull}},
+{{3329867166493127747ull, 14695177136082537143ull,
+ 12492089279761224518ull, 3961408125713216879ull}},
+{{8998696006699286698ull, 4572799691624197810ull,
+ 14725084827491847180ull, 2475880078570760549ull}},
+{{2024997971519332565ull, 5715999614530247263ull,
+ 4571297979082645263ull, 3094850098213450687ull}},
+{{16366305519681329418ull, 2533313499735421174ull,
+ 1102436455425918675ull, 3868562622766813359ull}},
+{{5617254931373442982ull, 17724222001830495898ull,
+ 7606551812282281027ull, 2417851639229258349ull}},
+{{16244940701071579536ull, 17543591483860731968ull,
+ 14119875783780239188ull, 3022314549036572936ull}},
+{{1859431802629922803ull, 3482745281116363345ull,
+ 17649844729725298986ull, 3777893186295716170ull}},
+{{12691359922712171512ull, 6788401819125114994ull,
+ 15642838974505699770ull, 2361183241434822606ull}},
+{{6640827866535438582ull, 17708874310761169551ull,
+ 10330176681277348904ull, 2951479051793528258ull}},
+{{3689348814741910324ull, 3689348814741910323ull,
+ 3689348814741910323ull, 3689348814741910323ull}},
+{{0ull, 0ull, 0ull, 4611686018427387904ull}},
+{{0ull, 0ull, 0ull, 2882303761517117440ull}},
+{{0ull, 0ull, 0ull, 3602879701896396800ull}},
+{{0ull, 0ull, 0ull, 4503599627370496000ull}},
+{{0ull, 0ull, 0ull, 2814749767106560000ull}},
+{{0ull, 0ull, 0ull, 3518437208883200000ull}},
+{{0ull, 0ull, 0ull, 4398046511104000000ull}},
+{{0ull, 0ull, 0ull, 2748779069440000000ull}},
+{{0ull, 0ull, 0ull, 3435973836800000000ull}},
+{{0ull, 0ull, 0ull, 4294967296000000000ull}},
+{{0ull, 0ull, 0ull, 2684354560000000000ull}},
+{{0ull, 0ull, 0ull, 3355443200000000000ull}},
+{{0ull, 0ull, 0ull, 4194304000000000000ull}},
+{{0ull, 0ull, 0ull, 2621440000000000000ull}},
+{{0ull, 0ull, 0ull, 3276800000000000000ull}},
+{{0ull, 0ull, 0ull, 4096000000000000000ull}},
+{{0ull, 0ull, 0ull, 2560000000000000000ull}},
+{{0ull, 0ull, 0ull, 3200000000000000000ull}},
+{{0ull, 0ull, 0ull, 4000000000000000000ull}},
+{{0ull, 0ull, 0ull, 2500000000000000000ull}},
+{{0ull, 0ull, 0ull, 3125000000000000000ull}},
+{{0ull, 0ull, 0ull, 3906250000000000000ull}},
+{{0ull, 0ull, 0ull, 2441406250000000000ull}},
+{{0ull, 0ull, 0ull, 3051757812500000000ull}},
+{{0ull, 0ull, 0ull, 3814697265625000000ull}},
+{{0ull, 0ull, 0ull, 2384185791015625000ull}},
+{{0ull, 0ull, 0ull, 2980232238769531250ull}},
+{{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}},
+{{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}},
+{{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}},
+{{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}},
+{{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}},
+{{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}},
+{{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}},
+{{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}},
+{{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}},
+{{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}},
+{{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}},
+{{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}},
+{{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}},
+{{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}},
+{{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}},
+{{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}},
+{{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}},
+{{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}},
+{{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}},
+{{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}},
+{{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}},
+{{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}},
+{{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}},
+{{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}},
+{{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}},
+{{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}},
+{{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}},
+{{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}},
+{{0ull, 4611686018427387904ull, 9222577334724359131ull,
+ 3761581922631320025ull}},
+{{0ull, 576460752303423488ull, 17293325880271194217ull,
+ 2350988701644575015ull}},
+{{0ull, 5332261958806667264ull, 17004971331911604867ull,
+ 2938735877055718769ull}},
+{{0ull, 2053641430080946176ull, 7421156109607342372ull,
+ 3673419846319648462ull}},
+{{0ull, 2567051787601182720ull, 53073100154402157ull,
+ 4591774807899560578ull}},
+{{0ull, 3910250376464433152ull, 4644856706023889252ull,
+ 2869859254937225361ull}},
+{{0ull, 4887812970580541440ull, 10417756900957249469ull,
+ 3587324068671531701ull}},
+{{0ull, 10721452231653064704ull, 17633882144623949740ull,
+ 4484155085839414626ull}},
+{{0ull, 15924279681637941248ull, 15632862358817356491ull,
+ 2802596928649634141ull}},
+{{0ull, 15293663583620038656ull, 5706019893239531902ull,
+ 3503246160812042677ull}},
+{{0ull, 9893707442670272512ull, 11744210884976802782ull,
+ 4379057701015053346ull}},
+{{0ull, 1571881133241532416ull, 11951817821537889643ull,
+ 2736911063134408341ull}},
+{{0ull, 15799909471834079232ull, 1104714221640198341ull,
+ 3421138828918010427ull}},
+{{0ull, 5914828784510435328ull, 15215950832332411639ull,
+ 4276423536147513033ull}},
+{{0ull, 10614297017960103936ull, 2592440242566675418ull,
+ 2672764710092195646ull}},
+{{0ull, 4044499235595354112ull, 12463922340063120081ull,
+ 3340955887615244557ull}},
+{{0ull, 9667310062921580544ull, 1744844869796736389ull,
+ 4176194859519055697ull}},
+{{0ull, 8347911798539681792ull, 12619743089691430003ull,
+ 2610121787199409810ull}},
+{{0ull, 5823203729747214336ull, 6551306825259511696ull,
+ 3262652233999262263ull}},
+{{0ull, 7279004662184017920ull, 3577447513147001716ull,
+ 4078315292499077829ull}},
+{{0ull, 13772749950719787008ull, 4541747704930570024ull,
+ 2548947057811923643ull}},
+{{0ull, 17215937438399733760ull, 1065498612735824626ull,
+ 3186183822264904554ull}},
+{{0ull, 12296549761144891392ull, 10555245302774556591ull,
+ 3982729777831130692ull}},
+{{0ull, 14602872628356638976ull, 15820400351088873677ull,
+ 2489206111144456682ull}},
+{{0ull, 4418532730163635008ull, 10552128402006316289ull,
+ 3111507638930570853ull}},
+{{0ull, 10134851931131931664ull, 17801846520935283265ull,
+ 3889384548663213566ull}},
+{{0ull, 17863497503025927050ull, 6514468057157164136ull,
+ 2430865342914508479ull}},
+{{9223372036854775808ull, 3882627805072857196ull,
+ 3531399053019067267ull, 3038581678643135599ull}},
+{{11529215046068469760ull, 241598737913683591ull,
+ 18249306871555997796ull, 3798227098303919498ull}},
+{{14123288431433875456ull, 9374371248050828052ull,
+ 16017502813149886526ull, 2373891936439949686ull}},
+{{17654110539292344320ull, 2494592023208759257ull,
+ 10798506479582582350ull, 2967364920549937108ull}},
+{{8232580118833266688ull, 12341612065865724880ull,
+ 13498133099478227937ull, 3709206150687421385ull}},
+{{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull,
+ 2318253844179638366ull}},
+{{15655075254693265408ull, 5606659160333633146ull,
+ 11121877236270789064ull, 2897817305224547957ull}},
+{{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull,
+ 3622271631530684947ull}},
+{{17543526057817145344ull, 17983776974876077599ull,
+ 13919168667852566984ull, 4527839539413356183ull}},
+{{17882232813776797696ull, 11239860609297548499ull,
+ 15617009445048936221ull, 2829899712133347614ull}},
+{{17741104998793609216ull, 214767706339771912ull,
+ 10297889769456394469ull, 3537374640166684518ull}},
+{{3729637174782459904ull, 4880145651352102795ull,
+ 3648990174965717278ull, 4421718300208355648ull}},
+{{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull,
+ 2763573937630222280ull}},
+{{13866533336563843072ull, 11883064322366759140ull,
+ 2850773574191966623ull, 3454467422037777850ull}},
+{{17333166670704803840ull, 10242144384531061021ull,
+ 12786839004594734087ull, 4318084277547222312ull}},
+{{13139072178404196352ull, 13318869267972994994ull,
+ 7991774377871708804ull, 2698802673467013945ull}},
+{{7200468186150469632ull, 16648586584966243743ull,
+ 14601403990767023909ull, 3373503341833767431ull}},
+{{4388899214260699136ull, 6975675175925640967ull,
+ 13640068970031391983ull, 4216879177292209289ull}},
+{{9660591036554018816ull, 11277326012594607460ull,
+ 1607514078628538133ull, 2635549485807630806ull}},
+{{12075738795692523520ull, 261599460461095613ull,
+ 11232764635140448475ull, 3294436857259538507ull}},
+{{1259615439333490688ull, 14162057380858533229ull,
+ 9429269775498172689ull, 4118046071574423134ull}},
+{{3093102658797125632ull, 1933756835395501412ull,
+ 1281607591258970027ull, 2573778794734014459ull}},
+{{3866378323496407040ull, 16252254099526540477ull,
+ 15437067544355876245ull, 3217223493417518073ull}},
+{{9444658922797896704ull, 6480259569126011884ull,
+ 5461276375162681595ull, 4021529366771897592ull}},
+{{15126283863603461248ull, 1744319221490063475ull,
+ 3413297734476675997ull, 2513455854232435995ull}},
+{{14296168811076938656ull, 6792085045289967248ull,
+ 18101680223378008708ull, 3141819817790544993ull}},
+{{17870211013846173320ull, 8490106306612459060ull,
+ 8792042223940347173ull, 3927274772238181242ull}},
+{{1945509846799082517ull, 7612159450846480865ull,
+ 10106712408390104887ull, 2454546732648863276ull}},
+{{7043573326926241051ull, 4903513295130713177ull,
+ 12633390510487631109ull, 3068183415811079095ull}},
+{{13416152677085189217ull, 10741077637340779375ull,
+ 11180052119682150982ull, 3835229269763848869ull}},
+{{15302624450819325117ull, 2101487504910599205ull,
+ 9293375584015038316ull, 2397018293602405543ull}},
+{{5293222508241992684ull, 2626859381138249007ull,
+ 7005033461591409991ull, 2996272867003006929ull}},
+{{2004842116875102951ull, 17118632281704974971ull,
+ 13367977845416650392ull, 3745341083753758661ull}},
+{{17393927387542797009ull, 10699145176065609356ull,
+ 10660829162599100447ull, 2340838177346099163ull}},
+{{3295665160718944645ull, 8762245451654623792ull,
+ 8714350434821487655ull, 2926047721682623954ull}},
+{{4119581450898680806ull, 6341120796140891836ull,
+ 1669566006672083761ull, 3657559652103279943ull}},
+{{5149476813623351007ull, 12538087013603502699ull,
+ 15922015563622268413ull, 4571949565129099928ull}},
+{{912579999300900428ull, 10142147392715883139ull,
+ 9951259727263917758ull, 2857468478205687455ull}},
+{{14975783054408289246ull, 3454312204040078115ull,
+ 7827388640652509294ull, 3571835597757109319ull}},
+{{14108042799582973654ull, 13541262291904873452ull,
+ 5172549782388248713ull, 4464794497196386649ull}},
+{{18040898786594134342ull, 1545759904799464051ull,
+ 14762058660061125206ull, 2790496560747741655ull}},
+{{17939437464815280023ull, 11155571917854105872ull,
+ 13840887306649018603ull, 3488120700934677069ull}},
+{{3977552757309548413ull, 9332778878890244437ull,
+ 3466051078029109542ull, 4360150876168346337ull}},
+{{4791813482532161710ull, 1221300780879014869ull,
+ 13695496969836663224ull, 2725094297605216460ull}},
+{{10601452871592590042ull, 1526625976098768586ull,
+ 17119371212295829030ull, 3406367872006520575ull}},
+{{4028444052635961744ull, 11131654506978236541ull,
+ 16787527996942398383ull, 4257959840008150719ull}},
+{{4823620542111170042ull, 13874813094502479694ull,
+ 17409734025730080845ull, 2661224900005094199ull}},
+{{15252897714493738360ull, 3508458312845935905ull,
+ 17150481513735213153ull, 3326531125006367749ull}},
+{{5231064087835009238ull, 8997258909484807786ull,
+ 7603043836886852729ull, 4158163906257959687ull}},
+{{7881101073324268678ull, 17152501864496474626ull,
+ 11669431425695364811ull, 2598852441411224804ull}},
+{{628004304800560040ull, 16828941312193205379ull,
+ 14586789282119206014ull, 3248565551764031005ull}},
+{{14620063436282863761ull, 11812804603386730915ull,
+ 4398428547366843806ull, 4060706939705038757ull}},
+{{6831696638463095899ull, 2771316858689318918ull,
+ 5054860851317971331ull, 2537941837315649223ull}},
+{{17762992834933645682ull, 17299204128643812359ull,
+ 1706890045720076259ull, 3172427296644561529ull}},
+{{17592055025239669198ull, 17012319142377377545ull,
+ 6745298575577483228ull, 3965534120805701911ull}},
+{{4077505363133711393ull, 1409327427131085158ull,
+ 11133340637377008874ull, 2478458825503563694ull}},
+{{14320253740771915049ull, 10985031320768632255ull,
+ 4693303759866485284ull, 3098073531879454618ull}},
+{{13288631157537505907ull, 13731289150960790319ull,
+ 15090001736687882413ull, 3872591914849318272ull}},
+{{15222923501102023048ull, 10887898728564187901ull,
+ 9431251085429926508ull, 2420369946780823920ull}},
+{{5193596321095365098ull, 13609873410705234877ull,
+ 11789063856787408135ull, 3025462433476029900ull}},
+{{11103681419796594277ull, 12400655744954155692ull,
+ 14736329820984260169ull, 3781828041845037375ull}},
+{{16163172924227647231ull, 832880812955265451ull,
+ 16127735165756244462ull, 2363642526153148359ull}},
+{{15592280136857171135ull, 10264473053048857622ull,
+ 15547982938767917673ull, 2954553157691435449ull}},
+{{10266978134216688110ull, 17442277334738459932ull,
+ 5599920618177733379ull, 3693191447114294312ull}},
+{{15640233370740205877ull, 8595580324997843505ull,
+ 3499950386361083362ull, 2308244654446433945ull}},
+{{5715233658143093634ull, 1521103369392528574ull,
+ 8986624001378742107ull, 2885305818058042431ull}},
+{{16367414109533642851ull, 15736437267022824429ull,
+ 6621593983296039729ull, 3606632272572553039ull}},
+{{6624209581634889851ull, 5835488528496366825ull,
+ 3665306460692661758ull, 4508290340715691299ull}},
+{{15669346034590275917ull, 17482238385592392977ull,
+ 18431717602428771262ull, 2817681462947307061ull}},
+{{5751624487955681184ull, 12629425945135715414ull,
+ 9204588947753800366ull, 3522101828684133827ull}},
+{{16412902646799377288ull, 6563410394564868459ull,
+ 6894050166264862554ull, 4402627285855167284ull}},
+{{7952221145035916853ull, 8713817515030430691ull,
+ 13532153390770314904ull, 2751642053659479552ull}},
+{{5328590412867508163ull, 10892271893788038364ull,
+ 16915191738462893630ull, 3439552567074349440ull}},
+{{6660738016084385203ull, 4391967830380272147ull,
+ 2697245599369065422ull, 4299440708842936801ull}},
+{{1857118250839046800ull, 16580037949269833804ull,
+ 13214993545674135648ull, 2687150443026835500ull}},
+{{2321397813548808500ull, 2278303362877740639ull,
+ 16518741932092669561ull, 3358938053783544375ull}},
+{{16736805322218174337ull, 7459565222024563702ull,
+ 16036741396688449047ull, 4198672567229430469ull}},
+{{5848817307958971057ull, 11579757291406434170ull,
+ 12328806382143974606ull, 2624170354518394043ull}},
+{{16534393671803489629ull, 5251324577403266904ull,
+ 10799321959252580354ull, 3280212943147992554ull}},
+{{2221248016044810420ull, 15787527758608859439ull,
+ 4275780412210949634ull, 4100266178934990693ull}},
+{{8305809037669088369ull, 14478890867557925053ull,
+ 4978205766845537473ull, 2562666361834369183ull}},
+{{14993947315513748365ull, 4263555529165242604ull,
+ 1611071190129533938ull, 3203332952292961479ull}},
+{{295690070682633840ull, 14552816448311329064ull,
+ 15848897042944081134ull, 4004166190366201848ull}},
+{{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull,
+ 2502603868978876155ull}},
+{{4842693886148195591ull, 10216466345636378855ull,
+ 7770264796372675482ull, 3128254836223595194ull}},
+{{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull,
+ 3910318545279493993ull}},
+{{12430265883104630126ull, 13746221855562655860ull,
+ 11835126895200387600ull, 2443949090799683745ull}},
+{{15537832353880787657ull, 17182777319453319825ull,
+ 958850563718320788ull, 3054936363499604682ull}},
+{{5587232387068820859ull, 3031727575607098166ull,
+ 10421935241502676794ull, 3818670454374505852ull}},
+{{17327078297200176749ull, 6506515753181824257ull,
+ 15737081562793948804ull, 2386669033984066157ull}},
+{{7823789816218057224ull, 8133144691477280322ull,
+ 5836293898210272293ull, 2983336292480082697ull}},
+{{556365233417795722ull, 14778116882773988307ull,
+ 11907053391190228270ull, 3729170365600103371ull}},
+{{16488629335381979991ull, 4624637033306354787ull,
+ 5136065360280198717ull, 2330731478500064607ull}},
+{{15999100650800087084ull, 10392482310060331388ull,
+ 1808395681922860492ull, 2913414348125080759ull}},
+{{1552131739790557239ull, 12990602887575414236ull,
+ 16095552657685739327ull, 3641767935156350948ull}},
+{{1940164674738196549ull, 11626567591041879891ull,
+ 1672696748397622543ull, 4552209918945438686ull}},
+{{17353503986207230507ull, 14184133772042256787ull,
+ 14880493523030677801ull, 2845131199340899178ull}},
+{{17080193964331650230ull, 3895109159770657272ull,
+ 9377244866933571444ull, 3556413999176123973ull}},
+{{2903498381705011171ull, 4868886449713321591ull,
+ 16333242102094352209ull, 4445517498970154966ull}},
+{{8732215516206713838ull, 14572269077139295754ull,
+ 5596590295381582226ull, 2778448436856346854ull}},
+{{1691897358403616490ull, 8991964309569343885ull,
+ 16219109906081753591ull, 3473060546070433567ull}},
+{{6726557716431908516ull, 6628269368534291952ull,
+ 15662201364174804085ull, 4341325682588041959ull}},
+{{4204098572769942823ull, 6448511364547626422ull,
+ 16706404880250334409ull, 2713328551617526224ull}},
+{{14478495252817204336ull, 12672325224111920931ull,
+ 2436262026603366395ull, 3391660689521907781ull}},
+{{13486433047594117516ull, 11228720511712513260ull,
+ 7657013551681595898ull, 4239575861902384726ull}},
+{{17652392691601099256ull, 11629636338247708691ull,
+ 173947451373609532ull, 2649734913688990454ull}},
+{{17453804846073986166ull, 14537045422809635864ull,
+ 9440806351071787723ull, 3312168642111238067ull}},
+{{3370511983882931091ull, 13559620760084656927ull,
+ 7189321920412346750ull, 4140210802639047584ull}},
+{{9024099017567913788ull, 3863076956625522675ull,
+ 4493326200257716719ull, 2587631751649404740ull}},
+{{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull,
+ 3234539689561755925ull}},
+{{8335547191915630413ull, 14106508276975308012ull,
+ 11632508206330070277ull, 4043174611952194906ull}},
+{{14433089031802044817ull, 11122410682323261459ull,
+ 11882003647383681827ull, 2526984132470121816ull}},
+{{13429675271325168117ull, 9291327334476688920ull,
+ 14852504559229602284ull, 3158730165587652270ull}},
+{{16787094089156460146ull, 11614159168095861150ull,
+ 9342258662182227047ull, 3948412706984565338ull}},
+{{5880247787295399687ull, 14176378507700995075ull,
+ 10450597682291279808ull, 2467757941865353336ull}},
+{{2738623715691861705ull, 17720473134626243844ull,
+ 13063247102864099760ull, 3084697427331691670ull}},
+{{3423279644614827131ull, 3703847344573253189ull,
+ 7105686841725348893ull, 3855871784164614588ull}},
+{{4445392787097960909ull, 4620747599571977195ull,
+ 13664426312933118866ull, 2409919865102884117ull}},
+{{945054965445063232ull, 14999306536319747302ull,
+ 3245474835884234870ull, 3012399831378605147ull}},
+{{10404690743661104848ull, 9525761133544908319ull,
+ 17891901600137457300ull, 3765499789223256433ull}},
+{{13420460742429272386ull, 15176972745320343507ull,
+ 4264909472444828956ull, 2353437368264535271ull}},
+{{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull,
+ 2941796710330669089ull}},
+{{15204862387011503223ull, 655589822426097210ull,
+ 5510999546088198269ull, 3677245887913336361ull}},
+{{9782705946909603221ull, 5431173296460009417ull,
+ 11500435451037635740ull, 4596557359891670451ull}},
+{{17643406262886971773ull, 12617855347142281693ull,
+ 4881929147684828385ull, 2872848349932294032ull}},
+{{8219199773326551005ull, 1937261128645688405ull,
+ 6102411434606035482ull, 3591060437415367540ull}},
+{{14885685735085576660ull, 11644948447661886314ull,
+ 7628014293257544352ull, 4488825546769209425ull}},
+{{13915239602855873316ull, 7278092779788678946ull,
+ 16296723979354434980ull, 2805515966730755890ull}},
+{{8170677466715065837ull, 9097615974735848683ull,
+ 11147532937338267917ull, 3506894958413444863ull}},
+{{5601660814966444393ull, 15983705986847198758ull,
+ 9322730153245446992ull, 4383618698016806079ull}},
+{{17336096064636191458ull, 9989816241779499223ull,
+ 12744235373419486226ull, 2739761686260503799ull}},
+{{17058434062367851418ull, 3263898265369598221ull,
+ 11318608198346969879ull, 3424702107825629749ull}},
+{{7487984522677650560ull, 17914930886994161489ull,
+ 313202192651548636ull, 4280877634782037187ull}},
+{{16209205372742001360ull, 1973459767516575122ull,
+ 16336652434903075562ull, 2675548521738773241ull}},
+{{11038134679072725892ull, 11690196746250494711ull,
+ 6585757488346680740ull, 3344435652173466552ull}},
+{{9185982330413519461ull, 14612745932813118389ull,
+ 8232196860433350925ull, 4180544565216833190ull}},
+{{8047081965722143615ull, 11438809217221892945ull,
+ 533437019343456424ull, 2612840353260520744ull}},
+{{14670538475580067423ull, 14298511521527366181ull,
+ 666796274179320530ull, 3266050441575650930ull}},
+{{4503115039192920567ull, 8649767365054431919ull,
+ 10056867379578926471ull, 4082563051969563662ull}},
+{{9731975927136657210ull, 12323633630800101805ull,
+ 1673856093809441140ull, 2551601907480977289ull}},
+{{16776655927348209417ull, 15404542038500127256ull,
+ 6704006135689189329ull, 3189502384351221611ull}},
+{{2524075835475710155ull, 5420619492842995359ull,
+ 3768321651184098758ull, 3986877980439027014ull}},
+{{8495076424813400703ull, 17222945238309035811ull,
+ 16190259087272225435ull, 2491798737774391883ull}},
+{{6007159512589362975ull, 16916995529458906860ull,
+ 15626137840662893890ull, 3114748422217989854ull}},
+{{7508949390736703718ull, 11922872374968857767ull,
+ 10309300263973841555ull, 3893435527772487318ull}},
+{{11610622396851521680ull, 5145952225141842152ull,
+ 1831626646556263068ull, 2433397204857804574ull}},
+{{14513277996064402100ull, 6432440281427302690ull,
+ 11512905345050104643ull, 3041746506072255717ull}},
+{{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull,
+ 3802183132590319647ull}},
+{{3268047902177385309ull, 11366412245202738595ull,
+ 7265075043910123788ull, 2376364457868949779ull}},
+{{17920117933003895348ull, 14208015306503423243ull,
+ 4469657786460266831ull, 2970455572336187224ull}},
+{{17788461397827481281ull, 13148333114701891150ull,
+ 5587072233075333539ull, 3713069465420234030ull}},
+{{6506102355214787897ull, 5911865187474988017ull,
+ 17326978200954247174ull, 2320668415887646268ull}},
+{{12744313962445872775ull, 16613203521198510829ull,
+ 3211978677483257351ull, 2900835519859557836ull}},
+{{2095334397775177256ull, 16154818383070750633ull,
+ 4014973346854071689ull, 3626044399824447295ull}},
+{{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull,
+ 4532555499780559119ull}},
+{{2213440750565280719ull, 13197412614077447420ull,
+ 7171923193353707923ull, 2832847187362849449ull}},
+{{2766800938206600899ull, 11885079749169421371ull,
+ 13576590010119522808ull, 3541058984203561811ull}},
+{{17293559228040414836ull, 14856349686461776713ull,
+ 12359051494222015606ull, 4426323730254452264ull}},
+{{3890945489884177417ull, 4673532535611222542ull,
+ 7724407183888759754ull, 2766452331409032665ull}},
+{{14087053899209997579ull, 15065287706368803985ull,
+ 14267194998288337596ull, 3458065414261290831ull}},
+{{3773759318730333261ull, 384865559251453366ull,
+ 13222307729433034092ull, 4322581767826613539ull}},
+{{16193657629488622000ull, 9463913011386934161ull,
+ 5958099321681952355ull, 2701613604891633462ull}},
+{{6407013981578613788ull, 7218205245806279798ull,
+ 16670996188957216252ull, 3377017006114541827ull}},
+{{17232139513828043043ull, 9022756557257849747ull,
+ 16227059217769132411ull, 4221271257643177284ull}},
+{{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull,
+ 2638294536026985803ull}},
+{{10580305233661041188ull, 8778410817267965579ull,
+ 14983233023095828648ull, 3297868170033732253ull}},
+{{8613695523648913581ull, 10973013521584956974ull,
+ 4893983223587622098ull, 4122335212542165317ull}},
+{{771873683853183084ull, 11469819469417986013ull,
+ 5364582523955957763ull, 2576459507838853323ull}},
+{{5576528123243866759ull, 9725588318345094612ull,
+ 2094042136517559300ull, 3220574384798566654ull}},
+{{6970660154054833449ull, 12156985397931368265ull,
+ 11840924707501724933ull, 4025717980998208317ull}},
+{{15885877642352740666ull, 9903958882920799117ull,
+ 9706420951402272035ull, 2516073738123880198ull}},
+{{6022288997658762120ull, 7768262585223610993ull,
+ 2909654152398064236ull, 3145092172654850248ull}},
+{{12139547265500840554ull, 9710328231529513741ull,
+ 3637067690497580295ull, 3931365215818562810ull}},
+{{9893060050151719298ull, 12986484172347027944ull,
+ 6884853324988375588ull, 2457103259886601756ull}},
+{{12366325062689649123ull, 16233105215433784930ull,
+ 8606066656235469485ull, 3071379074858252195ull}},
+{{6234534291507285595ull, 6456323464010067451ull,
+ 6145897301866948953ull, 3839223843572815244ull}},
+{{1590740922978359545ull, 15564417211074761917ull,
+ 13064557850521618903ull, 2399514902233009527ull}},
+{{6600112172150337335ull, 14843835495416064492ull,
+ 11719011294724635725ull, 2999393627791261909ull}},
+{{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull,
+ 3749242034739077387ull}},
+{{12073866662133532899ull, 14479050242310917824ull,
+ 16649467353948127004ull, 2343276271711923366ull}},
+{{15092333327666916124ull, 18098812802888647280ull,
+ 11588462155580382947ull, 2929095339639904208ull}},
+{{418672585874093539ull, 18011829985183421197ull,
+ 14485577694475478684ull, 3661369174549880260ull}},
+{{5135026750770004827ull, 4068043407769724880ull,
+ 18106972118094348356ull, 4576711468187350325ull}},
+{{3209391719231253017ull, 11765899166710853858ull,
+ 13622700583022661674ull, 2860444667617093953ull}},
+{{13235111685893842080ull, 5484001921533791514ull,
+ 3193317673496163381ull, 3575555834521367442ull}},
+{{7320517570512526791ull, 11466688420344627297ull,
+ 13215019128724980034ull, 4469444793151709302ull}},
+{{16104538527638799005ull, 11778366281142779964ull,
+ 3647700937025724617ull, 2793402995719818314ull}},
+{{1683929085838947140ull, 887899796146311244ull,
+ 13782998208136931580ull, 3491753744649772892ull}},
+{{2104911357298683925ull, 1109874745182889055ull,
+ 17228747760171164475ull, 4364692180812216115ull}},
+{{8233098625952759309ull, 16834572780235163323ull,
+ 8462124340893283844ull, 2727932613007635072ull}},
+{{5679687264013561232ull, 2596471901584402538ull,
+ 10577655426116604806ull, 3409915766259543840ull}},
+{{16322981116871727348ull, 12468961913835278980ull,
+ 13222069282645756007ull, 4262394707824429800ull}},
+{{978491161190053785ull, 14710630223788131219ull,
+ 8263793301653597504ull, 2663996692390268625ull}},
+{{15058172006769730943ull, 18388287779735164023ull,
+ 14941427645494384784ull, 3329995865487835781ull}},
+{{14211028990034775774ull, 4538615650959403413ull,
+ 4841726501585817269ull, 4162494831859794727ull}},
+{{11187736127985428811ull, 5142477791063321085ull,
+ 9943608091132217649ull, 2601559269912371704ull}},
+{{149612104699622302ull, 11039783257256539261ull,
+ 12429510113915272061ull, 3251949087390464630ull}},
+{{4798701149301915781ull, 18411415089998061980ull,
+ 6313515605539314268ull, 4064936359238080788ull}},
+{{12222560255168473171ull, 2283762394394012929ull,
+ 13169319290316847226ull, 2540585224523800492ull}},
+{{1443142263678427752ull, 12078075029847291970ull,
+ 16461649112896059032ull, 3175731530654750615ull}},
+{{11027299866452810498ull, 15097593787309114962ull,
+ 15965375372692685886ull, 3969664413318438269ull}},
+{{11503748434960394466ull, 4824310098640808947ull,
+ 12284202617146622631ull, 2481040258324023918ull}},
+{{9767999525273105178ull, 1418701604873623280ull,
+ 6131881234578502481ull, 3101300322905029898ull}},
+{{12209999406591381472ull, 6385063024519417004ull,
+ 16888223580077903909ull, 3876625403631287372ull}},
+{{16854621665974389228ull, 6296507399538329579ull,
+ 1331767700693914135ull, 2422890877269554608ull}},
+{{16456591064040598631ull, 3258948230995524070ull,
+ 1664709625867392669ull, 3028613596586943260ull}},
+{{11347366793195972481ull, 8685371307171792992ull,
+ 2080887032334240836ull, 3785766995733679075ull}},
+{{7092104245747482801ull, 14651729103837146428ull,
+ 17441455459704758186ull, 2366104372333549421ull}},
+{{8865130307184353501ull, 9091289342941657227ull,
+ 7966761269348784021ull, 2957630465416936777ull}},
+{{6469726865553053972ull, 15975797697104459438ull,
+ 14570137605113367930ull, 3697038081771170971ull}},
+{{17878637346252822445ull, 14596559579117675052ull,
+ 6800492993982161004ull, 2310648801106981857ull}},
+{{3901552609106476440ull, 18245699473897093816ull,
+ 13112302260905089159ull, 2888311001383727321ull}},
+{{4876940761383095549ull, 18195438323943979366ull,
+ 2555319770849197737ull, 3610388751729659152ull}},
+{{15319547988583645245ull, 8909239849647810495ull,
+ 3194149713561497172ull, 4512985939662073940ull}},
+{{16492246520505860134ull, 14791646942884657367ull,
+ 11219715607830711540ull, 2820616212288796212ull}},
+{{16003622132204937264ull, 42814604896270093ull,
+ 14024644509788389426ull, 3525770265360995265ull}},
+{{6169469609974007867ull, 9276890292975113425ull,
+ 3695747581953323070ull, 4407212831701244082ull}},
+{{15385133552302224677ull, 1186370414682057986ull,
+ 6921528257148214823ull, 2754508019813277551ull}},
+{{10008044903523005038ull, 15318021073634736195ull,
+ 4040224303007880624ull, 3443135024766596939ull}},
+{{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull,
+ 4303918780958246174ull}},
+{{14159853356215006054ull, 2743831926922361844ull,
+ 14109179530489953010ull, 2689949238098903858ull}},
+{{17699816695268757568ull, 12653161945507728113ull,
+ 8413102376257665454ull, 3362436547623629823ull}},
+{{8289712813803783248ull, 6593080395029884334ull,
+ 5904691951894693914ull, 4203045684529537279ull}},
+{{569384490199976626ull, 8732361265321065613ull,
+ 10607961497575265552ull, 2626903552830960799ull}},
+{{5323416631177358686ull, 10915451581651332016ull,
+ 8648265853541694036ull, 3283629441038700999ull}},
+{{6654270788971698358ull, 13644314477064165020ull,
+ 6198646298499729641ull, 4104536801298376249ull}},
+{{13382291279962087282ull, 1610167520524021281ull,
+ 15403368982630800786ull, 2565335500811485155ull}},
+{{2892806044670445390ull, 11236081437509802410ull,
+ 14642525209861113078ull, 3206669376014356444ull}},
+{{12839379592692832546ull, 4821729760032477204ull,
+ 18303156512326391348ull, 4008336720017945555ull}},
+{{17247984282287796149ull, 12236953136875074060ull,
+ 9133629810990300640ull, 2505210450011215972ull}},
+{{3113236279150193570ull, 15296191421093842576ull,
+ 11417037263737875800ull, 3131513062514019965ull}},
+{{3891545348937741963ull, 673495202657751604ull, 436238524390181039ull,
+ 3914391328142524957ull}},
+{{11655587879940864535ull, 7338463529302176608ull,
+ 2578492086957557101ull, 2446494580089078098ull}},
+{{14569484849926080669ull, 13784765430055108664ull,
+ 12446487145551722184ull, 3058118225111347622ull}},
+{{18211856062407600836ull, 17230956787568885830ull,
+ 6334736895084876922ull, 3822647781389184528ull}},
+{{6770724020577362618ull, 15381034010657941548ull,
+ 3959210559428048076ull, 2389154863368240330ull}},
+{{8463405025721703273ull, 779548439612875319ull,
+ 14172385236139835904ull, 2986443579210300412ull}},
+{{5967570263724741187ull, 974435549516094149ull,
+ 17715481545174794880ull, 3733054474012875515ull}},
+{{6035574424041657194ull, 609022218447558843ull, 8766332956520552848ull,
+ 2333159046258047197ull}},
+{{2932782011624683588ull, 761277773059448554ull,
+ 15569602214078078964ull, 2916448807822558996ull}},
+{{12889349551385630293ull, 951597216324310692ull,
+ 1015258693888047089ull, 3645561009778198746ull}},
+{{16111686939232037867ull, 5801182538832776269ull,
+ 10492445404214834669ull, 4556951262222748432ull}},
+{{12375647346233717619ull, 5931582095984179120ull,
+ 6557778377634271668ull, 2848094538889217770ull}},
+{{15469559182792147023ull, 7414477619980223900ull,
+ 17420595008897615393ull, 3560118173611522212ull}},
+{{890204904780632163ull, 13879783043402667780ull,
+ 3328999687412467625ull, 4450147717014402766ull}},
+{{9779750102342670910ull, 1757335374485585506ull,
+ 15915682859914955978ull, 2781342323134001728ull}},
+{{3001315591073562830ull, 11420041254961757691ull,
+ 1447859501184143356ull, 3476677903917502161ull}},
+{{17586702544124117249ull, 14275051568702197113ull,
+ 6421510394907567099ull, 4345847379896877701ull}},
+{{4074160062436491425ull, 6616064221225179244ull,
+ 6319287006030923389ull, 2716154612435548563ull}},
+{{5092700078045614281ull, 12881766294958861959ull,
+ 3287422739111266332ull, 3395193265544435704ull}},
+{{1754189079129629947ull, 16102207868698577449ull,
+ 4109278423889082915ull, 4243991581930544630ull}},
+{{12625583220524488477ull, 7758036908722916953ull,
+ 16403357070212840534ull, 2652494738706590393ull}},
+{{1946920970373446884ull, 474174099048870384ull, 6669138282483886956ull,
+ 3315618423383237992ull}},
+{{2433651212966808605ull, 592717623811087980ull, 8336422853104858695ull,
+ 4144523029229047490ull}},
+{{10744404044959031186ull, 7287977542523011843ull,
+ 9821950301617924588ull, 2590326893268154681ull}},
+{{8818819037771401079ull, 9109971928153764804ull,
+ 16889123895449793639ull, 3237908616585193351ull}},
+{{11023523797214251348ull, 6775778891764818101ull,
+ 16499718850884854145ull, 4047385770731491689ull}},
+{{9195545382472601045ull, 15764076853421481073ull,
+ 3394795254161951984ull, 2529616106707182306ull}},
+{{16106117746518139210ull, 1258351993067299725ull,
+ 13466866104557215789ull, 3162020133383977882ull}},
+{{6297589127865510300ull, 6184626009761512561ull,
+ 7610210593841743928ull, 3952525166729972353ull}},
+{{15465208250984413698ull, 3865391256100945350ull,
+ 16285596667219559715ull, 2470328229206232720ull}},
+{{10108138276875741314ull, 220053051698793784ull,
+ 1910251760314898028ull, 3087910286507790901ull}},
+{{12635172846094676643ull, 275066314623492230ull,
+ 6999500718821010439ull, 3859887858134738626ull}},
+{{3285297010381784998ull, 7089445474280764500ull,
+ 8986373967690519428ull, 2412429911334211641ull}},
+{{4106621262977231247ull, 8861806842850955625ull,
+ 15844653478040537189ull, 3015537389167764551ull}},
+{{9744962597148926963ull, 15688944571991082435ull,
+ 15194130829123283582ull, 3769421736459705689ull}},
+{{3784758614004385400ull, 5193904339067038618ull,
+ 2578802740560970383ull, 2355888585287316056ull}},
+{{13954320304360257558ull, 1880694405406410368ull,
+ 3223503425701212979ull, 2944860731609145070ull}},
+{{17442900380450321947ull, 16185926062040176672ull,
+ 13252751318981292031ull, 3681075914511431337ull}},
+{{3356881401853350818ull, 15620721559122832937ull,
+ 2730881093444451327ull, 4601344893139289172ull}},
+{{13627265922226814021ull, 16680480002092852441ull,
+ 10930172720257557887ull, 2875840558212055732ull}},
+{{3199024347501353815ull, 16238913984188677648ull,
+ 13662715900321947359ull, 3594800697765069665ull}},
+{{3998780434376692268ull, 15686956461808459156ull,
+ 3243336820120270487ull, 4493500872206337082ull}},
+{{11722609808340208476ull, 16721876816271368828ull,
+ 6638771531002556958ull, 2808438045128960676ull}},
+{{14653262260425260595ull, 11678973983484435227ull,
+ 8298464413753196198ull, 3510547556411200845ull}},
+{{13704891807104187839ull, 5375345442500768226ull,
+ 14984766535618883152ull, 4388184445514001056ull}},
+{{13177243397867505304ull, 3359590901562980141ull,
+ 9365479084761801970ull, 2742615278446250660ull}},
+{{2636496192052217917ull, 13422860663808500985ull,
+ 11706848855952252462ull, 3428269098057813325ull}},
+{{7907306258492660301ull, 7555203792905850423ull, 798503014658151866ull,
+ 4285336372572266657ull}},
+{{11859595439198994544ull, 9333688388993544418ull,
+ 12028279430229814676ull, 2678335232857666660ull}},
+{{5601122262143967372ull, 11667110486241930523ull,
+ 15035349287787268345ull, 3347919041072083325ull}},
+{{2389716809252571311ull, 748830052520249442ull, 4959128554451921720ull,
+ 4184898801340104157ull}},
+{{6105259024210244973ull, 468018782825155901ull, 5405298355746145027ull,
+ 2615561750837565098ull}},
+{{12243259798690194121ull, 14420081533813608588ull,
+ 15979994981537457091ull, 3269452188546956372ull}},
+{{15304074748362742651ull, 13413415898839622831ull,
+ 1528249653212269748ull, 4086815235683695466ull}},
+{{16482575745367796013ull, 17606756973629540077ull,
+ 5566842051685056496ull, 2554259522302309666ull}},
+{{6768161626427581304ull, 3561702143327373481ull,
+ 16181924601461096429ull, 3192824402877887082ull}},
+{{13071888051461864534ull, 9063813697586604755ull,
+ 11004033714971594728ull, 3991030503597358853ull}},
+{{5864087022949971382ull, 5664883560991627972ull,
+ 9183364081070940657ull, 2494394064748349283ull}},
+{{7330108778687464227ull, 11692790469666922869ull,
+ 6867519082911287917ull, 3117992580935436604ull}},
+{{13774321991786718188ull, 780930031801489874ull,
+ 8584398853639109897ull, 3897490726169295755ull}},
+{{13220637263294086772ull, 12017296315944400931ull,
+ 3059406274310749733ull, 2435931703855809847ull}},
+{{11914110560690220560ull, 1186562339648337452ull,
+ 17659315898170600879ull, 3044914629819762308ull}},
+{{14892638200862775700ull, 15318260979842585527ull,
+ 3627400799003699482ull, 3806143287274702886ull}},
+{{16225427903180316669ull, 14185599130829003858ull,
+ 16102183554659475888ull, 2378839554546689303ull}},
+{{11058412842120620028ull, 17731998913536254823ull,
+ 15516043424896956956ull, 2973549443183361629ull}},
+{{9211330034223387131ull, 3718254568210766913ull,
+ 5559996225839032484ull, 3716936803979202037ull}},
+{{17286296317458086717ull, 11547281141986505128ull,
+ 5780840650363089254ull, 2323085502487001273ull}},
+{{3161126323113056780ull, 5210729390628355603ull,
+ 11837736831381249472ull, 2903856878108751591ull}},
+{{17786465959173484687ull, 6513411738285444503ull,
+ 10185485020799173936ull, 3629821097635939489ull}},
+{{17621396430539467955ull, 8141764672856805629ull,
+ 17343542294426355324ull, 4537276372044924361ull}},
+{{13319215778300861424ull, 14311974957390279326ull,
+ 3922184906375390221ull, 2835797732528077726ull}},
+{{7425647686021300972ull, 4054910641455685446ull,
+ 14126103169824013585ull, 3544747165660097157ull}},
+{{58687570671850406ull, 9680324320246994712ull, 3822570906997853269ull,
+ 4430933957075121447ull}},
+{{36679731669906504ull, 8356045709368065647ull, 9306635844514740149ull,
+ 2769333723171950904ull}},
+{{13880907719869546842ull, 15056743155137469962ull,
+ 11633294805643425186ull, 3461667153964938630ull}},
+{{8127762612982157745ull, 9597556907067061645ull,
+ 5318246470199505675ull, 4327083942456173288ull}},
+{{7385694642327542543ull, 3692630057703219576ull,
+ 3323904043874691047ull, 2704427464035108305ull}},
+{{9232118302909428178ull, 4101553701636566ull, 8766566073270751713ull,
+ 3380534330043885381ull}},
+{{2316775841782009414ull, 4616812960554433612ull,
+ 15569893610015827545ull, 4225667912554856726ull}},
+{{10671356937968531692ull, 14414723146414990767ull,
+ 5119497487832504311ull, 2641042445346785454ull}},
+{{8727510154033276711ull, 13406717914591350555ull,
+ 15622743896645406197ull, 3301303056683481817ull}},
+{{6297701674114207985ull, 2923339337957024482ull,
+ 5693371815524594035ull, 4126628820854352272ull}},
+{{8547749564748767895ull, 17967988150718997965ull,
+ 3558357384702871271ull, 2579143013033970170ull}},
+{{15296372974363347772ull, 17848299169971359552ull,
+ 13671318767733364897ull, 3223928766292462712ull}},
+{{673722144244633099ull, 8475315907182035729ull,
+ 17089148459666706122ull, 4029910957865578390ull}},
+{{11950291386221365447ull, 9908758460416160234ull,
+ 6069031768864303422ull, 2518694348665986494ull}},
+{{5714492195921931001ull, 3162576038665424485ull,
+ 16809661747935155086ull, 3148367935832483117ull}},
+{{11754801263329801655ull, 13176592085186556414ull,
+ 7177019129636780145ull, 3935459919790603897ull}},
+{{2735064771153738131ull, 1317841025600515903ull,
+ 16014852002091457351ull, 2459662449869127435ull}},
+{{17253889019224336375ull, 15482359337282808590ull,
+ 15406878984186933784ull, 3074578062336409294ull}},
+{{12343989237175644661ull, 906205097893959122ull,
+ 10035226693378891423ull, 3843222577920511618ull}},
+{{12326679291662165817ull, 7483907213824806307ull,
+ 10883702701789195043ull, 2402014111200319761ull}},
+{{10796663096150319367ull, 4743197998853619980ull,
+ 18216314395663881708ull, 3002517639000399701ull}},
+{{13495828870187899209ull, 5928997498567024975ull,
+ 8935334939297688423ull, 3753147048750499627ull}},
+{{15352422071508518862ull, 10623152464245472465ull,
+ 3278741327847361312ull, 2345716905469062267ull}},
+{{5355469534103484865ull, 13278940580306840582ull,
+ 17933484715091365352ull, 2932146131836327833ull}},
+{{15917708954484131889ull, 16598675725383550727ull,
+ 8581797838582042978ull, 3665182664795409792ull}},
+{{15285450174677776957ull, 11524972619874662601ull,
+ 10727247298227553723ull, 4581478330994262240ull}},
+{{2635877331532528743ull, 4897264878207970174ull,
+ 6704529561392221077ull, 2863423956871413900ull}},
+{{12518218701270436736ull, 10733267116187350621ull,
+ 8380661951740276346ull, 3579279946089267375ull}},
+{{1812715321305882208ull, 4193211858379412469ull,
+ 5864141421247957529ull, 4474099932611584219ull}},
+{{3438790085029870332ull, 14149972457555602553ull,
+ 1359245379066279503ull, 2796312457882240137ull}},
+{{8910173624714725819ull, 13075779553517115287ull,
+ 6310742742260237283ull, 3495390572352800171ull}},
+{{6526031012466019370ull, 11733038423469006205ull,
+ 3276742409397908700ull, 4369238215441000214ull}},
+{{6384612392004956058ull, 16556521051522904686ull,
+ 15883022061155856649ull, 2730773884650625133ull}},
+{{17204137526860970881ull, 6860593259121467145ull,
+ 6018719521162657100ull, 3413467355813281417ull}},
+{{7670113853294049889ull, 8575741573901833932ull,
+ 12135085419880709279ull, 4266834194766601771ull}},
+{{14017193195163556989ull, 12277367511329728063ull,
+ 5278585378211749347ull, 2666771371729126107ull}},
+{{12909805475527058332ull, 10735023370734772175ull,
+ 1986545704337298780ull, 3333464214661407634ull}},
+{{11525570825981435011ull, 13418779213418465219ull,
+ 11706554167276399283ull, 4166830268326759542ull}},
+{{4897638757024702930ull, 6080893999172846810ull,
+ 2704910336120361648ull, 2604268917704224714ull}},
+{{15345420483135654470ull, 7601117498966058512ull,
+ 12604509957005227868ull, 3255336147130280892ull}},
+{{735031530210016471ull, 9501396873707573141ull,
+ 15755637446256534835ull, 4069170183912851115ull}},
+{{2765237715594954247ull, 3632530036853539261ull,
+ 7541430394696640320ull, 2543231364945531947ull}},
+{{8068233162921080712ull, 4540662546066924076ull,
+ 4815101974943412496ull, 3179039206181914934ull}},
+{{10085291453651350890ull, 5675828182583655095ull,
+ 15242249505534041428ull, 3973799007727393667ull}},
+{{13220836186173176163ull, 12770764650969560242ull,
+ 7220562931745081940ull, 2483624379829621042ull}},
+{{7302673195861694395ull, 15963455813711950303ull,
+ 18249075701536128233ull, 3104530474787026302ull}},
+{{4516655476399730090ull, 6119261711857774167ull,
+ 13587972590065384484ull, 3880663093483782878ull}},
+{{9740438700390913162ull, 13047910606765884662ull,
+ 3880796850363477398ull, 2425414433427364299ull}},
+{{2952176338633865645ull, 7086516221602580020ull, 239310044526958844ull,
+ 3031768041784205374ull}},
+{{3690220423292332056ull, 8858145277003225025ull,
+ 9522509592513474363ull, 3789710052230256717ull}},
+{{13835602810626177295ull, 3230497788913321688ull,
+ 8257411504534615429ull, 2368568782643910448ull}},
+{{17294503513282721619ull, 8649808254569040014ull,
+ 10321764380668269286ull, 2960710978304888060ull}},
+{{12394757354748626215ull, 1588888281356524210ull,
+ 12902205475835336608ull, 3700888722881110075ull}},
+{{12358409365145279289ull, 993055175847827631ull,
+ 5758035413183391428ull, 2313055451800693797ull}},
+{{10836325688004211207ull, 1241318969809784539ull,
+ 11809230284906627189ull, 2891319314750867246ull}},
+{{8933721091577876105ull, 6163334730689618578ull,
+ 5538165819278508178ull, 3614149143438584058ull}},
+{{1943779327617569323ull, 16927540450216799031ull,
+ 16146079310952911030ull, 4517686429298230072ull}},
+{{8132391107402062683ull, 5968026762958111490ull,
+ 10091299569345569394ull, 2823554018311393795ull}},
+{{942116847397802545ull, 16683405490552415171ull,
+ 8002438443254573838ull, 3529442522889242244ull}},
+{{15012704114529416894ull, 11630884826335743155ull,
+ 10003048054068217298ull, 4411803153611552805ull}},
+{{7077097062367191607ull, 11880989034887227376ull,
+ 8557748043006329763ull, 2757376971007220503ull}},
+{{8846371327958989508ull, 10239550275181646316ull,
+ 6085499035330524300ull, 3446721213759025629ull}},
+{{11057964159948736885ull, 12799437843977057895ull,
+ 12218559812590543279ull, 4308401517198782036ull}},
+{{13828756627609042409ull, 14917177680126743040ull,
+ 16859971919723865357ull, 2692750948249238772ull}},
+{{17285945784511303012ull, 4811414044876265088ull,
+ 2628220825945280081ull, 3365938685311548466ull}},
+{{3160688156929577148ull, 10625953574522719265ull,
+ 12508648069286375909ull, 4207423356639435582ull}},
+{{13504645144149455478ull, 8947063993290393492ull,
+ 3206219024876597039ull, 2629639597899647239ull}},
+{{16880806430186819347ull, 6572143973185603961ull,
+ 17842831836377910011ull, 3287049497374559048ull}},
+{{7265949982451360472ull, 3603493948054617048ull,
+ 3856795721762835898ull, 4108811871718198811ull}},
+{{4541218739032100295ull, 6863869735961523559ull, 104654316888078484ull,
+ 2568007419823874257ull}},
+{{1064837405362737465ull, 8579837169951904449ull,
+ 4742503914537486009ull, 3210009274779842821ull}},
+{{5942732775130809735ull, 15336482480867268465ull,
+ 10539815911599245415ull, 4012511593474803526ull}},
+{{15243423030525225845ull, 16502830578183124646ull,
+ 1975698926322140480ull, 2507819745921752204ull}},
+{{9830906751301756498ull, 2181794149019354192ull,
+ 2469623657902675601ull, 3134774682402190255ull}},
+{{12288633439127195622ull, 7338928704701580644ull,
+ 16922087627660508213ull, 3918468353002737818ull}},
+{{16903767936309273072ull, 6892673449652181854ull,
+ 15187990785715205537ull, 2449042720626711136ull}},
+{{11906337883531815532ull, 13227527830492615222ull,
+ 538244408434455305ull, 3061303400783388921ull}},
+{{5659550317559993606ull, 2699351732833605316ull,
+ 5284491528970457036ull, 3826629250979236151ull}},
+{{12760590985329771812ull, 10910466869875779130ull,
+ 10220336233247617503ull, 2391643281862022594ull}},
+{{6727366694807438957ull, 9026397568917336009ull,
+ 3552048254704746071ull, 2989554102327528243ull}},
+{{13020894386936686600ull, 6671310942719282107ull,
+ 18275118373663096301ull, 3736942627909410303ull}},
+{{5832215982621735173ull, 6475412348413245269ull,
+ 18339478011180517044ull, 2335589142443381439ull}},
+{{11901955996704556871ull, 8094265435516556586ull,
+ 18312661495548258401ull, 2919486428054226799ull}},
+{{5654072959025920280ull, 14729517812823083637ull,
+ 18279140851007935097ull, 3649358035067783499ull}},
+{{11679277217209788254ull, 4576839210746690834ull,
+ 18237240045332530968ull, 4561697543834729374ull}},
+{{11911234279183505563ull, 2860524506716681771ull,
+ 6786589009905443951ull, 2851060964896705859ull}},
+{{10277356830551994050ull, 17410713688678015926ull,
+ 3871550243954417034ull, 3563826206120882324ull}},
+{{3623324001335216754ull, 12540020073992744100ull,
+ 4839437804943021293ull, 4454782757651102905ull}},
+{{11487949537689286279ull, 10143355555459159014ull,
+ 14553863674157858068ull, 2784239223531939315ull}},
+{{5136564885256832041ull, 12679194444323948768ull,
+ 13580643574269934681ull, 3480299029414924144ull}},
+{{6420706106571040051ull, 2013935000122772248ull,
+ 16975804467837418352ull, 4350373786768655180ull}},
+{{4012941316606900032ull, 1258709375076732655ull,
+ 1386505755543610662ull, 2718983616730409488ull}},
+{{404490627331237136ull, 10796758755700691627ull,
+ 1733132194429513327ull, 3398729520913011860ull}},
+{{14340671339446210132ull, 8884262426198476629ull,
+ 2166415243036891659ull, 4248411901141264825ull}},
+{{11268762596367575285ull, 3246821007160353941ull,
+ 12883224572966527047ull, 2655257438213290515ull}},
+{{250895190177305394ull, 17893584314232606139ull,
+ 11492344697780770904ull, 3319071797766613144ull}},
+{{14148677043003795454ull, 3920236319081206057ull,
+ 14365430872225963631ull, 4148839747208266430ull}},
+{{1925394124236290303ull, 9367676727066835642ull,
+ 4366708276713839365ull, 2593024842005166519ull}},
+{{11630114692150138687ull, 16321281927260932456ull,
+ 846699327464911302ull, 3241281052506458149ull}},
+{{14537643365187673358ull, 11178230372221389762ull,
+ 5670060177758527032ull, 4051601315633072686ull}},
+{{13697713121669683753ull, 6986393982638368601ull,
+ 17378845666381243107ull, 2532250822270670428ull}},
+{{3287083346804940979ull, 4121306459870572848ull,
+ 3276813009267002268ull, 3165313527838338036ull}},
+{{4108854183506176224ull, 5151633074838216060ull,
+ 4096016261583752835ull, 3956641909797922545ull}},
+{{11791405901546135948ull, 913927662560191085ull,
+ 14089225209558315282ull, 2472901193623701590ull}},
+{{904199321650506223ull, 10365781615055014665ull,
+ 8388159475093118294ull, 3091126492029626988ull}},
+{{5741935170490520683ull, 3733854981963992523ull,
+ 10485199343866397868ull, 3863908115037033735ull}},
+{{1282866472342881475ull, 11557031400582271135ull,
+ 13470778617557580523ull, 2414942571898146084ull}},
+{{15438641145710765555ull, 9834603232300451014ull,
+ 16838473271946975654ull, 3018678214872682605ull}},
+{{10074929395283681136ull, 3069882003520787960ull,
+ 7213033534651555856ull, 3773347768590853257ull}},
+{{6296830872052300710ull, 1918676252200492475ull,
+ 16037361005225692170ull, 2358342355369283285ull}},
+{{3259352571637987984ull, 11621717352105391402ull,
+ 6211643201249951500ull, 2947927944211604107ull}},
+{{13297562751402260787ull, 14527146690131739252ull,
+ 3152867983135051471ull, 3684909930264505134ull}},
+{{16621953439252825984ull, 13547247344237286161ull,
+ 13164457015773590147ull, 4606137412830631417ull}},
+{{3471191871891934384ull, 6161186580934609899ull,
+ 1310256607217411986ull, 2878835883019144636ull}},
+{{18174047895147081692ull, 16924855263023038181ull,
+ 1637820759021764982ull, 3598544853773930795ull}},
+{{8882501813651688403ull, 11932697041924021919ull,
+ 15882334004059369940ull, 4498181067217413493ull}},
+{{12469092661173387108ull, 16681307688057289507ull,
+ 12232301761750800164ull, 2811363167010883433ull}},
+{{10974679808039345981ull, 2404890536362060268ull,
+ 1455319146906336494ull, 3514203958763604292ull}},
+{{13718349760049182476ull, 12229485207307351143ull,
+ 1819148933632920617ull, 4392754948454505365ull}},
+{{15491497627671820904ull, 725899226926012608ull,
+ 3442811092734269338ull, 2745471842784065853ull}},
+{{917627960880224514ull, 10130746070512291569ull,
+ 8915199884345224576ull, 3431839803480082316ull}},
+{{5758720969527668546ull, 12663432588140364461ull,
+ 11143999855431530720ull, 4289799754350102895ull}},
+{{5905043615168486793ull, 7914645367587727788ull,
+ 13882528937285788556ull, 2681124846468814309ull}},
+{{7381304518960608492ull, 9893306709484659735ull,
+ 3518103116325071983ull, 3351406058086017887ull}},
+{{4614944630273372710ull, 7754947368428436765ull,
+ 18232686950688503691ull, 4189257572607522358ull}},
+{{5190183403134551896ull, 2540999096054079026ull,
+ 6783743325752926903ull, 2618285982879701474ull}},
+{{15711101290772965678ull, 17011306925349762494ull,
+ 17703051194045934436ull, 3272857478599626842ull}},
+{{10415504576611431290ull, 2817389582977651502ull,
+ 12905441955702642238ull, 4091071848249533553ull}},
+{{1898004341954756652ull, 15595926544643195901ull,
+ 1148372194673069542ull, 2556919905155958471ull}},
+{{6984191445870833719ull, 10271536143949219068ull,
+ 15270523298623500640ull, 3196149881444948088ull}},
+{{8730239307338542149ull, 12839420179936523835ull,
+ 641410049569824184ull, 3995187351806185111ull}},
+{{3150556557872894891ull, 8024637612460327397ull,
+ 7318410308622221971ull, 2496992094878865694ull}},
+{{8549881715768506518ull, 5419110997148021342ull,
+ 18371384922632553272ull, 3121240118598582117ull}},
+{{1463980107855857339ull, 6773888746435026678ull,
+ 9129173098008527878ull, 3901550148248227647ull}},
+{{14750045622692074549ull, 18068738521804055385ull,
+ 12623262213896411779ull, 2438468842655142279ull}},
+{{4602498973082929474ull, 17974237133827681328ull,
+ 11167391748943126820ull, 3048086053318927849ull}},
+{{5753123716353661843ull, 4021052343575050044ull, 124181630896744814ull,
+ 3810107566648659812ull}},
+{{12819074359575814460ull, 16348215770016569989ull,
+ 9300985556165241316ull, 2381317229155412382ull}},
+{{2188784894187604363ull, 1988525638811160871ull,
+ 2402859908351775838ull, 2976646536444265478ull}},
+{{16571039173016669165ull, 11709029085368726896ull,
+ 12226946922294495605ull, 3720808170555331847ull}},
+{{10356899483135418228ull, 9623986187569148262ull,
+ 14559370854075141609ull, 2325505106597082404ull}},
+{{3722752317064496977ull, 16641668752888823232ull,
+ 18199213567593927011ull, 2906881383246353005ull}},
+{{4653440396330621222ull, 16190399922683641136ull,
+ 8913958904210245052ull, 3633601729057941257ull}},
+{{5816800495413276527ull, 1791255829644999804ull,
+ 15754134648690194220ull, 4542002161322426571ull}},
+{{12858872346488073638ull, 10342906930382900685ull,
+ 7540491146217677435ull, 2838751350826516607ull}},
+{{2238532377827928335ull, 8316947644551237953ull,
+ 4813927914344708890ull, 3548439188533145759ull}},
+{{7409851490712298322ull, 1172812518834271633ull,
+ 1405723874503498209ull, 4435548985666432199ull}},
+{{16160372227763656212ull, 12262222870339889530ull,
+ 7796106449205768236ull, 2772218116041520124ull}},
+{{10977093247849794457ull, 15327778587924861913ull,
+ 9745133061507210295ull, 3465272645051900155ull}},
+{{18333052578239630975ull, 14548037216478689487ull,
+ 7569730308456624965ull, 4331590806314875194ull}},
+{{18375686889040851215ull, 11398366269512874881ull,
+ 9342767461212778507ull, 2707244253946796996ull}},
+{{9134550556018900307ull, 9636271818463705698ull,
+ 11678459326515973134ull, 3384055317433496245ull}},
+{{2194816158168849576ull, 2821967736224856315ull, 763016102862802706ull,
+ 4230069146791870307ull}},
+{{17512661163351388649ull, 6375415853567923100ull,
+ 16617786128785109355ull, 2643793216744918941ull}},
+{{3444082380479684195ull, 3357583798532515972ull,
+ 6937174605699222982ull, 3304741520931148677ull}},
+{{4305102975599605244ull, 13420351785020420773ull,
+ 13283154275551416631ull, 4130926901163935846ull}},
+{{4996532368963447229ull, 15305248893278844839ull,
+ 3690285403792247490ull, 2581829313227459904ull}},
+{{1633979442776921133ull, 9908189079743780241ull,
+ 4612856754740309363ull, 3227286641534324880ull}},
+{{6654160321898539320ull, 7773550331252337397ull,
+ 5766070943425386704ull, 4034108301917906100ull}},
+{{6464693210400281027ull, 4858468957032710873ull,
+ 12827166376495642498ull, 2521317688698691312ull}},
+{{12692552531427739188ull, 15296458233145664399ull,
+ 16033957970619553122ull, 3151647110873364140ull}},
+{{11254004645857286080ull, 9897200754577304691ull,
+ 1595703389564889787ull, 3939558888591705176ull}},
+{{4727909894447109848ull, 3879907462397121480ull, 997314618478056117ull,
+ 2462224305369815735ull}},
+{{5909887368058887310ull, 9461570346423789754ull,
+ 15081701328379733858ull, 3077780381712269668ull}},
+{{16610731246928384946ull, 2603590896174961384ull,
+ 405382586765115707ull, 3847225477140337086ull}},
+{{10381707029330240591ull, 17768145374605208529ull,
+ 14088422172010361028ull, 2404515923212710678ull}},
+{{17588819805090188643ull, 3763437644546959045ull,
+ 8387155678158175478ull, 3005644904015888348ull}},
+{{8150966701080572092ull, 13927669092538474615ull,
+ 10483944597697719347ull, 3757056130019860435ull}},
+{{12011883215816439414ull, 6398950173622852682ull,
+ 4246622364347380640ull, 2348160081262412772ull}},
+{{5791481982915773459ull, 7998687717028565853ull,
+ 5308277955434225800ull, 2935200101578015965ull}},
+{{11851038497072104727ull, 9998359646285707316ull,
+ 11247033462720170154ull, 3669000126972519956ull}},
+{{14813798121340130909ull, 3274577521002358337ull,
+ 14058791828400212693ull, 4586250158715649945ull}},
+{{2341094798196499962ull, 4352453959840167913ull,
+ 1869215865109051077ull, 2866406349197281216ull}},
+{{7538054516173012857ull, 10052253468227597795ull,
+ 2336519831386313846ull, 3583007936496601520ull}},
+{{4810882126788878167ull, 3341944798429721436ull,
+ 2920649789232892308ull, 4478759920620751900ull}},
+{{12230173366097824663ull, 11312087535873351705ull,
+ 11048778155125333500ull, 2799224950387969937ull}},
+{{1452658652340117116ull, 14140109419841689632ull,
+ 18422658712334054779ull, 3499031187984962421ull}},
+{{1815823315425146395ull, 13063450756374724136ull,
+ 9193265335135404762ull, 4373788984981203027ull}},
+{{1134889572140716497ull, 12776342741161590489ull,
+ 3439947825245934024ull, 2733618115613251892ull}},
+{{6030297983603283525ull, 15970428426451988111ull,
+ 4299934781557417530ull, 3417022644516564865ull}},
+{{2926186461076716502ull, 10739663496210209331ull,
+ 9986604495374159817ull, 4271278305645706081ull}},
+{{17969767602668805478ull, 18241504731199850591ull,
+ 17770842855677319645ull, 2669548941028566300ull}},
+{{17850523484908618944ull, 8966822858717649527ull,
+ 3766809495887097941ull, 3336936176285707876ull}},
+{{17701468337708385775ull, 15820214591824449813ull,
+ 4708511869858872426ull, 4171170220357134845ull}},
+{{13369260720281435062ull, 14499320138317669037ull,
+ 5248662927875489218ull, 2606981387723209278ull}},
+{{2876517845069630115ull, 8900778136042310489ull,
+ 15784200696699137331ull, 3258726734654011597ull}},
+{{8207333324764425548ull, 6514286651625500207ull,
+ 5895192815591757952ull, 4073408418317514497ull}},
+{{12047112355618847824ull, 4071429157265937629ull,
+ 15213710555813318480ull, 2545880261448446560ull}},
+{{1223832389241396067ull, 5089286446582422037ull, 570394121057096484ull,
+ 3182350326810558201ull}},
+{{6141476504979132988ull, 6361608058228027546ull,
+ 5324678669748758509ull, 3977937908513197751ull}},
+{{8450108834039346022ull, 6281848045606211168ull,
+ 10245453196234055924ull, 2486211192820748594ull}},
+{{10562636042549182527ull, 7852310057007763960ull,
+ 3583444458437794097ull, 3107763991025935743ull}},
+{{13203295053186478159ull, 14427073589687092854ull,
+ 18314363628329406333ull, 3884704988782419678ull}},
+{{3640373389814160945ull, 11322764002768126986ull,
+ 6834791249278491054ull, 2427940617989012299ull}},
+{{13773838774122476989ull, 4930082966605382924ull,
+ 3931803043170725914ull, 3034925772486265374ull}},
+{{17217298467653096237ull, 15385975745111504463ull,
+ 14138125840818183200ull, 3793657215607831717ull}},
+{{17678340569924267004ull, 9616234840694690289ull,
+ 11142171659725058452ull, 2371035759754894823ull}},
+{{8262867657123170043ull, 12020293550868362862ull,
+ 9316028556228935161ull, 2963794699693618529ull}},
+{{1105212534549186746ull, 1190308883303289866ull,
+ 16256721713713556856ull, 3704743374617023161ull}},
+{{5302443852520629620ull, 743943052064556166ull, 3242922043429891179ull,
+ 2315464609135639476ull}},
+{{15851426852505562833ull, 14764986870362858919ull,
+ 4053652554287363973ull, 2894330761419549345ull}},
+{{15202597547204565637ull, 4621175532671409937ull,
+ 9678751711286592871ull, 3617913451774436681ull}},
+{{5168188878723543335ull, 1164783397411874518ull,
+ 16710125657535628993ull, 4522391814718045851ull}},
+{{17065176104484378296ull, 12257204669450891333ull,
+ 8137985526746074168ull, 2826494884198778657ull}},
+{{7496412075323309158ull, 15321505836813614167ull,
+ 14784167926859980614ull, 3533118605248473321ull}},
+{{4758829075726748544ull, 9928510259162241901ull,
+ 4645151853292812056ull, 4416398256560591652ull}},
+{{5280111181542911792ull, 6205318911976401188ull,
+ 12126591945162783343ull, 2760248910350369782ull}},
+{{6600138976928639740ull, 3144962621543113581ull,
+ 5934867894598703371ull, 3450311137937962228ull}},
+{{12861859739588187579ull, 17766261332211055688ull,
+ 7418584868248379213ull, 4312888922422452785ull}},
+{{8038662337242617237ull, 13409756341845603757ull,
+ 16165830588723706768ull, 2695555576514032990ull}},
+{{14660013939980659450ull, 16762195427307004696ull,
+ 10983916199049857652ull, 3369444470642541238ull}},
+{{18325017424975824312ull, 2506000210424204254ull,
+ 4506523211957546258ull, 4211805588303176548ull}},
+{{6841449872182502291ull, 6177936149942515563ull,
+ 12039949044328242219ull, 2632378492689485342ull}},
+{{3940126321800739960ull, 3110734169000756550ull,
+ 5826564268555526966ull, 3290473115861856678ull}},
+{{14148529939105700758ull, 13111789748105721495ull,
+ 16506577372549184515ull, 4113091394827320847ull}},
+{{15760360239582144830ull, 5889025583352381982ull,
+ 17234139885484322178ull, 2570682121767075529ull}},
+{{10477078262622905229ull, 16584654016045253286ull,
+ 7707616801573239010ull, 3213352652208844412ull}},
+{{3872975791423855729ull, 11507445483201790800ull,
+ 9634521001966548763ull, 4016690815261055515ull}},
+{{2420609869639909831ull, 4886310417787425298ull,
+ 3715732617015399025ull, 2510431759538159697ull}},
+{{12249134373904663096ull, 10719574040661669526ull,
+ 9256351789696636685ull, 3138039699422699621ull}},
+{{6088045930526053062ull, 18011153569254474812ull,
+ 16182125755548183760ull, 3922549624278374526ull}},
+{{13028400743433558972ull, 11256970980784046757ull,
+ 5502142578790226946ull, 2451593515173984079ull}},
+{{2450442874009785003ull, 4847841689125282639ull,
+ 2265992205060395779ull, 3064491893967480099ull}},
+{{16898111647794394965ull, 1448116092979215394ull,
+ 16667548311607658436ull, 3830614867459350123ull}},
+{{15173005798298884757ull, 10128444594966785429ull,
+ 8111374685541092570ull, 2394134292162093827ull}},
+{{5131199192591442235ull, 3437183706853705979ull,
+ 5527532338498977809ull, 2992667865202617284ull}},
+{{1802312972311914889ull, 8908165651994520378ull,
+ 6909415423123722261ull, 3740834831503271605ull}},
+{{5738131626122334710ull, 7873446541710269188ull,
+ 6624227648666020365ull, 2338021769689544753ull}},
+{{7172664532652918387ull, 14453494195565224389ull,
+ 12891970579259913360ull, 2922527212111930941ull}},
+{{13577516684243535888ull, 18066867744456530486ull,
+ 2279905168792727988ull, 3653159015139913677ull}},
+{{7748523818449644052ull, 4136840606861111492ull,
+ 7461567479418297890ull, 4566448768924892096ull}},
+{{14066199423385803341ull, 7197211397715582586ull,
+ 4663479674636436181ull, 2854030480578057560ull}},
+{{8359377242377478368ull, 13608200265571866137ull,
+ 5829349593295545226ull, 3567538100722571950ull}},
+{{15060907571399235864ull, 7786878295110056863ull,
+ 16510059028474207341ull, 4459422625903214937ull}},
+{{16330596259765604271ull, 7172641943657479491ull,
+ 3401257865155297732ull, 2787139141189509336ull}},
+{{15801559306279617434ull, 8965802429571849364ull,
+ 4251572331444122165ull, 3483923926486886670ull}},
+{{1305205059139970177ull, 15818939055392199610ull,
+ 14537837451159928514ull, 4354904908108608337ull}},
+{{5427439180389869265ull, 14498522928047512660ull,
+ 2168619379333873465ull, 2721815567567880211ull}},
+{{6784298975487336581ull, 4288095604777227113ull,
+ 16545832279449505544ull, 3402269459459850263ull}},
+{{13092059737786558630ull, 5360119505971533891ull,
+ 16070604330884494026ull, 4252836824324812829ull}},
+{{5876694326902905192ull, 7961760709659596586ull,
+ 12349970716016502718ull, 2658023015203008018ull}},
+{{16569239945483407298ull, 728828850219719924ull,
+ 6214091358165852590ull, 3322528769003760023ull}},
+{{2264805858144707506ull, 10134408099629425714ull,
+ 3155928179279927833ull, 4153160961254700029ull}},
+{{6027189679767830095ull, 17863220108336860831ull,
+ 4278298121263648847ull, 2595725600784187518ull}},
+{{2922301081282399715ull, 17717339116993688135ull,
+ 14571244688434336867ull, 3244657000980234397ull}},
+{{17487934406885163356ull, 17534987877814722264ull,
+ 4378997805260757372ull, 4055821251225292997ull}},
+{{10929959004303227098ull, 1735995386779425607ull,
+ 5042716637501667310ull, 2534888282015808123ull}},
+{{9050762736951645968ull, 11393366270329057817ull,
+ 1691709778449696233ull, 3168610352519760154ull}},
+{{15925139439616945364ull, 406649782629158559ull,
+ 11338009259916896100ull, 3960762940649700192ull}},
+{{16870741177401672709ull, 9477528150997999907ull,
+ 7086255787448060062ull, 2475476837906062620ull}},
+{{16476740453324702982ull, 2623538151892724076ull,
+ 8857819734310075078ull, 3094346047382578275ull}},
+{{2149181492946327111ull, 12502794726720680904ull,
+ 6460588649460205943ull, 3867932559228222844ull}},
+{{1343238433091454444ull, 14731775731841507421ull,
+ 13261239942767404522ull, 2417457849517639277ull}},
+{{6290734059791705959ull, 9191347627947108468ull,
+ 2741491873177091941ull, 3021822311897049097ull}},
+{{7863417574739632449ull, 16100870553361273489ull,
+ 8038550859898752830ull, 3777277889871311371ull}},
+{{16443851030280740041ull, 5451358077423408026ull,
+ 2718251278223026567ull, 2360798681169569607ull}},
+{{11331441750996149243ull, 2202511578351872129ull,
+ 17232872153060946921ull, 2950998351461962008ull}},
+{{329244133463022842ull, 7364825491367228066ull, 3094346117616632035ull,
+ 3688747939327452511ull}},
+{{9634927203683554360ull, 4594345845781647178ull,
+ 17702990702302953756ull, 4610934924159315638ull}},
+{{10633515520729609379ull, 12094838190468305294ull,
+ 6452683170511958193ull, 2881834327599572274ull}},
+{{4068522364057235916ull, 1283489682803217906ull,
+ 17289225999994723550ull, 3602292909499465342ull}},
+{{14309024991926320703ull, 10827734140358798190ull,
+ 12388160463138628629ull, 4502866136874331678ull}},
+{{4331454601526562535ull, 9073176846937942821ull,
+ 3130914271034254989ull, 2814291335546457299ull}},
+{{10026004270335591073ull, 15953157077099816430ull,
+ 17748700894074982448ull, 3517864169433071623ull}},
+{{3309133301064713033ull, 1494702272665218922ull,
+ 17574190099166340157ull, 4397330211791339529ull}},
+{{6679894331592833550ull, 3240031929629455778ull,
+ 4066339784337880742ull, 2748331382369587206ull}},
+{{17573239951345817745ull, 13273411948891595530ull,
+ 14306296767277126735ull, 3435414227961984007ull}},
+{{12743177902327496374ull, 11980078917687106509ull,
+ 13271184940669020515ull, 4294267784952480009ull}},
+{{10270329198168379186ull, 5181706314340747616ull,
+ 1376961560277055966ull, 2683917365595300006ull}},
+{{12837911497710473982ull, 15700504929780710328ull,
+ 10944573987201095765ull, 3354896706994125007ull}},
+{{16047389372138092477ull, 5790573106943724198ull,
+ 9069031465573981803ull, 4193620883742656259ull}},
+{{5417932339158919894ull, 1313265182626133672ull,
+ 3362301656770044675ull, 2621013052339160162ull}},
+{{6772415423948649868ull, 15476639533564830802ull,
+ 13426249107817331651ull, 3276266315423950202ull}},
+{{17688891316790588143ull, 14734113398528650598ull,
+ 7559439347916888756ull, 4095332894279937753ull}},
+{{6443871054566729685ull, 18432192910935182432ull,
+ 16253864638516525232ull, 2559583058924961095ull}},
+{{8054838818208412107ull, 4593497064959426424ull,
+ 15705644779718268637ull, 3199478823656201369ull}},
+{{10068548522760515133ull, 10353557349626670934ull,
+ 5796997919365672084ull, 3999348529570251712ull}},
+{{1681156808297934054ull, 15694345380371445142ull,
+ 3623123699603545052ull, 2499592830981407320ull}},
+{{11324818047227193376ull, 1171187651754754811ull,
+ 4528904624504431316ull, 3124491038726759150ull}},
+{{9544336540606603816ull, 1463984564693443514ull,
+ 14884502817485314953ull, 3905613798408448937ull}},
+{{10576896356306515289ull, 12444205399001871956ull,
+ 2385285233287239989ull, 2441008624005280586ull}},
+{{13221120445383144111ull, 1720198693470176233ull,
+ 12204978578463825795ull, 3051260780006600732ull}},
+{{2691342501446766427ull, 15985306422119884004ull,
+ 15256223223079782243ull, 3814075975008250915ull}},
+{{10905461100259004825ull, 7684973504611233550ull,
+ 7229296505211169950ull, 2383797484380156822ull}},
+{{4408454338468980223ull, 382844843909266130ull,
+ 18259992668368738246ull, 2979746855475196027ull}},
+{{14733939959941001087ull, 9701928091741358470ull,
+ 18213304817033534903ull, 3724683569343995034ull}},
+{{4597026456535737775ull, 12981234084979430900ull,
+ 15995001529073347218ull, 2327927230839996896ull}},
+{{5746283070669672219ull, 7003170569369512817ull,
+ 1547007837632132407ull, 2909909038549996121ull}},
+{{11794539856764478178ull, 4142277193284503117ull,
+ 6545445815467553413ull, 3637386298187495151ull}},
+{{908116765673434010ull, 9789532510033016801ull, 3570121250907053862ull,
+ 4546732872734368939ull}},
+{{12096788024614366017ull, 1506771800343247596ull,
+ 18372226846312766328ull, 2841708045458980586ull}},
+{{15120985030767957521ull, 1883464750429059495ull,
+ 13741911521036182102ull, 3552135056823725733ull}},
+{{14289545270032558997ull, 11577702974891100177ull,
+ 3342331346013063915ull, 4440168821029657167ull}},
+{{2013436766129267517ull, 4930221350093243659ull,
+ 9006486118899246803ull, 2775105513143535729ull}},
+{{16351854012943748108ull, 1551090669189166669ull,
+ 15869793667051446408ull, 3468881891429419661ull}},
+{{6604759460897521423ull, 1938863336486458337ull,
+ 6002184028532144298ull, 4336102364286774577ull}},
+{{15657189709129420650ull, 5823475603731424364ull,
+ 15280580063901059946ull, 2710063977679234110ull}},
+{{1124743062702224196ull, 16502716541519056264ull,
+ 9877353043021549124ull, 3387579972099042638ull}},
+{{1405928828377780245ull, 2181651603189268714ull,
+ 3123319266922160598ull, 4234474965123803298ull}},
+{{5490391536163500557ull, 15198590307275456658ull,
+ 6563760560253738277ull, 2646546853202377061ull}},
+{{16086361457059151504ull, 5163179828812157110ull,
+ 12816386718744560751ull, 3308183566502971326ull}},
+{{10884579784469163572ull, 1842288767587808484ull,
+ 6797111361575925131ull, 4135229458128714158ull}},
+{{16026234402148003041ull, 17292331544238237966ull,
+ 18083252656267116918ull, 2584518411330446348ull}},
+{{10809420965830227993ull, 12392042393443021650ull,
+ 4157321746624344532ull, 3230648014163057936ull}},
+{{4288404170433009183ull, 15490052991803777063ull,
+ 5196652183280430665ull, 4038310017703822420ull}},
+{{9597781634161712596ull, 2763754092236278808ull,
+ 12471279651405044974ull, 2523943761064889012ull}},
+{{11997227042702140744ull, 12678064652150124318ull,
+ 15589099564256306217ull, 3154929701331111265ull}},
+{{5773161766522900122ull, 2012522759905491686ull,
+ 5651316400038219060ull, 3943662126663889082ull}},
+{{17443284159358976289ull, 10481198761795708111ull,
+ 8143758768451274816ull, 2464788829164930676ull}},
+{{17192419180771332457ull, 13101498452244635139ull,
+ 10179698460564093520ull, 3080986036456163345ull}},
+{{16878837957536777667ull, 16376873065305793924ull,
+ 17336309094132504804ull, 3851232545570204181ull}},
+{{1325901686605710234ull, 1012173628961345395ull,
+ 13141036193046509455ull, 2407020340981377613ull}},
+{{15492435163539301504ull, 15100275091483845455ull,
+ 2591237186025973106ull, 3008775426226722017ull}},
+{{14753857935996738976ull, 9651971827500031011ull,
+ 7850732500959854287ull, 3760969282783402521ull}},
+{{6915318200784267908ull, 12950011419828601238ull,
+ 16435922859168378689ull, 2350605801739626575ull}},
+{{17867519787835110693ull, 2352456219503587835ull,
+ 15933217555533085458ull, 2938257252174533219ull}},
+{{17722713716366500462ull, 12163942311234260602ull,
+ 15304835925988968918ull, 3672821565218166524ull}},
+{{12930020108603349770ull, 5981555852188049945ull,
+ 684300833776659532ull, 4591026956522708156ull}},
+{{1163733540236011750ull, 12961844444472307024ull,
+ 9651060057965188015ull, 2869391847826692597ull}},
+{{1454666925295014688ull, 11590619537162995876ull,
+ 16675511090883872923ull, 3586739809783365746ull}},
+{{1818333656618768360ull, 9876588403026356941ull,
+ 11621016826750065346ull, 4483424762229207183ull}},
+{{3442301544600424177ull, 10784553770318860992ull,
+ 14180664544359872697ull, 2802140476393254489ull}},
+{{4302876930750530221ull, 18092378231325964144ull,
+ 3890772625167677159ull, 3502675595491568112ull}},
+{{5378596163438162776ull, 18003786770730067276ull,
+ 4863465781459596449ull, 4378344494364460140ull}},
+{{12584994639003627543ull, 4334837704065210191ull,
+ 12263038150267023589ull, 2736465308977787587ull}},
+{{11119557280327146525ull, 10030233148508900643ull,
+ 10717111669406391582ull, 3420581636222234484ull}},
+{{9287760581981545252ull, 3314419398781349996ull,
+ 13396389586757989478ull, 4275727045277793105ull}},
+{{15028222400593241591ull, 15906570179520507459ull,
+ 1455214464082661567ull, 2672329403298620691ull}},
+{{14173591982314164084ull, 15271526705973246420ull,
+ 15654076135385490671ull, 3340411754123275863ull}},
+{{17716989977892705105ull, 14477722364039170121ull,
+ 14955909150804475435ull, 4175514692654094829ull}},
+{{4155589708541858835ull, 6742733468310787374ull,
+ 11653286228466491099ull, 2609696682908809268ull}},
+{{14417859172532099352ull, 3816730816961096313ull,
+ 14566607785583113874ull, 3262120853636011585ull}},
+{{4187265910382960477ull, 13994285558056146200ull,
+ 4373201676696728630ull, 4077651067045014482ull}},
+{{2617041193989350299ull, 4134742455357703471ull,
+ 7344937066362843298ull, 2548531916903134051ull}},
+{{17106359547768851585ull, 14391800106051905146ull,
+ 4569485314526166218ull, 3185664896128917564ull}},
+{{12159577397856288673ull, 8766378095710105625ull,
+ 5711856643157707773ull, 3982081120161146955ull}},
+{{682206846019098565ull, 7784829319032509968ull, 1264067392759873406ull,
+ 2488800700100716847ull}},
+{{852758557523873206ull, 507664611935861652ull, 15415142296232005470ull,
+ 3111000875125896058ull}},
+{{1065948196904841508ull, 9857952801774602873ull,
+ 10045555833435231029ull, 3888751093907370073ull}},
+{{12195432669133995702ull, 8467063510322820747ull,
+ 17807687441965489153ull, 2430469433692106295ull}},
+{{10632604817990106724ull, 15195515406330913838ull,
+ 17647923284029473537ull, 3038086792115132869ull}},
+{{4067383985632857597ull, 5159336202631478586ull,
+ 8224846049754678210ull, 3797608490143916087ull}},
+{{7153801009447923902ull, 7836271145072062020ull,
+ 12058057808737755737ull, 2373505306339947554ull}},
+{{8942251261809904878ull, 14407024949767465429ull,
+ 5849200224067418863ull, 2966881632924934443ull}},
+{{15789500095689769001ull, 13397095168781943882ull,
+ 2699814261656885675ull, 3708602041156168054ull}},
+{{14480123578233493530ull, 6067341471275020974ull,
+ 15522441968817717259ull, 2317876275722605033ull}},
+{{8876782435937091104ull, 2972490820666388314ull,
+ 5567994405739982862ull, 2897345344653256292ull}},
+{{1872606008066588072ull, 12938985562687761201ull,
+ 6959993007174978577ull, 3621681680816570365ull}},
+{{6952443528510622994ull, 2338673898077537789ull,
+ 13311677277396111126ull, 4527102101020712956ull}},
+{{6651120214532833323ull, 15296729241580624830ull,
+ 17543170335227345261ull, 2829438813137945597ull}},
+{{17537272305020817462ull, 5285853496693617325ull,
+ 8093904863752017865ull, 3536798516422431997ull}},
+{{8086532325993858115ull, 11219002889294409561ull,
+ 14729067098117410235ull, 4420998145528039996ull}},
+{{16583297749814631082ull, 4706033796595312023ull,
+ 18429038973178157205ull, 2763123840955024997ull}},
+{{16117436168840900949ull, 10494228264171527933ull,
+ 9201240661190532794ull, 3453904801193781247ull}},
+{{6311737155768962474ull, 3894413293359634109ull,
+ 6889864808060778089ull, 4317381001492226559ull}},
+{{6250678731569295498ull, 13963223354418241078ull,
+ 11223694532679068161ull, 2698363125932641599ull}},
+{{17036720451316395181ull, 3618971137740637635ull,
+ 9417932147421447298ull, 3372953907415801999ull}},
+{{16684214545718106072ull, 13747085959030572852ull,
+ 7160729165849421218ull, 4216192384269752499ull}},
+{{1204262054219040487ull, 13203614742821495937ull,
+ 2169612719442194309ull, 2635120240168595312ull}},
+{{6117013586201188513ull, 2669460373244706209ull,
+ 2712015899302742887ull, 3293900300210744140ull}},
+{{12257953001178873545ull, 17171883521838046473ull,
+ 3390019874128428608ull, 4117375375263430175ull}},
+{{743691598095714110ull, 10732427201148779046ull,
+ 9036291448971349736ull, 2573359609539643859ull}},
+{{10152986534474418445ull, 13415534001435973807ull,
+ 6683678292786799266ull, 3216699511924554824ull}},
+{{8079547149665635152ull, 7546045464940191451ull,
+ 8354597865983499083ull, 4020874389905693530ull}},
+{{2743873959327328018ull, 2410435406373925705ull,
+ 9833309684667074831ull, 2513046493691058456ull}},
+{{8041528467586547927ull, 16848102313249570843ull,
+ 12291637105833843538ull, 3141308117113823070ull}},
+{{5440224566055797004ull, 11836755854707187746ull,
+ 6141174345437528615ull, 3926635146392278838ull}},
+{{8011826372212261032ull, 14315501436833074197ull,
+ 17673292021180619096ull, 2454146966495174273ull}},
+{{14626468983692714194ull, 17894376796041342746ull,
+ 8256556971193610158ull, 3067683708118967842ull}},
+{{9059714192761116934ull, 13144598958196902625ull,
+ 1097324177137236890ull, 3834604635148709803ull}},
+{{17191536416544167844ull, 12827060367300452044ull,
+ 16826728675206630720ull, 2396627896967943626ull}},
+{{3042676446970658189ull, 16033825459125565056ull,
+ 11810038807153512592ull, 2995784871209929533ull}},
+{{3803345558713322736ull, 1595537750197404704ull, 927490453659727029ull,
+ 3744731089012411917ull}},
+{{2377090974195826710ull, 3303054103087071892ull,
+ 2885524542751023345ull, 2340456930632757448ull}},
+{{2971363717744783387ull, 8740503647286227769ull,
+ 3606905678438779181ull, 2925571163290946810ull}},
+{{8325890665608367138ull, 15537315577535172615ull,
+ 13732004134903249784ull, 3656963954113683512ull}},
+{{5795677313583071019ull, 974900398209414153ull,
+ 17165005168629062231ull, 4571204942642104390ull}},
+{{15151513367057889147ull, 7526841776521965701ull,
+ 6116442211965775990ull, 2857003089151315244ull}},
+{{5104333653540197721ull, 185180183797681319ull, 7645552764957219988ull,
+ 3571253861439144055ull}},
+{{1768731048497859248ull, 231475229747101649ull, 4945254937769137081ull,
+ 4464067326798930069ull}},
+{{12634671951379631790ull, 11673887064660408290ull,
+ 5396627345319404627ull, 2790042079249331293ull}},
+{{6569967902369763929ull, 9980672812398122459ull,
+ 11357470200076643688ull, 3487552599061664116ull}},
+{{3600773859534817007ull, 12475841015497653074ull,
+ 14196837750095804610ull, 4359440748827080145ull}},
+{{6862169680636648534ull, 12409086653113421075ull,
+ 1955494566168796025ull, 2724650468016925091ull}},
+{{3966026082368422763ull, 1676300261109612632ull,
+ 16279426262993158744ull, 3405813085021156363ull}},
+{{4957532602960528454ull, 2095375326387015790ull,
+ 15737596810314060526ull, 4257266356276445454ull}},
+{{16933515932132493996ull, 15144667634274048580ull,
+ 5224311988018899924ull, 2660791472672778409ull}},
+{{2720150841456065879ull, 484090469133009110ull,
+ 11142076003451012810ull, 3325989340840973011ull}},
+{{12623560588674858156ull, 9828485123271037195ull,
+ 9315908985886378108ull, 4157486676051216264ull}},
+{{5583882358708092396ull, 15366175238899174055ull,
+ 5822443116178986317ull, 2598429172532010165ull}},
+{{2368166929957727591ull, 5372660993341803857ull,
+ 11889739913651120801ull, 3248036465665012706ull}},
+{{7571894680874547392ull, 11327512260104642725ull,
+ 5638802855209125193ull, 4060045582081265883ull}},
+{{7038277184760286072ull, 162166134924319847ull, 1218408775292009294ull,
+ 2537528488800791177ull}},
+{{4186160462522969686ull, 9426079705510175617ull,
+ 6134696987542399521ull, 3171910611000988971ull}},
+{{9844386596581100012ull, 16394285650315107425ull,
+ 3056685216000611497ull, 3964888263751236214ull}},
+{{17681956668931657268ull, 3328899503805860284ull,
+ 15745486315282545898ull, 2478055164844522633ull}},
+{{3655701762455019968ull, 13384496416612101164ull,
+ 5846799838821018660ull, 3097568956055653292ull}},
+{{4569627203068774960ull, 16730620520765126455ull,
+ 7308499798526273325ull, 3871961195069566615ull}},
+{{9773546029559066206ull, 12762480834691897986ull,
+ 11485341401720002684ull, 2419975746918479134ull}},
+{{2993560500094056950ull, 15953101043364872483ull,
+ 5133304715295227547ull, 3024969683648098918ull}},
+{{17577008680399734899ull, 15329690285778702699ull,
+ 15640002930973810242ull, 3781212104560123647ull}},
+{{8679787416036140360ull, 14192742447039077091ull,
+ 16692530859499713257ull, 2363257565350077279ull}},
+{{6238048251617787546ull, 3905870003516682652ull,
+ 16253977555947253668ull, 2954071956687596599ull}},
+{{7797560314522234432ull, 4882337504395853315ull,
+ 15705785926506679181ull, 3692589945859495749ull}},
+{{2567632187362702568ull, 5357303949461102274ull,
+ 12121959213280368440ull, 2307868716162184843ull}},
+{{12432912271058154018ull, 6696629936826377842ull,
+ 10540762998173072646ull, 2884835895202731054ull}},
+{{6317768301967916715ull, 17594159457887748111ull,
+ 3952581710861564999ull, 3606044869003413818ull}},
+{{3285524359032507990ull, 17381013303932297235ull,
+ 14164099175431732057ull, 4507556086254267272ull}},
+{{18194353788891175158ull, 3945604287316603915ull,
+ 8852561984644832536ull, 2817222553908917045ull}},
+{{18131256217686581043ull, 4932005359145754894ull,
+ 15677388499233428574ull, 3521528192386146306ull}},
+{{13440698235253450496ull, 15388378735786969426ull,
+ 10373363587187009909ull, 4401910240482682883ull}},
+{{13012122415460794464ull, 11923579719080549843ull,
+ 4177509232778187241ull, 2751193900301676802ull}},
+{{11653467000898605176ull, 1069416593568523592ull,
+ 14445258577827509860ull, 3438992375377096002ull}},
+{{14566833751123256470ull, 1336770741960654490ull,
+ 8833201185429611517ull, 4298740469221370003ull}},
+{{13715957112879423198ull, 3141324722939103008ull,
+ 3214907731679813246ull, 2686712793263356252ull}},
+{{17144946391099278997ull, 13150027940528654568ull,
+ 4018634664599766557ull, 3358390991579195315ull}},
+{{2984438915164547130ull, 2602476870378654499ull, 411607312322320293ull,
+ 4197988739473994144ull}},
+{{18006175386473699620ull, 3932391053200353013ull,
+ 257254570201450183ull, 2623742962171246340ull}},
+{{8672661177809960813ull, 303802798073053363ull, 321568212751812729ull,
+ 3279678702714057925ull}},
+{{6229140453835063113ull, 4991439516018704608ull,
+ 5013646284367153815ull, 4099598378392572406ull}},
+{{3893212783646914446ull, 10037178725152772236ull,
+ 16968586983011634846ull, 2562248986495357753ull}},
+{{4866515979558643057ull, 3323101369586189487ull,
+ 7375675673482379846ull, 3202811233119197192ull}},
+{{1471458956020915917ull, 13377248748837512667ull,
+ 9219594591852974807ull, 4003514041398996490ull}},
+{{17060562912008930112ull, 15278309495664527272ull,
+ 10373932638335497158ull, 2502196275874372806ull}},
+{{2878959566301611024ull, 9874514832725883283ull,
+ 3744043761064595640ull, 3127745344842966008ull}},
+{{17433757513159177492ull, 12343143540907354103ull,
+ 4680054701330744550ull, 3909681681053707510ull}},
+{{17813627473365567789ull, 3102778694639708410ull,
+ 16760092243613879056ull, 2443551050658567193ull}},
+{{13043662304852183928ull, 3878473368299635513ull,
+ 7115057249235185108ull, 3054438813323208992ull}},
+{{2469519825783066198ull, 4848091710374544392ull,
+ 8893821561543981385ull, 3818048516654011240ull}},
+{{1543449891114416374ull, 14559272365052560005ull,
+ 5558638475964988365ull, 2386280322908757025ull}},
+{{6540998382320408371ull, 4364032401033536294ull,
+ 11559984113383623361ull, 2982850403635946281ull}},
+{{17399620014755286272ull, 10066726519719308271ull,
+ 614922086447365489ull, 3728563004544932852ull}},
+{{17792291536863135776ull, 17820919120893037429ull,
+ 9607698340884379238ull, 2330351877840583032ull}},
+{{8405306365796756008ull, 13052776864261520979ull,
+ 12009622926105474048ull, 2912939847300728790ull}},
+{{5894946938818557106ull, 16315971080326901224ull,
+ 5788656620777066752ull, 3641174809125910988ull}},
+{{7368683673523196382ull, 1948219776699074914ull,
+ 7235820775971333441ull, 4551468511407388735ull}},
+{{9217113314379385643ull, 12746852406505391581ull,
+ 11439917012623165256ull, 2844667819629617959ull}},
+{{16133077661401619958ull, 15933565508131739476ull,
+ 9688210247351568666ull, 3555834774537022449ull}},
+{{1719603003042473331ull, 10693584848309898538ull,
+ 16721948827616848737ull, 4444793468171278061ull}},
+{{5686437895328933736ull, 18212705576262156346ull,
+ 12757061026474224412ull, 2777995917607048788ull}},
+{{16331419406015942978ull, 4319137896618143816ull,
+ 15946326283092780516ull, 3472494897008810985ull}},
+{{1967530183810377106ull, 5398922370772679771ull,
+ 6097849798583811933ull, 4340618621261013732ull}},
+{{17370607429377343356ull, 5680169490946618808ull,
+ 13034528160969658266ull, 2712886638288133582ull}},
+{{3266515213012127578ull, 16323583900538049319ull,
+ 7069788164357297024ull, 3391108297860166978ull}},
+{{17918202071547323185ull, 1957735801963010032ull,
+ 18060607242301397089ull, 4238885372325208722ull}},
+{{11198876294717076991ull, 12752799922295351030ull,
+ 15899565544865761084ull, 2649303357703255451ull}},
+{{4775223331541570430ull, 15940999902869188788ull,
+ 15262770912654813451ull, 3311629197129069314ull}},
+{{5969029164426963038ull, 15314563860159098081ull,
+ 9855091603963741006ull, 4139536496411336643ull}},
+{{15259858273835321659ull, 4959916394172048396ull,
+ 3853589243263644177ull, 2587210310257085402ull}},
+{{628078768584600457ull, 10811581511142448400ull,
+ 14040358590934331029ull, 3234012887821356752ull}},
+{{785098460730750572ull, 18126162907355448404ull,
+ 17550448238667913786ull, 4042516109776695940ull}},
+{{9714058574811494915ull, 15940537835524543156ull,
+ 1745658112312670308ull, 2526572568610434963ull}},
+{{12142573218514368644ull, 1478928220696127329ull,
+ 16017130695673001598ull, 3158215710763043703ull}},
+{{1343158467860797093ull, 11072032312724934970ull,
+ 15409727351163864093ull, 3947769638453804629ull}},
+{{5451160060840386087ull, 9225863204666778308ull,
+ 11936922603691109010ull, 2467356024033627893ull}},
+{{6813950076050482609ull, 2308956968978697077ull,
+ 1086095199331722551ull, 3084195030042034867ull}},
+{{13129123613490491165ull, 16721254266505535058ull,
+ 15192677054446816900ull, 3855243787552543583ull}},
+{{12817388276858944882ull, 1227411879711183603ull,
+ 16412952186670342419ull, 2409527367220339739ull}},
+{{11410049327646293199ull, 15369322904921143216ull,
+ 15904504214910540119ull, 3011909209025424674ull}},
+{{14262561659557866498ull, 14599967612724041116ull,
+ 10657258231783399341ull, 3764886511281780843ull}},
+{{18137473074078442370ull, 11430822767166219649ull,
+ 4354943385650930636ull, 2353054069551113027ull}},
+{{8836783287315889250ull, 14288528458957774562ull,
+ 831993213636275391ull, 2941317586938891284ull}},
+{{1822607072290085754ull, 13248974555269830299ull,
+ 1039991517045344239ull, 3676646983673614105ull}},
+{{16113316895644770905ull, 11949532175659899969ull,
+ 5911675414734068203ull, 4595808729592017631ull}},
+{{3153294032136899960ull, 5162614600573743529ull,
+ 10612326161849874483ull, 2872380455995011019ull}},
+{{8553303558598512854ull, 1841582232289791507ull,
+ 8653721683884955200ull, 3590475569993763774ull}},
+{{6079943429820753163ull, 2301977790362239384ull,
+ 1593780068001418192ull, 4488094462492204718ull}},
+{{3799964643637970727ull, 1438736118976399615ull,
+ 14831170597783050082ull, 2805059039057627948ull}},
+{{138269786120075505ull, 11021792185575275327ull, 92219173519260986ull,
+ 3506323798822034936ull}},
+{{14007895287932258093ull, 4553868195114318350ull,
+ 115273966899076233ull, 4382904748527543670ull}},
+{{4143248536530273404ull, 14375382668014918729ull,
+ 13907104284594086357ull, 2739315467829714793ull}},
+{{9790746689090229659ull, 4134170279736484699ull,
+ 3548822300460444235ull, 3424144334787143492ull}},
+{{7626747342935399170ull, 556026831243217970ull, 4436027875575555294ull,
+ 4280180418483929365ull}},
+{{9378403107762012385ull, 14182574824809174943ull,
+ 5078360431448416010ull, 2675112761552455853ull}},
+{{7111317866275127577ull, 8504846494156692871ull,
+ 10959636557737907917ull, 3343890951940569816ull}},
+{{4277461314416521568ull, 15242744136123253993ull,
+ 13699545697172384896ull, 4179863689925712270ull}},
+{{14202628367578795740ull, 9526715085077033745ull,
+ 3950530042305352656ull, 2612414806203570169ull}},
+{{3918227404191330963ull, 11908393856346292182ull,
+ 9549848571309078724ull, 3265518507754462711ull}},
+{{14121156292093939511ull, 14885492320432865227ull,
+ 7325624695708960501ull, 4081898134693078389ull}},
+{{6519879673345018243ull, 11609275709484234719ull,
+ 6884358444031794265ull, 2551186334183173993ull}},
+{{3538163573253884899ull, 676536581573129687ull,
+ 13217134073467130736ull, 3188982917728967491ull}},
+{{18257762521849519836ull, 845670726966412108ull,
+ 11909731573406525516ull, 3986228647161209364ull}},
+{{2187729539301174090ull, 9751916241208783376ull,
+ 16666954270233854255ull, 2491392904475755852ull}},
+{{2734661924126467612ull, 7578209283083591316ull,
+ 2386948764082766203ull, 3114241130594694816ull}},
+{{3418327405158084515ull, 4861075585427101241ull,
+ 2983685955103457754ull, 3892801413243368520ull}},
+{{13665669674292272582ull, 7649858259319326179ull,
+ 1864803721939661096ull, 2433000883277105325ull}},
+{{12470401074437952823ull, 9562322824149157724ull,
+ 6942690670851964274ull, 3041251104096381656ull}},
+{{15588001343047441029ull, 2729531493331671347ull,
+ 8678363338564955343ull, 3801563880120477070ull}},
+{{7436657830190956691ull, 8623486210973376448ull, 812291068175709185ull,
+ 2375977425075298169ull}},
+{{9295822287738695864ull, 15391043782144108464ull,
+ 5627049853647024385ull, 2969971781344122711ull}},
+{{11619777859673369830ull, 5403746672397971868ull,
+ 2422126298631392578ull, 3712464726680153389ull}},
+{{16485733199150631952ull, 7989027688676120321ull,
+ 3819671945858314313ull, 2320290454175095868ull}},
+{{6772108443656126228ull, 14597970629272538306ull,
+ 4774589932322892891ull, 2900363067718869835ull}},
+{{17688507591424933593ull, 13635777268163284978ull,
+ 1356551396976228210ull, 3625453834648587294ull}},
+{{12887262452426391183ull, 7821349548349330415ull,
+ 10919061283075061071ull, 4531817293310734117ull}},
+{{14972068060407576345ull, 11805872495359413365ull,
+ 9130256311135607121ull, 2832385808319208823ull}},
+{{4880027020227306720ull, 922282563917102995ull, 6801134370492120998ull,
+ 3540482260399011029ull}},
+{{1488347756856745495ull, 10376225241751154552ull,
+ 13113103981542539151ull, 4425602825498763786ull}},
+{{930217348035465935ull, 13402669803735553451ull,
+ 12807376006891474873ull, 2766001765936727366ull}},
+{{14997829740326496130ull, 2918279199387278101ull,
+ 6785847971759567784ull, 3457502207420909208ull}},
+{{4912229120125956451ull, 3647848999234097627ull,
+ 8482309964699459730ull, 4321877759276136510ull}},
+{{764300190865028830ull, 6891591642948698921ull, 689757709509774427ull,
+ 2701173599547585319ull}},
+{{5567061257008673941ull, 4002803535258485747ull,
+ 14697255192169381746ull, 3376466999434481648ull}},
+{{2347140552833454522ull, 14226876455927882992ull,
+ 18371568990211727182ull, 4220583749293102060ull}},
+{{1466962845520909077ull, 4280111766527538966ull,
+ 2258858582027553681ull, 2637864843308188788ull}},
+{{11057075593755912154ull, 9961825726586811611ull,
+ 2823573227534442101ull, 3297331054135235985ull}},
+{{9209658473767502288ull, 17063968176660902418ull,
+ 8141152552845440530ull, 4121663817669044981ull}},
+{{10367722564532076834ull, 15276666128840451915ull,
+ 7394063354742094283ull, 2576039886043153113ull}},
+{{8347967187237708139ull, 14484146642623176990ull,
+ 13854265211855005758ull, 3220049857553941391ull}},
+{{1211586947192359365ull, 8881811266424195430ull,
+ 12706145496391369294ull, 4025062321942426739ull}},
+{{14592299897277388315ull, 939446023087734239ull,
+ 5635497926030911857ull, 2515663951214016712ull}},
+{{13628688853169347490ull, 5785993547287055703ull,
+ 7044372407538639821ull, 3144579939017520890ull}},
+{{12424175048034296459ull, 11844177952536207533ull,
+ 18028837546278075584ull, 3930724923771901112ull}},
+{{10070952414235129239ull, 7402611220335129708ull,
+ 11268023466423797240ull, 2456703077357438195ull}},
+{{12588690517793911548ull, 9253264025418912135ull,
+ 9473343314602358646ull, 3070878846696797744ull}},
+{{11124177128815001531ull, 2343207994918864361ull,
+ 11841679143252948308ull, 3838598558370997180ull}},
+{{35081677868294101ull, 10687877033679066034ull,
+ 16624421501387868500ull, 2399124098981873237ull}},
+{{9267224134190143434ull, 13359846292098832542ull,
+ 6945468821452671913ull, 2998905123727341547ull}},
+{{2360658130882903485ull, 2864749809841376966ull,
+ 4070150008388451988ull, 3748631404659176934ull}},
+{{15310469387083978390ull, 11013840668005636411ull,
+ 16378901810524946204ull, 2342894627911985583ull}},
+{{14526400715427585084ull, 13767300835007045514ull,
+ 15861941244728794851ull, 2928618284889981979ull}},
+{{8934628857429705547ull, 12597440025331418989ull,
+ 15215740537483605660ull, 3660772856112477474ull}},
+{{15779972090214519837ull, 15746800031664273736ull,
+ 9796303634999731267ull, 4575966070140596843ull}},
+{{9862482556384074898ull, 7535907010576477133ull,
+ 3816846762661138090ull, 2859978793837873027ull}},
+{{16939789213907481527ull, 196511726365820608ull, 159372434899034709ull,
+ 3574973492297341284ull}},
+{{2727992443674800292ull, 4857325676384663665ull, 199215543623793386ull,
+ 4468716865371676605ull}},
+{{13234210323365219943ull, 7647514566167802694ull,
+ 2430352723978564818ull, 2792948040857297878ull}},
+{{7319390867351749121ull, 336021170854977560ull,
+ 12261312941827981831ull, 3491185051071622347ull}},
+{{9149238584189686401ull, 14255084518850885662ull,
+ 10714955158857589384ull, 4363981313839527934ull}},
+{{1106588096691166097ull, 8909427824281803539ull,
+ 2085160955858605461ull, 2727488321149704959ull}},
+{{15218293176146121333ull, 15748470798779642327ull,
+ 16441509250105420538ull, 3409360401437131198ull}},
+{{14411180451755263762ull, 10462216461619777101ull,
+ 11328514525776999865ull, 4261700501796413998ull}},
+{{11312830791560733803ull, 18068100334580830448ull,
+ 2468635560183237011ull, 2663562813622758749ull}},
+{{14141038489450917254ull, 17973439399798650156ull,
+ 7697480468656434168ull, 3329453517028448436ull}},
+{{17676298111813646567ull, 4020055176038761079ull,
+ 9621850585820542711ull, 4161816896285560545ull}},
+{{17965215347524610961ull, 9430063512665307530ull,
+ 17542871662206308954ull, 2601135560178475340ull}},
+{{13233147147550987893ull, 2564207353976858605ull,
+ 3481845504048334577ull, 3251419450223094176ull}},
+{{2706375879156571154ull, 7816945210898461161ull,
+ 4352306880060418221ull, 4064274312778867720ull}},
+{{13220699970541326731ull, 7191433766025232177ull,
+ 2720191800037761388ull, 2540171445486792325ull}},
+{{2690816907894494702ull, 8989292207531540222ull,
+ 8011925768474589639ull, 3175214306858490406ull}},
+{{12586893171722894185ull, 6624929240987037373ull,
+ 791535173738461241ull, 3969017883573113008ull}},
+{{10172651241540502818ull, 15669795821685368118ull,
+ 494709483586538275ull, 2480636177233195630ull}},
+{{3492442015070852714ull, 14975558758679322244ull,
+ 9841758891337948652ull, 3100795221541494537ull}},
+{{4365552518838565893ull, 272704374639601189ull,
+ 16913884632599823720ull, 3875994026926868171ull}},
+{{5034313333487797635ull, 170440234149750743ull, 8265334886161195873ull,
+ 2422496266829292607ull}},
+{{1681205648432359140ull, 4824736311114576333ull,
+ 5719982589274106937ull, 3028120333536615759ull}},
+{{6713193078967836829ull, 10642606407320608320ull,
+ 2538292218165245767ull, 3785150416920769699ull}},
+{{4195745674354898018ull, 13569158032216462056ull,
+ 17727333700849136268ull, 2365719010575481061ull}},
+{{5244682092943622523ull, 16961447540270577570ull,
+ 8324109070779256623ull, 2957148763219351327ull}},
+{{15779224653034303961ull, 16590123406910834058ull,
+ 5793450320046682875ull, 3696435954024189159ull}},
+{{14473701426573827880ull, 8062984120105577334ull,
+ 10538435477670258653ull, 2310272471265118224ull}},
+{{8868754746362509042ull, 14690416168559359572ull,
+ 13173044347087823316ull, 2887840589081397780ull}},
+{{11085943432953136302ull, 18363020210699199465ull,
+ 16466305433859779145ull, 3609800736351747225ull}},
+{{22371235909256665ull, 9118717208091835620ull, 6747823737042560220ull,
+ 4512250920439684032ull}},
+{{9237354059298061224ull, 14922570291912173070ull,
+ 4217389835651600137ull, 2820156825274802520ull}},
+{{2323320537267800722ull, 4818154809608052626ull,
+ 5271737294564500172ull, 3525196031593503150ull}},
+{{12127522708439526710ull, 6022693512010065782ull,
+ 15813043655060401023ull, 4406495039491878937ull}},
+{{2968015674347316290ull, 10681712472647372970ull,
+ 2965623256771668783ull, 2754059399682424336ull}},
+{{12933391629788921171ull, 8740454572381828308ull,
+ 3707029070964585979ull, 3442574249603030420ull}},
+{{16166739537236151463ull, 6313882197049897481ull,
+ 4633786338705732474ull, 4303217812003788025ull}},
+{{3186683183131512809ull, 8557862391583573830ull,
+ 14425331507759552556ull, 2689511132502367515ull}},
+{{13206726015769166819ull, 10697327989479467287ull,
+ 13419978366272052791ull, 3361888915627959394ull}},
+{{11896721501284070619ull, 8759973968421946205ull,
+ 7551600920985290181ull, 4202361144534949243ull}},
+{{9741293947516238089ull, 7780826739477410330ull,
+ 2413907566402112411ull, 2626475715334343277ull}},
+{{2953245397540521803ull, 5114347405919375009ull,
+ 7629070476430028418ull, 3283094644167929096ull}},
+{{8303242765353040158ull, 15616306294253994569ull,
+ 9536338095537535522ull, 4103868305209911370ull}},
+{{16718741774414119859ull, 14371877452336134509ull,
+ 10571897328138347605ull, 2564917690756194606ull}},
+{{7063369162735486112ull, 4129788760138004425ull,
+ 3991499623318158699ull, 3206147113445243258ull}},
+{{13440897471846745543ull, 550549931745117627ull,
+ 14212746566002474182ull, 4007683891806554072ull}},
+{{6094717910690522013ull, 14179151762622862229ull,
+ 8882966603751546363ull, 2504802432379096295ull}},
+{{12230083406790540420ull, 13112253684851189882ull,
+ 6492022236262045050ull, 3131003040473870369ull}},
+{{6064232221633399717ull, 7166945069209211545ull,
+ 12726713813754944217ull, 3913753800592337961ull}},
+{{15319360184589344583ull, 16008555714324226975ull,
+ 1036667105955758279ull, 2446096125370211226ull}},
+{{14537514212309292825ull, 15399008624477895815ull,
+ 10519205919299473657ull, 3057620156712764032ull}},
+{{13560206746959228127ull, 5413702725315206057ull,
+ 13149007399124342072ull, 3822025195890955040ull}},
+{{1557600189208435723ull, 3383564203322003786ull,
+ 8218129624452713795ull, 2388765747431846900ull}},
+{{11170372273365320462ull, 18064513309434668444ull,
+ 10272662030565892243ull, 2985957184289808625ull}},
+{{13962965341706650578ull, 17968955618365947651ull,
+ 17452513556634753208ull, 3732446480362260781ull}},
+{{6421010329352962659ull, 11230597261478717282ull,
+ 13213663982110414707ull, 2332779050226412988ull}},
+{{17249634948545979132ull, 9426560558421008698ull,
+ 16517079977638018384ull, 2915973812783016235ull}},
+{{12338671648827698107ull, 11783200698026260873ull,
+ 16034663953620135076ull, 3644967265978770294ull}},
+{{1588281505752458921ull, 14729000872532826092ull,
+ 10819957905170393037ull, 4556209082473462868ull}},
+{{10216047977950062634ull, 11511468554546710259ull,
+ 15985845727586271456ull, 2847630676545914292ull}},
+{{8158373954010190388ull, 14389335693183387824ull,
+ 1535563085773287704ull, 3559538345682392866ull}},
+{{10197967442512737985ull, 17986669616479234780ull,
+ 11142825894071385438ull, 4449422932102991082ull}},
+{{15597101688425237049ull, 6629982491872133833ull,
+ 11575952202222003803ull, 2780889332564369426ull}},
+{{5661319055249382599ull, 3675792096412779388ull,
+ 5246568215922728946ull, 3476111665705461783ull}},
+{{7076648819061728249ull, 13818112157370750043ull,
+ 1946524251476023278ull, 4345139582131827229ull}},
+{{2117062502699886204ull, 4024634079929330873ull,
+ 3522420666386208501ull, 2715712238832392018ull}},
+{{7258014146802245659ull, 9642478618339051495ull,
+ 13626397869837536434ull, 3394640298540490022ull}},
+{{4460831665075419169ull, 2829726236069038561ull,
+ 7809625300442144735ull, 4243300373175612528ull}},
+{{14317234836740606741ull, 8686107925184230956ull,
+ 4881015812776340459ull, 2652062733234757830ull}},
+{{17896543545925758426ull, 6245948888052900791ull,
+ 15324641802825201382ull, 3315078416543447287ull}},
+{{17758993413979810128ull, 17030808146920901797ull,
+ 14544116235104113823ull, 4143848020679309109ull}},
+{{13405213892951075282ull, 17561784119466645479ull,
+ 11395915656153765091ull, 2589905012924568193ull}},
+{{12144831347761456199ull, 17340544130905918945ull,
+ 409836514910042652ull, 3237381266155710242ull}},
+{{1345981129419656536ull, 3228936089922847066ull,
+ 9735667680492329124ull, 4046726582694637802ull}},
+{{5452924224314673239ull, 11241457093056555224ull,
+ 10696478318735093606ull, 2529204114184148626ull}},
+{{6816155280393341549ull, 4828449329465918222ull,
+ 4147225861564091200ull, 3161505142730185783ull}},
+{{17743566137346452744ull, 6035561661832397777ull,
+ 572346308527726096ull, 3951881428412732229ull}},
+{{4172199808200451109ull, 3772226038645248611ull,
+ 2663559452043522762ull, 2469925892757957643ull}},
+{{603563741823175983ull, 13938654585161336572ull,
+ 17164507370336567164ull, 3087407365947447053ull}},
+{{754454677278969978ull, 17423318231451670715ull,
+ 7620576157638545243ull, 3859259207434308817ull}},
+{{16612435237795213901ull, 8583730885443600244ull,
+ 16292075144592560537ull, 2412037004646443010ull}},
+{{2318799973534465760ull, 15341349625231888210ull,
+ 11141721893885924863ull, 3015046255808053763ull}},
+{{12121872003772858007ull, 14565001013112472358ull,
+ 9315466348930018175ull, 3768807819760067204ull}},
+{{2964483983930648351ull, 16020654660836377080ull,
+ 15045538504936037167ull, 2355504887350042002ull}},
+{{3705604979913310438ull, 15414132307618083446ull,
+ 9583551094315270651ull, 2944381109187552503ull}},
+{{13855378261746413856ull, 14655979366095216403ull,
+ 7367752849466700410ull, 3680476386484440629ull}},
+{{12707536808755629416ull, 9096602170764244696ull,
+ 13821377080260763417ull, 4600595483105550786ull}},
+{{7942210505472268385ull, 17214591402796122695ull,
+ 13250046693590365039ull, 2875372176940969241ull}},
+{{5316077113412947577ull, 16906553235067765465ull,
+ 2727500311705792587ull, 3594215221176211552ull}},
+{{11256782410193572375ull, 16521505525407318927ull,
+ 3409375389632240734ull, 4492769026470264440ull}},
+{{13953018034012064591ull, 5714254934952186425ull,
+ 2130859618520150459ull, 2807980641543915275ull}},
+{{3606214487232917026ull, 2531132650262845128ull,
+ 16498632578432351786ull, 3509975801929894093ull}},
+{{4507768109041146283ull, 12387287849683332218ull,
+ 6788232667758276020ull, 4387469752412367617ull}},
+{{7429041086578104331ull, 16965426942906858444ull,
+ 15771860463417392272ull, 2742168595257729760ull}},
+{{9286301358222630413ull, 2760039604924021439ull,
+ 1268081505562188725ull, 3427710744072162201ull}},
+{{6996190679350900113ull, 8061735524582414703ull,
+ 6196787900380123810ull, 4284638430090202751ull}},
+{{11290148202235394427ull, 9650270721291397093ull,
+ 10790521465378659237ull, 2677899018806376719ull}},
+{{277627197512079321ull, 16674524420041634271ull,
+ 8876465813295936142ull, 3347373773507970899ull}},
+{{14182092052172262863ull, 11619783488197267030ull,
+ 6483896248192532274ull, 4184217216884963624ull}},
+{{4252121514180276386ull, 11874050698550679798ull,
+ 4052435155120332671ull, 2615135760553102265ull}},
+{{14538523929580121290ull, 10230877354760961843ull,
+ 9677229962327803743ull, 3268919700691377831ull}},
+{{13561468893547763708ull, 8176910675023814400ull,
+ 7484851434482366775ull, 4086149625864222289ull}},
+{{8475918058467352318ull, 12028098199530965856ull,
+ 16207247192619948994ull, 2553843516165138930ull}},
+{{10594897573084190397ull, 5811750712558931512ull,
+ 11035686953920160435ull, 3192304395206423663ull}},
+{{13243621966355237997ull, 2653002372271276486ull,
+ 9182922673972812640ull, 3990380494008029579ull}},
+{{3665577710544635844ull, 1658126482669547804ull,
+ 3433483662019313948ull, 2493987808755018487ull}},
+{{4581972138180794805ull, 2072658103336934755ull,
+ 18126912632806306147ull, 3117484760943773108ull}},
+{{1115779154298605602ull, 16425880684453332156ull,
+ 4211896717298331067ull, 3896855951179716386ull}},
+{{9920734008291404309ull, 7960332418569638645ull,
+ 7244121466738844821ull, 2435534969487322741ull}},
+{{17012603528791643291ull, 14562101541639436210ull,
+ 13666837851850943930ull, 3044418711859153426ull}},
+{{12042382374134778305ull, 8979254890194519455ull,
+ 7860175277958904105ull, 3805523389823941783ull}},
+{{14444018011475318297ull, 17141249352440044419ull,
+ 11830138576365396921ull, 2378452118639963614ull}},
+{{13443336495916759967ull, 7591503635267891812ull,
+ 5564301183601970344ull, 2973065148299954518ull}},
+{{16804170619895949959ull, 9489379544084864765ull,
+ 16178748516357238738ull, 3716331435374943147ull}},
+{{12808449646648662676ull, 10542548233480428382ull,
+ 7805874813509580259ull, 2322707147109339467ull}},
+{{6787190021456052537ull, 8566499273423147574ull,
+ 5145657498459587420ull, 2903383933886674334ull}},
+{{17707359563674841480ull, 10708124091778934467ull,
+ 15655443909929260083ull, 3629229917358342917ull}},
+{{17522513436166163945ull, 8773469096296280180ull,
+ 5734246832129411392ull, 4536537396697928647ull}},
+{{1728198860749076658ull, 5483418185185175113ull,
+ 10501433297721963976ull, 2835335872936205404ull}},
+{{6771934594363733726ull, 6854272731481468891ull,
+ 13126791622152454970ull, 3544169841170256755ull}},
+{{3853232224527279254ull, 17791212951206611922ull,
+ 11796803509263180808ull, 4430212301462820944ull}},
+{{7019956158756937438ull, 11119508094504132451ull,
+ 7373002193289488005ull, 2768882688414263090ull}},
+{{4163259180018783893ull, 64327062848001852ull, 18439624778466635815ull,
+ 3461103360517828862ull}},
+{{5204073975023479866ull, 13915466883842166027ull,
+ 13826158936228518960ull, 4326379200647286078ull}},
+{{946703225175980965ull, 8697166802401353767ull, 4029663316715436446ull,
+ 2703987000404553799ull}},
+{{15018437086752139918ull, 1648086466146916400ull,
+ 425393127466907654ull, 3379983750505692249ull}},
+{{326302284730623281ull, 11283480119538421309ull,
+ 5143427427761022471ull, 4224979688132115311ull}},
+{{2509781937170333503ull, 13969704102352595174ull,
+ 10132171169991720900ull, 2640612305082572069ull}},
+{{12360599458317692686ull, 17462130127940743967ull,
+ 17276899980917039029ull, 3300765381353215086ull}},
+{{10839063304469727954ull, 7992604604643766247ull,
+ 12372752939291522979ull, 4125956726691518858ull}},
+{{13691943592934661827ull, 2689534868688659952ull,
+ 12344656605484589766ull, 2578722954182199286ull}},
+{{17114929491168327284ull, 12585290622715600748ull,
+ 6207448720000961399ull, 3223403692727749108ull}},
+{{2946917790250857489ull, 11119927259967113032ull,
+ 7759310900001201749ull, 4029254615909686385ull}},
+{{1841823618906785931ull, 9255797546693139597ull,
+ 16378784358569220853ull, 2518284134943553990ull}},
+{{6913965542060870317ull, 16181432951793812400ull,
+ 11250108411356750258ull, 3147855168679442488ull}},
+{{8642456927576087897ull, 11003419152887489692ull,
+ 14062635514195937823ull, 3934818960849303110ull}},
+{{14624907616589830744ull, 13794665998195762913ull,
+ 4177461177945073235ull, 2459261850530814444ull}},
+{{4446076465455124717ull, 12631646479317315738ull,
+ 5221826472431341544ull, 3074077313163518055ull}},
+{{14780967618673681704ull, 15789558099146644672ull,
+ 1915597072111789026ull, 3842596641454397569ull}},
+{{9238104761671051065ull, 14480159830394040824ull,
+ 12726463216138337901ull, 2401622900908998480ull}},
+{{11547630952088813832ull, 4265141732710387318ull,
+ 15908079020172922377ull, 3002028626136248100ull}},
+{{5211166653256241482ull, 9943113184315372052ull,
+ 1438354701506601355ull, 3752535782670310126ull}},
+{{12480351195139926734ull, 3908602730983413580ull,
+ 14734029743723789559ull, 2345334864168943828ull}},
+{{15600438993924908418ull, 274067395301879071ull,
+ 18417537179654736949ull, 2931668580211179785ull}},
+{{14888862723978747618ull, 4954270262554736743ull,
+ 9186863419286257474ull, 3664585725263974732ull}},
+{{13999392386546046618ull, 15416209865048196737ull,
+ 11483579274107821842ull, 4580732156579968415ull}},
+{{1832091213950197281ull, 14246817184082510865ull,
+ 14094766073958470507ull, 2862957597862480259ull}},
+{{6901800035865134505ull, 13196835461675750677ull,
+ 13006771574020700230ull, 3578696997328100324ull}},
+{{13238936063258806035ull, 7272672290239912538ull,
+ 16258464467525875288ull, 4473371246660125405ull}},
+{{12886021057964141676ull, 4545420181399945336ull,
+ 12467383301417366007ull, 2795857029162578378ull}},
+{{16107526322455177095ull, 1070089208322543766ull,
+ 6360857089916931701ull, 3494821286453222973ull}},
+{{10911035866214195560ull, 5949297528830567612ull,
+ 12562757380823552530ull, 4368526608066528716ull}},
+{{16042769453238648033ull, 8329996973946492661ull,
+ 17075095399869496139ull, 2730329130041580447ull}},
+{{6218403761266146329ull, 5800810199005727923ull,
+ 16732183231409482270ull, 3412911412551975559ull}},
+{{3161318683155295008ull, 16474384785611935712ull,
+ 16303543020834464933ull, 4266139265689969449ull}},
+{{1975824176972059380ull, 12602333500221153772ull,
+ 3272185360380458727ull, 2666337041056230906ull}},
+{{2469780221215074225ull, 11141230856849054311ull,
+ 13313603737330349217ull, 3332921301320288632ull}},
+{{16922283331801006493ull, 91480515779154176ull,
+ 16642004671662936522ull, 4166151626650360790ull}},
+{{10576427082375629058ull, 4668861340789359264ull,
+ 5789566901361947422ull, 2603844766656475494ull}},
+{{13220533852969536323ull, 15059448712841474888ull,
+ 16460330663557210085ull, 3254805958320594367ull}},
+{{16525667316211920403ull, 4989252835769679898ull,
+ 15963727311019124703ull, 4068507447900742959ull}},
+{{14940228091059838156ull, 10035812049997131792ull,
+ 16894858597028034795ull, 2542817154937964349ull}},
+{{228541040115246079ull, 7933079044069026837ull, 7283515191002879782ull,
+ 3178521443672455437ull}},
+{{4897362318571445503ull, 692976768231507738ull,
+ 13716080007180987632ull, 3973151804590569296ull}},
+{{7672537467534541343ull, 433110480144692336ull, 8572550004488117270ull,
+ 2483219877869105810ull}},
+{{9590671834418176679ull, 9764760137035641228ull,
+ 1492315468755370779ull, 3104024847336382263ull}},
+{{11988339793022720849ull, 7594264152867163631ull,
+ 15700452391226377186ull, 3880031059170477828ull}},
+{{14410241398280282387ull, 9358101113969365173ull,
+ 589410707661709933ull, 2425019411981548643ull}},
+{{4177743692568189271ull, 16309312410889094371ull,
+ 14571821439859301128ull, 3031274264976935803ull}},
+{{610493597282848685ull, 1939896439901816348ull,
+ 13603090781396738507ull, 3789092831221169754ull}},
+{{9604930535156556236ull, 17353336339434492881ull,
+ 13113617756800349470ull, 2368183019513231096ull}},
+{{16617849187373083199ull, 12468298387438340293ull,
+ 16392022196000436838ull, 2960228774391538870ull}},
+{{6937253428934190287ull, 6362000947443149559ull,
+ 11266655708145770240ull, 3700285967989423588ull}},
+{{11253312420724950786ull, 3976250592151968474ull,
+ 16265031854445882208ull, 2312678729993389742ull}},
+{{4843268489051412674ull, 4970313240189960593ull,
+ 11107917781202576952ull, 2890848412491737178ull}},
+{{10665771629741653746ull, 6212891550237450741ull,
+ 4661525189648445382ull, 3613560515614671473ull}},
+{{17943900555604455087ull, 16989486474651589234ull,
+ 10438592505487944631ull, 4516950644518339341ull}},
+{{15826623865680172333ull, 17535958074298325127ull,
+ 8829963325143659346ull, 2823094152823962088ull}},
+{{15171593813672827512ull, 12696575556018130601ull,
+ 11037454156429574183ull, 3528867691029952610ull}},
+{{5129434211808870678ull, 11259033426595275348ull,
+ 4573445658682191921ull, 4411084613787440763ull}},
+{{12429268419235319982ull, 119366863980965236ull, 552560527462675999ull,
+ 2756927883617150477ull}},
+{{15536585524044149978ull, 13984266635258370257ull,
+ 5302386677755732902ull, 3446159854521438096ull}},
+{{5585673849773023760ull, 8256961257218187014ull,
+ 6627983347194666128ull, 4307699818151797620ull}},
+{{17326104211390303562ull, 5160600785761366883ull,
+ 13365861628851442138ull, 2692312386344873512ull}},
+{{17045944245810491549ull, 15674123019056484412ull,
+ 16707327036064302672ull, 3365390482931091890ull}},
+{{2860686233553562820ull, 1145909700111053900ull,
+ 11660786758225602533ull, 4206738103663864863ull}},
+{{11011300932825752570ull, 3022036571783102639ull,
+ 14205520751532083439ull, 2629211314789915539ull}},
+{{9152440147604802809ull, 17612603770011042011ull,
+ 13145214920987716394ull, 3286514143487394424ull}},
+{{6828864166078615607ull, 12792382675659026706ull,
+ 16431518651234645493ull, 4108142679359243030ull}},
+{{8879726122226522659ull, 10301082181500585643ull,
+ 5658013138594265529ull, 2567589174599526894ull}},
+{{6487971634355765419ull, 17488038745303119958ull,
+ 16295888460097607719ull, 3209486468249408617ull}},
+{{17333336579799482582ull, 17248362413201512043ull,
+ 6534802519839845937ull, 4011858085311760772ull}},
+{{8527492353160982662ull, 3862697480609863171ull,
+ 13307623611754679519ull, 2507411303319850482ull}},
+{{6047679423023840423ull, 216685832334941060ull, 7411157477838573591ull,
+ 3134264129149813103ull}},
+{{7559599278779800529ull, 14105915345700840037ull,
+ 4652260828870829084ull, 3917830161437266379ull}},
+{{7030592558451069283ull, 18039569127917800831ull,
+ 601820008830574225ull, 2448643850898291487ull}},
+{{4176554679636448699ull, 8714403354615087327ull,
+ 14587333066320381494ull, 3060804813622864358ull}},
+{{609007331118172970ull, 1669632156414083351ull, 9010794296045701060ull,
+ 3826006017028580448ull}},
+{{7298158609589939962ull, 10266892134613577902ull,
+ 5631746435028563162ull, 2391253760642862780ull}},
+{{18346070298842200761ull, 3610243131412196569ull,
+ 7039683043785703953ull, 2989067200803578475ull}},
+{{9097529818270587239ull, 9124489932692633616ull,
+ 4187917786304742037ull, 3736334001004473094ull}},
+{{5685956136419117025ull, 8008649217146589962ull,
+ 16452506671722627485ull, 2335208750627795683ull}},
+{{16330817207378672089ull, 14622497539860625356ull,
+ 15953947321225896452ull, 2919010938284744604ull}},
+{{1966777435513788495ull, 18278121924825781696ull,
+ 1495690077822818949ull, 3648763672855930756ull}},
+{{2458471794392235618ull, 9012594350750063408ull,
+ 1869612597278523687ull, 4560954591069913445ull}},
+{{1536544871495147261ull, 12550400496859871486ull,
+ 3474350882512771256ull, 2850596619418695903ull}},
+{{11144053126223709885ull, 15688000621074839357ull,
+ 18177996658423127782ull, 3563245774273369878ull}},
+{{95008352497473644ull, 10386628739488773389ull,
+ 13499123786174133920ull, 4454057217841712348ull}},
+{{2365223229524614980ull, 6491642962180483368ull,
+ 17660324403213609508ull, 2783785761151070217ull}},
+{{2956529036905768724ull, 8114553702725604210ull,
+ 8240347448734848173ull, 3479732201438837772ull}},
+{{12919033332986986713ull, 14754878146834393166ull,
+ 10300434310918560216ull, 4349665251798547215ull}},
+{{3462709814689478792ull, 9221798841771495729ull,
+ 13355300471965181991ull, 2718540782374092009ull}},
+{{8940073286789236394ull, 6915562533786981757ull,
+ 2859067534674313777ull, 3398175977967615012ull}},
+{{15786777626913933396ull, 13256139185661115100ull,
+ 3573834418342892221ull, 4247719972459518765ull}},
+{{643363979966432565ull, 10590930000251890890ull,
+ 4539489520678001590ull, 2654824982787199228ull}},
+{{10027577011812816514ull, 4015290463460087804ull,
+ 5674361900847501988ull, 3318531228483999035ull}},
+{{12534471264766020642ull, 5019113079325109755ull,
+ 2481266357631989581ull, 4148164035604998794ull}},
+{{5528201531265068950ull, 5442788683791887549ull,
+ 6162477491947381392ull, 2592602522253124246ull}},
+{{11521937932508724091ull, 6803485854739859436ull,
+ 16926468901789002548ull, 3240753152816405307ull}},
+{{14402422415635905113ull, 8504357318424824295ull,
+ 16546400108808865281ull, 4050941441020506634ull}},
+{{15919043037413522552ull, 16844438370083984944ull,
+ 14953186086432928704ull, 2531838400637816646ull}},
+{{1452059723057351574ull, 2608803888895429565ull,
+ 9468110571186385073ull, 3164798000797270808ull}},
+{{6426760672249077371ull, 7872690879546674860ull,
+ 11835138213982981341ull, 3955997500996588510ull}},
+{{13240097457010449165ull, 7226274808930365739ull,
+ 2785275365311975434ull, 2472498438122867819ull}},
+{{11938435802835673552ull, 18256215548017732982ull,
+ 17316652261922133004ull, 3090623047653584773ull}},
+{{5699672716689816132ull, 4373525361312614612ull,
+ 7810757272120502544ull, 3863278809566980967ull}},
+{{12785667484785910891ull, 2733453350820384132ull,
+ 11799252322716395946ull, 2414549255979363104ull}},
+{{15982084355982388614ull, 12640188725380255973ull,
+ 14749065403395494932ull, 3018186569974203880ull}},
+{{6142547389695822055ull, 15800235906725319967ull,
+ 18436331754244368665ull, 3772733212467754850ull}},
+{{10756621146200970640ull, 2957618414062243123ull,
+ 16134393364830118320ull, 2357958257792346781ull}},
+{{8834090414323825396ull, 3697023017577803904ull,
+ 6332933650755484188ull, 2947447822240433477ull}},
+{{11042613017904781745ull, 4621278771972254880ull,
+ 12527853081871743139ull, 3684309777800541846ull}},
+{{13803266272380977182ull, 1164912446537930696ull,
+ 6436444315484903116ull, 4605387222250677308ull}},
+{{8627041420238110739ull, 9951442315940982493ull,
+ 13246149734032840255ull, 2878367013906673317ull}},
+{{15395487793725026327ull, 7827616876498840212ull,
+ 2722629112258886607ull, 3597958767383341647ull}},
+{{797615668446731293ull, 5172835077196162362ull,
+ 17238344445605771971ull, 4497448459229177058ull}},
+{{5110195811206594962ull, 927178914033907524ull,
+ 15385651296930995386ull, 2810905287018235661ull}},
+{{6387744764008243703ull, 10382345679397160213ull,
+ 5397006065881580520ull, 3513631608772794577ull}},
+{{12596366973437692532ull, 12977932099246450266ull,
+ 11357943600779363554ull, 4392039510965993221ull}},
+{{12484415376825945737ull, 12722893580456419320ull,
+ 9404557759700796173ull, 2745024694353745763ull}},
+{{15605519221032432171ull, 2068558920288360438ull,
+ 7144011181198607313ull, 3431280867942182204ull}},
+{{10283526989435764406ull, 7197384668787838452ull,
+ 8930013976498259141ull, 4289101084927727755ull}},
+{{15650576405252128562ull, 6804208427206092984ull,
+ 3275415726097718011ull, 2680688178079829847ull}},
+{{1116476432855609086ull, 3893574515580228327ull,
+ 17929327712904311226ull, 3350860222599787308ull}},
+{{15230653596351675069ull, 14090340181330061216ull,
+ 3964915567420837416ull, 4188575278249734136ull}},
+{{9519158497719796919ull, 8806462613331288260ull,
+ 2478072229638023385ull, 2617859548906083835ull}},
+{{11898948122149746148ull, 15619764285091498229ull,
+ 16932648342329692943ull, 3272324436132604793ull}},
+{{1038627097405018973ull, 14913019337936984883ull,
+ 7330752372629952467ull, 4090405545165755992ull}},
+{{16790043000373994522ull, 7014794076996921599ull,
+ 4581720232893720292ull, 2556503465728597495ull}},
+{{16375867732040105249ull, 8768492596246151999ull,
+ 1115464272689762461ull, 3195629332160746869ull}},
+{{15858148646622743657ull, 15572301763735077903ull,
+ 6006016359289590980ull, 3994536665200933586ull}},
+{{16828871931780296642ull, 509316565479647881ull,
+ 8365446242983382267ull, 2496585415750583491ull}},
+{{7201031859443207090ull, 14471703762131723564ull,
+ 5845121785301839929ull, 3120731769688229364ull}},
+{{9001289824304008862ull, 4254571647382490743ull,
+ 7306402231627299912ull, 3900914712110286705ull}},
+{{12543335167831087395ull, 2659107279614056714ull,
+ 16095716440835532205ull, 2438071695068929190ull}},
+{{6455796922934083436ull, 7935570117944958797ull,
+ 10896273514189639448ull, 3047589618836161488ull}},
+{{12681432172094992199ull, 9919462647431198496ull,
+ 13620341892737049310ull, 3809487023545201860ull}},
+{{7925895107559370124ull, 1587978136217111156ull,
+ 17736085719815431627ull, 2380929389715751162ull}},
+{{9907368884449212655ull, 15820030725553552657ull,
+ 12946735112914513725ull, 2976161737144688953ull}},
+{{16995897123988903723ull, 5939980351659777109ull,
+ 2348360835860978445ull, 3720202171430861192ull}},
+{{12928278711706758779ull, 6018330729001054645ull,
+ 1467725522413111528ull, 2325126357144288245ull}},
+{{2325290334351284762ull, 7522913411251318307ull,
+ 6446342921443777314ull, 2906407946430360306ull}},
+{{16741670973221269664ull, 180269727209372075ull,
+ 17281300688659497451ull, 3633009933037950382ull}},
+{{16315402698099199176ull, 14060395214293878806ull,
+ 12378253823969596005ull, 4541262416297437978ull}},
+{{5585440667884611581ull, 11093590018147368206ull,
+ 12348094658408385407ull, 2838289010185898736ull}},
+{{16205172871710540284ull, 9255301504256822353ull,
+ 15435118323010481759ull, 3547861262732373420ull}},
+{{6421408034356011643ull, 6957440861893640038ull, 847153830053550583ull,
+ 4434826578415466776ull}},
+{{17848438076754670989ull, 11265929566324606879ull,
+ 529471143783469114ull, 2771766611509666735ull}},
+{{17698861577515950832ull, 4859039921050982791ull,
+ 14496896985011500105ull, 3464708264387083418ull}},
+{{17511890953467550636ull, 10685485919741116393ull,
+ 8897749194409599323ull, 4330885330483854273ull}},
+{{4027402818276137292ull, 4372585690624503794ull,
+ 17090308292574469337ull, 2706803331552408920ull}},
+{{14257625559699947423ull, 10077418131708017646ull,
+ 2916141292008535055ull, 3383504164440511151ull}},
+{{8598659912770158470ull, 7985086646207634154ull,
+ 17480234670292832531ull, 4229380205550638938ull}},
+{{9985848463908736948ull, 2684836144666077394ull,
+ 15536832687360408236ull, 2643362628469149336ull}},
+{{3258938543031145377ull, 3356045180832596743ull, 974296785490958679ull,
+ 3304203285586436671ull}},
+{{17908731234071095433ull, 18030114531322909640ull,
+ 15052929037145862060ull, 4130254106983045838ull}},
+{{11192957021294434646ull, 2045449545222042717ull,
+ 4796394629788775884ull, 2581408816864403649ull}},
+{{156138221335879595ull, 2556811931527553397ull,
+ 10607179305663357759ull, 3226761021080504561ull}},
+{{4806858795097237398ull, 17031072969691605458ull,
+ 17870660150506585102ull, 4033451276350630701ull}},
+{{7615972765363161278ull, 6032734587629865507ull,
+ 13475005603280309641ull, 2520907047719144188ull}},
+{{4908279938276563693ull, 12152604252964719788ull,
+ 16843757004100387051ull, 3151133809648930235ull}},
+{{6135349922845704616ull, 10579069297778511831ull,
+ 16443010236698095910ull, 3938917262061162794ull}},
+{{10752122729419647241ull, 2000232292684181990ull,
+ 14888567416363697848ull, 2461823288788226746ull}},
+{{4216781374919783244ull, 2500290365855227488ull,
+ 9387337233599846502ull, 3077279110985283433ull}},
+{{5270976718649729054ull, 12348734994173810168ull,
+ 16345857560427196031ull, 3846598888731604291ull}},
+{{3294360449156080659ull, 14635488398999713211ull,
+ 7910317966053303567ull, 2404124305457252682ull}},
+{{17953008616727264536ull, 13682674480322253609ull,
+ 664525420711853651ull, 3005155381821565853ull}},
+{{8606202715626916958ull, 12491657081975429108ull,
+ 5442342794317204968ull, 3756444227276957316ull}},
+{{14602248734121598907ull, 7807285676234643192ull,
+ 12624836283303028913ull, 2347777642048098322ull}},
+{{18252810917651998633ull, 14370793113720691894ull,
+ 6557673317274010333ull, 2934722052560122903ull}},
+{{13592641610210222484ull, 4128433336868701156ull,
+ 3585405628165125013ull, 3668402565700153629ull}},
+{{16990802012762778104ull, 9772227689513264349ull,
+ 9093443053633794170ull, 4585503207125192036ull}},
+{{12925094267190430267ull, 10719328324373178122ull,
+ 14906773945375897164ull, 2865939504453245022ull}},
+{{6932995797133262026ull, 13399160405466472653ull,
+ 9410095394865095647ull, 3582424380566556278ull}},
+{{13277930764843965437ull, 12137264488405702912ull,
+ 2539247206726593751ull, 4478030475708195348ull}},
+{{8298706728027478398ull, 14503319332894646176ull,
+ 10810401541058896902ull, 2798769047317622092ull}},
+{{10373383410034347997ull, 8905777129263531912ull,
+ 13513001926323621128ull, 3498461309147027615ull}},
+{{12966729262542934997ull, 11132221411579414890ull,
+ 12279566389477138506ull, 4373076636433784519ull}},
+{{12715891807516722277ull, 11569324400664522210ull,
+ 14592258021064293422ull, 2733172897771115324ull}},
+{{6671492722541127038ull, 5238283463975876955ull,
+ 18240322526330366778ull, 3416466122213894155ull}},
+{{3727679884749020894ull, 15771226366824622002ull,
+ 18188717139485570568ull, 4270582652767367694ull}},
+{{6941485946395525963ull, 9857016479265388751ull,
+ 6756262193751093701ull, 2669114157979604809ull}},
+{{4065171414567019549ull, 16932956617509123843ull,
+ 13057013760616255030ull, 3336392697474506011ull}},
+{{469778249781386533ull, 11942823735031628996ull,
+ 11709581182342930884ull, 4170490871843132514ull}},
+{{9516983442968142391ull, 16687636871249543930ull,
+ 11930174257391719706ull, 2606556794901957821ull}},
+{{2672857266855402181ull, 11636174052207154105ull,
+ 1077659766457485921ull, 3258195993627447277ull}},
+{{7952757601996640630ull, 710159509976778919ull, 5958760726499245306ull,
+ 4072744992034309096ull}},
+{{11888002528888982250ull, 5055535712162874728ull,
+ 3724225454062028316ull, 2545465620021443185ull}},
+{{14860003161111227812ull, 6319419640203593410ull,
+ 9266967836004923299ull, 3181832025026803981ull}},
+{{9351631914534258957ull, 3287588531827103859ull,
+ 16195395813433542028ull, 3977290031283504976ull}},
+{{3538926937370217896ull, 11278114869246715720ull,
+ 10122122383395963767ull, 2485806269552190610ull}},
+{{4423658671712772370ull, 9485957568131006746ull,
+ 3429280942390178901ull, 3107257836940238263ull}},
+{{14752945376495741271ull, 16469132978591146336ull,
+ 18121659233269887338ull, 3884072296175297828ull}},
+{{9220590860309838294ull, 14904894130046854364ull,
+ 2102664983938903778ull, 2427545185109561143ull}},
+{{11525738575387297868ull, 9407745625703792147ull,
+ 16463389285205793435ull, 3034431481386951428ull}},
+{{9795487200806734431ull, 7147996013702352280ull,
+ 2132492532797690178ull, 3793039351733689286ull}},
+{{6122179500504209019ull, 9079183526991358079ull,
+ 15167865888280720073ull, 2370649594833555803ull}},
+{{3041038357202873370ull, 15960665427166585503ull,
+ 14348146341923512187ull, 2963311993541944754ull}},
+{{17636356001785755424ull, 15339145765530843974ull,
+ 8711810890549614426ull, 3704139991927430943ull}},
+{{6411036482688709236ull, 14198652121884165388ull,
+ 12362410834234590872ull, 2315087494954644339ull}},
+{{8013795603360886545ull, 17748315152355206735ull,
+ 10841327524365850686ull, 2893859368693305424ull}},
+{{5405558485773720278ull, 12962021903589232611ull,
+ 13551659405457313358ull, 3617324210866631780ull}},
+{{2145262088789762443ull, 6979155342631764956ull,
+ 16939574256821641698ull, 4521655263583289725ull}},
+{{10564160842348377335ull, 8973658107572241001ull,
+ 12893076919727220013ull, 2826034539739556078ull}},
+{{17816887071362859573ull, 15828758652892689155ull,
+ 6892974112804249208ull, 3532543174674445098ull}},
+{{17659422820776186562ull, 1339204242406309828ull,
+ 17839589677860087319ull, 4415678968343056372ull}},
+{{1813767226130340793ull, 7754531679145025499ull,
+ 1926371511807778766ull, 2759799355214410233ull}},
+{{16102267087945089703ull, 469792562076506065ull,
+ 7019650408187111362ull, 3449749194018012791ull}},
+{{6292775804649198417ull, 9810612739450408390ull,
+ 4162876991806501298ull, 4312186492522515989ull}},
+{{17768042933187912723ull, 10743318980583893147ull,
+ 4907641129092757263ull, 2695116557826572493ull}},
+{{17598367648057503000ull, 8817462707302478530ull,
+ 10746237429793334483ull, 3368895697283215616ull}},
+{{12774587523217102941ull, 6410142365700710259ull,
+ 13432796787241668104ull, 4211119621604019520ull}},
+{{5678274192796995386ull, 4006338978562943912ull,
+ 8395497992026042565ull, 2631949763502512200ull}},
+{{7097842740996244233ull, 9619609741631067794ull,
+ 10494372490032553206ull, 3289937204378140250ull}},
+{{18095675463100081099ull, 2801140140184058934ull,
+ 3894593575685915700ull, 4112421505472675313ull}},
+{{6698111146010162783ull, 10974084624469812642ull,
+ 13963336030872167072ull, 2570263440920422070ull}},
+{{17596010969367479287ull, 13717605780587265802ull,
+ 8230798001735433032ull, 3212829301150527588ull}},
+{{12771641674854573300ull, 17147007225734082253ull,
+ 10288497502169291290ull, 4016036626438159485ull}},
+{{10288119055997802265ull, 15328565534511189312ull,
+ 8736153948069501008ull, 2510022891523849678ull}},
+{{12860148819997252831ull, 713962844429435024ull,
+ 1696820398232100453ull, 3137528614404812098ull}},
+{{16075186024996566039ull, 5504139573964181684ull,
+ 11344397534644901374ull, 3921910768006015122ull}},
+{{823619228768077966ull, 17275145289009777265ull,
+ 11701934477580451262ull, 2451194230003759451ull}},
+{{5641210054387485362ull, 12370559574407445773ull,
+ 10015732078548176174ull, 3063992787504699314ull}},
+{{11663198586411744606ull, 6239827431154531408ull,
+ 3296293061330444410ull, 3829990984380874143ull}},
+{{7289499116507340379ull, 8511578162898970034ull,
+ 8977712190972609612ull, 2393744365238046339ull}},
+{{18335245932488951282ull, 10639472703623712542ull,
+ 6610454220288374111ull, 2992180456547557924ull}},
+{{13695685378756413294ull, 8687654861102252774ull,
+ 8263067775360467639ull, 3740225570684447405ull}},
+{{3948117343295370405ull, 12347313315829989840ull,
+ 7470260368813986226ull, 2337640981677779628ull}},
+{{4935146679119213006ull, 6210769607932711492ull,
+ 9337825461017482783ull, 2922051227097224535ull}},
+{{6168933348899016257ull, 3151775991488501461ull,
+ 7060595807844465575ull, 3652564033871530669ull}},
+{{12322852704551158226ull, 17774778044642790538ull,
+ 13437430778232969872ull, 4565705042339413336ull}},
+{{12313468958771861795ull, 11109236277901744086ull,
+ 8398394236395606170ull, 2853565651462133335ull}},
+{{6168464161610051436ull, 4663173310522404300ull,
+ 5886306777067119809ull, 3566957064327666669ull}},
+{{7710580202012564295ull, 10440652656580393279ull,
+ 11969569489761287665ull, 4458696330409583336ull}},
+{{11736641653898934540ull, 18054622956431215559ull,
+ 7480980931100804790ull, 2786685206505989585ull}},
+{{10059116048946280271ull, 13344906658684243641ull,
+ 13962912182303393892ull, 3483356508132486981ull}},
+{{17185581079610238243ull, 16681133323355304551ull,
+ 3618582172597078653ull, 4354195635165608727ull}},
+{{17658517202397480758ull, 12731551336310759296ull,
+ 9179142885514256014ull, 2721372271978505454ull}},
+{{3626402429287299331ull, 6691067133533673313ull,
+ 2250556570038044210ull, 3401715339973131818ull}},
+{{9144689055036512068ull, 17587205953771867449ull,
+ 12036567749402331070ull, 4252144174966414772ull}},
+{{17244645705466289803ull, 6380317702680029251ull,
+ 16746226880231232727ull, 2657590109354009232ull}},
+{{16944121113405474349ull, 3363711109922648660ull,
+ 2486039526579489293ull, 3321987636692511541ull}},
+{{2733407318047291321ull, 8816324905830698730ull,
+ 7719235426651749520ull, 4152484545865639426ull}},
+{{6320065592206944980ull, 5510203066144186706ull,
+ 9436208160084731354ull, 2595302841166024641ull}},
+{{17123454027113457032ull, 16111125869535009190ull,
+ 16406946218533302096ull, 3244128551457530801ull}},
+{{12180945497037045482ull, 1692163263209209872ull,
+ 6673624717884463909ull, 4055160689321913502ull}},
+{{7613090935648153427ull, 3363445048719450122ull,
+ 18006073503959953655ull, 2534475430826195938ull}},
+{{292991632705415975ull, 18039364366181476365ull,
+ 13284219843095166260ull, 3168094288532744923ull}},
+{{4977925559309157873ull, 4102461384017293840ull,
+ 11993588785441569922ull, 3960117860665931154ull}},
+{{3111203474568223671ull, 7175724383438196554ull,
+ 12107679009328369105ull, 2475073662916206971ull}},
+{{13112376380065055396ull, 13581341497725133596ull,
+ 10522912743233073477ull, 3093842078645258714ull}},
+{{16390470475081319245ull, 3141618816874253283ull,
+ 3930268892186566039ull, 3867302598306573393ull}},
+{{7938201037712130576ull, 8881040788187490158ull,
+ 13985633103685073534ull, 2417064123941608370ull}},
+{{699379260285387412ull, 1877928948379586890ull, 8258669342751566110ull,
+ 3021330154927010463ull}},
+{{10097596112211510073ull, 11570783222329259420ull,
+ 5711650660012069733ull, 3776662693658763079ull}},
+{{15534369606986969604ull, 9537582523169481089ull,
+ 10487310690148625439ull, 2360414183536726924ull}},
+{{5582903953451548293ull, 7310292135534463458ull,
+ 13109138362685781799ull, 2950517729420908655ull}},
+{{16202001978669211174ull, 4526179150990691418ull,
+ 11774736934929839345ull, 3688147161776135819ull}},
+{{11029130436481738159ull, 10269409957165752177ull,
+ 10106735150234911277ull, 4610183952220169774ull}},
+{{18422421568869556110ull, 8724224232442289062ull,
+ 1705023450469431644ull, 2881364970137606109ull}},
+{{13804654924232169329ull, 10905280290552861328ull,
+ 6742965331514177459ull, 3601706212672007636ull}},
+{{17255818655290211661ull, 9019914344763688756ull,
+ 8428706664392721824ull, 4502132765840009545ull}},
+{{1561514622701606481ull, 5637446465477305473ull,
+ 16797156711313920900ull, 2813832978650005965ull}},
+{{6563579296804396005ull, 7046808081846631841ull,
+ 7161387833860237413ull, 3517291223312507457ull}},
+{{12816160139432882910ull, 13420196120735677705ull,
+ 13563420810752684670ull, 4396614029140634321ull}},
+{{1092571059504469963ull, 3775936557032410662ull,
+ 1559608979079346063ull, 2747883768212896451ull}},
+{{10589085861235363261ull, 108234677863125423ull,
+ 15784569279131346291ull, 3434854710266120563ull}},
+{{8624671308116816172ull, 13970351402611070491ull,
+ 15119025580486794959ull, 4293568387832650704ull}},
+{{3084576558359316156ull, 15648998654273000913ull,
+ 9449390987804246849ull, 2683480242395406690ull}},
+{{8467406716376533099ull, 5726190262559087429ull,
+ 2588366697900532754ull, 3354350302994258363ull}},
+{{15195944413898054277ull, 16381109865053635094ull,
+ 17070516427657829654ull, 4192937878742822953ull}},
+{{4885779240258896020ull, 5626507647231134030ull,
+ 3751543739645061678ull, 2620586174214264346ull}},
+{{15330596087178395832ull, 16256506595893693345ull,
+ 13912801711411102905ull, 3275732717767830432ull}},
+{{5328187053690831078ull, 6485575189584952970ull,
+ 17391002139263878632ull, 4094665897209788040ull}},
+{{7941802926984157328ull, 4053484493490595606ull,
+ 10869376337039924145ull, 2559166185756117525ull}},
+{{703881621875420852ull, 9678541635290632412ull,
+ 18198406439727293085ull, 3198957732195146906ull}},
+{{879852027344276065ull, 16709863062540678419ull,
+ 13524636012804340548ull, 3998697165243933633ull}},
+{{16690808581586030205ull, 1220292377233148203ull,
+ 1535368480361630987ull, 2499185728277458521ull}},
+{{16251824708555149852ull, 15360423526823598966ull,
+ 6530896618879426637ull, 3123982160346823151ull}},
+{{11091408848839161507ull, 5365471353247334996ull,
+ 3551934755171895393ull, 3904977700433528939ull}},
+{{16155502567379251750ull, 14882634641848054132ull,
+ 18360860286478292284ull, 2440611062770955586ull}},
+{{1747634135514513071ull, 156549228600516050ull,
+ 13727703321243089548ull, 3050763828463694483ull}},
+{{11407914706247917147ull, 195686535750645062ull,
+ 12547943133126474031ull, 3813454785579618104ull}},
+{{2518260672977560313ull, 7039833112485235020ull,
+ 7842464458204046269ull, 2383409240987261315ull}},
+{{3147825841221950391ull, 13411477409033931679ull,
+ 5191394554327669932ull, 2979261551234076644ull}},
+{{17769840356809601701ull, 16764346761292414598ull,
+ 6489243192909587415ull, 3724076939042595805ull}},
+{{6494464204578613159ull, 17395245753448840980ull,
+ 6361620004782186086ull, 2327548086901622378ull}},
+{{8118080255723266449ull, 12520685154956275417ull,
+ 17175397042832508416ull, 2909435108627027972ull}},
+{{14759286338081470965ull, 15650856443695344271ull,
+ 3022502229831083904ull, 3636793885783784966ull}},
+{{13837421904174450802ull, 1116826480909628723ull,
+ 13001499824143630689ull, 4545992357229731207ull}},
+{{6342545680895337799ull, 12227231596636987712ull,
+ 15043466417730851036ull, 2841245223268582004ull}},
+{{7928182101119172249ull, 15284039495796234640ull,
+ 357588948454012179ull, 3551556529085727506ull}},
+{{9910227626398965311ull, 14493363351317905396ull,
+ 9670358222422291032ull, 4439445661357159382ull}},
+{{15417264303354129128ull, 9058352094573690872ull,
+ 1432287870586543991ull, 2774653538348224614ull}},
+{{824836305483109794ull, 6711254099789725687ull,
+ 11013731875087955797ull, 3468316922935280767ull}},
+{{14866103437136050954ull, 13000753643164545012ull,
+ 9155478825432556842ull, 4335396153669100959ull}},
+{{67942611355256038ull, 12737157045405228537ull,
+ 12639703293536429882ull, 2709622596043188099ull}},
+{{4696614282621457952ull, 6698074269901759863ull,
+ 11187943098493149449ull, 3387028245053985124ull}},
+{{1259081834849434536ull, 12984278855804587733ull,
+ 13984928873116436811ull, 4233785306317481405ull}},
+{{3092769155994590537ull, 5809331275664173381ull,
+ 11046423554911466959ull, 2646115816448425878ull}},
+{{8477647463420626075ull, 2649978076152828822ull,
+ 4584657406784557891ull, 3307644770560532348ull}},
+{{1373687292421006786ull, 17147530650473199740ull,
+ 5730821758480697363ull, 4134555963200665435ull}},
+{{10081926594617905049ull, 8411363647332055885ull,
+ 1275920589836741900ull, 2584097477000415897ull}},
+{{17214094261699769215ull, 10514204559165069856ull,
+ 6206586755723315279ull, 3230121846250519871ull}},
+{{3070873753415159903ull, 8531069680528949417ull,
+ 3146547426226756195ull, 4037652307813149839ull}},
+{{13448511141952944700ull, 3026075541116899433ull,
+ 8884121169032804478ull, 2523532692383218649ull}},
+{{2975580872159017162ull, 13005966463250900100ull,
+ 15716837479718393501ull, 3154415865479023311ull}},
+{{3719476090198771453ull, 2422400023781461413ull,
+ 15034360831220603973ull, 3943019831848779139ull}},
+{{4630515565587926110ull, 3819843024077107335ull,
+ 7090632510299183531ull, 2464387394905486962ull}},
+{{1176458438557519734ull, 163117761668996265ull,
+ 18086662674728755222ull, 3080484243631858702ull}},
+{{6082259066624287571ull, 9427269238941021139ull,
+ 13384956306556168219ull, 3850605304539823378ull}},
+{{1495568907426485780ull, 3586200265124444260ull,
+ 12977283710024993041ull, 2406628315337389611ull}},
+{{1869461134283107225ull, 9094436349832943229ull,
+ 11609918619103853397ull, 3008285394171737014ull}},
+{{6948512436281271935ull, 15979731455718566940ull,
+ 5289026237025040938ull, 3760356742714671268ull}},
+{{13566192309530570768ull, 14599018178251492241ull,
+ 12529013434995426394ull, 2350222964196669542ull}},
+{{3122682331631049747ull, 9025400685959589494ull,
+ 6437894756889507185ull, 2937778705245836928ull}},
+{{13126724951393587992ull, 15893436875876874771ull,
+ 8047368446111883981ull, 3672223381557296160ull}},
+{{11796720170814597086ull, 6031738039563929752ull,
+ 10059210557639854977ull, 4590279226946620200ull}},
+{{7372950106759123179ull, 15299051320795925855ull,
+ 6287006598524909360ull, 2868924516841637625ull}},
+{{4604501615021516070ull, 677070077285355703ull,
+ 12470444266583524605ull, 3586155646052047031ull}},
+{{1143941000349507183ull, 5458023615034082533ull,
+ 10976369314802017852ull, 4482694557565058789ull}},
+{{3020806134432135941ull, 12634636796251077391ull,
+ 9166073830964955109ull, 2801684098478161743ull}},
+{{17611065723322333639ull, 1958237940031683026ull,
+ 6845906270278805983ull, 3502105123097702179ull}},
+{{12790460117298141240ull, 16282855480321767495ull,
+ 3945696819421119574ull, 4377631403872127724ull}},
+{{14911566600952420131ull, 5565098656773716780ull,
+ 11689432548992975542ull, 2736019627420079827ull}},
+{{192714177480973548ull, 16179745357821921784ull,
+ 10000104667813831523ull, 3420024534275099784ull}},
+{{240892721851216935ull, 15612995678850014326ull,
+ 12500130834767289404ull, 4275030667843874730ull}},
+{{13985616006439174297ull, 534750262426483145ull,
+ 12424267790156943782ull, 2671894167402421706ull}},
+{{3646961952766804159ull, 9891809864887879740ull,
+ 6306962700841403919ull, 3339867709253027133ull}},
+{{4558702440958505198ull, 7753076312682461771ull,
+ 12495389394479142803ull, 4174834636566283916ull}},
+{{543346016385371797ull, 2539829686212844655ull,
+ 17032990408404240060ull, 2609271647853927447ull}},
+{{14514240575763878458ull, 3174787107766055818ull,
+ 16679551992077912171ull, 3261589559817409309ull}},
+{{8919428682850072264ull, 17803541939989733485ull,
+ 7014381934815226501ull, 4076986949771761637ull}},
+{{7880485935994989117ull, 13433056721707277380ull,
+ 6689831718473210515ull, 2548116843607351023ull}},
+{{9850607419993736397ull, 12179634883706708821ull,
+ 3750603629664125240ull, 3185146054509188779ull}},
+{{16924945293419558400ull, 15224543604633386026ull,
+ 76568518652768646ull, 3981432568136485974ull}},
+{{15189776826814611904ull, 4903653734468478362ull,
+ 13882913379440144116ull, 2488395355085303733ull}},
+{{9763848996663489072ull, 6129567168085597953ull,
+ 3518583669018016433ull, 3110494193856629667ull}},
+{{16816497264256749244ull, 12273644978534385345ull,
+ 18233287641554684253ull, 3888117742320787083ull}},
+{{3592781762519386422ull, 9976871120797684793ull,
+ 9089961766757983706ull, 2430073588950491927ull}},
+{{9102663221576620931ull, 3247716864142330183ull,
+ 6750766190020091729ull, 3037591986188114909ull}},
+{{6766643008543388259ull, 8671332098605300633ull,
+ 13050143755952502565ull, 3796989982735143636ull}},
+{{15758366926408087422ull, 7725425570842006847ull,
+ 17379711884325089911ull, 2373118739209464772ull}},
+{{15086272639582721374ull, 5045095945125120655ull,
+ 3277895781696810773ull, 2966398424011830966ull}},
+{{14246154781051013813ull, 10918055949833788723ull,
+ 13320741763975789274ull, 3707998030014788707ull}},
+{{6598003728943189681ull, 11435470987073505856ull,
+ 6019620593271174344ull, 2317498768759242942ull}},
+{{8247504661178987102ull, 14294338733841882320ull,
+ 16747897778443743738ull, 2896873460949053677ull}},
+{{10309380826473733877ull, 8644551380447577092ull,
+ 7099814167772515961ull, 3621091826186317097ull}},
+{{12886726033092167346ull, 15417375243986859269ull,
+ 13486453728143032855ull, 4526364782732896371ull}},
+{{10360046779896298543ull, 16553388555132868899ull,
+ 6123190570875701582ull, 2828977989208060232ull}},
+{{8338372456442985275ull, 11468363657061310316ull,
+ 7653988213594626978ull, 3536222486510075290ull}},
+{{10422965570553731594ull, 5112082534471862087ull,
+ 344113230138507915ull, 4420278108137594113ull}},
+{{13431882509237164102ull, 889208574831219852ull,
+ 11744285814905037207ull, 2762673817585996320ull}},
+{{16789853136546455128ull, 14946568773821188527ull,
+ 14680357268631296508ull, 3453342271982495400ull}},
+{{16375630402255681006ull, 236466893566934043ull,
+ 18350446585789120636ull, 4316677839978119250ull}},
+{{7928925992196106677ull, 9371163845334109585ull,
+ 16080715134545588301ull, 2697923649986324531ull}},
+{{14522843508672521250ull, 16325640825095024885ull,
+ 15489207899754597472ull, 3372404562482905664ull}},
+{{4318496330558487850ull, 1960306957659229491ull, 914765800983695225ull,
+ 4215505703103632081ull}},
+{{393217197385360954ull, 12754406894605488192ull,
+ 12100943671683279275ull, 2634691064439770050ull}},
+{{491521496731701193ull, 11331322599829472336ull,
+ 5902807552749323286ull, 3293363830549712563ull}},
+{{614401870914626491ull, 4940781212932064612ull, 2766823422509266204ull,
+ 4116704788187140704ull}},
+{{9607373206176417365ull, 12311360294937316190ull,
+ 1729264639068291377ull, 2572940492616962940ull}},
+{{2785844470865745898ull, 1554142313389481526ull,
+ 2161580798835364222ull, 3216175615771203675ull}},
+{{12705677625436958181ull, 11166049928591627715ull,
+ 16537034053826368989ull, 4020219519714004593ull}},
+{{5635205506684404911ull, 9284624214583461274ull,
+ 3418117256000398762ull, 2512637199821252871ull}},
+{{16267378920210281947ull, 2382408231374550784ull,
+ 18107704625282662165ull, 3140796499776566088ull}},
+{{1887479576553300817ull, 7589696307645576385ull,
+ 4187886707893776090ull, 3925995624720707611ull}},
+{{12708889781414282771ull, 9355246210705873144ull,
+ 311586183219916104ull, 2453747265450442257ull}},
+{{15886112226767853464ull, 11694057763382341430ull,
+ 5001168747452283034ull, 3067184081813052821ull}},
+{{10634268246605041021ull, 5394200167373150980ull,
+ 10863146952742741697ull, 3833980102266316026ull}},
+{{15869789690982926447ull, 14900590150676689122ull,
+ 11401152863891601464ull, 2396237563916447516ull}},
+{{10613865076873882250ull, 178993614636309787ull,
+ 14251441079864501831ull, 2995296954895559395ull}},
+{{8655645327664964908ull, 14058800073577550946ull,
+ 13202615331403239384ull, 3744121193619449244ull}},
+{{10021464348217990972ull, 8786750045985969341ull,
+ 17475006618981800423ull, 2340075746012155777ull}},
+{{17138516453699876619ull, 6371751539055073772ull,
+ 8008700218445086817ull, 2925094682515194722ull}},
+{{2976401493415294157ull, 12576375442246230120ull,
+ 787503236201582713ull, 3656368353143993403ull}},
+{{3720501866769117697ull, 1885411247525623938ull,
+ 14819437100534142104ull, 4570460441429991753ull}},
+{{6936999685158086465ull, 1178382029703514961ull,
+ 2344619160192756959ull, 2856537775893744846ull}},
+{{13282935624874995985ull, 15308035592411557413ull,
+ 12154145987095722006ull, 3570672219867181057ull}},
+{{2768611475811581269ull, 9911672453659670959ull,
+ 1357624428587488796ull, 4463340274833976322ull}},
+{{8647911200023320149ull, 15418167320392070157ull,
+ 5460201286294568401ull, 2789587671771235201ull}},
+{{15421575018456538090ull, 5437651095207923984ull,
+ 11436937626295598406ull, 3486984589714044001ull}},
+{{830224699361120997ull, 16020435905864680789ull, 461113977587334295ull,
+ 4358730737142555002ull}},
+{{2824733446314394575ull, 16930301468806507349ull,
+ 4899882254419471838ull, 2724206710714096876ull}},
+{{8142602826320381123ull, 11939504799153358378ull,
+ 6124852818024339798ull, 3405258388392621095ull}},
+{{954881496045700595ull, 5701008962086922165ull, 3044380004103036844ull,
+ 4256572985490776369ull}},
+{{2902643944242256824ull, 12786502638159102161ull,
+ 13431952548632867787ull, 2660358115931735230ull}},
+{{8239990948730208934ull, 11371442279271489797ull,
+ 7566568648936308926ull, 3325447644914669038ull}},
+{{14911674704340149072ull, 4990930812234586438ull,
+ 234838774315610350ull, 4156809556143336298ull}},
+{{4708110671785205266ull, 16954389812928780236ull,
+ 4758460252374644372ull, 2598005972589585186ull}},
+{{5885138339731506582ull, 2746243192451423679ull,
+ 15171447352323081274ull, 3247507465736981482ull}},
+{{2744736906236995324ull, 12656176027419055407ull,
+ 9740937153549075784ull, 4059384332171226853ull}},
+{{8632989594039203934ull, 7910110017136909629ull,
+ 8393928730181866317ull, 2537115207607016783ull}},
+{{15402923010976392821ull, 14499323539848524940ull,
+ 5880724894299944992ull, 3171394009508770979ull}},
+{{806909690010939410ull, 18124154424810656176ull,
+ 2739220099447543336ull, 3964242511885963724ull}},
+{{504318556256837131ull, 11327596515506660110ull,
+ 10935384599009490393ull, 2477651569928727327ull}},
+{{9853770232175822222ull, 324437589101161425ull, 9057544730334475088ull,
+ 3097064462410909159ull}},
+{{16928898808647165682ull, 405546986376451781ull,
+ 6710244894490705956ull, 3871330578013636449ull}},
+{{12886404764618172503ull, 9476838903340058171ull,
+ 15723118105125160982ull, 2419581611258522780ull}},
+{{11496319937345327725ull, 2622676592320296906ull,
+ 1207153557696899612ull, 3024477014073153476ull}},
+{{5147027884826883848ull, 3278345740400371133ull,
+ 1508941947121124515ull, 3780596267591441845ull}},
+{{5522735437230496357ull, 18189867152246089622ull,
+ 3248931726164396773ull, 2362872667244651153ull}},
+{{16126791333392896254ull, 8902275885025448315ull,
+ 8672850676132883871ull, 2953590834055813941ull}},
+{{15546803148313732414ull, 6516158837854422490ull,
+ 15452749363593492743ull, 3691988542569767426ull}},
+{{14328437986123470663ull, 10990128301300095912ull,
+ 14269654370673320868ull, 2307492839106104641ull}},
+{{17910547482654338328ull, 13737660376625119890ull,
+ 4002009908059487373ull, 2884366048882630802ull}},
+{{13164812316463147102ull, 3337017415499236151ull,
+ 14225884421929135025ull, 3605457561103288502ull}},
+{{11844329377151545974ull, 8782957787801433093ull,
+ 8558983490556642973ull, 4506821951379110628ull}},
+{{9708548869933410186ull, 7795191626589589635ull,
+ 14572736718452677666ull, 2816763719611944142ull}},
+{{7524000068989374828ull, 520617496382211236ull, 8992548861211071275ull,
+ 3520954649514930178ull}},
+{{9405000086236718535ull, 14485829925759927757ull,
+ 2017314039659063285ull, 4401193311893662723ull}},
+{{8183968063111643037ull, 11359486712813648800ull,
+ 17401722339282772217ull, 2750745819933539201ull}},
+{{10229960078889553796ull, 364300335734897288ull,
+ 7917094868821301560ull, 3438432274916924002ull}},
+{{12787450098611942244ull, 455375419668621610ull, 672996549171851142ull,
+ 4298040343646155003ull}},
+{{12603842330059851807ull, 14119667692575052218ull,
+ 16561523907728264627ull, 2686275214778846876ull}},
+{{6531430875720038950ull, 13037898597291427369ull,
+ 2255160810950779168ull, 3357844018473558596ull}},
+{{12775974613077436592ull, 16297373246614284211ull,
+ 2818951013688473960ull, 4197305023091948245ull}},
+{{5679141123959703918ull, 10185858279133927632ull,
+ 4067687392768990177ull, 2623315639432467653ull}},
+{{7098926404949629898ull, 17344008867344797444ull,
+ 9696295259388625625ull, 3279144549290584566ull}},
+{{8873658006187037372ull, 7844953028898833093ull,
+ 2896997037381006224ull, 4098930686613230708ull}},
+{{7851879263080592310ull, 4903095643061770683ull,
+ 11033995185217904698ull, 2561831679133269192ull}},
+{{5203163060423352483ull, 15352241590681989162ull,
+ 13792493981522380872ull, 3202289598916586490ull}},
+{{15727325862383966411ull, 743557914642934836ull,
+ 8017245440048200283ull, 4002861998645733113ull}},
+{{606206627135203199ull, 16605624761147691937ull,
+ 16539993446098594936ull, 2501788749153583195ull}},
+{{5369444302346391903ull, 2310286877725063305ull,
+ 16063305789195855767ull, 3127235936441978994ull}},
+{{11323491396360377783ull, 16722916652438492843ull,
+ 10855760199640043900ull, 3909044920552473743ull}},
+{{4771339113511542162ull, 1228450870919282219ull,
+ 13702379152416109294ull, 2443153075345296089ull}},
+{{1352487873462039799ull, 10758935625503878582ull,
+ 3292915885237972905ull, 3053941344181620112ull}},
+{{10913981878682325556ull, 18060355550307236131ull,
+ 4116144856547466131ull, 3817426680227025140ull}},
+{{4515395664962759521ull, 8981879209728328630ull,
+ 11795962572196942140ull, 2385891675141890712ull}},
+{{14867616618058225209ull, 11227349012160410787ull,
+ 14744953215246177675ull, 2982364593927363390ull}},
+{{13972834754145393607ull, 9422500246773125580ull,
+ 9207819482202946286ull, 3727955742409204238ull}},
+{{17956393758195646813ull, 1277376635805815583ull,
+ 1143201157949453525ull, 2329972339005752649ull}},
+{{17833806179317170612ull, 6208406813184657383ull,
+ 6040687465864204810ull, 2912465423757190811ull}},
+{{17680571705719075361ull, 16983880553335597537ull,
+ 2939173313902868108ull, 3640581779696488514ull}},
+{{8265656576866680489ull, 2783106617959945306ull,
+ 12897338679233360944ull, 4550727224620610642ull}},
+{{9777721378969063210ull, 1739441636224965816ull,
+ 12672522692948238494ull, 2844204515387881651ull}},
+{{12222151723711329012ull, 11397674082135983078ull,
+ 11228967347757910213ull, 3555255644234852064ull}},
+{{6054317617784385457ull, 412034547387815136ull,
+ 14036209184697387767ull, 4444069555293565080ull}},
+{{3783948511115240911ull, 7175050619758466316ull,
+ 8772630740435867354ull, 2777543472058478175ull}},
+{{4729935638894051138ull, 18192185311552858703ull,
+ 6354102407117446288ull, 3471929340073097719ull}},
+{{1300733530190176019ull, 4293487565731521763ull,
+ 3330941990469419957ull, 4339911675091372149ull}},
+{{16953859520864717676ull, 4989272737795895053ull,
+ 4387681753257081425ull, 2712444796932107593ull}},
+{{7357266345798733383ull, 10848276940672256721ull,
+ 10096288209998739685ull, 3390555996165134491ull}},
+{{13808268950675804632ull, 18172032194267708805ull,
+ 8008674244071036702ull, 4238194995206418114ull}},
+{{10936011103386071847ull, 6745834102989930099ull,
+ 9617107420971785843ull, 2648871872004011321ull}},
+{{9058327860805201905ull, 3820606610310024720ull,
+ 16633070294642120208ull, 3311089840005014151ull}},
+{{11322909826006502381ull, 4775758262887530900ull,
+ 16179651849875262356ull, 4138862300006267689ull}},
+{{16300190678108839796ull, 12208220951159482620ull,
+ 3194753378530957116ull, 2586788937503917306ull}},
+{{1928494273926498129ull, 15260276188949353276ull,
+ 13216813760018472203ull, 3233486171879896632ull}},
+{{2410617842408122661ull, 14463659217759303691ull,
+ 16521017200023090254ull, 4041857714849870790ull}},
+{{17647537216000934328ull, 4428100992672176902ull,
+ 5713949731587043505ull, 2526161071781169244ull}},
+{{12836049483146392101ull, 10146812259267609032ull,
+ 7142437164483804381ull, 3157701339726461555ull}},
+{{16045061853932990127ull, 17295201342511899194ull,
+ 4316360437177367572ull, 3947126674658076944ull}},
+{{14639849677135506733ull, 1586128802215161188ull,
+ 2697725273235854733ull, 2466954171661298090ull}},
+{{18299812096419383417ull, 6594347021196339389ull,
+ 12595528628399594224ull, 3083692714576622612ull}},
+{{9039707065242065559ull, 8242933776495424237ull,
+ 15744410785499492780ull, 3854615893220778265ull}},
+{{7955659924989984926ull, 14375205647164415956ull,
+ 2922727713296101131ull, 2409134933262986416ull}},
+{{9944574906237481158ull, 13357321040528132041ull,
+ 3653409641620126414ull, 3011418666578733020ull}},
+{{17042404651224239351ull, 7473279263805389243ull,
+ 4566762052025158018ull, 3764273333223416275ull}},
+{{8345659897801455643ull, 9282485558305756181ull, 548383273302029809ull,
+ 2352670833264635172ull}},
+{{15043760890679207457ull, 16214792966309583130ull,
+ 685479091627537261ull, 2940838541580793965ull}},
+{{9581329076494233513ull, 6433433152604815201ull,
+ 5468534882961809481ull, 3676048176975992456ull}},
+{{16588347364045179795ull, 12653477459183406905ull,
+ 6835668603702261851ull, 4595060221219990570ull}},
+{{3450188074887155516ull, 5602580402775935364ull,
+ 8883978895741301561ull, 2871912638262494106ull}},
+{{4312735093608944395ull, 11614911521897307109ull,
+ 1881601582821851143ull, 3589890797828117633ull}},
+{{10002604885438568398ull, 9906953383944245982ull,
+ 6963687996954701833ull, 4487363497285147041ull}},
+{{1639942034971717345ull, 17721060911033623499ull,
+ 15881520044165158405ull, 2804602185803216900ull}},
+{{15884985598996810393ull, 8316268083509865661ull,
+ 1405155981496896391ull, 3505752732254021126ull}},
+{{6021173943463849279ull, 5783649085959944173ull,
+ 10979817013725896297ull, 4382190915317526407ull}},
+{{6069076723878599752ull, 15143995724793434868ull,
+ 13779914661219767041ull, 2738869322073454004ull}},
+{{7586345904848249689ull, 5094936600709629873ull,
+ 17224893326524708802ull, 3423586652591817505ull}},
+{{14094618399487700016ull, 15592042787741813149ull,
+ 7696058602873722290ull, 4279483315739771882ull}},
+{{11114979508893506462ull, 14356712760766021122ull,
+ 9421722645223464335ull, 2674677072337357426ull}},
+{{4670352349262107269ull, 13334204932530138499ull,
+ 2553781269674554611ull, 3343346340421696783ull}},
+{{1226254418150246183ull, 12056070147235285220ull,
+ 17027284642375356976ull, 4179182925527120978ull}},
+{{9989781048198679672ull, 7535043842022053262ull,
+ 15253738919911986014ull, 2611989328454450611ull}},
+{{3263854273393573782ull, 195432765672790770ull,
+ 14455487631462594614ull, 3264986660568063264ull}},
+{{13303189878596743036ull, 9467662993945764270ull,
+ 18069359539328243267ull, 4081233325710079080ull}},
+{{3702807655695576494ull, 3611446362002408717ull,
+ 11293349712080152042ull, 2550770828568799425ull}},
+{{9240195588046858521ull, 13737679989357786704ull,
+ 281629084818026340ull, 3188463535710999282ull}},
+{{11550244485058573151ull, 17172099986697233380ull,
+ 9575408392877308733ull, 3985579419638749102ull}},
+{{16442274840016384027ull, 13038405500899464814ull,
+ 1372944227120930054ull, 2490987137274218189ull}},
+{{11329471513165704226ull, 7074634839269555210ull,
+ 6327866302328550472ull, 3113733921592772736ull}},
+{{4938467354602354475ull, 8843293549086944013ull,
+ 7909832877910688090ull, 3892167401990965920ull}},
+{{5392385105840165499ull, 10138744486606727912ull,
+ 4943645548694180056ull, 2432604626244353700ull}},
+{{6740481382300206873ull, 12673430608258409890ull,
+ 6179556935867725070ull, 3040755782805442125ull}},
+{{17648973764730034400ull, 6618416223468236554ull,
+ 12336132188262044242ull, 3800944728506802656ull}},
+{{15642294621383659404ull, 8748196158095035750ull,
+ 7710082617663777651ull, 2375590455316751660ull}},
+{{10329496239874798447ull, 6323559179191406784ull,
+ 9637603272079722064ull, 2969488069145939575ull}},
+{{12911870299843498058ull, 7904448973989258480ull,
+ 7435318071672264676ull, 3711860086432424469ull}},
+{{8069918937402186287ull, 14163652645598062358ull,
+ 6952916804008859374ull, 2319912554020265293ull}},
+{{864026634897957050ull, 8481193770142802140ull,
+ 13302832023438462122ull, 2899890692525331616ull}},
+{{1080033293622446313ull, 1378120175823726867ull,
+ 16628540029298077653ull, 3624863365656664520ull}},
+{{15185099672310221603ull, 6334336238207046487ull,
+ 2338930962913045450ull, 4531079207070830651ull}},
+{{16408216322834970358ull, 8570646167306791958ull,
+ 17602732916316511070ull, 2831924504419269156ull}},
+{{11286898366688937139ull, 1489935672278714140ull,
+ 3556672071686087222ull, 3539905630524086446ull}},
+{{14108622958361171424ull, 11085791627203168483ull,
+ 13669212126462384835ull, 4424882038155108057ull}},
+{{6512046339762038188ull, 4622776757788286350ull,
+ 1625728551397908666ull, 2765551273846942536ull}},
+{{17363429961557323543ull, 15001842984090133745ull,
+ 2032160689247385832ull, 3456939092308678170ull}},
+{{7869229396664490717ull, 305559656403115566ull,
+ 11763572898414008099ull, 4321173865385847712ull}},
+{{306582354487918794ull, 16331875849747804893ull,
+ 7352233061508755061ull, 2700733665866154820ull}},
+{{4994913961537286397ull, 6579786756902592404ull,
+ 9190291326885943827ull, 3375917082332693525ull}},
+{{6243642451921607996ull, 3613047427700852601ull,
+ 16099550177034817688ull, 4219896352915866906ull}},
+{{15431491578519474757ull, 2258154642313032875ull,
+ 14673904879074148959ull, 2637435220572416816ull}},
+{{14677678454721955543ull, 16657751358173454806ull,
+ 18342381098842686198ull, 3296794025715521020ull}},
+{{9123726031547668620ull, 11598817160862042700ull,
+ 4481232299843806132ull, 4120992532144401276ull}},
+{{14925700806572068696ull, 16472632762393552495ull,
+ 12024142224257154640ull, 2575620332590250797ull}},
+{{14045439989787697966ull, 2144046879282389003ull,
+ 1195119725039279589ull, 3219525415737813497ull}},
+{{12945113968807234553ull, 7291744617530374158ull,
+ 6105585674726487390ull, 4024406769672266871ull}},
+{{3479010212077133692ull, 18392398441238647561ull,
+ 10733520074345136474ull, 2515254231045166794ull}},
+{{8960448783523805019ull, 13767126014693533643ull,
+ 4193528056076644785ull, 3144067788806458493ull}},
+{{6588874960977368369ull, 3373849463084753342ull,
+ 9853596088523193886ull, 3930084736008073116ull}},
+{{17953104905893018943ull, 15943713969710134550ull,
+ 15381869592181771986ull, 2456302960005045697ull}},
+{{13218009095511497870ull, 10706270425282892380ull,
+ 5392278934945051271ull, 3070378700006307122ull}},
+{{16522511369389372338ull, 8771152013176227571ull,
+ 15963720705536089897ull, 3837973375007883902ull}},
+{{8020726596654663759ull, 17011185054303611992ull,
+ 5365639422532668281ull, 2398733359379927439ull}},
+{{10025908245818329699ull, 7428923262597351278ull,
+ 2095363259738447448ull, 2998416699224909299ull}},
+{{3309013270418136316ull, 9286154078246689098ull,
+ 16454262129955223022ull, 3748020874031136623ull}},
+{{6679819312438723102ull, 1192160280476792782ull,
+ 17201442858863096245ull, 2342513046269460389ull}},
+{{17573146177403179685ull, 6101886369023378881ull,
+ 7666745518296706594ull, 2928141307836825487ull}},
+{{8131374666471810894ull, 16850729998133999410ull,
+ 4971745879443495338ull, 3660176634796031859ull}},
+{{940846296234987809ull, 11840040460812723455ull,
+ 1602996330876981269ull, 4575220793495039824ull}},
+{{7505557962787949237ull, 9705868297221646111ull,
+ 1001872706798113293ull, 2859512995934399890ull}},
+{{4770261435057548642ull, 16744021389954445543ull,
+ 10475712920352417424ull, 3574391244917999862ull}},
+{{1351140775394547898ull, 2483282663733505313ull,
+ 3871269113585745973ull, 4467989056147499828ull}},
+{{12373678030690062197ull, 3857894674047134772ull,
+ 11642915232845867041ull, 2792493160092187392ull}},
+{{15467097538362577746ull, 9434054360986306369ull,
+ 14553644041057333801ull, 3490616450115234240ull}},
+{{5498813867671058470ull, 16404253969660270866ull,
+ 18192055051321667251ull, 4363270562644042800ull}},
+{{8048444685721799448ull, 7946815721823975339ull,
+ 11370034407076042032ull, 2727044101652526750ull}},
+{{5448869838724861406ull, 9933519652279969174ull,
+ 4989170971990276732ull, 3408805127065658438ull}},
+{{16034459335260852565ull, 12416899565349961467ull,
+ 15459835751842621723ull, 4261006408832073047ull}},
+{{7715694075324338901ull, 5454719219130031965ull,
+ 16579926372542720433ull, 2663129005520045654ull}},
+{{14256303612582811531ull, 11430085042339927860ull,
+ 11501535928823624733ull, 3328911256900057068ull}},
+{{17820379515728514413ull, 452548247642746113ull,
+ 14376919911029530917ull, 4161139071125071335ull}},
+{{4220208169689239652ull, 2588685663990410273ull,
+ 15903103972034538679ull, 2600711919453169584ull}},
+{{9886946230538937469ull, 17070915135270176553ull,
+ 1432135891333621732ull, 3250889899316461981ull}},
+{{16970368806601059741ull, 2891899845378169075ull,
+ 6401855882594415070ull, 4063612374145577476ull}},
+{{8300637494911968386ull, 15642495458643519384ull,
+ 13224531963476285226ull, 2539757733840985922ull}},
+{{10375796868639960482ull, 10329747286449623422ull,
+ 7307292917490580725ull, 3174697167301232403ull}},
+{{3746374048945174795ull, 17523870126489417182ull,
+ 4522430128435838002ull, 3968371459126540504ull}},
+{{16176541835872897959ull, 15564104847483273642ull,
+ 2826518830272398751ull, 2480232161954087815ull}},
+{{10997305257986346641ull, 14843445040926704149ull,
+ 17368206593122662151ull, 3100290202442609768ull}},
+{{18358317590910321205ull, 13942620282730992282ull,
+ 3263514167693776073ull, 3875362753053262211ull}},
+{{16085634512746338657ull, 1796608649065788320ull,
+ 18180597419304467710ull, 2422101720658288881ull}},
+{{1660299067223371705ull, 11469132848187011209ull,
+ 8890688718848420925ull, 3027627150822861102ull}},
+{{6687059852456602536ull, 501358004951600299ull, 1889988861705750349ull,
+ 3784533938528576378ull}},
+{{1873569398571682633ull, 2619191762308444139ull,
+ 5792929056993481872ull, 2365333711580360236ull}},
+{{16177019803496767003ull, 3273989702885555173ull,
+ 7241161321241852340ull, 2956667139475450295ull}},
+{{6386216699088795042ull, 4092487128606943967ull,
+ 4439765633124927521ull, 3695833924344312869ull}},
+{{10908914464571578757ull, 14087019501447809739ull,
+ 5080696529916773652ull, 2309896202715195543ull}},
+{{9024457062287085542ull, 17608774376809762174ull,
+ 1739184643968579161ull, 2887370253393994429ull}},
+{{2057199291004081120ull, 8175909915730039006ull,
+ 6785666823388111856ull, 3609212816742493036ull}},
+{{11794871150609877208ull, 10219887394662548757ull,
+ 8482083529235139820ull, 4511516020928116295ull}},
+{{9677637478344867207ull, 15610801658518868781ull,
+ 12218831233413044243ull, 2819697513080072684ull}},
+{{16708732866358471913ull, 14901816054721198072ull,
+ 15273539041766305304ull, 3524621891350090855ull}},
+{{2439172009238538275ull, 180525994691945975ull,
+ 14480237783780493727ull, 4405777364187613569ull}},
+{{8442011533415168278ull, 7030357774323548090ull,
+ 2132619587221726723ull, 2753610852617258481ull}},
+{{1329142379914184539ull, 4176261199477047209ull,
+ 7277460502454546308ull, 3442013565771573101ull}},
+{{6273113993320118578ull, 5220326499346309011ull,
+ 13708511646495570789ull, 4302516957214466376ull}},
+{{1614853236611380159ull, 5568547071305137084ull,
+ 8567819779059731743ull, 2689073098259041485ull}},
+{{2018566545764225199ull, 2348997820704033451ull,
+ 15321460742252052583ull, 3361341372823801856ull}},
+{{16358266237487445211ull, 16771305331162205525ull,
+ 705081854105514112ull, 4201676716029752321ull}},
+{{12529759407643347209ull, 10482065831976378453ull,
+ 11969891204884416080ull, 2626047947518595200ull}},
+{{1827141204272020299ull, 13102582289970473067ull,
+ 14962364006105520100ull, 3282559934398244000ull}},
+{{16118984560622189086ull, 16378227862463091333ull,
+ 256210933922348509ull, 4103199917997805001ull}},
+{{12380208359602562131ull, 12542235423253126035ull,
+ 11689346879769937578ull, 2564499948748628125ull}},
+{{10863574431075814759ull, 6454422242211631736ull,
+ 776625544430258261ull, 3205624935935785157ull}},
+{{13579468038844768449ull, 12679713821191927574ull,
+ 5582467948965210730ull, 4007031169919731446ull}},
+{{3875481505850592377ull, 12536507156672342638ull,
+ 17324100523385420418ull, 2504394481199832153ull}},
+{{14067723919168016279ull, 6447261908985652489ull,
+ 7820067598949611811ull, 3130493101499790192ull}},
+{{3749596843677856636ull, 3447391367804677708ull,
+ 9775084498687014764ull, 3913116376874737740ull}},
+{{11566870064153436206ull, 11377991641732699375ull,
+ 15332799848534160035ull, 2445697735546711087ull}},
+{{9846901561764407353ull, 9610803533738486315ull,
+ 14554313792240312140ull, 3057122169433388859ull}},
+{{7696940933778121287ull, 12013504417173107894ull,
+ 13581206221873002271ull, 3821402711791736074ull}},
+{{198902065183937901ull, 14425969288374274290ull,
+ 13099939907098014323ull, 2388376694869835046ull}},
+{{9471999618334698184ull, 13420775592040454958ull,
+ 7151552847017742096ull, 2985470868587293808ull}},
+{{2616627486063596922ull, 16775969490050568698ull,
+ 8939441058772177620ull, 3731838585734117260ull}},
+{{6247078197217135980ull, 1261608894426829628ull,
+ 14810522698587386821ull, 2332399116083823287ull}},
+{{7808847746521419975ull, 6188697136460924939ull,
+ 13901467354806845622ull, 2915498895104779109ull}},
+{{5149373664724387065ull, 16959243457430931982ull,
+ 3541776138226393315ull, 3644373618880973887ull}},
+{{15660089117760259639ull, 16587368303361277073ull,
+ 18262278228065155356ull, 4555467023601217358ull}},
+{{2870026670959080419ull, 1143733152746022363ull,
+ 6802237874113334194ull, 2847166889750760849ull}},
+{{17422591393981014235ull, 10653038477787303761ull,
+ 13114483361069055646ull, 3558958612188451061ull}},
+{{7943181187194104082ull, 4092926060379353894ull,
+ 2558046146054155846ull, 4448698265235563827ull}},
+{{352802223568927147ull, 16393136843019259896ull,
+ 17739679905779705067ull, 2780436415772227391ull}},
+{{441002779461158934ull, 15879735035346686966ull,
+ 17562913863797243430ull, 3475545519715284239ull}},
+{{9774625511181224475ull, 10626296757328582899ull,
+ 17341956311319166384ull, 4344431899644105299ull}},
+{{3803297935274571345ull, 6641435473330364312ull,
+ 8532879685360785038ull, 2715269937277565812ull}},
+{{4754122419093214181ull, 17525166378517731198ull,
+ 10666099606700981297ull, 3394087421596957265ull}},
+{{15166025060721293535ull, 8071399917865000285ull,
+ 17944310526803614526ull, 4242609276996196581ull}},
+{{11784608672164502411ull, 432938930238237274ull,
+ 13521037088465953031ull, 2651630798122622863ull}},
+{{5507388803350852206ull, 14376231718079960305ull,
+ 12289610342155053384ull, 3314538497653278579ull}},
+{{11495922022615953162ull, 17970289647599950381ull,
+ 10750326909266428826ull, 4143173122066598224ull}},
+{{9490794273348664678ull, 15843117048177356892ull,
+ 6718954318291518016ull, 2589483201291623890ull}},
+{{11863492841685830848ull, 1357152236512144499ull,
+ 17622064934719173329ull, 3236854001614529862ull}},
+{{10217680033679900655ull, 6308126314067568528ull,
+ 12804209131544190853ull, 4046067502018162328ull}},
+{{6386050021049937910ull, 6248421955505924282ull,
+ 8002630707215119283ull, 2528792188761351455ull}},
+{{17205934563167198195ull, 3198841425955017448ull,
+ 5391602365591511200ull, 3160990235951689319ull}},
+{{3060674130249446128ull, 3998551782443771811ull,
+ 2127816938562001096ull, 3951237794939611649ull}},
+{{18053822395901761494ull, 2499094864027357381ull,
+ 12859100632669720445ull, 2469523621837257280ull}},
+{{8732219939595038155ull, 7735554598461584631ull,
+ 16073875790837150556ull, 3086904527296571600ull}},
+{{6303588906066409790ull, 9669443248076980789ull,
+ 1645600664836886579ull, 3858630659120714501ull}},
+{{6245586075505200071ull, 3737559020834419041ull,
+ 3334343424736748064ull, 2411644161950446563ull}},
+{{12418668612808887993ull, 4671948776043023801ull,
+ 18002987336203098792ull, 3014555202438058203ull}},
+{{1688277710728946279ull, 5839935970053779752ull,
+ 17892048151826485586ull, 3768194003047572754ull}},
+{{1055173569205591424ull, 8261645999711000249ull,
+ 15794216113318941395ull, 2355121251904732971ull}},
+{{5930652979934377184ull, 5715371481211362407ull,
+ 15131084123221288840ull, 2943901564880916214ull}},
+{{2801630206490583576ull, 7144214351514203009ull,
+ 9690483117171835242ull, 3679876956101145268ull}},
+{{8113723776540617374ull, 18153639976247529569ull,
+ 12113103896464794052ull, 4599846195126431585ull}},
+{{16600292406406355619ull, 2122652948299930172ull,
+ 653160907649414427ull, 2874903871954019741ull}},
+{{2303621434298392908ull, 16488374240657076428ull,
+ 5428137152989155937ull, 3593629839942524676ull}},
+{{2879526792872991135ull, 6775409745539181823ull,
+ 6785171441236444922ull, 4492037299928155845ull}},
+{{8717233273186701315ull, 8846317109389376543ull,
+ 6546575159986472028ull, 2807523312455097403ull}},
+{{6284855573055988740ull, 11057896386736720679ull,
+ 3571532931555702131ull, 3509404140568871754ull}},
+{{3244383447892598021ull, 9210684464993512945ull,
+ 13687788201299403472ull, 4386755175711089692ull}},
+{{13556954701001343523ull, 5756677790620945590ull,
+ 17778239662666902978ull, 2741721984819431057ull}},
+{{7722821339396903596ull, 16419219275130957796ull,
+ 8387741523051465010ull, 3427152481024288822ull}},
+{{9653526674246129495ull, 11300652057058921437ull,
+ 1261304866959555455ull, 4283940601280361028ull}},
+{{8339297180617524886ull, 13980436563302907754ull,
+ 10011687578704497967ull, 2677462875800225642ull}},
+{{1200749438917130300ull, 12863859685701246789ull,
+ 3291237436525846651ull, 3346828594750282053ull}},
+{{6112622817073800779ull, 11468138588699170582ull,
+ 8725732814084696218ull, 4183535743437852566ull}},
+{{17655447315953289199ull, 11779272636364369517ull,
+ 841896990375547232ull, 2614709839648657854ull}},
+{{8234251089659447786ull, 14724090795455461897ull,
+ 10275743274824209848ull, 3268387299560822317ull}},
+{{14904499880501697637ull, 18405113494319327371ull,
+ 17456365111957650214ull, 4085484124451027896ull}},
+{{7009469416099867071ull, 6891509915522191703ull,
+ 10910228194973531384ull, 2553427577781892435ull}},
+{{4150150751697445935ull, 8614387394402739629ull,
+ 9026099225289526326ull, 3191784472227365544ull}},
+{{9799374458049195323ull, 1544612206148648728ull,
+ 11282624031611907908ull, 3989730590284206930ull}},
+{{6124609036280747077ull, 10188754665697681263ull,
+ 11663326038184830346ull, 2493581618927629331ull}},
+{{3044075276923545942ull, 3512571295267325771ull,
+ 9967471529303650029ull, 3116977023659536664ull}},
+{{17640152151436596139ull, 9002400137511545117ull,
+ 12459339411629562536ull, 3896221279574420830ull}},
+{{13330938103861566539ull, 5626500085944715698ull,
+ 3175401113841088681ull, 2435138299734013019ull}},
+{{7440300592972182366ull, 11644811125858282527ull,
+ 17804309447583524563ull, 3043922874667516273ull}},
+{{4688689722787840053ull, 9944327888895465255ull,
+ 8420328754197241992ull, 3804903593334395342ull}},
+{{9847960104383481889ull, 6215204930559665784ull, 651019452945888341ull,
+ 2378064745833997089ull}},
+{{12309950130479352362ull, 12380692181626970134ull,
+ 5425460334609748330ull, 2972580932292496361ull}},
+{{6164065626244414644ull, 6252493190178936860ull,
+ 11393511436689573317ull, 3715726165365620451ull}},
+{{13075913053257534961ull, 6213651253075529489ull,
+ 4815101638717289371ull, 2322328853353512782ull}},
+{{2509833261289754989ull, 3155378047917023958ull,
+ 15242249085251387522ull, 2902911066691890977ull}},
+{{12360663613466969544ull, 13167594596751055755ull,
+ 5217753301282070690ull, 3628638833364863722ull}},
+{{10839143498406324026ull, 7236121209084043886ull,
+ 15745563663457364171ull, 4535798541706079652ull}},
+{{2162778668076564612ull, 2216732746463833477ull, 617605252806076799ull,
+ 2834874088566299783ull}},
+{{7315159353523093669ull, 16605973988361955558ull,
+ 14607064621289759710ull, 3543592610707874728ull}},
+{{18367321228758642894ull, 11534095448597668639ull,
+ 18258830776612199638ull, 4429490763384843410ull}},
+{{18397104795615233665ull, 2597123636946154995ull,
+ 16023455253810012678ull, 2768431727115527131ull}},
+{{18384694976091654177ull, 12469776583037469552ull,
+ 15417633048835127943ull, 3460539658894408914ull}},
+{{4534124646405016105ull, 10975534710369449037ull,
+ 10048669274189134121ull, 4325674573618011143ull}},
+{{5139670913216829018ull, 18388924240049375408ull,
+ 13197947324009290681ull, 2703546608511256964ull}},
+{{6424588641521036273ull, 9151097244779555548ull,
+ 16497434155011613352ull, 3379433260639071205ull}},
+{{8030735801901295341ull, 11438871555974444435ull,
+ 6786734638482352978ull, 4224291575798839007ull}},
+{{2713366866974615636ull, 11760980740911415676ull,
+ 11159238176692552467ull, 2640182234874274379ull}},
+{{3391708583718269545ull, 10089539907711881691ull,
+ 9337361702438302680ull, 3300227793592842974ull}},
+{{18074693784930000643ull, 12611924884639852113ull,
+ 2448330091193102542ull, 4125284741991053718ull}},
+{{4379154587940168546ull, 3270767034472519667ull,
+ 15365264362277852801ull, 2578302963744408573ull}},
+{{862257216497822778ull, 8700144811518037488ull, 5371522397565152289ull,
+ 3222878704680510717ull}},
+{{1077821520622278473ull, 15486867032824934764ull,
+ 11326089015383828265ull, 4028598380850638396ull}},
+{{9897010487243699854ull, 2761762867874502371ull,
+ 16302177671469668474ull, 2517873988031648997ull}},
+{{7759577090627236913ull, 12675575621697903772ull,
+ 6542664034054921880ull, 3147342485039561247ull}},
+{{9699471363284046141ull, 15844469527122379715ull,
+ 3566644024141264446ull, 3934178106299451559ull}},
+{{3756326592838834886ull, 5291107436024099418ull,
+ 9146681542729372135ull, 2458861316437157224ull}},
+{{13918780277903319416ull, 2002198276602736368ull,
+ 11433351928411715169ull, 3073576645546446530ull}},
+{{17398475347379149270ull, 7114433864180808364ull,
+ 5068317873659868153ull, 3841970806933058163ull}},
+{{1650675055257192486ull, 15975736211181474988ull,
+ 861855661823723643ull, 2401231754333161352ull}},
+{{2063343819071490607ull, 15357984245549455831ull,
+ 1077319577279654554ull, 3001539692916451690ull}},
+{{16414237829121526971ull, 9974108270082043980ull,
+ 10570021508454344001ull, 3751924616145564612ull}},
+{{1035526606346178549ull, 17763032714869747248ull,
+ 15829635479638740808ull, 2344952885090977882ull}},
+{{1294408257932723186ull, 3757046819877632444ull,
+ 10563672312693650203ull, 2931191106363722353ull}},
+{{1618010322415903982ull, 84622506419652651ull, 17816276409294450658ull,
+ 3663988882954652941ull}},
+{{15857570958302043690ull, 9329150169879341621ull,
+ 8435287456335899610ull, 4579986103693316177ull}},
+{{12216824858152471258ull, 10442404874601976417ull,
+ 16801269706278407016ull, 2862491314808322610ull}},
+{{1435973017408425361ull, 13053006093252470522ull,
+ 11778215095993232962ull, 3578114143510403263ull}},
+{{11018338308615307509ull, 7092885579710812344ull,
+ 10111082851564153299ull, 4472642679388004079ull}},
+{{6886461442884567193ull, 2127210478105563763ull,
+ 13236955809868677668ull, 2795401674617502549ull}},
+{{3996390785178321087ull, 2659013097631954704ull,
+ 2711136707053683373ull, 3494252093271878187ull}},
+{{4995488481472901359ull, 7935452390467331284ull,
+ 17223978939099267928ull, 4367815116589847733ull}},
+{{12345552337775339158ull, 4959657744042082052ull,
+ 13070829846150736407ull, 2729884447868654833ull}},
+{{15431940422219173947ull, 1587886161625214661ull,
+ 2503479252406256797ull, 3412355559835818542ull}},
+{{5454867472491803722ull, 6596543720458906231ull,
+ 12352721102362596804ull, 4265444449794773177ull}},
+{{10326821197948459182ull, 13346211862141592202ull,
+ 802921661335541146ull, 2665902781121733236ull}},
+{{3685154460580798170ull, 7459392790822214445ull,
+ 1003652076669426433ull, 3332378476402166545ull}},
+{{9218129094153385616ull, 13935927006955155960ull,
+ 5866251114264170945ull, 4165473095502708181ull}},
+{{5761330683845866010ull, 1792425351705890619ull,
+ 5972249955628800793ull, 2603420684689192613ull}},
+{{2589977336379944609ull, 6852217708059751178ull,
+ 12076998462963388895ull, 3254275855861490766ull}},
+{{12460843707329706569ull, 3953586116647301068ull,
+ 5872876041849460311ull, 4067844819826863458ull}},
+{{17011399353935842414ull, 9388520350545645023ull,
+ 8282233544583300598ull, 2542403012391789661ull}},
+{{16652563173992415113ull, 2512278401327280471ull,
+ 14964477949156513652ull, 3178003765489737076ull}},
+{{16204017949063130987ull, 3140348001659100589ull,
+ 258853362736090449ull, 3972504706862171346ull}},
+{{12433354227378150819ull, 13491932547105407628ull,
+ 4773469370137444434ull, 2482815441788857091ull}},
+{{15541692784222688524ull, 7641543647026983727ull,
+ 1355150694244417639ull, 3103519302236071364ull}},
+{{14815429961850972750ull, 4940243540356341755ull,
+ 1693938367805522049ull, 3879399127795089205ull}},
+{{6953800716943164017ull, 14616867258791183357ull,
+ 3364554489092145232ull, 2424624454871930753ull}},
+{{13303936914606342925ull, 18271084073488979196ull,
+ 8817379129792569444ull, 3030780568589913441ull}},
+{{16629921143257928657ull, 4392111018151672379ull,
+ 15633409930668099710ull, 3788475710737391801ull}},
+{{8087857705322511459ull, 16580127441626958949ull,
+ 2853352179026480462ull, 2367797319210869876ull}},
+{{14721508150080527227ull, 11501787265178922878ull,
+ 3566690223783100578ull, 2959746649013587345ull}},
+{{9178513150745883226ull, 5153862044618877790ull,
+ 9070048798156263627ull, 3699683311266984181ull}},
+{{1124884700788789112ull, 915320768673104667ull, 7974623508061358719ull,
+ 2312302069541865113ull}},
+{{15241163931268150102ull, 14979209016123544545ull,
+ 14579965403504086302ull, 2890377586927331391ull}},
+{{5216396858803023916ull, 9500639233299654874ull,
+ 13613270735952719974ull, 3612971983659164239ull}},
+{{15743868110358555702ull, 2652427004769792784ull,
+ 12404902401513512064ull, 4516214979573955299ull}},
+{{9839917568974097314ull, 1657766877981120490ull,
+ 5447220991732251088ull, 2822634362233722062ull}},
+{{3076524924362845835ull, 2072208597476400613ull,
+ 16032398276520089668ull, 3528292952792152577ull}},
+{{8457342173880945197ull, 2590260746845500766ull,
+ 6205439790367948373ull, 4410366190990190722ull}},
+{{674152840248202844ull, 3924755975992131931ull, 8490085887407355637ull,
+ 2756478869368869201ull}},
+{{14677749105592417267ull, 9517630988417552817ull,
+ 15224293377686582450ull, 3445598586711086501ull}},
+{{4512128326708357872ull, 2673666698667165214ull,
+ 5195308666826064351ull, 4306998233388858127ull}},
+{{16655138259474887382ull, 8588570714308060114ull,
+ 10164596944407372075ull, 2691873895868036329ull}},
+{{11595550787488833420ull, 6124027374457687239ull,
+ 17317432198936602998ull, 3364842369835045411ull}},
+{{9882752465933653870ull, 16878406254926884857ull,
+ 17035104230243365843ull, 4206052962293806764ull}},
+{{17705935337277003429ull, 8243160900115609083ull,
+ 1423568107047327844ull, 2628783101433629228ull}},
+{{17520733153168866382ull, 10303951125144511354ull,
+ 1779460133809159805ull, 3285978876792036535ull}},
+{{12677544404606307170ull, 17491624924858027097ull,
+ 16059383222543613468ull, 4107473595990045668ull}},
+{{1005936225237860125ull, 1708893541181491128ull, 813742477234982610ull,
+ 2567170997493778543ull}},
+{{1257420281547325157ull, 11359488963331639718ull,
+ 14852236151825891974ull, 3208963746867223178ull}},
+{{10795147388788932254ull, 4975989167309773839ull,
+ 9341923152927589160ull, 4011204683584028973ull}},
+{{13664496145634164515ull, 3109993229568608649ull,
+ 8144544979793437177ull, 2507002927240018108ull}},
+{{3245562126760541931ull, 8499177555388148716ull,
+ 10180681224741796471ull, 3133753659050022635ull}},
+{{4056952658450677414ull, 6012285925807797991ull,
+ 8114165512499857685ull, 3917192073812528294ull}},
+{{9453124439172755240ull, 6063521712843567696ull, 459667426885023149ull,
+ 2448245046132830184ull}},
+{{11816405548965944050ull, 12191088159481847524ull,
+ 574584283606278936ull, 3060306307666037730ull}},
+{{14770506936207430062ull, 15238860199352309405ull,
+ 9941602391362624478ull, 3825382884582547162ull}},
+{{11537409844343337741ull, 4912601606167805474ull,
+ 10825187513029028203ull, 2390864302864091976ull}},
+{{5198390268574396368ull, 1529065989282368939ull,
+ 13531484391286285254ull, 2988580378580114970ull}},
+{{1886301817290607556ull, 11134704523457736982ull,
+ 7690983452253080759ull, 3735725473225143713ull}},
+{{15013996691088793435ull, 13876719354802167469ull,
+ 16336079703726645234ull, 2334828420765714820ull}},
+{{4932437808578828081ull, 8122527156647933529ull,
+ 1973355555948754927ull, 2918535525957143526ull}},
+{{10777233279150923005ull, 5541472927382529007ull,
+ 11690066481790719467ull, 3648169407446429407ull}},
+{{8859855580511265853ull, 2315155140800773355ull,
+ 10000897083811011430ull, 4560211759308036759ull}},
+{{3231566728605847206ull, 15282030018282647059ull,
+ 13168089705022963999ull, 2850132349567522974ull}},
+{{17874516466039472719ull, 14490851504425920919ull,
+ 7236740094423929191ull, 3562665436959403718ull}},
+{{17731459564121952995ull, 13501878362105013245ull,
+ 18269297154884687297ull, 4453331796199254647ull}},
+{{13388005236789914574ull, 1521144948674551422ull,
+ 18335839749444011417ull, 2783332372624534154ull}},
+{{7511634509132617410ull, 6513117204270577182ull,
+ 13696427649950238463ull, 3479165465780667693ull}},
+{{166171099560995954ull, 3529710486910833574ull, 3285476507155634367ull,
+ 4348956832225834617ull}},
+{{13938914992507786183ull, 9123598081960352839ull,
+ 13582637863040741239ull, 2718098020141146635ull}},
+{{12811957722207344825ull, 6792811584023053145ull,
+ 12366611310373538645ull, 3397622525176433294ull}},
+{{2179889097477017319ull, 13102700498456204336ull,
+ 6234892101112147498ull, 4247028156470541618ull}},
+{{1362430685923135825ull, 12800873829962515614ull,
+ 8508493581622480090ull, 2654392597794088511ull}},
+{{10926410394258695589ull, 6777720250598368709ull,
+ 6023930958600712209ull, 3317990747242610639ull}},
+{{18269699011250757390ull, 13083836331675348790ull,
+ 2918227679823502357ull, 4147488434053263299ull}},
+{{6806875863604335465ull, 10483240716510786946ull,
+ 17964793364385546637ull, 2592180271283289561ull}},
+{{17731966866360195139ull, 17715736914065871586ull,
+ 8620933650199769584ull, 3240225339104111952ull}},
+{{12941586546095468115ull, 3697927068872787867ull,
+ 10776167062749711981ull, 4050281673880139940ull}},
+{{5782648582095973620ull, 4617047427259186369ull,
+ 15958476451073345796ull, 2531426046175087462ull}},
+{{11839996746047354929ull, 5771309284073982961ull,
+ 10724723526986906437ull, 3164282557718859328ull}},
+{{964937877277029950ull, 11825822623519866606ull,
+ 13405904408733633046ull, 3955353197148574160ull}},
+{{14438144228580307431ull, 2779453121272528724ull,
+ 8378690255458520654ull, 2472095748217858850ull}},
+{{18047680285725384288ull, 12697688438445436713ull,
+ 1249990782468375009ull, 3090119685272323563ull}},
+{{8724542301874566648ull, 2037052492774632180ull,
+ 15397546533367632474ull, 3862649606590404453ull}},
+{{14676210975526379963ull, 5884843826411533016ull,
+ 11929309592568464248ull, 2414156004119002783ull}},
+{{18345263719407974954ull, 7356054783014416270ull,
+ 10299950972283192406ull, 3017695005148753479ull}},
+{{13708207612405192884ull, 18418440515622796146ull,
+ 8263252696926602603ull, 3772118756435941849ull}},
+{{13179315776180633457ull, 9205682313050553639ull,
+ 16693747981647596387ull, 2357574222772463655ull}},
+{{11862458701798403917ull, 6895416872885804145ull,
+ 16255498958632107580ull, 2946967778465579569ull}},
+{{993015321965841184ull, 8619271091107255182ull, 6484315643007970763ull,
+ 3683709723081974462ull}},
+{{10464641189312077288ull, 6162402845456681073ull,
+ 17328766590614739262ull, 4604637153852468077ull}},
+{{18069615789388518065ull, 17686559833692589382ull,
+ 13136322128347905990ull, 2877898221157792548ull}},
+{{13363647699880871773ull, 12884827755260960920ull,
+ 16420402660434882488ull, 3597372776447240685ull}},
+{{16704559624851089717ull, 16106034694076201150ull,
+ 6690445270261439398ull, 4496715970559050857ull}},
+{{5828663747104543169ull, 5454585665370237815ull,
+ 15710743339981869384ull, 2810447481599406785ull}},
+{{2674143665453291057ull, 6818232081712797269ull,
+ 5803371119695173018ull, 3513059351999258482ull}},
+{{7954365600244001725ull, 17746162138995772394ull,
+ 16477585936473742080ull, 4391324189999073102ull}},
+{{9583164518579888983ull, 11091351336872357746ull,
+ 5686805191868700896ull, 2744577618749420689ull}},
+{{2755583611370085420ull, 13864189171090447183ull,
+ 11720192508263264024ull, 3430722023436775861ull}},
+{{17279537569494770487ull, 17330236463863058978ull,
+ 815182580046916318ull, 4288402529295969827ull}},
+{{15411396999361619459ull, 6219711771487023957ull,
+ 16650390177025180363ull, 2680251580809981141ull}},
+{{5429188193919860611ull, 3162953695931392043ull,
+ 6977929665999311742ull, 3350314476012476427ull}},
+{{2174799223972437860ull, 13177064156769015862ull,
+ 4110726064071751773ull, 4187893095015595534ull}},
+{{15194307570264937374ull, 10541508107194328865ull,
+ 16404261845327008570ull, 2617433184384747208ull}},
+{{5157826407549008006ull, 3953513097138135274ull,
+ 2058583232949209097ull, 3271791480480934011ull}},
+{{15670655046291035815ull, 9553577389850056996ull,
+ 16408287096468675083ull, 4089739350601167513ull}},
+{{570787367077121577ull, 3665142859442591671ull, 3337650407651840071ull,
+ 2556087094125729696ull}},
+{{14548542264128565683ull, 18416486629585403300ull,
+ 4172063009564800088ull, 3195108867657162120ull}},
+{{18185677830160707103ull, 4573864213272202509ull,
+ 5215078761956000111ull, 3993886084571452650ull}},
+{{13671891653064135892ull, 9776194160936208424ull,
+ 7871110244649887973ull, 2496178802857157906ull}},
+{{17089864566330169865ull, 16831928719597648434ull,
+ 615515768957584158ull, 3120223503571447383ull}},
+{{12138958671057936523ull, 11816538862642284735ull,
+ 14604452766479143910ull, 3900279379464309228ull}},
+{{14504378197052292183ull, 2773650770724040055ull,
+ 18351155015904240752ull, 2437674612165193267ull}},
+{{13518786727887977324ull, 3467063463405050069ull,
+ 18327257751452913036ull, 3047093265206491584ull}},
+{{3063425354577807943ull, 4333829329256312587ull,
+ 4462328115606589679ull, 3808866581508114481ull}},
+{{18055541911106987629ull, 9626172358426277222ull,
+ 14318170118322588309ull, 2380541613442571550ull}},
+{{13346055352028958728ull, 16644401466460234432ull,
+ 8674340611048459578ull, 2975677016803214438ull}},
+{{16682569190036198410ull, 11582129796220517232ull,
+ 1619553726955798665ull, 3719596271004018048ull}},
+{{10426605743772624006ull, 321302094996741414ull,
+ 1012221079347374166ull, 2324747669377511280ull}},
+{{3809885142861004200ull, 9624999655600702576ull,
+ 1265276349184217707ull, 2905934586721889100ull}},
+{{4762356428576255250ull, 7419563551073490316ull,
+ 1581595436480272134ull, 3632418233402361375ull}},
+{{5952945535720319062ull, 51082401987087087ull, 15812052350882503880ull,
+ 4540522791752951718ull}},
+{{10638119987466281270ull, 31926501241929429ull, 5270846700874177021ull,
+ 2837826744845594824ull}},
+{{17909336002760239491ull, 4651594144979799690ull,
+ 6588558376092721276ull, 3547283431056993530ull}},
+{{13163297966595523556ull, 5814492681224749613ull,
+ 17459070006970677403ull, 4434104288821241912ull}},
+{{10532904238335896175ull, 1328214916551774556ull,
+ 10911918754356673377ull, 2771315180513276195ull}},
+{{13166130297919870218ull, 6271954664117106099ull,
+ 9028212424518453817ull, 3464143975641595244ull}},
+{{11845976853972449868ull, 12451629348573770528ull,
+ 11285265530648067271ull, 4330179969551994055ull}},
+{{7403735533732781168ull, 14699797370499688436ull,
+ 13970819984296123900ull, 2706362480969996284ull}},
+{{9254669417165976460ull, 18374746713124610545ull,
+ 17463524980370154875ull, 3382953101212495355ull}},
+{{16180022789884858479ull, 18356747372978375277ull,
+ 17217720207035305690ull, 4228691376515619194ull}},
+{{12418357252891730501ull, 16084653126538872452ull,
+ 15372761147824453960ull, 2642932110322261996ull}},
+{{15522946566114663127ull, 1659072334464038949ull,
+ 769207361071015835ull, 3303665137902827496ull}},
+{{5568625152361165196ull, 15908898473362212399ull,
+ 961509201338769793ull, 4129581422378534370ull}},
+{{10397919747866810104ull, 3025532518210300893ull,
+ 5212629269264119025ull, 2580988388986583981ull}},
+{{17609085703260900534ull, 8393601666190264020ull,
+ 11127472605007536685ull, 3226235486233229976ull}},
+{{3564613055366574051ull, 15103688101165217930ull,
+ 13909340756259420856ull, 4032794357791537470ull}},
+{{6839569178031496686ull, 9439805063228261206ull,
+ 4081651954234750131ull, 2520496473619710919ull}},
+{{17772833509394146665ull, 7188070310607938603ull,
+ 490378924366049760ull, 3150620592024638649ull}},
+{{17604355868315295428ull, 8985087888259923254ull,
+ 5224659673884950104ull, 3938275740030798311ull}},
+{{6391036399269671738ull, 5615679930162452034ull,
+ 10182941323819175671ull, 2461422337519248944ull}},
+{{17212167535941865481ull, 2407913894275677138ull,
+ 12728676654773969589ull, 3076777921899061180ull}},
+{{12291837383072556043ull, 7621578386271984327ull,
+ 15910845818467461986ull, 3845972402373826475ull}},
+{{14599927392061429383ull, 9375172509847378108ull,
+ 7638435627328469789ull, 2403732751483641547ull}},
+{{18249909240076786729ull, 16330651655736610539ull,
+ 4936358515733199332ull, 3004665939354551934ull}},
+{{18200700531668595507ull, 1966570495961211558ull,
+ 15393820181521274974ull, 3755832424193189917ull}},
+{{6763751813865484288ull, 15064164615257920936ull,
+ 11926980622664490810ull, 2347395265120743698ull}},
+{{8454689767331855360ull, 9606833732217625362ull,
+ 5685353741475837705ull, 2934244081400929623ull}},
+{{1344990172310043392ull, 16620228183699419607ull,
+ 2495006158417409227ull, 3667805101751162029ull}},
+{{15516295770669717951ull, 16163599211196886604ull,
+ 7730443716449149438ull, 4584756377188952536ull}},
+{{474312819813797912ull, 5490563488570666224ull, 4831527322780718399ull,
+ 2865472735743095335ull}},
+{{592891024767247390ull, 2251518342285944876ull, 1427723135048510095ull,
+ 3581840919678869169ull}},
+{{741113780959059237ull, 16649455983139594807ull,
+ 6396339937238025522ull, 4477301149598586461ull}},
+{{7380725140740493879ull, 15017596007889634658ull,
+ 6303555469987459903ull, 2798313218499116538ull}},
+{{2534389070841541ull, 14160308991434655419ull, 17102816374339100687ull,
+ 3497891523123895672ull}},
+{{13838226041620715638ull, 13088700220865931369ull,
+ 2931776394214324243ull, 4372364403904869591ull}},
+{{1731362248371865418ull, 5874594628827513154ull,
+ 8749889274025034508ull, 2732727752440543494ull}},
+{{11387574847319607580ull, 7343243286034391442ull,
+ 1713989555676517327ull, 3415909690550679368ull}},
+{{5011096522294733667ull, 4567368089115601399ull,
+ 2142486944595646659ull, 4269887113188349210ull}},
+{{10049464354075290398ull, 548762046483556922ull,
+ 5950740358799667066ull, 2668679445742718256ull}},
+{{3338458405739337190ull, 9909324594959221961ull,
+ 7438425448499583832ull, 3335849307178397820ull}},
+{{8784759025601559391ull, 12386655743699027451ull,
+ 9298031810624479790ull, 4169811633972997275ull}},
+{{3184631381787280668ull, 3129973821384504253ull,
+ 3505426872426605917ull, 2606132271233123297ull}},
+{{8592475245661488738ull, 8524153295158018220ull,
+ 8993469608960645300ull, 3257665339041404121ull}},
+{{10740594057076860923ull, 10655191618947522775ull,
+ 15853523029628194529ull, 4072081673801755151ull}},
+{{13630400313314119933ull, 18188709807910671494ull,
+ 16825980921158703436ull, 2545051046126096969ull}},
+{{7814628354787874108ull, 4289143186178787752ull,
+ 7197418096166215584ull, 3181313807657621212ull}},
+{{9768285443484842635ull, 5361428982723484690ull,
+ 8996772620207769480ull, 3976642259572026515ull}},
+{{10716864420605414551ull, 3350893114202177931ull,
+ 3317139878416161973ull, 2485401412232516572ull}},
+{{8784394507329380285ull, 8800302411180110318ull,
+ 4146424848020202466ull, 3106751765290645715ull}},
+{{1757121097306949548ull, 1777005977120362090ull, 571345041597865179ull,
+ 3883439706613307144ull}},
+{{5709886704244231371ull, 17251529800196083970ull,
+ 357090650998665736ull, 2427149816633316965ull}},
+{{16360730417160065022ull, 3117668176535553346ull,
+ 5058049332175720075ull, 3033937270791646206ull}},
+{{11227540984595305470ull, 17732143275951605395ull,
+ 15545933702074425901ull, 3792421588489557757ull}},
+{{4711370106158371967ull, 13388432556683447324ull,
+ 12022051573010210140ull, 2370263492805973598ull}},
+{{5889212632697964958ull, 16735540695854309155ull,
+ 5804192429407986867ull, 2962829366007466998ull}},
+{{2749829772445068294ull, 16307739851390498540ull,
+ 16478612573614759392ull, 3703536707509333747ull}},
+{{10942015644632943492ull, 10192337407119061587ull,
+ 7993289849295530668ull, 2314710442193333592ull}},
+{{9065833537363791461ull, 12740421758898826984ull,
+ 9991612311619413335ull, 2893388052741666990ull}},
+{{11332291921704739326ull, 11313841180196145826ull,
+ 3266143352669490861ull, 3616735065927083738ull}},
+{{4941992865276148349ull, 307243419963018571ull,
+ 13306051227691639385ull, 4520918832408854672ull}},
+{{782902531583898766ull, 11721242183545356367ull,
+ 8316282017307274615ull, 2825574270255534170ull}},
+{{14813686219762037170ull, 10039866711004307554ull,
+ 1171980484779317461ull, 3531967837819417713ull}},
+{{9293735737847770654ull, 17161519407182772347ull,
+ 6076661624401534730ull, 4414959797274272141ull}},
+{{3502741826941162707ull, 15337635647916620621ull,
+ 6103756524464653158ull, 2759349873296420088ull}},
+{{8990113302103841287ull, 9948672523040999968ull,
+ 7629695655580816448ull, 3449187341620525110ull}},
+{{11237641627629801609ull, 12435840653801249960ull,
+ 313747532621244752ull, 4311484177025656388ull}},
+{{7023526017268626006ull, 7772400408625781225ull,
+ 9419464244743053778ull, 2694677610641035242ull}},
+{{13391093540013170411ull, 492128473927450723ull,
+ 2550958269074041415ull, 3368347013301294053ull}},
+{{12127180906589075110ull, 14450218647691477116ull,
+ 7800383854769939672ull, 4210433766626617566ull}},
+{{16802860103472947752ull, 9031386654807173197ull,
+ 263553890803824391ull, 2631521104141635979ull}},
+{{7168517074059020978ull, 6677547300081578593ull,
+ 14164500418786944201ull, 3289401380177044973ull}},
+{{13572332361001164126ull, 12958620143529361145ull,
+ 3870567468201516539ull, 4111751725221306217ull}},
+{{1565178697984645723ull, 5793294580492156764ull,
+ 13948319713694417597ull, 2569844828263316385ull}},
+{{1956473372480807154ull, 11853304244042583859ull,
+ 3600341586835858284ull, 3212306035329145482ull}},
+{{16280649770883172654ull, 14816630305053229823ull,
+ 13723799020399598663ull, 4015382544161431852ull}},
+{{17092935134443064765ull, 16177922968299350495ull,
+ 17800746424604524972ull, 2509614090100894907ull}},
+{{16754482899626443052ull, 1775659636664636503ull,
+ 17639247012328268312ull, 3137017612626118634ull}},
+{{16331417606105665911ull, 2219574545830795629ull,
+ 12825686728555559582ull, 3921272015782648293ull}},
+{{12512979013029735146ull, 15222292146426410980ull,
+ 10321897214560918690ull, 2450795009864155183ull}},
+{{15641223766287168933ull, 9804493146178237917ull,
+ 8290685499773760459ull, 3063493762330193979ull}},
+{{5716471652576797454ull, 7643930414295409493ull,
+ 5751670856289812670ull, 3829367202912742474ull}},
+{{5878637792074192361ull, 165770490507243029ull, 8206480303608520823ull,
+ 2393354501820464046ull}},
+{{11959983258520128355ull, 14042271168416217498ull,
+ 1034728342655875220ull, 2991693127275580058ull}},
+{{5726607036295384636ull, 17552838960520271873ull,
+ 10516782465174619833ull, 3739616409094475072ull}},
+{{15108344443753085158ull, 4052995322684088064ull,
+ 6572989040734137396ull, 2337260255684046920ull}},
+{{438686480981804831ull, 5066244153355110081ull, 8216236300917671745ull,
+ 2921575319605058650ull}},
+{{5160044119654643942ull, 10944491210121275505ull,
+ 1046923339292313873ull, 3651969149506323313ull}},
+{{11061741167995692832ull, 18292300031078982285ull,
+ 5920340192542780245ull, 4564961436882904141ull}},
+{{9219431239211001972ull, 13738530528638057880ull,
+ 6006055629552931605ull, 2853100898051815088ull}},
+{{11524289049013752465ull, 3338105105515408638ull,
+ 7507569536941164507ull, 3566376122564768860ull}},
+{{5181989274412414773ull, 18007689437176424510ull,
+ 9384461921176455633ull, 4457970153205961075ull}},
+{{17073801351789922945ull, 4337276870594183462ull,
+ 3559445691521590819ull, 2786231345753725672ull}},
+{{12118879652882627874ull, 809910069815341424ull,
+ 4449307114401988524ull, 3482789182192157090ull}},
+{{15148599566103284842ull, 1012387587269176780ull,
+ 14785005929857261463ull, 4353486477740196362ull}},
+{{244502691959777218ull, 7550271269684317344ull,
+ 13852314724588176318ull, 2720929048587622726ull}},
+{{305628364949721523ull, 214467050250620872ull, 8092021368880444590ull,
+ 3401161310734528408ull}},
+{{382035456187151903ull, 9491455849668051898ull,
+ 10115026711100555737ull, 4251451638418160510ull}},
+{{4850458178544357844ull, 17461374952111002196ull,
+ 1710205676010459431ull, 2657157274011350319ull}},
+{{6063072723180447305ull, 17215032671711364841ull,
+ 15972815150295238001ull, 3321446592514187898ull}},
+{{12190526922402947035ull, 7683732784357042339ull,
+ 10742646901014271694ull, 4151808240642734873ull}},
+{{5313236317288147945ull, 190646971795763558ull,
+ 18243369359202389569ull, 2594880150401709295ull}},
+{{15864917433464960739ull, 4849994733172092351ull,
+ 18192525680575599057ull, 3243600188002136619ull}},
+{{15219460773403813020ull, 10674179434892503343ull,
+ 18128971082292110917ull, 4054500235002670774ull}},
+{{16429692011018464993ull, 8977205156021508541ull,
+ 6718920908005181419ull, 2534062646876669234ull}},
+{{6702056958490917530ull, 6609820426599497773ull,
+ 17622023171861252582ull, 3167578308595836542ull}},
+{{12989257216541034816ull, 17485647570104148024ull,
+ 12804156927971789919ull, 3959472885744795678ull}},
+{{8118285760338146760ull, 17846058758956174371ull,
+ 3390912061554980795ull, 2474670553590497299ull}},
+{{5536171181995295546ull, 17695887430267830060ull,
+ 18073698132225889706ull, 3093338191988121623ull}},
+{{6920213977494119432ull, 12896487250980011767ull,
+ 17980436646854974229ull, 3866672739985152029ull}},
+{{11242662763574906501ull, 10366147541076201306ull,
+ 13543615913498052845ull, 2416670462490720018ull}},
+{{4829956417613857319ull, 17569370444772639537ull,
+ 7706147855017790248ull, 3020838078113400023ull}},
+{{10649131540444709552ull, 3514968982256247805ull,
+ 5020998800344849907ull, 3776047597641750029ull}},
+{{8961550221991637422ull, 18337756678406012542ull,
+ 5443967259429225143ull, 2360029748526093768ull}},
+{{1978565740634770970ull, 18310509829580127774ull,
+ 6804959074286531429ull, 2950037185657617210ull}},
+{{11696579212648239520ull, 9053079231692996005ull,
+ 17729570879712940095ull, 3687546482072021512ull}},
+{{785665960528135688ull, 6704663021188857103ull, 3715219525931623503ull,
+ 4609433102590026891ull}},
+{{7408570252971166661ull, 11107943415884117545ull, 16169194493570737ull,
+ 2880895689118766807ull}},
+{{13872398834641346230ull, 49871214572983219ull,
+ 13855269548399127134ull, 3601119611398458508ull}},
+{{12728812524874294884ull, 9285711055071004832ull,
+ 17319086935498908917ull, 4501399514248073135ull}},
+{{7955507828046434303ull, 8109412418633071972ull,
+ 17741958362327899929ull, 2813374696405045709ull}},
+{{9944384785058042878ull, 14748451541718727869ull,
+ 8342389897627711199ull, 3516718370506307137ull}},
+{{17042166999749941502ull, 13823878408721021932ull,
+ 15039673390462026903ull, 4395897963132883921ull}},
+{{1427982337988937631ull, 15557453033091720564ull,
+ 2482266841397684958ull, 2747436226958052451ull}},
+{{1784977922486172038ull, 10223444254509874897ull,
+ 16937891607029269910ull, 3434295283697565563ull}},
+{{6842908421535102952ull, 3555933281282567813ull,
+ 16560678490359199484ull, 4292869104621956954ull}},
+{{6582660772673133297ull, 11445830337656380691ull,
+ 14962110074901887581ull, 2683043190388723096ull}},
+{{3616639947414028717ull, 472229866788312152ull, 255893519917807861ull,
+ 3353803987985903871ull}},
+{{4520799934267535896ull, 5201973351912778094ull,
+ 14154924955179423538ull, 4192254984982379838ull}},
+{{16660558014199373647ull, 7862919363372874212ull,
+ 4235142078559751807ull, 2620159365613987399ull}},
+{{2378953444039665443ull, 5216963185788704862ull, 682241579772301855ull,
+ 3275199207017484249ull}},
+{{12197063841904357612ull, 1909517963808493173ull,
+ 5464487993142765223ull, 4093999008771855311ull}},
+{{9929007910403917459ull, 8110977755021390089ull,
+ 10332834023355310120ull, 2558749380482409569ull}},
+{{17022945906432284728ull, 10138722193776737611ull,
+ 17527728547621525554ull, 3198436725603011961ull}},
+{{16666996364612968006ull, 3450030705366146206ull,
+ 8074602629244743231ull, 3998045907003764952ull}},
+{{5805186709455717100ull, 9073798218494923235ull,
+ 5046626643277964519ull, 2498778691877353095ull}},
+{{2644797368392258471ull, 6730561754691266140ull,
+ 1696597285670067745ull, 3123473364846691369ull}},
+{{3305996710490323089ull, 13024888211791470579ull,
+ 6732432625514972585ull, 3904341706058364211ull}},
+{{18207149008552309595ull, 1223026104728587255ull,
+ 1901927381733163914ull, 2440213566286477632ull}},
+{{18147250242262999089ull, 10752154667765509877ull,
+ 2377409227166454892ull, 3050266957858097040ull}},
+{{8849004747546585149ull, 13440193334706887347ull,
+ 2971761533958068615ull, 3812833697322621300ull}},
+{{3224784958002921766ull, 15317649861832886448ull,
+ 11080722995578568692ull, 2383021060826638312ull}},
+{{4030981197503652208ull, 700318253581556444ull,
+ 13850903744473210866ull, 2978776326033297890ull}},
+{{5038726496879565260ull, 10098769853831721363ull,
+ 8090257643736737774ull, 3723470407541622363ull}},
+{{843361051336034336ull, 1700045140217437948ull, 2750568018121767157ull,
+ 2327169004713513977ull}},
+{{1054201314170042919ull, 6736742443699185339ull,
+ 8049896041079596850ull, 2908961255891892471ull}},
+{{15152809697994717361ull, 17644300091478757481ull,
+ 5450684032922108158ull, 3636201569864865589ull}},
+{{5105954067211232989ull, 12832003077493671044ull,
+ 11425041059580023102ull, 4545251962331081986ull}},
+{{12414593328861796426ull, 3408315905006156498ull,
+ 11752336680664902343ull, 2840782476456926241ull}},
+{{6294869624222469725ull, 18095452936539859335ull,
+ 855362795548964216ull, 3550978095571157802ull}},
+{{3256901011850699252ull, 4172572096965272553ull,
+ 10292575531290981079ull, 4438722619463947252ull}},
+{{13564778178475156793ull, 9525386588244377201ull,
+ 15656231743911638982ull, 2774201637164967032ull}},
+{{3120914667811782279ull, 2683361198450695694ull,
+ 1123545606179997112ull, 3467752046456208791ull}},
+{{13124515371619503656ull, 3354201498063369617ull,
+ 15239490063007160102ull, 4334690058070260988ull}},
+{{1285293079621107929ull, 15931433991571769723ull,
+ 301309252524699255ull, 2709181286293913118ull}},
+{{15441674404808548624ull, 15302606471037324249ull,
+ 9600008602510649877ull, 3386476607867391397ull}},
+{{5467034950728522067ull, 5293200033514491600ull,
+ 16611696771565700251ull, 4233095759834239246ull}},
+{{3416896844205326292ull, 1002407011732863298ull,
+ 5770624463801174753ull, 2645684849896399529ull}},
+{{13494493092111433673ull, 5864694783093467026ull,
+ 11824966598178856345ull, 3307106062370499411ull}},
+{{7644744328284516283ull, 11942554497294221687ull,
+ 10169522229296182527ull, 4133882577963124264ull}},
+{{11695494232818904533ull, 14381625588449970410ull,
+ 6355951393310114079ull, 2583676611226952665ull}},
+{{5395995754168854858ull, 13365345967135075109ull,
+ 12556625260065030503ull, 3229595764033690831ull}},
+{{11356680711138456477ull, 12094996440491455982ull,
+ 11084095556653900225ull, 4036994705042113539ull}},
+{{2486239426034147394ull, 641843747666078133ull, 4621716713694993689ull,
+ 2523121690651320962ull}},
+{{7719485300970072147ull, 5413990703009985570ull,
+ 15000517928973517919ull, 3153902113314151202ull}},
+{{425984589357814375ull, 2155802360335094059ull, 9527275374362121591ull,
+ 3942377641642689003ull}},
+{{16407141432844491649ull, 8264905502850515642ull,
+ 3648704099762632042ull, 2463986026026680627ull}},
+{{11285554754200838753ull, 1107759841708368745ull,
+ 18395938179985453765ull, 3079982532533350783ull}},
+{{271885387468884729ull, 5996385820562848836ull,
+ 18383236706554429302ull, 3849978165666688479ull}},
+{{9393300404022828764ull, 17582799193133944234ull,
+ 18407051969237600169ull, 2406236353541680299ull}},
+{{2518253468173760147ull, 8143440936135266581ull,
+ 18397128943119612308ull, 3007795441927100374ull}},
+{{7759502853644588087ull, 10179301170169083226ull,
+ 13773039142044739577ull, 3759744302408875468ull}},
+{{9461375301955255459ull, 17891278277424146776ull,
+ 17831521500632738043ull, 2349840189005547167ull}},
+{{11826719127444069323ull, 17752411828352795566ull,
+ 17677715857363534650ull, 2937300236256933959ull}},
+{{5560026872450310846ull, 12967142748586218650ull,
+ 17485458803277030409ull, 3671625295321167449ull}},
+{{16173405627417664365ull, 2373870380450609600ull,
+ 8021765448814124300ull, 4589531619151459312ull}},
+{{10108378517136040228ull, 10707041024636406808ull,
+ 5013603405508827687ull, 2868457261969662070ull}},
+{{12635473146420050285ull, 8772115262368120606ull,
+ 15490376293740810417ull, 3585571577462077587ull}},
+{{6570969396170287049ull, 15576830096387538662ull,
+ 14751284348748625117ull, 4481964471827596984ull}},
+{{17941913927888593118ull, 12041361819455905615ull,
+ 9219552717967890698ull, 2801227794892248115ull}},
+{{17815706391433353493ull, 5828330237465106211ull,
+ 6912754879032475469ull, 3501534743615310144ull}},
+{{17657946970864303962ull, 11897098815258770668ull,
+ 8640943598790594336ull, 4376918429519137680ull}},
+{{1812844819935414168ull, 7435686759536731668ull,
+ 5400589749244121460ull, 2735574018449461050ull}},
+{{2266056024919267710ull, 9294608449420914585ull,
+ 15974109223409927633ull, 3419467523061826312ull}},
+{{7444256049576472542ull, 16229946580203531135ull,
+ 1520892455552857925ull, 4274334403827282891ull}},
+{{11570189058626377195ull, 12449559621840900911ull,
+ 17091458849216393867ull, 2671459002392051806ull}},
+{{9851050304855583589ull, 10950263508873738235ull,
+ 12140951524665716526ull, 3339323752990064758ull}},
+{{7702126862642091583ull, 4464457349237396986ull,
+ 5952817368977369850ull, 4174154691237580948ull}},
+{{9425515307578695143ull, 7401971861700761020ull,
+ 12943882892465631964ull, 2608846682023488092ull}},
+{{11781894134473368929ull, 9252464827125951275ull,
+ 16179853615582039955ull, 3261058352529360115ull}},
+{{10115681649664323257ull, 6953895015480051190ull,
+ 15613131001050162040ull, 4076322940661700144ull}},
+{{1710615012612814132ull, 4346184384675031994ull,
+ 9758206875656351275ull, 2547701837913562590ull}},
+{{11361640802620793473ull, 821044462416402088ull,
+ 2974386557715663286ull, 3184627297391953238ull}},
+{{14202051003275991841ull, 10249677614875278418ull,
+ 12941355233999354915ull, 3980784121739941547ull}},
+{{13487967895474882805ull, 4100205500083355059ull,
+ 5782504012035902870ull, 2487990076087463467ull}},
+{{12248273850916215602ull, 14348628911958969632ull,
+ 2616443996617490683ull, 3109987595109329334ull}},
+{{15310342313645269502ull, 13324100121521324136ull,
+ 12493927032626639162ull, 3887484493886661667ull}},
+{{9568963946028293439ull, 12939248594378215489ull,
+ 5502861386177955524ull, 2429677808679163542ull}},
+{{16572890950962754703ull, 16174060742972769361ull,
+ 16101948769577220213ull, 3037097260848954427ull}},
+{{6881055633421279666ull, 6382517873433797990ull,
+ 15515749943544137363ull, 3796371576061193034ull}},
+{{18135717826170463503ull, 1683230661682429791ull,
+ 14309029733142473756ull, 2372732235038245646ull}},
+{{18057961264285691475ull, 2104038327103037239ull,
+ 8662915129573316387ull, 2965915293797807058ull}},
+{{17960765561929726440ull, 16465105964160960261ull,
+ 1605271875111869675ull, 3707394117247258823ull}},
+{{13531321485419772977ull, 7984848218386906211ull,
+ 7920823949586000403ull, 2317121323279536764ull}},
+{{12302465838347328317ull, 5369374254556244860ull,
+ 9901029936982500504ull, 2896401654099420955ull}},
+{{15378082297934160396ull, 6711717818195306075ull,
+ 7764601402800737726ull, 3620502067624276194ull}},
+{{14610916853990312591ull, 17613019309598908402ull,
+ 482379716646146349ull, 4525627584530345243ull}},
+{{13743509052171333274ull, 13313980077713011703ull,
+ 16442388387399699132ull, 2828517240331465776ull}},
+{{12567700296786778688ull, 16642475097141264629ull,
+ 2106241410540072299ull, 3535646550414332221ull}},
+{{1874567315701309648ull, 16191407852999192883ull,
+ 7244487781602478278ull, 4419558188017915276ull}},
+{{17312505636809176194ull, 5507943889697107647ull,
+ 13751176900356324732ull, 2762223867511197047ull}},
+{{17028946027584082339ull, 6884929862121384559ull,
+ 12577285107018018011ull, 3452779834388996309ull}},
+{{16674496516052715019ull, 3994476309224342795ull,
+ 1886548328490358802ull, 4315974792986245387ull}},
+{{8115717313319252935ull, 7108233711692602151ull,
+ 17319993769802331915ull, 2697484245616403366ull}},
+{{5532960623221678265ull, 4273606121188364785ull,
+ 12426620175398139086ull, 3371855307020504208ull}},
+{{11527886797454485735ull, 14565379688340231789ull,
+ 15533275219247673857ull, 4214819133775630260ull}},
+{{9510772257622747537ull, 2185833277571563012ull, 484924975175020353ull,
+ 2634261958609768913ull}},
+{{11888465322028434421ull, 7343977615391841669ull,
+ 5217842237396163345ull, 3292827448262211141ull}},
+{{1025523597253379314ull, 13791658037667189991ull,
+ 11133988815172592085ull, 4116034310327763926ull}},
+{{7558481275924443927ull, 10925629282755687696ull,
+ 2347056991055482149ull, 2572521443954852454ull}},
+{{9448101594905554909ull, 18268722621871997524ull,
+ 12157193275674128494ull, 3215651804943565567ull}},
+{{11810126993631943636ull, 13612531240485221097ull,
+ 10584805576165272714ull, 4019564756179456959ull}},
+{{463800343378882917ull, 13119518043730651090ull,
+ 13533032512744377302ull, 2512227972612160599ull}},
+{{9803122466078379454ull, 7176025517808538054ull,
+ 12304604622503083724ull, 3140284965765200749ull}},
+{{3030531045743198509ull, 8970031897260672568ull,
+ 1545697722846690943ull, 3925356207206500937ull}},
+{{1894081903589499068ull, 12523798963429002211ull,
+ 12495276122847651599ull, 2453347629504063085ull}},
+{{16202660434769037547ull, 11043062685858864859ull,
+ 1784037098277400787ull, 3066684536880078857ull}},
+{{15641639525033909030ull, 9192142338896193170ull,
+ 6841732391274138888ull, 3833355671100098571ull}},
+{{14387710721573581048ull, 5745088961810120731ull,
+ 1970239735332642853ull, 2395847294437561607ull}},
+{{13372952383539588406ull, 11793047220690038818ull,
+ 16297857724447967278ull, 2994809118046952008ull}},
+{{7492818442569709699ull, 5517936989007772715ull,
+ 1925578081850407482ull, 3743511397558690011ull}},
+{{2377168517392374610ull, 8060396636557245851ull,
+ 17344387365652362340ull, 2339694623474181256ull}},
+{{16806518702022631975ull, 10075495795696557313ull,
+ 3233740133355901309ull, 2924618279342726571ull}},
+{{7173090322246126256ull, 17206055763048084546ull,
+ 17877233221977040348ull, 3655772849178408213ull}},
+{{18189734939662433628ull, 3060825630100554066ull,
+ 8511483472189136724ull, 4569716061473010267ull}},
+{{15980270355716408922ull, 11136388055667622099ull,
+ 3013834160904516500ull, 2856072538420631417ull}},
+{{15363651926218123248ull, 13920485069584527624ull,
+ 8378978719558033529ull, 3570090673025789271ull}},
+{{757820834063102444ull, 3565548281698495819ull, 5862037381020154008ull,
+ 4462613341282236589ull}},
+{{16614539085785296692ull, 2228467676061559886ull,
+ 5969616372351290207ull, 2789133338301397868ull}},
+{{11544801820376845056ull, 16620642650359113570ull,
+ 7462020465439112758ull, 3486416672876747335ull}},
+{{5207630238616280512ull, 11552431276094116155ull,
+ 4715839563371503044ull, 4358020841095934169ull}},
+{{948925889921481368ull, 16443641584413598405ull,
+ 14476614773175659162ull, 2723763025684958855ull}},
+{{5797843380829239614ull, 11331179943662222198ull,
+ 13484082448042186049ull, 3404703782106198569ull}},
+{{16470676262891325326ull, 328916874295614035ull,
+ 3020045004770568850ull, 4255879727632748212ull}},
+{{7988329655093384377ull, 4817259064862146676ull,
+ 11110900164836381339ull, 2659924829770467632ull}},
+{{9985412068866730471ull, 1409887812650295441ull,
+ 13888625206045476674ull, 3324906037213084540ull}},
+{{17093451104510800992ull, 10985731802667645109ull,
+ 17360781507556845842ull, 4156132546516355675ull}},
+{{12989249949532944572ull, 11477768395094666097ull,
+ 8544645433009334699ull, 2597582841572722297ull}},
+{{2401504381634017003ull, 9735524475440944718ull,
+ 15292492809689056278ull, 3246978551965902871ull}},
+{{12225252513897297062ull, 2946033557446405089ull,
+ 14503929993683932444ull, 4058723189957378589ull}},
+{{723253793544728808ull, 11064643010258778989ull,
+ 11370799255266151729ull, 2536701993723361618ull}},
+{{5515753260358298914ull, 18442489781250861640ull,
+ 4990127032227913853ull, 3170877492154202023ull}},
+{{6894691575447873642ull, 9218054171281413338ull,
+ 1625972771857504413ull, 3963596865192752529ull}},
+{{8920868253082308931ull, 8067126866264577288ull,
+ 12545448028479410018ull, 2477248040745470330ull}},
+{{11151085316352886163ull, 860536545975945802ull,
+ 6458437998744486715ull, 3096560050931837913ull}},
+{{4715484608586331896ull, 14910728737752095965ull,
+ 12684733516857996297ull, 3870700063664797391ull}},
+{{5253020889580151387ull, 2401676433453978122ull,
+ 14845487475677329542ull, 2419187539790498369ull}},
+{{15789648148829965042ull, 12225467578672248460ull,
+ 4721801289314498215ull, 3023984424738122962ull}},
+{{1290316112327904686ull, 10670148454912922672ull,
+ 15125623648497898577ull, 3779980530922653702ull}},
+{{806447570204940429ull, 18198057830389046430ull,
+ 4841828761883798706ull, 2362487831826658564ull}},
+{{10231431499610951344ull, 13524200251131532229ull,
+ 6052285952354748383ull, 2953109789783323205ull}},
+{{17400975392941077084ull, 12293564295487027382ull,
+ 12177043458870823383ull, 3691387237229154006ull}},
+{{6263923602160785274ull, 14601006712320473970ull,
+ 2998966143366876710ull, 2307117023268221254ull}},
+{{17053276539555757400ull, 9027886353545816654ull,
+ 12972079716063371696ull, 2883896279085276567ull}},
+{{12093223637589920942ull, 11284857941932270818ull,
+ 11603413626651826716ull, 3604870348856595709ull}},
+{{5893157510132625369ull, 14106072427415338523ull,
+ 669208978032619683ull, 4506087936070744637ull}},
+{{1377380434619196904ull, 6510452257920892625ull,
+ 2724098620484081254ull, 2816304960044215398ull}},
+{{6333411561701384034ull, 17361437359255891589ull,
+ 12628495312459877375ull, 3520381200055269247ull}},
+{{12528450470554117946ull, 17090110680642476582ull,
+ 11173933122147458815ull, 4400476500069086559ull}},
+{{3218595525668935812ull, 17598848203042629720ull,
+ 13901237228983243615ull, 2750297812543179099ull}},
+{{4023244407086169765ull, 17386874235375899246ull,
+ 12764860517801666615ull, 3437872265678973874ull}},
+{{14252427545712488015ull, 17121906775792486153ull,
+ 6732703610397307461ull, 4297340332098717343ull}},
+{{1990238188429223153ull, 13007034744083997798ull,
+ 11125468784139399019ull, 2685837707561698339ull}},
+{{11711169772391304750ull, 11647107411677609343ull,
+ 9295149961746860870ull, 3357297134452122924ull}},
+{{10027276197061743033ull, 5335512227742235871ull,
+ 11618937452183576088ull, 4196621418065153655ull}},
+{{13184576650804671252ull, 3334695142338897419ull,
+ 14179364935255816911ull, 2622888386290721034ull}},
+{{11869034795078451161ull, 18003426983205785486ull,
+ 8500834132214995330ull, 3278610482863401293ull}},
+{{5612921456993288143ull, 13280911692152456050ull,
+ 15237728683696132067ull, 4098263103579251616ull}},
+{{8119761929048192993ull, 5994726798381591079ull,
+ 9523580427310082542ull, 2561414439737032260ull}},
+{{5538016392882853338ull, 16716780534831764657ull,
+ 11904475534137603177ull, 3201768049671290325ull}},
+{{11534206509530954576ull, 7060917613257542109ull,
+ 1045536362389840260ull, 4002210062089112907ull}},
+{{9514722077670540562ull, 13636445545140739626ull,
+ 16794361290989507826ull, 2501381288805695566ull}},
+{{2670030560233399894ull, 7822184894571148725ull,
+ 11769579576882108975ull, 3126726611007119458ull}},
+{{7949224218719137772ull, 5166045099786548002ull,
+ 5488602434247860411ull, 3908408263758899323ull}},
+{{9579951155126849012ull, 922935178152898549ull, 1124533512191218805ull,
+ 2442755164849312077ull}},
+{{16586624962335949168ull, 5765354991118511090ull,
+ 6017352908666411410ull, 3053443956061640096ull}},
+{{11509909166065160652ull, 16430065775752914671ull,
+ 7521691135833014262ull, 3816804945077050120ull}},
+{{14111222256431807264ull, 5657105091418183765ull,
+ 4701056959895633914ull, 2385503090673156325ull}},
+{{3803969765257595368ull, 16294753401127505515ull,
+ 10488007218296930296ull, 2981878863341445406ull}},
+{{143276188144606306ull, 1921697677699830278ull, 3886636986016387063ull,
+ 3727348579176806758ull}},
+{{13924605672872542653ull, 8118590076203475779ull,
+ 16264206171542405626ull, 2329592861985504223ull}},
+{{12794071072663290412ull, 924865558399568916ull,
+ 15718571696000619129ull, 2911991077481880279ull}},
+{{15992588840829113015ull, 5767767966426849049ull,
+ 15036528601573386007ull, 3639988846852350349ull}},
+{{6155677995754227557ull, 2598023939606173408ull,
+ 4960602696684568797ull, 4549986058565437937ull}},
+{{3847298747346392223ull, 3929607971467552332ull,
+ 14629591731496325258ull, 2843741286603398710ull}},
+{{4809123434182990279ull, 14135382001189216223ull,
+ 9063617627515630764ull, 3554676608254248388ull}},
+{{1399718274301349945ull, 17669227501486520279ull,
+ 11329522034394538455ull, 4443345760317810485ull}},
+{{7792352949079425572ull, 17960796216070157030ull,
+ 9386794280710280486ull, 2777091100198631553ull}},
+{{517069149494506156ull, 13227623233232920480ull,
+ 16345178869315238512ull, 3471363875248289441ull}},
+{{646336436868132695ull, 16534529041541150600ull,
+ 6596415531361884428ull, 4339204844060361802ull}},
+{{403960273042582935ull, 1110708614108443317ull, 8734445725528565672ull,
+ 2712003027537726126ull}},
+{{5116636359730616572ull, 1388385767635554146ull,
+ 1694685120055931282ull, 3390003784422157658ull}},
+{{15619167486518046523ull, 10958854246399218490ull,
+ 11341728436924689910ull, 4237504730527697072ull}},
+{{14373665697501166981ull, 2237597885572123652ull,
+ 7088580273077931194ull, 2648440456579810670ull}},
+{{17967082121876458726ull, 12020369393819930373ull,
+ 18084097378202189800ull, 3310550570724763337ull}},
+{{8623794597063409696ull, 15025461742274912967ull,
+ 8770063667470573538ull, 4138188213405954172ull}},
+{{12307400650805712916ull, 14002599607349208508ull,
+ 14704661829023884269ull, 2586367633378721357ull}},
+{{15384250813507141145ull, 3668191453904346923ull,
+ 4545769230997691625ull, 3232959541723401697ull}},
+{{14618627498456538527ull, 9196925335807821558ull,
+ 10293897557174502435ull, 4041199427154252121ull}},
+{{4524956168107948676ull, 3442235325666194522ull,
+ 17962901019302533782ull, 2525749641971407575ull}},
+{{14879567246989711652ull, 13526166193937518960ull,
+ 17841940255700779323ull, 3157187052464259469ull}},
+{{152714985027587949ull, 12296021723994510797ull,
+ 8467367264343810442ull, 3946483815580324337ull}},
+{{2401289874855936421ull, 12296699595923957152ull,
+ 16821319586283351286ull, 2466552384737702710ull}},
+{{3001612343569920526ull, 6147502458050170632ull,
+ 11803277445999413300ull, 3083190480922128388ull}},
+{{3752015429462400657ull, 7684378072562713290ull,
+ 14754096807499266625ull, 3853988101152660485ull}},
+{{6956695661841388315ull, 16331951341420165566ull,
+ 11527153513900735592ull, 2408742563220412803ull}},
+{{17919241614156511201ull, 1968195103065655341ull,
+ 9797255873948531587ull, 3010928204025516004ull}},
+{{8563993962413475290ull, 16295301934114232889ull,
+ 12246569842435664483ull, 3763660255031895005ull}},
+{{16881711272576891816ull, 7878720699607701603ull,
+ 9959949160735984254ull, 2352287659394934378ull}},
+{{16490453072293726866ull, 625028837654851196ull,
+ 3226564414065204510ull, 2940359574243667973ull}},
+{{2166322266657606966ull, 10004658083923339804ull,
+ 8644891536008893541ull, 3675449467804584966ull}},
+{{2707902833322008708ull, 17117508623331562659ull,
+ 1582742383156341118ull, 4594311834755731208ull}},
+{{17833340335322113107ull, 6086756871154838757ull,
+ 989213989472713199ull, 2871444896722332005ull}},
+{{8456617363870477671ull, 2996760070516160543ull,
+ 5848203505268279403ull, 3589306120902915006ull}},
+{{5959085686410709185ull, 17581008143427364391ull,
+ 16533626418440125061ull, 4486632651128643757ull}},
+{{10641957581647775097ull, 13293973098855796696ull,
+ 12639359520738772115ull, 2804145406955402348ull}},
+{{13302446977059718871ull, 12005780355142357966ull,
+ 15799199400923465144ull, 3505181758694252935ull}},
+{{7404686684469872780ull, 15007225443927947458ull,
+ 15137313232726943526ull, 4381477198367816169ull}},
+{{9239615196221058392ull, 4767829884027579257ull,
+ 2543291742813257848ull, 2738423248979885106ull}},
+{{16161205013703710894ull, 5959787355034474071ull,
+ 12402486715371348118ull, 3423029061224856382ull}},
+{{15589820248702250713ull, 16673106230647868397ull,
+ 6279736357359409339ull, 4278786326531070478ull}},
+{{12049480664652600648ull, 8114848384941223796ull,
+ 17759893278631794549ull, 2674241454081919048ull}},
+{{15061850830815750810ull, 14755246499603917649ull,
+ 3753122524580191570ull, 3342801817602398811ull}},
+{{4992255483237524800ull, 9220686087650121254ull, 79717137297851559ull,
+ 4178502272002998514ull}},
+{{16955217732305616712ull, 12680457832422407639ull,
+ 4661509229238545128ull, 2611563920001874071ull}},
+{{16582336146954632986ull, 15850572290528009549ull,
+ 1215200518120793506ull, 3264454900002342589ull}},
+{{6892862128411127521ull, 10589843326305236129ull,
+ 6130686666078379787ull, 4080568625002928236ull}},
+{{15837253876325424461ull, 4312809069727078628ull,
+ 13055051203153763175ull, 2550355390626830147ull}},
+{{1349823271697228960ull, 779325318731460382ull,
+ 11707127985514816065ull, 3187944238283537684ull}},
+{{10910651126476312007ull, 5585842666841713381ull,
+ 14633909981893520081ull, 3984930297854422105ull}},
+{{9124999963261388957ull, 15020366712844540623ull,
+ 2228664711042368194ull, 2490581436159013816ull}},
+{{6794563935649348292ull, 9552086354200899971ull,
+ 2785830888802960243ull, 3113226795198767270ull}},
+{{3881518901134297461ull, 7328421924323737060ull,
+ 12705660647858476112ull, 3891533493998459087ull}},
+{{11649321350063711721ull, 4580263702702335662ull,
+ 14858566932552629426ull, 2432208433749036929ull}},
+{{5338279650724863843ull, 14948701665232695386ull,
+ 4738150610408623070ull, 3040260542186296162ull}},
+{{15896221600260855612ull, 9462505044686093424ull,
+ 15146060299865554646ull, 3800325677732870202ull}},
+{{9935138500163034758ull, 1302379634501420486ull,
+ 14077973705843359558ull, 2375203548583043876ull}},
+{{3195551088349017639ull, 10851346579981551416ull,
+ 17597467132304199447ull, 2969004435728804845ull}},
+{{3994438860436272048ull, 8952497206549551366ull,
+ 8161775860098085597ull, 3711255544661006057ull}},
+{{16331582343054833742ull, 7901153763307163555ull,
+ 16630324958629773258ull, 2319534715413128785ull}},
+{{15802791910391154274ull, 653070167279178636ull,
+ 6952848143005052861ull, 2899418394266410982ull}},
+{{1306745814279391226ull, 5428023727526361200ull,
+ 17914432215611091884ull, 3624272992833013727ull}},
+{{1633432267849239033ull, 6785029659407951500ull,
+ 17781354251086476951ull, 4530341241041267159ull}},
+{{10244267204260550204ull, 11158172564771051543ull,
+ 18030875434570129950ull, 2831463275650791974ull}},
+{{8193647986898299851ull, 4724343669109038621ull,
+ 13315222256357886630ull, 3539329094563489968ull}},
+{{14853746002050262717ull, 15128801623241074084ull,
+ 16644027820447358287ull, 4424161368204362460ull}},
+{{60219214426638390ull, 16373030042166753159ull, 1179145350924823121ull,
+ 2765100855127726538ull}},
+{{13910332073315461700ull, 6631229497426277736ull,
+ 10697303725510804710ull, 3456376068909658172ull}},
+{{17387915091644327125ull, 17512408908637622978ull,
+ 13371629656888505887ull, 4320470086137072715ull}},
+{{15479132950705092357ull, 17862784595539596217ull,
+ 6051425526341622227ull, 2700293803835670447ull}},
+{{5513858133099201734ull, 17716794725997107368ull,
+ 2952595889499639880ull, 3375367254794588059ull}},
+{{6892322666374002168ull, 3699249333786832594ull,
+ 17525802917156713563ull, 4219209068493235073ull}},
+{{8919387684911139259ull, 6187824403076419ull, 4036097795581864121ull,
+ 2637005667808271921ull}},
+{{6537548587711536170ull, 4619420798931233428ull,
+ 9656808262904718055ull, 3296257084760339901ull}},
+{{8171935734639420212ull, 1162589980236653881ull,
+ 16682696347058285473ull, 4120321355950424876ull}},
+{{16636674880218107393ull, 12255833783716378435ull,
+ 1203313180056652612ull, 2575200847469015548ull}},
+{{16184157581845246337ull, 15319792229645473044ull,
+ 1504141475070815765ull, 3219001059336269435ull}},
+{{1783452903597006305ull, 5314682231774677594ull,
+ 15715234899120683419ull, 4023751324170336793ull}},
+{{5726344083175516845ull, 1015833385645479544ull,
+ 2904492784309345281ull, 2514844577606460496ull}},
+{{7157930103969396056ull, 5881477750484237334ull,
+ 3630615980386681601ull, 3143555722008075620ull}},
+{{18170784666816520877ull, 11963533206532684571ull,
+ 4538269975483352001ull, 3929444652510094525ull}},
+{{9050897407546631597ull, 559679226441846001ull, 5142261743890788953ull,
+ 2455902907818809078ull}},
+{{15925307777860677400ull, 5311285051479695405ull,
+ 15651199216718261999ull, 3069878634773511347ull}},
+{{6071576667043683037ull, 2027420295922231353ull,
+ 14952313002470439595ull, 3837348293466889184ull}},
+{{15323950462970771659ull, 17408038749447252259ull,
+ 9345195626544024746ull, 2398342683416805740ull}},
+{{14543252060286076669ull, 12536676399954289516ull,
+ 11681494533180030933ull, 2997928354271007175ull}},
+{{18179065075357595836ull, 1835787444660698183ull,
+ 9990182148047650763ull, 3747410442838758969ull}},
+{{18279444699739579254ull, 17288268217408794028ull,
+ 17773078888598251486ull, 2342131526774224355ull}},
+{{4402561800964922451ull, 12386963234906216728ull,
+ 17604662592320426454ull, 2927664408467780444ull}},
+{{5503202251206153064ull, 6260332006777995102ull,
+ 3559084166690981452ull, 3659580510584725556ull}},
+{{16102374850862467138ull, 7825415008472493877ull,
+ 4448855208363726815ull, 4574475638230906945ull}},
+{{12369827291002735913ull, 11808413407936390529ull,
+ 14309749551295799019ull, 2859047273894316840ull}},
+{{1627226058471256179ull, 10148830741493100258ull,
+ 17887186939119748774ull, 3573809092367896050ull}},
+{{11257404609943846032ull, 3462666390011599514ull,
+ 13135611637044910160ull, 4467261365459870063ull}},
+{{11647563899642291674ull, 2164166493757249696ull,
+ 15127286300794150706ull, 2792038353412418789ull}},
+{{14559454874552864593ull, 11928580154051337928ull,
+ 5074049820710524670ull, 3490047941765523487ull}},
+{{18199318593191080741ull, 5687353155709396602ull,
+ 1730876257460767934ull, 4362559927206904359ull}},
+{{15986260139171813367ull, 17389653777600536588ull,
+ 7999326688554061814ull, 2726599954504315224ull}},
+{{1536081100255215093ull, 12513695185145894928ull,
+ 9999158360692577268ull, 3408249943130394030ull}},
+{{1920101375319018866ull, 15642118981432368660ull,
+ 3275575914010945777ull, 4260312428912992538ull}},
+{{10423435396429162599ull, 2858795335754148556ull,
+ 6658920964684229015ull, 2662695268070620336ull}},
+{{13029294245536453249ull, 17408552224974849407ull,
+ 8323651205855286268ull, 3328369085088275420ull}},
+{{11674931788493178657ull, 3313946207509010143ull,
+ 10404564007319107836ull, 4160461356360344275ull}},
+{{14214361395449318517ull, 11294588416547907147ull,
+ 4197009495360748445ull, 2600288347725215172ull}},
+{{13156265725884260242ull, 283177465402720222ull,
+ 5246261869200935557ull, 3250360434656518965ull}},
+{{7221960120500549494ull, 4965657850180788182ull,
+ 11169513354928557350ull, 4062950543320648706ull}},
+{{18348783130595007146ull, 16938594211645156325ull,
+ 11592631865257736247ull, 2539344089575405441ull}},
+{{9100920857961595221ull, 16561556746129057503ull,
+ 655731776290006597ull, 3174180111969256802ull}},
+{{6764465054024606122ull, 6866887877379158167ull,
+ 10043036757217284055ull, 3967725139961571002ull}},
+{{11145319686406460682ull, 11209333951003055710ull,
+ 10888583991688190438ull, 2479828212475981876ull}},
+{{4708277571153300045ull, 4788295401899043830ull,
+ 13610729989610238048ull, 3099785265594977345ull}},
+{{15108719000796400864ull, 5985369252373804787ull,
+ 3178354431730633848ull, 3874731581993721682ull}},
+{{7137106366284056588ull, 3740855782733627992ull,
+ 6598157538259034059ull, 2421707238746076051ull}},
+{{8921382957855070735ull, 64383709989647086ull, 3636010904396404670ull,
+ 3027134048432595064ull}},
+{{1928356660464062610ull, 9303851674341834666ull,
+ 4545013630495505837ull, 3783917560540743830ull}},
+{{5816908931217427036ull, 8120750305677340618ull,
+ 16675691574341854860ull, 2364948475337964893ull}},
+{{16494508200876559603ull, 10150937882096675772ull,
+ 7009556412645154863ull, 2956185594172456117ull}},
+{{2171391177386147887ull, 8076986334193456812ull,
+ 13373631534233831483ull, 3695231992715570146ull}},
+{{10580491522721118238ull, 2742273449657216555ull,
+ 12970205727323532581ull, 2309519995447231341ull}},
+{{8613928384974009893ull, 8039527830498908598ull,
+ 2377699103872252014ull, 2886899994309039177ull}},
+{{1544038444362736558ull, 826037751268859940ull, 7583809898267702922ull,
+ 3608624992886298971ull}},
+{{1930048055453420697ull, 10255919225940850733ull,
+ 4868076354407240748ull, 4510781241107873714ull}},
+{{3512123043872081888ull, 15633321553067807516ull,
+ 7654233739931913371ull, 2819238275692421071ull}},
+{{4390153804840102360ull, 14929965922907371491ull,
+ 4956106156487503810ull, 3524047844615526339ull}},
+{{876006237622740046ull, 9439085366779438556ull, 1583446677181991859ull,
+ 4405059805769407924ull}},
+{{9770875935368988337ull, 3593585345023455145ull,
+ 10213026210093520720ull, 2753162378605879952ull}},
+{{16825280937638623325ull, 4491981681279318931ull,
+ 12766282762616900900ull, 3441452973257349940ull}},
+{{16419915153620891252ull, 5614977101599148664ull,
+ 15957853453271126125ull, 4301816216571687425ull}},
+{{10262446971013057033ull, 5815203697713161867ull,
+ 3056129380653371972ull, 2688635135357304641ull}},
+{{8216372695338933387ull, 7269004622141452334ull,
+ 8431847744244102869ull, 3360793919196630801ull}},
+{{1047093832318890925ull, 13697941796104203322ull,
+ 15151495698732516490ull, 4200992398995788501ull}},
+{{5266119663626694732ull, 13172899640992514980ull,
+ 11775527820921516758ull, 2625620249372367813ull}},
+{{6582649579533368415ull, 7242752514385867917ull, 884351720869732236ull,
+ 3282025311715459767ull}},
+{{12839997992844098423ull, 9053440642982334896ull,
+ 14940497706369329007ull, 4102531639644324708ull}},
+{{8024998745527561515ull, 12575929429505041166ull,
+ 114439029626054821ull, 2564082274777702943ull}},
+{{807876395054676085ull, 1884853731599137746ull,
+ 13978106842314732239ull, 3205102843472128678ull}},
+{{10233217530673120914ull, 16191125219781085894ull,
+ 8249261516038639490ull, 4006378554340160848ull}},
+{{1784074938243312668ull, 14731139280790566588ull,
+ 5155788447524149681ull, 2503986596462600530ull}},
+{{2230093672804140834ull, 4578866045706044523ull,
+ 15668107596259962910ull, 3129983245578250662ull}},
+{{16622675146287339755ull, 14946954593987331461ull,
+ 10361762458470177829ull, 3912479056972813328ull}},
+{{12695014975643281299ull, 11647689630455776115ull,
+ 6476101536543861143ull, 2445299410608008330ull}},
+{{11257082701126713720ull, 9947926019642332240ull,
+ 17318498957534602237ull, 3056624263260010412ull}},
+{{14071353376408392149ull, 17046593542980303204ull,
+ 3201379623208701180ull, 3820780329075013016ull}},
+{{18017967897110020902ull, 1430748927507913694ull,
+ 2000862264505438238ull, 2387987705671883135ull}},
+{{13299087834532750319ull, 11011808196239667926ull,
+ 16336135885913961509ull, 2984984632089853918ull}},
+{{7400487756311162090ull, 18376446263726972812ull,
+ 11196797820537676078ull, 3731230790112317398ull}},
+{{13848676884549252115ull, 6873592896401970103ull,
+ 2386312619408659645ull, 2332019243820198374ull}},
+{{12699160087259177239ull, 13203677138929850533ull,
+ 12206262811115600364ull, 2915024054775247967ull}},
+{{2038892053791807837ull, 16504596423662313167ull,
+ 10646142495467112551ull, 3643780068469059959ull}},
+{{16383673122521923508ull, 16019059511150503554ull,
+ 8695992100906502785ull, 4554725085586324949ull}},
+{{14851481720003590097ull, 3094383166827982865ull,
+ 7740838072280258193ull, 2846703178491453093ull}},
+{{4729294094722323909ull, 8479664976962366486ull,
+ 14287733608777710645ull, 3558378973114316366ull}},
+{{15134989655257680694ull, 15211267239630346011ull,
+ 8636294974117362498ull, 4447973716392895458ull}},
+{{7153525525322356482ull, 14118728043196354161ull,
+ 10009370377250739465ull, 2779983572745559661ull}},
+{{13553592925080333506ull, 3813351998713278989ull,
+ 17123398989990812236ull, 3474979465931949576ull}},
+{{3106933101068253171ull, 4766689998391598737ull,
+ 2957504663778963679ull, 4343724332414936971ull}},
+{{13471048234236127992ull, 9896710276635831066ull,
+ 17989341479357709963ull, 2714827707759335606ull}},
+{{7615438255940384182ull, 7759201827367400929ull,
+ 13263304812342361646ull, 3393534634699169508ull}},
+{{14130983838352868131ull, 475630247354475353ull,
+ 16579131015427952058ull, 4241918293373961885ull}},
+{{1914335871329460726ull, 4908954923023935000ull,
+ 12667799893856163988ull, 2651198933358726178ull}},
+{{2392919839161825907ull, 6136193653779918750ull,
+ 6611377830465429177ull, 3313998666698407723ull}},
+{{12214521835807058192ull, 12281928085652286341ull,
+ 3652536269654398567ull, 4142498333373009654ull}},
+{{9939919156593105322ull, 14593734081173760819ull,
+ 16117893223816162816ull, 2589061458358131033ull}},
+{{7813212927313993749ull, 18242167601467201024ull,
+ 6312308474488039808ull, 3236326822947663792ull}},
+{{9766516159142492186ull, 4355965428124449664ull,
+ 7890385593110049761ull, 4045408528684579740ull}},
+{{6104072599464057616ull, 14251693438646250800ull,
+ 14154863032548556908ull, 2528380330427862337ull}},
+{{7630090749330072020ull, 17814616798307813500ull,
+ 3858520735403532423ull, 3160475413034827922ull}},
+{{9537613436662590025ull, 17656584979457378971ull,
+ 14046522956109191337ull, 3950594266293534902ull}},
+{{3655165388700424814ull, 4117836584519780001ull,
+ 4167390829140856682ull, 2469121416433459314ull}},
+{{9180642754302918921ull, 14370667767504500809ull,
+ 14432610573280846660ull, 3086401770541824142ull}},
+{{16087489461306036555ull, 17963334709380626011ull,
+ 8817391179746282517ull, 3858002213177280178ull}},
+{{7748837904102578895ull, 13532927202576585209ull,
+ 10122555505768814477ull, 2411251383235800111ull}},
+{{14297733398555611523ull, 3081100947938567799ull,
+ 8041508363783630193ull, 3014064229044750139ull}},
+{{13260480729767126500ull, 8463062203350597653ull,
+ 5440199436302149837ull, 3767580286305937674ull}},
+{{10593643465318148015ull, 7595256886307817485ull,
+ 8011810666116231552ull, 2354737678941211046ull}},
+{{17853740350075072922ull, 9494071107884771856ull,
+ 791391295790513632ull, 2943422098676513808ull}},
+{{3870431363884289536ull, 11867588884855964821ull,
+ 989239119738142040ull, 3679277623345642260ull}},
+{{9449725223282749824ull, 14834486106069956026ull,
+ 1236548899672677550ull, 4599097029182052825ull}},
+{{10517764282979106544ull, 4659867797866334612ull,
+ 12302058108363893229ull, 2874435643238783015ull}},
+{{13147205353723883180ull, 10436520765760306169ull,
+ 10765886617027478632ull, 3593044554048478769ull}},
+{{2598948636872690263ull, 13045650957200382712ull,
+ 18069044289711736194ull, 4491305692560598461ull}},
+{{1624342898045431415ull, 12765217866677627099ull,
+ 13598995690283529073ull, 2807066057850374038ull}},
+{{15865486677838952980ull, 2121464278064870161ull,
+ 7775372575999635534ull, 3508832572312967548ull}},
+{{5996800292016527513ull, 11875202384435863510ull,
+ 9719215719999544417ull, 4386040715391209435ull}},
+{{17583058237792493408ull, 504472462631332837ull,
+ 3768666815786021309ull, 2741275447119505897ull}},
+{{8143764741958453048ull, 5242276596716553951ull,
+ 9322519538159914540ull, 3426594308899382371ull}},
+{{5568019909020678406ull, 6552845745895692439ull,
+ 7041463404272505271ull, 4283242886124227964ull}},
+{{10397541470779005860ull, 11013057618825889630ull,
+ 13624286664525091602ull, 2677026803827642477ull}},
+{{3773554801618981517ull, 4542949986677586230ull,
+ 3195300275374200791ull, 3346283504784553097ull}},
+{{13940315538878502704ull, 1067001464919594883ull,
+ 8605811362645138893ull, 4182854380980691371ull}},
+{{6406854202585370238ull, 2972718924788440754ull,
+ 3072789092439517856ull, 2614283988112932107ull}},
+{{17231939790086488605ull, 3715898655985550942ull,
+ 17676044420831561032ull, 3267854985141165133ull}},
+{{12316552700753334949ull, 4644873319981938678ull,
+ 8259997470757287578ull, 4084818731426456417ull}},
+{{3086159419543446439ull, 7514731843416099578ull,
+ 16691713465291774496ull, 2553011707141535260ull}},
+{{13081071311284083857ull, 9393414804270124472ull,
+ 2417897757905166504ull, 3191264633926919076ull}},
+{{16351339139105104821ull, 11741768505337655590ull,
+ 3022372197381458130ull, 3989080792408648845ull}},
+{{5607900943513302609ull, 11950291334263422648ull,
+ 4194825632577105283ull, 2493175495255405528ull}},
+{{7009876179391628261ull, 10326178149401890406ull,
+ 5243532040721381604ull, 3116469369069256910ull}},
+{{17985717261094311134ull, 12907722686752363007ull,
+ 15777787087756502813ull, 3895586711336571137ull}},
+{{18158602315825026315ull, 10373169688433920831ull,
+ 2943587902206732402ull, 2434741694585356961ull}},
+{{18086566876353894990ull, 3743090073687625231ull,
+ 8291170896185803407ull, 3043427118231696201ull}},
+{{17996522577014980833ull, 67176573682143635ull,
+ 14975649638659642163ull, 3804283897789620251ull}},
+{{8941983601420669069ull, 16182886423047197436ull,
+ 7053938014948582399ull, 2377677436118512657ull}},
+{{11177479501775836336ull, 15616922010381608891ull,
+ 13429108537113115903ull, 2972096795148140821ull}},
+{{9360163358792407516ull, 14909466494549623210ull,
+ 2951327616109231167ull, 3715120993935176027ull}},
+{{10461788117672642602ull, 16235945586734596362ull,
+ 17985480824564127143ull, 2321950621209485016ull}},
+{{3853863110236027444ull, 15683245964990857549ull,
+ 4035106956995607313ull, 2902438276511856271ull}},
+{{9429014906222422209ull, 5768999400956408224ull, 432197677817121238ull,
+ 3628047845639820339ull}},
+{{11786268632778027761ull, 16434621288050286088ull,
+ 14375305152553565259ull, 4535059807049775423ull}},
+{{7366417895486267351ull, 7965795295817734853ull,
+ 15902094747987060143ull, 2834412379406109639ull}},
+{{13819708387785222092ull, 5345558101344780662ull,
+ 15265932416556437275ull, 3543015474257637049ull}},
+{{8051263447876751807ull, 2070261608253587924ull,
+ 5247357465413382882ull, 4428769342822046312ull}},
+{{14255411691777745688ull, 5905599523585880356ull,
+ 3279598415883364301ull, 2767980839263778945ull}},
+{{17819264614722182110ull, 11993685422909738349ull,
+ 8711184038281593280ull, 3459976049079723681ull}},
+{{8439022713120563925ull, 14992106778637172937ull,
+ 15500666066279379504ull, 4324970061349654601ull}},
+{{16803604241768822213ull, 9370066736648233085ull,
+ 2770387263783530334ull, 2703106288343534126ull}},
+{{7169447246928864054ull, 2489211383955515549ull,
+ 12686356116584188726ull, 3378882860429417657ull}},
+{{13573495077088467972ull, 12334886266799170244ull,
+ 2022887090448072195ull, 4223603575536772072ull}},
+{{17706806460035068291ull, 5403460907535787450ull,
+ 1264304431530045122ull, 2639752234710482545ull}},
+{{12910136038189059555ull, 15977698171274510121ull,
+ 6192066557839944306ull, 3299690293388103181ull}},
+{{2302611992454160732ull, 10748750677238361844ull,
+ 12351769215727318287ull, 4124612866735128976ull}},
+{{10662504532138626266ull, 13635498200915058008ull,
+ 7719855759829573929ull, 2577883041709455610ull}},
+{{13328130665173282832ull, 3209314695861658798ull,
+ 426447662932191604ull, 3222353802136819513ull}},
+{{7436791294611827732ull, 4011643369827073498ull,
+ 5144745597092627409ull, 4027942252671024391ull}},
+{{9259680577559780236ull, 14036492152210390696ull,
+ 10132995025823973986ull, 2517463907919390244ull}},
+{{11574600721949725295ull, 8322243153408212562ull,
+ 12666243782279967483ull, 3146829884899237805ull}},
+{{5244878865582380811ull, 5791117923332877799ull,
+ 1997746672567795642ull, 3933537356124047257ull}},
+{{10195578318630069863ull, 8231134720510436528ull,
+ 12777806716423342036ull, 2458460847577529535ull}},
+{{12744472898287587329ull, 10288918400638045660ull,
+ 11360572377101789641ull, 3073076059471911919ull}},
+{{15930591122859484161ull, 17472834019224944979ull,
+ 9589029452949849147ull, 3841345074339889899ull}},
+{{7650776442573483649ull, 8614678252801896660ull,
+ 3687300398879961765ull, 2400840671462431187ull}},
+{{9563470553216854561ull, 15380033834429758729ull,
+ 18444183553882115918ull, 3001050839328038983ull}},
+{{16566024209948456105ull, 10001670256182422603ull,
+ 18443543423925256994ull, 3751313549160048729ull}},
+{{8047922122004091114ull, 10862729928541402031ull,
+ 4609685612312203765ull, 2344570968225030456ull}},
+{{5448216634077725988ull, 18190098429104140443ull,
+ 5762107015390254706ull, 2930713710281288070ull}},
+{{2198584774169769581ull, 13514250999525399746ull,
+ 16426005806092594191ull, 3663392137851610087ull}},
+{{11971603004566987784ull, 12281127730979361778ull,
+ 15920821239188354835ull, 4579240172314512609ull}},
+{{12093937896281755269ull, 5369861822648407159ull,
+ 3032984246851639916ull, 2862025107696570381ull}},
+{{10505736351924806182ull, 6712327278310508949ull,
+ 8402916326991937799ull, 3577531384620712976ull}},
+{{17743856458333395632ull, 3778723079460748282ull,
+ 10503645408739922249ull, 4471914230775891220ull}},
+{{15701596304885760174ull, 13890916970731437436ull,
+ 15788150417317227213ull, 2794946394234932012ull}},
+{{1180251307397648602ull, 3528588158132133084ull,
+ 1288443947936982401ull, 3493682992793665016ull}},
+{{1475314134247060752ull, 9022421216092554259ull,
+ 1610554934921228001ull, 4367103740992081270ull}},
+{{17062972398400270634ull, 17168228306126316171ull,
+ 14841654889607931212ull, 2729439838120050793ull}},
+{{16717029479572950388ull, 3013541308948343598ull,
+ 4717010556727750304ull, 3411799797650063492ull}},
+{{11672914812611412177ull, 3766926636185429498ull,
+ 5896263195909687880ull, 4264749747062579365ull}},
+{{11907257776309520515ull, 2354329147615893436ull,
+ 5991007506657248877ull, 2665468591914112103ull}},
+{{14884072220386900644ull, 7554597452947254699ull,
+ 2877073364894173192ull, 3331835739892640129ull}},
+{{13993404257056237901ull, 9443246816184068374ull,
+ 8208027724545104394ull, 4164794674865800161ull}},
+{{4134191642232760784ull, 10513715278542430638ull,
+ 16659232373909160006ull, 2602996671791125100ull}},
+{{14391111589645726788ull, 3918772061323262489ull,
+ 2377296393676898392ull, 3253745839738906376ull}},
+{{4153831431774994773ull, 4898465076654078112ull,
+ 2971620492096122990ull, 4067182299673632970ull}},
+{{2596144644859371733ull, 16896598728190962532ull,
+ 6468948825987464772ull, 2541988937296020606ull}},
+{{3245180806074214666ull, 2674004336529151549ull,
+ 17309558069339106774ull, 3177486171620025757ull}},
+{{8668162026020156237ull, 12565877457516215244ull,
+ 7801889531391719755ull, 3971857714525032197ull}},
+{{14640973303117373456ull, 5547830401733940575ull,
+ 7182023966333518799ull, 2482411071578145123ull}},
+{{13689530610469328916ull, 2323101983740037815ull,
+ 4365843939489510595ull, 3103013839472681404ull}},
+{{12500227244659273241ull, 16738935534957210981ull,
+ 5457304924361888243ull, 3878767299340851755ull}},
+{{10118485037125739728ull, 8155991700134562911ull,
+ 1104972568512486200ull, 2424229562088032347ull}},
+{{8036420277979786756ull, 10194989625168203639ull,
+ 15216273765922771462ull, 3030286952610040433ull}},
+{{5433839329047345540ull, 3520364994605478741ull,
+ 5185284152121300616ull, 3787858690762550542ull}},
+{{5701992589868284915ull, 2200228121628424213ull,
+ 17075860650357976597ull, 2367411681726594088ull}},
+{{11739176755762744048ull, 7361971170462918170ull,
+ 2898081739237919130ull, 2959264602158242611ull}},
+{{5450598907848654251ull, 18425835999933423521ull,
+ 17457660229329562624ull, 3699080752697803263ull}},
+{{14935839363473878667ull, 11516147499958389700ull,
+ 17828566670972058496ull, 2311925470436127039ull}},
+{{223055130632796718ull, 14395184374947987126ull,
+ 17674022320287685216ull, 2889906838045158799ull}},
+{{9502190950145771705ull, 17993980468684983907ull,
+ 17480841881932218616ull, 3612383547556448499ull}},
+{{7266052669254826728ull, 4045731512146678268ull,
+ 17239366333987885367ull, 4515479434445560624ull}},
+{{13764654955139042513ull, 9446111222732755773ull,
+ 10774603958742428354ull, 2822174646528475390ull}},
+{{3370760638641639429ull, 2584266991561168909ull,
+ 4244882911573259635ull, 3527718308160594238ull}},
+{{8825136816729437190ull, 17065391794733624848ull,
+ 14529475676321350351ull, 4409647885200742797ull}},
+{{5515710510455898244ull, 17583398899349597386ull,
+ 11386765306914537921ull, 2756029928250464248ull}},
+{{16118010174924648613ull, 8144190568904833020ull,
+ 14233456633643172402ull, 3445037410313080310ull}},
+{{1700768644946259150ull, 956866174276265468ull, 8568448755199189695ull,
+ 4306296762891350388ull}},
+{{10286352439946187777ull, 7515570386563747773ull,
+ 14578652508854269367ull, 2691435476807093992ull}},
+{{17469626568360122625ull, 4782776964777296812ull,
+ 18223315636067836709ull, 3364294346008867490ull}},
+{{3390289136740601665ull, 10590157224399008920ull,
+ 13555772508230020078ull, 4205367932511084363ull}},
+{{2118930710462876041ull, 2007162246821992671ull,
+ 6166514808430068597ull, 2628354957819427727ull}},
+{{16483721443360758763ull, 7120638826954878742ull,
+ 3096457492110197842ull, 3285443697274284659ull}},
+{{11381279767346172646ull, 18124170570548374236ull,
+ 17705629920419911014ull, 4106804621592855823ull}},
+{{16336671891446133712ull, 6715920588165345993ull,
+ 17983547727903526240ull, 2566752888495534889ull}},
+{{6585781809025503428ull, 8394900735206682492ull,
+ 8644376604597244088ull, 3208441110619418612ull}},
+{{8232227261281879284ull, 10493625919008353115ull,
+ 10805470755746555110ull, 4010551388274273265ull}},
+{{2839299029087480601ull, 1946830180952832793ull,
+ 18282634268410066704ull, 2506594617671420790ull}},
+{{8160809804786738655ull, 2433537726191040991ull,
+ 13629920798657807572ull, 3133243272089275988ull}},
+{{5589326237556035415ull, 3041922157738801239ull,
+ 17037400998322259465ull, 3916554090111594985ull}},
+{{10410857926113603990ull, 13430416394655220534ull,
+ 3730846596310330309ull, 2447846306319746866ull}},
+{{3790200370787229180ull, 2952962438036861956ull,
+ 13886930282242688695ull, 3059807882899683582ull}},
+{{4737750463484036475ull, 17526261102828241157ull,
+ 8135290815948585060ull, 3824759853624604478ull}},
+{{5266937048891216749ull, 1730541152412874915ull, 472870741540477759ull,
+ 2390474908515377799ull}},
+{{1971985292686633032ull, 15998234495798257356ull,
+ 14426146482207760910ull, 2988093635644222248ull}},
+{{2464981615858291290ull, 10774421082893045887ull,
+ 18032683102759701138ull, 3735117044555277810ull}},
+{{8458142537552513912ull, 11345699195235541583ull,
+ 15882112957652201115ull, 2334448152847048631ull}},
+{{5960992153513254486ull, 9570437975617039075ull,
+ 15240955178637863490ull, 2918060191058810789ull}},
+{{2839554173464180204ull, 2739675432666523036ull,
+ 5216135918015165651ull, 3647575238823513487ull}},
+{{3549442716830225254ull, 17259652346115317507ull,
+ 1908483879091569159ull, 4559469048529391859ull}},
+{{18359302762514748448ull, 17704811743963155297ull,
+ 17333703488928088388ull, 2849668155330869911ull}},
+{{9114070397861271848ull, 3684270606244392506ull,
+ 17055443342732722582ull, 3562085194163587389ull}},
+{{2169215960471814002ull, 13828710294660266441ull,
+ 7484246123133739515ull, 4452606492704484237ull}},
+{{12884975021363353511ull, 6337100924948972573ull,
+ 6983496836172281149ull, 2782879057940302648ull}},
+{{2271160721422028177ull, 12533062174613603621ull,
+ 8729371045215351436ull, 3478598822425378310ull}},
+{{7450636920204923125ull, 15666327718267004526ull,
+ 1688341769664413487ull, 4348248528031722888ull}},
+{{44962056700689050ull, 16708983851557959685ull, 1055213606040258429ull,
+ 2717655330019826805ull}},
+{{4667888589303249216ull, 7051171759165285894ull,
+ 5930703025977710941ull, 3397069162524783506ull}},
+{{15058232773483837328ull, 13425650717383995271ull,
+ 16636750819326914484ull, 4246336453155979382ull}},
+{{16328924511068480186ull, 17614403735219772852ull,
+ 5786283243651933648ull, 2653960283222487114ull}},
+{{1964411565126048616ull, 3571260595315164450ull,
+ 16456226091419692869ull, 3317450354028108892ull}},
+{{11678886493262336578ull, 9075761762571343466ull,
+ 2123538540565064470ull, 4146812942535136116ull}},
+{{11910990076716348266ull, 1060665083179701762ull,
+ 10550583624707941102ull, 2591758089084460072ull}},
+{{5665365559040659524ull, 10549203390829403011ull,
+ 13188229530884926377ull, 3239697611355575090ull}},
+{{2470020930373436501ull, 17798190256964141668ull,
+ 7261914876751382163ull, 4049622014194468863ull}},
+{{10767135118338173621ull, 8818025901388894590ull,
+ 11456225825610695708ull, 2531013758871543039ull}},
+{{4235546861067941218ull, 11022532376736118238ull,
+ 9708596263585981731ull, 3163767198589428799ull}},
+{{14517805613189702331ull, 9166479452492759893ull,
+ 7524059311055089260ull, 3954708998236785999ull}},
+{{11379471517457257909ull, 14952421694662750741ull,
+ 11620066097050512643ull, 2471693123897991249ull}},
+{{389281341539408674ull, 14078841099901050523ull, 690024566030977092ull,
+ 3089616404872489062ull}},
+{{14321659732206424554ull, 17598551374876313153ull,
+ 10085902744393497173ull, 3862020506090611327ull}},
+{{2033508304987933491ull, 13304937618511389673ull,
+ 13221218242887017589ull, 2413762816306632079ull}},
+{{7153571399662304767ull, 2796113967857073379ull,
+ 11914836785181384083ull, 3017203520383290099ull}},
+{{4330278231150493055ull, 17330200515103505436ull,
+ 10281859963049342199ull, 3771504400479112624ull}},
+{{11929795931323833968ull, 17748904349580772753ull,
+ 6426162476905838874ull, 2357190250299445390ull}},
+{{1077186858872628747ull, 12962758400121190134ull,
+ 17256075132987074401ull, 2946487812874306737ull}},
+{{10569855610445561742ull, 2368389944869323955ull,
+ 7735035860951679290ull, 3683109766092883422ull}},
+{{8600633494629564273ull, 12183859467941430752ull,
+ 445422789334823304ull, 4603887207616104278ull}},
+{{5375395934143477671ull, 7614912167463394220ull,
+ 14113447298616428277ull, 2877429504760065173ull}},
+{{6719244917679347089ull, 14130326227756630679ull,
+ 3806751067988371634ull, 3596786880950081467ull}},
+{{3787370128671795957ull, 8439535747841012541ull, 146752816558076639ull,
+ 4495983601187601834ull}},
+{{4672949339633566425ull, 12192238870041714694ull,
+ 4703406528776185803ull, 2809989750742251146ull}},
+{{15064558711396733839ull, 10628612569124755463ull,
+ 15102630197825008062ull, 3512487188427813932ull}},
+{{14219012370818529395ull, 4062393674551168521ull,
+ 431543673571708462ull, 4390608985534767416ull}},
+{{1969353704120499016ull, 16374054101876644038ull,
+ 269714795982317788ull, 2744130615959229635ull}},
+{{11685064167005399578ull, 2020823553636253431ull,
+ 14172201550260060948ull, 3430163269949037043ull}},
+{{9994644190329361568ull, 2526029442045316789ull,
+ 13103565919397688281ull, 4287704087436296304ull}},
+{{8552495628169544932ull, 13107983447346792753ull,
+ 8189728699623555175ull, 2679815054647685190ull}},
+{{15302305553639319069ull, 11773293290756103037ull,
+ 1013788837674668161ull, 3349768818309606488ull}},
+{{5292823886766985125ull, 881558558162965085ull, 1267236047093335202ull,
+ 4187211022887008110ull}},
+{{5613857938443059655ull, 5162660117279241082ull,
+ 14627080584715498213ull, 2617006889304380068ull}},
+{{16240694459908600377ull, 11065011165026439256ull,
+ 18283850730894372766ull, 3271258611630475085ull}},
+{{1854124001176198855ull, 4607891919428273263ull,
+ 9019755358335802246ull, 4089073264538093857ull}},
+{{8076356528376206140ull, 16714990504924834501ull,
+ 17166562145028346163ull, 2555670790336308660ull}},
+{{14707131678897645579ull, 16282052112728655222ull,
+ 3011458607575881088ull, 3194588487920385826ull}},
+{{9160542561767281166ull, 1905821067201267412ull,
+ 12987695296324627169ull, 3993235609900482282ull}},
+{{14948711137959326537ull, 12720353213069261892ull,
+ 12728995578630279884ull, 2495772256187801426ull}},
+{{239144848739606555ull, 15900441516336577366ull,
+ 6687872436433074047ull, 3119715320234751783ull}},
+{{9522303097779284002ull, 15263865876993333803ull,
+ 3748154527113954655ull, 3899644150293439729ull}},
+{{3645596426898358549ull, 16457445200761915483ull,
+ 13871811625514691419ull, 2437277593933399830ull}},
+{{18392053588905111898ull, 15960120482525006449ull,
+ 8116392495038588466ull, 3046596992416749788ull}},
+{{9155008930849226161ull, 10726778566301482254ull,
+ 10145490618798235583ull, 3808246240520937235ull}},
+{{1110194563353378447ull, 13621765631579508265ull,
+ 4035088627535203287ull, 2380153900325585772ull}},
+{{5999429222619110962ull, 12415521021046997427ull,
+ 5043860784419004109ull, 2975192375406982215ull}},
+{{2887600509846500799ull, 1684343221026583072ull,
+ 1693139962096367233ull, 3718990469258727769ull}},
+{{1804750318654062999ull, 12581929559210084180ull,
+ 12587427522378699280ull, 2324369043286704855ull}},
+{{2255937898317578749ull, 15727411949012605225ull,
+ 11122598384545986196ull, 2905461304108381069ull}},
+{{7431608391324361340ull, 1212520862556204915ull, 68189925400319034ull,
+ 3631826630135476337ull}},
+{{4677824470728063771ull, 10739023115050031952ull,
+ 4696923425177786696ull, 4539783287669345421ull}},
+{{2923640294205039857ull, 6711889446906269970ull,
+ 5241420149949810637ull, 2837364554793340888ull}},
+{{12877922404611075629ull, 13001547827060225366ull,
+ 6551775187437263296ull, 3546705693491676110ull}},
+{{6874030968909068729ull, 16251934783825281708ull,
+ 17413091021151354928ull, 4433382116864595137ull}},
+{{13519641392422943764ull, 10157459239890801067ull,
+ 3965652860578514974ull, 2770863823040371961ull}},
+{{12287865722101291800ull, 3473452013008725526ull,
+ 9568752094150531622ull, 3463579778800464951ull}},
+{{6136460115771838942ull, 13565187053115682716ull,
+ 7349254099260776623ull, 4329474723500581189ull}},
+{{13058659609212175147ull, 15395770935838383553ull,
+ 6899126821251679341ull, 2705921702187863243ull}},
+{{2488266456233055222ull, 5409655614515815730ull,
+ 4012222508137211273ull, 3382402127734829054ull}},
+{{12333705107146094835ull, 11373755536572157566ull,
+ 14238650172026289899ull, 4228002659668536317ull}},
+{{3096879673538921368ull, 4802754201143904527ull,
+ 11204999366730125139ull, 2642501662292835198ull}},
+{{17706157647205815422ull, 1391756733002492754ull,
+ 4782877171557880616ull, 3303127077866043998ull}},
+{{12909325022152493469ull, 1739695916253115943ull,
+ 15201968501302126578ull, 4128908847332554997ull}},
+{{14985857166486390275ull, 5698995966085585368ull,
+ 11807073322527523063ull, 2580568029582846873ull}},
+{{285577384398436227ull, 2512058939179593807ull, 923783597877240117ull,
+ 3225710036978558592ull}},
+{{14192029785780208996ull, 7751759692401880162ull,
+ 1154729497346550146ull, 4032137546223198240ull}},
+{{13481704634540018527ull, 9456535826178563005ull,
+ 721705935841593841ull, 2520085966389498900ull}},
+{{3017072737892859446ull, 16432355801150591661ull,
+ 902132419801992301ull, 3150107457986873625ull}},
+{{8383026940793462211ull, 6705386696156075864ull,
+ 5739351543179878281ull, 3937634322483592031ull}},
+{{5239391837995913882ull, 15720081731166017175ull,
+ 10504623742128505781ull, 2461021451552245019ull}},
+{{1937553779067504449ull, 5815044108675357757ull,
+ 8519093659233244323ull, 3076276814440306274ull}},
+{{7033628242261768465ull, 2657119117416809292ull,
+ 1425495037186779596ull, 3845346018050382843ull}},
+{{13619389688268381099ull, 10884071485240281615ull,
+ 17031835462737594911ull, 2403341261281489276ull}},
+{{12412551091908088469ull, 8993403338122964115ull,
+ 2843050254712442023ull, 3004176576601861596ull}},
+{{10904002846457722682ull, 6630068154226317240ull,
+ 3553812818390552529ull, 3755220720752326995ull}},
+{{6815001779036076677ull, 15673007642459918035ull,
+ 18362034075989952994ull, 2347012950470204371ull}},
+{{3907066205367707942ull, 10367887516220121736ull,
+ 18340856576560053339ull, 2933766188087755464ull}},
+{{4883832756709634927ull, 8348173376847764266ull,
+ 4479326646990515058ull, 3667207735109694331ull}},
+{{15328162982741819467ull, 1211844684204929524ull,
+ 987472290310755919ull, 4584009668887117914ull}},
+{{356729827358861359ull, 7674931955269162809ull, 5228856199871610353ull,
+ 2865006043054448696ull}},
+{{5057598302625964603ull, 14205350962513841415ull,
+ 6536070249839512941ull, 3581257553818060870ull}},
+{{1710311859855067849ull, 3921630647860138057ull,
+ 17393459849154166985ull, 4476571942272576087ull}},
+{{12598159958477887166ull, 13980234200981056045ull,
+ 17788441433362436221ull, 2797857463920360054ull}},
+{{1912641892815195245ull, 3640234695944156345ull,
+ 13012179754848269469ull, 3497321829900450068ull}},
+{{7002488384446381960ull, 9161979388357583335ull,
+ 16265224693560336836ull, 4371652287375562585ull}},
+{{11294084267920070581ull, 14949609154578265392ull,
+ 3248236405834128666ull, 2732282679609726616ull}},
+{{14117605334900088227ull, 9463639406368055932ull,
+ 4060295507292660833ull, 3415353349512158270ull}},
+{{17647006668625110283ull, 16441235276387457819ull,
+ 14298741420970601849ull, 4269191686890197837ull}},
+{{8723536158676999975ull, 3358243020101079281ull,
+ 11242556397320320108ull, 2668244804306373648ull}},
+{{15516106216773637873ull, 4197803775126349101ull,
+ 14053195496650400135ull, 3335306005382967060ull}},
+{{5560074715684883629ull, 635568700480548473ull,
+ 17566494370813000169ull, 4169132506728708825ull}},
+{{15004261743371522028ull, 11926445483868812555ull,
+ 4061529954117043249ull, 2605707816705443016ull}},
+{{14143641160787014631ull, 1072998799553851982ull,
+ 5076912442646304062ull, 3257134770881803770ull}},
+{{8456179414128992481ull, 10564620536297090786ull,
+ 15569512590162655885ull, 4071418463602254712ull}},
+{{9896798152258008205ull, 8908730844399375693ull,
+ 9730945368851659928ull, 2544636539751409195ull}},
+{{16982683708749898160ull, 11135913555499219616ull,
+ 7551995692637187006ull, 3180795674689261494ull}},
+{{2781610562227821084ull, 4696519907519248713ull, 216622578941707950ull,
+ 3975994593361576868ull}},
+{{13267721647460857937ull, 16770382997481694157ull,
+ 9358761148693343276ull, 2484996620850985542ull}},
+{{2749594004043908710ull, 2516234673142566081ull,
+ 2475079399011903288ull, 3106245776063731928ull}},
+{{8048678523482273791ull, 3145293341428207601ull,
+ 3093849248764879110ull, 3882807220079664910ull}},
+{{16559639123244890880ull, 15800866393674793462ull,
+ 15768713835760213155ull, 2426754512549790568ull}},
+{{11476176867201337791ull, 15139396973666103924ull,
+ 1264148220990714828ull, 3033443140687238211ull}},
+{{14345221084001672239ull, 477502143373078289ull,
+ 15415243331520557248ull, 3791803925859047763ull}},
+{{2048234149859963294ull, 298438839608173931ull, 7328684072986654328ull,
+ 2369877453661904852ull}},
+{{16395350742607117829ull, 373048549510217413ull,
+ 9160855091233317910ull, 2962346817077381065ull}},
+{{6659130372976733574ull, 9689682723742547575ull,
+ 16062754882469035291ull, 3702933521346726331ull}},
+{{11079485510751540340ull, 3750208693125398282ull,
+ 7733378792329453105ull, 2314333450841703957ull}},
+{{4625984851584649617ull, 9299446884834135757ull,
+ 14278409508839204285ull, 2892916813552129946ull}},
+{{10394167082908199925ull, 16235994624470057600ull,
+ 8624639849194229548ull, 3616146016940162433ull}},
+{{12992708853635249906ull, 1848249206878020384ull,
+ 15392485829920174840ull, 4520182521175203041ull}},
+{{8120443033522031191ull, 1155155754298762740ull,
+ 2702774616059027419ull, 2825114075734501901ull}},
+{{10150553791902538989ull, 15279002748155617137ull,
+ 7990154288501172177ull, 3531392594668127376ull}},
+{{17299878258305561640ull, 5263695379912357709ull,
+ 9987692860626465222ull, 4414240743335159220ull}},
+{{13118266920654669977ull, 17124867667727387280ull,
+ 15465680074746316571ull, 2758900464584474512ull}},
+{{16397833650818337472ull, 16794398566231846196ull,
+ 885356019723344098ull, 3448625580730593141ull}},
+{{2050547989813370223ull, 11769626170935031938ull,
+ 5718381043081568027ull, 4310781975913241426ull}},
+{{5893278512060744294ull, 5050173347620701009ull,
+ 8185674170353367921ull, 2694238734945775891ull}},
+{{11978284158503318271ull, 10924402702953264165ull,
+ 5620406694514321997ull, 3367798418682219864ull}},
+{{1137797142846984127ull, 18267189397118968111ull,
+ 7025508368142902496ull, 4209748023352774830ull}},
+{{7628652241920446935ull, 11416993373199355069ull,
+ 18226000785371477772ull, 2631092514595484268ull}},
+{{14147501320827946573ull, 14271241716499193836ull,
+ 4335756908004795599ull, 3288865643244355336ull}},
+{{17684376651034933216ull, 13227366127196604391ull,
+ 5419696135005994499ull, 4111082054055444170ull}},
+{{17970264434537915116ull, 5961260820284183792ull,
+ 7998996102806134466ull, 2569426283784652606ull}},
+{{4016086469462842279ull, 16674948062210005549ull,
+ 775373091652892274ull, 3211782854730815758ull}},
+{{9631794105255940753ull, 11620313040907731128ull,
+ 10192588401420891151ull, 4014728568413519697ull}},
+{{6019871315784962971ull, 14180224678208413811ull,
+ 17899582796956526729ull, 2509205355258449810ull}},
+{{2913153126303815809ull, 3890222792478353552ull,
+ 13151106459340882604ull, 3136506694073062263ull}},
+{{3641441407879769762ull, 4862778490597941940ull,
+ 11827197055748715351ull, 3920633367591327829ull}},
+{{11499272916779631909ull, 9956765584264795568ull,
+ 9697841169056641046ull, 2450395854744579893ull}},
+{{14374091145974539886ull, 3222584943476218652ull,
+ 16733987479748189212ull, 3062994818430724866ull}},
+{{17967613932468174858ull, 4028231179345273315ull,
+ 11694112312830460707ull, 3828743523038406083ull}},
+{{8923915698578915334ull, 211801477877101870ull, 5002977186305343990ull,
+ 2392964701899003802ull}},
+{{1931522586368868360ull, 9488123884201153146ull,
+ 15477093519736455795ull, 2991205877373754752ull}},
+{{11637775269815861258ull, 7248468836824053528ull,
+ 899622825961018128ull, 3739007346717193441ull}},
+{{7273609543634913286ull, 4530293023015033455ull,
+ 12091479312294106090ull, 2336879591698245900ull}},
+{{4480325911116253704ull, 14886238315623567627ull,
+ 15114349140367632612ull, 2921099489622807375ull}},
+{{988721370467929225ull, 161053820819907918ull, 14281250407032152862ull,
+ 3651374362028509219ull}},
+{{10459273749939687340ull, 9424689312879660705ull,
+ 13239876990362803173ull, 4564217952535636524ull}},
+{{18066261139780774347ull, 8196273829763481892ull,
+ 17498295155831527791ull, 2852636220334772827ull}},
+{{4136082351016416318ull, 5633656268776964462ull,
+ 17261182926362021835ull, 3565795275418466034ull}},
+{{14393474975625296206ull, 2430384317543817673ull,
+ 12353106621097751486ull, 4457244094273082543ull}},
+{{2078392832124728273ull, 15354048253747049758ull,
+ 14638220665827176534ull, 2785777558920676589ull}},
+{{11821363077010686149ull, 9969188280329036389ull,
+ 4462717777001806956ull, 3482221948650845737ull}},
+{{941645790981193974ull, 12461485350411295487ull,
+ 10190083239679646599ull, 4352777435813557171ull}},
+{{7506057647004328090ull, 14705957371648141535ull,
+ 4062959015586085172ull, 2720485897383473232ull}},
+{{4770886040328022208ull, 18382446714560176919ull,
+ 5078698769482606465ull, 3400607371729341540ull}},
+{{1351921531982639856ull, 9143000337918057437ull,
+ 6348373461853258082ull, 4250759214661676925ull}},
+{{3150793966702843862ull, 10326061229626173802ull,
+ 6273576422871980253ull, 2656724509163548078ull}},
+{{13161864495233330636ull, 17519262555460105156ull,
+ 17065342565444751124ull, 3320905636454435097ull}},
+{{16452330619041663294ull, 3452334120615579829ull,
+ 7496620151523775194ull, 4151132045568043872ull}},
+{{12588549646114733511ull, 6769394843812125297ull,
+ 4685387594702359496ull, 2594457528480027420ull}},
+{{1900629002361253177ull, 8461743554765156622ull,
+ 5856734493377949370ull, 3243071910600034275ull}},
+{{11599158289806342279ull, 1353807406601669969ull,
+ 2709232098295048809ull, 4053839888250042844ull}},
+{{331944903487882069ull, 12375344675194513491ull,
+ 10916642098289181313ull, 2533649930156276777ull}},
+{{14249989184642016298ull, 1634122788710978151ull,
+ 18257488641288864546ull, 3167062412695345971ull}},
+{{13200800462375132468ull, 11266025522743498497ull,
+ 18210174783183692778ull, 3958828015869182464ull}},
+{{1332971261343375937ull, 11652951970142074465ull,
+ 11381359239489807986ull, 2474267509918239040ull}},
+{{6277900095106607825ull, 5342817925822817273ull,
+ 14226699049362259983ull, 3092834387397798800ull}},
+{{12459061137310647685ull, 2066836388851133687ull,
+ 17783373811702824979ull, 3866042984247248500ull}},
+{{14704442238460236659ull, 17432673807527816218ull,
+ 1891236595459489803ull, 2416276865154530313ull}},
+{{9157180761220520016ull, 17179156240982382369ull,
+ 6975731762751750158ull, 3020346081443162891ull}},
+{{16058161969953037924ull, 12250573264373202153ull,
+ 4107978685012299794ull, 3775432601803953614ull}},
+{{3118822203579566846ull, 12268294308660639250ull,
+ 16402544733414851083ull, 2359645376127471008ull}},
+{{13121899791329234366ull, 10723681867398411158ull,
+ 2056436843059012238ull, 2949556720159338761ull}},
+{{7179002702306767149ull, 4181230297393238140ull,
+ 7182232072251153202ull, 3686945900199173451ull}},
+{{8973753377883458936ull, 14449909908596323483ull,
+ 4366104071886553598ull, 4608682375248966814ull}},
+{{3302752851963467883ull, 4419507674445314273ull,
+ 16563873100211259711ull, 2880426484530604258ull}},
+{{8740127083381722758ull, 912698574629254937ull,
+ 11481469338409298831ull, 3600533105663255323ull}},
+{{15536844872654541352ull, 14975931273568732383ull,
+ 9740150654584235634ull, 4500666382079069154ull}},
+{{16628057073050170201ull, 13971643064407845643ull,
+ 10699280177542535175ull, 2812916488799418221ull}},
+{{16173385322885324847ull, 12852867812082419150ull,
+ 17985786240355556873ull, 3516145610999272776ull}},
+{{10993359616751880251ull, 2231026709820860226ull,
+ 4035488726734894476ull, 4395182013749090971ull}},
+{{11482535778897313061ull, 10617763730492813449ull,
+ 216337444995615095ull, 2746988758593181857ull}},
+{{518111668339477614ull, 8660518644688628908ull, 4882107824671906773ull,
+ 3433735948241477321ull}},
+{{647639585424347017ull, 15437334324288174039ull,
+ 10714320799267271370ull, 4292169935301846651ull}},
+{{7322303768531298742ull, 14260019971107496678ull,
+ 4390607490328350654ull, 2682606209563654157ull}},
+{{18376251747518899235ull, 8601652927029595039ull,
+ 10099945381337826222ull, 3353257761954567696ull}},
+{{18358628665971236140ull, 1528694121932217991ull,
+ 12624931726672282778ull, 4191572202443209620ull}},
+{{18391671943873104444ull, 5567119844635024148ull,
+ 17113954366024952544ull, 2619732626527006012ull}},
+{{4542845856131828939ull, 6958899805793780186ull,
+ 2945698883821639064ull, 3274665783158757516ull}},
+{{14901929357019561981ull, 8698624757242225232ull,
+ 3682123604777048830ull, 4093332228948446895ull}},
+{{9313705848137226238ull, 824954454849002866ull, 9218856280626737375ull,
+ 2558332643092779309ull}},
+{{2418760273316756990ull, 14866251123843417295ull,
+ 16135256369210809622ull, 3197915803865974136ull}},
+{{16858508396928109949ull, 9359441867949495810ull,
+ 1722326387803960412ull, 3997394754832467671ull}},
+{{15148253766507456622ull, 15073023204323210689ull,
+ 7993983020018557113ull, 2498371721770292294ull}},
+{{5100259152852157066ull, 5006220950121849650ull, 769106738168420584ull,
+ 3122964652212865368ull}},
+{{15598695977919972140ull, 6257776187652312062ull,
+ 961383422710525730ull, 3903705815266081710ull}},
+{{5137498967772594684ull, 8522796135710082943ull,
+ 14435922694476242293ull, 2439816134541301068ull}},
+{{1810187691288355451ull, 15265181188064991583ull,
+ 18044903368095302866ull, 3049770168176626335ull}},
+{{16097792669392608025ull, 9858104448226463670ull,
+ 17944443191691740679ull, 3812212710220782919ull}},
+{{5449434399942992112ull, 13078844307782621650ull,
+ 18132806022448419780ull, 2382632943887989324ull}},
+{{16035165036783515948ull, 16348555384728277062ull,
+ 4219263454350973109ull, 2978291179859986656ull}},
+{{10820584259124619127ull, 6600636175628182616ull,
+ 5274079317938716387ull, 3722863974824983320ull}},
+{{6762865161952886954ull, 1819554600553920183ull,
+ 3296299573711697742ull, 2326789984265614575ull}},
+{{3841895434013720789ull, 11497815287547176037ull,
+ 17955432522421785889ull, 2908487480332018218ull}},
+{{9414055310944538890ull, 537211054151806334ull,
+ 13220918616172456554ull, 3635609350415022773ull}},
+{{2544197101825897804ull, 9894885854544533726ull,
+ 2691090214933406980ull, 4544511688018778467ull}},
+{{15425181243923349840ull, 15407675695945109386ull,
+ 17822832448829237026ull, 2840319805011736541ull}},
+{{10058104518049411492ull, 10036222583076610925ull,
+ 8443482505754382571ull, 3550399756264670677ull}},
+{{17184316665989152268ull, 7933592210418375752ull,
+ 15166039150620366118ull, 4437999695330838346ull}},
+{{10740197916243220168ull, 346809113084096941ull,
+ 14090460487565116728ull, 2773749809581773966ull}},
+{{18036933413731413114ull, 433511391355121176ull,
+ 8389703572601620102ull, 3467187261977217458ull}},
+{{4099422693454714776ull, 9765261276048677279ull,
+ 1263757428897249319ull, 4333984077471521823ull}},
+{{9479668211050278591ull, 13020817325171505155ull,
+ 7707377420701862680ull, 2708740048419701139ull}},
+{{7237899245385460335ull, 16276021656464381444ull,
+ 5022535757449940446ull, 3385925060524626424ull}},
+{{9047374056731825419ull, 11121655033725700997ull,
+ 6278169696812425558ull, 4232406325655783030ull}},
+{{7960451794671084839ull, 2339348377651175219ull,
+ 17758914115789929686ull, 2645253953534864393ull}},
+{{5338878724911468144ull, 12147557508918744832ull,
+ 8363584589455248395ull, 3306567441918580492ull}},
+{{6673598406139335180ull, 10572760867721043136ull,
+ 10454480736819060494ull, 4133209302398225615ull}},
+{{4170999003837084488ull, 1996289523898264056ull,
+ 13451579488152994665ull, 2583255813998891009ull}},
+{{5213748754796355610ull, 7107047923300217974ull,
+ 2979416304909079619ull, 3229069767498613762ull}},
+{{15740557980350220320ull, 4272123885697884563ull,
+ 12947642417991125332ull, 4036337209373267202ull}},
+{{7532005728505193748ull, 11893449465415953660ull,
+ 12703962529671841236ull, 2522710755858292001ull}},
+{{9415007160631492185ull, 14866811831769942075ull,
+ 2044895106807637833ull, 3153388444822865002ull}},
+{{7157072932361977327ull, 4748456734430263882ull,
+ 11779490920364323100ull, 3941735556028581252ull}},
+{{9084856601153623734ull, 12191157495873690734ull,
+ 16585553862082477745ull, 2463584722517863282ull}},
+{{2132698714587253859ull, 1403888814559949706ull,
+ 11508570290748321374ull, 3079480903147329103ull}},
+{{11889245430088843132ull, 10978233055054712940ull,
+ 9774026845008013813ull, 3849351128934161379ull}},
+{{16654150430660302766ull, 9167238668622889539ull,
+ 3802923768916314681ull, 2405844455583850862ull}},
+{{16206002019897990553ull, 16070734354205999828ull,
+ 13977026748000169159ull, 3007305569479813577ull}},
+{{1810758451162936575ull, 15476731924330111882ull,
+ 3636225379718047737ull, 3759131961849766972ull}},
+{{5743410050404223263ull, 2755428425065238070ull,
+ 11496012899178555644ull, 2349457476156104357ull}},
+{{16402634599860054887ull, 3444285531331547587ull,
+ 534958068691030843ull, 2936821845195130447ull}},
+{{15891607231397680705ull, 18140414969446598196ull,
+ 14503755641145952265ull, 3671027306493913058ull}},
+{{1417764965537549265ull, 8840460656526084034ull,
+ 8906322514577664524ull, 4588784133117391323ull}},
+{{5497789121888356195ull, 14748659947183578329ull,
+ 3260608562397346375ull, 2867990083198369577ull}},
+{{11483922420787833147ull, 13824138915552085007ull,
+ 8687446721424070873ull, 3584987603997961971ull}},
+{{9743217007557403530ull, 3445115589157942547ull,
+ 6247622383352700688ull, 4481234504997452464ull}},
+{{3783667620509683255ull, 2153197243223714092ull,
+ 3904763989595437930ull, 2800771565623407790ull}},
+{{4729584525637104068ull, 11914868590884418423ull,
+ 14104327023849073220ull, 3500964457029259737ull}},
+{{1300294638618992181ull, 14893585738605523029ull,
+ 3795350724529177813ull, 4376205571286574672ull}},
+{{3118527158350564065ull, 11614334095842145845ull,
+ 2372094202830736133ull, 2735128482054109170ull}},
+{{8509844966365592985ull, 682859564520518594ull,
+ 12188489790393195975ull, 3418910602567636462ull}},
+{{1413934171102215424ull, 14688632510932811955ull,
+ 6012240201136719160ull, 4273638253209545578ull}},
+{{17024609921434742304ull, 9180395319333007471ull,
+ 8369336144137837379ull, 2671023908255965986ull}},
+{{16669076383366039976ull, 6863808130738871435ull,
+ 1238298143317520916ull, 3338779885319957483ull}},
+{{16224659460780162066ull, 8579760163423589294ull,
+ 15382930734429064857ull, 4173474856649946853ull}},
+{{5528726144560213387ull, 16891565148208213069ull,
+ 11920174718231859487ull, 2608421785406216783ull}},
+{{11522593699127654638ull, 16502770416832878432ull,
+ 10288532379362436455ull, 3260527231757770979ull}},
+{{14403242123909568297ull, 16016777002613710136ull,
+ 8248979455775657665ull, 4075659039697213724ull}},
+{{9002026327443480186ull, 3092956598992486979ull,
+ 14378984196714561849ull, 2547286899810758577ull}},
+{{6640846890876962328ull, 8477881767167996628ull,
+ 4138672190611038599ull, 3184108624763448222ull}},
+{{8301058613596202910ull, 5985666190532607881ull,
+ 14396712275118574057ull, 3980135780954310277ull}},
+{{16717376679566096579ull, 15270256415151349685ull,
+ 11303788181162802737ull, 2487584863096443923ull}},
+{{7061662794175457012ull, 5252762463657023395ull,
+ 9518049208026115518ull, 3109481078870554904ull}},
+{{4215392474291933361ull, 15789325116426055052ull,
+ 11897561510032644397ull, 3886851348588193630ull}},
+{{11857992333287234159ull, 12174171206979978359ull,
+ 2824289925343014844ull, 2429282092867621019ull}},
+{{10210804398181654794ull, 15217714008724972949ull,
+ 17365420461960932267ull, 3036602616084526273ull}},
+{{17375191516154456396ull, 14410456492478828282ull,
+ 7871717522169001622ull, 3795753270105657842ull}},
+{{15471180716023923152ull, 4394849289371879772ull,
+ 9531509469783013918ull, 2372345793816036151ull}},
+{{892231821320352324ull, 14716933648569625524ull,
+ 7302700818801379493ull, 2965432242270045189ull}},
+{{1115289776650440405ull, 4561109005429868193ull,
+ 13740062041929112271ull, 3706790302837556486ull}},
+{{12226271156474995013ull, 9768222156034749476ull,
+ 3975852757778307265ull, 2316743939273472804ull}},
+{{15282838945593743766ull, 16821963713470824749ull,
+ 4969815947222884081ull, 2895929924091841005ull}},
+{{5268490626710015996ull, 7192396586556367225ull,
+ 10823955952455993006ull, 3619912405114801256ull}},
+{{11197299301814907899ull, 18213867770050234839ull,
+ 13529944940569991257ull, 4524890506393501570ull}},
+{{13915841091275399293ull, 4466138328640314918ull,
+ 13067901606283632440ull, 2828056566495938481ull}},
+{{8171429327239473308ull, 5582672910800393648ull,
+ 2499818952572376838ull, 3535070708119923102ull}},
+{{10214286659049341635ull, 16201713175355267868ull,
+ 12348145727570246855ull, 4418838385149903877ull}},
+{{15607301198760614330ull, 17043599762238124273ull,
+ 10023434088945098236ull, 2761773990718689923ull}},
+{{5674068443168604200ull, 2857755629088103726ull,
+ 7917606592753984892ull, 3452217488398362404ull}},
+{{16315957590815531058ull, 3572194536360129657ull,
+ 9897008240942481115ull, 4315271860497953005ull}},
+{{3279944466618625056ull, 18373522649720938700ull,
+ 8491473159802744648ull, 2697044912811220628ull}},
+{{4099930583273281319ull, 4520159238441621759ull,
+ 10614341449753430811ull, 3371306141014025785ull}},
+{{513227210664213745ull, 1038513029624639295ull,
+ 17879612830619176418ull, 4214132676267532231ull}},
+{{7238296034306215447ull, 5260756661942787463ull,
+ 18092287046778067117ull, 2633832922667207644ull}},
+{{4436184024455381404ull, 11187631845855872233ull,
+ 4168614734763032280ull, 3292291153334009556ull}},
+{{10156916048996614659ull, 13984539807319840291ull,
+ 5210768418453790350ull, 4115363941667511945ull}},
+{{4042229521409190210ull, 4128651361147512278ull,
+ 14785945307602088729ull, 2572102463542194965ull}},
+{{14276158938616263571ull, 9772500219861778251ull,
+ 4647373579220447199ull, 3215128079427743707ull}},
+{{13233512654842941559ull, 7603939256399834910ull,
+ 1197530955598171095ull, 4018910099284679634ull}},
+{{3659259390849450571ull, 11669991062890978675ull,
+ 5360142865676244838ull, 2511818812052924771ull}},
+{{18409132293843976925ull, 5364116791758947535ull,
+ 2088492563667918144ull, 3139773515066155964ull}},
+{{18399729348877583252ull, 6705145989698684419ull,
+ 2610615704584897680ull, 3924716893832694955ull}},
+{{9193987833834795581ull, 4190716243561677762ull,
+ 17772535879861418714ull, 2452948058645434346ull}},
+{{2269112755438718668ull, 14461767341306873011ull,
+ 12992297812971997584ull, 3066185073306792933ull}},
+{{16671448999580562047ull, 18077209176633591263ull,
+ 2405314210932833268ull, 3832731341633491167ull}},
+{{17337184652378933136ull, 2074883698541218731ull,
+ 8420850409474102649ull, 2395457088520931979ull}},
+{{17059794797046278515ull, 7205290641603911318ull,
+ 5914376993415240407ull, 2994321360651164974ull}},
+{{12101371459453072336ull, 4394927283577501244ull,
+ 16616343278623826317ull, 3742901700813956217ull}},
+{{16786729199012946018ull, 5052672561449632229ull,
+ 3467685521498809592ull, 2339313563008722636ull}},
+{{7148353443484018811ull, 6315840701812040287ull,
+ 4334606901873511990ull, 2924141953760903295ull}},
+{{4323755785927635609ull, 17118172914119826167ull,
+ 806572608914502083ull, 3655177442201129119ull}},
+{{793008713982156607ull, 16786030124222394805ull,
+ 14843273816425291316ull, 4568971802751411398ull}},
+{{2801473455452541832ull, 1267896790784220945ull,
+ 4665360116838419169ull, 2855607376719632124ull}},
+{{8113527837743065194ull, 6196557006907664085ull,
+ 5831700146048023961ull, 3569509220899540155ull}},
+{{14753595815606219396ull, 12357382277061968010ull,
+ 2677939164132642047ull, 4461886526124425194ull}},
+{{13832683403181275027ull, 14640892950804811862ull,
+ 6285397996010289183ull, 2788679078827765746ull}},
+{{8067482217121817975ull, 13689430170078626924ull,
+ 17080119531867637287ull, 3485848848534707182ull}},
+{{10084352771402272469ull, 12500101694170895751ull,
+ 12126777377979770801ull, 4357311060668383978ull}},
+{{13220249509767502149ull, 895034531215727988ull,
+ 12190921879664744655ull, 2723319412917739986ull}},
+{{16525311887209377686ull, 14953851219301823697ull,
+ 6015280312726155010ull, 3404149266147174983ull}},
+{{6821581803729558396ull, 9468941987272503814ull,
+ 2907414372480305859ull, 4255186582683968729ull}},
+{{18098546682613137710ull, 3612245732831620931ull,
+ 13346349028868660922ull, 2659491614177480455ull}},
+{{18011497334839034233ull, 13738679202894301972ull,
+ 12071250267658438248ull, 3324364517721850569ull}},
+{{4067627594839241175ull, 17173349003617877466ull,
+ 1254004779290884098ull, 4155455647152313212ull}},
+{{7153953265201913639ull, 15345029145688561320ull,
+ 10007125023911578369ull, 2597159779470195757ull}},
+{{8942441581502392048ull, 5346228376828537938ull,
+ 17120592298316860866ull, 3246449724337744696ull}},
+{{1954679940023214252ull, 15906157507890448231ull,
+ 2953996299186524466ull, 4058062155422180871ull}},
+{{8139203990155590764ull, 14553034460858918048ull,
+ 8763776714632659647ull, 2536288847138863044ull}},
+{{10174004987694488454ull, 13579607057646259656ull,
+ 10954720893290824559ull, 3170361058923578805ull}},
+{{12717506234618110568ull, 12362822803630436666ull,
+ 18305087135040918603ull, 3962951323654473506ull}},
+{{12560127415063707009ull, 5420921243055328964ull,
+ 16052365477827962031ull, 2476844577284045941ull}},
+{{15700159268829633761ull, 2164465535391773301ull,
+ 6230398792002788827ull, 3096055721605057427ull}},
+{{5790141030754878489ull, 16540639974521880339ull,
+ 3176312471576098129ull, 3870069652006321784ull}},
+{{1312995135008105104ull, 3420370956435093356ull,
+ 1985195294735061331ull, 2418793532503951115ull}},
+{{1641243918760131380ull, 18110521750826030407ull,
+ 16316552173700990375ull, 3023491915629938893ull}},
+{{15886612953732327937ull, 18026466170105150104ull,
+ 6560632161844074257ull, 3779364894537423617ull}},
+{{9929133096082704961ull, 4349012328674636959ull,
+ 15629610147221016171ull, 2362103059085889760ull}},
+{{7799730351675993297ull, 824579392415908295ull, 1090268610316718598ull,
+ 2952628823857362201ull}},
+{{5137976921167603717ull, 10254096277374661177ull,
+ 5974521781323286151ull, 3690786029821702751ull}},
+{{14740450621798222083ull, 13326339201000245091ull,
+ 10651605140968135700ull, 2306741268638564219ull}},
+{{13813877258820389700ull, 16657924001250306364ull,
+ 8702820407782781721ull, 2883426585798205274ull}},
+{{17267346573525487125ull, 6987346946280719243ull,
+ 1655153472873701344ull, 3604283232247756593ull}},
+{{16972497198479471002ull, 8734183682850899054ull,
+ 6680627859519514584ull, 4505354040309695741ull}},
+{{5996124730622281472ull, 5458864801781811909ull,
+ 6481235421413390567ull, 2815846275193559838ull}},
+{{12106841931705239744ull, 2211894983799876982ull,
+ 17324916313621514017ull, 3519807843991949797ull}},
+{{5910180377776773872ull, 7376554748177234132ull,
+ 7821087336744728809ull, 4399759804989937247ull}},
+{{12917234772965259478ull, 16139561763679241092ull,
+ 11805708613106537361ull, 2749849878118710779ull}},
+{{16146543466206574348ull, 6339394149316887653ull,
+ 10145449747955783798ull, 3437312347648388474ull}},
+{{6348121277476054223ull, 17147614723500885375ull,
+ 3458440148089953939ull, 4296640434560485593ull}},
+{{10885104826063615745ull, 8411416192974359407ull,
+ 13690740138624690972ull, 2685400271600303495ull}},
+{{8994695014152131778ull, 10514270241217949259ull,
+ 12501739154853475811ull, 3356750339500379369ull}},
+{{6631682749262776818ull, 8531151783095048670ull,
+ 1792115888284681052ull, 4195937924375474212ull}},
+{{17979859773571399223ull, 14555341901289181226ull,
+ 10343444467032701465ull, 2622461202734671382ull}},
+{{13251452680109473221ull, 4359119321329312821ull,
+ 3705933546936101024ull, 3278076503418339228ull}},
+{{2729257794854677814ull, 5448899151661641027ull,
+ 4632416933670126280ull, 4097595629272924035ull}},
+{{17846687186280031298ull, 3405561969788525641ull,
+ 589417574330134973ull, 2560997268295577522ull}},
+{{8473300927567875410ull, 8868638480663044956ull,
+ 9960144004767444524ull, 3201246585369471902ull}},
+{{10591626159459844263ull, 11085798100828806195ull,
+ 3226807969104529847ull, 4001558231711839878ull}},
+{{4313923340448708712ull, 13846152840659085728ull,
+ 15851813035972494866ull, 2500973894819899923ull}},
+{{5392404175560885890ull, 8084319013969081352ull,
+ 15203080276538230679ull, 3126217368524874904ull}},
+{{6740505219451107363ull, 5493712749033963786ull, 557106271963236733ull,
+ 3907771710656093631ull}},
+{{8824501780584330006ull, 5739413477359921318ull,
+ 7265720447618104814ull, 2442357319160058519ull}},
+{{1807255188875636699ull, 16397638883554677456ull,
+ 4470464541095243113ull, 3052946648950073149ull}},
+{{2259068986094545874ull, 6661990549161183108ull,
+ 10199766694796441796ull, 3816183311187591436ull}},
+{{10635290153163866980ull, 13387116130080515250ull,
+ 15598226221102551930ull, 2385114569492244647ull}},
+{{4070740654600057916ull, 7510523125745868255ull,
+ 14886096757950802009ull, 2981393211865305809ull}},
+{{476739799822684491ull, 13999839925609723223ull,
+ 4772562892156338799ull, 3726741514831632262ull}},
+{{7215491402530259663ull, 15667428981147158870ull,
+ 16817909862879875461ull, 2329213446769770163ull}},
+{{18242736290017600387ull, 5749228171151784875ull,
+ 16410701310172456423ull, 2911516808462212704ull}},
+{{18191734344094612580ull, 2574849195512343190ull,
+ 2066632564006018913ull, 3639396010577765881ull}},
+{{13516295893263489916ull, 7830247512817816892ull,
+ 7194976723434911545ull, 4549245013222207351ull}},
+{{17671056970144457006ull, 16423119741579605317ull,
+ 11414389479787901571ull, 2843278133263879594ull}},
+{{8253763157398407545ull, 15917213658547118743ull,
+ 5044614812880101156ull, 3554097666579849493ull}},
+{{5705517928320621527ull, 1449772999474346813ull,
+ 10917454534527514350ull, 4442622083224811866ull}},
+{{5871791714414082407ull, 14741166179953630470ull,
+ 11435095102507084372ull, 2776638802015507416ull}},
+{{16563111679872378816ull, 18426457724942038087ull,
+ 14293868878133855465ull, 3470798502519384270ull}},
+{{16092203581413085616ull, 9198014100895383897ull,
+ 8643964060812543524ull, 4338498128149230338ull}},
+{{3140098210742096654ull, 14972130849914390744ull,
+ 10014163556435227606ull, 2711561330093268961ull}},
+{{3925122763427620818ull, 9491791525538212622ull,
+ 17129390463971422412ull, 3389451662616586201ull}},
+{{14129775491139301830ull, 11864739406922765777ull,
+ 7576680024682114303ull, 4236814578270732752ull}},
+{{1913580654320981788ull, 14332991156967810467ull,
+ 4735425015426321439ull, 2648009111419207970ull}},
+{{16227033873183390947ull, 13304552927782375179ull,
+ 15142653306137677607ull, 3310011389274009962ull}},
+{{15672106323051850780ull, 12019005141300581070ull,
+ 9704944595817321201ull, 4137514236592512453ull}},
+{{5183380433480018833ull, 594349185671781313ull, 8371433381599519703ull,
+ 2585946397870320283ull}},
+{{11090911560277411446ull, 14577994537371890353ull,
+ 5852605708572011724ull, 3232432997337900354ull}},
+{{28581395064600595ull, 18222493171714862942ull,
+ 16539129172569790463ull, 4040541246672375442ull}},
+{{13852921427197539084ull, 18306587259962871194ull,
+ 14948641751283506943ull, 2525338279170234651ull}},
+{{8092779747142148047ull, 18271548056526201089ull,
+ 14074116170676995775ull, 3156672848962793314ull}},
+{{14727660702355072963ull, 18227749052230363457ull,
+ 8369273176491468911ull, 3945841061203491643ull}},
+{{2287258911330838746ull, 18309872185285059017ull,
+ 2924952726093474117ull, 2466150663252182277ull}},
+{{7470759657590936336ull, 9052282176324160059ull,
+ 8267876926044230551ull, 3082688329065227846ull}},
+{{4726763553561282516ull, 6703666701977812170ull,
+ 1111474120700512381ull, 3853360411331534808ull}},
+{{7565913239403189477ull, 6495634697949826558ull, 694671325437820238ull,
+ 2408350257082209255ull}},
+{{234019512399211038ull, 17342915409292059006ull,
+ 14703397212079439009ull, 3010437821352761568ull}},
+{{9515896427353789605ull, 7843586206332910045ull,
+ 18379246515099298762ull, 3763047276690951960ull}},
+{{8253278276309812455ull, 9513927397385456682ull,
+ 11487029071937061726ull, 2351904547931844975ull}},
+{{1093225808532489761ull, 2669037209877045045ull,
+ 9747100321493939254ull, 2939880684914806219ull}},
+{{5978218279093000105ull, 12559668549201082114ull,
+ 7572189383440036163ull, 3674850856143507774ull}},
+{{16696144885721025939ull, 11087899668073964738ull,
+ 241864692445269396ull, 4593563570179384718ull}},
+{{15046776572003029116ull, 16153309329401003769ull,
+ 13986223488060457084ull, 2870977231362115448ull}},
+{{4973412659721622683ull, 1744892588041703096ull,
+ 17482779360075571356ull, 3588721539202644310ull}},
+{{6216765824652028354ull, 2181115735052128870ull,
+ 12630102163239688387ull, 4485901924003305388ull}},
+{{17720536695689681433ull, 17504098398903438207ull,
+ 17117185888879581049ull, 2803688702502065867ull}},
+{{17538984851184713888ull, 8045064943347134047ull,
+ 16784796342672088408ull, 3504610878127582334ull}},
+{{17312045045553504455ull, 10056331179183917559ull,
+ 11757623391485334702ull, 4380763597659477918ull}},
+{{17737557181112022141ull, 1673520968562560570ull,
+ 2736828601250946285ull, 2737977248537173699ull}},
+{{12948574439535251868ull, 6703587229130588617ull,
+ 17256093806845846568ull, 3422471560671467123ull}},
+{{2350659994136901123ull, 8379484036413235772ull,
+ 16958431240129920306ull, 4278089450839333904ull}},
+{{10692534533190339010ull, 9848863541185660261ull,
+ 10599019525081200191ull, 2673805906774583690ull}},
+{{17977354184915311666ull, 7699393408054687422ull,
+ 4025402369496724431ull, 3342257383468229613ull}},
+{{13248320694289363775ull, 5012555741640971374ull,
+ 9643438980298293443ull, 4177821729335287016ull}},
+{{3668514415503464455ull, 827004329311913157ull, 6027149362686433402ull,
+ 2611138580834554385ull}},
+{{9197329037806718473ull, 10257127448494667254ull,
+ 12145622721785429656ull, 3263923226043192981ull}},
+{{2273289260403622283ull, 12821409310618334068ull,
+ 1346970346949623358ull, 4079904032553991227ull}},
+{{10644177824607039735ull, 3401694800709070888ull,
+ 16982757531339372263ull, 2549940020346244516ull}},
+{{13305222280758799669ull, 18087176556168502322ull,
+ 2781702840464663712ull, 3187425025432805646ull}},
+{{7408155814093723778ull, 4162226621501076287ull,
+ 12700500587435605449ull, 3984281281791007057ull}},
+{{11547626411449659217ull, 14130606684506642439ull,
+ 1020283839506171549ull, 2490175801119379411ull}},
+{{9822846995884686118ull, 3828200300351139337ull,
+ 15110412854664878149ull, 3112719751399224263ull}},
+{{16890244763283245551ull, 9396936393866312075ull,
+ 14276330049903709782ull, 3890899689249030329ull}},
+{{8250559967838334517ull, 1261399227739057143ull,
+ 2005177253548736758ull, 2431812305780643956ull}},
+{{5701513941370530243ull, 10800121071528597237ull,
+ 2506471566935920947ull, 3039765382225804945ull}},
+{{11738578445140550707ull, 8888465320983358642ull,
+ 7744775477097289088ull, 3799706727782256181ull}},
+{{11948297546640232096ull, 5555290825614599151ull,
+ 7146327682399499632ull, 2374816704863910113ull}},
+{{10323685914872902216ull, 6944113532018248939ull,
+ 13544595621426762444ull, 2968520881079887641ull}},
+{{8292921375163739866ull, 8680141915022811174ull,
+ 3095686471501289343ull, 3710651101349859552ull}},
+{{571389841049949513ull, 12342617724530338840ull,
+ 1934804044688305839ull, 2319156938343662220ull}},
+{{714237301312436891ull, 10816586137235535646ull,
+ 2418505055860382299ull, 2898946172929577775ull}},
+{{10116168663495321921ull, 8909046653117031653ull,
+ 16858189375107641586ull, 3623682716161972218ull}},
+{{17256896847796540305ull, 1912936279541513758ull,
+ 11849364682029776175ull, 4529603395202465273ull}},
+{{6173874511445449787ull, 8113114202354527955ull, 488323898627528253ull,
+ 2831002122001540796ull}},
+{{3105657120879424329ull, 14753078771370547848ull,
+ 610404873284410316ull, 3538752652501925995ull}},
+{{3882071401099280412ull, 18441348464213184810ull,
+ 14598064146887676607ull, 4423440815627407493ull}},
+{{7037980644114438162ull, 18443371817774322362ull,
+ 11429633101018491831ull, 2764650509767129683ull}},
+{{18020847841997823510ull, 18442528753790515048ull,
+ 9675355357845726885ull, 3455813137208912104ull}},
+{{4079315728787727771ull, 9218102886955980099ull,
+ 12094194197307158607ull, 4319766421511140130ull}},
+{{243729321278635905ull, 12678843331988569418ull,
+ 12170557391744362033ull, 2699854013444462581ull}},
+{{9528033688453070689ull, 2013496109703548060ull,
+ 1378138684398288830ull, 3374817516805578227ull}},
+{{11910042110566338361ull, 11740242173984210883ull,
+ 15557731410780024749ull, 4218521896006972783ull}},
+{{5137933309890267524ull, 9643494367953825754ull,
+ 16641111159378597324ull, 2636576185004357989ull}},
+{{15645788674217610213ull, 12054367959942282192ull,
+ 6966330893941082943ull, 3295720231255447487ull}},
+{{1110491769062461150ull, 10456273931500464837ull,
+ 4096227598998965775ull, 4119650289069309359ull}},
+{{2999900364877732171ull, 13452700234828872379ull,
+ 9477671277015435465ull, 2574781430668318349ull}},
+{{17584933511379328926ull, 2980817238253926761ull,
+ 16458775114696682236ull, 3218476788335397936ull}},
+{{8146108833941997445ull, 3726021547817408452ull,
+ 2126724819661301179ull, 4023095985419247421ull}},
+{{14314690058068524211ull, 22920458172186330ull, 3635046021502007189ull,
+ 2514434990887029638ull}},
+{{8669990535730879456ull, 4640336591142620817ull,
+ 13767179563732284794ull, 3143043738608787047ull}},
+{{15449174188090987224ull, 15023792775783051829ull,
+ 12597288436237968088ull, 3928804673260983809ull}},
+{{11961576876770560967ull, 9389870484864407393ull,
+ 955776245007648199ull, 2455502920788114881ull}},
+{{1116913040681037497ull, 7125652087653121338ull,
+ 5806406324686948153ull, 3069378650985143601ull}},
+{{10619513337706072679ull, 13518751127993789576ull,
+ 11869693924286073095ull, 3836723313731429501ull}},
+{{6637195836066295424ull, 15366748482637200341ull,
+ 9724401711892489636ull, 2397952071082143438ull}},
+{{12908180813510257184ull, 761691529586948810ull,
+ 2932130103010836238ull, 2997440088852679298ull}},
+{{6911853980033045672ull, 10175486448838461821ull,
+ 12888534665618321105ull, 3746800111065849122ull}},
+{{6625751746734347497ull, 17888894076592508398ull,
+ 12667020184438838594ull, 2341750069416155701ull}},
+{{17505561720272710180ull, 13137745558885859689ull,
+ 1998717175266384531ull, 2927187586770194627ull}},
+{{8046894095058724012ull, 11810495930179936708ull,
+ 16333454524365144376ull, 3658984483462743283ull}},
+{{10058617618823405015ull, 14763119912724920885ull,
+ 15805132137029042566ull, 4573730604328429104ull}},
+{{8592479020978322087ull, 4615263927025687649ull,
+ 9878207585643151604ull, 2858581627705268190ull}},
+{{15352284794650290512ull, 5769079908782109561ull,
+ 3124387445199163697ull, 3573227034631585238ull}},
+{{5355297938030699428ull, 11823035904405024856ull,
+ 13128856343353730429ull, 4466533793289481547ull}},
+{{3347061211269187143ull, 9695240449466834487ull,
+ 5899692205382387566ull, 2791583620805925967ull}},
+{{18018884569368647641ull, 2895678524978767300ull,
+ 2762929238300596554ull, 3489479526007407459ull}},
+{{4076861638001257935ull, 12842970193078234934ull,
+ 17288719603157909404ull, 4361849407509259323ull}},
+{{16383096579032949921ull, 17250228407528672641ull,
+ 8499606742759999425ull, 2726155879693287077ull}},
+{{6643812668509023689ull, 7727727454128677090ull,
+ 15236194446877387186ull, 3407694849616608846ull}},
+{{17528137872491055420ull, 436287280806070554ull,
+ 9821871021741958175ull, 4259618562020761058ull}},
+{{15566772188734297542ull, 7190208578144875952ull,
+ 10750355407016111763ull, 2662261601262975661ull}},
+{{1011721162208320311ull, 4376074704253707037ull,
+ 18049630277197527608ull, 3327827001578719576ull}},
+{{5876337471187788292ull, 5470093380317133796ull,
+ 4115293772787357894ull, 4159783751973399471ull}},
+{{12896082956347143491ull, 17253866417980372334ull,
+ 9489587635633180539ull, 2599864844983374669ull}},
+{{6896731658579153556ull, 16955647004048077514ull,
+ 16473670562968863578ull, 3249831056229218336ull}},
+{{17844286610078717752ull, 11971186718205321084ull,
+ 2145344130001527857ull, 4062288820286522921ull}},
+{{1929307094444422787ull, 564462671237243822ull,
+ 12870055127319424671ull, 2538930512679076825ull}},
+{{11635005904910304292ull, 14540636394328718489ull,
+ 2252510853867117126ull, 3173663140848846032ull}},
+{{708699325855716653ull, 8952423456056122304ull, 2815638567333896408ull,
+ 3967078926061057540ull}},
+{{442937078659822908ull, 5595264660035076440ull,
+ 10983146141438461063ull, 2479424328788160962ull}},
+{{553671348324778635ull, 2382394806616457646ull, 4505560639943300521ull,
+ 3099280410985201203ull}},
+{{9915461222260749102ull, 7589679526697959961ull,
+ 1020264781501737747ull, 3874100513731501504ull}},
+{{17726378309981437949ull, 2437706694972531023ull,
+ 637665488438586092ull, 2421312821082188440ull}},
+{{17546286869049409532ull, 3047133368715663779ull,
+ 797081860548232615ull, 3026641026352735550ull}},
+{{17321172567884374011ull, 17643974766176743436ull,
+ 10219724362540066576ull, 3783301282940919437ull}},
+{{1602360818072957949ull, 11027484228860464648ull,
+ 8693170735801235562ull, 2364563301838074648ull}},
+{{2002951022591197436ull, 4560983249220805002ull,
+ 10866463419751544453ull, 2955704127297593310ull}},
+{{11727060815093772603ull, 10312915079953394156ull,
+ 4359707237834654758ull, 3694630159121991638ull}},
+{{16552785046288383685ull, 1833885906543483443ull,
+ 16559875078928822936ull, 2309143849451244773ull}},
+{{16079295289433091702ull, 2292357383179354304ull,
+ 6864785793378864958ull, 2886429811814055967ull}},
+{{1652375038081813012ull, 12088818765828968689ull,
+ 3969296223296193293ull, 3608037264767569959ull}},
+{{6677154816029654168ull, 1275965402004047149ull, 349934260692853713ull,
+ 4510046580959462449ull}},
+{{6479064769232227807ull, 12326693422320999228ull,
+ 11747923959001503330ull, 2818779113099664030ull}},
+{{8098830961540284759ull, 6184994741046473227ull,
+ 5461532911897103355ull, 3523473891374580038ull}},
+{{5511852683497968045ull, 3119557407880703630ull,
+ 16050288176726155002ull, 4404342364218225047ull}},
+{{17279965982468393740ull, 6561409398352827672ull,
+ 16948959138094928732ull, 2752713977636390654ull}},
+{{3153213404375940559ull, 8201761747941034591ull,
+ 11962826885763885107ull, 3440892472045488318ull}},
+{{17776574810752089411ull, 5640516166498905334ull,
+ 5730161570350080576ull, 4301115590056860398ull}},
+{{6498673238292667978ull, 3525322604061815834ull,
+ 17416409036750964072ull, 2688197243785537748ull}},
+{{17346713584720610780ull, 4406653255077269792ull,
+ 3323767222229153474ull, 3360246554731922186ull}},
+{{3236647907191211859ull, 14731688605701363049ull,
+ 13378081064641217650ull, 4200308193414902732ull}},
+{{13552119988062977172ull, 13818991396990739809ull,
+ 17584672702255536839ull, 2625192620884314207ull}},
+{{3105091929796557753ull, 12662053227811036858ull,
+ 17369154859392033145ull, 3281490776105392759ull}},
+{{13104736949100472999ull, 1992508479481632360ull,
+ 17099757555812653528ull, 4101863470131740949ull}},
+{{8190460593187795625ull, 1245317799676020225ull,
+ 12993191481596602407ull, 2563664668832338093ull}},
+{{14849761759912132435ull, 15391705304877188993ull,
+ 2406431296713589296ull, 3204580836040422617ull}},
+{{4727144144608001831ull, 792887557386934626ull, 7619725139319374525ull,
+ 4005726045050528271ull}},
+{{7566151108807389049ull, 2801397732580528093ull,
+ 11679857239715690934ull, 2503578778156580169ull}},
+{{14069374904436624215ull, 12725119202580435924ull,
+ 764763494362449955ull, 3129473472695725212ull}},
+{{17586718630545780268ull, 11294712984798157001ull,
+ 955954367953062444ull, 3911841840869656515ull}},
+{{4074170116450030812ull, 16282567652353623934ull,
+ 16738372544466521691ull, 2444901150543535321ull}},
+{{14316084682417314323ull, 15741523547014642013ull,
+ 7087907625300988402ull, 3056126438179419152ull}},
+{{4060047797739479191ull, 10453532396913526709ull,
+ 8859884531626235503ull, 3820158047724273940ull}},
+{{4843372882800868447ull, 13450986775712036049ull,
+ 14760799869121172997ull, 2387598779827671212ull}},
+{{10665902121928473462ull, 2978675414357881349ull, 4255762691914631ull,
+ 2984498474784589016ull}},
+{{17944063670837979732ull, 17558402323229515398ull, 5319703364893288ull,
+ 3730623093480736270ull}},
+{{6603353775846349429ull, 10974001452018447124ull,
+ 13838382869885222017ull, 2331639433425460168ull}},
+{{8254192219807936786ull, 18329187833450446809ull,
+ 17297978587356527521ull, 2914549291781825210ull}},
+{{14929426293187308886ull, 9076426736530894799ull,
+ 12399101197340883594ull, 3643186614727281513ull}},
+{{14050096848056748203ull, 2122161383808842691ull,
+ 1663818441393940781ull, 4553983268409101892ull}},
+{{6475467520821773675ull, 3632193874094220634ull,
+ 10263258562725988796ull, 2846239542755688682ull}},
+{{17317706437881992902ull, 4540242342617775792ull,
+ 3605701166552710187ull, 3557799428444610853ull}},
+{{3200388973642939511ull, 1063616909844831837ull,
+ 9118812476618275638ull, 4447249285555763566ull}},
+{{4306086117740531147ull, 14499818623935183610ull,
+ 1087571779459034369ull, 2779530803472352229ull}},
+{{14605979684030439741ull, 4289715224636815800ull,
+ 5971150742751180866ull, 3474413504340440286ull}},
+{{18257474605038049677ull, 14585516067650795558ull,
+ 16687310465293751890ull, 4343016880425550357ull}},
+{{6799235609721393144ull, 13727633560709135128ull,
+ 12735412050022288883ull, 2714385550265968973ull}},
+{{8499044512151741430ull, 12547855932459031006ull,
+ 2084207007245697392ull, 3392981937832461217ull}},
+{{1400433603334900979ull, 15684819915573788758ull,
+ 7216944777484509644ull, 4241227422290576521ull}},
+{{14710329057366476824ull, 579640410378842165ull,
+ 16039805531996288288ull, 2650767138931610325ull}},
+{{4552853266425932318ull, 724550512973552707ull, 6214698859713196648ull,
+ 3313458923664512907ull}},
+{{1079380564605027494ull, 905688141216940884ull, 3156687556214107906ull,
+ 4141823654580641134ull}},
+{{9897984889732917992ull, 5177741106687975956ull,
+ 15807987777915981153ull, 2588639784112900708ull}},
+{{12372481112166147489ull, 11083862401787357849ull,
+ 1313240648685424825ull, 3235799730141125886ull}},
+{{1630543334925520650ull, 19769946952033600ull, 10864922847711556840ull,
+ 4044749662676407357ull}},
+{{1019089584328450406ull, 12356216845021000ull, 9096419789033416977ull,
+ 2527968539172754598ull}},
+{{1273861980410563008ull, 4627131289483664154ull,
+ 2147152699436995413ull, 3159960673965943248ull}},
+{{10815699512367979567ull, 10395600130281968096ull,
+ 2683940874296244266ull, 3949950842457429060ull}},
+{{6759812195229987230ull, 11108936099853617964ull,
+ 10900835083289928474ull, 2468719276535893162ull}},
+{{8449765244037484037ull, 4662798087962246647ull,
+ 4402671817257634785ull, 3085899095669866453ull}},
+{{5950520536619467142ull, 10440183628380196213ull,
+ 10115025789999431385ull, 3857373869587333066ull}},
+{{6024918344600860916ull, 18054329813806092393ull,
+ 10933577137177032519ull, 2410858668492083166ull}},
+{{12142833949178464049ull, 17956226248830227587ull,
+ 4443599384616514841ull, 3013573335615103958ull}},
+{{10566856418045692157ull, 8610224755755620772ull,
+ 14777871267625419360ull, 3766966669518879947ull}},
+{{15827657298133333406ull, 5381390472347262982ull,
+ 6930326533052193148ull, 2354354168449299967ull}},
+{{10561199585811890950ull, 6726738090434078728ull,
+ 4051222147887853531ull, 2942942710561624959ull}},
+{{13201499482264863687ull, 3796736594615210506ull,
+ 452341666432429010ull, 3678678388202031199ull}},
+{{7278502315976303801ull, 13969292780123788941ull,
+ 14400485138322699974ull, 4598347985252538998ull}},
+{{6854906956698883828ull, 4119121969149980184ull,
+ 4388617193024299580ull, 2873967490782836874ull}},
+{{8568633695873604785ull, 5148902461437475230ull,
+ 14709143528135150283ull, 3592459363478546092ull}},
+{{1487420082987230173ull, 1824442058369456134ull,
+ 18386429410168937854ull, 4490574204348182615ull}},
+{{14764695607149182570ull, 14975334341763073795ull,
+ 18409047408996668014ull, 2806608877717614134ull}},
+{{13844183490509090309ull, 9495795890349066436ull,
+ 13787937224391059210ull, 3508261097147017668ull}},
+{{17305229363136362886ull, 2646372826081557237ull,
+ 17234921530488824013ull, 4385326371433772085ull}},
+{{13121611361173920756ull, 3959826025514667225ull,
+ 13077668965769208960ull, 2740828982146107553ull}},
+{{2566956146185237232ull, 4949782531893334032ull,
+ 2512028151929347488ull, 3426036227682634442ull}},
+{{3208695182731546540ull, 6187228164866667540ull,
+ 12363407226766460168ull, 4282545284603293052ull}},
+{{11228806526061992396ull, 3867017603041667212ull,
+ 16950501553583813413ull, 2676590802877058157ull}},
+{{14036008157577490495ull, 9445458022229471919ull,
+ 7353068886697603054ull, 3345738503596322697ull}},
+{{12933324178544475214ull, 2583450490932064091ull,
+ 13803022126799391722ull, 4182173129495403371ull}},
+{{5777484602376603057ull, 6226342575259927961ull,
+ 6321045820035925874ull, 2613858205934627107ull}},
+{{11833541771398141725ull, 17006300255929685759ull,
+ 3289621256617519438ull, 3267322757418283884ull}},
+{{10180241195820289253ull, 12034503283057331391ull,
+ 4112026570771899298ull, 4084153446772854855ull}},
+{{13280179775028762639ull, 12133250570338220023ull,
+ 9487545634373518917ull, 2552595904233034284ull}},
+{{11988538700358565395ull, 1331505157640611317ull,
+ 11859432042966898647ull, 3190744880291292855ull}},
+{{1150615320166043031ull, 15499439502332927859ull,
+ 10212604035281235404ull, 3988431100364116069ull}},
+{{16860035639599634559ull, 463777652103304103ull,
+ 8688720531264466080ull, 2492769437727572543ull}},
+{{16463358531072155294ull, 579722065129130129ull,
+ 6249214645653194696ull, 3115961797159465679ull}},
+{{6744140108558030406ull, 724652581411412662ull, 3199832288639105466ull,
+ 3894952246449332099ull}},
+{{18050145623130932716ull, 5064593881809520817ull,
+ 18140796244895298580ull, 2434345154030832561ull}},
+{{8727623973631502183ull, 6330742352261901022ull,
+ 8840937250836959513ull, 3042931442538540702ull}},
+{{1686157930184601920ull, 12525113958754764182ull,
+ 1827799526691423583ull, 3803664303173175878ull}},
+{{14888906761647539912ull, 14745725251862809469ull,
+ 14977432759464303451ull, 2377290189483234923ull}},
+{{4776075396777261178ull, 13820470546401123933ull,
+ 14110104930902991410ull, 2971612736854043654ull}},
+{{10581780264398964377ull, 8052216146146629108ull,
+ 8414259126773963455ull, 3714515921067554568ull}},
+{{15836984702104128544ull, 11950164118982725048ull,
+ 5258911954233727159ull, 2321572450667221605ull}},
+{{1349486803920609063ull, 10326019130301018407ull,
+ 11185325961219546853ull, 2901965563334027006ull}},
+{{15521916560182925041ull, 17519209931303660912ull,
+ 4758285414669657758ull, 3627456954167533758ull}},
+{{955651626519104685ull, 12675640377274800333ull,
+ 15171228805191848006ull, 4534321192709417197ull}},
+{{2903125275788134380ull, 3310589217369362304ull,
+ 11787861012458598956ull, 2833950745443385748ull}},
+{{3628906594735167975ull, 4138236521711702880ull,
+ 14734826265573248695ull, 3542438431804232185ull}},
+{{4536133243418959969ull, 561109633712240696ull, 4583474776684397157ull,
+ 4428048039755290232ull}},
+{{2835083277136849981ull, 2656536530283844387ull,
+ 2864671735427748223ull, 2767530024847056395ull}},
+{{17378912151703226188ull, 17155728718136969195ull,
+ 17415897724566848990ull, 3459412531058820493ull}},
+{{17111954171201644831ull, 12221288860816435686ull,
+ 7934814100426397526ull, 4324265663823525617ull}},
+{{6083285338573640115ull, 3026619519582884400ull,
+ 16488473858834968214ull, 2702666039889703510ull}},
+{{7604106673217050144ull, 13006646436333381308ull,
+ 11387220286688934459ull, 3378332549862129388ull}},
+{{9505133341521312680ull, 11646622026989338731ull,
+ 14234025358361168074ull, 4222915687327661735ull}},
+{{3634865329237126473ull, 11890824785295724611ull,
+ 15813794876616811902ull, 2639322304579788584ull}},
+{{18378639716828571803ull, 5640158944764879955ull,
+ 1320499522061463262ull, 3299152880724735731ull}},
+{{18361613627608326850ull, 16273570717810875752ull,
+ 15485682457858992789ull, 4123941100905919663ull}},
+{{11476008517255204282ull, 12476824707845491297ull,
+ 16596080563802952349ull, 2577463188066199789ull}},
+{{509952591286841640ull, 1760972829524700410ull, 6910042649471526725ull,
+ 3221828985082749737ull}},
+{{9860812775963327858ull, 6812902055333263416ull,
+ 13249239330266796310ull, 4027286231353437171ull}},
+{{6163007984977079911ull, 18093121839865453347ull,
+ 5974931572203053741ull, 2517053894595898232ull}},
+{{3092073962793961985ull, 8781344244549652972ull,
+ 7468664465253817177ull, 3146317368244872790ull}},
+{{3865092453492452481ull, 15588366324114454119ull,
+ 112458544712495663ull, 3932896710306090988ull}},
+{{9333211811073864657ull, 16660257980212615680ull,
+ 9293658627300085597ull, 2458060443941306867ull}},
+{{11666514763842330821ull, 6990264419983605888ull,
+ 7005387265697719093ull, 3072575554926633584ull}},
+{{14583143454802913526ull, 13349516543406895264ull,
+ 8756734082122148866ull, 3840719443658291980ull}},
+{{9114464659251820954ull, 12955133858056697444ull,
+ 14696330838181118849ull, 2400449652286432487ull}},
+{{11393080824064776192ull, 2358859267288708093ull,
+ 13758727529299010658ull, 3000562065358040609ull}},
+{{406292974798806528ull, 12171946120965660925ull,
+ 3363351356341599610ull, 3750702581697550762ull}},
+{{2559776118462948032ull, 12219152344030925982ull,
+ 6713780616140887660ull, 2344189113560969226ull}},
+{{12423092184933460848ull, 15273940430038657477ull,
+ 17615597807030885383ull, 2930236391951211532ull}},
+{{1693807175884662348ull, 14480739519120933943ull,
+ 3572753185079055113ull, 3662795489939014416ull}},
+{{15952317025137991647ull, 4265866343619003716ull,
+ 4465941481348818892ull, 4578494362423768020ull}},
+{{746826103856468972ull, 11889538501616653131ull,
+ 12014585462697787615ull, 2861558976514855012ull}},
+{{14768590685102749926ull, 10250237108593428509ull,
+ 15018231828372234519ull, 3576948720643568765ull}},
+{{4625680301096273696ull, 8201110367314397733ull,
+ 4937731730183129437ull, 4471185900804460957ull}},
+{{5196893197398865012ull, 7431536988785192535ull,
+ 5391925340578149850ull, 2794491188002788098ull}},
+{{1884430478321193361ull, 66049199126714861ull, 15963278712577463121ull,
+ 3493113985003485122ull}},
+{{6967224116328879605ull, 4694247517335781480ull,
+ 10730726353867053093ull, 4366392481254356403ull}},
+{{4354515072705549753ull, 5239747707548557377ull,
+ 4400860961953214231ull, 2728995300783972752ull}},
+{{10054829859309325096ull, 1937998616008308817ull,
+ 5501076202441517789ull, 3411244125979965940ull}},
+{{17180223342564044273ull, 7034184288437773925ull,
+ 6876345253051897236ull, 4264055157474957425ull}},
+{{13043482598316221623ull, 13619737217128384511ull,
+ 15826930829225905532ull, 2665034473421848390ull}},
+{{11692667229467889125ull, 17024671521410480639ull,
+ 10560291499677606107ull, 3331293091777310488ull}},
+{{10004148018407473502ull, 16669153383335712895ull,
+ 13200364374597007634ull, 4164116364721638110ull}},
+{{13170121539145752795ull, 15029906883012208463ull,
+ 3638541715695741867ull, 2602572727951023819ull}},
+{{11850965905504803089ull, 14175697585337872675ull,
+ 18383235199901841046ull, 3253215909938779773ull}},
+{{10202021363453615958ull, 8496249944817565036ull,
+ 9143985944595137596ull, 4066519887423474717ull}},
+{{15599635389013285782ull, 14533528252365753955ull,
+ 8020834224585654949ull, 2541574929639671698ull}},
+{{14887858217839219323ull, 4331852260175028732ull,
+ 802670743877292879ull, 3176968662049589623ull}},
+{{163078698589472538ull, 803129306791398012ull, 14838396485128779811ull,
+ 3971210827561987028ull}},
+{{9325296223473196144ull, 16642856881240481421ull, 50625766350711573ull,
+ 2482006767226241893ull}},
+{{16268306297768883084ull, 6968513046268438064ull,
+ 4674968226365777371ull, 3102508459032802366ull}},
+{{1888638798501552239ull, 4098955289408159677ull,
+ 15067082319811997522ull, 3878135573791002957ull}},
+{{3486242258277164102ull, 7173533074307487702ull,
+ 11722769459096192403ull, 2423834733619376848ull}},
+{{13581174859701230935ull, 4355230324456971723ull,
+ 14653461823870240504ull, 3029793417024221060ull}},
+{{12364782556199150764ull, 5444037905571214654ull,
+ 18316827279837800630ull, 3787241771280276325ull}},
+{{3116303079197081324ull, 17237581746264172871ull,
+ 13753860059112319345ull, 2367026107050172703ull}},
+{{17730436904278515367ull, 7711919127548052376ull,
+ 12580639055463011278ull, 2958782633812715879ull}},
+{{3716302056638592592ull, 416526872580289663ull,
+ 11114112800901376194ull, 3698478292265894849ull}},
+{{9240217813040202226ull, 4872015313790068943ull, 28791472922278265ull,
+ 2311548932666184281ull}},
+{{6938586247872864879ull, 10701705160664974083ull,
+ 4647675359580235735ull, 2889436165832730351ull}},
+{{4061546791413693195ull, 8765445432403829700ull,
+ 1197908181047906765ull, 3611795207290912939ull}},
+{{5076933489267116493ull, 15568492808932175029ull,
+ 15332443281592047168ull, 4514744009113641173ull}},
+{{5478926440005641760ull, 9730308005582609393ull,
+ 11888620060208723432ull, 2821715005696025733ull}},
+{{11460344068434440104ull, 12162885006978261741ull,
+ 1025717019978740578ull, 3527143757120032167ull}},
+{{490372030260886418ull, 5980234221868051369ull,
+ 15117204330255589435ull, 4408929696400040208ull}},
+{{11835697564981523772ull, 1431803379453838153ull,
+ 9448252706409743397ull, 2755581060250025130ull}},
+{{959563900944741002ull, 6401440242744685596ull, 2586943846157403438ull,
+ 3444476325312531413ull}},
+{{1199454876180926253ull, 17225172340285632803ull,
+ 7845365826124142201ull, 4305595406640664266ull}},
+{{16890560362108936572ull, 3848203685037438645ull,
+ 9515039659754976780ull, 2690997129150415166ull}},
+{{7278142397354007003ull, 4810254606296798307ull,
+ 2670427537838945167ull, 3363746411438018958ull}},
+{{4485991978265120850ull, 1401132239443609980ull,
+ 12561406459153457267ull, 4204683014297523697ull}},
+{{12027117023270476339ull, 17016608714148113901ull,
+ 933350009329828935ull, 2627926883935952311ull}},
+{{1198838223805931712ull, 16659074874257754473ull,
+ 15001745566944449881ull, 3284908604919940388ull}},
+{{6110233798184802544ull, 6988785537540029379ull, 305437884971010736ull,
+ 4106135756149925486ull}},
+{{1513053114651807638ull, 4367990960962518362ull,
+ 14025956733389045422ull, 2566334847593703428ull}},
+{{11114688430169535356ull, 14683360738057923760ull,
+ 17532445916736306777ull, 3207918559492129285ull}},
+{{13893360537711919194ull, 4519142867290240988ull,
+ 8080499340638219760ull, 4009898199365161607ull}},
+{{17906722372924725305ull, 2824464292056400617ull,
+ 11967841115539969206ull, 2506186374603226004ull}},
+{{8548344910873742919ull, 12753952401925276580ull,
+ 14959801394424961507ull, 3132732968254032505ull}},
+{{10685431138592178648ull, 11330754483979207821ull,
+ 4864693687749038172ull, 3915916210317540632ull}},
+{{8984237470833805607ull, 16305093589341780696ull,
+ 3040433554843148857ull, 2447447631448462895ull}},
+{{11230296838542257009ull, 6546308931395062158ull,
+ 17635599998836099784ull, 3059309539310578618ull}},
+{{4814499011323045453ull, 8182886164243827698ull,
+ 12821127961690348922ull, 3824136924138223273ull}},
+{{7620747900504291312ull, 9725989871079780215ull,
+ 1095675948415386220ull, 2390085577586389546ull}},
+{{4914248857202976236ull, 12157487338849725269ull,
+ 10592966972374008583ull, 2987606971982986932ull}},
+{{10754497089931108199ull, 10585173155134768682ull,
+ 13241208715467510729ull, 3734508714978733665ull}},
+{{11333246699634330529ull, 18144948268027700186ull,
+ 1358226419526112349ull, 2334067946861708541ull}},
+{{4943186337688137353ull, 8846127279752461521ull,
+ 6309469042835028341ull, 2917584933577135676ull}},
+{{10790668940537559595ull, 15669345118117964805ull,
+ 7886836303543785426ull, 3646981166971419595ull}},
+{{18100022194099337398ull, 10363309360792680198ull,
+ 5246859361002343879ull, 4558726458714274494ull}},
+{{6700827852884697970ull, 13394597378136506980ull,
+ 17114345155908628636ull, 2849204036696421558ull}},
+{{8376034816105872462ull, 16743246722670633725ull,
+ 12169559408031009987ull, 3561505045870526948ull}},
+{{15081729538559728481ull, 16317372384910904252ull,
+ 15211949260038762484ull, 4451881307338158685ull}},
+{{202708924745054493ull, 974985703714539350ull, 11813311296737920505ull,
+ 2782425817086349178ull}},
+{{9476758192786093924ull, 5830418148070562091ull,
+ 5543267084067624823ull, 3478032271357936473ull}},
+{{7234261722555229501ull, 2676336666660814710ull,
+ 11540769873511918933ull, 4347540339197420591ull}},
+{{18356471631879182150ull, 3978553425876703145ull,
+ 14130510198586031189ull, 2717212711998387869ull}},
+{{9110531484566813976ull, 9584877800773266836ull,
+ 3828079692950375274ull, 3396515889997984837ull}},
+{{11388164355708517470ull, 2757725214111807737ull,
+ 9396785634615356997ull, 4245644862497481046ull}},
+{{200073694676741563ull, 4029421268033573788ull, 1261305003207210219ull,
+ 2653528039060925654ull}},
+{{250092118345926953ull, 425090566614579331ull, 10800003290863788582ull,
+ 3316910048826157067ull}},
+{{14147673203214572403ull, 9754735245122999971ull,
+ 8888318095152347823ull, 4146137561032696334ull}},
+{{6536452742795413800ull, 13014238555842956838ull,
+ 943512791042829485ull, 2591335975645435209ull}},
+{{17393937965349043058ull, 2432740139521532335ull,
+ 5791077007230924761ull, 3239169969556794011ull}},
+{{17130736438258915919ull, 7652611192829303323ull,
+ 2627160240611268047ull, 4048962461945992514ull}},
+{{8400867264698128497ull, 11700411023159396433ull,
+ 6253661168809430433ull, 2530601538716245321ull}},
+{{15112770099300048526ull, 790455723667081829ull,
+ 12428762479439175946ull, 3163251923395306651ull}},
+{{5055904568842896945ull, 10211441691438628095ull,
+ 10924267080871582028ull, 3954064904244133314ull}},
+{{10077469383167892447ull, 15605523094003918367ull,
+ 11439352943972126671ull, 2471290565152583321ull}},
+{{7985150710532477654ull, 14895217849077510055ull,
+ 464133124682994627ull, 3089113206440729152ull}},
+{{5369752369738209164ull, 14007336292919499665ull,
+ 580166405853743284ull, 3861391508050911440ull}},
+{{14885310277154850488ull, 17977957219929463098ull,
+ 362604003658589552ull, 2413369692531819650ull}},
+{{9383265809588787301ull, 4025702451202277257ull,
+ 9676627041428012749ull, 3016712115664774562ull}},
+{{16340768280413372031ull, 9643814082430234475ull,
+ 2872411764930240128ull, 3770890144580968203ull}},
+{{7907137166044663567ull, 6027383801518896547ull,
+ 17936158417577257744ull, 2356806340363105126ull}},
+{{5272235439128441555ull, 7534229751898620684ull,
+ 13196825985116796372ull, 2946007925453881408ull}},
+{{6590294298910551944ull, 9417787189873275855ull,
+ 16496032481395995465ull, 3682509906817351760ull}},
+{{3626181855210802025ull, 16383920005768982723ull,
+ 2173296528035442715ull, 4603137383521689701ull}},
+{{18407264724002608930ull, 7934106994391920249ull,
+ 3664153339235845649ull, 2876960864701056063ull}},
+{{9174022849721097450ull, 14529319761417288216ull,
+ 18415249729326970773ull, 3596201080876320078ull}},
+{{11467528562151371813ull, 4326591646489446558ull,
+ 13795690124803937659ull, 4495251351095400098ull}},
+{{2555519332917219479ull, 398276769842210147ull,
+ 13233992346429848941ull, 2809532094434625061ull}},
+{{17029457221428688061ull, 5109531980730150587ull,
+ 2707432377755147464ull, 3511915118043281327ull}},
+{{16675135508358472172ull, 6386914975912688234ull,
+ 17219348527476098042ull, 4389893897554101658ull}},
+{{15033645711151433012ull, 8603507878372818050ull,
+ 15373778848099949180ull, 2743683685971313536ull}},
+{{9568685102084515456ull, 10754384847966022563ull,
+ 770479486415384859ull, 3429604607464141921ull}},
+{{7349170359178256416ull, 8831295041530140300ull,
+ 5574785376446618978ull, 4287005759330177401ull}},
+{{13816603511341186068ull, 10131245419383725591ull,
+ 15013455906347606621ull, 2679378599581360875ull}},
+{{12659068370749094681ull, 17275742792657044893ull,
+ 14155133864507120372ull, 3349223249476701094ull}},
+{{1988777408154204640ull, 3147934417111754501ull,
+ 8470545293779124658ull, 4186529061845876368ull}},
+{{3548828889310071852ull, 6579145029122234467ull,
+ 5294090808611952911ull, 2616580663653672730ull}},
+{{18271094166919753527ull, 3612245267975405179ull,
+ 15840985547619716947ull, 3270725829567090912ull}},
+{{18227181690222304005ull, 18350364640251420186ull,
+ 1354487860815094567ull, 4088407286958863641ull}},
+{{16003674574816327907ull, 18386506927798219472ull,
+ 12375769959077903864ull, 2555254554349289775ull}},
+{{1557849144810858268ull, 4536389586038222725ull,
+ 10858026430419991927ull, 3194068192936612219ull}},
+{{6558997449440960738ull, 1058800964120390502ull,
+ 8960847019597602005ull, 3992585241170765274ull}},
+{{17934431461182764174ull, 2967593611788938015ull,
+ 10212215405675889157ull, 2495365775731728296ull}},
+{{17806353308051067313ull, 8321178033163560423ull,
+ 12765269257094861446ull, 3119207219664660370ull}},
+{{17646255616636446237ull, 1178100504599674721ull,
+ 6733214534513801000ull, 3899009024580825463ull}},
+{{4111380732756697042ull, 736312815374796701ull,
+ 11125788111712207481ull, 2436880640363015914ull}},
+{{9750911934373259207ull, 5532077037645883780ull,
+ 4683863102785483543ull, 3046100800453769893ull}},
+{{12188639917966574008ull, 2303410278629966821ull,
+ 10466514896909242333ull, 3807626000567212366ull}},
+{{9923742957942802707ull, 3745474433357423215ull,
+ 1929885792140888554ull, 2379766250354507729ull}},
+{{7792992679001115480ull, 13905215078551554827ull,
+ 7024043258603498596ull, 2974707812943134661ull}},
+{{5129554830324006446ull, 17381518848189443534ull,
+ 13391740091681761149ull, 3718384766178918326ull}},
+{{17041029824234667741ull, 13169292289332096160ull,
+ 3758151538873712814ull, 2323990478861823954ull}},
+{{2854543206583783060ull, 7238243324810344393ull,
+ 13921061460446916826ull, 2904988098577279942ull}},
+{{8179865026657116729ull, 18271176192867706299ull,
+ 8177954788703870224ull, 3631235123221599928ull}},
+{{5613145264894008007ull, 4392226167375081258ull,
+ 10222443485879837781ull, 4539043904026999910ull}},
+{{8119901808986142909ull, 5050984363823119738ull,
+ 1777341160247510709ull, 2836902440016874944ull}},
+{{926505224377902828ull, 10925416473206287577ull,
+ 2221676450309388386ull, 3546128050021093680ull}},
+{{5769817548899766439ull, 4433398554653083663ull,
+ 2777095562886735483ull, 4432660062526367100ull}},
+{{10523664995703435880ull, 465031087444483337ull,
+ 10959056763658985485ull, 2770412539078979437ull}},
+{{17766267263056682754ull, 5192974877732992075ull,
+ 18310506973001119760ull, 3463015673848724296ull}},
+{{17596148060393465539ull, 6491218597166240094ull,
+ 4441389642541848084ull, 4328769592310905371ull}},
+{{6385906519318528058ull, 13280383660083675867ull,
+ 470025517374961100ull, 2705480995194315857ull}},
+{{3370697130720772168ull, 16600479575104594834ull,
+ 5199217915146089279ull, 3381851243992894821ull}},
+{{13436743450255741018ull, 16138913450453355638ull,
+ 11110708412359999503ull, 4227314054991118526ull}},
+{{3786278637982450233ull, 17004349934174429130ull,
+ 2332506739297611785ull, 2642071284369449079ull}},
+{{13956220334332838599ull, 7420379362435872700ull,
+ 16750691479404178444ull, 3302589105461811348ull}},
+{{17445275417916048248ull, 9275474203044840875ull,
+ 2491620275545671439ull, 4128236381827264186ull}},
+{{8597454126983836203ull, 12714700404544107403ull,
+ 6168948690643432553ull, 2580147738642040116ull}},
+{{6135131640302407350ull, 2058317450397970542ull,
+ 7711185863304290692ull, 3225184673302550145ull}},
+{{16892286587232784995ull, 2572896812997463177ull,
+ 14250668347557751269ull, 4031480841628187681ull}},
+{{3640150089379408766ull, 3913903517337108438ull,
+ 1989138689582512687ull, 2519675526017617301ull}},
+{{13773559648579036766ull, 280693378243997643ull,
+ 7098109380405528763ull, 3149594407522021626ull}},
+{{12605263542296408053ull, 14185924778087160766ull,
+ 18096008762361686761ull, 3936993009402527032ull}},
+{{3266603695507867129ull, 1948673958663393623ull,
+ 11310005476476054226ull, 2460620630876579395ull}},
+{{17918312674666997623ull, 11659214485184017836ull,
+ 9525820827167679878ull, 3075775788595724244ull}},
+{{3951146769624195413ull, 5350646069625246488ull,
+ 11907276033959599848ull, 3844719735744655305ull}},
+{{2469466731015122133ull, 3344153793515779055ull, 524518493583668049ull,
+ 2402949834840409566ull}},
+{{16921891469051066379ull, 8791878260322111722ull,
+ 9879020153834360869ull, 3003687293550511957ull}},
+{{11928992299459057165ull, 15601533843830027557ull,
+ 16960461210720338990ull, 3754609116938139946ull}},
+{{9761463196375604680ull, 5139272633966379319ull,
+ 15211974275127599773ull, 2346630698086337466ull}},
+{{7590142977042117946ull, 11035776810885362053ull,
+ 9791595807054723908ull, 2933288372607921833ull}},
+{{14099364739730035337ull, 13794721013606702566ull,
+ 16851180777245792789ull, 3666610465759902291ull}},
+{{8400833887807768363ull, 3408343211726214496ull,
+ 16452289953129853083ull, 4583263082199877864ull}},
+{{5250521179879855227ull, 18271115571824741724ull,
+ 10282681220706158176ull, 2864539426374923665ull}},
+{{6563151474849819034ull, 4392150391071375539ull,
+ 17465037544310085625ull, 3580674282968654581ull}},
+{{3592253325134885888ull, 10101874007266607328ull,
+ 7996238875105443319ull, 4475842853710818227ull}},
+{{2245158328209303680ull, 13231200282182711436ull,
+ 2691806287727208122ull, 2797401783569261392ull}},
+{{2806447910261629600ull, 7315628315873613487ull,
+ 3364757859659010153ull, 3496752229461576740ull}},
+{{17343117943109200712ull, 13756221413269404762ull,
+ 4205947324573762691ull, 4370940286826970925ull}},
+{{15451134732870638349ull, 6291795374079684024ull,
+ 4934560087072295634ull, 2731837679266856828ull}},
+{{867174342378746320ull, 17088116254454380839ull,
+ 6168200108840369542ull, 3414797099083571035ull}},
+{{14919025983255596612ull, 12136773281213200240ull,
+ 3098564117623074024ull, 4268496373854463794ull}},
+{{9324391239534747883ull, 7585483300758250150ull,
+ 6548288591941809169ull, 2667810233659039871ull}},
+{{2432117012563659045ull, 14093540144375200592ull,
+ 3573674721499873557ull, 3334762792073799839ull}},
+{{3040146265704573807ull, 3781867125186837028ull,
+ 18302151457157005659ull, 4168453490092249798ull}},
+{{11123463452920134437ull, 57823944028079190ull, 6827158642295740633ull,
+ 2605283431307656124ull}},
+{{4680957279295392239ull, 4683965948462486892ull,
+ 8533948302869675791ull, 3256604289134570155ull}},
+{{5851196599119240298ull, 1243271417150720711ull,
+ 6055749360159706835ull, 4070755361418212694ull}},
+{{10574526902090607043ull, 16917945700215058108ull,
+ 17619901405381980483ull, 2544222100886382933ull}},
+{{13218158627613258803ull, 16535746106841434731ull,
+ 8189818701445311892ull, 3180277626107978667ull}},
+{{11911012266089185600ull, 2222938559842241798ull,
+ 5625587358379251962ull, 3975347032634973334ull}},
+{{2832696647878353096ull, 6001022618328789028ull,
+ 17351050154269196188ull, 2484591895396858333ull}},
+{{3540870809847941370ull, 7501278272910986285ull,
+ 7853754637554331523ull, 3105739869246072917ull}},
+{{9037774530737314616ull, 4764911822711344952ull,
+ 14428879315370302308ull, 3882174836557591146ull}},
+{{5648609081710821635ull, 12201441926049366403ull,
+ 13629735590533826846ull, 2426359272848494466ull}},
+{{2449075333711139140ull, 6028430370706932196ull,
+ 7813797451312507750ull, 3032949091060618083ull}},
+{{3061344167138923925ull, 16758910000238441053ull,
+ 5155560795713246783ull, 3791186363825772604ull}},
+{{4219183113675521405ull, 17391847777790107514ull,
+ 12445597534175555047ull, 2369491477391107877ull}},
+{{14497350928949177564ull, 17128123703810246488ull,
+ 1721938862437280097ull, 2961864346738884847ull}},
+{{18121688661186471955ull, 7575096574480644398ull,
+ 15987481633328763834ull, 3702330433423606058ull}},
+{{6714369394814157068ull, 9346121377477790653ull,
+ 14603862039257865300ull, 2313956520889753786ull}},
+{{13004647761945084239ull, 11682651721847238316ull,
+ 9031455512217555817ull, 2892445651112192233ull}},
+{{16255809702431355299ull, 768256597026884183ull,
+ 15901005408699332676ull, 3615557063890240291ull}},
+{{15708076109611806220ull, 960320746283605229ull,
+ 15264570742446777941ull, 4519446329862800364ull}},
+{{12123390577721072839ull, 2906043475640947220ull,
+ 316984677174460405ull, 2824653956164250228ull}},
+{{15154238222151341049ull, 8244240362978571929ull,
+ 396230846468075506ull, 3530817445205312785ull}},
+{{5107739722407012599ull, 1081928416868439104ull,
+ 5106974576512482287ull, 4413521806506640981ull}},
+{{3192337326504382875ull, 7593734288183856296ull,
+ 5497702119533995381ull, 2758451129066650613ull}},
+{{3990421658130478593ull, 14103853878657208274ull,
+ 11483813667844882130ull, 3448063911333313266ull}},
+{{14211399109517874050ull, 8406445311466734534ull,
+ 5131395047951326855ull, 4310079889166641583ull}},
+{{4270438425021283377ull, 12171557347307790940ull,
+ 10124650932610661140ull, 2693799930729150989ull}},
+{{5338048031276604221ull, 15214446684134738675ull,
+ 17267499684190714329ull, 3367249913411438736ull}},
+{{2060874020668367373ull, 5183000299886259632ull,
+ 3137630531528841296ull, 4209062391764298421ull}},
+{{1288046262917729608ull, 3239375187428912270ull,
+ 4266862091419219762ull, 2630663994852686513ull}},
+{{10833429865501937818ull, 13272591021140916145ull,
+ 9945263632701412606ull, 3288329993565858141ull}},
+{{18153473350304810176ull, 7367366739571369373ull,
+ 17043265559304153662ull, 4110412491957322676ull}},
+{{13651763853154200312ull, 18439662267514269570ull,
+ 1428668937710320230ull, 2569007807473326673ull}},
+{{7841332779587974582ull, 13826205797538061155ull,
+ 6397522190565288192ull, 3211259759341658341ull}},
+{{5189979956057580324ull, 17282757246922576444ull,
+ 12608588756633998144ull, 4014074699177072926ull}},
+{{12467109509390763511ull, 10801723279326610277ull,
+ 3268681954468860936ull, 2508796686985670579ull}},
+{{1748828831456290676ull, 13502154099158262847ull,
+ 17920910498368239882ull, 3135995858732088223ull}},
+{{16021094094602527057ull, 7654320587093052750ull,
+ 17789452104532911949ull, 3919994823415110279ull}},
+{{5401497790699191507ull, 7089793376146851921ull,
+ 18035936592974151824ull, 2449996764634443924ull}},
+{{11363558256801377287ull, 8862241720183564901ull,
+ 4098176667508138164ull, 3062495955793054906ull}},
+{{369389765719557897ull, 11077802150229456127ull,
+ 14346092871239948513ull, 3828119944741318632ull}},
+{{7148397631215805542ull, 6097316252328223ull, 8966308044524967821ull,
+ 2392574965463324145ull}},
+{{4323811020592369023ull, 4619307663742798183ull,
+ 15819571074083597680ull, 2990718706829155181ull}},
+{{793077757313073375ull, 5774134579678497729ull, 5939405787322333388ull,
+ 3738398383536443977ull}},
+{{12024888644389140619ull, 12832206149153836888ull,
+ 15241343663144928127ull, 2336498989710277485ull}},
+{{15031110805486425774ull, 11428571668014908206ull,
+ 5216621523648996447ull, 2920623737137846857ull}},
+{{9565516470003256410ull, 9674028566591247354ull,
+ 11132462922988633463ull, 3650779671422308571ull}},
+{{2733523550649294704ull, 7480849689811671289ull,
+ 9303892635308403925ull, 4563474589277885714ull}},
+{{13237667265224278950ull, 6981374065345988507ull,
+ 10426618915495140357ull, 2852171618298678571ull}},
+{{11935398063102960784ull, 13338403600109873538ull,
+ 8421587625941537542ull, 3565214522873348214ull}},
+{{5695875542023925171ull, 7449632463282566115ull,
+ 1303612495572146120ull, 4456518153591685268ull}},
+{{1254079204551259280ull, 4656020289551603822ull,
+ 10038129846587367133ull, 2785323845994803292ull}},
+{{10790971042543849908ull, 10431711380366892681ull,
+ 12547662308234208916ull, 3481654807493504115ull}},
+{{18100399821607200289ull, 13039639225458615851ull,
+ 11072891866865373241ull, 4352068509366880144ull}},
+{{9006906879290806229ull, 1232245488270553051ull,
+ 6920557416790858276ull, 2720042818354300090ull}},
+{{6646947580686119882ull, 1540306860338191314ull,
+ 17874068807843348653ull, 3400053522942875112ull}},
+{{17532056512712425660ull, 6537069593850127046ull,
+ 3895841936094634200ull, 4250066903678593891ull}},
+{{6345849302017878134ull, 4085668496156329404ull, 129058200845452423ull,
+ 2656291814799121182ull}},
+{{7932311627522347667ull, 495399601768023851ull, 9384694787911591337ull,
+ 3320364768498901477ull}},
+{{5303703515975546680ull, 5230935520637417718ull,
+ 16342554503316877075ull, 4150455960623626846ull}},
+{{17149872752766880387ull, 963491691184692121ull,
+ 5602410546145660268ull, 2594034975389766779ull}},
+{{7602282885676436772ull, 1204364613980865152ull,
+ 2391327164254687431ull, 3242543719237208474ull}},
+{{9502853607095545965ull, 15340513822758245152ull,
+ 12212530992173135096ull, 4053179649046510592ull}},
+{{5939283504434716228ull, 9587821139223903220ull,
+ 7632831870108209435ull, 2533237280654069120ull}},
+{{7424104380543395285ull, 7373090405602491121ull,
+ 9541039837635261794ull, 3166546600817586400ull}},
+{{13891816494106632010ull, 18439735043857889709ull,
+ 11926299797044077242ull, 3958183251021983000ull}},
+{{10988228318030338959ull, 16136520420838568972ull,
+ 7453937373152548276ull, 2473864531888739375ull}},
+{{13735285397537923698ull, 1723906452338659599ull,
+ 4705735698013297442ull, 3092330664860924219ull}},
+{{12557420728495016718ull, 11378255102278100307ull,
+ 1270483604089233898ull, 3865413331076155274ull}},
+{{5542544946095691497ull, 11723095457351200596ull,
+ 5405738270983159090ull, 2415883331922597046ull}},
+{{6928181182619614371ull, 5430497284834224937ull,
+ 15980544875583724671ull, 3019854164903246307ull}},
+{{13271912496701905868ull, 2176435587615393267ull,
+ 15363995076052267935ull, 3774817706129057884ull}},
+{{5989102301224997216ull, 8277801269900702648ull, 379124885677891651ull,
+ 2359261066330661178ull}},
+{{7486377876531246520ull, 5735565568948490406ull,
+ 9697278143952140372ull, 2949076332913326472ull}},
+{{134600308809282341ull, 7169456961185613008ull,
+ 12121597679940175465ull, 3686345416141658090ull}},
+{{168250386011602926ull, 13573507219909404164ull,
+ 5928625063070443523ull, 4607931770177072613ull}},
+{{9328528528112027637ull, 6177599003229683650ull,
+ 6011233673632721154ull, 2879957356360670383ull}},
+{{2437288623285258738ull, 16945370790891880371ull,
+ 2902356073613513538ull, 3599946695450837979ull}},
+{{16881668834388737135ull, 11958341451760074655ull,
+ 17463003147299055635ull, 4499933369313547473ull}},
+{{17468572049134042565ull, 5168120398136352707ull,
+ 3996847939420827916ull, 2812458355820967171ull}},
+{{17224029042990165303ull, 6460150497670440884ull,
+ 384373905848646991ull, 3515572944776208964ull}},
+{{3083292230028155012ull, 3463502103660663202ull, 480467382310808739ull,
+ 4394466180970261205ull}},
+{{6538743662194984787ull, 18305589879283772165ull,
+ 2606135123157949413ull, 2746541363106413253ull}},
+{{12785115596171118887ull, 9046929293822551494ull,
+ 7869354922374824671ull, 3433176703883016566ull}},
+{{6758022458359122801ull, 6696975598850801464ull, 613321616113755031ull,
+ 4291470879853770708ull}},
+{{4223764036474451751ull, 11103138776922832771ull,
+ 9606698046925872702ull, 2682169299908606692ull}},
+{{668019027165676785ull, 4655551434298765156ull,
+ 12008372558657340878ull, 3352711624885758365ull}},
+{{835023783957095981ull, 15042811329728232253ull,
+ 1175407643039512385ull, 4190889531107197957ull}},
+{{2827732874186878940ull, 2484228053439063302ull,
+ 3040472786113389193ull, 2619305956941998723ull}},
+{{12758038129588374483ull, 7716971085226217031ull,
+ 17635649037923900203ull, 3274132446177498403ull}},
+{{11335861643558080200ull, 5034527838105383385ull,
+ 17432875278977487350ull, 4092665557721873004ull}},
+{{167384499582718269ull, 16981637954098028328ull,
+ 1672175012506153785ull, 2557915973576170628ull}},
+{{209230624478397836ull, 7391989387340371698ull, 2090218765632692232ull,
+ 3197394966970213285ull}},
+{{9484910317452773103ull, 9239986734175464622ull,
+ 7224459475468253194ull, 3996743708712766606ull}},
+{{1316382929980595285ull, 10386677727287053293ull,
+ 18350345227449821958ull, 2497964817945479128ull}},
+{{6257164680903132011ull, 3759975122254040808ull,
+ 4491187460602725832ull, 3122456022431848911ull}},
+{{7821455851128915013ull, 4699968902817551010ull,
+ 1002298307326019386ull, 3903070028039811139ull}},
+{{9500095925382959787ull, 7549166582688357285ull,
+ 16767337506574619780ull, 2439418767524881961ull}},
+{{16486805925156087638ull, 9436458228360446606ull,
+ 7124113827936111013ull, 3049273459406102452ull}},
+{{11385135369590333740ull, 16407258803877946162ull,
+ 8905142284920138766ull, 3811591824257628065ull}},
+{{11727395624421346491ull, 5642850733996328447ull,
+ 17094928974143556489ull, 2382244890161017540ull}},
+{{10047558512099295210ull, 11665249435922798463ull,
+ 2921917143969893995ull, 2977806112701271926ull}},
+{{7947762121696731109ull, 9969875776476110175ull,
+ 12875768466817143302ull, 3722257640876589907ull}},
+{{11884880353701538799ull, 1619486341870180955ull,
+ 5741512282547020612ull, 2326411025547868692ull}},
+{{10244414423699535595ull, 2024357927337726194ull,
+ 7176890353183775765ull, 2908013781934835865ull}},
+{{3582145992769643685ull, 7142133427599545647ull,
+ 13582798959907107610ull, 3635017227418544831ull}},
+{{18312740546244218319ull, 18151038821354207866ull,
+ 12366812681456496608ull, 4543771534273181039ull}},
+{{16057148859830024353ull, 11344399263346379916ull,
+ 14646786953551392236ull, 2839857208920738149ull}},
+{{1624692001077978825ull, 14180499079182974896ull,
+ 4473425636657076583ull, 3549821511150922687ull}},
+{{2030865001347473532ull, 13113937830551330716ull,
+ 980096027393957825ull, 4437276888938653359ull}},
+{{10492662662696946765ull, 1278682116453499841ull,
+ 7530089044762305497ull, 2773298055586658349ull}},
+{{17727514346798571361ull, 6210038663994262705ull,
+ 14024297324380269775ull, 3466622569483322936ull}},
+{{8324334878216050489ull, 3150862311565440478ull,
+ 17530371655475337219ull, 4333278211854153670ull}},
+{{591023280457643652ull, 18110190009224257963ull,
+ 6344796266244697857ull, 2708298882408846044ull}},
+{{14573837155854218276ull, 8802679456248158741ull,
+ 7930995332805872322ull, 3385373603011057555ull}},
+{{4382238389535609133ull, 1779977283455422619ull,
+ 5302058147579952499ull, 4231717003763821944ull}},
+{{433055984246061757ull, 17253386866655496801ull,
+ 3313786342237470311ull, 2644823127352388715ull}},
+{{5153005998734965100ull, 16955047564891983097ull,
+ 17977290983079001601ull, 3306028909190485893ull}},
+{{11052943516846094278ull, 7358751400832815159ull,
+ 8636555673566588290ull, 4132536136488107367ull}},
+{{13825618725669890780ull, 9210905643947897378ull,
+ 12315376323620199537ull, 2582835085305067104ull}},
+{{8058651370232587667ull, 16125318073362259627ull,
+ 15394220404525249421ull, 3228543856631333880ull}},
+{{5461628194363346680ull, 6321589536420660822ull, 796031431947010161ull,
+ 4035679820789167351ull}},
+{{17248575676759255387ull, 15480208506331382773ull,
+ 7415048672607963206ull, 2522299887993229594ull}},
+{{7725661540666905522ull, 10126888596059452659ull, 45438803905178200ull,
+ 3152874859991536993ull}},
+{{5045390907406243998ull, 12658610745074315824ull,
+ 4668484523308860654ull, 3941093574989421241ull}},
+{{3153369317128902499ull, 3299945697244059486ull,
+ 14447017873136507669ull, 2463183484368388275ull}},
+{{13165083683265903932ull, 8736618139982462261ull,
+ 13447086322993246682ull, 3078979355460485344ull}},
+{{2621296548800216202ull, 1697400638123302019ull,
+ 16808857903741558353ull, 3848724194325606680ull}},
+{{17779211407495992791ull, 12590090444895533521ull,
+ 10505536189838473970ull, 2405452621453504175ull}},
+{{8388956204087827276ull, 6514241019264641094ull,
+ 8520234218870704559ull, 3006815776816880219ull}},
+{{1262823218255008287ull, 3531115255653413464ull,
+ 6038606755160992795ull, 3758519721021100274ull}},
+{{789264511409380180ull, 18347848099279241079ull,
+ 8385815240403008400ull, 2349074825638187671ull}},
+{{14821638694543888936ull, 4488066050389499732ull,
+ 5870583032076372597ull, 2936343532047734589ull}},
+{{80304294470309554ull, 10221768581414262570ull,
+ 11949914808522853650ull, 3670429415059668236ull}},
+{{9323752404942662751ull, 3553838689913052404ull,
+ 14937393510653567063ull, 4588036768824585295ull}},
+{{15050717289943940027ull, 9138678208836739608ull,
+ 16253399971799561270ull, 2867522980515365809ull}},
+{{366652538720373418ull, 2199975724191148703ull, 6481691909467287876ull,
+ 3584403725644207262ull}},
+{{14293373728682630485ull, 2749969655238935878ull,
+ 17325486923688885653ull, 4480504657055259077ull}},
+{{4321672561999256149ull, 4024574043738028876ull,
+ 13134272336519247485ull, 2800315410659536923ull}},
+{{5402090702499070186ull, 9642403573099923999ull,
+ 11806154402221671452ull, 3500394263324421154ull}},
+{{2140927359696449829ull, 12053004466374904999ull,
+ 5534320965922313507ull, 4375492829155526443ull}},
+{{8255608627451362999ull, 5227284782270621672ull,
+ 1153107594487751990ull, 2734683018222204027ull}},
+{{10319510784314203749ull, 15757478014693052898ull,
+ 15276442548391853699ull, 3418353772777755033ull}},
+{{3676016443537978878ull, 15085161499938928219ull,
+ 5260495130207653412ull, 4272942215972193792ull}},
+{{18438411341707094463ull, 204853900607054328ull,
+ 3287809456379783383ull, 2670588884982621120ull}},
+{{4601270103424316462ull, 14091125431040981623ull,
+ 4109761820474729228ull, 3338236106228276400ull}},
+{{1139901610853007674ull, 17613906788801227029ull,
+ 5137202275593411535ull, 4172795132785345500ull}},
+{{3018281515996823748ull, 17926220770641848749ull,
+ 12434123459100658017ull, 2607996957990840937ull}},
+{{8384537913423417589ull, 8572717908020147224ull,
+ 1707596268593658810ull, 3259996197488551172ull}},
+{{10480672391779271987ull, 1492525348170408222ull,
+ 2134495335742073513ull, 4074995246860688965ull}},
+{{1938734226434657088ull, 12462043388674974899ull,
+ 3639902594052489897ull, 2546872029287930603ull}},
+{{16258475838325485072ull, 1742496180561554911ull,
+ 18384936297847776084ull, 3183590036609913253ull}},
+{{15711408779479468435ull, 2178120225701943639ull,
+ 9146112317027556393ull, 3979487545762391567ull}},
+{{16737159514815749628ull, 12890540187132184534ull,
+ 12633849225783304601ull, 2487179716101494729ull}},
+{{11698077356664911227ull, 2278117178633066956ull,
+ 1957253476946967040ull, 3108974645126868412ull}},
+{{14622596695831139034ull, 2847646473291333695ull,
+ 2446566846183708800ull, 3886218306408585515ull}},
+{{16056651962535543752ull, 1779779045807083559ull,
+ 17670005343360675664ull, 2428886441505365946ull}},
+{{15459128934742041786ull, 2224723807258854449ull,
+ 12864134642346068772ull, 3036108051881707433ull}},
+{{5488853113145388521ull, 2780904759073568062ull,
+ 2245110247650422253ull, 3795135064852134292ull}},
+{{17265591250998031538ull, 4043908483634673990ull,
+ 10626565941636289716ull, 2371959415532583932ull}},
+{{12358617026892763614ull, 5054885604543342488ull,
+ 13283207427045362145ull, 2964949269415729915ull}},
+{{15448271283615954517ull, 10930293024106566014ull,
+ 11992323265379314777ull, 3706186586769662394ull}},
+{{5043483533832583670ull, 18360648186135073519ull,
+ 12106888059289459639ull, 2316366616731038996ull}},
+{{1692668398863341683ull, 18339124214241453995ull,
+ 15133610074111824549ull, 2895458270913798745ull}},
+{{15950893553861340815ull, 9088847212519653781ull,
+ 5081954537357616975ull, 3619322838642248432ull}},
+{{6103558887044512307ull, 6749372997222179323ull,
+ 6352443171697021219ull, 4524153548302810540ull}},
+{{1508881295189126240ull, 1912515114050168125ull,
+ 13193649019165414070ull, 2827595967689256587ull}},
+{{6497787637413795704ull, 11614015929417485964ull,
+ 11880375255529379683ull, 3534494959611570734ull}},
+{{8122234546767244630ull, 9905833893344469551ull,
+ 5627097032556948796ull, 4418118699514463418ull}},
+{{11993925619370609750ull, 15414518220195069277ull,
+ 8128621663775480901ull, 2761324187196539636ull}},
+{{1157348968931098475ull, 5433089719961672885ull,
+ 10160777079719351127ull, 3451655233995674545ull}},
+{{6058372229591260998ull, 2179676131524703202ull,
+ 17312657368076576813ull, 4314569042494593181ull}},
+{{8398168661921926028ull, 3668140591416633453ull,
+ 13126253864261554460ull, 2696605651559120738ull}},
+{{15109396845829795439ull, 4585175739270791816ull,
+ 7184445293472167267ull, 3370757064448900923ull}},
+{{440001983577692682ull, 1119783655661101867ull, 4368870598412821180ull,
+ 4213446330561126154ull}},
+{{16415902304231915591ull, 9923236821642964474ull,
+ 7342230142435401141ull, 2633403956600703846ull}},
+{{11296505843435118680ull, 17015732045481093497ull,
+ 18401159714899027234ull, 3291754945750879807ull}},
+{{285574249011734638ull, 12046293019996591064ull,
+ 18389763625196396139ull, 4114693682188599759ull}},
+{{178483905632334149ull, 5223090128284175463ull,
+ 18411131293388829443ull, 2571683551367874849ull}},
+{{14058162937322581398ull, 1917176641927831424ull,
+ 9178856061453873092ull, 3214604439209843562ull}},
+{{17572703671653226747ull, 2396470802409789280ull,
+ 2250198039962565557ull, 4018255549012304453ull}},
+{{10982939794783266717ull, 3803637260719812252ull,
+ 3712216784190297425ull, 2511409718132690283ull}},
+{{13728674743479083397ull, 9366232594327153219ull, 28584961810483877ull,
+ 3139262147665862854ull}},
+{{12549157410921466342ull, 16319476761336329428ull,
+ 9259103239117880654ull, 3924077684582328567ull}},
+{{17066595418680692272ull, 5587986957407817988ull,
+ 12704468552089757265ull, 2452548552863955354ull}},
+{{2886500199641313723ull, 11596669715187160390ull,
+ 6657213653257420773ull, 3065685691079944193ull}},
+{{12831497286406417962ull, 660779088701786775ull,
+ 12933203084999163871ull, 3832107113849930241ull}},
+{{14937214831645093083ull, 7330515958079698590ull,
+ 1165722900483395563ull, 2395066946156206401ull}},
+{{9448146502701590545ull, 4551458929172235334ull,
+ 6068839644031632358ull, 2993833682695258001ull}},
+{{2586811091522212373ull, 14912695698320069976ull,
+ 12197735573466928351ull, 3742292103369072501ull}},
+{{1616756932201382733ull, 16237963839091125591ull,
+ 9929427742630524171ull, 2338932564605670313ull}},
+{{15856004220533892129ull, 15685768780436519084ull,
+ 17023470696715543118ull, 2923665705757087891ull}},
+{{1373261201957813545ull, 10383838938690873048ull,
+ 16667652352467040994ull, 3654582132196359864ull}},
+{{1716576502447266931ull, 3756426636508815502ull,
+ 2387821366874249627ull, 4568227665245449831ull}},
+{{14907918369311705544ull, 41923638604315736ull, 8409917381937487873ull,
+ 2855142290778406144ull}},
+{{188153887930080314ull, 4664090566682782575ull,
+ 10512396727421859841ull, 3568927863473007680ull}},
+{{14070250415194764104ull, 10441799226780866122ull,
+ 13140495909277324801ull, 4461159829341259600ull}},
+{{13405592527924115469ull, 18055339562806511086ull,
+ 8212809943298328000ull, 2788224893338287250ull}},
+{{7533618623050368528ull, 4122430379798587242ull,
+ 1042640392268134193ull, 3485281116672859063ull}},
+{{193651241958184852ull, 9764723993175621957ull,
+ 15138358545617331453ull, 4356601395841073828ull}},
+{{2426875035437559485ull, 8408795504948457675ull, 238102054156056350ull,
+ 2722875872400671143ull}},
+{{16868651849579113068ull, 1287622344330796285ull,
+ 14132685622977234150ull, 3403594840500838928ull}},
+{{7250756756691727623ull, 10832899967268271165ull,
+ 17665857028721542687ull, 4254493550626048660ull}},
+{{6837565982146023717ull, 13688091507183751334ull,
+ 1817788606096188371ull, 2659058469141280413ull}},
+{{17770329514537305454ull, 12498428365552301263ull,
+ 6883921776047623368ull, 3323823086426600516ull}},
+{{17601225874744243913ull, 15623035456940376579ull,
+ 8604902220059529210ull, 4154778858033250645ull}},
+{{8694923162501458494ull, 14376083179015123266ull,
+ 7683906896750899708ull, 2596736786270781653ull}},
+{{1645281916272047309ull, 17970103973768904083ull,
+ 14216569639366012539ull, 3245920982838477066ull}},
+{{15891660450622222848ull, 17850943948783742199ull,
+ 8547340012352739866ull, 4057401228548096333ull}},
+{{16849816809279971136ull, 15768525986417226778ull,
+ 7647930516934156368ull, 2535875767842560208ull}},
+{{11838898974745188112ull, 1263913409311981857ull,
+ 9559913146167695461ull, 3169844709803200260ull}},
+{{963565663149321428ull, 6191577780067365226ull,
+ 11949891432709619326ull, 3962305887254000325ull}},
+{{5213914557895713797ull, 17704794167824266978ull,
+ 9774525154657206030ull, 2476441179533750203ull}},
+{{15740765234224418054ull, 12907620672925557914ull,
+ 7606470424894119634ull, 3095551474417187754ull}},
+{{10452584505925746759ull, 6911153804302171585ull,
+ 284715994262873735ull, 3869439343021484693ull}},
+{{18062080362272061485ull, 11237000155329939096ull,
+ 2483790505627990036ull, 2418399589388427933ull}},
+{{4130856379130525240ull, 14046250194162423871ull,
+ 7716424150462375449ull, 3022999486735534916ull}},
+{{551884455485768646ull, 3722754687420866127ull, 9645530188077969312ull,
+ 3778749358419418645ull}},
+{{7262456812319687260ull, 2326721679638041329ull,
+ 8334299376762424772ull, 2361718349012136653ull}},
+{{13689757033826996978ull, 2908402099547551661ull,
+ 15029560239380418869ull, 2952147936265170816ull}},
+{{3277138237001582511ull, 8247188642861827481ull, 340206225515971970ull,
+ 3690184920331463521ull}},
+{{13577426444194458830ull, 9766178920216030079ull,
+ 11741843937015952241ull, 2306365575207164700ull}},
+{{12360097036815685633ull, 16819409668697425503ull,
+ 14677304921269940301ull, 2882956969008955875ull}},
+{{10838435277592219137ull, 7189204030589618167ull,
+ 13734945133160037473ull, 3603696211261194844ull}},
+{{8936358078562886017ull, 13598191056664410613ull,
+ 17168681416450046841ull, 4504620264076493555ull}},
+{{7891066808315497713ull, 1581340382774174777ull,
+ 8424582876067585324ull, 2815387665047808472ull}},
+{{14475519528821760045ull, 1976675478467718471ull,
+ 10530728595084481655ull, 3519234581309760590ull}},
+{{13482713392599812152ull, 16305902403366811801ull,
+ 3940038707000826260ull, 4399043226637200738ull}},
+{{1509166842733800739ull, 967816965249481568ull, 7074210210302904317ull,
+ 2749402016648250461ull}},
+{{1886458553417250924ull, 5821457224989239864ull,
+ 13454448781306018300ull, 3436752520810313076ull}},
+{{2358073191771563655ull, 7276821531236549830ull,
+ 16818060976632522875ull, 4295940651012891345ull}},
+{{15308853800139390996ull, 2242170447809149691ull,
+ 3593759082754244941ull, 2684962906883057091ull}},
+{{14524381231746850841ull, 7414399078188825018ull,
+ 18327256908724969888ull, 3356203633603821363ull}},
+{{8932104502828787743ull, 9267998847736031273ull,
+ 18297385117478824456ull, 4195254542004776704ull}},
+{{17111780360336462100ull, 5792499279835019545ull,
+ 11435865698424265285ull, 2622034088752985440ull}},
+{{7554667395138413913ull, 11852310118221162336ull,
+ 14294832123030331606ull, 3277542610941231800ull}},
+{{9443334243923017391ull, 5592015610921677112ull,
+ 17868540153787914508ull, 4096928263676539750ull}},
+{{5902083902451885869ull, 12718381793680824003ull,
+ 6556151577690058663ull, 2560580164797837344ull}},
+{{2765918859637469433ull, 11286291223673642100ull,
+ 8195189472112573329ull, 3200725205997296680ull}},
+{{3457398574546836791ull, 272805974309888913ull,
+ 10243986840140716662ull, 4000906507496620850ull}},
+{{13690089155160242754ull, 14005561789225844282ull,
+ 11014177793515335817ull, 2500566567185388031ull}},
+{{7889239407095527635ull, 3671894181250141641ull,
+ 9156036223466781868ull, 3125708208981735039ull}},
+{{14473235277296797447ull, 4589867726562677051ull,
+ 6833359260906089431ull, 3907135261227168799ull}},
+{{6739929039096804453ull, 9786196356742755013ull,
+ 11188378565707387750ull, 2441959538266980499ull}},
+{{13036597317298393470ull, 3009373409073667958ull,
+ 9373787188706846784ull, 3052449422833725624ull}},
+{{7072374609768216029ull, 3761716761342084948ull,
+ 11717233985883558480ull, 3815561778542157030ull}},
+{{13643606167959910826ull, 2351072975838803092ull,
+ 2711585222749836146ull, 2384726111588848144ull}},
+{{17054507709949888533ull, 12162213256653279673ull,
+ 3389481528437295182ull, 2980907639486060180ull}},
+{{7483076582155196954ull, 5979394533961823784ull,
+ 4236851910546618978ull, 3726134549357575225ull}},
+{{4676922863846998096ull, 8348807602153527769ull,
+ 14177247490160106621ull, 2328834093348484515ull}},
+{{10457839598236135524ull, 15047695521119297615ull,
+ 13109873344272745372ull, 2911042616685605644ull}},
+{{8460613479367781501ull, 362875327689570403ull,
+ 16387341680340931716ull, 3638803270857007055ull}},
+{{5964080830782338973ull, 453594159611963004ull,
+ 15872491081998776741ull, 4548504088571258819ull}},
+{{12950922556093737666ull, 2589339358971170829ull,
+ 7614463917035541511ull, 2842815055357036762ull}},
+{{2353595139835008371ull, 17071732253996127249ull,
+ 294707859439651080ull, 3553518819196295953ull}},
+{{7553679943221148367ull, 2892921243785607445ull,
+ 4980070842726951755ull, 4441898523995369941ull}},
+{{7026892973726911682ull, 17948976841861862317ull,
+ 5418387285918038798ull, 2776186577497106213ull}},
+{{13395302235586027506ull, 13212849015472552088ull,
+ 11384670125824936402ull, 3470233221871382766ull}},
+{{16744127794482534382ull, 7292689232485914302ull,
+ 5007465620426394695ull, 4337791527339228458ull}},
+{{5853393853124196085ull, 11475459797944778295ull,
+ 7741352031193884588ull, 2711119704587017786ull}},
+{{2705056297977857202ull, 14344324747430972869ull,
+ 453318002137579927ull, 3388899630733772233ull}},
+{{7993006390899709407ull, 13318719915861328182ull,
+ 5178333521099362813ull, 4236124538417215291ull}},
+{{383942975884930475ull, 10630042956627024066ull, 930615441473407806ull,
+ 2647577836510759557ull}},
+{{9703300756710938902ull, 4064181658929004274ull,
+ 5774955320269147662ull, 3309472295638449446ull}},
+{{2905753909033897819ull, 14303599110516031151ull,
+ 16442066187191210385ull, 4136840369548061807ull}},
+{{8733625220787267993ull, 2022220416431437613ull,
+ 17193820394635588347ull, 2585525230967538629ull}},
+{{15528717544411472896ull, 16362833575821460728ull,
+ 7657217438012321721ull, 3231906538709423287ull}},
+{{964152856804789503ull, 6618483914494662199ull, 4959835779088014248ull,
+ 4039883173386779109ull}},
+{{7520124563144075296ull, 4136552446559163874ull,
+ 5405740371143702857ull, 2524926983366736943ull}},
+{{176783667075318312ull, 9782376576626342747ull, 2145489445502240667ull,
+ 3156158729208421179ull}},
+{{14056037639126311601ull, 7616284702355540529ull,
+ 16516919862159964546ull, 3945198411510526473ull}},
+{{1867494496812862895ull, 9371863957399600735ull,
+ 3405545886208895985ull, 2465749007194079046ull}},
+{{16169426176298242331ull, 16326515965176888822ull,
+ 13480304394615895789ull, 3082186258992598807ull}},
+{{10988410683518027105ull, 6573086901188947316ull,
+ 12238694474842481833ull, 3852732823740748509ull}},
+{{16091128714053542749ull, 15637394359311561832ull,
+ 9955027055990245097ull, 2407958014837967818ull}},
+{{1667166818857376820ull, 5711684893857288579ull,
+ 3220411783133030564ull, 3009947518547459773ull}},
+{{15919016578853884737ull, 7139606117321610723ull,
+ 8637200747343676109ull, 3762434398184324716ull}},
+{{7643542352569984009ull, 6768096832539700654ull,
+ 14621622503944573376ull, 2351521498865202947ull}},
+{{331055903857704203ull, 8460121040674625818ull,
+ 13665342111503328816ull, 2939401873581503684ull}},
+{{9637191916676906061ull, 10575151300843282272ull,
+ 17081677639379161020ull, 3674252341976879605ull}},
+{{12046489895846132577ull, 13218939126054102840ull,
+ 7517038993941787563ull, 4592815427471099507ull}},
+{{7529056184903832861ull, 5955993944570120323ull,
+ 2392306361999923275ull, 2870509642169437192ull}},
+{{4799634212702403172ull, 2833306412285262500ull,
+ 2990382952499904094ull, 3588137052711796490ull}},
+{{5999542765878003964ull, 12765005052211353933ull,
+ 12961350727479655925ull, 4485171315889745612ull}},
+{{6055557237887446430ull, 10283971166845790160ull,
+ 17324216241529560761ull, 2803232072431091007ull}},
+{{7569446547359308037ull, 17466649976984625604ull,
+ 17043584283484563047ull, 3504040090538863759ull}},
+{{9461808184199135046ull, 17221626452803394101ull,
+ 16692794335928315905ull, 4380050113173579699ull}},
+{{8219473124338153356ull, 3845987505361039457ull,
+ 8127153450741503489ull, 2737531320733487312ull}},
+{{14886027423850079599ull, 9419170400128687225ull,
+ 10158941813426879361ull, 3421914150916859140ull}},
+{{4772476224530435787ull, 16385649018588246936ull,
+ 12698677266783599201ull, 4277392688646073925ull}},
+{{2982797640331522367ull, 3323501608976572479ull,
+ 10242516300953443453ull, 2673370430403796203ull}},
+{{17563555105696566671ull, 8766063029648103502ull,
+ 8191459357764416412ull, 3341713038004745254ull}},
+{{12731071845265932530ull, 10957578787060129378ull,
+ 1015952160350744707ull, 4177141297505931568ull}},
+{{12568605921718595735ull, 4542643732698886909ull,
+ 634970100219215442ull, 2610713310941207230ull}},
+{{1875699346866080957ull, 14901676702728384445ull,
+ 10017084662128795110ull, 3263391638676509037ull}},
+{{6956310202009989100ull, 9403723841555704748ull,
+ 17133041846088381792ull, 4079239548345636296ull}},
+{{13571065913111018996ull, 5877327400972315467ull,
+ 10708151153805238620ull, 2549524717716022685ull}},
+{{12352146372961385841ull, 7346659251215394334ull,
+ 17996874960683936179ull, 3186905897145028356ull}},
+{{6216810929346956493ull, 4571638045591855014ull,
+ 4049349627145368608ull, 3983632371431285446ull}},
+{{17720564886124011520ull, 2857273778494909383ull,
+ 16365901572248019092ull, 2489770232144553403ull}},
+{{17539020089227626496ull, 3571592223118636729ull,
+ 15845690946882635961ull, 3112212790180691754ull}},
+{{8088717056252369408ull, 9076176297325683816ull,
+ 10583741646748519143ull, 3890265987725864693ull}},
+{{5055448160157730880ull, 12590139213469634241ull,
+ 8920681538431518416ull, 2431416242328665433ull}},
+{{10930996218624551504ull, 15737674016837042801ull,
+ 15762537941466785924ull, 3039270302910831791ull}},
+{{18275431291708077284ull, 1225348447336751885ull,
+ 15091486408406094502ull, 3799087878638539739ull}},
+{{13727987566531242255ull, 14600900834867633640ull,
+ 7126335996040115111ull, 2374429924149087337ull}},
+{{17159984458164052818ull, 13639440025157154146ull,
+ 13519606013477531793ull, 2968037405186359171ull}},
+{{12226608535850290215ull, 3214241976164278971ull,
+ 12287821498419526838ull, 3710046756482948964ull}},
+{{5335787325692737432ull, 15843959290384838069ull,
+ 16903260473366980081ull, 2318779222801843102ull}},
+{{11281420175543309694ull, 5969891057698883874ull,
+ 11905703554853949294ull, 2898474028502303878ull}},
+{{4878403182574361310ull, 16685735858978380651ull,
+ 5658757406712660809ull, 3623092535627879848ull}},
+{{1486317959790563733ull, 7022111768440812102ull,
+ 7073446758390826012ull, 4528865669534849810ull}},
+{{14764006780151266045ull, 13612191892130283371ull,
+ 9032590242421654161ull, 2830541043459281131ull}},
+{{13843322456761694653ull, 3180181809880690502ull,
+ 6679051784599679798ull, 3538176304324101414ull}},
+{{8080781034097342508ull, 13198599299205638936ull,
+ 17572186767604375555ull, 4422720380405126767ull}},
+{{5050488146310839068ull, 5943281552789830383ull,
+ 17900145757393816578ull, 2764200237753204229ull}},
+{{1701424164461160930ull, 16652473977842063787ull,
+ 8540124141460107010ull, 3455250297191505287ull}},
+{{15961838260858614875ull, 11592220435447803925ull,
+ 6063469158397745859ull, 4319062871489381609ull}},
+{{12281991922250328249ull, 4939294762941183501ull,
+ 15318883270067060922ull, 2699414294680863505ull}},
+{{1517431847530746599ull, 15397490490531255185ull,
+ 5313546032301662440ull, 3374267868351079382ull}},
+{{6508475827840821153ull, 800119039454517365ull,
+ 15865304577231853859ull, 4217834835438849227ull}},
+{{6373640401614207173ull, 16640975464154931017ull,
+ 7609972351556214709ull, 2636146772149280767ull}},
+{{12578736520445146870ull, 6966161274911500059ull,
+ 4900779421017880483ull, 3295183465186600959ull}},
+{{11111734632129045683ull, 4096015575211987170ull,
+ 1514288257844962700ull, 4118979331483251199ull}},
+{{11556520163508041456ull, 11783381771362267789ull,
+ 7863959188794183543ull, 2574362082177031999ull}},
+{{610592149102888108ull, 10117541195775446833ull,
+ 5218262967565341525ull, 3217952602721289999ull}},
+{{5374926204805998039ull, 17258612513146696445ull,
+ 1911142691029289002ull, 4022440753401612499ull}},
+{{5665171887217442726ull, 15398318839144073182ull,
+ 17335365246389163290ull, 2514025470876007811ull}},
+{{16304836895876579216ull, 10024526512075315669ull,
+ 17057520539559066209ull, 3142531838595009764ull}},
+{{6545988064563560308ull, 17142344158521532491ull,
+ 2875156600739281145ull, 3928164798243762206ull}},
+{{1785399531138531240ull, 3796436071434875951ull,
+ 15632030930744214428ull, 2455102998902351378ull}},
+{{16066807469205327762ull, 4745545089293594938ull,
+ 10316666626575492227ull, 3068878748627939223ull}},
+{{10860137299651883895ull, 1320245343189605769ull,
+ 8284147264791977380ull, 3836098435784924029ull}},
+{{18316800858350897195ull, 10048525376348279413ull,
+ 7483435049708679814ull, 2397561522365577518ull}},
+{{9060943017656457781ull, 3337284683580573459ull, 130921775281073960ull,
+ 2996951902956971898ull}},
+{{6714492753643184322ull, 4171605854475716824ull,
+ 9387024255956118258ull, 3746189878696214872ull}},
+{{4196557971026990202ull, 7218939677474710919ull,
+ 5866890159972573911ull, 2341368674185134295ull}},
+{{634011445356349848ull, 4411988578416000745ull, 2721926681538329485ull,
+ 2926710842731417869ull}},
+{{5404200325122825214ull, 10126671741447388835ull,
+ 8014094370350299760ull, 3658388553414272336ull}},
+{{2143564387976143613ull, 12658339676809236044ull,
+ 10017617962937874700ull, 4572985691767840420ull}},
+{{10563099779339865566ull, 17134834334860548335ull,
+ 15484383263690947495ull, 2858116057354900262ull}},
+{{8592188705747444054ull, 16806856900148297515ull,
+ 10132107042758908561ull, 3572645071693625328ull}},
+{{6128549863756917163ull, 7173513069903208182ull,
+ 12665133803448635702ull, 4465806339617031660ull}},
+{{17665401720130236939ull, 18318503723971668825ull,
+ 17139080664010173121ull, 2791128962260644787ull}},
+{{8246694094880632462ull, 9063071599682422320ull,
+ 16812164811585328498ull, 3488911202825805984ull}},
+{{10308367618600790577ull, 2105467462748252092ull,
+ 2568461940772109007ull, 4361139003532257481ull}},
+{{15666101798480269919ull, 8233446191858739413ull,
+ 13134503759051037889ull, 2725711877207660925ull}},
+{{5747569192818173686ull, 14903493758250812171ull,
+ 2583071643531633649ull, 3407139846509576157ull}},
+{{2572775472595329204ull, 4794309142531351502ull,
+ 7840525572841929966ull, 4258924808136970196ull}},
+{{15443042725654244465ull, 16831501269364258400ull,
+ 14123700519880982036ull, 2661828005085606372ull}},
+{{857059333358253965ull, 2592632512995771385ull,
+ 17654625649851227546ull, 3327285006357007965ull}},
+{{5683010185125205360ull, 12464162678099490039ull,
+ 8233224007031870720ull, 4159106257946259957ull}},
+{{10469410393344335206ull, 7790101673812181274ull,
+ 7451608013608613152ull, 2599441411216412473ull}},
+{{3863390954825643199ull, 9737627092265226593ull,
+ 13926196035438154344ull, 3249301764020515591ull}},
+{{9440924711959441903ull, 12172033865331533241ull,
+ 12796059025870305026ull, 4061627205025644489ull}},
+{{17429792991043120950ull, 12219207184259596179ull,
+ 1080007863527858785ull, 2538517003141027806ull}},
+{{17175555220376513283ull, 1438950925042331512ull,
+ 10573381866264599290ull, 3173146253926284757ull}},
+{{3022699951761089987ull, 11022060693157690199ull,
+ 17828413351258137016ull, 3966432817407855946ull}},
+{{8806716497491763098ull, 6888787933223556374ull,
+ 15754444362963723539ull, 2479020510879909966ull}},
+{{1785023585009928065ull, 3999298898102057564ull,
+ 10469683416849878616ull, 3098775638599887458ull}},
+{{2231279481262410081ull, 4999123622627571955ull,
+ 3863732234207572462ull, 3873469548249859323ull}},
+{{17535450740284863965ull, 16959510319424396183ull,
+ 108989637166038836ull, 2420918467656162077ull}},
+{{17307627406928692052ull, 2752643825570943613ull,
+ 4747923064884936450ull, 3026148084570202596ull}},
+{{7799476203378701353ull, 12664176818818455325ull,
+ 5934903831106170562ull, 3782685105712753245ull}},
+{{7180515636325382298ull, 12526796530188922482ull,
+ 6015157903655050553ull, 2364178191070470778ull}},
+{{18199016582261503680ull, 1823437607453989390ull,
+ 16742319416423589000ull, 2955222738838088472ull}},
+{{13525398690972103792ull, 2279297009317486738ull,
+ 2481155196819934634ull, 3694028423547610591ull}},
+{{13065060200284952774ull, 6036246649250817115ull,
+ 8468251025653541002ull, 2308767764717256619ull}},
+{{11719639231928803063ull, 16768680348418297202ull,
+ 5973627763639538348ull, 2885959705896570774ull}},
+{{5426177003056228021ull, 2514106361813319887ull,
+ 16690406741404198744ull, 3607449632370713467ull}},
+{{2171035235392897122ull, 3142632952266649859ull,
+ 16251322408327860526ull, 4509312040463391834ull}},
+{{17497798086616418366ull, 15799203650448819873ull,
+ 14768762523632300732ull, 2818320025289619896ull}},
+{{8037189552988359245ull, 1302260489351473226ull, 14209080830824300ull,
+ 3522900031612024871ull}},
+{{823114904380673248ull, 1627825611689341533ull,
+ 13852819406320694087ull, 4403625039515031088ull}},
+{{2820289824451614732ull, 7934920034946920314ull,
+ 8658012128950433804ull, 2752265649696894430ull}},
+{{12748734317419294223ull, 9918650043683650392ull,
+ 1599143124333266447ull, 3440332062121118038ull}},
+{{15935917896774117779ull, 7786626536177175086ull,
+ 11222300942271358867ull, 4300415077651397547ull}},
+{{5348262667056435708ull, 2560798575897040477ull,
+ 4708095079705905340ull, 2687759423532123467ull}},
+{{11297014352247932539ull, 3200998219871300596ull,
+ 1273432831204993771ull, 3359699279415154334ull}},
+{{14121267940309915673ull, 17836305830121289457ull,
+ 10815163075861018021ull, 4199624099268942917ull}},
+{{1908263435052615440ull, 13453534153039499863ull,
+ 9065319931626830215ull, 2624765062043089323ull}},
+{{16220387349097933012ull, 12205231672871986924ull,
+ 6719963896106149865ull, 3280956327553861654ull}},
+{{1828740112662864649ull, 1421481535807819944ull,
+ 17623326906987463140ull, 4101195409442327067ull}},
+{{1142962570414290406ull, 10111797996734663273ull,
+ 8708736307653470510ull, 2563247130901454417ull}},
+{{6040389231445250911ull, 3416375459063553283ull,
+ 15497606402994226042ull, 3204058913626818021ull}},
+{{2938800520879175735ull, 13493841360684217412ull,
+ 5536949948460618840ull, 4005073642033522527ull}},
+{{11060122362404260642ull, 8433650850427635882ull,
+ 10378122745428968631ull, 2503171026270951579ull}},
+{{4601780916150549995ull, 5930377544607156949ull,
+ 8360967413358822885ull, 3128963782838689474ull}},
+{{10363912163615575397ull, 12024657949186334090ull,
+ 1227837229843752798ull, 3911204728548361843ull}},
+{{11089131120687122527ull, 2903725199814070902ull,
+ 16908299333148203163ull, 2444502955342726151ull}},
+{{4638041864004127351ull, 17464714555049752340ull,
+ 16523688148007866049ull, 3055628694178407689ull}},
+{{5797552330005159189ull, 7995835138530026713ull,
+ 6819552129727668850ull, 3819535867723009612ull}},
+{{15152685252321694253ull, 9609082980008654599ull,
+ 13485592117934568839ull, 2387209917326881007ull}},
+{{14329170546974729912ull, 7399667706583430345ull,
+ 12245304128990823145ull, 2984012396658601259ull}},
+{{4076405128436248678ull, 13861270651656675836ull,
+ 10694944142811141027ull, 3730015495823251574ull}},
+{{11771125242127431232ull, 6357451148071728445ull,
+ 2072654070829575238ull, 2331259684889532234ull}},
+{{878848497377125328ull, 17170185971944436365ull,
+ 11814189625391744855ull, 2914074606111915292ull}},
+{{5710246640148794564ull, 16851046446503157552ull,
+ 14767737031739681069ull, 3642593257639894115ull}},
+{{7137808300185993205ull, 7228750002846783228ull,
+ 13847985271247213433ull, 4553241572049867644ull}},
+{{13684502224471021561ull, 16047183797847709277ull,
+ 17878362831384284203ull, 2845775982531167277ull}},
+{{3270569725306613239ull, 15447293728882248693ull,
+ 8512895483948191542ull, 3557219978163959097ull}},
+{{8699898175060654453ull, 10085745124248035058ull,
+ 15252805373362627332ull, 4446524972704948871ull}},
+{{10049122377840296937ull, 15526962739509797719ull,
+ 16450532385992723938ull, 2779078107940593044ull}},
+{{7949716953872983268ull, 10185331387532471341ull,
+ 2116421408781353307ull, 3473847634925741306ull}},
+{{14548832210768616988ull, 8119978215988201272ull,
+ 11868898797831467442ull, 4342309543657176632ull}},
+{{9093020131730385618ull, 9686672403420013699ull,
+ 7418061748644667151ull, 2713943464785735395ull}},
+{{6754589146235594118ull, 7496654485847629220ull,
+ 4660891167378446035ull, 3392429330982169244ull}},
+{{8443236432794492648ull, 4759132088882148621ull,
+ 5826113959223057544ull, 4240536663727711555ull}},
+{{7582865779710251857ull, 2974457555551342888ull,
+ 1335478215300717013ull, 2650335414829819722ull}},
+{{9478582224637814821ull, 8329757962866566514ull,
+ 10892719805980672074ull, 3312919268537274652ull}},
+{{2624855743942492718ull, 1188825416728432335ull,
+ 13615899757475840093ull, 4141149085671593315ull}},
+{{8558063867605139805ull, 3048858894668964161ull,
+ 6204094339208706106ull, 2588218178544745822ull}},
+{{15309265852933812660ull, 13034445655190981009ull,
+ 16978489960865658440ull, 3235272723180932277ull}},
+{{5301524260885102113ull, 16293057068988726262ull,
+ 7388054395799909338ull, 4044090903976165347ull}},
+{{17148510718335352533ull, 14794846686545341817ull,
+ 2311690988161249384ull, 2527556814985103342ull}},
+{{7600580342637026954ull, 46814284472125656ull, 12112985772056337539ull,
+ 3159446018731379177ull}},
+{{9500725428296283693ull, 13893575910872320782ull,
+ 1306174159788258211ull, 3949307523414223972ull}},
+{{1326267374257789404ull, 6377641935081506537ull,
+ 10039730886722437190ull, 2468317202133889982ull}},
+{{6269520236249624659ull, 17195424455706658979ull,
+ 3326291571548270679ull, 3085396502667362478ull}},
+{{3225214276884642919ull, 16882594551205935820ull,
+ 13381236501290114157ull, 3856745628334203097ull}},
+{{11239130959907677633ull, 12857464603717403839ull,
+ 1445743785665239492ull, 2410466017708876936ull}},
+{{9437227681457209137ull, 16071830754646754799ull,
+ 1807179732081549365ull, 3013082522136096170ull}},
+{{7184848583394123517ull, 6254730388026279787ull,
+ 11482346701956712515ull, 3766353152670120212ull}},
+{{2184687355407633246ull, 1603363483302730915ull,
+ 16399838725577721130ull, 2353970720418825132ull}},
+{{16565917249541705270ull, 11227576390983189451ull,
+ 2053054333262599796ull, 2942463400523531416ull}},
+{{16095710543499743683ull, 14034470488728986814ull,
+ 2566317916578249745ull, 3678079250654414270ull}},
+{{10896266142519903796ull, 3708030055629069806ull,
+ 12431269432577587990ull, 4597599063318017837ull}},
+{{2198480320647551969ull, 16152576840050332341ull,
+ 10075386404574686445ull, 2873499414573761148ull}},
+{{7359786419236827865ull, 6355662994780751714ull,
+ 12594233005718358057ull, 3591874268217201435ull}},
+{{18423105060900810639ull, 12556264761903327546ull,
+ 11131105238720559667ull, 4489842835271501794ull}},
+{{16126126681490394553ull, 5541822466975885764ull,
+ 11568626792627737696ull, 2806151772044688621ull}},
+{{1710914278153441576ull, 6927278083719857206ull, 625725435502508408ull,
+ 3507689715055860777ull}},
+{{11362014884546577777ull, 8659097604649821507ull,
+ 5393842812805523414ull, 4384612143819825971ull}},
+{{4795416293627917159ull, 800249984478750538ull, 1065308748789758182ull,
+ 2740382589887391232ull}},
+{{15217642403889672257ull, 10223684517453213980ull,
+ 1331635935987197727ull, 3425478237359239040ull}},
+{{575308931152538705ull, 8167919628389129572ull, 1664544919983997159ull,
+ 4281847796699048800ull}},
+{{9582940118825112499ull, 12022478795384287838ull,
+ 1040340574989998224ull, 2676154872936905500ull}},
+{{2755303111676614815ull, 15028098494230359798ull,
+ 1300425718737497780ull, 3345193591171131875ull}},
+{{12667500926450544327ull, 338379044078398131ull,
+ 15460590203704035938ull, 4181491988963914843ull}},
+{{5611345069817896252ull, 4823172920976386736ull,
+ 7357025868101328509ull, 2613432493102446777ull}},
+{{7014181337272370315ull, 10640652169647871324ull,
+ 13807968353554048540ull, 3266790616378058471ull}},
+{{8767726671590462894ull, 13300815212059839155ull,
+ 12648274423515172771ull, 4083488270472573089ull}},
+{{3173986160530345357ull, 6007166498323705520ull, 987642487055901126ull,
+ 2552180169045358181ull}},
+{{3967482700662931696ull, 16732330159759407708ull,
+ 5846239127247264311ull, 3190225211306697726ull}},
+{{4959353375828664620ull, 16303726681271871731ull,
+ 16531170945913856197ull, 3987781514133372157ull}},
+{{793752850679221436ull, 12495672185008613784ull,
+ 12637824850409854075ull, 2492363446333357598ull}},
+{{992191063349026795ull, 11007904212833379326ull,
+ 6573909026157541786ull, 3115454307916696998ull}},
+{{10463610866041059301ull, 4536508229186948349ull,
+ 17440758319551703041ull, 3894317884895871247ull}},
+{{8845599800489356015ull, 14364532689310312478ull,
+ 17818002977360896256ull, 2433948678059919529ull}},
+{{1833627713756919211ull, 17955665861637890598ull,
+ 8437445666418956608ull, 3042435847574899412ull}},
+{{11515406679050924822ull, 3997838253337811631ull,
+ 10546807083023695761ull, 3803044809468624265ull}},
+{{14114658202047909870ull, 14027863954404602029ull,
+ 18120969472958279610ull, 2376903005917890165ull}},
+{{3808264697277723625ull, 8311457906150976729ull,
+ 8816153785915685801ull, 2971128757397362707ull}},
+{{9372016890024542435ull, 15001008401116108815ull,
+ 6408506213967219347ull, 3713910946746703384ull}},
+{{12775039583906420878ull, 7069787241483874057ull,
+ 4005316383729512092ull, 2321194341716689615ull}},
+{{2133741424600862386ull, 8837234051854842572ull, 394959461234502211ull,
+ 2901492927145862019ull}},
+{{2667176780751077982ull, 6434856546391165311ull,
+ 14328757381825291476ull, 3626866158932327523ull}},
+{{17169029031221011189ull, 8043570682988956638ull,
+ 13299260708854226441ull, 4533582698665409404ull}},
+{{6118957126085744089ull, 16556446722936567659ull,
+ 17535409979888667333ull, 2833489186665880877ull}},
+{{3037010389179792208ull, 6860500348388545862ull,
+ 8084204419578670455ull, 3541861483332351097ull}},
+{{13019635023329516067ull, 3963939417058294423ull,
+ 14716941542900725973ull, 4427326854165438871ull}},
+{{15054800917222029398ull, 4783305144875127966ull,
+ 16115617491954035589ull, 2767079283853399294ull}},
+{{9595129109672760940ull, 10590817449521297862ull,
+ 10921149828087768678ull, 3458849104816749118ull}},
+{{2770539350236175367ull, 4015149775046846520ull,
+ 4428065248254935040ull, 4323561381020936398ull}},
+{{1731587093897609604ull, 2509468609404279075ull,
+ 16602598835441498112ull, 2702225863138085248ull}},
+{{15999541922654175717ull, 3136835761755348843ull,
+ 2306504470592321024ull, 3377782328922606561ull}},
+{{15387741384890331743ull, 3921044702194186054ull,
+ 7494816606667789184ull, 4222227911153258201ull}},
+{{5005652347129069435ull, 2450652938871366284ull,
+ 16213475425235838000ull, 2638892444470786375ull}},
+{{6257065433911336794ull, 3063316173589207855ull,
+ 15655158263117409596ull, 3298615555588482969ull}},
+{{3209645773961783088ull, 3829145216986509819ull,
+ 5733889773614598283ull, 4123269444485603712ull}},
+{{18146929673221972094ull, 87372751402874684ull, 3583681108509123927ull,
+ 2577043402803502320ull}},
+{{4236918017817913502ull, 13944273994535757068ull,
+ 4479601385636404908ull, 3221304253504377900ull}},
+{{5296147522272391877ull, 17430342493169696335ull,
+ 5599501732045506135ull, 4026630316880472375ull}},
+{{10227621229061326779ull, 17811493085872142065ull,
+ 10417217610169523190ull, 2516643948050295234ull}},
+{{17396212554754046378ull, 13040994320485401773ull,
+ 3798149975857128180ull, 3145804935062869043ull}},
+{{7910207638160394261ull, 16301242900606752217ull,
+ 136001451394022321ull, 3932256168828586304ull}},
+{{16473094819918716173ull, 3270747785238138279ull, 85000907121263951ull,
+ 2457660105517866440ull}},
+{{15979682506471007312ull, 17923492786829836561ull,
+ 106251133901579938ull, 3072075131897333050ull}},
+{{6139545077806595428ull, 13180993946682519894ull,
+ 9356185954231750731ull, 3840093914871666312ull}},
+{{17672273728911285855ull, 5932278207462880981ull,
+ 5847616221394844207ull, 2400058696794791445ull}},
+{{8255284105856943606ull, 2803661740901213323ull,
+ 11921206295170943163ull, 3000073370993489306ull}},
+{{5707419113893791604ull, 17339635231408680366ull,
+ 5678135832108903145ull, 3750091713741861633ull}},
+{{17402195001465783465ull, 3919742991989343372ull,
+ 15078049941136534226ull, 2343807321088663520ull}},
+{{3305999678122677715ull, 14123050776841455024ull,
+ 400818352711116166ull, 2929759151360829401ull}},
+{{4132499597653347143ull, 8430441434197042972ull,
+ 5112708959316283112ull, 3662198939201036751ull}},
+{{5165624497066683929ull, 10538051792746303715ull,
+ 1779200180717965986ull, 4577748674001295939ull}},
+{{922672301452983504ull, 11197968388893827726ull,
+ 17252901177444586405ull, 2861092921250809961ull}},
+{{10376712413671005187ull, 162402430835120945ull,
+ 7731068416523569295ull, 3576366151563512452ull}},
+{{17582576535516144388ull, 14038061093826064893ull,
+ 9663835520654461618ull, 4470457689454390565ull}},
+{{13294953343911284195ull, 13385474202068678462ull,
+ 8345740209622732463ull, 2794036055908994103ull}},
+{{7395319643034329435ull, 12120156734158460174ull,
+ 5820489243601027675ull, 3492545069886242629ull}},
+{{20777516938135986ull, 10538509899270687314ull,
+ 11887297572928672498ull, 4365681337357803286ull}},
+{{4624671966513722895ull, 11198254705471567475ull,
+ 2817874964653032407ull, 2728550835848627054ull}},
+{{1169153939714765715ull, 9386132363412071440ull,
+ 12745715742671066317ull, 3410688544810783817ull}},
+{{1461442424643457144ull, 16344351472692477204ull,
+ 2097086623056669184ull, 4263360681013479772ull}},
+{{10136773552256936523ull, 10215219670432798252ull,
+ 10534051176265194048ull, 2664600425633424857ull}},
+{{12670966940321170654ull, 12769024588040997815ull,
+ 17779249988758880464ull, 3330750532041781071ull}},
+{{11227022656974075413ull, 15961280735051247269ull,
+ 17612376467521212676ull, 4163438165052226339ull}},
+{{9322732169822491085ull, 752428422552253735ull, 8701892282987063971ull,
+ 2602148853157641462ull}},
+{{7041729193850725953ull, 14775593583472480881ull,
+ 1653993316879054155ull, 3252686066447051828ull}},
+{{13413847510740795345ull, 13857805960913213197ull,
+ 2067491646098817694ull, 4065857583058814785ull}},
+{{10689497703426691043ull, 4049442707143370344ull,
+ 12821397324880230819ull, 2541160989411759240ull}},
+{{13361872129283363803ull, 450117365501825026ull,
+ 16026746656100288524ull, 3176451236764699050ull}},
+{{7478968124749428946ull, 562646706877281283ull,
+ 10810061283270584847ull, 3970564045955873813ull}},
+{{2368512068754699139ull, 7269183219439382658ull,
+ 9062131311257809481ull, 2481602528722421133ull}},
+{{12184012122798149732ull, 13698165042726616226ull,
+ 15939350157499649755ull, 3102003160903026416ull}},
+{{6006643116642911357ull, 12511020284980882379ull,
+ 1477443623165010578ull, 3877503951128783021ull}},
+{{1448308938688125646ull, 12431073696540439391ull,
+ 3229245273691825563ull, 2423439969455489388ull}},
+{{15645444228642320770ull, 10927156102248161334ull,
+ 4036556592114781954ull, 3029299961819361735ull}},
+{{10333433248948125154ull, 4435573090955425860ull,
+ 434009721716089539ull, 3786624952274202169ull}},
+{{15681767817447354029ull, 466390172633447210ull,
+ 11800471122141025722ull, 2366640595171376355ull}},
+{{10378837734954416729ull, 9806359752646584821ull,
+ 10138902884248894248ull, 2958300743964220444ull}},
+{{17585233187120408815ull, 12257949690808231026ull,
+ 12673628605311117810ull, 3697875929955275555ull}},
+{{15602456760377643413ull, 12272904575182532295ull,
+ 5615174869105754679ull, 2311172456222047222ull}},
+{{14891384932044666363ull, 10729444700550777465ull,
+ 16242340623236969157ull, 2888965570277559027ull}},
+{{4779173109773669241ull, 18023491894115859736ull,
+ 15691239760618823542ull, 3611206962846948784ull}},
+{{5973966387217086551ull, 13305992830790048862ull,
+ 1167305627063977812ull, 4514008703558685981ull}},
+{{17568787047292842807ull, 17539617556098556346ull,
+ 3035409026128680084ull, 2821255439724178738ull}},
+{{12737611772261277700ull, 3477777871413643817ull,
+ 13017633319515625914ull, 3526569299655223422ull}},
+{{2086956660044433413ull, 13570594376121830580ull,
+ 7048669612539756584ull, 4408211624569029278ull}},
+{{10527719949382546691ull, 8481621485076144112ull,
+ 18240476563119511577ull, 2755132265355643298ull}},
+{{13159649936728183364ull, 15213712874772568044ull,
+ 13577223667044613663ull, 3443915331694554123ull}},
+{{16449562420910229205ull, 14405455075038322151ull,
+ 12359843565378379175ull, 4304894164618192654ull}},
+{{17198505540709975109ull, 15920938449540033200ull,
+ 3113216209934099080ull, 2690558852886370409ull}},
+{{3051387852177917271ull, 1454428988215489885ull,
+ 8503206280845011755ull, 3363198566107963011ull}},
+{{8425920833649784492ull, 15653094290551526068ull,
+ 6017321832628876789ull, 4203998207634953764ull}},
+{{14489572557885891116ull, 12089026940808397744ull,
+ 12984198182247823801ull, 2627498879771846102ull}},
+{{18111965697357363895ull, 1276225620728333468ull,
+ 7006875690955003944ull, 3284373599714807628ull}},
+{{4193213047987153252ull, 1595282025910416836ull,
+ 8758594613693754930ull, 4105466999643509535ull}},
+{{11844130191846746591ull, 5608737284621398426ull,
+ 12391650661199678687ull, 2565916874777193459ull}},
+{{5581790702953657430ull, 2399235587349360129ull,
+ 10877877308072210455ull, 3207396093471491824ull}},
+{{11588924397119459692ull, 16834102539468863873ull,
+ 13597346635090263068ull, 4009245116839364780ull}},
+{{325548720558580452ull, 1297942050313264113ull,
+ 17721713683786190226ull, 2505778198024602987ull}},
+{{5018621919125613468ull, 10845799599746355949ull,
+ 17540456086305349878ull, 3132222747530753734ull}},
+{{10884963417334404739ull, 4333877462828169128ull,
+ 12702198071026911540ull, 3915278434413442168ull}},
+{{6803102135834002962ull, 11932045451122381513ull,
+ 7938873794391819712ull, 2447049021508401355ull}},
+{{13115563688219891607ull, 14915056813902976891ull,
+ 5311906224562386736ull, 3058811276885501694ull}},
+{{11782768591847476604ull, 197076943669169498ull,
+ 15863254817557759229ull, 3823514096106877117ull}},
+{{11975916388332060782ull, 2429016099006924888ull,
+ 12220377270187293470ull, 2389696310066798198ull}},
+{{14969895485415075977ull, 12259642160613431918ull,
+ 6052099550879341029ull, 2987120387583497748ull}},
+{{9488997319914069163ull, 1489494645484626186ull,
+ 7565124438599176287ull, 3733900484479372185ull}},
+{{10542309343373681131ull, 7848463181068973222ull,
+ 16257417820192954939ull, 2333687802799607615ull}},
+{{3954514642362325606ull, 5198892957908828624ull,
+ 15710086256813805770ull, 2917109753499509519ull}},
+{{4943143302952907007ull, 15721988234240811588ull,
+ 15025921802589869308ull, 3646387191874386899ull}},
+{{6178929128691133759ull, 1205741219091462869ull,
+ 14170716234809948732ull, 4557983989842983624ull}},
+{{6167673714645652552ull, 9976960298786940101ull,
+ 8856697646756217957ull, 2848739993651864765ull}},
+{{12321278161734453593ull, 17082886391911063030ull,
+ 15682558076872660350ull, 3560924992064830956ull}},
+{{6178225665313291183ull, 12130235953034052980ull,
+ 1156453522381273822ull, 4451156240081038696ull}},
+{{13084763077675582798ull, 2969711452218895208ull,
+ 722783451488296139ull, 2781972650050649185ull}},
+{{16355953847094478497ull, 17547197370555782722ull,
+ 5515165332787758077ull, 3477465812563311481ull}},
+{{11221570272013322313ull, 8098938657912564691ull,
+ 11505642684412085501ull, 4346832265704139351ull}},
+{{4707638410794632494ull, 7367679670409046884ull,
+ 14108555705398635294ull, 2716770166065087094ull}},
+{{5884548013493290617ull, 18432971624866084413ull,
+ 8412322594893518309ull, 3395962707581358868ull}},
+{{11967371035294001176ull, 9206156475800441804ull,
+ 10515403243616897887ull, 4244953384476698585ull}},
+{{16702978933913526543ull, 12671376825016357983ull,
+ 18101342073329030939ull, 2653095865297936615ull}},
+{{16267037648964520275ull, 11227535012843059575ull,
+ 18014991573233900770ull, 3316369831622420769ull}},
+{{15722111042778262439ull, 4811046729199048661ull,
+ 8683681411260212251ull, 4145462289528025962ull}},
+{{12132162410950107977ull, 701061196535711461ull,
+ 10038986900465020561ull, 2590913930955016226ull}},
+{{1330144958405471259ull, 5488012514097027231ull,
+ 3325361588726499893ull, 3238642413693770283ull}},
+{{15497739253289002785ull, 11471701661048671942ull,
+ 17991760041190288578ull, 4048303017117212853ull}},
+{{5074401014878238837ull, 11781499556582807868ull,
+ 13550693034957624313ull, 2530189385698258033ull}},
+{{6343001268597798546ull, 891816390446346123ull, 3103308238414866680ull,
+ 3162736732122822542ull}},
+{{3317065567319860278ull, 1114770488057932654ull,
+ 13102507334873359158ull, 3953420915153528177ull}},
+{{15908224034857076386ull, 14531789610318371620ull,
+ 1271538056654767617ull, 2470888071970955111ull}},
+{{1438535969861793867ull, 4329678957615800814ull,
+ 15424480626100623234ull, 3088610089963693888ull}},
+{{11021541999182018141ull, 14635470733874526825ull,
+ 833856708916227426ull, 3860762612454617361ull}},
+{{18417678795557231098ull, 13758855227098967169ull,
+ 12050375489141111901ull, 2412976632784135850ull}},
+{{9187040439164375161ull, 3363510978591545250ull,
+ 5839597324571614069ull, 3016220790980169813ull}},
+{{2260428512100693143ull, 8816074741666819467ull,
+ 11911182674141905490ull, 3770275988725212266ull}},
+{{17553668884558790879ull, 10121732731969150070ull,
+ 12056175189766078835ull, 2356422492953257666ull}},
+{{12718714068843712790ull, 8040479896534049684ull,
+ 5846846950352822736ull, 2945528116191572083ull}},
+{{15898392586054640987ull, 10050599870667562105ull,
+ 2696872669513640516ull, 3681910145239465104ull}},
+{{6037932677286137522ull, 12563249838334452632ull,
+ 3371090836892050645ull, 4602387681549331380ull}},
+{{3773707923303835952ull, 10157874158172726847ull,
+ 11330303809912307461ull, 2876492300968332112ull}},
+{{105448885702407035ull, 17309028716143296463ull,
+ 14162879762390384326ull, 3595615376210415140ull}},
+{{13966869162410172506ull, 12412913858324344770ull,
+ 17703599702987980408ull, 4494519220263018925ull}},
+{{13340979244933745720ull, 7758071161452715481ull,
+ 13370592823581181707ull, 2809074512664386828ull}},
+{{2841166000885018438ull, 5085902933388506448ull,
+ 16713241029476477134ull, 3511343140830483535ull}},
+{{3551457501106273048ull, 15580750703590408868ull,
+ 16279865268418208513ull, 4389178926038104419ull}},
+{{11443032975046196463ull, 2820440162102923686ull,
+ 7869072783547686369ull, 2743236828773815262ull}},
+{{5080419181952969771ull, 8137236221056042512ull, 612968942579832153ull,
+ 3429046035967269078ull}},
+{{6350523977441212213ull, 14783231294747441044ull,
+ 9989583215079565999ull, 4286307544959086347ull}},
+{{13192449522755533442ull, 16157048586858232508ull,
+ 3937646500211034797ull, 2678942215599428967ull}},
+{{16490561903444416802ull, 6361252678290626923ull,
+ 310372106836405593ull, 3348677769499286209ull}},
+{{16001516360878133098ull, 12563251866290671558ull,
+ 4999651151972894895ull, 4185847211874107761ull}},
+{{5389261707121445283ull, 14769561444072751580ull,
+ 14653997016051529069ull, 2616154507421317350ull}},
+{{6736577133901806603ull, 4626893749808775763ull,
+ 9094124233209635529ull, 3270193134276646688ull}},
+{{3809035398949870350ull, 10395303205688357608ull,
+ 11367655291512044411ull, 4087741417845808360ull}},
+{{2380647124343668969ull, 4191221494341529553ull,
+ 7104784557195027757ull, 2554838386153630225ull}},
+{{7587494923856974115ull, 9850712886354299845ull,
+ 13492666714921172600ull, 3193547982692037781ull}},
+{{14096054673248605547ull, 12313391107942874806ull,
+ 3030775338369302038ull, 3991934978365047227ull}},
+{{4198348152352990563ull, 3084183424036908850ull,
+ 18035135650976671438ull, 2494959361478154516ull}},
+{{14471307227296014012ull, 13078601316900911870ull,
+ 4097175490011287681ull, 3118699201847693146ull}},
+{{8865761997265241707ull, 2513193590843976126ull,
+ 14344841399368885410ull, 3898374002309616432ull}},
+{{929415229863388163ull, 6182432012704872983ull, 8965525874605553381ull,
+ 2436483751443510270ull}},
+{{14996827092611398916ull, 12339726034308479132ull,
+ 1983535306402165918ull, 3045604689304387838ull}},
+{{299289792054697028ull, 6201285506030823108ull,
+ 11702791169857483206ull, 3807005861630484797ull}},
+{{9410428156888961451ull, 17710861496551428154ull,
+ 9620087490374620955ull, 2379378663519052998ull}},
+{{2539663159256426006ull, 17526890852261897289ull,
+ 2801737326113500386ull, 2974223329398816248ull}},
+{{7786264967497920411ull, 12685241528472595803ull,
+ 3502171657641875483ull, 3717779161748520310ull}},
+{{2560572595472506305ull, 5622432946081678425ull,
+ 16023915341308335889ull, 2323611976092825193ull}},
+{{7812401762768020785ull, 11639727201029485935ull,
+ 6194836121353256149ull, 2904514970116031492ull}},
+{{5153816185032638077ull, 714600946004693707ull, 7743545151691570187ull,
+ 3630643712645039365ull}},
+{{1830584212863409692ull, 14728309237788030846ull,
+ 14291117458041850637ull, 4538304640806299206ull}},
+{{14979173188321794770ull, 11511036282831213230ull,
+ 4320262392848768744ull, 2836440400503937004ull}},
+{{9500594448547467654ull, 14388795353539016538ull,
+ 5400327991060960930ull, 3545550500629921255ull}},
+{{2652371023829558760ull, 8762622155068994865ull,
+ 2138723970398813259ull, 4431938125787401569ull}},
+{{13186946935961943985ull, 3170795837704427838ull,
+ 12865917527567728047ull, 2769961328617125980ull}},
+{{7260311633097654173ull, 17798552852412698510ull,
+ 16082396909459660058ull, 3462451660771407475ull}},
+{{18298761578226843524ull, 13024819028661097329ull,
+ 15491310118397187169ull, 4328064575964259344ull}},
+{{4519196958750695347ull, 1222982865272103975ull,
+ 9682068823998241981ull, 2705040359977662090ull}},
+{{1037310180010981279ull, 6140414600017517873ull,
+ 2879213993143026668ull, 3381300449972077613ull}},
+{{5908323743441114503ull, 7675518250021897341ull,
+ 8210703509856171239ull, 4226625562465097016ull}},
+{{5998545348864390517ull, 11714727933904767694ull,
+ 5131689693660107024ull, 2641640976540685635ull}},
+{{16721553722935263954ull, 14643409917380959617ull,
+ 1802926098647745876ull, 3302051220675857044ull}},
+{{7066884098386916230ull, 18304262396726199522ull,
+ 2253657623309682345ull, 4127564025844821305ull}},
+{{9028488579919210548ull, 4522634970312792845ull,
+ 12937751060637021226ull, 2579727516153013315ull}},
+{{15897296743326401089ull, 14876665749745766864ull,
+ 11560502807368888628ull, 3224659395191266644ull}},
+{{1424876855448449745ull, 149088113472656965ull,
+ 14450628509211110786ull, 4030824243989083305ull}},
+{{3196391043868975043ull, 4704866089347798507ull,
+ 2114113790615862385ull, 2519265152493177066ull}},
+{{17830546860118382515ull, 10492768630112136037ull,
+ 11866014275124603789ull, 3149081440616471332ull}},
+{{8453125519865814432ull, 17727646806067557951ull,
+ 14832517843905754736ull, 3936351800770589165ull}},
+{{12200732477557215876ull, 11079779253792223719ull,
+ 11576166661654790662ull, 2460219875481618228ull}},
+{{10639229578519131941ull, 4626352030385503841ull,
+ 14470208327068488328ull, 3075274844352022785ull}},
+{{17910722991576302830ull, 5782940037981879801ull,
+ 4252702353553446698ull, 3844093555440028482ull}},
+{{4276672842094107413ull, 8226023542166062780ull,
+ 7269624989398292090ull, 2402558472150017801ull}},
+{{5345841052617634266ull, 1059157390852802667ull,
+ 13698717255175253017ull, 3003198090187522251ull}},
+{{2070615297344654929ull, 5935632756993391238ull,
+ 12511710550541678367ull, 3753997612734402814ull}},
+{{15129192616122573043ull, 10627299500761951379ull,
+ 3208133075661161075ull, 2346248507959001759ull}},
+{{14299804751725828399ull, 8672438357525051320ull,
+ 17845224399858615056ull, 2932810634948752198ull}},
+{{17874755939657285499ull, 10840547946906314150ull,
+ 13083158462968493012ull, 3666013293685940248ull}},
+{{13120072887716831065ull, 13550684933632892688ull,
+ 16353948078710616265ull, 4582516617107425310ull}},
+{{8200045554823019416ull, 1551649055879476074ull,
+ 5609531530766747262ull, 2864072885692140819ull}},
+{{1026684906673998462ull, 11162933356704120901ull,
+ 2400228395031046173ull, 3580091107115176024ull}},
+{{5895042151769885981ull, 118608640597987414ull, 3000285493788807717ull,
+ 4475113883893970030ull}},
+{{17519459400138342451ull, 2379973409587436085ull,
+ 15710236488900168535ull, 2796946177433731268ull}},
+{{8064266194890764351ull, 16810024817266458819ull,
+ 1191051537415659052ull, 3496182721792164086ull}},
+{{5468646725186067535ull, 2565786947873521908ull,
+ 10712186458624349624ull, 4370228402240205107ull}},
+{{12641276240096068017ull, 1603616842420951192ull,
+ 4389273527426524563ull, 2731392751400128192ull}},
+{{15801595300120085022ull, 15839579108308352702ull,
+ 5486591909283155703ull, 3414240939250160240ull}},
+{{10528622088295330469ull, 15187787866958052974ull,
+ 6858239886603944629ull, 4267801174062700300ull}},
+{{1968702786757193639ull, 11798210426062477061ull,
+ 13509771965982241201ull, 2667375733789187687ull}},
+{{7072564501873879953ull, 912704977295932614ull,
+ 12275528939050413598ull, 3334219667236484609ull}},
+{{18064077664197125749ull, 10364253258474691575ull,
+ 1509353118530853285ull, 4167774584045605762ull}},
+{{18207577567764285449ull, 8783501295760376186ull,
+ 5555031717509171207ull, 2604859115028503601ull}},
+{{13536099922850581003ull, 6367690601273082329ull,
+ 11555475665313851913ull, 3256073893785629501ull}},
+{{3085066848281062542ull, 12571299270018740816ull,
+ 609286526360151179ull, 4070092367232036877ull}},
+{{1928166780175664089ull, 5551219034548019058ull,
+ 2686647088188788439ull, 2543807729520023048ull}},
+{{11633580512074355919ull, 2327337774757635918ull,
+ 3358308860235985549ull, 3179759661900028810ull}},
+{{5318603603238169091ull, 7520858236874432802ull,
+ 13421258112149757744ull, 3974699577375036012ull}},
+{{7935813270451243586ull, 4700536398046520501ull,
+ 17611658356948374398ull, 2484187235859397507ull}},
+{{14531452606491442386ull, 15099042534412926434ull,
+ 17402886927758080093ull, 3105234044824246884ull}},
+{{8940943721259527175ull, 5038745112733994331ull,
+ 3306864585988048501ull, 3881542556030308606ull}},
+{{3282246816573510532ull, 5455058704672440409ull,
+ 15901848421524694025ull, 2425964097518942878ull}},
+{{8714494539144276069ull, 11430509399267938415ull,
+ 10653938490051091723ull, 3032455121898678598ull}},
+{{6281432155502957183ull, 9676450730657535115ull,
+ 4094051075709088846ull, 3790568902373348248ull}},
+{{1620052087975654287ull, 1436095688233571543ull,
+ 2558781922318180529ull, 2369105563983342655ull}},
+{{15860123165251731571ull, 6406805628719352332ull,
+ 17033535458179889373ull, 2961381954979178318ull}},
+{{1378409882855112848ull, 12620193054326578320ull,
+ 12068547285870085908ull, 3701727443723972898ull}},
+{{861506176784445530ull, 17110992695808887258ull,
+ 12154528072096191596ull, 2313579652327483061ull}},
+{{10300254757835332720ull, 2941996796051557456ull,
+ 1358102034838075784ull, 2891974565409353827ull}},
+{{12875318447294165900ull, 3677495995064446820ull,
+ 15532685598829758442ull, 3614968206761692283ull}},
+{{16094148059117707375ull, 13820242030685334333ull,
+ 14804170980109810148ull, 4518710258452115354ull}},
+{{12364685546162261062ull, 17861023306033109766ull,
+ 13864292880996019246ull, 2824193911532572096ull}},
+{{6232484895848050519ull, 13102907095686611400ull,
+ 17330366101245024058ull, 3530242389415715120ull}},
+{{7790606119810063149ull, 7155261832753488442ull,
+ 3216213552846728457ull, 4412802986769643901ull}},
+{{9480814843308677372ull, 16001253691539400036ull,
+ 4315976479742899237ull, 2758001866731027438ull}},
+{{11851018554135846715ull, 6166509059142086333ull,
+ 14618342636533399855ull, 3447502333413784297ull}},
+{{978715137387644682ull, 3096450305500220013ull, 4437870240384586107ull,
+ 4309377916767230372ull}},
+{{2917539970080971878ull, 18076182505433495172ull,
+ 11997040937095142124ull, 2693361197979518982ull}},
+{{3646924962601214848ull, 4148484058082317349ull,
+ 5772929134514151848ull, 3366701497474398728ull}},
+{{9170342221678906464ull, 5185605072602896686ull,
+ 7216161418142689810ull, 4208376871842998410ull}},
+{{1119777870121928636ull, 7852689188804198333ull,
+ 9121786904766569035ull, 2630235544901874006ull}},
+{{6011408356079798699ull, 5204175467577860012ull,
+ 2178861594103435486ull, 3287794431127342508ull}},
+{{7514260445099748373ull, 15728591371327100823ull,
+ 2723576992629294357ull, 4109743038909178135ull}},
+{{11613941805828424589ull, 12136212616293131966ull,
+ 8619764648034390829ull, 2568589399318236334ull}},
+{{5294055220430754929ull, 1335207715084251246ull,
+ 1551333773188212729ull, 3210736749147795418ull}},
+{{15840941062393219469ull, 6280695662282701961ull,
+ 11162539253340041719ull, 4013420936434744272ull}},
+{{2983059136354680312ull, 10842963816567770582ull,
+ 6976587033337526074ull, 2508388085271715170ull}},
+{{12952195957298126198ull, 4330332733854937419ull,
+ 17944105828526683401ull, 3135485106589643962ull}},
+{{11578558928195269844ull, 10024601935746059678ull,
+ 13206760248803578443ull, 3919356383237054953ull}},
+{{2624913311694655748ull, 3959533200627593347ull,
+ 1336696127861154671ull, 2449597739523159346ull}},
+{{17116199694900483397ull, 337730482357103779ull,
+ 10894242196681219147ull, 3061997174403949182ull}},
+{{16783563600198216343ull, 14257221158228543436ull,
+ 4394430708996748125ull, 3827496468004936478ull}},
+{{1266355213269109406ull, 11216606233106533600ull,
+ 16581577248405131290ull, 2392185292503085298ull}},
+{{1582944016586386758ull, 4797385754528391192ull,
+ 11503599523651638305ull, 2990231615628856623ull}},
+{{1978680020732983447ull, 10608418211587876894ull,
+ 9767813386137159977ull, 3737789519536070779ull}},
+{{15071733068240278367ull, 18159476428310892818ull,
+ 3799040357122031033ull, 2336118449710044237ull}},
+{{9616294298445572150ull, 8864287480106452311ull,
+ 9360486464829926696ull, 2920148062137555296ull}},
+{{7408681854629577284ull, 11080359350133065389ull,
+ 11700608081037408370ull, 3650185077671944120ull}},
+{{13872538336714359508ull, 4627077150811555928ull,
+ 14625760101296760463ull, 4562731347089930150ull}},
+{{8670336460446474693ull, 9809452246898304311ull,
+ 4529414044883087385ull, 2851707091931206344ull}},
+{{6226234557130705462ull, 16873501327050268293ull,
+ 5661767556103859231ull, 3564633864914007930ull}},
+{{12394479214840769731ull, 16480190640385447462ull,
+ 16300581481984599847ull, 4455792331142509912ull}},
+{{3134863490848093178ull, 17217648177881986520ull,
+ 10187863426240374904ull, 2784870206964068695ull}},
+{{3918579363560116473ull, 3075316148642931534ull,
+ 8123143264373080727ull, 3481087758705085869ull}},
+{{14121596241304921399ull, 17679203241085828129ull,
+ 14765615098893738812ull, 4351359698381357336ull}},
+{{1908468623174494018ull, 1826129988823866773ull,
+ 9228509436808586758ull, 2719599811488348335ull}},
+{{6997271797395505427ull, 11506034522884609274ull,
+ 6923950777583345543ull, 3399499764360435419ull}},
+{{17969961783599157591ull, 9770857135178373688ull,
+ 4043252453551794025ull, 4249374705450544274ull}},
+{{11231226114749473495ull, 17636000755554953315ull,
+ 7138718801897259169ull, 2655859190906590171ull}},
+{{9427346625009453964ull, 8209942889161527932ull,
+ 4311712483944186058ull, 3319823988633237714ull}},
+{{11784183281261817455ull, 1039056574597134107ull,
+ 14613012641785008381ull, 4149779985791547142ull}},
+{{5059271541574941958ull, 2955253368336902769ull,
+ 4521446882688242334ull, 2593612491119716964ull}},
+{{10935775445396065351ull, 12917438747275904269ull,
+ 5651808603360302917ull, 3242015613899646205ull}},
+{{18281405325172469593ull, 2311740378812716624ull,
+ 11676446772627766551ull, 4052519517374557756ull}},
+{{11425878328232793496ull, 8362366764399029746ull,
+ 16521151269747129902ull, 2532824698359098597ull}},
+{{5058975873436216062ull, 1229586418644011375ull,
+ 6816381031901748666ull, 3166030872948873247ull}},
+{{1712033823367882173ull, 10760355060159790027ull,
+ 3908790271449797928ull, 3957538591186091559ull}},
+{{17210922204100784022ull, 6725221912599868766ull,
+ 9360522947297205561ull, 2473461619491307224ull}},
+{{12290280718271204220ull, 13018213409177223862ull,
+ 11700653684121506951ull, 3091827024364134030ull}},
+{{6139478860984229466ull, 11661080743044141924ull,
+ 5402445068297107881ull, 3864783780455167538ull}},
+{{13060546324969919225ull, 370646436761506846ull,
+ 7988214186113080330ull, 2415489862784479711ull}},
+{{7102310869357623223ull, 9686680082806659366ull,
+ 5373581714213962508ull, 3019362328480599639ull}},
+{{18101260623551804836ull, 12108350103508324207ull,
+ 2105291124340065231ull, 3774202910600749549ull}},
+{{18230816917360959879ull, 14485247842333784485ull,
+ 3621649961926234721ull, 2358876819125468468ull}},
+{{8953463091419036136ull, 4271501747635066895ull,
+ 4527062452407793402ull, 2948596023906835585ull}},
+{{6580142845846407266ull, 14562749221398609427ull,
+ 10270514083937129656ull, 3685745029883544481ull}},
+{{3613492538880621179ull, 18203436526748261784ull,
+ 17449828623348799974ull, 4607181287354430601ull}},
+{{2258432836800388237ull, 6765461810790275711ull,
+ 3988613861951918128ull, 2879488304596519126ull}},
+{{16658099101282649008ull, 8456827263487844638ull,
+ 14209139364294673468ull, 3599360380745648907ull}},
+{{11599251839748535452ull, 10571034079359805798ull,
+ 13149738186940953931ull, 4499200475932061134ull}},
+{{2637846381415446754ull, 4301053290386184672ull,
+ 3606900348410708303ull, 2812000297457538209ull}},
+{{3297307976769308442ull, 764630594555342936ull, 9120311453940773283ull,
+ 3515000371821922761ull}},
+{{4121634970961635552ull, 14790846298476342382ull,
+ 16012075335853354507ull, 4393750464777403451ull}},
+{{16411079912133185932ull, 6938435927334020036ull,
+ 7701704075694652615ull, 2746094040485877157ull}},
+{{2067105816456930799ull, 4061358890740137142ull,
+ 14238816113045703673ull, 3432617550607346446ull}},
+{{11807254307425939307ull, 9688384631852559331ull,
+ 8575148104452353783ull, 4290771938259183058ull}},
+{{5073690932927518115ull, 12972769422548931438ull,
+ 9971153583710109018ull, 2681732461411989411ull}},
+{{15565485703014173452ull, 6992589741331388489ull,
+ 7852255961210248369ull, 3352165576764986764ull}},
+{{5621799073485553103ull, 13352423195091623516ull,
+ 9815319951512810461ull, 4190206970956233455ull}},
+{{12736996457783246497ull, 10651107506145958649ull,
+ 13052103997336588394ull, 2618879356847645909ull}},
+{{2086187516946894410ull, 4090512345827672504ull,
+ 2480071941388571781ull, 3273599196059557387ull}},
+{{2607734396183618012ull, 9724826450711978534ull,
+ 16935147982017878438ull, 4091998995074446733ull}},
+{{15464892052896924970ull, 1466330513267598679ull,
+ 12890310497974867976ull, 2557499371921529208ull}},
+{{14719429047693768308ull, 1832913141584498349ull,
+ 16112888122468584970ull, 3196874214901911510ull}},
+{{4564228254335046673ull, 11514513463835398745ull,
+ 10917738116230955404ull, 3996092768627389388ull}},
+{{14381857705027873931ull, 16419942951751900023ull,
+ 16046958359499122935ull, 2497557980392118367ull}},
+{{13365636112857454509ull, 15913242671262487125ull,
+ 15447011930946515765ull, 3121947475490147959ull}},
+{{2871987085789654424ull, 6056495283795945195ull,
+ 14697078895255756803ull, 3902434344362684949ull}},
+{{17935892993114391679ull, 1479466543158771794ull,
+ 11491517318748541954ull, 2439021465226678093ull}},
+{{13196494204538213791ull, 11072705215803240551ull,
+ 529338593153513730ull, 3048776831533347617ull}},
+{{11883931737245379335ull, 4617509482899274881ull,
+ 5273359259869280067ull, 3810971039416684521ull}},
+{{509928308137280228ull, 580100417598352849ull, 14825064583486769802ull,
+ 2381856899635427825ull}},
+{{5249096403598988189ull, 9948497558852716869ull,
+ 4696272674076298540ull, 2977321124544284782ull}},
+{{11173056522926123141ull, 12435621948565896086ull,
+ 15093712879450148983ull, 3721651405680355977ull}},
+{{2371474308401439059ull, 14689792745494766910ull,
+ 2516041522015261258ull, 2326032128550222486ull}},
+{{12187714922356574632ull, 9138868895013682829ull,
+ 12368423939373852381ull, 2907540160687778107ull}},
+{{1399585597663554577ull, 16035272137194491441ull,
+ 10848843905789927572ull, 3634425200859722634ull}},
+{{6361168015506831126ull, 1597346097783562685ull,
+ 4337682845382633658ull, 4543031501074653293ull}},
+{{6281573018905463406ull, 5610027329542114582ull,
+ 5016894787577839988ull, 2839394688171658308ull}},
+{{17075338310486605065ull, 7012534161927643227ull,
+ 6271118484472299985ull, 3549243360214572885ull}},
+{{16732486869680868427ull, 13377353720836941938ull,
+ 12450584124017762885ull, 4436554200268216106ull}},
+{{15069490311977930671ull, 10666689084736782663ull,
+ 12393301095938489707ull, 2772846375167635066ull}},
+{{14225176871545025435ull, 8721675337493590425ull,
+ 6268254333068336326ull, 3466057968959543833ull}},
+{{3946413034149118081ull, 1678722135012212224ull,
+ 12447003934762808312ull, 4332572461199429791ull}},
+{{2466508146343198801ull, 1049201334382632640ull,
+ 14696906486867837051ull, 2707857788249643619ull}},
+{{3083135182928998501ull, 15146559723260454512ull,
+ 13759447090157408409ull, 3384822235312054524ull}},
+{{3853918978661248126ull, 5098141598793404428ull,
+ 17199308862696760512ull, 4231027794140068155ull}},
+{{11632071398518055887ull, 3186338499245877767ull,
+ 8443725029971781368ull, 2644392371337542597ull}},
+{{9928403229720181955ull, 3982923124057347209ull,
+ 15166342305892114614ull, 3305490464171928246ull}},
+{{17022190055577615348ull, 14202025941926459819ull,
+ 9734555845510367459ull, 4131863080214910308ull}},
+{{8333025775522315640ull, 6570423204490343435ull,
+ 15307469440298755470ull, 2582414425134318942ull}},
+{{5804596200975506646ull, 17436401042467705102ull,
+ 9910964763518668529ull, 3228018031417898678ull}},
+{{16479117288074159116ull, 7960443247802467665ull,
+ 3165333917543559854ull, 4035022539272373348ull}},
+{{3381919277405267592ull, 363591011449154387ull,
+ 11201705735319500717ull, 2521889087045233342ull}},
+{{18062457152038748201ull, 5066174782738830887ull,
+ 4778760132294600088ull, 3152361358806541678ull}},
+{{17966385421621047348ull, 6332718478423538609ull,
+ 15196822202223025918ull, 3940451698508177097ull}},
+{{4311461860872072736ull, 17793007104296875343ull,
+ 2580484848748309342ull, 2462782311567610686ull}},
+{{777641307662703016ull, 13017886843516318371ull,
+ 12448978097790162486ull, 3078477889459513357ull}},
+{{14807109689860542482ull, 7048986517540622155ull,
+ 1726164566955539396ull, 3848097361824391697ull}},
+{{6948600546949145100ull, 13628988610317664655ull,
+ 12608067900415681882ull, 2405060851140244810ull}},
+{{4074064665259043470ull, 7812863726042305011ull,
+ 6536712838664826545ull, 3006326063925306013ull}},
+{{480894813146416434ull, 14377765675980269168ull,
+ 12782577066758421085ull, 3757907579906632516ull}},
+{{300559258216510271ull, 11291946556701362182ull,
+ 17212482703578788986ull, 2348692237441645322ull}},
+{{9599071109625413647ull, 4891561159021926919ull,
+ 12292231342618710425ull, 2935865296802056653ull}},
+{{7387152868604379155ull, 10726137467204796553ull,
+ 1530231122991224319ull, 3669831621002570817ull}},
+{{13845627104182861847ull, 8795985815578607787ull,
+ 6524474922166418303ull, 4587289526253213521ull}},
+{{6347673930900594703ull, 12415020162377711723ull,
+ 15607011872422481199ull, 2867055953908258450ull}},
+{{3322906395198355474ull, 10907089184544751750ull,
+ 10285392803673325691ull, 3583819942385323063ull}},
+{{13377005030852720151ull, 9022175462253551783ull,
+ 8245054986164269210ull, 4479774927981653829ull}},
+{{15278157171924031950ull, 10250545682335857768ull,
+ 7459002375566362208ull, 2799859329988533643ull}},
+{{650952391195488322ull, 12813182102919822211ull,
+ 4712066951030564856ull, 3499824162485667054ull}},
+{{14648748544276524114ull, 16016477628649777763ull,
+ 15113455725642981878ull, 4374780203107083817ull}},
+{{6849624830959133620ull, 5398612499478723198ull,
+ 2528380800885781818ull, 2734237626941927386ull}},
+{{17785403075553692832ull, 15971637661203179805ull,
+ 12383848037962003080ull, 3417797033677409232ull}},
+{{8396695789159952328ull, 1517803002794423141ull,
+ 15479810047452503851ull, 4272246292096761540ull}},
+{{7553777877438664157ull, 17089527941242372127ull,
+ 451509242803039098ull, 2670153932560475963ull}},
+{{4830536328370942293ull, 12138537889698189351ull,
+ 14399444608785962585ull, 3337692415700594953ull}},
+{{1426484392036289962ull, 1338114306840572977ull,
+ 4164247705700289520ull, 4172115519625743692ull}},
+{{12420767791091150986ull, 836321441775358110ull,
+ 11826026852917456758ull, 2607572199766089807ull}},
+{{6302587702009162925ull, 10268773839073973446ull,
+ 10170847547719433043ull, 3259465249707612259ull}},
+{{17101606664366229464ull, 8224281280415078903ull,
+ 8101873416221903400ull, 4074331562134515324ull}},
+{{17606033192869975271ull, 5140175800259424314ull,
+ 14287042921993465433ull, 2546457226334072077ull}},
+{{12784169454232693281ull, 11036905768751668297ull,
+ 4023745597209668079ull, 3183071532917590097ull}},
+{{2145153762508702889ull, 9184446192512197468ull,
+ 9641368014939473003ull, 3978839416146987621ull}},
+{{10564093138422715114ull, 3434435861106429465ull,
+ 8331698018550864579ull, 2486774635091867263ull}},
+{{17816802441455781796ull, 18128102881665200543ull,
+ 5802936504761192819ull, 3108468293864834079ull}},
+{{17659317033392339341ull, 18048442583654112775ull,
+ 2641984612524103120ull, 3885585367331042599ull}},
+{{17954602173511293944ull, 11280276614783820484ull,
+ 8568769410468646306ull, 2428490854581901624ull}},
+{{3996508643179565814ull, 4876973731624999798ull,
+ 10710961763085807883ull, 3035613568227377030ull}},
+{{14219007840829233075ull, 1484531146103861843ull,
+ 4165330167002484046ull, 3794516960284221288ull}},
+{{6581036891304576720ull, 14762890021597077364ull,
+ 2603331354376552528ull, 2371573100177638305ull}},
+{{8226296114130720900ull, 6868453286795089ull, 7865850211398078565ull,
+ 2964466375222047881ull}},
+{{14894556161090789029ull, 4620271585035881765ull,
+ 14443998782674986110ull, 3705582969027559851ull}},
+{{11614940609895437095ull, 16722727795929589815ull,
+ 6721656229958172366ull, 2315989355642224907ull}},
+{{9906989743941908465ull, 11680037708057211461ull,
+ 3790384269020327554ull, 2894986694552781134ull}},
+{{16995423198354773485ull, 5376675098216738518ull,
+ 13961352373130185251ull, 3618733368190976417ull}},
+{{12020906961088691049ull, 2109157854343535244ull,
+ 3616632411130567852ull, 4523416710238720522ull}},
+{{16736438887535207714ull, 10541595695819485335ull,
+ 6872081275383992811ull, 2827135443899200326ull}},
+{{16308862590991621738ull, 8565308601346968765ull,
+ 17813473631084766822ull, 3533919304874000407ull}},
+{{6551020183457363460ull, 1483263714828935149ull,
+ 17655156020428570624ull, 4417399131092500509ull}},
+{{6400230623874546115ull, 927039821768084468ull,
+ 13340315521981550592ull, 2760874456932812818ull}},
+{{8000288279843182643ull, 1158799777210105585ull,
+ 7452022365622162432ull, 3451093071166016023ull}},
+{{14612046368231366208ull, 1448499721512631981ull,
+ 4703341938600315136ull, 4313866338957520029ull}},
+{{11438371989358297832ull, 905312325945394988ull,
+ 5245431720838890912ull, 2696166461848450018ull}},
+{{14297964986697872290ull, 1131640407431743735ull,
+ 15780161687903389448ull, 3370208077310562522ull}},
+{{13260770214944952459ull, 1414550509289679669ull,
+ 10501830073024461002ull, 4212760096638203153ull}},
+{{10593824393554289239ull, 5495780086733437697ull,
+ 18092858841708757886ull, 2632975060398876970ull}},
+{{17853966510370249452ull, 16093097145271572929ull,
+ 13392701515281171549ull, 3291218825498596213ull}},
+{{8482400082680648103ull, 6281313376307302450ull,
+ 2905818838819300725ull, 4114023531873245267ull}},
+{{9913186070102792969ull, 6231663869405757983ull,
+ 17957037838757920617ull, 2571264707420778291ull}},
+{{7779796569201103307ull, 12401265855184585383ull,
+ 17834611280020012867ull, 3214080884275972864ull}},
+{{5113059693073991229ull, 10889896300553343825ull,
+ 3846520026315464468ull, 4017601105344966081ull}},
+{{14724877354239714279ull, 16029557224700615698ull,
+ 13933290062515635052ull, 2511000690840603800ull}},
+{{9182724655944867040ull, 1590202457166218007ull,
+ 17416612578144543816ull, 3138750863550754750ull}},
+{{6866719801503695896ull, 1987753071457772509ull,
+ 12547393685825903962ull, 3923438579438443438ull}},
+{{6597542885153503887ull, 5854031688088495722ull,
+ 3230435035213802072ull, 2452149112149027149ull}},
+{{17470300643296655667ull, 7317539610110619652ull,
+ 8649729812444640494ull, 3065186390186283936ull}},
+{{3391131730411267967ull, 18370296549493050374ull,
+ 10812162265555800617ull, 3831482987732854920ull}},
+{{15954515386789206192ull, 4563906315792074627ull,
+ 6757601415972375386ull, 2394676867333034325ull}},
+{{15331458215059119836ull, 14928254931594869092ull,
+ 13058687788392857136ull, 2993346084166292906ull}},
+{{717578695114348178ull, 213574590784034750ull, 7099987698636295613ull,
+ 3741682605207866133ull}},
+{{14283544739728631324ull, 2439327128453715670ull,
+ 6743335320861378710ull, 2338551628254916333ull}},
+{{8631058887806013347ull, 12272530947421920396ull,
+ 13040855169504111291ull, 2923189535318645416ull}},
+{{10788823609757516683ull, 10728977665850012591ull,
+ 16301068961880139114ull, 3653986919148306770ull}},
+{{8874343493769507950ull, 4187850045457739931ull,
+ 11152964165495398085ull, 4567483648935383463ull}},
+{{3240621674392248517ull, 4923249287624781409ull,
+ 13888131631075705659ull, 2854677280584614664ull}},
+{{8662463111417698550ull, 1542375591103588857ull,
+ 17360164538844632074ull, 3568346600730768330ull}},
+{{15439764907699511091ull, 11151341525734261879ull,
+ 12476833636701014284ull, 4460433250913460413ull}},
+{{16567382094953276288ull, 16192960490438689482ull,
+ 10103864032151827879ull, 2787770781820912758ull}},
+{{11485855581836819552ull, 15629514594620973949ull,
+ 3406458003335009041ull, 3484713477276140948ull}},
+{{522261422013860728ull, 5701835187994053725ull, 4258072504168761302ull,
+ 4355891846595176185ull}},
+{{2632256397972356907ull, 17398705047778447290ull,
+ 14190510361173945573ull, 2722432404121985115ull}},
+{{12513692534320221942ull, 7913323254440895400ull,
+ 13126451933040044063ull, 3403040505152481394ull}},
+{{15642115667900277427ull, 5279968049623731346ull,
+ 7184692879445279271ull, 4253800631440601743ull}},
+{{14388008310865061296ull, 10217509058655913947ull,
+ 11407962077294381400ull, 2658625394650376089ull}},
+{{13373324370153938716ull, 12771886323319892434ull,
+ 424894541335813038ull, 3323281743312970112ull}},
+{{7493283425837647587ull, 6741485867295089735ull, 531118176669766298ull,
+ 4154102179141212640ull}},
+{{11600831168789611598ull, 8825114685486818988ull,
+ 331948860418603936ull, 2596313861963257900ull}},
+{{14501038960987014497ull, 11031393356858523735ull,
+ 414936075523254920ull, 3245392327454072375ull}},
+{{13514612682806380218ull, 13789241696073154669ull,
+ 14353728149686232362ull, 4056740409317590468ull}},
+{{10752475935967681588ull, 13229962078473109572ull,
+ 18194452130408671034ull, 2535462755823494042ull}},
+{{13440594919959601985ull, 7314080561236611157ull,
+ 13519693126156062985ull, 3169328444779367553ull}},
+{{2965685594667338769ull, 13754286719973151851ull,
+ 3064558352412915019ull, 3961660555974209442ull}},
+{{17994454561162944395ull, 6290586190769525954ull,
+ 6527034988685459791ull, 2476037847483880901ull}},
+{{13269696164598904686ull, 3251546720034519539ull,
+ 12770479754284212643ull, 3095047309354851126ull}},
+{{11975434187321242953ull, 17899491455325313136ull,
+ 6739727656000489995ull, 3868809136693563908ull}},
+{{7484646367075776846ull, 8881339150364626758ull,
+ 13435701821855082055ull, 2418005710433477442ull}},
+{{132435921989945249ull, 6489987919528395544ull, 7571255240464076761ull,
+ 3022507138041846803ull}},
+{{165544902487431561ull, 12724170917837882334ull,
+ 4852383032152708047ull, 3778133922552308504ull}},
+{{13938523619336808438ull, 14870135851289758314ull,
+ 3032739395095442529ull, 2361333701595192815ull}},
+{{8199782487316234739ull, 4752611758830034181ull,
+ 17625982299151466874ull, 2951667126993991018ull}},
+{{14861414127572681328ull, 15164136735392318534ull,
+ 12809105837084557784ull, 3689583908742488773ull}},
+{{4676697811305537926ull, 9477585459620199084ull,
+ 10311534157391542567ull, 2305989942964055483ull}},
+{{5845872264131922408ull, 7235295806097860951ull,
+ 8277731678312040305ull, 2882487428705069354ull}},
+{{2695654311737515105ull, 13655805776049714093ull,
+ 1123792561035274573ull, 3603109285881336693ull}},
+{{7981253908099281786ull, 3234699164779978904ull,
+ 6016426719721481121ull, 4503886607351670866ull}},
+{{4988283692562051116ull, 13550902024055956575ull,
+ 8371952718253313604ull, 2814929129594794291ull}},
+{{1623668597275175991ull, 16938627530069945719ull,
+ 5853254879389254101ull, 3518661411993492864ull}},
+{{15864643801876133701ull, 7338226357305268436ull,
+ 7316568599236567627ull, 4398326764991866080ull}},
+{{692030339317807755ull, 2280548464102098821ull, 4572855374522854767ull,
+ 2748954228119916300ull}},
+{{5476723942574647598ull, 16685743635409787238ull,
+ 5716069218153568458ull, 3436192785149895375ull}},
+{{16069276965073085305ull, 11633807507407458239ull,
+ 2533400504264572669ull, 4295240981437369219ull}},
+{{16960827130811760172ull, 9576972701343355351ull,
+ 17724276379661215582ull, 2684525613398355761ull}},
+{{16589347895087312311ull, 2747843839824418381ull,
+ 8320287419294355766ull, 3355657016747944702ull}},
+{{6901626813576976676ull, 12658176836635298785ull,
+ 1176987237263168899ull, 4194571270934930878ull}},
+{{15842731804554080183ull, 5605517513683367788ull,
+ 14570675078571644274ull, 2621607044334331798ull}},
+{{1356670681983048613ull, 16230268928958985544ull,
+ 8989971811359779534ull, 3277008805417914748ull}},
+{{1695838352478810766ull, 11064464124343956122ull,
+ 11237464764199724418ull, 4096261006772393435ull}},
+{{5671584988726644633ull, 11526976096142360480ull,
+ 4717572468411133809ull, 2560163129232745897ull}},
+{{7089481235908305791ull, 573662064895786888ull,
+ 10508651603941305166ull, 3200203911540932371ull}},
+{{8861851544885382238ull, 9940449617974509418ull,
+ 8524128486499243553ull, 4000254889426165464ull}},
+{{10150343233980751803ull, 17741996057302538146ull,
+ 5327580304062027220ull, 2500159305891353415ull}},
+{{3464557005621163946ull, 3730750997918621067ull,
+ 2047789361650146122ull, 3125199132364191769ull}},
+{{18165754312308618644ull, 13886810784253052141ull,
+ 7171422720490070556ull, 3906498915455239711ull}},
+{{13659439454406580605ull, 17902628777012933396ull,
+ 11399668227947375953ull, 2441561822159524819ull}},
+{{17074299318008225756ull, 8543227915984003033ull,
+ 9637899266506832038ull, 3051952277699406024ull}},
+{{7507816092228118483ull, 1455662858125227984ull,
+ 12047374083133540048ull, 3814940347124257530ull}},
+{{4692385057642574052ull, 909789286328267490ull,
+ 12141294820385850434ull, 2384337716952660956ull}},
+{{15088853358907993373ull, 10360608644765110170ull,
+ 15176618525482313042ull, 2980422146190826195ull}},
+{{9637694661780215908ull, 3727388769101611905ull,
+ 14359087138425503399ull, 3725527682738532744ull}},
+{{17552774209681104702ull, 9247147008329589296ull,
+ 8974429461515939624ull, 2328454801711582965ull}},
+{{3494223688391829262ull, 11558933760411986621ull,
+ 15829722845322312434ull, 2910568502139478706ull}},
+{{8979465628917174481ull, 5225295163660207468ull,
+ 10563781519798114735ull, 3638210627674348383ull}},
+{{11224332036146468102ull, 1919932936147871431ull,
+ 8593040881320255515ull, 4547763284592935479ull}},
+{{13932736550232624420ull, 17340859149588277308ull,
+ 12288179578466241552ull, 2842352052870584674ull}},
+{{17415920687790780524ull, 3229329863275795019ull,
+ 6136852436228026133ull, 3552940066088230843ull}},
+{{17158214841311087751ull, 8648348347522131678ull,
+ 3059379526857644762ull, 4441175082610288554ull}},
+{{6112198257392041941ull, 10016903735628720203ull,
+ 6523798222713415880ull, 2775734426631430346ull}},
+{{3028561803312664522ull, 12521129669535900254ull,
+ 17378119815246545658ull, 3469668033289287932ull}},
+{{13009074290995606460ull, 6428040050065099509ull,
+ 3275905695348630457ull, 4337085041611609916ull}},
+{{10436514441085947990ull, 15546740077359156953ull,
+ 11270813096447669843ull, 2710678151007256197ull}},
+{{17657329069784822891ull, 14821739078271558287ull,
+ 253458315277423592ull, 3388347688759070247ull}},
+{{17459975318803640710ull, 80429774129896243ull,
+ 14151880949378943203ull, 4235434610948837808ull}},
+{{8606641565038581492ull, 16191169673327042816ull,
+ 8844925593361839501ull, 2647146631843023630ull}},
+{{10758301956298226865ull, 6403904036376639808ull,
+ 1832784954847523569ull, 3308933289803779538ull}},
+{{13447877445372783581ull, 12616566063898187664ull,
+ 11514353230414180269ull, 4136166612254724422ull}},
+{{8404923403357989738ull, 10191196799150061242ull,
+ 2584784750581474764ull, 2585104132659202764ull}},
+{{1282782217342711365ull, 12738995998937576553ull,
+ 3230980938226843455ull, 3231380165824003455ull}},
+{{6215163790105777110ull, 11312058980244582787ull,
+ 17873784228065718031ull, 4039225207280004318ull}},
+{{1578634359602416742ull, 13987565890293946098ull,
+ 6559429124113685865ull, 2524515754550002699ull}},
+{{11196664986357796735ull, 3649399307585268910ull,
+ 3587600386714719428ull, 3155644693187503374ull}},
+{{4772459196092470111ull, 4561749134481586138ull,
+ 13707872520248175093ull, 3944555866484379217ull}},
+{{7594473015985181723ull, 5156936218264685288ull,
+ 1649891297514027577ull, 2465347416552737011ull}},
+{{9493091269981477154ull, 11057856291258244514ull,
+ 15897422177174698183ull, 3081684270690921263ull}},
+{{2642992050622070634ull, 9210634345645417739ull,
+ 15260091703040984825ull, 3852105338363651579ull}},
+{{17792771096134651811ull, 17285861512096855846ull,
+ 7231714305186921563ull, 2407565836477282237ull}},
+{{13017591833313538955ull, 16995640871693681904ull,
+ 13651328899911039858ull, 3009457295596602796ull}},
+{{16271989791641923694ull, 12021179052762326572ull,
+ 17064161124888799823ull, 3761821619495753495ull}},
+{{946621582921426501ull, 14430765935617535964ull,
+ 17582629730696581745ull, 2351138512184845934ull}},
+{{1183276978651783126ull, 4203399364239756243ull,
+ 12754915126515951374ull, 2938923140231057418ull}},
+{{15314154278596892619ull, 14477621242154471111ull,
+ 6720271871290163409ull, 3673653925288821773ull}},
+{{14531006829818727870ull, 4261968497410925177ull,
+ 13012025857540092166ull, 4592067406611027216ull}},
+{{2164350240995623063ull, 16498788366163991948ull,
+ 8132516160962557603ull, 2870042129131892010ull}},
+{{2705437801244528829ull, 16011799439277602031ull,
+ 942273164348421196ull, 3587552661414865013ull}},
+{{17216855306837824748ull, 1568005225387450922ull,
+ 5789527473862914400ull, 4484440826768581266ull}},
+{{15372220585201028371ull, 980003265867156826ull,
+ 8230140689591709404ull, 2802775516730363291ull}},
+{{9991903694646509656ull, 1225004082333946033ull,
+ 5675989843562248851ull, 3503469395912954114ull}},
+{{17101565636735524974ull, 15366313158199596253ull,
+ 16318359341307586871ull, 4379336744891192642ull}},
+{{12994321532173397061ull, 16521474751515829514ull,
+ 14810660606744629698ull, 2737085465556995401ull}},
+{{7019529878361970518ull, 11428471402540011085ull,
+ 4678267703148623411ull, 3421356831946244252ull}},
+{{13386098366379851052ull, 9673903234747625952ull,
+ 5847834628935779264ull, 4276696039932805315ull}},
+{{8366311478987406907ull, 6046189521717266220ull,
+ 1349053633871168088ull, 2672935024958003322ull}},
+{{10457889348734258634ull, 7557736902146582775ull,
+ 10909689079193735918ull, 3341168781197504152ull}},
+{{8460675667490435388ull, 223799090828452661ull,
+ 13637111348992169898ull, 4176460976496880190ull}},
+{{7593765301395216070ull, 4751560450195170817ull,
+ 3911508574692718282ull, 2610288110310550119ull}},
+{{14103892645171407991ull, 15162822599598739329ull,
+ 277699699938509948ull, 3262860137888187649ull}},
+{{3794807751182096277ull, 506784175788872546ull, 4958810643350525340ull,
+ 4078575172360234561ull}},
+{{6983440862916198077ull, 9540112146722821149ull,
+ 14628471698162548097ull, 2549109482725146600ull}},
+{{13340987097072635501ull, 16536826201830914340ull,
+ 18285589622703185121ull, 3186386853406433250ull}},
+{{16676233871340794376ull, 6835974697006479213ull,
+ 13633614991524205594ull, 3982983566758041563ull}},
+{{12728489178801690437ull, 8884170204056437412ull,
+ 6215166360488934544ull, 2489364729223775977ull}},
+{{15910611473502113046ull, 11105212755070546765ull,
+ 12380643969038556084ull, 3111705911529719971ull}},
+{{6053206286595477595ull, 13881515943838183457ull,
+ 10864118942870807201ull, 3889632389412149964ull}},
+{{15312468975190643257ull, 1758418437257782804ull,
+ 16013446376149030309ull, 2431020243382593727ull}},
+{{693842145278752456ull, 6809709064999616410ull,
+ 15405121951758899982ull, 3038775304228242159ull}},
+{{10090674718453216377ull, 17735508368104296320ull,
+ 14644716421271237073ull, 3798469130285302699ull}},
+{{6306671699033260236ull, 4167163702424103344ull,
+ 6847104754080829219ull, 2374043206428314187ull}},
+{{7883339623791575295ull, 597268609602741276ull, 3947194924173648620ull,
+ 2967554008035392734ull}},
+{{9854174529739469118ull, 746585762003426595ull,
+ 14157365692071836583ull, 3709442510044240917ull}},
+{{3853016071873474247ull, 7384145128893223478ull,
+ 11154196566758591816ull, 2318401568777650573ull}},
+{{14039642126696618617ull, 9230181411116529347ull,
+ 107687653166076058ull, 2898001960972063217ull}},
+{{12937866639943385367ull, 2314354727040885876ull,
+ 4746295584884982977ull, 3622502451215079021ull}},
+{{16172333299929231709ull, 7504629427228495249ull,
+ 10544555499533616625ull, 4528128064018848776ull}},
+{{3190179284814687962ull, 16219608438086279291ull,
+ 6590347187208510390ull, 2830080040011780485ull}},
+{{17822782161300523664ull, 11051138510753073305ull,
+ 12849620002438025892ull, 3537600050014725606ull}},
+{{8443419646343490868ull, 13813923138441341632ull,
+ 6838652966192756557ull, 4422000062518407008ull}},
+{{5277137278964681793ull, 10939544970739532472ull,
+ 4274158103870472848ull, 2763750039074004380ull}},
+{{6596421598705852241ull, 13674431213424415590ull,
+ 5342697629838091060ull, 3454687548842505475ull}},
+{{17468899035237091109ull, 17093039016780519487ull,
+ 2066686018870225921ull, 4318359436053131844ull}},
+{{17835590924664263799ull, 3765620357846742823ull,
+ 10515050798648667009ull, 2698974647533207402ull}},
+{{17682802637402941845ull, 9318711465735816433ull,
+ 3920441461456057953ull, 3373718309416509253ull}},
+{{8268445241471513594ull, 16260075350597158446ull,
+ 9512237845247460345ull, 4217147886770636566ull}},
+{{556092257492308093ull, 3245018066482142173ull, 1333462634852274812ull,
+ 2635717429231647854ull}},
+{{5306801340292773020ull, 4056272583102677716ull,
+ 10890200330420119323ull, 3294646786539559817ull}},
+{{6633501675365966275ull, 458654710450959241ull,
+ 18224436431452537058ull, 4118308483174449771ull}},
+{{15675153593172198682ull, 4898345212459237429ull,
+ 9084429760444141709ull, 2573942801984031107ull}},
+{{5758883936183084640ull, 10734617534001434691ull,
+ 6743851182127789232ull, 3217428502480038884ull}},
+{{2586918901801467896ull, 13418271917501793364ull,
+ 8429813977659736540ull, 4021785628100048605ull}},
+{{10840196350480693243ull, 17609791985293396660ull,
+ 7574476745251029289ull, 2513616017562530378ull}},
+{{13550245438100866554ull, 8177181926334582113ull,
+ 244723894709010804ull, 3142020021953162973ull}},
+{{3102748742343919480ull, 10221477407918227642ull,
+ 4917590886813651409ull, 3927525027441453716ull}},
+{{6550903982392337579ull, 17917638426017362036ull,
+ 12296866341113307938ull, 2454703142150908572ull}},
+{{8188629977990421974ull, 13173675995666926737ull,
+ 15371082926391634923ull, 3068378927688635715ull}},
+{{14847473490915415371ull, 11855408976156270517ull,
+ 14602167639562155750ull, 3835473659610794644ull}},
+{{11585513941035828559ull, 2797944591670281169ull,
+ 18349726811581123152ull, 2397171037256746652ull}},
+{{646834371012621987ull, 3497430739587851462ull, 4490414440766852324ull,
+ 2996463796570933316ull}},
+{{10031915000620553292ull, 4371788424484814327ull,
+ 5613018050958565405ull, 3745579745713666645ull}},
+{{13187475903028927663ull, 5038210774516702906ull,
+ 5813979291062797330ull, 2340987341071041653ull}},
+{{7260972841931383771ull, 15521135505000654441ull,
+ 11879160132255884566ull, 2926234176338802066ull}},
+{{13687902070841617618ull, 10178047344396042243ull,
+ 5625578128465079900ull, 3657792720423502583ull}},
+{{12498191570124634118ull, 12722559180495052804ull,
+ 2420286642153961971ull, 4572240900529378229ull}},
+{{17034741768182672132ull, 5645756478595714050ull,
+ 3818522160559920184ull, 2857650562830861393ull}},
+{{12070055173373564357ull, 7057195598244642563ull,
+ 9384838719127288134ull, 3572063203538576741ull}},
+{{10475882948289567542ull, 18044866534660579012ull,
+ 16342734417336498071ull, 4465079004423220926ull}},
+{{15770798879535755522ull, 18195570611803943738ull,
+ 5602522992407923390ull, 2790674377764513079ull}},
+{{10490126562564918594ull, 13521091227900153865ull,
+ 2391467722082516334ull, 3488342972205641349ull}},
+{{17724344221633536147ull, 7677991998020416523ull,
+ 7601020671030533322ull, 4360428715257051686ull}},
+{{8771872129307266140ull, 9410431017190148231ull, 138951900966695422ull,
+ 2725267947035657304ull}},
+{{6353154143206694771ull, 2539666734632909481ull, 173689876208369278ull,
+ 3406584933794571630ull}},
+{{12553128697435756367ull, 12397955455145912659ull,
+ 9440484382115237405ull, 4258231167243214537ull}},
+{{5539862426683653778ull, 10054565168679889364ull,
+ 17429517784890493138ull, 2661394479527009085ull}},
+{{6924828033354567222ull, 3344834423995085897ull,
+ 7951839175830952711ull, 3326743099408761357ull}},
+{{13267721060120596932ull, 18016101085276021083ull,
+ 14551484988216078792ull, 4158428874260951696ull}},
+{{5986482653361679130ull, 11260063178297513177ull,
+ 9094678117635049245ull, 2599018046413094810ull}},
+{{12094789335129486817ull, 240020917589727759ull,
+ 2144975610189035749ull, 3248772558016368513ull}},
+{{10506800650484470617ull, 4911712165414547603ull,
+ 7292905531163682590ull, 4060965697520460641ull}},
+{{4260907397339100184ull, 16904878158666255964ull,
+ 16087281003045771378ull, 2538103560950287900ull}},
+{{5326134246673875230ull, 11907725661478044147ull,
+ 1662357180097662607ull, 3172629451187859876ull}},
+{{2045981789914956133ull, 10272971058420167280ull,
+ 2077946475122078259ull, 3965786813984824845ull}},
+{{1278738618696847583ull, 4114763902298910598ull,
+ 3604559556164992864ull, 2478616758740515528ull}},
+{{10821795310225835287ull, 5143454877873638247ull,
+ 4505699445206241080ull, 3098270948425644410ull}},
+{{8915558119354906205ull, 6429318597342047809ull,
+ 14855496343362577158ull, 3872838685532055512ull}},
+{{17101438870665286138ull, 17853382178620943592ull,
+ 9284685214601610723ull, 2420524178457534695ull}},
+{{2930054514622056056ull, 17705041704848791587ull,
+ 6994170499824625500ull, 3025655223071918369ull}},
+{{17497626198559733782ull, 3684558057351437867ull,
+ 13354399143208169780ull, 3782069028839897961ull}},
+{{8630173364886139662ull, 11526220822699424475ull,
+ 1428970436864024256ull, 2363793143024936226ull}},
+{{6176030687680286674ull, 14407776028374280594ull,
+ 11009585082934806128ull, 2954741428781170282ull}},
+{{16943410396455134150ull, 18009720035467850742ull,
+ 4538609316813731852ull, 3693426785976462853ull}},
+{{5977945479357070940ull, 2032702985312630906ull,
+ 5142473832222276360ull, 2308391741235289283ull}},
+{{16695803886051114483ull, 2540878731640788632ull,
+ 1816406271850457546ull, 2885489676544111604ull}},
+{{2423010783854341487ull, 12399470451405761599ull,
+ 2270507839813071932ull, 3606862095680139505ull}},
+{{16863821535100090571ull, 15499338064257201998ull,
+ 7449820818193727819ull, 4508577619600174381ull}},
+{{5928202441010168703ull, 7381243280947057297ull,
+ 6961981020584773839ull, 2817861012250108988ull}},
+{{12021939069690098783ull, 4614868082756433717ull,
+ 8702476275730967299ull, 3522326265312636235ull}},
+{{1192365781830459766ull, 1156899085018154243ull,
+ 6266409326236321220ull, 4402907831640795294ull}},
+{{16886129678139895018ull, 9946433964991122209ull,
+ 17751563884179864474ull, 2751817394775497058ull}},
+{{7272604042392705060ull, 3209670419384126954ull,
+ 12966082818370054785ull, 3439771743469371323ull}},
+{{18314127089845657133ull, 8623774042657546596ull,
+ 11595917504535180577ull, 4299714679336714154ull}},
+{{2222957394298759901ull, 16919073822729436383ull,
+ 11859134458761875764ull, 2687321674585446346ull}},
+{{16613754798155613588ull, 2702098204702243862ull,
+ 5600546036597568898ull, 3359152093231807933ull}},
+{{11543821460839741176ull, 12600994792732580636ull,
+ 11612368564174349026ull, 4198940116539759916ull}},
+{{16438260449879614043ull, 12487307763885250801ull,
+ 16481102389463743949ull, 2624337572837349947ull}},
+{{6712767507067353842ull, 1774076649574399790ull,
+ 15989691968402292033ull, 3280421966046687434ull}},
+{{17614331420688968111ull, 6829281830395387641ull,
+ 10763742923648089233ull, 4100527457558359293ull}},
+{{4091428110289523213ull, 15797516190065587036ull,
+ 9033182336493749722ull, 2562829660973974558ull}},
+{{5114285137861904017ull, 10523523200727207987ull,
+ 2068105883762411345ull, 3203537076217468198ull}},
+{{1781170403899992117ull, 17766090019336397888ull,
+ 11808504391557789989ull, 4004421345271835247ull}},
+{{1113231502437495073ull, 13409649271298942632ull,
+ 14297844272364700599ull, 2502763340794897029ull}},
+{{1391539378046868841ull, 12150375570696290386ull,
+ 4037247285173712037ull, 3128454175993621287ull}},
+{{10962796259413361859ull, 1352911408088199270ull,
+ 434873088039752143ull, 3910567719992026609ull}},
+{{2240061643705963258ull, 7763098657696206400ull,
+ 11801010726093314849ull, 2444104824995016630ull}},
+{{2800077054632454073ull, 14315559340547645904ull,
+ 5527891370761867753ull, 3055131031243770788ull}},
+{{3500096318290567591ull, 4059391120402393668ull,
+ 6909864213452334692ull, 3818913789054713485ull}},
+{{11410932235786380552ull, 11760491487106271850ull,
+ 6624508142621403134ull, 2386821118159195928ull}},
+{{5040293257878199882ull, 5477242322028064005ull,
+ 8280635178276753918ull, 2983526397698994910ull}},
+{{10912052590775137757ull, 16069924939389855814ull,
+ 1127421935991166589ull, 3729407997123743638ull}},
+{{2208346850807073194ull, 12349546096332353836ull,
+ 14539696765276642830ull, 2330879998202339773ull}},
+{{2760433563508841493ull, 6213560583560666487ull,
+ 4339562901313639826ull, 2913599997752924717ull}},
+{{17285600009668215578ull, 16990322766305608916ull,
+ 10036139645069437686ull, 3641999997191155896ull}},
+{{3160255938375717856ull, 12014531421027235338ull,
+ 12545174556336797108ull, 4552499996488944870ull}},
+{{6586845979912211564ull, 16732454174996797894ull,
+ 3229048079283110288ull, 2845312497805590544ull}},
+{{17456929511745040263ull, 2468823645036445751ull,
+ 4036310099103887861ull, 3556640622256988180ull}},
+{{17209475871253912425ull, 7697715574722945093ull,
+ 5045387623879859826ull, 4445800777821235225ull}},
+{{13061765428747389218ull, 9422758252629228587ull,
+ 14682582310993382151ull, 2778625486138272015ull}},
+{{11715520767506848618ull, 7166761797359147830ull,
+ 13741541870314339785ull, 3473281857672840019ull}},
+{{5421028922528784964ull, 13570138265126322692ull,
+ 12565241319465536827ull, 4341602322091050024ull}},
+{{12611515113435266411ull, 6175493406490257730ull,
+ 7853275824665960517ull, 2713501451306906265ull}},
+{{6541021854939307205ull, 12331052776540210067ull,
+ 14428280799259838550ull, 3391876814133632831ull}},
+{{3564591300246746103ull, 6190443933820486776ull,
+ 13423664980647410284ull, 4239846017667041039ull}},
+{{2227869562654216314ull, 13092399495492580043ull,
+ 15307319640545713283ull, 2649903761041900649ull}},
+{{16619895008599934105ull, 11753813350938337149ull,
+ 5299091495399977892ull, 3312379701302375812ull}},
+{{6939810705467753919ull, 14692266688672921437ull,
+ 6623864369249972365ull, 4140474626627969765ull}},
+{{6643224700131040152ull, 11488509689634269850ull,
+ 6445758239994926680ull, 2587796641642481103ull}},
+{{17527402912018575997ull, 14360637112042837312ull,
+ 3445511781566270446ull, 3234745802053101379ull}},
+{{3462509566313668380ull, 8727424353198770833ull,
+ 18141947782240001770ull, 4043432252566376723ull}},
+{{13693283525014512498ull, 10066326239176619674ull,
+ 9032874354686307154ull, 2527145157853985452ull}},
+{{7893232369413364814ull, 3359535762115998785ull,
+ 11291092943357883943ull, 3158931447317481815ull}},
+{{14478226480194093922ull, 18034477757927162193ull,
+ 9502180160769967024ull, 3948664309146852269ull}},
+{{2131362522480226845ull, 11271548598704476371ull,
+ 8244705609694923342ull, 2467915193216782668ull}},
+{{16499261208382447269ull, 4866063711525819655ull,
+ 10305882012118654178ull, 3084893991520978335ull}},
+{{16012390492050671182ull, 15305951676262050377ull,
+ 8270666496720929818ull, 3856117489401222919ull}},
+{{3090215029890587633ull, 14177905816091169390ull,
+ 12086695588091662992ull, 2410073430875764324ull}},
+{{13086140824218010349ull, 17722382270113961737ull,
+ 15108369485114578740ull, 3012591788594705405ull}},
+{{2522617974990349224ull, 3706233763932900556ull,
+ 5050403801111059714ull, 3765739735743381757ull}},
+{{10800008271223744073ull, 6928082120885450751ull,
+ 5462345384908106273ull, 2353587334839613598ull}},
+{{8888324320602292187ull, 13271788669534201343ull,
+ 16051303767989908649ull, 2941984168549516997ull}},
+{{6498719382325477330ull, 2754677781635587967ull,
+ 6229071654705222100ull, 3677480210686896247ull}},
+{{3511713209479458758ull, 3443347227044484959ull,
+ 3174653549954139721ull, 4596850263358620309ull}},
+{{9112349783565743580ull, 13681307062971272859ull,
+ 4290001477935031277ull, 2873031414599137693ull}},
+{{6778751211029791571ull, 3266575773431927362ull,
+ 9974187865846177001ull, 3591289268248922116ull}},
+{{17696811050642015271ull, 8694905735217297106ull,
+ 12467734832307721251ull, 4489111585311152645ull}},
+{{15672192925078647449ull, 3128473075297116739ull,
+ 10098177279406019734ull, 2805694740819470403ull}},
+{{14978555137920921407ull, 13133963380976171732ull,
+ 8011035580830136763ull, 3507118426024338004ull}},
+{{276449848691600143ull, 11805768207792826762ull,
+ 10013794476037670954ull, 4383898032530422505ull}},
+{{4784467173859637993ull, 11990291148297904630ull,
+ 17787836593592014106ull, 2739936270331514065ull}},
+{{15203956004179323299ull, 5764491898517604979ull,
+ 8399737686707853921ull, 3424920337914392582ull}},
+{{14393258986796766220ull, 11817300891574394128ull,
+ 1276300071530041593ull, 4281150422392990728ull}},
+{{8995786866747978888ull, 468284029592914474ull, 797687544706275996ull,
+ 2675719013995619205ull}},
+{{2021361546580197802ull, 585355036991143093ull, 5608795449310232899ull,
+ 3344648767494524006ull}},
+{{7138387951652635156ull, 14566751851521092578ull,
+ 16234366348492566931ull, 4180810959368155007ull}},
+{{9073178488210284877ull, 6798376897986988909ull,
+ 17064007995448936188ull, 2613006849605096879ull}},
+{{15953159128690244000ull, 8497971122483736136ull,
+ 16718323975883782331ull, 3266258562006371099ull}},
+{{1494704837153253384ull, 6010777884677282267ull,
+ 16286218951427340010ull, 4082823202507963874ull}},
+{{17075091587716641029ull, 8368422196350689320ull,
+ 14790572863069475410ull, 2551764501567477421ull}},
+{{2897120410936249670ull, 1237155708583585843ull,
+ 4653158023554680551ull, 3189705626959346777ull}},
+{{17456458568952475799ull, 15381502691011646015ull,
+ 10428133547870738592ull, 3987132033699183471ull}},
+{{17827815633236379231ull, 9613439181882278759ull,
+ 13435112495060293476ull, 2491957521061989669ull}},
+{{17673083523118086134ull, 12016798977352848449ull,
+ 2958832563543203133ull, 3114946901327487087ull}},
+{{8256296348615443956ull, 1185940666408896850ull,
+ 17533598759711167629ull, 3893683626659358858ull}},
+{{9771871236312040377ull, 3047055925719254483ull,
+ 15570185243246867672ull, 2433552266662099286ull}},
+{{7603153026962662567ull, 3808819907149068104ull,
+ 10239359517203808782ull, 3041940333327624108ull}},
+{{9503941283703328208ull, 13984396920791110938ull,
+ 12799199396504760977ull, 3802425416659530135ull}},
+{{10551649320741968034ull, 1822719047853362480ull,
+ 14917028650456557467ull, 2376515885412206334ull}},
+{{13189561650927460043ull, 16113456865098866812ull,
+ 9422913776215921025ull, 2970644856765257918ull}},
+{{16486952063659325053ull, 6306763026091419803ull,
+ 2555270183415125474ull, 3713306070956572398ull}},
+{{7998502030573384206ull, 8553412909734525281ull,
+ 15432101919916617133ull, 2320816294347857748ull}},
+{{14609813556644118162ull, 15303452155595544505ull,
+ 843383326186219800ull, 2901020367934822186ull}},
+{{4427208890522983990ull, 682571120784879016ull,
+ 10277601194587550559ull, 3626275459918527732ull}},
+{{5534011113153729988ull, 14688271956263262482ull,
+ 12847001493234438198ull, 4532844324898159665ull}},
+{{8070442964148469147ull, 4568483954237151147ull,
+ 1111846905630442018ull, 2833027703061349791ull}},
+{{5476367686758198529ull, 14933976979651214742ull,
+ 15224866687320216234ull, 3541284628826687238ull}},
+{{16068831645302523969ull, 9444099187709242619ull,
+ 9807711322295494485ull, 4426605786033359048ull}},
+{{7737176769100383529ull, 8208405001531970589ull,
+ 6129819576434684053ull, 2766628616270849405ull}},
+{{14283156979802867315ull, 14872192270342351140ull,
+ 12273960488970742970ull, 3458285770338561756ull}},
+{{17853946224753584144ull, 9366868301073163117ull,
+ 15342450611213428713ull, 4322857212923202195ull}},
+{{13464559399684684042ull, 17383507734239196708ull,
+ 7283188622794698993ull, 2701785758077001372ull}},
+{{16830699249605855052ull, 7894326612516832173ull,
+ 9103985778493373742ull, 3377232197596251715ull}},
+{{7203316006725155103ull, 644536228791264409ull, 6768296204689329274ull,
+ 4221540246995314644ull}},
+{{16031287550271691700ull, 5014521161421928159ull,
+ 13453557164785606604ull, 2638462654372071652ull}},
+{{15427423419412226721ull, 6268151451777410199ull,
+ 16816946455982008255ull, 3298078317965089565ull}},
+{{14672593255837895497ull, 3223503296294374845ull,
+ 7186125014695346607ull, 4122597897456361957ull}},
+{{11476213794112378638ull, 8932218587825066134ull,
+ 6797171143398285581ull, 2576623685910226223ull}},
+{{5121895205785697489ull, 15776959253208720572ull,
+ 3884777910820469072ull, 3220779607387782779ull}},
+{{6402369007232121861ull, 1274454992801349099ull, 244286370098198437ull,
+ 4025974509234728474ull}},
+{{1695637620306382211ull, 3102377379714537139ull,
+ 4764364999738761927ull, 2516234068271705296ull}},
+{{15954605080665141476ull, 17713029779925335135ull,
+ 5955456249673452408ull, 3145292585339631620ull}},
+{{15331570332404038941ull, 3694543151197117303ull,
+ 7444320312091815511ull, 3931615731674539525ull}},
+{{16499760485393606194ull, 9226618497139280170ull,
+ 6958543204271078646ull, 2457259832296587203ull}},
+{{11401328569887231935ull, 2309901084569324405ull,
+ 4086492986911460404ull, 3071574790370734004ull}},
+{{416602657076876206ull, 2887376355711655507ull, 5108116233639325505ull,
+ 3839468487963417505ull}},
+{{16401277725168905293ull, 13333825268388254451ull,
+ 14721787692093048200ull, 2399667804977135940ull}},
+{{15889911138033743712ull, 16667281585485318064ull,
+ 18402234615116310250ull, 2999584756221419925ull}},
+{{1415644848832628024ull, 11610729945001871773ull,
+ 9167735213613224101ull, 3749480945276774907ull}},
+{{3190621039734086467ull, 9562549224839863810ull,
+ 3423991499294571111ull, 2343425590797984317ull}},
+{{13211648336522383892ull, 7341500512622441858ull,
+ 8891675392545601793ull, 2929281988497480396ull}},
+{{7291188383798204057ull, 13788561659205440227ull,
+ 11114594240682002241ull, 3661602485621850495ull}},
+{{4502299461320367167ull, 3400644018724636572ull,
+ 9281556782425114898ull, 4577003107027313119ull}},
+{{12037309200180005287ull, 6737088530130285761ull,
+ 12718502016656778667ull, 2860626941892070699ull}},
+{{1211578444942842897ull, 3809674644235469298ull,
+ 11286441502393585430ull, 3575783677365088374ull}},
+{{10737845093033329429ull, 13985465342149112430ull,
+ 4884679841137205979ull, 4469729596706360468ull}},
+{{2099467164718442990ull, 6435072829629501317ull,
+ 12276296937565529545ull, 2793580997941475292ull}},
+{{7236019974325441641ull, 12655527055464264550ull,
+ 15345371171956911931ull, 3491976247426844115ull}},
+{{18268397004761577859ull, 11207722800902942783ull,
+ 14570027946518752010ull, 4364970309283555144ull}},
+{{18335277155617068018ull, 11616512768991727143ull,
+ 9106267466574220006ull, 2728106443302221965ull}},
+{{18307410426093947118ull, 5297268924384883121ull,
+ 15994520351645162912ull, 3410133054127777456ull}},
+{{9049204977335270186ull, 6621586155481103902ull,
+ 1546406365846902024ull, 4262666317659721821ull}},
+{{1044067092407155962ull, 4138491347175689939ull,
+ 3272346987868007717ull, 2664166448537326138ull}},
+{{15140141920791108665ull, 9784800202397000327ull,
+ 13313805771689785454ull, 3330208060671657672ull}},
+{{14313491382561497927ull, 3007628216141474601ull,
+ 16642257214612231818ull, 4162760075839572090ull}},
+{{2028403086459854348ull, 6491453653515809530ull,
+ 15013096777560032790ull, 2601725047399732556ull}},
+{{11758875894929593743ull, 17337689103749537720ull,
+ 319626898240489371ull, 3252156309249665696ull}},
+{{14698594868661992179ull, 17060425361259534246ull,
+ 399533622800611714ull, 4065195386562082120ull}},
+{{4574935774486357208ull, 15274451869214596808ull,
+ 249708514250382321ull, 2540747116601301325ull}},
+{{5718669718107946510ull, 5258006781236082298ull,
+ 4923821661240365806ull, 3175933895751626656ull}},
+{{16371709184489708946ull, 15795880513399878680ull,
+ 6154777076550457257ull, 3969917369689533320ull}},
+{{10232318240306068091ull, 2954896293233842319ull,
+ 3846735672844035786ull, 2481198356055958325ull}},
+{{8178711781955197210ull, 12916992403397078707ull,
+ 9420105609482432636ull, 3101497945069947906ull}},
+{{5611703709016608608ull, 16146240504246348384ull,
+ 2551759974998264987ull, 3876872431337434883ull}},
+{{3507314818135380380ull, 7785557305940273788ull,
+ 17735751048869773281ull, 2423045269585896801ull}},
+{{4384143522669225475ull, 14343632650852730139ull,
+ 8334630755805052889ull, 3028806586982371002ull}},
+{{868493384909143940ull, 4094482758283748962ull, 1194916407901540304ull,
+ 3786008233727963753ull}},
+{{5154494383995602867ull, 2559051723927343101ull,
+ 12276037801006932450ull, 2366255146079977345ull}},
+{{11054803998421891487ull, 12422186691763954684ull,
+ 1509989195976501850ull, 2957818932599971682ull}},
+{{13818504998027364359ull, 6304361327850167547ull,
+ 11110858531825403121ull, 3697273665749964602ull}},
+{{6330722614553408772ull, 15469440875974824477ull,
+ 11555972600818264854ull, 2310796041093727876ull}},
+{{12525089286619148869ull, 10113429058113754788ull,
+ 14444965751022831068ull, 2888495051367159845ull}},
+{{15656361608273936087ull, 12641786322642193485ull,
+ 4221149133496375123ull, 3610618814208949807ull}},
+{{5735393955060256396ull, 11190546884875353953ull,
+ 664750398443081000ull, 4513273517761187259ull}},
+{{15113836267981130008ull, 6994091803047096220ull,
+ 16556370063522783289ull, 2820795948600742036ull}},
+{{445551261266860894ull, 13354300772236258180ull,
+ 2248718505693927495ull, 3525994935750927546ull}},
+{{556939076583576117ull, 12081189946867934821ull,
+ 12034270168972185177ull, 4407493669688659432ull}},
+{{2653929932078429025ull, 633214689151377407ull, 7521418855607615736ull,
+ 2754683543555412145ull}},
+{{17152470470380199993ull, 791518361439221758ull,
+ 14013459587936907574ull, 3443354429444265181ull}},
+{{12217216051120474184ull, 10212769988653803006ull,
+ 3681766429638970755ull, 4304193036805331477ull}},
+{{3024074013522908461ull, 4077138233694932927ull,
+ 4606947027738050674ull, 2690120648003332173ull}},
+{{17615150572185799288ull, 14319794828973441966ull,
+ 10370369803099951246ull, 3362650810004165216ull}},
+{{12795566178377473302ull, 8676371499362026650ull,
+ 12962962253874939058ull, 4203313512505206520ull}},
+{{12608914879913308718ull, 10034418205528654560ull,
+ 8101851408671836911ull, 2627070945315754075ull}},
+{{15761143599891635897ull, 7931336738483430296ull,
+ 5515628242412408235ull, 3283838681644692594ull}},
+{{1254685426154993256ull, 5302484904676899967ull,
+ 16117907339870286102ull, 4104798352055865742ull}},
+{{7701707418987952641ull, 17149111120705226191ull,
+ 5462006068991540909ull, 2565498970034916089ull}},
+{{5015448255307552897ull, 7601330845599369027ull,
+ 11439193604666814041ull, 3206873712543645111ull}},
+{{1657624300707053217ull, 14113349575426599188ull,
+ 9687305987406129647ull, 4008592140679556389ull}},
+{{10259387224796684069ull, 15738372512282706348ull,
+ 8360409251342524981ull, 2505370087924722743ull}},
+{{12824234030995855086ull, 5837907585071219223ull,
+ 5838825545750768323ull, 3131712609905903429ull}},
+{{11418606520317430953ull, 2685698462911636125ull,
+ 11910217950615848308ull, 3914640762382379286ull}},
+{{9442472084412088298ull, 10901933576174548386ull,
+ 2832200200707517288ull, 2446650476488987054ull}},
+{{2579718068660334564ull, 13627416970218185483ull,
+ 12763622287739172418ull, 3058313095611233817ull}},
+{{17059705641107581917ull, 7810899175917956045ull,
+ 2119469804391801811ull, 3822891369514042272ull}},
+{{12968159034905932651ull, 2575968975735028576ull,
+ 1324668627744876132ull, 2389307105946276420ull}},
+{{16210198793632415813ull, 3219961219668785720ull,
+ 1655835784681095165ull, 2986633882432845525ull}},
+{{1816004418330968150ull, 8636637543013370055ull,
+ 6681480749278756860ull, 3733292353041056906ull}},
+{{8052531789097936950ull, 14621270501238132092ull,
+ 8787611486726610941ull, 2333307720650660566ull}},
+{{10065664736372421187ull, 4441530071265501403ull,
+ 1761142321553487869ull, 2916634650813325708ull}},
+{{7970394902038138580ull, 10163598607509264658ull,
+ 2201427901941859836ull, 3645793313516657135ull}},
+{{739621590692897417ull, 12704498259386580823ull,
+ 16586842932709488507ull, 4557241641895821418ull}},
+{{7379792521824142742ull, 5634468402902919062ull,
+ 14978462851370818221ull, 2848276026184888386ull}},
+{{1368615425402619ull, 11654771522056036732ull, 9499706527358746968ull,
+ 3560345032731110483ull}},
+{{1710769281753274ull, 14568464402570045915ull, 7262947140771045806ull,
+ 4450431290913888104ull}},
+{{16141970295296953460ull, 4493604233178890792ull,
+ 4539341962981903629ull, 2781519556821180065ull}},
+{{1730718795411640209ull, 10228691309901001395ull,
+ 10285863472154767440ull, 3476899446026475081ull}},
+{{15998456549546713974ull, 12785864137376251743ull,
+ 17469015358620847204ull, 4346124307533093851ull}},
+{{16916564371107778090ull, 17214537122714933147ull,
+ 8612291589924335550ull, 2716327692208183657ull}},
+{{16534019445457334708ull, 12294799366538890626ull,
+ 15377050505832807342ull, 3395409615260229571ull}},
+{{11444152269966892577ull, 6145127171318837475ull,
+ 14609627113863621274ull, 4244262019075286964ull}},
+{{4846752159515613909ull, 8452390500501661326ull,
+ 18354388983019539104ull, 2652663761922054352ull}},
+{{15281812236249293194ull, 10565488125627076657ull,
+ 4496242155064872264ull, 3315829702402567941ull}},
+{{5267207240029452780ull, 13206860157033845822ull,
+ 10231988712258478234ull, 4144787128003209926ull}},
+{{17127062580300571700ull, 12865973616573541542ull,
+ 1783306926734160992ull, 2590491955002006204ull}},
+{{12185456188520938817ull, 16082467020716926928ull,
+ 2229133658417701240ull, 3238114943752507755ull}},
+{{15231820235651173521ull, 1656339702186607044ull,
+ 16621475128304290263ull, 4047643679690634693ull}},
+{{296515610427207643ull, 7952741341507711259ull,
+ 12694264964403875366ull, 2529777299806646683ull}},
+{{14205702568316173265ull, 717554640029863265ull,
+ 11256145187077456304ull, 3162221624758308354ull}},
+{{3922070155113052869ull, 896943300037329082ull, 4846809446992044572ull,
+ 3952777030947885443ull}},
+{{7062979865373045947ull, 9783961599378106484ull, 723412895156333905ull,
+ 2470485644342428402ull}},
+{{8828724831716307434ull, 16841638017650021009ull,
+ 10127638155800193189ull, 3088107055428035502ull}},
+{{15647592058072772197ull, 7216989466780362549ull,
+ 3436175657895465679ull, 3860133819285044378ull}},
+{{12085588045509176575ull, 11428147444378808449ull,
+ 6759295804612053953ull, 2412583637053152736ull}},
+{{1271927001604307007ull, 450126250191346850ull, 8449119755765067442ull,
+ 3015729546316440920ull}},
+{{10813280788860159566ull, 9786029849593959370ull,
+ 10561399694706334302ull, 3769661932895551150ull}},
+{{11369986511464987633ull, 1504582637568836702ull,
+ 1989188790764071035ull, 2356038708059719469ull}},
+{{4989111102476458733ull, 15715786352243209590ull,
+ 7098172006882476697ull, 2945048385074649336ull}},
+{{15459760914950349224ull, 5809674885021848275ull,
+ 8872715008603095872ull, 3681310481343311670ull}},
+{{14713015125260548626ull, 7262093606277310344ull,
+ 1867521723899094032ull, 4601638101679139588ull}},
+{{9195634453287842892ull, 4538808503923318965ull,
+ 10390573114291709578ull, 2876023813549462242ull}},
+{{16106229085037191518ull, 14896882666758924514ull,
+ 3764844356009861164ull, 3595029766936827803ull}},
+{{10909414319441713590ull, 174359259739104027ull, 94369426584938552ull,
+ 4493787208671034754ull}},
+{{4512540940437377042ull, 108974537336940017ull, 4670666910042974499ull,
+ 2808617005419396721ull}},
+{{10252362193974109206ull, 13971276226953338733ull,
+ 10450019655981106027ull, 3510771256774245901ull}},
+{{17427138760895024412ull, 12852409265264285512ull,
+ 17674210588403770438ull, 4388464070967807376ull}},
+{{10891961725559390258ull, 3421069772362790541ull,
+ 11046381617752356524ull, 2742790044354879610ull}},
+{{18226638175376625726ull, 4276337215453488176ull,
+ 4584604985335669847ull, 3428487555443599513ull}},
+{{4336553645511230541ull, 733735500889472317ull,
+ 10342442250096975213ull, 4285609444304499391ull}},
+{{5016189037658213040ull, 2764427697269614150ull,
+ 13381555433951691364ull, 2678505902690312119ull}},
+{{15493608333927542108ull, 3455534621587017687ull,
+ 12115258274012226301ull, 3348132378362890149ull}},
+{{14755324398982039731ull, 8931104295411160013ull,
+ 1309014787233119164ull, 4185165472953612687ull}},
+{{11527920758577468784ull, 14805312221486750816ull,
+ 7735663269661781333ull, 2615728420596007929ull}},
+{{14409900948221835980ull, 4671582221576274808ull,
+ 14281265105504614571ull, 3269660525745009911ull}},
+{{18012376185277294975ull, 1227791758542955606ull,
+ 13239895363453380310ull, 4087075657181262389ull}},
+{{6646049097370921456ull, 14602427904371510966ull,
+ 10580777611372056645ull, 2554422285738288993ull}},
+{{17530933408568427627ull, 4417976825182224995ull,
+ 17837658032642458711ull, 3193027857172861241ull}},
+{{17301980742283146630ull, 910785013050393340ull,
+ 8462014485520909677ull, 3991284821466076552ull}},
+{{1590365927072190836ull, 2875083642370189790ull,
+ 5288759053450568548ull, 2494553013416297845ull}},
+{{11211329445695014353ull, 3593854552962737237ull,
+ 11222634835240598589ull, 3118191266770372306ull}},
+{{179103751836604229ull, 9104004209630809451ull, 4804921507195972428ull,
+ 3897739083462965383ull}},
+{{16252840909393735307ull, 14913374667874031714ull,
+ 9920604969638564623ull, 2436086927164353364ull}},
+{{11092679099887393326ull, 14030032316415151739ull,
+ 12400756212048205779ull, 3045108658955441705ull}},
+{{9254162856431853753ull, 12925854377091551770ull,
+ 1665887209778093512ull, 3806385823694302132ull}},
+{{10395537803697296500ull, 8078658985682219856ull,
+ 10264551542966084253ull, 2378991139808938832ull}},
+{{12994422254621620625ull, 14710009750530162724ull,
+ 12830689428707605316ull, 2973738924761173540ull}},
+{{16243027818277025781ull, 18387512188162703405ull,
+ 16038361785884506645ull, 3717173655951466925ull}},
+{{12457735395636835065ull, 13798038126815383580ull,
+ 12329819125391510605ull, 2323233534969666828ull}},
+{{15572169244546043832ull, 3412489603237065763ull,
+ 15412273906739388257ull, 2904041918712083535ull}},
+{{14853525537255166885ull, 8877298022473720108ull,
+ 14653656364996847417ull, 3630052398390104419ull}},
+{{120162847859406991ull, 15708308546519538040ull,
+ 13705384437818671367ull, 4537565497987630524ull}},
+{{75101779912129369ull, 16735221869215793131ull,
+ 17789237310491445412ull, 2835978436242269077ull}},
+{{13928935280172325423ull, 2472283262810189797ull,
+ 8401488582832143054ull, 3544973045302836347ull}},
+{{3576111044933243067ull, 12313726115367513055ull,
+ 5890174710112790913ull, 4431216306628545434ull}},
+{{9152598430724358773ull, 778549794463613803ull, 8293045212247882225ull,
+ 2769510191642840896ull}},
+{{6829062019978060562ull, 5584873261506905158ull,
+ 10366306515309852781ull, 3461887739553551120ull}},
+{{17759699561827351511ull, 11592777595311019351ull,
+ 12957883144137315976ull, 4327359674441938900ull}},
+{{18017341253783176550ull, 7245485997069387094ull,
+ 17322049001940598293ull, 2704599796526211812ull}},
+{{13298304530374194880ull, 13668543514764121772ull,
+ 3205817178716196250ull, 3380749745657764766ull}},
+{{16622880662967743600ull, 7862307356600376407ull,
+ 13230643510250021121ull, 4225937182072205957ull}},
+{{17306829441995921606ull, 16443157143943705014ull,
+ 10574995203119957152ull, 2641210738795128723ull}},
+{{12410164765640126199ull, 2107202356220079652ull,
+ 8607057985472558537ull, 3301513423493910904ull}},
+{{15512705957050157749ull, 7245688963702487469ull,
+ 10758822481840698171ull, 4126891779367388630ull}},
+{{12001284232370042545ull, 2222712593100360716ull,
+ 2112578032723048453ull, 2579307362104617894ull}},
+{{15001605290462553182ull, 7390076759802838799ull,
+ 11864094577758586374ull, 3224134202630772367ull}},
+{{14140320594650803573ull, 14223912898772691ull,
+ 10218432203770845064ull, 4030167753288465459ull}},
+{{6531857362443058281ull, 8889945561732932ull, 4080677118143084213ull,
+ 2518854845805290912ull}},
+{{8164821703053822851ull, 4622798450379554069ull,
+ 5100846397678855266ull, 3148568557256613640ull}},
+{{14817713147244666468ull, 15001870099829218394ull,
+ 6376057997098569082ull, 3935710696570767050ull}},
+{{13872756735455304447ull, 13987854830820649400ull,
+ 8596722266613993580ull, 2459819185356729406ull}},
+{{17340945919319130558ull, 17484818538525811750ull,
+ 1522530796412716167ull, 3074773981695911758ull}},
+{{12452810362294137390ull, 17244337154729876784ull,
+ 11126535532370671017ull, 3843467477119889697ull}},
+{{7783006476433835869ull, 3860181694065091134ull, 36555680090587530ull,
+ 2402167173199931061ull}},
+{{505386058687519028ull, 14048599154436139726ull,
+ 4657380618540622316ull, 3002708966499913826ull}},
+{{9855104610214174593ull, 17560748943045174657ull,
+ 15045097810030553703ull, 3753386208124892282ull}},
+{{17688655427452328881ull, 17892997117044316016ull,
+ 14014872149696483968ull, 2345866380078057676ull}},
+{{3664075210605859485ull, 3919502322595843405ull,
+ 17518590187120604961ull, 2932332975097572095ull}},
+{{9191780031684712260ull, 9511063921672192160ull,
+ 17286551715473368297ull, 3665416218871965119ull}},
+{{11489725039605890325ull, 16500515920517628104ull,
+ 16996503625914322467ull, 4581770273589956399ull}},
+{{7181078149753681453ull, 8006979441109823613ull,
+ 17540343793837533398ull, 2863606420993722749ull}},
+{{13588033705619489720ull, 785352264532503708ull,
+ 8090371687014753036ull, 3579508026242153437ull}},
+{{16985042132024362150ull, 981690330665629635ull,
+ 14724650627195829199ull, 4474385032802691796ull}},
+{{8309808323301532392ull, 7531085484307100378ull,
+ 18426278678852169057ull, 2796490645501682372ull}},
+{{1163888367272139682ull, 14025542873811263377ull,
+ 4586104274855659705ull, 3495613306877102966ull}},
+{{6066546477517562506ull, 3696870536981915509ull,
+ 14956002380424350440ull, 4369516633596378707ull}},
+{{6097434557662170519ull, 2310544085613697193ull,
+ 7041658478551525073ull, 2730947895997736692ull}},
+{{12233479215505101052ull, 7499866125444509395ull,
+ 8802073098189406341ull, 3413684869997170865ull}},
+{{10680163000953988411ull, 13986518675233024648ull,
+ 15614277391164145830ull, 4267106087496463581ull}},
+{{6675101875596242757ull, 4129888153593252501ull,
+ 12064766378691285096ull, 2666941304685289738ull}},
+{{12955563362922691350ull, 5162360191991565626ull,
+ 5857585936509330562ull, 3333676630856612173ull}},
+{{6971082166798588380ull, 15676322276844232841ull,
+ 11933668439064051106ull, 4167095788570765216ull}},
+{{15886141400317587497ull, 14409387441455033429ull,
+ 7458542774415031941ull, 2604434867856728260ull}},
+{{6022618695114820660ull, 4176676246536628075ull,
+ 9323178468018789927ull, 3255543584820910325ull}},
+{{2916587350466137921ull, 609159289743397190ull,
+ 16265659103450875313ull, 4069429481026137906ull}},
+{{15657925149323499913ull, 11909939602158093003ull,
+ 14777722958084184974ull, 2543393425641336191ull}},
+{{14960720418226986987ull, 5664052465842840446ull,
+ 13860467679177843314ull, 3179241782051670239ull}},
+{{9477528485928957925ull, 16303437619158326366ull,
+ 12713898580544916238ull, 3974052227564587799ull}},
+{{1311769285278210799ull, 5577962493546566075ull,
+ 14863715640481654505ull, 2483782642227867374ull}},
+{{15474769661879927211ull, 11584139135360595497ull,
+ 9356272513747292323ull, 3104728302784834218ull}},
+{{5508404022067745302ull, 9868487900773356468ull,
+ 2471968605329339596ull, 3880910378481042773ull}},
+{{12666124550647116622ull, 15391176974838123600ull,
+ 3850823387544531199ull, 2425568986550651733ull}},
+{{15832655688308895777ull, 14627285200120266596ull,
+ 9425215252858051903ull, 3031961233188314666ull}},
+{{1344075536676568105ull, 13672420481722945342ull,
+ 2558147029217789071ull, 3789951541485393333ull}},
+{{14675105265705018778ull, 15462791828717922694ull,
+ 3904684902474812121ull, 2368719713428370833ull}},
+{{9120509545276497664ull, 5493431730615239656ull,
+ 9492542146520903056ull, 2960899641785463541ull}},
+{{11400636931595622080ull, 6866789663269049570ull,
+ 16477363701578516724ull, 3701124552231829426ull}},
+{{11737084100674651704ull, 13515115576397931789ull,
+ 14910038331913960856ull, 2313202845144893391ull}},
+{{836297070561150918ull, 16893894470497414737ull,
+ 14025861896465063166ull, 2891503556431116739ull}},
+{{5657057356628826552ull, 11893996051266992613ull,
+ 12920641352153941054ull, 3614379445538895924ull}},
+{{11683007714213421094ull, 5644123027228964958ull,
+ 16150801690192426318ull, 4517974306923619905ull}},
+{{2690193802956000280ull, 17362634947300266811ull,
+ 3176722028729184592ull, 2823733941827262441ull}},
+{{17197800308977164061ull, 3256549610415781897ull,
+ 8582588554338868645ull, 3529667427284078051ull}},
+{{7662192330939291365ull, 8682373031447115276ull,
+ 6116549674496197902ull, 4412084284105097564ull}},
+{{14012242243691832911ull, 814797126227059143ull,
+ 13046215583414899497ull, 2757552677565685977ull}},
+{{12903616786187403235ull, 5630182426211211833ull,
+ 2472711423986460659ull, 3446940846957107472ull}},
+{{2294462927452090331ull, 2426042014336626888ull,
+ 3090889279983075824ull, 4308676058696384340ull}},
+{{1434039329657556457ull, 1516276258960391805ull,
+ 11155177836844198198ull, 2692922536685240212ull}},
+{{6404235180499333475ull, 11118717360555265564ull,
+ 13943972296055247747ull, 3366153170856550265ull}},
+{{8005293975624166844ull, 9286710682266694051ull,
+ 3594907314786895972ull, 4207691463570687832ull}},
+{{2697465725551410326ull, 15027566213271459590ull,
+ 2246817071741809982ull, 2629807164731679895ull}},
+{{12595204193794038715ull, 9561085729734548679ull,
+ 16643579394959426190ull, 3287258955914599868ull}},
+{{11132319223815160490ull, 2727985125313410041ull,
+ 2357730169989731122ull, 4109073694893249836ull}},
+{{40170487243393450ull, 6316676721748269180ull, 10696953393098357759ull,
+ 2568171059308281147ull}},
+{{50213109054241813ull, 3284159883757948571ull, 8759505722945559295ull,
+ 3210213824135351434ull}},
+{{13897824441599965978ull, 17940257909979599425ull,
+ 1726010116827173310ull, 4012767280169189293ull}},
+{{1768611248358896880ull, 6600975175309861737ull,
+ 3384599332230677271ull, 2507979550105743308ull}},
+{{6822450078876009004ull, 3639532950709939267ull,
+ 4230749165288346589ull, 3134974437632179135ull}},
+{{3916376580167623351ull, 9161102206814811988ull, 676750438183045332ull,
+ 3918718047040223919ull}},
+{{11671107399459540403ull, 14949060916114033300ull,
+ 7340498051505485188ull, 2449198779400139949ull}},
+{{14588884249324425503ull, 239582071432990009ull,
+ 13787308582809244390ull, 3061498474250174936ull}},
+{{4401047256373368167ull, 9522849626146013320ull,
+ 17234135728511555487ull, 3826873092812718670ull}},
+{{2750654535233355105ull, 12869310043982340181ull,
+ 6159648811892334275ull, 2391795683007949169ull}},
+{{8050004187469081785ull, 11474951536550537322ull,
+ 12311247033292805748ull, 2989744603759936461ull}},
+{{839133197481576423ull, 14343689420688171653ull,
+ 1554000736333843473ull, 3737180754699920577ull}},
+{{2830301257639679216ull, 2047276860289025427ull,
+ 12500465506277121931ull, 2335737971687450360ull}},
+{{17372934627331762732ull, 16394154130643445495ull,
+ 15625581882846402413ull, 2919672464609312950ull}},
+{{17104482265737315511ull, 6657634608022143157ull,
+ 10308605316703227209ull, 3649590580761641188ull}},
+{{7545544776889480677ull, 12933729278455066851ull,
+ 12885756645879034011ull, 4561988225952051485ull}},
+{{2410122476342231471ull, 5777737789820722830ull,
+ 10359440912888090209ull, 2851242641220032178ull}},
+{{12236025132282565147ull, 11833858255703291441ull,
+ 3725929104255336953ull, 3564053301525040223ull}},
+{{1459973360071042721ull, 957264764346950590ull, 45725361891783288ull,
+ 4455066626906300279ull}},
+{{14747541405326565413ull, 598290477716844118ull,
+ 6946107378823446411ull, 2784416641816437674ull}},
+{{9211054719803430958ull, 14582921152428218860ull,
+ 17906006260384083821ull, 3480520802270547092ull}},
+{{11513818399754288698ull, 4393593385253109863ull,
+ 3935763751770553161ull, 4350651002838183866ull}},
+{{14113665527487512292ull, 14275210911851663424ull,
+ 7071538363283983629ull, 2719156876773864916ull}},
+{{17642081909359390365ull, 4008955584532415568ull,
+ 8839422954104979537ull, 3398946095967331145ull}},
+{{3605858312989686340ull, 9622880499092907365ull,
+ 15660964711058612325ull, 4248682619959163931ull}},
+{{4559504454832247915ull, 8320143321146761055ull,
+ 7482259935197938751ull, 2655426637474477457ull}},
+{{1087694550112921990ull, 5788493133006063415ull,
+ 13964510937424811343ull, 3319283296843096821ull}},
+{{15194676242923316199ull, 2623930397830191364ull,
+ 3620580616498850467ull, 4149104121053871027ull}},
+{{273300614972296816ull, 17780857563139727267ull,
+ 18403763949807639205ull, 2593190075658669391ull}},
+{{14176683823997534732ull, 8391013898642495371ull,
+ 18393018918832161103ull, 3241487594573336739ull}},
+{{13109168761569530511ull, 5877081354875731310ull,
+ 18379587630112813475ull, 4051859493216670924ull}},
+{{3581544457553568666ull, 1367332837583638117ull,
+ 2263870231965732614ull, 2532412183260419328ull}},
+{{9088616590369348736ull, 10932538083834323454ull,
+ 2829837789957165767ull, 3165515229075524160ull}},
+{{2137398701106910112ull, 9053986586365516414ull,
+ 3537297237446457209ull, 3956894036344405200ull}},
+{{15170932243473982532ull, 17187956662546917518ull,
+ 2210810773404035755ull, 2473058772715253250ull}},
+{{9740293267487702357ull, 16873259809756258994ull,
+ 11986885503609820502ull, 3091323465894066562ull}},
+{{2951994547504852138ull, 11868202725340547935ull,
+ 5760234842657499820ull, 3864154332367583203ull}},
+{{8762525619831614443ull, 16640998740192618267ull,
+ 1294303767447243435ull, 2415096457729739502ull}},
+{{6341471006362130149ull, 16189562406813384930ull,
+ 10841251746163830102ull, 3018870572162174377ull}},
+{{17150210794807438494ull, 11013580971661955354ull,
+ 18163250701132175532ull, 3773588215202717971ull}},
+{{15330567765182036963ull, 16106860144143497904ull,
+ 9046188678993915755ull, 2358492634501698732ull}},
+{{716465632767994588ull, 15521889161751984477ull,
+ 11307735848742394694ull, 2948115793127123415ull}},
+{{5507268059387381139ull, 10178989415335204788ull,
+ 9522983792500605464ull, 3685144741408904269ull}},
+{{6884085074234226423ull, 12723736769169005985ull,
+ 16515415759053144734ull, 4606430926761130336ull}},
+{{15831768217464861275ull, 3340649462303240836ull,
+ 10322134849408215459ull, 2879019329225706460ull}},
+{{1342966198121524977ull, 18010869883161214758ull,
+ 12902668561760269323ull, 3598774161532133075ull}},
+{{10902079784506682029ull, 17901901335524130543ull,
+ 11516649683772948750ull, 4498467701915166344ull}},
+{{13731328892957758125ull, 6577002316275193685ull,
+ 7197906052358092969ull, 2811542313696978965ull}},
+{{3329103060915033944ull, 12832938913771380011ull,
+ 13609068583875004115ull, 3514427892121223706ull}},
+{{17996436881425956141ull, 11429487623786837109ull,
+ 7787963692988979336ull, 4393034865151529633ull}},
+{{13553616060104916541ull, 7143429764866773193ull,
+ 16396692354186581845ull, 2745646790719706020ull}},
+{{3106962019848981964ull, 13540973224510854396ull,
+ 2049121369023675690ull, 3432058488399632526ull}},
+{{3883702524811227454ull, 7702844493783792187ull,
+ 11784773748134370421ull, 4290073110499540657ull}},
+{{121471068793323207ull, 7120120817828564069ull, 447954564942899657ull,
+ 2681295694062212911ull}},
+{{4763524854419041913ull, 13511837040713092990ull,
+ 14395001261460788283ull, 3351619617577766138ull}},
+{{15177778104878578199ull, 12278110282463978333ull,
+ 8770379539971209546ull, 4189524521972207673ull}},
+{{11791954324762805326ull, 12285504944967374362ull,
+ 17010702258550475726ull, 2618452826232629795ull}},
+{{5516570869098730850ull, 6133509144354442145ull,
+ 16651691804760706754ull, 3273066032790787244ull}},
+{{11507399604800801466ull, 16890258467297828489ull,
+ 2367870682241331826ull, 4091332540988484056ull}},
+{{274595725359419061ull, 15168097560488530710ull,
+ 1479919176400832391ull, 2557082838117802535ull}},
+{{9566616693554049634ull, 14348435932183275483ull,
+ 15684957025783204201ull, 3196353547647253168ull}},
+{{7346584848515174138ull, 4100486859946930642ull,
+ 1159452208519453636ull, 3995441934559066461ull}},
+{{9203301548749371740ull, 11786176324321607459ull,
+ 3030500639538352474ull, 2497151209099416538ull}},
+{{6892440917509326771ull, 5509348368547233516ull,
+ 13011497836277716401ull, 3121439011374270672ull}},
+{{8615551146886658464ull, 11498371479111429799ull,
+ 16264372295347145501ull, 3901798764217838340ull}},
+{{12302248494445243396ull, 9492325183658337576ull,
+ 941860647737190130ull, 2438624227636148963ull}},
+{{15377810618056554245ull, 2642034442718146162ull,
+ 15012383864953651375ull, 3048280284545186203ull}},
+{{9998891235715916998ull, 17137601108679846415ull,
+ 14153793812764676314ull, 3810350355681482754ull}},
+{{13166836049963529980ull, 15322686711352291913ull,
+ 13457807151405310600ull, 2381468972300926721ull}},
+{{2623487007172248763ull, 706614315480813276ull, 2987200883974474539ull,
+ 2976836215376158402ull}},
+{{3279358758965310954ull, 14718325949633180307ull,
+ 12957373141822868981ull, 3721045269220198002ull}},
+{{18190500288849177010ull, 11504796727734431643ull,
+ 12710044232066681017ull, 2325653293262623751ull}},
+{{18126439342634083359ull, 545937854385875842ull,
+ 11275869271655963368ull, 2907066616578279689ull}},
+{{13434677141437828390ull, 682422317982344803ull, 259778534287790498ull,
+ 3633833270722849612ull}},
+{{12181660408369897584ull, 10076399934332706812ull,
+ 324723167859738122ull, 4542291588403562015ull}},
+{{16836909792085961798ull, 10909435977385329661ull,
+ 7120481007553418182ull, 2838932242752226259ull}},
+{{7211079184825288535ull, 4413422934876886269ull,
+ 4288915241014384824ull, 3548665303440282824ull}},
+{{13625534999458998573ull, 5516778668596107836ull,
+ 5361144051267981030ull, 4435831629300353530ull}},
+{{17739331411516649916ull, 17283044723154731109ull,
+ 7962401050469876047ull, 2772394768312720956ull}},
+{{8339106209113648683ull, 16992119885516025983ull,
+ 9953001313087345059ull, 3465493460390901195ull}},
+{{5812196742964672950ull, 16628463838467644575ull,
+ 7829565622931793420ull, 4331866825488626494ull}},
+{{10550151991994002450ull, 1169417862187502051ull,
+ 281792495904982984ull, 2707416765930391559ull}},
+{{8576003971565115158ull, 1461772327734377564ull,
+ 14187298675163392442ull, 3384270957412989448ull}},
+{{10720004964456393948ull, 11050587446522747763ull,
+ 17734123343954240552ull, 4230338696766236810ull}},
+{{4394160093571552266ull, 6906617154076717352ull,
+ 15695513108398788249ull, 2643961685478898006ull}},
+{{5492700116964440332ull, 13244957461023284594ull,
+ 10396019348643709503ull, 3304952106848622508ull}},
+{{16089247183060326223ull, 11944510807851717838ull,
+ 12995024185804636879ull, 4131190133560778135ull}},
+{{5444093470985315985ull, 14382848282548405505ull,
+ 15039419143768979905ull, 2581993833475486334ull}},
+{{11416802857159032886ull, 4143502297903343169ull,
+ 9575901892856449074ull, 3227492291844357918ull}},
+{{435945516166627395ull, 14402749909233954770ull,
+ 2746505329215785534ull, 4034365364805447398ull}},
+{{4884151966031530026ull, 4390032674843833827ull,
+ 15551623886042029671ull, 2521478353003404623ull}},
+{{1493503939112024628ull, 875854825127404380ull,
+ 14827843839125149185ull, 3151847941254255779ull}},
+{{1866879923890030785ull, 5706504549836643379ull,
+ 13923118780479048577ull, 3939809926567819724ull}},
+{{17307701016927126905ull, 15095780389716371871ull,
+ 17925321274654181168ull, 2462381204104887327ull}},
+{{17022940252731520727ull, 422981413435913223ull,
+ 17794965574890338557ull, 3077976505131109159ull}},
+{{16666989297487013005ull, 5140412785222279433ull,
+ 17632020950185535292ull, 3847470631413886449ull}},
+{{3499339283288301272ull, 12436130027618700454ull,
+ 4102484066224877701ull, 2404669144633679031ull}},
+{{13597546140965152398ull, 1710104479241211855ull,
+ 516419064353709223ull, 3005836430792098789ull}},
+{{12385246657779052593ull, 15972688654333678531ull,
+ 5257209848869524432ull, 3757295538490123486ull}},
+{{5434936151898213919ull, 9982930408958549082ull,
+ 17120814210825616482ull, 2348309711556327178ull}},
+{{16017042226727543207ull, 3255290974343410544ull,
+ 12177645726677244795ull, 2935387139445408973ull}},
+{{1574558709699877392ull, 17904171773211426893ull,
+ 1386999103064392281ull, 3669233924306761217ull}},
+{{6579884405552234644ull, 8545156661232119904ull,
+ 6345434897257878256ull, 4586542405383451521ull}},
+{{4112427753470146653ull, 5340722913270074940ull,
+ 15495111856854643670ull, 2866589003364657200ull}},
+{{5140534691837683316ull, 15899275678442369483ull,
+ 922145747358752971ull, 3583236254205821501ull}},
+{{1813982346369716241ull, 15262408579625573950ull,
+ 5764368202625829118ull, 4479045317757276876ull}},
+{{14968797021763236363ull, 4927319343838595814ull,
+ 12826102163495919007ull, 2799403323598298047ull}},
+{{9487624240349269645ull, 1547463161370856864ull,
+ 11420941685942510855ull, 3499254154497872559ull}},
+{{11859530300436587056ull, 15769387006995734792ull,
+ 9664491089000750664ull, 4374067693122340699ull}},
+{{7412206437772866910ull, 9855866879372334245ull,
+ 3734463921411775213ull, 2733792308201462937ull}},
+{{13876944065643471542ull, 16931519617642805710ull,
+ 9279765920192106920ull, 3417240385251828671ull}},
+{{8122808045199563619ull, 2717655448343955522ull,
+ 6988021381812745747ull, 4271550481564785839ull}},
+{{9688441046677115166ull, 17839435719710829865ull,
+ 11285042391274047947ull, 2669719050977991149ull}},
+{{16722237326773781862ull, 17687608631211149427ull,
+ 271244933810396222ull, 3337148813722488937ull}},
+{{16291110640039839423ull, 12886138752159160976ull,
+ 4950742185690383182ull, 4171436017153111171ull}},
+{{10181944150024899640ull, 3442150701672087706ull,
+ 788370856842795537ull, 2607147510720694482ull}},
+{{3504058150676348741ull, 8914374395517497537ull,
+ 10208835607908270229ull, 3258934388400868102ull}},
+{{8991758706772823831ull, 15754654012824259825ull,
+ 3537672473030561978ull, 4073667985501085128ull}},
+{{17149064237801484654ull, 14458344776442550294ull,
+ 2211045295644101236ull, 2546042490938178205ull}},
+{{12212958260397080010ull, 18072930970553187868ull,
+ 7375492637982514449ull, 3182553113672722756ull}},
+{{15266197825496350012ull, 8756105657909321123ull,
+ 9219365797478143062ull, 3978191392090903445ull}},
+{{7235530631721524806ull, 860880017765937798ull, 8067946632637533366ull,
+ 2486369620056814653ull}},
+{{18267785326506681815ull, 10299472059062198055ull,
+ 14696619309224304611ull, 3107962025071018316ull}},
+{{18223045639705964365ull, 8262654055400359665ull,
+ 18370774136530380764ull, 3884952531338772895ull}},
+{{4471874497175145872ull, 14387530821480000599ull,
+ 18399262862972569833ull, 2428095332086733059ull}},
+{{978157103041544436ull, 4149355471567837037ull,
+ 18387392560288324388ull, 3035119165108416324ull}},
+{{5834382397229318449ull, 5186694339459796296ull,
+ 4537496626650853869ull, 3793898956385520406ull}},
+{{3646488998268324031ull, 5547526971376066637ull,
+ 16670993446938947380ull, 2371186847740950253ull}},
+{{9169797266262792942ull, 6934408714220083296ull,
+ 7003683753391520513ull, 2963983559676187817ull}},
+{{11462246582828491178ull, 13279696911202492024ull,
+ 13366290710166788545ull, 3704979449595234771ull}},
+{{7163904114267806986ull, 1382281541860475659ull,
+ 6048088684640548889ull, 2315612155997021732ull}},
+{{4343194124407370829ull, 6339537945752982478ull,
+ 7560110855800686111ull, 2894515194996277165ull}},
+{{14652364692363989344ull, 3312736413763840193ull,
+ 14061824588178245543ull, 3618143993745346456ull}},
+{{4480397810172822968ull, 17975978572486963954ull,
+ 17577280735222806928ull, 4522679992181683070ull}},
+{{7411934649785402259ull, 11234986607804352471ull,
+ 6374114441086866426ull, 2826674995113551919ull}},
+{{4653232293804364919ull, 4820361222900664781ull,
+ 3355957032931195129ull, 3533343743891939899ull}},
+{{10428226385682844053ull, 10637137547053218880ull,
+ 18030004346446157623ull, 4416679679864924873ull}},
+{{6517641491051777533ull, 13565739994549343656ull,
+ 4351223688887766658ull, 2760424799915578046ull}},
+{{8147051863814721917ull, 7733802956331903762ull,
+ 14662401647964484131ull, 3450530999894472557ull}},
+{{960442792913626588ull, 5055567676987491799ull, 4492944004673441452ull,
+ 4313163749868090697ull}},
+{{7517805773212098474ull, 12383101834971958182ull,
+ 14337305048989370667ull, 2695727343667556685ull}},
+{{173885179660347284ull, 10867191275287559824ull,
+ 4086573255954549622ull, 3369659179584445857ull}},
+{{217356474575434105ull, 4360617057254673972ull, 9719902588370574932ull,
+ 4212073974480557321ull}},
+{{9359219833464422124ull, 11948757697638947040ull,
+ 17604154163800079092ull, 2632546234050348325ull}},
+{{11699024791830527654ull, 14935947122048683800ull,
+ 8170134649467935153ull, 3290682792562935407ull}},
+{{14623780989788159568ull, 4834875847278691038ull,
+ 5600982293407531038ull, 4113353490703669259ull}},
+{{4528177100190211826ull, 16856855459831345611ull,
+ 1194770924166012946ull, 2570845931689793287ull}},
+{{1048535356810376878ull, 11847697287934406206ull,
+ 15328521710489679895ull, 3213557414612241608ull}},
+{{10534041232867746906ull, 10197935591490619853ull,
+ 713908064402548253ull, 4016946768265302011ull}},
+{{8889618779756035768ull, 8679552753895331360ull,
+ 16587093604747450322ull, 2510591730165813756ull}},
+{{11112023474695044710ull, 1626068905514388392ull,
+ 2287122932224761287ull, 3138239662707267196ull}},
+{{13890029343368805888ull, 15867644187175149202ull,
+ 2858903665280951608ull, 3922799578384083995ull}},
+{{13292954358032891584ull, 9917277616984468251ull,
+ 17927715855296452419ull, 2451749736490052496ull}},
+{{12004506929113726576ull, 7784911002803197410ull,
+ 3962900745411013908ull, 3064687170612565621ull}},
+{{5782261624537382412ull, 9731138753503996763ull,
+ 9565311950191155289ull, 3830858963265707026ull}},
+{{1308070506122170056ull, 17611176767008467737ull,
+ 10590005987296859959ull, 2394286852041066891ull}},
+{{6246774151080100473ull, 17402284940333196767ull,
+ 8625821465693687045ull, 2992858565051333614ull}},
+{{3196781670422737688ull, 7917798120134332247ull,
+ 1558904795262332999ull, 3741073206314167018ull}},
+{{8915517571655292911ull, 11866152852725039510ull,
+ 5586001515466346028ull, 2338170753946354386ull}},
+{{1921024927714340331ull, 14832691065906299388ull,
+ 16205873931187708343ull, 2922713442432942982ull}},
+{{2401281159642925413ull, 13929177813955486331ull,
+ 11033970377129859621ull, 3653391803041178728ull}},
+{{16836659504835820478ull, 3576414212162194201ull,
+ 13792462971412324527ull, 4566739753801473410ull}},
+{{3605383162881305943ull, 9152787910242453232ull,
+ 13231975375560090733ull, 2854212346125920881ull}},
+{{4506728953601632429ull, 16052670906230454444ull,
+ 2704911164167949704ull, 3567765432657401102ull}},
+{{5633411192002040536ull, 1619094559078516439ull,
+ 12604510992064712939ull, 4459706790821751377ull}},
+{{10438411022642357191ull, 17152835163919930438ull,
+ 960290342399363730ull, 2787316744263594611ull}},
+{{3824641741448170681ull, 12217671918045137240ull,
+ 15035420983281368375ull, 3484145930329493263ull}},
+{{4780802176810213351ull, 10660403879129033646ull,
+ 14182590210674322565ull, 4355182412911866579ull}},
+{{16823059415788547056ull, 8968595433669339980ull,
+ 6558275872457757651ull, 2721989008069916612ull}},
+{{2582080196026132204ull, 6599058273659287072ull,
+ 8197844840572197064ull, 3402486260087395765ull}},
+{{3227600245032665255ull, 8248822842074108840ull,
+ 14858992069142634234ull, 4253107825109244706ull}},
+{{2017250153145415785ull, 9767200294723705929ull,
+ 13898556061641534300ull, 2658192390693277941ull}},
+{{7133248709859157635ull, 12209000368404632411ull,
+ 3538137021769754163ull, 3322740488366597427ull}},
+{{4304874868896559139ull, 10649564442078402610ull,
+ 18257729332494356416ull, 4153425610458246783ull}},
+{{7302232811487737366ull, 6655977776299001631ull,
+ 18328609860450054616ull, 2595891006536404239ull}},
+{{4516104995932283804ull, 8319972220373752039ull,
+ 18299076307135180366ull, 3244863758170505299ull}},
+{{1033445226487966851ull, 1176593238612414241ull,
+ 18262159365491587554ull, 4056079697713131624ull}},
+{{12175118312623449042ull, 5347056792560146804ull,
+ 11413849603432242221ull, 2535049811070707265ull}},
+{{15218897890779311302ull, 11295507009127571409ull,
+ 432253949008139064ull, 3168812263838384082ull}},
+{{5188564308191975416ull, 14119383761409464262ull,
+ 9763689473114949638ull, 3961015329797980102ull}},
+{{17077910747902148347ull, 4212928832453527259ull,
+ 1490619902269455620ull, 2475634581123737564ull}},
+{{16735702416450297529ull, 5266161040566909074ull,
+ 1863274877836819525ull, 3094543226404671955ull}},
+{{11696255983708096104ull, 11194387319136024247ull,
+ 16164151652578188118ull, 3868179033005839943ull}},
+{{14227689017458641921ull, 2384806056032627250ull,
+ 17020123810502449430ull, 2417611895628649964ull}},
+{{8561239234968526593ull, 12204379606895559871ull,
+ 2828410689418510171ull, 3022014869535812456ull}},
+{{6089863025283270337ull, 10643788490192061935ull,
+ 3535513361773137714ull, 3777518586919765570ull}},
+{{10723693418443125817ull, 11264053824797426613ull,
+ 6821381869535598975ull, 2360949116824853481ull}},
+{{18016302791481295175ull, 9468381262569395362ull,
+ 13138413355346886623ull, 2951186396031066851ull}},
+{{13297006452496843161ull, 7223790559784356299ull,
+ 11811330675756220375ull, 3688982995038833564ull}},
+{{12009572047193666047ull, 4418052181303057470ull,
+ 14764163344695275469ull, 4611228743798541955ull}},
+{{2894296511068653375ull, 5067125622528104871ull,
+ 6921759081220853216ull, 2882017964874088722ull}},
+{{17452928694117980431ull, 6333907028160131088ull,
+ 17875570888380842328ull, 3602522456092610902ull}},
+{{3369416793937923923ull, 7917383785200163861ull,
+ 13121091573621277102ull, 4503153070115763628ull}},
+{{4411728505424896404ull, 336678847322714509ull,
+ 17424054270368073997ull, 2814470668822352267ull}},
+{{10126346650208508409ull, 5032534577580781040ull,
+ 17168381819532704592ull, 3518088336027940334ull}},
+{{12657933312760635511ull, 6290668221975976300ull,
+ 12237105237561104932ull, 4397610420034925418ull}},
+{{17134580357330173003ull, 13155039675589760995ull,
+ 12259876791903078486ull, 2748506512521828386ull}},
+{{16806539428235328349ull, 7220427557632425436ull,
+ 6101473953024072300ull, 3435633140652285483ull}},
+{{2561430211584608820ull, 9025534447040531796ull,
+ 3015156422852702471ull, 4294541425815356854ull}},
+{{10824265919095156321ull, 12558488057041414228ull,
+ 15719530819565102756ull, 2684088391134598033ull}},
+{{13530332398868945401ull, 15698110071301767785ull,
+ 5814355469174214733ull, 3355110488918247542ull}},
+{{3077857443304018039ull, 5787579533845046020ull,
+ 16491316373322544225ull, 4193888111147809427ull}},
+{{11147032938919787083ull, 15146452254721623522ull,
+ 8001229724112896188ull, 2621180069467380892ull}},
+{{4710419136794958045ull, 486321244692477787ull,
+ 10001537155141120236ull, 3276475086834226115ull}},
+{{1276337902566309652ull, 607901555865597234ull, 7890235425499012391ull,
+ 4095593858542782644ull}},
+{{5409397207531331437ull, 7297467500057080127ull,
+ 14154769177791658552ull, 2559746161589239152ull}},
+{{2150060490986776392ull, 9121834375071350159ull,
+ 17693461472239573190ull, 3199682701986548940ull}},
+{{16522633669015634202ull, 2178920931984411890ull,
+ 3670082766589914872ull, 3999603377483186176ull}},
+{{14938332061562159280ull, 1361825582490257431ull,
+ 2293801729118696795ull, 2499752110926991360ull}},
+{{14061229058525311196ull, 15537340033394985501ull,
+ 2867252161398370993ull, 3124690138658739200ull}},
+{{3741478267874475283ull, 5586616986461568165ull,
+ 3584065201747963742ull, 3905862673323424000ull}},
+{{4644266926635241004ull, 17326693671820643815ull,
+ 2240040751092477338ull, 2441164170827140000ull}},
+{{1193647639866663351ull, 12434995052921028961ull,
+ 2800050938865596673ull, 3051455213533925000ull}},
+{{6103745568260717093ull, 1708685760869122489ull,
+ 3500063673581995842ull, 3814319016917406250ull}},
+{{15344056026231417943ull, 5679614618970589459ull,
+ 6799225814416135305ull, 2383949385573378906ull}},
+{{14568384014361884525ull, 11711204292140624728ull,
+ 17722404304874944939ull, 2979936731966723632ull}},
+{{18210480017952355656ull, 10027319346748393006ull,
+ 3706261307384129558ull, 3724920914958404541ull}},
+{{6769863992792834381ull, 1655388573290357725ull,
+ 4622256326328774926ull, 2328075571849002838ull}},
+{{13074016009418430880ull, 11292607753467722964ull,
+ 15001192444765744465ull, 2910094464811253547ull}},
+{{16342520011773038600ull, 280701636552489993ull,
+ 14139804537529792678ull, 3637618081014066934ull}},
+{{6593091959434134538ull, 9574249082545388300ull,
+ 8451383635057465039ull, 4547022601267583668ull}},
+{{13344054511501109895ull, 12901434704231949543ull,
+ 14505486808765691457ull, 2841889125792239792ull}},
+{{12068382120948999464ull, 2291735325007773217ull,
+ 18131858510957114322ull, 3552361407240299740ull}},
+{{1250419595904085618ull, 12088041193114492330ull,
+ 4218079064986841286ull, 4440451759050374676ull}},
+{{5393198265867441415ull, 2943339727269169802ull,
+ 11859671452471551612ull, 2775282349406484172ull}},
+{{15964869869189077577ull, 3679174659086462252ull,
+ 14824589315589439515ull, 3469102936758105215ull}},
+{{1509343262776795355ull, 18434026379140241528ull,
+ 13919050626059411489ull, 4336378670947631519ull}},
+{{943339539235497097ull, 4603737459321569099ull,
+ 15616935668928214037ull, 2710236669342269699ull}},
+{{15014232479326535083ull, 10366357842579349277ull,
+ 14909483567732879642ull, 3387795836677837124ull}},
+{{4932732543876005142ull, 3734575266369410789ull, 190110385956547937ull,
+ 4234744795847296406ull}},
+{{5388800849136197166ull, 13863324587549351503ull,
+ 13953877046505006172ull, 2646715497404560253ull}},
+{{2124315042992858553ull, 17329155734436689379ull,
+ 3607288252849094003ull, 3308394371755700317ull}},
+{{16490451859023236904ull, 17049758649618473819ull,
+ 9120796334488755408ull, 4135492964694625396ull}},
+{{8000689402675829113ull, 10656099156011546137ull,
+ 14923869745910247938ull, 2584683102934140872ull}},
+{{14612547771772174295ull, 4096751908159656863ull,
+ 208093108678258307ull, 3230853878667676091ull}},
+{{13653998696287829965ull, 509253866772183175ull,
+ 14095174441129986596ull, 4038567348334595113ull}},
+{{15451278212820975584ull, 9541655703587390292ull,
+ 1891954998065159766ull, 2524104592709121946ull}},
+{{867353692316667864ull, 2703697592629462058ull,
+ 11588315784436225516ull, 3155130740886402432ull}},
+{{10307564152250610638ull, 3379621990786827572ull,
+ 14485394730545281895ull, 3943913426108003040ull}},
+{{15665599632011407457ull, 9029792771882849088ull,
+ 9053371706590801184ull, 2464945891317501900ull}},
+{{1135255466304707705ull, 11287240964853561361ull,
+ 11316714633238501480ull, 3081182364146877375ull}},
+{{6030755351308272535ull, 14109051206066951701ull,
+ 9534207273120738946ull, 3851477955183596719ull}},
+{{6075065103781364287ull, 13429843022219232717ull,
+ 12876408573341543697ull, 2407173721989747949ull}},
+{{12205517398154093262ull, 2952245722491877184ull,
+ 2260452661394765910ull, 3008967152487184937ull}},
+{{15256896747692616578ull, 12913679189969622288ull,
+ 7437251845170845291ull, 3761208940608981171ull}},
+{{9535560467307885361ull, 5765206484517319978ull,
+ 2342439394018084355ull, 2350755587880613232ull}},
+{{2696078547280080893ull, 2594822087219262069ull,
+ 2928049242522605444ull, 2938444484850766540ull}},
+{{7981784202527489021ull, 3243527609024077586ull,
+ 3660061553153256805ull, 3673055606063458175ull}},
+{{753858216304585468ull, 8666095529707484887ull,
+ 18410134996723734718ull, 4591319507579322718ull}},
+{{7388690412831447773ull, 804623687639790150ull, 6894648354524946295ull,
+ 2869574692237076699ull}},
+{{12490979184533909ull, 14840837664831901400ull, 4006624424728794964ull,
+ 3586968365296345874ull}},
+{{15613723980667386ull, 104303007330325134ull, 14231652567765769514ull,
+ 4483710456620432342ull}},
+{{13844816632770080828ull, 4676875398008841112ull,
+ 4283096836426218042ull, 2802319035387770214ull}},
+{{17306020790962601035ull, 15069466284365827198ull,
+ 14577243082387548360ull, 3502898794234712767ull}},
+{{12409153951848475486ull, 390088781747732382ull,
+ 13609867834557047547ull, 4378623492793390959ull}},
+{{3144035201477909275ull, 16384706553088190403ull,
+ 15423696424239236572ull, 2736639682995869349ull}},
+{{17765102057129550305ull, 2034139117650686387ull,
+ 5444562475016882004ull, 3420799603744836687ull}},
+{{17594691552984549978ull, 2542673897063357984ull,
+ 2194017075343714601ull, 4275999504681045859ull}},
+{{10996682220615343736ull, 13118386231733068500ull,
+ 17512161736585679289ull, 2672499690425653661ull}},
+{{13745852775769179670ull, 2562924734384171913ull,
+ 8055144115449935400ull, 3340624613032067077ull}},
+{{3347257914429310876ull, 3203655917980214892ull,
+ 14680616162739807154ull, 4175780766290083846ull}},
+{{11315408233373095105ull, 6613970967165022211ull,
+ 4563699083284991567ull, 2609862978931302404ull}},
+{{9532574273288980978ull, 3655777690528889860ull,
+ 5704623854106239459ull, 3262328723664128005ull}},
+{{11915717841611226222ull, 18404780168443276037ull,
+ 11742465836060187227ull, 4077910904580160006ull}},
+{{9753166660220710341ull, 9197144596063353571ull,
+ 2727355129110229113ull, 2548694315362600004ull}},
+{{7579772306848500022ull, 16108116763506579868ull,
+ 3409193911387786391ull, 3185867894203250005ull}},
+{{9474715383560625027ull, 15523459935955836931ull,
+ 8873178407662120893ull, 3982334867754062506ull}},
+{{3615854105511696690ull, 12008005469186092034ull,
+ 10157422523216213462ull, 2488959292346289066ull}},
+{{13743189668744396671ull, 5786634799627839234ull,
+ 3473406117165491020ull, 3111199115432861333ull}},
+{{7955615049075720030ull, 7233293499534799043ull,
+ 8953443664884251679ull, 3888998894291076666ull}},
+{{2666416396458631067ull, 11438337464850331258ull,
+ 10207588308980045203ull, 2430624308931922916ull}},
+{{12556392532428064642ull, 9686235812635526168ull,
+ 12759485386225056504ull, 3038280386164903645ull}},
+{{15695490665535080802ull, 12107794765794407710ull,
+ 2114298677499156918ull, 3797850482706129557ull}},
+{{5197995647532037597ull, 2955685710194116915ull,
+ 3627279682650667026ull, 2373656551691330973ull}},
+{{1885808540987659093ull, 12917979174597421952ull,
+ 9145785621740721686ull, 2967070689614163716ull}},
+{{2357260676234573866ull, 6924101931392001632ull,
+ 11432232027175902108ull, 3708838362017704645ull}},
+{{1473287922646608666ull, 13550935743974776828ull,
+ 9450988026198632769ull, 2318023976261065403ull}},
+{{1841609903308260833ull, 3103611624686307323ull,
+ 7202049014320903058ull, 2897529970326331754ull}},
+{{16137070434417489753ull, 13102886567712659961ull,
+ 18225933304755904630ull, 3621912462907914692ull}},
+{{6336279987739698479ull, 7155236172786049144ull,
+ 4335672557235329172ull, 4527390578634893366ull}},
+{{3960174992337311550ull, 13695394644846056523ull,
+ 16544853403554244444ull, 2829619111646808353ull}},
+{{338532721994251533ull, 17119243306057570654ull,
+ 6846008699160641843ull, 3537023889558510442ull}},
+{{9646537939347590224ull, 16787368114144575413ull,
+ 17780882910805578112ull, 4421279861948138052ull}},
+{{8334929221305937842ull, 10492105071340359633ull,
+ 1889679782398710512ull, 2763299913717586283ull}},
+{{15030347545059810206ull, 13115131339175449541ull,
+ 16197157783280551852ull, 3454124892146982853ull}},
+{{4952876376042599046ull, 16393914173969311927ull,
+ 6411389173818526103ull, 4317656115183728567ull}},
+{{10013076762667706260ull, 17163725386371901810ull,
+ 10924647261277660670ull, 2698535071989830354ull}},
+{{3292973916479857017ull, 12231284696110101455ull,
+ 4432437039742300030ull, 3373168839987287943ull}},
+{{17951275450881984983ull, 6065733833282851010ull,
+ 928860281250487134ull, 4216461049984109929ull}},
+{{15831233175228628518ull, 17626141701083945593ull,
+ 12109752721850024218ull, 2635288156240068705ull}},
+{{5953983413753621936ull, 12809305089500156184ull,
+ 1302132847030366561ull, 3294110195300085882ull}},
+{{7442479267192027420ull, 2176573306593031518ull,
+ 10851038095642734010ull, 4117637744125107352ull}},
+{{39863523567629234ull, 5972044335048032603ull, 6781898809776708756ull,
+ 2573523590078192095ull}},
+{{13884887459741700254ull, 7465055418810040753ull,
+ 3865687493793498041ull, 3216904487597740119ull}},
+{{3521051269394961605ull, 13943005291939938846ull,
+ 220423348814484647ull, 4021130609497175149ull}},
+{{16035715098654014715ull, 15631907335103543634ull,
+ 2443607602222746856ull, 2513206630935734468ull}},
+{{10821271836462742586ull, 1093140095169877927ull,
+ 3054509502778433571ull, 3141508288669668085ull}},
+{{8914903777151040329ull, 15201483174244511121ull,
+ 8429822896900429867ull, 3926885360837085106ull}},
+{{17101029906787869966ull, 7195083974689125498ull,
+ 9880325328990156571ull, 2454303350523178191ull}},
+{{12152915346630061649ull, 4382168949934018969ull,
+ 7738720642810307810ull, 3067879188153972739ull}},
+{{1356086128005413349ull, 14701083224272299520ull,
+ 5061714785085496858ull, 3834848985192465924ull}},
+{{847553830003383343ull, 13799863033597575104ull,
+ 12386943777533211344ull, 2396780615745291202ull}},
+{{1059442287504229179ull, 17249828791996968880ull,
+ 6260307685061738372ull, 2995975769681614003ull}},
+{{1324302859380286474ull, 3115541916286659484ull,
+ 3213698587899785062ull, 3744969712102017504ull}},
+{{10051061323967454854ull, 15782271752961325889ull,
+ 2008561617437365663ull, 2340606070063760940ull}},
+{{17175512673386706472ull, 15116153672774269457ull,
+ 2510702021796707079ull, 2925757587579701175ull}},
+{{7634332786451219377ull, 14283506072540448918ull,
+ 16973435582528047561ull, 3657196984474626468ull}},
+{{319543946209248414ull, 4019324535393397436ull, 2770050404450507836ull,
+ 4571496230593283086ull}},
+{{9423087003235556067ull, 11735449871475649205ull,
+ 15566339558063731109ull, 2857185144120801928ull}},
+{{16390544772471832987ull, 834254284062397794ull,
+ 1011180373870112271ull, 3571481430151002411ull}},
+{{11264808928735015426ull, 14877875910360160955ull,
+ 15099033522619804050ull, 4464351787688753013ull}},
+{{4734662571245690689ull, 13910358462402488501ull,
+ 11742738960851071483ull, 2790219867305470633ull}},
+{{10530014232484501266ull, 12776262059575722722ull,
+ 843365645781675642ull, 3487774834131838292ull}},
+{{3939145753750850774ull, 6746955537614877595ull,
+ 1054207057227094553ull, 4359718542664797865ull}},
+{{156123086880587782ull, 15746062257077768257ull,
+ 12188094456835403855ull, 2724824089165498665ull}},
+{{4806839877028122631ull, 15070891802919822417ull,
+ 1400060015762091107ull, 3406030111456873332ull}},
+{{10620235864712541193ull, 14226928735222390117ull,
+ 1750075019702613884ull, 4257537639321091665ull}},
+{{8943490424659032198ull, 18115202496368769631ull,
+ 12623011933382603437ull, 2660961024575682290ull}},
+{{6567677012396402343ull, 8808945065178798327ull,
+ 6555392879873478489ull, 3326201280719602863ull}},
+{{3597910247068115025ull, 15622867349900885813ull,
+ 3582555081414460207ull, 4157751600899503579ull}},
+{{4554536913631265843ull, 16681821121329135489ull,
+ 18379997990379895293ull, 2598594750562189736ull}},
+{{10304857160466470207ull, 7017218346379255649ull,
+ 4528253414265317501ull, 3248243438202737171ull}},
+{{17492757469010475663ull, 13383208951401457465ull,
+ 1048630749404258972ull, 4060304297753421464ull}},
+{{4015444390490465433ull, 17587877631480686724ull,
+ 655394218377661857ull, 2537690186095888415ull}},
+{{5019305488113081792ull, 8149788984068694693ull,
+ 14654300828254241034ull, 3172112732619860518ull}},
+{{10885817878568740143ull, 963864193231092558ull,
+ 9094503998463025485ull, 3965140915774825648ull}},
+{{2191950155678074686ull, 2908258129983126801ull,
+ 5684064999039390928ull, 2478213072359266030ull}},
+{{7351623713024981261ull, 3635322662478908501ull,
+ 16328453285654014468ull, 3097766340449082537ull}},
+{{13801215659708614480ull, 4544153328098635626ull,
+ 6575508551785354373ull, 3872207925561353172ull}},
+{{13237445805745271954ull, 5145938839275341218ull,
+ 13333064881720622291ull, 2420129953475845732ull}},
+{{7323435220326814135ull, 1820737530666788619ull,
+ 16666331102150777864ull, 3025162441844807165ull}},
+{{4542608006981129764ull, 2275921913333485774ull,
+ 6997855822406308618ull, 3781453052306008957ull}},
+{{16674188059645369815ull, 6034137214260816512ull,
+ 6679502898217636838ull, 2363408157691255598ull}},
+{{2395991000847160653ull, 16766043554680796449ull,
+ 17572750659626821855ull, 2954260197114069497ull}},
+{{7606674769486338720ull, 16345868424923607657ull,
+ 8130880269251363607ull, 3692825246392586872ull}},
+{{16283386776997431460ull, 17133696793218336641ull,
+ 5081800168282102254ull, 2308015778995366795ull}},
+{{6519175415964625613ull, 12193748954668144994ull,
+ 1740564191925239914ull, 2885019723744208494ull}},
+{{17372341306810557824ull, 6018814156480405434ull,
+ 11399077276761325701ull, 3606274654680260617ull}},
+{{12492054596658421472ull, 12135203714027894697ull,
+ 413788540669493414ull, 4507843318350325772ull}},
+{{890005095270431564ull, 2972816302840046282ull, 9481989874773209192ull,
+ 2817402073968953607ull}},
+{{10335878405942815263ull, 3716020378550057852ull,
+ 7240801325039123586ull, 3521752592461192009ull}},
+{{12919848007428519078ull, 13868397510042348123ull,
+ 13662687674726292386ull, 4402190740576490011ull}},
+{{5769061995429130472ull, 13279434462203855481ull,
+ 6233336787490238789ull, 2751369212860306257ull}},
+{{11823013512713800994ull, 2764235022472655639ull,
+ 12403357002790186391ull, 3439211516075382821ull}},
+{{10167080872464863339ull, 17290351833372983261ull,
+ 1669138198205569276ull, 4299014395094228527ull}},
+{{8660268554504233539ull, 1583097859003338730ull,
+ 7960740401519562654ull, 2686883996933892829ull}},
+{{1601963656275516115ull, 11202244360608949221ull,
+ 14562611520326841221ull, 3358604996167366036ull}},
+{{6614140588771783048ull, 167747395479022814ull,
+ 18203264400408551527ull, 4198256245209207545ull}},
+{{17968895923264528117ull, 7022371149815471114ull,
+ 4459511222614262848ull, 2623910153255754716ull}},
+{{13237747867225884338ull, 8777963937269338893ull,
+ 5574389028267828560ull, 3279887691569693395ull}},
+{{2712126778750191711ull, 10972454921586673617ull,
+ 2356300266907397796ull, 4099859614462116744ull}},
+{{13224294282787339580ull, 16081156362846446818ull,
+ 1472687666817123622ull, 2562412259038822965ull}},
+{{7306995816629398666ull, 10878073416703282715ull,
+ 6452545601948792432ull, 3203015323798528706ull}},
+{{4522058752359360429ull, 13597591770879103394ull,
+ 17289054039290766348ull, 4003769154748160882ull}},
+{{7437972738651988172ull, 17721866893654215429ull,
+ 15417344792984116871ull, 2502355721717600551ull}},
+{{13909151941742373119ull, 17540647598640381382ull,
+ 14659994972802758185ull, 3127944652147000689ull}},
+{{8163067890323190591ull, 8090751443018313016ull,
+ 4489935660721284020ull, 3909930815183750862ull}},
+{{5101917431451994119ull, 14280091688741221443ull,
+ 16641267843232966224ull, 2443706759489844288ull}},
+{{1765710770887604745ull, 17850114610926526804ull,
+ 2354840730331656164ull, 3054633449362305361ull}},
+{{2207138463609505931ull, 3865899189948606889ull,
+ 7555236931341958110ull, 3818291811702881701ull}},
+{{12908676585824410967ull, 16251245049000043017ull,
+ 7027866091302417770ull, 2386432382314301063ull}},
+{{2300787676998349997ull, 11090684274395277964ull,
+ 4173146595700634309ull, 2983040477892876329ull}},
+{{2875984596247937496ull, 28297287711933743ull, 9828119263053180791ull,
+ 3728800597366095411ull}},
+{{8715019400296042791ull, 6935214832461040445ull,
+ 3836731530194544042ull, 2330500373353809632ull}},
+{{15505460268797441393ull, 17892390577431076364ull,
+ 4795914412743180052ull, 2913125466692262040ull}},
+{{935081262287250125ull, 3918744148079293840ull, 5994893015928975066ull,
+ 3641406833365327550ull}},
+{{1168851577859062656ull, 14121802221953893108ull,
+ 16716988306765994640ull, 4551758541706659437ull}},
+{{9953904273016689968ull, 8826126388721183192ull,
+ 12753960700942440602ull, 2844849088566662148ull}},
+{{12442380341270862460ull, 1809285949046703182ull,
+ 15942450876178050753ull, 3556061360708327685ull}},
+{{6329603389733802267ull, 6873293454735766882ull,
+ 6093005539940399729ull, 4445076700885409607ull}},
+{{8567688137011014321ull, 15825023455278324061ull,
+ 10725657490103831686ull, 2778172938053381004ull}},
+{{15321296189691155805ull, 10557907282243129268ull,
+ 13407071862629789608ull, 3472716172566726255ull}},
+{{704876163404393140ull, 13197384102803911586ull,
+ 12147153809859849106ull, 4340895215708407819ull}},
+{{5052233620555133617ull, 12860051082679832645ull,
+ 5286128121948711739ull, 2713059509817754887ull}},
+{{10926978044121304925ull, 11463377834922402902ull,
+ 1995974134008501770ull, 3391324387272193609ull}},
+{{4435350518296855348ull, 5105850256798227820ull,
+ 7106653685938015117ull, 4239155484090242011ull}},
+{{11995466110790310401ull, 5496999419712586339ull,
+ 2135815544497565496ull, 2649472177556401257ull}},
+{{10382646620060500097ull, 6871249274640732924ull,
+ 7281455449049344774ull, 3311840221945501571ull}},
+{{12978308275075625121ull, 17812433630155691963ull,
+ 4490133292884293063ull, 4139800277431876964ull}},
+{{5805599662708571749ull, 18050300046488389333ull,
+ 12029705344907458972ull, 2587375173394923102ull}},
+{{11868685596813102590ull, 4116130984400935050ull,
+ 5813759644279547908ull, 3234218966743653878ull}},
+{{5612484959161602429ull, 5145163730501168813ull,
+ 16490571592204210693ull, 4042773708429567347ull}},
+{{5813646108689695470ull, 5521570340776924460ull,
+ 8000764235913937731ull, 2526733567768479592ull}},
+{{7267057635862119338ull, 2290276907543767671ull,
+ 10000955294892422164ull, 3158416959710599490ull}},
+{{4472136026400261268ull, 2862846134429709589ull,
+ 3277822081760751897ull, 3948021199638249363ull}},
+{{5100928025713857245ull, 13318493880087038253ull,
+ 18189539865596327599ull, 2467513249773905851ull}},
+{{10987846050569709460ull, 12036431331681409912ull,
+ 18125238813568021595ull, 3084391562217382314ull}},
+{{13734807563212136825ull, 10433853146174374486ull,
+ 13433176480105251186ull, 3855489452771727893ull}},
+{{3972568708580197612ull, 11132844234786371958ull,
+ 10701578309279475943ull, 2409680907982329933ull}},
+{{14189082922580022823ull, 9304369275055577043ull,
+ 17988658905026732833ull, 3012101134977912416ull}},
+{{13124667634797640624ull, 16242147612246859208ull,
+ 4039079557573864425ull, 3765126418722390521ull}},
+{{8202917271748525390ull, 3233813230013205149ull,
+ 14053639769552135026ull, 2353204011701494075ull}},
+{{14865332608113044642ull, 13265638574371282244ull,
+ 12955363693512780878ull, 2941505014626867594ull}},
+{{134921686431754186ull, 7358676181109326998ull, 6970832580036200290ull,
+ 3676881268283584493ull}},
+{{9392024144894468540ull, 18421717263241434555ull,
+ 13325226743472638266ull, 4596101585354480616ull}},
+{{3564172081345348886ull, 16125259307953284501ull,
+ 8328266714670398916ull, 2872563490846550385ull}},
+{{9066901120109074011ull, 1709830061232054010ull,
+ 15022019411765386550ull, 3590704363558187981ull}},
+{{2110254363281566706ull, 11360659613394843321ull,
+ 4942466209424569475ull, 4488380454447734977ull}},
+{{12848124023119448951ull, 4794569249158083123ull,
+ 14618256426958825682ull, 2805237784029834360ull}},
+{{11448469010471923285ull, 15216583598302379712ull,
+ 18272820533698532102ull, 3506547230037292950ull}},
+{{14310586263089904106ull, 9797357461023198832ull,
+ 13617653630268389320ull, 4383184037546616188ull}},
+{{8944116414431190067ull, 6123348413139499270ull,
+ 17734405555772519133ull, 2739490023466635117ull}},
+{{1956773481184211775ull, 12265871534851761992ull,
+ 8332948889433485204ull, 3424362529333293897ull}},
+{{2445966851480264719ull, 15332339418564702490ull,
+ 15027872130219244409ull, 4280453161666617371ull}},
+{{6140415300602553353ull, 2665183108961857200ull,
+ 7086577072173333804ull, 2675283226041635857ull}},
+{{7675519125753191692ull, 3331478886202321500ull,
+ 13469907358644055159ull, 3344104032552044821ull}},
+{{9594398907191489614ull, 17999406663035065587ull,
+ 3002326143022905236ull, 4180130040690056027ull}},
+{{3690656307780987057ull, 2026257127542140184ull,
+ 18017354903885173437ull, 2612581275431285016ull}},
+{{4613320384726233821ull, 7144507427855063134ull,
+ 4074949556146915180ull, 3265726594289106271ull}},
+{{14990022517762568085ull, 8930634284818828917ull,
+ 482000926756256071ull, 4082158242861382839ull}},
+{{11674607082815299005ull, 12499175455652849929ull,
+ 7218779606863741900ull, 2551348901788364274ull}},
+{{758200798236960044ull, 15623969319566062412ull,
+ 18246846545434453183ull, 3189186127235455342ull}},
+{{947750997796200055ull, 14918275631030190111ull,
+ 13585186144938290671ull, 3986482659044319178ull}},
+{{7509873401263706891ull, 16241451297034950675ull,
+ 13102427359013819573ull, 2491551661902699486ull}},
+{{4775655733152245709ull, 6466756066011524632ull,
+ 7154662161912498659ull, 3114439577378374358ull}},
+{{5969569666440307136ull, 3471759064087017886ull,
+ 18166699739245399132ull, 3893049471722967947ull}},
+{{17566039096807355672ull, 11393221451909161986ull,
+ 9048344327814680505ull, 2433155919826854967ull}},
+{{12734176834154418782ull, 406468759604288771ull,
+ 6698744391340962728ull, 3041444899783568709ull}},
+{{11306035024265635574ull, 508085949505360964ull,
+ 12985116507603591314ull, 3801806124729460886ull}},
+{{16289643927020798042ull, 4929239736868238506ull,
+ 3504011798824856667ull, 2376128827955913054ull}},
+{{11138682871921221744ull, 1549863652657910229ull,
+ 13603386785385846642ull, 2970161034944891317ull}},
+{{88295534619363468ull, 11160701602677163595ull, 3169175426450144590ull,
+ 3712701293681114147ull}},
+{{16196085773632959832ull, 2363752483245839342ull,
+ 18121635706027198033ull, 2320438308550696341ull}},
+{{11021735180186423982ull, 7566376622484687082ull,
+ 8816986577251833829ull, 2900547885688370427ull}},
+{{4553796938378254169ull, 14069656796533246757ull,
+ 6409547203137404382ull, 3625684857110463034ull}},
+{{10303932191400205615ull, 8363698958811782638ull,
+ 17235306040776531286ull, 4532106071388078792ull}},
+{{1828271601197740605ull, 615625830829976245ull,
+ 10772066275485332054ull, 2832566294617549245ull}},
+{{6897025519924563661ull, 9992904325392246114ull,
+ 18076768862784052971ull, 3540707868271936556ull}},
+{{17844653936760480384ull, 7879444388312919738ull,
+ 4149217004770514598ull, 4425884835339920696ull}},
+{{15764594728902688144ull, 312966724268186932ull,
+ 2593260627981571624ull, 2766178022087450435ull}},
+{{1258999337418808564ull, 391208405335233666ull,
+ 17076633840259128242ull, 3457722527609313043ull}},
+{{10797121208628286513ull, 9712382543523817890ull,
+ 16734106281896522398ull, 4322153159511641304ull}},
+{{11359886773820066975ull, 1458553071274998277ull,
+ 10458816426185326499ull, 2701345724694775815ull}},
+{{364800411992920006ull, 15658249394375911559ull,
+ 8461834514304270219ull, 3376682155868469769ull}},
+{{14291058570273313720ull, 14961125724542501544ull,
+ 15188979161307725678ull, 4220852694835587211ull}},
+{{8931911606420821075ull, 4739017559411675561ull,
+ 7187268966603634597ull, 2638032934272242007ull}},
+{{15776575526453414248ull, 10535457967691982355ull,
+ 4372400189827155342ull, 3297541167840302509ull}},
+{{15109033389639379905ull, 3945950422760202136ull,
+ 10077186255711332082ull, 4121926459800378136ull}},
+{{9443145868524612441ull, 7077905032652514239ull,
+ 6298241409819582551ull, 2576204037375236335ull}},
+{{7192246317228377647ull, 4235695272388254895ull,
+ 3261115743847090285ull, 3220255046719045419ull}},
+{{4378621878108084155ull, 9906305108912706523ull,
+ 17911452735091026568ull, 4025318808398806773ull}},
+{{430795664603858645ull, 6191440693070441577ull,
+ 13500500968645585557ull, 2515824255249254233ull}},
+{{5150180599182211210ull, 12350986884765439875ull,
+ 3040568155524818234ull, 3144780319061567792ull}},
+{{1826039730550376108ull, 6215361569102024036ull,
+ 3800710194406022793ull, 3930975398826959740ull}},
+{{10364646868448760876ull, 15413816026757234782ull,
+ 11598815908358540053ull, 2456859624266849837ull}},
+{{3732436548706175287ull, 5432211978164379766ull, 663461830166011355ull,
+ 3071074530333562297ull}},
+{{13888917722737494916ull, 2178578954278086803ull,
+ 5441013306134902098ull, 3838843162916952871ull}},
+{{6374730567497240371ull, 5973297864851192156ull,
+ 10318162343975395667ull, 2399276976823095544ull}},
+{{7968413209371550464ull, 2854936312636602291ull,
+ 12897702929969244584ull, 2999096221028869430ull}},
+{{5348830493287050175ull, 3568670390795752864ull,
+ 6898756625606779922ull, 3748870276286086788ull}},
+{{3343019058304406360ull, 6842105012674733444ull,
+ 13535094927859013259ull, 2343043922678804242ull}},
+{{4178773822880507950ull, 3940945247416028901ull,
+ 7695496622968990766ull, 2928804903348505303ull}},
+{{9835153297028022841ull, 14149553596124811934ull,
+ 5007684760283850553ull, 3661006129185631629ull}},
+{{3070569584430252743ull, 3851883939873851206ull,
+ 10871291968782201096ull, 4576257661482039536ull}},
+{{15754164045551071677ull, 2407427462421157003ull,
+ 6794557480488875685ull, 2860161038426274710ull}},
+{{15081019038511451692ull, 7620970346453834158ull,
+ 17716568887465870414ull, 3575201298032843387ull}},
+{{9627901761284538806ull, 302840896212516890ull,
+ 17534025090904950114ull, 4469001622541054234ull}},
+{{10629124619230224658ull, 4800961578560210960ull,
+ 15570451700242981725ull, 2793126014088158896ull}},
+{{13286405774037780823ull, 10612887991627651604ull,
+ 1016320551594175540ull, 3491407517610198621ull}},
+{{16608007217547226028ull, 13266109989534564505ull,
+ 5882086707920107329ull, 4364259397012748276ull}},
+{{3462475483325934412ull, 1373789715818020960ull,
+ 12899676229304842889ull, 2727662123132967672ull}},
+{{4328094354157418015ull, 6328923163199914104ull,
+ 16124595286631053611ull, 3409577653916209590ull}},
+{{5410117942696772518ull, 3299467935572504726ull,
+ 10932372071434041206ull, 4261972067395261988ull}},
+{{17216381769467646536ull, 15897225515014979165ull,
+ 16056104581501051561ull, 2663732542122038742ull}},
+{{7685419156552394458ull, 6036473838486560245ull,
+ 10846758690021538644ull, 3329665677652548428ull}},
+{{14218459964117880976ull, 7545592298108200306ull,
+ 13558448362526923305ull, 4162082097065685535ull}},
+{{13498223496001063514ull, 16245210232386094951ull,
+ 15391559254220408921ull, 2601301310666053459ull}},
+{{12261093351573941489ull, 6471454735200454977ull,
+ 14627763049348123248ull, 3251626638332566824ull}},
+{{1491308634185263149ull, 8089318419000568722ull,
+ 18284703811685154060ull, 4064533297915708530ull}},
+{{5543753914793177372ull, 14279196048730131259ull,
+ 16039625900730609191ull, 2540333311197317831ull}},
+{{2318006375064083811ull, 13237309042485276170ull,
+ 15437846357485873585ull, 3175416638996647289ull}},
+{{12120880005684880572ull, 2711578247824431500ull,
+ 5462249891575178270ull, 3969270798745809112ull}},
+{{16798922040407826166ull, 15529794460172433399ull,
+ 3413906182234486418ull, 2480794249216130695ull}},
+{{16386966532082394803ull, 10188871038360765941ull,
+ 18102440783075271735ull, 3100992811520163368ull}},
+{{6648650109820829791ull, 8124402779523569523ull,
+ 4181306905134538053ull, 3876241014400204211ull}},
+{{1849563309424324668ull, 7383594746415924904ull, 307473806495392331ull,
+ 2422650634000127632ull}}
+};
+
+#endif // matches #if __ENABLE_BINARY80__
+
+// **********************************************************************
+
+static const UINT128 breakpoints_binary128[] =
+ { {{2195700805160846264ull, 1755099732929698ull}},
+{{9135258273612497656ull, 1404079786343758ull}},
+{{10927064423038085928ull, 2246527658150013ull}},
+{{16120349167914289388ull, 1797222126520010ull}},
+{{12896279334331431512ull, 1437777701216008ull}},
+{{17695721096948965856ull, 1150222160972806ull}},
+{{2487712051924973104ull, 1840355457556491ull}},
+{{16747564900507619776ull, 1472284366045192ull}},
+{{6019354290922275176ull, 1177827492836154ull}},
+{{17009664494959460928ull, 1884523988537846ull}},
+{{9918382781225658420ull, 1507619190830277ull}},
+{{556008595496706088ull, 1206095352664222ull}},
+{{4578962567536640064ull, 1929752564262755ull}},
+{{3663170054029312052ull, 1543802051410204ull}},
+{{6619884857965359964ull, 1235041641128163ull}},
+{{6902466958002665620ull, 1976066625805061ull}},
+{{1832624751660222172ull, 1580853300644049ull}},
+{{5155448616070088060ull, 1264682640515239ull}},
+{{15627415415195961544ull, 2023492224824382ull}},
+{{5123234702672948588ull, 1618793779859506ull}},
+{{409238947396448548ull, 1295035023887605ull}},
+{{654782315834317676ull, 2072056038220168ull}},
+{{7902523482151274788ull, 1657644830576134ull}},
+{{10011367600462930152ull, 1326115864460907ull}},
+{{1260792901773046952ull, 2121785383137452ull}},
+{{12076680765644168532ull, 1697428306509961ull}},
+{{5971995797773424504ull, 1357942645207969ull}},
+{{16933890905921299852ull, 2172708232332750ull}},
+{{13547112724737039880ull, 1738166585866200ull}},
+{{10837690179789631904ull, 1390533268692960ull}},
+{{17340304287663411048ull, 2224853229908736ull}},
+{{10182894615388818516ull, 1779882583926989ull}},
+{{11835664507052965136ull, 1423906067141591ull}},
+{{5779182790900461784ull, 1139124853713273ull}},
+{{5557343650698828532ull, 1822599765941237ull}},
+{{15513921364784793796ull, 1458079812752989ull}},
+{{16100485906569745360ull, 1166463850202391ull}},
+{{18382079821027771928ull, 1866342160323826ull}},
+{{11016315042080307220ull, 1493073728259061ull}},
+{{5123703218922335452ull, 1194458982607249ull}},
+{{15576622779759557372ull, 1911134372171598ull}},
+{{1393251779581914928ull, 1528907497737279ull}},
+{{4803950238407442264ull, 1223125998189823ull}},
+{{3996971566709997300ull, 1957001597103717ull}},
+{{14265623697593728808ull, 1565601277682973ull}},
+{{344452513849252076ull, 1252481022146379ull}},
+{{7929821651642623972ull, 2003969635434206ull}},
+{{2654508506572188852ull, 1603175708347365ull}},
+{{2123606805257751084ull, 1282540566677892ull}},
+{{7087119703154312056ull, 2052064906684627ull}},
+{{16737742206749180616ull, 1641651925347701ull}},
+{{9700844950657434168ull, 1313321540278161ull}},
+{{8142654291568074024ull, 2101314464445058ull}},
+{{13892821062738279864ull, 1681051571556046ull}},
+{{7424908035448713568ull, 1344841257244837ull}},
+{{15569201671459852032ull, 2151746011591739ull}},
+{{16144710151909791948ull, 1721396809273391ull}},
+{{9226419306785923236ull, 1377117447418713ull}},
+{{11072922076115566856ull, 2203387915869941ull}},
+{{5168988846150543160ull, 1762710332695953ull}},
+{{11513888706404255176ull, 1410168266156762ull}},
+{{1832413335639583492ull, 1128134612925410ull}},
+{{2931861337023333592ull, 1805015380680656ull}},
+{{17102884328586308164ull, 1444012304544524ull}},
+{{17371656277610956856ull, 1155209843635619ull}},
+{{16726603599951800000ull, 1848335749816991ull}},
+{{9691934065219529676ull, 1478668599853593ull}},
+{{15132244881659444388ull, 1182934879882874ull}},
+{{13143545366429380048ull, 1892695807812599ull}},
+{{14204185107885414364ull, 1514156646250079ull}},
+{{15052696901050241812ull, 1211325317000063ull}},
+{{1948222153228924964ull, 1938120507200102ull}},
+{{12626624166808870940ull, 1550496405760081ull}},
+{{6411950518705186428ull, 1240397124608065ull}},
+{{10259120829928298284ull, 1984635399372904ull}},
+{{11896645478684548952ull, 1587708319498323ull}},
+{{16896014012431459808ull, 1270166655598658ull}},
+{{4897529531438873752ull, 2032266648957854ull}},
+{{7607372439893009324ull, 1625813319166283ull}},
+{{13464595581398228108ull, 1300650655333026ull}},
+{{14164655300753344324ull, 2081041048532842ull}},
+{{3953026611118854812ull, 1664832838826274ull}},
+{{6851770103636994172ull, 1331866271061019ull}},
+{{18341529795303011324ull, 2130986033697630ull}},
+{{14673223836242409060ull, 1704788826958104ull}},
+{{15427927883735837572ull, 1363831061566483ull}},
+{{2548591725525878176ull, 2182129698506374ull}},
+{{5728222195162612864ull, 1745703758805099ull}},
+{{8271926570872000612ull, 1396563007044079ull}},
+{{2167036069169470012ull, 2234500811270527ull}},
+{{12801675299561306980ull, 1787600649016421ull}},
+{{6551991424907135260ull, 1430080519213137ull}},
+{{16309639584151439176ull, 1144064415370509ull}},
+{{15027376890416571716ull, 1830503064592815ull}},
+{{12021901512333257372ull, 1464402451674252ull}},
+{{2238823580382785252ull, 1171521961339402ull}},
+{{7271466543354366724ull, 1874435138143043ull}},
+{{13195870864167314024ull, 1499548110514434ull}},
+{{14246045506075761544ull, 1199638488411547ull}},
+{{8036277550753577176ull, 1919421581458476ull}},
+{{2739673225860951420ull, 1535537265166781ull}},
+{{16949133839656402428ull, 1228429812133424ull}},
+{{16050567699224512916ull, 1965487699413479ull}},
+{{16529802974121520656ull, 1572390159530783ull}},
+{{2155795935071485556ull, 1257912127624627ull}},
+{{7138622310856287212ull, 2012659404199403ull}},
+{{13089595478168850416ull, 1610127523359522ull}},
+{{3092978753051259684ull, 1288102018687618ull}},
+{{1259417190140105172ull, 2060963229900189ull}},
+{{4696882566853994460ull, 1648770583920151ull}},
+{{68157238741285244ull, 1319016467136121ull}},
+{{11177098026211787364ull, 2110426347417793ull}},
+{{16320376050453250536ull, 1688341077934234ull}},
+{{16745649655104510752ull, 1350672862347387ull}},
+{{12035644189199575912ull, 2161076579755820ull}},
+{{9628515351359660728ull, 1728861263804656ull}},
+{{4013463466345818260ull, 1383089011043725ull}},
+{{6421541546153309216ull, 2212942417669960ull}},
+{{5137233236922647372ull, 1770353934135968ull}},
+{{11488484219021938544ull, 1416283147308774ull}},
+{{12880136189959461160ull, 1133026517847019ull}},
+{{9540171459709406884ull, 1812842428555231ull}},
+{{3942788353025615184ull, 1450273942844185ull}},
+{{3154230682420492148ull, 1160219154275348ull}},
+{{1357420277130877116ull, 1856350646840557ull}},
+{{12153982665930432660ull, 1485080517472445ull}},
+{{9723186132744346128ull, 1188064413977956ull}},
+{{8178400182907133160ull, 1900903062364730ull}},
+{{6542720146325706528ull, 1520722449891784ull}},
+{{8923524931802475544ull, 1216577959913427ull}},
+{{17966988705625871196ull, 1946524735861483ull}},
+{{3305544520274965988ull, 1557219788689187ull}},
+{{13712482060445703760ull, 1245775830951349ull}},
+{{10871924852487395044ull, 1993241329522159ull}},
+{{12386888696731826360ull, 1594593063617727ull}},
+{{2530813327901640440ull, 1275674450894182ull}},
+{{7738650139384535028ull, 2041079121430691ull}},
+{{2501571296765717700ull, 1632863297144553ull}},
+{{9379954666896394804ull, 1306290637715642ull}},
+{{250532208066590396ull, 2090065020345028ull}},
+{{7579123395937092964ull, 1672052016276022ull}},
+{{17131345160975405340ull, 1337641613020817ull}},
+{{12652756998593007252ull, 2140226580833308ull}},
+{{17500903228358226448ull, 1712181264666646ull}},
+{{10311373767944670836ull, 1369745011733317ull}},
+{{1740802769743832044ull, 2191592018773308ull}},
+{{8771339845278886280ull, 1753273615018646ull}},
+{{3327723061481198700ull, 1402618892014917ull}},
+{{9013705713111828248ull, 2244190227223867ull}},
+{{18279011014715193568ull, 1795352181779093ull}},
+{{3555162367546423884ull, 1436281745423275ull}},
+{{2844129894037139108ull, 1149025396338620ull}},
+{{4550607830459422572ull, 1838440634141792ull}},
+{{14708532708593269028ull, 1470752507313433ull}},
+{{698779722648884252ull, 1176602005850747ull}},
+{{4807396370980125128ull, 1882563209361195ull}},
+{{3845917096784100100ull, 1506050567488956ull}},
+{{17834128936394921372ull, 1204840453991164ull}},
+{{17466559854006143228ull, 1927744726385863ull}},
+{{2905201438979183612ull, 1542195781108691ull}},
+{{17081556410150988184ull, 1233756624886952ull}},
+{{12573094997273939800ull, 1974010599819124ull}},
+{{13747824812561062164ull, 1579208479855299ull}},
+{{14687608664790760052ull, 1263366783884239ull}},
+{{12432127419439485116ull, 2021386854214783ull}},
+{{17324399565035408740ull, 1617109483371826ull}},
+{{10170170837286416668ull, 1293687586697461ull}},
+{{8893575710174446024ull, 2069900138715938ull}},
+{{14493558197623377464ull, 1655920110972750ull}},
+{{11594846558098701972ull, 1324736088778200ull}},
+{{105010419248371540ull, 2119577742045121ull}},
+{{14841403594366338524ull, 1695662193636096ull}},
+{{8183774060751160496ull, 1356529754908877ull}},
+{{16783387311943767116ull, 2170447607854203ull}},
+{{2358663405329282724ull, 1736358086283363ull}},
+{{9265628353747246824ull, 1389086469026690ull}},
+{{14825005365995594920ull, 2222538350442704ull}},
+{{15549353107538386260ull, 1778030680354163ull}},
+{{1371436041804978036ull, 1422424544283331ull}},
+{{15854544092411623724ull, 1137939635426664ull}},
+{{14299224103632866988ull, 1820703416682663ull}},
+{{371332838680562620ull, 1456562733346131ull}},
+{{15054461529912091388ull, 1165250186676904ull}},
+{{13019092003633615252ull, 1864400298683047ull}},
+{{3036575973423071556ull, 1491520238946438ull}},
+{{9807958408222277892ull, 1193216191157150ull}},
+{{15692733453155644628ull, 1909145905851440ull}},
+{{12554186762524515700ull, 1527316724681152ull}},
+{{2664651780535791912ull, 1221853379744922ull}},
+{{7952791663599177388ull, 1954965407591875ull}},
+{{6362233330879341908ull, 1563972326073500ull}},
+{{5089786664703473528ull, 1251177860858800ull}},
+{{8143658663525557644ull, 2001884577374080ull}},
+{{6514926930820446116ull, 1601507661899264ull}},
+{{8901290359398267216ull, 1281206129519411ull}},
+{{6863366945553406900ull, 2049929807231058ull}},
+{{12869391185926546164ull, 1639943845784846ull}},
+{{6606164133999326608ull, 1311955076627877ull}},
+{{14259211429140832896ull, 2099128122604603ull}},
+{{339322699086935348ull, 1679302498083683ull}},
+{{7650155788753368924ull, 1343441998466946ull}},
+{{4861551632521569632ull, 2149507197547114ull}},
+{{7578590120759166028ull, 1719605758037691ull}},
+{{2373523281865422500ull, 1375684606430153ull}},
+{{108288436242765680ull, 2201095370288245ull}},
+{{86630748994212544ull, 1760876296230596ull}},
+{{14826699858163011328ull, 1408701036984476ull}},
+{{8172011071788498736ull, 1126960829587581ull}},
+{{5696520085377777336ull, 1803137327340130ull}},
+{{4557216068302221868ull, 1442509861872104ull}},
+{{7335121669383687816ull, 1154007889497683ull}},
+{{8046845856271990184ull, 1846412623196293ull}},
+{{13816174314501412792ull, 1477130098557034ull}},
+{{14742288266343040556ull, 1181704078845627ull}},
+{{8830265967181223600ull, 1890726526153004ull}},
+{{10753561588486889204ull, 1512581220922403ull}},
+{{15981546900273332008ull, 1210064976737922ull}},
+{{10813079781469689924ull, 1936103962780676ull}},
+{{4961115010433841616ull, 1548883170224541ull}},
+{{279543193605162968ull, 1239106536179633ull}},
+{{15204664368735902044ull, 1982570457887412ull}},
+{{4785033865504900988ull, 1586056366309930ull}},
+{{3828027092403920788ull, 1268845093047944ull}},
+{{13503540977330093912ull, 2030152148876710ull}},
+{{10802832781864075128ull, 1624121719101368ull}},
+{{16020963854975080748ull, 1299297375281094ull}},
+{{14565495723734398228ull, 2078875800449751ull}},
+{{7963047764245608260ull, 1663100640359801ull}},
+{{2681089396654576284ull, 1330480512287841ull}},
+{{15357789478873053024ull, 2128768819660545ull}},
+{{12286231583098442420ull, 1703015055728436ull}},
+{{6139636451736843612ull, 1362412044582749ull}},
+{{17202115952262770428ull, 2179859271332398ull}},
+{{2693646317584485372ull, 1743887417065919ull}},
+{{5844265868809498620ull, 1395109933652735ull}},
+{{9350825390095197792ull, 2232175893844376ull}},
+{{3791311497334247912ull, 1785740715075501ull}},
+{{17790444456835039620ull, 1428592572060400ull}},
+{{14232355565468031696ull, 1142874057648320ull}},
+{{4325024831039299100ull, 1828598492237313ull}},
+{{10838717494315259924ull, 1462878793789850ull}},
+{{8670973995452207940ull, 1170303035031880ull}},
+{{13873558392723532704ull, 1872484856051008ull}},
+{{30800269953095196ull, 1497987884840807ull}},
+{{11092686660188207124ull, 1198390307872645ull}},
+{{17748298656301131400ull, 1917424492596232ull}},
+{{6819941295557084476ull, 1533939594076986ull}},
+{{1766604221703757256ull, 1227151675261589ull}},
+{{10205264384209832256ull, 1963442680418542ull}},
+{{785513877884045160ull, 1570754144334834ull}},
+{{4317759917049146448ull, 1256603315467867ull}},
+{{10597764682020544644ull, 2010565304748587ull}},
+{{1099514116132615068ull, 1608452243798870ull}},
+{{879611292906092056ull, 1286761795039096ull}},
+{{12475424512875478256ull, 2058818872062553ull}},
+{{17359037239784203252ull, 1647055097650042ull}},
+{{6508532162343541956ull, 1317644078120034ull}},
+{{17792349089233487776ull, 2108230524992054ull}},
+{{17923228086128700544ull, 1686584419993643ull}},
+{{3270536024677229464ull, 1349267535994915ull}},
+{{5232857639483567144ull, 2158828057591864ull}},
+{{7875634926328764040ull, 1727062446073491ull}},
+{{2611159126321100908ull, 1381649956858793ull}},
+{{488505787371851128ull, 2210639930974069ull}},
+{{4080153444639391228ull, 1768511944779255ull}},
+{{3264122755711512980ull, 1414809555823404ull}},
+{{6300647019311120708ull, 1131847644658723ull}},
+{{6391686416155882808ull, 1810956231453957ull}},
+{{16181395577150437216ull, 1448764985163165ull}},
+{{12945116461720349772ull, 1159011988130532ull}},
+{{5954791079784918344ull, 1854419181008852ull}},
+{{15831879308053665644ull, 1483535344807081ull}},
+{{8976154631701022192ull, 1186828275845665ull}},
+{{14361847410721635508ull, 1898925241353064ull}},
+{{15178826743319218732ull, 1519140193082451ull}},
+{{8453712579913464660ull, 1215312154465961ull}},
+{{6147242498377722812ull, 1944499447145538ull}},
+{{12296491628185998896ull, 1555599557716430ull}},
+{{9837193302548799116ull, 1244479646173144ull}},
+{{4671462839852347616ull, 1991167433877031ull}},
+{{47821457139967772ull, 1592933947101625ull}},
+{{38257165711974216ull, 1274347157681300ull}},
+{{61211465139158748ull, 2038955452290080ull}},
+{{48969172111326996ull, 1631164361832064ull}},
+{{3728524152430971920ull, 1304931489465651ull}},
+{{17033685088115286044ull, 2087890383145041ull}},
+{{9937599255750318512ull, 1670312306516033ull}},
+{{15328777034084075456ull, 1336249845212826ull}},
+{{17147345625050700084ull, 2137999752340522ull}},
+{{6339178870556739420ull, 1710399801872418ull}},
+{{12450040725929212180ull, 1368319841497934ull}},
+{{8852018717261008520ull, 2189311746396695ull}},
+{{7081614973808806816ull, 1751449397117356ull}},
+{{1975943164305135128ull, 1401159517693885ull}},
+{{3161509062888216208ull, 2241855228310216ull}},
+{{17286602509278214260ull, 1793484182648172ull}},
+{{6450584377938750760ull, 1434787346118538ull}},
+{{12539165131834821256ull, 1147829876894830ull}},
+{{1615920137226162392ull, 1836527803031729ull}},
+{{4982084924522840236ull, 1469222242425383ull}},
+{{11364365569102092836ull, 1175377793940306ull}},
+{{10804287281079527892ull, 1880604470304490ull}},
+{{8643429824863622312ull, 1504483576243592ull}},
+{{17982790304116628820ull, 1203586860994873ull}},
+{{6636371598135144172ull, 1925738977591798ull}},
+{{12687794907991935984ull, 1540591182073438ull}},
+{{17528933555877369432ull, 1232472945658750ull}},
+{{9599549615694239480ull, 1971956713054001ull}},
+{{3990290877813481260ull, 1577565370443201ull}},
+{{17949627961218426300ull, 1262052296354560ull}},
+{{10272660664239930464ull, 2019283674167297ull}},
+{{839430901908123724ull, 1615426939333838ull}},
+{{8050242351010319628ull, 1292341551467070ull}},
+{{12880387761616511404ull, 2067746482347312ull}},
+{{2925612579809388476ull, 1654197185877850ull}},
+{{2340490063847510780ull, 1323357748702280ull}},
+{{3744784102156017252ull, 2117372397923648ull}},
+{{10374524911208634448ull, 1693897918338918ull}},
+{{15678317558450728204ull, 1355118334671134ull}},
+{{14017261649295434156ull, 2168189335473815ull}},
+{{11213809319436347324ull, 1734551468379052ull}},
+{{1592349826065257212ull, 1387641174703242ull}},
+{{6237108536446321864ull, 2220225879525187ull}},
+{{16057733273382788460ull, 1776180703620149ull}},
+{{16535535433448141092ull, 1420944562896119ull}},
+{{16917777161500423196ull, 1136755650316895ull}},
+{{8621699384691125500ull, 1818809040507033ull}},
+{{14276057137236721044ull, 1455047232405626ull}},
+{{7731496895047466512ull, 1164037785924501ull}},
+{{4991697402592125776ull, 1862460457479202ull}},
+{{15061404366299431588ull, 1489968365983361ull}},
+{{8359774678297634948ull, 1191974692786689ull}},
+{{2307593041050484948ull, 1907159508458703ull}},
+{{9224772062324208604ull, 1525727606766962ull}},
+{{1120020375546236ull, 1220582085413570ull}},
+{{1792032600873980ull, 1952931336661712ull}},
+{{11069480070306430152ull, 1562345069329369ull}},
+{{12544932870987054444ull, 1249876055463495ull}},
+{{1625148519869735496ull, 1999801688741593ull}},
+{{8678816445379609044ull, 1599841350993274ull}},
+{{10632401971045597560ull, 1279873080794619ull}},
+{{5943796709447225124ull, 2047796929271391ull}},
+{{1065688552815869776ull, 1638237543417113ull}},
+{{8231248471736516468ull, 1310590034733690ull}},
+{{13169997554778426348ull, 2096944055573904ull}},
+{{14225346858564651400ull, 1677555244459123ull}},
+{{312231042625990152ull, 1342044195567299ull}},
+{{7878267297685404888ull, 2147270712907678ull}},
+{{13681311467632144556ull, 1717816570326142ull}},
+{{3566351544621895000ull, 1374253256260914ull}},
+{{13084860100878852648ull, 2198805210017462ull}},
+{{3089190451219261472ull, 1759044168013970ull}},
+{{2471352360975409176ull, 1407235334411176ull}},
+{{15022210221786385652ull, 2251576535057881ull}},
+{{8328419362687198196ull, 1801261228046305ull}},
+{{6662735490149758556ull, 1441008982437044ull}},
+{{9019537206861717168ull, 1152807185949635ull}},
+{{14431259530978747472ull, 1844491497519416ull}},
+{{7855658810041087652ull, 1475593198015533ull}},
+{{13663224677516690768ull, 1180474558412426ull}},
+{{14482461854542884584ull, 1888759293459882ull}},
+{{4207271854150487020ull, 1511007434767906ull}},
+{{18123212742288030908ull, 1208805947814324ull}},
+{{17929093943435118488ull, 1934089516502919ull}},
+{{18032623969490005112ull, 1547271613202335ull}},
+{{14426099175592004088ull, 1237817290561868ull}},
+{{945665792495744604ull, 1980507664898990ull}},
+{{756532633996595684ull, 1584406131919192ull}},
+{{11673272551423007516ull, 1267524905535353ull}},
+{{14987887267534901704ull, 2028039848856565ull}},
+{{11990309814027921364ull, 1622431879085252ull}},
+{{2213550221738516444ull, 1297945503268202ull}},
+{{7231029169523536632ull, 2076712805229123ull}},
+{{13163520965102649952ull, 1661370244183298ull}},
+{{17909514401565940608ull, 1329096195346638ull}},
+{{6519130154054043036ull, 2126553912554622ull}},
+{{16283350567468965396ull, 1701243130043697ull}},
+{{5647982824491351672ull, 1360994504034958ull}},
+{{5347423704444252352ull, 2177591206455933ull}},
+{{11656636593039222528ull, 1742072965164746ull}},
+{{5635960459689467700ull, 1393658372131797ull}},
+{{12706885550245058644ull, 2229853395410875ull}},
+{{10165508440196046912ull, 1783882716328700ull}},
+{{8132406752156837532ull, 1427106173062960ull}},
+{{6505925401725470024ull, 1141684938450368ull}},
+{{6720131828018841716ull, 1826695901520589ull}},
+{{9065454277156983696ull, 1461356721216471ull}},
+{{3563014606983676632ull, 1169085376973177ull}},
+{{9390172185915792936ull, 1870536603157083ull}},
+{{14890835378216454996ull, 1496429282525666ull}},
+{{8223319487831253672ull, 1197143426020533ull}},
+{{9467962365788095556ull, 1915429481632853ull}},
+{{14953067522114297088ull, 1532343585306282ull}},
+{{4583756388207617024ull, 1225874868245026ull}},
+{{18402056665357918212ull, 1961399789192041ull}},
+{{11032296517544424244ull, 1569119831353633ull}},
+{{16204534843519360044ull, 1255295865082906ull}},
+{{101814046437603808ull, 2008473384132651ull}},
+{{14838846496117724336ull, 1606778707306120ull}},
+{{11871077196894179468ull, 1285422965844896ull}},
+{{11615025885546866504ull, 2056676745351834ull}},
+{{12981369523179403528ull, 1645341396281467ull}},
+{{3006397989059702176ull, 1316273117025174ull}},
+{{12188934411979344128ull, 2106036987240278ull}},
+{{17129845159067295948ull, 1684829589792222ull}},
+{{6325178497770016112ull, 1347863671833778ull}},
+{{6430936781690115456ull, 2156581874934045ull}},
+{{5144749425352092364ull, 1725265499947236ull}},
+{{426450725539763568ull, 1380212399957789ull}},
+{{8061018790347442356ull, 2208339839932462ull}},
+{{17516861476503684856ull, 1766671871945969ull}},
+{{17702837995944858208ull, 1413337497556775ull}},
+{{14162270396755886564ull, 1130669998045420ull}},
+{{4212888561099866888ull, 1809071996872673ull}},
+{{10749008478363714156ull, 1447257597498138ull}},
+{{15977904412174791972ull, 1157806077998510ull}},
+{{7117902985770115540ull, 1852489724797617ull}},
+{{16762368832841823400ull, 1481991779838093ull}},
+{{2341848622047727752ull, 1185593423870475ull}},
+{{3746957795276364404ull, 1896949478192760ull}},
+{{2997566236221091520ull, 1517559582554208ull}},
+{{9776750618460693864ull, 1214047666043366ull}},
+{{8264103360053289536ull, 1942476265669386ull}},
+{{2921933873300721304ull, 1553981012535509ull}},
+{{6026895913382487368ull, 1243184810028407ull}},
+{{13332382276153890112ull, 1989095696045451ull}},
+{{6976557006181201768ull, 1591276556836361ull}},
+{{1891896790203051088ull, 1273021245469089ull}},
+{{10405732493808702392ull, 2036833992750542ull}},
+{{945888365563141264ull, 1629467194200434ull}},
+{{4446059507192423336ull, 1303573755360347ull}},
+{{10803044026249787660ull, 2085718008576555ull}},
+{{8642435220999830128ull, 1668574406861244ull}},
+{{10603296991541774424ull, 1334859525488995ull}},
+{{16965275186466839080ull, 2135775240782392ull}},
+{{6193522519689650620ull, 1708620192625914ull}},
+{{8644166830493630816ull, 1366896154100731ull}},
+{{6451969299305988664ull, 2187033846561170ull}},
+{{5161575439444790932ull, 1749627077248936ull}},
+{{439911536813922420ull, 1399701661799149ull}},
+{{8082556088386096520ull, 2239522658878638ull}},
+{{13844742500192697864ull, 1791618127102910ull}},
+{{11075794000154158288ull, 1433294501682328ull}},
+{{16239332829607147276ull, 1146635601345862ull}},
+{{11225537268403794352ull, 1834616962153380ull}},
+{{8980429814723035480ull, 1467693569722704ull}},
+{{10873692666520338708ull, 1174154855778163ull}},
+{{13708559451690631612ull, 1878647769245061ull}},
+{{7277498746610594964ull, 1502918215396049ull}},
+{{9511347812030386296ull, 1202334572316839ull}},
+{{4150110055022887104ull, 1923735315706943ull}},
+{{10698785673502130328ull, 1538988252565554ull}},
+{{12248377353543614584ull, 1231190602052443ull}},
+{{15908054950927873016ull, 1969904963283909ull}},
+{{16415792775484208736ull, 1575923970627127ull}},
+{{5753936590903546340ull, 1260739176501702ull}},
+{{12895647360187584472ull, 2017182682402723ull}},
+{{17695215517633888224ull, 1613746145922178ull}},
+{{3088125969881379608ull, 1290996916737743ull}},
+{{1251652737068297052ull, 2065595066780389ull}},
+{{4690671004396547964ull, 1652476053424311ull}},
+{{63187988775328048ull, 1321980842739449ull}},
+{{7479798411524345524ull, 2115169348383118ull}},
+{{13362536358703297064ull, 1692135478706494ull}},
+{{14379377901704547976ull, 1353708382965195ull}},
+{{4560260569017725144ull, 2165933412744313ull}},
+{{11026906084698000760ull, 1732746730195450ull}},
+{{8821524867758400608ull, 1386197384156360ull}},
+{{14114439788413440976ull, 2217915814650176ull}},
+{{7602203015988842456ull, 1774332651720141ull}},
+{{2392413598049163640ull, 1419466121376113ull}},
+{{9292628507923151560ull, 1135572897100890ull}},
+{{14868205612677042496ull, 1816916635361424ull}},
+{{15583913304883544320ull, 1453533308289139ull}},
+{{16156479458648745780ull, 1162826646631311ull}},
+{{24925430644620984ull, 1860522634610099ull}},
+{{3709289159257607112ull, 1488418107688079ull}},
+{{6656780142147996012ull, 1190734486150463ull}},
+{{6961499412694883296ull, 1905175177840741ull}},
+{{1879850715413996312ull, 1524140142272593ull}},
+{{8882578201815017696ull, 1219312113818074ull}},
+{{3144078678678297344ull, 1950899382108919ull}},
+{{6204611757684548200ull, 1560719505687135ull}},
+{{4963689406147638560ull, 1248575604549708ull}},
+{{4252554235094311372ull, 1997720967279533ull}},
+{{10780741017559269744ull, 1598176773823626ull}},
+{{4935243999305505472ull, 1278541419058901ull}},
+{{517692769404988108ull, 2045666270494242ull}},
+{{11482200659749721456ull, 1636533016395393ull}},
+{{16564458157283597812ull, 1309226413116314ull}},
+{{15435086607428025528ull, 2094762260986103ull}},
+{{1280022841716689452ull, 1675809808788883ull}},
+{{8402715902857172208ull, 1340647847031106ull}},
+{{6065647815087654888ull, 2145036555249770ull}},
+{{4852518252070123912ull, 1716029244199816ull}},
+{{192665786914188804ull, 1372823395359853ull}},
+{{15065660518030343384ull, 2196517432575764ull}},
+{{15741877229166185028ull, 1757213946060611ull}},
+{{8904152968591037700ull, 1405771156848489ull}},
+{{3178598305519929352ull, 2249233850957583ull}},
+{{9921576273899764128ull, 1799387080766066ull}},
+{{4247912204377900976ull, 1439509664612853ull}},
+{{10777027392986141428ull, 1151607731690282ull}},
+{{2485848569810184992ull, 1842572370704452ull}},
+{{13056725300073878964ull, 1474057896563561ull}},
+{{6756031425317192848ull, 1179246317250849ull}},
+{{18188347909991329204ull, 1886794107601358ull}},
+{{3482631883767332392ull, 1509435286081087ull}},
+{{13854151951239596884ull, 1207548228864869ull}},
+{{11098596677757624044ull, 1932077166183791ull}},
+{{5189528527464188912ull, 1545661732947033ull}},
+{{11530320451455171776ull, 1236529386357626ull}},
+{{11069815092844454196ull, 1978447018172202ull}},
+{{1477154444791742712ull, 1582757614537762ull}},
+{{12249770000059125136ull, 1266206091630209ull}},
+{{8531585555868869252ull, 2025929746608335ull}},
+{{6825268444695095400ull, 1620743797286668ull}},
+{{12838912385239896968ull, 1296595037829334ull}},
+{{9474213372158104180ull, 2074552060526935ull}},
+{{7579370697726483344ull, 1659641648421548ull}},
+{{13442194187665007320ull, 1327713318737238ull}},
+{{17818161885522101388ull, 2124341309979581ull}},
+{{10565180693675770788ull, 1699473047983665ull}},
+{{8452144554940616628ull, 1359578438386932ull}},
+{{17212780102646896932ull, 2175325501419091ull}},
+{{10080875267375607224ull, 1740260401135273ull}},
+{{15443397843384306424ull, 1392208320908218ull}},
+{{2573343660963428340ull, 2227533313453150ull}},
+{{2058674928770742672ull, 1782026650762520ull}},
+{{1646939943016594136ull, 1425621320610016ull}},
+{{16074947213380916600ull, 1140497056488012ull}},
+{{10962520282441825272ull, 1824795290380820ull}},
+{{8770016225953460216ull, 1459836232304656ull}},
+{{3326664166020857848ull, 1167868985843725ull}},
+{{5322662665633372560ull, 1868590377349960ull}},
+{{4258130132506698048ull, 1494872301879968ull}},
+{{10785201735489179084ull, 1195897841503974ull}},
+{{6188276332556955568ull, 1913436546406359ull}},
+{{8639969880787474776ull, 1530749237125087ull}},
+{{17980022348855710792ull, 1224599389700069ull}},
+{{17699989313943406296ull, 1959359023520111ull}},
+{{10470642636412814712ull, 1567487218816089ull}},
+{{12065862923872162092ull, 1253989775052871ull}},
+{{11926683048711638704ull, 2006383640084594ull}},
+{{13230695253711221288ull, 1605106912067675ull}},
+{{10584556202968977028ull, 1284085529654140ull}},
+{{16935289924750363248ull, 2054536847446624ull}},
+{{17237580754542200920ull, 1643629477957299ull}},
+{{17479413418375671060ull, 1314903582365839ull}},
+{{16899015025175342728ull, 2103845731785343ull}},
+{{2451165575914543212ull, 1683076585428275ull}},
+{{1960932460731634568ull, 1346461268342620ull}},
+{{3137491937170615312ull, 2154338029348192ull}},
+{{13578039993962223216ull, 1723470423478553ull}},
+{{18241129624653599220ull, 1378776338782842ull}},
+{{14428412140478117460ull, 2206042142052548ull}},
+{{474683268156763000ull, 1764833713642039ull}},
+{{4069095429267320720ull, 1411866970913631ull}},
+{{18012671602381497868ull, 1129493576730904ull}},
+{{17752228119584665624ull, 1807189722769447ull}},
+{{6823084866183911852ull, 1445751778215558ull}},
+{{12837165522430950128ull, 1156601422572446ull}},
+{{13160767206405699560ull, 1850562276115914ull}},
+{{14217962579866469968ull, 1480449820892731ull}},
+{{7685021249151265652ull, 1184359856714185ull}},
+{{12296033998642025044ull, 1894975770742696ull}},
+{{6147478384171709712ull, 1515980616594157ull}},
+{{15986029151563098740ull, 1212784493275325ull}},
+{{7130902568791406368ull, 1940455189240521ull}},
+{{2015373240291214772ull, 1552364151392417ull}},
+{{12680345036458702784ull, 1241891321113933ull}},
+{{16599203243592014136ull, 1987026113782293ull}},
+{{2211316150647880336ull, 1589620891025835ull}},
+{{1769052920518304268ull, 1271696712820668ull}},
+{{17587879931796928124ull, 2034714740513068ull}},
+{{3002257501211811532ull, 1627771792410455ull}},
+{{2401806000969449224ull, 1302217433928364ull}},
+{{11221587231034939408ull, 2083547894285382ull}},
+{{1598572155344130880ull, 1666838315428306ull}},
+{{16036252983242945996ull, 1333470652342644ull}},
+{{14589958328962982624ull, 2133553043748231ull}},
+{{7982617848428475776ull, 1706842434998585ull}},
+{{6386094278742780620ull, 1365473947998868ull}},
+{{6528402031246538668ull, 2184758316798189ull}},
+{{8912070439739141260ull, 1747806653438551ull}},
+{{3440307537049402684ull, 1398245322750841ull}},
+{{16572538503504775264ull, 2237192516401345ull}},
+{{13258030802803820212ull, 1789754013121076ull}},
+{{6917075827501145844ull, 1431803210496861ull}},
+{{1844311847259006352ull, 1145442568397489ull}},
+{{10329596585098230812ull, 1832708109435982ull}},
+{{884979638594764004ull, 1466166487548786ull}},
+{{15465378969843452496ull, 1172933190039028ull}},
+{{2608513463298062052ull, 1876693104062446ull}},
+{{16844206029606090936ull, 1501354483249956ull}},
+{{9786016008942962424ull, 1201083586599965ull}},
+{{15657625614308739880ull, 1921733738559944ull}},
+{{16215449306188902228ull, 1537386990847955ull}},
+{{12972359444951121780ull, 1229909592678364ull}},
+{{9687728667696063880ull, 1967855348285383ull}},
+{{15128880563640671752ull, 1574284278628306ull}},
+{{8413755636170627076ull, 1259427422902645ull}},
+{{13462009017873003324ull, 2015083876644232ull}},
+{{3390909584814582012ull, 1612067101315386ull}},
+{{17470122926819306904ull, 1289653681052308ull}},
+{{5816103794459429108ull, 2063445889683694ull}},
+{{8342231850309453608ull, 1650756711746955ull}},
+{{6673785480247562884ull, 1320605369397564ull}},
+{{18056754397879921264ull, 2112968591036102ull}},
+{{7066705888820116364ull, 1690374872828882ull}},
+{{16721411155281824060ull, 1352299898263105ull}},
+{{8307513774741366884ull, 2163679837220969ull}},
+{{10335359834535003828ull, 1730943869776775ull}},
+{{8268287867628003064ull, 1384755095821420ull}},
+{{13229260588204804904ull, 2215608153314272ull}},
+{{3204710841080023276ull, 1772486522651418ull}},
+{{9942466302347839264ull, 1417989218121134ull}},
+{{11643321856620181736ull, 1134391374496907ull}},
+{{3871919711624649484ull, 1815026199195052ull}},
+{{14165582213525450556ull, 1452020959356041ull}},
+{{7643116956078450124ull, 1161616767484833ull}},
+{{8539638314983609872ull, 1858586827975733ull}},
+{{14210408281470708544ull, 1486869462380586ull}},
+{{7678977810434656512ull, 1189495569904469ull}},
+{{1218318052469719452ull, 1903192911847151ull}},
+{{15732049700943416852ull, 1522554329477720ull}},
+{{12585639760754733484ull, 1218043463582176ull}},
+{{12758325987723752928ull, 1948869541731482ull}},
+{{2827963160695181696ull, 1559095633385186ull}},
+{{17019765787523786648ull, 1247276506708148ull}},
+{{5095532371586596700ull, 1995642410733038ull}},
+{{11455123526753098004ull, 1596513928586430ull}},
+{{9164098821402478404ull, 1277211142869144ull}},
+{{3594511670018234476ull, 2043537828590631ull}},
+{{17633004594982228876ull, 1634830262872504ull}},
+{{17795752490727693424ull, 1307864210298003ull}},
+{{6337111096712847536ull, 2092582736476806ull}},
+{{1380340062628367708ull, 1674066189181445ull}},
+{{1104272050102694164ull, 1339252951345156ull}},
+{{12834881724390041636ull, 2142804722152249ull}},
+{{13957254194253943632ull, 1714243777721799ull}},
+{{14855152170145065228ull, 1371395022177439ull}},
+{{12700197028006373396ull, 2194232035483903ull}},
+{{17538855251888919364ull, 1755385628387122ull}},
+{{6652386572027314844ull, 1404308502709698ull}},
+{{6954469700501793428ull, 2246893604335517ull}},
+{{16631622204627165712ull, 1797514883468413ull}},
+{{2237251319476001600ull, 1438011906774731ull}},
+{{16547196314548442572ull, 1150409525419784ull}},
+{{15407467659051777144ull, 1840655240671655ull}},
+{{12325974127241421716ull, 1472524192537324ull}},
+{{13550128116535047696ull, 1178019354029859ull}},
+{{10612158542230345344ull, 1884830966447775ull}},
+{{8489726833784276276ull, 1507864773158220ull}},
+{{6791781467027421020ull, 1206291818526576ull}},
+{{3488152717760052988ull, 1930066909642522ull}},
+{{13858568618433773360ull, 1544053527714017ull}},
+{{3708157265263198040ull, 1235242822171214ull}},
+{{13311749253904937512ull, 1976388515473942ull}},
+{{3270701773640129364ull, 1581110812379154ull}},
+{{6305910233654013812ull, 1264888649903323ull}},
+{{6400107559104511780ull, 2023821839845317ull}},
+{{16188132491509340392ull, 1619057471876253ull}},
+{{1882459548981741344ull, 1295245977501003ull}},
+{{17769330537338427444ull, 2072393564001604ull}},
+{{17904813244612652276ull, 1657914851201283ull}},
+{{3255804151464390852ull, 1326331880961027ull}},
+{{8898635457084935688ull, 2122131009537643ull}},
+{{14497605995151769196ull, 1697704807630114ull}},
+{{15287433610863325680ull, 1358163846104091ull}},
+{{17081196147897500444ull, 2173062153766546ull}},
+{{9975608103576090032ull, 1738449723013237ull}},
+{{601788853377051376ull, 1390759778410590ull}},
+{{962862165403282204ull, 2225215645456944ull}},
+{{4459638547064536088ull, 1780172516365555ull}},
+{{3567710837651628868ull, 1424138013092444ull}},
+{{6543517484863213416ull, 1139310410473955ull}},
+{{10469627975781141468ull, 1822896656758328ull}},
+{{15754400010108733820ull, 1458317325406662ull}},
+{{5224822378603166412ull, 1166653860325330ull}},
+{{8359715805765066260ull, 1866646176520528ull}},
+{{14066470274095873652ull, 1493316941216422ull}},
+{{3874478589792878276ull, 1194653552973138ull}},
+{{2509816928926694920ull, 1911445684757021ull}},
+{{16765248802108997228ull, 1529156547805616ull}},
+{{9722850226945287460ull, 1223325238244493ull}},
+{{11867211548370549612ull, 1957320381191189ull}},
+{{13183118053438350012ull, 1565856304952951ull}},
+{{6857145628008769684ull, 1252685043962361ull}},
+{{3592735375330210852ull, 2004296070339778ull}},
+{{10252885929747989328ull, 1603436856271822ull}},
+{{823611114314570816ull, 1282749485017458ull}},
+{{16075173041870954600ull, 2052399176027932ull}},
+{{5481440804012943032ull, 1641919340822346ull}},
+{{695803828468444104ull, 1313535472657877ull}},
+{{4802634940291420888ull, 2101656756252603ull}},
+{{11220805581716957356ull, 1681325405002082ull}},
+{{1597946835889745240ull, 1345060324001666ull}},
+{{13624761381649323352ull, 2152096518402665ull}},
+{{10899809105319458680ull, 1721677214722132ull}},
+{{1341149654771746300ull, 1377341771777706ull}},
+{{13213885891860525048ull, 2203746834844329ull}},
+{{14260457528230330360ull, 1762997467875463ull}},
+{{340319578358533320ull, 1410397974300371ull}},
+{{15029650921654467948ull, 1128318379440296ull}},
+{{16668743845163328072ull, 1805309407104474ull}},
+{{17024343890872572780ull, 1444247525683579ull}},
+{{17308823927439968548ull, 1155398020546863ull}},
+{{5558025395452487736ull, 1848636832874982ull}},
+{{15514466760587721156ull, 1478909466299985ull}},
+{{12411573408470176924ull, 1183127573039988ull}},
+{{16169168638810372760ull, 1893004116863981ull}},
+{{9245986096306387884ull, 1514403293491185ull}},
+{{7396788877045110308ull, 1211522634792948ull}},
+{{8145513388530266168ull, 1938436215668717ull}},
+{{17584457155049943904ull, 1550748972534973ull}},
+{{2999519279814224152ull, 1240599178027979ull}},
+{{12177928477186579292ull, 1984958684844766ull}},
+{{6052993967007353112ull, 1587966947875813ull}},
+{{12221092803089703136ull, 1270373558300650ull}},
+{{1107004411233973400ull, 2032597693281041ull}},
+{{15642998787954820012ull, 1626078154624832ull}},
+{{5135701400880035364ull, 1300862523699866ull}},
+{{838424611924235936ull, 2081380037919786ull}},
+{{15428134948507030040ull, 1665104030335828ull}},
+{{1274461514579893064ull, 1332083224268663ull}},
+{{16796533682295470196ull, 2131333158829860ull}},
+{{13437226945836376156ull, 1705066527063888ull}},
+{{18128479186152921572ull, 1364053221651110ull}},
+{{10558822624135122900ull, 2182485154641777ull}},
+{{1068360469824277672ull, 1745988123713422ull}},
+{{11922734820085153108ull, 1396790498970737ull}},
+{{4318980453168603680ull, 2234864798353180ull}},
+{{3455184362534882944ull, 1787891838682544ull}},
+{{6453496304769816676ull, 1430313470946035ull}},
+{{5162797043815853340ull, 1144250776756828ull}},
+{{4571126455363455024ull, 1830801242810925ull}},
+{{3656901164290764020ull, 1464640994248740ull}},
+{{2925520931432611216ull, 1171712795398992ull}},
+{{8370182305034088268ull, 1874740472638387ull}},
+{{17764192288253001584ull, 1499792378110709ull}},
+{{17900702645344311588ull, 1199833902488567ull}},
+{{13883728973583257252ull, 1919734243981708ull}},
+{{38936734640874832ull, 1535787395185367ull}},
+{{11099195831938430836ull, 1228629916148293ull}},
+{{14069364516359579012ull, 1965807865837269ull}},
+{{14944840427829573532ull, 1572646292669815ull}},
+{{11955872342263658828ull, 1258117034135852ull}},
+{{4372000488654212832ull, 2012987254617364ull}},
+{{7186949205665280588ull, 1610389803693891ull}},
+{{2060210549790314144ull, 1288311842955113ull}},
+{{18053732138632143928ull, 2061298948728180ull}},
+{{14442985710905715140ull, 1649039158982544ull}},
+{{15243737383466482436ull, 1319231327186035ull}},
+{{5943235739836820284ull, 2110770123497657ull}},
+{{15822635036095187196ull, 1688616098798125ull}},
+{{12658108028876149756ull, 1350892879038500ull}},
+{{1806228772492287996ull, 2161428606461601ull}},
+{{16202378276961471688ull, 1729142885169280ull}},
+{{12961902621569177352ull, 1383314308135424ull}},
+{{9670997750284952792ull, 2213302893016679ull}},
+{{11426147014969872556ull, 1770642314413343ull}},
+{{16519615241459718692ull, 1416513851530674ull}},
+{{16905041007909685276ull, 1133211081224539ull}},
+{{15980019168429765472ull, 1813137729959263ull}},
+{{1715968890518081408ull, 1450510183967411ull}},
+{{16130170371382106420ull, 1160408147173928ull}},
+{{3672179705759908332ull, 1856653035478286ull}},
+{{17695139023575567960ull, 1485322428382628ull}},
+{{3088064774634723396ull, 1188257942706103ull}},
+{{1251554824673647112ull, 1901212708329765ull}},
+{{1001243859738917688ull, 1520970166663812ull}},
+{{11869041532016865120ull, 1216776133331049ull}},
+{{7922420007001253224ull, 1946841813329679ull}},
+{{10027284820342912904ull, 1557473450663743ull}},
+{{15400525485758150968ull, 1245978760530994ull}},
+{{13572794332987310580ull, 1993566016849591ull}},
+{{7168886651647938140ull, 1594852813479673ull}},
+{{13113806950802171160ull, 1275882250783738ull}},
+{{17292742306541563532ull, 2041411601253981ull}},
+{{10144845030491340504ull, 1633129281003185ull}},
+{{8115876024393072400ull, 1306503424802548ull}},
+{{9296052824287005520ull, 2090405479684077ull}},
+{{58144629945783768ull, 1672324383747262ull}},
+{{11114562148182357984ull, 1337859506997809ull}},
+{{6715252992866041808ull, 2140575211196495ull}},
+{{5372202394292833444ull, 1712460168957196ull}},
+{{608413100692356432ull, 1369968135165757ull}},
+{{4662809775849680616ull, 2191949016265211ull}},
+{{40899005937834168ull, 1753559213012169ull}},
+{{3722068019492177660ull, 1402847370409735ull}},
+{{5955308831187484256ull, 2244555792655576ull}},
+{{1074898250208077080ull, 1795644634124461ull}},
+{{15617313859134102956ull, 1436515707299568ull}},
+{{1425804643081551396ull, 1149212565839655ull}},
+{{2281287428930482232ull, 1838740105343448ull}},
+{{9203727572628206432ull, 1470992084274758ull}},
+{{14741679687586385792ull, 1176793667419806ull}},
+{{16207989870654396624ull, 1882869867871690ull}},
+{{12966391896523517296ull, 1506295894297352ull}},
+{{2994415887734993192ull, 1205036715437882ull}},
+{{8480414235117899432ull, 1928058744700611ull}},
+{{3094982573352409220ull, 1542446995760489ull}},
+{{6165334873423837700ull, 1233957596608391ull}},
+{{2485838167994319672ull, 1974332154573426ull}},
+{{16746065793363097032ull, 1579465723658740ull}},
+{{13396852634690477624ull, 1263572578926992ull}},
+{{6677568956537122908ull, 2021716126283188ull}},
+{{12720752794713518972ull, 1617372901026550ull}},
+{{10176602235770815176ull, 1293898320821240ull}},
+{{16282563577233304284ull, 2070237313313984ull}},
+{{16715399676528553752ull, 1656189850651187ull}},
+{{5993622111739022356ull, 1324951880520950ull}},
+{{9589795378782435768ull, 2119923008833520ull}},
+{{7671836303025948612ull, 1695938407066816ull}},
+{{2448120227678848568ull, 1356750725653453ull}},
+{{227643549544247384ull, 2170801161045525ull}},
+{{182114839635397908ull, 1736640928836420ull}},
+{{145691871708318328ull, 1389312743069136ull}},
+{{11301153438959040292ull, 2222900388910617ull}},
+{{1662225121683411588ull, 1778320311128494ull}},
+{{5019128912088639592ull, 1422656248902795ull}},
+{{4015303129670911672ull, 1138124999122236ull}},
+{{17492531451699189648ull, 1820999998595577ull}},
+{{6615327531875531072ull, 1456799998876462ull}},
+{{16360308469726155828ull, 1165439999101169ull}},
+{{15108447107336118356ull, 1864703998561871ull}},
+{{8397408871126984360ull, 1491763198849497ull}},
+{{17785973541127318456ull, 1193410559079597ull}},
+{{13700162406836068240ull, 1909456894527356ull}},
+{{7270781110726944268ull, 1527565515621885ull}},
+{{5816624888581555416ull, 1222052412497508ull}},
+{{5617251006988578340ull, 1955283859996013ull}},
+{{11872498435074683320ull, 1564227087996810ull}},
+{{9497998748059746656ull, 1251381670397448ull}},
+{{11507449182153684324ull, 2002210672635917ull}},
+{{1827261716239126812ull, 1601768538108734ull}},
+{{5151158187733211772ull, 1281414830486987ull}},
+{{11931201915115049164ull, 2050263728779179ull}},
+{{13234310346833949652ull, 1640210983023343ull}},
+{{17966145906950980368ull, 1312168786418674ull}},
+{{17677787006895837620ull, 2099470058269879ull}},
+{{17831578420258580420ull, 1679576046615903ull}},
+{{3197216291981133364ull, 1343660837292723ull}},
+{{1426197252427903064ull, 2149857339668357ull}},
+{{12209004246168053420ull, 1719885871734685ull}},
+{{9767203396934442736ull, 1375908697387748ull}},
+{{11938176620353198056ull, 2201453915820397ull}},
+{{2171843666798737796ull, 1761163132656318ull}},
+{{9116172562922810884ull, 1408930506125054ull}},
+{{10982286865080159028ull, 1127144404900043ull}},
+{{13882310169386344124ull, 1803431047840069ull}},
+{{14795196950250985624ull, 1442744838272055ull}},
+{{11836157560200788496ull, 1154195870617644ull}},
+{{7869805652095530628ull, 1846713392988231ull}},
+{{2606495706934514180ull, 1477370714390585ull}},
+{{2085196565547611344ull, 1181896571512468ull}},
+{{18093709763843819444ull, 1891034514419948ull}},
+{{3406921366849324584ull, 1512827611535959ull}},
+{{6414885908221369988ull, 1210262089228767ull}},
+{{13953166267896102308ull, 1936419342766027ull}},
+{{3783835384833061200ull, 1549135474212822ull}},
+{{14095114752092179928ull, 1239308379370257ull}},
+{{7794788344379846596ull, 1982893406992412ull}},
+{{17303877119729608244ull, 1586314725593929ull}},
+{{17532450510525596920ull, 1269051780475143ull}},
+{{5915827928389493132ull, 2030482848760230ull}},
+{{4732662342711594504ull, 1624386279008184ull}},
+{{7475478688911185928ull, 1299509023206547ull}},
+{{15650114716999807808ull, 2079214437130475ull}},
+{{12520091773599846244ull, 1663371549704380ull}},
+{{10016073418879876996ull, 1330697239763504ull}},
+{{4957671025982072224ull, 2129115583621607ull}},
+{{15034183265011388748ull, 1703292466897285ull}},
+{{12027346612009111000ull, 1362633973517828ull}},
+{{15554405764472667276ull, 2180214357628525ull}},
+{{12443524611578133820ull, 1744171486102820ull}},
+{{9954819689262507056ull, 1395337188882256ull}},
+{{8549013873336190644ull, 2232539502211610ull}},
+{{6839211098668952516ull, 1786031601769288ull}},
+{{12850066508418982660ull, 1428825281415430ull}},
+{{10280053206735186128ull, 1143060225132344ull}},
+{{5380038686550566836ull, 1828896360211751ull}},
+{{614682134498543144ull, 1463117088169401ull}},
+{{15249140966566475808ull, 1170493670535520ull}},
+{{5951881472796809676ull, 1872789872856833ull}},
+{{12140202807721268388ull, 1498231898285466ull}},
+{{6022813431435104388ull, 1198585518628373ull}},
+{{5947152675554256696ull, 1917736829805397ull}},
+{{15825768584669136328ull, 1534189463844317ull}},
+{{5281917238251488416ull, 1227351571075454ull}},
+{{15829765210686202112ull, 1963762513720726ull}},
+{{8974463353807051364ull, 1571010010976581ull}},
+{{3490221868303730768ull, 1256808008781265ull}},
+{{5584354989285969232ull, 2010892814050024ull}},
+{{8156832806170685708ull, 1608714251240019ull}},
+{{10214815059678458888ull, 1286971400992015ull}},
+{{16343704095485534224ull, 2059154241587224ull}},
+{{16764312091130337700ull, 1647323393269779ull}},
+{{17100798487646180484ull, 1317858714615823ull}},
+{{5225184691782426836ull, 2108573943385318ull}},
+{{11558845382909762116ull, 1686859154708254ull}},
+{{12936425121069720016ull, 1349487323766603ull}},
+{{17008931378969641700ull, 2159179718026565ull}},
+{{13607145103175713360ull, 1727343774421252ull}},
+{{3507018453056750040ull, 1381875019537002ull}},
+{{9300578339632710392ull, 2211000031259203ull}},
+{{14819160301189988960ull, 1768800025007362ull}},
+{{4476630611468170520ull, 1415040020005890ull}},
+{{3581304489174536416ull, 1132032016004712ull}},
+{{9419435997421168588ull, 1811251225607539ull}},
+{{11224897612678845196ull, 1449000980486031ull}},
+{{5290569275401165832ull, 1159200784388825ull}},
+{{8464910840641865332ull, 1854721255022120ull}},
+{{6771928672513492264ull, 1483777004017696ull}},
+{{1728194123268883488ull, 1187021603214157ull}},
+{{6454459411972123908ull, 1899234565142651ull}},
+{{1474218714835788800ull, 1519387652114121ull}},
+{{15936770230836272332ull, 1215510121691296ull}},
+{{18120134739854215088ull, 1944816194706074ull}},
+{{18185456606625282392ull, 1555852955764859ull}},
+{{18237714100042136236ull, 1244682364611887ull}},
+{{14422947301099776688ull, 1991491783379020ull}},
+{{11538357840879821352ull, 1593193426703216ull}},
+{{5541337457961946756ull, 1274554741362573ull}},
+{{5176791117997204488ull, 2039287586180117ull}},
+{{15209479338623494560ull, 1631430068944093ull}},
+{{1099537026673064680ull, 1305144055155275ull}},
+{{1759259242676903488ull, 2088230488248440ull}},
+{{1407407394141522788ull, 1670584390598752ull}},
+{{12193972359538949200ull, 1336467512479001ull}},
+{{12131658145778498076ull, 2138348019966402ull}},
+{{2326628887138977812ull, 1710678415973122ull}},
+{{12929349553936913220ull, 1368542732778497ull}},
+{{5929564027331419860ull, 2189668372445596ull}},
+{{1054302407123225564ull, 1751734697956477ull}},
+{{11911488369924311420ull, 1401387758365181ull}},
+{{11679683762395077628ull, 2242220413384290ull}},
+{{9343747009916062104ull, 1793776330707432ull}},
+{{96299978449029036ull, 1435021064565946ull}},
+{{14834435241726864520ull, 1148016851652756ull}},
+{{16356398757279162588ull, 1836826962644410ull}},
+{{13085119005823330068ull, 1469461570115528ull}},
+{{17846792834142484700ull, 1175569256092422ull}},
+{{13797473275660334232ull, 1880910809747876ull}},
+{{7348629805786357060ull, 1504728647798301ull}},
+{{2189555029887175324ull, 1203782918238641ull}},
+{{14571334492045211492ull, 1926052669181825ull}},
+{{11657067593636169192ull, 1540842135345460ull}},
+{{9325654074908935352ull, 1232673708276368ull}},
+{{11231697705112386244ull, 1972277933242189ull}},
+{{12674706978831819316ull, 1577822346593751ull}},
+{{6450416768323545132ull, 1262257877275001ull}},
+{{2941969199833851564ull, 2019612603640002ull}},
+{{13421621804092812220ull, 1615690082912001ull}},
+{{7047948628532339452ull, 1292552066329601ull}},
+{{3898020176167922480ull, 2068083306127362ull}},
+{{14186462585160068952ull, 1654466644901889ull}},
+{{15038518882869965484ull, 1323573315921511ull}},
+{{16682932583108124132ull, 2117717305474418ull}},
+{{2278299622260768336ull, 1694173844379535ull}},
+{{1822639697808614668ull, 1355339075503628ull}},
+{{17673618775461424760ull, 2168542520805804ull}},
+{{17828243835111050132ull, 1734834016644643ull}},
+{{3194548623863109136ull, 1387867213315715ull}},
+{{5111277798180974620ull, 2220587541305144ull}},
+{{7778371053286690016ull, 1776470033044115ull}},
+{{6222696842629352012ull, 1421176026435292ull}},
+{{16046203918329212580ull, 1136940821148233ull}},
+{{3537833380875278188ull, 1819105313837174ull}},
+{{6519615519442132876ull, 1455284251069739ull}},
+{{8905041230295616624ull, 1164227400855791ull}},
+{{6869368338989165952ull, 1862763841369266ull}},
+{{1806145856449422436ull, 1490211073095413ull}},
+{{8823614314643358596ull, 1192168858476330ull}},
+{{14117782903429373756ull, 1907470173562128ull}},
+{{226179878517768032ull, 1525976138849703ull}},
+{{7559641532298035072ull, 1220780911079762ull}},
+{{15784775266418766440ull, 1953249457727619ull}},
+{{16317169027876923476ull, 1562599566182095ull}},
+{{13053735222301538780ull, 1250079652945676ull}},
+{{13507278726198641404ull, 2000127444713082ull}},
+{{3427125351475092476ull, 1600101955770466ull}},
+{{17499095540147715272ull, 1280081564616372ull}},
+{{13241157605268703144ull, 2048130503386196ull}},
+{{6903577269473052192ull, 1638504402708957ull}},
+{{16590908259804172724ull, 1310803522167165ull}},
+{{8098709141977124740ull, 2097285635467465ull}},
+{{6478967313581699792ull, 1677828508373972ull}},
+{{16251220295091090804ull, 1342262806699177ull}},
+{{11244557213178103996ull, 2147620490718684ull}},
+{{12684994585284393520ull, 1718096392574947ull}},
+{{2769298038743694168ull, 1374477114059958ull}},
+{{741528047248000348ull, 2199163382495933ull}},
+{{7971920067282220924ull, 1759330705996746ull}},
+{{2688187239083866416ull, 1407464564797397ull}},
+{{13218596235492824100ull, 1125971651837917ull}},
+{{6392358717820877272ull, 1801554642940668ull}},
+{{12492584603740522464ull, 1441243714352534ull}},
+{{13683416497734328292ull, 1152994971482027ull}},
+{{7136071137407283976ull, 1844791954371244ull}},
+{{9398205724667737504ull, 1475833563496995ull}},
+{{7518564579734190004ull, 1180666850797596ull}},
+{{4651005698090883360ull, 1889066961276154ull}},
+{{7410153373214617012ull, 1511253569020923ull}},
+{{13306820328055514256ull, 1209002855216738ull}},
+{{17601563710146912484ull, 1934404568346781ull}},
+{{10391902153375619664ull, 1547523654677425ull}},
+{{8313521722700495732ull, 1238018923741940ull}},
+{{13301634756320793172ull, 1980830277987104ull}},
+{{14330656619798544860ull, 1584664222389683ull}},
+{{396478851613104916ull, 1267731377911747ull}},
+{{4323714977322878192ull, 2028370204658795ull}},
+{{3458971981858302552ull, 1622696163727036ull}},
+{{17524572844454283336ull, 1298156930981628ull}},
+{{5903223662675391400ull, 2077051089570606ull}},
+{{1033230115398402796ull, 1661640871656485ull}},
+{{826584092318722236ull, 1329312697325188ull}},
+{{16079929806677596872ull, 2126900315720300ull}},
+{{12863943845342077496ull, 1701520252576240ull}},
+{{10291155076273661996ull, 1361216202060992ull}},
+{{1708452863070217904ull, 2177945923297588ull}},
+{{8745459919939994968ull, 1742356738638070ull}},
+{{6996367935951995976ull, 1393885390910456ull}},
+{{3815491068039372912ull, 2230216625456730ull}},
+{{3052392854431498332ull, 1784173300365384ull}},
+{{6131263098287108988ull, 1427338640292307ull}},
+{{15973056922855418160ull, 1141870912233845ull}},
+{{7110147002859117440ull, 1826993459574153ull}},
+{{13066815231771114596ull, 1461594767659322ull}},
+{{3074754555933071032ull, 1169275814127458ull}},
+{{1230258474751003328ull, 1870841302603933ull}},
+{{8362904409284623308ull, 1496673042083146ull}},
+{{3000974712685788324ull, 1197338433666517ull}},
+{{8490908355039171640ull, 1915741493866427ull}},
+{{17860773128257068284ull, 1532593195093141ull}},
+{{10599269687863744304ull, 1226074556074513ull}},
+{{13269482685840080560ull, 1961719289719221ull}},
+{{6926237333930154124ull, 1569375431775377ull}},
+{{16609036311369854268ull, 1255500345420301ull}},
+{{749016394998394572ull, 2008800552672483ull}},
+{{7977910745482536304ull, 1607040442137986ull}},
+{{2692979781644118720ull, 1285632353710389ull}},
+{{11687465280114410596ull, 2057011765936622ull}},
+{{1971274594607707832ull, 1645609412749298ull}},
+{{8955717305169986912ull, 1316487530199438ull}},
+{{10639798873530068736ull, 2106380048319101ull}},
+{{4822490284082144664ull, 1685104038655281ull}},
+{{168643412523805408ull, 1348083230924225ull}},
+{{269829460038088656ull, 2156933169478760ull}},
+{{215863568030470924ull, 1725546535583008ull}},
+{{7551388483908197384ull, 1380437228466406ull}},
+{{4703523944769295168ull, 2208699565546250ull}},
+{{3762819155815436136ull, 1766959652437000ull}},
+{{3010255324652348908ull, 1413567721949600ull}},
+{{2408204259721879124ull, 1130854177559680ull}},
+{{3853126815555006604ull, 1809366684095488ull}},
+{{10461199081927825928ull, 1447493347276390ull}},
+{{8368959265542260744ull, 1157994677821112ull}},
+{{17079683639609527512ull, 1852791484513779ull}},
+{{17353095726429532332ull, 1482233187611023ull}},
+{{2814430136917894896ull, 1185786550088819ull}},
+{{11881785848552452480ull, 1897258480142110ull}},
+{{9505428678841961984ull, 1517806784113688ull}},
+{{14983040572557390232ull, 1214245427290950ull}},
+{{5526120842382272760ull, 1942792683665521ull}},
+{{731547859163907884ull, 1554234146932417ull}},
+{{11653284731556857276ull, 1243387317545933ull}},
+{{14955906755749061320ull, 1989419708073493ull}},
+{{896678960373518084ull, 1591535766458795ull}},
+{{717343168298814468ull, 1273228613167036ull}},
+{{12215795513503834120ull, 2037165781067257ull}},
+{{2393938781319246648ull, 1629732624853806ull}},
+{{16672546284023038612ull, 1303786099883044ull}},
+{{15608027610211130808ull, 2086057759812871ull}},
+{{8797073273426994324ull, 1668846207850297ull}},
+{{18105705062967326428ull, 1335076966280237ull}},
+{{14211732841780080996ull, 2136123146048380ull}},
+{{11369386273424064796ull, 1708898516838704ull}},
+{{12784857833481162160ull, 1367118813470963ull}},
+{{16766423718827949132ull, 2187390101553541ull}},
+{{9723790160320448984ull, 1749912081242833ull}},
+{{15157729757740179832ull, 1399929664994266ull}},
+{{16873669982900467084ull, 2239887463990826ull}},
+{{9809587171578463344ull, 1791909971192661ull}},
+{{4158320922520860352ull, 1433527976954129ull}},
+{{7016005552758598604ull, 1146822381563303ull}},
+{{7536260069671847444ull, 1834915810501285ull}},
+{{6029008055737477956ull, 1467932648401028ull}},
+{{12201904074073803012ull, 1174346118720822ull}},
+{{4765651259550443524ull, 1878953789953316ull}},
+{{123172192898444496ull, 1503163031962653ull}},
+{{7477235383802576244ull, 1202530425570122ull}},
+{{15652925428826032312ull, 1924048680912195ull}},
+{{12522340343060825852ull, 1539238944729756ull}},
+{{6328523459706750356ull, 1231391155783805ull}},
+{{10125637535530800572ull, 1970225849254088ull}},
+{{15479207657908461104ull, 1576180679403270ull}},
+{{12383366126326768884ull, 1260944543522616ull}},
+{{12434688172639009568ull, 2017511269636186ull}},
+{{6258401723369297332ull, 1614009015708949ull}},
+{{8696070193437348188ull, 1291207212567159ull}},
+{{2845665865274026132ull, 2065931540107455ull}},
+{{2276532692219220904ull, 1652745232085964ull}},
+{{5510574968517287048ull, 1322196185668771ull}},
+{{1438222320143838628ull, 2115513897070034ull}},
+{{4839926670856981224ull, 1692411117656027ull}},
+{{14939987780911315948ull, 1353928894124821ull}},
+{{16525282819974284876ull, 2166286230599714ull}},
+{{16909575070721338224ull, 1733028984479771ull}},
+{{9838311241835160256ull, 1386423187583817ull}},
+{{983902727968615116ull, 2218277100134108ull}},
+{{8165819811858712740ull, 1774621680107286ull}},
+{{2843307034745059868ull, 1419697344085829ull}},
+{{5963994442537958216ull, 1135757875268663ull}},
+{{5853042293318822824ull, 1817212600429861ull}},
+{{993085019913147936ull, 1453770080343889ull}},
+{{4483816830672428672ull, 1163016064275111ull}},
+{{18242153373301616844ull, 1860825702840177ull}},
+{{7215025069157472828ull, 1488660562272142ull}},
+{{16840066499551709232ull, 1190928449817713ull}},
+{{4808013510831272836ull, 1905485519708342ull}},
+{{14914457252890749236ull, 1524388415766673ull}},
+{{863519358086868420ull, 1219510732613339ull}},
+{{8760328602422810120ull, 1951217172181342ull}},
+{{18076309326163979064ull, 1560973737745073ull}},
+{{3393001016705452280ull, 1248778990196059ull}},
+{{12807499256212544296ull, 1998046384313694ull}},
+{{13935348219711945760ull, 1598437107450955ull}},
+{{11148278575769556608ull, 1278749685960764ull}},
+{{6769199277005559604ull, 2045999497537223ull}},
+{{12794057051088268328ull, 1636799598029778ull}},
+{{17613943270354435308ull, 1309439678423822ull}},
+{{13424913973599455204ull, 2095103485478116ull}},
+{{7050582364137653840ull, 1676082788382493ull}},
+{{13019163520793943716ull, 1340866230705994ull}},
+{{9762615189044578980ull, 2145385969129591ull}},
+{{4120743336493752860ull, 1716308775303673ull}},
+{{10675292298678822936ull, 1373047020242938ull}},
+{{13391118863144206372ull, 2196875232388701ull}},
+{{7023546275773454776ull, 1757500185910961ull}},
+{{1929488205876853496ull, 1406000148728769ull}},
+{{10465878758886786240ull, 2249600237966030ull}},
+{{8372703007109428992ull, 1799680190372824ull}},
+{{10387511220429453516ull, 1439744152298259ull}},
+{{11999357791085473136ull, 1151795321838607ull}},
+{{4441577206769115728ull, 1842872514941772ull}},
+{{14621308209641023552ull, 1474298011953417ull}},
+{{4318348938228998192ull, 1179438409562734ull}},
+{{14288055930650217756ull, 1887101455300374ull}},
+{{15119793559262084528ull, 1509681164240299ull}},
+{{15785183662151577944ull, 1207744931392239ull}},
+{{14188247415216793744ull, 1932391890227583ull}},
+{{282551487947704024ull, 1545913512182067ull}},
+{{11294087634583894188ull, 1236730809745653ull}},
+{{14381191400592320380ull, 1978769295593045ull}},
+{{11504953120473856304ull, 1583015436474436ull}},
+{{5514613681637174720ull, 1266412349179549ull}},
+{{16202079520103300200ull, 2026259758687278ull}},
+{{1893617171856909192ull, 1621007806949823ull}},
+{{8893591366969348000ull, 1296806245559858ull}},
+{{10540397372409046476ull, 2074889992895773ull}},
+{{15811015527411057824ull, 1659911994316618ull}},
+{{1580765977703115292ull, 1327929595453295ull}},
+{{2529225564324984468ull, 2124687352725272ull}},
+{{13091426895685718544ull, 1699749882180217ull}},
+{{3094443887064754188ull, 1359799905744174ull}},
+{{12329807848787427348ull, 2175679849190678ull}},
+{{17242543908513762524ull, 1740543879352542ull}},
+{{6415337497327189372ull, 1392435103482034ull}},
+{{17643237625207323644ull, 2227896165571254ull}},
+{{17803938914907769236ull, 1782316932457003ull}},
+{{3175104687700484420ull, 1425853545965603ull}},
+{{9918781379644208180ull, 1140682836772482ull}},
+{{1112654948463091800ull, 1825092538835972ull}},
+{{11958170402996204408ull, 1460074031068777ull}},
+{{2187838692913142880ull, 1168059224855022ull}},
+{{7189890723402938932ull, 1868894759768035ull}},
+{{5751912578722351144ull, 1495115807814428ull}},
+{{11980227692461701564ull, 1196092646251542ull}},
+{{4410969048971081208ull, 1913748234002468ull}},
+{{10907472868660685612ull, 1530998587201974ull}},
+{{12415327109670458812ull, 1224798869761579ull}},
+{{8796476931247003132ull, 1959678191618527ull}},
+{{18105227989223333476ull, 1567742553294821ull}},
+{{10794833576636756456ull, 1254194042635857ull}},
+{{2514338463651169040ull, 2006710468217372ull}},
+{{13079517215146666200ull, 1605368374573897ull}},
+{{3084916142633512312ull, 1284294699659118ull}},
+{{1246517013471709380ull, 2054871519454589ull}},
+{{4686562425519277828ull, 1643897215563671ull}},
+{{59901125673511936ull, 1315117772450937ull}},
+{{3785190615819529424ull, 2104188435921499ull}},
+{{6717501307397533864ull, 1683350748737199ull}},
+{{9063349860659937412ull, 1346680598989759ull}},
+{{3433313332830168892ull, 2154688958383615ull}},
+{{2746650666264135112ull, 1723751166706892ull}},
+{{13265366977237039060ull, 1379000933365513ull}},
+{{17535238348837352172ull, 2206401493384821ull}},
+{{10338841864327971416ull, 1765121194707857ull}},
+{{892375861978556484ull, 1412096955766286ull}},
+{{15471295948550486480ull, 1129677564613028ull}},
+{{2617980629229316432ull, 1807484103380846ull}},
+{{16851779762351094436ull, 1445987282704676ull}},
+{{9792074995138965228ull, 1156789826163741ull}},
+{{8288622362738523716ull, 1850863721861986ull}},
+{{2941549075448908648ull, 1480690977489589ull}},
+{{6042588075101037244ull, 1184552781991671ull}},
+{{2289443290677838944ull, 1895284451186674ull}},
+{{5520903447284181476ull, 1516227560949339ull}},
+{{8106071572569255504ull, 1212982048759471ull}},
+{{5591016886626988160ull, 1940771278015154ull}},
+{{8162162324043500852ull, 1552617022412123ull}},
+{{13908427488718621328ull, 1242093617929698ull}},
+{{117391093498332188ull, 1987349788687518ull}},
+{{7472610504282486396ull, 1589879830950014ull}},
+{{9667437218167899440ull, 1271903864760011ull}},
+{{8089201919584818456ull, 2035046183616018ull}},
+{{13850059165151675412ull, 1628036946892814ull}},
+{{14769396146863250652ull, 1302429557514251ull}},
+{{16252336205497380400ull, 2083887292022802ull}},
+{{5623171334914083672ull, 1667109833618242ull}},
+{{15566583512156997908ull, 1333687866894593ull}},
+{{2770440730999734712ull, 2133900587031350ull}},
+{{2216352584799787768ull, 1707120469625080ull}},
+{{1773082067839830216ull, 1365696375700064ull}},
+{{10215628938027548992ull, 2185114201120102ull}},
+{{793805520938218548ull, 1748091360896082ull}},
+{{11703090860976305808ull, 1398473088716865ull}},
+{{278201303852537676ull, 2237556941946985ull}},
+{{222561043082030140ull, 1790045553557588ull}},
+{{7556746463949444760ull, 1432036442846070ull}},
+{{6045397171159555808ull, 1145629154276856ull}},
+{{2293937844371468644ull, 1833006646842970ull}},
+{{1835150275497174916ull, 1466405317474376ull}},
+{{16225515479365381224ull, 1173124253979500ull}},
+{{7514080693275058344ull, 1876998806367201ull}},
+{{2321915739878136352ull, 1501599045093761ull}},
+{{16614927850870150376ull, 1201279236075008ull}},
+{{4447791672940778660ull, 1922046777720014ull}},
+{{7247582153094533252ull, 1537637422176011ull}},
+{{2108716907733716276ull, 1230109937740809ull}},
+{{10752644681857766692ull, 1968175900385294ull}},
+{{12291464560228123676ull, 1574540720308235ull}},
+{{9833171648182498940ull, 1259632576246588ull}},
+{{12043725822350087984ull, 2015412121994541ull}},
+{{5945631843138160064ull, 1612329697595633ull}},
+{{12135203103994348696ull, 1289863758076506ull}},
+{{12037627336907137268ull, 2063782012922410ull}},
+{{9630101869525709816ull, 1651025610337928ull}},
+{{15082779125104388496ull, 1320820488270342ull}},
+{{9375051341199380304ull, 2113312781232548ull}},
+{{14878738702443324888ull, 1690650224986038ull}},
+{{834944517728928940ull, 1352520179988831ull}},
+{{12403957672592017276ull, 2164032287982129ull}},
+{{13612514952815524144ull, 1731225830385703ull}},
+{{18268709591736239960ull, 1384980664308562ull}},
+{{14472540087810342648ull, 2215969062893700ull}},
+{{11578032070248274116ull, 1772775250314960ull}},
+{{9262425656198619292ull, 1418220200251968ull}},
+{{14788638154442716080ull, 1134576160201574ull}},
+{{12593774602882614760ull, 1815321856322519ull}},
+{{13764368497048002132ull, 1452257485058015ull}},
+{{11011494797638401704ull, 1161805988046412ull}},
+{{2860996417253801436ull, 1858889580874260ull}},
+{{2288797133803041148ull, 1487111664699408ull}},
+{{9209735336526253564ull, 1189689331759526ull}},
+{{7356878908958185060ull, 1903502930815242ull}},
+{{16953549571392279016ull, 1522802344652193ull}},
+{{2494793212888092244ull, 1218241875721755ull}},
+{{3991669140620947588ull, 1949187001154808ull}},
+{{10572032941980578716ull, 1559349600923846ull}},
+{{4768277538842552652ull, 1247479680739077ull}},
+{{11318592876889994564ull, 1995967489182523ull}},
+{{16433571930995816300ull, 1596773991346018ull}},
+{{2078811100570922068ull, 1277419193076815ull}},
+{{3326097760913475312ull, 2043870708922904ull}},
+{{6350227023472690572ull, 1635096567138323ull}},
+{{12458879248261973104ull, 1308077253710658ull}},
+{{16244857982477246644ull, 2092923605937053ull}},
+{{1927839941756066344ull, 1674338884749643ull}},
+{{8920969582888673720ull, 1339471107799714ull}},
+{{3205504888396146988ull, 2143153772479543ull}},
+{{9943101540200738236ull, 1714523017983634ull}},
+{{11643830046902500912ull, 1371618414386907ull}},
+{{3872732816076360164ull, 2194589463019052ull}},
+{{14166232697086819100ull, 1755671570415241ull}},
+{{7643637342927544956ull, 1404537256332193ull}},
+{{8540470933942161612ull, 2247259610131509ull}},
+{{10521725561895639612ull, 1797807688105207ull}},
+{{1038682820032691044ull, 1438246150484166ull}},
+{{15588341514993794128ull, 1150596920387332ull}},
+{{10183951165022429312ull, 1840955072619732ull}},
+{{768463302534122800ull, 1472764058095786ull}},
+{{15372165900994939532ull, 1178211246476628ull}},
+{{2459372553140441316ull, 1885137994362606ull}},
+{{16724893301479994344ull, 1508110395490084ull}},
+{{17069263455925905800ull, 1206488316392067ull}},
+{{12553426270513807988ull, 1930381306227308ull}},
+{{17421438645894867036ull, 1544305044981846ull}},
+{{10247802101973983304ull, 1235444035985477ull}},
+{{1639088104190731996ull, 1976710457576764ull}},
+{{5000619298094495920ull, 1581368366061411ull}},
+{{311146623733686412ull, 1265094692849129ull}},
+{{7876532227457718908ull, 2024151508558606ull}},
+{{2611876967224264800ull, 1619321206846885ull}},
+{{2089501573779411840ull, 1295456965477508ull}},
+{{18100597777014700240ull, 2072731144764012ull}},
+{{7101780592127939544ull, 1658184915811210ull}},
+{{5681424473702351636ull, 1326547932648968ull}},
+{{5400930343181852296ull, 2122476692238349ull}},
+{{8010093089287392160ull, 1697981353790679ull}},
+{{10097423286171824048ull, 1358385083032543ull}},
+{{12466528443133008156ull, 2173416132852069ull}},
+{{13662571569248316848ull, 1738732906281655ull}},
+{{10930057255398653480ull, 1390986325025324ull}},
+{{6420045164412114596ull, 2225578120040519ull}},
+{{8825384946271602000ull, 1780462496032415ull}},
+{{7060307957017281600ull, 1424369996825932ull}},
+{{16716292809839556248ull, 1139495997460745ull}},
+{{8299324422033738384ull, 1823193595937193ull}},
+{{14018157167110811352ull, 1458554876749754ull}},
+{{14903874548430559404ull, 1166843901399803ull}},
+{{1710106389037433112ull, 1866950242239686ull}},
+{{16125480370197587780ull, 1493560193791748ull}},
+{{1832337851932339256ull, 1194848155033399ull}},
+{{10310438192575563456ull, 1911757048053438ull}},
+{{15627048183544271412ull, 1529405638442750ull}},
+{{12501638546835417128ull, 1223524510754200ull}},
+{{1555877601227115788ull, 1957639217206721ull}},
+{{16002097339949333924ull, 1566111373765376ull}},
+{{9112329057217556816ull, 1252889099012301ull}},
+{{7201028862064270260ull, 2004622558419682ull}},
+{{16828869533877147176ull, 1603698046735745ull}},
+{{13463095627101717740ull, 1282958437388596ull}},
+{{14162255373878927740ull, 2052733499821754ull}},
+{{15019153113845052516ull, 1642186799857403ull}},
+{{947276046850311044ull, 1313749439885923ull}},
+{{16273036933928138960ull, 2101999103817476ull}},
+{{9329080732400600844ull, 1681599283053981ull}},
+{{3773915771178570352ull, 1345279426443185ull}},
+{{6038265233885712568ull, 2152447082309096ull}},
+{{1141263372366659728ull, 1721957665847277ull}},
+{{11981057142119058752ull, 1377566132677821ull}},
+{{11790993797906673360ull, 2204105812284514ull}},
+{{13122143853067249008ull, 1763284649827611ull}},
+{{6808366267711888884ull, 1410627719862089ull}},
+{{9136041828911421432ull, 1128502175889671ull}},
+{{7238969296774453644ull, 1805603481423474ull}},
+{{9480524252161473236ull, 1444482785138779ull}},
+{{11273768216471088912ull, 1155586228111023ull}},
+{{14348680331611831940ull, 1848937964977637ull}},
+{{4100246635805644904ull, 1479150371982110ull}},
+{{3280197308644515924ull, 1183320297585688ull}},
+{{1558966879089315156ull, 1893312476137101ull}},
+{{16004568762239093416ull, 1514649980909680ull}},
+{{12803655009791274732ull, 1211719984727744ull}},
+{{9417801571440308604ull, 1938751975564391ull}},
+{{3844892442410336560ull, 1551001580451513ull}},
+{{10454611583412089892ull, 1240801264361210ull}},
+{{16727378533459343832ull, 1985282022977936ull}},
+{{9692554012025564740ull, 1588225618382349ull}},
+{{11443392024362362116ull, 1270580494705879ull}},
+{{7241380794754048416ull, 2032928791529407ull}},
+{{16861151080028969704ull, 1626343033223525ull}},
+{{13488920864023175760ull, 1301074426578820ull}},
+{{3135529308727529604ull, 2081719082526113ull}},
+{{9887121076465844328ull, 1665375266020890ull}},
+{{7909696861172675464ull, 1332300212816712ull}},
+{{16344863792618191064ull, 2131680340506739ull}},
+{{16765239848836463176ull, 1705344272405391ull}},
+{{9722843064327260216ull, 1364275417924313ull}},
+{{11867200088181706024ull, 2182840668678901ull}},
+{{5804411255803454496ull, 1746272534943121ull}},
+{{954180189900853272ull, 1397018027954497ull}},
+{{5216037118583275560ull, 2235228844727195ull}},
+{{4172829694866620448ull, 1788183075781756ull}},
+{{18095659014860937652ull, 1430546460625404ull}},
+{{18165876026630660444ull, 1144437168500323ull}},
+{{6929308754157594772ull, 1831099469600518ull}},
+{{12922144632809896464ull, 1464879575680414ull}},
+{{14027064520989827492ull, 1171903660544331ull}},
+{{15064605604099903344ull, 1875045856870930ull}},
+{{12051684483279922676ull, 1500036685496744ull}},
+{{13330696401365848464ull, 1200029348397395ull}},
+{{2882370168475805924ull, 1920046957435833ull}},
+{{9684593764264465388ull, 1536037565948666ull}},
+{{4058326196669661984ull, 1228830052758933ull}},
+{{2803973099929548856ull, 1966128084414293ull}},
+{{9621876109427459728ull, 1572902467531434ull}},
+{{11386849702283878108ull, 1258321974025147ull}},
+{{3461564264686563680ull, 2013315158440236ull}},
+{{17526646670716892236ull, 1610652126752188ull}},
+{{2953270892347782820ull, 1288521701401751ull}},
+{{15793279871982183480ull, 2061634722242801ull}},
+{{8945275082843836460ull, 1649307777794241ull}},
+{{3466871251533158844ull, 1319446222235393ull}},
+{{1857645187711143832ull, 2111113955576629ull}},
+{{5175464964910825388ull, 1688891164461303ull}},
+{{11519069601412480956ull, 1351112931569042ull}},
+{{3673116103292328236ull, 2161780690510468ull}},
+{{10317190512117683236ull, 1729424552408374ull}},
+{{11943101224436056912ull, 1383539641926699ull}},
+{{8040915514871960088ull, 2213663427082719ull}},
+{{10122081226639478396ull, 1770930741666175ull}},
+{{8097664981311582716ull, 1416744593332940ull}},
+{{6478131985049266172ull, 1133395674666352ull}},
+{{14054359990820736200ull, 1813433079466163ull}},
+{{175441548430857988ull, 1450746463572931ull}},
+{{14897748497712327684ull, 1160597170858344ull}},
+{{12768351152113993324ull, 1856955473373351ull}},
+{{6525332106949284336ull, 1485564378698681ull}},
+{{1530916870817517148ull, 1188451502958945ull}},
+{{2449466993308027436ull, 1901522404734312ull}},
+{{13027620038872152916ull, 1521217923787449ull}},
+{{14111444845839632656ull, 1216974339029959ull}},
+{{11510265309117681284ull, 1947158942447935ull}},
+{{9208212247294145024ull, 1557727153958348ull}},
+{{14745267427319136668ull, 1246181723166678ull}},
+{{1456334995259156728ull, 1993890757066686ull}},
+{{15922463255174966676ull, 1595112605653348ull}},
+{{1669924159914242368ull, 1276090084522679ull}},
+{{10050576285346608440ull, 2041744135236286ull}},
+{{4351112213535376428ull, 1633395308189029ull}},
+{{7170238585570211464ull, 1306716246551223ull}},
+{{7783032922170428024ull, 2090745994481957ull}},
+{{17294472781962073388ull, 1672596795585565ull}},
+{{13835578225569658708ull, 1338077436468452ull}},
+{{7379529901943812644ull, 2140923898349524ull}},
+{{9592972736296960436ull, 1712739118679619ull}},
+{{11363727003779478672ull, 1370191294943695ull}},
+{{18181963206047165876ull, 2192306071909912ull}},
+{{7166872935353912056ull, 1753844857527930ull}},
+{{5733498348283129644ull, 1403075886022344ull}},
+{{16552294986736828076ull, 2244921417635750ull}},
+{{13241835989389462460ull, 1795937134108600ull}},
+{{10593468791511569968ull, 1436749707286880ull}},
+{{8474775033209255976ull, 1149399765829504ull}},
+{{2491593608909078592ull, 1839039625327207ull}},
+{{13061321331352993844ull, 1471231700261765ull}},
+{{10449057065082395072ull, 1176985360209412ull}},
+{{1961096045164190824ull, 1883176576335060ull}},
+{{1568876836131352660ull, 1506541261068048ull}},
+{{8633799098388902776ull, 1205233008854438ull}},
+{{10124729742680334116ull, 1928372814167101ull}},
+{{4410434979402356968ull, 1542698251333681ull}},
+{{18285743242489526868ull, 1234158601066944ull}},
+{{18189142743757512020ull, 1974653761707111ull}},
+{{10861965380264099292ull, 1579723009365689ull}},
+{{12378921118953189756ull, 1263778407492551ull}},
+{{12427576160841282968ull, 2022045451988082ull}},
+{{2563363299189205728ull, 1617636361590466ull}},
+{{16808085898319005872ull, 1294109089272372ull}},
+{{12135542178342768104ull, 2070574542835796ull}},
+{{6019084927932304160ull, 1656459634268637ull}},
+{{15883314386571574296ull, 1325167707414909ull}},
+{{14345256574288787908ull, 2120268331863855ull}},
+{{11476205259431030328ull, 1696214665491084ull}},
+{{12870313022286734584ull, 1356971732392867ull}},
+{{5835105576691134044ull, 2171154771828588ull}},
+{{12046782090836727880ull, 1736923817462870ull}},
+{{9637425672669382304ull, 1389539053970296ull}},
+{{8041183446787191040ull, 2223262486352474ull}},
+{{10122295572171663156ull, 1778609989081979ull}},
+{{11787185272479240848ull, 1422887991265583ull}},
+{{16808445847467213324ull, 1138310393012466ull}},
+{{1068071652754169056ull, 1821296628819947ull}},
+{{11922503766429066216ull, 1457037303055957ull}},
+{{2159305383659432324ull, 1165629842444766ull}},
+{{14522935058080822692ull, 1865007747911625ull}},
+{{11618348046464658152ull, 1492006198329300ull}},
+{{9294678437171726520ull, 1193604958663440ull}},
+{{14871485499474762436ull, 1909767933861504ull}},
+{{15586537214321720272ull, 1527814347089203ull}},
+{{1401183327231645248ull, 1222251477671363ull}},
+{{16999288582538273688ull, 1955602364274180ull}},
+{{13599430866030618952ull, 1564481891419344ull}},
+{{14568893507566405484ull, 1251585513135475ull}},
+{{4863485538396697160ull, 2002536821016761ull}},
+{{201439615975447404ull, 1602029456813409ull}},
+{{3850500507522268244ull, 1281623565450727ull}},
+{{9850149626777539516ull, 2050597704721163ull}},
+{{15258817330905852260ull, 1640478163776930ull}},
+{{12207053864724681808ull, 1312382531021544ull}},
+{{8463239739333759924ull, 2099812049634471ull}},
+{{3081242976725097616ull, 1679849639707577ull}},
+{{13533040825605809060ull, 1343879711766061ull}},
+{{14274167691485473852ull, 2150207538825698ull}},
+{{351287708962648112ull, 1720166031060559ull}},
+{{3970378981912028812ull, 1376132824848447ull}},
+{{10041955185801156424ull, 2201812519757515ull}},
+{{8033564148640925140ull, 1761450015806012ull}},
+{{17494897763138471080ull, 1409160012644809ull}},
+{{17685267025252687188ull, 1127328010115847ull}},
+{{13539031981436658208ull, 1803724816185356ull}},
+{{7141876770407416244ull, 1442979852948285ull}},
+{{5713501416325932992ull, 1154383882358628ull}},
+{{5452253451379582468ull, 1847014211773805ull}},
+{{4361802761103665972ull, 1477611369419044ull}},
+{{7178791023624843100ull, 1182089095535235ull}},
+{{11486065637799748964ull, 1891342552856376ull}},
+{{5499503695497888848ull, 1513074042285101ull}},
+{{710254141656400756ull, 1210459233828081ull}},
+{{12204453070875972180ull, 1936734774124929ull}},
+{{13452911271442688064ull, 1549387819299943ull}},
+{{18141026646637971100ull, 1239510255439954ull}},
+{{17957596190395022788ull, 1983216408703927ull}},
+{{6987379322832197584ull, 1586573126963142ull}},
+{{16657949902491489036ull, 1269258501570513ull}},
+{{4516626955534920520ull, 2030813602512822ull}},
+{{14681348008653667384ull, 1624650882010257ull}},
+{{4366380777439113260ull, 1299720705608206ull}},
+{{18054255688128312188ull, 2079553128973129ull}},
+{{18132753365244560076ull, 1663642503178503ull}},
+{{3438156247969917088ull, 1330914002542803ull}},
+{{1811701182009957020ull, 2129462404068485ull}},
+{{1449360945607965616ull, 1703569923254788ull}},
+{{8538186385970193140ull, 1362855938603830ull}},
+{{13661098217552309024ull, 2180569501766128ull}},
+{{18307576203525667864ull, 1744455601412902ull}},
+{{7267363333336713644ull, 1395564481130322ull}},
+{{15317130148080652156ull, 2232903169808515ull}},
+{{12253704118464521724ull, 1786322535846812ull}},
+{{2424265665287796732ull, 1429058028677450ull}},
+{{1939412532230237388ull, 1143246422941960ull}},
+{{3103060051568379820ull, 1829194276707136ull}},
+{{17239843300222345148ull, 1463355421365708ull}},
+{{2723828195952145148ull, 1170684337092567ull}},
+{{8047473928265342560ull, 1873094939348107ull}},
+{{17506025586838005020ull, 1498475951478485ull}},
+{{14004820469470404016ull, 1198780761182788ull}},
+{{271619862701184484ull, 1918049217892462ull}},
+{{11285342334386678556ull, 1534439374313969ull}},
+{{12717622682251253168ull, 1227551499451175ull}},
+{{1901452217892453456ull, 1964082399121881ull}},
+{{16278557033281604056ull, 1571265919297504ull}},
+{{16712194441367193568ull, 1257012735438003ull}},
+{{4603418217736047772ull, 2011220376700806ull}},
+{{18440129833156479508ull, 1608976301360644ull}},
+{{18441452681267093928ull, 1287181041088515ull}},
+{{11059580216317798672ull, 2059489665741625ull}},
+{{8847664173054238940ull, 1647591732593300ull}},
+{{7078131338443391152ull, 1318073386074640ull}},
+{{11325010141509425840ull, 2108917417719424ull}},
+{{12749356927949450996ull, 1687133934175539ull}},
+{{13888834357101471120ull, 1349707147340431ull}},
+{{14843437341878533148ull, 2159531435744690ull}},
+{{11874749873502826516ull, 1727625148595752ull}},
+{{2121102269318440568ull, 1382100118876602ull}},
+{{7083112445651415232ull, 2211360190202563ull}},
+{{13045187586004952832ull, 1769088152162050ull}},
+{{10436150068803962264ull, 1415270521729640ull}},
+{{8348920055043169812ull, 1132216417383712ull}},
+{{17047620902810982020ull, 1811546267813939ull}},
+{{17327445536990695940ull, 1449237014251151ull}},
+{{10172607614850646428ull, 1159389611400921ull}},
+{{8897474554277213640ull, 1855023378241474ull}},
+{{10807328458163681236ull, 1484018702593179ull}},
+{{12335211581272855312ull, 1187214962074543ull}},
+{{16046989715294658176ull, 1899543939319269ull}},
+{{16526940586977636864ull, 1519635151455415ull}},
+{{13221552469582109492ull, 1215708121164332ull}},
+{{6397088692363733892ull, 1945132993862932ull}},
+{{16185717398116718084ull, 1556106395090345ull}},
+{{12948573918493374468ull, 1244885116072276ull}},
+{{13339020640105578500ull, 1991816185715642ull}},
+{{3292518882600642152ull, 1593452948572514ull}},
+{{6323363920822424044ull, 1274762358858011ull}},
+{{2738684643832057828ull, 2039619774172818ull}},
+{{9569645344549466908ull, 1631695819338254ull}},
+{{11345065090381483848ull, 1305356655470603ull}},
+{{14462755329868463836ull, 2088570648752965ull}},
+{{11570204263894771068ull, 1670856519002372ull}},
+{{1877465781631996208ull, 1336685215201898ull}},
+{{17761340509578835228ull, 2138696344323036ull}},
+{{10519723592921157860ull, 1710957075458429ull}},
+{{12105127689078836608ull, 1368765660366743ull}},
+{{15678855487784228252ull, 2190025056586789ull}},
+{{16232433204969292924ull, 1752020045269431ull}},
+{{9296597749233524016ull, 1401616036215545ull}},
+{{14874556398773638428ull, 2242585657944872ull}},
+{{4520947489535090096ull, 1794068526355898ull}},
+{{10995455621111892724ull, 1435254821084718ull}},
+{{16175062126373334824ull, 1148203856867774ull}},
+{{14812052957971604752ull, 1837126170988439ull}},
+{{15538991181119194124ull, 1469700936790751ull}},
+{{8741844130153444976ull, 1175760749432601ull}},
+{{6608252978761691316ull, 1881217199092162ull}},
+{{16354648827235084020ull, 1504973759273729ull}},
+{{16773067876529977540ull, 1203979007418983ull}},
+{{4700815713996502124ull, 1926366411870374ull}},
+{{7450001385939112024ull, 1541093129496299ull}},
+{{9649349923493199940ull, 1232874503597039ull}},
+{{4370913433363388936ull, 1972599205755263ull}},
+{{10875428376174531796ull, 1578079364604210ull}},
+{{8700342700939625436ull, 1262463491683368ull}},
+{{10231199506761490376ull, 2019941586693389ull}},
+{{11874308420151102624ull, 1615953269354711ull}},
+{{5810097921378971776ull, 1292762615483769ull}},
+{{16674854303690175488ull, 2068420184774030ull}},
+{{13339883442952140392ull, 1654736147819224ull}},
+{{14361255569103622636ull, 1323788918255379ull}},
+{{11909962466340065248ull, 2118062269208607ull}},
+{{2149272343588231552ull, 1694449815366886ull}},
+{{16476813133838226532ull, 1355559852293508ull}},
+{{4226808125689700516ull, 2168895763669614ull}},
+{{7070795315293670736ull, 1735116610935691ull}},
+{{1967287437493026264ull, 1388093288748553ull}},
+{{17905055158956483316ull, 2220949261997684ull}},
+{{18013392941907096976ull, 1776759409598147ull}},
+{{7032016724041856936ull, 1421407527678518ull}},
+{{13004311008717306192ull, 1137126022142814ull}},
+{{9738851169721958940ull, 1819401635428503ull}},
+{{15169778565261387800ull, 1455521308342802ull}},
+{{4757125222725289592ull, 1164417046674242ull}},
+{{11300749171102373672ull, 1863067274678787ull}},
+{{1661901707398078292ull, 1490453819743030ull}},
+{{1329521365918462632ull, 1192363055794424ull}},
+{{9505931814953360860ull, 1907780889271078ull}},
+{{14983443081446509332ull, 1526224711416862ull}},
+{{4608056835673386820ull, 1220979769133490ull}},
+{{7372890937077418912ull, 1953567630613584ull}},
+{{9587661564403845452ull, 1562854104490867ull}},
+{{291431622039255716ull, 1250283283592694ull}},
+{{7844988224746629792ull, 2000453253748310ull}},
+{{6275990579797303836ull, 1600362602998648ull}},
+{{12399490093321663712ull, 1280290082398918ull}},
+{{16149835334572751620ull, 2048464131838269ull}},
+{{16609217082400111620ull, 1638771305470615ull}},
+{{13287373665920089296ull, 1311017044376492ull}},
+{{6502402606504501580ull, 2097627271002388ull}},
+{{12580619714687421908ull, 1678101816801910ull}},
+{{10064495771749937528ull, 1342481453441528ull}},
+{{12413844420057989720ull, 2147970325506445ull}},
+{{9931075536046391776ull, 1718376260405156ull}},
+{{4255511614095203096ull, 1374701008324125ull}},
+{{6808818582552324956ull, 2199521613318600ull}},
+{{5447054866041859964ull, 1759617290654880ull}},
+{{4357643892833487972ull, 1407693832523904ull}},
+{{7175463929008700700ull, 1126155066019123ull}},
+{{7791393471672010800ull, 1801848105630597ull}},
+{{17301161221563339608ull, 1441478484504477ull}},
+{{6462231347766851040ull, 1153182787603582ull}},
+{{14028918971168871988ull, 1845092460165731ull}},
+{{7533786362193187268ull, 1476073968132585ull}},
+{{6027029089754549812ull, 1180859174506068ull}},
+{{5953897728865369380ull, 1889374679209709ull}},
+{{8452466997834205824ull, 1511499743367767ull}},
+{{17830020042493095628ull, 1209199794694213ull}},
+{{6391939179537491068ull, 1934719671510742ull}},
+{{16181597787855723824ull, 1547775737208593ull}},
+{{1877231786058848092ull, 1238220589766875ull}},
+{{3003570857694156944ull, 1981152943627000ull}},
+{{2402856686155325556ull, 1584922354901600ull}},
+{{1922285348924260444ull, 1267937883921280ull}},
+{{3075656558278816712ull, 2028700614274048ull}},
+{{9839222876106874016ull, 1622960491419238ull}},
+{{15250075930369319860ull, 1298368393135390ull}},
+{{5953377414881360160ull, 2077389429016625ull}},
+{{4762701931905088128ull, 1661911543213300ull}},
+{{3810161545524070500ull, 1329529234570640ull}},
+{{6096258472838512804ull, 2127246775313024ull}},
+{{8566355593012720564ull, 1701797420250419ull}},
+{{10542433289152086776ull, 1361437936200335ull}},
+{{16867893262643338840ull, 2178300697920536ull}},
+{{9804965795372760748ull, 1742640558336429ull}},
+{{11533321451040118924ull, 1394112446669143ull}},
+{{14763965506922279952ull, 2230579914670629ull}},
+{{15500521220279734284ull, 1784463931736503ull}},
+{{1332370531998056460ull, 1427571145389203ull}},
+{{8444594055082265812ull, 1142056916311362ull}},
+{{17200699302873535624ull, 1827291066098179ull}},
+{{17449908257040738824ull, 1461832852878543ull}},
+{{2891880161406860088ull, 1169466282302835ull}},
+{{4627008258250976140ull, 1871146051684536ull}},
+{{12257791858870588ull, 1496916841347629ull}},
+{{3699155048229006796ull, 1197533473078103ull}},
+{{2229299262424500548ull, 1916053556924965ull}},
+{{1783439409939600440ull, 1532842845539972ull}},
+{{12494797972177411320ull, 1226274276431977ull}},
+{{5234281496516216820ull, 1962038842291164ull}},
+{{7876774011954883780ull, 1569631073832931ull}},
+{{2612070394821996700ull, 1255704859066345ull}},
+{{4179312631715194720ull, 2009127774506152ull}},
+{{14411496549597886748ull, 1607302219604921ull}},
+{{7839848424936399072ull, 1285841775683937ull}},
+{{16233106294640148844ull, 2057346841094299ull}},
+{{16675833850454029396ull, 1645877472875439ull}},
+{{17030015895105133840ull, 1316701978300351ull}},
+{{1422583728974841884ull, 2106723165280563ull}},
+{{8516764612663694152ull, 1685378532224450ull}},
+{{6813411690130955320ull, 1348302825779560ull}},
+{{10901458704209528516ull, 2157284521247296ull}},
+{{5031818148625712488ull, 1725827616997837ull}},
+{{15093500963126300960ull, 1380662093598269ull}},
+{{13081555096776350568ull, 2209059349757231ull}},
+{{6775895262679170132ull, 1767247479805785ull}},
+{{5420716210143336104ull, 1413797983844628ull}},
+{{11715270597598489528ull, 1131038387075702ull}},
+{{3987037697189941956ull, 1809661419321124ull}},
+{{6878978972493863888ull, 1447729135456899ull}},
+{{9192531992737001432ull, 1158183308365519ull}},
+{{3640004744153471324ull, 1853093293384831ull}},
+{{17669399054290418352ull, 1482474634707864ull}},
+{{17824868058174245004ull, 1185979707766291ull}},
+{{2694347189885419744ull, 1897567532426067ull}},
+{{13223524196134066764ull, 1518054025940853ull}},
+{{17957516986391074060ull, 1214443220752682ull}},
+{{13974631919258077200ull, 1943109153204292ull}},
+{{3801007905922641116ull, 1554487322563434ull}},
+{{6730155139480023216ull, 1243589858050747ull}},
+{{14457597037909947468ull, 1989743772881195ull}},
+{{11566077630327957972ull, 1591795018304956ull}},
+{{5563513289520456056ull, 1273436014643965ull}},
+{{8901621263232729688ull, 2037497623430344ull}},
+{{10810645825328094076ull, 1629998098744275ull}},
+{{8648516660262475260ull, 1303998478995420ull}},
+{{13837626656419960416ull, 2086397566392672ull}},
+{{3691403695652147684ull, 1669118053114138ull}},
+{{10331820586005538796ull, 1335294442491310ull}},
+{{16530912937608862072ull, 2136471107986096ull}},
+{{9535381535345179336ull, 1709176886388877ull}},
+{{249607598792322820ull, 1367341509111102ull}},
+{{4088720972809626836ull, 2187746414577763ull}},
+{{10649674407731522116ull, 1750197131662210ull}},
+{{8519739526185217692ull, 1400157705329768ull}},
+{{9942234427154437988ull, 2240252328527629ull}},
+{{11643136356465460712ull, 1792201862822103ull}},
+{{16693206714656189216ull, 1433761490257682ull}},
+{{5975867742241130724ull, 1147009192206146ull}},
+{{2182690758101988516ull, 1835214707529834ull}},
+{{5435501421223501136ull, 1468171766023867ull}},
+{{15416447581204531876ull, 1174537412819093ull}},
+{{2530223241475789064ull, 1879259860510550ull}},
+{{2024178593180631252ull, 1503407888408440ull}},
+{{1619342874544505000ull, 1202726310726752ull}},
+{{6280297414013118328ull, 1924362097162803ull}},
+{{12402935560694315308ull, 1539489677730242ull}},
+{{2543650819071631600ull, 1231591742184194ull}},
+{{11448538939998431208ull, 1970546787494710ull}},
+{{9158831151998744964ull, 1576437429995768ull}},
+{{14705762551082816616ull, 1261149943996614ull}},
+{{12461173637506775620ull, 2017839910394583ull}},
+{{17347636539489241140ull, 1614271928315666ull}},
+{{10188760416849482588ull, 1291417542652533ull}},
+{{12612667852217261820ull, 2066268068244053ull}},
+{{17468831911257630104ull, 1653014454595242ull}},
+{{6596367899522283436ull, 1322411563676194ull}},
+{{17932886268719474144ull, 2115858501881910ull}},
+{{14346309014975579316ull, 1692686801505528ull}},
+{{409000767754732484ull, 1354149441204423ull}},
+{{15411796487375213264ull, 2166639105927076ull}},
+{{8640088375158260288ull, 1733311284741661ull}},
+{{3222721885384697908ull, 1386649027793329ull}},
+{{12535052646099337300ull, 2218638444469326ull}},
+{{6338693302137559516ull, 1774910755575461ull}},
+{{1381605826968137288ull, 1419928604460369ull}},
+{{4794633476316420156ull, 1135942883568295ull}},
+{{7671413562106272248ull, 1817508613709272ull}},
+{{17205177293910748768ull, 1454006890967417ull}},
+{{6385444205644778368ull, 1163205512773934ull}},
+{{17595408358515466036ull, 1861128820438294ull}},
+{{17765675501554283152ull, 1488903056350635ull}},
+{{14212540401243426520ull, 1191122445080508ull}},
+{{603971753538020496ull, 1905795912128814ull}},
+{{4172526217572326720ull, 1524636729703051ull}},
+{{18095416233025502668ull, 1219709383762440ull}},
+{{10505921899131252652ull, 1951535014019905ull}},
+{{8404737519305002124ull, 1561228011215924ull}},
+{{10413138830185912020ull, 1248982408972739ull}},
+{{5592975684071728264ull, 1998371854356383ull}},
+{{11853078176741203256ull, 1598697483485106ull}},
+{{5793113726651052284ull, 1278957986788085ull}},
+{{9268981962641683652ull, 2046332778860936ull}},
+{{3725836755371436600ull, 1637066223088749ull}},
+{{6670018219039059600ull, 1309652978470999ull}},
+{{18050726779946316012ull, 2095444765553598ull}},
+{{3372534979731321840ull, 1676355812442879ull}},
+{{6387376798526967792ull, 1341084649954303ull}},
+{{6530454062901238148ull, 2145735439926885ull}},
+{{5224363250320990516ull, 1716588351941508ull}},
+{{11558188229740613060ull, 1373270681553206ull}},
+{{11114403538101160252ull, 2197233090485130ull}},
+{{8891522830480928200ull, 1757786472388104ull}},
+{{10802567079126652884ull, 1406229177910483ull}},
+{{13594758511860734292ull, 2249966684656773ull}},
+{{18254504438972408080ull, 1799973347725418ull}},
+{{3535557106952195492ull, 1439978678180335ull}},
+{{2828445685561756396ull, 1151982942544268ull}},
+{{836164282156899908ull, 1843172708070829ull}},
+{{4358280240467430248ull, 1474538166456663ull}},
+{{10865321821857764844ull, 1179630533165330ull}},
+{{17384514914972423756ull, 1887408853064528ull}},
+{{2839565487752208032ull, 1509927082451623ull}},
+{{9650350019685587072ull, 1207941665961298ull}},
+{{11751211216755028996ull, 1932706665538077ull}},
+{{2022271343920202548ull, 1546165332430462ull}},
+{{12685863519361893008ull, 1236932265944369ull}},
+{{9229335186753297844ull, 1979091625510991ull}},
+{{3694119334660727952ull, 1583273300408793ull}},
+{{10333993097212403008ull, 1266618640327034ull}},
+{{5466342511314113844ull, 2026589824523255ull}},
+{{4373074009051291076ull, 1621271859618604ull}},
+{{7187808021982943184ull, 1297017487694883ull}},
+{{7811144020430798772ull, 2075227980311813ull}},
+{{13627612845828459664ull, 1660182384249450ull}},
+{{10902090276662767728ull, 1328145907399560ull}},
+{{17443344442660428368ull, 2125033451839296ull}},
+{{10265326739386432372ull, 1700026761471437ull}},
+{{833563762025325248ull, 1360021409177150ull}},
+{{1333702019240520400ull, 2176034254683440ull}},
+{{1066961615392416320ull, 1740827403746752ull}},
+{{11921615736539664024ull, 1392661922997401ull}},
+{{11695887548979641796ull, 2228259076795842ull}},
+{{1978012409699892788ull, 1782607261436674ull}},
+{{5271758742501824556ull, 1426085809149339ull}},
+{{7906755808743369968ull, 1140868647319471ull}},
+{{5272111664505571300ull, 1825389835711154ull}},
+{{7907038146346367364ull, 1460311868568923ull}},
+{{13704328146560914536ull, 1168249494855138ull}},
+{{18237576219755552936ull, 1869199191768221ull}},
+{{10900712161062532028ull, 1495359353414577ull}},
+{{1341872099366204976ull, 1196287482731662ull}},
+{{5836344173727838284ull, 1914059972370659ull}},
+{{8358424153724180948ull, 1531247977896527ull}},
+{{17754785767205075728ull, 1224998382317221ull}},
+{{2582215524334748904ull, 1959997411707555ull}},
+{{2065772419467799124ull, 1567997929366044ull}},
+{{5341966750316149620ull, 1254398343492835ull}},
+{{8547146800505839396ull, 2007037349588536ull}},
+{{3148368625662761192ull, 1605629879670829ull}},
+{{6208043715272119276ull, 1284503903736663ull}},
+{{6243521129693480520ull, 2055206245978661ull}},
+{{1305468089012874092ull, 1644164996782929ull}},
+{{4733723285952209596ull, 1315331997426343ull}},
+{{3884608442781625032ull, 2104531195882149ull}},
+{{6797035568967210348ull, 1683624956705719ull}},
+{{9126977269915678604ull, 1346899965364575ull}},
+{{14603163631865085764ull, 2155039944583320ull}},
+{{11682530905492068612ull, 1724031955666656ull}},
+{{5656675909651744564ull, 1379225564533325ull}},
+{{9050681455442791308ull, 2206760903253320ull}},
+{{7240545164354233044ull, 1765408722602656ull}},
+{{2103087316741476112ull, 1412326978082125ull}},
+{{1682469853393180888ull, 1129861582465700ull}},
+{{2691951765429089424ull, 1807778531945120ull}},
+{{2153561412343271540ull, 1446222825556096ull}},
+{{16480244388842258524ull, 1156978260444876ull}},
+{{542949318954241376ull, 1851165216711803ull}},
+{{7813057084647213748ull, 1480932173369442ull}},
+{{17318492111943501968ull, 1184745738695553ull}},
+{{5573494490658141208ull, 1895593181912886ull}},
+{{769446777784602644ull, 1516474545530309ull}},
+{{4304906236969592436ull, 1213179636424247ull}},
+{{10577198793893258224ull, 1941087418278795ull}},
+{{8461759035114606580ull, 1552869934623036ull}},
+{{3080058413349774940ull, 1242295947698429ull}},
+{{12306791090843460552ull, 1987673516317486ull}},
+{{6156084057932858116ull, 1590138813053989ull}},
+{{8614216061088196816ull, 1272111050443191ull}},
+{{6404048068257294264ull, 2035377680709106ull}},
+{{1433889639863925088ull, 1628302144567285ull}},
+{{1147111711891140068ull, 1302641715653828ull}},
+{{16592773997993465404ull, 2084226745046124ull}},
+{{16963568013136682644ull, 1667381396036899ull}},
+{{17260203225251256440ull, 1333905116829519ull}},
+{{16548278716176279336ull, 2134248186927231ull}},
+{{9549274158199113144ull, 1707398549541785ull}},
+{{7639419326559290516ull, 1365918839633428ull}},
+{{8533722107752954500ull, 2185470143413485ull}},
+{{6826977686202363600ull, 1748376114730788ull}},
+{{12840279778445711528ull, 1398700891784630ull}},
+{{2097703571803586828ull, 2237921426855409ull}},
+{{5367511672184779784ull, 1790337141484327ull}},
+{{15362055781973554796ull, 1432269713187461ull}},
+{{8600295810836933516ull, 1145815770549969ull}},
+{{2692426853113362656ull, 1833305232879951ull}},
+{{16911336741458331416ull, 1466644186303960ull}},
+{{13529069393166665132ull, 1173315349043168ull}},
+{{17957162214324753888ull, 1877304558469069ull}},
+{{18055078586201713436ull, 1501843646775255ull}},
+{{14444062868961370748ull, 1201474917420204ull}},
+{{12042454146112462228ull, 1922359867872327ull}},
+{{2255265687406149136ull, 1537887894297862ull}},
+{{12872258994150650276ull, 1230310315438289ull}},
+{{9527567946415309476ull, 1968496504701263ull}},
+{{15000751986616068228ull, 1574797203761010ull}},
+{{12000601589292854580ull, 1259837763008808ull}},
+{{15511613728126657008ull, 2015740420814093ull}},
+{{1341244538275594636ull, 1612592336651275ull}},
+{{1072995630620475708ull, 1290073869321020ull}},
+{{1716793008992761136ull, 2064118190913632ull}},
+{{12441480851419939876ull, 1651294552730905ull}},
+{{9953184681135951900ull, 1321035642184724ull}},
+{{4857049045591792072ull, 2113657027495559ull}},
+{{7574988051215343980ull, 1690925621996447ull}},
+{{17128036885198006156ull, 1352740497597157ull}},
+{{12647463757349168556ull, 2164384796155452ull}},
+{{2739273376395514196ull, 1731507836924362ull}},
+{{13259465145342142328ull, 1385206269539489ull}},
+{{10147097788321696756ull, 2216330031263183ull}},
+{{15496375860141178048ull, 1773064025010546ull}},
+{{8707751873371032116ull, 1418451220008437ull}},
+{{18034247942922556664ull, 1134760976006749ull}},
+{{17786750264450359692ull, 1815617561610799ull}},
+{{17918749026302198076ull, 1452494049288639ull}},
+{{18024348035783668784ull, 1161995239430911ull}},
+{{3013515154060497792ull, 1859192383089459ull}},
+{{6100160937990308556ull, 1487353906471567ull}},
+{{15948175194617977816ull, 1189883125177253ull}},
+{{3380987422937302564ull, 1903813000283606ull}},
+{{17462185197317483344ull, 1523050400226884ull}},
+{{17659096972595897000ull, 1218440320181507ull}},
+{{13497159897185793904ull, 1949504512290412ull}},
+{{3419030288264814476ull, 1559603609832330ull}},
+{{2735224230611851580ull, 1247682887865864ull}},
+{{11755056398462783180ull, 1996292620585382ull}},
+{{2025347489286405896ull, 1597034096468306ull}},
+{{16377673250396766008ull, 1277627277174644ull}},
+{{15136230756409094648ull, 2044203643479431ull}},
+{{8419635790385365392ull, 1635362914783545ull}},
+{{6735708632308292316ull, 1308290331826836ull}},
+{{3398436182209447056ull, 2093264530922938ull}},
+{{10097446575251378292ull, 1674611624738350ull}},
+{{8077957260201102632ull, 1339689299790680ull}},
+{{12924731616321764216ull, 2143502879665088ull}},
+{{17718482922541232016ull, 1714802303732070ull}},
+{{14174786338032985612ull, 1371841842985656ull}},
+{{15300960511368956336ull, 2194946948777050ull}},
+{{12240768409095165068ull, 1755957559021640ull}},
+{{9792614727276132056ull, 1404766047217312ull}},
+{{910788304674169996ull, 2247625675547700ull}},
+{{728630643739335996ull, 1798100540438160ull}},
+{{582904514991468796ull, 1438480432350528ull}},
+{{7845021241476995684ull, 1150784345880422ull}},
+{{16241382801105103416ull, 1841254953408675ull}},
+{{12993106240884082732ull, 1473003962726940ull}},
+{{10394484992707266188ull, 1178403170181552ull}},
+{{1873780729363984608ull, 1885445072290484ull}},
+{{5188373398233098008ull, 1508356057832387ull}},
+{{15218745162812209376ull, 1206684846265909ull}},
+{{13281945816273804032ull, 1930695754025455ull}},
+{{10625556653019043228ull, 1544556603220364ull}},
+{{12189794137157144904ull, 1235645282576291ull}},
+{{12124972989967611200ull, 1977032452122066ull}},
+{{6010629577232178636ull, 1581625961697653ull}},
+{{12187201291269563556ull, 1265300769358122ull}},
+{{4742126807063660396ull, 2024481230972996ull}},
+{{104352630909017996ull, 1619584984778397ull}},
+{{11151528548952945364ull, 1295667987822717ull}},
+{{3085050419357071292ull, 2073068780516348ull}},
+{{9846737964969477680ull, 1658455024413078ull}},
+{{15256088001459402788ull, 1326764019530462ull}},
+{{9652345543367403172ull, 2122822431248740ull}},
+{{7721876434693922536ull, 1698257944998992ull}},
+{{17245547591980869000ull, 1358606355999193ull}},
+{{5456783258717928460ull, 2173770169598710ull}},
+{{4365426606974342768ull, 1739016135678968ull}},
+{{10871038915063294860ull, 1391212908543174ull}},
+{{6325615819875540808ull, 2225940653669079ull}},
+{{8749841470642342968ull, 1780752522935263ull}},
+{{14378570805997695020ull, 1424602018348210ull}},
+{{11502856644798156016ull, 1139681614678568ull}},
+{{14715221816935139304ull, 1823490583485709ull}},
+{{15461526268290021768ull, 1458792466788567ull}},
+{{4990523385148196768ull, 1167033973430854ull}},
+{{15363535045720935472ull, 1867254357489366ull}},
+{{8601479221834838056ull, 1493803485991493ull}},
+{{14259881006951691092ull, 1195042788793194ull}},
+{{11747763166896974776ull, 1912068462069111ull}},
+{{5708861718775669496ull, 1529654769655289ull}},
+{{8256438189762445920ull, 1223723815724231ull}},
+{{5831603474136092828ull, 1957958105158770ull}},
+{{4665282779308874260ull, 1566366484127016ull}},
+{{42877408705189084ull, 1253093187301613ull}},
+{{14825999112895943832ull, 2004949099682580ull}},
+{{11860799290316755064ull, 1603959279746064ull}},
+{{13177988246995314376ull, 1283167423796851ull}},
+{{13706083565708682356ull, 2053067878074962ull}},
+{{3586169223083125236ull, 1642454302459970ull}},
+{{2868935378466500188ull, 1313963441967976ull}},
+{{15658343049772131272ull, 2102341507148761ull}},
+{{8837325625075794696ull, 1681873205719009ull}},
+{{10759209314802546080ull, 1345498564575207ull}},
+{{2457339644716432436ull, 2152797703320332ull}},
+{{13033918159998876916ull, 1722238162656265ull}},
+{{10427134527999101532ull, 1377790530125012ull}},
+{{1926019985830921160ull, 2204464848200020ull}},
+{{1540815988664736928ull, 1763571878560016ull}},
+{{15990048049899430836ull, 1410857502848012ull}},
+{{5413340810435724020ull, 1128686002278410ull}},
+{{8661345296697158436ull, 1805897603645456ull}},
+{{3239727422615816424ull, 1444718082916365ull}},
+{{2591781938092653140ull, 1155774466333092ull}},
+{{7836199915690155348ull, 1849239146132947ull}},
+{{17337006376777855248ull, 1479391316906357ull}},
+{{6490907471938463552ull, 1183513053525086ull}},
+{{3006754325617721036ull, 1893620885640138ull}},
+{{9784101089977997476ull, 1514896708512110ull}},
+{{7827280871982397980ull, 1211917366809688ull}},
+{{8834300580429926444ull, 1939067786895501ull}},
+{{3378091649602030832ull, 1551254229516401ull}},
+{{17459868578649265960ull, 1241003383613120ull}},
+{{9489045652129273920ull, 1985605413780993ull}},
+{{14969934151187239780ull, 1588484331024794ull}},
+{{15665296135691702148ull, 1270787464819835ull}},
+{{6617729743397171820ull, 2033259943711737ull}},
+{{16362230238943468428ull, 1626607954969389ull}},
+{{16779133005896685064ull, 1301286363975511ull}},
+{{1021171106241323840ull, 2082058182360819ull}},
+{{4506285699734969396ull, 1665646545888655ull}},
+{{3605028559787975516ull, 1332517236710924ull}},
+{{13146743325144581472ull, 2132027578737478ull}},
+{{17896092289599485824ull, 1705622062989982ull}},
+{{6938176202195768012ull, 1364497650391986ull}},
+{{3722384294029408176ull, 2183196240627178ull}},
+{{10356605064707347188ull, 1746556992501742ull}},
+{{906586422282057104ull, 1397245594001394ull}},
+{{8829235905135112012ull, 2235592950402230ull}},
+{{7063388724108089608ull, 1788474360321784ull}},
+{{9340059794028382008ull, 1430779488257427ull}},
+{{93350205738884960ull, 1144623590605942ull}},
+{{3838709143924126260ull, 1831397744969507ull}},
+{{14139013759365031980ull, 1465118195975605ull}},
+{{11311211007492025584ull, 1172094556780484ull}},
+{{7029891167761509964ull, 1875351290848775ull}},
+{{5623912934209207972ull, 1500281032679020ull}},
+{{4499130347367366376ull, 1200224826143216ull}},
+{{18266655000013517172ull, 1920359721829145ull}},
+{{14613324000010813736ull, 1536287777463316ull}},
+{{8001310385266740668ull, 1229030221970653ull}},
+{{9112747801684874744ull, 1966448355153045ull}},
+{{7290198241347899796ull, 1573158684122436ull}},
+{{2142809778336409512ull, 1258526947297949ull}},
+{{10807193274822075868ull, 2013643115676718ull}},
+{{16024452249341481340ull, 1610914492541374ull}},
+{{16508910614215095396ull, 1288731594033099ull}},
+{{15346210538518421664ull, 2061970550452959ull}},
+{{15966317245556647652ull, 1649576440362367ull}},
+{{5394356166961497476ull, 1319661152289894ull}},
+{{16009667496622216608ull, 2111457843663830ull}},
+{{12807733997297773288ull, 1689166274931064ull}},
+{{13935536012580128952ull, 1351333019944851ull}},
+{{14918159990644385680ull, 2162132831911762ull}},
+{{4555830363031687896ull, 1729706265529410ull}},
+{{3644664290425350316ull, 1383765012423528ull}},
+{{2142114049938650184ull, 2214024019877645ull}},
+{{1713691239950920148ull, 1771219215902116ull}},
+{{16128348250928377408ull, 1416975372721692ull}},
+{{5523980971258881280ull, 1133580298177354ull}},
+{{16217067183498030696ull, 1813728477083766ull}},
+{{9284304932056514236ull, 1450982781667013ull}},
+{{14806141575129032032ull, 1160786225333610ull}},
+{{5243082446496899640ull, 1857257960533777ull}},
+{{15262512401423250680ull, 1485806368427021ull}},
+{{8520661106396690220ull, 1188645094741617ull}},
+{{17322406584976614676ull, 1901832151586587ull}},
+{{6479227638497471096ull, 1521465721269270ull}},
+{{5183382110797976876ull, 1217172577015416ull}},
+{{914713747792942356ull, 1947476123224666ull}},
+{{15489166257201995176ull, 1557980898579732ull}},
+{{5012635376277775496ull, 1246384718863786ull}},
+{{641518972560620148ull, 1994215550182058ull}},
+{{7891912807532316764ull, 1595372440145646ull}},
+{{2624181431283943088ull, 1276297952116517ull}},
+{{7888039104796219264ull, 2042076723386427ull}},
+{{17378477728062706380ull, 1633661378709141ull}},
+{{10213433367708254780ull, 1306929102967313ull}},
+{{12652144573591297328ull, 2091086564747701ull}},
+{{6432366844131127536ull, 1672869251798161ull}},
+{{1456544660562991708ull, 1338295401438529ull}},
+{{9709169086384607380ull, 2141272642301646ull}},
+{{4077986454365775580ull, 1713018113841317ull}},
+{{14330435607718351432ull, 1370414491073053ull}},
+{{792604083897900352ull, 2192663185716886ull}},
+{{15391478526085961576ull, 1754130548573508ull}},
+{{1245136376643038292ull, 1403304438858807ull}},
+{{5681567017370771588ull, 2245287102174091ull}},
+{{855904799154706948ull, 1796229681739273ull}},
+{{8063421468807586204ull, 1436983745391418ull}},
+{{13829434804529889608ull, 1149586996313134ull}},
+{{11059049243022092408ull, 1839339194101015ull}},
+{{8847239394417673924ull, 1471471355280812ull}},
+{{18145837959759870108ull, 1177177084224649ull}},
+{{17965294291390061204ull, 1883483334759439ull}},
+{{18061584247853959288ull, 1506786667807551ull}},
+{{10759918583541257108ull, 1205429334246041ull}},
+{{9837172104182190724ull, 1928686934793666ull}},
+{{4180388868603842256ull, 1542949547834933ull}},
+{{10723008724366894452ull, 1234359638267946ull}},
+{{9778116329503210476ull, 1974975421228714ull}},
+{{11511841878344478704ull, 1579980336982971ull}},
+{{5520124687933672640ull, 1263984269586377ull}},
+{{12521548315435786548ull, 2022374831338203ull}},
+{{17395936281832449884ull, 1617899865070562ull}},
+{{6538051395982139260ull, 1294319892056450ull}},
+{{10460882233571422820ull, 2070911827290320ull}},
+{{8368705786857138256ull, 1656729461832256ull}},
+{{3005615814743800280ull, 1325383569465805ull}},
+{{4808985303590080448ull, 2120613711145288ull}},
+{{11225885872355885004ull, 1696490968916230ull}},
+{{8980708697884708004ull, 1357192775132984ull}},
+{{3301087472389801836ull, 2171508440212775ull}},
+{{2640869977911841468ull, 1737206752170220ull}},
+{{2112695982329473176ull, 1389765401736176ull}},
+{{14448360015952888052ull, 2223624642777881ull}},
+{{7869339198020400116ull, 1778899714222305ull}},
+{{6295471358416320092ull, 1423119771377844ull}},
+{{8725725901474966396ull, 1138495817102275ull}},
+{{13961161442359946236ull, 1821593307363640ull}},
+{{11168929153887956988ull, 1457274645890912ull}},
+{{1556445693626544944ull, 1165819716712730ull}},
+{{2490313109802471912ull, 1865311546740368ull}},
+{{9370948117325798176ull, 1492249237392294ull}},
+{{11186107308602548864ull, 1193799389913835ull}},
+{{17897771693764078184ull, 1910079023862136ull}},
+{{10628868540269352224ull, 1528063219089709ull}},
+{{12192443646957392100ull, 1222450575271767ull}},
+{{4750514576164186072ull, 1955920920434828ull}},
+{{11179109290415169504ull, 1564736736347862ull}},
+{{1564589802848314956ull, 1251789389078290ull}},
+{{2503343684557303928ull, 2002863022525264ull}},
+{{5692023762387753468ull, 1602290418020211ull}},
+{{864270195168292448ull, 1281832334416169ull}},
+{{8761529941753088568ull, 2050931735065870ull}},
+{{7009223953402470852ull, 1640745388052696ull}},
+{{1918030347980066360ull, 1312596310442157ull}},
+{{6758197371510016500ull, 2100154096707451ull}},
+{{1717209082466102876ull, 1680123277365961ull}},
+{{16131162524940523592ull, 1344098621892768ull}},
+{{3673767151453375808ull, 2150557795028430ull}},
+{{2939013721162700648ull, 1720446236022744ull}},
+{{6040559791672070840ull, 1376356988818195ull}},
+{{9664895666675313348ull, 2202171182109112ull}},
+{{353218903856430032ull, 1761736945687290ull}},
+{{282575123085144024ull, 1409389556549832ull}},
+{{11294106542693846188ull, 1127511645239865ull}},
+{{18070570468310153904ull, 1804018632383784ull}},
+{{18145805189390033444ull, 1443214905907027ull}},
+{{7137946522028206108ull, 1154571924725622ull}},
+{{15110063249987040100ull, 1847315079560995ull}},
+{{12088050599989632080ull, 1477852063648796ull}},
+{{5981091665249795340ull, 1182281650919037ull}},
+{{13259095479141582868ull, 1891650641470459ull}},
+{{14296625198055176616ull, 1513320513176367ull}},
+{{4058602528960320648ull, 1210656410541094ull}},
+{{13872461675820333684ull, 1937050256865750ull}},
+{{11097969340656266944ull, 1549640205492600ull}},
+{{8878375472525013556ull, 1239712164394080ull}},
+{{14205400756040021692ull, 1983539463030528ull}},
+{{296274160606286384ull, 1586831570424423ull}},
+{{7615716957968849752ull, 1269465256339538ull}},
+{{8495798318008249280ull, 2031144410143261ull}},
+{{3107289839664689100ull, 1624915528114609ull}},
+{{6175180686473661604ull, 1299932422491687ull}},
+{{13569637913099768892ull, 2079891875986699ull}},
+{{14545059145221725436ull, 1663913500789359ull}},
+{{15325396130919290672ull, 1331130800631487ull}},
+{{9763238550503223780ull, 2129809281010380ull}},
+{{7810590840402579024ull, 1703847424808304ull}},
+{{9937821487063973544ull, 1363077939846643ull}},
+{{12211165564560447348ull, 2180924703754629ull}},
+{{13458281266390268200ull, 1744739763003703ull}},
+{{18145322642596035208ull, 1395791810402962ull}},
+{{14275120969186015040ull, 2233266896644740ull}},
+{{11420096775348812032ull, 1786613517315792ull}},
+{{1757379790795228976ull, 1429290813852634ull}},
+{{5095252647378093504ull, 1143432651082107ull}},
+{{11841753050546859932ull, 1829492241731371ull}},
+{{5784053625695577620ull, 1463593793385097ull}},
+{{15695289344782193068ull, 1170875034708077ull}},
+{{10355067692683867616ull, 1873400055532924ull}},
+{{11973402968889004416ull, 1498720044426339ull}},
+{{13268071189853113856ull, 1198976035541071ull}},
+{{13850216274281161524ull, 1918361656865714ull}},
+{{14769521834166839540ull, 1534689325492571ull}},
+{{8126268652591561308ull, 1227751460394057ull}},
+{{16691378658888408420ull, 1964402336630491ull}},
+{{9663754112368816412ull, 1571521869304393ull}},
+{{15109700919378873776ull, 1257217495443514ull}},
+{{13107475026780467072ull, 2011547992709623ull}},
+{{17864677650908194304ull, 1609238394167698ull}},
+{{3223695676500824472ull, 1287390715334159ull}},
+{{12536610711885139804ull, 2059825144534654ull}},
+{{13718637384250022164ull, 1647860115627723ull}},
+{{18353607536883838380ull, 1318288092502178ull}},
+{{7229679170562679468ull, 2109260948003486ull}},
+{{2094394521708233252ull, 1687408758402789ull}},
+{{5364864432108496924ull, 1349927006722231ull}},
+{{1205085461889774432ull, 2159883210755570ull}},
+{{964068369511819544ull, 1727906568604456ull}},
+{{15528649954577096928ull, 1382325254883564ull}},
+{{13777793483097624116ull, 2211720407813703ull}},
+{{18400932415961919940ull, 1769376326250962ull}},
+{{7342048303285715304ull, 1415501061000770ull}},
+{{5873638642628572244ull, 1132400848800616ull}},
+{{2019124198721894944ull, 1811841358080986ull}},
+{{16372694617945157248ull, 1449473086464788ull}},
+{{2030109250130394828ull, 1159578469171831ull}},
+{{14316221244434362696ull, 1855325550674929ull}},
+{{15142325810289400480ull, 1484260440539943ull}},
+{{1045814204005789416ull, 1187408352431955ull}},
+{{1673302726409263064ull, 1899853363891128ull}},
+{{8717339810611231096ull, 1519882691112902ull}},
+{{18041918292714715848ull, 1215906152890321ull}},
+{{3041627565150173092ull, 1945449844624515ull}},
+{{2433302052120138476ull, 1556359875699612ull}},
+{{13014688085921841748ull, 1245087900559689ull}},
+{{9755454493249215828ull, 1992140640895503ull}},
+{{15183061224083193308ull, 1593712512716402ull}},
+{{4767751349782734000ull, 1274970010173122ull}},
+{{11317750974394284728ull, 2039952016276995ull}},
+{{9054200779515427780ull, 1631961613021596ull}},
+{{3554011808870431900ull, 1305569290417277ull}},
+{{9375767708934601364ull, 2088910864667643ull}},
+{{14879311796631501740ull, 1671128691734114ull}},
+{{15592798252047111712ull, 1336902953387291ull}},
+{{17569779573791558096ull, 2139044725419666ull}},
+{{10366474844291336152ull, 1711235780335733ull}},
+{{15671877504916889568ull, 1368988624268586ull}},
+{{17696306378383202664ull, 2190381798829738ull}},
+{{3088998658480831164ull, 1752305439063791ull}},
+{{17228594185752306224ull, 1401844351251032ull}},
+{{12808355438236048664ull, 2242950962001652ull}},
+{{2867986721105018284ull, 1794360769601322ull}},
+{{13362435821109745596ull, 1435488615681057ull}},
+{{3311251027403975832ull, 1148390892544846ull}},
+{{16366048088072092300ull, 1837425428071753ull}},
+{{2024792026231942868ull, 1469940342457403ull}},
+{{8998531250469374940ull, 1175952273965922ull}},
+{{18086998815492910232ull, 1881523638345475ull}},
+{{14469599052394328184ull, 1505218910676380ull}},
+{{11575679241915462548ull, 1204175128541104ull}},
+{{7453040342839009108ull, 1926680205665767ull}},
+{{17030478718496938256ull, 1541344164532613ull}},
+{{2556336530571819632ull, 1233075331626091ull}},
+{{15158184893140642384ull, 1972920530601745ull}},
+{{12126547914512513908ull, 1578336424481396ull}},
+{{6011889516868100804ull, 1262669139585117ull}},
+{{13308372041730871608ull, 2020270623336187ull}},
+{{3268000003900876640ull, 1616216498668950ull}},
+{{2614400003120701312ull, 1292973198935160ull}},
+{{4183040004993122100ull, 2068757118296256ull}},
+{{18103827262962138972ull, 1655005694637004ull}},
+{{18172410625111621500ull, 1324004555709603ull}},
+{{6939764111727132464ull, 2118407289135366ull}},
+{{1862462474639795648ull, 1694725831308293ull}},
+{{8868667609195657164ull, 1355780665046634ull}},
+{{3121821730487320492ull, 2169249064074615ull}},
+{{2497457384389856392ull, 1735399251259692ull}},
+{{13066012351737616084ull, 1388319401007753ull}},
+{{17216270948038275412ull, 2221311041612405ull}},
+{{13773016758430620328ull, 1777048833289924ull}},
+{{14707762221486406588ull, 1421639066631939ull}},
+{{15455558591931035592ull, 1137311253305551ull}},
+{{17350196117605836304ull, 1819698005288882ull}},
+{{6501459264600848396ull, 1455758404231106ull}},
+{{1511818596938768392ull, 1164606723384885ull}},
+{{2418909755102029428ull, 1863370757415816ull}},
+{{16692523063049264836ull, 1490696605932652ull}},
+{{5975320820955591220ull, 1192557284746122ull}},
+{{13249862128270856280ull, 1908091655593795ull}},
+{{10599889702616685024ull, 1526473324475036ull}},
+{{4790562947351437696ull, 1221178659580029ull}},
+{{15043598345246120960ull, 1953885855328046ull}},
+{{8345529861454986444ull, 1563108684262437ull}},
+{{17744470333389720124ull, 1250486947409949ull}},
+{{17323106089197821232ull, 2000779115855919ull}},
+{{17547833686100167308ull, 1600623292684735ull}},
+{{14038266948880133844ull, 1280498634147788ull}},
+{{325134229756752216ull, 2048797814636462ull}},
+{{11328153828031132740ull, 1639038251709169ull}},
+{{12751871877166816516ull, 1311230601367335ull}},
+{{1956250929757354808ull, 2097968962187737ull}},
+{{12633047188031614816ull, 1678375169750189ull}},
+{{13795786565167202176ull, 1342700135800151ull}},
+{{14694560874783702836ull, 2148320217280242ull}},
+{{4376951070343141624ull, 1718656173824194ull}},
+{{7190909671016423620ull, 1374924939059355ull}},
+{{11505455473626277796ull, 2199879902494968ull}},
+{{16583062008384842880ull, 1759903921995974ull}},
+{{16955798421449784628ull, 1407923137596779ull}},
+{{17253987551901738024ull, 1126338510077423ull}},
+{{5470287194591318904ull, 1802141616123878ull}},
+{{11754927385156875768ull, 1441713292899102ull}},
+{{2025244278641679968ull, 1153370634319282ull}},
+{{6929739660568598272ull, 1845393014910851ull}},
+{{1854442913712968296ull, 1476314411928681ull}},
+{{16240949589938015928ull, 1181051529542944ull}},
+{{14917472899675094516ull, 1889682447268711ull}},
+{{8244629504998165288ull, 1511745957814969ull}},
+{{10285052418740442556ull, 1209396766251975ull}},
+{{16456083869984708088ull, 1935034826003160ull}},
+{{13164867095987766472ull, 1548027860802528ull}},
+{{17910591306274033824ull, 1238422288642022ull}},
+{{13899550831070812824ull, 1981475661827236ull}},
+{{7430291850114739936ull, 1585180529461789ull}},
+{{9633582294833702272ull, 1268144423569431ull}},
+{{8035034042250102988ull, 2029031077711090ull}},
+{{6428027233800082392ull, 1623224862168872ull}},
+{{16210468231265796880ull, 1298579889735097ull}},
+{{11179353911057633720ull, 2077727823576156ull}},
+{{5254134314104196652ull, 1662182258860925ull}},
+{{4203307451283357320ull, 1329745807088740ull}},
+{{6725291922053371716ull, 2127593291341984ull}},
+{{9069582352384607696ull, 1702074633073587ull}},
+{{18323712326133417124ull, 1361659706458869ull}},
+{{18249893277587736432ull, 2178655530334191ull}},
+{{10910565807328278820ull, 1742924424267353ull}},
+{{16107150275346443704ull, 1394339539413882ull}},
+{{11014045181586668632ull, 2230943263062212ull}},
+{{1432538515785514260ull, 1784754610449770ull}},
+{{1146030812628411408ull, 1427803688359816ull}},
+{{15674219909070370420ull, 1142242950687852ull}},
+{{10321356595544951380ull, 1827588721100564ull}},
+{{11946434091177871424ull, 1462070976880451ull}},
+{{5867798458200386816ull, 1169656781504361ull}},
+{{2009779903636798260ull, 1871450850406978ull}},
+{{8986521552393259256ull, 1497160680325582ull}},
+{{18257263686140338372ull, 1197728544260465ull}},
+{{10764877824114989784ull, 1916365670816745ull}},
+{{8611902259291991824ull, 1533092536653396ull}},
+{{3200172992691683136ull, 1226474029322717ull}},
+{{8809625603048603344ull, 1962358446916347ull}},
+{{18115746926664613644ull, 1569886757533077ull}},
+{{7113899911847870268ull, 1255909406026462ull}},
+{{15071588673698502752ull, 2009455049642339ull}},
+{{15746619753700712524ull, 1607564039713871ull}},
+{{8907946988218659696ull, 1286051231771097ull}},
+{{17942063995891765840ull, 2057681970833755ull}},
+{{14353651196713412672ull, 1646145576667004ull}},
+{{15172269772112640460ull, 1316916461333603ull}},
+{{2139538746928762796ull, 2107066338133766ull}},
+{{16469026256510651532ull, 1685653070507012ull}},
+{{5796523375724700576ull, 1348522456405610ull}},
+{{9274437401159520924ull, 2157635930248976ull}},
+{{3730201106185706416ull, 1726108744199181ull}},
+{{17741556143916206424ull, 1380886995359344ull}},
+{{17318443386040199312ull, 2209419192574951ull}},
+{{10165405894090249128ull, 1767535354059961ull}},
+{{4442975900530288976ull, 1414028283247969ull}},
+{{7243729535166141504ull, 1131222626598375ull}},
+{{11589967256265826408ull, 1809956202557400ull}},
+{{9271973805012661128ull, 1447964962045920ull}},
+{{7417579044010128900ull, 1158371969636736ull}},
+{{4489428840932385596ull, 1853395151418778ull}},
+{{10970240702229729124ull, 1482716121135022ull}},
+{{1397494932299962652ull, 1186172896908018ull}},
+{{16993387150647581536ull, 1897876635052828ull}},
+{{2526663276292334260ull, 1518301308042263ull}},
+{{9400028250517688052ull, 1214641046433810ull}},
+{{15040045200828300888ull, 1943425674294096ull}},
+{{8342687345920730388ull, 1554740539435277ull}},
+{{17742196320962315280ull, 1243792431548221ull}},
+{{2562072410346332184ull, 1990067890477155ull}},
+{{2049657928277065748ull, 1592054312381724ull}},
+{{5329075157363562920ull, 1273643449905379ull}},
+{{15905217881265521320ull, 2037829519848606ull}},
+{{9034825490270506732ull, 1630263615878885ull}},
+{{7227860392216405384ull, 1304210892703108ull}},
+{{7875227812804338296ull, 2086737428324973ull}},
+{{13678879879727291280ull, 1669389942659978ull}},
+{{18321801533265653672ull, 1335511954127982ull}},
+{{14557487194257404584ull, 2136819126604772ull}},
+{{4267292125922103020ull, 1709455301283818ull}},
+{{10792531330221503060ull, 1367564241027054ull}},
+{{6200003684128673928ull, 2188102785643287ull}},
+{{16028049391528670112ull, 1750482228514629ull}},
+{{16511788327964846412ull, 1400385782811703ull}},
+{{4282768436292292324ull, 2240617252498726ull}},
+{{18183610008001475152ull, 1792493801998980ull}},
+{{14546888006401180120ull, 1433995041599184ull}},
+{{15326859219862854420ull, 1147196033279347ull}},
+{{9765579492812925780ull, 1835513653246956ull}},
+{{4123114779508430300ull, 1468410922597565ull}},
+{{3298491823606744240ull, 1174728738078052ull}},
+{{8966935732512701108ull, 1879565980924883ull}},
+{{14552246215493981532ull, 1503652784739906ull}},
+{{7952448157653274900ull, 1202922227791925ull}},
+{{12723917052245239844ull, 1924675564467080ull}},
+{{10179133641796191876ull, 1539740451573664ull}},
+{{11832655728178863824ull, 1231792361258931ull}},
+{{11553551535602361472ull, 1970867778014290ull}},
+{{9242841228481889176ull, 1576694222411432ull}},
+{{15575353301690696ull, 1261355377929146ull}},
+{{11092967009508436080ull, 2018168604686633ull}},
+{{16253071237090569512ull, 1614534883749306ull}},
+{{9313108174930545284ull, 1291627906999445ull}},
+{{14900973079888872460ull, 2066604651199112ull}},
+{{4542080834427277320ull, 1653283720959290ull}},
+{{3633664667541821856ull, 1322626976767432ull}},
+{{9503212282808825292ull, 2116203162827891ull}},
+{{3913221011505149912ull, 1692962530262313ull}},
+{{10509274438687940576ull, 1354370024209850ull}},
+{{16814839101900704920ull, 2166992038735760ull}},
+{{13451871281520563936ull, 1733593630988608ull}},
+{{18140194654700271796ull, 1386874904790886ull}},
+{{3198869744327062612ull, 2218999847665419ull}},
+{{6248444610203560412ull, 1775199878132335ull}},
+{{4998755688162848328ull, 1420159902505868ull}},
+{{11377702180014099308ull, 1136127922004694ull}},
+{{7136277043796827924ull, 1817804675207511ull}},
+{{2019672820295552016ull, 1454243740166009ull}},
+{{5305087070978351936ull, 1163394992132807ull}},
+{{12177488128307273424ull, 1861431987412491ull}},
+{{6052641687903908416ull, 1489145589929993ull}},
+{{12220810979806947376ull, 1191316471943994ull}},
+{{8485251123465384836ull, 1906106355110391ull}},
+{{3098852084030397544ull, 1524885084088313ull}},
+{{9857779296708138684ull, 1219908067270650ull}},
+{{15772446874733021892ull, 1951852907633040ull}},
+{{12617957499786417512ull, 1561482326106432ull}},
+{{2715668370345313364ull, 1249185860885146ull}},
+{{15413115836778232352ull, 1998697377416233ull}},
+{{1262446225196854912ull, 1598957901932987ull}},
+{{12078003424383214900ull, 1279166321546389ull}},
+{{8256759034787412872ull, 2046666114474223ull}},
+{{13984104857313750944ull, 1637332891579378ull}},
+{{119237441625269784ull, 1309866313263503ull}},
+{{14948175165568072948ull, 2095786101221604ull}},
+{{15647888947196368680ull, 1676628880977283ull}},
+{{1450264713531363976ull, 1341303104781827ull}},
+{{6009772356392092684ull, 2146084967650923ull}},
+{{12186515514597494792ull, 1716867974120738ull}},
+{{17127910041161816480ull, 1373494379296590ull}},
+{{8957911992149354756ull, 2197591006874545ull}},
+{{7166329593719483804ull, 1758072805499636ull}},
+{{2043714860233676720ull, 1406458244399709ull}},
+{{10648641405857703400ull, 2250333191039534ull}},
+{{12208261939428073040ull, 1800266552831627ull}},
+{{2387911922058637788ull, 1440213242265302ull}},
+{{12978375981872641200ull, 1152170593812241ull}},
+{{13386703941512405272ull, 1843472950099586ull}},
+{{7020014338468013896ull, 1474778360079669ull}},
+{{9305360285516321440ull, 1179822688063735ull}},
+{{14888576456826114304ull, 1887716300901976ull}},
+{{8221512350718981120ull, 1510173040721581ull}},
+{{2887861065833274572ull, 1208138432577265ull}},
+{{4620577705333239316ull, 1933021492123624ull}},
+{{7385810979008501776ull, 1546417193698899ull}},
+{{9597997597948711744ull, 1237133754959119ull}},
+{{4288749712492207820ull, 1979414007934591ull}},
+{{18188395028961407548ull, 1583531206347672ull}},
+{{7172018393685305392ull, 1266824965078138ull}},
+{{7785880615154578304ull, 2026919944125021ull}},
+{{2539355677381752320ull, 1621535955300017ull}},
+{{13099530986131132824ull, 1297228764240013ull}},
+{{17269900763067902200ull, 2075566022784021ull}},
+{{10126571795712411436ull, 1660452818227217ull}},
+{{722559807086108500ull, 1328362254581774ull}},
+{{8534793320821594248ull, 2125379607330838ull}},
+{{14206532286141096044ull, 1700303685864670ull}},
+{{11365225828912876836ull, 1360242948691736ull}},
+{{10805663696776782292ull, 2176388717906778ull}},
+{{16023228586905246480ull, 1741110974325422ull}},
+{{5439885240040376536ull, 1392888779460338ull}},
+{{5014467569322692136ull, 2228622047136541ull}},
+{{322225240716243388ull, 1782897637709233ull}},
+{{7636477822056815356ull, 1426318110167386ull}},
+{{2419833442903541960ull, 1141054488133909ull}},
+{{11250431138129487784ull, 1825687181014254ull}},
+{{12689693725245500552ull, 1460549744811403ull}},
+{{17530452609680221088ull, 1168439795849122ull}},
+{{13291328916520712448ull, 1869503673358596ull}},
+{{6943714318474659632ull, 1495602938686877ull}},
+{{16623017899005458676ull, 1196482350949501ull}},
+{{771386935215361620ull, 1914371761519203ull}},
+{{7995807177656109944ull, 1531497409215362ull}},
+{{17464692186350618924ull, 1225197927372289ull}},
+{{16875461053935259308ull, 1960316683795663ull}},
+{{2432322398922476476ull, 1568253347036531ull}},
+{{16703253178105622472ull, 1254602677629224ull}},
+{{15657158640743264988ull, 2007364284206759ull}},
+{{16215075727336522316ull, 1605891427365407ull}},
+{{5593362952385397204ull, 1284713141892326ull}},
+{{1570683094332814884ull, 2055541027027722ull}},
+{{12324592919691982876ull, 1644432821622177ull}},
+{{2480976706269765652ull, 1315546257297742ull}},
+{{7658911544773535368ull, 2104874011676387ull}},
+{{17195175680044559264ull, 1683899209341109ull}},
+{{17445489358777557736ull, 1347119367472887ull}},
+{{13155387715076451084ull, 2155390987956620ull}},
+{{10524310172061160868ull, 1724312790365296ull}},
+{{4730099322907018368ull, 1379450232292237ull}},
+{{11257507731393139716ull, 2207120371667579ull}},
+{{12695354999856422096ull, 1765696297334063ull}},
+{{17534981629368958324ull, 1412557037867250ull}},
+{{14027985303495166656ull, 1130045630293800ull}},
+{{3998032411882715036ull, 1808073008470081ull}},
+{{17955821188473813324ull, 1446458406776064ull}},
+{{18054005765520960980ull, 1157166725420851ull}},
+{{3060967521640165308ull, 1851466760673363ull}},
+{{9827471646795952892ull, 1481173408538690ull}},
+{{7861977317436762312ull, 1184938726830952ull}},
+{{16268512522640730028ull, 1895901962929523ull}},
+{{1946763573886853052ull, 1516721570343619ull}},
+{{5246759673851392764ull, 1213377256274895ull}},
+{{8394815478162228424ull, 1941403610039832ull}},
+{{17783898826755513708ull, 1553122888031865ull}},
+{{14227119061404410964ull, 1242498310425492ull}},
+{{8005995239279416252ull, 1987997296680788ull}},
+{{13783493820907353648ull, 1590397837344630ull}},
+{{11026795056725882920ull, 1272318269875704ull}},
+{{6574825646535681700ull, 2035709231801127ull}},
+{{16327906961454276332ull, 1628567385440901ull}},
+{{9372976754421510740ull, 1302853908352721ull}},
+{{7618065177590596540ull, 2084566253364354ull}},
+{{9783800956814387556ull, 1667653002691483ull}},
+{{15205738394935330688ull, 1334122402153186ull}},
+{{16950483802412708460ull, 2134595843445098ull}},
+{{2492340597704435796ull, 1707676674756079ull}},
+{{5683221292905458960ull, 1366141339804863ull}},
+{{5403805253906824016ull, 2185826143687781ull}},
+{{633695388383548888ull, 1748660914950225ull}},
+{{506956310706839108ull, 1398928731960180ull}},
+{{811130097130942576ull, 2238285971136288ull}},
+{{8027601707188574708ull, 1790628776909030ull}},
+{{6422081365750859764ull, 1432503021527224ull}},
+{{8827013907342598136ull, 1146002417221779ull}},
+{{3055175807522426048ull, 1833603867554847ull}},
+{{13512187090243671808ull, 1466883094043877ull}},
+{{3431052042711116800ull, 1173506475235102ull}},
+{{9179032083079697204ull, 1877610360376163ull}},
+{{14721923295947578408ull, 1502088288300930ull}},
+{{11777538636758062728ull, 1201670630640744ull}},
+{{7776015374587169392ull, 1922673009025191ull}},
+{{2531463484927825192ull, 1538138407220153ull}},
+{{9403868417426080800ull, 1230510725776122ull}},
+{{288794208914087988ull, 1968817161241796ull}},
+{{14988430626098911684ull, 1575053728993436ull}},
+{{8301395686137219024ull, 1260042983194749ull}},
+{{2214186653593819468ull, 2016068773111599ull}},
+{{5460698137616965896ull, 1612855018489279ull}},
+{{8057907324835483040ull, 1290284014791423ull}},
+{{9203302904994862540ull, 2064454423666277ull}},
+{{18430688768221621004ull, 1651563538933021ull}},
+{{11055202199835386480ull, 1321250831146417ull}},
+{{2930928260768977076ull, 2114001329834268ull}},
+{{9723440238099002304ull, 1691201063867414ull}},
+{{11468101005221112168ull, 1352960851093931ull}},
+{{10970263978869958824ull, 2164737361750290ull}},
+{{8776211183095967056ull, 1731789889400232ull}},
+{{18089015390702504616ull, 1385431911520185ull}},
+{{10495680551414455768ull, 2216691058432297ull}},
+{{1017846811647743968ull, 1773352846745838ull}},
+{{8192975078802015820ull, 1418682277396670ull}},
+{{6554380063041612656ull, 1134945821917336ull}},
+{{3108310471382759604ull, 1815913315067738ull}},
+{{9865346006590028328ull, 1452730652054190ull}},
+{{7892276805272022664ull, 1162184521643352ull}},
+{{16316991703177146584ull, 1859495234629363ull}},
+{{1985546918315986300ull, 1487596187703491ull}},
+{{16345832793620430332ull, 1190076950162792ull}},
+{{11395937210825047240ull, 1904123120260468ull}},
+{{16495447398143858436ull, 1523298496208374ull}},
+{{16885706733256997072ull, 1218638796966699ull}},
+{{15949084328985464348ull, 1949822075146719ull}},
+{{16448616277930281800ull, 1559857660117375ull}},
+{{13158893022344225440ull, 1247886128093900ull}},
+{{2607484762041209088ull, 1996617804950241ull}},
+{{16843383068600608564ull, 1597294243960192ull}},
+{{6096008825396666204ull, 1277835395168154ull}},
+{{17132311750118486576ull, 2044536632269046ull}},
+{{10016500585352878936ull, 1635629305815237ull}},
+{{634502838798482504ull, 1308503444652190ull}},
+{{1015204542077572004ull, 2093605511443504ull}},
+{{4501512448403967928ull, 1674884409154803ull}},
+{{10979907588206994988ull, 1339907527323842ull}},
+{{2810456882163550688ull, 2143852043718148ull}},
+{{9627063135214661196ull, 1715081634974518ull}},
+{{15080348137655549604ull, 1372065307979614ull}},
+{{13060510576023148396ull, 2195304492767383ull}},
+{{17827106090302339364ull, 1756243594213906ull}},
+{{10572336057499961168ull, 1404994875371125ull}},
+{{16915737691999937868ull, 2247991800593800ull}},
+{{13532590153599950296ull, 1798393440475040ull}},
+{{10826072122879960236ull, 1438714752380032ull}},
+{{1282160068820147540ull, 1150971801904026ull}},
+{{13119502554337967036ull, 1841554883046441ull}},
+{{6806253228728463304ull, 1473243906437153ull}},
+{{12823700212466591292ull, 1178595125149722ull}},
+{{5760525080978904772ull, 1885752200239556ull}},
+{{919071250041213496ull, 1508601760191645ull}},
+{{735257000032970796ull, 1206881408153316ull}},
+{{12244457644278484244ull, 1931010253045305ull}},
+{{9795566115422787396ull, 1544808202436244ull}},
+{{11525801707080140240ull, 1235846561948995ull}},
+{{18441282731328224384ull, 1977354499118392ull}},
+{{7374328555578758860ull, 1581883599294714ull}},
+{{9588811659204917412ull, 1265506879435771ull}},
+{{7963401025244047212ull, 2024811007097234ull}},
+{{10060069634937148092ull, 1619848805677787ull}},
+{{669358078465897828ull, 1295879044542230ull}},
+{{1070972925545436524ull, 2073406471267568ull}},
+{{8235475969920169864ull, 1658725177014054ull}},
+{{10277729590678046216ull, 1326980141611243ull}},
+{{12755018530342963620ull, 2123168226577989ull}},
+{{13893363639016281220ull, 1698534581262391ull}},
+{{7425342096471114652ull, 1358827665009913ull}},
+{{8191198539611873124ull, 2174124264015861ull}},
+{{2863610016947588176ull, 1739299411212689ull}},
+{{5980236828299980864ull, 1391439528970151ull}},
+{{2189681295796148736ull, 2226303246352242ull}},
+{{12819791480862649956ull, 1781042597081793ull}},
+{{17634530814173940612ull, 1424834077665434ull}},
+{{17796973466081062812ull, 1139867262132347ull}},
+{{13717762286762059208ull, 1823787619411756ull}},
+{{7284861014667737044ull, 1459030095529405ull}},
+{{5827888811734189632ull, 1167224076423524ull}},
+{{16703319728258524060ull, 1867558522277638ull}},
+{{2294609338381088280ull, 1494046817822111ull}},
+{{16593082729672511916ull, 1195237454257688ull}},
+{{4412839479024557128ull, 1912379926812302ull}},
+{{14598318027445376672ull, 1529903941449841ull}},
+{{7989305607214391012ull, 1223923153159873ull}},
+{{9093540156801115300ull, 1958277045055797ull}},
+{{18342878569666623208ull, 1566621636044637ull}},
+{{7295605226249477920ull, 1253297308835710ull}},
+{{11672968361999164672ull, 2005275694137136ull}},
+{{5649025874857421416ull, 1604220555309709ull}},
+{{8208569514627847456ull, 1283376444247767ull}},
+{{16823060038146466252ull, 2053402310796427ull}},
+{{6079750401033352356ull, 1642721848637142ull}},
+{{15931846765052412852ull, 1314177478909713ull}},
+{{3354861935632398628ull, 2102683966255542ull}},
+{{13751935992731649872ull, 1682147173004433ull}},
+{{18380246423669140544ull, 1345717738403546ull}},
+{{3582952574677252608ull, 2153148381445675ull}},
+{{2866362059741802084ull, 1722518705156540ull}},
+{{2293089647793441668ull, 1378014964125232ull}},
+{{7358292251211416992ull, 2204823942600371ull}},
+{{2197284986227223272ull, 1763859154080297ull}},
+{{12825874433207509584ull, 1411087323264237ull}},
+{{2882001917082187020ull, 1128869858611390ull}},
+{{4611203067331499236ull, 1806191773778224ull}},
+{{7378311268607109712ull, 1444953419022579ull}},
+{{9591997829627598092ull, 1155962735218063ull}},
+{{11657847712662246624ull, 1849540376348901ull}},
+{{5636929355387886976ull, 1479632301079121ull}},
+{{820194669568399256ull, 1183705840863297ull}},
+{{5001660286051349136ull, 1893929345381275ull}},
+{{4001328228841079308ull, 1515143476305020ull}},
+{{3201062583072863448ull, 1212114781044016ull}},
+{{16189746577142312484ull, 1939383649670425ull}},
+{{12951797261713849988ull, 1551506919736340ull}},
+{{10361437809371079988ull, 1241205535789072ull}},
+{{1820905236026086692ull, 1985928857262516ull}},
+{{16214119447788510648ull, 1588743085810012ull}},
+{{5592597928746987872ull, 1270994468648010ull}},
+{{8948156685995180592ull, 2033591149836816ull}},
+{{3469176534054234152ull, 1626872919869453ull}},
+{{10154038856727207968ull, 1301498335895562ull}},
+{{1489066911795891456ull, 2082397337432900ull}},
+{{1191253529436713164ull, 1665917869946320ull}},
+{{953002823549370532ull, 1332734295957056ull}},
+{{12592850961904723820ull, 2132374873531289ull}},
+{{13763629584265689380ull, 1705899898825031ull}},
+{{7321554852670641180ull, 1364719919060025ull}},
+{{11714487764273025888ull, 2183551870496040ull}},
+{{9371590211418420712ull, 1746841496396832ull}},
+{{118574539650915920ull, 1397473197117466ull}},
+{{11257765707667196444ull, 2235957115387945ull}},
+{{9006212566133757156ull, 1788765692310356ull}},
+{{3515621238165095400ull, 1431012553848285ull}},
+{{2812496990532076320ull, 1144810043078628ull}},
+{{810646370109411792ull, 1831696068925805ull}},
+{{648517096087529432ull, 1465356855140644ull}},
+{{4208162491611933868ull, 1172285484112515ull}},
+{{6733059986579094192ull, 1875656774580024ull}},
+{{9075796804005185676ull, 1500525419664019ull}},
+{{10949986257946058864ull, 1200420335731215ull}},
+{{17519978012713694180ull, 1920672537169944ull}},
+{{17705331224912865668ull, 1536538029735955ull}},
+{{14164264979930292536ull, 1229230423788764ull}},
+{{11594777523662737088ull, 1966768678062023ull}},
+{{16654519648414010316ull, 1573414942449618ull}},
+{{2255569274505477284ull, 1258731953959695ull}},
+{{3608910839208763652ull, 2013971126335512ull}},
+{{13955175115592741892ull, 1611176901068409ull}},
+{{14853488907216103836ull, 1288941520854727ull}},
+{{9008186992578124844ull, 2062306433367564ull}},
+{{10895898408804410200ull, 1649845146694051ull}},
+{{5027369912301617836ull, 1319876117355241ull}},
+{{665094230198767892ull, 2111801787768386ull}},
+{{15289470643126655608ull, 1689441430214708ull}},
+{{1163530070275593516ull, 1351553144171767ull}},
+{{5550996927182859948ull, 2162485030674827ull}},
+{{15508843985972018928ull, 1729988024539861ull}},
+{{8717726374035704820ull, 1383990419631889ull}},
+{{2880315754231396740ull, 2214384671411023ull}},
+{{9682950232868938040ull, 1771507737128818ull}},
+{{15125057815778971076ull, 1417206189703054ull}},
+{{15789395067365087184ull, 1133764951762443ull}},
+{{3126939219332677556ull, 1814023922819910ull}},
+{{2501551375466142044ull, 1451219138255928ull}},
+{{9379938729856734284ull, 1160975310604742ull}},
+{{250506708803133560ull, 1857560496967588ull}},
+{{7579102996526327496ull, 1486048397574070ull}},
+{{6063282397221061996ull, 1188838718059256ull}},
+{{2322554206069878548ull, 1902141948894810ull}},
+{{1858043364855902836ull, 1521713559115848ull}},
+{{8865132321368542916ull, 1217370847292678ull}},
+{{10494862899447758344ull, 1947793355668285ull}},
+{{8395890319558206676ull, 1558234684534628ull}},
+{{14095409885130385984ull, 1246587747627702ull}},
+{{7795260557240976284ull, 1994540396204324ull}},
+{{9925557260534691352ull, 1595632316963459ull}},
+{{11629794623169663404ull, 1276505853570767ull}},
+{{3850276138103820152ull, 2042409365713228ull}},
+{{10458918539966876768ull, 1633927492570582ull}},
+{{988437202489680768ull, 1307141994056466ull}},
+{{12649545968209220200ull, 2091427190490345ull}},
+{{10119636774567376160ull, 1673141752392276ull}},
+{{4406360604911990604ull, 1338513401913821ull}},
+{{18118223412084915936ull, 2141621443062113ull}},
+{{3426532285442201780ull, 1713297154449691ull}},
+{{17498621087321402716ull, 1370637723559752ull}},
+{{13240398480746603056ull, 2193020357695604ull}},
+{{14281667599339192768ull, 1754416286156483ull}},
+{{357287635245623244ull, 1403533028925187ull}},
+{{4261009031134907512ull, 2245652846280299ull}},
+{{7098156039649836332ull, 1796522277024239ull}},
+{{9367873646461779388ull, 1437217821619391ull}},
+{{3804950102427513188ull, 1149774257295513ull}},
+{{2398571349142110780ull, 1839638811672821ull}},
+{{16676252338281329916ull, 1471711049338256ull}},
+{{9651653055883153608ull, 1177368839470605ull}},
+{{15442644889413045776ull, 1883790143152968ull}},
+{{1286069467304705652ull, 1507032114522375ull}},
+{{1028855573843764520ull, 1205625691617900ull}},
+{{1646168918150023232ull, 1929001106588640ull}},
+{{1316935134520018588ull, 1543200885270912ull}},
+{{12121594551841745840ull, 1234560708216729ull}},
+{{8326504838721062372ull, 1975297133146767ull}},
+{{17729250315202580868ull, 1580237706517413ull}},
+{{3115353807936333724ull, 1264190165213931ull}},
+{{16052612536923864928ull, 2022704264342289ull}},
+{{16531438844281002264ull, 1618163411473831ull}},
+{{9535802260682891488ull, 1294530729179065ull}},
+{{15257283617092626384ull, 2071249166686504ull}},
+{{15895175708416011428ull, 1656999333349203ull}},
+{{1648094122507078172ull, 1325599466679363ull}},
+{{17394345854978966372ull, 2120959146686980ull}},
+{{13915476683983173096ull, 1696767317349584ull}},
+{{14821730161928448800ull, 1357413853879667ull}},
+{{8957373000117876788ull, 2171862166207468ull}},
+{{14544596029578122076ull, 1737489732965974ull}},
+{{15325025638404407984ull, 1389991786372779ull}},
+{{13451994577221321808ull, 2223986858196447ull}},
+{{3382898032293236800ull, 1779189486557158ull}},
+{{10085016055318410084ull, 1423351589245726ull}},
+{{4378664029512817744ull, 1138681271396581ull}},
+{{18073908891446239364ull, 1821890034234529ull}},
+{{18148475927898901812ull, 1457512027387623ull}},
+{{3450734298093390480ull, 1166009621910099ull}},
+{{12899872506433245416ull, 1865615395056158ull}},
+{{17698595634630416980ull, 1492492316044926ull}},
+{{10469527692962423260ull, 1193993852835941ull}},
+{{9372546679256056568ull, 1910390164537506ull}},
+{{3808688528662934932ull, 1528312131630005ull}},
+{{3046950822930347944ull, 1222649705304004ull}},
+{{12253818946172377360ull, 1956239528486406ull}},
+{{6113706342195991564ull, 1564991622789125ull}},
+{{4890965073756793252ull, 1251993298231300ull}},
+{{7825544118010869204ull, 2003189277170080ull}},
+{{6260435294408695360ull, 1602551421736064ull}},
+{{8697697050268866612ull, 1282041137388851ull}},
+{{6537617650946365936ull, 2051265819822162ull}},
+{{16298140564982823716ull, 1641012655857729ull}},
+{{16727861266728169296ull, 1312810124686183ull}},
+{{4628485138313608936ull, 2100496199497894ull}},
+{{7392136925392797472ull, 1680396959598315ull}},
+{{5913709540314237976ull, 1344317567678652ull}},
+{{13151284079244691088ull, 2150908108285843ull}},
+{{17899724892879573516ull, 1720726486628674ull}},
+{{18009128729045569136ull, 1376581189302939ull}},
+{{17746559522247179648ull, 2202529902884703ull}},
+{{3129201173572012748ull, 1762023922307763ull}},
+{{9882058568341430844ull, 1409619137846210ull}},
+{{7905646854673144676ull, 1127695310276968ull}},
+{{8959686152735121160ull, 1804312496443149ull}},
+{{10857097736930007252ull, 1443449997154519ull}},
+{{12375027004285916124ull, 1154759997723615ull}},
+{{1353299133147914180ull, 1847615996357785ull}},
+{{1082639306518331344ull, 1478092797086228ull}},
+{{8244809074698485720ull, 1182474237668982ull}},
+{{16881043334259487480ull, 1891958780270371ull}},
+{{9815485852665679660ull, 1513567024216297ull}},
+{{473691052648723080ull, 1210853619373038ull}},
+{{15515300943205598224ull, 1937365790996860ull}},
+{{12412240754564478580ull, 1549892632797488ull}},
+{{17308490233135403508ull, 1239914106237990ull}},
+{{9246840299307094000ull, 1983862569980785ull}},
+{{7397472239445675200ull, 1587090055984628ull}},
+{{13296675421040360804ull, 1269672044787702ull}},
+{{6517285414696935996ull, 2031475271660324ull}},
+{{8903177146499459120ull, 1625180217328259ull}},
+{{10811890531941477620ull, 1300144173862607ull}},
+{{2541629592138722900ull, 2080230678180172ull}},
+{{13101350117936709288ull, 1664184542544137ull}},
+{{3102382464865546784ull, 1331347634035310ull}},
+{{4963811943784874856ull, 2130156214456496ull}},
+{{281700740285989560ull, 1704124971565197ull}},
+{{11293407036454522616ull, 1363299977252157ull}},
+{{3312055999359594896ull, 2181279963603452ull}},
+{{13717691243713406888ull, 1745023970882761ull}},
+{{7284804180228815184ull, 1396019176706209ull}},
+{{587640244140373328ull, 2233630682729935ull}},
+{{470112195312298664ull, 1786904546183948ull}},
+{{7754787385733659576ull, 1429523636947158ull}},
+{{13582527538070748308ull, 1143618909557726ull}},
+{{14353346431429376644ull, 1829790255292362ull}},
+{{4103979515659680668ull, 1463832204233890ull}},
+{{3283183612527744536ull, 1171065763387112ull}},
+{{8942442594786301580ull, 1873705221419379ull}},
+{{10843302890570951588ull, 1498964177135503ull}},
+{{16053339941940581916ull, 1199171341708402ull}},
+{{10927948648137289776ull, 1918674146733444ull}},
+{{12431707733251742144ull, 1534939317386755ull}},
+{{9945366186601393712ull, 1227951453909404ull}},
+{{4844539454336498972ull, 1964722326255047ull}},
+{{14943678007694930148ull, 1571777861004037ull}},
+{{4576244776672123472ull, 1257422288803230ull}},
+{{7321991642675397556ull, 2011875662085168ull}},
+{{13236290943624138692ull, 1609500529668134ull}},
+{{14278381569641221276ull, 1287600423734507ull}},
+{{8088015252458312748ull, 2060160677975212ull}},
+{{17538458646192381168ull, 1648128542380169ull}},
+{{17720115731695815256ull, 1318502833904135ull}},
+{{9905441097003752796ull, 2109604534246617ull}},
+{{545655248119181592ull, 1687683627397294ull}},
+{{4125873013237255596ull, 1350146901917835ull}},
+{{6601396821179608952ull, 2160235043068536ull}},
+{{1591768642201776840ull, 1728188034454829ull}},
+{{4962763728503331796ull, 1382550427563863ull}},
+{{4251073150863420548ull, 2212080684102181ull}},
+{{18158253779658377732ull, 1769664547281744ull}},
+{{18215951838468612508ull, 1415731637825395ull}},
+{{14572761470774890004ull, 1132585310260316ull}},
+{{15937720723756003364ull, 1812136496416506ull}},
+{{9060827764262892368ull, 1449709197133205ull}},
+{{7248662211410313892ull, 1159767357706564ull}},
+{{529813094030771260ull, 1855627772330503ull}},
+{{7802548104708437656ull, 1484502217864402ull}},
+{{17310084927992481092ull, 1187601774291521ull}},
+{{1870694181594597488ull, 1900162838866435ull}},
+{{1496555345275677992ull, 1520130271093148ull}},
+{{8575941905704363040ull, 1216104216874518ull}},
+{{10032158234385070540ull, 1945766746999229ull}},
+{{11715075402249966756ull, 1556613397599383ull}},
+{{16750757951283794048ull, 1245290718079506ull}},
+{{975771018860698216ull, 1992465148927211ull}},
+{{15538012074056199868ull, 1593972119141768ull}},
+{{1362363215019228924ull, 1275177695313415ull}},
+{{2179781144030766280ull, 2040284312501464ull}},
+{{5433173729966523344ull, 1632227450001171ull}},
+{{657190169231308352ull, 1305781960000937ull}},
+{{4740853085512003688ull, 2089251136001499ull}},
+{{7482031283151513276ull, 1671400908801199ull}},
+{{9674973841263120944ull, 1337120727040959ull}},
+{{4411911701795262540ull, 2139393163265535ull}},
+{{3529529361436210032ull, 1711514530612428ull}},
+{{10202321118632788672ull, 1369211624489942ull}},
+{{1566318530844820580ull, 2190738599183908ull}},
+{{8631752454159677112ull, 1752590879347126ull}},
+{{3216053148585831364ull, 1402072703477701ull}},
+{{16213731481963061156ull, 2243316325564321ull}},
+{{9281636370828538600ull, 1794653060451457ull}},
+{{46611467179010232ull, 1435722448361166ull}},
+{{14794684432710849480ull, 1148577958688932ull}},
+{{8914099833369717876ull, 1837724733902292ull}},
+{{18199326310921505268ull, 1470179787121833ull}},
+{{3491414604511473244ull, 1176143829697467ull}},
+{{9275612181960267516ull, 1881830127515947ull}},
+{{41792116084393368ull, 1505464102012758ull}},
+{{7412131322351335340ull, 1204371281610206ull}},
+{{4480712486278315900ull, 1926994050576330ull}},
+{{3584569989022652720ull, 1541595240461064ull}},
+{{6557004805960032496ull, 1233276192368851ull}},
+{{3112510060052231352ull, 1973241907790162ull}},
+{{13558054492267516048ull, 1578593526232129ull}},
+{{14535792408555923164ull, 1262874820985703ull}},
+{{1121174965238015120ull, 2020599713577126ull}},
+{{15654335231158053388ull, 1616479770861700ull}},
+{{12523468184926442712ull, 1293183816689360ull}},
+{{1590805022172756724ull, 2069094106702977ull}},
+{{12340690461963936348ull, 1655275285362381ull}},
+{{6183203554829238756ull, 1324220228289905ull}},
+{{9893125687726782008ull, 2118752365263848ull}},
+{{15293198179665246252ull, 1695001892211078ull}},
+{{1166512099506466032ull, 1356001513768863ull}},
+{{16623814618177986948ull, 2169602422030180ull}},
+{{13299051694542389556ull, 1735681937624144ull}},
+{{14328590170375821968ull, 1388545550099315ull}},
+{{4479000198891763536ull, 2221672880158905ull}},
+{{3583200159113410828ull, 1777338304127124ull}},
+{{6555908942032638984ull, 1421870643301699ull}},
+{{8934075968368021512ull, 1137496514641359ull}},
+{{3226475105163103448ull, 1819994423426175ull}},
+{{2581180084130482756ull, 1455995538740940ull}},
+{{2064944067304386204ull, 1164796430992752ull}},
+{{6993259322428928252ull, 1863674289588403ull}},
+{{12973305087426963248ull, 1490939431670722ull}},
+{{2999946440457749952ull, 1192751545336578ull}},
+{{1110565489990489604ull, 1908402472538525ull}},
+{{888452391992391680ull, 1526721978030820ull}},
+{{710761913593913344ull, 1221377582424656ull}},
+{{12205265505975992324ull, 1954204131879449ull}},
+{{13453561219522704180ull, 1563363305503559ull}},
+{{14452197790360073668ull, 1250690644402847ull}},
+{{8366121205608476576ull, 2001105031044556ull}},
+{{3003548149744870936ull, 1600884024835645ull}},
+{{2402838519795896748ull, 1280707219868516ull}},
+{{14912588075899165768ull, 2049131551789625ull}},
+{{11930070460719332616ull, 1639305241431700ull}},
+{{9544056368575466092ull, 1311444193145360ull}},
+{{15270490189720745748ull, 2098310709032576ull}},
+{{8527043337034686276ull, 1678648567226061ull}},
+{{3132285854885838696ull, 1342918853780849ull}},
+{{12390354997301162560ull, 2148670166049358ull}},
+{{17290981627324750696ull, 1718936132839486ull}},
+{{10143436487117890232ull, 1375148906271589ull}},
+{{5161451935162893404ull, 2200238250034543ull}},
+{{11507859177614135368ull, 1760190600027634ull}},
+{{12895636156833218620ull, 1408152480022107ull}},
+{{2937811295982754248ull, 1126521984017686ull}},
+{{15768544517798137768ull, 1802435174428297ull}},
+{{5236137984754689568ull, 1441948139542638ull}},
+{{11567608017287572300ull, 1153558511634110ull}},
+{{61428753950564064ull, 1845693618614577ull}},
+{{11117189447386182220ull, 1476554894891661ull}},
+{{5204402743167035452ull, 1181243915913329ull}},
+{{15705742018551077372ull, 1889990265461326ull}},
+{{8875244800098951576ull, 1511992212369061ull}},
+{{3410847025337250936ull, 1209593769895249ull}},
+{{12836052870023422144ull, 1935350031832398ull}},
+{{17647539925502558364ull, 1548280025465918ull}},
+{{3049985496176315720ull, 1238624020372735ull}},
+{{4879976793882105152ull, 1981798432596376ull}},
+{{214632620363773800ull, 1585438746077101ull}},
+{{14929101355258660332ull, 1268350996861680ull}},
+{{5439818094704304916ull, 2029361594978689ull}},
+{{8041203290505354256ull, 1623489275982951ull}},
+{{2743613817662373080ull, 1298791420786361ull}},
+{{15457828552485527900ull, 2078066273258177ull}},
+{{4987565212504601672ull, 1662453018606542ull}},
+{{15058098614229412308ull, 1329962414885233ull}},
+{{1956864894315597752ull, 2127939863816374ull}},
+{{5254840730194388524ull, 1702351891053099ull}},
+{{7893221398897421144ull, 1361881512842479ull}},
+{{1561107794010142860ull, 2179010420547967ull}},
+{{12316932679433845260ull, 1743208336438373ull}},
+{{17232243773030896852ull, 1394566669150698ull}},
+{{5435497148397973024ull, 2231306670641118ull}},
+{{11727095348202199068ull, 1785045336512894ull}},
+{{13071025093303669576ull, 1428036269210315ull}},
+{{10456820074642935660ull, 1142429015368252ull}},
+{{1973516860461055764ull, 1827886424589204ull}},
+{{5268162303110754936ull, 1462309139671363ull}},
+{{11593227471972424596ull, 1169847311737090ull}},
+{{102419881446327736ull, 1871755698779345ull}},
+{{81935905157062188ull, 1497404559023476ull}},
+{{14822943983093291044ull, 1197923647218780ull}},
+{{5269966299239714052ull, 1916677835550049ull}},
+{{7905321854133681564ull, 1533342268440039ull}},
+{{10013606298048855576ull, 1226673814752031ull}},
+{{8643072447394348276ull, 1962678103603250ull}},
+{{6914457957915478620ull, 1570142482882600ull}},
+{{5531566366332382896ull, 1256113986306080ull}},
+{{8850506186131812636ull, 2009782378089728ull}},
+{{14459102578389270752ull, 1607825902471782ull}},
+{{4188584433227595956ull, 1286260721977426ull}},
+{{17769781537389884500ull, 2058017155163881ull}},
+{{10526476415169997276ull, 1646413724131105ull}},
+{{8421181132135997820ull, 1317130979304884ull}},
+{{2405843367191865544ull, 2107409566887815ull}},
+{{1924674693753492436ull, 1685927653510252ull}},
+{{12607786199228524916ull, 1348742122808201ull}},
+{{12793760289281819224ull, 2157987396493122ull}},
+{{2856310601941634732ull, 1726389917194498ull}},
+{{9663746111037128432ull, 1381111933755598ull}},
+{{11772644962917495168ull, 2209779094008957ull}},
+{{2039418340850175488ull, 1767823275207166ull}},
+{{16388929931647781684ull, 1414258620165732ull}},
+{{5732446315834404700ull, 1131406896132586ull}},
+{{1793216475851226872ull, 1810251033812138ull}},
+{{8813270810164802144ull, 1448200827049710ull}},
+{{7050616648131841716ull, 1158560661639768ull}},
+{{7591637822269036424ull, 1853697058623629ull}},
+{{9762659072557139460ull, 1482957646898903ull}},
+{{15188824887529532216ull, 1186366117519122ull}},
+{{9544724561079610252ull, 1898185788030596ull}},
+{{3946430834121777880ull, 1518548630424477ull}},
+{{14225191111523153272ull, 1214838904339581ull}},
+{{15381608148953224588ull, 1943742246943330ull}},
+{{12305286519162579672ull, 1554993797554664ull}},
+{{13533578030071974060ull, 1243995038043731ull}},
+{{14275027218631337852ull, 1990392060869970ull}},
+{{11420021774905070280ull, 1592313648695976ull}},
+{{5446668605182145900ull, 1273850918956781ull}},
+{{1335972138807612796ull, 2038161470330850ull}},
+{{1068777711046090236ull, 1630529176264680ull}},
+{{855022168836872188ull, 1304423341011744ull}},
+{{8746733099622816148ull, 2087077345618790ull}},
+{{6997386479698252920ull, 1669661876495032ull}},
+{{16665955627984333304ull, 1335729501196025ull}},
+{{8218784931065381672ull, 2137167201913641ull}},
+{{2885679130110395012ull, 1709733761530913ull}},
+{{9687240933572136656ull, 1367787009224730ull}},
+{{15499585493715418652ull, 2188459214759568ull}},
+{{1331621950746603952ull, 1750767371807655ull}},
+{{1065297560597283160ull, 1400613897446124ull}},
+{{9083173726439473704ull, 2240982235913798ull}},
+{{14645236610635399612ull, 1792785788731038ull}},
+{{648142844282588720ull, 1434228630984831ull}},
+{{15275909534393712268ull, 1147382904787864ull}},
+{{13373408810804208660ull, 1835812647660583ull}},
+{{18077424678127187572ull, 1468650118128466ull}},
+{{10772590927759839736ull, 1174920094502773ull}},
+{{13546796669673833252ull, 1879872151204437ull}},
+{{3458739706255245956ull, 1503897720963550ull}},
+{{2766991765004196764ull, 1203118176770840ull}},
+{{4427186824006714824ull, 1924989082833344ull}},
+{{7231098273947282184ull, 1539991266266675ull}},
+{{5784878619157825744ull, 1231993013013340ull}},
+{{9255805790652521196ull, 1971188820821344ull}},
+{{11093993447263927280ull, 1576951056657075ull}},
+{{8875194757811141824ull, 1261560845325660ull}},
+{{14200311612497826916ull, 2018497352521056ull}},
+{{7670900475256351208ull, 1614797882016845ull}},
+{{6136720380205080968ull, 1291838305613476ull}},
+{{2440054978844308904ull, 2066941288981562ull}},
+{{13020090427301178092ull, 1653553031185249ull}},
+{{14105421156582852796ull, 1322842424948199ull}},
+{{11500627406306833504ull, 2116547879917119ull}},
+{{12889850739787377128ull, 1693238303933695ull}},
+{{10311880591829901700ull, 1354590643146956ull}},
+{{9120311317444022076ull, 2167345029035130ull}},
+{{7296249053955217660ull, 1733876023228104ull}},
+{{9526348057906084452ull, 1387100818582483ull}},
+{{11552808077907824800ull, 2219361309731973ull}},
+{{16620944091810080488ull, 1775489047785578ull}},
+{{2228708829222333420ull, 1420391238228463ull}},
+{{9161664692861687380ull, 1136312990582770ull}},
+{{14658663508578699812ull, 1818100784932432ull}},
+{{4348233177379139200ull, 1454480627945946ull}},
+{{18235981800870952652ull, 1163584502356756ull}},
+{{3352129178200151984ull, 1861735203770811ull}},
+{{17439098601527762880ull, 1489388163016648ull}},
+{{2883232436996479336ull, 1191510530413319ull}},
+{{11991869528678187584ull, 1906416848661310ull}},
+{{9593495622942550064ull, 1525133478929048ull}},
+{{15053494127837860700ull, 1220106783143238ull}},
+{{1949497716089115180ull, 1952170853029182ull}},
+{{12627644617097023112ull, 1561736682423345ull}},
+{{10102115693677618492ull, 1249389345938676ull}},
+{{8784687480400368940ull, 1999022953501882ull}},
+{{18095796428546026120ull, 1599218362801505ull}},
+{{14476637142836820896ull, 1279374690241204ull}},
+{{12094572984313182464ull, 2046999504385927ull}},
+{{2296960757966725324ull, 1637599603508742ull}},
+{{12905615050599111228ull, 1310079682806993ull}},
+{{16959635266216667644ull, 2096127492491189ull}},
+{{17257057027715244440ull, 1676901993992951ull}},
+{{10116296807430285228ull, 1341521595194361ull}},
+{{8807377262404635720ull, 2146434552310978ull}},
+{{14424599439407529220ull, 1717147641848782ull}},
+{{4160981922042202728ull, 1373718113479026ull}},
+{{17725617519493255340ull, 2197948981566441ull}},
+{{10491145200852693948ull, 1758359185253153ull}},
+{{15771613790165975804ull, 1406687348202522ull}},
+{{10477186805297919996ull, 2250699757124036ull}},
+{{4692400629496425672ull, 1800559805699229ull}},
+{{7443269318339050860ull, 1440447844559383ull}},
+{{13333313084155061336ull, 1152358275647506ull}},
+{{13954603305164277488ull, 1843773241036010ull}},
+{{11163682644131421992ull, 1475018592828808ull}},
+{{16309643744788958240ull, 1180014874263046ull}},
+{{269988288468960920ull, 1888023798820875ull}},
+{{215990630775168736ull, 1510419039056700ull}},
+{{172792504620134988ull, 1208335231245360ull}},
+{{276468007392215984ull, 1933336369992576ull}},
+{{14978569664881414080ull, 1546669095994060ull}},
+{{11982855731905131264ull, 1237335276795248ull}},
+{{15483220356306299700ull, 1979736442872397ull}},
+{{5007878655561219112ull, 1583789154297918ull}},
+{{11385000553932795936ull, 1267031323438334ull}},
+{{7147954442066742528ull, 2027250117501335ull}},
+{{5718363553653394024ull, 1621800094001068ull}},
+{{11953388472406535864ull, 1297440075200854ull}},
+{{8057375111624726416ull, 2075904120321367ull}},
+{{17513946533525512100ull, 1660723296257093ull}},
+{{2943110782594678712ull, 1328578637005675ull}},
+{{4708977252151485936ull, 2125725819209080ull}},
+{{3767181801721188748ull, 1700580655367264ull}},
+{{6703094256118861324ull, 1360464524293811ull}},
+{{3346253180306357472ull, 2176743238870098ull}},
+{{10055700173728906624ull, 1741394591096078ull}},
+{{15423257768466945944ull, 1393115672876862ull}},
+{{9919817170579472220ull, 2228985076602980ull}},
+{{7935853736463577776ull, 1783188061282384ull}},
+{{10038031803912772544ull, 1426550449025907ull}},
+{{651727813646397388ull, 1141240359220726ull}},
+{{12110810946059966792ull, 1825984574753161ull}},
+{{5999299942106063108ull, 1460787659802529ull}},
+{{8488788768426760812ull, 1168630127842023ull}},
+{{9892713214740906976ull, 1869808204547237ull}},
+{{535472942308904932ull, 1495846563637790ull}},
+{{428378353847123944ull, 1196677250910232ull}},
+{{4374754180897308636ull, 1914683601456371ull}},
+{{18257198603685488204ull, 1531746881165096ull}},
+{{10916410068206480240ull, 1225397504932077ull}},
+{{2708860850162727088ull, 1960636007891324ull}},
+{{5856437494872091996ull, 1568508806313059ull}},
+{{8374498810639583920ull, 1254807045050447ull}},
+{{17088546911765244592ull, 2007691272080715ull}},
+{{13670837529412195676ull, 1606153017664572ull}},
+{{3557972394045935892ull, 1284922414131658ull}},
+{{2003407015731587108ull, 2055875862610653ull}},
+{{8981423242069090332ull, 1644700690088522ull}},
+{{18253185037881003236ull, 1315760552070817ull}},
+{{14447700801641963884ull, 2105216883313308ull}},
+{{490114197087840136ull, 1684173506650647ull}},
+{{11460137801896003080ull, 1347338805320517ull}},
+{{3578825224065963632ull, 2155742088512828ull}},
+{{10241757808736591552ull, 1724593670810262ull}},
+{{814708617505452596ull, 1379674936648210ull}},
+{{1303533788008724156ull, 2207479898637136ull}},
+{{15800222289374620616ull, 1765983918909708ull}},
+{{1572131387273965524ull, 1412787135127767ull}},
+{{12325751554044903388ull, 1130229708102213ull}},
+{{16031853671729935096ull, 1808367532963541ull}},
+{{9136134122642037756ull, 1446694026370833ull}},
+{{14687604927597450848ull, 1157355221096666ull}},
+{{16121470254672100716ull, 1851768353754666ull}},
+{{9207827388995770248ull, 1481414683003733ull}},
+{{14744959540680436844ull, 1185131746402986ull}},
+{{16213237635604878304ull, 1896210794244778ull}},
+{{1902543664258171676ull, 1516968635395823ull}},
+{{8900732560890357984ull, 1213574908316658ull}},
+{{10551823282682662456ull, 1941719853306653ull}},
+{{15820156255629950608ull, 1553375882645322ull}},
+{{5277427375020139840ull, 1242700706116258ull}},
+{{4754534985290313424ull, 1988321129786013ull}},
+{{11182325617716071384ull, 1590656903828810ull}},
+{{8945860494172857108ull, 1272525523063048ull}},
+{{10624027975934661052ull, 2036040836900877ull}},
+{{1120524751263908192ull, 1628832669520702ull}},
+{{11964466245236857524ull, 1303066135616561ull}},
+{{11764448362895151392ull, 2084905816986498ull}},
+{{16790256319799941760ull, 1667924653589198ull}},
+{{2364158611614222440ull, 1334339722871359ull}},
+{{11161351408066576548ull, 2134943556594174ull}},
+{{12618429941195171564ull, 1707954845275339ull}},
+{{13784092767698047572ull, 1366363876220271ull}},
+{{14675850798833055472ull, 2186182201952434ull}},
+{{15430029453808354700ull, 1748945761561947ull}},
+{{4965325933562863112ull, 1399156609249558ull}},
+{{4255172678958670660ull, 2238650574799293ull}},
+{{10782835772650757172ull, 1790920459839434ull}},
+{{12315617432862516060ull, 1432736367871547ull}},
+{{2473796316806192200ull, 1146189094297238ull}},
+{{268725292147997200ull, 1833902550875581ull}},
+{{14972375492686039052ull, 1467122040700464ull}},
+{{15667249208890741564ull, 1173697632560371ull}},
+{{17688901104741365860ull, 1877916212096594ull}},
+{{17840469698535003012ull, 1502332969677275ull}},
+{{14272375758828002408ull, 1201866375741820ull}},
+{{4389057140415252236ull, 1922986201186913ull}},
+{{10889943341816022436ull, 1538388960949530ull}},
+{{8711954673452817948ull, 1230711168759624ull}},
+{{2871081033298777748ull, 1969137870015399ull}},
+{{5986213641380932524ull, 1575310296012319ull}},
+{{8478319727846656340ull, 1260248236809855ull}},
+{{13565311564554650148ull, 2016397178895768ull}},
+{{18230946881127540764ull, 1613117743116614ull}},
+{{18274106319643942932ull, 1290494194493291ull}},
+{{3413128408236936432ull, 2064790711189267ull}},
+{{13798549170815280116ull, 1651832568951413ull}},
+{{18417536966136044736ull, 1321466055161130ull}},
+{{11021315072108119964ull, 2114345688257809ull}},
+{{12506400872428406296ull, 1691476550606247ull}},
+{{2626423068458904388ull, 1353181240484998ull}},
+{{512928094792336700ull, 2165089984775997ull}},
+{{11478388920059600332ull, 1732071987820797ull}},
+{{1804013506563859616ull, 1385657590256638ull}},
+{{17643816869469816680ull, 2217052144410620ull}},
+{{14115053495575853344ull, 1773641715528496ull}},
+{{7602693981718772352ull, 1418913372422797ull}},
+{{17150201629600748852ull, 1135130697938237ull}},
+{{12682927348393556872ull, 1816209116701180ull}},
+{{10146341878714845496ull, 1452967293360944ull}},
+{{11806422317713786720ull, 1162373834688755ull}},
+{{443531634632507136ull, 1859798135502009ull}},
+{{4044174122447916032ull, 1487838508401607ull}},
+{{14303385742184063796ull, 1190270806721285ull}},
+{{4438673113784950456ull, 1904433290754057ull}},
+{{14618984935253691336ull, 1523546632603245ull}},
+{{11695187948202953068ull, 1218837306082596ull}},
+{{11333603087640904264ull, 1950139689732154ull}},
+{{12756231284854633732ull, 1560111751785723ull}},
+{{17583682657367527632ull, 1248089401428578ull}},
+{{5997799363336582272ull, 1996943042285726ull}},
+{{1108890675927355496ull, 1597554433828581ull}},
+{{15644507799709525688ull, 1278043547062864ull}},
+{{13963166035309510132ull, 2044869675300583ull}},
+{{102486384021877136ull, 1635895740240467ull}},
+{{11150035551443232680ull, 1308716592192373ull}},
+{{14150708067567261964ull, 2093946547507797ull}},
+{{3941868824569988924ull, 1675157238006238ull}},
+{{10532192689139811784ull, 1340125790404990ull}},
+{{16851508302623698856ull, 2144201264647984ull}},
+{{17170555456840869408ull, 1715361011718387ull}},
+{{6357746735988874880ull, 1372288809374710ull}},
+{{10172394777582199808ull, 2195662094999536ull}},
+{{4448567007323849524ull, 1756529675999629ull}},
+{{7248202420600989940ull, 1405223740799703ull}},
+{{7907775058219673584ull, 2248357985279525ull}},
+{{6326220046575738868ull, 1798686388223620ull}},
+{{5060976037260591092ull, 1438949110578896ull}},
+{{359432015066562552ull, 1151159288463117ull}},
+{{4264440038848410408ull, 1841854861540987ull}},
+{{14479598475304459296ull, 1473483889232789ull}},
+{{15273027594985477760ull, 1178787111386231ull}},
+{{17058146522492943768ull, 1886059378217970ull}},
+{{13646517217994355016ull, 1508847502574376ull}},
+{{7227864959653573688ull, 1207078002059501ull}},
+{{4185886305961897256ull, 1931324803295202ull}},
+{{14416755488995248772ull, 1545059842636161ull}},
+{{7844055576454288696ull, 1236047874108929ull}},
+{{1482442478101130944ull, 1977676598574287ull}},
+{{12254000426706635724ull, 1582141278859429ull}},
+{{13492549156107218904ull, 1265713023087543ull}},
+{{17898729835029639920ull, 2025140836940069ull}},
+{{18008332682765622260ull, 1620112669552055ull}},
+{{14406666146212497808ull, 1296090135641644ull}},
+{{11982619389714265524ull, 2073744217026631ull}},
+{{5896746697029502096ull, 1658995373621305ull}},
+{{4717397357623601676ull, 1327196298897044ull}},
+{{14926533401681583328ull, 2123514078235270ull}},
+{{11941226721345266664ull, 1698811262588216ull}},
+{{5863632562334303008ull, 1359049010070573ull}},
+{{5692463284992974488ull, 2174478416112917ull}},
+{{15622017072220110560ull, 1739582732890333ull}},
+{{1429567213550357480ull, 1391666186312267ull}},
+{{5976656356422482288ull, 2226665898099627ull}},
+{{15849371529363716800ull, 1781332718479701ull}},
+{{8990148408749063116ull, 1425066174783761ull}},
+{{3502769912257340168ull, 1140052939827009ull}},
+{{12983129489095564920ull, 1824084703723214ull}},
+{{14075852406018362260ull, 1459267762978571ull}},
+{{7571333110072779484ull, 1167414210382857ull}},
+{{15803481790858357496ull, 1867862736612571ull}},
+{{8953436617944775676ull, 1494290189290057ull}},
+{{18230795738581551508ull, 1195432151432045ull}},
+{{10722529108020930800ull, 1912691442291273ull}},
+{{15956720915900565284ull, 1530153153833018ull}},
+{{1697330288494721260ull, 1224122523066415ull}},
+{{2715728461591554016ull, 1958596036906264ull}},
+{{5861931584015153536ull, 1566876829525011ull}},
+{{1000196452470212504ull, 1253501463620009ull}},
+{{8979011953436160652ull, 2005602341792014ull}},
+{{10872558377490838844ull, 1604481873433611ull}},
+{{5008697887250760752ull, 1283585498746889ull}},
+{{15392614249085037852ull, 2053736797995022ull}},
+{{4935393769784209636ull, 1642989438396018ull}},
+{{11327012645311188356ull, 1314391550716814ull}},
+{{7055173788272170400ull, 2103026481146903ull}},
+{{13022836660101556964ull, 1682421184917522ull}},
+{{3039571698597424924ull, 1345936947934018ull}},
+{{1173965903013969556ull, 2153499116694429ull}},
+{{4628521537153085968ull, 1722799293355543ull}},
+{{11081514859206289420ull, 1378239434684434ull}},
+{{6662377330504332104ull, 2205183095495095ull}},
+{{5329901864403465684ull, 1764146476396076ull}},
+{{574572676780862224ull, 1411317181116861ull}},
+{{15217053400392331072ull, 1129053744893488ull}},
+{{2211192552176267776ull, 1806485991829582ull}},
+{{12837000485966745192ull, 1445188793463665ull}},
+{{10269600388773396152ull, 1156151034770932ull}},
+{{1673965363069792552ull, 1849841655633492ull}},
+{{12407218734681565012ull, 1479873324506793ull}},
+{{17304472617229072656ull, 1183898659605434ull}},
+{{16619109743340785280ull, 1894237855368695ull}},
+{{13295287794672628224ull, 1515390284294956ull}},
+{{6946881420996192256ull, 1212312227435965ull}},
+{{11115010273593907608ull, 1939699563897544ull}},
+{{12581357033617036408ull, 1551759651118035ull}},
+{{10065085626893629128ull, 1241407720894428ull}},
+{{12414788188287896280ull, 1986252353431085ull}},
+{{9931830550630317024ull, 1589001882744868ull}},
+{{15324162069988074264ull, 1271201506195894ull}},
+{{13450612867755187856ull, 2033922409913431ull}},
+{{7071141479462239960ull, 1627137927930745ull}},
+{{5656913183569791968ull, 1301710342344596ull}},
+{{1672363464227846504ull, 2082736547751354ull}},
+{{5027239586124187528ull, 1666189238201083ull}},
+{{11400489298383170668ull, 1332951390560866ull}},
+{{10862085247929252424ull, 2132722224897386ull}},
+{{5000319383601491616ull, 1706177779917909ull}},
+{{7689604321623103616ull, 1364942223934327ull}},
+{{15992715729338876108ull, 2183907558294923ull}},
+{{1726126139245369916ull, 1747126046635939ull}},
+{{5070249726138206256ull, 1397700837308751ull}},
+{{733701932337309364ull, 2236321339694002ull}},
+{{11655007990095578460ull, 1789057071755201ull}},
+{{5634657577334552444ull, 1431245657404161ull}},
+{{818377247125731632ull, 1144996525923329ull}},
+{{8688101224884991260ull, 1831994441477326ull}},
+{{3261132165166082684ull, 1465595553181861ull}},
+{{17366300991100507440ull, 1172476442545488ull}},
+{{5649988697309349964ull, 1875962308072782ull}},
+{{15588037402073210940ull, 1500769846458225ull}},
+{{12470429921658568752ull, 1200615877166580ull}},
+{{1505943800944158388ull, 1920985403466529ull}},
+{{4894103855497237032ull, 1536788322773223ull}},
+{{11293980713881610272ull, 1229430658218578ull}},
+{{14381020327468666116ull, 1967089053149725ull}},
+{{11504816261974932892ull, 1573671242519780ull}},
+{{9203853009579946312ull, 1258936994015824ull}},
+{{3658118371102183132ull, 2014299190425319ull}},
+{{6615843511623656828ull, 1611439352340255ull}},
+{{5292674809298925464ull, 1289151481872204ull}},
+{{15846977324362101388ull, 2062642370995526ull}},
+{{8988233044747770788ull, 1650113896796421ull}},
+{{3501237621056306304ull, 1320091117437137ull}},
+{{9291329008432000412ull, 2112145787899419ull}},
+{{11122412021487510652ull, 1689716630319535ull}},
+{{8897929617190008524ull, 1351773304255628ull}},
+{{10547338572762103312ull, 2162837286809005ull}},
+{{8437870858209682652ull, 1730269829447204ull}},
+{{10439645501309656444ull, 1384215863557763ull}},
+{{13014083987353539988ull, 2214745381692421ull}},
+{{6721918375140921668ull, 1771796305353937ull}},
+{{16445581144338468304ull, 1417437044283149ull}},
+{{16845813730212684964ull, 1133949635426519ull}},
+{{15885255524114564976ull, 1814319416682431ull}},
+{{9018855604549741656ull, 1451455533345945ull}},
+{{7215084483639793324ull, 1161164426676756ull}},
+{{4165437544339848676ull, 1857863082682810ull}},
+{{3332350035471878940ull, 1486290466146248ull}},
+{{10044577657861323796ull, 1189032372916998ull}},
+{{12381975437836207752ull, 1902451796667197ull}},
+{{2526882720785145556ull, 1521961437333758ull}},
+{{9400203806111937092ull, 1217569149867006ull}},
+{{7661628460295278700ull, 1948110639787210ull}},
+{{6129302768236222960ull, 1558488511829768ull}},
+{{12282139844072799012ull, 1246790809463814ull}},
+{{8583377306290747452ull, 1994865295142103ull}},
+{{14245399474516418608ull, 1595892236113682ull}},
+{{4017621950129314240ull, 1276713788890946ull}},
+{{17496241564432633756ull, 2042742062225513ull}},
+{{2928946807320376036ull, 1634193649780411ull}},
+{{17100552704823942120ull, 1307354919824328ull}},
+{{5224791439266845452ull, 2091767871718926ull}},
+{{490484336671566040ull, 1673414297375141ull}},
+{{15149782728304894124ull, 1338731437900112ull}},
+{{9482257106320189308ull, 2141970300640180ull}},
+{{7585805685056151444ull, 1713576240512144ull}},
+{{9757993362786831480ull, 1370860992409715ull}},
+{{15612789380458930368ull, 2193377587855544ull}},
+{{16179580319109054616ull, 1754702070284435ull}},
+{{12943664255287243692ull, 1403761656227548ull}},
+{{17020513993717679588ull, 2246018649964077ull}},
+{{6237713565490323024ull, 1796814919971262ull}},
+{{16058217296617989388ull, 1437451935977009ull}},
+{{16535922652036301832ull, 1149961548781607ull}},
+{{11700080984290441640ull, 1839938478050572ull}},
+{{1981367157948532664ull, 1471950782440458ull}},
+{{8963791355842646780ull, 1177560625952366ull}},
+{{6963368539864414200ull, 1884097001523786ull}},
+{{1881346017149621036ull, 1507277601219029ull}},
+{{5194425628461607152ull, 1205822080975223ull}},
+{{4621732190796661120ull, 1929315329560357ull}},
+{{14765432196863059868ull, 1543452263648285ull}},
+{{11812345757490447892ull, 1234761810918628ull}},
+{{15210404397242806304ull, 1975618897469805ull}},
+{{12168323517794245044ull, 1580495117975844ull}},
+{{13424007628977306360ull, 1264396094380675ull}},
+{{3031668132654138560ull, 2023033751009081ull}},
+{{17182729765090952140ull, 1618427000807264ull}},
+{{17435532626814672036ull, 1294741600645811ull}},
+{{2071410499710102992ull, 2071586561033299ull}},
+{{5346477214509992716ull, 1657269248826639ull}},
+{{7966530586349904496ull, 1325815399061311ull}},
+{{5367751308676026548ull, 2121304638498098ull}},
+{{11672898676424641884ull, 1697043710798478ull}},
+{{16717016570623534156ull, 1357634968638782ull}},
+{{11989831254030013356ull, 2172215949822052ull}},
+{{2213167373740190036ull, 1737772759857642ull}},
+{{12838580343217883000ull, 1390218207886113ull}},
+{{16852379734406702476ull, 2224349132617781ull}},
+{{9792554972783451660ull, 1779479306094225ull}},
+{{7834043978226761328ull, 1423583444875380ull}},
+{{6267235182581409060ull, 1138866755900304ull}},
+{{17406273921614075144ull, 1822186809440486ull}},
+{{10235670322549349792ull, 1457749447552389ull}},
+{{11877885072781390156ull, 1166199558041911ull}},
+{{11625918486966403604ull, 1865919292867058ull}},
+{{16679432419056943528ull, 1492735434293646ull}},
+{{9654197120503644500ull, 1194188347434917ull}},
+{{689320133838189908ull, 1910701355895868ull}},
+{{7930153736554372572ull, 1528561084716694ull}},
+{{10033471803985408380ull, 1222848867773355ull}},
+{{16053554886376653412ull, 1956558188437368ull}},
+{{1774797464875591760ull, 1565246550749895ull}},
+{{1419837971900473408ull, 1252197240599916ull}},
+{{13339787199266488420ull, 2003515584959865ull}},
+{{10671829759413190736ull, 1602812467967892ull}},
+{{1158766178046731944ull, 1282249974374314ull}},
+{{9232723514358591756ull, 2051599958998902ull}},
+{{7481182003052760ull, 1641279967199122ull}},
+{{11074031389828173176ull, 1313023973759297ull}},
+{{2961054964757435788ull, 2100838358014876ull}},
+{{17126239230773589924ull, 1680670686411900ull}},
+{{13700991384618871940ull, 1344536549129520ull}},
+{{3474842141680643488ull, 2151258478607233ull}},
+{{10158571342828335436ull, 1721006782885786ull}},
+{{4437508259520758024ull, 1376805426308629ull}},
+{{14478710844717033488ull, 2202888682093806ull}},
+{{7893619861031716468ull, 1762310945675045ull}},
+{{6314895888825373172ull, 1409848756540036ull}},
+{{1362567896318388216ull, 1127879005232029ull}},
+{{9558806263593241792ull, 1804606408371246ull}},
+{{3957696196132683108ull, 1443685126696997ull}},
+{{14234203401131877456ull, 1154948101357597ull}},
+{{8017330182843362640ull, 1847916962172156ull}},
+{{2724515331532779788ull, 1478333569737725ull}},
+{{2179612265226223828ull, 1182666855790180ull}},
+{{3487379624361958128ull, 1892266969264288ull}},
+{{10168601328973387148ull, 1513813575411430ull}},
+{{8134881063178709720ull, 1211050860329144ull}},
+{{1947763256860204580ull, 1937681376526631ull}},
+{{16315605864455804956ull, 1550145101221304ull}},
+{{16741833506306554288ull, 1240116080977043ull}},
+{{4650840721639024924ull, 1984185729563270ull}},
+{{3720672577311219940ull, 1587348583650616ull}},
+{{17733933320816617244ull, 1269878866920492ull}},
+{{13616898054338946300ull, 2031806187072788ull}},
+{{18272216072954977684ull, 1625444949658230ull}},
+{{14617772858363982148ull, 1300355959726584ull}},
+{{12320390129156640468ull, 2080569535562535ull}},
+{{9856312103325312372ull, 1664455628450028ull}},
+{{15263747312144070544ull, 1331564502760022ull}},
+{{9664600440462871580ull, 2130503204416036ull}},
+{{4042331537628386940ull, 1704402563532829ull}},
+{{6923214044844619876ull, 1363522050826263ull}},
+{{7387793657009481480ull, 2181635281322021ull}},
+{{2220886110865674860ull, 1745308225057617ull}},
+{{12844755332918270856ull, 1396246580046093ull}},
+{{16862259717927323048ull, 2233994528073749ull}},
+{{17179156589083768760ull, 1787195622458999ull}},
+{{17432674086008925332ull, 1429756497967199ull}},
+{{17635488083549050588ull, 1143805198373759ull}},
+{{17148734489452749972ull, 1830088317398015ull}},
+{{13718987591562199976ull, 1464070653918412ull}},
+{{3596492443765939336ull, 1171256523134730ull}},
+{{5754387910025502936ull, 1874010437015568ull}},
+{{11982207957504222996ull, 1499208349612454ull}},
+{{13275115180745288720ull, 1199366679689963ull}},
+{{17550835474450551628ull, 1918986687503941ull}},
+{{10351319564818530980ull, 1535189350003153ull}},
+{{15659753281338645432ull, 1228151480002522ull}},
+{{10298209991174191396ull, 1965042368004036ull}},
+{{4549219178197442792ull, 1572033894403229ull}},
+{{7328724157299864556ull, 1257627115522583ull}},
+{{8036609836937872972ull, 2012203384836133ull}},
+{{13807985499034119024ull, 1609762707868906ull}},
+{{7357039584485384896ull, 1287810166295125ull}},
+{{11771263335176615832ull, 2060496266072200ull}},
+{{9417010668141292664ull, 1648397012857760ull}},
+{{7533608534513034132ull, 1318717610286208ull}},
+{{8364424840478944288ull, 2109948176457933ull}},
+{{14070237501866976076ull, 1687958541166346ull}},
+{{7566841186751670540ull, 1350366832933077ull}},
+{{15796294713544583184ull, 2160586932692923ull}},
+{{1568989326609935580ull, 1728469546154339ull}},
+{{4944540276029858784ull, 1382775636923471ull}},
+{{532566812163953412ull, 2212441019077554ull}},
+{{4115402264473073052ull, 1769952815262043ull}},
+{{10671019441062279088ull, 1415962252209634ull}},
+{{12226164367591733592ull, 1132769801767707ull}},
+{{4804467729179132456ull, 1812431682828332ull}},
+{{14911620627569036936ull, 1449945346262665ull}},
+{{11929296502055229548ull, 1159956277010132ull}},
+{{4329479144320725984ull, 1855930043216212ull}},
+{{14531629759682311756ull, 1484744034572969ull}},
+{{15314652622487759728ull, 1187795227658375ull}},
+{{6056700122270863952ull, 1900472364253401ull}},
+{{1156011283074780836ull, 1520377891402721ull}},
+{{15682204285427465960ull, 1216302313122176ull}},
+{{17712829227200124892ull, 1946083700995482ull}},
+{{6791565752276279268ull, 1556866960796386ull}},
+{{1743903787079113092ull, 1245493568637109ull}},
+{{10168943688810401592ull, 1992789709819374ull}},
+{{11824503765790231596ull, 1594231767855499ull}},
+{{13148951827374095600ull, 1275385414284399ull}},
+{{9970276479572821992ull, 2040616662855039ull}},
+{{11665569998400167916ull, 1632493330284031ull}},
+{{5643107183978224008ull, 1305994664227225ull}},
+{{9028971494365158416ull, 2089591462763560ull}},
+{{7223177195492126732ull, 1671673170210848ull}},
+{{13157239385877522032ull, 1337338536168678ull}},
+{{17362234202662124928ull, 2139741657869885ull}},
+{{13889787362129699944ull, 1711793326295908ull}},
+{{43783445478028984ull, 1369434661036727ull}},
+{{3759402327506756700ull, 2191095457658763ull}},
+{{10386219491489226008ull, 1752876366127010ull}},
+{{8308975593191380804ull, 1402301092901608ull}},
+{{9605012134364298964ull, 2243681748642573ull}},
+{{15062707336975259820ull, 1794945398914058ull}},
+{{982119425354476884ull, 1435956319131247ull}},
+{{11853741984509312476ull, 1148765055304997ull}},
+{{4208591916247258672ull, 1838024088487996ull}},
+{{18124268791965448228ull, 1470419270790396ull}},
+{{10810066218830448260ull, 1176335416632317ull}},
+{{2538710691161075924ull, 1882136666611708ull}},
+{{9409666182412681384ull, 1505709333289366ull}},
+{{3838384131188234784ull, 1204567466631493ull}},
+{{2452065795159265332ull, 1927307946610389ull}},
+{{5651001450869322588ull, 1541846357288311ull}},
+{{831452345953547748ull, 1233477085830649ull}},
+{{8709021383009497044ull, 1973563337329038ull}},
+{{14345914735891418280ull, 1578850669863230ull}},
+{{11476731788713134624ull, 1263080535890584ull}},
+{{7294724417715284432ull, 2020928857424935ull}},
+{{5835779534172227544ull, 1616743085939948ull}},
+{{12047321256821602680ull, 1293394468751958ull}},
+{{15586365196172653968ull, 2069431150003133ull}},
+{{1401045712712392204ull, 1655544920002507ull}},
+{{12188883014395644732ull, 1324435936002005ull}},
+{{1055468749323479960ull, 2119097497603209ull}},
+{{4533723814200694288ull, 1695277998082567ull}},
+{{14695025495586286400ull, 1356222398466053ull}},
+{{1375947904486596304ull, 2169955837545686ull}},
+{{15858153582556918336ull, 1735964670036548ull}},
+{{1618476421819803700ull, 1388771736029239ull}},
+{{9968259904395506564ull, 2222034777646782ull}},
+{{595910294032584604ull, 1777627822117426ull}},
+{{15234123494193708976ull, 1422102257693940ull}},
+{{12187298795354967180ull, 1137681806155152ull}},
+{{4742282813600306196ull, 1820290889848244ull}},
+{{7483175065622155280ull, 1456232711878595ull}},
+{{5986540052497724224ull, 1164986169502876ull}},
+{{2199766454512538112ull, 1863977871204602ull}},
+{{12827859607835761460ull, 1491182296963681ull}},
+{{6572938871526698844ull, 1192945837570945ull}},
+{{10516702194442718152ull, 1908713340113512ull}},
+{{1034664126070353876ull, 1526970672090810ull}},
+{{827731300856283100ull, 1221576537672648ull}},
+{{16081765340337694252ull, 1954522460276236ull}},
+{{9176063457528245080ull, 1563617968220989ull}},
+{{11030199580764506388ull, 1250894374576791ull}},
+{{10269621699739389572ull, 2001430999322866ull}},
+{{4526348545049601336ull, 1601144799458293ull}},
+{{10999776465523501712ull, 1280915839566634ull}},
+{{6531595900611871772ull, 2049465343306615ull}},
+{{5225276720489497420ull, 1639572274645292ull}},
+{{15248267820617328904ull, 1311657819716233ull}},
+{{2261135624536264308ull, 2098652511545974ull}},
+{{5498257314370921768ull, 1678922009236779ull}},
+{{8087954666238647740ull, 1343137607389423ull}},
+{{9251378651239926060ull, 2149020171823077ull}},
+{{22405291508120200ull, 1719216137458462ull}},
+{{11085970677432227128ull, 1375372909966769ull}},
+{{6669506639665832440ull, 2200596655946831ull}},
+{{1646256496990755628ull, 1760477324757465ull}},
+{{1317005197592604500ull, 1408381859805972ull}},
+{{12121650602299814572ull, 1126705487844777ull}},
+{{4637245704712062020ull, 1802728780551644ull}},
+{{7399145378511559940ull, 1442183024441315ull}},
+{{5919316302809247952ull, 1153746419553052ull}},
+{{13160254899236707048ull, 1845994271284883ull}},
+{{17906901548873186284ull, 1476795417027906ull}},
+{{10636172424356638704ull, 1181436333622325ull}},
+{{17017875878970621928ull, 1890298133795720ull}},
+{{13614300703176497540ull, 1512238507036576ull}},
+{{7202091747799287708ull, 1209790805629261ull}},
+{{4144649166995039688ull, 1935665289006818ull}},
+{{10694416963079852396ull, 1548532231205454ull}},
+{{12244882385205792240ull, 1238825784964363ull}},
+{{15902463001587357264ull, 1982121255942981ull}},
+{{9032621586527975488ull, 1585697004754385ull}},
+{{7226097269222380388ull, 1268557603803508ull}},
+{{7872406816013898300ull, 2029692166085613ull}},
+{{13676623082294939288ull, 1623753732868490ull}},
+{{10941298465835951428ull, 1299002986294792ull}},
+{{2748682286369880992ull, 2078404778071668ull}},
+{{9577643458579725440ull, 1662723822457334ull}},
+{{11351463581605690676ull, 1330179057965867ull}},
+{{3404946471601463788ull, 2128286492745388ull}},
+{{10102654806764991676ull, 1702629194196310ull}},
+{{8082123845411993340ull, 1362103355357048ull}},
+{{9242049337917279024ull, 2179365368571277ull}},
+{{14941840850002572ull, 1743492294857022ull}},
+{{11079999916905733028ull, 1394793835885617ull}},
+{{2970604608081531552ull, 2231670137416988ull}},
+{{9755181315949045888ull, 1785336109933590ull}},
+{{7804145052759236712ull, 1428268887946872ull}},
+{{17311362486433120336ull, 1142615110357497ull}},
+{{12940784719325351248ull, 1828184176571996ull}},
+{{6663278960718370676ull, 1462547341257597ull}},
+{{16398669612800427508ull, 1170037873006077ull}},
+{{11480476121513042724ull, 1872060596809724ull}},
+{{12873729711952344500ull, 1497648477447779ull}},
+{{13988332584303785924ull, 1198118781958223ull}},
+{{245239246434595540ull, 1916990051133158ull}},
+{{7574889026631497076ull, 1533592040906526ull}},
+{{2370562406563287340ull, 1226873632725221ull}},
+{{14860946294726990712ull, 1962997812360353ull}},
+{{820710591555861600ull, 1570398249888283ull}},
+{{8035266102728509928ull, 1256318599910626ull}},
+{{5477728134881795236ull, 2010109759857002ull}},
+{{15450228952131167160ull, 1608087807885601ull}},
+{{8670834346963023404ull, 1286470246308481ull}},
+{{6494637325657016800ull, 2058352394093570ull}},
+{{5195709860525613440ull, 1646681915274856ull}},
+{{467219073678580428ull, 1317345532219885ull}},
+{{747550517885728688ull, 2107752851551816ull}},
+{{15355435673276224240ull, 1686202281241452ull}},
+{{4905650909137158748ull, 1348961824993162ull}},
+{{11538390269361364320ull, 2158338919989059ull}},
+{{12920061030231001776ull, 1726671135991247ull}},
+{{2957351194700980776ull, 1381336908792998ull}},
+{{1042413096779658920ull, 2210139054068797ull}},
+{{11901976921649458104ull, 1768111243255037ull}},
+{{2142883907835745836ull, 1414488994604030ull}},
+{{1714307126268596668ull, 1131591195683224ull}},
+{{10121589031513575316ull, 1810545913093158ull}},
+{{15475968854694680900ull, 1448436730474526ull}},
+{{8691426269013834396ull, 1158749384379621ull}},
+{{6527584400938314388ull, 1853999015007394ull}},
+{{8911416335492561832ull, 1483199212005915ull}},
+{{7129133068394049468ull, 1186559369604732ull}},
+{{15095961724172389472ull, 1898494991367571ull}},
+{{8387420564596001252ull, 1518795993094057ull}},
+{{17777982895902531972ull, 1215036794475245ull}},
+{{9998028559734499540ull, 1944058871160393ull}},
+{{15377120477271420280ull, 1555247096928314ull}},
+{{15991045196559046544ull, 1244197677542651ull}},
+{{18206974685010653828ull, 1990716284068242ull}},
+{{7186882118524702416ull, 1592573027254594ull}},
+{{9438854509561672256ull, 1274058421803675ull}},
+{{15102167215298675608ull, 2038493474885880ull}},
+{{12081733772238940488ull, 1630794779908704ull}},
+{{13354735832533062712ull, 1304635823926963ull}},
+{{17678228517310990016ull, 2087417318283141ull}},
+{{10453233999106881692ull, 1669933854626513ull}},
+{{15741284828769326000ull, 1335947083701210ull}},
+{{6739311652321369984ull, 2137515333921937ull}},
+{{16459495766082826956ull, 1710012267137549ull}},
+{{16856945427608171888ull, 1368009813710039ull}},
+{{15903066239947344052ull, 2188815701936063ull}},
+{{1654406547732144272ull, 1751052561548851ull}},
+{{16080920497153356708ull, 1400842049239080ull}},
+{{7282728721735819120ull, 2241347278782529ull}},
+{{9515531792130565620ull, 1793077823026023ull}},
+{{14991123063188273140ull, 1434462258420818ull}},
+{{924852006324887544ull, 1147569806736655ull}},
+{{1479763210119820068ull, 1836111690778648ull}},
+{{8562508197579676700ull, 1468889352622918ull}},
+{{14228704187547562008ull, 1175111482098334ull}},
+{{11697880255850368244ull, 1880178371357335ull}},
+{{9358304204680294596ull, 1504142697085868ull}},
+{{14865340993228056320ull, 1203314157668694ull}},
+{{12716499144939159144ull, 1925302652269911ull}},
+{{6483850501209416992ull, 1540242121815929ull}},
+{{8876429215709443916ull, 1232193697452743ull}},
+{{10512937930393199944ull, 1971509915924389ull}},
+{{12099699159056470280ull, 1577207932739511ull}},
+{{5990410512503265900ull, 1261766346191609ull}},
+{{16963354449489046088ull, 2018826153906574ull}},
+{{17260032374333147192ull, 1615060923125259ull}},
+{{17497374714208428076ull, 1292048738500207ull}},
+{{13238404283765843632ull, 2067277981600332ull}},
+{{3212025797528854260ull, 1653822385280266ull}},
+{{17327015896990724700ull, 1323057908224212ull}},
+{{12965830176217518228ull, 2116892653158740ull}},
+{{10372664140974014580ull, 1693514122526992ull}},
+{{919433683295391016ull, 1354811298021594ull}},
+{{8849791522756446276ull, 2167698076834550ull}},
+{{7079833218205157020ull, 1734158461467640ull}},
+{{5663866574564125616ull, 1387326769174112ull}},
+{{12751535334044511312ull, 2219722830678579ull}},
+{{13890577081977519372ull, 1775778264542863ull}},
+{{44415221356284528ull, 1420622611634291ull}},
+{{14792927436052668912ull, 1136498089307432ull}},
+{{8911288638716628972ull, 1818396942891892ull}},
+{{18197077355199034144ull, 1454717554313513ull}},
+{{3489615439933496348ull, 1163774043450811ull}},
+{{16651431148119325124ull, 1862038469521297ull}},
+{{5942447289011639452ull, 1489630775617038ull}},
+{{12132655460693132208ull, 1191704620493630ull}},
+{{965504663399459920ull, 1906727392789809ull}},
+{{4461752545461478260ull, 1525381914231847ull}},
+{{14637448480594913576ull, 1220305531385477ull}},
+{{8662522309984220428ull, 1952488850216764ull}},
+{{10619366662729286668ull, 1561991080173411ull}},
+{{4806144515441519008ull, 1249592864138729ull}},
+{{15068528854190251064ull, 1999348582621966ull}},
+{{8365474268610290528ull, 1599478866097573ull}},
+{{14071077044372053068ull, 1279583092878058ull}},
+{{377630382543822968ull, 2047332948604894ull}},
+{{3991453120776968700ull, 1637866358883915ull}},
+{{3193162496621574960ull, 1310293087107132ull}},
+{{8798408809336430256ull, 2096468939371411ull}},
+{{3349378232727233884ull, 1677175151497129ull}},
+{{6368851400923697428ull, 1341740121197703ull}},
+{{6500813426736005564ull, 2146784193916325ull}},
+{{5200650741388804452ull, 1717427355133060ull}},
+{{4160520593111043560ull, 1373941884106448ull}},
+{{2967484134235759376ull, 2198307014570317ull}},
+{{13442033751614338468ull, 1758645611656253ull}},
+{{18132324630775291420ull, 1406916489325002ull}},
+{{14254324150272824984ull, 2251066382920004ull}},
+{{15092808134960170308ull, 1800853106336003ull}},
+{{1006200063742405276ull, 1440682485068803ull}},
+{{8183657680477744868ull, 1152545988055042ull}},
+{{16783201103506302112ull, 1844073580888067ull}},
+{{6047863253321221044ull, 1475258864710454ull}},
+{{8527639417398887156ull, 1180207091768363ull}},
+{{9954874253096309128ull, 1888331346829381ull}},
+{{4274550587735136980ull, 1510665077463505ull}},
+{{3419640470188109584ull, 1208532061970804ull}},
+{{12850122381784795980ull, 1933651299153286ull}},
+{{6590749090685926460ull, 1546921039322629ull}},
+{{8961948087290651492ull, 1237536831458103ull}},
+{{10649768124923132064ull, 1980058930332965ull}},
+{{8519814499938505652ull, 1584047144266372ull}},
+{{17883898044176535492ull, 1267237715413097ull}},
+{{13856841611714815492ull, 2027580344660956ull}},
+{{7396124474629942072ull, 1622064275728765ull}},
+{{5916899579703953656ull, 1297651420583012ull}},
+{{13156388142268236176ull, 2076242272932819ull}},
+{{14214459328556499264ull, 1660993818346255ull}},
+{{11371567462845199408ull, 1328795054677004ull}},
+{{7126461496326588088ull, 2126072087483207ull}},
+{{16769215641287001440ull, 1700857669986565ull}},
+{{13415372513029601152ull, 1360686135989252ull}},
+{{6707200761879720548ull, 2177097817582804ull}},
+{{9055109424245686764ull, 1741678254066243ull}},
+{{14622785168880370056ull, 1393342603252994ull}},
+{{12328409825982861120ull, 2229348165204791ull}},
+{{6173379046044378572ull, 1783478532163833ull}},
+{{12317400866319323504ull, 1426782825731066ull}},
+{{6164571878313548480ull, 1141426260584853ull}},
+{{6173966190559767248ull, 1826282016935765ull}},
+{{4939172952447813796ull, 1461025613548612ull}},
+{{15019384806183982008ull, 1168820490838889ull}},
+{{12962969245668640244ull, 1870112785342223ull}},
+{{17749073026018732840ull, 1496090228273778ull}},
+{{3131211976589255300ull, 1196872182619023ull}},
+{{1320590347800898160ull, 1914995492190437ull}},
+{{12124518722466449496ull, 1531996393752349ull}},
+{{13388963792715069920ull, 1225597115001879ull}},
+{{10354295624118380904ull, 1960955384003007ull}},
+{{904738869810884076ull, 1568764307202406ull}},
+{{15481186354816348556ull, 1255011445761924ull}},
+{{13701851723480426720ull, 2008018313219079ull}},
+{{14650830193526251696ull, 1606414650575263ull}},
+{{652617710595270388ull, 1285131720460211ull}},
+{{12112234781178163592ull, 2056210752736337ull}},
+{{2311090195458710228ull, 1644968602189070ull}},
+{{1848872156366968180ull, 1315974881751256ull}},
+{{14026241894412880060ull, 2105559810802009ull}},
+{{14910342330272214372ull, 1684447848641607ull}},
+{{4549576234733950848ull, 1347558278913286ull}},
+{{18347368419800052332ull, 2156093246261257ull}},
+{{7299197106356221216ull, 1724874597009006ull}},
+{{2150008870343066652ull, 1379899677607205ull}},
+{{3440014192548906644ull, 2207839484171528ull}},
+{{10130708983522945960ull, 1766271587337222ull}},
+{{725869557334536120ull, 1413017269869778ull}},
+{{7959393275351449544ull, 1130413815895822ull}},
+{{16424378055304229592ull, 1808662105433315ull}},
+{{13139502444243383672ull, 1446929684346652ull}},
+{{3132904325910886292ull, 1157543747477322ull}},
+{{8701995736199328392ull, 1852069995963715ull}},
+{{6961596588959462712ull, 1481655996770972ull}},
+{{16637323715393301140ull, 1185324797416777ull}},
+{{11862322685661640532ull, 1896519675866844ull}},
+{{13179206963271222748ull, 1517215740693475ull}},
+{{10543365570616978200ull, 1213772592554780ull}},
+{{16869384912987165120ull, 1942036148087648ull}},
+{{2427461486164001124ull, 1553628918470119ull}},
+{{5631318003673111224ull, 1242903134776095ull}},
+{{9010108805876977956ull, 1988645015641752ull}},
+{{18276133488927313336ull, 1590916012513401ull}},
+{{10931557976399940344ull, 1272732810010721ull}},
+{{10111795132756083908ull, 2036372496017154ull}},
+{{11778784920946777448ull, 1629097996813723ull}},
+{{16801725566241242604ull, 1303278397450978ull}},
+{{4746668017534526228ull, 2085245435921566ull}},
+{{107985599285710660ull, 1668196348737253ull}},
+{{7465086108912389172ull, 1334557078989802ull}},
+{{15633486589001733004ull, 2135291326383683ull}},
+{{1438742826975655432ull, 1708233061106947ull}},
+{{12219040705806255316ull, 1366586448885557ull}},
+{{4793069870322367212ull, 2186538318216892ull}},
+{{14902502340483624740ull, 1749230654573513ull}},
+{{853955428161168820ull, 1399384523658811ull}},
+{{12434375129283601084ull, 2239015237854097ull}},
+{{2568802473943060220ull, 1791212190283278ull}},
+{{9433739608638268824ull, 1432969752226622ull}},
+{{168294057426794412ull, 1146375801781298ull}},
+{{15026665750850512352ull, 1834201282850076ull}},
+{{8331983785938499556ull, 1467361026280061ull}},
+{{2976238214008889324ull, 1173888821024049ull}},
+{{12140678771898043564ull, 1878222113638478ull}},
+{{17091240647002255496ull, 1502577690910782ull}},
+{{6294294888117983752ull, 1202062152728626ull}},
+{{2692174191504953356ull, 1923299444365802ull}},
+{{13221785797429693656ull, 1538639555492641ull}},
+{{6888079823201844600ull, 1230911644394113ull}},
+{{7331578902381041036ull, 1969458631030581ull}},
+{{2175914307162922508ull, 1575566904824465ull}},
+{{1740731445730338004ull, 1260453523859572ull}},
+{{6474519127910451132ull, 2016725638175315ull}},
+{{5179615302328360904ull, 1613380510540252ull}},
+{{15211738686088419692ull, 1290704408432201ull}},
+{{16960084268257650864ull, 2065127053491522ull}},
+{{6189369785122300044ull, 1652101642793218ull}},
+{{12330193457581660680ull, 1321681314234574ull}},
+{{8660263087904926124ull, 2114690102775319ull}},
+{{10617559285065851220ull, 1691752082220255ull}},
+{{8494047428052680976ull, 1353401665776204ull}},
+{{2522429440658558592ull, 2165442665241927ull}},
+{{13085989996752577844ull, 1732354132193541ull}},
+{{6779443182660151952ull, 1385883305754833ull}},
+{{7157760277514332800ull, 2217413289207733ull}},
+{{13104905851495286888ull, 1773930631366186ull}},
+{{6794575866454319184ull, 1419144505092949ull}},
+{{9125009507905365672ull, 1135315604074359ull}},
+{{3531968768422854104ull, 1816504966518975ull}},
+{{2825575014738283284ull, 1453203973215180ull}},
+{{2260460011790626628ull, 1162563178572144ull}},
+{{10995433648348823252ull, 1860101085715430ull}},
+{{8796346918679058600ull, 1488080868572344ull}},
+{{10726426349685157204ull, 1190464694857875ull}},
+{{17162282159496251524ull, 1904743511772600ull}},
+{{13729825727597001220ull, 1523794809418080ull}},
+{{10983860582077600976ull, 1219035847534464ull}},
+{{6506130487098430592ull, 1950457356055143ull}},
+{{12583602019162565120ull, 1560365884844114ull}},
+{{13756230430071962420ull, 1248292707875291ull}},
+{{14631271058631319224ull, 1997268332600466ull}},
+{{8015668032163145056ull, 1597814666080373ull}},
+{{13791232055214336692ull, 1278251732864298ull}},
+{{18376622473601028384ull, 2045202772582877ull}},
+{{7322600349397002060ull, 1636162218066302ull}},
+{{16926126723743332616ull, 1308929774453041ull}},
+{{1256361054795959928ull, 2094287639124867ull}},
+{{12073135288062498912ull, 1675430111299893ull}},
+{{17037205859933819776ull, 1340344089039914ull}},
+{{16191482931668380672ull, 2144550542463863ull}},
+{{1885139901108973568ull, 1715640433971091ull}},
+{{16265507179854820144ull, 1372512347176872ull}},
+{{11267416228800070940ull, 2196019755482996ull}},
+{{5324584168298146428ull, 1756815804386397ull}},
+{{15327713778864248112ull, 1405452643509117ull}},
+{{9766946787215155688ull, 2248724229614588ull}},
+{{15192255059255945196ull, 1798979383691670ull}},
+{{12153804047404756156ull, 1439183506953336ull}},
+{{6033694423181894604ull, 1151346805562669ull}},
+{{17032608706574852012ull, 1842154888900270ull}},
+{{13626086965259881608ull, 1473723911120216ull}},
+{{7211520757465994964ull, 1178979128896173ull}},
+{{7849084397203681620ull, 1886366606233877ull}},
+{{17347313961988676264ull, 1509093284987101ull}},
+{{10188502354849030688ull, 1207274627989681ull}},
+{{8922906138274628456ull, 1931639404783490ull}},
+{{7138324910619702764ull, 1545311523826792ull}},
+{{16778706372721493180ull, 1236249219061433ull}},
+{{4709837307902927152ull, 1977998750498294ull}},
+{{7457218661064252044ull, 1582399000398635ull}},
+{{5965774928851401636ull, 1265919200318908ull}},
+{{5855891071420332292ull, 2025470720510253ull}},
+{{12063410486620086480ull, 1620376576408202ull}},
+{{2272030759812248536ull, 1296301261126562ull}},
+{{7324598030441507984ull, 2074082017802499ull}},
+{{9549027239095116712ull, 1659265614241999ull}},
+{{11328570606018003692ull, 1327412491393599ull}},
+{{7057666525403074936ull, 2123859986229759ull}},
+{{9335482035064370272ull, 1699087988983807ull}},
+{{89687998567675572ull, 1359270391187046ull}},
+{{11211547241934011884ull, 2174832625899273ull}},
+{{16347935423031030152ull, 1739866100719418ull}},
+{{2010301894199093152ull, 1391892880575535ull}},
+{{3216483030718549048ull, 2227028608920856ull}},
+{{17330581683542480528ull, 1781622887136684ull}},
+{{17553814161575894748ull, 1425298309709347ull}},
+{{6664353699776895152ull, 1140238647767478ull}},
+{{6973617104901121920ull, 1824381836427965ull}},
+{{5578893683920897536ull, 1459505469142372ull}},
+{{15531161391362448996ull, 1167604375313897ull}},
+{{10092462967212277104ull, 1868167000502236ull}},
+{{4384621559027911360ull, 1494533600401789ull}},
+{{7197046061964239408ull, 1195626880321431ull}},
+{{4136576069658962412ull, 1913003008514290ull}},
+{{3309260855727169928ull, 1530402406811432ull}},
+{{13715455128807466912ull, 1224321925449145ull}},
+{{3497984132382395444ull, 1958915080718633ull}},
+{{10177084935389737000ull, 1567132064574906ull}},
+{{4452319133569879276ull, 1253705651659925ull}},
+{{7123710613711806844ull, 2005929042655880ull}},
+{{5698968490969445476ull, 1604743234124704ull}},
+{{8248523607517466704ull, 1283794587299763ull}},
+{{9508288957286036404ull, 2054071339679621ull}},
+{{3917282351086918800ull, 1643257071743697ull}},
+{{14201872325095266008ull, 1314605657394957ull}},
+{{7965600461184784320ull, 2103369051831932ull}},
+{{17440526813173558428ull, 1682695241465545ull}},
+{{13952421450538846740ull, 1346156193172436ull}},
+{{14945176691378334140ull, 2153849909075898ull}},
+{{888094908876936344ull, 1723079927260719ull}},
+{{4399824741843459396ull, 1378463941808575ull}},
+{{7039719586949535036ull, 2205542306893720ull}},
+{{5631775669559628028ull, 1764433845514976ull}},
+{{816071720905792100ull, 1411547076411981ull}},
+{{15410252635692274972ull, 1129237661129584ull}},
+{{13588357772881908984ull, 1806780257807335ull}},
+{{10870686218305527188ull, 1445424206245868ull}},
+{{16075246604128242396ull, 1156339364996694ull}},
+{{14652348122379456868ull, 1850142983994711ull}},
+{{8032529683161655168ull, 1480114387195769ull}},
+{{10115372561271234460ull, 1184091509756615ull}},
+{{16184596098033975136ull, 1894546415610584ull}},
+{{16637025693169090432ull, 1515637132488467ull}},
+{{5930922925051451696ull, 1212509705990774ull}},
+{{16868174309566143364ull, 1940015529585238ull}},
+{{2426493003427183720ull, 1552012423668191ull}},
+{{16698589661709388268ull, 1241609938934552ull}},
+{{11960348199767379940ull, 1986575902295284ull}},
+{{13257627374555814272ull, 1589260721836227ull}},
+{{3227404270160830772ull, 1271408577468982ull}},
+{{8853195646999239560ull, 2034253723950371ull}},
+{{3393207702857481324ull, 1627402979160297ull}},
+{{13782612606511716028ull, 1301922383328237ull}},
+{{7294784911451104356ull, 2083075813325180ull}},
+{{5835827929160883484ull, 1666460650660144ull}},
+{{8358011158070617108ull, 1333168520528115ull}},
+{{13372817852912987376ull, 2133069632844984ull}},
+{{14387603097072300224ull, 1706455706275987ull}},
+{{4131384848174019532ull, 1365164565020790ull}},
+{{6610215757078431252ull, 2184263304033264ull}},
+{{8977521420404655324ull, 1747410643226611ull}},
+{{3492668321581813936ull, 1397928514581289ull}},
+{{12966966944014722944ull, 2236685623330062ull}},
+{{2994875925727957708ull, 1789348498664050ull}},
+{{2395900740582366168ull, 1431478798931240ull}},
+{{1916720592465892932ull, 1145183039144992ull}},
+{{6756101762687339020ull, 1832292862631987ull}},
+{{16472927854375602184ull, 1465834290105589ull}},
+{{16867691098242392068ull, 1172667432084471ull}},
+{{1162864053994455052ull, 1876267891335155ull}},
+{{930291243195564040ull, 1501014313068124ull}},
+{{4433581809298361556ull, 1200811450454499ull}},
+{{14472428524361199136ull, 1921298320727198ull}},
+{{509896375263228340ull, 1537038656581759ull}},
+{{4097265914952492992ull, 1229630925265407ull}},
+{{10244974278665899112ull, 1967409480424651ull}},
+{{4506630608190808968ull, 1573927584339721ull}},
+{{18362699745520288468ull, 1259142067471776ull}},
+{{3554877889639089284ull, 2014627307954843ull}},
+{{10222599941195092072ull, 1611701846363874ull}},
+{{11867428767697983980ull, 1289361477091099ull}},
+{{7919839584091043404ull, 2062978363345759ull}},
+{{10025220482014745044ull, 1650382690676607ull}},
+{{641478756127975388ull, 1320306152541286ull}},
+{{12094412454030491592ull, 2112489844066057ull}},
+{{2296832333740572628ull, 1689991875252846ull}},
+{{16594861125960099396ull, 1351993500202276ull}},
+{{726336098342786772ull, 2163189600323643ull}},
+{{7959766508158050064ull, 1730551680258914ull}},
+{{10057162021268350372ull, 1384441344207131ull}},
+{{8712761604545539952ull, 2215106150731410ull}},
+{{6970209283636431960ull, 1772084920585128ull}},
+{{12954865056392966216ull, 1417667936468102ull}},
+{{2985194415630552324ull, 1134134349174482ull}},
+{{8465659879750794044ull, 1814614958679171ull}},
+{{3083179089058724912ull, 1451691966943337ull}},
+{{13534589715472710900ull, 1161353573554669ull}},
+{{10587297100530606468ull, 1858165717687471ull}},
+{{4780488865682574852ull, 1486532574149977ull}},
+{{14892437536771790852ull, 1189226059319981ull}},
+{{16449202429351044716ull, 1902761694911970ull}},
+{{13159361943480835772ull, 1522209355929576ull}},
+{{6838140740042758296ull, 1217767484743661ull}},
+{{3562327554584592624ull, 1948427975589858ull}},
+{{10228559673151494748ull, 1558742380471886ull}},
+{{4493498923779285472ull, 1246993904377509ull}},
+{{14568295907530677404ull, 1995190247004014ull}},
+{{15343985540766452248ull, 1596152197603211ull}},
+{{8585839617871251472ull, 1276921758082569ull}},
+{{2669296944368271388ull, 2043074812932111ull}},
+{{16892832814462258404ull, 1634459850345688ull}},
+{{2446219807344075752ull, 1307567880276551ull}},
+{{14981998135976252176ull, 2092108608442481ull}},
+{{8296249694039091416ull, 1673686886753985ull}},
+{{6636999755231273132ull, 1338949509403188ull}},
+{{6929850793628126692ull, 2142319215045101ull}},
+{{1854531820160591028ull, 1713855372036081ull}},
+{{16241020715096114116ull, 1371084297628864ull}},
+{{14917586699928051616ull, 2193734876206183ull}},
+{{866022915716710324ull, 1754987900964947ull}},
+{{11760864776799099228ull, 1403990320771957ull}},
+{{4059988383910917472ull, 2246384513235132ull}},
+{{14316037151354464948ull, 1797107610588105ull}},
+{{11452829721083571960ull, 1437686088470484ull}},
+{{12851612591608767888ull, 1150148870776387ull}},
+{{5805184887606387332ull, 1840238193242220ull}},
+{{4644147910085109864ull, 1472190554593776ull}},
+{{25969513326177568ull, 1177752443675021ull}},
+{{11109597665547615080ull, 1884403909880033ull}},
+{{16266375761921912708ull, 1507523127904026ull}},
+{{9323751794795619844ull, 1206018502323221ull}},
+{{7539305242189171104ull, 1929629603717154ull}},
+{{9720793008493247208ull, 1543703682973723ull}},
+{{15155332036278418412ull, 1234962946378978ull}},
+{{2112438369594007520ull, 1975940714206366ull}},
+{{16447345954642847308ull, 1580752571365092ull}},
+{{5779179134230457200ull, 1264602057092074ull}},
+{{16625384244252552168ull, 2023363291347318ull}},
+{{2232260951176310764ull, 1618690633077855ull}},
+{{1785808760941048612ull, 1294952506462284ull}},
+{{10235991646989498424ull, 2071924010339654ull}},
+{{11878142132333509064ull, 1657539208271723ull}},
+{{16881211335350627896ull, 1326031366617378ull}},
+{{4873845248109542696ull, 2121650186587806ull}},
+{{209727383745723832ull, 1697320149270245ull}},
+{{167781906996579068ull, 1357856119416196ull}},
+{{11336497495420257476ull, 2172569791065913ull}},
+{{16447895625820026628ull, 1738055832852730ull}},
+{{13158316500656021304ull, 1390444666282184ull}},
+{{9985259956823903116ull, 2224711466051495ull}},
+{{7988207965459122492ull, 1779769172841196ull}},
+{{2701217557625387668ull, 1423815338272957ull}},
+{{13229020490326041104ull, 1139052270618365ull}},
+{{2719688710812114152ull, 1822483632989385ull}},
+{{2175750968649691324ull, 1457986906391508ull}},
+{{9119298404403573704ull, 1166389525113206ull}},
+{{7212179817561897280ull, 1866223240181130ull}},
+{{5769743854049517824ull, 1492978592144904ull}},
+{{8305143897981524584ull, 1194382873715923ull}},
+{{9598881422028529008ull, 1911012597945477ull}},
+{{300407508139002560ull, 1528810078356382ull}},
+{{11308372450736933016ull, 1223048062685105ull}},
+{{18093395921179092828ull, 1956876900296168ull}},
+{{3406670292717543292ull, 1565501520236935ull}},
+{{2725336234174034636ull, 1252401216189548ull}},
+{{671189159936545092ull, 2003841945903277ull}},
+{{11604997772174967044ull, 1603073556722621ull}},
+{{5594649402998063312ull, 1282458845378097ull}},
+{{12640787859538811624ull, 2051934152604955ull}},
+{{10112630287631049296ull, 1641547322083964ull}},
+{{11779453044846749760ull, 1313237857667171ull}},
+{{11468427242270978972ull, 2101180572267474ull}},
+{{12864090608558693500ull, 1680944457813979ull}},
+{{13980621301588865124ull, 1344755566251183ull}},
+{{232901194090722260ull, 2151608906001894ull}},
+{{3875669770014488132ull, 1721287124801515ull}},
+{{3100535816011590504ull, 1377029699841212ull}},
+{{8650206120360455132ull, 2203247519745939ull}},
+{{10609513711030274428ull, 1762598015796751ull}},
+{{4798262154082309220ull, 1410078412637401ull}},
+{{149260908523937052ull, 1128062730109921ull}},
+{{11306863897864030252ull, 1804900368175873ull}},
+{{16424188747775044848ull, 1443920294540698ull}},
+{{2071304553994304908ull, 1155136235632559ull}},
+{{10692784915874708500ull, 1848217977012094ull}},
+{{12243576747441677124ull, 1478574381609675ull}},
+{{9794861397953341700ull, 1182859505287740ull}},
+{{15671778236725346720ull, 1892575208460384ull}},
+{{16226771404122187696ull, 1514060166768307ull}},
+{{5602719493813929512ull, 1211248133414646ull}},
+{{1585653560618466572ull, 1937997013463434ull}},
+{{4957871663236683580ull, 1550397610770747ull}},
+{{15034343774815077836ull, 1240318088616597ull}},
+{{9297554780736483244ull, 1984508941786556ull}},
+{{3748695009847276272ull, 1587607153429245ull}},
+{{2998956007877821016ull, 1270085722743396ull}},
+{{15866376056830244596ull, 2032137156389433ull}},
+{{1625054401238464708ull, 1625709725111547ull}},
+{{12368089965216502736ull, 1300567780089237ull}},
+{{5031548685378763084ull, 2080908448142780ull}},
+{{4025238948303010468ull, 1664726758514224ull}},
+{{6909539973384318696ull, 1331781406811379ull}},
+{{18433961586898730564ull, 2130850250898206ull}},
+{{11057820454777074128ull, 1704680200718565ull}},
+{{8846256363821659300ull, 1363744160574852ull}},
+{{17843358996856565204ull, 2181990656919763ull}},
+{{3206640753259521196ull, 1745592525535811ull}},
+{{17322707861575258248ull, 1396474020428648ull}},
+{{5580239690068951260ull, 2234358432685838ull}},
+{{11842889381538981652ull, 1787486746148670ull}},
+{{9474311505231185320ull, 1429989396918936ull}},
+{{3890100389443037932ull, 1143991517535149ull}},
+{{13602858252592681340ull, 1830386428056238ull}},
+{{18260984231557965720ull, 1464309142444990ull}},
+{{14608787385246372576ull, 1171447313955992ull}},
+{{8616664557426554828ull, 1874315702329588ull}},
+{{14272029275425064508ull, 1499452561863670ull}},
+{{11417623420340051608ull, 1199562049490936ull}},
+{{10889499843060261924ull, 1919299279185498ull}},
+{{16090297503932030188ull, 1535439423348398ull}},
+{{1804191558919893180ull, 1228351538678719ull}},
+{{10265404123755649736ull, 1965362461885950ull}},
+{{8212323299004519788ull, 1572289969508760ull}},
+{{6569858639203615828ull, 1257831975607008ull}},
+{{6822425007983875004ull, 2012531160971213ull}},
+{{12836637635870920648ull, 1610024928776970ull}},
+{{10269310108696736520ull, 1288019943021576ull}},
+{{9052198544430957784ull, 2060831908834522ull}},
+{{18309805279770497196ull, 1648665527067617ull}},
+{{7269146594332577112ull, 1318932421654094ull}},
+{{562588106706392412ull, 2110291874646551ull}},
+{{15207465744332755220ull, 1688233499717240ull}},
+{{12165972595466204176ull, 1350586799773792ull}},
+{{4708160893778285388ull, 2160938879638068ull}},
+{{11145226344506448956ull, 1728751103710454ull}},
+{{12605529890347069488ull, 1383000882968363ull}},
+{{16479499009813400860ull, 2212801412749381ull}},
+{{9494250393108810364ull, 1770241130199505ull}},
+{{7595400314487048292ull, 1416192904159604ull}},
+{{9765669066331548956ull, 1132954323327683ull}},
+{{11935721691388568008ull, 1812726917324293ull}},
+{{16927274982594675052ull, 1450181533859434ull}},
+{{17231168800817650364ull, 1160145227087547ull}},
+{{12812474822340599292ull, 1856232363340076ull}},
+{{6560631043130569108ull, 1484985890672061ull}},
+{{1559156019762544964ull, 1187988712537649ull}},
+{{9873347261103892592ull, 1900781940060238ull}},
+{{15277375438366934720ull, 1520625552048190ull}},
+{{12221900350693547776ull, 1216500441638552ull}},
+{{4797645302142035148ull, 1946400706621684ull}},
+{{7527465056455538440ull, 1557120565297347ull}},
+{{17090018489390161720ull, 1245696452237877ull}},
+{{12586634324056617464ull, 1993114323580604ull}},
+{{13758656273987204292ull, 1594491458864483ull}},
+{{18385622648673584080ull, 1275593167091586ull}},
+{{3591554534684362268ull, 2040949067346539ull}},
+{{6562592442489400136ull, 1632759253877231ull}},
+{{1560725139249609784ull, 1306207403101785ull}},
+{{2497160222799375660ull, 2089931844962856ull}},
+{{16755123437207141820ull, 1671945475970284ull}},
+{{17093447564507623780ull, 1337556380776227ull}},
+{{12592120844244556752ull, 2140090209241964ull}},
+{{13763045490137555724ull, 1712072167393571ull}},
+{{7321087577368134256ull, 1369657733914857ull}},
+{{15403088938530925136ull, 2191452374263771ull}},
+{{8633122336082829784ull, 1753161899411017ull}},
+{{17974544313091994796ull, 1402529519528813ull}},
+{{6623178012495729736ull, 2244047231246102ull}},
+{{16366588854222314760ull, 1795237784996881ull}},
+{{9403922268635941484ull, 1436190227997505ull}},
+{{7523137814908753188ull, 1148952182398004ull}},
+{{968974059628274128ull, 1838323491836807ull}},
+{{11843225691928350272ull, 1470658793469445ull}},
+{{9474580553542680220ull, 1176527034775556ull}},
+{{7780631256184467704ull, 1882443255640890ull}},
+{{6224505004947574164ull, 1505954604512712ull}},
+{{16047650448183790300ull, 1204763683610169ull}},
+{{14608194272868333512ull, 1927621893776271ull}},
+{{7997206603552756484ull, 1542097515021017ull}},
+{{17465811727067936156ull, 1233678012016813ull}},
+{{5809205874857235912ull, 1973884819226902ull}},
+{{15715411144111519700ull, 1579107855381521ull}},
+{{8882980100547305436ull, 1263286284305217ull}},
+{{17902116975617599024ull, 2021258054888347ull}},
+{{6942995951010258572ull, 1617006443910678ull}},
+{{12933094390292027504ull, 1293605155128542ull}},
+{{5935555765499602712ull, 2069768248205668ull}},
+{{12127142241883502816ull, 1655814598564534ull}},
+{{13391062608248712576ull, 1324651678851627ull}},
+{{6668304914230298828ull, 2119442686162604ull}},
+{{9023992746126149388ull, 1695554148930083ull}},
+{{14597891826384740156ull, 1356443319144066ull}},
+{{15977929292731763604ull, 2170309310630506ull}},
+{{9092994619443500560ull, 1736247448504405ull}},
+{{7274395695554800448ull, 1388997958803524ull}},
+{{570986668661949748ull, 2222396734085639ull}},
+{{4146138149671470120ull, 1777917387268511ull}},
+{{18074305778704817388ull, 1422333909814808ull}},
+{{3391398178738122940ull, 1137867127851847ull}},
+{{9115585900722907028ull, 1820587404562955ull}},
+{{7292468720578325624ull, 1456469923650364ull}},
+{{9523323791204570820ull, 1165175938920291ull}},
+{{7858620436443492668ull, 1864281502272466ull}},
+{{2597547534412883812ull, 1491425201817973ull}},
+{{9456735657014127696ull, 1193140161454378ull}},
+{{11441428236480693992ull, 1909024258327005ull}},
+{{9153142589184555192ull, 1527219406661604ull}},
+{{11011862886089554476ull, 1221775525329283ull}},
+{{13929631803001376840ull, 1954840840526853ull}},
+{{75658998175370504ull, 1563872672421483ull}},
+{{7439224828024117048ull, 1251098137937186ull}},
+{{4524062095354766632ull, 2001757020699498ull}},
+{{10997947305767633952ull, 1601405616559598ull}},
+{{16177055474097927808ull, 1281124493247678ull}},
+{{3747195870105222552ull, 2049799189196286ull}},
+{{17755151955051819336ull, 1639839351357028ull}},
+{{3136075119815724496ull, 1311871481085623ull}},
+{{1328371376963248876ull, 2098994369736997ull}},
+{{12130743545796330068ull, 1679195495789597ull}},
+{{2325897207153243408ull, 1343356396631678ull}},
+{{32086716703279132ull, 2149370234610685ull}},
+{{25669373362623304ull, 1719496187688548ull}},
+{{7399233128173919288ull, 1375596950150838ull}},
+{{8149424190336360540ull, 2200955120241341ull}},
+{{2830190537527178108ull, 1760764096193073ull}},
+{{9642850059505563132ull, 1408611276954458ull}},
+{{15092977677088271152ull, 1126889021563566ull}},
+{{16770066653857413200ull, 1803022434501706ull}},
+{{9726704508344020236ull, 1442417947601365ull}},
+{{7781363606675216188ull, 1153934358081092ull}},
+{{16139530585422256224ull, 1846294972929747ull}},
+{{5532926838853984332ull, 1477035978343798ull}},
+{{11805039100567008112ull, 1181628782675038ull}},
+{{15198713746165302660ull, 1890606052280061ull}},
+{{8469622182190331804ull, 1512484841824049ull}},
+{{10465046560494175764ull, 1209987873459239ull}},
+{{5676028052564950256ull, 1935980597534783ull}},
+{{11919520071535780852ull, 1548784478027826ull}},
+{{5846267242486714356ull, 1239027582422261ull}},
+{{1975329958494922328ull, 1982444131875618ull}},
+{{8958961596279758508ull, 1585955305500494ull}},
+{{10856518091765717128ull, 1268764244400395ull}},
+{{17370428946825147408ull, 2030022791040632ull}},
+{{6517645527976297280ull, 1624018232832506ull}},
+{{1524767607639127500ull, 1299214586266005ull}},
+{{2439628172222604000ull, 2078743338025608ull}},
+{{9330400167261903848ull, 1662994670420486ull}},
+{{3774971319067612752ull, 1330395736336389ull}},
+{{13418651739992001052ull, 2128633178138222ull}},
+{{3356223762509780196ull, 1702906542510578ull}},
+{{10063676639491644804ull, 1362325234008462ull}},
+{{1344487364218990392ull, 2179720374413540ull}},
+{{1075589891375192312ull, 1743776299530832ull}},
+{{11928518357325884820ull, 1395021039624665ull}},
+{{638885298011864096ull, 2232033663399465ull}},
+{{511108238409491276ull, 1785626930719572ull}},
+{{11476933034953323992ull, 1428501544575657ull}},
+{{1802848798478838548ull, 1142801235660526ull}},
+{{13952604521791872644ull, 1828481977056841ull}},
+{{7472734802691587792ull, 1462785581645473ull}},
+{{13356885471637090880ull, 1170228465316378ull}},
+{{17681667939877435084ull, 1872365544506205ull}},
+{{14145334351901948068ull, 1497892435604964ull}},
+{{15005616296263468776ull, 1198313948483971ull}},
+{{16630288444537729400ull, 1917302317574354ull}},
+{{16993579570372093840ull, 1533841854059483ull}},
+{{2526817212071944104ull, 1227073483247587ull}},
+{{7732256354057020888ull, 1963317573196139ull}},
+{{9875153897987527036ull, 1570654058556911ull}},
+{{4210774303648111304ull, 1256523246845529ull}},
+{{14115936515320798732ull, 2010437194952846ull}},
+{{7603400397514728664ull, 1608349755962277ull}},
+{{17150766762237513900ull, 1286679804769821ull}},
+{{1615785116386649980ull, 2058687687631715ull}},
+{{1292628093109319984ull, 1646950150105372ull}},
+{{12102148918713186956ull, 1317560120084297ull}},
+{{4606043010973457836ull, 2108096192134876ull}},
+{{18442229667746407560ull, 1686476953707900ull}},
+{{14753783734197126048ull, 1349181562966320ull}},
+{{5159309901005850064ull, 2158690500746113ull}},
+{{11506145550288500696ull, 1726952400596890ull}},
+{{9204916440230800556ull, 1381561920477512ull}},
+{{18417215119111191216ull, 2210499072764019ull}},
+{{18423120910030863296ull, 1768399258211215ull}},
+{{14738496728024690636ull, 1414719406568972ull}},
+{{4412099752935931864ull, 1131775525255178ull}},
+{{3370010789955580656ull, 1810840840408285ull}},
+{{2696008631964464524ull, 1448672672326628ull}},
+{{9535504535055392268ull, 1158938137861302ull}},
+{{499411997120986336ull, 1854301020578084ull}},
+{{4088878412438699392ull, 1483440816462467ull}},
+{{14339149174176690480ull, 1186752653169973ull}},
+{{806545790231242832ull, 1898804245071958ull}},
+{{8023934261668814912ull, 1519043396057566ull}},
+{{2729798594593141604ull, 1215234716846053ull}},
+{{678328936607116248ull, 1944375546953685ull}},
+{{542663149285692996ull, 1555500437562948ull}},
+{{7812828148912375044ull, 1244400350050358ull}},
+{{8811176223517889748ull, 1991040560080573ull}},
+{{14427638608298132444ull, 1592832448064458ull}},
+{{474064442412774984ull, 1274265958451567ull}},
+{{4447851922602350300ull, 2038825533522507ull}},
+{{14626327982307611212ull, 1631060426818005ull}},
+{{11701062385846088968ull, 1304848341454404ull}},
+{{7653653373128011380ull, 2087757346327047ull}},
+{{17190969142728140072ull, 1670205877061637ull}},
+{{6374077684698691412ull, 1336164701649310ull}},
+{{10198524295517906260ull, 2137863522638896ull}},
+{{4469470621672414684ull, 1710290818111117ull}},
+{{14643622941563662716ull, 1368232654488893ull}},
+{{1293703818050398408ull, 2189172247182230ull}},
+{{1034963054440318728ull, 1751337797745784ull}},
+{{4517319258294165304ull, 1401070238196627ull}},
+{{10917059628012574812ull, 2241712381114603ull}},
+{{16112345331893880496ull, 1793369904891682ull}},
+{{5511178636031283748ull, 1434695923913346ull}},
+{{719594094083116676ull, 1147756739130677ull}},
+{{4840699365274897004ull, 1836410782609083ull}},
+{{11251257121703738252ull, 1469128626087266ull}},
+{{5311656882621080276ull, 1175302900869813ull}},
+{{4809302197451818120ull, 1880484641391701ull}},
+{{158092943219544172ull, 1504387713113361ull}},
+{{14883869613543276632ull, 1203510170490688ull}},
+{{1678098493217780672ull, 1925616272785102ull}},
+{{12410525238799955508ull, 1540493018228081ull}},
+{{6239071376298054080ull, 1232394414582465ull}},
+{{9982514202076886532ull, 1971831063331944ull}},
+{{11675360176403419548ull, 1577464850665555ull}},
+{{9340288141122735640ull, 1261971880532444ull}},
+{{3876414581570646052ull, 2019155008851911ull}},
+{{17858526924224158136ull, 1615324007081528ull}},
+{{3218775095153595536ull, 1292259205665223ull}},
+{{1460691337503842540ull, 2067614729064357ull}},
+{{12236599514228805000ull, 1654091783251485ull}},
+{{9789279611383044000ull, 1323273426601188ull}},
+{{11973498563470960076ull, 2117237482561901ull}},
+{{5889450036034857740ull, 1693789986049521ull}},
+{{1022211214085975868ull, 1355031988839617ull}},
+{{5324886757279471712ull, 2168051182143387ull}},
+{{15327955850049308340ull, 1734440945714709ull}},
+{{15951713494781356992ull, 1387552756571767ull}},
+{{10765346332682529896ull, 2220084410514828ull}},
+{{15990974695629844564ull, 1776067528411862ull}},
+{{5414082127020055004ull, 1420854022729490ull}},
+{{4331265701616044004ull, 1136683218183592ull}},
+{{10619373937327580728ull, 1818693149093747ull}},
+{{1116801520378243936ull, 1454954519274998ull}},
+{{8272138845786415796ull, 1163963615419998ull}},
+{{9546073338516354952ull, 1862341784671997ull}},
+{{258161041329263312ull, 1489873427737598ull}},
+{{7585226462547231296ull, 1191898742190078ull}},
+{{8447013525333659752ull, 1907037987504125ull}},
+{{6757610820266927804ull, 1525630390003300ull}},
+{{5406088656213542240ull, 1220504312002640ull}},
+{{8649741849941667588ull, 1952806899204224ull}},
+{{10609142294695244392ull, 1562245519363379ull}},
+{{12176662650498105836ull, 1249796415490703ull}},
+{{15793311426055059016ull, 1999674264785125ull}},
+{{12634649140844047212ull, 1599739411828100ull}},
+{{10107719312675237772ull, 1279791529462480ull}},
+{{16172350900280380432ull, 2047666447139968ull}},
+{{1869834275998573376ull, 1638133157711975ull}},
+{{1495867420798858700ull, 1310506526169580ull}},
+{{2393387873278173924ull, 2096810441871328ull}},
+{{9293407928106359784ull, 1677448353497062ull}},
+{{56028713001267180ull, 1341958682797650ull}},
+{{89645940802027492ull, 2147133892476240ull}},
+{{71716752641621992ull, 1717707113980992ull}},
+{{11125419846339028564ull, 1374165691184793ull}},
+{{14111322939400535380ull, 2198665105895669ull}},
+{{14978407166262338624ull, 1758932084716535ull}},
+{{11982725733009870900ull, 1407145667773228ull}},
+{{15483012358073883120ull, 2251433068437165ull}},
+{{12386409886459106496ull, 1801146454749732ull}},
+{{2530430279683464548ull, 1440917163799786ull}},
+{{16781739482714412932ull, 1152733731039828ull}},
+{{4714690283891598752ull, 1844373969663726ull}},
+{{82403412371368676ull, 1475499175730981ull}},
+{{14823317988864736236ull, 1180399340584784ull}},
+{{12649262337957847008ull, 1888638944935655ull}},
+{{10119409870366277604ull, 1510911155948524ull}},
+{{11784876711034932408ull, 1208728924758819ull}},
+{{7787756293430160884ull, 1933966279614111ull}},
+{{2540856220002218384ull, 1547173023691289ull}},
+{{5722033790743685028ull, 1237738418953031ull}},
+{{1776556435706075400ull, 1980381470324850ull}},
+{{1421245148564860320ull, 1584305176259880ull}},
+{{1136996118851888256ull, 1267444141007904ull}},
+{{9197891419646841856ull, 2027910625612646ull}},
+{{3668964320975563164ull, 1622328500490117ull}},
+{{14003217901006181500ull, 1297862800392093ull}},
+{{269055753158428460ull, 2076580480627350ull}},
+{{215244602526742768ull, 1661264384501880ull}},
+{{172195682021394212ull, 1329011507601504ull}},
+{{7654210720718051388ull, 2126418412162406ull}},
+{{2434019761832530788ull, 1701134729729925ull}},
+{{1947215809466024632ull, 1360907783783940ull}},
+{{3115545295145639408ull, 2177452454054304ull}},
+{{6181785050858421852ull, 1741961963243443ull}},
+{{12324125670170558128ull, 1393569570594754ull}},
+{{8650554628047162032ull, 2229711312951607ull}},
+{{17988490146663460596ull, 1783769050361285ull}},
+{{14390792117330768476ull, 1427015240289028ull}},
+{{444587249638883812ull, 1141612192231223ull}},
+{{15468734858389855392ull, 1826579507569956ull}},
+{{8685639071969973992ull, 1461263606055965ull}},
+{{6948511257575979192ull, 1169010884844772ull}},
+{{14806966826863477032ull, 1870417415751635ull}},
+{{11845573461490781624ull, 1496333932601308ull}},
+{{16855156398676445944ull, 1197067146081046ull}},
+{{1142808534688941252ull, 1915307433729675ull}},
+{{914246827751153000ull, 1532245946983740ull}},
+{{731397462200922400ull, 1225796757586992ull}},
+{{4859584754263386164ull, 1961274812139187ull}},
+{{14955714247636439900ull, 1569019849711349ull}},
+{{15653920212851062244ull, 1255215879769079ull}},
+{{13978225896335968620ull, 2008345407630527ull}},
+{{3803883087584954252ull, 1606676326104422ull}},
+{{14111152914293694368ull, 1285341060883537ull}},
+{{7820449403902269700ull, 2056545697413660ull}},
+{{6256359523121815760ull, 1645236557930928ull}},
+{{12383785247981273252ull, 1316189246344742ull}},
+{{5056661137802395912ull, 2105902794151588ull}},
+{{11424026539725737376ull, 1684722235321270ull}},
+{{9139221231780589900ull, 1347777788257016ull}},
+{{7244056341365123196ull, 2156444461211226ull}},
+{{2105896258350188232ull, 1725155568968981ull}},
+{{16442112265647791880ull, 1380124455175184ull}},
+{{15239333180810736040ull, 2208199128280295ull}},
+{{12191466544648588832ull, 1766559302624236ull}},
+{{6063824420976960740ull, 1413247442099389ull}},
+{{8540408351523478916ull, 1130597953679511ull}},
+{{6285955732953745620ull, 1808956725887218ull}},
+{{12407462215846817140ull, 1447165380709774ull}},
+{{13615318587419364036ull, 1157732304567819ull}},
+{{10716463295645251488ull, 1852371687308511ull}},
+{{4883821821774290868ull, 1481897349846809ull}},
+{{7596406272161343016ull, 1185517879877447ull}},
+{{15843598850200059152ull, 1896828607803915ull}},
+{{12674879080160047320ull, 1517462886243132ull}},
+{{2761205634644217212ull, 1213970308994506ull}},
+{{15485975459656478508ull, 1942352494391209ull}},
+{{16078129182467093128ull, 1553881995512967ull}},
+{{5483805716489853856ull, 1243105596410374ull}},
+{{16152786775867586816ull, 1988968954256598ull}},
+{{1854182976468338484ull, 1591175163405279ull}},
+{{5172695195916581108ull, 1272940130724223ull}},
+{{4586963498724619452ull, 2036704209158757ull}},
+{{14737617243205426532ull, 1629363367327005ull}},
+{{11790093794564341224ull, 1303490693861604ull}},
+{{7796103627077214992ull, 2085585110178567ull}},
+{{17304929345887502964ull, 1668468088142853ull}},
+{{2775897032484271400ull, 1334774470514283ull}},
+{{752086437232923920ull, 2135639152822853ull}},
+{{7980366779270159780ull, 1708511322258282ull}},
+{{17452339867641858792ull, 1366809057806625ull}},
+{{9476999714517422456ull, 2186894492490601ull}},
+{{3892250956872027640ull, 1749515593992481ull}},
+{{17871196024465263404ull, 1399612475193984ull}},
+{{17525867194918690480ull, 2239379960310375ull}},
+{{14020693755934952384ull, 1791503968248300ull}},
+{{11216555004747961908ull, 1433203174598640ull}},
+{{8973244003798369524ull, 1146562539678912ull}},
+{{18046539220819301564ull, 1834500063486259ull}},
+{{18126580191397351572ull, 1467600050789007ull}},
+{{7122566523634060612ull, 1174080040631206ull}},
+{{4017408808330676336ull, 1878528065009930ull}},
+{{3213927046664541068ull, 1502822452007944ull}},
+{{6260490452073543176ull, 1202257961606355ull}},
+{{10016784723317669084ull, 1923612738570168ull}},
+{{15392125408137955912ull, 1538890190856134ull}},
+{{16003049141252275052ull, 1231112152684907ull}},
+{{10847483367035998792ull, 1969779444295852ull}},
+{{1299289064144978388ull, 1575823555436682ull}},
+{{12107477695541713680ull, 1260658844349345ull}},
+{{925220239157190272ull, 2017054150958953ull}},
+{{8118873820809572864ull, 1613643320767162ull}},
+{{17563145500873389260ull, 1290914656613729ull}},
+{{17032986357171691848ull, 2065463450581967ull}},
+{{6247691456253532832ull, 1652370760465574ull}},
+{{8687501979744736588ull, 1321896608372459ull}},
+{{2831956723365847572ull, 2115034573395935ull}},
+{{2265565378692678056ull, 1692027658716748ull}},
+{{9191149932437963092ull, 1353622126973398ull}},
+{{11016491077158830624ull, 2165795403157437ull}},
+{{1434495232243243852ull, 1732636322525950ull}},
+{{1147596185794595084ull, 1386109058020760ull}},
+{{1836153897271352132ull, 2217774492833216ull}},
+{{16226318376784723000ull, 1774219594266572ull}},
+{{5602357071943957752ull, 1419375675413258ull}},
+{{11860583287038986848ull, 1135500540330606ull}},
+{{11598235629778558312ull, 1816800864528970ull}},
+{{9278588503822846648ull, 1453440691623176ull}},
+{{3733521988316366996ull, 1162752553298541ull}},
+{{17041681625531918164ull, 1860404085277665ull}},
+{{13633345300425534532ull, 1488323268222132ull}},
+{{3527978610856606976ull, 1190658614577706ull}},
+{{16712812221596302136ull, 1905053783324329ull}},
+{{17059598592018952032ull, 1524043026659463ull}},
+{{2579632429389430656ull, 1219234421327571ull}},
+{{15195458331248820016ull, 1950775074124113ull}},
+{{1088320220773325044ull, 1560620059299291ull}},
+{{15628051435586301328ull, 1248496047439432ull}},
+{{10247487037970440832ull, 1997593675903092ull}},
+{{819292000892532020ull, 1598074940722474ull}},
+{{4344782415455935940ull, 1278459952577979ull}},
+{{14330349494213318148ull, 2045535924124766ull}},
+{{7774930780628744196ull, 1636428739299813ull}},
+{{13598642253986816004ull, 1309142991439850ull}},
+{{3311083532669353988ull, 2094628786303761ull}},
+{{17406262085103124484ull, 1675703029043008ull}},
+{{2856963223856768616ull, 1340562423234407ull}},
+{{8260489972912740112ull, 2144899877175051ull}},
+{{2919043163588281764ull, 1715919901740041ull}},
+{{17092629789838266704ull, 1372735921392032ull}},
+{{12590812404773585436ull, 2196377474227252ull}},
+{{2693952294335047704ull, 1757101979381802ull}},
+{{13223208279693769132ull, 1405681583505441ull}},
+{{13778435618026209964ull, 2249090533608706ull}},
+{{7333399679679057648ull, 1799272426886965ull}},
+{{5866719743743246116ull, 1439417941509572ull}},
+{{15761422239220327864ull, 1151534353207657ull}},
+{{10460880323784883292ull, 1842454965132252ull}},
+{{990006629544085984ull, 1473963972105802ull}},
+{{11860051747860999756ull, 1179171177684641ull}},
+{{11597385167093778968ull, 1886673884295426ull}},
+{{5588559318933112848ull, 1509339107436341ull}},
+{{781498640404579956ull, 1207471285949073ull}},
+{{16007793083614969224ull, 1931954057518516ull}},
+{{9116885652150065056ull, 1545563246014813ull}},
+{{14672206151203872692ull, 1236450596811850ull}},
+{{5028785768216644688ull, 1978320954898961ull}},
+{{333679799831405428ull, 1582656763919169ull}},
+{{3956292654607034664ull, 1266125411135335ull}},
+{{6330068247371255464ull, 2025800657816536ull}},
+{{1374705783155094048ull, 1620640526253229ull}},
+{{4789113441265985564ull, 1296512421002583ull}},
+{{3973232691283666576ull, 2074419873604133ull}},
+{{10557283782510753908ull, 1659535898883306ull}},
+{{4756478211266692804ull, 1327628719106645ull}},
+{{7610365138026708484ull, 2124205950570632ull}},
+{{17156338554647097756ull, 1699364760456505ull}},
+{{13725070843717678204ull, 1359491808365204ull}},
+{{10892066905722554160ull, 2175186893384327ull}},
+{{1334955895094222680ull, 1740149514707462ull}},
+{{12136011160301109116ull, 1392119611765969ull}},
+{{8349571412256043616ull, 2227391378825551ull}},
+{{2990308315062924568ull, 1781913103060441ull}},
+{{17149641911017980948ull, 1425530482448352ull}},
+{{6341015899330564112ull, 1140424385958682ull}},
+{{13834974253670812900ull, 1824679017533891ull}},
+{{7378630588194739996ull, 1459743214027113ull}},
+{{13281602100039612644ull, 1167794571221690ull}},
+{{2803819286353828616ull, 1868471313954705ull}},
+{{2243055429083062892ull, 1494777051163764ull}},
+{{5483793158008360636ull, 1195821640931011ull}},
+{{1395371423329556372ull, 1913314625489618ull}},
+{{8494994768147465744ull, 1530651700391694ull}},
+{{10485344629259882920ull, 1224521360313355ull}},
+{{16776551406815812672ull, 1959234176501368ull}},
+{{2353194681226919168ull, 1567387341201095ull}},
+{{1882555744981535332ull, 1253909872960876ull}},
+{{14080135636196187504ull, 2006255796737401ull}},
+{{7574759694215039680ull, 1605004637389921ull}},
+{{2370458940630121420ull, 1284003709911937ull}},
+{{7482083119750104596ull, 2054405935859099ull}},
+{{9675015310541994000ull, 1643524748687279ull}},
+{{11429361063175505524ull, 1314819798949823ull}},
+{{14597628886338898516ull, 2103711678319717ull}},
+{{4299405479587298164ull, 1682969342655774ull}},
+{{7128873198411748856ull, 1346375474124619ull}},
+{{338150673233067200ull, 2154200758599391ull}},
+{{15027915797554095052ull, 1723360606879512ull}},
+{{4643635008559455396ull, 1378688485503610ull}},
+{{7429816013695128632ull, 2205901576805776ull}},
+{{2254503996214192584ull, 1764721261444621ull}},
+{{16560998455938995360ull, 1411777009155696ull}},
+{{9559449950009285964ull, 1129421607324557ull}},
+{{537724661047216248ull, 1807074571719292ull}},
+{{11498226173063503968ull, 1445659657375433ull}},
+{{16577278567934623820ull, 1156527725900346ull}},
+{{698204005502025852ull, 1850444361440555ull}},
+{{558563204401620680ull, 1480355489152444ull}},
+{{4136199378263206868ull, 1184284391321955ull}},
+{{6617919005221130988ull, 1894855026115128ull}},
+{{12673032833660725436ull, 1515884020892102ull}},
+{{2759728637444759704ull, 1212707216713682ull}},
+{{8104914634653525848ull, 1940331546741891ull}},
+{{2794582892980910356ull, 1552265237393513ull}},
+{{9614363943868548932ull, 1241812189914810ull}},
+{{15382982310189678292ull, 1986899503863696ull}},
+{{8617037033409832308ull, 1589519603090957ull}},
+{{17961676070953596816ull, 1271615682472765ull}},
+{{10291937639816203292ull, 2034585091956425ull}},
+{{8233550111852962632ull, 1627668073565140ull}},
+{{6586840089482370104ull, 1302134458852112ull}},
+{{14228292957913702492ull, 2083415134163379ull}},
+{{15071983181072872316ull, 1666732107330703ull}},
+{{989540100632566884ull, 1333385685864563ull}},
+{{16340659419979748308ull, 2133417097383300ull}},
+{{13072527535983798648ull, 1706733677906640ull}},
+{{10458022028787038916ull, 1365386942325312ull}},
+{{1975439987091620976ull, 2184619107720500ull}},
+{{1580351989673296780ull, 1747695286176400ull}},
+{{1264281591738637424ull, 1398156228941120ull}},
+{{2022850546781819880ull, 2237049966305792ull}},
+{{12686326881651186872ull, 1789639973044633ull}},
+{{17527759134804770144ull, 1431711978435706ull}},
+{{10332858493101905792ull, 1145369582748565ull}},
+{{16532573588963049268ull, 1832591332397704ull}},
+{{16915407685912349736ull, 1466073065918163ull}},
+{{2464279704504148820ull, 1172858452734531ull}},
+{{15010893971432369080ull, 1876573524375249ull}},
+{{15698063991887805588ull, 1501258819500199ull}},
+{{16247800008252154792ull, 1201007055600159ull}},
+{{14928433568977716700ull, 1921611288960255ull}},
+{{11942746855182173360ull, 1537289031168204ull}},
+{{13243546298887649012ull, 1229831224934563ull}},
+{{17500325263478328096ull, 1967729959895301ull}},
+{{10310911396040752152ull, 1574183967916241ull}},
+{{4559380302090691400ull, 1259347174332993ull}},
+{{3605659668603195916ull, 2014955478932789ull}},
+{{6573876549624467056ull, 1611964383146231ull}},
+{{1569752424957663320ull, 1289571506516985ull}},
+{{2511603879932261316ull, 2063314410427176ull}},
+{{16766678362913450344ull, 1650651528341740ull}},
+{{13413342690330760276ull, 1320521222673392ull}},
+{{6703953045561575148ull, 2112833956277428ull}},
+{{12741860065933080764ull, 1690267165021942ull}},
+{{2814790423262643964ull, 1352213732017554ull}},
+{{11882362306704050992ull, 2163541971228086ull}},
+{{5816541030621330468ull, 1730833576982469ull}},
+{{8342581639238974700ull, 1384666861585975ull}},
+{{13348130622782359520ull, 2215466978537560ull}},
+{{10678504498225887616ull, 1772373582830048ull}},
+{{15921501228064530736ull, 1417898866264038ull}},
+{{1669154538225893620ull, 1134319093011231ull}},
+{{13738693705387160764ull, 1814910548817969ull}},
+{{14680303779051638932ull, 1451928439054375ull}},
+{{11744243023241311148ull, 1161542751243500ull}},
+{{344044763476546220ull, 1858468401989601ull}},
+{{15032631069748878268ull, 1486774721591680ull}},
+{{12026104855799102612ull, 1189419777273344ull}},
+{{8173721325052833212ull, 1903071643637351ull}},
+{{2849628245300356248ull, 1522457314909881ull}},
+{{17037097855207926292ull, 1217965851927904ull}},
+{{16191310124106951096ull, 1948745363084647ull}},
+{{5574350469801740228ull, 1558996290467718ull}},
+{{11838178005325212828ull, 1247197032374174ull}},
+{{7873038364294609560ull, 1995515251798679ull}},
+{{9987779506177597972ull, 1596412201438943ull}},
+{{15368921234425899024ull, 1277129761151154ull}},
+{{13522227530855707468ull, 2043407617841847ull}},
+{{3439084395200745328ull, 1634726094273478ull}},
+{{10129965145644416908ull, 1307780875418782ull}},
+{{1450548974063425760ull, 2092449400670052ull}},
+{{12228485623476471576ull, 1673959520536041ull}},
+{{6093439684039266940ull, 1339167616428833ull}},
+{{6060154679720916780ull, 2142668186286133ull}},
+{{12226821373260554068ull, 1714134549028906ull}},
+{{6092108283866532932ull, 1371307639223125ull}},
+{{9747373254186452692ull, 2194092222757000ull}},
+{{7797898603349162152ull, 1755273778205600ull}},
+{{6238318882679329724ull, 1404219022564480ull}},
+{{9981310212286927556ull, 2246750436103168ull}},
+{{15363745799313362692ull, 1797400348882534ull}},
+{{15980345454192600476ull, 1437920279106027ull}},
+{{5405578733870259736ull, 1150336223284822ull}},
+{{12338274788934325900ull, 1840537957255715ull}},
+{{9870619831147460720ull, 1472430365804572ull}},
+{{517798235434147928ull, 1177944292643658ull}},
+{{15585872435662277980ull, 1884710868229852ull}},
+{{5090000319046001736ull, 1507768694583882ull}},
+{{15140046699462532360ull, 1206214955667105ull}},
+{{5777330645430500160ull, 1929943929067369ull}},
+{{8311213331086310452ull, 1543955143253895ull}},
+{{6648970664869048360ull, 1235164114603116ull}},
+{{3259655434306656732ull, 1976262583364986ull}},
+{{17365119606412966676ull, 1581010066691988ull}},
+{{2824049240904642372ull, 1264808053353591ull}},
+{{15586525229673158764ull, 2023692885365745ull}},
+{{12469220183738527012ull, 1618954308292596ull}},
+{{6286027332248911284ull, 1295163446634077ull}},
+{{13746992546340168380ull, 2072261514614523ull}},
+{{18376291666555955352ull, 1657809211691618ull}},
+{{3632986889019033312ull, 1326247369353295ull}},
+{{5812779022430453300ull, 2121995790965272ull}},
+{{15718269662170093608ull, 1697596632772217ull}},
+{{5195918100252254240ull, 1358077306217774ull}},
+{{15692166589887427432ull, 2172923689948438ull}},
+{{1485686827684210976ull, 1738338951958751ull}},
+{{15945944721115010072ull, 1390671161567000ull}},
+{{7066767480074464500ull, 2225073858507201ull}},
+{{1964065169317661276ull, 1780059086805761ull}},
+{{16328647394421770312ull, 1424047269444608ull}},
+{{1994871471311685280ull, 1139237815555687ull}},
+{{6881143168840606776ull, 1822780504889099ull}},
+{{9194263349814395744ull, 1458224403911279ull}},
+{{11044759494593426916ull, 1166579523129023ull}},
+{{13982266376607572744ull, 1866527237006437ull}},
+{{3807115471802237548ull, 1493221789605150ull}},
+{{3045692377441790040ull, 1194577431684120ull}},
+{{4873107803906864064ull, 1911323890694592ull}},
+{{14966532687351222220ull, 1529059112555673ull}},
+{{905179705655246804ull, 1223247290044539ull}},
+{{8826985158532215536ull, 1957195664071262ull}},
+{{18129634571051503400ull, 1565756531257009ull}},
+{{18193056471583113040ull, 1252605225005607ull}},
+{{14351495095565339576ull, 2004168360008972ull}},
+{{4102498446968451012ull, 1603334688007178ull}},
+{{10660696387058581456ull, 1282667750405742ull}},
+{{2299718960326089040ull, 2052268400649188ull}},
+{{9218472797744691876ull, 1641814720519350ull}},
+{{7374778238195753500ull, 1313451776415480ull}},
+{{11799645181113205604ull, 2101522842264768ull}},
+{{16818413774374385128ull, 1681218273811814ull}},
+{{17144079834241418424ull, 1344974619049451ull}},
+{{1605086031592897220ull, 2151959390479123ull}},
+{{8662766454758138424ull, 1721567512383298ull}},
+{{14308910793290331384ull, 1377254009906638ull}},
+{{758164380813068276ull, 2203606415850622ull}},
+{{11674577948876185588ull, 1762885132680497ull}},
+{{1960964729617127824ull, 1410308106144398ull}},
+{{8947469413177522908ull, 1128246484915518ull}},
+{{10626602246342126328ull, 1805194375864829ull}},
+{{12190630611815611384ull, 1444155500691863ull}},
+{{17131202118936309752ull, 1155324400553490ull}},
+{{8963179316588543992ull, 1848519040885585ull}},
+{{7170543453270835192ull, 1478815232708468ull}},
+{{13115132392100488800ull, 1183052186166774ull}},
+{{9916165383135051112ull, 1892883497866839ull}},
+{{11622281121249951212ull, 1514306798293471ull}},
+{{5608476082258050648ull, 1211445438634777ull}},
+{{12662910546354791360ull, 1938312701815643ull}},
+{{17509026066567653732ull, 1550650161452514ull}},
+{{17696569667996033308ull, 1240520129162011ull}},
+{{2489069765600281032ull, 1984832206659219ull}},
+{{5680604627222135148ull, 1587865765327375ull}},
+{{4544483701777708120ull, 1270292612261900ull}},
+{{7271173922844332992ull, 2032468179619040ull}},
+{{5816939138275466392ull, 1625974543695232ull}},
+{{15721597754846104084ull, 1300779634956185ull}},
+{{6707812334044214920ull, 2081247415929897ull}},
+{{16434296311461102904ull, 1664997932743917ull}},
+{{5768739419685061676ull, 1331998346195134ull}},
+{{16608680700979919332ull, 2131197353912214ull}},
+{{16976293375525845788ull, 1704957883129771ull}},
+{{9891685885678766308ull, 1363966306503817ull}},
+{{1069302158118384800ull, 2182346090406108ull}},
+{{8234139355978528484ull, 1745876872324886ull}},
+{{2897962670040912464ull, 1396701497859909ull}},
+{{12015437901549280592ull, 2234722396575854ull}},
+{{13301699135981334796ull, 1787777917260683ull}},
+{{18020056938268888480ull, 1430222333808546ull}},
+{{10726696735873200460ull, 1144177867046837ull}},
+{{2405319518429479448ull, 1830684587274940ull}},
+{{1924255614743583556ull, 1464547669819952ull}},
+{{12607450936020597816ull, 1171638135855961ull}},
+{{12793223868149135860ull, 1874621017369538ull}},
+{{17613276724003129332ull, 1499696813895630ull}},
+{{14090621379202503468ull, 1199757451116504ull}},
+{{11476947762498274576ull, 1919611921786407ull}},
+{{1802860580514799016ull, 1535689537429126ull}},
+{{16199683723379480504ull, 1228551629943300ull}},
+{{7472749883697617192ull, 1965682607909281ull}},
+{{2288851092216183432ull, 1572546086327425ull}},
+{{1831080873772946744ull, 1258036869061940ull}},
+{{2929729398036714792ull, 2012858990499104ull}},
+{{6033132333171282156ull, 1610287192399283ull}},
+{{12205203496020846372ull, 1288229753919426ull}},
+{{12149627964149533548ull, 2061167606271082ull}},
+{{2341004741835806192ull, 1648934085016866ull}},
+{{16630199052436286244ull, 1319147268013492ull}},
+{{11850923224930416700ull, 2110635628821588ull}},
+{{16859436209428154008ull, 1688508503057270ull}},
+{{13487548967542523204ull, 1350806802445816ull}},
+{{14201380718584216484ull, 2161290883913306ull}},
+{{7671755760125462864ull, 1729032707130645ull}},
+{{6137404608100370292ull, 1383226165704516ull}},
+{{2441149743476771820ull, 2213161865127226ull}},
+{{16710315053749058748ull, 1770529492101780ull}},
+{{13368252042999246996ull, 1416423593681424ull}},
+{{14383950449141307920ull, 1133138874945139ull}},
+{{11946274274400361704ull, 1813022199912223ull}},
+{{16935717049004110012ull, 1450417759929778ull}},
+{{2480527194977557040ull, 1160334207943823ull}},
+{{279494697222180940ull, 1856534732710117ull}},
+{{11291642202003475720ull, 1485227786168093ull}},
+{{16412011391086601224ull, 1188182228934474ull}},
+{{15191171781512830988ull, 1901091566295159ull}},
+{{15842286239952175112ull, 1520873253036127ull}},
+{{5295131362477919444ull, 1216698602428902ull}},
+{{12161558994706581432ull, 1946717763886243ull}},
+{{17107944825249085792ull, 1557374211108994ull}},
+{{17375704674941178956ull, 1245899368887195ull}},
+{{9354383406196334716ull, 1993438990219513ull}},
+{{14862204354440888420ull, 1594751192175610ull}},
+{{11889763483552710736ull, 1275800953740488ull}},
+{{15334272758942426856ull, 2041281525984781ull}},
+{{8578069392412031160ull, 1633025220787825ull}},
+{{6862455513929624928ull, 1306420176630260ull}},
+{{10979928822287399884ull, 2090272282608416ull}},
+{{5094594243088009584ull, 1672217826086733ull}},
+{{11454373023954228312ull, 1337774260869386ull}},
+{{10948299208842944656ull, 2140438817391018ull}},
+{{16137336996558176372ull, 1712351053912814ull}},
+{{16599218411988451420ull, 1369880843130251ull}},
+{{733307755988150012ull, 2191809349008403ull}},
+{{7965343834274340656ull, 1753447479206722ull}},
+{{17440321511645203492ull, 1402757983365377ull}},
+{{13147119159664684296ull, 2244412773384604ull}},
+{{14207044142473657760ull, 1795530218707683ull}},
+{{297588869753195240ull, 1436424174966147ull}},
+{{11306117540028287160ull, 1149139339972917ull}},
+{{3332392805077618164ull, 1838622943956668ull}},
+{{10044611873545915176ull, 1470898355165334ull}},
+{{11725038313578642464ull, 1176718684132267ull}},
+{{4002666042758186652ull, 1882749894611628ull}},
+{{10580830463690369968ull, 1506199915689302ull}},
+{{1085966741468475328ull, 1204959932551442ull}},
+{{5426895601091470848ull, 1927935892082307ull}},
+{{15409562925098907648ull, 1542348713665845ull}},
+{{12327650340079126116ull, 1233878970932676ull}},
+{{12345542914642781144ull, 1974206353492282ull}},
+{{2497736702230404268ull, 1579365082793826ull}},
+{{16755584620751964708ull, 1263492066235060ull}},
+{{8362191319493591916ull, 2021587305976097ull}},
+{{17757799499820604500ull, 1617269844780877ull}},
+{{6827541970372662956ull, 1293815875824702ull}},
+{{14613415967338171052ull, 2070105401319523ull}},
+{{622686329644805872ull, 1656084321055619ull}},
+{{4187497878457755020ull, 1324867456844495ull}},
+{{6699996605532408032ull, 2119787930951192ull}},
+{{16428043728651657396ull, 1695830344760953ull}},
+{{2074388538695594948ull, 1356664275808763ull}},
+{{18076416920880593208ull, 2170662841294020ull}},
+{{14461133536704474564ull, 1736530273035216ull}},
+{{7879558014621669328ull, 1389224218428173ull}},
+{{8917944008652760604ull, 2222758749485077ull}},
+{{18202401651147939452ull, 1778206999588061ull}},
+{{10872572506176441240ull, 1422565599670449ull}},
+{{12387406819683063312ull, 1138052479736359ull}},
+{{8751804467267170332ull, 1820883967578175ull}},
+{{7001443573813736268ull, 1456707174062540ull}},
+{{5601154859050989012ull, 1165365739250032ull}},
+{{12651196589223492744ull, 1864585182800051ull}},
+{{6431608456636883872ull, 1491668146240041ull}},
+{{1455937950567596776ull, 1193334516992033ull}},
+{{17086895979875796132ull, 1909335227187252ull}},
+{{6290819154416816260ull, 1527468181749802ull}},
+{{16100701767759183976ull, 1221974545399841ull}},
+{{18382425198930873716ull, 1955159272639746ull}},
+{{11016591344402788652ull, 1564127418111797ull}},
+{{1434575446038410272ull, 1251301934489438ull}},
+{{17052715972629097732ull, 2002083095183100ull}},
+{{13642172778103278184ull, 1601666476146480ull}},
+{{10913738222482622548ull, 1281333180917184ull}},
+{{6393934711746465108ull, 2050133089467495ull}},
+{{5115147769397172084ull, 1640106471573996ull}},
+{{402769400775827344ull, 1312085177259197ull}},
+{{4333779855983234076ull, 2099336283614715ull}},
+{{3467023884786587260ull, 1679469026891772ull}},
+{{13841665552055000776ull, 1343575221513417ull}},
+{{7389269624320359952ull, 2149720354421468ull}},
+{{13290113328940108608ull, 1719776283537174ull}},
+{{14321439477893997208ull, 1375821026829739ull}},
+{{11846256720404664568ull, 2201313642927583ull}},
+{{16855703005807552300ull, 1761050914342066ull}},
+{{9795213589904131516ull, 1408840731473653ull}},
+{{15214868501407125860ull, 1127072585178922ull}},
+{{9586394343283760084ull, 1803316136286276ull}},
+{{3979766659885097744ull, 1442652909029021ull}},
+{{17941208586875719488ull, 1154122327223216ull}},
+{{2880492035807778916ull, 1846595723557147ull}},
+{{13372440072871954104ull, 1477276578845717ull}},
+{{3319254428813742636ull, 1181821263076574ull}},
+{{12689504715585808864ull, 1890914020922518ull}},
+{{17530301401952467736ull, 1512731216738014ull}},
+{{17713589936303884512ull, 1210184973390411ull}},
+{{2516302194892842960ull, 1936295957424659ull}},
+{{5702390570656184688ull, 1549036765939727ull}},
+{{15629958900750678720ull, 1239229412751781ull}},
+{{17629236611717265308ull, 1982767060402850ull}},
+{{14103389289373812248ull, 1586213648322280ull}},
+{{11282711431499049796ull, 1268970918657824ull}},
+{{6984291846172748708ull, 2030353469852519ull}},
+{{9276782291680109288ull, 1624282775882015ull}},
+{{7421425833344087432ull, 1299426220705612ull}},
+{{15563630148092450212ull, 2079081953128979ull}},
+{{16140252933215870492ull, 1663265562503183ull}},
+{{1844155902346965424ull, 1330612450002547ull}},
+{{6639998258497055004ull, 2128979920004075ull}},
+{{5311998606797644004ull, 1703183936003260ull}},
+{{4249598885438115200ull, 1362547148802608ull}},
+{{3110009401959074000ull, 2180075438084173ull}},
+{{9866705151051079848ull, 1744060350467338ull}},
+{{15272061750324684524ull, 1395248280373870ull}},
+{{5988554726809943620ull, 2232397248598193ull}},
+{{12169541410931775544ull, 1785917798878554ull}},
+{{13424981943487330756ull, 1428734239102843ull}},
+{{18118683184273685252ull, 1142987391282274ull}},
+{{17921846650612165436ull, 1828779826051639ull}},
+{{18026826135231642672ull, 1463023860841311ull}},
+{{10732112093443403812ull, 1170419088673049ull}},
+{{6103332905283715132ull, 1872670541876879ull}},
+{{8572015138968882428ull, 1498136433501503ull}},
+{{14236309740658926588ull, 1198509146801202ull}},
+{{8020700326086641252ull, 1917614634881924ull}},
+{{10105909075611223324ull, 1534091707905539ull}},
+{{11774076075230888980ull, 1227273366324431ull}},
+{{11459824090885601724ull, 1963637386119090ull}},
+{{9167859272708481380ull, 1570909908895272ull}},
+{{18402333862392516072ull, 1256727927116217ull}},
+{{14686338920860384424ull, 2010764683385948ull}},
+{{681024692462576572ull, 1608611746708759ull}},
+{{4234168568711971580ull, 1286889397367007ull}},
+{{10464018524681064852ull, 2059023035787211ull}},
+{{4681866005002941556ull, 1647218428629769ull}},
+{{7434841618744263568ull, 1317774742903815ull}},
+{{11895746589990821712ull, 2108439588646104ull}},
+{{13205946086734567692ull, 1686751670916883ull}},
+{{17943454498871474800ull, 1349401336733506ull}},
+{{2884085495000987416ull, 2159042138773611ull}},
+{{17064663654968431228ull, 1727233711018888ull}},
+{{2583684479749014012ull, 1381786968815111ull}},
+{{15201941611824153388ull, 2210859150104177ull}},
+{{4782855659975502064ull, 1768687320083342ull}},
+{{14894330972206132620ull, 1414949856066673ull}},
+{{847418333539175128ull, 1131959884853339ull}},
+{{8734566963146500848ull, 1811135815765342ull}},
+{{18055700014742931648ull, 1448908652612273ull}},
+{{3376513567568614348ull, 1159126922089819ull}},
+{{12781119337593603608ull, 1854603075343710ull}},
+{{10224895470074882884ull, 1483682460274968ull}},
+{{15558614005543726952ull, 1186945968219974ull}},
+{{13825735964644232156ull, 1899113549151959ull}},
+{{14749937586457296048ull, 1519290839321567ull}},
+{{4421252439682016192ull, 1215432671457254ull}},
+{{14452701532975046556ull, 1944692274331606ull}},
+{{7872812411638126920ull, 1555753819465285ull}},
+{{6298249929310501536ull, 1244603055572228ull}},
+{{6387851072154892136ull, 1991364888915565ull}},
+{{5110280857723913708ull, 1593091911132452ull}},
+{{15156271130404861936ull, 1274473528905961ull}},
+{{16871336179163958452ull, 2039157646249538ull}},
+{{2429022499105435792ull, 1631326116999631ull}},
+{{16700613258251989924ull, 1305060893599704ull}},
+{{15652934768977452912ull, 2088097429759527ull}},
+{{5143650185698141684ull, 1670477943807622ull}},
+{{15182966592784244316ull, 1336382355046097ull}},
+{{9535351289487149612ull, 2138211768073756ull}},
+{{3938932216847809368ull, 1710569414459005ull}},
+{{3151145773478247492ull, 1368455531567204ull}},
+{{12420530867049016636ull, 2189528850507526ull}},
+{{6247075878897302984ull, 1751623080406021ull}},
+{{1308311888375932064ull, 1401298464324817ull}},
+{{5782647836143401628ull, 2242077542919707ull}},
+{{15694164713140452272ull, 1793662034335765ull}},
+{{12555331770512361816ull, 1434929627468612ull}},
+{{2665567786926068808ull, 1147943701974890ull}},
+{{4264908459081710092ull, 1836709923159824ull}},
+{{7101275582007278396ull, 1469367938527859ull}},
+{{9370369280347733040ull, 1175494350822287ull}},
+{{235195589588731572ull, 1880790961315660ull}},
+{{188156471670985256ull, 1504632769052528ull}},
+{{7529222806820608852ull, 1203706215242022ull}},
+{{15736105305654884488ull, 1925929944387235ull}},
+{{12588884244523907588ull, 1540743955509788ull}},
+{{17449805025102946716ull, 1232595164407830ull}},
+{{9472943966455163132ull, 1972152263052529ull}},
+{{11267703987906040828ull, 1577721810442023ull}},
+{{16392860819808653308ull, 1262177448353618ull}},
+{{4092484423242383356ull, 2019483917365790ull}},
+{{3273987538593906684ull, 1615587133892632ull}},
+{{13687236475100856316ull, 1292469707114105ull}},
+{{3452834286451818492ull, 2067951531382569ull}},
+{{6451616243903365116ull, 1654361225106055ull}},
+{{5161292995122692092ull, 1323488980084844ull}},
+{{15636766421680127996ull, 2117582368135750ull}},
+{{12509413137344102396ull, 1694065894508600ull}},
+{{10007530509875281916ull, 1355252715606880ull}},
+{{16012048815800451068ull, 2168404344971008ull}},
+{{1741592608414629884ull, 1734723475976807ull}},
+{{12461320530957434876ull, 1387778780781445ull}},
+{{1491368775822344188ull, 2220446049250313ull}},
+{{8571792650141695996ull, 1776356839400250ull}},
+{{6857434120113356796ull, 1421085471520200ull}},
+{{5485947296090685436ull, 1136868377216160ull}},
+{{8777515673745096700ull, 1818989403545856ull}},
+{{3332663724254167036ull, 1455191522836685ull}},
+{{2666130979403333628ull, 1164153218269348ull}},
+{{576460752303423484ull, 1862645149230957ull}},
+{{11529215046068469756ull, 1490116119384765ull}},
+{{9223372036854775804ull, 1192092895507812ull}},
+{{18446744073709551612ull, 1907348632812499ull}},
+{{18446744073709551612ull, 1525878906249999ull}},
+{{18446744073709551612ull, 1220703124999999ull}},
+{{18446744073709551612ull, 1953124999999999ull}},
+{{18446744073709551612ull, 1562499999999999ull}},
+{{18446744073709551612ull, 1249999999999999ull}},
+{{18446744073709551612ull, 1999999999999999ull}},
+{{18446744073709551612ull, 1599999999999999ull}},
+{{18446744073709551612ull, 1279999999999999ull}},
+{{18446744073709551612ull, 2047999999999999ull}},
+{{18446744073709551612ull, 1638399999999999ull}},
+{{18446744073709551612ull, 1310719999999999ull}},
+{{18446744073709551612ull, 2097151999999999ull}},
+{{18446744073709551612ull, 1677721599999999ull}},
+{{18446744073709551612ull, 1342177279999999ull}},
+{{18446744073709551612ull, 2147483647999999ull}},
+{{18446744073709551612ull, 1717986918399999ull}},
+{{18446744073709551612ull, 1374389534719999ull}},
+{{18446744073709551612ull, 2199023255551999ull}},
+{{18446744073709551612ull, 1759218604441599ull}},
+{{18446744073709551612ull, 1407374883553279ull}},
+{{18446744073709551612ull, 1125899906842623ull}},
+{{7378697629483820644ull, 1801439850948198ull}},
+{{13281655733070877160ull, 1441151880758558ull}},
+{{18004022215940522376ull, 1152921504606846ull}},
+{{2980993842311463540ull, 1844674407370955ull}},
+{{2384795073849170832ull, 1475739525896764ull}},
+{{5597184873821246988ull, 1180591620717411ull}},
+{{1576798168630174536ull, 1888946593147858ull}},
+{{8640136164387960272ull, 1511157274518286ull}},
+{{3222760116768457896ull, 1208925819614629ull}},
+{{12535113816313353280ull, 1934281311383406ull}},
+{{6338742238308772300ull, 1547425049106725ull}},
+{{5070993790647017840ull, 1237940039285380ull}},
+{{8113590065035228544ull, 1980704062856608ull}},
+{{13869569681512003484ull, 1584563250285286ull}},
+{{7406306930467692464ull, 1267650600228229ull}},
+{{782044644522576972ull, 2028240960365167ull}},
+{{11693682159843792548ull, 1622592768292133ull}},
+{{16733643357358854684ull, 1298074214633706ull}},
+{{948387668580795232ull, 2076918743413931ull}},
+{{15516105393832277476ull, 1661534994731144ull}},
+{{16102233129807732304ull, 1329227995784915ull}},
+{{7316828933982820072ull, 2126764793255865ull}},
+{{5853463147186256060ull, 1701411834604692ull}},
+{{15750816961974735816ull, 1361129467683753ull}},
+{{3065214250708115368ull, 2177807148294006ull}},
+{{17209566659534133588ull, 1742245718635204ull}},
+{{17457002142369217192ull, 1393796574908163ull}},
+{{5795110539339285568ull, 2230074519853062ull}},
+{{15704134875697159424ull, 1784059615882449ull}},
+{{16252656715299637864ull, 1427247692705959ull}},
+{{16691474186981620612ull, 1141798154164767ull}},
+{{11948963440202951688ull, 1826877046663628ull}},
+{{16937868381646181996ull, 1461501637330902ull}},
+{{6171597075833124952ull, 1169201309864722ull}},
+{{13563904136074910244ull, 1870722095783555ull}},
+{{10851123308859928196ull, 1496577676626844ull}},
+{{12370247461829852880ull, 1197262141301475ull}},
+{{1345651865218212992ull, 1915619426082361ull}},
+{{15833916751142211688ull, 1532495540865888ull}},
+{{1599086956688038380ull, 1225996432692711ull}},
+{{13626585574926592376ull, 1961594292308337ull}},
+{{3522570830457453256ull, 1569275433846670ull}},
+{{2818056664365962604ull, 1255420347077336ull}},
+{{15576937107211271136ull, 2008672555323737ull}},
+{{5082852056285196264ull, 1606938044258990ull}},
+{{4066281645028157008ull, 1285550435407192ull}},
+{{10195399446786961540ull, 2056880696651507ull}},
+{{777621927945748584ull, 1645504557321206ull}},
+{{15379492801324240160ull, 1316403645856964ull}},
+{{13539142037893053288ull, 2106245833371143ull}},
+{{18210011259798263276ull, 1684996666696914ull}},
+{{18257357822580520944ull, 1347997333357531ull}},
+{{3386330812935461248ull, 2156795733372051ull}},
+{{17466459909316010292ull, 1725436586697640ull}},
+{{13973167927452808232ull, 1380349269358112ull}},
+{{7599673424956851880ull, 2208558830972980ull}},
+{{6079738739965481504ull, 1766847064778384ull}},
+{{8553139806714295528ull, 1413477651822707ull}},
+{{17910558289597167392ull, 1130782121458165ull}},
+{{10210149189645916208ull, 1809251394333065ull}},
+{{8168119351716732968ull, 1447401115466452ull}},
+{{17602541925599117344ull, 1157920892373161ull}},
+{{2338625377765215488ull, 1852673427797059ull}},
+{{5560249116954082712ull, 1482138742237647ull}},
+{{15516245737788997140ull, 1185710993790117ull}},
+{{10068597921494754132ull, 1897137590064188ull}},
+{{15433575966679623952ull, 1517710072051350ull}},
+{{12346860773343699160ull, 1214168057641080ull}},
+{{1308233163640367044ull, 1942668892225729ull}},
+{{4735935345654203956ull, 1554135113780583ull}},
+{{11167445906007183812ull, 1243308091024466ull}},
+{{10489215820127673452ull, 1989292945639146ull}},
+{{4702023841360228440ull, 1591434356511317ull}},
+{{14829665517313913720ull, 1273147485209053ull}},
+{{1591371939250800016ull, 2037035976334486ull}},
+{{16030492810368281304ull, 1629628781067588ull}},
+{{1756347804068894072ull, 1303703024854071ull}},
+{{13878202930735961488ull, 2085924839766513ull}},
+{{34515900363038220ull, 1668739871813211ull}},
+{{14785007979258071868ull, 1334991897450568ull}},
+{{1519919878361453052ull, 2135987035920910ull}},
+{{1215935902689162440ull, 1708789628736728ull}},
+{{8351446351635150600ull, 1367031702989382ull}},
+{{17051662977358151284ull, 2187250724783011ull}},
+{{9951981567144610704ull, 1749800579826409ull}},
+{{11650934068457598884ull, 1399840463861127ull}},
+{{3884099250564516924ull, 2239744742177804ull}},
+{{6796628215193523860ull, 1791795793742243ull}},
+{{12816000201638639736ull, 1433436634993794ull}},
+{{13942148976052822112ull, 1146749307995035ull}},
+{{3860694287974963764ull, 1834798892792057ull}},
+{{14156601874605701980ull, 1467839114233645ull}},
+{{11325281499684561584ull, 1174271291386916ull}},
+{{10741752770011477888ull, 1878834066219066ull}},
+{{4904053401267271988ull, 1503067252975253ull}},
+{{11301940350497638236ull, 1202453802380202ull}},
+{{3325709301828579884ull, 1923926083808324ull}},
+{{6349916256204774232ull, 1539140867046659ull}},
+{{8769281819705729708ull, 1231312693637327ull}},
+{{17720199726271077856ull, 1970100309819723ull}},
+{{3108113336791131316ull, 1576080247855779ull}},
+{{6175839484174815376ull, 1260864198284623ull}},
+{{6191994359937794280ull, 2017382717255397ull}},
+{{16021641932175966392ull, 1613906173804317ull}},
+{{5438615916256952468ull, 1291124939043454ull}},
+{{16080483095494944596ull, 2065799902469526ull}},
+{{9175037661654045352ull, 1652639921975621ull}},
+{{3650681314581325956ull, 1322111937580497ull}},
+{{9530438918072031856ull, 2115379100128795ull}},
+{{7624351134457625484ull, 1692303280103036ull}},
+{{2410132092824190064ull, 1353842624082429ull}},
+{{11234908978002524752ull, 2166148198531886ull}},
+{{5298578367660109476ull, 1732918558825509ull}},
+{{7928211508869997904ull, 1386334847060407ull}},
+{{16374487228933906972ull, 2218135755296651ull}},
+{{9410240968405215252ull, 1774508604237321ull}},
+{{3838843959982261880ull, 1419606883389857ull}},
+{{14139121612211540472ull, 1135685506711885ull}},
+{{4175850505828913140ull, 1817096810739017ull}},
+{{14408726848888861484ull, 1453677448591213ull}},
+{{458935034885358216ull, 1162941958872971ull}},
+{{11802342500042304116ull, 1860707134196753ull}},
+{{16820571629517663940ull, 1488565707357402ull}},
+{{6077759674130310504ull, 1190852565885922ull}},
+{{13413764293350407132ull, 1905364105417475ull}},
+{{10731011434680325704ull, 1524291284333980ull}},
+{{8584809147744260564ull, 1219433027467184ull}},
+{{2667648192165085932ull, 1951092843947495ull}},
+{{2134118553732068744ull, 1560874275157996ull}},
+{{16464690101953296288ull, 1248699420126396ull}},
+{{518062459931901800ull, 1997919072202235ull}},
+{{414449967945521440ull, 1598335257761788ull}},
+{{7710257603840237800ull, 1278668206209430ull}},
+{{12336412166144380480ull, 2045869129935088ull}},
+{{17247827362399325028ull, 1636695303948070ull}},
+{{13798261889919460024ull, 1309356243158456ull}},
+{{14698521394387315392ull, 2094969989053530ull}},
+{{11758817115509852312ull, 1675975991242824ull}},
+{{13096402507149792172ull, 1340780792994259ull}},
+{{9886197567213936508ull, 2145249268790815ull}},
+{{7908958053771149208ull, 1716199415032652ull}},
+{{17395212887242650336ull, 1372959532026121ull}},
+{{2006898916394868272ull, 2196735251241795ull}},
+{{1605519133115894620ull, 1757388200993436ull}},
+{{16041810565460356988ull, 1405910560794748ull}},
+{{3530804016285109240ull, 2249456897271598ull}},
+{{10203340842511908040ull, 1799565517817278ull}},
+{{15541370303493347076ull, 1439652414253822ull}},
+{{5054398613310857016ull, 1151721931403058ull}},
+{{4397688966555460904ull, 1842755090244893ull}},
+{{10896848802728189368ull, 1474204072195914ull}},
+{{12406827856924461816ull, 1179363257756731ull}},
+{{12472226941595318260ull, 1886981212410770ull}},
+{{9977781553276254608ull, 1509584969928616ull}},
+{{4292876427879093364ull, 1207667975942893ull}},
+{{3179253469864639060ull, 1932268761508629ull}},
+{{6232751590633621572ull, 1545815009206903ull}},
+{{12364898901990717904ull, 1236652007365522ull}},
+{{5026442984217507352ull, 1978643211784836ull}},
+{{331805572632095560ull, 1582914569427869ull}},
+{{3954793272847586768ull, 1266331655542295ull}},
+{{6327669236556138832ull, 2026130648867672ull}},
+{{16130181833470642036ull, 1620904519094137ull}},
+{{5525447837292692980ull, 1296723615275310ull}},
+{{8840716539668308772ull, 2074757784440496ull}},
+{{3383224416992736692ull, 1659806227552397ull}},
+{{13774625977819920324ull, 1327844982041917ull}},
+{{7282006305544231228ull, 2124551971267068ull}},
+{{13204302673919205628ull, 1699641577013654ull}},
+{{14252790953877274824ull, 1359713261610923ull}},
+{{668372637752177780ull, 2175541218577478ull}},
+{{7913395739685562872ull, 1740432974861982ull}},
+{{17398763035974181268ull, 1392346379889585ull}},
+{{9391276783849138412ull, 2227754207823337ull}},
+{{134323797595490084ull, 1782203366258670ull}},
+{{107459038076392064ull, 1425762693006936ull}},
+{{14843362489428754944ull, 1140610154405548ull}},
+{{1613287094634545972ull, 1824976247048878ull}},
+{{8669327305191457424ull, 1459980997639102ull}},
+{{18003508288378896908ull, 1167984798111281ull}},
+{{2980171558212862792ull, 1868775676978051ull}},
+{{17141532505537931528ull, 1495020541582440ull}},
+{{13713226004430345220ull, 1196016433265952ull}},
+{{7183766348120911064ull, 1913626293225524ull}},
+{{9436361893238639172ull, 1530901034580419ull}},
+{{11238438329332821660ull, 1224720827664335ull}},
+{{17981501326932514660ull, 1959553324262936ull}},
+{{10695852246804101404ull, 1567642659410349ull}},
+{{12246030612185191444ull, 1254114127528279ull}},
+{{8525602535270575344ull, 2006582604045247ull}},
+{{17888528472442191244ull, 1605266083236197ull}},
+{{6932125148469932348ull, 1284212866588958ull}},
+{{7402051422809981436ull, 2054740586542333ull}},
+{{13300338767731805796ull, 1643792469233866ull}},
+{{6950922199443534312ull, 1315033975387093ull}},
+{{7432126704367744576ull, 2104054360619349ull}},
+{{9635050178236105984ull, 1683243488495479ull}},
+{{11397388957330795112ull, 1346594790796383ull}},
+{{14546473516987361856ull, 2154551665274213ull}},
+{{569132369364158516ull, 1723641332219371ull}},
+{{15212701154458968104ull, 1378913065775496ull}},
+{{16961624217650528320ull, 2206260905240794ull}},
+{{17258648188862332980ull, 1765008724192635ull}},
+{{13806918551089866384ull, 1412006979354108ull}},
+{{18424232470355713752ull, 1129605583483286ull}},
+{{3653330249375769744ull, 1807368933573259ull}},
+{{6612013014242526116ull, 1445895146858607ull}},
+{{16357656855619751864ull, 1156716117486885ull}},
+{{7725506895282051364ull, 1850745787979017ull}},
+{{17248451960451372060ull, 1480596630383213ull}},
+{{2730715124135366680ull, 1184477304306571ull}},
+{{15437190642842317660ull, 1895163686890513ull}},
+{{1281706070048123156ull, 1516130949512411ull}},
+{{15782760115006139816ull, 1212904759609928ull}},
+{{3116323295558361772ull, 1940647615375886ull}},
+{{17250453895414330708ull, 1552518092300708ull}},
+{{2732316672105733596ull, 1242014473840567ull}},
+{{8061055490111084080ull, 1987223158144907ull}},
+{{17516890836314598232ull, 1589778526515925ull}},
+{{14013512669051678584ull, 1271822821212740ull}},
+{{3974876196773134124ull, 2034916513940385ull}},
+{{3179900957418507296ull, 1627933211152308ull}},
+{{9922618395418626484ull, 1302346568921846ull}},
+{{8497491803185981728ull, 2083754510274954ull}},
+{{10487342257290695708ull, 1667003608219963ull}},
+{{15768571435316377212ull, 1333602886575970ull}},
+{{6782970222796651924ull, 2133764618521553ull}},
+{{12805073807721142184ull, 1707011694817242ull}},
+{{2865361416693093100ull, 1365609355853794ull}},
+{{11963275896192769608ull, 2184974969366070ull}},
+{{9570620716954215688ull, 1747979975492856ull}},
+{{3967147758821462224ull, 1398383980394285ull}},
+{{6347436414114339560ull, 2237414368630856ull}},
+{{1388600316549561324ull, 1789931494904685ull}},
+{{1110880253239649060ull, 1431945195923748ull}},
+{{8267401832075539896ull, 1145556156738998ull}},
+{{9538494116578953508ull, 1832889850782397ull}},
+{{252097663779342160ull, 1466311880625918ull}},
+{{7580375760507294376ull, 1173049504500734ull}},
+{{1060554772585940032ull, 1876879207201175ull}},
+{{848443818068752024ull, 1501503365760940ull}},
+{{678755054455001620ull, 1201202692608752ull}},
+{{4775356901869912916ull, 1921924308174003ull}},
+{{11198983150979750976ull, 1537539446539202ull}},
+{{1580488891299980136ull, 1230031557231362ull}},
+{{6218131040821878540ull, 1968050491570179ull}},
+{{8663853647399413156ull, 1574440393256143ull}},
+{{14309780547403351172ull, 1259552314604914ull}},
+{{11827602431619630904ull, 2015283703367863ull}},
+{{16840779574779525368ull, 1612226962694290ull}},
+{{13472623659823620296ull, 1289781570155432ull}},
+{{6798802596750151180ull, 2063650512248692ull}},
+{{16507088521625851912ull, 1650920409798953ull}},
+{{2137624373074950560ull, 1320736327839163ull}},
+{{18177594255887562192ull, 2113178124542660ull}},
+{{14542075404710049752ull, 1690542499634128ull}},
+{{565613879542308832ull, 1352433999707303ull}},
+{{15662377466235335424ull, 2163894399531684ull}},
+{{16219250787730178664ull, 1731115519625347ull}},
+{{5596703000700322284ull, 1384892415700278ull}},
+{{5265375986378605332ull, 2215827865120445ull}},
+{{4212300789102884264ull, 1772662292096356ull}},
+{{18127235890249948704ull, 1418129833677084ull}},
+{{18191137526941869288ull, 1134503866941667ull}},
+{{14348424784139349568ull, 1815206187106668ull}},
+{{410693383085748684ull, 1452164949685335ull}},
+{{328554706468598948ull, 1161731959748268ull}},
+{{15283082789317399608ull, 1858771135597228ull}},
+{{1158419787228188716ull, 1487016908477783ull}},
+{{8305433459266371620ull, 1189613526782226ull}},
+{{5909995905342373944ull, 1903381642851562ull}},
+{{15796043168499630124ull, 1522705314281249ull}},
+{{16326183349541614424ull, 1218164251424999ull}},
+{{15053846915040852108ull, 1949062802279999ull}},
+{{15732426346774592008ull, 1559250241823999ull}},
+{{16275289892161583932ull, 1247400193459199ull}},
+{{14972417383232803320ull, 1995840309534719ull}},
+{{15667282721328152980ull, 1596672247627775ull}},
+{{12533826177062522384ull, 1277337798102220ull}},
+{{1607377809590484196ull, 2043740476963553ull}},
+{{8664599877156208004ull, 1634992381570842ull}},
+{{17999726345950697372ull, 1307993905256673ull}},
+{{6663469265069653860ull, 2092790248410678ull}},
+{{12709473041539543732ull, 1674232198728542ull}},
+{{2788880803747814340ull, 1339385758982834ull}},
+{{11840906915480323592ull, 2143017214372534ull}},
+{{13162074347126169196ull, 1714413771498027ull}},
+{{3150961848217114708ull, 1371531017198422ull}},
+{{8730887771889293860ull, 2194449627517475ull}},
+{{6984710217511435088ull, 1755559702013980ull}},
+{{5587768174009148068ull, 1404447761611184ull}},
+{{16319126707898457560ull, 2247116418577894ull}},
+{{16744650181060676368ull, 1797693134862315ull}},
+{{13395720144848541096ull, 1438154507889852ull}},
+{{3337878486395012228ull, 1150523606311882ull}},
+{{9029954392973929892ull, 1840837770099011ull}},
+{{3534614699637233588ull, 1472670216079209ull}},
+{{6517040574451697196ull, 1178136172863367ull}},
+{{14116613733864625836ull, 1885017876581387ull}},
+{{3914593357607880020ull, 1508014301265110ull}},
+{{3131674686086304016ull, 1206411441012088ull}},
+{{1321330682996176104ull, 1930258305619341ull}},
+{{15814459805364582176ull, 1544206644495472ull}},
+{{5272870214807845096ull, 1235365315596378ull}},
+{{4747243528950641828ull, 1976584504954205ull}},
+{{3797794823160513464ull, 1581267603963364ull}},
+{{6727584673270321092ull, 1265014083170691ull}},
+{{3385437847748693104ull, 2024022533073106ull}},
+{{17465745537166595776ull, 1619218026458484ull}},
+{{17661945244475186944ull, 1295374421166787ull}},
+{{13501717132192657816ull, 2072599073866860ull}},
+{{10801373705754126252ull, 1658079259093488ull}},
+{{16019796594087121648ull, 1326463407274790ull}},
+{{7184930476829843024ull, 2122341451639665ull}},
+{{5747944381463874420ull, 1697873161311732ull}},
+{{15666401949396830504ull, 1358298529049385ull}},
+{{6619499045325377192ull, 2173277646479017ull}},
+{{16363645680486032724ull, 1738622117183213ull}},
+{{2022870100163095208ull, 1390897693746571ull}},
+{{14304638604486683304ull, 2225436309994513ull}},
+{{375664439363615672ull, 1780349047995611ull}},
+{{15057926810458533832ull, 1424279238396488ull}},
+{{978295004141096096ull, 1139423390717191ull}},
+{{12633318450851484720ull, 1823077425147505ull}},
+{{10106654760681187776ull, 1458461940118004ull}},
+{{11774672623286860544ull, 1166769552094403ull}},
+{{15150127382517066548ull, 1866831283351045ull}},
+{{12120101906013653240ull, 1493465026680836ull}},
+{{6006732710069012268ull, 1194772021344669ull}},
+{{16989469965594240276ull, 1911635234151470ull}},
+{{13591575972475392220ull, 1529308187321176ull}},
+{{7183911963238403452ull, 1223446549856941ull}},
+{{4115561511697624880ull, 1957514479771106ull}},
+{{18049844468325741196ull, 1566011583816884ull}},
+{{18129224389402503280ull, 1252809267053507ull}},
+{{14249363764076363956ull, 2004494827285612ull}},
+{{4020793381777270516ull, 1603595861828490ull}},
+{{3216634705421816412ull, 1282876689462792ull}},
+{{8835964343416816584ull, 2052602703140467ull}},
+{{18136817918959184236ull, 1642082162512373ull}},
+{{3441407890941616420ull, 1313665730009899ull}},
+{{12884950254990406920ull, 2101865168015838ull}},
+{{17686657833476146180ull, 1681492134412670ull}},
+{{14149326266780916944ull, 1345193707530136ull}},
+{{15260224397365646468ull, 2152309932048218ull}},
+{{1140133073666786204ull, 1721847945638575ull}},
+{{912106458933428964ull, 1377478356510860ull}},
+{{1459370334293486340ull, 2203965370417376ull}},
+{{15924891526402430364ull, 1763172296333900ull}},
+{{12739913221121944292ull, 1410537837067120ull}},
+{{10191930576897555432ull, 1128430269653696ull}},
+{{8928391293552268048ull, 1805488431445914ull}},
+{{10832061849583724760ull, 1444390745156731ull}},
+{{4976300664925069484ull, 1155512596125385ull}},
+{{7962081063880111176ull, 1848820153800616ull}},
+{{2680316036362178620ull, 1479056123040493ull}},
+{{9522950458573563540ull, 1183244898432394ull}},
+{{4168674289491970696ull, 1893191837491831ull}},
+{{18092334690561217848ull, 1514553469993464ull}},
+{{18163216567190884604ull, 1211642775994771ull}},
+{{3235704804312043104ull, 1938628441591635ull}},
+{{2588563843449634484ull, 1550902753273308ull}},
+{{9449548704243528232ull, 1240722202618646ull}},
+{{7740580297305824524ull, 1985155524189834ull}},
+{{9881813052586569944ull, 1588124419351867ull}},
+{{526752812585435308ull, 1270499535481494ull}},
+{{8221502129620517140ull, 2032799256770390ull}},
+{{6577201703696413712ull, 1626239405416312ull}},
+{{16329807807182861940ull, 1300991524333049ull}},
+{{15059646047266848132ull, 2081586438932879ull}},
+{{15737065652555388828ull, 1665269151146303ull}},
+{{1521606077818580092ull, 1332215320917043ull}},
+{{17191964983477369444ull, 2131544513467268ull}},
+{{2685525542556164584ull, 1705235610773815ull}},
+{{2148420434044931668ull, 1364188488619052ull}},
+{{7126821509213800992ull, 2182701581790483ull}},
+{{13080154836854861440ull, 1746161265432386ull}},
+{{6774775054741978828ull, 1396929012345909ull}},
+{{18218337717070986772ull, 2235086419753454ull}},
+{{18264018988398699740ull, 1788069135802763ull}},
+{{3543168746493228824ull, 1430455308642211ull}},
+{{17591930256162224352ull, 1144364246913768ull}},
+{{6010995521408097024ull, 1830982795062030ull}},
+{{4808796417126477620ull, 1464786236049624ull}},
+{{7536385948443092416ull, 1171828988839699ull}},
+{{990171073283216900ull, 1874926382143519ull}},
+{{4481485673368483844ull, 1499941105714815ull}},
+{{3585188538694787072ull, 1199952884571852ull}},
+{{9425650476653569640ull, 1919924615314963ull}},
+{{14919218010806676360ull, 1535939692251970ull}},
+{{11935374408645341088ull, 1228751753801576ull}},
+{{11717901424348725096ull, 1966002806082522ull}},
+{{1995623509995159428ull, 1572802244866018ull}},
+{{8975196437479948188ull, 1258241795892814ull}},
+{{3292267855742186132ull, 2013186873428503ull}},
+{{10012511914077569552ull, 1610549498742802ull}},
+{{631311901778234996ull, 1288439598994242ull}},
+{{4699447857587086316ull, 2061503358390787ull}},
+{{14827604730295400024ull, 1649202686712629ull}},
+{{15551432598978230340ull, 1319362149370103ull}},
+{{2746199269913706608ull, 2110979438992166ull}},
+{{16954354674898606580ull, 1688783551193732ull}},
+{{6184786110435064616ull, 1351026840954986ull}},
+{{2516960147212282740ull, 2161642945527978ull}},
+{{9392265747253646840ull, 1729314356422382ull}},
+{{135114968319096824ull, 1383451485137906ull}},
+{{11284230393536285888ull, 2213522376220649ull}},
+{{12716733129570939036ull, 1770817900976519ull}},
+{{13862735318398661552ull, 1416654320781215ull}},
+{{11090188254718929240ull, 1133323456624972ull}},
+{{2986905948582645492ull, 1813317530599956ull}},
+{{17146920017833757688ull, 1450654024479964ull}},
+{{17406884829008916472ull, 1160523219583971ull}},
+{{2025574023220894092ull, 1856837151334355ull}},
+{{1620459218576715276ull, 1485469721067484ull}},
+{{4985716189603282544ull, 1188375776853987ull}},
+{{11666494718107162392ull, 1901401242966379ull}},
+{{13022544589227640236ull, 1521120994373103ull}},
+{{17796733300865932836ull, 1216896795498482ull}},
+{{13717378022417851244ull, 1947034872797572ull}},
+{{3595204788450460348ull, 1557627898238058ull}},
+{{10254861460244188924ull, 1246102318590446ull}},
+{{9029080706906881636ull, 1993763709744714ull}},
+{{10912613380267415632ull, 1595010967795771ull}},
+{{5040741889472022180ull, 1276008774236617ull}},
+{{11754535837897145816ull, 2041614038778587ull}},
+{{2024931040833896004ull, 1633291231022870ull}},
+{{1619944832667116804ull, 1306632984818296ull}},
+{{13659958176493117856ull, 2090612775709273ull}},
+{{18306664170678314932ull, 1672490220567418ull}},
+{{3577284892316920976ull, 1337992176453935ull}},
+{{5723655827707073560ull, 2140787482326296ull}},
+{{889575847423748524ull, 1712629985861037ull}},
+{{11779707122164729788ull, 1370103988688829ull}},
+{{7779484951237836692ull, 2192166381902127ull}},
+{{17291634405216000324ull, 1753733105521701ull}},
+{{10143958709430889936ull, 1402986484417361ull}},
+{{8851636305605603252ull, 2244778375067778ull}},
+{{14460006673968303248ull, 1795822700054222ull}},
+{{4189307709690821952ull, 1436658160043378ull}},
+{{10730143797236478208ull, 1149326528034702ull}},
+{{2410834816610723840ull, 1838922444855524ull}},
+{{5618016668030489396ull, 1471137955884419ull}},
+{{8183762149166301840ull, 1176910364707535ull}},
+{{13094019438666082944ull, 1883056583532056ull}},
+{{6785866736190956032ull, 1506445266825645ull}},
+{{5428693388952764824ull, 1205156213460516ull}},
+{{1307211792840603072ull, 1928249941536826ull}},
+{{15803164693240123752ull, 1542599953229460ull}},
+{{12642531754592099000ull, 1234079962583568ull}},
+{{16538701992605448080ull, 1974527940133709ull}},
+{{16920310408826268784ull, 1579622352106967ull}},
+{{6157550697577194380ull, 1263697881685574ull}},
+{{17230778745607331660ull, 2021916610696918ull}},
+{{2716576552260134356ull, 1617533288557535ull}},
+{{2173261241808107484ull, 1294026630846028ull}},
+{{18234613245860613272ull, 2070442609353644ull}},
+{{18277039411430400940ull, 1656354087482915ull}},
+{{14621631529144320752ull, 1325083269986332ull}},
+{{8637215187663271908ull, 2120133231978132ull}},
+{{17977818594356348496ull, 1696106585582505ull}},
+{{14382254875485078796ull, 1356885268466004ull}},
+{{11943561356550395108ull, 2171016429545607ull}},
+{{2176151455756495440ull, 1736813143636486ull}},
+{{16498316423572837644ull, 1389450514909188ull}},
+{{4261213389265078292ull, 2223120823854702ull}},
+{{14477017155637793604ull, 1778496659083761ull}},
+{{7892264909768324560ull, 1422797327267009ull}},
+{{10003160742556569968ull, 1138237861813607ull}},
+{{1247661929122870660ull, 1821180578901772ull}},
+{{12066175987524027496ull, 1456944463121417ull}},
+{{2274243160535401352ull, 1165555570497134ull}},
+{{11017486686340462808ull, 1864888912795414ull}},
+{{12503338163814280568ull, 1491911130236331ull}},
+{{6313321716309514132ull, 1193528904189065ull}},
+{{10101314746095222612ull, 1909646246702504ull}},
+{{11770400611618088412ull, 1527716997362003ull}},
+{{16795018118778291376ull, 1222173597889602ull}},
+{{12114633731077624912ull, 1955477756623364ull}},
+{{13381055799604010252ull, 1564382205298691ull}},
+{{7015495824941297876ull, 1251505764238953ull}},
+{{7535444505164166280ull, 2002409222782325ull}},
+{{6028355604131333024ull, 1601927378225860ull}},
+{{4822684483305066420ull, 1281541902580688ull}},
+{{4026946358546195948ull, 2050467044129101ull}},
+{{17978952345804598052ull, 1640373635303280ull}},
+{{14383161876643678440ull, 1312298908242624ull}},
+{{11945012558404154536ull, 2099678253188199ull}},
+{{13245358861465233952ull, 1679742602550559ull}},
+{{14285635903914097484ull, 1343794082040447ull}},
+{{8099622187294914684ull, 2150070531264716ull}},
+{{2790348935094021424ull, 1720056425011773ull}},
+{{9610976777559037784ull, 1376045140009418ull}},
+{{11688214029352550136ull, 2201672224015069ull}},
+{{13039920038223950432ull, 1761337779212055ull}},
+{{10431936030579160344ull, 1409070223369644ull}},
+{{12034897639205238596ull, 1127256178695715ull}},
+{{809092149018830140ull, 1803609885913145ull}},
+{{647273719215064112ull, 1442887908730516ull}},
+{{15275214234339692584ull, 1154310326984412ull}},
+{{9682947515975866840ull, 1846896523175060ull}},
+{{7746358012780693472ull, 1477517218540048ull}},
+{{13575784039708375424ull, 1182013774832038ull}},
+{{18031905648791490356ull, 1891222039731261ull}},
+{{10736175704291281960ull, 1512977631785009ull}},
+{{12278289378174935892ull, 1210382105428007ull}},
+{{4887867746112256136ull, 1936611368684812ull}},
+{{14978340641115535876ull, 1549289094947849ull}},
+{{15672021327634339024ull, 1239431275958279ull}},
+{{14007187679989211472ull, 1983090041533247ull}},
+{{3827052514507548532ull, 1586472033226598ull}},
+{{10440339641089859472ull, 1269177626581278ull}},
+{{13015194611001864832ull, 2030684202530045ull}},
+{{10412155688801491864ull, 1624547362024036ull}},
+{{4640375736299283168ull, 1299637889619229ull}},
+{{14803298807562673716ull, 2079420623390766ull}},
+{{8153290231308228648ull, 1663536498712613ull}},
+{{13901329814530403564ull, 1330829198970090ull}},
+{{3795383629539094088ull, 2129326718352145ull}},
+{{3036306903631275272ull, 1703461374681716ull}},
+{{17186440781872661508ull, 1362769099745372ull}},
+{{12740909992028617124ull, 2180430559592596ull}},
+{{6503379178880983376ull, 1744344447674077ull}},
+{{16270749787330517668ull, 1395475558139261ull}},
+{{207757956535456008ull, 2232760893022819ull}},
+{{3855555179970275132ull, 1786208714418255ull}},
+{{3084444143976220104ull, 1428966971534604ull}},
+{{6156904129922886404ull, 1143173577227683ull}},
+{{6161697793134707928ull, 1829077723564293ull}},
+{{12308055863991586988ull, 1463262178851434ull}},
+{{13535793505935179912ull, 1170609743081147ull}},
+{{6899874350528646568ull, 1872975588929836ull}},
+{{1830550665681006932ull, 1498380471143869ull}},
+{{5153789347286715868ull, 1198704376915095ull}},
+{{8246062955658745392ull, 1917927003064152ull}},
+{{17664896808752727280ull, 1534341602451321ull}},
+{{10442568632260271500ull, 1227473281961057ull}},
+{{1950714552648793112ull, 1963957251137692ull}},
+{{12628618086344765460ull, 1571165800910153ull}},
+{{17481592098559633012ull, 1256932640728122ull}},
+{{13213152098727771528ull, 2011092225164996ull}},
+{{6881172864240306900ull, 1608873780131997ull}},
+{{16572984735617976488ull, 1287099024105597ull}},
+{{11759380318021121088ull, 2059358438568956ull}},
+{{5718155439674986548ull, 1647486750855165ull}},
+{{4574524351739989240ull, 1317989400684132ull}},
+{{11008587777525893104ull, 2108783041094611ull}},
+{{5117521407278804160ull, 1687026432875689ull}},
+{{7783365940564953652ull, 1349621146300551ull}},
+{{5074687875420105196ull, 2159393834080882ull}},
+{{15127796744561815128ull, 1727515067264705ull}},
+{{12102237395649452100ull, 1382012053811764ull}},
+{{8295533388813392392ull, 2211219286098823ull}},
+{{14015124340534534560ull, 1768975428879058ull}},
+{{144053028201896680ull, 1415180343103247ull}},
+{{11183288866787248312ull, 1132144274482597ull}},
+{{3135866927891956008ull, 1811430839172156ull}},
+{{17266088801281206100ull, 1449144671337724ull}},
+{{17502219855766875200ull, 1159315737070179ull}},
+{{16935505325001269356ull, 1854905179312287ull}},
+{{6169706630517194836ull, 1483924143449830ull}},
+{{4935765304413755868ull, 1187139314759864ull}},
+{{15275922116545830036ull, 1899422903615782ull}},
+{{4842040063752843384ull, 1519538322892626ull}},
+{{184283236260364384ull, 1215630658314101ull}},
+{{11362899622242313984ull, 1945009053302561ull}},
+{{5400970883051940864ull, 1556007242642049ull}},
+{{8010125521183463012ull, 1244805794113639ull}},
+{{1748154389667809852ull, 1991689270581823ull}},
+{{8777221141218068528ull, 1593351416465458ull}},
+{{14400474542458275468ull, 1274681133172366ull}},
+{{15662061638449420104ull, 2039489813075786ull}},
+{{8840300496017625760ull, 1631591850460629ull}},
+{{10761589211556010932ull, 1305273480368503ull}},
+{{13529193923747707168ull, 2088437568589605ull}},
+{{10823355138998165736ull, 1670750054871684ull}},
+{{12348032925940442912ull, 1336600043897347ull}},
+{{4999457422537067364ull, 2138560070235756ull}},
+{{310217123287743568ull, 1710848056188605ull}},
+{{248173698630194852ull, 1368678444950884ull}},
+{{7775775547292132412ull, 2189885511921414ull}},
+{{9909969252575616252ull, 1751908409537131ull}},
+{{4238626587318582680ull, 1401526727629705ull}},
+{{6781802539709732288ull, 2242442764207528ull}},
+{{12804139661251606476ull, 1793954211366022ull}},
+{{2864614099517464536ull, 1435163369092818ull}},
+{{9670388909097792272ull, 1148130695274254ull}},
+{{4404575810330736668ull, 1837009112438807ull}},
+{{14591707092490320304ull, 1469607289951045ull}},
+{{11673365673992256244ull, 1175685831960836ull}},
+{{11298687448903789344ull, 1881097331137338ull}},
+{{16417647588606852120ull, 1504877864909870ull}},
+{{13134118070885481696ull, 1203902291927896ull}},
+{{13635891283932950068ull, 1926243667084634ull}},
+{{14598061841888270380ull, 1540994933667707ull}},
+{{4299751844026795656ull, 1232795946934166ull}},
+{{17947649394668604020ull, 1972473515094665ull}},
+{{14358119515734883216ull, 1577978812075732ull}},
+{{4107797983104085924ull, 1262383049660586ull}},
+{{17640523217192268452ull, 2019812879456937ull}},
+{{6733720944269994116ull, 1615850303565550ull}},
+{{5386976755415995292ull, 1292680242852440ull}},
+{{8619162808665592468ull, 2068288388563904ull}},
+{{10584679061674384296ull, 1654630710851123ull}},
+{{15846440878823328084ull, 1323704568680898ull}},
+{{3218212517665862996ull, 2117927309889438ull}},
+{{9953267643616511044ull, 1694341847911550ull}},
+{{7962614114893208832ull, 1355473478329240ull}},
+{{12740182583829134136ull, 2168757565326784ull}},
+{{13881494881805217632ull, 1735006052261427ull}},
+{{3726498275960353456ull, 1388004841809142ull}},
+{{9651746056278475856ull, 2220807746894627ull}},
+{{342699215538960040ull, 1776646197515702ull}},
+{{11342205816656899000ull, 1421316958012561ull}},
+{{5384415838583608876ull, 1137053566410049ull}},
+{{15993762971217594852ull, 1819285706256078ull}},
+{{1726963932748344912ull, 1455428565004863ull}},
+{{8760268775682496576ull, 1164342852003890ull}},
+{{14016430041091994520ull, 1862948563206224ull}},
+{{14902492847615505940ull, 1490358850564979ull}},
+{{15611343092834315072ull, 1192287080451983ull}},
+{{2842056060083442180ull, 1907659328723174ull}},
+{{5962993662808664068ull, 1526127462978539ull}},
+{{8459743744988841576ull, 1220901970382831ull}},
+{{6156892362498325876ull, 1953443152612530ull}},
+{{4925513889998660700ull, 1562754522090024ull}},
+{{7629759926740838884ull, 1250203617672019ull}},
+{{1139569438559611244ull, 2000325788275231ull}},
+{{15669050809815330288ull, 1600260630620184ull}},
+{{16224589462594174552ull, 1280208504496147ull}},
+{{11201947881183037996ull, 2048333607193836ull}},
+{{5272209490204520072ull, 1638666885755069ull}},
+{{7907116406905526380ull, 1310933508604055ull}},
+{{12651386251048842208ull, 2097493613766488ull}},
+{{17499806630322894412ull, 1677994891013190ull}},
+{{13999845304258315532ull, 1342395912810552ull}},
+{{7642357227845663556ull, 2147833460496884ull}},
+{{9803234597018441168ull, 1718266768397507ull}},
+{{463890048130932288ull, 1374613414718006ull}},
+{{11810270521235222632ull, 2199381463548809ull}},
+{{13137565231730088428ull, 1759505170839047ull}},
+{{3131354555900250096ull, 1407604136671238ull}},
+{{9883781274204020724ull, 1126083309336990ull}},
+{{15814050038726433156ull, 1801733294939184ull}},
+{{16340588845723056848ull, 1441386635951347ull}},
+{{5693773447094624832ull, 1153109308761078ull}},
+{{5420688700609489408ull, 1844974894017725ull}},
+{{4336550960487591528ull, 1475979915214180ull}},
+{{3469240768390073220ull, 1180783932171344ull}},
+{{12929482858907937800ull, 1889254291474150ull}},
+{{10343586287126350240ull, 1511403433179320ull}},
+{{8274869029701080192ull, 1209122746543456ull}},
+{{5861092818037907664ull, 1934596394469530ull}},
+{{4688874254430326128ull, 1547677115575624ull}},
+{{7440448218286171228ull, 1238141692460499ull}},
+{{836670705032142996ull, 1981026707936799ull}},
+{{4358685378767624720ull, 1584821366349439ull}},
+{{7176297117756010096ull, 1267857093079551ull}},
+{{4103377758925795512ull, 2028571348927282ull}},
+{{14350748651366367376ull, 1622857079141825ull}},
+{{11480598921093093900ull, 1298285663313460ull}},
+{{18368958273748950244ull, 2077257061301536ull}},
+{{11005817804257249872ull, 1661805649041229ull}},
+{{12494003058147710220ull, 1329444519232983ull}},
+{{16301056078294426032ull, 2127111230772773ull}},
+{{1972798418409809856ull, 1701688984618219ull}},
+{{5267587549469758208ull, 1361351187694575ull}},
+{{8428140079151613132ull, 2178161900311320ull}},
+{{6742512063321290504ull, 1742529520249056ull}},
+{{1704660835915122080ull, 1394023616199245ull}},
+{{2727457337464195328ull, 2230437785918792ull}},
+{{13250012314197087232ull, 1784350228735033ull}},
+{{17978707480841490432ull, 1427480182988026ull}},
+{{10693617169931282020ull, 1141984146390421ull}},
+{{9731089842406230588ull, 1827174634224674ull}},
+{{11474220688666894796ull, 1461739707379739ull}},
+{{12868725365675426160ull, 1169391765903791ull}},
+{{13211262955596861208ull, 1871026825446066ull}},
+{{6879661549735578644ull, 1496821460356853ull}},
+{{12882426869272283560ull, 1197457168285482ull}},
+{{5854487731868012404ull, 1915931469256772ull}},
+{{15751636629720140892ull, 1532745175405417ull}},
+{{5222611674292292068ull, 1226196140324334ull}},
+{{15734876308351487956ull, 1961913824518934ull}},
+{{16277249861423100688ull, 1569531059615147ull}},
+{{5643102259654659904ull, 1255624847692118ull}},
+{{5339614800705545524ull, 2008999756307389ull}},
+{{7961040655306346740ull, 1607199805045911ull}},
+{{2679483709503167068ull, 1285759844036729ull}},
+{{11665871564688887960ull, 2057215750458766ull}},
+{{5643348437009200044ull, 1645772600367013ull}},
+{{11893376379091180680ull, 1316618080293610ull}},
+{{582658132836337476ull, 2106588928469777ull}},
+{{11534172950494800948ull, 1685271142775821ull}},
+{{5537989545653930436ull, 1348216914220657ull}},
+{{12550132087788199020ull, 2157147062753051ull}},
+{{6350756855488648892ull, 1725717650202441ull}},
+{{1391256669649008792ull, 1380574120161953ull}},
+{{16983405930406055360ull, 2208918592259124ull}},
+{{17276073559066754612ull, 1767134873807299ull}},
+{{17510207661995314012ull, 1413707899045839ull}},
+{{17697514944338161532ull, 1130966319236671ull}},
+{{2490582207747686188ull, 1809546110778675ull}},
+{{1992465766198148952ull, 1447636888622940ull}},
+{{1593972612958519160ull, 1158109510898352ull}},
+{{6239704995475540980ull, 1852975217437363ull}},
+{{12370461625864253432ull, 1482380173949890ull}},
+{{9896369300691402744ull, 1185904139159912ull}},
+{{1076795622138603100ull, 1897446622655860ull}},
+{{861436497710882480ull, 1517957298124688ull}},
+{{8067846827652526628ull, 1214365838499750ull}},
+{{12908554924244042608ull, 1942985341599600ull}},
+{{10326843939395234088ull, 1554388273279680ull}},
+{{8261475151516187268ull, 1243510618623744ull}},
+{{2150313798200168660ull, 1989616989797991ull}},
+{{16477646297527776220ull, 1591693591838392ull}},
+{{5803419408538400332ull, 1273354873470714ull}},
+{{16664168683145261176ull, 2037367797553142ull}},
+{{5952637317032388296ull, 1629894238042514ull}},
+{{8451458668367820960ull, 1303915390434011ull}},
+{{6143636239904692888ull, 2086264624694418ull}},
+{{12293606621407574956ull, 1669011699755534ull}},
+{{13524234111867970288ull, 1335209359804427ull}},
+{{6881379320021111168ull, 2136334975687084ull}},
+{{9194452270758799260ull, 1709067980549667ull}},
+{{18423608260832770376ull, 1367254384439733ull}},
+{{7341680328880970664ull, 2187607015103574ull}},
+{{9562693077846686852ull, 1750085612082859ull}},
+{{11339503277019259804ull, 1400068489666287ull}},
+{{3385809984263174396ull, 2240109583466060ull}},
+{{2708647987410539516ull, 1792087666772848ull}},
+{{9545616019412252260ull, 1433670133418278ull}},
+{{15015190445013622452ull, 1146936106734622ull}},
+{{9266909453054154636ull, 1835097770775396ull}},
+{{3724178747701413384ull, 1468078216620317ull}},
+{{14047389442386861676ull, 1174462573296253ull}},
+{{339730219367516744ull, 1879140117274006ull}},
+{{15029179434461654688ull, 1503312093819204ull}},
+{{15712692362311234072ull, 1202649675055363ull}},
+{{3004214891246512580ull, 1924239480088582ull}},
+{{13471418357222941032ull, 1539391584070865ull}},
+{{10777134685778352824ull, 1231513267256692ull}},
+{{2486020238277723228ull, 1970421227610708ull}},
+{{9367513820105999228ull, 1576336982088566ull}},
+{{3804662241342889060ull, 1261069585670853ull}},
+{{2398110771406712172ull, 2017711337073365ull}},
+{{1918488617125369740ull, 1614169069658692ull}},
+{{12602837337926026760ull, 1291335255726953ull}},
+{{16475190925939732496ull, 2066136409163125ull}},
+{{13180152740751785996ull, 1652909127330500ull}},
+{{10544122192601428796ull, 1322327301864400ull}},
+{{16870595508162286076ull, 2115723682983040ull}},
+{{13496476406529828860ull, 1692578946386432ull}},
+{{3418483495740042440ull, 1354063157109146ull}},
+{{16537620037409798876ull, 2166501051374633ull}},
+{{2162049585702108132ull, 1733200841099707ull}},
+{{12797686112787417472ull, 1386560672879765ull}},
+{{2029553706750316344ull, 2218497076607625ull}},
+{{1623642965400253072ull, 1774797661286100ull}},
+{{1298914372320202460ull, 1419838129028880ull}},
+{{1039131497856161968ull, 1135870503223104ull}},
+{{9041308026053679792ull, 1817392805156966ull}},
+{{3543697606101033512ull, 1453914244125573ull}},
+{{10213655714364647456ull, 1163131395300458ull}},
+{{12652500328241525608ull, 1861010232480733ull}},
+{{17500697892077041132ull, 1488808185984586ull}},
+{{10311209498919722580ull, 1191046548787669ull}},
+{{5429888754045825160ull, 1905674478060271ull}},
+{{654562188494749804ull, 1524539582448217ull}},
+{{11591696195021530812ull, 1219631665958573ull}},
+{{14857365097292538980ull, 1951410665533717ull}},
+{{4507194448350210536ull, 1561128532426974ull}},
+{{7295104373422078752ull, 1248902825941579ull}},
+{{604120553249595036ull, 1998244521506527ull}},
+{{11551342886825406996ull, 1598595617205221ull}},
+{{5551725494718415276ull, 1278876493764177ull}},
+{{12572109606291374764ull, 2046202390022683ull}},
+{{17436385314516920456ull, 1636961912018146ull}},
+{{10259759436871626044ull, 1309569529614517ull}},
+{{1658219840026960376ull, 2095311247383228ull}},
+{{8705273501505388948ull, 1676248997906582ull}},
+{{18032265245430042128ull, 1340999198325265ull}},
+{{10404880318978515788ull, 2145598717320425ull}},
+{{8323904255182812628ull, 1716478973856340ull}},
+{{6659123404146250104ull, 1373183179085072ull}},
+{{14343946261375910488ull, 2197093086536115ull}},
+{{11475157009100728392ull, 1757674469228892ull}},
+{{1801427977796762068ull, 1406139575383114ull}},
+{{10260982393958639952ull, 2249823320612982ull}},
+{{830088285683091316ull, 1799858656490386ull}},
+{{15421465887514114344ull, 1439886925192308ull}},
+{{1269126265785560508ull, 1151909540153847ull}},
+{{5719950839998807136ull, 1843055264246155ull}},
+{{4575960671999045708ull, 1474444211396924ull}},
+{{7350117352341146888ull, 1179555369117539ull}},
+{{692141319520104052ull, 1887288590588063ull}},
+{{7932410685099903888ull, 1509830872470450ull}},
+{{6345928548079923112ull, 1207864697976360ull}},
+{{10153485676927876976ull, 1932583516762176ull}},
+{{4433439726800391260ull, 1546066813409741ull}},
+{{18304147040407954300ull, 1236853450727792ull}},
+{{14529240005685085588ull, 1978965521164468ull}},
+{{555345560322337500ull, 1583172416931575ull}},
+{{444276448257870000ull, 1266537933545260ull}},
+{{710842317212592000ull, 2026460693672416ull}},
+{{15326069112737714892ull, 1621168554937932ull}},
+{{4882157660706351268ull, 1296934843950346ull}},
+{{432754627646341384ull, 2075095750320554ull}},
+{{4035552516858983428ull, 1660076600256443ull}},
+{{10607139642971007388ull, 1328061280205154ull}},
+{{5903376984527880856ull, 2124898048328247ull}},
+{{15790748031848035652ull, 1699918438662597ull}},
+{{5253900795994607876ull, 1359934750930078ull}},
+{{4716892458849462280ull, 2175895601488125ull}},
+{{3773513967079569824ull, 1740716481190500ull}},
+{{3018811173663655856ull, 1392573184952400ull}},
+{{4830097877861849372ull, 2228117095923840ull}},
+{{3864078302289479500ull, 1782493676739072ull}},
+{{14159309086057314568ull, 1425994941391257ull}},
+{{3948749639362031008ull, 1140795953113006ull}},
+{{17386045867204980584ull, 1825273524980809ull}},
+{{17598185508505894788ull, 1460218819984647ull}},
+{{6699850777320895184ull, 1168175055987718ull}},
+{{7030412428971521972ull, 1869080089580349ull}},
+{{9313678757919127900ull, 1495264071664279ull}},
+{{11140291821077212644ull, 1196211257331423ull}},
+{{14135118098981629908ull, 1913938011730277ull}},
+{{3929396849701483280ull, 1531150409384222ull}},
+{{14211563923986917592ull, 1224920327507377ull}},
+{{7981107019411426856ull, 1959872524011804ull}},
+{{10074234430271051808ull, 1567898019209443ull}},
+{{15438085173700662092ull, 1254318415367554ull}},
+{{13632889833695328380ull, 2006909464588087ull}},
+{{3527614237472442056ull, 1605527571670470ull}},
+{{2822091389977953644ull, 1284422057336376ull}},
+{{15583392668190456804ull, 2055075291738201ull}},
+{{8777365319810455120ull, 1644060233390561ull}},
+{{3332543441106453772ull, 1315248186712449ull}},
+{{12710767135254146680ull, 2104397098739918ull}},
+{{17547311337687137992ull, 1683517678991934ull}},
+{{17727197884891620716ull, 1346814143193547ull}},
+{{13606121356858951856ull, 2154902629109676ull}},
+{{7195548270745251160ull, 1723922103287741ull}},
+{{2067089801854290604ull, 1379137682630193ull}},
+{{18064738941934506260ull, 2206620292208308ull}},
+{{3383744709321874040ull, 1765296233766647ull}},
+{{13775042211683230200ull, 1412236987013317ull}},
+{{3641336139862763512ull, 1129789589610654ull}},
+{{13204835453264242268ull, 1807663343377046ull}},
+{{6874519547869483492ull, 1446130674701637ull}},
+{{16567662082521317764ull, 1156904539761309ull}},
+{{15440212887808377452ull, 1851047263618095ull}},
+{{12352170310246701960ull, 1480837810894476ull}},
+{{6192387433455451244ull, 1184670248715581ull}},
+{{2529122264044901348ull, 1895472397944930ull}},
+{{2023297811235921076ull, 1516377918355944ull}},
+{{5307987063730647184ull, 1213102334684755ull}},
+{{8492779301969035496ull, 1940963735495608ull}},
+{{14172921071059049044ull, 1552770988396486ull}},
+{{7648988042105328912ull, 1242216790717189ull}},
+{{1170334423142795288ull, 1987546865147503ull}},
+{{8314965167998056876ull, 1590037492118002ull}},
+{{17720018578624176472ull, 1272029993694401ull}},
+{{2526588022605310092ull, 2035247989911043ull}},
+{{9399968047568068720ull, 1628198391928834ull}},
+{{11209323252796365300ull, 1302558713543067ull}},
+{{3177521945506543188ull, 2084093941668908ull}},
+{{9920715185889055196ull, 1667275153335126ull}},
+{{4247223333969333832ull, 1333820122668101ull}},
+{{17863603778576665104ull, 2134112196268961ull}},
+{{10601534208119421760ull, 1707289757015169ull}},
+{{12170576181237447728ull, 1365831805612135ull}},
+{{1026177816270364752ull, 2185330888979417ull}},
+{{11888988697242022772ull, 1748264711183533ull}},
+{{16889888587277438864ull, 1398611768946826ull}},
+{{1198380036450529920ull, 2237778830314923ull}},
+{{8337401658644244580ull, 1790223064251938ull}},
+{{14048618956399216312ull, 1432178451401550ull}},
+{{11238895165119373048ull, 1145742761121240ull}},
+{{17982232264190996880ull, 1833188417793984ull}},
+{{18075134626094707824ull, 1466550734235187ull}},
+{{7081410071391945612ull, 1173240587388150ull}},
+{{11330256114227112984ull, 1877184939821040ull}},
+{{9064204891381690388ull, 1501747951856832ull}},
+{{18319410357331083280ull, 1201398361485465ull}},
+{{10864312498020181632ull, 1922237378376745ull}},
+{{8691449998416145304ull, 1537789902701396ull}},
+{{3263811183991005920ull, 1230231922161117ull}},
+{{8911446709127519796ull, 1968371075457787ull}},
+{{18197203811527746804ull, 1574696860366229ull}},
+{{18247111863964107768ull, 1259757488292983ull}},
+{{7059286093891110488ull, 2015611981268774ull}},
+{{9336777689854798716ull, 1612489585015019ull}},
+{{11158770966625749296ull, 1289991668012015ull}},
+{{17854033546601198872ull, 2063986668819224ull}},
+{{17972575652022869420ull, 1651189335055379ull}},
+{{18067409336360205860ull, 1320951468044303ull}},
+{{6771762049724867436ull, 2113522348870886ull}},
+{{1728060825037983628ull, 1690817879096709ull}},
+{{5071797474772297224ull, 1352654303277367ull}},
+{{11804224774377585884ull, 2164246885243787ull}},
+{{2064682190018248060ull, 1731397508195030ull}},
+{{1651745752014598448ull, 1385118006556024ull}},
+{{10021490832707178164ull, 2216188810489638ull}},
+{{15395890295649563176ull, 1772951048391710ull}},
+{{12316712236519650540ull, 1418360838713368ull}},
+{{17232067418699541080ull, 1134688670970694ull}},
+{{16503261425693534756ull, 1815501873553111ull}},
+{{9513260325812917480ull, 1452401498842489ull}},
+{{11299957075392244308ull, 1161921199073991ull}},
+{{10701233691143770248ull, 1859073918518386ull}},
+{{4871638138173105876ull, 1487259134814709ull}},
+{{7586659325280395024ull, 1189807307851767ull}},
+{{15828003735190542360ull, 1903691692562827ull}},
+{{5283705358668613240ull, 1522953354050262ull}},
+{{15295010731160621564ull, 1218362683240209ull}},
+{{13403970725631263532ull, 1949380293184335ull}},
+{{10723176580505010824ull, 1559504234547468ull}},
+{{15957238893887829308ull, 1247603387637974ull}},
+{{14463535785994795920ull, 1996165420220759ull}},
+{{15260177443537747060ull, 1596932336176607ull}},
+{{4829444325346377000ull, 1277545868941286ull}},
+{{348413291070382556ull, 2044073390306058ull}},
+{{7657428262340126692ull, 1635258712244846ull}},
+{{2436593795130191028ull, 1308206969795877ull}},
+{{7587898886950215972ull, 2093131151673403ull}},
+{{13449016739043993424ull, 1674504921338722ull}},
+{{3380515761751374092ull, 1339603937070978ull}},
+{{1719476404060288224ull, 2143366299313565ull}},
+{{1375581123248230580ull, 1714693039450852ull}},
+{{12168511342824315432ull, 1371754431560681ull}},
+{{12090920519035084048ull, 2194807090497090ull}},
+{{9672736415228067236ull, 1755845672397672ull}},
+{{359491502698633144ull, 1404676537918138ull}},
+{{15332581663285454324ull, 2247482460669020ull}},
+{{12266065330628363456ull, 1797985968535216ull}},
+{{6123503449760780444ull, 1438388774828173ull}},
+{{12277500389292445000ull, 1150711019862538ull}},
+{{15954651808126001680ull, 1841137631780061ull}},
+{{9074372631758891020ull, 1472910105424049ull}},
+{{10948846920149023140ull, 1178328084339239ull}},
+{{6450108628012706052ull, 1885324934942783ull}},
+{{12538784531893985488ull, 1508259947954226ull}},
+{{6341678810773278068ull, 1206607958363381ull}},
+{{2767988467753424260ull, 1930572733381410ull}},
+{{2214390774202739408ull, 1544458186705128ull}},
+{{9150210248846012172ull, 1235566549364102ull}},
+{{18329685212895529800ull, 1976906478982563ull}},
+{{3595701726090692872ull, 1581525183186051ull}},
+{{17633956639840195588ull, 1265220146548840ull}},
+{{9767586550034761328ull, 2024352234478145ull}},
+{{7814069240027809064ull, 1619481787582516ull}},
+{{2561906577280336928ull, 1295585430066013ull}},
+{{409701708906628760ull, 2072936688105621ull}},
+{{15085156626092944300ull, 1658349350484496ull}},
+{{8378776486132445116ull, 1326679480387597ull}},
+{{17095391192553822512ull, 2122687168620155ull}},
+{{13676312954043058008ull, 1698149734896124ull}},
+{{14630399177976356728ull, 1358519787916899ull}},
+{{12340592240536439800ull, 2173631660667039ull}},
+{{13561822607171062160ull, 1738905328533631ull}},
+{{7160109270994939404ull, 1391124262826905ull}},
+{{11456174833591903052ull, 2225798820523048ull}},
+{{16543637496357343088ull, 1780639056418438ull}},
+{{2166863552860143500ull, 1424511245134751ull}},
+{{16490886101255756092ull, 1139608996107800ull}},
+{{7938673688299658132ull, 1823374393772481ull}},
+{{2661590135897816180ull, 1458699515017985ull}},
+{{2129272108718252944ull, 1166959612014388ull}},
+{{18164230632916846008ull, 1867135379223020ull}},
+{{14531384506333476804ull, 1493708303378416ull}},
+{{7935758790324871120ull, 1194966642702733ull}},
+{{9007865249777883472ull, 1911946628324373ull}},
+{{14584989829306127424ull, 1529557302659498ull}},
+{{599945419219170968ull, 1223645842127599ull}},
+{{8338610300234494196ull, 1957833347404158ull}},
+{{14049585869671416004ull, 1566266677923326ull}},
+{{7550319880995222480ull, 1253013342338661ull}},
+{{4701814180108535320ull, 2004821347741858ull}},
+{{11140148973570648904ull, 1603857078193486ull}},
+{{5222770364114608800ull, 1283085662554789ull}},
+{{15735130212067194724ull, 2052937060087662ull}},
+{{5209406540169935132ull, 1642349648070130ull}},
+{{4167525232135948108ull, 1313879718456104ull}},
+{{14046738000901337616ull, 2102207549529766ull}},
+{{7548041585979159772ull, 1681766039623813ull}},
+{{13417130898267148464ull, 1345412831699050ull}},
+{{3020665363517885924ull, 2152660530718481ull}},
+{{17173927549781950032ull, 1722128424574784ull}},
+{{17428490854567470348ull, 1377702739659827ull}},
+{{13128190108340311268ull, 2204324383455724ull}},
+{{14191900901414159336ull, 1763459506764579ull}},
+{{15042869535873237792ull, 1410767605411663ull}},
+{{966249184472859264ull, 1128614084329331ull}},
+{{12614045139382305792ull, 1805782534926929ull}},
+{{13780584926247754956ull, 1444626027941543ull}},
+{{18403165570482024612ull, 1155700822353234ull}},
+{{18377018468545508408ull, 1849121315765175ull}},
+{{14701614774836406728ull, 1479297052612140ull}},
+{{11761291819869125380ull, 1183437642089712ull}},
+{{4060671652822959320ull, 1893500227343540ull}},
+{{3248537322258367456ull, 1514800181874832ull}},
+{{13666876302032424932ull, 1211840145499865ull}},
+{{3420258009542328276ull, 1938944232799785ull}},
+{{2736206407633862620ull, 1551155386239828ull}},
+{{9567662755590910744ull, 1240924308991862ull}},
+{{550865149977815896ull, 1985478894386980ull}},
+{{440692119982252716ull, 1588383115509584ull}},
+{{4041902510727712496ull, 1270706492407667ull}},
+{{10156392831906250320ull, 2033130387852267ull}},
+{{746416636041179608ull, 1626504310281814ull}},
+{{4286482123574854008ull, 1301203448225451ull}},
+{{17926417841945497388ull, 2081925517160721ull}},
+{{10651785458814487584ull, 1665540413728577ull}},
+{{1142730737567769420ull, 1332432330982862ull}},
+{{5517717994850341400ull, 2131891729572579ull}},
+{{8103523210622183440ull, 1705513383658063ull}},
+{{13861516197981567400ull, 1364410706926450ull}},
+{{3731681843060956224ull, 2183057131082321ull}},
+{{17742740733416406272ull, 1746445704865856ull}},
+{{10504843771991214692ull, 1397156563892685ull}},
+{{16807750035185943512ull, 2235450502228296ull}},
+{{9756851213406844484ull, 1788360401782637ull}},
+{{426783341241654940ull, 1430688321426110ull}},
+{{341426672993323952ull, 1144550657140888ull}},
+{{15303677935756959620ull, 1831281051425420ull}},
+{{12242942348605567696ull, 1465024841140336ull}},
+{{6105005064142543832ull, 1172019872912269ull}},
+{{17146705732111890780ull, 1875231796659630ull}},
+{{13717364585689512624ull, 1500185437327704ull}},
+{{14663240483293520420ull, 1200148349862163ull}},
+{{1325091884818170736ull, 1920237359779462ull}},
+{{12128119952080267556ull, 1536189887823569ull}},
+{{13391844776406124368ull, 1228951910258855ull}},
+{{2980207568540247376ull, 1966323056414169ull}},
+{{6073514869574108224ull, 1573058445131335ull}},
+{{4858811895659286580ull, 1258446756105068ull}},
+{{4084750218312948204ull, 2013514809768109ull}},
+{{6957148989392268884ull, 1610811847814487ull}},
+{{16633765635739546076ull, 1288649478251589ull}},
+{{15545978572957542756ull, 2061839165202543ull}},
+{{1368736414140303236ull, 1649471332162035ull}},
+{{1094989131312242588ull, 1319577065729628ull}},
+{{16509377869067229432ull, 2111323305167404ull}},
+{{16896851109995693868ull, 1689058644133923ull}},
+{{2449434443770824124ull, 1351246915307139ull}},
+{{11297792739517139248ull, 2161995064491422ull}},
+{{1659536562129890752ull, 1729596051593138ull}},
+{{8706326879187733248ull, 1383676841274510ull}},
+{{13930123006700373196ull, 2213882946039216ull}},
+{{7454749590618388236ull, 1771106356831373ull}},
+{{13342497301978531232ull, 1416885085465098ull}},
+{{18052695471066645632ull, 1133508068372078ull}},
+{{6748219865255171076ull, 1813612909395326ull}},
+{{1709227077462226536ull, 1450890327516261ull}},
+{{16124776920937422520ull, 1160712262013008ull}},
+{{3663550185048414096ull, 1857139619220814ull}},
+{{6620188962780641600ull, 1485711695376651ull}},
+{{1606802355482602956ull, 1188569356301321ull}},
+{{13638930212997895700ull, 1901710970082113ull}},
+{{18289841799882137208ull, 1521368776065690ull}},
+{{14631873439905709764ull, 1217095020852552ull}},
+{{8653602244881494332ull, 1947352033364084ull}},
+{{10612230610647105788ull, 1557881626691267ull}},
+{{1111086859033863984ull, 1246305301353014ull}},
+{{9156436603938003020ull, 1994088482164822ull}},
+{{18393195727376133388ull, 1595270785731857ull}},
+{{7335858952417086064ull, 1276216628585486ull}},
+{{4358676694383517056ull, 2041946605736778ull}},
+{{10865638984990634288ull, 1633557284589422ull}},
+{{1313813558508686784ull, 1306845827671538ull}},
+{{16859496952581540148ull, 2090953324274460ull}},
+{{13487597562065232120ull, 1672762659419568ull}},
+{{18168775679136006340ull, 1338210127535654ull}},
+{{18001994642391879180ull, 2141136204057047ull}},
+{{7022898084429682696ull, 1712908963245638ull}},
+{{12997016097027566804ull, 1370327170596510ull}},
+{{2348481681534555268ull, 2192523472954417ull}},
+{{12946831789453375184ull, 1754018778363533ull}},
+{{17736163061046520792ull, 1403215022690826ull}},
+{{2552419194481061008ull, 2245144036305323ull}},
+{{9420632985068669452ull, 1796115229044258ull}},
+{{14915204017538756208ull, 1436892183235406ull}},
+{{8242814399289094644ull, 1149513746588325ull}},
+{{13188503038862551432ull, 1839221994541320ull}},
+{{10550802431090041144ull, 1471377595633056ull}},
+{{4751293130130122592ull, 1177102076506445ull}},
+{{7602069008208196148ull, 1883363322410312ull}},
+{{17149701650792287888ull, 1506690657928249ull}},
+{{17409110135375740632ull, 1205352526342599ull}},
+{{16786529772375454044ull, 1928564042148159ull}},
+{{17118572632642273556ull, 1542851233718527ull}},
+{{6316160476629998200ull, 1234280986974822ull}},
+{{13795205577349907444ull, 1974849579159715ull}},
+{{11036164461879925956ull, 1579879663327772ull}},
+{{1450233940020120116ull, 1263903730662218ull}},
+{{17077769562999833480ull, 2022245969059548ull}},
+{{2594169206174135816ull, 1617796775247639ull}},
+{{5764684179681218976ull, 1294237420198111ull}},
+{{1844797058006129712ull, 2070779872316978ull}},
+{{8854535275888724416ull, 1656623897853582ull}},
+{{18151674664936710504ull, 1325299118282865ull}},
+{{10595935390189185188ull, 2120478589252585ull}},
+{{8476748312151348152ull, 1696382871402068ull}},
+{{14160096279204899168ull, 1357106297121654ull}},
+{{11588107602502107700ull, 2171370075394647ull}},
+{{1891788452517865512ull, 1737096060315718ull}},
+{{8892128391498113056ull, 1389676848252574ull}},
+{{3159358982171249920ull, 2223482957204119ull}},
+{{6216836000478910260ull, 1778786365763295ull}},
+{{4973468800383128208ull, 1423029092610636ull}},
+{{289426225564592244ull, 1138423274088509ull}},
+{{7841779590387168236ull, 1821477238541614ull}},
+{{9962772487051644912ull, 1457181790833291ull}},
+{{4280869174899405604ull, 1165745432666633ull}},
+{{3160041865097138648ull, 1865192692266613ull}},
+{{9906731121561531564ull, 1492154153813290ull}},
+{{7925384897249225252ull, 1193723323050632ull}},
+{{16369964650340670724ull, 1909957316881011ull}},
+{{9406622905530626256ull, 1527965853504809ull}},
+{{11214647139166411328ull, 1222372682803847ull}},
+{{3186040163698616832ull, 1955796292486156ull}},
+{{17306227389926534760ull, 1564637033988924ull}},
+{{17534330726683138128ull, 1251709627191139ull}},
+{{16986882718467290040ull, 2002735403505823ull}},
+{{2521459730548101060ull, 1602188322804659ull}},
+{{5706516599180391172ull, 1281750658243727ull}},
+{{12819775373430536200ull, 2050801053189963ull}},
+{{17634517928228249604ull, 1640640842551970ull}},
+{{14107614342582599684ull, 1312512674041576ull}},
+{{15193485318648338848ull, 2100020278466522ull}},
+{{4776090625434850432ull, 1680016222773218ull}},
+{{11199570129831700992ull, 1344012978218574ull}},
+{{6851265763504990620ull, 2150420765149719ull}},
+{{9170361425545902816ull, 1720336612119775ull}},
+{{7336289140436722252ull, 1376269289695820ull}},
+{{11738062624698755608ull, 2202030863513312ull}},
+{{2011752470275183840ull, 1761624690810650ull}},
+{{1609401976220147072ull, 1409299752648520ull}},
+{{1287521580976117656ull, 1127439802118816ull}},
+{{13128080973787519220ull, 1803903683390105ull}},
+{{10502464779030015376ull, 1443122946712084ull}},
+{{12091320637965922624ull, 1154498357369667ull}},
+{{4588717761777834908ull, 1847197371791468ull}},
+{{11049671838906088572ull, 1477757897433174ull}},
+{{12529086285866781180ull, 1182206317946539ull}},
+{{8978491613161118920ull, 1891530108714463ull}},
+{{14561490920012715780ull, 1513224086971570ull}},
+{{11649192736010172624ull, 1210579269577256ull}},
+{{11260010748132455556ull, 1936926831323610ull}},
+{{9008008598505964444ull, 1549541465058888ull}},
+{{14585104508288592200ull, 1239633172047110ull}},
+{{4889423139552195904ull, 1983413075275377ull}},
+{{14979584955867487692ull, 1586730460220301ull}},
+{{8294319149952079832ull, 1269384368176241ull}},
+{{5892213010439507084ull, 2031014989081986ull}},
+{{1024421593609695344ull, 1624811991265589ull}},
+{{4508886089629666600ull, 1299849593012471ull}},
+{{18282264187633197528ull, 2079759348819953ull}},
+{{3557764905880827052ull, 1663807479055963ull}},
+{{10224909554188482288ull, 1331045983244770ull}},
+{{16359855286701571664ull, 2129673573191632ull}},
+{{5709186599877436684ull, 1703738858553306ull}},
+{{878000465160039024ull, 1362991086842645ull}},
+{{1404800744256062436ull, 2180785738948232ull}},
+{{12191887039630580920ull, 1744628591158585ull}},
+{{9753509631704464736ull, 1395702872926868ull}},
+{{11916266595985233256ull, 2233124596682989ull}},
+{{13222362091530096928ull, 1786499677346391ull}},
+{{6888540858482167216ull, 1429199741877113ull}},
+{{12889530316269554420ull, 1143359793501690ull}},
+{{2176504432321735456ull, 1829375669602705ull}},
+{{1741203545857388364ull, 1463500535682164ull}},
+{{5082311651427821016ull, 1170800428545731ull}},
+{{753001012800692980ull, 1873280685673170ull}},
+{{602400810240554384ull, 1498624548538536ull}},
+{{15239315907160084800ull, 1198899638830828ull}},
+{{2246812563004673740ull, 1918239422129326ull}},
+{{16554845309371380284ull, 1534591537703460ull}},
+{{13243876247497104228ull, 1227673230162768ull}},
+{{17500853181253456440ull, 1964277168260429ull}},
+{{17690031359744675476ull, 1571421734608343ull}},
+{{3083978643570009412ull, 1257137387686675ull}},
+{{4934365829712015056ull, 2011419820298680ull}},
+{{3947492663769612044ull, 1609135856238944ull}},
+{{6847342945757599960ull, 1287308684991155ull}},
+{{10955748713212159936ull, 2059693895985848ull}},
+{{16143296600053548596ull, 1647755116788678ull}},
+{{1846590835817107908ull, 1318204093430943ull}},
+{{17711940596275013944ull, 2109126549489508ull}},
+{{3101506032794280184ull, 1687301239591607ull}},
+{{13549251270461155116ull, 1349840991673285ull}},
+{{3232057959028296572ull, 2159745586677257ull}},
+{{13653692811448368228ull, 1727796469341805ull}},
+{{10922954249158694580ull, 1382237175473444ull}},
+{{6408680354428180360ull, 2211579480757511ull}},
+{{1437595468800633964ull, 1769263584606009ull}},
+{{4839425189782417496ull, 1415410867684807ull}},
+{{14939586596051664964ull, 1132328694147845ull}},
+{{5456594479973112332ull, 1811725910636553ull}},
+{{11743973213462310512ull, 1449380728509242ull}},
+{{2016480941286027760ull, 1159504582807394ull}},
+{{10605067135541465064ull, 1855207332491830ull}},
+{{8484053708433172052ull, 1484165865993464ull}},
+{{10476591781488447964ull, 1187332692794771ull}},
+{{9383849220897696100ull, 1899732308471634ull}},
+{{11196428191460067200ull, 1519785846777307ull}},
+{{1578444923684233116ull, 1215828677421846ull}},
+{{13593558322120503952ull, 1945325883874953ull}},
+{{18253544287180223808ull, 1556260707099962ull}},
+{{7224137800260358400ull, 1245008565679970ull}},
+{{11558620480416573440ull, 1992013705087952ull}},
+{{1868198754849438108ull, 1593610964070362ull}},
+{{12562605448105281456ull, 1274888771256289ull}},
+{{9032122272742719360ull, 2039822034010063ull}},
+{{14604395447677996132ull, 1631857627208050ull}},
+{{11683516358142396904ull, 1305486101766440ull}},
+{{246882099318283436ull, 2088777762826305ull}},
+{{197505679454626748ull, 1671022210261044ull}},
+{{3847353358305611720ull, 1336817768208835ull}},
+{{6155765373288978756ull, 2138908429134136ull}},
+{{1235263483889272680ull, 1711126743307309ull}},
+{{4677559601853328468ull, 1368901394645847ull}},
+{{11173444177707235872ull, 2190242231433355ull}},
+{{8938755342165788696ull, 1752193785146684ull}},
+{{10840353088474541280ull, 1401755028117347ull}},
+{{2587169682591624756ull, 2242808044987756ull}},
+{{16827131005040941096ull, 1794246435990204ull}},
+{{17151053618774663200ull, 1435397148792163ull}},
+{{2652796450793999592ull, 1148317719033731ull}},
+{{15312520765496130316ull, 1837308350453969ull}},
+{{15939365427138814576ull, 1469846680363175ull}},
+{{12751492341711051660ull, 1175877344290540ull}},
+{{1955643673028131040ull, 1881403750864865ull}},
+{{1564514938422504832ull, 1505123000691892ull}},
+{{12319658394963734836ull, 1204098400553513ull}},
+{{16022104617200065416ull, 1926557440885621ull}},
+{{9128334879018142008ull, 1541245952708497ull}},
+{{18370714347440244576ull, 1232996762166797ull}},
+{{14635747696936750028ull, 1972794819466876ull}},
+{{8019249342807489700ull, 1578235855573501ull}},
+{{2726050659504081436ull, 1262588684458801ull}},
+{{15429727499432261268ull, 2020141895134081ull}},
+{{8654433184803898692ull, 1616113516107265ull}},
+{{6923546547843118952ull, 1292890812885812ull}},
+{{14767023291290900648ull, 2068625300617299ull}},
+{{15502967447774630840ull, 1654900240493839ull}},
+{{16091722772961614996ull, 1323920192395071ull}},
+{{18368058807254763348ull, 2118272307832114ull}},
+{{18383795860545721000ull, 1694617846265691ull}},
+{{11017687873694666476ull, 1355694277012553ull}},
+{{13938951783169556044ull, 2169110843220085ull}},
+{{11151161426535644832ull, 1735288674576068ull}},
+{{16299626770712336512ull, 1388230939660854ull}},
+{{15011356388914007452ull, 2221169503457367ull}},
+{{4630387481647385316ull, 1776935602765894ull}},
+{{7393658800059818576ull, 1421548482212715ull}},
+{{5914927040047854860ull, 1137238785770172ull}},
+{{13153232078818478100ull, 1819582057232275ull}},
+{{10522585663054782480ull, 1455665645785820ull}},
+{{8418068530443825984ull, 1164532516628656ull}},
+{{6090212019226300928ull, 1863252026605850ull}},
+{{4872169615381040740ull, 1490601621284680ull}},
+{{3897735692304832592ull, 1192481297027744ull}},
+{{13615074737171552796ull, 1907970075244390ull}},
+{{10892059789737242236ull, 1526376060195512ull}},
+{{1334950202305973144ull, 1221100848156410ull}},
+{{2135920323689557028ull, 1953761357050256ull}},
+{{16466131517919286916ull, 1563009085640204ull}},
+{{16862254029077339856ull, 1250407268512163ull}},
+{{4843513558072281832ull, 2000651629619462ull}},
+{{14942857290683556432ull, 1600521303695569ull}},
+{{15643634647288755468ull, 1280417042956455ull}},
+{{6583071361952457136ull, 2048667268730329ull}},
+{{8955805904303876032ull, 1638933814984263ull}},
+{{14543342352926921472ull, 1311147051987410ull}},
+{{4822603690973522740ull, 2097835283179857ull}},
+{{14926129397004549160ull, 1678268226543885ull}},
+{{11940903517603639328ull, 1342614581235108ull}},
+{{15416096813423912604ull, 2148183329976173ull}},
+{{1264831006513399112ull, 1718546663980939ull}},
+{{4701213619952629612ull, 1374837331184751ull}},
+{{143244162440386736ull, 2199739729895602ull}},
+{{11182641774178040356ull, 1759791783916481ull}},
+{{5256764604600521964ull, 1407833427133185ull}},
+{{4205411683680417568ull, 1126266741706548ull}},
+{{3039309879146757788ull, 1802026786730477ull}},
+{{13499494347543137200ull, 1441621429384381ull}},
+{{7110246663292599436ull, 1153297143507505ull}},
+{{11376394661268159100ull, 1845275429612008ull}},
+{{16479813358498347928ull, 1476220343689606ull}},
+{{9494501872056768016ull, 1180976274951685ull}},
+{{15191202995290828828ull, 1889562039922696ull}},
+{{8463613581490752740ull, 1511649631938157ull}},
+{{17838937309418333160ull, 1209319705550525ull}},
+{{10095555621359781444ull, 1934911528880841ull}},
+{{4387095682345914832ull, 1547929223104673ull}},
+{{10888374175360552512ull, 1238343378483738ull}},
+{{13732049865834973696ull, 1981349405573981ull}},
+{{7296291077926068632ull, 1585079524459185ull}},
+{{5837032862340854904ull, 1268063619567348ull}},
+{{5649903765003457528ull, 2028901791307757ull}},
+{{15587969456228496992ull, 1623121433046205ull}},
+{{12470375564982797592ull, 1298497146436964ull}},
+{{8884554459746745180ull, 2077595434299143ull}},
+{{14486341197281216788ull, 1662076347439314ull}},
+{{15278421772566883756ull, 1329661077951451ull}},
+{{17066777206623193360ull, 2127457724722322ull}},
+{{6274724135814734044ull, 1701966179777858ull}},
+{{12398476938135607880ull, 1361572943822286ull}},
+{{12458865471533151964ull, 2178516710115658ull}},
+{{17345790006710342216ull, 1742813368092526ull}},
+{{10187283190626363448ull, 1394250694474021ull}},
+{{8920955475518360872ull, 2230801111158434ull}},
+{{10826113195156599020ull, 1784640888926747ull}},
+{{1282192926641458572ull, 1427712711141398ull}},
+{{8404451970796987504ull, 1142170168913118ull}},
+{{9757774338533269684ull, 1827472270260989ull}},
+{{11495568285568526068ull, 1461977816208791ull}},
+{{5507105813712910532ull, 1169582252967033ull}},
+{{5122020487198746528ull, 1871331604747253ull}},
+{{11476314019242817868ull, 1497065283797802ull}},
+{{1802353585910433648ull, 1197652227038242ull}},
+{{6573114552198604160ull, 1916243563261187ull}},
+{{16326538085984614296ull, 1532994850608949ull}},
+{{16750579283529601760ull, 1226395880487159ull}},
+{{15732880409421631848ull, 1962233408779455ull}},
+{{12586304327537305480ull, 1569786727023564ull}},
+{{13758392276771754708ull, 1255829381618851ull}},
+{{14634730013350986884ull, 2009327010590162ull}},
+{{4329086381196968860ull, 1607461608472130ull}},
+{{3463269104957575088ull, 1285969286777704ull}},
+{{12919928197415940788ull, 2057550858844326ull}},
+{{6646593743190842308ull, 1646040687075461ull}},
+{{1627926179810763524ull, 1316832549660369ull}},
+{{9983379517181042284ull, 2106932079456590ull}},
+{{7986703613744833828ull, 1685545663565272ull}},
+{{17457409335221598032ull, 1348436530852217ull}},
+{{13174459677386915556ull, 2157498449363548ull}},
+{{17918265371393353092ull, 1725998759490838ull}},
+{{3266565852888951504ull, 1380799007592671ull}},
+{{16294551808848053376ull, 2209278412148273ull}},
+{{1967595002852711732ull, 1767422729718619ull}},
+{{5263424817024079708ull, 1413938183774895ull}},
+{{4210739853619263764ull, 1131150547019916ull}},
+{{17805230210016552996ull, 1809840875231865ull}},
+{{14244184168013242396ull, 1447872700185492ull}},
+{{4016649704926773272ull, 1158298160148394ull}},
+{{13805337157366657880ull, 1853277056237430ull}},
+{{11044269725893326304ull, 1482621644989944ull}},
+{{12524764595456571364ull, 1186097315991955ull}},
+{{1592879279020962568ull, 1897755705587129ull}},
+{{4963652237958680380ull, 1518204564469703ull}},
+{{11349619419850764948ull, 1214563651575762ull}},
+{{3401995812793582628ull, 1943301842521220ull}},
+{{2721596650234866100ull, 1554641474016976ull}},
+{{16934672579155534172ull, 1243713179213580ull}},
+{{8648732052939303064ull, 1989941086741729ull}},
+{{10608334457093352772ull, 1591952869393383ull}},
+{{15865365195158502864ull, 1273562295514706ull}},
+{{18005886682769783936ull, 2037699672823530ull}},
+{{14404709346215827148ull, 1630159738258824ull}},
+{{15213116291714572044ull, 1304127790607059ull}},
+{{13272939622517584300ull, 2086604464971295ull}},
+{{10618351698014067440ull, 1669283571977036ull}},
+{{4805332543669343628ull, 1335426857581629ull}},
+{{15067229699354770452ull, 2136682972130606ull}},
+{{8364434944741906040ull, 1709346377704485ull}},
+{{6691547955793524832ull, 1367477102163588ull}},
+{{7017127914527729408ull, 2187963363461741ull}},
+{{1924353516880273200ull, 1750370690769393ull}},
+{{8918180442988039208ull, 1400296552615514ull}},
+{{3201042264555131764ull, 2240474484184823ull}},
+{{9939531441127926056ull, 1792379587347858ull}},
+{{15330322782386161492ull, 1433903669878286ull}},
+{{8574909411167018868ull, 1147122935902629ull}},
+{{2651808613641499224ull, 1835396697444207ull}},
+{{13189493335138930348ull, 1468317357955365ull}},
+{{10551594668111144276ull, 1174653886364292ull}},
+{{2125156210010189552ull, 1879446218182868ull}},
+{{9078822597491972288ull, 1503556974546294ull}},
+{{10952406892735488152ull, 1202845579637035ull}},
+{{17523851028376781044ull, 1924552927419256ull}},
+{{10329732007959514512ull, 1539642341935405ull}},
+{{8263785606367611612ull, 1231713873548324ull}},
+{{2154010525962447608ull, 1970742197677319ull}},
+{{5412557235511868408ull, 1576593758141855ull}},
+{{4330045788409494728ull, 1261275006513484ull}},
+{{14306770890939012212ull, 2018040010421574ull}},
+{{15134765527493120092ull, 1614432008337259ull}},
+{{15797161236736406396ull, 1291545606669807ull}},
+{{10518062719810608940ull, 2066472970671692ull}},
+{{1035752546364666508ull, 1653178376537354ull}},
+{{4517950851833643528ull, 1322542701229883ull}},
+{{3539372548191919324ull, 2116068321967813ull}},
+{{10210195668037356104ull, 1692854657574250ull}},
+{{8168156534429884884ull, 1354283726059400ull}},
+{{13069050455087815812ull, 2166853961695040ull}},
+{{10455240364070252652ull, 1733483169356032ull}},
+{{985494661772381472ull, 1386786535484826ull}},
+{{12644837903061541328ull, 2218858456775721ull}},
+{{6426521507707322740ull, 1775086765420577ull}},
+{{16209263650391589160ull, 1420069412336461ull}},
+{{9278062105571361004ull, 1136055529869169ull}},
+{{3776852924688446640ull, 1817688847790671ull}},
+{{17778877598718398604ull, 1454151078232536ull}},
+{{10533753264232808560ull, 1163320862586029ull}},
+{{5785958778546762728ull, 1861313380137647ull}},
+{{15696813467063141152ull, 1489050704110117ull}},
+{{5178753144166692272ull, 1191240563288094ull}},
+{{15664702660150528284ull, 1905984901260950ull}},
+{{12531762128120422628ull, 1524787921008760ull}},
+{{10025409702496338104ull, 1219830336807008ull}},
+{{12351306709252230640ull, 1951728538891213ull}},
+{{17259742996885605160ull, 1561382831112970ull}},
+{{13807794397508484128ull, 1249106264890376ull}},
+{{14713773406529753956ull, 1998570023824602ull}},
+{{4392321095739982520ull, 1598856019059682ull}},
+{{14581903320817716984ull, 1279084815247745ull}},
+{{4884301239598795560ull, 2046535704396393ull}},
+{{11286138621162857096ull, 1637228563517114ull}},
+{{12718259711672196000ull, 1309782850813691ull}},
+{{12970517909191692952ull, 2095652561301906ull}},
+{{6687065512611444040ull, 1676522049041525ull}},
+{{5349652410089155232ull, 1341217639233220ull}},
+{{8559443856142648368ull, 2145948222773152ull}},
+{{17915601529139849664ull, 1716758578218521ull}},
+{{10643132408569969408ull, 1373406862574817ull}},
+{{2271616594744309760ull, 2197450980119708ull}},
+{{9195990905279268456ull, 1757960784095766ull}},
+{{3667443909481504440ull, 1406368627276613ull}},
+{{2178561440428496784ull, 2250189803642581ull}},
+{{16500244411310438720ull, 1800151842914064ull}},
+{{16889544343790261296ull, 1440121474331251ull}},
+{{9822286660290298716ull, 1152097179465001ull}},
+{{8336961026980657300ull, 1843355487144002ull}},
+{{17737615265810256808ull, 1474684389715201ull}},
+{{10500743397906295124ull, 1179747511772161ull}},
+{{9422491807166251552ull, 1887596018835458ull}},
+{{14916691075216821888ull, 1510076815068366ull}},
+{{8244004045431547184ull, 1208061452054693ull}},
+{{9501057657948565176ull, 1932898323287509ull}},
+{{11290194941100762464ull, 1546318658630007ull}},
+{{1653458323396789324ull, 1237054926904006ull}},
+{{13713579761660593888ull, 1979287883046409ull}},
+{{14660212624070385432ull, 1583430306437127ull}},
+{{4349472469772487700ull, 1266744245149702ull}},
+{{10648504766377890644ull, 2026790792239523ull}},
+{{15897501442586133160ull, 1621432633791618ull}},
+{{1649954709843175560ull, 1297146107033295ull}},
+{{2639927535749080896ull, 2075433771253272ull}},
+{{13179988472824995688ull, 1660347017002617ull}},
+{{3165293148776175904ull, 1328277613602094ull}},
+{{12443166667525702092ull, 2125244181763350ull}},
+{{9954533334020561672ull, 1700195345410680ull}},
+{{7963626667216449336ull, 1360156276328544ull}},
+{{1673756223320587972ull, 2176250042125671ull}},
+{{16096400237624111668ull, 1741000033700536ull}},
+{{9187771375357379012ull, 1392800026960429ull}},
+{{3632387756346075452ull, 2228480043136687ull}},
+{{13973956649302591332ull, 1782784034509349ull}},
+{{14868514134183983388ull, 1426227227607479ull}},
+{{15584160122089097032ull, 1140981782085983ull}},
+{{2798563306891093312ull, 1825570851337574ull}},
+{{5928199460254784972ull, 1460456681070059ull}},
+{{8431908382945738300ull, 1168365344856047ull}},
+{{17180402227455091608ull, 1869384551769675ull}},
+{{13744321781964073284ull, 1495507641415740ull}},
+{{10995457425571258628ull, 1196406113132592ull}},
+{{2835336621946372512ull, 1914249781012148ull}},
+{{9646966927040918656ull, 1531399824809718ull}},
+{{15096271171116555572ull, 1225119859847774ull}},
+{{13085987429560757944ull, 1960191775756439ull}},
+{{14158138758390516680ull, 1568153420605151ull}},
+{{7637162191970503020ull, 1254522736484121ull}},
+{{4840761877668984188ull, 2007236378374594ull}},
+{{7561958316877097672ull, 1605789102699675ull}},
+{{6049566653501678136ull, 1284631282159740ull}},
+{{9679306645602685020ull, 2055410051455584ull}},
+{{11432794131224058340ull, 1644328041164467ull}},
+{{1767537675495426024ull, 1315462432931574ull}},
+{{10206757910276502288ull, 2104739892690518ull}},
+{{15544103957705022476ull, 1683791914152414ull}},
+{{16124631980905928304ull, 1347033531321931ull}},
+{{18420713539965664640ull, 2155253650115090ull}},
+{{14736570831972531712ull, 1724202920092072ull}},
+{{4410559036094204724ull, 1379362336073658ull}},
+{{3367545643008817236ull, 2206979737717853ull}},
+{{10072734143890874432ull, 1765583790174282ull}},
+{{679489685628878900ull, 1412467032139426ull}},
+{{15300987007470744412ull, 1129973625711540ull}},
+{{6034835138243639444ull, 1807957801138465ull}},
+{{4827868110594911556ull, 1446366240910772ull}},
+{{14930340932701660212ull, 1157092992728617ull}},
+{{9131150233355015052ull, 1851348788365788ull}},
+{{14683617816167832688ull, 1481079030692630ull}},
+{{11746894252934266148ull, 1184863224554104ull}},
+{{7726984360469094868ull, 1895781159286567ull}},
+{{17249633932601006864ull, 1516624927429253ull}},
+{{2731660701855074520ull, 1213299941943403ull}},
+{{681308308226208912ull, 1941279907109445ull}},
+{{545046646580967128ull, 1553023925687556ull}},
+{{15193432576232414996ull, 1242419140550044ull}},
+{{13241445677746133024ull, 1987870624880071ull}},
+{{6903807727454996096ull, 1590296499904057ull}},
+{{16591092626189727848ull, 1272237199923245ull}},
+{{8099004128194012940ull, 2035579519877193ull}},
+{{13857900932039030996ull, 1628463615901754ull}},
+{{14775669560373135120ull, 1302770892721403ull}},
+{{1504978408145554256ull, 2084433428354246ull}},
+{{15961377985484084696ull, 1667546742683396ull}},
+{{9079753573645357436ull, 1334037394146717ull}},
+{{18216954532574482220ull, 2134459830634747ull}},
+{{7194865996575765128ull, 1707567864507798ull}},
+{{13134590426744432748ull, 1366054291606238ull}},
+{{17325995868049182076ull, 2185686866569981ull}},
+{{10171447879697435336ull, 1748549493255985ull}},
+{{8137158303757948268ull, 1398839594604788ull}},
+{{9330104471270806908ull, 2238143351367661ull}},
+{{3774734762274735204ull, 1790514681094129ull}},
+{{6709136624561698484ull, 1432411744875303ull}},
+{{12746006929133179436ull, 1145929395900242ull}},
+{{5636215827645445804ull, 1833487033440388ull}},
+{{11887670291600177288ull, 1466789626752310ull}},
+{{9510136233280141832ull, 1173431701401848ull}},
+{{11526869158506316608ull, 1877490722242957ull}},
+{{1842797697321232640ull, 1501992577794366ull}},
+{{16231633416824627404ull, 1201594062235492ull}},
+{{11213218207951762552ull, 1922550499576788ull}},
+{{16349272195845230688ull, 1538040399661430ull}},
+{{13079417756676184552ull, 1230432319729144ull}},
+{{9859021966456164312ull, 1968691711566631ull}},
+{{4197868758423021128ull, 1574953369253305ull}},
+{{3358295006738416900ull, 1259962695402644ull}},
+{{12751969640265287688ull, 2015940312644230ull}},
+{{10201575712212230152ull, 1612752250115384ull}},
+{{11850609384511694444ull, 1290201800092307ull}},
+{{4203579756251069820ull, 2064322880147692ull}},
+{{14430910249226586824ull, 1651458304118153ull}},
+{{476681755155538488ull, 1321166643294523ull}},
+{{15520086067216502876ull, 2113866629271236ull}},
+{{8726720039031291976ull, 1691093303416989ull}},
+{{10670724845966943904ull, 1352874642733591ull}},
+{{9694462124063289604ull, 2164599428373746ull}},
+{{4066220884508721360ull, 1731679542698997ull}},
+{{14321023151832708056ull, 1385343634159197ull}},
+{{8156241783964691596ull, 2216549814654716ull}},
+{{2835644612429842956ull, 1773239851723773ull}},
+{{9647213319427695008ull, 1418591881379018ull}},
+{{15096468285025976652ull, 1134873505103214ull}},
+{{13086302811815831676ull, 1815797608165143ull}},
+{{17847739878936485988ull, 1452638086532114ull}},
+{{17967540717891099112ull, 1162110469225691ull}},
+{{2922623445432386320ull, 1859376750761107ull}},
+{{13406145200571640024ull, 1487501400608885ull}},
+{{10724916160457312020ull, 1190001120487108ull}},
+{{13470517041989788908ull, 1904001792779373ull}},
+{{18155111263075651772ull, 1523201434223498ull}},
+{{3456042566234790448ull, 1218561147378799ull}},
+{{12908365735459485368ull, 1949697835806078ull}},
+{{17705390217851408940ull, 1559758268644862ull}},
+{{6785614544797306504ull, 1247806614915890ull}},
+{{10856983271675690408ull, 1996490583865424ull}},
+{{12374935432082462648ull, 1597192467092339ull}},
+{{13589297160407880444ull, 1277753973673871ull}},
+{{14364177827168788064ull, 2044406357878194ull}},
+{{15180691076476940772ull, 1635525086302555ull}},
+{{12144552861181552616ull, 1308420069042044ull}},
+{{8363238133664753220ull, 2093472110467271ull}},
+{{3001241692189892252ull, 1674777688373817ull}},
+{{13469039797977644772ull, 1339822150699053ull}},
+{{17861114862022321312ull, 2143715441118485ull}},
+{{14288891889617857048ull, 1714972352894788ull}},
+{{363067067468554668ull, 1371977882315831ull}},
+{{11648953752175418440ull, 2195164611705329ull}},
+{{13008511816482245076ull, 1756131689364263ull}},
+{{17785507082669616708ull, 1404905351491410ull}},
+{{10010067258561835116ull, 2247848562386257ull}},
+{{629356177365647448ull, 1798278849909006ull}},
+{{15260880200860159248ull, 1438623079927204ull}},
+{{15898052975430037724ull, 1150898463941763ull}},
+{{3300791872236598416ull, 1841437542306822ull}},
+{{13708679942015009704ull, 1473150033845457ull}},
+{{3588246324128187116ull, 1178520027076366ull}},
+{{16809240562830830356ull, 1885632043322185ull}},
+{{13447392450264664284ull, 1508505634657748ull}},
+{{18136611589695552072ull, 1206804507726198ull}},
+{{6882485655061421380ull, 1930887212361918ull}},
+{{12884686153532957748ull, 1544709769889534ull}},
+{{13997097737568276524ull, 1235767815911627ull}},
+{{7637961121141601144ull, 1977228505458604ull}},
+{{9799717711655191240ull, 1581782804366883ull}},
+{{15218471798807973636ull, 1265426243493506ull}},
+{{16970857248608937172ull, 2024681989589610ull}},
+{{13576685798887149740ull, 1619745591671688ull}},
+{{18240046268593540436ull, 1295796473337350ull}},
+{{10737329956040113084ull, 2073274357339761ull}},
+{{4900515150090180144ull, 1658619485871809ull}},
+{{7609760934814054436ull, 1326895588697447ull}},
+{{15864966310444397424ull, 2123032941915915ull}},
+{{12691973048355517940ull, 1698426353532732ull}},
+{{2774880809200593704ull, 1358741082826186ull}},
+{{15507855738946680900ull, 2173985732521897ull}},
+{{5027586961673524072ull, 1739188586017518ull}},
+{{11400767198822639904ull, 1391350868814014ull}},
+{{7173181073890492876ull, 2226161390102423ull}},
+{{13117242488596214948ull, 1780929112081938ull}},
+{{17872491620360792604ull, 1424743289665550ull}},
+{{14297993296288634084ull, 1139794631732440ull}},
+{{4430045200352262920ull, 1823671410771905ull}},
+{{3544036160281810336ull, 1458937128617524ull}},
+{{6524577742967358592ull, 1167149702894019ull}},
+{{17818022018231594392ull, 1867439524630430ull}},
+{{14254417614585275512ull, 1493951619704344ull}},
+{{15092882906410130732ull, 1195161295763475ull}},
+{{5701868576546657560ull, 1912258073221561ull}},
+{{872146046495415724ull, 1529806458577249ull}},
+{{4387065651938242900ull, 1223845166861799ull}},
+{{14398002672585009288ull, 1958152266978878ull}},
+{{450355693842276460ull, 1566521813583103ull}},
+{{7738982184557641816ull, 1253217450866482ull}},
+{{16071720310034137228ull, 2005147921386371ull}},
+{{9168027433285399460ull, 1604118337109097ull}},
+{{18402468390854050536ull, 1283294669687277ull}},
+{{14686554166398839568ull, 2053271471499644ull}},
+{{15438592147860981976ull, 1642617177199715ull}},
+{{12350873718288785580ull, 1314093741759772ull}},
+{{5004002690294415636ull, 2102549986815636ull}},
+{{313853337493622188ull, 1682039989452509ull}},
+{{3940431484736808072ull, 1345631991562007ull}},
+{{9994039190320803240ull, 2153011186499211ull}},
+{{4305882537514732268ull, 1722408949199369ull}},
+{{7134054844753696136ull, 1377927159359495ull}},
+{{11414487751605913820ull, 2204683454975192ull}},
+{{1752892571800910408ull, 1763746763980154ull}},
+{{5091662872182638652ull, 1410997411184123ull}},
+{{11452027927229931568ull, 1128797928947298ull}},
+{{14633895868825980184ull, 1806076686315677ull}},
+{{4328419065576963500ull, 1444861349052542ull}},
+{{14530781696687301768ull, 1155889079242033ull}},
+{{1113157826248220892ull, 1849422526787254ull}},
+{{4579875075740487036ull, 1479538021429803ull}},
+{{11042597690076210276ull, 1183630417143842ull}},
+{{2910761045154295152ull, 1893808667430148ull}},
+{{9707306465607256768ull, 1515046933944118ull}},
+{{15144542801969626060ull, 1212037547155294ull}},
+{{13163222038925670728ull, 1939260075448471ull}},
+{{6841228816398626256ull, 1551408060358777ull}},
+{{16541029497344631976ull, 1241126448287021ull}},
+{{640205492558038900ull, 1985802317259235ull}},
+{{512164394046431120ull, 1588641853807388ull}},
+{{7788429144720965540ull, 1270913483045910ull}},
+{{12461486631553544868ull, 2033461572873456ull}},
+{{6279840490500925568ull, 1626769258298765ull}},
+{{5023872392400740456ull, 1301415406639012ull}},
+{{11727544642583095052ull, 2082264650622419ull}},
+{{13071384528808386364ull, 1665811720497935ull}},
+{{10457107623046709092ull, 1332649376398348ull}},
+{{13042023382132824224ull, 2132239002237357ull}},
+{{3054921076222438732ull, 1705791201789886ull}},
+{{17201332119945592280ull, 1364632961431908ull}},
+{{5386038503461485708ull, 2183412738291054ull}},
+{{7998179617511098888ull, 1746730190632843ull}},
+{{13777241323492699756ull, 1397384152506274ull}},
+{{10975539673362588644ull, 2235814644010039ull}},
+{{12469780553431981236ull, 1788651715208031ull}},
+{{6286475628003674668ull, 1430921372166425ull}},
+{{5029180502402939732ull, 1144737097733140ull}},
+{{8046688803844703572ull, 1831579356373024ull}},
+{{10126699857817673180ull, 1465263485098419ull}},
+{{11790708700996048868ull, 1172210788078735ull}},
+{{418389847884126576ull, 1875537260925977ull}},
+{{11402758322533032228ull, 1500429808740781ull}},
+{{5432857843284515460ull, 1200343846992625ull}},
+{{8692572549255224736ull, 1920550155188200ull}},
+{{6954058039404179788ull, 1536440124150560ull}},
+{{5563246431523343832ull, 1229152099320448ull}},
+{{5211845475695439808ull, 1966643358912717ull}},
+{{15237522824782082816ull, 1573314687130173ull}},
+{{1121971815599935280ull, 1258651749704139ull}},
+{{9173852534443717100ull, 2013842799526622ull}},
+{{18407128471780704648ull, 1611074239621297ull}},
+{{7347005147940743072ull, 1288859391697038ull}},
+{{8065859421963278592ull, 2062175026715261ull}},
+{{2763338722828712552ull, 1649740021372209ull}},
+{{5900019793004880364ull, 1319792017097767ull}},
+{{13129380483549718904ull, 2111667227356427ull}},
+{{3124806757355954476ull, 1689333781885142ull}},
+{{13567891850110494552ull, 1351467025508113ull}},
+{{18019278145434880960ull, 2162347240812981ull}},
+{{10726073701605994444ull, 1729877792650385ull}},
+{{8580858961284795556ull, 1383902234120308ull}},
+{{10040025523313762564ull, 2214243574592493ull}},
+{{15410718048134830700ull, 1771394859673994ull}},
+{{16017923253249774880ull, 1417115887739195ull}},
+{{12814338602599819904ull, 1133692710191356ull}},
+{{13124244134675891204ull, 1813908336306170ull}},
+{{10499395307740712960ull, 1451126669044936ull}},
+{{4710167431450660044ull, 1160901335235949ull}},
+{{14914965519804876720ull, 1857442136377518ull}},
+{{863925971618170408ull, 1485953709102015ull}},
+{{691140777294536324ull, 1188762967281612ull}},
+{{4795174058413168444ull, 1902020747650579ull}},
+{{7525488061472445080ull, 1521616598120463ull}},
+{{13399088078661776708ull, 1217293278496370ull}},
+{{2991796852149291120ull, 1947669245594193ull}},
+{{9772135111203253540ull, 1558135396475354ull}},
+{{11507056903704513156ull, 1246508317180283ull}},
+{{14721942231185310728ull, 1994413307488453ull}},
+{{709507340722517612ull, 1595530645990763ull}},
+{{7946303502061834736ull, 1276424516792610ull}},
+{{12714085603298935580ull, 2042279226868176ull}},
+{{6481919667897238140ull, 1633823381494541ull}},
+{{1496186919575880188ull, 1307058705195633ull}},
+{{17151294330289049592ull, 2091293928313012ull}},
+{{6342337834747419028ull, 1673035142650410ull}},
+{{5073870267797935224ull, 1338428114120328ull}},
+{{4428843613734786032ull, 2141484982592525ull}},
+{{3543074890987828828ull, 1713187986074020ull}},
+{{2834459912790263060ull, 1370550388859216ull}},
+{{15603182304690151868ull, 2192880622174745ull}},
+{{12482545843752121496ull, 1754304497739796ull}},
+{{6296687860259786872ull, 1403443598191837ull}},
+{{13764049391157569320ull, 2245509757106939ull}},
+{{14700588327667965780ull, 1796407805685551ull}},
+{{8071121847392462300ull, 1437126244548441ull}},
+{{2767548663172059516ull, 1149700995638753ull}},
+{{738729046333384904ull, 1839521593022005ull}},
+{{590983237066707920ull, 1471617274417604ull}},
+{{4162135404395276660ull, 1177293819534083ull}},
+{{2970067832290532336ull, 1883670111254533ull}},
+{{9754751895316246512ull, 1506936089003626ull}},
+{{4114452701511086888ull, 1205548871202901ull}},
+{{17651170766643469992ull, 1928878193924641ull}},
+{{10431587798572865668ull, 1543102555139713ull}},
+{{15723967868342113180ull, 1234482044111770ull}},
+{{6711604515637829476ull, 1975171270578833ull}},
+{{12747981241994084224ull, 1580137016463066ull}},
+{{6509036178853357056ull, 1264109613170453ull}},
+{{6725109071423460968ull, 2022575381072725ull}},
+{{5380087257138768776ull, 1618060304858180ull}},
+{{4304069805711015020ull, 1294448243886544ull}},
+{{14265209318621444680ull, 2071117190218470ull}},
+{{11412167454897155744ull, 1656893752174776ull}},
+{{5440385149175814272ull, 1325515001739821ull}},
+{{1325918609197482188ull, 2120824002783714ull}},
+{{4750083702099896072ull, 1696659202226971ull}},
+{{110718146938006536ull, 1357327361781577ull}},
+{{3866497849842720780ull, 2171723778850523ull}},
+{{10471895909357997272ull, 1737379023080418ull}},
+{{15756214356970218464ull, 1389903218464334ull}},
+{{14141896526926618572ull, 2223845149542935ull}},
+{{11313517221541294856ull, 1779076119634348ull}},
+{{16429511406716856532ull, 1423260895707478ull}},
+{{2075562681147754256ull, 1138608716565983ull}},
+{{18078295548804048100ull, 1821773946505572ull}},
+{{7083938809559417836ull, 1457419157204458ull}},
+{{13045848677131354912ull, 1165935325763566ull}},
+{{13494660253926347216ull, 1865496521221706ull}},
+{{7106379388399167448ull, 1492397216977365ull}},
+{{5685103510719333960ull, 1193917773581892ull}},
+{{12785514431892844660ull, 1910268437731027ull}},
+{{2849713916030455080ull, 1528214750184822ull}},
+{{13347817577050095032ull, 1222571800147857ull}},
+{{6599112864312510764ull, 1956114880236572ull}},
+{{16347336735675739580ull, 1564891904189257ull}},
+{{5699171759056771016ull, 1251913523351406ull}},
+{{1739977185007012980ull, 2003061637362250ull}},
+{{1391981748005610384ull, 1602449309889800ull}},
+{{1113585398404488308ull, 1281959447911840ull}},
+{{1781736637447181292ull, 2051135116658944ull}},
+{{5114738124699655356ull, 1640908093327155ull}},
+{{4091790499759724284ull, 1312726474661724ull}},
+{{13925562429099379504ull, 2100362359458758ull}},
+{{72403499053772632ull, 1680289887567007ull}},
+{{11125969243468749076ull, 1344231910053605ull}},
+{{17801550789549998524ull, 2150771056085768ull}},
+{{3173194187414267848ull, 1720616844868615ull}},
+{{2538555349931414276ull, 1376493475894892ull}},
+{{7751037374632173168ull, 2202389561431827ull}},
+{{17268876343931469504ull, 1761911649145461ull}},
+{{10125752260403265280ull, 1409529319316369ull}},
+{{11789950623064522548ull, 1127623455453095ull}},
+{{417176923193684460ull, 1804197528724953ull}},
+{{7712439168038768216ull, 1443358022979962ull}},
+{{17237997778656745540ull, 1154686418383969ull}},
+{{16512750001625061896ull, 1847498269414351ull}},
+{{9520851186558139192ull, 1477998615531481ull}},
+{{3927332134504601032ull, 1182398892425185ull}},
+{{6283731415207361652ull, 1891838227880296ull}},
+{{1337636317423978996ull, 1513470582304237ull}},
+{{12138155498164914168ull, 1210776465843389ull}},
+{{8353002352838131700ull, 1937242345349423ull}},
+{{14061099511754326004ull, 1549793876279538ull}},
+{{180833165177729836ull, 1239835101023631ull}},
+{{11357379508510098704ull, 1983736161637809ull}},
+{{12775252421549989288ull, 1586988929310247ull}},
+{{2841504307756170784ull, 1269591143448198ull}},
+{{857058077667962932ull, 2031345829517117ull}},
+{{11753692906360101312ull, 1625076663613693ull}},
+{{16781651954571901696ull, 1300061330890954ull}},
+{{15782596683089311748ull, 2080098129425527ull}},
+{{5247379716987628752ull, 1664078503540422ull}},
+{{15265950217815833968ull, 1331262802832337ull}},
+{{9668125089537693060ull, 2130020484531740ull}},
+{{7734500071630154448ull, 1704016387625392ull}},
+{{17255646501529854528ull, 1363213110100313ull}},
+{{5472941513996305304ull, 2181140976160502ull}},
+{{15446399655422775212ull, 1744912780928401ull}},
+{{8667770909596309848ull, 1395930224742721ull}},
+{{6489735825870275112ull, 2233488359588354ull}},
+{{8881137475438130412ull, 1786790687670683ull}},
+{{14483607609834324976ull, 1429432550136546ull}},
+{{7897537273125549656ull, 1143546040109237ull}},
+{{16325408451742789776ull, 1829673664174779ull}},
+{{16749675576136142144ull, 1463738931339823ull}},
+{{2331694016683182744ull, 1170991145071859ull}},
+{{11109408056176913036ull, 1873585832114974ull}},
+{{12576875259683440752ull, 1498868665691979ull}},
+{{13750849022488662924ull, 1199094932553583ull}},
+{{18312009621239950360ull, 1918551892085733ull}},
+{{3581561252766229316ull, 1534841513668587ull}},
+{{13933295446438714424ull, 1227873210934869ull}},
+{{11225226270076212108ull, 1964597137495791ull}},
+{{5290832201319059364ull, 1571677709996633ull}},
+{{11611363390539068136ull, 1257342167997306ull}},
+{{11199483795378688372ull, 2011747468795690ull}},
+{{8959587036302950696ull, 1609397975036552ull}},
+{{18235716073268091528ull, 1287518380029241ull}},
+{{3351704014035574184ull, 2060029408046787ull}},
+{{13749409655454190316ull, 1648023526437429ull}},
+{{14688876539105262576ull, 1318418821149943ull}},
+{{1366109574116958180ull, 2109470113839910ull}},
+{{1092887659293566544ull, 1687576091071928ull}},
+{{8253007756918673884ull, 1350060872857542ull}},
+{{16894161225811788536ull, 2160097396572067ull}},
+{{6136631351165610180ull, 1728077917257654ull}},
+{{8598653895674398468ull, 1382462333806123ull}},
+{{10068497418337127228ull, 2211939734089797ull}},
+{{676100305185881136ull, 1769551787271838ull}},
+{{7919577873632525552ull, 1415641429817470ull}},
+{{6335662298906020444ull, 1132513143853976ull}},
+{{2758362048765812064ull, 1812021030166362ull}},
+{{13274736083238380620ull, 1449616824133089ull}},
+{{14309137681332614820ull, 1159693459306471ull}},
+{{15515922660648363064ull, 1855509534890354ull}},
+{{16102086943260600776ull, 1484407627912283ull}},
+{{1813623110382749648ull, 1187526102329827ull}},
+{{6591145791354309764ull, 1900041763727723ull}},
+{{12651614262567268456ull, 1520033410982178ull}},
+{{17499989039537635412ull, 1216026728785742ull}},
+{{13242587204292575368ull, 1945642766057188ull}},
+{{17972767392917880940ull, 1556514212845750ull}},
+{{14378213914334304752ull, 1245211370276600ull}},
+{{4558398189225335988ull, 1992338192442561ull}},
+{{18404113810347910084ull, 1593870553954048ull}},
+{{3655244604052597096ull, 1275096443163239ull}},
+{{13227088995967976000ull, 2040154309061182ull}},
+{{3202973567290560152ull, 1632123447248946ull}},
+{{17319774112800089416ull, 1305698757799156ull}},
+{{1886196877286770804ull, 2089118012478651ull}},
+{{16266352760797057936ull, 1671294409982920ull}},
+{{13013082208637646348ull, 1337035527986336ull}},
+{{13442233904336413512ull, 2139256844778138ull}},
+{{18132484752952951456ull, 1711405475822510ull}},
+{{14505987802362361164ull, 1369124380658008ull}},
+{{1073487595328315924ull, 2190599009052814ull}},
+{{4548138891004563060ull, 1752479207242251ull}},
+{{18395906371771291740ull, 1401983365793800ull}},
+{{10986706121124515172ull, 2243173385270081ull}},
+{{5100016082157701816ull, 1794538708216065ull}},
+{{4080012865726161452ull, 1435630966572852ull}},
+{{14332056736806660128ull, 1148504773258281ull}},
+{{15552593149406835564ull, 1837607637213250ull}},
+{{12442074519525468448ull, 1470086109770600ull}},
+{{9953659615620374760ull, 1176068887816480ull}},
+{{15925855384992599616ull, 1881710220506368ull}},
+{{1672637863768348724ull, 1505368176405095ull}},
+{{1338110291014678976ull, 1204294541124076ull}},
+{{13209022909849217336ull, 1926871265798521ull}},
+{{6877869513137463544ull, 1541497012638817ull}},
+{{16570342054735701804ull, 1233197610111053ull}},
+{{4376454399125660952ull, 1973116176177686ull}},
+{{18258558778268170052ull, 1578492940942148ull}},
+{{3538800578388805072ull, 1262794352753719ull}},
+{{13040778554905908764ull, 2020470964405950ull}},
+{{10432622843924727008ull, 1616376771524760ull}},
+{{8346098275139781608ull, 1293101417219808ull}},
+{{9664408425481740248ull, 2068962267551693ull}},
+{{15110224369869212844ull, 1655169814041354ull}},
+{{15777528310637280600ull, 1324135851233083ull}},
+{{3107952408568187020ull, 2118617361972934ull}},
+{{6175710741596459940ull, 1694893889578347ull}},
+{{16008615037502898920ull, 1355915111662677ull}},
+{{10856388801036996984ull, 2169464178660284ull}},
+{{12374459855571507908ull, 1735571342928227ull}},
+{{2520870254973385680ull, 1388457074342582ull}},
+{{7722741222699327412ull, 2221531318948131ull}},
+{{2488844163417551608ull, 1777225055158505ull}},
+{{1991075330734041284ull, 1421780044126804ull}},
+{{5282209079329143352ull, 1137424035301443ull}},
+{{4762185712184719040ull, 1819878456482309ull}},
+{{7499097384489685552ull, 1455902765185847ull}},
+{{17067324351817479412ull, 1164722212148677ull}},
+{{12550323703940325768ull, 1863555539437884ull}},
+{{13729607777894170936ull, 1490844431550307ull}},
+{{3604988592831516104ull, 1192675545240246ull}},
+{{16836028192756156736ull, 1908280872384393ull}},
+{{2400776109979194420ull, 1526624697907515ull}},
+{{1920620887983355536ull, 1221299758326012ull}},
+{{6762342235515279180ull, 1954079613321619ull}},
+{{9099222603154133668ull, 1563263690657295ull}},
+{{7279378082523306932ull, 1250610952525836ull}},
+{{4268307302553470448ull, 2000977524041338ull}},
+{{10793343471526597004ull, 1600782019233070ull}},
+{{8634674777221277604ull, 1280625615386456ull}},
+{{6436782014070223520ull, 2049000984618330ull}},
+{{5149425611256178816ull, 1639200787694664ull}},
+{{7808889303746853376ull, 1311360630155731ull}},
+{{5115525256511144756ull, 2098177008249170ull}},
+{{4092420205208915804ull, 1678541606599336ull}},
+{{18031331423134773936ull, 1342833285279468ull}},
+{{6714037388564176356ull, 2148533256447150ull}},
+{{5371229910851341084ull, 1718826605157720ull}},
+{{4296983928681072868ull, 1375061284126176ull}},
+{{17943220730115447560ull, 2200098054601881ull}},
+{{10665227769350447724ull, 1760078443681505ull}},
+{{8532182215480358180ull, 1408062754945204ull}},
+{{10515094587126196864ull, 1126450203956163ull}},
+{{13134802524660004664ull, 1802320326329861ull}},
+{{6818493204986093408ull, 1441856261063889ull}},
+{{9144143378730785048ull, 1153485008851111ull}},
+{{7251931776485435432ull, 1845576014161778ull}},
+{{13180243050672168992ull, 1476460811329422ull}},
+{{3165496811053914548ull, 1181168649063538ull}},
+{{1375446082944352952ull, 1889869838501661ull}},
+{{15857752125323123656ull, 1511895870801328ull}},
+{{1618155256032767952ull, 1209516696641063ull}},
+{{17346443668620070020ull, 1935226714625700ull}},
+{{13877154934896056016ull, 1548181371700560ull}},
+{{11101723947916844812ull, 1238545097360448ull}},
+{{14073409501925041376ull, 1981672155776717ull}},
+{{3880029972056212456ull, 1585337724621374ull}},
+{{6793372792386880288ull, 1268270179697099ull}},
+{{18248094097302829108ull, 2029232287515358ull}},
+{{3530428833616532316ull, 1623385830012287ull}},
+{{13892389511118956820ull, 1298708664009829ull}},
+{{11159776773564599944ull, 2077933862415727ull}},
+{{1549123789367859308ull, 1662347089932582ull}},
+{{12307345475720018416ull, 1329877671946065ull}},
+{{1245008687442477852ull, 2127804275113705ull}},
+{{996006949953982280ull, 1702243420090964ull}},
+{{4486154374705096148ull, 1361794736072771ull}},
+{{18245893443753884808ull, 2178871577716433ull}},
+{{3528668310777376876ull, 1743097262173147ull}},
+{{13890981092847632472ull, 1394477809738517ull}},
+{{7468174489588570660ull, 2231164495581628ull}},
+{{13353237221154677176ull, 1784931596465302ull}},
+{{3303892147439921092ull, 1427945277172242ull}},
+{{13711160162177667844ull, 1142356221737793ull}},
+{{18248507444742358228ull, 1827769954780469ull}},
+{{18288154770535796904ull, 1462215963824375ull}},
+{{14630523816428637524ull, 1169772771059500ull}},
+{{4962094032576268424ull, 1871636433695201ull}},
+{{280326411319104416ull, 1497309146956161ull}},
+{{14981656388022924824ull, 1197847317564928ull}},
+{{1834557332385217780ull, 1916555708103886ull}},
+{{16225041124875815516ull, 1533244566483108ull}},
+{{1911986455674921444ull, 1226595653186487ull}},
+{{6748527143821784632ull, 1962553045098379ull}},
+{{9088170529799338028ull, 1570042436078703ull}},
+{{14649234053323291068ull, 1256033948862962ull}},
+{{8681379226349624420ull, 2009654318180740ull}},
+{{6945103381079699536ull, 1607723454544592ull}},
+{{16624129149089490596ull, 1286178763635673ull}},
+{{4462513750091723020ull, 2057886021817078ull}},
+{{10948708629557199060ull, 1646308817453662ull}},
+{{1380269274161938600ull, 1317047053962930ull}},
+{{2208430838659101764ull, 2107275286340688ull}},
+{{9145442300411102056ull, 1685820229072550ull}},
+{{7316353840328881644ull, 1348656183258040ull}},
+{{11706166144526210636ull, 2157849893212864ull}},
+{{13054281730362878832ull, 1726279914570291ull}},
+{{6754076569548392740ull, 1381023931656233ull}},
+{{7117173696535518064ull, 2209638290649973ull}},
+{{13072436586712235096ull, 1767710632519978ull}},
+{{17836646898853608724ull, 1414168506015982ull}},
+{{6890619889599066332ull, 1131334804812786ull}},
+{{3646294193874685484ull, 1810135687700458ull}},
+{{10295732984583569036ull, 1448108550160366ull}},
+{{4547237572924944904ull, 1158486840128293ull}},
+{{3586231301938001524ull, 1853578944205269ull}},
+{{6558333856292311544ull, 1482863155364215ull}},
+{{5246667085033849232ull, 1186290524291372ull}},
+{{12084016150796069096ull, 1898064838866195ull}},
+{{9667212920636855276ull, 1518451871092956ull}},
+{{4044421521767573900ull, 1214761496874365ull}},
+{{6471074434828118240ull, 1943618394998984ull}},
+{{8866208362604404912ull, 1554894715999187ull}},
+{{18161013134309254900ull, 1243915772799349ull}},
+{{17989574570669076872ull, 1990265236478959ull}},
+{{18081008471277171820ull, 1592212189183167ull}},
+{{7086109147537916808ull, 1273769751346534ull}},
+{{269728191834935928ull, 2038031602154455ull}},
+{{215782553467948740ull, 1630425281723564ull}},
+{{3861974857516269316ull, 1304340225378851ull}},
+{{17247206216251761876ull, 2086944360606161ull}},
+{{10108416158259499176ull, 1669555488484929ull}},
+{{11776081741349509664ull, 1335644390787943ull}},
+{{15152381971417305140ull, 2137031025260709ull}},
+{{15811254391875754436ull, 1709624820208567ull}},
+{{5270305884016782900ull, 1367699856166854ull}},
+{{15811187043910673292ull, 2188319769866966ull}},
+{{8959600820386628308ull, 1750655815893573ull}},
+{{14546378285793123292ull, 1400524652714858ull}},
+{{1138112368817535332ull, 2240839444343774ull}},
+{{4599838709795938588ull, 1792671555475019ull}},
+{{7369219782578661192ull, 1434137244380015ull}},
+{{5895375826062928952ull, 1147309795504012ull}},
+{{13121950136442596652ull, 1835695672806419ull}},
+{{14186908923895987644ull, 1468556538245135ull}},
+{{11349527139116790116ull, 1174845230596108ull}},
+{{14469894607844953860ull, 1879752368953773ull}},
+{{507869242050232120ull, 1503801895163019ull}},
+{{4095644208382096016ull, 1203041516130415ull}},
+{{6553030733411353628ull, 1924866425808664ull}},
+{{8931773401470993228ull, 1539893140646931ull}},
+{{3456069906434884256ull, 1231914512517545ull}},
+{{5529711850295814812ull, 1971063220028072ull}},
+{{15491815924462382820ull, 1576850576022457ull}},
+{{5014755110086085608ull, 1261480460817966ull}},
+{{644910546653916328ull, 2018368737308746ull}},
+{{15273323696290774356ull, 1614694989846996ull}},
+{{8529310142290709160ull, 1291755991877597ull}},
+{{17336245042407044984ull, 2066809587004155ull}},
+{{13868996033925635984ull, 1653447669603324ull}},
+{{14784545641882419112ull, 1322758135682659ull}},
+{{12587226582786139608ull, 2116413017092255ull}},
+{{10069781266228911688ull, 1693130413673804ull}},
+{{11745173827725039672ull, 1354504330939043ull}},
+{{15102929309618153152ull, 2167206929502469ull}},
+{{15771692262436432844ull, 1733765543601975ull}},
+{{12617353809949146276ull, 1387012434881580ull}},
+{{1741022022209082428ull, 2219219895810529ull}},
+{{5082166432509176264ull, 1775375916648423ull}},
+{{11444430775491161656ull, 1420300733318738ull}},
+{{16534242249876749972ull, 1136240586654990ull}},
+{{8008043526093248340ull, 1817984938647985ull}},
+{{6406434820874598672ull, 1454387950918388ull}},
+{{12503845486183499584ull, 1163510360734710ull}},
+{{1559408704184047720ull, 1861616577175537ull}},
+{{12315573407572969144ull, 1489293261740429ull}},
+{{13541807540800285640ull, 1191434609392343ull}},
+{{17977543250538546700ull, 1906295375027749ull}},
+{{18071383415172747684ull, 1525036300022199ull}},
+{{18146455546880108468ull, 1220029040017759ull}},
+{{17966282430782442580ull, 1952046464028415ull}},
+{{14373025944625954064ull, 1561637171222732ull}},
+{{4119723126216942604ull, 1249309736978186ull}},
+{{17659603446172839140ull, 1998895579165097ull}},
+{{6748985127454450664ull, 1599116463332078ull}},
+{{12777885731447381176ull, 1279293170665662ull}},
+{{5687221911348168592ull, 2046869073065060ull}},
+{{4549777529078534872ull, 1637495258452048ull}},
+{{11018519652746648544ull, 1309996206761638ull}},
+{{13940282629652727348ull, 2095993930818621ull}},
+{{7462877288980271556ull, 1676795144654897ull}},
+{{17038348275409948216ull, 1341436115723917ull}},
+{{12503961981688275852ull, 2146297785158268ull}},
+{{17381867214834441328ull, 1717038228126614ull}},
+{{17594842586609463384ull, 1373630582501291ull}},
+{{2326306435381769152ull, 2197808932002067ull}},
+{{12929091592531146292ull, 1758247145601653ull}},
+{{17721970903508737680ull, 1406597716481322ull}},
+{{13597758186646338996ull, 2250556346370116ull}},
+{{7188857734575160872ull, 1800445077096093ull}},
+{{13129783817143949344ull, 1440356061676874ull}},
+{{14193175868457069800ull, 1152284849341499ull}},
+{{11641034945305580708ull, 1843655758946399ull}},
+{{13002176770986374888ull, 1474924607157119ull}},
+{{14091090231531010236ull, 1179939685725695ull}},
+{{4099000296740064760ull, 1887903497161113ull}},
+{{10657897866875872456ull, 1510322797728890ull}},
+{{8526318293500697964ull, 1208258238183112ull}},
+{{17331458084343027064ull, 1933213181092979ull}},
+{{17554515282216331976ull, 1546570544874383ull}},
+{{2975565781547334612ull, 1237256435899507ull}},
+{{8450254065217645700ull, 1979610297439211ull}},
+{{3070854437432206236ull, 1583688237951369ull}},
+{{6146032364687675312ull, 1266950590361095ull}},
+{{9833651783500280500ull, 2027120944577752ull}},
+{{488223797316403756ull, 1621696755662202ull}},
+{{11458625482078853972ull, 1297357404529761ull}},
+{{10955103141842345712ull, 2075771847247618ull}},
+{{16142780142957697216ull, 1660617477798094ull}},
+{{16603572929108068096ull, 1328493982238475ull}},
+{{8118972612863357336ull, 2125590371581561ull}},
+{{2805829275548775544ull, 1700472297265249ull}},
+{{5934012235180930760ull, 1360377837812199ull}},
+{{16873117205773309864ull, 2176604540499518ull}},
+{{2430447320392916920ull, 1741283632399615ull}},
+{{1944357856314333536ull, 1393026905919692ull}},
+{{6800321384844843980ull, 2228843049471507ull}},
+{{16508303552101606156ull, 1783074439577205ull}},
+{{13206642841681284924ull, 1426459551661764ull}},
+{{14254663088086938260ull, 1141167641329411ull}},
+{{15428763311455280572ull, 1825868226127058ull}},
+{{1274964204938493488ull, 1460694580901647ull}},
+{{12088017808176525760ull, 1168555664721317ull}},
+{{4583433234114799924ull, 1869689063554108ull}},
+{{11045444216775660584ull, 1495751250843286ull}},
+{{5147006558678618144ull, 1196601000674629ull}},
+{{15613908123369609680ull, 1914561601079406ull}},
+{{8801777683953777420ull, 1531649280863525ull}},
+{{7041422147163021936ull, 1225319424690820ull}},
+{{11266275435460835096ull, 1960511079505312ull}},
+{{1634322718884847432ull, 1568408863604250ull}},
+{{1307458175107877944ull, 1254727090883400ull}},
+{{2091933080172604712ull, 2007563345413440ull}},
+{{1673546464138083768ull, 1606050676330752ull}},
+{{12406883615536197984ull, 1284840541064601ull}},
+{{12472316155374096132ull, 2055744865703362ull}},
+{{2599155294815456256ull, 1644595892562690ull}},
+{{2079324235852365004ull, 1315676714050152ull}},
+{{7016267592105694332ull, 2105082742480243ull}},
+{{12991711703168376112ull, 1684066193984194ull}},
+{{14082718177276611212ull, 1347252955187355ull}},
+{{4085605009933026324ull, 2155604728299769ull}},
+{{6957832822688331384ull, 1724483782639815ull}},
+{{5566266258150665108ull, 1379587026111852ull}},
+{{12595374827782974496ull, 2207339241778963ull}},
+{{17454997491710200240ull, 1765871393423170ull}},
+{{13963997993368160192ull, 1412697114738536ull}},
+{{7481849579952617832ull, 1130157691790829ull}},
+{{902912883698457560ull, 1808252306865327ull}},
+{{11790376751184497016ull, 1446601845492261ull}},
+{{5742952586205687292ull, 1157281476393809ull}},
+{{16567421767412920312ull, 1851650362230094ull}},
+{{16943286228672246572ull, 1481320289784075ull}},
+{{13554628982937797260ull, 1185056231827260ull}},
+{{3240662298990924000ull, 1896089970923617ull}},
+{{13660576283418470168ull, 1516871976738893ull}},
+{{18307158656218596780ull, 1213497581391114ull}},
+{{18223407405724023880ull, 1941596130225783ull}},
+{{3510679480353488132ull, 1553276904180627ull}},
+{{13876590028508521476ull, 1242621523344501ull}},
+{{14823846416129813716ull, 1988194437351202ull}},
+{{4480379503420030328ull, 1590555549880962ull}},
+{{14652350046961755232ull, 1272444439904769ull}},
+{{12375713630913077400ull, 2035911103847631ull}},
+{{6211222089988551596ull, 1628728883078105ull}},
+{{4968977671990841276ull, 1302983106462484ull}},
+{{15329061904669166692ull, 2084772970339974ull}},
+{{15952598338477243676ull, 1667818376271979ull}},
+{{16451427485523705264ull, 1334254701017583ull}},
+{{4186191088386466484ull, 2134807521628134ull}},
+{{7038301685451083508ull, 1707846017302507ull}},
+{{16698687792586597776ull, 1366276813842005ull}},
+{{8271156394429004828ull, 2186042902147209ull}},
+{{10306273930285114184ull, 1748834321717767ull}},
+{{866321514744270700ull, 1399067457374214ull}},
+{{8764812053074653768ull, 2238507931798742ull}},
+{{18079896086685453984ull, 1790806345438993ull}},
+{{3395870425122632216ull, 1432645076351195ull}},
+{{2716696340098105772ull, 1146116061080956ull}},
+{{15414760588382700208ull, 1833785697729529ull}},
+{{16021157285448070492ull, 1467028558183623ull}},
+{{1748879384132725424ull, 1173622846546899ull}},
+{{10176904644096181324ull, 1877796554475038ull}},
+{{15520221344760765704ull, 1502237243580030ull}},
+{{12416177075808612564ull, 1201789794864024ull}},
+{{8797836877068049132ull, 1922863671782439ull}},
+{{10727618316396349628ull, 1538290937425951ull}},
+{{4892745838375169380ull, 1230632749940761ull}},
+{{449695711916450360ull, 1969012399905218ull}},
+{{7738454199016980936ull, 1575209919924174ull}},
+{{9880112173955495072ull, 1260167935939339ull}},
+{{4740133034103061144ull, 2016268697502943ull}},
+{{11170804056766269564ull, 1613014958002354ull}},
+{{12625992060154925972ull, 1290411966401883ull}},
+{{16512238481505971236ull, 2064659146243013ull}},
+{{2141744340979046016ull, 1651727316994411ull}},
+{{16470790731750878108ull, 1321381853595528ull}},
+{{4217172282349943032ull, 2114210965752846ull}},
+{{18131133084847595720ull, 1691368772602276ull}},
+{{10815557653136166252ull, 1353095018081821ull}},
+{{9926194615534045356ull, 2164952028930914ull}},
+{{11630304507169146608ull, 1731961623144731ull}},
+{{5614894790993406964ull, 1385569298515785ull}},
+{{8983831665589451140ull, 2216910877625256ull}},
+{{3497716517729650588ull, 1773528702100205ull}},
+{{2798173214183720472ull, 1418822961680164ull}},
+{{5927887386088886700ull, 1135058369344131ull}},
+{{2105922188258398076ull, 1816093390950610ull}},
+{{1684737750606718460ull, 1452874712760488ull}},
+{{8726487829969195412ull, 1162299770208390ull}},
+{{13962380527950712664ull, 1859679632333424ull}},
+{{14859253237102480452ull, 1487743705866739ull}},
+{{15576751404423894684ull, 1190194964693391ull}},
+{{17544104617594410852ull, 1904311943509426ull}},
+{{10345934879333618356ull, 1523449554807541ull}},
+{{4587399088724984364ull, 1218759643846033ull}},
+{{3650489727218064656ull, 1950015430153653ull}},
+{{10299089411258272372ull, 1560012344122922ull}},
+{{860573899522797252ull, 1248009875298338ull}},
+{{16134313498204116896ull, 1996815800477340ull}},
+{{12907450798563293516ull, 1597452640381872ull}},
+{{2947263009366814164ull, 1277962112305498ull}},
+{{1026272000244992344ull, 2044739379688797ull}},
+{{11889064044421724844ull, 1635791503751037ull}},
+{{2132553606053559228ull, 1308633203000830ull}},
+{{3412085769685694768ull, 2093813124801328ull}},
+{{10108366245232376460ull, 1675050499841062ull}},
+{{707995366702080520ull, 1340040399872850ull}},
+{{1132792586723328832ull, 2144064639796560ull}},
+{{906234069378663068ull, 1715251711837248ull}},
+{{8103684884986751100ull, 1372201369469798ull}},
+{{9276547001236891436ull, 2195522191151677ull}},
+{{42539971505692504ull, 1756417752921342ull}},
+{{11102078421430284972ull, 1405134202337073ull}},
+{{14073976659546545632ull, 2248214723739317ull}},
+{{3880483698153415860ull, 1798571778991454ull}},
+{{6793735773264643012ull, 1438857423193163ull}},
+{{12813686248095535056ull, 1151085938554530ull}},
+{{2055153923243304472ull, 1841737501687249ull}},
+{{5333471953336553900ull, 1473390001349799ull}},
+{{7956126377411153444ull, 1178712001079839ull}},
+{{1661755759632114540ull, 1885939201727743ull}},
+{{8708102237189512280ull, 1508751361382194ull}},
+{{10655830604493520144ull, 1207001089105755ull}},
+{{17049328967189632232ull, 1931201742569208ull}},
+{{2571416729525974816ull, 1544961394055367ull}},
+{{13125179827846510824ull, 1235969115244293ull}},
+{{17310938909812506996ull, 1977550584390869ull}},
+{{17538099942591915920ull, 1582040467512695ull}},
+{{14030479954073532736ull, 1265632374010156ull}},
+{{15070070297033831728ull, 2025011798416250ull}},
+{{12056056237627065384ull, 1620009438733000ull}},
+{{9644844990101652308ull, 1296007550986400ull}},
+{{15431751984162643692ull, 2073612081578240ull}},
+{{12345401587330114952ull, 1658889665262592ull}},
+{{2497623640380271316ull, 1327111732210074ull}},
+{{11374895454092254752ull, 2123378771536118ull}},
+{{16478613992757624448ull, 1698703017228894ull}},
+{{16872240008948009880ull, 1358962413783115ull}},
+{{8548839940607264196ull, 2174339862052985ull}},
+{{6839071952485811356ull, 1739471889642388ull}},
+{{12849955191472469732ull, 1391577511713910ull}},
+{{2113184232646399952ull, 2226524018742257ull}},
+{{12758593830342850932ull, 1781219214993805ull}},
+{{10206875064274280744ull, 1424975371995044ull}},
+{{11854848866161334920ull, 1139980297596035ull}},
+{{521014112148584256ull, 1823968476153657ull}},
+{{11484857733944598372ull, 1459174780922925ull}},
+{{9187886187155678700ull, 1167339824738340ull}},
+{{14700617899449085920ull, 1867743719581344ull}},
+{{15449843134301179056ull, 1494194975665075ull}},
+{{12359874507440943244ull, 1195355980532060ull}},
+{{1329055138195957580ull, 1912569568851297ull}},
+{{12131290554782497032ull, 1530055655081037ull}},
+{{2326334814342176980ull, 1224044524064830ull}},
+{{3722135702947483168ull, 1958471238503728ull}},
+{{10356406191841807180ull, 1566776990802982ull}},
+{{906427323989625096ull, 1253421592642386ull}},
+{{12518330162609131128ull, 2005474548227817ull}},
+{{2635966500603484256ull, 1604379638582254ull}},
+{{5798122015224697728ull, 1283503710865803ull}},
+{{5587646409617606040ull, 2053605937385285ull}},
+{{4470117127694084832ull, 1642884749908228ull}},
+{{10954791331639088512ull, 1314307799926582ull}},
+{{2770270871654900328ull, 2102892479882532ull}},
+{{13284263141549651232ull, 1682313983906025ull}},
+{{10627410513239720984ull, 1345851187124820ull}},
+{{17003856821183553576ull, 2153361899399712ull}},
+{{6224387827463022212ull, 1722689519519770ull}},
+{{4979510261970417772ull, 1378151615615816ull}},
+{{588518789668847788ull, 2205042584985306ull}},
+{{15228210290702719524ull, 1764034067988244ull}},
+{{15871917047304085940ull, 1411227254390595ull}},
+{{12697533637843268752ull, 1128981803512476ull}},
+{{12937356191065409360ull, 1806370885619962ull}},
+{{2971187323368506840ull, 1445096708495970ull}},
+{{2376949858694805472ull, 1156077366796776ull}},
+{{14871166218137419724ull, 1849723786874841ull}},
+{{8207584159768025456ull, 1479779029499873ull}},
+{{13944764957298241012ull, 1183823223599898ull}},
+{{175531043225723680ull, 1894117157759838ull}},
+{{7519122464064399588ull, 1515293726207870ull}},
+{{6015297971251519672ull, 1212234980966296ull}},
+{{2245779124518610828ull, 1939575969546074ull}},
+{{5485972114356798988ull, 1551660775636859ull}},
+{{8078126506227349512ull, 1241328620509487ull}},
+{{16614351224705669544ull, 1986125792815179ull}},
+{{16980829794506445956ull, 1588900634252143ull}},
+{{2516617391379425796ull, 1271120507401715ull}},
+{{4026587826207081276ull, 2033792811842744ull}},
+{{6910619075707575344ull, 1627034249474195ull}},
+{{5528495260566060272ull, 1301627399579356ull}},
+{{1466894787421875792ull, 2082603839326970ull}},
+{{1173515829937500632ull, 1666083071461576ull}},
+{{15696207922917641800ull, 1332866457169260ull}},
+{{6667188602958675264ull, 2132586331470817ull}},
+{{16401797326592671180ull, 1706069065176653ull}},
+{{2053391417048405976ull, 1364855252141323ull}},
+{{18042821526245090852ull, 2183768403426116ull}},
+{{10744908406254162360ull, 1747014722740893ull}},
+{{15974624354487150532ull, 1397611778192714ull}},
+{{14491352522953709884ull, 2236178845108343ull}},
+{{525035574137236936ull, 1788943076086675ull}},
+{{420028459309789548ull, 1431154460869340ull}},
+{{336022767447831640ull, 1144923568695472ull}},
+{{4226985242658440948ull, 1831877709912755ull}},
+{{3381588194126752756ull, 1465502167930204ull}},
+{{6394619370043312528ull, 1172401734344163ull}},
+{{6542042177327389724ull, 1875842774950661ull}},
+{{1544284927120001456ull, 1500674219960529ull}},
+{{4924776756437911488ull, 1200539375968423ull}},
+{{4190293995558748056ull, 1920863001549477ull}},
+{{14420281640672729416ull, 1536690401239581ull}},
+{{7846876497796273208ull, 1229352320991665ull}},
+{{12555002396474037136ull, 1966963713586664ull}},
+{{13733350731921140032ull, 1573570970869331ull}},
+{{7297331770795001700ull, 1258856776695465ull}},
+{{11675730833272002724ull, 2014170842712744ull}},
+{{13029933481359512500ull, 1611336674170195ull}},
+{{10423946785087610000ull, 1289069339336156ull}},
+{{9299617226656355356ull, 2062510942937850ull}},
+{{7439693781325084284ull, 1650008754350280ull}},
+{{5951755025060067428ull, 1320007003480224ull}},
+{{16901505669579928532ull, 2112011205568358ull}},
+{{2453158091438211856ull, 1689608964454687ull}},
+{{13030572917376300452ull, 1351687171563749ull}},
+{{9780870223576349756ull, 2162699474501999ull}},
+{{11514044993602990128ull, 1730159579601599ull}},
+{{12900584809624302424ull, 1384127663681279ull}},
+{{9572889251173152912ull, 2214604261890047ull}},
+{{279613771454701684ull, 1771683409512038ull}},
+{{7602388646647581992ull, 1417346727609630ull}},
+{{6081910917318065592ull, 1133877382087704ull}},
+{{17109755097192725596ull, 1814203811340326ull}},
+{{9998455263012270152ull, 1451363049072261ull}},
+{{4309415395667905800ull, 1161090439257809ull}},
+{{14273762262552469928ull, 1857744702812494ull}},
+{{15108358624783886264ull, 1486195762249995ull}},
+{{12086686899827109012ull, 1188956609799996ull}},
+{{11960001410239553772ull, 1902330575679994ull}},
+{{13257349942933553340ull, 1521864460543995ull}},
+{{10605879954346842672ull, 1217491568435196ull}},
+{{9590710297471127632ull, 1947986509496314ull}},
+{{11361917052718812428ull, 1558389207597051ull}},
+{{5400184827433139616ull, 1246711366077641ull}},
+{{1261598094409202744ull, 1994738185724226ull}},
+{{15766673734495003488ull, 1595790548579380ull}},
+{{12613338987596002788ull, 1276632438863504ull}},
+{{9113295935927873496ull, 2042611902181607ull}},
+{{18358683192968029764ull, 1634089521745285ull}},
+{{14686946554374423812ull, 1307271617396228ull}},
+{{1363021598547616160ull, 2091634587833966ull}},
+{{15847812537805734220ull, 1673307670267172ull}},
+{{5299552400760766728ull, 1338646136213738ull}},
+{{4789935026475316444ull, 2141833817941981ull}},
+{{142599206438342832ull, 1713467054353585ull}},
+{{114079365150674264ull, 1370773643482868ull}},
+{{14939922243208720120ull, 2193237829572588ull}},
+{{883891350341245124ull, 1754590263658071ull}},
+{{15464508339240637392ull, 1403672210926456ull}},
+{{17364515713301199184ull, 2245875537482330ull}},
+{{13891612570640959348ull, 1796700429985864ull}},
+{{14802638871254677800ull, 1437360343988691ull}},
+{{8152762282261831916ull, 1149888275190953ull}},
+{{9355070836877020744ull, 1839821240305525ull}},
+{{7484056669501616596ull, 1471856992244420ull}},
+{{5987245335601293276ull, 1177485593795536ull}},
+{{2200894907478248596ull, 1883976950072858ull}},
+{{9139413555466419524ull, 1507181560058286ull}},
+{{3622182029631225296ull, 1205745248046629ull}},
+{{13174188876893781120ull, 1929192396874606ull}},
+{{6850002286773114572ull, 1543353917499685ull}},
+{{5480001829418491656ull, 1234683133999748ull}},
+{{5078654112327676328ull, 1975493014399597ull}},
+{{15130969734087872032ull, 1580394411519677ull}},
+{{4726078157786476980ull, 1264315529215742ull}},
+{{11251073867200273492ull, 2022904846745187ull}},
+{{1622161464276398144ull, 1618323877396150ull}},
+{{1297729171421118516ull, 1294659101916920ull}},
+{{2076366674273789628ull, 2071454563067072ull}},
+{{12729139783644762672ull, 1657163650453657ull}},
+{{2804614197431989488ull, 1325730920362926ull}},
+{{15555429160116914156ull, 2121169472580681ull}},
+{{8754994513351621000ull, 1696935578064545ull}},
+{{7003995610681296800ull, 1357548462451636ull}},
+{{3827695347606254236ull, 2172077539922618ull}},
+{{10440853907568824032ull, 1737662031938094ull}},
+{{12042031940796969548ull, 1390129625550475ull}},
+{{820507031565599664ull, 2224207400880761ull}},
+{{15413800884220121024ull, 1779365920704608ull}},
+{{1262994263150365848ull, 1423492736563687ull}},
+{{12078441854746023648ull, 1138794189250949ull}},
+{{8257460523367906868ull, 1822070702801519ull}},
+{{10295317233436235820ull, 1457656562241215ull}},
+{{8236253786748988656ull, 1166125249792972ull}},
+{{16867354873540292172ull, 1865800399668755ull}},
+{{13493883898832233736ull, 1492640319735004ull}},
+{{14484455933807697312ull, 1194112255788003ull}},
+{{1039036605640853760ull, 1910579609260806ull}},
+{{15588624543480324300ull, 1528463687408644ull}},
+{{16160248449526169764ull, 1222770949926915ull}},
+{{7409653445532320008ull, 1956433519883065ull}},
+{{5927722756425856004ull, 1565146815906452ull}},
+{{15810224649366415772ull, 1252117452725161ull}},
+{{17917661809502444592ull, 2003387924360258ull}},
+{{3266083003376224704ull, 1602710339488207ull}},
+{{13680912846926710732ull, 1282168271590565ull}},
+{{3442716481373185556ull, 2051469234544905ull}},
+{{2754173185098548444ull, 1641175387635924ull}},
+{{5892687362820749080ull, 1312940310108739ull}},
+{{16806997409997019172ull, 2100704496173982ull}},
+{{6066900298513794692ull, 1680563596939186ull}},
+{{1164171424069125432ull, 1344450877551349ull}},
+{{9241371907994421336ull, 2151121404082158ull}},
+{{14771795155879357716ull, 1720897123265726ull}},
+{{8128087309961575848ull, 1376717698612581ull}},
+{{5626242066454700712ull, 2202748317780130ull}},
+{{4500993653163760568ull, 1762198654224104ull}},
+{{7290143737272918780ull, 1409758923379283ull}},
+{{13210812619302155668ull, 1127807138703426ull}},
+{{13758602561399628424ull, 1804491421925482ull}},
+{{3628184419635882092ull, 1443593137540386ull}},
+{{17659942794676346968ull, 1154874510032308ull}},
+{{6119815583030693208ull, 1847799216051694ull}},
+{{8585201281166464888ull, 1478239372841355ull}},
+{{6868161024933171912ull, 1182591498273084ull}},
+{{18367755269376895704ull, 1892146397236934ull}},
+{{18383553030243426888ull, 1513717117789547ull}},
+{{7328144794710920864ull, 1210973694231638ull}},
+{{8035682856795563060ull, 1937557910770621ull}},
+{{2739197470694540124ull, 1550046328616497ull}},
+{{13259404420781363068ull, 1240037062893197ull}},
+{{6457651814282539616ull, 1984059300629116ull}},
+{{1476772636684121372ull, 1587247440503293ull}},
+{{8560115738831117744ull, 1269797952402634ull}},
+{{2628138737904057420ull, 2031676723844215ull}},
+{{2102510990323245936ull, 1625341379075372ull}},
+{{12750055236484327716ull, 1300273103260297ull}},
+{{5642693119407283056ull, 2080436965216476ull}},
+{{824805680783916120ull, 1664349572173181ull}},
+{{15417239803594774188ull, 1331479657738544ull}},
+{{13599537241525907736ull, 2130367452381671ull}},
+{{7190280978478815864ull, 1704293961905337ull}},
+{{16820271227008783660ull, 1363435169524269ull}},
+{{15844387518988322888ull, 2181496271238831ull}},
+{{8986161200448747988ull, 1745197016991065ull}},
+{{7188928960358998388ull, 1396157613592852ull}},
+{{15191635151316307748ull, 2233852181748563ull}},
+{{1085261676827315228ull, 1787081745398851ull}},
+{{15625604600429493476ull, 1429665396319080ull}},
+{{12500483680343594780ull, 1143732317055264ull}},
+{{8932727444324020680ull, 1829971707288423ull}},
+{{14524879584943037188ull, 1463977365830738ull}},
+{{551857223728698780ull, 1171181892664591ull}},
+{{11951018002191649020ull, 1873891028263345ull}},
+{{9560814401753319216ull, 1499112822610676ull}},
+{{3959302706660745048ull, 1199290258088541ull}},
+{{17402930774882923048ull, 1918864412941665ull}},
+{{13922344619906338440ull, 1535091530353332ull}},
+{{3759178066441250104ull, 1228073224282666ull}},
+{{17082731350531731136ull, 1964917158852265ull}},
+{{13666185080425384908ull, 1571933727081812ull}},
+{{3554250434856487280ull, 1257546981665450ull}},
+{{5686800695770379652ull, 2012075170664720ull}},
+{{4549440556616303720ull, 1609660136531776ull}},
+{{18396947704260684268ull, 1287728109225420ull}},
+{{10988372253107543216ull, 2060364974760673ull}},
+{{16169395431969855216ull, 1648291979808538ull}},
+{{1867469901350153204ull, 1318633583846831ull}},
+{{14055998286385976096ull, 2109813734154929ull}},
+{{14934147443850691200ull, 1687850987323943ull}},
+{{879271510854821992ull, 1350280789859155ull}},
+{{1406834417367715188ull, 2160449263774648ull}},
+{{8504165163377992796ull, 1728359411019718ull}},
+{{14182029760186214884ull, 1382687528815774ull}},
+{{11623201172072212844ull, 2212300046105239ull}},
+{{12987909752399680596ull, 1769840036884191ull}},
+{{6700978987177834156ull, 1415872029507353ull}},
+{{12739480819226087968ull, 1132697623605882ull}},
+{{5625774051794099460ull, 1812316197769412ull}},
+{{15568665685661010536ull, 1449852958215529ull}},
+{{16144281363270718752ull, 1159882366572423ull}},
+{{3694757292781688064ull, 1855811786515878ull}},
+{{10334503463709171100ull, 1484649429212702ull}},
+{{888905141483516232ull, 1187719543370162ull}},
+{{5111597041115536296ull, 1900351269392259ull}},
+{{7778626447634339360ull, 1520281015513807ull}},
+{{17290947602333202456ull, 1216224812411045ull}},
+{{9218772090023572316ull, 1945959699857673ull}},
+{{14753715301502678500ull, 1556767759886138ull}},
+{{734925796976411828ull, 1245414207908911ull}},
+{{12243927719387989896ull, 1992662732654257ull}},
+{{2416444546026571272ull, 1594130186123406ull}},
+{{16690550895788898308ull, 1275304148898724ull}},
+{{15636834989036506324ull, 2040486638237959ull}},
+{{16198816805971115384ull, 1632389310590367ull}},
+{{5580355815293071660ull, 1305911448472294ull}},
+{{16307266933952735304ull, 2089458317555670ull}},
+{{13045813547162188244ull, 1671566654044536ull}},
+{{6747302022987840272ull, 1337253323235629ull}},
+{{18174380866264365080ull, 2139605317177006ull}},
+{{10850155878269581740ull, 1711684253741605ull}},
+{{8680124702615665392ull, 1369347402993284ull}},
+{{2820153079959333660ull, 2190955844789255ull}},
+{{2256122463967466928ull, 1752764675831404ull}},
+{{5494246785915883864ull, 1402211740665123ull}},
+{{5101446042723503860ull, 2243538785064197ull}},
+{{15149203278404534056ull, 1794831028051357ull}},
+{{4740664993239806600ull, 1435864822441086ull}},
+{{103183179849934956ull, 1148691857952869ull}},
+{{7543790717243716576ull, 1837906972724590ull}},
+{{6035032573794973260ull, 1470325578179672ull}},
+{{15896072503261709580ull, 1176260462543737ull}},
+{{10676320746251094032ull, 1882016740069980ull}},
+{{8541056597000875228ull, 1505613392055984ull}},
+{{10522194092342610504ull, 1204490713644787ull}},
+{{2078115288780535516ull, 1927185141831660ull}},
+{{1662492231024428412ull, 1541748113465328ull}},
+{{8708691414303363376ull, 1233398490772262ull}},
+{{17623255077627291724ull, 1973437585235619ull}},
+{{17787952876843743704ull, 1578750068188495ull}},
+{{14230362301474994960ull, 1263000054550796ull}},
+{{15389882052876171292ull, 2020800087281274ull}},
+{{16001254457042847356ull, 1616640069825019ull}},
+{{16490352380376188208ull, 1293312055860015ull}},
+{{7937819734892349520ull, 2069299289376025ull}},
+{{6350255787913879616ull, 1655439431500820ull}},
+{{5080204630331103692ull, 1324351545200656ull}},
+{{749629779045945260ull, 2118962472321050ull}},
+{{599703823236756208ull, 1695169977856840ull}},
+{{479763058589404968ull, 1356135982285472ull}},
+{{4456969708484958272ull, 2169817571656755ull}},
+{{3565575766787966616ull, 1735854057325404ull}},
+{{6541809428172283616ull, 1388683245860323ull}},
+{{6777546270333743464ull, 2221893193376517ull}},
+{{16490083460492725740ull, 1777514554701213ull}},
+{{2124020324168449620ull, 1422011643760971ull}},
+{{16456611518302400988ull, 1137609315008776ull}},
+{{505136726090469324ull, 1820174904014043ull}},
+{{7782807010356196104ull, 1456139923211234ull}},
+{{9915594423026867208ull, 1164911938568987ull}},
+{{1107555817875346240ull, 1863859101710380ull}},
+{{886044654300276992ull, 1491087281368304ull}},
+{{4398184538182131916ull, 1192869825094643ull}},
+{{3347746446349500740ull, 1908591720151429ull}},
+{{6367545971821510916ull, 1526873376121143ull}},
+{{12472734406941029380ull, 1221498700896914ull}},
+{{8888328606879916040ull, 1954397921435063ull}},
+{{14489360514987753476ull, 1563518337148050ull}},
+{{11591488411990202780ull, 1250814669718440ull}},
+{{99637385474772836ull, 2001303471549505ull}},
+{{79709908379818268ull, 1601042777239604ull}},
+{{3753116741445764936ull, 1280834221791683ull}},
+{{2315637971571313576ull, 2049334754866693ull}},
+{{9231208006740871508ull, 1639467803893354ull}},
+{{11074315220134607528ull, 1311574243114683ull}},
+{{14029555537473461724ull, 2098518788983493ull}},
+{{155597985753038408ull, 1678815031186795ull}},
+{{124478388602430728ull, 1343052024949436ull}},
+{{11267211865989620132ull, 2148883239919097ull}},
+{{1635071863307875460ull, 1719106591935278ull}},
+{{8686755120130121012ull, 1375285273548222ull}},
+{{17588157006950103948ull, 2200456437677155ull}},
+{{14070525605560083156ull, 1760365150141724ull}},
+{{14945769299189976848ull, 1408292120113379ull}},
+{{15645964254093891800ull, 1126633696090703ull}},
+{{2897449918098764944ull, 1802613913745126ull}},
+{{17075355193446653248ull, 1442091130996100ull}},
+{{13660284154757322596ull, 1153672904796880ull}},
+{{3409710573902164540ull, 1845876647675009ull}},
+{{6417117273863641956ull, 1476701318140007ull}},
+{{16201740263316644536ull, 1181361054512005ull}},
+{{7476040347597079640ull, 1890177687219209ull}},
+{{9670181092819574036ull, 1512142149775367ull}},
+{{357447244771838580ull, 1209713719820294ull}},
+{{7950613221118762376ull, 1935541951712470ull}},
+{{6360490576895009900ull, 1548433561369976ull}},
+{{1399043646774097596ull, 1238746849095981ull}},
+{{13306516279064287128ull, 1981994958553569ull}},
+{{14334561837993340024ull, 1585595966842855ull}},
+{{11467649470394672020ull, 1268476773474284ull}},
+{{7280192708405744264ull, 2029562837558855ull}},
+{{5824154166724595408ull, 1623650270047084ull}},
+{{8348672148121586652ull, 1298920216037667ull}},
+{{17047224251736448964ull, 2078272345660267ull}},
+{{6259081771905338524ull, 1662617876528214ull}},
+{{8696614232266181144ull, 1330094301222571ull}},
+{{6535885142142069184ull, 2128150881956114ull}},
+{{8918056928455565668ull, 1702520705564891ull}},
+{{3445096728022542212ull, 1362016564451913ull}},
+{{1822805950094157216ull, 2179226503123061ull}},
+{{16215640019042967068ull, 1743381202498448ull}},
+{{1904465571008642684ull, 1394704961998759ull}},
+{{10425842543097648940ull, 2231527939198014ull}},
+{{12030022849220029476ull, 1785222351358411ull}},
+{{5934669464634113256ull, 1428177881086729ull}},
+{{8437084386449200928ull, 1142542304869383ull}},
+{{9809986203576811164ull, 1828067687791013ull}},
+{{15226686592345269576ull, 1462454150232810ull}},
+{{12181349273876215660ull, 1169963320186248ull}},
+{{15800810023460034736ull, 1871941312297997ull}},
+{{5261950389284207140ull, 1497553049838398ull}},
+{{11588257940911186360ull, 1198042439870718ull}},
+{{14851863890715987852ull, 1916867903793149ull}},
+{{15570839927314700604ull, 1533494323034519ull}},
+{{16146020756593670808ull, 1226795458427615ull}},
+{{7386889136840321676ull, 1962872733484185ull}},
+{{5909511309472257340ull, 1570298186787348ull}},
+{{12106306677061626516ull, 1256238549429878ull}},
+{{15680741868556692108ull, 2009981679087805ull}},
+{{12544593494845353684ull, 1607985343270244ull}},
+{{13725023610618193272ull, 1286388274616195ull}},
+{{3513293703279557620ull, 2058221239385913ull}},
+{{10189332592107466740ull, 1646576991508730ull}},
+{{8151466073685973392ull, 1317261593206984ull}},
+{{1974299273671826460ull, 2107618549131175ull}},
+{{1579439418937461168ull, 1686094839304940ull}},
+{{1263551535149968932ull, 1348875871443952ull}},
+{{5711031270981860616ull, 2158201394310323ull}},
+{{11947522646269309140ull, 1726561115448258ull}},
+{{16936715746499267956ull, 1381248892358606ull}},
+{{1273303491205456472ull, 2209998227773771ull}},
+{{15776038051932006468ull, 1767998582219016ull}},
+{{8931481626803694852ull, 1414398865775213ull}},
+{{14523882930926776528ull, 1131519092620170ull}},
+{{4791468615773290828ull, 1810430548192273ull}},
+{{11211872522102453308ull, 1448344438553818ull}},
+{{16348195647165783292ull, 1158675550843054ull}},
+{{15089066591239522300ull, 1853880881348887ull}},
+{{4692555643507797196ull, 1483104705079110ull}},
+{{3754044514806237756ull, 1186483764063288ull}},
+{{2317122408948070088ull, 1898374022501261ull}},
+{{16611093186126097360ull, 1518699218001008ull}},
+{{2220828104675146920ull, 1214959374400807ull}},
+{{7242673782222145396ull, 1943934999041291ull}},
+{{2104790211035805992ull, 1555147999233033ull}},
+{{9062529798312465440ull, 1244118399386426ull}},
+{{7121350047816124060ull, 1990589439018282ull}},
+{{16765126482478630216ull, 1592471551214625ull}},
+{{13412101185982904172ull, 1273977240971700ull}},
+{{3012617823863095060ull, 2038363585554721ull}},
+{{17167489518058117340ull, 1630690868443776ull}},
+{{10044642799704583548ull, 1304552694755021ull}},
+{{8692730850043513032ull, 2087284311608034ull}},
+{{10643533494776720748ull, 1669827449286427ull}},
+{{1136129166337555952ull, 1335861959429142ull}},
+{{5507155480881999848ull, 2137379135086627ull}},
+{{15473770828931330848ull, 1709903308069301ull}},
+{{8689667848403154356ull, 1367922646455441ull}},
+{{6524770927961226324ull, 2188676234328706ull}},
+{{1530467927627070736ull, 1750940987462965ull}},
+{{1224374342101656588ull, 1400752789970372ull}},
+{{5648347762104560864ull, 2241204463952595ull}},
+{{4518678209683648692ull, 1792963571162076ull}},
+{{18372337826714560244ull, 1434370856929660ull}},
+{{14697870261371648196ull, 1147496685543728ull}},
+{{1380499529743175176ull, 1835994696869966ull}},
+{{15861794882762181432ull, 1468795757495972ull}},
+{{5310738276725924500ull, 1175036605996778ull}},
+{{4807832428019568876ull, 1880058569594845ull}},
+{{3846265942415655100ull, 1504046855675876ull}},
+{{17834408012900165372ull, 1203237484540700ull}},
+{{10088308746930712984ull, 1925179975265121ull}},
+{{4381298182802660064ull, 1540143980212097ull}},
+{{14573084990467859020ull, 1232115184169677ull}},
+{{8559540725780933140ull, 1971384294671484ull}},
+{{10536981395366656836ull, 1577107435737187ull}},
+{{1050887486809504820ull, 1261685948589750ull}},
+{{1681419978895207716ull, 2018697517743600ull}},
+{{1345135983116166172ull, 1614958014194880ull}},
+{{1076108786492932936ull, 1291966411355904ull}},
+{{9100471687872513344ull, 2067146258169446ull}},
+{{3591028535556100352ull, 1653717006535557ull}},
+{{13940869272670611252ull, 1322973605228445ull}},
+{{3858646762563426388ull, 2116757768365513ull}},
+{{10465615039534561756ull, 1693406214692410ull}},
+{{8372492031627649404ull, 1354724971753928ull}},
+{{9706638435862328724ull, 2167559954806285ull}},
+{{7765310748689862980ull, 1734047963845028ull}},
+{{13590946228435711028ull, 1387238371076022ull}},
+{{6988118706529496356ull, 2219581393721636ull}},
+{{1901146150481686760ull, 1775665114977309ull}},
+{{5210265735127259732ull, 1420532091981847ull}},
+{{15236259032327538756ull, 1136425673585477ull}},
+{{9620619192756420716ull, 1818281077736764ull}},
+{{11385844168947046896ull, 1454624862189411ull}},
+{{5419326520415727192ull, 1163699889751529ull}},
+{{16049620062148984156ull, 1861919823602446ull}},
+{{9150347234977277000ull, 1489535858881957ull}},
+{{18388324232207552572ull, 1191628687105565ull}},
+{{10974574697822532496ull, 1906605899368905ull}},
+{{8779659758258025996ull, 1525284719495124ull}},
+{{10713076621348331120ull, 1220227775596099ull}},
+{{6072876149931598824ull, 1952364440953759ull}},
+{{8547649734687189384ull, 1561891552763007ull}},
+{{17906166231975482476ull, 1249513242210405ull}},
+{{10203121897451220344ull, 1999221187536649ull}},
+{{11851846332702886600ull, 1599376950029319ull}},
+{{13170825880904219604ull, 1279501560023455ull}},
+{{2626577335737199748ull, 2047202496037529ull}},
+{{5790610683331670124ull, 1637761996830023ull}},
+{{12011186176149156744ull, 1310209597464018ull}},
+{{15528549067096740468ull, 2096335355942429ull}},
+{{16112188068419302696ull, 1677068284753943ull}},
+{{1821704010509711188ull, 1341654627803155ull}},
+{{2914726416815537900ull, 2146647404485048ull}},
+{{9710478762936250968ull, 1717317923588038ull}},
+{{15147080639832821420ull, 1373854338870430ull}},
+{{5788584950022962656ull, 2198166942192689ull}},
+{{8320216774760280448ull, 1758533553754151ull}},
+{{2966824605066314036ull, 1406826843003321ull}},
+{{15814965812331833428ull, 2250922948805313ull}},
+{{1583926205639735772ull, 1800738359044251ull}},
+{{16024536223479429908ull, 1440590687235400ull}},
+{{12819628978783543928ull, 1152472549788320ull}},
+{{2064662292344118668ull, 1843956079661313ull}},
+{{9030427463359115580ull, 1475164863729050ull}},
+{{7224341970687292464ull, 1180131890983240ull}},
+{{11558947153099667944ull, 1888211025573184ull}},
+{{12936506537221644680ull, 1510568820458547ull}},
+{{2970507600293495096ull, 1208455056366838ull}},
+{{1063463345727681832ull, 1933528090186941ull}},
+{{15608165935549786756ull, 1546822472149552ull}},
+{{5107835118956008760ull, 1237457977719642ull}},
+{{11861885005071524340ull, 1979932764351427ull}},
+{{2110810374573398824ull, 1583946211481142ull}},
+{{12756694743884450028ull, 1267156969184913ull}},
+{{16721362775473209724ull, 2027451150695861ull}},
+{{9687741405636657456ull, 1621960920556689ull}},
+{{11439541939251236288ull, 1297568736445351ull}},
+{{10924569473318157416ull, 2076109978312562ull}},
+{{1360957949170705284ull, 1660887982650050ull}},
+{{1088766359336564228ull, 1328710386120040ull}},
+{{1742026174938502764ull, 2125936617792064ull}},
+{{5082969754692712536ull, 1700749294233651ull}},
+{{377026989012259704ull, 1360599435386921ull}},
+{{11671289626645346496ull, 2176959096619073ull}},
+{{16715729330800097844ull, 1741567277295258ull}},
+{{2304537020414347304ull, 1393253821836207ull}},
+{{7376608047404866012ull, 2229206114937931ull}},
+{{2211937623181982488ull, 1783364891950345ull}},
+{{1769550098545585988ull, 1426691913560276ull}},
+{{16173035337804110084ull, 1141353530848220ull}},
+{{7430112466777024520ull, 1826165649357153ull}},
+{{13322787602905440260ull, 1460932519485722ull}},
+{{3279532452840531564ull, 1168746015588578ull}},
+{{1557903109802940176ull, 1869993624941725ull}},
+{{1246322487842352140ull, 1495994899953380ull}},
+{{997057990273881712ull, 1196795919962704ull}},
+{{8973990413922031388ull, 1914873471940326ull}},
+{{3489843516395714788ull, 1531898777552261ull}},
+{{17549270072084213120ull, 1225519022041808ull}},
+{{5942739226883279056ull, 1960830435266894ull}},
+{{8443540196248533568ull, 1568664348213515ull}},
+{{6754832156998826856ull, 1254931478570812ull}},
+{{14497080265940033292ull, 2007890365713299ull}},
+{{15287013027493936956ull, 1606312292570639ull}},
+{{15918959236737059888ull, 1285049834056511ull}},
+{{18091637149295475176ull, 2056079734490418ull}},
+{{3405263275210649168ull, 1644863787592335ull}},
+{{2724210620168519336ull, 1315891030073868ull}},
+{{669388177527720616ull, 2105425648118189ull}},
+{{4224859356764086816ull, 1684340518494551ull}},
+{{18137282744378910744ull, 1347472414795640ull}},
+{{10572908317296705576ull, 2155955863673025ull}},
+{{8458326653837364460ull, 1724764690938420ull}},
+{{6766661323069891568ull, 1379811752750736ull}},
+{{3447960487428005864ull, 2207698804401178ull}},
+{{10137066019426225336ull, 1766159043520942ull}},
+{{730955186057159624ull, 1412927234816754ull}},
+{{4274112963587638020ull, 1130341787853403ull}},
+{{3149231926998310512ull, 1808546860565445ull}},
+{{2519385541598648408ull, 1446837488452356ull}},
+{{16772903692246560020ull, 1157469990761884ull}},
+{{15768599463368765064ull, 1851951985219015ull}},
+{{12614879570695012048ull, 1481561588175212ull}},
+{{2713206027072188992ull, 1185249270540170ull}},
+{{4341129643315502388ull, 1896398832864272ull}},
+{{14540950158878132880ull, 1517119066291417ull}},
+{{4254062497618685656ull, 1213695253033134ull}},
+{{14185197625673717700ull, 1941912404853014ull}},
+{{15037506915280884484ull, 1553529923882411ull}},
+{{8340656717482797264ull, 1242823939105929ull}},
+{{2277004303746744652ull, 1988518302569487ull}},
+{{12889649887223126692ull, 1590814642055589ull}},
+{{14001068724520411676ull, 1272651713644471ull}},
+{{15023012329748838036ull, 2036242741831154ull}},
+{{15707758678540980752ull, 1628994193464923ull}},
+{{1498160498607053632ull, 1303195354771939ull}},
+{{9775754427255106456ull, 2085112567635102ull}},
+{{441905912320264520ull, 1668090054108082ull}},
+{{11421571174081942584ull, 1334472043286465ull}},
+{{18274513878531108136ull, 2135155269258344ull}},
+{{18308959917566796832ull, 1708124215406675ull}},
+{{14647167934053437464ull, 1366499372325340ull}},
+{{4988724620775948328ull, 2186398995720545ull}},
+{{3990979696620758664ull, 1749119196576436ull}},
+{{17950179016264248224ull, 1399295357261148ull}},
+{{6584193537571335220ull, 2238872571617838ull}},
+{{12646052459540888820ull, 1791098057294270ull}},
+{{10116841967632711056ull, 1432878445835416ull}},
+{{4404124759364258520ull, 1146302756668333ull}},
+{{3357250800240903312ull, 1834084410669333ull}},
+{{10064498269676543296ull, 1467267528535466ull}},
+{{4362249800999324312ull, 1173814022828373ull}},
+{{3290250866857008580ull, 1878102436525397ull}},
+{{13700247137711337832ull, 1502481949220317ull}},
+{{3581500080685249620ull, 1201985559376254ull}},
+{{13109097758580220040ull, 1923176895002006ull}},
+{{6797929392122265708ull, 1538541516001605ull}},
+{{5438343513697812564ull, 1230833212801284ull}},
+{{16080047251400320752ull, 1969333140482054ull}},
+{{16553386615862166924ull, 1575466512385643ull}},
+{{2174662848464002568ull, 1260373209908515ull}},
+{{3479460557542404112ull, 2016597135853624ull}},
+{{6472917260775833612ull, 1613277708682899ull}},
+{{8867682623362577212ull, 1290622166946319ull}},
+{{3120245753154392572ull, 2064995467114111ull}},
+{{17253591861491155352ull, 1651996373691288ull}},
+{{2734827044967193312ull, 1321597098953031ull}},
+{{15443769716173240268ull, 2114555358324849ull}},
+{{16044364587680502536ull, 1691644286659879ull}},
+{{16524840484886312352ull, 1353315429327903ull}},
+{{4303651887366637824ull, 2165304686924646ull}},
+{{18200316768860951552ull, 1732243749539716ull}},
+{{10870904600346850920ull, 1385794999631773ull}},
+{{13704098545813051148ull, 2217271999410837ull}},
+{{3584581207166620272ull, 1773817599528670ull}},
+{{2867664965733296216ull, 1419054079622936ull}},
+{{17051527231554278264ull, 1135243263698348ull}},
+{{5146350682035383288ull, 1816389221917358ull}},
+{{11495778175112127276ull, 1453111377533886ull}},
+{{5507273725347791496ull, 1162489102027109ull}},
+{{16190335590040287044ull, 1859982563243374ull}},
+{{16641617286774139956ull, 1487986050594699ull}},
+{{17002642644161222288ull, 1190388840475759ull}},
+{{16136181786432224692ull, 1904622144761215ull}},
+{{12908945429145779752ull, 1523697715808972ull}},
+{{2948458713832803156ull, 1218958172647178ull}},
+{{1028185127390574728ull, 1950333076235485ull}},
+{{822548101912459780ull, 1560266460988388ull}},
+{{8036736111013788472ull, 1248213168790710ull}},
+{{12858777777622061556ull, 1997141070065136ull}},
+{{6597673407355738920ull, 1597712856052109ull}},
+{{8967487540626501460ull, 1278170284841687ull}},
+{{18037328879744312660ull, 2045072455746699ull}},
+{{18119211918537360452ull, 1636057964597359ull}},
+{{18184718349571798684ull, 1308846371677887ull}},
+{{14338154100347236600ull, 2094154194684620ull}},
+{{11470523280277789280ull, 1675323355747696ull}},
+{{5487069809480321100ull, 1340258684598157ull}},
+{{12468660509910424088ull, 2144413895357051ull}},
+{{6285579593186428944ull, 1715531116285641ull}},
+{{1339114859807232832ull, 1372424893028513ull}},
+{{16899979034659213828ull, 2195879828845620ull}},
+{{13519983227727371060ull, 1756703863076496ull}},
+{{7126637767439986524ull, 1405363090461197ull}},
+{{15091969242645888764ull, 2248580944737915ull}},
+{{12073575394116711012ull, 1798864755790332ull}},
+{{2280162685809548164ull, 1439091804632266ull}},
+{{16581525407615279824ull, 1151273443705812ull}},
+{{11773045393216806424ull, 1842037509929300ull}},
+{{9418436314573445140ull, 1473630007943440ull}},
+{{7534749051658756112ull, 1178904006354752ull}},
+{{15744947297395920100ull, 1886246410167603ull}},
+{{1527911393691005112ull, 1508997128134083ull}},
+{{8601026744436624736ull, 1207197702507266ull}},
+{{6382945161614778932ull, 1931516324011626ull}},
+{{1417007314549912820ull, 1545213059209301ull}},
+{{15891001110607571548ull, 1236170447367440ull}},
+{{6978857703262562864ull, 1977872715787905ull}},
+{{5583086162610050292ull, 1582298172630324ull}},
+{{8155817744829950556ull, 1265838538104259ull}},
+{{1981261947502189920ull, 2025341660966815ull}},
+{{1585009558001751936ull, 1620273328773452ull}},
+{{12336054090627132516ull, 1296218663018761ull}},
+{{12358988915519591384ull, 2073949860830018ull}},
+{{17265888761899493752ull, 1659159888664014ull}},
+{{17502059824261505324ull, 1327327910931211ull}},
+{{2177854015625036260ull, 2123724657489939ull}},
+{{5431632027241939328ull, 1698979725991951ull}},
+{{655956807051641140ull, 1359183780793561ull}},
+{{12117577335508356796ull, 2174694049269697ull}},
+{{2315364238922864788ull, 1739755239415758ull}},
+{{9230989020622112476ull, 1391804191532606ull}},
+{{7390884803511559320ull, 2226886706452170ull}},
+{{5912707842809247456ull, 1781509365161736ull}},
+{{1040817459505487640ull, 1425207492129389ull}},
+{{4522002782346300436ull, 1140165993703511ull}},
+{{18303250895979811668ull, 1824265589925617ull}},
+{{7263903087300028688ull, 1459412471940494ull}},
+{{9500471284581933272ull, 1167529977552395ull}},
+{{15200754055331093236ull, 1868047964083832ull}},
+{{4781905614781053940ull, 1494438371267066ull}},
+{{136175677082932828ull, 1195550697013653ull}},
+{{14975276342300333820ull, 1912881115221844ull}},
+{{15669569888582177380ull, 1530304892177475ull}},
+{{12535655910865741904ull, 1224243913741980ull}},
+{{1610305383675635432ull, 1958790261987169ull}},
+{{4977593121682418668ull, 1567032209589735ull}},
+{{3982074497345934932ull, 1253625767671788ull}},
+{{2681970381011585572ull, 2005801228274861ull}},
+{{16902971563776909752ull, 1604640982619888ull}},
+{{2454330806795796832ull, 1283712786095911ull}},
+{{14994975735099005900ull, 2053940457753457ull}},
+{{4617282958595384072ull, 1643152366202766ull}},
+{{4477552134396936ull, 1314521892962213ull}},
+{{14764559342382676388ull, 2103235028739540ull}},
+{{11811647473906141112ull, 1682588022991632ull}},
+{{2070620349641092240ull, 1346070418393306ull}},
+{{14381039003651478556ull, 2153712669429289ull}},
+{{15194180017663093168ull, 1722970135543431ull}},
+{{8465995199388564212ull, 1378376108434745ull}},
+{{13545592319021702740ull, 2205401773495592ull}},
+{{3457776225733541544ull, 1764321418796474ull}},
+{{6455569795328743560ull, 1411457135037179ull}},
+{{8853804651004905168ull, 1129165708029743ull}},
+{{10476738626865937948ull, 1806665132847589ull}},
+{{12070739716234660684ull, 1445332106278071ull}},
+{{5967242958245818224ull, 1156265685022457ull}},
+{{13236937547935219480ull, 1850025096035931ull}},
+{{6900201223606265260ull, 1480020076828745ull}},
+{{5520160978885012208ull, 1184016061462996ull}},
+{{1453559936732198888ull, 1894425698340794ull}},
+{{4852196764127669432ull, 1515540558672635ull}},
+{{3881757411302135544ull, 1212432446938108ull}},
+{{2521463043341506552ull, 1939891915100973ull}},
+{{9395868064157025888ull, 1551913532080778ull}},
+{{14895392080809441356ull, 1241530825664622ull}},
+{{9075232070327464876ull, 1986449321063396ull}},
+{{3570836841520061580ull, 1589159456850717ull}},
+{{13924715917441780232ull, 1271327565480573ull}},
+{{143452579455386432ull, 2034124104768918ull}},
+{{7493459693048129792ull, 1627299283815134ull}},
+{{9684116569180414156ull, 1301839427052107ull}},
+{{737191251721021360ull, 2082943083283372ull}},
+{{11657799445602548056ull, 1666354466626697ull}},
+{{1947541926998217800ull, 1333083573301358ull}},
+{{17873462342164789772ull, 2132933717282172ull}},
+{{6920072244248011172ull, 1706346973825738ull}},
+{{12914755424882229584ull, 1365077579060590ull}},
+{{2216864606102015716ull, 2184124126496945ull}},
+{{1773491684881612572ull, 1747299301197556ull}},
+{{16176188606872931352ull, 1397839440958044ull}},
+{{14813855326770959192ull, 2236543105532871ull}},
+{{8161735446674857032ull, 1789234484426297ull}},
+{{17597434801565616596ull, 1431387587541037ull}},
+{{6699250211768672628ull, 1145110070032830ull}},
+{{10718800338829876208ull, 1832176112052528ull}},
+{{15953737900547721612ull, 1465740889642022ull}},
+{{5384292690954356644ull, 1172592711713618ull}},
+{{4925519490785060304ull, 1876148338741789ull}},
+{{7629764407369958568ull, 1500918670993431ull}},
+{{2414462711154056532ull, 1200734936794745ull}},
+{{3863140337846490448ull, 1921175898871592ull}},
+{{14158558714502923328ull, 1536940719097273ull}},
+{{258800527376607692ull, 1229552575277819ull}},
+{{7792778473286392956ull, 1967284120444510ull}},
+{{6234222778629114364ull, 1573827296355608ull}},
+{{12366075852387112136ull, 1259061837084486ull}},
+{{12407023734335558776ull, 2014498939335178ull}},
+{{17304316616952267668ull, 1611599151468142ull}},
+{{6464755664077993488ull, 1289279321174514ull}},
+{{17722306692008610224ull, 2062846913879222ull}},
+{{6799147724123067532ull, 1650277531103378ull}},
+{{12818015808782274672ull, 1320222024882702ull}},
+{{5751430035083998184ull, 2112355239812324ull}},
+{{8290492842809108872ull, 1689884191849859ull}},
+{{10321743088989197420ull, 1351907353479887ull}},
+{{1757393683415074580ull, 2163051765567820ull}},
+{{1405914946732059664ull, 1730441412454256ull}},
+{{15882127216353289024ull, 1384353129963404ull}},
+{{14343357101939531468ull, 2214965007941447ull}},
+{{4095988052067804528ull, 1771972006353158ull}},
+{{10655488071138064268ull, 1417577605082526ull}},
+{{4835041642168541092ull, 1134062084066021ull}},
+{{357368997985845100ull, 1814499334505634ull}},
+{{3975244013130586404ull, 1451599467604507ull}},
+{{14248241654730200092ull, 1161279574083605ull}},
+{{4350442573858768532ull, 1858047318533769ull}},
+{{7169702873828925148ull, 1486437854827015ull}},
+{{5735762299063140120ull, 1189150283861612ull}},
+{{12866568493242934512ull, 1902640454178579ull}},
+{{13982603609336257932ull, 1522112363342863ull}},
+{{118036443243275376ull, 1217689890674291ull}},
+{{11256904753414971576ull, 1948303825078865ull}},
+{{9005523802731977260ull, 1558643060063092ull}},
+{{18272465486411312776ull, 1246914448050473ull}},
+{{7099851889806638504ull, 1995063116880758ull}},
+{{13058579141329131448ull, 1596050493504606ull}},
+{{6757514498321394836ull, 1276840394803685ull}},
+{{10812023197314231740ull, 2042944631685896ull}},
+{{4960269743109475068ull, 1634355705348717ull}},
+{{15036262238713311024ull, 1307484564278973ull}},
+{{1921926693489835700ull, 2091975302846358ull}},
+{{8916238984275689204ull, 1673580242277086ull}},
+{{3443642372678641040ull, 1338864193821669ull}},
+{{12888525425769646312ull, 2142182710114670ull}},
+{{10310820340615717048ull, 1713746168091736ull}},
+{{4559307457750663316ull, 1370996934473389ull}},
+{{14673589561884881952ull, 2193595095157422ull}},
+{{4360174020024084916ull, 1754876076125938ull}},
+{{10866836845503088580ull, 1403900860900750ull}},
+{{17386938952804941728ull, 2246241377441200ull}},
+{{13909551162243953380ull, 1796993101952960ull}},
+{{11127640929795162704ull, 1437594481562368ull}},
+{{16280810373319950808ull, 1150075585249894ull}},
+{{14981250153086190328ull, 1840120936399831ull}},
+{{8295651307727041936ull, 1472096749119865ull}},
+{{6636521046181633548ull, 1177677399295892ull}},
+{{14307782488632524004ull, 1884283838873427ull}},
+{{4067528361422198556ull, 1507427071098742ull}},
+{{14322069133363489816ull, 1205941656878993ull}},
+{{779217724930121764ull, 1929506651006390ull}},
+{{623374179944097412ull, 1543605320805112ull}},
+{{11566745788181008900ull, 1234884256644089ull}},
+{{7438746816863883268ull, 1975814810630543ull}},
+{{13329695082974927260ull, 1580651848504434ull}},
+{{14353104881121852132ull, 1264521478803547ull}},
+{{8207572550827322120ull, 2023234366085676ull}},
+{{2876709225919947372ull, 1618587492868541ull}},
+{{17058762639703599192ull, 1294869994294832ull}},
+{{12536624964558117412ull, 2071791990871732ull}},
+{{2650602342162673284ull, 1657433592697386ull}},
+{{16877877132697779920ull, 1325946874157908ull}},
+{{4868510523864985932ull, 2121514998652654ull}},
+{{7584157233833899068ull, 1697211998922123ull}},
+{{13446023416550939900ull, 1357769599137698ull}},
+{{17824288651739593520ull, 2172431358620317ull}},
+{{6880733291907854168ull, 1737945086896254ull}},
+{{9193935448268193656ull, 1390356069517003ull}},
+{{11020947902487199532ull, 2224569711227205ull}},
+{{8816758321989759624ull, 1779655768981764ull}},
+{{10742755472333718024ull, 1423724615185411ull}},
+{{4904855563125064096ull, 1138979692148329ull}},
+{{15226466530483923200ull, 1822367507437326ull}},
+{{8491824409645228236ull, 1457894005949861ull}},
+{{3104110712974272264ull, 1166315204759889ull}},
+{{12345274770242656272ull, 1866104327615822ull}},
+{{2497522186710304368ull, 1492883462092658ull}},
+{{9376715378852064140ull, 1194306769674126ull}},
+{{7624046976679481980ull, 1910890831478602ull}},
+{{17167284025569316556ull, 1528712665182881ull}},
+{{10044478405713542920ull, 1222970132146305ull}},
+{{16071165449141668672ull, 1956752211434088ull}},
+{{1788885915087603968ull, 1565401769147271ull}},
+{{16188503991037724468ull, 1252321415317816ull}},
+{{76164682466986888ull, 2003714264508507ull}},
+{{11128978190199320480ull, 1602971411606805ull}},
+{{8903182552159456384ull, 1282377129285444ull}},
+{{3177045639229399244ull, 2051803406856711ull}},
+{{17299031770351160688ull, 1641442725485368ull}},
+{{2771178972055197580ull, 1313154180388295ull}},
+{{4433886355288316128ull, 2101046688621272ull}},
+{{14615155528456383872ull, 1680837350897017ull}},
+{{4313426793281286452ull, 1344669880717614ull}},
+{{14280180498733878968ull, 2151471809148182ull}},
+{{4045446769503282528ull, 1721177447318546ull}},
+{{17993752674570267316ull, 1376941957854836ull}},
+{{2964562576119055444ull, 2203107132567739ull}},
+{{6060998875637154676ull, 1762485706054191ull}},
+{{1159450285767813416ull, 1409988564843353ull}},
+{{8306257858098071380ull, 1127990851874682ull}},
+{{16979361387698824532ull, 1804785362999491ull}},
+{{9894140295417149304ull, 1443828290399593ull}},
+{{15294009865817540088ull, 1155062632319674ull}},
+{{13402369341082333172ull, 1848100211711479ull}},
+{{14411244287607776860ull, 1478480169369183ull}},
+{{460948985860490520ull, 1182784135495347ull}},
+{{4426867192118695156ull, 1892454616792555ull}},
+{{3541493753694956124ull, 1513963693434044ull}},
+{{6522543817697875220ull, 1211170954747235ull}},
+{{10436070108316600356ull, 1937873527595576ull}},
+{{4659507271911369960ull, 1550298822076461ull}},
+{{38257002787185644ull, 1240239057661169ull}},
+{{7439908833943317680ull, 1984382492257870ull}},
+{{5951927067154654144ull, 1587505993806296ull}},
+{{1072192838981812992ull, 1270004795045037ull}},
+{{5404857357112811108ull, 2032007672072059ull}},
+{{8013234700432159212ull, 1625606137657647ull}},
+{{17478634204571458336ull, 1300484910126117ull}},
+{{13208419468346692048ull, 2080775856201788ull}},
+{{17945433204161174284ull, 1664620684961430ull}},
+{{14356346563328939428ull, 1331696547969144ull}},
+{{11902108057100572116ull, 2130714476750631ull}},
+{{5832337630938547368ull, 1704571581400505ull}},
+{{4665870104750837896ull, 1363657265120404ull}},
+{{14844089797085161280ull, 2181851624192646ull}},
+{{8185923022926218700ull, 1745481299354117ull}},
+{{17616784862566705928ull, 1396385039483293ull}},
+{{6050762891655267548ull, 2234216063173270ull}},
+{{4840610313324214040ull, 1787372850538616ull}},
+{{183139435917460908ull, 1429898280430893ull}},
+{{7525209178217789372ull, 1143918624344714ull}},
+{{972288240922732028ull, 1830269798951543ull}},
+{{8156528222222006268ull, 1464215839161234ull}},
+{{10214571392519515336ull, 1171372671328987ull}},
+{{1585918969063583248ull, 1874196274126380ull}},
+{{1268735175250866596ull, 1499357019301104ull}},
+{{4704336954942603600ull, 1199485615440883ull}},
+{{3837590313166255440ull, 1919176984705413ull}},
+{{10448769880016824996ull, 1535341587764330ull}},
+{{8359015904013459996ull, 1228273270211464ull}},
+{{2306379002195805028ull, 1965237232338343ull}},
+{{9223800831240464668ull, 1572189785870674ull}},
+{{11068389479734282056ull, 1257751828696539ull}},
+{{6641376723349120324ull, 2012402925914463ull}},
+{{12691799008163116904ull, 1609922340731570ull}},
+{{10153439206530493524ull, 1287937872585256ull}},
+{{8866805100964968992ull, 2060700596136410ull}},
+{{7093444080771975192ull, 1648560476909128ull}},
+{{13053452894101400800ull, 1318848381527302ull}},
+{{6128129371594599988ull, 2110157410443684ull}},
+{{8591852312017590312ull, 1688125928354947ull}},
+{{17941528293839803220ull, 1350500742683957ull}},
+{{13949050011176043860ull, 2160801188294332ull}},
+{{3780542379457014440ull, 1728640950635466ull}},
+{{17781829162533252844ull, 1382912760508372ull}},
+{{13693531401085563260ull, 2212660416813396ull}},
+{{7265476306126540284ull, 1770128333450717ull}},
+{{16880427489126963196ull, 1416102666760573ull}},
+{{2436295547075839588ull, 1132882133408459ull}},
+{{11276770504805163988ull, 1812611413453534ull}},
+{{12710765218586041512ull, 1450089130762827ull}},
+{{2789914545385012564ull, 1160071304610262ull}},
+{{8153212087357930428ull, 1856114087376419ull}},
+{{10211918484628254664ull, 1484891269901135ull}},
+{{8169534787702603732ull, 1187913015920908ull}},
+{{9381906845582255648ull, 1900660825473453ull}},
+{{14884223105949625164ull, 1520528660378762ull}},
+{{4528680855275879484ull, 1216422928303010ull}},
+{{7245889368441407176ull, 1946276685284816ull}},
+{{2107362680011215416ull, 1557021348227853ull}},
+{{9064587773492792980ull, 1245617078582282ull}},
+{{18192689252330379092ull, 1992987325731651ull}},
+{{10864802587122392952ull, 1594389860585321ull}},
+{{5002493254956004036ull, 1275511888468257ull}},
+{{11693338022671516784ull, 2040819021549211ull}},
+{{5665321603395303104ull, 1632655217239369ull}},
+{{8221606097458152804ull, 1306124173791495ull}},
+{{13154569755933044488ull, 2089798678066392ull}},
+{{3144958175262614944ull, 1671838942453114ull}},
+{{6205315354952002280ull, 1337471153962491ull}},
+{{2549806938439383000ull, 2139953846339986ull}},
+{{16797240809719147692ull, 1711963077071988ull}},
+{{2369746203549587184ull, 1369570461657591ull}},
+{{14859640369905070468ull, 2191312738652145ull}},
+{{11887712295924056372ull, 1753050190921716ull}},
+{{5820821021997334776ull, 1402440152737373ull}},
+{{5623964820453825316ull, 2243904244379797ull}},
+{{15567218300588791224ull, 1795123395503837ull}},
+{{5075077010987212332ull, 1436098716403070ull}},
+{{4060061608789769864ull, 1148878973122456ull}},
+{{17564145018289362756ull, 1838206356995929ull}},
+{{17740664829373400528ull, 1470565085596743ull}},
+{{3124485419272989452ull, 1176452068477395ull}},
+{{4999176670836783124ull, 1882323309563832ull}},
+{{15067387780895157468ull, 1505858647651065ull}},
+{{12053910224716125972ull, 1204686918120852ull}},
+{{4528861100578160268ull, 1927499068993364ull}},
+{{7312437695204438536ull, 1541999255194691ull}},
+{{2160601341421640504ull, 1233599404155753ull}},
+{{18214357405242266104ull, 1973759046649204ull}},
+{{18260834738935723204ull, 1579007237319363ull}},
+{{3540621346922847592ull, 1263205789855491ull}},
+{{16733040599302287120ull, 2021129263768785ull}},
+{{13386432479441829696ull, 1616903411015028ull}},
+{{18087843613037284404ull, 1293522728812022ull}},
+{{14183154521892013752ull, 2069636366099236ull}},
+{{7657174802771700680ull, 1655709092879389ull}},
+{{9815088656959270864ull, 1324567274303511ull}},
+{{8325444221651012740ull, 2119307638885618ull}},
+{{14039053006804630836ull, 1695446111108494ull}},
+{{14920591220185614992ull, 1356356888886795ull}},
+{{5426201878587432376ull, 2170171022218873ull}},
+{{11719659132353766544ull, 1736136817775098ull}},
+{{16754424935366833884ull, 1388909454220078ull}},
+{{4670987008135472272ull, 2222255126752126ull}},
+{{47440791766467496ull, 1777804101401701ull}},
+{{14795347892380815288ull, 1422243281121360ull}},
+{{11836278313904652232ull, 1137794624897088ull}},
+{{15248696487505533248ull, 1820471399835341ull}},
+{{8509608375262516272ull, 1456377119868273ull}},
+{{14186384329693833664ull, 1165101695894618ull}},
+{{562122039058671928ull, 1864162713431390ull}},
+{{449697631246937540ull, 1491330170745112ull}},
+{{11427804549223281000ull, 1193064136596089ull}},
+{{7216440834531518636ull, 1908902618553743ull}},
+{{13151850297109035552ull, 1527122094842994ull}},
+{{14210829052429138764ull, 1221697675874395ull}},
+{{4290582410177070412ull, 1954716281399033ull}},
+{{10811163557625476976ull, 1563773025119226ull}},
+{{4959582031358471256ull, 1251018420095381ull}},
+{{556633620689733364ull, 2001629472152610ull}},
+{{445306896551786692ull, 1601303577722088ull}},
+{{7734943146725250000ull, 1281042862177670ull}},
+{{12375909034760400000ull, 2049668579484272ull}},
+{{2522029598324499352ull, 1639734863587418ull}},
+{{9396321308143420128ull, 1311787890869934ull}},
+{{3966067648803741236ull, 2098860625391895ull}},
+{{3172854119042992988ull, 1679088500313516ull}},
+{{17295678554202035684ull, 1343270800250812ull}},
+{{12915690427755615800ull, 2149233280401300ull}},
+{{10332552342204492640ull, 1719386624321040ull}},
+{{8266041873763594112ull, 1375509299456832ull}},
+{{16915015812763660904ull, 2200814879130931ull}},
+{{9842663835469018400ull, 1760651903304745ull}},
+{{7874131068375214720ull, 1408521522643796ull}},
+{{2609956039958261452ull, 1126817218115037ull}},
+{{7865278478675128648ull, 1802907548984059ull}},
+{{9981571597682013240ull, 1442326039187247ull}},
+{{606559648661789944ull, 1153860831349798ull}},
+{{15727890696826505208ull, 1846177330159676ull}},
+{{8892963742719293844ull, 1476941864127741ull}},
+{{3425022179433524752ull, 1181553491302193ull}},
+{{1790686672351729280ull, 1890485586083509ull}},
+{{5121898152623293744ull, 1512388468866807ull}},
+{{15165564966324365964ull, 1209910775093445ull}},
+{{5818159872409433928ull, 1935857240149513ull}},
+{{12033225527411367788ull, 1548685792119610ull}},
+{{9626580421929094232ull, 1238948633695688ull}},
+{{11713179860344640448ull, 1982317813913101ull}},
+{{5681195073533802036ull, 1585854251130481ull}},
+{{855607244085131304ull, 1268683400904385ull}},
+{{1368971590536210088ull, 2029893441447016ull}},
+{{15852572531396609364ull, 1623914753157612ull}},
+{{5303360395633466844ull, 1299131802526090ull}},
+{{8485376633013546952ull, 2078610884041744ull}},
+{{10477650121152747884ull, 1662888707233395ull}},
+{{8382120096922198308ull, 1330310965786716ull}},
+{{6032694525591696644ull, 2128497545258746ull}},
+{{1136806805731446992ull, 1702798036206997ull}},
+{{11977491888810888564ull, 1362238428965597ull}},
+{{4406591763129780408ull, 2179581486344956ull}},
+{{18282668669471465620ull, 1743665189075964ull}},
+{{18315483750319082820ull, 1394932151260771ull}},
+{{3479332297317160248ull, 2231891442017235ull}},
+{{2783465837853728200ull, 1785513153613788ull}},
+{{9605470299766803204ull, 1428410522891030ull}},
+{{7684376239813442564ull, 1142728418312824ull}},
+{{1226955539475777132ull, 1828365469300519ull}},
+{{4670913246322532028ull, 1462692375440415ull}},
+{{3736730597058025624ull, 1170153900352332ull}},
+{{9668117770034751320ull, 1872246240563731ull}},
+{{4045145401285890732ull, 1497796992450985ull}},
+{{3236116321028712588ull, 1198237593960788ull}},
+{{1488437298904029816ull, 1917180150337261ull}},
+{{15948145098090865144ull, 1533744120269808ull}},
+{{1690469634246961148ull, 1226995296215847ull}},
+{{6394100229537048160ull, 1963192473945355ull}},
+{{5115280183629638528ull, 1570553979156284ull}},
+{{7781572961645621144ull, 1256443183325027ull}},
+{{16139865553374904156ull, 2010309093320043ull}},
+{{1843845998474192356ull, 1608247274656035ull}},
+{{1475076798779353884ull, 1286597819724828ull}},
+{{17117518137014607508ull, 2058556511559724ull}},
+{{17383363324353596328ull, 1646845209247779ull}},
+{{17596039474224787384ull, 1317476167398223ull}},
+{{6017570270308197880ull, 2107961867837158ull}},
+{{12192753845730378948ull, 1686369494269726ull}},
+{{6064854261842392836ull, 1349095595415781ull}},
+{{2325069189464007892ull, 2158552952665250ull}},
+{{1860055351571206312ull, 1726842362132200ull}},
+{{1488044281256965048ull, 1381473889705760ull}},
+{{2380870850011144080ull, 2210358223529216ull}},
+{{16662091938976556556ull, 1768286578823372ull}},
+{{5950975921697424600ull, 1414629263058698ull}},
+{{12139478366841760324ull, 1131703410446958ull}},
+{{15733816572204906200ull, 1810725456715133ull}},
+{{1519006813538193988ull, 1448580365372107ull}},
+{{12283251895056286160ull, 1158864292297685ull}},
+{{1206458958380506240ull, 1854182867676297ull}},
+{{12033213610930135964ull, 1483346294141037ull}},
+{{2247873259260288124ull, 1186677035312830ull}},
+{{3596597214816460996ull, 1898683256500528ull}},
+{{10255975401336989444ull, 1518946605200422ull}},
+{{826082691585770908ull, 1215157284160338ull}},
+{{16079127565504874748ull, 1944251654656540ull}},
+{{12863302052403899796ull, 1555401323725232ull}},
+{{2911944012439299192ull, 1244321058980186ull}},
+{{15727156864128609676ull, 1990913694368297ull}},
+{{5203027861819067096ull, 1592730955494638ull}},
+{{11541119918939074320ull, 1274184764395710ull}},
+{{19047796592967300ull, 2038695623033137ull}},
+{{11083284681500104808ull, 1630956498426509ull}},
+{{12555976559941994172ull, 1304765198741207ull}},
+{{5332167236939549380ull, 2087624317985932ull}},
+{{15333780233777370472ull, 1670099454388745ull}},
+{{12267024187021896380ull, 1336079563510996ull}},
+{{12248541069751213560ull, 2137727301617594ull}},
+{{13488181670542881172ull, 1710181841294075ull}},
+{{10790545336434304936ull, 1368145473035260ull}},
+{{17264872538294887900ull, 2189032756856416ull}},
+{{10122549215893999996ull, 1751226205485133ull}},
+{{15476737002199020644ull, 1400980964388106ull}},
+{{17384081574034612384ull, 2241569543020970ull}},
+{{13907265259227689908ull, 1793255634416776ull}},
+{{7436463392640241600ull, 1434604507533421ull}},
+{{2259821899370282956ull, 1147683606026737ull}},
+{{7305063853734363056ull, 1836293769642779ull}},
+{{9533399897729400768ull, 1469035015714223ull}},
+{{15005417547667341260ull, 1175228012571378ull}},
+{{1872575187816284080ull, 1880364820114206ull}},
+{{16255455409220668556ull, 1504291856091364ull}},
+{{16693713142118445168ull, 1203433484873091ull}},
+{{884499324196140008ull, 1925493575796947ull}},
+{{11775645903582642976ull, 1540394860637557ull}},
+{{2041819093382293732ull, 1232315888510046ull}},
+{{14334956993637400944ull, 1971705421616073ull}},
+{{399919150684189784ull, 1577364337292859ull}},
+{{4009284135289262152ull, 1261891469834287ull}},
+{{10104203431204729764ull, 2019026351734859ull}},
+{{11772711559705694136ull, 1615221081387887ull}},
+{{2039471618280734660ull, 1292176865110310ull}},
+{{3263154589249175460ull, 2067482984176496ull}},
+{{17367918930366981660ull, 1653986387341196ull}},
+{{10204986329551675004ull, 1323189109872957ull}},
+{{1570582868315038716ull, 2117102575796732ull}},
+{{12324512738877761940ull, 1693682060637385ull}},
+{{9859610191102209552ull, 1354945648509908ull}},
+{{12086027491021624960ull, 2167913037615853ull}},
+{{17047519622301120616ull, 1734330430092682ull}},
+{{6259318068357075844ull, 1387464344074146ull}},
+{{2636211279887500708ull, 2219942950518634ull}},
+{{5798317838651910888ull, 1775954360414907ull}},
+{{15706700715147259680ull, 1420763488331925ull}},
+{{12565360572117807744ull, 1136610790665540ull}},
+{{1657832841678940776ull, 1818577265064865ull}},
+{{1326266273343152620ull, 1454861812051892ull}},
+{{12129059462900253064ull, 1163889449641513ull}},
+{{15717146325898494584ull, 1862223119426421ull}},
+{{8884368245976885344ull, 1489778495541137ull}},
+{{18175541041007239244ull, 1191822796432909ull}},
+{{18012819221385851820ull, 1906916474292655ull}},
+{{14410255377108681456ull, 1525533179434124ull}},
+{{15217553116428855488ull, 1220426543547299ull}},
+{{13280038542060437812ull, 1952682469675679ull}},
+{{14313379648390260572ull, 1562145975740543ull}},
+{{382657274486477488ull, 1249716780592435ull}},
+{{612251639178363980ull, 1999546848947896ull}},
+{{15247196570310332476ull, 1599637479158316ull}},
+{{8508408441506355660ull, 1279709983326653ull}},
+{{9924104691668258732ull, 2047535973322645ull}},
+{{7939283753334606984ull, 1638028778658116ull}},
+{{2662078187925775264ull, 1310423022926493ull}},
+{{569976285939330100ull, 2096676836682389ull}},
+{{4145329843493374404ull, 1677341469345911ull}},
+{{18073659133762340816ull, 1341873175476728ull}},
+{{6781761725568283368ull, 2146997080762766ull}},
+{{1736060565712716368ull, 1717597664610213ull}},
+{{8767546082053993740ull, 1374078131688170ull}},
+{{14028073731286389988ull, 2198525010701072ull}},
+{{3843761355545291344ull, 1758820008560858ull}},
+{{10453706713920053720ull, 1407056006848686ull}},
+{{9347233112788265308ull, 2251289610957898ull}},
+{{14856484119714432892ull, 1801031688766318ull}},
+{{817140851545815344ull, 1440825351013055ull}},
+{{653712681236652276ull, 1152660280810444ull}},
+{{8424637919462464288ull, 1844256449296710ull}},
+{{6739710335569971428ull, 1475405159437368ull}},
+{{12770465897939797788ull, 1180324127549894ull}},
+{{9364698992477945496ull, 1888518604079831ull}},
+{{3802410379240446072ull, 1510814883263865ull}},
+{{3041928303392356856ull, 1208651906611092ull}},
+{{8556434100169681296ull, 1933843050577747ull}},
+{{17913193724361476008ull, 1547074440462197ull}},
+{{6951857350005360160ull, 1237659552369758ull}},
+{{7433622945266665932ull, 1980255283791613ull}},
+{{13325595985697153392ull, 1584204227033290ull}},
+{{10660476788557722712ull, 1267363381626632ull}},
+{{2299367602724715048ull, 2027781410602612ull}},
+{{12907540526405503008ull, 1622225128482089ull}},
+{{14015381235866312728ull, 1297780102785671ull}},
+{{15045912347902279720ull, 2076448164457074ull}},
+{{15726078693063734100ull, 1661158531565659ull}},
+{{16270211769192897604ull, 1328926825252527ull}},
+{{11274943571740994872ull, 2126282920404044ull}},
+{{12709303672134706220ull, 1701026336323235ull}},
+{{10167442937707764976ull, 1360821069058588ull}},
+{{12578559885590513640ull, 2177313710493741ull}},
+{{6373499093730500588ull, 1741850968394993ull}},
+{{12477496904468221116ull, 1393480774715994ull}},
+{{8895948602923422820ull, 2229569239545591ull}},
+{{3427410067596827932ull, 1783655391636473ull}},
+{{10120625683561282992ull, 1426924313309178ull}},
+{{15475198176332847040ull, 1141539450647342ull}},
+{{10002921823164913972ull, 1826463121035748ull}},
+{{15381035088015751824ull, 1461170496828598ull}},
+{{1236781626186870488ull, 1168936397462879ull}},
+{{9357548231382813428ull, 1870298235940606ull}},
+{{3796689770364340420ull, 1496238588752485ull}},
+{{3037351816291472336ull, 1196990871001988ull}},
+{{1170414091324445412ull, 1915185393603181ull}},
+{{15693726532027197624ull, 1532148314882544ull}},
+{{16244330040363668420ull, 1225718651906035ull}},
+{{7544183990872317860ull, 1961149843049657ull}},
+{{17103393636923585256ull, 1568919874439725ull}},
+{{13682714909538868204ull, 1255135899551780ull}},
+{{3445599781552637512ull, 2008217439282849ull}},
+{{6445828639984020332ull, 1606573951426279ull}},
+{{8846011726729126588ull, 1285259161141023ull}},
+{{10464269948024692220ull, 2056414657825637ull}},
+{{992718328935933128ull, 1645131726260510ull}},
+{{794174663148746504ull, 1316105381008408ull}},
+{{16028074720005635700ull, 2105768609613452ull}},
+{{5443762146520687912ull, 1684614887690762ull}},
+{{15423056161442281300ull, 1347691910152609ull}},
+{{13608843414081919112ull, 2156307056244175ull}},
+{{10887074731265535288ull, 1725045644995340ull}},
+{{8709659785012428232ull, 1380036515996272ull}},
+{{17624804470761795492ull, 2208058425594035ull}},
+{{14099843576609436392ull, 1766446740475228ull}},
+{{211828417061818144ull, 1413157392380183ull}},
+{{7548160363133275164ull, 1130525913904146ull}},
+{{4698358951529419616ull, 1808841462246634ull}},
+{{7448035975965446016ull, 1447073169797307ull}},
+{{17026475224998087780ull, 1157658535837845ull}},
+{{8795616286287388832ull, 1852253657340553ull}},
+{{14415190658513731712ull, 1481802925872442ull}},
+{{4153454897327164724ull, 1185442340697954ull}},
+{{14024225465207284204ull, 1896707745116726ull}},
+{{7530031557423917040ull, 1517366196093381ull}},
+{{2334676431197223308ull, 1213892956874705ull}},
+{{3735482289915557296ull, 1942228730999528ull}},
+{{10367083461416266484ull, 1553782984799622ull}},
+{{914969139649192540ull, 1243026387839698ull}},
+{{16221345882406349356ull, 1988842220543516ull}},
+{{9287727891183169160ull, 1591073776434813ull}},
+{{14808879942430355976ull, 1272859021147850ull}},
+{{5247463834179017944ull, 2036574433836561ull}},
+{{508622252601304032ull, 1629259547069249ull}},
+{{4096246616822953548ull, 1303407637655399ull}},
+{{13932692216400546328ull, 2085452220248638ull}},
+{{78107328894706092ull, 1668361776198911ull}},
+{{14819881122083406164ull, 1334689420959128ull}},
+{{1575716906881987928ull, 2135503073534606ull}},
+{{16017968784473231632ull, 1708402458827684ull}},
+{{16503723842320495628ull, 1366721967062147ull}},
+{{11648562888745151716ull, 2186755147299436ull}},
+{{5629501496254211048ull, 1749404117839549ull}},
+{{8192950011745279164ull, 1399523294271639ull}},
+{{2040673574566715692ull, 2239237270834623ull}},
+{{9011236489137193200ull, 1791389816667698ull}},
+{{14587686820793575204ull, 1433111853334158ull}},
+{{602103012409129196ull, 1146489482667327ull}},
+{{4652713634596517036ull, 1834383172267723ull}},
+{{11100868537161034272ull, 1467506537814178ull}},
+{{16259392459212648064ull, 1174005230251342ull}},
+{{11257632675772595612ull, 1878408368402148ull}},
+{{16384803770101897136ull, 1502726694721718ull}},
+{{2039796571855786740ull, 1202181355777375ull}},
+{{3263674514969258784ull, 1923490169243800ull}},
+{{2610939611975407028ull, 1538792135395040ull}},
+{{2088751689580325620ull, 1231033708316032ull}},
+{{7031351518070431316ull, 1969653933305651ull}},
+{{1935732399714434732ull, 1575723146644521ull}},
+{{16305981178739189076ull, 1260578517315616ull}},
+{{264128182789330260ull, 2016925627704987ull}},
+{{11279348990457195180ull, 1613540502163989ull}},
+{{12712828007107666464ull, 1290832401731191ull}},
+{{12961827181888445700ull, 2065331842769906ull}},
+{{6680112930768846236ull, 1652265474215925ull}},
+{{5344090344615076988ull, 1321812379372740ull}},
+{{8550544551384123184ull, 2114899806996384ull}},
+{{10529784455849208868ull, 1691919845597107ull}},
+{{1045129935195546448ull, 1353535876477686ull}},
+{{12740254340538605288ull, 2165657402364297ull}},
+{{2813505842947063584ull, 1732525921891438ull}},
+{{9629502303841471512ull, 1386020737513150ull}},
+{{15407203686146354424ull, 2217633180021040ull}},
+{{12325762948917083536ull, 1774106544016832ull}},
+{{2481912729649846184ull, 1419285235213466ull}},
+{{16742925442687518240ull, 1135428188170772ull}},
+{{12031285449332387892ull, 1816685101073236ull}},
+{{5935679544723999988ull, 1453348080858589ull}},
+{{8437892450521110312ull, 1162678464686871ull}},
+{{6121930291349955856ull, 1860285543498994ull}},
+{{8586893047821875008ull, 1488228434799195ull}},
+{{6869514438257500008ull, 1190582747839356ull}},
+{{3612525471728179364ull, 1904932396542970ull}},
+{{2890020377382543492ull, 1523945917234376ull}},
+{{17069411560873676084ull, 1219156733787500ull}},
+{{8864314423688330124ull, 1950650774060001ull}},
+{{3402102724208753776ull, 1560520619248001ull}},
+{{17479077438334644312ull, 1248416495398400ull}},
+{{9519779827625879284ull, 1997466392637441ull}},
+{{3926475047358793104ull, 1597973114109953ull}},
+{{10519877667370855128ull, 1278378491287962ull}},
+{{2074409008825726916ull, 2045405586060740ull}},
+{{1659527207060581532ull, 1636324468848592ull}},
+{{12395668209874196196ull, 1309059575078873ull}},
+{{16143720321056803588ull, 2094495320126197ull}},
+{{5536278627361622224ull, 1675596256100958ull}},
+{{11807720531373118424ull, 1340477004880766ull}},
+{{11513655220713168836ull, 2144763207809226ull}},
+{{5521575361828624744ull, 1715810566247381ull}},
+{{727911474720989472ull, 1372648452997905ull}},
+{{1164658359553583156ull, 2196237524796648ull}},
+{{8310424317126687172ull, 1756990019837318ull}},
+{{14027037083185170384ull, 1405592015869854ull}},
+{{11375212888870541644ull, 2248947225391767ull}},
+{{1721472681612612668ull, 1799157780313414ull}},
+{{5066526960032000456ull, 1439326224250731ull}},
+{{363872753283690044ull, 1151460979400585ull}},
+{{582196405253904068ull, 1842337567040936ull}},
+{{15223152383170764548ull, 1473870053632748ull}},
+{{1110475462310880668ull, 1179096042906199ull}},
+{{9155458369181229716ull, 1886553668649918ull}},
+{{14703064324828804420ull, 1509242934919934ull}},
+{{15451800274604953860ull, 1207394347935947ull}},
+{{9965485180400284880ull, 1931830956697516ull}},
+{{4283039329578317580ull, 1545464765358013ull}},
+{{10805129093146474712ull, 1236371812286410ull}},
+{{17288206549034359540ull, 1978194899658256ull}},
+{{10141216424485577308ull, 1582555919726605ull}},
+{{8112973139588461848ull, 1266044735781284ull}},
+{{1912710579115807984ull, 2025671577250055ull}},
+{{1530168463292646388ull, 1620537261800044ull}},
+{{4913483585376027432ull, 1296429809440035ull}},
+{{7861573736601643896ull, 2074287695104056ull}},
+{{2599910174539404792ull, 1659430156083245ull}},
+{{2079928139631523832ull, 1327544124866596ull}},
+{{14395931467636169104ull, 2124070599786553ull}},
+{{448698729883204312ull, 1699256479829243ull}},
+{{7737656613390384096ull, 1359405183863394ull}},
+{{1312204137198883584ull, 2175048294181431ull}},
+{{15807158568726748160ull, 1740038635345144ull}},
+{{16335075669723308852ull, 1392030908276115ull}},
+{{7689376997847742548ull, 2227249453241785ull}},
+{{6151501598278194036ull, 1781799562593428ull}},
+{{12299898908106375876ull, 1425439650074742ull}},
+{{2461221497001280056ull, 1140351720059794ull}},
+{{11316652024685868736ull, 1824562752095670ull}},
+{{9053321619748694988ull, 1459650201676536ull}},
+{{3553308481057045664ull, 1167720161341229ull}},
+{{13063991199175093712ull, 1868352258145966ull}},
+{{6761844144598164648ull, 1494681806516773ull}},
+{{12788172945162352364ull, 1195745445213418ull}},
+{{16771727897517853460ull, 1913192712341469ull}},
+{{17106731132756193092ull, 1530554169873175ull}},
+{{13685384906204954472ull, 1224443335898540ull}},
+{{3449871776218375540ull, 1959109337437665ull}},
+{{2759897420974700432ull, 1567287469950132ull}},
+{{13275964381005491316ull, 1253829975960105ull}},
+{{2794798935899234488ull, 2006127961536169ull}},
+{{5925187963461297912ull, 1604902369228935ull}},
+{{4740150370769038332ull, 1283921895383148ull}},
+{{3894891778488551008ull, 2054275032613037ull}},
+{{14183959867016571776ull, 1643420026090429ull}},
+{{15036516708355167744ull, 1314736020872343ull}},
+{{1922333844916806452ull, 2103577633395750ull}},
+{{1537867075933445160ull, 1682862106716600ull}},
+{{1230293660746756128ull, 1346289685373280ull}},
+{{1968469857194809804ull, 2154063496597248ull}},
+{{8953473515239668492ull, 1723250797277798ull}},
+{{14541476441675555440ull, 1378600637822238ull}},
+{{1130269418229426764ull, 2205761020515582ull}},
+{{11972261978809272380ull, 1764608816412465ull}},
+{{9577809583047417904ull, 1411687053129972ull}},
+{{283550036954113676ull, 1129349642503978ull}},
+{{15211075318094223176ull, 1806959428006364ull}},
+{{15858209069217288864ull, 1445567542405091ull}},
+{{8997218440631920768ull, 1156454033924073ull}},
+{{10706200690269162904ull, 1850326454278517ull}},
+{{1186262922731509676ull, 1480261163422814ull}},
+{{4638359152927118064ull, 1184208930738251ull}},
+{{42677015199568260ull, 1894734289181202ull}},
+{{11102188056385385576ull, 1515787431344961ull}},
+{{5192401630366398136ull, 1212629945075969ull}},
+{{15686540238070057668ull, 1940207912121550ull}},
+{{12549232190456046132ull, 1552166329697240ull}},
+{{10039385752364836904ull, 1241733063757792ull}},
+{{1305621944816097756ull, 1986772902012468ull}},
+{{8423195185336698852ull, 1589418321609974ull}},
+{{10427904963011269404ull, 1271534657287979ull}},
+{{5616601496592300080ull, 2034455451660767ull}},
+{{15561327641499571032ull, 1627564361328613ull}},
+{{1381015668973925856ull, 1302051489062891ull}},
+{{13277671514584012340ull, 2083282382500625ull}},
+{{10622137211667209872ull, 1666625906000500ull}},
+{{8497709769333767896ull, 1333300724800400ull}},
+{{13596335630934028636ull, 2133281159680640ull}},
+{{10877068504747222908ull, 1706624927744512ull}},
+{{1322957174313957680ull, 1365299942195610ull}},
+{{2116731478902332288ull, 2184479907512976ull}},
+{{16450780442089507124ull, 1747583926010380ull}},
+{{13160624353671605700ull, 1398067140808304ull}},
+{{9988952521648838148ull, 2236907425293287ull}},
+{{612464387835249872ull, 1789525940234630ull}},
+{{489971510268199900ull, 1431620752187704ull}},
+{{4081326022956470240ull, 1145296601750163ull}},
+{{2840772821988442064ull, 1832474562800261ull}},
+{{17030013516558394944ull, 1465979650240208ull}},
+{{2555964369020984984ull, 1172783720192167ull}},
+{{7778891805175486300ull, 1876453952307467ull}},
+{{17291159888366120008ull, 1501163161845973ull}},
+{{2764881466467165036ull, 1200930529476779ull}},
+{{11802507975831284708ull, 1921488847162846ull}},
+{{5752657565923117444ull, 1537191077730277ull}},
+{{15670172496964224924ull, 1229752862184221ull}},
+{{17693578365658939232ull, 1967604579494754ull}},
+{{17844211507269061708ull, 1574083663595803ull}},
+{{3207322761589518396ull, 1259266930876643ull}},
+{{1442367603801319112ull, 2014827089402629ull}},
+{{4843242897782965612ull, 1611861671522103ull}},
+{{11253291947710193136ull, 1289489337217682ull}},
+{{3247871857368667728ull, 2063182939548292ull}},
+{{13666343930120665152ull, 1650546351638633ull}},
+{{18311772773580352768ull, 1320437081310906ull}},
+{{3473394734535192164ull, 2112699330097451ull}},
+{{17536111046595795024ull, 1690159464077960ull}},
+{{14028888837276636020ull, 1352127571262368ull}},
+{{310129251191155692ull, 2163404114019790ull}},
+{{248103400952924552ull, 1730723291215832ull}},
+{{11266529164988070612ull, 1384578632972665ull}},
+{{18026446663980912980ull, 2215325812756264ull}},
+{{18110506145926640708ull, 1772260650205011ull}},
+{{10799056101999402244ull, 1417808520164009ull}},
+{{12328593696341432116ull, 1134246816131207ull}},
+{{4968354655178650096ull, 1814794905809932ull}},
+{{15042730168368651044ull, 1451835924647945ull}},
+{{12034184134694920836ull, 1161468739718356ull}},
+{{11875996986028052692ull, 1858349983549370ull}},
+{{9500797588822442152ull, 1486679986839496ull}},
+{{3911289256316043400ull, 1189343989471597ull}},
+{{9947411624847579764ull, 1902950383154555ull}},
+{{7957929299878063808ull, 1522360306523644ull}},
+{{10055692254644361372ull, 1217888245218915ull}},
+{{16089107607430978196ull, 1948621192350264ull}},
+{{16560634900686692880ull, 1558896953880211ull}},
+{{9559159105807443980ull, 1247117563104169ull}},
+{{4226608125066179396ull, 1995388100966671ull}},
+{{18138681759020584812ull, 1596310480773336ull}},
+{{10821596592474557524ull, 1277048384618669ull}},
+{{6246508103733561072ull, 2043277415389871ull}},
+{{1307857668244938532ull, 1634621932311897ull}},
+{{12114332578821681796ull, 1307697545849517ull}},
+{{4625536867147049584ull, 2092316073359228ull}},
+{{11079127123201460312ull, 1673852858687382ull}},
+{{1484604069077347604ull, 1339082286949906ull}},
+{{13443412954749487136ull, 2142531659119849ull}},
+{{14444079178541500032ull, 1714025327295879ull}},
+{{15244612157575110348ull, 1371220261836703ull}},
+{{2255286563668714616ull, 2193952418938726ull}},
+{{16561624509902612988ull, 1755161935150980ull}},
+{{13249299607922090388ull, 1404129548120784ull}},
+{{10130832928449613652ull, 2246607276993255ull}},
+{{8104666342759690924ull, 1797285821594604ull}},
+{{10173081888949663060ull, 1437828657275683ull}},
+{{15517163140643551096ull, 1150262925820546ull}},
+{{17448763395545861108ull, 1840420681312874ull}},
+{{17648359531178599208ull, 1472336545050299ull}},
+{{17808036439684789688ull, 1177869236040239ull}},
+{{17424811859269932536ull, 1884590777664383ull}},
+{{2871803043190215056ull, 1507672622131507ull}},
+{{13365488878777903016ull, 1206138097705205ull}},
+{{2938038132335093208ull, 1929820956328329ull}},
+{{6039779320609984892ull, 1543856765062663ull}},
+{{12210521085971808560ull, 1235085412050130ull}},
+{{1090089663845342080ull, 1976136659280209ull}},
+{{4561420545818183984ull, 1580909327424167ull}},
+{{14717182880880278156ull, 1264727461939333ull}},
+{{1411399720956983116ull, 2023563939102934ull}},
+{{4818468591507496816ull, 1618851151282347ull}},
+{{14922821317431728420ull, 1295080921025877ull}},
+{{9119118848923124180ull, 2072129473641404ull}},
+{{10984643893880409668ull, 1657703578913123ull}},
+{{16166412744588148380ull, 1326162863130498ull}},
+{{3730167502889575472ull, 2121860581008798ull}},
+{{10362831631795481024ull, 1697488464807038ull}},
+{{15668962934920205464ull, 1357990771845630ull}},
+{{6623596622162777128ull, 2172785234953009ull}},
+{{8988226112472132024ull, 1738228187962407ull}},
+{{18258627334203436588ull, 1390582550369925ull}},
+{{10767059661015946928ull, 2224932080591881ull}},
+{{4924298914070847220ull, 1779945664473505ull}},
+{{3939439131256677776ull, 1423956531578804ull}},
+{{6840900119747252544ull, 1139165225263043ull}},
+{{7256091376853693744ull, 1822664360420869ull}},
+{{9494221916224865320ull, 1458131488336695ull}},
+{{7595377532979892256ull, 1166505190669356ull}},
+{{4773906423284006964ull, 1866408305070970ull}},
+{{3819125138627205568ull, 1493126644056776ull}},
+{{17812695369869405748ull, 1194501315245420ull}},
+{{10053568518081497584ull, 1911202104392673ull}},
+{{15421552443949018712ull, 1528961683514138ull}},
+{{1269195510933484000ull, 1223169346811311ull}},
+{{13098759261719305372ull, 1957070954898097ull}},
+{{3100309779891623648ull, 1565656763918478ull}},
+{{9858945453397119564ull, 1252525411134782ull}},
+{{1016917466467750012ull, 2004040657815652ull}},
+{{11881580417399930980ull, 1603232526252521ull}},
+{{5815915519178034460ull, 1282586021002017ull}},
+{{12994813645426765460ull, 2052137633603227ull}},
+{{3017153286857591720ull, 1641710106882582ull}},
+{{13481769073711804348ull, 1313368085506065ull}},
+{{3124086444229335340ull, 2101388936809705ull}},
+{{2499269155383468272ull, 1681111149447764ull}},
+{{5688764139048684940ull, 1344888919558211ull}},
+{{1723324992994075260ull, 2151822271293138ull}},
+{{8757357623879080852ull, 1721457817034510ull}},
+{{7005886099103264680ull, 1377166253627608ull}},
+{{7520068943823313168ull, 2203466005804173ull}},
+{{13394752784542471180ull, 1762772804643338ull}},
+{{18094499857117797592ull, 1410218243714670ull}},
+{{14475599885694238072ull, 1128174594971736ull}},
+{{15782262187626960272ull, 1805079351954778ull}},
+{{1557763305875837248ull, 1444063481563823ull}},
+{{8624908274184490444ull, 1155250785251058ull}},
+{{10110504423953274388ull, 1848401256401693ull}},
+{{15467101168646440156ull, 1478721005121354ull}},
+{{16063029749659062448ull, 1182976804097083ull}},
+{{3564754711003037976ull, 1892762886555334ull}},
+{{6541152583544340704ull, 1514210309244267ull}},
+{{16300968511061203532ull, 1211368247395413ull}},
+{{3945456729246463716ull, 1938189195832662ull}},
+{{14224411827622901940ull, 1550551356666129ull}},
+{{15068878276840231876ull, 1240441085332903ull}},
+{{1974112354492909064ull, 1984705736532646ull}},
+{{16336685142561968544ull, 1587764589226116ull}},
+{{9379999299307664512ull, 1270211671380893ull}},
+{{11318650064150352896ull, 2032338674209429ull}},
+{{12744268866062192640ull, 1625870939367543ull}},
+{{17574112722333574756ull, 1300696751494034ull}},
+{{17050533911507988644ull, 2081114802390455ull}},
+{{13640427129206390916ull, 1664891841912364ull}},
+{{14601690518107023056ull, 1331913473529891ull}},
+{{15984007199487416240ull, 2131061557647826ull}},
+{{9097856944848022668ull, 1704849246118261ull}},
+{{3588936741136507812ull, 1363879396894609ull}},
+{{13120996415302233148ull, 2182207035031374ull}},
+{{14186145946983696840ull, 1745765628025099ull}},
+{{15038265572328867796ull, 1396612502420079ull}},
+{{12993178471500457504ull, 2234580003872127ull}},
+{{3015845147716545356ull, 1787664003097702ull}},
+{{13480722562398967256ull, 1430131202478161ull}},
+{{7095229235177263480ull, 1144104961982529ull}},
+{{284320332057890600ull, 1830567939172047ull}},
+{{11295502709872043448ull, 1464454351337637ull}},
+{{1657704538413814112ull, 1171563481070110ull}},
+{{2652327261462102580ull, 1874501569712176ull}},
+{{16879257068137323356ull, 1499601255769740ull}},
+{{13503405654509858684ull, 1199681004615792ull}},
+{{6848053788248132604ull, 1919489607385268ull}},
+{{12857140660082326728ull, 1535591685908214ull}},
+{{13975061342807771708ull, 1228473348726571ull}},
+{{14981400519008614084ull, 1965557357962514ull}},
+{{15674469229948801592ull, 1572445886370011ull}},
+{{8850226569217130948ull, 1257956709096009ull}},
+{{3092316066521678548ull, 2012730734553615ull}},
+{{2473852853217342840ull, 1610184587642892ull}},
+{{13047128726799605240ull, 1288147670114313ull}},
+{{17186057148137458064ull, 2061036272182901ull}},
+{{10059496903768056128ull, 1648829017746321ull}},
+{{4358248708272534580ull, 1319063214197057ull}},
+{{10662546747977965648ull, 2110501142715291ull}},
+{{4840688583640462196ull, 1688400914172233ull}},
+{{11251248496396190404ull, 1350720731337786ull}},
+{{10623299964750084000ull, 2161153170140458ull}},
+{{15877337601283887844ull, 1728922536112366ull}},
+{{9012521266285199952ull, 1383138028889893ull}},
+{{10730685211314409604ull, 2213020846223829ull}},
+{{12273896983793438004ull, 1770416676979063ull}},
+{{17197815216518571048ull, 1416333341583250ull}},
+{{13758252173214856840ull, 1133066673266600ull}},
+{{3566459403434219328ull, 1812906677226561ull}},
+{{17610562781715016756ull, 1450325341781248ull}},
+{{3020403781146282432ull, 1160260273424999ull}},
+{{12211343679317872540ull, 1856416437479998ull}},
+{{17147772572938118680ull, 1485133149983998ull}},
+{{2650171614124763972ull, 1188106519987199ull}},
+{{11618972212083443004ull, 1900970431979518ull}},
+{{16673875399150575052ull, 1520776345583614ull}},
+{{17028449134062370364ull, 1216621076466891ull}},
+{{1420076911306420320ull, 1946593722347027ull}},
+{{12204107973270867224ull, 1557274977877621ull}},
+{{6073937563874783456ull, 1245819982302097ull}},
+{{13407648916941563856ull, 1993311971683355ull}},
+{{10726119133553251084ull, 1594649577346684ull}},
+{{12270244121584511188ull, 1275719661877347ull}},
+{{4874995335567576612ull, 2041151459003756ull}},
+{{210647453712150964ull, 1632921167203005ull}},
+{{168517962969720772ull, 1306336933762404ull}},
+{{7648326370235373884ull, 2090139094019846ull}},
+{{2429312281446388784ull, 1672111275215877ull}},
+{{13011496269382841996ull, 1337689020172701ull}},
+{{13439696401528726548ull, 2140302432276322ull}},
+{{3373059491739160592ull, 1712241945821058ull}},
+{{10077145222875149120ull, 1369793556656846ull}},
+{{8744734727116417944ull, 2191669690650954ull}},
+{{10685136596435044680ull, 1753335752520763ull}},
+{{15926806906631856388ull, 1402668602016610ull}},
+{{7036146976901418608ull, 2244269763226577ull}},
+{{16696964025746865856ull, 1795415810581261ull}},
+{{9668222405855582360ull, 1436332648465009ull}},
+{{11423926739426376212ull, 1149066118772007ull}},
+{{3520887524114560648ull, 1838505790035212ull}},
+{{13884756463517379488ull, 1470804632028169ull}},
+{{14797153985555813912ull, 1176643705622535ull}},
+{{5228702303179750644ull, 1882629928996057ull}},
+{{15251008286769531484ull, 1506103943196845ull}},
+{{12200806629415625188ull, 1204883154557476ull}},
+{{12142592977581179656ull, 1927813047291962ull}},
+{{2335376752581123076ull, 1542250437833570ull}},
+{{1868301402064898460ull, 1233800350266856ull}},
+{{14057328687529568508ull, 1974080560426969ull}},
+{{14935211764765565128ull, 1579264448341575ull}},
+{{11948169411812452104ull, 1263411558673260ull}},
+{{670326985190371752ull, 2021458493877217ull}},
+{{11604308032378028368ull, 1617166795101773ull}},
+{{16662144055386243340ull, 1293733436081418ull}},
+{{4523337600166527408ull, 2069973497730270ull}},
+{{3618670080133221928ull, 1655978798184216ull}},
+{{17652331323074218832ull, 1324783038547372ull}},
+{{13486334857951108844ull, 2119652861675796ull}},
+{{7099719071618976752ull, 1695722289340637ull}},
+{{16747821701520912368ull, 1356577831472509ull}},
+{{15728468278207728824ull, 2170524530356015ull}},
+{{12582774622566183056ull, 1736419624284812ull}},
+{{2687522068569125800ull, 1389135699427850ull}},
+{{4300035309710601280ull, 2222617119084560ull}},
+{{3440028247768481024ull, 1778093695267648ull}},
+{{10130720227698605464ull, 1422474956214118ull}},
+{{15483273811642705016ull, 1137979964971294ull}},
+{{13705191654402597060ull, 1820767943954071ull}},
+{{7274804508780167324ull, 1456614355163257ull}},
+{{16887890051249864828ull, 1165291484130605ull}},
+{{8573880008290232112ull, 1864466374608969ull}},
+{{10548452821374096012ull, 1491573099687175ull}},
+{{8438762257099276808ull, 1193258479749740ull}},
+{{13502019611358842896ull, 1909213567599584ull}},
+{{14490964503828984640ull, 1527370854079667ull}},
+{{4214073973579367064ull, 1221896683263734ull}},
+{{14121215987210807952ull, 1955034693221974ull}},
+{{14986321604510556684ull, 1564027754577579ull}},
+{{15678406098350355668ull, 1251222203662063ull}},
+{{2949356868909107132ull, 2001955525859302ull}},
+{{13427531939353016676ull, 1601564420687441ull}},
+{{7052676736740503016ull, 1281251536549953ull}},
+{{7594933964042894504ull, 2050002458479925ull}},
+{{6075947171234315604ull, 1640001966783940ull}},
+{{4860757736987452484ull, 1312001573427152ull}},
+{{11466561193921834296ull, 2099202517483443ull}},
+{{16551946584621288084ull, 1679362013986754ull}},
+{{16930906082438940788ull, 1343489611189403ull}},
+{{4953356843450843324ull, 2149583377903046ull}},
+{{273336660018764336ull, 1719666702322437ull}},
+{{11286715772240742440ull, 1375733361857949ull}},
+{{6990698791359456932ull, 2201173378972719ull}},
+{{9281907847829475868ull, 1760938703178175ull}},
+{{7425526278263580696ull, 1408750962542540ull}},
+{{5940421022610864556ull, 1127000770034032ull}},
+{{13194022450919293612ull, 1803201232054451ull}},
+{{6865869145993524568ull, 1442560985643561ull}},
+{{1803346502052909332ull, 1154048788514849ull}},
+{{10264052032768475576ull, 1846478061623758ull}},
+{{15589939255698601108ull, 1477182449299006ull}},
+{{8782602589816970560ull, 1181745959439205ull}},
+{{14052164143707152900ull, 1890793535102728ull}},
+{{173684870739991352ull, 1512634828082183ull}},
+{{7517645526075813728ull, 1210107862465746ull}},
+{{4649535212237481316ull, 1936172579945194ull}},
+{{7408976984531895376ull, 1548938063956155ull}},
+{{5927181587625516300ull, 1239150451164924ull}},
+{{16862188169684646728ull, 1982640721863878ull}},
+{{2421704091521986412ull, 1586112577491103ull}},
+{{9316060902701409776ull, 1268890061992882ull}},
+{{148302185354614352ull, 2030224099188612ull}},
+{{11186688192509422448ull, 1624179279350889ull}},
+{{12638699368749448284ull, 1299343423480711ull}},
+{{12843221360515296608ull, 2078949477569138ull}},
+{{17653274717896057932ull, 1663159582055310ull}},
+{{14122619774316846344ull, 1330527665644248ull}},
+{{460098750455492212ull, 2128844265030798ull}},
+{{7746776629848214416ull, 1703075412024638ull}},
+{{13576118933362392180ull, 1362460329619710ull}},
+{{3275046219670275872ull, 2179936527391537ull}},
+{{13688083419961951668ull, 1743949221913229ull}},
+{{14639815550711471656ull, 1395159377530583ull}},
+{{1287611992686892712ull, 2232255004048934ull}},
+{{4719438408891424492ull, 1785804003239147ull}},
+{{14843597171338870564ull, 1428643202591317ull}},
+{{4496180107587275804ull, 1142914562073054ull}},
+{{14572585801623461932ull, 1828663299316886ull}},
+{{7968719826556859224ull, 1462930639453509ull}},
+{{10064324675987397700ull, 1170344511562807ull}},
+{{1345524222612195032ull, 1872551218500492ull}},
+{{12144465822315486992ull, 1498040974800393ull}},
+{{17094270287336210240ull, 1198432779840314ull}},
+{{16282786015512205416ull, 1917492447744503ull}},
+{{1958182368184033364ull, 1533993958195603ull}},
+{{8945243524031047336ull, 1227195166556482ull}},
+{{18001738453191586064ull, 1963512266490371ull}},
+{{10712041947811358528ull, 1570809813192297ull}},
+{{1190935928765266176ull, 1256647850553838ull}},
+{{16662892744992067176ull, 2010636560886140ull}},
+{{13330314195993653740ull, 1608509248708912ull}},
+{{3285553727311102344ull, 1286807398967130ull}},
+{{5256885963697763752ull, 2058891838347408ull}},
+{{11584206400442031648ull, 1647113470677926ull}},
+{{5578016305611714996ull, 1317690776542341ull}},
+{{1546128459494923348ull, 2108305242467746ull}},
+{{15994298026563579968ull, 1686644193974196ull}},
+{{9106089606508953652ull, 1349315355179357ull}},
+{{18259092185156236168ull, 2158904568286971ull}},
+{{10917924933383078612ull, 1727123654629577ull}},
+{{1355642317222642240ull, 1381698923703662ull}},
+{{5858376522298137912ull, 2210718277925859ull}},
+{{8376050032580420652ull, 1768574622340687ull}},
+{{17768886470290067492ull, 1414859697872549ull}},
+{{17904457990973964316ull, 1131887758298039ull}},
+{{17579086341332611936ull, 1811020413276863ull}},
+{{2995222628840358580ull, 1448816330621491ull}},
+{{17153573362039928156ull, 1159053064497192ull}},
+{{12688322120296243756ull, 1854484903195508ull}},
+{{17529355325720815652ull, 1483587922556406ull}},
+{{10334135445834742196ull, 1186870338045125ull}},
+{{16534616713335587516ull, 1898992540872200ull}},
+{{13227693370668470012ull, 1519194032697760ull}},
+{{10582154696534776012ull, 1215355226158208ull}},
+{{13242098699713731296ull, 1944568361853133ull}},
+{{17972376589254805680ull, 1555654689482506ull}},
+{{10688552456661934220ull, 1244523751586005ull}},
+{{17101683930659094756ull, 1991238002537608ull}},
+{{2613300700301544836ull, 1592990402030087ull}},
+{{13158687004466966836ull, 1274392321624069ull}},
+{{9985852762921415972ull, 2039027714598511ull}},
+{{4299333395595222452ull, 1631222171678809ull}},
+{{7128815531218088284ull, 1304977737343047ull}},
+{{15095453664690851580ull, 2087964379748875ull}},
+{{12076362931752681264ull, 1670371503799100ull}},
+{{9661090345402145012ull, 1336297203039280ull}},
+{{15457744552643432020ull, 2138075524862848ull}},
+{{1298149197889014644ull, 1710460419890279ull}},
+{{4727868173053122040ull, 1368368335912223ull}},
+{{3875240262143084940ull, 2189389337459557ull}},
+{{14168238653940198920ull, 1751511469967645ull}},
+{{11334590923152159136ull, 1401209175974116ull}},
+{{10756647847559633972ull, 2241934681558586ull}},
+{{4915969463305796856ull, 1793547745246869ull}},
+{{7622124385386547808ull, 1434838196197495ull}},
+{{6097699508309238244ull, 1147870556957996ull}},
+{{2377621583810960548ull, 1836592891132794ull}},
+{{5591446081790678760ull, 1469274312906235ull}},
+{{4473156865432543008ull, 1175419450324988ull}},
+{{3467702169950158492ull, 1880671120519981ull}},
+{{17531556994927768084ull, 1504536896415984ull}},
+{{17714594410684124792ull, 1203629517132787ull}},
+{{13585955798126958372ull, 1925807227412460ull}},
+{{10868764638501566700ull, 1540645781929968ull}},
+{{16073709340285074004ull, 1232516625543974ull}},
+{{14649888500230387440ull, 1972026600870359ull}},
+{{15409259614926220276ull, 1577621280696287ull}},
+{{4948710062457155572ull, 1262097024557030ull}},
+{{7917936099931448916ull, 2019355239291248ull}},
+{{13713046509428979780ull, 1615484191432998ull}},
+{{18349134837027004468ull, 1292387353146398ull}},
+{{7222522850791745212ull, 2067819765034238ull}},
+{{13156715910117216816ull, 1654255812027390ull}},
+{{10525372728093773452ull, 1323404649621912ull}},
+{{2083201105982396232ull, 2117447439395060ull}},
+{{1666560884785916988ull, 1693957951516048ull}},
+{{8711946337312554236ull, 1355166361212838ull}},
+{{10249765324958176456ull, 2168266177940541ull}},
+{{4510463445224630840ull, 1734612942352433ull}},
+{{10987068385663525316ull, 1387690353881946ull}},
+{{10200611787577819864ull, 2220304566211114ull}},
+{{11849838244804166212ull, 1776243652968891ull}},
+{{5790521781101422648ull, 1420994922375113ull}},
+{{12011115054364958764ull, 1136795937900090ull}},
+{{771040013274382408ull, 1818873500640145ull}},
+{{616832010619505924ull, 1455098800512116ull}},
+{{15250860867463246032ull, 1164079040409692ull}},
+{{9643982128973552360ull, 1862526464655508ull}},
+{{15093883332662662536ull, 1490021171724406ull}},
+{{8385757851388219704ull, 1192016937379525ull}},
+{{13417212562221151528ull, 1907227099807240ull}},
+{{10733770049776921220ull, 1525781679845792ull}},
+{{1208318410337716332ull, 1220625343876634ull}},
+{{9312007086024166776ull, 1953000550202614ull}},
+{{11138954483561243744ull, 1562400440162091ull}},
+{{5221814772107084672ull, 1249920352129673ull}},
+{{4665554820629425152ull, 1999872563407477ull}},
+{{14800490300729271092ull, 1599898050725981ull}},
+{{8151043425841506548ull, 1279918440580785ull}},
+{{13041669481346410480ull, 2047869504929256ull}},
+{{6743986770335218060ull, 1638295603943405ull}},
+{{5395189416268174448ull, 1310636483154724ull}},
+{{16011000695512899764ull, 2097018373047558ull}},
+{{1740754112184588840ull, 1677614698438047ull}},
+{{12460649733973402044ull, 1342091758750437ull}},
+{{5179644315389801976ull, 2147346814000700ull}},
+{{4143715452311841580ull, 1717877451200560ull}},
+{{3314972361849473264ull, 1374301960960448ull}},
+{{1614606964217246900ull, 2198883137536717ull}},
+{{12359732015599528488ull, 1759106510029373ull}},
+{{17266483241963443436ull, 1407285208023498ull}},
+{{5490280298690047564ull, 2251656332837598ull}},
+{{11770921868435858696ull, 1801325066270078ull}},
+{{16795435124232507604ull, 1441060053016062ull}},
+{{6057650469902185436ull, 1152848042412850ull}},
+{{9692240751843496696ull, 1844556867860560ull}},
+{{7753792601474797356ull, 1475645494288448ull}},
+{{13581731710663658532ull, 1180516395430758ull}},
+{{18041421922319943328ull, 1888826232689213ull}},
+{{3365091093630223692ull, 1511060986151371ull}},
+{{17449468133871820248ull, 1208848788921096ull}},
+{{2093707311001540136ull, 1934158062273755ull}},
+{{1674965848801232108ull, 1547326449819004ull}},
+{{5029321493782896008ull, 1237861159855203ull}},
+{{4357565575310723292ull, 1980577855768325ull}},
+{{3486052460248578632ull, 1584462284614660ull}},
+{{2788841968198862904ull, 1267569827691728ull}},
+{{772798334376270328ull, 2028111724306765ull}},
+{{618238667501016260ull, 1622489379445412ull}},
+{{11562637378226543980ull, 1297991503556329ull}},
+{{7432173360936739396ull, 2076786405690127ull}},
+{{17013785132975122488ull, 1661429124552101ull}},
+{{9921679291638187664ull, 1329143299641681ull}},
+{{8495989237137279620ull, 2126629279426690ull}},
+{{6796791389709823696ull, 1701303423541352ull}},
+{{16505479555993589924ull, 1361042738833081ull}},
+{{583325586396371620ull, 2177668382132931ull}},
+{{15224055728084738588ull, 1742134705706344ull}},
+{{15868593397209701192ull, 1393707764565075ull}},
+{{6943005361825970296ull, 2229932423304121ull}},
+{{1865055474718865912ull, 1783945938643297ull}},
+{{12560090824000823700ull, 1427156750914637ull}},
+{{2669375029716838312ull, 1141725400731710ull}},
+{{4271000047546941300ull, 1826760641170736ull}},
+{{18174195297005194332ull, 1461408512936588ull}},
+{{3471309793378424496ull, 1169126810349271ull}},
+{{16622142113631210164ull, 1870602896558833ull}},
+{{2229667246679237164ull, 1496482317247067ull}},
+{{12851780241569120700ull, 1197185853797653ull}},
+{{16873499571768682796ull, 1915497366076245ull}},
+{{13498799657414946236ull, 1532397892860996ull}},
+{{7109690911190046664ull, 1225918314288797ull}},
+{{15064854272645984988ull, 1961469302862075ull}},
+{{12051883418116787992ull, 1569175442289660ull}},
+{{9641506734493430392ull, 1255340353831728ull}},
+{{11737061960447578308ull, 2008544566130765ull}},
+{{9389649568358062644ull, 1606835652904612ull}},
+{{133022025202629468ull, 1285468522323690ull}},
+{{212835240324207152ull, 2056749635717904ull}},
+{{3859617007001276044ull, 1645399708574323ull}},
+{{10466391235084841480ull, 1316319766859458ull}},
+{{13056877161393836048ull, 2106111626975133ull}},
+{{17824199358598889484ull, 1684889301580106ull}},
+{{10570010672137201264ull, 1347911441264085ull}},
+{{16912017075419522024ull, 2156658306022536ull}},
+{{9840264845593707296ull, 1725326644818029ull}},
+{{11561560691216876160ull, 1380261315854423ull}},
+{{14809148291205091532ull, 2208418105367077ull}},
+{{4468621003480252580ull, 1766734484293662ull}},
+{{14642943247009933032ull, 1413387587434929ull}},
+{{15403703412349856748ull, 1130710069947943ull}},
+{{2509832571308308860ull, 1809136111916710ull}},
+{{2007866057046647088ull, 1447308889533368ull}},
+{{8984990475121138316ull, 1157847111626694ull}},
+{{3307938315968090336ull, 1852555378602711ull}},
+{{17403745911742113564ull, 1482044302882168ull}},
+{{2854950285167959880ull, 1185635442305735ull}},
+{{4567920456268735808ull, 1897016707689176ull}},
+{{18411731623982629940ull, 1517613366151340ull}},
+{{14729385299186103952ull, 1214090692921072ull}},
+{{8809621219730125032ull, 1942545108673716ull}},
+{{3358348161042189700ull, 1554036086938973ull}},
+{{10065376158317572408ull, 1243228869551178ull}},
+{{12415253038566205528ull, 1989166191281885ull}},
+{{9932202430852964424ull, 1591332953025508ull}},
+{{15324459574166192184ull, 1273066362420406ull}},
+{{17140437689182086848ull, 2036906179872650ull}},
+{{13712350151345669480ull, 1629524943898120ull}},
+{{10969880121076535584ull, 1303619955118496ull}},
+{{10173110564238636288ull, 2085791928189594ull}},
+{{11827837266132819352ull, 1668633542551675ull}},
+{{9462269812906255480ull, 1334906834041340ull}},
+{{15139631700650008772ull, 2135850934466144ull}},
+{{15801054175261917340ull, 1708680747572915ull}},
+{{12640843340209533872ull, 1366944598058332ull}},
+{{5467954085367612904ull, 2187111356893332ull}},
+{{15442409712519821292ull, 1749689085514665ull}},
+{{12353927770015857032ull, 1399751268411732ull}},
+{{5008889173057729960ull, 2239602029458772ull}},
+{{15075157782671914940ull, 1791681623567017ull}},
+{{4681428596653711304ull, 1433345298853614ull}},
+{{7434491692064879364ull, 1146676239082891ull}},
+{{4516489077819986340ull, 1834681982532626ull}},
+{{18370586521223630364ull, 1467745586026100ull}},
+{{14696469216978904292ull, 1174196468820880ull}},
+{{5067606673456695252ull, 1878714350113409ull}},
+{{7743434153507266524ull, 1502971480090727ull}},
+{{17262793767031544188ull, 1202377184072581ull}},
+{{1795028324057098440ull, 1923803494516131ull}},
+{{16193417918213320044ull, 1539042795612904ull}},
+{{16644083149312566360ull, 1231234236490323ull}},
+{{4494440150448644236ull, 1969974778384518ull}},
+{{10974249749842736036ull, 1575979822707614ull}},
+{{12468748614616099152ull, 1260783858166091ull}},
+{{12571300153901937996ull, 2017254173065746ull}},
+{{6367691308379640072ull, 1613803338452597ull}},
+{{16162199490929443028ull, 1291042670762077ull}},
+{{11102123926519467552ull, 2065668273219324ull}},
+{{12571047955957484364ull, 1652534618575459ull}},
+{{13746187179507897816ull, 1322027694860367ull}},
+{{7236504228244995212ull, 2115244311776588ull}},
+{{13167901012079816816ull, 1692195449421270ull}},
+{{10534320809663853452ull, 1353756359537016ull}},
+{{9476215665978344876ull, 2166010175259226ull}},
+{{3891623718040765580ull, 1732808140207381ull}},
+{{17870694233400253756ull, 1386246512165904ull}},
+{{17525064329214675040ull, 2217994419465447ull}},
+{{6641353833887919384ull, 1774395535572358ull}},
+{{12691780696594156152ull, 1419516428457886ull}},
+{{6464075742533414600ull, 1135613142766309ull}},
+{{17721218817537284008ull, 1816981028426094ull}},
+{{17866323868771737528ull, 1453584822740875ull}},
+{{14293059095017390024ull, 1162867858192700ull}},
+{{4422150478318272420ull, 1860588573108321ull}},
+{{18295115641622259228ull, 1488470858486656ull}},
+{{10946743698555897060ull, 1190776686789325ull}},
+{{17514789917689435296ull, 1905242698862920ull}},
+{{14011831934151548236ull, 1524194159090336ull}},
+{{7520116732579328264ull, 1219355327272269ull}},
+{{964140327901194256ull, 1950968523635631ull}},
+{{15528707521288596696ull, 1560774818908504ull}},
+{{16112314831772787680ull, 1248619855126803ull}},
+{{3643610842384998352ull, 1997791768202886ull}},
+{{17672283932875639972ull, 1598233414562308ull}},
+{{3069780702074781008ull, 1278586731649847ull}},
+{{8600997938061559940ull, 2045738770639755ull}},
+{{6880798350449247952ull, 1636591016511804ull}},
+{{9193987495101308684ull, 1309272813209443ull}},
+{{11021031177420183572ull, 2094836501135109ull}},
+{{12506173756678057180ull, 1675869200908087ull}},
+{{2626241375858625096ull, 1340695360726470ull}},
+{{4201986201373800156ull, 2145112577162352ull}},
+{{14429635405324771096ull, 1716090061729881ull}},
+{{7854359509517906552ull, 1372872049383905ull}},
+{{12566975215228650484ull, 2196595279014248ull}},
+{{17432277801666741032ull, 1757276223211398ull}},
+{{2877775797107661856ull, 1405820978569119ull}},
+{{11983138904856079620ull, 2249313565710590ull}},
+{{9586511123884863696ull, 1799450852568472ull}},
+{{290511269624070308ull, 1439560682054778ull}},
+{{7611106645183076892ull, 1151648545643822ull}},
+{{15867119447034833352ull, 1842637673030115ull}},
+{{12693695557627866684ull, 1474110138424092ull}},
+{{2776258816618472700ull, 1179288110739274ull}},
+{{11820711736073376964ull, 1886860977182838ull}},
+{{16835267018342522220ull, 1509488781746270ull}},
+{{13468213614674017776ull, 1207591025397016ull}},
+{{14170444153994607796ull, 1932145640635226ull}},
+{{7647006508453775912ull, 1545716512508181ull}},
+{{2428256392021110404ull, 1236573210006545ull}},
+{{3885210227233776652ull, 1978517136010472ull}},
+{{14176214626012752288ull, 1582813708808377ull}},
+{{3962274071326381184ull, 1266250967046702ull}},
+{{10028987328864120220ull, 2026001547274723ull}},
+{{15401887492575116824ull, 1620801237819778ull}},
+{{1253463549834362488ull, 1296640990255823ull}},
+{{16762936938702621276ull, 2074625584409316ull}},
+{{9721000736220186696ull, 1659700467527453ull}},
+{{15155498218459970004ull, 1327760374021962ull}},
+{{9491401890568310712ull, 2124416598435140ull}},
+{{7593121512454648568ull, 1699533278748112ull}},
+{{17142543654189449824ull, 1359626622998489ull}},
+{{16360023402477388752ull, 2175402596797583ull}},
+{{2019972277756180032ull, 1740322077438067ull}},
+{{12684024266430674996ull, 1392257661950453ull}},
+{{16605090011547169668ull, 2227612259120725ull}},
+{{13284072009237735736ull, 1782089807296580ull}},
+{{10627257607390188588ull, 1425671845837264ull}},
+{{12191154900654061192ull, 1140537476669811ull}},
+{{12127150211562677264ull, 1824859962671698ull}},
+{{17080417798733962456ull, 1459887970137358ull}},
+{{2596287794761438996ull, 1167910376109887ull}},
+{{7843409286360212716ull, 1868656601775819ull}},
+{{9964076243830080496ull, 1494925281420655ull}},
+{{7971260995064064396ull, 1195940225136524ull}},
+{{1685971147876772064ull, 1913504360218439ull}},
+{{5038125733043327976ull, 1530803488174751ull}},
+{{341151771692752056ull, 1224642790539801ull}},
+{{11613889278934134260ull, 1959428464863681ull}},
+{{5601762608405397084ull, 1567542771890945ull}},
+{{4481410086724317668ull, 1254034217512756ull}},
+{{18238302582984639240ull, 2006454748020409ull}},
+{{18279990881129621716ull, 1605163798416327ull}},
+{{7245295075419876724ull, 1284131038733062ull}},
+{{15281820935413713084ull, 2054609661972899ull}},
+{{15914805563072880792ull, 1643687729578319ull}},
+{{16421193265200214956ull, 1314950183662655ull}},
+{{7827165150610792312ull, 2103920293860249ull}},
+{{9951080935230544172ull, 1683136235088199ull}},
+{{11650213562926345660ull, 1346508988070559ull}},
+{{7572295256456422092ull, 2154414380912895ull}},
+{{6057836205165137672ull, 1723531504730316ull}},
+{{1156920149390199812ull, 1378825203784253ull}},
+{{16608467497991960996ull, 2206120326054804ull}},
+{{16976122813135479120ull, 1764896260843843ull}},
+{{2512851806282652324ull, 1411917008675075ull}},
+{{2010281445026121860ull, 1129533606940060ull}},
+{{3216450312041794976ull, 1807253771104096ull}},
+{{17330555508601077276ull, 1445803016883276ull}},
+{{10175095592138951496ull, 1156642413506621ull}},
+{{8901455317938501748ull, 1850627861610594ull}},
+{{10810513069092711720ull, 1480502289288475ull}},
+{{8648410455274169376ull, 1184401831430780ull}},
+{{13837456728438671004ull, 1895042930289248ull}},
+{{1918938525205832ull, 1516034344231399ull}},
+{{3690883965562074988ull, 1212827475385119ull}},
+{{13284111974383140632ull, 1940523960616190ull}},
+{{10627289579506512504ull, 1552419168492952ull}},
+{{1123134034121389356ull, 1241935334794362ull}},
+{{5486363269336133296ull, 1987096535670979ull}},
+{{8078439430210816960ull, 1589677228536783ull}},
+{{13841449173652474212ull, 1271741782829426ull}},
+{{14767621048360138096ull, 2034786852527082ull}},
+{{4435399209204289828ull, 1627829482021666ull}},
+{{18305714626331073156ull, 1302263585617332ull}},
+{{14531748143162075756ull, 2083621736987732ull}},
+{{4246700885045839960ull, 1666897389590186ull}},
+{{18154755967004313260ull, 1333517911672148ull}},
+{{6911516658755439276ull, 2133628658675438ull}},
+{{12907910956488172068ull, 1706902926940350ull}},
+{{10326328765190537656ull, 1365522341552280ull}},
+{{16522126024304860248ull, 2184835746483648ull}},
+{{2149654375218157228ull, 1747868597186919ull}},
+{{5409072314916436104ull, 1398294877749535ull}},
+{{8654515703866297772ull, 2237271804399256ull}},
+{{3234263748351127892ull, 1789817443519405ull}},
+{{2587410998680902312ull, 1431853954815524ull}},
+{{5759277613686632172ull, 1145483163852419ull}},
+{{16593541811382432124ull, 1832773062163870ull}},
+{{13274833449105945700ull, 1466218449731096ull}},
+{{6930517944542846236ull, 1172974759784877ull}},
+{{14778177526010464304ull, 1876759615655803ull}},
+{{754495576582640472ull, 1501407692524643ull}},
+{{7982294090749933024ull, 1201126154019714ull}},
+{{1703624100974161868ull, 1921801846431543ull}},
+{{8741596910263150140ull, 1537441477145234ull}},
+{{10682626342952430436ull, 1229953181716187ull}},
+{{2334806889756247408ull, 1967925090745900ull}},
+{{1867845511804997924ull, 1574340072596720ull}},
+{{1494276409443998340ull, 1259472058077376ull}},
+{{13458888699336128312ull, 2015155292923801ull}},
+{{7077762144726992328ull, 1612124234339041ull}},
+{{1972860901039683540ull, 1289699387471233ull}},
+{{17913972700631134956ull, 2063519019953972ull}},
+{{6952480531021087316ull, 1650815215963178ull}},
+{{12940682054300690500ull, 1320652172770542ull}},
+{{5947696027913463508ull, 2113043476432868ull}},
+{{12136854451814591452ull, 1690434781146294ull}},
+{{13398832376193583484ull, 1352347824917035ull}},
+{{2991387728200181960ull, 2163756519867257ull}},
+{{13461156626785876536ull, 1731005215893805ull}},
+{{10768925301428701228ull, 1384804172715044ull}},
+{{6162234038060191000ull, 2215686676344071ull}},
+{{1240438415706242476ull, 1772549341075257ull}},
+{{12060397176790724948ull, 1418039472860205ull}},
+{{9648317741432579960ull, 1134431578288164ull}},
+{{4369261942066396968ull, 1815090525261063ull}},
+{{10874107183136938220ull, 1452072420208850ull}},
+{{8699285746509550576ull, 1161657936167080ull}},
+{{13918857194415280920ull, 1858652697867328ull}},
+{{67039311306493768ull, 1486922158293863ull}},
+{{7432329078529015660ull, 1189537726635090ull}},
+{{11891726525646425056ull, 1903260362616144ull}},
+{{13202730035259050368ull, 1522608290092915ull}},
+{{10562184028207240296ull, 1218086632074332ull}},
+{{2142099186163943180ull, 1948938611318932ull}},
+{{12781725793156885512ull, 1559150889055145ull}},
+{{10225380634525508408ull, 1247320711244116ull}},
+{{8981911385756992812ull, 1995713137990586ull}},
+{{3496180293863683924ull, 1596570510392469ull}},
+{{6486293049832857464ull, 1277256408313975ull}},
+{{10378068879732571940ull, 2043610253302360ull}},
+{{8302455103786057552ull, 1634888202641888ull}},
+{{14020661712512666688ull, 1307910562113510ull}},
+{{3986314666310715084ull, 2092656899381617ull}},
+{{14257098177274303036ull, 1674125519505293ull}},
+{{337632097593711460ull, 1339300415604235ull}},
+{{540211356149938336ull, 2142880664966776ull}},
+{{15189564343887591964ull, 1714304531973420ull}},
+{{12151651475110073568ull, 1371443625578736ull}},
+{{12063944730692297068ull, 2194309800925978ull}},
+{{17029853414037658300ull, 1755447840740782ull}},
+{{6245185101746305992ull, 1404358272592626ull}},
+{{2613598533310268944ull, 2246973236148202ull}},
+{{13158925270873946124ull, 1797578588918561ull}},
+{{6837791401957246576ull, 1438062871134849ull}},
+{{9159581936307707584ull, 1150450296907879ull}},
+{{3587284653866601164ull, 1840720475052607ull}},
+{{13937874167319011900ull, 1472576380042085ull}},
+{{11150299333855209520ull, 1178061104033668ull}},
+{{14151130119426424912ull, 1884897766453869ull}},
+{{15010252910283050252ull, 1507918213163095ull}},
+{{12008202328226440200ull, 1206334570530476ull}},
+{{11834426095678483676ull, 1930135312848762ull}},
+{{2088843247058966292ull, 1544108250279010ull}},
+{{1671074597647173036ull, 1235286600223208ull}},
+{{17431114615203118148ull, 1976458560357132ull}},
+{{6566194062678673872ull, 1581166848285706ull}},
+{{1563606435401028776ull, 1264933478628565ull}},
+{{2501770296641646040ull, 2023893565805704ull}},
+{{5690765052055227156ull, 1619114852644563ull}},
+{{11931309671128002368ull, 1295291882115650ull}},
+{{643351400095252176ull, 2072467011385041ull}},
+{{15272076379043843036ull, 1657973609108032ull}},
+{{4838963473751253780ull, 1326378887286426ull}},
+{{363643928518185404ull, 2122206219658282ull}},
+{{11358961587040279292ull, 1697764975726625ull}},
+{{9087169269632223432ull, 1358211980581300ull}},
+{{14539470831411557496ull, 2173139168930080ull}},
+{{11631576665129245996ull, 1738511335144064ull}},
+{{12994610146845307120ull, 1390809068115251ull}},
+{{13412678605468670744ull, 2225294508984402ull}},
+{{3351445254891115948ull, 1780235607187522ull}},
+{{13749202648138623728ull, 1424188485750017ull}},
+{{3620664489027078336ull, 1139350788600014ull}},
+{{13171760811927145984ull, 1822961261760022ull}},
+{{3158711020057896140ull, 1458369009408018ull}},
+{{9905666445530137560ull, 1166695207526414ull}},
+{{4781019868622489128ull, 1866712332042263ull}},
+{{11203513524381811948ull, 1493369865633810ull}},
+{{8962810819505449556ull, 1194695892507048ull}},
+{{10651148496466808968ull, 1911513428011277ull}},
+{{1142221167689626528ull, 1529210742409022ull}},
+{{11981823378377432192ull, 1223368593927217ull}},
+{{4413522146436250216ull, 1957389750283548ull}},
+{{10909515346632820820ull, 1565911800226838ull}},
+{{16106309906790077300ull, 1252729440181470ull}},
+{{7323351777154572068ull, 2004367104290353ull}},
+{{13237379051207478300ull, 1603493683432282ull}},
+{{3211205611482161992ull, 1282794946745826ull}},
+{{16205975422597190160ull, 2052471914793321ull}},
+{{9275431523335841804ull, 1641977531834657ull}},
+{{41647589184852796ull, 1313582025467726ull}},
+{{11134682586921495444ull, 2101731240748361ull}},
+{{5218397254795286032ull, 1681384992598689ull}},
+{{7864066618578139148ull, 1345107994078951ull}},
+{{5203808960241201992ull, 2152172790526322ull}},
+{{15231093612418692564ull, 1721738232421057ull}},
+{{4806177260451133404ull, 1377390585936846ull}},
+{{311185987237992800ull, 2203824937498954ull}},
+{{3938297604532304564ull, 1763059949999163ull}},
+{{10529335713109664296ull, 1410447959999330ull}},
+{{8423468570487731436ull, 1128358367999464ull}},
+{{2409503268554639332ull, 1805373388799143ull}},
+{{9306300244327532112ull, 1444298711039314ull}},
+{{11134389010203936012ull, 1155438968831451ull}},
+{{10436324786842476972ull, 1848702350130322ull}},
+{{970362199990160932ull, 1478961880104258ull}},
+{{8154987389475949392ull, 1183169504083406ull}},
+{{5669282193677698380ull, 1893071206533450ull}},
+{{4535425754942158704ull, 1514456965226760ull}},
+{{3628340603953726964ull, 1211565572181408ull}},
+{{2115996151584052820ull, 1938504915490253ull}},
+{{9071494550751062900ull, 1550803932392202ull}},
+{{18325242084826581288ull, 1240643145913761ull}},
+{{3494945632529157804ull, 1985029033462019ull}},
+{{6485305320765236564ull, 1588023226769615ull}},
+{{5188244256612189252ull, 1270418581415692ull}},
+{{11990539625321413128ull, 2032669730265107ull}},
+{{2213734070773309856ull, 1626135784212086ull}},
+{{16528382515586289176ull, 1300908627369668ull}},
+{{4309319136486600744ull, 2081453803791470ull}},
+{{3447455309189280596ull, 1665163043033176ull}},
+{{17515359506319065768ull, 1332130434426540ull}},
+{{9577831136400953616ull, 2131408695082465ull}},
+{{7662264909120762892ull, 1705126956065972ull}},
+{{17197858371522341284ull, 1364101564852777ull}},
+{{12759178135468104760ull, 2182562503764444ull}},
+{{13896691323116394132ull, 1746050003011555ull}},
+{{11117353058493115304ull, 1396840002409244ull}},
+{{6719718449363253520ull, 2234944003854791ull}},
+{{1686425944748692492ull, 1787955203083833ull}},
+{{8727838385282774640ull, 1430364162467066ull}},
+{{3292921893484309388ull, 1144291329973653ull}},
+{{1579326214832984696ull, 1830866127957845ull}},
+{{1263460971866387756ull, 1464692902366276ull}},
+{{15768164036460751500ull, 1171754321893020ull}},
+{{6782318384627650784ull, 1874806915028833ull}},
+{{12804552337185941272ull, 1499845532023066ull}},
+{{6554293055006842696ull, 1199876425618453ull}},
+{{6797520073269037988ull, 1919802280989525ull}},
+{{5438016058615230392ull, 1535841824791620ull}},
+{{4350412846892184312ull, 1228673459833296ull}},
+{{18028706999253225872ull, 1965877535733273ull}},
+{{3354919155176849728ull, 1572702028586619ull}},
+{{6373284138883390104ull, 1258161622869295ull}},
+{{10197254622213424168ull, 2013058596590872ull}},
+{{779106068286918688ull, 1610446877272698ull}},
+{{8001982484113355596ull, 1288357501818158ull}},
+{{9113823159839458632ull, 2061372002909053ull}},
+{{14669756157355387552ull, 1649097602327242ull}},
+{{4357107296400489392ull, 1319278081861794ull}},
+{{14350069303724603676ull, 2110844930978870ull}},
+{{11480055442979682940ull, 1688675944783096ull}},
+{{5494695539641836028ull, 1350940755826477ull}},
+{{12480861678168847972ull, 2161505209322363ull}},
+{{17363386972018899024ull, 1729204167457890ull}},
+{{13890709577615119220ull, 1383363333966312ull}},
+{{7467740065216549460ull, 2213381334346100ull}},
+{{5974192052173239568ull, 1770705067476880ull}},
+{{4779353641738591652ull, 1416564053981504ull}},
+{{7512831728132783644ull, 1133251243185203ull}},
+{{8331181950270543508ull, 1813201989096325ull}},
+{{6664945560216434808ull, 1450561591277060ull}},
+{{5331956448173147844ull, 1160449273021648ull}},
+{{4841781502335126232ull, 1856718836834637ull}},
+{{14941471646093831952ull, 1485375069467709ull}},
+{{15642526131616975884ull, 1188300055574167ull}},
+{{10270646551619520124ull, 1901280088918668ull}},
+{{15595214870779436748ull, 1521024071134934ull}},
+{{16165520711365459720ull, 1216819256907947ull}},
+{{11107437879217094260ull, 1946910811052716ull}},
+{{5196601488631765084ull, 1557528648842173ull}},
+{{11535978820389232712ull, 1246022919073738ull}},
+{{14768217297880862020ull, 1993636670517981ull}},
+{{8125225023562779292ull, 1594909336414385ull}},
+{{6500180018850223432ull, 1275927469131508ull}},
+{{6710939215418447172ull, 2041483950610413ull}},
+{{12747449001818578384ull, 1633187160488330ull}},
+{{10197959201454862708ull, 1306549728390664ull}},
+{{5248688278102049360ull, 2090479565425063ull}},
+{{11577648251965460136ull, 1672383652340050ull}},
+{{9262118601572368108ull, 1337906921872040ull}},
+{{14819389762515788972ull, 2140651074995264ull}},
+{{15544860624754541500ull, 1712520859996211ull}},
+{{8746539685061722876ull, 1370016687996969ull}},
+{{2926417051873025636ull, 2192026700795151ull}},
+{{17098528900466061800ull, 1753621360636120ull}},
+{{13678823120372849440ull, 1402897088508896ull}},
+{{14507419363112738460ull, 2244635341614234ull}},
+{{15295284305232101092ull, 1795708273291387ull}},
+{{4857529814701860224ull, 1436566618633110ull}},
+{{3886023851761488180ull, 1149253294906488ull}},
+{{2528289348076470768ull, 1838805271850381ull}},
+{{16780026737428817904ull, 1471044217480304ull}},
+{{17113370204684964648ull, 1176835373984243ull}},
+{{5245299439044481496ull, 1882936598374790ull}},
+{{4196239551235585196ull, 1506349278699832ull}},
+{{14425038085214199128ull, 1205079422959865ull}},
+{{4633316862633166988ull, 1928127076735785ull}},
+{{3706653490106533592ull, 1542501661388628ull}},
+{{10344020421569047520ull, 1234001329110902ull}},
+{{1793037415542834740ull, 1974402126577444ull}},
+{{5123778747176178112ull, 1579521701261955ull}},
+{{4099022997740942492ull, 1263617361009564ull}},
+{{13937134425869328632ull, 2021787777615302ull}},
+{{3771009911211642260ull, 1617430222092242ull}},
+{{14084854373195044776ull, 1293944177673793ull}},
+{{399674108660609704ull, 2070310684278070ull}},
+{{319739286928487764ull, 1656248547422456ull}},
+{{15013186688510431504ull, 1324998837937964ull}},
+{{12953052257390959436ull, 2119998140700743ull}},
+{{17741139435396588196ull, 1695998512560594ull}},
+{{17882260363059180880ull, 1356798810048475ull}},
+{{10164872507185137792ull, 2170878096077561ull}},
+{{4442549191006199908ull, 1736702476862049ull}},
+{{7243388167546870252ull, 1389361981489639ull}},
+{{521374623849261432ull, 2222979170383423ull}},
+{{7795797328563229792ull, 1778383336306738ull}},
+{{13615335492334404480ull, 1422706669045390ull}},
+{{10892268393867523584ull, 1138165335236312ull}},
+{{2670234171220396440ull, 1821064536378100ull}},
+{{2136187336976317152ull, 1456851629102480ull}},
+{{1708949869581053720ull, 1165481303281984ull}},
+{{10113017420813506600ull, 1864770085251174ull}},
+{{11779762751392715604ull, 1491816068200939ull}},
+{{13113159015856082808ull, 1193452854560751ull}},
+{{13602356795885911844ull, 1909524567297202ull}},
+{{3503187807224908828ull, 1527619653837762ull}},
+{{13870596690005658032ull, 1222095723070209ull}},
+{{11124908259783321884ull, 1955353156912335ull}},
+{{8899926607826657508ull, 1564282525529868ull}},
+{{14498638915745146652ull, 1251426020423894ull}},
+{{12129775820966503672ull, 2002281632678231ull}},
+{{6014471842031292616ull, 1601825306142585ull}},
+{{4811577473625034092ull, 1281460244914068ull}},
+{{4009175143058144224ull, 2050336391862509ull}},
+{{6896688929188425704ull, 1640269113490007ull}},
+{{16585397587576471532ull, 1312215290792005ull}},
+{{8089892066412802836ull, 2099544465267209ull}},
+{{10161262467872152592ull, 1679635572213767ull}},
+{{750312344813901428ull, 1343708457771014ull}},
+{{8579197381186062928ull, 2149933532433622ull}},
+{{17931404349174581312ull, 1719946825946897ull}},
+{{6966425849855844404ull, 1375957460757518ull}},
+{{7456932545027440724ull, 2201531937212029ull}},
+{{9654894850763862900ull, 1761225549769623ull}},
+{{15102613510094910968ull, 1408980439815698ull}},
+{{1014044363850197804ull, 1127184351852559ull}},
+{{9001168611644137132ull, 1803494962964094ull}},
+{{10890283704057220028ull, 1442795970371275ull}},
+{{8712226963245776024ull, 1154236776297020ull}},
+{{13939563141193241640ull, 1846778842075232ull}},
+{{3772952883470772664ull, 1477423073660186ull}},
+{{17775757565744259424ull, 1181938458928148ull}},
+{{6305119216739353140ull, 1891101534285038ull}},
+{{12422793002875303156ull, 1512881227428030ull}},
+{{9938234402300242524ull, 1210304981942424ull}},
+{{4833128599454657072ull, 1936487971107879ull}},
+{{7555851694305635980ull, 1549190376886303ull}},
+{{13423378984928329432ull, 1239352301509042ull}},
+{{6720011116917685796ull, 1982963682414468ull}},
+{{12754706523017969284ull, 1586370945931574ull}},
+{{13893114033156285752ull, 1269096756745259ull}},
+{{11160936008824326232ull, 2030554810792415ull}},
+{{8928748807059460984ull, 1624443848633932ull}},
+{{18211045489873299756ull, 1299555078907145ull}},
+{{10690928710087727996ull, 2079288126251433ull}},
+{{15931440597554003044ull, 1663430501001146ull}},
+{{9055803663301292112ull, 1330744400800917ull}},
+{{18178634676023977704ull, 2129191041281467ull}},
+{{7164210111335361516ull, 1703352833025174ull}},
+{{9420716903810199536ull, 1362682266420139ull}},
+{{4005100601870588288ull, 2180291626272223ull}},
+{{10582778110980291276ull, 1744233301017778ull}},
+{{15844920118268053668ull, 1395386640814222ull}},
+{{10594476930261244576ull, 2232618625302756ull}},
+{{4786232729467085336ull, 1786094900242205ull}},
+{{3828986183573668268ull, 1428875920193764ull}},
+{{6752537761600844936ull, 1143100736155011ull}},
+{{3425362789077531256ull, 1828961177848018ull}},
+{{10118987860745845652ull, 1463168942278414ull}},
+{{11784539103338586844ull, 1170535153822731ull}},
+{{11476564935857918304ull, 1872856246116370ull}},
+{{9181251948686334644ull, 1498284996893096ull}},
+{{3655652744207157392ull, 1198627997514477ull}},
+{{9538393205473362148ull, 1917804796023163ull}},
+{{15009412193862510364ull, 1534243836818530ull}},
+{{12007529755090008292ull, 1227395069454824ull}},
+{{8144001163918282300ull, 1963832111127719ull}},
+{{10204549745876536160ull, 1571065688902175ull}},
+{{8163639796701228928ull, 1256852551121740ull}},
+{{13061823674721966288ull, 2010964081794784ull}},
+{{14138807754519483352ull, 1608771265435827ull}},
+{{3932348574131766036ull, 1287017012348662ull}},
+{{9981106533352735980ull, 2059227219757859ull}},
+{{11674234041424099108ull, 1647381775806287ull}},
+{{1960689603655458640ull, 1317905420645030ull}},
+{{3137103365848733824ull, 2108648673032048ull}},
+{{9888380322162807704ull, 1686918938425638ull}},
+{{15289401887214066812ull, 1349535150740510ull}},
+{{6016298945832955280ull, 2159256241184817ull}},
+{{15881085600892095196ull, 1727404992947853ull}},
+{{1636822036487945184ull, 1381923994358283ull}},
+{{17376310517348353592ull, 2211078390973252ull}},
+{{6522350784394862224ull, 1768862712778602ull}},
+{{16285927071741620748ull, 1415090170222881ull}},
+{{9339392842651386276ull, 1132072136178305ull}},
+{{14943028548242218044ull, 1811315417885288ull}},
+{{886376394368043464ull, 1449052334308231ull}},
+{{15466496374462076064ull, 1159241867446584ull}},
+{{13678347754913590736ull, 1854786987914535ull}},
+{{10942678203930872588ull, 1483829590331628ull}},
+{{16132840192628518716ull, 1187063672265302ull}},
+{{11055149049237988652ull, 1899301875624484ull}},
+{{12533468054132301244ull, 1519441500499587ull}},
+{{2648076813822020348ull, 1215553200399670ull}},
+{{4236922902115232560ull, 1944885120639472ull}},
+{{14457584765917917016ull, 1555908096511577ull}},
+{{4187370183250512968ull, 1244726477209262ull}},
+{{10389141107942731072ull, 1991562363534819ull}},
+{{12000661701096095180ull, 1593249890827855ull}},
+{{9600529360876876144ull, 1274599912662284ull}},
+{{4292800533177270860ull, 2039359860259655ull}},
+{{3434240426541816688ull, 1631487888207724ull}},
+{{6436741155975363676ull, 1305190310566179ull}},
+{{17677483479044402528ull, 2088304496905886ull}},
+{{10452637968493611696ull, 1670643597524709ull}},
+{{12051459189536799680ull, 1336514878019767ull}},
+{{4524939444291238196ull, 2138423804831628ull}},
+{{10998649184916811204ull, 1710739043865302ull}},
+{{1420221718449628316ull, 1368591235092242ull}},
+{{5961703564261315632ull, 2189745976147587ull}},
+{{15837409295634783472ull, 1751796780918069ull}},
+{{16359276251249737100ull, 1401437424734455ull}},
+{{7728097928290027748ull, 2242299879575129ull}},
+{{9871827157373932520ull, 1793839903660103ull}},
+{{15276159355382966664ull, 1435071922928082ull}},
+{{4842229854822552684ull, 1148057538342466ull}},
+{{368870138232263648ull, 1836892061347946ull}},
+{{15052491369553452212ull, 1469513649078356ull}},
+{{8352644280900851444ull, 1175610919262685ull}},
+{{13364230849441362312ull, 1880977470820296ull}},
+{{7002035864811179528ull, 1504781976656237ull}},
+{{16669675136074674592ull, 1203825581324989ull}},
+{{15603433773493748376ull, 1926120930119983ull}},
+{{1414700574569267732ull, 1540896744095987ull}},
+{{12199806903881145156ull, 1232717395276789ull}},
+{{8451644601984101280ull, 1972347832442863ull}},
+{{14140013311071101668ull, 1577878265954290ull}},
+{{11312010648856881336ull, 1262302612763432ull}},
+{{3341821779203368844ull, 2019684180421492ull}},
+{{13741503867588426044ull, 1615747344337193ull}},
+{{18371900723554561480ull, 1292597875469754ull}},
+{{18326994713461567404ull, 2068156600751607ull}},
+{{7282898141285433276ull, 1654525280601286ull}},
+{{2136969698286436296ull, 1323620224481029ull}},
+{{10797849146742118724ull, 2117792359169646ull}},
+{{4948930502651784656ull, 1694233887335717ull}},
+{{15027190846347158692ull, 1355387109868573ull}},
+{{1907412465703991968ull, 2168619375789718ull}},
+{{8904627602047014220ull, 1734895500631774ull}},
+{{10813050896379521700ull, 1387916400505419ull}},
+{{6232834989981503752ull, 2220666240808671ull}},
+{{1296919177243292680ull, 1776532992646937ull}},
+{{12105581786020365112ull, 1421226394117549ull}},
+{{13373814243558202412ull, 1136981115294039ull}},
+{{10330056345467392892ull, 1819169784470463ull}},
+{{15642742705857734960ull, 1455335827576370ull}},
+{{12514194164686187968ull, 1164268662061096ull}},
+{{12644013034014080100ull, 1862829859297754ull}},
+{{13804559241953174404ull, 1490263887438203ull}},
+{{18422345023046360168ull, 1192211109950562ull}},
+{{14718356777906534980ull, 1907537775920900ull}},
+{{11774685422325227984ull, 1526030220736720ull}},
+{{9419748337860182384ull, 1220824176589376ull}},
+{{7692899711092471172ull, 1953318682543002ull}},
+{{17222366213099707908ull, 1562654946034401ull}},
+{{10088544155737856004ull, 1250123956827521ull}},
+{{8762973019696748960ull, 2000198330924034ull}},
+{{10699727230499309488ull, 1600158664739227ull}},
+{{1181084154915626944ull, 1280126931791382ull}},
+{{5579083462606913436ull, 2048203090866211ull}},
+{{773917955343620424ull, 1638562472692969ull}},
+{{4308483179016806664ull, 1310849978154375ull}},
+{{6893573086426890660ull, 2097359965047000ull}},
+{{5514858469141512528ull, 1677887972037600ull}},
+{{4411886775313210024ull, 1342310377630080ull}},
+{{7059018840501136036ull, 2147696604208128ull}},
+{{13025912701884729476ull, 1718157283366502ull}},
+{{3042032532023962936ull, 1374525826693202ull}},
+{{8556600865980251020ull, 2199241322709123ull}},
+{{14223978322268021460ull, 1759393058167298ull}},
+{{311136213588686200ull, 1407514446533839ull}},
+{{3938257785612859280ull, 1126011557227071ull}},
+{{17369258901206305820ull, 1801618491563313ull}},
+{{2827360676739313688ull, 1441294793250651ull}},
+{{17019283800359092244ull, 1153035834600520ull}},
+{{8784110006864995972ull, 1844857335360833ull}},
+{{14405985634975817424ull, 1475885868288666ull}},
+{{7835439693238743616ull, 1180708694630933ull}},
+{{8847354694440079464ull, 1889133911409493ull}},
+{{14456581385035884216ull, 1511307129127594ull}},
+{{15254613922770617696ull, 1209045703302075ull}},
+{{5960638202723436700ull, 1934473125283321ull}},
+{{1079161747436839036ull, 1547578500226657ull}},
+{{11931375842175202196ull, 1238062800181325ull}},
+{{643457273770771900ull, 1980900480290121ull}},
+{{15272161077984258812ull, 1584720384232096ull}},
+{{8528380047645496728ull, 1267776307385677ull}},
+{{17334756890974705088ull, 2028442091817083ull}},
+{{2799759068554033100ull, 1622753673453667ull}},
+{{13307853699068957448ull, 1298202938762933ull}},
+{{17603217103768421596ull, 2077124702020693ull}},
+{{3014527238789006308ull, 1661699761616555ull}},
+{{2411621791031205044ull, 1329359809293244ull}},
+{{11237292495133748720ull, 2126975694869190ull}},
+{{8989833996106998976ull, 1701580555895352ull}},
+{{18259913641111330152ull, 1361264444716281ull}},
+{{3390420122584755980ull, 2178023111546051ull}},
+{{17469731357035446076ull, 1742418489236840ull}},
+{{13975785085628356860ull, 1393934791389472ull}},
+{{7603860878037729684ull, 2230295666223156ull}},
+{{2393739887688273424ull, 1784236532978525ull}},
+{{1914991910150618740ull, 1427389226382820ull}},
+{{1531993528120494992ull, 1141911381106256ull}},
+{{13519236089218522956ull, 1827058209770009ull}},
+{{14504737686116728688ull, 1461646567816007ull}},
+{{4225092519409562304ull, 1169317254252806ull}},
+{{17828194475281030656ull, 1870907606804489ull}},
+{{17951904394966734848ull, 1496726085443591ull}},
+{{10672174701231477556ull, 1197380868354873ull}},
+{{13386130707228453764ull, 1915809389367797ull}},
+{{3330206936298942364ull, 1532647511494238ull}},
+{{10042863178522974540ull, 1226118009195390ull}},
+{{16068581085636759264ull, 1961788814712624ull}},
+{{16544213683251317732ull, 1569431051770099ull}},
+{{16924719761342964508ull, 1255544841416079ull}},
+{{16011505173923012248ull, 2008871746265727ull}},
+{{5430506509654589152ull, 1607097397012582ull}},
+{{15412451651949402288ull, 1285677917610065ull}},
+{{6213178569409492048ull, 2057084668176105ull}},
+{{4970542855527593640ull, 1645667734540884ull}},
+{{7665783099163985232ull, 1316534187632707ull}},
+{{15954601773404286696ull, 2106454700212331ull}},
+{{9074332603981519036ull, 1685163760169865ull}},
+{{7259466083185215228ull, 1348131008135892ull}},
+{{15304494547838254688ull, 2157009613017427ull}},
+{{4864898008786783104ull, 1725607690413942ull}},
+{{14959964851255157452ull, 1380486152331153ull}},
+{{1799850873556789984ull, 2208777843729846ull}},
+{{16197275957813073280ull, 1767022274983876ull}},
+{{9268471951508548300ull, 1413617819987101ull}},
+{{3725428746464928316ull, 1130894255989681ull}},
+{{17028732438569616280ull, 1809430809583489ull}},
+{{17312334765597603344ull, 1447544647666791ull}},
+{{10160518997736172352ull, 1158035718133433ull}},
+{{12567481581635965444ull, 1852857149013493ull}},
+{{17432682894792593000ull, 1482285719210794ull}},
+{{17635495130575984724ull, 1185828575368635ull}},
+{{9770048135212023940ull, 1897325720589817ull}},
+{{437340878685798508ull, 1517860576471854ull}},
+{{4039221517690549128ull, 1214288461177483ull}},
+{{2773405613562968284ull, 1942861537883973ull}},
+{{9597422120334195272ull, 1554289230307178ull}},
+{{15056635325751176864ull, 1243431384245742ull}},
+{{9333221262234241692ull, 1989490214793188ull}},
+{{14845274639271214000ull, 1591592171834550ull}},
+{{11876219711416971200ull, 1273273737467640ull}},
+{{555207464557602304ull, 2037237979948225ull}},
+{{444165971646081840ull, 1629790383958580ull}},
+{{355332777316865472ull, 1303832307166864ull}},
+{{7947230073190805404ull, 2086131691466982ull}},
+{{17425830502778375292ull, 1668905353173585ull}},
+{{13940664402222700232ull, 1335124282538868ull}},
+{{168970155104858436ull, 2136198852062190ull}},
+{{135176124083886748ull, 1708959081649752ull}},
+{{11176187343492840368ull, 1367167265319801ull}},
+{{10503202120104723944ull, 2187467624511682ull}},
+{{1023864066599958508ull, 1749974099609346ull}},
+{{15576486512247608100ull, 1399979279687476ull}},
+{{17543680790112352312ull, 2239966847499962ull}},
+{{6656247002606061204ull, 1791973477999970ull}},
+{{5324997602084848964ull, 1433578782399976ull}},
+{{570649266925968848ull, 1146863025919981ull}},
+{{11981085271307281124ull, 1834980841471969ull}},
+{{13274217031787735224ull, 1467984673177575ull}},
+{{10619373625430188176ull, 1174387738542060ull}},
+{{16990997800688301084ull, 1879020381667296ull}},
+{{9903449425808730544ull, 1503216305333837ull}},
+{{544061911163163788ull, 1202573044267070ull}},
+{{870499057861062064ull, 1924116870827312ull}},
+{{11764445690514580620ull, 1539293496661849ull}},
+{{13100905367153574820ull, 1231434797329479ull}},
+{{9893402143219988740ull, 1970295675727167ull}},
+{{536024085092170348ull, 1576236540581734ull}},
+{{4118168082815646600ull, 1260989232465387ull}},
+{{10278417747246944884ull, 2017582771944619ull}},
+{{11912083012539466232ull, 1614066217555695ull}},
+{{9529666410031572984ull, 1291252974044556ull}},
+{{7868768626566696128ull, 2066004758471290ull}},
+{{6295014901253356904ull, 1652803806777032ull}},
+{{16104058365228416492ull, 1322243045421625ull}},
+{{7319749310655914772ull, 2115588872674601ull}},
+{{2166450633782821492ull, 1692471098139681ull}},
+{{16490555765993898488ull, 1353976878511744ull}},
+{{15316842781364506612ull, 2166363005618791ull}},
+{{8564125410349694964ull, 1733090404495033ull}},
+{{14229997957763576620ull, 1386472323596026ull}},
+{{15389299102937901944ull, 2218355717753642ull}},
+{{4932741652866500908ull, 1774684574202914ull}},
+{{7635542137035111048ull, 1419747659362331ull}},
+{{2419084894886178516ull, 1135798127489865ull}},
+{{3870535831817885628ull, 1817277003983784ull}},
+{{6785777480196218824ull, 1453821603187027ull}},
+{{16496668428382706028ull, 1163057282549621ull}},
+{{569227782218957384ull, 1860891652079395ull}},
+{{455382225775165908ull, 1488713321663516ull}},
+{{15121701039587774020ull, 1190970657330812ull}},
+{{9437326404372797136ull, 1905553051729300ull}},
+{{7549861123498237708ull, 1524442441383440ull}},
+{{6039888898798590168ull, 1219553953106752ull}},
+{{13353171052819654592ull, 1951286324970803ull}},
+{{18061234471739544320ull, 1561029059976642ull}},
+{{7070289947907814808ull, 1248823247981314ull}},
+{{244417472426772728ull, 1998117196770103ull}},
+{{7574231607425238828ull, 1598493757416082ull}},
+{{17127431730165922032ull, 1278795005932865ull}},
+{{8957146694555923636ull, 2046072009492585ull}},
+{{7165717355644738908ull, 1636857607594068ull}},
+{{13111271513999611772ull, 1309486086075254ull}},
+{{9909987978173647868ull, 2095177737720407ull}},
+{{549292753055097648ull, 1676142190176326ull}},
+{{15196829461411719408ull, 1340913752141060ull}},
+{{5868183064549199440ull, 2145462003425697ull}},
+{{15762592895865090520ull, 1716369602740557ull}},
+{{5231376687208251772ull, 1373095682192446ull}},
+{{991505070049382188ull, 2196953091507914ull}},
+{{4482552870781416072ull, 1757562473206331ull}},
+{{18343437555592774152ull, 1406049978565064ull}},
+{{18281453644722707672ull, 2249679965704103ull}},
+{{3557116471552435168ull, 1799743972563283ull}},
+{{10224390806725768780ull, 1439795178050626ull}},
+{{4490163830638704700ull, 1151836142440501ull}},
+{{18252308573247658492ull, 1842937827904801ull}},
+{{10912498043856216468ull, 1474350262323841ull}},
+{{5040649620343062852ull, 1179480209859073ull}},
+{{4375690577806990240ull, 1887168335774517ull}},
+{{14568598906471323164ull, 1509734668619613ull}},
+{{586832680951327560ull, 1207787734895691ull}},
+{{12006978733747855068ull, 1932460375833105ull}},
+{{9605582986998284052ull, 1545968300666484ull}},
+{{11373815204340537564ull, 1236774640533187ull}},
+{{3440709067977218812ull, 1978839424853100ull}},
+{{2752567254381775048ull, 1583071539882480ull}},
+{{2202053803505420040ull, 1266457231905984ull}},
+{{10901983715092492712ull, 2026331571049574ull}},
+{{12410935786815904492ull, 1621065256839659ull}},
+{{13618097444194633916ull, 1296852205471727ull}},
+{{7031560651743772972ull, 2074963528754764ull}},
+{{9314597336136928700ull, 1659970823003811ull}},
+{{3762329054167632636ull, 1327976658403049ull}},
+{{13398424116152032868ull, 2124762653444878ull}},
+{{18097436922405446940ull, 1699810122755902ull}},
+{{7099251908440536904ull, 1359848098204722ull}},
+{{15048151868246769372ull, 2175756957127555ull}},
+{{12038521494597415500ull, 1740605565702044ull}},
+{{13320166010419842720ull, 1392484452561635ull}},
+{{2865521542962196740ull, 2227975124098617ull}},
+{{13360463678595488360ull, 1782380099278893ull}},
+{{18067068572360211336ull, 1425904079423114ull}},
+{{18143003672630079392ull, 1140723263538491ull}},
+{{3203364173014754764ull, 1825157221661587ull}},
+{{13630737782637534780ull, 1460125777329269ull}},
+{{14593939040851938148ull, 1168100621863415ull}},
+{{4903558391653549420ull, 1868960994981465ull}},
+{{3922846713322839536ull, 1495168795985172ull}},
+{{14206323814884002596ull, 1196135036788137ull}},
+{{7972722844846762864ull, 1913816058861020ull}},
+{{6378178275877410292ull, 1531052847088816ull}},
+{{1413193805960017908ull, 1224842277671053ull}},
+{{17018505348503669948ull, 1959747644273684ull}},
+{{17304153093544846284ull, 1567798115418947ull}},
+{{6464624845352056380ull, 1254238492335158ull}},
+{{6654050937821379884ull, 2006781587736253ull}},
+{{12701938379740924552ull, 1605425270189002ull}},
+{{2782853074308918996ull, 1284340216151202ull}},
+{{8141913733636180720ull, 2054944345841923ull}},
+{{13892228616392765220ull, 1643955476673538ull}},
+{{45736448888481208ull, 1315164381338831ull}},
+{{11141224762447300900ull, 2104263010142129ull}},
+{{12602328624699751044ull, 1683410408113703ull}},
+{{17460560529243621480ull, 1346728326490962ull}},
+{{13179501587822153080ull, 2154765322385540ull}},
+{{10543601270257722464ull, 1723812257908432ull}},
+{{1056183386722357324ull, 1379049806326746ull}},
+{{12757939862981502688ull, 2206479690122793ull}},
+{{17585049519869022796ull, 1765183752098234ull}},
+{{17757388430637128560ull, 1412147001678587ull}},
+{{6827213115025882200ull, 1129717601342870ull}},
+{{10923540984041411524ull, 1807548162148592ull}},
+{{1360135157749308572ull, 1446038529718874ull}},
+{{4777456940941357180ull, 1156830823775099ull}},
+{{15022628734989992136ull, 1850929318040158ull}},
+{{950056543766262740ull, 1480743454432127ull}},
+{{11828091679238741160ull, 1184594763545701ull}},
+{{11546249057298165212ull, 1895351621673122ull}},
+{{1858301616354711520ull, 1516281297338498ull}},
+{{8865338922567589864ull, 1213025037870798ull}},
+{{10495193461366233460ull, 1940840060593277ull}},
+{{1017457139609166120ull, 1552672048474622ull}},
+{{11882012155913063864ull, 1242137638779697ull}},
+{{4253824190493260892ull, 1987420222047516ull}},
+{{18160454611362250008ull, 1589936177638012ull}},
+{{7149666059605979360ull, 1271948942110410ull}},
+{{11439465695369566976ull, 2035118307376656ull}},
+{{5462223741553743256ull, 1628094645901325ull}},
+{{4369778993242994604ull, 1302475716721060ull}},
+{{6991646389188791368ull, 2083961146753696ull}},
+{{1903968296609122772ull, 1667168917402957ull}},
+{{12591221081513029188ull, 1333735133922365ull}},
+{{1699209656711295084ull, 2133976214275785ull}},
+{{1359367725369036068ull, 1707180971420628ull}},
+{{8466191809779049500ull, 1365744777136502ull}},
+{{17235255710388389524ull, 2185191643418403ull}},
+{{2720158124084980648ull, 1748153314734723ull}},
+{{9554824128751805164ull, 1398522651787778ull}},
+{{11598369791260977940ull, 2237636242860445ull}},
+{{9278695833008782352ull, 1790108994288356ull}},
+{{3733607851665115560ull, 1432087195430685ull}},
+{{2986886281332092448ull, 1145669756344548ull}},
+{{1089669235389437592ull, 1833071610151277ull}},
+{{11939781832537281044ull, 1466457288121021ull}},
+{{5862476651287914512ull, 1173165830496817ull}},
+{{13069311456802573544ull, 1877065328794907ull}},
+{{3076751535958238188ull, 1501652263035926ull}},
+{{17218796487734231840ull, 1201321810428740ull}},
+{{9103330306665219332ull, 1922114896685985ull}},
+{{7282664245332175464ull, 1537691917348788ull}},
+{{13204829025749561020ull, 1230153533879030ull}},
+{{2680982367489746016ull, 1968245654206449ull}},
+{{5834134708733707136ull, 1574596523365159ull}},
+{{8356656581728876032ull, 1259677218692127ull}},
+{{17059999345508111972ull, 2015483549907403ull}},
+{{2579953032180758608ull, 1612386839925923ull}},
+{{9442660055228427532ull, 1289909471940738ull}},
+{{11418907273623573732ull, 2063855155105181ull}},
+{{5445777004156948660ull, 1651084124084145ull}},
+{{4356621603325558928ull, 1320867299267316ull}},
+{{18038641009546625256ull, 2113387678827705ull}},
+{{14430912807637300204ull, 1690710143062164ull}},
+{{15234079060851750488ull, 1352568114449731ull}},
+{{16995828867878980132ull, 2164108983119570ull}},
+{{13596663094303184104ull, 1731287186495656ull}},
+{{7187981660700636960ull, 1385029749196525ull}},
+{{11500770657121019140ull, 2216047598714440ull}},
+{{9200616525696815312ull, 1772838078971552ull}},
+{{18428539664783183216ull, 1418270463177241ull}},
+{{11053482917084636252ull, 1134616370541793ull}},
+{{13996223852593507680ull, 1815386192866869ull}},
+{{14886327896816716464ull, 1452308954293495ull}},
+{{11909062317453373172ull, 1161847163434796ull}},
+{{11675802078441576432ull, 1858955461495674ull}},
+{{13029990477495171468ull, 1487164369196539ull}},
+{{14113341196738047496ull, 1189731495357231ull}},
+{{15202648285297055348ull, 1903570392571570ull}},
+{{12162118628237644280ull, 1522856314057256ull}},
+{{6040346087848205100ull, 1218285051245805ull}},
+{{9664553740557128160ull, 1949256081993288ull}},
+{{15110340621929523176ull, 1559404865594630ull}},
+{{12088272497543618540ull, 1247523892475704ull}},
+{{8273189551844058696ull, 1996038227961127ull}},
+{{17686598085700977924ull, 1596830582368901ull}},
+{{10459929653818872016ull, 1277464465895121ull}},
+{{9357189816626374580ull, 2043943145432194ull}},
+{{11175100668043009988ull, 1635154516345755ull}},
+{{8940080534434407988ull, 1308123613076604ull}},
+{{3236082410869321816ull, 2092997780922567ull}},
+{{13656912372921188420ull, 1674398224738053ull}},
+{{18304227527820771384ull, 1339518579790442ull}},
+{{14529368785545592920ull, 2143229727664708ull}}
+};
+
+static const int exponents_binary128[] = { -115,
+ -112,
+ -108,
+ -105,
+ -102,
+ -99,
+ -95,
+ -92,
+ -89,
+ -85,
+ -82,
+ -79,
+ -75,
+ -72,
+ -69,
+ -65,
+ -62,
+ -59,
+ -55,
+ -52,
+ -49,
+ -45,
+ -42,
+ -39,
+ -35,
+ -32,
+ -29,
+ -25,
+ -22,
+ -19,
+ -15,
+ -12,
+ -9,
+ -6,
+ -2,
+ 1,
+ 4,
+ 8,
+ 11,
+ 14,
+ 18,
+ 21,
+ 24,
+ 28,
+ 31,
+ 34,
+ 38,
+ 41,
+ 44,
+ 48,
+ 51,
+ 54,
+ 58,
+ 61,
+ 64,
+ 68,
+ 71,
+ 74,
+ 78,
+ 81,
+ 84,
+ 87,
+ 91,
+ 94,
+ 97,
+ 101,
+ 104,
+ 107,
+ 111,
+ 114,
+ 117,
+ 121,
+ 124,
+ 127,
+ 131,
+ 134,
+ 137,
+ 141,
+ 144,
+ 147,
+ 151,
+ 154,
+ 157,
+ 161,
+ 164,
+ 167,
+ 171,
+ 174,
+ 177,
+ 181,
+ 184,
+ 187,
+ 190,
+ 194,
+ 197,
+ 200,
+ 204,
+ 207,
+ 210,
+ 214,
+ 217,
+ 220,
+ 224,
+ 227,
+ 230,
+ 234,
+ 237,
+ 240,
+ 244,
+ 247,
+ 250,
+ 254,
+ 257,
+ 260,
+ 264,
+ 267,
+ 270,
+ 274,
+ 277,
+ 280,
+ 283,
+ 287,
+ 290,
+ 293,
+ 297,
+ 300,
+ 303,
+ 307,
+ 310,
+ 313,
+ 317,
+ 320,
+ 323,
+ 327,
+ 330,
+ 333,
+ 337,
+ 340,
+ 343,
+ 347,
+ 350,
+ 353,
+ 357,
+ 360,
+ 363,
+ 367,
+ 370,
+ 373,
+ 377,
+ 380,
+ 383,
+ 386,
+ 390,
+ 393,
+ 396,
+ 400,
+ 403,
+ 406,
+ 410,
+ 413,
+ 416,
+ 420,
+ 423,
+ 426,
+ 430,
+ 433,
+ 436,
+ 440,
+ 443,
+ 446,
+ 450,
+ 453,
+ 456,
+ 460,
+ 463,
+ 466,
+ 470,
+ 473,
+ 476,
+ 479,
+ 483,
+ 486,
+ 489,
+ 493,
+ 496,
+ 499,
+ 503,
+ 506,
+ 509,
+ 513,
+ 516,
+ 519,
+ 523,
+ 526,
+ 529,
+ 533,
+ 536,
+ 539,
+ 543,
+ 546,
+ 549,
+ 553,
+ 556,
+ 559,
+ 563,
+ 566,
+ 569,
+ 572,
+ 576,
+ 579,
+ 582,
+ 586,
+ 589,
+ 592,
+ 596,
+ 599,
+ 602,
+ 606,
+ 609,
+ 612,
+ 616,
+ 619,
+ 622,
+ 626,
+ 629,
+ 632,
+ 636,
+ 639,
+ 642,
+ 646,
+ 649,
+ 652,
+ 656,
+ 659,
+ 662,
+ 666,
+ 669,
+ 672,
+ 675,
+ 679,
+ 682,
+ 685,
+ 689,
+ 692,
+ 695,
+ 699,
+ 702,
+ 705,
+ 709,
+ 712,
+ 715,
+ 719,
+ 722,
+ 725,
+ 729,
+ 732,
+ 735,
+ 739,
+ 742,
+ 745,
+ 749,
+ 752,
+ 755,
+ 759,
+ 762,
+ 765,
+ 768,
+ 772,
+ 775,
+ 778,
+ 782,
+ 785,
+ 788,
+ 792,
+ 795,
+ 798,
+ 802,
+ 805,
+ 808,
+ 812,
+ 815,
+ 818,
+ 822,
+ 825,
+ 828,
+ 832,
+ 835,
+ 838,
+ 842,
+ 845,
+ 848,
+ 852,
+ 855,
+ 858,
+ 862,
+ 865,
+ 868,
+ 871,
+ 875,
+ 878,
+ 881,
+ 885,
+ 888,
+ 891,
+ 895,
+ 898,
+ 901,
+ 905,
+ 908,
+ 911,
+ 915,
+ 918,
+ 921,
+ 925,
+ 928,
+ 931,
+ 935,
+ 938,
+ 941,
+ 945,
+ 948,
+ 951,
+ 955,
+ 958,
+ 961,
+ 964,
+ 968,
+ 971,
+ 974,
+ 978,
+ 981,
+ 984,
+ 988,
+ 991,
+ 994,
+ 998,
+ 1001,
+ 1004,
+ 1008,
+ 1011,
+ 1014,
+ 1018,
+ 1021,
+ 1024,
+ 1028,
+ 1031,
+ 1034,
+ 1038,
+ 1041,
+ 1044,
+ 1048,
+ 1051,
+ 1054,
+ 1058,
+ 1061,
+ 1064,
+ 1067,
+ 1071,
+ 1074,
+ 1077,
+ 1081,
+ 1084,
+ 1087,
+ 1091,
+ 1094,
+ 1097,
+ 1101,
+ 1104,
+ 1107,
+ 1111,
+ 1114,
+ 1117,
+ 1121,
+ 1124,
+ 1127,
+ 1131,
+ 1134,
+ 1137,
+ 1141,
+ 1144,
+ 1147,
+ 1151,
+ 1154,
+ 1157,
+ 1160,
+ 1164,
+ 1167,
+ 1170,
+ 1174,
+ 1177,
+ 1180,
+ 1184,
+ 1187,
+ 1190,
+ 1194,
+ 1197,
+ 1200,
+ 1204,
+ 1207,
+ 1210,
+ 1214,
+ 1217,
+ 1220,
+ 1224,
+ 1227,
+ 1230,
+ 1234,
+ 1237,
+ 1240,
+ 1244,
+ 1247,
+ 1250,
+ 1253,
+ 1257,
+ 1260,
+ 1263,
+ 1267,
+ 1270,
+ 1273,
+ 1277,
+ 1280,
+ 1283,
+ 1287,
+ 1290,
+ 1293,
+ 1297,
+ 1300,
+ 1303,
+ 1307,
+ 1310,
+ 1313,
+ 1317,
+ 1320,
+ 1323,
+ 1327,
+ 1330,
+ 1333,
+ 1337,
+ 1340,
+ 1343,
+ 1347,
+ 1350,
+ 1353,
+ 1356,
+ 1360,
+ 1363,
+ 1366,
+ 1370,
+ 1373,
+ 1376,
+ 1380,
+ 1383,
+ 1386,
+ 1390,
+ 1393,
+ 1396,
+ 1400,
+ 1403,
+ 1406,
+ 1410,
+ 1413,
+ 1416,
+ 1420,
+ 1423,
+ 1426,
+ 1430,
+ 1433,
+ 1436,
+ 1440,
+ 1443,
+ 1446,
+ 1449,
+ 1453,
+ 1456,
+ 1459,
+ 1463,
+ 1466,
+ 1469,
+ 1473,
+ 1476,
+ 1479,
+ 1483,
+ 1486,
+ 1489,
+ 1493,
+ 1496,
+ 1499,
+ 1503,
+ 1506,
+ 1509,
+ 1513,
+ 1516,
+ 1519,
+ 1523,
+ 1526,
+ 1529,
+ 1533,
+ 1536,
+ 1539,
+ 1543,
+ 1546,
+ 1549,
+ 1552,
+ 1556,
+ 1559,
+ 1562,
+ 1566,
+ 1569,
+ 1572,
+ 1576,
+ 1579,
+ 1582,
+ 1586,
+ 1589,
+ 1592,
+ 1596,
+ 1599,
+ 1602,
+ 1606,
+ 1609,
+ 1612,
+ 1616,
+ 1619,
+ 1622,
+ 1626,
+ 1629,
+ 1632,
+ 1636,
+ 1639,
+ 1642,
+ 1645,
+ 1649,
+ 1652,
+ 1655,
+ 1659,
+ 1662,
+ 1665,
+ 1669,
+ 1672,
+ 1675,
+ 1679,
+ 1682,
+ 1685,
+ 1689,
+ 1692,
+ 1695,
+ 1699,
+ 1702,
+ 1705,
+ 1709,
+ 1712,
+ 1715,
+ 1719,
+ 1722,
+ 1725,
+ 1729,
+ 1732,
+ 1735,
+ 1738,
+ 1742,
+ 1745,
+ 1748,
+ 1752,
+ 1755,
+ 1758,
+ 1762,
+ 1765,
+ 1768,
+ 1772,
+ 1775,
+ 1778,
+ 1782,
+ 1785,
+ 1788,
+ 1792,
+ 1795,
+ 1798,
+ 1802,
+ 1805,
+ 1808,
+ 1812,
+ 1815,
+ 1818,
+ 1822,
+ 1825,
+ 1828,
+ 1832,
+ 1835,
+ 1838,
+ 1841,
+ 1845,
+ 1848,
+ 1851,
+ 1855,
+ 1858,
+ 1861,
+ 1865,
+ 1868,
+ 1871,
+ 1875,
+ 1878,
+ 1881,
+ 1885,
+ 1888,
+ 1891,
+ 1895,
+ 1898,
+ 1901,
+ 1905,
+ 1908,
+ 1911,
+ 1915,
+ 1918,
+ 1921,
+ 1925,
+ 1928,
+ 1931,
+ 1934,
+ 1938,
+ 1941,
+ 1944,
+ 1948,
+ 1951,
+ 1954,
+ 1958,
+ 1961,
+ 1964,
+ 1968,
+ 1971,
+ 1974,
+ 1978,
+ 1981,
+ 1984,
+ 1988,
+ 1991,
+ 1994,
+ 1998,
+ 2001,
+ 2004,
+ 2008,
+ 2011,
+ 2014,
+ 2018,
+ 2021,
+ 2024,
+ 2028,
+ 2031,
+ 2034,
+ 2037,
+ 2041,
+ 2044,
+ 2047,
+ 2051,
+ 2054,
+ 2057,
+ 2061,
+ 2064,
+ 2067,
+ 2071,
+ 2074,
+ 2077,
+ 2081,
+ 2084,
+ 2087,
+ 2091,
+ 2094,
+ 2097,
+ 2101,
+ 2104,
+ 2107,
+ 2111,
+ 2114,
+ 2117,
+ 2121,
+ 2124,
+ 2127,
+ 2130,
+ 2134,
+ 2137,
+ 2140,
+ 2144,
+ 2147,
+ 2150,
+ 2154,
+ 2157,
+ 2160,
+ 2164,
+ 2167,
+ 2170,
+ 2174,
+ 2177,
+ 2180,
+ 2184,
+ 2187,
+ 2190,
+ 2194,
+ 2197,
+ 2200,
+ 2204,
+ 2207,
+ 2210,
+ 2214,
+ 2217,
+ 2220,
+ 2223,
+ 2227,
+ 2230,
+ 2233,
+ 2237,
+ 2240,
+ 2243,
+ 2247,
+ 2250,
+ 2253,
+ 2257,
+ 2260,
+ 2263,
+ 2267,
+ 2270,
+ 2273,
+ 2277,
+ 2280,
+ 2283,
+ 2287,
+ 2290,
+ 2293,
+ 2297,
+ 2300,
+ 2303,
+ 2307,
+ 2310,
+ 2313,
+ 2317,
+ 2320,
+ 2323,
+ 2326,
+ 2330,
+ 2333,
+ 2336,
+ 2340,
+ 2343,
+ 2346,
+ 2350,
+ 2353,
+ 2356,
+ 2360,
+ 2363,
+ 2366,
+ 2370,
+ 2373,
+ 2376,
+ 2380,
+ 2383,
+ 2386,
+ 2390,
+ 2393,
+ 2396,
+ 2400,
+ 2403,
+ 2406,
+ 2410,
+ 2413,
+ 2416,
+ 2419,
+ 2423,
+ 2426,
+ 2429,
+ 2433,
+ 2436,
+ 2439,
+ 2443,
+ 2446,
+ 2449,
+ 2453,
+ 2456,
+ 2459,
+ 2463,
+ 2466,
+ 2469,
+ 2473,
+ 2476,
+ 2479,
+ 2483,
+ 2486,
+ 2489,
+ 2493,
+ 2496,
+ 2499,
+ 2503,
+ 2506,
+ 2509,
+ 2513,
+ 2516,
+ 2519,
+ 2522,
+ 2526,
+ 2529,
+ 2532,
+ 2536,
+ 2539,
+ 2542,
+ 2546,
+ 2549,
+ 2552,
+ 2556,
+ 2559,
+ 2562,
+ 2566,
+ 2569,
+ 2572,
+ 2576,
+ 2579,
+ 2582,
+ 2586,
+ 2589,
+ 2592,
+ 2596,
+ 2599,
+ 2602,
+ 2606,
+ 2609,
+ 2612,
+ 2615,
+ 2619,
+ 2622,
+ 2625,
+ 2629,
+ 2632,
+ 2635,
+ 2639,
+ 2642,
+ 2645,
+ 2649,
+ 2652,
+ 2655,
+ 2659,
+ 2662,
+ 2665,
+ 2669,
+ 2672,
+ 2675,
+ 2679,
+ 2682,
+ 2685,
+ 2689,
+ 2692,
+ 2695,
+ 2699,
+ 2702,
+ 2705,
+ 2708,
+ 2712,
+ 2715,
+ 2718,
+ 2722,
+ 2725,
+ 2728,
+ 2732,
+ 2735,
+ 2738,
+ 2742,
+ 2745,
+ 2748,
+ 2752,
+ 2755,
+ 2758,
+ 2762,
+ 2765,
+ 2768,
+ 2772,
+ 2775,
+ 2778,
+ 2782,
+ 2785,
+ 2788,
+ 2792,
+ 2795,
+ 2798,
+ 2802,
+ 2805,
+ 2808,
+ 2811,
+ 2815,
+ 2818,
+ 2821,
+ 2825,
+ 2828,
+ 2831,
+ 2835,
+ 2838,
+ 2841,
+ 2845,
+ 2848,
+ 2851,
+ 2855,
+ 2858,
+ 2861,
+ 2865,
+ 2868,
+ 2871,
+ 2875,
+ 2878,
+ 2881,
+ 2885,
+ 2888,
+ 2891,
+ 2895,
+ 2898,
+ 2901,
+ 2904,
+ 2908,
+ 2911,
+ 2914,
+ 2918,
+ 2921,
+ 2924,
+ 2928,
+ 2931,
+ 2934,
+ 2938,
+ 2941,
+ 2944,
+ 2948,
+ 2951,
+ 2954,
+ 2958,
+ 2961,
+ 2964,
+ 2968,
+ 2971,
+ 2974,
+ 2978,
+ 2981,
+ 2984,
+ 2988,
+ 2991,
+ 2994,
+ 2998,
+ 3001,
+ 3004,
+ 3007,
+ 3011,
+ 3014,
+ 3017,
+ 3021,
+ 3024,
+ 3027,
+ 3031,
+ 3034,
+ 3037,
+ 3041,
+ 3044,
+ 3047,
+ 3051,
+ 3054,
+ 3057,
+ 3061,
+ 3064,
+ 3067,
+ 3071,
+ 3074,
+ 3077,
+ 3081,
+ 3084,
+ 3087,
+ 3091,
+ 3094,
+ 3097,
+ 3100,
+ 3104,
+ 3107,
+ 3110,
+ 3114,
+ 3117,
+ 3120,
+ 3124,
+ 3127,
+ 3130,
+ 3134,
+ 3137,
+ 3140,
+ 3144,
+ 3147,
+ 3150,
+ 3154,
+ 3157,
+ 3160,
+ 3164,
+ 3167,
+ 3170,
+ 3174,
+ 3177,
+ 3180,
+ 3184,
+ 3187,
+ 3190,
+ 3193,
+ 3197,
+ 3200,
+ 3203,
+ 3207,
+ 3210,
+ 3213,
+ 3217,
+ 3220,
+ 3223,
+ 3227,
+ 3230,
+ 3233,
+ 3237,
+ 3240,
+ 3243,
+ 3247,
+ 3250,
+ 3253,
+ 3257,
+ 3260,
+ 3263,
+ 3267,
+ 3270,
+ 3273,
+ 3277,
+ 3280,
+ 3283,
+ 3287,
+ 3290,
+ 3293,
+ 3296,
+ 3300,
+ 3303,
+ 3306,
+ 3310,
+ 3313,
+ 3316,
+ 3320,
+ 3323,
+ 3326,
+ 3330,
+ 3333,
+ 3336,
+ 3340,
+ 3343,
+ 3346,
+ 3350,
+ 3353,
+ 3356,
+ 3360,
+ 3363,
+ 3366,
+ 3370,
+ 3373,
+ 3376,
+ 3380,
+ 3383,
+ 3386,
+ 3389,
+ 3393,
+ 3396,
+ 3399,
+ 3403,
+ 3406,
+ 3409,
+ 3413,
+ 3416,
+ 3419,
+ 3423,
+ 3426,
+ 3429,
+ 3433,
+ 3436,
+ 3439,
+ 3443,
+ 3446,
+ 3449,
+ 3453,
+ 3456,
+ 3459,
+ 3463,
+ 3466,
+ 3469,
+ 3473,
+ 3476,
+ 3479,
+ 3483,
+ 3486,
+ 3489,
+ 3492,
+ 3496,
+ 3499,
+ 3502,
+ 3506,
+ 3509,
+ 3512,
+ 3516,
+ 3519,
+ 3522,
+ 3526,
+ 3529,
+ 3532,
+ 3536,
+ 3539,
+ 3542,
+ 3546,
+ 3549,
+ 3552,
+ 3556,
+ 3559,
+ 3562,
+ 3566,
+ 3569,
+ 3572,
+ 3576,
+ 3579,
+ 3582,
+ 3585,
+ 3589,
+ 3592,
+ 3595,
+ 3599,
+ 3602,
+ 3605,
+ 3609,
+ 3612,
+ 3615,
+ 3619,
+ 3622,
+ 3625,
+ 3629,
+ 3632,
+ 3635,
+ 3639,
+ 3642,
+ 3645,
+ 3649,
+ 3652,
+ 3655,
+ 3659,
+ 3662,
+ 3665,
+ 3669,
+ 3672,
+ 3675,
+ 3679,
+ 3682,
+ 3685,
+ 3688,
+ 3692,
+ 3695,
+ 3698,
+ 3702,
+ 3705,
+ 3708,
+ 3712,
+ 3715,
+ 3718,
+ 3722,
+ 3725,
+ 3728,
+ 3732,
+ 3735,
+ 3738,
+ 3742,
+ 3745,
+ 3748,
+ 3752,
+ 3755,
+ 3758,
+ 3762,
+ 3765,
+ 3768,
+ 3772,
+ 3775,
+ 3778,
+ 3781,
+ 3785,
+ 3788,
+ 3791,
+ 3795,
+ 3798,
+ 3801,
+ 3805,
+ 3808,
+ 3811,
+ 3815,
+ 3818,
+ 3821,
+ 3825,
+ 3828,
+ 3831,
+ 3835,
+ 3838,
+ 3841,
+ 3845,
+ 3848,
+ 3851,
+ 3855,
+ 3858,
+ 3861,
+ 3865,
+ 3868,
+ 3871,
+ 3874,
+ 3878,
+ 3881,
+ 3884,
+ 3888,
+ 3891,
+ 3894,
+ 3898,
+ 3901,
+ 3904,
+ 3908,
+ 3911,
+ 3914,
+ 3918,
+ 3921,
+ 3924,
+ 3928,
+ 3931,
+ 3934,
+ 3938,
+ 3941,
+ 3944,
+ 3948,
+ 3951,
+ 3954,
+ 3958,
+ 3961,
+ 3964,
+ 3968,
+ 3971,
+ 3974,
+ 3977,
+ 3981,
+ 3984,
+ 3987,
+ 3991,
+ 3994,
+ 3997,
+ 4001,
+ 4004,
+ 4007,
+ 4011,
+ 4014,
+ 4017,
+ 4021,
+ 4024,
+ 4027,
+ 4031,
+ 4034,
+ 4037,
+ 4041,
+ 4044,
+ 4047,
+ 4051,
+ 4054,
+ 4057,
+ 4061,
+ 4064,
+ 4067,
+ 4070,
+ 4074,
+ 4077,
+ 4080,
+ 4084,
+ 4087,
+ 4090,
+ 4094,
+ 4097,
+ 4100,
+ 4104,
+ 4107,
+ 4110,
+ 4114,
+ 4117,
+ 4120,
+ 4124,
+ 4127,
+ 4130,
+ 4134,
+ 4137,
+ 4140,
+ 4144,
+ 4147,
+ 4150,
+ 4154,
+ 4157,
+ 4160,
+ 4164,
+ 4167,
+ 4170,
+ 4173,
+ 4177,
+ 4180,
+ 4183,
+ 4187,
+ 4190,
+ 4193,
+ 4197,
+ 4200,
+ 4203,
+ 4207,
+ 4210,
+ 4213,
+ 4217,
+ 4220,
+ 4223,
+ 4227,
+ 4230,
+ 4233,
+ 4237,
+ 4240,
+ 4243,
+ 4247,
+ 4250,
+ 4253,
+ 4257,
+ 4260,
+ 4263,
+ 4266,
+ 4270,
+ 4273,
+ 4276,
+ 4280,
+ 4283,
+ 4286,
+ 4290,
+ 4293,
+ 4296,
+ 4300,
+ 4303,
+ 4306,
+ 4310,
+ 4313,
+ 4316,
+ 4320,
+ 4323,
+ 4326,
+ 4330,
+ 4333,
+ 4336,
+ 4340,
+ 4343,
+ 4346,
+ 4350,
+ 4353,
+ 4356,
+ 4359,
+ 4363,
+ 4366,
+ 4369,
+ 4373,
+ 4376,
+ 4379,
+ 4383,
+ 4386,
+ 4389,
+ 4393,
+ 4396,
+ 4399,
+ 4403,
+ 4406,
+ 4409,
+ 4413,
+ 4416,
+ 4419,
+ 4423,
+ 4426,
+ 4429,
+ 4433,
+ 4436,
+ 4439,
+ 4443,
+ 4446,
+ 4449,
+ 4453,
+ 4456,
+ 4459,
+ 4462,
+ 4466,
+ 4469,
+ 4472,
+ 4476,
+ 4479,
+ 4482,
+ 4486,
+ 4489,
+ 4492,
+ 4496,
+ 4499,
+ 4502,
+ 4506,
+ 4509,
+ 4512,
+ 4516,
+ 4519,
+ 4522,
+ 4526,
+ 4529,
+ 4532,
+ 4536,
+ 4539,
+ 4542,
+ 4546,
+ 4549,
+ 4552,
+ 4555,
+ 4559,
+ 4562,
+ 4565,
+ 4569,
+ 4572,
+ 4575,
+ 4579,
+ 4582,
+ 4585,
+ 4589,
+ 4592,
+ 4595,
+ 4599,
+ 4602,
+ 4605,
+ 4609,
+ 4612,
+ 4615,
+ 4619,
+ 4622,
+ 4625,
+ 4629,
+ 4632,
+ 4635,
+ 4639,
+ 4642,
+ 4645,
+ 4649,
+ 4652,
+ 4655,
+ 4658,
+ 4662,
+ 4665,
+ 4668,
+ 4672,
+ 4675,
+ 4678,
+ 4682,
+ 4685,
+ 4688,
+ 4692,
+ 4695,
+ 4698,
+ 4702,
+ 4705,
+ 4708,
+ 4712,
+ 4715,
+ 4718,
+ 4722,
+ 4725,
+ 4728,
+ 4732,
+ 4735,
+ 4738,
+ 4742,
+ 4745,
+ 4748,
+ 4751,
+ 4755,
+ 4758,
+ 4761,
+ 4765,
+ 4768,
+ 4771,
+ 4775,
+ 4778,
+ 4781,
+ 4785,
+ 4788,
+ 4791,
+ 4795,
+ 4798,
+ 4801,
+ 4805,
+ 4808,
+ 4811,
+ 4815,
+ 4818,
+ 4821,
+ 4825,
+ 4828,
+ 4831,
+ 4835,
+ 4838,
+ 4841,
+ 4844,
+ 4848,
+ 4851,
+ 4854,
+ 4858,
+ 4861,
+ 4864,
+ 4868,
+ 4871,
+ 4874,
+ 4878,
+ 4881,
+ 4884,
+ 4888,
+ 4891,
+ 4894,
+ 4898,
+ 4901,
+ 4904,
+ 4908,
+ 4911,
+ 4914,
+ 4918,
+ 4921,
+ 4924,
+ 4928,
+ 4931,
+ 4934,
+ 4938,
+ 4941,
+ 4944,
+ 4947,
+ 4951,
+ 4954,
+ 4957,
+ 4961,
+ 4964,
+ 4967,
+ 4971,
+ 4974,
+ 4977,
+ 4981,
+ 4984,
+ 4987,
+ 4991,
+ 4994,
+ 4997,
+ 5001,
+ 5004,
+ 5007,
+ 5011,
+ 5014,
+ 5017,
+ 5021,
+ 5024,
+ 5027,
+ 5031,
+ 5034,
+ 5037,
+ 5040,
+ 5044,
+ 5047,
+ 5050,
+ 5054,
+ 5057,
+ 5060,
+ 5064,
+ 5067,
+ 5070,
+ 5074,
+ 5077,
+ 5080,
+ 5084,
+ 5087,
+ 5090,
+ 5094,
+ 5097,
+ 5100,
+ 5104,
+ 5107,
+ 5110,
+ 5114,
+ 5117,
+ 5120,
+ 5124,
+ 5127,
+ 5130,
+ 5134,
+ 5137,
+ 5140,
+ 5143,
+ 5147,
+ 5150,
+ 5153,
+ 5157,
+ 5160,
+ 5163,
+ 5167,
+ 5170,
+ 5173,
+ 5177,
+ 5180,
+ 5183,
+ 5187,
+ 5190,
+ 5193,
+ 5197,
+ 5200,
+ 5203,
+ 5207,
+ 5210,
+ 5213,
+ 5217,
+ 5220,
+ 5223,
+ 5227,
+ 5230,
+ 5233,
+ 5236,
+ 5240,
+ 5243,
+ 5246,
+ 5250,
+ 5253,
+ 5256,
+ 5260,
+ 5263,
+ 5266,
+ 5270,
+ 5273,
+ 5276,
+ 5280,
+ 5283,
+ 5286,
+ 5290,
+ 5293,
+ 5296,
+ 5300,
+ 5303,
+ 5306,
+ 5310,
+ 5313,
+ 5316,
+ 5320,
+ 5323,
+ 5326,
+ 5329,
+ 5333,
+ 5336,
+ 5339,
+ 5343,
+ 5346,
+ 5349,
+ 5353,
+ 5356,
+ 5359,
+ 5363,
+ 5366,
+ 5369,
+ 5373,
+ 5376,
+ 5379,
+ 5383,
+ 5386,
+ 5389,
+ 5393,
+ 5396,
+ 5399,
+ 5403,
+ 5406,
+ 5409,
+ 5413,
+ 5416,
+ 5419,
+ 5423,
+ 5426,
+ 5429,
+ 5432,
+ 5436,
+ 5439,
+ 5442,
+ 5446,
+ 5449,
+ 5452,
+ 5456,
+ 5459,
+ 5462,
+ 5466,
+ 5469,
+ 5472,
+ 5476,
+ 5479,
+ 5482,
+ 5486,
+ 5489,
+ 5492,
+ 5496,
+ 5499,
+ 5502,
+ 5506,
+ 5509,
+ 5512,
+ 5516,
+ 5519,
+ 5522,
+ 5525,
+ 5529,
+ 5532,
+ 5535,
+ 5539,
+ 5542,
+ 5545,
+ 5549,
+ 5552,
+ 5555,
+ 5559,
+ 5562,
+ 5565,
+ 5569,
+ 5572,
+ 5575,
+ 5579,
+ 5582,
+ 5585,
+ 5589,
+ 5592,
+ 5595,
+ 5599,
+ 5602,
+ 5605,
+ 5609,
+ 5612,
+ 5615,
+ 5619,
+ 5622,
+ 5625,
+ 5628,
+ 5632,
+ 5635,
+ 5638,
+ 5642,
+ 5645,
+ 5648,
+ 5652,
+ 5655,
+ 5658,
+ 5662,
+ 5665,
+ 5668,
+ 5672,
+ 5675,
+ 5678,
+ 5682,
+ 5685,
+ 5688,
+ 5692,
+ 5695,
+ 5698,
+ 5702,
+ 5705,
+ 5708,
+ 5712,
+ 5715,
+ 5718,
+ 5721,
+ 5725,
+ 5728,
+ 5731,
+ 5735,
+ 5738,
+ 5741,
+ 5745,
+ 5748,
+ 5751,
+ 5755,
+ 5758,
+ 5761,
+ 5765,
+ 5768,
+ 5771,
+ 5775,
+ 5778,
+ 5781,
+ 5785,
+ 5788,
+ 5791,
+ 5795,
+ 5798,
+ 5801,
+ 5805,
+ 5808,
+ 5811,
+ 5815,
+ 5818,
+ 5821,
+ 5824,
+ 5828,
+ 5831,
+ 5834,
+ 5838,
+ 5841,
+ 5844,
+ 5848,
+ 5851,
+ 5854,
+ 5858,
+ 5861,
+ 5864,
+ 5868,
+ 5871,
+ 5874,
+ 5878,
+ 5881,
+ 5884,
+ 5888,
+ 5891,
+ 5894,
+ 5898,
+ 5901,
+ 5904,
+ 5908,
+ 5911,
+ 5914,
+ 5917,
+ 5921,
+ 5924,
+ 5927,
+ 5931,
+ 5934,
+ 5937,
+ 5941,
+ 5944,
+ 5947,
+ 5951,
+ 5954,
+ 5957,
+ 5961,
+ 5964,
+ 5967,
+ 5971,
+ 5974,
+ 5977,
+ 5981,
+ 5984,
+ 5987,
+ 5991,
+ 5994,
+ 5997,
+ 6001,
+ 6004,
+ 6007,
+ 6010,
+ 6014,
+ 6017,
+ 6020,
+ 6024,
+ 6027,
+ 6030,
+ 6034,
+ 6037,
+ 6040,
+ 6044,
+ 6047,
+ 6050,
+ 6054,
+ 6057,
+ 6060,
+ 6064,
+ 6067,
+ 6070,
+ 6074,
+ 6077,
+ 6080,
+ 6084,
+ 6087,
+ 6090,
+ 6094,
+ 6097,
+ 6100,
+ 6104,
+ 6107,
+ 6110,
+ 6113,
+ 6117,
+ 6120,
+ 6123,
+ 6127,
+ 6130,
+ 6133,
+ 6137,
+ 6140,
+ 6143,
+ 6147,
+ 6150,
+ 6153,
+ 6157,
+ 6160,
+ 6163,
+ 6167,
+ 6170,
+ 6173,
+ 6177,
+ 6180,
+ 6183,
+ 6187,
+ 6190,
+ 6193,
+ 6197,
+ 6200,
+ 6203,
+ 6206,
+ 6210,
+ 6213,
+ 6216,
+ 6220,
+ 6223,
+ 6226,
+ 6230,
+ 6233,
+ 6236,
+ 6240,
+ 6243,
+ 6246,
+ 6250,
+ 6253,
+ 6256,
+ 6260,
+ 6263,
+ 6266,
+ 6270,
+ 6273,
+ 6276,
+ 6280,
+ 6283,
+ 6286,
+ 6290,
+ 6293,
+ 6296,
+ 6300,
+ 6303,
+ 6306,
+ 6309,
+ 6313,
+ 6316,
+ 6319,
+ 6323,
+ 6326,
+ 6329,
+ 6333,
+ 6336,
+ 6339,
+ 6343,
+ 6346,
+ 6349,
+ 6353,
+ 6356,
+ 6359,
+ 6363,
+ 6366,
+ 6369,
+ 6373,
+ 6376,
+ 6379,
+ 6383,
+ 6386,
+ 6389,
+ 6393,
+ 6396,
+ 6399,
+ 6402,
+ 6406,
+ 6409,
+ 6412,
+ 6416,
+ 6419,
+ 6422,
+ 6426,
+ 6429,
+ 6432,
+ 6436,
+ 6439,
+ 6442,
+ 6446,
+ 6449,
+ 6452,
+ 6456,
+ 6459,
+ 6462,
+ 6466,
+ 6469,
+ 6472,
+ 6476,
+ 6479,
+ 6482,
+ 6486,
+ 6489,
+ 6492,
+ 6495,
+ 6499,
+ 6502,
+ 6505,
+ 6509,
+ 6512,
+ 6515,
+ 6519,
+ 6522,
+ 6525,
+ 6529,
+ 6532,
+ 6535,
+ 6539,
+ 6542,
+ 6545,
+ 6549,
+ 6552,
+ 6555,
+ 6559,
+ 6562,
+ 6565,
+ 6569,
+ 6572,
+ 6575,
+ 6579,
+ 6582,
+ 6585,
+ 6589,
+ 6592,
+ 6595,
+ 6598,
+ 6602,
+ 6605,
+ 6608,
+ 6612,
+ 6615,
+ 6618,
+ 6622,
+ 6625,
+ 6628,
+ 6632,
+ 6635,
+ 6638,
+ 6642,
+ 6645,
+ 6648,
+ 6652,
+ 6655,
+ 6658,
+ 6662,
+ 6665,
+ 6668,
+ 6672,
+ 6675,
+ 6678,
+ 6682,
+ 6685,
+ 6688,
+ 6691,
+ 6695,
+ 6698,
+ 6701,
+ 6705,
+ 6708,
+ 6711,
+ 6715,
+ 6718,
+ 6721,
+ 6725,
+ 6728,
+ 6731,
+ 6735,
+ 6738,
+ 6741,
+ 6745,
+ 6748,
+ 6751,
+ 6755,
+ 6758,
+ 6761,
+ 6765,
+ 6768,
+ 6771,
+ 6775,
+ 6778,
+ 6781,
+ 6785,
+ 6788,
+ 6791,
+ 6794,
+ 6798,
+ 6801,
+ 6804,
+ 6808,
+ 6811,
+ 6814,
+ 6818,
+ 6821,
+ 6824,
+ 6828,
+ 6831,
+ 6834,
+ 6838,
+ 6841,
+ 6844,
+ 6848,
+ 6851,
+ 6854,
+ 6858,
+ 6861,
+ 6864,
+ 6868,
+ 6871,
+ 6874,
+ 6878,
+ 6881,
+ 6884,
+ 6887,
+ 6891,
+ 6894,
+ 6897,
+ 6901,
+ 6904,
+ 6907,
+ 6911,
+ 6914,
+ 6917,
+ 6921,
+ 6924,
+ 6927,
+ 6931,
+ 6934,
+ 6937,
+ 6941,
+ 6944,
+ 6947,
+ 6951,
+ 6954,
+ 6957,
+ 6961,
+ 6964,
+ 6967,
+ 6971,
+ 6974,
+ 6977,
+ 6980,
+ 6984,
+ 6987,
+ 6990,
+ 6994,
+ 6997,
+ 7000,
+ 7004,
+ 7007,
+ 7010,
+ 7014,
+ 7017,
+ 7020,
+ 7024,
+ 7027,
+ 7030,
+ 7034,
+ 7037,
+ 7040,
+ 7044,
+ 7047,
+ 7050,
+ 7054,
+ 7057,
+ 7060,
+ 7064,
+ 7067,
+ 7070,
+ 7074,
+ 7077,
+ 7080,
+ 7083,
+ 7087,
+ 7090,
+ 7093,
+ 7097,
+ 7100,
+ 7103,
+ 7107,
+ 7110,
+ 7113,
+ 7117,
+ 7120,
+ 7123,
+ 7127,
+ 7130,
+ 7133,
+ 7137,
+ 7140,
+ 7143,
+ 7147,
+ 7150,
+ 7153,
+ 7157,
+ 7160,
+ 7163,
+ 7167,
+ 7170,
+ 7173,
+ 7176,
+ 7180,
+ 7183,
+ 7186,
+ 7190,
+ 7193,
+ 7196,
+ 7200,
+ 7203,
+ 7206,
+ 7210,
+ 7213,
+ 7216,
+ 7220,
+ 7223,
+ 7226,
+ 7230,
+ 7233,
+ 7236,
+ 7240,
+ 7243,
+ 7246,
+ 7250,
+ 7253,
+ 7256,
+ 7260,
+ 7263,
+ 7266,
+ 7270,
+ 7273,
+ 7276,
+ 7279,
+ 7283,
+ 7286,
+ 7289,
+ 7293,
+ 7296,
+ 7299,
+ 7303,
+ 7306,
+ 7309,
+ 7313,
+ 7316,
+ 7319,
+ 7323,
+ 7326,
+ 7329,
+ 7333,
+ 7336,
+ 7339,
+ 7343,
+ 7346,
+ 7349,
+ 7353,
+ 7356,
+ 7359,
+ 7363,
+ 7366,
+ 7369,
+ 7372,
+ 7376,
+ 7379,
+ 7382,
+ 7386,
+ 7389,
+ 7392,
+ 7396,
+ 7399,
+ 7402,
+ 7406,
+ 7409,
+ 7412,
+ 7416,
+ 7419,
+ 7422,
+ 7426,
+ 7429,
+ 7432,
+ 7436,
+ 7439,
+ 7442,
+ 7446,
+ 7449,
+ 7452,
+ 7456,
+ 7459,
+ 7462,
+ 7465,
+ 7469,
+ 7472,
+ 7475,
+ 7479,
+ 7482,
+ 7485,
+ 7489,
+ 7492,
+ 7495,
+ 7499,
+ 7502,
+ 7505,
+ 7509,
+ 7512,
+ 7515,
+ 7519,
+ 7522,
+ 7525,
+ 7529,
+ 7532,
+ 7535,
+ 7539,
+ 7542,
+ 7545,
+ 7549,
+ 7552,
+ 7555,
+ 7559,
+ 7562,
+ 7565,
+ 7568,
+ 7572,
+ 7575,
+ 7578,
+ 7582,
+ 7585,
+ 7588,
+ 7592,
+ 7595,
+ 7598,
+ 7602,
+ 7605,
+ 7608,
+ 7612,
+ 7615,
+ 7618,
+ 7622,
+ 7625,
+ 7628,
+ 7632,
+ 7635,
+ 7638,
+ 7642,
+ 7645,
+ 7648,
+ 7652,
+ 7655,
+ 7658,
+ 7661,
+ 7665,
+ 7668,
+ 7671,
+ 7675,
+ 7678,
+ 7681,
+ 7685,
+ 7688,
+ 7691,
+ 7695,
+ 7698,
+ 7701,
+ 7705,
+ 7708,
+ 7711,
+ 7715,
+ 7718,
+ 7721,
+ 7725,
+ 7728,
+ 7731,
+ 7735,
+ 7738,
+ 7741,
+ 7745,
+ 7748,
+ 7751,
+ 7755,
+ 7758,
+ 7761,
+ 7764,
+ 7768,
+ 7771,
+ 7774,
+ 7778,
+ 7781,
+ 7784,
+ 7788,
+ 7791,
+ 7794,
+ 7798,
+ 7801,
+ 7804,
+ 7808,
+ 7811,
+ 7814,
+ 7818,
+ 7821,
+ 7824,
+ 7828,
+ 7831,
+ 7834,
+ 7838,
+ 7841,
+ 7844,
+ 7848,
+ 7851,
+ 7854,
+ 7857,
+ 7861,
+ 7864,
+ 7867,
+ 7871,
+ 7874,
+ 7877,
+ 7881,
+ 7884,
+ 7887,
+ 7891,
+ 7894,
+ 7897,
+ 7901,
+ 7904,
+ 7907,
+ 7911,
+ 7914,
+ 7917,
+ 7921,
+ 7924,
+ 7927,
+ 7931,
+ 7934,
+ 7937,
+ 7941,
+ 7944,
+ 7947,
+ 7951,
+ 7954,
+ 7957,
+ 7960,
+ 7964,
+ 7967,
+ 7970,
+ 7974,
+ 7977,
+ 7980,
+ 7984,
+ 7987,
+ 7990,
+ 7994,
+ 7997,
+ 8000,
+ 8004,
+ 8007,
+ 8010,
+ 8014,
+ 8017,
+ 8020,
+ 8024,
+ 8027,
+ 8030,
+ 8034,
+ 8037,
+ 8040,
+ 8044,
+ 8047,
+ 8050,
+ 8053,
+ 8057,
+ 8060,
+ 8063,
+ 8067,
+ 8070,
+ 8073,
+ 8077,
+ 8080,
+ 8083,
+ 8087,
+ 8090,
+ 8093,
+ 8097,
+ 8100,
+ 8103,
+ 8107,
+ 8110,
+ 8113,
+ 8117,
+ 8120,
+ 8123,
+ 8127,
+ 8130,
+ 8133,
+ 8137,
+ 8140,
+ 8143,
+ 8146,
+ 8150,
+ 8153,
+ 8156,
+ 8160,
+ 8163,
+ 8166,
+ 8170,
+ 8173,
+ 8176,
+ 8180,
+ 8183,
+ 8186,
+ 8190,
+ 8193,
+ 8196,
+ 8200,
+ 8203,
+ 8206,
+ 8210,
+ 8213,
+ 8216,
+ 8220,
+ 8223,
+ 8226,
+ 8230,
+ 8233,
+ 8236,
+ 8240,
+ 8243,
+ 8246,
+ 8249,
+ 8253,
+ 8256,
+ 8259,
+ 8263,
+ 8266,
+ 8269,
+ 8273,
+ 8276,
+ 8279,
+ 8283,
+ 8286,
+ 8289,
+ 8293,
+ 8296,
+ 8299,
+ 8303,
+ 8306,
+ 8309,
+ 8313,
+ 8316,
+ 8319,
+ 8323,
+ 8326,
+ 8329,
+ 8333,
+ 8336,
+ 8339,
+ 8342,
+ 8346,
+ 8349,
+ 8352,
+ 8356,
+ 8359,
+ 8362,
+ 8366,
+ 8369,
+ 8372,
+ 8376,
+ 8379,
+ 8382,
+ 8386,
+ 8389,
+ 8392,
+ 8396,
+ 8399,
+ 8402,
+ 8406,
+ 8409,
+ 8412,
+ 8416,
+ 8419,
+ 8422,
+ 8426,
+ 8429,
+ 8432,
+ 8436,
+ 8439,
+ 8442,
+ 8445,
+ 8449,
+ 8452,
+ 8455,
+ 8459,
+ 8462,
+ 8465,
+ 8469,
+ 8472,
+ 8475,
+ 8479,
+ 8482,
+ 8485,
+ 8489,
+ 8492,
+ 8495,
+ 8499,
+ 8502,
+ 8505,
+ 8509,
+ 8512,
+ 8515,
+ 8519,
+ 8522,
+ 8525,
+ 8529,
+ 8532,
+ 8535,
+ 8538,
+ 8542,
+ 8545,
+ 8548,
+ 8552,
+ 8555,
+ 8558,
+ 8562,
+ 8565,
+ 8568,
+ 8572,
+ 8575,
+ 8578,
+ 8582,
+ 8585,
+ 8588,
+ 8592,
+ 8595,
+ 8598,
+ 8602,
+ 8605,
+ 8608,
+ 8612,
+ 8615,
+ 8618,
+ 8622,
+ 8625,
+ 8628,
+ 8631,
+ 8635,
+ 8638,
+ 8641,
+ 8645,
+ 8648,
+ 8651,
+ 8655,
+ 8658,
+ 8661,
+ 8665,
+ 8668,
+ 8671,
+ 8675,
+ 8678,
+ 8681,
+ 8685,
+ 8688,
+ 8691,
+ 8695,
+ 8698,
+ 8701,
+ 8705,
+ 8708,
+ 8711,
+ 8715,
+ 8718,
+ 8721,
+ 8725,
+ 8728,
+ 8731,
+ 8734,
+ 8738,
+ 8741,
+ 8744,
+ 8748,
+ 8751,
+ 8754,
+ 8758,
+ 8761,
+ 8764,
+ 8768,
+ 8771,
+ 8774,
+ 8778,
+ 8781,
+ 8784,
+ 8788,
+ 8791,
+ 8794,
+ 8798,
+ 8801,
+ 8804,
+ 8808,
+ 8811,
+ 8814,
+ 8818,
+ 8821,
+ 8824,
+ 8827,
+ 8831,
+ 8834,
+ 8837,
+ 8841,
+ 8844,
+ 8847,
+ 8851,
+ 8854,
+ 8857,
+ 8861,
+ 8864,
+ 8867,
+ 8871,
+ 8874,
+ 8877,
+ 8881,
+ 8884,
+ 8887,
+ 8891,
+ 8894,
+ 8897,
+ 8901,
+ 8904,
+ 8907,
+ 8911,
+ 8914,
+ 8917,
+ 8921,
+ 8924,
+ 8927,
+ 8930,
+ 8934,
+ 8937,
+ 8940,
+ 8944,
+ 8947,
+ 8950,
+ 8954,
+ 8957,
+ 8960,
+ 8964,
+ 8967,
+ 8970,
+ 8974,
+ 8977,
+ 8980,
+ 8984,
+ 8987,
+ 8990,
+ 8994,
+ 8997,
+ 9000,
+ 9004,
+ 9007,
+ 9010,
+ 9014,
+ 9017,
+ 9020,
+ 9023,
+ 9027,
+ 9030,
+ 9033,
+ 9037,
+ 9040,
+ 9043,
+ 9047,
+ 9050,
+ 9053,
+ 9057,
+ 9060,
+ 9063,
+ 9067,
+ 9070,
+ 9073,
+ 9077,
+ 9080,
+ 9083,
+ 9087,
+ 9090,
+ 9093,
+ 9097,
+ 9100,
+ 9103,
+ 9107,
+ 9110,
+ 9113,
+ 9116,
+ 9120,
+ 9123,
+ 9126,
+ 9130,
+ 9133,
+ 9136,
+ 9140,
+ 9143,
+ 9146,
+ 9150,
+ 9153,
+ 9156,
+ 9160,
+ 9163,
+ 9166,
+ 9170,
+ 9173,
+ 9176,
+ 9180,
+ 9183,
+ 9186,
+ 9190,
+ 9193,
+ 9196,
+ 9200,
+ 9203,
+ 9206,
+ 9210,
+ 9213,
+ 9216,
+ 9219,
+ 9223,
+ 9226,
+ 9229,
+ 9233,
+ 9236,
+ 9239,
+ 9243,
+ 9246,
+ 9249,
+ 9253,
+ 9256,
+ 9259,
+ 9263,
+ 9266,
+ 9269,
+ 9273,
+ 9276,
+ 9279,
+ 9283,
+ 9286,
+ 9289,
+ 9293,
+ 9296,
+ 9299,
+ 9303,
+ 9306,
+ 9309,
+ 9312,
+ 9316,
+ 9319,
+ 9322,
+ 9326,
+ 9329,
+ 9332,
+ 9336,
+ 9339,
+ 9342,
+ 9346,
+ 9349,
+ 9352,
+ 9356,
+ 9359,
+ 9362,
+ 9366,
+ 9369,
+ 9372,
+ 9376,
+ 9379,
+ 9382,
+ 9386,
+ 9389,
+ 9392,
+ 9396,
+ 9399,
+ 9402,
+ 9406,
+ 9409,
+ 9412,
+ 9415,
+ 9419,
+ 9422,
+ 9425,
+ 9429,
+ 9432,
+ 9435,
+ 9439,
+ 9442,
+ 9445,
+ 9449,
+ 9452,
+ 9455,
+ 9459,
+ 9462,
+ 9465,
+ 9469,
+ 9472,
+ 9475,
+ 9479,
+ 9482,
+ 9485,
+ 9489,
+ 9492,
+ 9495,
+ 9499,
+ 9502,
+ 9505,
+ 9508,
+ 9512,
+ 9515,
+ 9518,
+ 9522,
+ 9525,
+ 9528,
+ 9532,
+ 9535,
+ 9538,
+ 9542,
+ 9545,
+ 9548,
+ 9552,
+ 9555,
+ 9558,
+ 9562,
+ 9565,
+ 9568,
+ 9572,
+ 9575,
+ 9578,
+ 9582,
+ 9585,
+ 9588,
+ 9592,
+ 9595,
+ 9598,
+ 9601,
+ 9605,
+ 9608,
+ 9611,
+ 9615,
+ 9618,
+ 9621,
+ 9625,
+ 9628,
+ 9631,
+ 9635,
+ 9638,
+ 9641,
+ 9645,
+ 9648,
+ 9651,
+ 9655,
+ 9658,
+ 9661,
+ 9665,
+ 9668,
+ 9671,
+ 9675,
+ 9678,
+ 9681,
+ 9685,
+ 9688,
+ 9691,
+ 9695,
+ 9698,
+ 9701,
+ 9704,
+ 9708,
+ 9711,
+ 9714,
+ 9718,
+ 9721,
+ 9724,
+ 9728,
+ 9731,
+ 9734,
+ 9738,
+ 9741,
+ 9744,
+ 9748,
+ 9751,
+ 9754,
+ 9758,
+ 9761,
+ 9764,
+ 9768,
+ 9771,
+ 9774,
+ 9778,
+ 9781,
+ 9784,
+ 9788,
+ 9791,
+ 9794,
+ 9797,
+ 9801,
+ 9804,
+ 9807,
+ 9811,
+ 9814,
+ 9817,
+ 9821,
+ 9824,
+ 9827,
+ 9831,
+ 9834,
+ 9837,
+ 9841,
+ 9844,
+ 9847,
+ 9851,
+ 9854,
+ 9857,
+ 9861,
+ 9864,
+ 9867,
+ 9871,
+ 9874,
+ 9877,
+ 9881,
+ 9884,
+ 9887,
+ 9891,
+ 9894,
+ 9897,
+ 9900,
+ 9904,
+ 9907,
+ 9910,
+ 9914,
+ 9917,
+ 9920,
+ 9924,
+ 9927,
+ 9930,
+ 9934,
+ 9937,
+ 9940,
+ 9944,
+ 9947,
+ 9950,
+ 9954,
+ 9957,
+ 9960,
+ 9964,
+ 9967,
+ 9970,
+ 9974,
+ 9977,
+ 9980,
+ 9984,
+ 9987,
+ 9990,
+ 9993,
+ 9997,
+ 10000,
+ 10003,
+ 10007,
+ 10010,
+ 10013,
+ 10017,
+ 10020,
+ 10023,
+ 10027,
+ 10030,
+ 10033,
+ 10037,
+ 10040,
+ 10043,
+ 10047,
+ 10050,
+ 10053,
+ 10057,
+ 10060,
+ 10063,
+ 10067,
+ 10070,
+ 10073,
+ 10077,
+ 10080,
+ 10083,
+ 10087,
+ 10090,
+ 10093,
+ 10096,
+ 10100,
+ 10103,
+ 10106,
+ 10110,
+ 10113,
+ 10116,
+ 10120,
+ 10123,
+ 10126,
+ 10130,
+ 10133,
+ 10136,
+ 10140,
+ 10143,
+ 10146,
+ 10150,
+ 10153,
+ 10156,
+ 10160,
+ 10163,
+ 10166,
+ 10170,
+ 10173,
+ 10176,
+ 10180,
+ 10183,
+ 10186,
+ 10189,
+ 10193,
+ 10196,
+ 10199,
+ 10203,
+ 10206,
+ 10209,
+ 10213,
+ 10216,
+ 10219,
+ 10223,
+ 10226,
+ 10229,
+ 10233,
+ 10236,
+ 10239,
+ 10243,
+ 10246,
+ 10249,
+ 10253,
+ 10256,
+ 10259,
+ 10263,
+ 10266,
+ 10269,
+ 10273,
+ 10276,
+ 10279,
+ 10282,
+ 10286,
+ 10289,
+ 10292,
+ 10296,
+ 10299,
+ 10302,
+ 10306,
+ 10309,
+ 10312,
+ 10316,
+ 10319,
+ 10322,
+ 10326,
+ 10329,
+ 10332,
+ 10336,
+ 10339,
+ 10342,
+ 10346,
+ 10349,
+ 10352,
+ 10356,
+ 10359,
+ 10362,
+ 10366,
+ 10369,
+ 10372,
+ 10376,
+ 10379,
+ 10382,
+ 10385,
+ 10389,
+ 10392,
+ 10395,
+ 10399,
+ 10402,
+ 10405,
+ 10409,
+ 10412,
+ 10415,
+ 10419,
+ 10422,
+ 10425,
+ 10429,
+ 10432,
+ 10435,
+ 10439,
+ 10442,
+ 10445,
+ 10449,
+ 10452,
+ 10455,
+ 10459,
+ 10462,
+ 10465,
+ 10469,
+ 10472,
+ 10475,
+ 10478,
+ 10482,
+ 10485,
+ 10488,
+ 10492,
+ 10495,
+ 10498,
+ 10502,
+ 10505,
+ 10508,
+ 10512,
+ 10515,
+ 10518,
+ 10522,
+ 10525,
+ 10528,
+ 10532,
+ 10535,
+ 10538,
+ 10542,
+ 10545,
+ 10548,
+ 10552,
+ 10555,
+ 10558,
+ 10562,
+ 10565,
+ 10568,
+ 10572,
+ 10575,
+ 10578,
+ 10581,
+ 10585,
+ 10588,
+ 10591,
+ 10595,
+ 10598,
+ 10601,
+ 10605,
+ 10608,
+ 10611,
+ 10615,
+ 10618,
+ 10621,
+ 10625,
+ 10628,
+ 10631,
+ 10635,
+ 10638,
+ 10641,
+ 10645,
+ 10648,
+ 10651,
+ 10655,
+ 10658,
+ 10661,
+ 10665,
+ 10668,
+ 10671,
+ 10674,
+ 10678,
+ 10681,
+ 10684,
+ 10688,
+ 10691,
+ 10694,
+ 10698,
+ 10701,
+ 10704,
+ 10708,
+ 10711,
+ 10714,
+ 10718,
+ 10721,
+ 10724,
+ 10728,
+ 10731,
+ 10734,
+ 10738,
+ 10741,
+ 10744,
+ 10748,
+ 10751,
+ 10754,
+ 10758,
+ 10761,
+ 10764,
+ 10767,
+ 10771,
+ 10774,
+ 10777,
+ 10781,
+ 10784,
+ 10787,
+ 10791,
+ 10794,
+ 10797,
+ 10801,
+ 10804,
+ 10807,
+ 10811,
+ 10814,
+ 10817,
+ 10821,
+ 10824,
+ 10827,
+ 10831,
+ 10834,
+ 10837,
+ 10841,
+ 10844,
+ 10847,
+ 10851,
+ 10854,
+ 10857,
+ 10861,
+ 10864,
+ 10867,
+ 10870,
+ 10874,
+ 10877,
+ 10880,
+ 10884,
+ 10887,
+ 10890,
+ 10894,
+ 10897,
+ 10900,
+ 10904,
+ 10907,
+ 10910,
+ 10914,
+ 10917,
+ 10920,
+ 10924,
+ 10927,
+ 10930,
+ 10934,
+ 10937,
+ 10940,
+ 10944,
+ 10947,
+ 10950,
+ 10954,
+ 10957,
+ 10960,
+ 10963,
+ 10967,
+ 10970,
+ 10973,
+ 10977,
+ 10980,
+ 10983,
+ 10987,
+ 10990,
+ 10993,
+ 10997,
+ 11000,
+ 11003,
+ 11007,
+ 11010,
+ 11013,
+ 11017,
+ 11020,
+ 11023,
+ 11027,
+ 11030,
+ 11033,
+ 11037,
+ 11040,
+ 11043,
+ 11047,
+ 11050,
+ 11053,
+ 11057,
+ 11060,
+ 11063,
+ 11066,
+ 11070,
+ 11073,
+ 11076,
+ 11080,
+ 11083,
+ 11086,
+ 11090,
+ 11093,
+ 11096,
+ 11100,
+ 11103,
+ 11106,
+ 11110,
+ 11113,
+ 11116,
+ 11120,
+ 11123,
+ 11126,
+ 11130,
+ 11133,
+ 11136,
+ 11140,
+ 11143,
+ 11146,
+ 11150,
+ 11153,
+ 11156,
+ 11159,
+ 11163,
+ 11166,
+ 11169,
+ 11173,
+ 11176,
+ 11179,
+ 11183,
+ 11186,
+ 11189,
+ 11193,
+ 11196,
+ 11199,
+ 11203,
+ 11206,
+ 11209,
+ 11213,
+ 11216,
+ 11219,
+ 11223,
+ 11226,
+ 11229,
+ 11233,
+ 11236,
+ 11239,
+ 11243,
+ 11246,
+ 11249,
+ 11252,
+ 11256,
+ 11259,
+ 11262,
+ 11266,
+ 11269,
+ 11272,
+ 11276,
+ 11279,
+ 11282,
+ 11286,
+ 11289,
+ 11292,
+ 11296,
+ 11299,
+ 11302,
+ 11306,
+ 11309,
+ 11312,
+ 11316,
+ 11319,
+ 11322,
+ 11326,
+ 11329,
+ 11332,
+ 11336,
+ 11339,
+ 11342,
+ 11346,
+ 11349,
+ 11352,
+ 11355,
+ 11359,
+ 11362,
+ 11365,
+ 11369,
+ 11372,
+ 11375,
+ 11379,
+ 11382,
+ 11385,
+ 11389,
+ 11392,
+ 11395,
+ 11399,
+ 11402,
+ 11405,
+ 11409,
+ 11412,
+ 11415,
+ 11419,
+ 11422,
+ 11425,
+ 11429,
+ 11432,
+ 11435,
+ 11439,
+ 11442,
+ 11445,
+ 11448,
+ 11452,
+ 11455,
+ 11458,
+ 11462,
+ 11465,
+ 11468,
+ 11472,
+ 11475,
+ 11478,
+ 11482,
+ 11485,
+ 11488,
+ 11492,
+ 11495,
+ 11498,
+ 11502,
+ 11505,
+ 11508,
+ 11512,
+ 11515,
+ 11518,
+ 11522,
+ 11525,
+ 11528,
+ 11532,
+ 11535,
+ 11538,
+ 11542,
+ 11545,
+ 11548,
+ 11551,
+ 11555,
+ 11558,
+ 11561,
+ 11565,
+ 11568,
+ 11571,
+ 11575,
+ 11578,
+ 11581,
+ 11585,
+ 11588,
+ 11591,
+ 11595,
+ 11598,
+ 11601,
+ 11605,
+ 11608,
+ 11611,
+ 11615,
+ 11618,
+ 11621,
+ 11625,
+ 11628,
+ 11631,
+ 11635,
+ 11638,
+ 11641,
+ 11644,
+ 11648,
+ 11651,
+ 11654,
+ 11658,
+ 11661,
+ 11664,
+ 11668,
+ 11671,
+ 11674,
+ 11678,
+ 11681,
+ 11684,
+ 11688,
+ 11691,
+ 11694,
+ 11698,
+ 11701,
+ 11704,
+ 11708,
+ 11711,
+ 11714,
+ 11718,
+ 11721,
+ 11724,
+ 11728,
+ 11731,
+ 11734,
+ 11737,
+ 11741,
+ 11744,
+ 11747,
+ 11751,
+ 11754,
+ 11757,
+ 11761,
+ 11764,
+ 11767,
+ 11771,
+ 11774,
+ 11777,
+ 11781,
+ 11784,
+ 11787,
+ 11791,
+ 11794,
+ 11797,
+ 11801,
+ 11804,
+ 11807,
+ 11811,
+ 11814,
+ 11817,
+ 11821,
+ 11824,
+ 11827,
+ 11831,
+ 11834,
+ 11837,
+ 11840,
+ 11844,
+ 11847,
+ 11850,
+ 11854,
+ 11857,
+ 11860,
+ 11864,
+ 11867,
+ 11870,
+ 11874,
+ 11877,
+ 11880,
+ 11884,
+ 11887,
+ 11890,
+ 11894,
+ 11897,
+ 11900,
+ 11904,
+ 11907,
+ 11910,
+ 11914,
+ 11917,
+ 11920,
+ 11924,
+ 11927,
+ 11930,
+ 11933,
+ 11937,
+ 11940,
+ 11943,
+ 11947,
+ 11950,
+ 11953,
+ 11957,
+ 11960,
+ 11963,
+ 11967,
+ 11970,
+ 11973,
+ 11977,
+ 11980,
+ 11983,
+ 11987,
+ 11990,
+ 11993,
+ 11997,
+ 12000,
+ 12003,
+ 12007,
+ 12010,
+ 12013,
+ 12017,
+ 12020,
+ 12023,
+ 12027,
+ 12030,
+ 12033,
+ 12036,
+ 12040,
+ 12043,
+ 12046,
+ 12050,
+ 12053,
+ 12056,
+ 12060,
+ 12063,
+ 12066,
+ 12070,
+ 12073,
+ 12076,
+ 12080,
+ 12083,
+ 12086,
+ 12090,
+ 12093,
+ 12096,
+ 12100,
+ 12103,
+ 12106,
+ 12110,
+ 12113,
+ 12116,
+ 12120,
+ 12123,
+ 12126,
+ 12129,
+ 12133,
+ 12136,
+ 12139,
+ 12143,
+ 12146,
+ 12149,
+ 12153,
+ 12156,
+ 12159,
+ 12163,
+ 12166,
+ 12169,
+ 12173,
+ 12176,
+ 12179,
+ 12183,
+ 12186,
+ 12189,
+ 12193,
+ 12196,
+ 12199,
+ 12203,
+ 12206,
+ 12209,
+ 12213,
+ 12216,
+ 12219,
+ 12223,
+ 12226,
+ 12229,
+ 12232,
+ 12236,
+ 12239,
+ 12242,
+ 12246,
+ 12249,
+ 12252,
+ 12256,
+ 12259,
+ 12262,
+ 12266,
+ 12269,
+ 12272,
+ 12276,
+ 12279,
+ 12282,
+ 12286,
+ 12289,
+ 12292,
+ 12296,
+ 12299,
+ 12302,
+ 12306,
+ 12309,
+ 12312,
+ 12316,
+ 12319,
+ 12322,
+ 12325,
+ 12329,
+ 12332,
+ 12335,
+ 12339,
+ 12342,
+ 12345,
+ 12349,
+ 12352,
+ 12355,
+ 12359,
+ 12362,
+ 12365,
+ 12369,
+ 12372,
+ 12375,
+ 12379,
+ 12382,
+ 12385,
+ 12389,
+ 12392,
+ 12395,
+ 12399,
+ 12402,
+ 12405,
+ 12409,
+ 12412,
+ 12415,
+ 12418,
+ 12422,
+ 12425,
+ 12428,
+ 12432,
+ 12435,
+ 12438,
+ 12442,
+ 12445,
+ 12448,
+ 12452,
+ 12455,
+ 12458,
+ 12462,
+ 12465,
+ 12468,
+ 12472,
+ 12475,
+ 12478,
+ 12482,
+ 12485,
+ 12488,
+ 12492,
+ 12495,
+ 12498,
+ 12502,
+ 12505,
+ 12508,
+ 12512,
+ 12515,
+ 12518,
+ 12521,
+ 12525,
+ 12528,
+ 12531,
+ 12535,
+ 12538,
+ 12541,
+ 12545,
+ 12548,
+ 12551,
+ 12555,
+ 12558,
+ 12561,
+ 12565,
+ 12568,
+ 12571,
+ 12575,
+ 12578,
+ 12581,
+ 12585,
+ 12588,
+ 12591,
+ 12595,
+ 12598,
+ 12601,
+ 12605,
+ 12608,
+ 12611,
+ 12614,
+ 12618,
+ 12621,
+ 12624,
+ 12628,
+ 12631,
+ 12634,
+ 12638,
+ 12641,
+ 12644,
+ 12648,
+ 12651,
+ 12654,
+ 12658,
+ 12661,
+ 12664,
+ 12668,
+ 12671,
+ 12674,
+ 12678,
+ 12681,
+ 12684,
+ 12688,
+ 12691,
+ 12694,
+ 12698,
+ 12701,
+ 12704,
+ 12708,
+ 12711,
+ 12714,
+ 12717,
+ 12721,
+ 12724,
+ 12727,
+ 12731,
+ 12734,
+ 12737,
+ 12741,
+ 12744,
+ 12747,
+ 12751,
+ 12754,
+ 12757,
+ 12761,
+ 12764,
+ 12767,
+ 12771,
+ 12774,
+ 12777,
+ 12781,
+ 12784,
+ 12787,
+ 12791,
+ 12794,
+ 12797,
+ 12801,
+ 12804,
+ 12807,
+ 12810,
+ 12814,
+ 12817,
+ 12820,
+ 12824,
+ 12827,
+ 12830,
+ 12834,
+ 12837,
+ 12840,
+ 12844,
+ 12847,
+ 12850,
+ 12854,
+ 12857,
+ 12860,
+ 12864,
+ 12867,
+ 12870,
+ 12874,
+ 12877,
+ 12880,
+ 12884,
+ 12887,
+ 12890,
+ 12894,
+ 12897,
+ 12900,
+ 12903,
+ 12907,
+ 12910,
+ 12913,
+ 12917,
+ 12920,
+ 12923,
+ 12927,
+ 12930,
+ 12933,
+ 12937,
+ 12940,
+ 12943,
+ 12947,
+ 12950,
+ 12953,
+ 12957,
+ 12960,
+ 12963,
+ 12967,
+ 12970,
+ 12973,
+ 12977,
+ 12980,
+ 12983,
+ 12987,
+ 12990,
+ 12993,
+ 12997,
+ 13000,
+ 13003,
+ 13006,
+ 13010,
+ 13013,
+ 13016,
+ 13020,
+ 13023,
+ 13026,
+ 13030,
+ 13033,
+ 13036,
+ 13040,
+ 13043,
+ 13046,
+ 13050,
+ 13053,
+ 13056,
+ 13060,
+ 13063,
+ 13066,
+ 13070,
+ 13073,
+ 13076,
+ 13080,
+ 13083,
+ 13086,
+ 13090,
+ 13093,
+ 13096,
+ 13099,
+ 13103,
+ 13106,
+ 13109,
+ 13113,
+ 13116,
+ 13119,
+ 13123,
+ 13126,
+ 13129,
+ 13133,
+ 13136,
+ 13139,
+ 13143,
+ 13146,
+ 13149,
+ 13153,
+ 13156,
+ 13159,
+ 13163,
+ 13166,
+ 13169,
+ 13173,
+ 13176,
+ 13179,
+ 13183,
+ 13186,
+ 13189,
+ 13193,
+ 13196,
+ 13199,
+ 13202,
+ 13206,
+ 13209,
+ 13212,
+ 13216,
+ 13219,
+ 13222,
+ 13226,
+ 13229,
+ 13232,
+ 13236,
+ 13239,
+ 13242,
+ 13246,
+ 13249,
+ 13252,
+ 13256,
+ 13259,
+ 13262,
+ 13266,
+ 13269,
+ 13272,
+ 13276,
+ 13279,
+ 13282,
+ 13286,
+ 13289,
+ 13292,
+ 13295,
+ 13299,
+ 13302,
+ 13305,
+ 13309,
+ 13312,
+ 13315,
+ 13319,
+ 13322,
+ 13325,
+ 13329,
+ 13332,
+ 13335,
+ 13339,
+ 13342,
+ 13345,
+ 13349,
+ 13352,
+ 13355,
+ 13359,
+ 13362,
+ 13365,
+ 13369,
+ 13372,
+ 13375,
+ 13379,
+ 13382,
+ 13385,
+ 13388,
+ 13392,
+ 13395,
+ 13398,
+ 13402,
+ 13405,
+ 13408,
+ 13412,
+ 13415,
+ 13418,
+ 13422,
+ 13425,
+ 13428,
+ 13432,
+ 13435,
+ 13438,
+ 13442,
+ 13445,
+ 13448,
+ 13452,
+ 13455,
+ 13458,
+ 13462,
+ 13465,
+ 13468,
+ 13472,
+ 13475,
+ 13478,
+ 13482,
+ 13485,
+ 13488,
+ 13491,
+ 13495,
+ 13498,
+ 13501,
+ 13505,
+ 13508,
+ 13511,
+ 13515,
+ 13518,
+ 13521,
+ 13525,
+ 13528,
+ 13531,
+ 13535,
+ 13538,
+ 13541,
+ 13545,
+ 13548,
+ 13551,
+ 13555,
+ 13558,
+ 13561,
+ 13565,
+ 13568,
+ 13571,
+ 13575,
+ 13578,
+ 13581,
+ 13584,
+ 13588,
+ 13591,
+ 13594,
+ 13598,
+ 13601,
+ 13604,
+ 13608,
+ 13611,
+ 13614,
+ 13618,
+ 13621,
+ 13624,
+ 13628,
+ 13631,
+ 13634,
+ 13638,
+ 13641,
+ 13644,
+ 13648,
+ 13651,
+ 13654,
+ 13658,
+ 13661,
+ 13664,
+ 13668,
+ 13671,
+ 13674,
+ 13678,
+ 13681,
+ 13684,
+ 13687,
+ 13691,
+ 13694,
+ 13697,
+ 13701,
+ 13704,
+ 13707,
+ 13711,
+ 13714,
+ 13717,
+ 13721,
+ 13724,
+ 13727,
+ 13731,
+ 13734,
+ 13737,
+ 13741,
+ 13744,
+ 13747,
+ 13751,
+ 13754,
+ 13757,
+ 13761,
+ 13764,
+ 13767,
+ 13771,
+ 13774,
+ 13777,
+ 13780,
+ 13784,
+ 13787,
+ 13790,
+ 13794,
+ 13797,
+ 13800,
+ 13804,
+ 13807,
+ 13810,
+ 13814,
+ 13817,
+ 13820,
+ 13824,
+ 13827,
+ 13830,
+ 13834,
+ 13837,
+ 13840,
+ 13844,
+ 13847,
+ 13850,
+ 13854,
+ 13857,
+ 13860,
+ 13864,
+ 13867,
+ 13870,
+ 13873,
+ 13877,
+ 13880,
+ 13883,
+ 13887,
+ 13890,
+ 13893,
+ 13897,
+ 13900,
+ 13903,
+ 13907,
+ 13910,
+ 13913,
+ 13917,
+ 13920,
+ 13923,
+ 13927,
+ 13930,
+ 13933,
+ 13937,
+ 13940,
+ 13943,
+ 13947,
+ 13950,
+ 13953,
+ 13957,
+ 13960,
+ 13963,
+ 13967,
+ 13970,
+ 13973,
+ 13976,
+ 13980,
+ 13983,
+ 13986,
+ 13990,
+ 13993,
+ 13996,
+ 14000,
+ 14003,
+ 14006,
+ 14010,
+ 14013,
+ 14016,
+ 14020,
+ 14023,
+ 14026,
+ 14030,
+ 14033,
+ 14036,
+ 14040,
+ 14043,
+ 14046,
+ 14050,
+ 14053,
+ 14056,
+ 14060,
+ 14063,
+ 14066,
+ 14069,
+ 14073,
+ 14076,
+ 14079,
+ 14083,
+ 14086,
+ 14089,
+ 14093,
+ 14096,
+ 14099,
+ 14103,
+ 14106,
+ 14109,
+ 14113,
+ 14116,
+ 14119,
+ 14123,
+ 14126,
+ 14129,
+ 14133,
+ 14136,
+ 14139,
+ 14143,
+ 14146,
+ 14149,
+ 14153,
+ 14156,
+ 14159,
+ 14163,
+ 14166,
+ 14169,
+ 14172,
+ 14176,
+ 14179,
+ 14182,
+ 14186,
+ 14189,
+ 14192,
+ 14196,
+ 14199,
+ 14202,
+ 14206,
+ 14209,
+ 14212,
+ 14216,
+ 14219,
+ 14222,
+ 14226,
+ 14229,
+ 14232,
+ 14236,
+ 14239,
+ 14242,
+ 14246,
+ 14249,
+ 14252,
+ 14256,
+ 14259,
+ 14262,
+ 14265,
+ 14269,
+ 14272,
+ 14275,
+ 14279,
+ 14282,
+ 14285,
+ 14289,
+ 14292,
+ 14295,
+ 14299,
+ 14302,
+ 14305,
+ 14309,
+ 14312,
+ 14315,
+ 14319,
+ 14322,
+ 14325,
+ 14329,
+ 14332,
+ 14335,
+ 14339,
+ 14342,
+ 14345,
+ 14349,
+ 14352,
+ 14355,
+ 14359,
+ 14362,
+ 14365,
+ 14368,
+ 14372,
+ 14375,
+ 14378,
+ 14382,
+ 14385,
+ 14388,
+ 14392,
+ 14395,
+ 14398,
+ 14402,
+ 14405,
+ 14408,
+ 14412,
+ 14415,
+ 14418,
+ 14422,
+ 14425,
+ 14428,
+ 14432,
+ 14435,
+ 14438,
+ 14442,
+ 14445,
+ 14448,
+ 14452,
+ 14455,
+ 14458,
+ 14461,
+ 14465,
+ 14468,
+ 14471,
+ 14475,
+ 14478,
+ 14481,
+ 14485,
+ 14488,
+ 14491,
+ 14495,
+ 14498,
+ 14501,
+ 14505,
+ 14508,
+ 14511,
+ 14515,
+ 14518,
+ 14521,
+ 14525,
+ 14528,
+ 14531,
+ 14535,
+ 14538,
+ 14541,
+ 14545,
+ 14548,
+ 14551,
+ 14554,
+ 14558,
+ 14561,
+ 14564,
+ 14568,
+ 14571,
+ 14574,
+ 14578,
+ 14581,
+ 14584,
+ 14588,
+ 14591,
+ 14594,
+ 14598,
+ 14601,
+ 14604,
+ 14608,
+ 14611,
+ 14614,
+ 14618,
+ 14621,
+ 14624,
+ 14628,
+ 14631,
+ 14634,
+ 14638,
+ 14641,
+ 14644,
+ 14648,
+ 14651,
+ 14654,
+ 14657,
+ 14661,
+ 14664,
+ 14667,
+ 14671,
+ 14674,
+ 14677,
+ 14681,
+ 14684,
+ 14687,
+ 14691,
+ 14694,
+ 14697,
+ 14701,
+ 14704,
+ 14707,
+ 14711,
+ 14714,
+ 14717,
+ 14721,
+ 14724,
+ 14727,
+ 14731,
+ 14734,
+ 14737,
+ 14741,
+ 14744,
+ 14747,
+ 14750,
+ 14754,
+ 14757,
+ 14760,
+ 14764,
+ 14767,
+ 14770,
+ 14774,
+ 14777,
+ 14780,
+ 14784,
+ 14787,
+ 14790,
+ 14794,
+ 14797,
+ 14800,
+ 14804,
+ 14807,
+ 14810,
+ 14814,
+ 14817,
+ 14820,
+ 14824,
+ 14827,
+ 14830,
+ 14834,
+ 14837,
+ 14840,
+ 14844,
+ 14847,
+ 14850,
+ 14853,
+ 14857,
+ 14860,
+ 14863,
+ 14867,
+ 14870,
+ 14873,
+ 14877,
+ 14880,
+ 14883,
+ 14887,
+ 14890,
+ 14893,
+ 14897,
+ 14900,
+ 14903,
+ 14907,
+ 14910,
+ 14913,
+ 14917,
+ 14920,
+ 14923,
+ 14927,
+ 14930,
+ 14933,
+ 14937,
+ 14940,
+ 14943,
+ 14946,
+ 14950,
+ 14953,
+ 14956,
+ 14960,
+ 14963,
+ 14966,
+ 14970,
+ 14973,
+ 14976,
+ 14980,
+ 14983,
+ 14986,
+ 14990,
+ 14993,
+ 14996,
+ 15000,
+ 15003,
+ 15006,
+ 15010,
+ 15013,
+ 15016,
+ 15020,
+ 15023,
+ 15026,
+ 15030,
+ 15033,
+ 15036,
+ 15039,
+ 15043,
+ 15046,
+ 15049,
+ 15053,
+ 15056,
+ 15059,
+ 15063,
+ 15066,
+ 15069,
+ 15073,
+ 15076,
+ 15079,
+ 15083,
+ 15086,
+ 15089,
+ 15093,
+ 15096,
+ 15099,
+ 15103,
+ 15106,
+ 15109,
+ 15113,
+ 15116,
+ 15119,
+ 15123,
+ 15126,
+ 15129,
+ 15133,
+ 15136,
+ 15139,
+ 15142,
+ 15146,
+ 15149,
+ 15152,
+ 15156,
+ 15159,
+ 15162,
+ 15166,
+ 15169,
+ 15172,
+ 15176,
+ 15179,
+ 15182,
+ 15186,
+ 15189,
+ 15192,
+ 15196,
+ 15199,
+ 15202,
+ 15206,
+ 15209,
+ 15212,
+ 15216,
+ 15219,
+ 15222,
+ 15226,
+ 15229,
+ 15232,
+ 15235,
+ 15239,
+ 15242,
+ 15245,
+ 15249,
+ 15252,
+ 15255,
+ 15259,
+ 15262,
+ 15265,
+ 15269,
+ 15272,
+ 15275,
+ 15279,
+ 15282,
+ 15285,
+ 15289,
+ 15292,
+ 15295,
+ 15299,
+ 15302,
+ 15305,
+ 15309,
+ 15312,
+ 15315,
+ 15319,
+ 15322,
+ 15325,
+ 15329,
+ 15332,
+ 15335,
+ 15338,
+ 15342,
+ 15345,
+ 15348,
+ 15352,
+ 15355,
+ 15358,
+ 15362,
+ 15365,
+ 15368,
+ 15372,
+ 15375,
+ 15378,
+ 15382,
+ 15385,
+ 15388,
+ 15392,
+ 15395,
+ 15398,
+ 15402,
+ 15405,
+ 15408,
+ 15412,
+ 15415,
+ 15418,
+ 15422,
+ 15425,
+ 15428,
+ 15431,
+ 15435,
+ 15438,
+ 15441,
+ 15445,
+ 15448,
+ 15451,
+ 15455,
+ 15458,
+ 15461,
+ 15465,
+ 15468,
+ 15471,
+ 15475,
+ 15478,
+ 15481,
+ 15485,
+ 15488,
+ 15491,
+ 15495,
+ 15498,
+ 15501,
+ 15505,
+ 15508,
+ 15511,
+ 15515,
+ 15518,
+ 15521,
+ 15524,
+ 15528,
+ 15531,
+ 15534,
+ 15538,
+ 15541,
+ 15544,
+ 15548,
+ 15551,
+ 15554,
+ 15558,
+ 15561,
+ 15564,
+ 15568,
+ 15571,
+ 15574,
+ 15578,
+ 15581,
+ 15584,
+ 15588,
+ 15591,
+ 15594,
+ 15598,
+ 15601,
+ 15604,
+ 15608,
+ 15611,
+ 15614,
+ 15618,
+ 15621,
+ 15624,
+ 15627,
+ 15631,
+ 15634,
+ 15637,
+ 15641,
+ 15644,
+ 15647,
+ 15651,
+ 15654,
+ 15657,
+ 15661,
+ 15664,
+ 15667,
+ 15671,
+ 15674,
+ 15677,
+ 15681,
+ 15684,
+ 15687,
+ 15691,
+ 15694,
+ 15697,
+ 15701,
+ 15704,
+ 15707,
+ 15711,
+ 15714,
+ 15717,
+ 15720,
+ 15724,
+ 15727,
+ 15730,
+ 15734,
+ 15737,
+ 15740,
+ 15744,
+ 15747,
+ 15750,
+ 15754,
+ 15757,
+ 15760,
+ 15764,
+ 15767,
+ 15770,
+ 15774,
+ 15777,
+ 15780,
+ 15784,
+ 15787,
+ 15790,
+ 15794,
+ 15797,
+ 15800,
+ 15804,
+ 15807,
+ 15810,
+ 15814,
+ 15817,
+ 15820,
+ 15823,
+ 15827,
+ 15830,
+ 15833,
+ 15837,
+ 15840,
+ 15843,
+ 15847,
+ 15850,
+ 15853,
+ 15857,
+ 15860,
+ 15863,
+ 15867,
+ 15870,
+ 15873,
+ 15877,
+ 15880,
+ 15883,
+ 15887,
+ 15890,
+ 15893,
+ 15897,
+ 15900,
+ 15903,
+ 15907,
+ 15910,
+ 15913,
+ 15916,
+ 15920,
+ 15923,
+ 15926,
+ 15930,
+ 15933,
+ 15936,
+ 15940,
+ 15943,
+ 15946,
+ 15950,
+ 15953,
+ 15956,
+ 15960,
+ 15963,
+ 15966,
+ 15970,
+ 15973,
+ 15976,
+ 15980,
+ 15983,
+ 15986,
+ 15990,
+ 15993,
+ 15996,
+ 16000,
+ 16003,
+ 16006,
+ 16009,
+ 16013,
+ 16016,
+ 16019,
+ 16023,
+ 16026,
+ 16029,
+ 16033,
+ 16036,
+ 16039,
+ 16043,
+ 16046,
+ 16049,
+ 16053,
+ 16056,
+ 16059,
+ 16063,
+ 16066,
+ 16069,
+ 16073,
+ 16076,
+ 16079,
+ 16083,
+ 16086,
+ 16089,
+ 16093,
+ 16096,
+ 16099,
+ 16103,
+ 16106,
+ 16109,
+ 16112,
+ 16116,
+ 16119,
+ 16122,
+ 16126,
+ 16129,
+ 16132,
+ 16136,
+ 16139,
+ 16142,
+ 16146,
+ 16149,
+ 16152,
+ 16156,
+ 16159,
+ 16162,
+ 16166,
+ 16169,
+ 16172,
+ 16176,
+ 16179,
+ 16182,
+ 16186,
+ 16189,
+ 16192,
+ 16196,
+ 16199,
+ 16202,
+ 16205,
+ 16209,
+ 16212,
+ 16215,
+ 16219,
+ 16222,
+ 16225,
+ 16229,
+ 16232,
+ 16235,
+ 16239,
+ 16242,
+ 16245,
+ 16249,
+ 16252,
+ 16255,
+ 16259,
+ 16262,
+ 16265,
+ 16269,
+ 16272,
+ 16275,
+ 16279,
+ 16282,
+ 16285,
+ 16289,
+ 16292,
+ 16295,
+ 16299,
+ 16302,
+ 16305,
+ 16308,
+ 16312,
+ 16315,
+ 16318,
+ 16322,
+ 16325,
+ 16328,
+ 16332,
+ 16335,
+ 16338,
+ 16342,
+ 16345,
+ 16348,
+ 16352,
+ 16355,
+ 16358,
+ 16362,
+ 16365,
+ 16368,
+ 16372,
+ 16375,
+ 16378,
+ 16382,
+ 16385,
+ 16388,
+ 16392,
+ 16395,
+ 16398,
+ 16401,
+ 16405,
+ 16408,
+ 16411,
+ 16415,
+ 16418,
+ 16421,
+ 16425,
+ 16428,
+ 16431,
+ 16435,
+ 16438,
+ 16441,
+ 16445,
+ 16448,
+ 16451,
+ 16455,
+ 16458,
+ 16461,
+ 16465,
+ 16468,
+ 16471,
+ 16475,
+ 16478,
+ 16481,
+ 16485,
+ 16488,
+ 16491,
+ 16494,
+ 16498,
+ 16501,
+ 16504,
+ 16508,
+ 16511,
+ 16514,
+ 16518,
+ 16521,
+ 16524,
+ 16528,
+ 16531,
+ 16534,
+ 16538,
+ 16541,
+ 16544,
+ 16548,
+ 16551,
+ 16554,
+ 16558,
+ 16561,
+ 16564,
+ 16568,
+ 16571,
+ 16574,
+ 16578,
+ 16581,
+ 16584,
+ 16588,
+ 16591,
+ 16594,
+ 16597,
+ 16601,
+ 16604,
+ 16607,
+ 16611,
+ 16614,
+ 16617,
+ 16621,
+ 16624,
+ 16627,
+ 16631,
+ 16634,
+ 16637,
+ 16641,
+ 16644,
+ 16647,
+ 16651,
+ 16654,
+ 16657,
+ 16661,
+ 16664,
+ 16667,
+ 16671,
+ 16674,
+ 16677,
+ 16681,
+ 16684,
+ 16687,
+ 16690,
+ 16694,
+ 16697,
+ 16700,
+ 16704,
+ 16707,
+ 16710,
+ 16714,
+ 16717,
+ 16720,
+ 16724,
+ 16727,
+ 16730,
+ 16734,
+ 16737,
+ 16740,
+ 16744,
+ 16747,
+ 16750,
+ 16754,
+ 16757,
+ 16760,
+ 16764,
+ 16767,
+ 16770,
+ 16774,
+ 16777,
+ 16780,
+ 16784,
+ 16787,
+ 16790,
+ 16793,
+ 16797,
+ 16800,
+ 16803,
+ 16807,
+ 16810,
+ 16813,
+ 16817,
+ 16820,
+ 16823,
+ 16827,
+ 16830,
+ 16833,
+ 16837,
+ 16840,
+ 16843,
+ 16847,
+ 16850,
+ 16853,
+ 16857,
+ 16860,
+ 16863,
+ 16867,
+ 16870,
+ 16873,
+ 16877,
+ 16880,
+ 16883,
+ 16886,
+ 16890,
+ 16893,
+ 16896,
+ 16900,
+ 16903,
+ 16906,
+ 16910,
+ 16913,
+ 16916,
+ 16920,
+ 16923,
+ 16926,
+ 16930,
+ 16933,
+ 16936,
+ 16940,
+ 16943,
+ 16946,
+ 16950,
+ 16953,
+ 16956,
+ 16960,
+ 16963,
+ 16966,
+ 16970,
+ 16973,
+ 16976,
+ 16980,
+ 16983,
+ 16986,
+ 16989,
+ 16993,
+ 16996,
+ 16999,
+ 17003,
+ 17006,
+ 17009,
+ 17013,
+ 17016,
+ 17019,
+ 17023,
+ 17026,
+ 17029,
+ 17033,
+ 17036,
+ 17039,
+ 17043,
+ 17046,
+ 17049,
+ 17053,
+ 17056,
+ 17059,
+ 17063,
+ 17066,
+ 17069,
+ 17073,
+ 17076,
+ 17079,
+ 17082,
+ 17086,
+ 17089,
+ 17092,
+ 17096,
+ 17099,
+ 17102,
+ 17106,
+ 17109,
+ 17112,
+ 17116,
+ 17119,
+ 17122,
+ 17126,
+ 17129,
+ 17132,
+ 17136,
+ 17139,
+ 17142,
+ 17146,
+ 17149,
+ 17152,
+ 17156,
+ 17159,
+ 17162,
+ 17166,
+ 17169,
+ 17172,
+ 17175,
+ 17179,
+ 17182,
+ 17185,
+ 17189,
+ 17192,
+ 17195,
+ 17199,
+ 17202,
+ 17205,
+ 17209,
+ 17212,
+ 17215,
+ 17219,
+ 17222,
+ 17225,
+ 17229,
+ 17232,
+ 17235,
+ 17239,
+ 17242,
+ 17245,
+ 17249,
+ 17252,
+ 17255,
+ 17259,
+ 17262,
+ 17265,
+ 17269,
+ 17272,
+ 17275,
+ 17278,
+ 17282,
+ 17285,
+ 17288,
+ 17292,
+ 17295,
+ 17298,
+ 17302,
+ 17305,
+ 17308,
+ 17312,
+ 17315,
+ 17318,
+ 17322,
+ 17325,
+ 17328,
+ 17332,
+ 17335,
+ 17338,
+ 17342,
+ 17345,
+ 17348,
+ 17352,
+ 17355,
+ 17358,
+ 17362,
+ 17365,
+ 17368,
+ 17371,
+ 17375,
+ 17378,
+ 17381,
+ 17385,
+ 17388,
+ 17391,
+ 17395,
+ 17398,
+ 17401,
+ 17405,
+ 17408,
+ 17411,
+ 17415,
+ 17418,
+ 17421,
+ 17425,
+ 17428,
+ 17431,
+ 17435,
+ 17438,
+ 17441,
+ 17445,
+ 17448,
+ 17451,
+ 17455,
+ 17458,
+ 17461,
+ 17465,
+ 17468,
+ 17471,
+ 17474,
+ 17478,
+ 17481,
+ 17484,
+ 17488,
+ 17491,
+ 17494,
+ 17498,
+ 17501,
+ 17504,
+ 17508,
+ 17511,
+ 17514,
+ 17518,
+ 17521,
+ 17524,
+ 17528,
+ 17531,
+ 17534,
+ 17538,
+ 17541,
+ 17544,
+ 17548,
+ 17551,
+ 17554,
+ 17558,
+ 17561,
+ 17564,
+ 17567,
+ 17571,
+ 17574,
+ 17577,
+ 17581,
+ 17584,
+ 17587,
+ 17591,
+ 17594,
+ 17597,
+ 17601,
+ 17604,
+ 17607,
+ 17611,
+ 17614,
+ 17617,
+ 17621,
+ 17624,
+ 17627,
+ 17631,
+ 17634,
+ 17637,
+ 17641,
+ 17644,
+ 17647,
+ 17651,
+ 17654,
+ 17657,
+ 17660,
+ 17664,
+ 17667,
+ 17670,
+ 17674,
+ 17677,
+ 17680,
+ 17684,
+ 17687,
+ 17690,
+ 17694,
+ 17697,
+ 17700,
+ 17704,
+ 17707,
+ 17710,
+ 17714,
+ 17717,
+ 17720,
+ 17724,
+ 17727,
+ 17730,
+ 17734,
+ 17737,
+ 17740,
+ 17744,
+ 17747,
+ 17750,
+ 17754,
+ 17757,
+ 17760,
+ 17763,
+ 17767,
+ 17770,
+ 17773,
+ 17777,
+ 17780,
+ 17783,
+ 17787,
+ 17790,
+ 17793,
+ 17797,
+ 17800,
+ 17803,
+ 17807,
+ 17810,
+ 17813,
+ 17817,
+ 17820,
+ 17823,
+ 17827,
+ 17830,
+ 17833,
+ 17837,
+ 17840,
+ 17843,
+ 17847,
+ 17850,
+ 17853,
+ 17856,
+ 17860,
+ 17863,
+ 17866,
+ 17870,
+ 17873,
+ 17876,
+ 17880,
+ 17883,
+ 17886,
+ 17890,
+ 17893,
+ 17896,
+ 17900,
+ 17903,
+ 17906,
+ 17910,
+ 17913,
+ 17916,
+ 17920,
+ 17923,
+ 17926,
+ 17930,
+ 17933,
+ 17936,
+ 17940,
+ 17943,
+ 17946,
+ 17950,
+ 17953,
+ 17956,
+ 17959,
+ 17963,
+ 17966,
+ 17969,
+ 17973,
+ 17976,
+ 17979,
+ 17983,
+ 17986,
+ 17989,
+ 17993,
+ 17996,
+ 17999,
+ 18003,
+ 18006,
+ 18009,
+ 18013,
+ 18016,
+ 18019,
+ 18023,
+ 18026,
+ 18029,
+ 18033,
+ 18036,
+ 18039,
+ 18043,
+ 18046,
+ 18049,
+ 18052,
+ 18056,
+ 18059,
+ 18062,
+ 18066,
+ 18069,
+ 18072,
+ 18076,
+ 18079,
+ 18082,
+ 18086,
+ 18089,
+ 18092,
+ 18096,
+ 18099,
+ 18102,
+ 18106,
+ 18109,
+ 18112,
+ 18116,
+ 18119,
+ 18122,
+ 18126,
+ 18129,
+ 18132,
+ 18136,
+ 18139,
+ 18142,
+ 18145,
+ 18149,
+ 18152,
+ 18155,
+ 18159,
+ 18162,
+ 18165,
+ 18169,
+ 18172,
+ 18175,
+ 18179,
+ 18182,
+ 18185,
+ 18189,
+ 18192,
+ 18195,
+ 18199,
+ 18202,
+ 18205,
+ 18209,
+ 18212,
+ 18215,
+ 18219,
+ 18222,
+ 18225,
+ 18229,
+ 18232,
+ 18235,
+ 18239,
+ 18242,
+ 18245,
+ 18248,
+ 18252,
+ 18255,
+ 18258,
+ 18262,
+ 18265,
+ 18268,
+ 18272,
+ 18275,
+ 18278,
+ 18282,
+ 18285,
+ 18288,
+ 18292,
+ 18295,
+ 18298,
+ 18302,
+ 18305,
+ 18308,
+ 18312,
+ 18315,
+ 18318,
+ 18322,
+ 18325,
+ 18328,
+ 18332,
+ 18335,
+ 18338,
+ 18341,
+ 18345,
+ 18348,
+ 18351,
+ 18355,
+ 18358,
+ 18361,
+ 18365,
+ 18368,
+ 18371,
+ 18375,
+ 18378,
+ 18381,
+ 18385,
+ 18388,
+ 18391,
+ 18395,
+ 18398,
+ 18401,
+ 18405,
+ 18408,
+ 18411,
+ 18415,
+ 18418,
+ 18421,
+ 18425,
+ 18428,
+ 18431,
+ 18435,
+ 18438,
+ 18441,
+ 18444,
+ 18448,
+ 18451,
+ 18454,
+ 18458,
+ 18461,
+ 18464,
+ 18468,
+ 18471,
+ 18474,
+ 18478,
+ 18481,
+ 18484,
+ 18488,
+ 18491,
+ 18494,
+ 18498,
+ 18501,
+ 18504,
+ 18508,
+ 18511,
+ 18514,
+ 18518,
+ 18521,
+ 18524,
+ 18528,
+ 18531,
+ 18534,
+ 18537,
+ 18541,
+ 18544,
+ 18547,
+ 18551,
+ 18554,
+ 18557,
+ 18561,
+ 18564,
+ 18567,
+ 18571,
+ 18574,
+ 18577,
+ 18581,
+ 18584,
+ 18587,
+ 18591,
+ 18594,
+ 18597,
+ 18601,
+ 18604,
+ 18607,
+ 18611,
+ 18614,
+ 18617,
+ 18621,
+ 18624,
+ 18627,
+ 18630,
+ 18634,
+ 18637,
+ 18640,
+ 18644,
+ 18647,
+ 18650,
+ 18654,
+ 18657,
+ 18660,
+ 18664,
+ 18667,
+ 18670,
+ 18674,
+ 18677,
+ 18680,
+ 18684,
+ 18687,
+ 18690,
+ 18694,
+ 18697,
+ 18700,
+ 18704,
+ 18707,
+ 18710,
+ 18714,
+ 18717,
+ 18720,
+ 18724,
+ 18727,
+ 18730,
+ 18733,
+ 18737,
+ 18740,
+ 18743,
+ 18747,
+ 18750,
+ 18753,
+ 18757,
+ 18760,
+ 18763,
+ 18767,
+ 18770,
+ 18773,
+ 18777,
+ 18780,
+ 18783,
+ 18787,
+ 18790,
+ 18793,
+ 18797,
+ 18800,
+ 18803,
+ 18807,
+ 18810,
+ 18813,
+ 18817,
+ 18820,
+ 18823,
+ 18826,
+ 18830,
+ 18833,
+ 18836,
+ 18840,
+ 18843,
+ 18846,
+ 18850,
+ 18853,
+ 18856,
+ 18860,
+ 18863,
+ 18866,
+ 18870,
+ 18873,
+ 18876,
+ 18880,
+ 18883,
+ 18886,
+ 18890,
+ 18893,
+ 18896,
+ 18900,
+ 18903,
+ 18906,
+ 18910,
+ 18913,
+ 18916,
+ 18920,
+ 18923,
+ 18926,
+ 18929,
+ 18933,
+ 18936,
+ 18939,
+ 18943,
+ 18946,
+ 18949,
+ 18953,
+ 18956,
+ 18959,
+ 18963,
+ 18966,
+ 18969,
+ 18973,
+ 18976,
+ 18979,
+ 18983,
+ 18986,
+ 18989,
+ 18993,
+ 18996,
+ 18999,
+ 19003,
+ 19006,
+ 19009,
+ 19013,
+ 19016,
+ 19019,
+ 19022,
+ 19026,
+ 19029,
+ 19032,
+ 19036,
+ 19039,
+ 19042,
+ 19046,
+ 19049,
+ 19052,
+ 19056,
+ 19059,
+ 19062,
+ 19066,
+ 19069,
+ 19072,
+ 19076,
+ 19079,
+ 19082,
+ 19086,
+ 19089,
+ 19092,
+ 19096,
+ 19099,
+ 19102,
+ 19106,
+ 19109,
+ 19112,
+ 19116,
+ 19119,
+ 19122,
+ 19125,
+ 19129,
+ 19132,
+ 19135,
+ 19139,
+ 19142,
+ 19145,
+ 19149,
+ 19152,
+ 19155,
+ 19159,
+ 19162,
+ 19165,
+ 19169,
+ 19172,
+ 19175,
+ 19179,
+ 19182,
+ 19185,
+ 19189,
+ 19192,
+ 19195,
+ 19199,
+ 19202,
+ 19205,
+ 19209,
+ 19212,
+ 19215,
+ 19218,
+ 19222,
+ 19225,
+ 19228,
+ 19232,
+ 19235,
+ 19238,
+ 19242,
+ 19245,
+ 19248,
+ 19252,
+ 19255,
+ 19258,
+ 19262,
+ 19265,
+ 19268,
+ 19272,
+ 19275,
+ 19278,
+ 19282,
+ 19285,
+ 19288,
+ 19292,
+ 19295,
+ 19298,
+ 19302,
+ 19305,
+ 19308,
+ 19311,
+ 19315,
+ 19318,
+ 19321,
+ 19325,
+ 19328,
+ 19331,
+ 19335,
+ 19338,
+ 19341,
+ 19345,
+ 19348,
+ 19351,
+ 19355,
+ 19358,
+ 19361,
+ 19365,
+ 19368,
+ 19371,
+ 19375,
+ 19378,
+ 19381,
+ 19385,
+ 19388,
+ 19391,
+ 19395,
+ 19398,
+ 19401,
+ 19405,
+ 19408,
+ 19411,
+ 19414,
+ 19418,
+ 19421,
+ 19424,
+ 19428,
+ 19431,
+ 19434,
+ 19438,
+ 19441,
+ 19444,
+ 19448,
+ 19451,
+ 19454,
+ 19458,
+ 19461,
+ 19464,
+ 19468,
+ 19471,
+ 19474,
+ 19478,
+ 19481,
+ 19484,
+ 19488,
+ 19491,
+ 19494,
+ 19498,
+ 19501,
+ 19504,
+ 19507,
+ 19511,
+ 19514,
+ 19517,
+ 19521,
+ 19524,
+ 19527,
+ 19531,
+ 19534,
+ 19537,
+ 19541,
+ 19544,
+ 19547,
+ 19551,
+ 19554,
+ 19557,
+ 19561,
+ 19564,
+ 19567,
+ 19571,
+ 19574,
+ 19577,
+ 19581,
+ 19584,
+ 19587,
+ 19591,
+ 19594,
+ 19597,
+ 19601,
+ 19604,
+ 19607,
+ 19610,
+ 19614,
+ 19617,
+ 19620,
+ 19624,
+ 19627,
+ 19630,
+ 19634,
+ 19637,
+ 19640,
+ 19644,
+ 19647,
+ 19650,
+ 19654,
+ 19657,
+ 19660,
+ 19664,
+ 19667,
+ 19670,
+ 19674,
+ 19677,
+ 19680,
+ 19684,
+ 19687,
+ 19690,
+ 19694,
+ 19697,
+ 19700,
+ 19703,
+ 19707,
+ 19710,
+ 19713,
+ 19717,
+ 19720,
+ 19723,
+ 19727,
+ 19730,
+ 19733,
+ 19737,
+ 19740,
+ 19743,
+ 19747,
+ 19750,
+ 19753,
+ 19757,
+ 19760,
+ 19763,
+ 19767,
+ 19770,
+ 19773,
+ 19777,
+ 19780,
+ 19783,
+ 19787,
+ 19790,
+ 19793,
+ 19796,
+ 19800,
+ 19803,
+ 19806,
+ 19810,
+ 19813,
+ 19816,
+ 19820,
+ 19823,
+ 19826,
+ 19830,
+ 19833,
+ 19836,
+ 19840,
+ 19843,
+ 19846,
+ 19850,
+ 19853,
+ 19856,
+ 19860,
+ 19863,
+ 19866,
+ 19870,
+ 19873,
+ 19876,
+ 19880,
+ 19883,
+ 19886,
+ 19890,
+ 19893,
+ 19896,
+ 19899,
+ 19903,
+ 19906,
+ 19909,
+ 19913,
+ 19916,
+ 19919,
+ 19923,
+ 19926,
+ 19929,
+ 19933,
+ 19936,
+ 19939,
+ 19943,
+ 19946,
+ 19949,
+ 19953,
+ 19956,
+ 19959,
+ 19963,
+ 19966,
+ 19969,
+ 19973,
+ 19976,
+ 19979,
+ 19983,
+ 19986,
+ 19989,
+ 19992,
+ 19996,
+ 19999,
+ 20002,
+ 20006,
+ 20009,
+ 20012,
+ 20016,
+ 20019,
+ 20022,
+ 20026,
+ 20029,
+ 20032,
+ 20036,
+ 20039,
+ 20042,
+ 20046,
+ 20049,
+ 20052,
+ 20056,
+ 20059,
+ 20062,
+ 20066,
+ 20069,
+ 20072,
+ 20076,
+ 20079,
+ 20082,
+ 20086,
+ 20089,
+ 20092,
+ 20095,
+ 20099,
+ 20102,
+ 20105,
+ 20109,
+ 20112,
+ 20115,
+ 20119,
+ 20122,
+ 20125,
+ 20129,
+ 20132,
+ 20135,
+ 20139,
+ 20142,
+ 20145,
+ 20149,
+ 20152,
+ 20155,
+ 20159,
+ 20162,
+ 20165,
+ 20169,
+ 20172,
+ 20175,
+ 20179,
+ 20182,
+ 20185,
+ 20188,
+ 20192,
+ 20195,
+ 20198,
+ 20202,
+ 20205,
+ 20208,
+ 20212,
+ 20215,
+ 20218,
+ 20222,
+ 20225,
+ 20228,
+ 20232,
+ 20235,
+ 20238,
+ 20242,
+ 20245,
+ 20248,
+ 20252,
+ 20255,
+ 20258,
+ 20262,
+ 20265,
+ 20268,
+ 20272,
+ 20275,
+ 20278,
+ 20281,
+ 20285,
+ 20288,
+ 20291,
+ 20295,
+ 20298,
+ 20301,
+ 20305,
+ 20308,
+ 20311,
+ 20315,
+ 20318,
+ 20321,
+ 20325,
+ 20328,
+ 20331,
+ 20335,
+ 20338,
+ 20341,
+ 20345,
+ 20348,
+ 20351,
+ 20355,
+ 20358,
+ 20361,
+ 20365,
+ 20368,
+ 20371,
+ 20375,
+ 20378,
+ 20381,
+ 20384,
+ 20388,
+ 20391,
+ 20394,
+ 20398,
+ 20401,
+ 20404,
+ 20408,
+ 20411,
+ 20414,
+ 20418,
+ 20421,
+ 20424,
+ 20428,
+ 20431,
+ 20434,
+ 20438,
+ 20441,
+ 20444,
+ 20448,
+ 20451,
+ 20454,
+ 20458,
+ 20461,
+ 20464,
+ 20468,
+ 20471,
+ 20474,
+ 20477,
+ 20481,
+ 20484,
+ 20487,
+ 20491,
+ 20494,
+ 20497,
+ 20501,
+ 20504,
+ 20507,
+ 20511,
+ 20514,
+ 20517,
+ 20521,
+ 20524,
+ 20527,
+ 20531,
+ 20534,
+ 20537,
+ 20541,
+ 20544,
+ 20547,
+ 20551,
+ 20554,
+ 20557,
+ 20561,
+ 20564,
+ 20567,
+ 20571,
+ 20574,
+ 20577,
+ 20580,
+ 20584,
+ 20587,
+ 20590,
+ 20594,
+ 20597,
+ 20600,
+ 20604,
+ 20607,
+ 20610,
+ 20614,
+ 20617,
+ 20620,
+ 20624,
+ 20627,
+ 20630,
+ 20634,
+ 20637,
+ 20640,
+ 20644,
+ 20647,
+ 20650,
+ 20654,
+ 20657,
+ 20660,
+ 20664,
+ 20667,
+ 20670,
+ 20673,
+ 20677,
+ 20680,
+ 20683,
+ 20687,
+ 20690,
+ 20693,
+ 20697,
+ 20700,
+ 20703,
+ 20707,
+ 20710,
+ 20713,
+ 20717,
+ 20720,
+ 20723,
+ 20727,
+ 20730,
+ 20733,
+ 20737,
+ 20740,
+ 20743,
+ 20747,
+ 20750,
+ 20753,
+ 20757,
+ 20760,
+ 20763,
+ 20766,
+ 20770,
+ 20773,
+ 20776,
+ 20780,
+ 20783,
+ 20786,
+ 20790,
+ 20793,
+ 20796,
+ 20800,
+ 20803,
+ 20806,
+ 20810,
+ 20813,
+ 20816,
+ 20820,
+ 20823,
+ 20826,
+ 20830,
+ 20833,
+ 20836,
+ 20840,
+ 20843,
+ 20846,
+ 20850,
+ 20853,
+ 20856,
+ 20860,
+ 20863,
+ 20866,
+ 20869,
+ 20873,
+ 20876,
+ 20879,
+ 20883,
+ 20886,
+ 20889,
+ 20893,
+ 20896,
+ 20899,
+ 20903,
+ 20906,
+ 20909,
+ 20913,
+ 20916,
+ 20919,
+ 20923,
+ 20926,
+ 20929,
+ 20933,
+ 20936,
+ 20939,
+ 20943,
+ 20946,
+ 20949,
+ 20953,
+ 20956,
+ 20959,
+ 20962,
+ 20966,
+ 20969,
+ 20972,
+ 20976,
+ 20979,
+ 20982,
+ 20986,
+ 20989,
+ 20992,
+ 20996,
+ 20999,
+ 21002,
+ 21006,
+ 21009,
+ 21012,
+ 21016,
+ 21019,
+ 21022,
+ 21026,
+ 21029,
+ 21032,
+ 21036,
+ 21039,
+ 21042,
+ 21046,
+ 21049,
+ 21052,
+ 21056,
+ 21059,
+ 21062,
+ 21065,
+ 21069,
+ 21072,
+ 21075,
+ 21079,
+ 21082,
+ 21085,
+ 21089,
+ 21092,
+ 21095,
+ 21099,
+ 21102,
+ 21105,
+ 21109,
+ 21112,
+ 21115,
+ 21119,
+ 21122,
+ 21125,
+ 21129,
+ 21132,
+ 21135,
+ 21139,
+ 21142,
+ 21145,
+ 21149,
+ 21152,
+ 21155,
+ 21158,
+ 21162,
+ 21165,
+ 21168,
+ 21172,
+ 21175,
+ 21178,
+ 21182,
+ 21185,
+ 21188,
+ 21192,
+ 21195,
+ 21198,
+ 21202,
+ 21205,
+ 21208,
+ 21212,
+ 21215,
+ 21218,
+ 21222,
+ 21225,
+ 21228,
+ 21232,
+ 21235,
+ 21238,
+ 21242,
+ 21245,
+ 21248,
+ 21252,
+ 21255,
+ 21258,
+ 21261,
+ 21265,
+ 21268,
+ 21271,
+ 21275,
+ 21278,
+ 21281,
+ 21285,
+ 21288,
+ 21291,
+ 21295,
+ 21298,
+ 21301,
+ 21305,
+ 21308,
+ 21311,
+ 21315,
+ 21318,
+ 21321,
+ 21325,
+ 21328,
+ 21331,
+ 21335,
+ 21338,
+ 21341,
+ 21345,
+ 21348,
+ 21351,
+ 21354,
+ 21358,
+ 21361,
+ 21364,
+ 21368,
+ 21371,
+ 21374,
+ 21378,
+ 21381,
+ 21384,
+ 21388,
+ 21391,
+ 21394,
+ 21398,
+ 21401,
+ 21404,
+ 21408,
+ 21411,
+ 21414,
+ 21418,
+ 21421,
+ 21424,
+ 21428,
+ 21431,
+ 21434,
+ 21438,
+ 21441,
+ 21444,
+ 21447,
+ 21451,
+ 21454,
+ 21457,
+ 21461,
+ 21464,
+ 21467,
+ 21471,
+ 21474,
+ 21477,
+ 21481,
+ 21484,
+ 21487,
+ 21491,
+ 21494,
+ 21497,
+ 21501,
+ 21504,
+ 21507,
+ 21511,
+ 21514,
+ 21517,
+ 21521,
+ 21524,
+ 21527,
+ 21531,
+ 21534,
+ 21537,
+ 21541,
+ 21544,
+ 21547,
+ 21550,
+ 21554,
+ 21557,
+ 21560,
+ 21564,
+ 21567,
+ 21570,
+ 21574,
+ 21577,
+ 21580,
+ 21584,
+ 21587,
+ 21590,
+ 21594,
+ 21597,
+ 21600,
+ 21604,
+ 21607,
+ 21610,
+ 21614,
+ 21617,
+ 21620,
+ 21624,
+ 21627,
+ 21630,
+ 21634,
+ 21637,
+ 21640,
+ 21643,
+ 21647,
+ 21650,
+ 21653,
+ 21657,
+ 21660,
+ 21663,
+ 21667,
+ 21670,
+ 21673,
+ 21677,
+ 21680,
+ 21683,
+ 21687,
+ 21690,
+ 21693,
+ 21697,
+ 21700,
+ 21703,
+ 21707,
+ 21710,
+ 21713,
+ 21717,
+ 21720,
+ 21723,
+ 21727,
+ 21730,
+ 21733,
+ 21737,
+ 21740,
+ 21743,
+ 21746,
+ 21750,
+ 21753,
+ 21756,
+ 21760,
+ 21763,
+ 21766,
+ 21770,
+ 21773,
+ 21776,
+ 21780,
+ 21783,
+ 21786,
+ 21790,
+ 21793,
+ 21796,
+ 21800,
+ 21803,
+ 21806,
+ 21810,
+ 21813,
+ 21816,
+ 21820,
+ 21823,
+ 21826,
+ 21830,
+ 21833,
+ 21836,
+ 21839,
+ 21843,
+ 21846,
+ 21849,
+ 21853,
+ 21856,
+ 21859,
+ 21863,
+ 21866,
+ 21869,
+ 21873,
+ 21876,
+ 21879,
+ 21883,
+ 21886,
+ 21889,
+ 21893,
+ 21896,
+ 21899,
+ 21903,
+ 21906,
+ 21909,
+ 21913,
+ 21916,
+ 21919,
+ 21923,
+ 21926,
+ 21929,
+ 21932,
+ 21936,
+ 21939,
+ 21942,
+ 21946,
+ 21949,
+ 21952,
+ 21956,
+ 21959,
+ 21962,
+ 21966,
+ 21969,
+ 21972,
+ 21976,
+ 21979,
+ 21982,
+ 21986,
+ 21989,
+ 21992,
+ 21996,
+ 21999,
+ 22002,
+ 22006,
+ 22009,
+ 22012,
+ 22016,
+ 22019,
+ 22022,
+ 22026,
+ 22029,
+ 22032,
+ 22035,
+ 22039,
+ 22042,
+ 22045,
+ 22049,
+ 22052,
+ 22055,
+ 22059,
+ 22062,
+ 22065,
+ 22069,
+ 22072,
+ 22075,
+ 22079,
+ 22082,
+ 22085,
+ 22089,
+ 22092,
+ 22095,
+ 22099,
+ 22102,
+ 22105,
+ 22109,
+ 22112,
+ 22115,
+ 22119,
+ 22122,
+ 22125,
+ 22128,
+ 22132,
+ 22135,
+ 22138,
+ 22142,
+ 22145,
+ 22148,
+ 22152,
+ 22155,
+ 22158,
+ 22162,
+ 22165,
+ 22168,
+ 22172,
+ 22175,
+ 22178,
+ 22182,
+ 22185,
+ 22188,
+ 22192,
+ 22195,
+ 22198,
+ 22202,
+ 22205,
+ 22208,
+ 22212,
+ 22215,
+ 22218,
+ 22222,
+ 22225,
+ 22228,
+ 22231,
+ 22235,
+ 22238,
+ 22241,
+ 22245,
+ 22248,
+ 22251,
+ 22255,
+ 22258,
+ 22261,
+ 22265,
+ 22268,
+ 22271,
+ 22275,
+ 22278,
+ 22281,
+ 22285,
+ 22288,
+ 22291,
+ 22295,
+ 22298,
+ 22301,
+ 22305,
+ 22308,
+ 22311,
+ 22315,
+ 22318,
+ 22321,
+ 22324,
+ 22328,
+ 22331,
+ 22334,
+ 22338,
+ 22341,
+ 22344,
+ 22348,
+ 22351,
+ 22354,
+ 22358,
+ 22361,
+ 22364,
+ 22368,
+ 22371,
+ 22374,
+ 22378,
+ 22381,
+ 22384,
+ 22388,
+ 22391,
+ 22394,
+ 22398,
+ 22401,
+ 22404,
+ 22408,
+ 22411,
+ 22414,
+ 22417,
+ 22421,
+ 22424,
+ 22427,
+ 22431,
+ 22434,
+ 22437,
+ 22441,
+ 22444,
+ 22447,
+ 22451,
+ 22454,
+ 22457,
+ 22461,
+ 22464,
+ 22467,
+ 22471,
+ 22474,
+ 22477,
+ 22481,
+ 22484,
+ 22487,
+ 22491,
+ 22494,
+ 22497,
+ 22501,
+ 22504,
+ 22507,
+ 22511,
+ 22514,
+ 22517,
+ 22520,
+ 22524,
+ 22527,
+ 22530,
+ 22534,
+ 22537,
+ 22540,
+ 22544,
+ 22547,
+ 22550,
+ 22554,
+ 22557,
+ 22560,
+ 22564,
+ 22567,
+ 22570,
+ 22574,
+ 22577,
+ 22580,
+ 22584,
+ 22587,
+ 22590,
+ 22594,
+ 22597,
+ 22600,
+ 22604,
+ 22607,
+ 22610,
+ 22613,
+ 22617,
+ 22620,
+ 22623,
+ 22627,
+ 22630,
+ 22633,
+ 22637,
+ 22640,
+ 22643,
+ 22647,
+ 22650,
+ 22653,
+ 22657,
+ 22660,
+ 22663,
+ 22667,
+ 22670,
+ 22673,
+ 22677,
+ 22680,
+ 22683,
+ 22687,
+ 22690,
+ 22693,
+ 22697,
+ 22700,
+ 22703,
+ 22707,
+ 22710,
+ 22713,
+ 22716,
+ 22720,
+ 22723,
+ 22726,
+ 22730,
+ 22733,
+ 22736,
+ 22740,
+ 22743,
+ 22746,
+ 22750,
+ 22753,
+ 22756,
+ 22760,
+ 22763,
+ 22766,
+ 22770,
+ 22773,
+ 22776,
+ 22780,
+ 22783,
+ 22786,
+ 22790,
+ 22793,
+ 22796,
+ 22800,
+ 22803,
+ 22806,
+ 22809,
+ 22813,
+ 22816,
+ 22819,
+ 22823,
+ 22826,
+ 22829,
+ 22833,
+ 22836,
+ 22839,
+ 22843,
+ 22846,
+ 22849,
+ 22853,
+ 22856,
+ 22859,
+ 22863,
+ 22866,
+ 22869,
+ 22873,
+ 22876,
+ 22879,
+ 22883,
+ 22886,
+ 22889,
+ 22893,
+ 22896,
+ 22899,
+ 22902,
+ 22906,
+ 22909,
+ 22912,
+ 22916,
+ 22919,
+ 22922,
+ 22926,
+ 22929,
+ 22932,
+ 22936,
+ 22939,
+ 22942,
+ 22946,
+ 22949,
+ 22952,
+ 22956,
+ 22959,
+ 22962,
+ 22966,
+ 22969,
+ 22972,
+ 22976,
+ 22979,
+ 22982,
+ 22986,
+ 22989,
+ 22992,
+ 22996,
+ 22999,
+ 23002,
+ 23005,
+ 23009,
+ 23012,
+ 23015,
+ 23019,
+ 23022,
+ 23025,
+ 23029,
+ 23032,
+ 23035,
+ 23039,
+ 23042,
+ 23045,
+ 23049,
+ 23052,
+ 23055,
+ 23059,
+ 23062,
+ 23065,
+ 23069,
+ 23072,
+ 23075,
+ 23079,
+ 23082,
+ 23085,
+ 23089,
+ 23092,
+ 23095,
+ 23098,
+ 23102,
+ 23105,
+ 23108,
+ 23112,
+ 23115,
+ 23118,
+ 23122,
+ 23125,
+ 23128,
+ 23132,
+ 23135,
+ 23138,
+ 23142,
+ 23145,
+ 23148,
+ 23152,
+ 23155,
+ 23158,
+ 23162,
+ 23165,
+ 23168,
+ 23172,
+ 23175,
+ 23178,
+ 23182,
+ 23185,
+ 23188,
+ 23192,
+ 23195,
+ 23198,
+ 23201,
+ 23205,
+ 23208,
+ 23211,
+ 23215,
+ 23218,
+ 23221,
+ 23225,
+ 23228,
+ 23231,
+ 23235,
+ 23238,
+ 23241,
+ 23245,
+ 23248,
+ 23251,
+ 23255,
+ 23258,
+ 23261,
+ 23265,
+ 23268,
+ 23271,
+ 23275,
+ 23278,
+ 23281,
+ 23285,
+ 23288,
+ 23291,
+ 23294,
+ 23298,
+ 23301,
+ 23304,
+ 23308,
+ 23311,
+ 23314,
+ 23318,
+ 23321,
+ 23324,
+ 23328,
+ 23331,
+ 23334,
+ 23338,
+ 23341,
+ 23344,
+ 23348,
+ 23351,
+ 23354,
+ 23358,
+ 23361,
+ 23364,
+ 23368,
+ 23371,
+ 23374,
+ 23378,
+ 23381,
+ 23384,
+ 23388,
+ 23391,
+ 23394,
+ 23397,
+ 23401,
+ 23404,
+ 23407,
+ 23411,
+ 23414,
+ 23417,
+ 23421,
+ 23424,
+ 23427,
+ 23431,
+ 23434,
+ 23437,
+ 23441,
+ 23444,
+ 23447,
+ 23451,
+ 23454,
+ 23457,
+ 23461,
+ 23464,
+ 23467,
+ 23471,
+ 23474,
+ 23477,
+ 23481,
+ 23484,
+ 23487,
+ 23490,
+ 23494,
+ 23497,
+ 23500,
+ 23504,
+ 23507,
+ 23510,
+ 23514,
+ 23517,
+ 23520,
+ 23524,
+ 23527,
+ 23530,
+ 23534,
+ 23537,
+ 23540,
+ 23544,
+ 23547,
+ 23550,
+ 23554,
+ 23557,
+ 23560,
+ 23564,
+ 23567,
+ 23570,
+ 23574,
+ 23577,
+ 23580,
+ 23583,
+ 23587,
+ 23590,
+ 23593,
+ 23597,
+ 23600,
+ 23603,
+ 23607,
+ 23610,
+ 23613,
+ 23617,
+ 23620,
+ 23623,
+ 23627,
+ 23630,
+ 23633,
+ 23637,
+ 23640,
+ 23643,
+ 23647,
+ 23650,
+ 23653,
+ 23657,
+ 23660,
+ 23663,
+ 23667,
+ 23670,
+ 23673,
+ 23677,
+ 23680,
+ 23683,
+ 23686,
+ 23690,
+ 23693,
+ 23696,
+ 23700,
+ 23703,
+ 23706,
+ 23710,
+ 23713,
+ 23716,
+ 23720,
+ 23723,
+ 23726,
+ 23730,
+ 23733,
+ 23736,
+ 23740,
+ 23743,
+ 23746,
+ 23750,
+ 23753,
+ 23756,
+ 23760,
+ 23763,
+ 23766,
+ 23770,
+ 23773,
+ 23776,
+ 23779,
+ 23783,
+ 23786,
+ 23789,
+ 23793,
+ 23796,
+ 23799,
+ 23803,
+ 23806,
+ 23809,
+ 23813,
+ 23816,
+ 23819,
+ 23823,
+ 23826,
+ 23829,
+ 23833,
+ 23836,
+ 23839,
+ 23843,
+ 23846,
+ 23849,
+ 23853,
+ 23856,
+ 23859,
+ 23863,
+ 23866,
+ 23869,
+ 23873,
+ 23876,
+ 23879,
+ 23882,
+ 23886,
+ 23889,
+ 23892,
+ 23896,
+ 23899,
+ 23902,
+ 23906,
+ 23909,
+ 23912,
+ 23916,
+ 23919,
+ 23922,
+ 23926,
+ 23929,
+ 23932,
+ 23936,
+ 23939,
+ 23942,
+ 23946,
+ 23949,
+ 23952,
+ 23956,
+ 23959,
+ 23962,
+ 23966,
+ 23969,
+ 23972,
+ 23975,
+ 23979,
+ 23982,
+ 23985,
+ 23989,
+ 23992,
+ 23995,
+ 23999,
+ 24002,
+ 24005,
+ 24009,
+ 24012,
+ 24015,
+ 24019,
+ 24022,
+ 24025,
+ 24029,
+ 24032,
+ 24035,
+ 24039,
+ 24042,
+ 24045,
+ 24049,
+ 24052,
+ 24055,
+ 24059,
+ 24062,
+ 24065,
+ 24068,
+ 24072,
+ 24075,
+ 24078,
+ 24082,
+ 24085,
+ 24088,
+ 24092,
+ 24095,
+ 24098,
+ 24102,
+ 24105,
+ 24108,
+ 24112,
+ 24115,
+ 24118,
+ 24122,
+ 24125,
+ 24128,
+ 24132,
+ 24135,
+ 24138,
+ 24142,
+ 24145,
+ 24148,
+ 24152,
+ 24155,
+ 24158,
+ 24162,
+ 24165,
+ 24168,
+ 24171,
+ 24175,
+ 24178,
+ 24181,
+ 24185,
+ 24188,
+ 24191,
+ 24195,
+ 24198,
+ 24201,
+ 24205,
+ 24208,
+ 24211,
+ 24215,
+ 24218,
+ 24221,
+ 24225,
+ 24228,
+ 24231,
+ 24235,
+ 24238,
+ 24241,
+ 24245,
+ 24248,
+ 24251,
+ 24255,
+ 24258,
+ 24261,
+ 24264,
+ 24268,
+ 24271,
+ 24274,
+ 24278,
+ 24281,
+ 24284,
+ 24288,
+ 24291,
+ 24294,
+ 24298,
+ 24301,
+ 24304,
+ 24308,
+ 24311,
+ 24314,
+ 24318,
+ 24321,
+ 24324,
+ 24328,
+ 24331,
+ 24334,
+ 24338,
+ 24341,
+ 24344,
+ 24348,
+ 24351,
+ 24354,
+ 24358,
+ 24361,
+ 24364,
+ 24367,
+ 24371,
+ 24374,
+ 24377,
+ 24381,
+ 24384,
+ 24387,
+ 24391,
+ 24394,
+ 24397,
+ 24401,
+ 24404,
+ 24407,
+ 24411,
+ 24414,
+ 24417,
+ 24421,
+ 24424,
+ 24427,
+ 24431,
+ 24434,
+ 24437,
+ 24441,
+ 24444,
+ 24447,
+ 24451,
+ 24454,
+ 24457,
+ 24460,
+ 24464,
+ 24467,
+ 24470,
+ 24474,
+ 24477,
+ 24480,
+ 24484,
+ 24487,
+ 24490,
+ 24494,
+ 24497,
+ 24500,
+ 24504,
+ 24507,
+ 24510,
+ 24514,
+ 24517,
+ 24520,
+ 24524,
+ 24527,
+ 24530,
+ 24534,
+ 24537,
+ 24540,
+ 24544,
+ 24547,
+ 24550,
+ 24553,
+ 24557,
+ 24560,
+ 24563,
+ 24567,
+ 24570,
+ 24573,
+ 24577,
+ 24580,
+ 24583,
+ 24587,
+ 24590,
+ 24593,
+ 24597,
+ 24600,
+ 24603,
+ 24607,
+ 24610,
+ 24613,
+ 24617,
+ 24620,
+ 24623,
+ 24627,
+ 24630,
+ 24633,
+ 24637,
+ 24640,
+ 24643,
+ 24647,
+ 24650,
+ 24653,
+ 24656,
+ 24660,
+ 24663,
+ 24666,
+ 24670,
+ 24673,
+ 24676,
+ 24680,
+ 24683,
+ 24686,
+ 24690,
+ 24693,
+ 24696,
+ 24700,
+ 24703,
+ 24706,
+ 24710,
+ 24713,
+ 24716,
+ 24720,
+ 24723,
+ 24726,
+ 24730,
+ 24733,
+ 24736,
+ 24740,
+ 24743,
+ 24746,
+ 24749,
+ 24753,
+ 24756,
+ 24759,
+ 24763,
+ 24766,
+ 24769,
+ 24773,
+ 24776,
+ 24779,
+ 24783,
+ 24786,
+ 24789,
+ 24793,
+ 24796,
+ 24799,
+ 24803,
+ 24806,
+ 24809,
+ 24813,
+ 24816,
+ 24819,
+ 24823,
+ 24826,
+ 24829,
+ 24833,
+ 24836,
+ 24839,
+ 24843,
+ 24846,
+ 24849,
+ 24852,
+ 24856,
+ 24859,
+ 24862,
+ 24866,
+ 24869,
+ 24872,
+ 24876,
+ 24879,
+ 24882,
+ 24886,
+ 24889,
+ 24892,
+ 24896,
+ 24899,
+ 24902,
+ 24906,
+ 24909,
+ 24912,
+ 24916,
+ 24919,
+ 24922,
+ 24926,
+ 24929,
+ 24932,
+ 24936,
+ 24939,
+ 24942,
+ 24945,
+ 24949,
+ 24952,
+ 24955,
+ 24959,
+ 24962,
+ 24965,
+ 24969,
+ 24972,
+ 24975,
+ 24979,
+ 24982,
+ 24985,
+ 24989,
+ 24992,
+ 24995,
+ 24999,
+ 25002,
+ 25005,
+ 25009,
+ 25012,
+ 25015,
+ 25019,
+ 25022,
+ 25025,
+ 25029,
+ 25032,
+ 25035,
+ 25038,
+ 25042,
+ 25045,
+ 25048,
+ 25052,
+ 25055,
+ 25058,
+ 25062,
+ 25065,
+ 25068,
+ 25072,
+ 25075,
+ 25078,
+ 25082,
+ 25085,
+ 25088,
+ 25092,
+ 25095,
+ 25098,
+ 25102,
+ 25105,
+ 25108,
+ 25112,
+ 25115,
+ 25118,
+ 25122,
+ 25125,
+ 25128,
+ 25132,
+ 25135,
+ 25138,
+ 25141,
+ 25145,
+ 25148,
+ 25151,
+ 25155,
+ 25158,
+ 25161,
+ 25165,
+ 25168,
+ 25171,
+ 25175,
+ 25178,
+ 25181,
+ 25185,
+ 25188,
+ 25191,
+ 25195,
+ 25198,
+ 25201,
+ 25205,
+ 25208,
+ 25211,
+ 25215,
+ 25218,
+ 25221,
+ 25225,
+ 25228,
+ 25231,
+ 25234,
+ 25238,
+ 25241,
+ 25244,
+ 25248,
+ 25251,
+ 25254,
+ 25258,
+ 25261,
+ 25264,
+ 25268,
+ 25271,
+ 25274,
+ 25278,
+ 25281,
+ 25284,
+ 25288,
+ 25291,
+ 25294,
+ 25298,
+ 25301,
+ 25304,
+ 25308,
+ 25311,
+ 25314,
+ 25318,
+ 25321,
+ 25324,
+ 25328,
+ 25331,
+ 25334,
+ 25337,
+ 25341,
+ 25344,
+ 25347,
+ 25351,
+ 25354,
+ 25357,
+ 25361,
+ 25364,
+ 25367,
+ 25371,
+ 25374,
+ 25377,
+ 25381,
+ 25384,
+ 25387,
+ 25391,
+ 25394,
+ 25397,
+ 25401,
+ 25404,
+ 25407,
+ 25411,
+ 25414,
+ 25417,
+ 25421,
+ 25424,
+ 25427,
+ 25430,
+ 25434,
+ 25437,
+ 25440,
+ 25444,
+ 25447,
+ 25450,
+ 25454,
+ 25457,
+ 25460,
+ 25464,
+ 25467,
+ 25470,
+ 25474,
+ 25477,
+ 25480,
+ 25484,
+ 25487,
+ 25490,
+ 25494,
+ 25497,
+ 25500,
+ 25504,
+ 25507,
+ 25510,
+ 25514,
+ 25517,
+ 25520,
+ 25524,
+ 25527,
+ 25530,
+ 25533,
+ 25537,
+ 25540,
+ 25543,
+ 25547,
+ 25550,
+ 25553,
+ 25557,
+ 25560,
+ 25563,
+ 25567,
+ 25570,
+ 25573,
+ 25577,
+ 25580,
+ 25583,
+ 25587,
+ 25590,
+ 25593,
+ 25597,
+ 25600,
+ 25603,
+ 25607,
+ 25610,
+ 25613,
+ 25617,
+ 25620,
+ 25623,
+ 25626,
+ 25630,
+ 25633,
+ 25636,
+ 25640,
+ 25643,
+ 25646,
+ 25650,
+ 25653,
+ 25656,
+ 25660,
+ 25663,
+ 25666,
+ 25670,
+ 25673,
+ 25676,
+ 25680,
+ 25683,
+ 25686,
+ 25690,
+ 25693,
+ 25696,
+ 25700,
+ 25703,
+ 25706,
+ 25710,
+ 25713,
+ 25716,
+ 25719,
+ 25723,
+ 25726,
+ 25729,
+ 25733,
+ 25736,
+ 25739,
+ 25743,
+ 25746,
+ 25749,
+ 25753,
+ 25756,
+ 25759,
+ 25763,
+ 25766,
+ 25769,
+ 25773,
+ 25776,
+ 25779,
+ 25783,
+ 25786,
+ 25789,
+ 25793,
+ 25796,
+ 25799,
+ 25803,
+ 25806,
+ 25809,
+ 25813,
+ 25816,
+ 25819,
+ 25822,
+ 25826,
+ 25829,
+ 25832,
+ 25836,
+ 25839,
+ 25842,
+ 25846,
+ 25849,
+ 25852,
+ 25856,
+ 25859,
+ 25862,
+ 25866,
+ 25869,
+ 25872,
+ 25876,
+ 25879,
+ 25882,
+ 25886,
+ 25889,
+ 25892,
+ 25896,
+ 25899,
+ 25902,
+ 25906,
+ 25909,
+ 25912,
+ 25915,
+ 25919,
+ 25922,
+ 25925,
+ 25929,
+ 25932,
+ 25935,
+ 25939,
+ 25942,
+ 25945,
+ 25949,
+ 25952,
+ 25955,
+ 25959,
+ 25962,
+ 25965,
+ 25969,
+ 25972,
+ 25975,
+ 25979,
+ 25982,
+ 25985,
+ 25989,
+ 25992,
+ 25995,
+ 25999,
+ 26002,
+ 26005,
+ 26009,
+ 26012,
+ 26015,
+ 26018,
+ 26022,
+ 26025,
+ 26028,
+ 26032,
+ 26035,
+ 26038,
+ 26042,
+ 26045,
+ 26048,
+ 26052,
+ 26055,
+ 26058,
+ 26062,
+ 26065,
+ 26068,
+ 26072,
+ 26075,
+ 26078,
+ 26082,
+ 26085,
+ 26088,
+ 26092,
+ 26095,
+ 26098,
+ 26102,
+ 26105,
+ 26108,
+ 26111,
+ 26115,
+ 26118,
+ 26121,
+ 26125,
+ 26128,
+ 26131,
+ 26135,
+ 26138,
+ 26141,
+ 26145,
+ 26148,
+ 26151,
+ 26155,
+ 26158,
+ 26161,
+ 26165,
+ 26168,
+ 26171,
+ 26175,
+ 26178,
+ 26181,
+ 26185,
+ 26188,
+ 26191,
+ 26195,
+ 26198,
+ 26201,
+ 26204,
+ 26208,
+ 26211,
+ 26214,
+ 26218,
+ 26221,
+ 26224,
+ 26228,
+ 26231,
+ 26234,
+ 26238,
+ 26241,
+ 26244,
+ 26248,
+ 26251,
+ 26254,
+ 26258,
+ 26261,
+ 26264,
+ 26268,
+ 26271,
+ 26274,
+ 26278,
+ 26281,
+ 26284,
+ 26288,
+ 26291,
+ 26294,
+ 26298,
+ 26301,
+ 26304,
+ 26307,
+ 26311,
+ 26314,
+ 26317,
+ 26321,
+ 26324,
+ 26327,
+ 26331,
+ 26334,
+ 26337,
+ 26341,
+ 26344,
+ 26347,
+ 26351,
+ 26354,
+ 26357,
+ 26361,
+ 26364,
+ 26367,
+ 26371,
+ 26374,
+ 26377,
+ 26381,
+ 26384,
+ 26387,
+ 26391,
+ 26394,
+ 26397,
+ 26400,
+ 26404,
+ 26407,
+ 26410,
+ 26414,
+ 26417,
+ 26420,
+ 26424,
+ 26427,
+ 26430,
+ 26434,
+ 26437,
+ 26440,
+ 26444,
+ 26447,
+ 26450,
+ 26454,
+ 26457,
+ 26460,
+ 26464,
+ 26467,
+ 26470,
+ 26474,
+ 26477,
+ 26480,
+ 26484,
+ 26487,
+ 26490,
+ 26494,
+ 26497,
+ 26500,
+ 26503,
+ 26507,
+ 26510,
+ 26513,
+ 26517,
+ 26520,
+ 26523,
+ 26527,
+ 26530,
+ 26533,
+ 26537,
+ 26540,
+ 26543,
+ 26547,
+ 26550,
+ 26553,
+ 26557,
+ 26560,
+ 26563,
+ 26567,
+ 26570,
+ 26573,
+ 26577,
+ 26580,
+ 26583,
+ 26587,
+ 26590,
+ 26593,
+ 26596,
+ 26600,
+ 26603,
+ 26606,
+ 26610,
+ 26613,
+ 26616,
+ 26620,
+ 26623,
+ 26626,
+ 26630,
+ 26633,
+ 26636,
+ 26640,
+ 26643,
+ 26646,
+ 26650,
+ 26653,
+ 26656,
+ 26660,
+ 26663,
+ 26666,
+ 26670,
+ 26673,
+ 26676,
+ 26680,
+ 26683,
+ 26686,
+ 26689,
+ 26693,
+ 26696,
+ 26699,
+ 26703,
+ 26706,
+ 26709,
+ 26713,
+ 26716,
+ 26719,
+ 26723,
+ 26726,
+ 26729,
+ 26733,
+ 26736,
+ 26739,
+ 26743,
+ 26746,
+ 26749,
+ 26753,
+ 26756,
+ 26759,
+ 26763,
+ 26766,
+ 26769,
+ 26773,
+ 26776,
+ 26779,
+ 26783,
+ 26786,
+ 26789,
+ 26792,
+ 26796,
+ 26799,
+ 26802,
+ 26806,
+ 26809,
+ 26812,
+ 26816,
+ 26819,
+ 26822,
+ 26826,
+ 26829,
+ 26832,
+ 26836,
+ 26839,
+ 26842,
+ 26846,
+ 26849,
+ 26852,
+ 26856,
+ 26859,
+ 26862,
+ 26866,
+ 26869,
+ 26872,
+ 26876,
+ 26879,
+ 26882,
+ 26885,
+ 26889,
+ 26892,
+ 26895,
+ 26899,
+ 26902,
+ 26905,
+ 26909,
+ 26912,
+ 26915,
+ 26919,
+ 26922,
+ 26925,
+ 26929,
+ 26932,
+ 26935,
+ 26939,
+ 26942,
+ 26945,
+ 26949,
+ 26952,
+ 26955,
+ 26959,
+ 26962,
+ 26965,
+ 26969,
+ 26972,
+ 26975,
+ 26979,
+ 26982,
+ 26985,
+ 26988,
+ 26992,
+ 26995,
+ 26998,
+ 27002,
+ 27005,
+ 27008,
+ 27012,
+ 27015,
+ 27018,
+ 27022,
+ 27025,
+ 27028,
+ 27032,
+ 27035,
+ 27038,
+ 27042,
+ 27045,
+ 27048,
+ 27052,
+ 27055,
+ 27058,
+ 27062,
+ 27065,
+ 27068,
+ 27072,
+ 27075,
+ 27078,
+ 27081,
+ 27085,
+ 27088,
+ 27091,
+ 27095,
+ 27098,
+ 27101,
+ 27105,
+ 27108,
+ 27111,
+ 27115,
+ 27118,
+ 27121,
+ 27125,
+ 27128,
+ 27131,
+ 27135,
+ 27138,
+ 27141,
+ 27145,
+ 27148,
+ 27151,
+ 27155,
+ 27158,
+ 27161,
+ 27165,
+ 27168,
+ 27171,
+ 27174,
+ 27178,
+ 27181,
+ 27184,
+ 27188,
+ 27191,
+ 27194,
+ 27198,
+ 27201,
+ 27204,
+ 27208,
+ 27211,
+ 27214,
+ 27218,
+ 27221,
+ 27224,
+ 27228,
+ 27231,
+ 27234,
+ 27238,
+ 27241,
+ 27244,
+ 27248,
+ 27251,
+ 27254,
+ 27258,
+ 27261,
+ 27264,
+ 27268,
+ 27271,
+ 27274,
+ 27277,
+ 27281,
+ 27284,
+ 27287,
+ 27291,
+ 27294,
+ 27297,
+ 27301,
+ 27304,
+ 27307,
+ 27311,
+ 27314,
+ 27317,
+ 27321,
+ 27324,
+ 27327,
+ 27331,
+ 27334,
+ 27337,
+ 27341,
+ 27344,
+ 27347,
+ 27351,
+ 27354,
+ 27357,
+ 27361,
+ 27364,
+ 27367,
+ 27370,
+ 27374,
+ 27377,
+ 27380,
+ 27384,
+ 27387,
+ 27390,
+ 27394,
+ 27397,
+ 27400,
+ 27404,
+ 27407,
+ 27410,
+ 27414,
+ 27417,
+ 27420,
+ 27424,
+ 27427,
+ 27430,
+ 27434,
+ 27437,
+ 27440,
+ 27444,
+ 27447,
+ 27450,
+ 27454,
+ 27457,
+ 27460,
+ 27464,
+ 27467,
+ 27470,
+ 27473,
+ 27477,
+ 27480,
+ 27483,
+ 27487,
+ 27490,
+ 27493,
+ 27497,
+ 27500,
+ 27503,
+ 27507,
+ 27510,
+ 27513,
+ 27517,
+ 27520,
+ 27523,
+ 27527,
+ 27530,
+ 27533,
+ 27537,
+ 27540,
+ 27543,
+ 27547,
+ 27550,
+ 27553,
+ 27557,
+ 27560,
+ 27563,
+ 27566,
+ 27570,
+ 27573,
+ 27576,
+ 27580,
+ 27583,
+ 27586,
+ 27590,
+ 27593,
+ 27596,
+ 27600,
+ 27603,
+ 27606,
+ 27610,
+ 27613,
+ 27616,
+ 27620,
+ 27623,
+ 27626,
+ 27630,
+ 27633,
+ 27636,
+ 27640,
+ 27643,
+ 27646,
+ 27650,
+ 27653,
+ 27656,
+ 27660,
+ 27663,
+ 27666,
+ 27669,
+ 27673,
+ 27676,
+ 27679,
+ 27683,
+ 27686,
+ 27689,
+ 27693,
+ 27696,
+ 27699,
+ 27703,
+ 27706,
+ 27709,
+ 27713,
+ 27716,
+ 27719,
+ 27723,
+ 27726,
+ 27729,
+ 27733,
+ 27736,
+ 27739,
+ 27743,
+ 27746,
+ 27749,
+ 27753,
+ 27756,
+ 27759,
+ 27762,
+ 27766,
+ 27769,
+ 27772,
+ 27776,
+ 27779,
+ 27782,
+ 27786,
+ 27789,
+ 27792,
+ 27796,
+ 27799,
+ 27802,
+ 27806,
+ 27809,
+ 27812,
+ 27816,
+ 27819,
+ 27822,
+ 27826,
+ 27829,
+ 27832,
+ 27836,
+ 27839,
+ 27842,
+ 27846,
+ 27849,
+ 27852,
+ 27855,
+ 27859,
+ 27862,
+ 27865,
+ 27869,
+ 27872,
+ 27875,
+ 27879,
+ 27882,
+ 27885,
+ 27889,
+ 27892,
+ 27895,
+ 27899,
+ 27902,
+ 27905,
+ 27909,
+ 27912,
+ 27915,
+ 27919,
+ 27922,
+ 27925,
+ 27929,
+ 27932,
+ 27935,
+ 27939,
+ 27942,
+ 27945,
+ 27949,
+ 27952,
+ 27955,
+ 27958,
+ 27962,
+ 27965,
+ 27968,
+ 27972,
+ 27975,
+ 27978,
+ 27982,
+ 27985,
+ 27988,
+ 27992,
+ 27995,
+ 27998,
+ 28002,
+ 28005,
+ 28008,
+ 28012,
+ 28015,
+ 28018,
+ 28022,
+ 28025,
+ 28028,
+ 28032,
+ 28035,
+ 28038,
+ 28042,
+ 28045,
+ 28048,
+ 28051,
+ 28055,
+ 28058,
+ 28061,
+ 28065,
+ 28068,
+ 28071,
+ 28075,
+ 28078,
+ 28081,
+ 28085,
+ 28088,
+ 28091,
+ 28095,
+ 28098,
+ 28101,
+ 28105,
+ 28108,
+ 28111,
+ 28115,
+ 28118,
+ 28121,
+ 28125,
+ 28128,
+ 28131,
+ 28135,
+ 28138,
+ 28141,
+ 28145,
+ 28148,
+ 28151,
+ 28154,
+ 28158,
+ 28161,
+ 28164,
+ 28168,
+ 28171,
+ 28174,
+ 28178,
+ 28181,
+ 28184,
+ 28188,
+ 28191,
+ 28194,
+ 28198,
+ 28201,
+ 28204,
+ 28208,
+ 28211,
+ 28214,
+ 28218,
+ 28221,
+ 28224,
+ 28228,
+ 28231,
+ 28234,
+ 28238,
+ 28241,
+ 28244,
+ 28247,
+ 28251,
+ 28254,
+ 28257,
+ 28261,
+ 28264,
+ 28267,
+ 28271,
+ 28274,
+ 28277,
+ 28281,
+ 28284,
+ 28287,
+ 28291,
+ 28294,
+ 28297,
+ 28301,
+ 28304,
+ 28307,
+ 28311,
+ 28314,
+ 28317,
+ 28321,
+ 28324,
+ 28327,
+ 28331,
+ 28334,
+ 28337,
+ 28340,
+ 28344,
+ 28347,
+ 28350,
+ 28354,
+ 28357,
+ 28360,
+ 28364,
+ 28367,
+ 28370,
+ 28374,
+ 28377,
+ 28380,
+ 28384,
+ 28387,
+ 28390,
+ 28394,
+ 28397,
+ 28400,
+ 28404,
+ 28407,
+ 28410,
+ 28414,
+ 28417,
+ 28420,
+ 28424,
+ 28427,
+ 28430,
+ 28434,
+ 28437,
+ 28440,
+ 28443,
+ 28447,
+ 28450,
+ 28453,
+ 28457,
+ 28460,
+ 28463,
+ 28467,
+ 28470,
+ 28473,
+ 28477,
+ 28480,
+ 28483,
+ 28487,
+ 28490,
+ 28493,
+ 28497,
+ 28500,
+ 28503,
+ 28507,
+ 28510,
+ 28513,
+ 28517,
+ 28520,
+ 28523,
+ 28527,
+ 28530,
+ 28533,
+ 28536,
+ 28540,
+ 28543,
+ 28546,
+ 28550,
+ 28553,
+ 28556,
+ 28560,
+ 28563,
+ 28566,
+ 28570,
+ 28573,
+ 28576,
+ 28580,
+ 28583,
+ 28586,
+ 28590,
+ 28593,
+ 28596,
+ 28600,
+ 28603,
+ 28606,
+ 28610,
+ 28613,
+ 28616,
+ 28620,
+ 28623,
+ 28626,
+ 28630,
+ 28633,
+ 28636,
+ 28639,
+ 28643,
+ 28646,
+ 28649,
+ 28653,
+ 28656,
+ 28659,
+ 28663,
+ 28666,
+ 28669,
+ 28673,
+ 28676,
+ 28679,
+ 28683,
+ 28686,
+ 28689,
+ 28693,
+ 28696,
+ 28699,
+ 28703,
+ 28706,
+ 28709,
+ 28713,
+ 28716,
+ 28719,
+ 28723,
+ 28726,
+ 28729,
+ 28732,
+ 28736,
+ 28739,
+ 28742,
+ 28746,
+ 28749,
+ 28752,
+ 28756,
+ 28759,
+ 28762,
+ 28766,
+ 28769,
+ 28772,
+ 28776,
+ 28779,
+ 28782,
+ 28786,
+ 28789,
+ 28792,
+ 28796,
+ 28799,
+ 28802,
+ 28806,
+ 28809,
+ 28812,
+ 28816,
+ 28819,
+ 28822,
+ 28825,
+ 28829,
+ 28832,
+ 28835,
+ 28839,
+ 28842,
+ 28845,
+ 28849,
+ 28852,
+ 28855,
+ 28859,
+ 28862,
+ 28865,
+ 28869,
+ 28872,
+ 28875,
+ 28879,
+ 28882,
+ 28885,
+ 28889,
+ 28892,
+ 28895,
+ 28899,
+ 28902,
+ 28905,
+ 28909,
+ 28912,
+ 28915,
+ 28919,
+ 28922,
+ 28925,
+ 28928,
+ 28932,
+ 28935,
+ 28938,
+ 28942,
+ 28945,
+ 28948,
+ 28952,
+ 28955,
+ 28958,
+ 28962,
+ 28965,
+ 28968,
+ 28972,
+ 28975,
+ 28978,
+ 28982,
+ 28985,
+ 28988,
+ 28992,
+ 28995,
+ 28998,
+ 29002,
+ 29005,
+ 29008,
+ 29012,
+ 29015,
+ 29018,
+ 29021,
+ 29025,
+ 29028,
+ 29031,
+ 29035,
+ 29038,
+ 29041,
+ 29045,
+ 29048,
+ 29051,
+ 29055,
+ 29058,
+ 29061,
+ 29065,
+ 29068,
+ 29071,
+ 29075,
+ 29078,
+ 29081,
+ 29085,
+ 29088,
+ 29091,
+ 29095,
+ 29098,
+ 29101,
+ 29105,
+ 29108,
+ 29111,
+ 29115,
+ 29118,
+ 29121,
+ 29124,
+ 29128,
+ 29131,
+ 29134,
+ 29138,
+ 29141,
+ 29144,
+ 29148,
+ 29151,
+ 29154,
+ 29158,
+ 29161,
+ 29164,
+ 29168,
+ 29171,
+ 29174,
+ 29178,
+ 29181,
+ 29184,
+ 29188,
+ 29191,
+ 29194,
+ 29198,
+ 29201,
+ 29204,
+ 29208,
+ 29211,
+ 29214,
+ 29217,
+ 29221,
+ 29224,
+ 29227,
+ 29231,
+ 29234,
+ 29237,
+ 29241,
+ 29244,
+ 29247,
+ 29251,
+ 29254,
+ 29257,
+ 29261,
+ 29264,
+ 29267,
+ 29271,
+ 29274,
+ 29277,
+ 29281,
+ 29284,
+ 29287,
+ 29291,
+ 29294,
+ 29297,
+ 29301,
+ 29304,
+ 29307,
+ 29310,
+ 29314,
+ 29317,
+ 29320,
+ 29324,
+ 29327,
+ 29330,
+ 29334,
+ 29337,
+ 29340,
+ 29344,
+ 29347,
+ 29350,
+ 29354,
+ 29357,
+ 29360,
+ 29364,
+ 29367,
+ 29370,
+ 29374,
+ 29377,
+ 29380,
+ 29384,
+ 29387,
+ 29390,
+ 29394,
+ 29397,
+ 29400,
+ 29404,
+ 29407,
+ 29410,
+ 29413,
+ 29417,
+ 29420,
+ 29423,
+ 29427,
+ 29430,
+ 29433,
+ 29437,
+ 29440,
+ 29443,
+ 29447,
+ 29450,
+ 29453,
+ 29457,
+ 29460,
+ 29463,
+ 29467,
+ 29470,
+ 29473,
+ 29477,
+ 29480,
+ 29483,
+ 29487,
+ 29490,
+ 29493,
+ 29497,
+ 29500,
+ 29503,
+ 29506,
+ 29510,
+ 29513,
+ 29516,
+ 29520,
+ 29523,
+ 29526,
+ 29530,
+ 29533,
+ 29536,
+ 29540,
+ 29543,
+ 29546,
+ 29550,
+ 29553,
+ 29556,
+ 29560,
+ 29563,
+ 29566,
+ 29570,
+ 29573,
+ 29576,
+ 29580,
+ 29583,
+ 29586,
+ 29590,
+ 29593,
+ 29596,
+ 29600,
+ 29603,
+ 29606,
+ 29609,
+ 29613,
+ 29616,
+ 29619,
+ 29623,
+ 29626,
+ 29629,
+ 29633,
+ 29636,
+ 29639,
+ 29643,
+ 29646,
+ 29649,
+ 29653,
+ 29656,
+ 29659,
+ 29663,
+ 29666,
+ 29669,
+ 29673,
+ 29676,
+ 29679,
+ 29683,
+ 29686,
+ 29689,
+ 29693,
+ 29696,
+ 29699,
+ 29702,
+ 29706,
+ 29709,
+ 29712,
+ 29716,
+ 29719,
+ 29722,
+ 29726,
+ 29729,
+ 29732,
+ 29736,
+ 29739,
+ 29742,
+ 29746,
+ 29749,
+ 29752,
+ 29756,
+ 29759,
+ 29762,
+ 29766,
+ 29769,
+ 29772,
+ 29776,
+ 29779,
+ 29782,
+ 29786,
+ 29789,
+ 29792,
+ 29796,
+ 29799,
+ 29802,
+ 29805,
+ 29809,
+ 29812,
+ 29815,
+ 29819,
+ 29822,
+ 29825,
+ 29829,
+ 29832,
+ 29835,
+ 29839,
+ 29842,
+ 29845,
+ 29849,
+ 29852,
+ 29855,
+ 29859,
+ 29862,
+ 29865,
+ 29869,
+ 29872,
+ 29875,
+ 29879,
+ 29882,
+ 29885,
+ 29889,
+ 29892,
+ 29895,
+ 29898,
+ 29902,
+ 29905,
+ 29908,
+ 29912,
+ 29915,
+ 29918,
+ 29922,
+ 29925,
+ 29928,
+ 29932,
+ 29935,
+ 29938,
+ 29942,
+ 29945,
+ 29948,
+ 29952,
+ 29955,
+ 29958,
+ 29962,
+ 29965,
+ 29968,
+ 29972,
+ 29975,
+ 29978,
+ 29982,
+ 29985,
+ 29988,
+ 29991,
+ 29995,
+ 29998,
+ 30001,
+ 30005,
+ 30008,
+ 30011,
+ 30015,
+ 30018,
+ 30021,
+ 30025,
+ 30028,
+ 30031,
+ 30035,
+ 30038,
+ 30041,
+ 30045,
+ 30048,
+ 30051,
+ 30055,
+ 30058,
+ 30061,
+ 30065,
+ 30068,
+ 30071,
+ 30075,
+ 30078,
+ 30081,
+ 30085,
+ 30088,
+ 30091,
+ 30094,
+ 30098,
+ 30101,
+ 30104,
+ 30108,
+ 30111,
+ 30114,
+ 30118,
+ 30121,
+ 30124,
+ 30128,
+ 30131,
+ 30134,
+ 30138,
+ 30141,
+ 30144,
+ 30148,
+ 30151,
+ 30154,
+ 30158,
+ 30161,
+ 30164,
+ 30168,
+ 30171,
+ 30174,
+ 30178,
+ 30181,
+ 30184,
+ 30187,
+ 30191,
+ 30194,
+ 30197,
+ 30201,
+ 30204,
+ 30207,
+ 30211,
+ 30214,
+ 30217,
+ 30221,
+ 30224,
+ 30227,
+ 30231,
+ 30234,
+ 30237,
+ 30241,
+ 30244,
+ 30247,
+ 30251,
+ 30254,
+ 30257,
+ 30261,
+ 30264,
+ 30267,
+ 30271,
+ 30274,
+ 30277,
+ 30281,
+ 30284,
+ 30287,
+ 30290,
+ 30294,
+ 30297,
+ 30300,
+ 30304,
+ 30307,
+ 30310,
+ 30314,
+ 30317,
+ 30320,
+ 30324,
+ 30327,
+ 30330,
+ 30334,
+ 30337,
+ 30340,
+ 30344,
+ 30347,
+ 30350,
+ 30354,
+ 30357,
+ 30360,
+ 30364,
+ 30367,
+ 30370,
+ 30374,
+ 30377,
+ 30380,
+ 30383,
+ 30387,
+ 30390,
+ 30393,
+ 30397,
+ 30400,
+ 30403,
+ 30407,
+ 30410,
+ 30413,
+ 30417,
+ 30420,
+ 30423,
+ 30427,
+ 30430,
+ 30433,
+ 30437,
+ 30440,
+ 30443,
+ 30447,
+ 30450,
+ 30453,
+ 30457,
+ 30460,
+ 30463,
+ 30467,
+ 30470,
+ 30473,
+ 30476,
+ 30480,
+ 30483,
+ 30486,
+ 30490,
+ 30493,
+ 30496,
+ 30500,
+ 30503,
+ 30506,
+ 30510,
+ 30513,
+ 30516,
+ 30520,
+ 30523,
+ 30526,
+ 30530,
+ 30533,
+ 30536,
+ 30540,
+ 30543,
+ 30546,
+ 30550,
+ 30553,
+ 30556,
+ 30560,
+ 30563,
+ 30566,
+ 30570,
+ 30573,
+ 30576,
+ 30579,
+ 30583,
+ 30586,
+ 30589,
+ 30593,
+ 30596,
+ 30599,
+ 30603,
+ 30606,
+ 30609,
+ 30613,
+ 30616,
+ 30619,
+ 30623,
+ 30626,
+ 30629,
+ 30633,
+ 30636,
+ 30639,
+ 30643,
+ 30646,
+ 30649,
+ 30653,
+ 30656,
+ 30659,
+ 30663,
+ 30666,
+ 30669,
+ 30672,
+ 30676,
+ 30679,
+ 30682,
+ 30686,
+ 30689,
+ 30692,
+ 30696,
+ 30699,
+ 30702,
+ 30706,
+ 30709,
+ 30712,
+ 30716,
+ 30719,
+ 30722,
+ 30726,
+ 30729,
+ 30732,
+ 30736,
+ 30739,
+ 30742,
+ 30746,
+ 30749,
+ 30752,
+ 30756,
+ 30759,
+ 30762,
+ 30766,
+ 30769,
+ 30772,
+ 30775,
+ 30779,
+ 30782,
+ 30785,
+ 30789,
+ 30792,
+ 30795,
+ 30799,
+ 30802,
+ 30805,
+ 30809,
+ 30812,
+ 30815,
+ 30819,
+ 30822,
+ 30825,
+ 30829,
+ 30832,
+ 30835,
+ 30839,
+ 30842,
+ 30845,
+ 30849,
+ 30852,
+ 30855,
+ 30859,
+ 30862,
+ 30865,
+ 30868,
+ 30872,
+ 30875,
+ 30878,
+ 30882,
+ 30885,
+ 30888,
+ 30892,
+ 30895,
+ 30898,
+ 30902,
+ 30905,
+ 30908,
+ 30912,
+ 30915,
+ 30918,
+ 30922,
+ 30925,
+ 30928,
+ 30932,
+ 30935,
+ 30938,
+ 30942,
+ 30945,
+ 30948,
+ 30952,
+ 30955,
+ 30958,
+ 30961,
+ 30965,
+ 30968,
+ 30971,
+ 30975,
+ 30978,
+ 30981,
+ 30985,
+ 30988,
+ 30991,
+ 30995,
+ 30998,
+ 31001,
+ 31005,
+ 31008,
+ 31011,
+ 31015,
+ 31018,
+ 31021,
+ 31025,
+ 31028,
+ 31031,
+ 31035,
+ 31038,
+ 31041,
+ 31045,
+ 31048,
+ 31051,
+ 31055,
+ 31058,
+ 31061,
+ 31064,
+ 31068,
+ 31071,
+ 31074,
+ 31078,
+ 31081,
+ 31084,
+ 31088,
+ 31091,
+ 31094,
+ 31098,
+ 31101,
+ 31104,
+ 31108,
+ 31111,
+ 31114,
+ 31118,
+ 31121,
+ 31124,
+ 31128,
+ 31131,
+ 31134,
+ 31138,
+ 31141,
+ 31144,
+ 31148,
+ 31151,
+ 31154,
+ 31157,
+ 31161,
+ 31164,
+ 31167,
+ 31171,
+ 31174,
+ 31177,
+ 31181,
+ 31184,
+ 31187,
+ 31191,
+ 31194,
+ 31197,
+ 31201,
+ 31204,
+ 31207,
+ 31211,
+ 31214,
+ 31217,
+ 31221,
+ 31224,
+ 31227,
+ 31231,
+ 31234,
+ 31237,
+ 31241,
+ 31244,
+ 31247,
+ 31251,
+ 31254,
+ 31257,
+ 31260,
+ 31264,
+ 31267,
+ 31270,
+ 31274,
+ 31277,
+ 31280,
+ 31284,
+ 31287,
+ 31290,
+ 31294,
+ 31297,
+ 31300,
+ 31304,
+ 31307,
+ 31310,
+ 31314,
+ 31317,
+ 31320,
+ 31324,
+ 31327,
+ 31330,
+ 31334,
+ 31337,
+ 31340,
+ 31344,
+ 31347,
+ 31350,
+ 31353,
+ 31357,
+ 31360,
+ 31363,
+ 31367,
+ 31370,
+ 31373,
+ 31377,
+ 31380,
+ 31383,
+ 31387,
+ 31390,
+ 31393,
+ 31397,
+ 31400,
+ 31403,
+ 31407,
+ 31410,
+ 31413,
+ 31417,
+ 31420,
+ 31423,
+ 31427,
+ 31430,
+ 31433,
+ 31437,
+ 31440,
+ 31443,
+ 31446,
+ 31450,
+ 31453,
+ 31456,
+ 31460,
+ 31463,
+ 31466,
+ 31470,
+ 31473,
+ 31476,
+ 31480,
+ 31483,
+ 31486,
+ 31490,
+ 31493,
+ 31496,
+ 31500,
+ 31503,
+ 31506,
+ 31510,
+ 31513,
+ 31516,
+ 31520,
+ 31523,
+ 31526,
+ 31530,
+ 31533,
+ 31536,
+ 31540,
+ 31543,
+ 31546,
+ 31549,
+ 31553,
+ 31556,
+ 31559,
+ 31563,
+ 31566,
+ 31569,
+ 31573,
+ 31576,
+ 31579,
+ 31583,
+ 31586,
+ 31589,
+ 31593,
+ 31596,
+ 31599,
+ 31603,
+ 31606,
+ 31609,
+ 31613,
+ 31616,
+ 31619,
+ 31623,
+ 31626,
+ 31629,
+ 31633,
+ 31636,
+ 31639,
+ 31642,
+ 31646,
+ 31649,
+ 31652,
+ 31656,
+ 31659,
+ 31662,
+ 31666,
+ 31669,
+ 31672,
+ 31676,
+ 31679,
+ 31682,
+ 31686,
+ 31689,
+ 31692,
+ 31696,
+ 31699,
+ 31702,
+ 31706,
+ 31709,
+ 31712,
+ 31716,
+ 31719,
+ 31722,
+ 31726,
+ 31729,
+ 31732,
+ 31736,
+ 31739,
+ 31742,
+ 31745,
+ 31749,
+ 31752,
+ 31755,
+ 31759,
+ 31762,
+ 31765,
+ 31769,
+ 31772,
+ 31775,
+ 31779,
+ 31782,
+ 31785,
+ 31789,
+ 31792,
+ 31795,
+ 31799,
+ 31802,
+ 31805,
+ 31809,
+ 31812,
+ 31815,
+ 31819,
+ 31822,
+ 31825,
+ 31829,
+ 31832,
+ 31835,
+ 31838,
+ 31842,
+ 31845,
+ 31848,
+ 31852,
+ 31855,
+ 31858,
+ 31862,
+ 31865,
+ 31868,
+ 31872,
+ 31875,
+ 31878,
+ 31882,
+ 31885,
+ 31888,
+ 31892,
+ 31895,
+ 31898,
+ 31902,
+ 31905,
+ 31908,
+ 31912,
+ 31915,
+ 31918,
+ 31922,
+ 31925,
+ 31928,
+ 31931,
+ 31935,
+ 31938,
+ 31941,
+ 31945,
+ 31948,
+ 31951,
+ 31955,
+ 31958,
+ 31961,
+ 31965,
+ 31968,
+ 31971,
+ 31975,
+ 31978,
+ 31981,
+ 31985,
+ 31988,
+ 31991,
+ 31995,
+ 31998,
+ 32001,
+ 32005,
+ 32008,
+ 32011,
+ 32015,
+ 32018,
+ 32021,
+ 32025,
+ 32028,
+ 32031,
+ 32034,
+ 32038,
+ 32041,
+ 32044,
+ 32048,
+ 32051,
+ 32054,
+ 32058,
+ 32061,
+ 32064,
+ 32068,
+ 32071,
+ 32074,
+ 32078,
+ 32081,
+ 32084,
+ 32088,
+ 32091,
+ 32094,
+ 32098,
+ 32101,
+ 32104,
+ 32108,
+ 32111,
+ 32114,
+ 32118,
+ 32121,
+ 32124,
+ 32127,
+ 32131,
+ 32134,
+ 32137,
+ 32141,
+ 32144,
+ 32147,
+ 32151,
+ 32154,
+ 32157,
+ 32161,
+ 32164,
+ 32167,
+ 32171,
+ 32174,
+ 32177,
+ 32181,
+ 32184,
+ 32187,
+ 32191,
+ 32194,
+ 32197,
+ 32201,
+ 32204,
+ 32207,
+ 32211,
+ 32214,
+ 32217,
+ 32221,
+ 32224,
+ 32227,
+ 32230,
+ 32234,
+ 32237,
+ 32240,
+ 32244,
+ 32247,
+ 32250,
+ 32254,
+ 32257,
+ 32260,
+ 32264,
+ 32267,
+ 32270,
+ 32274,
+ 32277,
+ 32280,
+ 32284,
+ 32287,
+ 32290,
+ 32294,
+ 32297,
+ 32300,
+ 32304,
+ 32307,
+ 32310,
+ 32314,
+ 32317,
+ 32320,
+ 32323,
+ 32327,
+ 32330,
+ 32333,
+ 32337,
+ 32340,
+ 32343,
+ 32347,
+ 32350,
+ 32353,
+ 32357,
+ 32360,
+ 32363,
+ 32367,
+ 32370,
+ 32373,
+ 32377,
+ 32380,
+ 32383,
+ 32387,
+ 32390,
+ 32393,
+ 32397,
+ 32400,
+ 32403,
+ 32407,
+ 32410,
+ 32413,
+ 32417,
+ 32420,
+ 32423,
+ 32426,
+ 32430,
+ 32433,
+ 32436,
+ 32440,
+ 32443,
+ 32446,
+ 32450,
+ 32453,
+ 32456,
+ 32460,
+ 32463,
+ 32466,
+ 32470,
+ 32473,
+ 32476,
+ 32480,
+ 32483,
+ 32486,
+ 32490,
+ 32493,
+ 32496,
+ 32500,
+ 32503,
+ 32506,
+ 32510,
+ 32513,
+ 32516,
+ 32519,
+ 32523,
+ 32526,
+ 32529,
+ 32533,
+ 32536,
+ 32539,
+ 32543,
+ 32546,
+ 32549,
+ 32553,
+ 32556,
+ 32559,
+ 32563,
+ 32566,
+ 32569,
+ 32573,
+ 32576,
+ 32579,
+ 32583,
+ 32586,
+ 32589,
+ 32593,
+ 32596,
+ 32599,
+ 32603,
+ 32606,
+ 32609,
+ 32612,
+ 32616,
+ 32619,
+ 32622,
+ 32626,
+ 32629,
+ 32632,
+ 32636,
+ 32639,
+ 32642,
+ 32646,
+ 32649,
+ 32652,
+ 32656,
+ 32659,
+ 32662,
+ 32666,
+ 32669,
+ 32672,
+ 32676,
+ 32679,
+ 32682,
+ 32686,
+ 32689,
+ 32692,
+ 32696,
+ 32699,
+ 32702,
+ 32706,
+ 32709,
+ 32712,
+ 32715,
+ 32719,
+ 32722,
+ 32725,
+ 32729,
+ 32732,
+ 32735,
+ 32739,
+ 32742,
+ 32745,
+ 32749,
+ 32752,
+ 32755,
+ 32759,
+ 32762,
+ 32765,
+ 32769,
+ 32772,
+ 32775,
+ 32779,
+ 32782,
+ 32785,
+ 32789,
+ 32792,
+ 32795,
+ 32799,
+ 32802,
+ 32805,
+ 32808,
+ 32812,
+ 32815,
+ 32818,
+ 32822,
+ 32825,
+ 32828,
+ 32832,
+ 32835,
+ 32838,
+ 32842,
+ 32845,
+ 32848,
+ 32852,
+ 32855,
+ 32858,
+ 32862,
+ 32865,
+ 32868,
+ 32872,
+ 32875,
+ 32878,
+ 32882,
+};
+
+static const UINT256 multipliers1_binary128[] =
+ { {{15420861665977618167ull, 8795339322986628986ull,
+ 11692172791063221495ull, 5916811177297135519ull}},
+{{10052705045617246901ull, 6382488135305898329ull,
+ 10003529970401638965ull, 7396013971621419399ull}},
+{{17812155699579249073ull, 6294898093779880407ull,
+ 13169735259142106209ull, 4622508732263387124ull}},
+{{17653508606046673438ull, 12480308635652238413ull,
+ 16462169073927632761ull, 5778135915329233905ull}},
+{{8231827702276178085ull, 1765327739283134305ull,
+ 6742653287127377240ull, 7222669894161542382ull}},
+{{14901470646272610510ull, 2206659674103917881ull,
+ 17651688645763997358ull, 9028337367701927977ull}},
+{{2395890126279299713ull, 15214220351597112388ull,
+ 4114776375961416492ull, 5642710854813704986ull}},
+{{2994862657849124641ull, 571031365786838869ull,
+ 14366842506806546424ull, 7053388568517131232ull}},
+{{8355264340738793705ull, 713789207233548586ull,
+ 17958553133508183030ull, 8816735710646414040ull}},
+{{9833726231389133970ull, 14281176309803131578ull,
+ 11224095708442614393ull, 5510459819154008775ull}},
+{{3068785752381641654ull, 4016412331971750761ull,
+ 9418433617125880088ull, 6888074773942510969ull}},
+{{8447668208904439972ull, 5020515414964688451ull,
+ 16384728039834738014ull, 8610093467428138711ull}},
+{{2973949621351581031ull, 16972880189635093994ull,
+ 17157984052537793114ull, 5381308417142586694ull}},
+{{12940809063544252096ull, 11992728200189091684ull,
+ 12224108028817465585ull, 6726635521428233368ull}},
+{{16176011329430315120ull, 1155852194954200893ull,
+ 15280135036021831982ull, 8408294401785291710ull}},
+{{12415850090107640902ull, 14557465677128539270ull,
+ 4938398379086257084ull, 5255184001115807319ull}},
+{{6296440575779775320ull, 18196832096410674088ull,
+ 1561311955430433451ull, 6568980001394759149ull}},
+{{7870550719724719149ull, 18134354102085954706ull,
+ 6563325962715429718ull, 8211225001743448936ull}},
+{{9530780218255337373ull, 6722285295376333787ull,
+ 4102078726697143574ull, 5132015626089655585ull}},
+{{7301789254391783812ull, 17626228656075193042ull,
+ 9739284426798817371ull, 6415019532612069481ull}},
+{{18350608604844505572ull, 17421099801666603398ull,
+ 16785791551925909618ull, 8018774415765086851ull}},
+{{6857444359600428079ull, 15499873394469015028ull,
+ 8185276710739999559ull, 5011734009853179282ull}},
+{{8571805449500535098ull, 14763155724658880881ull,
+ 1008223851570223641ull, 6264667512316474103ull}},
+{{15326442830303056777ull, 4618886600541437389ull,
+ 15095337869744943264ull, 7830834390395592628ull}},
+{{11884869778153104438ull, 2886804125338398368ull,
+ 211214131735813732ull, 4894271493997245393ull}},
+{{14856087222691380547ull, 3608505156672997960ull,
+ 4875703683097155069ull, 6117839367496556741ull}},
+{{123364954654674068ull, 9122317464268635355ull,
+ 10706315622298831740ull, 7647299209370695926ull}},
+{{16218004161155028957ull, 14924820452022672904ull,
+ 2079761245509381933ull, 4779562005856684954ull}},
+{{1825761127734234580ull, 4820967509746177419ull,
+ 11823073593741503225ull, 5974452507320856192ull}},
+{{16117259464949956936ull, 10637895405610109677ull,
+ 14778841992176879031ull, 7468065634151070240ull}},
+{{12379130174807417037ull, 13566213656147400404ull,
+ 9236776245110549394ull, 4667541021344418900ull}},
+{{15473912718509271297ull, 7734395033329474697ull,
+ 11545970306388186743ull, 5834426276680523625ull}},
+{{5507332842854425409ull, 5056307773234455468ull, 597404827703069717ull,
+ 7293032845850654532ull}},
+{{6884166053568031761ull, 10932070734970457239ull,
+ 746756034628837146ull, 9116291057313318165ull}},
+{{11220132811121101707ull, 11444230227783923678ull,
+ 2772565530856717168ull, 5697681910820823853ull}},
+{{4801793977046601325ull, 14305287784729904598ull,
+ 8077392931998284364ull, 7122102388526029816ull}},
+{{15225614508163027464ull, 17881609730912380747ull,
+ 10096741164997855455ull, 8902627985657537270ull}},
+{{7210166058388198213ull, 18093535109461319823ull,
+ 1698777209696271755ull, 5564142491035960794ull}},
+{{4401021554557859863ull, 18005232868399261875ull,
+ 11346843548975115502ull, 6955178113794950992ull}},
+{{889590924769936924ull, 13283169048644301536ull,
+ 14183554436218894378ull, 8693972642243688740ull}},
+{{555994327981210578ull, 12913666673830076364ull,
+ 18088093559491584794ull, 5433732901402305462ull}},
+{{694992909976513222ull, 6918711305432819647ull,
+ 13386744912509705185ull, 6792166126752881828ull}},
+{{14703799192752805239ull, 13260075150218412462ull,
+ 16733431140637131481ull, 8490207658441102285ull}},
+{{4578188477043115371ull, 1370017941245425933ull,
+ 12764237472111901128ull, 5306379786525688928ull}},
+{{10334421614731282117ull, 1712522426556782416ull,
+ 15955296840139876410ull, 6632974733157111160ull}},
+{{12918027018414102647ull, 11364025070050753828ull,
+ 1497376976465293896ull, 8291218416446388951ull}},
+{{17297138923363589962ull, 7102515668781721142ull,
+ 7853389637931890541ull, 5182011510278993094ull}},
+{{12398051617349711645ull, 13489830604404539332ull,
+ 593365010560087368ull, 6477514387848741368ull}},
+{{15497564521687139556ull, 16862288255505674165ull,
+ 741706263200109210ull, 8096892984810926710ull}},
+{{11991820835268156175ull, 15150616178118434257ull,
+ 14298624469782231968ull, 5060558115506829193ull}},
+{{1154717988803031506ull, 491526148938491206ull, 4038222531945626249ull,
+ 6325697644383536492ull}},
+{{10666769522858565191ull, 5226093704600501911ull,
+ 5047778164932032811ull, 7907122055479420615ull}},
+{{13584259979427685100ull, 960465556161619742ull,
+ 10072390380723602363ull, 4941951284674637884ull}},
+{{7756952937429830567ull, 15035640000484188390ull,
+ 12590487975904502953ull, 6177439105843297355ull}},
+{{472819134932512401ull, 4959491945323071776ull,
+ 11126423951453240788ull, 7721798882304121694ull}},
+{{295511959332820251ull, 12323054502681695668ull,
+ 2342328951230887588ull, 4826124301440076059ull}},
+{{369389949166025313ull, 15403818128352119585ull,
+ 16762969244320773197ull, 6032655376800095073ull}},
+{{5073423454884919546ull, 5419714605157985769ull,
+ 7118653500118802785ull, 7540819221000118842ull}},
+{{14700104705371544476ull, 14916536674292210865ull,
+ 9060844456001639644ull, 4713012013125074276ull}},
+{{4540072826432266883ull, 198926769155711966ull,
+ 11326055570002049556ull, 5891265016406342845ull}},
+{{14898463069895109412ull, 248658461444639957ull, 322511407220398233ull,
+ 7364081270507928557ull}},
+{{4788020782086723053ull, 4922509095233187851ull,
+ 5014825277452885695ull, 9205101588134910696ull}},
+{{686669979590507956ull, 9994097212161824263ull, 3134265798408053559ull,
+ 5753188492584319185ull}},
+{{14693395529770298657ull, 7880935496774892424ull,
+ 8529518266437454853ull, 7191485615730398981ull}},
+{{18366744412212873321ull, 14462855389396003434ull,
+ 15273583851474206470ull, 8989357019662998726ull}},
+{{16090901276060433730ull, 4427598599945114242ull,
+ 4934303888743991140ull, 5618348137289374204ull}},
+{{10890254558220766354ull, 5534498249931392803ull,
+ 6167879860929988925ull, 7022935171611717755ull}},
+{{9001132179348570039ull, 11529808830841628908ull,
+ 3098163807735098252ull, 8778668964514647194ull}},
+{{14849079648947632082ull, 16429502556130793875ull,
+ 6548038398261824311ull, 5486668102821654496ull}},
+{{13949663542757152199ull, 15925192176736104440ull,
+ 8185047997827280389ull, 6858335128527068120ull}},
+{{17437079428446440248ull, 6071432165637966838ull,
+ 10231309997284100487ull, 8572918910658835150ull}},
+{{6286488624351637251ull, 10712174131164811130ull,
+ 1782882729875174900ull, 5358074319161771969ull}},
+{{17081482817294322372ull, 13390217663956013912ull,
+ 6840289430771356529ull, 6697592898952214961ull}},
+{{2905109447908351349ull, 2902714024662853679ull,
+ 13162047806891583566ull, 8371991123690268701ull}},
+{{8733222432583801449ull, 15649254320696447261ull,
+ 10532122888520933680ull, 5232494452306417938ull}},
+{{15528214059157139716ull, 1114823827161007460ull,
+ 3941781573796391293ull, 6540618065383022423ull}},
+{{963523500236873028ull, 6005215802378647230ull, 315540948818101212ull,
+ 8175772581728778029ull}},
+{{14437260242930209355ull, 12976631913341430326ull,
+ 2503056102225007209ull, 5109857863580486268ull}},
+{{8823203266807985885ull, 2385731836394624196ull,
+ 3128820127781259012ull, 6387322329475607835ull}},
+{{11029004083509982357ull, 2982164795493280245ull,
+ 17746083215008737477ull, 7984152911844509793ull}},
+{{9198970561407432925ull, 4169696006396994105ull,
+ 4173772981739379067ull, 4990095569902818621ull}},
+{{16110399220186679060ull, 600433989568854727ull,
+ 9828902245601611738ull, 6237619462378523276ull}},
+{{15526313006805960921ull, 9973914523815844217ull,
+ 12286127807002014672ull, 7797024327973154095ull}},
+{{2786416601612643720ull, 6233696577384902636ull,
+ 14596358907017341026ull, 4873140204983221309ull}},
+{{3483020752015804650ull, 17015492758585904103ull,
+ 4410390578489512570ull, 6091425256229026637ull}},
+{{18188833995301919524ull, 12045993911377604320ull,
+ 10124674241539278617ull, 7614281570286283296ull}},
+{{11368021247063699703ull, 611217166969920844ull,
+ 6327921400962049136ull, 4758925981428927060ull}},
+{{14210026558829624628ull, 764021458712401055ull,
+ 7909901751202561420ull, 5948657476786158825ull}},
+{{13150847180109642881ull, 955026823390501319ull,
+ 14499063207430589679ull, 7435821845982698531ull}},
+{{15136808515209608657ull, 7514420792260145180ull,
+ 6756071495430424597ull, 4647388653739186582ull}},
+{{474266570302459205ull, 14004712008752569380ull,
+ 17668461406142806554ull, 5809235817173983227ull}},
+{{592833212878074006ull, 8282517974085935917ull,
+ 17473890739251120289ull, 7261544771467479034ull}},
+{{5352727534524980412ull, 14964833486034807800ull,
+ 12618991387209124553ull, 9076930964334348793ull}},
+{{3345454709078112758ull, 2435491901130673019ull, 969340589364620990ull,
+ 5673081852708967996ull}},
+{{18016876441629804659ull, 12267736913268117081ull,
+ 1211675736705776237ull, 7091352315886209995ull}},
+{{8686037496755092111ull, 1499613086302982640ull,
+ 15349652726164384009ull, 8864190394857762493ull}},
+{{5428773435471932570ull, 12466473225007833910ull,
+ 11899375963066433957ull, 5540118996786101558ull}},
+{{16009338831194691520ull, 1748033475977628675ull,
+ 5650847916978266639ull, 6925148745982626948ull}},
+{{15399987520565976496ull, 16020099900254199556ull,
+ 7063559896222833298ull, 8656435932478283685ull}},
+{{401620163498959502ull, 14624248456086262627ull,
+ 6720567944352964763ull, 5410272457798927303ull}},
+{{14337083259655863090ull, 13668624551680440379ull,
+ 3789023912013818050ull, 6762840572248659129ull}},
+{{13309668056142440958ull, 7862408652745774666ull,
+ 9347965908444660467ull, 8453550715310823911ull}},
+{{12930228553516413503ull, 2608162398752415214ull,
+ 12760007720418994648ull, 5283469197069264944ull}},
+{{6939413655040741070ull, 3260202998440519018ull,
+ 15950009650523743310ull, 6604336496336581180ull}},
+{{17897639105655702146ull, 13298625784905424580ull,
+ 1490767989445127521ull, 8255420620420726476ull}},
+{{1962652404180038033ull, 1394112087924808507ull,
+ 10155102030257980509ull, 5159637887762954047ull}},
+{{16288373560507211254ull, 6354326128333398537ull,
+ 8082191519395087732ull, 6449547359703692559ull}},
+{{6525408895351850355ull, 7942907660416748172ull,
+ 5491053380816471761ull, 8061934199629615699ull}},
+{{13301752596449682280ull, 16493532333828937367ull,
+ 1126065353796600898ull, 5038708874768509812ull}},
+{{12015504727134714946ull, 11393543380431395901ull,
+ 1407581692245751123ull, 6298386093460637265ull}},
+{{1184322853636229970ull, 9630243207111856973ull,
+ 6371163133734576808ull, 7872982616825796581ull}},
+{{3046044792736337684ull, 6018902004444910608ull,
+ 6287819967797804457ull, 4920614135516122863ull}},
+{{3807555990920422104ull, 12135313523983526164ull,
+ 3248088941319867667ull, 6150767669395153579ull}},
+{{4759444988650527630ull, 10557455886552019801ull,
+ 17895169231931998296ull, 7688459586743941973ull}},
+{{14503868163975049529ull, 6598409929095012375ull,
+ 13490323779171192887ull, 4805287241714963733ull}},
+{{13518149186541424007ull, 3636326392941377565ull,
+ 3027846668681827397ull, 6006609052143704667ull}},
+{{3062628427894616297ull, 9157094009604109861ull,
+ 17619866391134447958ull, 7508261315179630833ull}},
+{{4219985776647829138ull, 1111497737575180759ull,
+ 4094887466817948118ull, 4692663321987269271ull}},
+{{663296202382398518ull, 10612744208823751757ull, 506923315095047243ull,
+ 5865829152484086589ull}},
+{{5440806271405386052ull, 8654244242602301792ull,
+ 5245340162296196958ull, 7332286440605108236ull}},
+{{6801007839256732564ull, 1594433266398101432ull,
+ 6556675202870246198ull, 9165358050756385295ull}},
+{{4250629899535457853ull, 14831578846780977107ull,
+ 11015451029434985729ull, 5728348781722740809ull}},
+{{701601355991934412ull, 4704415503194057672ull,
+ 18380999805221120066ull, 7160435977153426011ull}},
+{{877001694989918015ull, 15103891415847347898ull,
+ 18364563738099012178ull, 8950544971441782514ull}},
+{{5159812077796086663ull, 14051618153331980340ull,
+ 16089538354739270515ull, 5594090607151114071ull}},
+{{6449765097245108329ull, 12952836673237587521ull,
+ 15500236924996700240ull, 6992613258938892589ull}},
+{{12673892389983773315ull, 16191045841546984401ull,
+ 5540238100963711588ull, 8740766573673615737ull}},
+{{1003653716098776466ull, 896031614112089443ull,
+ 14991863859170789503ull, 5462979108546009835ull}},
+{{15089625200405634295ull, 14955097572922275515ull,
+ 14128143805536098974ull, 6828723885682512294ull}},
+{{14250345482079654964ull, 9470499929298068586ull,
+ 8436807720065347910ull, 8535904857103140368ull}},
+{{13518151944727172257ull, 1307376437383904962ull,
+ 5273004825040842444ull, 5334940535689462730ull}},
+{{7674317894054189513ull, 1634220546729881203ull,
+ 15814628068155828863ull, 6668675669611828412ull}},
+{{4981211349140348987ull, 15877833738694515216ull,
+ 1321541011485234462ull, 8335844587014785516ull}},
+{{3113257093212718117ull, 5311960068256684106ull,
+ 10049335169033047347ull, 5209902866884240947ull}},
+{{13114943403370673454ull, 2028264066893467228ull,
+ 7949982942863921280ull, 6512378583605301184ull}},
+{{16393679254213341818ull, 2535330083616834035ull,
+ 9937478678579901600ull, 8140473229506626480ull}},
+{{7940206524669644684ull, 1584581302260521272ull,
+ 6210924174112438500ull, 5087795768441641550ull}},
+{{9925258155837055855ull, 1980726627825651590ull,
+ 16987027254495323933ull, 6359744710552051937ull}},
+{{3183200657941544011ull, 7087594303209452392ull,
+ 7398726012836991204ull, 7949680888190064922ull}},
+{{1989500411213465007ull, 13653118476360683553ull,
+ 9235889776450507406ull, 4968550555118790576ull}},
+{{7098561532444219163ull, 7843026058596078633ull,
+ 11544862220563134258ull, 6210688193898488220ull}},
+{{13484887933982661857ull, 580410536390322483ull,
+ 14431077775703917823ull, 7763360242373110275ull}},
+{{6122211949525469709ull, 7280285612885033408ull,
+ 6713580600601254687ull, 4852100151483193922ull}},
+{{7652764936906837136ull, 4488670997678903856ull,
+ 17615347787606344167ull, 6065125189353992402ull}},
+{{9565956171133546420ull, 999152728671241916ull,
+ 12795812697653154401ull, 7581406486692490503ull}},
+{{15202094643813242321ull, 12153685501487995957ull,
+ 14914911963674303356ull, 4738379054182806564ull}},
+{{5167560249484389189ull, 15192106876859994947ull,
+ 196895880883327579ull, 5922973817728508206ull}},
+{{1847764293428098582ull, 14378447577647605780ull,
+ 9469491887958935282ull, 7403717272160635257ull}},
+{{10378224720247337422ull, 13598215754457141516ull,
+ 17447647476042804311ull, 4627323295100397035ull}},
+{{12972780900309171777ull, 12386083674644038991ull,
+ 17197873326626117485ull, 5784154118875496294ull}},
+{{11604290106959076817ull, 1647546538022885027ull,
+ 12273969621427871049ull, 7230192648594370368ull}},
+{{9893676615271458117ull, 6671119190955994188ull,
+ 15342462026784838811ull, 9037740810742962960ull}},
+{{15406919921399437132ull, 1863606485133802415ull,
+ 9589038766740524257ull, 5648588006714351850ull}},
+{{14646963883321908510ull, 6941194124844640923ull,
+ 2762926421570879513ull, 7060735008392939813ull}},
+{{13697018835724997734ull, 13288178674483189058ull,
+ 8065344045390987295ull, 8825918760491174766ull}},
+{{13172322790755511488ull, 15222640699193075017ull,
+ 429154009941979155ull, 5516199225306984229ull}},
+{{2630345433162225648ull, 14416614855563955868ull,
+ 5148128530854861848ull, 6895249031633730286ull}},
+{{3287931791452782059ull, 18020768569454944835ull,
+ 15658532700423353118ull, 8619061289542162857ull}},
+{{18195858434153846451ull, 6651294337481952617ull,
+ 2869053910123513843ull, 5386913305963851786ull}},
+{{8909764987410144352ull, 3702431903425052868ull,
+ 12809689424509168112ull, 6733641632454814732ull}},
+{{11137206234262680440ull, 4628039879281316085ull,
+ 16012111780636460140ull, 8417052040568518415ull}},
+{{9266596905627869227ull, 12115896961405598361ull,
+ 16925098890538869443ull, 5260657525355324009ull}},
+{{16194932150462224438ull, 10533185183329610047ull,
+ 7321315557891423092ull, 6575821906694155012ull}},
+{{15631979169650392643ull, 13166481479162012559ull,
+ 9151644447364278865ull, 8219777383367693765ull}},
+{{16687516008672577258ull, 1311521896835175993ull,
+ 8025620788816368243ull, 5137360864604808603ull}},
+{{7024336955558557860ull, 15474460426326133704ull,
+ 5420339967593072399ull, 6421701080756010754ull}},
+{{8780421194448197325ull, 14731389514480279226ull,
+ 15998796996346116307ull, 8027126350945013442ull}},
+{{10099449264957511233ull, 6901275437336480564ull,
+ 14610934141143710596ull, 5016953969340633401ull}},
+{{12624311581196889041ull, 8626594296670600705ull,
+ 4428609621147474533ull, 6271192461675791752ull}},
+{{1945331421213947589ull, 15394928889265638786ull,
+ 5535762026434343166ull, 7838990577094739690ull}},
+{{5827518156686105147ull, 5010144537363636337ull,
+ 8071537284948852383ull, 4899369110684212306ull}},
+{{11896083714285019338ull, 1650994653277157517ull,
+ 866049569331289671ull, 6124211388355265383ull}},
+{{1035046587574110460ull, 15898801371878610609ull,
+ 14917620016946275800ull, 7655264235444081728ull}},
+{{12176119163302288798ull, 9936750857424131630ull,
+ 9323512510591422375ull, 4784540147152551080ull}},
+{{5996776917273085189ull, 7809252553352776634ull,
+ 11654390638239277969ull, 5980675183940688850ull}},
+{{16719343183446132294ull, 14373251710118358696ull,
+ 5344616260944321653ull, 7475843979925861063ull}},
+{{10449589489653832684ull, 11289125328037668137ull,
+ 10257914190731282889ull, 4672402487453663164ull}},
+{{17673672880494678759ull, 276348604764921459ull,
+ 12822392738414103612ull, 5840503109317078955ull}},
+{{17480405082190960545ull, 345435755956151824ull,
+ 11416304904590241611ull, 7300628886646348694ull}},
+{{3403762279029149065ull, 14266852750227353493ull,
+ 5047009093883026205ull, 9125786108307935868ull}},
+{{4433194433606912118ull, 11222625978105789885ull,
+ 12377752720531667186ull, 5703616317692459917ull}},
+{{10153179060436028051ull, 4804910435777461548ull,
+ 1637132845382420271ull, 7129520397115574897ull}},
+{{12691473825545035063ull, 1394452026294439031ull,
+ 6658102075155413243ull, 8911900496394468621ull}},
+{{14849700168606728771ull, 17012433580929882058ull,
+ 6467156806185827228ull, 5569937810246542888ull}},
+{{9338753173903635155ull, 2818797902452800957ull,
+ 8083946007732284036ull, 6962422262808178610ull}},
+{{16285127485806931848ull, 3523497378066001196ull,
+ 881560472810579237ull, 8703027828510223263ull}},
+{{954832641774556597ull, 4508028870504944700ull, 7468504323147693879ull,
+ 5439392392818889539ull}},
+{{1193540802218195746ull, 1023350069703792971ull,
+ 4723944385507229445ull, 6799240491023611924ull}},
+{{15326984058054908395ull, 5890873605557129117ull,
+ 5904930481884036806ull, 8499050613779514905ull}},
+{{11885208045498011699ull, 17516854058755369410ull,
+ 15219796597245992763ull, 5311906633612196815ull}},
+{{5633138020017738816ull, 17284381555016823859ull,
+ 14413059728130103050ull, 6639883292015246019ull}},
+{{2429736506594785615ull, 12382104906916254016ull,
+ 13404638641735240909ull, 8299854115019057524ull}},
+{{1518585316621741010ull, 10044658576036352712ull,
+ 17601271187939301376ull, 5187408821886910952ull}},
+{{1898231645777176262ull, 12555823220045440890ull,
+ 3554844911214575104ull, 6484261027358638691ull}},
+{{11596161594076246136ull, 15694779025056801112ull,
+ 18278614194300382592ull, 8105326284198298363ull}},
+{{7247600996297653835ull, 9809236890660500695ull,
+ 9118290862224045168ull, 5065828927623936477ull}},
+{{4447815226944679390ull, 12261546113325625869ull,
+ 16009549596207444364ull, 6332286159529920596ull}},
+{{10171455052108237141ull, 15326932641657032336ull,
+ 1565192921549753839ull, 7915357699412400746ull}},
+{{6357159407567648213ull, 16496861928676727066ull,
+ 5589931594395984053ull, 4947098562132750466ull}},
+{{17169821296314336074ull, 6786019355563745120ull,
+ 16210786529849755875ull, 6183873202665938082ull}},
+{{3015532546683368477ull, 3870838176027293497ull,
+ 11040111125457419036ull, 7729841503332422603ull}},
+{{13413922887745575058ull, 11642645896871834243ull,
+ 4594226444197192945ull, 4831150939582764127ull}},
+{{12155717591254580919ull, 718249315807629092ull,
+ 1131097036819103278ull, 6038938674478455159ull}},
+{{15194646989068226148ull, 10121183681614312173ull,
+ 15248929351306042809ull, 7548673343098068948ull}},
+{{11802497377381335295ull, 17854954847077414868ull,
+ 307208807711500947ull, 4717920839436293093ull}},
+{{14753121721726669118ull, 17707007540419380681ull,
+ 4995697028066764088ull, 5897401049295366366ull}},
+{{4606344096876172686ull, 3687015351814674236ull,
+ 15467993321938230919ull, 7371751311619207957ull}},
+{{5757930121095215857ull, 18443827245050506507ull,
+ 5499933597140624936ull, 9214689139524009947ull}},
+{{1292863316470815959ull, 11527392028156566567ull,
+ 1131615488999196633ull, 5759180712202506217ull}},
+{{15451137200870683660ull, 574181979913544496ull,
+ 6026205379676383696ull, 7198975890253132771ull}},
+{{867177427378802959ull, 717727474891930621ull, 2921070706168091716ull,
+ 8998719862816415964ull}},
+{{2847828901325445802ull, 9671951708662232446ull,
+ 11049041228209833130ull, 5624199914260259977ull}},
+{{12783158163511583060ull, 2866567598973014749ull,
+ 18422987553689679317ull, 7030249892825324971ull}},
+{{2143889649107315113ull, 8194895517143656341ull,
+ 18417048423684711242ull, 8787812366031656214ull}},
+{{3645774039905765898ull, 9733495716642173117ull,
+ 6898969246375556622ull, 5492382728769785134ull}},
+{{9168903568309595276ull, 2943497608947940588ull,
+ 17847083594824221586ull, 6865478410962231417ull}},
+{{11461129460386994095ull, 12902744048039701543ull,
+ 8473796438248113270ull, 8581848013702789272ull}},
+{{14080734940382953166ull, 3452529011597425560ull,
+ 5296122773905070794ull, 5363655008564243295ull}},
+{{17600918675478691457ull, 13539033301351557758ull,
+ 2008467448953950588ull, 6704568760705304119ull}},
+{{12777776307493588513ull, 16923791626689447198ull,
+ 16345642366474601947ull, 8380710950881630148ull}},
+{{3374424173756104917ull, 8271526757467210547ull, 992654442191850409ull,
+ 5237944344301018843ull}},
+{{18053088272477294858ull, 14951094465261401087ull,
+ 15075876108021976723ull, 6547430430376273553ull}},
+{{17954674322169230668ull, 14077182063149363455ull,
+ 5009787079745307192ull, 8184288037970341942ull}},
+{{18139200478996851024ull, 8798238789468352159ull,
+ 16966174980122980707ull, 5115180023731463713ull}},
+{{18062314580318675876ull, 6386112468408052295ull,
+ 7372660669871562172ull, 6393975029664329642ull}},
+{{17966207206970956941ull, 7982640585510065369ull,
+ 18439197874194228523ull, 7992468787080412052ull}},
+{{4311350476715766232ull, 2683307356730096904ull,
+ 2301126634516617019ull, 4995292991925257533ull}},
+{{5389188095894707790ull, 17189192251194784842ull,
+ 7488094311573159177ull, 6244116239906571916ull}},
+{{15959857156723160545ull, 7651432258711317340ull,
+ 9360117889466448972ull, 7805145299883214895ull}},
+{{751538686097199533ull, 14005517198549349146ull,
+ 12767602708557612463ull, 4878215812427009309ull}},
+{{10162795394476275224ull, 12895210479759298528ull,
+ 2124445330414851867ull, 6097769765533761637ull}},
+{{12703494243095344030ull, 11507327081271735256ull,
+ 7267242681445952738ull, 7622212206917202046ull}},
+{{7939683901934590019ull, 11803765444222222439ull,
+ 18377084731185884173ull, 4763882629323251278ull}},
+{{5312918858990849620ull, 919648749995614337ull,
+ 13747983877127579409ull, 5954853286654064098ull}},
+{{11252834592165949928ull, 5761246955921905825ull,
+ 7961607809554698453ull, 7443566608317580123ull}},
+{{115492592462636849ull, 5906622356664885093ull, 2670161871757992581ull,
+ 4652229130198487577ull}},
+{{4756051759005683966ull, 11994963964258494270ull,
+ 7949388358124878630ull, 5815286412748109471ull}},
+{{15168436735611880765ull, 5770332918468342029ull,
+ 5325049429228710384ull, 7269108015935136839ull}},
+{{5125487864232687244ull, 7212916148085427537ull,
+ 2044625768108500076ull, 9086385019918921049ull}},
+{{14732644961213899288ull, 13731444629408168018ull,
+ 12807106151136282307ull, 5678990637449325655ull}},
+{{9192434164662598301ull, 12552619768332822119ull,
+ 11397196670492964980ull, 7098738296811657069ull}},
+{{6878856687400859973ull, 15690774710416027649ull,
+ 411437782834042513ull, 8873422871014571337ull}},
+{{15828500475694007243ull, 2889205166368935424ull,
+ 11786363660339746331ull, 5545889294384107085ull}},
+{{1338881520907957438ull, 17446564513243332993ull,
+ 897896520142519201ull, 6932361617980133857ull}},
+{{6285287919562334701ull, 7973147586272002529ull,
+ 5734056668605536906ull, 8665452022475167321ull}},
+{{15457519995794928948ull, 9594903259847389484ull,
+ 15113000463946930326ull, 5415907514046979575ull}},
+{{875155921034109569ull, 2770257037954461048ull,
+ 14279564561506275004ull, 6769884392558724469ull}},
+{{1093944901292636962ull, 3462821297443076310ull,
+ 4014397646600680043ull, 8462355490698405587ull}},
+{{14518773618590061813ull, 18305164375397780357ull,
+ 203155519911731074ull, 5288972181686503492ull}},
+{{4313408967955413554ull, 13658083432392449639ull,
+ 253944399889663843ull, 6611215227108129365ull}},
+{{780075191516879039ull, 12460918272063174145ull,
+ 4929116518289467708ull, 8264019033885161706ull}},
+{{12016762040766519159ull, 17011445956894259648ull,
+ 7692383842358305221ull, 5165011896178226066ull}},
+{{15020952550958148949ull, 7429249390835660848ull,
+ 392107766093105719ull, 6456264870222782583ull}},
+{{329446614988134570ull, 4674875720117188157ull,
+ 14325192762898545861ull, 8070331087778478228ull}},
+{{2511747143581278059ull, 5227640334286936550ull,
+ 18176617513666366971ull, 5043956929861548892ull}},
+{{12363055966331373381ull, 1922864399431282783ull,
+ 4274027818373407098ull, 6304946162326936116ull}},
+{{10842133939486828822ull, 11626952536143879287ull,
+ 5342534772966758872ull, 7881182702908670145ull}},
+{{13693862739820349870ull, 7266845335089924554ull,
+ 14868299279172694055ull, 4925739189317918840ull}},
+{{7893956387920661530ull, 4471870650435017789ull, 138630025256315953ull,
+ 6157173986647398551ull}},
+{{14479131503328214816ull, 10201524331471160140ull,
+ 14008345586852558653ull, 7696467483309248188ull}},
+{{18272829226434910068ull, 8681795716383169039ull,
+ 17978588028637624966ull, 4810292177068280117ull}},
+{{18229350514616249681ull, 1628872608624185491ull,
+ 8638176980514867496ull, 6012865221335350147ull}},
+{{18175002124842924197ull, 2036090760780231864ull,
+ 6186035207216196466ull, 7516081526669187684ull}},
+{{11359376328026827623ull, 5884242743915032819ull,
+ 13089644041364898599ull, 4697550954168242302ull}},
+{{9587534391606146625ull, 2743617411466403120ull,
+ 7138683014851347441ull, 5871938692710302878ull}},
+{{11984417989507683281ull, 8041207782760391804ull,
+ 18146725805418960109ull, 7339923365887878597ull}},
+{{14980522486884604101ull, 14663195746877877659ull,
+ 8848349201491536424ull, 9174904207359848247ull}},
+{{7056983545089183612ull, 9164497341798673537ull,
+ 12447747278573292121ull, 5734315129599905154ull}},
+{{13432915449788867418ull, 16067307695675729825ull,
+ 6336312061361839343ull, 7167893911999881443ull}},
+{{2956086256953920561ull, 15472448601167274378ull,
+ 3308704058274911275ull, 8959867389999851804ull}},
+{{6459239929023588255ull, 7364437366515852534ull,
+ 11291312073276595355ull, 5599917118749907377ull}},
+{{17297421948134261126ull, 4593860689717427763ull,
+ 279082036313580482ull, 6999896398437384222ull}},
+{{17010091416740438504ull, 14965697899001560512ull,
+ 9572224582246751410ull, 8749870498046730277ull}},
+{{10631307135462774065ull, 13965247205303363224ull,
+ 8288483373117913583ull, 5468669061279206423ull}},
+{{13289133919328467581ull, 12844872988201816126ull,
+ 5748918197970004075ull, 6835836326599008029ull}},
+{{7388045362305808668ull, 11444405216824882254ull,
+ 11797833765889892998ull, 8544795408248760036ull}},
+{{5842333013742514ull, 2541067242088163505ull, 16597018140535958932ull,
+ 5340497130155475022ull}},
+{{4618988934694566046ull, 3176334052610204381ull,
+ 11522900638815172857ull, 6675621412694343778ull}},
+{{10385422186795595462ull, 8582103584190143380ull,
+ 5180253761664190263ull, 8344526765867929723ull}},
+{{15714260903602022972ull, 12281343767759921468ull,
+ 931815591826424962ull, 5215329228667456077ull}},
+{{1196082055792977098ull, 6128307672845126028ull,
+ 5776455508210419107ull, 6519161535834320096ull}},
+{{1495102569741221373ull, 3048698572629019631ull,
+ 7220569385263023884ull, 8148951919792900120ull}},
+{{7851968133729345214ull, 11128808644747913077ull,
+ 4512855865789389927ull, 5093094949870562575ull}},
+{{14426646185589069422ull, 9299324787507503442ull,
+ 1029383813809349505ull, 6366368687338203219ull}},
+{{8809935695131560969ull, 16235842002811767207ull,
+ 15121787822543850593ull, 7957960859172754023ull}},
+{{12423738837098307462ull, 3229872224116272648ull,
+ 16368646416730988477ull, 4973725536982971264ull}},
+{{15529673546372884327ull, 8649026298572728714ull,
+ 2014063947204183980ull, 6217156921228714081ull}},
+{{10188719896111329601ull, 10811282873215910893ull,
+ 7129265952432617879ull, 7771446151535892601ull}},
+{{8673792944283274953ull, 13674580823401026164ull,
+ 15985006266338855934ull, 4857153844709932875ull}},
+{{10842241180354093691ull, 7869853992396506897ull,
+ 15369571814496182014ull, 6071442305887416094ull}},
+{{18164487493870005017ull, 613945453640857813ull,
+ 9988592731265451710ull, 7589302882359270118ull}},
+{{13658647692882447088ull, 14218773963807699845ull,
+ 1631184438613519414ull, 4743314301474543824ull}},
+{{3238251560820895148ull, 8550095417904848999ull,
+ 2038980548266899268ull, 5929142876843179780ull}},
+{{17882872506308282647ull, 10687619272381061248ull,
+ 2548725685333624085ull, 7411428596053974725ull}},
+{{11176795316442676654ull, 8985605054451857232ull,
+ 3898796562547209005ull, 4632142872533734203ull}},
+{{13970994145553345818ull, 15843692336492209444ull,
+ 261809684756623352ull, 5790178590667167754ull}},
+{{17463742681941682272ull, 1357871346905710189ull,
+ 9550634142800554999ull, 7237723238333959692ull}},
+{{7994620297144939128ull, 15532397238914301449ull,
+ 11938292678500693748ull, 9047154047917449615ull}},
+{{16525852731784056715ull, 484376237466662597ull,
+ 14378961951704015449ull, 5654471279948406009ull}},
+{{6822257859447907182ull, 5217156315260716151ull,
+ 4138644384347855599ull, 7068089099935507512ull}},
+{{3916136305882496073ull, 1909759375648507285ull,
+ 5173305480434819499ull, 8835111374919384390ull}},
+{{4753428200390253998ull, 17334500674276174717ull,
+ 17068373980553925898ull, 5521944609324615243ull}},
+{{10553471268915205401ull, 12444753805990442588ull,
+ 16723781457265019469ull, 6902430761655769054ull}},
+{{13191839086144006752ull, 1720884202205889523ull,
+ 11681354784726498529ull, 8628038452069711318ull}},
+{{5939056419626310268ull, 12604767672447150712ull,
+ 2689160722026673676ull, 5392524032543569574ull}},
+{{7423820524532887835ull, 15755959590558938390ull,
+ 12584822939388117903ull, 6740655040679461967ull}},
+{{56403618811333985ull, 15083263469771285084ull,
+ 11119342655807759475ull, 8425818800849327459ull}},
+{{9258624298611859549ull, 7121196659393359225ull,
+ 4643746150666155720ull, 5266136750530829662ull}},
+{{16184966391692212340ull, 8901495824241699031ull,
+ 15028054725187470458ull, 6582670938163537077ull}},
+{{15619521971187877521ull, 1903497743447347981ull,
+ 4950010351202174361ull, 8228338672704421347ull}},
+{{12068044241206117403ull, 12718901135723062248ull,
+ 787913460287665023ull, 5142711670440263342ull}},
+{{15085055301507646754ull, 11286940401226439906ull,
+ 10208263862214357087ull, 6428389588050329177ull}},
+{{9632947090029782634ull, 9496989483105661979ull,
+ 17372015846195334263ull, 8035486985062911471ull}},
+{{3714748922054920194ull, 12853147454582120593ull,
+ 17775038931513165770ull, 5022179365664319669ull}},
+{{9255122170996038147ull, 6843062281372874933ull,
+ 8383740609109293501ull, 6277724207080399587ull}},
+{{16180588732172435587ull, 13165513870143481570ull,
+ 5867989742959228972ull, 7847155258850499484ull}},
+{{14724553976035160146ull, 17451818205694451789ull,
+ 12890865626204293915ull, 4904472036781562177ull}},
+{{4570634414761786471ull, 17203086738690676833ull,
+ 2278523977473203682ull, 6130590045976952722ull}},
+{{10324979036879620992ull, 12280486386508570233ull,
+ 12071527008696280411ull, 7663237557471190902ull}},
+{{17982326944118232880ull, 5369460982354162443ull,
+ 2933018362007787353ull, 4789523473419494314ull}},
+{{17866222661720403196ull, 11323512246370090958ull,
+ 12889644989364509999ull, 5986904341774367892ull}},
+{{13109406290295728187ull, 9542704289535225794ull,
+ 16112056236705637499ull, 7483630427217959865ull}},
+{{12805064949862218021ull, 3658347171745822169ull,
+ 3152506120299941581ull, 4677269017011224916ull}},
+{{2171273132045608814ull, 9184619983109665616ull,
+ 3940632650374926976ull, 5846586271264031145ull}},
+{{2714091415057011018ull, 11480774978887082020ull,
+ 9537476831396046624ull, 7308232839080038931ull}},
+{{3392614268821263772ull, 14350968723608852525ull,
+ 7310160020817670376ull, 9135291048850048664ull}},
+{{4426226927226983810ull, 8969355452255532828ull,
+ 4568850013011043985ull, 5709556905531280415ull}},
+{{5532783659033729762ull, 15823380333746803939ull,
+ 1099376497836417077ull, 7136946131914100519ull}},
+{{2304293555364774299ull, 5944167361901341212ull,
+ 15209278677577685059ull, 8921182664892625648ull}},
+{{10663555508957759745ull, 1409261591974644305ull,
+ 9505799173486053162ull, 5575739165557891030ull}},
+{{17941130404624587585ull, 10984949026823081189ull,
+ 2658876930002790644ull, 6969673956947363788ull}},
+{{8591354950498570769ull, 13731186283528851487ull,
+ 3323596162503488305ull, 8712092446184204735ull}},
+{{12287125871702688587ull, 1664462399564450323ull,
+ 8994776629205762047ull, 5445057778865127959ull}},
+{{10747221321200972829ull, 15915636054737726616ull,
+ 6631784768079814654ull, 6806322223581409949ull}},
+{{13434026651501216037ull, 10671173031567382462ull,
+ 12901416978527156222ull, 8507902779476762436ull}},
+{{3784580638760872119ull, 2057797126302226135ull,
+ 17286757648434248447ull, 5317439237172976522ull}},
+{{119039780023702245ull, 16407304463159946381ull,
+ 12385075023688034750ull, 6646799046466220653ull}},
+{{4760485743457015710ull, 11285758542095157168ull,
+ 1646285724327879726ull, 8308498808082775817ull}},
+{{2975303589660634819ull, 2441913070382085326ull,
+ 12558143623773394589ull, 5192811755051734885ull}},
+{{12942501523930569331ull, 7664077356404994561ull,
+ 1862621474434579524ull, 6491014693814668607ull}},
+{{2343068849631047952ull, 9580096695506243202ull,
+ 16163334898325388117ull, 8113768367268335758ull}},
+{{6076104049446792874ull, 8293403443905095953ull,
+ 5490398293025979669ull, 5071105229542709849ull}},
+{{12206816080235878997ull, 14978440323308757845ull,
+ 11474683884709862490ull, 6338881536928387311ull}},
+{{1423462045012685034ull, 9499678367281171499ull,
+ 9731668837459940209ull, 7923601921160484139ull}},
+{{17030564842628785810ull, 17466514025619201946ull,
+ 3776450014198768678ull, 4952251200725302587ull}},
+{{12064834016431206455ull, 12609770495169226625ull,
+ 108876499321072944ull, 6190314000906628234ull}},
+{{1245984465256844356ull, 15762213118961533282ull,
+ 9359467661006116988ull, 7737892501133285292ull}},
+{{5390426309212915627ull, 628011162496182493ull,
+ 15073039324983598926ull, 4836182813208303307ull}},
+{{11349718904943532437ull, 10008385989975003924ull,
+ 14229613137802110753ull, 6045228516510379134ull}},
+{{14187148631179415547ull, 17122168505896142809ull,
+ 8563644385397862633ull, 7556535645637973918ull}},
+{{1949438866846052861ull, 3783826288544007400ull, 740591722446276242ull,
+ 4722834778523733699ull}},
+{{2436798583557566076ull, 13953154897534785058ull,
+ 14760797708340009014ull, 5903543473154667123ull}},
+{{12269370266301733403ull, 8218071585063705514ull,
+ 13839311116997623364ull, 7379429341443333904ull}},
+{{12280042434865971281ull, 14359666777519591754ull,
+ 8649569448123514602ull, 4612143338402083690ull}},
+{{6126681006727688293ull, 8726211435044713885ull,
+ 1588589773299617445ull, 5765179173002604613ull}},
+{{12270037276836998270ull, 15519450312233280260ull,
+ 6597423235051909710ull, 7206473966253255766ull}},
+{{15337546596046247838ull, 10175940853436824517ull,
+ 17470151080669662946ull, 9008092457816569707ull}},
+{{11891809631742598851ull, 10971649051825403227ull,
+ 8613001416204845389ull, 5630057786135356067ull}},
+{{10253076021250860659ull, 18326247333209141938ull,
+ 6154565751828668832ull, 7037572232669195084ull}},
+{{3592972989708800016ull, 4461065092801875807ull,
+ 7693207189785836041ull, 8796965290836493855ull}},
+{{9163137146209081866ull, 14317380729069642139ull,
+ 11725783521257229381ull, 5498103306772808659ull}},
+{{6842235414333964429ull, 4061667856054888962ull,
+ 10045543383144148823ull, 6872629133466010824ull}},
+{{17776166304772231344ull, 465398801641223298ull,
+ 12556929228930186029ull, 8590786416832513530ull}},
+{{15721789958910032494ull, 2596717260239458513ull,
+ 12459766786508754172ull, 5369241510520320956ull}},
+{{5817179393355376905ull, 3245896575299323142ull,
+ 15574708483135942715ull, 6711551888150401195ull}},
+{{16494846278548996939ull, 17892428774406317639ull,
+ 14856699585492540489ull, 8389439860188001494ull}},
+{{17226807951734204943ull, 4265238956362866668ull,
+ 4673751222505449902ull, 5243399912617500934ull}},
+{{3086765865958204563ull, 14554920732308359144ull,
+ 15065561064986588185ull, 6554249890771876167ull}},
+{{3858457332447755704ull, 4358592860103285218ull,
+ 14220265312805847328ull, 8192812363464845209ull}},
+{{7023221851207235219ull, 2724120537564553261ull,
+ 1970136792862572724ull, 5120507727165528256ull}},
+{{13390713332436431928ull, 3405150671955691576ull,
+ 2462670991078215905ull, 6400634658956910320ull}},
+{{16738391665545539909ull, 8868124358372002374ull,
+ 3078338738847769881ull, 8000793323696137900ull}},
+{{5849808772538574540ull, 17071792770050971244ull,
+ 11147333748634631983ull, 5000495827310086187ull}},
+{{7312260965673218174ull, 16728054944136326151ull,
+ 9322481167365902075ull, 6250619784137607734ull}},
+{{4528640188664134814ull, 16298382661743019785ull,
+ 2429729422352601786ull, 7813274730172009668ull}},
+{{14359615163983554019ull, 14798175182016775269ull,
+ 10741952925825151924ull, 4883296706357506042ull}},
+{{4114460899697278811ull, 50974903811417471ull, 4204069120426664098ull,
+ 6104120882946882553ull}},
+{{531390106194210610ull, 9287090666619047647ull, 9866772418960718026ull,
+ 7630151103683603191ull}},
+{{7249647844012463487ull, 10416117685064292683ull,
+ 13084261789491530622ull, 4768844439802251994ull}},
+{{4450373786588191455ull, 3796775069475590046ull,
+ 7131955200009637470ull, 5961055549752814993ull}},
+{{14786339270090015127ull, 13969340873699263365ull,
+ 13526630018439434741ull, 7451319437191018741ull}},
+{{11547305053019953406ull, 11036681055275733555ull,
+ 10759986770738340665ull, 4657074648244386713ull}},
+{{9822445297847553854ull, 18407537337522054848ull,
+ 18061669481850313735ull, 5821343310305483391ull}},
+{{12278056622309442317ull, 18397735653475180656ull,
+ 17965400833885504265ull, 7276679137881854239ull}},
+{{15347570777886802897ull, 9162111511561812108ull,
+ 17845065023929492428ull, 9095848922352317799ull}},
+{{368859699324476003ull, 14949691731580908376ull,
+ 18070694667597014623ull, 5684905576470198624ull}},
+{{461074624155595003ull, 14075428646048747566ull,
+ 4141624260786716663ull, 7106131970587748281ull}},
+{{9799715317049269562ull, 12982599789133546553ull,
+ 9788716344410783733ull, 8882664963234685351ull}},
+{{17654037119224263236ull, 10419967877422160547ull,
+ 13035476742897821689ull, 5551665602021678344ull}},
+{{17455860380602941141ull, 17636645865205088588ull,
+ 16294345928622277111ull, 6939582002527097930ull}},
+{{3373081402044124810ull, 17434121313078972832ull,
+ 11144560373923070581ull, 8674477503158872413ull}},
+{{2108175876277578007ull, 13202168829888051972ull,
+ 9271193242915613065ull, 5421548439474295258ull}},
+{{2635219845346972508ull, 2667652982077901253ull,
+ 2365619516789740524ull, 6776935549342869073ull}},
+{{7905710825111103539ull, 3334566227597376566ull,
+ 7568710414414563559ull, 8471169436678586341ull}},
+{{329383247267051808ull, 9001632919889442210ull, 7036287018222796176ull,
+ 5294480897924116463ull}},
+{{9635101095938590568ull, 11252041149861802762ull,
+ 4183672754351107316ull, 6618101122405145579ull}},
+{{2820504333068462402ull, 14065051437327253453ull,
+ 617904924511496241ull, 8272626403006431974ull}},
+{{4068658217381482953ull, 1873128120688451552ull,
+ 14221248633101848863ull, 5170391501879019983ull}},
+{{5085822771726853692ull, 16176468206142728152ull,
+ 13164874772949923174ull, 6462989377348774979ull}},
+{{6357278464658567114ull, 10997213220823634382ull,
+ 11844407447760016064ull, 8078736721685968724ull}},
+{{17808357095693768159ull, 6873258263014771488ull,
+ 16626126691704785848ull, 5049210451053730452ull}},
+{{3813702295907658582ull, 8591572828768464361ull,
+ 2335914290921430694ull, 6311513063817163066ull}},
+{{9378813888311961132ull, 1516093999105804643ull,
+ 12143264900506564176ull, 7889391329771453832ull}},
+{{3555915670981281755ull, 947558749441127902ull, 7589540562816602610ull,
+ 4930869581107158645ull}},
+{{13668266625581378002ull, 10407820473656185685ull,
+ 14098611721948141166ull, 6163586976383948306ull}},
+{{3250275226694558791ull, 3786403555215456299ull,
+ 8399892615580400650ull, 7704483720479935383ull}},
+{{18172323081179956908ull, 6978188240437048090ull,
+ 12167461912378832262ull, 4815302325299959614ull}},
+{{13492031814620170327ull, 17946107337401085921ull,
+ 5985955353618764519ull, 6019127906624949518ull}},
+{{3029981712993049197ull, 17820948153323969498ull,
+ 16705816228878231457ull, 7523909883281186897ull}},
+{{6505424589048043652ull, 4220563568186399080ull,
+ 3523606115407812805ull, 4702443677050741811ull}},
+{{8131780736310054565ull, 9887390478660386754ull,
+ 18239565699541929718ull, 5878054596313427263ull}},
+{{941353883532792398ull, 3135866061470707635ull,
+ 18187771106000024244ull, 7347568245391784079ull}},
+{{15011750409698154210ull, 3919832576838384543ull,
+ 18123027864072642401ull, 9184460306739730099ull}},
+{{16299873033702428237ull, 13979110406592460099ull,
+ 9021049405831707548ull, 5740287691712331312ull}},
+{{15763155273700647393ull, 17473888008240575124ull,
+ 11276311757289634435ull, 7175359614640414140ull}},
+{{1257200018416257625ull, 17230673991873331002ull,
+ 14095389696612043044ull, 8969199518300517675ull}},
+{{5397436029937548920ull, 1545799208066056068ull,
+ 6503775551168832951ull, 5605749698937823547ull}},
+{{6746795037421936149ull, 15767307065364733797ull,
+ 3518033420533653284ull, 7007187123672279434ull}},
+{{13045179815204808091ull, 1262389757996365630ull,
+ 13620913812521842414ull, 8758983904590349292ull}},
+{{3541551366075617153ull, 14624051654029892231ull,
+ 17736443169680927316ull, 5474364940368968307ull}},
+{{18261997262876685153ull, 18280064567537365288ull,
+ 17558867943673771241ull, 6842956175461210384ull}},
+{{4380752504886304825ull, 9015022654139542899ull,
+ 3501840855882662436ull, 8553695219326512981ull}},
+{{432127306340246564ull, 14857761195691990120ull,
+ 4494493544140357974ull, 5346059512079070613ull}},
+{{540159132925308205ull, 9348829457760211842ull,
+ 10229802948602835372ull, 6682574390098838266ull}},
+{{9898570953011411064ull, 11686036822200264802ull,
+ 3563881648898768407ull, 8353217987623547833ull}},
+{{10798292864059519819ull, 14221302041516247357ull,
+ 13756641076630200014ull, 5220761242264717395ull}},
+{{18109552098501787678ull, 8553255515040533388ull,
+ 12584115327360362114ull, 6525951552830896744ull}},
+{{4190196049417682981ull, 1468197356945890928ull,
+ 15730144159200452643ull, 8157439441038620930ull}},
+{{2618872530886051863ull, 17058524412587039494ull,
+ 14443026117927670805ull, 5098399650649138081ull}},
+{{12496962700462340637ull, 7488097460451635655ull,
+ 4218724592127424795ull, 6372999563311422602ull}},
+{{11009517357150537892ull, 4748435807137156665ull,
+ 14496777777014056802ull, 7966249454139278252ull}},
+{{18410163394287555943ull, 7579458397888110819ull,
+ 18283858147488561309ull, 4978905908837048907ull}},
+{{18401018224432057024ull, 14086009015787526428ull,
+ 18243136665933313732ull, 6223632386046311134ull}},
+{{4554528706830519664ull, 17607511269734408036ull,
+ 13580548795561866357ull, 7779540482557888918ull}},
+{{12069952478623850598ull, 13310537552797698974ull,
+ 3876156978798778569ull, 4862212801598680574ull}},
+{{5864068561425037440ull, 2803113885714960006ull,
+ 14068568260353249020ull, 6077766001998350717ull}},
+{{16553457738636072608ull, 3503892357143700007ull,
+ 3750652270159397563ull, 7597207502497938397ull}},
+{{17263440114288627236ull, 18330833787710670168ull,
+ 4650000678063317428ull, 4748254689061211498ull}},
+{{3132556069151232429ull, 4466798160928786095ull,
+ 15035872884433922594ull, 5935318361326514372ull}},
+{{17750753141721204248ull, 14806869738015758426ull,
+ 348097031832851626ull, 7419147951658142966ull}},
+{{15705906732003140559ull, 13865979604687236920ull,
+ 14052618700177695978ull, 4636967469786339353ull}},
+{{1185639341294374083ull, 8109102469004270343ull,
+ 3730715319939956261ull, 5796209337232924192ull}},
+{{15317107231900131315ull, 14748064104682725832ull,
+ 4663394149924945326ull, 7245261671541155240ull}},
+{{699639966165612528ull, 9211708093998631483ull, 5829242687406181658ull,
+ 9056577089426444050ull}},
+{{16578176043349365494ull, 10369003577176532580ull,
+ 8254962698056251440ull, 5660360680891527531ull}},
+{{2275975980477155252ull, 12961254471470665726ull,
+ 5707017354142926396ull, 7075450851114409414ull}},
+{{12068342012451219872ull, 16201568089338332157ull,
+ 16357143729533433803ull, 8844313563893011767ull}},
+{{9848556766995706372ull, 7820137046622763646ull,
+ 17140743858599477983ull, 5527695977433132354ull}},
+{{3087323921889857157ull, 5163485289851066654ull,
+ 12202557786394571671ull, 6909619971791415443ull}},
+{{13082526939217097255ull, 1842670593886445413ull,
+ 10641511214565826685ull, 8637024964739269304ull}},
+{{10482422346224379736ull, 3457512130392722335ull,
+ 6650944509103641678ull, 5398140602962043315ull}},
+{{8491341914353086766ull, 13545262199845678727ull,
+ 3701994617952164193ull, 6747675753702554144ull}},
+{{6002491374513970554ull, 3096519694524934697ull,
+ 4627493272440205242ull, 8434594692128192680ull}},
+{{15280772155139701356ull, 6547010827505472089ull,
+ 2892183295275128276ull, 5271621682580120425ull}},
+{{5265907138642462983ull, 8183763534381840112ull,
+ 8226915137521298249ull, 6589527103225150531ull}},
+{{6582383923303078729ull, 14841390436404688044ull,
+ 5671957903474234907ull, 8236908879031438164ull}},
+{{13337361988919200014ull, 6970026013539236075ull,
+ 12768345726526172625ull, 5148068049394648852ull}},
+{{12060016467721612113ull, 13324218535351432998ull,
+ 15960432158157715781ull, 6435085061743311065ull}},
+{{5851648547797239333ull, 2820215113907127536ull,
+ 6115482142414981015ull, 8043856327179138832ull}},
+{{3657280342373274583ull, 8680163473833036566ull,
+ 3822176339009363134ull, 5027410204486961770ull}},
+{{13794972464821369037ull, 1626832305436519899ull,
+ 14001092460616479726ull, 6284262755608702212ull}},
+{{12632029562599323392ull, 11256912418650425682ull,
+ 17501365575770599657ull, 7855328444510877765ull}},
+{{12506704495051965024ull, 118041234015434195ull,
+ 13244196494070318738ull, 4909580277819298603ull}},
+{{11021694600387568376ull, 9370923579374068552ull,
+ 11943559599160510518ull, 6136975347274123254ull}},
+{{13777118250484460470ull, 2490282437362809882ull,
+ 5706077462095862340ull, 7671219184092654068ull}},
+{{13222384924980175698ull, 10779798560206531984ull,
+ 12789670450664689770ull, 4794511990057908792ull}},
+{{16527981156225219623ull, 4251376163403389172ull,
+ 15987088063330862213ull, 5993139987572385990ull}},
+{{2213232371571972912ull, 9925906222681624370ull,
+ 10760488042308801958ull, 7491424984465482488ull}},
+{{5994956250659870974ull, 1592005370748627327ull,
+ 6725305026443001224ull, 4682140615290926555ull}},
+{{2882009294897450814ull, 1990006713435784159ull,
+ 3794945264626363626ull, 5852675769113658194ull}},
+{{17437569673903977229ull, 11710880428649506006ull,
+ 13967053617637730340ull, 7315844711392072742ull}},
+{{12573590055525195728ull, 14638600535811882508ull,
+ 8235444985192387117ull, 9144805889240090928ull}},
+{{17081865821558023138ull, 11454968344096120519ull,
+ 5147153115745241948ull, 5715503680775056830ull}},
+{{16740646258520141019ull, 14318710430120150649ull,
+ 15657313431536328243ull, 7144379600968821037ull}},
+{{7090749767868012561ull, 13286702019222800408ull,
+ 5736583734138246592ull, 8930474501211026297ull}},
+{{4431718604917507851ull, 8304188762014250255ull,
+ 15114579879904873880ull, 5581546563256891435ull}},
+{{927962237719496910ull, 10380235952517812819ull,
+ 14281538831453704446ull, 6976933204071114294ull}},
+{{14995010852431534849ull, 3751922903792490215ull,
+ 8628551502462354750ull, 8721166505088892868ull}},
+{{16289410810410791137ull, 16180009870152470096ull,
+ 14616216725893747526ull, 5450729065680558042ull}},
+{{1915019439303937305ull, 11001640300835811813ull,
+ 9046898870512408600ull, 6813411332100697553ull}},
+{{7005460317557309535ull, 13752050376044764766ull,
+ 15920309606567898654ull, 8516764165125871941ull}},
+{{18213470753755482171ull, 3983345466600590074ull,
+ 12256036513318630611ull, 5322977603203669963ull}},
+{{13543466405339576906ull, 367495814823349689ull,
+ 10708359623220900360ull, 6653722004004587454ull}},
+{{3094274951392307421ull, 459369768529187112ull, 4162077492171349642ull,
+ 8317152505005734318ull}},
+{{1933921844620192138ull, 4898792123758129849ull,
+ 16436356487889257238ull, 5198220315628583948ull}},
+{{7029088324202628076ull, 15346862191552438119ull,
+ 2098701536152019931ull, 6497775394535729936ull}},
+{{4174674386825897191ull, 14571891721013159745ull,
+ 2623376920190024914ull, 8122219243169662420ull}},
+{{14138386537834655505ull, 13719118344060612744ull,
+ 10862982611973541379ull, 5076387026981039012ull}},
+{{17672983172293319381ull, 12537211911648378026ull,
+ 13578728264966926724ull, 6345483783726298765ull}},
+{{12867856928511873418ull, 15671514889560472533ull,
+ 3138352275926494693ull, 7931854729657873457ull}},
+{{10348253589533614838ull, 12100539815188989285ull,
+ 13490685218522528943ull, 4957409206036170910ull}},
+{{17547003005344406452ull, 10513988750558848702ull,
+ 7639984486298385371ull, 6196761507545213638ull}},
+{{12710381719825732257ull, 8530799919771172974ull,
+ 326608571018205906ull, 7745951884431517048ull}},
+{{3332302556463694757ull, 9943435968284371013ull, 204130356886378691ull,
+ 4841219927769698155ull}},
+{{8777064214007006350ull, 7817608941928075862ull,
+ 14090221001390137076ull, 6051524909712122693ull}},
+{{1747958230653982129ull, 9772011177410094828ull,
+ 3777718196455507633ull, 7564406137140153367ull}},
+{{10315845931013514639ull, 17636722031949779027ull,
+ 9278602900425774126ull, 4727753835712595854ull}},
+{{8283121395339505394ull, 12822530503082447976ull,
+ 2374881588677441850ull, 5909692294640744818ull}},
+{{10353901744174381743ull, 6804791091998284162ull,
+ 12191974022701578121ull, 7387115368300931022ull}},
+{{11082874608536376494ull, 15782209478567397361ull,
+ 3008297745761098421ull, 4616947105188081889ull}},
+{{18535205388306905ull, 5892703792927082990ull, 8372058200628760931ull,
+ 5771183881485102361ull}},
+{{9246541043590159439ull, 2754193722731465833ull,
+ 15076758769213339068ull, 7213979851856377951ull}},
+{{16169862322915087202ull, 3442742153414332291ull,
+ 14234262443089285931ull, 9017474814820472439ull}},
+{{7800320942608235550ull, 18292614910379815346ull,
+ 15813943054571885562ull, 5635921759262795274ull}},
+{{527029141405518629ull, 13642396601119993375ull,
+ 10544056781360081145ull, 7044902199078494093ull}},
+{{14493844482039061998ull, 3217937696117828006ull,
+ 17791756995127489336ull, 8806127748848117616ull}},
+{{4446966782847025845ull, 2011211060073642504ull,
+ 11119848121954680835ull, 5503829843030073510ull}},
+{{5558708478558782306ull, 16349071880374216842ull,
+ 4676438115588575235ull, 6879787303787591888ull}},
+{{16171757635053253691ull, 15824653832040383148ull,
+ 5845547644485719044ull, 8599734129734489860ull}},
+{{883976485053507749ull, 667036608170463660ull, 12876839314658350211ull,
+ 5374833831084056162ull}},
+{{1104970606316884686ull, 14668853815495243287ull,
+ 6872677106468161955ull, 6718542288855070203ull}},
+{{15216271313178269569ull, 13724381250941666204ull,
+ 3979160364657814540ull, 8398177861068837754ull}},
+{{286797533881642673ull, 17801110318693317186ull,
+ 7098661246338521991ull, 5248861163168023596ull}},
+{{9581868954206829149ull, 17639701879939258578ull,
+ 8873326557923152489ull, 6561076453960029495ull}},
+{{2753964155903760628ull, 8214569294641909511ull,
+ 6479972178976552708ull, 8201345567450036869ull}},
+{{8638756625080932249ull, 14357477846005969252ull,
+ 6355825621074039394ull, 5125840979656273043ull}},
+{{10798445781351165311ull, 8723475270652685757ull,
+ 3333096007915161339ull, 6407301224570341304ull}},
+{{18109743245116344542ull, 6292658069888469292ull,
+ 4166370009893951674ull, 8009126530712926630ull}},
+{{2095217491342939531ull, 8544597312107681212ull,
+ 16439039311465883508ull, 5005704081695579143ull}},
+{{2619021864178674414ull, 10680746640134601515ull,
+ 15937113120904966481ull, 6257130102119473929ull}},
+{{17108835385505506729ull, 17962619318595639797ull,
+ 6086333345849044389ull, 7821412627649342412ull}},
+{{12998865125154635658ull, 13532480083335968825ull,
+ 13027330378010428551ull, 4888382892280839007ull}},
+{{2413523351161130860ull, 12303914085742573128ull,
+ 11672476954085647785ull, 6110478615351048759ull}},
+{{3016904188951413575ull, 1544834551896052698ull,
+ 9978910174179671828ull, 7638098269188810949ull}},
+{{6497251136522021389ull, 10188893631789808744ull,
+ 8542661868075988844ull, 4773811418243006843ull}},
+{{8121563920652526736ull, 12736117039737260930ull,
+ 6066641316667598151ull, 5967264272803758554ull}},
+{{928582863960882612ull, 11308460281244188259ull,
+ 16806673682689273497ull, 7459080341004698192ull}},
+{{16721265354471409296ull, 150258648136535805ull,
+ 10504171051680795936ull, 4661925213127936370ull}},
+{{7066523637807097908ull, 187823310170669757ull, 3906841777746219112ull,
+ 5827406516409920463ull}},
+{{13444840565686260289ull, 234779137713337196ull, 271866203755385986ull,
+ 7284258145512400579ull}},
+{{16806050707107825362ull, 9516845958996447303ull,
+ 14174890809976396194ull, 9105322681890500723ull}},
+{{17421310719583472707ull, 10559714742800167468ull,
+ 6553463747021553669ull, 5690826676181562952ull}},
+{{3329894325769789268ull, 17811329446927597240ull,
+ 8191829683776942086ull, 7113533345226953690ull}},
+{{4162367907212236585ull, 13040789771804720742ull,
+ 1016415067866401800ull, 8891916681533692113ull}},
+{{16436537997289811578ull, 8150493607377950463ull,
+ 12164474463484970885ull, 5557447925958557570ull}},
+{{15933986478184876568ull, 14799803027649825983ull,
+ 5982221042501437798ull, 6946809907448196963ull}},
+{{15305797079303707806ull, 9276381747707506671ull,
+ 2866090284699409344ull, 8683512384310246204ull}},
+{{16483652202205899235ull, 5797738592317191669ull,
+ 11014678464791906648ull, 5427195240193903877ull}},
+{{6769507197475210331ull, 7247173240396489587ull,
+ 18380034099417271214ull, 6783994050242379846ull}},
+{{3850197978416625010ull, 18282338587350387792ull,
+ 13751670587416813209ull, 8479992562802974808ull}},
+{{2406373736510390632ull, 4508932589452910514ull,
+ 8594794117135508256ull, 5299995351751859255ull}},
+{{12231339207492764097ull, 5636165736816138142ull,
+ 6131806627991997416ull, 6624994189689824069ull}},
+{{6065801972511179314ull, 7045207171020172678ull,
+ 12276444303417384674ull, 8281242737112280086ull}},
+{{17626184288101650783ull, 9014940500314995827ull,
+ 3061091671208477517ull, 5175776710695175054ull}},
+{{17421044341699675575ull, 15880361643821132688ull,
+ 13049736625865372704ull, 6469720888368968817ull}},
+{{3329561353415042852ull, 1403707981066864245ull,
+ 2477112727049552169ull, 8087151110461211022ull}},
+{{4386818855098095735ull, 12406532534235259913ull,
+ 15383253509688133817ull, 5054469444038256888ull}},
+{{10095209587300007573ull, 1673107612511911179ull,
+ 782322813400615656ull, 6318086805047821111ull}},
+{{8007325965697621562ull, 2091384515639888974ull,
+ 14812961572032933282ull, 7897608506309776388ull}},
+{{392892710133625572ull, 5918801340702318513ull, 34728945665807493ull,
+ 4936005316443610243ull}},
+{{5102801906094419869ull, 12010187694305286045ull,
+ 13878469237364423078ull, 6170006645554512803ull}},
+{{10990188401045412740ull, 5789362581026831748ull,
+ 12736400528278140944ull, 7712508306943141004ull}},
+{{16092239787508158771ull, 3618351613141769842ull,
+ 17183622367028613898ull, 4820317691839463127ull}},
+{{10891927697530422655ull, 13746311553281988111ull,
+ 16867841940358379468ull, 6025397114799328909ull}},
+{{9003223603485640415ull, 17182889441602485139ull,
+ 7249744370165810623ull, 7531746393499161137ull}},
+{{3321171742964831308ull, 17656834928642635068ull,
+ 16060305277422101399ull, 4707341495936975710ull}},
+{{4151464678706039134ull, 17459357642375905931ull,
+ 10852009559922850941ull, 5884176869921219638ull}},
+{{577644829955161014ull, 7989138997687718702ull, 4341639913048787869ull,
+ 7355221087401524548ull}},
+{{9945428074298727075ull, 14598109765537036281ull,
+ 5427049891310984836ull, 9194026359251905685ull}},
+{{17745107592505174182ull, 18347190640315423483ull,
+ 5697749191283059474ull, 5746266474532441053ull}},
+{{17569698472204079824ull, 13710616263539503546ull,
+ 11733872507531212247ull, 7182833093165551316ull}},
+{{12738751053400323971ull, 12526584310996991529ull,
+ 14667340634414015309ull, 8978541366456939145ull}},
+{{1044190380734120626ull, 10134958203586813658ull,
+ 2249558868867677712ull, 5611588354035586966ull}},
+{{10528610012772426591ull, 12668697754483517072ull,
+ 12035320622939372948ull, 7014485442544483707ull}},
+{{13160762515965533238ull, 15835872193104396340ull,
+ 10432464760246828281ull, 8768106803180604634ull}},
+{{17448848609333234082ull, 2979891093049165856ull,
+ 11131976493581655580ull, 5480066751987877896ull}},
+{{3364316687956990987ull, 3724863866311457321ull,
+ 13914970616977069475ull, 6850083439984847370ull}},
+{{8817081878373626637ull, 44393814461933747ull, 8170341234366561036ull,
+ 8562604299981059213ull}},
+{{3204833164769822696ull, 9251118170893484400ull,
+ 7412306280692794599ull, 5351627687488162008ull}},
+{{4006041455962278370ull, 6952211695189467596ull,
+ 9265382850865993249ull, 6689534609360202510ull}},
+{{5007551819952847963ull, 13301950637414222399ull,
+ 2358356526727715753ull, 8361918261700253138ull}},
+{{10047248915111611833ull, 1396190120742807143ull,
+ 6085658847632210250ull, 5226198913562658211ull}},
+{{7947375125462126887ull, 10968609687783284737ull,
+ 2995387541112874908ull, 6532748641953322764ull}},
+{{14545904925255046513ull, 13710762109729105921ull,
+ 3744234426391093635ull, 8165935802441653455ull}},
+{{2173661550643322215ull, 6263383309366997249ull,
+ 9257675544135515378ull, 5103709876526033409ull}},
+{{7328762956731540672ull, 17052601173563522369ull,
+ 16183780448596782126ull, 6379637345657541761ull}},
+{{13772639714341813744ull, 12092379430099627153ull,
+ 6394667505463813946ull, 7974546682071927202ull}},
+{{1690370793822551734ull, 12169423162239654875ull,
+ 8608353209342271620ull, 4984091676294954501ull}},
+{{15948021547560353380ull, 15211778952799568593ull,
+ 15372127530105227429ull, 6230114595368693126ull}},
+{{6099968879168278012ull, 5179665635717297030ull,
+ 9991787375776758479ull, 7787643244210866408ull}},
+{{17647538604762337470ull, 10154820049964392499ull,
+ 6244867109860474049ull, 4867277027631791505ull}},
+{{17447737237525533933ull, 17305211080882878528ull,
+ 12417769905752980465ull, 6084096284539739381ull}},
+{{3362927473197365801ull, 7796455795821434449ull,
+ 1687154326909061870ull, 7605120355674674227ull}},
+{{13631044716816823386ull, 261098853961008626ull,
+ 17195372518814021333ull, 4753200222296671391ull}},
+{{7815433859166253424ull, 4938059585878648687ull,
+ 16882529630090138762ull, 5941500277870839239ull}},
+{{5157606305530428876ull, 15395946519203086667ull,
+ 16491476019185285548ull, 7426875347338549049ull}},
+{{917660931742824095ull, 399094537647153359ull, 3389643484349721612ull,
+ 4641797092086593156ull}},
+{{14982134219960693831ull, 498868172058941698ull,
+ 4237054355437152015ull, 5802246365108241445ull}},
+{{9504295738096091481ull, 14458643270355840835ull,
+ 9908003962723827922ull, 7252807956385301806ull}},
+{{7268683654192726447ull, 8849932051090025236ull,
+ 3161632916550009095ull, 9066009945481627258ull}},
+{{13766299320725229838ull, 12448736559572347628ull,
+ 6587706591271143588ull, 5666256215926017036ull}},
+{{17207874150906537297ull, 15560920699465434535ull,
+ 8234633239088929485ull, 7082820269907521295ull}},
+{{16898156670205783717ull, 5616092819049629457ull,
+ 5681605530433773953ull, 8853525337384401619ull}},
+{{3643818891237532967ull, 15039273057974488171ull,
+ 1245160447307414768ull, 5533453335865251012ull}},
+{{18389831669329079921ull, 352347248758558597ull,
+ 1556450559134268461ull, 6916816669831563765ull}},
+{{9152231531379186189ull, 5052120079375586151ull,
+ 6557249217345223480ull, 8646020837289454706ull}},
+{{12637673734753073224ull, 3157575049609741344ull,
+ 8709966779268152579ull, 5403763023305909191ull}},
+{{15797092168441341530ull, 17782026867294340392ull,
+ 6275772455657802819ull, 6754703779132386489ull}},
+{{1299621136842125297ull, 17615847565690537587ull,
+ 12456401587999641428ull, 8443379723915483111ull}},
+{{16953164275022185975ull, 1786532691701810183ull,
+ 14702780020140857749ull, 5277112327447176944ull}},
+{{16579769325350344564ull, 6844851883054650633ull,
+ 18378475025176072186ull, 6596390409308971180ull}},
+{{6889653601405766993ull, 17779436890673089100ull,
+ 4526349707760538616ull, 8245488011636213976ull}},
+{{13529405537733380179ull, 11112148056670680687ull,
+ 2828968567350336635ull, 5153430007272633735ull}},
+{{12300070903739337319ull, 9278499052410962955ull,
+ 17371268764470084506ull, 6441787509090792168ull}},
+{{10763402611246783745ull, 2374751778658927886ull,
+ 3267341881878054017ull, 8052234386363490211ull}},
+{{2115440613601851937ull, 13013434907730299689ull,
+ 18182989740669641424ull, 5032646491477181381ull}},
+{{7255986785429702825ull, 16266793634662874611ull,
+ 8893679120554888068ull, 6290808114346476727ull}},
+{{4458297463359740627ull, 1886747969619041648ull,
+ 6505412882266222182ull, 7863510142933095909ull}},
+{{2786435914599837892ull, 15014275536294064742ull,
+ 6371726060630082815ull, 4914693839333184943ull}},
+{{12706416930104573173ull, 14156158401940193023ull,
+ 3352971557360215615ull, 6143367299166481179ull}},
+{{11271335144203328562ull, 13083511983997853375ull,
+ 18026272501982433231ull, 7679209123958101473ull}},
+{{13962113492768162208ull, 15094724017639740215ull,
+ 4348891286097938913ull, 4799505702473813421ull}},
+{{12840955847532814855ull, 5033346966767511557ull,
+ 10047800126049811546ull, 5999382128092266776ull}},
+{{2216136754133854857ull, 15515055745314165255ull,
+ 12559750157562264432ull, 7499227660115333470ull}},
+{{8302614498974741142ull, 9696909840821353284ull,
+ 3238157830049027366ull, 4687017287572083419ull}},
+{{10378268123718426427ull, 2897765264171915797ull,
+ 17882755342843447920ull, 5858771609465104273ull}},
+{{17584521173075420938ull, 3622206580214894746ull,
+ 8518386123272146188ull, 7323464511831380342ull}},
+{{12757279429489500364ull, 4527758225268618433ull,
+ 1424610617235406927ull, 9154330639789225428ull}},
+{{1055770615789855872ull, 9747377918433968377ull,
+ 10113753672626905137ull, 5721456649868265892ull}},
+{{5931399288164707744ull, 16795908416469848375ull,
+ 12642192090783631421ull, 7151820812335332365ull}},
+{{2802563091778496775ull, 7159827465305146757ull,
+ 1967682058197375565ull, 8939776015419165457ull}},
+{{4057444941575254437ull, 6780735175029410675ull,
+ 12759016332441829488ull, 5587360009636978410ull}},
+{{460120158541680142ull, 8475918968786763344ull, 6725398378697511052ull,
+ 6984200012046223013ull}},
+{{575150198177100177ull, 10594898710983454180ull,
+ 13018433991799276719ull, 8730250015057778766ull}},
+{{9582840910715463419ull, 13539340722005740718ull,
+ 3524835226447160045ull, 5456406259411111729ull}},
+{{2755179101539553466ull, 3089117847225012186ull,
+ 9017730051486337961ull, 6820507824263889661ull}},
+{{12667345913779217640ull, 8473083327458653136ull,
+ 15883848582785310355ull, 8525634780329862076ull}},
+{{7917091196112011025ull, 2989834070447964258ull, 704033327386043164ull,
+ 5328521737706163798ull}},
+{{672991958285237973ull, 3737292588059955323ull,
+ 10103413696087329763ull, 6660652172132704747ull}},
+{{14676298003138711178ull, 59929716647556249ull, 8017581101681774300ull,
+ 8325815215165880934ull}},
+{{2255157224320612631ull, 9260828109759498464ull, 399302170123721033ull,
+ 5203634509478675584ull}},
+{{2818946530400765788ull, 16187721155626760984ull,
+ 499127712654651291ull, 6504543136848344480ull}},
+{{3523683163000957235ull, 15622965426106063326ull,
+ 623909640818314114ull, 8130678921060430600ull}},
+{{16037360032157761984ull, 14376039409743677482ull,
+ 389943525511446321ull, 5081674325662769125ull}},
+{{10823328003342426672ull, 4134991206897433141ull,
+ 5099115425316695806ull, 6352092907078461406ull}},
+{{18140846022605421244ull, 14392111045476567234ull,
+ 15597266318500645565ull, 7940116133848076757ull}},
+{{15949714782555776182ull, 11300912412636548473ull,
+ 12054134458276597430ull, 4962572583655047973ull}},
+{{6102085422912556515ull, 4902768478940909784ull,
+ 1232610017563583076ull, 6203215729568809967ull}},
+{{7627606778640695644ull, 6128460598676137230ull,
+ 15375820577236642557ull, 7754019661961012458ull}},
+{{155568218223046873ull, 6136130883386279721ull,
+ 14221573879200289502ull, 4846262288725632786ull}},
+{{4806146291206196496ull, 16893535641087625459ull,
+ 8553595312145586069ull, 6057827860907040983ull}},
+{{1395996845580357715ull, 7281861496077368112ull,
+ 6080308121754594683ull, 7572284826133801229ull}},
+{{872498028487723572ull, 2245320425834661118ull, 6106035585310315629ull,
+ 4732678016333625768ull}},
+{{10313994572464430273ull, 7418336550720714301ull,
+ 7632544481637894536ull, 5915847520417032210ull}},
+{{17504179234007925746ull, 9272920688400892876ull,
+ 317308565192592362ull, 7394809400521290263ull}},
+{{1716739984400177783ull, 10407261448677945952ull,
+ 7115846880886452082ull, 4621755875325806414ull}},
+{{2145924980500222229ull, 3785704773992656632ull,
+ 18118180637962840911ull, 5777194844157258017ull}},
+{{2682406225625277786ull, 120444949063432886ull, 8812667742171387427ull,
+ 7221493555196572522ull}},
+{{12576379818886373040ull, 13985614241611454819ull,
+ 1792462640859458475ull, 9026866943995715653ull}},
+{{5554394377590289198ull, 6435165891793465310ull,
+ 3426132159750855499ull, 5641791839997322283ull}},
+{{16166365008842637306ull, 3432271346314443733ull,
+ 18117723254970733086ull, 7052239799996652853ull}},
+{{6372898205771132920ull, 13513711219747830475ull,
+ 8812096013431252645ull, 8815299749995816067ull}},
+{{1677218369393264123ull, 10751912521556087999ull,
+ 3201716999180838951ull, 5509562343747385042ull}},
+{{15931581017023743866ull, 8828204633517722094ull,
+ 13225518285830824497ull, 6886952929684231302ull}},
+{{10691104234424904024ull, 15646941810324540522ull,
+ 7308525820433754813ull, 8608691162105289128ull}},
+{{11293626164942952919ull, 12085181640666531778ull,
+ 4567828637771096758ull, 5380431976315805705ull}},
+{{4893660669323915341ull, 5883105013978388915ull,
+ 10321471815641258852ull, 6725539970394757131ull}},
+{{1505389818227506272ull, 7353881267472986144ull,
+ 8290153751124185661ull, 8406924962993446414ull}},
+{{940868636392191420ull, 6902018801384310292ull, 569660076025228134ull,
+ 5254328101870904009ull}},
+{{1176085795490239275ull, 17850895538585163673ull,
+ 5323761113458923071ull, 6567910127338630011ull}},
+{{6081793262790186998ull, 17701933404804066687ull,
+ 2043015373396265935ull, 8209887659173287514ull}},
+{{10718649816884948730ull, 17981237405643623535ull,
+ 5888570626800054113ull, 5131179786983304696ull}},
+{{8786626252678798008ull, 8641488701772365707ull,
+ 7360713283500067642ull, 6413974733729130870ull}},
+{{6371596797421109606ull, 1578488840360681326ull,
+ 18424263641229860361ull, 8017468417161413587ull}},
+{{17817306053670357216ull, 12515770571293895588ull,
+ 9209321766554968773ull, 5010917760725883492ull}},
+{{3824888493378394904ull, 1809655158835205774ull,
+ 11511652208193710967ull, 6263647200907354365ull}},
+{{14004482653577769438ull, 16097127003826170929ull,
+ 554507204959974996ull, 7829559001134192957ull}},
+{{1835272630845024043ull, 837332340536581023ull, 2652410012313678325ull,
+ 4893474375708870598ull}},
+{{16129148843838443765ull, 5658351444098114182ull,
+ 12538884552246873714ull, 6116842969636088247ull}},
+{{10938064017943278899ull, 16296311341977418536ull,
+ 11061919671881204238ull, 7646053712045110309ull}},
+{{6836290011214549312ull, 5573508570308498681ull,
+ 9219542804139446601ull, 4778783570028193943ull}},
+{{13157048532445574544ull, 11578571731313011255ull,
+ 6912742486746920347ull, 5973479462535242429ull}},
+{{11834624647129580276ull, 9861528645713876165ull,
+ 13252614126861038338ull, 7466849328169053036ull}},
+{{9702483413669681624ull, 10775141421998560507ull,
+ 17506255866142924769ull, 4666780830105658147ull}},
+{{7516418248659714126ull, 18080612795925588538ull,
+ 17271133814251268057ull, 5833476037632072684ull}},
+{{172150773969866850ull, 8765707939624821961ull, 3142173194104533456ull,
+ 7291845047040090856ull}},
+{{4826874485889721466ull, 10957134924531027451ull,
+ 3927716492630666820ull, 9114806308800113570ull}},
+{{710953544467381965ull, 16071581364686667965ull,
+ 7066508826321554666ull, 5696753943000070981ull}},
+{{5500377949011615360ull, 10866104669003559148ull,
+ 13444822051329331237ull, 7120942428750088726ull}},
+{{6875472436264519199ull, 18194316854681836839ull,
+ 7582655527306888238ull, 8901178035937610908ull}},
+{{11214699300306406356ull, 6759762015748760120ull,
+ 13962531741421580957ull, 5563236272461006817ull}},
+{{14018374125383007945ull, 13061388538113338054ull,
+ 3618106621494812484ull, 6954045340576258522ull}},
+{{8299595619873984123ull, 16326735672641672568ull,
+ 13746005313723291413ull, 8692556675720323152ull}},
+{{5187247262421240077ull, 12510052804614739307ull,
+ 8591253321077057133ull, 5432847922325201970ull}},
+{{1872373059599162192ull, 1802507950486260422ull,
+ 1515694614491545609ull, 6791059902906502463ull}},
+{{11563838361353728548ull, 6864820956535213431ull,
+ 15729676323396595723ull, 8488824878633128078ull}},
+{{14144928003487162198ull, 1984670088620814442ull,
+ 5219361683695484423ull, 5305515549145705049ull}},
+{{8457787967504176940ull, 16315895666058181765ull,
+ 11135888123046743432ull, 6631894436432131311ull}},
+{{15183920977807609079ull, 1948125508863175590ull,
+ 9308174135381041387ull, 8289868045540164139ull}},
+{{4878264592702367770ull, 17358479507535342408ull,
+ 3511765825399456914ull, 5181167528462602587ull}},
+{{6097830740877959713ull, 12474727347564402202ull,
+ 18224765337031484855ull, 6476459410578253233ull}},
+{{16845660462952225449ull, 10981723166028114848ull,
+ 8945898616007192357ull, 8095574263222816542ull}},
+{{10528537789345140906ull, 9169419987981265732ull,
+ 979500616577107319ull, 5059733914514260339ull}},
+{{13160672236681426132ull, 6850088966549194261ull,
+ 15059433826003547861ull, 6324667393142825423ull}},
+{{2615782240569618953ull, 13174297226613880731ull,
+ 14212606264077046922ull, 7905834241428531779ull}},
+{{17775764964851869510ull, 12845621785061063360ull,
+ 6577035905834460374ull, 4941146400892832362ull}},
+{{3772962132355285271ull, 6833655194471553393ull,
+ 17444666919147851276ull, 6176433001116040452ull}},
+{{9327888683871494493ull, 8542068993089441741ull,
+ 3359089575225262479ull, 7720541251395050566ull}},
+{{8135773436633378010ull, 12256322148321982944ull,
+ 15934489039797952761ull, 4825338282121906603ull}},
+{{10169716795791722513ull, 1485344630120314968ull,
+ 15306425281320053048ull, 6031672852652383254ull}},
+{{12712145994739653141ull, 1856680787650393710ull,
+ 9909659564795290502ull, 7539591065815479068ull}},
+{{3333405228284895309ull, 14995483547563659781ull,
+ 15416909264851832371ull, 4712244416134674417ull}},
+{{8778442553783507040ull, 14132668416027186822ull,
+ 5436078525782626752ull, 5890305520168343022ull}},
+{{1749681155374607992ull, 17665835520033983528ull,
+ 16018470194083059248ull, 7362881900210428777ull}},
+{{2187101444218259990ull, 3635550326332927794ull,
+ 6188029687321660349ull, 9203602375263035972ull}},
+{{5978624421063800398ull, 4578061963171773823ull,
+ 13090890591430813526ull, 5752251484539397482ull}},
+{{2861594507902362593ull, 14945949490819493087ull,
+ 7140241202433741099ull, 7190314355674246853ull}},
+{{17412051190160116954ull, 14070750845096978454ull,
+ 13536987521469564278ull, 8987892944592808566ull}},
+{{6270845975422685192ull, 4182533259758223630ull,
+ 3848931182491089770ull, 5617433090370505354ull}},
+{{17061929506133132298ull, 14451538611552555345ull,
+ 14034536014968638020ull, 7021791362963131692ull}},
+{{7492353827384251661ull, 18064423264440694182ull,
+ 17543170018710797525ull, 8777239203703914615ull}},
+{{71035123687769384ull, 13596107549489127816ull,
+ 17882010289335330309ull, 5485774502314946634ull}},
+{{88793904609711730ull, 3160076381579246058ull, 13129140824814387079ull,
+ 6857218127893683293ull}},
+{{9334364417616915470ull, 17785153532256221284ull,
+ 2576367975735820136ull, 8571522659867104117ull}},
+{{15057349797865347977ull, 11115720957660138302ull,
+ 3916072994048581537ull, 5357201662416940073ull}},
+{{9598315210476909163ull, 59593141793009166ull, 9506777260988114826ull,
+ 6696502078021175091ull}},
+{{2774521976241360646ull, 9297863464096037266ull,
+ 7271785557807755628ull, 8370627597526468864ull}},
+{{6345762253578238308ull, 15034536701914799099ull,
+ 4544865973629847267ull, 5231642248454043040ull}},
+{{3320516798545409981ull, 14181484858966110970ull,
+ 5681082467037309084ull, 6539552810567553800ull}},
+{{13374018035036538284ull, 17726856073707638712ull,
+ 7101353083796636355ull, 8174441013209442250ull}},
+{{8358761271897836428ull, 8773442036853580243ull,
+ 9050031695800285626ull, 5109025633255901406ull}},
+{{5836765571444907630ull, 1743430509212199496ull,
+ 2089167582895581225ull, 6386282041569876758ull}},
+{{7295956964306134538ull, 6790974154942637274ull,
+ 11834831515474252339ull, 7982852551962345947ull}},
+{{9171659121118721990ull, 1938515837625454344ull,
+ 5090926687957713760ull, 4989282844976466217ull}},
+{{11464573901398402488ull, 2423144797031817930ull,
+ 10975344378374530104ull, 6236603556220582771ull}},
+{{5107345339893227302ull, 3028930996289772413ull,
+ 9107494454540774726ull, 7795754445275728464ull}},
+{{5497933846646961016ull, 15728139927963271470ull,
+ 5692184034087984203ull, 4872346528297330290ull}},
+{{16095789345163477078ull, 15048488891526701433ull,
+ 16338602079464756062ull, 6090433160371662862ull}},
+{{6284678626172182635ull, 9587239077553600984ull,
+ 11199880562476169270ull, 7613041450464578578ull}},
+{{3927924141357614147ull, 1380338405043612711ull,
+ 11611611369974993698ull, 4758150906540361611ull}},
+{{298219158269629780ull, 10948795043159291697ull,
+ 9902828194041354218ull, 5947688633175452014ull}},
+{{4984459966264425128ull, 4462621767094338813ull,
+ 3155163205696916965ull, 7434610791469315018ull}},
+{{5421130488128959657ull, 5094981613647655710ull,
+ 6583663021987961007ull, 4646631744668321886ull}},
+{{15999785147015975380ull, 1757040998632181733ull,
+ 17452950814339727067ull, 5808289680835402357ull}},
+{{6164673378487805512ull, 16031359303572390879ull,
+ 7981130462642495121ull, 7260362101044252947ull}},
+{{3094155704682368986ull, 6204141074183324887ull,
+ 5364727059875730998ull, 9075452626305316184ull}},
+{{8851376343067562473ull, 17712646226646741766ull,
+ 3352954412422331873ull, 5672157891440822615ull}},
+{{1840848391979677283ull, 8305749728026263496ull,
+ 18026251070810078554ull, 7090197364301028268ull}},
+{{2301060489974596603ull, 1158815123178053562ull,
+ 4086069764803046577ull, 8862746705376285336ull}},
+{{6049848824661510781ull, 12253474498054753236ull,
+ 2553793603001904110ull, 5539216690860178335ull}},
+{{7562311030826888476ull, 6093471085713665737ull,
+ 17027300059034543850ull, 6924020863575222918ull}},
+{{14064574806960998499ull, 16840210893996857979ull,
+ 12060753036938404004ull, 8655026079469028648ull}},
+{{6484516245136930110ull, 1301759771893260429ull,
+ 7537970648086502503ull, 5409391299668142905ull}},
+{{12717331324848550542ull, 15462257770148739248ull,
+ 14034149328535516032ull, 6761739124585178631ull}},
+{{15896664156060688177ull, 881078138976372444ull,
+ 12931000642242007137ull, 8452173905731473289ull}},
+{{712043060683154303ull, 12079888882928702538ull,
+ 1164346373760172604ull, 5282608691082170806ull}},
+{{10113425862708718686ull, 15099861103660878172ull,
+ 10678805004054991563ull, 6603260863852713507ull}},
+{{12641782328385898358ull, 14263140361148709811ull,
+ 8736820236641351550ull, 8254076079815891884ull}},
+{{5595270946027492522ull, 4302776707290555728ull,
+ 14683884684755620527ull, 5158797549884932427ull}},
+{{6994088682534365652ull, 766784865685806756ull,
+ 13743169837517137755ull, 6448496937356165534ull}},
+{{8742610853167957065ull, 14793539137389422157ull,
+ 7955590260041646385ull, 8060621171695206918ull}},
+{{7769974792443667118ull, 2328432933227306992ull, 360557894098641087ull,
+ 5037888232309504324ull}},
+{{9712468490554583897ull, 16745599221816297452ull,
+ 450697367623301358ull, 6297360290386880405ull}},
+{{12140585613193229871ull, 11708626990415596007ull,
+ 5175057727956514602ull, 7871700362983600506ull}},
+{{14505395035886850526ull, 11929577887437135408ull,
+ 7846097098400209530ull, 4919812726864750316ull}},
+{{18131743794858563157ull, 5688600322441643452ull,
+ 9807621373000261913ull, 6149765908580937895ull}},
+{{4217935669863652330ull, 11722436421479442220ull,
+ 7647840697822939487ull, 7687207385726172369ull}},
+{{11859581830519558515ull, 14244051791065733243ull,
+ 16309115482207806939ull, 4804504616078857730ull}},
+{{10212791269722060239ull, 13193378720404778650ull,
+ 11163022315904982866ull, 6005630770098572163ull}},
+{{3542617050297799491ull, 7268351363651197505ull,
+ 9342091876453840679ull, 7507038462623215204ull}},
+{{13743350702504594442ull, 11460248629923080296ull,
+ 15062179459638426232ull, 4691899039139509502ull}},
+{{17179188378130743052ull, 14325310787403850370ull,
+ 9604352287693256982ull, 5864873798924386878ull}},
+{{12250613435808653007ull, 8683266447400037155ull,
+ 2782068322761795420ull, 7331092248655483598ull}},
+{{10701580776333428355ull, 10854083059250046444ull,
+ 12700957440307020083ull, 9163865310819354497ull}},
+{{15911860022063168530ull, 4477958902817585075ull,
+ 1020569372550805696ull, 5727415819262096561ull}},
+{{15278139009151572758ull, 5597448628521981344ull,
+ 5887397734115895024ull, 7159269774077620701ull}},
+{{650929687729914332ull, 6996810785652476681ull,
+ 11970933186072256684ull, 8949087217597025876ull}},
+{{11936046100899666218ull, 13596378777887573733ull,
+ 16705205278149936235ull, 5593179510998141172ull}},
+{{1084999570842419060ull, 12383787453932079263ull,
+ 2434762523977868678ull, 6991474388747676466ull}},
+{{15191307518835187537ull, 6256362280560323270ull,
+ 12266825191827111656ull, 8739342985934595582ull}},
+{{4882881180844604307ull, 3910226425350202044ull,
+ 3055079726464556881ull, 5462089366209122239ull}},
+{{6103601476055755383ull, 9499469050115140459ull,
+ 17653907713362859813ull, 6827611707761402798ull}},
+{{3017815826642306325ull, 16486022331071313478ull,
+ 12844012604848798958ull, 8534514634701753498ull}},
+{{15721192946933605165ull, 5692077938492183019ull,
+ 12639193896457887253ull, 5334071646688595936ull}},
+{{15039805165239618552ull, 11726783441542616678ull,
+ 15798992370572359066ull, 6667589558360744920ull}},
+{{9576384419694747382ull, 5435107265073495040ull,
+ 1301996389505897217ull, 8334486947950931151ull}},
+{{5985240262309217114ull, 14926157086739404160ull,
+ 7731276771082267616ull, 5209054342469331969ull}},
+{{7481550327886521393ull, 210952284714703584ull,
+ 14275781982280222425ull, 6511317928086664961ull}},
+{{9351937909858151741ull, 4875376374320767384ull,
+ 4009669422568114319ull, 8139147410108331202ull}},
+{{5844961193661344838ull, 9964639261591561471ull,
+ 7117729407532459353ull, 5086967131317707001ull}},
+{{2694515473649293144ull, 17067485095416839743ull,
+ 13508847777842962095ull, 6358708914147133751ull}},
+{{17203202397343780141ull, 16722670350843661774ull,
+ 12274373703876314715ull, 7948386142683917189ull}},
+{{6140315479912474684ull, 8145825960063594657ull,
+ 9977326574136390649ull, 4967741339177448243ull}},
+{{12287080368317981259ull, 14793968468506881225ull,
+ 7859972199243100407ull, 6209676673971810304ull}},
+{{1523792405115312862ull, 13880774567206213628ull,
+ 9824965249053875509ull, 7762095842464762880ull}},
+{{10175742290051846347ull, 10981327113717577469ull,
+ 6140603280658672193ull, 4851309901540476800ull}},
+{{17331363880992195838ull, 18338344910574359740ull,
+ 7675754100823340241ull, 6064137376925596000ull}},
+{{3217460777530693181ull, 9087873082935785964ull,
+ 9594692626029175302ull, 7580171721156995000ull}},
+{{11234285022811459046ull, 1068234658407478323ull,
+ 5996682891268234564ull, 4737607325723121875ull}},
+{{9431170260086935904ull, 1335293323009347904ull,
+ 2884167595657905301ull, 5922009157153902344ull}},
+{{11788962825108669880ull, 6280802672189072784ull,
+ 3605209494572381626ull, 7402511446442377930ull}},
+{{7368101765692918675ull, 8537187688545558394ull,
+ 6864941952535126420ull, 4626569654026486206ull}},
+{{18433499243970924152ull, 10671484610681947992ull,
+ 17804549477523683833ull, 5783212067533107757ull}},
+{{4595129981254103573ull, 17951041781779822895ull,
+ 8420628791622441079ull, 7229015084416384697ull}},
+{{1132226458140241563ull, 17827116208797390715ull,
+ 15137472007955439253ull, 9036268855520480871ull}},
+{{16848542600833508641ull, 13447790639712063148ull,
+ 16378449032613231389ull, 5647668034700300544ull}},
+{{2613934177332334185ull, 2974680244357915224ull,
+ 2026317217056987621ull, 7059585043375375681ull}},
+{{3267417721665417731ull, 8330036323874781934ull,
+ 7144582539748622430ull, 8824481304219219601ull}},
+{{15877194131323049794ull, 594586683994350804ull,
+ 15994579133411358779ull, 5515300815137012250ull}},
+{{1399748590444260626ull, 14578291410275102218ull,
+ 10769851879909422665ull, 6894126018921265313ull}},
+{{10973057774910101591ull, 4387806207561714060ull,
+ 18074000868314166236ull, 8617657523651581641ull}},
+{{16081533146173589302ull, 11965750916580847095ull,
+ 4378721515055272041ull, 5386035952282238526ull}},
+{{15490230414289598724ull, 1122130590443895157ull,
+ 14696773930673865860ull, 6732544940352798157ull}},
+{{5527729962579834693ull, 1402663238054868947ull,
+ 4535909358060168613ull, 8415681175440997697ull}},
+{{1148988217398702731ull, 3182507532997987044ull,
+ 14364158394856075143ull, 5259800734650623560ull}},
+{{1436235271748378414ull, 17813192471529647517ull,
+ 17955197993570093928ull, 6574750918313279450ull}},
+{{6406980108112860921ull, 3819746515702507780ull,
+ 13220625455107841603ull, 8218438647891599313ull}},
+{{13227734604425313884ull, 81498563100373410ull, 1345361881801319146ull,
+ 5136524154932249571ull}},
+{{7311296218676866547ull, 9325245240730242571ull,
+ 15516760407533812644ull, 6420655193665311963ull}},
+{{4527434254918695279ull, 11656556550912803214ull,
+ 14784264490989877901ull, 8025818992081639954ull}},
+{{16664704464606348262ull, 9591190853534195960ull,
+ 13851851325296061592ull, 5016136870051024971ull}},
+{{2384136507048383711ull, 11988988566917744951ull,
+ 12703128138192689086ull, 6270171087563781214ull}},
+{{16815228689092643351ull, 5762863671792405380ull,
+ 6655538135886085550ull, 7837713859454726518ull}},
+{{1286145893828126286ull, 17436847850152417075ull,
+ 17994769390210967180ull, 4898571162159204073ull}},
+{{15442740422567321570ull, 3349315738980969727ull,
+ 8658403682481545264ull, 6123213952699005092ull}},
+{{14691739509781764058ull, 4186644673726212159ull,
+ 10823004603101931580ull, 7654017440873756365ull}},
+{{16099866221254684393ull, 11840024957933658407ull,
+ 9070220886152401189ull, 4783760900546097728ull}},
+{{15513146758140967587ull, 964973142134909297ull,
+ 11337776107690501487ull, 5979701125682622160ull}},
+{{5556375392394045771ull, 15041274482950800334ull,
+ 14172220134613126858ull, 7474626407103277700ull}},
+{{17307792675528442319ull, 14012482570271638112ull,
+ 18081009620987980094ull, 4671641504439548562ull}},
+{{3187996770701001283ull, 8292231175984771833ull,
+ 13377889989380199310ull, 5839551880549435703ull}},
+{{8596681981803639507ull, 1141916933126188983ull,
+ 12110676468297861234ull, 7299439850686794629ull}},
+{{6134166458827161480ull, 10650768203262512037ull,
+ 1303287530090162830ull, 9124299813358493287ull}},
+{{6139697045980669877ull, 2045044108611682119ull,
+ 7732083733947433625ull, 5702687383349058304ull}},
+{{3062935289048449442ull, 7167991154191990553ull,
+ 9665104667434292031ull, 7128359229186322880ull}},
+{{8440355129737949707ull, 4348302924312600287ull,
+ 12081380834292865039ull, 8910449036482903600ull}},
+{{12192750983727300423ull, 9635218355336457035ull,
+ 7550863021433040649ull, 5569030647801814750ull}},
+{{10629252711231737625ull, 16655708962597959198ull,
+ 215206739936525003ull, 6961288309752268438ull}},
+{{4063193852184896223ull, 16207950184820061094ull,
+ 9492380461775432062ull, 8701610387190335547ull}},
+{{16374554212897723851ull, 5518282847085150279ull,
+ 3626894779395951087ull, 5438506491993959717ull}},
+{{15856506747694766910ull, 2286167540429049945ull,
+ 9145304492672326763ull, 6798133114992449646ull}},
+{{5985575379336294926ull, 16692767480818476144ull,
+ 2208258578985632645ull, 8497666393740562058ull}},
+{{3740984612085184329ull, 12738822684725241542ull,
+ 5991847630293408307ull, 5311041496087851286ull}},
+{{13899602801961256219ull, 11311842337479164023ull,
+ 16713181574721536192ull, 6638801870109814107ull}},
+{{12762817484024182369ull, 14139802921848955029ull,
+ 16279790949974532336ull, 8298502337637267634ull}},
+{{10282603936728807933ull, 8837376826155596893ull,
+ 14786555362161470614ull, 5186563961023292271ull}},
+{{17464940939338397820ull, 1823348995839720308ull,
+ 13871508184274450364ull, 6483204951279115339ull}},
+{{3384432100463445659ull, 2279186244799650386ull,
+ 12727699211915675051ull, 8104006189098894174ull}},
+{{6726956081217041441ull, 17565392467495639155ull,
+ 3343125989019909002ull, 5065003868186808859ull}},
+{{3797009083093913897ull, 12733368547514773136ull,
+ 18013965541557049965ull, 6331254835233511073ull}},
+{{4746261353867392371ull, 2081652629111302708ull,
+ 8682398871664148745ull, 7914068544041888842ull}},
+{{12189785383021896040ull, 12830247939263033952ull,
+ 10038185313217480869ull, 4946292840026180526ull}},
+{{15237231728777370050ull, 2202751868796628728ull,
+ 3324359604667075279ull, 6182866050032725658ull}},
+{{599795587262160947ull, 16588497891277949623ull,
+ 13378821542688619906ull, 7728582562540907072ull}},
+{{7292401269679932448ull, 14979497200476106418ull,
+ 8361763464180387441ull, 4830364101588066920ull}},
+{{18338873623954691368ull, 4889313445312969310ull,
+ 10452204330225484302ull, 6037955126985083650ull}},
+{{13700219993088588401ull, 15335013843495987446ull,
+ 3841883375927079569ull, 7547443908731354563ull}},
+{{3950951477252979847ull, 2666854624543910298ull, 95334100740730779ull,
+ 4717152442957096602ull}},
+{{14162061383421000617ull, 17168626335962051584ull,
+ 9342539662780689281ull, 5896440553696370752ull}},
+{{17702576729276250771ull, 7625724864670400768ull,
+ 11678174578475861602ull, 7370550692120463440ull}},
+{{3681476837885761847ull, 308784043983225153ull,
+ 14597718223094827003ull, 9213188365150579300ull}},
+{{13830138069747070915ull, 16333891091985373384ull,
+ 18346945926289042684ull, 5758242728219112062ull}},
+{{17287672587183838643ull, 1970619791272165114ull,
+ 13710310371006527548ull, 7197803410273890078ull}},
+{{12386218697125022496ull, 2463274739090206393ull,
+ 7914515926903383627ull, 8997254262842362598ull}},
+{{823857658062057204ull, 17680447776427236660ull, 334886435887226862ull,
+ 5623283914276476624ull}},
+{{1029822072577571505ull, 12877187683679270017ull,
+ 418608044859033578ull, 7029104892845595780ull}},
+{{5898963609149352285ull, 6873112567744311713ull, 523260056073791973ull,
+ 8786381116056994725ull}},
+{{15216067301786814939ull, 6601538364053888772ull,
+ 2632880544259813935ull, 5491488197535621703ull}},
+{{573340053523967057ull, 3640236936639973062ull,
+ 17126158735606931131ull, 6864360246919527128ull}},
+{{9940047103759734629ull, 18385354226082130039ull,
+ 2960954345799112297ull, 8580450308649408911ull}},
+{{13130058467490915999ull, 4573317363660249418ull,
+ 8768125493765527042ull, 5362781442905880569ull}},
+{{7189201047508869191ull, 14940018741430087581ull,
+ 15571842885634296706ull, 6703476803632350711ull}},
+{{13598187327813474393ull, 9451651389932833668ull,
+ 14853117588615482979ull, 8379346004540438389ull}},
+{{17722239116738197304ull, 3601439109494327090ull,
+ 11589041502098370814ull, 5237091252837773993ull}},
+{{12929426859067970822ull, 13725170923722684671ull,
+ 651243822340799805ull, 6546364066047217492ull}},
+{{11550097555407575623ull, 3321405599371192127ull,
+ 814054777925999757ull, 8182955082559021865ull}},
+{{14136339999770816620ull, 4381721508820689031ull,
+ 12037999282272219608ull, 5114346926599388665ull}},
+{{13058738981286132871ull, 5477151886025861289ull,
+ 1212441047558110798ull, 6392933658249235832ull}},
+{{2488365671325502377ull, 16069811894387102420ull,
+ 1515551309447638497ull, 7991167072811544790ull}},
+{{10778600581433214794ull, 3126103406350857156ull,
+ 14782277623686937773ull, 4994479420507215493ull}},
+{{13473250726791518492ull, 8519315276365959349ull,
+ 4642788974326508504ull, 6243099275634019367ull}},
+{{3006505353207234403ull, 10649144095457449187ull,
+ 1191800199480747726ull, 7803874094542524209ull}},
+{{18019966910250379166ull, 2044029041233517837ull,
+ 12274090170743937089ull, 4877421309089077630ull}},
+{{8689900582530810246ull, 7166722319969285201ull,
+ 6119240676575145553ull, 6096776636361347038ull}},
+{{15474061746590900711ull, 13570088918388994405ull,
+ 16872422882573707749ull, 7620970795451683797ull}},
+{{11977131600833006896ull, 10787148583206815455ull,
+ 12851107310822261295ull, 4763106747157302373ull}},
+{{10359728482613870716ull, 8872249710581131415ull,
+ 2228826083245662907ull, 5953883433946627967ull}},
+{{8337974584839950491ull, 6478626119799026365ull,
+ 16621090659339242346ull, 7442354292433284958ull}},
+{{7517077124738663009ull, 8660827343301779382ull,
+ 5776495643659638562ull, 4651471432770803099ull}},
+{{172974369068552954ull, 1602662142272448420ull, 2608933536147160299ull,
+ 5814339290963503874ull}},
+{{216217961335691192ull, 15838385733122724237ull,
+ 12484538957038726181ull, 7267924113704379842ull}},
+{{4881958470097001894ull, 5962924111121241584ull,
+ 6382301659443631919ull, 9084905142130474803ull}},
+{{3051224043810626184ull, 10644356597091857846ull,
+ 1683095527938575997ull, 5678065713831546752ull}},
+{{13037402091618058538ull, 17917131764792210211ull,
+ 2103869409923219996ull, 7097582142289433440ull}},
+{{11685066596095185268ull, 3949670632280711148ull,
+ 2629836762404024996ull, 8871977677861791800ull}},
+{{16526538659414266601ull, 11691916182030220275ull,
+ 1643647976502515622ull, 5544986048663619875ull}},
+{{16046487305840445347ull, 5391523190682999536ull,
+ 15889618025910308240ull, 6931232560829524843ull}},
+{{1611365058591005067ull, 6739403988353749421ull,
+ 15250336513960497396ull, 8664040701036906054ull}},
+{{3312946170833072119ull, 13435499529575869196ull,
+ 4919774302797922968ull, 5415025438148066284ull}},
+{{4141182713541340149ull, 16794374411969836495ull,
+ 6149717878497403710ull, 6768781797685082855ull}},
+{{564792373499287282ull, 11769595978107519811ull,
+ 3075461329694366734ull, 8460977247106353569ull}},
+{{16493896297932912215ull, 2744311467889811977ull,
+ 13451378377127448969ull, 5288110779441470980ull}},
+{{6782312317133976557ull, 8042075353289652876ull,
+ 16814222971409311211ull, 6610138474301838725ull}},
+{{8477890396417470696ull, 5440908173184678191ull,
+ 7182720658979475302ull, 8262673092877298407ull}},
+{{12216210525402001041ull, 17235625663522587581ull,
+ 11406729439503253919ull, 5164170683048311504ull}},
+{{1435205101470337590ull, 16932846060975846573ull,
+ 14258411799379067399ull, 6455213353810389380ull}},
+{{6405692395265309891ull, 16554371557792420312ull,
+ 17823014749223834249ull, 8069016692262986725ull}},
+{{4003557747040818682ull, 3428953195979180839ull,
+ 13445227227478590358ull, 5043135432664366703ull}},
+{{392761165373635448ull, 13509563531828751857ull,
+ 12194848015920850043ull, 6303919290830458379ull}},
+{{5102637475144432214ull, 12275268396358551917ull,
+ 10631874001473674650ull, 7879899113538072974ull}},
+{{5494991431178964086ull, 12283728766151482852ull,
+ 2033235232493658752ull, 4924936945961295609ull}},
+{{6868739288973705107ull, 15354660957689353565ull,
+ 7153230059044461344ull, 6156171182451619511ull}},
+{{13197610129644519288ull, 746582123402140340ull,
+ 4329851555378188777ull, 7695213978064524389ull}},
+{{17471878367882600363ull, 11995828873194807472ull,
+ 5012000231325061937ull, 4809508736290327743ull}},
+{{3393103886143698838ull, 1159728036211345629ull,
+ 1653314270728939518ull, 6011885920362909679ull}},
+{{8853065876107011451ull, 10673032082118957844ull,
+ 15901700893693338109ull, 7514857400453637098ull}},
+{{14756538209421657965ull, 8976488060538042604ull,
+ 14550249076985724222ull, 4696785875283523186ull}},
+{{18445672761777072457ull, 1997238038817777447ull,
+ 8964439309377379470ull, 5870982344104403983ull}},
+{{18445404933793952667ull, 11719919585376997617ull,
+ 6593863118294336433ull, 7338727930130504979ull}},
+{{9221698111960277121ull, 814841426439083310ull, 3630642879440532638ull,
+ 9173409912663131224ull}},
+{{1151875301547785297ull, 14344333946806590781ull,
+ 2269151799650332898ull, 5733381195414457015ull}},
+{{6051530145362119525ull, 8707045396653462668ull,
+ 16671497804845079835ull, 7166726494268071268ull}},
+{{7564412681702649406ull, 6272120727389440431ull,
+ 2392628182346798178ull, 8958408117835089086ull}},
+{{11645286953705237735ull, 8531761473045788173ull,
+ 15330450669248912573ull, 5599005073646930678ull}},
+{{721550636849383457ull, 15276387859734623121ull,
+ 9939691299706364908ull, 6998756342058663348ull}},
+{{5513624314489117225ull, 648740750958727285ull,
+ 12424614124632956136ull, 8748445427573329185ull}},
+{{5751858205769392218ull, 405462969349204553ull, 847854800254515729ull,
+ 5467778392233330741ull}},
+{{11801508775639128176ull, 5118514730113893595ull,
+ 5671504518745532565ull, 6834722990291663426ull}},
+{{10140199951121522316ull, 11009829431069754898ull,
+ 16312752685286691514ull, 8543403737864579282ull}},
+{{10949310987878339351ull, 11492829412845984715ull,
+ 14807156446731570100ull, 5339627336165362051ull}},
+{{9074952716420536285ull, 14366036766057480894ull,
+ 13897259539987074721ull, 6674534170206702564ull}},
+{{2120318858670894548ull, 4122487902289687406ull,
+ 17371574424983843402ull, 8343167712758378205ull}},
+{{15160257341951472805ull, 7188240957358442532ull,
+ 13163077024828596078ull, 5214479820473986378ull}},
+{{503577603729789390ull, 18208673233552828974ull,
+ 7230474244180969289ull, 6518099775592482973ull}},
+{{9852844041517012545ull, 8925783486658872505ull,
+ 13649778823653599516ull, 8147624719490603716ull}},
+{{17687242572016602601ull, 14801986716016571123ull,
+ 17754483801638275505ull, 5092265449681627322ull}},
+{{17497367196593365347ull, 4667425339738550192ull,
+ 12969732715193068574ull, 6365331812102034153ull}},
+{{3424964922032155068ull, 15057653711527963549ull,
+ 2377107838709172005ull, 7956664765127542692ull}},
+{{4446446085483790870ull, 11716876578918671170ull,
+ 10709064436048008311ull, 4972915478204714182ull}},
+{{14781429643709514395ull, 10034409705220951058ull,
+ 4162958508205234581ull, 6216144347755892728ull}},
+{{9253415017782117185ull, 17154698149953576727ull,
+ 5203698135256543226ull, 7770180434694865910ull}},
+{{12700913413754905097ull, 15333372362148373358ull,
+ 17087369389817503228ull, 4856362771684291193ull}},
+{{6652769730338855563ull, 719971378975915082ull, 7524153681989715324ull,
+ 6070453464605363992ull}},
+{{17539334199778345262ull, 899964223719893852ull,
+ 9405192102487144155ull, 7588066830756704990ull}},
+{{1738711838006689981ull, 16703378704320791322ull,
+ 1266559045627077192ull, 4742541769222940619ull}},
+{{11396761834363138284ull, 2432479306691437536ull,
+ 15418256862316010203ull, 5928177211528675773ull}},
+{{14245952292953922855ull, 16875657188646460632ull,
+ 5437763022612849041ull, 7410221514410844717ull}},
+{{8903720183096201784ull, 3629756715262956039ull,
+ 5704444898346724603ull, 4631388446506777948ull}},
+{{6517964210442864326ull, 18372253949360858761ull,
+ 7130556122933405753ull, 5789235558133472435ull}},
+{{12759141281480968312ull, 9130259381418909739ull,
+ 4301509135239369288ull, 7236544447666840544ull}},
+{{11337240583423822486ull, 11412824226773637174ull,
+ 5376886419049211610ull, 9045680559583550680ull}},
+{{2474089346212501150ull, 11744701160160911138ull,
+ 3360554011905757256ull, 5653550349739719175ull}},
+{{12315983719620402245ull, 14680876450201138922ull,
+ 18035750570164360282ull, 7066937937174648968ull}},
+{{6171607612670726998ull, 9127723525896647845ull,
+ 4097944138995898737ull, 8833672421468311211ull}},
+{{6163097767132898326ull, 17234042249753874663ull,
+ 255372077658742758ull, 5521045263417694507ull}},
+{{3092186190488735004ull, 12319180775337567521ull,
+ 14154273152355592160ull, 6901306579272118133ull}},
+{{8476918756538306658ull, 15398975969171959401ull,
+ 3857783385162326488ull, 8626633224090147667ull}},
+{{16827289268904911422ull, 9624359980732474625ull,
+ 105271606512760103ull, 5391645765056342292ull}},
+{{7199053530848975565ull, 7418763957488205378ull, 131589508140950129ull,
+ 6739557206320427865ull}},
+{{18222188950415995264ull, 13885140965287644626ull,
+ 4776172903603575565ull, 8424446507900534831ull}},
+{{16000554112437384944ull, 10984056112518471843ull,
+ 9902637092393316584ull, 5265279067437834269ull}},
+{{15389006622119343276ull, 13730070140648089804ull,
+ 16989982383919033634ull, 6581598834297292836ull}},
+{{789514203939627479ull, 7939215638955336448ull, 2790733906189240427ull,
+ 8226998542871616046ull}},
+{{493446377462267175ull, 2656166765133391328ull,
+ 15579266746650438979ull, 5141874089294760028ull}},
+{{616807971827833968ull, 17155266511698902872ull,
+ 1027339359603497107ull, 6427342611618450036ull}},
+{{771009964784792460ull, 16832397121196240686ull,
+ 1284174199504371384ull, 8034178264523062545ull}},
+{{14316939283272659000ull, 10520248200747650428ull,
+ 12331823920758701875ull, 5021361415326914090ull}},
+{{17896174104090823750ull, 8538624232507175131ull,
+ 6191407864093601536ull, 6276701769158642613ull}},
+{{17758531611686141783ull, 10673280290633968914ull,
+ 12350945848544389824ull, 7845877211448303266ull}},
+{{15710768275731226518ull, 6670800181646230571ull,
+ 12331027173767631544ull, 4903673257155189541ull}},
+{{15026774326236645244ull, 8338500227057788214ull,
+ 1578725911927375718ull, 6129591571443986927ull}},
+{{9560095870941030747ull, 1199753246967459460ull,
+ 15808465445191383360ull, 7661989464304983658ull}},
+{{15198431956192920025ull, 749845779354662162ull,
+ 14491976921672002504ull, 4788743415190614786ull}},
+{{9774667908386374223ull, 937307224193327703ull, 8891599115235227322ull,
+ 5985929268988268483ull}},
+{{7606648867055579875ull, 10395006067096435437ull,
+ 6502812875616646248ull, 7482411586235335604ull}},
+{{7059998551123431374ull, 6496878791935272148ull,
+ 13287630084115179713ull, 4676507241397084752ull}},
+{{8824998188904289217ull, 12732784508346478089ull,
+ 16609537605143974641ull, 5845634051746355940ull}},
+{{15642933754557749425ull, 2080922580150933899ull,
+ 2315177932720416686ull, 7307042564682944926ull}},
+{{14941981174769798878ull, 11824525262043443182ull,
+ 12117344452755296665ull, 9133803205853681157ull}},
+{{4727052215803736395ull, 472799261136070133ull, 9879183292185754368ull,
+ 5708627003658550723ull}},
+{{10520501288182058397ull, 590999076420087666ull,
+ 7737293096804805056ull, 7135783754573188404ull}},
+{{3927254573372797188ull, 738748845525109583ull, 9671616371006006320ull,
+ 8919729693216485505ull}},
+{{9372063135999080099ull, 461718028453193489ull,
+ 17573975277947223710ull, 5574831058260303440ull}},
+{{16326764938426238028ull, 9800519572421267669ull,
+ 3520725023724478021ull, 6968538822825379301ull}},
+{{6573398117750633822ull, 16862335483953972491ull,
+ 9012592298082985430ull, 8710673528531724126ull}},
+{{1802530814380452187ull, 5927273659043844903ull,
+ 1021184167874477990ull, 5444170955332327579ull}},
+{{16088221573257728946ull, 16632464110659581936ull,
+ 15111538265125261199ull, 6805213694165409473ull}},
+{{1663532892862609566ull, 16178894119897089517ull,
+ 5054364776124412787ull, 8506517117706761842ull}},
+{{3345551067252824931ull, 7805965815721986996ull,
+ 7770664003505145896ull, 5316573198566726151ull}},
+{{4181938834066031164ull, 9757457269652483745ull,
+ 5101643985954044466ull, 6645716498208407689ull}},
+{{9839109561009926858ull, 2973449550210828873ull,
+ 10988741000869943487ull, 8307145622760509611ull}},
+{{17678658521699674047ull, 8775934996522849901ull,
+ 4562120116330020727ull, 5191966014225318507ull}},
+{{8263265096842428846ull, 6358232727226174473ull,
+ 1090964126985138005ull, 6489957517781648134ull}},
+{{14940767389480423962ull, 12559476927460105995ull,
+ 10587077195586198314ull, 8112446897227060167ull}},
+{{7032136609211571024ull, 12461359098089954151ull,
+ 13534452274882455802ull, 5070279310766912604ull}},
+{{4178484743087075876ull, 6353326835757666881ull,
+ 16918065343603069753ull, 6337849138458640755ull}},
+{{9834791947286232749ull, 12553344563124471505ull,
+ 16535895661076449287ull, 7922311423073300944ull}},
+{{17675960013122365228ull, 14763369379593876546ull,
+ 10334934788172780804ull, 4951444639420813090ull}},
+{{12871577979548180727ull, 7467650782794067ull, 3695296448361200198ull,
+ 6189305799276016363ull}},
+{{11477786456007838005ull, 9232706600333268392ull, 7434542024112343ull,
+ 7736632249095020454ull}},
+{{7173616535004898753ull, 12687970652849374601ull,
+ 13839704644047233926ull, 4835395155684387783ull}},
+{{13578706687183511346ull, 6636591279206942443ull,
+ 12687944786631654504ull, 6044243944605484729ull}},
+{{12361697340552001278ull, 8295739099008678054ull,
+ 2024872928007404418ull, 7555304930756855912ull}},
+{{3114374819417612895ull, 9796522955307811688ull,
+ 1265545580004627761ull, 4722065581723034945ull}},
+{{3892968524272016118ull, 16857339712562152514ull,
+ 6193617993433172605ull, 5902581977153793681ull}},
+{{14089582692194795956ull, 7236616585420526930ull,
+ 12353708510218853661ull, 7378227471442242101ull}},
+{{8388606328388719137ull, 13657456750203046567ull,
+ 1607077582491403364ull, 9222784339302802627ull}},
+{{12160407982884031317ull, 17759282505731679912ull,
+ 17145324553552984766ull, 5764240212064251641ull}},
+{{15200509978605039146ull, 12975731095309824082ull,
+ 7596597636659067246ull, 7205300265080314552ull}},
+{{9777265436401523124ull, 6996291832282504295ull,
+ 9495747045823834058ull, 9006625331350393190ull}},
+{{13028319925392033809ull, 8984368413603953088ull,
+ 1323155885212508382ull, 5629140832093995744ull}},
+{{16285399906740042261ull, 2007088480150165552ull,
+ 1653944856515635478ull, 7036426040117494680ull}},
+{{1910005809715501210ull, 11732232637042482749ull,
+ 2067431070644544347ull, 8795532550146868350ull}},
+{{3499596640285882208ull, 5026802388937857766ull,
+ 15127202474435003929ull, 5497207843841792718ull}},
+{{13597867837212128568ull, 10895189004599710111ull,
+ 9685631056188979103ull, 6871509804802240898ull}},
+{{12385648778087772806ull, 9007300237322249735ull,
+ 2883666783381448071ull, 8589387256002801123ull}},
+{{14658559513945939860ull, 12547091675967487940ull,
+ 17943192804109262708ull, 5368367035001750701ull}},
+{{18323199392432424825ull, 15683864594959359925ull,
+ 8593932949854414673ull, 6710458793752188377ull}},
+{{9068941185258367319ull, 5769772688417036195ull,
+ 15354102205745406246ull, 8388073492190235471ull}},
+{{3362245231572785623ull, 17441165985542811334ull,
+ 16513842906231960759ull, 5242545932618897169ull}},
+{{13426178576320757836ull, 17189771463501126263ull,
+ 6807245577507787237ull, 6553182415773621462ull}},
+{{12171037201973559391ull, 7652156274094244117ull,
+ 17732429008739509855ull, 8191478019717026827ull}},
+{{9912741260447168572ull, 11700126698949984429ull,
+ 8776925121248499707ull, 5119673762323141767ull}},
+{{17002612593986348618ull, 10013472355260092632ull,
+ 6359470383133236730ull, 6399592202903927209ull}},
+{{2806521668773384157ull, 3293468407220339983ull,
+ 12561023997343933817ull, 7999490253629909011ull}},
+{{8671605070624446954ull, 13587632800581182249ull,
+ 5544796989126264683ull, 4999681408518693132ull}},
+{{15451192356707946597ull, 12372854982299089907ull,
+ 6930996236407830854ull, 6249601760648366415ull}},
+{{14702304427457545342ull, 6242696691019086576ull,
+ 4052059277082400664ull, 7812002200810458019ull}},
+{{9188940267160965839ull, 3901685431886929110ull, 226694038962806463ull,
+ 4882501375506536262ull}},
+{{2262803297096431490ull, 265420771431273484ull, 9506739585558283887ull,
+ 6103126719383170327ull}},
+{{2828504121370539363ull, 14166834019571255567ull,
+ 7271738463520466954ull, 7628908399228962909ull}},
+{{8685344103497668958ull, 13465957280659422633ull,
+ 6850679548913985798ull, 4768067749518101818ull}},
+{{15468366147799474101ull, 7609074563969502483ull,
+ 17786721472997258056ull, 5960084686897627272ull}},
+{{14723771666321954722ull, 9511343204961878104ull,
+ 3786657767537020954ull, 7450105858622034091ull}},
+{{9202357291451221702ull, 10556275521528561719ull, 60818095496944144ull,
+ 4656316161638771307ull}},
+{{6891260595886639223ull, 13195344401910702149ull,
+ 13911080674653343892ull, 5820395202048464133ull}},
+{{13225761763285686933ull, 16494180502388377686ull,
+ 3553792788034516153ull, 7275494002560580167ull}},
+{{7308830167252332858ull, 6782667572703308396ull,
+ 18277299040325308904ull, 9094367503200725208ull}},
+{{13791390891387483844ull, 4239167232939567747ull,
+ 11423311900203318065ull, 5683979689500453255ull}},
+{{12627552595806966901ull, 9910645059601847588ull,
+ 9667453856826759677ull, 7104974611875566569ull}},
+{{15784440744758708626ull, 16999992342929697389ull,
+ 16696003339460837500ull, 8881218264844458211ull}},
+{{12171118474687886844ull, 1401623177476285060ull,
+ 8129159077949329486ull, 5550761415527786382ull}},
+{{15213898093359858554ull, 10975401008700132133ull,
+ 938076810581886049ull, 6938451769409732978ull}},
+{{5182314561417659481ull, 18330937279302553071ull,
+ 10395968050082133369ull, 8673064711762166222ull}},
+{{10156475628527119032ull, 4539306771923013813ull,
+ 1885794012873945452ull, 5420665444851353889ull}},
+{{17307280554086286694ull, 5674133464903767266ull,
+ 6968928534519819719ull, 6775831806064192361ull}},
+{{12410728655753082559ull, 2480980812702321179ull,
+ 13322846686577162553ull, 8469789757580240451ull}},
+{{5450862400631982647ull, 13079828054007420497ull,
+ 6020936169897032643ull, 5293618598487650282ull}},
+{{11425264019217366213ull, 11738099049081887717ull,
+ 16749542249226066612ull, 6617023248109562852ull}},
+{{446521968739544054ull, 14672623811352359647ull,
+ 2490183737823031649ull, 8271279060136953566ull}},
+{{7196605258103296890ull, 2252860854454142923ull,
+ 15391422891421558493ull, 5169549412585595978ull}},
+{{4384070554201733209ull, 7427762086495066558ull,
+ 10015906577422172308ull, 6461936765731994973ull}},
+{{14703460229606942319ull, 9284702608118833197ull,
+ 17131569240205103289ull, 8077420957164993716ull}},
+{{11495505652718032901ull, 17332154176142740508ull,
+ 1483858738273413747ull, 5048388098228121073ull}},
+{{14369382065897541126ull, 17053506701751037731ull,
+ 6466509441269155088ull, 6310485122785151341ull}},
+{{13350041563944538504ull, 2870139303479245548ull,
+ 12694822820013831765ull, 7888106403481439176ull}},
+{{17567148014320112373ull, 4099680073888222419ull,
+ 7934264262508644853ull, 4930066502175899485ull}},
+{{17347248999472752562ull, 9736286110787665928ull,
+ 14529516346563193970ull, 6162583127719874356ull}},
+{{3237317175631389087ull, 2946985601629806603ull,
+ 18161895433203992463ull, 7703228909649842945ull}},
+{{18164224299265475843ull, 8759395028659710982ull,
+ 4433655618111413433ull, 4814518068531151841ull}},
+{{13481908337227068996ull, 15560929804252026632ull,
+ 10153755541066654695ull, 6018147585663939801ull}},
+{{16852385421533836245ull, 14839476236887645386ull,
+ 17303880444760706273ull, 7522684482079924751ull}},
+{{15144426906886035557ull, 2357143620413696510ull,
+ 17732454305616523277ull, 4701677801299952969ull}},
+{{9707161596752768639ull, 7558115543944508542ull,
+ 8330509826738490384ull, 5877097251624941212ull}},
+{{2910579959086184990ull, 9447644429930635678ull,
+ 10413137283423112980ull, 7346371564531176515ull}},
+{{12861596985712507045ull, 11809555537413294597ull,
+ 8404735585851503321ull, 9182964455663970644ull}},
+{{10344341125284010856ull, 463443183242227267ull,
+ 14476331778011965384ull, 5739352784789981652ull}},
+{{8318740388177625665ull, 579303979052784084ull,
+ 18095414722514956730ull, 7174190980987477065ull}},
+{{10398425485222032082ull, 9947502010670755913ull,
+ 8784210347861532200ull, 8967738726234346332ull}},
+{{18028230974332239811ull, 6217188756669222445ull,
+ 14713503504268233433ull, 5604836703896466457ull}},
+{{8700230662633136052ull, 12383171964263915961ull,
+ 4556821325053128079ull, 7006045879870583072ull}},
+{{15486974346718807969ull, 10867278936902507047ull,
+ 5696026656316410099ull, 8757557349838228840ull}},
+{{16596887994340336837ull, 4486206326350372952ull,
+ 3560016660197756312ull, 5473473343648893025ull}},
+{{2299365919215869430ull, 5607757907937966191ull,
+ 9061706843674583294ull, 6841841679561116281ull}},
+{{16709265454302000499ull, 16233069421777233546ull,
+ 15938819573020617021ull, 8552302099451395351ull}},
+{{15054976927366138216ull, 12451511397824464918ull,
+ 16879291260778967494ull, 5345188812157122094ull}},
+{{9595349122352896962ull, 6341017210425805340ull,
+ 11875742039118933560ull, 6681486015196402618ull}},
+{{11994186402941121202ull, 7926271513032256675ull,
+ 5621305512043891142ull, 8351857518995503273ull}},
+{{5190523492624506800ull, 342233677217772518ull,
+ 15042530991095901724ull, 5219910949372189545ull}},
+{{15711526402635409307ull, 427792096522215647ull,
+ 4968105683587713443ull, 6524888686715236932ull}},
+{{15027721984866873730ull, 14369798175934933271ull,
+ 6210132104484641803ull, 8156110858394046165ull}},
+{{16309855268182877938ull, 6675280850745639342ull,
+ 6187175574516595079ull, 5097569286496278853ull}},
+{{11163947048373821614ull, 3732415045004661274ull,
+ 12345655486573131753ull, 6371961608120348566ull}},
+{{4731561773612501209ull, 9277204824683214497ull,
+ 6208697321361638883ull, 7964952010150435708ull}},
+{{14486441154576283016ull, 3492410006213315108ull,
+ 13103807862705800110ull, 4978095006344022317ull}},
+{{18108051443220353770ull, 13588884544621419693ull,
+ 2544701773100086425ull, 6222618757930027897ull}},
+{{8800006248743278500ull, 3151047625494610905ull,
+ 7792563234802495936ull, 7778273447412534871ull}},
+{{17029218951533018823ull, 1969404765934131815ull,
+ 11787881049392641816ull, 4861420904632834294ull}},
+{{16674837670988885624ull, 2461755957417664769ull,
+ 5511479274886026462ull, 6076776130791042868ull}},
+{{7008489033453943318ull, 12300566983626856770ull,
+ 6889349093607533077ull, 7595970163488803585ull}},
+{{8991991664336102478ull, 9993697373980479433ull,
+ 15835058229573177933ull, 4747481352180502240ull}},
+{{15851675598847516001ull, 17103807735902987195ull,
+ 1347078713256920800ull, 5934351690225627801ull}},
+{{15202908480132007098ull, 2933015596169182378ull,
+ 6295534409998538905ull, 7417939612782034751ull}},
+{{14113503818509892340ull, 13362349793674208746ull,
+ 10852238033890168671ull, 4636212257988771719ull}},
+{{8418507736282589617ull, 12091251223665373029ull,
+ 8953611523935322935ull, 5795265322485964649ull}},
+{{15134820688780624925ull, 10502378011154328382ull,
+ 15803700423346541573ull, 7244081653107455811ull}},
+{{9695153824121005349ull, 17739658532370298382ull,
+ 15142939510755789062ull, 9055102066384319764ull}},
+{{1447785121648240439ull, 6475600564304048585ull, 240965157367592356ull,
+ 5659438791490199853ull}},
+{{6421417420487688453ull, 8094500705380060731ull,
+ 4912892465136878349ull, 7074298489362749816ull}},
+{{3415085757182222662ull, 14729811900152463818ull,
+ 6141115581421097936ull, 8842873111703437270ull}},
+{{6746114616666277068ull, 9206132437595289886ull,
+ 17673255293670349922ull, 5526795694814648293ull}},
+{{17656015307687622143ull, 2284293510139336549ull,
+ 8256511061805773691ull, 6908494618518310367ull}},
+{{8234961079327363966ull, 16690424942956334399ull,
+ 5708952808829829209ull, 8635618273147887959ull}},
+{{12064379702220684335ull, 3513986561706627143ull,
+ 10485624533159725112ull, 5397261420717429974ull}},
+{{10468788609348467515ull, 4392483202133283929ull,
+ 3883658629594880582ull, 6746576775896787468ull}},
+{{17697671780112972297ull, 14713976039521380719ull,
+ 4854573286993600727ull, 8433220969870984335ull}},
+{{17978573890211689542ull, 16113764052341944805ull,
+ 9951637332012082310ull, 5270763106169365209ull}},
+{{8638159307482448215ull, 10918833028572655199ull,
+ 17051232683442490792ull, 6588453882711706511ull}},
+{{6186013115925672365ull, 13648541285715818999ull,
+ 16702354835875725586ull, 8235567353389633139ull}},
+{{10783787225094627084ull, 13142024321999774778ull,
+ 8133128763208634539ull, 5147229595868520712ull}},
+{{4256361994513508047ull, 11815844384072330569ull,
+ 10166410954010793174ull, 6434036994835650890ull}},
+{{9932138511569272963ull, 5546433443235637403ull,
+ 3484641655658715660ull, 8042546243544563613ull}},
+{{3901743560517101650ull, 12689892938877049185ull,
+ 4483744044000391239ull, 5026591402215352258ull}},
+{{9488865469073764966ull, 11250680155168923577ull,
+ 14828052091855264857ull, 6283239252769190322ull}},
+{{16472767854769594112ull, 228292138678990759ull,
+ 9311693077964305264ull, 7854049065961487903ull}},
+{{17213008936872078176ull, 142682586674369224ull,
+ 12737337201368772646ull, 4908780666225929939ull}},
+{{3069517097380546104ull, 9401725270197737339ull,
+ 11309985483283577903ull, 6135975832782412424ull}},
+{{17671954427007846342ull, 7140470569319783769ull,
+ 14137481854104472379ull, 7669969790978015530ull}},
+{{4127442489238822108ull, 2156951096611170904ull,
+ 13447612177242683141ull, 4793731119361259706ull}},
+{{5159303111548527635ull, 7307874889191351534ull,
+ 7586143184698578118ull, 5992163899201574633ull}},
+{{15672500926290435351ull, 18358215648343965225ull,
+ 14094364999300610551ull, 7490204874001968291ull}},
+{{2877784051290440239ull, 18391413807856060122ull,
+ 6503135115349187642ull, 4681378046251230182ull}},
+{{12820602100967826106ull, 13765895222965299344ull,
+ 17352290931041260361ull, 5851722557814037727ull}},
+{{16025752626209782633ull, 3372310973424460468ull,
+ 17078677645374187548ull, 7314653197267547159ull}},
+{{1585446709052676675ull, 4215388716780575586ull,
+ 16736661038290346531ull, 9143316496584433949ull}},
+{{5602590211585310826ull, 328774938774165789ull,
+ 12766256158145160534ull, 5714572810365271218ull}},
+{{11614923782909026436ull, 9634340710322483044ull,
+ 6734448160826674859ull, 7143216012956589023ull}},
+{{14518654728636283045ull, 7431239869475715901ull,
+ 3806374182605955670ull, 8929020016195736279ull}},
+{{11380002214611370855ull, 32838899994934534ull, 9296512891769804150ull,
+ 5580637510122335174ull}},
+{{5001630731409437761ull, 9264420661848443976ull,
+ 2397269077857479379ull, 6975796887652918968ull}},
+{{6252038414261797201ull, 6968839808883167066ull,
+ 2996586347321849224ull, 8719746109566148710ull}},
+{{8519210027341011155ull, 4355524880551979416ull,
+ 15707924522358319477ull, 5449841318478842943ull}},
+{{10649012534176263944ull, 10056092119117362174ull,
+ 15023219634520511442ull, 6812301648098553679ull}},
+{{4087893630865554121ull, 3346743112041926910ull,
+ 14167338524723251399ull, 8515377060123192099ull}},
+{{16389991574573135038ull, 9009243472667286174ull,
+ 6548743568738338172ull, 5322110662576995062ull}},
+{{11264117431361642989ull, 11261554340834107718ull,
+ 17409301497777698523ull, 6652638328221243827ull}},
+{{4856774752347277929ull, 9465256907615246744ull,
+ 17149940853794735250ull, 8315797910276554784ull}},
+{{3035484220217048706ull, 10527471585686917119ull,
+ 10718713033621709531ull, 5197373693922846740ull}},
+{{17629413330553474594ull, 8547653463681258494ull,
+ 13398391292027136914ull, 6496717117403558425ull}},
+{{12813394626337067434ull, 1461194792746797310ull,
+ 2912931059751757431ull, 8120896396754448032ull}},
+{{3396685623033279243ull, 7830775773107830175ull,
+ 1820581912344848394ull, 5075560247971530020ull}},
+{{18080915084073762765ull, 565097679530011910ull,
+ 2275727390431060493ull, 6344450309964412525ull}},
+{{13377771818237427648ull, 5318058117839902792ull,
+ 7456345256466213520ull, 7930562887455515656ull}},
+{{8361107386398392280ull, 3323786323649939245ull,
+ 4660215785291383450ull, 4956601804659697285ull}},
+{{15063070251425378254ull, 13378104941417199864ull,
+ 10436955750041617216ull, 6195752255824621606ull}},
+{{382093740572171202ull, 16722631176771499831ull,
+ 3822822650697245712ull, 7744690319780777008ull}},
+{{7156337615498688857ull, 10451644485482187394ull,
+ 2389264156685778570ull, 4840431449862985630ull}},
+{{18168794056228136880ull, 3841183569997958434ull,
+ 12209952232711999021ull, 6050539312328732037ull}},
+{{13487620533430395291ull, 9413165480924835947ull,
+ 1427382235607835064ull, 7563174140410915047ull}},
+{{6123919824180303105ull, 5883228425578022467ull,
+ 7809642924895978771ull, 4726983837756821904ull}},
+{{3043213761797990977ull, 2742349513545140180ull,
+ 9762053656119973464ull, 5908729797196027380ull}},
+{{3804017202247488722ull, 3427936891931425225ull,
+ 12202567070149966830ull, 7385912246495034225ull}},
+{{13906725797473150211ull, 15977518612739304477ull,
+ 709075391202647412ull, 4616195154059396391ull}},
+{{3548349191559274052ull, 1525154192214578981ull,
+ 14721402294285472978ull, 5770243942574245488ull}},
+{{9047122507876480469ull, 11129814777122999534ull,
+ 18401752867856841222ull, 7212804928217806860ull}},
+{{2085531097990824778ull, 4688896434548973610ull,
+ 4555447011111499912ull, 9016006160272258576ull}},
+{{5915142954671653390ull, 2930560271593108506ull,
+ 2847154381944687445ull, 5635003850170161610ull}},
+{{16617300730194342546ull, 8274886357918773536ull,
+ 12782315014285635114ull, 7043754812712702012ull}},
+{{2324881839033376566ull, 1120235910543691113ull,
+ 15977893767857043893ull, 8804693515890877515ull}},
+{{12982266195464330114ull, 3005990453303500897ull,
+ 7680340595696958481ull, 5502933447431798447ull}},
+{{2392774689048248930ull, 8369174085056764026ull,
+ 4988739726193810197ull, 6878666809289748059ull}},
+{{12214340398165086971ull, 15073153624748342936ull,
+ 1624238639314874842ull, 8598333511612185074ull}},
+{{7633962748853179357ull, 14032407033895102239ull,
+ 5626835167999184680ull, 5373958444757615671ull}},
+{{4930767417639086292ull, 17540508792368877799ull,
+ 2421857941571592946ull, 6717448055947019589ull}},
+{{1551773253621469961ull, 12702263953606321441ull,
+ 7639008445391879087ull, 8396810069933774486ull}},
+{{12499073329581888486ull, 14856443998645032756ull,
+ 162694259942536525ull, 5248006293708609054ull}},
+{{15623841661977360607ull, 4735496943024127233ull,
+ 9426739861782946465ull, 6560007867135761317ull}},
+{{5694744022189537047ull, 10531057197207546946ull,
+ 16395110845656070985ull, 8200009833919701646ull}},
+{{8170901032295848558ull, 18111125794323186601ull,
+ 5635258260107656461ull, 5125006146199813529ull}},
+{{14825312308797198602ull, 8803849187621819539ull,
+ 11655758843561958481ull, 6406257682749766911ull}},
+{{13919954367569110348ull, 15616497502954662328ull,
+ 9958012536025060197ull, 8007822103437208639ull}},
+{{8699971479730693968ull, 12066153948560357907ull,
+ 13141286862656744479ull, 5004888814648255399ull}},
+{{6263278331235979556ull, 10471006417273059480ull,
+ 11814922559893542695ull, 6256111018310319249ull}},
+{{7829097914044974444ull, 8477072003163936446ull, 933595144584764657ull,
+ 7820138772887899062ull}},
+{{281500177850721124ull, 16827385048045930039ull,
+ 14418555020647641622ull, 4887586733054936913ull}},
+{{14186933277595565117ull, 11810859273202636740ull,
+ 4188135720527388316ull, 6109483416318671142ull}},
+{{17733666596994456396ull, 14763574091503295925ull,
+ 14458541687514011203ull, 7636854270398338927ull}},
+{{13389384632335229200ull, 6921390797975866001ull,
+ 15954117582337338858ull, 4773033918998961829ull}},
+{{2901672735136872787ull, 17875110534324608310ull,
+ 6107588922639509860ull, 5966292398748702287ull}},
+{{12850462955775866792ull, 3897144094196208771ull,
+ 3022800134871999422ull, 7457865498435877859ull}},
+{{5725696338146222793ull, 16270773114154794194ull,
+ 18030151148790857302ull, 4661165936522423661ull}},
+{{16380492459537554299ull, 11115094355838716934ull,
+ 8702630880706407916ull, 5826457420653029577ull}},
+{{11252243537567167066ull, 13893867944798396168ull,
+ 15489974619310397799ull, 7283071775816286971ull}},
+{{14065304421958958833ull, 12755648912570607306ull,
+ 14750782255710609345ull, 9103839719770358714ull}},
+{{13402501282151737175ull, 1054751542715547710ull,
+ 13830924928246518745ull, 5689899824856474196ull}},
+{{7529754565834895660ull, 5930125446821822542ull,
+ 17288656160308148431ull, 7112374781070592745ull}},
+{{188821170438843767ull, 2800970790099890274ull, 7775762145103021827ull,
+ 8890468476338240932ull}},
+{{4729699249951665259ull, 17891507808308289085ull,
+ 14083223377544164449ull, 5556542797711400582ull}},
+{{10523810080866969477ull, 8529326705103197644ull,
+ 8380657185075429754ull, 6945678497139250728ull}},
+{{13154762601083711846ull, 1438286344524221247ull,
+ 10475821481344287193ull, 8682098121424063410ull}},
+{{15139255653318401760ull, 12428144011396108039ull,
+ 11159074444267567399ull, 5426311325890039631ull}},
+{{14312383548220614296ull, 10923493995817747145ull,
+ 9337157036907071345ull, 6782889157362549539ull}},
+{{4055421379993604158ull, 18266053513199571836ull,
+ 7059760277706451277ull, 8478611446703186924ull}},
+{{11758010399350778407ull, 13722126454963426349ull,
+ 13635722210421307856ull, 5299132154189491827ull}},
+{{862454943906309296ull, 17152658068704282937ull,
+ 12432966744599246916ull, 6623915192736864784ull}},
+{{5689754698310274524ull, 2994078512170802055ull,
+ 15541208430749058646ull, 8279893990921080980ull}},
+{{10473625714085003434ull, 15706357125388914996ull,
+ 489883232363385845ull, 5174933744325675613ull}},
+{{13092032142606254292ull, 5797888351453980033ull,
+ 5224040058881620211ull, 6468667180407094516ull}},
+{{2529982122975654153ull, 2635674420890087138ull,
+ 6530050073602025264ull, 8085833975508868145ull}},
+{{6192924845287171750ull, 1647296513056304461ull,
+ 15610496342069735550ull, 5053646234693042590ull}},
+{{12352842075036352591ull, 11282492678175156384ull,
+ 10289748390732393629ull, 6317057793366303238ull}},
+{{15441052593795440739ull, 268057792436781768ull,
+ 3638813451560716229ull, 7896322241707879048ull}},
+{{9650657871122150462ull, 2473379129486682557ull,
+ 2274258407225447643ull, 4935201401067424405ull}},
+{{16675008357330075982ull, 16926781967140516908ull,
+ 7454509027459197457ull, 6169001751334280506ull}},
+{{2397016372953043361ull, 7323419403643482424ull, 94764247469221014ull,
+ 7711252189167850633ull}},
+{{1498135233095652101ull, 18412195182559340227ull,
+ 11588442700736732893ull, 4819532618229906645ull}},
+{{15707727096651728838ull, 9180185922917011571ull,
+ 650495320638752405ull, 6024415772787383307ull}},
+{{15022972852387273143ull, 16086918422073652368ull,
+ 14648177206080604218ull, 7530519715984229133ull}},
+{{9389358032742045715ull, 14666010032223420634ull,
+ 11460953763014071588ull, 4706574822490143208ull}},
+{{2513325504072781335ull, 18332512540279275793ull,
+ 14326192203767589485ull, 5883218528112679010ull}},
+{{7753342898518364573ull, 9080582620066931029ull,
+ 8684368217854711049ull, 7354023160140848763ull}},
+{{14303364641575343620ull, 15962414293511051690ull,
+ 6243774253891000907ull, 9192528950176060954ull}},
+{{13551288919411977667ull, 7670665924230713354ull,
+ 8514044927109263471ull, 5745330593860038096ull}},
+{{7715739112410196275ull, 4976646386861003789ull,
+ 10642556158886579339ull, 7181663242325047620ull}},
+{{14256359908940133248ull, 1609121965148866832ull,
+ 13303195198608224174ull, 8977079052906309525ull}},
+{{8910224943087583280ull, 14840759283500205482ull,
+ 10620340008343834060ull, 5610674408066443453ull}},
+{{1914409142004703292ull, 104205030665705237ull,
+ 17887111028857180480ull, 7013343010083054316ull}},
+{{7004697445933267019ull, 130256288332131546ull, 3912144712361923984ull,
+ 8766678762603817896ull}},
+{{8989621922135679791ull, 81410180207582216ull, 2445090445226202490ull,
+ 5479174226627386185ull}},
+{{11237027402669599738ull, 9325134762114253578ull,
+ 7668049074960141016ull, 6848967783284232731ull}},
+{{4822912216482223865ull, 11656418452642816973ull,
+ 4973375325272788366ull, 8561209729105290914ull}},
+{{5320163144515083868ull, 2673575514474372704ull,
+ 7720045596722880633ull, 5350756080690806821ull}},
+{{6650203930643854835ull, 7953655411520353784ull,
+ 14261743014330988695ull, 6688445100863508526ull}},
+{{8312754913304818543ull, 5330383245973054326ull,
+ 8603806731058960061ull, 8360556376079385658ull}},
+{{583785802388123686ull, 5637332537946852906ull, 9989065225339237942ull,
+ 5225347735049616036ull}},
+{{9953104289839930415ull, 16270037709288341940ull,
+ 12486331531674047427ull, 6531684668812020045ull}},
+{{12441380362299913019ull, 15725861118183039521ull,
+ 1772856359310395572ull, 8164605836015025057ull}},
+{{858333698796363781ull, 605291162009623893ull, 12637250270637466993ull,
+ 5102878647509390660ull}},
+{{5684603141922842630ull, 5368299970939417770ull,
+ 15796562838296833741ull, 6378598309386738325ull}},
+{{16329125964258329095ull, 11322060982101660116ull,
+ 5910645492588878464ull, 7973247886733422907ull}},
+{{982331690806679877ull, 7076288113813537573ull, 1388310423654355088ull,
+ 4983279929208389317ull}},
+{{5839600631935737750ull, 8845360142266921966ull,
+ 6347074047995331764ull, 6229099911510486646ull}},
+{{16522872826774447995ull, 11056700177833652457ull,
+ 17157214596848940513ull, 7786374889388108307ull}},
+{{3409266489092948141ull, 18439652657214502546ull,
+ 8417416113816893868ull, 4866484305867567692ull}},
+{{13484955148220960984ull, 4602821747808576566ull,
+ 10521770142271117336ull, 6083105382334459615ull}},
+{{7632821898421425422ull, 5753527184760720708ull,
+ 8540526659411508766ull, 7603881727918074519ull}},
+{{13993885723368166697ull, 17431012545757614154ull,
+ 12255358189773274834ull, 4752426079948796574ull}},
+{{8268985117355432563ull, 12565393645342241885ull,
+ 6095825700361817735ull, 5940532599935995718ull}},
+{{14947917415121678608ull, 11095056038250414452ull,
+ 16843154162307047977ull, 7425665749919994647ull}},
+{{119076347596273322ull, 16880996265427177ull, 17444500379082986842ull,
+ 4641041093699996654ull}},
+{{4760531452922729557ull, 9244473282186559779ull,
+ 12582253436998957744ull, 5801301367124995818ull}},
+{{1338978297726024042ull, 11555591602733199724ull,
+ 6504444759393921372ull, 7251626708906244773ull}},
+{{1673722872157530052ull, 14444489503416499655ull,
+ 12742241967669789619ull, 9064533386132805966ull}},
+{{7963605822739538139ull, 6721962930421618332ull,
+ 3352215211366230608ull, 5665333366333003729ull}},
+{{9954507278424422673ull, 8402453663027022915ull,
+ 8801955032635176164ull, 7081666707916254661ull}},
+{{7831448079603140437ull, 10503067078783778644ull,
+ 15614129809221358109ull, 8852083384895318326ull}},
+{{14118027086606738581ull, 8870259933453555604ull,
+ 5147145112335960914ull, 5532552115559573954ull}},
+{{17647533858258423227ull, 1864452879962168697ull,
+ 15657303427274726951ull, 6915690144449467442ull}},
+{{8224359267540865321ull, 16165624155234874584ull,
+ 10348257247238632880ull, 8644612680561834303ull}},
+{{5140224542213040826ull, 10103515097021796615ull,
+ 13385189807165227406ull, 5402882925351146439ull}},
+{{1813594659338913128ull, 3406021834422469961ull,
+ 12119801240529146354ull, 6753603656688933049ull}},
+{{6878679342601029314ull, 13480899329882863259ull,
+ 1314693495379269230ull, 8442004570861166312ull}},
+{{1993331579911949370ull, 3813876062749401633ull, 821683434612043269ull,
+ 5276252856788228945ull}},
+{{7103350493317324616ull, 9379031096864139945ull,
+ 5638790311692441990ull, 6595316070985286181ull}},
+{{13490874135074043674ull, 2500416834225399123ull,
+ 11660173908042940392ull, 8244145088731607726ull}},
+{{6125953325207583344ull, 1562760521390874452ull,
+ 2675922674099449841ull, 5152590680457254829ull}},
+{{7657441656509479180ull, 6565136670165980969ull,
+ 7956589361051700205ull, 6440738350571568536ull}},
+{{14183488089064236879ull, 12818106856134864115ull,
+ 9945736701314625256ull, 8050922938214460670ull}},
+{{6558837046451454098ull, 8011316785084290072ull,
+ 1604399419894252881ull, 5031826836384037919ull}},
+{{8198546308064317622ull, 14625831999782750494ull,
+ 15840557330149979813ull, 6289783545480047398ull}},
+{{1024810848225621219ull, 4447231944446274406ull,
+ 10577324625832698959ull, 7862229431850059248ull}},
+{{14475564835423176974ull, 9697048992920003359ull,
+ 6610827891145436849ull, 4913893394906287030ull}},
+{{13482770025851583314ull, 16732997259577392103ull,
+ 17486906900786571869ull, 6142366743632858787ull}},
+{{12241776513887091238ull, 7081188519189576417ull,
+ 17246947607555826933ull, 7677958429541073484ull}},
+{{733581293538350168ull, 6731585833707179213ull, 1555970217867616025ull,
+ 4798724018463170928ull}},
+{{5528662635350325614ull, 13026168310561361920ull,
+ 1944962772334520031ull, 5998405023078963660ull}},
+{{6910828294187907017ull, 11671024369774314496ull,
+ 2431203465418150039ull, 7498006278848704575ull}},
+{{4319267683867441886ull, 14211919258750028416ull,
+ 8437031193527425630ull, 4686253924280440359ull}},
+{{5399084604834302357ull, 8541527036582759712ull,
+ 5934602973481894134ull, 5857817405350550449ull}},
+{{6748855756042877946ull, 1453536758873673832ull,
+ 12029939735279755572ull, 7322271756688188061ull}},
+{{8436069695053597433ull, 1816920948592092290ull,
+ 1202366613817530753ull, 9152839695860235077ull}},
+{{9884229577835886300ull, 12664790638938527441ull,
+ 3057322142849650672ull, 5720524809912646923ull}},
+{{16966972990722245779ull, 15830988298673159301ull,
+ 17656710733844227052ull, 7150656012390808653ull}},
+{{7373658183120643511ull, 1341991299631897511ull,
+ 8235830362023120104ull, 8938320015488510817ull}},
+{{11526065392091484051ull, 838744562269935944ull,
+ 16676609022332919825ull, 5586450009680319260ull}},
+{{14407581740114355063ull, 5660116721264807834ull,
+ 2399017204206598165ull, 6983062512100399076ull}},
+{{8786105138288168021ull, 11686831920008397697ull,
+ 2998771505258247706ull, 8728828140125498845ull}},
+{{17020530757498574773ull, 11915955968432636464ull,
+ 4180075200000098768ull, 5455517587578436778ull}},
+{{2828919373163666850ull, 14894944960540795581ull,
+ 14448466036854899268ull, 6819396984473045972ull}},
+{{8147835234881971467ull, 171937126966442860ull,
+ 18060582546068624086ull, 8524246230591307465ull}},
+{{14315769058656007975ull, 13942518759636190499ull,
+ 4370335063651808197ull, 5327653894119567166ull}},
+{{13283025304892622065ull, 3593090394263074412ull,
+ 14686290866419536055ull, 6659567367649458957ull}},
+{{16603781631115777581ull, 18326421048111006727ull,
+ 4522805527742256356ull, 8324459209561823697ull}},
+{{17294892547088442844ull, 2230641118214603396ull,
+ 14355968500907379983ull, 5202787005976139810ull}},
+{{3171871610151001939ull, 16623359453050417958ull,
+ 8721588589279449170ull, 6503483757470174763ull}},
+{{13188211549543528231ull, 11555827279458246639ull,
+ 6290299718171923559ull, 8129354696837718454ull}},
+{{15160161246105787001ull, 14139921077302486005ull,
+ 17766495379139615936ull, 5080846685523574033ull}},
+{{5115143502350070039ull, 17674901346628107507ull,
+ 8373061168642356208ull, 6351058356904467542ull}},
+{{1782243359510199645ull, 3646882609575582768ull,
+ 1242954423948169453ull, 7938822946130584428ull}},
+{{1113902099693874778ull, 4585144640198433182ull,
+ 10000218551822381716ull, 4961764341331615267ull}},
+{{10615749661472119280ull, 5731430800248041477ull,
+ 7888587171350589241ull, 6202205426664519084ull}},
+{{17881373095267537004ull, 11775974518737439750ull,
+ 9860733964188236551ull, 7752756783330648855ull}},
+{{6564172166114822724ull, 14277513101851981700ull,
+ 13080487755258729700ull, 4845472989581655534ull}},
+{{8205215207643528405ull, 17846891377314977125ull,
+ 7127237657218636317ull, 6056841236977069418ull}},
+{{14868205027981798410ull, 8473556166361557694ull,
+ 18132419108378071205ull, 7571051546221336772ull}},
+{{4680942124061236102ull, 7601815613189667511ull,
+ 2109389905881518695ull, 4731907216388335483ull}},
+{{1239491636649157224ull, 4890583498059696485ull,
+ 16471795437634062081ull, 5914884020485419353ull}},
+{{6161050564238834434ull, 10724915391002008510ull,
+ 6754686241760413889ull, 7393605025606774192ull}},
+{{17685714657931435233ull, 18232287165444725078ull,
+ 4221678901100258680ull, 4621003141004233870ull}},
+{{12883771285559518233ull, 4343614883096354732ull,
+ 14500470663230099159ull, 5776253926255292337ull}},
+{{16104714106949397792ull, 817832585443055511ull,
+ 4290530273755460237ull, 7220317407819115422ull}},
+{{15519206615259359335ull, 5633976750231207293ull,
+ 14586534879049101104ull, 9025396759773894277ull}},
+{{12005347143750793537ull, 3521235468894504558ull,
+ 11422427308619382142ull, 5640872974858683923ull}},
+{{5783311892833716113ull, 13624916372972906506ull,
+ 9666348117346839773ull, 7051091218573354904ull}},
+{{16452511902896920949ull, 3196087410933969420ull,
+ 12082935146683549717ull, 8813864023216693630ull}},
+{{1059447902455799785ull, 4303397641047424840ull,
+ 2940148448249830669ull, 5508665014510433519ull}},
+{{1324309878069749732ull, 9990933069736668954ull,
+ 17510243615594452048ull, 6885831268138041898ull}},
+{{10878759384441962972ull, 12488666337170836192ull,
+ 12664432482638289252ull, 8607289085172552373ull}},
+{{6799224615276226858ull, 17028788497586548428ull,
+ 10221113310862624734ull, 5379555678232845233ull}},
+{{8499030769095283572ull, 12062613585128409727ull,
+ 17388077657005668822ull, 6724444597791056541ull}},
+{{6012102442941716561ull, 5854894944555736351ull,
+ 7900039015974922316ull, 8405555747238820677ull}},
+{{10675093054479654707ull, 12882681377202111027ull,
+ 7243367394198020399ull, 5253472342024262923ull}},
+{{8732180299672180479ull, 11491665703075250880ull,
+ 4442523224320137595ull, 6566840427530328654ull}},
+{{10915225374590225599ull, 9752896110416675696ull,
+ 14776526067254947802ull, 8208550534412910817ull}},
+{{6822015859118891000ull, 10707246087437810214ull,
+ 2317799764393260520ull, 5130344084008069261ull}},
+{{17750891860753389558ull, 13384057609297262767ull,
+ 7508935723918963554ull, 6412930105010086576ull}},
+{{17576928807514349043ull, 7506699974766802651ull,
+ 9386169654898704443ull, 8016162631262608220ull}},
+{{8679737495482774200ull, 2385844475015557705ull,
+ 15089728071166466085ull, 5010101644539130137ull}},
+{{15461357887780855654ull, 7593991612196835035ull,
+ 5027102033675918894ull, 6262627055673912672ull}},
+{{14715011341298681663ull, 269117478391267986ull,
+ 6283877542094898618ull, 7828283819592390840ull}},
+{{13808568106739063944ull, 4779884442421930395ull,
+ 3927423463809311636ull, 4892677387245244275ull}},
+{{12649024114996442025ull, 5974855553027412994ull,
+ 297593311334251641ull, 6115846734056555344ull}},
+{{6587908106890776724ull, 12080255459711654147ull,
+ 371991639167814551ull, 7644808417570694180ull}},
+{{1811599557593041500ull, 14467688689960865698ull,
+ 9455866811334659902ull, 4778005260981683862ull}},
+{{11487871483846077683ull, 8861238825596306314ull,
+ 2596461477313549070ull, 5972506576227104828ull}},
+{{5136467317952821296ull, 1853176495140607085ull,
+ 3245576846641936338ull, 7465633220283881035ull}},
+{{5516135082934207262ull, 5769921327890267332ull,
+ 18169386593647067875ull, 4666020762677425646ull}},
+{{6895168853667759078ull, 2600715641435446261ull,
+ 13488361205204059036ull, 5832525953346782058ull}},
+{{13230647085512086751ull, 3250894551794307826ull,
+ 7637079469650297987ull, 7290657441683477573ull}},
+{{7314936820035332631ull, 17898676245025048495ull,
+ 14158035355490260387ull, 9113321802104346966ull}},
+{{11489364540163164750ull, 8880829643926961357ull,
+ 4237086078754024838ull, 5695826126315216854ull}},
+{{526647619921792226ull, 1877665018053925889ull,
+ 14519729635297306856ull, 7119782657894021067ull}},
+{{5269995543329628186ull, 2347081272567407361ull,
+ 13537976025694245666ull, 8899728322367526334ull}},
+{{14822962260649487377ull, 6078611813782017504ull,
+ 3849548997631515637ull, 5562330201479703959ull}},
+{{81958752102307605ull, 12209950785654909785ull, 200250228612006642ull,
+ 6952912751849629949ull}},
+{{4714134458555272410ull, 6039066445213861423ull,
+ 4861998804192396207ull, 8691140939812037436ull}},
+{{9863863064238127112ull, 10691945555899745245ull,
+ 12262121289475023437ull, 5431963087382523397ull}},
+{{16941514848725046794ull, 17976617963302069460ull,
+ 1492593556561615584ull, 6789953859228154247ull}},
+{{2730149487196756876ull, 4024028380418035210ull,
+ 15700800000984183193ull, 8487442324035192808ull}},
+{{6318029447925360952ull, 14044232783829741766ull,
+ 9813000000615114495ull, 5304651452521995505ull}},
+{{17120908846761476998ull, 12943604961359789303ull,
+ 16877936019196281023ull, 6630814315652494381ull}},
+{{16789450040024458343ull, 11567820183272348725ull,
+ 7262361968713187567ull, 8288517894565617977ull}},
+{{12799249284228980417ull, 14147416642186299809ull,
+ 16068191276514211989ull, 5180323684103511235ull}},
+{{2164003550004061809ull, 3849212747450711050ull,
+ 15473553077215377083ull, 6475404605129389044ull}},
+{{11928376474359853069ull, 199829915886000908ull, 895197272809669738ull,
+ 8094255756411736306ull}},
+{{16678607333329683976ull, 4736579715856138471ull,
+ 5171184313933431490ull, 5058909847757335191ull}},
+{{16236573148234717066ull, 15144096681674948897ull,
+ 1852294373989401458ull, 6323637309696668989ull}},
+{{6460658380011232621ull, 9706748815238910314ull,
+ 6927053985914139727ull, 7904546637120836236ull}},
+{{8649597505934408292ull, 12984247037165400802ull,
+ 13552780778051113137ull, 4940341648200522647ull}},
+{{1588624845563234557ull, 2395250741174587291ull,
+ 12329289954136503518ull, 6175427060250653309ull}},
+{{15820839112236206908ull, 12217435463323009921ull,
+ 1576554387388465685ull, 7719283825313316637ull}},
+{{2970495417506547462ull, 9941740173790575153ull,
+ 3291189501331485005ull, 4824552390820822898ull}},
+{{8324805290310572231ull, 17038861235665606845ull,
+ 13337358913519132064ull, 6030690488526028622ull}},
+{{15017692631315603193ull, 2851832470872456940ull,
+ 7448326605044139273ull, 7538363110657535778ull}},
+{{162685857717476188ull, 13311610340363755348ull,
+ 9266890146579974949ull, 4711476944160959861ull}},
+{{203357322146845234ull, 2804454870172530473ull,
+ 16195298701652356591ull, 5889346180201199826ull}},
+{{4865882671110944447ull, 17340626642997826803ull,
+ 11020751340210669930ull, 7361682725251499783ull}},
+{{1470667320461292654ull, 12452411266892507696ull,
+ 9164253156835949509ull, 9202103406564374729ull}},
+{{919167075288307909ull, 10088600051021511262ull,
+ 17256873269090938203ull, 5751314629102734205ull}},
+{{10372330880965160694ull, 7999064045349501173ull,
+ 7736033531081509042ull, 7189143286378417757ull}},
+{{17577099619633838772ull, 775458019832100658ull,
+ 14281727932279274207ull, 8986429107973022196ull}},
+{{15597373280698537137ull, 7402190290036144767ull,
+ 18149451994529322187ull, 5616518192483138872ull}},
+{{14885030582445783517ull, 4641051844117793055ull,
+ 4240070919452101118ull, 7020647740603923591ull}},
+{{13994602209629841492ull, 15024686842002017127ull,
+ 688402630887738493ull, 8775809675754904489ull}},
+{{15664155408659732788ull, 11696272285464954656ull,
+ 11959466690373306318ull, 5484881047346815305ull}},
+{{1133450187115114369ull, 5396968319976417513ull,
+ 1114275307684469186ull, 6856101309183519132ull}},
+{{6028498752321280866ull, 15969582436825297699ull,
+ 1392844134605586482ull, 8570126636479398915ull}},
+{{1461968710987106589ull, 14592675041443198966ull,
+ 17011428648624349215ull, 5356329147799624321ull}},
+{{11050832925588659044ull, 13629157783376610803ull,
+ 7429227755498272807ull, 6695411434749530402ull}},
+{{9201855138558435901ull, 12424761210793375600ull, 63162657518065201ull,
+ 8369264293436913003ull}},
+{{5751159461599022439ull, 847946729104777894ull,
+ 16180377725444648415ull, 5230790183398070626ull}},
+{{16412321363853553856ull, 14894991466663136079ull,
+ 11002100119951034710ull, 6538487729247588283ull}},
+{{15903715686389554416ull, 9395367296474144291ull,
+ 9140939131511405484ull, 8173109661559485354ull}},
+{{7633979294779777558ull, 15095476597151115990ull,
+ 10324772975622016331ull, 5108193538474678346ull}},
+{{319102081619946140ull, 14257659728011507084ull,
+ 3682594182672744606ull, 6385241923093347933ull}},
+{{398877602024932674ull, 8598702623159608047ull, 9214928746768318662ull,
+ 7981552403866684916ull}},
+{{7166827528906664778ull, 762503121047367125ull,
+ 14982702503584974972ull, 4988470252416678072ull}},
+{{13570220429560718876ull, 953128901309208906ull, 281634055771667099ull,
+ 6235587815520847591ull}},
+{{7739403500096122787ull, 15026469181918674845ull,
+ 14187100624996747585ull, 7794484769401059488ull}},
+{{7142970196773770694ull, 2474014211058089922ull,
+ 8866937890622967241ull, 4871552980875662180ull}},
+{{18152084782821989175ull, 7704203782250000306ull,
+ 11083672363278709051ull, 6089441226094577725ull}},
+{{13466733941672710661ull, 5018568709385112479ull, 19532398816222602ull,
+ 7611801532618222157ull}},
+{{15334237741186526019ull, 7748291461793083203ull,
+ 2318050758473833078ull, 4757375957886388848ull}},
+{{14556111158055769620ull, 461992290386578196ull,
+ 2897563448092291348ull, 5946719947357986060ull}},
+{{18195138947569712025ull, 577490362983222745ull,
+ 3621954310115364185ull, 7433399934197482575ull}},
+{{4454432814589988160ull, 11890146522932983976ull,
+ 9181250471463184471ull, 4645874958873426609ull}},
+{{5568041018237485200ull, 10250997135238842066ull,
+ 16088249107756368493ull, 5807343698591783261ull}},
+{{16183423309651632307ull, 17425432437475940486ull,
+ 6275253329413296904ull, 7259179623239729077ull}},
+{{11005907100209764576ull, 3335046473135373992ull,
+ 12455752680194009035ull, 9073974529049661346ull}},
+{{6878691937631102860ull, 18225305110205466409ull,
+ 12396531443548643550ull, 5671234080656038341ull}},
+{{13210050940466266479ull, 13558259350902057203ull,
+ 1660606249153640726ull, 7089042600820047927ull}},
+{{11900877657155445195ull, 7724452151772795696ull,
+ 15910815866724214620ull, 8861303251025059908ull}},
+{{7438048535722153247ull, 14051154631712773118ull,
+ 720887879847858329ull, 5538314531890662443ull}},
+{{74188632797915751ull, 3728885234358802686ull, 14736167905091986624ull,
+ 6922893164863328053ull}},
+{{9316107827852170496ull, 4661106542948503357ull,
+ 4585151826082819568ull, 8653616456079160067ull}},
+{{8128410401621300512ull, 2913191589342814598ull, 559876882088068278ull,
+ 5408510285049475042ull}},
+{{937140965171849832ull, 12864861523533294056ull,
+ 9923218139464861155ull, 6760637856311843802ull}},
+{{1171426206464812290ull, 11469390885989229666ull,
+ 3180650637476300636ull, 8450797320389804753ull}},
+{{5343827397467895585ull, 16391741340598044349ull,
+ 13517121694491157657ull, 5281748325243627970ull}},
+{{11291470265262257386ull, 6654618620465391724ull,
+ 7673030081259171264ull, 6602185406554534963ull}},
+{{14114337831577821732ull, 8318273275581739655ull,
+ 4979601583146576176ull, 8252731758193168704ull}},
+{{15738990172377220439ull, 5198920797238587284ull,
+ 3112250989466610110ull, 5157957348870730440ull}},
+{{1226993641761973932ull, 15722023033403009914ull,
+ 3890313736833262637ull, 6447446686088413050ull}},
+{{10757114089057243223ull, 5817470736471598680ull,
+ 14086264207896354105ull, 8059308357610516312ull}},
+{{6723196305660777015ull, 15165134256363218935ull,
+ 8803915129935221315ull, 5037067723506572695ull}},
+{{3792309363648583364ull, 14344731802026635765ull,
+ 6393207893991638740ull, 6296334654383215869ull}},
+{{9352072722988117109ull, 17930914752533294706ull,
+ 12603195885916936329ull, 7870418317979019836ull}},
+{{10456731470294961097ull, 4289292692692227335ull,
+ 17100369465552861014ull, 4919011448736887397ull}},
+{{8459228319441313468ull, 14584987902720059977ull,
+ 7540403776658912555ull, 6148764310921109247ull}},
+{{15185721417729029738ull, 13619548859972687067ull,
+ 4813818702396252790ull, 7685955388651386559ull}},
+{{7185232876866949635ull, 3900532019055541513ull,
+ 9926165716638739850ull, 4803722117907116599ull}},
+{{13593227114511074947ull, 14099037060674202699ull,
+ 7796021127371036908ull, 6004652647383895749ull}},
+{{12379847874711455780ull, 17623796325842753374ull,
+ 14356712427641184039ull, 7505815809229869686ull}},
+{{3125718903267271959ull, 17932401731292802715ull,
+ 4361259248848352120ull, 4691134880768668554ull}},
+{{17742206684366253660ull, 3968758090406451777ull,
+ 14674946097915215959ull, 5863918600960835692ull}},
+{{8342700300175653363ull, 349261594580676818ull,
+ 18343682622394019949ull, 7329898251201044615ull}},
+{{1205003338364790896ull, 5048263011653233927ull,
+ 18317917259565137032ull, 9162372814001305769ull}},
+{{7670656114119076166ull, 3155164382283271204ull,
+ 4531169259587128789ull, 5726483008750816106ull}},
+{{9588320142648845207ull, 8555641496281476909ull,
+ 14887333611338686794ull, 7158103760938520132ull}},
+{{16597086196738444413ull, 1471179833497070328ull,
+ 162422940463806877ull, 8947629701173150166ull}},
+{{10373178872961527758ull, 3225330405149362907ull,
+ 13936572393072043010ull, 5592268563233218853ull}},
+{{8354787572774521794ull, 13255035043291479442ull,
+ 3585657436057890050ull, 6990335704041523567ull}},
+{{1220112429113376434ull, 7345421767259573495ull,
+ 18317129850354526275ull, 8737919630051904458ull}},
+{{7680099295836942128ull, 2285045595323539482ull,
+ 16059892174898966826ull, 5461199768782440286ull}},
+{{376752082941401851ull, 12079679031009200161ull,
+ 10851493181768932724ull, 6826499710978050358ull}},
+{{5082626122104140218ull, 15099598788761500201ull,
+ 4340994440356390097ull, 8533124638722562948ull}},
+{{14705856372383557396ull, 2519720215334855769ull,
+ 11936493562077519619ull, 5333202899201601842ull}},
+{{4547262410197283033ull, 16984708324450733424ull,
+ 5697244915742123715ull, 6666503624002002303ull}},
+{{5684078012746603792ull, 16619199387136028876ull,
+ 2509870126250266740ull, 8333129530002502879ull}},
+{{12775920794821403178ull, 1163627580105242239ull,
+ 8486197856547498569ull, 5208205956251564299ull}},
+{{11358214975099366068ull, 6066220493558940703ull,
+ 5996061302256985307ull, 6510257445314455374ull}},
+{{9586082700446819681ull, 2971089598521287975ull,
+ 16718448664676007442ull, 8137821806643069217ull}},
+{{12908830715420344157ull, 6468617017503192888ull,
+ 3531501387781422795ull, 5086138629151918261ull}},
+{{16136038394275430196ull, 3474085253451603206ull,
+ 9026062753154166398ull, 6357673286439897826ull}},
+{{10946675955989511937ull, 13565978603669279816ull,
+ 2059206404587932189ull, 7947091608049872283ull}},
+{{6841672472493444961ull, 10784579636506993837ull,
+ 17427905067363315282ull, 4966932255031170176ull}},
+{{13163776609044194105ull, 4257352508778966488ull,
+ 3338137260494592487ull, 6208665318788962721ull}},
+{{16454720761305242631ull, 710004617546320206ull,
+ 8784357594045628513ull, 7760831648486203401ull}},
+{{5672514457388388741ull, 11972967932034919889ull,
+ 17019438542346987580ull, 4850519780303877125ull}},
+{{11702329090162873830ull, 14966209915043649861ull,
+ 7439240122651570763ull, 6063149725379846407ull}},
+{{792853307421428575ull, 14096076375377174423ull,
+ 4687364134887075550ull, 7578937156724808009ull}},
+{{7413062344779474715ull, 4198361716183346110ull,
+ 14458817630372891979ull, 4736835722953005005ull}},
+{{42955894119567586ull, 636266126801794734ull, 4238463982683951262ull,
+ 5921044653691256257ull}},
+{{9277066904504235291ull, 10018704695357019225ull,
+ 9909765996782326981ull, 7401305817114070321ull}},
+{{17327381861383616817ull, 8567533443811830967ull,
+ 17722818794057424123ull, 4625816135696293950ull}},
+{{17047541308302133117ull, 6097730786337400805ull,
+ 12930151455717004346ull, 5782270169620367438ull}},
+{{7474368580095502684ull, 16845535519776526815ull,
+ 6939317282791479624ull, 7227837712025459298ull}},
+{{4731274706691990451ull, 2610175326011106903ull,
+ 17897518640344125339ull, 9034797140031824122ull}},
+{{9874575719323575888ull, 17772260643252799478ull,
+ 15797635168642466240ull, 5646748212519890076ull}},
+{{3119847612299694052ull, 3768581730356447732ull,
+ 1300299887093531185ull, 7058435265649862596ull}},
+{{3899809515374617565ull, 9322413181372947569ull,
+ 1625374858866913981ull, 8823044082062328245ull}},
+{{13966595993177605738ull, 8132351247571786182ull,
+ 3321702296005515190ull, 5514402551288955153ull}},
+{{8234872954617231365ull, 942067022609956920ull, 8763813888434281892ull,
+ 6893003189111193941ull}},
+{{10293591193271539206ull, 1177583778262446150ull,
+ 15566453378970240269ull, 8616253986388992426ull}},
+{{1821808477367324100ull, 3041832870627722796ull,
+ 14340719380283788072ull, 5385158741493120266ull}},
+{{2277260596709155124ull, 3802291088284653495ull,
+ 8702527188499959282ull, 6731448426866400333ull}},
+{{16681633801168607617ull, 13976235897210592676ull,
+ 15489845004052337006ull, 8414310533583000416ull}},
+{{1202649088875603953ull, 4123461417329232519ull,
+ 9681153127532710629ull, 5258944083489375260ull}},
+{{15338369416376668653ull, 9766012790088928552ull,
+ 12101441409415888286ull, 6573680104361719075ull}},
+{{726217696761284200ull, 2984143950756384883ull,
+ 10515115743342472454ull, 8217100130452148844ull}},
+{{16594787124971660289ull, 15700148024504904263ull,
+ 15795319376443821091ull, 5135687581532593027ull}},
+{{16131797887787187458ull, 15013499012203742425ull,
+ 15132463202127388460ull, 6419609476915741284ull}},
+{{6329689304451820610ull, 320129691545126416ull, 468834928949683960ull,
+ 8024511846144676606ull}},
+{{3956055815282387881ull, 200081057215704010ull,
+ 14128079885875716187ull, 5015319903840422878ull}},
+{{14168441805957760660ull, 14085159376801793724ull,
+ 8436727820489869425ull, 6269149879800528598ull}},
+{{17710552257447200824ull, 3771391165720078443ull,
+ 1322537738757560974ull, 7836437349750660748ull}},
+{{8763252151690806563ull, 16192177533857212739ull,
+ 10049958123578251416ull, 4897773343594162967ull}},
+{{6342379171186120300ull, 1793477843611964308ull,
+ 7950761636045426367ull, 6122216679492703709ull}},
+{{7927973963982650375ull, 16076905359797119097ull,
+ 14550138063484170862ull, 7652770849365879636ull}},
+{{16484198773557626245ull, 5436379831445811531ull,
+ 18317208326532382597ull, 4782981780853674772ull}},
+{{15993562448519644902ull, 11407160807734652318ull,
+ 4449766334455926630ull, 5978727226067093466ull}},
+{{10768581023794780319ull, 5035578972813539590ull,
+ 14785579954924684096ull, 7473409032583866832ull}},
+{{2118677121444349796ull, 3147236858008462244ull,
+ 9240987471827927560ull, 4670880645364916770ull}},
+{{2648346401805437244ull, 3934046072510577805ull,
+ 2327862302930133642ull, 5838600806706145963ull}},
+{{7922119020684184459ull, 14140929627492998064ull,
+ 16744885933944830764ull, 7298251008382682453ull}},
+{{9902648775855230574ull, 17676162034366247580ull,
+ 7096049362148874743ull, 9122813760478353067ull}},
+{{15412527521764294917ull, 17965130299119986593ull,
+ 2129187842129352762ull, 5701758600298970667ull}},
+{{5430601346923204934ull, 13233040837045207434ull,
+ 16496542857943854665ull, 7127198250373713333ull}},
+{{16011623720508781975ull, 2706242991024345580ull,
+ 6785620517147654620ull, 8908997812967141667ull}},
+{{783892788463212927ull, 10914773906244991796ull,
+ 1935169814003590185ull, 5568123633104463542ull}},
+{{979865985579016158ull, 18255153401233627649ull,
+ 11642334304359263539ull, 6960154541380579427ull}},
+{{5836518500401158102ull, 18207255733114646657ull,
+ 9941231862021691520ull, 8700193176725724284ull}},
+{{15177039108819193574ull, 11379534833196654160ull,
+ 15436641950618333008ull, 5437620735453577677ull}},
+{{524554812314440351ull, 14224418541495817701ull,
+ 5460744382990752548ull, 6797025919316972097ull}},
+{{5267379533820438343ull, 17780523176869772126ull,
+ 11437616497165828589ull, 8496282399146215121ull}},
+{{17127170263919937677ull, 13418669994757301530ull,
+ 230981283087561012ull, 5310176499466384451ull}},
+{{12185590793045146288ull, 16773337493446626913ull,
+ 14123784659141614977ull, 6637720624332980563ull}},
+{{1396930436024269147ull, 7131613811526119930ull,
+ 13043044805499630818ull, 8297150780416225704ull}},
+{{5484767540942556121ull, 9068944650631212860ull,
+ 8151903003437269261ull, 5185719237760141065ull}},
+{{6855959426178195151ull, 15947866831716403979ull,
+ 14801564772723974480ull, 6482149047200176331ull}},
+{{3958263264295356035ull, 1488089465935953358ull,
+ 13890269947477580197ull, 8102686309000220414ull}},
+{{16308972595466761234ull, 3235898925423664800ull,
+ 4069732698746099719ull, 5064178943125137759ull}},
+{{1939471670623899927ull, 17879931712061744713ull,
+ 475479855005236744ull, 6330223678906422199ull}},
+{{7036025606707262812ull, 3903170566367629275ull,
+ 14429407874038709643ull, 7912779598633027748ull}},
+{{2091672994978345306ull, 133638594766074345ull,
+ 18241751958128969335ull, 4945487249145642342ull}},
+{{7226277262150319536ull, 14002106298739756643ull,
+ 13578817910806435860ull, 6181859061432052928ull}},
+{{4421160559260511516ull, 17502632873424695804ull,
+ 16973522388508044825ull, 7727323826790066160ull}},
+{{11986597386392595506ull, 4021616518249353021ull,
+ 10608451492817528016ull, 4829577391743791350ull}},
+{{1148188677708580670ull, 5027020647811691277ull,
+ 4037192329167134212ull, 6036971739679739188ull}},
+{{6046921865563113741ull, 6283775809764614096ull,
+ 5046490411458917765ull, 7546214674599673985ull}},
+{{3779326165976946088ull, 6233202890316577762ull,
+ 14683271553230293363ull, 4716384171624796240ull}},
+{{13947529744325958418ull, 3179817594468334298ull,
+ 18354089441537866704ull, 5895480214530995300ull}},
+{{8211040143552672215ull, 3974771993085417873ull,
+ 4495867728212781764ull, 7369350268163744126ull}},
+{{14875486197868228173ull, 4968464991356772341ull,
+ 14843206697120753013ull, 9211687835204680157ull}},
+{{11603021882881336560ull, 5411133628811676665ull,
+ 11582847194914164585ull, 5757304897002925098ull}},
+{{668719298319506988ull, 11375603054441983736ull,
+ 5255186956787929923ull, 7196631121253656373ull}},
+{{835899122899383735ull, 9607817799625091766ull,
+ 11180669714412300308ull, 8995788901567070466ull}},
+{{14357495007094278546ull, 15228258161620458161ull,
+ 11599604589935075596ull, 5622368063479419041ull}},
+{{4111810703585684471ull, 588578628316021086ull, 664447682136680784ull,
+ 7027960079349273802ull}},
+{{14363135416336881397ull, 735723285395026357ull,
+ 10053931639525626788ull, 8784950099186592252ull}},
+{{11282802644424244825ull, 9683199090226667281ull,
+ 15507079311558292550ull, 5490593811991620157ull}},
+{{268445250248142319ull, 2880626825928558294ull, 5548791084165701976ull,
+ 6863242264989525197ull}},
+{{9558928599664953707ull, 3600783532410697867ull,
+ 11547674873634515374ull, 8579052831236906496ull}},
+{{3668487365576902115ull, 16085547763038849879ull,
+ 7217296796021572108ull, 5361908019523066560ull}},
+{{18420667262253291356ull, 1660190630089010732ull,
+ 9021620995026965136ull, 6702385024403833200ull}},
+{{4579090004107062578ull, 2075238287611263416ull,
+ 11277026243783706420ull, 8377981280504791500ull}},
+{{2861931252566914112ull, 10520395966611815443ull,
+ 16271513439219592320ull, 5236238300315494687ull}},
+{{17412472120990806351ull, 13150494958264769303ull,
+ 15727705780597102496ull, 6545297875394368359ull}},
+{{17153904132811120035ull, 16438118697830961629ull,
+ 15047946207318990216ull, 8181622344242960449ull}},
+{{13027033092220643974ull, 10273824186144351018ull,
+ 2487437351933287029ull, 5113513965151850281ull}},
+{{7060419328421029160ull, 17453966251107826677ull,
+ 7720982708343996690ull, 6391892456439812851ull}},
+{{13437210178953674353ull, 12594085777030007538ull,
+ 5039542367002607959ull, 7989865570549766064ull}},
+{{13009942380273434375ull, 14788832638284836567ull,
+ 3149713979376629974ull, 4993665981593603790ull}},
+{{11650741956914405065ull, 9262668761001269901ull,
+ 13160514511075563276ull, 6242082476992004737ull}},
+{{728369390860842619ull, 11578335951251587377ull,
+ 2615585083562290383ull, 7802603096240005922ull}},
+{{11984445915356496397ull, 14153988997173323966ull,
+ 6246426695653819393ull, 4876626935150003701ull}},
+{{5757185357340844688ull, 3857428191184491246ull,
+ 12419719387994662146ull, 6095783668937504626ull}},
+{{16419853733530831668ull, 14045157275835389865ull,
+ 6301277198138551874ull, 7619729586171880783ull}},
+{{3344879555815687937ull, 13389909315824506570ull,
+ 10855827276477676777ull, 4762330991357425489ull}},
+{{13404471481624385729ull, 2902328589498469500ull,
+ 18181470114024483876ull, 5952913739196781861ull}},
+{{16755589352030482161ull, 3627910736873086875ull,
+ 8891779587248441133ull, 7441142173995977327ull}},
+{{8166400335805357399ull, 4573287219759373249ull,
+ 12474891269671357564ull, 4650713858747485829ull}},
+{{14819686438184084652ull, 5716609024699216561ull,
+ 1758556031807033243ull, 5813392323434357287ull}},
+{{4689549992447942103ull, 2534075262446632798ull,
+ 16033253095040955266ull, 7266740404292946608ull}},
+{{15085309527414703437ull, 12390966114913066805ull,
+ 1594822295091642466ull, 9083425505366183261ull}},
+{{11734161463847883600ull, 12356039840248054657ull,
+ 3302606943645970493ull, 5677140940853864538ull}},
+{{832643774527690788ull, 1609991745027904610ull,
+ 13351630716412238925ull, 7096426176067330672ull}},
+{{10264176755014389293ull, 6624175699712268666ull,
+ 16689538395515298656ull, 8870532720084163340ull}},
+{{11026796490311381212ull, 4140109812320167916ull,
+ 1207589460342285852ull, 5544082950052602088ull}},
+{{13783495612889226515ull, 5175137265400209895ull,
+ 1509486825427857315ull, 6930103687565752610ull}},
+{{12617683497684145240ull, 1857235563322874465ull,
+ 11110230568639597452ull, 8662629609457190762ull}},
+{{968523158411508919ull, 10384144263931572349ull,
+ 11555580123827136311ull, 5414143505910744226ull}},
+{{5822339966441774053ull, 8368494311487077532ull,
+ 5221103117929144581ull, 6767679382388430283ull}},
+{{7277924958052217566ull, 15072303907786234819ull,
+ 1914692878984042822ull, 8459599227985537854ull}},
+{{2242860089568942027ull, 4808503923939008858ull,
+ 15031741104647190476ull, 5287249517490961158ull}},
+{{12026947148815953341ull, 6010629904923761072ull,
+ 9566304343954212287ull, 6609061896863701448ull}},
+{{15033683936019941677ull, 2901601362727313436ull,
+ 11957880429942765359ull, 8261327371079626810ull}},
+{{172680423157687740ull, 8731029879345652754ull,
+ 12085361287141616253ull, 5163329606924766756ull}},
+{{9439222565801885483ull, 15525473367609453846ull,
+ 15106701608927020316ull, 6454162008655958445ull}},
+{{2575656170397581046ull, 960097635802265692ull, 5048318955876611684ull,
+ 8067702510819948057ull}},
+{{10833157143353263962ull, 9823433059231191865ull,
+ 14684414393491352062ull, 5042314069262467535ull}},
+{{18153132447618967856ull, 3055919287184214023ull,
+ 13743831973436802174ull, 6302892586578084419ull}},
+{{18079729541096321916ull, 13043271145835043337ull,
+ 12568103948368614813ull, 7878615733222605524ull}},
+{{4382301935544119342ull, 10457887475360596038ull,
+ 17078437004585160066ull, 4924134833264128452ull}},
+{{14701249456284924985ull, 3848987307345969239ull,
+ 2901302182021898467ull, 6155168541580160566ull}},
+{{13764875801928768327ull, 199548115755073645ull,
+ 12849999764382148892ull, 7693960676975200707ull}},
+{{10908890385419174157ull, 9348089609201696836ull,
+ 5725406843525149105ull, 4808725423109500442ull}},
+{{13636112981773967696ull, 16296798029929508949ull,
+ 16380130591261212189ull, 6010906778886875552ull}},
+{{3210083171935295907ull, 6535939482129722475ull,
+ 2028419165366963621ull, 7513633473608594441ull}},
+{{18147203046955417606ull, 6390805185544770498ull,
+ 12796977024422822023ull, 4696020921005371525ull}},
+{{13460631771839496200ull, 3376820463503575219ull,
+ 2161163225246363817ull, 5870026151256714407ull}},
+{{12214103696371982345ull, 8832711597806856928ull,
+ 16536512086840118483ull, 7337532689070893008ull}},
+{{15267629620464977932ull, 6429203478831183256ull,
+ 2223896034840596488ull, 9171915861338616261ull}},
+{{9542268512790611207ull, 4018252174269489535ull,
+ 3695778030989066757ull, 5732447413336635163ull}},
+{{7316149622560876105ull, 9634501236264249823ull, 8036520308945542ull,
+ 7165559266670793954ull}},
+{{4533501009773707227ull, 2819754508475536471ull,
+ 9233417687240957736ull, 8956949083338492442ull}},
+{{9750967158749648873ull, 1762346567797210294ull,
+ 10382572072952986489ull, 5598093177086557776ull}},
+{{2965336911582285284ull, 6814619228173900772ull,
+ 12978215091191233111ull, 6997616471358197220ull}},
+{{3706671139477856604ull, 3906588016789988061ull,
+ 16222768863989041389ull, 8747020589197746525ull}},
+{{4622512471387354330ull, 4747460519707436490ull,
+ 12445073549206844820ull, 5466887868248591578ull}},
+{{15001512626088968720ull, 5934325649634295612ull,
+ 6332969899653780217ull, 6833609835310739473ull}},
+{{305146708901659284ull, 12029593080470257420ull,
+ 12527898392994613175ull, 8542012294138424341ull}},
+{{9414088729918312861ull, 14436024702934992743ull,
+ 10135779504835327186ull, 5338757683836515213ull}},
+{{7155924893970503172ull, 8821658841813965121ull,
+ 17281410399471546887ull, 6673447104795644016ull}},
+{{13556592135890516869ull, 6415387533840068497ull,
+ 3155018925629881993ull, 8341808880994555021ull}},
+{{1555341057290491187ull, 15538832254718512571ull,
+ 4277729837732370197ull, 5213630550621596888ull}},
+{{15779234376895277696ull, 5588482263115977001ull,
+ 5347162297165462747ull, 6517038188276996110ull}},
+{{5888984915836933408ull, 2373916810467583348ull,
+ 15907324908311604242ull, 8146297735346245137ull}},
+{{12903987609252859188ull, 6095384024969627496ull,
+ 3024549040053670795ull, 5091436084591403211ull}},
+{{16129984511566073985ull, 3007544012784646466ull,
+ 17615744355349252206ull, 6364295105739254013ull}},
+{{10939108602602816673ull, 12982802052835583891ull,
+ 8184622388904401545ull, 7955368882174067517ull}},
+{{4531099867413066469ull, 1196722255381158076ull,
+ 7421232002278944918ull, 4972105551358792198ull}},
+{{5663874834266333086ull, 10719274856081223403ull, 53167965993905339ull,
+ 6215131939198490248ull}},
+{{2468157524405528453ull, 8787407551674141350ull, 66459957492381674ull,
+ 7768914923998112810ull}},
+{{15377656508035618995ull, 10103815738223726247ull,
+ 4653223491860126450ull, 4855571827498820506ull}},
+{{14610384616617135840ull, 3406397635924882001ull,
+ 15039901401679933871ull, 6069464784373525632ull}},
+{{4427922715489256088ull, 18093055100188266214ull,
+ 353132678390365722ull, 7586830980466907041ull}},
+{{16602509752462948767ull, 15919845456045054287ull,
+ 11749922970062448336ull, 4741769362791816900ull}},
+{{16141451172151298055ull, 1453062746346766243ull,
+ 14687403712578060421ull, 5927211703489771125ull}},
+{{15565127946761734664ull, 6428014451360845708ull,
+ 4524196585440411814ull, 7409014629362213907ull}},
+{{504832929871308357ull, 17852567087382692280ull, 521779856686563431ull,
+ 4630634143351383692ull}},
+{{631041162339135447ull, 17704022840800977446ull, 652224820858204289ull,
+ 5788292679189229615ull}},
+{{10012173489778695116ull, 8294970495719058095ull,
+ 14650339081354919074ull, 7235365848986537018ull}},
+{{7903530843795980991ull, 1145341082794046811ull,
+ 9089551814838873035ull, 9044207311233171273ull}},
+{{2633863768158794168ull, 16856739241242136921ull,
+ 17210184930342765406ull, 5652629569520732045ull}},
+{{7904015728625880613ull, 11847552014697895343ull,
+ 7677673107646293046ull, 7065786961900915057ull}},
+{{5268333642354962863ull, 5586067981517593371ull,
+ 14208777402985254212ull, 8832233702376143821ull}},
+{{986865517258157837ull, 12714664525303271665ull,
+ 11186328886079477834ull, 5520146063985089888ull}},
+{{5845267915000085201ull, 6669958619774313773ull,
+ 13982911107599347293ull, 6900182579981362360ull}},
+{{11918270912177494405ull, 12949134293145280120ull,
+ 17478638884499184116ull, 8625228224976702950ull}},
+{{7448919320110934003ull, 17316580970070575883ull,
+ 6312463284384602168ull, 5390767640610439344ull}},
+{{4699463131711279600ull, 3198982138878668238ull,
+ 7890579105480752711ull, 6738459550763049180ull}},
+{{15097700951493875308ull, 17833785728880499009ull,
+ 9863223881850940888ull, 8423074438453811475ull}},
+{{2518534067042590211ull, 11146116080550311881ull,
+ 3858671916943144103ull, 5264421524033632172ull}},
+{{7759853602230625668ull, 9320959082260501947ull,
+ 4823339896178930129ull, 6580526905042040215ull}},
+{{5088130984360894181ull, 16262884871253015338ull,
+ 1417488851796274757ull, 8225658631302550269ull}},
+{{7791767883652946767ull, 12470146053746828538ull,
+ 3191773541586365675ull, 5141036644564093918ull}},
+{{516337817711407651ull, 10975996548756147769ull,
+ 13213088963837732902ull, 6426295805705117397ull}},
+{{5257108290566647468ull, 4496623649090408903ull,
+ 2681303149515002416ull, 8032869757131396747ull}},
+{{10203221709245236523ull, 2810389780681505564ull,
+ 17816715532942734174ull, 5020543598207122966ull}},
+{{12754027136556545654ull, 12736359262706657763ull,
+ 13047522379323641909ull, 6275679497758903708ull}},
+{{11330847902268294164ull, 2085391023101158492ull,
+ 16309402974154552387ull, 7844599372198629635ull}},
+{{16305151975772459660ull, 17444270453934081721ull,
+ 7887533849632901289ull, 4902874607624143522ull}},
+{{6546381914433410863ull, 7970280012135438440ull, 636045275186350804ull,
+ 6128593259530179403ull}},
+{{8182977393041763579ull, 9962850015169298050ull,
+ 14630114649265102217ull, 7660741574412724253ull}},
+{{9726046889078490141ull, 17755996305549281041ull,
+ 11449664665004382837ull, 4787963484007952658ull}},
+{{16769244629775500580ull, 8359937326654437589ull,
+ 5088708794400702739ull, 5984954355009940823ull}},
+{{7126497731937212013ull, 5838235639890659083ull,
+ 1749199974573490520ull, 7481192943762426029ull}},
+{{2148218073247063557ull, 3648897274931661927ull,
+ 3399092993322125527ull, 4675745589851516268ull}},
+{{16520330646840993158ull, 18396179648946741120ull,
+ 4248866241652656908ull, 5844681987314395335ull}},
+{{2203669234841689831ull, 4548480487473874785ull, 699396783638433232ull,
+ 7305852484142994169ull}},
+{{7366272561979500192ull, 5685600609342343481ull,
+ 5485931997975429444ull, 9132315605178742711ull}},
+{{16133135397305657380ull, 12776872417693740483ull,
+ 10346236526375725258ull, 5707697253236714194ull}},
+{{15554733228204683821ull, 6747718485262399796ull,
+ 3709423621114880765ull, 7134621566545892743ull}},
+{{996672461546303161ull, 13046334125005387650ull, 25093507966213052ull,
+ 8918276958182365929ull}},
+{{5234606306893827380ull, 17377330864983143089ull,
+ 11544898488547352917ull, 5573923098863978705ull}},
+{{11154943902044672128ull, 7886605525946765149ull,
+ 596065055402027435ull, 6967403873579973382ull}},
+{{108621822273676448ull, 5246570889006068533ull, 9968453356107310102ull,
+ 8709254841974966727ull}},
+{{2373731648134741732ull, 17114164860910956545ull,
+ 13147812375208150669ull, 5443284276234354204ull}},
+{{7578850578595815069ull, 7557648020856531969ull,
+ 16434765469010188337ull, 6804105345292942755ull}},
+{{14085249241672156741ull, 14058746044498052865ull,
+ 15931770817835347517ull, 8505131681616178444ull}},
+{{1885751748404016107ull, 11092559287024976993ull,
+ 733984724292316390ull, 5315707301010111528ull}},
+{{6968875703932408038ull, 4642327071926445433ull, 917480905365395488ull,
+ 6644634126262639410ull}},
+{{13322780648342897951ull, 5802908839908056791ull,
+ 10370223168561520168ull, 8305792657828299262ull}},
+{{15244266932855393076ull, 3626818024942535494ull,
+ 1869703461923562201ull, 5191120411142687039ull}},
+{{9831961629214465536ull, 9145208549605557272ull,
+ 16172187382686616463ull, 6488900513928358798ull}},
+{{12289952036518081920ull, 6819824668579558686ull,
+ 10991862191503494771ull, 8111125642410448498ull}},
+{{3069534004396413296ull, 1956547408648530227ull,
+ 11481599888117072136ull, 5069453526506530311ull}},
+{{17671975560777680332ull, 2445684260810662783ull,
+ 9740313841718952266ull, 6336816908133162889ull}},
+{{17478283432544712511ull, 12280477362868104287ull,
+ 16787078320576078236ull, 7921021135166453611ull}},
+{{17841456172981527176ull, 16898670388647340987ull,
+ 8186080941146354945ull, 4950638209479033507ull}},
+{{17690134197799521066ull, 7288279930527012522ull,
+ 5620915158005555778ull, 6188297761848791884ull}},
+{{12889295710394625524ull, 18333721950013541461ull,
+ 7026143947506944722ull, 7735372202310989855ull}},
+{{10361652828210334905ull, 16070262237185851317ull,
+ 11308868994832922307ull, 4834607626444368659ull}},
+{{17563752053690306535ull, 15476141778054926242ull,
+ 9524400225113764980ull, 6043259533055460824ull}},
+{{12731318030258107360ull, 898433148859106187ull,
+ 11905500281392206226ull, 7554074416319326030ull}},
+{{5651230759697623148ull, 5173206736464329271ull,
+ 2829251657442740987ull, 4721296510199578769ull}},
+{{2452352431194641031ull, 1854822402153023685ull,
+ 8148250590230814138ull, 5901620637749473461ull}},
+{{7677126557420689193ull, 11541900039546055414ull,
+ 14796999256215905576ull, 7377025797186841826ull}},
+{{373036159921085683ull, 14427375049432569268ull,
+ 9272877033415106162ull, 9221282246483552283ull}},
+{{9456519636805454360ull, 13628795424322743696ull,
+ 3489705136670747399ull, 5763301404052220177ull}},
+{{11820649546006817950ull, 12424308261976041716ull,
+ 8973817439265822153ull, 7204126755065275221ull}},
+{{14775811932508522437ull, 1695327272187888433ull,
+ 15828957817509665596ull, 9005158443831594026ull}},
+{{2317353430176744667ull, 10282951581972206079ull,
+ 14504784654370928901ull, 5628224027394746266ull}},
+{{16731749843003094546ull, 17465375495892645502ull,
+ 8907608781108885318ull, 7035280034243432833ull}},
+{{11691315266899092375ull, 12608347333011031070ull,
+ 15746196994813494552ull, 8794100042804291041ull}},
+{{2695386023384544830ull, 7880217083131894419ull,
+ 2923844094117352239ull, 5496312526752681901ull}},
+{{17204290584512844750ull, 5238585335487480119ull,
+ 8266491136074078203ull, 6870390658440852376ull}},
+{{16893677212213668033ull, 1936545650931962245ull,
+ 10333113920092597754ull, 8587988323051065470ull}},
+{{12864391266847236473ull, 5822027050259864307ull,
+ 1846510181630485692ull, 5367492701906915919ull}},
+{{11468803065131657687ull, 7277533812824830384ull,
+ 16143195782320270827ull, 6709365877383644898ull}},
+{{14336003831414572109ull, 4485231247603650076ull,
+ 10955622691045562726ull, 8386707346729556123ull}},
+{{18183374431488883376ull, 16638327585034445009ull,
+ 4541421172689782751ull, 5241692091705972577ull}},
+{{8894159984078940508ull, 16186223462865668358ull,
+ 10288462484289616343ull, 6552115114632465721ull}},
+{{1894327943243899827ull, 15621093310154697544ull,
+ 17472264123789408333ull, 8190143893290582151ull}},
+{{1183954964527437392ull, 12069026328060379917ull,
+ 17837694105009462064ull, 5118839933306613844ull}},
+{{6091629724086684644ull, 15086282910075474896ull,
+ 3850373557552275964ull, 6398549916633267306ull}},
+{{7614537155108355805ull, 411109563884792004ull,
+ 14036338983795120764ull, 7998187395791584132ull}},
+{{13982457758797498186ull, 9480315514282770810ull,
+ 17996083901726726285ull, 4998867122369740082ull}},
+{{8254700161642096924ull, 16462080411280851417ull,
+ 13271732840303632048ull, 6248583902962175103ull}},
+{{14930061220480009059ull, 2130856440391512655ull,
+ 11977980031952152157ull, 7810729878702718879ull}},
+{{16248817290441087518ull, 3637628284458389361ull,
+ 14403766547611176954ull, 4881706174189199299ull}},
+{{6475963557769195686ull, 13770407392427762510ull,
+ 13393022166086583288ull, 6102132717736499124ull}},
+{{17318326484066270415ull, 17213009240534703137ull,
+ 16741277707608229110ull, 7627665897170623905ull}},
+{{3906425024900337154ull, 6146444756906801557ull,
+ 3545769539614061338ull, 4767291185731639941ull}},
+{{9494717299552809346ull, 16906427982988277754ull,
+ 9043897942944964576ull, 5959113982164549926ull}},
+{{2645024587586235874ull, 2686290905025795577ull,
+ 2081500391826429913ull, 7448892477705687408ull}},
+{{13182355413309867182ull, 13208146861709591995ull,
+ 1300937744891518695ull, 4655557798566054630ull}},
+{{11866258248209946073ull, 11898497558709602090ull,
+ 10849544217969174177ull, 5819447248207568287ull}},
+{{5609450773407656783ull, 1038063893104838901ull,
+ 8950244254034079818ull, 7274309060259460359ull}},
+{{11623499485186958883ull, 10520951903235824434ull,
+ 6576119299115211868ull, 9092886325324325449ull}},
+{{11876373196669237206ull, 15798966976377166079ull,
+ 15639289608015477177ull, 5683053953327703405ull}},
+{{10233780477409158603ull, 5913650665189293887ull,
+ 5714053954737182760ull, 7103817441659629257ull}},
+{{8180539578334060350ull, 7392063331486617359ull,
+ 11754253461848866354ull, 8879771802074536571ull}},
+{{12030366264099869575ull, 9231725600606523753ull,
+ 5040565404441847519ull, 5549857376296585357ull}},
+{{1202899774842673256ull, 6927970982330766788ull,
+ 10912392773979697303ull, 6937321720370731696ull}},
+{{1503624718553341570ull, 4048277709486070581ull,
+ 13640490967474621629ull, 8671652150463414620ull}},
+{{3245608458309532434ull, 4836016577642488065ull,
+ 17748678891526414326ull, 5419782594039634137ull}},
+{{8668696591314303446ull, 15268392758907885889ull,
+ 8350790559125854195ull, 6774728242549542672ull}},
+{{15447556757570267211ull, 14473804930207469457ull,
+ 10438488198907317744ull, 8468410303186928340ull}},
+{{2737193945840335151ull, 9046128081379668411ull,
+ 15747427161171849398ull, 5292756439491830212ull}},
+{{17256550487582582651ull, 2084288064869809705ull,
+ 1237539877755260132ull, 6615945549364787766ull}},
+{{7735630054196064602ull, 2605360081087262132ull,
+ 10770296884048850973ull, 8269931936705984707ull}},
+{{14058140820727316184ull, 3934193059893232784ull,
+ 4425592543316837906ull, 5168707460441240442ull}},
+{{17572676025909145230ull, 14141113361721316788ull,
+ 14755362716000823190ull, 6460884325551550552ull}},
+{{3519100958676879922ull, 8453019665296870178ull,
+ 18444203395001028988ull, 8076105406939438190ull}},
+{{6811124117600437855ull, 14506509327665319669ull,
+ 6915941103448255213ull, 5047565879337148869ull}},
+{{13125591165427935223ull, 4298078604299485874ull,
+ 13256612397737706921ull, 6309457349171436086ull}},
+{{7183616919930143220ull, 9984284273801745247ull,
+ 7347393460317357843ull, 7886821686464295108ull}},
+{{11407289602597421369ull, 3934334661912396827ull,
+ 13815492949553124460ull, 4929263554040184442ull}},
+{{9647425984819388807ull, 4917918327390496034ull,
+ 8045994150086629767ull, 6161579442550230553ull}},
+{{2835910444169460201ull, 1535711890810732139ull,
+ 14669178706035675113ull, 7701974303187788191ull}},
+{{17913345092101770290ull, 12489034977825177346ull,
+ 16085765718913378801ull, 4813733939492367619ull}},
+{{13168309328272437054ull, 1776235666999307971ull,
+ 15495521130214335598ull, 6017167424365459524ull}},
+{{11848700641913158413ull, 11443666620603910772ull,
+ 922657339058367881ull, 7521459280456824406ull}},
+{{16628809938050499816ull, 234762610236362376ull,
+ 14411718892193643638ull, 4700912050285515253ull}},
+{{2339268348853573154ull, 9516825299650228779ull,
+ 4179590559959890835ull, 5876140062856894067ull}},
+{{16759143491349130155ull, 7284345606135398069ull,
+ 612802181522475640ull, 7345175078571117584ull}},
+{{7113871308904248982ull, 9105432007669247587ull, 766002726903094550ull,
+ 9181468848213896980ull}},
+{{2140326558851461662ull, 1079208986365891838ull,
+ 9702123741169209902ull, 5738418030133685612ull}},
+{{11898780235419102885ull, 10572383269812140605ull,
+ 12127654676461512377ull, 7173022537667107015ull}},
+{{1038417238991714894ull, 17827165105692563661ull,
+ 10547882327149502567ull, 8966278172083883769ull}},
+{{2954853783583515761ull, 18059507218698934144ull,
+ 18121641500536908864ull, 5603923857552427355ull}},
+{{3693567229479394701ull, 4127639949664116064ull,
+ 18040365857243748177ull, 7004904821940534194ull}},
+{{4616959036849243376ull, 9771235955507532984ull,
+ 13327085284699909413ull, 8756131027425667743ull}},
+{{2885599398030777110ull, 8412865481405902067ull,
+ 15246957330578525239ull, 5472581892141042339ull}},
+{{17442057302820635100ull, 5904395833329989679ull,
+ 14447010644795768645ull, 6840727365176302924ull}},
+{{17190885610098405971ull, 11992180810089875003ull,
+ 18058763305994710806ull, 8550909206470378655ull}},
+{{8438460497097809780ull, 2883426987878783973ull,
+ 18204256093887776110ull, 5344318254043986659ull}},
+{{15159761639799650129ull, 12827655771703255774ull,
+ 18143634098932332233ull, 6680397817554983324ull}},
+{{9726330012894786853ull, 2199511659346906006ull,
+ 4232798549955863676ull, 8350497271943729156ull}},
+{{1467270239631853879ull, 10598066823946592062ull,
+ 11868871130577190605ull, 5219060794964830722ull}},
+{{11057459836394593157ull, 17859269548360627981ull,
+ 5612716876366712448ull, 6523825993706038403ull}},
+{{18433510813920629350ull, 3877342861741233360ull,
+ 2404210077031002657ull, 8154782492132548004ull}},
+{{11520944258700393344ull, 13952554334656740610ull,
+ 10726003334999152468ull, 5096739057582842502ull}},
+{{5177808286520715872ull, 17440692918320925763ull,
+ 4184132131894164777ull, 6370923821978553128ull}},
+{{1860574339723506935ull, 7965808092618993492ull,
+ 5230165164867705972ull, 7963654777473191410ull}},
+{{10386230999181967643ull, 14202002094741646740ull,
+ 7880539246469704136ull, 4977284235920744631ull}},
+{{12982788748977459553ull, 17752502618427058425ull,
+ 5238988039659742266ull, 6221605294900930789ull}},
+{{2393427880939660730ull, 12967256236179047224ull,
+ 11160421068002065737ull, 7777006618626163486ull}},
+{{1495892425587287956ull, 1187006119970822659ull,
+ 2363577149073903182ull, 4860629136641352179ull}},
+{{15704923587266273657ull, 10707129686818304131ull,
+ 16789529491624542689ull, 6075786420801690223ull}},
+{{15019468465655454167ull, 17995598126950268068ull,
+ 16375225846103290457ull, 7594733026002112779ull}},
+{{163795754179883047ull, 4329719801702835687ull, 7928673144600862584ull,
+ 4746708141251320487ull}},
+{{14039802748007017520ull, 5412149752128544608ull,
+ 5299155412323690326ull, 5933385176564150609ull}},
+{{17549753435008771900ull, 15988559227015456568ull,
+ 11235630283832000811ull, 7416731470705188261ull}},
+{{10968595896880482438ull, 7687006507670966403ull,
+ 9328111936608694459ull, 4635457169190742663ull}},
+{{9099058852673215143ull, 4997072116161320100ull,
+ 7048453902333480170ull, 5794321461488428329ull}},
+{{11373823565841518929ull, 15469712182056425933ull,
+ 13422253396344238116ull, 7242901826860535411ull}},
+{{382221402019734949ull, 890396153860980801ull, 12166130727002909742ull,
+ 9053627283575669264ull}},
+{{11768103422330804103ull, 14391555651445276712ull,
+ 7603831704376818588ull, 5658517052234793290ull}},
+{{14710129277913505129ull, 17989444564306595890ull,
+ 281417593616247427ull, 7073146315293491613ull}},
+{{9164289560537105603ull, 17875119686955856959ull,
+ 4963458010447697188ull, 8841432894116864516ull}},
+{{12645210002976772858ull, 1948577767492634791ull,
+ 12325533293384586551ull, 5525895558823040322ull}},
+{{11194826485293578169ull, 16270780264647957201ull,
+ 6183544579875957380ull, 6907369448528800403ull}},
+{{158475051334808999ull, 1891731257100394886ull, 3117744706417558822ull,
+ 8634211810661000504ull}},
+{{13934104962366419336ull, 15017390090969910515ull,
+ 1948590441510974263ull, 5396382381663125315ull}},
+{{12805945184530636266ull, 14160051595285000240ull,
+ 16270796107170881541ull, 6745477977078906643ull}},
+{{16007431480663295333ull, 3865006438824086588ull,
+ 15726809115536214023ull, 8431847471348633304ull}},
+{{781272638559783775ull, 9333158051906135974ull, 9829255697210133764ull,
+ 5269904669592895815ull}},
+{{10199962835054505527ull, 11666447564882669967ull,
+ 7674883603085279301ull, 6587380836991119769ull}},
+{{8138267525390744004ull, 748001400821173747ull,
+ 14205290522283987031ull, 8234226046238899711ull}},
+{{2780574194155521051ull, 7385029903154315448ull,
+ 15795835604068573750ull, 5146391278899312319ull}},
+{{3475717742694401313ull, 7915342088118502ull, 15133108486658329284ull,
+ 6432989098624140399ull}},
+{{13568019215222777450ull, 9894177610148127ull, 14304699589895523701ull,
+ 8041236373280175499ull}},
+{{15397541037155317762ull, 2312026870220036531ull,
+ 6634594234471008361ull, 5025772733300109687ull}},
+{{14635240278016759299ull, 7501719606202433568ull,
+ 3681556774661372547ull, 6282215916625137109ull}},
+{{18294050347520949123ull, 4765463489325654056ull,
+ 9213631986754103588ull, 7852769895781421386ull}},
+{{11433781467200593202ull, 12201786717683309593ull,
+ 10370206010148702646ull, 4907981184863388366ull}},
+{{457168778718577791ull, 6028861360249361184ull, 3739385475831102500ull,
+ 6134976481079235458ull}},
+{{571460973398222238ull, 7536076700311701480ull,
+ 13897603881643653933ull, 7668720601349044322ull}},
+{{357163108373888899ull, 7015890946908507377ull,
+ 13297688444454671612ull, 4792950375843152701ull}},
+{{5058139903894749028ull, 8769863683635634221ull,
+ 2787052500286175803ull, 5991187969803940877ull}},
+{{10934360898295824189ull, 6350643586117154872ull,
+ 8095501643785107658ull, 7488984962254926096ull}},
+{{6833975561434890118ull, 8580838259750609699ull,
+ 5059688527365692286ull, 4680615601409328810ull}},
+{{3930783433366224743ull, 1502675787833486316ull,
+ 15547982696061891166ull, 5850769501761661012ull}},
+{{4913479291707780929ull, 11101716771646633703ull,
+ 988234296367812341ull, 7313461877202076266ull}},
+{{1530163096207338257ull, 42087909276128417ull, 10458664907314541235ull,
+ 9141827346502595332ull}},
+{{12485566981198056171ull, 16167206007793437924ull,
+ 15760037603926364079ull, 5713642091564122082ull}},
+{{15606958726497570214ull, 15597321491314409501ull,
+ 10476674968053179291ull, 7142052614455152603ull}},
+{{5673640352839799055ull, 14884965845715623973ull,
+ 8484157691639086210ull, 8927565768068940754ull}},
+{{5851868229738568361ull, 13914789671999652887ull,
+ 9914284575701816785ull, 5579728605043087971ull}},
+{{2703149268745822548ull, 3558429034717402397ull,
+ 7781169701199883078ull, 6974660756303859964ull}},
+{{7990622604359666089ull, 13671408330251528804ull,
+ 9726462126499853847ull, 8718325945379824955ull}},
+{{14217511164579567114ull, 15462159234048287358ull,
+ 3773195819848714702ull, 5448953715862390597ull}},
+{{8548516918869683084ull, 10104327005705583390ull,
+ 9328180793238281282ull, 6811192144827988246ull}},
+{{1462274111732328047ull, 3407036720277203430ull,
+ 2436853954693075795ull, 8513990181034985308ull}},
+{{14748979375114868741ull, 18270299014669109807ull,
+ 10746405758537948179ull, 5321243863146865817ull}},
+{{13824538200466198023ull, 18226187749908999355ull,
+ 18044693216599823128ull, 6651554828933582271ull}},
+{{12668986732155359624ull, 4335990613676697578ull,
+ 17944180502322391007ull, 8314443536166977839ull}},
+{{12529802726024487669ull, 9627523161189017842ull,
+ 18132641841592576235ull, 5196527210104361149ull}},
+{{6438881370675833778ull, 7422717933058884399ull,
+ 8830744246708556582ull, 6495659012630451437ull}},
+{{3436915694917404319ull, 55025379468829691ull, 15650116326813083632ull,
+ 8119573765788064296ull}},
+{{18288973373819235363ull, 34390862168018556ull, 9781322704258177270ull,
+ 5074733603617540185ull}},
+{{4414472643564492588ull, 9266360614564799004ull,
+ 16838339398750109491ull, 6343417004521925231ull}},
+{{5518090804455615735ull, 6971264749778610851ull,
+ 16436238230010248960ull, 7929271255652406539ull}},
+{{1142963743571065883ull, 4357040468611631782ull,
+ 7966805884542711648ull, 4955794534782754087ull}},
+{{10652076716318608161ull, 5446300585764539727ull,
+ 5346821337251001656ull, 6194743168478442609ull}},
+{{8703409876970872297ull, 6807875732205674659ull,
+ 11295212689991139974ull, 7743428960598053261ull}},
+{{3133788163893101234ull, 18089980387910710374ull,
+ 9365350940458156435ull, 4839643100373783288ull}},
+{{13140607241721152350ull, 18000789466461000063ull,
+ 11706688675572695544ull, 6049553875467229110ull}},
+{{11814073033724052534ull, 4054242759366698463ull,
+ 5409988807611093623ull, 7561942344334036388ull}},
+{{14301324673718614690ull, 9451430752245268395ull,
+ 12604615041611709322ull, 4726213965208772742ull}},
+{{13264969823720880458ull, 2590916403451809686ull,
+ 6532396765159860845ull, 5907767456510965928ull}},
+{{7357840242796324765ull, 7850331522742150012ull,
+ 8165495956449826056ull, 7384709320638707410ull}},
+{{13822022188602478786ull, 4906457201713843757ull,
+ 9715120991208529189ull, 4615443325399192131ull}},
+{{3442469680470934770ull, 10744757520569692601ull,
+ 7532215220583273582ull, 5769304156748990164ull}},
+{{8914773119016056367ull, 4207574863857339943ull,
+ 9415269025729091978ull, 7211630195936237705ull}},
+{{6531780380342682555ull, 14482840616676450737ull,
+ 16380772300588752876ull, 9014537744920297131ull}},
+{{15611577783782646357ull, 18275147422277557518ull,
+ 7932139678654276595ull, 5634086090575185707ull}},
+{{10291100192873532138ull, 18232248259419558994ull,
+ 5303488579890457840ull, 7042607613218982134ull}},
+{{3640503204237139364ull, 4343566250564897127ull,
+ 15852732761717848109ull, 8803259516523727667ull}},
+{{9192843530289293959ull, 5020571915816754656ull,
+ 7602114966859961116ull, 5502037197827329792ull}},
+{{11491054412861617448ull, 6275714894770943320ull,
+ 9502643708574951395ull, 6877546497284162240ull}},
+{{14363818016077021810ull, 3232957600036291246ull,
+ 11878304635718689244ull, 8596933121605202800ull}},
+{{4365700241620750728ull, 11243970536877457837ull,
+ 7423940397324180777ull, 5373083201003251750ull}},
+{{10068811320453326313ull, 219905115814658584ull, 56553459800450164ull,
+ 6716354001254064688ull}},
+{{12586014150566657892ull, 274881394768323230ull, 70691824750562705ull,
+ 8395442501567580860ull}},
+{{3254572825676773279ull, 11701015917798671779ull,
+ 9267554427323877498ull, 5247151563479738037ull}},
+{{17903274087378130310ull, 5402897860393563915ull,
+ 16196129052582234777ull, 6558939454349672546ull}},
+{{17767406590795274983ull, 11365308343919342798ull,
+ 11021789278873017663ull, 8198674317937090683ull}},
+{{6492943100819658961ull, 14020846742590671105ull,
+ 4582775290081942087ull, 5124171448710681677ull}},
+{{12727864894451961605ull, 12914372409810950977ull,
+ 10340155131029815513ull, 6405214310888352096ull}},
+{{2074773062782788294ull, 2307907456981525010ull,
+ 12925193913787269392ull, 8006517888610440120ull}},
+{{5908419182666630588ull, 1442442160613453131ull,
+ 8078246196117043370ull, 5004073680381525075ull}},
+{{2773837959905900331ull, 11026424737621592222ull,
+ 5486121726718916308ull, 6255092100476906344ull}},
+{{12690669486737151221ull, 13783030922026990277ull,
+ 6857652158398645385ull, 7818865125596132930ull}},
+{{10237511438424413466ull, 1696865298625787067ull,
+ 8897718617426541270ull, 4886790703497583081ull}},
+{{8185203279603128928ull, 11344453660137009642ull,
+ 15733834290210564491ull, 6108488379371978851ull}},
+{{1008132062649135352ull, 9568881056743874149ull,
+ 15055606844335817710ull, 7635610474214973564ull}},
+{{2935925548369403547ull, 1368864642037533439ull, 186382240855110261ull,
+ 4772256546384358478ull}},
+{{17504964990743918146ull, 6322766820974304702ull,
+ 9456349837923663634ull, 5965320682980448097ull}},
+{{12657834201575121874ull, 17126830563072656686ull,
+ 16432123315831967446ull, 7456650853725560121ull}},
+{{3299460357557063267ull, 6092583083493022525ull,
+ 3352548044753897798ull, 4660406783578475076ull}},
+{{8736011465373716988ull, 16839100891221053964ull,
+ 4190685055942372247ull, 5825508479473093845ull}},
+{{10920014331717146235ull, 16437190095598929551ull,
+ 9850042338355353213ull, 7281885599341367306ull}},
+{{9038331896219044890ull, 6711429564216498227ull,
+ 3089180886089415709ull, 9102356999176709133ull}},
+{{3343114425923209104ull, 6500486486849005344ull,
+ 4236581063019578770ull, 5688973124485443208ull}},
+{{4178893032404011380ull, 17348980145416032488ull,
+ 5295726328774473462ull, 7111216405606804010ull}},
+{{5223616290505014225ull, 12462853144915264802ull,
+ 15843029947822867636ull, 8889020507008505012ull}},
+{{7876446199993021795ull, 17012655252426816309ull,
+ 678521680534516464ull, 5555637816880315633ull}},
+{{14457243768418665147ull, 2819074991823968770ull,
+ 5459838119095533485ull, 6944547271100394541ull}},
+{{8848182673668555626ull, 8135529758207348867ull,
+ 11436483667296804760ull, 8680684088875493176ull}},
+{{3224271161829153314ull, 5084706098879593042ull,
+ 7147802292060502975ull, 5425427555547183235ull}},
+{{13253710989141217451ull, 1744196605172103398ull,
+ 4323066846648240815ull, 6781784444433979044ull}},
+{{7343766699571746006ull, 16015303811747292960ull,
+ 5403833558310301018ull, 8477230555542473805ull}},
+{{4589854187232341254ull, 14621250900769446004ull,
+ 5683238983157632088ull, 5298269097214046128ull}},
+{{5737317734040426567ull, 18276563625961807505ull,
+ 7104048728947040110ull, 6622836371517557660ull}},
+{{11783333185977921113ull, 13622332495597483573ull,
+ 8880060911183800138ull, 8278545464396947075ull}},
+{{9670426250449894648ull, 13125643828175815137ull,
+ 3244195060276181134ull, 5174090915248091922ull}},
+{{16699718831489756213ull, 7183682748364993113ull,
+ 13278615862200002226ull, 6467613644060114902ull}},
+{{7039590484080031555ull, 18202975472311017200ull,
+ 7374897790895226974ull, 8084517055075143628ull}},
+{{4399744052550019722ull, 6765173651766997846ull,
+ 13832683156164292667ull, 5052823159421964767ull}},
+{{14723052102542300460ull, 3844781046281359403ull,
+ 12679167926777977930ull, 6316028949277455959ull}},
+{{13792129109750487671ull, 14029348344706475062ull,
+ 11237273890045084508ull, 7895036186596819949ull}},
+{{4008394675166666891ull, 17991714752296322722ull,
+ 9329139190491871769ull, 4934397616623012468ull}},
+{{14233865380813109421ull, 8654585385088239690ull,
+ 11661423988114839712ull, 6167997020778765585ull}},
+{{8568959689161610968ull, 10818231731360299613ull,
+ 741721929861385928ull, 7709996275973456982ull}},
+{{7661442814939700807ull, 6761394832100187258ull,
+ 14298634261445529917ull, 4818747672483410613ull}},
+{{353431481819850201ull, 13063429558552621977ull,
+ 4038234771524748684ull, 6023434590604263267ull}},
+{{5053475370702200655ull, 16329286948190777471ull,
+ 436107445978547951ull, 7529293238255329084ull}},
+{{10075951134329957266ull, 17123333370260317775ull,
+ 9495939190591368277ull, 4705808273909580677ull}},
+{{7983252899485058678ull, 7569108657543233507ull,
+ 16481610006666598251ull, 5882260342386975846ull}},
+{{5367380105928935443ull, 4849699803501653980ull,
+ 11378640471478472006ull, 7352825427983719808ull}},
+{{6709225132411169304ull, 15285496791231843283ull,
+ 14223300589348090007ull, 9191031784979649760ull}},
+{{1887422698543286863ull, 16470964522160983908ull,
+ 8889562868342556254ull, 5744394865612281100ull}},
+{{2359278373179108579ull, 11365333615846454077ull,
+ 11111953585428195318ull, 7180493582015351375ull}},
+{{7560783984901273627ull, 4983294982953291788ull,
+ 9278255963357856244ull, 8975616977519189219ull}},
+{{13948862027418071825ull, 12337931401200583175ull,
+ 3493066967884966200ull, 5609760610949493262ull}},
+{{12824391515845201878ull, 15422414251500728969ull,
+ 13589705746710983558ull, 7012200763686866577ull}},
+{{2195431339524338635ull, 10054645777521135404ull,
+ 3152074128106565736ull, 8765250954608583222ull}},
+{{10595516624057487455ull, 6284153610950709627ull,
+ 15805104385348767297ull, 5478281846630364513ull}},
+{{8632709761644471415ull, 12466878032115774938ull,
+ 5921322426403795409ull, 6847852308287955642ull}},
+{{1567515165200813460ull, 1748539484862554961ull,
+ 16625025069859520070ull, 8559815385359944552ull}},
+{{12508912024318978173ull, 14927895233321260562ull,
+ 10390640668662200043ull, 5349884615849965345ull}},
+{{6412767993543946908ull, 14048183023224187799ull,
+ 17599986854255137958ull, 6687355769812456681ull}},
+{{3404273973502545731ull, 8336856742175458941ull,
+ 8164925512536758736ull, 8359194712265570852ull}},
+{{4433514242652785034ull, 5210535463859661838ull,
+ 14326450482190250018ull, 5224496695165981782ull}},
+{{14765264840170757100ull, 15736541366679353105ull,
+ 8684691065883036714ull, 6530620868957477228ull}},
+{{4621522994931282663ull, 10447304671494415574ull,
+ 10855863832353795893ull, 8163276086196846535ull}},
+{{16723509927114215377ull, 8835408428897703685ull,
+ 13702443922862204289ull, 5102047553873029084ull}},
+{{7069329353610605509ull, 15655946554549517511ull,
+ 17128054903577755361ull, 6377559442341286355ull}},
+{{4224975673585868982ull, 5734875137904733177ull,
+ 16798382611044806298ull, 7971949302926607944ull}},
+{{14169824842059637874ull, 8195982979617846139ull,
+ 10498989131903003936ull, 4982468314329129965ull}},
+{{13100595034147159438ull, 10244978724522307674ull,
+ 17735422433306142824ull, 6228085392911412456ull}},
+{{7152371755829173489ull, 12806223405652884593ull,
+ 3722533967923126914ull, 7785106741139265571ull}},
+{{15999447393461703191ull, 12615575646960440774ull,
+ 20740720738260369ull, 4865691713212040982ull}},
+{{10775937204972353181ull, 1934411503418387256ull,
+ 9249297937777601270ull, 6082114641515051227ull}},
+{{13469921506215441476ull, 11641386416127759878ull,
+ 6949936403794613683ull, 7602643301893814034ull}},
+{{3807014922957263019ull, 4970023500866155972ull,
+ 8955396270799021456ull, 4751652063683633771ull}},
+{{4758768653696578773ull, 6212529376082694965ull,
+ 6582559320071388916ull, 5939565079604542214ull}},
+{{10560146835548111370ull, 7765661720103368706ull,
+ 17451571186944011953ull, 7424456349505677767ull}},
+{{11211777790644957511ull, 16382753621133075201ull,
+ 17824761019481089326ull, 4640285218441048604ull}},
+{{179664183024033176ull, 11255069989561568194ull,
+ 3834207200641810042ull, 5800356523051310756ull}},
+{{9447952265634817278ull, 4845465450097184434ull,
+ 4792759000802262553ull, 7250445653814138445ull}},
+{{2586568295188745789ull, 10668517831048868447ull,
+ 10602634769430216095ull, 9063057067267673056ull}},
+{{8534134212134047975ull, 13585352672046624635ull,
+ 6626646730893885059ull, 5664410667042295660ull}},
+{{6055981746740172064ull, 12370004821630892890ull,
+ 8283308413617356324ull, 7080513333802869575ull}},
+{{16793349220279990888ull, 15462506027038616112ull,
+ 5742449498594307501ull, 8850641667253586969ull}},
+{{10495843262674994305ull, 11969909276112829022ull,
+ 15118245982689911948ull, 5531651042033491855ull}},
+{{3896432041488967073ull, 14962386595141036278ull,
+ 14286121459935002031ull, 6914563802541864819ull}},
+{{14093912088715984649ull, 14091297225498907443ull,
+ 13245965806491364635ull, 8643204753177331024ull}},
+{{6502852046233796454ull, 6501217756723123200ull,
+ 8278728629057102897ull, 5402002970735831890ull}},
+{{8128565057792245568ull, 12738208214331291904ull,
+ 1125038749466602813ull, 6752503713419789863ull}},
+{{10160706322240306959ull, 2087702212631951168ull,
+ 15241356492115417229ull, 8440629641774737328ull}},
+{{6350441451400191850ull, 3610656892108663432ull,
+ 9525847807572135768ull, 5275393526109210830ull}},
+{{7938051814250239812ull, 4513321115135829290ull,
+ 2683937722610393902ull, 6594241907636513538ull}},
+{{699192730958023957ull, 14865023430774562421ull,
+ 12578294190117768185ull, 8242802384545641922ull}},
+{{2742838466062458925ull, 2373110616593019657ull,
+ 12473119887250993020ull, 5151751490341026201ull}},
+{{8040234101005461560ull, 2966388270741274571ull,
+ 1756341803781577563ull, 6439689362926282752ull}},
+{{5438606607829439046ull, 17543043393708756926ull,
+ 2195427254726971953ull, 8049611703657853440ull}},
+{{17234187185175563116ull, 4046873093426891222ull,
+ 1372142034204357471ull, 5031007314786158400ull}},
+{{12319361944614678087ull, 446905348356226124ull,
+ 1715177542755446839ull, 6288759143482698000ull}},
+{{15399202430768347609ull, 14393689740727446367ull,
+ 2143971928444308548ull, 7860948929353372500ull}},
+{{16542030546871299112ull, 18219428124809429787ull,
+ 10563354492132468650ull, 4913093080845857812ull}},
+{{16065852165161735985ull, 13550913119157011426ull,
+ 13204193115165585813ull, 6141366351057322265ull}},
+{{10858943169597394174ull, 3103583343664100571ull,
+ 2670183338674818555ull, 7676707938821652832ull}},
+{{4480996471784677407ull, 18080640654285920521ull,
+ 1668864586671761596ull, 4797942461763533020ull}},
+{{10212931608158234662ull, 4154056744147849035ull,
+ 2086080733339701996ull, 5997428077204416275ull}},
+{{8154478491770405424ull, 5192570930184811294ull,
+ 16442658971956791207ull, 7496785096505520343ull}},
+{{484863038929115486ull, 10162885859006588915ull,
+ 17194190885114076360ull, 4685490685315950214ull}},
+{{14441136853943558069ull, 12703607323758236143ull,
+ 12269366569537819642ull, 5856863356644937768ull}},
+{{13439735049002059683ull, 6656137117843019371ull,
+ 15336708211922274553ull, 7321079195806172210ull}},
+{{12187982792825186699ull, 12931857415731162118ull,
+ 9947513228048067383ull, 9151348994757715263ull}},
+{{3005803227088353783ull, 14999939912473058180ull,
+ 13134724795171123970ull, 5719593121723572039ull}},
+{{3757254033860442229ull, 9526552853736546917ull,
+ 11806719975536517059ull, 7149491402154465049ull}},
+{{9308253560752940690ull, 7296505048743295742ull, 923341914138482612ull,
+ 8936864252693081312ull}},
+{{1205972457043200027ull, 13783687692319335647ull,
+ 577088696336551632ull, 5585540157933175820ull}},
+{{15342523626586163746ull, 17229609615399169558ull,
+ 721360870420689540ull, 6981925197416469775ull}},
+{{9954782496377928875ull, 3090267945539410332ull,
+ 14736759143308025638ull, 8727406496770587218ull}},
+{{15445111097090981355ull, 15766475521244295169ull,
+ 13822160482994903927ull, 5454629060481617011ull}},
+{{5471330816081562981ull, 15096408383127981058ull,
+ 12666014585316242005ull, 6818286325602021264ull}},
+{{16062535556956729535ull, 5035452423627812610ull,
+ 15832518231645302507ull, 8522857907002526580ull}},
+{{14650770741525343863ull, 841314755553688929ull, 671951857923538259ull,
+ 5326786191876579113ull}},
+{{4478405371624516117ull, 14886701499724274874ull,
+ 5451625840831810727ull, 6658482739845723891ull}},
+{{14821378751385420954ull, 13996690856227955688ull,
+ 2202846282612375505ull, 8323103424807154864ull}},
+{{9263361719615888097ull, 1830402757501390449ull,
+ 1376778926632734691ull, 5201939640504471790ull}},
+{{16190888167947248025ull, 16123061502158901773ull,
+ 10944345695145694171ull, 6502424550630589737ull}},
+{{6403552154651896319ull, 15542140859271239313ull,
+ 18292118137359505618ull, 8128030688288237171ull}},
+{{15531435142725904959ull, 14325524055471912474ull,
+ 9126730826635997059ull, 5080019180180148232ull}},
+{{10190921891552605391ull, 13295219050912502689ull,
+ 11408413533294996324ull, 6350023975225185290ull}},
+{{17350338382868144643ull, 16619023813640628361ull,
+ 5037144879763969597ull, 7937529969031481613ull}},
+{{3926432461651508546ull, 12692732892739086678ull,
+ 5454058559066174950ull, 4960956230644676008ull}},
+{{14131412613919161490ull, 6642544079069082539ull,
+ 6817573198832718688ull, 6201195288305845010ull}},
+{{13052579748971563959ull, 8303180098836353174ull,
+ 17745338535395674168ull, 7751494110382306262ull}},
+{{3546176324679839570ull, 5189487561772720734ull,
+ 6479150566194908451ull, 4844683818988941414ull}},
+{{13656092442704575271ull, 1875173433788513013ull,
+ 17322310244598411372ull, 6055854773736176767ull}},
+{{3235057498098555376ull, 2343966792235641267ull,
+ 17041201787320626311ull, 7569818467170220959ull}},
+{{18162812000807454774ull, 8382508272788357647ull,
+ 17568280144716473300ull, 4731136541981388099ull}},
+{{18091828982581930564ull, 10478135340985447059ull,
+ 17348664162468203721ull, 5913920677476735124ull}},
+{{18003100209800025301ull, 17709355194659196728ull,
+ 3239086129375703035ull, 7392400846845918906ull}},
+{{11251937631125015813ull, 8762503987448304003ull,
+ 6636114849287202301ull, 4620250529278699316ull}},
+{{9453236020478881862ull, 15564816002737767908ull,
+ 8295143561609002876ull, 5775313161598374145ull}},
+{{11816545025598602328ull, 1009275929712658269ull,
+ 14980615470438641500ull, 7219141451997967681ull}},
+{{935623226716089197ull, 1261594912140822837ull, 4890711282766138163ull,
+ 9023926814997459602ull}},
+{{2890607525911249701ull, 16929397884583871937ull,
+ 7668380570156224255ull, 5639954259373412251ull}},
+{{8224945425816450030ull, 16550061337302452017ull,
+ 4973789694267892415ull, 7049942824216765314ull}},
+{{14892867800697950441ull, 16075890653200677117ull,
+ 15440609154689641327ull, 8812428530270956642ull}},
+{{11613885384649912978ull, 16964960685891505054ull,
+ 14262066740108413733ull, 5507767831419347901ull}},
+{{5293984693957615414ull, 7371142802082217606ull,
+ 3992525369853353455ull, 6884709789274184877ull}},
+{{15840852904301795075ull, 4602242484175384103ull,
+ 9602342730744079723ull, 8605887236592731096ull}},
+{{16818062092829703778ull, 570558543395921112ull,
+ 6001464206715049827ull, 5378679522870456935ull}},
+{{2575833542327578107ull, 14548256234527065103ull,
+ 2890144239966424379ull, 6723349403588071169ull}},
+{{17054849983191636345ull, 13573634274731443474ull,
+ 8224366318385418378ull, 8404186754485088961ull}},
+{{15270967257922160620ull, 13095207440134540075ull,
+ 16669443995059356246ull, 5252616721553180600ull}},
+{{14477023053975312871ull, 7145637263313399286ull,
+ 2390060920114643692ull, 6565770901941475751ull}},
+{{8872906780614365281ull, 8932046579141749108ull,
+ 16822634205425468327ull, 8207213627426844688ull}},
+{{14768938774738754109ull, 12500058139604675048ull,
+ 10514146378390917704ull, 5129508517141777930ull}},
+{{14429394713891020ull, 15625072674505843811ull, 3919310936133871322ull,
+ 6411885646427222413ull}},
+{{13853094798674527486ull, 10307968806277528955ull,
+ 9510824688594727057ull, 8014857058034028016ull}},
+{{6352341239957885727ull, 17971695549991925357ull,
+ 5944265430371704410ull, 5009285661271267510ull}},
+{{12552112568374745063ull, 13241247400635130888ull,
+ 16653703824819406321ull, 6261607076589084387ull}},
+{{15690140710468431328ull, 2716501195511749898ull,
+ 16205443762596869998ull, 7827008845736355484ull}},
+{{14418023962470157484ull, 15532871302477007398ull,
+ 905030314768267940ull, 4891880528585222178ull}},
+{{8799157916232921047ull, 969345054386707632ull,
+ 10354659930315110734ull, 6114850660731527722ull}},
+{{10998947395291151309ull, 10435053354838160348ull,
+ 3719952876039112609ull, 7643563325914409653ull}},
+{{16097714158911745376ull, 18051123392842319977ull,
+ 4630813556738139332ull, 4777227078696506033ull}},
+{{6287084643357518008ull, 4117160167343348356ull,
+ 10400202964350062070ull, 5971533848370632541ull}},
+{{7858855804196897510ull, 14369822246033961253ull,
+ 17611939723864965491ull, 7464417310463290676ull}},
+{{7217627886836754896ull, 6675295894557531831ull,
+ 1784090290560827624ull, 4665260819039556673ull}},
+{{4410348840118555716ull, 8344119868196914789ull,
+ 6841798881628422434ull, 5831576023799445841ull}},
+{{10124622068575582549ull, 1206777798391367678ull,
+ 13163934620462915947ull, 7289470029749307301ull}},
+{{3432405548864702378ull, 15343530303271373310ull,
+ 2619860220296481221ull, 9111837537186634127ull}},
+{{15980311523322602698ull, 11895549448758302270ull,
+ 8554941665326382619ull, 5694898460741646329ull}},
+{{10752017367298477565ull, 10257750792520489934ull,
+ 15305363100085366178ull, 7118623075927057911ull}},
+{{4216649672268321148ull, 3598816453795836610ull,
+ 14520017856679319819ull, 8898278844908822389ull}},
+{{7247092063595088622ull, 18390161348118255545ull,
+ 11380854169638268838ull, 5561424278068013993ull}},
+{{13670551097921248681ull, 13764329648293043623ull,
+ 391009656765672336ull, 6951780347585017492ull}},
+{{12476502853974172947ull, 17205412060366304529ull,
+ 488762070957090420ull, 8689725434481271865ull}},
+{{880285256092776236ull, 1530010500874164523ull,
+ 11834691340416651273ull, 5431078396550794915ull}},
+{{14935414625398134007ull, 6524199144520093557ull,
+ 10181678157093426187ull, 6788847995688493644ull}},
+{{4834210226465503797ull, 3543562912222729043ull,
+ 12727097696366782734ull, 8486059994610617055ull}},
+{{715538382327245921ull, 16049784875421369364ull,
+ 14871965087870321064ull, 5303787496631635659ull}},
+{{894422977909057401ull, 1615487020567160089ull,
+ 13978270341410513427ull, 6629734370789544574ull}},
+{{5729714740813709656ull, 15854416830991113823ull,
+ 8249465889908365975ull, 8287167963486930718ull}},
+{{10498600740649650391ull, 16826539547010527995ull,
+ 544230162765340830ull, 5179479977179331699ull}},
+{{8511564907384675084ull, 11809802396908384186ull,
+ 14515345758738839750ull, 6474349971474164623ull}},
+{{1416084097376068047ull, 5538880959280704425ull,
+ 13532496179996161784ull, 8092937464342705779ull}},
+{{12414267606928512290ull, 3461800599550440265ull,
+ 6151967103283907163ull, 5058085915214191112ull}},
+{{1682776453378476650ull, 18162308804720214044ull,
+ 7689958879104883953ull, 6322607394017738890ull}},
+{{2103470566723095813ull, 8867827950618103843ull, 389076562026329134ull,
+ 7903259242522173613ull}},
+{{17455570168697792547ull, 930706450708926997ull,
+ 2549015860480149661ull, 4939537026576358508ull}},
+{{7984404655590076972ull, 5775069081813546651ull,
+ 3186269825600187076ull, 6174421283220448135ull}},
+{{5368819801060208311ull, 7218836352266933314ull,
+ 17817895337282397557ull, 7718026604025560168ull}},
+{{7967198394090018098ull, 6817615729380527273ull,
+ 11136184585801498473ull, 4823766627515975105ull}},
+{{14570684011039910527ull, 13133705680153046995ull,
+ 85172676969709379ull, 6029708284394968882ull}},
+{{13601668995372500254ull, 11805446081763920840ull,
+ 9329837883066912532ull, 7537135355493711102ull}},
+{{8501043122107812659ull, 16601775837957226333ull,
+ 1219462658489432428ull, 4710709597183569439ull}},
+{{15237989921062153728ull, 2305475723736981300ull,
+ 15359386378393954248ull, 5888386996479461798ull}},
+{{600743327618140544ull, 2881844654671226626ull, 9975860936137667002ull,
+ 7360483745599327248ull}},
+{{9974301196377451487ull, 12825677855193809090ull,
+ 12469826170172083752ull, 9200604681999159060ull}},
+{{10845624266163295084ull, 8016048659496130681ull,
+ 17017013393212328153ull, 5750377926249474412ull}},
+{{18168716351131506759ull, 14631746842797551255ull,
+ 2824522667805858575ull, 7187972407811843016ull}},
+{{18099209420486995544ull, 13677997535069551165ull,
+ 3530653334757323219ull, 8984965509764803770ull}},
+{{13617848897018066167ull, 6242905450204775526ull,
+ 6818344352650714916ull, 5615603443603002356ull}},
+{{7798939084417806901ull, 7803631812755969408ull,
+ 8522930440813393645ull, 7019504304503752945ull}},
+{{9748673855522258626ull, 14366225784372349664ull,
+ 15265349069444129960ull, 8774380380629691181ull}},
+{{6092921159701411641ull, 8978891115232718540ull,
+ 11846686177616275177ull, 5483987737893556988ull}},
+{{7616151449626764552ull, 15835299912468286079ull,
+ 14808357722020343971ull, 6854984672366946235ull}},
+{{4908503293606067786ull, 15182438872157969695ull,
+ 13898761134098042060ull, 8568730840458682794ull}},
+{{9985343586144874222ull, 265652258243955251ull,
+ 13298411727238664192ull, 5355456775286676746ull}},
+{{7869993464253704874ull, 332065322804944064ull, 7399642622193554432ull,
+ 6694320969108345933ull}},
+{{9837491830317131092ull, 415081653506180080ull,
+ 13861239296169330944ull, 8367901211385432416ull}},
+{{6148432393948206933ull, 259426033441362550ull, 8663274560105831840ull,
+ 5229938257115895260ull}},
+{{16908912529290034474ull, 324282541801703187ull,
+ 10829093200132289800ull, 6537422821394869075ull}},
+{{16524454643185155188ull, 405353177252128984ull,
+ 8924680481737974346ull, 8171778526743586344ull}},
+{{10327784151990721993ull, 4865031754209968519ull,
+ 5577925301086233966ull, 5107361579214741465ull}},
+{{8298044171561014587ull, 15304661729617236457ull,
+ 11584092644785180361ull, 6384201974018426831ull}},
+{{14984241232878656137ull, 5295769106739381859ull,
+ 9868429787554087548ull, 7980252467523033539ull}},
+{{7059307761335466134ull, 12533227728566889470ull,
+ 3861925608007610765ull, 4987657792201895962ull}},
+{{18047506738524108475ull, 1831476605426448125ull,
+ 14050779046864289265ull, 6234572240252369952ull}},
+{{8724325367872971882ull, 6901031775210448061ull,
+ 17563473808580361581ull, 7793215300315462440ull}},
+{{7758546364134301378ull, 6618987868720223990ull,
+ 10977171130362725988ull, 4870759562697164025ull}},
+{{474810918313100915ull, 8273734835900279988ull,
+ 18333149931380795389ull, 6088449453371455031ull}},
+{{593513647891376143ull, 14953854563302737889ull,
+ 18304751395798606332ull, 7610561816714318789ull}},
+{{11900161076000579850ull, 122787065209435372ull,
+ 13746312631587822910ull, 4756601135446449243ull}},
+{{14875201345000724812ull, 9376855868366570023ull,
+ 12571204771057390733ull, 5945751419308061554ull}},
+{{13982315662823518111ull, 16332755853885600433ull,
+ 6490633926966962608ull, 7432189274135076943ull}},
+{{1821418261623616964ull, 10207972408678500271ull,
+ 10974175231995433486ull, 4645118296334423089ull}},
+{{16111830882311684916ull, 3536593473993349530ull,
+ 18329405058421679762ull, 5806397870418028861ull}},
+{{10916416566034830337ull, 13644113879346462721ull,
+ 9076698267744935990ull, 7257997338022536077ull}},
+{{18257206725970925826ull, 7831770312328302593ull,
+ 15957558853108557892ull, 9072496672528170096ull}},
+{{4493225176090746785ull, 14118228482059964929ull,
+ 9973474283192848682ull, 5670310420330106310ull}},
+{{10228217488540821385ull, 8424413565720180353ull,
+ 3243470817136285045ull, 7087888025412632888ull}},
+{{17396957879103414636ull, 15142202975577613345ull,
+ 4054338521420356306ull, 8859860031765791110ull}},
+{{3955569646798552291ull, 14075562878163396245ull,
+ 16369019631169886403ull, 5537412519853619443ull}},
+{{9556148076925578268ull, 12982767579276857402ull,
+ 15849588520534970100ull, 6921765649817024304ull}},
+{{2721813059302197027ull, 16228459474096071753ull,
+ 1365241576959161009ull, 8652207062271280381ull}},
+{{13230348208132342902ull, 3225258143668962989ull,
+ 3159118994813169583ull, 5407629413919550238ull}},
+{{2702877204883264916ull, 17866630734868367449ull,
+ 13172270780371237786ull, 6759536767399437797ull}},
+{{7990282524531469048ull, 13109916381730683503ull,
+ 2630280420181883521ull, 8449420959249297247ull}},
+{{11911455605473250011ull, 1276168710940595333ull,
+ 8561454290254759057ull, 5280888099530810779ull}},
+{{1054261451559398802ull, 6206896907103132071ull,
+ 6090131844391060917ull, 6601110124413513474ull}},
+{{15152884869731412214ull, 12370307152306302992ull,
+ 16836036842343601954ull, 8251387655516891842ull}},
+{{9470553043582132634ull, 12343127988618827274ull,
+ 15134209044892139125ull, 5157117284698057401ull}},
+{{2614819267622889985ull, 1593851930491370381ull,
+ 5082703250833010195ull, 6446396605872571752ull}},
+{{7880210102956000385ull, 15827372968396376688ull,
+ 6353379063541262743ull, 8057995757340714690ull}},
+{{4925131314347500241ull, 16809637132888817286ull,
+ 8582547933140677118ull, 5036247348337946681ull}},
+{{15379786179789151109ull, 11788674379256245799ull,
+ 15339870934853234302ull, 6295309185422433351ull}},
+{{14613046706309050982ull, 5512470937215531441ull,
+ 14563152650139154974ull, 7869136481778041689ull}},
+{{2215625163802075008ull, 17280352391041870863ull,
+ 2184441378695890002ull, 4918210301111276056ull}},
+{{16604589510034757472ull, 12377068451947562770ull,
+ 2730551723369862503ull, 6147762876389095070ull}},
+{{11532364850688671031ull, 10859649546507065559ull,
+ 12636561691067103937ull, 7684703595486368837ull}},
+{{14125257059321501251ull, 18316496012635385734ull,
+ 10203694066130633912ull, 4802939747178980523ull}},
+{{8433199287297100755ull, 4448875942084680552ull,
+ 8142931564235904487ull, 6003674683973725654ull}},
+{{10541499109121375944ull, 949408909178462786ull, 955292418440104801ull,
+ 7504593354967157068ull}},
+{{11200122961628247869ull, 12122595614305009001ull,
+ 9820429798379841308ull, 4690370846854473167ull}},
+{{165095646753146124ull, 15153244517881261252ull,
+ 7663851229547413731ull, 5862963558568091459ull}},
+{{206369558441432655ull, 14329869628924188661ull,
+ 4968128018506879260ull, 7328704448210114324ull}},
+{{4869647966479178723ull, 17912337036155235826ull,
+ 6210160023133599075ull, 9160880560262642905ull}},
+{{7655215997476874606ull, 8889367638383328439ull,
+ 15410565060526969182ull, 5725550350164151815ull}},
+{{4957333978418705354ull, 1888337511124384741ull,
+ 14651520307231323574ull, 7156937937705189769ull}},
+{{10808353491450769596ull, 11583793925760256734ull,
+ 4479342328756990755ull, 8946172422131487212ull}},
+{{2143534913729343094ull, 4934028194386466507ull,
+ 12022960992327895030ull, 5591357763832179507ull}},
+{{16514476697443842579ull, 15390907279837858941ull,
+ 10417015221982480883ull, 6989197204790224384ull}},
+{{6808037816522639511ull, 14626948081369935773ull,
+ 13021269027478101104ull, 8736496505987780480ull}},
+{{6560866644540343647ull, 9141842550856209858ull,
+ 8138293142173813190ull, 5460310316242362800ull}},
+{{17424455342530205366ull, 2203931151715486514ull,
+ 10172866427717266488ull, 6825387895302953500ull}},
+{{12557197141307980900ull, 2754913939644358143ull,
+ 12716083034646583110ull, 8531734869128691875ull}},
+{{14765777240958569919ull, 15556879267559887551ull,
+ 5641708887440420491ull, 5332334293205432422ull}},
+{{13845535532770824494ull, 14834413066022471535ull,
+ 16275508146155301422ull, 6665417866506790527ull}},
+{{12695233397536142714ull, 9319644295673313611ull,
+ 15732699164266738874ull, 8331772333133488159ull}},
+{{5628677864246395244ull, 10436463703223208911ull,
+ 16750466005307793652ull, 5207357708208430099ull}},
+{{2424161311880606151ull, 13045579629029011139ull,
+ 16326396488207354161ull, 6509197135260537624ull}},
+{{16865259695132921401ull, 2471916481004100211ull,
+ 1961251536549641086ull, 8136496419075672031ull}},
+{{8234944300244381924ull, 15380005855909726344ull,
+ 8143311237984607534ull, 5085310261922295019ull}},
+{{10293680375305477404ull, 10001635283032382122ull,
+ 5567453029053371514ull, 6356637827402868774ull}},
+{{3643728432277070947ull, 3278672066935701845ull,
+ 16182688323171490201ull, 7945797284253585967ull}},
+{{4583173279386863294ull, 13578385087903283413ull,
+ 17031709229623263231ull, 4966123302658491229ull}},
+{{10340652617660967022ull, 12361295341451716362ull,
+ 7454578481746915327ull, 6207654128323114037ull}},
+{{3702443735221432969ull, 10839933158387257549ull,
+ 13929909120611032063ull, 7759567660403892546ull}},
+{{4619870343727089558ull, 13692487251633117824ull,
+ 13317879218809282943ull, 4849729787752432841ull}},
+{{5774837929658861947ull, 12503923046114009376ull,
+ 2812290968229439967ull, 6062162234690541052ull}},
+{{7218547412073577434ull, 11018217789215123816ull,
+ 3515363710286799959ull, 7577702793363176315ull}},
+{{4511592132545985896ull, 13803915145900534241ull,
+ 18338003383425107638ull, 4736064245851985196ull}},
+{{10251176184109870274ull, 8031521895520891993ull,
+ 4475760155571832932ull, 5920080307314981496ull}},
+{{17425656248564725747ull, 10039402369401114991ull,
+ 5594700194464791165ull, 7400100384143726870ull}},
+{{17808564182994035448ull, 8580469490089390821ull,
+ 17331745676822658190ull, 4625062740089829293ull}},
+{{8425647173460380598ull, 1502214825756962719ull,
+ 7829624040746159026ull, 5781328425112286617ull}},
+{{5920372948398087843ull, 11101140569050979207ull,
+ 14398716069360086686ull, 7226660531390358271ull}},
+{{2788780167070221900ull, 4653053674458948201ull,
+ 13386709068272720454ull, 9033325664237947839ull}},
+{{13272202650487358448ull, 16743216601819006337ull,
+ 15284222195311532139ull, 5645828540148717399ull}},
+{{2755195257827034347ull, 16317334733846370018ull,
+ 14493591725712027270ull, 7057285675185896749ull}},
+{{12667366109138568742ull, 11173296380453186714ull,
+ 4281931601857870376ull, 8821607093982370937ull}},
+{{12528789836638993368ull, 6983310237783241696ull,
+ 14205422297229638745ull, 5513504433738981835ull}},
+{{15660987295798741710ull, 13340823815656440024ull,
+ 13145091853109660527ull, 6891880542173727294ull}},
+{{1129490046038875521ull, 12064343751143162127ull,
+ 7207992779532299851ull, 8614850677717159118ull}},
+{{7623460306415379057ull, 5234371835250782377ull,
+ 18340053542489851119ull, 5384281673573224448ull}},
+{{14141011401446611725ull, 1931278775636090067ull,
+ 4478322854402762283ull, 6730352091966530561ull}},
+{{13064578233380876752ull, 16249156524827276296ull,
+ 10209589586430840757ull, 8412940114958163201ull}},
+{{8165361395863047970ull, 12461565837230741637ull,
+ 17910208537587745233ull, 5258087571848852000ull}},
+{{14818387763256197867ull, 1741899241256263334ull,
+ 3941016598275129926ull, 6572609464811065001ull}},
+{{9299612667215471525ull, 11400746088425104976ull,
+ 9537956766271300311ull, 8215761831013831251ull}},
+{{5812257917009669703ull, 14042995332906772466ull,
+ 3655379969705868742ull, 5134851144383644532ull}},
+{{16488694433116862937ull, 8330372129278689774ull,
+ 4569224962132335928ull, 6418563930479555665ull}},
+{{11387496004541302863ull, 10412965161598362218ull,
+ 10323217221092807814ull, 8023204913099444581ull}},
+{{11728871021265702194ull, 1896417207571588482ull,
+ 8757853772396698836ull, 5014503070687152863ull}},
+{{5437716739727351934ull, 2370521509464485603ull,
+ 6335631197068485641ull, 6268128838358941079ull}},
+{{2185459906231802013ull, 7574837905257994908ull,
+ 3307852977908219147ull, 7835161047948676349ull}},
+{{10589284478249652067ull, 2428430681572552865ull,
+ 4373251120406330919ull, 4896975654967922718ull}},
+{{17848291616239452987ull, 16870596407247854793ull,
+ 14689935937362689456ull, 6121219568709903397ull}},
+{{8475306465017152522ull, 2641501435350266876ull,
+ 4527361866421198109ull, 7651524460887379247ull}},
+{{14520438577490496134ull, 3956781406307610749ull,
+ 9747130194154330674ull, 4782202788054612029ull}},
+{{4315490166580956456ull, 14169348794739289245ull,
+ 16795598761120301246ull, 5977753485068265036ull}},
+{{10006048726653583474ull, 8488313956569335748ull,
+ 2547754377690824942ull, 7472191856335331296ull}},
+{{15477152491013265479ull, 693510204428446938ull,
+ 1592346486056765589ull, 4670119910209582060ull}},
+{{10123068576911806041ull, 5478573773962946577ull,
+ 1990433107570956986ull, 5837649887761977575ull}},
+{{17265521739567145455ull, 16071589254308459029ull,
+ 16323099439745859944ull, 7297062359702471968ull}},
+{{7746844119176768107ull, 1642742494176022171ull,
+ 1957130225972773315ull, 9121327949628089961ull}},
+{{2535934565271786115ull, 17167615123355871521ull,
+ 12752421437301453081ull, 5700829968517556225ull}},
+{{7781604225017120547ull, 7624460848912675689ull,
+ 2105468741344652640ull, 7126037460646945282ull}},
+{{14338691299698788588ull, 9530576061140844611ull,
+ 11855207963535591608ull, 8907546825808681602ull}},
+{{6655839053098048916ull, 5956610038213027882ull,
+ 12021190995637132659ull, 5567216766130426001ull}},
+{{17543170853227336953ull, 2834076529338896948ull,
+ 1191430689264252112ull, 6959020957663032502ull}},
+{{3482219492824619575ull, 3542595661673621186ull,
+ 10712660398435090948ull, 8698776197078790627ull}},
+{{6788073201442775138ull, 11437494325400789049ull,
+ 4389569739808237890ull, 5436735123174244142ull}},
+{{13096777520230856827ull, 5073495869896210503ull,
+ 14710334211615073171ull, 6795918903967805177ull}},
+{{11759285881861183129ull, 1730183818942875225ull,
+ 4552859709236677752ull, 8494898629959756472ull}},
+{{432024648522157600ull, 1081364886839297016ull, 2845537318272923595ull,
+ 5309311643724847795ull}},
+{{540030810652697000ull, 15186764163831284982ull,
+ 17391979703123318205ull, 6636639554656059743ull}},
+{{9898410550170647058ull, 5148397149506942515ull,
+ 17128288610476759853ull, 8295799443320074679ull}},
+{{3880663584642960459ull, 5523591227655533024ull,
+ 17622709409189056764ull, 5184874652075046674ull}},
+{{4850829480803700574ull, 6904489034569416280ull,
+ 12805014724631545147ull, 6481093315093808343ull}},
+{{6063536851004625717ull, 4018925274784382446ull,
+ 11394582387362043530ull, 8101366643867260429ull}},
+{{17624768587160054785ull, 7123514315167626932ull,
+ 9427457001314971158ull, 5063354152417037768ull}},
+{{3584216660240516866ull, 18127764930814309474ull,
+ 11784321251643713947ull, 6329192690521297210ull}},
+{{13703642862155421890ull, 18048020145090498938ull,
+ 5507029527699866626ull, 7911490863151621513ull}},
+{{13176462807274526585ull, 15891698609108949740ull,
+ 14971108500880886401ull, 4944681789469763445ull}},
+{{16470578509093158232ull, 6029565206104023463ull,
+ 4878827570818944290ull, 6180852236837204307ull}},
+{{15976537117939059886ull, 16760328544484805137ull,
+ 1486848445096292458ull, 7726065296046505384ull}},
+{{3067806671070830573ull, 15086891358730391115ull,
+ 929280278185182786ull, 4828790810029065865ull}},
+{{17669816394120701928ull, 9635242161558213085ull,
+ 5773286366158866387ull, 6035988512536332331ull}},
+{{8252212437368713697ull, 7432366683520378453ull,
+ 2604921939271195080ull, 7544985640670415414ull}},
+{{7463475782569140013ull, 4645229177200236533ull,
+ 15463134267326660637ull, 4715616025419009633ull}},
+{{13941030746638812920ull, 10418222489927683570ull,
+ 5493859778876162084ull, 5894520031773762042ull}},
+{{8202916396443740342ull, 13022778112409604463ull,
+ 16090696760449978413ull, 7368150039717202552ull}},
+{{5641959477127287524ull, 2443414585229841867ull,
+ 1666626876852921401ull, 9210187549646503191ull}},
+{{1220381663990860750ull, 13056349161837120927ull,
+ 7959170825674157731ull, 5756367218529064494ull}},
+{{15360535135270739650ull, 11708750433869013254ull,
+ 725591495237921356ull, 7195459023161330618ull}},
+{{9977296882233648754ull, 14635938042336266568ull,
+ 10130361405902177503ull, 8994323778951663272ull}},
+{{6235810551396030472ull, 16064990304101248461ull,
+ 6331475878688860939ull, 5621452361844789545ull}},
+{{12406449207672425993ull, 15469551861699172672ull,
+ 12526030866788464078ull, 7026815452305986931ull}},
+{{15508061509590532492ull, 10113567790269190032ull,
+ 11045852565058192194ull, 8783519315382483664ull}},
+{{9692538443494082807ull, 10932665887345631674ull,
+ 6903657853161370121ull, 5489699572114052290ull}},
+{{2892301017512827701ull, 18277518377609427497ull,
+ 17852944353306488459ull, 6862124465142565362ull}},
+{{8227062290318422530ull, 18235211953584396467ull,
+ 13092808404778334766ull, 8577655581428206703ull}},
+{{2836070922235320130ull, 6785321452562859888ull,
+ 15100534280627541085ull, 5361034738392629189ull}},
+{{3545088652794150162ull, 13093337834130962764ull,
+ 5040609795502262644ull, 6701293422990786487ull}},
+{{4431360815992687702ull, 16366672292663703455ull,
+ 1689076225950440401ull, 8376616778738483109ull}},
+{{9687129537636511670ull, 3311641155273732803ull,
+ 3361515650432719203ull, 5235385486711551943ull}},
+{{7497225903618251684ull, 17974609499374329716ull,
+ 18036952618323062715ull, 6544231858389439928ull}},
+{{9371532379522814604ull, 17856575855790524241ull,
+ 4099446699194276778ull, 8180289822986799911ull}},
+{{17386422783270228888ull, 15772045928296465554ull,
+ 9479683214637504842ull, 5112681139366749944ull}},
+{{12509656442233010302ull, 10491685373515806135ull,
+ 11849604018296881053ull, 6390851424208437430ull}},
+{{11025384534363874973ull, 17726292735322145573ull,
+ 5588632986016325508ull, 7988564280260546788ull}},
+{{9196708343191115810ull, 1855560922721565175ull,
+ 12716267653114979251ull, 4992852675162841742ull}},
+{{6884199410561506859ull, 16154509208684120181ull,
+ 6671962529538948255ull, 6241065843953552178ull}},
+{{13216935281629271477ull, 15581450492427762322ull,
+ 17563325198778461127ull, 7801332304941940222ull}},
+{{12872270569445682578ull, 16655935585408433307ull,
+ 6365392230809150300ull, 4875832690588712639ull}},
+{{11478652193379715318ull, 2373175408050990018ull,
+ 3345054270084049972ull, 6094790863235890799ull}},
+{{5124943204869868339ull, 2966469260063737523ull,
+ 18016375892887226177ull, 7618488579044863498ull}},
+{{897246493829973760ull, 13383258333608305712ull,
+ 15871920951481904264ull, 4761555361903039686ull}},
+{{1121558117287467200ull, 16729072917010382140ull,
+ 10616529152497604522ull, 5951944202378799608ull}},
+{{1401947646609334000ull, 11687969109408201867ull,
+ 13270661440622005653ull, 7439930252973499510ull}},
+{{17017118343626691414ull, 9610823702593820118ull,
+ 3682477381961365629ull, 4649956408108437194ull}},
+{{12048025892678588460ull, 16625215646669663052ull,
+ 13826468764306482844ull, 5812445510135546492ull}},
+{{15060032365848235574ull, 2334775484627527199ull,
+ 17283085955383103556ull, 7265556887669433115ull}},
+{{14213354438882906564ull, 2918469355784408999ull,
+ 16992171425801491541ull, 9081946109586791394ull}},
+{{15800875551942898459ull, 4129886356578949576ull,
+ 15231793159553320117ull, 5676216318491744621ull}},
+{{1304350366219071457ull, 9774043964151074875ull,
+ 5204683394159486434ull, 7095270398114680777ull}},
+{{15465496013056003033ull, 2994182918334067785ull,
+ 11117540261126745947ull, 8869087997643350971ull}},
+{{2748405980518920040ull, 18012265388454650030ull,
+ 4642619653990522264ull, 5543179998527094357ull}},
+{{12658879512503425858ull, 4068587661858760921ull,
+ 10414960585915540735ull, 6928974998158867946ull}},
+{{1988541335347118610ull, 474048558896063248ull, 3795328695539650111ull,
+ 8661218747698584933ull}},
+{{1242838334591949132ull, 7213809376951121386ull,
+ 4677923443925975271ull, 5413261717311615583ull}},
+{{10776919955094712222ull, 4405575702761513828ull,
+ 1235718286480081185ull, 6766577146639519479ull}},
+{{13471149943868390278ull, 10118655646879280189ull,
+ 15379705913382265193ull, 8458221433299399348ull}},
+{{10725311724131437876ull, 17853374825368019878ull,
+ 388944159009139937ull, 5286388395812124593ull}},
+{{4183267618309521537ull, 8481660476427861136ull,
+ 5097866217188812826ull, 6607985494765155741ull}},
+{{5229084522886901921ull, 1378703558680050612ull,
+ 10984018789913403937ull, 8259981868456444676ull}},
+{{12491549863659089509ull, 12390904770243501392ull,
+ 16088383780550653268ull, 5162488667785277922ull}},
+{{15614437329573861886ull, 15488630962804376740ull,
+ 10887107688833540777ull, 6453110834731597403ull}},
+{{1071302588257775741ull, 5525730648223307214ull,
+ 8997198592614538068ull, 8066388543414496754ull}},
+{{14504622172943273550ull, 12676953691994342816ull,
+ 10234935138811474196ull, 5041492839634060471ull}},
+{{18130777716179091938ull, 15846192114992928520ull,
+ 8181982905086954841ull, 6301866049542575589ull}},
+{{4216728071514313306ull, 5972682088458996939ull,
+ 14839164649786081456ull, 7877332561928219486ull}},
+{{329612035482751864ull, 3732926305286873087ull, 4662791887688913006ull,
+ 4923332851205137179ull}},
+{{14247073099635603542ull, 13889529918463367166ull,
+ 1216803841183753353ull, 6154166064006421474ull}},
+{{8585469337689728620ull, 3526854342797045246ull,
+ 10744376838334467500ull, 7692707580008026842ull}},
+{{754232317628692484ull, 11427656001102929087ull,
+ 11326921542386430091ull, 4807942237505016776ull}},
+{{14777848452318029316ull, 9672883982951273454ull,
+ 14158651927983037614ull, 6009927796881270970ull}},
+{{9248938528542760837ull, 2867732941834316010ull,
+ 8474942873124021210ull, 7512409746101588713ull}},
+{{10392272598766613428ull, 6404019107073835410ull,
+ 16826054341770983016ull, 4695256091313492945ull}},
+{{3766968711603490976ull, 8005023883842294263ull,
+ 7197509871931565058ull, 5869070114141866182ull}},
+{{97024871076975816ull, 782907817948092021ull, 18220259376769232131ull,
+ 7336337642677332727ull}},
+{{4732967107273607674ull, 14813692827717278738ull,
+ 18163638202534152259ull, 9170422053346665909ull}},
+{{7569790460473392701ull, 6952715008109605259ull,
+ 13658116885797539114ull, 5731513783341666193ull}},
+{{4850552057164352972ull, 17914265796991782382ull,
+ 3237588051964760180ull, 7164392229177082742ull}},
+{{15286562108310217022ull, 3946088172530176361ull,
+ 13270357101810726034ull, 8955490286471353427ull}},
+{{2636572290052803783ull, 7077991126258748130ull,
+ 5988130179418009819ull, 5597181429044595892ull}},
+{{12519087399420780537ull, 4235802889396047258ull,
+ 7485162724272512274ull, 6996476786305744865ull}},
+{{6425487212421199863ull, 14518125648599834881ull,
+ 13968139423768028246ull, 8745595982882181081ull}},
+{{15545144553831719674ull, 4462142511947508896ull,
+ 1812558112213935798ull, 5465997489301363176ull}},
+{{984686618580097977ull, 14801050176789161929ull,
+ 2265697640267419747ull, 6832496861626703970ull}},
+{{5842544291652510375ull, 13889626702559064507ull,
+ 12055494087189050492ull, 8540621077033379962ull}},
+{{1345747173069125033ull, 17904388725954191125ull,
+ 12146369822920544461ull, 5337888173145862476ull}},
+{{6293869984763794195ull, 8545427852160575194ull,
+ 15182962278650680577ull, 6672360216432328095ull}},
+{{17090709517809518551ull, 15293470833628106896ull,
+ 14367016829885962817ull, 8340450270540410119ull}},
+{{10681693448630949095ull, 2640890243376484954ull,
+ 15896914546319808617ull, 5212781419087756324ull}},
+{{4128744773933910560ull, 7912798822647994097ull,
+ 1424399109190209155ull, 6515976773859695406ull}},
+{{9772616985844776104ull, 5279312509882604717ull,
+ 11003870923342537252ull, 8144970967324619257ull}},
+{{8413728625366679017ull, 12522942355531403756ull,
+ 18406634373157555542ull, 5090606854577887035ull}},
+{{10517160781708348771ull, 6430305907559478887ull,
+ 18396606948019556524ull, 6363258568222358794ull}},
+{{8534764958708048060ull, 8037882384449348609ull,
+ 13772386648169669847ull, 7954073210277948493ull}},
+{{16863443145260999798ull, 11941205517921924736ull,
+ 10913584664319737606ull, 4971295756423717808ull}},
+{{2632559857866698131ull, 5703134860547630113ull,
+ 13641980830399672008ull, 6214119695529647260ull}},
+{{7902385840760760568ull, 7128918575684537641ull,
+ 17052476037999590010ull, 7767649619412059075ull}},
+{{16468206196543945115ull, 9067260128230223929ull,
+ 8351954514536049804ull, 4854781012132536922ull}},
+{{6750199690397767682ull, 11334075160287779912ull,
+ 1216571106315286447ull, 6068476265165671153ull}},
+{{8437749612997209602ull, 9555907931932336986ull,
+ 6132399901321495963ull, 7585595331457088941ull}},
+{{9885279526550643905ull, 3666599448244016664ull,
+ 6138592947539628929ull, 4740997082160680588ull}},
+{{12356599408188304882ull, 9194935328732408734ull,
+ 7673241184424536161ull, 5926246352700850735ull}},
+{{6222377223380605294ull, 16105355179342898822ull,
+ 4979865462103282297ull, 7407807940876063419ull}},
+{{17724043819895042021ull, 3148317959448229907ull,
+ 806572904600857484ull, 4629879963047539637ull}},
+{{17543368756441414622ull, 3935397449310287384ull,
+ 5619902149178459759ull, 5787349953809424546ull}},
+{{3482466871842216661ull, 307560793210471327ull,
+ 16248249723327850507ull, 7234187442261780682ull}},
+{{18188141645084934539ull, 14219509046795252870ull,
+ 11086940117305037325ull, 9042734302827225853ull}},
+{{6755902509750696183ull, 11193036163460726996ull,
+ 9235180582529342280ull, 5651708939267016158ull}},
+{{8444878137188370228ull, 13991295204325908745ull,
+ 2320603691306902042ull, 7064636174083770198ull}},
+{{15167783689912850689ull, 8265746968552610123ull,
+ 12124126650988403361ull, 8830795217604712747ull}},
+{{7174021796981837729ull, 16695306901413851087ull,
+ 5271736147654058148ull, 5519247011002945467ull}},
+{{4355841227799909257ull, 2422389553057762243ull,
+ 1977984166140184782ull, 6899058763753681834ull}},
+{{833115516322498667ull, 12251358978176978612ull,
+ 11695852244530006785ull, 8623823454692102292ull}},
+{{9744069234556337475ull, 739570333719529776ull,
+ 16533279689686030049ull, 5389889659182563932ull}},
+{{12180086543195421844ull, 5536148935576800124ull,
+ 2219855538397985945ull, 6737362073978204916ull}},
+{{15225108178994277305ull, 11531872187898388059ull,
+ 2774819422997482431ull, 8421702592472756145ull}},
+{{7209849602657729364ull, 14124949145077574393ull,
+ 13263477185441896279ull, 5263564120295472590ull}},
+{{13623998021749549609ull, 13044500412919580087ull,
+ 7355974444947594541ull, 6579455150369340738ull}},
+{{12418311508759549107ull, 2470567460867311397ull,
+ 18418340093039268985ull, 8224318937961675922ull}},
+{{10067287702188412144ull, 13073319709110539383ull,
+ 16123148576576931019ull, 5140199336226047451ull}},
+{{7972423609308127276ull, 11729963617960786325ull,
+ 15542249702293775870ull, 6425249170282559314ull}},
+{{14577215530062546998ull, 5439082485596207098ull,
+ 10204440091012444030ull, 8031561462853199143ull}},
+{{13722445724716479778ull, 17234484608779793148ull,
+ 13295304084523859374ull, 5019725914283249464ull}},
+{{17153057155895599723ull, 12319733724119965627ull,
+ 16619130105654824218ull, 6274657392854061830ull}},
+{{16829635426442111749ull, 6176295118295181226ull,
+ 11550540595213754465ull, 7843321741067577288ull}},
+{{15130208159953707747ull, 15389399495002958026ull,
+ 7219087872008596540ull, 4902076088167235805ull}},
+{{9689388163087358876ull, 790005295044145917ull,
+ 13635545858438133580ull, 6127595110209044756ull}},
+{{16723421222286586499ull, 987506618805182396ull,
+ 17044432323047666975ull, 7659493887761305945ull}},
+{{1228766227074340754ull, 7534720664394320854ull,
+ 3735241174263710003ull, 4787183679850816216ull}},
+{{10759329820697701750ull, 4806714812065513163ull,
+ 4669051467829637504ull, 5983979599813520270ull}},
+{{8837476257444739284ull, 6008393515081891454ull,
+ 15059686371641822688ull, 7479974499766900337ull}},
+{{911736642475574149ull, 3755245946926182159ull, 2494774954635057324ull,
+ 4674984062354312711ull}},
+{{14974728858376631398ull, 4694057433657727698ull,
+ 16953526748575985367ull, 5843730077942890888ull}},
+{{9495039036116013439ull, 1255885773644771719ull,
+ 2745164362010430093ull, 7304662597428613611ull}},
+{{7257112776717628895ull, 6181543235483352553ull,
+ 17266513507795201328ull, 9130828246785767013ull}},
+{{16064910531516987819ull, 3863464522177095345ull,
+ 13097413951585694782ull, 5706767654241104383ull}},
+{{6246080109114071062ull, 14052702689576144990ull,
+ 11760081421054730573ull, 7133459567801380479ull}},
+{{17030972173247364635ull, 3730820306688017525ull,
+ 10088415757891025313ull, 8916824459751725599ull}},
+{{12950200617493296849ull, 13860977737748480713ull,
+ 13222788876322972676ull, 5573015287344828499ull}},
+{{2352692716584457350ull, 17326222172185600892ull,
+ 11916800076976327941ull, 6966269109181035624ull}},
+{{2940865895730571687ull, 7822719659949837403ull,
+ 14896000096220409927ull, 8707836386476294530ull}},
+{{17978942249327464968ull, 11806728815109730232ull,
+ 13921686078565144108ull, 5442397741547684081ull}},
+{{4026933737949779594ull, 14758411018887162791ull,
+ 3567049542924266423ull, 6802997176934605102ull}},
+{{421981154009836589ull, 13836327755181565585ull,
+ 13682183965510108837ull, 8503746471168256377ull}},
+{{11792953267324617628ull, 10953547856202172442ull,
+ 1633835950802736167ull, 5314841544480160236ull}},
+{{5517819547300996227ull, 9080248801825327649ull,
+ 2042294938503420209ull, 6643551930600200295ull}},
+{{11508960452553633188ull, 15961997020709047465ull,
+ 16387926728411438973ull, 8304439913250250368ull}},
+{{275571255204938887ull, 12282091147156848618ull,
+ 10242454205257149358ull, 5190274945781406480ull}},
+{{9567836105860949416ull, 6129241897091284964ull,
+ 12803067756571436698ull, 6487843682226758100ull}},
+{{11959795132326186770ull, 16884924408218882013ull,
+ 16003834695714295872ull, 8109804602783447625ull}},
+{{9780714966917560683ull, 10553077755136801258ull,
+ 3084867657180353064ull, 5068627876739654766ull}},
+{{3002521671792175046ull, 13191347193921001573ull,
+ 13079456608330217138ull, 6335784845924568457ull}},
+{{8364838108167606712ull, 7265811955546476158ull,
+ 2514262705130607711ull, 7919731057405710572ull}},
+{{616337799177366291ull, 11458661499857629455ull,
+ 10794786227561405627ull, 4949831910878569107ull}},
+{{14605480304253871576ull, 9711640856394648914ull,
+ 8881796766024369130ull, 6187289888598211384ull}},
+{{9033478343462563661ull, 2916179033638535335ull,
+ 11102245957530461413ull, 7734112360747764230ull}},
+{{12563452992305184145ull, 4128454905237778536ull,
+ 2327217705029150479ull, 4833820225467352644ull}},
+{{15704316240381480181ull, 548882613119835266ull,
+ 2909022131286438099ull, 6042275281834190805ull}},
+{{10407023263622074418ull, 14521161321681957795ull,
+ 8247963682535435527ull, 7552844102292738506ull}},
+{{4198546530550102559ull, 15993254853692305478ull,
+ 9766663320012035108ull, 4720527563932961566ull}},
+{{14471555200042404007ull, 1544824493405830231ull,
+ 2984957113160268078ull, 5900659454916201958ull}},
+{{13477757981625617104ull, 11154402653612063597ull,
+ 12954568428305110905ull, 7375824318645252447ull}},
+{{3012139421749857668ull, 107945261732915785ull,
+ 11581524516954000728ull, 9219780398306565559ull}},
+{{13411802184662130803ull, 67465788583072365ull,
+ 14155981850737332311ull, 5762362748941603474ull}},
+{{2929694675545499791ull, 13919390291011004169ull,
+ 8471605276566889580ull, 7202953436177004343ull}},
+{{8273804362859262643ull, 17399237863763755211ull,
+ 5977820577281224071ull, 9003691795221255429ull}},
+{{2865284717573345200ull, 17792052692493428863ull,
+ 6041980870014458996ull, 5627307372013284643ull}},
+{{17416663952248845212ull, 3793321791907234462ull,
+ 2940790069090685842ull, 7034134215016605804ull}},
+{{12547457903456280707ull, 13965024276738818886ull,
+ 3675987586363357302ull, 8792667768770757255ull}},
+{{3230475171232787538ull, 4116454154534373900ull,
+ 9215021269118180170ull, 5495417355481723284ull}},
+{{4038093964040984422ull, 14368939730022743183ull,
+ 11518776586397725212ull, 6869271694352154105ull}},
+{{435931436623842624ull, 17961174662528428979ull, 563412677714992803ull,
+ 8586589617940192632ull}},
+{{16413358212385759304ull, 8919891154866574159ull,
+ 352132923571870502ull, 5366618511212620395ull}},
+{{15905011747054811226ull, 1926491906728441891ull,
+ 14275224209747001840ull, 6708273139015775493ull}},
+{{15269578665391126128ull, 2408114883410552364ull,
+ 4008972206901588588ull, 8385341423769719367ull}},
+{{320114629014678022ull, 10728443838986371036ull,
+ 9423136656954574723ull, 5240838389856074604ull}},
+{{400143286268347528ull, 8798868780305575891ull,
+ 11778920821193218404ull, 6551047987320093255ull}},
+{{14335237163117598122ull, 10998585975381969863ull,
+ 10111965008064135101ull, 8188809984150116569ull}},
+{{15877052254589580682ull, 9179959243827425116ull,
+ 17849193176108554198ull, 5118006240093822855ull}},
+{{1399571244527424237ull, 2251577017929505588ull,
+ 17699805451708304844ull, 6397507800117278569ull}},
+{{1749464055659280296ull, 2814471272411881985ull,
+ 8289698759353217343ull, 7996884750146598212ull}},
+{{12622630080855519945ull, 8676573572898508096ull,
+ 14404433761450536647ull, 4998052968841623882ull}},
+{{15778287601069399931ull, 6234030947695747216ull,
+ 8782170164958395001ull, 6247566211052029853ull}},
+{{1276115427627198298ull, 12404224703047071925ull,
+ 15589398724625381655ull, 7809457763815037316ull}},
+{{3103415151480692888ull, 14670169467045501809ull,
+ 520002166036087726ull, 4880911102384398323ull}},
+{{8490954957778254014ull, 9114339796952101453ull,
+ 14485060762827273370ull, 6101138877980497903ull}},
+{{15225379715650205422ull, 2169552709335351008ull,
+ 13494639935106703809ull, 7626423597475622379ull}},
+{{9515862322281378389ull, 12885185489403064140ull,
+ 6128306950227995928ull, 4766514748422263987ull}},
+{{11894827902851722986ull, 16106481861753830175ull,
+ 3048697669357607006ull, 5958143435527829984ull}},
+{{10256848860137265828ull, 10909730290337511911ull,
+ 3810872086697008758ull, 7447679294409787480ull}},
+{{13328059565226872999ull, 2206895413033557040ull,
+ 2381795054185630474ull, 4654799559006117175ull}},
+{{16660074456533591248ull, 11981991303146722108ull,
+ 16812301873014201804ull, 5818499448757646468ull}},
+{{2378348996957437444ull, 14977489128933402636ull,
+ 2568633267558200639ull, 7273124310947058086ull}},
+{{2972936246196796805ull, 14110175392739365391ull,
+ 12434163621302526607ull, 9091405388683822607ull}},
+{{8775614181514079860ull, 15736388648103185225ull,
+ 14688881290955160985ull, 5682128367927389129ull}},
+{{15581203745319987728ull, 5835427754846817819ull,
+ 4526043558411787520ull, 7102660459909236412ull}},
+{{14864818663222596756ull, 7294284693558522274ull,
+ 5657554448014734400ull, 8878325574886545515ull}},
+{{13902197682941510877ull, 4558927933474076421ull,
+ 1230128520795515048ull, 5548953484304090947ull}},
+{{3542689048394724884ull, 5698659916842595527ull,
+ 15372718706276557522ull, 6936191855380113683ull}},
+{{18263419365775569817ull, 16346696932908020216ull,
+ 14604212364418308998ull, 8670239819225142104ull}},
+{{11414637103609731136ull, 5604999564640124731ull,
+ 9127632727761443124ull, 5418899887015713815ull}},
+{{9656610361084776016ull, 7006249455800155914ull,
+ 6797854891274416001ull, 6773624858769642269ull}},
+{{2847390914501194211ull, 13369497838177582797ull,
+ 13109004632520407905ull, 8467031073462052836ull}},
+{{4085462330776940334ull, 1438407121219907392ull,
+ 17416499932180030749ull, 5291894420913783022ull}},
+{{5106827913471175418ull, 6409694919952272144ull,
+ 12547252878370262628ull, 6614868026142228778ull}},
+{{6383534891838969272ull, 8012118649940340180ull,
+ 6460694061108052477ull, 8268585032677785973ull}},
+{{13213081344254131603ull, 7313417165426406564ull,
+ 6343776797406226750ull, 5167865645423616233ull}},
+{{16516351680317664504ull, 18365143493637784013ull,
+ 12541407015185171341ull, 6459832056779520291ull}},
+{{6810381545114916918ull, 9121371311765066305ull,
+ 11065072750554076273ull, 8074790070974400364ull}},
+{{15785703511765292834ull, 17230072115921636200ull,
+ 16139042505951073478ull, 5046743794359000227ull}},
+{{1285385315997064426ull, 12314218108047269443ull,
+ 15562117114011453944ull, 6308429742948750284ull}},
+{{15441789700278494244ull, 15392772635059086803ull,
+ 1005902318804765814ull, 7885537178685937856ull}},
+{{7345275553460364951ull, 5008796878484541348ull, 628688949252978634ull,
+ 4928460736678711160ull}},
+{{9181594441825456189ull, 15484368134960452493ull,
+ 785861186566223292ull, 6160575920848388950ull}},
+{{16088679070709208140ull, 908716094991014000ull,
+ 10205698520062554924ull, 7700719901060486187ull}},
+{{10055424419193255087ull, 9791319596224159558ull,
+ 4072718565825402875ull, 4812949938162803867ull}},
+{{3345908487136793051ull, 7627463476852811544ull, 479212188854365690ull,
+ 6016187422703504834ull}},
+{{4182385608920991314ull, 310957309211238622ull, 9822387272922732921ull,
+ 7520234278379381042ull}},
+{{16449049060857783283ull, 11723563364325493898ull,
+ 10750678064004095979ull, 4700146423987113151ull}},
+{{11337939289217453296ull, 10042768186979479469ull,
+ 8826661561577732070ull, 5875183029983891439ull}},
+{{337366056239652908ull, 3330088196869573529ull, 6421640933544777184ull,
+ 7343978787479864299ull}},
+{{5033393588726954039ull, 4162610246086966911ull,
+ 3415365148503583576ull, 9179973484349830374ull}},
+{{10063400020595428130ull, 2601631403804354319ull,
+ 15969661273096903447ull, 5737483427718643983ull}},
+{{7967564007316897259ull, 17087097310037606611ull,
+ 15350390572943741404ull, 7171854284648304979ull}},
+{{5347768990718733670ull, 2912127563837456648ull,
+ 14576302197752288852ull, 8964817855810381224ull}},
+{{3342355619199208544ull, 11043451764253186213ull,
+ 9110188873595180532ull, 5603011159881488265ull}},
+{{8789630542426398583ull, 13804314705316482766ull,
+ 15999422110421363569ull, 7003763949851860331ull}},
+{{1763666141178222421ull, 3420335326363439746ull,
+ 15387591619599316558ull, 8754704937314825414ull}},
+{{5713977356663776917ull, 15972767634259313553ull,
+ 5005558743822184944ull, 5471690585821765884ull}},
+{{11754157714257109051ull, 1519215469114590325ull,
+ 6256948429777731181ull, 6839613232277207355ull}},
+{{857639087539222601ull, 6510705354820625811ull, 3209499518794776072ull,
+ 8549516540346509194ull}},
+{{16676925494207871790ull, 4069190846762891131ull,
+ 6617623217674122949ull, 5343447837716568246ull}},
+{{16234470849332451833ull, 9698174576881001818ull,
+ 17495401058947429494ull, 6679309797145710307ull}},
+{{11069716524810788983ull, 2899346184246476465ull,
+ 17257565305256898964ull, 8349137246432137884ull}},
+{{1043800365661259ull, 11035463402008823599ull, 1562606278930786044ull,
+ 5218210779020086178ull}},
+{{13836362805739240285ull, 13794329252511029498ull,
+ 11176629885518258363ull, 6522763473775107722ull}},
+{{8072081470319274549ull, 12631225547211398969ull,
+ 4747415320043047146ull, 8153454342218884653ull}},
+{{16574265965018016353ull, 12506201985434512259ull,
+ 5272977584240598418ull, 5095908963886802908ull}},
+{{16106146437845132537ull, 6409380444938364516ull,
+ 6591221980300748023ull, 6369886204858503635ull}},
+{{1685938973596864055ull, 3400039537745567742ull,
+ 3627341456948547125ull, 7962357756073129544ull}},
+{{14888769913780203747ull, 4430867720304673790ull,
+ 2267088410592841953ull, 4976473597545705965ull}},
+{{9387590355370478875ull, 10150270668808230142ull,
+ 7445546531668440345ull, 6220591996932132456ull}},
+{{2511115907358322786ull, 17299524354437675582ull,
+ 9306933164585550431ull, 7775739996165165570ull}},
+{{15404505497381115454ull, 17729731749164629094ull,
+ 10428519246293356923ull, 4859837497603228481ull}},
+{{10032259834871618509ull, 17550478668028398464ull,
+ 17647335076294084058ull, 6074796872004035601ull}},
+{{12540324793589523136ull, 12714726298180722272ull,
+ 8224110790085441361ull, 7593496090005044502ull}},
+{{7837702995993451960ull, 1029174908721869564ull, 528383225376012947ull,
+ 4745935056253152814ull}},
+{{9797128744991814950ull, 15121526691184500667ull,
+ 9883851068574791991ull, 5932418820316441017ull}},
+{{7634724912812380783ull, 14290222345553237930ull,
+ 16966499854145877893ull, 7415523525395551271ull}},
+{{9383389088935125894ull, 11237231975184467658ull,
+ 17521591436482255539ull, 4634702203372219544ull}},
+{{2505864324314131559ull, 9434853950553196669ull,
+ 3455245221893267808ull, 5793377754215274431ull}},
+{{7744016423820052353ull, 11793567438191495836ull,
+ 18154114582648748472ull, 7241722192769093038ull}},
+{{9680020529775065441ull, 14741959297739369795ull,
+ 13469271191456159782ull, 9052152740961366298ull}},
+{{3744169821895721949ull, 4602038542659718218ull,
+ 13029980513087487768ull, 5657595463100853936ull}},
+{{13903584314224428244ull, 5752548178324647772ull,
+ 16287475641359359710ull, 7071994328876067420ull}},
+{{17379480392780535305ull, 16414057259760585523ull,
+ 1912600477989648021ull, 8839992911095084276ull}},
+{{8556332236274140614ull, 12564628796564059904ull,
+ 10418747335598305821ull, 5524995569434427672ull}},
+{{10695415295342675767ull, 1870727940422911168ull,
+ 13023434169497882277ull, 6906244461793034590ull}},
+{{13369269119178344708ull, 6950095943956026864ull,
+ 7055920675017577038ull, 8632805577241293238ull}},
+{{8355793199486465443ull, 18178868020254680502ull,
+ 18245008477168149360ull, 5395503485775808273ull}},
+{{1221369462503305996ull, 4276840951608799012ull,
+ 8971202541178022989ull, 6744379357219760342ull}},
+{{1526711828129132494ull, 9957737207938386669ull,
+ 1990631139617752928ull, 8430474196524700428ull}},
+{{3260037901794401761ull, 6223585754961491668ull,
+ 10467516499115871388ull, 5269046372827937767ull}},
+{{4075047377243002201ull, 7779482193701864585ull,
+ 8472709605467451331ull, 6586307966034922209ull}},
+{{9705495239981140656ull, 5112666723699942827ull,
+ 15202573025261702068ull, 8232884957543652761ull}},
+{{3760091515774518958ull, 12418788739167240075ull,
+ 2584079113147481936ull, 5145553098464782976ull}},
+{{88428376290760793ull, 15523485923959050094ull, 3230098891434352420ull,
+ 6431941373080978720ull}},
+{{9333907507218226799ull, 957613331239261001ull, 4037623614292940526ull,
+ 8039926716351223400ull}},
+{{17362907238079861510ull, 14433566387306701837ull,
+ 2523514758933087828ull, 5024954197719514625ull}},
+{{7868575992317663175ull, 18041957984133377297ull,
+ 7766079467093747689ull, 6281192747149393281ull}},
+{{14447406008824466873ull, 8717389424884557909ull,
+ 14319285352294572516ull, 7851490933936741601ull}},
+{{11335471764728985748ull, 14671740427407624501ull,
+ 2032024317543025966ull, 4907181833710463501ull}},
+{{334281650629068472ull, 9116303497404754819ull, 7151716415356170362ull,
+ 6133977292138079376ull}},
+{{14252910118568499302ull, 2172007334901167715ull,
+ 8939645519195212953ull, 7667471615172599220ull}},
+{{6602225814891618112ull, 12886719630381699582ull,
+ 14810650486351783903ull, 4792169759482874512ull}},
+{{17476154305469298448ull, 11496713519549736573ull,
+ 66569034230178263ull, 5990212199353593141ull}},
+{{8010134826554459348ull, 9759205881009782813ull,
+ 4694897311215110733ull, 7487765249191991426ull}},
+{{7312177275810231045ull, 8405346684844808210ull,
+ 7545996837936832112ull, 4679853280744994641ull}},
+{{18363593631617564614ull, 10506683356056010262ull,
+ 14044182065848428044ull, 5849816600931243301ull}},
+{{13731120002667179959ull, 13133354195070012828ull,
+ 3720169527028371343ull, 7312270751164054127ull}},
+{{17163900003333974949ull, 11805006725410128131ull,
+ 38525890358076275ull, 9140338438955067659ull}},
+{{8421594492870040391ull, 5072286194167636130ull,
+ 16164979745969655336ull, 5712711524346917286ull}},
+{{1303621079232774681ull, 6340357742709545163ull,
+ 10982852645607293362ull, 7140889405433646608ull}},
+{{15464584404323132063ull, 17148819215241707261ull,
+ 13728565807009116702ull, 8926111756792058260ull}},
+{{11971208261915651492ull, 6106325991098679134ull,
+ 17803725666235473747ull, 5578819847995036412ull}},
+{{5740638290539788556ull, 3021221470445961014ull,
+ 3807913009084790568ull, 6973524809993795516ull}},
+{{16399169900029511503ull, 3776526838057451267ull,
+ 4759891261355988210ull, 8716906012492244395ull}},
+{{7943638178304750738ull, 6972015292213294946ull, 669089029133798679ull,
+ 5448066257807652747ull}},
+{{706175686026162614ull, 4103333096839230779ull,
+ 14671419341699412061ull, 6810082822259565933ull}},
+{{14717777662814866979ull, 9740852389476426377ull,
+ 4504216121842101364ull, 8512603527824457417ull}},
+{{2281082011618210006ull, 15311404780277542294ull,
+ 14344350122219783112ull, 5320377204890285885ull}},
+{{12074724551377538316ull, 692511901637376251ull,
+ 4095379597492565179ull, 6650471506112857357ull}},
+{{10481719670794534991ull, 14700697932328884026ull,
+ 9730910515293094377ull, 8313089382641071696ull}},
+{{11162760812673972273ull, 2270407180064470660ull,
+ 6081819072058183986ull, 5195680864150669810ull}},
+{{13953451015842465341ull, 12061381011935364133ull,
+ 16825645876927505790ull, 6494601080188337262ull}},
+{{3606755714520917965ull, 5853354228064429359ull,
+ 11808685309304606430ull, 8118251350235421578ull}},
+{{9171751349216655584ull, 17493404447822432061ull,
+ 11992114336742766922ull, 5073907093897138486ull}},
+{{16076375204948207384ull, 12643383522923264268ull,
+ 5766770884073682845ull, 6342383867371423108ull}},
+{{1648724932475707614ull, 1969171348371916624ull,
+ 7208463605092103557ull, 7927979834214278885ull}},
+{{1030453082797317259ull, 3536575101946141842ull,
+ 6811132762396258675ull, 4954987396383924303ull}},
+{{10511438390351422382ull, 18255776932714841014ull,
+ 3902229934567935439ull, 6193734245479905379ull}},
+{{3915925951084502169ull, 18208035147466163364ull,
+ 266101399782531395ull, 7742167806849881724ull}},
+{{11670825756282589664ull, 9074178957952658150ull,
+ 9389685411718857930ull, 4838854879281176077ull}},
+{{5365160158498461271ull, 2119351660586046880ull,
+ 16348792783075960317ull, 6048568599101470096ull}},
+{{6706450198123076589ull, 7260875594159946504ull,
+ 1989246905135398780ull, 7560710748876837621ull}},
+{{4191531373826922868ull, 13761419283204742373ull,
+ 3549122324923318189ull, 4725444218048023513ull}},
+{{9851100235711041489ull, 3366716048723764254ull,
+ 9048088924581535641ull, 5906805272560029391ull}},
+{{3090503257784026054ull, 8820081079332093222ull,
+ 6698425137299531647ull, 7383506590700036739ull}},
+{{15766622591397179996ull, 12430079702223640119ull,
+ 1880672701598513327ull, 4614691619187522962ull}},
+{{15096592220819087091ull, 10925913609352162245ull,
+ 11574212913852917467ull, 5768364523984403702ull}},
+{{5035682220741695151ull, 9045705993262814903ull,
+ 5244394105461371026ull, 7210455654980504628ull}},
+{{1682916757499731035ull, 2083760454723742821ull,
+ 6555492631826713783ull, 9013069568725630785ull}},
+{{3357665982651025849ull, 8219879311843421119ull,
+ 15626397940960165874ull, 5633168480453519240ull}},
+{{18032140533595946023ull, 1051477102949500590ull,
+ 1086253352490655727ull, 7041460600566899051ull}},
+{{13316803630140156721ull, 15149404433969039450ull,
+ 15192874745895483370ull, 8801825750708623813ull}},
+{{12934688287264985855ull, 14080063789658037560ull,
+ 11801389725398371058ull, 5501141094192889883ull}},
+{{16168360359081232318ull, 8376707700217771142ull,
+ 10140051138320575919ull, 6876426367741112354ull}},
+{{10987078411996764589ull, 5859198606844826024ull,
+ 3451691886045944091ull, 8595532959676390443ull}},
+{{6866924007497977869ull, 1356156120064322313ull,
+ 18298208493274572721ull, 5372208099797744026ull}},
+{{13195341027799860240ull, 6306881168507790795ull,
+ 13649388579738440093ull, 6715260124747180033ull}},
+{{11882490266322437395ull, 12495287479062126398ull,
+ 3226677669390886404ull, 8394075155933975042ull}},
+{{2814870398024135468ull, 17032926711268604807ull,
+ 6628359561796691906ull, 5246296972458734401ull}},
+{{17353646052812333047ull, 12067786352230980200ull,
+ 12897135470673252787ull, 6557871215573418001ull}},
+{{3245313492305864693ull, 10473046921861337347ull,
+ 2286361283059402272ull, 8197339019466772502ull}},
+{{18169221997187023097ull, 6545654326163335841ull,
+ 15264033857194290132ull, 5123336887166732813ull}},
+{{8876469441201615159ull, 8182067907704169802ull,
+ 5244984266210698953ull, 6404171108958416017ull}},
+{{1872214764647243141ull, 14839270903057600157ull,
+ 11167916351190761595ull, 8005213886198020021ull}},
+{{3475977237118220915ull, 6968701305197306146ull,
+ 9285790728707919949ull, 5003258678873762513ull}},
+{{13568343583252551952ull, 13322562649924020586ull,
+ 16218924429312287840ull, 6254073348592203141ull}},
+{{7737057442210914132ull, 16653203312405025733ull,
+ 6438597481358196088ull, 7817591685740253927ull}},
+{{7141503910595515285ull, 10408252070253141083ull,
+ 10941652453489954411ull, 4885994803587658704ull}},
+{{4315193869817006202ull, 8398629069389038450ull,
+ 13677065566862443014ull, 6107493504484573380ull}},
+{{14617364374126033560ull, 1274914299881522254ull,
+ 17096331958578053768ull, 7634366880605716725ull}},
+{{4524166715401383071ull, 796821437425951409ull,
+ 12991050483324977557ull, 4771479300378572953ull}},
+{{10266894412679116743ull, 5607712815209827165ull,
+ 2403755048874058234ull, 5964349125473216192ull}},
+{{17445304034276283833ull, 16233013055867059764ull,
+ 3004693811092572792ull, 7455436406841520240ull}},
+{{1679942984567901588ull, 10145633159916912353ull,
+ 1877933631932857995ull, 4659647754275950150ull}},
+{{6711614749137264888ull, 8070355431468752537ull,
+ 11570789076770848302ull, 5824559692844937687ull}},
+{{13001204454848969014ull, 864572252481164863ull,
+ 9851800327536172474ull, 7280699616056172109ull}},
+{{11639819550133823364ull, 10304087352456231887ull,
+ 16926436427847603496ull, 9100874520070215136ull}},
+{{14192416246474721458ull, 6440054595285144929ull,
+ 10579022767404752185ull, 5688046575043884460ull}},
+{{3905462252811238111ull, 12661754262533819066ull,
+ 13223778459255940231ull, 7110058218804855575ull}},
+{{14105199852868823447ull, 11215506809739885928ull,
+ 11918037055642537385ull, 8887572773506069469ull}},
+{{8815749908043014654ull, 92162728446346849ull, 9754616168990279818ull,
+ 5554732983441293418ull}},
+{{15631373403481156222ull, 9338575447412709369ull,
+ 2969898174383073964ull, 6943416229301616773ull}},
+{{5704158699069281565ull, 11673219309265886712ull,
+ 8324058736406230359ull, 8679270286627020966ull}},
+{{3565099186918300978ull, 14213291095932261051ull,
+ 590850691826506070ull, 5424543929141888104ull}},
+{{18291432038930039935ull, 8543241833060550505ull,
+ 738563364783132588ull, 6780679911427360130ull}},
+{{9029231993380386206ull, 10679052291325688132ull,
+ 10146576242833691543ull, 8475849889284200162ull}},
+{{14866642032717517187ull, 13591936709719636938ull,
+ 10953296170198445118ull, 5297406180802625101ull}},
+{{9359930504042120676ull, 7766548850294770365ull,
+ 18303306231175444302ull, 6621757726003281376ull}},
+{{16311599148480038749ull, 484814026013687148ull,
+ 4432388715259753762ull, 8277197157504101721ull}},
+{{971377430945248410ull, 4914694784685942372ull,
+ 14299457993105815861ull, 5173248223440063575ull}},
+{{1214221788681560513ull, 10755054499284815869ull,
+ 13262636472954881922ull, 6466560279300079469ull}},
+{{6129463254279338545ull, 4220446087251244028ull,
+ 2743237535911438691ull, 8083200349125099337ull}},
+{{13054286570779362399ull, 331935795318333565ull,
+ 13243738506013118942ull, 5052000218203187085ull}},
+{{2482800158192039286ull, 9638291781002692765ull,
+ 2719615077234234965ull, 6315000272753983857ull}},
+{{7715186216167437011ull, 16659550744680753860ull,
+ 8011204864970181610ull, 7893750340942479821ull}},
+{{14045363421959423940ull, 15023905233852859066ull,
+ 7312846049820057458ull, 4933593963089049888ull}},
+{{8333332240594504117ull, 9556509505461298025ull,
+ 9141057562275071823ull, 6166992453861312360ull}},
+{{15028351319170518051ull, 7333950863399234627ull,
+ 11426321952843839779ull, 7708740567326640450ull}},
+{{7086876565267879830ull, 2277876280410827690ull,
+ 11753137238954787766ull, 4817962854579150281ull}},
+{{18081967743439625595ull, 12070717387368310420ull,
+ 856363493411320995ull, 6022453568223937852ull}},
+{{4155715605589980378ull, 10476710715783000122ull,
+ 1070454366764151244ull, 7528066960279922315ull}},
+{{7209008271921125640ull, 15771316234219150884ull,
+ 16809935043723452191ull, 4705041850174951446ull}},
+{{9011260339901407050ull, 15102459274346550701ull,
+ 11789046767799539431ull, 5881302312718689308ull}},
+{{15875761443304146717ull, 14266388074505800472ull,
+ 14736308459749424289ull, 7351627890898361635ull}},
+{{1397957730420631780ull, 3997927037850086879ull,
+ 13808699556259392458ull, 9189534863622952044ull}},
+{{7791252609153976718ull, 7110390417083692203ull,
+ 17853809259516896094ull, 5743459289764345027ull}},
+{{5127379743015082994ull, 18111360058209391062ull,
+ 17705575555968732213ull, 7179324112205431284ull}},
+{{15632596715623629550ull, 8804142017479575115ull,
+ 3685225371251363651ull, 8974155140256789106ull}},
+{{7464529938051074517ull, 3196745751711040495ull,
+ 6914951875459490186ull, 5608846962660493191ull}},
+{{4718976404136455242ull, 13219304226493576427ull,
+ 4032003825896974828ull, 7011058703325616489ull}},
+{{1287034486743181149ull, 16524130283116970534ull,
+ 9651690800798606439ull, 8763823379157020611ull}},
+{{14639454609496651930ull, 17245110454589188439ull,
+ 3726463741285435072ull, 5477389611973137882ull}},
+{{13687632243443427009ull, 3109643994526933933ull,
+ 13881451713461569649ull, 6846737014966422352ull}},
+{{3274482249022120049ull, 8498741011586055321ull,
+ 17351814641826962061ull, 8558421268708027940ull}},
+{{13575766451707294791ull, 7617556141454978527ull,
+ 1621512114287075480ull, 5349013292942517463ull}},
+{{12358022046206730584ull, 9521945176818723159ull,
+ 15861948198141008062ull, 6686266616178146828ull}},
+{{10835841539331025326ull, 2679059434168628141ull,
+ 1380691173966708462ull, 8357833270222683536ull}},
+{{9078243971295584781ull, 15509470201637556300ull,
+ 862931983729192788ull, 5223645793889177210ull}},
+{{11347804964119480976ull, 940093678337393759ull,
+ 10302037016516266794ull, 6529557242361471512ull}},
+{{9573070186721963316ull, 10398489134776518007ull,
+ 12877546270645333492ull, 8161946552951839390ull}},
+{{12900697894342308929ull, 15722427746090099562ull,
+ 3436780400725945528ull, 5101216595594899619ull}},
+{{6902500331073110353ull, 1206290608903072837ull,
+ 18131033556189595623ull, 6376520744493624523ull}},
+{{13239811432268775845ull, 15342921316411004758ull,
+ 18052105926809606624ull, 7970650930617030654ull}},
+{{3663196126740596999ull, 9589325822756877974ull,
+ 6670880185828616236ull, 4981656831635644159ull}},
+{{13802367195280522057ull, 11986657278446097467ull,
+ 3726914213858382391ull, 6227071039544555199ull}},
+{{12641272975673264667ull, 10371635579630233930ull,
+ 46956748895590085ull, 7783838799430693999ull}},
+{{12512481628223178321ull, 8788115246482590158ull,
+ 6946876995700825659ull, 4864899249644183749ull}},
+{{6417229998424197093ull, 6373458039675849794ull,
+ 13295282263053419978ull, 6081124062055229686ull}},
+{{17244909534885022174ull, 17190194586449588050ull,
+ 7395730791961999164ull, 7601405077569037108ull}},
+{{15389754477730526763ull, 1520499579676216723ull,
+ 13845703781831025286ull, 4750878173480648192ull}},
+{{14625507078735770550ull, 11123996511450046712ull,
+ 17307129727288781607ull, 5938597716850810240ull}},
+{{18281883848419713187ull, 9293309620885170486ull,
+ 3187168085401425393ull, 7423247146063512801ull}},
+{{6814491386834932838ull, 17337533559121701314ull,
+ 13521195099444360630ull, 4639529466289695500ull}},
+{{17741486270398441855ull, 12448544912047350834ull,
+ 16901493874305450788ull, 5799411832862119375ull}},
+{{12953485801143276511ull, 15560681140059188543ull,
+ 16515181324454425581ull, 7249264791077649219ull}},
+{{11580171233001707735ull, 5615793369791821967ull,
+ 16032290637140644073ull, 9061580988847061524ull}},
+{{14155136048267149190ull, 15039085902188358489ull,
+ 796809611358126737ull, 5663488118029413453ull}},
+{{3858862005051772776ull, 4963799322453284400ull,
+ 5607698032625046326ull, 7079360147536766816ull}},
+{{4823577506314715970ull, 15428121189921381308ull,
+ 7009622540781307907ull, 8849200184420958520ull}},
+{{12238107978301473289ull, 7336732734487169365ull,
+ 4381014087988317442ull, 5530750115263099075ull}},
+{{1462576917594677900ull, 18394287954963737515ull,
+ 864581591558008898ull, 6913437644078873844ull}},
+{{15663279202275511086ull, 13769487906849896085ull,
+ 1080726989447511123ull, 8641797055098592305ull}},
+{{12095392510635888381ull, 6300086932567491101ull,
+ 12204669414473164212ull, 5401123159436620190ull}},
+{{1284182583012696764ull, 7875108665709363877ull,
+ 6032464731236679457ull, 6751403949295775238ull}},
+{{6216914247193258859ull, 14455571850564092750ull,
+ 16763952950900625129ull, 8439254936619719047ull}},
+{{17720629459777950499ull, 2117203378961476112ull,
+ 17394999621953972562ull, 5274534335387324404ull}},
+{{3704042751012886508ull, 11869876260556620949ull,
+ 3297005453732914086ull, 6593167919234155506ull}},
+{{9241739457193496039ull, 5613973288841000378ull,
+ 13344628854020918416ull, 8241459899042694382ull}},
+{{10387773179173322928ull, 3508733305525625236ull,
+ 3728707015335686106ull, 5150912436901683989ull}},
+{{12984716473966653660ull, 13609288668761807353ull,
+ 9272569787596995536ull, 6438640546127104986ull}},
+{{2395837537176153363ull, 17011610835952259192ull,
+ 2367340197641468612ull, 8048300682658881233ull}},
+{{1497398460735095852ull, 1408884735615386187ull,
+ 13008802669594387643ull, 5030187926661800770ull}},
+{{15706806131201033527ull, 15596163974801396445ull,
+ 7037631300138208745ull, 6287734908327250963ull}},
+{{5798449608719128197ull, 5660146913219581845ull,
+ 4185353106745373028ull, 7859668635409063704ull}},
+{{5929874014663149075ull, 12760963857617014461ull,
+ 2615845691715858142ull, 4912292897130664815ull}},
+{{12024028536756324248ull, 6727832785166492268ull,
+ 17104865169926986390ull, 6140366121413331018ull}},
+{{15030035670945405310ull, 17633163018312891143ull,
+ 12157709425553957179ull, 7675457651766663773ull}},
+{{16311301321981960175ull, 8714883877231863012ull,
+ 9904411400184917189ull, 4797161032354164858ull}},
+{{1942382578767898602ull, 15505290864967216670ull,
+ 3157142213376370678ull, 5996451290442706073ull}},
+{{11651350260314649061ull, 10158241544354245029ull,
+ 8558113785147851252ull, 7495564113053382591ull}},
+{{9587936921910349615ull, 15572273002076178951ull,
+ 12266350143358488888ull, 4684727570658364119ull}},
+{{7373235133960549115ull, 1018597178885672073ull,
+ 10721251660770723207ull, 5855909463322955149ull}},
+{{13828229935878074298ull, 15108304528889253803ull,
+ 18013250594390791912ull, 7319886829153693936ull}},
+{{12673601401420204968ull, 438636587402015638ull,
+ 4069819169278938275ull, 9149858536442117421ull}},
+{{3309314857460240201ull, 16415048931622117438ull,
+ 4849479990013030373ull, 5718661585276323388ull}},
+{{13360015608680076059ull, 6683753109245483085ull,
+ 6061849987516287967ull, 7148326981595404235ull}},
+{{2864961455567931362ull, 3743005368129465953ull,
+ 2965626465967972055ull, 8935408726994255294ull}},
+{{13319815955798426861ull, 9256907382721998076ull,
+ 15688574596512146246ull, 5584630454371409558ull}},
+{{16649769944748033577ull, 2347762191547721787ull,
+ 10387346208785407000ull, 6980788067964261948ull}},
+{{16200526412507654067ull, 2934702739434652234ull,
+ 12984182760981758750ull, 8725985084955327435ull}},
+{{14737015026244671696ull, 15669247267428821358ull,
+ 5809271216399905266ull, 5453740678097079647ull}},
+{{9197896745951063812ull, 10363187047431250890ull,
+ 2649903002072493679ull, 6817175847621349559ull}},
+{{2273998895584053956ull, 8342297790861675709ull,
+ 17147436807872780811ull, 8521469809526686948ull}},
+{{3727092318953727675ull, 2908093110074853366ull,
+ 1493775968065712199ull, 5325918630954179343ull}},
+{{13882237435546935402ull, 17470174442875730419ull,
+ 15702278015364303960ull, 6657398288692724178ull}},
+{{12741110776006281348ull, 3390973979885111408ull,
+ 10404475482350604143ull, 8321747860865905223ull}},
+{{7963194235003925843ull, 9036887765069276486ull,
+ 13420326204110209445ull, 5201092413041190764ull}},
+{{730620756900131495ull, 15907795724763983512ull,
+ 16775407755137761806ull, 6501365516301488455ull}},
+{{913275946125164369ull, 10661372619100203582ull,
+ 16357573675494814354ull, 8126706895376860569ull}},
+{{14405855521610391443ull, 11275043905365015142ull,
+ 3305954519543177115ull, 5079191809610537856ull}},
+{{8783947365158213495ull, 9482118863278881024ull,
+ 4132443149428971394ull, 6348989762013172320ull}},
+{{10979934206447766869ull, 2629276542243825472ull,
+ 5165553936786214243ull, 7936237202516465400ull}},
+{{6862458879029854293ull, 17784198903398248584ull,
+ 3228471210491383901ull, 4960148251572790875ull}},
+{{8578073598787317866ull, 8395190573965647018ull,
+ 17870647068396393589ull, 6200185314465988593ull}},
+{{1499219961629371525ull, 15105674235884446677ull,
+ 8503250780213328274ull, 7750231643082485742ull}},
+{{3242855485232051155ull, 14052732415855167077ull,
+ 702845719205942267ull, 4843894776926553589ull}},
+{{8665255374967451848ull, 12954229501391570942ull,
+ 5490243167434815738ull, 6054868471158191986ull}},
+{{1608197181854539002ull, 6969414839884687870ull,
+ 16086175996148295481ull, 7568585588947739982ull}},
+{{14840181293941250588ull, 15885099320996399678ull,
+ 5442173979165296771ull, 4730365993092337489ull}},
+{{9326854580571787427ull, 15244688132818111694ull,
+ 11414403492384008868ull, 5912957491365421861ull}},
+{{2435196188859958476ull, 609116092313088002ull, 432946310197847374ull,
+ 7391196864206777327ull}},
+{{6133683636464861952ull, 14215755612977843713ull,
+ 7188120471514736464ull, 4619498040129235829ull}},
+{{12278790564008465343ull, 17769694516222304641ull,
+ 13596836607820808484ull, 5774372550161544786ull}},
+{{1513430149728417967ull, 3765374071568329186ull,
+ 7772673722921234798ull, 7217965687701930983ull}},
+{{11115159724015298267ull, 13930089626315187290ull,
+ 5104156135224155593ull, 9022457109627413729ull}},
+{{11558660845936949321ull, 1788776988805910200ull,
+ 14719312630583567006ull, 5639035693517133580ull}},
+{{14448326057421186651ull, 11459343272862163558ull,
+ 18399140788229458757ull, 7048794616896416975ull}},
+{{8837035534921707506ull, 489121035795540736ull,
+ 18387239966859435543ull, 8810993271120521219ull}},
+{{5523147209326067191ull, 7223229675013294816ull,
+ 9186181970073453262ull, 5506870794450325762ull}},
+{{6903934011657583989ull, 18252409130621394328ull,
+ 2259355425737040769ull, 6883588493062907203ull}},
+{{8629917514571979986ull, 8980453357994579198ull,
+ 16659252337453464674ull, 8604485616328634003ull}},
+{{782012428180099587ull, 10224469367173999903ull,
+ 8106189701694721469ull, 5377803510205396252ull}},
+{{14812573590507288196ull, 17392272727394887782ull,
+ 10132737127118401836ull, 6722254387756745315ull}},
+{{9292344951279334437ull, 3293596835534058112ull,
+ 8054235390470614392ull, 8402817984695931644ull}},
+{{5807715594549584023ull, 2058498022208786320ull,
+ 14257269155898909803ull, 5251761240434957277ull}},
+{{7259644493186980029ull, 16408180583043146612ull,
+ 3986528389591473541ull, 6564701550543696597ull}},
+{{9074555616483725036ull, 6675167673521769553ull,
+ 9594846505416729831ull, 8205876938179620746ull}},
+{{17200812306370797908ull, 11089508823592187826ull,
+ 10608465084312844048ull, 5128673086362262966ull}},
+{{12277643346108721577ull, 13861886029490234783ull,
+ 4037209318536279252ull, 6410841357952828708ull}},
+{{10735368164208514067ull, 17327357536862793479ull,
+ 5046511648170349065ull, 8013551697441035885ull}},
+{{13627134130271403148ull, 3912069432898164068ull,
+ 5459912789320162118ull, 5008469810900647428ull}},
+{{17033917662839253935ull, 14113458827977480893ull,
+ 6824890986650202647ull, 6260587263625809285ull}},
+{{7457339023266903706ull, 13030137516544463213ull,
+ 13142799751740141213ull, 7825734079532261606ull}},
+{{6966679898755508769ull, 10449678957053983460ull,
+ 3602563826410200354ull, 4891083799707663504ull}},
+{{8708349873444385961ull, 3838726659462703517ull,
+ 4503204783012750443ull, 6113854749634579380ull}},
+{{15497123360232870355ull, 186722305900991492ull,
+ 5629005978765938054ull, 7642318437043224225ull}},
+{{462330063290768164ull, 13951759496470283395ull,
+ 15047343782797181043ull, 4776449023152015140ull}},
+{{14412970634395623917ull, 12828013352160466339ull,
+ 362435654786924688ull, 5970561278940018926ull}},
+{{13404527274567141992ull, 16035016690200582924ull,
+ 9676416605338431668ull, 7463201598675023657ull}},
+{{17601201583459239553ull, 798513394520588519ull,
+ 17576975424404989553ull, 4664500999171889785ull}},
+{{17389815960896661537ull, 5609827761578123553ull,
+ 8136161225224073229ull, 5830626248964862232ull}},
+{{7902211895838663209ull, 11623970720400042346ull,
+ 10170201531530091536ull, 7288282811206077790ull}},
+{{654392832943553204ull, 14529963400500052933ull,
+ 3489379877557838612ull, 9110353514007597238ull}},
+{{2714838529803414704ull, 18304599162167308891ull,
+ 16015920478755812844ull, 5693970946254748273ull}},
+{{17228606217536432092ull, 4434004878999584497ull,
+ 6184842543162602344ull, 7117463682818435342ull}},
+{{7700699716638376403ull, 5542506098749480622ull,
+ 16954425215808028738ull, 8896829603523044177ull}},
+{{201251304471597348ull, 8075752330145813293ull, 3678986732238936105ull,
+ 5560518502201902611ull}},
+{{4863250149016884589ull, 14706376431109654520ull,
+ 18433791470580833843ull, 6950648127752378263ull}},
+{{6079062686271105736ull, 13771284520459680246ull,
+ 18430553319798654400ull, 8688310159690472829ull}},
+{{17634472234201604797ull, 8607052825287300153ull,
+ 13824938834087852952ull, 5430193849806545518ull}},
+{{8208032237469842285ull, 10758816031609125192ull,
+ 8057801505755040382ull, 6787742312258181898ull}},
+{{10260040296837302856ull, 4225148002656630682ull,
+ 848879845339024670ull, 8484677890322727373ull}},
+{{11024211203950702189ull, 16475775556942557888ull,
+ 2836392912550584370ull, 5302923681451704608ull}},
+{{13780264004938377736ull, 11371347409323421552ull,
+ 3545491140688230463ull, 6628654601814630760ull}},
+{{17225330006172972170ull, 9602498243226889036ull,
+ 4431863925860288079ull, 8285818252268288450ull}},
+{{1542459217003331799ull, 12919090429657887504ull,
+ 7381600972090067953ull, 5178636407667680281ull}},
+{{1928074021254164748ull, 2313804981790195668ull,
+ 13838687233539972846ull, 6473295509584600351ull}},
+{{2410092526567705935ull, 12115628264092520393ull,
+ 12686673023497578153ull, 8091619386980750439ull}},
+{{13035522875173285969ull, 654738637416743389ull,
+ 14846699667327068202ull, 5057262116862969024ull}},
+{{2459345538684443750ull, 10041795333625705045ull,
+ 111630510449283636ull, 6321577646078711281ull}},
+{{7685867941782942591ull, 12552244167032131306ull,
+ 4751224156488992449ull, 7901972057598389101ull}},
+{{9415353482041727024ull, 927623576754000210ull, 5275358107019314233ull,
+ 4938732535998993188ull}},
+{{2545819815697382971ull, 5771215489369888167ull,
+ 6594197633774142791ull, 6173415669998741485ull}},
+{{17017332824903892426ull, 2602333343284972304ull,
+ 12854433060645066393ull, 7716769587498426856ull}},
+{{10635833015564932766ull, 13155673385621577450ull,
+ 8034020662903166495ull, 4822980992186516785ull}},
+{{4071419232601390150ull, 11832905713599583909ull,
+ 14654211847056346023ull, 6028726240233145981ull}},
+{{9700960059179125591ull, 10179446123572091982ull,
+ 4482706753538268817ull, 7535907800291432477ull}},
+{{1451414018559565591ull, 17891368873301027249ull,
+ 5107534730175111962ull, 4709942375182145298ull}},
+{{6425953541626844892ull, 13140839054771508253ull,
+ 15607790449573665761ull, 5887427968977681622ull}},
+{{12644127945460944019ull, 2590990763182221604ull,
+ 10286366025112306394ull, 7359284961222102028ull}},
+{{15805159931826180024ull, 12462110490832552813ull,
+ 12857957531390382992ull, 9199106201527627535ull}},
+{{12184067966605056467ull, 7788819056770345508ull,
+ 14953752484760071226ull, 5749441375954767209ull}},
+{{15230084958256320584ull, 512651784108156077ull,
+ 4857132550667925321ull, 7186801719943459012ull}},
+{{5202548142538237018ull, 5252500748562583001ull,
+ 6071415688334906651ull, 8983502149929323765ull}},
+{{14780807635154867896ull, 976969958637920423ull,
+ 6100477814423010609ull, 5614688843705827353ull}},
+{{13864323525516196966ull, 5832898466724788433ull,
+ 12237283286456151165ull, 7018361054632284191ull}},
+{{3495346351613082496ull, 11902809101833373446ull,
+ 10684918089642801052ull, 8772951318290355239ull}},
+{{16019649525040340272ull, 16662627725500634211ull,
+ 13595602833667832513ull, 5483094573931472024ull}},
+{{15412875887873037436ull, 6993226601593629052ull,
+ 16994503542084790642ull, 6853868217414340030ull}},
+{{819350786131745179ull, 17964905288846812124ull,
+ 12019757390751212494ull, 8567335271767925038ull}},
+{{9735466278187116545ull, 6616379787101869673ull,
+ 2900662350792119905ull, 5354584544854953149ull}},
+{{16781018866161283585ull, 12882160752304724995ull,
+ 8237513956917537785ull, 6693230681068691436ull}},
+{{16364587564274216577ull, 2267642885098742532ull,
+ 10296892446146922232ull, 8366538351335864295ull}},
+{{1004495190816609553ull, 1417276803186714083ull,
+ 13353086806482908251ull, 5229086469584915184ull}},
+{{15090677043802925653ull, 15606654059265556315ull,
+ 16691358508103635313ull, 6536358086981143980ull}},
+{{14251660286326269162ull, 5673259518799781682ull,
+ 2417454061419992526ull, 8170447608726429976ull}},
+{{13518973697381306130ull, 17380845254532027263ull,
+ 1510908788387495328ull, 5106529755454018735ull}},
+{{12287031103299244759ull, 3279312494455482463ull,
+ 15723694040766532873ull, 6383162194317523418ull}},
+{{10747102860696668045ull, 8710826636496740983ull,
+ 10431245514103390283ull, 7978952742896904273ull}},
+{{13634468315576499384ull, 3138423638596769162ull,
+ 18048743492383088687ull, 4986845464310565170ull}},
+{{7819713357615848422ull, 17758087603528125165ull,
+ 13337557328624085050ull, 6233556830388206463ull}},
+{{14386327715447198431ull, 12974237467555380648ull,
+ 12060260642352718409ull, 7791946037985258079ull}},
+{{8991454822154499020ull, 1191369389581031049ull,
+ 14455191929111530862ull, 4869966273740786299ull}},
+{{15851004546120511679ull, 10712583773831064619ull,
+ 13457303892962025673ull, 6087457842175982874ull}},
+{{15202069664223251694ull, 18002415735716218678ull,
+ 7598257829347756283ull, 7609322302719978593ull}},
+{{4889607521712144405ull, 8945666825608942722ull,
+ 16278126189410817437ull, 4755826439199986620ull}},
+{{15335381438994956314ull, 15793769550438566306ull,
+ 1900913663053970180ull, 5944783048999983276ull}},
+{{9945854761888919584ull, 1295467864338656267ull,
+ 2376142078817462726ull, 7430978811249979095ull}},
+{{3910316216966880788ull, 14644725470493823879ull,
+ 8402617826901996059ull, 4644361757031236934ull}},
+{{276209252781213081ull, 13694220819689891945ull,
+ 1279900246772719266ull, 5805452196289046168ull}},
+{{4956947584403904256ull, 7894403987757589123ull,
+ 1599875308465899083ull, 7256815245361307710ull}},
+{{1584498462077492416ull, 5256318966269598500ull,
+ 11223216172437149662ull, 9071019056701634637ull}},
+{{10213683575653208568ull, 17120257409200662774ull,
+ 9320353116986912490ull, 5669386910438521648ull}},
+{{3543732432711734902ull, 12176949724646052660ull,
+ 11650441396233640613ull, 7086733638048152060ull}},
+{{4429665540889668627ull, 1386129100525402113ull,
+ 14563051745292050767ull, 8858417047560190075ull}},
+{{14297756009124512652ull, 7783859715469458176ull,
+ 6796064331593837777ull, 5536510654725118797ull}},
+{{17872195011405640815ull, 14341510662764210624ull,
+ 13106766432919685125ull, 6920638318406398496ull}},
+{{3893499690547499403ull, 4091830273173099569ull,
+ 16383458041149606407ull, 8650797898007998120ull}},
+{{13962652352660656887ull, 9474922948374269086ull,
+ 10239661275718504004ull, 5406748686254998825ull}},
+{{8229943403971045300ull, 11843653685467836358ull,
+ 17411262613075517909ull, 6758435857818748531ull}},
+{{1064057218109030817ull, 969509051552631736ull,
+ 17152392247917009483ull, 8448044822273435664ull}},
+{{665035761318144261ull, 16746844221716252499ull,
+ 10720245154948130926ull, 5280028013920897290ull}},
+{{14666352756929844038ull, 11710183240290539815ull,
+ 4176934406830387850ull, 6600035017401121613ull}},
+{{13721254927734917144ull, 5414357013508398961ull,
+ 9832854026965372717ull, 8250043771751402016ull}},
+{{1658255302193241359ull, 5689816142656443303ull,
+ 6145533766853357948ull, 5156277357344626260ull}},
+{{15907877183023715411ull, 7112270178320554128ull,
+ 7681917208566697435ull, 6445346696680782825ull}},
+{{1438102405070092647ull, 4278651704473304757ull,
+ 14214082529135759698ull, 8056683370850978531ull}},
+{{3204657012382501857ull, 7285843333723203377ull,
+ 6577958571496155859ull, 5035427106781861582ull}},
+{{8617507283905515225ull, 4495618148726616317ull,
+ 17445820251224970632ull, 6294283883477326977ull}},
+{{15383570123309281935ull, 5619522685908270396ull,
+ 7972217258749049578ull, 7867854854346658722ull}},
+{{391359290213525401ull, 8123887697120056902ull, 9594321805145543890ull,
+ 4917409283966661701ull}},
+{{9712571149621682560ull, 931487584545295319ull,
+ 16604588274859317767ull, 6146761604958327126ull}},
+{{7529027918599715295ull, 14999417535963782861ull,
+ 11532363306719371400ull, 7683452006197908908ull}},
+{{7011485458338516012ull, 9374635959977364288ull,
+ 16431099103554382933ull, 4802157503873693067ull}},
+{{8764356822923145015ull, 16329980968399093264ull,
+ 15927187861015590762ull, 6002696879842116334ull}},
+{{10955446028653931268ull, 11189104173644090772ull,
+ 10685612789414712645ull, 7503371099802645418ull}},
+{{16070525804763482851ull, 9299033117741250684ull,
+ 11290194011811583307ull, 4689606937376653386ull}},
+{{1641413182244801947ull, 7012105378749175452ull,
+ 4889370477909703326ull, 5862008671720816733ull}},
+{{2051766477806002434ull, 17988503760291245123ull,
+ 10723399115814517061ull, 7327510839651020916ull}},
+{{16399766152539666754ull, 8650571645081892691ull,
+ 13404248894768146327ull, 9159388549563776145ull}},
+{{7944010836123597770ull, 12324136305817264788ull,
+ 1460126531589009598ull, 5724617843477360091ull}},
+{{9930013545154497212ull, 6181798345416805177ull,
+ 15660216219768425710ull, 7155772304346700113ull}},
+{{17024202949870509419ull, 16950619968625782279ull,
+ 5740212219428368425ull, 8944715380433375142ull}},
+{{17557655871310150243ull, 3676608452750032068ull,
+ 17422690692424893978ull, 5590447112770859463ull}},
+{{3500325765428136188ull, 13819132602792315894ull,
+ 17166677347103729568ull, 6988058890963574329ull}},
+{{13598779243639946042ull, 17273915753490394867ull,
+ 7623288628597498248ull, 8735073613704467912ull}},
+{{6193394018061272325ull, 10796197345931496792ull,
+ 4764555392873436405ull, 5459421008565292445ull}},
+{{7741742522576590406ull, 18106932700841758894ull,
+ 10567380259519183410ull, 6824276260706615556ull}},
+{{453806116365962199ull, 13410293839197422810ull,
+ 13209225324398979263ull, 8530345325883269445ull}},
+{{4895314841156114279ull, 15298962677139471112ull,
+ 10561608836963055991ull, 5331465828677043403ull}},
+{{6119143551445142848ull, 14512017327996950986ull,
+ 8590325027776432085ull, 6664332285846304254ull}},
+{{16872301476161204368ull, 4304963604714025020ull,
+ 1514534247865764299ull, 8330415357307880318ull}},
+{{1321816385745976922ull, 384759243732571686ull,
+ 14781641960198266399ull, 5206509598317425198ull}},
+{{10875642519037246961ull, 14316007109947878319ull,
+ 9253680413393057190ull, 6508136997896781498ull}},
+{{8982867130369170797ull, 8671636850580072091ull,
+ 2343728479886545680ull, 8135171247370976873ull}},
+{{3308448947267037796ull, 5419773031612545057ull,
+ 12994045345997560810ull, 5084482029606860545ull}},
+{{8747247202511185149ull, 15998088326370457129ull,
+ 2407498627214787300ull, 6355602537008575682ull}},
+{{15545745021566369340ull, 1550866334253519795ull,
+ 12232745320873259934ull, 7944503171260719602ull}},
+{{7410247629265286886ull, 14804349514190613584ull,
+ 12257151843973175362ull, 4965314482037949751ull}},
+{{9262809536581608607ull, 9282064855883491172ull,
+ 10709753786539081299ull, 6206643102547437189ull}},
+{{11578511920727010759ull, 6990895051426976061ull,
+ 17998878251601239528ull, 7758303878184296486ull}},
+{{9542412959668075676ull, 4369309407141860038ull,
+ 6637612888823386801ull, 4848939923865185304ull}},
+{{2704644162730318787ull, 10073322777354712952ull,
+ 8297016111029233501ull, 6061174904831481630ull}},
+{{3380805203412898484ull, 17203339490120779094ull,
+ 1147898101931766068ull, 7576468631039352038ull}},
+{{15948061307415225265ull, 1528715144470711125ull,
+ 14552494368989517505ull, 4735292894399595023ull}},
+{{6100018578986867869ull, 6522579949015776811ull,
+ 13578931942809508977ull, 5919116117999493779ull}},
+{{3013337205306196932ull, 12764910954697108918ull,
+ 12361978910084498317ull, 7398895147499367224ull}},
+{{15718393808598536795ull, 10283912355899387025ull,
+ 7726236818802811448ull, 4624309467187104515ull}},
+{{5812934205466007281ull, 12854890444874233782ull,
+ 5046110005076126406ull, 5780386833983880644ull}},
+{{16489539793687284909ull, 6845241019238016419ull,
+ 6307637506345158008ull, 7225483542479850805ull}},
+{{16000238723681718232ull, 8556551274047520524ull,
+ 12496232901358835414ull, 9031854428099813506ull}},
+{{776777165446298087ull, 736158527852312424ull, 12421831581776660038ull,
+ 5644909017562383441ull}},
+{{970971456807872609ull, 10143570196670166338ull,
+ 1692231421938661335ull, 7056136271952979302ull}},
+{{10437086357864616569ull, 8067776727410320018ull,
+ 11338661314278102477ull, 8820170339941224127ull}},
+{{11134864992092773260ull, 7348203463845143963ull,
+ 14004192349064895904ull, 5512606462463265079ull}},
+{{9306895221688578671ull, 9185254329806429954ull,
+ 12893554417903731976ull, 6890758078079081349ull}},
+{{2410246990255947531ull, 11481567912258037443ull,
+ 2281884967097501258ull, 8613447597598851687ull}},
+{{17647305433405824871ull, 11787665963588661305ull,
+ 8343707132077020142ull, 5383404748499282304ull}},
+{{8224073736475117376ull, 5511210417631050824ull,
+ 10429633915096275178ull, 6729255935624102880ull}},
+{{10280092170593896720ull, 16112385058893589338ull,
+ 13037042393870343972ull, 8411569919530128600ull}},
+{{11036743625048573354ull, 846868624953717528ull,
+ 8148151496168964983ull, 5257231199706330375ull}},
+{{13795929531310716693ull, 14893643836474310622ull,
+ 5573503351783818324ull, 6571538999632912969ull}},
+{{8021539877283620058ull, 170310721883336662ull,
+ 11578565208157160810ull, 8214423749541141211ull}},
+{{401776404874874632ull, 4718130219604473318ull, 4930760245884531554ull,
+ 5134014843463213257ull}},
+{{9725592542948369098ull, 15121034811360367455ull,
+ 10775136325783052346ull, 6417518554329016571ull}},
+{{7545304660258073469ull, 9677921477345683511ull,
+ 8857234388801427529ull, 8021898192911270714ull}},
+{{11633344440302377774ull, 17577915969409521954ull,
+ 10147457511428280109ull, 5013686370569544196ull}},
+{{5318308513523196410ull, 8137336906479738731ull,
+ 12684321889285350137ull, 6267107963211930245ull}},
+{{2036199623476607608ull, 14783357151527061318ull,
+ 2020344306324523959ull, 7833884954014912807ull}},
+{{15107682819955043467ull, 16157127247345495179ull,
+ 8180244219093909330ull, 4896178096259320504ull}},
+{{14272917506516416430ull, 10973037022327093166ull,
+ 10225305273867386663ull, 6120222620324150630ull}},
+{{8617774846290744729ull, 9104610259481478554ull,
+ 3558259555479457521ull, 7650278275405188288ull}},
+{{9997795297359103360ull, 17219596458244393856ull,
+ 2223912222174660950ull, 4781423922128242680ull}},
+{{12497244121698879200ull, 12301123535950716512ull,
+ 2779890277718326188ull, 5976779902660303350ull}},
+{{15621555152123599000ull, 15376404419938395640ull,
+ 12698234884002683543ull, 7470974878325379187ull}},
+{{9763471970077249375ull, 16527781790102579131ull,
+ 5630553793287983262ull, 4669359298953361992ull}},
+{{7592653944169173815ull, 11436355200773448106ull,
+ 7038192241609979078ull, 5836699123691702490ull}},
+{{267445393356691460ull, 5072071964112034325ull,
+ 18021112338867249656ull, 7295873904614628112ull}},
+{{4945992760123252229ull, 6340089955140042906ull,
+ 4079646349874510454ull, 9119842380768285141ull}},
+{{7702931493504420547ull, 17797614277244690528ull,
+ 4855621977885262985ull, 5699901487980178213ull}},
+{{9628664366880525684ull, 8411959791273699448ull,
+ 10681213490783966636ull, 7124876859975222766ull}},
+{{12035830458600657105ull, 10514949739092124310ull,
+ 4128144826625182487ull, 8906096074969028458ull}},
+{{2910708018198022787ull, 13489372614573659550ull,
+ 7191776535068126958ull, 5566310046855642786ull}},
+{{12861757059602304291ull, 7638343731362298629ull,
+ 18213092705689934506ull, 6957887558569553482ull}},
+{{2242138269220716652ull, 324557627348097479ull,
+ 13542993845257642325ull, 8697359448211941853ull}},
+{{8318865445904029764ull, 2508691526306254876ull,
+ 10770214162499720405ull, 5435849655132463658ull}},
+{{10398581807380037204ull, 7747550426310206499ull,
+ 4239395666269874698ull, 6794812068915579573ull}},
+{{8386541240797658601ull, 461065996032982316ull, 9910930601264731277ull,
+ 8493515086144474466ull}},
+{{14464960312353312434ull, 2594009256734307899ull,
+ 10806017644217844952ull, 5308446928840296541ull}},
+{{13469514372014252638ull, 3242511570917884874ull,
+ 18119208073699694094ull, 6635558661050370676ull}},
+{{7613520928163039990ull, 13276511500502131901ull,
+ 4202266018415066001ull, 8294448326312963346ull}},
+{{7064293589315593946ull, 1380290660172750582ull,
+ 7238102279936804155ull, 5184030203945602091ull}},
+{{18053739023499268240ull, 15560421380498101939ull,
+ 4435941831493617289ull, 6480037754932002614ull}},
+{{17955487760946697396ull, 5615468670340463712ull,
+ 14768299326221797420ull, 8100047193665003267ull}},
+{{11222179850591685873ull, 12733039955817565628ull,
+ 6924344069674929435ull, 5062529496040627042ull}},
+{{14027724813239607341ull, 11304613926344569131ull,
+ 17878802123948437602ull, 6328161870050783802ull}},
+{{12922969998122121272ull, 4907395371075935606ull,
+ 13125130618080771195ull, 7910202337563479753ull}},
+{{3465170230398937891ull, 761279097708765802ull, 1285677608659400141ull,
+ 4943876460977174846ull}},
+{{13554834824853448172ull, 5563284890563345156ull,
+ 10830469047679025984ull, 6179845576221468557ull}},
+{{16943543531066810215ull, 6954106113204181445ull,
+ 18149772328026170384ull, 7724806970276835696ull}},
+{{12895557716130450336ull, 4346316320752613403ull,
+ 11343607705016356490ull, 4828004356423022310ull}},
+{{11507761126735675016ull, 14656267437795542562ull,
+ 4956137594415669804ull, 6035005445528777888ull}},
+{{5161329371564817962ull, 18320334297244428203ull,
+ 6195171993019587255ull, 7543756806910972360ull}},
+{{919987848014317275ull, 18367737963418849483ull,
+ 3871982495637242034ull, 4714848004319357725ull}},
+{{14985042865300060305ull, 13736300417418786045ull,
+ 9451664137973940447ull, 5893560005399197156ull}},
+{{4896245526342911669ull, 12558689503346094653ull,
+ 11814580172467425559ull, 7366950006748996445ull}},
+{{10731992926356027491ull, 11086675860755230412ull,
+ 933167160302118237ull, 9208687508436245557ull}},
+{{15930867615827292990ull, 9235015422185712959ull,
+ 2889072484402517850ull, 5755429692772653473ull}},
+{{15301898501356728333ull, 2320397240877365391ull,
+ 8223026623930535217ull, 7194287115965816841ull}},
+{{14515687108268522512ull, 7512182569524094643ull,
+ 14890469298340556925ull, 8992858894957271051ull}},
+{{6766461433454132618ull, 7000957115166253104ull,
+ 7000700302249154126ull, 5620536809348294407ull}},
+{{8458076791817665773ull, 17974568430812592188ull,
+ 4139189359384054753ull, 7025671011685368009ull}},
+{{10572595989772082216ull, 8633152483233576523ull,
+ 9785672717657456346ull, 8782088764606710011ull}},
+{{4302029484393857433ull, 10007406320448373231ull,
+ 3810202439322216264ull, 5488805477879193757ull}},
+{{765850837064933887ull, 12509257900560466539ull,
+ 9374439067580158234ull, 6861006847348992196ull}},
+{{14792371601613331071ull, 6413200338845807365ull,
+ 11718048834475197793ull, 8576258559186240245ull}},
+{{11551075260222025872ull, 15537465257847099363ull,
+ 9629623530760692572ull, 5360161599491400153ull}},
+{{9827158056850144435ull, 975087498599322588ull,
+ 16648715431878253620ull, 6700201999364250191ull}},
+{{12283947571062680544ull, 1218859373249153235ull,
+ 16199208271420429121ull, 8375252499205312739ull}},
+{{5371624222700481388ull, 12291002154349190532ull,
+ 7818662160424074248ull, 5234532812003320462ull}},
+{{6714530278375601735ull, 15363752692936488165ull,
+ 549955663675317002ull, 6543166015004150578ull}},
+{{13004848866396890073ull, 9981318829315834398ull,
+ 9910816616448922061ull, 8178957518755188222ull}},
+{{3516344523070668392ull, 8544167277536090451ull,
+ 1582574366853188384ull, 5111848449221992639ull}},
+{{18230488709120499201ull, 10680209096920113063ull,
+ 15813276013848649192ull, 6389810561527490798ull}},
+{{18176424867973236098ull, 13350261371150141329ull,
+ 10543222980456035682ull, 7987263201909363498ull}},
+{{4442736514842190705ull, 12955599375396226235ull,
+ 11201200381212410205ull, 4992039501193352186ull}},
+{{941734625125350477ull, 2359441163963119082ull, 4778128439660736949ull,
+ 6240049376491690233ull}},
+{{10400540318261463905ull, 7560987473381286756ull,
+ 10584346568003309090ull, 7800061720614612791ull}},
+{{15723709735768190749ull, 9337303189290692126ull,
+ 13532745632643150037ull, 4875038575384132994ull}},
+{{10431265132855462628ull, 16283315005040753062ull,
+ 7692560003949161738ull, 6093798219230166243ull}},
+{{3815709379214552476ull, 11130771719446165520ull,
+ 5004013986509064269ull, 7617247774037707804ull}},
+{{2384818362009095298ull, 9262575333867547402ull,
+ 12350880778422940976ull, 4760779858773567377ull}},
+{{12204394989366144930ull, 11578219167334434252ull,
+ 1603542917746512508ull, 5950974823466959222ull}},
+{{15255493736707681163ull, 14472773959168042815ull,
+ 11227800684037916443ull, 7438718529333699027ull}},
+{{16452212613083382583ull, 6739640715266332807ull,
+ 4711532418310003825ull, 4649199080833561892ull}},
+{{15953579747926840324ull, 13036236912510303913ull,
+ 5889415522887504781ull, 5811498851041952365ull}},
+{{6106916629626386693ull, 2460238085355716180ull,
+ 11973455422036768881ull, 7264373563802440456ull}},
+{{7633645787032983367ull, 7686983625122033129ull,
+ 14966819277545961101ull, 9080466954753050570ull}},
+{{16300243662964084364ull, 7110207774914964657ull,
+ 13965948066893613592ull, 5675291846720656606ull}},
+{{6540246523422941743ull, 8887759718643705822ull,
+ 8234063046762241182ull, 7094114808400820758ull}},
+{{17398680191133452987ull, 1886327611449856469ull,
+ 1069206771598025670ull, 8867643510501025948ull}},
+{{13180018128672102069ull, 15014012812438324005ull,
+ 9891626269103541851ull, 5542277194063141217ull}},
+{{2639964605557963874ull, 14155829997120517103ull,
+ 16976218854806815218ull, 6927846492578926521ull}},
+{{17135013812229618555ull, 8471415459545870570ull,
+ 7385215513226355311ull, 8659808115723658152ull}},
+{{15321069651070899501ull, 12212163689857250962ull,
+ 4615759695766472069ull, 5412380072327286345ull}},
+{{9927965026983848568ull, 1430146557039399991ull,
+ 10381385638135477991ull, 6765475090409107931ull}},
+{{7798270265302422806ull, 15622741251581413701ull,
+ 8365046029241959584ull, 8456843863011384914ull}},
+{{7179761925027708206ull, 9764213282238383563ull,
+ 9839839786703612644ull, 5285527414382115571ull}},
+{{4363016387857247353ull, 12205266602797979454ull,
+ 7688113714952127901ull, 6606909267977644464ull}},
+{{14677142521676334999ull, 1421525198215310605ull,
+ 9610142143690159877ull, 8258636584972055580ull}},
+{{11479057085261403327ull, 3194296258098263080ull,
+ 15229710876661125731ull, 5161647865607534737ull}},
+{{14348821356576754158ull, 17827928377904992562ull,
+ 5202080540544243451ull, 6452059832009418422ull}},
+{{8712654658866166890ull, 17673224453953852799ull,
+ 15725972712535080122ull, 8065074790011773027ull}},
+{{12362938189432436162ull, 15657451302148545903ull,
+ 7522889936120731124ull, 5040671743757358142ull}},
+{{10841986718363157299ull, 1125070053976130763ull,
+ 180240383296138098ull, 6300839679696697678ull}},
+{{8940797379526558719ull, 10629709604324939262ull,
+ 9448672515974948430ull, 7876049599620872097ull}},
+{{976312343776711296ull, 2031882484275699135ull,
+ 17434635368552812529ull, 4922530999763045060ull}},
+{{15055448485003052832ull, 7151539123772011822ull,
+ 3346550136981464045ull, 6153163749703806326ull}},
+{{9595938569399040231ull, 13551109923142402682ull,
+ 13406559708081605864ull, 7691454687129757907ull}},
+{{10609147624301788049ull, 8469443701964001676ull,
+ 6073256808337309713ull, 4807159179456098692ull}},
+{{13261434530377235061ull, 15198490645882389999ull,
+ 7591571010421637141ull, 6008948974320123365ull}},
+{{11965107144544155922ull, 5163055252070823787ull,
+ 14101149781454434331ull, 7511186217900154206ull}},
+{{5172348956126403499ull, 921066523330570915ull, 4201532594981633553ull,
+ 4694491386187596379ull}},
+{{1853750176730616470ull, 5763019172590601548ull, 640229725299654037ull,
+ 5868114232734495474ull}},
+{{2317187720913270588ull, 11815459984165639839ull,
+ 10023659193479343354ull, 7335142790918119342ull}},
+{{16731542706423751946ull, 5545952943352273990ull,
+ 3306201954994403385ull, 9168928488647649178ull}},
+{{5845528173087457063ull, 14995435635663641004ull,
+ 6678062240298890019ull, 5730580305404780736ull}},
+{{7306910216359321328ull, 14132608526152163351ull,
+ 8347577800373612524ull, 7163225381755975920ull}},
+{{4521951752021763756ull, 17665760657690204189ull,
+ 10434472250467015655ull, 8954031727194969900ull}},
+{{5132062854227296300ull, 17958629438697459474ull,
+ 15744917193396660592ull, 5596269829496856187ull}},
+{{15638450604638896183ull, 4001542724662272726ull,
+ 15069460473318437837ull, 6995337286871070234ull}},
+{{10324691218943844420ull, 9613614424255228812ull,
+ 9613453554793271488ull, 8744171608588837793ull}},
+{{15676304048694678571ull, 6008509015159518007ull,
+ 17537623517814264440ull, 5465107255368023620ull}},
+{{14983694042440960309ull, 7510636268949397509ull,
+ 3475285323558278934ull, 6831384069210029526ull}},
+{{4894559497769036674ull, 164923299331971079ull,
+ 13567478691302624476ull, 8539230086512536907ull}},
+{{9976628713746729778ull, 9326449098937257732ull,
+ 6173831172850446345ull, 5337018804070335567ull}},
+{{12470785892183412222ull, 16269747392098960069ull,
+ 3105602947635670027ull, 6671273505087919459ull}},
+{{1753424309947101565ull, 15725498221696312183ull,
+ 17717061739826751246ull, 8339091881359899323ull}},
+{{8013419221358020335ull, 5216750370132807210ull,
+ 8767320578178025577ull, 5211932425849937077ull}},
+{{793401989842749610ull, 11132623981093396917ull,
+ 15570836741149919875ull, 6514915532312421346ull}},
+{{5603438505730824917ull, 9304093957939358242ull,
+ 10240173889582624036ull, 8143644415390526683ull}},
+{{8113835084509153477ull, 15038430760566874709ull,
+ 4094265671775446070ull, 5089777759619079177ull}},
+{{14753979874063829750ull, 9574666413853817578ull,
+ 9729518108146695492ull, 6362222199523848971ull}},
+{{9219102805725011380ull, 11968333017317271973ull,
+ 7550211616755981461ull, 7952777749404811214ull}},
+{{8067782262791826064ull, 9786051145036988935ull, 107196242045100509ull,
+ 4970486093378007009ull}},
+{{5473041810062394676ull, 16844249949723624073ull,
+ 4745681320983763540ull, 6213107616722508761ull}},
+{{11452988281005381249ull, 2608568363444978475ull,
+ 10543787669657092330ull, 7766384520903135951ull}},
+{{4852274666414669329ull, 6242041245580499451ull,
+ 13507396321176764562ull, 4853990325564459969ull}},
+{{1453657314590948757ull, 17025923593830400122ull,
+ 3049187346188791990ull, 6067487906955574962ull}},
+{{11040443680093461754ull, 12059032455433224344ull,
+ 13034856219590765796ull, 7584359883694468702ull}},
+{{6900277300058413597ull, 16760267321500541023ull,
+ 3535099118816840718ull, 4740224927309042939ull}},
+{{4013660606645629092ull, 11726962115020900471ull,
+ 18253931953803214610ull, 5925281159136303673ull}},
+{{405389739879648460ull, 5435330606921349781ull, 8982356886971854551ull,
+ 7406601448920379592ull}},
+{{2559211596638474240ull, 10314610656966925469ull,
+ 5613973054357409094ull, 4629125905575237245ull}},
+{{7810700514225480704ull, 3669891284353881028ull,
+ 11629152336374149272ull, 5786407381969046556ull}},
+{{9763375642781850880ull, 4587364105442351285ull,
+ 14536440420467686590ull, 7233009227461308195ull}},
+{{16815905571904701503ull, 14957577168657714914ull,
+ 13558864507157220333ull, 9041261534326635244ull}},
+{{15121627000867826344ull, 11654328739624765773ull,
+ 17697662353828038516ull, 5650788458954147027ull}},
+{{5066975695802619218ull, 14567910924530957217ull,
+ 17510391923857660241ull, 7063485573692683784ull}},
+{{10945405638180661926ull, 4374830600381532809ull,
+ 3441245831112523686ull, 8829356967115854731ull}},
+{{18370093569931383464ull, 16569327180520621717ull,
+ 18291679708941184967ull, 5518348104447409206ull}},
+{{9127558907132065618ull, 16099972957223389243ull,
+ 13641227599321705401ull, 6897935130559261508ull}},
+{{6797762615487694118ull, 6289908141247072842ull,
+ 17051534499152131752ull, 8622418913199076885ull}},
+{{8860287653107196728ull, 3931192588279420526ull,
+ 12963052071183776297ull, 5389011820749423053ull}},
+{{1851987529529220102ull, 9525676753776663562ull,
+ 2368757033697556659ull, 6736264775936778817ull}},
+{{11538356448766300935ull, 7295409923793441548ull,
+ 7572632310549333728ull, 8420330969920973521ull}},
+{{16434844817333713893ull, 4559631202370900967ull,
+ 16262110240161803340ull, 5262706856200608450ull}},
+{{15931870003239754462ull, 5699539002963626209ull,
+ 11104265763347478367ull, 6578383570250760563ull}},
+{{6079779448767529365ull, 2512737735277144858ull,
+ 9268646185756960055ull, 8222979462813450704ull}},
+{{8411548173907093757ull, 8487990112189297392ull,
+ 5792903866098100034ull, 5139362164258406690ull}},
+{{10514435217383867197ull, 1386615603381845932ull,
+ 16464501869477400851ull, 6424202705323008362ull}},
+{{13143044021729833996ull, 15568327559509471127ull,
+ 11357255299991975255ull, 8030253381653760453ull}},
+{{15131931541222228103ull, 16647733752334501310ull,
+ 9404127571708678486ull, 5018908363533600283ull}},
+{{9691542389673009321ull, 11586295153563350830ull,
+ 7143473446208460204ull, 6273635454417000354ull}},
+{{2891055950236485843ull, 14482868941954188538ull,
+ 18152713844615351063ull, 7842044318021250442ull}},
+{{6418595987325191556ull, 15969322116362449692ull,
+ 15957132171311982318ull, 4901277698763281526ull}},
+{{8023244984156489445ull, 10738280608598286307ull,
+ 10723043177285202090ull, 6126597123454101908ull}},
+{{5417370211768223902ull, 4199478723893082076ull,
+ 13403803971606502613ull, 7658246404317627385ull}},
+{{12609228419209915747ull, 4930517211646870249ull,
+ 1459848454612982277ull, 4786404002698517116ull}},
+{{1926477468730230972ull, 10774832532985975716ull,
+ 1824810568266227846ull, 5983005003373146395ull}},
+{{2408096835912788715ull, 4245168629377693837ull,
+ 16116071265614948520ull, 7478756254216432993ull}},
+{{3810903531659186899ull, 2653230393361058648ull,
+ 3155015513368260969ull, 4674222658885270621ull}},
+{{4763629414573983623ull, 7928224010128711214ull,
+ 8555455410137714115ull, 5842778323606588276ull}},
+{{15177908805072255337ull, 5298593994233501113ull,
+ 10694319262672142644ull, 7303472904508235345ull}},
+{{5137327951058155459ull, 6623242492791876392ull,
+ 17979585096767566209ull, 9129341130635294181ull}},
+{{3210829969411347162ull, 15668741604063392505ull,
+ 13543083694693422832ull, 5705838206647058863ull}},
+{{8625223480191571857ull, 1139182931369689015ull,
+ 12317168599939390637ull, 7132297758308823579ull}},
+{{6169843331812076917ull, 6035664682639499173ull,
+ 10784774731496850392ull, 8915372197886029474ull}},
+{{6161995091596242025ull, 3772290426649686983ull,
+ 11352170225612919399ull, 5572107623678768421ull}},
+{{3090807846067914627ull, 103677014884720825ull, 355154726733985537ull,
+ 6965134529598460527ull}},
+{{8475195826012281188ull, 4741282287033288935ull,
+ 14279001463699645633ull, 8706418161998075658ull}},
+{{12214526418898757599ull, 14492516475464275344ull,
+ 13536061933239666424ull, 5441511351248797286ull}},
+{{15268158023623446998ull, 18115645594330344180ull,
+ 7696705379694807222ull, 6801889189060996608ull}},
+{{638453455819757132ull, 13421184956058154418ull,
+ 9620881724618509028ull, 8502361486326245760ull}},
+{{5010719428314736112ull, 17611612634391122319ull,
+ 6013051077886568142ull, 5313975928953903600ull}},
+{{1651713266966032235ull, 12791143756134127091ull,
+ 7516313847358210178ull, 6642469911192379500ull}},
+{{15899699638989704006ull, 6765557658312883055ull,
+ 9395392309197762723ull, 8303087388990474375ull}},
+{{16854841302009646860ull, 1922630527231857957ull,
+ 12789649220889683558ull, 5189429618119046484ull}},
+{{7233493572229894863ull, 11626660195894598255ull,
+ 15987061526112104447ull, 6486787022648808105ull}},
+{{4430180946859980674ull, 9921639226440859915ull,
+ 6148768852357966847ull, 8108483778311010132ull}},
+{{463020082573793970ull, 13118553544166619303ull,
+ 13066352569578505087ull, 5067802361444381332ull}},
+{{14413833158499406174ull, 11786505911780886224ull,
+ 16332940711973131359ull, 6334752951805476665ull}},
+{{18017291448124257717ull, 10121446371298719876ull,
+ 6581117834684250487ull, 7918441189756845832ull}},
+{{2037435118222885266ull, 13243433009702781779ull,
+ 4113198646677656554ull, 4949025743598028645ull}},
+{{16381851953060770294ull, 7330919225273701415ull,
+ 9753184326774458597ull, 6186282179497535806ull}},
+{{15865628922898574963ull, 13775335050019514673ull,
+ 2968108371613297438ull, 7732852724371919758ull}},
+{{2998489049170527496ull, 3997898387834808767ull,
+ 15690125787540474611ull, 4833032952732449848ull}},
+{{17583169366745323082ull, 385686966366123054ull,
+ 1165913160716041648ull, 6041291190915562311ull}},
+{{12755589671576878044ull, 482108707957653818ull,
+ 15292449506177215772ull, 7551613988644452888ull}},
+{{12583929563162936682ull, 9524689979328309444ull,
+ 9557780941360759857ull, 4719758742902783055ull}},
+{{15729911953953670852ull, 16517548492587774709ull,
+ 7335540158273561917ull, 5899698428628478819ull}},
+{{5827331887159924853ull, 6811877560452554675ull,
+ 4557739179414564493ull, 7374623035785598524ull}},
+{{2672478840522518162ull, 13126532968993081248ull,
+ 5697173974268205616ull, 9218278794731998155ull}},
+{{1670299275326573852ull, 8204083105620675780ull,
+ 1254890724703934558ull, 5761424246707498847ull}},
+{{2087874094158217315ull, 1031731845171068917ull,
+ 15403671461162081910ull, 7201780308384373558ull}},
+{{7221528636125159547ull, 10513036843318611954ull,
+ 10031217289597826579ull, 9002225385480466948ull}},
+{{9125141416005612621ull, 4264805017860438519ull,
+ 15492882842853417420ull, 5626390865925291842ull}},
+{{6794740751579627872ull, 5331006272325548149ull,
+ 10142731516711995967ull, 7032988582406614803ull}},
+{{13105111957901922744ull, 2052071821979547282ull,
+ 8066728377462607055ull, 8791235728008268504ull}},
+{{12802380992116089619ull, 8200073916378298907ull,
+ 5041705235914129409ull, 5494522330005167815ull}},
+{{11391290221717724120ull, 14861778413900261538ull,
+ 1690445526465273857ull, 6868152912506459769ull}},
+{{5015740740292379342ull, 4742164962093163211ull,
+ 6724742926508980226ull, 8585191140633074711ull}},
+{{828994953469043137ull, 7575539119735614911ull,
+ 11120493356709194497ull, 5365744462895671694ull}},
+{{14871301747118467633ull, 14081109918096906542ull,
+ 4677244659031717313ull, 6707180578619589618ull}},
+{{9365755147043308733ull, 3766329342338969466ull,
+ 15069927860644422450ull, 8383975723274487022ull}},
+{{10465282985329455862ull, 6965641857389243820ull,
+ 4807018894475376127ull, 5239984827046554389ull}},
+{{13081603731661819828ull, 4095366303309166871ull,
+ 10620459636521608063ull, 6549981033808192986ull}},
+{{11740318646149886881ull, 507521860709070685ull,
+ 4052202508797234271ull, 8187476292260241233ull}},
+{{9643542163057373253ull, 7234730190584251034ull,
+ 14061841614066741179ull, 5117172682662650770ull}},
+{{2831055666966940758ull, 4431726719802925889ull,
+ 8353929980728650666ull, 6396465853328313463ull}},
+{{8150505602136063851ull, 14763030436608433169ull,
+ 5830726457483425428ull, 7995582316660391829ull}},
+{{16623281047403509667ull, 3521986025494922ull, 5950047045140834845ull,
+ 4997238947912744893ull}},
+{{11555729272399611276ull, 4616088500959256557ull,
+ 12049244824853431460ull, 6246548684890931116ull}},
+{{609603535217350382ull, 5770110626199070697ull,
+ 15061556031066789325ull, 7808185856113663895ull}},
+{{11910217255579313749ull, 5912162150588113137ull,
+ 16331001547057825184ull, 4880116160071039934ull}},
+{{1052713514191978474ull, 7390202688235141422ull,
+ 11190379896967505672ull, 6100145200088799918ull}},
+{{10539263929594748901ull, 9237753360293926777ull,
+ 4764602834354606282ull, 7625181500110999898ull}},
+{{18116255002065187823ull, 10385281868611092139ull,
+ 7589562789899016830ull, 4765738437569374936ull}},
+{{18033632734154096875ull, 3758230298909089366ull,
+ 9486953487373771038ull, 5957173046961718670ull}},
+{{13318668880837845285ull, 13921159910491137516ull,
+ 2635319822362437989ull, 7446466308702148338ull}},
+{{17547540087378429112ull, 11006567953270654899ull,
+ 6258760907403911647ull, 4654041442938842711ull}},
+{{17322739090795648485ull, 9146523923160930720ull,
+ 3211765115827501655ull, 5817551803673553389ull}},
+{{3206679789785008991ull, 6821468885523775497ull,
+ 8626392413211764973ull, 7271939754591941736ull}},
+{{8620035755658649142ull, 13138522125332107275ull,
+ 10782990516514706216ull, 9089924693239927170ull}},
+{{3081679338072961762ull, 8211576328332567047ull,
+ 11351055091249079289ull, 5681202933274954481ull}},
+{{17687157227873365914ull, 14876156428843096712ull,
+ 353760808779185399ull, 7101503666593693102ull}},
+{{3662202461132155777ull, 13983509517626482987ull,
+ 9665573047828757557ull, 8876879583242116377ull}},
+{{18429777602703455025ull, 11045536457730245818ull,
+ 17570198200961443233ull, 5548049739526322735ull}},
+{{13813849966524542973ull, 18418606590590195177ull,
+ 17351061732774416137ull, 6935062174407903419ull}},
+{{3432254402873515004ull, 9188200182955580260ull,
+ 17077141147540632268ull, 8668827718009879274ull}},
+{{11368531038650722686ull, 14965997151202013470ull,
+ 15284899235640283071ull, 5418017323756174546ull}},
+{{4987291761458627549ull, 14095810420575128934ull,
+ 9882752007695578031ull, 6772521654695218183ull}},
+{{15457486738678060244ull, 13008077007291523263ull,
+ 7741753991192084635ull, 8465652068369022729ull}},
+{{16578458239314869509ull, 5824205120343508087ull,
+ 16367811290563522657ull, 5291032542730639205ull}},
+{{16111386780716198982ull, 11891942418856773013ull,
+ 6624706057922239609ull, 6613790678413299007ull}},
+{{6304175420613085015ull, 1029869968288802555ull,
+ 3669196553975411608ull, 8267238348016623759ull}},
+{{1634266628669484183ull, 643668730180501597ull, 9210776873875714111ull,
+ 5167023967510389849ull}},
+{{6654519304264243132ull, 14639643968007790708ull,
+ 16125157110772030542ull, 6458779959387987311ull}},
+{{8318149130330303915ull, 9076182923154962577ull,
+ 15544760370037650274ull, 8073474949234984139ull}},
+{{16728058252524909707ull, 10284300345399239514ull,
+ 7409632222059837469ull, 5045921843271865087ull}},
+{{11686700778801361326ull, 17467061450176437297ull,
+ 4650354259147408932ull, 6307402304089831359ull}},
+{{773317918219537945ull, 3387082739010995006ull, 1201256805506873262ull,
+ 7884252880112289199ull}},
+{{14318381754169374928ull, 15951984767164035590ull,
+ 7668314531082877644ull, 4927658050070180749ull}},
+{{8674605155856942852ull, 1493236885245492872ull,
+ 14197079182280984960ull, 6159572562587725936ull}},
+{{10843256444821178564ull, 1866546106556866090ull,
+ 17746348977851231200ull, 7699465703234657420ull}},
+{{11388721296440624507ull, 1166591316598041306ull,
+ 1868096074302243692ull, 4812166064521660888ull}},
+{{5012529583696004826ull, 1458239145747551633ull,
+ 2335120092877804615ull, 6015207580652076110ull}},
+{{10877347998047393936ull, 15657856987466603253ull,
+ 12142272152952031576ull, 7519009475815095137ull}},
+{{9104185507993315162ull, 9786160617166627033ull, 671391067953937879ull,
+ 4699380922384434461ull}},
+{{15991917903419031856ull, 7621014753030895887ull,
+ 5450924853369810253ull, 5874226152980543076ull}},
+{{15378211360846401916ull, 14137954459716007763ull,
+ 6813656066712262816ull, 7342782691225678845ull}},
+{{14611078182630614491ull, 17672443074645009704ull,
+ 13128756101817716424ull, 9178478364032098556ull}},
+{{9131923864144134057ull, 11045276921653131065ull,
+ 17428844600490848573ull, 5736548977520061597ull}},
+{{16026590848607555476ull, 18418282170493801735ull,
+ 7950997695331397004ull, 7170686221900076997ull}},
+{{15421552542332056440ull, 4576108639407700553ull,
+ 14550433137591634160ull, 8963357777375096246ull}},
+{{2720941311316453419ull, 2860067899629812846ull,
+ 4482334692567383446ull, 5602098610859435154ull}},
+{{12624548676000342582ull, 12798456911392041865ull,
+ 14826290402564005115ull, 7002623263574293942ull}},
+{{1945627789718264515ull, 11386385120812664428ull,
+ 9309490966350230586ull, 8753279079467867428ull}},
+{{10439389405428691130ull, 11728176718935303171ull,
+ 15041803890823669924ull, 5470799424667417142ull}},
+{{8437550738358476009ull, 14660220898669128964ull,
+ 9578882826674811597ull, 6838499280834271428ull}},
+{{10546938422948095011ull, 4490218068054247493ull,
+ 11973603533343514497ull, 8548124101042839285ull}},
+{{8897679523556253334ull, 14335601338602374443ull,
+ 9789345217553390512ull, 5342577563151774553ull}},
+{{6510413386017928763ull, 17919501673252968054ull,
+ 16848367540369126044ull, 6678221953939718191ull}},
+{{17361388769377186762ull, 3952633017856658451ull,
+ 16448773407034019652ull, 8347777442424647739ull}},
+{{8545024971647047774ull, 11693767673015187340ull,
+ 7974640370182568330ull, 5217360901515404837ull}},
+{{10681281214558809718ull, 5393837554414208367ull,
+ 14579986481155598317ull, 6521701126894256046ull}},
+{{8739915499771124243ull, 11353982961445148363ull,
+ 9001611064589722088ull, 8152126408617820058ull}},
+{{3156604178143258700ull, 7096239350903217727ull,
+ 10237692933795964209ull, 5095079005386137536ull}},
+{{17780813277961237087ull, 13481985207056410062ull,
+ 12797116167244955261ull, 6368848756732671920ull}},
+{{13002644560596770551ull, 3017423453538348866ull,
+ 15996395209056194077ull, 7961060945915839900ull}},
+{{12738338868800369499ull, 4191732667675161993ull,
+ 774374968805345490ull, 4975663091197399938ull}},
+{{2087865530718298161ull, 14463037871448728300ull,
+ 10191340747861457670ull, 6219578863996749922ull}},
+{{2609831913397872701ull, 8855425302456134567ull,
+ 3515803897972046280ull, 7774473579995937403ull}},
+{{8548673973514752294ull, 5534640814035084104ull,
+ 18338278500728386589ull, 4859045987497460876ull}},
+{{10685842466893440368ull, 11529987035971243034ull,
+ 4476104052200931620ull, 6073807484371826096ull}},
+{{4133931046762024652ull, 14412483794964053793ull,
+ 5595130065251164525ull, 7592259355464782620ull}},
+{{14112921950294735168ull, 11313645381066227572ull,
+ 12720328327636753636ull, 4745162097165489137ull}},
+{{17641152437868418959ull, 14142056726332784465ull,
+ 2065352354263778333ull, 5931452621456861422ull}},
+{{8216382492053359987ull, 3842512852633816870ull,
+ 11805062479684498725ull, 7414315776821076777ull}},
+{{523553039105962088ull, 4707413542109829496ull, 460635022161729847ull,
+ 4633947360513172986ull}},
+{{654441298882452610ull, 1272580909209898966ull, 9799165814556938117ull,
+ 5792434200641466232ull}},
+{{10041423660457841570ull, 6202412154939761611ull,
+ 12248957268196172646ull, 7240542750801832790ull}},
+{{7940093557144914059ull, 16976387230529477822ull,
+ 6087824548390439999ull, 9050678438502290988ull}},
+{{350872454788183383ull, 17527771046722005495ull,
+ 13028262379598800807ull, 5656674024063931867ull}},
+{{14273648623767392940ull, 17298027789975118964ull,
+ 11673641956071113105ull, 7070842530079914834ull}},
+{{17842060779709241175ull, 7787476682186734993ull,
+ 5368680408234115574ull, 8838553162599893543ull}},
+{{4233758959677193879ull, 255486907939321467ull,
+ 10272954282787404090ull, 5524095726624933464ull}},
+{{680512681169104444ull, 9542730671778927642ull,
+ 12841192853484255112ull, 6905119658281166830ull}},
+{{10074012888316156363ull, 11928413339723659552ull,
+ 6828119030000543082ull, 8631399572851458538ull}},
+{{6296258055197597727ull, 12066944355754675124ull,
+ 8879260412177727330ull, 5394624733032161586ull}},
+{{7870322568996997159ull, 5860308407838568097ull,
+ 1875703478367383355ull, 6743280916290201983ull}},
+{{14449589229673634353ull, 2713699491370822217ull,
+ 16179687403241392906ull, 8429101145362752478ull}},
+{{2113464240904939615ull, 6307748200534151790ull,
+ 5500618608598482662ull, 5268188215851720299ull}},
+{{11865202337985950326ull, 17108057287522465545ull,
+ 2264087242320715423ull, 6585235269814650374ull}},
+{{996444867200274196ull, 16773385590975694028ull,
+ 12053481089755670087ull, 8231544087268312967ull}},
+{{9846150078854947180ull, 17400895022000890623ull,
+ 14450954708738375660ull, 5144715054542695604ull}},
+{{7696001580141296071ull, 3304374703791561663ull,
+ 18063693385922969576ull, 6430893818178369505ull}},
+{{5008315956749232185ull, 4130468379739452079ull,
+ 8744558677121548258ull, 8038617272722961882ull}},
+{{10047726500609351972ull, 7193228755764545453ull,
+ 10077035191628355565ull, 5024135795451851176ull}},
+{{17171344144189077869ull, 13603221963133069720ull,
+ 12596293989535444456ull, 6280169744314813970ull}},
+{{3017436106526795720ull, 17004027453916337151ull,
+ 6521995450064529762ull, 7850212180393517463ull}},
+{{8803426594220329181ull, 15239203177125098623ull,
+ 10993776183931412957ull, 4906382612745948414ull}},
+{{6392597224348023572ull, 5213945916124209567ull,
+ 4518848193059490389ull, 6132978265932435518ull}},
+{{3379060512007641561ull, 11129118413582649863ull,
+ 14871932278179138794ull, 7666222832415544397ull}},
+{{9029441847645857832ull, 11567385026916544068ull,
+ 11600800683075655698ull, 4791389270259715248ull}},
+{{11286802309557322290ull, 5235859246790904277ull,
+ 14501000853844569623ull, 5989236587824644060ull}},
+{{273444831664489150ull, 1933138040061242443ull,
+ 18126251067305712029ull, 7486545734780805075ull}},
+{{16311804084286163383ull, 3514054284251970478ull,
+ 9023063907852376066ull, 4679091084238003172ull}},
+{{11166383068502928421ull, 13615939892169738906ull,
+ 11278829884815470082ull, 5848863855297503965ull}},
+{{4734606798773884718ull, 7796552828357397825ull, 263479300737173891ull,
+ 7311079819121879957ull}},
+{{10529944516894743801ull, 5134005017019359377ull,
+ 4941035144348855268ull, 9138849773902349946ull}},
+{{18110430369127684636ull, 12432125172491875418ull,
+ 7699832983645422446ull, 5711781108688968716ull}},
+{{13414665924554829987ull, 6316784428760068465ull,
+ 9624791229556778058ull, 7139726385861210895ull}},
+{{2933274350411373771ull, 17119352572804861390ull,
+ 7419303018518584668ull, 8924657982326513619ull}},
+{{15668354524289272319ull, 1476223321148262560ull,
+ 2331221377360421466ull, 5577911238954071012ull}},
+{{1138699081652038783ull, 11068651188290104009ull,
+ 2914026721700526832ull, 6972389048692588765ull}},
+{{6035059870492436382ull, 13835813985362630011ull,
+ 8254219420553046444ull, 8715486310865735956ull}},
+{{1466069409844078787ull, 17870755777706419565ull,
+ 14382259174700429835ull, 5447178944291084972ull}},
+{{6444272780732486388ull, 17726758703705636552ull,
+ 17977823968375537294ull, 6808973680363856215ull}},
+{{8055340975915607985ull, 12935076342777269882ull,
+ 17860593942042033714ull, 8511217100454820269ull}},
+{{9646274128374642895ull, 12696108732663181580ull,
+ 13468714222989965023ull, 5319510687784262668ull}},
+{{12057842660468303618ull, 11258449897401589071ull,
+ 16835892778737456279ull, 6649388359730328335ull}},
+{{10460617307157991618ull, 9461376353324598435ull,
+ 16433179954994432445ull, 8311735449662910419ull}},
+{{4232042807760050810ull, 8219203230041567974ull,
+ 7964894462657826326ull, 5194834656039319012ull}},
+{{14513425546554839320ull, 1050632000697184159ull,
+ 9956118078322282908ull, 6493543320049148765ull}},
+{{13530095914766161246ull, 1313290000871480199ull,
+ 17056833616330241539ull, 8116929150061435956ull}},
+{{15373838974369932635ull, 16961707315040532788ull,
+ 1437148973351625153ull, 5073080718788397473ull}},
+{{770554644252864178ull, 7367076088518502274ull, 6408122235116919346ull,
+ 6341350898485496841ull}},
+{{10186565342170856030ull, 18432217147502903650ull,
+ 12621838812323537086ull, 7926688623106871051ull}},
+{{10978289357284172923ull, 6908449698761926877ull,
+ 5582806248488516727ull, 4954180389441794407ull}},
+{{18334547715032604057ull, 4023876105025020692ull,
+ 2366821792183258005ull, 6192725486802243009ull}},
+{{4471440570081203456ull, 9641531149708663770ull,
+ 7570213258656460410ull, 7740906858502803761ull}},
+{{7406336374728140064ull, 10637642986995302760ull,
+ 16260598332728757516ull, 4838066786564252350ull}},
+{{9257920468410175080ull, 13297053733744128450ull,
+ 11102375879056171087ull, 6047583483205315438ull}},
+{{2349028548657943042ull, 12009631148752772659ull,
+ 4654597811965438051ull, 7559479354006644298ull}},
+{{17609043907407072065ull, 5200176458756788959ull,
+ 7520809650905786686ull, 4724674596254152686ull}},
+{{17399618865831452177ull, 15723592610300762007ull,
+ 177640026777457549ull, 5905843245317690858ull}},
+{{17137837563861927318ull, 5819432707593788797ull,
+ 9445422070326597745ull, 7382304056647113572ull}},
+{{13016991486627398526ull, 15166360488314587758ull,
+ 15126760830808899398ull, 4613940035404445982ull}},
+{{7047867321429472349ull, 9734578573538458890ull,
+ 9685079001656348440ull, 5767425044255557478ull}},
+{{18033206188641616244ull, 12168223216923073612ull,
+ 2882976715215659742ull, 7209281305319446848ull}},
+{{4094763662092468689ull, 5986906984299066208ull,
+ 3603720894019574678ull, 9011601631649308560ull}},
+{{2559227288807792931ull, 17576874920469080092ull,
+ 2252325558762234173ull, 5632251019780817850ull}},
+{{3199034111009741163ull, 8136035595304186403ull,
+ 12038778985307568525ull, 7040313774726022312ull}},
+{{17833850694044340166ull, 14781730512557620907ull,
+ 15048473731634460656ull, 8800392218407527890ull}},
+{{8840313674564018652ull, 9238581570348513067ull,
+ 14016982100698925814ull, 5500245136504704931ull}},
+{{6438706074777635411ull, 2324854926080865526ull,
+ 12909541607446269364ull, 6875306420630881164ull}},
+{{17271754630326820071ull, 2906068657601081907ull,
+ 16136927009307836705ull, 8594133025788601455ull}},
+{{8489003634740568593ull, 13345507957069145952ull,
+ 17003108408458479796ull, 5371333141117875909ull}},
+{{10611254543425710741ull, 16681884946336432440ull,
+ 7418827455290936033ull, 6714166426397344887ull}},
+{{13264068179282138426ull, 7017298127638376838ull,
+ 4661848300686282138ull, 8392708032996681109ull}},
+{{3678356593623948612ull, 8997497348201373428ull,
+ 5219498197142620288ull, 5245442520622925693ull}},
+{{4597945742029935765ull, 11246871685251716785ull,
+ 11136058764855663264ull, 6556803150778657116ull}},
+{{10359118195964807611ull, 14058589606564645981ull,
+ 13920073456069579080ull, 8196003938473321395ull}},
+{{8780291881691698709ull, 8786618504102903738ull,
+ 6394202900829792973ull, 5122502461545825872ull}},
+{{1751992815259847578ull, 15594959148556017577ull,
+ 7992753626037241216ull, 6403128076932282340ull}},
+{{6801677037502197376ull, 1046954861985470355ull,
+ 9990942032546551521ull, 8003910096165352925ull}},
+{{1945205139225179408ull, 12183561834809388732ull,
+ 8550181779555288652ull, 5002443810103345578ull}},
+{{2431506424031474260ull, 15229452293511735915ull,
+ 1464355187589335007ull, 6253054762629181973ull}},
+{{16874441085321506537ull, 14425129348462281989ull,
+ 6442130002914056663ull, 7816318453286477466ull}},
+{{12852368687539635538ull, 15933234870430008099ull,
+ 8638017270248673318ull, 4885199033304048416ull}},
+{{11453774840997156518ull, 10693171551182734316ull,
+ 10797521587810841648ull, 6106498791630060520ull}},
+{{14317218551246445648ull, 13366464438978417895ull,
+ 13496901984763552060ull, 7633123489537575650ull}},
+{{15865790622170110386ull, 17577412311216286992ull,
+ 13047249758904607941ull, 4770702180960984781ull}},
+{{1385494204003086367ull, 8136707333738195029ull,
+ 2474004143348596215ull, 5963377726201230977ull}},
+{{6343553773431245862ull, 5559198148745355882ull,
+ 7704191197613133173ull, 7454222157751538721ull}},
+{{8576407126821916568ull, 5780341852179541378ull,
+ 16344334544576677993ull, 4658888848594711700ull}},
+{{1497136871672619902ull, 11837113333651814627ull,
+ 1983674107011295875ull, 5823611060743389626ull}},
+{{15706479144872938589ull, 10184705648637380379ull,
+ 11702964670618895652ull, 7279513825929237032ull}},
+{{15021412912663785332ull, 12730882060796725474ull,
+ 14628705838273619565ull, 9099392282411546290ull}},
+{{14000069088842253737ull, 10262644297211647373ull,
+ 13754627167348400132ull, 5687120176507216431ull}},
+{{3665028305770653459ull, 12828305371514559217ull,
+ 12581597940758112261ull, 7108900220634020539ull}},
+{{9192971400640704728ull, 2200323659111035309ull,
+ 11115311407520252423ull, 8886125275792525674ull}},
+{{8051450134614134407ull, 8292731314585478924ull,
+ 11558755648127545668ull, 5553828297370328546ull}},
+{{10064312668267668009ull, 10365914143231848655ull,
+ 5225072523304656277ull, 6942285371712910683ull}},
+{{7968704816907197107ull, 17569078697467198723ull,
+ 1919654635703432442ull, 8677856714641138354ull}},
+{{2674597501353304240ull, 15592360204344387106ull,
+ 5811470165742033180ull, 5423660446650711471ull}},
+{{12566618913546406108ull, 1043706181720932266ull,
+ 2652651688750153572ull, 6779575558313389339ull}},
+{{6484901605078231826ull, 1304632727151165333ull,
+ 17150872666219855677ull, 8474469447891736673ull}},
+{{6358906512387588844ull, 3121238463683172285ull,
+ 3801766388746327942ull, 5296543404932335421ull}},
+{{12560319158911873958ull, 13124920116458741164ull,
+ 9363894004360297831ull, 6620679256165419276ull}},
+{{15700398948639842448ull, 11794464127146038551ull,
+ 11704867505450372289ull, 8275849070206774095ull}},
+{{16730278370540983386ull, 454011051825192238ull,
+ 14233071218547564537ull, 5172405668879233809ull}},
+{{11689475926321453425ull, 5179199833208878202ull,
+ 3956280967902291959ull, 6465507086099042262ull}},
+{{5388472871047040973ull, 1862313773083709849ull,
+ 14168723246732640757ull, 8081883857623802827ull}},
+{{14897010590472870368ull, 3469789117391012607ull,
+ 6549609019994206521ull, 5051177411014876767ull}},
+{{14009577219663700056ull, 8948922415166153663ull,
+ 3575325256565370247ull, 6313971763768595959ull}},
+{{12900285506152237166ull, 6574467000530304175ull,
+ 18304214625988876521ull, 7892464704710744948ull}},
+{{14980207468986230085ull, 15638256921399909869ull,
+ 2216762104388272017ull, 4932790440444215593ull}},
+{{4890201280950623894ull, 5712763096467723625ull,
+ 7382638648912727926ull, 6165988050555269491ull}},
+{{10724437619615667771ull, 16364325907439430339ull,
+ 4616612292713522003ull, 7707485063194086864ull}},
+{{4396930503046098405ull, 7921860682935950010ull,
+ 2885382682945951252ull, 4817178164496304290ull}},
+{{14719535165662398814ull, 9902325853669937512ull,
+ 12830100390537214873ull, 6021472705620380362ull}},
+{{18399418957077998518ull, 16989593335514809794ull,
+ 6814253451316742783ull, 7526840882025475453ull}},
+{{16111322866601136978ull, 17536024862337837977ull,
+ 6564751416286658191ull, 4704275551265922158ull}},
+{{6304095527969257510ull, 17308345059494909568ull,
+ 17429311307213098547ull, 5880344439082402697ull}},
+{{7880119409961571888ull, 17023745305941249056ull,
+ 7951581078734209472ull, 7350430548853003372ull}},
+{{9850149262451964859ull, 2832937558717009704ull,
+ 9939476348417761841ull, 9188038186066254215ull}},
+{{6156343289032478037ull, 13299801020266600825ull,
+ 13129701745402183006ull, 5742523866291408884ull}},
+{{12307115129717985451ull, 7401379238478475223ull,
+ 16412127181752728758ull, 7178154832864261105ull}},
+{{10772207893720093909ull, 28352011243318221ull, 6680100921908747236ull,
+ 8972693541080326382ull}},
+{{9038472942788752645ull, 9241092043881849696ull,
+ 18010121131475130734ull, 5607933463175203988ull}},
+{{11298091178485940807ull, 2327993017997536312ull,
+ 4065907340634361802ull, 7009916828969004986ull}},
+{{14122613973107426008ull, 12133363309351696198ull,
+ 14305756212647728060ull, 8762396036211256232ull}},
+{{4214947714764753351ull, 16806724105199585932ull,
+ 8941097632904830037ull, 5476497522632035145ull}},
+{{5268684643455941689ull, 7173347076217318703ull,
+ 15788058059558425451ull, 6845621903290043931ull}},
+{{1974169785892539207ull, 4354997826844260475ull,
+ 15123386556020643910ull, 8557027379112554914ull}},
+{{17374757180678694669ull, 16556931697059826508ull,
+ 14063802615940290347ull, 5348142111945346821ull}},
+{{3271702402138816720ull, 16084478602897395232ull,
+ 3744695214643199222ull, 6685177639931683527ull}},
+{{4089628002673520899ull, 10882226216766968232ull, 69182999876611124ull,
+ 8356472049914604409ull}},
+{{2556017501670950562ull, 16024763422334130953ull,
+ 11572454420991351712ull, 5222795031196627755ull}},
+{{7806707895516076107ull, 1584210204208112075ull,
+ 9853882007811801737ull, 6528493788995784694ull}},
+{{5146698850967707229ull, 6591948773687527998ull,
+ 3093980472909976363ull, 8160617236244730868ull}},
+{{17051744837136980730ull, 1814124974341011046ull,
+ 11157109832423511035ull, 5100385772652956792ull}},
+{{12091309009566450105ull, 16102714273208427520ull,
+ 13946387290529388793ull, 6375482215816195990ull}},
+{{15114136261958062631ull, 6293334786228370688ull,
+ 8209612076306960184ull, 7969352769770244988ull}},
+{{9446335163723789145ull, 3933334241392731680ull,
+ 14354379584546625923ull, 4980845481106403117ull}},
+{{11807918954654736431ull, 304981783313526696ull,
+ 4107916425401118692ull, 6226056851383003897ull}},
+{{14759898693318420538ull, 381227229141908370ull,
+ 9746581550178786269ull, 7782571064228754871ull}},
+{{13836622701751400741ull, 2544110027427386683ull,
+ 13009142496502823274ull, 4864106915142971794ull}},
+{{12684092358761863022ull, 12403509571139009162ull,
+ 7038056083773753284ull, 6080133643928714743ull}},
+{{6631743411597552969ull, 15504386963923761453ull,
+ 4185884086289803701ull, 7600167054910893429ull}},
+{{6450682641462164558ull, 11996084861666044860ull,
+ 4922020563144821265ull, 4750104409319308393ull}},
+{{8063353301827705697ull, 1160048021800392363ull,
+ 10764211722358414486ull, 5937630511649135491ull}},
+{{5467505608857244217ull, 10673432064105266262ull,
+ 8843578634520630203ull, 7422038139561419364ull}},
+{{17252249060817941348ull, 4365052030852097461ull,
+ 14750608683430169685ull, 4638773837225887102ull}},
+{{7730253270740262973ull, 10068001056992509731ull,
+ 9214888817432936298ull, 5798467296532358878ull}},
+{{5051130569997940812ull, 3361629284385861356ull,
+ 2295238984936394565ull, 7248084120665448598ull}},
+{{6313913212497426015ull, 8813722623909714599ull,
+ 12092420768025269014ull, 9060105150831810747ull}},
+{{10863724785451973115ull, 896890621516183720ull,
+ 5251919970802099182ull, 5662565719269881717ull}},
+{{13579655981814966394ull, 10344485313750005458ull,
+ 11176585981930011881ull, 7078207149087352146ull}},
+{{7751197940413932184ull, 17542292660614894727ull,
+ 4747360440557739043ull, 8847758936359190183ull}},
+{{11762027740399789471ull, 8658089903670615252ull,
+ 9884629302989668758ull, 5529849335224493864ull}},
+{{14702534675499736839ull, 1599240342733493257ull,
+ 12355786628737085948ull, 6912311669030617330ull}},
+{{4543110289092507337ull, 1999050428416866572ull,
+ 6221361249066581627ull, 8640389586288271663ull}},
+{{12062815967537592894ull, 17390307582256399271ull,
+ 10805879808307695372ull, 5400243491430169789ull}},
+{{10466833940994603213ull, 3291140404110947473ull,
+ 18119035778812007120ull, 6750304364287712236ull}},
+{{17695228444670641920ull, 4113925505138684341ull,
+ 4202050649805457284ull, 8437880455359640296ull}},
+{{13365360787132845152ull, 11794575477566453521ull,
+ 2626281656128410802ull, 5273675284599775185ull}},
+{{2871642928633892728ull, 5519847310103291094ull,
+ 7894538088587901407ull, 6592094105749718981ull}},
+{{12812925697647141718ull, 2288123119201725963ull,
+ 14479858629162264663ull, 8240117632187148726ull}},
+{{5702235551815769622ull, 8347605977142160583ull,
+ 4438225624799027510ull, 5150073520116967954ull}},
+{{2516108421342324123ull, 1211135434572924921ull,
+ 14771154067853560196ull, 6437591900146209942ull}},
+{{7756821545105293058ull, 1513919293216156151ull,
+ 9240570547962174437ull, 8046989875182762428ull}},
+{{11765542493331890018ull, 3252042567473791546ull,
+ 14998728629331134831ull, 5029368671989226517ull}},
+{{5483556079810086714ull, 17900111264624403145ull,
+ 4913352731381754826ull, 6286710839986533147ull}},
+{{11466131118189996296ull, 13151767043925728123ull,
+ 1530004895799805629ull, 7858388549983166434ull}},
+{{4860488939655053733ull, 10525697411667274029ull,
+ 5567939078302266422ull, 4911492843739479021ull}},
+{{10687297192996205070ull, 3933749727729316728ull,
+ 11571609866305220932ull, 6139366054674348776ull}},
+{{13359121491245256338ull, 4917187159661645910ull,
+ 14464512332881526165ull, 7674207568342935970ull}},
+{{3737764913600897307ull, 5379084984002222646ull,
+ 13652006226478341757ull, 4796379730214334981ull}},
+{{13895578178855897442ull, 11335542248430166211ull,
+ 3229949727815763484ull, 5995474662767918727ull}},
+{{12757786705142483899ull, 14169427810537707764ull,
+ 17872495215051868067ull, 7494343328459898408ull}},
+{{17196988727568828245ull, 6550049372372373400ull,
+ 11170309509407417542ull, 4683964580287436505ull}},
+{{3049491835751483690ull, 17410933752320242559ull,
+ 127828831477108215ull, 5854955725359295632ull}},
+{{17646922849971518324ull, 17151981171972915294ull,
+ 159786039346385269ull, 7318694656699119540ull}},
+{{12835281525609622097ull, 7604918409683980406ull,
+ 199732549182981587ull, 9148368320873899425ull}},
+{{3410364935078625907ull, 2447230996838793802ull,
+ 11654047889307833252ull, 5717730200546187140ull}},
+{{13486328205703058191ull, 3059038746048492252ull,
+ 14567559861634791565ull, 7147162750682733925ull}},
+{{16857910257128822739ull, 8435484450988003219ull,
+ 4374391771761325744ull, 8933953438353417407ull}},
+{{8230350901491820260ull, 5272177781867502012ull,
+ 9651523884991910446ull, 5583720898970885879ull}},
+{{10287938626864775325ull, 15813594264189153323ull,
+ 7452718837812500153ull, 6979651123713607349ull}},
+{{8248237265153581252ull, 5931934774954277942ull,
+ 13927584565693013096ull, 8724563904642009186ull}},
+{{543462272293600379ull, 3707459234346423714ull,
+ 13316426371985521089ull, 5452852440401255741ull}},
+{{9902699877221776281ull, 9246010061360417546ull,
+ 2810474909699737649ull, 6816065550501569677ull}},
+{{3155002809672444544ull, 16169198595127909837ull,
+ 8124779655552059965ull, 8520081938126962096ull}},
+{{4277719765258971792ull, 12411592131168637600ull,
+ 5077987284720037478ull, 5325051211329351310ull}},
+{{5347149706573714740ull, 6291118127106021192ull,
+ 15570856142754822656ull, 6656314014161689137ull}},
+{{6683937133217143425ull, 7863897658882526490ull,
+ 5628512123161364608ull, 8320392517702111422ull}},
+{{8789146726688102545ull, 4914936036801579056ull,
+ 17352878132258016592ull, 5200245323563819638ull}},
+{{10986433408360128181ull, 6143670046001973820ull,
+ 12467725628467744932ull, 6500306654454774548ull}},
+{{13733041760450160226ull, 7679587557502467275ull,
+ 15584657035584681165ull, 8125383318068468185ull}},
+{{6277308091067656189ull, 7105585232652735999ull,
+ 2822881619599343872ull, 5078364573792792616ull}},
+{{3234949095407182332ull, 8881981540815919999ull,
+ 3528602024499179840ull, 6347955717240990770ull}},
+{{17878744424541141627ull, 11102476926019899998ull,
+ 13634124567478750608ull, 7934944646551238462ull}},
+{{6562529246910825613ull, 6939048078762437499ull,
+ 3909641836246831226ull, 4959340404094524039ull}},
+{{3591475540211144113ull, 17897182135307822682ull,
+ 275366276881151128ull, 6199175505118155049ull}},
+{{13712716462118705949ull, 3924733595425226736ull,
+ 4955893864528826815ull, 7748969381397693811ull}},
+{{8570447788824191218ull, 9370487524781848566ull, 791590656116822807ull,
+ 4843105863373558632ull}},
+{{1489687699175463214ull, 7101423387549922804ull, 989488320146028509ull,
+ 6053882329216948290ull}},
+{{1862109623969329018ull, 13488465252864791409ull,
+ 10460232437037311444ull, 7567352911521185362ull}},
+{{12693033561049300396ull, 17653662819895270438ull,
+ 11149331291575707556ull, 4729595569700740851ull}},
+{{6642919914456849687ull, 3620334451159536432ull,
+ 9324978096042246542ull, 5911994462125926064ull}},
+{{8303649893071062109ull, 13748790100804196348ull,
+ 11656222620052808177ull, 7389993077657407580ull}},
+{{14413153220024189626ull, 1675464785361540861ull,
+ 16508511174387780919ull, 4618745673535879737ull}},
+{{4181383469748073321ull, 15929389036984089789ull,
+ 6800580912702562436ull, 5773432091919849672ull}},
+{{9838415355612479555ull, 1464992222520560620ull,
+ 8500726140878203046ull, 7216790114899812090ull}},
+{{12298019194515599443ull, 11054612315005476583ull,
+ 1402535639242977999ull, 9020987643624765113ull}},
+{{14603791024213331508ull, 13826661724519504720ull,
+ 12405799820595331009ull, 5638117277265478195ull}},
+{{18254738780266664385ull, 3448269100367217188ull,
+ 10895563757316775858ull, 7047646596581847744ull}},
+{{4371679401623778866ull, 13533708412313797294ull,
+ 13619454696645969822ull, 8809558245727309680ull}},
+{{16567357681297025503ull, 3846881739268735404ull,
+ 8512159185403731139ull, 5505973903579568550ull}},
+{{2262453027911730263ull, 196916155658531352ull, 1416826944899888116ull,
+ 6882467379474460688ull}},
+{{2828066284889662828ull, 246145194573164190ull, 1771033681124860145ull,
+ 8603084224343075860ull}},
+{{15602599483338202980ull, 11683055792676697378ull,
+ 10330268087557813398ull, 5376927640214422412ull}},
+{{10279877317317977917ull, 5380447703991095915ull,
+ 12912835109447266748ull, 6721159550268028015ull}},
+{{8238160628220084492ull, 6725559629988869894ull,
+ 11529357868381695531ull, 8401449437835035019ull}},
+{{537164374210164904ull, 1897631759529349732ull, 4900005658524865755ull,
+ 5250905898646896887ull}},
+{{671455467762706129ull, 16207097754693850877ull,
+ 1513321054728694289ull, 6563632373308621109ull}},
+{{5451005353130770566ull, 6423814138085149884ull,
+ 6503337336838255766ull, 8204540466635776386ull}},
+{{12630250382561507412ull, 17849941891585382389ull,
+ 8676271853951297757ull, 5127837791647360241ull}},
+{{1952754922919720552ull, 8477369309199564275ull,
+ 15457025835866510101ull, 6409797239559200301ull}},
+{{16276001708931814402ull, 15208397654926843247ull,
+ 5486224239550973914ull, 8012246549449000377ull}},
+{{17090030095723465858ull, 14116934552756664933ull,
+ 14958105195787828456ull, 5007654093405625235ull}},
+{{7527479564372168610ull, 17646168190945831167ull,
+ 14085945476307397666ull, 6259567616757031544ull}},
+{{4797663437037822858ull, 12834338201827513151ull,
+ 17607431845384247083ull, 7824459520946289430ull}},
+{{9916068675789721143ull, 5715618366928501767ull,
+ 6392958884937766523ull, 4890287200591430894ull}},
+{{7783399826309763524ull, 2532836940233239305ull,
+ 17214570643026983962ull, 6112859000739288617ull}},
+{{14340935801314592309ull, 12389418212146324939ull,
+ 7683155248501566240ull, 7641073750924110772ull}},
+{{6657241866607926241ull, 7743386382591453087ull,
+ 14025344067168254708ull, 4775671094327569232ull}},
+{{3709866314832519898ull, 9679232978239316359ull,
+ 17531680083960318385ull, 5969588867909461540ull}},
+{{25646875113261968ull, 16710727241226533353ull, 3467856031240846365ull,
+ 7461986084886826926ull}},
+{{11545244343014258490ull, 12750047534980277297ull,
+ 16002468074807692690ull, 4663741303054266828ull}},
+{{596497373485659401ull, 6714187381870570814ull, 1556341019800064247ull,
+ 5829676628817833536ull}},
+{{9968993753711850059ull, 3781048208910825613ull,
+ 1945426274750080309ull, 7287095786022291920ull}},
+{{17072928210567200477ull, 9337996279565919920ull,
+ 2431782843437600386ull, 9108869732527864900ull}},
+{{10670580131604500298ull, 10447933693156087854ull,
+ 10743236314003276049ull, 5693043582829915562ull}},
+{{4114853127650849565ull, 17671603134872497722ull,
+ 4205673355649319253ull, 7116304478537394453ull}},
+{{14366938446418337764ull, 8254445863308458440ull,
+ 9868777712989036971ull, 8895380598171743066ull}},
+{{8979336529011461103ull, 2853185655354092573ull,
+ 10779672089045536011ull, 5559612873857339416ull}},
+{{15835856679691714282ull, 17401540124474779428ull,
+ 13474590111306920013ull, 6949516092321674270ull}},
+{{1348076775905091237ull, 7916867100311310574ull,
+ 7619865602278874209ull, 8686895115402092838ull}},
+{{14677606040222845735ull, 16477256983763038868ull,
+ 150729982996908476ull, 5429309447126308024ull}},
+{{18347007550278557169ull, 2149827155994246969ull,
+ 188412478746135596ull, 6786636808907885030ull}},
+{{9098701382566032749ull, 2687283944992808712ull,
+ 9458887635287445303ull, 8483296011134856287ull}},
+{{5686688364103770468ull, 8597081493261587301ull,
+ 12829333799695735170ull, 5302060006959285179ull}},
+{{11720046473557100989ull, 1522979829722208318ull,
+ 11424981231192281059ull, 6627575008699106474ull}},
+{{5426686055091600428ull, 15738782842434924110ull,
+ 5057854502135575515ull, 8284468760873883093ull}},
+{{17226736839714413980ull, 7530896267308133616ull,
+ 5467002073048428649ull, 5177792975546176933ull}},
+{{3086676975933465859ull, 14025306352562554925ull,
+ 11445438609737923715ull, 6472241219432721166ull}},
+{{8470032238344220227ull, 12919946922275805752ull,
+ 5083426225317628836ull, 8090301524290901458ull}},
+{{5293770148965137642ull, 17298338863277154403ull,
+ 7788827409250905926ull, 5056438452681813411ull}},
+{{2005526667779034149ull, 12399551542241667196ull,
+ 5124348243136244504ull, 6320548065852266764ull}},
+{{2506908334723792686ull, 15499439427802083995ull,
+ 6405435303920305630ull, 7900685082315333455ull}},
+{{17707718773698228093ull, 5075463623948914592ull,
+ 10920926092591272875ull, 4937928176447083409ull}},
+{{3687904393413233500ull, 1732643511508755337ull,
+ 18262843634166478998ull, 6172410220558854261ull}},
+{{9221566510193929779ull, 11389176426240719979ull,
+ 8993496487425935035ull, 7715512775698567827ull}},
+{{3457636059657512160ull, 4812392257186756035ull,
+ 3315092295427515445ull, 4822195484811604892ull}},
+{{18157103129854053912ull, 10627176339910832947ull,
+ 4143865369284394306ull, 6027744356014506115ull}},
+{{18084692893890179485ull, 4060598388033765376ull,
+ 568145693178104979ull, 7534680445018132644ull}},
+{{11302933058681362179ull, 232030983307409408ull,
+ 9578463095091091420ull, 4709175278136332902ull}},
+{{14128666323351702723ull, 290038729134261760ull,
+ 2749706832009088467ull, 5886469097670416128ull}},
+{{17660832904189628404ull, 14197606466699990912ull,
+ 3437133540011360583ull, 7358086372088020160ull}},
+{{3629297056527483889ull, 13135322064947600737ull,
+ 4296416925014200729ull, 9197607965110025200ull}},
+{{13797525706398147191ull, 1292047262951168604ull,
+ 2685260578133875456ull, 5748504978193765750ull}},
+{{17246907132997683988ull, 1615059078688960755ull,
+ 12579947759522120128ull, 7185631222742207187ull}},
+{{16946947897819717081ull, 2018823848361200944ull,
+ 11113248680975262256ull, 8982039028427758984ull}},
+{{10591842436137323176ull, 1261764905225750590ull,
+ 6945780425609538910ull, 5613774392767349365ull}},
+{{4016431008316878162ull, 10800578168386964046ull,
+ 13293911550439311541ull, 7017217990959186706ull}},
+{{14243910797250873510ull, 18112408728911092961ull,
+ 7394017401194363618ull, 8771522488698983383ull}},
+{{1984915220640714088ull, 15931941473996821005ull,
+ 11538789903387559117ull, 5482201555436864614ull}},
+{{7092830044228280514ull, 6079868787213862544ull,
+ 5200115342379673089ull, 6852751944296080768ull}},
+{{8866037555285350642ull, 12211522002444716084ull,
+ 6500144177974591361ull, 8565939930370100960ull}},
+{{14764645508908119959ull, 714672223886865696ull,
+ 4062590111234119601ull, 5353712456481313100ull}},
+{{9062812425598333ull, 5505026298285970025ull, 5078237639042649501ull,
+ 6692140570601641375ull}},
+{{4623014533959385820ull, 11492968891284850435ull,
+ 1736111030375923972ull, 8365175713252051719ull}},
+{{583541074510922186ull, 16406477593907807330ull,
+ 8002598421626034338ull, 5228234820782532324ull}},
+{{9952798379993428540ull, 11284724955529983354ull,
+ 10003248027032542923ull, 6535293525978165405ull}},
+{{3217625938137009867ull, 9494220175985091289ull,
+ 17115746052218066558ull, 8169116907472706756ull}},
+{{13540231257404100927ull, 1322201591563294151ull,
+ 1473969245781515791ull, 5105698067170441723ull}},
+{{12313603053327738255ull, 15487810044736281401ull,
+ 15677519612509058450ull, 6382122583963052153ull}},
+{{1556945761377509106ull, 10136390519065575944ull,
+ 5761841460354159351ull, 7977653229953815192ull}},
+{{973091100860943192ull, 13252773102057066821ull,
+ 3601150912721349594ull, 4986033268721134495ull}},
+{{5828049894503566893ull, 7342594340716557718ull,
+ 18336496696183850705ull, 6232541585901418118ull}},
+{{16508434404984234425ull, 13789928944323085051ull,
+ 13697248833375037573ull, 7790676982376772648ull}},
+{{8011928493901452564ull, 10924548599415622109ull,
+ 8560780520859398483ull, 4869173113985482905ull}},
+{{14626596635804203608ull, 9043999730842139732ull,
+ 15312661669501636008ull, 6086466392481853631ull}},
+{{18283245794755254510ull, 11304999663552674665ull,
+ 14529141068449657106ull, 7608082990602317039ull}},
+{{4509499594080952213ull, 11677310808147809570ull,
+ 15998242195422117547ull, 4755051869126448149ull}},
+{{14860246529455966074ull, 9984952491757374058ull,
+ 6162744688995483222ull, 5943814836408060187ull}},
+{{9351936124965181785ull, 3257818577841941765ull,
+ 3091744842816966124ull, 7429768545510075234ull}},
+{{8150803087316932568ull, 11259508648005989411ull,
+ 6544026545187991731ull, 4643605340943797021ull}},
+{{5576817840718777806ull, 9462699791580098860ull,
+ 12791719199912377568ull, 5804506676179746276ull}},
+{{6971022300898472257ull, 11828374739475123575ull,
+ 15989648999890471960ull, 7255633345224682845ull}},
+{{4102091857695702417ull, 14785468424343904469ull,
+ 6152003194580926238ull, 9069541681530853557ull}},
+{{4869650420273507963ull, 4629231746787552389ull,
+ 6150845005826772851ull, 5668463550956783473ull}},
+{{10698749043769272857ull, 1174853665057052582ull,
+ 12300242275710853968ull, 7085579438695979341ull}},
+{{4150064267856815263ull, 1468567081321315728ull,
+ 1540244789356403748ull, 8856974298369974177ull}},
+{{2593790167410509540ull, 10141226462680598138ull,
+ 12491868039416222102ull, 5535608936481233860ull}},
+{{12465609746117912733ull, 3453161041495971864ull,
+ 15614835049270277628ull, 6919511170601542325ull}},
+{{15582012182647390916ull, 4316451301869964830ull,
+ 5683485756305683323ull, 8649388963251927907ull}},
+{{5127071595727231419ull, 391939054455034067ull, 1246335588477358125ull,
+ 5405868102032454942ull}},
+{{1797153476231651369ull, 5101609836496180488ull,
+ 10781291522451473464ull, 6757335127540568677ull}},
+{{2246441845289564211ull, 6377012295620225610ull,
+ 18088300421491729734ull, 8446668909425710846ull}},
+{{6015712171733365536ull, 17820690740044804718ull,
+ 6693501745004943179ull, 5279168068391069279ull}},
+{{16743012251521482728ull, 17664177406628617993ull,
+ 3755191162828791070ull, 6598960085488836599ull}},
+{{7093707259119689698ull, 12856849721430996684ull, 82302935108600934ull,
+ 8248700106861045749ull}},
+{{13656939073804581869ull, 3423845057466985023ull,
+ 2357282343656569536ull, 5155437566788153593ull}},
+{{12459487823828339433ull, 4279806321833731279ull,
+ 7558288947998099824ull, 6444296958485191991ull}},
+{{10962673761358036387ull, 5349757902292164099ull,
+ 4836175166570236876ull, 8055371198106489989ull}},
+{{4545828091635078790ull, 12566970725787378370ull,
+ 5328452488320091999ull, 5034606998816556243ull}},
+{{14905657151398624295ull, 11097027388806835058ull,
+ 2048879591972727095ull, 6293258748520695304ull}},
+{{9408699402393504561ull, 9259598217581155919ull,
+ 2561099489965908869ull, 7866573435650869130ull}},
+{{12797966154137022207ull, 8093091895201916401ull,
+ 6212373199656080947ull, 4916608397281793206ull}},
+{{2162399637389114046ull, 5504678850575007598ull,
+ 16988838536424876992ull, 6145760496602241507ull}},
+{{11926371583591168366ull, 6880848563218759497ull,
+ 16624362152103708336ull, 7682200620752801884ull}},
+{{536453212103398373ull, 4300530352011724686ull, 1166854308210041902ull,
+ 4801375387970501178ull}},
+{{9893938551984023774ull, 14599034976869431665ull,
+ 10681939922117328185ull, 6001719234963126472ull}},
+{{16979109208407417621ull, 4413735665804625869ull,
+ 13352424902646660232ull, 7502149043703908090ull}},
+{{12917786264468329965ull, 2758584791127891168ull,
+ 12956951582581550549ull, 4688843152314942556ull}},
+{{16147232830585412457ull, 8059917007337251864ull,
+ 16196189478226938186ull, 5861053940393678195ull}},
+{{1737296964522213955ull, 851524222316789023ull,
+ 15633550829356284829ull, 7326317425492097744ull}},
+{{16006679260934931155ull, 5676091296323374182ull,
+ 1095194462985804420ull, 9157896781865122181ull}},
+{{5392488519656944068ull, 12770929097056884672ull,
+ 2990339548579821714ull, 5723685488665701363ull}},
+{{6740610649571180085ull, 6740289334466330032ull,
+ 17572982491006940855ull, 7154606860832126703ull}},
+{{8425763311963975106ull, 3813675649655524636ull,
+ 17354542095331288165ull, 8943258576040158379ull}},
+{{14489474106832260250ull, 4689390290248396849ull,
+ 8540745800368361151ull, 5589536610025098987ull}},
+{{4276784578258161600ull, 1250051844383108158ull,
+ 6064246232033063535ull, 6986920762531373734ull}},
+{{14569352759677477808ull, 15397622860761048909ull,
+ 16803679826896105226ull, 8733650953164217167ull}},
+{{11411688484012117582ull, 14235200306403043472ull,
+ 17419828919451147622ull, 5458531845727635729ull}},
+{{14264610605015146977ull, 8570628346149028532ull,
+ 7939728094031770816ull, 6823164807159544662ull}},
+{{17830763256268933722ull, 10713285432686285665ull,
+ 701288080684937712ull, 8528956008949430828ull}},
+{{4226698007527001720ull, 6695803395428928541ull,
+ 9661677087282861878ull, 5330597505593394267ull}},
+{{9895058527836140054ull, 17593126281140936484ull,
+ 7465410340676189443ull, 6663246881991742834ull}},
+{{12368823159795175068ull, 17379721832998782701ull,
+ 108390888990460996ull, 8329058602489678543ull}},
+{{10036357484085678369ull, 1638954108769463380ull,
+ 6985273333260119979ull, 5205661626556049089ull}},
+{{12545446855107097962ull, 15883750691243992937ull,
+ 13343277685002537877ull, 6507077033195061361ull}},
+{{1846750513601708740ull, 6019630308772827460ull,
+ 2844039050971008635ull, 8133846291493826702ull}},
+{{10377591107855843771ull, 1456425933769323210ull,
+ 15612582462139044109ull, 5083653932183641688ull}},
+{{3748616847965028905ull, 6432218435639041917ull,
+ 1068984003964253520ull, 6354567415229552111ull}},
+{{9297457078383674035ull, 8040273044548802396ull,
+ 15171288060237480612ull, 7943209269036940138ull}},
+{{15034282710844572080ull, 14248542689697777305ull,
+ 14093741056075813286ull, 4964505793148087586ull}},
+{{4957795333273551388ull, 8587306325267445824ull,
+ 8393804283239990800ull, 6205632241435109483ull}},
+{{6197244166591939235ull, 10734132906584307280ull,
+ 5880569335622600596ull, 7757040301793886854ull}},
+{{3873277604119962022ull, 15932205103469967858ull,
+ 17510413890046289084ull, 4848150188621179283ull}},
+{{14064969042004728336ull, 1468512305627908206ull,
+ 17276331344130473452ull, 6060187735776474104ull}},
+{{8357839265651134611ull, 1835640382034885258ull,
+ 3148670106453540199ull, 7575234669720592631ull}},
+{{9835335559459347036ull, 8064804266412885142ull,
+ 8885447844174544480ull, 4734521668575370394ull}},
+{{3070797412469407987ull, 10081005333016106428ull,
+ 1883437768363404792ull, 5918152085719212993ull}},
+{{3838496765586759984ull, 12601256666270133035ull,
+ 6965983228881643894ull, 7397690107149016241ull}},
+{{93217469278031038ull, 3264099397991445243ull, 15882954564119497194ull,
+ 4623556316968135150ull}},
+{{13951579891879702510ull, 13303496284344082361ull,
+ 10630321168294595684ull, 5779445396210168938ull}},
+{{3604416809567464425ull, 16629370355430102952ull,
+ 4064529423513468797ull, 7224306745262711173ull}},
+{{4505521011959330531ull, 6951654889005464978ull,
+ 9692347797819223901ull, 9030383431578388966ull}},
+{{7427636650901969486ull, 6650627314842109563ull,
+ 1446031355209627034ull, 5643989644736493104ull}},
+{{4672859795200073953ull, 17536656180407412762ull,
+ 1807539194012033792ull, 7054987055920616380ull}},
+{{15064446780854868250ull, 3474076151799714336ull,
+ 2259423992515042241ull, 8818733819900770475ull}},
+{{9415279238034292656ull, 13700512640943291220ull,
+ 17553041059817759064ull, 5511708637437981546ull}},
+{{11769099047542865820ull, 17125640801179114025ull,
+ 12717929287917423022ull, 6889635796797476933ull}},
+{{876315754146418563ull, 12183678964619116724ull,
+ 2062353554614615066ull, 8612044745996846167ull}},
+{{9771069383196287410ull, 12226485371314335856ull,
+ 8206499999275216272ull, 5382527966248028854ull}},
+{{12213836728995359262ull, 15283106714142919820ull,
+ 1034752962239244532ull, 6728159957810036068ull}},
+{{15267295911244199078ull, 657139318969098159ull,
+ 1293441202799055666ull, 8410199947262545085ull}},
+{{16459588972168706280ull, 5022398092783074253ull,
+ 3114243760963103743ull, 5256374967039090678ull}},
+{{6739428159928719138ull, 1666311597551454913ull,
+ 13116176738058655487ull, 6570468708798863347ull}},
+{{13035971218338286826ull, 15917947552221482353ull,
+ 11783534904145931454ull, 8213085885998579184ull}},
+{{1229952983820347410ull, 5337031201711038567ull,
+ 7364709315091207159ull, 5133178678749111990ull}},
+{{15372499285057597975ull, 2059602983711410304ull,
+ 18429258680718784757ull, 6416473348436389987ull}},
+{{768880032612445853ull, 7186189748066650785ull,
+ 18424887332471093042ull, 8020591685545487484ull}},
+{{12009765066451248418ull, 9103054610969044644ull,
+ 2292182545939657343ull, 5012869803465929678ull}},
+{{15012206333064060522ull, 6767132245283917901ull,
+ 12088600219279347487ull, 6266087254332412097ull}},
+{{4930199861047911941ull, 3847229288177509473ull,
+ 1275692218817020647ull, 7832609067915515122ull}},
+{{14610589959223414723ull, 9322047332752025276ull,
+ 5408993655188025808ull, 4895380667447196951ull}},
+{{18263237449029268404ull, 11652559165940031595ull,
+ 2149556050557644356ull, 6119225834308996189ull}},
+{{18217360792859197601ull, 14565698957425039494ull,
+ 7298631081624443349ull, 7649032292886245236ull}},
+{{6774164477109610597ull, 11409404857604343636ull,
+ 13785016462870052901ull, 4780645183053903272ull}},
+{{8467705596387013246ull, 426698016723265833ull,
+ 17231270578587566127ull, 5975806478817379090ull}},
+{{15196318013911154461ull, 14368430576186246003ull,
+ 12315716186379681850ull, 7469758098521723863ull}},
+{{7191855749480777586ull, 13591955128543791656ull,
+ 14614851644128383012ull, 4668598811576077414ull}},
+{{8989819686850971983ull, 16989943910679739570ull,
+ 9045192518305702957ull, 5835748514470096768ull}},
+{{2013902571708939170ull, 7402371833067510751ull,
+ 11306490647882128697ull, 7294685643087620960ull}},
+{{16352436269918337675ull, 13864650809761776342ull,
+ 14133113309852660871ull, 9118357053859526200ull}},
+{{5608586650271573143ull, 15582935783742192070ull,
+ 8833195818657913044ull, 5698973158662203875ull}},
+{{16234105349694242237ull, 1031925655968188471ull,
+ 6429808754895003402ull, 7123716448327754844ull}},
+{{15680945668690414892ull, 10513279106815011397ull,
+ 8037260943618754252ull, 8904645560409693555ull}},
+{{12106434052145203259ull, 15794171478614157931ull,
+ 2717445080548027455ull, 5565403475256058472ull}},
+{{10521356546754116170ull, 15131028329840309510ull,
+ 3396806350685034319ull, 6956754344070073090ull}},
+{{3928323646587869405ull, 14302099393872998984ull,
+ 13469379975211068707ull, 8695942930087591362ull}},
+{{2455202279117418378ull, 6632969111956930413ull,
+ 13030048502934305846ull, 5434964331304744601ull}},
+{{7680688867324160876ull, 17514583426800938824ull,
+ 2452502573385718595ull, 6793705414130930752ull}},
+{{9600861084155201095ull, 17281543265073785626ull,
+ 3065628216732148244ull, 8492131767663663440ull}},
+{{10612224196024388589ull, 1577592503816340208ull,
+ 1916017635457592653ull, 5307582354789789650ull}},
+{{13265280245030485736ull, 6583676648197813164ull,
+ 11618394081176766624ull, 6634477943487237062ull}},
+{{16581600306288107170ull, 8229595810247266455ull,
+ 5299620564616182472ull, 8293097429359046328ull}},
+{{17281029219071148837ull, 5143497381404541534ull,
+ 3312262852885114045ull, 5183185893349403955ull}},
+{{12377914486984160238ull, 11041057745183064822ull,
+ 17975386621388556268ull, 6478982366686754943ull}},
+{{6249021071875424490ull, 13801322181478831028ull,
+ 17857547258308307431ull, 8098727958358443679ull}},
+{{13129010206776916114ull, 15543355391065351248ull,
+ 18078496064083774000ull, 5061704973974027299ull}},
+{{16411262758471145143ull, 982450165122137444ull,
+ 17986434061677329597ull, 6327131217467534124ull}},
+{{2067334374379379813ull, 5839748724830059710ull,
+ 4036298503387110380ull, 7908914021834417656ull}},
+{{15127142039269276095ull, 12873214989873563126ull,
+ 2522686564616943987ull, 4943071263646511035ull}},
+{{9685555512231819311ull, 11479832718914566004ull,
+ 16988416261053343696ull, 6178839079558138793ull}},
+{{12106944390289774138ull, 14349790898643207505ull,
+ 7400462271034515908ull, 7723548849447673492ull}},
+{{649311216290026981ull, 18191991348506780499ull,
+ 13848660956251348250ull, 4827218030904795932ull}},
+{{14646697075644697438ull, 13516617148778699815ull,
+ 17310826195314185313ull, 6034022538630994915ull}},
+{{13696685326128483893ull, 3060713380691211057ull,
+ 17026846725715343738ull, 7542528173288743644ull}},
+{{1642899301189220577ull, 6524631881359394815ull,
+ 1418407166717314028ull, 4714080108305464778ull}},
+{{15888682181768689433ull, 8155789851699243518ull,
+ 10996380995251418343ull, 5892600135381830972ull}},
+{{10637480690356085984ull, 5583051296196666494ull,
+ 13745476244064272929ull, 7365750169227288715ull}},
+{{4073478826090331671ull, 11590500138673221022ull,
+ 12570159286652953257ull, 9207187711534110894ull}},
+{{16380982321588621007ull, 326533559029681282ull,
+ 3244663535730707882ull, 5754492319708819309ull}},
+{{11252855865131000450ull, 9631538985641877411ull,
+ 8667515438090772756ull, 7193115399636024136ull}},
+{{9454383812986362659ull, 12039423732052346764ull,
+ 10834394297613465945ull, 8991394249545030170ull}},
+{{15132361919971252470ull, 607110804891634871ull,
+ 11383182454435804120ull, 5619621405965643856ull}},
+{{14303766381536677683ull, 758888506114543589ull,
+ 14228978068044755150ull, 7024526757457054820ull}},
+{{4044649921638683392ull, 10171982669497955295ull,
+ 17786222585055943937ull, 8780658446821318525ull}},
+{{9445435228665258976ull, 17886704214504691819ull,
+ 13422232124873658912ull, 5487911529263324078ull}},
+{{7195108017404185816ull, 3911636194421313158ull,
+ 7554418119237297833ull, 6859889411579155098ull}},
+{{18217257058610008078ull, 9501231261454029351ull,
+ 219650612191846483ull, 8574861764473943873ull}},
+{{18303314689272336905ull, 3632426529195074392ull,
+ 11666496678688373812ull, 5359288602796214920ull}},
+{{4432399287880869515ull, 4540533161493842991ull,
+ 14583120848360467265ull, 6699110753495268650ull}},
+{{928813091423698990ull, 10287352470294691643ull,
+ 9005529023595808273ull, 8373888441869085813ull}},
+{{16721409246635669533ull, 17958810340002652036ull,
+ 7934298648961074122ull, 5233680276168178633ull}},
+{{2455017484585035300ull, 13225140888148539238ull,
+ 14529559329628730557ull, 6542100345210223291ull}},
+{{12292143892586069933ull, 2696368054903510335ull,
+ 13550263143608525293ull, 8177625431512779114ull}},
+{{14600118960507375564ull, 3991073043528387911ull,
+ 13080600483182716212ull, 5111015894695486946ull}},
+{{13638462682206831551ull, 4988841304410484889ull,
+ 7127378567123619457ull, 6388769868369358683ull}},
+{{3213020297476375727ull, 10847737648940494016ull,
+ 4297537190477136417ull, 7985962335461698354ull}},
+{{2008137685922734829ull, 18309051076656278520ull,
+ 7297646762475598164ull, 4991226459663561471ull}},
+{{2510172107403418537ull, 4439569772110796534ull,
+ 4510372434667109802ull, 6239033074579451839ull}},
+{{12361087171109048979ull, 14772834251993271475ull,
+ 1026279524906499348ull, 7798791343224314799ull}},
+{{5419836472729461660ull, 9649370641018864ull, 7558953730707643949ull,
+ 4874244589515196749ull}},
+{{6774795590911827075ull, 4623747731728661484ull,
+ 14060378181811942840ull, 6092805736893995936ull}},
+{{8468494488639783843ull, 5779684664660826855ull,
+ 17575472727264928550ull, 7616007171117494920ull}},
+{{12210338083040946758ull, 17447360970695180496ull,
+ 10984670454540580343ull, 4760004481948434325ull}},
+{{15262922603801183448ull, 17197515194941587716ull,
+ 18342524086603113333ull, 5950005602435542906ull}},
+{{631909181041927693ull, 7661835938394820934ull,
+ 13704783071399115859ull, 7437507003044428633ull}},
+{{14230001293433368521ull, 2482804452283069131ull,
+ 1647960391983365556ull, 4648441876902767896ull}},
+{{13175815598364322747ull, 3103505565353836414ull,
+ 2059950489979206945ull, 5810552346128459870ull}},
+{{7246397461100627625ull, 8491067975119683422ull,
+ 11798310149328784489ull, 7263190432660574837ull}},
+{{18281368863230560339ull, 15225520987326992181ull,
+ 912829631378816899ull, 9078988040825718547ull}},
+{{13731698548732794164ull, 7210107607865676161ull,
+ 16711419584107618226ull, 5674367525516074091ull}},
+{{3329565130633828993ull, 18236006546686871010ull,
+ 16277588461707134878ull, 7092959406895092614ull}},
+{{13385328450147062049ull, 13571636146503812954ull,
+ 11123613540279142790ull, 8866199258618865768ull}},
+{{12977516299769301685ull, 3870586573137495192ull,
+ 6952258462674464244ull, 5541374536636791105ull}},
+{{16221895374711627106ull, 4838233216421868990ull,
+ 13302009096770468209ull, 6926718170795988881ull}},
+{{11053997181534758074ull, 10659477538954724142ull,
+ 2792453315680921549ull, 8658397713494986102ull}},
+{{2297062220031835893ull, 8968016471060396541ull,
+ 15580341377582739680ull, 5411498570934366313ull}},
+{{7483013793467182770ull, 11210020588825495676ull,
+ 5640368666696260888ull, 6764373213667957892ull}},
+{{9353767241833978462ull, 14012525736031869595ull,
+ 7050460833370326110ull, 8455466517084947365ull}},
+{{3540261516932542587ull, 4146142566592530593ull,
+ 6712381030070147771ull, 5284666573178092103ull}},
+{{9037012914593066138ull, 570992189813275337ull, 3778790269160296810ull,
+ 6605833216472615129ull}},
+{{15907952161668720576ull, 9937112274121369979ull,
+ 9335173854877758916ull, 8257291520590768911ull}},
+{{7636627091829256408ull, 15434067208180632045ull,
+ 12752012686939681178ull, 5160807200369230569ull}},
+{{14157469883213958414ull, 10069211973371014248ull,
+ 2104957803392437761ull, 6451009000461538212ull}},
+{{17696837354017448017ull, 17198200985141155714ull,
+ 2631197254240547201ull, 8063761250576922765ull}},
+{{15672209364688292915ull, 3831346588072140465ull,
+ 3950341293114035953ull, 5039850781610576728ull}},
+{{5755203650578202432ull, 9400869253517563486ull,
+ 4937926616392544941ull, 6299813477013220910ull}},
+{{16417376600077528847ull, 16362772585324342261ull,
+ 15395780307345456984ull, 7874766846266526137ull}},
+{{12566703384262149482ull, 10226732865827713913ull,
+ 2704833664449828759ull, 4921729278916578836ull}},
+{{1873321175045523140ull, 8171730063857254488ull,
+ 3381042080562285949ull, 6152161598645723545ull}},
+{{2341651468806903925ull, 14826348598248956014ull,
+ 8837988619130245340ull, 7690201998307154431ull}},
+{{15298590223286478665ull, 43095837050821700ull,
+ 12441271914597485194ull, 4806376248941971519ull}},
+{{676493705398546716ull, 9277241833168302934ull,
+ 10939903874819468588ull, 6007970311177464399ull}},
+{{10068989168602959202ull, 11596552291460378667ull,
+ 9063193825096947831ull, 7509962888971830499ull}},
+{{3987275221163155550ull, 14165374209803818523ull,
+ 3358653131471898442ull, 4693726805607394062ull}},
+{{372408008026556533ull, 8483345725399997346ull,
+ 13421688451194648861ull, 5867158507009242577ull}},
+{{9688882046887971474ull, 15215868175177384586ull,
+ 2942052508711147364ull, 7333948133761553222ull}},
+{{2887730521755188535ull, 573091145262179117ull,
+ 12900937672743710014ull, 9167435167201941527ull}},
+{{4110674585310686786ull, 14193240021071025660ull,
+ 14980615073105900614ull, 5729646979501213454ull}},
+{{5138343231638358483ull, 8518177989484006267ull,
+ 9502396804527599960ull, 7162058724376516818ull}},
+{{1811243021120560199ull, 10647722486855007834ull,
+ 2654623968804724142ull, 8952573405470646023ull}},
+{{5743712906627738029ull, 2043140535856991992ull,
+ 8576669008144034445ull, 5595358378419153764ull}},
+{{7179641133284672536ull, 7165611688248627894ull,
+ 10720836260180043056ull, 6994197973023942205ull}},
+{{18197923453460616478ull, 8957014610310784867ull,
+ 18012731343652441724ull, 8742747466279927756ull}},
+{{9067859149199191347ull, 14821506168299016350ull,
+ 2034585052928000269ull, 5464217166424954848ull}},
+{{2111451899644213375ull, 4691824655091606726ull,
+ 2543231316160000337ull, 6830271458031193560ull}},
+{{11862686911410042527ull, 10476466837291896311ull,
+ 3179039145200000421ull, 8537839322538991950ull}},
+{{14331708347272358436ull, 8853634782521129146ull,
+ 15821957521032163975ull, 5336149576586869968ull}},
+{{8691263397235672236ull, 6455357459724023529ull,
+ 1330702827580653353ull, 6670186970733587461ull}},
+{{15475765264971978199ull, 12680882843082417315ull,
+ 6275064552903204595ull, 8337733713416984326ull}},
+{{7366510281393792423ull, 5619708767712816870ull,
+ 17756973400846666584ull, 5211083570885615203ull}},
+{{18431509888597016336ull, 7024635959641021087ull,
+ 17584530732630945326ull, 6513854463607019004ull}},
+{{18427701342318882516ull, 18004166986406052167ull,
+ 3533919342079130041ull, 8142318079508773756ull}},
+{{18434842366590383429ull, 4335075338862700748ull,
+ 11432071625654232084ull, 5088948799692983597ull}},
+{{4596808884528427670ull, 5418844173578375936ull, 455031476785626393ull,
+ 6361185999616229497ull}},
+{{5746011105660534587ull, 11385241235400357824ull,
+ 5180475364409420895ull, 7951482499520286871ull}},
+{{3591256941037834117ull, 14033304799766305496ull,
+ 10155326130396969915ull, 4969676562200179294ull}},
+{{4489071176297292646ull, 12929944981280493966ull,
+ 3470785626141436586ull, 6212095702750224118ull}},
+{{14834711007226391616ull, 6939059189745841649ull,
+ 13561854069531571541ull, 7765119628437780147ull}},
+{{2354165351875412904ull, 6642755002804844983ull,
+ 6170315784243538261ull, 4853199767773612592ull}},
+{{16777764745126429842ull, 12915129771933444132ull,
+ 7712894730304422826ull, 6066499709717015740ull}},
+{{2525461857698485686ull, 6920540178062029358ull,
+ 9641118412880528533ull, 7583124637146269675ull}},
+{{15413471716343717266ull, 6631180620502462300ull,
+ 3719855998836636381ull, 4739452898216418547ull}},
+{{820095571720094967ull, 12900661794055465780ull, 38133980118407572ull,
+ 5924316122770523184ull}},
+{{1025119464650118708ull, 16125827242569332225ull, 47667475148009465ull,
+ 7405395153463153980ull}},
+{{12169914711474793953ull, 3161112998964750784ull,
+ 9253164208822281724ull, 4628371970914471237ull}},
+{{15212393389343492441ull, 3951391248705938480ull,
+ 16178141279455240059ull, 5785464963643089046ull}},
+{{568747662969813935ull, 327553042455035197ull, 10999304562464274266ull,
+ 7231831204553861308ull}},
+{{5322620597139655322ull, 9632813339923569804ull,
+ 13749130703080342832ull, 9039789005692326635ull}},
+{{12550009910067060385ull, 6020508337452231127ull,
+ 6287363680211520318ull, 5649868128557704147ull}},
+{{11075826369156437577ull, 16749007458670064717ull,
+ 3247518581837012493ull, 7062335160697130184ull}},
+{{9724906163383259ull, 7101201268055417185ull, 4059398227296265617ull,
+ 8827918950871412730ull}},
+{{11535293112420584297ull, 15967465838603105500ull,
+ 7148809910487553914ull, 5517449344294632956ull}},
+{{14419116390525730371ull, 10735960261399106067ull,
+ 8936012388109442393ull, 6896811680368291195ull}},
+{{13412209469729775060ull, 18031636345176270488ull,
+ 6558329466709415087ull, 8621014600460363994ull}},
+{{8382630918581109413ull, 18187301743376250911ull,
+ 8710641935120772333ull, 5388134125287727496ull}},
+{{5866602629798998862ull, 8899069123938149927ull,
+ 10888302418900965417ull, 6735167656609659370ull}},
+{{2721567268821360673ull, 15735522423350075313ull,
+ 4387005986771430963ull, 8418959570762074213ull}},
+{{13230194589081820181ull, 7528858505380103118ull,
+ 5047721750945838304ull, 5261849731726296383ull}},
+{{7314371199497499418ull, 9411073131725128898ull,
+ 1697966170254909976ull, 6577312164657870479ull}},
+{{18366336036226650080ull, 11763841414656411122ull,
+ 15957515768100801182ull, 8221640205822338098ull}},
+{{16090646041069044204ull, 2740714865732869047ull,
+ 14585133373490388643ull, 5138525128638961311ull}},
+{{15501621532908917351ull, 17260951637448250021ull,
+ 13619730698435597899ull, 6423156410798701639ull}},
+{{5541968860853982977ull, 16964503528382924623ull,
+ 12412977354617109470ull, 8028945513498377049ull}},
+{{10381259565674821217ull, 5991128686811939985ull,
+ 840581818994611563ull, 5018090945936485656ull}},
+{{17588260475520914425ull, 2877224840087537077ull,
+ 1050727273743264454ull, 6272613682420607070ull}},
+{{8150267539118979319ull, 12819903086964197155ull,
+ 10536781129033856375ull, 7840767103025758837ull}},
+{{2788074202735668122ull, 14929968456993705078ull,
+ 8891331214859854186ull, 4900479439391099273ull}},
+{{12708464790274360961ull, 9439088534387355539ull,
+ 15725850037002205637ull, 6125599299238874091ull}},
+{{11273894969415563297ull, 16410546686411582328ull,
+ 15045626527825369142ull, 7656999124048592614ull}},
+{{7046184355884727061ull, 5644905660579851051ull,
+ 4791830561463467810ull, 4785624452530370384ull}},
+{{4196044426428520922ull, 16279504112579589622ull,
+ 5989788201829334762ull, 5982030565662962980ull}},
+{{14468427569890426960ull, 11126008103869711219ull,
+ 7487235252286668453ull, 7477538207078703725ull}},
+{{6736924221967822898ull, 9259598074132263464ull,
+ 6985365041892861735ull, 4673461379424189828ull}},
+{{8421155277459778623ull, 6962811574237941426ull,
+ 8731706302366077169ull, 5841826724280237285ull}},
+{{1303072059969947470ull, 13315200486224814687ull,
+ 15526318896384984365ull, 7302283405350296606ull}},
+{{15463898130244598050ull, 2808942552498854646ull,
+ 10184526583626454649ull, 9127854256687870758ull}},
+{{5053250312975485877ull, 13284804141380253914ull,
+ 1753643096339146251ull, 5704908910429919224ull}},
+{{15539934928074133155ull, 11994319158297929488ull,
+ 2192053870423932814ull, 7131136138037399030ull}},
+{{978174586383114827ull, 5769526911017636053ull,
+ 11963439374884691826ull, 8913920172546748787ull}},
+{{2917202125703140719ull, 8217640337813410437ull,
+ 5171306600089238439ull, 5571200107841717992ull}},
+{{8258188675556313803ull, 5660364403839375142ull,
+ 6464133250111548049ull, 6964000134802147490ull}},
+{{1099363807590616445ull, 11687141523226606832ull,
+ 17303538599494210869ull, 8705000168502684362ull}},
+{{687102379744135279ull, 9610306461230323222ull,
+ 15426397643111269697ull, 5440625105314177726ull}},
+{{10082250011534944906ull, 16624569094965291931ull,
+ 10059625017034311313ull, 6800781381642722158ull}},
+{{7991126495991293228ull, 6945653313424451202ull,
+ 3351159234438113334ull, 8500976727053402698ull}},
+{{9606140078421946172ull, 18176091376172445713ull,
+ 6706160539951208737ull, 5313110454408376686ull}},
+{{16619361116454820619ull, 8885056164933393429ull,
+ 17606072711793786730ull, 6641388068010470857ull}},
+{{6939143340286362061ull, 1882948169311965979ull,
+ 8172532834460069701ull, 8301735085013088572ull}},
+{{2031121578465282337ull, 3482685615033672689ull,
+ 14331205058392319371ull, 5188584428133180357ull}},
+{{7150587991508990825ull, 18188415074074254573ull,
+ 4078948267708235501ull, 6485730535166475447ull}},
+{{13549921007813626435ull, 8900460787310654504ull,
+ 486999316207906473ull, 8107163168958094309ull}},
+{{8468700629883516522ull, 17092003038137628825ull,
+ 2610217581843635497ull, 5066976980598808943ull}},
+{{15197561805781783556ull, 7529945742389872319ull,
+ 17097830032586708084ull, 6333721225748511178ull}},
+{{14385266238799841541ull, 9412432177987340399ull,
+ 12148915503878609297ull, 7917151532185638973ull}},
+{{15908320426890982819ull, 17411985157310557509ull,
+ 9898915199137824762ull, 4948219707616024358ull}},
+{{6050342478331564812ull, 12541609409783421079ull,
+ 3150271962067505145ull, 6185274634520030448ull}},
+{{2951242079487068111ull, 1841953706947112637ull,
+ 3937839952584381432ull, 7731593293150038060ull}},
+{{4150369308893111522ull, 1151221066841945398ull,
+ 11684522007220014203ull, 4832245808218773787ull}},
+{{14411333672971165210ull, 15274084388834595459ull,
+ 9993966490597629849ull, 6040307260273467234ull}},
+{{13402481072786568608ull, 5257547430761080612ull,
+ 3269086076392261504ull, 7550384075341834043ull}},
+{{17599922707346381188ull, 3285967144225675382ull,
+ 18184079862241021104ull, 4718990047088646276ull}},
+{{12776531347328200677ull, 4107458930282094228ull,
+ 4283355754091724764ull, 5898737558860807846ull}},
+{{15970664184160250846ull, 5134323662852617785ull,
+ 14577566729469431763ull, 7373421948576009807ull}},
+{{6128272174918149846ull, 1806218560138384328ull,
+ 13610272393409401800ull, 9216777435720012259ull}},
+{{3830170109323843654ull, 1128886600086490205ull,
+ 6200577236667182173ull, 5760485897325007662ull}},
+{{9399398655082192471ull, 6022794268535500660ull,
+ 16974093582688753524ull, 7200607371656259577ull}},
+{{11749248318852740589ull, 7528492835669375825ull,
+ 7382558923078778193ull, 9000759214570324472ull}},
+{{425751171641881012ull, 16234523068361829651ull,
+ 4614099326924236370ull, 5625474509106452795ull}},
+{{14367247019834514977ull, 11069781798597511255ull,
+ 1155938140227907559ull, 7031843136383065994ull}},
+{{13347372756365755817ull, 9225541229819501165ull,
+ 10668294712139660257ull, 8789803920478832492ull}},
+{{10647950981942291338ull, 17295178314705657988ull,
+ 15891056231942063468ull, 5493627450299270307ull}},
+{{13309938727427864172ull, 3172228819672520869ull,
+ 15252134271500191432ull, 6867034312874087884ull}},
+{{2802365354002666503ull, 3965286024590651087ull, 618423765665687674ull,
+ 8583792891092609856ull}},
+{{8669007373892748421ull, 7089989783796544833ull, 386514853541054796ull,
+ 5364870556932881160ull}},
+{{15447945235793323430ull, 8862487229745681041ull,
+ 483143566926318495ull, 6706088196166101450ull}},
+{{5474873489459490575ull, 6466423018754713398ull,
+ 9827301495512673927ull, 8382610245207626812ull}},
+{{17256853986194345322ull, 10959043414362777729ull,
+ 15365435471550197012ull, 5239131403254766757ull}},
+{{7736009427460767940ull, 13698804267953472162ull,
+ 5371736284155582553ull, 6548914254068458447ull}},
+{{446639747471184117ull, 3288447279659676491ull, 2102984336767090288ull,
+ 8186142817585573059ull}},
+{{16420050906665347737ull, 2055279549787297806ull,
+ 17455266274975289094ull, 5116339260990983161ull}},
+{{11301691596476908863ull, 11792471474088898066ull,
+ 7984024788436947655ull, 6395424076238728952ull}},
+{{4903742458741360271ull, 10128903324183734679ull,
+ 9980030985546184569ull, 7994280095298411190ull}},
+{{9982368064354432026ull, 17859779623683303934ull,
+ 1625833347538977451ull, 4996425059561506994ull}},
+{{3254588043588264224ull, 17713038511176742014ull,
+ 11255663721278497622ull, 6245531324451883742ull}},
+{{13291607091340106088ull, 12917926102116151709ull,
+ 4846207614743346220ull, 7806914155564854678ull}},
+{{10613097441301260257ull, 17297075850677370626ull,
+ 16863937814496755099ull, 4879321347228034173ull}},
+{{4042999764771799513ull, 17009658794919325379ull,
+ 7244864212838780162ull, 6099151684035042717ull}},
+{{442063687537361487ull, 12038701456794380916ull,
+ 13667766284475863107ull, 7623939605043803396ull}},
+{{9499661841565626738ull, 5218345401282794120ull,
+ 17765725964652190250ull, 4764962253152377122ull}},
+{{11874577301957033422ull, 15746303788458268458ull,
+ 12983785418960462004ull, 5956202816440471403ull}},
+{{5619849590591515969ull, 1236135661863283957ull,
+ 11618045755273189602ull, 7445253520550589254ull}},
+{{5818249003333391433ull, 5384270807091940377ull,
+ 2649592578618355597ull, 4653283450344118284ull}},
+{{11884497272594127195ull, 11342024527292313375ull,
+ 3311990723272944496ull, 5816604312930147855ull}},
+{{10243935572315271090ull, 14177530659115391719ull,
+ 17975046459373344332ull, 7270755391162684818ull}},
+{{8193233446966700958ull, 17721913323894239649ull,
+ 13245436037361904607ull, 9088444238953356023ull}},
+{{16649985950422657859ull, 17993724855074981636ull,
+ 15195926550992272235ull, 5680277649345847514ull}},
+{{2365738364318770708ull, 17880470050416339142ull,
+ 9771536151885564486ull, 7100347061682309393ull}},
+{{12180544992253239193ull, 13127215526165648119ull,
+ 16826106208284343512ull, 8875433827102886741ull}},
+{{14530369647799356352ull, 8204509703853530074ull,
+ 12822159389391408647ull, 5547146141939304213ull}},
+{{8939590022894419631ull, 5643951111389524689ull,
+ 2192641181457097097ull, 6933932677424130267ull}},
+{{15786173547045412443ull, 11666624907664293765ull,
+ 16575859532103535083ull, 8667415846780162833ull}},
+{{12172201476117076729ull, 4985797558076489651ull,
+ 3442383179923627571ull, 5417134904237601771ull}},
+{{10603565826718958007ull, 1620560929168224160ull,
+ 18138037030186698176ull, 6771418630297002213ull}},
+{{13254457283398697509ull, 2025701161460280200ull,
+ 8837488232451209008ull, 8464273287871252767ull}},
+{{8284035802124185943ull, 1266063225912675125ull,
+ 12440959172923087486ull, 5290170804919532979ull}},
+{{14966730771082620333ull, 10805951069245619714ull,
+ 10939512947726471453ull, 6612713506149416224ull}},
+{{9485041426998499608ull, 18119124854984412547ull,
+ 13674391184658089316ull, 8265891882686770280ull}},
+{{3622307882660368303ull, 2101080997510482034ull,
+ 8546494490411305823ull, 5166182426679231425ull}},
+{{13751256890180236187ull, 16461409302170266254ull,
+ 15294804131441520182ull, 6457728033349039281ull}},
+{{7965699075870519426ull, 11353389590858057010ull,
+ 5283447109019736516ull, 8072160041686299102ull}},
+{{9590247940846462545ull, 16319240531141061439ull,
+ 17137212498419499034ull, 5045100026053936938ull}},
+{{7376123907630690277ull, 11175678627071550991ull,
+ 12198143586169597985ull, 6306375032567421173ull}},
+{{4608468866110974942ull, 134540228557275027ull, 1412621427429833770ull,
+ 7882968790709276467ull}},
+{{574450032105665387ull, 4695773661275684796ull,
+ 17023789456639503770ull, 4926855494193297791ull}},
+{{718062540132081734ull, 15093089113449381803ull,
+ 16668050802371991808ull, 6158569367741622239ull}},
+{{14732636230447265879ull, 419617318102175637ull,
+ 16223377484537601857ull, 7698211709677027799ull}},
+{{11513740653243235127ull, 11791475869882329533ull,
+ 17057139955477083016ull, 4811382318548142374ull}},
+{{557117761271880196ull, 14739344837352911917ull,
+ 12098052907491577962ull, 6014227898185177968ull}},
+{{5308083220017238149ull, 9200809009836364088ull,
+ 15122566134364472453ull, 7517784872731472460ull}},
+{{3317552012510773843ull, 8056348640361421507ull, 228231797123019475ull,
+ 4698615545457170288ull}},
+{{17981998070920631016ull, 5458749782024388979ull,
+ 285289746403774344ull, 5873269431821462860ull}},
+{{17865811570223400866ull, 6823437227530486224ull,
+ 356612183004717930ull, 7341586789776828575ull}},
+{{3885520389069699467ull, 17752668571267883589ull,
+ 14280823284038061124ull, 9176983487221035718ull}},
+{{4734293252382256119ull, 1872045820187651435ull,
+ 4313828534096400299ull, 5735614679513147324ull}},
+{{1306180547050432244ull, 16175115330516728006ull,
+ 5392285667620500373ull, 7169518349391434155ull}},
+{{10856097720667816113ull, 6383836107863746295ull,
+ 2128671066098237563ull, 8961897936739292694ull}},
+{{13702590103058466927ull, 1684054558201147482ull,
+ 15165477471593562189ull, 5601186210462057933ull}},
+{{7904865591968307851ull, 6716754216178822257ull,
+ 5121788784209789024ull, 7001482763077572417ull}},
+{{14492768008387772717ull, 8395942770223527821ull,
+ 11013921998689624184ull, 8751853453846965521ull}},
+{{11363823014456051900ull, 5247464231389704888ull,
+ 18412916295249484875ull, 5469908408654353450ull}},
+{{14204778768070064875ull, 1947644270809743206ull,
+ 13792773332207080286ull, 6837385510817941813ull}},
+{{8532601423232805286ull, 11657927375366954816ull,
+ 3405908609976686645ull, 8546731888522427267ull}},
+{{5332875889520503304ull, 9592047618818040712ull,
+ 18269593945731286817ull, 5341707430326517041ull}},
+{{6666094861900629130ull, 16601745541949938794ull,
+ 9001934376881944809ull, 6677134287908146302ull}},
+{{17555990614230562220ull, 6917123872155259780ull,
+ 2029045934247655204ull, 8346417859885182878ull}},
+{{1749122097039325580ull, 13546574456951813171ull,
+ 15103211764186948214ull, 5216511162428239298ull}},
+{{16021460676581320687ull, 7709846034334990655ull,
+ 9655642668378909460ull, 6520638953035299123ull}},
+{{15415139827299262954ull, 9637307542918738319ull,
+ 7457867317046248921ull, 8150798691294123904ull}},
+{{16551991419703121203ull, 17552532260392681209ull,
+ 4661167073153905575ull, 5094249182058827440ull}},
+{{6854931219346737791ull, 17328979307063463608ull,
+ 5826458841442381969ull, 6367811477573534300ull}},
+{{8568664024183422239ull, 7826166078547165798ull,
+ 7283073551802977462ull, 7959764346966917875ull}},
+{{743728996687250995ull, 279667780664590720ull, 2246077960663166962ull,
+ 4974852716854323672ull}},
+{{929661245859063744ull, 9572956762685514208ull, 2807597450828958702ull,
+ 6218565896067904590ull}},
+{{1162076557323829680ull, 2742823916502116952ull,
+ 12732868850390974186ull, 7773207370084880737ull}},
+{{726297848327393550ull, 6325950966241210999ull, 1040514003853277010ull,
+ 4858254606303050461ull}},
+{{14742930365691405650ull, 17130810744656289556ull,
+ 5912328523243984166ull, 6072818257878813076ull}},
+{{18428662957114257062ull, 12190141393965586137ull,
+ 7390410654054980208ull, 7591022822348516345ull}},
+{{4600385320555328808ull, 7618838371228491336ull,
+ 16148221704852832390ull, 4744389263967822715ull}},
+{{5750481650694161010ull, 300175927180838362ull,
+ 15573591112638652584ull, 5930486579959778394ull}},
+{{16411474100222477070ull, 375219908976047952ull,
+ 10243616853943539922ull, 7413108224949722993ull}},
+{{10257171312639048169ull, 4846198461537417874ull,
+ 17931475579783182211ull, 4633192640593576870ull}},
+{{3598092103944034403ull, 1446062058494384439ull,
+ 13190972437874201956ull, 5791490800741971088ull}},
+{{18332673185212206716ull, 1807577573117980548ull,
+ 16488715547342752445ull, 7239363500927463860ull}},
+{{4469097407805706779ull, 6871157984824863590ull,
+ 2164150360468888940ull, 9049204376159329826ull}},
+{{16628243935160730449ull, 13517845777370315551ull,
+ 5964279993720443491ull, 5655752735099581141ull}},
+{{16173618900523525157ull, 12285621203285506535ull,
+ 12067036010577942268ull, 7069690918874476426ull}},
+{{15605337607227018542ull, 15357026504106883169ull,
+ 5860422976367652027ull, 8837113648593095533ull}},
+{{2835806976875804733ull, 7292298555853108029ull,
+ 5968607369443476469ull, 5523196030370684708ull}},
+{{8156444739522143820ull, 13727059213243772940ull,
+ 7460759211804345586ull, 6903995037963355885ull}},
+{{10195555924402679775ull, 7935451979699940367ull,
+ 13937635033182819887ull, 8629993797454194856ull}},
+{{13289751480392756715ull, 11877186514953544585ull,
+ 8711021895739262429ull, 5393746123408871785ull}},
+{{2777131295208782182ull, 1011425088409767020ull,
+ 15500463388101465941ull, 6742182654261089731ull}},
+{{3471414119010977728ull, 5875967378939596679ull,
+ 14763893216699444522ull, 8427728317826362164ull}},
+{{9087162852022942936ull, 8284165630264635828ull, 4061223582377018ull,
+ 5267330198641476353ull}},
+{{11358953565028678670ull, 1131835000976018977ull,
+ 4616762547905359177ull, 6584162748301845441ull}},
+{{363633901003684625ull, 6026479769647411626ull,
+ 10382639203309086875ull, 8230203435377306801ull}},
+{{4838957206554690795ull, 1460706846815938314ull,
+ 18018364548136649057ull, 5143877147110816750ull}},
+{{15272068545048139302ull, 6437569576947310796ull,
+ 13299583648316035513ull, 6429846433888520938ull}},
+{{643341607600622511ull, 12658647989611526400ull,
+ 7401107523540268583ull, 8037308042360651173ull}},
+{{402088504750389069ull, 14829184021148285856ull,
+ 6931535211426361816ull, 5023317526475406983ull}},
+{{502610630937986337ull, 89735952725805704ull, 4052732995855564367ull,
+ 6279146908094258729ull}},
+{{628263288672482921ull, 13947227996189420842ull,
+ 9677602263246843362ull, 7848933635117823411ull}},
+{{5004350573847689730ull, 13328703516045775930ull,
+ 3742658405315583149ull, 4905583521948639632ull}},
+{{15478810254164387970ull, 2825821339775056200ull,
+ 4678323006644478937ull, 6131979402435799540ull}},
+{{901768743995933346ull, 8143962693146208155ull, 5847903758305598671ull,
+ 7664974253044749425ull}},
+{{16704506529493316006ull, 12007505710857461952ull,
+ 15184154895009468929ull, 4790608908152968390ull}},
+{{2433889088157093391ull, 1174324083289663729ull,
+ 9756821581907060354ull, 5988261135191210488ull}},
+{{7654047378623754642ull, 10691277140966855469ull,
+ 12196026977383825442ull, 7485326418989013110ull}},
+{{7089622620853540604ull, 11293734231531672572ull,
+ 3010830842437502997ull, 4678329011868133194ull}},
+{{8862028276066925755ull, 282109734132427003ull,
+ 12986910589901654555ull, 5847911264835166492ull}},
+{{6465849326656269289ull, 14187695222947697466ull,
+ 16233638237377068193ull, 7309889081043958115ull}},
+{{17305683695175112419ull, 3899560973402458120ull,
+ 15680361778293947338ull, 9137361351304947644ull}},
+{{10816052309484445262ull, 7048911626803924229ull,
+ 576854074578941278ull, 5710850844565592278ull}},
+{{18131751405282944482ull, 18034511570359681094ull,
+ 9944439630078452405ull, 7138563555706990347ull}},
+{{13441317219748904794ull, 8708081407667437656ull,
+ 7818863519170677603ull, 8923204444633737934ull}},
+{{8400823262343065496ull, 3136707870578454583ull, 275103681054285598ull,
+ 5577002777896086209ull}},
+{{5889343059501443966ull, 13144256875077844037ull,
+ 4955565619745244901ull, 6971253472370107761ull}},
+{{11973364842804192862ull, 2595263038565141334ull,
+ 10806143043108944031ull, 8714066840462634701ull}},
+{{2871667008325232635ull, 8539568426744295190ull,
+ 9059682411156783971ull, 5446291775289146688ull}},
+{{12812955797261316601ull, 6062774515002981083ull,
+ 11324603013945979964ull, 6807864719111433360ull}},
+{{11404508728149257848ull, 7578468143753726354ull,
+ 14155753767432474955ull, 8509830898889291700ull}},
+{{11739503973520674059ull, 2430699580632385019ull,
+ 18070718141500072655ull, 5318644311805807312ull}},
+{{10062693948473454670ull, 16873432531072644986ull,
+ 4141653603165539202ull, 6648305389757259141ull}},
+{{3354995398737042529ull, 11868418626986030425ull,
+ 9788753022384311907ull, 8310381737196573926ull}},
+{{13626087170279121341ull, 5111918632652575063ull,
+ 1506284620562807038ull, 5193988585747858704ull}},
+{{12420922944421513772ull, 15613270327670494637ull,
+ 1882855775703508797ull, 6492485732184823380ull}},
+{{1691095625244728503ull, 5681529854305954585ull,
+ 2353569719629385997ull, 8115607165231029225ull}},
+{{12586149811846425074ull, 5856799168154915567ull,
+ 13000196120836836008ull, 5072254478269393265ull}},
+{{11121001246380643439ull, 7320998960193644459ull,
+ 2415187095763881298ull, 6340318097836741582ull}},
+{{9289565539548416394ull, 18374620737096831382ull,
+ 12242355906559627430ull, 7925397622295926977ull}},
+{{1194292443790372343ull, 6872451942258131710ull, 733943413958685288ull,
+ 4953373513934954361ull}},
+{{10716237591592741236ull, 8590564927822664637ull,
+ 5529115285875744514ull, 6191716892418692951ull}},
+{{18006983007918314449ull, 1514834122923554988ull,
+ 2299708088917292739ull, 7739646115523366189ull}},
+{{2030992343094170723ull, 17087672391323079532ull,
+ 3743160564787001913ull, 4837278822202103868ull}},
+{{2538740428867713403ull, 7524532433871685703ull,
+ 4678950705983752392ull, 6046598527752629835ull}},
+{{17008483591366805466ull, 9405665542339607128ull,
+ 1237002364052302586ull, 7558248159690787294ull}},
+{{10630302244604253417ull, 10490226982389642359ull,
+ 14608184532814852828ull, 4723905099806742058ull}},
+{{8676191787327928867ull, 13112783727987052949ull,
+ 9036858629163790227ull, 5904881374758427573ull}},
+{{15456925752587298987ull, 11779293641556428282ull,
+ 15907759304882125688ull, 7381101718448034466ull}},
+{{14272264613794449771ull, 7362058525972767676ull,
+ 14554035583978716459ull, 4613188574030021541ull}},
+{{17840330767243062214ull, 4590887139038571691ull,
+ 4357486424691231862ull, 5766485717537526927ull}},
+{{17688727440626439863ull, 14961980960652990422ull,
+ 835172012436651923ull, 7208107146921908659ull}},
+{{12887537263928274021ull, 14090790182388850124ull,
+ 14879023070827978616ull, 9010133933652385823ull}},
+{{17278082826809947071ull, 8806743863993031327ull,
+ 16216918446908568491ull, 5631333708532741139ull}},
+{{16985917515085045935ull, 6396743811563901255ull,
+ 15659462040208322710ull, 7039167135665926424ull}},
+{{16620710875428919514ull, 17219301801309652377ull,
+ 1127583476550851771ull, 8798958919582408031ull}},
+{{3470415269501992841ull, 8456220616604838784ull,
+ 7622268700485364213ull, 5499349324739005019ull}},
+{{4338019086877491051ull, 15181961789183436384ull,
+ 4916149857179317362ull, 6874186655923756274ull}},
+{{5422523858596863813ull, 9754080199624519672ull,
+ 15368559358328922511ull, 8592733319904695342ull}},
+{{3389077411623039883ull, 13013829152406406651ull,
+ 4993663580528188665ull, 5370458324940434589ull}},
+{{18071404819810963566ull, 2432228385225844601ull,
+ 10853765494087623736ull, 6713072906175543236ull}},
+{{8754197969481540746ull, 3040285481532305752ull,
+ 13567206867609529670ull, 8391341132719429045ull}},
+{{5471373730925962966ull, 15735236481239854807ull,
+ 10785347301469649995ull, 5244588207949643153ull}},
+{{2227531145230065804ull, 15057359583122430605ull,
+ 18093370145264450398ull, 6555735259937053941ull}},
+{{7396099949964970158ull, 9598327442048262448ull,
+ 8781654626298399286ull, 8194669074921317427ull}},
+{{4622562468728106349ull, 1387268632852776126ull,
+ 3182691132222805602ull, 5121668171825823392ull}},
+{{15001575122764908744ull, 10957457827920745965ull,
+ 3978363915278507002ull, 6402085214782279240ull}},
+{{4916910848173972218ull, 4473450248046156649ull,
+ 4972954894098133753ull, 8002606518477849050ull}},
+{{14602284326177202397ull, 14325121451097317665ull,
+ 7719782827238721499ull, 5001629074048655656ull}},
+{{4417797352439339284ull, 13294715795444259178ull,
+ 9649728534048401874ull, 6252036342560819570ull}},
+{{14745618727403949912ull, 7395022707450548164ull,
+ 2838788630705726535ull, 7815045428201024463ull}},
+{{18439383741482244503ull, 11539418219797674458ull,
+ 8691771921832160940ull, 4884403392625640289ull}},
+{{13825857639998029821ull, 14424272774747093073ull,
+ 15476400920717589079ull, 6105504240782050361ull}},
+{{3447263994715373564ull, 13418654950006478438ull,
+ 5510443095614822637ull, 7631880300977562952ull}},
+{{15989598051979272190ull, 10692502352967742975ull,
+ 3444026934759264148ull, 4769925188110976845ull}},
+{{15375311546546702333ull, 13365627941209678719ull,
+ 8916719686876468089ull, 5962406485138721056ull}},
+{{14607453414755990013ull, 2871976871229934687ull,
+ 11145899608595585112ull, 7453008106423401320ull}},
+{{16047187411863575614ull, 1794985544518709179ull,
+ 6966187255372240695ull, 4658130066514625825ull}},
+{{15447298246402081613ull, 16078789985930550186ull,
+ 13319420087642688772ull, 5822662583143282281ull}},
+{{10085750771147826209ull, 1651743408703636117ull,
+ 2814217054271197254ull, 7278328228929102852ull}},
+{{17218874482362170665ull, 11288051297734320954ull,
+ 3517771317838996567ull, 9097910286161378565ull}},
+{{15373482569903744570ull, 13972561088725032452ull,
+ 4504450082863066806ull, 5686193928850861603ull}},
+{{770109138670129096ull, 8242329324051514758ull, 1018876585151445604ull,
+ 7107742411063577004ull}},
+{{10186008460192437178ull, 10302911655064393447ull,
+ 1273595731439307005ull, 8884678013829471255ull}},
+{{13283784315261355092ull, 8745162793628939856ull,
+ 7713526359790648734ull, 5552923758643419534ull}},
+{{16604730394076693865ull, 1708081455181399012ull,
+ 418535912883535110ull, 6941154698304274418ull}},
+{{2309168918886315715ull, 11358473855831524574ull,
+ 9746541927959194695ull, 8676443372880343022ull}},
+{{15278288629586111034ull, 14016575187535784714ull,
+ 1479902686547108780ull, 5422777108050214389ull}},
+{{9874488750127862985ull, 17520718984419730893ull,
+ 6461564376611273879ull, 6778471385062767986ull}},
+{{16954796956087216635ull, 17289212712097275712ull,
+ 17300327507618868157ull, 8473089231328459982ull}},
+{{10596748097554510397ull, 13111600954274491272ull,
+ 6201018673834404694ull, 5295680769580287489ull}},
+{{13245935121943137996ull, 7166129155988338282ull,
+ 12362959360720393772ull, 6619600961975359361ull}},
+{{7334046865574146687ull, 8957661444985422853ull,
+ 1618641145618328503ull, 8274501202469199202ull}},
+{{6889622300197535632ull, 12516067430756971139ull,
+ 5623336734438843218ull, 5171563251543249501ull}},
+{{4000341856819531635ull, 6421712251591438116ull,
+ 11640856936475941927ull, 6464454064429061876ull}},
+{{5000427321024414544ull, 3415454296061909741ull,
+ 14551071170594927409ull, 8080567580536327345ull}},
+{{5431110084853953042ull, 13663873981107163348ull,
+ 2176890453980747774ull, 5050354737835204591ull}},
+{{6788887606067441303ull, 7856470439529178377ull,
+ 16556171122758098430ull, 6312943422294005738ull}},
+{{13097795526011689532ull, 597216012556697163ull,
+ 11471841866592847230ull, 7891179277867507173ull}},
+{{5880279194543612006ull, 14208318063130099439ull,
+ 9475744175834223470ull, 4931987048667191983ull}},
+{{2738662974752127103ull, 8537025542057848491ull,
+ 7232994201365391434ull, 6164983810833989979ull}},
+{{17258386773722322591ull, 1447909890717534805ull,
+ 4429556733279351389ull, 7706229763542487474ull}},
+{{13092334742790145571ull, 3210786690912153205ull,
+ 7380158976726982522ull, 4816393602214054671ull}},
+{{2530360373205518252ull, 13236855400494967315ull,
+ 4613512702481340248ull, 6020492002767568339ull}},
+{{16998008521789061527ull, 16546069250618709143ull,
+ 1155204859674287406ull, 7525615003459460424ull}},
+{{17541284353759245311ull, 5729607263209305310ull,
+ 722003037296429629ull, 4703509377162162765ull}},
+{{12703233405344280830ull, 11773695097439019542ull,
+ 5514189815047924940ull, 5879386721452703456ull}},
+{{6655669719825575229ull, 14717118871798774428ull,
+ 6892737268809906175ull, 7349233401815879320ull}},
+{{8319587149781969037ull, 13784712571321080131ull,
+ 8615921586012382719ull, 9186541752269849150ull}},
+{{2893898959400036696ull, 15532974384716756938ull,
+ 773264972830351295ull, 5741588595168655719ull}},
+{{12840745736104821678ull, 14804531962468558268ull,
+ 14801639271320102831ull, 7176985743960819648ull}},
+{{16050932170131027097ull, 13893978934658309931ull,
+ 55305015440576923ull, 8971232179951024561ull}},
+{{7725989597118197984ull, 6377893824947749755ull,
+ 11563780680718830337ull, 5607020112469390350ull}},
+{{5045800977970359576ull, 12584053299612075098ull,
+ 5231353814043762113ull, 7008775140586737938ull}},
+{{15530623259317725278ull, 1895008569232930160ull,
+ 15762564304409478450ull, 8760968925733422422ull}},
+{{9706639537073578299ull, 5796066374197969254ull,
+ 5239916671828536127ull, 5475605578583389014ull}},
+{{2909927384487197065ull, 2633396949320073664ull,
+ 15773267876640445967ull, 6844506973229236267ull}},
+{{3637409230608996332ull, 17126804241932255792ull,
+ 15104898827373169554ull, 8555633716536545334ull}},
+{{2273380769130622707ull, 15315938669635047774ull,
+ 4828875748680843067ull, 5347271072835340834ull}},
+{{12065097998268054192ull, 14533237318616421813ull,
+ 15259466722705829642ull, 6684088841044176042ull}},
+{{1246314442552904028ull, 8943174611415751459ull,
+ 9850961366527511245ull, 8355111051305220053ull}},
+{{16919847591091422682ull, 7895327141348538613ull,
+ 8462693863293388480ull, 5221944407065762533ull}},
+{{7314751433582114640ull, 9869158926685673267ull,
+ 15190053347544123504ull, 6527430508832203166ull}},
+{{4531753273550255396ull, 12336448658357091584ull,
+ 9764194647575378572ull, 8159288136040253958ull}},
+{{2832345795968909623ull, 16933652448327958048ull,
+ 1490935636307223703ull, 5099555085025158724ull}},
+{{3540432244961137028ull, 16555379541982559656ull,
+ 1863669545384029629ull, 6374443856281448405ull}},
+{{4425540306201421285ull, 6859166372196035858ull,
+ 6941272950157424941ull, 7968054820351810506ull}},
+{{7377648709803276207ull, 6592821991836216363ull,
+ 8949981612275778492ull, 4980034262719881566ull}},
+{{4610374868826707355ull, 8241027489795270454ull,
+ 1964104978489947307ull, 6225042828399851958ull}},
+{{14986340622888160002ull, 5689598343816700163ull,
+ 11678503259967209942ull, 7781303535499814947ull}},
+{{7060619880091406049ull, 17391057020167601314ull,
+ 4993221528265812261ull, 4863314709687384342ull}},
+{{18049146886969033370ull, 7903763219927337930ull,
+ 15464898947187041135ull, 6079143387109230427ull}},
+{{13338061571856515904ull, 5268018006481784509ull,
+ 14719437665556413515ull, 7598929233886538034ull}},
+{{10642131491624016392ull, 986668244837421366ull,
+ 13811334559400146351ull, 4749330771179086271ull}},
+{{4079292327675244682ull, 15068393361328940420ull,
+ 12652482180822795034ull, 5936663463973857839ull}},
+{{5099115409594055852ull, 9612119664806399717ull,
+ 11203916707601105889ull, 7420829329967322299ull}},
+{{5492790140209978860ull, 17536789836572469583ull,
+ 4696604933036997228ull, 4638018331229576437ull}},
+{{2254301656835085671ull, 3474243222006035363ull,
+ 10482442184723634440ull, 5797522914036970546ull}},
+{{16652935126326020800ull, 4342804027507544203ull,
+ 3879680694049767242ull, 7246903642546213183ull}},
+{{16204482889480138096ull, 14651877071239206062ull,
+ 237914849134821148ull, 9058629553182766479ull}},
+{{5516115787497698406ull, 18380795206379279597ull,
+ 7066225808350345073ull, 5661643470739229049ull}},
+{{11506830752799510912ull, 9140935952691935784ull,
+ 13444468278865319246ull, 7077054338424036311ull}},
+{{14383538440999388640ull, 2202797904010143922ull,
+ 12193899330154261154ull, 8846317923030045389ull}},
+{{13601397544052005804ull, 5988434708433727855ull,
+ 9927030090560107173ull, 5528948701893778368ull}},
+{{12390060911637619351ull, 12097229403969547723ull,
+ 12408787613200133966ull, 6911185877367222960ull}},
+{{10875890121119636284ull, 5898164718107158846ull,
+ 15510984516500167458ull, 8638982346709028700ull}},
+{{2185745307272384774ull, 8298038967244362183ull, 470993285957828853ull,
+ 5399363966693142938ull}},
+{{16567239689372644679ull, 14984234727482840632ull,
+ 9812113644302061874ull, 6749204958366428672ull}},
+{{2262305538006254233ull, 9506921372498774983ull,
+ 12265142055377577343ull, 8436506197958035840ull}},
+{{8331469988894990752ull, 12859354885452816220ull,
+ 7665713784610985839ull, 5272816373723772400ull}},
+{{10414337486118738440ull, 11462507588388632371ull,
+ 9582142230763732299ull, 6591020467154715500ull}},
+{{8406235839221035145ull, 9716448467058402560ull,
+ 11977677788454665374ull, 8238775583943394375ull}},
+{{5253897399513146966ull, 1461094273484113696ull,
+ 14403577645425247715ull, 5149234739964621484ull}},
+{{6567371749391433707ull, 15661425897137305832ull,
+ 18004472056781559643ull, 6436543424955776855ull}},
+{{8209214686739292134ull, 14965096352994244386ull,
+ 17893904052549561650ull, 8045679281194721069ull}},
+{{9742445197639445488ull, 13964871239048790645ull,
+ 13489533042057169983ull, 5028549550746700668ull}},
+{{16789742515476694764ull, 12844403030383600402ull,
+ 16861916302571462479ull, 6285686938433375835ull}},
+{{11763806107491092647ull, 11443817769552112599ull,
+ 16465709359786940195ull, 7857108673041719794ull}},
+{{14269907844823014760ull, 4846543096756376422ull,
+ 14902754368294225526ull, 4910692920651074871ull}},
+{{8614012769173992642ull, 15281550907800246336ull,
+ 14016756941940394003ull, 6138366150813843589ull}},
+{{10767515961467490803ull, 14490252616322920016ull,
+ 3685888122143328792ull, 7672957688517304487ull}},
+{{6729697475917181752ull, 9056407885201825010ull,
+ 9221209103980662351ull, 4795598555323315304ull}},
+{{17635493881751252998ull, 6708823838074893358ull,
+ 11526511379975827939ull, 5994498194154144130ull}},
+{{12820995315334290439ull, 3774343779166228794ull,
+ 5184767188115009116ull, 7493122742692680163ull}},
+{{12624808090511319429ull, 11582336898833668804ull,
+ 934636483358186745ull, 4683201714182925102ull}},
+{{15781010113139149286ull, 642863068259922293ull,
+ 10391667641052509240ull, 5854002142728656377ull}},
+{{5891204586141772895ull, 803578835324902867ull,
+ 17601270569743024454ull, 7317502678410820471ull}},
+{{2752319714249828215ull, 10227845581010904392ull,
+ 17389902193751392663ull, 9146878348013525589ull}},
+{{1720199821406142634ull, 13309932515772897101ull,
+ 13174531880308314366ull, 5716798967508453493ull}},
+{{6761935795185066197ull, 7414043607861345568ull,
+ 2633106795103229246ull, 7145998709385566867ull}},
+{{8452419743981332746ull, 44182472971906152ull, 17126441549161200270ull,
+ 8932498386731958583ull}},
+{{5282762339988332966ull, 13862672100889605057ull,
+ 17621554995866832024ull, 5582811491707474114ull}},
+{{11215138943412804112ull, 17328340126112006321ull,
+ 12803571707978764222ull, 6978514364634342643ull}},
+{{183865623983841428ull, 12437053120785232094ull,
+ 11392778616546067374ull, 8723142955792928304ull}},
+{{13949974070272064604ull, 3161472182063382154ull,
+ 7120486635341292109ull, 5451964347370580190ull}},
+{{8214095550985304947ull, 8563526246006615597ull,
+ 18123980331031390944ull, 6814955434213225237ull}},
+{{14879305457159019088ull, 10704407807508269496ull,
+ 8819917358507074968ull, 8518694292766531547ull}},
+{{9299565910724386930ull, 6690254879692668435ull,
+ 3206605339853227903ull, 5324183932979082217ull}},
+{{7012771369978095759ull, 3751132581188447640ull,
+ 8619942693243922783ull, 6655229916223852771ull}},
+{{8765964212472619698ull, 77229708058171646ull, 6163242348127515575ull,
+ 8319037395279815964ull}},
+{{867041614367999408ull, 6965797595177439135ull,
+ 13075398504434473042ull, 5199398372049884977ull}},
+{{14918860073242162971ull, 17930619030826574726ull,
+ 2509190075260927590ull, 6499247965062356222ull}},
+{{9425203054697927906ull, 13189901751678442600ull,
+ 12359859630930935296ull, 8124059956327945277ull}},
+{{5890751909186204942ull, 8243688594799026625ull,
+ 10030755278545528512ull, 5077537472704965798ull}},
+{{11975125904910144081ull, 10304610743498783281ull,
+ 3315072061327134832ull, 6346921840881207248ull}},
+{{1133849325855516389ull, 12880763429373479102ull,
+ 4143840076658918540ull, 7933652301101509060ull}},
+{{14543713883941861455ull, 17273849180213200246ull,
+ 11813272084766599895ull, 4958532688188443162ull}},
+{{8956270318072551011ull, 16980625456839112404ull,
+ 5543218069103474061ull, 6198165860235553953ull}},
+{{11195337897590688764ull, 7390723765766726793ull,
+ 11540708604806730481ull, 7747707325294442441ull}},
+{{79557158353098621ull, 16148417399672674006ull, 295413850363124694ull,
+ 4842317078309026526ull}},
+{{9322818484796149085ull, 10962149712736066699ull,
+ 9592639349808681676ull, 6052896347886283157ull}},
+{{7041837087567798452ull, 13702687140920083374ull,
+ 16602485205688239999ull, 7566120434857853946ull}},
+{{18236206235012037744ull, 15481708490716133964ull,
+ 14988239271982537903ull, 4728825271786158716ull}},
+{{4348513720055495564ull, 14740449594967779552ull,
+ 288555016268620763ull, 5911031589732698396ull}},
+{{5435642150069369455ull, 13813875975282336536ull,
+ 360693770335775954ull, 7388789487165872995ull}},
+{{3397276343793355910ull, 13245358502978848239ull,
+ 16366334670955717635ull, 4617993429478670621ull}},
+{{18081653485023858599ull, 11945012110296172394ull,
+ 6622860283412483332ull, 5772491786848338277ull}},
+{{13378694819425047441ull, 14931265137870215493ull,
+ 12890261372692992069ull, 7215614733560422846ull}},
+{{2888310468999145589ull, 4829023367055605655ull,
+ 6889454679011464279ull, 9019518416950528558ull}},
+{{8722723070765547849ull, 9935668632050835390ull,
+ 18140967229664328886ull, 5637199010594080348ull}},
+{{1680031801602159003ull, 3196213753208768430ull,
+ 4229464963370859492ull, 7046498763242600436ull}},
+{{11323411788857474562ull, 3995267191510960537ull,
+ 5286831204213574365ull, 8808123454053250545ull}},
+{{159603340394839746ull, 4802885003908044288ull,
+ 14833484548701953738ull, 5505077158783281590ull}},
+{{199504175493549682ull, 15226978291739831168ull,
+ 9318483649022666364ull, 6881346448479101988ull}},
+{{249380219366937102ull, 586978790965237344ull, 11648104561278332956ull,
+ 8601683060598877485ull}},
+{{155862637104335689ull, 9590233781208049148ull, 9585908360012652049ull,
+ 5376051912874298428ull}},
+{{194828296380419611ull, 16599478244937449339ull,
+ 11982385450015815061ull, 6720064891092873035ull}},
+{{14078593425757688226ull, 6914289750889647961ull,
+ 10366295794092380923ull, 8400081113866091294ull}},
+{{1881591863457473285ull, 2015588085092336024ull,
+ 1867248852880350173ull, 5250050696166307059ull}},
+{{2351989829321841607ull, 7131171124792807934ull,
+ 16169119121382601428ull, 6562563370207883823ull}},
+{{12163359323507077816ull, 8913963905991009917ull,
+ 15599712883300863881ull, 8203204212759854779ull}},
+{{9907942586405617587ull, 17100442487312850958ull,
+ 7443977542849345973ull, 5127002632974909237ull}},
+{{3161556196152246176ull, 7540495053858899986ull,
+ 13916657946989070371ull, 6408753291218636546ull}},
+{{13175317282045083528ull, 4813932798896237078ull,
+ 8172450396881562156ull, 8010941614023295683ull}},
+{{3622887282850789301ull, 12232080036164923982ull,
+ 2801938488837282395ull, 5006838508764559802ull}},
+{{13751981140418262434ull, 10678414026778767073ull,
+ 12725795147901378802ull, 6258548135955699752ull}},
+{{3354918370240664331ull, 4124645496618683034ull,
+ 15907243934876723503ull, 7823185169944624690ull}},
+{{6708509999827803111ull, 9495432463027758752ull,
+ 14553713477725340093ull, 4889490731215390431ull}},
+{{8385637499784753888ull, 16480976597212086344ull,
+ 13580455828729287212ull, 6111863414019238039ull}},
+{{10482046874730942360ull, 2154476672805556314ull,
+ 12363883767484221112ull, 7639829267524047549ull}},
+{{11162965315134226879ull, 1346547920503472696ull,
+ 10033270363891332147ull, 4774893292202529718ull}},
+{{13953706643917783599ull, 15518242955911504582ull,
+ 3318215918009389375ull, 5968616615253162148ull}},
+{{8218761268042453691ull, 14786117676461992824ull,
+ 4147769897511736719ull, 7460770769066452685ull}},
+{{5136725792526533557ull, 16158852575429827371ull,
+ 4898199195158529401ull, 4662981730666532928ull}},
+{{1809221222230779042ull, 6363507664005120502ull,
+ 6122748993948161752ull, 5828727163333166160ull}},
+{{11484898564643249610ull, 7954384580006400627ull,
+ 7653436242435202190ull, 7285908954166457700ull}},
+{{9744437187376674109ull, 719608688153224976ull, 9566795303044002738ull,
+ 9107386192708072125ull}},
+{{6090273242110421318ull, 5061441448523153514ull,
+ 8285090073616195663ull, 5692116370442545078ull}},
+{{16836213589492802456ull, 1715115792226553988ull,
+ 1132990555165468771ull, 7115145463053181348ull}},
+{{2598522913156451454ull, 15978952795565356198ull,
+ 1416238193956835963ull, 8893931828816476685ull}},
+{{15459134876004945871ull, 7681002488014653671ull,
+ 3190991880436716429ull, 5558707393010297928ull}},
+{{14712232576578794434ull, 14212939128445704993ull,
+ 3988739850545895536ull, 6948384241262872410ull}},
+{{4555232665441329331ull, 17766173910557131242ull,
+ 14209296850037145228ull, 8685480301578590512ull}},
+{{7458706434328218736ull, 1880486657243431218ull,
+ 8880810531273215768ull, 5428425188486619070ull}},
+{{100011006055497612ull, 2350608321554289023ull, 1877641127236743902ull,
+ 6785531485608273838ull}},
+{{13960071812851535726ull, 12161632438797637086ull,
+ 11570423445900705685ull, 8481914357010342297ull}},
+{{4113358864604821925ull, 9906863283462217131ull, 313985626046859197ull,
+ 5301196473131463936ull}},
+{{530012562328639502ull, 16995265122755159318ull, 392482032558573996ull,
+ 6626495591414329920ull}},
+{{9885887739765575186ull, 2797337329734397531ull, 490602540698217496ull,
+ 8283119489267912400ull}},
+{{3872836828139790539ull, 1748335831083998457ull, 306626587936385935ull,
+ 5176949680792445250ull}},
+{{9452732053602126078ull, 16020477844137161783ull,
+ 9606655271775258226ull, 6471187100990556562ull}},
+{{7204229048575269693ull, 10802225268316676421ull,
+ 2784947052864296975ull, 8088983876238195703ull}},
+{{6808486164573237511ull, 13668919820339004619ull,
+ 8658120935681267465ull, 5055614922648872314ull}},
+{{3898921687289158984ull, 3251091720141592062ull,
+ 1599279132746808524ull, 6319518653311090393ull}},
+{{14097024145966224538ull, 4063864650176990077ull,
+ 6610784934360898559ull, 7899398316638862991ull}},
+{{11116483100442584288ull, 9457444434001700654ull,
+ 11049269611616643455ull, 4937123947899289369ull}},
+{{4672231838698454552ull, 7210119524074737914ull,
+ 18423273032948192223ull, 6171404934874111711ull}},
+{{15063661835227843998ull, 4400963386666034488ull,
+ 18417405272757852375ull, 7714256168592639639ull}},
+{{9414788647017402499ull, 9668131144307353411ull,
+ 18428407323114739590ull, 4821410105370399774ull}},
+{{7156799790344365220ull, 2861791893529415956ull,
+ 13812137117038648680ull, 6026762631712999718ull}},
+{{8945999737930456525ull, 3577239866911769945ull,
+ 8041799359443535042ull, 7533453289641249648ull}},
+{{17120464882275005088ull, 6847460935247244119ull,
+ 5026124599652209401ull, 4708408306025781030ull}},
+{{16788895084416368456ull, 13171012187486443053ull,
+ 15506027786420037559ull, 5885510382532226287ull}},
+{{7151060800238296858ull, 11852079215930665913ull,
+ 14770848714597659045ull, 7356887978165282859ull}},
+{{13550512018725258976ull, 980040964631168679ull,
+ 13851874874819685903ull, 9196109972706603574ull}},
+{{15386599039344368716ull, 7530054630535562280ull,
+ 4045735778334915785ull, 5747568732941627234ull}},
+{{786504725470909279ull, 14024254306596840755ull,
+ 14280541759773420539ull, 7184460916177034042ull}},
+{{14818188962120800311ull, 12918631864818663039ull,
+ 8627305162861999866ull, 8980576145221292553ull}},
+{{16178897128966582051ull, 12685830933939052303ull,
+ 16921280772857219676ull, 5612860090763307845ull}},
+{{15611935392780839659ull, 15857288667423815379ull,
+ 7316542910789360883ull, 7016075113454134807ull}},
+{{14903233222548661670ull, 15209924815852381320ull,
+ 4533992620059313200ull, 8770093891817668509ull}},
+{{9314520764092913544ull, 9506203009907738325ull,
+ 5139588396750764702ull, 5481308682386042818ull}},
+{{16254836973543529834ull, 2659381725529897098ull,
+ 15647857532793231686ull, 6851635852982553522ull}},
+{{11095174180074636484ull, 12547599193767147181ull,
+ 10336449879136763799ull, 8564544816228191903ull}},
+{{9240326871760341755ull, 14759778523745548844ull,
+ 13377810202101559230ull, 5352840510142619939ull}},
+{{11550408589700427193ull, 9226351117827160247ull,
+ 12110576734199561134ull, 6691050637678274924ull}},
+{{9826324718698146087ull, 2309566860429174501ull,
+ 15138220917749451418ull, 8363813297097843655ull}},
+{{8447295958400035257ull, 6055165306195621967ull,
+ 16378917101234488992ull, 5227383310686152284ull}},
+{{5947433929572656167ull, 7568956632744527459ull,
+ 2026902302833559624ull, 6534229138357690356ull}},
+{{2822606393538432304ull, 9461195790930659324ull,
+ 2533627878541949530ull, 8167786422947112945ull}},
+{{10987501032816295998ull, 10524933387759049981ull,
+ 13112732470157188216ull, 5104866514341945590ull}},
+{{18346062309447757902ull, 13156166734698812476ull,
+ 7167543550841709462ull, 6381083142927431988ull}},
+{{4485833813100145761ull, 7221836381518739788ull,
+ 8959429438552136828ull, 7976353928659289985ull}},
+{{12027018170042366909ull, 13737019775303988175ull,
+ 17128858445163555277ull, 4985221205412056240ull}},
+{{10422086694125570732ull, 3336216663847821507ull,
+ 2964328982744892481ull, 6231526506765070301ull}},
+{{8415922349229575511ull, 8781956848237164788ull,
+ 8317097246858503505ull, 7789408133456337876ull}},
+{{14483323505123260503ull, 17017938076216697752ull,
+ 14421557816141340498ull, 4868380083410211172ull}},
+{{18104154381404075628ull, 12049050558416096382ull,
+ 18026947270176675623ull, 6085475104262763965ull}},
+{{13406820939900318727ull, 10449627179592732574ull,
+ 8698626032438680817ull, 7606843880328454957ull}},
+{{3767577069010311301ull, 18060232033313927619ull,
+ 7742484279487869462ull, 4754277425205284348ull}},
+{{97785317835501222ull, 13351918004787633716ull, 9678105349359836828ull,
+ 5942846781506605435ull}},
+{{122231647294376527ull, 16689897505984542145ull,
+ 7485945668272408131ull, 7428558476883256794ull}},
+{{11605609825627455089ull, 8125342932026644888ull,
+ 9290402061097642986ull, 4642849048052035496ull}},
+{{14507012282034318862ull, 933306628178530302ull,
+ 11613002576372053733ull, 5803561310065044370ull}},
+{{8910393315688122769ull, 5778319303650550782ull,
+ 5292881183610291358ull, 7254451637581305463ull}},
+{{1914619607755377653ull, 16446271166417964286ull,
+ 2004415461085476293ull, 9068064546976631829ull}},
+{{15031695310129274745ull, 12584762488224921630ull,
+ 3558602672392116635ull, 5667540341860394893ull}},
+{{9566247100806817624ull, 11119267091853764134ull,
+ 9059939358917533698ull, 7084425427325493616ull}},
+{{2734436839153746221ull, 4675711827962429360ull,
+ 11324924198646917123ull, 8855531784156867020ull}},
+{{1709023024471091389ull, 616476883262824398ull,
+ 16301449661009099010ull, 5534707365098041887ull}},
+{{11359650817443640044ull, 9993968140933306305ull,
+ 15765126057833985858ull, 6918384206372552359ull}},
+{{364505466522386342ull, 3269088139311857074ull,
+ 15094721553865094419ull, 8647980257965690449ull}},
+{{4839501935003879368ull, 18184081151565768335ull,
+ 2516671943524602155ull, 5404987661228556531ull}},
+{{1437691400327461306ull, 18118415421029822515ull,
+ 16980897984687916406ull, 6756234576535695663ull}},
+{{15632172305691490344ull, 13424647239432502335ull,
+ 16614436462432507604ull, 8445293220669619579ull}},
+{{16687636718698263321ull, 17613776561500089767ull,
+ 8078179779806623300ull, 5278308262918512237ull}},
+{{16247859879945441248ull, 3570476628165560593ull,
+ 14709410743185667030ull, 6597885328648140296ull}},
+{{6474766794649637848ull, 13686467822061726550ull,
+ 18386763428982083787ull, 8247356660810175370ull}},
+{{17881787301938187367ull, 6248199379574885141ull,
+ 16103413161541190271ull, 5154597913006359606ull}},
+{{8517176072140570496ull, 3198563206041218523ull,
+ 10905894415071712031ull, 6443247391257949508ull}},
+{{6034784071748325216ull, 17833262062833686866ull,
+ 13632368018839640038ull, 8054059239072436885ull}},
+{{8383426063270091164ull, 6534102770843666387ull,
+ 10826073020988468976ull, 5033787024420273053ull}},
+{{5867596560660226051ull, 8167628463554582984ull,
+ 18144277294662974124ull, 6292233780525341316ull}},
+{{7334495700825282564ull, 10209535579443228730ull,
+ 4233602544619166039ull, 7865292225656676646ull}},
+{{9195745831443189507ull, 13298488764793099812ull,
+ 16481059645669142486ull, 4915807641035422903ull}},
+{{11494682289303986883ull, 7399738919136598957ull,
+ 15989638538659040204ull, 6144759551294278629ull}},
+{{533294806347819892ull, 9249673648920748697ull, 6151990118041636543ull,
+ 7680949439117848287ull}},
+{{11862524300035857193ull, 12698575058216549791ull,
+ 10762522851417104695ull, 4800593399448655179ull}},
+{{10216469356617433587ull, 11261532804343299335ull,
+ 8841467545843992965ull, 6000741749310818974ull}},
+{{8158900677344404079ull, 241857950146960457ull, 1828462395450215399ull,
+ 7500927186638523718ull}},
+{{16628527969408722310ull, 7068690246482932141ull,
+ 14977847052438548336ull, 4688079491649077323ull}},
+{{6950601906478739175ull, 8835862808103665177ull,
+ 14110622797120797516ull, 5860099364561346654ull}},
+{{13299938401525811873ull, 11044828510129581471ull,
+ 8414906459546221087ull, 7325124205701683318ull}},
+{{12013236983479876937ull, 9194349619234588935ull,
+ 1295261037578000551ull, 9156405257127104148ull}},
+{{14425802142316004942ull, 12663997539662699940ull,
+ 10032910185341026152ull, 5722753285704440092ull}},
+{{18032252677895006177ull, 15829996924578374925ull,
+ 12541137731676282690ull, 7153441607130550115ull}},
+{{8705257792086594009ull, 10564124118868192849ull,
+ 11064736146167965459ull, 8941802008913187644ull}},
+{{16970001166122591016ull, 4296734565078926578ull,
+ 16138832128209754220ull, 5588626255570742277ull}},
+{{11989129420798462962ull, 5370918206348658223ull,
+ 6338482104980029063ull, 6985782819463427847ull}},
+{{10374725757570690798ull, 2101961739508434875ull,
+ 3311416612797648425ull, 8732228524329284809ull}},
+{{4178360589267987797ull, 12842941133261241557ull,
+ 13598850429067000025ull, 5457642827705803005ull}},
+{{9834636755012372650ull, 2218618361294388234ull,
+ 3163504981051586320ull, 6822053534632253757ull}},
+{{3069923906910690005ull, 2773272951617985293ull,
+ 8566067244741870804ull, 8527566918290317196ull}},
+{{4224545451032875205ull, 10956667631616016616ull,
+ 14577164064818445060ull, 5329729323931448247ull}},
+{{5280681813791094006ull, 13695834539520020770ull,
+ 13609769062595668421ull, 6662161654914310309ull}},
+{{15824224304093643316ull, 3284735119117862250ull,
+ 3177153272962421815ull, 8327702068642887887ull}},
+{{14501826208485914976ull, 8970488477089745762ull,
+ 8903249823242595490ull, 5204813792901804929ull}},
+{{8903910723752617912ull, 1989738559507406395ull,
+ 15740748297480632267ull, 6506017241127256161ull}},
+{{6518202386263384486ull, 16322231254666421706ull,
+ 5840877316568626621ull, 8132521551409070202ull}},
+{{8685562509842003208ull, 12507237543380207518ull,
+ 8262234341282779542ull, 5082825969630668876ull}},
+{{1633581100447728202ull, 6410674892370483590ull,
+ 10327792926603474428ull, 6353532462038336095ull}},
+{{11265348412414436061ull, 8013343615463104487ull,
+ 8298055139826955131ull, 7941915577547920119ull}},
+{{13958371785400104394ull, 2702496750450746352ull,
+ 12103813490032928813ull, 4963697235967450074ull}},
+{{17447964731750130492ull, 7989806956490820844ull,
+ 5906394825686385208ull, 6204621544959312593ull}},
+{{3363211840978111499ull, 9987258695613526056ull,
+ 11994679550535369414ull, 7755776931199140741ull}},
+{{2102007400611319687ull, 1630350666331065881ull,
+ 9802517728298299836ull, 4847360581999462963ull}},
+{{7239195269191537513ull, 2037938332913832351ull,
+ 7641461141945486891ull, 6059200727499328704ull}},
+{{4437308068062033987ull, 16382480971424454151ull,
+ 9551826427431858613ull, 7574000909374160880ull}},
+{{9690846570179853098ull, 12544893616353977796ull,
+ 5969891517144911633ull, 4733750568358850550ull}},
+{{12113558212724816373ull, 1846058965160308533ull,
+ 16685736433285915350ull, 5917188210448563187ull}},
+{{1306889710623856754ull, 11530945743305161475ull,
+ 16245484523180006283ull, 7396485263060703984ull}},
+{{16957707133635768135ull, 4900998080352031969ull,
+ 10153427826987503927ull, 4622803289412939990ull}},
+{{7362075861762546457ull, 1514561582012652058ull,
+ 3468412746879604101ull, 5778504111766174988ull}},
+{{18425966864057958879ull, 6504887995943202976ull,
+ 4335515933599505126ull, 7223130139707718735ull}},
+{{4585714506362896982ull, 17354482031783779529ull,
+ 807708898571993503ull, 9028912674634648419ull}},
+{{14395286612545280374ull, 17764080297505944061ull,
+ 16645719126103353603ull, 5643070421646655261ull}},
+{{4159050210399436756ull, 17593414353455042173ull,
+ 6972090852347028292ull, 7053838027058319077ull}},
+{{9810498781426683848ull, 3545023868109251100ull,
+ 13326799583861173270ull, 8817297533822898846ull}},
+{{15354933775246453213ull, 16050697972850445649ull,
+ 3717563721485845389ull, 5510810958639311779ull}},
+{{5358609163775902805ull, 6228314410780893350ull, 35268633429918833ull,
+ 6888513698299139724ull}},
+{{15921633491574654314ull, 12397079031903504591ull,
+ 44085791787398541ull, 8610642122873924655ull}},
+{{16868549959875240802ull, 10054017404153384321ull,
+ 6945082647508205944ull, 5381651326796202909ull}},
+{{7250629394561887291ull, 12567521755191730402ull,
+ 13293039327812645334ull, 6727064158495253636ull}},
+{{18286658780057134921ull, 6486030157134887194ull,
+ 16616299159765806668ull, 8408830198119067045ull}},
+{{16040847755963097230ull, 13277140885064080304ull,
+ 12691029984067323119ull, 5255518873824416903ull}},
+{{1604315621244319921ull, 11984740087902712477ull,
+ 11252101461656765995ull, 6569398592280521129ull}},
+{{6617080544982787806ull, 10369239091451002692ull,
+ 230068771788793782ull, 8211748240350651412ull}},
+{{13359047377469018187ull, 1869088413729488778ull,
+ 9367165019222771922ull, 5132342650219157132ull}},
+{{7475437184981496925ull, 11559732554016636781ull,
+ 11708956274028464902ull, 6415428312773946415ull}},
+{{13955982499654259060ull, 5226293655666020168ull,
+ 10024509324108193224ull, 8019285390967433019ull}},
+{{8722489062283911913ull, 3266433534791262605ull,
+ 3959475318353926813ull, 5012053369354645637ull}},
+{{15514797346282277795ull, 8694727936916466160ull,
+ 9561030166369796420ull, 6265066711693307046ull}},
+{{946752609143295628ull, 10868409921145582701ull,
+ 2727915671107469717ull, 7831333389616633808ull}},
+{{2897563389928253720ull, 9098599209929683140ull,
+ 1704947294442168573ull, 4894583368510396130ull}},
+{{3621954237410317149ull, 15984935030839491829ull,
+ 11354556154907486524ull, 6118229210637995162ull}},
+{{9139128815190284340ull, 1534424714839813170ull,
+ 4969823156779582348ull, 7647786513297493953ull}},
+{{10323641527921315617ull, 10182387483629659039ull,
+ 14635354519055708727ull, 4779866570810933720ull}},
+{{8292865891474256617ull, 8116298336109685895ull,
+ 18294193148819635909ull, 5974833213513667150ull}},
+{{5754396345915432867ull, 14757058938564495273ull,
+ 13644369399169769078ull, 7468541516892083938ull}},
+{{15125712762265615302ull, 4611475818175421641ull,
+ 13139416892908493578ull, 4667838448057552461ull}},
+{{5072082897549855416ull, 14987716809574052860ull,
+ 2589213060853453260ull, 5834798060071940577ull}},
+{{6340103621937319269ull, 287901938258014459ull, 7848202344494204480ull,
+ 7293497575089925721ull}},
+{{3313443508994261183ull, 359877422822518074ull,
+ 14421938949045143504ull, 9116871968862407151ull}},
+{{6682588211548801143ull, 224923389264073796ull,
+ 15931240870794296546ull, 5698044980539004469ull}},
+{{8353235264436001429ull, 9504526273434868053ull,
+ 6078993033210706970ull, 7122556225673755587ull}},
+{{15053230098972389690ull, 2657285804938809258ull,
+ 2987055273085995809ull, 8903195282092194484ull}},
+{{14019954830285131461ull, 13190018674155225546ull,
+ 11090281582533523188ull, 5564497051307621552ull}},
+{{8301571501001638518ull, 16487523342694031933ull,
+ 13862851978166903985ull, 6955621314134526940ull}},
+{{14988650394679436051ull, 6774346123085376204ull,
+ 17328564972708629982ull, 8694526642668158675ull}},
+{{144534459819871724ull, 18069024382210523840ull,
+ 8524510098729199786ull, 5434079151667599172ull}},
+{{180668074774839655ull, 13362908440908378992ull,
+ 10655637623411499733ull, 6792598939584498965ull}},
+{{225835093468549568ull, 2868577495853310028ull,
+ 17931233047691762571ull, 8490748674480623706ull}},
+{{9364518970272619288ull, 17933761999404176431ull,
+ 15818706673234739510ull, 5306717921550389816ull}},
+{{7093962694413386206ull, 13193830462400444731ull,
+ 1326639267833872772ull, 6633397401937987271ull}},
+{{4255767349589344854ull, 16492288078000555914ull,
+ 15493357140074504677ull, 8291746752422484088ull}},
+{{7271540611920728438ull, 12613523057964041398ull,
+ 9683348212546565423ull, 5182341720264052555ull}},
+{{18312797801755686355ull, 11155217804027663843ull,
+ 7492499247255818875ull, 6477927150330065694ull}},
+{{18279311233767220040ull, 9332336236607191900ull,
+ 142252022214997786ull, 8097408937912582118ull}},
+{{2201197484249736717ull, 10444396166306882842ull,
+ 13923965569166537328ull, 5060880586195363823ull}},
+{{11974868892166946704ull, 13055495207883603552ull,
+ 12793270943030783756ull, 6326100732744204779ull}},
+{{14968586115208683380ull, 16319369009854504440ull,
+ 11379902660361091791ull, 7907625915930255974ull}},
+{{9355366322005427113ull, 17117134658800147131ull,
+ 2500753144298294465ull, 4942266197456409984ull}},
+{{7082521884079395987ull, 7561360268218020202ull,
+ 3125941430372868082ull, 6177832746820512480ull}},
+{{18076524391954020792ull, 228328298417749444ull,
+ 3907426787966085103ull, 7722290933525640600ull}},
+{{2074455708116487187ull, 7060234214152175259ull,
+ 2442141742478803189ull, 4826431833453525375ull}},
+{{16428127690427772695ull, 13436978786117606977ull,
+ 16887735233380667698ull, 6033039791816906718ull}},
+{{6700101557752552157ull, 7572851445792232914ull,
+ 11886297004871058815ull, 7541299739771133398ull}},
+{{8799249492022733002ull, 11650561181261227427ull,
+ 2817249609617023855ull, 4713312337356958374ull}},
+{{6387375846601028349ull, 9951515458149146380ull,
+ 12744934048876055627ull, 5891640421696197967ull}},
+{{7984219808251285436ull, 7827708304259045071ull,
+ 11319481542667681630ull, 7364550527120247459ull}},
+{{5368588741886718891ull, 561263343469030531ull, 9537665909907214134ull,
+ 9205688158900309324ull}},
+{{1049524954465505355ull, 14185847644950307794ull,
+ 15184413230546784641ull, 5753555099312693327ull}},
+{{10535278229936657502ull, 3897251500905721030ull,
+ 14368830519756092898ull, 7191943874140866659ull}},
+{{3945725750566046069ull, 14094936412986927096ull,
+ 13349352131267728218ull, 8989929842676083324ull}},
+{{2466078594103778793ull, 13421021276544217339ull,
+ 17566717118897105944ull, 5618706151672552077ull}},
+{{16917656297911887203ull, 16776276595680271673ull,
+ 8123338343339218718ull, 7023382689590690097ull}},
+{{7312012317107695292ull, 11746973707745563784ull,
+ 14765858947601411302ull, 8779228361988362621ull}},
+{{4570007698192309558ull, 2730172548913589461ull,
+ 11534504851464576016ull, 5487017726242726638ull}},
+{{10324195641167774851ull, 3412715686141986826ull,
+ 5194759027475944212ull, 6858772157803408298ull}},
+{{3681872514604942756ull, 4265894607677483533ull,
+ 15716820821199706073ull, 8573465197254260372ull}},
+{{4607013330841783175ull, 14195399175866896968ull,
+ 599640976395040487ull, 5358415748283912733ull}},
+{{5758766663552228968ull, 13132562951406233306ull,
+ 5361237238921188513ull, 6698019685354890916ull}},
+{{16421830366295062018ull, 2580645633975627920ull,
+ 6701546548651485642ull, 8372524606693613645ull}},
+{{10263643978934413761ull, 6224589539662155354ull,
+ 6494309602120872478ull, 5232827879183508528ull}},
+{{3606182936813241394ull, 17004108961432470001ull,
+ 8117887002651090597ull, 6541034848979385660ull}},
+{{9119414689443939646ull, 7420078146508423789ull,
+ 10147358753313863247ull, 8176293561224232075ull}},
+{{8005477190116156231ull, 11555077869208846724ull,
+ 4036256211607470577ull, 5110183475765145047ull}},
+{{10006846487645195289ull, 608789281228894693ull, 433634246081950318ull,
+ 6387729344706431309ull}},
+{{17120244127983882015ull, 9984358638390894174ull,
+ 5153728826029825801ull, 7984661680883039136ull}},
+{{6088466561562538355ull, 17769439195062778619ull,
+ 3221080516268641125ull, 4990413550551899460ull}},
+{{2998897183525785040ull, 8376740938546309562ull,
+ 4026350645335801407ull, 6238016938189874325ull}},
+{{12971993516262007108ull, 5859240154755499048ull,
+ 9644624325097139663ull, 7797521172737342906ull}},
+{{8107495947663754443ull, 10579554124363268761ull,
+ 10639576221613100193ull, 4873450732960839316ull}},
+{{14746055953007080957ull, 17836128673881473855ull,
+ 13299470277016375241ull, 6091813416201049145ull}},
+{{13820883922831463292ull, 8460102787069678607ull,
+ 2789279790988305340ull, 7614766770251311432ull}},
+{{15555581479410746414ull, 14510936278773324937ull,
+ 1743299869367690837ull, 4759229231407069645ull}},
+{{5609418793981269305ull, 4303612293184492460ull,
+ 6790810855137001451ull, 5949036539258837056ull}},
+{{7011773492476586631ull, 767829348053227671ull, 8488513568921251814ull,
+ 7436295674073546320ull}},
+{{11299887460438948501ull, 14314951397815431006ull,
+ 5305320980575782383ull, 4647684796295966450ull}},
+{{4901487288693909818ull, 13282003228841900854ull,
+ 15855023262574503787ull, 5809605995369958062ull}},
+{{15350231147722163080ull, 11990818017624988163ull,
+ 10595407041363353926ull, 7262007494212447578ull}},
+{{14576102916225315946ull, 5765150485176459396ull,
+ 4020886764849416600ull, 9077509367765559473ull}},
+{{18333436359495598274ull, 3603219053235287122ull,
+ 14042269274099355135ull, 5673443354853474670ull}},
+{{13693423412514722035ull, 18339081871826272615ull,
+ 8329464555769418110ull, 7091804193566843338ull}},
+{{12505093247216014640ull, 13700480302928064961ull,
+ 1188458657856996830ull, 8864755241958554173ull}},
+{{898154251868927294ull, 3951114170902652697ull, 3048629670374316971ull,
+ 5540472026224096358ull}},
+{{5734378833263547021ull, 327206695200927967ull,
+ 13034159124822672022ull, 6925590032780120447ull}},
+{{2556287523152045873ull, 9632380405855935767ull,
+ 11681012887600952123ull, 8656987540975150559ull}},
+{{8515208729611110527ull, 3714394744446265902ull,
+ 14218162082391676933ull, 5410617213109469099ull}},
+{{1420638875159112350ull, 9254679448985220282ull,
+ 13161016584562208262ull, 6763271516386836374ull}},
+{{10999170630803666245ull, 2344977274376749544ull,
+ 7227898693847984520ull, 8454089395483545468ull}},
+{{6874481644252291404ull, 1465610796485468465ull,
+ 13740808720509766133ull, 5283805872177215917ull}},
+{{13204788073742752158ull, 6443699514034223485ull,
+ 3340952845355043954ull, 6604757340221519897ull}},
+{{2670927036896276486ull, 17277996429397555165ull,
+ 8787877075121192846ull, 8255946675276899871ull}},
+{{3975172407273866756ull, 6187061749946084074ull,
+ 12409952199591827385ull, 5159966672048062419ull}},
+{{14192337545947109253ull, 12345513205859992996ull,
+ 10900754231062396327ull, 6449958340060078024ull}},
+{{17740421932433886566ull, 10820205488897603341ull,
+ 13625942788827995409ull, 8062447925075097530ull}},
+{{13393606716984873056ull, 18291843476629471848ull,
+ 13127900261444885034ull, 5039029953171935956ull}},
+{{16742008396231091320ull, 13641432308932064002ull,
+ 16409875326806106293ull, 6298787441464919945ull}},
+{{11704138458434088341ull, 3216732330882916291ull,
+ 6677286103225469155ull, 7873484301831149932ull}},
+{{5009243527307611261ull, 18151358771297680346ull,
+ 13396675851370694029ull, 4920927688644468707ull}},
+{{15484926445989289885ull, 8854140408839936720ull,
+ 12134158795785979633ull, 6151159610805585884ull}},
+{{909413983777060740ull, 15679361529477308805ull,
+ 15167698494732474541ull, 7688949513506982355ull}},
+{{2874226749074356915ull, 12105443965137011955ull,
+ 7173968549994102636ull, 4805593445941863972ull}},
+{{17427841491625109855ull, 15131804956421264943ull,
+ 8967460687492628295ull, 6006991807427329965ull}},
+{{17173115846103999415ull, 14303070177099193275ull,
+ 15821011877793173273ull, 7508739759284162456ull}},
+{{8427354394601305682ull, 2021889833045913941ull,
+ 9888132423620733296ull, 4692962349552601535ull}},
+{{15145879011679020007ull, 2527362291307392426ull,
+ 7748479511098528716ull, 5866202936940751919ull}},
+{{9708976727743999200ull, 3159202864134240533ull,
+ 5073913370445772991ull, 7332753671175939899ull}},
+{{16747906928107386904ull, 17784061635449964378ull,
+ 1730705694629828334ull, 9165942088969924874ull}},
+{{15079127848494504719ull, 6503352503728839832ull,
+ 5693377077571030613ull, 5728713805606203046ull}},
+{{402165736908579283ull, 12740876648088437695ull,
+ 16340093383818564074ull, 7160892257007753807ull}},
+{{14337765226417887816ull, 6702723773255771310ull,
+ 15813430711345817189ull, 8951115321259692259ull}},
+{{4349417248083791981ull, 6495045367498551021ull,
+ 7577551185377441791ull, 5594447075787307662ull}},
+{{10048457578532127880ull, 3507120690945800872ull,
+ 248566944867026431ull, 6993058844734134578ull}},
+{{12560571973165159850ull, 18218958918964414802ull,
+ 9534080717938558846ull, 8741323555917668222ull}},
+{{12462043501655612811ull, 6775163305925371347ull,
+ 1347114430284211375ull, 5463327222448542639ull}},
+{{10965868358642128109ull, 3857268113979326280ull,
+ 15518951093137427931ull, 6829159028060678298ull}},
+{{13707335448302660136ull, 209899124046769946ull,
+ 10175316829567009106ull, 8536448785075847873ull}},
+{{13178770673616550489ull, 4742872970956619120ull,
+ 17888788064547850451ull, 5335280490672404920ull}},
+{{16473463342020688112ull, 1316905195268385996ull,
+ 3914241006975261448ull, 6669100613340506151ull}},
+{{2145085103816308523ull, 1646131494085482496ull, 281115240291688906ull,
+ 8336375766675632689ull}},
+{{1340678189885192827ull, 5640518202230814464ull,
+ 11704912071250775326ull, 5210234854172270430ull}},
+{{1675847737356491034ull, 16274019789643293888ull,
+ 5407768052208693349ull, 6512793567715338038ull}},
+{{2094809671695613792ull, 6507466681771953648ull,
+ 15983082102115642495ull, 8140991959644172547ull}},
+{{1309256044809758620ull, 10984695703748552886ull,
+ 7683583304608582607ull, 5088119974777607842ull}},
+{{10859942092866974083ull, 9119183611258303203ull,
+ 381107093905952451ull, 6360149968472009803ull}},
+{{8963241597656329700ull, 6787293495645491100ull,
+ 14311441922664604276ull, 7950187460590012253ull}},
+{{14825398035389981871ull, 13465430471633207745ull,
+ 11250494210879071624ull, 4968867162868757658ull}},
+{{4696689488955313626ull, 16831788089541509682ull,
+ 4839745726744063722ull, 6211083953585947073ull}},
+{{15094233898048917841ull, 11816363075072111294ull,
+ 10661368176857467557ull, 7763854941982433841ull}},
+{{4822210167853185747ull, 9691069931133763511ull,
+ 18192570156604386983ull, 4852409338739021150ull}},
+{{1416076691389094279ull, 7502151395489816485ull,
+ 13517340658900707921ull, 6065511673423776438ull}},
+{{6381781882663755753ull, 13989375262789658510ull,
+ 7673303786771109093ull, 7581889591779720548ull}},
+{{17823671731947011058ull, 11049202548457230520ull,
+ 14019186903586718991ull, 4738680994862325342ull}},
+{{3832845591224212206ull, 9199817167144150247ull,
+ 8300611592628622931ull, 5923351243577906678ull}},
+{{179370970602877353ull, 6888085440502799905ull, 1152392453931002856ull,
+ 7404189054472383348ull}},
+{{11641321902695268106ull, 4305053400314249940ull,
+ 9943617320561652593ull, 4627618159045239592ull}},
+{{14551652378369085132ull, 9993002768820200329ull,
+ 12429521650702065741ull, 5784522698806549490ull}},
+{{4354507417679192703ull, 17102939479452638316ull,
+ 6313530026522806368ull, 7230653373508186863ull}},
+{{5443134272098990879ull, 2931930275606246279ull,
+ 3280226514726120057ull, 9038316716885233579ull}},
+{{10319487947702951156ull, 13361671468322373684ull,
+ 18191042636199682699ull, 5648947948053270986ull}},
+{{12899359934628688944ull, 12090403316975579201ull,
+ 13515431258394827566ull, 7061184935066588733ull}},
+{{2289141863003697468ull, 5889632109364698194ull,
+ 3059231017711370746ull, 8826481168833235917ull}},
+{{6042399682804698822ull, 8292706086780324275ull,
+ 4217862395283300668ull, 5516550730520772448ull}},
+{{2941313585078485623ull, 10365882608475405344ull,
+ 5272327994104125835ull, 6895688413150965560ull}},
+{{3676641981348107029ull, 8345667242166868776ull,
+ 6590409992630157294ull, 8619610516438706950ull}},
+{{2297901238342566893ull, 604356007926905081ull,
+ 17954064300676012021ull, 5387256572774191843ull}},
+{{7484062566355596521ull, 5367131028336019255ull,
+ 17830894357417627122ull, 6734070715967739804ull}},
+{{4743392189517107747ull, 15932285822274799877ull,
+ 3841873873062482286ull, 8417588394959674756ull}},
+{{5270463127661886294ull, 5345992620494362019ull,
+ 11624543207518827237ull, 5260992746849796722ull}},
+{{1976392891149969963ull, 11294176794045340428ull,
+ 5307306972543758238ull, 6576240933562245903ull}},
+{{2470491113937462454ull, 4894348955701899727ull,
+ 2022447697252309894ull, 8220301166952807379ull}},
+{{8461585973851995890ull, 16894026152595851041ull,
+ 17404930875278551347ull, 5137688229345504611ull}},
+{{15188668485742382766ull, 16505846672317425897ull,
+ 17144477575670801280ull, 6422110286681880764ull}},
+{{5150777551895814746ull, 2185564266687230756ull,
+ 2983852895878949985ull, 8027637858352350956ull}},
+{{12442608006789660024ull, 12895192712747988982ull,
+ 11088280096779119548ull, 5017273661470219347ull}},
+{{6329887971632299222ull, 16118990890934986228ull,
+ 9248664102546511531ull, 6271592076837774184ull}},
+{{7912359964540374027ull, 15537052595241344881ull,
+ 11560830128183139414ull, 7839490096047217730ull}},
+{{16474440023906203527ull, 5098971853598452646ull,
+ 11837204848541850038ull, 4899681310029511081ull}},
+{{11369677993027978601ull, 15597086853852841616ull,
+ 961448005395148835ull, 6124601637536888852ull}},
+{{14212097491284973251ull, 14884672548888664116ull,
+ 1201810006743936044ull, 7655752046921111065ull}},
+{{18105932968907884090ull, 79548306200639264ull,
+ 12280346300283429788ull, 4784845029325694415ull}},
+{{4185672137425303497ull, 99435382750799081ull, 10738746856926899331ull,
+ 5981056286657118019ull}},
+{{9843776190209017275ull, 13959352283720662563ull,
+ 8811747552731236259ull, 7476320358321397524ull}},
+{{3846517109666941845ull, 6418752168111720150ull,
+ 14730714257311798470ull, 4672700223950873452ull}},
+{{14031518423938453114ull, 17246812246994425995ull,
+ 18413392821639748087ull, 5840875279938591815ull}},
+{{12927712011495678488ull, 16946829290315644590ull,
+ 18405055008622297205ull, 7301094099923239769ull}},
+{{6936267977514822302ull, 7348478557612392026ull,
+ 9171260705495707795ull, 9126367624904049712ull}},
+{{8946853504374151843ull, 2286956089294051064ull,
+ 5732037940934817372ull, 5703979765565031070ull}},
+{{11183566880467689804ull, 2858695111617563830ull,
+ 16388419463023297523ull, 7129974706956288837ull}},
+{{4756086563729836446ull, 17408426944804118500ull,
+ 6650466273496958191ull, 8912468383695361047ull}},
+{{12195926139185923587ull, 17797795868143655918ull,
+ 11074070448576680725ull, 5570292739809600654ull}},
+{{6021535637127628676ull, 8412186779897406186ull,
+ 4619216023866075099ull, 6962865924762000818ull}},
+{{16750291583264311653ull, 5903547456444369828ull,
+ 14997392066687369682ull, 8703582405952501022ull}},
+{{1245560202685418975ull, 8301403178705119047ull,
+ 4761684023252218147ull, 5439739003720313139ull}},
+{{15392008308638937431ull, 5765067954954010904ull,
+ 1340419010637884780ull, 6799673754650391424ull}},
+{{793266312089120172ull, 7206334943692513631ull, 1675523763297355975ull,
+ 8499592193312989280ull}},
+{{7413320472696781964ull, 11421488367448902875ull,
+ 1047202352060847484ull, 5312245120820618300ull}},
+{{4654964572443589551ull, 14276860459311128594ull,
+ 1309002940076059355ull, 6640306401025772875ull}},
+{{15042077752409262746ull, 13234389555711522838ull,
+ 15471311730377237906ull, 8300383001282216093ull}},
+{{4789612576828401313ull, 12883179490747089678ull,
+ 11975412840699467643ull, 5187739375801385058ull}},
+{{15210387757890277449ull, 11492288345006474193ull,
+ 5745894014019558746ull, 6484674219751731323ull}},
+{{5177926642080683099ull, 5141988394403316934ull,
+ 2570681499097060529ull, 8105842774689664154ull}},
+{{17071262206582590649ull, 14742957792570542843ull,
+ 6218361955363050734ull, 5066151734181040096ull}},
+{{16727391739800850407ull, 9205325203858402746ull,
+ 7772952444203813418ull, 6332689667726300120ull}},
+{{11685867637896287201ull, 2283284467968227625ull,
+ 9716190555254766773ull, 7915862084657875150ull}},
+{{386138246044097645ull, 3732895801693836218ull, 1460933078606841329ull,
+ 4947413802911171969ull}},
+{{9706044844409897864ull, 9277805770544683176ull,
+ 6437852366685939565ull, 6184267253638964961ull}},
+{{12132556055512372329ull, 16208943231608241874ull,
+ 12659001476784812360ull, 7730334067048706201ull}},
+{{12194533553122620610ull, 10130589519755151171ull,
+ 994346895349425869ull, 4831458791905441376ull}},
+{{10631480922975887858ull, 17274922918121326868ull,
+ 1242933619186782336ull, 6039323489881801720ull}},
+{{13289351153719859823ull, 3146909573942106969ull,
+ 1553667023983477921ull, 7549154362352252150ull}},
+{{1388315443433830534ull, 13496033529782286616ull,
+ 14806099945271837412ull, 4718221476470157593ull}},
+{{1735394304292288167ull, 16870041912227858270ull,
+ 4672566876307633053ull, 5897776845587696992ull}},
+{{11392614917220136016ull, 7252494335002659125ull,
+ 5840708595384541317ull, 7372221056984621240ull}},
+{{405710591243006308ull, 13677303937180711811ull,
+ 7300885744230676646ull, 9215276321230776550ull}},
+{{16394470184022736607ull, 3936628942310556977ull,
+ 18398111645426336616ull, 5759547700769235343ull}},
+{{6658029674746257046ull, 4920786177888196222ull,
+ 18385953538355532866ull, 7199434625961544179ull}},
+{{17545909130287597116ull, 15374354759215021085ull,
+ 18370755904517028178ull, 8999293282451930224ull}},
+{{13272036215643442150ull, 14220657742936776082ull,
+ 11481722440323142611ull, 5624558301532456390ull}},
+{{7366673232699526879ull, 13164136160243582199ull,
+ 5128781013549152456ull, 7030697876915570488ull}},
+{{4596655522447020695ull, 16455170200304477749ull,
+ 6410976266936440570ull, 8788372346144463110ull}},
+{{5178752710743081886ull, 14896167393617686497ull,
+ 17841918222117439068ull, 5492732716340289443ull}},
+{{11085126906856240262ull, 173465168312556505ull,
+ 17690711759219410932ull, 6865915895425361804ull}},
+{{21350578288136615ull, 216831460390695632ull, 3666645625314712049ull,
+ 8582394869281702256ull}},
+{{13344111430085385ull, 11664734708812654530ull, 2291653515821695030ull,
+ 5363996793301063910ull}},
+{{9240052176142382539ull, 5357546349161042354ull,
+ 12087938931631894596ull, 6704995991626329887ull}},
+{{2326693183323202365ull, 6696932936451302943ull,
+ 10498237646112480341ull, 8381244989532912359ull}},
+{{8371712267218083334ull, 6491426094495758291ull,
+ 13478927556461382069ull, 5238278118458070224ull}},
+{{5852954315595216264ull, 12725968636547085768ull,
+ 16848659445576727586ull, 6547847648072587780ull}},
+{{7316192894494020330ull, 6684088758829081402ull,
+ 2614080233261357867ull, 8184809560090734726ull}},
+{{9184306577486150610ull, 1871712465054481924ull,
+ 15468858201070512379ull, 5115505975056709203ull}},
+{{11480383221857688263ull, 16174698636600266117ull,
+ 14724386732910752569ull, 6394382468820886504ull}},
+{{515420972039946616ull, 6383315240468168935ull,
+ 18405483416138440712ull, 7992978086026108130ull}},
+{{7239667135166048491ull, 3989572025292605584ull,
+ 16115113153513913349ull, 4995611303766317581ull}},
+{{9049583918957560614ull, 9598651050043144884ull,
+ 6308833386610227974ull, 6244514129707896977ull}},
+{{11311979898696950767ull, 2774941775699155297ull,
+ 12497727751690172872ull, 7805642662134871221ull}},
+{{152458409044512374ull, 1734338609811972061ull,
+ 10116922854020051997ull, 4878526663834294513ull}},
+{{4802259029733028371ull, 6779609280692352980ull,
+ 17257839585952452900ull, 6098158329792868141ull}},
+{{6002823787166285464ull, 8474511600865441225ull,
+ 7737241427158402413ull, 7622697912241085177ull}},
+{{15280979913047398175ull, 7602412759754594717ull,
+ 16364990938042471268ull, 4764186195150678235ull}},
+{{5266166836027084007ull, 9503015949693243397ull,
+ 15844552654125701181ull, 5955232743938347794ull}},
+{{11194394563461242912ull, 16490455955543942150ull,
+ 10582318780802350668ull, 7444040929922934743ull}},
+{{2384810583735888916ull, 1083162935360188036ull,
+ 13531478265642551024ull, 4652525581201834214ull}},
+{{2981013229669861145ull, 1353953669200235045ull,
+ 7690975795198412972ull, 5815656976502292768ull}},
+{{8337952555514714336ull, 1692442086500293806ull,
+ 9613719743998016215ull, 7269571220627865960ull}},
+{{1199068657538617111ull, 15950610663407530970ull,
+ 12017149679997520268ull, 9086964025784832450ull}},
+{{5361103929389023599ull, 745759627774931048ull,
+ 12122404568425838072ull, 5679352516115520281ull}},
+{{6701379911736279498ull, 932199534718663810ull, 1317947655250133878ull,
+ 7099190645144400352ull}},
+{{17600096926525125181ull, 10388621455253105570ull,
+ 1647434569062667347ull, 8873988306430500440ull}},
+{{15611746597505591142ull, 4187045400319497029ull,
+ 1029646605664167092ull, 5546242691519062775ull}},
+{{5679625191599825216ull, 5233806750399371287ull,
+ 15122116312362372577ull, 6932803364398828468ull}},
+{{2487845471072393615ull, 11153944456426602013ull,
+ 455901316743414105ull, 8666004205498535586ull}},
+{{3860746428633939962ull, 53686257625544402ull, 4896624341392021720ull,
+ 5416252628436584741ull}},
+{{14049305072647200760ull, 67107822031930502ull,
+ 10732466445167415054ull, 6770315785545730926ull}},
+{{8338259303954225142ull, 9307256814394688936ull,
+ 4192211019604493009ull, 8462894731932163658ull}},
+{{5211412064971390714ull, 17346250555065150345ull,
+ 7231817905680196034ull, 5289309207457602286ull}},
+{{11125951099641626296ull, 12459441156976662123ull,
+ 18263144418955020851ull, 6611636509322002857ull}},
+{{9295752856124644966ull, 10962615427793439750ull,
+ 8993872468411612352ull, 8264545636652503572ull}},
+{{1198159516650515200ull, 6851634642370899844ull,
+ 14844542329612033528ull, 5165341022907814732ull}},
+{{1497699395813144000ull, 8564543302963624805ull, 108933838305490294ull,
+ 6456676278634768416ull}},
+{{6483810263193817904ull, 1482307091849755198ull, 136167297881862868ull,
+ 8070845348293460520ull}},
+{{17887439469778299902ull, 10149813969260872806ull,
+ 85104561176164292ull, 5044278342683412825ull}},
+{{13135927300368099070ull, 12687267461576091008ull,
+ 4718066719897593269ull, 6305347928354266031ull}},
+{{16419909125460123837ull, 2024026271687950048ull,
+ 1285897381444603683ull, 7881684910442832539ull}},
+{{10262443203412577398ull, 17405917484300826444ull,
+ 16944586927898734965ull, 4926053069026770336ull}},
+{{12828054004265721748ull, 7922338800093869343ull,
+ 2733989586163867091ull, 6157566336283462921ull}},
+{{11423381486904764280ull, 5291237481689948775ull,
+ 8029173001132221768ull, 7696957920354328651ull}},
+{{14057142456956559531ull, 3307023426056217984ull,
+ 2712390116493944653ull, 4810598700221455407ull}},
+{{17571428071195699414ull, 8745465300997660384ull,
+ 17225545700899594528ull, 6013248375276819258ull}},
+{{3517541015285072652ull, 10931831626247075481ull,
+ 12308560089269717352ull, 7516560469096024073ull}},
+{{13727678180621640167ull, 6832394766404422175ull,
+ 775321028152491489ull, 4697850293185015046ull}},
+{{12547911707349662305ull, 13152179476432915623ull,
+ 10192523322045390169ull, 5872312866481268807ull}},
+{{11073203615759689977ull, 2605166290258980817ull,
+ 8128968134129349808ull, 7340391083101586009ull}},
+{{6446464417448760ull, 3256457862823726022ull, 14772896186089075164ull,
+ 9175488853876982511ull}},
+{{13839087095543069187ull, 11258658201119604571ull,
+ 16150589143946753833ull, 5734680533673114069ull}},
+{{12687172851001448579ull, 238264696117342002ull,
+ 6353178374651278580ull, 7168350667091392587ull}},
+{{6635594026897034916ull, 297830870146677503ull, 3329786949886710321ull,
+ 8960438333864240734ull}},
+{{11064775294451728679ull, 11715359339910143199ull,
+ 15916174898961357662ull, 5600273958665150458ull}},
+{{9219283099637272944ull, 5420827138032903191ull,
+ 10671846586846921270ull, 7000342448331438073ull}},
+{{6912417856119203276ull, 15999405959395904797ull,
+ 17951494251986039491ull, 8750428060414297591ull}},
+{{6626104169288196000ull, 7693785715408746546ull,
+ 18137212935132356538ull, 5469017537758935994ull}},
+{{17506002248465020808ull, 393860107406157374ull,
+ 13448144132060669865ull, 6836271922198669993ull}},
+{{12659130773726500202ull, 5104011152685084622ull,
+ 2975122109793673619ull, 8545339902748337492ull}},
+{{3300270715151674722ull, 884163961214483937ull,
+ 11082823355475821820ull, 5340837439217710932ull}},
+{{8737024412366981307ull, 1105204951518104921ull,
+ 13853529194344777275ull, 6676046799022138665ull}},
+{{15532966533886114537ull, 15216564244679794863ull,
+ 3481853437648807881ull, 8345058498777673332ull}},
+{{16625633111319903442ull, 2592823625283789933ull,
+ 11399530435385280734ull, 5215661561736045832ull}},
+{{6946983333867715590ull, 12464401568459513225ull,
+ 14249413044231600917ull, 6519576952170057290ull}},
+{{13295415185762032392ull, 1745443905292227819ull,
+ 8588394268434725339ull, 8149471190212571613ull}},
+{{6003791481887576293ull, 17231803505303500051ull,
+ 7673589426985397288ull, 5093419493882857258ull}},
+{{2893053333932082462ull, 3093010307919823448ull, 368614746876970803ull,
+ 6366774367353571573ull}},
+{{3616316667415103078ull, 17701320940181943022ull,
+ 5072454452023601407ull, 7958467959191964466ull}},
+{{16095255972416603136ull, 17980854615254796244ull,
+ 7781970050942138783ull, 4974042474494977791ull}},
+{{1672325891811202303ull, 17864382250641107402ull,
+ 5115776545250285575ull, 6217553093118722239ull}},
+{{11313779401618778687ull, 17718791794873996348ull,
+ 1783034663135469065ull, 7771941366398402799ull}},
+{{16294484162866512488ull, 4156715844155165861ull,
+ 8031925692100750022ull, 4857463353999001749ull}},
+{{6533047148300976897ull, 14419266842048733135ull,
+ 14651593133553325431ull, 6071829192498752186ull}},
+{{3554622916948833218ull, 13412397534133528515ull,
+ 9091119380086880981ull, 7589786490623440233ull}},
+{{18362540387588878425ull, 10688591468047149273ull,
+ 17211164658622770373ull, 4743616556639650145ull}},
+{{9118117429203934319ull, 17972425353486324496ull,
+ 7678897767996299254ull, 5929520695799562682ull}},
+{{11397646786504917899ull, 13242159655003129812ull,
+ 375250173140598260ull, 7411900869749453353ull}},
+{{16346901278420349495ull, 17499721821231731940ull,
+ 11763746404281343672ull, 4632438043593408345ull}},
+{{1986882524315885253ull, 3427908202830113310ull, 869624950069515879ull,
+ 5790547554491760432ull}},
+{{11706975192249632374ull, 18119943308819805349ull,
+ 1087031187586894848ull, 7238184443114700540ull}},
+{{798660935029876755ull, 4203185062315205071ull, 1358788984483618561ull,
+ 9047730553893375675ull}},
+{{7416692112034754828ull, 14156205710015472929ull,
+ 16990144179798119264ull, 5654831596183359796ull}},
+{{13882551158470831439ull, 17695257137519341161ull,
+ 2790936151038097464ull, 7068539495229199746ull}},
+{{3518130892806375587ull, 3672327348189624836ull,
+ 12712042225652397639ull, 8835674369036499682ull}},
+{{11422203844858760550ull, 9212733620259597378ull,
+ 12556712409460136428ull, 5522296480647812301ull}},
+{{5054382769218674879ull, 11515917025324496723ull,
+ 1860832456543006823ull, 6902870600809765377ull}},
+{{1706292443095955695ull, 9783210263228233000ull,
+ 6937726589106146433ull, 8628588251012206721ull}},
+{{1066432776934972310ull, 17643721460586115385ull,
+ 15865294164259811280ull, 5392867656882629200ull}},
+{{5944726989596103291ull, 3607907752023092615ull,
+ 1384873631615212485ull, 6741084571103286501ull}},
+{{2819222718567741209ull, 9121570708456253673ull,
+ 6342778057946403510ull, 8426355713879108126ull}},
+{{13291229245173308016ull, 1089295674357770641ull,
+ 17799294341498665906ull, 5266472321174442578ull}},
+{{2778978501184471308ull, 10584991629801989110ull,
+ 13025745890018556574ull, 6583090401468053223ull}},
+{{12697095163335364943ull, 4007867500397710579ull,
+ 11670496344095807814ull, 8228863001835066529ull}},
+{{5629841467870909137ull, 16339975243030732824ull,
+ 376531187418798027ull, 5143039376146916581ull}},
+{{7037301834838636422ull, 15813283035361028126ull,
+ 5082350002700885438ull, 6428799220183645726ull}},
+{{18019999330403071335ull, 10543231757346509349ull,
+ 15576309540230882606ull, 8035999025229557157ull}},
+{{13568342590715613537ull, 1977833829914180439ull,
+ 12041036471857995581ull, 5022499390768473223ull}},
+{{12348742219967129017ull, 7083978305820113453ull,
+ 10439609571395106572ull, 6278124238460591529ull}},
+{{1600869719676747559ull, 8854972882275141817ull,
+ 17661197982671271119ull, 7847655298075739411ull}},
+{{12529758620866436984ull, 12451887079063045491ull,
+ 8732405729955850497ull, 4904784561297337132ull}},
+{{11050512257655658326ull, 1729800793546643152ull,
+ 10915507162444813122ull, 6130980701621671415ull}},
+{{13813140322069572908ull, 11385623028788079748ull,
+ 9032697934628628498ull, 7663725877027089269ull}},
+{{17856584738148258876ull, 11727700411419937746ull,
+ 7951279218356586763ull, 4789828673141930793ull}},
+{{13097358885830547786ull, 10047939495847534279ull,
+ 14550785041373121358ull, 5987285841427413491ull}},
+{{11760012588860796829ull, 3336552332954642041ull,
+ 13576795283289013794ull, 7484107301784266864ull}},
+{{432478840396916162ull, 6697031226524039180ull, 8485497052055633621ull,
+ 4677567063615166790ull}},
+{{540598550496145203ull, 12982975051582436879ull,
+ 1383499278214766218ull, 5846958829518958488ull}},
+{{14510806243402345215ull, 7005346777623270290ull,
+ 1729374097768457773ull, 7308698536898698110ull}},
+{{8915135767398155711ull, 13368369490456475767ull,
+ 11385089659065348024ull, 9135873171123372637ull}},
+{{12489488882264929175ull, 8355230931535297354ull,
+ 9421524046129536467ull, 5709920731952107898ull}},
+{{6388489065976385661ull, 5832352645991733789ull,
+ 2553533020807144776ull, 7137400914940134873ull}},
+{{12597297350897869980ull, 7290440807489667236ull,
+ 7803602294436318874ull, 8921751143675168591ull}},
+{{17096682881165944546ull, 9168211523108429926ull,
+ 11794780461663781152ull, 5576094464796980369ull}},
+{{12147481564602654874ull, 11460264403885537408ull,
+ 908417521797562728ull, 6970118080996225462ull}},
+{{15184351955753318593ull, 14325330504856921760ull,
+ 10358893939101729218ull, 8712647601245281827ull}},
+{{9490219972345824121ull, 13565017583962964004ull,
+ 4168465702724886809ull, 5445404750778301142ull}},
+{{11862774965432280151ull, 3121213924671541293ull,
+ 14433954165260884320ull, 6806755938472876427ull}},
+{{993410651508186476ull, 3901517405839426617ull,
+ 13430756688148717496ull, 8508444923091095534ull}},
+{{12150096703261086308ull, 2438448378649641635ull,
+ 3782536911665560531ull, 5317778076931934709ull}},
+{{10575934860648969981ull, 16883118528594215756ull,
+ 9339857158009338567ull, 6647222596164918386ull}},
+{{13219918575811212476ull, 16492212142315381791ull,
+ 2451449410656897401ull, 8309028245206147983ull}},
+{{15179978137523089653ull, 3390103561306031763ull,
+ 8449684909301642732ull, 5193142653253842489ull}},
+{{14363286653476474163ull, 4237629451632539704ull,
+ 15173792155054441319ull, 6491428316567303111ull}},
+{{17954108316845592703ull, 685350796113286726ull,
+ 14355554175390663745ull, 8114285395709128889ull}},
+{{6609631679601107536ull, 11957559293639273964ull,
+ 2054692331978082984ull, 5071428372318205556ull}},
+{{8262039599501384419ull, 14946949117049092455ull,
+ 2568365414972603730ull, 6339285465397756945ull}},
+{{5715863480949342620ull, 9460314359456589761ull,
+ 7822142787143142567ull, 7924106831747196181ull}},
+{{15101629721661808898ull, 12830225502301450456ull,
+ 7194682251178158056ull, 4952566769841997613ull}},
+{{430293078367709506ull, 16037781877876813071ull,
+ 13605038832400085474ull, 6190708462302497016ull}},
+{{14372924403241800595ull, 10823855310491240530ull,
+ 17006298540500106843ull, 7738385577878121270ull}},
+{{13594763770453513276ull, 4459066559843331379ull,
+ 6017250569385178873ull, 4836490986173825794ull}},
+{{12381768694639503691ull, 10185519218231552128ull,
+ 16744935248586249399ull, 6045613732717282242ull}},
+{{15477210868299379613ull, 8120213004362052256ull,
+ 11707797023878035941ull, 7557017165896602803ull}},
+{{9673256792687112258ull, 7380976136939976612ull,
+ 5011530130710078511ull, 4723135728685376752ull}},
+{{12091570990858890323ull, 4614534152747582861ull,
+ 6264412663387598139ull, 5903919660856720940ull}},
+{{1279405683291449191ull, 1156481672507090673ull,
+ 7830515829234497674ull, 7379899576070901175ull}},
+{{12328843598125625505ull, 5334487063744319574ull,
+ 11811601420912642902ull, 4612437235044313234ull}},
+{{6187682460802256073ull, 15891480866535175276ull,
+ 5541129739286027819ull, 5765546543805391543ull}},
+{{7734603076002820091ull, 15252665064741581191ull,
+ 2314726155680146870ull, 7206933179756739429ull}},
+{{5056567826576137210ull, 9842459294072200681ull,
+ 7505093713027571492ull, 9008666474695924286ull}},
+{{14689569937678555516ull, 15374909095649901233ull,
+ 78997552214844278ull, 5630416546684952679ull}},
+{{4526904366816030683ull, 9995264332707600734ull,
+ 13933804995550719060ull, 7038020683356190848ull}},
+{{14882002495374814162ull, 12494080415884500917ull,
+ 17417256244438398825ull, 8797525854195238560ull}},
+{{11607094568822952803ull, 891271232286731217ull,
+ 10885785152773999266ull, 5498453658872024100ull}},
+{{673810155746527292ull, 10337461077213189830ull,
+ 13607231440967499082ull, 6873067073590030125ull}},
+{{10065634731537934923ull, 3698454309661711479ull,
+ 3173981245927210141ull, 8591333841987537657ull}},
+{{13208550734852291183ull, 4617376952752263626ull,
+ 13512953324772976098ull, 5369583651242211035ull}},
+{{7287316381710588171ull, 14995093227795105341ull,
+ 12279505637538832218ull, 6711979564052763794ull}},
+{{13720831495565623117ull, 9520494497889105868ull,
+ 6126010010068764465ull, 8389974455065954743ull}},
+{{17798891721583290256ull, 17479524107249160927ull,
+ 10746285283934059646ull, 5243734034416221714ull}},
+{{17636928633551724916ull, 12626033097206675351ull,
+ 4209484568062798750ull, 6554667543020277143ull}},
+{{17434474773512268241ull, 6559169334653568381ull,
+ 650169691651110534ull, 8193334428775346429ull}},
+{{13202389742658861603ull, 17934538889440643950ull,
+ 2712199066495638035ull, 5120834017984591518ull}},
+{{7279615141468801196ull, 17806487593373417034ull,
+ 12613620869974323352ull, 6401042522480739397ull}},
+{{18322890963690777303ull, 3811365418007219676ull,
+ 1931968032185740479ull, 8001303153100924247ull}},
+{{2228434815451960006ull, 9299632413895594154ull,
+ 8125009047757169655ull, 5000814470688077654ull}},
+{{12008915556169725816ull, 7012854498942104788ull,
+ 932889272841686261ull, 6251018088360097068ull}},
+{{15011144445212157269ull, 13377754142105018889ull,
+ 1166111591052107826ull, 7813772610450121335ull}},
+{{2464436250616516438ull, 12972782357243024710ull,
+ 7646348772048649247ull, 4883607881531325834ull}},
+{{12303917350125421355ull, 11604291928126392983ull,
+ 334563928206035751ull, 6104509851914157293ull}},
+{{10768210669229388789ull, 9893678891730603325ull,
+ 5029890928684932593ull, 7630637314892696616ull}},
+{{9035974677482061946ull, 17712764353400096838ull,
+ 3143681830428082870ull, 4769148321807935385ull}},
+{{2071596309997801624ull, 12917583404895345240ull,
+ 8541288306462491492ull, 5961435402259919231ull}},
+{{2589495387497252030ull, 16146979256119181550ull,
+ 6064924364650726461ull, 7451794252824899039ull}},
+{{15453492672467946231ull, 12397705044288182420ull,
+ 10708106755547785894ull, 4657371408015561899ull}},
+{{870121766875381172ull, 6273759268505452218ull, 8773447426007344464ull,
+ 5821714260019452374ull}},
+{{10311024245449002273ull, 7842199085631815272ull,
+ 1743437245654404772ull, 7277142825024315468ull}},
+{{12888780306811252842ull, 9802748857039769090ull,
+ 2179296557068005965ull, 9096428531280394335ull}},
+{{12667173710184420930ull, 8432561044863549633ull,
+ 8279589375808585584ull, 5685267832050246459ull}},
+{{1998909082448362451ull, 10540701306079437042ull,
+ 5737800701333344076ull, 7106584790062808074ull}},
+{{11722008389915228871ull, 13175876632599296302ull,
+ 16395622913521455903ull, 8883230987578510092ull}},
+{{2714569225269630141ull, 15152451923015642045ull,
+ 1023892284096134131ull, 5552019367236568808ull}},
+{{8004897550014425580ull, 14328878885342164652ull,
+ 1279865355120167664ull, 6940024209045711010ull}},
+{{10006121937518031974ull, 17911098606677705815ull,
+ 10823203730754985388ull, 8675030261307138762ull}},
+{{13171355238589851840ull, 1971064592318790326ull,
+ 11376188350149253772ull, 5421893913316961726ull}},
+{{7240822011382538992ull, 2463830740398487908ull,
+ 4996863400831791407ull, 6777367391646202158ull}},
+{{9051027514228173740ull, 16914846480780273597ull,
+ 15469451287894515066ull, 8471709239557752697ull}},
+{{7962735205606302540ull, 15183465068915058902ull,
+ 2750878027292990060ull, 5294818274723595436ull}},
+{{730046970153102366ull, 532587262434272012ull, 3438597534116237576ull,
+ 6618522843404494295ull}},
+{{912558712691377958ull, 665734078042840015ull, 18133304972927460682ull,
+ 8273153554255617868ull}},
+{{7487878223073193080ull, 5027769817204162913ull,
+ 2109943571224887118ull, 5170720971409761168ull}},
+{{13971533797268879254ull, 15508084308359979449ull,
+ 2637429464031108897ull, 6463401214262201460ull}},
+{{3629359191303935355ull, 5550047330167810600ull,
+ 3296786830038886122ull, 8079251517827751825ull}},
+{{2268349494564959597ull, 8080465599782269529ull,
+ 13589706814842773586ull, 5049532198642344890ull}},
+{{7447122886633587400ull, 877209962873061103ull, 7763761481698691175ull,
+ 6311915248302931113ull}},
+{{4697217589864596346ull, 14931570508873490091ull,
+ 14316387870550751872ull, 7889894060378663891ull}},
+{{629917984451678765ull, 9332231568045931307ull, 6641899409880525968ull,
+ 4931183787736664932ull}},
+{{14622455535846762168ull, 11665289460057414133ull,
+ 8302374262350657460ull, 6163979734670831165ull}},
+{{4443011364526288997ull, 14581611825071767667ull,
+ 14989653846365709729ull, 7704974668338538956ull}},
+{{471039093615236672ull, 2195978363028772936ull, 145161617123792773ull,
+ 4815609167711586848ull}},
+{{588798867019045839ull, 7356658972213354074ull, 181452021404740966ull,
+ 6019511459639483560ull}},
+{{9959370620628583107ull, 18419195752121468400ull,
+ 226815026755926207ull, 7524389324549354450ull}},
+{{6224606637892864442ull, 18429526372716999606ull,
+ 4753445410149841783ull, 4702743327843346531ull}},
+{{17004130334220856360ull, 18425221947468861603ull,
+ 1330120744259914325ull, 5878429159804183164ull}},
+{{16643476899348682546ull, 9196469379053913292ull,
+ 1662650930324892907ull, 7348036449755228955ull}},
+{{2357602050476301567ull, 6883900705390003712ull,
+ 15913371718188279846ull, 9185045562194036193ull}},
+{{1473501281547688480ull, 18137495996150916032ull,
+ 3028328296226593047ull, 5740653476371272621ull}},
+{{1841876601934610599ull, 18060183976761257136ull,
+ 8397096388710629213ull, 7175816845464090776ull}},
+{{2302345752418263249ull, 8740171915669407708ull,
+ 10496370485888286517ull, 8969771056830113470ull}},
+{{10662338132116190339ull, 7768450456507073769ull,
+ 1948545535252791169ull, 5606106910518820919ull}},
+{{17939608683572625827ull, 14322249089061230115ull,
+ 16270739974348152673ull, 7007633638148526148ull}},
+{{17812824836038394380ull, 4067753306044373932ull,
+ 1891680894225639226ull, 8759542047685657686ull}},
+{{1909643485669220680ull, 7154031834705121612ull,
+ 15017358614173188228ull, 5474713779803536053ull}},
+{{2387054357086525850ull, 8942539793381402015ull,
+ 4936640212434321573ull, 6843392224754420067ull}},
+{{16818876001640321024ull, 15789860760154140422ull,
+ 1559114247115514062ull, 8554240280943025084ull}},
+{{5900111482597812736ull, 5256976956668949860ull,
+ 10197818441301972097ull, 5346400175589390677ull}},
+{{7375139353247265920ull, 11182907214263575229ull,
+ 17358959070054853025ull, 6683000219486738346ull}},
+{{13830610209986470304ull, 143575962547305324ull,
+ 12475326800713790474ull, 8353750274358422933ull}},
+{{17867503418096319748ull, 4701420995019453731ull,
+ 10102922259659812998ull, 5221093921474014333ull}},
+{{17722693254193011781ull, 15100148280629092972ull,
+ 17240338843002154151ull, 6526367401842517916ull}},
+{{3706622494031713110ull, 14263499332358978312ull,
+ 3103679480043141073ull, 8157959252303147396ull}},
+{{2316639058769820694ull, 1997158055083279589ull,
+ 11163171711881738979ull, 5098724532689467122ull}},
+{{7507484841889663771ull, 16331505624136263198ull,
+ 4730592602997397915ull, 6373405665861833903ull}},
+{{160984015507303906ull, 15802696011742941094ull,
+ 1301554735319359490ull, 7966757082327292379ull}},
+{{13935673064974228654ull, 14488371025766726087ull,
+ 16954372774070457345ull, 4979223176454557736ull}},
+{{12807905312790397913ull, 4275405726926243897ull,
+ 2746221893878520066ull, 6224028970568197171ull}},
+{{2174823585705833679ull, 14567629195512580680ull,
+ 17267835422630313794ull, 7780036213210246463ull}},
+{{1359264741066146049ull, 13716454265622750829ull,
+ 17709926166785027977ull, 4862522633256404039ull}},
+{{6310766944760070466ull, 3310509776746274824ull,
+ 17525721690053897068ull, 6078153291570505049ull}},
+{{7888458680950088082ull, 4138137220932843530ull,
+ 8072094057285207623ull, 7597691614463131312ull}},
+{{9541972694021192955ull, 9503864790724109062ull,
+ 5045058785803254764ull, 4748557259039457070ull}},
+{{2704093830671715386ull, 11879830988405136328ull,
+ 15529695519108844263ull, 5935696573799321337ull}},
+{{3380117288339644233ull, 10238102717079032506ull,
+ 5577061343603891617ull, 7419620717249151672ull}},
+{{6724259323639665550ull, 17928029244242865076ull,
+ 3485663339752432260ull, 4637262948280719795ull}},
+{{8405324154549581937ull, 3963292481594029729ull,
+ 18192137229972704038ull, 5796578685350899743ull}},
+{{15118341211614365325ull, 14177487638847312969ull,
+ 18128485519038492143ull, 7245723356688624679ull}},
+{{5062868459235792944ull, 13110173530131753308ull,
+ 18048920880370727275ull, 9057154195860780849ull}},
+{{12387664823877146398ull, 5888015447118651865ull,
+ 4363046522590622691ull, 5660721372412988031ull}},
+{{1649522974564269286ull, 2748333290470926928ull, 842122134810890460ull,
+ 7075901715516235039ull}},
+{{2061903718205336607ull, 3435416613088658660ull,
+ 14887710723795776787ull, 8844877144395293798ull}},
+{{10512061860733111187ull, 18288036447676269326ull,
+ 4693133183944972587ull, 5528048215247058624ull}},
+{{3916705289061613176ull, 18248359541167948754ull,
+ 5866416479931215734ull, 6910060269058823280ull}},
+{{14119253648181792278ull, 13587077389605160134ull,
+ 7333020599914019668ull, 8637575336323529100ull}},
+{{4212847511686232270ull, 17715295405358000892ull,
+ 13806509911801038100ull, 5398484585202205687ull}},
+{{5266059389607790337ull, 3697375182987949499ull,
+ 12646451371323909722ull, 6748105731502757109ull}},
+{{1970888218582350018ull, 13845091015589712682ull,
+ 1973006158872723440ull, 8435132164378446387ull}},
+{{5843491155041356665ull, 8653181884743570426ull,
+ 17374029913791309814ull, 5271957602736528991ull}},
+{{16527735980656471639ull, 1593105319074687224ull,
+ 17105851373811749364ull, 6589947003420661239ull}},
+{{2212925902111037933ull, 1991381648843359031ull,
+ 16770628198837298801ull, 8237433754275826549ull}},
+{{8300607716460480564ull, 12773828576595569154ull,
+ 12787485633487005702ull, 5148396096422391593ull}},
+{{1152387608720824897ull, 6743913683889685635ull,
+ 2149298986576593416ull, 6435495120527989492ull}},
+{{15275542566183194834ull, 8429892104862107043ull,
+ 2686623733220741770ull, 8044368900659986865ull}},
+{{7241371094650802819ull, 9880368583966204806ull,
+ 13208354879331433366ull, 5027730562912491790ull}},
+{{18275085905168279332ull, 3127088693102980199ull,
+ 7287071562309515900ull, 6284663203640614738ull}},
+{{18232171363032961261ull, 3908860866378725249ull,
+ 18332211489741670683ull, 7855829004550768422ull}},
+{{4477578074254518932ull, 137195032273009329ull, 6845946162661156273ull,
+ 4909893127844230264ull}},
+{{10208658611245536569ull, 4783179808768649565ull,
+ 8557432703326445341ull, 6137366409805287830ull}},
+{{17372509282484308615ull, 10590660779388199860ull,
+ 1473418842303280868ull, 7671708012256609788ull}},
+{{1634446264697917077ull, 15842535023972400721ull,
+ 10144258813294326350ull, 4794817507660381117ull}},
+{{6654743849299784250ull, 10579796743110725093ull,
+ 17292009535045295842ull, 5993521884575476396ull}},
+{{12930115830052118216ull, 4001373892033630558ull,
+ 3168267845097068187ull, 7491902355719345496ull}},
+{{3469636375355185981ull, 195015673307325147ull, 1980167403185667617ull,
+ 4682438972324590935ull}},
+{{18172103524476146188ull, 4855455610061544337ull,
+ 16310267309264248233ull, 5853048715405738668ull}},
+{{8880071350313019023ull, 10681005531004318326ull,
+ 1941090062870758675ull, 7316310894257173336ull}},
+{{1876717151036497971ull, 8739570895328010004ull,
+ 2426362578588448344ull, 9145388617821466670ull}},
+{{10396320256252587040ull, 5462231809580006252ull,
+ 15351534666899943927ull, 5715867886138416668ull}},
+{{12995400320315733800ull, 2216103743547619911ull,
+ 742674259915378293ull, 7144834857673020836ull}},
+{{11632564381967279346ull, 7381815697861912793ull,
+ 928342824894222866ull, 8931043572091276045ull}},
+{{352823711088467735ull, 9225320829591083400ull, 2886057274772583243ull,
+ 5581902232557047528ull}},
+{{441029638860584669ull, 6919965018561466346ull, 3607571593465729054ull,
+ 6977377790696309410ull}},
+{{9774659085430506644ull, 17873328310056608740ull,
+ 13732836528686937125ull, 8721722238370386762ull}},
+{{15332533965248842461ull, 13476673202999074414ull,
+ 13194708848856723607ull, 5451076398981491726ull}},
+{{9942295419706277268ull, 12234155485321455114ull,
+ 7270014024216128701ull, 6813845498726864658ull}},
+{{3204497237778070777ull, 1457636301369655181ull,
+ 18310889567124936685ull, 8517306873408580822ull}},
+{{4308653782824988188ull, 3216865697569728440ull,
+ 6832619961025697524ull, 5323316795880363014ull}},
+{{5385817228531235234ull, 4021082121962160550ull,
+ 17764146988136897713ull, 6654145994850453767ull}},
+{{15955643572518819851ull, 9638038670880088591ull,
+ 17593497716743734237ull, 8317682493563067209ull}},
+{{16889806260465344263ull, 8329617178513749321ull,
+ 4078407045323752042ull, 5198551558476917006ull}},
+{{7277199770299516617ull, 1188649436287410844ull,
+ 14321380843509465861ull, 6498189448096146257ull}},
+{{9096499712874395771ull, 6097497813786651459ull,
+ 4066667999104668614ull, 8122736810120182822ull}},
+{{3379469311332803405ull, 17645994188898820874ull,
+ 16376725554722581595ull, 5076710506325114263ull}},
+{{13447708676020780064ull, 17445806717696138188ull,
+ 15859220924975839090ull, 6345888132906392829ull}},
+{{16809635845025975080ull, 12583886360265396927ull,
+ 5988968100937635151ull, 7932360166132991037ull}},
+{{17423551430782316281ull, 14782458002806954935ull,
+ 6048948072299715921ull, 4957725103833119398ull}},
+{{17167753270050507447ull, 4643014448226529957ull,
+ 16784557127229420710ull, 6197156379791399247ull}},
+{{7624633532280970597ull, 15027140097137938255ull,
+ 16369010390609387983ull, 7746445474739249059ull}},
+{{11682924985316688479ull, 16309491588352293265ull,
+ 7924788484917173537ull, 4841528421712030662ull}},
+{{768598176363696887ull, 6551806430158202870ull, 682613569291691114ull,
+ 6051910527140038328ull}},
+{{10184119757309396917ull, 17413130074552529395ull,
+ 853266961614613892ull, 7564888158925047910ull}},
+{{4059231839104679121ull, 1659834259740555064ull,
+ 14368349906291297395ull, 4728055099328154943ull}},
+{{5074039798880848901ull, 15909850879957857542ull,
+ 13348751364436733839ull, 5910068874160193679ull}},
+{{15565921785455836934ull, 15275627581519934023ull,
+ 12074253187118529395ull, 7387586092700242099ull}},
+{{16646230143550979940ull, 7241424229236264812ull,
+ 5240565232735386920ull, 4617241307937651312ull}},
+{{2361043605729173309ull, 9051780286545331016ull,
+ 6550706540919233650ull, 5771551634922064140ull}},
+{{2951304507161466636ull, 2091353321326887962ull,
+ 8188383176149042063ull, 7214439543652580175ull}},
+{{12912502670806609103ull, 16449249706940773664ull,
+ 5623792951758914674ull, 9018049429565725219ull}},
+{{8070314169254130690ull, 14892467085265371444ull,
+ 1209027585635627719ull, 5636280893478578262ull}},
+{{10087892711567663362ull, 14003897838154326401ull,
+ 10734656518899310457ull, 7045351116848222827ull}},
+{{17221551907886967106ull, 3669814242410744289ull,
+ 8806634630196750168ull, 8806688896060278534ull}},
+{{3845940914788272586ull, 2293633901506715181ull, 892460625445580951ull,
+ 5504180560037674084ull}},
+{{9419112161912728636ull, 16702100432165557688ull,
+ 1115575781806976188ull, 6880225700047092605ull}},
+{{11773890202390910795ull, 2430881466497395494ull,
+ 6006155745686108140ull, 8600282125058865756ull}},
+{{2746995358066931343ull, 10742672953415647992ull,
+ 12977219377908593395ull, 5375176328161791097ull}},
+{{3433744197583664178ull, 8816655173342172086ull,
+ 2386466167103578032ull, 6718970410202238872ull}},
+{{13515552283834356031ull, 11020818966677715107ull,
+ 2983082708879472540ull, 8398713012752798590ull}},
+{{6141377168182778568ull, 16111383891028347750ull,
+ 15699484748331834049ull, 5249195632970499118ull}},
+{{16900093497083249017ull, 6304171808503270975ull,
+ 10400983898560016754ull, 6561494541213123898ull}},
+{{16513430852926673367ull, 17103586797483864527ull,
+ 3777857836345245134ull, 8201868176516404873ull}},
+{{17238423310720252711ull, 6078055730000027425ull,
+ 13890376193784247969ull, 5126167610322753045ull}},
+{{7712971083118152176ull, 12209255680927422186ull,
+ 3527912186948146249ull, 6407709512903441307ull}},
+{{417841817042914412ull, 1426511545877114021ull,
+ 18244948288967346524ull, 8009636891129301633ull}},
+{{2566994144865515460ull, 10114941753027972071ull,
+ 4485563652963509721ull, 5006023056955813521ull}},
+{{17043800736364058037ull, 17255363209712352992ull,
+ 10218640584631775055ull, 6257528821194766901ull}},
+{{2858006846745520930ull, 16957517993713053337ull,
+ 17384986749217106723ull, 7821911026493458626ull}},
+{{13315469325284420341ull, 8292605736856964383ull,
+ 15477302736688079606ull, 4888694391558411641ull}},
+{{12032650638178137523ull, 1142385134216429671ull,
+ 5511570365577935796ull, 6110867989448014552ull}},
+{{10429127279295283999ull, 1427981417770537089ull,
+ 6889462956972419745ull, 7638584986810018190ull}},
+{{18047419595628022260ull, 12421703432175055440ull,
+ 18140972403389926052ull, 4774115616756261368ull}},
+{{4112530420825476208ull, 15527129290218819301ull,
+ 4229471430527855949ull, 5967644520945326711ull}},
+{{9752349044459233164ull, 5573853557491360414ull, 675153269732432033ull,
+ 7459555651181658389ull}},
+{{1483532134359632824ull, 15012873519500570019ull,
+ 2727813802796463972ull, 4662222281988536493ull}},
+{{15689473223231704742ull, 319347825666160907ull,
+ 8021453271922967870ull, 5827777852485670616ull}},
+{{15000155510612243023ull, 9622556818937476942ull,
+ 10026816589903709837ull, 7284722315607088270ull}},
+{{9526822351410527971ull, 16639882042099234082ull,
+ 3310148700524861488ull, 9105902894508860338ull}},
+{{10565949988058967886ull, 10399926276312021301ull,
+ 6680528956255426334ull, 5691189309068037711ull}},
+{{17819123503501097761ull, 3776535808535250818ull,
+ 3738975176891895014ull, 7113986636335047139ull}},
+{{13050532342521596393ull, 13944041797523839331ull,
+ 62032952687480863ull, 8892483295418808924ull}},
+{{5850739704862303794ull, 15632555151093481438ull,
+ 9262142632284451347ull, 5557802059636755577ull}},
+{{16536796667932655551ull, 14929007920439463893ull,
+ 16189364308782952088ull, 6947252574545944471ull}},
+{{6835937779633655726ull, 214515826839778251ull,
+ 15625019367551302207ull, 8684065718182430589ull}},
+{{1966618103057340877ull, 7051601419415943263ull,
+ 12071480113933257831ull, 5427541073864019118ull}},
+{{16293330684103839808ull, 4202815755842541174ull,
+ 5865978105561796481ull, 6784426342330023898ull}},
+{{11143291318275023952ull, 9865205713230564372ull,
+ 16555844668807021409ull, 8480532927912529872ull}},
+{{16187929110776665778ull, 17694968616837572492ull,
+ 10347402918004388380ull, 5300333079945331170ull}},
+{{1788167314761280607ull, 3671966697337414000ull,
+ 3710881610650709668ull, 6625416349931663963ull}},
+{{2235209143451600758ull, 4589958371671767500ull, 26915994885999181ull,
+ 8281770437414579954ull}},
+{{10620377751512026282ull, 5174566991508548639ull,
+ 4628508515231137392ull, 5176106523384112471ull}},
+{{8663786170962644948ull, 6468208739385685799ull,
+ 1173949625611533836ull, 6470133154230140589ull}},
+{{6218046695275918281ull, 8085260924232107249ull,
+ 6079123050441805199ull, 8087666442787675736ull}},
+{{15415494230615918686ull, 11970817105286148886ull,
+ 3799451906526128249ull, 5054791526742297335ull}},
+{{10045995751415122549ull, 1128463326325522396ull,
+ 137628864730272408ull, 6318489408427871669ull}},
+{{12557494689268903187ull, 1410579157906902995ull,
+ 4783722099340228414ull, 7898111760534839586ull}},
+{{5542591171579370540ull, 14716670028973978084ull,
+ 7601512330515030662ull, 4936319850334274741ull}},
+{{6928238964474213175ull, 9172465499362696797ull,
+ 14113576431571176232ull, 6170399812917843426ull}},
+{{13271984724020154372ull, 11465581874203370996ull,
+ 8418598502609194482ull, 7712999766147304283ull}},
+{{17518362489367372291ull, 11777674689804494776ull,
+ 2955781054917052599ull, 4820624853842065177ull}},
+{{3451209037999663747ull, 10110407343828230567ull,
+ 8306412337073703653ull, 6025781067302581471ull}},
+{{18149069352781743396ull, 17249695198212676112ull,
+ 5771329402914741662ull, 7532226334128226839ull}},
+{{11343168345488589623ull, 6169373480455534666ull,
+ 10524609904462795395ull, 4707641458830141774ull}},
+{{4955588395005961220ull, 3100030832142030429ull,
+ 3932390343723718436ull, 5884551823537677218ull}},
+{{10806171512184839429ull, 3875038540177538036ull,
+ 14138859966509423853ull, 7355689779422096522ull}},
+{{13507714390231049286ull, 9455484193649310449ull,
+ 8450202921282004008ull, 9194612224277620653ull}},
+{{1524792466253323948ull, 5909677621030819031ull,
+ 7587219835014946457ull, 5746632640173512908ull}},
+{{15741048638098818647ull, 11998783044715911692ull,
+ 9484024793768683071ull, 7183290800216891135ull}},
+{{1229566723913971693ull, 10386792787467501712ull,
+ 7243344973783465935ull, 8979113500271113919ull}},
+{{768479202446232308ull, 13409274519808270426ull,
+ 11444619636255748065ull, 5611945937669446199ull}},
+{{10183971039912566193ull, 2926535094478174320ull,
+ 9694088526892297178ull, 7014932422086807749ull}},
+{{12729963799890707741ull, 12881540904952493708ull,
+ 16729296677042759376ull, 8768665527608509686ull}},
+{{17179599411786468147ull, 8050963065595308567ull,
+ 5844124404724336706ull, 5480415954755318554ull}},
+{{16862813246305697279ull, 840331795139359901ull,
+ 16528527542760196691ull, 6850519943444148192ull}},
+{{7243458502599957887ull, 14885472799206363589ull,
+ 2213915354740694247ull, 8563149929305185241ull}},
+{{6833004573338667631ull, 16220949527145059099ull,
+ 12912912142781403664ull, 5351968705815740775ull}},
+{{3929569698245946635ull, 1829442835221772258ull,
+ 11529454160049366677ull, 6689960882269675969ull}},
+{{14135334159662209102ull, 6898489562454603226ull,
+ 576759644779544634ull, 8362451102837094962ull}},
+{{13446269868216268593ull, 8923241994961514920ull,
+ 4972160796414603300ull, 5226531939273184351ull}},
+{{16807837335270335741ull, 11154052493701893650ull,
+ 1603514977090866221ull, 6533164924091480439ull}},
+{{11786424632233143868ull, 107507561845203351ull,
+ 15839451776645746489ull, 8166456155114350548ull}},
+{{14284044422786796774ull, 11596407272221721854ull,
+ 676285323548815747ull, 5104035096946469093ull}},
+{{8631683491628720159ull, 9883823071849764414ull,
+ 5457042672863407588ull, 6380043871183086366ull}},
+{{1566232327681124390ull, 12354778839812205518ull,
+ 16044675377934035293ull, 7975054838978857957ull}},
+{{14813953260082866456ull, 10027579784096322400ull,
+ 12333765120422466010ull, 4984409274361786223ull}},
+{{70697501394031454ull, 3311102693265627193ull, 10805520382100694609ull,
+ 6230511592952232779ull}},
+{{4700057895169927222ull, 8750564385009421895ull,
+ 8895214459198480357ull, 7788139491190290974ull}},
+{{9855065212122286370ull, 7774945749844582636ull, 947823018571662319ull,
+ 4867587181993931859ull}},
+{{12318831515152857962ull, 5106996168878340391ull,
+ 15019836828496741611ull, 6084483977492414823ull}},
+{{10786853375513684548ull, 1772059192670537585ull,
+ 14163110017193539110ull, 7605604971865518529ull}},
+{{18270998405764522603ull, 14942595050701249702ull,
+ 1934414733104880087ull, 4753503107415949081ull}},
+{{13615375970350877446ull, 14066557794949174224ull,
+ 7029704434808488013ull, 5941878884269936351ull}},
+{{17019219962938596807ull, 3748139188404304068ull,
+ 4175444525083222113ull, 7427348605337420439ull}},
+{{1413640439981847196ull, 13871802038821159803ull,
+ 9527181855818095676ull, 4642092878335887774ull}},
+{{15602108605259472707ull, 17339752548526449753ull,
+ 2685605282917843787ull, 5802616097919859718ull}},
+{{5667577701292177172ull, 17063004667230674288ull,
+ 12580378640502080542ull, 7253270122399824647ull}},
+{{7084472126615221465ull, 12105383797183567052ull,
+ 11113787282200212774ull, 9066587652999780809ull}},
+{{13651167115989289224ull, 2954178854812341503ull, 28588023734051128ull,
+ 5666617283124863006ull}},
+{{12452272876559223626ull, 3692723568515426879ull,
+ 9259107066522339718ull, 7083271603906078757ull}},
+{{10953655077271641628ull, 13839276497499059407ull,
+ 16185569851580312551ull, 8854089504882598446ull}},
+{{13763563450935857874ull, 15567076838577993985ull,
+ 5504295138810307440ull, 5533805940551624029ull}},
+{{3369396258387658630ull, 1012101974512940866ull,
+ 11492054941940272205ull, 6917257425689530036ull}},
+{{13435117359839349095ull, 5876813486568563986ull,
+ 14365068677425340256ull, 8646571782111912545ull}},
+{{13008634368326981089ull, 3673008429105352491ull,
+ 2060638895749755804ull, 5404107363819945341ull}},
+{{11649106941981338457ull, 4591260536381690614ull,
+ 7187484638114582659ull, 6755134204774931676ull}},
+{{5338011640621897263ull, 1127389652049725364ull,
+ 8984355797643228324ull, 8443917755968664595ull}},
+{{12559629312243461597ull, 9927990569385854160ull,
+ 3309379364313323750ull, 5277448597480415372ull}},
+{{15699536640304326997ull, 3186616174877541892ull,
+ 4136724205391654688ull, 6596810746850519215ull}},
+{{1177676726670857130ull, 3983270218596927366ull, 559219238312180456ull,
+ 8246013433563149019ull}},
+{{14571106009451449418ull, 2489543886623079603ull,
+ 16490413088440970449ull, 5153758395976968136ull}},
+{{13602196493386923869ull, 7723615876706237408ull,
+ 2166272286841661445ull, 6442197994971210171ull}},
+{{17002745616733654836ull, 14266205864310184664ull,
+ 16542898413834240518ull, 8052747493714012713ull}},
+{{10626716010458534273ull, 4304692646766477511ull,
+ 3421782481005318468ull, 5032967183571257946ull}},
+{{8671708994645779937ull, 5380865808458096889ull,
+ 13500600138111423893ull, 6291208979464072432ull}},
+{{15451322261734612825ull, 11337768279000009015ull,
+ 16875750172639279866ull, 7864011224330090540ull}},
+{{16574605441225214872ull, 11697791192802393538ull,
+ 1323971821044774108ull, 4915007015206306588ull}},
+{{11494884764676742781ull, 14622238991002991923ull,
+ 1654964776305967635ull, 6143758769007883235ull}},
+{{9756919937418540573ull, 13666112720326352000ull,
+ 15903764025664623256ull, 7679698461259854043ull}},
+{{6098074960886587858ull, 8541320450203970000ull,
+ 7634009506826695583ull, 4799811538287408777ull}},
+{{7622593701108234822ull, 6064964544327574596ull,
+ 14154197901960757383ull, 5999764422859260971ull}},
+{{9528242126385293528ull, 2969519661982080341ull,
+ 13081061359023558825ull, 7499705528574076214ull}},
+{{8260994338204502407ull, 13385164834807269973ull,
+ 3563977330962336361ull, 4687315955358797634ull}},
+{{14937928941183015913ull, 2896397988226923754ull,
+ 13678343700557696260ull, 5859144944198497042ull}},
+{{9449039139623994083ull, 3620497485283654693ull,
+ 7874557588842344517ull, 7323931180248121303ull}},
+{{16422984942957380507ull, 9137307875031956270ull,
+ 5231510967625542742ull, 9154913975310151629ull}},
+{{5652679570920974913ull, 1099131403467584765ull,
+ 5575537363979658166ull, 5721821234568844768ull}},
+{{11677535482078606546ull, 10597286291189256764ull,
+ 6969421704974572707ull, 7152276543211055960ull}},
+{{14596919352598258182ull, 8634921845559183051ull,
+ 8711777131218215884ull, 8940345679013819950ull}},
+{{6817231586160217412ull, 14620198190329265215ull,
+ 833174688583997023ull, 5587716049383637469ull}},
+{{3909853464272883861ull, 13663561719484193615ull,
+ 5653154379157384183ull, 6984645061729546836ull}},
+{{275630811913716922ull, 12467766130927854115ull,
+ 7066442973946730229ull, 8730806327161933545ull}},
+{{16313170321941930740ull, 10098196841043602773ull,
+ 15945741904785176153ull, 5456753954476208465ull}},
+{{6556404847145249713ull, 17234432069731891371ull,
+ 6097119325699306479ull, 6820942443095260582ull}},
+{{3583820040504174237ull, 16931354068737476310ull,
+ 16844771193978908907ull, 8526178053869075727ull}},
+{{16074945580597272611ull, 8276253283747228741ull,
+ 17445511023877899923ull, 5328861283668172329ull}},
+{{6258623920464427051ull, 5733630586256648023ull,
+ 7971830724565211192ull, 6661076604585215412ull}},
+{{3211593882153145910ull, 7167038232820810029ull,
+ 9964788405706513990ull, 8326345755731519265ull}},
+{{4313089185559410146ull, 18314456950795169980ull,
+ 17757207799635041003ull, 5203966097332199540ull}},
+{{5391361481949262682ull, 18281385170066574571ull,
+ 3749765675834249638ull, 6504957621665249426ull}},
+{{2127515834009190448ull, 13628359425728442406ull,
+ 13910579131647587856ull, 8131197027081561782ull}},
+{{15164755451537907742ull, 8517724641080276503ull,
+ 4082425938852354506ull, 5081998141925976114ull}},
+{{14344258295994996774ull, 1423783764495569821ull,
+ 14326404460420218941ull, 6352497677407470142ull}},
+{{4095264814711582255ull, 6391415724046850181ull,
+ 8684633538670497868ull, 7940622096759337678ull}},
+{{4865383518408432862ull, 13218006864384057171ull,
+ 816209943241673263ull, 4962888810474586049ull}},
+{{1470043379583153173ull, 11910822562052683560ull,
+ 5631948447479479483ull, 6203611013093232561ull}},
+{{1837554224478941466ull, 10276842184138466546ull,
+ 11651621577776737258ull, 7754513766366540701ull}},
+{{5760157408726726321ull, 11034712383513929495ull,
+ 9588106495324154738ull, 4846571103979087938ull}},
+{{2588510742481019997ull, 4570018442537636061ull,
+ 2761761082300417615ull, 6058213879973859923ull}},
+{{7847324446528662900ull, 1100837034744657172ull,
+ 17287259408157685731ull, 7572767349967324903ull}},
+{{14127949815935190120ull, 16828924211211268396ull,
+ 17722066157739635437ull, 4732979593729578064ull}},
+{{17659937269918987650ull, 7201097208731921783ull,
+ 3705838623464992681ull, 5916224492161972581ull}},
+{{17463235568971346659ull, 13613057529342290133ull,
+ 9243984297758628755ull, 7395280615202465726ull}},
+{{13220365239820785614ull, 6202317946625237381ull,
+ 1165804167671755068ull, 4622050384501541079ull}},
+{{2690398494493818305ull, 7752897433281546727ull,
+ 15292313264871857547ull, 5777562980626926348ull}},
+{{17198056173399436594ull, 5079435773174545504ull,
+ 668647507380270318ull, 7221953725783657936ull}},
+{{3050826143039744126ull, 15572666753322957689ull,
+ 835809384225337897ull, 9027442157229572420ull}},
+{{13435981385468309839ull, 2815387693185766699ull,
+ 9745752901995611994ull, 5642151348268482762ull}},
+{{12183290713407999394ull, 12742606653336984182ull,
+ 2958819090639739184ull, 7052689185335603453ull}},
+{{6005741354905223435ull, 15928258316671230228ull,
+ 8310209881727061884ull, 8815861481669504316ull}},
+{{12976960383670540455ull, 731789411064743084ull,
+ 14417253212934189486ull, 5509913426043440197ull}},
+{{16221200479588175569ull, 10138108800685704663ull,
+ 4186508460885573145ull, 6887391782554300247ull}},
+{{15664814581057831557ull, 17284322019284518733ull,
+ 621449557679578527ull, 8609239728192875309ull}},
+{{12096352122374838675ull, 17720230289693906064ull,
+ 2694248982763430531ull, 5380774830120547068ull}},
+{{15120440152968548344ull, 17538601843689994676ull,
+ 3367811228454288164ull, 6725968537650683835ull}},
+{{453806117501133814ull, 3476508230902941730ull,
+ 18044822090850023918ull, 8407460672063354793ull}},
+{{4895314841865596538ull, 16007875699596502293ull,
+ 4360484779140183092ull, 5254662920039596746ull}},
+{{10730829570759383576ull, 1563100550786076250ull,
+ 14673978010780004674ull, 6568328650049495932ull}},
+{{4190164926594453662ull, 11177247725337371121ull,
+ 18342472513475005842ull, 8210410812561869915ull}},
+{{14148068125190003299ull, 11597465846763244854ull,
+ 9158202311708184699ull, 5131506757851168697ull}},
+{{8461713119632728315ull, 9885146290026668164ull,
+ 16059438908062618778ull, 6414383447313960871ull}},
+{{10577141399540910394ull, 3133060825678559397ull,
+ 15462612616650885569ull, 8017979309142451089ull}},
+{{8916556383926762949ull, 13487378062117569383ull,
+ 2746603857765721624ull, 5011237068214031931ull}},
+{{6534009461481065782ull, 16859222577646961729ull,
+ 17268312877489315742ull, 6264046335267539913ull}},
+{{12779197845278720131ull, 11850656185203926353ull,
+ 7750333041579480966ull, 7830057919084424892ull}},
+{{1069469625658118226ull, 2794974097325066067ull,
+ 14067330187841951412ull, 4893786199427765557ull}},
+{{15171895087354811494ull, 3493717621656332583ull,
+ 3749104679520275553ull, 6117232749284706947ull}},
+{{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull,
+ 7646540936605883684ull}},
+{{2053210247837747184ull, 17140985699504597031ull,
+ 9270056306212873643ull, 4779088085378677302ull}},
+{{16401570865079347692ull, 16814546105953358384ull,
+ 2364198345911316246ull, 5973860106723346628ull}},
+{{2055219507639632999ull, 11794810595586922173ull,
+ 2955247932389145308ull, 7467325133404183285ull}},
+{{3590355201488464576ull, 16595128659096602166ull,
+ 4152872966956909769ull, 4667078208377614553ull}},
+{{13711316038715356528ull, 6908852768588588995ull,
+ 9802777227123525116ull, 5833847760472018191ull}},
+{{12527459029966807756ull, 8636065960735736244ull,
+ 7641785515477018491ull, 7292309700590022739ull}},
+{{15659323787458509695ull, 6183396432492282401ull,
+ 4940545875918885210ull, 9115387125737528424ull}},
+{{2869548339520486704ull, 8476308788735064405ull,
+ 3087841172449303256ull, 5697116953585955265ull}},
+{{8198621442827996284ull, 10595385985918830506ull,
+ 8471487483989016974ull, 7121396191982444081ull}},
+{{1024904766680219546ull, 4020860445543762325ull,
+ 15201045373413659122ull, 8901745239978055101ull}},
+{{2946408488388831169ull, 7124723796892239357ull,
+ 11806496367597230903ull, 5563590774986284438ull}},
+{{8294696628913426865ull, 4294218727687911292ull,
+ 5534748422641762821ull, 6954488468732855548ull}},
+{{10368370786141783581ull, 9979459428037277019ull,
+ 6918435528302203526ull, 8693110585916069435ull}},
+{{4174388732124920786ull, 1625476124095910233ull,
+ 2018179195975183252ull, 5433194116197543397ull}},
+{{9829671933583538887ull, 2031845155119887791ull,
+ 7134410013396366969ull, 6791492645246929246ull}},
+{{7675403898552035704ull, 7151492462327247643ull,
+ 18141384553600234519ull, 8489365806558661557ull}},
+{{2491284427381328363ull, 11387211816595611633ull,
+ 13644208355213840526ull, 5305853629099163473ull}},
+{{7725791552654048358ull, 5010642733889738733ull,
+ 3220202388735136946ull, 6632317036373954342ull}},
+{{14268925459244948351ull, 15486675454216949224ull,
+ 13248625022773696990ull, 8290396295467442927ull}},
+{{8918078412028092720ull, 5067486140458205361ull,
+ 15197919666874642475ull, 5181497684667151829ull}},
+{{15759284033462503804ull, 1722671657145368797ull,
+ 5162341528311139382ull, 6476872105833939787ull}},
+{{5864046986545966042ull, 11376711608286486805ull,
+ 1841240891961536323ull, 8096090132292424734ull}},
+{{5970872375804922729ull, 4804601745965360301ull,
+ 14985833612758123914ull, 5060056332682765458ull}},
+{{12075276488183541315ull, 15229124219311476184ull,
+ 9508919979092879084ull, 6325070415853456823ull}},
+{{15094095610229426643ull, 589661200429793614ull,
+ 7274463955438710952ull, 7906338019816821029ull}},
+{{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull,
+ 4941461262385513143ull}},
+{{10639340690884892589ull, 5072358831263164165ull,
+ 3953792708276222467ull, 6176826577981891429ull}},
+{{17910861882033503640ull, 1728762520651567302ull,
+ 9553926903772665988ull, 7721033222477364286ull}},
+{{6582602657843551871ull, 10303848612262005372ull,
+ 1359518296430528338ull, 4825645764048352679ull}},
+{{8228253322304439839ull, 3656438728472730907ull,
+ 15534455925820324135ull, 6032057205060440848ull}},
+{{5673630634453161895ull, 18405606465873077346ull,
+ 971325833565853552ull, 7540071506325551061ull}},
+{{8157705164960614088ull, 11503504041170673341ull,
+ 2912921655192352422ull, 4712544691453469413ull}},
+{{14808817474628155514ull, 5156008014608565868ull,
+ 8252838087417828432ull, 5890680864316836766ull}},
+{{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull,
+ 7363351080396045958ull}},
+{{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull,
+ 9204188850495057447ull}},
+{{4661903025908358824ull, 7341007085979871558ull,
+ 13535789341626496214ull, 5752618031559410904ull}},
+{{15050750819240224337ull, 18399630894329615255ull,
+ 16919736677033120267ull, 7190772539449263630ull}},
+{{14201752505622892517ull, 18387852599484631165ull,
+ 11926298809436624526ull, 8988465674311579538ull}},
+{{11181938325228001776ull, 6880721856250506574ull,
+ 12065622774325278233ull, 5617791046444737211ull}},
+{{4754050869680226411ull, 13212588338740521122ull,
+ 10470342449479209887ull, 7022238808055921514ull}},
+{{15165935623955058822ull, 11904049404998263498ull,
+ 3864556024994236551ull, 8777798510069901893ull}},
+{{14090395783399299668ull, 14357559905764996542ull,
+ 4721190524835091796ull, 5486124068793688683ull}},
+{{8389622692394348777ull, 17946949882206245678ull,
+ 1289802137616476841ull, 6857655085992110854ull}},
+{{1263656328638160163ull, 8598629297475643386ull,
+ 10835624708875371860ull, 8572068857490138567ull}},
+{{5401471223826238006ull, 14597515347777052924ull,
+ 13689794470688189268ull, 5357543035931336604ull}},
+{{6751839029782797507ull, 18246894184721316155ull,
+ 17112243088360236585ull, 6696928794914170755ull}},
+{{3828112768801108980ull, 8973559675619481482ull,
+ 16778617842022907828ull, 8371160993642713444ull}},
+{{7004256498928081017ull, 14831846834116951734ull,
+ 1263264114409541584ull, 5231975621026695903ull}},
+{{17978692660514877079ull, 93064468936638051ull,
+ 15414138198294090693ull, 6539969526283369878ull}},
+{{17861679807216208444ull, 4728016604598185468ull,
+ 10044300711012837558ull, 8174961907854212348ull}},
+{{1940177842655354470ull, 16790068433156029630ull,
+ 15501059981237799281ull, 5109351192408882717ull}},
+{{11648594340173968895ull, 7152527486162873325ull,
+ 5541266921265085390ull, 6386688990511103397ull}},
+{{725684869935297407ull, 18164031394558367465ull,
+ 11538269670008744641ull, 7983361238138879246ull}},
+{{11982768089778030640ull, 4434990593957897809ull,
+ 2599732525328077497ull, 4989600773836799529ull}},
+{{1143402056940374587ull, 10155424260874760166ull,
+ 7861351675087484775ull, 6237000967295999411ull}},
+{{10652624608030244042ull, 8082594307666062303ull,
+ 5215003575431968065ull, 7796251209119999264ull}},
+{{13575419407659984382ull, 16580836488359758699ull,
+ 3259377234644980040ull, 4872657005699999540ull}},
+{{12357588241147592574ull, 2279301536740146758ull,
+ 4074221543306225051ull, 6090821257124999425ull}},
+{{6223613264579714909ull, 16684184976207347160ull,
+ 9704462947560169217ull, 7613526571406249281ull}},
+{{3889758290362321819ull, 3510086582488510119ull,
+ 17594504388293575521ull, 4758454107128905800ull}},
+{{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull,
+ 5948067633911132251ull}},
+{{4924825824084280865ull, 15860803826599919845ull,
+ 18268041069853935943ull, 7435084542388915313ull}},
+{{5383859149266369493ull, 16830531419266031759ull,
+ 4499996641017628108ull, 4646927838993072071ull}},
+{{2118137918155573962ull, 2591420200372988083ull,
+ 1013309782844647232ull, 5808659798741340089ull}},
+{{16482730452976631164ull, 3239275250466235103ull,
+ 5878323246983196944ull, 7260824748426675111ull}},
+{{15991727047793401051ull, 4049094063082793879ull,
+ 2736218040301608276ull, 9076030935533343889ull}},
+{{16912358432511957513ull, 11754055826281521982ull,
+ 13239351321256974932ull, 5672519334708339930ull}},
+{{11917076003785171083ull, 14692569782851902478ull,
+ 7325817114716442857ull, 7090649168385424913ull}},
+{{5672972967876688046ull, 4530654173282714386ull,
+ 13768957411822941476ull, 8863311460481781141ull}},
+{{8157294123350317933ull, 12055030895156472299ull,
+ 10911441391603032374ull, 5539569662801113213ull}},
+{{5584931635760509512ull, 5845416582090814566ull,
+ 18250987757931178372ull, 6924462078501391516ull}},
+{{16204536581555412698ull, 7306770727613518207ull,
+ 4366990623704421349ull, 8655577598126739396ull}},
+{{17045364391113214793ull, 6872574713972142831ull,
+ 11952741176670039151ull, 5409735998829212122ull}},
+{{16695019470464130587ull, 3979032374037790635ull,
+ 5717554433982773131ull, 6762169998536515153ull}},
+{{16257088319652775329ull, 362104449119850390ull,
+ 11758629060905854318ull, 8452712498170643941ull}},
+{{5548994181355596677ull, 14061373335982070206ull,
+ 9654986172279852900ull, 5282945311356652463ull}},
+{{16159614763549271654ull, 17576716669977587757ull,
+ 7457046696922428221ull, 6603681639195815579ull}},
+{{6364460399154425855ull, 8135837782189820985ull,
+ 4709622352725647373ull, 8254602048994769474ull}},
+{{15507002795539985920ull, 7390741623082332067ull,
+ 7555199988880917512ull, 5159126280621730921ull}},
+{{14772067475997594496ull, 9238427028852915084ull,
+ 14055686004528534794ull, 6448907850777163651ull}},
+{{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull,
+ 8061134813471454564ull}},
+{{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull,
+ 5038209258419659102ull}},
+{{9237700373798089483ull, 4698445753088498727ull,
+ 12429219171114694412ull, 6297761573024573878ull}},
+{{6935439448820223949ull, 5873057191360623409ull,
+ 6313151927038592207ull, 7872201966280717348ull}},
+{{15863864701581109728ull, 10588189772241471486ull,
+ 13169091991253895937ull, 4920126228925448342ull}},
+{{10606458840121611352ull, 17846923233729227262ull,
+ 7237992952212594113ull, 6150157786156810428ull}},
+{{4034701513297238382ull, 8473595986879370366ull,
+ 9047491190265742642ull, 7687697232696013035ull}},
+{{16356746501092937701ull, 9907683510226994382ull,
+ 3348838984702395199ull, 4804810770435008147ull}},
+{{11222561089511396318ull, 7772918369356355074ull,
+ 18021106786160157711ull, 6006013463043760183ull}},
+{{4804829325034469590ull, 5104461943268055939ull,
+ 17914697464272809235ull, 7507516828804700229ull}},
+{{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull,
+ 4692198018002937643ull}},
+{{10094841185520837735ull, 1105557131661051262ull,
+ 12266475137052861751ull, 5865247522503672054ull}},
+{{3395179445046271361ull, 15217004469858477790ull,
+ 6109721884461301380ull, 7331559403129590068ull}},
+{{13467346343162615009ull, 574511513613545621ull,
+ 7637152355576626726ull, 9164449253911987585ull}},
+{{10722934473690328333ull, 14194127751290629725ull,
+ 16302435268303861463ull, 5727780783694992240ull}},
+{{18015354110540298320ull, 13130973670685899252ull,
+ 1931300011670275213ull, 7159725979618740301ull}},
+{{4072448564465821284ull, 2578659033075210354ull,
+ 7025811033015231921ull, 8949657474523425376ull}},
+{{7156966371218526206ull, 13140876941740476231ull,
+ 4391131895634519950ull, 5593535921577140860ull}},
+{{4334521945595769854ull, 7202724140320819481ull,
+ 5488914869543149938ull, 6991919901971426075ull}},
+{{10029838450422100221ull, 18226777212255800159ull,
+ 2249457568501549518ull, 8739899877464282594ull}},
+{{13186178059154894494ull, 6780049739232487195ull,
+ 6017596998740856353ull, 5462437423415176621ull}},
+{{11871036555516230214ull, 13086748192467996898ull,
+ 12133682266853458345ull, 6828046779268970776ull}},
+{{5615423657540511959ull, 2523377185302832411ull,
+ 15167102833566822932ull, 8535058474086213470ull}},
+{{1203796776749126023ull, 10800482777669046065ull,
+ 4867753252551876428ull, 5334411546303883419ull}},
+{{6116431989363795432ull, 13500603472086307581ull,
+ 1473005547262457631ull, 6668014432879854274ull}},
+{{12257226005132132194ull, 12264068321680496572ull,
+ 11064628970932847847ull, 8335018041099817842ull}},
+{{16884138290062358430ull, 14582571728691392213ull,
+ 11527079125260417808ull, 5209386275687386151ull}},
+{{7270114807295784325ull, 18228214660864240267ull,
+ 9797162888148134356ull, 6511732844609232689ull}},
+{{4475957490692342502ull, 4338524252370748718ull,
+ 16858139628612555850ull, 8139666055761540861ull}},
+{{16632531486964877776ull, 7323263676159105852ull,
+ 12842180277096541358ull, 5087291284850963038ull}},
+{{2343920284996545604ull, 18377451632053658124ull,
+ 6829353309515900889ull, 6359114106063703798ull}},
+{{2929900356245682005ull, 9136756484784908943ull,
+ 17760063673749651920ull, 7948892632579629747ull}},
+{{8748716750294633109ull, 5710472802990568089ull,
+ 8794196786879838498ull, 4968057895362268592ull}},
+{{15547581956295679290ull, 16361463040592985919ull,
+ 10992745983599798122ull, 6210072369202835740ull}},
+{{14822791426942211209ull, 11228456763886456591ull,
+ 13740932479499747653ull, 7762590461503544675ull}},
+{{16181773669479963862ull, 9323628486642729321ull,
+ 6282239790473648331ull, 4851619038439715422ull}},
+{{6392159031567791115ull, 7042849589876023748ull,
+ 17076171774946836222ull, 6064523798049644277ull}},
+{{7990198789459738893ull, 18026934024199805493ull,
+ 7510156663401381565ull, 7580654747562055347ull}},
+{{7299717252626030761ull, 13572676774338572385ull,
+ 2388004905412169526ull, 4737909217226284592ull}},
+{{13736332584209926355ull, 7742473931068439673ull,
+ 2985006131765211908ull, 5922386521532855740ull}},
+{{3335357674980244231ull, 9678092413835549592ull,
+ 3731257664706514885ull, 7402983151916069675ull}},
+{{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull,
+ 4626864469947543547ull}},
+{{16440806238860479518ull, 5831627441398752654ull,
+ 13867799344317011026ull, 5783580587434429433ull}},
+{{11327635761720823589ull, 16512906338603216626ull,
+ 3499691125114100070ull, 7229475734293036792ull}},
+{{4936172665296253678ull, 11417760886399244975ull,
+ 4374613906392625088ull, 9036844667866295990ull}},
+{{10002636943451240405ull, 7136100553999528109ull,
+ 16569191746777554392ull, 5648027917416434993ull}},
+{{17114982197741438410ull, 8920125692499410136ull,
+ 6876431628189779278ull, 7060034896770543742ull}},
+{{2946983673467246397ull, 1926785078769486863ull,
+ 17818911572091999906ull, 8825043620963179677ull}},
+{{8759393823558110854ull, 5815926692658317193ull,
+ 13442662741771193893ull, 5515652263101987298ull}},
+{{15560928297875026471ull, 11881594384250284395ull,
+ 7579956390359216558ull, 6894565328877484123ull}},
+{{14839474353916395185ull, 5628620943458079686ull,
+ 4863259469521632794ull, 8618206661096855154ull}},
+{{4662985452770359087ull, 8129574108088687708ull,
+ 7651223186878408400ull, 5386379163185534471ull}},
+{{5828731815962948858ull, 10161967635110859635ull,
+ 4952342965170622596ull, 6732973953981918089ull}},
+{{2674228751526298169ull, 12702459543888574544ull,
+ 10802114724890666149ull, 8416217442477397611ull}},
+{{1671392969703936356ull, 10244880224144053042ull,
+ 4445478693842972391ull, 5260135901548373507ull}},
+{{11312613248984696253ull, 8194414261752678398ull,
+ 945162348876327585ull, 6575169876935466884ull}},
+{{4917394524376094508ull, 14854703845618235902ull,
+ 1181452936095409481ull, 8218962346169333605ull}},
+{{16908429633017222779ull, 2366660875870315582ull,
+ 3044251094273324878ull, 5136851466355833503ull}},
+{{11912165004416752666ull, 12181698131692670286ull,
+ 17640371923123819809ull, 6421064332944791878ull}},
+{{5666834218666165025ull, 1392064609333674146ull,
+ 12827092867049998954ull, 8026330416180989848ull}},
+{{8153457405093741045ull, 5481726399260934245ull,
+ 8016933041906249346ull, 5016456510113118655ull}},
+{{14803507774794564210ull, 16075530035930943614ull,
+ 5409480283955423778ull, 6270570637641398319ull}},
+{{9281012681638429454ull, 10871040508058903710ull,
+ 2150164336516891819ull, 7838213297051747899ull}},
+{{1188946907596630505ull, 4488557308323120867ull,
+ 17484753774818915051ull, 4898883310657342436ull}},
+{{15321241689777951843ull, 999010616976513179ull,
+ 3409198144814092198ull, 6123604138321678046ull}},
+{{14539866093795051900ull, 10472135308075417282ull,
+ 13484869717872391055ull, 7654505172902097557ull}},
+{{13699102327049295341ull, 13462613595188217657ull,
+ 10733886582883938361ull, 4784065733063810973ull}},
+{{3288819853529455465ull, 2993208938703108360ull,
+ 18029044247032310856ull, 5980082166329763716ull}},
+{{4111024816911819331ull, 3741511173378885450ull,
+ 4089561235080836954ull, 7475102707912204646ull}},
+{{7181076528997274986ull, 6950130501789191310ull,
+ 16391033827207686808ull, 4671939192445127903ull}},
+{{18199717698101369540ull, 8687663127236489137ull,
+ 15877106265582220606ull, 5839923990556409879ull}},
+{{8914589067344548213ull, 1636206872190835614ull,
+ 15234696813550387854ull, 7299904988195512349ull}},
+{{1919864297325909458ull, 11268630627093320326ull,
+ 5208312961655821105ull, 9124881235244390437ull}},
+{{15034973241110857124ull, 125365114292243347ull,
+ 5561038610248582143ull, 5703050772027744023ull}},
+{{14182030532961183500ull, 13991764448147467896ull,
+ 2339612244383339774ull, 7128813465034680029ull}},
+{{17727538166201479375ull, 8266333523329559062ull,
+ 7536201323906562622ull, 8911016831293350036ull}},
+{{6468025335448536706ull, 554772433653586510ull,
+ 13933497864296377447ull, 5569385519558343772ull}},
+{{17308403706165446690ull, 14528523597349146849ull,
+ 17416872330370471808ull, 6961731899447929715ull}},
+{{7800446577424644651ull, 18160654496686433562ull,
+ 17159404394535701856ull, 8702164874309912144ull}},
+{{9486965129317790811ull, 11350409060429020976ull,
+ 10724627746584813660ull, 5438853046443695090ull}},
+{{11858706411647238513ull, 14188011325536276220ull,
+ 4182412646376241267ull, 6798566308054618863ull}},
+{{14823383014559048142ull, 13123328138492957371ull,
+ 616329789542913680ull, 8498207885068273579ull}},
+{{6958771374885711137ull, 8202080086558098357ull,
+ 16526107182960178714ull, 5311379928167670986ull}},
+{{13310150237034526825ull, 1029228071342847138ull,
+ 11434261941845447585ull, 6639224910209588733ull}},
+{{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull,
+ 8299031137761985917ull}},
+{{2328104340435295250ull, 15215603238322186527ull,
+ 2591948866729097557ull, 5186894461101241198ull}},
+{{16745188480826282774ull, 5184445992620569446ull,
+ 12463308120266147755ull, 6483618076376551497ull}},
+{{11708113564178077660ull, 1868871472348323904ull,
+ 1744077095050520982ull, 8104522595470689372ull}},
+{{7317570977611298537ull, 15003102725499866152ull,
+ 10313420221261351421ull, 5065326622169180857ull}},
+{{9146963722014123172ull, 4918820351592668978ull,
+ 17503461295004077181ull, 6331658277711476071ull}},
+{{2210332615662878157ull, 10760211457918224127ull,
+ 17267640600327708572ull, 7914572847139345089ull}},
+{{8298986912430380704ull, 15948504198053665887ull,
+ 3874746347563736001ull, 4946608029462090681ull}},
+{{5762047622110587976ull, 6100572192284918647ull,
+ 9455118952882057906ull, 6183260036827613351ull}},
+{{2590873509210847066ull, 16849087277210924117ull,
+ 7207212672675184478ull, 7729075046034516689ull}},
+{{3925138952470473368ull, 5918993529829439669ull,
+ 16033722966490460059ull, 4830671903771572930ull}},
+{{9518109709015479614ull, 2787055893859411682ull,
+ 10818781671258299266ull, 6038339879714466163ull}},
+{{2674265099414573710ull, 12707191904179040411ull,
+ 8911791070645486178ull, 7547924849643082704ull}},
+{{17812316751629966233ull, 12553680958539288160ull,
+ 5569869419153428861ull, 4717453031026926690ull}},
+{{3818651865827906175ull, 1857043142891946489ull,
+ 16185708810796561885ull, 5896816288783658362ull}},
+{{9385000850712270622ull, 6932989947042321015ull,
+ 11008763976640926548ull, 7371020360979572953ull}},
+{{7119565044962950374ull, 8666237433802901269ull,
+ 18372640989228546089ull, 9213775451224466191ull}},
+{{6755571162315537936ull, 16945613442195283053ull,
+ 18400429645908923161ull, 5758609657015291369ull}},
+{{13056149971321810324ull, 7346958747461940104ull,
+ 9165479002103990240ull, 7198262071269114212ull}},
+{{16320187464152262904ull, 9183698434327425130ull,
+ 11456848752629987800ull, 8997827589086392765ull}},
+{{14811803183522552219ull, 5739811521454640706ull,
+ 9466373479607436327ull, 5623642243178995478ull}},
+{{9291381942548414466ull, 2563078383390912979ull,
+ 2609594812654519601ull, 7029552803973744348ull}},
+{{7002541409758130179ull, 7815533997666029128ull,
+ 3261993515818149501ull, 8786941004967180435ull}},
+{{4376588381098831362ull, 7190551757754962157ull,
+ 18179647011882201102ull, 5491838128104487771ull}},
+{{10082421494800927106ull, 18211561734048478504ull,
+ 18112872746425363473ull, 6864797660130609714ull}},
+{{12603026868501158883ull, 8929394112278434418ull,
+ 13417718896176928534ull, 8580997075163262143ull}},
+{{12488577811240612206ull, 969185301746633607ull,
+ 15303603337751662190ull, 5363123171977038839ull}},
+{{10999036245623377353ull, 10434853664038067817ull,
+ 14517818153762189833ull, 6703903964971298549ull}},
+{{18360481325456609595ull, 17655253098474972675ull,
+ 4312214636920573579ull, 8379879956214123187ull}},
+{{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull,
+ 5237424972633826992ull}},
+{{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull,
+ 6546781215792283740ull}},
+{{16633120851708517460ull, 12485656897476221727ull,
+ 608267404471350836ull, 8183476519740354675ull}},
+{{17313229559958905269ull, 17026907597777414387ull,
+ 16521068192290451936ull, 5114672824837721671ull}},
+{{17029850931521243682ull, 2836890423512216368ull,
+ 16039649221935677017ull, 6393341031047152089ull}},
+{{2840569590692002986ull, 8157799047817658365ull,
+ 6214503472137432559ull, 7991676288808940112ull}},
+{{4081199003396195818ull, 12016153432527118334ull,
+ 3884064670085895349ull, 4994797680505587570ull}},
+{{14324870791100020581ull, 1185133735376734205ull,
+ 14078452874462144995ull, 6243497100631984462ull}},
+{{4071030433592862014ull, 15316475224503081469ull,
+ 8374694056222905435ull, 7804371375789980578ull}},
+{{4850237030209232711ull, 7266954006100731966ull,
+ 9845869803566703801ull, 4877732109868737861ull}},
+{{15286168324616316697ull, 13695378526053302861ull,
+ 16919023272885767655ull, 6097165137335922326ull}},
+{{5272652350488232159ull, 12507537139139240673ull,
+ 11925407054252433761ull, 7621456421669902908ull}},
+{{14824622765123614859ull, 899681684320943564ull,
+ 16676751445762546909ull, 4763410263543689317ull}},
+{{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull,
+ 5954262829429611647ull}},
+{{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull,
+ 7442828536787014559ull}},
+{{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull,
+ 4651767835491884099ull}},
+{{9305436863705329478ull, 15401676660084534608ull,
+ 7278909286806688635ull, 5814709794364855124ull}},
+{{11631796079631661847ull, 14640409806678280356ull,
+ 9098636608508360794ull, 7268387242956068905ull}},
+{{14539745099539577309ull, 9077140221493074637ull,
+ 15984981779062838897ull, 9085484053695086131ull}},
+{{11393183696425929770ull, 17202427684501641408ull,
+ 7684770602700580358ull, 5678427533559428832ull}},
+{{14241479620532412213ull, 12279662568772275952ull,
+ 9605963253375725448ull, 7098034416949286040ull}},
+{{17801849525665515266ull, 15349578210965344940ull,
+ 12007454066719656810ull, 8872543021186607550ull}},
+{{1902783916686171233ull, 14205172400280728492ull,
+ 2892972773272397602ull, 5545339388241629719ull}},
+{{2378479895857714042ull, 8533093463496134807ull,
+ 17451274021872660715ull, 6931674235302037148ull}},
+{{16808157925104306264ull, 6054680810942780604ull,
+ 3367348453631274278ull, 8664592794127546436ull}},
+{{1281726666335415607ull, 17619233562121401590ull,
+ 11327964820374322231ull, 5415370496329716522ull}},
+{{10825530369774045317ull, 17412355934224364083ull,
+ 4936583988613126981ull, 6769213120412145653ull}},
+{{8920226943790168742ull, 7930386862498291392ull,
+ 10782416004193796631ull, 8461516400515182066ull}},
+{{5575141839868855464ull, 11874020816702513976ull,
+ 11350696021048510798ull, 5288447750321988791ull}},
+{{6968927299836069330ull, 5619153984023366662ull,
+ 9576684007883250594ull, 6610559687902485989ull}},
+{{17934531161649862470ull, 16247314516883984135ull,
+ 16582541028281451146ull, 8263199609878107486ull}},
+{{18126611003672245900ull, 14766257591479877988ull,
+ 5752402124248519062ull, 5164499756173817179ull}},
+{{4211519680880755759ull, 9234449952495071678ull,
+ 2578816636883260924ull, 6455624695217271474ull}},
+{{14487771637955720506ull, 11543062440618839597ull,
+ 12446892832958851963ull, 8069530869021589342ull}},
+{{11360700282936019269ull, 4908571016173080796ull,
+ 3167622002171894573ull, 5043456793138493339ull}},
+{{14200875353670024086ull, 10747399788643738899ull,
+ 17794585557997031928ull, 6304320991423116673ull}},
+{{13139408173660142203ull, 13434249735804673624ull,
+ 8408173892214126198ull, 7880401239278895842ull}},
+{{8212130108537588877ull, 3784720066450533111ull,
+ 9866794701061216778ull, 4925250774549309901ull}},
+{{5653476617244598192ull, 13954272119917942197ull,
+ 16945179394753908876ull, 6156563468186637376ull}},
+{{11678531789983135644ull, 17442840149897427746ull,
+ 2734730169732834479ull, 7695704335233296721ull}},
+{{11910768387166847682ull, 17819304121326974197ull,
+ 13238421402151491309ull, 4809815209520810450ull}},
+{{1053402428676395890ull, 8439072096376554035ull,
+ 7324654715834588329ull, 6012269011901013063ull}},
+{{15151811091127658574ull, 15160526138898080447ull,
+ 4544132376365847507ull, 7515336264876266329ull}},
+{{16387410959595868465ull, 7169485827597606327ull,
+ 14369297781297124452ull, 4697085165547666455ull}},
+{{15872577681067447677ull, 8961857284497007909ull,
+ 13349936208194017661ull, 5871356456934583069ull}},
+{{6005664046052145885ull, 15814007624048647791ull,
+ 2852362204960358364ull, 7339195571168228837ull}},
+{{2895394039137794452ull, 1320765456351258123ull,
+ 8177138774627835860ull, 9173994463960286046ull}},
+{{17950522338956979196ull, 10048850447074312134ull,
+ 499025715715009508ull, 5733746539975178779ull}},
+{{13214780886841448187ull, 12561063058842890168ull,
+ 14458840199925925597ull, 7167183174968973473ull}},
+{{16518476108551810234ull, 1866270768271448998ull,
+ 4238492194625243285ull, 8958978968711216842ull}},
+{{5712361549417493492ull, 3472262239383349576ull,
+ 7260743640068164957ull, 5599361855444510526ull}},
+{{7140451936771866865ull, 8952013817656574874ull,
+ 18299301586939982004ull, 6999202319305638157ull}},
+{{18148936957819609390ull, 11190017272070718592ull,
+ 9039068928392813793ull, 8749002899132047697ull}},
+{{11343085598637255869ull, 76231767403117264ull,
+ 17178633126313978381ull, 5468126811957529810ull}},
+{{14178856998296569836ull, 4706975727681284484ull,
+ 12249919371037697168ull, 6835158514946912263ull}},
+{{17723571247870712295ull, 5883719659601605605ull,
+ 10700713195369733556ull, 8543948143683640329ull}},
+{{13383075039132889136ull, 12900696824105779311ull,
+ 18217160793174553232ull, 5339967589802275205ull}},
+{{12117157780488723516ull, 16125871030132224139ull,
+ 8936392936186027828ull, 6674959487252844007ull}},
+{{10534761207183516491ull, 1710594713955728558ull,
+ 6558805151805146882ull, 8343699359066055009ull}},
+{{1972539736062309903ull, 5680807714649718253ull,
+ 15628468265946686561ull, 5214812099416284380ull}},
+{{7077360688505275283ull, 11712695661739535720ull,
+ 1088841258723806585ull, 6518515124270355476ull}},
+{{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull,
+ 8148143905337944345ull}},
+{{10140874056322134219ull, 503632201182659961ull,
+ 12379872279446443655ull, 5092589940836215215ull}},
+{{17287778588830055677ull, 14464598306760488663ull,
+ 10863154330880666664ull, 6365737426045269019ull}},
+{{16998037217610181693ull, 18080747883450610829ull,
+ 8967256895173445426ull, 7957171782556586274ull}},
+{{12929616270220057510ull, 15912153445584019672ull,
+ 10216221577910791295ull, 4973232364097866421ull}},
+{{16162020337775071888ull, 15278505788552636686ull,
+ 17381962990815877023ull, 6216540455122333026ull}},
+{{10979153385364064051ull, 14486446217263407954ull,
+ 12504081701665070471ull, 7770675568902916283ull}},
+{{11473656884279927936ull, 15971557913430711827ull,
+ 5509208054326975092ull, 4856672230564322677ull}},
+{{9730385086922522016ull, 1517703318078838168ull,
+ 11498196086336106770ull, 6070840288205403346ull}},
+{{12162981358653152520ull, 11120501184453323518ull,
+ 5149373071065357654ull, 7588550360256754183ull}},
+{{2990177330730832421ull, 2338627221855939295ull,
+ 10135887197056930390ull, 4742843975160471364ull}},
+{{17572779718695704238ull, 12146656064174699926ull,
+ 12669858996321162987ull, 5928554968950589205ull}},
+{{12742602611514854490ull, 10571634061790987004ull,
+ 2002265690119290022ull, 7410693711188236507ull}},
+{{17187498669051559864ull, 1995585270191978973ull,
+ 17392317120820413928ull, 4631683569492647816ull}},
+{{7649315281032286118ull, 2494481587739973717ull,
+ 3293652327315965794ull, 5789604461865809771ull}},
+{{14173330119717745552ull, 12341474021529742954ull,
+ 17952123464427120954ull, 7237005577332262213ull}},
+{{8493290612792406132ull, 6203470490057402885ull,
+ 8605096275251737481ull, 9046256971665327767ull}},
+{{7614149642208947785ull, 15406384102354346563ull,
+ 12295714199673417781ull, 5653910607290829854ull}},
+{{4906001034333796827ull, 5422922072660769492ull,
+ 6146270712736996419ull, 7067388259113537318ull}},
+{{6132501292917246033ull, 2166966572398573961ull,
+ 16906210427776021332ull, 8834235323891921647ull}},
+{{15362028354141748531ull, 10577726144603884533ull,
+ 17483910545001095188ull, 5521397077432451029ull}},
+{{5367477387395021951ull, 13222157680754855667ull,
+ 8019830125969205273ull, 6901746346790563787ull}},
+{{2097660715816389535ull, 2692639045661405872ull,
+ 5413101639034118688ull, 8627182933488204734ull}},
+{{1311037947385243460ull, 1682899403538378670ull,
+ 17218246579678487892ull, 5391989333430127958ull}},
+{{10862169471086330132ull, 2103624254422973337ull,
+ 12299436187743334057ull, 6739986666787659948ull}},
+{{18189397857285300569ull, 7241216336456104575ull,
+ 15374295234679167571ull, 8424983333484574935ull}},
+{{18285902688444394712ull, 2219917201071371407ull,
+ 16526463549315561588ull, 5265614583427859334ull}},
+{{18245692342128105486ull, 2774896501339214259ull,
+ 11434707399789676177ull, 6582018229284824168ull}},
+{{18195429409232743953ull, 8080306645101405728ull,
+ 14293384249737095221ull, 8227522786606030210ull}},
+{{11372143380770464971ull, 7356034662402072532ull,
+ 13545051174513072417ull, 5142201741628768881ull}},
+{{14215179225963081214ull, 13806729346429978569ull,
+ 3096255912859176809ull, 6427752177035961102ull}},
+{{3933915977171687805ull, 3423353627755309500ull,
+ 13093691927928746820ull, 8034690221294951377ull}},
+{{11682069522587080686ull, 11362968054201844245ull,
+ 1266028427314384906ull, 5021681388309344611ull}},
+{{767528847951687146ull, 4980338030897529499ull,
+ 15417593589425144845ull, 6277101735386680763ull}},
+{{14794469115221772644ull, 10837108557049299777ull,
+ 14660305968354043152ull, 7846377169233350954ull}},
+{{2329014169372526047ull, 6773192848155812361ull,
+ 13774377248648664874ull, 4903985730770844346ull}},
+{{7522953730143045462ull, 17689863097049541259ull,
+ 7994599523956055284ull, 6129982163463555433ull}},
+{{4792006144251418924ull, 3665584797602374958ull,
+ 14604935423372457010ull, 7662477704329444291ull}},
+{{16830061895439300539ull, 6902676516928872252ull,
+ 6822241630394091679ull, 4789048565205902682ull}},
+{{2590833295589574058ull, 4016659627733702412ull,
+ 17751174074847390407ull, 5986310706507378352ull}},
+{{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull,
+ 7482888383134222941ull}},
+{{8941617539820436589ull, 11784926618718307329ull,
+ 4644732709119747947ull, 4676805239458889338ull}},
+{{15788707943202933640ull, 10119472254970496257ull,
+ 15029287923254460742ull, 5846006549323611672ull}},
+{{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull,
+ 7307508186654514591ull}},
+{{16599405629006654981ull, 4282460352322930642ull,
+ 14259890343230319102ull, 9134385233318143238ull}},
+{{14986314536556547267ull, 16511595775483995363ull,
+ 4300745446091561534ull, 5708990770823839524ull}},
+{{14121207152268296180ull, 11416122682500218396ull,
+ 5375931807614451918ull, 7136238463529799405ull}},
+{{17651508940335370225ull, 5046781316270497187ull,
+ 11331600777945452802ull, 8920298079412249256ull}},
+{{8726350078495912439ull, 7765924341096448646ull,
+ 7082250486215908001ull, 5575186299632655785ull}},
+{{1684565561265114740ull, 14319091444797948712ull,
+ 13464499126197272905ull, 6968982874540819731ull}},
+{{2105706951581393425ull, 4063806250715272178ull,
+ 12218937889319203228ull, 8711228593176024664ull}},
+{{5927752863165758795ull, 11763250943551820919ull,
+ 7636836180824502017ull, 5444517870735015415ull}},
+{{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull,
+ 6805647338418769269ull}},
+{{8109192344089651141ull, 10309629067051791354ull,
+ 10779635027931437426ull, 8507059173023461586ull}},
+{{9679931233483419867ull, 11055204185334757500ull,
+ 11348957910884536295ull, 5316911983139663491ull}},
+{{12099914041854274834ull, 9207319213241058971ull,
+ 9574511370178282465ull, 6646139978924579364ull}},
+{{10513206533890455638ull, 16120835034978711618ull,
+ 11968139212722853081ull, 8307674973655724205ull}},
+{{11182440102108922678ull, 3157992869220612905ull,
+ 9785930017165477128ull, 5192296858534827628ull}},
+{{142992072353989635ull, 3947491086525766132ull,
+ 12232412521456846410ull, 6490371073168534535ull}},
+{{178740090442487044ull, 14157735895011983473ull,
+ 10678829633393670108ull, 8112963841460668169ull}},
+{{11640927602595024163ull, 18071956971237265478ull,
+ 18203483566939513577ull, 5070602400912917605ull}},
+{{5327787466389004395ull, 8754888158764418136ull,
+ 8919296403392228260ull, 6338253001141147007ull}},
+{{6659734332986255494ull, 10943610198455522670ull,
+ 6537434485812897421ull, 7922816251426433759ull}},
+{{17997392013398573396ull, 9145599383248395620ull,
+ 11003425581274142744ull, 4951760157141521099ull}},
+{{4049995943038665129ull, 11431999229060494526ull,
+ 9142595958165290526ull, 6189700196426901374ull}},
+{{14285866965653107219ull, 5066626999470842349ull,
+ 2204872910851837350ull, 7737125245533626718ull}},
+{{11234509862746885964ull, 17001699929951440180ull,
+ 15213103624564562055ull, 4835703278458516698ull}},
+{{14043137328433607455ull, 16640438894011912321ull,
+ 9793007493850926761ull, 6044629098073145873ull}},
+{{3718863605259845606ull, 6965490562232726690ull,
+ 16852945385741046356ull, 7555786372591432341ull}},
+{{6935975771714791408ull, 13576803638250229989ull,
+ 12838933875301847924ull, 4722366482869645213ull}},
+{{13281655733070877164ull, 16971004547812787486ull,
+ 2213609288845146193ull, 5902958103587056517ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 7378697629483820646ull}},
+{{0ull, 0ull, 0ull, 9223372036854775808ull}},
+{{0ull, 0ull, 0ull, 5764607523034234880ull}},
+{{0ull, 0ull, 0ull, 7205759403792793600ull}},
+{{0ull, 0ull, 0ull, 9007199254740992000ull}},
+{{0ull, 0ull, 0ull, 5629499534213120000ull}},
+{{0ull, 0ull, 0ull, 7036874417766400000ull}},
+{{0ull, 0ull, 0ull, 8796093022208000000ull}},
+{{0ull, 0ull, 0ull, 5497558138880000000ull}},
+{{0ull, 0ull, 0ull, 6871947673600000000ull}},
+{{0ull, 0ull, 0ull, 8589934592000000000ull}},
+{{0ull, 0ull, 0ull, 5368709120000000000ull}},
+{{0ull, 0ull, 0ull, 6710886400000000000ull}},
+{{0ull, 0ull, 0ull, 8388608000000000000ull}},
+{{0ull, 0ull, 0ull, 5242880000000000000ull}},
+{{0ull, 0ull, 0ull, 6553600000000000000ull}},
+{{0ull, 0ull, 0ull, 8192000000000000000ull}},
+{{0ull, 0ull, 0ull, 5120000000000000000ull}},
+{{0ull, 0ull, 0ull, 6400000000000000000ull}},
+{{0ull, 0ull, 0ull, 8000000000000000000ull}},
+{{0ull, 0ull, 0ull, 5000000000000000000ull}},
+{{0ull, 0ull, 0ull, 6250000000000000000ull}},
+{{0ull, 0ull, 0ull, 7812500000000000000ull}},
+{{0ull, 0ull, 0ull, 4882812500000000000ull}},
+{{0ull, 0ull, 0ull, 6103515625000000000ull}},
+{{0ull, 0ull, 0ull, 7629394531250000000ull}},
+{{0ull, 0ull, 0ull, 4768371582031250000ull}},
+{{0ull, 0ull, 0ull, 5960464477539062500ull}},
+{{0ull, 0ull, 0ull, 7450580596923828125ull}},
+{{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}},
+{{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}},
+{{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}},
+{{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}},
+{{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}},
+{{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}},
+{{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}},
+{{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}},
+{{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}},
+{{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}},
+{{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}},
+{{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}},
+{{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}},
+{{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}},
+{{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}},
+{{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}},
+{{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}},
+{{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}},
+{{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}},
+{{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}},
+{{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}},
+{{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}},
+{{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}},
+{{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}},
+{{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}},
+{{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}},
+{{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}},
+{{0ull, 9223372036854775808ull, 18445154669448718262ull,
+ 7523163845262640050ull}},
+{{0ull, 1152921504606846976ull, 16139907686832836818ull,
+ 4701977403289150031ull}},
+{{0ull, 10664523917613334528ull, 15563198590113658118ull,
+ 5877471754111437539ull}},
+{{0ull, 4107282860161892352ull, 14842312219214684744ull,
+ 7346839692639296924ull}},
+{{0ull, 5134103575202365440ull, 106146200308804314ull,
+ 9183549615799121156ull}},
+{{0ull, 7820500752928866304ull, 9289713412047778504ull,
+ 5739718509874450722ull}},
+{{0ull, 9775625941161082880ull, 2388769728204947322ull,
+ 7174648137343063403ull}},
+{{0ull, 2996160389596577792ull, 16821020215538347865ull,
+ 8968310171678829253ull}},
+{{0ull, 13401815289566330880ull, 12818980643925161367ull,
+ 5605193857299268283ull}},
+{{0ull, 12140583093530525696ull, 11412039786479063805ull,
+ 7006492321624085354ull}},
+{{0ull, 1340670811630993408ull, 5041677696244053949ull,
+ 8758115402030106693ull}},
+{{0ull, 3143762266483064832ull, 5456891569366227670ull,
+ 5473822126268816683ull}},
+{{0ull, 13153074869958606848ull, 2209428443280396683ull,
+ 6842277657836020854ull}},
+{{0ull, 11829657569020870656ull, 11985157590955271662ull,
+ 8552847072295026067ull}},
+{{0ull, 2781849962210656256ull, 5184880485133350837ull,
+ 5345529420184391292ull}},
+{{0ull, 8088998471190708224ull, 6481100606416688546ull,
+ 6681911775230489115ull}},
+{{0ull, 887876052133609472ull, 3489689739593472779ull,
+ 8352389719038111394ull}},
+{{0ull, 16695823597079363584ull, 6792742105673308390ull,
+ 5220243574398819621ull}},
+{{0ull, 11646407459494428672ull, 13102613650519023392ull,
+ 6525304467998524526ull}},
+{{0ull, 14558009324368035840ull, 7154895026294003432ull,
+ 8156630584998155658ull}},
+{{0ull, 9098755827730022400ull, 9083495409861140049ull,
+ 5097894115623847286ull}},
+{{0ull, 15985130803089915904ull, 2130997225471649253ull,
+ 6372367644529809108ull}},
+{{0ull, 6146355448580231168ull, 2663746531839561567ull,
+ 7965459555662261385ull}},
+{{0ull, 10759001183003726336ull, 13194056628468195739ull,
+ 4978412222288913365ull}},
+{{0ull, 8837065460327270016ull, 2657512730303080962ull,
+ 6223015277861141707ull}},
+{{0ull, 1822959788554311712ull, 17156948968161014915ull,
+ 7778769097326427133ull}},
+{{0ull, 17280250932342302484ull, 13028936114314328273ull,
+ 4861730685829016958ull}},
+{{0ull, 7765255610145714393ull, 7062798106038134534ull,
+ 6077163357286271198ull}},
+{{4611686018427387904ull, 483197475827367183ull,
+ 18051869669402443976ull, 7596454196607838997ull}},
+{{9799832789158199296ull, 301998422392104489ull,
+ 13588261552590221437ull, 4747783872879899373ull}},
+{{16861477004875137024ull, 4989184046417518515ull,
+ 3150268885455613084ull, 5934729841099874217ull}},
+{{16465160237666533376ull, 6236480058021898144ull,
+ 8549522125246904259ull, 7418412301374842771ull}},
+{{10290725148541583360ull, 1591957027049992388ull,
+ 3037608319065621210ull, 4636507688359276732ull}},
+{{12863406435676979200ull, 11213318320667266293ull,
+ 3797010398832026512ull, 5795634610449095915ull}},
+{{2244199989314060288ull, 14016647900834082867ull,
+ 134576980112645236ull, 7244543263061369894ull}},
+{{16640308041924739072ull, 17520809876042603583ull,
+ 9391593261995582353ull, 9055679078826712367ull}},
+{{17317721553844043776ull, 4032977144885545383ull,
+ 12787274816388320827ull, 5659799424266695229ull}},
+{{17035465923877666816ull, 429535412679543825ull,
+ 2149035465203237322ull, 7074749280333369037ull}},
+{{7459274349564919808ull, 9760291302704205590ull,
+ 7297980349931434556ull, 8843436600416711296ull}},
+{{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull,
+ 5527147875260444560ull}},
+{{9286322599418134528ull, 5319384571023966665ull,
+ 5701547148383933247ull, 6908934844075555700ull}},
+{{16219589267700056064ull, 2037544695352570427ull,
+ 7126933935479916559ull, 8636168555094444625ull}},
+{{7831400283098841088ull, 8190994462236438373ull,
+ 15983548755743417609ull, 5397605346934027890ull}},
+{{14400936372300939264ull, 14850429096222935870ull,
+ 10756063907824496203ull, 6747006683667534863ull}},
+{{8777798428521398272ull, 13951350351851281934ull,
+ 8833393866353232350ull, 8433758354584418579ull}},
+{{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull,
+ 5271098971615261612ull}},
+{{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull,
+ 6588873714519077015ull}},
+{{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull,
+ 8236092143148846269ull}},
+{{6186205317594251264ull, 3867513670791002824ull,
+ 2563215182517940054ull, 5147557589468028918ull}},
+{{7732756646992814080ull, 14057764125343529338ull,
+ 12427391015002200875ull, 6434446986835036147ull}},
+{{442573771886241792ull, 12960519138252023769ull,
+ 10922552750325363190ull, 8043058733543795184ull}},
+{{11805823653497370880ull, 3488638442980126951ull,
+ 6826595468953351994ull, 5026911708464871990ull}},
+{{10145593548444325696ull, 13584170090579934497ull,
+ 17756616373046465800ull, 6283639635581089987ull}},
+{{17293677953982795024ull, 16980212613224918121ull,
+ 17584084447880694346ull, 7854549544476362484ull}},
+{{3891019693598165034ull, 15224318901692961730ull,
+ 1766680743070658158ull, 4909093465297726553ull}},
+{{14087146653852482101ull, 9807026590261426354ull,
+ 6820036947265710602ull, 6136366831622158191ull}},
+{{8385561280460826818ull, 3035411200972007135ull,
+ 3913360165654750349ull, 7670458539527697739ull}},
+{{12158504827929098618ull, 4202975009821198411ull,
+ 140007094320525016ull, 4794036587204811087ull}},
+{{10586445016483985368ull, 5253718762276498014ull,
+ 14010066923182819982ull, 5992545734006013858ull}},
+{{4009684233750205902ull, 15790520489700398326ull,
+ 8289211617123749169ull, 7490682167507517323ull}},
+{{16341110701376042401ull, 2951546278421667097ull,
+ 2874914251488649279ull, 4681676354692198327ull}},
+{{6591330321437889289ull, 17524490903309247584ull,
+ 17428700869642975310ull, 5852095443365247908ull}},
+{{8239162901797361611ull, 12682241592281783672ull,
+ 3339132013344167522ull, 7315119304206559886ull}},
+{{10298953627246702013ull, 6629429953497453782ull,
+ 13397287053534985211ull, 9143899130258199857ull}},
+{{1825159998601800855ull, 1837550711722214662ull,
+ 1455775380818283901ull, 5714936956411374911ull}},
+{{11504822035107026876ull, 6908624408080156231ull,
+ 15654777281305018588ull, 7143671195514218638ull}},
+{{9769341525456395691ull, 8635780510100195289ull,
+ 10345099564776497427ull, 8929588994392773298ull}},
+{{17635053499478717067ull, 3091519809598928103ull,
+ 11077373246412698796ull, 5580993121495483311ull}},
+{{17432130855921008430ull, 3864399761998660129ull,
+ 9235030539588485591ull, 6976241401869354139ull}},
+{{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull,
+ 8720301752336692674ull}},
+{{9583626965064323420ull, 2442601561758029738ull,
+ 8944249865963774832ull, 5450188595210432921ull}},
+{{2756161669475628467ull, 3053251952197537173ull,
+ 15791998350882106444ull, 6812735744013041151ull}},
+{{8056888105271923487ull, 3816564940246921466ull,
+ 15128311920175245151ull, 8515919680016301439ull}},
+{{9647241084222340084ull, 9302882115295407772ull,
+ 16372723977750610075ull, 5322449800010188399ull}},
+{{12059051355277925104ull, 7016916625691871811ull,
+ 15854218953760874690ull, 6653062250012735499ull}},
+{{10462128175670018476ull, 17994517818969615572ull,
+ 15206087673773705458ull, 8316327812515919374ull}},
+{{15762202146648537356ull, 15858259655283397636ull,
+ 4892118777681178007ull, 5197704882822449609ull}},
+{{1256008609601120079ull, 15211138550676859142ull,
+ 10726834490528860413ull, 6497131103528062011ull}},
+{{10793382798856175906ull, 5178865133063910215ull,
+ 8796857094733687613ull, 8121413879410077514ull}},
+{{13663393276926191798ull, 5542633717378637836ull,
+ 10109721702635942662ull, 5075883674631298446ull}},
+{{17079241596157739747ull, 16151664183578073103ull,
+ 3413780091440152519ull, 6344854593289123058ull}},
+{{16737365976769786780ull, 15577894211045203475ull,
+ 13490597151154966457ull, 7931068241611403822ull}},
+{{8155010726267422785ull, 2818654854262170316ull,
+ 3819937201044466132ull, 4956917651007127389ull}},
+{{10193763407834278482ull, 3523318567827712895ull,
+ 9386607519732970569ull, 6196147063758909236ull}},
+{{8130518241365460198ull, 9015834228212029023ull,
+ 11733259399666213211ull, 7745183829698636545ull}},
+{{11999102928494494480ull, 3329053383418824187ull,
+ 415758097150301401ull, 4840739893561647841ull}},
+{{10387192642190730196ull, 8773002747700918138ull,
+ 5131383639865264655ull, 6050924866952059801ull}},
+{{3760618765883636937ull, 6354567416198759769ull,
+ 11025915568258968723ull, 7563656083690074751ull}},
+{{13879601774745742846ull, 1665761625910530903ull,
+ 13808726257802937308ull, 4727285052306296719ull}},
+{{12737816200004790653ull, 2082202032388163629ull,
+ 12649221803826283731ull, 5909106315382870899ull}},
+{{2087212194723824604ull, 16437810595767368249ull,
+ 11199841236355466759ull, 7386382894228588624ull}},
+{{12833722667770860138ull, 17191160649995687011ull,
+ 6999900772722166724ull, 4616489308892867890ull}},
+{{11430467316286187268ull, 3042206738785057148ull,
+ 17973248002757484214ull, 5770611636116084862ull}},
+{{14288084145357734085ull, 13026130460336097243ull,
+ 13243187966592079459ull, 7213264545145106078ull}},
+{{13248419163269779702ull, 11670977056992733650ull,
+ 7330612921385323516ull, 9016580681431382598ull}},
+{{12891947995471000218ull, 16517732697475234339ull,
+ 18416691131147990909ull, 5635362925894614123ull}},
+{{11503248975911362368ull, 6812107816561879212ull,
+ 18409177895507600733ull, 7044203657368267654ull}},
+{{14379061219889202960ull, 13126820789129736919ull,
+ 13788100332529725108ull, 8805254571710334568ull}},
+{{15904442290071833706ull, 17427635030060861382ull,
+ 8617562707831078192ull, 5503284107318959105ull}},
+{{10657180825735016325ull, 3337799713866525112ull,
+ 15383639403216235645ull, 6879105134148698881ull}},
+{{13321476032168770406ull, 8783935660760544294ull,
+ 5394491198738130844ull, 8598881417685873602ull}},
+{{3714236501678093600ull, 14713331824830115992ull,
+ 7983243017638719681ull, 5374300886053671001ull}},
+{{4642795627097617000ull, 4556606725755481278ull,
+ 14590739790475787506ull, 6717876107567088751ull}},
+{{15026866570726797057ull, 14919130444049127405ull,
+ 13626738719667346478ull, 8397345134458860939ull}},
+{{11697634615917942113ull, 4712770509103316724ull,
+ 6210868690578397597ull, 5248340709036788087ull}},
+{{14622043269897427641ull, 10502649154806533809ull,
+ 3151899844795609092ull, 6560425886295985109ull}},
+{{4442496032089620839ull, 13128311443508167262ull,
+ 8551560824421899269ull, 8200532357869981386ull}},
+{{16611618075338176737ull, 10511037661406298490ull,
+ 9956411533691074947ull, 5125332723668738366ull}},
+{{11541150557317945113ull, 8527111058330485209ull,
+ 3222142380259067876ull, 6406665904585922958ull}},
+{{591380141365267679ull, 10658888822913106512ull,
+ 13251050012178610653ull, 8008332380732403697ull}},
+{{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull,
+ 5005207737957752311ull}},
+{{9685387772296391182ull, 1986188617563206094ull,
+ 15540529592745350965ull, 6256509672447190388ull}},
+{{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull,
+ 7820637090558987986ull}},
+{{6413787692499708635ull, 9045699637415760105ull,
+ 5223509716691223585ull, 4887898181599367491ull}},
+{{12628920634052023698ull, 15918810565197088035ull,
+ 1917701127436641577ull, 6109872726999209364ull}},
+{{11174464774137641718ull, 6063455151214196332ull,
+ 2397126409295801972ull, 7637340908749011705ull}},
+{{16207412520690801882ull, 13013031506363648515ull,
+ 13027419051878345992ull, 4773338067968132315ull}},
+{{15647579632436114448ull, 16266289382954560644ull,
+ 11672587796420544586ull, 5966672584960165394ull}},
+{{1112730466835591444ull, 11109489691838424998ull,
+ 5367362708670904925ull, 7458340731200206743ull}},
+{{14530514597054408365ull, 9249274066612709575ull,
+ 10272130720560397434ull, 4661462957000129214ull}},
+{{13551457227890622552ull, 2338220546411111161ull,
+ 3616791363845720985ull, 5826828696250161518ull}},
+{{3104263479581114478ull, 7534461701441276856ull,
+ 13744361241661927039ull, 7283535870312701897ull}},
+{{3880329349476393097ull, 4806391108374208166ull,
+ 3345393496795245087ull, 9104419837890877372ull}},
+{{16260263898704909398ull, 9921523470374961959ull,
+ 11314242972351803987ull, 5690262398681798357ull}},
+{{15713643854953748843ull, 7790218319541314545ull,
+ 307745660157591272ull, 7112827998352247947ull}},
+{{5806996763410022342ull, 9737772899426643182ull,
+ 14219740130479152802ull, 8891034997940309933ull}},
+{{17464431032413427676ull, 10697794080569039892ull,
+ 11193180590763164453ull, 5556896873712693708ull}},
+{{3383794716807232979ull, 17983928619138687770ull,
+ 13991475738453955566ull, 6946121092140867135ull}},
+{{13453115432863817032ull, 13256538737068583904ull,
+ 12877658654640056554ull, 8682651365176083919ull}},
+{{8408197145539885645ull, 12897022729095252844ull,
+ 14966065686791117202ull, 5426657103235052449ull}},
+{{10510246431924857056ull, 6897906374514290247ull,
+ 4872524053206732791ull, 6783321379043815562ull}},
+{{8526122021478683416ull, 4010696949715474905ull,
+ 15314027103363191797ull, 8479151723804769452ull}},
+{{16858041309492646895ull, 4812528602785865767ull,
+ 347894902747219065ull, 5299469827377980908ull}},
+{{16460865618438420715ull, 10627346771909720113ull,
+ 434868628434023831ull, 6624337284222476135ull}},
+{{6741023967765862181ull, 8672497446459762238ull,
+ 14378643840824693501ull, 8280421605278095168ull}},
+{{18048198035135827576ull, 7726153913251045350ull,
+ 8986652400515433438ull, 5175263503298809480ull}},
+{{13336875507065008661ull, 434320354709030880ull,
+ 11233315500644291798ull, 6469079379123511850ull}},
+{{16671094383831260826ull, 9766272480241064408ull,
+ 4818272338950588939ull, 8086349223904389813ull}},
+{{10419433989894538017ull, 3798077290936971303ull,
+ 5317263221057812039ull, 5053968264940243633ull}},
+{{8412606468940784617ull, 135910595243826225ull,
+ 11258265044749652953ull, 6317460331175304541ull}},
+{{15127444104603368675ull, 4781574262482170685ull,
+ 237773250654902479ull, 7896825413969130677ull}},
+{{11760495574590799374ull, 9906012941692438534ull,
+ 2454451290873008001ull, 4935515883730706673ull}},
+{{5477247431383723409ull, 16994202195542936072ull,
+ 7679750132018647905ull, 6169394854663383341ull}},
+{{6846559289229654262ull, 7407694689146506378ull,
+ 14211373683450697786ull, 7711743568329229176ull}},
+{{8890785574195921818ull, 9241495199143954390ull,
+ 8882108552156686116ull, 4819839730205768235ull}},
+{{1890109930890126464ull, 11551868998929942988ull,
+ 6490949671768469741ull, 6024799662757210294ull}},
+{{2362637413612658080ull, 604778193380265023ull,
+ 17337059126565362985ull, 7530999578446512867ull}},
+{{8394177411148993156ull, 11907201416931135399ull,
+ 8529818944889657913ull, 4706874736529070542ull}},
+{{5881035745508853541ull, 1048943715881755537ull,
+ 1438901644257296584ull, 5883593420661338178ull}},
+{{11962980700313454830ull, 1311179644852194421ull,
+ 11021999092176396538ull, 7354491775826672722ull}},
+{{1118667820109654825ull, 10862346592920018835ull,
+ 4554126828365719864ull, 9193114719783340903ull}},
+{{16840068452064391930ull, 6788966620575011771ull,
+ 9763858295369656771ull, 5745696699864588064ull}},
+{{16438399546653102009ull, 3874522257291376810ull,
+ 12204822869212070964ull, 7182120874830735080ull}},
+{{11324627396461601703ull, 4843152821614221013ull,
+ 15256028586515088705ull, 8977651093538418850ull}},
+{{9383735132002195016ull, 14556185559577357893ull,
+ 14146703884999318344ull, 5611031933461511781ull}},
+{{16341354933430131674ull, 18195231949471697366ull,
+ 3848321800966984218ull, 7013789916826889727ull}},
+{{11203321629932888785ull, 13520667899984845900ull,
+ 198716232781342369ull, 8767237396033612159ull}},
+{{16225448055562831299ull, 1532888409849446831ull,
+ 7041726673129420837ull, 5479523372521007599ull}},
+{{15670124051026151219ull, 6527796530739196443ull,
+ 4190472322984388142ull, 6849404215651259499ull}},
+{{14975969045355301120ull, 17383117700278771362ull,
+ 626404385303097273ull, 8561755269564074374ull}},
+{{13971666671774451104ull, 3946919535033150245ull,
+ 14226560796096599508ull, 5351097043477546483ull}},
+{{3629525284435900168ull, 4933649418791437807ull,
+ 13171514976693361481ull, 6688871304346933104ull}},
+{{18371964660827038922ull, 10778747791916685162ull,
+ 16464393720866701851ull, 8361089130433666380ull}},
+{{16094163931444287230ull, 4430874360734234274ull,
+ 1066874038686912849ull, 5225680706521041488ull}},
+{{10894332877450583230ull, 10150278969345180747ull,
+ 1333592548358641061ull, 6532100883151301860ull}},
+{{9006230078385841133ull, 17299534730108863838ull,
+ 1666990685448301326ull, 8165126103939127325ull}},
+{{1017207780563762804ull, 6200523187890651995ull,
+ 3347712187618882281ull, 5103203814961954578ull}},
+{{15106567780986867217ull, 12362340003290702897ull,
+ 13408012271378378659ull, 6379004768702443222ull}},
+{{5048151670951420310ull, 10841238985685990718ull,
+ 7536643302368197516ull, 7973755960878054028ull}},
+{{16990152849626801406ull, 15999146402908520006ull,
+ 13933774100834899255ull, 4983597475548783767ull}},
+{{12014319025178725949ull, 15387246985208262104ull,
+ 12805531607616236165ull, 6229496844435979709ull}},
+{{15017898781473407436ull, 5399000676228163918ull,
+ 2171856454238131495ull, 7786871055544974637ull}},
+{{4774500719993491744ull, 10291904450283684305ull,
+ 3663253293112526136ull, 4866794409715609148ull}},
+{{10579811918419252584ull, 12864880562854605381ull,
+ 4579066616390657670ull, 6083493012144511435ull}},
+{{17836450916451453633ull, 6857728666713480918ull,
+ 1112147252060934184ull, 7604366265180639294ull}},
+{{6536095804354770617ull, 4286080416695925574ull,
+ 14530150087820247577ull, 4752728915737899558ull}},
+{{17393491792298239079ull, 9969286539297294871ull,
+ 8939315572920533663ull, 5940911144672374448ull}},
+{{17130178721945410945ull, 7849922155694230685ull,
+ 11174144466150667079ull, 7426138930840468060ull}},
+{{13012204710429575793ull, 11823730374949976034ull,
+ 16207212328198942732ull, 4641336831775292537ull}},
+{{7041883851182193933ull, 14779662968687470043ull,
+ 6423957354966514703ull, 5801671039719115672ull}},
+{{4190668795550354512ull, 13862892692431949650ull,
+ 8029946693708143379ull, 7252088799648894590ull}},
+{{14461708031292718948ull, 12716929847112549158ull,
+ 814061330280403416ull, 9065110999561118238ull}},
+{{4426881501130561438ull, 7948081154445343224ull,
+ 14343846386707415847ull, 5665694374725698898ull}},
+{{5533601876413201798ull, 5323415424629291126ull,
+ 8706435946529494001ull, 7082117968407123623ull}},
+{{16140374382371278055ull, 11265955299214001811ull,
+ 6271358914734479597ull, 8852647460508904529ull}},
+{{7781890979768354833ull, 9347065071222445084ull,
+ 15448814367777519508ull, 5532904662818065330ull}},
+{{9727363724710443541ull, 11683831339028056355ull,
+ 10087645922867123577ull, 6916130828522581663ull}},
+{{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull,
+ 8645163535653227079ull}},
+{{13940571185267692384ull, 481081949064316707ull,
+ 11916198643363904711ull, 5403227209783266924ull}},
+{{12814027963157227576ull, 14436410491612559596ull,
+ 14895248304204880888ull, 6754034012229083655ull}},
+{{16017534953946534470ull, 18045513114515699495ull,
+ 14007374361828713206ull, 8442542515286354569ull}},
+{{16928488373857665900ull, 6666759678144924280ull,
+ 1837079948501863898ull, 5276589072053971606ull}},
+{{2713866393612530759ull, 17556821634535931159ull,
+ 11519721972482105680ull, 6595736340067464507ull}},
+{{17227391047297827161ull, 3499282969460362332ull,
+ 9787966447175244197ull, 8244670425084330634ull}},
+{{1543747367706366168ull, 4492894865126420410ull,
+ 10729165047911915527ull, 5152919015677706646ull}},
+{{11153056246487733517ull, 1004432562980637608ull,
+ 4188084273035118601ull, 6441148769597133308ull}},
+{{13941320308109666897ull, 5867226722153184914ull,
+ 5235105341293898251ull, 8051435961996416635ull}},
+{{13325011210995929715ull, 1361173692132046619ull,
+ 966097829094992455ull, 5032147476247760397ull}},
+{{12044577995317524239ull, 15536525170447221986ull,
+ 5819308304796128472ull, 6290184345309700496ull}},
+{{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull,
+ 7862730431637125620ull}},
+{{1339376026593886980ull, 7526224270984504273ull,
+ 13769706649976751177ull, 4914206519773203512ull}},
+{{6285906051669746629ull, 14019466357158018245ull,
+ 17212133312470938971ull, 6142758149716504390ull}},
+{{12469068583014571190ull, 12912646928020134902ull,
+ 12291794603733897906ull, 7678447687145630488ull}},
+{{3181481845956719090ull, 12682090348439972218ull,
+ 7682371627333686191ull, 4799029804466019055ull}},
+{{13200224344300674670ull, 11240926917122577368ull,
+ 4991278515739719835ull, 5998787255582523819ull}},
+{{16500280430375843337ull, 9439472627975833806ull,
+ 1627412126247261890ull, 7498484069478154774ull}},
+{{5700989250557514182ull, 10511356410912284033ull,
+ 14852190634186702393ull, 4686552543423846733ull}},
+{{11737922581624280632ull, 17750881532067742945ull,
+ 4730180237451214279ull, 5858190679279808417ull}},
+{{837345171748187077ull, 17576915896657290778ull,
+ 10524411315241405753ull, 7322738349099760521ull}},
+{{10270053501540009654ull, 8136086815539449760ull,
+ 17767200162479145096ull, 9153422936374700651ull}},
+{{6418783438462506034ull, 5085054259712156100ull,
+ 8798657092335771733ull, 5720889335234187907ull}},
+{{8023479298078132543ull, 10968003843067583029ull,
+ 6386635346992326762ull, 7151111669042734884ull}},
+{{14641035141025053582ull, 4486632766979702978ull,
+ 7983294183740408453ull, 8938889586303418605ull}},
+{{13762332981568046393ull, 5109988488576008313ull,
+ 7295401874051449235ull, 5586805991439636628ull}},
+{{3367858171677894279ull, 1775799592292622488ull,
+ 9119252342564311544ull, 6983507489299545785ull}},
+{{4209822714597367849ull, 2219749490365778110ull,
+ 16010751446632777334ull, 8729384361624432231ull}},
+{{16466197251905518618ull, 15222401486760775030ull,
+ 16924248681786567689ull, 5455865226015270144ull}},
+{{11359374528027122464ull, 5192943803168805076ull,
+ 2708566778523657996ull, 6819831532519087681ull}},
+{{14199218160033903080ull, 6491179753961006345ull,
+ 7997394491581960399ull, 8524789415648859601ull}},
+{{1956982322380107569ull, 10974516373866710822ull,
+ 16527586603307195009ull, 5327993384780537250ull}},
+{{11669599939829910269ull, 18329831485760776431ull,
+ 11436111217279217953ull, 6659991730975671563ull}},
+{{9975313906359999932ull, 9077231301918806827ull,
+ 9683453003171634538ull, 8324989663719589454ull}},
+{{3928728182261306006ull, 10284955582126642171ull,
+ 1440472108554883682ull, 5203118539824743409ull}},
+{{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull,
+ 6503898174780929261ull}},
+{{9597402298603831562ull, 18376086106286572344ull,
+ 12627031211078628537ull, 8129872718476161576ull}},
+{{5998376436627394726ull, 4567524788788025859ull,
+ 7891894506924142836ull, 5081170449047600985ull}},
+{{2886284527356855504ull, 5709405985985032324ull,
+ 14476554152082566449ull, 6351463061309501231ull}},
+{{3607855659196069380ull, 11748443500908678309ull,
+ 13484006671675820157ull, 7939328826636876539ull}},
+{{4560752796211237315ull, 9648620197281617895ull,
+ 6121661160583693646ull, 4962080516648047837ull}},
+{{1089254976836658739ull, 2837403209747246561ull,
+ 12263762469157004962ull, 6202600645810059796ull}},
+{{5973254739473211328ull, 12770126049038834009ull,
+ 15329703086446256202ull, 7753250807262574745ull}},
+{{15262499258239226840ull, 12593014799076659159ull,
+ 2663535401387828270ull, 4845781754539109216ull}},
+{{14466438054371645646ull, 6517896461991048141ull,
+ 3329419251734785338ull, 6057227193173886520ull}},
+{{4247989512682393345ull, 17370742614343585985ull,
+ 4161774064668481672ull, 7571533991467358150ull}},
+{{14184208491494965601ull, 10856714133964741240ull,
+ 16436166845699964757ull, 4732208744667098843ull}},
+{{17730260614368707001ull, 18182578685883314454ull,
+ 15933522538697568042ull, 5915260930833873554ull}},
+{{12939453731106107943ull, 13504851320499367260ull,
+ 10693531136517184245ull, 7394076163542341943ull}},
+{{17310530618796093273ull, 10746375084525798489ull,
+ 13600985987964322009ull, 4621297602213963714ull}},
+{{7803105218212952879ull, 18044654874084636016ull,
+ 7777860448100626703ull, 5776622002767454643ull}},
+{{9753881522766191098ull, 17944132574178407116ull,
+ 5110639541698395475ull, 7220777503459318304ull}},
+{{12192351903457738873ull, 17818479699295620991ull,
+ 6388299427122994344ull, 9025971879324147880ull}},
+{{14537748967302168652ull, 11136549812059763119ull,
+ 3992687141951871465ull, 5641232424577592425ull}},
+{{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull,
+ 7051540530721990531ull}},
+{{12338939219948015734ull, 107036512240675234ull,
+ 7391495163906646141ull, 8814425663402488164ull}},
+{{12323523030894897738ull, 2372740829364115973ull,
+ 13843056514296429646ull, 5509016039626555102ull}},
+{{1569345733336458460ull, 12189298073559920775ull,
+ 8080448606015761249ull, 6886270049533193878ull}},
+{{15796740221952736787ull, 1401564536667737256ull,
+ 877188720664925754ull, 8607837561916492348ull}},
+{{9872962638720460492ull, 5487663853844723689ull,
+ 9771614987270354404ull, 5379898476197807717ull}},
+{{16952889316827963519ull, 6859579817305904611ull,
+ 16826204752515330909ull, 6724873095247259646ull}},
+{{16579425627607566495ull, 13186160790059768668ull,
+ 11809383903789387828ull, 8406091369059074558ull}},
+{{1138768980399953251ull, 17464722530642131226ull,
+ 2769178921440979488ull, 5253807105661921599ull}},
+{{10646833262354717372ull, 3384159089593112416ull,
+ 17296531707083388073ull, 6567258882077401998ull}},
+{{13308541577943396715ull, 8841884880418778424ull,
+ 12397292596999459283ull, 8209073602596752498ull}},
+{{8317838486214622947ull, 3220335041048042563ull,
+ 12359993891552049956ull, 5130671001622970311ull}},
+{{5785612089340890780ull, 4025418801310053204ull,
+ 10838306346012674541ull, 6413338752028712889ull}},
+{{7232015111676113475ull, 9643459520064954409ull,
+ 18159568950943231080ull, 8016673440035891111ull}},
+{{16049224490866040682ull, 6027162200040596505ull,
+ 18267259621980601281ull, 5010420900022431944ull}},
+{{6226472558300387140ull, 12145638768478133536ull,
+ 4387330453766199985ull, 6263026125028039931ull}},
+{{7783090697875483925ull, 1346990405315503208ull, 872477048780362078ull,
+ 7828782656285049914ull}},
+{{4864431686172177453ull, 14676927058604353217ull,
+ 5156984173915114202ull, 4892989160178156196ull}},
+{{10692225626142609721ull, 9122786786400665713ull,
+ 6446230217393892753ull, 6116236450222695245ull}},
+{{17976968051105650055ull, 16015169501428220045ull,
+ 12669473790169753845ull, 7645295562778369056ull}},
+{{13541448041154725236ull, 12315323947606331480ull,
+ 7918421118856096153ull, 4778309726736480660ull}},
+{{16926810051443406545ull, 1559096879225750638ull,
+ 9898026398570120192ull, 5972887158420600825ull}},
+{{11935140527449482373ull, 1948871099032188298ull,
+ 16984219016640038144ull, 7466108948025751031ull}},
+{{12071148848083314388ull, 1218044436895117686ull,
+ 17532665913041105696ull, 4666318092516094394ull}},
+{{5865564023249367176ull, 1522555546118897108ull,
+ 12692460354446606312ull, 5832897615645117993ull}},
+{{7331955029061708970ull, 1903194432648621385ull,
+ 2030517387776094178ull, 7291122019556397492ull}},
+{{13776629804754524117ull, 11602365077665552539ull,
+ 2538146734720117722ull, 9113902524445496865ull}},
+{{6304550618757883621ull, 11863164191968358241ull,
+ 13115556755268543336ull, 5696189077778435540ull}},
+{{12492374291874742430ull, 14828955239960447801ull,
+ 16394445944085679170ull, 7120236347223044425ull}},
+{{1780409809561264326ull, 9312822013095783944ull,
+ 6657999374824935251ull, 8900295434028805532ull}},
+{{1112756130975790204ull, 3514670748971171013ull,
+ 13384621646120360340ull, 5562684646268003457ull}},
+{{6002631182147125659ull, 4393338436213963766ull,
+ 2895719002368286713ull, 6953355807835004322ull}},
+{{16726661014538682881ull, 10103359063694842611ull,
+ 12843020789815134199ull, 8691694759793755402ull}},
+{{8148320124872982849ull, 13232128442450358488ull,
+ 12638574012061846778ull, 5432309224871097126ull}},
+{{10185400156091228561ull, 7316788516208172302ull,
+ 6574845478222532665ull, 6790386531088871408ull}},
+{{3508378158259259893ull, 13757671663687603282ull,
+ 8218556847778165831ull, 8487983163861089260ull}},
+{{6804422367339425337ull, 15516073817445833907ull,
+ 14359970066716129452ull, 5304989477413180787ull}},
+{{3893841940746893768ull, 948348198097740768ull,
+ 13338276564967773912ull, 6631236846766475984ull}},
+{{4867302425933617209ull, 1185435247622175960ull,
+ 16672845706209717390ull, 8289046058458094980ull}},
+{{3042064016208510756ull, 14575955085046023687ull,
+ 1197156529526297560ull, 5180653786536309363ull}},
+{{17637638075542802157ull, 18219943856307529608ull,
+ 15331503717190035662ull, 6475817233170386703ull}},
+{{3600303520718951080ull, 13551557783529636203ull,
+ 14552693628060156674ull, 8094771541462983379ull}},
+{{18391090764945202089ull, 13081409633133410530ull,
+ 6789590508323903969ull, 5059232213414364612ull}},
+{{13765491419326726803ull, 2516703986134599451ull,
+ 8486988135404879962ull, 6324040266767955765ull}},
+{{12595178255731020600ull, 12369252019523025122ull,
+ 15220421187683487856ull, 7905050333459944706ull}},
+{{12483672428259275779ull, 7730782512201890701ull,
+ 14124449260729567814ull, 4940656458412465441ull}},
+{{1769532480041931012ull, 440106103397587569ull, 3820503520629796056ull,
+ 6175820573015581802ull}},
+{{6823601618479801669ull, 550132629246984461ull,
+ 13999001437642020878ull, 7719775716269477252ull}},
+{{6570594020763569995ull, 14178890948561529000ull,
+ 17972747935381038856ull, 4824859822668423282ull}},
+{{8213242525954462494ull, 17723613685701911250ull,
+ 13242562882371522762ull, 6031074778335529103ull}},
+{{1043181120588302309ull, 12931145070272613255ull,
+ 11941517584537015549ull, 7538843472919411379ull}},
+{{7569517228008770799ull, 10387808678134077236ull,
+ 5157605481121940766ull, 4711777170574632112ull}},
+{{9461896535010963499ull, 3761388810812820737ull,
+ 6447006851402425958ull, 5889721463218290140ull}},
+{{16439056687191092278ull, 13925108050370801729ull,
+ 8058758564253032447ull, 7362151829022862675ull}},
+{{6713762803706701635ull, 12794699044536114258ull,
+ 5461762186888902655ull, 9202689786278578344ull}},
+{{8807787770744076426ull, 14914215930476153267ull,
+ 3413601366805564159ull, 5751681116424111465ull}},
+{{6398048695002707629ull, 14031083894667803680ull,
+ 8878687726934343103ull, 7189601395530139331ull}},
+{{7997560868753384536ull, 12927168849907366696ull,
+ 6486673640240540975ull, 8987001744412674164ull}},
+{{4998475542970865335ull, 14997009558833186041ull,
+ 13277543062005113917ull, 5616876090257921352ull}},
+{{10859780447140969573ull, 4911203893259318839ull,
+ 16596928827506392397ull, 7021095112822401690ull}},
+{{8963039540498824062ull, 10750690885001536453ull,
+ 11522788997528214688ull, 8776368891028002113ull}},
+{{7907742722025458991ull, 6719181803125960283ull, 284214095814052324ull,
+ 5485230556892501321ull}},
+{{5272992384104435834ull, 8398977253907450354ull,
+ 4966953638194953309ull, 6856538196115626651ull}},
+{{15814612516985320601ull, 15110407585811700846ull,
+ 1597006029316303732ull, 8570672745144533314ull}},
+{{5272446804688437472ull, 220632704277537221ull, 5609814786750077737ull,
+ 5356670465715333321ull}},
+{{11202244524287934743ull, 4887476898774309430ull,
+ 11623954501864985075ull, 6695838082144166651ull}},
+{{4779433618505142621ull, 1497660105040498884ull,
+ 9918257108903843440ull, 8369797602680208314ull}},
+{{12210518048420489946ull, 936037565650311802ull,
+ 10810596711492290054ull, 5231123501675130196ull}},
+{{6039775523670836625ull, 10393418993917665561ull,
+ 13513245889365362567ull, 6538904377093912745ull}},
+{{12161405423015933685ull, 8380087723969694047ull,
+ 3056499306424539497ull, 8173630471367390932ull}},
+{{14518407417026040409ull, 16766769873549528539ull,
+ 11133684103370112993ull, 5108519044604619332ull}},
+{{13536323252855162607ull, 7123404286654746962ull,
+ 13917105129212641242ull, 6385648805755774165ull}},
+{{7697032029214177451ull, 18127627395173209511ull,
+ 3561323356233637840ull, 7982061007194717707ull}},
+{{11728174045899942763ull, 11329767121983255944ull,
+ 18366728162141881314ull, 4988788129496698566ull}},
+{{14660217557374928454ull, 4938836865624294122ull,
+ 13735038165822575835ull, 6235985161870873208ull}},
+{{9101899909863884759ull, 1561860063602979749ull,
+ 17168797707278219794ull, 7794981452338591510ull}},
+{{7994530452878621927ull, 5587848558179250247ull,
+ 6118812548621499467ull, 4871863407711619694ull}},
+{{5381477047670889504ull, 2373124679296674905ull,
+ 16871887722631650142ull, 6089829259639524617ull}},
+{{11338532328015999784ull, 12189777885975619439ull,
+ 7254801598007398965ull, 7612286574549405772ull}},
+{{14004111732651081721ull, 9924454187948456101ull,
+ 13757623035609400161ull, 4757679109093378607ull}},
+{{3670081610531688440ull, 17017253753362958031ull,
+ 12585342776084362297ull, 5947098886366723259ull}},
+{{18422660068446774261ull, 7436509136421533826ull,
+ 11119992451678064968ull, 7433873607958404074ull}},
+{{16125848561206621817ull, 4647818210263458641ull,
+ 11561681300726178509ull, 4646171004974002546ull}},
+{{6322252646226113560ull, 10421458781256711206ull,
+ 5228729589052947328ull, 5807713756217503183ull}},
+{{17126187844637417758ull, 13026823476570889007ull,
+ 1924225967888796256ull, 7259642195271878979ull}},
+{{16796048787369384293ull, 16283529345713611259ull,
+ 16240340515143159032ull, 9074552744089848723ull}},
+{{8191687482892171231ull, 10177205841071007037ull,
+ 7844369812750780443ull, 5671595465056155452ull}},
+{{14851295372042601943ull, 8109821282911370892ull,
+ 9805462265938475554ull, 7089494331320194315ull}},
+{{117375141343700812ull, 913904566784437808ull, 7645141813995706539ull,
+ 8861867914150242894ull}},
+{{73359463339813008ull, 16712091418736131294ull, 166527615319928682ull,
+ 5538667446343901809ull}},
+{{9315071366029542068ull, 11666742236565388309ull,
+ 4819845537577298757ull, 6923334307929877261ull}},
+{{16255525225964315489ull, 748369740424571674ull,
+ 10636492940399011351ull, 8654167884912346576ull}},
+{{14771389284655085085ull, 7385260115406439152ull,
+ 6647808087749382094ull, 5408854928070216610ull}},
+{{17492532109304740ull, 8203107403273133ull, 17533132146541503426ull,
+ 6761068660087770762ull}},
+{{4633551683564018828ull, 9233625921108867224ull,
+ 12693043146322103474ull, 8451335825109713453ull}},
+{{2895969802227511768ull, 10382702219120429919ull,
+ 10238994975665008623ull, 5282084890693570908ull}},
+{{17455020308066553422ull, 8366691755473149494ull,
+ 12798743719581260779ull, 6602606113366963635ull}},
+{{12595403348228415969ull, 5846678675914048964ull,
+ 11386743631049188070ull, 8253257641708704544ull}},
+{{17095499129497535789ull, 17489232227728444314ull,
+ 7116714769405742543ull, 5158286026067940340ull}},
+{{12146001875017143928ull, 17249854266233167489ull,
+ 8895893461757178179ull, 6447857532584925425ull}},
+{{1347444288489266198ull, 16950631814364071458ull,
+ 15731552845623860628ull, 8059821915731156781ull}},
+{{5453838698733179278ull, 1370772847122768853ull,
+ 12138063537728606845ull, 5037388697331972988ull}},
+{{11428984391843862001ull, 6325152077330848970ull,
+ 15172579422160758556ull, 6296735871664966235ull}},
+{{5062858452950051693ull, 7906440096663561213ull,
+ 14354038259273560291ull, 7870919839581207794ull}},
+{{5470129542307476261ull, 2635682051201031806ull,
+ 13582959930473363086ull, 4919324899738254871ull}},
+{{16061033964739121134ull, 12517974600856065565ull,
+ 12367013894664315953ull, 6149156124672818589ull}},
+{{6241234400641737705ull, 1812410195787918245ull,
+ 1623709313048231230ull, 7686445155841023237ull}},
+{{6206614509614780018ull, 14967814427649612615ull,
+ 3320661329868838470ull, 4804028222400639523ull}},
+{{3146582118591087118ull, 9486395997707239961ull,
+ 17985884717618211800ull, 6005035278000799403ull}},
+{{8544913666666246801ull, 11857994997134049951ull,
+ 17870669878595376846ull, 7506294097500999254ull}},
+{{12258100069307486107ull, 2799560854781393315ull,
+ 6557482655694722625ull, 4691433810938124534ull}},
+{{10710939068206969730ull, 8111137086904129548ull,
+ 17420225356473179089ull, 5864292263672655667ull}},
+{{13388673835258712162ull, 14750607377057549839ull,
+ 17163595677164085957ull, 7330365329590819584ull}},
+{{12124156275646002298ull, 4603201166039773587ull,
+ 3007750522745555831ull, 9162956661988524481ull}},
+{{5271754663065057485ull, 9794529756415940348ull,
+ 13409059122784442154ull, 5726847913742827800ull}},
+{{6589693328831321856ull, 3019790158665149627ull,
+ 16761323903480552693ull, 7158559892178534750ull}},
+{{3625430642611764415ull, 8386423716758824938ull,
+ 11728282842495915058ull, 8948199865223168438ull}},
+{{6877580170059740664ull, 9853200841401653490ull,
+ 2718490758132559007ull, 5592624915764480274ull}},
+{{17820347249429451638ull, 7704815033324678958ull,
+ 12621485484520474567ull, 6990781144705600342ull}},
+{{13052062024932038739ull, 5019332773228460794ull,
+ 6553484818795817401ull, 8738476430882000428ull}},
+{{12769224784009912116ull, 14666298029336257756ull,
+ 13319300048602161683ull, 5461547769301250267ull}},
+{{15961530980012390145ull, 13721186518242934291ull,
+ 12037439042325314200ull, 6826934711626562834ull}},
+{{15340227706588099777ull, 17151483147803667864ull,
+ 5823426766051866942ull, 8533668389533203543ull}},
+{{9587642316617562361ull, 6107990948949904511ull,
+ 10557170756423498695ull, 5333542743458252214ull}},
+{{7372866877344565047ull, 3023302667759992735ull,
+ 3973091408674597561ull, 6666928429322815268ull}},
+{{4604397578253318405ull, 8390814353127378823ull,
+ 4966364260843246951ull, 8333660536653519085ull}},
+{{9795277514049405859ull, 12161787998345693620ull,
+ 5409820672240723296ull, 5208537835408449428ull}},
+{{12244096892561757324ull, 15202234997932117025ull,
+ 6762275840300904120ull, 6510672294260561785ull}},
+{{1470063060420032942ull, 556049673705594666ull,
+ 13064530818803518055ull, 8138340367825702231ull}},
+{{5530475431189908493ull, 7265060073707078522ull,
+ 15082860789393280640ull, 5086462729891063894ull}},
+{{16136466325842161424ull, 9081325092133848152ull,
+ 9630203949886824992ull, 6358078412363829868ull}},
+{{1723838833593150164ull, 11351656365167310191ull,
+ 12037754937358531240ull, 7947598015454787335ull}},
+{{7994928298636800709ull, 7094785228229568869ull,
+ 14441125863490163881ull, 4967248759659242084ull}},
+{{14605346391723388790ull, 13480167553714348990ull,
+ 18051407329362704851ull, 6209060949574052605ull}},
+{{9033310952799460179ull, 12238523423715548334ull,
+ 8729201106421217352ull, 7761326186967565757ull}},
+{{1034133327072274708ull, 7649077139822217709ull,
+ 7761593700726954797ull, 4850828866854728598ull}},
+{{5904352677267731289ull, 14173032443205160040ull,
+ 478620089053917688ull, 6063536083568410748ull}},
+{{7380440846584664111ull, 17716290554006450050ull,
+ 598275111317397110ull, 7579420104460513435ull}},
+{{9224461547542802974ull, 6460995577826643377ull,
+ 16514823009069230858ull, 4737137565287820896ull}},
+{{16142262952855891621ull, 17299616509138080029ull,
+ 2196784687626986956ull, 5921421956609776121ull}},
+{{6342770635787700814ull, 3177776562713048421ull,
+ 7357666877961121600ull, 7401777445762220151ull}},
+{{6270074656581006961ull, 1986110351695655263ull,
+ 11516070826366782856ull, 4626110903601387594ull}},
+{{3225907302298870797ull, 2482637939619569079ull,
+ 5171716496103702762ull, 5782638629501734493ull}},
+{{17867442183155752209ull, 12326669461379237156ull,
+ 11076331638557016356ull, 7228298286877168116ull}},
+{{3887558655235138645ull, 15408336826724046446ull,
+ 13845414548196270445ull, 9035372858596460145ull}},
+{{16264782214804125365ull, 11936053525916222980ull,
+ 1735855064981587172ull, 5647108036622787591ull}},
+{{1884233694795605090ull, 14920066907395278726ull,
+ 16004876886509147677ull, 7058885045778484488ull}},
+{{11578664155349282171ull, 4815025578961934695ull,
+ 1559352034426882981ull, 8823606307223105611ull}},
+{{14154194124734383213ull, 5315233996064903136ull,
+ 17115496086012659527ull, 5514753942014441006ull}},
+{{17692742655917979016ull, 2032356476653741016ull,
+ 12170998070661048601ull, 6893442427518051258ull}},
+{{3669184246187922154ull, 7152131614244564175ull,
+ 5990375551471534943ull, 8616803034397564073ull}},
+{{9210769181508533202ull, 11387611286543934465ull,
+ 15273199765738179099ull, 5385501896498477545ull}},
+{{16125147495313054407ull, 9622828089752530177ull,
+ 5256441651890560162ull, 6731877370623096932ull}},
+{{6321376313859154296ull, 2805163075335886914ull,
+ 6570552064863200203ull, 8414846713278871165ull}},
+{{8562546214589359339ull, 17894127986580786985ull,
+ 6412438049753194078ull, 5259279195799294478ull}},
+{{15314868786664087078ull, 13144287946371207923ull,
+ 17238919599046268406ull, 6574098994749118097ull}},
+{{14531899964902720943ull, 7206987896109234096ull,
+ 7713591443525671796ull, 8217623743436397622ull}},
+{{9082437478064200590ull, 13727739471923047118ull,
+ 209308633776156968ull, 5136014839647748514ull}},
+{{2129674810725474929ull, 17159674339903808898ull,
+ 9485007829074972018ull, 6420018549559685642ull}},
+{{11885465550261619469ull, 12226220888024985314ull,
+ 2632887749488939215ull, 8025023186949607053ull}},
+{{12040101987340900073ull, 14558917082656697677ull,
+ 3951397852644280961ull, 5015639491843504408ull}},
+{{1215069428893961379ull, 4363588298038708385ull,
+ 4939247315805351202ull, 6269549364804380510ull}},
+{{6130522804544839627ull, 14677857409403161289ull,
+ 15397431181611464810ull, 7836936706005475637ull}},
+{{15360791798908994527ull, 13785346899304363709ull,
+ 11929237497720859458ull, 4898085441253422273ull}},
+{{5365931693354079447ull, 8008311587275678829ull,
+ 1076488816868910611ull, 6122606801566777842ull}},
+{{11319100635119987212ull, 5398703465667210632ull,
+ 10568983057940914072ull, 7653258501958472302ull}},
+{{7074437896949992008ull, 3374189666042006645ull,
+ 1993928392785683391ull, 4783286563724045189ull}},
+{{13454733389614877914ull, 18052795137834672018ull,
+ 7104096509409492142ull, 5979108204655056486ull}},
+{{7595044700163821584ull, 13342621885438564215ull,
+ 18103492673616640986ull, 7473885255818820607ull}},
+{{11664431965243470346ull, 12950824696826490538ull,
+ 18232211948651482472ull, 4671178284886762879ull}},
+{{5357167919699562125ull, 16188530871033113173ull,
+ 18178578917386965186ull, 5838972856108453599ull}},
+{{11308145918051840560ull, 11012291551936615658ull,
+ 18111537628306318579ull, 7298716070135566999ull}},
+{{4911810360710024891ull, 9153678421493381669ull,
+ 18027736016955510320ull, 9123395087669458749ull}},
+{{5375724484657459509ull, 5721049013433363543ull,
+ 13573178019810887902ull, 5702121929793411718ull}},
+{{2107969587394436483ull, 16374683303646480237ull,
+ 7743100487908834069ull, 7127652412241764648ull}},
+{{7246648002670433507ull, 6633296074275936584ull,
+ 9678875609886042587ull, 8909565515302205810ull}},
+{{4529155001669020942ull, 1839967037208766413ull,
+ 10660983274606164521ull, 5568478447063878631ull}},
+{{10273129770513664082ull, 6911644814938345920ull,
+ 8714543074830317747ull, 6960598058829848289ull}},
+{{12841412213142080102ull, 4027870000245544496ull,
+ 15504864861965285088ull, 8700747573537310361ull}},
+{{8025882633213800064ull, 2517418750153465310ull,
+ 2773011511087221324ull, 5437967233460818976ull}},
+{{808981254662474272ull, 3146773437691831638ull, 3466264388859026655ull,
+ 6797459041826023720ull}},
+{{10234598605182868647ull, 17768524852396953259ull,
+ 4332830486073783318ull, 8496823802282529650ull}},
+{{4090781119025598953ull, 6493642014320707883ull,
+ 7319705072223502478ull, 5310514876426581031ull}},
+{{501790380354610787ull, 17340424554755660662ull,
+ 4537945321851990193ull, 6638143595533226289ull}},
+{{9850610012298039291ull, 7840472638162412115ull,
+ 10284117670742375646ull, 8297679494416532861ull}},
+{{3850788248472580605ull, 288609380424119668ull, 8733416553427678731ull,
+ 5186049684010333038ull}},
+{{4813485310590725757ull, 14195819780812313297ull,
+ 1693398654929822605ull, 6482562105012916298ull}},
+{{10628542656665795100ull, 3909716670733227909ull,
+ 11340120355517054065ull, 8103202631266145372ull}},
+{{8948682169629815889ull, 13972787965276737203ull,
+ 16310947259052934598ull, 5064501644541340857ull}},
+{{6574166693609881958ull, 8242612919741145696ull,
+ 6553626018534004536ull, 6330627055676676072ull}},
+{{8217708367012352447ull, 10303266149676432120ull,
+ 8192032523167505670ull, 7913283819595845090ull}},
+{{5136067729382720280ull, 1827855325120382171ull,
+ 9731706345407078948ull, 4945802387247403181ull}},
+{{1808398643301012445ull, 2284819156400477714ull,
+ 16776318950186236589ull, 6182252984059253976ull}},
+{{11483870340981041365ull, 7467709963927985046ull,
+ 2523654614023244120ull, 7727816230074067471ull}},
+{{2565732944685762949ull, 4667318727454990654ull,
+ 8494813161405609431ull, 4829885143796292169ull}},
+{{12430538217711979494ull, 1222462390891350413ull,
+ 15230202470184399693ull, 6037356429745365211ull}},
+{{1703114716857810656ull, 6139764007041575921ull,
+ 14426067069303111712ull, 7546695537181706514ull}},
+{{12593661744104601420ull, 3837352504400984950ull,
+ 13627977936741832724ull, 4716684710738566571ull}},
+{{6518705143275975967ull, 4796690630501231188ull,
+ 12423286402499903001ull, 5895855888423208214ull}},
+{{8148381429094969958ull, 10607549306553926889ull,
+ 6305735966270102943ull, 7369819860529010268ull}},
+{{14797162804796100352ull, 8647750614765020707ull,
+ 7882169957837628679ull, 9212274825661262835ull}},
+{{6942383743783868768ull, 12322373161869219798ull,
+ 2620513214434823972ull, 5757671766038289272ull}},
+{{17901351716584611768ull, 15402966452336524747ull,
+ 3275641518043529965ull, 7197089707547861590ull}},
+{{17765003627303376806ull, 5418650010138492222ull,
+ 13317923934409188265ull, 8996362134434826987ull}},
+{{6491441248637222600ull, 14915871302405027399ull,
+ 6017859449792048713ull, 5622726334021766867ull}},
+{{3502615542369140346ull, 4809781072724120537ull,
+ 2910638293812672988ull, 7028407917527208584ull}},
+{{8989955446388813336ull, 6012226340905150671ull,
+ 3638297867265841235ull, 8785509896909010730ull}},
+{{12536251181634090191ull, 1451798453852025217ull,
+ 6885622185468538676ull, 5490943685568131706ull}},
+{{1835255921760449027ull, 1814748067315031522ull,
+ 17830399768690449153ull, 6863679606960164632ull}},
+{{11517441939055337091ull, 6880121102571177306ull,
+ 3841255637153509825ull, 8579599508700205791ull}},
+{{11810087230336973586ull, 15829290735175455576ull,
+ 9318313800862025496ull, 5362249692937628619ull}},
+{{14762609037921216983ull, 1339869345259767854ull,
+ 7036206232650143967ull, 6702812116172035774ull}},
+{{9229889260546745420ull, 15509894736856873530ull,
+ 18018629827667455766ull, 8378515145215044717ull}},
+{{10380366806269103792ull, 5081998192108158052ull,
+ 13567486651505853806ull, 5236571965759402948ull}},
+{{12975458507836379740ull, 15575869776989973373ull,
+ 16959358314382317257ull, 6545714957199253685ull}},
+{{2384265079513310963ull, 5634779165955303005ull,
+ 7364139837695732860ull, 8182143696499067107ull}},
+{{3796008683909513304ull, 12745109015576840186ull,
+ 2296744389346139085ull, 5113839810311916942ull}},
+{{13968382891741667438ull, 2096328214188886520ull,
+ 12094302523537449665ull, 6392299762889896177ull}},
+{{17460478614677084297ull, 7232096286163496054ull,
+ 1282820099139648369ull, 7990374703612370222ull}},
+{{6301113115745789782ull, 16049275224920654794ull,
+ 14636820617244443942ull, 4993984189757731388ull}},
+{{17099763431537013035ull, 10838221994296042684ull,
+ 18296025771555554928ull, 6242480237197164235ull}},
+{{2927960215711714678ull, 13547777492870053356ull,
+ 18258346196017055756ull, 7803100296496455294ull}},
+{{11053347171674597482ull, 17690732969898559155ull,
+ 6799780354083271943ull, 4876937685310284559ull}},
+{{9204997946165858948ull, 17501730193945811040ull,
+ 3888039424176702025ull, 6096172106637855699ull}},
+{{11506247432707323685ull, 8042104687150100088ull,
+ 248363261793489628ull, 7620215133297319624ull}},
+{{7191404645442077303ull, 14249687466323588363ull,
+ 155227038620931017ull, 4762634458310824765ull}},
+{{4377569788375208725ull, 3977051277622321742ull,
+ 4805719816703551676ull, 5953293072888530956ull}},
+{{14695334272323786714ull, 4971314097027902177ull,
+ 6007149770879439595ull, 7441616341110663695ull}},
+{{2267054892561284840ull, 801228301428744909ull,
+ 10671997634440731603ull, 4651010213194164809ull}},
+{{7445504634128993954ull, 14836593432068094848ull,
+ 17951683061478302407ull, 5813762766492706011ull}},
+{{9306880792661242443ull, 13934055771657730656ull,
+ 17827917808420490105ull, 7267203458115882514ull}},
+{{11633600990826553054ull, 3582511659289999608ull,
+ 13061525223670836824ull, 9084004322644853143ull}},
+{{7271000619266595659ull, 2239069787056249755ull,
+ 15080982292435354871ull, 5677502701653033214ull}},
+{{4477064755655856669ull, 16633895289102475906ull,
+ 9627855828689417780ull, 7096878377066291518ull}},
+{{14819702981424596644ull, 2345625037668543266ull,
+ 2811447749006996418ull, 8871097971332864398ull}},
+{{13874000381817760807ull, 6077701666970227445ull,
+ 15592212898411536473ull, 5544436232083040248ull}},
+{{3507442421990037297ull, 12208813102140172211ull,
+ 1043522049304868975ull, 6930545290103800311ull}},
+{{18219361082769710333ull, 10649330359247827359ull,
+ 15139460616913249931ull, 8663181612629750388ull}},
+{{18304629704372150814ull, 4349988465316198147ull,
+ 238790848716005399ull, 5414488507893593993ull}},
+{{18269101112037800613ull, 825799563217859780ull,
+ 4910174579322394653ull, 6768110634866992491ull}},
+{{4389632316337699151ull, 5643935472449712630ull,
+ 1526032205725605412ull, 8460138293583740614ull}},
+{{16578578252993225681ull, 12750831707135846201ull,
+ 14788828183860667094ull, 5287586433489837883ull}},
+{{6888164760959368390ull, 6715167597065031944ull,
+ 13874349211398445964ull, 6609483041862297354ull}},
+{{8610205951199210487ull, 8393959496331289930ull,
+ 8119564477393281647ull, 8261853802327871693ull}},
+{{9993064737926894458ull, 12163753712848138062ull,
+ 7380570807584494981ull, 5163658626454919808ull}},
+{{3267958885553842265ull, 1369634085778008866ull,
+ 9225713509480618727ull, 6454573283068649760ull}},
+{{13308320643797078639ull, 15547100662504674794ull,
+ 11532141886850773408ull, 8068216603835812200ull}},
+{{12929386420800562054ull, 9716937914065421746ull,
+ 7207588679281733380ull, 5042635377397382625ull}},
+{{6938360989145926759ull, 12146172392581777183ull,
+ 13621171867529554629ull, 6303294221746728281ull}},
+{{4061265218005020544ull, 1347657435445057767ull,
+ 3191406779129779575ull, 7879117777183410352ull}},
+{{9455819788894219696ull, 7759814924794242960ull,
+ 1994629236956112234ull, 4924448610739631470ull}},
+{{11819774736117774620ull, 476396619138027892ull,
+ 11716658583049916101ull, 6155560763424539337ull}},
+{{14774718420147218275ull, 5207181792349922769ull,
+ 810765173530231414ull, 7694450954280674172ull}},
+{{2316669984950929566ull, 17089546675500865443ull,
+ 9730100270311170441ull, 4809031846425421357ull}},
+{{16730895536470825670ull, 7526875289093918091ull,
+ 16774311356316350956ull, 6011289808031776696ull}},
+{{16301933402161144183ull, 9408594111367397614ull,
+ 2521145121685887079ull, 7514112260039720871ull}},
+{{5577022357923327211ull, 12797900347245705365ull,
+ 8493244728694761280ull, 4696320162524825544ull}},
+{{11582963965831546917ull, 15997375434057131706ull,
+ 10616555910868451600ull, 5870400203156031930ull}},
+{{5255332920434657838ull, 1549975218861863017ull,
+ 4047322851730788693ull, 7338000253945039913ull}},
+{{11180852168970710202ull, 6549155042004716675ull,
+ 9670839583090873770ull, 9172500317431299891ull}},
+{{4682189596392999924ull, 8704907919680335826ull,
+ 3738431730218102154ull, 5732812698394562432ull}},
+{{15076109032346025713ull, 1657762862745643974ull,
+ 4673039662772627693ull, 7166015872993203040ull}},
+{{9621764253577756333ull, 6683889596859442872ull,
+ 5841299578465784616ull, 8957519841241503800ull}},
+{{6013602658486097709ull, 4177430998037151795ull,
+ 3650812236541115385ull, 5598449900775939875ull}},
+{{2905317304680234232ull, 9833474765973827648ull,
+ 18398573350958557943ull, 6998062375969924843ull}},
+{{3631646630850292789ull, 7680157439039896656ull,
+ 18386530670270809525ull, 8747577969962406054ull}},
+{{2269779144281432994ull, 7105941408613629362ull,
+ 6879895650491868049ull, 5467236231226503784ull}},
+{{12060595967206567050ull, 13494112779194424606ull,
+ 8599869563114835061ull, 6834045289033129730ull}},
+{{5852372922153433004ull, 3032582918710867046ull,
+ 1526464917038768019ull, 8542556611291412163ull}},
+{{17492791131628059340ull, 18036265388690149567ull,
+ 17094941637645087675ull, 5339097882057132601ull}},
+{{17254302896107686271ull, 17933645717435299055ull,
+ 7533618991774195882ull, 6673872352571415752ull}},
+{{16956192601707219934ull, 13193685109939348011ull,
+ 9417023739717744853ull, 8342340440714269690ull}},
+{{8291777366853318507ull, 10551896202925786459ull,
+ 10497325855750978437ull, 5213962775446418556ull}},
+{{5753035690139260230ull, 17801556272084620978ull,
+ 13121657319688723046ull, 6517453469308023195ull}},
+{{16414666649528851095ull, 13028573303251000414ull,
+ 11790385631183515904ull, 8146816836635028994ull}},
+{{5647480637528144031ull, 8142858314531875259ull,
+ 11980677037917085344ull, 5091760522896893121ull}},
+{{2447664778482792134ull, 10178572893164844074ull,
+ 1140788242114192968ull, 6364700653621116402ull}},
+{{12282953009958265975ull, 12723216116456055092ull,
+ 10649357339497517018ull, 7955875817026395502ull}},
+{{16900217668078692043ull, 12563696091212422336ull,
+ 2044162318758560232ull, 4972422385641497189ull}},
+{{2678528011388813437ull, 15704620114015527921ull,
+ 7166888916875588194ull, 6215527982051871486ull}},
+{{7959846032663404701ull, 10407403105664634093ull,
+ 18181983182949261051ull, 7769409977564839357ull}},
+{{7280746779628321890ull, 4198783931826702356ull,
+ 13669582498556982109ull, 4855881235978024598ull}},
+{{9100933474535402362ull, 9860165933210765849ull,
+ 7863606086341451828ull, 6069851544972530748ull}},
+{{15987852861596640857ull, 12325207416513457311ull,
+ 9829507607926814785ull, 7587314431215663435ull}},
+{{16909937066138982392ull, 785725607679828963ull,
+ 3837599245740565289ull, 4742071519509789647ull}},
+{{16525735314246340086ull, 5593843028027174108ull,
+ 185313038748318707ull, 5927589399387237059ull}},
+{{2210425069098373491ull, 2380617766606579732ull,
+ 14066699353717562096ull, 7409486749234046323ull}},
+{{10604887705041259240ull, 1487886104129112332ull,
+ 6485844086859782358ull, 4630929218271278952ull}},
+{{13256109631301574050ull, 11083229667016166223ull,
+ 8107305108574727947ull, 5788661522839098690ull}},
+{{11958451020699579658ull, 9242351065342819875ull,
+ 910759348863634126ull, 7235826903548873363ull}},
+{{10336377757447086669ull, 2329566794823749036ull,
+ 14973507241361706370ull, 9044783629436091703ull}},
+{{15683608135259204976ull, 6067665265192231051ull,
+ 16275971053492148337ull, 5652989768397557314ull}},
+{{14992824150646618316ull, 12196267599917676718ull,
+ 11121591780010409613ull, 7066237210496946643ull}},
+{{9517658151453497087ull, 1410276444614932186ull,
+ 9290303706585624113ull, 8832796513121183304ull}},
+{{10560222363085823583ull, 12410637823952802376ull,
+ 5806439816616015070ull, 5520497820700739565ull}},
+{{13200277953857279479ull, 6289925243086227162ull,
+ 11869735789197406742ull, 6900622275875924456ull}},
+{{7276975405466823541ull, 17085778590712559761ull,
+ 14837169736496758427ull, 8625777844844905570ull}},
+{{16077324674485234473ull, 8372768609981655898ull,
+ 13884917103737861921ull, 5391111153028065981ull}},
+{{10873283806251767283ull, 15077646780904457777ull,
+ 3521088324390163689ull, 6738888941285082477ull}},
+{{18203290776242097008ull, 5012000420848408509ull,
+ 9013046423915092516ull, 8423611176606353096ull}},
+{{13682899744365004582ull, 12355872299885031126ull,
+ 5633154014946932822ull, 5264756985378970685ull}},
+{{7880252643601479920ull, 6221468338001513100ull,
+ 11653128537111053932ull, 6580946231723713356ull}},
+{{9850315804501849900ull, 7776835422501891375ull,
+ 14566410671388817415ull, 8226182789654641695ull}},
+{{13073976405454738043ull, 11778051166704763965ull,
+ 16021535697259092740ull, 5141364243534151059ull}},
+{{2507412451536258842ull, 14722563958380954957ull,
+ 15415233603146478021ull, 6426705304417688824ull}},
+{{7745951582847711457ull, 4568146892694029984ull, 822297930223545911ull,
+ 8033381630522111031ull}},
+{{4841219739279819661ull, 9772620835574850596ull,
+ 7431465234030798050ull, 5020863519076319394ull}},
+{{6051524674099774576ull, 2992404007613787437ull, 65959505683721755ull,
+ 6276079398845399243ull}},
+{{12176091861052106123ull, 17575563064799398008ull,
+ 13917507437386815905ull, 7845099248556749053ull}},
+{{7610057413157566327ull, 4067197887858541899ull,
+ 11004285157580453893ull, 4903187030347968158ull}},
+{{4900885748019570005ull, 9695683378250565278ull,
+ 4531984410120791558ull, 6128983787934960198ull}},
+{{15349479221879238314ull, 2896232185958430789ull,
+ 14888352549505765256ull, 7661229734918700247ull}},
+{{11899267522888217898ull, 1810145116224019243ull,
+ 16222749371082185141ull, 4788268584324187654ull}},
+{{10262398385182884469ull, 6874367413707411958ull,
+ 11055064676997955618ull, 5985335730405234568ull}},
+{{3604625944623829778ull, 17816331303989040756ull,
+ 13818830846247444522ull, 7481669663006543210ull}},
+{{11476263252244669419ull, 15746893083420538376ull,
+ 13248455297332040730ull, 4676043539379089506ull}},
+{{14345329065305836774ull, 10460244317420897162ull,
+ 7337197084810275105ull, 5845054424223861883ull}},
+{{8708289294777520160ull, 17686991415203509357ull,
+ 4559810337585455977ull, 7306318030279827354ull}},
+{{15497047636899288103ull, 8273681213722222984ull,
+ 14923134958836595780ull, 9132897537849784192ull}},
+{{9685654773062055065ull, 14394422795431165173ull,
+ 9326959349272872362ull, 5708060961156115120ull}},
+{{16718754484754956735ull, 8769656457434180658ull,
+ 11658699186591090453ull, 7135076201445143900ull}},
+{{11675071069088920111ull, 15573756590220113727ull,
+ 14573373983238863066ull, 8918845251806429875ull}},
+{{14214448445821656925ull, 14345283887314958983ull,
+ 6802515730310595464ull, 5574278282379018672ull}},
+{{13156374538849683252ull, 17931604859143698729ull,
+ 8503144662888244330ull, 6967847852973773340ull}},
+{{2610410118279940353ull, 13191134037074847604ull,
+ 10628930828610305413ull, 8709809816217216675ull}},
+{{10854878360779738529ull, 10550301782385473704ull,
+ 4337238758667746931ull, 5443631135135760422ull}},
+{{13568597950974673161ull, 8576191209554454226ull,
+ 14644920485189459472ull, 6804538918919700527ull}},
+{{7737375401863565643ull, 10720239011943067783ull,
+ 13694464588059436436ull, 8505673648649625659ull}},
+{{11753388653805810383ull, 15923521419319193172ull,
+ 6253197358323453820ull, 5316046030406016037ull}},
+{{14691735817257262979ull, 1457657700439439849ull,
+ 12428182716331705180ull, 6645057538007520046ull}},
+{{4529611716289415012ull, 1822072125549299812ull,
+ 6311856358559855667ull, 8306321922509400058ull}},
+{{12054379359535660190ull, 17279696142964170046ull,
+ 8556596242527297695ull, 5191451201568375036ull}},
+{{5844602162564799430ull, 16987934160277824654ull,
+ 10695745303159122119ull, 6489314001960468795ull}},
+{{16529124740060775095ull, 16623231681919892913ull,
+ 8757995610521514745ull, 8111642502450585994ull}},
+{{3413173934896902579ull, 3471990773558851215ull,
+ 10085433275003334620ull, 5069776564031616246ull}},
+{{18101525473903291935ull, 4339988466948564018ull,
+ 3383419556899392467ull, 6337220705039520308ull}},
+{{13403534805524339111ull, 813299565258317119ull,
+ 4229274446124240584ull, 7921525881299400385ull}},
+{{15294738281093793801ull, 508312228286448199ull,
+ 14172511574896120125ull, 4950953675812125240ull}},
+{{14506736832939854347ull, 5247076303785448153ull,
+ 17715639468620150156ull, 6188692094765156550ull}},
+{{4298362985892654221ull, 6558845379731810192ull,
+ 12921177298920411887ull, 7735865118456445688ull}},
+{{2686476866182908888ull, 11016807389973463226ull,
+ 8075735811825257429ull, 4834915699035278555ull}},
+{{12581468119583411918ull, 18382695255894216936ull,
+ 5482983746354183882ull, 6043644623794098194ull}},
+{{15726835149479264898ull, 13754997033012995362ull,
+ 16077101719797505661ull, 7554555779742622742ull}},
+{{14440957986851928465ull, 10902716154846816053ull,
+ 5436502556446053134ull, 4721597362339139214ull}},
+{{4216139428282746870ull, 4405023156703744259ull,
+ 16019000232412342226ull, 5901996702923924017ull}},
+{{658488266926045683ull, 14729650982734456132ull,
+ 6188692235233264070ull, 7377495878654905022ull}},
+{{823110333657557103ull, 9188691691563294357ull,
+ 16959237330896355896ull, 9221869848318631277ull}},
+{{2820286967749667142ull, 5742932307227058973ull,
+ 12905366341023916387ull, 5763668655199144548ull}},
+{{8137044728114471831ull, 2566979365606435812ull,
+ 16131707926279895484ull, 7204585818998930685ull}},
+{{10171305910143089789ull, 3208724207008044765ull,
+ 6329576852567705643ull, 9005732273748663357ull}},
+{{8662909203053125070ull, 18146353693875885642ull,
+ 6261828542068509978ull, 5628582671092914598ull}},
+{{1605264466961630530ull, 13459570080490081245ull,
+ 17050657714440413281ull, 7035728338866143247ull}},
+{{6618266602129426066ull, 2989404545330437844ull,
+ 16701636124623128698ull, 8794660423582679059ull}},
+{{13359788663185667099ull, 6480063859258911556ull,
+ 8132679568675761484ull, 5496662764739174412ull}},
+{{16699735828982083874ull, 8100079824073639445ull,
+ 10165849460844701855ull, 6870828455923968015ull}},
+{{7039611730945441131ull, 5513413761664661403ull,
+ 8095625807628489415ull, 8588535569904960019ull}},
+{{2093914322627206755ull, 10363412628681495233ull,
+ 2753923120554111932ull, 5367834731190600012ull}},
+{{7229078921711396347ull, 12954265785851869041ull,
+ 3442403900692639915ull, 6709793413988250015ull}},
+{{13648034670566633338ull, 11581146213887448397ull,
+ 18138062931147963606ull, 8387241767485312518ull}},
+{{10835864678317839788ull, 2626530365252267344ull,
+ 6724603313540089350ull, 5242026104678320324ull}},
+{{13544830847897299735ull, 12506534993420109988ull,
+ 8405754141925111687ull, 6552532630847900405ull}},
+{{16931038559871624669ull, 11021482723347749581ull,
+ 15118878695833777513ull, 8190665788559875506ull}},
+{{12887742109133459370ull, 18417641748160813248ull,
+ 14060985203323498849ull, 5119166117849922191ull}},
+{{16109677636416824213ull, 9186994129918852848ull,
+ 12964545485726985658ull, 6398957647312402739ull}},
+{{1690352971811478650ull, 2260370625543790253ull,
+ 11593995838731344169ull, 7998697059140503424ull}},
+{{3362313616595868108ull, 12941946687033338668ull,
+ 7246247399207090105ull, 4999185661962814640ull}},
+{{4202892020744835135ull, 2342375303509509623ull,
+ 9057809249008862632ull, 6248982077453518300ull}},
+{{641929007503656015ull, 2927969129386887029ull,
+ 11322261561261078290ull, 7811227596816897875ull}},
+{{2707048638903478962ull, 6441666724294192297ull,
+ 4770570466574479979ull, 4882017248010561172ull}},
+{{7995496817056736606ull, 3440397386940352467ull,
+ 5963213083218099974ull, 6102521560013201465ull}},
+{{5382685002893532853ull, 13523868770530216392ull,
+ 12065702372450012871ull, 7628151950016501831ull}},
+{{3364178126808458034ull, 15369947009222467101ull,
+ 14458593010422339900ull, 4767594968760313644ull}},
+{{8816908676937960446ull, 765689687818532260ull,
+ 18073241263027924876ull, 5959493710950392055ull}},
+{{11021135846172450557ull, 957112109773165325ull,
+ 17979865560357518191ull, 7449367138687990069ull}},
+{{9194052913071475550ull, 7515724096249310184ull,
+ 13543258984437142821ull, 4655854461679993793ull}},
+{{11492566141339344438ull, 14006341138739025634ull,
+ 3094015675264264814ull, 5819818077099992242ull}},
+{{5142335639819404739ull, 8284554386569006235ull,
+ 13090891630935106826ull, 7274772596374990302ull}},
+{{1816233531346868020ull, 1132320946356481986ull,
+ 7140242501814107725ull, 9093465745468737878ull}},
+{{5746831975519180417ull, 3013543600686495193ull,
+ 18297709618915981040ull, 5683416090917961173ull}},
+{{11795225987826363425ull, 3766929500858118991ull,
+ 9037078968362812588ull, 7104270113647451467ull}},
+{{10132346466355566377ull, 4708661876072648739ull,
+ 6684662692026127831ull, 8880337642059314334ull}},
+{{4026873532258535034ull, 9860442700186487318ull,
+ 18012972237798493606ull, 5550211026287071458ull}},
+{{14256963952177944600ull, 3102181338378333339ull,
+ 13292843260393341200ull, 6937763782858839323ull}},
+{{13209518921795042846ull, 3877726672972916674ull,
+ 12004368057064288596ull, 8672204728573549154ull}},
+{{12867635344549289683ull, 11646951207462848729ull,
+ 12114416054092568276ull, 5420127955358468221ull}},
+{{2249486125404448391ull, 14558689009328560912ull,
+ 1307962012333546633ull, 6775159944198085277ull}},
+{{2811857656755560489ull, 4363303206378537428ull,
+ 6246638533844321196ull, 8468949930247606596ull}},
+{{10980783072327001114ull, 11950436540841361700ull,
+ 13127521120507476555ull, 5293093706404754122ull}},
+{{13725978840408751392ull, 10326359657624314221ull,
+ 7186029363779569886ull, 6616367133005942653ull}},
+{{3322415495228775528ull, 3684577535175616969ull,
+ 13594222723151850262ull, 8270458916257428316ull}},
+{{13605724730586454465ull, 16137919014766924317ull,
+ 17719761238824682221ull, 5169036822660892697ull}},
+{{3172097857950904369ull, 6337340713176491685ull,
+ 8314643493248689065ull, 6461296028326115872ull}},
+{{8576808340866018366ull, 12533361909898002510ull,
+ 10393304366560861331ull, 8076620035407644840ull}},
+{{748819194613873575ull, 5527508184472557617ull, 6495815229100538332ull,
+ 5047887522129778025ull}},
+{{5547710011694729872ull, 6909385230590697021ull,
+ 12731455054803060819ull, 6309859402662222531ull}},
+{{11546323533045800244ull, 4025045519810983372ull,
+ 11302632800076438120ull, 7887324253327778164ull}},
+{{16439824245008400961ull, 2515653449881864607ull,
+ 16287517536902549633ull, 4929577658329861352ull}},
+{{15938094287833113297ull, 7756252830779718663ull,
+ 1912652847418635425ull, 6161972072912326691ull}},
+{{15310931841364003717ull, 14307002056902036233ull,
+ 16225874114555457993ull, 7702465091140408363ull}},
+{{2651803373211420467ull, 2024347257922690790ull,
+ 7835328312383467294ull, 4814040681962755227ull}},
+{{12538126253369051392ull, 11753806109258139295ull,
+ 5182474372051946213ull, 6017550852453444034ull}},
+{{11060971798283926336ull, 857199581290510407ull,
+ 15701465001919708575ull, 7521938565566805042ull}},
+{{13830636401568535816ull, 7453278765947650860ull,
+ 14425101644627205763ull, 4701211603479253151ull}},
+{{17288295501960669770ull, 4704912439007175671ull,
+ 13419691037356619300ull, 5876514504349066439ull}},
+{{16998683359023449308ull, 5881140548758969589ull,
+ 12162927778268386221ull, 7345643130436333049ull}},
+{{7413296143497147923ull, 11963111704376099891ull,
+ 1368601667553319064ull, 9182053913045416312ull}},
+{{2327467080472023500ull, 7476944815235062432ull, 855376042220824415ull,
+ 5738783695653385195ull}},
+{{2909333850590029375ull, 4734495000616440136ull,
+ 14904278108058194231ull, 7173479619566731493ull}},
+{{3636667313237536719ull, 1306432732343162266ull,
+ 4795289579790579077ull, 8966849524458414367ull}},
+{{6884603089200848354ull, 3122363466928170368ull,
+ 9914585015010193779ull, 5604280952786508979ull}},
+{{8605753861501060442ull, 17738012388942376672ull,
+ 7781545250335354319ull, 7005351190983136224ull}},
+{{10757192326876325552ull, 17560829467750582936ull,
+ 9726931562919192899ull, 8756688988728920280ull}},
+{{6723245204297703470ull, 8669675408130420383ull,
+ 6079332226824495562ull, 5472930617955575175ull}},
+{{3792370486944741434ull, 1613722223308249671ull,
+ 2987479265103231549ull, 6841163272444468969ull}},
+{{128777090253538888ull, 6628838797562699993ull, 8346035099806427340ull,
+ 8551454090555586211ull}},
+{{11609700727476931565ull, 13366396285331463303ull,
+ 2910428928165323135ull, 5344658806597241382ull}},
+{{9900439890918776552ull, 12096309338236941225ull,
+ 12861408197061429727ull, 6680823508246551727ull}},
+{{16987235882075858594ull, 10508700654368788627ull,
+ 11465074227899399255ull, 8351029385308189659ull}},
+{{8311179417083717670ull, 13485466936621574748ull,
+ 4859828383223430582ull, 5219393365817618537ull}},
+{{10388974271354647087ull, 7633461633922192627ull,
+ 10686471497456676132ull, 6524241707272023171ull}},
+{{8374531820765920954ull, 9541827042402740784ull,
+ 8746403353393457261ull, 8155302134090028964ull}},
+{{5234082387978700597ull, 8269484910715406942ull,
+ 14689874132725686596ull, 5097063833806268102ull}},
+{{15765975021828151554ull, 10336856138394258677ull,
+ 9138970629052332437ull, 6371329792257835128ull}},
+{{5872410722003025730ull, 17532756191420211251ull,
+ 11423713286315415546ull, 7964162240322293910ull}},
+{{1364413692038197130ull, 15569658638065019936ull,
+ 2528134785519746812ull, 4977601400201433694ull}},
+{{1705517115047746412ull, 1015329223871723304ull,
+ 12383540518754459324ull, 6222001750251792117ull}},
+{{2131896393809683015ull, 1269161529839654130ull,
+ 1644367593160910443ull, 7777502187814740147ull}},
+{{5944121264558439788ull, 16934127020645641495ull,
+ 17168630810221426690ull, 4860938867384212591ull}},
+{{2818465562270661831ull, 11944286738952276061ull,
+ 16849102494349395459ull, 6076173584230265739ull}},
+{{8134767971265715193ull, 10318672405262957172ull,
+ 16449692099509356420ull, 7595216980287832174ull}},
+{{14307602018895847804ull, 15672542290144124040ull,
+ 5669371543765959858ull, 4747010612679895109ull}},
+{{17884502523619809755ull, 10367305825825379242ull,
+ 11698400448134837727ull, 5933763265849868886ull}},
+{{13132256117669986385ull, 8347446263854336149ull,
+ 5399628523313771351ull, 7417204082312336108ull}},
+{{10513503082757435443ull, 12134682942550041949ull,
+ 12598139863925882902ull, 4635752551445210067ull}},
+{{17753564871874182207ull, 5944981641332776628ull,
+ 11135988811479965724ull, 5794690689306512584ull}},
+{{3745212016133176143ull, 7431227051665970786ull,
+ 13919986014349957155ull, 7243363361633140730ull}},
+{{13904887057021245987ull, 4677347796155075578ull,
+ 8176610481082670636ull, 9054204202041425913ull}},
+{{13302240429065666646ull, 12146714409451698044ull,
+ 16639596596745138907ull, 5658877626275891195ull}},
+{{16627800536332083307ull, 10571706993387234651ull,
+ 16187809727504035730ull, 7073597032844863994ull}},
+{{16173064651987716230ull, 3991261704879267506ull,
+ 11011390122525268855ull, 8841996291056079993ull}},
+{{14719851425919710548ull, 9412067593190624047ull,
+ 18411333872646762794ull, 5526247681910049995ull}},
+{{13788128263972250281ull, 2541712454633504251ull,
+ 18402481322381065589ull, 6907809602387562494ull}},
+{{12623474311537924947ull, 7788826586719268218ull,
+ 13779729616121556178ull, 8634762002984453118ull}},
+{{12501357463138590996ull, 9479702635126930540ull,
+ 4000644991648584707ull, 5396726251865283199ull}},
+{{15626696828923238745ull, 7237942275481275271ull,
+ 389120221133342980ull, 6745907814831603999ull}},
+{{14921685017726660527ull, 9047427844351594089ull,
+ 14321458331698842437ull, 8432384768539504998ull}},
+{{2408524108438080974ull, 7960485411933440258ull,
+ 4339225438884388619ull, 5270240480337190624ull}},
+{{12234027172402377025ull, 5338920746489412418ull,
+ 5424031798605485774ull, 6587800600421488280ull}},
+{{6069161928648195473ull, 15897022969966541331ull,
+ 6780039748256857217ull, 8234750750526860350ull}},
+{{1487383196191428219ull, 3018110328588006476ull,
+ 18072582897942699473ull, 5146719219079287718ull}},
+{{1859228995239285273ull, 8384323929162395999ull,
+ 13367356585573598533ull, 6433399023849109648ull}},
+{{16159094299331270304ull, 15092090929880382902ull,
+ 16709195731966998166ull, 8041748779811387060ull}},
+{{5487747918654656036ull, 4820870812747851410ull,
+ 1219875295624598046ull, 5026092987382116913ull}},
+{{16083056935173095853ull, 15249460552789590070ull,
+ 6136530137958135461ull, 6282616234227646141ull}},
+{{10880449132111594008ull, 5226767635704823876ull,
+ 12282348690875057231ull, 7853270292784557676ull}},
+{{16023652744424522063ull, 10184258799956596778ull,
+ 16899839968651686577ull, 4908293932990348547ull}},
+{{10806193893675876771ull, 17342009518373133877ull,
+ 16513113942387220317ull, 6135367416237935684ull}},
+{{18119428385522233867ull, 7842453842684253634ull,
+ 2194648354274473781ull, 7669209270297419606ull}},
+{{15936328759378784071ull, 7207376660891352473ull,
+ 15206713276703709825ull, 4793255793935887253ull}},
+{{6085352893941316377ull, 13620906844541578496ull,
+ 5173333540597473569ull, 5991569742419859067ull}},
+{{7606691117426645471ull, 3191075500394809408ull,
+ 1854980907319454058ull, 7489462178024823834ull}},
+{{4754181948391653420ull, 6606108206174143784ull,
+ 5771049085502046690ull, 4680913861265514896ull}},
+{{5942727435489566774ull, 17481007294572455538ull,
+ 7213811356877558362ull, 5851142326581893620ull}},
+{{16651781331216734276ull, 12627887081360793614ull,
+ 9017264196096947953ull, 7313927908227367025ull}},
+{{11591354627166142037ull, 1949800796418828306ull,
+ 15883266263548572846ull, 9142409885284208781ull}},
+{{11856282660406226677ull, 15053683553043931403ull,
+ 12232884423931551980ull, 5714006178302630488ull}},
+{{10208667307080395442ull, 370360367595362638ull,
+ 15291105529914439976ull, 7142507722878288110ull}},
+{{3537462096995718495ull, 462950459494203298ull, 9890509875538274162ull,
+ 8928134653597860138ull}},
+{{6822599829049711963ull, 4901030055611264965ull,
+ 10793254690638809255ull, 5580084158498662586ull}},
+{{13139935804739527858ull, 1514601551086693302ull,
+ 4268196326443735761ull, 6975105198123328233ull}},
+{{7201547719069634014ull, 6504937957285754532ull,
+ 9946931426482057605ull, 8718881497654160291ull}},
+{{13724339361273297067ull, 6371429232517290534ull,
+ 3910989132337592051ull, 5449300936033850182ull}},
+{{7932052164736845526ull, 3352600522219225264ull,
+ 14112108452276765872ull, 6811626170042312727ull}},
+{{9915065205921056907ull, 4190750652774031580ull,
+ 13028449546918569436ull, 8514532712552890909ull}},
+{{15420287790555436375ull, 11842591194838545545ull,
+ 10448623976037799849ull, 5321582945345556818ull}},
+{{5440301682912131757ull, 968180938266018220ull, 3837407933192474004ull,
+ 6651978681681946023ull}},
+{{6800377103640164696ull, 1210226172832522775ull, 185073898063204601ull,
+ 8314973352102432529ull}},
+{{11167764717416184791ull, 12285606404088796494ull,
+ 11644886232357972635ull, 5196858345064020330ull}},
+{{4736333859915455181ull, 10745321986683607714ull,
+ 5332735753592689986ull, 6496072931330025413ull}},
+{{15143789361749094784ull, 4208280446499733834ull,
+ 11277605710418250387ull, 8120091164162531766ull}},
+{{14076554369520572144ull, 324332269848639694ull,
+ 2436817550584018588ull, 5075056977601582354ull}},
+{{8372320925045939372ull, 405415337310799618ull,
+ 12269393975084799043ull, 6343821222001977942ull}},
+{{1242029119452648407ull, 14341827226920663235ull,
+ 6113370432001222995ull, 7929776527502472428ull}},
+{{16917169264153762919ull, 6657799007611720569ull,
+ 13044228556855540180ull, 4956110329689045267ull}},
+{{7311403524910039936ull, 8322248759514650712ull,
+ 11693599677642037321ull, 6195137912111306584ull}},
+{{9139254406137549920ull, 15014496967820701294ull,
+ 14616999597052546651ull, 7743922390139133230ull}},
+{{1100347985408580796ull, 7078217595674244357ull,
+ 4523938729730453753ull, 4839951493836958269ull}},
+{{5987121000188113899ull, 13459458013020193350ull,
+ 10266609430590455095ull, 6049939367296197836ull}},
+{{16707273287089918182ull, 12212636497847853783ull,
+ 12833261788238068869ull, 7562424209120247295ull}},
+{{17359574832072280720ull, 9938740820368602566ull,
+ 14938317645289874899ull, 4726515130700154559ull}},
+{{12476096503235575092ull, 7811740007033365304ull,
+ 14061211038184955720ull, 5908143913375193199ull}},
+{{15595120629044468864ull, 9764675008791706630ull,
+ 12964827779303806746ull, 7385179891718991499ull}},
+{{5135264374725405136ull, 10714607898922204548ull,
+ 5797174352851185264ull, 4615737432324369687ull}},
+{{6419080468406756420ull, 13393259873652755685ull,
+ 2634781922636593676ull, 5769671790405462109ull}},
+{{12635536603935833429ull, 16741574842065944606ull,
+ 7905163421723129999ull, 7212089738006827636ull}},
+{{6571048718065015979ull, 16315282534155042854ull,
+ 9881454277153912499ull, 9015112172508534545ull}},
+{{17941963504072798699ull, 7891208574633207831ull,
+ 17705123969289665072ull, 5634445107817834090ull}},
+{{17815768361663610469ull, 9864010718291509789ull,
+ 12908032924757305532ull, 7043056384772292613ull}},
+{{8434652396797349375ull, 12330013397864387237ull,
+ 2299983100664468203ull, 8803820480965365767ull}},
+{{7577500757212037311ull, 5400415364451548071ull,
+ 8355018465556374483ull, 5502387800603353604ull}},
+{{4860189928087658735ull, 2138833187137047185ull,
+ 10443773081945468104ull, 6877984750754192005ull}},
+{{10686923428536961323ull, 2673541483921308981ull,
+ 17666402370859223034ull, 8597480938442740006ull}},
+{{8985170152049294779ull, 6282649445878206017ull,
+ 6429815463359626492ull, 5373425586526712504ull}},
+{{15843148708489006377ull, 7853311807347757521ull,
+ 8037269329199533115ull, 6716781983158390630ull}},
+{{5968877830329094260ull, 5204953740757308998ull, 823214624644640586ull,
+ 8395977478947988288ull}},
+{{17565606699237847624ull, 7864782106400706027ull,
+ 514509140402900366ull, 5247485924342492680ull}},
+{{17345322355619921626ull, 607605596146106726ull, 643136425503625458ull,
+ 6559357405428115850ull}},
+{{12458280907670126225ull, 9982879032037409216ull,
+ 10027292568734307630ull, 8199196756785144812ull}},
+{{7786425567293828891ull, 1627613376595992856ull,
+ 15490429892313718077ull, 5124497972990715507ull}},
+{{9733031959117286113ull, 6646202739172378974ull,
+ 14751351346964759692ull, 6405622466238394384ull}},
+{{2942917912041831834ull, 8307753423965473718ull,
+ 18439189183705949615ull, 8007028082797992980ull}},
+{{15674381750308308608ull, 12109874917619502929ull,
+ 2301121202961442701ull, 5004392551748745613ull}},
+{{5757919132603222048ull, 1302285591742214950ull,
+ 7488087522129191281ull, 6255490689685932016ull}},
+{{16420770952608803368ull, 6239543008105156591ull,
+ 9360109402661489101ull, 7819363362107415020ull}},
+{{17180510873021583961ull, 6205557389279416821ull,
+ 15073440413518206496ull, 4887102101317134387ull}},
+{{7640580535994816239ull, 7756946736599271027ull,
+ 14230114498470370216ull, 6108877626646417984ull}},
+{{4939039651566132395ull, 9696183420749088784ull,
+ 17787643123087962770ull, 7636097033308022480ull}},
+{{3086899782228832747ull, 10671800656395568394ull,
+ 11117276951929976731ull, 4772560645817514050ull}},
+{{13081996764640816742ull, 8728064802067072588ull,
+ 4673224153057695106ull, 5965700807271892563ull}},
+{{16352495955801020927ull, 1686708965729064927ull,
+ 1229844172894730979ull, 7457126009089865704ull}},
+{{17137839000016719936ull, 17195094168076523243ull,
+ 768652608059206861ull, 4660703755681166065ull}},
+{{16810612731593512015ull, 7658809654813490342ull,
+ 5572501778501396481ull, 5825879694601457581ull}},
+{{11789893877637114211ull, 14185198086944250832ull,
+ 11577313241554133505ull, 7282349618251821976ull}},
+{{14737367347046392764ull, 3896439553398149828ull,
+ 14471641551942666882ull, 9102937022814777470ull}},
+{{18434226628758771286ull, 7046960739301231546ull,
+ 4433089951536778897ull, 5689335639259235919ull}},
+{{13819411249093688299ull, 13420386942553927337ull,
+ 929676420993585717ull, 7111669549074044899ull}},
+{{3439206006084946661ull, 2940425622910245460ull,
+ 14997153581524145859ull, 8889586936342556123ull}},
+{{11372875790657867472ull, 17978667078814761076ull,
+ 7067377979238897209ull, 5555991835214097577ull}},
+{{14216094738322334339ull, 8638275793236287633ull,
+ 13445908492476009416ull, 6944989794017621971ull}},
+{{3935060367620754212ull, 10797844741545359542ull,
+ 12195699597167623866ull, 8681237242522027464ull}},
+{{16294470785045135095ull, 11360338981893237617ull,
+ 7622312248229764916ull, 5425773276576267165ull}},
+{{6533030426024255156ull, 14200423727366547022ull,
+ 14139576328714594049ull, 6782216595720333956ull}},
+{{17389660069385094753ull, 3915471603926020065ull,
+ 17674470410893242562ull, 8477770744650417445ull}},
+{{3951008515724602365ull, 7058855770881150445ull,
+ 13352387016021970553ull, 5298606715406510903ull}},
+{{9550446663083140860ull, 13435255732028825960ull,
+ 12078797751600075287ull, 6623258394258138629ull}},
+{{11938058328853926075ull, 12182383646608644546ull,
+ 1263439134217930397ull, 8279072992822673287ull}},
+{{12072972473961091701ull, 9919832788344096793ull,
+ 7707178486527288354ull, 5174420620514170804ull}},
+{{1256157537169200914ull, 3176418948575345184ull,
+ 9633973108159110443ull, 6468025775642713505ull}},
+{{1570196921461501143ull, 17805581741001345192ull,
+ 16654152403626275957ull, 8085032219553391881ull}},
+{{981373075913438214ull, 13434331597339534697ull,
+ 3491316224625340617ull, 5053145137220869926ull}},
+{{5838402363319185672ull, 2957856441392254659ull,
+ 13587517317636451580ull, 6316431421526087407ull}},
+{{2686316935721594185ull, 3697320551740318324ull,
+ 12372710628618176571ull, 7895539276907609259ull}},
+{{10902320121680772174ull, 4982335624005000ull, 5427101133672666405ull,
+ 4934712048067255787ull}},
+{{13627900152100965218ull, 4617913937957394154ull,
+ 2172190398663445102ull, 6168390060084069734ull}},
+{{7811503153271430714ull, 14995764459301518501ull,
+ 11938610035184082185ull, 7710487575105087167ull}},
+{{7188032480008338148ull, 2454823759422367207ull,
+ 14379160299631133222ull, 4819054734440679479ull}},
+{{4373354581583034781ull, 12291901736132734817ull,
+ 13362264356111528623ull, 6023818418050849349ull}},
+{{10078379245406181380ull, 10753191151738530617ull,
+ 2867772389857247067ull, 7529773022563561687ull}},
+{{17828202074447333123ull, 4414901460622887683ull,
+ 8709886771301861273ull, 4706108139102226054ull}},
+{{17673566574631778500ull, 10130312844205997508ull,
+ 1663986427272550783ull, 5882635173877782568ull}},
+{{3645214144580171508ull, 8051205036830108982ull,
+ 2079983034090688479ull, 7353293967347228210ull}},
+{{13779889717579990193ull, 5452320277610248323ull,
+ 11823350829468136407ull, 9191617459184035262ull}},
+{{6306588064273799919ull, 10325229201147487058ull,
+ 2777908249990197350ull, 5744760911990022039ull}},
+{{17106607117197025707ull, 3683164464579583014ull,
+ 17307443367769910400ull, 7180951139987527548ull}},
+{{12159886859641506325ull, 4603955580724478768ull,
+ 3187560136002836384ull, 8976188924984409436ull}},
+{{7599929287275941453ull, 2877472237952799230ull,
+ 11215597121856548548ull, 5610118078115255897ull}},
+{{276539572240151009ull, 3596840297440999038ull, 184438347038521973ull,
+ 7012647597644069872ull}},
+{{9569046502154964569ull, 9107736390228636701ull, 230547933798152466ull,
+ 8765809497055087340ull}},
+{{8286497073060546808ull, 10304021262320285842ull,
+ 9367464495478621099ull, 5478630935659429587ull}},
+{{1134749304470907701ull, 8268340559472969399ull,
+ 7097644600920888470ull, 6848288669574286984ull}},
+{{15253494685870798339ull, 1112053662486435940ull,
+ 8872055751151110588ull, 8560360836967858730ull}},
+{{310062141814473154ull, 9918405575908798271ull,
+ 10156720862896832021ull, 5350225523104911706ull}},
+{{14222635732550255154ull, 17009692988313385742ull,
+ 3472529041766264218ull, 6687781903881139633ull}},
+{{8554922628833043135ull, 12038744198536956370ull,
+ 8952347320635218177ull, 8359727379851424541ull}},
+{{9958512661448039863ull, 606686096444515875ull, 7901060084610705313ull,
+ 5224829612407140338ull}},
+{{7836454808382661925ull, 5370043638983032748ull, 652953068908605833ull,
+ 6531037015508925423ull}},
+{{9795568510478327406ull, 11324240567156178839ull,
+ 14651249391417921003ull, 8163796269386156778ull}},
+{{13039759346690036485ull, 4771807345258917822ull,
+ 13768716888063588531ull, 5102372668366347986ull}},
+{{7076327146507769798ull, 1353073163146259374ull,
+ 7987524073224709856ull, 6377965835457934983ull}},
+{{18068780969989488056ull, 1691341453932824217ull,
+ 5372719073103499416ull, 7972457294322418729ull}},
+{{4375459078602348179ull, 1057088408708015136ull,
+ 14887164466758156895ull, 4982785808951511705ull}},
+{{5469323848252935223ull, 15156418566167182632ull,
+ 4773897528165532406ull, 6228482261189389632ull}},
+{{6836654810316169029ull, 9722151170854202482ull,
+ 5967371910206915508ull, 7785602826486737040ull}},
+{{8884595274874993547ull, 15299716518638652359ull,
+ 3729607443879322192ull, 4866001766554210650ull}},
+{{6494058075166354030ull, 677901574588763833ull,
+ 13885381341703928549ull, 6082502208192763312ull}},
+{{12729258612385330442ull, 5459062986663342695ull,
+ 17356726677129910686ull, 7603127760240954140ull}},
+{{14873315660381913382ull, 17246972421946752896ull,
+ 1624582136351418370ull, 4751954850150596338ull}},
+{{144900501767840112ull, 12335343490578665313ull,
+ 11254099707294048771ull, 5939943562688245422ull}},
+{{4792811645637188043ull, 10807493344795943737ull,
+ 4844252597262785156ull, 7424929453360306778ull}},
+{{14524722324591712287ull, 15978055377352240643ull,
+ 7639343891716628626ull, 4640580908350191736ull}},
+{{13544216887312252455ull, 10749197184835524996ull,
+ 9549179864645785783ull, 5800726135437739670ull}},
+{{16930271109140315569ull, 8824810462617018341ull,
+ 2713102793952456421ull, 7250907669297174588ull}},
+{{7327780831143230749ull, 15642699096698660831ull,
+ 3391378492440570526ull, 9063634586621468235ull}},
+{{11497392047105601074ull, 5165000917009275115ull,
+ 18260512622271214243ull, 5664771616638417646ull}},
+{{9760054040454613439ull, 1844565127834205990ull,
+ 13602268740984241996ull, 7080964520798022058ull}},
+{{2976695513713490990ull, 2305706409792757488ull,
+ 7779463889375526687ull, 8851205650997527573ull}},
+{{1860434696070931869ull, 8358595533761555286ull,
+ 7168007940073398131ull, 5532003531873454733ull}},
+{{11548915406943440644ull, 5836558398774556203ull,
+ 13571695943519135568ull, 6915004414841818416ull}},
+{{9824458240251912901ull, 7295697998468195254ull,
+ 16964619929398919460ull, 8643755518552273020ull}},
+{{1528600381730057659ull, 13783183285897397842ull,
+ 1379515419019548854ull, 5402347199095170638ull}},
+{{11134122514017347882ull, 8005607070516971494ull,
+ 10947766310629211876ull, 6752933998868963297ull}},
+{{4694281105666909044ull, 10007008838146214368ull,
+ 18296393906713902749ull, 8441167498586204121ull}},
+{{2933925691041818153ull, 8560223533055077932ull,
+ 4517717164055107362ull, 5275729686616377576ull}},
+{{3667407113802272691ull, 1476907379464071607ull,
+ 5647146455068884203ull, 6594662108270471970ull}},
+{{18419316947535004576ull, 15681192279612253220ull,
+ 16282305105690881061ull, 8243327635338089962ull}},
+{{2288701055354602052ull, 12106588183971352215ull,
+ 14788126709484188567ull, 5152079772086306226ull}},
+{{16695934374475416277ull, 10521549211536802364ull,
+ 9261786350000459901ull, 6440099715107882783ull}},
+{{2423173894384718730ull, 17763622532848390860ull,
+ 6965546919073186972ull, 8050124643884853479ull}},
+{{10737855720845225014ull, 1878892046175468479ull,
+ 11270995852061823714ull, 5031327902428033424ull}},
+{{8810633632629143364ull, 11571987094574111407ull,
+ 14088744815077279642ull, 6289159878035041780ull}},
+{{6401606022359041301ull, 5241611831362863451ull,
+ 17610931018846599553ull, 7861449847543802225ull}},
+{{1695160754760706861ull, 14805222440670259417ull,
+ 4089302859138042864ull, 4913406154714876391ull}},
+{{6730636961878271480ull, 59783977128272655ull, 499942555495165677ull,
+ 6141757693393595489ull}},
+{{3801610183920451446ull, 4686415989837728723ull,
+ 5236614212796345000ull, 7677197116741994361ull}},
+{{70163355736588202ull, 2929009993648580452ull, 14802098929066185385ull,
+ 4798248197963746475ull}},
+{{87704194670735252ull, 8272948510488113469ull, 13890937642905343827ull,
+ 5997810247454683094ull}},
+{{4721316261765806969ull, 5729499619682753932ull,
+ 8140300016776903976ull, 7497262809318353868ull}},
+{{12174194700458405164ull, 3580937262301721207ull,
+ 14311059547340340793ull, 4685789255823971167ull}},
+{{10606057357145618551ull, 9087857596304539413ull,
+ 13277138415748038087ull, 5857236569779963959ull}},
+{{17869257714859411093ull, 6748135976953286362ull,
+ 11984737001257659705ull, 7321545712224954949ull}},
+{{13113200106719488058ull, 13046855989618995857ull,
+ 1145863196289910919ull, 9151932140281193687ull}},
+{{1278221039058598180ull, 15071814021152954267ull,
+ 7633693525322276180ull, 5719957587675746054ull}},
+{{15432834354105411437ull, 393023452731641217ull, 318744869798069418ull,
+ 7149946984594682568ull}},
+{{5455984887349600584ull, 9714651352769327330ull, 398431087247586772ull,
+ 8937433730743353210ull}},
+{{8021676573020888269ull, 15295029132335605389ull,
+ 4860705447957129636ull, 5585896081714595756ull}},
+{{14638781734703498241ull, 672042341709955120ull,
+ 6075881809946412046ull, 6982370102143244695ull}},
+{{18298477168379372801ull, 10063424963992219708ull,
+ 2983166244005627153ull, 8727962627679055869ull}},
+{{2213176193382332193ull, 17818855648563607078ull,
+ 4170321911717210922ull, 5454976642299409918ull}},
+{{11989842278582691049ull, 13050197523849733039ull,
+ 14436274426501289461ull, 6818720802874262397ull}},
+{{10375616829800975907ull, 2477688849530002587ull,
+ 4210284977844448115ull, 8523401003592827997ull}},
+{{4178917509411915990ull, 17689456595452109281ull,
+ 4937271120366474023ull, 5327125627245517498ull}},
+{{9835332905192282891ull, 17500134725887748697ull,
+ 15394960937312868337ull, 6658907034056896872ull}},
+{{16905852149917741518ull, 8040110352077522159ull,
+ 796957097931533806ull, 8323633792571121091ull}},
+{{17483686621339670305ull, 413382951621063445ull,
+ 16638999250703066293ull, 5202271120356950681ull}},
+{{8019550221392424169ull, 5128414707953717211ull,
+ 6963691008096669154ull, 6502838900446188352ull}},
+{{5412751758313142307ull, 15633890421796922322ull,
+ 8704613760120836442ull, 8128548625557735440ull}},
+{{7994655867373101846ull, 14382867532050464355ull,
+ 5440383600075522776ull, 5080342890973584650ull}},
+{{5381633815788989403ull, 17978584415063080444ull,
+ 16023851536949179278ull, 6350428613716980812ull}},
+{{6727042269736236754ull, 13249858481974074747ull,
+ 1583070347476922482ull, 7938035767146226016ull}},
+{{1898558409371454020ull, 12892847569661184621ull,
+ 989418967173076551ull, 4961272354466391260ull}},
+{{6984884030141705428ull, 11504373443649092872ull,
+ 1236773708966345689ull, 6201590443082989075ull}},
+{{8731105037677131785ull, 545408749279202378ull,
+ 15381025191490095824ull, 7751988053853736343ull}},
+{{10068626666975595270ull, 340880468299501486ull,
+ 16530669772322391746ull, 4844992533658585214ull}},
+{{3362411296864718279ull, 9649472622229152666ull,
+ 11439965178548213874ull, 6056240667073231518ull}},
+{{13426386157935673657ull, 2838468740931665024ull,
+ 5076584436330491535ull, 7570300833841539398ull}},
+{{8391491348709796036ull, 8691571990723372496ull,
+ 17007923327988720921ull, 4731438021150962123ull}},
+{{10489364185887245045ull, 15476151006831603524ull,
+ 16648218141558513247ull, 5914297526438702654ull}},
+{{13111705232359056306ull, 14733502740112116501ull,
+ 11586900640093365751ull, 7392871908048378318ull}},
+{{10500658779438104143ull, 16125968240211154669ull,
+ 2630126881630965690ull, 4620544942530236449ull}},
+{{17737509492725018083ull, 10934088263409167528ull,
+ 7899344620466095017ull, 5775681178162795561ull}},
+{{3725142792196720988ull, 18279296347688847315ull,
+ 14485866794010006675ull, 7219601472703494451ull}},
+{{44742471818513330ull, 18237434416183671240ull,
+ 13495647474085120440ull, 9024501840879368064ull}},
+{{27964044886570832ull, 11398396510114794525ull, 8434779671303200275ull,
+ 5640313650549605040ull}},
+{{4646641074535601443ull, 9636309619216105252ull,
+ 10543474589129000344ull, 7050392063187006300ull}},
+{{5808301343169501804ull, 12045387024020131565ull,
+ 13179343236411250430ull, 8812990078983757875ull}},
+{{5936031348694632580ull, 2916680871585194324ull,
+ 5931246513543337567ull, 5508118799364848672ull}},
+{{7420039185868290725ull, 17480909144763656617ull,
+ 7414058141929171958ull, 6885148499206060840ull}},
+{{13886735000762751310ull, 12627764394099794963ull,
+ 9267572677411464948ull, 8606435624007576050ull}},
+{{6373366366263025617ull, 17115724783167147660ull,
+ 10403918941809553496ull, 5379022265004735031ull}},
+{{7966707957828782021ull, 2947911905249382959ull,
+ 8393212658834553967ull, 6723777831255918789ull}},
+{{5346698928858589622ull, 17519947936843892411ull,
+ 15103201841970580362ull, 8404722289069898486ull}},
+{{1035843821322924562ull, 15561653478954820661ull,
+ 4827815132804224822ull, 5252951430668686554ull}},
+{{5906490795081043606ull, 10228694811838750018ull,
+ 15258140952860056836ull, 6566189288335858192ull}},
+{{16606485530706080316ull, 12785868514798437522ull,
+ 625932117365519429ull, 8207736610419822741ull}},
+{{14990739475118688101ull, 10297010830962717403ull,
+ 2697050582567143595ull, 5129835381512389213ull}},
+{{14126738325470972223ull, 8259577520276008850ull,
+ 7982999246636317398ull, 6412294226890486516ull}},
+{{8435050869983939470ull, 1101099863490235255ull,
+ 9978749058295396748ull, 8015367783613108145ull}},
+{{12189435821381044025ull, 9911559451536172842ull,
+ 17765933207503092727ull, 5009604864758192590ull}},
+{{6013422739871529223ull, 7777763295992828149ull,
+ 12984044472524090101ull, 6262006080947740738ull}},
+{{12128464443266799433ull, 14333890138418423090ull,
+ 7006683553800336818ull, 7827507601184675923ull}},
+{{12191976295469137550ull, 13570367354938902335ull,
+ 2073334211911516559ull, 4892192250740422452ull}},
+{{10628284350909034033ull, 12351273175246240015ull,
+ 2591667764889395699ull, 6115240313425528065ull}},
+{{8673669420208904637ull, 10827405450630412115ull,
+ 7851270724539132528ull, 7644050391781910081ull}},
+{{3115200378416871446ull, 6767128406644007572ull,
+ 16436259248905427590ull, 4777531494863693800ull}},
+{{3894000473021089308ull, 17682282545159785273ull,
+ 2098579987422232871ull, 5971914368579617251ull}},
+{{9479186609703749539ull, 17491167163022343687ull,
+ 16458283039559954801ull, 7464892960724521563ull}},
+{{12842020658705925318ull, 4014450449247882948ull,
+ 7980583890511277799ull, 4665558100452825977ull}},
+{{16052525823382406647ull, 406377043132465781ull,
+ 14587415881566485153ull, 5831947625566032471ull}},
+{{6230599223945844597ull, 5119657322342970131ull,
+ 13622583833530718537ull, 7289934531957540589ull}},
+{{3176563011504917842ull, 11011257671356100568ull,
+ 3193171736631234459ull, 9112418164946925737ull}},
+{{1985351882190573652ull, 4576193035383868903ull,
+ 13524947381462991297ull, 5695261353091828585ull}},
+{{16316747908020380776ull, 10331927312657224032ull,
+ 3071126171546575409ull, 7119076691364785732ull}},
+{{1949190811315924354ull, 17526595159248917945ull,
+ 3838907714433219261ull, 8898845864205982165ull}},
+{{12747459303140922482ull, 13259964983744267667ull,
+ 4705160330734455990ull, 5561778665128738853ull}},
+{{11322638110498765198ull, 7351584192825558776ull,
+ 10493136431845457892ull, 6952223331410923566ull}},
+{{14153297638123456497ull, 9189480241031948470ull,
+ 3893048502952046557ull, 8690279164263654458ull}},
+{{4234125005399772407ull, 8049268159858661746ull,
+ 7044841332772417002ull, 5431424477664784036ull}},
+{{14516028293604491317ull, 838213162968551374ull,
+ 8806051665965521253ull, 6789280597080980045ull}},
+{{8921663330150838338ull, 5659452472138077122ull,
+ 15619250600884289470ull, 8486600746351225056ull}},
+{{10187725599771661865ull, 17372215850368461913ull,
+ 9762031625552680918ull, 5304125466469515660ull}},
+{{17346343018141965235ull, 12491897776105801583ull,
+ 12202539531940851148ull, 6630156833086894575ull}},
+{{17071242754250068640ull, 15614872220132251979ull,
+ 10641488396498676031ull, 8287696041358618219ull}},
+{{8363683712192598948ull, 16676824165223739343ull,
+ 4345087238597978567ull, 5179810025849136387ull}},
+{{5842918621813360781ull, 16234344188102286275ull,
+ 819673029820085305ull, 6474762532311420484ull}},
+{{2691962258839313072ull, 6457872179845694132ull,
+ 1024591287275106632ull, 8093453165389275605ull}},
+{{10905848448629346478ull, 4036170112403558832ull,
+ 2946212563760635597ull, 5058408228368297253ull}},
+{{13632310560786683098ull, 9656898658931836444ull,
+ 8294451723128182400ull, 6323010285460371566ull}},
+{{17040388200983353872ull, 12071123323664795555ull,
+ 1144692617055452192ull, 7903762856825464458ull}},
+{{8344399616400902218ull, 7544452077290497222ull,
+ 5327118904087045524ull, 4939851785515915286ull}},
+{{1207127483646351965ull, 9430565096613121528ull,
+ 15882270666963582713ull, 6174814731894894107ull}},
+{{1508909354557939956ull, 16399892389193789814ull,
+ 15241152315277090487ull, 7718518414868617634ull}},
+{{14778126401880876185ull, 17167461770887200489ull,
+ 14137406215475569458ull, 4824074009292886021ull}},
+{{4637599947068931519ull, 12235955176754224804ull,
+ 3836699714062298111ull, 6030092511616107527ull}},
+{{5796999933836164398ull, 10683257952515393101ull,
+ 184188624150484735ull, 7537615639520134409ull}},
+{{5928967967861296701ull, 13594565247963202544ull,
+ 11644332936162522719ull, 4711009774700084005ull}},
+{{7411209959826620876ull, 12381520541526615276ull,
+ 720358114920989687ull, 5888762218375105007ull}},
+{{9264012449783276095ull, 10865214658480881191ull,
+ 14735505698933400821ull, 7360952772968881258ull}},
+{{6968329543801707215ull, 18193204341528489393ull,
+ 9196010086811975218ull, 9201190966211101573ull}},
+{{15884421010944536769ull, 15982438731882693774ull,
+ 8053349313471178463ull, 5750744353881938483ull}},
+{{10632154226825895154ull, 15366362396425979314ull,
+ 5455000623411585175ull, 7188430442352423104ull}},
+{{4066820746677593134ull, 14596266977105086239ull,
+ 6818750779264481469ull, 8985538052940528880ull}},
+{{9459291994314577565ull, 11428509869904372851ull,
+ 4261719237040300918ull, 5615961283087830550ull}},
+{{7212428974465834052ull, 5062265300525690256ull,
+ 14550521083155151956ull, 7019951603859788187ull}},
+{{9015536218082292565ull, 6327831625657112820ull,
+ 13576465335516552041ull, 8774939504824735234ull}},
+{{14858082173156208661ull, 15484109812104165272ull,
+ 13096976853125232929ull, 5484337190515459521ull}},
+{{125858642735709210ull, 5520079209848042879ull, 2536163011124377450ull,
+ 6855421488144324402ull}},
+{{13992381358701800225ull, 16123471049164829406ull,
+ 12393575800760247620ull, 8569276860180405502ull}},
+{{4133552330761237237ull, 853797368873242571ull, 3134298857047766859ull,
+ 5355798037612753439ull}},
+{{555254395024158642ull, 14902304766373716926ull,
+ 17752931626591872285ull, 6694747547015941798ull}},
+{{9917440030634974110ull, 4792822902684982445ull,
+ 12967792496385064549ull, 8368434433769927248ull}},
+{{8504243028360552771ull, 5301357323391807980ull,
+ 8104870310240665343ull, 5230271521106204530ull}},
+{{10630303785450690964ull, 2015010635812372071ull,
+ 907715850946055871ull, 6537839401382755663ull}},
+{{8676193713385975800ull, 16353821350047628801ull,
+ 14969702868964733550ull, 8172299251728444578ull}},
+{{16951836116934704635ull, 5609452325352380096ull,
+ 13967750311530346373ull, 5107687032330277861ull}},
+{{2743051072458829178ull, 11623501425117863025ull,
+ 3624629834130769254ull, 6384608790412847327ull}},
+{{8040499859000924377ull, 5306004744542552973ull,
+ 18365845347945625280ull, 7980760988016059158ull}},
+{{7331155421089271688ull, 3316252965339095608ull,
+ 6866967324038627896ull, 4987975617510036974ull}},
+{{9163944276361589609ull, 4145316206673869510ull,
+ 17807081191903060678ull, 6234969521887546217ull}},
+{{2231558308597211203ull, 14405017295197112696ull,
+ 8423793434596662135ull, 7793711902359432772ull}},
+{{1394723942873257002ull, 15920664837139277291ull,
+ 14488242933477689642ull, 4871069938974645482ull}},
+{{15578462983873734965ull, 10677459009569320805ull,
+ 8886931629992336245ull, 6088837423718306853ull}},
+{{5638020674560004994ull, 17958509780389038911ull,
+ 15720350555917808210ull, 7611046779647883566ull}},
+{{10441291949241084977ull, 15835754631170537223ull,
+ 5213533079021242227ull, 4756904237279927229ull}},
+{{8439928918123968318ull, 15183007270535783625ull,
+ 11128602367203940688ull, 5946130296599909036ull}},
+{{15161597166082348301ull, 532015014460177915ull,
+ 13910752959004925861ull, 7432662870749886295ull}},
+{{7170155219587773736ull, 2638352393251305149ull,
+ 15611749627019160519ull, 4645414294218678934ull}},
+{{13574380042912105074ull, 17132998546846295148ull,
+ 10291314996919174840ull, 5806767867773348668ull}},
+{{16967975053640131343ull, 2969504109848317319ull,
+ 12864143746148968551ull, 7258459834716685835ull}},
+{{16598282798622776274ull, 17546938192592560361ull,
+ 11468493664258822784ull, 9073074793395857294ull}},
+{{3456397721498153315ull, 10966836370370350226ull,
+ 2556122521734376336ull, 5670671745872410809ull}},
+{{13543869188727467452ull, 13708545462962937782ull,
+ 7806839170595358324ull, 7088339682340513511ull}},
+{{7706464449054558507ull, 17135681828703672228ull,
+ 5146862944816810001ull, 8860424602925641889ull}},
+{{14039912317513874875ull, 3792272115298713286ull,
+ 14746004386578976011ull, 5537765376828526180ull}},
+{{8326518360037567786ull, 128654125696003704ull,
+ 18432505483223720014ull, 6922206721035657725ull}},
+{{10408147950046959732ull, 9384189693974780438ull,
+ 9205573798747486305ull, 8652758401294572157ull}},
+{{1893406450351961929ull, 17394333604802707534ull,
+ 8059326633430872892ull, 5407974000809107598ull}},
+{{11590130099794728219ull, 3296172932293832801ull,
+ 850786254933815308ull, 6759967501011384498ull}},
+{{652604569461246561ull, 4120216165367291002ull,
+ 10286854855522044943ull, 8449959376264230622ull}},
+{{5019563874340667005ull, 9492664130995638732ull,
+ 1817598266273890185ull, 5281224610165144139ull}},
+{{6274454842925833756ull, 16477516182171936319ull,
+ 16107055888124526443ull, 6601530762706430173ull}},
+{{3231382535229904291ull, 15985209209287532495ull,
+ 6298761804873494342ull, 8251913453383037717ull}},
+{{8937143112159772038ull, 5379069737377319905ull,
+ 6242569137259627916ull, 5157445908364398573ull}},
+{{15783114908627102952ull, 6723837171721649881ull,
+ 12414897440001922799ull, 6446807385455498216ull}},
+{{5893835580501714977ull, 3793110446224674448ull,
+ 15518621800002403499ull, 8058509231819372770ull}},
+{{3683647237813571861ull, 64851019676727578ull, 14310824643428890091ull,
+ 5036568269887107981ull}},
+{{13827931084121740634ull, 13916121829878073184ull,
+ 4053472749003948901ull, 6295710337358884977ull}},
+{{17284913855152175793ull, 3560094232065427768ull,
+ 9678526954682324031ull, 7869637921698606221ull}},
+{{10803071159470109871ull, 9142587922681974211ull,
+ 8354922355890146471ull, 4918523701061628888ull}},
+{{8892152930910249434ull, 6816548884925079860ull,
+ 10443652944862683089ull, 6148154626327036110ull}},
+{{11115191163637811792ull, 13132372124583737729ull,
+ 3831194144223578053ull, 7685193282908795138ull}},
+{{29465449632550514ull, 10513575587078530033ull, 7006182358567124187ull,
+ 4803245801817996961ull}},
+{{4648517830468076047ull, 8530283465420774637ull,
+ 13369413966636293138ull, 6004057252272496201ull}},
+{{10422333306512482963ull, 1439482294921192488ull,
+ 2876709403013202711ull, 7505071565340620252ull}},
+{{6513958316570301852ull, 7817205461966827161ull,
+ 11021315413738027502ull, 4690669728337887657ull}},
+{{12754133914140265219ull, 548134790603758143ull,
+ 18388330285599922282ull, 5863337160422359571ull}},
+{{11330981374247943619ull, 9908540525109473487ull,
+ 18373726838572514948ull, 7329171450527949464ull}},
+{{9552040699382541620ull, 12385675656386841859ull,
+ 4520414474506092069ull, 9161464313159936831ull}},
+{{3664182427900394561ull, 10046890294455470114ull,
+ 9742788074207389399ull, 5725915195724960519ull}},
+{{13803600071730269009ull, 7946926849641949738ull,
+ 7566799074331848845ull, 7157393994656200649ull}},
+{{8031128052808060453ull, 14545344580479825077ull,
+ 14070184861342198960ull, 8946742493320250811ull}},
+{{7325298042218731735ull, 9090840362799890673ull,
+ 6488022529125180398ull, 5591714058325156757ull}},
+{{13768308571200802573ull, 2140178416645087533ull,
+ 12721714179833863402ull, 6989642572906445946ull}},
+{{3375327658718839504ull, 11898595057661135225ull,
+ 6678770687937553444ull, 8737053216133057433ull}},
+{{13638794832767744450ull, 16659993947892985323ull,
+ 15703446726029440662ull, 5460658260083160895ull}},
+{{12436807522532292658ull, 11601620398011455846ull,
+ 15017622389109412924ull, 6825822825103951119ull}},
+{{6322637366310590015ull, 14502025497514319808ull,
+ 14160341967959378251ull, 8532278531379938899ull}},
+{{3951648353944118760ull, 6757922926732755928ull,
+ 6544370720760917455ull, 5332674082112461812ull}},
+{{4939560442430148449ull, 3835717639988557006ull,
+ 8180463400951146819ull, 6665842602640577265ull}},
+{{15397822589892461369ull, 182961031558308353ull,
+ 14837265269616321428ull, 8332303253300721581ull}},
+{{2706110091041706500ull, 9337722681578718529ull,
+ 11579133802723894844ull, 5207689533312950988ull}},
+{{7994323632229521029ull, 11672153351973398161ull,
+ 14473917253404868555ull, 6509611916641188735ull}},
+{{14604590558714289190ull, 9978505671539359797ull,
+ 13480710548328697790ull, 8137014895801485919ull}},
+{{11433712108410124696ull, 1624880026284711969ull,
+ 15342973120346517975ull, 5085634309875928699ull}},
+{{457082080230492158ull, 15866158088138053674ull,
+ 14567030382005759564ull, 6357042887344910874ull}},
+{{9794724637142891005ull, 1385953536463015476ull,
+ 8985415940652423648ull, 7946303609181138593ull}},
+{{15345074935069082686ull, 866220960289384672ull,
+ 17145100008976234540ull, 4966439755738211620ull}},
+{{734599595126801742ull, 1082776200361730841ull, 2984630937510741559ull,
+ 6208049694672764526ull}},
+{{5529935512335890081ull, 15188528305734327263ull,
+ 12954160708743202756ull, 7760062118340955657ull}},
+{{10373738722851013157ull, 269458154229178731ull,
+ 1178821415323419867ull, 4850038823963097286ull}},
+{{8355487385136378542ull, 14171880748068637126ull,
+ 10696898806009050641ull, 6062548529953871607ull}},
+{{1220987194565697370ull, 3879792879803632696ull,
+ 8759437489083925398ull, 7578185662442339509ull}},
+{{763116996603560856ull, 16259928605159434147ull,
+ 7780491439891147325ull, 4736366039026462193ull}},
+{{14788954301036614782ull, 6489852701167128971ull,
+ 14337300318291322061ull, 5920457548783077741ull}},
+{{13874506857868380573ull, 12724001894886299118ull,
+ 4086567342581988864ull, 7400571935978847177ull}},
+{{4059880767740349955ull, 7952501184303936949ull,
+ 14083319635182212800ull, 4625357459986779485ull}},
+{{9686536978102825347ull, 9940626480379921186ull,
+ 3769091488695602288ull, 5781696824983474357ull}},
+{{2884799185773755876ull, 12425783100474901483ull,
+ 9323050379296890764ull, 7227121031229342946ull}},
+{{17441057037499358557ull, 15532228875593626853ull,
+ 2430440937266337647ull, 9033901289036678683ull}},
+{{13206503657650793050ull, 16625172074887098639ull,
+ 17659926650287318693ull, 5646188305647924176ull}},
+{{11896443553636103408ull, 6946407038326709587ull,
+ 3628164239149596751ull, 7057735382059905221ull}},
+{{10258868423617741356ull, 4071322779480999080ull,
+ 9146891317364383843ull, 8822169227574881526ull}},
+{{6411792764761088348ull, 238733727961930473ull, 1105121054925351998ull,
+ 5513855767234300954ull}},
+{{12626426974378748339ull, 9521789196807188899ull,
+ 10604773355511465805ull, 6892319709042876192ull}},
+{{11171347699546047519ull, 16513922514436374028ull,
+ 13255966694389332256ull, 8615399636303595240ull}},
+{{16205464349071055508ull, 10321201571522733767ull,
+ 8284979183993332660ull, 5384624772689747025ull}},
+{{15645144417911431481ull, 12901501964403417209ull,
+ 14967909998419053729ull, 6730780965862183781ull}},
+{{5721372467107125639ull, 2291819400222107800ull,
+ 4874829442741653450ull, 8413476207327729727ull}},
+{{3575857791941953524ull, 6044073143566205279ull,
+ 9964297429354615262ull, 5258422629579831079ull}},
+{{18304880295209605617ull, 16778463466312532406ull,
+ 7843685768265881173ull, 6573028286974788849ull}},
+{{13657728332157231214ull, 7138021277608501796ull,
+ 14416293228759739371ull, 8216285358718486061ull}},
+{{17759452244453045317ull, 2155420289291619670ull,
+ 11316026277188531059ull, 5135178349199053788ull}},
+{{12975943268711530838ull, 16529333416896688300ull,
+ 14145032846485663823ull, 6418972936498817235ull}},
+{{16219929085889413547ull, 16049980752693472471ull,
+ 13069605039679691875ull, 8023716170623521544ull}},
+{{17054984706321965323ull, 7725394961219726342ull,
+ 8168503149799807422ull, 5014822606639700965ull}},
+{{12095358846047680846ull, 433371664669882120ull,
+ 14822314955677147182ull, 6268528258299626206ull}},
+{{15119198557559601057ull, 9765086617692128458ull,
+ 9304521657741658169ull, 7835660322874532758ull}},
+{{14061185116902138565ull, 17632394182126050046ull,
+ 1203640017661148451ull, 4897287701796582974ull}},
+{{8353109359272897398ull, 17428806709230174654ull,
+ 10727922058931211372ull, 6121609627245728717ull}},
+{{1218014662236345939ull, 3339264312828166702ull,
+ 18021588592091402120ull, 7652012034057160896ull}},
+{{14596317219179879924ull, 2087040195517604188ull,
+ 11263492870057126325ull, 4782507521285725560ull}},
+{{18245396523974849905ull, 7220486262824393139ull,
+ 14079366087571407906ull, 5978134401607156950ull}},
+{{18195059636541174477ull, 18248979865385267232ull,
+ 8375835572609484074ull, 7472668002008946188ull}},
+{{11371912272838234049ull, 16017298434293179924ull,
+ 14458269269735703354ull, 4670417501255591367ull}},
+{{14214890341047792561ull, 10798251006011699097ull,
+ 13461150568742241289ull, 5838021876569489209ull}},
+{{3933554871027576989ull, 18109499775942011776ull,
+ 2991380155645637899ull, 7297527345711861512ull}},
+{{4916943588784471236ull, 18025188701500126816ull,
+ 3739225194557047374ull, 9121909182139826890ull}},
+{{3073089742990294522ull, 6654056920010191356ull,
+ 6948701765025542513ull, 5701193238837391806ull}},
+{{3841362178737868153ull, 12929257168440127099ull,
+ 17909249243136703949ull, 7126491548546739757ull}},
+{{190016704994947287ull, 2326513405267995162ull, 8551503498638716225ull,
+ 8908114435683424697ull}},
+{{4730446459049229959ull, 12983285924360966736ull,
+ 16873904732717667400ull, 5567571522302140435ull}},
+{{5913058073811537448ull, 16229107405451208420ull,
+ 16480694897469696346ull, 6959464402877675544ull}},
+{{7391322592264421810ull, 11063012219959234717ull,
+ 2154124548127568817ull, 8699330503597094431ull}},
+{{6925419629378957583ull, 18443597683542991458ull,
+ 8263856870220812366ull, 5437081564748184019ull}},
+{{17880146573578472787ull, 13831125067573963514ull,
+ 5718135069348627554ull, 6796351955935230024ull}},
+{{13126811180118315176ull, 8065534297612678585ull,
+ 7147668836685784443ull, 8495439944919037530ull}},
+{{1286727959932865129ull, 2735115926794230164ull,
+ 9078979041356003181ull, 5309649965574398456ull}},
+{{1608409949916081411ull, 8030580926920175609ull,
+ 11348723801695003976ull, 6637062456967998070ull}},
+{{6622198455822489668ull, 10038226158650219511ull,
+ 4962532715263979162ull, 8296328071209997588ull}},
+{{11056403062530137899ull, 10885577367583775098ull,
+ 12324954983894762784ull, 5185205044506248492ull}},
+{{4597131791307896565ull, 13606971709479718873ull,
+ 15406193729868453480ull, 6481506305632810615ull}},
+{{10358100757562258610ull, 17008714636849648591ull,
+ 14646056143908178946ull, 8101882882041013269ull}},
+{{13391342001117493488ull, 15242132666458418273ull,
+ 11459628099156305793ull, 5063676801275633293ull}},
+{{2904119446114703147ull, 5217607777790859130ull, 489477068663218530ull,
+ 6329596001594541617ull}},
+{{12853521344498154742ull, 15745381759093349720ull,
+ 5223532354256411066ull, 7911995001993177021ull}},
+{{8033450840311346714ull, 14452549617860731479ull,
+ 5570550730623950868ull, 4944996876245735638ull}},
+{{5430127531961795488ull, 18065687022325914349ull,
+ 16186560450134714393ull, 6181246095307169547ull}},
+{{11399345433379632264ull, 8747050722625229224ull,
+ 15621514544241005088ull, 7726557619133961934ull}},
+{{7124590895862270165ull, 5466906701640768265ull,
+ 5151760571723240276ull, 4829098511958726209ull}},
+{{13517424638255225611ull, 6833633377050960331ull,
+ 11051386733081438249ull, 6036373139948407761ull}},
+{{12285094779391644109ull, 13153727739741088318ull,
+ 18425919434779185715ull, 7545466424935509701ull}},
+{{3066498218692389664ull, 5915236828124486247ull,
+ 13822042655950685024ull, 4715916515584693563ull}},
+{{17668180828647650792ull, 7394046035155607808ull,
+ 12665867301510968376ull, 5894895644480866954ull}},
+{{3638481962100011874ull, 9242557543944509761ull,
+ 6608962090033934662ull, 7368619555601083693ull}},
+{{9159788471052402747ull, 2329824893075861393ull,
+ 12872888630969806232ull, 9210774444501354616ull}},
+{{17254082840476221477ull, 1456140558172413370ull,
+ 8045555394356128895ull, 5756734027813346635ull}},
+{{12344231513740501038ull, 15655233752997680425ull,
+ 5445258224517773214ull, 7195917534766683294ull}},
+{{1595231336893462585ull, 10345670154392324724ull,
+ 16029944817501992326ull, 8994896918458354117ull}},
+{{10220391622413189924ull, 1854357828067815048ull,
+ 12324558520152439156ull, 5621810574036471323ull}},
+{{12775489528016487405ull, 2317947285084768810ull,
+ 10794012131763161041ull, 7027263217545589154ull}},
+{{6745989873165833448ull, 7509120124783348917ull,
+ 4269143127849175493ull, 8784079021931986443ull}},
+{{6522086679942339857ull, 6999043087203287025ull, 362371445692040731ull,
+ 5490049388707491527ull}},
+{{12764294368355312725ull, 4137117840576720877ull,
+ 14288022362397214626ull, 6862561735884364408ull}},
+{{2120309905161977195ull, 14394769337575676905ull,
+ 17860027952996518282ull, 8578202169855455510ull}},
+{{12854408736794705507ull, 13608416854412185969ull,
+ 6550831452195436022ull, 5361376356159659694ull}},
+{{2232952865711218171ull, 7787149031160456654ull,
+ 17411911352099070836ull, 6701720445199574617ull}},
+{{12014563118993798522ull, 9733936288950570817ull,
+ 7929831134841674833ull, 8377150556499468272ull}},
+{{591572921730042221ull, 17612925226662576521ull,
+ 4956144459276046770ull, 5235719097812167670ull}},
+{{5351152170589940680ull, 12792784496473444843ull,
+ 15418552610949834271ull, 6544648872265209587ull}},
+{{2077254194810037945ull, 11379294602164418150ull,
+ 14661504745259904935ull, 8180811090331511984ull}},
+{{15133341927038437428ull, 14029588153993843199ull,
+ 9163440465787440584ull, 5113006931457194990ull}},
+{{14304991390370658881ull, 17536985192492303999ull,
+ 2230928545379524922ull, 6391258664321493738ull}},
+{{13269553219535935697ull, 12697859453760604191ull,
+ 12012032718579181961ull, 7989073330401867172ull}},
+{{15210999789851041667ull, 1018633130959295763ull,
+ 16730892485966764534ull, 4993170831501166982ull}},
+{{14402063718886414179ull, 10496663450553895512ull,
+ 11690243570603679859ull, 6241463539376458728ull}},
+{{18002579648608017724ull, 8509143294764981486ull,
+ 14612804463254599824ull, 7801829424220573410ull}},
+{{6639926261952623174ull, 5318214559228113429ull,
+ 13744688807961512794ull, 4876143390137858381ull}},
+{{12911593845868166871ull, 15871140235889917594ull,
+ 3345802954669727280ull, 6095179237672322977ull}},
+{{6916120270480432781ull, 1392181221152845377ull,
+ 8793939711764547005ull, 7618974047090403721ull}},
+{{15851790215118740248ull, 3175956272434222312ull,
+ 17025427365921311638ull, 4761858779431502325ull}},
+{{1367993695188873694ull, 13193317377397553699ull,
+ 7446726152119475835ull, 5952323474289377907ull}},
+{{15545050174268255829ull, 11879960703319554219ull,
+ 4696721671721956890ull, 7440404342861722384ull}},
+{{7409813349703965942ull, 12036661458002109291ull,
+ 2935451044826223056ull, 4650252714288576490ull}},
+{{4650580668702569523ull, 15045826822502636614ull,
+ 12892685842887554628ull, 5812815892860720612ull}},
+{{15036597872732987711ull, 360539454418744151ull,
+ 16115857303609443286ull, 7266019866075900765ull}},
+{{14184061322488846735ull, 9674046354878205997ull,
+ 6309763574229640395ull, 9082524832594875957ull}},
+{{11170881335769223162ull, 3740435962585184796ull,
+ 6249445243107219199ull, 5676578020371797473ull}},
+{{13963601669711528952ull, 63858934804093091ull,
+ 12423492572311411903ull, 7095722525464746841ull}},
+{{12842816068712023286ull, 13914881723787280076ull,
+ 1694307660107101166ull, 8869653156830933552ull}},
+{{17250132079799790362ull, 4085115058939662143ull,
+ 1058942287566938229ull, 5543533223019333470ull}},
+{{16950979081322350048ull, 9718079842101965583ull,
+ 10547049896313448594ull, 6929416528774166837ull}},
+{{16577037833225549656ull, 2924227765772681171ull,
+ 17795498388819198647ull, 8661770660967708546ull}},
+{{8054805636552274583ull, 8745171381249007588ull,
+ 15733872511439387058ull, 5413606663104817841ull}},
+{{10068507045690343229ull, 1708092189706483677ull,
+ 5832282584017070111ull, 6767008328881022302ull}},
+{{17197319825540316940ull, 15970173292415268308ull,
+ 16513725266876113446ull, 8458760411101277877ull}},
+{{1524952854107922280ull, 5369672289332154789ull,
+ 12626921301011264856ull, 5286725256938298673ull}},
+{{6517877086062290754ull, 6712090361665193486ull,
+ 1948593570981917358ull, 6608406571172873342ull}},
+{{17370718394432639250ull, 17613484988936267665ull,
+ 11659114000582172505ull, 8260508213966091677ull}},
+{{3939169968879317675ull, 4090899090444085435ull,
+ 9592789259577551768ull, 5162817633728807298ull}},
+{{312276442671759190ull, 5113623863055106794ull, 2767614537617163902ull,
+ 6453522042161009123ull}},
+{{9613717590194474795ull, 15615401865673659300ull,
+ 17294576227303618589ull, 8066902552701261403ull}},
+{{15231945530726322555ull, 12065469175259731014ull,
+ 8503267132851067666ull, 5041814095438288377ull}},
+{{9816559876553127386ull, 5858464432219887960ull,
+ 15240769934491222487ull, 6302267619297860471ull}},
+{{12270699845691409232ull, 2711394521847472046ull,
+ 14439276399686640205ull, 7877834524122325589ull}},
+{{3057501385129742866ull, 4000464585368363981ull,
+ 11330390759017844080ull, 4923646577576453493ull}},
+{{8433562749839566487ull, 5000580731710454976ull, 327930393490141388ull,
+ 6154558221970566867ull}},
+{{10541953437299458108ull, 6250725914638068720ull,
+ 14244971047144840447ull, 7693197777463208583ull}},
+{{6588720898312161318ull, 10824232724289874806ull,
+ 15820635932106607135ull, 4808248610914505364ull}},
+{{17459273159744977455ull, 8918604886934955603ull,
+ 1329050841423707303ull, 6010310763643131706ull}},
+{{17212405431253833915ull, 6536570090241306600ull,
+ 10884685588634409937ull, 7512888454553914632ull}},
+{{10757753394533646197ull, 15614571352469286385ull,
+ 6802928492896506210ull, 4695555284096196645ull}},
+{{18058877761594445650ull, 10294842153731832173ull,
+ 13115346634548020667ull, 5869444105120245806ull}},
+{{8738539146710893351ull, 8256866673737402313ull,
+ 7170811256330250026ull, 7336805131400307258ull}},
+{{15534859951816004592ull, 1097711305316977083ull,
+ 18186886107267588341ull, 9171006414250384072ull}},
+{{7403444460671308918ull, 2991912575036804629ull,
+ 11366803817042242713ull, 5731879008906490045ull}},
+{{13865991594266524052ull, 8351576737223393690ull,
+ 373446716020639679ull, 7164848761133112557ull}},
+{{8109117455978379257ull, 5827784903101854209ull,
+ 5078494413453187503ull, 8956060951416390696ull}},
+{{16597413456054956796ull, 10559894592079740736ull,
+ 3174059008408242189ull, 5597538094635244185ull}},
+{{2300022746359144378ull, 17811554258527063825ull,
+ 8579259778937690640ull, 6996922618294055231ull}},
+{{7486714451376318377ull, 3817698749449278165ull,
+ 6112388705244725397ull, 8746153272867569039ull}},
+{{6985039541323892938ull, 4691904727619492805ull,
+ 10737771968419035229ull, 5466345795542230649ull}},
+{{13342985445082254076ull, 10476566927951753910ull,
+ 18033900978951181940ull, 6832932244427788311ull}},
+{{7455359769498041787ull, 13095708659939692388ull,
+ 17930690205261589521ull, 8541165305534735389ull}},
+{{13882971892791051925ull, 1267288884821225886ull,
+ 13512524387502187403ull, 5338228315959209618ull}},
+{{8130342829134039098ull, 15419169161308696070ull,
+ 7667283447522958445ull, 6672785394949012023ull}},
+{{939556499562773065ull, 5438903396353706376ull, 4972418290976310153ull,
+ 8340981743686265029ull}},
+{{587222812226733166ull, 14928529668789536245ull,
+ 5413604441073887797ull, 5213113589803915643ull}},
+{{5345714533710804361ull, 4825604030704756594ull,
+ 2155319532914971843ull, 6516391987254894554ull}},
+{{15905515203993281259ull, 1420319019953557838ull,
+ 11917521452998490612ull, 8145489984068618192ull}},
+{{5329260984068412883ull, 10111071424325749457ull,
+ 7448450908124056632ull, 5090931240042886370ull}},
+{{11273262248512904008ull, 12638839280407186821ull,
+ 87191598300294982ull, 6363664050053607963ull}},
+{{256519755358966297ull, 6575177063654207719ull,
+ 13944047553157532440ull, 7954580062567009953ull}},
+{{7077853874740435792ull, 4109485664783879824ull,
+ 1797500693082375919ull, 4971612539104381221ull}},
+{{8847317343425544740ull, 525171062552461876ull, 6858561884780357803ull,
+ 6214515673880476526ull}},
+{{11059146679281930925ull, 14491521883472741057ull,
+ 17796574392830223061ull, 7768144592350595657ull}},
+{{18441181720619676588ull, 11363044186384157112ull,
+ 4205329967877807557ull, 4855090370219122286ull}},
+{{4604733077065044119ull, 368747177698032679ull,
+ 14480034496702035255ull, 6068862962773902857ull}},
+{{1144230327903917245ull, 14295992027404704561ull,
+ 4264985065595380356ull, 7586078703467378572ull}},
+{{12244359001008418038ull, 18158367053982716158ull,
+ 11888987702851888530ull, 4741299189667111607ull}},
+{{6082076714405746740ull, 13474586780623619390ull,
+ 10249548610137472759ull, 5926623987083889509ull}},
+{{16825967929861959232ull, 12231547457352136333ull,
+ 17423621781099228853ull, 7408279983854861886ull}},
+{{12822072965377418472ull, 9950560170058779160ull,
+ 6278077594759630129ull, 4630174989909288679ull}},
+{{16027591206721773090ull, 17049886231000861854ull,
+ 3235910975022149757ull, 5787718737386610849ull}},
+{{10811116971547440555ull, 7477299733468913606ull,
+ 8656574737205075101ull, 7234648421733263561ull}},
+{{4290524177579524885ull, 13958310685263529912ull,
+ 15432404439933731780ull, 9043310527166579451ull}},
+{{2681577610987203054ull, 17947316215144482003ull,
+ 7339409765744888410ull, 5652069079479112157ull}},
+{{17187030069016167529ull, 13210773232075826695ull,
+ 13785948225608498417ull, 7065086349348890196ull}},
+{{16872101567842821507ull, 2678408484812619657ull,
+ 17232435282010623022ull, 8831357936686112745ull}},
+{{3627534452260681586ull, 15509063358290050998ull,
+ 3852743023615557532ull, 5519598710428820466ull}},
+{{13757790102180627790ull, 939585124153012131ull,
+ 14039300816374222724ull, 6899498388036025582ull}},
+{{12585551609298396834ull, 1174481405191265164ull,
+ 8325753983613002597ull, 8624372985045031978ull}},
+{{17089341792666273829ull, 3039893887458234679ull,
+ 9815282258185514527ull, 5390233115653144986ull}},
+{{16749991222405454383ull, 17634925414604957061ull,
+ 3045730785877117350ull, 6737791394566431233ull}},
+{{7102430972724654266ull, 12820284731401420519ull,
+ 8418849500773784592ull, 8422239243208039041ull}},
+{{11356548385593990772ull, 8012677957125887824ull,
+ 16790995984052085130ull, 5263899527005024400ull}},
+{{14195685481992488465ull, 792475409552583972ull,
+ 2542000906355554797ull, 6579874408756280501ull}},
+{{17744606852490610582ull, 5602280280368117869ull,
+ 7789187151371831400ull, 8224843010945350626ull}},
+{{13396222292020325566ull, 3501425175230073668ull,
+ 9479927988034782529ull, 5140526881840844141ull}},
+{{16745277865025406957ull, 8988467487464979989ull,
+ 16461596003470866065ull, 6425658602301055176ull}},
+{{7096539275999594984ull, 15847270377758612891ull,
+ 2130250930629030965ull, 8032073252876318971ull}},
+{{2129494038286052913ull, 12210386995312827009ull,
+ 17472307896139002017ull, 5020045783047699356ull}},
+{{7273553566284954046ull, 1427925688858870049ull,
+ 3393640796464200906ull, 6275057228809624196ull}},
+{{13703627976283580461ull, 11008279147928363369ull,
+ 4242050995580251132ull, 7843821536012030245ull}},
+{{1647238457536155932ull, 16103546504310002914ull,
+ 4957124881451350909ull, 4902388460007518903ull}},
+{{11282420108774970723ull, 6294375075105339930ull,
+ 1584720083386800733ull, 6127985575009398629ull}},
+{{4879653099113937596ull, 12479654862309062817ull,
+ 6592586122660888820ull, 7659981968761748286ull}},
+{{14578998233014680758ull, 17023156325797940068ull,
+ 17955424381945219224ull, 4787488730476092678ull}},
+{{18223747791268350947ull, 2832201333537873469ull,
+ 13220908440576748223ull, 5984360913095115848ull}},
+{{8944626683803274971ull, 17375309722204505549ull,
+ 16526135550720935278ull, 7480451141368894810ull}},
+{{7896234686590740809ull, 6247882557950428064ull,
+ 14940520737627972453ull, 4675281963355559256ull}},
+{{9870293358238426011ull, 12421539215865422984ull,
+ 228906848325413950ull, 5844102454194449071ull}},
+{{12337866697798032514ull, 6303551982977002922ull,
+ 14121191615688931150ull, 7305128067743061338ull}},
+{{6198961335392764835ull, 17102812015576029461ull,
+ 8428117482756388129ull, 9131410084678826673ull}},
+{{6180193843834171974ull, 3771728482093936557ull,
+ 16796788472791212341ull, 5707131302924266670ull}},
+{{12336928323220102871ull, 9326346621044808600ull,
+ 11772613554134239618ull, 7133914128655333338ull}},
+{{15421160404025128589ull, 2434561239451234942ull,
+ 5492394905813023715ull, 8917392660819166673ull}},
+{{5026539234088317464ull, 17662501839152879503ull,
+ 14961961862201609581ull, 5573370413011979170ull}},
+{{1671488024183008926ull, 8243069243658935667ull,
+ 9479080290897236169ull, 6966713016264973963ull}},
+{{15924418085510924870ull, 14915522573001057487ull,
+ 7237164345194157307ull, 8708391270331217454ull}},
+{{16870290331085409900ull, 7016358598911966977ull,
+ 18358285771028512029ull, 5442744543957010908ull}},
+{{7252804858574598662ull, 13382134267067346626ull,
+ 4501113140076088420ull, 6803430679946263636ull}},
+{{18289378110073024136ull, 16727667833834183282ull,
+ 5626391425095110525ull, 8504288349932829545ull}},
+{{16042547337223027989ull, 12760635405360058503ull,
+ 15045709686752913838ull, 5315180218708018465ull}},
+{{15441498153101397082ull, 6727422219845297321ull,
+ 4972079053158978586ull, 6643975273385023082ull}},
+{{5466814636094582641ull, 17632649811661397460ull,
+ 15438470853303499040ull, 8304969091731278852ull}},
+{{12640131184413889959ull, 11020406132288373412ull,
+ 425672246459911092ull, 5190605682332049283ull}},
+{{15800163980517362448ull, 13775507665360466765ull,
+ 14367148363357052577ull, 6488257102915061603ull}},
+{{5915146920364539348ull, 3384326526418419745ull,
+ 13347249435768927818ull, 8110321378643827004ull}},
+{{15226181871296306853ull, 6726890097438900244ull,
+ 17565402934210355694ull, 5068950861652391877ull}},
+{{585983265410831950ull, 17631984658653401114ull,
+ 8121695612480780905ull, 6336188577065489847ull}},
+{{9955851118618315745ull, 8204922768034587680ull,
+ 5540433497173588228ull, 7920235721331862309ull}},
+{{6222406949136447341ull, 14351448766876393108ull,
+ 5768613944947186594ull, 4950147325832413943ull}},
+{{7778008686420559176ull, 8715938921740715577ull,
+ 2599081412756595339ull, 6187684157290517429ull}},
+{{14334196876453086874ull, 6283237633748506567ull,
+ 7860537784373132078ull, 7734605196613146786ull}},
+{{15876402075424261152ull, 17762081576374980316ull,
+ 9524522133660595452ull, 4834128247883216741ull}},
+{{1398758520570774824ull, 3755857896759173780ull,
+ 16517338685503132220ull, 6042660309854020926ull}},
+{{1748448150713468530ull, 4694822370948967225ull,
+ 11423301320024139467ull, 7553325387317526158ull}},
+{{12621995140264387592ull, 628420972629410563ull,
+ 2527877306587699263ull, 4720828367073453849ull}},
+{{11165807906903096585ull, 14620584271068926916ull,
+ 7771532651662011982ull, 5901035458841817311ull}},
+{{13957259883628870732ull, 9052358301981382837ull,
+ 5102729796150127074ull, 7376294323552271639ull}},
+{{3611516799253924702ull, 2092075840621952739ull,
+ 1766726226760270939ull, 9220367904440339549ull}},
+{{18398099064029560603ull, 17448448464884578125ull,
+ 3410046900938863288ull, 5762729940275212218ull}},
+{{9162565774754787042ull, 3363816507396171041ull,
+ 13485930663028354919ull, 7203412425344015272ull}},
+{{16064893236870871706ull, 18039828689527377513ull,
+ 16857413328785443648ull, 9004265531680019090ull}},
+{{3123029245403212961ull, 11274892930954610946ull,
+ 15147569348918290184ull, 5627665957300011931ull}},
+{{13127158593608792009ull, 14093616163693263682ull,
+ 14322775667720474826ull, 7034582446625014914ull}},
+{{7185576205156214203ull, 8393648167761803795ull,
+ 8680097547795817725ull, 8793228058281268643ull}},
+{{2185142119008939925ull, 7551873114064821324ull,
+ 3119217958158692126ull, 5495767536425792902ull}},
+{{2731427648761174906ull, 216469355726250847ull,
+ 13122394484553140966ull, 6869709420532241127ull}},
+{{17249342616233632344ull, 9493958731512589366ull,
+ 11791307087264038303ull, 8587136775665301409ull}},
+{{6169153116718632311ull, 12851253234836450210ull,
+ 452037901898942083ull, 5366960484790813381ull}},
+{{16934813432753066197ull, 11452380525118174858ull,
+ 5176733395801065508ull, 6708700605988516726ull}},
+{{11945144754086556938ull, 14315475656397718573ull,
+ 15694288781606107693ull, 8385875757485645907ull}},
+{{9771558480517792039ull, 11253015294462268060ull,
+ 7503087479290123356ull, 5241172348428528692ull}},
+{{12214448100647240048ull, 14066269118077835075ull,
+ 9378859349112654195ull, 6551465435535660865ull}},
+{{10656374107381662156ull, 12971150379169905940ull,
+ 16335260204818205648ull, 8189331794419576081ull}},
+{{15883605853968314656ull, 8106968986981191212ull,
+ 3292008600370296674ull, 5118332371512235051ull}},
+{{1407763243750841703ull, 910339196871713208ull,
+ 17950068805745034555ull, 6397915464390293813ull}},
+{{1759704054688552129ull, 14972982051371805222ull,
+ 8602527951899129481ull, 7997394330487867267ull}},
+{{14934873089462508793ull, 2440584754466296407ull,
+ 3070736960723261974ull, 4998371456554917042ull}},
+{{14056905343400748087ull, 12274102979937646317ull,
+ 13061793237758853275ull, 6247964320693646302ull}},
+{{3736073623968771397ull, 10730942706494669993ull,
+ 7103869510343790786ull, 7809955400867057878ull}},
+{{13864261061048951883ull, 11318525209986556649ull,
+ 18274976499247032953ull, 4881222125541911173ull}},
+{{3495268271029026142ull, 313098457201032100ull, 9008662568776627480ull,
+ 6101527656927388967ull}},
+{{4369085338786282677ull, 391373071501290125ull, 6649142192543396446ull,
+ 7626909571159236209ull}},
+{{5036521345955120625ull, 14079666224970470040ull,
+ 15684928916408092538ull, 4766818481974522630ull}},
+{{6295651682443900782ull, 8376210744358311742ull,
+ 10382789108655339865ull, 5958523102468153288ull}},
+{{17092936639909651785ull, 15081949448875277581ull,
+ 12978486385819174831ull, 7448153878085191610ull}},
+{{12988928409157226318ull, 16343747433188130344ull,
+ 12723240009564372173ull, 4655096173803244756ull}},
+{{16236160511446532897ull, 6594626236202999218ull,
+ 15904050011955465217ull, 5818870217254055945ull}},
+{{11071828602453390313ull, 12854968813681136927ull,
+ 6045004459662167809ull, 7273587771567569932ull}},
+{{9228099734639349987ull, 2233652961819257447ull,
+ 7556255574577709762ull, 9091984714459462415ull}},
+{{12685091361790675598ull, 6007719119564423808ull,
+ 11640188761752150457ull, 5682490446537164009ull}},
+{{15856364202238344498ull, 12121334917882917664ull,
+ 715177896908024359ull, 7103113058171455012ull}},
+{{1373711179088379006ull, 10539982628926259177ull,
+ 893972371135030449ull, 8878891322714318765ull}},
+{{12387784532998706639ull, 18116704189147381745ull,
+ 2864575741173087982ull, 5549307076696449228ull}},
+{{1649672610966219587ull, 13422508199579451374ull,
+ 3580719676466359978ull, 6936633845870561535ull}},
+{{11285462800562550291ull, 7554763212619538409ull,
+ 18310957650865113685ull, 8670792307338201918ull}},
+{{135885222710512076ull, 7027570017100905458ull, 6832662513363308149ull,
+ 5419245192086376199ull}},
+{{9393228565242915903ull, 13396148539803519726ull,
+ 3929142123276747282ull, 6774056490107970249ull}},
+{{2518163669698869071ull, 7521813637899623850ull,
+ 9523113672523322007ull, 8467570612634962811ull}},
+{{6185538311989181073ull, 11618662551328346762ull,
+ 3646103036113382302ull, 5292231632896851757ull}},
+{{16955294926841252150ull, 5299956152305657644ull,
+ 9169314813569115782ull, 6615289541121064696ull}},
+{{2747374584842013571ull, 15848317227236847864ull,
+ 11461643516961394727ull, 8269111926401330870ull}},
+{{1717109115526258482ull, 16822727294664111771ull,
+ 2551841179673483800ull, 5168194954000831794ull}},
+{{15981444449689986814ull, 2581665044620588097ull,
+ 12413173511446630559ull, 6460243692501039742ull}},
+{{6141747506830319806ull, 17062139361057898834ull,
+ 6293094852453512390ull, 8075304615626299678ull}},
+{{8450278210196337783ull, 6052151082233798867ull,
+ 17768242338065608956ull, 5047065384766437298ull}},
+{{5951161744318034324ull, 7565188852792248584ull,
+ 12986930885727235387ull, 6308831730958046623ull}},
+{{7438952180397542905ull, 4844800047562922826ull,
+ 11621977588731656330ull, 7886039663697558279ull}},
+{{9261031131175852220ull, 7639686048154214670ull,
+ 14181265020598367062ull, 4928774789810973924ull}},
+{{2352916877115039467ull, 326235523337992530ull,
+ 17726581275747958828ull, 6160968487263717405ull}},
+{{12164518133248575142ull, 407794404172490662ull,
+ 8323168539402784823ull, 7701210609079646757ull}},
+{{2991137814852971560ull, 7172400530248888520ull,
+ 7507823346340434466ull, 4813256630674779223ull}},
+{{3738922268566214449ull, 18188872699665886458ull,
+ 4773093164498155178ull, 6016570788343474029ull}},
+{{13897024872562543870ull, 13512718837727582264ull,
+ 10578052474050081877ull, 7520713485429342536ull}},
+{{8685640545351589919ull, 10751292282793432867ull,
+ 6611282796281301173ull, 4700445928393339085ull}},
+{{6245364663262099494ull, 18050801371919178988ull,
+ 12875789513779014370ull, 5875557410491673856ull}},
+{{7806705829077624368ull, 13340129678044197927ull,
+ 16094736892223767963ull, 7344446763114592320ull}},
+{{5146696267919642556ull, 12063476079127859505ull,
+ 1671677041570158338ull, 9180558453893240401ull}},
+{{14745900213518246357ull, 12151358567882300094ull,
+ 12574013197049818721ull, 5737849033683275250ull}},
+{{9209003230043032139ull, 1354140154570711406ull,
+ 6494144459457497594ull, 7172311292104094063ull}},
+{{2287882000699014365ull, 10916047230068165066ull,
+ 3505994555894484088ull, 8965389115130117579ull}},
+{{6041612268864271882ull, 6822529518792603166ull,
+ 18332147661929910219ull, 5603368196956323486ull}},
+{{16775387372935115661ull, 3916475880063366053ull,
+ 13691812540557611966ull, 7004210246195404358ull}},
+{{7134176160886730864ull, 14118966886933983375ull,
+ 7891393638842239149ull, 8755262807744255448ull}},
+{{11376389128195288646ull, 11130197313547433561ull,
+ 4932121024276399468ull, 5472039254840159655ull}},
+{{385428354961947096ull, 13912746641934291952ull,
+ 1553465261918111431ull, 6840049068550199569ull}},
+{{481785443702433869ull, 12779247283990477036ull,
+ 6553517595825027193ull, 8550061335687749461ull}},
+{{9524487939168796977ull, 1069500524852966291ull,
+ 6401791506604335948ull, 5343788334804843413ull}},
+{{7293923905533608317ull, 1336875656066207864ull,
+ 12613925401682807839ull, 6679735418506054266ull}},
+{{9117404881917010396ull, 15506152625364923542ull,
+ 6544034715248733990ull, 8349669273132567833ull}},
+{{1086692032770743593ull, 5079659372425689310ull,
+ 15619236743098928504ull, 5218543295707854895ull}},
+{{10581737077818205300ull, 6349574215532111637ull,
+ 14912359910446272726ull, 6523179119634818619ull}},
+{{17838857365700144528ull, 17160339806269915354ull,
+ 14028763869630453003ull, 8153973899543523274ull}},
+{{15760971871989978234ull, 8419369369705003144ull,
+ 13379663436946421031ull, 5096233687214702046ull}},
+{{1254470766277921177ull, 5912525693703866027ull,
+ 7501207259328250481ull, 6370292109018377558ull}},
+{{15403146513129565183ull, 12002343135557220437ull,
+ 153137037305537293ull, 7962865136272971948ull}},
+{{11932809579919672192ull, 9807307468936956725ull,
+ 9319082685170736616ull, 4976790710170607467ull}},
+{{1080953919617426527ull, 12259134336171195907ull,
+ 7037167338036032866ull, 6220988387713259334ull}},
+{{15186250454803946871ull, 6100545883359219075ull,
+ 18019831209399816891ull, 7776235484641574167ull}},
+{{7185563525038772843ull, 1506998167885817970ull,
+ 18179923533515967413ull, 4860147177900983854ull}},
+{{18205326443153241861ull, 6495433728284660366ull,
+ 13501532380040183458ull, 6075183972376229818ull}},
+{{13533286017086776518ull, 17342664197210601266ull,
+ 7653543438195453514ull, 7593979965470287273ull}},
+{{13069989779106623228ull, 15450851141684013695ull,
+ 16312679694940628206ull, 4746237478418929545ull}},
+{{11725801205455891131ull, 10090191890250241311ull,
+ 6555791563393621546ull, 5932796848023661932ull}},
+{{10045565488392476010ull, 3389367825958025831ull,
+ 8194739454242026933ull, 7415996060029577415ull}},
+{{13196007457886379362ull, 4424197900437460096ull,
+ 12039241186542348689ull, 4634997537518485884ull}},
+{{16495009322357974203ull, 10141933393974213024ull,
+ 15049051483177935861ull, 5793746921898107355ull}},
+{{2172017579237916137ull, 17289102760895154185ull,
+ 14199628335545031922ull, 7242183652372634194ull}},
+{{7326707992474783075ull, 12388006414264166923ull,
+ 8526163382576514095ull, 9052729565465792743ull}},
+{{2273349486083045470ull, 14660033036556186183ull,
+ 12246381141751403165ull, 5657955978416120464ull}},
+{{16676744912885970550ull, 4489983240413069016ull,
+ 15307976427189253957ull, 7072444973020150580ull}},
+{{2399187067397911571ull, 10224165068943724175ull,
+ 688226460277015830ull, 8840556216275188226ull}},
+{{8417020944764776588ull, 1778417149662439705ull,
+ 5041827556100522798ull, 5525347635171992641ull}},
+{{15132962199383358639ull, 11446393473932825439ull,
+ 10913970463553041401ull, 6906684543964990801ull}},
+{{14304516730801810395ull, 472933787133868087ull,
+ 18254149097868689656ull, 8633355679956238501ull}},
+{{15857851984392213353ull, 295583616958667554ull,
+ 13714686195381624987ull, 5395847299972649063ull}},
+{{10598942943635490883ull, 14204537576480498155ull,
+ 12531671725799643329ull, 6744809124965811329ull}},
+{{8636992661116975699ull, 3920613915318458982ull,
+ 1829531601967390450ull, 8431011406207264162ull}},
+{{786434394770721908ull, 7062069715501424768ull, 5755143269657006935ull,
+ 5269382128879540101ull}},
+{{983042993463402385ull, 4215901125949393056ull,
+ 11805615105498646573ull, 6586727661099425126ull}},
+{{1228803741829252982ull, 9881562425864129224ull,
+ 5533646845018532408ull, 8233409576374281408ull}},
+{{768002338643283114ull, 6175976516165080765ull, 3458529278136582755ull,
+ 5145880985233925880ull}},
+{{5571688941731491796ull, 3108284626778963052ull,
+ 4323161597670728444ull, 6432351231542407350ull}},
+{{6964611177164364745ull, 3885355783473703815ull,
+ 14627324033943186363ull, 8040439039428009187ull}},
+{{11270411013368809822ull, 122504355457370932ull,
+ 6836234512000797525ull, 5025274399642505742ull}},
+{{14088013766711012277ull, 4764816462749101569ull,
+ 17768665176855772714ull, 6281592999553132177ull}},
+{{3774959153106601634ull, 15179392615291152770ull,
+ 8375773415787552180ull, 7851991249441415222ull}},
+{{6971035489119013926ull, 263748347702194673ull, 623172366439832209ull,
+ 4907494530900884514ull}},
+{{13325480379826155311ull, 4941371453055131245ull,
+ 10002337494904566069ull, 6134368163626105642ull}},
+{{2821792419500530426ull, 10788400334746301961ull,
+ 3279549831775931778ull, 7667960204532632053ull}},
+{{13292835308256301277ull, 11354436227643826629ull,
+ 4355561654073651313ull, 4792475127832895033ull}},
+{{2780986080038212884ull, 357987229272619575ull,
+ 10056138086019452046ull, 5990593909791118791ull}},
+{{17311290655329929816ull, 9670856073445550276ull,
+ 7958486589096927153ull, 7488242387238898489ull}},
+{{1596184622726430327ull, 17573500091971938683ull,
+ 16503269164254049230ull, 4680151492024311555ull}},
+{{15830288833690201621ull, 12743503078110147545ull,
+ 16017400436890173634ull, 5850189365030389444ull}},
+{{5952802986830588314ull, 6706006810782908624ull,
+ 1575006472403165427ull, 7312736706287986806ull}},
+{{7441003733538235393ull, 3770822495051247876ull,
+ 11192130127358732592ull, 9140920882859983507ull}},
+{{13873999370316172929ull, 2356764059407029922ull,
+ 4689238320385513918ull, 5713075551787489692ull}},
+{{8119127176040440353ull, 12169327111113563211ull,
+ 5861547900481892397ull, 7141344439734362115ull}},
+{{5537222951623162537ull, 1376600833609790302ull,
+ 2715248857174977593ull, 8926680549667952644ull}},
+{{17295822400046640298ull, 12389590567074588698ull,
+ 10920402572589136803ull, 5579175343542470402ull}},
+{{12396405963203524564ull, 10875302190415847969ull,
+ 4427131178881645196ull, 6973969179428088003ull}},
+{{1660449398722241993ull, 13594127738019809962ull,
+ 922227955174668591ull, 8717461474285110004ull}},
+{{5649466892628789150ull, 15413858863903463082ull,
+ 9799764508838943677ull, 5448413421428193752ull}},
+{{16285205652640762245ull, 5432265524597165140ull,
+ 12249705636048679597ull, 6810516776785242190ull}},
+{{1909762992091401190ull, 11402017924173844330ull,
+ 6088760008206073688ull, 8513145970981552738ull}},
+{{5805287888484513648ull, 7126261202608652706ull,
+ 8417161023556183959ull, 5320716231863470461ull}},
+{{16479981897460417868ull, 4296140484833427978ull,
+ 15133137297872617853ull, 6650895289829338076ull}},
+{{11376605334970746527ull, 9981861624469172877ull,
+ 469677548631220700ull, 8313619112286672596ull}},
+{{9416221343570410531ull, 15462035552148008856ull,
+ 9516920504749288745ull, 5196011945179170372ull}},
+{{11770276679463013164ull, 5492486384902847358ull,
+ 11896150630936610932ull, 6495014931473962965ull}},
+{{5489473812473990647ull, 6865607981128559198ull,
+ 1035130233388599953ull, 8118768664342453707ull}},
+{{17265979188078407867ull, 15820220034273819258ull,
+ 16787857460363732634ull, 5074230415214033566ull}},
+{{12359101948243234025ull, 10551903005987498265ull,
+ 11761449788599889985ull, 6342788019017541958ull}},
+{{1613819380021878819ull, 17801564775911760736ull,
+ 5478440198895086673ull, 7928485023771927448ull}},
+{{1008637112513674262ull, 4208448957303768604ull,
+ 3424025124309429171ull, 4955303139857454655ull}},
+{{1260796390642092828ull, 648875178202322851ull,
+ 18115089460668950176ull, 6194128924821818318ull}},
+{{15411053543584779747ull, 811093972752903563ull,
+ 13420489788981411912ull, 7742661156027272898ull}},
+{{7326065455526793390ull, 506933732970564727ull,
+ 12999492136540770349ull, 4839163222517045561ull}},
+{{4545895800981103833ull, 5245353184640593813ull,
+ 2414307115393799224ull, 6048954028146306952ull}},
+{{10294055769653767695ull, 6556691480800742266ull,
+ 3017883894242249030ull, 7561192535182883690ull}},
+{{11045470874460992714ull, 17932990230782627628ull,
+ 6497863452328793547ull, 4725745334489302306ull}},
+{{13806838593076240892ull, 17804551770050896631ull,
+ 17345701352265767742ull, 5907181668111627882ull}},
+{{12646862222917913211ull, 13032317675708844981ull,
+ 12458754653477433870ull, 7383977085139534853ull}},
+{{10210131898537389709ull, 3533512528890640209ull,
+ 10092564667637090121ull, 4614985678212209283ull}},
+{{17374350891599125040ull, 9028576679540688165ull,
+ 8004019816118974747ull, 5768732097765261604ull}},
+{{7882880559216742588ull, 6674034830998472303ull,
+ 10005024770148718434ull, 7210915122206577005ull}},
+{{5241914680593540331ull, 17565915575602866187ull,
+ 17117966981113285946ull, 9013643902758221256ull}},
+{{970353666157268755ull, 15590383253179179271ull,
+ 10698729363195803716ull, 5633527439223888285ull}},
+{{15048000137978749656ull, 1041234992764422472ull,
+ 17985097722422142550ull, 7041909299029860356ull}},
+{{363256098763885453ull, 10524915777810303899ull,
+ 4034628079318126571ull, 8802386623787325446ull}},
+{{16367936126223286073ull, 4272229351917745984ull,
+ 16356700604855992819ull, 5501491639867078403ull}},
+{{2013176084069555975ull, 728600671469794577ull,
+ 15834189737642603120ull, 6876864549833848004ull}},
+{{7128156123514332872ull, 910750839337243221ull, 1345993098343702284ull,
+ 8596080687292310006ull}},
+{{6760940586410151997ull, 9792591311440552821ull,
+ 14676303741746977639ull, 5372550429557693753ull}},
+{{13062861751440077900ull, 7629053120873303122ull,
+ 4510321621901558337ull, 6715688036947117192ull}},
+{{7105205152445321567ull, 14148002419519016807ull,
+ 5637902027376947921ull, 8394610046183896490ull}},
+{{11358282247919407836ull, 1924972484558303648ull,
+ 8135374785537980355ull, 5246631278864935306ull}},
+{{14197852809899259795ull, 16241273660980043272ull,
+ 945846445067699635ull, 6558289098581169133ull}},
+{{17747316012374074743ull, 15689906057797666186ull,
+ 5793994074762012448ull, 8197861373226461416ull}},
+{{15703758526161184619ull, 9806191286123541366ull,
+ 3621246296726257780ull, 5123663358266538385ull}},
+{{10406326120846704965ull, 12257739107654426708ull,
+ 9138243889335210129ull, 6404579197833172981ull}},
+{{13007907651058381206ull, 1487115829285869673ull,
+ 16034490880096400566ull, 8005723997291466226ull}},
+{{1212413254270406398ull, 14764505448585832258ull,
+ 14633242818487638257ull, 5003577498307166391ull}},
+{{10738888604692783806ull, 4620573755450126610ull,
+ 13679867504682159918ull, 6254471872883957989ull}},
+{{4200238719011203949ull, 14999089231167434071ull,
+ 3264776325570536185ull, 7818089841104947487ull}},
+{{9542678227023084324ull, 2456901741838564438ull,
+ 8958014231122666972ull, 4886306150690592179ull}},
+{{2704975746924079597ull, 3071127177298205548ull,
+ 6585831770475945811ull, 6107882688363240224ull}},
+{{3381219683655099496ull, 17673967026904920647ull,
+ 8232289713094932263ull, 7634853360454050280ull}},
+{{9030791329925519041ull, 17963758419456657260ull,
+ 5145181070684332664ull, 4771783350283781425ull}},
+{{11288489162406898802ull, 4007953950611269959ull,
+ 11043162356782803735ull, 5964729187854726781ull}},
+{{9498925434581235598ull, 398256419836699545ull,
+ 18415638964405892573ull, 7455911484818408476ull}},
+{{17466043442681742009ull, 2554753271611631167ull,
+ 2286402315898907050ull, 4659944678011505298ull}},
+{{17220868284924789607ull, 12416813626369314767ull,
+ 12081374931728409620ull, 5824930847514381622ull}},
+{{16914399337728599105ull, 15521017032961643459ull,
+ 5878346627805736217ull, 7281163559392977028ull}},
+{{16531313153733360977ull, 5566213235919890612ull,
+ 7347933284757170272ull, 9101454449241221285ull}},
+{{1108698684228574803ull, 3478883272449931633ull,
+ 6898301312186925372ull, 5688409030775763303ull}},
+{{5997559373713106407ull, 4348604090562414541ull,
+ 4011190621806268811ull, 7110511288469704129ull}},
+{{12108635235568770913ull, 824069094775630272ull,
+ 9625674295685223918ull, 8888139110587130161ull}},
+{{7567897022230481821ull, 14350101239516932632ull,
+ 17545261480871734708ull, 5555086944116956350ull}},
+{{9459871277788102276ull, 17937626549396165790ull,
+ 12708204814234892577ull, 6943858680146195438ull}},
+{{2601467060380352037ull, 8586975131463043526ull,
+ 6661883980938839914ull, 8679823350182744298ull}},
+{{15460974968019883735ull, 9978545475591790107ull,
+ 8775363506514162850ull, 5424889593864215186ull}},
+{{14714532691597466765ull, 3249809807634961826ull,
+ 1745832346287927755ull, 6781111992330268983ull}},
+{{9169793827642057648ull, 17897320314825865995ull,
+ 16017348488142073405ull, 8476389990412836228ull}},
+{{3425278133062592078ull, 13491668205979860199ull,
+ 787470768234020070ull, 5297743744008022643ull}},
+{{18116655721610403809ull, 7641213220620049440ull,
+ 14819396515574688800ull, 6622179680010028303ull}},
+{{4199075578303453146ull, 9551516525775061801ull,
+ 13912559626040973096ull, 8277724600012535379ull}},
+{{14153637282508127976ull, 5969697828609413625ull,
+ 6389506757061914233ull, 5173577875007834612ull}},
+{{3856988547852996258ull, 12073808304189154936ull,
+ 7986883446327392791ull, 6466972343759793265ull}},
+{{4821235684816245322ull, 10480574361809055766ull,
+ 14595290326336628893ull, 8083715429699741581ull}},
+{{16848330358292317039ull, 8856201985344353805ull,
+ 11427899463174087010ull, 5052322143562338488ull}},
+{{7225354892583232586ull, 1846880444825666449ull,
+ 14284874328967608763ull, 6315402679452923110ull}},
+{{13643379634156428637ull, 16143658611314246773ull,
+ 8632720874354735145ull, 7894253349316153888ull}},
+{{10832955280561461850ull, 3172257604430322377ull,
+ 5395450546471709466ull, 4933908343322596180ull}},
+{{18152880119129215217ull, 13188694042392678779ull,
+ 6744313183089636832ull, 6167385429153245225ull}},
+{{18079414130484131117ull, 16485867552990848474ull,
+ 13042077497289433944ull, 7709231786441556531ull}},
+{{15911319849979969852ull, 10303667220619280296ull,
+ 5845455426592202263ull, 4818269866525972832ull}},
+{{1442405738765410699ull, 8267898007346712467ull,
+ 7306819283240252829ull, 6022837333157466040ull}},
+{{15638065228738927086ull, 14946558527610778487ull,
+ 9133524104050316036ull, 7528546666446832550ull}},
+{{16691319795602911285ull, 118227042901960746ull,
+ 1096766546604059619ull, 4705341666529270344ull}},
+{{11640777707648863298ull, 13982841858909614645ull,
+ 1370958183255074523ull, 5881677083161587930ull}},
+{{715914079278915410ull, 12866866305209630403ull,
+ 10937069765923618962ull, 7352096353951984912ull}},
+{{14729950654380807974ull, 6860210844657262195ull,
+ 13671337207404523703ull, 9190120442439981140ull}},
+{{6900376149774311032ull, 11205160805551870728ull,
+ 17767957791482603122ull, 5743825276524988212ull}},
+{{8625470187217888790ull, 4783078970085062602ull,
+ 3763203165643702287ull, 7179781595656235266ull}},
+{{1558465697167585179ull, 1367162694178940349ull,
+ 13927375993909403667ull, 8974726994570294082ull}},
+{{3279884069943434689ull, 16995377748357695382ull,
+ 13316296014620765195ull, 5609204371606433801ull}},
+{{13323227124284069170ull, 16632536167019731323ull,
+ 2810311962993792782ull, 7011505464508042252ull}},
+{{12042347886927698558ull, 11567298171919888346ull,
+ 3512889953742240978ull, 8764381830635052815ull}},
+{{12138153447757199503ull, 11841247375877318120ull,
+ 9113085248729982467ull, 5477738644146908009ull}},
+{{15172691809696499378ull, 10189873201419259746ull,
+ 16003042579339865988ull, 6847173305183635011ull}},
+{{9742492725265848415ull, 12737341501774074683ull,
+ 15392117205747444581ull, 8558966631479543764ull}},
+{{3783214944077461308ull, 10266681447822490629ull,
+ 396701216737377055ull, 5349354144674714853ull}},
+{{9340704698524214538ull, 8221665791350725382ull,
+ 5107562539349109223ull, 6686692680843393566ull}},
+{{2452508836300492365ull, 5665396220761018824ull,
+ 15607825211041162337ull, 8358365851054241957ull}},
+{{1532818022687807728ull, 15070087684044106525ull,
+ 12060733766114420412ull, 5223978656908901223ull}},
+{{6527708546787147564ull, 390865531345581540ull,
+ 10464231189215637612ull, 6529973321136126529ull}},
+{{8159635683483934455ull, 488581914181976925ull,
+ 17691975004946934919ull, 8162466651420158161ull}},
+{{7405615311391152987ull, 7222892724004817434ull,
+ 4139955350450752468ull, 5101541657137598851ull}},
+{{33647102384165425ull, 9028615905006021793ull, 563258169636052681ull,
+ 6376927071421998564ull}},
+{{4653744896407594685ull, 15897455899684915145ull,
+ 704072712045065851ull, 7971158839277498205ull}},
+{{14437805606323216438ull, 7630066928089378013ull,
+ 2745888454241860109ull, 4981974274548436378ull}},
+{{4212198952621856836ull, 14149269678539110421ull,
+ 12655732604657100944ull, 6227467843185545472ull}},
+{{9876934709204708949ull, 17686587098173888026ull,
+ 15819665755821376180ull, 7784334803981931840ull}},
+{{10784770211680330997ull, 1830744899503904208ull,
+ 9887291097388360113ull, 4865209252488707400ull}},
+{{13480962764600413746ull, 6900117142807268164ull,
+ 12359113871735450141ull, 6081511565610884250ull}},
+{{16851203455750517183ull, 13236832446936473109ull,
+ 6225520302814536868ull, 7601889457013605313ull}},
+{{12837845169057767191ull, 17496392316190071501ull,
+ 15420165235327555302ull, 4751180910633503320ull}},
+{{2212248406040045277ull, 12647118358382813569ull,
+ 828462470449892512ull, 5938976138291879151ull}},
+{{7376996525977444500ull, 15808897947978516961ull,
+ 14870636143344529352ull, 7423720172864848938ull}},
+{{16139837874804372573ull, 9880561217486573100ull,
+ 13905833608017718749ull, 4639825108040530586ull}},
+{{1728053269795914100ull, 16962387540285604280ull,
+ 8158919973167372628ull, 5799781385050663233ull}},
+{{2160066587244892625ull, 2756240351647453734ull,
+ 14810335984886603690ull, 7249726731313329041ull}},
+{{11923455270910891589ull, 12668672476414092975ull,
+ 4677861925826090900ull, 9062158414141661302ull}},
+{{14369688571960389099ull, 17141292334613583917ull,
+ 16758721758923470524ull, 5663849008838538313ull}},
+{{4127052659668322662ull, 2979871344557428281ull,
+ 7113344143372174444ull, 7079811261048172892ull}},
+{{9770501843012791231ull, 3724839180696785351ull,
+ 8891680179215218055ull, 8849764076310216115ull}},
+{{13024092679524076376ull, 9245553515576572700ull,
+ 3251457102795817332ull, 5531102547693885072ull}},
+{{16280115849405095470ull, 11556941894470715875ull,
+ 4064321378494771665ull, 6913878184617356340ull}},
+{{15738458793328981433ull, 611119312806231132ull,
+ 5080401723118464582ull, 8642347730771695425ull}},
+{{613164708975837588ull, 14217007625786058170ull,
+ 14704466123017510123ull, 5401467331732309640ull}},
+{{9989827923074572793ull, 13159573513805184808ull,
+ 18380582653771887654ull, 6751834164665387050ull}},
+{{12487284903843215991ull, 7226094855401705202ull,
+ 13752356280360083760ull, 8439792705831733813ull}},
+{{12416239083329397898ull, 4516309284626065751ull,
+ 10901065684438746302ull, 5274870441144833633ull}},
+{{10908612835734359469ull, 14868758642637357997ull,
+ 18238018123975820781ull, 6593588051431042041ull}},
+{{18247452063095337240ull, 4750890248014533784ull,
+ 8962464599687612265ull, 8241985064288802552ull}},
+{{11404657539434585775ull, 14498521451077553375ull,
+ 5601540374804757665ull, 5151240665180501595ull}},
+{{9644135905865844315ull, 4288093758564778007ull,
+ 2390239450078559178ull, 6439050831475626994ull}},
+{{7443483863904917489ull, 14583489235060748317ull,
+ 12211171349452974780ull, 8048813539344533742ull}},
+{{6958020424154267383ull, 18338052808767743506ull,
+ 3020296074980721333ull, 5030508462090333589ull}},
+{{17920897567047610037ull, 9087507955677515670ull,
+ 8387056112153289571ull, 6288135577612916986ull}},
+{{13177749921954736738ull, 6747698926169506684ull,
+ 1260448103336836156ull, 7860169472016146233ull}},
+{{17459465738076486269ull, 13440683865710717485ull,
+ 12316995110653992357ull, 4912605920010091395ull}},
+{{7989274117313444124ull, 2965796776856233145ull,
+ 10784557869890102543ull, 6140757400012614244ull}},
+{{14598278665069193059ull, 17542304026352455143ull,
+ 13480697337362628178ull, 7675946750015767805ull}},
+{{16041453193309327518ull, 15575626034897672368ull,
+ 10731278845065336563ull, 4797466718759854878ull}},
+{{1605072417927107782ull, 14857846525194702557ull,
+ 4190726519476894896ull, 5996833398449818598ull}},
+{{6618026540836272631ull, 125564082783826580ull,
+ 14461780186200894429ull, 7496041748062273247ull}},
+{{13359638624877446203ull, 2384320560953585564ull,
+ 15956141644016640874ull, 4685026092538920779ull}},
+{{16699548281096807753ull, 12203772738046757763ull,
+ 15333491036593413188ull, 5856282615673650974ull}},
+{{16262749332943621787ull, 15254715922558447204ull,
+ 9943491758886990677ull, 7320353269592063718ull}},
+{{1881692592469975618ull, 5233336847915895294ull,
+ 3205992661753962539ull, 9150441586990079648ull}},
+{{15011115925575898473ull, 964992520733740606ull,
+ 2003745413596226587ull, 5719025991868799780ull}},
+{{9540522870115097284ull, 15041298706199339470ull,
+ 2504681766995283233ull, 7148782489835999725ull}},
+{{2702281550789095796ull, 4966565327467010626ull,
+ 7742538227171491946ull, 8935978112294999656ull}},
+{{6300611987670572777ull, 7715789348094269545ull,
+ 4839086391982182466ull, 5584986320184374785ull}},
+{{12487451003015603875ull, 421364648263061123ull,
+ 10660544008405115987ull, 6981232900230468481ull}},
+{{10997627735342116940ull, 14361763865610990116ull,
+ 17937366028933782887ull, 8726541125288085601ull}},
+{{16096889371443598895ull, 15893631443647950678ull,
+ 4293324740442532448ull, 5454088203305053501ull}},
+{{10897739677449722811ull, 1420295230850386732ull,
+ 9978341943980553465ull, 6817610254131316876ull}},
+{{13622174596812153514ull, 6387055056990371319ull,
+ 12472927429975691831ull, 8522012817664146095ull}},
+{{15431388150648677802ull, 10909438438260063930ull,
+ 14713108671375889250ull, 5326258011040091309ull}},
+{{10065863151456071445ull, 4413426010970304105ull,
+ 4556327783937697851ull, 6657822513800114137ull}},
+{{17194014957747477210ull, 905096495285492227ull,
+ 10307095748349510218ull, 8322278142250142671ull}},
+{{8440416339378479304ull, 5177371327980820546ull,
+ 13359463870359525742ull, 5201423838906339169ull}},
+{{1327148387368323322ull, 15695086196830801491ull,
+ 2864271782667243465ull, 6501779798632923962ull}},
+{{15493993539492567865ull, 5783799690756338151ull,
+ 12803711765188830140ull, 8127224748291154952ull}},
+{{16601274989823936772ull, 12838246843577487152ull,
+ 8002319853243018837ull, 5079515467681971845ull}},
+{{2304849663570369348ull, 2212750499189695229ull,
+ 14614585834981161451ull, 6349394334602464806ull}},
+{{7492748097890349589ull, 16600996179269282748ull,
+ 9044860256871676005ull, 7936742918253081008ull}},
+{{13906339598036244302ull, 12681465621256995669ull,
+ 5653037660544797503ull, 4960464323908175630ull}},
+{{3547866442263141665ull, 11240146008143856683ull,
+ 16289669112535772687ull, 6200580404885219537ull}},
+{{18269891108111090793ull, 9438496491752432949ull,
+ 6527028335387552147ull, 7750725506106524422ull}},
+{{13724524951783125698ull, 3593217298131576641ull,
+ 17914450764899383804ull, 4844203441316577763ull}},
+{{3320598134446743410ull, 4491521622664470802ull,
+ 17781377437696841851ull, 6055254301645722204ull}},
+{{13374119704913205071ull, 1002716009903200598ull,
+ 3779977723411500698ull, 7569067877057152756ull}},
+{{3747138797143365265ull, 5238383524616888278ull,
+ 11585858113986963744ull, 4730667423160720472ull}},
+{{13907295533283982389ull, 6547979405771110347ull,
+ 14482322642483704680ull, 5913334278950900590ull}},
+{{12772433398177590083ull, 8184974257213887934ull,
+ 8879531266249855042ull, 7391667848688625738ull}},
+{{3371084855433605898ull, 9727294929186067863ull,
+ 10161393059833547305ull, 4619792405430391086ull}},
+{{18048914124574171084ull, 16770804679909972732ull,
+ 3478369287937158323ull, 5774740506787988858ull}},
+{{4114398582008162239ull, 16351819831460078012ull,
+ 13571333646776223712ull, 7218425633484986072ull}},
+{{5142998227510202799ull, 1993030715615545899ull,
+ 16964167058470279641ull, 9023032041856232590ull}},
+{{908530882980182797ull, 12774859243328185947ull,
+ 5990918393116536871ull, 5639395026160145369ull}},
+{{14970721659007392209ull, 11356888035732844529ull,
+ 12100334009823058993ull, 7049243782700181711ull}},
+{{4878344018477076549ull, 361051989383891950ull,
+ 10513731493851435838ull, 8811554728375227139ull}},
+{{16884023066830336555ull, 14060715548647096180ull,
+ 4265239174443453446ull, 5507221705234516962ull}},
+{{2658284759828369078ull, 8352522398954094418ull,
+ 14554921004909092616ull, 6884027131543146202ull}},
+{{12546227986640237155ull, 10440652998692618022ull,
+ 8970279219281589962ull, 8605033914428932753ull}},
+{{3229706473222760318ull, 11137094142610274168ull,
+ 17135639558119463486ull, 5378146196518082970ull}},
+{{4037133091528450398ull, 4697995641408066902ull,
+ 12196177410794553550ull, 6722682745647603713ull}},
+{{14269788401265338805ull, 15095866588614859435ull,
+ 1410163708211028225ull, 8403353432059504642ull}},
+{{6612774741577142801ull, 2517387590243205291ull,
+ 5493038336059280545ull, 5252095895037190401ull}},
+{{3654282408544040597ull, 7758420506231394518ull,
+ 11477983938501488585ull, 6565119868796488001ull}},
+{{13791225047534826555ull, 14309711651216631051ull,
+ 512421867844697019ull, 8206399835995610002ull}},
+{{6313672645495572645ull, 6637726772796700455ull,
+ 4931949685830323541ull, 5128999897497256251ull}},
+{{3280404788442077902ull, 12908844484423263473ull,
+ 1553251088860516522ull, 6411249871871570314ull}},
+{{8712192003979985281ull, 6912683568674303533ull,
+ 11164935897930421461ull, 8014062339839462892ull}},
+{{7750963011701184753ull, 6626270239635133660ull,
+ 16201456973061289221ull, 5008788962399664307ull}},
+{{9688703764626480941ull, 12894523817971304979ull,
+ 15640135197899223622ull, 6260986202999580384ull}},
+{{7499193687355713272ull, 6894782735609355416ull,
+ 1103424923664477912ull, 7826232753749475481ull}},
+{{4686996054597320795ull, 4309239209755847135ull,
+ 12218855623358768455ull, 4891395471093422175ull}},
+{{1247059049819263090ull, 774862993767421015ull,
+ 10661883510771072665ull, 6114244338866777719ull}},
+{{15393881867556242574ull, 5580264760636664172ull,
+ 8715668370036452927ull, 7642805423583472149ull}},
+{{397804130367875801ull, 10405194503038996964ull,
+ 7753135740486477031ull, 4776753389739670093ull}},
+{{497255162959844751ull, 8394807110371358301ull,
+ 14303105694035484193ull, 5970941737174587616ull}},
+{{5233254972127193843ull, 15105194906391585780ull,
+ 17878882117544355241ull, 7463677171468234520ull}},
+{{12494156394434271960ull, 2523217788853659256ull,
+ 11174301323465222026ull, 4664798232167646575ull}},
+{{15617695493042839950ull, 12377394272921849878ull,
+ 9356190635904139628ull, 5830997790209558219ull}},
+{{10298747329448774129ull, 15471742841152312348ull,
+ 7083552276452786631ull, 7288747237761947774ull}},
+{{12873434161810967662ull, 14727992533013002531ull,
+ 18077812382420759097ull, 9110934047202434717ull}},
+{{5740053341918160837ull, 2287466305492044726ull,
+ 13604475748226668388ull, 5694333779501521698ull}},
+{{16398438714252476854ull, 2859332881865055907ull,
+ 7782222648428559677ull, 7117917224376902123ull}},
+{{15886362374388208163ull, 8185852120758707788ull,
+ 5116092292108311692ull, 8897396530471127654ull}},
+{{705604447137854294ull, 14339529612328968176ull,
+ 17032615737849858519ull, 5560872831544454783ull}},
+{{882005558922317867ull, 13312725996983822316ull,
+ 16679083653884935245ull, 6951091039430568479ull}},
+{{1102506948652897334ull, 2805849440947614183ull,
+ 16237168548928781153ull, 8688863799288210599ull}},
+{{7606595870549142690ull, 13282870946660728624ull,
+ 17065759370721570076ull, 5430539874555131624ull}},
+{{9508244838186428362ull, 16603588683325910780ull,
+ 2885455139692410979ull, 6788174843193914531ull}},
+{{11885306047733035453ull, 16142799835730000571ull,
+ 17441876979897677436ull, 8485218553992393163ull}},
+{{5122473270619453206ull, 865877860476474549ull, 8595330103222354446ull,
+ 5303261596245245727ull}},
+{{11014777606701704412ull, 10305719362450368994ull,
+ 6132476610600555153ull, 6629076995306557159ull}},
+{{4545099971522354707ull, 17493835221490349147ull,
+ 3053909744823306037ull, 8286346244133196449ull}},
+{{534844472987777740ull, 13239490022645162169ull,
+ 13437908636583036033ull, 5178966402583247780ull}},
+{{5280241609662110079ull, 2714304473024288999ull,
+ 16797385795728795042ull, 6473708003229059725ull}},
+{{1988615993650249694ull, 12616252628135137057ull,
+ 7161674189378830090ull, 8092135004036324657ull}},
+{{12772100042099875819ull, 12496843911011848564ull,
+ 16005261414430238566ull, 5057584377522702910ull}},
+{{15965125052624844774ull, 6397682851910034897ull,
+ 10783204731183022400ull, 6321980471903378638ull}},
+{{6121348260498892255ull, 7997103564887543622ull,
+ 4255633877124002192ull, 7902475589879223298ull}},
+{{17660900718093971372ull, 4998189728054714763ull,
+ 7271457191629889274ull, 4939047243674514561ull}},
+{{17464439879190076310ull, 15471109196923169262ull,
+ 13701007507964749496ull, 6173809054593143201ull}},
+{{12607177812132819580ull, 892142422444409962ull,
+ 3291201329673773159ull, 7717261318241429002ull}},
+{{12491172151010400142ull, 7475118041668838082ull,
+ 6668686849473496128ull, 4823288323900893126ull}},
+{{6390593151908224369ull, 9343897552086047603ull,
+ 17559230598696645968ull, 6029110404876116407ull}},
+{{3376555421457892557ull, 11679871940107559504ull,
+ 17337352229943419556ull, 7536388006095145509ull}},
+{{2110347138411182848ull, 16523291999422000498ull,
+ 13141688152928331174ull, 4710242503809465943ull}},
+{{11861305959868754368ull, 11430742962422724814ull,
+ 11815424172733026064ull, 5887803129761832429ull}},
+{{5603260412981167152ull, 14288428703028406018ull,
+ 934222160634118868ull, 7359753912202290537ull}},
+{{16227447553081234748ull, 17860535878785507522ull,
+ 5779463719220036489ull, 9199692390252863171ull}},
+{{14753840739103159622ull, 4245305896599860345ull,
+ 1306321815298828854ull, 5749807743908039482ull}},
+{{4607242868596785815ull, 14530004407604601240ull,
+ 10856274305978311875ull, 7187259679885049352ull}},
+{{5759053585745982269ull, 13550819491078363646ull,
+ 13570342882472889844ull, 8984074599856311690ull}},
+{{17434466546373402630ull, 17692634218778753086ull,
+ 13093150319972944056ull, 5615046624910194806ull}},
+{{12569711146111977479ull, 3669048699763889742ull,
+ 7143065863111404263ull, 7018808281137743508ull}},
+{{6488766895785196041ull, 18421368929987025890ull,
+ 8928832328889255328ull, 8773510351422179385ull}},
+{{8667165328293135430ull, 11513355581241891181ull,
+ 17109735251624254340ull, 5483443969638862115ull}},
+{{15445642678793807191ull, 14391694476552363976ull,
+ 16775483046102930021ull, 6854304962048577644ull}},
+{{860309274782707373ull, 4154560040408291259ull, 2522609733919110911ull,
+ 8567881202560722056ull}},
+{{16678594361235049772ull, 9514129052896263892ull,
+ 1576631083699444319ull, 5354925751600451285ull}},
+{{2401498877834260599ull, 7280975297692941962ull,
+ 6582474873051693303ull, 6693657189500564106ull}},
+{{12225245634147601557ull, 4489533103688789548ull,
+ 17451465628169392437ull, 8367071486875705132ull}},
+{{16864150558197026781ull, 5111801199019187419ull,
+ 1683793980751094465ull, 5229419679297315708ull}},
+{{16468502179318895572ull, 11001437517201372178ull,
+ 2104742475938868081ull, 6536774599121644635ull}},
+{{11362255687293843657ull, 18363482914929103127ull,
+ 16465986150205748813ull, 8170968248902055793ull}},
+{{14018938832199734142ull, 13783019831044383406ull,
+ 3373712316237511152ull, 5106855155563784871ull}},
+{{8300301503394891869ull, 17228774788805479258ull,
+ 18052198450579052652ull, 6383568944454731088ull}},
+{{1152004842388839029ull, 3089224412297297457ull,
+ 4118503989514264200ull, 7979461180568413861ull}},
+{{12249218072561494153ull, 1930765257685810910ull,
+ 4879908002660109077ull, 4987163237855258663ull}},
+{{6088150553847091883ull, 7025142590534651542ull,
+ 1488198984897748442ull, 6233954047319073329ull}},
+{{16833560229163640662ull, 18004800275023090235ull,
+ 6471934749549573456ull, 7792442559148841661ull}},
+{{8215132134013581462ull, 11253000171889431397ull,
+ 6350802227682177362ull, 4870276599468026038ull}},
+{{14880601185944364731ull, 4842878178007013438ull,
+ 17161874821457497511ull, 6087845749335032547ull}},
+{{9377379445575680106ull, 1441911704081378894ull,
+ 16840657508394483985ull, 7609807186668790684ull}},
+{{1249176135057412162ull, 12430409861119331569ull,
+ 1302038905891776682ull, 4756129491667994178ull}},
+{{6173156187249153107ull, 6314640289544388653ull,
+ 10850920669219496661ull, 5945161864584992722ull}},
+{{12328131252488829288ull, 12504986380357873720ull,
+ 4340278799669595018ull, 7431452330731240903ull}},
+{{7705082032805518305ull, 12427302506151058979ull,
+ 9630203277434578742ull, 4644657706707025564ull}},
+{{5019666522579509977ull, 6310756095834047916ull,
+ 12037754096793223428ull, 5805822133383781955ull}},
+{{6274583153224387471ull, 7888445119792559895ull,
+ 10435506602564141381ull, 7257277666729727444ull}},
+{{3231542923103096435ull, 14472242418168087773ull,
+ 13044383253205176726ull, 9071597083412159305ull}},
+{{4325557336153129224ull, 4433465492927666954ull,
+ 1235210505612153598ull, 5669748177132599566ull}},
+{{14630318707046187338ull, 14765203903014359500ull,
+ 10767385168869967805ull, 7087185221415749457ull}},
+{{18287898383807734172ull, 4621446823485785663ull,
+ 18070917479514847661ull, 8858981526769686821ull}},
+{{18347465517520915714ull, 5194247273892309991ull,
+ 13600166433910473740ull, 5536863454231054263ull}},
+{{18322645878473756738ull, 6492809092365387489ull,
+ 12388522023960704271ull, 6921079317788817829ull}},
+{{9068249292810032210ull, 3504325347029346458ull,
+ 1650594474668716627ull, 8651349147236022287ull}},
+{{10279341826433658036ull, 18331104406389199200ull,
+ 7949150574309029747ull, 5407093217022513929ull}},
+{{12849177283042072545ull, 18302194489559111096ull,
+ 14548124236313675088ull, 6758866521278142411ull}},
+{{16061471603802590681ull, 4430999038239337254ull,
+ 13573469276964705957ull, 8448583151597678014ull}},
+{{5426733733949231272ull, 5075217408113279736ull,
+ 3871732279675553319ull, 5280364469748548759ull}},
+{{6783417167436539089ull, 1732335741714211766ull, 227979331167053745ull,
+ 6600455587185685949ull}},
+{{17702643496150449669ull, 6777105695570152611ull,
+ 4896660182386205085ull, 8250569483982107436ull}},
+{{8758309175880337092ull, 6541534068945039334ull,
+ 12283784650846153986ull, 5156605927488817147ull}},
+{{1724514432995645556ull, 17400289623036074976ull,
+ 10743044795130304578ull, 6445757409361021434ull}},
+{{2155643041244556945ull, 12526989991940317912ull,
+ 4205433957058104915ull, 8057196761701276793ull}},
+{{1347276900777848091ull, 5523525735749004743ull,
+ 14157611269229785332ull, 5035747976063297995ull}},
+{{15519154181254473826ull, 6904407169686255928ull,
+ 13085328068109843761ull, 6294684970079122494ull}},
+{{952198652858540666ull, 13242194980535207815ull,
+ 7133288048282528893ull, 7868356212598903118ull}},
+{{7512653185677669772ull, 10582214872048198836ull,
+ 18293363085458744270ull, 4917722632874314448ull}},
+{{9390816482097087215ull, 4004396553205472737ull,
+ 4419959783113878722ull, 6147153291092893061ull}},
+{{16350206621048746923ull, 14228867728361616729ull,
+ 10136635747319736306ull, 7683941613866116326ull}},
+{{3301350110514384971ull, 13504728348653398360ull,
+ 1723711323647447287ull, 4802463508666322704ull}},
+{{4126687638142981214ull, 12269224417389360046ull,
+ 2154639154559309109ull, 6003079385832903380ull}},
+{{14381731584533502325ull, 1501472466454536345ull,
+ 2693298943199136387ull, 7503849232291129225ull}},
+{{2071053212692357097ull, 17079321356029942880ull,
+ 13212526885567930001ull, 4689905770181955765ull}},
+{{2588816515865446372ull, 7514093639755264888ull,
+ 2680600551677748790ull, 5862382212727444707ull}},
+{{3236020644831807964ull, 169245012839305302ull,
+ 17185808744879349700ull, 7327977765909305883ull}},
+{{13268397842894535763ull, 211556266049131627ull,
+ 16870574912671799221ull, 9159972207386632354ull}},
+{{5986905642595390900ull, 2438065675494401219ull,
+ 15155795338847262417ull, 5724982629616645221ull}},
+{{2871946034816850721ull, 7659268112795389428ull,
+ 5109686118276914309ull, 7156228287020806527ull}},
+{{3589932543521063401ull, 14185771159421624689ull,
+ 1775421629418754982ull, 8945285358776008159ull}},
+{{13772922885769134386ull, 4254420956211127526ull,
+ 8027167546027803720ull, 5590803349235005099ull}},
+{{7992781570356642174ull, 5318026195263909408ull,
+ 5422273414107366746ull, 6988504186543756374ull}},
+{{9990976962945802718ull, 15870904780934662568ull,
+ 16001213804488984240ull, 8735630233179695467ull}},
+{{6244360601841126699ull, 9919315488084164105ull,
+ 7694915618591921198ull, 5459768895737309667ull}},
+{{12417136770728796277ull, 3175772323250429323ull,
+ 5006958504812513594ull, 6824711119671637084ull}},
+{{10909734944983607443ull, 13193087440917812462ull,
+ 6258698131015641992ull, 8530888899589546355ull}},
+{{2206898322187366748ull, 8245679650573632789ull,
+ 1605843322671082293ull, 5331805562243466472ull}},
+{{7370308921161596339ull, 14918785581644428890ull,
+ 2007304153338852866ull, 6664756952804333090ull}},
+{{18436258188306771231ull, 9425109940200760304ull,
+ 11732502228528341891ull, 8330946191005416362ull}},
+{{11522661367691732020ull, 3584850703411781238ull,
+ 11944499911257601586ull, 5206841369378385226ull}},
+{{5179954672759889217ull, 13704435416119502356ull,
+ 5707252852217226174ull, 6508551711722981533ull}},
+{{6474943340949861521ull, 7907172233294602137ull,
+ 11745752083698920622ull, 8135689639653726916ull}},
+{{15576054634162133211ull, 330296627381738431ull,
+ 16564467089166601197ull, 5084806024783579322ull}},
+{{14858382274275278609ull, 5024556802654560943ull,
+ 11482211824603475688ull, 6356007530979474153ull}},
+{{13961291824416710357ull, 6280696003318201179ull,
+ 517706725472180898ull, 7945009413724342692ull}},
+{{6419964381046750021ull, 8537121020501263641ull,
+ 9546938740274888869ull, 4965630883577714182ull}},
+{{12636641494735825431ull, 15283087294053967455ull,
+ 2710301388488835278ull, 6207038604472142728ull}},
+{{11184115849992393884ull, 9880487080712683511ull,
+ 3387876735611044098ull, 7758798255590178410ull}},
+{{13907601433886328034ull, 10786990443872815098ull,
+ 6729108978184290465ull, 4849248909743861506ull}},
+{{8161129755503134234ull, 18095424073268406777ull,
+ 17634758259585138889ull, 6061561137179826882ull}},
+{{14813098212806305697ull, 8784222036303344759ull,
+ 12820075787626647804ull, 7576951421474783603ull}},
+{{16175715410645022917ull, 14713510809544366282ull,
+ 5706704358052960925ull, 4735594638421739752ull}},
+{{10996272226451502838ull, 4556830456648294141ull,
+ 7133380447566201157ull, 5919493298027174690ull}},
+{{18357026301491766451ull, 10307724089237755580ull,
+ 18140097596312527254ull, 7399366622533968362ull}},
+{{2249769401577578224ull, 1830641537346209334ull,
+ 15949247016122717438ull, 4624604139083730226ull}},
+{{12035583788826748588ull, 11511673958537537475ull,
+ 10713186733298620989ull, 5780755173854662783ull}},
+{{10432793717606047831ull, 554534392889758132ull,
+ 8779797398195888333ull, 7225943967318328479ull}},
+{{13040992147007559788ull, 5304854009539585569ull,
+ 6363060729317472512ull, 9032429959147910599ull}},
+{{1233091064238643012ull, 3315533755962240981ull,
+ 10894441983464502176ull, 5645268724467444124ull}},
+{{6153049848725691669ull, 4144417194952801226ull,
+ 13618052479330627720ull, 7056585905584305155ull}},
+{{16914684347761890394ull, 5180521493691001532ull,
+ 12410879580735896746ull, 8820732381980381444ull}},
+{{1348305680496405688ull, 7849511951984263862ull,
+ 16980171774814711274ull, 5512957738737738402ull}},
+{{10908754137475282918ull, 588517903125554019ull,
+ 12001842681663613285ull, 6891197173422173003ull}},
+{{9024256653416715744ull, 5347333397334330428ull,
+ 10390617333652128702ull, 8613996466777716254ull}},
+{{14863532445240223148ull, 17177141428616120229ull,
+ 1882449815105192534ull, 5383747791736072659ull}},
+{{4744357501268115223ull, 12248054748915374479ull,
+ 16188120324163654380ull, 6729684739670090823ull}},
+{{1318760858157756124ull, 15310068436144218099ull,
+ 15623464386777180071ull, 8412105924587613529ull}},
+{{16965126600844455242ull, 16486321800231218167ull,
+ 2847136214094655688ull, 5257566202867258456ull}},
+{{16594722232628181148ull, 2161158176579471093ull,
+ 3558920267618319611ull, 6571957753584073070ull}},
+{{6908344735503062723ull, 16536505776006502579ull,
+ 13672022371377675321ull, 8214947191980091337ull}},
+{{2011872450475720250ull, 3417787082362982256ull,
+ 1627484954469965220ull, 5134341994987557086ull}},
+{{2514840563094650313ull, 4272233852953727820ull,
+ 11257728229942232333ull, 6417927493734446357ull}},
+{{3143550703868312891ull, 9951978334619547679ull, 237102232145626704ull,
+ 8022409367168057947ull}},
+{{8882248217558777413ull, 6219986459137217299ull,
+ 16289089959586874354ull, 5014005854480036216ull}},
+{{6491124253521083862ull, 16998355110776297432ull,
+ 1914618375774041326ull, 6267507318100045271ull}},
+{{8113905316901354827ull, 12024571851615595982ull,
+ 16228331024999715370ull, 7834384147625056588ull}},
+{{459504804635958863ull, 12127043425687135393ull, 919334853770046298ull,
+ 4896490092265660368ull}},
+{{5186067024222336483ull, 5935432245254143433ull,
+ 1149168567212557873ull, 6120612615332075460ull}},
+{{11094269798705308508ull, 12030976324995067195ull,
+ 1436460709015697341ull, 7650765769165094325ull}},
+{{4628075614977123865ull, 9825203212335610949ull,
+ 3203630952348504790ull, 4781728605728183953ull}},
+{{10396780537148792736ull, 3058131978564737878ull,
+ 8616224708863018892ull, 5977160757160229941ull}},
+{{3772603634581215111ull, 3822664973205922348ull,
+ 15381966904506161519ull, 7471450946450287426ull}},
+{{11581249308468035253ull, 9306694635894783323ull,
+ 14225415333743738853ull, 4669656841531429641ull}},
+{{9864875617157656162ull, 16245054313295867058ull,
+ 3946711111897509854ull, 5837071051914287052ull}},
+{{3107722484592294394ull, 11082945854765058015ull,
+ 4933388889871887318ull, 7296338814892858815ull}},
+{{17719711161022531705ull, 4630310281601546710ull,
+ 1555050093912471244ull, 9120423518616073519ull}},
+{{6463133457211694412ull, 12117315962855742502ull,
+ 7889435336336376383ull, 5700264699135045949ull}},
+{{17302288858369393822ull, 10534958935142290223ull,
+ 14473480188847858383ull, 7125330873918807436ull}},
+{{17016175054534354374ull, 8557012650500474875ull,
+ 18091850236059822979ull, 8906663592398509295ull}},
+{{8329266399870277532ull, 3042289897349102845ull,
+ 18224935425178471218ull, 5566664745249068309ull}},
+{{15023269018265234819ull, 13026234408541154364ull,
+ 8946111226190925310ull, 6958330931561335387ull}},
+{{332342199121991907ull, 7059420973821667148ull, 6570953014311268734ull,
+ 8697913664451669234ull}},
+{{9431085911306020750ull, 18247196163920705679ull,
+ 8718531652371930862ull, 5436196040282293271ull}},
+{{7177171370705138034ull, 13585623168046106291ull,
+ 6286478547037525674ull, 6795245050352866589ull}},
+{{4359778194954034638ull, 7758656923202857056ull,
+ 12469784202224294997ull, 8494056312941083236ull}},
+{{2724861371846271649ull, 7155003586215479612ull,
+ 17016987163244960181ull, 5308785195588177022ull}},
+{{3406076714807839561ull, 13555440501196737419ull,
+ 12047861917201424418ull, 6635981494485221278ull}},
+{{18092653948791963163ull, 7720928589641145965ull,
+ 5836455359647004715ull, 8294976868106526598ull}},
+{{13613751727208670929ull, 2519737359312022276ull,
+ 17482842655061541659ull, 5184360542566579123ull}},
+{{17017189659010838661ull, 16984729754422191557ull,
+ 17241867300399539169ull, 6480450678208223904ull}},
+{{7436429018481384614ull, 7395854137745575735ull,
+ 3105590051789872346ull, 8100563347760279881ull}},
+{{11565297164191947240ull, 9234094854518372738ull,
+ 13470208828437139976ull, 5062852092350174925ull}},
+{{5233249418385158242ull, 11542618568147965923ull,
+ 3002702980264261258ull, 6328565115437718657ull}},
+{{1929875754554059899ull, 5204901173330181596ull,
+ 8365064743757714477ull, 7910706394297148321ull}},
+{{10429544383451063245ull, 5558906242545057449ull,
+ 16757380510917041308ull, 4944191496435717700ull}},
+{{17648616497741216960ull, 6948632803181321811ull,
+ 2499981564936750019ull, 6180239370544647126ull}},
+{{17449084603749133296ull, 4074104985549264360ull,
+ 12348348993025713332ull, 7725299213180808907ull}},
+{{10905677877343208310ull, 11769687652823066033ull,
+ 5411875111427376880ull, 4828312008238005567ull}},
+{{18243783365106398291ull, 14712109566028832541ull,
+ 2153157870856833196ull, 6035390010297506959ull}},
+{{8969671151100834152ull, 18390136957536040677ull,
+ 16526505393853205207ull, 7544237512871883698ull}},
+{{7911887478651715297ull, 18411364626101107279ull,
+ 14940751889585641158ull, 4715148445544927311ull}},
+{{5278173329887256217ull, 13790833745771608291ull,
+ 14064253843554663544ull, 5893935556931159139ull}},
+{{1986030643931682368ull, 17238542182214510364ull,
+ 12968631286015941526ull, 7367419446163948924ull}},
+{{2482538304914602959ull, 12324805690913362147ull,
+ 16210789107519926908ull, 9209274307704936155ull}},
+{{17692487505067484514ull, 16926375593675627149ull,
+ 7825900182986260365ull, 5755796442315585097ull}},
+{{8280551326052191930ull, 7322911436812370225ull,
+ 14394061247160213361ull, 7194745552894481371ull}},
+{{14962375175992627817ull, 13765325314442850685ull,
+ 13380890540522878797ull, 8993431941118101714ull}},
+{{11657327494209086338ull, 10909171330740475630ull,
+ 12974742606254187152ull, 5620894963198813571ull}},
+{{5348287330906582114ull, 13636464163425594538ull,
+ 11606742239390346036ull, 7026118703998516964ull}},
+{{15908731200488003450ull, 17045580204281993172ull,
+ 14508427799237932545ull, 8782648379998146205ull}},
+{{719584963450226349ull, 3735958600035163877ull,
+ 11373610383737401793ull, 5489155237498841378ull}},
+{{5511167222740170840ull, 9281634268471342750ull,
+ 4993640942816976433ull, 6861444046873551723ull}},
+{{16112331065279989357ull, 16213728854016566341ull,
+ 1630365160093832637ull, 8576805058591939654ull}},
+{{12376049925013687301ull, 12439423542974047915ull,
+ 14854036280340809110ull, 5360503161619962283ull}},
+{{10858376387839721222ull, 6325907391862784086ull,
+ 13955859331998623484ull, 6700628952024952854ull}},
+{{4349598447944875719ull, 7907384239828480108ull,
+ 8221452128143503547ull, 8375786190031191068ull}},
+{{11941871066820323132ull, 2636272140679106115ull,
+ 14361779616944465525ull, 5234866368769494417ull}},
+{{10315652815098016011ull, 7907026194276270548ull,
+ 4117166465898418194ull, 6543582960961868022ull}},
+{{12894566018872520014ull, 660410705990562377ull,
+ 14369830119227798551ull, 8179478701202335027ull}},
+{{1141574734154243153ull, 7330285718885183342ull,
+ 6675300815303680142ull, 5112174188251459392ull}},
+{{10650340454547579749ull, 18386229185461254985ull,
+ 8344126019129600177ull, 6390217735314324240ull}},
+{{17924611586611862590ull, 9147728426544405019ull,
+ 10430157523912000222ull, 7987772169142905300ull}},
+{{8897039232418720167ull, 1105644248162865233ull,
+ 15742220489299775947ull, 4992357605714315812ull}},
+{{15732985058950788113ull, 15217113365485745253ull,
+ 1231031537915168317ull, 6240447007142894766ull}},
+{{5831173268406321429ull, 5186333651575017855ull,
+ 10762161459248736205ull, 7800558758928618457ull}},
+{{10562012320395032749ull, 5547301541448080111ull,
+ 18255565958098929888ull, 4875349224330386535ull}},
+{{8590829382066403032ull, 6934126926810100139ull,
+ 18207771429196274456ull, 6094186530412983169ull}},
+{{6126850709155615886ull, 8667658658512625174ull,
+ 8924656231213179358ull, 7617733163016228962ull}},
+{{17664339748504423641ull, 805600643143002829ull,
+ 10189596162935625003ull, 4761083226885143101ull}},
+{{8245366630348365839ull, 14842058859210917249ull,
+ 17348681222096919157ull, 5951354033606428876ull}},
+{{14918394306362845203ull, 4717515518731482849ull,
+ 3239107453911597331ull, 7439192542008036096ull}},
+{{2406467413835696396ull, 642604189993482829ull, 2024442158694748332ull,
+ 4649495338755022560ull}},
+{{7619770285722008399ull, 803255237491853536ull, 2530552698368435415ull,
+ 5811869173443778200ull}},
+{{9524712857152510499ull, 14839127102146980632ull,
+ 3163190872960544268ull, 7264836466804722750ull}},
+{{11905891071440638123ull, 102164803974174174ull,
+ 13177360628055456144ull, 9081045583505903437ull}},
+{{2829495901223010923ull, 63853002483858859ull, 10541693401748354042ull,
+ 5675653489691189648ull}},
+{{17371927931810927366ull, 9303188289959599381ull,
+ 13177116752185442552ull, 7094566862113987060ull}},
+{{7879851859481495495ull, 11628985362449499227ull,
+ 16471395940231803190ull, 8868208577642483825ull}},
+{{2619064402962240733ull, 2656429833103549113ull,
+ 3377093435003795138ull, 5542630361026552391ull}},
+{{7885516522130188820ull, 12543909328234212199ull,
+ 18056424849036907634ull, 6928287951283190488ull}},
+{{5245209634235348120ull, 6456514623437989441ull,
+ 4123786987586582927ull, 8660359939103988111ull}},
+{{14807471067465562335ull, 10952850667289825256ull,
+ 9494895894882696185ull, 5412724961939992569ull}},
+{{62594760622401303ull, 18302749352539669475ull,
+ 16480305887030758135ull, 6765906202424990711ull}},
+{{13913301506060165341ull, 18266750672247198939ull,
+ 15988696340361059765ull, 8457382753031238389ull}},
+{{6389970432073909386ull, 13722562179368193289ull,
+ 12298778221939356305ull, 5285864220644523993ull}},
+{{12599149058519774637ull, 3318144668928077899ull,
+ 1538414722142031670ull, 6607330275805654992ull}},
+{{11137250304722330392ull, 13371052873014873182ull,
+ 1923018402677539587ull, 8259162844757068740ull}},
+{{2349095422024068591ull, 6051065036420601787ull,
+ 10425258538528238050ull, 5161976777973167962ull}},
+{{16771427332812249451ull, 16787203332380528041ull,
+ 3808201136305521754ull, 6452470972466459953ull}},
+{{7129226110733148101ull, 11760632128620884244ull,
+ 9371937438809290097ull, 8065588715583074941ull}},
+{{13679138356062993371ull, 432866052746970796ull,
+ 8163303908469500263ull, 5040992947239421838ull}},
+{{17098922945078741714ull, 14376140621215877207ull,
+ 980757848732099520ull, 6301241184049277298ull}},
+{{16761967662921039239ull, 17970175776519846509ull,
+ 10449319347769900208ull, 7876551480061596622ull}},
+{{12782072798539343476ull, 11231359860324904068ull,
+ 1919138573928799726ull, 4922844675038497889ull}},
+{{15977590998174179345ull, 4815827788551354277ull,
+ 7010609235838387562ull, 6153555843798122361ull}},
+{{6136930692435560469ull, 15243156772543968655ull,
+ 13374947563225372356ull, 7691944804747652951ull}},
+{{10753110710413307150ull, 303600945985204601ull,
+ 15276871254656939579ull, 4807465502967283094ull}},
+{{18053074406444021841ull, 14214559237763669463ull,
+ 9872717031466398665ull, 6009331878709103868ull}},
+{{17954656989627639397ull, 3933140991922423117ull,
+ 12340896289332998332ull, 7511664848386379835ull}},
+{{13527503627730968575ull, 11681585156806290256ull,
+ 5407217171619430005ull, 4694790530241487397ull}},
+{{16909379534663710719ull, 766923390725699108ull,
+ 11370707482951675411ull, 5868488162801859246ull}},
+{{2689980344620086783ull, 14793712293689287598ull,
+ 4990012316834818455ull, 7335610203502324058ull}},
+{{12585847467629884286ull, 13880454348684221593ull,
+ 15460887432898298877ull, 9169512754377905072ull}},
+{{948625639627595823ull, 10981126977141332448ull,
+ 9663054645561436798ull, 5730945471486190670ull}},
+{{1185782049534494779ull, 4503036684571889752ull,
+ 2855446270097020190ull, 7163681839357738338ull}},
+{{1482227561918118473ull, 14852167892569637998ull,
+ 12792679874476051045ull, 8954602299197172922ull}},
+{{14761450281480987758ull, 11588447942069717700ull,
+ 12607110939974919807ull, 5596626436998233076ull}},
+{{5068778141683081ull, 9873873909159759222ull, 15758888674968649759ull,
+ 6995783046247791345ull}},
+{{9229708009531879659ull, 7730656368022311123ull,
+ 5863552788428648487ull, 8744728807809739182ull}},
+{{3462724496743730835ull, 11749189257655026308ull,
+ 17499778548050069016ull, 5465455504881086988ull}},
+{{4328405620929663544ull, 14686486572068782885ull,
+ 3427979111353034654ull, 6831819381101358736ull}},
+{{10022193044589467334ull, 9134736178231202798ull,
+ 4284973889191293318ull, 8539774226376698420ull}},
+{{1652184634441029180ull, 1097524092967113845ull,
+ 11901480717599334132ull, 5337358891485436512ull}},
+{{6676916811478674379ull, 1371905116208892306ull,
+ 14876850896999167665ull, 6671698614356795640ull}},
+{{17569518051203118781ull, 6326567413688503286ull,
+ 149319547539407965ull, 8339623267945994551ull}},
+{{6369262763574561335ull, 6259947642769008506ull,
+ 7010853744853211834ull, 5212264542466246594ull}},
+{{17184950491322977476ull, 17048306590316036440ull,
+ 17986939217921290600ull, 6515330678082808242ull}},
+{{3034444040444170229ull, 2863639164185493935ull,
+ 13260301985546837443ull, 8144163347603510303ull}},
+{{8814056552918688249ull, 17930675542111791373ull,
+ 15205217768607855257ull, 5090102092252193939ull}},
+{{15629256709575748215ull, 8578286372357575504ull,
+ 14394836192332431168ull, 6362627615315242424ull}},
+{{1089826813260133653ull, 10722857965446969381ull,
+ 17993545240415538960ull, 7953284519144053030ull}},
+{{2986984767501277485ull, 6701786228404355863ull,
+ 6634279756832323946ull, 4970802824465033144ull}},
+{{17568789014658760569ull, 17600604822360220636ull,
+ 8292849696040404932ull, 6213503530581291430ull}},
+{{3514242194613899095ull, 3554011954240724180ull,
+ 1142690083195730358ull, 7766879413226614288ull}},
+{{11419773408488462742ull, 16056315526682616324ull,
+ 714181301997331473ull, 4854299633266633930ull}},
+{{14274716760610578428ull, 6235336353071106693ull,
+ 10116098664351440150ull, 6067874541583292412ull}},
+{{4008337895481059323ull, 17017542478193659175ull,
+ 12645123330439300187ull, 7584843176979115515ull}},
+{{9422740212316743933ull, 8330121039657343032ull,
+ 5597359072310868665ull, 4740526985611947197ull}},
+{{11778425265395929916ull, 15024337317999066694ull,
+ 11608384858815973735ull, 5925658732014933996ull}},
+{{5499659544890136587ull, 14168735629071445464ull,
+ 14510481073519967169ull, 7407073415018667495ull}},
+{{3437287215556335367ull, 1937930740528571559ull,
+ 15986579698591061337ull, 4629420884386667184ull}},
+{{18131667074727582921ull, 7034099444088102352ull,
+ 1536480549529275055ull, 5786776105483333981ull}},
+{{4217839769699927035ull, 4180938286682740037ull,
+ 6532286705338981723ull, 7233470131854167476ull}},
+{{9883985730552296697ull, 614486839926037142ull, 8165358381673727154ull,
+ 9041837664817709345ull}},
+{{1565805063167797532ull, 4995740293381161118ull,
+ 16632564034614549231ull, 5651148540511068340ull}},
+{{11180628365814522723ull, 1632989348299063493ull,
+ 2343960969558634923ull, 7063935675638835426ull}},
+{{140727401985989691ull, 15876294740655993079ull,
+ 12153323248803069461ull, 8829919594548544282ull}},
+{{7005483653882325413ull, 12228527222123689626ull,
+ 12207513048929306317ull, 5518699746592840176ull}},
+{{17980226604207682574ull, 1450600972372448320ull,
+ 15259391311161632897ull, 6898374683241050220ull}},
+{{4028539181550051602ull, 6424937233892948305ull, 627495065242489505ull,
+ 8622968354051312776ull}},
+{{14047052034537252011ull, 15544800817251562450ull,
+ 392184415776555940ull, 5389355221282070485ull}},
+{{8335443006316789206ull, 984256947854901447ull, 5101916538148082830ull,
+ 6736694026602588106ull}},
+{{5807617739468598603ull, 10453693221673402617ull,
+ 15600767709539879345ull, 8420867533253235132ull}},
+{{15158976133236343887ull, 18062773309614346395ull,
+ 527107781607648782ull, 5263042208283271958ull}},
+{{14337034148118041955ull, 13355094600163157186ull,
+ 9882256763864336786ull, 6578802760354089947ull}},
+{{8697920648292776636ull, 7470496213349170675ull,
+ 7741134936403033079ull, 8223503450442612434ull}},
+{{3130357395969291446ull, 11586589160984313528ull,
+ 9449895353679283578ull, 5139689656526632771ull}},
+{{3912946744961614307ull, 5259864414375616102ull,
+ 7200683173671716569ull, 6424612070658290964ull}},
+{{14114555468056793691ull, 11186516536396908031ull,
+ 9000853967089645711ull, 8030765088322863705ull}},
+{{15739126195176577913ull, 13909101862889149375ull,
+ 17154748775499498329ull, 5019228180201789815ull}},
+{{15062221725543334487ull, 3551319273329273007ull,
+ 16831749950946985008ull, 6274035225252237269ull}},
+{{14216091138501780205ull, 4439149091661591259ull,
+ 7204629383401567548ull, 7842544031565296587ull}},
+{{6579213952349918676ull, 11997840219143270345ull,
+ 2197050355412285765ull, 4901590019728310367ull}},
+{{12835703458864786249ull, 1162242218646924219ull,
+ 16581370999547520919ull, 6126987524660387958ull}},
+{{11432943305153594908ull, 15287860828590818986ull,
+ 11503341712579625340ull, 7658734405825484948ull}},
+{{11757275584148384721ull, 331540981014486058ull,
+ 16412960607217041646ull, 4786709003640928092ull}},
+{{5473222443330705094ull, 9637798263122883381ull,
+ 2069456685311750441ull, 5983386254551160116ull}},
+{{11453214072590769271ull, 16658933847330992130ull,
+ 2586820856639688051ull, 7479232818188950145ull}},
+{{11769944813796618699ull, 8105990645368176129ull,
+ 13145978081468274792ull, 4674520511368093840ull}},
+{{877372961963609661ull, 10132488306710220162ull,
+ 16432472601835343490ull, 5843150639210117300ull}},
+{{10320088239309287884ull, 3442238346532999394ull,
+ 2093846678584627747ull, 7303938299012646626ull}},
+{{3676738262281834047ull, 18137855988448412955ull,
+ 11840680385085560491ull, 9129922873765808282ull}},
+{{18438862478422003944ull, 9030316983566564144ull,
+ 12012111259105863211ull, 5706201796103630176ull}},
+{{4601834024317953313ull, 6676210211030817277ull,
+ 15015139073882329014ull, 7132752245129537720ull}},
+{{10363978548824829546ull, 17568634800643297404ull,
+ 322179768643359651ull, 8915940306411922151ull}},
+{{15700858629870294274ull, 8674553741188366925ull,
+ 7118891383043181638ull, 5572462691507451344ull}},
+{{5791015232055704131ull, 1619820139630682849ull,
+ 8898614228803977048ull, 6965578364384314180ull}},
+{{11850455058497018067ull, 2024775174538353561ull,
+ 11123267786004971310ull, 8706972955480392725ull}},
+{{489005383919554436ull, 15100542539368634688ull,
+ 9257885375466801020ull, 5441858097175245453ull}},
+{{611256729899443045ull, 428934100501241744ull, 16184042737760889180ull,
+ 6802322621469056816ull}},
+{{764070912374303806ull, 536167625626552180ull, 1783309348491559859ull,
+ 8502903276836321021ull}},
+{{9700916357088715687ull, 16476005830512452776ull,
+ 3420411352020918863ull, 5314314548022700638ull}},
+{{12126145446360894609ull, 15983321269713178066ull,
+ 13498886226880924387ull, 6642893185028375797ull}},
+{{5934309771096342453ull, 15367465568714084679ull,
+ 3038549728318991772ull, 8303616481285469747ull}},
+{{10626472634576295889ull, 381293943591527116ull,
+ 18039994644695227522ull, 5189760300803418591ull}},
+{{13283090793220369861ull, 9699989466344184703ull,
+ 17938307287441646498ull, 6487200376004273239ull}},
+{{11992177473098074423ull, 2901614796075455071ull,
+ 17811198090874670219ull, 8109000470005341549ull}},
+{{14412639948327378370ull, 17954410312043017083ull,
+ 13437841816010362838ull, 5068125293753338468ull}},
+{{13404113916981835059ull, 13219640853198995546ull,
+ 16797302270012953548ull, 6335156617191673085ull}},
+{{7531770359372518015ull, 16524551066498744433ull,
+ 7161569782234028223ull, 7918945771489591357ull}},
+{{16236571520676293520ull, 17245373444202797126ull,
+ 6781824123109961591ull, 4949341107180994598ull}},
+{{11072342363990591092ull, 16945030786826108504ull,
+ 17700652190742227797ull, 6186676383976243247ull}},
+{{13840427954988238864ull, 7346230428250471918ull,
+ 17514129220000396843ull, 7733345479970304059ull}},
+{{4038581453440261386ull, 2285551008442850997ull,
+ 8640487753286554075ull, 4833340924981440037ull}},
+{{9659912835227714637ull, 16691996815835727458ull,
+ 15412295710035580497ull, 6041676156226800046ull}},
+{{2851519007179867488ull, 7029937964512495611ull,
+ 10041997600689699814ull, 7552095195283500058ull}},
+{{17923100443983274844ull, 18228769283102473468ull,
+ 10887934518858450287ull, 4720059497052187536ull}},
+{{3957131481269541939ull, 18174275585450703932ull,
+ 13609918148573062859ull, 5900074371315234420ull}},
+{{4946414351586927424ull, 18106158463385992011ull,
+ 17012397685716328574ull, 7375092964144043025ull}},
+{{1571331921056271376ull, 13409326042377714206ull,
+ 7430439051863247006ull, 9218866205180053782ull}},
+{{14817140505942333322ull, 3769142758058683474ull, 32338388987141475ull,
+ 5761791378237533614ull}},
+{{9298053595573140844ull, 99742429145966439ull, 9263795023088702652ull,
+ 7202239222796917017ull}},
+{{7010880976039038151ull, 124678036432458049ull,
+ 16191429797288266219ull, 9002799028496146271ull}},
+{{15911015656092868605ull, 16218824837266143944ull,
+ 17037172650946248242ull, 5626749392810091419ull}},
+{{1442025496406534140ull, 11050159009727904123ull,
+ 16684779795255422399ull, 7033436741012614274ull}},
+{{15637589925790331387ull, 9201012743732492249ull,
+ 11632602707214502191ull, 8791795926265767843ull}},
+{{2855964675977875261ull, 12668161992473889512ull,
+ 4964533682795369917ull, 5494872453916104902ull}},
+{{3569955844972344076ull, 2000144435310198178ull,
+ 15429039140348988205ull, 6868590567395131127ull}},
+{{13685816843070205903ull, 7111866562565135626ull,
+ 14674612907008847352ull, 8585738209243913909ull}},
+{{13165321545346266593ull, 4444916601603209766ull,
+ 11477476076094223547ull, 5366086380777446193ull}},
+{{7233279894828057434ull, 944459733576624304ull, 511787039835615722ull,
+ 6707607975971807742ull}},
+{{9041599868535071792ull, 10403946703825556188ull,
+ 9863105836649295460ull, 8384509969964759677ull}},
+{{14874371954689195678ull, 15725838726745748425ull,
+ 8470284157119503614ull, 5240318731227974798ull}},
+{{4757906888079330886ull, 10433926371577409724ull,
+ 1364483159544603710ull, 6550398414034968498ull}},
+{{5947383610099163607ull, 3819035927616986347ull,
+ 10928975986285530446ull, 8187998017543710622ull}},
+{{1411271747098283302ull, 16221955510042780179ull,
+ 2218923973001068624ull, 5117498760964819139ull}},
+{{15599147739155017840ull, 1830700313843923607ull,
+ 16608713021533499493ull, 6396873451206023923ull}},
+{{14887248655516384396ull, 6900061410732292413ull,
+ 16149205258489486462ull, 7996091814007529904ull}},
+{{11610373418911434200ull, 18147596436989846470ull,
+ 10093253286555929038ull, 4997557383754706190ull}},
+{{5289594736784516941ull, 13461123509382532280ull,
+ 3393194571340135490ull, 6246946729693382738ull}},
+{{6611993420980646177ull, 7603032349873389542ull,
+ 13464865251029945171ull, 7808683412116728422ull}},
+{{17967553943395067573ull, 2446052209457174511ull,
+ 3803854763466327828ull, 4880427132572955264ull}},
+{{17847756410816446562ull, 3057565261821468139ull,
+ 4754818454332909785ull, 6100533915716194080ull}},
+{{17698009495093170298ull, 8433642595704223078ull,
+ 5943523067916137231ull, 7625667394645242600ull}},
+{{6449569916005843532ull, 12188555649956221280ull,
+ 3714701917447585769ull, 4766042121653276625ull}},
+{{8061962395007304415ull, 1400636507163112888ull,
+ 9255063415236870116ull, 5957552652066595781ull}},
+{{10077452993759130519ull, 1750795633953891110ull,
+ 16180515287473475549ull, 7446940815083244726ull}},
+{{1686722102672068671ull, 3400090280434875896ull,
+ 5501136036243534314ull, 4654338009427027954ull}},
+{{2108402628340085838ull, 13473484887398370678ull,
+ 16099792082159193700ull, 5817922511783784942ull}},
+{{11858875322279883105ull, 16841856109247963347ull,
+ 10901368065844216317ull, 7272403139729731178ull}},
+{{10211908134422465978ull, 7217262081277790472ull,
+ 4403338045450494589ull, 9090503924662163973ull}},
+{{6382442584014041236ull, 6816631810012312997ull,
+ 5057929287620253070ull, 5681564952913852483ull}},
+{{12589739248444939449ull, 17744161799370167054ull,
+ 1710725591097928433ull, 7101956191142315604ull}},
+{{6513802023701398503ull, 8345144193930545106ull,
+ 2138406988872410542ull, 8877445238927894505ull}},
+{{8682812283240761969ull, 604029102779202787ull,
+ 12865719414113726349ull, 5548403274329934065ull}},
+{{6241829335623564557ull, 5366722396901391388ull,
+ 2247091212359994224ull, 6935504092912417582ull}},
+{{7802286669529455696ull, 6708402996126739235ull,
+ 12032236052304768588ull, 8669380116140521977ull}},
+{{2570586159242215858ull, 13416123909433987830ull,
+ 602618505049398511ull, 5418362572587826236ull}},
+{{12436604735907545631ull, 12158468868365096883ull,
+ 753273131311748139ull, 6772953215734782795ull}},
+{{10934069901457044134ull, 10586400067028983200ull,
+ 14776649469421848886ull, 8466191519668478493ull}},
+{{6833793688410652584ull, 2004814023465726596ull,
+ 11541248927602349506ull, 5291369699792799058ull}},
+{{8542242110513315730ull, 11729389566186934053ull,
+ 5203189122648161074ull, 6614212124740998823ull}},
+{{15289488656569032566ull, 5438364920878891758ull,
+ 1892300384882813439ull, 8267765155926248529ull}},
+{{4944244391928257450ull, 10316507103190389205ull,
+ 12711902786620228159ull, 5167353222453905330ull}},
+{{10791991508337709716ull, 8283947860560598602ull,
+ 6666506446420509391ull, 6459191528067381663ull}},
+{{4266617348567361337ull, 5743248807273360349ull,
+ 3721447039598248835ull, 8073989410084227079ull}},
+{{4972478852068294788ull, 1283687495332156266ull,
+ 9243433427389987378ull, 5046243381302641924ull}},
+{{15438970601940144293ull, 10827981406019971140ull,
+ 11554291784237484222ull, 6307804226628302405ull}},
+{{851969178715628750ull, 4311604720670188118ull, 607806675014691566ull,
+ 7884755283285378007ull}},
+{{14367538791979431681ull, 16529811005701031285ull,
+ 7297408199525264084ull, 4927972052053361254ull}},
+{{4124365434692125889ull, 2215519683416737491ull,
+ 18345132286261355914ull, 6159965065066701567ull}},
+{{543770774937769457ull, 11992771641125697672ull,
+ 18319729339399306988ull, 7699956331333376959ull}},
+{{339856734336105911ull, 16718854312558336853ull,
+ 18367359864765648723ull, 4812472707083360599ull}},
+{{5036506936347520293ull, 16286881872270533162ull,
+ 18347513812529673000ull, 6015590883854200749ull}},
+{{15519005707289176174ull, 1911858266628614836ull,
+ 9099334210379927539ull, 7519488604817750937ull}},
+{{476006530200959301ull, 17335812481138741937ull,
+ 17216298927555924471ull, 4699680378011094335ull}},
+{{5206694181178587030ull, 17058079582996039517ull,
+ 16908687641017517685ull, 5874600472513867919ull}},
+{{11120053744900621691ull, 7487541423462885684ull,
+ 16524173532844509203ull, 7343250590642334899ull}},
+{{13900067181125777114ull, 4747740760901219201ull,
+ 16043530897628248600ull, 9179063238302918624ull}},
+{{1770012960562528840ull, 2967337975563262001ull,
+ 10027206811017655375ull, 5736914523939324140ull}},
+{{6824202219130548954ull, 17544230524736241213ull,
+ 12534008513772069218ull, 7171143154924155175ull}},
+{{13141938792340574097ull, 12706916119065525708ull,
+ 11055824623787698619ull, 8963928943655193969ull}},
+{{17437083782067634619ull, 5635979565202259615ull,
+ 18439105435935781397ull, 5602455589784496230ull}},
+{{17184668709157155369ull, 11656660474930212423ull,
+ 13825509758064950938ull, 7003069487230620288ull}},
+{{16869149868019056307ull, 5347453556807989721ull,
+ 17281887197581188673ull, 8753836859038275360ull}},
+{{3625689639870828336ull, 14871373519073463336ull,
+ 10801179498488242920ull, 5471148036898922100ull}},
+{{4532112049838535420ull, 142472825132277554ull,
+ 13501474373110303651ull, 6838935046123652625ull}},
+{{14888512099152945083ull, 14013149086697510654ull,
+ 3041784911105715851ull, 8548668807654565782ull}},
+{{4693634043543202773ull, 6452375169972250207ull,
+ 15736173624723236119ull, 5342918004784103613ull}},
+{{1255356536001615562ull, 3453782944037924855ull,
+ 5835158975621881437ull, 6678647505980129517ull}},
+{{15404253725284183165ull, 8928914698474793972ull,
+ 11905634737954739700ull, 8348309382475161896ull}},
+{{404286541447838670ull, 14803943723401522041ull,
+ 7441021711221712312ull, 5217693364046976185ull}},
+{{5117044195237186241ull, 58185580542350935ull, 13912963157454528295ull,
+ 6522116705058720231ull}},
+{{1784619225619094898ull, 13907790030960102381ull,
+ 12779517928390772464ull, 8152645881323400289ull}},
+{{3421230025225628263ull, 8692368769350063988ull,
+ 1069669677603150934ull, 5095403675827125181ull}},
+{{4276537531532035329ull, 1642088924832804177ull,
+ 5948773115431326572ull, 6369254594783906476ull}},
+{{9957357932842432065ull, 2052611156041005221ull,
+ 7435966394289158215ull, 7961568243479883095ull}},
+{{8529191717240213993ull, 8200411000166710119ull,
+ 11565008024071805740ull, 4975980152174926934ull}},
+{{6049803628122879587ull, 10250513750208387649ull,
+ 5232887993234981367ull, 6219975190218658668ull}},
+{{12173940553580987388ull, 8201456169333096657ull,
+ 6541109991543726709ull, 7774968987773323335ull}},
+{{691183818347035261ull, 7431753115046879363ull,
+ 11005722772355911049ull, 4859355617358327084ull}},
+{{14699037828215957789ull, 13901377412235987107ull,
+ 13757153465444888811ull, 6074194521697908855ull}},
+{{13762111266842559332ull, 12765035746867595980ull,
+ 12584755813378723110ull, 7592743152122386069ull}},
+{{17824691578631375390ull, 3366461323364859583ull,
+ 10171315392575395896ull, 4745464470076491293ull}},
+{{17669178454861831334ull, 4208076654206074479ull,
+ 17325830259146632774ull, 5931830587595614116ull}},
+{{17474787050149901263ull, 14483467854612368907ull,
+ 3210543750223739351ull, 7414788234494517646ull}},
+{{8615898897129994338ull, 15969696436773812423ull,
+ 15841647899172000806ull, 4634242646559073528ull}},
+{{6158187602985105018ull, 10738748509112489721ull,
+ 1355315800255449392ull, 5792803308198841911ull}},
+{{12309420522158769176ull, 13423435636390612151ull,
+ 15529202805601475452ull, 7241004135248552388ull}},
+{{10775089634271073566ull, 16779294545488265189ull,
+ 964759433292292699ull, 9051255169060690486ull}},
+{{9040274030633114931ull, 8181216081716471791ull,
+ 14438032701089846649ull, 5657034480662931553ull}},
+{{6688656519864005760ull, 14838206120572977643ull,
+ 4212482821080144599ull, 7071293100828664442ull}},
+{{3749134631402619296ull, 13936071632288834150ull,
+ 14488975563204956557ull, 8839116376035830552ull}},
+{{16178267199908800772ull, 11015887779394215295ull,
+ 9055609727003097848ull, 5524447735022394095ull}},
+{{15611147981458613061ull, 13769859724242769119ull,
+ 6707826140326484406ull, 6905559668777992619ull}},
+{{14902248958395878422ull, 7988952618448685591ull,
+ 3773096656980717604ull, 8631949585972490774ull}},
+{{16231434626638505870ull, 14216467423385204302ull,
+ 16193243465895112214ull, 5394968491232806733ull}},
+{{11065921246443356529ull, 8547212242376729570ull,
+ 6406496277086726556ull, 6743710614041008417ull}},
+{{4609029521199419854ull, 10684015302970911963ull,
+ 12619806364785796099ull, 8429638267551260521ull}},
+{{574800441535943457ull, 4371666555143126025ull, 969849950350040706ull,
+ 5268523917219537826ull}},
+{{5330186570347317225ull, 14687955230783683339ull,
+ 10435684474792326690ull, 6585654896524422282ull}},
+{{2051047194506758627ull, 9136572001624828366ull,
+ 3821233556635632555ull, 8232068620655527853ull}},
+{{15116962551848887854ull, 3404514491801823776ull,
+ 4694113982110964299ull, 5145042887909704908ull}},
+{{449459116101558201ull, 18090701170034443433ull,
+ 5867642477638705373ull, 6431303609887131135ull}},
+{{5173509913554335655ull, 8778318407260890579ull,
+ 2722867078620993813ull, 8039129512358913919ull}},
+{{927600686757765833ull, 7792292013751750564ull, 8619320951779202989ull,
+ 5024455945224321199ull}},
+{{1159500858447207291ull, 14352051035617076109ull,
+ 6162465171296615832ull, 6280569931530401499ull}},
+{{6061062091486397018ull, 17940063794521345136ull,
+ 3091395445693381886ull, 7850712414413001874ull}},
+{{3788163807178998136ull, 6600853853148452806ull,
+ 6543808171985751583ull, 4906695259008126171ull}},
+{{13958576795828523478ull, 3639381298008178103ull,
+ 3568074196554801575ull, 6133369073760157714ull}},
+{{12836534976358266443ull, 18384284677792386341ull,
+ 13683464782548277776ull, 7666711342200197142ull}},
+{{10328677369437610479ull, 11490177923620241463ull,
+ 3940479470665285706ull, 4791694588875123214ull}},
+{{8299160693369625195ull, 5139350367670526021ull,
+ 14148971375186382941ull, 5989618236093904017ull}},
+{{14985636885139419398ull, 11035873978015545430ull,
+ 3851156163700814964ull, 7487022795117380022ull}},
+{{4754337034784749220ull, 16120793273114491702ull,
+ 16242030657595173064ull, 4679389246948362513ull}},
+{{15166293330335712333ull, 1704247517683563011ull,
+ 6467480266711802619ull, 5849236558685453142ull}},
+{{14346180644492252512ull, 15965367452386617476ull,
+ 17307722370244529081ull, 7311545698356816427ull}},
+{{17932725805615315639ull, 6121651260201108133ull,
+ 17022966944378273448ull, 9139432122946020534ull}},
+{{13513796637723266227ull, 3826032037625692583ull,
+ 6027668321809033001ull, 5712145076841262834ull}},
+{{12280559778726694879ull, 9394226065459503633ull,
+ 16757957439116067059ull, 7140181346051578542ull}},
+{{1515641668126204887ull, 7131096563396991638ull,
+ 11724074762040308016ull, 8925226682564473178ull}},
+{{14782334097861041767ull, 4456935352123119773ull,
+ 11939232744702580414ull, 5578266676602795736ull}},
+{{4642859567044138496ull, 14794541227008675525ull,
+ 14924040930878225517ull, 6972833345753494670ull}},
+{{10415260477232561024ull, 4658118478478680694ull,
+ 9431679126743006089ull, 8716041682191868338ull}},
+{{1897851779842962736ull, 14440539095117645194ull,
+ 10506485472641766709ull, 5447526051369917711ull}},
+{{11595686761658479228ull, 4215615813614892780ull,
+ 8521420822374820483ull, 6809407564212397139ull}},
+{{14494608452073099035ull, 657833748591228071ull,
+ 6040090009541137700ull, 8511759455265496424ull}},
+{{15976659310186768753ull, 9634518129724293352ull,
+ 3775056255963211062ull, 5319849659540935265ull}},
+{{1524080064023909325ull, 2819775625300590883ull,
+ 9330506338381401732ull, 6649812074426169081ull}},
+{{15740158135312050368ull, 3524719531625738603ull,
+ 16274818941404140069ull, 8312265093032711351ull}},
+{{7531755825356337528ull, 4508792716479780579ull,
+ 17089290866018669399ull, 5195165683145444594ull}},
+{{4803008763268034006ull, 1024304877172337820ull,
+ 12138241545668560941ull, 6493957103931805743ull}},
+{{6003760954085042508ull, 5892067114892810179ull,
+ 10561115913658313272ull, 8117446379914757179ull}},
+{{1446507587089457616ull, 3682541946808006362ull,
+ 4294854436822751843ull, 5073403987446723237ull}},
+{{11031506520716597827ull, 18438235488792171664ull,
+ 9980254064455827707ull, 6341754984308404046ull}},
+{{13789383150895747284ull, 18436108342562826676ull,
+ 3251945543715008826ull, 7927193730385505058ull}},
+{{17841736506164617861ull, 16134253732529154576ull,
+ 6644151983249268420ull, 4954496081490940661ull}},
+{{3855426558996220710ull, 1721073091951891605ull,
+ 12916875997488973430ull, 6193120101863675826ull}},
+{{9430969217172663791ull, 11374713401794640314ull,
+ 6922722960006440979ull, 7741400127329594783ull}},
+{{10506041779160302774ull, 4803352866907956244ull,
+ 11244230877645107468ull, 4838375079580996739ull}},
+{{13132552223950378467ull, 6004191083634945305ull,
+ 9443602578628996431ull, 6047968849476245924ull}},
+{{2580632224655809372ull, 2893552836116293728ull,
+ 11804503223286245539ull, 7559961061845307405ull}},
+{{1612895140409880857ull, 17949371587068541244ull,
+ 9683657523767597413ull, 4724975663653317128ull}},
+{{2016118925512351072ull, 8601656428553512843ull,
+ 12104571904709496767ull, 5906219579566646410ull}},
+{{16355206712172602551ull, 6140384517264503149ull,
+ 5907342844032095151ull, 7382774474458308013ull}},
+{{12527847204321570547ull, 10755269350931396324ull,
+ 5997932286733753421ull, 4614234046536442508ull}},
+{{15659809005401963183ull, 18055772707091633309ull,
+ 7497415358417191776ull, 5767792558170553135ull}},
+{{5739703201470290267ull, 4122971810154990021ull,
+ 4760083179594101817ull, 7209740697713191419ull}},
+{{11786315020265250738ull, 9765400781121125430ull,
+ 1338417956065239367ull, 9012175872141489274ull}},
+{{2754760869238393807ull, 13020904515841785250ull,
+ 5448197240968162508ull, 5632609920088430796ull}},
+{{12666823123402768067ull, 16276130644802231562ull,
+ 6810246551210203135ull, 7040762400110538495ull}},
+{{6610156867398684276ull, 15733477287575401549ull,
+ 3901122170585366015ull, 8800953000138173119ull}},
+{{6437191051337871624ull, 16750952332375707824ull,
+ 9355730384256935615ull, 5500595625086358199ull}},
+{{8046488814172339530ull, 16327004397042246876ull,
+ 7082976961893781615ull, 6875744531357947749ull}},
+{{10058111017715424413ull, 15797069477875420691ull,
+ 13465407220794614923ull, 8594680664197434686ull}},
+{{3980476376858446306ull, 7567325414458443980ull,
+ 3804193494569246423ull, 5371675415123396679ull}},
+{{4975595471073057883ull, 4847470749645667071ull, 143555849784170125ull,
+ 6714594268904245849ull}},
+{{1607808320413934449ull, 10671024455484471743ull,
+ 4791130830657600560ull, 8393242836130307311ull}},
+{{7922409227899790887ull, 6669390284677794839ull,
+ 9911985796802082206ull, 5245776772581442069ull}},
+{{5291325516447350705ull, 17560109892702019357ull,
+ 17001668264429990661ull, 6557220965726802586ull}},
+{{11225842913986576285ull, 8115079310595360484ull,
+ 12028713293682712519ull, 8196526207158503233ull}},
+{{16239523858096385986ull, 11989453596763182158ull,
+ 600416780910613468ull, 5122828879474064521ull}},
+{{11076032785765706675ull, 14986816995953977698ull,
+ 5362206994565654739ull, 6403536099342580651ull}},
+{{4621668945352357535ull, 14121835226515084219ull,
+ 2091072724779680520ull, 8004420124178225814ull}},
+{{582700081631529508ull, 8826147016571927637ull,
+ 15141978508269464037ull, 5002762577611391133ull}},
+{{5340061120466799788ull, 15644369789142297450ull,
+ 5092415080054666334ull, 6253453222014238917ull}},
+{{15898448437438275543ull, 10332090199573096004ull,
+ 10977204868495720822ull, 7816816527517798646ull}},
+{{713158236544146407ull, 1845870356305797099ull, 2249067024382437610ull,
+ 4885510329698624154ull}},
+{{14726505850962346720ull, 11530709982237022181ull,
+ 12034705817332822820ull, 6106887912123280192ull}},
+{{4573074258420769688ull, 14413387477796277727ull,
+ 15043382271666028525ull, 7633609890154100240ull}},
+{{9775700439154062911ull, 11314210182836367531ull,
+ 9402113919791267828ull, 4771006181346312650ull}},
+{{7607939530515190735ull, 14142762728545459414ull,
+ 2529270362884308977ull, 5963757726682890813ull}},
+{{286552376289212611ull, 3843395355399660556ull, 7773273972032774126ull,
+ 7454697158353613516ull}},
+{{9402467272035533690ull, 16237180152406951559ull,
+ 14081668269375259636ull, 4659185723971008447ull}},
+{{7141398071617029208ull, 1849731116799137833ull,
+ 12990399318291686642ull, 5823982154963760559ull}},
+{{13538433607948674414ull, 11535535932853698099ull,
+ 11626313129437220398ull, 7279977693704700699ull}},
+{{12311355991508455114ull, 5196047879212346816ull,
+ 9921205393369137594ull, 9099972117130875874ull}},
+{{7694597494692784446ull, 7859215942935104664ull,
+ 10812439389283098900ull, 5687482573206797421ull}},
+{{9618246868365980558ull, 9824019928668880830ull,
+ 18127235255031261529ull, 7109353216508496776ull}},
+{{2799436548602699889ull, 16891710929263488942ull,
+ 4212299995079525295ull, 8886691520635620971ull}},
+{{15584705898158851143ull, 17474848358430762444ull,
+ 326844487711009357ull, 5554182200397263107ull}},
+{{1034138298989012312ull, 8008502392756289344ull,
+ 14243613664920925409ull, 6942727750496578883ull}},
+{{1292672873736265390ull, 14622314009372749584ull,
+ 13192831062723768857ull, 8678409688120723604ull}},
+{{807920546085165869ull, 2221417228216886634ull,
+ 17468891451057131344ull, 5424006055075452252ull}},
+{{10233272719461233144ull, 2776771535271108292ull,
+ 3389370240111862564ull, 6780007568844315316ull}},
+{{12791590899326541430ull, 3470964419088885365ull,
+ 4236712800139828205ull, 8475009461055394145ull}},
+{{10300587321292782346ull, 4475195771144247305ull,
+ 14177160546155862388ull, 5296880913159621340ull}},
+{{17487420170043365836ull, 5593994713930309131ull,
+ 17721450682694827985ull, 6621101141449526675ull}},
+{{17247589194126819391ull, 11604179410840274318ull,
+ 17540127334941147077ull, 8276376426811908344ull}},
+{{6168057227901874216ull, 9558455140988865401ull,
+ 10962579584338216923ull, 5172735266757442715ull}},
+{{12321757553304730674ull, 7336382907808693847ull,
+ 9091538461995383250ull, 6465919083446803394ull}},
+{{10790510923203525438ull, 18393850671615643117ull,
+ 2141051040639453254ull, 8082398854308504243ull}},
+{{9049912336215897351ull, 6884470651332389044ull,
+ 17479057964895515948ull, 5051499283942815151ull}},
+{{11312390420269871688ull, 8605588314165486305ull,
+ 17237136437692007031ull, 6314374104928518939ull}},
+{{305429970055175898ull, 6145299374279469978ull,
+ 16934734528687620885ull, 7892967631160648674ull}},
+{{4802579749711872841ull, 6146655118138362688ull,
+ 15195895098857150957ull, 4933104769475405421ull}},
+{{6003224687139841051ull, 12295004916100341264ull,
+ 5159810818289274984ull, 6166380961844256777ull}},
+{{7504030858924801313ull, 15368756145125426580ull,
+ 11061449541288981634ull, 7707976202305320971ull}},
+{{13913391323682776629ull, 14217158609130779516ull,
+ 4607562954091919569ull, 4817485126440825607ull}},
+{{17391739154603470786ull, 3936390206131310683ull,
+ 1147767674187511558ull, 6021856408051032009ull}},
+{{17127987924826950579ull, 14143859794518914162ull,
+ 6046395611161777351ull, 7527320510063790011ull}},
+{{15316678471444232016ull, 15757441399215403207ull,
+ 1473154247762416892ull, 4704575318789868757ull}},
+{{14534162070877902116ull, 1250057675309702393ull,
+ 6453128828130409020ull, 5880719148487335946ull}},
+{{4332644533315213932ull, 1562572094137127992ull,
+ 17289783072017787083ull, 7350898935609169932ull}},
+{{5415805666644017415ull, 15788273172953573702ull,
+ 3165484766312682237ull, 9188623669511462416ull}},
+{{17219936596934674597ull, 12173513742309677515ull,
+ 1978427978945426398ull, 5742889793444664010ull}},
+{{16913234727740955342ull, 5993520141032321086ull,
+ 11696407010536558806ull, 7178612241805830012ull}},
+{{11918171372821418369ull, 16715272213145177166ull,
+ 14620508763170698507ull, 8973265302257287515ull}},
+{{2837171089585998577ull, 8141202124002041777ull,
+ 6831974967767992615ull, 5608290813910804697ull}},
+{{8158149880409886125ull, 5564816636575164317ull,
+ 13151654728137378673ull, 7010363517388505871ull}},
+{{14809373368939745560ull, 11567706814146343300ull,
+ 11827882391744335437ull, 8762954396735632339ull}},
+{{32486318732565167ull, 9535659768055158515ull, 5086583485626515696ull,
+ 5476846497959770212ull}},
+{{13875665953697870171ull, 11919574710068948143ull,
+ 6358229357033144620ull, 6846058122449712765ull}},
+{{12732896423694949810ull, 14899468387586185179ull,
+ 12559472714718818679ull, 8557572653062140956ull}},
+{{5652217255595649679ull, 16229696769882447593ull,
+ 17073042483554037482ull, 5348482908163838097ull}},
+{{11676957587921950003ull, 11063748925498283683ull,
+ 7506245049160383141ull, 6685603635204797622ull}},
+{{9984510966475049600ull, 18441372175300242508ull,
+ 159434274595703118ull, 8357004544005997028ull}},
+{{15463691390901681808ull, 6914171591135263663ull,
+ 9323018458477090257ull, 5223127840003748142ull}},
+{{14717928220199714356ull, 13254400507346467483ull,
+ 2430401036241587013ull, 6528909800004685178ull}},
+{{13785724256822255041ull, 2732942578900920642ull,
+ 12261373332156759575ull, 8161137250005856472ull}},
+{{13227763678941297305ull, 8625618139454157257ull,
+ 7663358332597974734ull, 5100710781253660295ull}},
+{{2699646543394457919ull, 1558650637462920764ull,
+ 4967511897320080514ull, 6375888476567075369ull}},
+{{3374558179243072398ull, 11171685333683426763ull,
+ 10821075890077488546ull, 7969860595708844211ull}},
+{{18249999926522777913ull, 11593989351979529630ull,
+ 4457329422084736389ull, 4981162872318027632ull}},
+{{13589127871298696583ull, 657428634692248326ull,
+ 5571661777605920487ull, 6226453590397534540ull}},
+{{7763037802268594921ull, 14656843848647474120ull,
+ 6964577222007400608ull, 7783066987996918175ull}},
+{{4851898626417871826ull, 9160527405404671325ull,
+ 11270389791395707236ull, 4864416867498073859ull}},
+{{10676559301449727686ull, 11450659256755839156ull,
+ 9476301220817246141ull, 6080521084372592324ull}},
+{{13345699126812159607ull, 478266015662635233ull,
+ 11845376526021557677ull, 7600651355465740405ull}},
+{{1423532926616517899ull, 2604759269002840973ull,
+ 9709203337977167500ull, 4750407097166087753ull}},
+{{6391102176698035277ull, 3255949086253551216ull,
+ 16748190190898847279ull, 5938008871457609691ull}},
+{{7988877720872544096ull, 17904994413099102732ull,
+ 16323551720196171194ull, 7422511089322012114ull}},
+{{14216420612400115868ull, 15802307526614327111ull,
+ 14813905843549994900ull, 4639069430826257571ull}},
+{{13158839747072756931ull, 1306140334558357273ull,
+ 13905696286010105722ull, 5798836788532821964ull}},
+{{2613491628558782452ull, 10856047455052722400ull,
+ 17382120357512632152ull, 7248545985666027455ull}},
+{{3266864535698478065ull, 13570059318815903000ull,
+ 17115964428463402286ull, 9060682482082534319ull}},
+{{2041790334811548791ull, 3869601055832551471ull,
+ 17615006795430708285ull, 5662926551301583949ull}},
+{{16387295973796599701ull, 9448687338218077242ull,
+ 8183700439006221644ull, 7078658189126979937ull}},
+{{11260747930390973818ull, 11810859172772596553ull,
+ 14841311567185164959ull, 8848322736408724921ull}},
+{{120438428853276780ull, 14299316010623954702ull,
+ 2358290701849646243ull, 5530201710255453076ull}},
+{{9373920072921371783ull, 13262458994852555473ull,
+ 2947863377312057804ull, 6912752137819316345ull}},
+{{16329086109579102633ull, 16578073743565694341ull,
+ 8296515240067460159ull, 8640940172274145431ull}},
+{{12511521827700633098ull, 17278825117369640819ull,
+ 12102851052683244455ull, 5400587607671340894ull}},
+{{11027716266198403468ull, 16986845378284663120ull,
+ 5905191778999279761ull, 6750734509589176118ull}},
+{{13784645332748004335ull, 7398498667573665188ull,
+ 16604861760603875510ull, 8438418136986470147ull}},
+{{17838775369822278517ull, 12375648806152838ull, 8072195591163728242ull,
+ 5274011335616543842ull}},
+{{13075097175423072339ull, 9238841597862466856ull,
+ 866872452099884494ull, 6592514169520679803ull}},
+{{16343871469278840423ull, 2325179960473307762ull,
+ 14918648620407019330ull, 8240642711900849753ull}},
+{{14826605686726663169ull, 6064923493723205255ull,
+ 2406626360113305225ull, 5150401694938031096ull}},
+{{13921571089980941057ull, 12192840385581394473ull,
+ 3008282950141631531ull, 6438002118672538870ull}},
+{{3566905807194012609ull, 10629364463549355188ull,
+ 12983725724531815222ull, 8047502648340673587ull}},
+{{11452688166351033689ull, 2031666771290959088ull,
+ 5808985568618690562ull, 5029689155212920992ull}},
+{{14315860207938792111ull, 11762955500968474668ull,
+ 7261231960773363202ull, 6287111444016151240ull}},
+{{17894825259923490138ull, 5480322339355817527ull,
+ 9076539950966704003ull, 7858889305020189050ull}},
+{{18101794815093263193ull, 1119358452883692002ull,
+ 10284523487781577906ull, 4911805815637618156ull}},
+{{13403871482011803183ull, 10622570102959390811ull,
+ 12855654359726972382ull, 6139757269547022695ull}},
+{{12143153334087366074ull, 4054840591844462706ull,
+ 11457881931231327574ull, 7674696586933778369ull}},
+{{12201156852231991701ull, 16369333425184952903ull,
+ 243647179378497877ull, 4796685366833611481ull}},
+{{10639760046862601722ull, 6626608726199027417ull,
+ 4916244992650510251ull, 5995856708542014351ull}},
+{{17911386077005640056ull, 3671574889321396367ull,
+ 1533620222385749910ull, 7494820885677517939ull}},
+{{18112145325769606891ull, 16129792361108036441ull,
+ 17099413703486951357ull, 4684263053548448711ull}},
+{{8805123601929844902ull, 6327182396102881840ull,
+ 16762581110931301293ull, 5855328816935560889ull}},
+{{11006404502412306127ull, 12520664013555990204ull,
+ 7118168333381962904ull, 7319161021169451112ull}},
+{{13758005628015382659ull, 15650830016944987755ull,
+ 8897710416727453630ull, 9148951276461813890ull}},
+{{6292910508295920210ull, 5170082742163229443ull,
+ 10172755028882046423ull, 5718094547788633681ull}},
+{{3254452116942512358ull, 1850917409276648900ull,
+ 17327629804529945933ull, 7147618184735792101ull}},
+{{4068065146178140448ull, 6925332780023199029ull,
+ 7824479200380268704ull, 8934522730919740127ull}},
+{{4848383725575031732ull, 4328332987514499393ull,
+ 11807828527878749796ull, 5584076706824837579ull}},
+{{10672165675396177569ull, 5410416234393124241ull,
+ 10148099641421049341ull, 6980095883531046974ull}},
+{{17951893112672609865ull, 11374706311418793205ull,
+ 3461752514921535868ull, 8725119854413808718ull}},
+{{13525776204634075118ull, 16332563481491521561ull,
+ 15998653377108123629ull, 5453199909008630448ull}},
+{{3072162200510430185ull, 6580646296582238240ull,
+ 1551572647675602921ull, 6816499886260788061ull}},
+{{3840202750638037731ull, 12837493889155185704ull,
+ 6551151828021891555ull, 8520624857825985076ull}},
+{{2400126719148773582ull, 5717590671508297113ull,
+ 13317841929368458030ull, 5325390536141240672ull}},
+{{7611844417363354882ull, 16370360376240147199ull,
+ 16647302411710572537ull, 6656738170176550840ull}},
+{{4903119503276805698ull, 6627892415018020287ull,
+ 2362383940928664056ull, 8320922712720688551ull}},
+{{9981978717189085417ull, 4142432759386262679ull,
+ 8394018990721496891ull, 5200576695450430344ull}},
+{{7865787378058968868ull, 566354930805440445ull,
+ 10492523738401871114ull, 6500720869313037930ull}},
+{{14443920241001098988ull, 9931315700361576364ull,
+ 3892282636147563084ull, 8125901086641297413ull}},
+{{18250822187480462676ull, 15430444349580761035ull,
+ 4738519656805920879ull, 5078688179150810883ull}},
+{{18201841715923190441ull, 14676369418548563390ull,
+ 1311463552580013195ull, 6348360223938513604ull}},
+{{13528930108049212243ull, 13733775754758316334ull,
+ 1639329440725016494ull, 7935450279923142005ull}},
+{{3843895299103369748ull, 3971923828296559805ull,
+ 3330423909666829261ull, 4959656424951963753ull}},
+{{9416555142306600089ull, 9576590803798087660ull,
+ 8774715905510924480ull, 6199570531189954691ull}},
+{{11770693927883250111ull, 11970738504747609575ull,
+ 6356708863461267696ull, 7749463163987443364ull}},
+{{14274212732568113175ull, 7481711565467255984ull,
+ 13196315076518068118ull, 4843414477492152102ull}},
+{{17842765915710141469ull, 128767419979294172ull,
+ 7272021808792809340ull, 6054268096865190128ull}},
+{{3856713320928125220ull, 160959274974117716ull, 9090027260991011675ull,
+ 7567835121081487660ull}},
+{{11633817862434854071ull, 16241500611354681236ull,
+ 14904639074974158104ull, 4729896950675929787ull}},
+{{14542272328043567589ull, 1855131690483799929ull,
+ 14019112825290309727ull, 5912371188344912234ull}},
+{{4342782354772295774ull, 16153972668386913624ull,
+ 8300518994758111350ull, 7390463985431140293ull}},
+{{2714238971732684859ull, 5484546899314433111ull,
+ 7493667380937513546ull, 4619039990894462683ull}},
+{{17227856769948019785ull, 16079055660997817196ull,
+ 4755398207744504028ull, 5773799988618078354ull}},
+{{3088076888725473115ull, 1652075502537719880ull,
+ 15167619796535405844ull, 7217249985772597942ull}},
+{{3860096110906841394ull, 2065094378172149850ull,
+ 9736152708814481497ull, 9021562482215747428ull}},
+{{7024246087744163775ull, 12819899032426063416ull,
+ 15308467479863826743ull, 5638476551384842142ull}},
+{{8780307609680204719ull, 11413187772105191366ull,
+ 9912212312975007621ull, 7048095689231052678ull}},
+{{1752012475245480091ull, 431426659849325496ull, 3166893354363983719ull,
+ 8810119611538815848ull}},
+{{1095007797028425057ull, 7187170690046910291ull,
+ 1979308346477489824ull, 5506324757211759905ull}},
+{{15203817801567695033ull, 8983963362558637863ull,
+ 7085821451524250184ull, 6882905946514699881ull}},
+{{14393086233532230887ull, 11229954203198297329ull,
+ 13468962832832700634ull, 8603632433143374851ull}},
+{{2078149868316562449ull, 11630407395426323735ull,
+ 6112258761306743944ull, 5377270270714609282ull}},
+{{16432745390677866773ull, 14538009244282904668ull,
+ 16863695488488205738ull, 6721587838393261602ull}},
+{{2094187664637781850ull, 8949139518498855028ull,
+ 11856247323755481365ull, 8401984797991577003ull}},
+{{10532239327253389464ull, 7899055208275478344ull,
+ 5104311568133481901ull, 5251240498744735627ull}},
+{{13165299159066736830ull, 14485505028771735834ull,
+ 1768703441739464472ull, 6564050623430919534ull}},
+{{7233251911978645230ull, 18106881285964669793ull,
+ 11434251339029106398ull, 8205063279288649417ull}},
+{{16049997491055123029ull, 6705114785300530716ull,
+ 228878059252109643ull, 5128164549555405886ull}},
+{{1615752790109352170ull, 3769707463198275492ull,
+ 9509469610919912862ull, 6410205686944257357ull}},
+{{2019690987636690212ull, 13935506365852620173ull,
+ 16498523032077278981ull, 8012757108680321696ull}},
+{{3568149876486625335ull, 11015534487871581560ull,
+ 10311576895048299363ull, 5007973192925201060ull}},
+{{4460187345608281668ull, 9157732091412089046ull,
+ 12889471118810374204ull, 6259966491156501325ull}},
+{{14798606218865127893ull, 11447165114265111307ull,
+ 2276780843230804043ull, 7824958113945626657ull}},
+{{6943285877577010982ull, 4848635187202000615ull,
+ 12952203073087722287ull, 4890598821216016660ull}},
+{{4067421328543875823ull, 1449107965575112865ull,
+ 16190253841359652859ull, 6113248526520020825ull}},
+{{9695962679107232682ull, 15646443012251054793ull,
+ 6402759246417402361ull, 7641560658150026032ull}},
+{{17589191720510490187ull, 2861497855015827389ull,
+ 4001724529010876476ull, 4775975411343766270ull}},
+{{8151431595355949021ull, 3576872318769784237ull,
+ 14225527698118371403ull, 5969969264179707837ull}},
+{{14800975512622324180ull, 18306148453744394008ull,
+ 3946851567365800541ull, 7462461580224634797ull}},
+{{9250609695388952613ull, 13747185792803940207ull,
+ 4772625238817319290ull, 4664038487640396748ull}},
+{{6951576100808802862ull, 7960610204150149451ull,
+ 5965781548521649113ull, 5830048109550495935ull}},
+{{4077784107583615673ull, 14562448773615074718ull,
+ 2845540917224673487ull, 7287560136938119919ull}},
+{{14320602171334295400ull, 13591374948591455493ull,
+ 17391984201813005571ull, 9109450171172649898ull}},
+{{11256219366297628577ull, 6188766333655965731ull,
+ 15481676144560516386ull, 5693406356982906186ull}},
+{{9458588189444647817ull, 16959329953924732972ull,
+ 10128723143845869674ull, 7116757946228632733ull}},
+{{11823235236805809771ull, 11975790405551140407ull,
+ 17272589948234724997ull, 8895947432785790916ull}},
+{{14307051050644712963ull, 9790712012683156706ull,
+ 1571996680791927315ull, 5559967145491119323ull}},
+{{8660441776451115396ull, 7626703997426557979ull,
+ 15800053906272072856ull, 6949958931863899153ull}},
+{{6213866202136506341ull, 9533379996783197474ull,
+ 5915009327557927358ull, 8687448664829873942ull}},
+{{8495352394762704367ull, 1346676479562110517ull,
+ 17531938885005868311ull, 5429655415518671213ull}},
+{{15230876511880768363ull, 15518403654734801858ull,
+ 8079865550975171676ull, 6787069269398339017ull}},
+{{9815223602996184645ull, 951260494708950707ull,
+ 14711517957146352500ull, 8483836586747923771ull}},
+{{3828671742658921452ull, 9817909846047870000ull,
+ 6888855714002776360ull, 5302397866717452357ull}},
+{{4785839678323651814ull, 12272387307559837500ull,
+ 13222755660930858354ull, 6627997333396815446ull}},
+{{5982299597904564768ull, 6117112097595021067ull,
+ 7305072539308797135ull, 8284996666746019308ull}},
+{{1433094239476659028ull, 10740724088637970023ull,
+ 13789042373922774017ull, 5178122916716262067ull}},
+{{15626425854627987497ull, 18037591129224850432ull,
+ 12624616948976079617ull, 6472653645895327584ull}},
+{{1086288244575432755ull, 8711930856248899329ull,
+ 15780771186220099522ull, 8090817057369159480ull}},
+{{12208145198928115232ull, 10056642803582949984ull,
+ 9862981991387562201ull, 5056760660855724675ull}},
+{{15260181498660144040ull, 17182489522906075384ull,
+ 7717041470807064847ull, 6320950826069655844ull}},
+{{628482799615628434ull, 16866425885205206327ull,
+ 9646301838508831059ull, 7901188532587069805ull}},
+{{7310330777400849627ull, 8235673169039560002ull,
+ 8334781658281713364ull, 4938242832866918628ull}},
+{{18361285508605837842ull, 10294591461299450002ull,
+ 10418477072852141705ull, 6172803541083648285ull}},
+{{13728234848902521494ull, 17479925345051700407ull,
+ 17634782359492565035ull, 7716004426354560356ull}},
+{{15497675808205157790ull, 8619110331443618802ull,
+ 1798366937828077339ull, 4822502766471600223ull}},
+{{10148722723401671430ull, 6162201895877135599ull,
+ 16083016727567260386ull, 6028128458089500278ull}},
+{{8074217385824701383ull, 16926124406701195307ull,
+ 10880398872604299674ull, 7535160572611875348ull}},
+{{2740542856926744413ull, 15190513772615634971ull,
+ 16023621332232463104ull, 4709475357882422092ull}},
+{{17260736626440594228ull, 541398142059992097ull,
+ 1582782591581027265ull, 5886844197353027616ull}},
+{{7740862727768579072ull, 5288433696002378026ull,
+ 1978478239476284081ull, 7358555246691284520ull}},
+{{452706372855948032ull, 11222228138430360437ull,
+ 2473097799345355101ull, 9198194058364105650ull}},
+{{2588784492248661472ull, 9319735595732669225ull,
+ 6157372143018234842ull, 5748871286477566031ull}},
+{{7847666633738214744ull, 2426297457811060723ull,
+ 3085029160345405649ull, 7186089108096957539ull}},
+{{5197897273745380526ull, 7644557840691213808ull,
+ 17691344505713920773ull, 8982611385121196923ull}},
+{{3248685796090862829ull, 7083691659645702582ull,
+ 8751247306857506531ull, 5614132115700748077ull}},
+{{13284229281968354344ull, 4242928556129740323ull,
+ 15550745151999271068ull, 7017665144625935096ull}},
+{{11993600584033055026ull, 5303660695162175404ull,
+ 991687366289537219ull, 8772081430782418871ull}},
+{{16719372401875435200ull, 1008944925262665675ull,
+ 7537333631572042618ull, 5482550894239011794ull}},
+{{16287529483916906095ull, 10484553193433107902ull,
+ 198295002610277464ull, 6853188617798764743ull}},
+{{11136039818041356811ull, 13105691491791384878ull,
+ 14082926808545010542ull, 8566485772248455928ull}},
+{{2348338867848460103ull, 3579371163942227645ull,
+ 8801829255340631589ull, 5354053607655284955ull}},
+{{7547109603237963033ull, 9085899973355172460ull,
+ 6390600550748401582ull, 6692567009569106194ull}},
+{{9433887004047453791ull, 2134002929839189767ull,
+ 17211622725290277786ull, 8365708761961382742ull}},
+{{12813708405170740475ull, 5945437849576881508ull,
+ 6145578184879035712ull, 5228567976225864214ull}},
+{{16017135506463425594ull, 7431797311971101885ull,
+ 16905344767953570448ull, 6535709970282330267ull}},
+{{6186361327797118281ull, 9289746639963877357ull,
+ 16519994941514575156ull, 8169637462852912834ull}},
+{{6172318839086892878ull, 15029463686832199156ull,
+ 14936682856873997376ull, 5106023414283070521ull}},
+{{7715398548858616097ull, 340085534830697329ull, 4835795515810333009ull,
+ 6382529267853838152ull}},
+{{14255934204500658025ull, 5036792936965759565ull,
+ 6044744394762916261ull, 7978161584817297690ull}},
+{{11215801887026605218ull, 5453838594817293680ull,
+ 8389651265154210567ull, 4986350990510811056ull}},
+{{14019752358783256522ull, 2205612225094229196ull,
+ 10487064081442763209ull, 6232938738138513820ull}},
+{{17524690448479070652ull, 7368701299795174399ull,
+ 13108830101803454011ull, 7791173422673142275ull}},
+{{17870460557940501014ull, 2299595303158290047ull,
+ 5887175804413464805ull, 4869483389170713922ull}},
+{{17726389678998238363ull, 7486180147375250463ull,
+ 16582341792371606814ull, 6086854236463392402ull}},
+{{17546301080320410050ull, 134353147364287271ull,
+ 11504555203609732710ull, 7608567795579240503ull}},
+{{17883967202841338137ull, 13919028772384843256ull,
+ 14107876029897164799ull, 4755354872237025314ull}},
+{{3908214929842121056ull, 12787099947053666167ull,
+ 8411473000516680191ull, 5944193590296281643ull}},
+{{273582643875263416ull, 11372188915389694805ull,
+ 5902655232218462335ull, 7430241987870352054ull}},
+{{2476832161635733587ull, 14025147099759641109ull,
+ 17524217575418702671ull, 4643901242418970033ull}},
+{{7707726220472054887ull, 12919747856272163482ull,
+ 8070213913991214627ull, 5804876553023712542ull}},
+{{411285738735292801ull, 11537998801912816449ull, 864395355634242476ull,
+ 7256095691279640678ull}},
+{{5125793191846503905ull, 14422498502391020561ull,
+ 10303866231397578903ull, 9070119614099550847ull}},
+{{14732835790972534701ull, 15931590591635469706ull,
+ 13357445422264568670ull, 5668824758812219279ull}},
+{{9192672701860892568ull, 10691116202689561325ull,
+ 12085120759403322934ull, 7086030948515274099ull}},
+{{16102526895753503614ull, 4140523216507175848ull,
+ 10494714930826765764ull, 8857538685644092624ull}},
+{{10064079309845939759ull, 11811199047171760713ull,
+ 6559196831766728602ull, 5535961678527557890ull}},
+{{17191785155734812603ull, 5540626772109925083ull,
+ 17422368076563186561ull, 6919952098159447362ull}},
+{{16878045426241127849ull, 11537469483564794258ull,
+ 12554588058849207393ull, 8649940122699309203ull}},
+{{15160464409828092810ull, 293389399586914555ull,
+ 5540774527567060669ull, 5406212576687068252ull}},
+{{14338894493857728108ull, 4978422767911031098ull,
+ 6925968159458825836ull, 6757765720858835315ull}},
+{{8700246080467384327ull, 6223028459888788873ull,
+ 4045774180896144391ull, 8447207151073544144ull}},
+{{16966868846360584965ull, 10806921815071574901ull,
+ 2528608863060090244ull, 5279504469420965090ull}},
+{{7373528002668567494ull, 13508652268839468627ull,
+ 12384133115679888613ull, 6599380586776206362ull}},
+{{4605223984908321463ull, 3050757280767172072ull,
+ 6256794357745084959ull, 8249225733470257953ull}},
+{{2878264990567700915ull, 8824252328120564401ull,
+ 15439711519659147859ull, 5155766083418911220ull}},
+{{8209517256637014047ull, 6418629391723317597ull, 852895325864383208ull,
+ 6444707604273639026ull}},
+{{14873582589223655463ull, 8023286739654146996ull,
+ 10289491194185254818ull, 8055884505342048782ull}},
+{{72617081410008856ull, 9626240230711229777ull, 1819245977938396357ull,
+ 5034927815838780489ull}},
+{{4702457370189898974ull, 16644486306816425125ull,
+ 6885743490850383350ull, 6293659769798475611ull}},
+{{10489757731164761622ull, 11582235846665755598ull,
+ 3995493345135591284ull, 7867074712248094514ull}},
+{{1944412563550588110ull, 16462269441020873057ull,
+ 7108869359137132456ull, 4916921695155059071ull}},
+{{7042201722865623041ull, 2131092727566539705ull,
+ 4274400680494027667ull, 6146152118943823839ull}},
+{{13414438172009416705ull, 16498923964740338343ull,
+ 731314832190146679ull, 7682690148679779799ull}},
+{{15301552885146967297ull, 17229356505603793320ull,
+ 7374600797759923530ull, 4801681342924862374ull}},
+{{680197032724157505ull, 12313323595149965843ull,
+ 18441623034054680221ull, 6002101678656077967ull}},
+{{14685304346187360593ull, 1556596438655293591ull,
+ 18440342774140962373ull, 7502627098320097459ull}},
+{{16095844244008182227ull, 3278715783373252446ull,
+ 9219371224624407531ull, 4689141936450060912ull}},
+{{10896433268155451976ull, 17933452784498729270ull,
+ 11524214030780509413ull, 5861427420562576140ull}},
+{{4397169548339539161ull, 8581757925341247876ull,
+ 14405267538475636767ull, 7326784275703220175ull}},
+{{5496461935424423952ull, 6115511388249171941ull,
+ 13394898404667158055ull, 9158480344629025219ull}},
+{{5741131718853958922ull, 10739723645296814319ull,
+ 6065968493703279832ull, 5724050215393140762ull}},
+{{2564728630140060748ull, 13424654556621017899ull,
+ 16805832653983875598ull, 7155062769241425952ull}},
+{{17040968842957239647ull, 7557446158921496565ull,
+ 2560546743770292882ull, 8943828461551782441ull}},
+{{12956448536061968732ull, 9335089867753323257ull,
+ 13129556760924902811ull, 5589892788469864025ull}},
+{{2360502614795297203ull, 7057176316264266168ull,
+ 2576887895873964802ull, 6987365985587330032ull}},
+{{2950628268494121503ull, 18044842432185108518ull,
+ 3221109869842456002ull, 8734207481984162540ull}},
+{{15679200723090989652ull, 15889712538543080727ull,
+ 11236565705506310809ull, 5458879676240101587ull}},
+{{14987314885436349160ull, 6027082617896687197ull,
+ 9434021113455500608ull, 6823599595300126984ull}},
+{{4899085551513272738ull, 7533853272370858997ull,
+ 11792526391819375760ull, 8529499494125158730ull}},
+{{5367771478909489414ull, 4708658295231786873ull,
+ 11982015013314497754ull, 5330937183828224206ull}},
+{{11321400367064249671ull, 15109194905894509399ull,
+ 5754146729788346384ull, 6663671479785280258ull}},
+{{9540064440402924185ull, 439749558658585133ull,
+ 16416055449090208789ull, 8329589349731600322ull}},
+{{8268383284465521568ull, 2580686483375309660ull,
+ 14871720674108768397ull, 5205993343582250201ull}},
+{{10335479105581901959ull, 7837544122646524979ull,
+ 4754592787353796784ull, 6507491679477812752ull}},
+{{8307662863549989545ull, 9796930153308156224ull,
+ 5943240984192245980ull, 8134364599347265940ull}},
+{{5192289289718743466ull, 15346453382672373448ull,
+ 12937897651974929545ull, 5083977874592041212ull}},
+{{6490361612148429332ull, 5348008673058303098ull,
+ 16172372064968661932ull, 6354972343240051515ull}},
+{{17336324052040312473ull, 6685010841322878872ull,
+ 15603779062783439511ull, 7943715429050064394ull}},
+{{10835202532525195296ull, 11095660803467881151ull,
+ 14364047932667037598ull, 4964822143156290246ull}},
+{{8932317147229106216ull, 4646203967480075631ull,
+ 8731687878979021190ull, 6206027678945362808ull}},
+{{6553710415608994866ull, 15031126996204870347ull,
+ 10914609848723776487ull, 7757534598681703510ull}},
+{{1790226000541927839ull, 16311983400269125823ull,
+ 2209945137024972400ull, 4848459124176064694ull}},
+{{16072840555959573511ull, 1943235176626855662ull,
+ 11985803458135991309ull, 6060573905220080867ull}},
+{{10867678658094691080ull, 7040729989210957482ull,
+ 10370568304242601232ull, 7575717381525101084ull}},
+{{11403985179736569829ull, 4400456243256848426ull,
+ 15704977227006401578ull, 4734823363453188177ull}},
+{{5031609437815936479ull, 14723942340925836341ull,
+ 5796163478475838260ull, 5918529204316485222ull}},
+{{10901197815697308502ull, 18404927926157295426ull,
+ 16468576384949573633ull, 7398161505395606527ull}},
+{{11424934653238205718ull, 4585550926207227785ull,
+ 17210389268234565377ull, 4623850940872254079ull}},
+{{446110261265593435ull, 10343624676186422636ull,
+ 16901300566865818817ull, 5779813676090317599ull}},
+{{557637826581991794ull, 17541216863660416199ull,
+ 16514939690154885617ull, 7224767095112896999ull}},
+{{14532105338509653455ull, 8091463024293356536ull,
+ 16031988594266219118ull, 9030958868891121249ull}},
+{{9082565836568533409ull, 445478371755959931ull, 3102463843775305093ull,
+ 5644349293056950781ull}},
+{{6741521277283278858ull, 5168533983122337818ull,
+ 8489765823146519270ull, 7055436616321188476ull}},
+{{17650273633458874380ull, 15684039515757698080ull,
+ 10612207278933149087ull, 8819295770401485595ull}},
+{{11031421020911796488ull, 16720053724989643156ull,
+ 4326786540119524227ull, 5512059856500928497ull}},
+{{13789276276139745609ull, 16288381137809666041ull,
+ 10020169193576793188ull, 6890074820626160621ull}},
+{{3401537289892518300ull, 1913732348552530936ull,
+ 17136897510398379390ull, 8612593525782700776ull}},
+{{2125960806182823937ull, 15031140773127495547ull,
+ 10710560943998987118ull, 5382870953614187985ull}},
+{{16492509063010693634ull, 9565553929554593625ull,
+ 17999887198426121802ull, 6728588692017734981ull}},
+{{6780578273481203330ull, 2733570375088466224ull,
+ 8664800942750488541ull, 8410735865022168727ull}},
+{{4237861420925752081ull, 4014324493643985342ull,
+ 12333029616860137194ull, 5256709915638855454ull}},
+{{14520698813011965910ull, 14241277653909757485ull,
+ 6192914984220395684ull, 6570887394548569318ull}},
+{{4315815460982793675ull, 17801597067387196857ull,
+ 16964515767130270413ull, 8213609243185711647ull}},
+{{14226599709182715807ull, 13431841176330691987ull,
+ 17520351382097500864ull, 5133505776991069779ull}},
+{{13171563618051006855ull, 16789801470413364984ull,
+ 17288753209194488176ull, 6416882221238837224ull}},
+{{16464454522563758568ull, 2540507764307154614ull,
+ 3164197437783558605ull, 8021102776548546531ull}},
+{{5678598058174961201ull, 3893660361905665586ull,
+ 18118524463110581792ull, 5013189235342841581ull}},
+{{16321619609573477309ull, 4867075452382081982ull,
+ 8813097523606063528ull, 6266486544178551977ull}},
+{{11178652475112070829ull, 6083844315477602478ull,
+ 15628057922934967314ull, 7833108180223189971ull}},
+{{2374971778517656364ull, 8414088715600889453ull,
+ 7461693192620660619ull, 4895692612639493732ull}},
+{{7580400741574458359ull, 5905924876073723912ull,
+ 9327116490775825774ull, 6119615765799367165ull}},
+{{9475500926968072949ull, 16605778131946930698ull,
+ 16270581631897170121ull, 7649519707249208956ull}},
+{{10533874097782433497ull, 3461082304825749830ull,
+ 945741483080955518ull, 4780949817030755598ull}},
+{{3943970585373266063ull, 13549724917886963096ull,
+ 10405548890705970205ull, 5976187271288444497ull}},
+{{4929963231716582579ull, 3102098092076540158ull,
+ 17618622131809850661ull, 7470234089110555621ull}},
+{{16916285075105027824ull, 4244654316761531550ull,
+ 13317481841594850615ull, 4668896305694097263ull}},
+{{11921984307026508972ull, 694131877524526534ull,
+ 12035166283566175365ull, 5836120382117621579ull}},
+{{5679108346928360407ull, 5479350865333046072ull,
+ 10432271836030331302ull, 7295150477647026974ull}},
+{{7098885433660450508ull, 16072560618521083398ull,
+ 3816967758183138319ull, 9118938097058783718ull}},
+{{18271861451319945280ull, 16962879414216758979ull,
+ 16220662904146625161ull, 5699336310661739823ull}},
+{{18228140795722543696ull, 7368541212488785012ull,
+ 15664142611755893548ull, 7124170388327174779ull}},
+{{4338431920943628004ull, 9210676515610981266ull,
+ 14968492246267479031ull, 8905212985408968474ull}},
+{{7323205969017155406ull, 12674201849897945147ull,
+ 13966993672344562298ull, 5565758115880605296ull}},
+{{4542321442844056354ull, 6619380275517655626ull,
+ 17458742090430702873ull, 6957197644850756620ull}},
+{{14901273840409846250ull, 12885911362824457436ull,
+ 3376683539328826975ull, 8696497056063445776ull}},
+{{89924113401378099ull, 14971223629406367754ull, 2110427212080516859ull,
+ 5435310660039653610ull}},
+{{9335777178606498431ull, 14102343518330571788ull,
+ 11861406051955421882ull, 6794138325049567012ull}},
+{{11669721473258123039ull, 8404557361058438927ull,
+ 14826757564944277353ull, 8492672906311958765ull}},
+{{14211104948427408755ull, 16782063396729994089ull,
+ 11572566487303867297ull, 5307920566444974228ull}},
+{{3928823130252097232ull, 7142521190630328900ull,
+ 14465708109129834122ull, 6634900708056217785ull}},
+{{4911028912815121540ull, 18151523525142686933ull,
+ 4247077081130128940ull, 8293625885070272232ull}},
+{{5375236079723144915ull, 2121330166359403525ull,
+ 2654423175706330588ull, 5183516178168920145ull}},
+{{11330731118081319047ull, 2651662707949254406ull,
+ 7929714988060301139ull, 6479395222711150181ull}},
+{{4940041860746873001ull, 17149636440218731720ull,
+ 14523829753502764327ull, 8099244028388937726ull}},
+{{3087526162966795626ull, 17636051802777789181ull,
+ 4465707577511839800ull, 5062027517743086079ull}},
+{{8471093722135882436ull, 3598320679762684860ull, 970448453462411847ull,
+ 6327534397178857599ull}},
+{{10588867152669853045ull, 18332958904985519787ull,
+ 15048118622110178520ull, 7909417996473571998ull}},
+{{4312198961204964201ull, 11458099315615949867ull,
+ 4793388120391473671ull, 4943386247795982499ull}},
+{{778562683078817348ull, 9710938126092549430ull, 1380049132061954185ull,
+ 6179232809744978124ull}},
+{{10196575390703297492ull, 16750358676043074691ull,
+ 1725061415077442731ull, 7724041012181222655ull}},
+{{4067016609975866981ull, 8163131163313227730ull,
+ 7995692412064483563ull, 4827525632613264159ull}},
+{{14307142799324609534ull, 5592227935714146758ull,
+ 5382929496653216550ull, 6034407040766580199ull}},
+{{8660556462300986109ull, 16213656956497459256ull,
+ 2116975852389132783ull, 7543008800958225249ull}},
+{{5412847788938116319ull, 17051064625451993891ull,
+ 12852324953811677749ull, 4714380500598890780ull}},
+{{2154373717745257494ull, 7478772726532828652ull,
+ 16065406192264597187ull, 5892975625748613475ull}},
+{{2692967147181571867ull, 4736779889738647911ull,
+ 15470071721903358580ull, 7366219532185766844ull}},
+{{17201266989259128546ull, 5920974862173309888ull,
+ 890845578669646609ull, 9207774415232208556ull}},
+{{10750791868286955342ull, 15229824334926788440ull,
+ 9780150523523304938ull, 5754859009520130347ull}},
+{{13438489835358694177ull, 9813908381803709742ull,
+ 7613502135976743269ull, 7193573761900162934ull}},
+{{7574740257343591913ull, 16879071495682025082ull,
+ 293505633116153278ull, 8991967202375203668ull}},
+{{9345898679267132850ull, 5937733666373877772ull,
+ 9406813057552371607ull, 5619979501484502292ull}},
+{{11682373349083916062ull, 2810481064539959311ull,
+ 11758516321940464509ull, 7024974376855627865ull}},
+{{9991280667927507173ull, 8124787349102337043ull, 863087347143416924ull,
+ 8781217971069534832ull}},
+{{3938707408240998032ull, 14301364130043736460ull,
+ 539429591964635577ull, 5488261231918459270ull}},
+{{4923384260301247539ull, 4041647107272506863ull,
+ 9897659026810570280ull, 6860326539898074087ull}},
+{{1542544306949171520ull, 5052058884090633579ull,
+ 7760387765085824946ull, 8575408174872592609ull}},
+{{17104991256339089864ull, 7769222820984033890ull,
+ 16379457399247110351ull, 5359630109295370380ull}},
+{{12157867033569086522ull, 5099842507802654459ull,
+ 2027577675349336323ull, 6699537636619212976ull}},
+{{10585647773533970249ull, 1763117116325930170ull,
+ 2534472094186670404ull, 8374422045774016220ull}},
+{{11227715876886119310ull, 10325320234558482164ull,
+ 10807417095721444810ull, 5234013778608760137ull}},
+{{14034644846107649137ull, 3683278256343326897ull,
+ 18120957388079193917ull, 6542517223260950171ull}},
+{{3708248002352397709ull, 9215783838856546526ull,
+ 18039510716671604492ull, 8178146529076187714ull}},
+{{16152713056752412280ull, 14983236936140117386ull,
+ 15886380216347140711ull, 5111341580672617321ull}},
+{{10967519284085739542ull, 14117360151747758829ull,
+ 6022917215151762177ull, 6389176975840771652ull}},
+{{18321085123534562332ull, 3811642134402534824ull,
+ 7528646518939702722ull, 7986471219800964565ull}},
+{{11450678202209101457ull, 6993962352428972169ull,
+ 7011247083551008153ull, 4991544512375602853ull}},
+{{478289697479213110ull, 13354138958963603116ull,
+ 13375744872866148095ull, 6239430640469503566ull}},
+{{597862121849016387ull, 12080987680277115991ull,
+ 7496309054227909311ull, 7799288300586879458ull}},
+{{7291192853796717098ull, 14468146327814279350ull,
+ 9296879177319831223ull, 4874555187866799661ull}},
+{{18337363104100672180ull, 13473496891340461283ull,
+ 16232784990077176933ull, 6093193984833499576ull}},
+{{18310017861698452321ull, 3006813058893412892ull,
+ 1844237163886919551ull, 7616492481041874471ull}},
+{{2220389126706756893ull, 8796787189449464914ull,
+ 8070177255070406575ull, 4760307800651171544ull}},
+{{11998858445238221924ull, 6384297968384443238ull,
+ 10087721568838008219ull, 5950384750813964430ull}},
+{{5775201019693001597ull, 3368686442053166144ull,
+ 3386279924192734466ull, 7437980938517455538ull}},
+{{3609500637308125998ull, 6717115044710616744ull,
+ 6728110971047846945ull, 4648738086573409711ull}},
+{{4511875796635157498ull, 13008079824315658834ull,
+ 3798452695382420777ull, 5810922608216762139ull}},
+{{14863216782648722680ull, 2425041725112409830ull,
+ 136379850800638068ull, 7263653260270952674ull}},
+{{9355648941456127542ull, 3031302156390512288ull,
+ 9393846850355573393ull, 9079566575338690842ull}},
+{{5847280588410079714ull, 13423778893812539940ull,
+ 10482840299899621274ull, 5674729109586681776ull}},
+{{7309100735512599642ull, 7556351580410899117ull,
+ 13103550374874526593ull, 7093411386983352220ull}},
+{{13748061937818137457ull, 14057125493941011800ull,
+ 16379437968593158241ull, 8866764233729190275ull}},
+{{8592538711136335911ull, 1868174406072050519ull,
+ 7931305721157029949ull, 5541727646080743922ull}},
+{{6128987370493031984ull, 6946904026017451053ull, 690760114591511628ull,
+ 6927159557600929903ull}},
+{{12272920231543677884ull, 8683630032521813816ull,
+ 14698508198521553247ull, 8658949447001162378ull}},
+{{7670575144714798678ull, 12344797797967215491ull,
+ 13798253642503358683ull, 5411843404375726486ull}},
+{{4976532912466110443ull, 10819311229031631460ull,
+ 8024445016274422546ull, 6764804255469658108ull}},
+{{6220666140582638054ull, 4300766999434763517ull,
+ 10030556270343028183ull, 8456005319337072635ull}},
+{{6193759347077842736ull, 9605508402287809054ull,
+ 3963254659750698662ull, 5285003324585670397ull}},
+{{16965571220702079228ull, 2783513466004985509ull,
+ 9565754343115761232ull, 6606254155732087996ull}},
+{{7371905970595435322ull, 3479391832506231887ull,
+ 11957192928894701540ull, 8257817694665109995ull}},
+{{11524970259263228933ull, 11397991932171170737ull,
+ 5167402571345494510ull, 5161136059165693747ull}},
+{{571154768796872454ull, 5024117878359187614ull, 1847567195754480234ull,
+ 6451420073957117184ull}},
+{{9937315497850866375ull, 15503519384803760325ull,
+ 2309458994693100292ull, 8064275092446396480ull}},
+{{8516665195370485437ull, 466327578647574395ull, 1443411871683187683ull,
+ 5040171932778997800ull}},
+{{6034145475785718892ull, 14417967528591631706ull,
+ 1804264839603984603ull, 6300214915973747250ull}},
+{{16766053881586924422ull, 13410773392312151728ull,
+ 11478703086359756562ull, 7875268644967184062ull}},
+{{10478783675991827764ull, 12993419388622482734ull,
+ 2562503410547459947ull, 4922042903104490039ull}},
+{{3875107558135008897ull, 11630088217350715514ull,
+ 17038187318466488646ull, 6152553628880612548ull}},
+{{14067256484523536929ull, 5314238234833618584ull,
+ 2850990074373559192ull, 7690692036100765686ull}},
+{{8792035302827210581ull, 3321398896771011615ull,
+ 15616926851765638207ull, 4806682522562978553ull}},
+{{6378358110106625322ull, 17986806676245928231ull,
+ 5686100509424884046ull, 6008353153203723192ull}},
+{{3361261619205893748ull, 13260136308452634481ull,
+ 7107625636781105058ull, 7510441441504653990ull}},
+{{13630003558072153353ull, 12899271211210284454ull,
+ 18277324078270354373ull, 4694025900940408743ull}},
+{{7814132410735415883ull, 2289030958730691856ull,
+ 18234969079410555063ull, 5867532376175510929ull}},
+{{9767665513419269854ull, 16696346753695528532ull,
+ 8958653293981030116ull, 7334415470219388662ull}},
+{{12209581891774087317ull, 2423689368409859049ull,
+ 1974944580621511838ull, 9168019337774235828ull}},
+{{713459654717722717ull, 15349863910538325618ull,
+ 10457712399743220706ull, 5730012086108897392ull}},
+{{10115196605251929205ull, 9963957851318131214ull,
+ 13072140499679025883ull, 7162515107636121740ull}},
+{{3420623719710135698ull, 7843261295720276114ull,
+ 16340175624598782354ull, 8953143884545152175ull}},
+{{6749575843246222715ull, 9513724328252560475ull,
+ 17130138793015320827ull, 5595714927840720109ull}},
+{{3825283785630390490ull, 7280469391888312690ull,
+ 7577615435986987322ull, 6994643659800900137ull}},
+{{14004976768892763920ull, 18323958776715166670ull,
+ 14083705313411122056ull, 8743304574751125171ull}},
+{{4141424462130589546ull, 11452474235446979169ull,
+ 6496472811668257333ull, 5464565359219453232ull}},
+{{9788466596090624837ull, 480534739026560249ull, 8120591014585321667ull,
+ 6830706699024316540ull}},
+{{16847269263540668950ull, 14435726479065364023ull,
+ 10150738768231652083ull, 8538383373780395675ull}},
+{{17447072317353999950ull, 6716486040202158562ull,
+ 4038368720931088600ull, 5336489608612747297ull}},
+{{12585468359837724129ull, 8395607550252698203ull,
+ 9659646919591248654ull, 6670612010765934121ull}},
+{{11120149431369767257ull, 1271137400961096946ull,
+ 16686244667916448722ull, 8338265013457417651ull}},
+{{11561779413033492440ull, 5406146894028073495ull,
+ 8123059908234086499ull, 5211415633410886032ull}},
+{{9840538247864477646ull, 2145997599107703965ull,
+ 10153824885292608124ull, 6514269541763607540ull}},
+{{16912358828257984961ull, 2682496998884629956ull,
+ 12692281106615760155ull, 8142836927204509425ull}},
+{{1346852230806464793ull, 17817461688798751387ull,
+ 1015146663993768240ull, 5089273079502818391ull}},
+{{15518623343790244703ull, 3825083037288887617ull,
+ 15103991385274374013ull, 6361591349378522988ull}},
+{{5563221124455642167ull, 9393039815038497426ull, 433245157883415900ull,
+ 7951989186723153736ull}},
+{{8088699221212164258ull, 15094021921253836699ull,
+ 270778223677134937ull, 4969993241701971085ull}},
+{{5499188008087817419ull, 5032469346285132162ull,
+ 4950158798023806576ull, 6212491552127463856ull}},
+{{16097357046964547581ull, 6290586682856415202ull,
+ 6187698497529758220ull, 7765614440159329820ull}},
+{{14672534172780230143ull, 13154988713640035309ull,
+ 13090683597810874695ull, 4853509025099581137ull}},
+{{4505609660693123966ull, 11832049873622656233ull,
+ 2528296441981429657ull, 6066886281374476422ull}},
+{{10243698094293792862ull, 955004286746156579ull,
+ 12383742589331562880ull, 7583607851718095527ull}},
+{{4096468299719926587ull, 596877679216347862ull,
+ 14657368145973308656ull, 4739754907323809704ull}},
+{{14343957411504684041ull, 746097099020434827ull,
+ 18321710182466635820ull, 5924693634154762130ull}},
+{{13318260745953467147ull, 932621373775543534ull,
+ 13678765691228518967ull, 7405867042693452663ull}},
+{{3712226947793529063ull, 7500417386250796565ull,
+ 15466757584658906210ull, 4628666901683407914ull}},
+{{9251969703169299233ull, 152149695958719898ull,
+ 10110074943968856955ull, 5785833627104259893ull}},
+{{2341590092106848233ull, 14025245175230563585ull,
+ 17249279698388459097ull, 7232292033880324866ull}},
+{{7538673633560948195ull, 3696498413756040769ull,
+ 12338227586130798064ull, 9040365042350406083ull}},
+{{16240886067044062382ull, 2310311508597525480ull,
+ 5405549232118054838ull, 5650228151469003802ull}},
+{{1854363510095526362ull, 12111261422601682659ull,
+ 15980308577002344355ull, 7062785189336254752ull}},
+{{16153012442901571664ull, 10527390759824715419ull,
+ 1528641647543378828ull, 8828481486670318441ull}},
+{{7789789767599788338ull, 15802991261745222945ull,
+ 12484616075783081527ull, 5517800929168949025ull}},
+{{14348923227927123327ull, 15142053058754140777ull,
+ 1770712039446688197ull, 6897251161461186282ull}},
+{{4101095979626740446ull, 5092508268160512260ull,
+ 11436762086163136055ull, 8621563951826482852ull}},
+{{11786557024121488587ull, 10100346695241402018ull,
+ 16371348340706735842ull, 5388477469891551782ull}},
+{{5509824243297084926ull, 3402061332196976715ull,
+ 11240813389028643995ull, 6735596837364439728ull}},
+{{2275594285693968253ull, 18087634720528384606ull,
+ 14051016736285804993ull, 8419496046705549660ull}},
+{{15257304483840893870ull, 4387242672689158522ull,
+ 18005257497033403929ull, 5262185029190968537ull}},
+{{9848258567946341530ull, 10095739359288836057ull,
+ 8671513816009591199ull, 6577731286488710672ull}},
+{{16922009228360314816ull, 8007988180683657167ull,
+ 10839392270011988999ull, 8222164108110888340ull}},
+{{17493784795366278616ull, 11922521640568367585ull,
+ 15997992205612268932ull, 5138852567569305212ull}},
+{{8032172938925684558ull, 14903152050710459482ull,
+ 1550746183305784549ull, 6423565709461631516ull}},
+{{816844136802329889ull, 4793882008105910641ull, 1938432729132230687ull,
+ 8029457136827039395ull}},
+{{12039742631569925941ull, 9913705282707276006ull,
+ 17352421520203501843ull, 5018410710516899621ull}},
+{{5826306252607631618ull, 7780445584956707104ull,
+ 7855468844972213592ull, 6273013388146124527ull}},
+{{7282882815759539523ull, 9725556981195883880ull,
+ 5207650037787879086ull, 7841266735182655659ull}},
+{{4551801759849712202ull, 1466787094820039521ull, 948938264403730477ull,
+ 4900791709489159787ull}},
+{{10301438218239528156ull, 6445169886952437305ull,
+ 15021230885786826808ull, 6125989636861449733ull}},
+{{17488483791226798099ull, 8056462358690546631ull,
+ 4941480551951369798ull, 7657487046076812167ull}},
+{{17847831397157830668ull, 423602955754203740ull,
+ 10005954372610687980ull, 4785929403798007604ull}},
+{{3863045172737736719ull, 529503694692754676ull,
+ 12507442965763359975ull, 5982411754747509505ull}},
+{{4828806465922170899ull, 14496937673648107057ull,
+ 1799245651922036256ull, 7478014693434386882ull}},
+{{14547219087269826572ull, 9060586046030066910ull,
+ 5736214550878660564ull, 4673759183396491801ull}},
+{{8960651822232507407ull, 11325732557537583638ull,
+ 11781954207025713609ull, 5842198979245614751ull}},
+{{1977442740935858450ull, 322107641639815836ull,
+ 10115756740354754108ull, 7302748724057018439ull}},
+{{2471803426169823063ull, 402634552049769795ull, 8033009907016054731ull,
+ 9128435905071273049ull}},
+{{17685778205851997078ull, 16392547659526963785ull,
+ 16549846237953503966ull, 5705272440669545655ull}},
+{{8272164702032832636ull, 11267312537553928924ull,
+ 16075621779014492054ull, 7131590550836932069ull}},
+{{10340205877541040795ull, 4860768635087635347ull,
+ 6259469168485951356ull, 8914488188546165087ull}},
+{{4156785664249456545ull, 12261352433784547900ull,
+ 10829697257944801453ull, 5571555117841353179ull}},
+{{5195982080311820681ull, 1491632486948521163ull,
+ 8925435554003613913ull, 6964443897301691474ull}},
+{{1883291581962387947ull, 6476226627113039358ull,
+ 1933422405649741583ull, 8705554871627114343ull}},
+{{15012115294008656179ull, 10965170669586731454ull,
+ 8125918031172170345ull, 5440971794766946464ull}},
+{{9541772080656044416ull, 18318149355410802222ull,
+ 10157397538965212931ull, 6801214743458683080ull}},
+{{2703843063965279712ull, 18286000675836114874ull,
+ 12696746923706516164ull, 8501518429323353850ull}},
+{{6301587933405687724ull, 2205378385542795988ull,
+ 12547152845743960507ull, 5313449018327096156ull}},
+{{7876984916757109655ull, 16591781037210658697ull,
+ 15683941057179950633ull, 6641811272908870195ull}},
+{{14457917164373774972ull, 6904668241231159659ull,
+ 14993240303047550388ull, 8302264091136087744ull}},
+{{6730355218519915406ull, 13538789687624250595ull,
+ 9370775189404718992ull, 5188915056960054840ull}},
+{{3801258004722506353ull, 16923487109530313244ull,
+ 11713468986755898740ull, 6486143821200068550ull}},
+{{4751572505903132941ull, 2707614813203339939ull,
+ 5418464196590097618ull, 8107679776500085688ull}},
+{{663889806975764137ull, 6303945276679475366ull, 3386540122868811011ull,
+ 5067299860312553555ull}},
+{{10053234295574480979ull, 3268245577421956303ull,
+ 18068233208868177476ull, 6334124825390691943ull}},
+{{7954856851040713319ull, 4085306971777445379ull,
+ 17973605492657833941ull, 7917656031738364929ull}},
+{{2665942522686751873ull, 4859159866574597314ull,
+ 4315974405270064357ull, 4948535019836478081ull}},
+{{12555800190213215649ull, 10685635851645634546ull,
+ 10006654025014968350ull, 6185668774795597601ull}},
+{{6471378200911743753ull, 4133672777702267375ull,
+ 17120003549696098342ull, 7732085968494497001ull}},
+{{10962140403210921702ull, 16418603541346080821ull,
+ 3782473190918979607ull, 4832553730309060626ull}},
+{{18314361522441040031ull, 15911568408255213122ull,
+ 13951463525503500317ull, 6040692162886325782ull}},
+{{13669579866196524231ull, 6054402455036852691ull,
+ 8215957370024599589ull, 7550865203607907228ull}},
+{{6237644407159133692ull, 6089844543611726884ull,
+ 14358345393120150551ull, 4719290752254942017ull}},
+{{7797055508948917115ull, 3000619661087270701ull,
+ 4112873686118024477ull, 5899113440318677522ull}},
+{{14358005404613534298ull, 8362460594786476280ull,
+ 14364464144502306404ull, 7373891800398346902ull}},
+{{17947506755766917872ull, 10453075743483095350ull,
+ 8732208143773107197ull, 9217364750497933628ull}},
+{{6605505703926935766ull, 8839015348890628546ull,
+ 14681002126712967806ull, 5760852969061208517ull}},
+{{17480254166763445516ull, 1825397149258509874ull,
+ 4516194603109046046ull, 7201066211326510647ull}},
+{{12626945671599531087ull, 11505118473427913151ull,
+ 1033557235458919653ull, 9001332764158138309ull}},
+{{14809370072390788785ull, 9496542055106139671ull,
+ 2951816281375518735ull, 5625832977598836443ull}},
+{{13900026572061098078ull, 7258991550455286685ull,
+ 17524828407001562131ull, 7032291221998545553ull}},
+{{3539975159794208885ull, 4462053419641720453ull,
+ 8070977453469788952ull, 8790364027498181942ull}},
+{{4518327484085074505ull, 2788783387276075283ull, 432674889991230191ull,
+ 5493977517186363714ull}},
+{{1036223336678955227ull, 17321037289377257816ull,
+ 9764215649343813546ull, 6867471896482954642ull}},
+{{1295279170848694034ull, 12427924574866796462ull,
+ 2981897524824991125ull, 8584339870603693303ull}},
+{{14644607537062597484ull, 10073295868505441740ull,
+ 8781214980656701309ull, 5365212419127308314ull}},
+{{18305759421328246854ull, 17203305854059190079ull,
+ 1753146688966100828ull, 6706515523909135393ull}},
+{{18270513258232920664ull, 3057388243864435983ull,
+ 6803119379635013940ull, 8383144404886419241ull}},
+{{18336599814036657271ull, 11134239689270048297ull,
+ 15781164658340353472ull, 5239465253054012025ull}},
+{{9085691712263657877ull, 13917799611587560372ull,
+ 5891397767643278128ull, 6549331566317515032ull}},
+{{11357114640329572346ull, 17397249514484450465ull,
+ 7364247209554097660ull, 8186664457896893790ull}},
+{{180667622564900860ull, 1649908909698005733ull,
+ 18437712561253474750ull, 5116665286185558618ull}},
+{{4837520546633513979ull, 11285758173977282974ull,
+ 13823768664712067629ull, 6395831607731948273ull}},
+{{15270272720146668282ull, 272139662189440005ull,
+ 3444652775607920825ull, 7994789509664935342ull}},
+{{11849763459305361628ull, 11699302334936869763ull,
+ 15987966040037114227ull, 4996743443540584588ull}},
+{{10200518305704314131ull, 10012441900243699300ull,
+ 1538213476336841168ull, 6245929304425730736ull}},
+{{12750647882130392664ull, 12515552375304624125ull,
+ 1922766845421051460ull, 7807411630532163420ull}},
+{{10274997935545189367ull, 17045592271420165886ull,
+ 10425101315242932970ull, 4879632269082602137ull}},
+{{3620375382576710901ull, 12083618302420431550ull,
+ 17643062662481054117ull, 6099540336353252671ull}},
+{{13748841265075664434ull, 1269464822743375725ull,
+ 17442142309673929743ull, 7624425420441565839ull}},
+{{10898868799885984223ull, 7710944541855691684ull,
+ 17818867971187287945ull, 4765265887775978649ull}},
+{{13623585999857480279ull, 14250366695747002509ull,
+ 8438526908701946219ull, 5956582359719973312ull}},
+{{3194424444539686637ull, 13201272351256365233ull,
+ 10548158635877432774ull, 7445727949649966640ull}},
+{{13525730323905773908ull, 3639109201107840366ull,
+ 6592599147423395484ull, 4653579968531229150ull}},
+{{7683790868027441577ull, 4548886501384800458ull,
+ 17464120971134020163ull, 5816974960664036437ull}},
+{{381366548179526163ull, 1074422108303612669ull, 7995093158635361492ull,
+ 7271218700830045547ull}},
+{{5088394203651795608ull, 1343027635379515836ull,
+ 5382180429866813961ull, 9089023376037556934ull}},
+{{12403618414137148063ull, 12368607318180667157ull,
+ 17198920823948922437ull, 5680639610023473083ull}},
+{{1669464962389271367ull, 1625701092443670235ull,
+ 16886965011508765143ull, 7100799512529341354ull}},
+{{15921889258268752920ull, 15867184420836751505ull,
+ 11885334227531180620ull, 8875999390661676693ull}},
+{{3033651758776888719ull, 693618226168193883ull, 9734176901420681840ull,
+ 5547499619163547933ull}},
+{{17627122753753274611ull, 867022782710242353ull,
+ 16779407145203240204ull, 6934374523954434916ull}},
+{{8198845386909429552ull, 1083778478387802942ull,
+ 2527514857794498639ull, 8667968154943043646ull}},
+{{512592348391005566ull, 7594890576633458695ull,
+ 15414754841403725361ull, 5417480096839402278ull}},
+{{14475798490770920669ull, 14105299239219211272ull,
+ 10045071514899880893ull, 6771850121049252848ull}},
+{{18094748113463650837ull, 3796565993741850378ull,
+ 12556339393624851117ull, 8464812651311566060ull}},
+{{15920903589342169677ull, 4678696755302350438ull,
+ 17071084157870307756ull, 5290507907069728787ull}},
+{{10677757449822936288ull, 5848370944127938048ull,
+ 16727169178910496791ull, 6613134883837160984ull}},
+{{13347196812278670360ull, 2698777661732534656ull,
+ 2462217399928569373ull, 8266418604796451231ull}},
+{{8341998007674168975ull, 3992579047796528112ull,
+ 8456414902596437714ull, 5166511627997782019ull}},
+{{10427497509592711219ull, 14214095846600435948ull,
+ 5958832609818159238ull, 6458139534997227524ull}},
+{{13034371886990889024ull, 8544247771395769127ull,
+ 7448540762272699048ull, 8072674418746534405ull}},
+{{15064011457010387496ull, 5340154857122355704ull,
+ 6961180985634130857ull, 5045421511716584003ull}},
+{{383270247553432754ull, 11286879589830332535ull,
+ 4089790213615275667ull, 6306776889645730004ull}},
+{{14314145864723954654ull, 9496913468860527764ull,
+ 5112237767019094584ull, 7883471112057162505ull}},
+{{18169713202307247467ull, 5935570918037829852ull,
+ 14724363650455403875ull, 4927169445035726565ull}},
+{{4265397429174507718ull, 2807777629119899412ull,
+ 4570396507787091132ull, 6158961806294658207ull}},
+{{5331746786468134647ull, 3509722036399874265ull,
+ 1101309616306476011ull, 7698702257868322759ull}},
+{{14861556787611053915ull, 18334477337245779079ull,
+ 7605847537832629362ull, 4811688911167701724ull}},
+{{13965259966086429489ull, 13694724634702448041ull,
+ 9507309422290786703ull, 6014611138959627155ull}},
+{{3621516902325873149ull, 12506719774950672148ull,
+ 7272450759436095475ull, 7518263923699533944ull}},
+{{11486820100808446526ull, 5510856850130476140ull,
+ 4545281724647559672ull, 4698914952312208715ull}},
+{{14358525126010558158ull, 6888571062663095175ull,
+ 1069916137382061686ull, 5873643690390260894ull}},
+{{13336470389085809793ull, 17834085865183644777ull,
+ 10560767208582352915ull, 7342054612987826117ull}},
+{{2835529931075098529ull, 17680921313052168068ull,
+ 17812645029155329048ull, 9177568266234782646ull}},
+{{10995578243776712389ull, 11050575820657605042ull,
+ 6521217124794692751ull, 5735980166396739154ull}},
+{{4521100767866114678ull, 9201533757394618399ull,
+ 17374893442848141747ull, 7169975207995923942ull}},
+{{1039689941405255444ull, 6890231178315885095ull,
+ 12495244766705401376ull, 8962469009994904928ull}},
+{{7567335241019366509ull, 4306394486447428184ull,
+ 7809527979190875860ull, 5601543131246815580ull}},
+{{9459169051274208136ull, 5382993108059285230ull,
+ 9761909973988594825ull, 7001928914058519475ull}},
+{{2600589277237984361ull, 11340427403501494442ull,
+ 7590701449058355627ull, 8752411142573149344ull}},
+{{6237054316701128130ull, 4781924117974740074ull,
+ 4744188405661472267ull, 5470256964108218340ull}},
+{{17019689932731185970ull, 1365719129041037188ull,
+ 5930235507076840334ull, 6837821205135272925ull}},
+{{2827868342204430847ull, 10930520948156072294ull,
+ 12024480402273438321ull, 8547276506419091156ull}},
+{{15602475769159932991ull, 18360790638666014943ull,
+ 16738672288275674758ull, 5342047816511931972ull}},
+{{14891408693022528335ull, 13727616261477742871ull,
+ 2476596286635041832ull, 6677559770639914966ull}},
+{{14002574847850772515ull, 17159520326847178589ull,
+ 12319117395148578098ull, 8346949713299893707ull}},
+{{11057452289120426774ull, 15336386222706874522ull,
+ 5393605362754167359ull, 5216843570812433567ull}},
+{{4598443324545757659ull, 14558796759956205249ull,
+ 2130320685015321295ull, 6521054463515541959ull}},
+{{10359740174109584978ull, 13586809931517868657ull,
+ 16497958911551315331ull, 8151318079394427448ull}},
+{{18004052654886960371ull, 6185913197984973958ull,
+ 10311224319719572082ull, 5094573799621517155ull}},
+{{13281693781753924656ull, 16955763534335993256ull,
+ 8277344381222077198ull, 6368217249526896444ull}},
+{{16602117227192405820ull, 11971332381065215762ull,
+ 10346680476527596498ull, 7960271561908620555ull}},
+{{14988009285422641542ull, 12093768756593147755ull,
+ 4160832288616053859ull, 4975169726192887847ull}},
+{{14123325588350914023ull, 10505524927314046790ull,
+ 589354342342679420ull, 6218962157741109809ull}},
+{{8430784948583866721ull, 13131906159142558488ull,
+ 5348378946355737179ull, 7773702697176387261ull}},
+{{5269240592864916701ull, 5901598340250405103ull,
+ 5648579850686029689ull, 4858564185735242038ull}},
+{{1974864722653757972ull, 11988683943740394283ull,
+ 16284096850212312919ull, 6073205232169052547ull}},
+{{16303638958599361176ull, 10374168911248104949ull,
+ 15743435044338003245ull, 7591506540211315684ull}},
+{{12495617358338294687ull, 8789698578743759545ull,
+ 616274865856476220ull, 4744691587632072303ull}},
+{{1784463642640704647ull, 10987123223429699432ull,
+ 14605401637602758987ull, 5930864484540090378ull}},
+{{2230579553300880809ull, 9122218010859736386ull,
+ 9033380010148672926ull, 7413580605675112973ull}},
+{{6005798239240438410ull, 1089700238359947337ull,
+ 7951705515556614531ull, 4633487878546945608ull}},
+{{12118933817477935916ull, 15197183353232097883ull,
+ 9939631894445768163ull, 5791859848183682010ull}},
+{{10536981253420031991ull, 14384793173112734450ull,
+ 3201167831202434396ull, 7239824810229602513ull}},
+{{3947854529920264181ull, 17980991466390918063ull,
+ 8613145807430430899ull, 9049781012787003141ull}},
+{{9384938108841246969ull, 8932276657280629837ull,
+ 7689059138857713264ull, 5656113132991876963ull}},
+{{16342858654478946615ull, 11165345821600787296ull,
+ 4999637905144753676ull, 7070141416239846204ull}},
+{{1981829244389131653ull, 13956682277000984121ull,
+ 6249547381430942095ull, 8837676770299807755ull}},
+{{12767858323811677043ull, 15640455450766696931ull,
+ 1600124104180644857ull, 5523547981437379847ull}},
+{{11348136886337208400ull, 5715511258176207452ull,
+ 15835213185507969784ull, 6904434976796724808ull}},
+{{14185171107921510500ull, 7144389072720259315ull,
+ 1347272408175410614ull, 8630543720995906011ull}},
+{{6559888933237250111ull, 18300301225732325784ull,
+ 16982946319605489297ull, 5394089825622441256ull}},
+{{8199861166546562638ull, 9040318476883243518ull,
+ 2781938825797310006ull, 6742612282028051571ull}},
+{{1026454421328427489ull, 2077026059249278590ull,
+ 17312481587528801220ull, 8428265352535064463ull}},
+{{14476592068612430893ull, 10521513323885574926ull,
+ 17737830019846582618ull, 5267665845334415289ull}},
+{{8872368048910762808ull, 3928519618002192850ull,
+ 8337229469526064561ull, 6584582306668019112ull}},
+{{1867088024283677702ull, 9522335540930128967ull,
+ 10421536836907580701ull, 8230727883335023890ull}},
+{{8084459042818380420ull, 8257302722295024556ull,
+ 11125146541494625842ull, 5144204927084389931ull}},
+{{10105573803522975525ull, 1098256366014004887ull,
+ 9294747158440894399ull, 6430256158855487414ull}},
+{{8020281235976331502ull, 15207878512799669821ull,
+ 2395061911196342190ull, 8037820198569359268ull}},
+{{7318518781698901141ull, 4893238052072405734ull,
+ 10720285731352489677ull, 5023637624105849542ull}},
+{{18371520513978402234ull, 10728233583517895071ull,
+ 4176985127335836288ull, 6279547030132311928ull}},
+{{18352714624045614888ull, 13410291979397368839ull,
+ 5221231409169795360ull, 7849433787665389910ull}},
+{{18387975667669591161ull, 8381432487123355524ull,
+ 17098327686013285812ull, 4905896117290868693ull}},
+{{4538225510877437336ull, 10476790608904194406ull,
+ 7537851552234443553ull, 6132370146613585867ull}},
+{{14896153925451572478ull, 17707674279557630911ull,
+ 4810628421865666537ull, 7665462683266982334ull}},
+{{16227625231048314655ull, 4149767397082437463ull,
+ 16841700818948205298ull, 4790914177041863958ull}},
+{{15672845520383005414ull, 14410581283207822637ull,
+ 11828753986830480814ull, 5988642721302329948ull}},
+{{5755998845196593056ull, 8789854567155002489ull,
+ 14785942483538101018ull, 7485803401627912435ull}},
+{{15126714324316340420ull, 10105345122899264459ull,
+ 6935371042997619184ull, 4678627126017445272ull}},
+{{14296706886968037621ull, 12631681403624080574ull,
+ 8669213803747023980ull, 5848283907521806590ull}},
+{{8647511571855271218ull, 15789601754530100718ull,
+ 1613145217829004167ull, 7310354884402258238ull}},
+{{1586017427964313214ull, 15125316174735237994ull,
+ 11239803559141031017ull, 9137943605502822797ull}},
+{{5602946910905083663ull, 2535793581568441890ull,
+ 9330720233676838338ull, 5711214753439264248ull}},
+{{16227055675486130387ull, 12393114013815328170ull,
+ 11663400292096047922ull, 7139018441799080310ull}},
+{{11060447557502887175ull, 6268020480414384405ull,
+ 5355878328265284095ull, 8923773052248850388ull}},
+{{9218622732652998437ull, 10835041827900072109ull,
+ 12570795992020578367ull, 5577358157655531492ull}},
+{{16134964434243635950ull, 8932116266447702232ull,
+ 15713494990025722959ull, 6971697697069414365ull}},
+{{1721961469094993321ull, 6553459314632239887ull,
+ 5806810682249989987ull, 8714622121336767957ull}},
+{{7993754945825452682ull, 1790069062431455977ull,
+ 5935099685619937694ull, 5446638825835479973ull}},
+{{14603879700709203756ull, 11460958364894095779ull,
+ 12030560625452310021ull, 6808298532294349966ull}},
+{{13643163607459116791ull, 491139900835456012ull,
+ 5814828744960611719ull, 8510373165367937458ull}},
+{{17750349291516723803ull, 7224491465663241863ull,
+ 8245953984027770228ull, 5318983228354960911ull}},
+{{17576250595968516849ull, 9030614332079052329ull,
+ 5695756461607324881ull, 6648729035443701139ull}},
+{{8135255189678482349ull, 15899953933526203316ull,
+ 2508009558581768197ull, 8310911294304626424ull}},
+{{14307906530403827277ull, 12243314217667571024ull,
+ 1567505974113605123ull, 5194319558940391515ull}},
+{{17884883163004784096ull, 10692456753657075876ull,
+ 15794440522924170116ull, 6492899448675489393ull}},
+{{3909359880046428503ull, 13365570942071344846ull,
+ 5907992598373048933ull, 8116124310844361742ull}},
+{{16278407980311181527ull, 10659324848008284480ull,
+ 17527553429265319295ull, 5072577694277726088ull}},
+{{1901265901679425292ull, 8712470041582967697ull,
+ 3462697712872097503ull, 6340722117847157611ull}},
+{{6988268395526669519ull, 6278901533551321717ull,
+ 18163430196372285591ull, 7925902647308947013ull}},
+{{6673510756417862402ull, 10841842486110657929ull,
+ 13657986881946372446ull, 4953689154568091883ull}},
+{{12953574463949715906ull, 4328931070783546603ull,
+ 12460797584005577654ull, 6192111443210114854ull}},
+{{11580282061509756978ull, 14634535875334209062ull,
+ 6352624943152196259ull, 7740139304012643568ull}},
+{{2625990270016210208ull, 6840741912870186712ull,
+ 3970390589470122662ull, 4837587065007902230ull}},
+{{3282487837520262760ull, 17774299427942509198ull,
+ 14186360273692429135ull, 6046983831259877787ull}},
+{{13326481833755104257ull, 17606188266500748593ull,
+ 13121264323688148515ull, 7558729789074847234ull}},
+{{1411522118455858305ull, 8698024657349273919ull,
+ 12812476220732480726ull, 4724206118171779521ull}},
+{{15599460703351986593ull, 1649158784831816590ull,
+ 2180537220633437196ull, 5905257647714724402ull}},
+{{10275953842335207433ull, 2061448481039770738ull,
+ 11949043562646572303ull, 7381572059643405502ull}},
+{{11034157169886892550ull, 8205934328290938567ull,
+ 2856466208226719785ull, 4613482537277128439ull}},
+{{9181010443931227783ull, 14869103928791061113ull,
+ 17405640815565563443ull, 5766853171596410548ull}},
+{{16087949073341422633ull, 13974693892561438487ull,
+ 3310306945747402688ull, 7208566464495513186ull}},
+{{15498250323249390387ull, 17468367365701798109ull,
+ 13361255719039029168ull, 9010708080619391482ull}},
+{{11992249461244562944ull, 10917729603563623818ull,
+ 12962470842826781134ull, 5631692550387119676ull}},
+{{5766939789700927872ull, 4423789967599753965ull,
+ 16203088553533476418ull, 7039615687983899595ull}},
+{{11820360755553547744ull, 14753109496354468264ull,
+ 15642174673489457618ull, 8799519609979874494ull}},
+{{7387725472220967340ull, 13832379453648930569ull,
+ 5164673152503523107ull, 5499699756237421559ull}},
+{{13846342858703597079ull, 12678788298633775307ull,
+ 1844155422202015980ull, 6874624695296776949ull}},
+{{12696242554952108445ull, 15848485373292219134ull,
+ 6916880296179907879ull, 8593280869120971186ull}},
+{{3323465578417679874ull, 16822832385948718815ull,
+ 8934736203539830328ull, 5370800543200606991ull}},
+{{17989390028304263555ull, 2581796408726346902ull,
+ 6556734235997400007ull, 6713500679000758739ull}},
+{{13263365498525553635ull, 17062303566190097340ull,
+ 3584231776569362104ull, 8391875848750948424ull}},
+{{17512975473433246830ull, 10663939728868810837ull,
+ 2240144860355851315ull, 5244922405469342765ull}},
+{{8056161286509394826ull, 8718238642658625643ull,
+ 7411867093872202048ull, 6556153006836678456ull}},
+{{5458515589709355628ull, 10897798303323282054ull,
+ 9264833867340252560ull, 8195191258545848070ull}},
+{{17246630298850510980ull, 6811123939577051283ull,
+ 1178835148660269946ull, 5121994536591155044ull}},
+{{16946601855135750820ull, 17737276961326089912ull,
+ 1473543935825337432ull, 6402493170738943805ull}},
+{{2736508245210136909ull, 3724852127948060775ull,
+ 6453615938209059695ull, 8003116463423679756ull}},
+{{8627846680897417424ull, 9245561607608619840ull,
+ 13256881998235438117ull, 5001947789639799847ull}},
+{{10784808351121771780ull, 16168638027938162704ull,
+ 11959416479366909742ull, 6252434737049749809ull}},
+{{13481010438902214725ull, 10987425498067927572ull,
+ 1114212543926473466ull, 7815543421312187262ull}},
+{{17649003561168660012ull, 11478826954719842636ull,
+ 14531440895236209628ull, 4884714638320117038ull}},
+{{3614510377751273398ull, 14348533693399803296ull,
+ 8940929082190486227ull, 6105893297900146298ull}},
+{{4518137972189091748ull, 13323981098322366216ull,
+ 1952789315883331976ull, 7632366622375182873ull}},
+{{2823836232618182343ull, 8327488186451478885ull,
+ 12749708368495552245ull, 4770229138984489295ull}},
+{{8141481309200115832ull, 15021046251491736510ull,
+ 11325449442192052402ull, 5962786423730611619ull}},
+{{953479599645368982ull, 9552935777509894830ull, 9545125784312677599ull,
+ 7453483029663264524ull}},
+{{14430982805060519326ull, 12888113888584766124ull,
+ 15189075652050199307ull, 4658426893539540327ull}},
+{{18038728506325649157ull, 11498456342303569751ull,
+ 14374658546635361230ull, 5823033616924425409ull}},
+{{17936724614479673543ull, 5149698391024686381ull,
+ 4133265128012037826ull, 7278792021155531762ull}},
+{{8585847712817428216ull, 15660495025635633785ull,
+ 14389953446869823090ull, 9098490026444414702ull}},
+{{16895369866579362395ull, 14399495409449659019ull,
+ 4382034885866251527ull, 5686556266527759189ull}},
+{{16507526314796815090ull, 13387683243384685870ull,
+ 10089229625760202313ull, 7108195333159698986ull}},
+{{11411035856641243054ull, 2899545998948693626ull,
+ 3388164995345477084ull, 8885244166449623733ull}},
+{{11743583428828164813ull, 11035588286197709324ull,
+ 4423446131304617129ull, 5553277604031014833ull}},
+{{14679479286035206016ull, 18406171376174524559ull,
+ 10140993682558159315ull, 6941597005038768541ull}},
+{{13737663089116619616ull, 18396028201790767795ull,
+ 17287928121625087048ull, 8676996256298460676ull}},
+{{6280196421484193308ull, 11497517626119229872ull,
+ 1581583039160903597ull, 5423122660186537923ull}},
+{{7850245526855241635ull, 536838977366873628ull,
+ 15812036854233293209ull, 6778903325233172403ull}},
+{{9812806908569052044ull, 5282734740135979939ull,
+ 15153360049364228607ull, 8473629156541465504ull}},
+{{3827161308641963576ull, 10219238240226069318ull,
+ 9470850030852642879ull, 5296018222838415940ull}},
+{{14007323672657230277ull, 8162361781855198743ull,
+ 11838562538565803599ull, 6620022778548019925ull}},
+{{12897468572394149943ull, 5591266208891610525ull,
+ 963145117925090787ull, 8275028473185024907ull}},
+{{10366760866960037666ull, 1188698371343562626ull,
+ 16742866763199039406ull, 5171892795740640566ull}},
+{{3735079046845271275ull, 10709245001034229091ull,
+ 11705211417144023449ull, 6464865994675800708ull}},
+{{57162790129201189ull, 17998242269720174268ull,
+ 14631514271430029311ull, 8081082493344750885ull}},
+{{9259098780685526552ull, 18166430446216190773ull,
+ 11450539428857462271ull, 5050676558340469303ull}},
+{{16185559494284296093ull, 18096352039342850562ull,
+ 9701488267644439935ull, 6313345697925586629ull}},
+{{11008577331000594309ull, 18008754030751175299ull,
+ 16738546352982937823ull, 7891682122406983286ull}},
+{{4574517822661677491ull, 18173000296860566418ull,
+ 5849905452186948235ull, 4932301326504364554ull}},
+{{14941519315181872672ull, 18104564352648320118ull,
+ 16535753852088461102ull, 6165376658130455692ull}},
+{{9453527107122565031ull, 13407333403955624340ull,
+ 2222948241401024762ull, 7706720822663069616ull}},
+{{15131826478806378953ull, 12991269395899653116ull,
+ 1389342650875640476ull, 4816700514164418510ull}},
+{{468039024798422075ull, 16239086744874566396ull,
+ 10960050350449326403ull, 6020875642705523137ull}},
+{{585048780998027594ull, 15687172412665820091ull,
+ 18311748956489045908ull, 7526094553381903921ull}},
+{{16506556552619624910ull, 581110721061361748ull,
+ 4527314070164571837ull, 4703809095863689951ull}},
+{{2186451617064979522ull, 5338074419754090090ull,
+ 1047456569278326892ull, 5879761369829612439ull}},
+{{11956436558186000210ull, 6672593024692612612ull,
+ 15144378766880072327ull, 7349701712287015548ull}},
+{{14945545697732500262ull, 3729055262438377861ull,
+ 483729384890538793ull, 9187127140358769436ull}},
+{{11646809070296506616ull, 13859874585092455923ull,
+ 9525702902411362553ull, 5741954462724230897ull}},
+{{9946825319443245366ull, 3489785176083406192ull,
+ 16518814646441591096ull, 7177443078405288621ull}},
+{{12433531649304056707ull, 4362231470104257740ull,
+ 6813460252769825158ull, 8971803848006610777ull}},
+{{16994329317669811250ull, 16561452724097324799ull,
+ 15787627704049610483ull, 5607377405004131735ull}},
+{{16631225628659876159ull, 16090129886694268095ull,
+ 15122848611634625200ull, 7009221756255164669ull}},
+{{16177346017397457294ull, 1665918284658283503ull,
+ 5068502709261117789ull, 8761527195318955837ull}},
+{{17028370288514492665ull, 3347041937125121141ull,
+ 5473657202501892570ull, 5475954497074347398ull}},
+{{7450404805360952119ull, 13407174458261177235ull,
+ 16065443539982141520ull, 6844943121342934247ull}},
+{{4701319988273802245ull, 16758968072826471544ull,
+ 15470118406550288996ull, 8556178901678667809ull}},
+{{2938324992671126403ull, 1250983008661768907ull,
+ 2751294976452848767ull, 5347611813549167381ull}},
+{{17507964296121071716ull, 15398786816109374845ull,
+ 8050804738993448862ull, 6684514766936459226ull}},
+{{8049897314869175933ull, 10025111483281942749ull,
+ 840133886887035270ull, 8355643458670574033ull}},
+{{7337028831006928910ull, 1654008658623826314ull,
+ 12054298725372866804ull, 5222277161669108770ull}},
+{{18394658075613436946ull, 2067510823279782892ull,
+ 5844501369861307697ull, 6527846452086385963ull}},
+{{4546578520807244566ull, 7196074547527116520ull,
+ 2693940693899246717ull, 8159808065107982454ull}},
+{{2841611575504527854ull, 6803389601418141777ull,
+ 15518770988969192910ull, 5099880040692489033ull}},
+{{8163700487808047721ull, 17727609038627453029ull,
+ 5563405680929327425ull, 6374850050865611292ull}},
+{{14816311628187447555ull, 8324453243002152574ull,
+ 6954257101161659282ull, 7968562563582014115ull}},
+{{4648508749189766818ull, 9814469295303733263ull,
+ 2040567679012343099ull, 4980351602238758822ull}},
+{{1198949918059820619ull, 7656400600702278675ull,
+ 11774081635620204682ull, 6225439502798448527ull}},
+{{15333745452856939485ull, 347128714023072535ull,
+ 10105916026097867949ull, 7781799378498060659ull}},
+{{16501119935676669034ull, 2522798455478114286ull,
+ 4010354507097473516ull, 4863624611561287912ull}},
+{{11403027882741060485ull, 3153498069347642858ull,
+ 5012943133871841895ull, 6079530764451609890ull}},
+{{5030412816571549798ull, 17776930641966717285ull,
+ 15489550954194578176ull, 7599413455564512362ull}},
+{{5449851019570912576ull, 11110581651229198303ull,
+ 14292655364798999264ull, 4749633409727820226ull}},
+{{2200627756036252816ull, 13888227064036497879ull,
+ 8642447169143973272ull, 5937041762159775283ull}},
+{{16585842750327479732ull, 17360283830045622348ull,
+ 6191372943002578686ull, 7421302202699719104ull}},
+{{1142779682099899025ull, 6238491375351126064ull,
+ 3869608089376611679ull, 4638313876687324440ull}},
+{{1428474602624873781ull, 3186428200761519676ull,
+ 4837010111720764599ull, 5797892345859155550ull}},
+{{1785593253281092226ull, 17818093306234063307ull,
+ 15269634676505731556ull, 7247365432323944437ull}},
+{{16067049621883528994ull, 3825872559083027517ull,
+ 5251985290350000734ull, 9059206790404930547ull}},
+{{12347749022890899573ull, 16226228404709055910ull,
+ 976647797255056506ull, 5662004244003081592ull}},
+{{6211314241758848658ull, 11059413469031544080ull,
+ 1220809746568820633ull, 7077505305003851990ull}},
+{{7764142802198560823ull, 18435952854716818004ull,
+ 10749384220065801599ull, 8846881631254814987ull}},
+{{14075961288228876323ull, 18439999561839093108ull,
+ 4412522128327432047ull, 5529301019534259367ull}},
+{{17594951610286095403ull, 18438313433871478481ull,
+ 903966641981902155ull, 6911626274417824209ull}},
+{{8158631457575455542ull, 18436205773911960198ull,
+ 5741644320904765598ull, 8639532843022280261ull}},
+{{487458642557271810ull, 6910942590267587220ull, 5894370709779172451ull,
+ 5399708026888925163ull}},
+{{609323303196589762ull, 4026992219407096121ull, 2756277368796577660ull,
+ 6749635033611156454ull}},
+{{5373340147423125106ull, 5033740274258870151ull,
+ 12668718747850497883ull, 8437043792013945567ull}},
+{{10275866619780535048ull, 840244662198099892ull,
+ 14835478245047643033ull, 5273152370008715979ull}},
+{{12844833274725668810ull, 5661991846175012769ull,
+ 13932661787882165887ull, 6591440462510894974ull}},
+{{2220983538124922300ull, 2465803789291378058ull,
+ 8192455197997931551ull, 8239300578138618718ull}},
+{{5999800729755464342ull, 8458656395948193142ull, 508598480321319315ull,
+ 5149562861336636699ull}},
+{{16723122949049106235ull, 5961634476507853523ull,
+ 14470806155683812856ull, 6436953576670795873ull}},
+{{16292217667883994889ull, 7452043095634816904ull,
+ 4253449639322602358ull, 8046191970838494842ull}},
+{{10182636042427496806ull, 45840916344372661ull, 7270092043004014378ull,
+ 5028869981774059276ull}},
+{{17339981071461758911ull, 9280673182285241634ull,
+ 9087615053755017972ull, 6286087477217574095ull}},
+{{12451604302472422831ull, 11600841477856552043ull,
+ 6747832798766384561ull, 7857609346521967619ull}},
+{{5476409679831570318ull, 332996896019263171ull, 1911552490015296399ull,
+ 4911005841576229762ull}},
+{{2233826081362074993ull, 14251304175306242676ull,
+ 11612812649373896306ull, 6138757301970287202ull}},
+{{2792282601702593741ull, 8590758182278027537ull,
+ 5292643774862594575ull, 7673446627462859003ull}},
+{{13274391672132590848ull, 12286752891564849066ull,
+ 1002059350075427657ull, 4795904142164286877ull}},
+{{7369617553310962752ull, 1523383059173897621ull,
+ 5864260206021672476ull, 5994880177705358596ull}},
+{{13823707960066091344ull, 1904228823967372026ull,
+ 7330325257527090595ull, 7493600222131698245ull}},
+{{13251503493468694994ull, 17331044079475465180ull,
+ 6887296295168125573ull, 4683500138832311403ull}},
+{{16564379366835868743ull, 7828747044062167763ull,
+ 3997434350532769063ull, 5854375173540389254ull}},
+{{16093788190117448024ull, 5174247786650321800ull,
+ 14220164975020737137ull, 7317968966925486567ull}},
+{{1670491163937258414ull, 11079495751740290155ull,
+ 13163520200348533517ull, 9147461208656858209ull}},
+{{17184958041956644173ull, 9230527854051375298ull,
+ 1309671097576751592ull, 5717163255410536381ull}},
+{{12257825515591029408ull, 11538159817564219123ull,
+ 6248774890398327394ull, 7146454069263170476ull}},
+{{10710595876061398856ull, 5199327735100498096ull,
+ 7810968612997909243ull, 8933067586578963095ull}},
+{{6694122422538374285ull, 943736825224117358ull,
+ 11799384410764775133ull, 5583167241611851934ull}},
+{{17591025065027743665ull, 5791357049957534601ull,
+ 5525858476601193108ull, 6978959052014814918ull}},
+{{8153723276002515869ull, 7239196312446918252ull,
+ 16130695132606267193ull, 8723698815018518647ull}},
+{{14319449084356348226ull, 16053712741347793667ull,
+ 16999213485519998851ull, 5452311759386574154ull}},
+{{13287625337018047378ull, 15455454908257354180ull,
+ 12025644820045222756ull, 6815389699233217693ull}},
+{{16609531671272559223ull, 872574561612141109ull,
+ 1196997969774364734ull, 8519237124041522117ull}},
+{{12686800303759043467ull, 14380417156289751905ull,
+ 3053966740322671910ull, 5324523202525951323ull}},
+{{2023442324416640621ull, 8752149408507414074ull,
+ 17652516480685503600ull, 6655654003157439153ull}},
+{{11752674942375576584ull, 10940186760634267592ull,
+ 8230587545574715788ull, 8319567503946798942ull}},
+{{7345421838984735365ull, 16060988762251193053ull,
+ 532431197556809463ull, 5199729689966749339ull}},
+{{13793463317158307111ull, 15464549934386603412ull,
+ 14500597052228175541ull, 6499662112458436673ull}},
+{{17241829146447883888ull, 5495629362701090553ull,
+ 4290688260003055715ull, 8124577640573045842ull}},
+{{3858614188888845574ull, 1128925342474487644ull,
+ 7293366180929297726ull, 5077861025358153651ull}},
+{{4823267736111056968ull, 10634528714947885363ull,
+ 4505021707734234253ull, 6347326281697692064ull}},
+{{1417398651711433305ull, 17904846912112244608ull,
+ 5631277134667792816ull, 7934157852122115080ull}},
+{{885874157319645816ull, 11190529320070152880ull,
+ 3519548209167370510ull, 4958848657576321925ull}},
+{{1107342696649557270ull, 4764789613232915292ull,
+ 9011121279886601042ull, 6198560821970402406ull}},
+{{1384178370811946587ull, 15179359053395919923ull,
+ 2040529563003475494ull, 7748201027463003008ull}},
+{{17006012546253324281ull, 4875413389945062047ull,
+ 1275330976877172184ull, 4842625642164376880ull}},
+{{16645829664389267447ull, 6094266737431327559ull,
+ 1594163721096465230ull, 6053282052705471100ull}},
+{{16195601062059196405ull, 16841205458643935257ull,
+ 1992704651370581537ull, 7566602565881838875ull}},
+{{3204721636145915897ull, 3608224384011377680ull,
+ 17386341471602471125ull, 4729126603676149296ull}},
+{{4005902045182394872ull, 9121966498441610004ull,
+ 3286182765793537290ull, 5911408254595186621ull}},
+{{5007377556477993589ull, 2179086086197236697ull,
+ 8719414475669309517ull, 7389260318243983276ull}},
+{{14658826018867215754ull, 3667771813086966887ull,
+ 14673006084148094256ull, 4618287698902489547ull}},
+{{13711846505156631788ull, 4584714766358708609ull,
+ 13729571586757729916ull, 5772859623628111934ull}},
+{{3304750076163626023ull, 5730893457948385762ull,
+ 7938592446592386587ull, 7216074529535139918ull}},
+{{13354309632059308336ull, 2551930804008094298ull,
+ 699868521385707426ull, 9020093161918924898ull}},
+{{12958129538464455614ull, 6206642770932446840ull,
+ 5049103844293455045ull, 5637558226199328061ull}},
+{{16197661923080569518ull, 12369989482092946454ull,
+ 10923065823794206710ull, 7046947782749160076ull}},
+{{11023705366995936089ull, 6239114815761407260ull,
+ 13653832279742758388ull, 8808684728436450095ull}},
+{{16113187891227235864ull, 13122818796705655345ull,
+ 15451174202480305848ull, 5505427955272781309ull}},
+{{6306426808751881118ull, 16403523495882069182ull,
+ 5478909697818218598ull, 6881784944090976637ull}},
+{{17106405547794627205ull, 11281032332997810669ull,
+ 11460323140700161152ull, 8602231180113720796ull}},
+{{12997346476585335955ull, 7050645208123631668ull,
+ 16386073999792376528ull, 5376394487571075497ull}},
+{{16246683095731669944ull, 8813306510154539585ull,
+ 6647534444458306948ull, 6720493109463844372ull}},
+{{6473295814382423718ull, 11016633137693174482ull,
+ 8309418055572883685ull, 8400616386829805465ull}},
+{{8657495902416402728ull, 9191238720271928003ull,
+ 16722601330801522063ull, 5250385241768628415ull}},
+{{6210183859593115506ull, 6877362381912522100ull,
+ 16291565645074514675ull, 6562981552210785519ull}},
+{{7762729824491394382ull, 3985016958963264721ull,
+ 15752771037915755440ull, 8203726940263481899ull}},
+{{16380921186375591249ull, 2490635599352040450ull,
+ 7539638889483653198ull, 5127329337664676187ull}},
+{{11252779446114713253ull, 12336666536044826371ull,
+ 4812862593427178593ull, 6409161672080845234ull}},
+{{9454288289216003662ull, 1585775114773869252ull,
+ 15239450278638749050ull, 8011452090101056542ull}},
+{{15132302217614778097ull, 5602795465161056186ull,
+ 4912970405721830252ull, 5007157556313160339ull}},
+{{9692005735163696813ull, 7003494331451320233ull,
+ 1529526988724899911ull, 6258946945391450424ull}},
+{{16726693187382008920ull, 4142681895886762387ull,
+ 1911908735906124889ull, 7823683681739313030ull}},
+{{8148340232900061623ull, 14118391230997696252ull,
+ 15030001015223491767ull, 4889802301087070643ull}},
+{{10185425291125077029ull, 13036303020319732411ull,
+ 14175815250601976805ull, 6112252876358838304ull}},
+{{8120095595478958382ull, 2460320720117501802ull,
+ 17719769063252471007ull, 7640316095448547880ull}},
+{{9686745765601736893ull, 8455229477714520482ull,
+ 11074855664532794379ull, 4775197559655342425ull}},
+{{2885060170147395308ull, 5957350828715762699ull, 8511525383829262ull,
+ 5968996949569178032ull}},
+{{17441383267966407847ull, 16670060572749479181ull,
+ 10639406729786577ull, 7461246186961472540ull}},
+{{13206707551692698857ull, 3501258830327342632ull,
+ 9230021666060892419ull, 4663278866850920337ull}},
+{{16508384439615873571ull, 18211631593191342002ull,
+ 16149213101003503427ull, 5829098583563650421ull}},
+{{11412108512665066155ull, 18152853473061789599ull,
+ 6351458320972215572ull, 7286373229454563027ull}},
+{{9653449622403944790ull, 4244322767617685383ull,
+ 3327636882787881562ull, 9107966536818203784ull}},
+{{12950935041643547350ull, 7264387748188441268ull,
+ 2079773051742425976ull, 5692479085511377365ull}},
+{{16188668802054434187ull, 9080484685235551585ull,
+ 7211402333105420374ull, 7115598856889221706ull}},
+{{6400777947285879022ull, 2127233819689663674ull,
+ 18237624953236551276ull, 8894498571111527132ull}},
+{{8612172235481062293ull, 10552893174160815604ull,
+ 2175143558918068739ull, 5559061606944704458ull}},
+{{10765215294351327866ull, 8579430449273631601ull,
+ 11942301485502361732ull, 6948827008680880572ull}},
+{{18068205136366547737ull, 10724288061592039501ull,
+ 14927876856877952165ull, 8686033760851100715ull}},
+{{13598471219442786288ull, 9008523047708718640ull,
+ 7024080026335026151ull, 5428771100531937947ull}},
+{{16998089024303482859ull, 6648967791208510396ull,
+ 4168414014491394785ull, 6785963875664922434ull}},
+{{2800867206669801958ull, 12922895757438025900ull,
+ 14433889554969019289ull, 8482454844581153042ull}},
+{{10973914041023402032ull, 1159280820757684331ull,
+ 13632866990283024960ull, 5301534277863220651ull}},
+{{9105706532851864636ull, 1449101025947105414ull,
+ 12429397719426393296ull, 6626917847329025814ull}},
+{{2158761129210054987ull, 1811376282433881768ull,
+ 6313375112428215812ull, 8283647309161282268ull}},
+{{1349225705756284367ull, 10355482213375951913ull,
+ 13169231482122410690ull, 5177279568225801417ull}},
+{{6298218150622743362ull, 3720980729865164083ull,
+ 2626481297370849651ull, 6471599460282251772ull}},
+{{3261086669851041299ull, 39539893904067200ull, 3283101621713562064ull,
+ 8089499325352814715ull}},
+{{2038179168656900812ull, 24712433690042000ull, 18192839578066833954ull,
+ 5055937078345509196ull}},
+{{2547723960821126015ull, 9254262578967328308ull,
+ 4294305398873990826ull, 6319921347931886496ull}},
+{{3184654951026407518ull, 2344456186854384577ull,
+ 5367881748592488533ull, 7899901684914858120ull}},
+{{13519624390459974459ull, 3771128125997684312ull,
+ 3354926092870305333ull, 4937438553071786325ull}},
+{{16899530488074968074ull, 9325596175924493294ull,
+ 8805343634515269570ull, 6171798191339732906ull}},
+{{11901041073238934284ull, 2433623183050840810ull,
+ 1783307506289311155ull, 7714747739174666133ull}},
+{{12049836689201721832ull, 17661915553902633170ull,
+ 3420410200644513423ull, 4821717336984166333ull}},
+{{5838923824647376482ull, 17465708423950903559ull,
+ 8887198769233029683ull, 6027146671230207916ull}},
+{{2686968762381832698ull, 17220449511511241545ull,
+ 11108998461541287104ull, 7533933339037759895ull}},
+{{13208570522557115196ull, 10762780944694525965ull,
+ 13860653066104386296ull, 4708708336898599934ull}},
+{{2675655097914230283ull, 13453476180868157457ull,
+ 8102444295775707062ull, 5885885421123249918ull}},
+{{7956254890820175758ull, 7593473189230421013ull, 904683332864858020ull,
+ 7357356776404062398ull}},
+{{14557004631952607602ull, 9491841486538026266ull,
+ 10354226202935848333ull, 9196695970505077997ull}},
+{{13709813913397767655ull, 8238243938299960368ull,
+ 8777234386048599160ull, 5747934981565673748ull}},
+{{17137267391747209569ull, 10297804922874950460ull,
+ 10971542982560748950ull, 7184918726957092185ull}},
+{{2974840165974460345ull, 3648884116738912268ull,
+ 18326114746628324092ull, 8981148408696365231ull}},
+{{11082647140588813524ull, 11503924609816595975ull,
+ 18371350744283784413ull, 5613217755435228269ull}},
+{{9241622907308629001ull, 544847706988581257ull, 9129130375072566805ull,
+ 7016522194294035337ull}},
+{{16163714652563174155ull, 5292745652163114475ull,
+ 16023098987268096410ull, 8770652742867544171ull}},
+{{7796478648638289895ull, 7919652051029334451ull,
+ 7708593857828866304ull, 5481657964292215107ull}},
+{{5133912292370474464ull, 9899565063786668064ull,
+ 5024056303858694976ull, 6852072455365268884ull}},
+{{6417390365463093080ull, 12374456329733335080ull,
+ 6280070379823368720ull, 8565090569206586105ull}},
+{{4010868978414433175ull, 7734035206083334425ull,
+ 15454259033458075210ull, 5353181605754116315ull}},
+{{9625272241445429373ull, 444171970749392223ull,
+ 14706137773395206109ull, 6691477007192645394ull}},
+{{7419904283379398812ull, 5166900981864128183ull,
+ 9159300179889231828ull, 8364346258990806743ull}},
+{{11554969204753206114ull, 12452685150519855922ull,
+ 12642091640071851748ull, 5227716411869254214ull}},
+{{5220339469086731834ull, 15565856438149819903ull,
+ 6579242513235038877ull, 6534645514836567768ull}},
+{{1913738317931026889ull, 5622262492405111167ull,
+ 8224053141543798597ull, 8168306893545709710ull}},
+{{8113615476347973662ull, 5819757066966888431ull, 528347195037486219ull,
+ 5105191808466068569ull}},
+{{5530333327007579173ull, 2663010315281222635ull,
+ 5272120012224245678ull, 6381489760582585711ull}},
+{{2301230640332086062ull, 12552134930956304102ull,
+ 1978463996852919193ull, 7976862200728232139ull}},
+{{15273327205489717501ull, 927555304206608207ull,
+ 17377441062528932160ull, 4985538875455145086ull}},
+{{14479972988434758972ull, 1159444130258260259ull,
+ 12498429291306389392ull, 6231923594318931358ull}},
+{{13488280217116060811ull, 1449305162822825324ull,
+ 6399664577278210932ull, 7789904492898664198ull}},
+{{17653547172552313815ull, 10129187763619041635ull,
+ 17834848416081045544ull, 4868690308061665123ull}},
+{{17455247947263004365ull, 12661484704523802044ull,
+ 17681874501673919026ull, 6085862885077081404ull}},
+{{3372315860369203840ull, 6603483843799976748ull,
+ 3655599053382847167ull, 7607328606346351756ull}},
+{{11331069449585528208ull, 11044706430016067323ull,
+ 11508121445219055287ull, 4754580378966469847ull}},
+{{9552150793554522356ull, 9194197019092696250ull,
+ 9773465788096431205ull, 5943225473708087309ull}},
+{{2716816455088377137ull, 16104432292293258217ull,
+ 16828518253547926910ull, 7429031842135109136ull}},
+{{13227225330498705471ull, 5453584164255898481ull,
+ 10517823908467454319ull, 4643144901334443210ull}},
+{{2698973607841218126ull, 2205294186892485198ull,
+ 3923907848729542091ull, 5803931126668054013ull}},
+{{12597089046656298466ull, 16591675788897770209ull,
+ 9516570829339315517ull, 7254913908335067516ull}},
+{{1911303253038209370ull, 6904536680840049050ull,
+ 11895713536674144397ull, 9068642385418834395ull}},
+{{5806250551576268760ull, 6621178434738724608ull,
+ 5128977951207646296ull, 5667901490886771497ull}},
+{{7257813189470335950ull, 8276473043423405760ull,
+ 11022908457436945774ull, 7084876863608464371ull}},
+{{9072266486837919938ull, 1122219267424481392ull,
+ 9166949553368794314ull, 8856096079510580464ull}},
+{{5670166554273699961ull, 5313073060567688774ull,
+ 5729343470855496446ull, 5535060049694112790ull}},
+{{16311080229696900759ull, 15864713362564386775ull,
+ 16385051375424146365ull, 6918825062117640987ull}},
+{{15777164268693738045ull, 5995833647923319757ull,
+ 15869628200852795053ull, 8648531327647051234ull}},
+{{12166570677147280230ull, 6053239039165768800ull,
+ 14530203643960384812ull, 5405332079779407021ull}},
+{{15208213346434100288ull, 7566548798957211000ull,
+ 4327696499668317303ull, 6756665099724258777ull}},
+{{563522609333073744ull, 4846499980269125847ull,
+ 10021306643012784533ull, 8445831374655323471ull}},
+{{7269730658474252946ull, 5334905496881897606ull,
+ 13180845679524072189ull, 5278644609159577169ull}},
+{{18310535359947591990ull, 11280317889529759911ull,
+ 2640999044122926524ull, 6598305761449471462ull}},
+{{18276483181507102084ull, 14100397361912199889ull,
+ 12524620842008433963ull, 8247882201811839327ull}},
+{{4505272960800856947ull, 6506905341981430979ull,
+ 14745417053896353083ull, 5154926376132399579ull}},
+{{1019905182573683279ull, 3521945659049400820ull,
+ 13820085298943053450ull, 6443657970165499474ull}},
+{{1274881478217104099ull, 13625804110666526833ull,
+ 8051734586824041004ull, 8054572462706874343ull}},
+{{12326015969954159822ull, 17739499606021355078ull,
+ 11949863144406107483ull, 5034107789191796464ull}},
+{{6184147925587923969ull, 17562688489099305944ull,
+ 14937328930507634354ull, 6292634736489745580ull}},
+{{7730184906984904961ull, 12729988574519356622ull,
+ 224917089424991327ull, 7865793420612181976ull}},
+{{219679548438177697ull, 14873771886715679745ull, 140573180890619579ull,
+ 4916120887882613735ull}},
+{{4886285453975110025ull, 13980528839967211777ull,
+ 14010774531395438186ull, 6145151109853267168ull}},
+{{10719542835896275435ull, 8252289013104238913ull,
+ 17513468164244297733ull, 7681438887316583960ull}},
+{{18228929318503641907ull, 7463523642403843272ull,
+ 10945917602652686083ull, 4800899304572864975ull}},
+{{4339417574420000768ull, 4717718534577416187ull,
+ 9070710984888469700ull, 6001124130716081219ull}},
+{{812585949597613056ull, 5897148168221770234ull, 6726702712683199221ull,
+ 7501405163395101524ull}},
+{{5119552236925896064ull, 5991560614352300348ull,
+ 13427561232281775321ull, 4688378227121938452ull}},
+{{6399440296157370080ull, 12101136786367763339ull,
+ 16784451540352219151ull, 5860472783902423065ull}},
+{{3387614351769324696ull, 10514734964532316270ull,
+ 7145506370158110227ull, 7325590979878028832ull}},
+{{13457889976566431678ull, 8531732687238007433ull,
+ 8931882962697637784ull, 9156988724847536040ull}},
+{{1493652207712937943ull, 5332332929523754646ull,
+ 5582426851686023615ull, 5723117953029710025ull}},
+{{11090437296495948236ull, 2053730143477305403ull,
+ 11589719583034917423ull, 7153897441287137531ull}},
+{{9251360602192547391ull, 16402220734628795466ull,
+ 9875463460366258874ull, 8942371801608921914ull}},
+{{10393786394797730024ull, 14863073977570385070ull,
+ 10783850681156299700ull, 5588982376005576196ull}},
+{{3768860956642386722ull, 132098398253429722ull,
+ 13479813351445374626ull, 6986227970006970245ull}},
+{{13934448232657759210ull, 9388495034671562960ull,
+ 3014708634024554570ull, 8732784962508712807ull}},
+{{8709030145411099506ull, 10479495415097114754ull,
+ 8801721923906428462ull, 5457990601567945504ull}},
+{{1662915644909098575ull, 3875997232016617635ull,
+ 11002152404883035578ull, 6822488251959931880ull}},
+{{15913702611418536930ull, 14068368576875547851ull,
+ 13752690506103794472ull, 8528110314949914850ull}},
+{{7640221122922891630ull, 8792730360547217407ull,
+ 13207117584742259449ull, 5330068946843696781ull}},
+{{4938590385226226633ull, 15602598969111409663ull,
+ 2673838925645660599ull, 6662586183554620977ull}},
+{{1561551963105395387ull, 14891562692961874175ull,
+ 7953984675484463653ull, 8328232729443276221ull}},
+{{7893499004581953973ull, 11613069692314865311ull,
+ 7277083431391483735ull, 5205145455902047638ull}},
+{{5255187737300054562ull, 9904651096966193735ull,
+ 18319726326094130477ull, 6506431819877559547ull}},
+{{1957298653197680299ull, 16992499889635130073ull,
+ 18287971889190275192ull, 8133039774846949434ull}},
+{{12752526704317019947ull, 10620312431021956295ull,
+ 16041668449171309899ull, 5083149859279343396ull}},
+{{11328972361968887030ull, 8663704520350057465ull,
+ 1605341487754585758ull, 6353937324099179246ull}},
+{{326157397178945075ull, 1606258613582796024ull,
+ 11230048896548008006ull, 7942421655123974057ull}},
+{{203848373236840672ull, 14838969688771411227ull, 101251532701423147ull,
+ 4964013534452483786ull}},
+{{14089868521828214552ull, 13937026092536876129ull,
+ 9349936452731554742ull, 6205016918065604732ull}},
+{{3777277597003104478ull, 8197910578816319354ull,
+ 11687420565914443428ull, 7756271147582005915ull}},
+{{6972484516554328203ull, 14347066148614975404ull,
+ 4998794844482833190ull, 4847669467238753697ull}},
+{{8715605645692910253ull, 8710460648913943447ull,
+ 10860179574030929392ull, 6059586834048442121ull}},
+{{6282821038688749912ull, 10888075811142429309ull,
+ 18186910485966049644ull, 7574483542560552651ull}},
+{{6232606158394162647ull, 16028419418818794126ull,
+ 9060976044515087075ull, 4734052214100345407ull}},
+{{17014129734847479117ull, 15423838255096104753ull,
+ 6714534037216470940ull, 5917565267625431759ull}},
+{{7432604113277185184ull, 833053745160579326ull, 3781481528093200772ull,
+ 7396956584531789699ull}},
+{{33691552370852836ull, 9744030627580137887ull, 57582945844556530ull,
+ 4623097865332368562ull}},
+{{13877172495745729757ull, 2956666247620396550ull,
+ 9295350719160471471ull, 5778872331665460702ull}},
+{{8123093582827386389ull, 17530890864807659400ull,
+ 2395816362095813530ull, 7223590414581825878ull}},
+{{10153866978534232986ull, 12690241544154798442ull,
+ 12218142489474542721ull, 9029488018227282347ull}},
+{{10957852880011283520ull, 1013871937455667170ull,
+ 5330496046707895249ull, 5643430011392051467ull}},
+{{4473944063159328592ull, 5879025940246971867ull,
+ 2051434039957481157ull, 7054287514240064334ull}},
+{{980744060521772836ull, 11960468443736102738ull,
+ 11787664586801627254ull, 8817859392800080417ull}},
+{{5224651056253495927ull, 2863606758907676307ull, 449761339109935178ull,
+ 5511162120500050261ull}},
+{{1919127801889482004ull, 12802880485489371192ull,
+ 5173887692314806876ull, 6888952650625062826ull}},
+{{2398909752361852505ull, 16003600606861713990ull,
+ 15690731652248284403ull, 8611190813281328532ull}},
+{{15334376650508321528ull, 7696407370074877291ull,
+ 583335245800401944ull, 5381994258300830333ull}},
+{{14556284794708014006ull, 9620509212593596614ull,
+ 5340855075677890334ull, 6727492822876037916ull}},
+{{8971983956530241699ull, 2802264478887219960ull,
+ 6676068844597362918ull, 8409366028595047395ull}},
+{{5607489972831401062ull, 15586473354586676187ull,
+ 1866700018659657871ull, 5255853767871904622ull}},
+{{2397676447611863424ull, 14871405674805957330ull,
+ 11556747060179348147ull, 6569817209839880777ull}},
+{{12220467596369605087ull, 13977571075080058758ull,
+ 610875769942021472ull, 8212271512299850972ull}},
+{{3026106229303615276ull, 8735981921925036724ull,
+ 9605169393068539228ull, 5132669695187406857ull}},
+{{3782632786629519095ull, 10919977402406295905ull,
+ 16618147759763061939ull, 6415837118984258571ull}},
+{{9339977001714286772ull, 9038285734580481977ull,
+ 16160998681276439520ull, 8019796398730323214ull}},
+{{17366700672139898993ull, 5648928584112801235ull,
+ 5488938157370386796ull, 5012372749206452009ull}},
+{{17096689821747485837ull, 7061160730141001544ull,
+ 11472858715140371399ull, 6265465936508065011ull}},
+{{2924118203474805680ull, 4214764894248864027ull,
+ 9729387375498076345ull, 7831832420635081264ull}},
+{{17968474941667611214ull, 14163443104974009776ull,
+ 6080867109686297715ull, 4894895262896925790ull}},
+{{4013849603374962402ull, 13092617862790124317ull,
+ 16824455923962647952ull, 6118619078621157237ull}},
+{{9628998022646090906ull, 16365772328487655396ull,
+ 7195511849671146228ull, 7648273848276446547ull}},
+{{15241495801008582624ull, 1005235668450008814ull,
+ 2191351896830772441ull, 4780171155172779092ull}},
+{{9828497714405952472ull, 5868230603989898922ull,
+ 2739189871038465551ull, 5975213943965973865ull}},
+{{3062250106152664782ull, 2723602236559985749ull,
+ 8035673357225469843ull, 7469017429957467331ull}},
+{{4219749325559109441ull, 17843152462345848757ull,
+ 2716452839052224699ull, 4668135893723417082ull}},
+{{9886372675376274705ull, 17692254559504923042ull,
+ 12618938085670056682ull, 5835169867154271352ull}},
+{{3134593807365567573ull, 12891946162526377995ull,
+ 15773672607087570853ull, 7293962333942839190ull}},
+{{17753300314489123179ull, 2279874647875808781ull,
+ 10493718722004687759ull, 9117452917428548988ull}},
+{{13401655705769395939ull, 8342450682563462344ull,
+ 15781946238107705657ull, 5698408073392843117ull}},
+{{16752069632211744923ull, 15039749371631715834ull,
+ 5892374742352468359ull, 7123010091741053897ull}},
+{{11716715003409905346ull, 14188000696112256889ull,
+ 11977154446367973353ull, 8903762614676317371ull}},
+{{405417849490108986ull, 1949971407429078700ull, 5179878519766289394ull,
+ 5564851634172698357ull}},
+{{506772311862636232ull, 11660836296141124183ull,
+ 11086534168135249646ull, 6956064542715872946ull}},
+{{14468523445110459002ull, 5352673333321629420ull,
+ 4634795673314286250ull, 8695080678394841183ull}},
+{{18266199190048812684ull, 7957106851753406291ull,
+ 9814276323462510762ull, 5434425423996775739ull}},
+{{18221062969133627951ull, 723011527836982056ull,
+ 7656159385900750549ull, 6793031779995969674ull}},
+{{4329584637707483323ull, 5515450428223615475ull, 346827195521162378ull,
+ 8491289724994962093ull}},
+{{400147389353483125ull, 8058842536067147576ull, 2522610006414420438ull,
+ 5307056078121851308ull}},
+{{500184236691853906ull, 850181133229158662ull, 3153262508018025548ull,
+ 6633820097652314135ull}},
+{{9848602332719593190ull, 1062726416536448327ull,
+ 17776636190304695647ull, 8292275122065392668ull}},
+{{13072905485590827600ull, 7581733037976362060ull,
+ 1887025582085658971ull, 5182671951290870418ull}},
+{{16341131856988534500ull, 4865480279043064671ull,
+ 11582154014461849522ull, 6478339939113588022ull}},
+{{15814728802808280221ull, 15305222385658606647ull,
+ 5254320481222536094ull, 8097924923891985028ull}},
+{{16801734529396256994ull, 4954077972609241250ull,
+ 12507322337618860867ull, 5061203077432490642ull}},
+{{11778796124890545435ull, 1580911447334163659ull,
+ 6410780885168800276ull, 6326503846790613303ull}},
+{{10111809137685793889ull, 1976139309167704574ull,
+ 3401790088033612441ull, 7908129808488266629ull}},
+{{1708194692626233277ull, 12764302114298285119ull,
+ 4431961814234701727ull, 4942581130305166643ull}},
+{{15970301421064955308ull, 11343691624445468494ull,
+ 928266249365989255ull, 6178226412881458304ull}},
+{{10739504739476418327ull, 9567928512129447714ull,
+ 1160332811707486569ull, 7722783016101822880ull}},
+{{11323876480600149359ull, 17509170366149374581ull,
+ 725208007317179105ull, 4826739385063639300ull}},
+{{319787545468022986ull, 8051404902404554515ull, 906510009146473882ull,
+ 6033424231329549125ull}},
+{{14234792487117192445ull, 840884091150917335ull,
+ 5744823529860480257ull, 7541780289161936406ull}},
+{{15814274332089327134ull, 12054767603037793094ull,
+ 17425572761444963872ull, 4713612680726210253ull}},
+{{10544470878256883109ull, 15068459503797241368ull,
+ 7946907896524041128ull, 5892015850907762817ull}},
+{{13180588597821103887ull, 388830306037000094ull,
+ 14545320889082439315ull, 7365019813634703521ull}},
+{{7252363710421604050ull, 14321095937828413830ull,
+ 4346593056070885431ull, 9206274767043379402ull}},
+{{18367785374295666244ull, 15868213988783840499ull,
+ 7328306678471691298ull, 5753921729402112126ull}},
+{{18348045699442194900ull, 10611895449125024816ull,
+ 18383755384944389931ull, 7192402161752640157ull}},
+{{4488313050593192009ull, 8653183292978893117ull,
+ 9144636175898323702ull, 8990502702190800197ull}},
+{{5111038665834438958ull, 796553539684420294ull, 8021240619150146266ull,
+ 5619064188869250123ull}},
+{{15612170369147824505ull, 10219063961460301175ull,
+ 5414864755510294928ull, 7023830236086562654ull}},
+{{14903526943007392728ull, 12773829951825376469ull,
+ 15991952981242644468ull, 8779787795108203317ull}},
+{{11620547348593314407ull, 17207015756745636101ull,
+ 12300813622490346744ull, 5487367371942627073ull}},
+{{690626130459479296ull, 3062025622222493511ull, 1540958972830769719ull,
+ 6859209214928283842ull}},
+{{14698340718356512832ull, 17662590083060280600ull,
+ 11149570752893237956ull, 8574011518660354802ull}},
+{{9186462948972820520ull, 1815746765057899567ull,
+ 11580167738985661627ull, 5358757199162721751ull}},
+{{6871392667788637746ull, 16104741511604538171ull,
+ 9863523655304689129ull, 6698446498953402189ull}},
+{{3977554816308409279ull, 6295868834223509002ull,
+ 16941090587558249316ull, 8373058123691752736ull}},
+{{7097657778620143704ull, 13158290058244468934ull,
+ 10588181617223905822ull, 5233161327307345460ull}},
+{{18095444260129955437ull, 7224490535950810359ull,
+ 13235227021529882278ull, 6541451659134181825ull}},
+{{18007619306735056393ull, 18253985206793288757ull,
+ 2708975721630189135ull, 8176814573917727282ull}},
+{{13560605075923104198ull, 18326269781886887329ull,
+ 6304795844446256113ull, 5110509108698579551ull}},
+{{3115698289621716535ull, 9072779172076445450ull,
+ 3269308787130432238ull, 6388136385873224439ull}},
+{{13117994898881921476ull, 2117601928240781004ull,
+ 17921694039195204010ull, 7985170482341530548ull}},
+{{17422118848655976731ull, 5935187223577876031ull,
+ 1977686737642226698ull, 4990731551463456593ull}},
+{{17165962542392583010ull, 16642356066327120847ull,
+ 7083794440480171276ull, 6238414439329320741ull}},
+{{16845767159563340858ull, 2356201009199349443ull,
+ 13466429069027602000ull, 7798018049161650926ull}},
+{{8222761465513394084ull, 1472625630749593402ull,
+ 3804832149714863346ull, 4873761280726031829ull}},
+{{1055079795036966797ull, 11064154075291767561ull,
+ 9367726205570967086ull, 6092201600907539786ull}},
+{{5930535762223596400ull, 4606820557259933643ull,
+ 2486285720108933050ull, 7615252001134424733ull}},
+{{1400741842176053798ull, 7490948866714846431ull,
+ 3859771584281777108ull, 4759532500709015458ull}},
+{{15585985358002230960ull, 9363686083393558038ull,
+ 14048086517206997193ull, 5949415625886269322ull}},
+{{10259109660648012892ull, 16316293622669335452ull,
+ 8336736109653970683ull, 7436769532357836653ull}},
+{{15635315574759783866ull, 7891840504954640705ull,
+ 7516303077747425629ull, 4647980957723647908ull}},
+{{5709086413167566120ull, 14476486649620688786ull,
+ 9395378847184282036ull, 5809976197154559885ull}},
+{{16359730053314233458ull, 18095608312025860982ull,
+ 16355909577407740449ull, 7262470246443199856ull}},
+{{11226290529788016014ull, 8784452334750162516ull,
+ 1998142898050123946ull, 9078087808053999821ull}},
+{{16239803617972285817ull, 10101968727646239476ull,
+ 3554682320495021418ull, 5673804880033749888ull}},
+{{1853010448755805655ull, 3404088872703023538ull,
+ 4443352900618776773ull, 7092256100042187360ull}},
+{{11539635097799532877ull, 8866797109306167326ull,
+ 5554191125773470966ull, 8865320125052734200ull}},
+{{2600585917697320144ull, 930062174888966675ull, 3471369453608419354ull,
+ 5540825078157958875ull}},
+{{17085790452403813892ull, 10385949755465984151ull,
+ 18174269872292687904ull, 6926031347697448593ull}},
+{{16745552047077379461ull, 12982437194332480189ull,
+ 8882779285083696168ull, 8657539184621810742ull}},
+{{12771813038637056115ull, 8114023246457800118ull,
+ 940051034749922201ull, 5410961990388631714ull}},
+{{6741394261441544336ull, 14754215076499638052ull,
+ 10398435830292178559ull, 6763702487985789642ull}},
+{{8426742826801930420ull, 13831082827197159661ull,
+ 3774672751010447391ull, 8454628109982237053ull}},
+{{7572557275964900465ull, 15561955794639306644ull,
+ 4665013478595223571ull, 5284142568738898158ull}},
+{{9465696594956125581ull, 14840758724871745401ull,
+ 15054638885098805272ull, 6605178210923622697ull}},
+{{16443806762122544880ull, 104204332380130135ull,
+ 4983240551091342879ull, 8256472763654528372ull}},
+{{17194908253967672406ull, 6982656735378663190ull,
+ 12337897381286865107ull, 5160295477284080232ull}},
+{{12270263280604814699ull, 4116634900795941084ull,
+ 15422371726608581384ull, 6450369346605100290ull}},
+{{15337829100756018374ull, 5145793625994926355ull,
+ 10054592621405950922ull, 8062961683256375363ull}},
+{{7280300178758817532ull, 7827807034674216876ull,
+ 3978277379165025374ull, 5039351052035234602ull}},
+{{9100375223448521915ull, 561386756487995287ull,
+ 14196218760811057526ull, 6299188815044043252ull}},
+{{6763783010883264489ull, 9925105482464769917ull,
+ 17745273451013821907ull, 7873986018805054065ull}},
+{{6533207391015734258ull, 3897347917326787246ull,
+ 4173266879242556836ull, 4921241261753158791ull}},
+{{17389881275624443630ull, 4871684896658484057ull,
+ 604897580625808141ull, 6151551577191448489ull}},
+{{7902293539248390826ull, 10701292139250492976ull,
+ 5367807994209648080ull, 7689439471489310611ull}},
+{{4938933462030244266ull, 6688307587031558110ull,
+ 1049036987167336098ull, 4805899669680819132ull}},
+{{15397038864392581141ull, 17583756520644223445ull,
+ 1311296233959170122ull, 6007374587101023915ull}},
+{{5411240525208562714ull, 12756323613950503499ull,
+ 15474178347731126365ull, 7509218233876279893ull}},
+{{1076182319041657744ull, 10278545267932758639ull,
+ 11977204476545647930ull, 4693261396172674933ull}},
+{{15180285954084235892ull, 3624809548061172490ull,
+ 1136447540399896201ull, 5866576745215843667ull}},
+{{9751985405750519057ull, 9142697953503853517ull,
+ 15255617480782033963ull, 7333220931519804583ull}},
+{{16801667775615536725ull, 6816686423452428992ull,
+ 14457835832550154550ull, 9166526164399755729ull}},
+{{10501042359759710454ull, 18095487069939931832ull,
+ 2118618367702764737ull, 5729078852749847331ull}},
+{{13126302949699638067ull, 8784300782142751078ull,
+ 16483331014910619634ull, 7161348565937309163ull}},
+{{7184506650269771775ull, 1757003940823663040ull,
+ 15992477750210886639ull, 8951685707421636454ull}},
+{{4490316656418607360ull, 8015656490655871256ull,
+ 5383612575454416245ull, 5594803567138522784ull}},
+{{5612895820523259200ull, 14631256631747226974ull,
+ 6729515719318020306ull, 6993504458923153480ull}},
+{{16239491812508849808ull, 9065698752829257909ull,
+ 8411894649147525383ull, 8741880573653941850ull}},
+{{12455525392031725082ull, 12583590748159368049ull,
+ 9869120174144591268ull, 5463675358533713656ull}},
+{{1734348684757492640ull, 15729488435199210062ull,
+ 12336400217680739085ull, 6829594198167142070ull}},
+{{11391307892801641608ull, 5826802488716848865ull,
+ 6197128235246148049ull, 8536992747708927588ull}},
+{{202038405359944149ull, 15170966601516500301ull,
+ 13096577183883618338ull, 5335620467318079742ull}},
+{{4864234025127318090ull, 9740336215040849568ull,
+ 7147349442999747115ull, 6669525584147599678ull}},
+{{6080292531409147613ull, 7563734250373674056ull,
+ 18157558840604459702ull, 8336906980184499597ull}},
+{{3800182832130717258ull, 115647888056158381ull,
+ 13654317284591481266ull, 5210566862615312248ull}},
+{{9361914558590784477ull, 9367931896924973784ull,
+ 17067896605739351582ull, 6513208578269140310ull}},
+{{11702393198238480596ull, 2486542834301441422ull,
+ 12111498720319413670ull, 8141510722836425388ull}},
+{{2702309730471662469ull, 15389147326720564601ull,
+ 16793058737054409351ull, 5088444201772765867ull}},
+{{7989573181516965990ull, 14624748139973317847ull,
+ 16379637402890623785ull, 6360555252215957334ull}},
+{{5375280458468819583ull, 4445877119684483597ull,
+ 11251174716758503924ull, 7950694065269946668ull}},
+{{5665393295756706191ull, 12002045236657578056ull,
+ 16255356234828840760ull, 4969183790793716667ull}},
+{{7081741619695882739ull, 15002556545821972570ull,
+ 15707509275108663046ull, 6211479738492145834ull}},
+{{18075549061474629232ull, 9529823645422689904ull,
+ 10411014557031053000ull, 7764349673115182293ull}},
+{{11297218163421643270ull, 5956139778389181190ull,
+ 8812727107358102077ull, 4852718545696988933ull}},
+{{4898150667422278280ull, 12056860741413864392ull,
+ 15627594902625015500ull, 6065898182121236166ull}},
+{{6122688334277847849ull, 15071075926767330490ull,
+ 10311121591426493567ull, 7582372727651545208ull}},
+{{8438366227351042810ull, 16336951481870663412ull,
+ 6444450994641558479ull, 4738982954782215755ull}},
+{{10547957784188803512ull, 15809503333910941361ull,
+ 3443877724874560195ull, 5923728693477769694ull}},
+{{17796633248663392294ull, 15150193148961288797ull,
+ 13528219192947976052ull, 7404660866847212117ull}},
+{{13428738789628314136ull, 245498681246029690ull,
+ 10760980004806178985ull, 4627913041779507573ull}},
+{{7562551450180616862ull, 4918559369984925017ull,
+ 18062911024435111635ull, 5784891302224384466ull}},
+{{14064875331153158981ull, 1536513194053768367ull,
+ 13355266743689113736ull, 7231114127780480583ull}},
+{{12969408145514060823ull, 1920641492567210459ull,
+ 12082397411184004266ull, 9038892659725600729ull}},
+{{5800037081732594062ull, 5812086951281894441ull, 633969354348920810ull,
+ 5649307912328500456ull}},
+{{11861732370593130482ull, 16488480725957143859ull,
+ 792461692936151012ull, 7061634890410625570ull}},
+{{10215479444814025198ull, 2163856833736878208ull,
+ 10213949153024964574ull, 8827043613013281962ull}},
+{{6384674653008765749ull, 15187468576367712592ull,
+ 10995404239067990762ull, 5516902258133301226ull}},
+{{7980843316260957186ull, 9760963683604864932ull,
+ 4520883261980212645ull, 6896127822666626533ull}},
+{{9976054145326196483ull, 16812890622933469069ull,
+ 10262790095902653710ull, 8620159778333283166ull}},
+{{8540876850042566754ull, 5896370620906030264ull,
+ 1802557791511770665ull, 5387599861458301979ull}},
+{{10676096062553208442ull, 11982149294559925734ull,
+ 16088255294671877043ull, 6734499826822877473ull}},
+{{4121748041336734745ull, 10366000599772519264ull,
+ 6275261063057682592ull, 8418124783528596842ull}},
+{{2576092525835459216ull, 6478750374857824540ull,
+ 8533724182838439524ull, 5261327989705373026ull}},
+{{3220115657294324019ull, 8098437968572280675ull,
+ 1443783191693273597ull, 6576659987131716283ull}},
+{{17860202626900068736ull, 14734733479142738747ull,
+ 15639787044898755708ull, 8220824983914645353ull}},
+{{8856783632598849008ull, 18432580461318987525ull,
+ 2857337875420640461ull, 5138015614946653346ull}},
+{{15682665559175949164ull, 9205667521366570694ull,
+ 12795044381130576385ull, 6422519518683316682ull}},
+{{10379959912115160647ull, 16118770420135601272ull,
+ 6770433439558444673ull, 8028149398354145853ull}},
+{{6487474945071975405ull, 3156702484943668939ull,
+ 6537363908937721873ull, 5017593373971341158ull}},
+{{3497657662912581352ull, 8557564124606974078ull,
+ 17395076923026928149ull, 6271991717464176447ull}},
+{{13595444115495502497ull, 15308641174186105501ull,
+ 17132160135356272282ull, 7839989646830220559ull}},
+{{10802995581398383013ull, 14179586752293703842ull,
+ 17625129112238752032ull, 4899993529268887849ull}},
+{{4280372439893202958ull, 17724483440367129803ull,
+ 8196353335016276328ull, 6124991911586109812ull}},
+{{738779531439115794ull, 3708860226749360638ull,
+ 10245441668770345411ull, 7656239889482637265ull}},
+{{14296795262431611083ull, 12194632504656446ull,
+ 17932616089049935642ull, 4785149930926648290ull}},
+{{8647622041184738046ull, 9238615327485596366ull,
+ 13192398074457643744ull, 5981437413658310363ull}},
+{{1586155514626146749ull, 11548269159356995458ull,
+ 11878811574644666776ull, 7476796767072887954ull}},
+{{5603033215068729622ull, 7217668224598122161ull,
+ 12035943252580304639ull, 4672997979420554971ull}},
+{{11615477537263299932ull, 4410399262320264797ull,
+ 10433243047297992895ull, 5841247474275693714ull}},
+{{684288866296961203ull, 901313059472943093ull, 3818181772267715311ull,
+ 7301559342844617143ull}},
+{{5467047101298589407ull, 14961699379623342578ull,
+ 161041196907256234ull, 9126949178555771429ull}},
+{{8028590456739006284ull, 13962748130691977015ull,
+ 2406493757280729098ull, 5704343236597357143ull}},
+{{5424052052496369951ull, 8230063126510195461ull,
+ 16843175251883075085ull, 7130429045746696428ull}},
+{{11391751084047850342ull, 14899264926565132230ull,
+ 2607224991144292240ull, 8913036307183370536ull}},
+{{2508158409102518560ull, 9312040579103207644ull,
+ 1629515619465182650ull, 5570647691989606585ull}},
+{{3135198011378148200ull, 2416678687024233747ull,
+ 6648580542758866217ull, 6963309614987008231ull}},
+{{17754055569504848962ull, 7632534377207680087ull,
+ 3699039660021194867ull, 8704137018733760289ull}},
+{{18013813758581612457ull, 2464490976541106102ull,
+ 13841114833581716552ull, 5440085636708600180ull}},
+{{13293895161372239763ull, 3080613720676382628ull,
+ 17301393541977145690ull, 6800107045885750225ull}},
+{{16617368951715299704ull, 13074139187700254093ull,
+ 7791683872189268400ull, 8500133807357187782ull}},
+{{12691698604035756267ull, 8171336992312658808ull,
+ 258116401690904846ull, 5312583629598242364ull}},
+{{15864623255044695334ull, 990799203536047702ull, 322645502113631058ull,
+ 6640729536997802955ull}},
+{{10607407031951093359ull, 10461871041274835436ull,
+ 14238364932924202534ull, 8300911921247253693ull}},
+{{15853001431824209158ull, 1926983382369384243ull,
+ 11204821092291320536ull, 5188069950779533558ull}},
+{{15204565771352873543ull, 2408729227961730304ull,
+ 4782654328509374862ull, 6485087438474416948ull}},
+{{558963140481540313ull, 12234283571806938689ull,
+ 5978317910636718577ull, 8106359298093021185ull}},
+{{11878567008869432456ull, 728898204738254824ull,
+ 15265663740216418871ull, 5066474561308138240ull}},
+{{14848208761086790569ull, 14746180811204982242ull,
+ 635335601560971972ull, 6333093201635172801ull}},
+{{9336888914503712404ull, 18432726014006227803ull,
+ 5405855520378602869ull, 7916366502043966001ull}},
+{{3529712562351126301ull, 13826296767967586329ull,
+ 14907874746305096553ull, 4947729063777478750ull}},
+{{9023826721366295780ull, 3447812904677319199ull,
+ 9411471396026594884ull, 6184661329721848438ull}},
+{{6668097383280481820ull, 4309766130846648999ull,
+ 2540967208178467797ull, 7730826662152310548ull}},
+{{11085089892191382994ull, 4999446840992849576ull,
+ 10811476541966318181ull, 4831766663845194092ull}},
+{{13856362365239228742ull, 10860994569668449874ull,
+ 13514345677457897726ull, 6039708329806492615ull}},
+{{8097080919694260120ull, 4352871175230786535ull,
+ 12281246078394984254ull, 7549635412258115769ull}},
+{{11978204602449994431ull, 16555602539801405296ull,
+ 758249771355783302ull, 4718522132661322356ull}},
+{{14972755753062493039ull, 11471131137896980812ull,
+ 947812214194729128ull, 5898152665826652945ull}},
+{{269200617618564682ull, 14338913922371226016ull,
+ 5796451286170799314ull, 7372690832283316181ull}},
+{{336500772023205852ull, 8700270366109256712ull,
+ 11857250126140887047ull, 9215863540354145226ull}},
+{{210312982514503658ull, 12355198006459367301ull,
+ 12022467347265442308ull, 5759914712721340766ull}},
+{{4874577246570517476ull, 15443997508074209126ull,
+ 5804712147227027077ull, 7199893390901675958ull}},
+{{15316593595067922653ull, 5469938829810597695ull,
+ 16479262220888559655ull, 8999866738627094947ull}},
+{{16490400024558533514ull, 10336240796272705415ull,
+ 7993695878841655832ull, 5624916711641934342ull}},
+{{16001314012270778989ull, 12920300995340881769ull,
+ 768747811697293982ull, 7031145889552417928ull}},
+{{6166584460056310024ull, 6927004207321326404ull, 960934764621617478ull,
+ 8788932361940522410ull}},
+{{13077487324389969573ull, 18164435684857992714ull,
+ 5212270246315898827ull, 5493082726212826506ull}},
+{{7123487118632686158ull, 18093858587645102989ull,
+ 15738709844749649342ull, 6866353407766033132ull}},
+{{13516044916718245602ull, 13393951197701602928ull,
+ 1226643232227510062ull, 8582941759707541416ull}},
+{{8447528072948903501ull, 3759533480136113926ull, 766652020142193789ull,
+ 5364338599817213385ull}},
+{{1336038054331353569ull, 9311102868597530312ull,
+ 5570001043605130140ull, 6705423249771516731ull}},
+{{1670047567914191961ull, 11638878585746912890ull,
+ 2350815286079024771ull, 8381779062214395914ull}},
+{{5655465748373757880ull, 4968456106878126604ull,
+ 6080945572226778386ull, 5238611913883997446ull}},
+{{7069332185467197349ull, 15433942170452434063ull,
+ 16824554002138248790ull, 6548264892354996807ull}},
+{{4224979213406608783ull, 10069055676210766771ull,
+ 16419006484245423084ull, 8185331115443746009ull}},
+{{334768999165436537ull, 15516531834486505040ull,
+ 3344350025012307571ull, 5115831947152341256ull}},
+{{418461248956795672ull, 14783978774680743396ull,
+ 4180437531265384464ull, 6394789933940426570ull}},
+{{523076561195994589ull, 33229394641377629ull, 14448918950936506389ull,
+ 7993487417425533212ull}},
+{{2632765859961190570ull, 2326611380864554970ull,
+ 18253946381190092301ull, 4995929635890958257ull}},
+{{12514329361806264021ull, 7519950244508081616ull,
+ 8982374921205451664ull, 6244912044863697822ull}},
+{{15642911702257830026ull, 9399937805635102020ull,
+ 2004596614652038772ull, 7806140056079622278ull}},
+{{553447777056367958ull, 15098333165376714571ull,
+ 15087930939439687944ull, 4878837535049763923ull}},
+{{14526867776602623660ull, 426172383011341597ull,
+ 14248227655872222027ull, 6098546918812204904ull}},
+{{4323526665471115863ull, 14367773534046340709ull,
+ 17810284569840277533ull, 7623183648515256130ull}},
+{{5008047175133141366ull, 11285701467992656895ull,
+ 15743113874577561362ull, 4764489780322035081ull}},
+{{1648372950489038804ull, 4883754798136045311ull,
+ 5843834287939787991ull, 5955612225402543852ull}},
+{{15895524243393462217ull, 1493007479242668734ull,
+ 7304792859924734989ull, 7444515281753179815ull}},
+{{5323016633693525982ull, 3238972683740361911ull,
+ 11483024565094041224ull, 4652822051095737384ull}},
+{{2042084773689519573ull, 4048715854675452389ull,
+ 14353780706367551530ull, 5816027563869671730ull}},
+{{7164291985539287370ull, 14284266855199091294ull,
+ 8718853846104663604ull, 7270034454837089663ull}},
+{{18178737018778885021ull, 17855333568998864117ull,
+ 6286881289203441601ull, 9087543068546362079ull}},
+{{13667553645950497090ull, 4242054452983208217ull,
+ 10846829833393232857ull, 5679714417841476299ull}},
+{{3249384002155957650ull, 9914254084656398176ull,
+ 8946851273314153167ull, 7099643022301845374ull}},
+{{4061730002694947063ull, 7781131587393109816ull,
+ 1960192054787915651ull, 8874553777877306718ull}},
+{{2538581251684341914ull, 2557364232906999683ull,
+ 15060178089524610994ull, 5546596111173316698ull}},
+{{17008284619887591105ull, 12420077327988525411ull,
+ 9601850575050987934ull, 6933245138966645873ull}},
+{{16648669756432100977ull, 6301724623130880956ull,
+ 16613999237241122822ull, 8666556423708307341ull}},
+{{1182046560915287303ull, 17773635944738964310ull,
+ 12689592532489395715ull, 5416597764817692088ull}},
+{{10700930237998884936ull, 17605358912496317483ull,
+ 15861990665611744644ull, 6770747206022115110ull}},
+{{8764476779071218266ull, 3559954566910845238ull,
+ 10604116295159904998ull, 8463434007527643888ull}},
+{{866111968492123513ull, 16060029659601441986ull,
+ 6627572684474940623ull, 5289646254704777430ull}},
+{{10306011997469930199ull, 15463351056074414578ull,
+ 17507837892448451587ull, 6612057818380971787ull}},
+{{3659142959982636940ull, 14717502801665630319ull,
+ 17273111347133176580ull, 8265072272976214734ull}},
+{{9204493377630229944ull, 18421811287895794757ull,
+ 6184008573530847458ull, 5165670170610134209ull}},
+{{16117302740465175334ull, 13803892073014967638ull,
+ 12341696735340947227ull, 6457087713262667761ull}},
+{{10923256388726693359ull, 12643179072841321644ull,
+ 1592062863894020322ull, 8071359641578334702ull}},
+{{16050407279808959158ull, 12513672938953213931ull,
+ 14830097345215926413ull, 5044599775986459188ull}},
+{{15451323081333811043ull, 1807033118409353702ull, 90877607810356401ull,
+ 6305749719983073986ull}},
+{{10090781814812487996ull, 6870477416439080032ull,
+ 9336969046617721309ull, 7882187149978842482ull}},
+{{6306738634257804997ull, 6599891394488118972ull,
+ 10447291672563463722ull, 4926366968736776551ull}},
+{{7883423292822256247ull, 17473236279964924523ull,
+ 8447428572276941748ull, 6157958710920970689ull}},
+{{5242593097600432404ull, 3394801276246604038ull,
+ 15170971733773565090ull, 7697448388651213361ull}},
+{{17111678741282433965ull, 6733436816081515427ull,
+ 2564328305967396325ull, 4810905242907008351ull}},
+{{16777912408175654552ull, 13028482038529282188ull,
+ 17040468437741409118ull, 6013631553633760438ull}},
+{{2525646436510016574ull, 7062230511306826928ull,
+ 12077213510321985590ull, 7517039442042200548ull}},
+{{1578529022818760359ull, 18248952124848930542ull,
+ 16771630480806016801ull, 4698149651276375342ull}},
+{{11196533315378226256ull, 8976132100778999465ull,
+ 11741166064152745194ull, 5872687064095469178ull}},
+{{160608588940619108ull, 1996793089118973524ull, 5453085543336155685ull,
+ 7340858830119336473ull}},
+{{200760736175773885ull, 7107677379826104809ull,
+ 11428042947597582510ull, 9176073537649170591ull}},
+{{11654690506178328438ull, 18277356417673479217ull,
+ 14060055869889570924ull, 5735045961030731619ull}},
+{{733305077440746836ull, 4399951448382297406ull,
+ 12963383818934575752ull, 7168807451288414524ull}},
+{{10140003383655709353ull, 5499939310477871757ull,
+ 16204229773668219690ull, 8961009314110518155ull}},
+{{8643345123998512298ull, 8049148087476057752ull,
+ 7821800599328943354ull, 5600630821319073847ull}},
+{{10804181404998140372ull, 838063072490296382ull,
+ 5165564730733791289ull, 7000788526648842309ull}},
+{{4281854719392899657ull, 5659264859040258382ull,
+ 11068641931844627015ull, 8750985658311052886ull}},
+{{16511217254902725998ull, 10454569564541243344ull,
+ 2306215188975503980ull, 5469366036444408054ull}},
+{{2192277494918855881ull, 13068211955676554181ull,
+ 12106141023074155783ull, 6836707545555510067ull}},
+{{7352032887075957755ull, 11723578926168304822ull,
+ 10520990260415306825ull, 8545884431944387584ull}},
+{{18430078609704637309ull, 409707801214108657ull,
+ 6575618912759566766ull, 5341177769965242240ull}},
+{{9202540206848632924ull, 9735506788372411630ull,
+ 8219523640949458457ull, 6676472212456552800ull}},
+{{2279803221706015347ull, 16781069503892902442ull,
+ 10274404551186823071ull, 8345590265570691000ull}},
+{{6036563031993647496ull, 17405697467574145882ull,
+ 6421502844491764419ull, 5215993915981681875ull}},
+{{16769075826846835178ull, 17145435816040294448ull,
+ 3415192537187317620ull, 6519992394977102344ull}},
+{{2514600709848992357ull, 2985050696340816445ull,
+ 4268990671484147026ull, 8149990493721377930ull}},
+{{3877468452869314175ull, 6477342703640398182ull,
+ 7279805188104979795ull, 5093744058575861206ull}},
+{{14070207602941418527ull, 3484992361123109823ull,
+ 18323128521986000552ull, 6367180073219826507ull}},
+{{12976073485249385254ull, 4356240451403887279ull,
+ 18292224634055112786ull, 7958975091524783134ull}},
+{{15027574955921947640ull, 7334336300554817453ull,
+ 6820954377857057587ull, 4974359432202989459ull}},
+{{4949410639620270838ull, 4556234357266133913ull,
+ 3914506953893934080ull, 6217949290253736824ull}},
+{{10798449317952726451ull, 5695292946582667391ull,
+ 4893133692367417600ull, 7772436612817171030ull}},
+{{13666559851361535888ull, 3559558091614167119ull,
+ 16893266613011799712ull, 4857772883010731893ull}},
+{{12471513795774531956ull, 4449447614517708899ull,
+ 7281525210982585928ull, 6072216103763414867ull}},
+{{10977706226290777041ull, 5561809518147136124ull,
+ 4490220495300844506ull, 7590270129704268584ull}},
+{{16084438428286511459ull, 8087816967269347981ull,
+ 2806387809563027816ull, 4743918831065167865ull}},
+{{6270489980075975611ull, 10109771209086684977ull,
+ 8119670780381172674ull, 5929898538831459831ull}},
+{{12449798493522357418ull, 3413841974503580413ull,
+ 5537902457049077939ull, 7412373173539324789ull}},
+{{10086967067665167339ull, 18274552298560595422ull,
+ 5767032044869367663ull, 4632733233462077993ull}},
+{{3385336797726683365ull, 18231504354773356374ull,
+ 11820476074514097483ull, 5790916541827597491ull}},
+{{13455043034013130014ull, 18177694425039307563ull,
+ 10163909074715233950ull, 7238645677284496864ull}},
+{{12207117774089024614ull, 13498745994444358646ull,
+ 12704886343394042438ull, 9048307096605621080ull}},
+{{3017762590378252480ull, 3825030228100336250ull,
+ 7940553964621276524ull, 5655191935378513175ull}},
+{{12995575274827591408ull, 4781287785125420312ull,
+ 5314006437349207751ull, 7068989919223141469ull}},
+{{16244469093534489259ull, 1364923712979387486ull,
+ 11254194065113897593ull, 8836237399028926836ull}},
+{{5541107165031667883ull, 12382292366680586939ull,
+ 16257243327550961803ull, 5522648374393079272ull}},
+{{2314697937862196950ull, 10866179439923345770ull,
+ 1874810085729150638ull, 6903310467991349091ull}},
+{{12116744459182521995ull, 4359352263049406404ull,
+ 16178570662443602010ull, 8629138084989186363ull}},
+{{16796337323843852055ull, 7336281182833266906ull,
+ 7805763654813557304ull, 5393211303118241477ull}},
+{{11772049617950039261ull, 9170351478541583633ull,
+ 14368890586944334534ull, 6741514128897801846ull}},
+{{880003967155385364ull, 2239567311322203734ull, 8737741196825642360ull,
+ 8426892661122252308ull}},
+{{14385060534754279565ull, 1399729569576377333ull,
+ 14684460284870802283ull, 5266807913201407692ull}},
+{{4146267613160685744ull, 15584720017252635379ull,
+ 18355575356088502853ull, 6583509891501759615ull}},
+{{571148498023469276ull, 5645841966283630512ull,
+ 18332783176683240663ull, 8229387364377199519ull}},
+{{356967811264668297ull, 10446180256568350926ull,
+ 18375518513068107270ull, 5143367102735749699ull}},
+{{9669581800935611180ull, 3834353283855662849ull,
+ 18357712122907746184ull, 6429208878419687124ull}},
+{{16698663269596901878ull, 4792941604819578561ull,
+ 4500396079925131114ull, 8036511098024608906ull}},
+{{3519135515856981818ull, 7607274521439624505ull,
+ 7424433568380594850ull, 5022819436265380566ull}},
+{{9010605413248615177ull, 285721114944754823ull, 57169923620967755ull,
+ 6278524295331725708ull}},
+{{6651570748133381067ull, 14192209448963107241ull, 71462404526209693ull,
+ 7848155369164657135ull}},
+{{15686446763651832927ull, 11175973914815635977ull,
+ 6962193030469962914ull, 4905097105727910709ull}},
+{{5773000399282627446ull, 4746595356664769164ull,
+ 13314427306514841547ull, 6131371382159888386ull}},
+{{7216250499103284308ull, 1321558177403573551ull,
+ 7419662096288776126ull, 7664214227699860483ull}},
+{{11427685589580634549ull, 14661031916159397181ull,
+ 2331445800966791126ull, 4790133892312412802ull}},
+{{449548931693629474ull, 9102917858344470669ull,
+ 12137679288063264716ull, 5987667365390516002ull}},
+{{5173622183044424746ull, 11378647322930588336ull,
+ 5948727073224305087ull, 7484584206738145003ull}},
+{{3233513864402765466ull, 14029183604472699566ull,
+ 1412111411551496727ull, 4677865129211340627ull}},
+{{13265264367358232641ull, 12924793487163486553ull,
+ 15600197319721534621ull, 5847331411514175783ull}},
+{{2746522403915627089ull, 2320933803672194480ull,
+ 14888560631224530373ull, 7309164264392719729ull}},
+{{3433153004894533861ull, 7512853273017631004ull,
+ 4775642733748499254ull, 9136455330490899662ull}},
+{{11369092664913859471ull, 83847277208631473ull,
+ 16819834763874975746ull, 5710284581556812288ull}},
+{{376307775860160627ull, 9328181133365565150ull, 2578049381134168066ull,
+ 7137855726946015361ull}},
+{{9693756756679976592ull, 2436854379852180629ull,
+ 7834247744845097987ull, 8922319658682519201ull}},
+{{8364440982138679322ull, 17663935051903470557ull,
+ 16425619886596656001ull, 5576449786676574500ull}},
+{{15067237246100737056ull, 8244860759597174484ull,
+ 2085280784536268386ull, 6970562233345718126ull}},
+{{387302483916369704ull, 1082703912641692298ull,
+ 11829973017525111291ull, 8713202791682147657ull}},
+{{4853750070875118969ull, 16817591009896915350ull,
+ 476204108312112700ull, 5445751744801342286ull}},
+{{15290559625448674520ull, 2575244688661592571ull,
+ 9818627172244916684ull, 6807189681001677857ull}},
+{{14501513513383455246ull, 3219055860826990714ull,
+ 16884969983733533759ull, 8508987101252097321ull}},
+{{13675131964292047433ull, 8929438940657951052ull,
+ 3635577212192376743ull, 5318116938282560826ull}},
+{{17093914955365059291ull, 6550112657395050911ull,
+ 13767843552095246737ull, 6647646172853201032ull}},
+{{16755707675778936209ull, 12799326840171201543ull,
+ 17209804440119058421ull, 8309557716066501290ull}},
+{{17389846325002916987ull, 10305422284320694916ull,
+ 15367813793501799417ull, 5193473572541563306ull}},
+{{3290563832544094618ull, 17493463873828256550ull,
+ 9986395205022473463ull, 6491841965676954133ull}},
+{{13336576827534894080ull, 17255143823857932783ull,
+ 17094680024705479733ull, 8114802457096192666ull}},
+{{15252889544850390656ull, 13090307899124901941ull,
+ 15295861033868312737ull, 5071751535685120416ull}},
+{{5231053875780824608ull, 2527826818623963715ull, 673082218625839306ull,
+ 6339689419606400521ull}},
+{{1927131326298642856ull, 12383155560134730452ull,
+ 5453038791709687036ull, 7924611774508000651ull}},
+{{10427829115791427593ull, 16962844261938982340ull,
+ 1102306235604860445ull, 4952882359067500407ull}},
+{{13034786394739284491ull, 7368497272141564213ull,
+ 15212940849788239269ull, 6191102948834375508ull}},
+{{2458424938141941902ull, 13822307608604343171ull,
+ 569431988525747470ull, 7738878686042969386ull}},
+{{17677416650834571353ull, 4027256236950326577ull,
+ 4967581011255980073ull, 4836799178776855866ull}},
+{{8261712758261050479ull, 9645756314615296126ull,
+ 15432848300924750899ull, 6045998973471069832ull}},
+{{1103768910971537291ull, 7445509374841732254ull, 844316302446387008ull,
+ 7557498716838837291ull}},
+{{14524913624639374519ull, 4653443359276082658ull,
+ 16668598753524849544ull, 4723436698024273306ull}},
+{{8932769993944442340ull, 5816804199095103323ull,
+ 11612376405051286122ull, 5904295872530341633ull}},
+{{6554276474003165021ull, 16494377285723654962ull,
+ 680412451031943940ull, 7380369840662927042ull}},
+{{8708108814679366043ull, 1085613766722508543ull,
+ 5036943800322352867ull, 4612731150414329401ull}},
+{{6273449999921819649ull, 15192075263685299391ull,
+ 10907865768830328987ull, 5765913938017911751ull}},
+{{3230126481474886657ull, 14378408061179236335ull,
+ 9023146192610523330ull, 7207392422522389689ull}},
+{{17872716157125772033ull, 8749638039619269610ull,
+ 15890618759190542067ull, 9009240528152987111ull}},
+{{15782133616630995425ull, 3162680765548349554ull,
+ 16849165752135170648ull, 5630775330095616944ull}},
+{{10504294983933968473ull, 3953350956935436943ull,
+ 2614713116459411694ull, 7038469162619521181ull}},
+{{8518682711490072687ull, 14165060733024071987ull,
+ 7880077414001652521ull, 8798086453274401476ull}},
+{{3018333685467601478ull, 1935633930498963136ull,
+ 14148420420605808634ull, 5498804033296500922ull}},
+{{3772917106834501847ull, 11642914449978479728ull,
+ 8462153488902484984ull, 6873505041620626153ull}},
+{{4716146383543127309ull, 14553643062473099660ull,
+ 15189377879555494134ull, 8591881302025782691ull}},
+{{12170963526569230376ull, 4484340895618299383ull,
+ 7187518165508489882ull, 5369925813766114182ull}},
+{{10602018389784150066ull, 14828798156377650037ull,
+ 18207769743740388160ull, 6712407267207642727ull}},
+{{17864209005657575486ull, 89253621762510930ull,
+ 18148026161248097297ull, 8390509084009553409ull}},
+{{15776816646963372583ull, 11584998559670039091ull,
+ 4424987323138978954ull, 5244068177505970881ull}},
+{{15109334790276827825ull, 5257876162732773056ull,
+ 10142920172351111597ull, 6555085221882463601ull}},
+{{439924414136483165ull, 11184031221843354225ull,
+ 17290336233866277400ull, 8193856527353079501ull}},
+{{11804167804903771738ull, 6990019513652096390ull,
+ 13112303155380117327ull, 5121160329595674688ull}},
+{{5531837719274938865ull, 4125838373637732584ull,
+ 16390378944225146659ull, 6401450411994593360ull}},
+{{6914797149093673581ull, 545611948619777826ull, 2041229606571881708ull,
+ 8001813014993241701ull}},
+{{8933434236610933892ull, 9564379504742136949ull,
+ 3581611513321120019ull, 5001133134370776063ull}},
+{{15778478814191055269ull, 7343788362500283282ull,
+ 18312072446933563736ull, 6251416417963470078ull}},
+{{10499726480884043278ull, 9179735453125354103ull,
+ 13666718521812178862ull, 7814270522454337598ull}},
+{{13479858078193608905ull, 1125648639775958410ull,
+ 3930013057705223885ull, 4883919076533960999ull}},
+{{7626450560887235323ull, 6018746818147335917ull, 300830303704141952ull,
+ 6104898845667451249ull}},
+{{14144749219536432058ull, 7523433522684169896ull,
+ 4987723898057565344ull, 7631123557084314061ull}},
+{{8840468262210270036ull, 4702145951677606185ull,
+ 5423170445499672292ull, 4769452223177696288ull}},
+{{15662271346190225449ull, 5877682439597007731ull,
+ 6778963056874590365ull, 5961815278972120360ull}},
+{{14966153164310393908ull, 11958789067923647568ull,
+ 8473703821093237956ull, 7452269098715150450ull}},
+{{9353845727693996192ull, 16697615204307055538ull,
+ 9907750906610661626ull, 4657668186696969031ull}},
+{{2468935122762719432ull, 11648646968529043615ull,
+ 7773002614835939129ull, 5822085233371211289ull}},
+{{16921226958735563002ull, 725750655379140806ull,
+ 14327939286972311816ull, 7277606541714014111ull}},
+{{11928161661564677945ull, 907188319223926008ull,
+ 13298238090288001866ull, 9097008177142517639ull}},
+{{7455101038477923716ull, 5178678717942341659ull,
+ 15228927834071083022ull, 5685630110714073524ull}},
+{{4707190279670016741ull, 15696720434282702882ull,
+ 589415718879302161ull, 7107037638392591906ull}},
+{{15107359886442296734ull, 5785842487571214890ull,
+ 9960141685453903510ull, 8883797047990739882ull}},
+{{14053785947453823363ull, 17451209610014173018ull,
+ 10836774571836077597ull, 5552373154994212426ull}},
+{{8343860397462503395ull, 7978953957235552561ull,
+ 4322596177940321189ull, 6940466443742765533ull}},
+{{15041511515255517148ull, 14585378464971828605ull,
+ 10014931240852789390ull, 8675583054678456916ull}},
+{{11706787706248392170ull, 4504175522180004974ull,
+ 15482704062387769177ull, 5422239409174035572ull}},
+{{5410112595955714404ull, 10241905421152394122ull,
+ 906636004275159855ull, 6777799261467544466ull}},
+{{15986012781799418813ull, 8190695758013104748ull,
+ 10356667042198725627ull, 8472249076834430582ull}},
+{{767885951769860950ull, 2813341839544496516ull, 1861230882946815613ull,
+ 5295155673021519114ull}},
+{{959857439712326188ull, 8128363317858008549ull,
+ 11549910640538295324ull, 6618944591276898892ull}},
+{{5811507818067795638ull, 10160454147322510686ull,
+ 14437388300672869155ull, 8273680739096123615ull}},
+{{17467250441574535986ull, 4044440832862875226ull,
+ 15940896715561625078ull, 5171050461935077259ull}},
+{{12610691015113394175ull, 14278923077933369841ull,
+ 15314434876024643443ull, 6463813077418846574ull}},
+{{1928305713609579006ull, 13236967828989324398ull,
+ 9919671558176028496ull, 8079766346773558218ull}},
+{{15040249126288150591ull, 8273104893118327748ull,
+ 10811480742287405714ull, 5049853966733473886ull}},
+{{353567334150636623ull, 1118009079543133878ull, 4290978891004481335ull,
+ 6312317458416842358ull}},
+{{9665331204543071586ull, 15232569404711081059ull,
+ 14587095650610377476ull, 7890396823021052947ull}},
+{{3734988993625725790ull, 296983841089649854ull, 6811091772417791971ull,
+ 4931498014388158092ull}},
+{{13892108278886933045ull, 14206287856644226029ull,
+ 8513864715522239963ull, 6164372517985197615ull}},
+{{3530077293326502594ull, 13146173802377894633ull,
+ 6030644875975412050ull, 7705465647481497019ull}},
+{{13735513354397533881ull, 12828044644913572049ull,
+ 1463310038270938579ull, 4815916029675935637ull}},
+{{3334333637714753640ull, 11423369787714577158ull,
+ 6440823566266061128ull, 6019895037094919546ull}},
+{{13391289083998217857ull, 14279212234643221447ull,
+ 17274401494687352218ull, 7524868796368649432ull}},
+{{15287084705139968017ull, 13536193665079401308ull,
+ 10796500934179595136ull, 4703042997730405895ull}},
+{{662111807715408405ull, 16920242081349251636ull,
+ 8883940149297106016ull, 5878803747163007369ull}},
+{{827639759644260506ull, 2703558527977012929ull,
+ 15716611205048770425ull, 7348504683953759211ull}},
+{{5646235717982713537ull, 7991134178398654065ull,
+ 15034077987883575127ull, 9185630854942199014ull}},
+{{15058112369807665721ull, 11911987889140240646ull,
+ 4784612723999846550ull, 5741019284338874384ull}},
+{{9599268425404806343ull, 5666612824570525000ull,
+ 5980765904999808188ull, 7176274105423592980ull}},
+{{11999085531756007928ull, 7083266030713156250ull,
+ 7475957381249760235ull, 8970342631779491225ull}},
+{{12111114475774892859ull, 2121198259982028704ull,
+ 16201688409349569907ull, 5606464144862182015ull}},
+{{15138893094718616074ull, 16486555880259699592ull,
+ 15640424493259574479ull, 7008080181077727519ull}},
+{{476872294688718476ull, 15996508831897236587ull,
+ 14938844598147080195ull, 8760100226347159399ull}},
+{{16438946248676306712ull, 7691975010722078914ull,
+ 16254306901483006978ull, 5475062641466974624ull}},
+{{11325310773990607582ull, 391596726547822835ull,
+ 1871139553144207107ull, 6843828301833718281ull}},
+{{9544952449060871573ull, 14324553963466942256ull,
+ 6950610459857646787ull, 8554785377292147851ull}},
+{{5965595280663044733ull, 6647003217953144958ull,
+ 2038288528197335290ull, 5346740860807592407ull}},
+{{16680366137683581725ull, 17532126059296207005ull,
+ 16382918715528832824ull, 6683426076009490508ull}},
+{{7015399616822313444ull, 3468413500410707141ull,
+ 2031904320701489415ull, 8354282595011863136ull}},
+{{6690467769727639854ull, 9085287465397773819ull,
+ 1269940200438430884ull, 5221426621882414460ull}},
+{{3751398693732161914ull, 11356609331747217274ull,
+ 1587425250548038605ull, 6526783277353018075ull}},
+{{13912620404019978200ull, 360703609401857880ull,
+ 15819339618467211969ull, 8158479096691272593ull}},
+{{8695387752512486375ull, 11754654801944630935ull,
+ 2969558233900925624ull, 5099049435432045371ull}},
+{{6257548672213220065ull, 14693318502430788669ull,
+ 17547005847658320742ull, 6373811794290056713ull}},
+{{12433621858693912985ull, 9143276091183710028ull,
+ 8098699254290737216ull, 7967264742862570892ull}},
+{{16994385698538471424ull, 5714547556989818767ull,
+ 14285059070786486568ull, 4979540464289106807ull}},
+{{16631296104745701376ull, 7143184446237273459ull,
+ 13244637820055720306ull, 6224425580361383509ull}},
+{{16177434112504738816ull, 18152352594651367632ull,
+ 2720739219787486670ull, 7780531975451729387ull}},
+{{10110896320315461760ull, 6733534353229716866ull,
+ 17841363076863036833ull, 4862832484657330866ull}},
+{{3415248363539551392ull, 13028603959964533987ull,
+ 13078331809224020233ull, 6078540605821663583ull}},
+{{18104118509706602952ull, 2450696894673503771ull,
+ 11736228743102637388ull, 7598175757277079479ull}},
+{{9009231059352932893ull, 10755057596025715665ull,
+ 14252671992080230223ull, 4748859848298174674ull}},
+{{15873224842618554020ull, 8832135976604756677ull,
+ 8592467953245511971ull, 5936074810372718343ull}},
+{{6006472997991028813ull, 6428483952328557943ull,
+ 6128898923129502060ull, 7420093512965897929ull}},
+{{10671574651385474864ull, 13241174507060124522ull,
+ 15359776873024408547ull, 4637558445603686205ull}},
+{{4116096277377067772ull, 11939782115397767749ull,
+ 5364663035998346972ull, 5796948057004607757ull}},
+{{9756806365148722619ull, 14924727644247209686ull,
+ 11317514813425321619ull, 7246185071255759696ull}},
+{{2972635919581127466ull, 14044223536881624204ull,
+ 14146893516781652024ull, 9057731339069699620ull}},
+{{11081269486592980474ull, 8777639710551015127ull,
+ 18065180484843308323ull, 5661082086918562262ull}},
+{{9239900839813837689ull, 6360363619761381005ull,
+ 13358103569199359596ull, 7076352608648202828ull}},
+{{16161562068194685015ull, 7950454524701726256ull,
+ 16697629461499199495ull, 8845440760810253535ull}},
+{{10100976292621678135ull, 11886563105579660766ull,
+ 17353547441078081540ull, 5528400475506408459ull}},
+{{3402848328922321860ull, 14858203881974575958ull,
+ 17080248282920214021ull, 6910500594383010574ull}},
+{{13476932448007678133ull, 4737696797186056235ull,
+ 12126938316795491719ull, 8638125742978763218ull}},
+{{6117239770791104881ull, 9878589525882367003ull,
+ 12191022466424570228ull, 5398828589361727011ull}},
+{{3034863695061493197ull, 12348236907352958754ull,
+ 10627092064603324881ull, 6748535736702158764ull}},
+{{13016951655681642305ull, 1600238078909034730ull,
+ 13283865080754156102ull, 8435669670877698455ull}},
+{{12747280803228414345ull, 14835206854600310418ull,
+ 15219944703112429419ull, 5272293544298561534ull}},
+{{6710728967180742123ull, 13932322549823000119ull,
+ 9801558842035760966ull, 6590366930373201918ull}},
+{{3776725190548539749ull, 8192031150423974341ull,
+ 3028576515689925400ull, 8237958662966502398ull}},
+{{4666296253306531295ull, 5120019469014983963ull,
+ 15727918377588367087ull, 5148724164354063998ull}},
+{{1221184298205776215ull, 1788338317841342050ull,
+ 10436525935130683051ull, 6435905205442579998ull}},
+{{10749852409611996077ull, 16070480952583841274ull,
+ 3822285382058578005ull, 8044881506803224998ull}},
+{{11330343774434885452ull, 12349893604578594748ull,
+ 16223986419068774965ull, 5028050941752015623ull}},
+{{14162929718043606815ull, 1602308950441079723ull,
+ 15668297005408580803ull, 6285063677190019529ull}},
+{{13091976129127120615ull, 15837944243333513366ull,
+ 5750313201478562291ull, 7856329596487524412ull}},
+{{3570799062277062480ull, 7592872142869751902ull,
+ 12817317787778877240ull, 4910205997804702757ull}},
+{{13686870864701103908ull, 9491090178587189877ull,
+ 2186589179441432838ull, 6137757497255878447ull}},
+{{3273530525594216173ull, 2640490686379211539ull,
+ 16568294529583954760ull, 7672196871569848058ull}},
+{{18186857642992242773ull, 1650306678987007211ull,
+ 14966870099417359629ull, 4795123044731155036ull}},
+{{18121886035312915562ull, 6674569367161146918ull,
+ 261843550562147920ull, 5993903805913943796ull}},
+{{13428985507286368644ull, 8343211708951433648ull,
+ 327304438202684900ull, 7492379757392429745ull}},
+{{8393115942053980403ull, 14437879354949421838ull,
+ 11733780319945147822ull, 4682737348370268590ull}},
+{{1268022890712699695ull, 8823977156832001490ull,
+ 5443853363076658970ull, 5853421685462835738ull}},
+{{10808400650245650427ull, 1806599409185226054ull,
+ 16028188740700599521ull, 7316777106828544672ull}},
+{{4287128775952287225ull, 6869935279908920472ull,
+ 1588491852166197785ull, 9145971383535680841ull}},
+{{2679455484970179516ull, 15822924596011545055ull,
+ 12522022453672343375ull, 5716232114709800525ull}},
+{{17184377411494888107ull, 15166969726587043414ull,
+ 1817470011808265507ull, 7145290143387250657ull}},
+{{12257099727513834326ull, 14347026139806416364ull,
+ 6883523533187719788ull, 8931612679234063321ull}},
+{{16884059366550922262ull, 18190263374233786035ull,
+ 15831417254310794627ull, 5582257924521289575ull}},
+{{16493388189761264923ull, 18126143199364844640ull,
+ 15177585549461105380ull, 6977822405651611969ull}},
+{{2169991163492029538ull, 4210934925496504185ull,
+ 5136923881544218014ull, 8722278007064514962ull}},
+{{12885459523250988221ull, 16466892383717478827ull,
+ 7822263444392524162ull, 5451423754415321851ull}},
+{{11495138385636347372ull, 11360243442792072726ull,
+ 5166143287063267299ull, 6814279693019152314ull}},
+{{5145550945190658407ull, 9588618285062703004ull,
+ 15681051145683859932ull, 8517849616273940392ull}},
+{{12439341377598937313ull, 15216258465018965185ull,
+ 9800656966052412457ull, 5323656010171212745ull}},
+{{1714118666716507929ull, 5185265025991542770ull,
+ 16862507225992903476ull, 6654570012714015931ull}},
+{{11366020370250410719ull, 6481581282489428462ull,
+ 16466448014063741441ull, 8318212515892519914ull}},
+{{2492076712979118795ull, 15580203347624362549ull,
+ 14903216027217226304ull, 5198882822432824946ull}},
+{{7726781909651286398ull, 1028510110820901570ull,
+ 9405647997166757073ull, 6498603528041031183ull}},
+{{435105350209332190ull, 5897323656953514867ull, 7145373978031058437ull,
+ 8123254410051288979ull}},
+{{16412841908376690283ull, 5991670294809640743ull,
+ 2160015727055717571ull, 5077034006282055612ull}},
+{{15904366367043474949ull, 2877901850084663025ull,
+ 2700019658819646964ull, 6346292507852569515ull}},
+{{6045399903522179974ull, 3597377312605828782ull,
+ 17210082628806722417ull, 7932865634815711893ull}},
+{{17613432994983526196ull, 13777575866447112748ull,
+ 13062144652217895462ull, 4958041021759819933ull}},
+{{3570047170019856129ull, 7998597796204115128ull,
+ 2492622759990205616ull, 6197551277199774917ull}},
+{{4462558962524820161ull, 9998247245255143910ull,
+ 7727464468415144924ull, 7746939096499718646ull}},
+{{16624157406860176313ull, 15472276565139240751ull,
+ 217979274332077673ull, 4841836935312324154ull}},
+{{16168510740147832487ull, 5505287651141887227ull,
+ 9495846129769872900ull, 6052296169140405192ull}},
+{{15598952406757402705ull, 6881609563927359034ull,
+ 11869807662212341125ull, 7565370211425506490ull}},
+{{14361031272650764595ull, 6606848986668293348ull,
+ 12030315807310101107ull, 4728356382140941556ull}},
+{{17951289090813455743ull, 3646875214907978781ull,
+ 15037894759137626384ull, 5910445477676176945ull}},
+{{8604053308234655967ull, 4558594018634973477ull,
+ 4962310393639869268ull, 7388056847095221182ull}},
+{{7683376326860353932ull, 12072493298501634231ull,
+ 16936502051307082004ull, 4617535529434513238ull}},
+{{4992534390148054510ull, 15090616623127042789ull,
+ 11947255527279076697ull, 5771919411793141548ull}},
+{{10852354006112456042ull, 5028212723626639774ull,
+ 14934069409098845872ull, 7214899264741426935ull}},
+{{4342070470785794244ull, 6285265904533299718ull,
+ 14055900742946169436ull, 9018624080926783669ull}},
+{{16548852099523285115ull, 13151663227188088131ull,
+ 11090780973555049849ull, 5636640050579239793ull}},
+{{16074379105976718489ull, 2604520978702946452ull, 28418161661648600ull,
+ 7045800063224049742ull}},
+{{1646229808761346495ull, 3255651223378683066ull,
+ 9258894738931836558ull, 8807250079030062177ull}},
+{{5640579648903229464ull, 15869840069893840628ull,
+ 17316024257900867608ull, 5504531299393788860ull}},
+{{7050724561129036830ull, 1390556013657749169ull,
+ 3198286248666532895ull, 6880664124242236076ull}},
+{{13425091719838683941ull, 15573253072354350173ull,
+ 3997857810833166118ull, 8600830155302795095ull}},
+{{10696525334112871415ull, 5121597151794080954ull,
+ 9416190159411810680ull, 5375518847064246934ull}},
+{{4147284630786313461ull, 6401996439742601193ull,
+ 2546865662409987542ull, 6719398558830308668ull}},
+{{9795791806910279730ull, 17225867586533027299ull,
+ 3183582078012484427ull, 8399248198537885835ull}},
+{{3816526870105230879ull, 8460324232369448110ull,
+ 18130639863253660431ull, 5249530124086178646ull}},
+{{13994030624486314407ull, 5963719272034422233ull,
+ 13439927792212299731ull, 6561912655107723308ull}},
+{{3657480225325729297ull, 2842963071615639888ull,
+ 16799909740265374664ull, 8202390818884654135ull}},
+{{2285925140828580811ull, 1776851919759774930ull,
+ 17417472615306941021ull, 5126494261802908834ull}},
+{{12080778462890501821ull, 6832750918127106566ull,
+ 12548468732278900468ull, 6408117827253636043ull}},
+{{5877601041758351469ull, 8540938647658883208ull,
+ 11073899896921237681ull, 8010147284067045054ull}},
+{{3673500651098969668ull, 16867301700855271765ull,
+ 2309501417148385646ull, 5006342052541903159ull}},
+{{9203561832301099989ull, 11860755089214313898ull,
+ 16721934826717645770ull, 6257927565677378948ull}},
+{{2281080253521599178ull, 5602571824663116565ull,
+ 2455674459687505597ull, 7822409457096723686ull}},
+{{3731518167664693438ull, 5807450399628141805ull,
+ 15369854592586854710ull, 4889005910685452303ull}},
+{{9276083728008254702ull, 16482685036389953064ull,
+ 14600632222306180483ull, 6111257388356815379ull}},
+{{11595104660010318377ull, 15991670277060053426ull,
+ 13639104259455337700ull, 7639071735446019224ull}},
+{{11858626430933836890ull, 771421886307757583ull,
+ 8524440162159586063ull, 4774419834653762015ull}},
+{{10211597020239908208ull, 14799335413166860691ull,
+ 6043864184272094674ull, 5968024793317202519ull}},
+{{8152810256872497356ull, 9275797229603800056ull,
+ 2943144211912730439ull, 7460030991646503149ull}},
+{{5095506410545310848ull, 12714902296143456891ull,
+ 4145308141659150476ull, 4662519369779064468ull}},
+{{1757696994754250656ull, 15893627870179321114ull,
+ 5181635177073938095ull, 5828149212223830585ull}},
+{{11420493280297589128ull, 15255348819296763488ull,
+ 11088729989769810523ull, 7285186515279788231ull}},
+{{14275616600371986409ull, 14457500005693566456ull,
+ 9249226468784875250ull, 9106483144099735289ull}},
+{{8922260375232491506ull, 13647623521985866939ull,
+ 17309981589059016791ull, 5691551965062334555ull}},
+{{6541139450613226478ull, 12447843384054945770ull,
+ 17025790967896383085ull, 7114439956327918194ull}},
+{{17399796350121308906ull, 1724746174786518500ull,
+ 12058866673015703049ull, 8893049945409897743ull}},
+{{1651500681971042258ull, 12607181405310043823ull,
+ 14454320698275896261ull, 5558156215881186089ull}},
+{{15899433907745966535ull, 1923918701355391066ull,
+ 4232842817562706615ull, 6947695269851482612ull}},
+{{10650920347827682360ull, 16239956431976402545ull,
+ 5291053521953383268ull, 8684619087314353265ull}},
+{{18186040263460771235ull, 926600733130475782ull,
+ 14836123497289334303ull, 5427886929571470790ull}},
+{{13509178292471188236ull, 14993308971695258440ull,
+ 9321782334756892070ull, 6784858661964338488ull}},
+{{16886472865588985295ull, 9518264177764297242ull,
+ 11652227918446115088ull, 8481073327455423110ull}},
+{{15165731559420503714ull, 5948915111102685776ull,
+ 2670956430601434026ull, 5300670829659639444ull}},
+{{510420375566078026ull, 16659515925733133029ull,
+ 3338695538251792532ull, 6625838537074549305ull}},
+{{5249711487884985436ull, 2377650833456864670ull,
+ 8785055441242128570ull, 8282298171343186631ull}},
+{{17116127735210279610ull, 6097717789337928322ull,
+ 12408188678417412212ull, 5176436357089491644ull}},
+{{12171787632158073704ull, 7622147236672410403ull,
+ 15510235848021765265ull, 6470545446361864555ull}},
+{{10603048521770204226ull, 14139370064267900908ull,
+ 14776108791599818677ull, 8088181807952330694ull}},
+{{15850277362961153449ull, 11142949299381132019ull,
+ 4623381976322498769ull, 5055113629970206684ull}},
+{{15201160685274053908ull, 93628568944251312ull, 5779227470403123462ull,
+ 6318892037462758355ull}},
+{{554706782883015769ull, 9340407748035089949ull, 2612348319576516423ull,
+ 7898615046828447944ull}},
+{{2652534748515578808ull, 12755283870163013074ull,
+ 1632717699735322764ull, 4936634404267779965ull}},
+{{12539040472499249317ull, 15944104837703766342ull,
+ 6652583143096541359ull, 6170793005334724956ull}},
+{{6450428553769285838ull, 15318445028702320024ull,
+ 8315728928870676699ull, 7713491256668406195ull}},
+{{4031517846105803649ull, 7268185133725256063ull,
+ 2891487571330478985ull, 4820932035417753872ull}},
+{{427711289204866657ull, 13696917435583957983ull,
+ 3614359464163098731ull, 6026165044272192340ull}},
+{{14369697166788247034ull, 12509460776052559574ull,
+ 4517949330203873414ull, 7532706305340240425ull}},
+{{4369374710815266492ull, 3206726966605461830ull,
+ 14352933377445890644ull, 4707941440837650265ull}},
+{{14685090425373858923ull, 4008408708256827287ull,
+ 4106108666525199593ull, 5884926801047062832ull}},
+{{13744677013289935750ull, 9622196903748422013ull,
+ 5132635833156499491ull, 7356158501308828540ull}},
+{{3345788211330255975ull, 7416060111258139613ull,
+ 6415794791445624364ull, 9195198126636035675ull}},
+{{4396960641295103937ull, 13858409606391113066ull,
+ 1704028735439821275ull, 5746998829147522297ull}},
+{{14719572838473655729ull, 12711325989561503428ull,
+ 6741721937727164498ull, 7183748536434402871ull}},
+{{18399466048092069661ull, 6665785450097103477ull,
+ 3815466403731567719ull, 8979685670543003589ull}},
+{{13805509289271237490ull, 11083644933951771529ull,
+ 4690509511545923776ull, 5612303544089377243ull}},
+{{3421828556306883151ull, 13854556167439714412ull,
+ 1251450871005016816ull, 7015379430111721554ull}},
+{{4277285695383603938ull, 17318195209299643015ull,
+ 10787685625611046828ull, 8769224287639651942ull}},
+{{9590832587255834317ull, 1600499968957501076ull,
+ 2130617497579516364ull, 5480765179774782464ull}},
+{{11988540734069792897ull, 2000624961196876345ull,
+ 2663271871974395455ull, 6850956474718478080ull}},
+{{1150617862305077409ull, 16335839256778259144ull,
+ 3329089839967994318ull, 8563695593398097600ull}},
+{{719136163940673381ull, 5598213517059024061ull, 2080681149979996449ull,
+ 5352309745873811000ull}},
+{{5510606223353229630ull, 11609452914751167980ull,
+ 2600851437474995561ull, 6690387182342263750ull}},
+{{6888257779191537037ull, 676758088156796263ull,
+ 12474436333698520260ull, 8362983977927829687ull}},
+{{11222690139635792504ull, 9646345841952773472ull,
+ 14714051736202657018ull, 5226864986204893554ull}},
+{{14028362674544740630ull, 2834560265586191032ull,
+ 9169192633398545465ull, 6533581232756116943ull}},
+{{17535453343180925788ull, 8154886350410126694ull,
+ 6849804773320793927ull, 8166976540945146179ull}},
+{{6347972321060690714ull, 12014332996647411040ull,
+ 1975284974111802252ull, 5104360338090716362ull}},
+{{7934965401325863392ull, 15017916245809263800ull,
+ 11692478254494528623ull, 6380450422613395452ull}},
+{{9918706751657329240ull, 14160709288834191846ull,
+ 14615597818118160779ull, 7975563028266744315ull}},
+{{1587505701358442871ull, 6544600296307675952ull,
+ 6828905627110156535ull, 4984726892666715197ull}},
+{{1984382126698053589ull, 3569064351957207036ull,
+ 13147818052315083573ull, 6230908615833393996ull}},
+{{2480477658372566986ull, 9073016458373896699ull,
+ 16434772565393854466ull, 7788635769791742495ull}},
+{{17691199600978712030ull, 10282321304911073340ull,
+ 17189261881012240897ull, 4867897356119839059ull}},
+{{3667255427513838422ull, 17464587649566229580ull,
+ 16874891332837913217ull, 6084871695149798824ull}},
+{{4584069284392298027ull, 7995676506675623263ull,
+ 2646870092337839906ull, 7606089618937248531ull}},
+{{9782572330386268123ull, 9608983835099652443ull,
+ 17795194872207007605ull, 4753806011835780331ull}},
+{{7616529394555447250ull, 16622915812301953458ull,
+ 17632307571831371602ull, 5942257514794725414ull}},
+{{297289706339533254ull, 11555272728522666015ull,
+ 12817012427934438695ull, 7427821893493406768ull}},
+{{7103335094103290140ull, 14139574482967748115ull,
+ 8010632767459024184ull, 4642388683433379230ull}},
+{{4267482849201724771ull, 17674468103709685144ull,
+ 789918922469004422ull, 5802985854291724038ull}},
+{{5334353561502155963ull, 12869713092782330622ull,
+ 10210770689941031336ull, 7253732317864655047ull}},
+{{15891313988732470762ull, 16087141365977913277ull,
+ 8151777343998901266ull, 9067165397330818809ull}},
+{{12237914252171488178ull, 14666149372163583702ull,
+ 16624075886067783051ull, 5666978373331761755ull}},
+{{6074020778359584415ull, 13721000696777091724ull,
+ 16168408839157340910ull, 7083722966664702194ull}},
+{{7592525972949480518ull, 7927878834116588847ull,
+ 10987139012091900330ull, 8854653708330877743ull}},
+{{11662857760734507180ull, 9566610289750255933ull,
+ 13784490910198519562ull, 5534158567706798589ull}},
+{{743514145635970263ull, 2734890825333044109ull, 3395555582465985741ull,
+ 6917698209633498237ull}},
+{{5541078700472350733ull, 8030299550093693040ull,
+ 8856130496509870080ull, 8647122762041872796ull}},
+{{3463174187795219208ull, 5018937218808558150ull,
+ 14758453597173444608ull, 5404451726276170497ull}},
+{{13552339771598799818ull, 6273671523510697687ull,
+ 4613008941184642048ull, 6755564657845213122ull}},
+{{12328738696071111869ull, 7842089404388372109ull,
+ 14989633213335578368ull, 8444455822306516402ull}},
+{{10011304694258138870ull, 4901305877742732568ull,
+ 13980206776762124384ull, 5277784888941572751ull}},
+{{12514130867822673587ull, 6126632347178415710ull,
+ 12863572452525267576ull, 6597231111176965939ull}},
+{{6419291547923566176ull, 7658290433973019638ull,
+ 11467779547229196566ull, 8246538888971207424ull}},
+{{17847115272734392572ull, 174745502805749369ull,
+ 7167362217018247854ull, 5154086805607004640ull}},
+{{8473836035635827003ull, 9441803915361962520ull,
+ 8959202771272809817ull, 6442608507008755800ull}},
+{{10592295044544783754ull, 16413940912629841054ull,
+ 11199003464091012271ull, 8053260633760944750ull}},
+{{2008498384413101942ull, 17176242098034732515ull,
+ 2387691146629494765ull, 5033287896100590469ull}},
+{{16345681035798541140ull, 7635244567261251931ull,
+ 7596299951714256361ull, 6291609870125738086ull}},
+{{15820415276320788521ull, 14155741727503952818ull,
+ 272002902788044643ull, 7864512337657172608ull}},
+{{14499445566127880730ull, 6541495570476276559ull,
+ 170001814242527902ull, 4915320211035732880ull}},
+{{13512620939232463008ull, 17400241499950121507ull,
+ 212502267803159877ull, 6144150263794666100ull}},
+{{12279090155613190856ull, 7915243819655488172ull,
+ 265627834753949847ull, 7680187829743332625ull}},
+{{16897803384113020093ull, 11864556414925761963ull,
+ 11695232442789688414ull, 4800117393589582890ull}},
+{{16510568211713887212ull, 5607323481802426646ull,
+ 5395668516632334710ull, 6000146741986978613ull}},
+{{11414838227787583207ull, 16232526389107809116ull,
+ 11356271664217806291ull, 7500183427483723266ull}},
+{{16357645929222015313ull, 7839485983978686745ull,
+ 11709355808563516836ull, 4687614642177327041ull}},
+{{6611999356245355429ull, 9799357479973358432ull, 801636705422232333ull,
+ 5859518302721658802ull}},
+{{8264999195306694286ull, 16860882868394085944ull,
+ 10225417918632566224ull, 7324397878402073502ull}},
+{{10331248994133367857ull, 2629359511783055814ull,
+ 3558400361435931973ull, 9155497348002591878ull}},
+{{1845344602905967007ull, 3949192704078103836ull,
+ 16059058281179621195ull, 5722185842501619923ull}},
+{{2306680753632458758ull, 324804861670241891ull,
+ 15462136833047138590ull, 7152732303127024904ull}},
+{{16718408997322737160ull, 9629378113942578171ull,
+ 880926967599371621ull, 8940915378908781131ull}},
+{{8143162614113016773ull, 8324204330427805309ull,
+ 16691480419245464927ull, 5588072111817988206ull}},
+{{14790639286068658870ull, 5793569394607368732ull,
+ 11640978487202055351ull, 6985090139772485258ull}},
+{{41555033876271972ull, 2630275724831823012ull, 5327851072147793381ull,
+ 8731362674715606573ull}},
+{{9249343933027445790ull, 3949765337233583334ull,
+ 5635749929306064815ull, 5457101671697254108ull}},
+{{2338307879429531430ull, 325520653114591264ull, 7044687411632581019ull,
+ 6821377089621567635ull}},
+{{2922884849286914287ull, 14241958871675402792ull,
+ 4194173246113338369ull, 8526721362026959544ull}},
+{{1826803030804321430ull, 1983695267156044889ull,
+ 2621358278820836481ull, 5329200851266849715ull}},
+{{6895189806932789691ull, 7091305102372444015ull,
+ 17111755903808209313ull, 6661501064083562143ull}},
+{{4007301240238599210ull, 13475817396392942923ull,
+ 16778008861332873737ull, 8326876330104452679ull}},
+{{198720265935430554ull, 1504856845104507471ull,
+ 17403784565974127942ull, 5204297706315282924ull}},
+{{14083458387701451905ull, 11104443093235410146ull,
+ 3307986633758108311ull, 6505372132894103656ull}},
+{{8380950947772039073ull, 9268867848116874779ull,
+ 4134983292197635389ull, 8131715166117629570ull}},
+{{2932251333143830469ull, 8098885414286740689ull,
+ 7196050576050910022ull, 5082321978823518481ull}},
+{{8277000184857175990ull, 900234731003650053ull,
+ 13606749238491025432ull, 6352902473529398101ull}},
+{{14957936249498857891ull, 1125293413754562566ull,
+ 3173378492831618078ull, 7941128091911747627ull}},
+{{4737024137509398278ull, 14538366438878765316ull,
+ 18124262622515618962ull, 4963205057444842266ull}},
+{{5921280171886747847ull, 8949586011743680837ull,
+ 13431956241289747895ull, 6204006321806052833ull}},
+{{12013286233285822713ull, 6575296496252213142ull,
+ 2954887246330021157ull, 7755007902257566042ull}},
+{{2896617877376251292ull, 6415403319371327166ull,
+ 6458490547383651127ull, 4846879938910978776ull}},
+{{12844144383575089923ull, 3407568130786771053ull,
+ 8073113184229563909ull, 6058599923638723470ull}},
+{{2220122424186698691ull, 8871146181910851721ull, 868019443432179078ull,
+ 7573249904548404338ull}},
+{{12916791561185156442ull, 932780345266894421ull,
+ 5154198170572499828ull, 4733281190342752711ull}},
+{{2310931396199281841ull, 1165975431583618027ull,
+ 1831061694788236881ull, 5916601487928440889ull}},
+{{16723722300531266013ull, 6069155307906910437ull,
+ 6900513136912684005ull, 7395751859910551111ull}},
+{{12758169447045735210ull, 6099065076655512975ull,
+ 11230349738211509359ull, 4622344912444094444ull}},
+{{11336025790379781109ull, 3012145327392003315ull,
+ 14037937172764386699ull, 5777931140555118055ull}},
+{{9558346219547338482ull, 17600239714522167856ull,
+ 12935735447528095469ull, 7222413925693897569ull}},
+{{11947932774434173102ull, 8165241587870546108ull,
+ 2334611254127955625ull, 9028017407117371962ull}},
+{{16690830020876133997ull, 16632491038487561077ull,
+ 6070818052257360169ull, 5642510879448357476ull}},
+{{7028479470813003784ull, 6955555742827287635ull,
+ 7588522565321700212ull, 7053138599310446845ull}},
+{{4173913320088866826ull, 8694444678534109544ull,
+ 14097339225079513169ull, 8816423249138058556ull}},
+{{2608695825055541766ull, 16963242970152288225ull,
+ 18034209052529471538ull, 5510264530711286597ull}},
+{{7872555799746815112ull, 11980681675835584473ull,
+ 8707703260379675711ull, 6887830663389108247ull}},
+{{14452380768110906794ull, 10364166076367092687ull,
+ 6272943057047206735ull, 8609788329236385309ull}},
+{{15950267007710398602ull, 13395132825370514785ull,
+ 6226432419868198161ull, 5381117705772740818ull}},
+{{6102775704355834541ull, 2908857976430979770ull,
+ 17006412561690023510ull, 6726397132215926022ull}},
+{{16851841667299568984ull, 12859444507393500520ull,
+ 12034643665257753579ull, 8407996415269907528ull}},
+{{10532401042062230615ull, 5731309807907243873ull,
+ 7521652290786095987ull, 5254997759543692205ull}},
+{{17777187321005176173ull, 2552451241456666937ull,
+ 14013751381910007888ull, 6568747199429615256ull}},
+{{8386426095974306504ull, 3190564051820833672ull,
+ 17517189227387509860ull, 8210933999287019070ull}},
+{{5241516309983941565ull, 11217474569242796853ull,
+ 6336557248689805758ull, 5131833749554386919ull}},
+{{11163581405907314860ull, 4798471174698720258ull,
+ 3309010542434869294ull, 6414792186942983649ull}},
+{{4731104720529367767ull, 15221461005228176131ull,
+ 8747949196470974521ull, 8018490233678729561ull}},
+{{651097441117160903ull, 2595884100626528226ull,
+ 16996683293862828836ull, 5011556396049205975ull}},
+{{10037243838251226936ull, 3244855125783160282ull,
+ 16634168098901148141ull, 6264445495061507469ull}},
+{{3323182760959257862ull, 8667754925656338257ull,
+ 6957652068344271464ull, 7830556868826884337ull}},
+{{13606204271668005924ull, 5417346828535211410ull,
+ 15877747588783639425ull, 4894098043016802710ull}},
+{{7784383302730231597ull, 11383369554096402167ull,
+ 10623812449124773473ull, 6117622553771003388ull}},
+{{5118793109985401592ull, 394153887338338997ull,
+ 13279765561405966842ull, 7647028192213754235ull}},
+{{5505088702954569947ull, 4858032198013849777ull,
+ 5994010466665035324ull, 4779392620133596397ull}},
+{{11493046897120600338ull, 6072540247517312221ull,
+ 12104199101758682059ull, 5974240775166995496ull}},
+{{531250566118586710ull, 2978989290969252373ull,
+ 15130248877198352574ull, 7467800968958744370ull}},
+{{2637874613037810646ull, 15696926362137946445ull,
+ 14068091566676358262ull, 4667375605599215231ull}},
+{{7909029284724651211ull, 10397785915817657248ull,
+ 12973428439918059924ull, 5834219506999019039ull}},
+{{9886286605905814014ull, 12997232394772071560ull,
+ 11605099531470187001ull, 7292774383748773799ull}},
+{{12357858257382267517ull, 2411482438182925738ull,
+ 9894688395910345848ull, 9115967979685967249ull}},
+{{12335347429291305103ull, 1507176523864328586ull,
+ 17713395293512435915ull, 5697479987303729530ull}},
+{{6195812249759355570ull, 15719028710112574445ull,
+ 12918372080035769085ull, 7121849984129661913ull}},
+{{12356451330626582366ull, 5813727832358554344ull,
+ 2312907044762547645ull, 8902312480162077392ull}},
+{{7722782081641613979ull, 5939422904437790417ull,
+ 1445566902976592278ull, 5563945300101298370ull}},
+{{14265163620479405378ull, 16647650667402013829ull,
+ 11030330665575516155ull, 6954931625126622962ull}},
+{{3996396470317093010ull, 16197877315825129383ull,
+ 4564541295114619386ull, 8693664531408278703ull}},
+{{9415276821589264988ull, 14735359340818093768ull,
+ 9770367337087718972ull, 5433540332130174189ull}},
+{{11769096026986581234ull, 18419199176022617210ull,
+ 16824645189787036619ull, 6791925415162717736ull}},
+{{5487997996878450735ull, 18412312951600883609ull,
+ 2584062413524244158ull, 8489906768953397171ull}},
+{{14959213794117501469ull, 6896009576323164351ull,
+ 17755940072948510263ull, 5306191730595873231ull}},
+{{14087331224219488933ull, 4008325951976567535ull,
+ 17583239072758249925ull, 6632739663244841539ull}},
+{{12997478011846973262ull, 9622093458398097323ull,
+ 17367362822520424502ull, 8290924579056051924ull}},
+{{5817580748190664337ull, 1402122393071422923ull,
+ 1631229727220489506ull, 5181827861910032453ull}},
+{{2660289916810942517ull, 10976025028194054462ull,
+ 6650723177452999786ull, 6477284827387540566ull}},
+{{12548734432868453954ull, 4496659248387792269ull,
+ 17536776008671025541ull, 8096606034234425707ull}},
+{{10148802029756477673ull, 5116255039456064120ull,
+ 8654641996205697011ull, 5060378771396516067ull}},
+{{12686002537195597092ull, 1783632780892692246ull,
+ 6206616476829733360ull, 6325473464245645084ull}},
+{{6634131134639720556ull, 2229540976115865308ull,
+ 7758270596037166700ull, 7906841830307056355ull}},
+{{13369703996004601156ull, 10616835146927191625ull,
+ 2543076113309535235ull, 4941776143941910222ull}},
+{{2877071939723587733ull, 8659357915231601628ull,
+ 12402217178491694852ull, 6177220179927387777ull}},
+{{3596339924654484666ull, 10824197394039502035ull,
+ 1667713417832454853ull, 7721525224909234722ull}},
+{{18388613517404910580ull, 9070966380488382723ull,
+ 5654006904572672187ull, 4825953265568271701ull}},
+{{18374080878328750321ull, 6727021957183090500ull,
+ 11679194649143228138ull, 6032441581960339626ull}},
+{{4520857024201386286ull, 17632149483333638934ull,
+ 5375621274574259364ull, 7540551977450424533ull}},
+{{16660593695408030141ull, 1796721390228748525ull,
+ 5665606305822606055ull, 4712844985906515333ull}},
+{{6990684063977873964ull, 16080959793068099369ull,
+ 11693693900705645472ull, 5891056232383144166ull}},
+{{13350041098399730358ull, 1654455667625572595ull,
+ 5393745339027281033ull, 7363820290478930208ull}},
+{{12075865354572275044ull, 6679755602959353648ull,
+ 6742181673784101291ull, 9204775363098662760ull}},
+{{7547415846607671903ull, 1869004242635902078ull,
+ 4213863546115063307ull, 5752984601936664225ull}},
+{{210897771404814070ull, 16171313358577041310ull,
+ 9879015451071217037ull, 7191230752420830281ull}},
+{{9486994251110793396ull, 6379083642939137925ull,
+ 16960455332266409201ull, 8989038440526037851ull}},
+{{8235214416157939824ull, 15516142322905430963ull,
+ 8294441573452811798ull, 5618149025328773657ull}},
+{{5682332001770036876ull, 10171805866777012896ull,
+ 14979737985243402652ull, 7022686281660967071ull}},
+{{7102915002212546095ull, 12714757333471266120ull,
+ 14112986463126865411ull, 8778357852076208839ull}},
+{{4439321876382841310ull, 5640880324205847373ull,
+ 15738145567095372738ull, 5486473657547630524ull}},
+{{10160838363905939541ull, 16274472442112085024ull,
+ 1225937885159664306ull, 6858092071934538156ull}},
+{{12701047954882424426ull, 11119718515785330472ull,
+ 1532422356449580383ull, 8572615089918172695ull}},
+{{7938154971801515267ull, 13867353100006913401ull,
+ 7875293000422069595ull, 5357884431198857934ull}},
+{{14534379733179281987ull, 12722505356581253847ull,
+ 620744213672811186ull, 6697355538998572418ull}},
+{{13556288648046714580ull, 6679759658871791501ull,
+ 9999302303945789791ull, 8371694423748215522ull}},
+{{10778523414242890565ull, 11092378814435951544ull,
+ 10861249958393506523ull, 5232309014842634701ull}},
+{{13473154267803613206ull, 9253787499617551526ull,
+ 18188248466419271058ull, 6540386268553293376ull}},
+{{7618070797899740699ull, 2343862337667163600ull,
+ 4288566509314537207ull, 8175482835691616721ull}},
+{{4761294248687337937ull, 8382442988683059106ull,
+ 14209569114390055514ull, 5109676772307260450ull}},
+{{15174989847713948229ull, 1254681698999048074ull,
+ 8538589356132793585ull, 6387095965384075563ull}},
+{{9745365272787659478ull, 6180038142176197997ull,
+ 6061550676738604077ull, 7983869956730094454ull}},
+{{8396696304705981126ull, 6168366848073817700ull,
+ 17623527228243791260ull, 4989918722956309033ull}},
+{{10495870380882476408ull, 7710458560092272125ull,
+ 8194350980022575363ull, 6237398403695386292ull}},
+{{17731523994530483413ull, 5026387181687952252ull,
+ 10242938725028219204ull, 7796748004619232865ull}},
+{{1858830459726776325ull, 12364864025409745966ull,
+ 17931051749211106762ull, 4872967502887020540ull}},
+{{11546910111513246215ull, 6232707994907406649ull,
+ 3967070612804331837ull, 6091209378608775676ull}},
+{{598579584109394056ull, 12402571012061646216ull,
+ 4958838266005414796ull, 7614011723260969595ull}},
+{{374112240068371285ull, 16974978919393304693ull, 793430907039690295ull,
+ 4758757327038105997ull}},
+{{5079326318512852011ull, 16607037630814242962ull,
+ 5603474652227000773ull, 5948446658797632496ull}},
+{{15572529934995840821ull, 6923738983235639990ull,
+ 7004343315283750967ull, 7435558323497040620ull}},
+{{5121145190945012609ull, 11244865892163356850ull,
+ 13601086608907120162ull, 4647223952185650387ull}},
+{{15624803525536041570ull, 4832710328349420254ull,
+ 12389672242706512299ull, 5809029940232062984ull}},
+{{10307632370065276154ull, 1429201892009387414ull,
+ 15487090303383140374ull, 7261287425290078730ull}},
+{{3661168425726819384ull, 11009874401866510076ull,
+ 10135490842374149659ull, 9076609281612598413ull}},
+{{11511602302934037923ull, 4575328491952874845ull,
+ 8640524785697537489ull, 5672880801007874008ull}},
+{{554444823385383692ull, 10330846633368481461ull,
+ 10800655982121921861ull, 7091101001259842510ull}},
+{{5304742047659117519ull, 17525244310137989730ull,
+ 4277447940797626518ull, 8863876251574803138ull}},
+{{7927149798214336353ull, 6341591675408855677ull,
+ 7285090981425904478ull, 5539922657234251961ull}},
+{{14520623266195308346ull, 17150361631115845404ull,
+ 13718049745209768501ull, 6924903321542814951ull}},
+{{18150779082744135432ull, 7602893983612643043ull,
+ 12535876163084822723ull, 8656129151928518689ull}},
+{{9038393917501390693ull, 2445965730544207950ull, 917393574286932346ull,
+ 5410080719955324181ull}},
+{{2074620360021962558ull, 12280829200035035746ull,
+ 5758427986286053336ull, 6762600899944155226ull}},
+{{11816647486882229006ull, 15351036500043794682ull,
+ 16421407019712342478ull, 8453251124930194032ull}},
+{{11997090697728781033ull, 4982711794099983772ull,
+ 10263379387320214049ull, 5283281953081371270ull}},
+{{14996363372160976291ull, 10840075761052367619ull,
+ 3605852197295491753ull, 6604102441351714088ull}},
+{{14133768196773832460ull, 18161780719742847428ull,
+ 4507315246619364691ull, 8255128051689642610ull}},
+{{18056977159838421095ull, 9045269940625585690ull,
+ 7428758047564490836ull, 5159455032306026631ull}},
+{{13347849412943250561ull, 11306587425781982113ull,
+ 4674261541028225641ull, 6449318790382533289ull}},
+{{2849753710896899489ull, 298176226945313930ull,
+ 10454512944712669956ull, 8061648487978166611ull}},
+{{6392782087737950085ull, 9409732178695597014ull,
+ 4228227581231724770ull, 5038530304986354132ull}},
+{{17214349646527213414ull, 2538793186514720459ull,
+ 5285284476539655963ull, 6298162881232942665ull}},
+{{16906251039731628864ull, 17008549538425564286ull,
+ 11218291614101957857ull, 7872703601541178331ull}},
+{{5954720881404880136ull, 3712814433874895823ull,
+ 4705589249600029709ull, 4920439750963236457ull}},
+{{2831715083328712266ull, 9252704060771007683ull,
+ 10493672580427425040ull, 6150549688704045571ull}},
+{{17374701909443054044ull, 11565880075963759603ull,
+ 8505404707106893396ull, 7688187110880056964ull}},
+{{8553345684188214826ull, 16452047084332125560ull,
+ 14539249978796584180ull, 4805116944300035602ull}},
+{{10691682105235268532ull, 2118314781705605334ull,
+ 8950690436640954418ull, 6006396180375044503ull}},
+{{4141230594689309857ull, 11871265513986782476ull,
+ 6576677027373805118ull, 7507995225468805629ull}},
+{{11811641158535594469ull, 2807854927814351143ull,
+ 6416266151322322151ull, 4692497015918003518ull}},
+{{10152865429742105182ull, 17344876715050102641ull,
+ 17243704726007678496ull, 5865621269897504397ull}},
+{{17302767805605019381ull, 3234351820103076685ull,
+ 7719572852227434409ull, 7332026587371880497ull}},
+{{7793401701724110514ull, 8654625793556233761ull,
+ 14261152083711680915ull, 9165033234214850621ull}},
+{{16400091109646038832ull, 3103298111758952148ull,
+ 11219063061533494524ull, 5728145771384281638ull}},
+{{2053369813347996923ull, 3879122639698690186ull,
+ 4800456790062092347ull, 7160182214230352048ull}},
+{{11790084303539771962ull, 237217281195974828ull,
+ 6000570987577615434ull, 8950227767787940060ull}},
+{{16592174726567133285ull, 4759946819174872171ull,
+ 12973728904090785454ull, 5593892354867462537ull}},
+{{16128532389781528702ull, 15173305560823366022ull,
+ 2382103074831318105ull, 6992365443584328172ull}},
+{{10937293450372135069ull, 5131573895747043816ull,
+ 2977628843539147632ull, 8740456804480410215ull}},
+{{6835808406482584418ull, 3207233684841902385ull,
+ 8778547054853049126ull, 5462785502800256384ull}},
+{{13156446526530618427ull, 13232414142907153789ull,
+ 10973183818566311407ull, 6828481878500320480ull}},
+{{2610500102881109321ull, 11928831660206554333ull,
+ 13716479773207889259ull, 8535602348125400600ull}},
+{{3937405573514387278ull, 5149676778415402506ull,
+ 8572799858254930787ull, 5334751467578375375ull}},
+{{14145129003747759905ull, 1825409954591865228ull,
+ 6104313804391275580ull, 6668439334472969219ull}},
+{{17681411254684699881ull, 2281762443239831535ull,
+ 3018706237061706571ull, 8335549168091211524ull}},
+{{17968411061819019282ull, 17567002591520752373ull,
+ 11110063435018342414ull, 5209718230057007202ull}},
+{{8625455771991610390ull, 12735381202546164659ull,
+ 4664207256918152210ull, 6512147787571259003ull}},
+{{6170133696562125084ull, 6695854466327930016ull,
+ 1218573052720302359ull, 8140184734464073754ull}},
+{{3856333560351328178ull, 11102438069096038116ull,
+ 5373294176377576878ull, 5087615459040046096ull}},
+{{4820416950439160222ull, 4654675549515271837ull,
+ 6716617720471971098ull, 6359519323800057620ull}},
+{{10637207206476338181ull, 15041716473748865604ull,
+ 8395772150589963872ull, 7949399154750072025ull}},
+{{15871626540902487172ull, 9401072796093041002ull,
+ 16776572640187197180ull, 4968374471718795015ull}},
+{{10616161139273333156ull, 11751340995116301253ull,
+ 16359029781806608571ull, 6210468089648493769ull}},
+{{17881887442519054349ull, 10077490225467988662ull,
+ 6613729171976097002ull, 7763085112060617212ull}},
+{{6564493633147021064ull, 10910117409344880818ull,
+ 13356952769339836434ull, 4851928195037885757ull}},
+{{17428989078288552138ull, 4414274724826325214ull,
+ 2861132906392631831ull, 6064910243797357197ull}},
+{{12562864311005914365ull, 906157387605518614ull,
+ 8188102151418177693ull, 7581137804746696496ull}},
+{{3240104175951308574ull, 2872191376467143086ull,
+ 5117563844636361058ull, 4738211127966685310ull}},
+{{13273502256793911526ull, 12813611257438704665ull,
+ 15620326842650227130ull, 5922763909958356637ull}},
+{{2756819765710225695ull, 6793642034943605024ull,
+ 5690350498030620201ull, 7403454887447945797ull}},
+{{1723012353568891060ull, 15775241317908222900ull,
+ 5862312070482831577ull, 4627159304654966123ull}},
+{{2153765441961113824ull, 5883993592103114913ull,
+ 2716204069676151568ull, 5783949130818707654ull}},
+{{7303892820878780184ull, 7354991990128893641ull,
+ 12618627123949965268ull, 7229936413523384567ull}},
+{{13741552044525863134ull, 9193739987661117051ull,
+ 11161597886510068681ull, 9037420516904230709ull}},
+{{6282627018614970507ull, 17275302538356667917ull,
+ 9281841688282486877ull, 5648387823065144193ull}},
+{{12464969791696101038ull, 7759070117663671184ull,
+ 16213988128780496501ull, 7060484778831430241ull}},
+{{15581212239620126297ull, 14310523665506976884ull,
+ 6432427105693456914ull, 8825605973539287802ull}},
+{{514885612907803128ull, 13555763309369248457ull,
+ 8631952959485798475ull, 5516003733462054876ull}},
+{{5255293034562141814ull, 12333018118284172667ull,
+ 10789941199357248094ull, 6895004666827568595ull}},
+{{1957430274775289363ull, 6192900611000440026ull,
+ 8875740480769172214ull, 8618755833534460744ull}},
+{{5835079940161943756ull, 17705620937157438728ull,
+ 5547337800480732633ull, 5386722395959037965ull}},
+{{7293849925202429695ull, 8296968116164634698ull,
+ 11545858269028303696ull, 6733402994948797456ull}},
+{{18340684443357812927ull, 10371210145205793372ull,
+ 14432322836285379620ull, 8416753743685996820ull}},
+{{2239555740243857271ull, 15705378377608396666ull,
+ 18243573809533138070ull, 5260471089803748012ull}},
+{{12022816712159597397ull, 10408350935155720024ull,
+ 4357723188206870972ull, 6575588862254685016ull}},
+{{15028520890199496746ull, 13010438668944650030ull,
+ 5447153985258588715ull, 8219486077818356270ull}},
+{{4781139537947297562ull, 5825681158876712317ull,
+ 17239529296068781659ull, 5137178798636472668ull}},
+{{10588110440861509857ull, 2670415430168502492ull,
+ 3102667546376425458ull, 6421473498295590836ull}},
+{{13235138051076887321ull, 12561391324565403923ull,
+ 3878334432970531822ull, 8026841872869488545ull}},
+{{5966118272709360624ull, 3239183559425989548ull,
+ 13953174066675052149ull, 5016776170543430340ull}},
+{{7457647840886700780ull, 8660665467709874839ull,
+ 17441467583343815186ull, 6270970213179287925ull}},
+{{4710373782680988071ull, 1602459797782567741ull,
+ 7966776423897605271ull, 7838712766474109907ull}},
+{{5249826623389311496ull, 7919066401255186694ull,
+ 2673392255722309342ull, 4899195479046318692ull}},
+{{15785655316091415178ull, 675460964714207559ull,
+ 3341740319652886678ull, 6123994348807898365ull}},
+{{15120383126686881069ull, 10067698242747535257ull,
+ 8788861417993496251ull, 7654992936009872956ull}},
+{{2532710426538218812ull, 3986468392503515584ull,
+ 14716410423100710965ull, 4784370585006170597ull}},
+{{3165888033172773515ull, 9594771509056782384ull,
+ 4560454973593724994ull, 5980463231257713247ull}},
+{{3957360041465966894ull, 2770092349466202172ull,
+ 1088882698564768339ull, 7475579039072141559ull}},
+{{11696722062771005117ull, 17872208782912234021ull,
+ 7598080714244062067ull, 4672236899420088474ull}},
+{{785844523181592684ull, 17728574960212904623ull, 274228855950301776ull,
+ 5840296124275110593ull}},
+{{14817363709259154567ull, 3713974626556579162ull,
+ 4954472088365265125ull, 7300370155343888241ull}},
+{{9298332599719167400ull, 9254154301623111857ull,
+ 10804776128883969310ull, 9125462694179860301ull}},
+{{17340672920892949385ull, 1172160420087057006ull,
+ 9058828089766174771ull, 5703414183862412688ull}},
+{{12452469114261410923ull, 15300258580390984970ull,
+ 11323535112207718463ull, 7129267729828015860ull}},
+{{6342214355971987846ull, 14513637207061343309ull,
+ 14154418890259648079ull, 8911584662285019825ull}},
+{{6269726981696186356ull, 15988552282054421424ull,
+ 1928982778771198193ull, 5569740413928137391ull}},
+{{7837158727120232945ull, 6150632297285863068ull,
+ 16246286528746161454ull, 6962175517410171738ull}},
+{{9796448408900291181ull, 16911662408462104643ull,
+ 11084486124077926009ull, 8702719396762714673ull}},
+{{3816937246348988036ull, 3652259977647733546ull, 10274799907621900ull,
+ 5439199622976696671ull}},
+{{13994543594791010853ull, 4565324972059666932ull,
+ 13847901555166691087ull, 6798999528720870838ull}},
+{{17493179493488763566ull, 1094970196647195761ull,
+ 8086504907103588051ull, 8498749410901088548ull}},
+{{4015708155789395373ull, 16825257437400355015ull,
+ 14277437603794518339ull, 5311718381813180342ull}},
+{{407949176309356312ull, 16419885778323055865ull,
+ 8623424967888372116ull, 6639647977266475428ull}},
+{{5121622488814083294ull, 2078113149194268215ull,
+ 10779281209860465146ull, 8299559971583094285ull}},
+{{10118543083149883915ull, 5910506736673805538ull,
+ 9042893765376484668ull, 5187224982239433928ull}},
+{{3424806817082579086ull, 7388133420842256923ull,
+ 11303617206720605835ull, 6484031227799292410ull}},
+{{18116066576635387569ull, 4623480757625433249ull,
+ 4906149471545981486ull, 8105039034749115513ull}},
+{{4405012582756035375ull, 16724733528798059493ull,
+ 14595558465784708188ull, 5065649396718197195ull}},
+{{10117951746872432123ull, 2459172837288022750ull,
+ 13632762063803497332ull, 6332061745897746494ull}},
+{{3424067646735764345ull, 3073966046610028438ull,
+ 7817580542899595857ull, 7915077182372183118ull}},
+{{15975100334492016428ull, 13450443825199737533ull,
+ 274301820884859506ull, 4946923238982614449ull}},
+{{6133817362832856823ull, 7589682744644896109ull,
+ 4954563294533462287ull, 6183654048728268061ull}},
+{{12278957721968458932ull, 4875417412378732232ull,
+ 10804890136594215763ull, 7729567560910335076ull}},
+{{7674348576230286833ull, 741292873523013693ull,
+ 15976428372226160660ull, 4830979725568959422ull}},
+{{14204621738715246445ull, 926616091903767116ull,
+ 10747163428427925017ull, 6038724656961199278ull}},
+{{17755777173394058056ull, 5769956133307096799ull,
+ 4210582248680130463ull, 7548405821201499098ull}},
+{{18014889761012368141ull, 10523751610958017355ull,
+ 7243299923852469443ull, 4717753638250936936ull}},
+{{17906926182838072272ull, 8543003495270133790ull,
+ 9054124904815586804ull, 5897192047813671170ull}},
+{{13160285691692814532ull, 10678754369087667238ull,
+ 2094284094164707697ull, 7371490059767088963ull}},
+{{7226985077761242357ull, 17960128979786971952ull,
+ 16452913172988048333ull, 9214362574708861203ull}},
+{{4516865673600776473ull, 13530923621580551422ull,
+ 7977227723903836256ull, 5758976609193038252ull}},
+{{14869454128855746400ull, 16913654526975689277ull,
+ 9971534654879795320ull, 7198720761491297815ull}},
+{{4751759605787519288ull, 2695324085010059981ull,
+ 7852732300172356247ull, 8998400951864122269ull}},
+{{5275692762830893507ull, 8602106580772369344ull,
+ 7213800696821416606ull, 5624000594915076418ull}},
+{{6594615953538616883ull, 1529261189110685872ull,
+ 18240622907881546566ull, 7030000743643845522ull}},
+{{8243269941923271104ull, 11134948523243133148ull,
+ 13577406597997157399ull, 8787500929554806903ull}},
+{{14375415750556820248ull, 13876871854668040073ull,
+ 15403408151389305230ull, 5492188080971754314ull}},
+{{4134211632913861598ull, 8122717781480274284ull,
+ 10030888152381855730ull, 6865235101214692893ull}},
+{{5167764541142326998ull, 930025189995567047ull,
+ 17150296208904707567ull, 8581543876518366116ull}},
+{{10147381865855036230ull, 7498794771388311260ull,
+ 1495563093710666421ull, 5363464922823978823ull}},
+{{12684227332318795287ull, 13985179482662776979ull,
+ 15704511922420496738ull, 6704331153529973528ull}},
+{{11243598146971106205ull, 8258102316473695416ull,
+ 1183895829316069307ull, 8380413941912466911ull}},
+{{7027248841856941378ull, 2855470938582365683ull,
+ 7657463920963625173ull, 5237758713695291819ull}},
+{{4172375033893788819ull, 8181024691655345008ull,
+ 4960143882777143562ull, 6547198392119114774ull}},
+{{5215468792367236023ull, 1002908827714405452ull,
+ 15423551890326205261ull, 8183997990148893467ull}},
+{{12483040032084298323ull, 2932661026535197359ull,
+ 7333876922240184336ull, 5114998743843058417ull}},
+{{10992114021677984999ull, 3665826283168996699ull,
+ 13779032171227618324ull, 6393748429803823021ull}},
+{{9128456508670093345ull, 4582282853961245874ull,
+ 3388732158752359193ull, 7992185537254778777ull}},
+{{10316971336346196245ull, 14393141829794248431ull,
+ 13647172645288694255ull, 4995115960784236735ull}},
+{{8284528152005357402ull, 13379741268815422635ull,
+ 12447279788183479915ull, 6243894950980295919ull}},
+{{5743974171579308848ull, 12112990567591890390ull,
+ 10947413716801961990ull, 7804868688725369899ull}},
+{{17425041912519231742ull, 2958933086317543589ull,
+ 4536290563787532292ull, 4878042930453356187ull}},
+{{7946244335366875966ull, 3698666357896929487ull,
+ 1058677186307027461ull, 6097553663066695234ull}},
+{{5321119400781207053ull, 9235018965798549763ull,
+ 10546718519738560134ull, 7621942078833369042ull}},
+{{1019856616274560456ull, 1160200835196705698ull,
+ 11203385093263987988ull, 4763713799270855651ull}},
+{{10498192807197976378ull, 1450251043995882122ull,
+ 9392545348152597081ull, 5954642249088569564ull}},
+{{3899368972142694665ull, 6424499823422240557ull,
+ 11740681685190746351ull, 7443302811360711955ull}},
+{{4742948616802878118ull, 10932841417279982204ull,
+ 5032083044030522517ull, 4652064257100444972ull}},
+{{5928685771003597647ull, 18277737790027365659ull,
+ 6290103805038153146ull, 5815080321375556215ull}},
+{{2799171195327109154ull, 13623800200679431266ull,
+ 3250943737870303529ull, 7268850401719445269ull}},
+{{12722336031013662251ull, 3194692195567125370ull,
+ 8675365690765267316ull, 9086063002149306586ull}},
+{{12563146037810926811ull, 11220054659084229164ull,
+ 10033789575155679976ull, 5678789376343316616ull}},
+{{15703932547263658514ull, 14025068323855286455ull,
+ 12542236968944599970ull, 7098486720429145770ull}},
+{{15018229665652185238ull, 8307963367964332261ull,
+ 6454424174325974155ull, 8873108400536432213ull}},
+{{11692236550246309726ull, 2886634095764013711ull,
+ 6339858118167427799ull, 5545692750335270133ull}},
+{{10003609669380499253ull, 17443350674987180851ull,
+ 12536508666136672652ull, 6932115937919087666ull}},
+{{7892826068298236162ull, 3357444270024424448ull,
+ 6447263795816065008ull, 8665144922398859583ull}},
+{{4933016292686397602ull, 2098402668765265280ull,
+ 10947068900026122486ull, 5415715576499287239ull}},
+{{6166270365857997002ull, 11846375372811357408ull,
+ 9072150106605265203ull, 6769644470624109049ull}},
+{{7707837957322496252ull, 10196283197586808856ull,
+ 15951873651683969408ull, 8462055588280136311ull}},
+{{4817398723326560158ull, 6372676998491755535ull,
+ 16887450059943562736ull, 5288784742675085194ull}},
+{{1410062385730812293ull, 7965846248114694419ull,
+ 11885940538074677612ull, 6610980928343856493ull}},
+{{15597636037445679079ull, 9957307810143368023ull,
+ 1022367617311183303ull, 8263726160429820617ull}},
+{{16666051551044631280ull, 13140846408980686870ull,
+ 12168194806887959324ull, 5164828850268637885ull}},
+{{11609192401951013292ull, 16426058011225858588ull,
+ 1375185453327785443ull, 6456036062835797357ull}},
+{{14511490502438766615ull, 15920886495604935331ull,
+ 6330667835087119708ull, 8070045078544746696ull}},
+{{6763838554810535183ull, 727182022898308774ull, 3956667396929449818ull,
+ 5043778174090466685ull}},
+{{17678170230367944786ull, 10132349565477661775ull,
+ 9557520264589200176ull, 6304722717613083356ull}},
+{{17486026769532543079ull, 12665436956847077219ull,
+ 11946900330736500220ull, 7880903397016354195ull}},
+{{8622923721744145472ull, 17139270134884199070ull,
+ 5160969697496618685ull, 4925564623135221372ull}},
+{{1555282615325406032ull, 7589029613323085126ull,
+ 6451212121870773357ull, 6156955778919026715ull}},
+{{11167475306011533348ull, 14097973035081244311ull,
+ 3452329133911078792ull, 7696194723648783394ull}},
+{{13897201093898290199ull, 8811233146925777694ull,
+ 6769391727121812149ull, 4810121702280489621ull}},
+{{8148129330518086940ull, 15625727452084610022ull,
+ 13073425677329653090ull, 6012652127850612026ull}},
+{{961789626292832867ull, 10308787278250986720ull,
+ 7118410059807290555ull, 7515815159813265033ull}},
+{{601118516433020542ull, 4137149039693172748ull,
+ 15978221333448026357ull, 4697384474883290645ull}},
+{{751398145541275678ull, 9783122318043853839ull, 6137718611527869234ull,
+ 5871730593604113307ull}},
+{{14774305737208758309ull, 3005530860700041490ull,
+ 3060462245982448639ull, 7339663242005141634ull}},
+{{9244510134656172078ull, 17591971631157215575ull,
+ 13048949844332836606ull, 9174579052506427042ull}},
+{{12695347861801189405ull, 6383296251045871830ull,
+ 12767279671135410783ull, 5734111907816516901ull}},
+{{6645812790396710948ull, 3367434295379951884ull,
+ 2124041533637099767ull, 7167639884770646127ull}},
+{{8307265987995888685ull, 18044350924507103567ull,
+ 16490109972328538420ull, 8959549855963307658ull}},
+{{12109570270138512284ull, 2054347290962163921ull,
+ 14918004751132724417ull, 5599718659977067286ull}},
+{{1301904782390976643ull, 7179620132130092806ull,
+ 9424133902061129713ull, 6999648324971334108ull}},
+{{10850753014843496612ull, 13586211183590003911ull,
+ 11780167377576412141ull, 8749560406214167635ull}},
+{{13699249661918267239ull, 10797224998957446396ull,
+ 5056761601771563636ull, 5468475253883854772ull}},
+{{17124062077397834048ull, 13496531248696807995ull,
+ 6320952002214454545ull, 6835594067354818465ull}},
+{{16793391578319904656ull, 3035606005588846282ull,
+ 12512876021195456086ull, 8544492584193523081ull}},
+{{15107555754877328314ull, 15732311808775192638ull,
+ 903018485606078197ull, 5340307865120951926ull}},
+{{9661072656741884585ull, 5830331705686827086ull,
+ 10352145143862373555ull, 6675384831401189907ull}},
+{{2852968784072579923ull, 2676228613681145954ull,
+ 8328495411400579040ull, 8344231039251487384ull}},
+{{6394791508472750356ull, 1672642883550716221ull,
+ 5205309632125361900ull, 5215144399532179615ull}},
+{{12605175404018325849ull, 2090803604438395276ull,
+ 1894951021729314471ull, 6518930499415224519ull}},
+{{15756469255022907311ull, 16448562560830157807ull,
+ 16203746832443806800ull, 8148663124269030648ull}},
+{{16765322312030398926ull, 10280351600518848629ull,
+ 10127341770277379250ull, 5092914452668144155ull}},
+{{7121594834755834945ull, 3627067463793784979ull,
+ 8047491194419336159ull, 6366143065835180194ull}},
+{{4290307525017405777ull, 18368892385024394936ull,
+ 835991956169394390ull, 7957678832293975243ull}},
+{{2681442203135878611ull, 6868871722212858931ull,
+ 16663396037101729158ull, 4973549270183734526ull}},
+{{17186860809202011975ull, 17809461689620849471ull,
+ 11605873009522385639ull, 6216936587729668158ull}},
+{{16871889993075127065ull, 17650141093598673935ull,
+ 5283969225048206241ull, 7771170734662085198ull}},
+{{17462460273313036272ull, 4113809155858089353ull,
+ 17137538820937292613ull, 4856981709163803248ull}},
+{{7993017286359131628ull, 9753947463249999596ull,
+ 2975179452462064150ull, 6071227136454754061ull}},
+{{9991271607948914534ull, 2969062292207723687ull,
+ 8330660334004968092ull, 7589033920568442576ull}},
+{{13162073782609153440ull, 11079035969484603112ull,
+ 5206662708753105057ull, 4743146200355276610ull}},
+{{16452592228261441800ull, 13736906573590178ull,
+ 15731700422796157130ull, 5928932750444095762ull}},
+{{11342368248472026442ull, 9240543170071763531ull,
+ 10441253491640420604ull, 7411165938055119703ull}},
+{{4783137146081322574ull, 14998711518149628015ull,
+ 13443312459916344733ull, 4631978711284449814ull}},
+{{1367235414174265314ull, 4913331342404871307ull,
+ 7580768538040655109ull, 5789973389105562268ull}},
+{{15544102322999995354ull, 10753350196433477037ull,
+ 9475960672550818886ull, 7237466736381952835ull}},
+{{5595069848467830481ull, 4218315708687070489ull,
+ 7233264822261135704ull, 9046833420477441044ull}},
+{{15026133701360863811ull, 2636447317929419055ull,
+ 13744162550767985623ull, 5654270887798400652ull}},
+{{14170981108273691859ull, 17130617202693937531ull,
+ 17180203188459982028ull, 7067838609748000815ull}},
+{{13102040366914726920ull, 2966527429657870298ull,
+ 16863567967147589632ull, 8834798262185001019ull}},
+{{12800461247749092229ull, 1854079643536168936ull,
+ 8233886970253549568ull, 5521748913865625637ull}},
+{{16000576559686365286ull, 2317599554420211170ull,
+ 14904044731244324864ull, 6902186142332032046ull}},
+{{10777348662753180800ull, 2896999443025263963ull,
+ 9406683877200630272ull, 8627732677915040058ull}},
+{{4429999905007044048ull, 1810624651890789977ull,
+ 10490863441677781824ull, 5392332923696900036ull}},
+{{10149185899686192964ull, 2263280814863487471ull,
+ 13113579302097227280ull, 6740416154621125045ull}},
+{{8074796356180353301ull, 2829101018579359339ull,
+ 2556916072339370388ull, 8425520193276406307ull}},
+{{2740904713399026861ull, 10991560173466875395ull,
+ 17738973609707964156ull, 5265950120797753941ull}},
+{{17261188947030947288ull, 13739450216833594243ull,
+ 8338658956852791483ull, 6582437650997192427ull}},
+{{16964800165361296206ull, 12562626752614604900ull,
+ 5811637677638601450ull, 8228047063746490534ull}},
+{{1379628066496034321ull, 12463327738811515967ull,
+ 17467331603806289618ull, 5142529414841556583ull}},
+{{15559593138402206613ull, 6355787636659619150ull,
+ 17222478486330474119ull, 6428161768551945729ull}},
+{{10226119386147982458ull, 3333048527397136034ull,
+ 7693040052630928937ull, 8035202210689932162ull}},
+{{11003010634769876941ull, 13612370375691679781ull,
+ 9419836051321718489ull, 5022001381681207601ull}},
+{{18365449311889734080ull, 3180404914332436014ull,
+ 16386481082579536016ull, 6277501727101509501ull}},
+{{13733439603007391792ull, 3975506142915545018ull,
+ 6648043297942256308ull, 7846877158876886877ull}},
+{{13195085770307007774ull, 11708063376176991444ull,
+ 6460870070427604144ull, 4904298224298054298ull}},
+{{16493857212883759717ull, 14635079220221239305ull,
+ 17299459624889280988ull, 6130372780372567872ull}},
+{{6782263460822535934ull, 18293849025276549132ull,
+ 3177580457402049619ull, 7662965975465709841ull}},
+{{13462286699868860767ull, 9127812631584149255ull,
+ 13515202831944750772ull, 4789353734666068650ull}},
+{{12216172356408688055ull, 11409765789480186569ull,
+ 7670631503076162657ull, 5986692168332585813ull}},
+{{1435157390228696356ull, 427149181568069500ull,
+ 14199975397272591226ull, 7483365210415732266ull}},
+{{10120345405747711031ull, 4878654256907431341ull,
+ 13486670641722757420ull, 4677103256509832666ull}},
+{{17262117775612026693ull, 6098317821134289176ull,
+ 7634966265298670967ull, 5846379070637290833ull}},
+{{3130903145805481750ull, 3011211257990473567ull,
+ 14155393850050726613ull, 7307973838296613541ull}},
+{{17748686987539015899ull, 8375700090915479862ull,
+ 3859184257281244554ull, 9134967297870766927ull}},
+{{6481243348784497033ull, 9846498575249562818ull,
+ 9329519188441859702ull, 5709354561169229329ull}},
+{{17324926222835397099ull, 3084751182207177714ull,
+ 16273585003979712532ull, 7136693201461536661ull}},
+{{12432785741689470566ull, 3855938977758972143ull,
+ 6506923199692476953ull, 8920866501826920827ull}},
+{{14688020116197000960ull, 13939176907167827349ull,
+ 1760983990594104143ull, 5575541563641825517ull}},
+{{4524967089964087488ull, 12812285115532396283ull,
+ 6812916006670018083ull, 6969426954552281896ull}},
+{{1044522844027721455ull, 11403670375988107450ull,
+ 8516145008337522604ull, 8711783693190352370ull}},
+{{5264512795944713814ull, 16350666021847342964ull,
+ 9934276648638339531ull, 5444864808243970231ull}},
+{{6580640994930892267ull, 15826646508881790801ull,
+ 7806159792370536510ull, 6806081010304962789ull}},
+{{12837487262091003238ull, 10559936099247462693ull,
+ 14369385758890558542ull, 8507601262881203486ull}},
+{{10329272548020570976ull, 1988274043602276279ull,
+ 4369180080879211185ull, 5317250789300752179ull}},
+{{8299904666598325816ull, 7097028572930233253ull, 849789082671626077ull,
+ 6646563486625940224ull}},
+{{14986566851675295173ull, 13482971734590179470ull,
+ 1062236353339532596ull, 8308204358282425280ull}},
+{{4754918263869671580ull, 17650229370973637977ull,
+ 663897720837207872ull, 5192627723926515800ull}},
+{{10555333848264477378ull, 3616042640007495855ull,
+ 829872151046509841ull, 6490784654908144750ull}},
+{{8582481291903208819ull, 9131739318436757723ull,
+ 10260712225662913109ull, 8113480818635180937ull}},
+{{3058207798225811560ull, 8013180083236667529ull,
+ 17942160187107790453ull, 5070925511646988085ull}},
+{{8434445766209652354ull, 14628161122473222315ull,
+ 8592642178602574354ull, 6338656889558735107ull}},
+{{5931371189334677538ull, 9061829366236752086ull,
+ 6129116704825830039ull, 7923321111948418884ull}},
+{{17542165048616337174ull, 12581172381539051909ull,
+ 13054069977370919582ull, 4952075694967761802ull}},
+{{8092648255488257755ull, 6503093440069039079ull,
+ 7094215434858873670ull, 6190094618709702253ull}},
+{{5504124300932934289ull, 17352238836941074657ull,
+ 13479455312000979991ull, 7737618273387127816ull}},
+{{14969292734151553691ull, 17762678300729253516ull,
+ 8424659570000612494ull, 4836011420866954885ull}},
+{{264871843979890498ull, 12979975839056791088ull,
+ 15142510480928153522ull, 6045014276083693606ull}},
+{{331089804974863122ull, 7001597761966213052ull, 9704766064305416095ull,
+ 7556267845104617008ull}},
+{{9430303164964065259ull, 11293527628869965013ull,
+ 6065478790190885059ull, 4722667403190385630ull}},
+{{16399564974632469478ull, 9505223517660068362ull,
+ 16805220524593382132ull, 5903334253987982037ull}},
+{{11276084181435811040ull, 11881529397075085453ull,
+ 7171467600459563953ull, 7379167817484977547ull}},
+{{9353395622611075852ull, 508426845530846552ull, 2176324241073533519ull,
+ 4611979885928110967ull}},
+{{11691744528263844815ull, 14470591612195721902ull,
+ 16555463356624080610ull, 5764974857410138708ull}},
+{{5391308623475030210ull, 8864867478389876570ull,
+ 2247585122070549147ull, 7206218571762673386ull}},
+{{15962507816198563571ull, 6469398329559957808ull,
+ 12032853439442962242ull, 9007773214703341732ull}},
+{{9976567385124102232ull, 8655059974402361534ull,
+ 16743905436506627209ull, 5629858259189588582ull}},
+{{3247337194550351982ull, 15430510986430339822ull,
+ 11706509758778508203ull, 7037322823986985728ull}},
+{{13282543530042715785ull, 14676452714610536873ull,
+ 14633137198473135254ull, 8796653529983732160ull}},
+{{1384060678635615510ull, 4561096928204197642ull,
+ 9145710749045709534ull, 5497908456239832600ull}},
+{{10953447885149295195ull, 14924743197110022860ull,
+ 11432138436307136917ull, 6872385570299790750ull}},
+{{13691809856436618994ull, 4820870941105364863ull,
+ 5066801008529145339ull, 8590481962874738438ull}},
+{{15474910187913968727ull, 707201328977159087ull,
+ 17001808685612879549ull, 5369051226796711523ull}},
+{{14731951716465073005ull, 5495687679648836763ull,
+ 16640574838588711532ull, 6711314033495889404ull}},
+{{13803253627153953352ull, 6869609599561045954ull,
+ 2353974474526337799ull, 8389142541869861756ull}},
+{{13238719535398608749ull, 11211035027366735577ull,
+ 10694606083433736932ull, 5243214088668663597ull}},
+{{2713341363966097225ull, 14013793784208419472ull,
+ 17979943622719559069ull, 6554017610835829496ull}},
+{{3391676704957621531ull, 3682184174978360628ull,
+ 4028185454689897221ull, 8192522013544786871ull}},
+{{11343169977453289265ull, 4607208118575169344ull,
+ 9435144936822267619ull, 5120326258465491794ull}},
+{{14178962471816611581ull, 1147324129791573776ull,
+ 2570559134173058716ull, 6400407823081864743ull}},
+{{17723703089770764476ull, 1434155162239467220ull,
+ 17048256972998487107ull, 8000509778852330928ull}},
+{{1853942394251951990ull, 17037248040895524677ull,
+ 10655160608124054441ull, 5000318611782706830ull}},
+{{6929114011242327891ull, 7461501995837242134ull,
+ 4095578723300292244ull, 6250398264728383538ull}},
+{{17884764550907685672ull, 9326877494796552667ull,
+ 14342845440980141113ull, 7812997830910479422ull}},
+{{8872134835103609593ull, 17358513480316315177ull,
+ 4352592382185200291ull, 4883123644319049639ull}},
+{{15701854562306899895ull, 17086455831968006067ull,
+ 829054459304112460ull, 6103904555398812049ull}},
+{{15015632184456236965ull, 2911325716250455968ull,
+ 5648004092557528480ull, 7629880694248515061ull}},
+{{9384770115285148103ull, 1819578572656534980ull,
+ 5835845567062149252ull, 4768675433905321913ull}},
+{{11730962644106435129ull, 2274473215820668725ull,
+ 11906492977255074469ull, 5960844292381652391ull}},
+{{828645249850880199ull, 7454777538203223811ull,
+ 10271430203141455182ull, 7451055365477065489ull}},
+{{16658804345652657788ull, 47549942949626977ull,
+ 17948858923031879249ull, 4656909603423165930ull}},
+{{6988447376783658523ull, 4671123447114421626ull,
+ 13212701616935073253ull, 5821137004278957413ull}},
+{{17958931257834348962ull, 10450590327320414936ull,
+ 2680818965886677854ull, 7276421255348696767ull}},
+{{4001919998583384587ull, 3839865872295742863ull,
+ 17186081762640511030ull, 9095526569185870958ull}},
+{{9418729026755697223ull, 16234974225467003001ull,
+ 6129615083222931489ull, 5684704105741169349ull}},
+{{16385097301872009432ull, 6458659726551590039ull,
+ 12273704872456052266ull, 7105880132176461686ull}},
+{{15869685608912623886ull, 17296696695044263357ull,
+ 6118759053715289524ull, 8882350165220577108ull}},
+{{12224396514784083881ull, 1587063397547888790ull,
+ 13047596445426831761ull, 5551468853262860692ull}},
+{{6057123606625329043ull, 6595515265362248892ull,
+ 16309495556783539701ull, 6939336066578575865ull}},
+{{7571404508281661304ull, 12856080100130199019ull,
+ 6551811390697260914ull, 8674170083223219832ull}},
+{{2426284808462344363ull, 12646736081008762291ull,
+ 4094882119185788071ull, 5421356302014512395ull}},
+{{16867914065860094166ull, 11196734082833564959ull,
+ 506916630554847185ull, 6776695377518140494ull}},
+{{16473206563897729803ull, 160859548259792487ull,
+ 9857017825048334790ull, 8470869221897675617ull}},
+{{17213283130077162983ull, 13935595272944534016ull,
+ 17689851186723679003ull, 5294293263686047260ull}},
+{{3069859838886902113ull, 12807808072753279617ull,
+ 3665569909695047138ull, 6617866579607559076ull}},
+{{8449010817036015545ull, 6786388054086823713ull,
+ 4581962387118808923ull, 8272333224509448845ull}},
+{{16809846806715979476ull, 1935649524590570868ull,
+ 5169569501162949529ull, 5170208265318405528ull}},
+{{2565564434685422729ull, 7031247924165601490ull,
+ 6461961876453686911ull, 6462760331648006910ull}},
+{{12430327580211554219ull, 4177373886779613958ull,
+ 17300824382421884447ull, 8078450414560008637ull}},
+{{3157268719204833483ull, 9528387706878340580ull,
+ 13118858248227371731ull, 5049031509100005398ull}},
+{{3946585899006041853ull, 7298798615170537821ull,
+ 7175200773429438856ull, 6311289386375006748ull}},
+{{9544918392184940221ull, 9123498268963172276ull,
+ 8969000966786798570ull, 7889111732968758435ull}},
+{{15188946031970363446ull, 10313872436529370576ull,
+ 3299782595028055154ull, 4930694833105474022ull}},
+{{539438466253402691ull, 3668968508806937413ull,
+ 13348100280639844751ull, 6163368541381842527ull}},
+{{5285984101244141268ull, 18421268691290835478ull,
+ 12073439332372418034ull, 7704210676727303159ull}},
+{{17138798118559752005ull, 16124978950484160077ull,
+ 14463428610373843127ull, 4815131672954564474ull}},
+{{7588439592917526294ull, 15544537669677812193ull,
+ 8855913726112528101ull, 6018914591193205593ull}},
+{{14097235509574295771ull, 5595614031815101529ull,
+ 15681578176068048031ull, 7523643238991506991ull}},
+{{1893243165842853001ull, 10414787797525520312ull,
+ 16718515387683611875ull, 4702277024369691869ull}},
+{{2366553957303566251ull, 8406798728479512486ull,
+ 7063086179322351132ull, 5877846280462114837ull}},
+{{12181564483484233622ull, 10508498410599390607ull,
+ 13440543742580326819ull, 7347307850577643546ull}},
+{{10615269585927904124ull, 8523936994821850355ull,
+ 7577307641370632716ull, 9184134813222054433ull}},
+{{4328700481991246125ull, 14550832658618432280ull,
+ 16265032321925115207ull, 5740084258263784020ull}},
+{{5410875602489057657ull, 13576854804845652446ull,
+ 1884546328696842393ull, 7175105322829730026ull}},
+{{15986966539966097879ull, 3136010450774901845ull,
+ 11579054947725828800ull, 8968881653537162532ull}},
+{{12297697096692505126ull, 1960006531734313653ull,
+ 16460281379183418808ull, 5605551033460726582ull}},
+{{1537063315583467696ull, 2450008164667892067ull,
+ 11351979687124497702ull, 7006938791825908228ull}},
+{{15756387199761498332ull, 12285882242689640891ull,
+ 14189974608905622127ull, 8758673489782385285ull}},
+{{7541898990637242505ull, 14596205429322107413ull,
+ 11174577139779707781ull, 5474170931113990803ull}},
+{{14039059756723941036ull, 4410198731370470554ull,
+ 9356535406297246823ull, 6842713663892488504ull}},
+{{8325452659050150487ull, 901062395785700289ull,
+ 11695669257871558529ull, 8553392079865610630ull}},
+{{16732622957974813814ull, 12092379043434532440ull,
+ 2698107267742336176ull, 5345870049916006644ull}},
+{{2469034623758965652ull, 15115473804293165551ull,
+ 3372634084677920220ull, 6682337562395008305ull}},
+{{16921351334980870776ull, 447598181656905322ull,
+ 8827478624274788180ull, 8352921952993760381ull}},
+{{15187530602790432139ull, 9503120900390341634ull,
+ 7823017149385436564ull, 5220576220621100238ull}},
+{{9761041216633264366ull, 11878901125487927043ull,
+ 555399399877019897ull, 6525720275776375298ull}},
+{{7589615502364192554ull, 1013568351577745092ull,
+ 9917621286701050680ull, 8157150344720469122ull}},
+{{13966881725832396154ull, 633480219736090682ull,
+ 10810199322615544579ull, 5098218965450293201ull}},
+{{8235230120435719385ull, 14626908329952277065ull,
+ 18124435171696818627ull, 6372773706812866501ull}},
+{{14905723668972037135ull, 13671949394012958427ull,
+ 8820485909338859572ull, 7965967133516083127ull}},
+{{7010234283893829257ull, 17768340408112874825ull,
+ 12430332720977869088ull, 4978729458447551954ull}},
+{{13374478873294674476ull, 3763681436431541915ull,
+ 6314543864367560553ull, 6223411823059439943ull}},
+{{12106412573190955190ull, 9316287813966815298ull,
+ 3281493812032062787ull, 7779264778824299929ull}},
+{{12178193876671734898ull, 3516836874515565609ull,
+ 13580148678588509002ull, 4862040486765187455ull}},
+{{1387684290557504911ull, 13619418129999232820ull,
+ 12363499829808248348ull, 6077550608456484319ull}},
+{{1734605363196881138ull, 17024272662499041025ull,
+ 10842688768832922531ull, 7596938260570605399ull}},
+{{12613343398066520472ull, 8334327404848206688ull,
+ 13694209508161658438ull, 4748086412856628374ull}},
+{{15766679247583150589ull, 1194537219205482552ull,
+ 7894389848347297240ull, 5935108016070785468ull}},
+{{1261604985769386620ull, 1493171524006853191ull,
+ 9867987310434121550ull, 7418885020088481835ull}},
+{{7706032143746948494ull, 14768290257786446956ull,
+ 3861649059807632016ull, 4636803137555301147ull}},
+{{9632540179683685617ull, 13618748523507079ull, 215375306332152117ull,
+ 5796003921944126434ull}},
+{{7428989206177219118ull, 4628709454081771753ull,
+ 9492591169769965954ull, 7245004902430158042ull}},
+{{13897922526148911801ull, 15009258854456990499ull,
+ 2642366925357681634ull, 9056256128037697553ull}},
+{{6380358569629375924ull, 13992472802463006966ull,
+ 13180694374417020781ull, 5660160080023560970ull}},
+{{17198820248891495712ull, 3655532947796594995ull,
+ 7252495931166500169ull, 7075200100029451213ull}},
+{{16886839292686981736ull, 9181102203173131648ull,
+ 13677305932385513115ull, 8844000125036814016ull}},
+{{10554274557929363585ull, 3432345867769513328ull,
+ 8548316207740945697ull, 5527500078148008760ull}},
+{{13192843197411704482ull, 8902118353139279564ull,
+ 10685395259676182121ull, 6909375097685010950ull}},
+{{16491053996764630602ull, 15739333959851487359ull,
+ 4133372037740451843ull, 8636718872106263688ull}},
+{{17224437775618975982ull, 7531240715693485647ull,
+ 2583357523587782402ull, 5397949295066414805ull}},
+{{16918861201096332074ull, 190678857762081251ull,
+ 7840882922912115907ull, 6747436618833018506ull}},
+{{16536890482943027188ull, 14073406627484765276ull,
+ 577731616785369075ull, 8434295773541273133ull}},
+{{1112184514984616185ull, 6490036132964284346ull,
+ 2666925269704549624ull, 5271434858463295708ull}},
+{{10613602680585546039ull, 8112545166205355432ull,
+ 3333656587130687030ull, 6589293573079119635ull}},
+{{13267003350731932549ull, 917309420901918482ull,
+ 18002128789195522500ull, 8236616966348899543ull}},
+{{12903563112634845747ull, 9796690424918474859ull,
+ 18168859520888283418ull, 5147885603968062214ull}},
+{{11517767872366169280ull, 3022490994293317766ull,
+ 13487702364255578465ull, 6434857004960077768ull}},
+{{5173837803602935792ull, 8389799761294035112ull,
+ 16859627955319473081ull, 8043571256200097210ull}},
+{{3233648627251834870ull, 16772839896877241705ull,
+ 15148953490502058579ull, 5027232035125060756ull}},
+{{8653746802492181491ull, 16354363852669164227ull,
+ 489447789418021608ull, 6284040043906325946ull}},
+{{6205497484687838960ull, 1996210742126903668ull,
+ 9835181773627302819ull, 7855050054882907432ull}},
+{{13101807964784675158ull, 17388532778325172456ull,
+ 6146988608517064261ull, 4909406284301817145ull}},
+{{16377259955980843948ull, 7900607917624301858ull,
+ 12295421779073718231ull, 6136757855377271431ull}},
+{{11248202908121279126ull, 5264073878602989419ull,
+ 10757591205414759885ull, 7670947319221589289ull}},
+{{4724283808362105502ull, 5595889183340562339ull,
+ 18252709549452694688ull, 4794342074513493305ull}},
+{{1293668742025243974ull, 6994861479175702924ull,
+ 8980828881533704648ull, 5992927593141866632ull}},
+{{1617085927531554967ull, 8743576848969628655ull,
+ 11226036101917130810ull, 7491159491427333290ull}},
+{{7928207732348303710ull, 10076421549033405813ull,
+ 11627958582125594660ull, 4681974682142083306ull}},
+{{14521945683862767542ull, 12595526936291757266ull,
+ 5311576190802217517ull, 5852468352677604133ull}},
+{{8929060067973683619ull, 1909350615082532871ull,
+ 11251156256930159801ull, 7315585440847005166ull}},
+{{6549639066539716620ull, 6998374287280553993ull,
+ 4840573284307923943ull, 9144481801058756458ull}},
+{{15622739462655792648ull, 11291512957191428101ull,
+ 7637044321119840368ull, 5715301125661722786ull}},
+{{5693366273037577097ull, 14114391196489285127ull,
+ 322933364545024652ull, 7144126407077153483ull}},
+{{2505021822869583468ull, 17642988995611606409ull,
+ 14238724760963444527ull, 8930158008846441853ull}},
+{{13094853685361959428ull, 17944397149898335861ull,
+ 11205045984815846781ull, 5581348755529026158ull}},
+{{2533509051420285572ull, 8595438382090756115ull,
+ 4782935444165032669ull, 6976685944411282698ull}},
+{{17001944369557520677ull, 15355983996040833047ull,
+ 15202041342061066644ull, 8720857430514103372ull}},
+{{17543744258614532279ull, 374117960670744846ull, 277903801933390845ull,
+ 5450535894071314608ull}},
+{{12706308286413389541ull, 5079333469265818962ull,
+ 347379752416738556ull, 6813169867589143260ull}},
+{{6659513321161961118ull, 6349166836582273703ull, 434224690520923195ull,
+ 8516462334486429075ull}},
+{{11079724853367307555ull, 1662386263650227112ull,
+ 16412291496071434661ull, 5322788959054018171ull}},
+{{13849656066709134444ull, 6689668847990171794ull,
+ 15903678351661905422ull, 6653486198817522714ull}},
+{{8088698046531642247ull, 17585458096842490551ull,
+ 10656225902722605969ull, 8316857748521903393ull}},
+{{11972965306723358260ull, 4073382282885474738ull,
+ 18189356235270098491ull, 5198036092826189620ull}},
+{{5742834596549422017ull, 480041835179455519ull, 4289951220378071498ull,
+ 6497545116032737026ull}},
+{{2566857227259389617ull, 9823424330829095207ull,
+ 14585811062327365180ull, 8121931395040921282ull}},
+{{8521814794678200367ull, 15363012243622960312ull,
+ 13727817932381991141ull, 5076207121900575801ull}},
+{{10652268493347750459ull, 5368707249246536678ull,
+ 3324714360195325215ull, 6345258902375719752ull}},
+{{4091963579829912265ull, 2099198043130782944ull,
+ 4155892950244156519ull, 7931573627969649690ull}},
+{{2557477237393695166ull, 8229527804597821196ull,
+ 7209119112329985728ull, 4957233517481031056ull}},
+{{3196846546742118957ull, 10286909755747276495ull,
+ 9011398890412482160ull, 6196541896851288820ull}},
+{{17831116238709812409ull, 12858637194684095618ull,
+ 11264248613015602700ull, 7745677371064111025ull}},
+{{15756133667621020660ull, 17260020283532335569ull,
+ 122626355493669831ull, 4841048356915069391ull}},
+{{5860109029244112112ull, 16963339335988031558ull,
+ 13988340999649251001ull, 6051310446143836738ull}},
+{{16548508323409915948ull, 7369116114702875735ull,
+ 8262054212706787944ull, 7564138057679795923ull}},
+{{17260346729772279324ull, 4605697571689297334ull,
+ 2857940873728048513ull, 4727586286049872452ull}},
+{{12352061375360573347ull, 10368807983039009572ull,
+ 3572426092160060641ull, 5909482857562340565ull}},
+{{15440076719200716683ull, 17572695997226149869ull,
+ 9077218633627463705ull, 7386853571952925706ull}},
+{{11955890958714141879ull, 4065405970625261812ull,
+ 10284947664444552720ull, 4616783482470578566ull}},
+{{14944863698392677349ull, 5081757463281577265ull,
+ 3632812543700915092ull, 5770979353088223208ull}},
+{{4846021567708682974ull, 6352196829101971582ull,
+ 4541015679626143865ull, 7213724191360279010ull}},
+{{15280898996490629525ull, 12551932054804852381ull,
+ 14899641636387455639ull, 9017155239200348762ull}},
+{{11856404882020337406ull, 14762486561894114594ull,
+ 13923962041169547678ull, 5635722024500217976ull}},
+{{5597134065670645949ull, 9229736165512867435ull,
+ 17404952551461934598ull, 7044652530625272470ull}},
+{{2384731563660919532ull, 2313798170036308486ull,
+ 12532818652472642440ull, 8805815663281590588ull}},
+{{15325515282570238420ull, 1446123856272692803ull,
+ 17056383694650177333ull, 5503634789550994117ull}},
+{{14545208084785410120ull, 6419340838768253908ull,
+ 7485421563030557954ull, 6879543486938742647ull}},
+{{18181510105981762650ull, 17247548085315093193ull,
+ 4745090935360809538ull, 8599429358673428309ull}},
+{{4445914788597519801ull, 15391403571749321150ull,
+ 5271524843814199913ull, 5374643349170892693ull}},
+{{14780765522601675559ull, 5404196409404487725ull,
+ 11201092073195137796ull, 6718304186463615866ull}},
+{{4640898847969930736ull, 6755245511755609657ull,
+ 4777993054639146437ull, 8397880233079519833ull}},
+{{14429776826049676470ull, 6527871454060949987ull,
+ 14515460705217936283ull, 5248675145674699895ull}},
+{{13425535014134707684ull, 3548153299148799580ull,
+ 13532639863095032450ull, 6560843932093374869ull}},
+{{16781918767668384605ull, 13658563660790775283ull,
+ 3080741773586626850ull, 8201054915116718587ull}},
+{{8182856220579046426ull, 13148288306421622456ull,
+ 18066364672987499445ull, 5125659321947949116ull}},
+{{10228570275723808033ull, 2600302327744864358ull,
+ 4136211767524822691ull, 6407074152434936396ull}},
+{{3562340807799984233ull, 17085435964963244160ull,
+ 5170264709406028363ull, 8008842690543670495ull}},
+{{2226463004874990146ull, 8372554468888333648ull,
+ 10148944471019849583ull, 5005526681589794059ull}},
+{{2783078756093737682ull, 5854007067683029156ull,
+ 8074494570347424075ull, 6256908351987242574ull}},
+{{3478848445117172102ull, 2705822816176398541ull, 869746176079504286ull,
+ 7821135439984053218ull}},
+{{4480123287411926516ull, 15526197315392412800ull,
+ 5155277378477078082ull, 4888209649990033261ull}},
+{{5600154109264908145ull, 10184374607385740192ull,
+ 11055782741523735507ull, 6110262062487541576ull}},
+{{7000192636581135181ull, 8118782240804787336ull,
+ 13819728426904669384ull, 7637827578109426970ull}},
+{{4375120397863209488ull, 5074238900502992085ull,
+ 13249016285242806269ull, 4773642236318391856ull}},
+{{10080586515756399764ull, 10954484644056128010ull,
+ 16561270356553507836ull, 5967052795397989820ull}},
+{{3377361107840723897ull, 13693105805070160013ull,
+ 2254843871982333179ull, 7458815994247487276ull}},
+{{4416693701614146388ull, 6252348118955156056ull,
+ 10632649456843734045ull, 4661759996404679547ull}},
+{{5520867127017682985ull, 12427121167121332974ull,
+ 8679125802627279652ull, 5827199995505849434ull}},
+{{16124455945626879539ull, 15533901458901666217ull,
+ 1625535216429323757ull, 7283999994382311793ull}},
+{{6320511876751435711ull, 5582318768344919060ull,
+ 6643605038964042601ull, 9104999992977889741ull}},
+{{13173691959824423128ull, 15018164276284044172ull,
+ 6458096158566220577ull, 5690624995611181088ull}},
+{{16467114949780528910ull, 4937647290072891503ull,
+ 8072620198207775722ull, 7113281244513976360ull}},
+{{15972207668798273233ull, 15395431149445890187ull,
+ 10090775247759719652ull, 8891601555642470450ull}},
+{{7676786783785226819ull, 398772431548905559ull,
+ 10918420548277212687ull, 5557250972276544031ull}},
+{{4984297461304145619ull, 14333523594718295661ull,
+ 9036339666919127954ull, 6946563715345680039ull}},
+{{10842057845057569928ull, 8693532456543093768ull,
+ 6683738565221522039ull, 8683204644182100049ull}},
+{{6776286153160981205ull, 12350986812980515461ull,
+ 15706551649331921034ull, 5427002902613812530ull}},
+{{13082043709878614410ull, 6215361479370868518ull,
+ 10409817524810125485ull, 6783753628267265663ull}},
+{{7129182600493492205ull, 12380887867640973552ull,
+ 8400585887585268952ull, 8479692035334082079ull}},
+{{4455739125308432628ull, 7738054917275608470ull,
+ 12167895207381874951ull, 5299807522083801299ull}},
+{{14793045943490316593ull, 5060882628167122683ull,
+ 10598182990799955785ull, 6624759402604751624ull}},
+{{13879621410935507837ull, 10937789303636291258ull,
+ 13247728738499944731ull, 8280949253255939530ull}},
+{{13286449400262080303ull, 4530275305558988084ull,
+ 12891516479989853361ull, 5175593283284962206ull}},
+{{16608061750327600378ull, 10274530150376123009ull,
+ 6891023563132540893ull, 6469491604106202758ull}},
+{{6925019132627336760ull, 17454848706397541666ull,
+ 17837151490770451924ull, 8086864505132753447ull}},
+{{8939822976319473379ull, 1685908404643687733ull,
+ 18065748709372614309ull, 5054290315707970904ull}},
+{{15786464738826729628ull, 6719071524231997570ull,
+ 4135441813006216270ull, 6317862894634963631ull}},
+{{10509708886678636227ull, 17622211442144772771ull,
+ 557616247830382433ull, 7897328618293704539ull}},
+{{4262725044960453690ull, 4096353123699401126ull,
+ 16489411219389846685ull, 4935830386433565336ull}},
+{{14551778343055342921ull, 9732127423051639311ull,
+ 2165019950527756740ull, 6169787983041956671ull}},
+{{13578036910391790747ull, 12165159278814549139ull,
+ 16541332993441859637ull, 7712234978802445838ull}},
+{{6180430059781175265ull, 9909067558472787164ull,
+ 5726647102473774369ull, 4820146861751528649ull}},
+{{7725537574726469081ull, 16998020466518371859ull,
+ 11769994896519605865ull, 6025183577189410811ull}},
+{{5045235949980698447ull, 7412467527865801112ull,
+ 10100807602222119428ull, 7531479471486763514ull}},
+{{3153272468737936530ull, 13856164241770901503ull,
+ 10924690769816212546ull, 4707174669679227196ull}},
+{{17776648641204584374ull, 8096833265358851070ull,
+ 13655863462270265683ull, 5883968337099033995ull}},
+{{12997438764650954659ull, 5509355563271175934ull,
+ 12458143309410444200ull, 7354960421373792494ull}},
+{{7023426418958917516ull, 6886694454088969918ull,
+ 6349307099908279442ull, 9193700526717240618ull}},
+{{18224699567131487160ull, 8915870052232994102ull,
+ 8580002955870062555ull, 5746062829198275386ull}},
+{{13557502422059583141ull, 6533151546863854724ull,
+ 1501631657982802386ull, 7182578536497844233ull}},
+{{16946878027574478926ull, 17389811470434594213ull,
+ 6488725590905890886ull, 8978223170622305291ull}},
+{{12897641776447743281ull, 6256946150594233479ull,
+ 1749610485102487852ull, 5611389481638940807ull}},
+{{11510366202132291197ull, 7821182688242791849ull,
+ 16022071161660273527ull, 7014236852048676008ull}},
+{{552899697383200285ull, 5164792341876101908ull, 1580844878365790293ull,
+ 8767796065060845011ull}},
+{{9568934347719275986ull, 5533838222886257644ull,
+ 17128929113474476597ull, 5479872540663028131ull}},
+{{11961167934649094982ull, 11528983797035209959ull,
+ 16799475373415707842ull, 6849840675828785164ull}},
+{{10339773899883980824ull, 5187857709439236641ull,
+ 2552600143060083187ull, 8562300844785981456ull}},
+{{17991573733495957775ull, 936568059185828948ull,
+ 1595375089412551992ull, 5351438027991238410ull}},
+{{4042723093160395603ull, 1170710073982286186ull,
+ 11217590898620465798ull, 6689297534989048012ull}},
+{{14276775903305270311ull, 10686759629332633540ull,
+ 14021988623275582247ull, 8361621918736310015ull}},
+{{18146356976420569753ull, 13596753795973977818ull,
+ 15681271917188320760ull, 5226013699210193759ull}},
+{{13459574183670936383ull, 16995942244967472273ull,
+ 14989903878058013046ull, 6532517124012742199ull}},
+{{2989409674306506767ull, 12021555769354564534ull,
+ 14125693829145128404ull, 8165646405015927749ull}},
+{{15703439101723730441ull, 16736844392701378641ull,
+ 11134401652429399204ull, 5103529003134954843ull}},
+{{5794240821872499339ull, 2474311417167171686ull,
+ 9306316047109361102ull, 6379411253918693554ull}},
+{{16466173064195399982ull, 12316261308313740415ull,
+ 2409523022031925569ull, 7974264067398366943ull}},
+{{17208887192763206845ull, 780134290055005903ull,
+ 8423480916411035337ull, 4983915042123979339ull}},
+{{16899422972526620652ull, 5586853880996145283ull,
+ 5917665127086406267ull, 6229893802654974174ull}},
+{{16512592697230887911ull, 2371881332817793700ull,
+ 16620453445712783642ull, 7787367253318717717ull}},
+{{1096998398914529137ull, 6094111851438508967ull,
+ 12693626412784183728ull, 4867104533324198573ull}},
+{{15206306053925325133ull, 7617639814298136208ull,
+ 2031974960698065948ull, 6083880666655248217ull}},
+{{561138493697104800ull, 9522049767872670261ull, 7151654719299970339ull,
+ 7604850833319060271ull}},
+{{2656554567774384452ull, 3645438095706724961ull,
+ 11387313227203563318ull, 4753031770824412669ull}},
+{{7932379228145368469ull, 13780169656488182009ull,
+ 399083478722290435ull, 5941289713530515837ull}},
+{{14527160053609098490ull, 12613526052182839607ull,
+ 5110540366830250948ull, 7426612141913144796ull}},
+{{15997004061146768412ull, 17106825819469050562ull,
+ 12417459766123682650ull, 4641632588695715497ull}},
+{{10772883039578684707ull, 12160160237481537395ull,
+ 1686766652372439601ull, 5802040735869644372ull}},
+{{8854417781045967980ull, 1365142241569758032ull,
+ 2108458315465549502ull, 7252550919837055465ull}},
+{{11068022226307459975ull, 10929799838816973348ull,
+ 7247258912759324781ull, 9065688649796319331ull}},
+{{16140885928296938293ull, 9136967908474302294ull,
+ 2223693811260884036ull, 5666055406122699582ull}},
+{{10952735373516397058ull, 11421209885592877868ull,
+ 12002989300930880853ull, 7082569257653374477ull}},
+{{13690919216895496322ull, 441454301708933623ull,
+ 1168678570881437355ull, 8853211572066718097ull}},
+{{15474353538200767057ull, 16416810003063941178ull,
+ 12259639152869368106ull, 5533257232541698810ull}},
+{{10119569885896183014ull, 11297640466975150665ull,
+ 6101176904231934325ull, 6916571540677123513ull}},
+{{17261148375797616671ull, 286992528436774619ull,
+ 12238157148717305811ull, 8645714425846404391ull}},
+{{8482374725659816467ull, 16320271394768841801ull,
+ 14566377245589397987ull, 5403571516154002744ull}},
+{{15214654425502158488ull, 15788653225033664347ull,
+ 18207971556986747484ull, 6754464395192503430ull}},
+{{14406632013450310206ull, 1289072457582528818ull,
+ 13536592409378658548ull, 8443080493990629288ull}},
+{{13615831026833831783ull, 10029042322843856319ull,
+ 8460370255861661592ull, 5276925308744143305ull}},
+{{12408102765114901825ull, 12536302903554820399ull,
+ 15187148838254464894ull, 6596156635930179131ull}},
+{{10898442437966239377ull, 6447006592588749691ull,
+ 14372250029390693214ull, 8245195794912723914ull}},
+{{4505683514515205659ull, 17864437175650132269ull,
+ 13594342286796571162ull, 5153247371820452446ull}},
+{{10243790411571394977ull, 13107174432707889528ull,
+ 7769555821640938145ull, 6441559214775565558ull}},
+{{12804738014464243721ull, 2548909985602698198ull,
+ 488572740196396874ull, 8051949018469456948ull}},
+{{3391275240612764422ull, 6204754759429074278ull,
+ 9528729999477523854ull, 5032468136543410592ull}},
+{{13462466087620731335ull, 16979315486141118655ull,
+ 11910912499346904817ull, 6290585170679263240ull}},
+{{12216396591098526265ull, 7389086302394234607ull,
+ 14888640624183631022ull, 7863231463349079050ull}},
+{{14552776897077660772ull, 6492920569008725ull, 13917086408542157293ull,
+ 4914519664593174406ull}},
+{{4355913066064912253ull, 4619802169138648811ull,
+ 8172985973822920808ull, 6143149580741468008ull}},
+{{833205314153752412ull, 5774752711423311014ull,
+ 10216232467278651010ull, 7678936975926835010ull}},
+{{14355811376628258970ull, 8220906463066957287ull,
+ 10996831310476544785ull, 4799335609954271881ull}},
+{{13333078202357935808ull, 14887819097261084513ull,
+ 18357725156523068885ull, 5999169512442839851ull}},
+{{2831289697665256048ull, 4774715816294191930ull,
+ 18335470427226448203ull, 7498961890553549814ull}},
+{{6381242079468172934ull, 678354375970176004ull, 6847982998589142223ull,
+ 4686851181595968634ull}},
+{{7976552599335216167ull, 14683001025244883717ull,
+ 17783350785091203586ull, 5858563976994960792ull}},
+{{14582376767596408113ull, 9130379244701328838ull,
+ 3782444407654452867ull, 7323204971243700991ull}},
+{{9004598922640734333ull, 6801288037449273144ull, 116369491140678180ull,
+ 9154006214054626239ull}},
+{{5627874326650458958ull, 13474177060260571523ull,
+ 6990259959604005718ull, 5721253883784141399ull}},
+{{2423156889885685794ull, 7619349288470938596ull,
+ 4126138931077619244ull, 7151567354730176749ull}},
+{{3028946112357107242ull, 9524186610588673245ull,
+ 9769359682274411959ull, 8939459193412720936ull}},
+{{4198934329436885979ull, 12870145659259002634ull,
+ 6105849801421507474ull, 5587161995882950585ull}},
+{{14472039948650883281ull, 6864310037218977484ull,
+ 12243998270204272247ull, 6983952494853688231ull}},
+{{18090049935813604101ull, 3968701528096333951ull,
+ 10693311819327952405ull, 8729940618567110289ull}},
+{{18223810237524584419ull, 4786281464273902671ull,
+ 18212534933148440013ull, 5456212886604443930ull}},
+{{18168076778478342620ull, 10594537848769766243ull,
+ 13542296629580774208ull, 6820266108255554913ull}},
+{{18098409954670540371ull, 13243172310962207804ull,
+ 3092812731693804048ull, 8525332635319443642ull}},
+{{2088134184814311924ull, 8276982694351379878ull,
+ 6544693975736015434ull, 5328332897074652276ull}},
+{{11833539767872665713ull, 1122856331084449039ull,
+ 8180867469670019293ull, 6660416121343315345ull}},
+{{10180238691413444237ull, 6015256432282949203ull,
+ 14837770355514912020ull, 8325520151679144181ull}},
+{{4056806172919708696ull, 12982907307031619060ull,
+ 11579449481410513964ull, 5203450094799465113ull}},
+{{5071007716149635870ull, 16228634133789523825ull,
+ 639253796480978743ull, 6504312618499331392ull}},
+{{10950445663614432742ull, 15674106648809516877ull,
+ 799067245601223429ull, 8130390773124164240ull}},
+{{9149871548972714416ull, 12102159664719642000ull,
+ 499417028500764643ull, 5081494233202602650ull}},
+{{11437339436215893020ull, 10516013562472164596ull,
+ 9847643322480731612ull, 6351867791503253312ull}},
+{{14296674295269866275ull, 13145016953090205745ull,
+ 12309554153100914515ull, 7939834739379066640ull}},
+{{2017892406902584566ull, 5909792586467684639ull,
+ 7693471345688071572ull, 4962396712111916650ull}},
+{{16357423563910394419ull, 7387240733084605798ull,
+ 393467145255313657ull, 6202995890139895813ull}},
+{{11223407418033217216ull, 13845736934783145152ull,
+ 5103519949996529975ull, 7753744862674869766ull}},
+{{7014629636270760760ull, 15571114611880547576ull,
+ 17024758024029994946ull, 4846090539171793603ull}},
+{{8768287045338450950ull, 10240521227995908662ull,
+ 16669261511610105779ull, 6057613173964742004ull}},
+{{1736986769818287879ull, 8188965516567497924ull,
+ 2389832815803080608ull, 7572016467455927506ull}},
+{{10308988767991205733ull, 5118103447854686202ull,
+ 6105331528304313284ull, 4732510292159954691ull}},
+{{3662863923134231358ull, 6397629309818357753ull,
+ 3019978391953003701ull, 5915637865199943364ull}},
+{{9190265922345177101ull, 12608722655700335095ull,
+ 3774972989941254626ull, 7394547331499929205ull}},
+{{12661445229106817544ull, 12492137678240097338ull,
+ 4665201127926978093ull, 4621592082187455753ull}},
+{{6603434499528746122ull, 1780114042517957961ull,
+ 10443187428336110521ull, 5776990102734319691ull}},
+{{12865979142838320557ull, 6836828571574835355ull,
+ 8442298266992750247ull, 7221237628417899614ull}},
+{{11470787910120512792ull, 3934349696041156290ull,
+ 1329500796886162001ull, 9026547035522374518ull}},
+{{11780928462252708399ull, 13988183606094192441ull,
+ 14665996053336014962ull, 5641591897201484073ull}},
+{{891102522533721787ull, 8261857470762964744ull, 4497437011387854991ull,
+ 7051989871501855092ull}},
+{{1113878153167152233ull, 5715635820026318026ull,
+ 5621796264234818739ull, 8814987339377318865ull}},
+{{5307859864156858050ull, 1266429378302754814ull,
+ 15042837711215231472ull, 5509367087110824290ull}},
+{{15858196867050848370ull, 1583036722878443517ull,
+ 9580175102164263532ull, 6886708858888530363ull}},
+{{5987688028531396751ull, 1978795903598054397ull,
+ 7363532859277941511ull, 8608386073610662954ull}},
+{{6048148027045816922ull, 8154276467389865854ull,
+ 9213894055476101348ull, 5380241296006664346ull}},
+{{16783557070662046960ull, 10192845584237332317ull,
+ 2293995532490350877ull, 6725301620008330433ull}},
+{{7144388283045394988ull, 17352742998724053301ull,
+ 7479180434040326500ull, 8406627025010413041ull}},
+{{6771085686117065819ull, 1622092337347757505ull,
+ 16203702817343673823ull, 5254141890631508150ull}},
+{{13075543126073720178ull, 15862673476966860593ull,
+ 11031256484824816470ull, 6567677363289385188ull}},
+{{2509370852309986511ull, 10604969809353799934ull,
+ 13789070606031020588ull, 8209596704111731485ull}},
+{{15403414837975905281ull, 15851478167700900766ull,
+ 10924012137983081819ull, 5130997940069832178ull}},
+{{10030896510615105793ull, 15202661691198738054ull,
+ 4431643135624076466ull, 6413747425087290223ull}},
+{{3315248601414106434ull, 9779955077143646760ull, 927867901102707679ull,
+ 8017184281359112779ull}},
+{{2072030375883816521ull, 13030000950855861081ull,
+ 16720818502685049963ull, 5010740175849445486ull}},
+{{7201723988282158555ull, 11675815170142438447ull,
+ 11677651091501536646ull, 6263425219811806858ull}},
+{{4390468966925310290ull, 5371396925823272251ull,
+ 5373691827522145000ull, 7829281524764758573ull}},
+{{438200095114624980ull, 3357123078639545157ull, 5664400401415034577ull,
+ 4893300952977974108ull}},
+{{5159436137320669128ull, 8808089866726819350ull,
+ 7080500501768793221ull, 6116626191222467635ull}},
+{{15672667208505612218ull, 15621798351835912091ull,
+ 4238939608783603622ull, 7645782739028084544ull}},
+{{7489573996102313685ull, 5151937951470057153ull,
+ 2649337255489752264ull, 4778614211892552840ull}},
+{{13973653513555280010ull, 6439922439337571441ull,
+ 3311671569362190330ull, 5973267764865691050ull}},
+{{3632008836661936300ull, 17273275086026740110ull,
+ 13362961498557513720ull, 7466584706082113812ull}},
+{{16105063578195873900ull, 10795796928766712568ull,
+ 17575222973453221883ull, 4666615441301321132ull}},
+{{1684585399035290758ull, 8883060142531002807ull,
+ 3522284643106975738ull, 5833269301626651416ull}},
+{{15940789804076277160ull, 1880453141308977700ull,
+ 4402855803883719673ull, 7291586627033314270ull}},
+{{1479243181385794834ull, 6962252445063610030ull,
+ 14726941791709425399ull, 9114483283791642837ull}},
+{{14759585043648285483ull, 11268936805805838124ull,
+ 11510181629032084826ull, 5696552052369776773ull}},
+{{2737230850805238ull, 4862798970402521848ull, 552668981007942321ull,
+ 7120690065462220967ull}},
+{{3421538563506547ull, 10690184731430540214ull, 14525894281542091613ull,
+ 8900862581827776208ull}},
+{{13837196516884355304ull, 8987208466357781585ull,
+ 9078683925963807258ull, 5563039113642360130ull}},
+{{3461437590823280418ull, 2010638546092451174ull,
+ 2124982870599983265ull, 6953798892052950163ull}},
+{{13550169025383876331ull, 7124984201042951871ull,
+ 16491286643532142793ull, 8692248615066187703ull}},
+{{15386384668506004563ull, 15982330171720314679ull,
+ 17224583179848671101ull, 5432655384416367314ull}},
+{{14621294817205117799ull, 6142854659368229637ull,
+ 12307356937956063069ull, 6790819230520459143ull}},
+{{4441560466224233537ull, 12290254342637674951ull,
+ 10772510154017690932ull, 8488524038150573929ull}},
+{{9693504319031227817ull, 16904781001003322652ull,
+ 18262033892329526592ull, 5305327523844108705ull}},
+{{12116880398789034771ull, 2684232177544601699ull,
+ 8992484310129744529ull, 6631659404805135882ull}},
+{{10534414480058905560ull, 7966976240358140028ull,
+ 2017233350807404853ull, 8289574256006419853ull}},
+{{15807381086891591783ull, 7285203159437531469ull,
+ 3566613853468321985ull, 5180983910004012408ull}},
+{{5924168303332326017ull, 13718189967724302241ull,
+ 4458267316835402481ull, 6476229887505015510ull}},
+{{12016896397592795425ull, 3312679404373214089ull,
+ 14796206182899028910ull, 8095287359381269387ull}},
+{{593031220854415285ull, 15905482683015422518ull,
+ 6941785855098199116ull, 5059554599613293367ull}},
+{{9964661062922794914ull, 1435109280059726531ull,
+ 4065546300445360992ull, 6324443249516616709ull}},
+{{7844140310226105738ull, 1793886600074658164ull,
+ 9693618893984089144ull, 7905554061895770886ull}},
+{{14125959730746091894ull, 1121179125046661352ull,
+ 1446825790312667811ull, 4940971288684856804ull}},
+{{17657449663432614868ull, 15236531961590490402ull,
+ 1808532237890834763ull, 6176214110856071005ull}},
+{{12848440042435992777ull, 14433978933560725099ull,
+ 6872351315790931358ull, 7720267638570088756ull}},
+{{5724432017308801534ull, 4409550815048065283ull,
+ 13518591609224107907ull, 4825167274106305472ull}},
+{{2543854003208614013ull, 900252500382693700ull,
+ 16898239511530134884ull, 6031459092632881840ull}},
+{{3179817504010767516ull, 1125315625478367125ull,
+ 2676055315703116989ull, 7539323865791102301ull}},
+{{4293228949220423650ull, 3009165275137673405ull,
+ 3978377581528142070ull, 4712077416119438938ull}},
+{{9978222204952917466ull, 12984828630776867564ull,
+ 14196344013764953395ull, 5890096770149298672ull}},
+{{12472777756191146832ull, 11619349770043696551ull,
+ 17745430017206191744ull, 7362620962686623340ull}},
+{{10979286176811545636ull, 14524187212554620689ull,
+ 3735043447798188064ull, 9203276203358279176ull}},
+{{18391268906575685783ull, 9077617007846637930ull,
+ 2334402154873867540ull, 5752047627098924485ull}},
+{{13765714096364831420ull, 11347021259808297413ull,
+ 7529688712019722329ull, 7190059533873655606ull}},
+{{3372084565173875563ull, 348718519478208055ull, 188738853169877104ull,
+ 8987574417342069508ull}},
+{{9025081880874754083ull, 217949074673880034ull, 9341333820085948998ull,
+ 5617234010838793442ull}},
+{{2057980314238666796ull, 9495808380197125851ull,
+ 2453295238252660439ull, 7021542513548491803ull}},
+{{16407533448080497207ull, 7258074456819019409ull,
+ 16901677103097989261ull, 8776928141935614753ull}},
+{{3337179377409228899ull, 6842139544725581083ull,
+ 3646019161795161432ull, 5485580088709759221ull}},
+{{18006532277043699835ull, 8552674430906976353ull,
+ 9169209970671339694ull, 6856975110887199026ull}},
+{{8673107291022461082ull, 1467471001778944634ull,
+ 2238140426484398810ull, 8571218888608998783ull}},
+{{10032378075316426080ull, 5528855394539228300ull,
+ 8316366794193831112ull, 5357011805380624239ull}},
+{{12540472594145532600ull, 6911069243174035375ull,
+ 5783772474314900986ull, 6696264756725780299ull}},
+{{11063904724254527846ull, 17862208590822320027ull,
+ 2618029574466238328ull, 8370330945907225374ull}},
+{{4609097443445385952ull, 11163880369263950017ull,
+ 15471326539323562667ull, 5231456841192015858ull}},
+{{10373057822734120344ull, 9343164443152549617ull,
+ 10115786137299677526ull, 6539321051490019823ull}},
+{{17578008296845038334ull, 2455583517085911213ull,
+ 8033046653197209004ull, 8174151314362524779ull}},
+{{13292098194741842911ull, 10758111735033470316ull,
+ 2714811149034561675ull, 5108844571476577987ull}},
+{{16615122743427303638ull, 8835953650364449991ull,
+ 17228571991575365806ull, 6386055714345722483ull}},
+{{16157217410856741644ull, 1821570026100786681ull,
+ 16924028971041819354ull, 7982569642932153104ull}},
+{{3180731854144381672ull, 5750167284740379580ull,
+ 10577518106901137096ull, 4989106026832595690ull}},
+{{3975914817680477089ull, 7187709105925474475ull,
+ 3998525596771645562ull, 6236382533540744613ull}},
+{{358207503673208457ull, 18208008419261618902ull,
+ 9609843014391944856ull, 7795478166925930766ull}},
+{{14058937745077918998ull, 11380005262038511813ull,
+ 1394465865567577631ull, 4872173854328706729ull}},
+{{3738614126065235036ull, 9613320559120751863ull,
+ 6354768350386859943ull, 6090217317910883411ull}},
+{{61581639154155890ull, 7404964680473551925ull, 3331774419556187025ull,
+ 7612771647388604264ull}},
+{{2344331533685041384ull, 16157317971364439713ull,
+ 2082359012222616890ull, 4757982279617877665ull}},
+{{7542100435533689633ull, 10973275427350773833ull,
+ 7214634783705659017ull, 5947477849522347081ull}},
+{{14039311562844499946ull, 18328280302615855195ull,
+ 13629979498059461675ull, 7434347311902933851ull}},
+{{6468726717564118514ull, 9149332179921215545ull,
+ 6212894177073469595ull, 4646467069939333657ull}},
+{{12697594415382536047ull, 6824979206474131527ull,
+ 12377803739769224898ull, 5808083837424167071ull}},
+{{11260307000800782154ull, 17754596044947440217ull,
+ 10860568656284143218ull, 7260104796780208839ull}},
+{{240325695718813981ull, 12969873019329524464ull,
+ 8964024801927791119ull, 9075130995975261049ull}},
+{{150203559824258738ull, 15023699664722034646ull,
+ 17131730547273339209ull, 5671956872484538155ull}},
+{{9411126486635099230ull, 4944566525620379595ull,
+ 16802977165664286108ull, 7089946090605672694ull}},
+{{7152222089866486134ull, 6180708157025474494ull,
+ 11780349420225581827ull, 8862432613257090868ull}},
+{{18305196861448717546ull, 1557099588927227606ull,
+ 16586090424495764450ull, 5539020383285681792ull}},
+{{13658124039956121124ull, 11169746523013810316ull,
+ 2285868956910153946ull, 6923775479107102241ull}},
+{{17072655049945151405ull, 4738811116912487087ull,
+ 7469022214565080337ull, 8654719348883877801ull}},
+{{17587938433856801484ull, 14490971994138774189ull,
+ 16197353930171644970ull, 5409199593052423625ull}},
+{{8149864987038838143ull, 8890342955818691929ull,
+ 6411634357432392501ull, 6761499491315529532ull}},
+{{14799017252225935583ull, 15724614713200752815ull,
+ 8014542946790490626ull, 8451874364144411915ull}},
+{{16166914810282291596ull, 14439570214177858413ull,
+ 2703246332530362689ull, 5282421477590257447ull}},
+{{6373585457570700782ull, 4214404712440159305ull,
+ 17214115970945117074ull, 6603026846987821808ull}},
+{{12578667840390763882ull, 14491377927404974939ull,
+ 3070900889971844726ull, 8253783558734777261ull}},
+{{5555824391030533474ull, 4445425186200721433ull,
+ 4225156065446096906ull, 5158614724209235788ull}},
+{{11556466507215554747ull, 14780153519605677599ull,
+ 5281445081807621132ull, 6448268405261544735ull}},
+{{9833897115592055529ull, 28447825797545383ull, 1990120333832138512ull,
+ 8060335506576930919ull}},
+{{13063714724886116562ull, 17779891123465864ull, 8161354236286168426ull,
+ 5037709691610581824ull}},
+{{16329643406107645702ull, 9245596900759108138ull,
+ 10201692795357710532ull, 6297137114513227280ull}},
+{{11188682220779781320ull, 11556996125948885173ull,
+ 12752115994197138165ull, 7871421393141534100ull}},
+{{9298769397201057277ull, 9528965587931747185ull,
+ 17193444533227987161ull, 4919638370713458812ull}},
+{{16235147764928709500ull, 16522893003342071885ull,
+ 3045061592825432335ull, 6149547963391823516ull}},
+{{6458876650878723163ull, 16041930235750201953ull,
+ 3806326991031790419ull, 7686934954239779395ull}},
+{{15566012952867671737ull, 7720363388130182268ull, 73111360181175060ull,
+ 4804334346399862122ull}},
+{{1010772117375038055ull, 9650454235162727836ull,
+ 9314761237081244633ull, 6005417932999827652ull}},
+{{1263465146718797569ull, 16674753812380797699ull,
+ 11643451546351555791ull, 7506772416249784565ull}},
+{{16930566781195106145ull, 17339250160379080417ull,
+ 9583000225683416321ull, 4691732760156115353ull}},
+{{7328150421211718969ull, 7839004645191686810ull,
+ 16590436300531658306ull, 5864665950195144191ull}},
+{{18383560063369424519ull, 575383769634832704ull,
+ 16126359357237184979ull, 7330832437743930239ull}},
+{{4532706005502229033ull, 14554287767325704593ull,
+ 15546263178119093319ull, 9163540547179912799ull}},
+{{14362156299507362906ull, 16013958882219647226ull,
+ 16633943513965515180ull, 5727212841987445499ull}},
+{{8729323337529427824ull, 1570704529065007417ull,
+ 16180743374029506072ull, 7159016052484306874ull}},
+{{15523340190339172684ull, 1963380661331259271ull,
+ 11002557180682106782ull, 8948770065605383593ull}},
+{{16619616646603064784ull, 15062170968614200756ull,
+ 18405813283994786498ull, 5592981291003364745ull}},
+{{2327776734544279363ull, 9604341673912975138ull,
+ 9172208549711319411ull, 6991226613754205932ull}},
+{{12133092955035125012ull, 7393741073963831018ull,
+ 11465260687139149264ull, 8739033267192757415ull}},
+{{12194869115324341037ull, 4621088171227394386ull,
+ 14083316957103050146ull, 5461895791995473384ull}},
+{{6020214357300650488ull, 14999732250889018791ull,
+ 17604146196378812682ull, 6827369739994341730ull}},
+{{2913581928198425206ull, 9526293276756497681ull,
+ 12781810708618740045ull, 8534212174992927163ull}},
+{{13350203751192485514ull, 8259776307186505002ull,
+ 5682788683673018576ull, 5333882609370579477ull}},
+{{7464382652135831084ull, 10324720383983131253ull,
+ 11715171873018661124ull, 6667353261713224346ull}},
+{{13942164333597176759ull, 12905900479978914066ull,
+ 5420592804418550597ull, 8334191577141530433ull}},
+{{13325538726925623378ull, 10372030809200515243ull,
+ 14917085548830063883ull, 5208869735713456520ull}},
+{{12045237390229641319ull, 8353352493073256150ull,
+ 199612862328028238ull, 6511087169641820651ull}},
+{{5833174700932275841ull, 1218318579486794380ull,
+ 14084574133192199010ull, 8138858962052275813ull}},
+{{12869106224937448209ull, 5373135130606634391ull,
+ 11108701842458818333ull, 5086786851282672383ull}},
+{{11474696762744422357ull, 11328104931685680893ull,
+ 9274191284646135012ull, 6358483564103340479ull}},
+{{508312898148364234ull, 14160131164607101117ull,
+ 6981053087380280861ull, 7948104455129175599ull}},
+{{2623538570556421598ull, 11155924987093132150ull,
+ 11280687207253757394ull, 4967565284455734749ull}},
+{{12502795250050302806ull, 4721534197011639379ull,
+ 265800953785033031ull, 6209456605569668437ull}},
+{{11016808044135490603ull, 1290231727837161320ull,
+ 4943937210658679193ull, 7761820756962085546ull}},
+{{6885505027584681627ull, 12335609875966695585ull,
+ 7701646775089062399ull, 4851137973101303466ull}},
+{{13218567302908239938ull, 10807826326530981577ull,
+ 403686432006552191ull, 6063922466376629333ull}},
+{{2688151073353136210ull, 8898096889736339068ull,
+ 5116294058435578143ull, 7579903082970786666ull}},
+{{10903466457700485939ull, 12478839583726293773ull,
+ 7809369804949624243ull, 4737439426856741666ull}},
+{{18241019090552995328ull, 10986863461230479312ull,
+ 538340219332254496ull, 5921799283570927083ull}},
+{{4354529789481692544ull, 13733579326538099141ull,
+ 14507983329447481832ull, 7402249104463658853ull}},
+{{5027424127639751792ull, 8583487079086311963ull,
+ 11373332590118370097ull, 4626405690289786783ull}},
+{{1672594141122301836ull, 15341044867285277858ull,
+ 9604979719220574717ull, 5783007112862233479ull}},
+{{11314114713257653103ull, 5341248028824433610ull,
+ 7394538630598330493ull, 7228758891077791849ull}},
+{{4919271354717290571ull, 11288246054457929917ull,
+ 13854859306675301020ull, 9035948613847239811ull}},
+{{5380387605912000559ull, 16278525820890982006ull,
+ 6353444057458369185ull, 5647467883654524882ull}},
+{{15948856544244776506ull, 6513099220831563795ull,
+ 17165177108677737290ull, 7059334854568156102ull}},
+{{15324384661878582729ull, 17364746062894230552ull,
+ 12233099348992395804ull, 8824168568210195128ull}},
+{{9577740413674114206ull, 1629594252454118287ull,
+ 7645687093120247378ull, 5515105355131371955ull}},
+{{7360489498665254853ull, 11260364852422423667ull,
+ 4945422847972921318ull, 6893881693914214944ull}},
+{{4588925854904180662ull, 4852084028673253776ull,
+ 6181778559966151648ull, 8617352117392768680ull}},
+{{2868078659315112914ull, 3032552517920783610ull,
+ 3863611599978844780ull, 5385845073370480425ull}},
+{{12808470360998666950ull, 3790690647400979512ull,
+ 9441200518400943879ull, 6732306341713100531ull}},
+{{16010587951248333688ull, 126677290823836486ull,
+ 7189814629573791945ull, 8415382927141375664ull}},
+{{5394931451102820651ull, 11608388352833367564ull,
+ 4493634143483619965ull, 5259614329463359790ull}},
+{{6743664313878525814ull, 675427385759545743ull,
+ 14840414716209300765ull, 6574517911829199737ull}},
+{{3817894373920769363ull, 5455970250626820083ull,
+ 4715460339979462244ull, 8218147389786499672ull}},
+{{80340974486786900ull, 12633353443496538360ull, 2947162712487163902ull,
+ 5136342118616562295ull}},
+{{100426218108483625ull, 6568319767515897142ull,
+ 17519011445891118590ull, 6420427648270702868ull}},
+{{9348904809490380339ull, 17433771746249647235ull,
+ 3452020233654346621ull, 8025534560338378586ull}},
+{{3537222496717793760ull, 13201950350619723474ull,
+ 6769198664461354542ull, 5015959100211486616ull}},
+{{13644900157752018008ull, 7279065901419878534ull,
+ 8461498330576693178ull, 6269948875264358270ull}},
+{{7832753160335246702ull, 18322204413629623976ull,
+ 1353500876366090664ull, 7837436094080447838ull}},
+{{4895470725209529189ull, 11451377758518514985ull,
+ 14680996103010970377ull, 4898397558800279898ull}},
+{{10731024424939299390ull, 479164142865980019ull,
+ 9127873091908937164ull, 6122996948500349873ull}},
+{{8802094512746736333ull, 598955178582475024ull,
+ 16021527383313559359ull, 7653746185625437341ull}},
+{{5501309070466710209ull, 7291876014255128746ull,
+ 12319297623784668551ull, 4783591366015898338ull}},
+{{16100008374938163569ull, 4503158999391523028ull,
+ 6175749992876059881ull, 5979489207519872923ull}},
+{{1678266394963152845ull, 10240634767666791690ull,
+ 3108001472667686947ull, 7474361509399841154ull}},
+{{5660602515279358432ull, 4094553720578050854ull,
+ 6554186938844692246ull, 4671475943374900721ull}},
+{{16299125180953973848ull, 14341564187577339375ull,
+ 12804419691983253211ull, 5839344929218625901ull}},
+{{15762220457765079406ull, 13315269216044286315ull,
+ 2170466559696902802ull, 7299181161523282377ull}},
+{{15091089553778961353ull, 7420714483200582086ull,
+ 7324769218048516407ull, 9123976451904102971ull}},
+{{4820244952684462942ull, 11555475579641445660ull,
+ 2272137752066628802ull, 5702485282440064357ull}},
+{{6025306190855578677ull, 5220972437697031267ull,
+ 7451858208510673907ull, 7128106603050080446ull}},
+{{2919946720142085442ull, 1914529528693901180ull, 91450723783566576ull,
+ 8910133253812600558ull}},
+{{11048338736943579210ull, 1196580955433688237ull,
+ 13892214757646892822ull, 5568833283632875348ull}},
+{{18422109439606861916ull, 10719098231146886104ull,
+ 17365268447058616027ull, 6961041604541094185ull}},
+{{4580892725799025779ull, 8787186770506219727ull,
+ 7871527503541106322ull, 8701302005676367732ull}},
+{{9780586981265472968ull, 10103677749993775233ull,
+ 14143076726567967259ull, 5438313753547729832ull}},
+{{16837419745009229114ull, 8017911169064831137ull,
+ 17678845908209959074ull, 6797892191934662290ull}},
+{{7211716625979372680ull, 799016924476263114ull,
+ 12875185348407673035ull, 8497365239918327863ull}},
+{{9119008909664495829ull, 16640286642293522110ull,
+ 14964519870395877502ull, 5310853274948954914ull}},
+{{2175389100225843979ull, 11576986266012126830ull,
+ 9482277801140071070ull, 6638566593686193643ull}},
+{{11942608412137080781ull, 5247860795660382729ull,
+ 7241161232997700934ull, 8298208242107742054ull}},
+{{546601229944593632ull, 17114971052569902918ull,
+ 18360783825905726795ull, 5186380151317338783ull}},
+{{9906623574285517848ull, 16782027797284990743ull,
+ 18339293763954770590ull, 6482975189146673479ull}},
+{{7771593449429509406ull, 11754162709751462621ull,
+ 18312431186516075334ull, 8103718986433341849ull}},
+{{7163088915107137331ull, 2734665675167276234ull,
+ 4527740463931465228ull, 5064824366520838656ull}},
+{{18177233180738697472ull, 3418332093959095292ull,
+ 5659675579914331535ull, 6331030458151048320ull}},
+{{4274797402213820224ull, 18107973172731032828ull,
+ 7074594474892914418ull, 7913788072688810400ull}},
+{{11895120413238413448ull, 15929169251384283421ull,
+ 4421621546808071511ull, 4946117545430506500ull}},
+{{1033842461265853098ull, 15299775545802966373ull,
+ 5527026933510089389ull, 6182646931788133125ull}},
+{{5903989095009704276ull, 5289661376971544254ull,
+ 11520469685314999641ull, 7728308664735166406ull}},
+{{17525051239663228885ull, 14835253406675684918ull,
+ 2588607534894486871ull, 4830192915459479004ull}},
+{{12682942012724260298ull, 13932380739917218244ull,
+ 3235759418618108589ull, 6037741144324348755ull}},
+{{15853677515905325372ull, 3580417869614359093ull,
+ 17879757328554799449ull, 7547176430405435943ull}},
+{{12214391456654522310ull, 13766976214577444193ull,
+ 18092377357987831511ull, 4716985269003397464ull}},
+{{1432931265535989175ull, 12597034249794417338ull,
+ 4168727623775237773ull, 5896231586254246831ull}},
+{{11014536118774762277ull, 1911234756960857960ull,
+ 599223511291659313ull, 7370289482817808539ull}},
+{{13768170148468452846ull, 7000729464628460354ull,
+ 14584087444396737853ull, 9212861853522260673ull}},
+{{13216792361220170933ull, 6681298924606481673ull,
+ 2197525625106879302ull, 5758038658451412921ull}},
+{{2685932396243049954ull, 17574995692612877900ull,
+ 7358593049810987031ull, 7197548323064266151ull}},
+{{3357415495303812442ull, 17357058597338709471ull,
+ 4586555293836345885ull, 8996935403830332689ull}},
+{{9015913712205964633ull, 13154004632550387371ull,
+ 14395812104716185938ull, 5623084627393957930ull}},
+{{6658206121830067887ull, 7219133753833208406ull,
+ 8771393094040456615ull, 7028855784242447413ull}},
+{{17546129689142360666ull, 4412231173864122603ull,
+ 15575927385977958673ull, 8786069730303059266ull}},
+{{8660488046500281465ull, 14286859529733546387ull,
+ 14346640634663612074ull, 5491293581439412041ull}},
+{{6213924039697963927ull, 8635202375312157176ull,
+ 4098242738047351381ull, 6864116976799265052ull}},
+{{7767405049622454908ull, 15405688987567584374ull,
+ 5122803422559189226ull, 8580146220999081315ull}},
+{{242942137586646414ull, 14240241635657128138ull, 895909129885799314ull,
+ 5362591388124425822ull}},
+{{9527049708838083825ull, 8576930007716634364ull,
+ 10343258449212024951ull, 6703239235155532277ull}},
+{{11908812136047604781ull, 6109476491218405051ull,
+ 17540759079942419093ull, 8379049043944415346ull}},
+{{5137164575816059036ull, 6124265816225197109ull,
+ 15574660443391399837ull, 5236905652465259591ull}},
+{{11033141738197461699ull, 12267018288708884290ull,
+ 14856639535811861892ull, 6546132065581574489ull}},
+{{4568055135892051316ull, 15333772860886105363ull,
+ 4735741364482663653ull, 8182665081976968112ull}},
+{{549191450718838121ull, 11889451047267509804ull,
+ 2959838352801664783ull, 5114165676235605070ull}},
+{{686489313398547651ull, 10250127790656999351ull,
+ 12923169977856856787ull, 6392707095294506337ull}},
+{{14693169697030348275ull, 8200973719893861284ull,
+ 2318904417038907272ull, 7990883869118132922ull}},
+{{18406603097498743480ull, 5125608574933663302ull,
+ 6061001279076704949ull, 4994302418198833076ull}},
+{{13784881835018653542ull, 11018696737094467032ull,
+ 7576251598845881186ull, 6242878022748541345ull}},
+{{17231102293773316928ull, 4549998884513307982ull,
+ 14082000516984739387ull, 7803597528435676681ull}},
+{{6157752915180935176ull, 537906293607123537ull, 1883721295474380261ull,
+ 4877248455272297926ull}},
+{{12308877162403556874ull, 5284068885436292325ull,
+ 11578023656197751134ull, 6096560569090372407ull}},
+{{1551038397722282380ull, 15828458143650141215ull,
+ 9860843551819801013ull, 7620700711362965509ull}},
+{{7886928026217508344ull, 12198629348995032211ull,
+ 8468870229101069585ull, 4762937944601853443ull}},
+{{5246974014344497526ull, 1413228630961626552ull,
+ 5974401767948949078ull, 5953672430752316804ull}},
+{{6558717517930621907ull, 10989907825556808998ull,
+ 7468002209936186347ull, 7442090538440396005ull}},
+{{17934256503988802404ull, 4562849381759311671ull,
+ 6973344390423810419ull, 4651306586525247503ull}},
+{{17806134611558615101ull, 1091875708771751685ull,
+ 4104994469602375120ull, 5814133233156559379ull}},
+{{8422610209166105164ull, 1364844635964689607ull, 519557068575580996ull,
+ 7267666541445699224ull}},
+{{5916576743030243551ull, 1706055794955862009ull, 649446335719476245ull,
+ 9084583176807124030ull}},
+{{15227075510462371979ull, 3372127881061107707ull,
+ 14240962015106836365ull, 5677864485504452518ull}},
+{{14422158369650577070ull, 8826845869753772538ull,
+ 8577830482028769648ull, 7097330606880565648ull}},
+{{8804325925208445530ull, 11033557337192215673ull,
+ 10722288102535962060ull, 8871663258600707060ull}},
+{{17031918749323748216ull, 16119345372599910603ull,
+ 15924802100939752095ull, 5544789536625441912ull}},
+{{16678212418227297366ull, 15537495697322500350ull,
+ 1459258552465138503ull, 6930986920781802391ull}},
+{{11624393485929345900ull, 14810183603225737534ull,
+ 15659131245863586841ull, 8663733650977252988ull}},
+{{2653559910278453283ull, 2338835724375004103ull, 563584991809965968ull,
+ 5414833531860783118ull}},
+{{17152007943130230316ull, 2923544655468755128ull,
+ 9927853276617233268ull, 6768541914825978897ull}},
+{{2993265855203236279ull, 3654430819335943911ull,
+ 17021502614198929489ull, 8460677393532473621ull}},
+{{8788320187143104531ull, 13813234308153434704ull,
+ 12944282143088024882ull, 5287923370957796013ull}},
+{{10985400233928880663ull, 8043170848337017572ull,
+ 2345294623577867391ull, 6609904213697245017ull}},
+{{13731750292411100829ull, 5442277541993884061ull,
+ 7543304297899722143ull, 8262380267121556271ull}},
+{{10888186941970631970ull, 10318952491387259394ull,
+ 11632094213828408195ull, 5163987666950972669ull}},
+{{4386861640608514155ull, 8287004595806686339ull, 705059712003346532ull,
+ 6454984583688715837ull}},
+{{871891032333254789ull, 10358755744758357924ull,
+ 5493010658431571069ull, 8068730729610894796ull}},
+{{9768303932063060051ull, 8780065349687667654ull,
+ 12656503698374507726ull, 5042956706006809247ull}},
+{{2987007878224049256ull, 1751709650254808760ull,
+ 11208943604540746754ull, 6303695882508511559ull}},
+{{3733759847780061570ull, 11413009099673286758ull,
+ 9399493487248545538ull, 7879619853135639449ull}},
+{{16168657960144702193ull, 11744816705723192127ull,
+ 17403898475598810721ull, 4924762408209774655ull}},
+{{15599136431753489838ull, 845962826871826447ull,
+ 17143187076071125498ull, 6155953010262218319ull}},
+{{14887234521264474393ull, 10280825570444558867ull,
+ 16817297826661518968ull, 7694941262827772899ull}},
+{{6998678566576602544ull, 6425515981527849292ull,
+ 8204968132449755403ull, 4809338289267358062ull}},
+{{8748348208220753180ull, 3420208958482423711ull,
+ 1032838128707418446ull, 6011672861584197578ull}},
+{{6323749241848553570ull, 13498633234957805447ull,
+ 10514419697739048865ull, 7514591076980246972ull}},
+{{10869872303796427838ull, 1519116744207546548ull,
+ 15794884347941681349ull, 4696619423112654357ull}},
+{{13587340379745534797ull, 6510581948686821089ull,
+ 5908547379644937974ull, 5870774278890817947ull}},
+{{3149117419399754784ull, 17361599472713302170ull,
+ 2773998206128784563ull, 7338467848613522434ull}},
+{{13159768811104469288ull, 17090313322464239808ull,
+ 12690869794515756512ull, 9173084810766903042ull}},
+{{8224855506940293305ull, 10681445826540149880ull,
+ 12543479639999735724ull, 5733178006729314401ull}},
+{{10281069383675366631ull, 13351807283175187350ull,
+ 1844291494717505943ull, 7166472508411643002ull}},
+{{3627964692739432481ull, 12078073085541596284ull,
+ 11528736405251658237ull, 8958090635514553752ull}},
+{{11490849969816921109ull, 9854638687677191629ull,
+ 7205460253282286398ull, 5598806647196596095ull}},
+{{528504406988987674ull, 3094926322741713729ull, 4395139298175470094ull,
+ 6998508308995745119ull}},
+{{5272316527163622496ull, 13092029940281917969ull,
+ 882238104291949713ull, 8748135386244681399ull}},
+{{14824412875545733820ull, 1264989685035116874ull,
+ 7468927842823550427ull, 5467584616402925874ull}},
+{{9307144057577391467ull, 15416295161576059805ull,
+ 112787766674662225ull, 6834480770503657343ull}},
+{{16245616090399127238ull, 5435310896687911044ull,
+ 13976042763625491494ull, 8543100963129571678ull}},
+{{930138019644678716ull, 17232127365712108115ull,
+ 4123340708838544279ull, 5339438101955982299ull}},
+{{14997730579838012107ull, 16928473188712747239ull,
+ 542489867620792445ull, 6674297627444977874ull}},
+{{14135477206370127229ull, 7325533430608770337ull,
+ 9901484371380766365ull, 8342872034306222342ull}},
+{{1917144226340247663ull, 6884301403344175413ull,
+ 1576741713685591074ull, 5214295021441388964ull}},
+{{7008116301352697482ull, 17828748791034995074ull,
+ 1970927142106988842ull, 6517868776801736205ull}},
+{{17983517413545647661ull, 13062563951938968034ull,
+ 7075344946061123957ull, 8147335971002170256ull}},
+{{15851384401893417692ull, 10469945479175548973ull,
+ 4422090591288202473ull, 5092084981876356410ull}},
+{{5979172447084608403ull, 17699117867396824121ull,
+ 14750985275965028899ull, 6365106227345445512ull}},
+{{12085651577283148407ull, 17512211315818642247ull,
+ 18438731594956286124ull, 7956382784181806890ull}},
+{{14471061263443049611ull, 1721760035531875596ull,
+ 16135893265275066732ull, 4972739240113629306ull}},
+{{18088826579303812013ull, 2152200044414844495ull,
+ 10946494544739057607ull, 6215924050142036633ull}},
+{{17999347205702377113ull, 16525308110800719331ull,
+ 18294804199351209912ull, 7769905062677545791ull}},
+{{8943748994350291744ull, 10328317569250449582ull,
+ 18351781652235588051ull, 4856190664173466119ull}},
+{{1956314206083088871ull, 8298710943135674074ull,
+ 18328041046867097160ull, 6070238330216832649ull}},
+{{11668764794458636897ull, 10373388678919592592ull,
+ 9074993253301707738ull, 7587797912771040812ull}},
+{{7292977996536648061ull, 11095053942752133274ull,
+ 14895242820168343144ull, 4742373695481900507ull}},
+{{18339594532525585884ull, 13868817428440166592ull,
+ 14007367506783041026ull, 5927967119352375634ull}},
+{{4477749091947430739ull, 8112649748695432433ull,
+ 8285837346624025475ull, 7409958899190469543ull}},
+{{14327808228535613972ull, 2764563083720951318ull,
+ 12096177369281097778ull, 4631224311994043464ull}},
+{{8686388248814741657ull, 12679075891505964956ull,
+ 15120221711601372222ull, 5789030389992554330ull}},
+{{10857985311018427071ull, 6625472827527680387ull,
+ 9676905102646939470ull, 7236287987490692913ull}},
+{{8960795620345645935ull, 17505213071264376292ull,
+ 16707817396736062241ull, 9045359984363366141ull}},
+{{14823869299570804517ull, 4023229141899153326ull,
+ 12748228882173732853ull, 5653349990227103838ull}},
+{{9306464587608729838ull, 9640722445801329562ull,
+ 6711914065862390258ull, 7066687487783879798ull}},
+{{2409708697656136490ull, 2827531020396886145ull,
+ 17613264619182763631ull, 8833359359729849747ull}},
+{{13035282982103555066ull, 8684735915389135696ull,
+ 8702447377775533317ull, 5520849599831156092ull}},
+{{16294103727629443833ull, 15467605912663807524ull,
+ 10878059222219416646ull, 6901061999788945115ull}},
+{{1920885585827253175ull, 10111135353974983598ull,
+ 8985888009346882904ull, 8626327499736181394ull}},
+{{15035611546424196947ull, 6319459596234364748ull,
+ 10227866024269189719ull, 5391454687335113371ull}},
+{{347770359320694567ull, 3287638476865568032ull, 8173146511909099245ull,
+ 6739318359168891714ull}},
+{{434712949150868209ull, 8721234114509347944ull, 993061103031598248ull,
+ 8424147948961114643ull}},
+{{271695593219292631ull, 5450771321568342465ull,
+ 16761564253890606569ull, 5265092468100696651ull}},
+{{4951305509951503692ull, 11425150170387815985ull,
+ 16340269298935870307ull, 6581365585125870814ull}},
+{{10800817905866767519ull, 9669751694557382077ull,
+ 11201964586815062076ull, 8226706981407338518ull}},
+{{9056354200380423652ull, 15266966845953139606ull,
+ 2389541848332025893ull, 5141691863379586574ull}},
+{{2097070713620753756ull, 5248650502159260796ull,
+ 12210299347269808175ull, 6427114829224483217ull}},
+{{2621338392025942195ull, 1949127109271688091ull,
+ 1427816128805096507ull, 8033893536530604022ull}},
+{{17779237559512071536ull, 17359105507790662720ull,
+ 14727443135785349028ull, 5021183460331627513ull}},
+{{3777302875680537804ull, 3252137811028776785ull,
+ 4574245864449522574ull, 6276479325414534392ull}},
+{{9333314613028060159ull, 13288544300640746789ull,
+ 5717807330561903217ull, 7845599156768167990ull}},
+{{8139164642356231552ull, 1387811160259384887ull,
+ 17408687636883353223ull, 4903499472980104993ull}},
+{{5562269784517901535ull, 15569822005606394821ull,
+ 7925801490822027816ull, 6129374341225131242ull}},
+{{11564523249074764823ull, 1015533433298441910ull,
+ 683879826672758963ull, 7661717926531414053ull}},
+{{2616141012244340111ull, 16775609460307383858ull,
+ 2733267900884168303ull, 4788573704082133783ull}},
+{{12493548302160200946ull, 16357825806956841918ull,
+ 17251642931387374091ull, 5985717130102667228ull}},
+{{6393563340845475375ull, 15835596240268664494ull,
+ 3117809590524665998ull, 7482146412628334036ull}},
+{{17831035143310585821ull, 5285561631740527404ull,
+ 11172003030932692057ull, 4676341507892708772ull}},
+{{3842049855428680661ull, 11218638058103047160ull,
+ 13965003788665865071ull, 5845426884865885965ull}},
+{{4802562319285850826ull, 9411611554201421046ull,
+ 3621196680550167627ull, 7306783606082357457ull}},
+{{15226574935962089340ull, 7152828424324388403ull,
+ 9138181869115097438ull, 9133479507602946821ull}},
+{{7210766325762611886ull, 18305575820484906464ull,
+ 8017206677410629850ull, 5708424692251841763ull}},
+{{9013457907203264857ull, 13658597738751357272ull,
+ 5409822328335899409ull, 7135530865314802204ull}},
+{{11266822384004081071ull, 3238189118157032878ull,
+ 6762277910419874262ull, 8919413581643502755ull}},
+{{2430077971575162766ull, 15858926254130309261ull,
+ 1920580684798727461ull, 5574633488527189222ull}},
+{{7649283482896341361ull, 5988599762380722864ull,
+ 11624097892853185135ull, 6968291860658986527ull}},
+{{9561604353620426701ull, 2874063684548515676ull,
+ 9918436347639093515ull, 8710364825823733159ull}},
+{{15199374757867542496ull, 17937190867338679961ull,
+ 13116551744915515302ull, 5443978016139833224ull}},
+{{5164160392052264408ull, 13198116547318574144ull,
+ 16395689681144394128ull, 6804972520174791530ull}},
+{{6455200490065330510ull, 16497645684148217680ull,
+ 11271240064575716852ull, 8506215650218489413ull}},
+{{4034500306290831569ull, 1087656515737860242ull,
+ 9350368049573516985ull, 5316384781386555883ull}},
+{{14266497419718315269ull, 5971256663099713206ull,
+ 7076274043539508327ull, 6645480976733194854ull}},
+{{8609749737793118278ull, 2852384810447253604ull,
+ 18068714591279161217ull, 8306851220916493567ull}},
+{{14604465622975474732ull, 13311955552598003262ull,
+ 18210475647190557616ull, 5191782013072808479ull}},
+{{9032209991864567607ull, 16639944440747504078ull,
+ 18151408540560809116ull, 6489727516341010599ull}},
+{{2066890452975933701ull, 2353186477224828482ull,
+ 18077574657273623492ull, 8112159395426263249ull}},
+{{5903492551537346467ull, 10694113585120293609ull,
+ 4380955133154932826ull, 5070099622141414531ull}},
+{{11991051707849070988ull, 4144269944545591203ull,
+ 864507898016278129ull, 6337624527676768164ull}},
+{{10377128616383950831ull, 9792023449109376908ull,
+ 1080634872520347661ull, 7922030659595960205ull}},
+{{15709077422094745077ull, 8425857664907054519ull,
+ 2981239804538911240ull, 4951269162247475128ull}},
+{{15024660759191043442ull, 10532322081133818149ull,
+ 3726549755673639050ull, 6189086452809343910ull}},
+{{4945767893706640591ull, 3942030564562496879ull,
+ 13881559231446824621ull, 7736358066011679887ull}},
+{{10008633961207732226ull, 4769612112065254501ull,
+ 15593503547295347244ull, 4835223791257299929ull}},
+{{17122478469937053186ull, 5962015140081568126ull,
+ 5656821378837020343ull, 6044029739071624912ull}},
+{{12179726050566540674ull, 2840832906674572254ull,
+ 7071026723546275429ull, 7555037173839531140ull}},
+{{3000642763176700018ull, 4081363575885301611ull,
+ 13642763739071197951ull, 4721898233649706962ull}},
+{{17585861509253038734ull, 490018451429239109ull,
+ 7830082636984221631ull, 5902372792062133703ull}},
+{{8147268831284134705ull, 14447581119568712599ull,
+ 5175917277802889134ull, 7377965990077667129ull}},
+{{5572400020677780477ull, 8836104362606114941ull,
+ 11081582615680999322ull, 9222457487597083911ull}},
+{{5788593022137306750ull, 10134251245056209742ull,
+ 13843518162441706432ull, 5764035929748177444ull}},
+{{16459113314526409246ull, 12667814056320262177ull,
+ 17304397703052133040ull, 7205044912185221805ull}},
+{{6738833587875847845ull, 15834767570400327722ull,
+ 7795439073533002588ull, 9006306140231527257ull}},
+{{8823457010849792808ull, 673357694645429018ull,
+ 16401364467026596378ull, 5628941337644704535ull}},
+{{1805949226707465201ull, 10065069155161562081ull,
+ 15890019565355857568ull, 7036176672055880669ull}},
+{{6869122551811719405ull, 12581336443951952601ull,
+ 6027466401412658248ull, 8795220840069850837ull}},
+{{15822416640950794389ull, 7863335277469970375ull,
+ 6073009510096605357ull, 5497013025043656773ull}},
+{{15166334782761105082ull, 14440855115264850873ull,
+ 12202947906048144600ull, 6871266281304570966ull}},
+{{5122860423169217640ull, 18051068894081063592ull,
+ 6030312845705404942ull, 8589082851630713708ull}},
+{{3201787764480761025ull, 6670232040373276841ull,
+ 12992317565420653897ull, 5368176782269196067ull}},
+{{8613920724028339185ull, 12949476068893983955ull,
+ 11628710938348429467ull, 6710220977836495084ull}},
+{{6155714886608036077ull, 11575159067690092040ull,
+ 14535888672935536834ull, 8387776222295618855ull}},
+{{3847321804130022549ull, 11846160435733695429ull,
+ 16002459448225792377ull, 5242360138934761784ull}},
+{{9420838273589916090ull, 972642489384955574ull, 1556330236572688856ull,
+ 6552950173668452231ull}},
+{{2552675805132619304ull, 1215803111731194468ull,
+ 15780470850998024782ull, 8191187717085565288ull}},
+{{10818794415062662873ull, 14594935000114160254ull,
+ 9862794281873765488ull, 5119492323178478305ull}},
+{{4300120981973552783ull, 18243668750142700318ull,
+ 16940178870769594764ull, 6399365403973097881ull}},
+{{14598523264321716787ull, 4357841863968823781ull,
+ 7340165533179829744ull, 7999206754966372352ull}},
+{{11429920049414766944ull, 2723651164980514863ull,
+ 4587603458237393590ull, 4999504221853982720ull}},
+{{9675714043341070776ull, 12627935993080419387ull,
+ 5734504322796741987ull, 6249380277317478400ull}},
+{{7482956535748950566ull, 11173233972923136330ull,
+ 7168130403495927484ull, 7811725346646848000ull}},
+{{9288533853270482008ull, 16206643269931736014ull,
+ 4480081502184954677ull, 4882328341654280000ull}},
+{{2387295279733326702ull, 6423246032132506306ull,
+ 5600101877731193347ull, 6102910427067850000ull}},
+{{12207491136521434185ull, 3417371521738244978ull,
+ 7000127347163991684ull, 7628638033834812500ull}},
+{{12241367978753284270ull, 11359229237941178919ull,
+ 13598451628832270610ull, 4767898771146757812ull}},
+{{10690023955014217433ull, 4975664510571697841ull,
+ 16998064536040338263ull, 5959873463933447265ull}},
+{{17974215962195159695ull, 1607894619787234397ull,
+ 7412522614768259117ull, 7449841829916809082ull}},
+{{13539727985585668762ull, 3310777146580715450ull,
+ 9244512652657549852ull, 4656151143698005676ull}},
+{{7701287945127310144ull, 4138471433225894313ull,
+ 11555640815821937315ull, 5820188929622507095ull}},
+{{14238295949836525584ull, 561403273104979987ull,
+ 9832865001350033740ull, 7275236162028133869ull}},
+{{13186183918868269076ull, 701754091381224984ull,
+ 16902767270114930079ull, 9094045202535167336ull}},
+{{8241364949292668173ull, 7356125334754347471ull,
+ 10564229543821831299ull, 5683778251584479585ull}},
+{{5690020168188447312ull, 4583470650015546435ull,
+ 17816972948204677028ull, 7104722814480599481ull}},
+{{2500839191808171235ull, 5729338312519433044ull,
+ 8436158129973682573ull, 8880903518100749352ull}},
+{{10786396531734882830ull, 5886679454538339604ull,
+ 5272598831233551608ull, 5550564698812968345ull}},
+{{13482995664668603538ull, 7358349318172924505ull,
+ 11202434557469327414ull, 6938205873516210431ull}},
+{{3018686525553590710ull, 18421308684570931440ull,
+ 9391357178409271363ull, 8672757341895263039ull}},
+{{1886679078470994194ull, 9207474918643138198ull,
+ 12787127264146876458ull, 5420473338684539399ull}},
+{{11581720884943518550ull, 2285971611449146939ull,
+ 11372223061756207669ull, 6775591673355674249ull}},
+{{9865465087752010284ull, 7469150532738821578ull, 380220771913095874ull,
+ 8469489591694592812ull}},
+{{10777601698272394332ull, 9279905101389151390ull,
+ 9461010019300460729ull, 5293430994809120507ull}},
+{{4248630085985717106ull, 16211567395163827142ull,
+ 7214576505698188007ull, 6616788743511400634ull}},
+{{14534159644336922191ull, 15652773225527396023ull,
+ 18241592668977510817ull, 8270985929389250792ull}},
+{{16001378805351658225ull, 2865454238313540658ull,
+ 11400995418110944261ull, 5169366205868281745ull}},
+{{10778351469834796974ull, 8193503816319313727ull,
+ 416186217356516614ull, 6461707757335352182ull}},
+{{8861253318866108313ull, 1018507733544366351ull,
+ 9743604808550421576ull, 8077134696669190227ull}},
+{{12455812351932399552ull, 636567333465228969ull,
+ 3783909996130319533ull, 5048209185418243892ull}},
+{{1734707384633335728ull, 5407395185258924116ull,
+ 4729887495162899416ull, 6310261481772804865ull}},
+{{2168384230791669659ull, 6759243981573655145ull,
+ 10524045387381012174ull, 7887826852216006081ull}},
+{{12884455190313263297ull, 18059585543765698177ull,
+ 18106743413181602368ull, 4929891782635003800ull}},
+{{2270510932609415409ull, 4127737855997571106ull,
+ 4186685192767451345ull, 6162364728293754751ull}},
+{{12061510702616545070ull, 9771358338424351786ull,
+ 621670472531926277ull, 7702955910367193439ull}},
+{{12150130207562728573ull, 8412941970728913818ull,
+ 7306073072973535779ull, 4814347443979495899ull}},
+{{5964290722598634908ull, 5904491444983754369ull,
+ 4520905322789531820ull, 6017934304974369874ull}},
+{{12067049421675681539ull, 7380614306229692961ull,
+ 14874503690341690583ull, 7522417881217962342ull}},
+{{624376860906219106ull, 11530412969034639957ull,
+ 4684878788036168710ull, 4701511175761226464ull}},
+{{5392157094560161786ull, 5189644174438524138ull,
+ 5856098485045210888ull, 5876888969701533080ull}},
+{{15963568405054978041ull, 6487055218048155172ull,
+ 7320123106306513610ull, 7346111212126916350ull}},
+{{1507716432609170935ull, 17332191059414969774ull,
+ 18373525919737917820ull, 9182639015158645437ull}},
+{{14777380825662895546ull, 1609247375279580300ull,
+ 13789296709049892590ull, 5739149384474153398ull}},
+{{24981958369067817ull, 11234931255954251184ull, 8013248849457589929ull,
+ 7173936730592691748ull}},
+{{31227447961334771ull, 208606014660650268ull, 10016561061821987412ull,
+ 8967420913240864685ull}},
+{{9242889191830610040ull, 9353750796017682225ull,
+ 8566193672852436084ull, 5604638070775540428ull}},
+{{16165297508215650454ull, 11692188495022102781ull,
+ 10707742091065545105ull, 7005797588469425535ull}},
+{{6371563829987399355ull, 780177563495464765ull, 8772991595404543478ull,
+ 8757246985586781919ull}},
+{{6288070402955818549ull, 14322669032466829190ull,
+ 12400648774768921529ull, 5473279365991738699ull}},
+{{17083460040549548994ull, 4068278235301372775ull,
+ 10889124950033764008ull, 6841599207489673374ull}},
+{{16742639032259548339ull, 5085347794126715969ull,
+ 4388034150687429202ull, 8551999009362091718ull}},
+{{3546620367521135856ull, 7790028389756585385ull,
+ 16577579399461806963ull, 5344999380851307323ull}},
+{{9044961477828807724ull, 5125849468768343827ull,
+ 16110288230899870800ull, 6681249226064134154ull}},
+{{6694515828858621751ull, 6407311835960429784ull,
+ 10914488251770062692ull, 8351561532580167693ull}},
+{{4184072393036638594ull, 13227941934330044423ull,
+ 9127398166569983134ull, 5219725957862604808ull}},
+{{618404472868410339ull, 7311555381057779721ull,
+ 11409247708212478918ull, 6524657447328256010ull}},
+{{5384691609512900827ull, 18362816263177000459ull,
+ 5038187598410822839ull, 8155821809160320013ull}},
+{{1059589246731869065ull, 18394289192126707143ull,
+ 5454710258220458226ull, 5097388630725200008ull}},
+{{15159544613697000043ull, 13769489453303608120ull,
+ 6818387822775572783ull, 6371735788406500010ull}},
+{{502686693411698438ull, 12600175798202122247ull,
+ 17746356815324241787ull, 7964669735508125012ull}},
+{{7231708211023393380ull, 5569266864662632452ull,
+ 1868100972722875309ull, 4977918584692578133ull}},
+{{9039635263779241725ull, 11573269599255678469ull,
+ 6946812234330982040ull, 6222398230865722666ull}},
+{{15911230098151440060ull, 14466586999069598086ull,
+ 17906887329768503358ull, 7777997788582153332ull}},
+{{5332832792917262134ull, 4429930855991110900ull,
+ 1968432544250538791ull, 4861248617863845833ull}},
+{{6666040991146577667ull, 925727551561500721ull, 7072226698740561393ull,
+ 6076560772329807291ull}},
+{{12944237257360609988ull, 5768845457879263805ull,
+ 4228597354998313837ull, 7595700965412259114ull}},
+{{10395991295064075194ull, 5911371420388233830ull,
+ 7254559365301334052ull, 4747313103382661946ull}},
+{{3771617081975318185ull, 7389214275485292288ull,
+ 18291571243481443373ull, 5934141379228327432ull}},
+{{4714521352469147731ull, 13848203862784003264ull,
+ 4417719980642252600ull, 7417676724035409291ull}},
+{{2946575845293217332ull, 8655127414240002040ull, 455231978687713923ull,
+ 4636047952522130807ull}},
+{{3683219806616521665ull, 6207223249372614646ull,
+ 14404098028641806116ull, 5795059940652663508ull}},
+{{13827396795125427889ull, 7759029061715768307ull,
+ 18005122535802257645ull, 7243824925815829385ull}},
+{{12672559975479396957ull, 14310472345572098288ull,
+ 8671345114470658344ull, 9054781157269786732ull}},
+{{7920349984674623099ull, 8944045215982561430ull,
+ 14642962733398937273ull, 5659238223293616707ull}},
+{{677065443988503065ull, 15791742538405589692ull,
+ 13692017398321283687ull, 7074047779117020884ull}},
+{{846331804985628831ull, 15127992154579599211ull,
+ 17115021747901604609ull, 8842559723896276105ull}},
+{{16669858442611875684ull, 2537466068971167650ull,
+ 3779359564797421025ull, 5526599827435172566ull}},
+{{11613951016410068796ull, 7783518604641347467ull,
+ 13947571492851552089ull, 6908249784293965707ull}},
+{{9905752752085198091ull, 14341084274229072238ull,
+ 12822778347637052207ull, 8635312230367457134ull}},
+{{1579409451625860903ull, 15880706699034252005ull,
+ 3402550448845769725ull, 5397070143979660709ull}},
+{{6585947832959714033ull, 6015825318510651294ull,
+ 8864874079484600061ull, 6746337679974575886ull}},
+{{17455806828054418349ull, 12131467666565702021ull,
+ 1857720562500974268ull, 8432922099968219858ull}},
+{{13215722276747705420ull, 16805539328458339571ull,
+ 5772761369990496821ull, 5270576312480137411ull}},
+{{11907966827507243871ull, 7171866105290760752ull,
+ 2604265694060733123ull, 6588220390600171764ull}},
+{{14884958534384054839ull, 4353146613186063036ull,
+ 3255332117575916404ull, 8235275488250214705ull}},
+{{79727047135258467ull, 11944088670096065206ull,
+ 13563797619553417512ull, 5147047180156384190ull}},
+{{9323030845773848891ull, 14930110837620081507ull,
+ 7731374987586996082ull, 6433808975195480238ull}},
+{{7042102538789923210ull, 9439266510170326076ull, 440846697628969295ull,
+ 8042261218994350298ull}},
+{{13624686123598477814ull, 12817070596497535653ull,
+ 4887215204445493713ull, 5026413261871468936ull}},
+{{3195799599215933556ull, 2186280190339755855ull,
+ 6109019005556867142ull, 6283016577339336170ull}},
+{{17829807554302080657ull, 11956222274779470626ull,
+ 16859645793800859735ull, 7853770721674170212ull}},
+{{15755315739866188315ull, 14390167949378250997ull,
+ 1313906584270761526ull, 4908606701046356383ull}},
+{{5859086619550571681ull, 8764337899868037939ull,
+ 15477441285620615620ull, 6135758376307945478ull}},
+{{2712172256010826697ull, 10955422374835047424ull,
+ 10123429570170993717ull, 7669697970384931848ull}},
+{{1695107660006766686ull, 9152981993485598592ull,
+ 6327143481356871073ull, 4793561231490582405ull}},
+{{2118884575008458357ull, 16052913510284386144ull,
+ 12520615370123476745ull, 5991951539363228006ull}},
+{{2648605718760572947ull, 6231083832573318968ull,
+ 6427397175799570124ull, 7489939424204035008ull}},
+{{1655378574225358092ull, 13117799432213100163ull,
+ 4017123234874731327ull, 4681212140127521880ull}},
+{{15904281273063861327ull, 11785563271838987299ull,
+ 5021404043593414159ull, 5851515175159402350ull}},
+{{15268665572902438754ull, 10120268071371346220ull,
+ 15500127091346543507ull, 7314393968949252937ull}},
+{{639087892418496827ull, 8038649070786794872ull, 5540100808901015672ull,
+ 9142992461186566172ull}},
+{{399429932761560517ull, 5024155669241746795ull,
+ 12685935042417910603ull, 5714370288241603857ull}},
+{{14334345471234114358ull, 1668508568124795589ull,
+ 2022360747740224542ull, 7142962860302004822ull}},
+{{4082873783760479235ull, 11309007747010770295ull,
+ 11751322971530056485ull, 8928703575377506027ull}},
+{{9469325142491381378ull, 9373972851095425386ull,
+ 5038733847992591351ull, 5580439734610941267ull}},
+{{2613284391259450915ull, 7105780045441893829ull,
+ 1686731291563351285ull, 6975549668263676584ull}},
+{{7878291507501701547ull, 13493911075229755190ull,
+ 2108414114454189106ull, 8719437085329595730ull}},
+{{312246173761175563ull, 13045380440445984898ull,
+ 5929444839961256095ull, 5449648178330997331ull}},
+{{9613679754056245262ull, 11695039532130093218ull,
+ 2800120031524182215ull, 6812060222913746664ull}},
+{{2793727655715530769ull, 10007113396735228619ull,
+ 3500150039405227769ull, 8515075278642183330ull}},
+{{17886980849318064395ull, 17783660919027987646ull,
+ 6799279793055655259ull, 5321922049151364581ull}},
+{{13135354024792804685ull, 17617890130357596654ull,
+ 13110785759746956978ull, 6652402561439205726ull}},
+{{7195820494136230049ull, 12798990626092220010ull,
+ 7165110162828920415ull, 8315503201799007158ull}},
+{{9109073827262531685ull, 14916898168948719362ull,
+ 18313251907050238971ull, 5197189501124379473ull}},
+{{2162970247223388798ull, 14034436692758511299ull,
+ 9056506828530635002ull, 6496486876405474342ull}},
+{{16538770864311399709ull, 8319673829093363315ull,
+ 2097261498808517945ull, 8120608595506842928ull}},
+{{8030888780980930866ull, 16729011189251821832ull,
+ 1310788436755323715ull, 5075380372191776830ull}},
+{{10038610976226163583ull, 16299577968137389386ull,
+ 10861857582798930452ull, 6344225465239721037ull}},
+{{3324891683427928670ull, 1927728386462185117ull,
+ 18189007996926050970ull, 7930281831549651296ull}},
+{{4383900311356149371ull, 5816516259966253602ull,
+ 11368129998078781856ull, 4956426144718532060ull}},
+{{14703247426049962522ull, 7270645324957817002ull,
+ 14210162497598477320ull, 6195532680898165075ull}},
+{{9155687245707677344ull, 9088306656197271253ull,
+ 13151017103570708746ull, 7744415851122706344ull}},
+{{8028147537780992292ull, 10291877678550682437ull,
+ 8219385689731692966ull, 4840259906951691465ull}},
+{{14646870440653628269ull, 3641475061333577238ull,
+ 14885918130592004112ull, 6050324883689614331ull}},
+{{9085216013962259528ull, 4551843826666971548ull,
+ 13995711644812617236ull, 7562906104612017914ull}},
+{{14901632045581188013ull, 12068274428521633025ull,
+ 13359005796435273676ull, 4726816315382511196ull}},
+{{4791982001694321305ull, 15085343035652041282ull,
+ 16698757245544092095ull, 5908520394228138995ull}},
+{{15213349538972677439ull, 14244992776137663698ull,
+ 16261760538502727215ull, 7385650492785173744ull}},
+{{14120029480285311303ull, 15820649512727121667ull,
+ 10163600336564204509ull, 4616031557990733590ull}},
+{{13038350831929251225ull, 5940753835626738372ull,
+ 3481128383850479829ull, 5770039447488416988ull}},
+{{16297938539911564031ull, 12037628312960810869ull,
+ 4351410479813099786ull, 7212549309360521235ull}},
+{{6537365119607291327ull, 5823663354346237779ull, 827577081338986829ull,
+ 9015686636700651544ull}},
+{{1780010190540863127ull, 5945632605680092564ull, 517235675836866768ull,
+ 5634804147937907215ull}},
+{{2225012738176078909ull, 7432040757100115705ull,
+ 14481602650078247172ull, 7043505184922384018ull}},
+{{7392951941147486540ull, 9290050946375144631ull,
+ 8878631275743033157ull, 8804381481152980023ull}},
+{{11538123990858260944ull, 8112124850698159346ull,
+ 12466673574980477579ull, 5502738425720612514ull}},
+{{5199282951718050372ull, 5528470044945311279ull,
+ 6359969931870821166ull, 6878423032150765643ull}},
+{{1887417671220175061ull, 16133959593036414907ull,
+ 3338276396411138553ull, 8598028790188457054ull}},
+{{17320537109008467077ull, 3166195718006677460ull,
+ 15921480803039125308ull, 5373767993867785658ull}},
+{{3203927312551032230ull, 3957744647508346826ull,
+ 10678478966944130827ull, 6717209992334732073ull}},
+{{13228281177543566096ull, 335494790958045628ull,
+ 17959784727107551438ull, 8396512490418415091ull}},
+{{17491047772819504618ull, 14044742299630942229ull,
+ 8919022445228525696ull, 5247820306511509432ull}},
+{{8028751660742217060ull, 17555927874538677787ull,
+ 11148778056535657120ull, 6559775383139386790ull}},
+{{5424253557500383421ull, 3498165769463795618ull,
+ 4712600533814795593ull, 8199719228924233488ull}},
+{{8001844491865127543ull, 13715568651983342021ull,
+ 2945375333634247245ull, 5124824518077645930ull}},
+{{14613991633258797332ull, 3309402759697013814ull,
+ 12905091203897584865ull, 6406030647597057412ull}},
+{{9044117504718720857ull, 8748439468048655172ull,
+ 16131364004871981081ull, 8007538309496321765ull}},
+{{14875945477303976344ull, 16996989713598879242ull,
+ 12387945512258682127ull, 5004711443435201103ull}},
+{{9371559809775194622ull, 16634551123571211149ull,
+ 10873245871895964755ull, 6255889304294001379ull}},
+{{16326135780646381181ull, 16181502886036626032ull,
+ 8979871321442568040ull, 7819861630367501724ull}},
+{{10203834862903988238ull, 10113439303772891270ull,
+ 14835791612756380833ull, 4887413518979688577ull}},
+{{3531421541775209490ull, 17253485148143501992ull,
+ 4709681460663312329ull, 6109266898724610722ull}},
+{{4414276927219011862ull, 7731798379897213778ull,
+ 15110473862683916220ull, 7636583623405763402ull}},
+{{7370609097939270318ull, 14055746024290534419ull,
+ 14055732182604835541ull, 4772864764628602126ull}},
+{{4601575353996699993ull, 3734624475081004312ull,
+ 8346293191401268619ull, 5966080955785752658ull}},
+{{5751969192495874991ull, 56594575423867486ull, 1209494452396809966ull,
+ 7457601194732190823ull}},
+{{17430038800592085582ull, 13870429664922080890ull,
+ 7673463060389088084ull, 4661000746707619264ull}},
+{{12564176463885331169ull, 17338037081152601113ull,
+ 9591828825486360105ull, 5826250933384524080ull}},
+{{1870162524574500249ull, 7837488296158587680ull,
+ 11989786031857950132ull, 7282813666730655100ull}},
+{{2337703155718125312ull, 9796860370198234600ull,
+ 14987232539822437665ull, 9103517083413318875ull}},
+{{1461064472323828320ull, 17652252777442366385ull,
+ 7061177328175329588ull, 5689698177133324297ull}},
+{{6438016608832173304ull, 3618571898093406365ull,
+ 13438157678646549890ull, 7112122721416655371ull}},
+{{12659206779467604534ull, 13746586909471533764ull,
+ 12186011079880799458ull, 8890153401770819214ull}},
+{{17135376274022028642ull, 13203302836847096506ull,
+ 3004570906498111757ull, 5556345876106762009ull}},
+{{12195848305672759994ull, 2669070490776706921ull,
+ 8367399651550027601ull, 6945432345133452511ull}},
+{{1409752326808786280ull, 7948024131898271556ull,
+ 5847563546010146597ull, 8681790431416815639ull}},
+{{10104467241110267233ull, 7273358091650113674ull,
+ 10572256243897423479ull, 5426119019635509774ull}},
+{{3407212014533058234ull, 4480011596135254189ull,
+ 3991948268017003541ull, 6782648774544387218ull}},
+{{8870701036593710696ull, 10211700513596455640ull,
+ 14213307371876030234ull, 8478310968180484022ull}},
+{{5544188147871069185ull, 10993998839425172679ull,
+ 4271631088995130992ull, 5298944355112802514ull}},
+{{2318549166411448577ull, 13742498549281465849ull,
+ 14562910898098689548ull, 6623680443891003142ull}},
+{{7509872476441698625ull, 17178123186601832311ull,
+ 8980266585768586127ull, 8279600554863753928ull}},
+{{11611199325417143497ull, 17653856019267227050ull,
+ 5612666616105366329ull, 5174750346789846205ull}},
+{{5290627119916653563ull, 8232261968801870101ull,
+ 11627519288559095816ull, 6468437933487307756ull}},
+{{11224969918323204858ull, 10290327461002337626ull,
+ 14534399110698869770ull, 8085547416859134695ull}},
+{{11627292217379390940ull, 11043140681553848920ull,
+ 16001528471827875462ull, 5053467135536959184ull}},
+{{14534115271724238675ull, 4580553815087535342ull,
+ 1555166516075292712ull, 6316833919421198981ull}},
+{{8944272052800522536ull, 5725692268859419178ull,
+ 6555644163521503794ull, 7896042399276498726ull}},
+{{10201856051427714489ull, 8190243686464524890ull,
+ 17932335657483103583ull, 4935026499547811703ull}},
+{{3528948027429867303ull, 5626118589653268209ull,
+ 17803733553426491575ull, 6168783124434764629ull}},
+{{9022871052714722033ull, 2420962218639197357ull,
+ 8419608886500950757ull, 7710978905543455787ull}},
+{{7945137417160395223ull, 3818944395863192300ull,
+ 2956412544849400271ull, 4819361815964659867ull}},
+{{9931421771450494029ull, 161994476401602471ull,
+ 17530573736343914051ull, 6024202269955824833ull}},
+{{7802591195885729632ull, 14037551150784166801ull,
+ 8078159115147728851ull, 7530252837444781042ull}},
+{{16405834543497050780ull, 6467626460026410298ull,
+ 9660535465394718436ull, 4706408023402988151ull}},
+{{11283921142516537667ull, 8084533075033012873ull,
+ 7463983313316010141ull, 5883010029253735189ull}},
+{{269843372863508371ull, 14717352362218653996ull,
+ 13941665160072400580ull, 7353762536567168986ull}},
+{{337304216079385464ull, 18396690452773317495ull,
+ 8203709413235724917ull, 9192203170708961233ull}},
+{{7128344162690697771ull, 13803774542197017386ull,
+ 16656533429340797833ull, 5745126981693100770ull}},
+{{18133802240218148022ull, 3419660122464108020ull,
+ 11597294749821221484ull, 7181408727116375963ull}},
+{{4220508726563133411ull, 4274575153080135026ull,
+ 9884932418849138951ull, 8976760908895469954ull}},
+{{7249503972529346286ull, 9589138498316166247ull,
+ 10789768780208099748ull, 5610475568059668721ull}},
+{{4450193947234294954ull, 11986423122895207809ull,
+ 18098896993687512589ull, 7013094460074585901ull}},
+{{10174428452470256596ull, 1147970848336846049ull,
+ 8788563186827227025ull, 8766368075093232377ull}},
+{{17888232828862380133ull, 12246696826278998540ull,
+ 17022067037835486650ull, 5478980046933270235ull}},
+{{3913546962368423550ull, 6084998995993972368ull,
+ 16665897778866970409ull, 6848725058666587794ull}},
+{{4891933702960529437ull, 12217934763419853364ull,
+ 11609000186728937203ull, 8560906323333234743ull}},
+{{12280830601205106706ull, 5330366217923714400ull,
+ 14173154144346667608ull, 5350566452083271714ull}},
+{{15351038251506383383ull, 6662957772404643000ull,
+ 8493070643578558702ull, 6688208065104089643ull}},
+{{742053740673427612ull, 17552069252360579559ull,
+ 6004652286045810473ull, 8360260081380112054ull}},
+{{7381312615561974114ull, 4052514255084280368ull,
+ 17587965734060795258ull, 5225162550862570033ull}},
+{{9226640769452467642ull, 14289014855710126268ull,
+ 8149899112293830360ull, 6531453188578212542ull}},
+{{11533300961815584553ull, 17861268569637657835ull,
+ 964001853512512142ull, 8164316485722765678ull}},
+{{4902470091921046394ull, 6551606837596148243ull,
+ 14437559213727483801ull, 5102697803576728548ull}},
+{{1516401596473920088ull, 12801194565422573208ull,
+ 18046949017159354751ull, 6378372254470910685ull}},
+{{1895501995592400110ull, 11389807188350828606ull,
+ 8723628216167029727ull, 7972965318088638357ull}},
+{{15019746802527413781ull, 14036158520360349734ull,
+ 7758110644318087531ull, 4983103323805398973ull}},
+{{9551311466304491418ull, 12933512132023049264ull,
+ 14309324323824997318ull, 6228879154756748716ull}},
+{{11939139332880614272ull, 6943518128174035772ull,
+ 17886655404781246648ull, 7786098943445935895ull}},
+{{16685334119905159728ull, 4339698830108772357ull,
+ 18096688655629361011ull, 4866311839653709934ull}},
+{{7021609594599285948ull, 812937519208577543ull,
+ 13397488782681925456ull, 6082889799567137418ull}},
+{{4165325974821719531ull, 1016171899010721929ull,
+ 7523488941497631012ull, 7603612249458921773ull}},
+{{14132543780332044467ull, 9858479473736477013ull,
+ 7008023597649713334ull, 4752257655911826108ull}},
+{{3830621670132891872ull, 3099727305315820459ull,
+ 8760029497062141668ull, 5940322069889782635ull}},
+{{176591069238726936ull, 3874659131644775574ull, 6338350852900289181ull,
+ 7425402587362228294ull}},
+{{13945427473556368047ull, 4727504966491678685ull,
+ 17796527338344844450ull, 4640876617101392683ull}},
+{{3596726286663296347ull, 15132753244969374165ull,
+ 17633973154503667658ull, 5801095771376740854ull}},
+{{9107593876756508337ull, 9692569519356941898ull,
+ 12819094406274808765ull, 7251369714220926068ull}},
+{{2161120309090859613ull, 16727397917623565277ull,
+ 16023868007843510956ull, 9064212142776157585ull}},
+{{3656543202395481210ull, 1231251661659952490ull,
+ 3097388477261112492ull, 5665132589235098491ull}},
+{{13794051039849127321ull, 1539064577074940612ull,
+ 17706793651858554327ull, 7081415736543873113ull}},
+{{17242563799811409151ull, 15758888776625839477ull,
+ 8298434009541029196ull, 8851769670679841392ull}},
+{{13082445384095824672ull, 625933448536373865ull,
+ 5186521255963143248ull, 5532356044174900870ull}},
+{{2517998674837617127ull, 782416810670467332ull,
+ 15706523606808704868ull, 6915445055218626087ull}},
+{{3147498343547021409ull, 978021013338084165ull,
+ 15021468490083493181ull, 8644306319023282609ull}},
+{{4273029473930582333ull, 2917106142549996555ull,
+ 2470888778661101382ull, 5402691449389551631ull}},
+{{729600823985840012ull, 12869754715042271502ull,
+ 16923669028608540439ull, 6753364311736939538ull}},
+{{10135373066837075823ull, 11475507375375451473ull,
+ 11931214248905899741ull, 8441705389671174423ull}},
+{{17863823212841642149ull, 9478035118823351122ull,
+ 14374537933207269194ull, 5276065868544484014ull}},
+{{13106406979197276879ull, 2624171861674413095ull,
+ 8744800379654310685ull, 6595082335680605018ull}},
+{{11771322705569208194ull, 7891900845520404273ull,
+ 1707628437713112548ull, 8243852919600756273ull}},
+{{439547663339673266ull, 14155810065305028479ull,
+ 12596482819639165102ull, 5152408074750472670ull}},
+{{14384492634456755294ull, 8471390544776509790ull,
+ 6522231487694180570ull, 6440510093438090838ull}},
+{{8757243756216168309ull, 1365866144115861430ull,
+ 17376161396472501521ull, 8050637616797613547ull}},
+{{861591329207717289ull, 12382881386140883154ull,
+ 8554257863581619498ull, 5031648510498508467ull}},
+{{10300361198364422420ull, 6255229695821328134ull,
+ 6081136311049636469ull, 6289560638123135584ull}},
+{{3652079461100752216ull, 12430723138204048072ull,
+ 7601420388812045586ull, 7861950797653919480ull}},
+{{2282549663187970135ull, 12380887979804917949ull,
+ 4750887743007528491ull, 4913719248533699675ull}},
+{{7464873097412350573ull, 10864423956328759532ull,
+ 1326923660332022710ull, 6142149060667124594ull}},
+{{9331091371765438216ull, 4357157908556173607ull,
+ 10882026612269804196ull, 7677686325833905742ull}},
+{{12749461134994480741ull, 11946595729702384312ull,
+ 2189580614241239718ull, 4798553953646191089ull}},
+{{15936826418743100927ull, 5709872625273204582ull,
+ 7348661786228937552ull, 5998192442057738861ull}},
+{{10697660986574100350ull, 7137340781591505728ull,
+ 13797513251213559844ull, 7497740552572173576ull}},
+{{6686038116608812719ull, 13684210025349466888ull,
+ 8623445782008474902ull, 4686087845357608485ull}},
+{{8357547645761015899ull, 7881890494832057802ull,
+ 15390993245937981532ull, 5857609806697010606ull}},
+{{1223562520346494065ull, 9852363118540072253ull,
+ 10015369520567701107ull, 7322012258371263258ull}},
+{{6141139168860505485ull, 7703767879747702412ull,
+ 3295839863854850576ull, 9152515322964079073ull}},
+{{13061584017392591737ull, 4814854924842314007ull,
+ 13589114960977751370ull, 5720322076852549420ull}},
+{{11715294003313351767ull, 15241940692907668317ull,
+ 16986393701222189212ull, 7150402596065686775ull}},
+{{809059448859525996ull, 605681792425033781ull, 16621306108100348612ull,
+ 8938003245082108469ull}},
+{{2811505164750897700ull, 9601923157120421921ull,
+ 12694159326776411834ull, 5586252028176317793ull}},
+{{8126067474366010029ull, 2779031909545751593ull,
+ 2032641103188351081ull, 6982815035220397242ull}},
+{{14769270361384900440ull, 8085475905359577395ull,
+ 11764173415840214659ull, 8728518794025496552ull}},
+{{6924950966651868823ull, 2747579431636041920ull,
+ 7352608384900134162ull, 5455324246265935345ull}},
+{{8656188708314836029ull, 12657846326399828208ull,
+ 13802446499552555606ull, 6819155307832419181ull}},
+{{10820235885393545036ull, 6598935871145009452ull,
+ 3418000069158530796ull, 8523944134790523977ull}},
+{{15986019465225741455ull, 13347706956320406715ull,
+ 13665465089292551507ull, 5327465084244077485ull}},
+{{15370838313104788915ull, 12072947676973120490ull,
+ 3246773306333525672ull, 6659331355305096857ull}},
+{{9990175854526210336ull, 15091184596216400613ull,
+ 8670152651344294994ull, 8324164194131371071ull}},
+{{8549702918292575412ull, 14043676391062638287ull,
+ 12336374434731266227ull, 5202602621332106919ull}},
+{{6075442629438331361ull, 12942909470400909955ull,
+ 10808782024986694880ull, 6503253276665133649ull}},
+{{2982617268370526297ull, 16178636838001137444ull,
+ 18122663549660756504ull, 8129066595831417061ull}},
+{{11087507829586354744ull, 10111648023750710902ull,
+ 13632507727751666767ull, 5080666622394635663ull}},
+{{4636012750128167622ull, 8027874011261000724ull,
+ 12428948641262195555ull, 6350833277993294579ull}},
+{{5795015937660209527ull, 5423156495648863001ull,
+ 10924499783150356540ull, 7938541597491618224ull}},
+{{15151100007106100715ull, 12612844846635315183ull,
+ 6827812364468972837ull, 4961588498432261390ull}},
+{{14327188990455237989ull, 1930998003011980267ull,
+ 17758137492440991855ull, 6201985623040326737ull}},
+{{13297300219641659582ull, 16248805559047139046ull,
+ 8362613810269076106ull, 7752482028800408422ull}},
+{{3699126618848649335ull, 14767189492831849808ull,
+ 614947612990784662ull, 4845301268000255264ull}}
+};
+
+static const UINT256 multipliers2_binary128[] =
+ { {{7710430832988809084ull, 13621041698348090301ull,
+ 15069458432386386555ull, 2958405588648567759ull}},
+{{14249724559663399259ull, 12414616104507724972ull,
+ 14225137022055595290ull, 3698006985810709699ull}},
+{{18129449886644400345ull, 12370821083744716011ull,
+ 6584867629571053104ull, 2311254366131693562ull}},
+{{18050126339878112527ull, 15463526354680895014ull,
+ 17454456573818592188ull, 2889067957664616952ull}},
+{{13339285887992864851ull, 882663869641567152ull,
+ 3371326643563688620ull, 3611334947080771191ull}},
+{{16674107359991081063ull, 1103329837051958940ull,
+ 18049216359736774487ull, 4514168683850963988ull}},
+{{1197945063139649857ull, 7607110175798556194ull,
+ 2057388187980708246ull, 2821355427406852493ull}},
+{{10720803365779338129ull, 285515682893419434ull,
+ 7183421253403273212ull, 3526694284258565616ull}},
+{{4177632170369396853ull, 356894603616774293ull, 8979276566754091515ull,
+ 4408367855323207020ull}},
+{{4916863115694566985ull, 16363960191756341597ull,
+ 14835419891076083004ull, 2755229909577004387ull}},
+{{10757764913045596635ull, 2008206165985875380ull,
+ 13932588845417715852ull, 3444037386971255484ull}},
+{{13447206141306995794ull, 2510257707482344225ull,
+ 17415736056772144815ull, 4305046733714069355ull}},
+{{1486974810675790516ull, 8486440094817546997ull,
+ 8578992026268896557ull, 2690654208571293347ull}},
+{{6470404531772126048ull, 15219736136949321650ull,
+ 6112054014408732792ull, 3363317760714116684ull}},
+{{17311377701569933368ull, 577926097477100446ull,
+ 7640067518010915991ull, 4204147200892645855ull}},
+{{6207925045053820451ull, 7278732838564269635ull,
+ 11692571226397904350ull, 2627592000557903659ull}},
+{{3148220287889887660ull, 18321788085060112852ull,
+ 10004028014569992533ull, 3284490000697379574ull}},
+{{3935275359862359575ull, 9067177051042977353ull,
+ 3281662981357714859ull, 4105612500871724468ull}},
+{{13988762145982444495ull, 3361142647688166893ull,
+ 11274411400203347595ull, 2566007813044827792ull}},
+{{3650894627195891906ull, 18036486364892372329ull,
+ 14093014250254184493ull, 3207509766306034740ull}},
+{{9175304302422252786ull, 8710549900833301699ull,
+ 17616267812817730617ull, 4009387207882543425ull}},
+{{3428722179800214040ull, 16973308734089283322ull,
+ 4092638355369999779ull, 2505867004926589641ull}},
+{{13509274761605043357ull, 16604949899184216248ull,
+ 9727483962639887628ull, 3132333756158237051ull}},
+{{16886593452006304197ull, 2309443300270718694ull,
+ 7547668934872471632ull, 3915417195197796314ull}},
+{{5942434889076552219ull, 1443402062669199184ull,
+ 9328979102722682674ull, 2447135746998622696ull}},
+{{7428043611345690274ull, 11027624615191274788ull,
+ 11661223878403353342ull, 3058919683748278370ull}},
+{{9285054514182112842ull, 4561158732134317677ull,
+ 5353157811149415870ull, 3823649604685347963ull}},
+{{8109002080577514479ull, 16685782262866112260ull,
+ 1039880622754690966ull, 2389781002928342477ull}},
+{{10136252600721893098ull, 11633855791727864517ull,
+ 5911536796870751612ull, 2987226253660428096ull}},
+{{17282001769329754276ull, 14542319739659830646ull,
+ 7389420996088439515ull, 3734032817075535120ull}},
+{{6189565087403708519ull, 6783106828073700202ull,
+ 4618388122555274697ull, 2333770510672209450ull}},
+{{16960328396109411457ull, 13090569553519513156ull,
+ 14996357190048869179ull, 2917213138340261812ull}},
+{{2753666421427212705ull, 11751525923472003542ull,
+ 298702413851534858ull, 3646516422925327266ull}},
+{{12665455063638791689ull, 5466035367485228619ull,
+ 9596750054169194381ull, 4558145528656659082ull}},
+{{5610066405560550854ull, 5722115113891961839ull,
+ 10609654802283134392ull, 2848840955410411926ull}},
+{{2400896988523300663ull, 7152643892364952299ull,
+ 4038696465999142182ull, 3561051194263014908ull}},
+{{16836179290936289540ull, 18164176902310966181ull,
+ 5048370582498927727ull, 4451313992828768635ull}},
+{{12828455066048874915ull, 18270139591585435719ull,
+ 849388604848135877ull, 2782071245517980397ull}},
+{{11423882814133705740ull, 9002616434199630937ull,
+ 5673421774487557751ull, 3477589056897475496ull}},
+{{444795462384968462ull, 6641584524322150768ull, 7091777218109447189ull,
+ 4346986321121844370ull}},
+{{277997163990605289ull, 6456833336915038182ull, 9044046779745792397ull,
+ 2716866450701152731ull}},
+{{9570868491843032419ull, 12682727689571185631ull,
+ 6693372456254852592ull, 3396083063376440914ull}},
+{{7351899596376402620ull, 15853409611963982039ull,
+ 17590087607173341548ull, 4245103829220551142ull}},
+{{11512466275376333494ull, 685008970622712966ull,
+ 6382118736055950564ull, 2653189893262844464ull}},
+{{5167210807365641059ull, 856261213278391208ull, 7977648420069938205ull,
+ 3316487366578555580ull}},
+{{6459013509207051324ull, 5682012535025376914ull,
+ 9972060525087422756ull, 4145609208223194475ull}},
+{{8648569461681794981ull, 12774629871245636379ull,
+ 3926694818965945270ull, 2591005755139496547ull}},
+{{6199025808674855823ull, 6744915302202269666ull, 296682505280043684ull,
+ 3238757193924370684ull}},
+{{16972154297698345586ull, 8431144127752837082ull,
+ 370853131600054605ull, 4048446492405463355ull}},
+{{15219282454488853896ull, 7575308089059217128ull,
+ 16372684271745891792ull, 2530279057753414596ull}},
+{{577358994401515753ull, 9469135111324021411ull, 2019111265972813124ull,
+ 3162848822191768246ull}},
+{{14556756798284058404ull, 11836418889155026763ull,
+ 11747261119320792213ull, 3953561027739710307ull}},
+{{6792129989713842550ull, 9703604814935585679ull,
+ 5036195190361801181ull, 2470975642337318942ull}},
+{{3878476468714915284ull, 16741192037096870003ull,
+ 15518616024807027284ull, 3088719552921648677ull}},
+{{236409567466256201ull, 2479745972661535888ull, 5563211975726620394ull,
+ 3860899441152060847ull}},
+{{147755979666410126ull, 6161527251340847834ull,
+ 10394536512470219602ull, 2413062150720038029ull}},
+{{9408067011437788465ull, 16925281101030835600ull,
+ 17604856659015162406ull, 3016327688400047536ull}},
+{{11760083764297235581ull, 11933229339433768692ull,
+ 3559326750059401392ull, 3770409610500059421ull}},
+{{16573424389540548046ull, 7458268337146105432ull,
+ 4530422228000819822ull, 2356506006562537138ull}},
+{{2270036413216133442ull, 99463384577855983ull, 14886399821855800586ull,
+ 2945632508203171422ull}},
+{{16672603571802330514ull, 9347701267577095786ull,
+ 9384627740464974924ull, 3682040635253964278ull}},
+{{11617382427898137335ull, 11684626584471369733ull,
+ 2507412638726442847ull, 4602550794067455348ull}},
+{{9566707026650029786ull, 14220420642935687939ull,
+ 10790504936058802587ull, 2876594246292159592ull}},
+{{7346697764885149329ull, 13163839785242222020ull,
+ 13488131170073503234ull, 3595742807865199490ull}},
+{{9183372206106436661ull, 7231427694698001717ull,
+ 7636791925737103235ull, 4494678509831499363ull}},
+{{8045450638030216865ull, 2213799299972557121ull,
+ 2467151944371995570ull, 2809174068644687102ull}},
+{{14668499315965158985ull, 11990621161820472209ull,
+ 12307311967319770270ull, 3511467585805858877ull}},
+{{4500566089674285020ull, 5764904415420814454ull,
+ 1549081903867549126ull, 4389334482257323597ull}},
+{{16647911861328591849ull, 17438123314920172745ull,
+ 3274019199130912155ull, 2743334051410827248ull}},
+{{6974831771378576100ull, 17185968125222828028ull,
+ 4092523998913640194ull, 3429167564263534060ull}},
+{{8718539714223220124ull, 12259088119673759227ull,
+ 5115654998642050243ull, 4286459455329417575ull}},
+{{3143244312175818626ull, 5356087065582405565ull,
+ 10114813401792363258ull, 2679037159580885984ull}},
+{{8540741408647161186ull, 15918480868832782764ull,
+ 12643516752240454072ull, 3348796449476107480ull}},
+{{10675926760808951483ull, 1451357012331426839ull,
+ 15804395940300567591ull, 4185995561845134350ull}},
+{{13589983253146676533ull, 7824627160348223630ull,
+ 5266061444260466840ull, 2616247226153208969ull}},
+{{7764107029578569858ull, 9780783950435279538ull,
+ 11194262823752971454ull, 3270309032691511211ull}},
+{{481761750118436514ull, 3002607901189323615ull, 9381142511263826414ull,
+ 4087886290864389014ull}},
+{{7218630121465104678ull, 15711687993525490971ull,
+ 1251528051112503604ull, 2554928931790243134ull}},
+{{4411601633403992943ull, 1192865918197312098ull,
+ 10787782100745405314ull, 3193661164737803917ull}},
+{{14737874078609766987ull, 10714454434601415930ull,
+ 18096413644359144546ull, 3992076455922254896ull}},
+{{13822857317558492271ull, 11308220040053272860ull,
+ 11310258527724465341ull, 2495047784951409310ull}},
+{{17278571646948115338ull, 300216994784427363ull,
+ 4914451122800805869ull, 3118809731189261638ull}},
+{{16986528540257756269ull, 4986957261907922108ull,
+ 15366435940355783144ull, 3898512163986577047ull}},
+{{1393208300806321860ull, 3116848288692451318ull,
+ 16521551490363446321ull, 2436570102491610654ull}},
+{{10964882412862678133ull, 8507746379292952051ull,
+ 11428567326099532093ull, 3045712628114513318ull}},
+{{9094416997650959762ull, 15246368992543577968ull,
+ 5062337120769639308ull, 3807140785143141648ull}},
+{{5684010623531849852ull, 305608583484960422ull, 3163960700481024568ull,
+ 2379462990714463530ull}},
+{{16328385316269588122ull, 382010729356200527ull,
+ 13178322912456056518ull, 2974328738393079412ull}},
+{{15798795626909597249ull, 9700885448550026467ull,
+ 16472903640570070647ull, 3717910922991349265ull}},
+{{7568404257604804329ull, 12980582432984848398ull,
+ 3378035747715212298ull, 2323694326869593291ull}},
+{{237133285151229603ull, 7002356004376284690ull,
+ 18057602739926179085ull, 2904617908586991613ull}},
+{{9519788643293812811ull, 13364631023897743766ull,
+ 8736945369625560144ull, 3630772385733739517ull}},
+{{2676363767262490206ull, 16705788779872179708ull,
+ 15532867730459338084ull, 4538465482167174396ull}},
+{{10896099391393832187ull, 1217745950565336509ull,
+ 484670294682310495ull, 2836540926354483998ull}},
+{{18231810257669678138ull, 15357240493488834348ull,
+ 9829209905207663926ull, 3545676157943104997ull}},
+{{4343018748377546056ull, 9973178580006267128ull,
+ 16898198399936967812ull, 4432095197428881246ull}},
+{{2714386717735966285ull, 15456608649358692763ull,
+ 5949687981533216978ull, 2770059498393050779ull}},
+{{17228041452452121568ull, 10097388774843590145ull,
+ 2825423958489133319ull, 3462574372991313474ull}},
+{{7699993760282988248ull, 8010049950127099778ull,
+ 12755151984966192457ull, 4328217966239141842ull}},
+{{9424182118604255559ull, 16535496264897907121ull,
+ 12583656009031258189ull, 2705136228899463651ull}},
+{{16391913666682707353ull, 6834312275840220189ull,
+ 11117883992861684833ull, 3381420286124329564ull}},
+{{6654834028071220479ull, 13154576363227663141ull,
+ 13897354991077106041ull, 4226775357655411955ull}},
+{{6465114276758206752ull, 1304081199376207607ull,
+ 6380003860209497324ull, 2641734598534632472ull}},
+{{3469706827520370535ull, 1630101499220259509ull,
+ 7975004825261871655ull, 3302168248168290590ull}},
+{{8948819552827851073ull, 15872684929307488098ull,
+ 745383994722563760ull, 4127710310210363238ull}},
+{{10204698238944794825ull, 9920428080817180061ull,
+ 14300923051983766062ull, 2579818943881477023ull}},
+{{17367558817108381435ull, 3177163064166699268ull,
+ 13264467796552319674ull, 3224773679851846279ull}},
+{{3262704447675925178ull, 13194825867063149894ull,
+ 11968898727263011688ull, 4030967099814807849ull}},
+{{15874248335079616948ull, 8246766166914468683ull,
+ 563032676898300449ull, 2519354437384254906ull}},
+{{15231124400422133281ull, 14920143727070473758ull,
+ 9927162882977651369ull, 3149193046730318632ull}},
+{{9815533463672890793ull, 4815121603555928486ull,
+ 12408953603722064212ull, 3936491308412898290ull}},
+{{1523022396368168842ull, 12232823039077231112ull,
+ 12367282020753678036ull, 2460307067758061431ull}},
+{{1903777995460211052ull, 15291028798846538890ull,
+ 10847416507514709641ull, 3075383834697576789ull}},
+{{11603094531180039623ull, 5278727943276009900ull,
+ 18170956652820774956ull, 3844229793371970986ull}},
+{{16475306118842300573ull, 12522577001402281995ull,
+ 15968533926440372251ull, 2402643620857481866ull}},
+{{15982446630125487812ull, 11041535233325464590ull,
+ 10737295371195689506ull, 3003304526071852333ull}},
+{{10754686250802083957ull, 4578547004802054930ull,
+ 18033305232421999787ull, 3754130657589815416ull}},
+{{11333364925178690377ull, 555748868787590379ull,
+ 11270815770263749867ull, 2346331660993634635ull}},
+{{9555020138045975067ull, 14529744141266651686ull,
+ 9476833694402299429ull, 2932914576242043294ull}},
+{{2720403135702693026ull, 4327122121301150896ull,
+ 2622670081148098479ull, 3666143220302554118ull}},
+{{3400503919628366282ull, 797216633199050716ull,
+ 12501709638289898907ull, 4582679025378192647ull}},
+{{11348686986622504735ull, 16639161460245264361ull,
+ 14731097551572268672ull, 2864174390861370404ull}},
+{{350800677995967206ull, 2352207751597028836ull,
+ 18413871939465335841ull, 3580217988576713005ull}},
+{{438500847494959008ull, 7551945707923673949ull, 9182281869049506089ull,
+ 4475272485720891257ull}},
+{{2579906038898043332ull, 16249181113520765978ull,
+ 17268141214224411065ull, 2797045303575557035ull}},
+{{12448254585477329973ull, 6476418336618793760ull,
+ 16973490499353125928ull, 3496306629469446294ull}},
+{{15560318231846662466ull, 8095522920773492200ull,
+ 11993491087336631602ull, 4370383286836807868ull}},
+{{9725198894904164041ull, 9671387843910820529ull,
+ 16719303966440170559ull, 2731489554273004917ull}},
+{{16768184637057592956ull, 7477548786461137757ull,
+ 7064071902768049487ull, 3414361942841256147ull}},
+{{7125172741039827482ull, 4735249964649034293ull,
+ 4218403860032673955ull, 4267952428551570184ull}},
+{{6759075972363586129ull, 653688218691952481ull, 2636502412520421222ull,
+ 2667470267844731365ull}},
+{{13060530983881870565ull, 10040482310219716409ull,
+ 7907314034077914431ull, 3334337834805914206ull}},
+{{2490605674570174494ull, 7938916869347257608ull, 660770505742617231ull,
+ 4167922293507392758ull}},
+{{1556628546606359059ull, 11879352070983117861ull,
+ 14248039621371299481ull, 2604951433442120473ull}},
+{{6557471701685336727ull, 1014132033446733614ull,
+ 3974991471431960640ull, 3256189291802650592ull}},
+{{17420211663961446717ull, 1267665041808417017ull,
+ 4968739339289950800ull, 4070236614753313240ull}},
+{{3970103262334822342ull, 792290651130260636ull, 3105462087056219250ull,
+ 2543897884220820775ull}},
+{{4962629077918527928ull, 10213735350767601603ull,
+ 17716885664102437774ull, 3179872355276025968ull}},
+{{1591600328970772006ull, 3543797151604726196ull,
+ 3699363006418495602ull, 3974840444095032461ull}},
+{{10218122242461508312ull, 6826559238180341776ull,
+ 4617944888225253703ull, 2484275277559395288ull}},
+{{12772652803076885390ull, 3921513029298039316ull,
+ 5772431110281567129ull, 3105344096949244110ull}},
+{{15965816003846106737ull, 9513577305049937049ull,
+ 16438910924706734719ull, 3881680121186555137ull}},
+{{3061105974762734855ull, 12863514843297292512ull,
+ 3356790300300627343ull, 2426050075741596961ull}},
+{{3826382468453418568ull, 11467707535694227736ull,
+ 8807673893803172083ull, 3032562594676996201ull}},
+{{4782978085566773210ull, 9722948401190396766ull,
+ 15621278385681353008ull, 3790703243346245251ull}},
+{{16824419358761396969ull, 6076842750743997978ull,
+ 7457455981837151678ull, 2369189527091403282ull}},
+{{11807152161596970403ull, 16819425475284773281ull,
+ 98447940441663789ull, 2961486908864254103ull}},
+{{923882146714049291ull, 7189223788823802890ull,
+ 13958117980834243449ull, 3701858636080317628ull}},
+{{5189112360123668711ull, 16022479914083346566ull,
+ 17947195774876177963ull, 2313661647550198517ull}},
+{{15709762487009361697ull, 15416413874176795303ull,
+ 8598936663313058742ull, 2892077059437748147ull}},
+{{15025517090334314217ull, 10047145305866218321ull,
+ 6136984810713935524ull, 3615096324297185184ull}},
+{{4946838307635729059ull, 12558931632332772902ull,
+ 7671231013392419405ull, 4518870405371481480ull}},
+{{16926831997554494374ull, 10155175279421677015ull,
+ 4794519383370262128ull, 2824294003357175925ull}},
+{{16546853978515730063ull, 12693969099277096269ull,
+ 10604835247640215564ull, 3530367504196469906ull}},
+{{6848509417862498867ull, 15867461374096370337ull,
+ 4032672022695493647ull, 4412959380245587383ull}},
+{{15809533432232531552ull, 16834692386451313316ull,
+ 9437949041825765385ull, 2758099612653492114ull}},
+{{1315172716581112824ull, 7208307427781977934ull,
+ 2574064265427430924ull, 3447624515816865143ull}},
+{{10867337932581166838ull, 9010384284727472417ull,
+ 17052638387066452367ull, 4309530644771081428ull}},
+{{18321301253931699034ull, 12549019205595752116ull,
+ 1434526955061756921ull, 2693456652981925893ull}},
+{{4454882493705072176ull, 1851215951712526434ull,
+ 6404844712254584056ull, 3366820816227407366ull}},
+{{14791975153986116028ull, 2314019939640658042ull,
+ 17229427927173005878ull, 4208526020284259207ull}},
+{{13856670489668710422ull, 15281320517557574988ull,
+ 17685921482124210529ull, 2630328762677662004ull}},
+{{17320838112085888027ull, 5266592591664805023ull,
+ 3660657778945711546ull, 3287910953347077506ull}},
+{{17039361621679972130ull, 15806612776435782087ull,
+ 13799194260536915240ull, 4109888691683846882ull}},
+{{17567130041191064437ull, 9879132985272363804ull,
+ 13236182431262959929ull, 2568680432302404301ull}},
+{{3512168477779278930ull, 16960602250017842660ull,
+ 2710169983796536199ull, 3210850540378005377ull}},
+{{4390210597224098663ull, 16589066794094915421ull,
+ 7999398498173058153ull, 4013563175472506721ull}},
+{{5049724632478755617ull, 3450637718668240282ull,
+ 16528839107426631106ull, 2508476984670316700ull}},
+{{15535527827453220329ull, 13536669185190076160ull,
+ 2214304810573737266ull, 3135596230837895876ull}},
+{{972665710606973795ull, 7697464444632819393ull, 2767881013217171583ull,
+ 3919495288547369845ull}},
+{{12137131115197828382ull, 11728444305536593976ull,
+ 4035768642474426191ull, 2449684555342106153ull}},
+{{15171413893997285477ull, 10048869363493354566ull,
+ 9656396821520420643ull, 3062105694177632691ull}},
+{{9740895330641831038ull, 7949400685939305304ull,
+ 7458810008473137900ull, 3827632117722040864ull}},
+{{6088059581651144399ull, 14191747465566841623ull,
+ 4661756255295711187ull, 2392270073576275540ull}},
+{{2998388458636542595ull, 13127998313531164125ull,
+ 5827195319119638984ull, 2990337591970344425ull}},
+{{8359671591723066147ull, 16409997891913955156ull,
+ 11895680167326936634ull, 3737921989962930531ull}},
+{{14448166781681692150ull, 14867934700873609876ull,
+ 5128957095365641444ull, 2336201243726831582ull}},
+{{18060208477102115188ull, 138174302382460729ull,
+ 15634568406061827614ull, 2920251554658539477ull}},
+{{8740202541095480273ull, 9396089914832851720ull,
+ 5708152452295120805ull, 3650314443323174347ull}},
+{{10925253176369350341ull, 16356798411968452554ull,
+ 2523504546941513102ull, 4562893054153967934ull}},
+{{11439969253658231867ull, 5611312989052894942ull,
+ 15412248397120609401ull, 2851808158846229958ull}},
+{{5076589530218014026ull, 11625827254743506582ull,
+ 10041938459545985943ull, 3564760198557787448ull}},
+{{15569108949627293340ull, 9920598050001995323ull,
+ 12552423074432482429ull, 4455950248197234310ull}},
+{{7424850084303364386ull, 8506216790464941029ull,
+ 3233578403092913614ull, 2784968905123271444ull}},
+{{13892748623806593386ull, 1409398951226400478ull,
+ 4041973003866142018ull, 3481211131404089305ull}},
+{{8142563742903465924ull, 10985120725887776406ull,
+ 9664152273260065426ull, 4351513914255111631ull}},
+{{477416320887278299ull, 11477386472107248158ull,
+ 12957624198428622747ull, 2719696196409444769ull}},
+{{9820142437963873681ull, 9735047071706672293ull,
+ 2361972192753614722ull, 3399620245511805962ull}},
+{{16886864065882230006ull, 2945436802778564558ull,
+ 12175837277796794211ull, 4249525306889757452ull}},
+{{5942604022749005850ull, 17981799066232460513ull,
+ 16833270335477772189ull, 2655953316806098407ull}},
+{{12039941046863645216ull, 8642190777508411929ull,
+ 16429901900919827333ull, 3319941646007623009ull}},
+{{1214868253297392808ull, 15414424490312902816ull,
+ 6702319320867620454ull, 4149927057509528762ull}},
+{{759292658310870505ull, 5022329288018176356ull, 8800635593969650688ull,
+ 2593704410943455476ull}},
+{{949115822888588131ull, 6277911610022720445ull,
+ 11000794492462063360ull, 3242130513679319345ull}},
+{{5798080797038123068ull, 7847389512528400556ull,
+ 18362679134004967104ull, 4052663142099149181ull}},
+{{12847172535003602726ull, 4904618445330250347ull,
+ 13782517467966798392ull, 2532914463811968238ull}},
+{{11447279650327115503ull, 6130773056662812934ull,
+ 8004774798103722182ull, 3166143079764960298ull}},
+{{5085727526054118571ull, 16886838357683291976ull,
+ 782596460774876919ull, 3957678849706200373ull}},
+{{3178579703783824107ull, 17471803001193139341ull,
+ 2794965797197992026ull, 2473549281066375233ull}},
+{{8584910648157168037ull, 12616381714636648368ull,
+ 8105393264924877937ull, 3091936601332969041ull}},
+{{10731138310196460047ull, 1935419088013646748ull,
+ 14743427599583485326ull, 3864920751666211301ull}},
+{{15930333480727563337ull, 15044694985290692929ull,
+ 11520485258953372280ull, 2415575469791382063ull}},
+{{6077858795627290460ull, 359124657903814546ull, 9788920555264327447ull,
+ 3019469337239227579ull}},
+{{16820695531388888882ull, 14283963877661931894ull,
+ 7624464675653021404ull, 3774336671549034474ull}},
+{{5901248688690667648ull, 18150849460393483242ull,
+ 9376976440710526281ull, 2358960419718146546ull}},
+{{16599932897718110367ull, 8853503770209690340ull,
+ 2497848514033382044ull, 2948700524647683183ull}},
+{{2303172048438086343ull, 11066879712762112926ull,
+ 16957368697823891267ull, 3685875655809603978ull}},
+{{12102337097402383737ull, 9221913622525253253ull,
+ 11973338835425088276ull, 4607344569762004973ull}},
+{{9869803695090183788ull, 14987068050933059091ull,
+ 9789179781354374124ull, 2879590356101253108ull}},
+{{7725568600435341830ull, 287090989956772248ull,
+ 12236474726692967656ull, 3599487945126566385ull}},
+{{9656960750544177288ull, 358863737445965310ull, 1460535353084045858ull,
+ 4499359931408207982ull}},
+{{1423914450662722901ull, 4835975854331116223ull,
+ 14747892650959692373ull, 2812099957130129988ull}},
+{{15614951118610567338ull, 10656655836341283182ull,
+ 18434865813699615466ull, 3515124946412662485ull}},
+{{10295316861408433365ull, 4097447758571828170ull,
+ 9208524211842355621ull, 4393906183015828107ull}},
+{{11046259056807658757ull, 4866747858321086558ull,
+ 3449484623187778311ull, 2746191364384892567ull}},
+{{4584451784154797638ull, 1471748804473970294ull,
+ 18146913834266886601ull, 3432739205481115708ull}},
+{{14953936767048272856ull, 6451372024019850771ull,
+ 4236898219124056635ull, 4290924006851394636ull}},
+{{7040367470191476583ull, 1726264505798712780ull,
+ 11871433423807311205ull, 2681827504282121647ull}},
+{{8800459337739345729ull, 6769516650675778879ull,
+ 10227605761331751102ull, 3352284380352652059ull}},
+{{6388888153746794257ull, 17685267850199499407ull,
+ 8172821183237300973ull, 4190355475440815074ull}},
+{{10910584123732828267ull, 13359135415588381081ull,
+ 9719699257950701012ull, 2618972172150509421ull}},
+{{18249916173093423237ull, 16698919269485476351ull,
+ 16761310090865764169ull, 3273715215188136776ull}},
+{{18200709197939391142ull, 7038591031574681727ull,
+ 2504893539872653596ull, 4092144018985170971ull}},
+{{18292972276353201320ull, 13622491431588951887ull,
+ 17706459526916266161ull, 2557590011865731856ull}},
+{{18254529327014113746ull, 3193056234204026147ull,
+ 3686330334935781086ull, 3196987514832164821ull}},
+{{18206475640340254279ull, 13214692329609808492ull,
+ 9219598937097114261ull, 3996234393540206026ull}},
+{{2155675238357883116ull, 10565025715219824260ull,
+ 10373935354113084317ull, 2497646495962628766ull}},
+{{2694594047947353895ull, 17817968162452168229ull,
+ 3744047155786579588ull, 3122058119953285958ull}},
+{{7979928578361580273ull, 3825716129355658670ull,
+ 13903430981588000294ull, 3902572649941607447ull}},
+{{375769343048599767ull, 16226130636129450381ull,
+ 15607173391133582039ull, 2439107906213504654ull}},
+{{5081397697238137612ull, 15670977276734425072ull,
+ 10285594702062201741ull, 3048884882766880818ull}},
+{{6351747121547672015ull, 5753663540635867628ull,
+ 3633621340722976369ull, 3811106103458601023ull}},
+{{13193213987822070818ull, 15125254758965887027ull,
+ 9188542365592942086ull, 2381941314661625639ull}},
+{{11879831466350200618ull, 9683196411852582976ull,
+ 6873991938563789704ull, 2977426643327032049ull}},
+{{14849789332937750772ull, 12103995514815728720ull,
+ 13204175941632125034ull, 3721783304158790061ull}},
+{{9281118333086094233ull, 12176683215187218354ull,
+ 10558452972733772098ull, 2326114565099243788ull}},
+{{2378025879502841983ull, 5997481982129247135ull,
+ 13198066215917215123ull, 2907643206374054735ull}},
+{{16807590404660716191ull, 2885166459234171014ull,
+ 11885896751469131000ull, 3634554007967568419ull}},
+{{11786115968971119430ull, 3606458074042713768ull,
+ 10245684920909025846ull, 4543192509959460524ull}},
+{{7366322480606949644ull, 16089094351558859817ull,
+ 15626925112422916961ull, 2839495318724662827ull}},
+{{13819589119186074959ull, 6276309884166411059ull,
+ 14921970372101258298ull, 3549369148405828534ull}},
+{{12662800380555205795ull, 17068759392062789632ull,
+ 9429090928271797064ull, 4436711435507285668ull}},
+{{7914250237847003622ull, 10667974620039243520ull,
+ 15116553867024648973ull, 2772944647192053542ull}},
+{{9892812797308754527ull, 17946654293476442304ull,
+ 9672320296926035408ull, 3466180808990066928ull}},
+{{12366015996635943159ull, 3986573793136001264ull,
+ 12090400371157544261ull, 4332726011237583660ull}},
+{{7728759997897464474ull, 4797451629923694742ull,
+ 16779872268828240971ull, 2707953757023489787ull}},
+{{437577960517054785ull, 1385128518977230524ull,
+ 16363154317607913310ull, 3384942196279362234ull}},
+{{546972450646318481ull, 10954782685576313963ull,
+ 11230570860155115829ull, 4231177745349202793ull}},
+{{16482758846149806715ull, 9152582187698890178ull,
+ 101577759955865537ull, 2644486090843251746ull}},
+{{11380076520832482585ull, 16052413753051000627ull,
+ 9350344236799607729ull, 3305607613554064682ull}},
+{{9613409632613215328ull, 6230459136031587072ull,
+ 2464558259144733854ull, 4132009516942580853ull}},
+{{6008381020383259580ull, 17729095015301905632ull,
+ 3846191921179152610ull, 2582505948089113033ull}},
+{{7510476275479074475ull, 12937996732272606232ull,
+ 9419425919901328667ull, 3228132435111391291ull}},
+{{9388095344348843093ull, 11560809896913369886ull,
+ 7162596381449272930ull, 4035165543889239114ull}},
+{{1255873571790639030ull, 11837192203998244083ull,
+ 9088308756833183485ull, 2521978464930774446ull}},
+{{15404900020020462499ull, 961432199715641391ull,
+ 2137013909186703549ull, 3152473081163468058ull}},
+{{14644439006598190219ull, 5813476268071939643ull,
+ 11894639423338155244ull, 3940591351454335072ull}},
+{{6846931369910174935ull, 12856794704399738085ull,
+ 7434149639586347027ull, 2462869594658959420ull}},
+{{13170350230815106573ull, 11459307362072284702ull,
+ 9292687049482933784ull, 3078586993323699275ull}},
+{{7239565751664107408ull, 14324134202590355878ull,
+ 7004172793426279326ull, 3848233741654624094ull}},
+{{18359786650072230842ull, 4340897858191584519ull,
+ 18212666051173588291ull, 2405146088534140058ull}},
+{{18338047294162900649ull, 814436304312092745ull,
+ 13542460527112209556ull, 3006432610667675073ull}},
+{{9087501062421462099ull, 1018045380390115932ull,
+ 3093017603608098233ull, 3758040763334593842ull}},
+{{14903060200868189620ull, 12165493408812292217ull,
+ 6544822020682449299ull, 2348775477084121151ull}},
+{{4793767195803073313ull, 10595180742587977368ull,
+ 3569341507425673720ull, 2935969346355151439ull}},
+{{5992208994753841641ull, 13243975928234971710ull,
+ 18296734939564255862ull, 3669961682943939298ull}},
+{{16713633280297077859ull, 7331597873438938829ull,
+ 13647546637600544020ull, 4587452103679924123ull}},
+{{12751863809399367614ull, 13805620707754112576ull,
+ 6223873639286646060ull, 2867157564799952577ull}},
+{{15939829761749209517ull, 17257025884692640720ull,
+ 12391528067535695479ull, 3583946955999940721ull}},
+{{1478043128476960281ull, 16959596337438412997ull,
+ 1654352029137455637ull, 4479933694999925902ull}},
+{{3229619964511794128ull, 12905590720112702075ull,
+ 14869028073493073485ull, 2799958559374953688ull}},
+{{17872083010921906371ull, 2296930344858713881ull,
+ 139541018156790241ull, 3499948199218692111ull}},
+{{8505045708370219252ull, 7482848949500780256ull,
+ 14009484327978151513ull, 4374935249023365138ull}},
+{{5315653567731387033ull, 16205995639506457420ull,
+ 13367613723413732599ull, 2734334530639603211ull}},
+{{6644566959664233791ull, 15645808530955683871ull,
+ 12097831135839777845ull, 3417918163299504014ull}},
+{{3694022681152904334ull, 5722202608412441127ull,
+ 5898916882944946499ull, 4272397704124380018ull}},
+{{9226293203361647065ull, 1270533621044081752ull,
+ 8298509070267979466ull, 2670248565077737511ull}},
+{{11532866504202058831ull, 10811539063159877998ull,
+ 5761450319407586428ull, 3337810706347171889ull}},
+{{5192711093397797731ull, 13514423828949847498ull,
+ 11813498917686870939ull, 4172263382933964861ull}},
+{{7857130451801011486ull, 6140671883879960734ull,
+ 9689279832767988289ull, 2607664614333728038ull}},
+{{598041027896488549ull, 12287525873277338822ull,
+ 2888227754105209553ull, 3259580767917160048ull}},
+{{9970923321725386495ull, 1524349286314509815ull,
+ 3610284692631511942ull, 4074475959896450060ull}},
+{{13149356103719448415ull, 14787776359228732346ull,
+ 11479799969749470771ull, 2546547474935281287ull}},
+{{7213323092794534711ull, 13873034430608527529ull,
+ 9738063943759450560ull, 3183184343669101609ull}},
+{{13628339884420556293ull, 17341293038260659411ull,
+ 16784265948126701104ull, 3978980429586377011ull}},
+{{6211869418549153731ull, 10838308148912912132ull,
+ 8184323208365494238ull, 2486862768491485632ull}},
+{{7764836773186442164ull, 4324513149286364357ull,
+ 10230404010456867798ull, 3108578460614357040ull}},
+{{14317731984910440609ull, 14629013473462731254ull,
+ 12788005013071084747ull, 3885723075767946300ull}},
+{{4336896472141637477ull, 6837290411700513082ull,
+ 17215875170024203775ull, 2428576922354966437ull}},
+{{14644492627031822654ull, 3934926996198253448ull,
+ 7684785907248091007ull, 3035721152943708047ull}},
+{{18305615783789778317ull, 306972726820428906ull,
+ 4994296365632725855ull, 3794651441179635059ull}},
+{{16052695883295999352ull, 7109386981903849922ull,
+ 815592219306759707ull, 2371657150737271912ull}},
+{{10842497817265223382ull, 4275047708952424499ull,
+ 1019490274133449634ull, 2964571438421589890ull}},
+{{8941436253154141324ull, 14567181673045306432ull,
+ 10497734879521587850ull, 3705714298026987362ull}},
+{{5588397658221338327ull, 13716174564080704424ull,
+ 11172770318128380310ull, 2316071436266867101ull}},
+{{6985497072776672909ull, 7921846168246104722ull, 130904842378311676ull,
+ 2895089295333583877ull}},
+{{17955243377825616944ull, 9902307710307630902ull,
+ 4775317071400277499ull, 3618861619166979846ull}},
+{{13220682185427245372ull, 7766198619457150724ull,
+ 15192518376105122682ull, 4523577023958724807ull}},
+{{17486298402746804166ull, 9465560155588107106ull,
+ 16412853012706783532ull, 2827235639974203004ull}},
+{{12634500966578729399ull, 11831950194485133883ull,
+ 2069322192173927799ull, 3534044549967753756ull}},
+{{11181440189796023845ull, 10178251724679029450ull,
+ 2586652740217409749ull, 4417555687459692195ull}},
+{{11600086137049902807ull, 8667250337138087358ull,
+ 17757559027131738757ull, 2760972304662307621ull}},
+{{5276735634457602701ull, 15445748939849997102ull,
+ 8361890728632509734ull, 3451215380827884527ull}},
+{{15819291579926779184ull, 10083814137957720569ull,
+ 5840677392363249264ull, 4314019226034855659ull}},
+{{2969528209813155134ull, 6302383836223575356ull,
+ 1344580361013336838ull, 2696262016271784787ull}},
+{{3711910262266443918ull, 17101351832134245003ull,
+ 15515783506548834759ull, 3370327520339730983ull}},
+{{28201809405666993ull, 16765003771740418350ull,
+ 14783043364758655545ull, 4212909400424663729ull}},
+{{13852684186160705583ull, 3560598329696679612ull,
+ 2321873075333077860ull, 2633068375265414831ull}},
+{{17315855232700881978ull, 4450747912120849515ull,
+ 16737399399448511037ull, 3291335469081768538ull}},
+{{17033133022448714569ull, 10175120908578449798ull,
+ 11698377212455862988ull, 4114169336352210673ull}},
+{{6034022120603058702ull, 15582822604716306932ull,
+ 393956730143832511ull, 2571355835220131671ull}},
+{{7542527650753823377ull, 14866842237467995761ull,
+ 14327503967961954351ull, 3214194794025164588ull}},
+{{14039845581869667125ull, 13971866778407606797ull,
+ 17909379959952442939ull, 4017743492531455735ull}},
+{{11080746497882235905ull, 6426573727291060296ull,
+ 18110891502611358693ull, 2511089682832159834ull}},
+{{13850933122352794882ull, 12644903177541213274ull,
+ 13415242341409422558ull, 3138862103540199793ull}},
+{{8090294366086217794ull, 6582756935071740785ull,
+ 2933994871479614486ull, 3923577629425249742ull}},
+{{16585649024872355881ull, 17949281139702001702ull,
+ 15668804849956922765ull, 2452236018390781088ull}},
+{{11508689244235669044ull, 8601543369345338416ull,
+ 1139261988736601841ull, 3065295022988476361ull}},
+{{14385861555294586304ull, 15363615230109060924ull,
+ 6035763504348140205ull, 3831618778735595451ull}},
+{{18214535508913892248ull, 11908102528031857029ull,
+ 1466509181003893676ull, 2394761736709747157ull}},
+{{8933111330860201598ull, 14885128160039821287ull,
+ 6444822494682254999ull, 2993452170887183946ull}},
+{{6554703145147864094ull, 13994724181622388705ull,
+ 17279400155207594557ull, 3741815213608979932ull}},
+{{15625904511785884819ull, 11052545622727686892ull,
+ 1576253060149970790ull, 2338634508505612458ull}},
+{{1085636566022804407ull, 4592309991554832808ull,
+ 11193688362042239296ull, 2923293135632015572ull}},
+{{1357045707528505509ull, 5740387489443541010ull,
+ 13992110452552799120ull, 3654116419540019465ull}},
+{{10919679171265407694ull, 7175484361804426262ull,
+ 3655080010408835188ull, 4567645524425024332ull}},
+{{2213113463613491905ull, 13708049762982542222ull,
+ 11507797043360297800ull, 2854778452765640207ull}},
+{{11989763866371640689ull, 17135062203728177777ull,
+ 9773060285772984346ull, 3568473065957050259ull}},
+{{1152146777682387150ull, 12195455717805446414ull,
+ 7604639338788842529ull, 4460591332446312824ull}},
+{{14555149791333655681ull, 704630795987322152ull,
+ 4752899586743026581ull, 2787869582778945515ull}},
+{{18193937239167069601ull, 5492474513411540594ull,
+ 1329438465001395322ull, 3484836978473681894ull}},
+{{13519049512104061193ull, 16088965178619201551ull,
+ 10885170118106519960ull, 4356046223092102367ull}},
+{{15366934972706120102ull, 10055603236637000969ull,
+ 13720760351457656831ull, 2722528889432563979ull}},
+{{5373610660600486415ull, 7957818027368863308ull,
+ 12539264420894683135ull, 3403161111790704974ull}},
+{{6717013325750608019ull, 5335586515783691231ull,
+ 6450708489263578111ull, 4253951389738381218ull}},
+{{11115662356235211868ull, 10252270600005888875ull,
+ 8643378824217124223ull, 2658719618586488261ull}},
+{{9282891926866626931ull, 8203652231579973190ull,
+ 15415909548698793183ull, 3323399523233110326ull}},
+{{2380242871728507855ull, 5642879271047578584ull,
+ 10046514899018715671ull, 4154249404041387908ull}},
+{{1487651794830317410ull, 10444328572045818471ull,
+ 15502443848741473102ull, 2596405877525867442ull}},
+{{15694622798820060474ull, 3832038678202497280ull,
+ 10154682774072065570ull, 3245507346907334303ull}},
+{{1171534424815523976ull, 14013420384607897409ull,
+ 8081667449162694058ull, 4056884183634167879ull}},
+{{12261424061578172245ull, 13370073758807323784ull,
+ 11968571183367765642ull, 2535552614771354924ull}},
+{{15326780076972715307ull, 7489220161654378922ull,
+ 14960713979209707053ull, 3169440768464193655ull}},
+{{9935103059361118325ull, 13973211220495361557ull,
+ 14089206455584745912ull, 3961800960580242069ull}},
+{{8515282421314392905ull, 8733257012809600973ull,
+ 11111597043954160147ull, 2476125600362651293ull}},
+{{15255789045070379036ull, 6304885247584613312ull, 54438249660536472ull,
+ 3095157000453314117ull}},
+{{622992232628422178ull, 7881106559480766641ull, 4679733830503058494ull,
+ 3868946250566642646ull}},
+{{11918585191461233622ull, 314005581248091246ull,
+ 16759891699346575271ull, 2418091406604151653ull}},
+{{5674859452471766219ull, 14227565031842277770ull,
+ 7114806568901055376ull, 3022614258255189567ull}},
+{{16316946352444483582ull, 17784456289802847212ull,
+ 4281822192698931316ull, 3778267822818986959ull}},
+{{974719433423026431ull, 1891913144272003700ull, 9593667898077913929ull,
+ 2361417389261866849ull}},
+{{1218399291778783038ull, 6976577448767392529ull,
+ 16603770891024780315ull, 2951771736577333561ull}},
+{{6134685133150866702ull, 4109035792531852757ull,
+ 6919655558498811682ull, 3689714670721666952ull}},
+{{6140021217432985641ull, 7179833388759795877ull,
+ 4324784724061757301ull, 2306071669201041845ull}},
+{{12286712540218619955ull, 13586477754377132750ull,
+ 10017666923504584530ull, 2882589586501302306ull}},
+{{6135018638418499135ull, 7759725156116640130ull,
+ 3298711617525954855ull, 3603236983126627883ull}},
+{{16892145334877899727ull, 5087970426718412258ull,
+ 17958447577189607281ull, 4504046228908284853ull}},
+{{15169276852726075234ull, 14709196562767477421ull,
+ 13529872744957198502ull, 2815028893067678033ull}},
+{{5126538010625430330ull, 9163123666604570969ull,
+ 3077282875914334416ull, 3518786116334597542ull}},
+{{11019858531709175816ull, 11453904583255713711ull,
+ 13069975631747693828ull, 4398482645418246927ull}},
+{{13804940609959316741ull, 16382062401389596877ull,
+ 15086263797483390498ull, 2749051653386404329ull}},
+{{3421117707166982215ull, 11254205964882220289ull,
+ 5022771691572074411ull, 3436314566733005412ull}},
+{{8888083152386115672ull, 9456071437675387457ull,
+ 6278464614465093014ull, 4295393208416256765ull}},
+{{17084267016309792055ull, 1298358630119729256ull,
+ 6229883393254377086ull, 2684620755260160478ull}},
+{{2908589696677688453ull, 10846320324504437379ull,
+ 17010726278422747165ull, 3355775944075200597ull}},
+{{17470795176129274278ull, 18169586424057934627ull,
+ 7428349792746270244ull, 4194719930094000747ull}},
+{{8613403975867102472ull, 2132619478181433334ull,
+ 2336875611252724951ull, 2621699956308750467ull}},
+{{1543382932979102282ull, 16500832403008955380ull,
+ 16756152569348069900ull, 3277124945385938083ull}},
+{{1929228666223877852ull, 2179296430051642609ull,
+ 16333504693257699472ull, 4096406181732422604ull}},
+{{12734982962458393418ull, 1362060268782276630ull,
+ 985068396431286362ull, 2560253863582764128ull}},
+{{6695356666218215964ull, 10925947372832621596ull,
+ 1231335495539107952ull, 3200317329478455160ull}},
+{{8369195832772769955ull, 13657434216040776995ull,
+ 1539169369423884940ull, 4000396661848068950ull}},
+{{2924904386269287270ull, 17759268421880261430ull,
+ 14797038911172091799ull, 2500247913655043093ull}},
+{{12879502519691384895ull, 17587399508922938883ull,
+ 4661240583682951037ull, 3125309892068803867ull}},
+{{11487692131186843215ull, 8149191330871509892ull,
+ 1214864711176300893ull, 3906637365086004834ull}},
+{{16403179618846552818ull, 7399087591008387634ull,
+ 5370976462912575962ull, 2441648353178753021ull}},
+{{11280602486703415214ull, 25487451905708735ull,
+ 11325406597068107857ull, 3052060441473441276ull}},
+{{9489067089951881113ull, 4643545333309523823ull,
+ 14156758246335134821ull, 3815075551841801595ull}},
+{{12848195958861007552ull, 5208058842532146341ull,
+ 6542130894745765311ull, 2384422219901125997ull}},
+{{2225186893294095728ull, 1898387534737795023ull,
+ 12789349636859594543ull, 2980527774876407496ull}},
+{{16616541671899783372ull, 16208042473704407490ull,
+ 15986687046074493178ull, 3725659718595509370ull}},
+{{14997024563364752511ull, 14741712564492642585ull,
+ 14603365422223946140ull, 2328537324122193356ull}},
+{{4911222648923776927ull, 18427140705615803232ull,
+ 18254206777779932675ull, 2910671655152741695ull}},
+{{6139028311154721159ull, 18422239863592366136ull,
+ 18206072453797527940ull, 3638339568940927119ull}},
+{{7673785388943401449ull, 4581055755780906054ull,
+ 18145904548819522022ull, 4547924461176158899ull}},
+{{184429849662238002ull, 16698217902645229996ull,
+ 9035347333798507311ull, 2842452788235099312ull}},
+{{230537312077797502ull, 16261086359879149591ull,
+ 11294184167248134139ull, 3553065985293874140ull}},
+{{14123229695379410589ull, 15714671931421549084ull,
+ 14117730209060167674ull, 4441332481617342675ull}},
+{{18050390596466907426ull, 14433355975565856081ull,
+ 6517738371448910844ull, 2775832801010839172ull}},
+{{8727930190301470571ull, 18041694969457320102ull,
+ 8147172964311138555ull, 3469791001263548965ull}},
+{{1686540701022062405ull, 17940432693394262224ull,
+ 14795652223816311098ull, 4337238751579436206ull}},
+{{1054087938138789004ull, 15824456451798801794ull,
+ 4635596621457806532ull, 2710774219737147629ull}},
+{{10540981959528262062ull, 1333826491038950626ull,
+ 10406181795249646070ull, 3388467774671434536ull}},
+{{3952855412555551770ull, 10890655150653464091ull,
+ 13007727244062057587ull, 4235584718339293170ull}},
+{{164691623633525904ull, 4500816459944721105ull,
+ 12741515545966173896ull, 2647240448962058231ull}},
+{{4817550547969295284ull, 5626020574930901381ull,
+ 11315208414030329466ull, 3309050561202572789ull}},
+{{10633624203389007009ull, 16255897755518402534ull,
+ 308952462255748120ull, 4136313201503215987ull}},
+{{2034329108690741477ull, 10159936097199001584ull,
+ 16333996353405700239ull, 2585195750939509991ull}},
+{{2542911385863426846ull, 8088234103071364076ull,
+ 15805809423329737395ull, 3231494688674387489ull}},
+{{3178639232329283557ull, 5498606610411817191ull,
+ 5922203723880008032ull, 4039368360842984362ull}},
+{{8904178547846884080ull, 3436629131507385744ull,
+ 8313063345852392924ull, 2524605225526865226ull}},
+{{11130223184808605099ull, 4295786414384232180ull,
+ 1167957145460715347ull, 3155756531908581533ull}},
+{{13912778981010756374ull, 758046999552902321ull,
+ 6071632450253282088ull, 3944695664885726916ull}},
+{{1777957835490640878ull, 473779374720563951ull,
+ 13018142318263077113ull, 2465434790553579322ull}},
+{{16057505349645464809ull, 5203910236828092842ull,
+ 7049305860974070583ull, 3081793488191974153ull}},
+{{10848509650202055204ull, 1893201777607728149ull,
+ 13423318344644976133ull, 3852241860239967691ull}},
+{{9086161540589978454ull, 3489094120218524045ull,
+ 6083730956189416131ull, 2407651162649979807ull}},
+{{15969387944164860972ull, 18196425705555318768ull,
+ 2992977676809382259ull, 3009563953312474759ull}},
+{{1514990856496524599ull, 18133846113516760557ull,
+ 17576280151293891536ull, 3761954941640593448ull}},
+{{3252712294524021826ull, 11333653820947975348ull,
+ 10985175094558682210ull, 2351221838525370905ull}},
+{{4065890368155027283ull, 4943695239330193377ull,
+ 18343154886625740667ull, 2939027298156713631ull}},
+{{9694048978621172007ull, 1567933030735353817ull,
+ 18317257589854787930ull, 3673784122695892039ull}},
+{{16729247241703852913ull, 11183288325273968079ull,
+ 18284885968891097008ull, 4592230153369865049ull}},
+{{17373308553705989927ull, 6989555203296230049ull,
+ 4510524702915853774ull, 2870143845856165656ull}},
+{{7881577636850323697ull, 17960316040975063370ull,
+ 5638155878644817217ull, 3587679807320207070ull}},
+{{628600009208128813ull, 8615336995936665501ull,
+ 16271066885160797330ull, 4484599759150258837ull}},
+{{2698718014968774460ull, 9996271640887803842ull,
+ 12475259812439192283ull, 2802874849468911773ull}},
+{{12596769555565743883ull, 7883653532682366898ull,
+ 1759016710266826642ull, 3503593561836139717ull}},
+{{6522589907602404046ull, 631194878998182815ull, 6810456906260921207ull,
+ 4379491952295174646ull}},
+{{10994147719892584385ull, 7312025827014946115ull,
+ 18091593621695239466ull, 2737182470184484153ull}},
+{{9130998631438342577ull, 18363404320623458452ull,
+ 8779433971836885620ull, 3421478087730605192ull}},
+{{11413748289297928221ull, 4507511327069771449ull,
+ 10974292464796107026ull, 4276847609663256490ull}},
+{{216063653170123282ull, 7428880597845995060ull,
+ 11470618808924954795ull, 2673029756039535306ull}},
+{{270079566462654103ull, 4674414728880105921ull, 5114901474301417686ull,
+ 3341287195049419133ull}},
+{{4949285476505705532ull, 15066390447954908209ull,
+ 11005312861304160011ull, 4176608993811773916ull}},
+{{14622518468884535718ull, 7110651020758123678ull,
+ 16101692575169875815ull, 2610380621132358697ull}},
+{{9054776049250893839ull, 4276627757520266694ull,
+ 6292057663680181057ull, 3262975776415448372ull}},
+{{2095098024708841491ull, 9957470715327721272ull,
+ 7865072079600226321ull, 4078719720519310465ull}},
+{{1309436265443025932ull, 17752634243148295555ull,
+ 16444885095818611210ull, 2549199825324569040ull}},
+{{15471853387085946127ull, 12967420767080593635ull,
+ 2109362296063712397ull, 3186499781655711301ull}},
+{{14728130715430044754ull, 2374217903568578332ull,
+ 7248388888507028401ull, 3983124727069639126ull}},
+{{18428453733998553780ull, 13013101235798831217ull,
+ 18365301110599056462ull, 2489452954418524453ull}},
+{{9200509112216028512ull, 7043004507893763214ull,
+ 9121568332966656866ull, 3111816193023155567ull}},
+{{2277264353415259832ull, 18027127671721979826ull,
+ 6790274397780933178ull, 3889770241278944459ull}},
+{{6034976239311925299ull, 15878640813253625295ull,
+ 1938078489399389284ull, 2431106400799340287ull}},
+{{2932034280712518720ull, 1401556942857480003ull,
+ 16257656167031400318ull, 3038883000999175358ull}},
+{{17500100906172812112ull, 10975318215426625811ull,
+ 11098698171934474589ull, 3798603751248969198ull}},
+{{8631720057144313618ull, 9165416893855335084ull,
+ 2325000339031658714ull, 2374127344530605749ull}},
+{{10789650071430392023ull, 2233399080464393047ull,
+ 7517936442216961297ull, 2967659180663257186ull}},
+{{8875376570860602124ull, 7403434869007879213ull, 174048515916425813ull,
+ 3709573975829071483ull}},
+{{7852953366001570280ull, 6932989802343618460ull,
+ 16249681386943623797ull, 2318483734893169676ull}},
+{{9816191707501962850ull, 13277923271356910979ull,
+ 1865357659969978130ull, 2898104668616462096ull}},
+{{7658553615950065658ull, 7374032052341362916ull,
+ 2331697074962472663ull, 3622630835770577620ull}},
+{{9573192019937582072ull, 4605854046999315741ull,
+ 2914621343703090829ull, 4528288544713222025ull}},
+{{8289088021674682747ull, 5184501788588266290ull,
+ 13350853385882901528ull, 2830180340445763765ull}},
+{{1137987990238577626ull, 6480627235735332863ull,
+ 2853508677071463198ull, 3537725425557204707ull}},
+{{15257543043080385744ull, 17324156081523941886ull,
+ 17401943901621492709ull, 4422156781946505883ull}},
+{{4924278383497853186ull, 13133440560166157631ull,
+ 8570371929299738991ull, 2763847988716566177ull}},
+{{1543661960944928579ull, 11805114681780309135ull,
+ 15324650930052061643ull, 3454809985895707721ull}},
+{{15764635506463324436ull, 10144707333797998514ull,
+ 5320755607282913342ull, 4318512482369634652ull}},
+{{14464583209966965676ull, 1728756065196361167ull,
+ 12548844291406596647ull, 2699070301481021657ull}},
+{{13469042994031319191ull, 15996003136777615171ull,
+ 1850997308976082096ull, 3373837876851277072ull}},
+{{12224617724111761085ull, 1548259847262467348ull,
+ 2313746636220102621ull, 4217297346064096340ull}},
+{{16863758114424626486ull, 3273505413752736044ull,
+ 10669463684492339946ull, 2635810841290060212ull}},
+{{2632953569321231492ull, 13315253804045695864ull,
+ 13336829605615424932ull, 3294763551612575265ull}},
+{{3291191961651539365ull, 16644067255057119830ull,
+ 2835978951737117453ull, 4118454439515719082ull}},
+{{15892053031314375815ull, 12708385043624393845ull,
+ 6384172863263086312ull, 2574034024697324426ull}},
+{{6030008233860806057ull, 15885481304530492307ull,
+ 17203588115933633698ull, 3217542530871655532ull}},
+{{2925824273898619667ull, 10633479593808339576ull,
+ 3057741071207490507ull, 4021928163589569416ull}},
+{{1828640171186637292ull, 4340081736916518283ull,
+ 1911088169504681567ull, 2513705102243480885ull}},
+{{16120858269265460327ull, 813416152718259949ull,
+ 7000546230308239863ull, 3142131377804351106ull}},
+{{6316014781299661696ull, 14851828246179988649ull,
+ 17974054824740075636ull, 3927664222255438882ull}},
+{{15476724284380758320ull, 59020617007717097ull,
+ 15845470283889935177ull, 2454790138909649301ull}},
+{{5510847300193784188ull, 4685461789687034276ull,
+ 5971779799580255259ull, 3068487673637061627ull}},
+{{6888559125242230235ull, 1245141218681404941ull,
+ 2853038731047931170ull, 3835609592046327034ull}},
+{{6611192462490087849ull, 5389899280103265992ull,
+ 6394835225332344885ull, 2397255995028954396ull}},
+{{8263990578112609812ull, 11349060118556470394ull,
+ 7993544031665431106ull, 2996569993786192995ull}},
+{{1106616185785986456ull, 4962953111340812185ull,
+ 5380244021154400979ull, 3745712492232741244ull}},
+{{12220850162184711295ull, 796002685374313663ull,
+ 12586024550076276420ull, 2341070307645463277ull}},
+{{10664376684303501215ull, 995003356717892079ull,
+ 1897472632313181813ull, 2926337884556829097ull}},
+{{8718784836951988615ull, 5855440214324753003ull,
+ 6983526808818865170ull, 3657922355696036371ull}},
+{{6286795027762597864ull, 16542672304760717062ull,
+ 4117722492596193558ull, 4572402944620045464ull}},
+{{17764304947633787377ull, 5727484172048060259ull,
+ 2573576557872620974ull, 2857751840387528415ull}},
+{{17593695166114846318ull, 16382727251914851132ull,
+ 17052028752622939929ull, 3572189800484410518ull}},
+{{3545374883934006281ull, 6643351009611400204ull,
+ 12091663903923899104ull, 4465237250605513148ull}},
+{{11439231339313529734ull, 4152094381007125127ull,
+ 16780661976807212748ull, 2790773281628445717ull}},
+{{9687353155714524263ull, 5190117976258906409ull,
+ 7140769415726852223ull, 3488466602035557147ull}},
+{{16720877463070543233ull, 1875961451896245107ull,
+ 4314275751231177375ull, 4360583252544446434ull}},
+{{8144705405205395569ull, 8090004935076235048ull,
+ 7308108362946873763ull, 2725364532840279021ull}},
+{{10180881756506744461ull, 5500820150417905906ull,
+ 13746821472110980108ull, 3406705666050348776ull}},
+{{3502730158778654768ull, 6876025188022382383ull,
+ 17183526840138725135ull, 4258382082562935970ull}},
+{{9106735376877741086ull, 11215044770155070845ull,
+ 15351390293514091113ull, 2661488801601834981ull}},
+{{15995105239524564261ull, 183747907411674844ull,
+ 5354179811610450180ull, 3326861002002293727ull}},
+{{1547137475696153711ull, 229684884264593556ull, 2081038746085674821ull,
+ 4158576252502867159ull}},
+{{10190332959164871877ull, 2449396061879064924ull,
+ 8218178243944628619ull, 2599110157814291974ull}},
+{{12737916198956089846ull, 16896803132630994867ull,
+ 1049350768076009965ull, 3248887697267864968ull}},
+{{11310709230267724404ull, 7285945860506579872ull,
+ 1311688460095012457ull, 4061109621584831210ull}},
+{{7069193268917327753ull, 16082931208885082180ull,
+ 5431491305986770689ull, 2538193513490519506ull}},
+{{8836491586146659691ull, 6268605955824189013ull,
+ 16012736169338239170ull, 3172741891863149382ull}},
+{{15657300501110712517ull, 17059129481635012074ull,
+ 10792548174818023154ull, 3965927364828936728ull}},
+{{14397498831621583227ull, 15273641944449270450ull,
+ 6745342609261264471ull, 2478704603018085455ull}},
+{{8773501502672203226ull, 14480366412134200159ull,
+ 3819992243149192685ull, 3098380753772606819ull}},
+{{6355190859912866129ull, 4265399959885586487ull, 163304285509102953ull,
+ 3872975942215758524ull}},
+{{10889523315086623187ull, 14195090020996961314ull,
+ 9325437215297965153ull, 2420609963884849077ull}},
+{{4388532107003503175ull, 3908804470964037931ull,
+ 16268482537549844346ull, 3025762454856061346ull}},
+{{873979115326991065ull, 14109377625559823222ull,
+ 11112231135082529624ull, 3782203068570076683ull}},
+{{14381295002361533128ull, 8818361015974889513ull,
+ 4639301450212887063ull, 2363876917856297927ull}},
+{{4141560697669752697ull, 6411265251541223988ull,
+ 1187440794338720925ull, 2954846147320372409ull}},
+{{5176950872087190872ull, 12625767582853917889ull,
+ 6095987011350789060ull, 3693557684150465511ull}},
+{{14764809341122964055ull, 17114476776138474488ull,
+ 10727520909735325018ull, 2308473552594040944ull}},
+{{9267602694153453ull, 12169723933318317303ull, 13409401137169156273ull,
+ 2885591940742551180ull}},
+{{13846642558649855528ull, 1377096861365732916ull,
+ 16761751421461445342ull, 3606989925928188975ull}},
+{{17308303198312319409ull, 10944743113561941953ull,
+ 16340503258399418773ull, 4508737407410236219ull}},
+{{3900160471304117775ull, 9146307455189907673ull,
+ 7906971527285942781ull, 2817960879631397637ull}},
+{{9486886607557535123ull, 16044570337414772495ull,
+ 14495400427534816380ull, 3522451099539247046ull}},
+{{7246922241019530999ull, 1608968848058914003ull,
+ 8895878497563744668ull, 4403063874424058808ull}},
+{{2223483391423512923ull, 10228977566891597060ull,
+ 5559924060977340417ull, 2751914921515036755ull}},
+{{2779354239279391153ull, 17397907977041884229ull,
+ 2338219057794287617ull, 3439893651893795944ull}},
+{{8085878817526626846ull, 7912326916020191574ull,
+ 2922773822242859522ull, 4299867064867244930ull}},
+{{441988242526753875ull, 9556890340940007638ull, 6438419657329175105ull,
+ 2687416915542028081ull}},
+{{9775857340013218151ull, 16557798944602397451ull,
+ 12659710590088856785ull, 3359271144427535101ull}},
+{{7608135656589134785ull, 6862190625470833102ull,
+ 1989580182328907270ull, 4199088930534418877ull}},
+{{143398766940821337ull, 18123927196201434401ull,
+ 3549330623169260995ull, 2624430581584011798ull}},
+{{4790934477103414575ull, 18043222976824405097ull,
+ 13660035315816352052ull, 3280538226980014747ull}},
+{{10600354114806656122ull, 4107284647320954755ull,
+ 12463358126343052162ull, 4100672783725018434ull}},
+{{4319378312540466125ull, 7178738923002984626ull,
+ 12401284847391795505ull, 2562920489828136521ull}},
+{{14622594927530358464ull, 13585109672181118686ull,
+ 1666548003957580669ull, 3203650612285170652ull}},
+{{9054871622558172271ull, 3146329034944234646ull,
+ 2083185004946975837ull, 4004563265356463315ull}},
+{{1047608745671469766ull, 4272298656053840606ull,
+ 17442891692587717562ull, 2502852040847789571ull}},
+{{10532882968944113015ull, 14563745356922076565ull,
+ 17191928597307259048ull, 3128565051059736964ull}},
+{{17777789729607529173ull, 18204681696152595706ull,
+ 3043166672924522194ull, 3910706313824671206ull}},
+{{15722804599432093637ull, 15989612078522760220ull,
+ 15737037225859990083ull, 2444191446140419503ull}},
+{{1206761675580565430ull, 15375329079726062372ull,
+ 15059610513897599700ull, 3055239307675524379ull}},
+{{1508452094475706788ull, 772417275948026349ull,
+ 14212827123944611722ull, 3819049134594405474ull}},
+{{3248625568261010695ull, 5094446815894904372ull,
+ 13494702970892770230ull, 2386905709121503421ull}},
+{{4060781960326263368ull, 15591430556723406273ull,
+ 3033320658333799075ull, 2983632136401879277ull}},
+{{9687663468835217114ull, 14877602177476869937ull,
+ 8403336841344636748ull, 3729540170502349096ull}},
+{{17584004714090480456ull, 75129324068267902ull, 5252085525840397968ull,
+ 2330962606563968185ull}},
+{{12756633855758324762ull, 93911655085334878ull,
+ 11176792925727885364ull, 2913703258204960231ull}},
+{{6722420282843130145ull, 117389568856668598ull, 9359305138732468801ull,
+ 3642129072756200289ull}},
+{{17626397390408688489ull, 4758422979498223651ull,
+ 16310817441842973905ull, 4552661340945250361ull}},
+{{8710655359791736354ull, 14503229408254859542ull,
+ 3276731873510776834ull, 2845413338090781476ull}},
+{{1664947162884894634ull, 8905664723463798620ull,
+ 4095914841888471043ull, 3556766672613476845ull}},
+{{2081183953606118293ull, 6520394885902360371ull,
+ 9731579570787976708ull, 4445958340766846056ull}},
+{{17441641035499681597ull, 13298618840543751039ull,
+ 6082237231742485442ull, 2778723962979278785ull}},
+{{17190365275947214092ull, 7399901513824912991ull,
+ 12214482558105494707ull, 3473404953724098481ull}},
+{{16876270576506629711ull, 4638190873853753335ull,
+ 1433045142349704672ull, 4341756192155123102ull}},
+{{17465198137957725426ull, 2898869296158595834ull,
+ 14730711269250729132ull, 2713597620096951938ull}},
+{{12608125635592380974ull, 3623586620198244793ull,
+ 9190017049708635607ull, 3391997025121189923ull}},
+{{1925098989208312505ull, 18364541330529969704ull,
+ 6875835293708406604ull, 4239996281401487404ull}},
+{{1203186868255195316ull, 2254466294726455257ull,
+ 13520769095422529936ull, 2649997675875929627ull}},
+{{6115669603746382049ull, 2818082868408069071ull,
+ 12289275350850774516ull, 3312497094844912034ull}},
+{{3032900986255589657ull, 3522603585510086339ull,
+ 6138222151708692337ull, 4140621368556140043ull}},
+{{18036464180905601200ull, 13730842287012273721ull,
+ 1530545835604238758ull, 2587888355347587527ull}},
+{{8710522170849837788ull, 7940180821910566344ull,
+ 15748240349787462160ull, 3234860444184484408ull}},
+{{10888152713562297234ull, 9925226027388207930ull,
+ 1238556363524776084ull, 4043575555230605511ull}},
+{{11416781464403823676ull, 15426638303972405764ull,
+ 7691626754844066908ull, 2527234722019128444ull}},
+{{14270976830504779595ull, 836553806255955589ull,
+ 9614533443555083636ull, 3159043402523910555ull}},
+{{4003662982848810781ull, 1045692257819944487ull,
+ 7406480786016466641ull, 3948804253154888194ull}},
+{{9419818391921588594ull, 12182772707205935064ull,
+ 9240736509687679554ull, 2468002658221805121ull}},
+{{11774772989901985743ull, 6005093847152643022ull,
+ 16162606655536987347ull, 3085003322777256401ull}},
+{{5495094200522706370ull, 2894681290513415874ull,
+ 6368200264139070472ull, 3856254153471570502ull}},
+{{8046119893754079386ull, 1809175806570884921ull,
+ 17815183220369082757ull, 2410158845919731563ull}},
+{{14669335885619987136ull, 6873155776640994055ull,
+ 17657293007033965542ull, 3012698557399664454ull}},
+{{13724983838597596016ull, 17814816757656018377ull,
+ 12848244221937681119ull, 3765873196749580568ull}},
+{{1660585871482415654ull, 18051789501176093342ull,
+ 8030152638711050699ull, 2353670747968487855ull}},
+{{11299104376207795375ull, 17953050858042728773ull,
+ 5426004779961425470ull, 2942088434960609819ull}},
+{{288822414977580507ull, 13217941535698635159ull,
+ 2170819956524393934ull, 3677610543700762274ull}},
+{{14196086074004139346ull, 7299054882768518140ull,
+ 11936896982510268226ull, 4597013179625952842ull}},
+{{18095925833107362899ull, 9173595320157711741ull,
+ 12072246632496305545ull, 2873133237266220526ull}},
+{{8784849236102039912ull, 16078680168624527581ull,
+ 5866936253765606123ull, 3591416546582775658ull}},
+{{15592747563554937794ull, 15486664192353271572ull,
+ 16557042354061783462ull, 4489270683228469572ull}},
+{{522095190367060313ull, 5067479101793406829ull, 1124779434433838856ull,
+ 2805794177017793483ull}},
+{{5264305006386213296ull, 6334348877241758536ull,
+ 15241032348324462282ull, 3507242721272241853ull}},
+{{6580381257982766619ull, 17141308133406973978ull,
+ 5216232380123414140ull, 4384053401590302317ull}},
+{{8724424304666617041ull, 1489945546524582928ull,
+ 5565988246790827790ull, 2740033375993938948ull}},
+{{10905530380833271302ull, 11085803970010504468ull,
+ 6957485308488534737ull, 3425041719992423685ull}},
+{{13631912976041589127ull, 22196907230966873ull,
+ 13308542654038056326ull, 4281302149990529606ull}},
+{{1602416582384911348ull, 13848931122301518008ull,
+ 3706153140346397299ull, 2675813843744081004ull}},
+{{2003020727981139185ull, 12699477884449509606ull,
+ 4632691425432996624ull, 3344767304680101255ull}},
+{{11727147946831199790ull, 15874347355561887007ull,
+ 1179178263363857876ull, 4180959130850126569ull}},
+{{14246996494410581725ull, 698095060371403571ull,
+ 12266201460670880933ull, 2613099456781329105ull}},
+{{13197059599585839252ull, 5484304843891642368ull,
+ 1497693770556437454ull, 3266374320976661382ull}},
+{{16496324499482299065ull, 16078753091719328768ull,
+ 11095489250050322625ull, 4082967901220826727ull}},
+{{10310202812176436916ull, 3131691654683498624ull,
+ 13852209808922533497ull, 2551854938263016704ull}},
+{{12887753515220546144ull, 8526300586781761184ull,
+ 17315262261153166871ull, 3189818672828770880ull}},
+{{16109691894025682680ull, 6046189715049813576ull,
+ 3197333752731906973ull, 3987273341035963601ull}},
+{{10068557433766051675ull, 6084711581119827437ull,
+ 13527548641525911618ull, 2492045838147477250ull}},
+{{17197382810634952498ull, 16829261513254560104ull,
+ 7686063765052613714ull, 3115057297684346563ull}},
+{{3049984439584139006ull, 11813204854713424323ull,
+ 4995893687888379239ull, 3893821622105433204ull}},
+{{18047141339235944543ull, 14300782061836972057ull,
+ 12345805591785012832ull, 2433638513815895752ull}},
+{{8723868618762766967ull, 17875977577296215072ull,
+ 15432256989731266040ull, 3042048142269869690ull}},
+{{10904835773453458709ull, 3898227897910717224ull,
+ 10066949200309306743ull, 3802560177837337113ull}},
+{{6815522358408411693ull, 9353921463835280121ull,
+ 17821058296261786474ull, 2376600111148335695ull}},
+{{13131088966437902520ull, 2469029792939324343ull,
+ 17664636851899845189ull, 2970750138935419619ull}},
+{{11802175189619990246ull, 7697973259601543333ull,
+ 17469110046447418582ull, 3713437673669274524ull}},
+{{9682202502726187856ull, 199547268823576679ull, 1694821742174860806ull,
+ 2320898546043296578ull}},
+{{7491067109980346916ull, 9472806122884246657ull,
+ 11341899214573351815ull, 2901123182554120722ull}},
+{{13975519905902821549ull, 7229321635177920417ull,
+ 4954001981361913961ull, 3626403978192650903ull}},
+{{3634341827096363224ull, 13648338062399788426ull,
+ 1580816458275004547ull, 4533004972740813629ull}},
+{{6883149660362614919ull, 6224368279786173814ull,
+ 3293853295635571794ull, 2833128107963008518ull}},
+{{17827309112308044457ull, 17003832386587493075ull,
+ 13340688656399240550ull, 3541410134953760647ull}},
+{{17672450371957667667ull, 12031418446379590536ull,
+ 12064174802071662784ull, 4426762668692200809ull}},
+{{11045281482473542292ull, 7519636528987244085ull,
+ 622580223653707384ull, 2766726667932625506ull}},
+{{18418287871519315769ull, 9399545661234055106ull,
+ 10001597316421910038ull, 3458408334915781882ull}},
+{{13799487802544368903ull, 2526060039687793075ull,
+ 3278624608672611740ull, 4323010418644727353ull}},
+{{6318836867376536612ull, 10802159561659646480ull,
+ 13578355426488852097ull, 2701881511652954595ull}},
+{{7898546084220670765ull, 18114385470501946004ull,
+ 12361258264683677217ull, 3377351889566193244ull}},
+{{9873182605275838457ull, 8807923782845268793ull,
+ 15451572830854596522ull, 4221689861957741555ull}},
+{{17699954174365868796ull, 10116638382705680899ull,
+ 7351390010070428874ull, 2638556163723588472ull}},
+{{17513256699529948090ull, 3422425941527325316ull,
+ 9189237512588036093ull, 3298195204654485590ull}},
+{{3444826800702883497ull, 8889718445336544550ull,
+ 2263174853880269308ull, 4122744005818106988ull}},
+{{15988074805721465898ull, 14779446065190116151ull,
+ 10637856320529944125ull, 2576715003636316867ull}},
+{{15373407488724444468ull, 4639249526205481477ull,
+ 8685634382235042253ull, 3220893754545396084ull}},
+{{5381701305623391873ull, 10410747926184239751ull,
+ 10857042977793802816ull, 4026117193181745105ull}},
+{{10281092343655701777ull, 6506717453865149844ull,
+ 18314866907189596520ull, 2516323245738590690ull}},
+{{12851365429569627221ull, 8133396817331437305ull,
+ 13670211597132219842ull, 3145404057173238363ull}},
+{{2229148731679870314ull, 943373984809520824ull,
+ 12476078477987886899ull, 3931755071466547954ull}},
+{{1393217957299918946ull, 16730509805001808179ull,
+ 12409235067169817215ull, 2457346919666592471ull}},
+{{15576580501907062395ull, 16301451237824872319ull,
+ 10899857815534883615ull, 3071683649583240589ull}},
+{{14859039608956440089ull, 15765128028853702495ull,
+ 18236508287845992423ull, 3839604561979050736ull}},
+{{16204428783238856912ull, 16770734045674645915ull,
+ 11397817679903745264ull, 2399752851236906710ull}},
+{{15643849960621183236ull, 2516673483383755778ull,
+ 5023900063024905773ull, 2999691064046133388ull}},
+{{10331440413921703237ull, 7757527872657082627ull,
+ 6279875078781132216ull, 3749613830057666735ull}},
+{{4151307249487370571ull, 4848454920410676642ull,
+ 10842450951879289491ull, 2343508643786041709ull}},
+{{14412506098713989022ull, 1448882632085957898ull,
+ 18164749708276499768ull, 2929385804732552136ull}},
+{{8792260586537710469ull, 1811103290107447373ull,
+ 4259193061636073094ull, 3661732255915690171ull}},
+{{15602011751599525990ull, 11487251149489085024ull,
+ 712305308617703463ull, 4577165319894612714ull}},
+{{9751257344749703744ull, 14097060996071759996ull,
+ 5056876836313452568ull, 2860728324934132946ull}},
+{{12189071680937129680ull, 17621326245089699995ull,
+ 15544468082246591518ull, 3575910406167666182ull}},
+{{10624653582744024196ull, 12803285769507349186ull,
+ 10207213065953463590ull, 4469888007709582728ull}},
+{{11252094507642403027ull, 3390367587514705337ull,
+ 6379508166220914744ull, 2793680004818489205ull}},
+{{230060079270840071ull, 4237959484393381672ull,
+ 12586071226203531334ull, 3492100006023111506ull}},
+{{287575099088550089ull, 14520821392346502898ull,
+ 6509216995899638359ull, 4365125007528889383ull}},
+{{4791420455357731710ull, 15993042397857646167ull,
+ 10985789650078355830ull, 2728203129705555864ull}},
+{{1377589550769776733ull, 10767930960467281901ull,
+ 13732237062597944788ull, 3410253912131944830ull}},
+{{6333672956889608820ull, 13459913700584102376ull,
+ 7941924291392655177ull, 4262817390164931038ull}},
+{{3958545598056005513ull, 1494917035223982129ull, 352016663693021582ull,
+ 2664260868853081899ull}},
+{{9559868015997394795ull, 11092018330884753469ull,
+ 14275078884898440689ull, 3330326086066352373ull}},
+{{16561521038424131397ull, 29964858323778124ull, 4008790550840887150ull,
+ 4162907607582940467ull}},
+{{1127578612160306316ull, 13853786091734525040ull,
+ 199651085061860516ull, 2601817254739337792ull}},
+{{1409473265200382894ull, 17317232614668156300ull,
+ 249563856327325645ull, 3252271568424172240ull}},
+{{1761841581500478618ull, 7811482713053031663ull, 311954820409157057ull,
+ 4065339460530215300ull}},
+{{8018680016078880992ull, 16411391741726614549ull,
+ 9418343799610498968ull, 2540837162831384562ull}},
+{{14635036038525989144ull, 2067495603448716570ull,
+ 2549557712658347903ull, 3176046453539230703ull}},
+{{9070423011302710622ull, 16419427559593059425ull,
+ 17022005196105098590ull, 3970058066924038378ull}},
+{{17198229428132663899ull, 5650456206318274236ull,
+ 15250439265993074523ull, 2481286291827523986ull}},
+{{3051042711456278258ull, 2451384239470454892ull,
+ 9839677045636567346ull, 3101607864784404983ull}},
+{{3813803389320347822ull, 12287602336192844423ull,
+ 7687910288618321278ull, 3877009830980506229ull}},
+{{9301156145966299245ull, 3068065441693139860ull,
+ 7110786939600144751ull, 2423131144362816393ull}},
+{{11626445182457874056ull, 17670139857398588537ull,
+ 13500169692927568842ull, 3028913930453520491ull}},
+{{697998422790178858ull, 12864302784893459864ull,
+ 12263526097732073149ull, 3786142413066900614ull}},
+{{436249014243861786ull, 10346032249772106367ull,
+ 3053017792655157814ull, 2366339008166812884ull}},
+{{14380369323086990945ull, 3709168275360357150ull,
+ 3816272240818947268ull, 2957923760208516105ull}},
+{{8752089617003962873ull, 4636460344200446438ull,
+ 9382026319451071989ull, 3697404700260645131ull}},
+{{858369992200088892ull, 5203630724338972976ull, 3557923440443226041ull,
+ 2310877937662903207ull}},
+{{1072962490250111115ull, 11116224423851104124ull,
+ 18282462355836196263ull, 2888597422078629008ull}},
+{{1341203112812638893ull, 9283594511386492251ull,
+ 4406333871085693713ull, 3610746777598286261ull}},
+{{15511561946297962328ull, 16216179157660503217ull,
+ 10119603357284505045ull, 4513433471997857826ull}},
+{{2777197188795144599ull, 12440954982751508463ull,
+ 10936438116730203557ull, 2820895919998661141ull}},
+{{17306554541276094461ull, 1716135673157221866ull,
+ 18282233664340142351ull, 3526119899998326426ull}},
+{{12409821139740342268ull, 15980227646728691045ull,
+ 13629420043570402130ull, 4407649874997908033ull}},
+{{10061981221551407870ull, 14599328297632819807ull,
+ 1600858499590419475ull, 2754781171873692521ull}},
+{{7965790508511871933ull, 13637474353613636855ull,
+ 6612759142915412248ull, 3443476464842115651ull}},
+{{5345552117212452012ull, 17046842942017046069ull,
+ 3654262910216877406ull, 4304345581052644564ull}},
+{{5646813082471476460ull, 6042590820333265889ull,
+ 11507286355740324187ull, 2690215988157902852ull}},
+{{11670202371516733479ull, 2941552506989194457ull,
+ 14384107944675405234ull, 3362769985197378565ull}},
+{{752694909113753136ull, 12900312670591268880ull,
+ 4145076875562092830ull, 4203462481496723207ull}},
+{{470434318196095710ull, 3451009400692155146ull, 9508202074867389875ull,
+ 2627164050935452004ull}},
+{{9811414934599895446ull, 18148819806147357644ull,
+ 11885252593584237343ull, 3283955063669315005ull}},
+{{12264268668249869307ull, 18074338739256809151ull,
+ 1021507686698132967ull, 4104943829586643757ull}},
+{{14582696945297250173ull, 18213990739676587575ull,
+ 2944285313400027056ull, 2565589893491652348ull}},
+{{13616685163194174812ull, 4320744350886182853ull,
+ 3680356641750033821ull, 3206987366864565435ull}},
+{{3185798398710554803ull, 10012616457035116471ull,
+ 18435503857469705988ull, 4008734208580706793ull}},
+{{8908653026835178608ull, 15481257322501723602ull,
+ 4604660883277484386ull, 2505458880362941746ull}},
+{{1912444246689197452ull, 10128199616272378695ull,
+ 14979198140951631291ull, 3131823600453677182ull}},
+{{16225613363643660527ull, 8048563501913085464ull,
+ 9500625639334763306ull, 3914779500567096478ull}},
+{{10141008352277287830ull, 9642038207123066319ull,
+ 1326205006156839162ull, 2446737187854435299ull}},
+{{8064574421919221883ull, 2829175722049057091ull,
+ 15492814312978212665ull, 3058421484818044123ull}},
+{{5469032008971639450ull, 8148155670988709268ull,
+ 14754331872795377927ull, 3823026856022555154ull}},
+{{12641517042462050464ull, 12010126322009025148ull,
+ 13833143438924499108ull, 2389391785014096971ull}},
+{{15801896303077563080ull, 15012657902511281435ull,
+ 12679743280228235981ull, 2986739731267621214ull}},
+{{15140684360419565946ull, 4930764322856938082ull,
+ 6626307063430519169ull, 3733424664084526518ull}},
+{{14074613743689616620ull, 14610942747854056061ull,
+ 17976499969926238192ull, 2333390415052829073ull}},
+{{3758209124329857063ull, 18263678434817570077ull,
+ 8635566907125634028ull, 2916738018816036342ull}},
+{{9309447423839709233ull, 4382853969812410980ull,
+ 1571086597052266728ull, 3645922523520045428ull}},
+{{11636809279799636541ull, 5478567462265513725ull,
+ 1963858246315333410ull, 4557403154400056785ull}},
+{{9578848809088466791ull, 8035790682343333982ull,
+ 12756626450015553141ull, 2848376971500035490ull}},
+{{2750188974505807680ull, 14656424371356555382ull,
+ 6722411025664665618ull, 3560471214375044363ull}},
+{{12661108254987035408ull, 9097158427340918419ull,
+ 3791327763653444119ull, 4450589017968805454ull}},
+{{5607349650153203178ull, 12603253044729155868ull,
+ 16204637907565566286ull, 2781618136230503408ull}},
+{{7009187062691503973ull, 6530694269056669027ull,
+ 1809053310747406242ull, 3477022670288129261ull}},
+{{4149797809936992062ull, 17386739873175612092ull,
+ 6873002656861645706ull, 4346278337860161576ull}},
+{{11816995668065395847ull, 15478398439162145461ull,
+ 4295626660538528566ull, 2716423961162600985ull}},
+{{936186529799581096ull, 10124626012097906019ull,
+ 9981219344100548612ull, 3395529951453251231ull}},
+{{15005291217531640082ull, 12655782515122382523ull,
+ 7864838161698297861ull, 4244412439316564039ull}},
+{{7072464001743581099ull, 10215707081165183029ull,
+ 11833052878702518019ull, 2652757774572852524ull}},
+{{13452266020606864278ull, 8157947833029090882ull,
+ 14791316098378147524ull, 3315947218216065655ull}},
+{{7591960488903804540ull, 10197434791286363603ull,
+ 13877459104545296501ull, 4144934022770082069ull}},
+{{2439132296351183885ull, 8679239753767671204ull,
+ 10979254949554504265ull, 2590583764231301293ull}},
+{{3048915370438979857ull, 15460735710636976909ull,
+ 18335754705370518235ull, 3238229705289126616ull}},
+{{8422830231476112725ull, 14714233619868833232ull,
+ 4472949308003596178ull, 4047787131611408271ull}},
+{{5264268894672570453ull, 13808082030845408674ull,
+ 9713122345143329467ull, 2529866957257130169ull}},
+{{15803708155195488874ull, 12648416520129372938ull,
+ 16753088949856549738ull, 3162333696571412711ull}},
+{{10531263157139585285ull, 6587148613306940365ull,
+ 16329675168893299269ull, 3952917120714265889ull}},
+{{8887882482425934755ull, 6422810892530531680ull,
+ 3288517952917230187ull, 2470573200446416181ull}},
+{{11109853103032418444ull, 3416827597235776696ull,
+ 8722333459573925638ull, 3088216500558020226ull}},
+{{13887316378790523055ull, 13494406533399496678ull,
+ 1679544787612631239ull, 3860270625697525283ull}},
+{{4067886718316689005ull, 15351533111015767280ull,
+ 17190616556753752188ull, 2412669141060953301ull}},
+{{5084858397895861257ull, 742672315060157484ull, 7653212640660026524ull,
+ 3015836426326191627ull}},
+{{6356072997369826571ull, 928340393825196855ull, 4954829782397645251ull,
+ 3769795532907739534ull}},
+{{10890074650997223463ull, 16721113810636605698ull,
+ 16931826669280691993ull, 2356122208067337208ull}},
+{{4389221276891753520ull, 7066334208013593411ull,
+ 2718039262891313376ull, 2945152760084171511ull}},
+{{874840577687303996ull, 8832917760016991764ull,
+ 17232607133896305432ull, 3681440950105214388ull}},
+{{1093550722109129995ull, 11041147200021239705ull,
+ 3094014843660830174ull, 4601801187631517986ull}},
+{{12212684247386676007ull, 2289030981585886911ull,
+ 6545445295715406763ull, 2876125742269698741ull}},
+{{10654169290805957105ull, 16696346782264522351ull,
+ 12793492638071646357ull, 3595157177837123426ull}},
+{{8706025595080058477ull, 7035375422548489227ull,
+ 6768493760734782139ull, 4493946472296404283ull}},
+{{3135422987711342596ull, 2091266629879111815ull,
+ 1924465591245544885ull, 2808716545185252677ull}},
+{{17754336789921341957ull, 7225769305776277672ull,
+ 7017268007484319010ull, 3510895681481565846ull}},
+{{3746176913692125831ull, 18255583669075122899ull,
+ 17994957046210174570ull, 4388619601851957307ull}},
+{{35517561843884692ull, 16021425811599339716ull, 8941005144667665154ull,
+ 2742887251157473317ull}},
+{{44396952304855865ull, 10803410227644398837ull,
+ 15787942449261969347ull, 3428609063946841646ull}},
+{{4667182208808457735ull, 8892576766128110642ull,
+ 10511556024722685876ull, 4285761329933552058ull}},
+{{7528674898932673989ull, 14781232515684844959ull,
+ 11181408533879066576ull, 2678600831208470036ull}},
+{{4799157605238454582ull, 29796570896504583ull, 13976760667348833221ull,
+ 3348251039010587545ull}},
+{{1387260988120680323ull, 4648931732048018633ull,
+ 3635892778903877814ull, 4185313798763234432ull}},
+{{12396253163643894962ull, 16740640387812175357ull,
+ 2272432986814923633ull, 2615821124227021520ull}},
+{{1660258399272704991ull, 7090742429483055485ull,
+ 2840541233518654542ull, 3269776405283776900ull}},
+{{6687009017518269142ull, 18086800073708595164ull,
+ 3550676541898318177ull, 4087220506604721125ull}},
+{{13402752672803694022ull, 4386721018426790121ull,
+ 4525015847900142813ull, 2554512816627950703ull}},
+{{2918382785722453815ull, 10095087291460875556ull,
+ 1044583791447790612ull, 3193141020784938379ull}},
+{{3647978482153067269ull, 12618859114326094445ull,
+ 15140787794591901977ull, 3991426275981172973ull}},
+{{4585829560559360995ull, 969257918812727172ull,
+ 11768835380833632688ull, 2494641422488233108ull}},
+{{5732286950699201244ull, 1211572398515908965ull,
+ 14711044226042040860ull, 3118301778110291385ull}},
+{{11777044706801389459ull, 1514465498144886206ull,
+ 4553747227270387363ull, 3897877222637864232ull}},
+{{2748966923323480508ull, 17087442000836411543ull,
+ 2846092017043992101ull, 2436173264148665145ull}},
+{{17271266709436514347ull, 7524244445763350716ull,
+ 8169301039732378031ull, 3045216580185831431ull}},
+{{3142339313086091318ull, 4793619538776800492ull,
+ 5599940281238084635ull, 3806520725232289289ull}},
+{{11187334107533582882ull, 690169202521806355ull,
+ 15029177721842272657ull, 2379075453270180805ull}},
+{{9372481615989590698ull, 5474397521579645848ull,
+ 4951414097020677109ull, 2973844316587726007ull}},
+{{11715602019986988372ull, 11454682920401945214ull,
+ 1577581602848458482ull, 3717305395734657509ull}},
+{{2710565244064479829ull, 11770862843678603663ull,
+ 3291831510993980503ull, 2323315872334160943ull}},
+{{17223264610362763498ull, 10101892536170866674ull,
+ 17949847444024639341ull, 2904144840417701178ull}},
+{{12305708726098678564ull, 17239051688640971247ull,
+ 13213937268176023368ull, 3630181050522126473ull}},
+{{10770449889195960301ull, 3102070537091662443ull,
+ 2682363529937865499ull, 4537726313152658092ull}},
+{{4425688171533781237ull, 18079695150178146691ull,
+ 10899849243065941744ull, 2836078945720411307ull}},
+{{920424195989838642ull, 4152874864013131748ull, 9013125535405039277ull,
+ 3545098682150514134ull}},
+{{1150530244987298302ull, 9802779598443802589ull,
+ 2043034882401523288ull, 4431373352688142668ull}},
+{{3024924412330755391ull, 6126737249027376618ull,
+ 10500268838355727863ull, 2769608345430089167ull}},
+{{13004527552268220046ull, 3046735542856832868ull,
+ 8513650029517271925ull, 3462010431787611459ull}},
+{{16255659440335275058ull, 8420105446998428989ull,
+ 6030376518469202002ull, 4327513039734514324ull}},
+{{12465630159423240863ull, 9874251922801406022ull,
+ 12992357360898027059ull, 2704695649834071452ull}},
+{{6358665662424275271ull, 7731128885074369624ull,
+ 16240446701122533824ull, 3380869562292589315ull}},
+{{7948332078030344089ull, 9663911106342962030ull,
+ 15688872357975779376ull, 4226086952865736644ull}},
+{{356021530341577152ull, 6039944441464351269ull, 582173186880086302ull,
+ 2641304345541085403ull}},
+{{5056712931354359343ull, 16773302588685214894ull,
+ 14562774538882271589ull, 3301630431926356753ull}},
+{{15544263201047724987ull, 7131570180574354905ull,
+ 4368410118320675775ull, 4127038039907945942ull}},
+{{2797635473013746261ull, 11374760390500053672ull,
+ 16565314379232586071ull, 2579398774942466213ull}},
+{{3497044341267182826ull, 9606764469697679186ull,
+ 6871584918758568877ull, 3224248468678082767ull}},
+{{13594677463438754341ull, 16620141605549486886ull,
+ 3977795130020823192ull, 4030310585847603459ull}},
+{{3884987396221833559ull, 10387588503468429304ull,
+ 180278947049320543ull, 2518944116154752162ull}},
+{{4856234245277291949ull, 8372799610908148726ull,
+ 9448720720666426487ull, 3148680145193440202ull}},
+{{15293664843451390744ull, 5854313495207798003ull,
+ 2587528863978257301ull, 3935850181491800253ull}},
+{{7252697517943425263ull, 5964788943718567704ull,
+ 3923048549200104765ull, 2459906363432375158ull}},
+{{9065871897429281579ull, 12067672198075597534ull,
+ 14127182723354906764ull, 3074882954290468947ull}},
+{{2108967834931826165ull, 15084590247594496918ull,
+ 13047292385766245551ull, 3843603692863086184ull}},
+{{15153162952114555066ull, 16345397932387642429ull,
+ 8154557741103903469ull, 2402252308039428865ull}},
+{{5106395634861030120ull, 6596689360202389325ull,
+ 14804883194807267241ull, 3002815385049286081ull}},
+{{10994680562003675554ull, 12857547718680374560ull,
+ 4671045938226920339ull, 3753519231311607602ull}},
+{{6871675351252297221ull, 5730124314961540148ull,
+ 7531089729819213116ull, 2345949519569754751ull}},
+{{8589594189065371526ull, 7162655393701925185ull,
+ 4802176143846628491ull, 2932436899462193439ull}},
+{{15348678754759102312ull, 4341633223700018577ull,
+ 1391034161380897710ull, 3665546124327741799ull}},
+{{5350790388166714178ull, 14650413566479799030ull,
+ 15573850757008285849ull, 4581932655409677248ull}},
+{{17179302047886360073ull, 2238979451408792537ull,
+ 9733656723130178656ull, 2863707909631048280ull}},
+{{7639069504575786379ull, 2798724314260990672ull,
+ 12167070903912723320ull, 3579634887038810350ull}},
+{{9548836880719732974ull, 3498405392826238340ull,
+ 5985466593036128342ull, 4474543608798512938ull}},
+{{15191395087304608917ull, 16021561425798562674ull,
+ 8352602639074968117ull, 2796589755499070586ull}},
+{{9765871822275985338ull, 6191893726966039631ull,
+ 1217381261988934339ull, 3495737194373838233ull}},
+{{7595653759417593769ull, 3128181140280161635ull,
+ 6133412595913555828ull, 4369671492967297791ull}},
+{{2441440590422302154ull, 11178485249529876830ull,
+ 10750911900087054248ull, 2731044683104561119ull}},
+{{12275172774882653500ull, 13973106561912346037ull,
+ 8826953856681429906ull, 3413805853880701399ull}},
+{{1508907913321153163ull, 8243011165535656739ull,
+ 6422006302424399479ull, 4267257317350876749ull}},
+{{17083968510321578391ull, 12069411006100867317ull,
+ 6319596948228943626ull, 2667035823344297968ull}},
+{{7519902582619809276ull, 5863391720771308339ull,
+ 7899496185286179533ull, 3333794779180372460ull}},
+{{4788192209847373691ull, 11940925669391523328ull,
+ 9874370231607724416ull, 4167243473975465575ull}},
+{{2992620131154608557ull, 7463078543369702080ull,
+ 13089010422395909616ull, 2604527171234665984ull}},
+{{3740775163943260697ull, 9328848179212127600ull,
+ 16361263027994887020ull, 3255658964043332480ull}},
+{{4675968954929075871ull, 11661060224015159500ull,
+ 2004834711284057159ull, 4069573705054165601ull}},
+{{12145852633685448227ull, 14205691667650556543ull,
+ 12782236740621005484ull, 2543483565658853500ull}},
+{{10570629773679422380ull, 17757114584563195679ull,
+ 15977795925776256855ull, 3179354457073566875ull}},
+{{8601601198671890071ull, 17584707212276606695ull,
+ 15360558888792933165ull, 3974193071341958594ull}},
+{{12293529776811013150ull, 13296285016886573136ull,
+ 14212035323922971132ull, 2483870669588724121ull}},
+{{15366912221013766438ull, 16620356271108216420ull,
+ 3929986099621550203ull, 3104838336985905152ull}},
+{{761896202557656431ull, 16163759320457882622ull,
+ 4912482624526937754ull, 3881047921232381440ull}},
+{{14311243181880698982ull, 14714035593713564542ull,
+ 3070301640329336096ull, 2425654950770238400ull}},
+{{8665681940496097919ull, 18392544492141955678ull,
+ 3837877050411670120ull, 3032068688462798000ull}},
+{{1608730388765346591ull, 4543936541467892982ull,
+ 4797346313014587651ull, 3790085860578497500ull}},
+{{14840514548260505331ull, 534117329203739161ull,
+ 12221713482488893090ull, 2368803662861560937ull}},
+{{4715585130043467952ull, 9891018698359449760ull,
+ 1442083797828952650ull, 2961004578576951172ull}},
+{{5894481412554334940ull, 3140401336094536392ull,
+ 1802604747286190813ull, 3701255723221188965ull}},
+{{3684050882846459338ull, 4268593844272779197ull,
+ 3432470976267563210ull, 2313284827013243103ull}},
+{{9216749621985462076ull, 14559114342195749804ull,
+ 18125646775616617724ull, 2891606033766553878ull}},
+{{11520937027481827595ull, 18198892927744687255ull,
+ 13433686432665996347ull, 3614507542208192348ull}},
+{{9789485265924896590ull, 18136930141253471165ull,
+ 16792108040832495434ull, 4518134427760240435ull}},
+{{8424271300416754321ull, 15947267356710807382ull,
+ 8189224516306615694ull, 2823834017350150272ull}},
+{{1306967088666167093ull, 10710712159033733420ull,
+ 10236530645383269618ull, 3529792521687687840ull}},
+{{1633708860832708866ull, 4165018161937390967ull,
+ 12795663306729087023ull, 4412240652109609800ull}},
+{{7938597065661524897ull, 9520665378851951210ull,
+ 7997289566705679389ull, 2757650407568506125ull}},
+{{699874295222130313ull, 16512517741992326917ull,
+ 14608297976809487140ull, 3447063009460632656ull}},
+{{5486528887455050796ull, 2193903103780857030ull,
+ 18260372471011858926ull, 4308828761825790820ull}},
+{{17264138609941570459ull, 15206247495145199355ull,
+ 2189360757527636020ull, 2693017976141119263ull}},
+{{16968487243999575170ull, 561065295221947578ull,
+ 16571759002191708738ull, 3366272470176399078ull}},
+{{11987237018144693155ull, 9924703655882210281ull,
+ 11491326715884860114ull, 4207840587720498848ull}},
+{{574494108699351366ull, 10814625803353769330ull,
+ 7182079197428037571ull, 2629900367325311780ull}},
+{{9941489672728965015ull, 8906596235764823758ull,
+ 8977598996785046964ull, 3287375459156639725ull}},
+{{3203490054056430461ull, 11133245294706029698ull,
+ 15833684764408696609ull, 4109219323945799656ull}},
+{{6613867302212656942ull, 40749281550186705ull, 9896052977755435381ull,
+ 2568262077466124785ull}},
+{{12879020146193209082ull, 4662622620365121285ull,
+ 16981752240621682130ull, 3210327596832655981ull}},
+{{2263717127459347640ull, 15051650312311177415ull,
+ 7392132245494938950ull, 4012909496040819977ull}},
+{{8332352232303174131ull, 4795595426767097980ull,
+ 16149297699502806604ull, 2508068435025512485ull}},
+{{10415440290378967664ull, 5994494283458872475ull,
+ 6351564069096344543ull, 3135085543781890607ull}},
+{{8407614344546321676ull, 2881431835896202690ull,
+ 3327769067943042775ull, 3918856929727363259ull}},
+{{9866444983768838951ull, 8718423925076208537ull,
+ 18220756731960259398ull, 2449285581079602036ull}},
+{{16944742248138436593ull, 1674657869490484863ull,
+ 4329201841240772632ull, 3061606976349502546ull}},
+{{16569241791745657837ull, 2093322336863106079ull,
+ 14634874338405741598ull, 3827008720436878182ull}},
+{{17273305147482118005ull, 15143384515821605011ull,
+ 4535110443076200594ull, 2391880450273048864ull}},
+{{16979945415925259602ull, 9705858607922230456ull,
+ 5668888053845250743ull, 2989850562841311080ull}},
+{{2778187696197022886ull, 7520637241475400167ull,
+ 7086110067306563429ull, 3737313203551638850ull}},
+{{8653896337764221160ull, 7006241285135819056ull,
+ 9040504810493990047ull, 2335820752219774281ull}},
+{{10817370422205276450ull, 4146115587992385916ull,
+ 15912317031544875463ull, 2919775940274717851ull}},
+{{13521713027756595562ull, 570958466563094491ull,
+ 15278710271003706425ull, 3649719925343397314ull}},
+{{12290455266268356548ull, 5325384101631256018ull,
+ 9875015801899857223ull, 4562149906679246643ull}},
+{{12293220559845110747ull, 10245894091160616867ull,
+ 3866041866973716812ull, 2851343691674529152ull}},
+{{10754839681379000529ull, 12807367613950771084ull,
+ 4832552333717146015ull, 3564179614593161440ull}},
+{{13443549601723750662ull, 11397523499011075951ull,
+ 6040690417146432519ull, 4455224518241451800ull}},
+{{15319747528718426020ull, 14040981214523004325ull,
+ 3775431510716520324ull, 2784515323900907375ull}},
+{{5314626355615868813ull, 17551226518153755407ull,
+ 107603369968262501ull, 3480644154876134219ull}},
+{{2031596926092448112ull, 8103975092410030547ull,
+ 13969562267742491839ull, 4350805193595167773ull}},
+{{17410649143303637734ull, 11982513460397350947ull,
+ 11036819426552751351ull, 2719253245996979858ull}},
+{{17151625410702159263ull, 10366455807069300780ull,
+ 4572652246336163381ull, 3399066557496224823ull}},
+{{2992787689668147463ull, 17569755777264013880ull,
+ 1104129289492816322ull, 4248833196870281029ull}},
+{{1870492306042592165ull, 15592783379217396579ull,
+ 2995923815146704153ull, 2655520748043925643ull}},
+{{16173173437835403918ull, 5655921168739582011ull,
+ 17579962824215543904ull, 3319400935054907053ull}},
+{{15604780778866866993ull, 7069901460924477514ull,
+ 8139895474987266168ull, 4149251168818633817ull}},
+{{14364674005219179775ull, 4418688413077798446ull,
+ 16616649717935511115ull, 2593281980511646135ull}},
+{{8732470469669198910ull, 911674497919860154ull,
+ 16159126128992000990ull, 3241602475639557669ull}},
+{{1692216050231722830ull, 10362965159254601001ull,
+ 6363849605957837525ull, 4052003094549447087ull}},
+{{12586850077463296529ull, 8782696233747819577ull,
+ 10894935031364730309ull, 2532501934093404429ull}},
+{{1898504541546956949ull, 15590056310612162376ull,
+ 18230354807633300790ull, 3165627417616755536ull}},
+{{2373130676933696186ull, 10264198351410427162ull,
+ 4341199435832074372ull, 3957034272020944421ull}},
+{{6094892691510948020ull, 15638496006486292784ull,
+ 5019092656608740434ull, 2473146420013090263ull}},
+{{7618615864388685025ull, 10324747971253090172ull,
+ 1662179802333537639ull, 3091433025016362829ull}},
+{{9523269830485856282ull, 8294248945638974811ull,
+ 6689410771344309953ull, 3864291281270453536ull}},
+{{3646200634839966224ull, 16713120637092829017ull,
+ 4180881732090193720ull, 2415182050794033460ull}},
+{{9169436811977345684ull, 2444656722656484655ull,
+ 5226102165112742151ull, 3018977563492541825ull}},
+{{6850109996544294201ull, 16890878958602769531ull,
+ 11144313724818315592ull, 3773721954365677281ull}},
+{{1975475738626489924ull, 10556799349126730957ull, 47667050370365389ull,
+ 2358576221478548301ull}},
+{{7081030691710500309ull, 17807685204835801600ull,
+ 4671269831390344640ull, 2948220276848185376ull}},
+{{8851288364638125386ull, 3812862432335200384ull,
+ 5839087289237930801ull, 3685275346060231720ull}},
+{{11064110455797656732ull, 9377764058846388384ull,
+ 7298859111547413501ull, 4606594182575289650ull}},
+{{6915069034873535458ull, 8166945545992686692ull,
+ 9173472963144521342ull, 2879121364109556031ull}},
+{{8643836293591919322ull, 985309895636082557ull, 6855155185503263774ull,
+ 3598901705136945039ull}},
+{{15416481385417287056ull, 10455009406399879004ull,
+ 3957257963451691813ull, 4498627131421181299ull}},
+{{411928829031028602ull, 8840223888213618330ull, 167443217943613431ull,
+ 2811641957138238312ull}},
+{{9738283073143561561ull, 6438593841839635008ull, 209304022429516789ull,
+ 3514552446422797890ull}},
+{{12172853841429451951ull, 12659928320726931664ull,
+ 9485002064891671794ull, 4393190558028497362ull}},
+{{7608033650893407470ull, 12524141218881720194ull,
+ 10539812308984682775ull, 2745744098767810851ull}},
+{{286670026761983529ull, 11043490505174762339ull,
+ 8563079367803465565ull, 3432180123459763564ull}},
+{{14193395588734643123ull, 18416049149895840827ull,
+ 10703849209754331956ull, 4290225154324704455ull}},
+{{6565029233745458000ull, 2286658681830124709ull,
+ 13607434783737539329ull, 2681390721452940284ull}},
+{{12817972560609210404ull, 7470009370715043790ull,
+ 17009293479671924161ull, 3351738401816175355ull}},
+{{6799093663906737197ull, 13949197731821192642ull,
+ 16649930831162517297ull, 4189673002270219194ull}},
+{{8861119558369098652ull, 1800719554747163545ull,
+ 15017892787903961215ull, 2618545626418886996ull}},
+{{15688085466388761219ull, 16085957498716118143ull,
+ 325621911170399902ull, 3273182033023608746ull}},
+{{14998420814558563620ull, 10884074836540371871ull,
+ 9630399425817775686ull, 4091477541279510932ull}},
+{{16291542036740184118ull, 2190860754410344515ull,
+ 15242371677990885612ull, 2557173463299694332ull}},
+{{15752741527497842244ull, 2738575943012930644ull,
+ 606220523779055399ull, 3196466829124617916ull}},
+{{1244182835662751189ull, 17258277984048327018ull,
+ 757775654723819248ull, 3995583536405772395ull}},
+{{5389300290716607397ull, 10786423740030204386ull,
+ 16614510848698244694ull, 2497239710253607746ull}},
+{{15959997400250535054ull, 4259657638182979674ull,
+ 11544766524018030060ull, 3121549637817009683ull}},
+{{10726624713458393010ull, 5324572047728724593ull,
+ 9819272136595149671ull, 3901937047271262104ull}},
+{{18233355491979965391ull, 10245386557471534726ull,
+ 6137045085371968544ull, 2438710654544538815ull}},
+{{13568322328120180931ull, 12806733196839418408ull,
+ 3059620338287572776ull, 3048388318180673519ull}},
+{{16960402910150226164ull, 16008416496049273010ull,
+ 17659583478141629682ull, 3810485397725841898ull}},
+{{15211937837271279256ull, 14616946328458183535ull,
+ 15648925692265906455ull, 2381553373578651186ull}},
+{{14403236278161711166ull, 13659496892145341515ull,
+ 10337785078477607261ull, 2976941716973313983ull}},
+{{13392359329274751054ull, 3239313059899513182ull,
+ 8310545329669621173ull, 3721177146216642479ull}},
+{{3758538562369331505ull, 4330413671650889691ull,
+ 12111619858684595089ull, 2325735716385401549ull}},
+{{86487184534276477ull, 10024703107991000018ull, 1304466768073580149ull,
+ 2907169645481751937ull}},
+{{9331481017522621404ull, 17142564903416137926ull,
+ 6242269478519363090ull, 3633962056852189921ull}},
+{{2440979235048500947ull, 12204834092415396600ull,
+ 12414522866576591767ull, 4542452571065237401ull}},
+{{1525612021905313092ull, 14545550335400704731ull,
+ 841547763969287998ull, 2839032856915773376ull}},
+{{15742073082663805077ull, 8958565882396105105ull,
+ 1051934704961609998ull, 3548791071144716720ull}},
+{{5842533298047592634ull, 1974835316140355574ull,
+ 1314918381202012498ull, 4435988838930895900ull}},
+{{17486641366561909109ull, 5845958091015110137ull,
+ 10045196025106033619ull, 2772493024331809937ull}},
+{{8023243652920222674ull, 2695761595341499768ull,
+ 17168181049809929928ull, 3465616280414762421ull}},
+{{10029054566150278342ull, 3369701994176874710ull,
+ 7625168256980248698ull, 4332020350518453027ull}},
+{{1656473085416536060ull, 6717749764787934598ull,
+ 2459887151398961484ull, 2707512719074033142ull}},
+{{11293963393625445883ull, 8397187205984918247ull,
+ 12298230976103477663ull, 3384390898842541427ull}},
+{{9505768223604419449ull, 5884797989053759905ull,
+ 10761102701701959175ull, 4230488623553176784ull}},
+{{17470320185821231916ull, 10595527770799681796ull,
+ 6725689188563724484ull, 2644055389720735490ull}},
+{{3391156158566988279ull, 13244409713499602246ull,
+ 17630483522559431413ull, 3305069237150919362ull}},
+{{13462317235063511156ull, 2720454086592339095ull,
+ 12814732366344513459ull, 4131336546438649203ull}},
+{{15331477299555776329ull, 17841184868616069598ull,
+ 5703364719751626959ull, 2582085341524155752ull}},
+{{9940974587589944603ull, 17689795067342699094ull,
+ 7129205899689533699ull, 3227606676905194690ull}},
+{{3202846197632654946ull, 17500557815750985964ull,
+ 18134879411466692932ull, 4034508346131493362ull}},
+{{11225150910375185149ull, 1714476597989590419ull,
+ 15945985650594070987ull, 2521567716332183351ull}},
+{{9419752619541593532ull, 15978153802769151736ull,
+ 15320796044815200829ull, 3151959645415229189ull}},
+{{11774690774426991915ull, 6137634198179275958ull,
+ 5315937000736837325ull, 3939949556769036487ull}},
+{{2747495715589482043ull, 6141864383075741426ull,
+ 10239989653101605184ull, 2462468472980647804ull}},
+{{12657741681341628362ull, 7677330478844676782ull,
+ 12799987066377006480ull, 3078085591225809755ull}},
+{{6598805064822259644ull, 9596663098555845978ull,
+ 11388297814543870196ull, 3847606989032262194ull}},
+{{8735939183941300182ull, 15221286473452179544ull,
+ 11729372152517306776ull, 2404754368145163871ull}},
+{{10919923979926625227ull, 579864018105672814ull,
+ 10050029172219245567ull, 3005942960181454839ull}},
+{{4426532938053505726ull, 14559888077914254730ull,
+ 7950850446846669054ull, 3757428700226818549ull}},
+{{7378269104710828983ull, 4488244030269021302ull,
+ 7275124538492862111ull, 2348392937641761593ull}},
+{{18446208417743312037ull, 998619019408888723ull,
+ 13705591691543465543ull, 2935491172052201991ull}},
+{{18446074503751752142ull, 15083331829543274616ull,
+ 12520303596001944024ull, 3669363965065252489ull}},
+{{4610849055980138561ull, 407420713219541655ull, 1815321439720266319ull,
+ 4586704956331565612ull}},
+{{9799309687628668457ull, 7172166973403295390ull,
+ 10357947936679942257ull, 2866690597707228507ull}},
+{{3025765072681059763ull, 13576894735181507142ull,
+ 8335748902422539917ull, 3583363247134035634ull}},
+{{13005578377706100511ull, 3136060363694720215ull,
+ 1196314091173399089ull, 4479204058917544543ull}},
+{{15046015513707394676ull, 13489252773377669894ull,
+ 7665225334624456286ull, 2799502536823465339ull}},
+{{9584147355279467537ull, 7638193929867311560ull,
+ 4969845649853182454ull, 3499378171029331674ull}},
+{{11980184194099334421ull, 324370375479363642ull,
+ 15435679099171253876ull, 4374222713786664592ull}},
+{{12099301139739471917ull, 9426103521529378084ull,
+ 9647299436982033672ull, 2733889196116665370ull}},
+{{15124126424674339896ull, 11782629401911722605ull,
+ 2835752259372766282ull, 3417361495145831713ull}},
+{{5070099975560761158ull, 5504914715534877449ull,
+ 8156376342643345757ull, 4271701868932289641ull}},
+{{14698027530793945484ull, 5746414706422992357ull,
+ 16626950260220560858ull, 2669813668082681025ull}},
+{{4537476358210268143ull, 16406390419883516255ull,
+ 6948629769993537360ull, 3337267085103351282ull}},
+{{1060159429335447274ull, 2061243951144843703ull,
+ 17909159249346697509ull, 4171583856379189102ull}},
+{{7580128670975736403ull, 3594120478679221266ull,
+ 6581538512414298039ull, 2607239910236993189ull}},
+{{251788801864894695ull, 18327708653631190295ull,
+ 12838609158945260452ull, 3259049887796241486ull}},
+{{14149794057613282081ull, 4462891743329436252ull,
+ 6824889411826799758ull, 4073812359745301858ull}},
+{{18066993322863077109ull, 16624365394863061369ull,
+ 8877241900819137752ull, 2546132724840813661ull}},
+{{8748683598296682674ull, 2333712669869275096ull,
+ 15708238394451310095ull, 3182665906051017076ull}},
+{{10935854497870853342ull, 16752198892618757582ull,
+ 1188553919354586002ull, 3978332382563771346ull}},
+{{2223223042741895435ull, 15081810326314111393ull,
+ 5354532218024004155ull, 2486457739102357091ull}},
+{{7390714821854757198ull, 14240576889465251337ull,
+ 2081479254102617290ull, 3108072173877946364ull}},
+{{13850079545745834401ull, 8577349074976788363ull,
+ 2601849067628271613ull, 3885090217347432955ull}},
+{{6350456706877452549ull, 7666686181074186679ull,
+ 17767056731763527422ull, 2428181385842145596ull}},
+{{3326384865169427782ull, 359985689487957541ull, 3762076840994857662ull,
+ 3035226732302681996ull}},
+{{8769667099889172631ull, 9673354148714722734ull,
+ 4702596051243572077ull, 3794033415378352495ull}},
+{{869355919003344991ull, 8351689352160395661ull, 9856651559668314404ull,
+ 2371270884611470309ull}},
+{{5698380917181569142ull, 10439611690200494576ull,
+ 16932500468012780909ull, 2964088605764337886ull}},
+{{7122976146476961428ull, 17661200631178006124ull,
+ 11942253548161200328ull, 3705110757205422358ull}},
+{{13675232128402876700ull, 11038250394486253827ull,
+ 2852222449173362301ull, 2315694223253388974ull}},
+{{12482354142076207971ull, 18409499011535205188ull,
+ 12788650098321478684ull, 2894617779066736217ull}},
+{{15602942677595259964ull, 4565129690709454869ull,
+ 2150754567619684644ull, 3618272223833420272ull}},
+{{5668620291711911243ull, 5706412113386818587ull,
+ 2688443209524605805ull, 4522840279791775340ull}},
+{{1237044673106250575ull, 5872350580080455569ull,
+ 10903649042807654436ull, 2826775174869859587ull}},
+{{6157991859810201123ull, 7340438225100569461ull,
+ 9017875285082180141ull, 3533468968587324484ull}},
+{{12309175843190139307ull, 13787233799803099730ull,
+ 11272344106352725176ull, 4416836210734155605ull}},
+{{12304920920421224971ull, 8617021124876937331ull,
+ 9351058075684147187ull, 2760522631708847253ull}},
+{{10769465132099143310ull, 6159590387668783760ull,
+ 16300508613032571888ull, 3450653289636059066ull}},
+{{13461831415123929137ull, 7699487984585979700ull,
+ 11152263729435939052ull, 4313316612045073833ull}},
+{{17637016671307231519ull, 14035552027221013120ull,
+ 52635803256380051ull, 2695822882528171146ull}},
+{{3599526765424487783ull, 12932754015598878497ull,
+ 9289166790925250872ull, 3369778603160213932ull}},
+{{9111094475207997632ull, 16165942519498598121ull,
+ 11611458488656563590ull, 4212223253950267415ull}},
+{{17223649093073468280ull, 5492028056259235921ull,
+ 14174690583051434100ull, 2632639533718917134ull}},
+{{7694503311059671638ull, 6865035070324044902ull,
+ 8494991191959516817ull, 3290799417148646418ull}},
+{{394757101969813740ull, 13192979856332444032ull,
+ 1395366953094620213ull, 4113499271435808023ull}},
+{{246723188731133588ull, 10551455419421471472ull,
+ 7789633373325219489ull, 2570937044647380014ull}},
+{{308403985913916984ull, 17801005292704227244ull, 513669679801748553ull,
+ 3213671305809225018ull}},
+{{385504982392396230ull, 8416198560598120343ull, 9865459136606961500ull,
+ 4017089132261531272ull}},
+{{7158469641636329500ull, 14483496137228601022ull,
+ 6165911960379350937ull, 2510680707663457045ull}},
+{{18171459088900187683ull, 4269312116253587565ull,
+ 12319075968901576576ull, 3138350884579321306ull}},
+{{8879265805843070892ull, 5336640145316984457ull,
+ 6175472924272194912ull, 3922938605724151633ull}},
+{{17078756174720389067ull, 3335400090823115285ull,
+ 15388885623738591580ull, 2451836628577594770ull}},
+{{7513387163118322622ull, 4169250113528894107ull,
+ 10012734992818463667ull, 3064795785721993463ull}},
+{{4780047935470515374ull, 599876623483729730ull, 7904232722595691680ull,
+ 3830994732152491829ull}},
+{{7599215978096460013ull, 374922889677331081ull, 7245988460836001252ull,
+ 2394371707595307393ull}},
+{{14110705991047962920ull, 468653612096663851ull,
+ 13669171594472389469ull, 2992964634494134241ull}},
+{{13026696470382565746ull, 5197503033548217718ull,
+ 3251406437808323124ull, 3741205793117667802ull}},
+{{3529999275561715687ull, 12471811432822411882ull,
+ 6643815042057589856ull, 2338253620698542376ull}},
+{{13635871131306920417ull, 15589764291028014852ull,
+ 8304768802571987320ull, 2922817025873177970ull}},
+{{17044838914133650521ull, 1040461290075466949ull,
+ 1157588966360208343ull, 3653521282341472463ull}},
+{{7470990587384899439ull, 15135634667876497399ull,
+ 15282044263232424140ull, 4566901602926840578ull}},
+{{11586898144756644006ull, 236399630568035066ull,
+ 14162963682947652992ull, 2854313501829275361ull}},
+{{5260250644091029199ull, 295499538210043833ull, 3868646548402402528ull,
+ 3567891877286594202ull}},
+{{11186999323541174402ull, 369374422762554791ull,
+ 14059180222357778968ull, 4459864846608242752ull}},
+{{13909403604854315858ull, 230859014226596744ull,
+ 8786987638973611855ull, 2787415529130151720ull}},
+{{17386754506067894822ull, 14123631823065409642ull,
+ 10983734548717014818ull, 3484269411412689650ull}},
+{{12510071095730092719ull, 8431167741976986245ull,
+ 4506296149041492715ull, 4355336764265862063ull}},
+{{10124637444045001902ull, 2963636829521922451ull,
+ 9733964120792014803ull, 2722085477666163789ull}},
+{{8044110786628864473ull, 17539604092184566776ull,
+ 16779141169417406407ull, 3402606847082704736ull}},
+{{10055138483286080591ull, 17312819096803320566ull,
+ 2527182388062206393ull, 4253258558853380921ull}},
+{{1672775533626412466ull, 3902982907860993498ull,
+ 13108704038607348756ull, 2658286599283363075ull}},
+{{11314341453887791390ull, 4878728634826241872ull,
+ 11774194029831798041ull, 3322858249104203844ull}},
+{{14142926817359739237ull, 10710096811960190244ull,
+ 14717742537289747551ull, 4153572811380254805ull}},
+{{18062701297704612832ull, 13611339535116200758ull,
+ 11504432095019786171ull, 2595983007112659253ull}},
+{{13355004585275990231ull, 12402488400467863044ull,
+ 545482063492569002ull, 3244978758890824067ull}},
+{{16693755731594987789ull, 6279738463730052997ull,
+ 14516910634647874965ull, 4056223448613530083ull}},
+{{12739440341460561320ull, 6230679549044977075ull,
+ 6767226137441227901ull, 2535139655383456302ull}},
+{{11312614408398313746ull, 12400035454733609248ull,
+ 17682404708656310684ull, 3168924569229320377ull}},
+{{14140768010497892183ull, 15500044318417011560ull,
+ 8267947830538224643ull, 3961155711536650472ull}},
+{{8837980006561182614ull, 7381684689796938273ull,
+ 5167467394086390402ull, 2475722319710406545ull}},
+{{15659161026628866172ull, 3733825391397033ull, 11071020261035375907ull,
+ 3094652899638008181ull}},
+{{5738893228003919003ull, 13839725337021410004ull, 3717271012056171ull,
+ 3868316124547510227ull}},
+{{12810180304357225185ull, 6343985326424687300ull,
+ 16143224358878392771ull, 2417697577842193891ull}},
+{{16012725380446531481ull, 3318295639603471221ull,
+ 15567344430170603060ull, 3022121972302742364ull}},
+{{6180848670276000639ull, 4147869549504339027ull,
+ 1012436464003702209ull, 3777652465378427956ull}},
+{{1557187409708806448ull, 14121633514508681652ull,
+ 9856144826857089688ull, 2361032790861517472ull}},
+{{1946484262136008059ull, 17652041893135852065ull,
+ 12320181033571362110ull, 2951290988576896840ull}},
+{{7044791346097397978ull, 12841680329565039273ull,
+ 15400226291964202638ull, 3689113735721121050ull}},
+{{13417675201049135377ull, 6828728375101523283ull,
+ 10026910828100477490ull, 4611392169651401313ull}},
+{{6080203991442015659ull, 8879641252865839956ull,
+ 17796034313631268191ull, 2882120106032125820ull}},
+{{7600254989302519573ull, 6487865547654912041ull,
+ 3798298818329533623ull, 3602650132540157276ull}},
+{{14112004755055537370ull, 3498145916141252147ull,
+ 4747873522911917029ull, 4503312665675196595ull}},
+{{6514159962696016905ull, 4492184206801976544ull, 661577942606254191ull,
+ 2814570416046997872ull}},
+{{8142699953370021131ull, 1003544240075082776ull, 826972428257817739ull,
+ 3518213020058747340ull}},
+{{10178374941712526413ull, 15089488355376017182ull,
+ 1033715535322272173ull, 4397766275073434175ull}},
+{{1749798320142941104ull, 11736773231323704691ull,
+ 7563601237217501964ull, 2748603921920896359ull}},
+{{16022305955460840092ull, 14670966539154630863ull,
+ 4842815528094489551ull, 3435754902401120449ull}},
+{{15416196425898662211ull, 13727022155515900675ull,
+ 10665205428545499843ull, 4294693628001400561ull}},
+{{7329279756972969930ull, 6273545837983743970ull,
+ 18194968438909407162ull, 2684183517500875350ull}},
+{{18384971733070988221ull, 17065304334334455770ull,
+ 13520338511781983144ull, 3355229396876094188ull}},
+{{13757842629483959468ull, 2884886344208518097ull,
+ 16900423139727478931ull, 4194036746095117735ull}},
+{{1681122615786392812ull, 17943955029626181475ull,
+ 17480293489970756187ull, 2621272966309448584ull}},
+{{15936461325015154726ull, 17818257768605338939ull,
+ 3403622788753893618ull, 3276591207886810731ull}},
+{{15308890637841555504ull, 13049450173901897866ull,
+ 18089586541224530735ull, 4095739009858513413ull}},
+{{14179742667078360094ull, 15073435386329768022ull,
+ 13611834597479025661ull, 2559836881161570883ull}},
+{{8501306296993174309ull, 5006736177630046316ull,
+ 12403107228421394173ull, 3199796101451963604ull}},
+{{10626632871241467887ull, 10870106240464945799ull,
+ 15503884035526742716ull, 3999745126814954505ull}},
+{{13559174572166999285ull, 16017188437145366932ull,
+ 2772398494563132341ull, 2499840704259346566ull}},
+{{16948968215208749107ull, 6186427491149544953ull,
+ 12688870155058691235ull, 3124800880324183207ull}},
+{{7351152213728772671ull, 3121348345509543288ull,
+ 11249401675395976140ull, 3906001100405229009ull}},
+{{4594470133580482920ull, 11174214752798240363ull,
+ 113347019481403231ull, 2441250687753268131ull}},
+{{1131401648548215745ull, 9356082422570412550ull,
+ 13976741829633917751ull, 3051563359691585163ull}},
+{{10637624097540045490ull, 7083417009785627783ull,
+ 12859241268615009285ull, 3814454199614481454ull}},
+{{13566044088603610287ull, 6732978640329711316ull,
+ 3425339774456992899ull, 2384033874759050909ull}},
+{{16957555110754512859ull, 3804537281984751241ull,
+ 8893360736498629028ull, 2980042343448813636ull}},
+{{7361885833160977361ull, 4755671602480939052ull,
+ 11116700920623286285ull, 3725052929311017045ull}},
+{{13824550682580386659ull, 5278137760764280859ull,
+ 9253781084603247880ull, 2328158080819385653ull}},
+{{12669002334798095420ull, 6597672200955351074ull,
+ 16178912374181447754ull, 2910197601024232066ull}},
+{{6612880881642843467ull, 17470462288048964651ull,
+ 11000268430872033884ull, 3637747001280290083ull}},
+{{3654415083626166429ull, 3391333786351654198ull,
+ 9138649520162654452ull, 4547183751600362604ull}},
+{{16119067482548517730ull, 11342955653324559681ull,
+ 14935027986956434840ull, 2841989844750226627ull}},
+{{6313776297903483451ull, 14178694566655699602ull,
+ 14057098965268155646ull, 3552487305937783284ull}},
+{{17115592409234130121ull, 8499996171464848694ull,
+ 17571373706585194558ull, 4440609132422229105ull}},
+{{6085559237343943422ull, 700811588738142530ull, 4064579538974664743ull,
+ 2775380707763893191ull}},
+{{16830321083534705085ull, 14711072541204841874ull,
+ 469038405290943024ull, 3469225884704866489ull}},
+{{11814529317563605549ull, 18388840676506052343ull,
+ 5197984025041066684ull, 4336532355881083111ull}},
+{{14301609851118335324ull, 2269653385961506906ull,
+ 10166269043291748534ull, 2710332722425676944ull}},
+{{8653640277043143347ull, 12060438769306659441ull,
+ 12707836304114685667ull, 3387915903032096180ull}},
+{{15428736364731317088ull, 10463862443205936397ull,
+ 15884795380143357084ull, 4234894878790120225ull}},
+{{11948803237170767132ull, 15763286063858486056ull,
+ 3010468084948516321ull, 2646809299243825141ull}},
+{{14936004046463458915ull, 5869049524540943858ull,
+ 8374771124613033306ull, 3308511624054781426ull}},
+{{9446633021224547835ull, 16559683942530955631ull,
+ 1245091868911515824ull, 4135639530068476783ull}},
+{{12821674665906424253ull, 10349802464081847269ull,
+ 7695711445710779246ull, 2584774706292797989ull}},
+{{2192035277100866605ull, 3713881043247533279ull,
+ 14231325325565861962ull, 3230968382865997486ull}},
+{{16575102151658246968ull, 13865723340914192406ull,
+ 8565784620102551644ull, 4038710478582496858ull}},
+{{5747752826359016451ull, 17889449124926146062ull,
+ 9965301405991482681ull, 2524194049114060536ull}},
+{{16408063069803546371ull, 8526753350875518865ull,
+ 12456626757489353352ull, 3155242561392575670ull}},
+{{6675020781972269252ull, 10658441688594398582ull,
+ 6347411410006915882ull, 3944053201740719588ull}},
+{{18006946044014831995ull, 11273212073798887017ull,
+ 13190504168109098234ull, 2465033251087949742ull}},
+{{8673624499736376281ull, 4868143055393832964ull,
+ 7264758173281596985ull, 3081291563859937178ull}},
+{{10842030624670470352ull, 10696864837669679109ull,
+ 18304319753456772039ull, 3851614454824921472ull}},
+{{9082112149632737922ull, 13603069551184631299ull,
+ 11440199845910482524ull, 2407259034265575920ull}},
+{{6740954168613534498ull, 17003836938980789124ull,
+ 14300249807388103155ull, 3009073792831969900ull}},
+{{8426192710766918123ull, 16643110155298598501ull,
+ 17875312259235128944ull, 3761342241039962375ull}},
+{{7572213453443017779ull, 10401943847061624063ull,
+ 18089599189663037446ull, 2350838900649976484ull}},
+{{4853580798376384320ull, 3779057771972254271ull,
+ 4165254913369245192ull, 2938548625812470606ull}},
+{{1455289979543092495ull, 4723822214965317839ull,
+ 14429940678566332298ull, 3673185782265588257ull}},
+{{15654170529711029331ull, 15128149805561423106ull,
+ 4202367792925751660ull, 4591482227831985322ull}},
+{{14395542599496781236ull, 231721591621113633ull,
+ 7238165889005982692ull, 2869676392394990826ull}},
+{{4159370194088812833ull, 289651989526392042ull,
+ 18271079398112254173ull, 3587095490493738532ull}},
+{{14422584779465791849ull, 4973751005335377956ull,
+ 4392105173930766100ull, 4483869363117173166ull}},
+{{18237487524020895714ull, 12331966415189387030ull,
+ 16580123788988892524ull, 2802418351948233228ull}},
+{{13573487368171343834ull, 15414958018986733788ull,
+ 2278410662526564039ull, 3503022939935291536ull}},
+{{16966859210214179793ull, 14657011505306029331ull,
+ 2848013328158205049ull, 4378778674919114420ull}},
+{{8298443997170168419ull, 2243103163175186476ull,
+ 11003380366953653964ull, 2736736671824446512ull}},
+{{10373054996462710523ull, 2803878953968983095ull,
+ 13754225458692067455ull, 3420920839780558140ull}},
+{{8354632727151000250ull, 17339906747743392581ull,
+ 17192781823365084318ull, 4276151049725697675ull}},
+{{7527488463683069108ull, 6225755698912232459ull,
+ 8439645630389483747ull, 2672594406078561047ull}},
+{{4797674561176448481ull, 3170508605212902670ull,
+ 5937871019559466780ull, 3340743007598201309ull}},
+{{15220465238325336409ull, 3963135756516128337ull,
+ 12034024792876721379ull, 4175928759497751636ull}},
+{{2595261746312253400ull, 171116838608886259ull,
+ 16744637532402726670ull, 2609955474686094772ull}},
+{{17079135238172480462ull, 9437268085115883631ull,
+ 2484052841793856721ull, 3262444343357618466ull}},
+{{16737233029288212673ull, 16408271124822242443ull,
+ 12328438089097096709ull, 4078055429197023082ull}},
+{{8154927634091438969ull, 12561012462227595479ull,
+ 12316959824113073347ull, 2548784643248139426ull}},
+{{5581973524186910807ull, 11089579559357106445ull,
+ 6172827743286565876ull, 3185980804060174283ull}},
+{{11589152923661026413ull, 13861974449196383056ull,
+ 3104348660680819441ull, 3982476005075217854ull}},
+{{7243220577288141508ull, 1746205003106657554ull,
+ 15775275968207675863ull, 2489047503172011158ull}},
+{{18277397758464952693ull, 16017814309165485654ull,
+ 10495722923404819020ull, 3111309378965013948ull}},
+{{13623375161226415058ull, 1575523812747305452ull,
+ 13119653654256023776ull, 3889136723706267435ull}},
+{{17737981512621285220ull, 984702382967065907ull,
+ 5893940524696320908ull, 2430710452316417147ull}},
+{{17560790872349218620ull, 1230877978708832384ull,
+ 2755739637443013231ull, 3038388065395521434ull}},
+{{3504244516726971659ull, 15373655528668204193ull,
+ 12668046583658542346ull, 3797985081744401792ull}},
+{{13719367869022827047ull, 14220220723845015524ull,
+ 7917529114786588966ull, 2373740676090251120ull}},
+{{17149209836278533809ull, 8551903867951493597ull,
+ 9896911393483236208ull, 2967175845112813900ull}},
+{{7601454240066003549ull, 10689879834939366997ull,
+ 12371139241854045260ull, 3708969806391017375ull}},
+{{7056751909254946170ull, 15904546933691880181ull,
+ 14649491053799860143ull, 2318106128994385859ull}},
+{{13432625904996070617ull, 15268997648687462322ull,
+ 13700177798822437275ull, 2897632661242982324ull}},
+{{7567410344390312463ull, 14474561042431939999ull,
+ 17125222248528046594ull, 3622040826553727905ull}},
+{{4847576912060502675ull, 8869829266185149191ull,
+ 7571469755377894531ull, 4527551033192159882ull}},
+{{9947264597678896028ull, 3237800282152024292ull,
+ 9343854615538571986ull, 2829719395745099926ull}},
+{{12434080747098620035ull, 13270622389544806173ull,
+ 2456446232568439174ull, 3537149244681374908ull}},
+{{1707542878591111331ull, 7364905950076231909ull,
+ 3070557790710548968ull, 4421436555851718635ull}},
+{{3373057308333138534ull, 4603066218797644943ull,
+ 18059999683689950769ull, 2763397847407324146ull}},
+{{18051379690698586880ull, 10365518791924444082ull,
+ 13351627567757662653ull, 3454247309259155183ull}},
+{{13340852576518457791ull, 17568584508332943007ull,
+ 12077848441269690412ull, 4317809136573943979ull}},
+{{15255561887965117976ull, 1756993280853313571ull,
+ 5242812266579862556ull, 2698630710358714987ull}},
+{{14457766341529009566ull, 2196241601066641964ull,
+ 1941829314797440291ull, 3373288387948393734ull}},
+{{18072207926911261957ull, 16580360056615466167ull,
+ 11650658680351576171ull, 4216610484935492167ull}},
+{{18212658981960620579ull, 8056882026170972402ull,
+ 14199190702860816963ull, 2635381553084682604ull}},
+{{13542451690595999916ull, 5459416514286327599ull,
+ 17748988378576021204ull, 3294226941355853255ull}},
+{{12316378594817611991ull, 6824270642857909499ull,
+ 17574549454792638601ull, 4117783676694816569ull}},
+{{5391893612547313542ull, 15794384197854663197ull,
+ 4066564381604317269ull, 2573614797934260356ull}},
+{{11351553034111529832ull, 5907922192036165284ull,
+ 5083205477005396587ull, 3217018497417825445ull}},
+{{14189441292639412290ull, 2773216721617818701ull,
+ 10965692864684133638ull, 4021273121772281806ull}},
+{{11174243817113326633ull, 15568318506293300400ull,
+ 2241872022000195619ull, 2513295701107676129ull}},
+{{13967804771391658291ull, 14848712114439237596ull,
+ 7414026045927632428ull, 3141619626384595161ull}},
+{{17459755964239572864ull, 114146069339495379ull,
+ 13879218575836928440ull, 3927024532980743951ull}},
+{{8606504468436039088ull, 71341293337184612ull, 15592040637539162131ull,
+ 2454390333112964969ull}},
+{{10758130585545048860ull, 13924234671953644477ull,
+ 5654992741641788951ull, 3067987916391206212ull}},
+{{18059349250358698979ull, 12793607321514667692ull,
+ 7068740927052236189ull, 3834984895489007765ull}},
+{{2063721244619411054ull, 10301847585160361260ull,
+ 6723806088621341570ull, 2396865559680629853ull}},
+{{2579651555774263818ull, 3653937444595675767ull,
+ 13016443629204064867ull, 2996081949600787316ull}},
+{{17059622499999993484ull, 18402479861026758420ull,
+ 16270554536505081083ull, 3745102437000984145ull}},
+{{1438892025645220120ull, 9195706903928030061ull,
+ 3251567557674593821ull, 2340689023125615091ull}},
+{{6410301050483913053ull, 16106319648337425480ull,
+ 17899517502375405988ull, 2925861278907018863ull}},
+{{8012876313104891317ull, 1686155486712230234ull,
+ 17762710859541869582ull, 3657326598633773579ull}},
+{{792723354526338338ull, 11331066395245063601ull,
+ 17591702555999949073ull, 4571658248292216974ull}},
+{{12024667142647431221ull, 164387469387082894ull,
+ 6383128079072580267ull, 2857286405182635609ull}},
+{{5807461891454513218ull, 14040542392016017330ull,
+ 12590596117268113237ull, 3571608006478294511ull}},
+{{16482699401172917331ull, 3715619934737857950ull,
+ 11126559128157753643ull, 4464510008097868139ull}},
+{{5690001107305685428ull, 16419449997467267ull, 4648256445884902075ull,
+ 2790318755061167587ull}},
+{{2500815365704718881ull, 13855582367778997796ull,
+ 1198634538928739689ull, 3487898443826459484ull}},
+{{3126019207130898601ull, 3484419904441583533ull,
+ 1498293173660924612ull, 4359873054783074355ull}},
+{{4259605013670505578ull, 11401134477130765516ull,
+ 17077334298033935546ull, 2724920659239421471ull}},
+{{5324506267088131972ull, 5028046059558681087ull,
+ 16734981854115031529ull, 3406150824049276839ull}},
+{{2043946815432777061ull, 10896743592875739263ull,
+ 16307041299216401507ull, 4257688530061596049ull}},
+{{8194995787286567519ull, 4504621736333643087ull,
+ 3274371784369169086ull, 2661055331288497531ull}},
+{{5632058715680821495ull, 14854149207271829667ull,
+ 17928022785743625069ull, 3326319164110621913ull}},
+{{2428387376173638965ull, 4732628453807623372ull,
+ 8574970426897367625ull, 4157898955138277392ull}},
+{{10741114146963300161ull, 14487107829698234367ull,
+ 5359356516810854765ull, 2598686846961423370ull}},
+{{8814706665276737297ull, 4273826731840629247ull,
+ 15922567682868344265ull, 3248358558701779212ull}},
+{{6406697313168533717ull, 9953969433228174463ull,
+ 1456465529875878715ull, 4060448198377224016ull}},
+{{10921714848371415430ull, 3915387886553915087ull,
+ 910290956172424197ull, 2537780123985765010ull}},
+{{9040457542036881383ull, 9505920876619781763ull,
+ 10361235732070306054ull, 3172225154982206262ull}},
+{{6688885909118713824ull, 2659029058919951396ull,
+ 3728172628233106760ull, 3965281443727757828ull}},
+{{13403925730053971948ull, 1661893161824969622ull,
+ 11553479929500467533ull, 2478300902329848642ull}},
+{{7531535125712689127ull, 6689052470708599932ull,
+ 5218477875020808608ull, 3097876127912310803ull}},
+{{9414418907140861409ull, 8361315588385749915ull,
+ 1911411325348622856ull, 3872345159890388504ull}},
+{{3578168807749344429ull, 5225822242741093697ull,
+ 1194632078342889285ull, 2420215724931492815ull}},
+{{9084397028114068440ull, 11143963821853755025ull,
+ 15328348153210775318ull, 3025269656164366018ull}},
+{{15967182303569973454ull, 4706582740462417973ull,
+ 9937063154658693340ull, 3781587070205457523ull}},
+{{12285331948944927361ull, 12164986249643787041ull,
+ 3904821462447989385ull, 2363491918878410952ull}},
+{{1521606880898995489ull, 1371174756772570090ull,
+ 4881026828059986732ull, 2954364898598013690ull}},
+{{11125380637978520169ull, 1713968445965712612ull,
+ 15324655571929759223ull, 3692956123247517112ull}},
+{{16176734935591350914ull, 7988759306369652238ull,
+ 9577909732456099514ull, 2308097577029698195ull}},
+{{10997546632634412834ull, 762577096107289490ull,
+ 7360701147142736489ull, 2885121971287122744ull}},
+{{4523561253938240235ull, 5564907388561499767ull,
+ 9200876433928420611ull, 3606402464108903430ull}},
+{{1042765548995412389ull, 2344448217274486805ull,
+ 2277723505555749956ull, 4508003080136129288ull}},
+{{2957571477335826695ull, 10688652172651330061ull,
+ 1423577190972343722ull, 2817501925085080805ull}},
+{{8308650365097171273ull, 4137443178959386768ull,
+ 6391157507142817557ull, 3521877406356351006ull}},
+{{10385812956371464091ull, 9783489992126621364ull,
+ 17212318920783297754ull, 4402346757945438757ull}},
+{{15714505134586940865ull, 10726367263506526256ull,
+ 13063542334703255048ull, 2751466723715899223ull}},
+{{1196387344524124465ull, 13407959079383157821ull,
+ 11717741899951680906ull, 3439333404644874029ull}},
+{{6107170199082543486ull, 7536576812374171468ull, 812119319657437421ull,
+ 4299166755806092537ull}},
+{{13040353411281365487ull, 7016203516947551119ull,
+ 12036789620854368148ull, 2686979222378807835ull}},
+{{11688755745674318954ull, 8770254396184438899ull,
+ 10434301007640572281ull, 3358724027973509794ull}},
+{{9999258663665510789ull, 15574504013657936528ull,
+ 3819504222695939543ull, 4198405034966887243ull}},
+{{6249536664790944243ull, 16651594036177292186ull, 81347129971268262ull,
+ 2624003146854304527ull}},
+{{17035292867843456112ull, 11591120508366839424ull,
+ 13936741967746249040ull, 3280003933567880658ull}},
+{{2847372011094768524ull, 14488900635458549281ull,
+ 8197555422828035492ull, 4100004916959850823ull}},
+{{13308822553002700087ull, 18278934934016369108ull,
+ 12041001166908604038ull, 2562503073099906764ull}},
+{{16636028191253375109ull, 13625296630665685577ull,
+ 15051251458635755048ull, 3203128841374883455ull}},
+{{6959977183784555174ull, 17031620788332106972ull,
+ 14202378304867305906ull, 4003911051718604319ull}},
+{{13573357776720122792ull, 15256449011134954761ull,
+ 15794015468183148047ull, 2502444407324127699ull}},
+{{3131639165617989778ull, 14458875245491305548ull,
+ 15130833316801547155ull, 3128055509155159624ull}},
+{{3914548957022487222ull, 13461908038436744031ull,
+ 466797572292382328ull, 3910069386443949531ull}},
+{{9364122125780136370ull, 8413692524022965019ull,
+ 16432649547178596619ull, 2443793366527468456ull}},
+{{7093466638797782559ull, 5905429636601318370ull,
+ 2094067860263694158ull, 3054741708159335571ull}},
+{{18090205335352004006ull, 16605159082606423770ull,
+ 16452642880611781409ull, 3818427135199169463ull}},
+{{15918064353022390408ull, 3460695398987933000ull,
+ 17200430828023445237ull, 2386516959499480914ull}},
+{{1450836367568436394ull, 8937555267162304155ull,
+ 12277166498174530738ull, 2983146199374351143ull}},
+{{15648603514742709204ull, 1948572047098104385ull,
+ 10734772104290775519ull, 3728932749217938929ull}},
+{{2862848169073111397ull, 8135386557077397097ull,
+ 18238447611250204459ull, 2330582968261211830ull}},
+{{8190246229768777150ull, 5557547177919358467ull,
+ 13574687477207979766ull, 2913228710326514788ull}},
+{{5626121768783583533ull, 16170306009253973892ull,
+ 16968359346509974707ull, 3641535887908143485ull}},
+{{7032652210979479417ull, 15601196493140079461ull,
+ 7375391127855304672ull, 4551919859885179357ull}},
+{{6701250641075868588ull, 9750747808212549663ull,
+ 6915462464123259372ull, 2844949912428237098ull}},
+{{3764877282917447830ull, 12188434760265687079ull,
+ 17867700117008850023ull, 3556187390535296372ull}},
+{{94410585219421884ull, 10623857431904720945ull, 3887881072551510913ull,
+ 4445234238169120466ull}},
+{{11588221661830608438ull, 18169125941008920350ull,
+ 7041611688772082224ull, 2778271398855700291ull}},
+{{5261905040433484739ull, 4264663352551598822ull,
+ 4190328592537714877ull, 3472839248569625364ull}},
+{{15800753337396631731ull, 9942515209116886431ull,
+ 5237910740672143596ull, 4341049060712031705ull}},
+{{16792999863513976688ull, 15437444042552829827ull,
+ 14802909258988559507ull, 2713155662945019815ull}},
+{{16379563810965082956ull, 14685119034763649380ull,
+ 13891950555308311480ull, 3391444578681274769ull}},
+{{2027710689996802079ull, 18356398793454561726ull,
+ 3529880138853225638ull, 4239305723351593462ull}},
+{{15102377236530165012ull, 6861063227481713174ull,
+ 16041233142065429736ull, 2649566077094745913ull}},
+{{9654599508807930456ull, 8576329034352141468ull,
+ 6216483372299623458ull, 3311957596368432392ull}},
+{{12068249386009913070ull, 1497039256085401027ull,
+ 7770604215374529323ull, 4139946995460540490ull}},
+{{5236812857042501717ull, 17076550599549233306ull,
+ 9468313653036468730ull, 2587466872162837806ull}},
+{{15769388108157902954ull, 12122316212581765824ull,
+ 2612020029440810105ull, 3234333590203547258ull}},
+{{1264991061487827077ull, 1317837210445043569ull,
+ 12488397073655788440ull, 4042916987754434072ull}},
+{{12319834459498361683ull, 823648256528152230ull,
+ 7805248171034867775ull, 2526823117346521295ull}},
+{{6176421037518176296ull, 14864618375942354000ull,
+ 5144874195366196814ull, 3158528896683151619ull}},
+{{7720526296897720370ull, 9357400933073166692ull,
+ 1819406725780358114ull, 3948161120853939524ull}},
+{{14048700972415851039ull, 10460061601598117086ull,
+ 10360501240467499629ull, 2467600700533712202ull}},
+{{8337504178665037991ull, 17686763020425034262ull,
+ 3727254513729598728ull, 3084500875667140253ull}},
+{{1198508186476521681ull, 3661709701821741212ull,
+ 9270754160589386315ull, 3855626094583925316ull}},
+{{9972439653402601859ull, 18429469628134445921ull,
+ 15017593387223142254ull, 2409766309114953322ull}},
+{{17077235585180640227ull, 13813464998313281593ull,
+ 9548619697174152010ull, 3012207886393691653ull}},
+{{7511486426193636572ull, 8043459211036826184ull,
+ 16547460639895077917ull, 3765259857992114566ull}},
+{{4694679016371022858ull, 7333005016111710317ull,
+ 5730476881507035794ull, 2353287411245071604ull}},
+{{10480034788891166476ull, 18389628306994413704ull,
+ 7163096101883794742ull, 2941609264056339505ull}},
+{{13100043486113958095ull, 13763663346888241322ull,
+ 13565556145782131332ull, 3677011580070424381ull}},
+{{7151682320787671810ull, 17204579183610301653ull,
+ 3121887126945500453ull, 4596264475088030477ull}},
+{{6775644459705988834ull, 13058704998970132485ull,
+ 4257022463554631735ull, 2872665296930019048ull}},
+{{13081241593059873946ull, 11711695230285277702ull,
+ 5321278079443289669ull, 3590831621162523810ull}},
+{{7128179954470066624ull, 804560982574433416ull,
+ 15874969636158887895ull, 4488539526453154762ull}},
+{{4455112471543791640ull, 7420379641750102741ull,
+ 14533542041026692838ull, 2805337204033221726ull}},
+{{10180576607857127454ull, 52102515332852618ull, 8943555514428590240ull,
+ 3506671505041527158ull}},
+{{3502348722966633510ull, 65128144166065773ull, 1956072356180961992ull,
+ 4383339381301908948ull}},
+{{4494810961067839896ull, 40705090103791108ull, 10445917259467877053ull,
+ 2739587113313693092ull}},
+{{5618513701334799869ull, 4662567381057126789ull,
+ 13057396574334846316ull, 3424483891642116365ull}},
+{{11634828145095887741ull, 5828209226321408486ull,
+ 2486687662636394183ull, 4280604864552645457ull}},
+{{2660081572257541934ull, 10560159794091962160ull,
+ 13083394835216216124ull, 2675378040345403410ull}},
+{{3325101965321927418ull, 13200199742614952700ull,
+ 7130871507165494347ull, 3344222550431754263ull}},
+{{4156377456652409272ull, 11888563659841302971ull,
+ 4301903365529480030ull, 4180278188039692829ull}},
+{{291892901194061843ull, 2818666268973426453ull, 4994532612669618971ull,
+ 2612673867524808018ull}},
+{{4976552144919965208ull, 17358390891498946778ull,
+ 15466537802691799521ull, 3265842334406010022ull}},
+{{15444062218004732318ull, 7862930559091519760ull,
+ 10109800216509973594ull, 4082302918007512528ull}},
+{{9652538886252957699ull, 9526017617859587754ull,
+ 6318625135318733496ull, 2551439323754695330ull}},
+{{2842301570961421315ull, 11907522022324484693ull,
+ 17121653456003192678ull, 3189299154693369162ull}},
+{{8164562982129164548ull, 5661030491050830058ull,
+ 12178694783149215040ull, 3986623943366711453ull}},
+{{9714537882258115747ull, 3538144056906768786ull,
+ 9917527248681953352ull, 2491639964604194658ull}},
+{{2919800315967868875ull, 4422680071133460983ull,
+ 3173537023997665882ull, 3114549955755243323ull}},
+{{17484808450241999806ull, 14751722125771602036ull,
+ 17801979335279246064ull, 3893187444694054153ull}},
+{{1704633244546474071ull, 9219826328607251273ull,
+ 4208708056908446934ull, 2433242152933783846ull}},
+{{6742477574110480492ull, 2301410873904288283ull,
+ 14484257107990334476ull, 3041552691167229807ull}},
+{{3816410949210712711ull, 2876763592380360354ull,
+ 13493635366560530191ull, 3801940863959037259ull}},
+{{6996942861684083349ull, 8715506272878807077ull,
+ 6127679094886637417ull, 2376213039974398287ull}},
+{{13357864595532492090ull, 15506068859525896750ull,
+ 3047912850180908867ull, 2970266299967997859ull}},
+{{7473958707560839304ull, 14770900055979983034ull,
+ 17644949118008299796ull, 3712832874959997323ull}},
+{{9282910210652912469ull, 8440498132713588ull, 8722250189541493421ull,
+ 2320520546849998327ull}},
+{{11603637763316140587ull, 4622236641093279889ull,
+ 6291126718499478872ull, 2900650683562497909ull}},
+{{669489148863012021ull, 5777795801366599862ull,
+ 12475594416551736494ull, 3625813354453122386ull}},
+{{10060233472933540834ull, 16445616788563025635ull,
+ 6371120983834894809ull, 4532266693066402983ull}},
+{{3981802911369769070ull, 3360981465210809166ull,
+ 10899479642537891112ull, 2832666683166501864ull}},
+{{14200625676066987145ull, 4201226831513511457ull,
+ 13624349553172363890ull, 3540833353958127330ull}},
+{{3915724039801570219ull, 14474905576246665130ull,
+ 7807064904610679054ull, 4426041692447659163ull}},
+{{7059013543303369291ull, 4435129966726777802ull,
+ 2573572556167980457ull, 2766276057779786977ull}},
+{{18047138965983987422ull, 10155598476835860156ull,
+ 7828651713637363475ull, 3457845072224733721ull}},
+{{4112179633770432661ull, 8082812077617437292ull,
+ 14397500660474092248ull, 4322306340280917151ull}},
+{{11793484307961296221ull, 5051757548510898307ull,
+ 15915966940437389511ull, 2701441462675573219ull}},
+{{10130169366524232372ull, 1703010917211234980ull,
+ 15283272657119348985ull, 3376801828344466524ull}},
+{{12662711708155290465ull, 6740449664941431629ull,
+ 657346747689634615ull, 4221002285430583156ull}},
+{{10220037826810750493ull, 11130310068229476624ull,
+ 9634213754160797442ull, 2638126428394114472ull}},
+{{12775047283513438116ull, 4689515548432069972ull,
+ 12042767192700996803ull, 3297658035492643090ull}},
+{{15968809104391797645ull, 1250208417112699561ull,
+ 5830086954021470196ull, 4122072544365803863ull}},
+{{3062976662603791672ull, 10004752297550213034ull,
+ 10561333373904500728ull, 2576295340228627414ull}},
+{{13052092865109515398ull, 12505940371937766292ull,
+ 3978294680525850102ull, 3220369175285784268ull}},
+{{16315116081386894248ull, 6409053428067432057ull,
+ 4972868350657312628ull, 4025461469107230335ull}},
+{{3279418523225727049ull, 13229030429396920844ull,
+ 10025571746801902248ull, 2515913418192018959ull}},
+{{4099273154032158811ull, 16536288036746151055ull,
+ 7920278665074989906ull, 3144891772740023699ull}},
+{{512405424112810610ull, 11446988009077913011ull,
+ 5288662312916349479ull, 3931114715925029624ull}},
+{{16461154454566364295ull, 14071896533314777487ull,
+ 3305413945572718424ull, 2456946697453143515ull}},
+{{15964757049780567465ull, 17589870666643471859ull,
+ 17966825487248061742ull, 3071183371816429393ull}},
+{{15344260293798321427ull, 12763966296449564016ull,
+ 8623473803777913466ull, 3838979214770536742ull}},
+{{9590162683623950892ull, 12589164953708365414ull,
+ 777985108933808012ull, 2399362009231585464ull}},
+{{2764331317675162807ull, 15736456192135456768ull,
+ 972481386167260015ull, 2999202511539481830ull}},
+{{3455414147093953509ull, 15058884221741933056ull,
+ 10438973769563850827ull, 3749003139424352287ull}},
+{{2159633841933720943ull, 7105959629375014208ull,
+ 13441887633618488623ull, 2343126962140220179ull}},
+{{2699542302417151179ull, 4270763518291379856ull,
+ 12190673523595722875ull, 2928908702675275224ull}},
+{{3374427878021438973ull, 726768379436836916ull,
+ 15238341904494653594ull, 3661135878344094030ull}},
+{{4218034847526798717ull, 10131832511150821953ull,
+ 9824555343763541184ull, 4576419847930117538ull}},
+{{14165486825772718958ull, 6332395319469263720ull,
+ 10752033108279601144ull, 2860262404956323461ull}},
+{{17706858532215898698ull, 7915494149336579650ull,
+ 18051727403776889334ull, 3575328006195404326ull}},
+{{12910201128415097564ull, 670995649815948755ull,
+ 13341287217866335860ull, 4469160007744255408ull}},
+{{5763032696045742026ull, 9642744317989743780ull,
+ 8338304511166459912ull, 2793225004840159630ull}},
+{{7203790870057177532ull, 12053430397487179725ull,
+ 1199508602103299082ull, 3491531256050199538ull}},
+{{13616424605998859819ull, 5843415960004198848ull,
+ 10722757789483899661ull, 4364414070062749422ull}},
+{{8510265378749287387ull, 5957977984216318232ull,
+ 2090037600000049384ull, 2727758793789218389ull}},
+{{10637831723436609233ull, 7447472480270397790ull,
+ 7224233018427449634ull, 3409698492236522986ull}},
+{{4073917617440985734ull, 85968563483221430ull, 18253663309889087851ull,
+ 4262123115295653732ull}},
+{{16381256566182779796ull, 16194631416672871057ull,
+ 2185167531825904098ull, 2663826947059783583ull}},
+{{6641512652446311033ull, 11019917233986313014ull,
+ 16566517470064543835ull, 3329783683824729478ull}},
+{{17525262852412664599ull, 9163210524055503363ull,
+ 11484774800725903986ull, 4162229604780911848ull}},
+{{8647446273544221422ull, 10338692595962077506ull,
+ 7177984250453689991ull, 2601393502988069905ull}},
+{{1585935805075500970ull, 8311679726525208979ull,
+ 13584166331494500393ull, 3251741878735087381ull}},
+{{15817477811626539924ull, 15001285676583899127ull,
+ 3145149859085961779ull, 4064677348418859227ull}},
+{{16803452659907669309ull, 7069960538651243002ull,
+ 18106619726424583776ull, 2540423342761787016ull}},
+{{11780943788029810828ull, 8837450673314053753ull,
+ 4186530584321178104ull, 3175529178452233771ull}},
+{{891121679755099823ull, 11046813341642567192ull, 621477211974084726ull,
+ 3969411473065292214ull}},
+{{556951049846937389ull, 2292572320099216591ull,
+ 14223481312765966666ull, 2480882170665807633ull}},
+{{14531246867590835448ull, 12089087436978796546ull,
+ 3944293585675294620ull, 3101102713332259542ull}},
+{{8940686547633768502ull, 15111359296223495683ull,
+ 14153739018948894083ull, 3876378391665324427ull}},
+{{3282086083057411362ull, 7138756550925990850ull,
+ 6540243877629364850ull, 2422736494790827767ull}},
+{{13325979640676540011ull, 18146817725512264370ull,
+ 3563618828609318158ull, 3028420618488534709ull}},
+{{7434102513990899205ull, 13460150120035554655ull,
+ 9066209554189035602ull, 3785525773110668386ull}},
+{{11563843098885393859ull, 13024279843449609563ull,
+ 10278066989795535155ull, 2365953608194167741ull}},
+{{9843117855179354420ull, 11668663785884624050ull,
+ 17459269755671806848ull, 2957442010242709676ull}},
+{{3080525282119417217ull, 14585829732355780063ull,
+ 3377343120880206944ull, 3696802512803387096ull}},
+{{8842857328965717617ull, 9116143582722362539ull,
+ 2110839450550129340ull, 2310501570502116935ull}},
+{{6441885642779759117ull, 11395179478402953174ull,
+ 16473607368469825387ull, 2888126963127646168ull}},
+{{17275729090329474704ull, 9632288329576303563ull,
+ 2145265136877730118ull, 3610158703909557711ull}},
+{{16982975344484455476ull, 2816988375115603646ull,
+ 16516639476379326360ull, 4512698379886947138ull}},
+{{6002673571875396769ull, 1760617734447252279ull,
+ 14934585691164466879ull, 2820436487429341961ull}},
+{{2891655946416858057ull, 16035830223341229061ull,
+ 4833174058673419886ull, 3525545609286677452ull}},
+{{8226255951448460475ull, 10821415742321760518ull,
+ 6041467573341774858ull, 4406932011608346815ull}},
+{{529723951227899893ull, 11375070857378488228ull,
+ 10693446260979691142ull, 2754332507255216759ull}},
+{{662154939034874866ull, 4995466534868334477ull, 8755121807797226024ull,
+ 3442915634069020949ull}},
+{{5439379692220981486ull, 6244333168585418096ull,
+ 15555588278173920434ull, 4303644542586276186ull}},
+{{3399612307638113429ull, 8514394248793274214ull,
+ 14333928692286088175ull, 2689777839116422616ull}},
+{{13472887421402417594ull, 6031306792564204863ull,
+ 17917410865357610219ull, 3362222298895528270ull}},
+{{12229423258325634089ull, 2927447472277868175ull,
+ 13173391544842236966ull, 4202777873619410338ull}},
+{{14560918564094603162ull, 15664712725455831321ull,
+ 12845055733953786007ull, 2626736171012131461ull}},
+{{4366090149836090240ull, 14969204888392401248ull,
+ 2221261612160068797ull, 3283420213765164327ull}},
+{{5457612687295112800ull, 4876448055208337848ull,
+ 16611635070482249709ull, 4104275267206455408ull}},
+{{3411007929559445500ull, 5353623043718905107ull,
+ 10382271919051406068ull, 2565172042004034630ull}},
+{{18098817967231470587ull, 6692028804648631383ull,
+ 3754467861959481777ull, 3206465052505043288ull}},
+{{18011836440611950330ull, 12976722024238177133ull,
+ 4693084827449352221ull, 4008081315631304110ull}},
+{{13563240784596162908ull, 10416294274362554660ull,
+ 16768236072438008850ull, 2505050822269565068ull}},
+{{16954050980745203635ull, 3796995806098417517ull,
+ 2513551016837959447ull, 3131313527836956336ull}},
+{{7357505670649340832ull, 134558739195633993ull, 3141938771047449309ull,
+ 3914141909796195420ull}},
+{{16127656090224307780ull, 2389942221210965197ull,
+ 11187083768759431626ull, 2446338693622622137ull}},
+{{6324512057498221013ull, 12210799813368482305ull,
+ 148796655667125820ull, 3057923367028277672ull}},
+{{12517326090300164170ull, 15263499766710602881ull,
+ 185995819583907275ull, 3822404208785347090ull}},
+{{905799778796520750ull, 7233844344980432849ull, 4727933405667329951ull,
+ 2389002630490841931ull}},
+{{5743935741923038842ull, 4430619412798153157ull,
+ 1298230738656774535ull, 2986253288113552414ull}},
+{{11791605695831186456ull, 926588247570303542ull,
+ 10846160460175743977ull, 3732816610141940517ull}},
+{{2758067541467103631ull, 12108332700799909474ull,
+ 9084693296823533937ull, 2333010381338712823ull}},
+{{12670956463688655347ull, 1300357820717723130ull,
+ 6744180602602029518ull, 2916262976673391029ull}},
+{{6615323542756043376ull, 10848819312751929721ull,
+ 13041911771679924801ull, 3645328720841738786ull}},
+{{12880840446872442124ull, 18172710159367300055ull,
+ 7079017677745130193ull, 4556660901052173483ull}},
+{{14968054306936358183ull, 4440414821963480678ull,
+ 2118543039377012419ull, 2847913063157608427ull}},
+{{9486695846815671921ull, 938832509026962944ull,
+ 16483236854503429236ull, 3559891328947010533ull}},
+{{11858369808519589901ull, 1173540636283703680ull,
+ 6768988012847122833ull, 4449864161183763167ull}},
+{{7411481130324743689ull, 12262677943745784560ull,
+ 11148146535670533626ull, 2781165100739851979ull}},
+{{9264351412905929611ull, 6104975392827454892ull,
+ 9323497151160779129ull, 3476456375924814974ull}},
+{{11580439266132412013ull, 12242905259461706519ull,
+ 2430999402096198103ull, 4345570469906018718ull}},
+{{14155303568973839364ull, 14569344814804648430ull,
+ 15354432681592287526ull, 2715981543691261698ull}},
+{{8470757424362523397ull, 8988308981651034730ull,
+ 9969668815135583600ull, 3394976929614077123ull}},
+{{1365074743598378438ull, 11235386227063793413ull,
+ 7850400000492091596ull, 4243721162017596404ull}},
+{{3159014723962680476ull, 16245488428769646691ull,
+ 14129872037162333055ull, 2652325726260997752ull}},
+{{17783826460235514307ull, 15695174517534670459ull,
+ 17662340046452916319ull, 3315407157826247190ull}},
+{{17618097056867004980ull, 15007282128490950170ull,
+ 12854553021211369591ull, 4144258947282808988ull}},
+{{15622996678969266017ull, 16297080357947925712ull,
+ 17257467675111881802ull, 2590161842051755617ull}},
+{{1082001775002030905ull, 11147978410580131333ull,
+ 7736776538607688541ull, 3237702302564694522ull}},
+{{5964188237179926535ull, 99914957943000454ull, 447598636404834869ull,
+ 4047127878205868153ull}},
+{{17562675703519617796ull, 2368289857928069235ull,
+ 11808964193821491553ull, 2529454923878667595ull}},
+{{17341658610972134341ull, 7572048340837474448ull,
+ 10149519223849476537ull, 3161818654848334494ull}},
+{{3230329190005616311ull, 14076746444474230965ull,
+ 3463526992957069863ull, 3952273318560418118ull}},
+{{4324798752967204146ull, 15715495555437476209ull,
+ 15999762425880332376ull, 2470170824100261323ull}},
+{{10017684459636393087ull, 1197625370587293645ull,
+ 15388017013923027567ull, 3087713530125326654ull}},
+{{17133791592972879262ull, 15332089768516280768ull,
+ 10011649230549008650ull, 3859641912656658318ull}},
+{{10708619745608049539ull, 14194242123750063384ull,
+ 1645594750665742502ull, 2412276195410411449ull}},
+{{13385774682010061924ull, 8519430617832803422ull,
+ 6668679456759566032ull, 3015345244263014311ull}},
+{{7508846315657801597ull, 10649288272291004278ull,
+ 3724163302522069636ull, 3769181555328767889ull}},
+{{81342928858738094ull, 15879177207036653482ull,
+ 13856817110144763282ull, 2355738472080479930ull}},
+{{9325050697928198425ull, 10625599471941041044ull,
+ 8097649350826178295ull, 2944673090100599913ull}},
+{{11656313372410248032ull, 8670313321498913401ull,
+ 14733747706960110773ull, 3680841362625749891ull}},
+{{735333660230646327ull, 15449577670301029656ull,
+ 13805498615272750562ull, 4601051703282187364ull}},
+{{459583537644153955ull, 14267672062365531439ull,
+ 17851808671400244909ull, 2875657314551367102ull}},
+{{14409537477337356155ull, 3999532022674750586ull,
+ 13091388802395530329ull, 3594571643189208878ull}},
+{{8788549809816919386ull, 9611101046770826137ull,
+ 7140863966139637103ull, 4493214553986511098ull}},
+{{17022058677204044377ull, 12924467181872848191ull,
+ 9074725997264661093ull, 2808259096241569436ull}},
+{{16665887328077667567ull, 2320525922058896527ull,
+ 11343407496580826367ull, 3510323870301961795ull}},
+{{16220673141669696554ull, 16735715457855784371ull,
+ 9567573352298645054ull, 4387904837877452244ull}},
+{{7832077704329866394ull, 5848136142732477328ull,
+ 15203105382041428967ull, 2742440523673407652ull}},
+{{9790097130412332993ull, 2698484159988208756ull, 557137653842234593ull,
+ 3428050654591759566ull}},
+{{12237621413015416241ull, 7984791218412648849ull,
+ 9919794104157569049ull, 4285063318239699457ull}},
+{{730984355493553295ull, 16519709557576375291ull,
+ 17729086361166950415ull, 2678164573899812160ull}},
+{{14748788499649105330ull, 16037950928543081209ull,
+ 3714613877749136403ull, 3347705717374765201ull}},
+{{4600927569279217951ull, 15435752642251463608ull,
+ 9254953365613808408ull, 4184632146718456501ull}},
+{{2875579730799511220ull, 9647345401407164755ull,
+ 8090188862722324207ull, 2615395091699035313ull}},
+{{17429532718781552736ull, 7447495733331568039ull,
+ 14724422096830293163ull, 3269243864623794141ull}},
+{{17175229880049553016ull, 4697683648237072145ull,
+ 4570469565755702742ull, 4086554830779742677ull}},
+{{3816989647389888779ull, 16771110335430333803ull,
+ 5162386487811008165ull, 2554096769237339173ull}},
+{{159551040809973070ull, 7128829864005753542ull,
+ 11064669128191148111ull, 3192620961546673966ull}},
+{{9422810837867242145ull, 4299351311579804023ull,
+ 4607464373384159331ull, 3990776201933342458ull}},
+{{12806785801308108197ull, 381251560523683562ull,
+ 7491351251792487486ull, 2494235126208339036ull}},
+{{6785110214780359438ull, 9699936487509380261ull,
+ 9364189064740609357ull, 3117793907760423795ull}},
+{{13093073786902837202ull, 16736606627814113230ull,
+ 7093550312498373792ull, 3897242384700529744ull}},
+{{3571485098386885347ull, 10460379142383820769ull,
+ 4433468945311483620ull, 2435776490437831090ull}},
+{{9076042391410994588ull, 13075473927979775961ull,
+ 14765208218494130333ull, 3044720613047288862ull}},
+{{15956739007691131139ull, 2509284354692556239ull,
+ 9233138236262887109ull, 3805900766309111078ull}},
+{{16890490907448038818ull, 3874145730896541601ull,
+ 1159025379236916539ull, 2378687978943194424ull}},
+{{7278055579027884810ull, 230996145193289098ull, 1448781724046145674ull,
+ 2973359973678993030ull}},
+{{18320941510639631821ull, 9512117218346387180ull,
+ 11034349191912457900ull, 3716699967098741287ull}},
+{{2227216407294994080ull, 15168445298321267796ull,
+ 13813997272586368043ull, 2322937479436713304ull}},
+{{2784020509118742600ull, 14348870604474196841ull,
+ 17267496590732960054ull, 2903671849295891630ull}},
+{{8091711654825816154ull, 8712716218737970243ull,
+ 12360998701561424260ull, 3629589811619864538ull}},
+{{5502953550104882288ull, 10890895273422462804ull,
+ 6227876340097004517ull, 4536987264524830673ull}},
+{{12662718005670327238ull, 9112652555102733204ull,
+ 15421637758629097583ull, 2835617040328019170ull}},
+{{15828397507087909048ull, 6779129675451028601ull,
+ 10053675161431596171ull, 3544521300410023963ull}},
+{{5950438828577722598ull, 3862226075886397848ull,
+ 7955407933362107310ull, 4430651625512529954ull}},
+{{3719024267861076624ull, 16248949352711162367ull,
+ 9583815976778704972ull, 2769157265945331221ull}},
+{{37094316398957876ull, 1864442617179401343ull, 16591455989400769120ull,
+ 3461446582431664026ull}},
+{{13881425950780861056ull, 2330553271474251678ull,
+ 11515947949896185592ull, 4326808228039580033ull}},
+{{4064205200810650256ull, 1456595794671407299ull, 279938441044034139ull,
+ 2704255142524737521ull}},
+{{468570482585924916ull, 15655802798621422836ull,
+ 4961609069732430577ull, 3380318928155921901ull}},
+{{585713103232406145ull, 5734695442994614833ull,
+ 10813697355592926126ull, 4225398660194902376ull}},
+{{11895285735588723601ull, 17419242707153797982ull,
+ 6758560847245578828ull, 2640874162621813985ull}},
+{{5645735132631128693ull, 3327309310232695862ull,
+ 13059887077484361440ull, 3301092703277267481ull}},
+{{16280540952643686674ull, 4159136637790869827ull,
+ 2489800791573288088ull, 4126365879096584352ull}},
+{{7869495086188610220ull, 2599460398619293642ull,
+ 1556125494733305055ull, 2578978674435365220ull}},
+{{613496820880986966ull, 17084383553556280765ull,
+ 1945156868416631318ull, 3223723343044206525ull}},
+{{5378557044528621612ull, 12132107405090575148ull,
+ 7043132103948177052ull, 4029654178805258156ull}},
+{{12584970189685164316ull, 16805939165036385275ull,
+ 13625329601822386465ull, 2518533861753286347ull}},
+{{11119526718679067490ull, 7172365901013317882ull,
+ 12419975983850595178ull, 3148167327191607934ull}},
+{{4676036361494058555ull, 18188829413121423161ull,
+ 6301597942958468164ull, 3935209158989509918ull}},
+{{14451737772002256357ull, 2144646346346113667ull,
+ 17773556769631206315ull, 2459505724368443698ull}},
+{{13452986196575432542ull, 16515865988214805796ull,
+ 12993573925184232085ull, 3074382155460554623ull}},
+{{16816232745719290677ull, 6809774429986343533ull,
+ 11630281388052902203ull, 3842977694325693279ull}},
+{{12815988475288250626ull, 1950266009527770756ull,
+ 14186454895174145733ull, 2401861058953558299ull}},
+{{16019985594110313282ull, 7049518530337101349ull,
+ 13121382600540294262ull, 3002326323691947874ull}},
+{{6189923937355727890ull, 18035270199776152495ull,
+ 7178356213820592019ull, 3752907904614934843ull}},
+{{10786231488488411788ull, 8966200865646401357ull,
+ 2180629624424176060ull, 2345567440384334277ull}},
+{{18094475379037902638ull, 11207751082058001696ull,
+ 7337473048957607979ull, 2931959300480417846ull}},
+{{4171350150087826682ull, 9398002834145114217ull,
+ 18395213348051785782ull, 3664949125600522307ull}},
+{{9825873706037171256ull, 2524131505826616963ull,
+ 18382330666637344324ull, 4581186407000652884ull}},
+{{3835328057059538083ull, 10800954227996411410ull,
+ 2265584629793564394ull, 2863241504375408053ull}},
+{{14017532108179198412ull, 4277820748140738454ull,
+ 7443666805669343397ull, 3579051880469260066ull}},
+{{8298543098369222207ull, 9958961953603310972ull, 81211470231903438ull,
+ 4473814850586575083ull}},
+{{14409961473335539687ull, 1612665202574681453ull,
+ 16191658233390797313ull, 2796134281616609426ull}},
+{{4177393786387260897ull, 6627517521645739721ull,
+ 11016200754883720833ull, 3495167852020761783ull}},
+{{9833428251411464025ull, 12896082920484562555ull,
+ 9158564925177263137ull, 4368959815025952229ull}},
+{{3840049647918471064ull, 1142522797661769741ull,
+ 8029946087449483413ull, 2730599884391220143ull}},
+{{9411748078325476734ull, 6039839515504600080ull,
+ 5425746590884466362ull, 3413249855489025179ull}},
+{{11764685097906845917ull, 16773171431235525908ull,
+ 2170497220178195048ull, 4266562319361281474ull}},
+{{16576300223046554506ull, 10483232144522203692ull,
+ 5968246781038759809ull, 2666601449600800921ull}},
+{{2273631205098641517ull, 17715726199080142520ull,
+ 12071994494725837665ull, 3333251812001001151ull}},
+{{2842039006373301896ull, 8309599693568014438ull,
+ 10478307099979909178ull, 4166564765001251439ull}},
+{{15611332434265477397ull, 9805185826907396927ull,
+ 13466470965128525092ull, 2604102978125782149ull}},
+{{14902479524404458842ull, 12256482283634246159ull,
+ 2998030651128492653ull, 3255128722657227687ull}},
+{{14016413387078185649ull, 1485544799260643987ull,
+ 17582596369192779529ull, 4068910903321534608ull}},
+{{6454415357710172079ull, 12457680545606372252ull,
+ 10989122730745487205ull, 2543069314575959130ull}},
+{{8068019197137715098ull, 1737042626725801603ull,
+ 4513031376577083199ull, 3178836643219948913ull}},
+{{5473337977994755969ull, 16006361338689415716ull,
+ 10252975239148741902ull, 3973545804024936141ull}},
+{{12644208273101498289ull, 5392289818253496918ull,
+ 8713952533681657641ull, 2483466127515585088ull}},
+{{6581888304522097053ull, 11352048291244259052ull,
+ 10892440667102072051ull, 3104332659394481360ull}},
+{{8227360380652621316ull, 9578374345627935911ull,
+ 13615550833877590064ull, 3880415824243101700ull}},
+{{12059629265548970179ull, 5986483966017459944ull,
+ 17733091308028269598ull, 2425259890151938562ull}},
+{{15074536581936212723ull, 16706476994376600738ull,
+ 12942992098180561189ull, 3031574862689923203ull}},
+{{9619798690565490096ull, 7048038187688587211ull,
+ 11567054104298313583ull, 3789468578362404004ull}},
+{{3706531172389737358ull, 11322552894946448863ull,
+ 16452780852041221797ull, 2368417861476502502ull}},
+{{21477947059783793ull, 318133063400897367ull, 11342604028196751439ull,
+ 2960522326845628128ull}},
+{{13861905489106893454ull, 14232724384533285420ull,
+ 14178255035245939298ull, 3700652908557035160ull}},
+{{17887062967546584217ull, 13507138758760691291ull,
+ 8861409397028712061ull, 2312908067848146975ull}},
+{{17747142691005842367ull, 3048865393168700402ull,
+ 6465075727858502173ull, 2891135084810183719ull}},
+{{12960556326902527150ull, 8422767759888263407ull,
+ 3469658641395739812ull, 3613918856012729649ull}},
+{{11589009390200771034ull, 10528459699860329259ull,
+ 8948759320172062669ull, 4517398570015912061ull}},
+{{4937287859661787944ull, 8886130321626399739ull,
+ 7898817584321233120ull, 2823374106259945038ull}},
+{{1559923806149847026ull, 11107662902032999674ull,
+ 650149943546765592ull, 3529217632824931298ull}},
+{{11173276794542084591ull, 13884578627541249592ull,
+ 10036059466288232798ull, 4411522041031164122ull}},
+{{6983297996588802869ull, 4066175623785893091ull,
+ 10884223184857533403ull, 2757201275644477576ull}},
+{{4117436477308615683ull, 471033511304978460ull,
+ 13605278981071916754ull, 3446501594555596970ull}},
+{{5146795596635769603ull, 9812163925985998883ull,
+ 7783226689485120134ull, 4308126993194496213ull}},
+{{910904238683662050ull, 1520916435313861398ull, 7170359690141894036ull,
+ 2692579370746560133ull}},
+{{10362002335209353370ull, 1901145544142326747ull,
+ 13574635631104755449ull, 3365724213433200166ull}},
+{{8340816900584303809ull, 6988117948605296338ull,
+ 7744922502026168503ull, 4207155266791500208ull}},
+{{9824696581292577785ull, 11285102745519392067ull,
+ 4840576563766355314ull, 2629472041744687630ull}},
+{{7669184708188334327ull, 4883006395044464276ull,
+ 15274092741562719951ull, 3286840052180859537ull}},
+{{9586480885235417908ull, 1492071975378192441ull,
+ 5257557871671236227ull, 4108550065226074422ull}},
+{{17520765599340605953ull, 17073446049107227939ull,
+ 17121031725076686353ull, 2567843790766296513ull}},
+{{17289270980748369537ull, 7506749506101871212ull,
+ 7566231601063694230ull, 3209804738457870642ull}},
+{{3164844652225910305ull, 160064845772563208ull, 234417464474841980ull,
+ 4012255923072338303ull}},
+{{1978027907641193941ull, 9323412565462627813ull,
+ 7064039942937858093ull, 2507659951920211439ull}},
+{{7084220902978880330ull, 16265951725255672670ull,
+ 4218363910244934712ull, 3134574939900264299ull}},
+{{18078648165578376220ull, 1885695582860039221ull,
+ 661268869378780487ull, 3918218674875330374ull}},
+{{13604998112700179090ull, 8096088766928606369ull,
+ 14248351098643901516ull, 2448886671797081483ull}},
+{{3171189585593060150ull, 10120110958660757962ull,
+ 13198752854877488991ull, 3061108339746351854ull}},
+{{13187359018846100996ull, 8038452679898559548ull,
+ 7275069031742085431ull, 3826385424682939818ull}},
+{{17465471423633588931ull, 11941561952577681573ull,
+ 9158604163266191298ull, 2391490890426837386ull}},
+{{7996781224259822451ull, 5703580403867326159ull,
+ 2224883167227963315ull, 2989363613033546733ull}},
+{{5384290511897390160ull, 2517789486406769795ull,
+ 7392789977462342048ull, 3736704516291933416ull}},
+{{1059338560722174898ull, 1573618429004231122ull,
+ 4620493735913963780ull, 2335440322682458385ull}},
+{{10547545237757494430ull, 1967023036255288902ull,
+ 10387303188319842629ull, 2919300403353072981ull}},
+{{3961059510342092230ull, 7070464813746499032ull,
+ 17595815003827191190ull, 3649125504191341226ull}},
+{{4951324387927615287ull, 18061453054037899598ull,
+ 12771396717929213179ull, 4561406880239176533ull}},
+{{16929635797736923267ull, 8982565149559993296ull,
+ 10287965957919452189ull, 2850879300149485333ull}},
+{{2715300673461602467ull, 15839892455377379525ull,
+ 17471643465826703140ull, 3563599125186856666ull}},
+{{8005811860254390988ull, 1353121495512172790ull,
+ 12616182295428603118ull, 4454498906483570833ull}},
+{{391946394231606464ull, 14680758989977271706ull, 967584907001795092ull,
+ 2784061816552231771ull}},
+{{9713305029644283887ull, 18350948737471589632ull,
+ 15044539189034407577ull, 3480077270690289713ull}},
+{{12141631287055354859ull, 9103627866557323328ull,
+ 4970615931010845760ull, 4350096588362862142ull}},
+{{7588519554409596787ull, 5689767416598327080ull,
+ 16941693012163942312ull, 2718810367726788838ull}},
+{{9485649443011995984ull, 7112209270747908850ull,
+ 11953744228350152082ull, 3398512959658486048ull}},
+{{2633689766910219172ull, 18113633625289661871ull,
+ 14942180285437690102ull, 4248141199573107560ull}},
+{{8563585131959968839ull, 6709334997378650765ull,
+ 9338862678398556314ull, 2655088249733192225ull}},
+{{15316167433377348952ull, 17610040783578089264ull,
+ 16285264366425583296ull, 3318860312166490281ull}},
+{{698465218012134574ull, 3565806905763059965ull, 6521522402749815409ull,
+ 4148575390208112852ull}},
+{{2742383770471278061ull, 13757844362170382238ull,
+ 13299323538573410438ull, 2592859618880070532ull}},
+{{12651351749943873384ull, 7973933415858201989ull,
+ 16624154423216763048ull, 3241074523600088165ull}},
+{{1979131632147678018ull, 9967416769822752487ull,
+ 6945134973738790098ull, 4051343154500110207ull}},
+{{8154486297733380617ull, 10841321499566608208ull,
+ 11258238386227825667ull, 2532089471562568879ull}},
+{{10193107872166725772ull, 8939965856030872356ull,
+ 9461111964357394180ull, 3165111839453211099ull}},
+{{12741384840208407214ull, 11174957320038590445ull,
+ 7214703937019354821ull, 3956389799316513874ull}},
+{{10269208534343948461ull, 9290191334237812980ull,
+ 9120875979064484667ull, 2472743624572821171ull}},
+{{12836510667929935576ull, 7001053149369878321ull,
+ 6789408955403217930ull, 3090929530716026464ull}},
+{{2210580279630255758ull, 17974688473567123710ull,
+ 8486761194254022412ull, 3863661913395033080ull}},
+{{15216670730051073561ull, 2010808259124676510ull,
+ 5304225746408764008ull, 2414788695871895675ull}},
+{{9797466375709066143ull, 2513510323905845638ull,
+ 2018596164583567106ull, 3018485869839869594ull}},
+{{3023460932781556871ull, 12365259941737082856ull,
+ 11746617242584234690ull, 3773107337299836992ull}},
+{{1889663082988473044ull, 12339973482013064689ull,
+ 7341635776615146681ull, 2358192085812398120ull}},
+{{6973764872162979209ull, 1589908797234167149ull,
+ 9177044720768933352ull, 2947740107265497650ull}},
+{{13328892108631111916ull, 1987385996542708936ull,
+ 2247933864106390882ull, 3684675134081872063ull}},
+{{16661115135788889895ull, 11707604532533161978ull,
+ 16644975385415152314ull, 4605843917602340078ull}},
+{{15024882978295444088ull, 11928938851260614140ull,
+ 5791423597457082292ull, 2878652448501462549ull}},
+{{334359649159753494ull, 14911173564075767676ull,
+ 11850965515248740769ull, 3598315560626828186ull}},
+{{417949561449691868ull, 4803908899812545883ull, 5590334857206150154ull,
+ 4497894450783535233ull}},
+{{16402119540401915081ull, 7614129080810229080ull,
+ 15023174331822313606ull, 2811184031739709520ull}},
+{{2055905351792842236ull, 294289314158010543ull, 332223841068340392ull,
+ 3513980039674636901ull}},
+{{16404939745023216507ull, 367861642697513178ull,
+ 5026965819762813394ull, 4392475049593296126ull}},
+{{14864773359066898221ull, 4841599545113333640ull,
+ 16976911692633922083ull, 2745296905995810078ull}},
+{{134222625124071160ull, 1440313412964279147ull,
+ 11997767578937626796ull, 3431621132494762598ull}},
+{{14002836336687252662ull, 1800391766205348933ull,
+ 5773837436817257687ull, 4289526415618453248ull}},
+{{11057615719643226866ull, 8042773881519424939ull,
+ 3608648398010786054ull, 2680954009761533280ull}},
+{{9210333631126645678ull, 830095315044505366ull, 4510810497513482568ull,
+ 3351192512201916600ull}},
+{{2289545002053531289ull, 1037619143805631708ull,
+ 5638513121891853210ull, 4188990640252395750ull}},
+{{10654337663138232864ull, 5260197983305907721ull,
+ 17359128756464571968ull, 2618119150157747343ull}},
+{{17929608097350178984ull, 6575247479132384651ull,
+ 17087224927153327056ull, 3272648937697184179ull}},
+{{17800324103260335826ull, 8219059348915480814ull,
+ 16747345140514270916ull, 4090811172121480224ull}},
+{{6513516546110321987ull, 14360284129926951317ull,
+ 10467090712821419322ull, 2556756982575925140ull}},
+{{12753581701065290388ull, 8726983125553913338ull,
+ 13083863391026774153ull, 3195946228219906425ull}},
+{{6718605089476837177ull, 15520414925369779577ull,
+ 2519771183501303979ull, 3994932785274883032ull}},
+{{15728343226991492996ull, 7394416319142418283ull,
+ 1574856989688314987ull, 2496832990796801895ull}},
+{{15048743015311978341ull, 4631334380500634950ull,
+ 15803629292392557446ull, 3121041238496002368ull}},
+{{9587556732285197118ull, 15012540012480569496ull,
+ 1307792541781145191ull, 3901301548120002961ull}},
+{{5992222957678248199ull, 16300366535441437791ull,
+ 12346585384681685504ull, 2438313467575001850ull}},
+{{2878592678670422344ull, 1928714095592245623ull,
+ 6209859693997331073ull, 3047891834468752313ull}},
+{{17433298903620191642ull, 7022578637917694932ull,
+ 12374010635924051745ull, 3809864793085940391ull}},
+{{1672439777907843969ull, 15918326694767029093ull,
+ 14651285675093614196ull, 2381165495678712744ull}},
+{{6702235740812192865ull, 1451164294749234750ull,
+ 18314107093867017746ull, 2976456869598390930ull}},
+{{17601166712870016889ull, 11037327405291319245ull,
+ 13669261830478996374ull, 3720571086997988663ull}},
+{{13306572204757454508ull, 2286643609879686624ull,
+ 15460817671690454590ull, 2325356929373742914ull}},
+{{16633215255946818134ull, 12081676549204384088ull,
+ 10102650052758292429ull, 2906696161717178643ull}},
+{{2344774996223971052ull, 1267037631223316399ull,
+ 8016626547520477633ull, 3633370202146473304ull}},
+{{16766026800562127527ull, 6195483057456533402ull,
+ 10020783184400597041ull, 4541712752683091630ull}},
+{{15090452768778717608ull, 15401391956978803136ull,
+ 1651303471822985246ull, 2838570470426932269ull}},
+{{416321887263845394ull, 10028367909368728113ull,
+ 6675815358206119462ull, 3548213088033665336ull}},
+{{5132088377507194647ull, 3312087849856134333ull,
+ 8344769197757649328ull, 4435266360042081670ull}},
+{{5513398245155690606ull, 2070054906160083958ull, 603794730171142926ull,
+ 2772041475026301044ull}},
+{{16115119843299389066ull, 11810940669554880755ull,
+ 754743412713928657ull, 3465051843782876305ull}},
+{{15532213785696848428ull, 928617781661437232ull,
+ 5555115284319798726ull, 4331314804728595381ull}},
+{{9707633616060530268ull, 14415444168820561982ull,
+ 5777790061913568155ull, 2707071752955372113ull}},
+{{2911169983220887027ull, 13407619192598314574ull,
+ 11833923595819348098ull, 3383839691194215141ull}},
+{{12862334515880884591ull, 7536151953893117409ull,
+ 957346439492021411ull, 4229799613992768927ull}},
+{{1121430044784471014ull, 2404251961969504429ull,
+ 7515870552323595238ull, 2643624758745480579ull}},
+{{6013473574407976671ull, 12228686989316656344ull,
+ 4783152171977106143ull, 3304530948431850724ull}},
+{{7516841968009970839ull, 10674172718218432526ull,
+ 5978940214971382679ull, 4130663685539813405ull}},
+{{86340211578843870ull, 13588886976527602185ull, 6042680643570808126ull,
+ 2581664803462383378ull}},
+{{4719611282900942742ull, 7762736683804726923ull,
+ 16776722841318285966ull, 3227081004327979222ull}},
+{{1287828085198790523ull, 480048817901132846ull,
+ 11747531514793081650ull, 4033851255409974028ull}},
+{{14639950608531407789ull, 4911716529615595932ull,
+ 16565579233600451839ull, 2521157034631233767ull}},
+{{18299938260664259736ull, 1527959643592107011ull,
+ 16095288023573176895ull, 3151446293289042209ull}},
+{{18263236807402936766ull, 15745007609772297476ull,
+ 6284051974184307406ull, 3939307866611302762ull}},
+{{2191150967772059671ull, 5228943737680298019ull,
+ 8539218502292580033ull, 2462067416632064226ull}},
+{{16573996764997238301ull, 11147865690527760427ull,
+ 1450651091010949233ull, 3077584270790080283ull}},
+{{16105809937819159972ull, 99774057877536822ull,
+ 15648371919045850254ull, 3846980338487600353ull}},
+{{5454445192709587079ull, 13897416841455624226ull,
+ 2862703421762574552ull, 2404362711554750221ull}},
+{{16041428527741759656ull, 17371771051819530282ull,
+ 8190065295630606094ull, 3005453389443437776ull}},
+{{10828413622822423762ull, 12491341777919637045ull,
+ 10237581619538257618ull, 3756816736804297220ull}},
+{{9073601523477708803ull, 12418774629627161057ull,
+ 15621860549066186819ull, 2348010460502685762ull}},
+{{15953687922774523908ull, 10911782268606563417ull,
+ 10303953649477957716ull, 2935013075628357203ull}},
+{{6107051848185991173ull, 13639727835758204272ull,
+ 8268256043420059241ull, 3668766344535446504ull}},
+{{7633814810232488966ull, 3214601739415591628ull,
+ 10335320054275074052ull, 4585957930669308130ull}},
+{{13994506293250081412ull, 11232498123989520575ull,
+ 11071261052349309186ull, 2866223706668317581ull}},
+{{12881446848135213861ull, 4817250618132124911ull, 4018260154472771ull,
+ 3582779633335396977ull}},
+{{11490122541741629422ull, 1409877254237768235ull,
+ 4616708843620478868ull, 4478474541669246221ull}},
+{{4875483579374824437ull, 10104545320753380955ull,
+ 5191286036476493244ull, 2799046588543278888ull}},
+{{1482668455791142642ull, 12630681650941726194ull,
+ 6489107545595616555ull, 3498808235679098610ull}},
+{{11076707606593704110ull, 11176666045249769838ull,
+ 17334756468849296502ull, 4373510294598873262ull}},
+{{2311256235693677165ull, 2373730259853718245ull,
+ 6222536774603422410ull, 2733443934124295789ull}},
+{{7500756313044484360ull, 12190534861671923614ull,
+ 12389856986681665916ull, 3416804917655369736ull}},
+{{152573354450829642ull, 15238168577089904518ull,
+ 15487321233352082395ull, 4271006147069212170ull}},
+{{13930416401813932239ull, 7218012351467496371ull,
+ 14291261789272439401ull, 2669378841918257606ull}},
+{{12801334483840027394ull, 13634201457761758368ull,
+ 8640705199735773443ull, 3336723552397822008ull}},
+{{16001668104800034243ull, 12431065803774810056ull,
+ 10800881499669716804ull, 4170904440497277510ull}},
+{{10001042565500021402ull, 16992788164214032093ull,
+ 2138864918866185098ull, 2606815275310798444ull}},
+{{17112989225302414656ull, 12017613168412764308ull,
+ 2673581148582731373ull, 3258519094138498055ull}},
+{{2944492457918466704ull, 1186958405233791674ull,
+ 17177034491010577929ull, 4073148867673122568ull}},
+{{6451993804626429594ull, 12271064049339589556ull,
+ 10735646556881611205ull, 2545718042295701605ull}},
+{{8064992255783036993ull, 1503772006392323233ull,
+ 18031244214529401911ull, 3182147552869627006ull}},
+{{14692926338156184145ull, 15714773063272567753ull,
+ 13315683231306976580ull, 3977684441087033758ull}},
+{{2265549933706533235ull, 598361127690579038ull, 3710616001139472459ull,
+ 2486052775679396099ull}},
+{{12055309453987942351ull, 14583009464895387509ull,
+ 26583982996952669ull, 3107565969599245124ull}},
+{{1234078762202764227ull, 4393703775837070675ull, 33229978746190837ull,
+ 3884457461999056405ull}},
+{{16912200290872585306ull, 5051907869111863123ull,
+ 2326611745930063225ull, 2427785913749410253ull}},
+{{16528564345163343728ull, 10926570854817216808ull,
+ 7519950700839966935ull, 3034732392186762816ull}},
+{{2213961357744628044ull, 9046527550094133107ull,
+ 9399938376049958669ull, 3793415490233453520ull}},
+{{17524626913086250192ull, 7959922728022527143ull,
+ 5874961485031224168ull, 2370884681395908450ull}},
+{{17294097622930424836ull, 9949903410028158929ull,
+ 16567073893143806018ull, 2963605851744885562ull}},
+{{7782563973380867332ull, 3214007225680422854ull,
+ 11485470329574981715ull, 3704507314681106953ull}},
+{{252416464935654179ull, 18149655580546121948ull, 260889928343281715ull,
+ 2315317071675691846ull}},
+{{315520581169567724ull, 18075383457255264531ull,
+ 9549484447283877952ull, 2894146339594614807ull}},
+{{14229458781744123366ull, 4147485247859529047ull,
+ 7325169540677459537ull, 3617682924493268509ull}},
+{{13175137458752766304ull, 9796042578251799213ull,
+ 13768147944274212325ull, 4522103655616585636ull}},
+{{10540303920934172892ull, 8428369620621068460ull,
+ 17828464502026158511ull, 2826314784760366022ull}},
+{{13175379901167716115ull, 5923776007348947671ull,
+ 13062208590677922331ull, 3532893480950457528ull}},
+{{11857538858032257240ull, 2793033990758796685ull,
+ 16327760738347402914ull, 4416116851188071910ull}},
+{{9716804795483854727ull, 6357332262651635832ull,
+ 5593164443039738917ull, 2760073031992544944ull}},
+{{12146005994354818409ull, 12558351346741932694ull,
+ 6991455553799673646ull, 3450091289990681180ull}},
+{{5959135456088747203ull, 6474567146572640060ull,
+ 8739319442249592058ull, 4312614112488351475ull}},
+{{12947831696910242810ull, 8658290485035287941ull,
+ 3156231642192301084ull, 2695383820305219672ull}},
+{{2349731565855639800ull, 10822863106294109927ull,
+ 3945289552740376355ull, 3369229775381524590ull}},
+{{16772222512601713462ull, 8916892864440249504ull,
+ 14154983977780246252ull, 4211537219226905737ull}},
+{{10482639070376070914ull, 14796430077129931748ull,
+ 1929335958471572051ull, 2632210762016816086ull}},
+{{13103298837970088642ull, 13883851577985026781ull,
+ 11635041984944240872ull, 3290263452521020107ull}},
+{{2544065492180447091ull, 17354814472481283477ull,
+ 9932116462752913186ull, 4112829315651275134ull}},
+{{3895883941826473384ull, 15458445063728190077ull,
+ 1595886770793182837ull, 2570518322282046959ull}},
+{{9481540945710479634ull, 5487998274378073884ull,
+ 15829916518773642259ull, 3213147902852558698ull}},
+{{11851926182138099542ull, 2248311824545204451ull,
+ 10564023611612277016ull, 4016434878565698373ull}},
+{{5101610854622618262ull, 1405194890340752782ull,
+ 8908357766471367087ull, 2510271799103561483ull}},
+{{15600385605133048635ull, 15591551668208104689ull,
+ 6523761189661820954ull, 3137839748879451854ull}},
+{{5665423951134147082ull, 10266067548405355054ull,
+ 17378073523932052001ull, 3922299686099314817ull}},
+{{17375948024741005638ull, 17945507263821816668ull,
+ 3943766924816450644ull, 2451437303812071761ull}},
+{{3273190957216705432ull, 3985140006067719220ull,
+ 9541394674447951210ull, 3064296629765089701ull}},
+{{4091488696520881790ull, 14204797044439424833ull,
+ 16538429361487326916ull, 3830370787206362126ull}},
+{{14086395481394020879ull, 18101370189629416328ull,
+ 5724832332502191418ull, 2393981742003976329ull}},
+{{17607994351742526098ull, 13403340700181994602ull,
+ 11767726434055127177ull, 2992477177504970411ull}},
+{{12786620902823381815ull, 2919117819945329541ull,
+ 10097972024141521068ull, 3740596471881213014ull}},
+{{10297481073478307587ull, 11047820674320606771ull,
+ 1699546496661062763ull, 2337872794925758134ull}},
+{{8260165323420496579ull, 9198089824473370560ull,
+ 11347805157681104262ull, 2922340993657197667ull}},
+{{10325206654275620724ull, 2274240243736937392ull,
+ 9573070428673992424ull, 3652926242071497084ull}},
+{{12906508317844525904ull, 2842800304671171740ull,
+ 11966338035842490530ull, 4566157802589371355ull}},
+{{17289939735507604498ull, 6388436208846870241ull,
+ 5173118263187862629ull, 2853848626618357097ull}},
+{{7777366614102341911ull, 12597231279485975706ull,
+ 11078083847412216190ull, 3567310783272946371ull}},
+{{498336230773151581ull, 6523167062502693825ull, 9235918790837882334ull,
+ 4459138479091182964ull}},
+{{11840675190301689498ull, 17912037469346347352ull,
+ 14995821281128452266ull, 2786961549431989352ull}},
+{{14800843987877111872ull, 13166674799828158382ull,
+ 298032527701013717ull, 3483701936789986691ull}},
+{{9277682947991614032ull, 2623285444503034266ull,
+ 14207598714908430859ull, 4354627420987483363ull}},
+{{10410237860922146674ull, 17780454467310254080ull,
+ 6573906187604075334ull, 2721642138117177102ull}},
+{{13012797326152683343ull, 13002196047283041792ull,
+ 17440754771359869976ull, 3402052672646471377ull}},
+{{16265996657690854179ull, 16252745059103802240ull,
+ 7965885408917673758ull, 4252565840808089222ull}},
+{{10166247911056783862ull, 5546279643512488496ull,
+ 366992362146158195ull, 2657853650505055764ull}},
+{{12707809888820979827ull, 2321163535963222716ull,
+ 458740452682697744ull, 3322317063131319705ull}},
+{{15884762361026224784ull, 2901454419954028395ull,
+ 5185111584280760084ull, 4152896328914149631ull}},
+{{7622133466427696538ull, 11036781049326043555ull,
+ 10158223767816556908ull, 2595560205571343519ull}},
+{{4915980814607232768ull, 13795976311657554444ull,
+ 8086093691343308231ull, 3244450256964179399ull}},
+{{6144976018259040960ull, 12633284371144555151ull,
+ 5495931095751747385ull, 4055562821205224249ull}},
+{{10758139039052982456ull, 978273704324265113ull,
+ 14964171980913311876ull, 2534726763253265155ull}},
+{{18059359817243615974ull, 1222842130405331391ull,
+ 14093528957714251941ull, 3168408454066581444ull}},
+{{17962513753127132064ull, 6140238681434052143ull,
+ 17616911197142814926ull, 3960510567583226805ull}},
+{{18144100123345539396ull, 17672707231178446301ull,
+ 13316412507427953280ull, 2475319104739516753ull}},
+{{8845067098899760533ull, 3644139965263506261ull,
+ 2810457579002777889ull, 3094148880924395942ull}},
+{{15668019892052088570ull, 9166860975006770730ull,
+ 12736444010608248169ull, 3867686101155494927ull}},
+{{14404198450959943261ull, 17258503155447701466ull,
+ 14877806534271236961ull, 2417303813222184329ull}},
+{{8781876026845153268ull, 7738070889027463121ull,
+ 4762200112556882490ull, 3021629766527730412ull}},
+{{15589031051983829488ull, 449216574429553093ull,
+ 5952750140696103113ull, 3777037208159663015ull}},
+{{12048987416703587382ull, 11809975405086940443ull,
+ 10637997865576146301ull, 2360648255099789384ull}},
+{{10449548252452096324ull, 927411201076511842ull,
+ 13297497331970182877ull, 2950810318874736730ull}},
+{{3838563278710344597ull, 5770950019773027707ull,
+ 7398499628107952788ull, 3688512898593420913ull}},
+{{186518079960542842ull, 7213687524716284634ull,
+ 13859810553562328889ull, 4610641123241776141ull}},
+{{4728259818402727180ull, 16037769749016147656ull,
+ 10968224605190149507ull, 2881650702026110088ull}},
+{{5910324773003408975ull, 15435526167842796666ull,
+ 13710280756487686884ull, 3602063377532637610ull}},
+{{16611278003109037027ull, 847663636093944216ull,
+ 7914478908754832798ull, 4502579221915797013ull}},
+{{10382048751943148142ull, 14364847827840878847ull,
+ 7252392327185464450ull, 2814112013697373133ull}},
+{{8365874921501547273ull, 8732687747946322751ull,
+ 13677176427409218467ull, 3517640017121716416ull}},
+{{5845657633449546188ull, 6304173666505515535ull,
+ 17096470534261523084ull, 4397050021402145520ull}},
+{{10571065048547048223ull, 13163480578420723017ull,
+ 10685294083913451927ull, 2748156263376340950ull}},
+{{17825517329111198183ull, 11842664704598515867ull,
+ 4133245568037039101ull, 3435195329220426188ull}},
+{{17670210642961609825ull, 968272825465981122ull,
+ 5166556960046298877ull, 4293994161525532735ull}},
+{{15655567670278394045ull, 2911013525129932153ull,
+ 10146627127670018654ull, 2683746350953457959ull}},
+{{5734401532565828844ull, 12862138943267191000ull,
+ 8071597891160135413ull, 3354682938691822449ull}},
+{{7168001915707286055ull, 2242615623801825038ull,
+ 14701183382377557171ull, 4193353673364778061ull}},
+{{18315059252599217496ull, 17542535829371998312ull,
+ 11494082623199667183ull, 2620846045852986288ull}},
+{{4447079992039470254ull, 17316483768287609987ull,
+ 14367603278999583979ull, 3276057557316232860ull}},
+{{947163971621949914ull, 17033918691932124580ull,
+ 17959504098749479974ull, 4095071946645291075ull}},
+{{9815349519118494504ull, 6034513164030189958ull,
+ 8918847052504731032ull, 2559419966653306922ull}},
+{{3045814862043342322ull, 7543141455037737448ull,
+ 1925186778776137982ull, 3199274958316633653ull}},
+{{3807268577554177903ull, 205554781942396002ull, 7018169491897560382ull,
+ 3999093697895792066ull}},
+{{6991228879398749093ull, 13963529793996161213ull,
+ 8998041950863363142ull, 2499433561184870041ull}},
+{{13350722117675824270ull, 8231040205640425708ull,
+ 15859238457006591832ull, 3124291951481087551ull}},
+{{16688402647094780338ull, 10288800257050532135ull,
+ 15212362052830851886ull, 3905364939351359439ull}},
+{{17347780682075319567ull, 1818814142229194680ull,
+ 16425255310660364285ull, 2440853087094599649ull}},
+{{3237981778884597843ull, 6885203696213881255ull,
+ 6696511083043291644ull, 3051066358868249562ull}},
+{{17882535278887911016ull, 8606504620267351568ull,
+ 17594010890658890363ull, 3813832948585311952ull}},
+{{11176584549304944385ull, 3073222378453400778ull,
+ 10996256806661806477ull, 2383645592865819970ull}},
+{{4747358649776404673ull, 8453213991494138877ull,
+ 4521948971472482288ull, 2979556991082274963ull}},
+{{10545884330647893745ull, 10566517489367673596ull,
+ 1040750195913214956ull, 3724446238852843704ull}},
+{{15814549743509709399ull, 15827445467709571805ull,
+ 650468872445759347ull, 2327778899283027315ull}},
+{{5933129124104973037ull, 15172620816209576853ull,
+ 14648144145839362896ull, 2909723624103784143ull}},
+{{12028097423558604200ull, 519031946552419450ull,
+ 13698494163871815717ull, 3637154530129730179ull}},
+{{5811749742593479442ull, 5260475951617912217ull,
+ 12511431686412381742ull, 4546443162662162724ull}},
+{{15161558635189394411ull, 17122855525043358847ull,
+ 17043016840862514396ull, 2841526976663851702ull}},
+{{14340262275559355110ull, 2956825332594646943ull,
+ 12080399014223367188ull, 3551908720829814628ull}},
+{{13313641826021805983ull, 3696031665743308679ull,
+ 15100498767779208985ull, 4439885901037268285ull}},
+{{15238555168904710596ull, 13839234837158037684ull,
+ 11743654739075699567ull, 2774928688148292678ull}},
+{{601449887421336628ull, 12687357528020159202ull,
+ 5456196386989848651ull, 3468660860185365848ull}},
+{{9975184396131446593ull, 11247510891597811098ull,
+ 6820245483737310814ull, 4335826075231707310ull}},
+{{10846176266009542025ull, 2418008288821244032ull,
+ 18097711482617982971ull, 2709891297019817068ull}},
+{{13557720332511927531ull, 16857568416308718752ull,
+ 4175395279562927097ull, 3387364121274771336ull}},
+{{16947150415639909414ull, 7236902465103734728ull,
+ 5219244099453658872ull, 4234205151593464170ull}},
+{{10591969009774943384ull, 4523064040689834205ull,
+ 7873713580585924699ull, 2646378219745915106ull}},
+{{17851647280646067134ull, 1042144032434904852ull,
+ 618769938877630066ull, 3307972774682393883ull}},
+{{3867815027098032301ull, 10526052077398406874ull,
+ 14608520478879201294ull, 4134965968352992353ull}},
+{{7029070410363658092ull, 1967096529946616392ull,
+ 2212796271658418953ull, 2584353730220620221ull}},
+{{8786338012954572615ull, 7070556680860658394ull,
+ 7377681358000411595ull, 3230442162775775276ull}},
+{{1759550479338439961ull, 4226509832648435089ull,
+ 9222101697500514494ull, 4038052703469719095ull}},
+{{12628934095654994736ull, 16476626700687435642ull,
+ 12681342588578903414ull, 2523782939668574434ull}},
+{{6562795582713967612ull, 11372411339004518745ull,
+ 6628306198868853460ull, 3154728674585718043ull}},
+{{12815180496819847418ull, 14215514173755648431ull,
+ 3673696730158678921ull, 3943410843232147554ull}},
+{{14927016838153486493ull, 1967167330956198413ull,
+ 6907746474776562230ull, 2464631777020092221ull}},
+{{4823712992409694404ull, 11682331200550023825ull,
+ 13246369111898090691ull, 3080789721275115276ull}},
+{{10641327258939505909ull, 9991227982260141877ull,
+ 16557961389872613364ull, 3850987151593894095ull}},
+{{8956672546050885145ull, 15467889525767364481ull,
+ 17266254896311465208ull, 2406866969746183809ull}},
+{{15807526700990994335ull, 888117833499653985ull,
+ 7747760565107167799ull, 3008583712182729762ull}},
+{{5924350320956579207ull, 14945205347156731194ull,
+ 461328669529183940ull, 3760729640228412203ull}},
+{{8314404969025249908ull, 117381305118181188ull,
+ 16429231482951597627ull, 2350456025142757626ull}},
+{{10393006211281562385ull, 13981784686679890197ull,
+ 11313167316834721225ull, 2938070031428447033ull}},
+{{17602943782529340886ull, 3642172803067699034ull,
+ 306401090761237820ull, 3672587539285558792ull}},
+{{12780307691306900299ull, 4552716003834623793ull,
+ 383001363451547275ull, 4590734424106948490ull}},
+{{1070163279425730831ull, 539604493182945919ull, 4851061870584604951ull,
+ 2869209015066842806ull}},
+{{15172762154564327251ull, 14509563671760846110ull,
+ 15287199375085531996ull, 3586511268833553507ull}},
+{{9742580656350633255ull, 18136954589701057638ull,
+ 14497313200429527091ull, 4483139086041941884ull}},
+{{1477426891791757881ull, 9029753609349467072ull,
+ 18284192787123230240ull, 2801961928776213677ull}},
+{{1846783614739697351ull, 11287192011686833840ull,
+ 9020182928621874088ull, 3502452410970267097ull}},
+{{2308479518424621688ull, 14108990014608542300ull,
+ 15886914679204730514ull, 4378065513712833871ull}},
+{{10666171735870164363ull, 13429804777557726841ull,
+ 16846850702144038427ull, 2736290946070521169ull}},
+{{17944400688265093358ull, 12175569953519770647ull,
+ 7223505322397884322ull, 3420363682588151462ull}},
+{{17818814841903978794ull, 5996090405044937501ull,
+ 18252753689852131211ull, 4275454603235189327ull}},
+{{13442602285403680698ull, 1441713493939391986ull,
+ 18325500083798663863ull, 2672159127021993329ull}},
+{{7579880819899825065ull, 15637199922706403695ull,
+ 9071817049466166116ull, 3340198908777491662ull}},
+{{4863165006447393427ull, 1099755829673453003ull,
+ 2116399274977931838ull, 4175248635971864578ull}},
+{{733635119815926940ull, 14522405448828071839ull,
+ 5934435565288595302ull, 2609530397482415361ull}},
+{{14752101955052072387ull, 8929634774180313990ull,
+ 12029730475038132032ull, 3261912996853019201ull}},
+{{9216755406960314675ull, 11162043467725392488ull,
+ 1202105038515501328ull, 4077391246066274002ull}},
+{{5760472129350196672ull, 6976277167328370305ull,
+ 5363001667499576234ull, 2548369528791421251ull}},
+{{11812276180115133744ull, 17943718496015238689ull,
+ 2092066065947082388ull, 3185461910989276564ull}},
+{{930287169861753468ull, 3982904046309496746ull, 2615082582433852986ull,
+ 3981827388736595705ull}},
+{{5193115499590983822ull, 7101001047370823370ull,
+ 13163641660089627876ull, 2488642117960372315ull}},
+{{15714766411343505585ull, 8876251309213529212ull,
+ 11842866056684646941ull, 3110802647450465394ull}},
+{{1196713940469830365ull, 15707000154944299420ull,
+ 5580210534001032868ull, 3888503309313081743ull}},
+{{9971318249648419786ull, 593503059985411329ull,
+ 10405160611391727399ull, 2430314568320676089ull}},
+{{17075833830487912637ull, 14576936880263927873ull,
+ 17618136782667047152ull, 3037893210400845111ull}},
+{{7509734232827727084ull, 18221171100329909842ull,
+ 17410984959906421036ull, 3797366513001056389ull}},
+{{9305269913944717332ull, 2164859900851417843ull,
+ 13187708609155207100ull, 2373354070625660243ull}},
+{{7019901374003508760ull, 2706074876064272304ull,
+ 11872949743016620971ull, 2966692588282075304ull}},
+{{8774876717504385950ull, 17217651650362504092ull,
+ 14841187178770776213ull, 3708365735352594130ull}},
+{{14707669985295017027ull, 13066875290690259009ull,
+ 13887428005159123037ull, 2317728584595371331ull}},
+{{4549529426336607572ull, 2498536058080660050ull,
+ 12747598988021515893ull, 2897160730744214164ull}},
+{{14910283819775535273ull, 7734856091028212966ull,
+ 15934498735026894866ull, 3621450913430267705ull}},
+{{9414482737864643283ull, 445198076930490400ull, 6083065363501454871ull,
+ 4526813641787834632ull}},
+{{5884051711165402052ull, 7195777825722638356ull,
+ 3801915852188409294ull, 2829258526117396645ull}},
+{{7355064638956752565ull, 18218094319008073753ull,
+ 9364080833662899521ull, 3536573157646745806ull}},
+{{13805516817123328610ull, 8937559843477928479ull,
+ 2481729005223848594ull, 4420716447058432258ull}},
+{{15545977038343162237ull, 10197660920601093203ull,
+ 6162766646692293275ull, 2762947779411520161ull}},
+{{14820785279501564893ull, 8135390132323978600ull,
+ 12315144326792754498ull, 3453684724264400201ull}},
+{{79237525667404500ull, 945865628550197443ull, 1558872353208779411ull,
+ 4317105905330500252ull}},
+{{16190424518037985476ull, 16732067082339731065ull,
+ 10197667257610262939ull, 2698191190831562657ull}},
+{{6402972592265318133ull, 16303397834497275928ull,
+ 17358770090440216578ull, 3372738988539453321ull}},
+{{8003715740331647667ull, 11155875256266819102ull,
+ 7863404557768107011ull, 4215923735674316652ull}},
+{{390636319279891888ull, 4666579025953067987ull,
+ 14137999885459842690ull, 2634952334796447907ull}},
+{{14323353454382028572ull, 15056595819296110791ull,
+ 13060813838397415458ull, 3293690418495559884ull}},
+{{13292505799550147810ull, 9597372737265362681ull,
+ 16326017297996769323ull, 4117113023119449855ull}},
+{{1390287097077760526ull, 3692514951577157724ull,
+ 17121289838889062683ull, 2573195639449656159ull}},
+{{1737858871347200657ull, 3957671044059251ull, 16789926280183940450ull,
+ 3216494549312070199ull}},
+{{16007381644466164533ull, 9228319125659849871ull,
+ 16375721831802537658ull, 4020618186640087749ull}},
+{{16922142555432434689ull, 10379385471964794073ull,
+ 12540669154090279988ull, 2512886366650054843ull}},
+{{7317620139008379650ull, 12974231839955992592ull,
+ 11064150424185462081ull, 3141107958312568554ull}},
+{{9147025173760474562ull, 2382731744662827028ull,
+ 4606815993377051794ull, 3926384947890710693ull}},
+{{14940262770455072409ull, 6100893358841654796ull,
+ 5185103005074351323ull, 2453990592431694183ull}},
+{{228584389359288896ull, 3014430680124680592ull, 1869692737915551250ull,
+ 3067488240539617729ull}},
+{{285730486699111119ull, 12991410387010626548ull,
+ 6948801940821826966ull, 3834360300674522161ull}},
+{{9401953591041720258ull, 3507945473454253688ull,
+ 15872216259082111614ull, 2396475187921576350ull}},
+{{11752441988802150322ull, 13608303878672592918ull,
+ 10616898286997863709ull, 2995593984901970438ull}},
+{{5467180449147912095ull, 3175321793058577436ull,
+ 4047750821892553829ull, 3744492481127463048ull}},
+{{12640359817572220867ull, 4290419129875304849ull,
+ 2529844263682846143ull, 2340307800704664405ull}},
+{{1965391716683112372ull, 751337893916743158ull, 7773991348030945583ull,
+ 2925384750880830506ull}},
+{{11680111682708666273ull, 14774230422678092659ull,
+ 494117148183906170ull, 3656730938601038133ull}},
+{{9988453584958444937ull, 9244415991492840016ull,
+ 5229332453657270617ull, 4570913673251297666ull}},
+{{6242783490599028086ull, 17306975040751494770ull,
+ 7880018801963182039ull, 2856821045782061041ull}},
+{{17026851400103560915ull, 17022032782511980558ull,
+ 14461709520881365453ull, 3571026307227576301ull}},
+{{12060192213274675336ull, 7442482922857811986ull,
+ 4242078845819543105ull, 4463782884034470377ull}},
+{{12149306151724059989ull, 16180766872854602251ull,
+ 14180514324705684200ull, 2789864302521543985ull}},
+{{10574946671227687082ull, 1779214517358701198ull,
+ 3890584850599941539ull, 3487330378151929982ull}},
+{{3995311302179833045ull, 16059076201980540210ull,
+ 14086603100104702731ull, 4359162972689912477ull}},
+{{7108755582289783557ull, 7731079617024143679ull,
+ 11109969946779133159ull, 2724476857931195298ull}},
+{{4274258459434841542ull, 5052163502852791695ull,
+ 4664090396619140641ull, 3405596072413994123ull}},
+{{731137055866164024ull, 10926890396993377523ull,
+ 1218426977346537897ull, 4256995090517492654ull}},
+{{16597861724412210179ull, 18358521544189330711ull,
+ 14596574916123749897ull, 2660621931573432908ull}},
+{{16135641137087874820ull, 9113093874954499677ull,
+ 18245718645154687372ull, 3325777414466791135ull}},
+{{6334493366077679812ull, 11391367343693124597ull,
+ 18195462288015971311ull, 4157221768083488919ull}},
+{{6264901363012243835ull, 14037133617449284729ull,
+ 18289692957651063925ull, 2598263605052180574ull}},
+{{12442812722192692697ull, 3711358966529442199ull,
+ 13638744160209054099ull, 3247829506315225718ull}},
+{{10941829884313477968ull, 27512689734414845ull, 7825058163406541816ull,
+ 4059786882894032148ull}},
+{{9144486686909617682ull, 17195431084009278ull, 14114033388983864443ull,
+ 2537366801808770092ull}},
+{{2207236321782246294ull, 13856552344137175310ull,
+ 17642541736229830553ull, 3171708502260962615ull}},
+{{11982417439082583676ull, 3485632374889305425ull,
+ 17441491151859900288ull, 3964635627826203269ull}},
+{{571481871785532942ull, 2178520234305815891ull,
+ 13206774979126131632ull, 2477897267391377043ull}},
+{{14549410395014079889ull, 2723150292882269863ull,
+ 11896782705480276636ull, 3097371584239221304ull}},
+{{13575076975340211957ull, 3403937866102837329ull,
+ 14870978381850345795ull, 3871714480299026630ull}},
+{{1566894081946550617ull, 18268362230810130995ull,
+ 4682675470229078217ull, 2419821550186891644ull}},
+{{15793675657715351983ull, 9000394733230500031ull,
+ 5853344337786347772ull, 3024776937733614555ull}},
+{{15130408553716802075ull, 11250493416538125039ull,
+ 2704994403805546811ull, 3780971172167018194ull}},
+{{16374034373714083153ull, 4725715376122634197ull,
+ 6302307520805854661ull, 2363106982604386371ull}},
+{{6632484911860440229ull, 10518830238580680651ull,
+ 3266198382579930422ull, 2953883728255482964ull}},
+{{3678920121398162383ull, 3925165761371075006ull,
+ 4082747978224913028ull, 3692354660319353705ull}},
+{{16134383131156015201ull, 11676600637711697686ull,
+ 14080932532459040402ull, 2307721662699596065ull}},
+{{10944606877090243193ull, 5372378760284846300ull,
+ 3766107610291636791ull, 2884652078374495082ull}},
+{{13680758596362803992ull, 2103787431928669971ull,
+ 13931006549719321797ull, 3605815097968118852ull}},
+{{12489262227026117086ull, 7241420308338225368ull,
+ 17413758187149152246ull, 4507268872460148565ull}},
+{{7805788891891323179ull, 18360945747993554567ull,
+ 13189441876181914105ull, 2817043045287592853ull}},
+{{5145550096436766069ull, 9116124129709779497ull,
+ 2651744289945228920ull, 3521303806609491067ull}},
+{{11043623638973345490ull, 11395155162137224371ull,
+ 17149738417713699862ull, 4401629758261863833ull}},
+{{4596421765144646980ull, 2510285957908377328ull,
+ 3801057483429980558ull, 2751018598913664896ull}},
+{{5745527206430808724ull, 12361229484240247468ull,
+ 4751321854287475697ull, 3438773248642081120ull}},
+{{7181909008038510905ull, 1616478800018145623ull,
+ 5939152317859344622ull, 4298466560802601400ull}},
+{{11406222157665151172ull, 14845357305293504726ull,
+ 3711970198662090388ull, 2686541600501625875ull}},
+{{5034405660226663157ull, 109952557907329292ull, 28276729900225082ull,
+ 3358177000627032344ull}},
+{{6293007075283328946ull, 9360812734238937423ull, 35345912375281352ull,
+ 4197721250783790430ull}},
+{{10850658449693162448ull, 5850507958899335889ull,
+ 13857149250516714557ull, 2623575781739869018ull}},
+{{18175009080543840963ull, 11924820967051557765ull,
+ 8098064526291117388ull, 3279469727174836273ull}},
+{{8883703295397637492ull, 14906026208814447207ull,
+ 14734266676291284639ull, 4099337158968545341ull}},
+{{12469843587264605289ull, 16233795408150111360ull,
+ 11514759681895746851ull, 2562085724355340838ull}},
+{{15587304484080756611ull, 15680558241760251296ull,
+ 5170077565514907756ull, 3202607155444176048ull}},
+{{1037386531391394147ull, 1153953728490762505ull,
+ 6462596956893634696ull, 4003258944305220060ull}},
+{{12177581628188091102ull, 721221080306726565ull,
+ 13262495134913297493ull, 2502036840190762537ull}},
+{{1386918979952950166ull, 5513212368810796111ull,
+ 2743060863359458154ull, 3127546050238453172ull}},
+{{15568706780223351419ull, 16114887497868270946ull,
+ 3428826079199322692ull, 3909432562798066465ull}},
+{{14342127756066982541ull, 848432649312893533ull,
+ 13672231345568046443ull, 2443395351748791540ull}},
+{{4092601639801564464ull, 14895598866923280629ull,
+ 17090289181960058053ull, 3054244189685989425ull}},
+{{9727438068179343484ull, 4784440528371937074ull,
+ 7527803422167908855ull, 3817805237107486782ull}},
+{{10691334811039477582ull, 9907804357873542527ull, 93191120427555130ull,
+ 2386128273192179239ull}},
+{{8752482495371959073ull, 3161383410487152351ull,
+ 13951546955816607625ull, 2982660341490224048ull}},
+{{6328917100787560937ull, 8563415281536328343ull,
+ 17439433694770759531ull, 3728325426862780060ull}},
+{{10873102215633307442ull, 3046291541746511262ull,
+ 1676274022376948899ull, 2330203391789237538ull}},
+{{4368005732686858494ull, 17642922482465302790ull,
+ 11318714564825961931ull, 2912754239736546922ull}},
+{{14683379202713348926ull, 17441967084654240583ull,
+ 4925021169177676606ull, 3640942799670683653ull}},
+{{13742537984964298253ull, 12579086818963024921ull,
+ 10767962479899483662ull, 4551178499588354566ull}},
+{{1671557212961604552ull, 3250243243424502672ull,
+ 2118290531509789385ull, 2844486562242721604ull}},
+{{2089446516202005690ull, 8674490072708016244ull,
+ 2647863164387236731ull, 3555608202803402005ull}},
+{{2611808145252507113ull, 6231426572457632401ull,
+ 7921514973911433818ull, 4444510253504252506ull}},
+{{13161595136851286706ull, 8506327626213408154ull,
+ 9562632877122034040ull, 2777818908440157816ull}},
+{{7228621884209332574ull, 10632909532766760193ull,
+ 11953291096402542550ull, 3472273635550197270ull}},
+{{13647463373689053621ull, 4067764879103674433ull,
+ 5718241833648402380ull, 4340342044437746588ull}},
+{{1612135580914576657ull, 11765725086294572329ull,
+ 12797273182885027295ull, 2712713777773591617ull}},
+{{6626855494570608726ull, 10095470339440827507ull,
+ 2161533423324120407ull, 3390892222216989522ull}},
+{{3671883349785873003ull, 8007651905873646480ull,
+ 11925288816009926317ull, 4238615277771236902ull}},
+{{2294927093616170627ull, 7310625450384723002ull,
+ 2841619491578816044ull, 2649134548607023064ull}},
+{{12092030903874989092ull, 9138281812980903752ull,
+ 3552024364473520055ull, 3311418185758778830ull}},
+{{15115038629843736365ull, 6811166247798741786ull,
+ 13663402492446675877ull, 4139272732198473537ull}},
+{{14058585162079723132ull, 6562821914087907568ull,
+ 1622097530138090567ull, 2587045457624045961ull}},
+{{17573231452599653915ull, 3591841374182496556ull,
+ 6639307931100001113ull, 3233806822030057451ull}},
+{{3519795242040015778ull, 9101487736155508600ull,
+ 3687448895447613487ull, 4042258527537571814ull}},
+{{2199872026275009861ull, 12605958862738274731ull,
+ 16139713614936922141ull, 2526411579710982383ull}},
+{{16584898088125926038ull, 1922390523140679701ull,
+ 15562956000243764773ull, 3158014474638727979ull}},
+{{6896064554875243836ull, 7014674172353237531ull,
+ 14842008981877318062ull, 3947518093298409974ull}},
+{{2004197337583333446ull, 18219229413002937169ull,
+ 4664569595245935884ull, 2467198808311506234ull}},
+{{7116932690406554711ull, 4327292692544119845ull,
+ 15054084030912195664ull, 3083998510389382792ull}},
+{{13507851881435581292ull, 5409115865680149806ull,
+ 370860964930692964ull, 3854998137986728491ull}},
+{{3830721407469850404ull, 12604069452904869437ull,
+ 16372689167577540766ull, 2409373836241705306ull}},
+{{9400087777764700909ull, 6531714779276310988ull,
+ 11242489422617150150ull, 3011717295302131633ull}},
+{{11750109722205876136ull, 17388015510950164543ull,
+ 218053722989273975ull, 3764646619127664542ull}},
+{{14261347604019754441ull, 17785038721984934695ull,
+ 13971341632150459946ull, 2352904136954790338ull}},
+{{13214998486597305147ull, 13007926365626392561ull,
+ 8240805003333299125ull, 2941130171193487923ull}},
+{{2683690052964467722ull, 2424849901750826990ull,
+ 5689320235739236003ull, 3676412713991859904ull}},
+{{12577984603060360460ull, 16866120432470697449ull,
+ 7111650294674045003ull, 4595515892489824880ull}},
+{{943711349271643432ull, 8235482261080491954ull, 4444781434171278127ull,
+ 2872197432806140550ull}},
+{{10403011223444330098ull, 5682666807923227038ull,
+ 14779348829568873467ull, 3590246791007675687ull}},
+{{3780391992450636814ull, 2491647491476645894ull,
+ 13862500018533703930ull, 4487808488759594609ull}},
+{{16197803050563811721ull, 6168965700600291587ull,
+ 1746533483942483100ull, 2804880305474746631ull}},
+{{15635567794777376747ull, 7711207125750364484ull,
+ 16018224910210267587ull, 3506100381843433288ull}},
+{{1097715669762169318ull, 5027322888760567702ull,
+ 1576037064053282868ull, 4382625477304291611ull}},
+{{14521130348883519536ull, 12365448842330130621ull,
+ 17125924229529159456ull, 2739140923315182256ull}},
+{{4316354880822235708ull, 15456811052912663277ull,
+ 2960661213201897704ull, 3423926154143977821ull}},
+{{10007129619455182538ull, 874269742431277480ull,
+ 8312512534929760035ull, 4279907692679972276ull}},
+{{6254456012159489087ull, 16687319653515406089ull,
+ 14418692371185875829ull, 2674942307924982672ull}},
+{{12429756033626749262ull, 7024091511612093899ull,
+ 18023365463982344787ull, 3343677884906228340ull}},
+{{10925509023606048674ull, 4168428371087729470ull,
+ 4082462756268379368ull, 4179597356132785426ull}},
+{{2216757121326392517ull, 2605267731929830919ull,
+ 7163225241095125009ull, 2612248347582990891ull}},
+{{16606004456940154358ull, 7868270683339676552ull,
+ 4342345532941518357ull, 3265310434478738614ull}},
+{{2310761497465641332ull, 14447024372601983595ull,
+ 14651303953031673754ull, 4081638043098423267ull}},
+{{17585127000411883497ull, 13641076251303627650ull,
+ 6851221961431102144ull, 2551023776936514542ull}},
+{{12758036713660078563ull, 17051345314129534563ull,
+ 17787399488643653488ull, 3188779721170643177ull}},
+{{11335859873647710299ull, 2867437568952366588ull,
+ 8399191305522403149ull, 3985974651463303972ull}},
+{{16308284457884594745ull, 4097991489808923069ull,
+ 14472866602806277776ull, 2491234157164564982ull}},
+{{6550297517073579719ull, 5122489362261153837ull,
+ 8867711216653071412ull, 3114042696455706228ull}},
+{{12799557914769362553ull, 6403111702826442296ull,
+ 11084639020816339265ull, 3892553370569632785ull}},
+{{7999723696730851596ull, 15531159860334996195ull, 10370360369130184ull,
+ 2432845856606020491ull}},
+{{5387968602486176591ull, 967205751709193628ull,
+ 13848021005743576443ull, 3041057320757525613ull}},
+{{6734960753107720738ull, 15044065244918655747ull,
+ 3474968201897306841ull, 3801321650946907017ull}},
+{{1903507461478631510ull, 2485011750433077986ull,
+ 13701070172254286536ull, 2375826031841816885ull}},
+{{11602756363703065195ull, 3106264688041347482ull,
+ 3291279660035694458ull, 2969782539802271107ull}},
+{{5280073417774055685ull, 13106202896906460161ull,
+ 17949157630326781784ull, 3712228174752838883ull}},
+{{14829260932177254564ull, 8191376810566537600ull,
+ 8912380509740544663ull, 2320142609220524302ull}},
+{{89832091512016588ull, 5627534994780784097ull, 1917103600320905021ull,
+ 2900178261525655378ull}},
+{{4723976132817408639ull, 11646104761903368025ull,
+ 11619751537255907084ull, 3625222826907069222ull}},
+{{10516656184449148703ull, 14557630952379210031ull,
+ 5301317384715108047ull, 4531528533633836528ull}},
+{{13490439142921799796ull, 16016048372878088125ull,
+ 3313323365446942529ull, 2832205333521147830ull}},
+{{3027990873370086032ull, 6185002410815446445ull,
+ 13365026243663453970ull, 3540256666901434787ull}},
+{{8396674610139995444ull, 16954625050374083864ull,
+ 12094596786151929558ull, 4425320833626793484ull}},
+{{5247921631337497153ull, 5984954638056414511ull,
+ 16782495028199731782ull, 2765825521016745927ull}},
+{{1948216020744483537ull, 16704565334425293947ull,
+ 16366432766822276823ull, 3457281901270932409ull}},
+{{16270328081212768133ull, 16269020649604229529ull,
+ 6622982903245682317ull, 4321602376588665512ull}},
+{{3251426023116898227ull, 12473980915216337408ull,
+ 4139364314528551448ull, 2701001485367915945ull}},
+{{4064282528896122784ull, 15592476144020421760ull,
+ 9785891411588077214ull, 3376251856709894931ull}},
+{{5080353161120153480ull, 10267223143170751392ull,
+ 7620678246057708614ull, 4220314820887368664ull}},
+{{3175220725700095925ull, 1805328446054331716ull,
+ 4762923903786067884ull, 2637696763054605415ull}},
+{{3969025907125119906ull, 2256660557567914645ull,
+ 1341968861305196951ull, 3297120953818256769ull}},
+{{9572968402333787787ull, 16655883752242057018ull,
+ 6289147095058884092ull, 4121401192272820961ull}},
+{{10594791269886005271ull, 1186555308296509828ull,
+ 15459931980480272318ull, 2575875745170513100ull}},
+{{13243489087357506588ull, 10706566172225413093ull,
+ 878170901890788781ull, 3219844681463141376ull}},
+{{2719303303914719523ull, 17994893733709154271ull,
+ 1097713627363485976ull, 4024805851828926720ull}},
+{{8617093592587781558ull, 11246808583568221419ull,
+ 686071017102178735ull, 2515503657393079200ull}},
+{{6159680972307339044ull, 9446824711032888870ull, 857588771377723419ull,
+ 3144379571741349000ull}},
+{{16922973252238949613ull, 7196844870363723183ull,
+ 1071985964222154274ull, 3930474464676686250ull}},
+{{17494387310290425364ull, 9109714062404714893ull,
+ 5281677246066234325ull, 2456546540422928906ull}},
+{{8032926082580867993ull, 15998828596433281521ull,
+ 15825468594437568714ull, 3070683175528661132ull}},
+{{14652843621653472895ull, 10775163708686826093ull,
+ 1335091669337409277ull, 3838353969410826416ull}},
+{{11463870272747114512ull, 9040320327142960260ull,
+ 834432293335880798ull, 2398971230881766510ull}},
+{{14329837840933893139ull, 2077028372073924517ull,
+ 10266412403524626806ull, 2998714038602208137ull}},
+{{4077239245885202712ull, 11819657501947181455ull,
+ 17444701522833171411ull, 3748392548252760171ull}},
+{{9465803556319333551ull, 5081442929503294457ull,
+ 8597095442557038180ull, 2342745342657975107ull}},
+{{16443940463826554843ull, 6351803661879118071ull,
+ 6134683284768909821ull, 2928431678322468884ull}},
+{{15943239561355805650ull, 12551440595776285493ull,
+ 7668354105961137276ull, 3660539597903086105ull}},
+{{6093991396412593350ull, 15689300744720356867ull,
+ 14197128650878809499ull, 4575674497378857631ull}},
+{{1502901613544176892ull, 7499969956236529090ull,
+ 15790734434440337793ull, 2859796560861786019ull}},
+{{11101999053784996923ull, 13986648463723049266ull,
+ 15126732024623034337ull, 3574745701077232524ull}},
+{{4654126780376470345ull, 3648252524371647871ull, 461670957069241306ull,
+ 4468432126346540656ull}},
+{{9826358265376375822ull, 6891843846159667823ull, 288544348168275816ull,
+ 2792770078966587910ull}},
+{{7671261813293081873ull, 8614804807699584779ull,
+ 9584052472065120578ull, 3490962598708234887ull}},
+{{4977391248188964438ull, 1545133972769705166ull,
+ 7368379571654012819ull, 4363703248385293609ull}},
+{{16945927585400266486ull, 17106609797476923392ull,
+ 16134452278352227771ull, 2727314530240808505ull}},
+{{2735665408040781491ull, 16771576228418766337ull,
+ 6333007292658121002ull, 3409143162801010632ull}},
+{{8031267778478364768ull, 11741098248668682113ull,
+ 7916259115822651253ull, 4261428953501263290ull}},
+{{16548757407617447740ull, 9644029414631620272ull,
+ 9559347965816544937ull, 2663393095938289556ull}},
+{{2239202685812258059ull, 16666722786716913245ull,
+ 11949184957270681171ull, 3329241369922861945ull}},
+{{7410689375692710477ull, 16221717464968753652ull,
+ 1101423141306187752ull, 4161551712403577432ull}},
+{{13855052896662719857ull, 10138573415605471032ull,
+ 688389463316367345ull, 2600969820252235895ull}},
+{{17318816120828399821ull, 17284902787934226694ull,
+ 14695544884427622893ull, 3251212275315294868ull}},
+{{12425148114180723968ull, 7771070429635619656ull,
+ 18369431105534528617ull, 4064015344144118585ull}},
+{{7765717571362952480ull, 16386134064590732045ull,
+ 4563365413317998529ull, 2540009590090074116ull}},
+{{14318832982631078504ull, 6647609525456251344ull,
+ 5704206766647498162ull, 3175011987612592645ull}},
+{{17898541228288848130ull, 17532883943675089988ull,
+ 11741944476736760606ull, 3968764984515740806ull}},
+{{1963216230825754273ull, 6346366446369543339ull,
+ 2727029279533087475ull, 2480478115322338004ull}},
+{{16289078343814356553ull, 3321272039534541269ull,
+ 3408786599416359344ull, 3100597644152922505ull}},
+{{6526289874485781980ull, 4151590049418176587ull,
+ 8872669267697837084ull, 3875747055191153131ull}},
+{{1773088162339919785ull, 11818115817741136175ull,
+ 3239575283097454225ull, 2422341909494470707ull}},
+{{16051418258207063444ull, 937586716894256506ull,
+ 17884527159153981494ull, 3027927386868088383ull}},
+{{10840900785904053496ull, 10395355432972596441ull,
+ 17743972930515088963ull, 3784909233585110479ull}},
+{{18304778037258503195ull, 4191254136394178823ull,
+ 18007512109213012458ull, 2365568270990694049ull}},
+{{18269286528145741090ull, 14462439707347499337ull,
+ 8674332081234101860ull, 2956960338738367562ull}},
+{{9001550104900012651ull, 18078049634184374172ull,
+ 1619543064687851517ull, 3696200423422959453ull}},
+{{14849340852417283715ull, 13604624030578927809ull,
+ 3318057424643601150ull, 2310125264639349658ull}},
+{{4726618010239440931ull, 7782408001368883954ull,
+ 13370943817659277246ull, 2887656580799187072ull}},
+{{15131644549654076972ull, 504637964856329134ull,
+ 16713679772074096558ull, 3609570725998983840ull}},
+{{9691183650212820407ull, 9854169492925187226ull,
+ 2445355641383069081ull, 4511963407498729801ull}},
+{{10668675799810400659ull, 17688070979146711776ull,
+ 13057562321932887935ull, 2819977129686706125ull}},
+{{13335844749763000823ull, 17498402705506001816ull,
+ 2486894847133946207ull, 3524971412108382657ull}},
+{{16669805937203751029ull, 17261317363455114366ull,
+ 7720304577344820663ull, 4406214265135478321ull}},
+{{5806942692324956489ull, 17705852379800528335ull,
+ 16354405406908982674ull, 2753883915709673950ull}},
+{{2646992346978807707ull, 12908943437895884611ull,
+ 11219634721781452535ull, 3442354894637092438ull}},
+{{17143798489005673346ull, 11524493278942467859ull,
+ 4801171365372039861ull, 4302943618296365548ull}},
+{{8409031046414851889ull, 9508651308552736364ull,
+ 12224104140212300721ull, 2689339761435228467ull}},
+{{10511288808018564862ull, 16497500154118308359ull,
+ 10668444156837987997ull, 3361674701794035584ull}},
+{{8527424991595818173ull, 6786817137365721737ull,
+ 13335555196047484997ull, 4202093377242544480ull}},
+{{16858855665815856118ull, 6547603720067270037ull,
+ 8334721997529678123ull, 2626308360776590300ull}},
+{{7238511526987656436ull, 3572818631656699643ull,
+ 10418402496912097654ull, 3282885450970737875ull}},
+{{4436453390307182641ull, 13689395326425650362ull,
+ 8411317102712734163ull, 4103606813713422344ull}},
+{{7384469387369377055ull, 6250029069802337524ull,
+ 5257073189195458852ull, 2564754258570888965ull}},
+{{9230586734211721318ull, 7812536337252921905ull,
+ 11183027504921711469ull, 3205942823213611206ull}},
+{{16149919436192039551ull, 14377356439993540285ull,
+ 4755412344297363528ull, 4007428529017014008ull}},
+{{12399542656833718672ull, 8985847774995962678ull,
+ 2972132715185852205ull, 2504642830635633755ull}},
+{{6276056284187372532ull, 15843995737172341252ull,
+ 17550223949264478968ull, 3130803538294542193ull}},
+{{7845070355234215664ull, 1358250597755874949ull,
+ 8102721881298434999ull, 3913504422868177742ull}},
+{{7209011981235078742ull, 7766435651238503699ull, 452515157384133970ull,
+ 2445940264292611089ull}},
+{{4399578958116460524ull, 484672527193353816ull, 5177329965157555367ull,
+ 3057425330365763861ull}},
+{{5499473697645575655ull, 14440898714273855982ull,
+ 11083348474874332112ull, 3821781662957204826ull}},
+{{17272229116310648496ull, 9025561696421159988ull,
+ 11538778815223845474ull, 2388613539348253016ull}},
+{{3143542321678759004ull, 2058580083671674178ull,
+ 14423473519029806843ull, 2985766924185316270ull}},
+{{13152799938953224563ull, 16408283159871756434ull,
+ 8805969861932482745ull, 3732208655231645338ull}},
+{{12832185980273153256ull, 3337647947278765915ull,
+ 10115417182135189620ull, 2332630409519778336ull}},
+{{11428546456914053666ull, 4172059934098457394ull,
+ 12644271477668987025ull, 2915788011899722920ull}},
+{{5062311034287791275ull, 9826760936050459647ull,
+ 15805339347086233781ull, 3644735014874653650ull}},
+{{1716202774432351189ull, 16895137188490462463ull,
+ 10533302147003016418ull, 4555918768593317063ull}},
+{{7990155761661301349ull, 15171146761233926943ull,
+ 13500842869517967117ull, 2847449230370823164ull}},
+{{5376008683649238783ull, 5128875396260244967ull,
+ 16876053586897458897ull, 3559311537963528955ull}},
+{{2108324836134160574ull, 11022780263752694113ull,
+ 16483380965194435717ull, 4449139422454411194ull}},
+{{12846918068652320119ull, 9195080674059127772ull,
+ 14913799121673910227ull, 2780712139034006996ull}},
+{{16058647585815400149ull, 6882164824146521811ull,
+ 195504828382836168ull, 3475890173792508746ull}},
+{{15461623463841862282ull, 8602706030183152264ull,
+ 9467753072333321018ull, 4344862717240635932ull}},
+{{9663514664901163926ull, 9988377287291858069ull,
+ 15140717707063101444ull, 2715539198275397457ull}},
+{{16691079349553842812ull, 12485471609114822586ull,
+ 5090839078546713093ull, 3394423997844246822ull}},
+{{11640477150087527707ull, 1771781456111364521ull,
+ 15586920885038167175ull, 4243029997305308527ull}},
+{{357769191163622961ull, 8024892437710684682ull,
+ 16659354580789936340ull, 2651893748315817829ull}},
+{{9670583525809304509ull, 10031115547138355852ull,
+ 6989135170705256713ull, 3314867185394772287ull}},
+{{12088229407261630636ull, 17150580452350332719ull,
+ 4124732944954182987ull, 4143583981743465359ull}},
+{{14472672407179601004ull, 8413269773505263997ull,
+ 9495487118237446223ull, 2589739988589665849ull}},
+{{4255782453692337542ull, 5904901198454192093ull,
+ 16481044916224195683ull, 3237174985737082311ull}},
+{{9931414085542809832ull, 2769440479640352212ull,
+ 15989620126852856700ull, 4046468732171352889ull}},
+{{15430505840319031953ull, 10954272336629995940ull,
+ 3075983551641953581ull, 2529042957607095556ull}},
+{{841388226689238325ull, 18304526439214882830ull,
+ 3844979439552441976ull, 3161303697008869445ull}},
+{{10275107320216323715ull, 4433913975309051921ull,
+ 9417910317867940375ull, 3951629621261086806ull}},
+{{17951157121203672082ull, 9688725262209239306ull,
+ 1274507930240074830ull, 2469768513288179254ull}},
+{{13215574364649814294ull, 2887534540906773325ull,
+ 10816506949654869346ull, 3087210641610224067ull}},
+{{2684409900530104156ull, 12832790212988242465ull,
+ 8908947668641198778ull, 3859013302012780084ull}},
+{{13206971233899784857ull, 12632179901545039444ull,
+ 14791464329755525044ull, 2411883313757987552ull}},
+{{16508714042374731072ull, 15790224876931299305ull,
+ 42586338484854689ull, 3014854142197484441ull}},
+{{6800834497686250127ull, 5902723040881960420ull,
+ 4664918941533456266ull, 3768567677746855551ull}},
+{{13473893597908682138ull, 8300887918978613166ull,
+ 9833103366099492022ull, 2355354798591784719ull}},
+{{7618994960531076864ull, 1152737861868490650ull,
+ 7679693189196977124ull, 2944193498239730899ull}},
+{{300371663809070272ull, 1440922327335613313ull, 4987930468068833501ull,
+ 3680241872799663624ull}},
+{{4987150598188725744ull, 6412838927596904545ull,
+ 6234913085086041876ull, 4600302340999579530ull}},
+{{14646184169936423350ull, 13231396366602841148ull,
+ 8508506696606164076ull, 2875188963124737206ull}},
+{{18307730212420529188ull, 16539245458253551435ull,
+ 1412261333902929287ull, 3593986203905921508ull}},
+{{18272976747098273580ull, 16062370804389551390ull,
+ 1765326667378661609ull, 4492482754882401885ull}},
+{{6808924448509033084ull, 3121452725102387763ull,
+ 3409172176325357458ull, 2807801721801501178ull}},
+{{3899469542208903451ull, 13125187943232760512ull,
+ 13484837257261472630ull, 3509752152251876472ull}},
+{{4874336927761129313ull, 7183112892186174832ull,
+ 16856046571576840788ull, 4387190190314845590ull}},
+{{3046460579850705821ull, 13712817594471135078ull,
+ 5923343088808137588ull, 2741993868946778494ull}},
+{{13031447761668158084ull, 17141021993088918847ull,
+ 16627550897864947793ull, 3427492336183473117ull}},
+{{11677623683657809701ull, 7591219436078984847ull,
+ 6949380567049021030ull, 4284365420229341397ull}},
+{{14216043829927212919ull, 132826129121977625ull,
+ 6649205863619332096ull, 2677728387643338373ull}},
+{{3934996732126852437ull, 166032661402472032ull,
+ 12923193347951553024ull, 3347160484554172966ull}},
+{{4918745915158565546ull, 207540826753090040ull, 6930619648084665472ull,
+ 4183950605692716208ull}},
+{{3074216196974103467ull, 129713016720681275ull, 4331637280052915920ull,
+ 2614969128557947630ull}},
+{{17677828301499793045ull, 162141270900851593ull,
+ 14637918636920920708ull, 3268711410697434537ull}},
+{{8262227321592577594ull, 202676588626064492ull, 4462340240868987173ull,
+ 4085889263371793172ull}},
+{{14387264112850136805ull, 2432515877104984259ull,
+ 12012334687397892791ull, 2553680789607370732ull}},
+{{13372394122635283102ull, 16875702901663394036ull,
+ 15015418359247365988ull, 3192100987009213415ull}},
+{{16715492653294103877ull, 2647884553369690929ull,
+ 14157586930631819582ull, 3990126233761516769ull}},
+{{3529653880667733067ull, 15489985901138220543ull,
+ 1930962804003805382ull, 2493828896100947981ull}},
+{{18247125406116830046ull, 10139110339567999870ull,
+ 7025389523432144632ull, 3117286120126184976ull}},
+{{13585534720791261749ull, 12673887924459999838ull,
+ 8781736904290180790ull, 3896607650157731220ull}},
+{{3879273182067150689ull, 3309493934360111995ull,
+ 14711957602036138802ull, 2435379781348582012ull}},
+{{237405459156550458ull, 13360239454804915802ull,
+ 18389947002545173502ull, 3044224726685727515ull}},
+{{9520128860800463880ull, 7476927281651368944ull,
+ 18375747734754078974ull, 3805280908357159394ull}},
+{{5950080538000289925ull, 61393532604717686ull, 16096528352648687263ull,
+ 2378300567723224621ull}},
+{{16660972709355138214ull, 13911799971038060819ull,
+ 6285602385528695366ull, 2972875709654030777ull}},
+{{16214529868266534864ull, 8166377926942800216ull,
+ 12468689000338257112ull, 3716094637067538471ull}},
+{{10134081167666584290ull, 5103986204339250135ull,
+ 14710459652852492551ull, 2322559148167211544ull}},
+{{8055915441155842458ull, 1768296736996674765ull,
+ 18388074566065615689ull, 2903198935209014430ull}},
+{{14681580319872190977ull, 6822056939673231360ull,
+ 13761721170727243803ull, 3628998669011268038ull}},
+{{18351975399840238721ull, 3915885156164151296ull,
+ 7978779426554278946ull, 4536248336264085048ull}},
+{{11469984624900149201ull, 7059114241029982464ull,
+ 4986737141596424341ull, 2835155210165053155ull}},
+{{14337480781125186501ull, 13435578819714865984ull,
+ 1621735408568142522ull, 3543944012706316444ull}},
+{{17921850976406483126ull, 7571101487788806672ull,
+ 2027169260710178153ull, 4429930015882895555ull}},
+{{11201156860254051954ull, 16261153475936473930ull,
+ 17407881852439719009ull, 2768706259926809721ull}},
+{{4778074038462789134ull, 6491383789638428701ull,
+ 7924794260267485050ull, 3460882824908512152ull}},
+{{10584278566505874322ull, 17337601773902811684ull,
+ 9905992825334356312ull, 4326103531135640190ull}},
+{{15838546140920947259ull, 10836001108689257302ull,
+ 1579559497406584791ull, 2703814706959775119ull}},
+{{10574810639296408266ull, 8933315367434183724ull,
+ 15809507427040394701ull, 3379768383699718898ull}},
+{{13218513299120510332ull, 15778330227720117559ull,
+ 10538512246945717568ull, 4224710479624648623ull}},
+{{15179099839591400814ull, 9861456392325073474ull,
+ 13504099181982155336ull, 2640444049765405389ull}},
+{{9750502762634475209ull, 12326820490406341843ull,
+ 3045065922195530458ull, 3300555062206756737ull}},
+{{7576442434865706107ull, 6185153576153151496ull,
+ 8418018421171800977ull, 4125693827758445921ull}},
+{{4735276521791066317ull, 15394936031164189445ull,
+ 16790476559300845370ull, 2578558642349028700ull}},
+{{10530781670666220801ull, 10020298002100460998ull,
+ 2541351625416505097ull, 3223198302936285876ull}},
+{{3940105051478000193ull, 17137058521052964152ull,
+ 3176689531770631371ull, 4028997878670357345ull}},
+{{2462565657173750121ull, 8404818566444408643ull,
+ 13514646003425114367ull, 2518123674168973340ull}},
+{{16913265126749351363ull, 5894337189628122899ull,
+ 16893307504281392959ull, 3147654592711216675ull}},
+{{16529895390009301299ull, 2756235468607765720ull,
+ 16504948361924353295ull, 3934568240889020844ull}},
+{{10331184618755813312ull, 8640176195520935431ull,
+ 1092220689347945001ull, 2459105150555638028ull}},
+{{8302294755017378736ull, 15411906262828557193ull,
+ 1365275861684931251ull, 3073881438194547535ull}},
+{{14989554462199111324ull, 14653196810108308587ull,
+ 15541652882388327776ull, 3842351797743184418ull}},
+{{7062628529660750626ull, 9158248006317692867ull,
+ 14325219069920092764ull, 2401469873589490261ull}},
+{{4216599643648550378ull, 11447810007897116084ull,
+ 4071465782117952243ull, 3001837341986862827ull}},
+{{5270749554560687972ull, 9698076491444007201ull, 477646209220052400ull,
+ 3752296677483578534ull}},
+{{14823433517668899743ull, 6061297807152504500ull,
+ 14133586936044696462ull, 2345185423427236583ull}},
+{{82547823376573062ull, 16799994295795406434ull,
+ 13055297651628482673ull, 2931481779284045729ull}},
+{{9326556816075492136ull, 7164934814462094330ull,
+ 2484064009253439630ull, 3664352224105057162ull}},
+{{2434823983239589362ull, 18179540554932393721ull,
+ 12328452048421575345ull, 4580440280131321452ull}},
+{{13050980035593213111ull, 4444683819191664219ull,
+ 16928654567118260399ull, 2862775175082075907ull}},
+{{11702039026064128485ull, 944168755562192370ull,
+ 16549132190470437595ull, 3578468968852594884ull}},
+{{5404176745725384798ull, 15015268999734904175ull,
+ 2239671164378495377ull, 4473086211065743606ull}},
+{{10295139493719447355ull, 2467014097193233253ull,
+ 15234852533018723323ull, 2795678881916089753ull}},
+{{17480610385576697098ull, 16918825676773705278ull,
+ 5208507610991240441ull, 3494598602395112192ull}},
+{{12627390945116095564ull, 7313474040684967886ull,
+ 6510634513739050552ull, 4368248252993890240ull}},
+{{3280433322270171824ull, 4570921275428104929ull,
+ 4069146571086906595ull, 2730155158121181400ull}},
+{{8712227671265102683ull, 1101965575857743257ull,
+ 5086433213858633244ull, 3412693947651476750ull}},
+{{15501970607508766258ull, 1377456969822179071ull,
+ 15581413554178067363ull, 4265867434564345937ull}},
+{{16606260657334060768ull, 17001811670634719583ull,
+ 2820854443720210245ull, 2666167146602716211ull}},
+{{16146139803240188055ull, 7417206533011235767ull,
+ 17361126109932426519ull, 3332708933253395263ull}},
+{{15570988735622847165ull, 4659822147836656805ull,
+ 17089721618988145245ull, 4165886166566744079ull}},
+{{12037710968977973430ull, 5218231851611604455ull,
+ 17598605039508672634ull, 2603678854104215049ull}},
+{{10435452692795078884ull, 15746161851369281377ull,
+ 8163198244103677080ull, 3254598567630268812ull}},
+{{17656001884421236509ull, 1235958240502050105ull,
+ 10203997805129596351ull, 4068248209537836015ull}},
+{{4117472150122190962ull, 7690002927954863172ull,
+ 13295027655847079575ull, 2542655130961147509ull}},
+{{5146840187652738702ull, 5000817641516191061ull,
+ 2783726514526685757ull, 3178318913701434387ull}},
+{{11045236252993311282ull, 10862708070322626730ull,
+ 17314716198440520908ull, 3972898642126792983ull}},
+{{11514958676548207455ull, 16012564580806417514ull,
+ 17739226651666407423ull, 2483061651329245614ull}},
+{{5170326308830483511ull, 15404019707580633989ull,
+ 12950661277728233471ull, 3103827064161557018ull}},
+{{11074593904465492293ull, 14643338616048404582ull,
+ 6964954560305516031ull, 3879783830201946273ull}},
+{{2309935171863544779ull, 16069615662671334720ull,
+ 15882311646259417279ull, 2424864893876216420ull}},
+{{2887418964829430974ull, 15475333559911780496ull,
+ 1406145484114719983ull, 3031081117345270526ull}},
+{{3609273706036788717ull, 14732480931462337716ull,
+ 10981053891998175787ull, 3788851396681588157ull}},
+{{11479168103127768756ull, 6901957572950267120ull,
+ 9169001691712553819ull, 2368032122925992598ull}},
+{{14348960128909710945ull, 4015760947760445996ull,
+ 2237880077785916466ull, 2960040153657490748ull}},
+{{17936200161137138682ull, 14243073221555333303ull,
+ 2797350097232395582ull, 3700050192071863435ull}},
+{{18127654128351793532ull, 4290234745044695410ull,
+ 17889244875266104903ull, 2312531370044914646ull}},
+{{13436195623584966107ull, 751107412878481359ull,
+ 13138184057227855321ull, 2890664212556143308ull}},
+{{12183558511053819730ull, 5550570284525489603ull,
+ 16422730071534819151ull, 3613330265695179135ull}},
+{{10617762120389886758ull, 2326526837229474100ull,
+ 15916726570991136035ull, 4516662832118973919ull}},
+{{15859473362098455032ull, 17594980337764278976ull,
+ 16865483134510541877ull, 2822914270074358699ull}},
+{{1377597628913517174ull, 8158667366923185009ull,
+ 16470167899710789443ull, 3528642837592948374ull}},
+{{6333683054569284371ull, 5586648190226593357ull,
+ 11364337837783710996ull, 4410803546991185468ull}},
+{{6264394918319496684ull, 12715027155746396656ull,
+ 16326083185469595180ull, 2756752216869490917ull}},
+{{7830493647899370855ull, 15893783944682995820ull,
+ 6572545926554830263ull, 3445940271086863647ull}},
+{{9788117059874213569ull, 15255543912426356871ull,
+ 3603996389766149925ull, 4307425338858579559ull}},
+{{13035102190062465337ull, 11840557954480166996ull,
+ 9170026771244925559ull, 2692140836786612224ull}},
+{{16293877737578081671ull, 10189011424672820841ull,
+ 11462533464056156949ull, 3365176045983265280ull}},
+{{6532289116690438376ull, 17347950299268413956ull,
+ 14328166830070196186ull, 4206470057479081600ull}},
+{{13306052734786299793ull, 15454154955470146626ull,
+ 8955104268793872616ull, 2629043785924426000ull}},
+{{7409193881628098934ull, 870949620628131667ull,
+ 11193880335992340771ull, 3286304732405532500ull}},
+{{4649806333607735763ull, 14923745081067328296ull,
+ 13992350419990425963ull, 4107880915506915625ull}},
+{{2906128958504834852ull, 7021497666453386233ull,
+ 1827689984852934371ull, 2567425572191822266ull}},
+{{8244347216558431469ull, 4165186064639344887ull,
+ 11507984517920943772ull, 3209281965239777832ull}},
+{{5693748002270651432ull, 5206482580799181109ull,
+ 14384980647401179715ull, 4011602456549722290ull}},
+{{5864435510632851097ull, 948208603785794241ull,
+ 13602298923053125226ull, 2507251535343576431ull}},
+{{11942230406718451775ull, 10408632791587018609ull,
+ 12391187635389018628ull, 3134064419179470539ull}},
+{{1092729953115901007ull, 13010790989483773262ull,
+ 10877298525808885381ull, 3917580523974338174ull}},
+{{14518014275979601842ull, 10437587377641052240ull,
+ 2186625560203165459ull, 2448487827483961359ull}},
+{{18147517844974502302ull, 8435298203623927396ull,
+ 16568340005536120536ull, 3060609784354951698ull}},
+{{4237653232508576261ull, 10544122754529909246ull,
+ 11487052970065374862ull, 3825762230443689623ull}},
+{{16483591325600023875ull, 1978390703153805374ull,
+ 14096937133931941145ull, 2391101394027306014ull}},
+{{11381117120145254036ull, 7084674397369644622ull,
+ 8397799380560150623ull, 2988876742534132518ull}},
+{{5003024363326791737ull, 4244156978284667874ull,
+ 1273877188845412471ull, 3736095928167665648ull}},
+{{7738576245506632740ull, 9570127139068999277ull, 796173243028382794ull,
+ 2335059955104791030ull}},
+{{14284906325310678829ull, 2739286886981473288ull,
+ 10218588590640254301ull, 2918824943880988787ull}},
+{{17856132906638348536ull, 8035794627154229514ull,
+ 8161549719872929972ull, 3648531179851235984ull}},
+{{13096794096443159862ull, 10044743283942786893ull,
+ 10201937149841162465ull, 4560663974814044980ull}},
+{{10491339319490668866ull, 17807179598532711568ull,
+ 15599582755505502348ull, 2850414984258778112ull}},
+{{13114174149363336082ull, 3812230424456337844ull,
+ 1052734370672326320ull, 3563018730323472641ull}},
+{{16392717686704170102ull, 4765288030570422305ull,
+ 5927603981767795804ull, 4453773412904340801ull}},
+{{3327919526549024458ull, 12201677055961289749ull,
+ 15233967534673342137ull, 2783608383065213000ull}},
+{{8771585426613668477ull, 1417038264669448474ull, 595715344632126056ull,
+ 3479510478831516251ull}},
+{{1741109746412309788ull, 1771297830836810593ull,
+ 14579702236072321282ull, 4349388098539395313ull}},
+{{12617408637576163377ull, 5718747162700394524ull,
+ 2194784869904118945ull, 2718367561587122071ull}},
+{{15771760796970204222ull, 11760119971802881059ull,
+ 16578539142662312393ull, 3397959451983902588ull}},
+{{15103014977785367373ull, 865091909471437612ull,
+ 2276429854618338876ull, 4247449314979878236ull}},
+{{216012324261078800ull, 9764054480274424316ull,
+ 10646140695991237605ull, 2654655821862423897ull}},
+{{270015405326348500ull, 16816754118770418299ull,
+ 17919361888416434910ull, 3318319777328029871ull}},
+{{14172577311940099337ull, 11797570611608247065ull,
+ 17787516342093155734ull, 4147899721660037339ull}},
+{{1940331792321480230ull, 2761795613827766512ull,
+ 8811354704594528382ull, 2592437326037523337ull}},
+{{2425414740401850287ull, 12675616554139483948ull,
+ 15625879399170548381ull, 3240546657546904171ull}},
+{{3031768425502312859ull, 2009462637392191223ull,
+ 14920663230535797573ull, 4050683321933630214ull}},
+{{8812384293580027393ull, 3561757157583813466ull,
+ 4713728500657485579ull, 2531677076208518884ull}},
+{{1792108330120258433ull, 18287254502261930545ull,
+ 5892160625821856973ull, 3164596345260648605ull}},
+{{6851821431077710945ull, 9024010072545249469ull,
+ 11976886800704709121ull, 3955745431575810756ull}},
+{{6588231403637263293ull, 17169221341409250678ull,
+ 16708926287295219008ull, 2472340894734881722ull}},
+{{17458661291401354924ull, 3014782603052011731ull,
+ 11662785822264247953ull, 3090426118418602153ull}},
+{{17211640595824305751ull, 8380164272242402568ull,
+ 743424222548146229ull, 3863032648023252692ull}},
+{{10757275372390191095ull, 7543445679365195557ull,
+ 9688012175947367201ull, 2414395405014532932ull}},
+{{18058280233915126772ull, 14040993117633882350ull,
+ 12110015219934209001ull, 3017994256268166165ull}},
+{{13349478255539132657ull, 3716183341760189226ull,
+ 1302460969635597540ull, 3772492820335207707ull}},
+{{12955109928139345815ull, 11545986625454894074ull,
+ 16954939170518106126ull, 2357808012709504816ull}},
+{{6970515373319406460ull, 5209111244963841785ull,
+ 2746929889438081042ull, 2947260015886881021ull}},
+{{13324830235076645979ull, 15734761093059578039ull,
+ 8045348380224989206ull, 3684075019858601276ull}},
+{{12044351775418419570ull, 10445079329469696741ull,
+ 10056685475281236508ull, 4605093774823251595ull}},
+{{9833562868850206183ull, 15751546617773336271ull,
+ 3979585412837078865ull, 2878183609264532247ull}},
+{{7680267567635369825ull, 5854375216934506627ull, 362795747618960678ull,
+ 3597729511580665309ull}},
+{{4988648441116824377ull, 16541341058022909092ull,
+ 5065180702951088751ull, 4497161889475831636ull}},
+{{12341277312552791044ull, 17255867188905400038ull,
+ 12389109976199206277ull, 2810726180922394772ull}},
+{{6203224603836212997ull, 7734775930849586336ull,
+ 15486387470249007847ull, 3513407726152993465ull}},
+{{7754030754795266246ull, 5056783895134595016ull,
+ 5522926282529096097ull, 4391759657691241832ull}},
+{{4846269221747041404ull, 14689704980527591645ull,
+ 3451828926580685060ull, 2744849786057026145ull}},
+{{10669522545611189659ull, 18362131225659489556ull,
+ 8926472176653244229ull, 3431062232571282681ull}},
+{{13336903182013987073ull, 9117605976792198233ull,
+ 15769776239243943191ull, 4288827790714103351ull}},
+{{1418035461117660065ull, 12616032763136205752ull,
+ 16773639177168546350ull, 2680517369196314594ull}},
+{{1772544326397075081ull, 6546668917065481382ull,
+ 11743676934605907130ull, 3350646711495393243ull}},
+{{11439052444851119659ull, 17406708183186627535ull,
+ 10067910149829996008ull, 4188308389369241554ull}},
+{{14066936805673031643ull, 10879192614491642209ull,
+ 10904129862071135409ull, 2617692743355775971ull}},
+{{3748612951809125842ull, 18210676786541940666ull,
+ 9018476309161531357ull, 3272115929194719964ull}},
+{{13909138226616183110ull, 8928287927895262120ull,
+ 11273095386451914197ull, 4090144911493399955ull}},
+{{8693211391635114444ull, 7886022964148232777ull,
+ 4739841607318752421ull, 2556340569683374972ull}},
+{{15478200257971280959ull, 14469214723612678875ull,
+ 5924802009148440526ull, 3195425712104218715ull}},
+{{14736064304036713295ull, 8863146367661072786ull,
+ 2794316493008162754ull, 3994282140130273394ull}},
+{{13821726208450333713ull, 10151152498215558395ull,
+ 6358133826557489625ull, 2496426337581420871ull}},
+{{12665471742135529238ull, 17300626641196835898ull,
+ 3335981264769474127ull, 3120532921976776089ull}},
+{{6608467640814635739ull, 17014097283068656969ull,
+ 8781662599389230563ull, 3900666152470970111ull}},
+{{15659507321577617097ull, 8327967792704216653ull,
+ 12406068152259350958ull, 2437916345294356319ull}},
+{{5739326096689857659ull, 1186587704025495009ull,
+ 10895899171896800794ull, 3047395431617945399ull}},
+{{11785843639289709978ull, 10706606666886644569ull,
+ 9008187946443613088ull, 3809244289522431749ull}},
+{{448623246914986880ull, 6691629166804152856ull, 7935960475740952132ull,
+ 2380777680951519843ull}},
+{{560779058643733600ull, 8364536458505191070ull, 5308264576248802261ull,
+ 2975972101189399804ull}},
+{{9924345860159442808ull, 15067356591558876741ull,
+ 6635330720311002826ull, 3719965126486749755ull}},
+{{8508559171813345707ull, 14028783888151685867ull,
+ 1841238690980682814ull, 2324978204054218597ull}},
+{{6024012946339294230ull, 8312607823334831526ull,
+ 6913234382153241422ull, 2906222755067773246ull}},
+{{16753388219778893595ull, 1167387742313763599ull,
+ 17864915014546327586ull, 3632778443834716557ull}},
+{{16330049256296229090ull, 10682606714746980307ull,
+ 8496085712900745770ull, 4540973054793395697ull}},
+{{7900437775971449230ull, 11288315215144250596ull,
+ 16839268616631435866ull, 2838108159245872310ull}},
+{{9875547219964311537ull, 4887021982075537437ull,
+ 11825713733934519025ull, 3547635199057340388ull}},
+{{16956120043382777325ull, 10720463496021809700ull,
+ 14782142167418148781ull, 4434543998821675485ull}},
+{{1374202990259460020ull, 9006132694227325015ull,
+ 11544681863850036940ull, 2771589999263547178ull}},
+{{15552811793106488737ull, 11257665867784156268ull,
+ 5207480292957770367ull, 3464487499079433973ull}},
+{{994270667673559305ull, 9460396316302807432ull,
+ 11121036384624600863ull, 4330609373849292466ull}},
+{{621419167295974566ull, 12830276725330336501ull,
+ 11562333758817763443ull, 2706630858655807791ull}},
+{{5388459977547356111ull, 11426159888235532722ull,
+ 9841231180094816400ull, 3383288573319759739ull}},
+{{15958947008788970947ull, 14282699860294415902ull,
+ 7689852956691132596ull, 4229110716649699674ull}},
+{{5362655862065718938ull, 18150059449538785747ull,
+ 9417844116359345776ull, 2643194197906062296ull}},
+{{2091633809154760769ull, 4240830238213930568ull,
+ 11772305145449182221ull, 3303992747382577870ull}},
+{{2614542261443450961ull, 9912723816194801114ull,
+ 5492009394956701968ull, 4129990934228222338ull}},
+{{6245774931829544755ull, 6195452385121750696ull,
+ 8044191890275326634ull, 2581244333892638961ull}},
+{{7807218664786930943ull, 16967687518256964178ull,
+ 14666925881271546196ull, 3226555417365798701ull}},
+{{535651294128887871ull, 2762865324111653607ull, 4498599296307269034ull,
+ 4033194271707248377ull}},
+{{7252311086471636775ull, 6338476845997171408ull,
+ 14340839606260512906ull, 2520746419817030235ull}},
+{{9065388858089545969ull, 17146468094351240068ull,
+ 13314363489398253228ull, 3150933024771287794ull}},
+{{11331736072611932461ull, 2986341044229498469ull,
+ 7419582324893040728ull, 3938666280964109743ull}},
+{{9388178054596151740ull, 1866463152643436543ull,
+ 11554767980699232311ull, 2461666425602568589ull}},
+{{7123536549817801771ull, 16168136996086459391ull,
+ 608401920591876676ull, 3077083032003210737ull}},
+{{4292734668844864310ull, 1763427171398522623ull,
+ 5372188419167233750ull, 3846353790004013421ull}},
+{{9600488195669122050ull, 14937200037406240351ull,
+ 5663460771193215045ull, 2403971118752508388ull}},
+{{7388924226159014658ull, 4836441991475636727ull,
+ 7079325963991518807ull, 3004963898440635485ull}},
+{{4624469264271380419ull, 1433866470917158005ull,
+ 13460843473416786413ull, 3756204873050794356ull}},
+{{5196136299383306714ull, 3202009553536917705ull,
+ 17636399207740267316ull, 2347628045656746472ull}},
+{{11106856392656521296ull, 4002511941921147131ull,
+ 3598754935965782529ull, 2934535057070933091ull}},
+{{9271884472393263716ull, 9614825945828821818ull,
+ 18333501725239391873ull, 3668168821338666363ull}},
+{{2366483553636803837ull, 16630218450713415177ull,
+ 18305191138121851937ull, 4585211026673332954ull}},
+{{13008267267091472159ull, 3476357504054802629ull,
+ 16052430479753545365ull, 2865756891670833096ull}},
+{{2425276028582176486ull, 8957132898495891191ull,
+ 1618794025982380090ull, 3582196114588541371ull}},
+{{16866653091009884319ull, 1973044086265088180ull,
+ 15858550587760138825ull, 4477745143235676713ull}},
+{{1318286145026401892ull, 12762367599984149873ull,
+ 2994065089709004909ull, 2798590714522297946ull}},
+{{6259543699710390269ull, 2117901444698023629ull,
+ 12965953398991031945ull, 3498238393152872432ull}},
+{{12436115643065375740ull, 7259062824299917440ull,
+ 16207441748738789931ull, 4372797991441090540ull}},
+{{7772572276915859837ull, 2231071255973754448ull, 906279056106967899ull,
+ 2732998744650681588ull}},
+{{9715715346144824797ull, 16623897125249356772ull,
+ 1132848820133709873ull, 3416248430813351985ull}},
+{{12144644182681030996ull, 6944813351279532253ull,
+ 6027747043594525246ull, 4270310538516689981ull}},
+{{9896245623389338325ull, 18175566399831871370ull,
+ 6073184911460272230ull, 2668944086572931238ull}},
+{{3146934992381897098ull, 13496085962935063405ull,
+ 16814853176180116096ull, 3336180108216164047ull}},
+{{8545354758904759276ull, 16870107453668829256ull,
+ 16406880451797757216ull, 4170225135270205059ull}},
+{{5340846724315474548ull, 10543817158543018285ull,
+ 7948457273159904308ull, 2606390709543878162ull}},
+{{11287744423821731088ull, 13179771448178772856ull,
+ 712199554595104577ull, 3257988386929847703ull}},
+{{14109680529777163860ull, 2639656254941302358ull,
+ 14725307498526044434ull, 4072485483662309628ull}},
+{{4206864312683339509ull, 6261471177765701878ull,
+ 18426689223433553579ull, 2545303427288943517ull}},
+{{14481952427708950194ull, 3215152953779739443ull,
+ 9198303474009778262ull, 3181629284111179397ull}},
+{{13490754516208799838ull, 13242313229079450112ull,
+ 16109565360939610731ull, 3977036605138974246ull}},
+{{8431721572630499899ull, 5970602758960962368ull,
+ 5456792332159868803ull, 2485647878211858904ull}},
+{{10539651965788124874ull, 2851567430273815056ull,
+ 6820990415199836004ull, 3107059847764823630ull}},
+{{13174564957235156092ull, 3564459287842268820ull,
+ 17749610055854570813ull, 3883824809706029537ull}},
+{{17457475135126748366ull, 4533630064115111964ull,
+ 4175977257268024902ull, 2427390506066268461ull}},
+{{3375099845198883841ull, 14890409616998665764ull,
+ 9831657590012419031ull, 3034238132582835576ull}},
+{{4218874806498604801ull, 14001326002820944301ull,
+ 12289571987515523789ull, 3792797665728544470ull}},
+{{4942639763275321953ull, 11056671760976784140ull,
+ 3069296473769814464ull, 2370498541080340294ull}},
+{{6178299704094152441ull, 13820839701220980175ull,
+ 13059992629067043888ull, 2963123176350425367ull}},
+{{3111188611690302647ull, 17276049626526225219ull,
+ 11713304767906416956ull, 3703903970438031709ull}},
+{{18085393946802296819ull, 1574158979724114953ull,
+ 9626658489155204550ull, 2314939981523769818ull}},
+{{8771684378220707311ull, 11191070761509919500ull,
+ 2809951074589229879ull, 2893674976904712273ull}},
+{{10964605472775884139ull, 9377152433460011471ull,
+ 8124124861663925253ull, 3617093721130890341ull}},
+{{9094070822542467270ull, 16333126560252402243ull,
+ 14766842095507294470ull, 4521367151413612926ull}},
+{{3377951254875348092ull, 5596518081730363498ull,
+ 4617590291264671140ull, 2825854469633508079ull}},
+{{13445811105448960922ull, 6995647602162954372ull,
+ 1160301845653451021ull, 3532318087041885099ull}},
+{{16807263881811201153ull, 13356245521131080869ull,
+ 15285435362348977488ull, 4415397608802356373ull}},
+{{12810382935345694673ull, 8347653450706925543ull,
+ 11859240110681804882ull, 2759623505501472733ull}},
+{{11401292650754730437ull, 1211194776528881121ull,
+ 988992083070092391ull, 3449529381876840917ull}},
+{{416557758161249334ull, 15349051525943265114ull,
+ 5847926122265003392ull, 4311911727346051146ull}},
+{{4872034617278168738ull, 9593157203714540696ull,
+ 8266639844843015024ull, 2694944829591281966ull}},
+{{6090043271597710922ull, 11991446504643175870ull,
+ 1109927769198992972ull, 3368681036989102458ull}},
+{{16835926126351914461ull, 14989308130803969837ull,
+ 10610781748353517023ull, 4210851296236378072ull}},
+{{12828296838183640490ull, 16285846609393563004ull,
+ 6631738592720948139ull, 2631782060147736295ull}},
+{{16035371047729550613ull, 15745622243314565851ull,
+ 3677987222473797270ull, 3289727575184670369ull}},
+{{15432527791234550362ull, 10458655767288431506ull,
+ 9209170046519634492ull, 4112159468980837961ull}},
+{{14257015887948981880ull, 15760031891410045499ull,
+ 17284946325143241317ull, 2570099668113023725ull}},
+{{13209583841508839446ull, 5864981808980393162ull,
+ 7771124851146887935ull, 3212624585141279657ull}},
+{{7288607765031273499ull, 2719541242798103549ull,
+ 14325592082360997823ull, 4015780731426599571ull}},
+{{6861222862358239889ull, 8617242304389896574ull,
+ 6647652042261929687ull, 2509862957141624732ull}},
+{{17799900614802575670ull, 6159866862059982813ull,
+ 8309565052827412109ull, 3137328696427030915ull}},
+{{8414817713221055875ull, 12311519596002366421ull,
+ 5775270297606877232ull, 3921660870533788644ull}},
+{{7565104079976853874ull, 7694699747501479013ull,
+ 12832915972859074078ull, 2451038044083617902ull}},
+{{14068066118398455246ull, 395002647522072958ull,
+ 6817772929219066790ull, 3063797555104522378ull}},
+{{8361710611143293250ull, 9717125346257367006ull,
+ 17745588198378609295ull, 3829746943880652972ull}},
+{{614383113537170377ull, 12990732369051936235ull,
+ 1867620587131855001ull, 2393591839925408108ull}},
+{{14603036947203626683ull, 2403357406032756581ull,
+ 2334525733914818752ull, 2991989799906760135ull}},
+{{4418738128722369642ull, 3004196757540945727ull,
+ 16753215222675687152ull, 3739987249883450168ull}},
+{{9679240358092562883ull, 1877622973463091079ull,
+ 10470759514172304470ull, 2337492031177156355ull}},
+{{7487364429188315699ull, 11570400753683639657ull,
+ 8476763374287992683ull, 2921865038971445444ull}},
+{{13970891554912782528ull, 9851314923677161667ull,
+ 10595954217859990854ull, 3652331298714306805ull}},
+{{12851928425213590256ull, 3090771617741676276ull,
+ 17856628790752376472ull, 4565414123392883506ull}},
+{{17255827302613269718ull, 1931732261088547672ull,
+ 15772079012647623199ull, 2853383827120552191ull}},
+{{3123040054557035531ull, 16249723381642848303ull,
+ 15103412747382141094ull, 3566729783900690239ull}},
+{{17738858123478458126ull, 11088782190198784570ull,
+ 14267579915800288464ull, 4458412229875862799ull}},
+{{15698472345601424233ull, 6930488868874240356ull,
+ 15834766475016262146ull, 2786507643672414249ull}},
+{{1176346358292228675ull, 17886483122947576254ull,
+ 5958400038488163970ull, 3483134554590517812ull}},
+{{10693804984720061652ull, 13134731866829694509ull,
+ 7448000048110204963ull, 4353918193238147265ull}},
+{{8989471124663732484ull, 5903364407554865116ull,
+ 16184215076137347862ull, 2721198870773842040ull}},
+{{11236838905829665605ull, 16602577546298357203ull,
+ 1783524771462133211ull, 3401498588467302551ull}},
+{{9434362613859694103ull, 16141535914445558600ull,
+ 16064464019609830226ull, 4251873235584128188ull}},
+{{5896476633662308814ull, 14700145964955862029ull,
+ 816917975401368083ull, 2657420772240080118ull}},
+{{11982281810505273922ull, 13763496437767439632ull,
+ 10244519506106485912ull, 3321775965300100147ull}},
+{{14977852263131592402ull, 17204370547209299540ull,
+ 8193963364205719486ull, 4152219956625125184ull}},
+{{137785627602469444ull, 6141045573578424309ull, 5121227102628574679ull,
+ 2595137472890703240ull}},
+{{4783918052930474708ull, 3064620948545642482ull,
+ 6401533878285718349ull, 3243921841113379050ull}},
+{{15203269603017869193ull, 8442462204109441006ull,
+ 17225289384711923744ull, 4054902301391723812ull}},
+{{4890357483458780342ull, 5276538877568400629ull,
+ 1542433828590176532ull, 2534313938369827383ull}},
+{{10724632872750863331ull, 6595673596960500786ull,
+ 15763100341019884377ull, 3167892422962284228ull}},
+{{4182419054083803356ull, 12856278014628013887ull,
+ 1257131352565303855ull, 3959865528702855286ull}},
+{{9531540936443458954ull, 14952702786783590535ull,
+ 14620765150635478621ull, 2474915955439284553ull}},
+{{7302740152126935788ull, 4855820428197324457ull,
+ 4440898383012184565ull, 3093644944299105692ull}},
+{{13740111208586057639ull, 10681461553674043475ull,
+ 5551122978765230706ull, 3867056180373882115ull}},
+{{6281726496152592073ull, 11287599489473665076ull,
+ 1163608852514575239ull, 2416910112733676322ull}},
+{{7852158120190740091ull, 9497813343414693441ull,
+ 10677883102497994857ull, 3021137640917095402ull}},
+{{14426883668665813017ull, 16483952697695754705ull,
+ 4123981841267717763ull, 3776422051146369253ull}},
+{{2099273265275051280ull, 7996627426846152739ull,
+ 4883331660006017554ull, 2360263781966480783ull}},
+{{16459149636875977812ull, 772412246702915115ull,
+ 1492478556580134039ull, 2950329727458100979ull}},
+{{15962251027667584360ull, 14800573363660807606ull,
+ 15700656251007331260ull, 3687912159322626223ull}},
+{{10729441747729704642ull, 53972630866457892ull,
+ 15014134295331776172ull, 4609890199153282779ull}},
+{{15929273129185841210ull, 9257104931146311990ull,
+ 7077990925368666155ull, 2881181374470801737ull}},
+{{10688219374627525704ull, 6959695145505502084ull,
+ 13459174675138220598ull, 3601476718088502171ull}},
+{{13360274218284407130ull, 17922990968736653413ull,
+ 12212282325495387843ull, 4501845897610627714ull}},
+{{10656014395641448408ull, 8896026346246714431ull,
+ 12244362471862005306ull, 2813653686006642321ull}},
+{{8708331976124422606ull, 1896660895953617231ull,
+ 1470395034545342921ull, 3517067107508302902ull}},
+{{6273728951728140354ull, 6982512138369409443ull,
+ 11061365830036454459ull, 4396333884385378627ull}},
+{{1615237585616393769ull, 2058227077267186950ull,
+ 4607510634559090085ull, 2747708677740861642ull}},
+{{11242419018875268019ull, 7184469865011371591ull,
+ 14982760330053638414ull, 3434635847176077052ull}},
+{{9441337755166697120ull, 18203959368118990297ull,
+ 281706338857496401ull, 4293294808970096316ull}},
+{{17430051143047655460ull, 4459945577433287079ull,
+ 9399438498640711059ull, 2683309255606310197ull}},
+{{17175877910382181421ull, 963245953364220945ull,
+ 16360984141728276728ull, 3354136569507887746ull}},
+{{7634789332695563064ull, 1204057441705276182ull,
+ 11227858140305570102ull, 4192670711884859683ull}},
+{{160057314507339011ull, 14587593956347961326ull,
+ 4711568328477287361ull, 2620419194928037302ull}},
+{{9423443679988949572ull, 4399434390152787945ull,
+ 15112832447451385010ull, 3275523993660046627ull}},
+{{16390990618413574869ull, 14722665024545760739ull,
+ 14279354540886843358ull, 4094404992075058284ull}},
+{{7938526127294790341ull, 4589979621913712558ull,
+ 18147968624909052907ull, 2559003120046911427ull}},
+{{699785622263712119ull, 1125788508964752794ull,
+ 18073274762708928230ull, 3198753900058639284ull}},
+{{10098104064684415956ull, 10630607673060716800ull,
+ 4144849379676608671ull, 3998442375073299106ull}},
+{{6311315040427759973ull, 13561658823304029856ull,
+ 7202216880725268323ull, 2499026484420811941ull}},
+{{7889143800534699966ull, 12340387510702649416ull,
+ 13614457119333973308ull, 3123783105526014926ull}},
+{{9861429750668374957ull, 15425484388378311770ull,
+ 7794699362312690827ull, 3904728881907518658ull}},
+{{10775079612595122252ull, 7335084733522750904ull,
+ 9483373119872819671ull, 2440455551192199161ull}},
+{{13468849515743902815ull, 4557169898476050726ull,
+ 16465902418268412493ull, 3050569438990248951ull}},
+{{7612689857825102711ull, 10308148391522451312ull,
+ 15970692004408127712ull, 3813211798737811189ull}},
+{{4757931161140689195ull, 6442592744701532070ull,
+ 12287525511968773772ull, 2383257374211131993ull}},
+{{15170785988280637301ull, 8053240930876915087ull,
+ 1524348834678803503ull, 2979071717763914992ull}},
+{{14351796466923408722ull, 5454865145168755955ull,
+ 1905436043348504379ull, 3723839647204893740ull}},
+{{6664029782613436500ull, 1103447706516778520ull,
+ 10414269563947591045ull, 2327399779503058587ull}},
+{{8330037228266795624ull, 5990995651573361054ull,
+ 8406150936507100902ull, 2909249724378823234ull}},
+{{1189174498478718722ull, 16712116601321477126ull,
+ 1284316633779100319ull, 3636562155473529043ull}},
+{{10709840159953174211ull, 16278459733224458503ull,
+ 15440453847506039111ull, 4545702694341911303ull}},
+{{13611179127611815738ull, 17091566360906368420ull,
+ 16567812682332356300ull, 2841064183963694564ull}},
+{{17013973909514769672ull, 2917713877423408909ull,
+ 2263021779205893760ull, 3551330229954618206ull}},
+{{7432409331611298378ull, 3647142346779261137ull,
+ 12052149260862143008ull, 4439162787443272757ull}},
+{{16174470878325531247ull, 2279463966737038210ull,
+ 9838436297252533332ull, 2774476742152045473ull}},
+{{10994716561052138250ull, 2849329958421297763ull,
+ 16909731389993054569ull, 3468095927690056841ull}},
+{{9131709682887784909ull, 8173348466454010108ull,
+ 7302106182209154499ull, 4335119909612571052ull}},
+{{14930690588659641376ull, 2802499782320062365ull,
+ 13787188400735497370ull, 2709449943507856907ull}},
+{{4828305180542388008ull, 12726496764754853765ull,
+ 12622299482491983808ull, 3386812429384821134ull}},
+{{10647067494105372914ull, 15908120955943567206ull,
+ 6554502316260203952ull, 4233515536731026418ull}},
+{{2042731165388470167ull, 9942575597464729504ull,
+ 8708249966090015374ull, 2645947210456891511ull}},
+{{2553413956735587709ull, 3204847459976136072ull,
+ 6273626439185131314ull, 3307434013071114389ull}},
+{{3191767445919484636ull, 13229431361824945898ull,
+ 12453719067408802046ull, 4134292516338892986ull}},
+{{6606540672127065802ull, 3656708582713203282ull,
+ 12395260435557889183ull, 2583932822711808116ull}},
+{{17481547877013608060ull, 18405943783673667814ull,
+ 15494075544447361478ull, 3229916028389760145ull}},
+{{12628562809412234267ull, 13784057692737308960ull,
+ 5532536375277038136ull, 4037395035487200182ull}},
+{{7892851755882646417ull, 8615036057960818100ull,
+ 17292893289830312547ull, 2523371897179500113ull}},
+{{9866064694853308021ull, 6157109054023634721ull,
+ 7781058557005726972ull, 3154214871474375142ull}},
+{{16944266886994022930ull, 7696386317529543401ull,
+ 502951159402382907ull, 3942768589342968928ull}},
+{{3672637776730182476ull, 2504398439242270674ull, 314344474626489317ull,
+ 2464230368339355580ull}},
+{{13814169257767503903ull, 7742184067480226246ull,
+ 392930593283111646ull, 3080287960424194475ull}},
+{{8044339535354604070ull, 454358047495507000ull,
+ 14326221296886053270ull, 3850359950530243093ull}},
+{{5027712209596627544ull, 14119031834966855587ull,
+ 11259731319767477245ull, 2406474969081401933ull}},
+{{1672954243568396526ull, 3813731738426405772ull, 239606094427182845ull,
+ 3008093711351752417ull}},
+{{2091192804460495657ull, 9378850691460395119ull,
+ 4911193636461366460ull, 3760117139189690521ull}},
+{{8224524530428891642ull, 15085153719017522757ull,
+ 14598711068856823797ull, 2350073211993556575ull}},
+{{14892341681463502456ull, 5021384093489739734ull,
+ 13636702817643641843ull, 2937591514991945719ull}},
+{{9392055064974602262ull, 1665044098434786764ull,
+ 12434192503627164400ull, 3671989393739932149ull}},
+{{11740068831218252828ull, 2081305123043483455ull,
+ 1707682574251791788ull, 4589986742174915187ull}},
+{{14255072047152489873ull, 10524187738756952967ull,
+ 17208202673403227531ull, 2868741713859321991ull}},
+{{13207154040513224438ull, 8543548655018803305ull,
+ 16898567323326646510ull, 3585927142324152489ull}},
+{{2673884495359366835ull, 1456063781918728324ull,
+ 7288151098876144426ull, 4482408927905190612ull}},
+{{10894549846454380080ull, 5521725882126593106ull,
+ 13778466473652366074ull, 2801505579940744132ull}},
+{{4394815271213199292ull, 16125529389513017191ull,
+ 17223083092065457592ull, 3501881974925930165ull}},
+{{881833070589111211ull, 1710167663181719873ull, 7693795809799658279ull,
+ 4377352468657412707ull}},
+{{12080360715186664267ull, 7986383817129656776ull,
+ 2502779371911092472ull, 2735845292910882942ull}},
+{{15100450893983330334ull, 9982979771412070970ull,
+ 12351846251743641398ull, 3419806616138603677ull}},
+{{9652191580624387109ull, 3255352677410312905ull,
+ 1604749759397388036ull, 4274758270173254597ull}},
+{{17561834783958711703ull, 11257967460236221373ull,
+ 3308811608837061474ull, 2671723918858284123ull}},
+{{8117235424666225917ull, 4849087288440500909ull,
+ 17971072566328490555ull, 3339654898572855153ull}},
+{{14758230299260170300ull, 1449673092123238232ull,
+ 8628782652628449482ull, 4174568623216068942ull}},
+{{9223893937037606438ull, 5517731701004411799ull, 781303139465393022ull,
+ 2609105389510043089ull}},
+{{6918181402869620143ull, 16120536663110290557ull,
+ 5588314942759129181ull, 3261381736887553861ull}},
+{{13259412772014413083ull, 6315612773605699484ull,
+ 11597079696876299381ull, 4076727171109442326ull}},
+{{17510505019363783985ull, 6253100992717256129ull,
+ 2636488792120299209ull, 2547954481943401454ull}},
+{{8053073218922566269ull, 12428062259323958066ull,
+ 12518983027005149819ull, 3184943102429251817ull}},
+{{842969486798432028ull, 10923391805727559679ull,
+ 1813670728474273562ull, 3981178878036564772ull}},
+{{7444384956890101874ull, 11438805897007112703ull,
+ 10356916242151196784ull, 2488236798772852982ull}},
+{{4693795177685239438ull, 14298507371258890879ull,
+ 3722773265834220172ull, 3110295998466066228ull}},
+{{1255557953679161393ull, 17873134214073613599ull,
+ 4653466582292775215ull, 3887869998082582785ull}},
+{{7702252748690557727ull, 18088237911437090355ull,
+ 14437631660001454269ull, 2429918748801614240ull}},
+{{5016129917435809255ull, 8775239334014199232ull,
+ 18047039575001817837ull, 3037398436002017800ull}},
+{{6270162396794761568ull, 15580735185945136944ull,
+ 4112055395042720680ull, 3796748045002522251ull}},
+{{3918851497996725980ull, 9737959491215710590ull, 264191612688006473ull,
+ 2372967528126576407ull}},
+{{14121936409350683283ull, 16784135382447026141ull,
+ 14165297571142171803ull, 2966209410158220508ull}},
+{{3817362456406190392ull, 16368483209631394773ull,
+ 17706621963927714754ull, 3707761762697775635ull}},
+{{4691694544467562947ull, 14841988024447009637ull,
+ 8760795718241127769ull, 2317351101686109772ull}},
+{{10476304199011841588ull, 4717426975276598334ull,
+ 10950994647801409712ull, 2896688877107637215ull}},
+{{3872008211910026177ull, 5896783719095747918ull,
+ 9077057291324374236ull, 3620861096384546519ull}},
+{{14063382301742308529ull, 7370979648869684897ull,
+ 6734635595728079891ull, 4526076370480683149ull}},
+{{1872084910947860975ull, 2301019271329859109ull,
+ 6514990256543743884ull, 2828797731550426968ull}},
+{{6951792157112214122ull, 2876274089162323886ull,
+ 8143737820679679855ull, 3535997164438033710ull}},
+{{17913112233245043461ull, 17430400666735068569ull,
+ 956300238994824010ull, 4419996455547542138ull}},
+{{4278166118137070307ull, 15505686435136805760ull,
+ 5209373667799152910ull, 2762497784717213836ull}},
+{{5347707647671337884ull, 10158736007066231392ull,
+ 6511717084748941138ull, 3453122230896517295ull}},
+{{6684634559589172354ull, 3475047971978013432ull,
+ 3527960337508788519ull, 4316402788620646619ull}},
+{{4177896599743232722ull, 9089434010127340251ull,
+ 18345876275438850488ull, 2697751742887904136ull}},
+{{610684731251652998ull, 11361792512659175314ull,
+ 4485601270589011494ull, 3372189678609880171ull}},
+{{9986727950919342055ull, 4978868603969193334ull, 995315569808876464ull,
+ 4215237098262350214ull}},
+{{1630018950897200881ull, 3111792877480745834ull,
+ 14457130286412711502ull, 2634523186413968883ull}},
+{{11260895725476276909ull, 13113113133705708100ull,
+ 13459726839588501473ull, 3293153983017461104ull}},
+{{14076119656845346136ull, 2556333361849971413ull,
+ 16824658549485626842ull, 4116442478771826380ull}},
+{{11103417794742035287ull, 6209394369583620037ull,
+ 1292039556573740968ull, 2572776549232391488ull}},
+{{44214188145380397ull, 7761742961979525047ull, 1615049445717176210ull,
+ 3215970686540489360ull}},
+{{13890325790463889208ull, 478806665619630500ull,
+ 2018811807146470263ull, 4019963358175611700ull}},
+{{17904825655894706563ull, 7216783193653350918ull,
+ 10485129416321319722ull, 2512477098859757312ull}},
+{{13157660033013607396ull, 18244351028921464456ull,
+ 13106411770401649652ull, 3140596373574696640ull}},
+{{16447075041267009245ull, 4358694712442278954ull,
+ 16383014713002062066ull, 3925745466968370800ull}},
+{{14891107919219268682ull, 7335870213703812250ull,
+ 10239384195626288791ull, 2453590916855231750ull}},
+{{9390512862169310044ull, 4558151748702377409ull,
+ 3575858207678085181ull, 3066988646069039688ull}},
+{{16349827096139025459ull, 10309375704305359665ull,
+ 4469822759597606476ull, 3833735807586299610ull}},
+{{3301112907445809056ull, 15666731852045625599ull,
+ 7405325243175891951ull, 2396084879741437256ull}},
+{{17961449189589425032ull, 14971728796629644094ull,
+ 9256656553969864939ull, 2995106099676796570ull}},
+{{13228439450132005482ull, 14102974977359667214ull,
+ 2347448655607555366ull, 3743882624595995713ull}},
+{{3656088637905115523ull, 4202673342422404105ull,
+ 12996370455823191864ull, 2339926640372497320ull}},
+{{9181796815808782307ull, 5253341678028005131ull,
+ 16245463069778989830ull, 2924908300465621650ull}},
+{{6865560001333589980ull, 15790049134389782222ull,
+ 11083456800368961479ull, 3656135375582027063ull}},
+{{17805322038521763283ull, 15125875399559839873ull,
+ 9242634982033813945ull, 4570169219477533829ull}},
+{{4210797246435020196ull, 2536143097083818065ull,
+ 8082489872984827668ull, 2856355762173458643ull}},
+{{9875182576471163149ull, 3170178871354772581ull,
+ 5491426322803646681ull, 3570444702716823304ull}},
+{{16955664239016341840ull, 8574409607620853630ull,
+ 6864282903504558351ull, 4463055878396029130ull}},
+{{5985604130957825746ull, 12276535032404115375ull,
+ 8901862833117736873ull, 2789409923997518206ull}},
+{{2870319145269894278ull, 1510610735222980507ull,
+ 1903956504542395284ull, 3486762404996897758ull}},
+{{17422956986869531560ull, 1888263419028725633ull,
+ 11603317667532769913ull, 4358453006246122197ull}},
+{{3971819089152375369ull, 12709379682961423281ull,
+ 9557916551421675147ull, 2724033128903826373ull}},
+{{9576459879867857115ull, 11275038585274391197ull,
+ 16559081707704481838ull, 3405041411129782966ull}},
+{{16582260868262209298ull, 4870426194738213188ull,
+ 11475480097775826490ull, 4256301763912228708ull}},
+{{1140541005809105003ull, 7655702390138771147ull,
+ 16395547097964667364ull, 2660188602445142942ull}},
+{{15260734312543544966ull, 9569627987673463933ull,
+ 11271061835601058397ull, 3325235753056428678ull}},
+{{5240859835397267496ull, 16573721003019217821ull,
+ 4865455257646547188ull, 4156544691320535848ull}},
+{{5581380406336986137ull, 1135203590032235330ull,
+ 3040909536029091993ull, 2597840432075334905ull}},
+{{16200097544776008479ull, 6030690505967682066ull,
+ 8412822938463752895ull, 3247300540094168631ull}},
+{{11026749894115234791ull, 2926677114032214679ull,
+ 5904342654652303215ull, 4059125675117710789ull}},
+{{13809247711463103600ull, 8746702223911216030ull,
+ 5996057168371383461ull, 2536953546948569243ull}},
+{{8038187602474103692ull, 15545063798316407942ull,
+ 2883385442036841422ull, 3171191933685711554ull}},
+{{824362466237853807ull, 10207957711040734120ull,
+ 12827603839400827586ull, 3963989917107139442ull}},
+{{515226541398658630ull, 10991659587827846729ull,
+ 12628938418052905145ull, 2477493698191962151ull}},
+{{5255719195175711191ull, 18351260503212196315ull,
+ 11174487004138743527ull, 3096867122739952689ull}},
+{{1957962975542251085ull, 18327389610587857490ull,
+ 133050699891265697ull, 3871083903424940862ull}},
+{{5835412878141294832ull, 4537089478976329075ull,
+ 13918214742714204773ull, 2419427439640588038ull}},
+{{2682580079249230636ull, 10283047867147799248ull,
+ 8174396391537980158ull, 3024284299550735048ull}},
+{{3353225099061538295ull, 3630437797079973252ull,
+ 10217995489422475198ull, 3780355374438418810ull}},
+{{11319137723768237242ull, 16104081678457146994ull,
+ 10997933199316434902ull, 2362722109024011756ull}},
+{{4925550117855520745ull, 10906730061216657935ull,
+ 13747416499145543628ull, 2953402636280014695ull}},
+{{1545251628892013027ull, 13633412576520822419ull,
+ 12572584605504541631ull, 3691753295350018369ull}},
+{{17106683332553365806ull, 15438411887966595867ull,
+ 940336350799256663ull, 2307345809593761481ull}},
+{{16771668147264319354ull, 14686328841530856930ull,
+ 5787106456926458733ull, 2884182261992201851ull}},
+{{11741213147225623384ull, 4522852996631407451ull,
+ 2622197052730685513ull, 3605227827490252314ull}},
+{{10064830415604641326ull, 10265252264216647218ull,
+ 12501118352768132699ull, 4506534784362815392ull}},
+{{10902205028180288733ull, 4109939655921710559ull,
+ 7813198970480082937ull, 2816584240226759620ull}},
+{{9016070266797973012ull, 9749110588329526103ull,
+ 9766498713100103671ull, 3520730300283449525ull}},
+{{6658401815070078361ull, 7574702216984519725ull,
+ 16819809409802517493ull, 4400912875354311906ull}},
+{{6467344143632492928ull, 7040031894829018780ull,
+ 15124066899553961337ull, 2750570547096444941ull}},
+{{8084180179540616159ull, 13411725886963661379ull,
+ 5070025569160287959ull, 3438213183870556177ull}},
+{{5493539205998382295ull, 12152971340277188820ull,
+ 10949217979877747853ull, 4297766479838195221ull}},
+{{12656834040603764743ull, 9901450096886936964ull,
+ 9149104246637286360ull, 2686104049898872013ull}},
+{{15821042550754705928ull, 12376812621108671205ull,
+ 16048066326723995854ull, 3357630062373590016ull}},
+{{5941245133161218698ull, 6247643739531063199ull,
+ 1613338834695443202ull, 4197037577966987521ull}},
+{{10630807235866843542ull, 8516463355634302403ull,
+ 12537551817753121761ull, 2623148486229367200ull}},
+{{8676823026406166524ull, 15257265212970265908ull,
+ 15671939772191402201ull, 3278935607786709000ull}},
+{{10846028783007708155ull, 5236523460930668673ull,
+ 1143180641529701136ull, 4098669509733386251ull}},
+{{18307983035448287357ull, 3272827163081667920ull,
+ 16855388965451920874ull, 2561668443583366406ull}},
+{{4438234720600807580ull, 13314405990706860709ull,
+ 11845864169960125284ull, 3202085554479208008ull}},
+{{10159479419178397379ull, 16643007488383575886ull,
+ 14807330212450156605ull, 4002606943099010010ull}},
+{{1737988618559110458ull, 12707722689453428881ull,
+ 13866267401208735782ull, 2501629339436881256ull}},
+{{6784171791626275976ull, 6661281324962010293ull,
+ 17332834251510919728ull, 3127036674296101570ull}},
+{{13091900757960232874ull, 8326601656202512866ull,
+ 12442670777533873852ull, 3908795842870126963ull}},
+{{12794123992152533451ull, 14427498071981346349ull,
+ 5470826226744977205ull, 2442997401793829352ull}},
+{{2157596934908503101ull, 4199314534694519225ull,
+ 6838532783431221507ull, 3053746752242286690ull}},
+{{7308682187063016780ull, 637457149940761127ull,
+ 17771538016143802692ull, 3817183440302858362ull}},
+{{11485455394555467344ull, 9621782755567751512ull,
+ 15718897278517264586ull, 2385739650189286476ull}},
+{{14356819243194334180ull, 2803856407604913582ull,
+ 1201877524437029117ull, 2982174562736608096ull}},
+{{8722652017138141917ull, 8116506527933529882ull,
+ 1502346905546286396ull, 3727718203420760120ull}},
+{{10063343529138726602ull, 14296188616813231984ull,
+ 938966815966428997ull, 2329823877137975075ull}},
+{{12579179411423408252ull, 4035177715734376268ull,
+ 15008766575240199959ull, 2912279846422468843ull}},
+{{15723974264279260315ull, 432286126240582431ull,
+ 14149272200622862045ull, 3640349808028086054ull}},
+{{15043281811921687490ull, 5152043676228115943ull,
+ 8463218213923801748ull, 4550437260035107568ull}},
+{{16319580160092136537ull, 12443399334497348272ull,
+ 5289511383702376092ull, 2844023287521942230ull}},
+{{1952731126405619056ull, 15554249168121685341ull,
+ 15835261266482745923ull, 3555029109402427787ull}},
+{{7052599926434411724ull, 14831125441724718772ull,
+ 15182390564676044500ull, 4443786386753034734ull}},
+{{13631246990876283135ull, 46081364223173424ull, 4877308084495139909ull,
+ 2777366491720646709ull}},
+{{17039058738595353919ull, 4669287723706354684ull,
+ 10708321124046312790ull, 3471708114650808386ull}},
+{{2852079349534640783ull, 15059981691487719164ull,
+ 4162029368203115179ull, 4339635143313510483ull}},
+{{11005921630313926297ull, 7106645547966130525ull,
+ 295425345913253035ull, 2712271964570944052ull}},
+{{18369088056319795776ull, 4271620916530275252ull,
+ 369281682391566294ull, 3390339955713680065ull}},
+{{4514615996690193103ull, 14562898182517619874ull,
+ 5073288121416845771ull, 4237924944642100081ull}},
+{{7433321016358758594ull, 6795968354859818469ull,
+ 14700020121953998367ull, 2648703090401312550ull}},
+{{13903337288875836146ull, 3883274425147385182ull,
+ 9151653115587722151ull, 3310878863001640688ull}},
+{{8155799574240019375ull, 242407013006843574ull,
+ 11439566394484652689ull, 4138598578752050860ull}},
+{{485688715472624205ull, 11680719429197746994ull,
+ 16373101033407683738ull, 2586624111720031787ull}},
+{{9830482931195556065ull, 5377527249642407934ull,
+ 15854690273332216769ull, 3233280139650039734ull}},
+{{3064731627139669273ull, 11333595080480397822ull,
+ 10594990804810495153ull, 4041600174562549668ull}},
+{{15750515322244457008ull, 165967897659166782ull,
+ 15845241289861335279ull, 2526000109101593542ull}},
+{{10464772115950795451ull, 14042517927356122190ull,
+ 10583179575471893290ull, 3157500136376991928ull}},
+{{3857593108083718506ull, 8329775372340376930ull,
+ 13228974469339866613ull, 3946875170471239910ull}},
+{{7022681710979711970ull, 7511952616926429533ull,
+ 3656423024910028729ull, 2466796981544524944ull}},
+{{13390038157152027867ull, 14001626789585424820ull,
+ 4570528781137535911ull, 3083496226930656180ull}},
+{{16737547696440034834ull, 12890347468554393121ull,
+ 5713160976421919889ull, 3854370283663320225ull}},
+{{3543438282633939915ull, 1138938140205413845ull,
+ 15099940656332169691ull, 2408981427289575140ull}},
+{{9040983871719812798ull, 15258730730538931018ull,
+ 428181746705660497ull, 3011226784111968926ull}},
+{{2077857802794990189ull, 5238355357891500061ull,
+ 9758599220236851430ull, 3764033480139961157ull}},
+{{3604504135960562820ull, 17109030153964351250ull,
+ 8404967521861726095ull, 2352520925087475723ull}},
+{{13729002206805479333ull, 16774601674028051158ull,
+ 5894523383899769715ull, 2940651156359344654ull}},
+{{7937880721652073359ull, 16356566074107676044ull,
+ 16591526266729487952ull, 3675813945449180817ull}},
+{{9922350902065091698ull, 1998963518925043439ull,
+ 6904349778129696229ull, 4594767431811476022ull}},
+{{13118998341431764167ull, 3555195208541846101ull,
+ 18150276666613223855ull, 2871729644882172513ull}},
+{{2563689871507541497ull, 18279052065959471339ull,
+ 8852787777984366106ull, 3589662056102715642ull}},
+{{17039670394666590583ull, 13625443045594563365ull,
+ 1842612685625681825ull, 4487077570128394553ull}},
+{{12955637005880313067ull, 1598372875855520247ull,
+ 12680847974584520901ull, 2804423481330246595ull}},
+{{11582860238923003429ull, 6609652113246788213ull,
+ 11239373949803263222ull, 3505529351662808244ull}},
+{{643517243371590575ull, 17485437178413261075ull,
+ 14049217437254079027ull, 4381911689578510305ull}},
+{{16543099341603101773ull, 8622555227294594219ull,
+ 1863231870642717536ull, 2738694805986568941ull}},
+{{16067188158576489313ull, 10778194034118242774ull,
+ 6940725856730784824ull, 3423368507483211176ull}},
+{{10860613161365835833ull, 13472742542647803468ull,
+ 8675907320913481030ull, 4279210634354013970ull}},
+{{16011255262708423204ull, 3808778070727489263ull,
+ 10034128093998313548ull, 2674506646471258731ull}},
+{{15402383059958141100ull, 4760972588409361579ull,
+ 7930974099070504031ull, 3343133308089073414ull}},
+{{14641292806520288471ull, 1339529717084314070ull,
+ 690345586983354231ull, 4178916635111341768ull}},
+{{4539121985647792391ull, 7754735100818778150ull, 431465991864596394ull,
+ 2611822896944588605ull}},
+{{14897274518914516296ull, 470046839168696879ull,
+ 5151018508258133397ull, 3264778621180735756ull}},
+{{14009907130215757466ull, 5199244567388259003ull,
+ 6438773135322666746ull, 4080973276475919695ull}},
+{{6450348947171154465ull, 7861213873045049781ull,
+ 10941762237217748572ull, 2550608297797449809ull}},
+{{12674622202391330985ull, 9826517341306312226ull,
+ 18288888814949573619ull, 3188260372246812261ull}},
+{{6619905716134387923ull, 7671460658205502379ull,
+ 9026052963404803312ull, 3985325465308515327ull}},
+{{1831598063370298500ull, 4794662911378438987ull,
+ 12558812129769083926ull, 2490828415817822079ull}},
+{{16124555634495036837ull, 15216700676077824541ull,
+ 11086829143783967003ull, 3113535519772277599ull}},
+{{6320636487836632334ull, 14409189826669892773ull,
+ 9246850411302570850ull, 3891919399715346999ull}},
+{{6256240814111589161ull, 13617429660096070887ull,
+ 12696810534705188637ull, 2432449624822091874ull}},
+{{3208614999212098547ull, 3186729019837924897ull,
+ 6647641131526709989ull, 3040562031027614843ull}},
+{{8622454767442511087ull, 8595097293224794025ull,
+ 3697865395980999582ull, 3800702538784518554ull}},
+{{16918249275720039190ull, 760249789838108361ull,
+ 6922851890915512643ull, 2375439086740324096ull}},
+{{7312753539367885275ull, 14785370292579799164ull,
+ 8653564863644390803ull, 2969298858425405120ull}},
+{{9140941924209856594ull, 13870026847297361051ull,
+ 10816956079555488504ull, 3711623573031756400ull}},
+{{3407245693417466419ull, 8668766779560850657ull,
+ 6760597549722180315ull, 2319764733144847750ull}},
+{{8870743135199220928ull, 6224272456023675417ull,
+ 17674118974007501202ull, 2899705916431059687ull}},
+{{15700114937426414064ull, 17003712606884370079ull,
+ 17480962699081988598ull, 3624632395538824609ull}},
+{{15013457653355629676ull, 12031268721750686791ull,
+ 8016145318570322036ull, 4530790494423530762ull}},
+{{16300940060988350403ull, 16742914987948955052ull,
+ 9621776842533839176ull, 2831744059014706726ull}},
+{{1929431002525886388ull, 2481899661226642200ull,
+ 2803849016312523163ull, 3539680073768383408ull}},
+{{2411788753157357985ull, 16937432631815466462ull,
+ 3504811270390653953ull, 4424600092210479260ull}},
+{{15342426026005512453ull, 3668366367243584682ull,
+ 11413879080848934529ull, 2765375057631549537ull}},
+{{9954660495652114758ull, 9197143977481868757ull, 432290795779004449ull,
+ 3456718822039436922ull}},
+{{17055011637992531351ull, 16108115990279723850ull,
+ 9763735531578531369ull, 4320898527549296152ull}},
+{{15271068292172719999ull, 3150043466283745550ull,
+ 6102334707236582106ull, 2700561579718310095ull}},
+{{9865463328361124190ull, 13160926369709457746ull,
+ 3016232365618339728ull, 3375701974647887619ull}},
+{{3108457123596629430ull, 16451157962136822183ull,
+ 17605348512305088372ull, 4219627468309859523ull}},
+{{8860314729888975250ull, 1058601689480738056ull,
+ 8697499810976986281ull, 2637267167693662202ull}},
+{{11075393412361219062ull, 5934938130278310474ull,
+ 1648502726866457043ull, 3296583959617077753ull}},
+{{4620869728596748020ull, 2806986644420500189ull,
+ 6672314427010459208ull, 4120729949521347191ull}},
+{{5193886589586661464ull, 1754366652762812618ull,
+ 11087725544522618861ull, 2575456218450841994ull}},
+{{15715730273838102638ull, 6804644334380903676ull,
+ 4636284893798497768ull, 3219320273063552493ull}},
+{{1197918768588076682ull, 8505805417976129596ull,
+ 10407042135675510114ull, 4024150341329440616ull}},
+{{9972071267222323734ull, 9927814404662468901ull,
+ 6504401334797193821ull, 2515093963330900385ull}},
+{{17076775102455292572ull, 17021454024255474030ull,
+ 12742187686923880180ull, 3143867454163625481ull}},
+{{12122596841214339907ull, 2830073456609790922ull,
+ 2092676553372686514ull, 3929834317704531852ull}},
+{{12188309044186350346ull, 6380481928808507230ull,
+ 10531294882712704879ull, 2456146448565332407ull}},
+{{6012014268378162124ull, 3363916392583246134ull,
+ 8552432584963493195ull, 3070183060706665509ull}},
+{{16738389872327478463ull, 18039953546011221379ull,
+ 15302226749631754397ull, 3837728825883331886ull}},
+{{8155650660990980088ull, 13580813975470707314ull,
+ 4952205700092458594ull, 2398580516177082429ull}},
+{{971191289383949301ull, 7752645432483608335ull,
+ 10801943143542961147ull, 2998225645221353036ull}},
+{{15049047167012100339ull, 5079120772177122514ull,
+ 13502428929428701434ull, 3747782056526691295ull}},
+{{14017340497809950616ull, 7786136501038089475ull,
+ 15356547108534020252ull, 2342363785329182059ull}},
+{{12909989603835050366ull, 9732670626297611844ull,
+ 14583997867240137411ull, 2927954731661477574ull}},
+{{16137487004793812957ull, 7554152264444626901ull,
+ 9006625297195395956ull, 3659943414576846968ull}},
+{{6336800700710102484ull, 9442690330555783627ull,
+ 11258281621494244945ull, 4574929268221058710ull}},
+{{1654657428730120101ull, 17430896502665834527ull,
+ 2424739995006515186ull, 2859330792638161694ull}},
+{{15903379841194813838ull, 12565248591477517350ull,
+ 12254297030612919791ull, 3574163490797702117ull}},
+{{10655852764638741489ull, 11094874720919508784ull,
+ 1482813232983986027ull, 4467704363497127647ull}},
+{{6659907977899213431ull, 4628453691360999038ull,
+ 7844287298256073123ull, 2792315227185704779ull}},
+{{17548257009228792597ull, 1173881095773860893ull,
+ 5193673104392703500ull, 3490394033982130974ull}},
+{{8100263206253827034ull, 1467351369717326117ull,
+ 15715463417345655183ull, 4362992542477663717ull}},
+{{7368507513122335848ull, 7834623633714410679ull,
+ 12128007645054728441ull, 2726870339048539823ull}},
+{{4598948372975531906ull, 14404965560570401253ull,
+ 10548323537891022647ull, 3408587923810674779ull}},
+{{10360371484646802786ull, 13394520932285613662ull,
+ 8573718403936390405ull, 4260734904763343474ull}},
+{{1863546159476863838ull, 10677418591892202491ull,
+ 9970260020887631907ull, 2662959315477089671ull}},
+{{16164490754628243509ull, 8735087221437865209ull,
+ 7851139007682151980ull, 3328699144346362089ull}},
+{{6370555388003140674ull, 10918859026797331512ull,
+ 14425609778030077879ull, 4160873930432952611ull}},
+{{3981597117501962922ull, 13741815919389414051ull,
+ 6710163102055104722ull, 2600546206520595382ull}},
+{{365310378450065748ull, 7953897862381991756ull,
+ 17611075914423656711ull, 3250682758150744227ull}},
+{{456637973062582185ull, 5330686309550101791ull,
+ 17402158874602182985ull, 4063353447688430284ull}},
+{{7202927760805195722ull, 14860893989537283379ull,
+ 1652977259771588557ull, 2539595904805268928ull}},
+{{4391973682579106748ull, 4741059431639440512ull,
+ 2066221574714485697ull, 3174494881006586160ull}},
+{{5489967103223883435ull, 10538010307976688544ull,
+ 2582776968393107121ull, 3968118601258232700ull}},
+{{3431229439514927147ull, 18115471488553900100ull,
+ 10837607642100467758ull, 2480074125786395437ull}},
+{{4289036799393658933ull, 13420967323837599317ull,
+ 18158695571052972602ull, 3100092657232994296ull}},
+{{9972982017669461571ull, 7552837117942223338ull,
+ 4251625390106664137ull, 3875115821541242871ull}},
+{{10844799779470801386ull, 16249738244782359346ull,
+ 9574794896457746941ull, 2421947388463276794ull}},
+{{4332627687483725924ull, 6477114750695785471ull,
+ 2745121583717407869ull, 3027434235579095993ull}},
+{{804098590927269501ull, 12708079456797119743ull,
+ 8043087998074147740ull, 3784292794473869991ull}},
+{{7420090646970625294ull, 17165921697352975647ull,
+ 11944459026437424193ull, 2365182996546168744ull}},
+{{4663427290285893714ull, 7622344066409055847ull,
+ 14930573783046780242ull, 2956478745682710930ull}},
+{{1217598094429979238ull, 304558046156544001ull, 9439845191953699495ull,
+ 3695598432103388663ull}},
+{{12290213855087206784ull, 7107877806488921856ull,
+ 12817432272612144040ull, 2309749020064617914ull}},
+{{15362767318859008480ull, 8884847258111152320ull,
+ 6798418303910404242ull, 2887186275080772393ull}},
+{{756715074864208984ull, 1882687035784164593ull,
+ 13109708898315393207ull, 3608982843850965491ull}},
+{{5557579862007649134ull, 16188416850012369453ull,
+ 11775450104466853604ull, 4511228554813706864ull}},
+{{5779330422968474661ull, 894388494402955100ull, 7359656315291783503ull,
+ 2819517846758566790ull}},
+{{7224163028710593326ull, 14953043673285857587ull,
+ 18422942430969505186ull, 3524397308448208487ull}},
+{{4418517767460853753ull, 9467932554752546176ull,
+ 18416992020284493579ull, 4405496635560260609ull}},
+{{2761573604663033596ull, 3611614837506647408ull,
+ 4593090985036726631ull, 2753435397225162881ull}},
+{{3451967005828791995ull, 18349576602165472972ull,
+ 10353049749723296192ull, 3441794246531453601ull}},
+{{4314958757285989993ull, 4490226678997289599ull,
+ 17552998205581508145ull, 4302242808164317001ull}},
+{{9614378250944825602ull, 14335606720441775759ull,
+ 4053094850847360734ull, 2688901755102698126ull}},
+{{7406286795253644098ull, 8696136363697443891ull,
+ 14289740600413976726ull, 3361127193878372657ull}},
+{{4646172475639667219ull, 1646798417767029056ull,
+ 4027117695235307196ull, 4201408992347965822ull}},
+{{2903857797274792012ull, 10252621047959168968ull,
+ 16352006614804230709ull, 2625880620217478638ull}},
+{{3629822246593490015ull, 17427462328376349114ull,
+ 11216636231650512578ull, 3282350775271848298ull}},
+{{13760649845096638326ull, 12560955873615660584ull,
+ 4797423252708364915ull, 4102938469089810373ull}},
+{{8600406153185398954ull, 5544754411796093913ull,
+ 5304232542156422024ull, 2564336543181131483ull}},
+{{15362193709909136597ull, 6930943014745117391ull,
+ 2018604659268139626ull, 3205420678976414354ull}},
+{{14591056118959032842ull, 17887050805286172547ull,
+ 11746627860939950340ull, 4006775848720517942ull}},
+{{6813567065135701574ull, 1956034716449082034ull,
+ 2729956394660081059ull, 2504234905450323714ull}},
+{{17740330868274402776ull, 16280101450843516254ull,
+ 12635817530179877131ull, 3130293631812904642ull}},
+{{12952041548488227661ull, 15738440795127007414ull,
+ 6571399875870070606ull, 3912867039766130803ull}},
+{{3483339949377754385ull, 5224839478526991730ull,
+ 1801281913205100177ull, 2445541899853831752ull}},
+{{13577546973576968789ull, 11142735366586127566ull,
+ 2251602391506375221ull, 3056927374817289690ull}},
+{{7748561680116435178ull, 93361152950495746ull, 12037875026237744835ull,
+ 3821159218521612112ull}},
+{{9454537068500159890ull, 16199251785089917505ull,
+ 7523671891398590521ull, 2388224511576007570ull}},
+{{16429857354052587767ull, 6414006676080233169ull,
+ 181217827393462344ull, 2985280639470009463ull}},
+{{6702263637283570996ull, 8017508345100291462ull,
+ 14061580339523991642ull, 3731600799337511828ull}},
+{{18023972828584395585ull, 9622628734115070067ull,
+ 18011859749057270584ull, 2332250499585944892ull}},
+{{17918280017303106577ull, 12028285917643837584ull,
+ 4068080612612036614ull, 2915313124482431116ull}},
+{{3951105947919331605ull, 5811985360200021173ull,
+ 5085100765765045768ull, 3644141405603038895ull}},
+{{9550568453326552410ull, 7264981700250026466ull,
+ 1744689938778919306ull, 4555176757003798619ull}},
+{{10580791301756483160ull, 9152299581083654445ull,
+ 17231332276232682230ull, 2846985473127374136ull}},
+{{17837675145622991854ull, 2217002439499792248ull,
+ 3092421271581301172ull, 3558731841409217671ull}},
+{{3850349858319188202ull, 2771253049374740311ull,
+ 17700584644758790177ull, 4448414801761522088ull}},
+{{9323997689090574482ull, 13261248201927682454ull,
+ 11062865402974243860ull, 2780259251100951305ull}},
+{{2431625074508442295ull, 16576560252409603068ull,
+ 18440267772145192729ull, 3475324063876189131ull}},
+{{3039531343135552868ull, 6885642260229840123ull,
+ 18438648696754103008ull, 4344155079845236414ull}},
+{{18040608153955578207ull, 4303526412643650076ull,
+ 6912469417043926476ull, 2715096924903272759ull}},
+{{4104016118734921143ull, 5379408015804562596ull,
+ 4028900752877520191ull, 3393871156129090949ull}},
+{{5130020148418651428ull, 2112574001328315341ull,
+ 9647811959524288143ull, 4242338945161363686ull}},
+{{5512105601975351095ull, 8237887778471278944ull,
+ 1418196456275292185ull, 2651461840725852304ull}},
+{{6890132002469188868ull, 14909045741516486584ull,
+ 1772745570344115231ull, 3314327300907315380ull}},
+{{8612665003086486085ull, 14024621158468220326ull,
+ 2215931962930144039ull, 4142909126134144225ull}},
+{{771229608501665900ull, 15682917251683719560ull,
+ 12914172522899809784ull, 2589318203833840140ull}},
+{{964037010627082374ull, 1156902490895097834ull,
+ 16142715653624762231ull, 3236647754792300175ull}},
+{{10428418300138628776ull, 15281186168901036004ull,
+ 15566708548603564884ull, 4045809693490375219ull}},
+{{15741133474441418793ull, 327369318708371694ull,
+ 7423349833663534101ull, 2528631058431484512ull}},
+{{10453044806196997683ull, 5020897666812852522ull,
+ 9279187292079417626ull, 3160788823039355640ull}},
+{{3842933970891471296ull, 15499494120370841461ull,
+ 11598984115099272032ull, 3950986028799194550ull}},
+{{4707676741020863512ull, 9687183825231775913ull,
+ 2637679053509657116ull, 2469366267999496594ull}},
+{{10496281944703467294ull, 12108979781539719891ull,
+ 12520470853741847203ull, 3086707834999370742ull}},
+{{8508666412451946213ull, 10524538708497261960ull,
+ 6427216530322533196ull, 3858384793749213428ull}},
+{{5317916507782466383ull, 15801208729665564533ull,
+ 13240382368306359055ull, 2411490496093258392ull}},
+{{11259081653155470883ull, 15139824893654567762ull,
+ 16550477960382948819ull, 3014363120116572990ull}},
+{{4850480029589562796ull, 14313095098640821799ull,
+ 11464725413623910216ull, 3767953900145716238ull}},
+{{9949079046134558604ull, 8945684436650513624ull,
+ 2553767365087555981ull, 2354971187591072649ull}},
+{{12436348807668198254ull, 15793791564240529934ull,
+ 7803895224786832880ull, 2943713984488840811ull}},
+{{6322063972730472010ull, 1295495381591110802ull,
+ 5143183012556153197ull, 3679642480611051014ull}},
+{{17125952002767865820ull, 6231055245416276406ull,
+ 15652350802549967304ull, 4599553100763813767ull}},
+{{6092033983302528234ull, 3894409528385172754ull,
+ 16700248279234811421ull, 2874720687977383604ull}},
+{{16838414515982936100ull, 9479697928908853846ull,
+ 2428566275333962660ull, 3593400859971729506ull}},
+{{11824646108123894317ull, 11849622411136067308ull,
+ 12259079881022229133ull, 4491751074964661882ull}},
+{{16613775854432209756ull, 9711857016173736019ull,
+ 12273610944066281112ull, 2807344421852913676ull}},
+{{16155533799612874291ull, 12139821270217170024ull,
+ 15342013680082851390ull, 3509180527316142095ull}},
+{{1747673175806541248ull, 5951404550916686723ull,
+ 14565831081676176334ull, 4386475659145177619ull}},
+{{17233196799374945944ull, 17554685899605092913ull,
+ 6797801416833916256ull, 2741547286965736012ull}},
+{{7706437943936518718ull, 3496613300796814526ull,
+ 8497251771042395321ull, 3426934108707170015ull}},
+{{409675393065872590ull, 8982452644423406062ull, 6009878695375606247ull,
+ 4283667635883962519ull}},
+{{14091105175948334081ull, 12531561930405710644ull,
+ 10673703212250835760ull, 2677292272427476574ull}},
+{{17613881469935417601ull, 15664452413007138305ull,
+ 4118756978458768892ull, 3346615340534345718ull}},
+{{8182293782137108289ull, 1133821442549371266ull,
+ 14371818259928236924ull, 4183269175667932147ull}},
+{{9725619632263080585ull, 9932010438448132849ull,
+ 6676543403241454125ull, 2614543234792457592ull}},
+{{16768710558756238635ull, 17026699066487553965ull,
+ 8345679254051817656ull, 3268179043490571990ull}},
+{{7125830143163134581ull, 2836629759399890841ull,
+ 1208727030709996263ull, 4085223804363214988ull}},
+{{15982858885545428873ull, 8690422627266013631ull,
+ 9978826431048523472ull, 2553264877727009367ull}},
+{{15366887588504398188ull, 10863028284082517039ull,
+ 7861847020383266436ull, 3191581097158761709ull}},
+{{14596923467203109831ull, 13578785355103146299ull,
+ 14438994793906470949ull, 3989476371448452136ull}},
+{{6817234157788249692ull, 10792583856153160389ull,
+ 9024371746191544343ull, 2493422732155282585ull}},
+{{13133228715662700019ull, 8879043801764062582ull,
+ 15892150701166818333ull, 3116778415194103231ull}},
+{{7193163857723599216ull, 15710490770632466132ull,
+ 15253502358031135012ull, 3895973018992629039ull}},
+{{13719099447932025318ull, 595684694790515524ull,
+ 16450968001410541239ull, 2434983136870393149ull}},
+{{17148874309915031648ull, 14579663923770308117ull,
+ 6728651946481012836ull, 3043728921087991437ull}},
+{{7601034832111625847ull, 18224579904712885147ull,
+ 13022500951528653949ull, 3804661151359989296ull}},
+{{2444803760856072203ull, 13696205449659247169ull,
+ 8139063094705408718ull, 2377913219599993310ull}},
+{{7667690719497478157ull, 7896884775219283153ull, 950456831526985090ull,
+ 2972391524499991638ull}},
+{{14196299417799235600ull, 647733932169328133ull,
+ 10411443076263507171ull, 3715489405624989547ull}},
+{{11178530145338216202ull, 16545734772101687747ull,
+ 4201308913450998029ull, 2322180878515618467ull}},
+{{9361476663245382349ull, 6847110409844945972ull, 639950123386359633ull,
+ 2902726098144523084ull}},
+{{11701845829056727936ull, 13170574030733570369ull,
+ 799937654232949541ull, 3628407622680653855ull}},
+{{792249231038746208ull, 2628159483134799250ull,
+ 14834980123073350639ull, 4535509528350817318ull}},
+{{5106841787826604284ull, 8560128704600331387ull,
+ 4660176558493456245ull, 2834693455219260824ull}},
+{{1771866216355867451ull, 15311846899177802138ull,
+ 5825220698116820306ull, 3543366819024076030ull}},
+{{11438204807299610122ull, 9916436587117476864ull,
+ 16504897909500801191ull, 4429208523780095037ull}},
+{{7148878004562256326ull, 13115301894589504896ull,
+ 12621404202651694696ull, 2768255327362559398ull}},
+{{8936097505702820408ull, 16394127368236881120ull,
+ 6553383216459842562ull, 3460319159203199248ull}},
+{{11170121882128525510ull, 11269287173441325592ull,
+ 8191729020574803203ull, 4325398949003999060ull}},
+{{6981326176330328444ull, 4737461474187134543ull,
+ 14343202674714027810ull, 2703374343127499412ull}},
+{{4114971701985522650ull, 15145198879588693987ull,
+ 17929003343392534762ull, 3379217928909374265ull}},
+{{532028609054515409ull, 9708126562631091676ull, 8576196123958504741ull,
+ 4224022411136717832ull}},
+{{9555889917513847939ull, 8373422110858126249ull,
+ 5360122577474065463ull, 2640014006960448645ull}},
+{{16556548415319697827ull, 5855091620145269907ull,
+ 11311839240269969733ull, 3300017508700560806ull}},
+{{16083999500722234380ull, 11930550543608975288ull,
+ 4916427013482686358ull, 4125021885875701008ull}},
+{{10052499687951396488ull, 2844908071328221651ull,
+ 3072766883426678974ull, 2578138678672313130ull}},
+{{7953938591511857706ull, 12779507126015052872ull,
+ 13064330641138124525ull, 3222673348340391412ull}},
+{{9942423239389822132ull, 2139325852236652378ull,
+ 16330413301422655657ull, 4028341685425489265ull}},
+{{10825700543046026737ull, 12866293703716377496ull,
+ 3288979285748077929ull, 2517713553390930791ull}},
+{{13532125678807533421ull, 2247809074363308158ull,
+ 17946282162467261124ull, 3147141941738663488ull}},
+{{7691785061654640968ull, 2809761342954135198ull,
+ 3986108629374524789ull, 3933927427173329361ull}},
+{{195679645106762701ull, 4061943848560028451ull,
+ 14020532939427547753ull, 2458704641983330850ull}},
+{{14079657611665617088ull, 9689115829127423467ull,
+ 8302294137429658883ull, 3073380802479163563ull}},
+{{12987885996154633456ull, 7499708767981891430ull,
+ 5766181653359685700ull, 3841726003098954454ull}},
+{{3505742729169258006ull, 13910690016843457952ull,
+ 17438921588631967274ull, 2401078751936846533ull}},
+{{4382178411461572508ull, 8164990484199546632ull,
+ 7963593930507795381ull, 3001348439921058167ull}},
+{{5477723014326965634ull, 14817924123676821194ull,
+ 5342806394707356322ull, 3751685549901322709ull}},
+{{8035262902381741426ull, 13872888595725401150ull,
+ 5645097005905791653ull, 2344803468688326693ull}},
+{{820706591122400974ull, 3506052689374587726ull,
+ 11668057275809627471ull, 2931004335860408366ull}},
+{{10249255275757777025ull, 18217623917000398369ull,
+ 5361699557907258530ull, 3663755419825510458ull}},
+{{17423255113124609185ull, 13548657859395722153ull,
+ 15925496484238848971ull, 4579694274781888072ull}},
+{{3972005418061798885ull, 6162068152908632394ull,
+ 9953435302649280607ull, 2862308921738680045ull}},
+{{14188378809432024414ull, 3090899172708402588ull,
+ 17053480146738988663ull, 3577886152173350056ull}},
+{{17735473511790030518ull, 17698682021167666947ull,
+ 2870106109714184212ull, 4472357690216687571ull}},
+{{8778827935655075122ull, 1838304226375016034ull,
+ 17934717383067222797ull, 2795223556385429731ull}},
+{{1750162882714068094ull, 6909566301396157947ull,
+ 17806710710406640592ull, 3494029445481787164ull}},
+{{16022761658674748829ull, 8636957876745197433ull,
+ 3811644314298749124ull, 4367536806852233956ull}},
+{{3096697009030636163ull, 14621470709820524204ull,
+ 11605649733291494010ull, 2729710504282646222ull}},
+{{3870871261288295203ull, 9053466350420879447ull,
+ 5283690129759591705ull, 3412138130353307778ull}},
+{{226903058182981100ull, 15928518956453487213ull,
+ 15827984699054265439ull, 4265172662941634722ull}},
+{{2447657420578057140ull, 16872853375424511364ull,
+ 14504176455336303803ull, 2665732914338521701ull}},
+{{3059571775722571424ull, 16479380700853251301ull,
+ 4295162513888216042ull, 3332166142923152127ull}},
+{{8436150738080602184ull, 11375853839211788318ull,
+ 757267123932882149ull, 4165207678653940159ull}},
+{{660908192872988461ull, 9415751658721061651ull, 7390820980099133199ull,
+ 2603254799158712599ull}},
+{{14661193296373399289ull, 7158003554973939159ull,
+ 4626840206696528595ull, 3254068498948390749ull}},
+{{13714805602039361207ull, 4335818425290036045ull,
+ 10395236276798048648ull, 4067585623685488436ull}},
+{{10877596510488294706ull, 2709886515806272528ull,
+ 15720394709853556213ull, 2542241014803430272ull}},
+{{13596995638110368383ull, 7999044163185228564ull,
+ 1203749313607393650ull, 3177801268504287841ull}},
+{{16996244547637960478ull, 775433167126759897ull,
+ 6116372660436629967ull, 3972251585630359801ull}},
+{{3705123814632643443ull, 7402174757095306792ull,
+ 15351947958841363489ull, 2482657241018974875ull}},
+{{4631404768290804304ull, 13864404464796521394ull,
+ 14578248930124316457ull, 3103321551273718594ull}},
+{{15012627997218281188ull, 3495447525713488030ull,
+ 8999439125800619764ull, 3879151939092148243ull}},
+{{4771206479834037838ull, 11408026740425705827ull,
+ 3318806444411693400ull, 2424469961932592652ull}},
+{{1352322081365159394ull, 14260033425532132284ull,
+ 4148508055514616750ull, 3030587452415740815ull}},
+{{1690402601706449242ull, 8601669745060389547ull, 573949050965883034ull,
+ 3788234315519676019ull}},
+{{17197402690562388441ull, 9987729609090131370ull,
+ 16499619221349534560ull, 2367646447199797511ull}},
+{{12273381326348209743ull, 12484662011362664213ull,
+ 16012838008259530296ull, 2959558058999746889ull}},
+{{1506668602653098466ull, 15605827514203330267ull,
+ 6180989455042249158ull, 3699447573749683612ull}},
+{{17082568941154044206ull, 5141956177949693512ull,
+ 13086490446256181532ull, 2312154733593552257ull}},
+{{2906467102733003641ull, 6427445222437116891ull,
+ 2523055002538063203ull, 2890193416991940322ull}},
+{{17468141933698418263ull, 3422620509619008209ull,
+ 12377190790027354812ull, 3612741771239925402ull}},
+{{8000119361840859116ull, 4278275637023760262ull,
+ 6248116450679417707ull, 4515927214049906753ull}},
+{{388388582723149044ull, 368079263926156212ull, 15434287827743105827ull,
+ 2822454508781191720ull}},
+{{485485728403936305ull, 14295157135189858977ull, 846115710969330667ull,
+ 3528068135976489651ull}},
+{{5218543178932308285ull, 13257260400559935817ull,
+ 14892702693993827046ull, 4410085169970612063ull}},
+{{14790804532901162438ull, 3674101731922571981ull,
+ 16225468211387223760ull, 2756303231231632539ull}},
+{{4653447610844289336ull, 4592627164903214977ull,
+ 15670149245806641796ull, 3445379039039540674ull}},
+{{10428495531982749574ull, 5740783956129018721ull,
+ 10364314520403526437ull, 4306723798799425843ull}},
+{{18047024753557688244ull, 5893832981794330652ull,
+ 4171853566038510071ull, 2691702374249641152ull}},
+{{4112036868237558688ull, 2755605208815525412ull,
+ 5214816957548137589ull, 3364627967812051440ull}},
+{{5140046085296948360ull, 8056192529446794669ull,
+ 6518521196935171986ull, 4205784959765064300ull}},
+{{5518371812524286677ull, 9646806349331634572ull,
+ 13297447784939258299ull, 2628615599853165187ull}},
+{{6897964765655358347ull, 7446821918237155311ull,
+ 12010123712746684970ull, 3285769499816456484ull}},
+{{4010769938641810029ull, 85155360941668331ull, 15012654640933356213ull,
+ 4107211874770570605ull}},
+{{200888202437437316ull, 2359065109802236659ull,
+ 11688752159797041585ull, 2567007421731606628ull}},
+{{14086168308328960357ull, 7560517405680183727ull,
+ 14610940199746301981ull, 3208759277164508285ull}},
+{{12996024366983812543ull, 14062332775527617563ull,
+ 4428617194400713764ull, 4010949096455635357ull}},
+{{5816672220151188887ull, 18012330021559536785ull,
+ 5073728755714140054ull, 2506843185284772098ull}},
+{{11882526293616374013ull, 13292040490094645173ull,
+ 15565532981497450876ull, 3133553981605965122ull}},
+{{1018099811738303804ull, 16615050612618306467ull,
+ 10233544190017037787ull, 3916942477007456403ull}},
+{{16777213446832297542ull, 8078563623672747589ull,
+ 4090122109546954665ull, 2448089048129660252ull}},
+{{7136458753258208215ull, 14709890548018322391ull,
+ 5112652636933693331ull, 3060111310162075315ull}},
+{{4308887423145372365ull, 13775677166595515085ull,
+ 1779129777739728760ull, 3825139137702594144ull}},
+{{4998897648679551680ull, 8609798229122196928ull,
+ 1111956111087330475ull, 2390711961064121340ull}},
+{{6248622060849439600ull, 6150561767975358256ull,
+ 1389945138859163094ull, 2988389951330151675ull}},
+{{7810777576061799500ull, 16911574246823973628ull,
+ 15572489478856117579ull, 3735487439162689593ull}},
+{{14105108021893400496ull, 8263890895051289565ull,
+ 2815276896643991631ull, 2334679649476680996ull}},
+{{3796326972084586908ull, 5718177600386724053ull,
+ 3519096120804989539ull, 2918349561845851245ull}},
+{{9357094733533121538ull, 2536035982056017162ull,
+ 9010556169433624828ull, 3647936952307314056ull}},
+{{2472996380061626115ull, 3170044977570021453ull,
+ 11263195211792031035ull, 4559921190384142570ull}},
+{{3851465746752210274ull, 18122179175477121072ull,
+ 11651183025797407300ull, 2849950743990089106ull}},
+{{4814332183440262842ull, 4205979895636849724ull,
+ 5340606745391983318ull, 3562438429987611383ull}},
+{{6017915229300328553ull, 14480846906400837963ull,
+ 2064072413312591243ull, 4453048037484514229ull}},
+{{1455354009099011394ull, 6744686307286829775ull,
+ 3595888267534063479ull, 2783155023427821393ull}},
+{{15654250566655927954ull, 3819171865681149314ull,
+ 9106546352844967253ull, 3478943779284776741ull}},
+{{10344441171465134134ull, 9385650850528824547ull,
+ 15994868959483596970ull, 4348679724105970926ull}},
+{{4159432722952014882ull, 10477717800007903246ull,
+ 5385107081249860202ull, 2717924827566231829ull}},
+{{14422662940544794410ull, 3873775213155103249ull,
+ 11343069869989713157ull, 3397406034457789786ull}},
+{{4193270620398829301ull, 9453905034871266966ull,
+ 4955465300632365638ull, 4246757543072237233ull}},
+{{16455852193031432025ull, 1297004628367153949ull,
+ 14626380858963698284ull, 2654223464420148270ull}},
+{{6734757186007126319ull, 1621255785458942437ull,
+ 9059604036849847047ull, 3317779330525185338ull}},
+{{13030132500936295803ull, 15861627787105841758ull,
+ 2101133009207533000ull, 4147224163156481673ull}},
+{{3532146794657796973ull, 9913517366941151099ull,
+ 12842423176823177885ull, 2592015101972801045ull}},
+{{18250241548604409928ull, 17003582727103826777ull,
+ 2217970915746808644ull, 3240018877466001307ull}},
+{{8977743880473348698ull, 2807734335170231856ull,
+ 16607521699965674518ull, 4050023596832501633ull}},
+{{5611089925295842937ull, 15589892014763558622ull,
+ 3462172034837464717ull, 2531264748020313521ull}},
+{{16237234443474579479ull, 5652306963172284565ull,
+ 8939401061974218801ull, 3164080935025391901ull}},
+{{6461484999061060636ull, 11677069722392743611ull,
+ 15785937345895161405ull, 3955101168781739876ull}},
+{{1732585115199468946ull, 9604011585709158709ull, 642838804329700070ull,
+ 2471938230488587423ull}},
+{{6777417412426724086ull, 2781642445281672578ull,
+ 14638606560694288800ull, 3089922788110734278ull}},
+{{17695143802388180916ull, 3477053056602090722ull,
+ 9074886164013085192ull, 3862403485138417848ull}},
+{{15671150894920000976ull, 2173158160376306701ull,
+ 5671803852508178245ull, 2414002178211511155ull}},
+{{5753880563367837508ull, 7328133718897771281ull,
+ 2478068797207834902ull, 3017502722764388944ull}},
+{{11804036722637184789ull, 18383539185476989909ull,
+ 3097585996509793627ull, 3771878403455486180ull}},
+{{9683365960861934446ull, 9183868981709424741ull,
+ 11159363284673396825ull, 2357424002159678862ull}},
+{{16715893469504805961ull, 16091522245564168830ull,
+ 4725832068986970223ull, 2946780002699598578ull}},
+{{11671494800026231643ull, 15502716788527823134ull,
+ 15130662123088488587ull, 3683475003374498222ull}},
+{{5365996463178013746ull, 14766709967232391014ull,
+ 9689955617005834926ull, 4604343754218122778ull}},
+{{17188805844768422303ull, 4617507711092856479ull,
+ 10667908279056034733ull, 2877714846386326736ull}},
+{{16874321287533139975ull, 10383570657293458503ull,
+ 13334885348820043416ull, 3597143557982908420ull}},
+{{16481215590989037064ull, 12979463321616823129ull,
+ 16668606686025054270ull, 4496429447478635525ull}},
+{{3383230716727066309ull, 3500478557583126552ull,
+ 12723722187979352871ull, 2810268404674147203ull}},
+{{4229038395908832887ull, 18210656252261071902ull,
+ 11292966716546803184ull, 3512835505842684004ull}},
+{{14509670031740816916ull, 4316576241616788261ull,
+ 14116208395683503981ull, 4391044382303355005ull}},
+{{11374386779051704525ull, 5003703160224186615ull,
+ 11128473256515883940ull, 2744402738939596878ull}},
+{{9606297455387242752ull, 6254628950280233269ull,
+ 4687219533790079117ull, 3430503423674496098ull}},
+{{16619557837661441344ull, 12429972206277679490ull,
+ 15082396454092374704ull, 4288129279593120122ull}},
+{{14998909666965788744ull, 7768732628923549681ull,
+ 14038183802235122094ull, 2680080799745700076ull}},
+{{4913579028425072218ull, 487543749299661294ull,
+ 17547729752793902618ull, 3350100999682125095ull}},
+{{15365345822386116080ull, 9832801723479352425ull,
+ 17322976172564990368ull, 4187626249602656369ull}},
+{{2685812111350240694ull, 6145501077174595266ull,
+ 3909331080212037124ull, 2617266406001660231ull}},
+{{12580637176042576676ull, 7681876346468244082ull,
+ 274977831837658501ull, 3271583007502075289ull}},
+{{6502424433198445037ull, 14214031451512693007ull,
+ 4955408308224461030ull, 4089478759377594111ull}},
+{{10981544298390110004ull, 4272083638768045225ull,
+ 10014659220281370000ull, 2555924224610996319ull}},
+{{18338616391415025409ull, 5340104548460056531ull,
+ 7906638006924324596ull, 3194905280763745399ull}},
+{{18311584470841393857ull, 6675130685575070664ull,
+ 5271611490228017841ull, 3993631600954681749ull}},
+{{11444740294275871161ull, 15701171724552888925ull,
+ 5600600190606205102ull, 2496019750596676093ull}},
+{{470867312562675239ull, 10403092618836335349ull,
+ 11612436256685144282ull, 3120024688245845116ull}},
+{{5200270159130731953ull, 3780493736690643378ull,
+ 14515545320856430353ull, 3900030860307306395ull}},
+{{7861854867884095375ull, 13892023631500121871ull,
+ 6766372816321575018ull, 2437519287692066497ull}},
+{{5215632566427731314ull, 8141657502520376531ull,
+ 13069652038829356677ull, 3046899109615083121ull}},
+{{1907854689607276238ull, 14788757896577858568ull,
+ 2502006993254532134ull, 3808623887018853902ull}},
+{{1192409181004547649ull, 4631287666933773701ull,
+ 15398812426066246296ull, 2380389929386783688ull}},
+{{6102197494683072465ull, 5789109583667217126ull, 801771458873256254ull,
+ 2975487411733479611ull}},
+{{16851118905208616390ull, 16459759016438797215ull,
+ 14837272378873734029ull, 3719359264666849513ull}},
+{{17449478343396467100ull, 12593192394487942211ull,
+ 2355766209155001912ull, 2324599540416780946ull}},
+{{17200161910818195970ull, 15741490493109927764ull,
+ 12168079798298528198ull, 2905749425520976182ull}},
+{{3053458314813193347ull, 10453491079532633898ull,
+ 5986727711018384440ull, 3632186781901220228ull}},
+{{13040194930371267492ull, 13066863849415792372ull,
+ 7483409638772980550ull, 4540233477376525285ull}},
+{{17373493868336817990ull, 3555103887457482328ull,
+ 6982974033446806796ull, 2837645923360328303ull}},
+{{3270123261711470872ull, 4443879859321852911ull,
+ 4117031523381120591ull, 3547057404200410379ull}},
+{{17922712132421502302ull, 943163805724928234ull, 534603385799012835ull,
+ 4433821755250512974ull}},
+{{15813381101190826843ull, 16730378443073937810ull,
+ 14169185171406546733ull, 2771138597031570608ull}},
+{{10543354339633757745ull, 7077914998560258551ull,
+ 17711481464258183417ull, 3463923246289463260ull}},
+{{8567506906114809278ull, 13459079766627711093ull,
+ 3692607756613177655ull, 4329904057861829076ull}},
+{{7660534825535449751ull, 15329453881783401289ull,
+ 11531251884738011842ull, 2706190036163643172ull}},
+{{14187354550346700092ull, 9938445315374475803ull,
+ 14414064855922514803ull, 3382737545204553965ull}},
+{{13122507169505987211ull, 7811370625790706850ull,
+ 4182523014620979792ull, 4228421931505692457ull}},
+{{12813252999368629911ull, 4882106641119191781ull,
+ 14143291930206582130ull, 2642763707191057785ull}},
+{{2181508193928623677ull, 15326005338253765535ull,
+ 3844056857476063950ull, 3303454633988822232ull}},
+{{16561943297692943308ull, 9934134635962431110ull,
+ 4805071071845079938ull, 4129318292486027790ull}},
+{{5739528542630701664ull, 10820520165903907348ull,
+ 16838227475185338673ull, 2580823932803767368ull}},
+{{7174410678288377079ull, 18137336225807272089ull,
+ 2601040270272121725ull, 3226029916004709211ull}},
+{{13579699366287859253ull, 8836612226976926399ull,
+ 17086358393122315869ull, 4032537395005886513ull}},
+{{15404841131570993889ull, 7828725651074272951ull,
+ 3761444968060365562ull, 2520335871878679071ull}},
+{{14644365396036354458ull, 562535026988065381ull, 90120191648069049ull,
+ 3150419839848348839ull}},
+{{4470398689763279360ull, 5314854802162469631ull,
+ 13947708294842250023ull, 3938024799810436048ull}},
+{{9711528208743131456ull, 10239313278992625375ull,
+ 8717317684276406264ull, 2461265499881522530ull}},
+{{7527724242501526416ull, 12799141598740781719ull,
+ 1673275068490732022ull, 3076581874851903163ull}},
+{{4797969284699520116ull, 6775554961571201341ull,
+ 15926651890895578740ull, 3845727343564878953ull}},
+{{5304573812150894025ull, 13458093887836776646ull,
+ 3036628404168654856ull, 2403579589728049346ull}},
+{{15854089302043393339ull, 16822617359795970807ull,
+ 13019157542065594378ull, 3004474487160061682ull}},
+{{15205925609126853769ull, 11804899662890187701ull,
+ 7050574890727217165ull, 3755593108950077103ull}},
+{{11809546514917977558ull, 9683905298520061265ull,
+ 11324138334345592584ull, 2347245693093798189ull}},
+{{926875088365308235ull, 12104881623150076582ull, 320114862649827018ull,
+ 2934057116367247737ull}},
+{{10381965897311411102ull, 5907729992082819919ull,
+ 5011829596739671677ull, 3667571395459059671ull}},
+{{8365771353211875973ull, 11996348508530912803ull,
+ 1653100977497201692ull, 4584464244323824589ull}},
+{{2922764086543728532ull, 16721089854686596310ull,
+ 3339031120149445009ull, 2865290152702390368ull}},
+{{12876827145034436472ull, 7066304263076081675ull,
+ 4173788900186806262ull, 3581612690877987960ull}},
+{{11484347912865657686ull, 18056252365699877902ull,
+ 5217236125233507827ull, 4477015863597484950ull}},
+{{2566031427113648150ull, 8979314719348729737ull,
+ 17095830633553106104ull, 2798134914748428093ull}},
+{{7819225302319448092ull, 11224143399185912171ull,
+ 7534730236659218918ull, 3497668643435535117ull}},
+{{5162345609471922210ull, 4806807212127614406ull,
+ 14030098814251411552ull, 4372085804294418896ull}},
+{{17061524061202115094ull, 3004254507579759003ull,
+ 8768811758907132220ull, 2732553627684011810ull}},
+{{16715219058075255963ull, 3755318134474698754ull,
+ 1737642661779139467ull, 3415692034605014763ull}},
+{{11670651785739294145ull, 82461649665985539ull,
+ 16007111382506088046ull, 4269615043256268453ull}},
+{{4988314356873364889ull, 13886596586323404674ull,
+ 12310287623279998980ull, 2668509402035167783ull}},
+{{15458764982946481919ull, 17358245732904255842ull,
+ 10776173510672610821ull, 3335636752543959729ull}},
+{{10100084191828326591ull, 7862749110848156091ull,
+ 18081902906768151431ull, 4169545940679949661ull}},
+{{4006709610679010168ull, 11831747221921179413ull,
+ 13607032325943788596ull, 2605966212924968538ull}},
+{{9620073031776150613ull, 14789684027401474266ull,
+ 7785418370574959937ull, 3257457766156210673ull}},
+{{2801719252865412459ull, 4652046978969679121ull,
+ 14343458981646087826ull, 4071822207695263341ull}},
+{{13280289579109352547ull, 7519215380283437354ull,
+ 11270504872742498843ull, 2544888879809539588ull}},
+{{7376989937031914875ull, 4787333206926908789ull,
+ 14088131090928123554ull, 3181111099761924485ull}},
+{{13832923439717281498ull, 15207538545513411794ull,
+ 3775105808377990730ull, 3976388874702405607ull}},
+{{13257263168250688840ull, 14116397609373270275ull,
+ 9276970157877326062ull, 2485243046689003504ull}},
+{{11959892941885973146ull, 8422124974861812036ull,
+ 11596212697346657578ull, 3106553808361254380ull}},
+{{14949866177357466433ull, 1304284181722489237ull,
+ 14495265871683321973ull, 3883192260451567975ull}},
+{{11649509370062110473ull, 3121020622790249725ull,
+ 15977070197443158089ull, 2426995162782229984ull}},
+{{726828657295474379ull, 8512961796915200061ull, 1524593673094395995ull,
+ 3033743953477787481ull}},
+{{5520221840046730877ull, 6029516227716612172ull,
+ 6517428109795382898ull, 3792179941847234351ull}},
+{{12673510686883982607ull, 8380133660750270511ull,
+ 10990921596263196167ull, 2370112463654521469ull}},
+{{11230202340177590354ull, 5863481057510450235ull,
+ 18350338013756383113ull, 2962640579568151836ull}},
+{{9426066906794600038ull, 11941037340315450698ull,
+ 4491178443485927275ull, 3703300724460189796ull}},
+{{10502977835174012928ull, 5157305328483462734ull,
+ 12030358564033480355ull, 2314562952787618622ull}},
+{{3905350257112740352ull, 1834945642176940514ull,
+ 5814576168187074636ull, 2893203690984523278ull}},
+{{14105059858245701248ull, 2293682052721175642ull,
+ 16491592247088619103ull, 3616504613730654097ull}},
+{{8407952785952350752ull, 16702160621183633265ull,
+ 6779432253578610166ull, 4520630767163317622ull}},
+{{16784185537288688980ull, 5827164369812382886ull,
+ 18072203213768795066ull, 2825394229477073513ull}},
+{{11756859884756085417ull, 16507327499120254416ull,
+ 8755195961928830120ull, 3531742786846341892ull}},
+{{14696074855945106771ull, 2187415300190766404ull,
+ 10943994952411037651ull, 4414678483557927365ull}},
+{{18408418821820467540ull, 17508035627115086666ull,
+ 9145839854470592483ull, 2759174052223704603ull}},
+{{13787151490420808617ull, 17273358515466470429ull,
+ 6820613799660852700ull, 3448967565279630754ull}},
+{{3398881307743847059ull, 3144954070623536421ull,
+ 17749139286430841684ull, 4311209456599538442ull}},
+{{4430143826553598364ull, 11188968330994486071ull,
+ 15704898072446663956ull, 2694505910374711526ull}},
+{{925993764764610051ull, 13986210413743107589ull,
+ 10407750553703554137ull, 3368132387968389408ull}},
+{{5769178224383150468ull, 3647704961896720774ull,
+ 13009688192129442672ull, 4210165484960486760ull}},
+{{17440794445521632755ull, 2279815601185450483ull,
+ 8131055120080901670ull, 2631353428100304225ull}},
+{{17189307038474653039ull, 12073141538336588912ull,
+ 14775504918528514991ull, 3289191785125380281ull}},
+{{3039889724383764683ull, 10479740904493348237ull,
+ 4634323092878480027ull, 4111489731406725352ull}},
+{{4205774086953546879ull, 4243995056094648696ull,
+ 2896451933049050017ull, 2569681082129203345ull}},
+{{5257217608691933599ull, 9916679838545698774ull,
+ 8232250934738700425ull, 3212101352661504181ull}},
+{{15794894047719692806ull, 17007535816609511371ull,
+ 14901999686850763435ull, 4015126690826880226ull}},
+{{7565965770611114052ull, 8323866876167250655ull,
+ 13925435822709115051ull, 2509454181766800141ull}},
+{{4845771194836504661ull, 5793147576781675415ull,
+ 3571736723104230102ull, 3136817727208500177ull}},
+{{1445527975118242922ull, 16464806507831870077ull,
+ 9076356922307675531ull, 3921022159010625221ull}},
+{{3209297993662595778ull, 7984661058181224846ull,
+ 7978566085655991159ull, 2450638849381640763ull}},
+{{13234994528933020531ull, 5369140304299143153ull,
+ 5361521588642601045ull, 3063298561727050954ull}},
+{{2708685105884111951ull, 11323111398801316846ull,
+ 15925274022658027114ull, 3829123202158813692ull}},
+{{15527986246459733682ull, 11688630642678210932ull,
+ 729924227306491138ull, 2393202001349258558ull}},
+{{963238734365115486ull, 5387416266492987858ull,
+ 10135777320987889731ull, 2991502501686573197ull}},
+{{10427420454811170166ull, 2122584314688846918ull,
+ 17281407669662250068ull, 3739378127108216496ull}},
+{{1905451765829593450ull, 10549987233535305132ull,
+ 10800879793538906292ull, 2337111329442635310ull}},
+{{2381814707286991812ull, 13187484041919131415ull,
+ 4277727705068857057ull, 2921389161803294138ull}},
+{{16812326439390903477ull, 2649296997116750556ull,
+ 14570531668190847130ull, 3651736452254117672ull}},
+{{2568663975529077730ull, 12534993283250714004ull,
+ 18213164585238558912ull, 4564670565317647090ull}},
+{{10828787021560449389ull, 7834370802031696252ull,
+ 15994913884201487224ull, 2852919103323529431ull}},
+{{13535983776950561737ull, 9792963502539620315ull,
+ 15381956336824471126ull, 3566148879154411789ull}},
+{{12308293702760814267ull, 3017832341319749586ull,
+ 5392387365748425196ull, 4457686098943014737ull}},
+{{12304369582652896821ull, 11109517250179619299ull,
+ 14899457149661235507ull, 2786053811839384210ull}},
+{{10768775959888733122ull, 9275210544297136220ull,
+ 9400949400221768576ull, 3482567264799230263ull}},
+{{13460969949860916402ull, 11594013180371420275ull,
+ 7139500731849822816ull, 4353209080999037829ull}},
+{{6107263209449378800ull, 7246258237732137672ull,
+ 6768030966619833212ull, 2720755675624398643ull}},
+{{7634079011811723499ull, 9057822797165172090ull,
+ 3848352689847403611ull, 3400944594530498304ull}},
+{{319226727909878566ull, 6710592478029077209ull, 4810440862309254514ull,
+ 4251180743163122880ull}},
+{{11728731751012143864ull, 8805806317195561159ull,
+ 3006525538943284071ull, 2656987964476951800ull}},
+{{10049228670337791926ull, 6395571878067063545ull,
+ 3758156923679105089ull, 3321234955596189750ull}},
+{{17173221856349627811ull, 12606150866011217335ull,
+ 13921068191453657169ull, 4151543694495237187ull}},
+{{17650792687859599238ull, 961315263615928978ull,
+ 6394824610444841779ull, 2594714809059523242ull}},
+{{12840118822969723240ull, 15036702134802074935ull,
+ 17216902799910828031ull, 3243393511324404052ull}},
+{{11438462510284766145ull, 14184191650075205765ull,
+ 3074384426178983423ull, 4054241889155505066ull}},
+{{9454882078141672793ull, 15782648808938085459ull,
+ 6533176284789252543ull, 2533901180722190666ull}},
+{{7206916579249703087ull, 15116624992745218920ull,
+ 17389842392841341487ull, 3167376475902738332ull}},
+{{9008645724062128859ull, 14284095222504135746ull,
+ 3290558917342125243ull, 3959220594878422916ull}},
+{{10242089595966218441ull, 6621716504851390889ull,
+ 11279971360193604085ull, 2474512871799014322ull}},
+{{17414298013385160955ull, 12888831649491626515ull,
+ 4876592163387229298ull, 3093141089748767903ull}},
+{{17156186498304063290ull, 6887667525009757336ull,
+ 1484054185806648719ull, 3866426362185959879ull}},
+{{10722616561440039556ull, 11222321230772180191ull,
+ 7845062893770237305ull, 2416516476366224924ull}},
+{{8791584683372661541ull, 192843483183061527ull, 9806328617212796632ull,
+ 3020645595457781155ull}},
+{{6377794835788439022ull, 241054353978826909ull, 7646224753088607886ull,
+ 3775806994322226444ull}},
+{{6291964781581468341ull, 13985717026518930530ull,
+ 14002262507535155736ull, 2359879371451391527ull}},
+{{17088328013831611234ull, 17482146283148663162ull,
+ 12891142115991556766ull, 2949849214314239409ull}},
+{{12137037980434738235ull, 12629310817081053145ull,
+ 2278869589707282246ull, 3687311517892799262ull}},
+{{1336239420261259081ull, 6563266484496540624ull,
+ 12071959023988878616ull, 4609139397365999077ull}},
+{{835149637663286926ull, 4102041552810337890ull, 9850817399206743087ull,
+ 2880712123353749423ull}},
+{{10267309083933884466ull, 515865922585534458ull,
+ 7701835730581040955ull, 3600890154192186779ull}},
+{{3610764318062579774ull, 14479890458514081785ull,
+ 5015608644798913289ull, 4501112692740233474ull}},
+{{13785942744857582119ull, 2132402508930219259ull,
+ 7746441421426708710ull, 2813195432962645921ull}},
+{{12620742412644589744ull, 11888875173017549882ull,
+ 14294737795210773791ull, 3516494291203307401ull}},
+{{6552555978950961372ull, 10249407947844549449ull,
+ 4033364188731303527ull, 4395617864004134252ull}},
+{{15624562532912820618ull, 13323408995043925261ull,
+ 11744224654811840512ull, 2747261165002583907ull}},
+{{5695645110858862060ull, 16654261243804906577ull,
+ 10068594800087412736ull, 3434076456253229884ull}},
+{{11731242407000965479ull, 2371082481046581605ull,
+ 12585743500109265921ull, 4292595570316537355ull}},
+{{9637869513589297377ull, 13011141596722583263ull,
+ 5560246678354597248ull, 2682872231447835847ull}},
+{{7435650873559233817ull, 16263926995903229079ull,
+ 2338622329515858656ull, 3353590289309794809ull}},
+{{4682877573521654367ull, 1883164671169484733ull,
+ 7534963930322211225ull, 4191987861637243511ull}},
+{{5232641492664727931ull, 12706192965549397718ull,
+ 11626881484092463871ull, 2619992413523277194ull}},
+{{15764173902685685722ull, 11271055188509359243ull,
+ 5310229818260804031ull, 3274990516904096493ull}},
+{{15093531359929719249ull, 9477132967209311150ull,
+ 11249473291253392943ull, 4093738146130120616ull}},
+{{4821771081528686627ull, 12840737132146901325ull,
+ 7030920807033370589ull, 2558586341331325385ull}},
+{{10638899870338246187ull, 2215863359901462944ull,
+ 13400337027219101141ull, 3198232926664156731ull}},
+{{13298624837922807734ull, 7381515218304216584ull,
+ 12138735265596488522ull, 3997791158330195914ull}},
+{{8311640523701754834ull, 9225133029867523269ull,
+ 12198395559425193230ull, 2498619473956372446ull}},
+{{15001236673054581446ull, 2308044250479628278ull,
+ 6024622412426715730ull, 3123274342445465558ull}},
+{{9528173804463450999ull, 12108427349954311156ull,
+ 16754150052388170470ull, 3904092928056831947ull}},
+{{15178480664644432683ull, 2956081075294056568ull,
+ 8165500773528912592ull, 2440058080035519967ull}},
+{{526356757095989237ull, 3695101344117570711ull, 5595189948483752836ull,
+ 3050072600044399959ull}},
+{{14493004001652150259ull, 4618876680146963388ull,
+ 2382301417177303141ull, 3812590750055499949ull}},
+{{18281499537887369720ull, 5192640934305546069ull,
+ 3794781394949508415ull, 2382869218784687468ull}},
+{{9016816367077048438ull, 1879115149454544683ull,
+ 4743476743686885519ull, 2978586523480859335ull}},
+{{6659334440418922643ull, 16183951992100344566ull,
+ 1317659911181218994ull, 3723233154351074169ull}},
+{{17997142080543990364ull, 14726656013490103257ull,
+ 12352752490556731631ull, 2327020721469421355ull}},
+{{8661369545397824243ull, 13796633998435241168ull,
+ 10829254594768526635ull, 2908775901836776694ull}},
+{{10826711931747280304ull, 12634106479616663556ull,
+ 4313196206605882486ull, 3635969877295970868ull}},
+{{13533389914684100379ull, 6569261062666053637ull,
+ 5391495258257353108ull, 4544962346619963585ull}},
+{{10764211705891256689ull, 13329160201021059331ull,
+ 14898899582479315452ull, 2840601466637477240ull}},
+{{8843578613936682957ull, 16661450251276324164ull,
+ 176880404389592699ull, 3550751833296846551ull}},
+{{11054473267420853697ull, 16215126795668017301ull,
+ 14056158560769154586ull, 4438439791621058188ull}},
+{{9214888801351727513ull, 14746140265719898717ull,
+ 18008471137335497424ull, 2774024869763161367ull}},
+{{16130297020117047295ull, 18432675332149873396ull,
+ 17898902903241983876ull, 3467531087203951709ull}},
+{{1716127201436757502ull, 4594100091477790130ull,
+ 8538570573770316134ull, 4334413859004939637ull}},
+{{5684265519325361343ull, 16706370612455782543ull,
+ 7642449617820141535ull, 2709008661878087273ull}},
+{{2493645880729313775ull, 16271277247142340275ull,
+ 14164748040702564823ull, 3386260827347609091ull}},
+{{16952115406193805930ull, 15727410540500537439ull,
+ 13094249032450818125ull, 4232826034184511364ull}},
+{{17512601156512210563ull, 12135474597026529851ull,
+ 17407277682136537136ull, 2645516271365319602ull}},
+{{17279065427212875299ull, 15169343246283162314ull,
+ 12535725065815895612ull, 3306895339206649503ull}},
+{{12375459747161318316ull, 514934984144401277ull,
+ 11057970313842481612ull, 4133619174008311879ull}},
+{{10040505351189517900ull, 9545206401945026606ull,
+ 13828760473792632863ull, 2583511983755194924ull}},
+{{3327259652132121566ull, 7319821984003895354ull,
+ 17285950592240791079ull, 3229389979693993655ull}},
+{{13382446602019927766ull, 4538091461577481288ull,
+ 16995752221873600945ull, 4036737474617492069ull}},
+{{8364029126262454854ull, 14365522209554395565ull,
+ 12928188147884694542ull, 2522960921635932543ull}},
+{{15066722426255456471ull, 8733530725088218648ull,
+ 11548549166428480274ull, 3153701152044915679ull}},
+{{386658959109768973ull, 1693541369505497503ull, 9824000439608212439ull,
+ 3942126440056144599ull}},
+{{7159190877084687464ull, 7975992383582017795ull,
+ 13057529302396214630ull, 2463829025035090374ull}},
+{{4337302577928471426ull, 746618442622746436ull, 7098539591140492480ull,
+ 3079786281293862968ull}},
+{{5421628222410589282ull, 933273053278433045ull, 8873174488925615600ull,
+ 3849732851617328710ull}},
+{{5694360648220312254ull, 583295658299020653ull, 934048037151121846ull,
+ 2406083032260830444ull}},
+{{11729636828702778221ull, 9952491609728551624ull,
+ 1167560046438902307ull, 3007603790326038055ull}},
+{{14662046035878472776ull, 7828928493733301626ull,
+ 15294508113330791596ull, 3759504737907547568ull}},
+{{13775464790851433389ull, 14116452345438089324ull,
+ 9559067570831744747ull, 2349690461192217230ull}},
+{{17219330988564291736ull, 13033879413370223751ull,
+ 2725462426684905126ull, 2937113076490271538ull}},
+{{16912477717277976766ull, 7068977229858003881ull,
+ 12630200070210907216ull, 3671391345612839422ull}},
+{{7305539091315307246ull, 8836221537322504852ull,
+ 6564378050908858212ull, 4589239182016049278ull}},
+{{13789333968926842837ull, 14746010497681341340ull,
+ 17937794337100200094ull, 2868274488760030798ull}},
+{{17236667461158553546ull, 9209141085246900867ull,
+ 13198870884520474310ull, 3585343110950038498ull}},
+{{16934148308020804028ull, 2288054319703850276ull,
+ 7275216568795817080ull, 4481678888687548123ull}},
+{{1360470655658226710ull, 1430033949814906423ull,
+ 2241167346283691723ull, 2801049305429717577ull}},
+{{15535646374854947099ull, 15622600492550796740ull,
+ 7413145201282002557ull, 3501311631787146971ull}},
+{{972813894859132258ull, 5693192560406332214ull, 4654745483175115293ull,
+ 4376639539733933714ull}},
+{{14443066739569121373ull, 5864088359467651585ull,
+ 7520901945411834962ull, 2735399712333708571ull}},
+{{4218775369179238005ull, 16553482486189340290ull,
+ 4789441413337405798ull, 3419249640417135714ull}},
+{{14496841248328823314ull, 11468481070881899554ull,
+ 15210173803526533056ull, 4274062050521419642ull}},
+{{13672211798632902475ull, 7167800669301187221ull,
+ 14118044645631471064ull, 2671288781575887276ull}},
+{{3255206693008964382ull, 8959750836626484027ull,
+ 17647555807039338830ull, 3339110976969859095ull}},
+{{17904066421543369189ull, 1976316508928329225ull,
+ 17447758740371785634ull, 4173888721212323869ull}},
+{{4272512485823523887ull, 5846883836507593670ull,
+ 13210692221946059973ull, 2608680450757702418ull}},
+{{14564012644134180667ull, 11920290814061879991ull,
+ 7289993240577799158ull, 3260850563447128023ull}},
+{{13593329786740337930ull, 5676991480722574181ull,
+ 4500805532294861044ull, 4076063204308910029ull}},
+{{10801674125926405158ull, 12771491712306384671ull,
+ 5118846466897982104ull, 2547539502693068768ull}},
+{{8890406638980618544ull, 15964364640382980839ull,
+ 6398558083622477630ull, 3184424378366335960ull}},
+{{6501322280298385276ull, 10732083763623950241ull,
+ 7998197604528097038ull, 3980530472957919950ull}},
+{{15592541471254960558ull, 2095866333837580996ull,
+ 387187484402672745ull, 2487831545598699969ull}},
+{{1043932765359149081ull, 7231518935724364150ull,
+ 5095670373930728835ull, 3109789431998374961ull}},
+{{10528287993553712159ull, 4427712651228067283ull,
+ 10981273985840798948ull, 3887236789997968701ull}},
+{{4274336986757376147ull, 11990692443872317860ull,
+ 9169139250364193294ull, 2429522993748730438ull}},
+{{5342921233446720184ull, 5764993517985621517ull,
+ 2238052026100465810ull, 3036903742185913048ull}},
+{{11290337560235788134ull, 16429613934336802704ull,
+ 2797565032625582262ull, 3796129677732391310ull}},
+{{7056460975147367584ull, 5656822690533113786ull,
+ 15583536200673152626ull, 2372581048582744568ull}},
+{{18043948255788985288ull, 16294400400021168040ull,
+ 1032676177131889166ull, 2965726310728430711ull}},
+{{4108191246026679994ull, 11144628463171684243ull,
+ 15125903276697025170ull, 3707157888410538388ull}},
+{{261776519552981044ull, 11577078807909690556ull, 230317511080864923ull,
+ 2316973680256586493ull}},
+{{327220649441226305ull, 9859662491459725291ull, 4899582907278469058ull,
+ 2896217100320733116ull}},
+{{14244083867083696593ull, 3101206077469880805ull,
+ 6124478634098086323ull, 3620271375400916395ull}},
+{{3970046778572457030ull, 17711565652119514719ull,
+ 3043912274195219999ull, 4525339219251145494ull}},
+{{9398808264248867500ull, 17987257560215778555ull,
+ 15737503226654176211ull, 2828337012031965933ull}},
+{{7136824311883696470ull, 17872385931842335290ull,
+ 5836820978035556552ull, 3535421265039957417ull}},
+{{18144402426709396396ull, 3893738341093367496ull,
+ 11907712240971833595ull, 4419276581299946771ull}},
+{{11340251516693372748ull, 127743453969660733ull,
+ 5136477141393702045ull, 2762047863312466732ull}},
+{{340256340584552222ull, 4771365335889463821ull, 6420596426742127556ull,
+ 3452559829140583415ull}},
+{{5037006444158078182ull, 5964206669861829776ull,
+ 3414059515000271541ull, 4315699786425729269ull}},
+{{3148129027598798864ull, 6033472177877337562ull,
+ 4439630206088863665ull, 2697312366516080793ull}},
+{{13158533321353274388ull, 12153526240774059856ull,
+ 10161223776038467485ull, 3371640458145100991ull}},
+{{16448166651691592985ull, 1356849745685411108ull,
+ 8089843701620696453ull, 4214550572681376239ull}},
+{{1056732120452469808ull, 3153874100267075895ull,
+ 11973681341154017139ull, 2634094107925860149ull}},
+{{15155973205847750971ull, 17777400680616008580ull,
+ 1132043621160357711ull, 3292617634907325187ull}},
+{{498222433600137098ull, 17610064832342622822ull,
+ 15250112581732610851ull, 4115772043634156483ull}},
+{{14146447076282249398ull, 8700447511000445311ull,
+ 7225477354369187830ull, 2572357527271347802ull}},
+{{13071372826925423844ull, 1652187351895780831ull,
+ 18255218729816260596ull, 3215446909089184752ull}},
+{{11727530015229391901ull, 2065234189869726039ull,
+ 4372279338560774129ull, 4019308636361480941ull}},
+{{14247235287159451794ull, 12819986414737048534ull,
+ 5038517595814177782ull, 2512067897725925588ull}},
+{{8585672072094538935ull, 6801610981566534860ull,
+ 6298146994767722228ull, 3140084872157406985ull}},
+{{10732090090118173668ull, 8502013726958168575ull,
+ 12484369761887040689ull, 3925106090196758731ull}},
+{{13625085333964940399ull, 16842973625417325119ull,
+ 5496888091965706478ull, 2453191306372974207ull}},
+{{12419670649028787594ull, 11830344994916880591ull,
+ 2259424096529745194ull, 3066489132966217759ull}},
+{{10912902292858596589ull, 5564559206791324931ull,
+ 16659338175944345205ull, 3833111416207772198ull}},
+{{4514720923822928916ull, 5783692513458272034ull,
+ 5800400341537827849ull, 2395694635129857624ull}},
+{{14866773191633436953ull, 11841301660250227946ull,
+ 7250500426922284811ull, 2994618293912322030ull}},
+{{9360094452687020383ull, 10189941056885397029ull,
+ 18286497570507631822ull, 3743272867390402537ull}},
+{{8155902042143081692ull, 1757027142125985239ull,
+ 4511531953926188033ull, 2339545542119001586ull}},
+{{5583191534251464211ull, 6807969946084869453ull,
+ 14862786979262510849ull, 2924431927648751982ull}},
+{{11590675436241718167ull, 13121648451033474720ull,
+ 9355111687223362753ull, 3655539909560939978ull}},
+{{14488344295302147709ull, 2567002508509679688ull,
+ 2470517572174427634ull, 4569424886951174973ull}},
+{{9055215184563842318ull, 6216062586245937709ull,
+ 3849916491822711223ull, 2855890554344484358ull}},
+{{15930704999132190802ull, 3158392214380034232ull,
+ 14035767651633164837ull, 3569863192930605447ull}},
+{{1466637175205686886ull, 8559676286402430695ull,
+ 12933023546114068142ull, 4462328991163256809ull}},
+{{7834177262144636160ull, 738111660574131280ull, 1165610688680210733ull,
+ 2788955619477035506ull}},
+{{9792721577680795200ull, 5534325594145052004ull,
+ 10680385397705039224ull, 3486194524346294382ull}},
+{{12240901972100993999ull, 6917906992681315005ull,
+ 4127109710276523222ull, 4357743155432867978ull}},
+{{9956406741776815202ull, 18158749925707985590ull,
+ 7191129587350214917ull, 2723589472145542486ull}},
+{{3222136390366243194ull, 8863379351852818276ull,
+ 18212284021042544455ull, 3404486840181928107ull}},
+{{4027670487957803993ull, 6467538171388634941ull,
+ 18153669007875792665ull, 4255608550227410134ull}},
+{{4823137064187321448ull, 15571426403186366598ull,
+ 6734357111494982511ull, 2659755343892131334ull}},
+{{15252293367088927617ull, 14852596985555570343ull,
+ 17641318426223503947ull, 3324694179865164167ull}},
+{{14453680690433771617ull, 13954060213517075025ull,
+ 17439962014351992030ull, 4155867724831455209ull}},
+{{2116021403880025405ull, 4109601615020783987ull,
+ 3982447231328913163ull, 2597417328019659506ull}},
+{{16480084810132195468ull, 525316000348592079ull,
+ 14201431076015917262ull, 3246771660024574382ull}},
+{{15988419994237856431ull, 9880017037290515907ull,
+ 8528416808165120769ull, 4058464575030717978ull}},
+{{7686919487184966318ull, 17704225694375042202ull,
+ 9941946523530588384ull, 2536540359394198736ull}},
+{{385277322126432089ull, 3683538044259251137ull,
+ 12427433154413235481ull, 3170675449242748420ull}},
+{{5093282671085428015ull, 9216108573751451825ull,
+ 15534291443016544351ull, 3963344311553435525ull}},
+{{14712516715496862270ull, 12677596886235739246ull,
+ 12014775161099034171ull, 2477090194720897203ull}},
+{{9167273857516302029ull, 11235310089367286154ull,
+ 10406782932946404810ull, 3096362743401121504ull}},
+{{2235720285040601728ull, 4820765574854331885ull,
+ 13008478666183006013ull, 3870453429251401880ull}},
+{{3703168187364070032ull, 5318821493497651380ull,
+ 8130299166364378758ull, 2419033393282126175ull}},
+{{4628960234205087540ull, 15871898903726840033ull,
+ 5551187939528085543ull, 3023791741602657719ull}},
+{{10397886311183747329ull, 15228187611231162137ull,
+ 2327298905982719025ull, 3779739677003322149ull}},
+{{18027893990558311841ull, 2600088229378394479ull,
+ 3760404825452893343ull, 2362337298127076343ull}},
+{{17923181469770501897ull, 17085168342005156811ull,
+ 88820013388728774ull, 2952921622658845429ull}},
+{{17792290818785739467ull, 12133088390651670206ull,
+ 4722711035163298872ull, 3691152028323556786ull}},
+{{6508495743313699263ull, 7583180244157293879ull,
+ 7563380415404449699ull, 2306970017702222991ull}},
+{{3523933660714736175ull, 4867289286769229445ull,
+ 4842539500828174220ull, 2883712522127778739ull}},
+{{9016603094320808122ull, 6084111608461536806ull,
+ 1441488357607829871ull, 3604640652659723424ull}},
+{{2047381831046234345ull, 2993453492149533104ull,
+ 1801860447009787339ull, 4505800815824654280ull}},
+{{1279613644403896466ull, 18011809497089315854ull,
+ 1126162779381117086ull, 2816125509890408925ull}},
+{{10822889092359646390ull, 13291389834506869009ull,
+ 6019389492653784262ull, 3520156887363011156ull}},
+{{18140297383876945891ull, 7390865256278810453ull,
+ 7524236865817230328ull, 4400196109203763945ull}},
+{{13643528874136785134ull, 4619290785174256533ull,
+ 16231863087204238715ull, 2750122568252352465ull}},
+{{3219353037388817706ull, 1162427463040432763ull,
+ 6454770803723134682ull, 3437653210315440582ull}},
+{{17859249352018185844ull, 10676406365655316761ull,
+ 17291835541508694160ull, 4297066512894300727ull}},
+{{4244501817370284297ull, 6672753978534572976ull,
+ 17724926241084015706ull, 2685666570558937954ull}},
+{{5305627271712855371ull, 17564314510022992028ull,
+ 12932785764500243824ull, 3357083213198672443ull}},
+{{6632034089641069213ull, 3508649063819188419ull,
+ 11554296187197916877ull, 4196354016498340554ull}},
+{{1839178296811974306ull, 4498748674100686714ull,
+ 11833121135426085952ull, 2622721260311462846ull}},
+{{11522344907869743691ull, 5623435842625858392ull,
+ 5568029382427831632ull, 3278401575389328558ull}},
+{{14402931134837179614ull, 7029294803282322990ull,
+ 16183408764889565348ull, 4098001969236660697ull}},
+{{4390145940845849355ull, 13616681288906227677ull,
+ 3197101450414896486ull, 2561251230772912936ull}},
+{{10099368444484699597ull, 7797479574278008788ull,
+ 3996376813018620608ull, 3201564038466141170ull}},
+{{12624210555605874496ull, 9746849467847510985ull,
+ 14218843053128051568ull, 4001955048082676462ull}},
+{{972602569612589704ull, 6091780917404694366ull, 4275090889777644326ull,
+ 2501221905051672789ull}},
+{{10439125248870512938ull, 16838098183610643765ull,
+ 9955549630649443311ull, 3126527381314590986ull}},
+{{17660592579515529077ull, 16435936711085916802ull,
+ 3221065001457028331ull, 3908159226643238733ull}},
+{{15649556380624593577ull, 7966617435215004049ull,
+ 4319008635124336659ull, 2442599516652024208ull}},
+{{5726887420498578259ull, 5346585775591367158ull,
+ 5398760793905420824ull, 3053249395815030260ull}},
+{{16381981312477998632ull, 6683232219489208947ull,
+ 6748450992381776030ull, 3816561744768787825ull}},
+{{7932895311085055193ull, 18012078192462919304ull,
+ 15746996916307079778ull, 2385351090480492390ull}},
+{{9916119138856318992ull, 13291725703723873322ull,
+ 10460374108529073915ull, 2981688863100615488ull}},
+{{3171776886715622931ull, 12002971111227453749ull,
+ 13075467635661342394ull, 3727111078875769360ull}},
+{{4288203563410958284ull, 12113542962944546497ull,
+ 8172167272288338996ull, 2329444424297355850ull}},
+{{9971940472691085759ull, 15141928703680683121ull,
+ 991837053505647937ull, 2911805530371694813ull}},
+{{17076611609291245103ull, 5092352824318690189ull,
+ 5851482335309447826ull, 3639756912964618516ull}},
+{{7510706456331892666ull, 15588813067253138545ull,
+ 7314352919136809782ull, 4549696141205773145ull}},
+{{16223406581275902677ull, 5131322148605823686ull,
+ 16100685620528975874ull, 2843560088253608215ull}},
+{{11055886189740102538ull, 15637524722612055416ull,
+ 15514171007233831938ull, 3554450110317010269ull}},
+{{13819857737175128172ull, 10323533866410293462ull,
+ 5557655703760126211ull, 4443062637896262837ull}},
+{{4025725067307067204ull, 4146365657292739462ull,
+ 5779377824063772834ull, 2776914148685164273ull}},
+{{14255528370988609813ull, 14406329108470700135ull,
+ 11835908298507103946ull, 3471142685856455341ull}},
+{{13207724445308374362ull, 8784539348733599361ull,
+ 959827317851716221ull, 4338928357320569177ull}},
+{{1337298750676652120ull, 7796180102172193553ull,
+ 12129107119725792398ull, 2711830223325355735ull}},
+{{6283309456773203054ull, 521853090860466133ull,
+ 10549697881229852594ull, 3389787779156694669ull}},
+{{12465822839393891721ull, 9875688400430358474ull,
+ 17798808369964703646ull, 4237234723945868336ull}},
+{{12402825293048570230ull, 1560619231841586142ull,
+ 11124255231227939779ull, 2648271702466167710ull}},
+{{6280159579455936979ull, 15785832095084146390ull,
+ 4681947002180148915ull, 3310339628082709638ull}},
+{{17073571511174697032ull, 15120604100427795083ull,
+ 15075805789579961952ull, 4137924535103387047ull}},
+{{8365139185270491693ull, 9450377562767371927ull,
+ 16339907646128558076ull, 2586202834439616904ull}},
+{{5844737963160726713ull, 11812971953459214909ull,
+ 1978140483951145979ull, 3232753543049521131ull}},
+{{11917608472378296295ull, 10154528923396630732ull,
+ 16307733660221096186ull, 4040941928811901413ull}},
+{{16671877332091210992ull, 10958266595550282111ull,
+ 12498176546851879068ull, 2525588705507438383ull}},
+{{16228160646686625836ull, 13697833244437852639ull,
+ 11011034665137460931ull, 3156985881884297979ull}},
+{{15673514789930894391ull, 12510605537119927895ull,
+ 9152107312994438260ull, 3946232352355372474ull}},
+{{16713475771347890851ull, 17042500497554730742ull,
+ 10331753089048911816ull, 2466395220222107796ull}},
+{{11668472677330087755ull, 2856381548233861812ull,
+ 12914691361311139771ull, 3082994025277634745ull}},
+{{14585590846662609694ull, 17405534990574490977ull,
+ 2308306146356761001ull, 3853742531597043432ull}},
+{{2198465251523049203ull, 3960930341467975005ull,
+ 1442691341472975626ull, 2408589082248152145ull}},
+{{7359767582831199407ull, 14174534963689744564ull,
+ 6415050195268607436ull, 3010736352810190181ull}},
+{{9199709478538999259ull, 17718168704612180705ull,
+ 12630498762513147199ull, 3763420441012737726ull}},
+{{17279033470155344297ull, 17991384468023694796ull,
+ 3282375708143329095ull, 2352137775632961079ull}},
+{{3152047763984628755ull, 17877544566602230592ull,
+ 17938027690461325081ull, 2940172219541201348ull}},
+{{3940059704980785944ull, 8511872652970624528ull,
+ 3975790539367104736ull, 3675215274426501686ull}},
+{{4925074631225982430ull, 10639840816213280660ull,
+ 14193110211063656728ull, 4594019093033127107ull}},
+{{12301543681371014827ull, 6649900510133300412ull,
+ 6564850872701091503ull, 2871261933145704442ull}},
+{{15376929601713768534ull, 3700689619239237611ull,
+ 17429435627731140187ull, 3589077416432130552ull}},
+{{14609475983714822763ull, 14176005621659110ull, 3340050460954373618ull,
+ 4486346770540163191ull}},
+{{4519236471394376323ull, 4620546021940924848ull,
+ 9005060565737565367ull, 2803966731587601994ull}},
+{{5649045589242970404ull, 1163996508998768156ull,
+ 2032953670317180901ull, 3504958414484502493ull}},
+{{7061306986553713004ull, 6066681654675848099ull,
+ 7152878106323864030ull, 4381198018105628116ull}},
+{{2107473857382376676ull, 17626734089454568774ull,
+ 13693920853307190826ull, 2738248761316017572ull}},
+{{11857714358582746653ull, 12810045574963435159ull,
+ 17117401066633988533ull, 3422810951645021965ull}},
+{{10210456929801045412ull, 2177498913422130237ull,
+ 7561693278010321955ull, 4278513689556277457ull}},
+{{8687378590339347335ull, 17501837885384689062ull,
+ 16255273344824920981ull, 2674071055972673410ull}},
+{{1635851201069408360ull, 8042239301448697616ull,
+ 11095719644176375419ull, 3342588819965841763ull}},
+{{2044814001336760450ull, 5441113108383484116ull,
+ 9257963536793081370ull, 4178236024957302204ull}},
+{{10501380787690251089ull, 8012381711167065476ull,
+ 15009599247350451664ull, 2611397515598313877ull}},
+{{13126725984612813862ull, 10015477138958831845ull,
+ 4926941003905900868ull, 3264246894497892347ull}},
+{{2573349425483853615ull, 12519346423698539807ull,
+ 1546990236454988181ull, 4080308618122365434ull}},
+{{8525872418568490365ull, 10130434524025281331ull,
+ 5578554916211755517ull, 2550192886326478396ull}},
+{{6045654504783225053ull, 17274729173458989568ull,
+ 6973193645264694396ull, 3187741107908097995ull}},
+{{7557068130979031316ull, 3146667393114185344ull,
+ 4104806038153480092ull, 3984676384885122494ull}},
+{{4723167581861894573ull, 11190039157551141648ull,
+ 16400561829128088769ull, 2490422740553201558ull}},
+{{5903959477327368216ull, 152490891656763348ull,
+ 11277330249555335154ull, 3113028425691501948ull}},
+{{7379949346659210269ull, 9413985651425729993ull,
+ 14096662811944168942ull, 3891285532114377435ull}},
+{{16141683387730476179ull, 1272055013713693341ull,
+ 6504571248251411637ull, 2432053457571485897ull}},
+{{6342046179380931511ull, 6201754785569504581ull,
+ 12742400078741652450ull, 3040066821964357371ull}},
+{{12539243742653552293ull, 16975565518816656534ull,
+ 11316314079999677658ull, 3800083527455446714ull}},
+{{3225341320731082279ull, 15221414467687798238ull,
+ 11684382318427186440ull, 2375052204659654196ull}},
+{{13255048687768628657ull, 580024010900196181ull,
+ 14605477898033983051ull, 2968815255824567745ull}},
+{{2733752804428622109ull, 14560088068907408939ull,
+ 4421789317260315101ull, 3711019069780709682ull}},
+{{17849496567263746482ull, 11405898052280824538ull,
+ 7375304341715084842ull, 2319386918612943551ull}},
+{{13088498672224907295ull, 5034000528496254865ull,
+ 4607444408716468149ull, 2899233648266179439ull}},
+{{2525565284998970406ull, 10904186679047706486ull,
+ 1147619492468197282ull, 3624042060332724299ull}},
+{{12380328643103488816ull, 4406861311954857299ull,
+ 15269582420867410315ull, 4530052575415905373ull}},
+{{5431862392725986558ull, 448445310758091860ull,
+ 11849332022255825399ull, 2831282859634940858ull}},
+{{6789827990907483197ull, 14395614693729778537ull,
+ 5588292990965005940ull, 3539103574543676073ull}},
+{{13098971007061741900ull, 17994518367162223171ull,
+ 11597052257133645329ull, 4423879468179595091ull}},
+{{5881013870199894736ull, 4329044951835307626ull,
+ 4942314651494834379ull, 2764924667612246932ull}},
+{{16574639374604644228ull, 799620171366746628ull,
+ 6177893314368542974ull, 3456155834515308665ull}},
+{{2271555144546253669ull, 10222897251063209094ull,
+ 12334052661388066621ull, 4320194793144135831ull}},
+{{15254780020623572255ull, 8695153791128199635ull,
+ 14626311941008623494ull, 2700121745715084894ull}},
+{{14456789007352077415ull, 1645570202055473736ull,
+ 9059517889406003560ull, 3375152182143856118ull}},
+{{18070986259190096768ull, 2056962752569342170ull,
+ 2101025324902728642ull, 4218940227679820148ull}},
+{{15906052430421198384ull, 5897287738783226760ull,
+ 10536512864918981209ull, 2636837642299887592ull}},
+{{1435821464316946364ull, 11983295691906421355ull,
+ 13170641081148726511ull, 3296047052874859490ull}},
+{{15629834885678346667ull, 10367433596455638789ull,
+ 7239929314581132331ull, 4120058816093574363ull}},
+{{12074489812762660619ull, 4173802988571080291ull,
+ 2219112812399513755ull, 2575036760058483977ull}},
+{{10481426247525937870ull, 605567717286462460ull,
+ 7385577033926780098ull, 3218795950073104971ull}},
+{{13101782809407422337ull, 9980331683462853883ull,
+ 4620285273981087218ull, 4023494937591381214ull}},
+{{5882771246665945009ull, 10849393320591671581ull,
+ 16722736351520343223ull, 2514684335994613258ull}},
+{{11965150076759819165ull, 8950055632312201572ull,
+ 11680048402545653221ull, 3143355419993266573ull}},
+{{14956437595949773956ull, 15799255558817639869ull,
+ 765002447899902814ull, 3929194274991583217ull}},
+{{11653616506682302675ull, 5262848705833637014ull,
+ 12007341576005909019ull, 2455746421869739510ull}},
+{{5343648596498102535ull, 1966874863864658364ull,
+ 5785804933152610466ull, 3069683027337174388ull}},
+{{6679560745622628169ull, 11681965616685598763ull,
+ 7232256166440763082ull, 3837103784171467985ull}},
+{{1868882456800448654ull, 11912914528855887131ull,
+ 16049375150093946686ull, 2398189865107167490ull}},
+{{16171161126282724529ull, 5667771124215083105ull,
+ 10838346900762657550ull, 2997737331383959363ull}},
+{{6378893352571241950ull, 16308085942123629690ull,
+ 8936247607525934033ull, 3747171664229949204ull}},
+{{8598494363784414123ull, 3275024686186186700ull,
+ 14808526791558484579ull, 2341982290143718252ull}},
+{{10748117954730517653ull, 17928838913014897087ull,
+ 63914415738554107ull, 2927477862679647816ull}},
+{{8823461424985759162ull, 17799362622841233455ull, 79893019673192634ull,
+ 3659347328349559770ull}},
+{{6417640762804811049ull, 13025831241696766011ull,
+ 9323238311446266601ull, 4574184160436949712ull}},
+{{1705182467539312954ull, 1223615498419396901ull,
+ 5827023944653916626ull, 2858865100273093570ull}},
+{{6743164102851529096ull, 10752891409879021934ull,
+ 16507151967672171590ull, 3573581375341366962ull}},
+{{17652327165419187178ull, 4217742225494001609ull,
+ 11410567922735438680ull, 4466976719176708703ull}},
+{{4115175450745910130ull, 2636088890933751006ull,
+ 14049133979350731031ull, 2791860449485442939ull}},
+{{14367341350287163471ull, 17130169168949352469ull,
+ 12949731455761025884ull, 3489825561856803674ull}},
+{{4124118632576790626ull, 2965967387477138971ull,
+ 6963792282846506548ull, 4362281952321004593ull}},
+{{271731136146800190ull, 11077101654027987665ull,
+ 15881585222847536352ull, 2726426220200627870ull}},
+{{4951349938610888141ull, 13846377067534984581ull,
+ 10628609491704644632ull, 3408032775250784838ull}},
+{{10800873441690998080ull, 17307971334418730726ull,
+ 4062389827776029982ull, 4260040969063481048ull}},
+{{2138859882629485896ull, 6205796065584318800ull,
+ 2538993642360018739ull, 2662525605664675655ull}},
+{{2673574853286857370ull, 3145559063553010596ull,
+ 17008800108232187136ull, 3328157007080844568ull}},
+{{3341968566608571713ull, 3931948829441263245ull,
+ 2814256061580682304ull, 4160196258851055711ull}},
+{{4394573363344051273ull, 2457468018400789528ull,
+ 8676439066129008296ull, 2600122661781909819ull}},
+{{5493216704180064091ull, 3071835023000986910ull,
+ 6233862814233872466ull, 3250153327227387274ull}},
+{{16089892917079855921ull, 13063165815606009445ull,
+ 17015700554647116390ull, 4062691659034234092ull}},
+{{12362026082388603903ull, 3552792616326367999ull,
+ 1411440809799671936ull, 2539182286896396308ull}},
+{{10840846584558366974ull, 4440990770407959999ull,
+ 1764301012249589920ull, 3173977858620495385ull}},
+{{8939372212270570814ull, 5551238463009949999ull,
+ 6817062283739375304ull, 3967472323275619231ull}},
+{{12504636660310188615ull, 3469524039381218749ull,
+ 11178192954978191421ull, 2479670202047262019ull}},
+{{1795737770105572057ull, 8948591067653911341ull,
+ 9361055175295351372ull, 3099587752559077524ull}},
+{{6856358231059352975ull, 11185738834567389176ull,
+ 11701318969119189215ull, 3874484690698846905ull}},
+{{4285223894412095609ull, 13908615799245700091ull,
+ 395795328058411403ull, 2421552931686779316ull}},
+{{744843849587731607ull, 12774083730629737210ull, 494744160073014254ull,
+ 3026941164608474145ull}},
+{{10154426848839440317ull, 6744232626432395704ull,
+ 5230116218518655722ull, 3783676455760592681ull}},
+{{6346516780524650198ull, 8826831409947635219ull,
+ 14798037682642629586ull, 2364797784850370425ull}},
+{{3321459957228424844ull, 1810167225579768216ull,
+ 4662489048021123271ull, 2955997231062963032ull}},
+{{4151824946535531055ull, 16097767087256873982ull,
+ 5828111310026404088ull, 3694996538828703790ull}},
+{{16429948646866870621ull, 10061104429535546238ull,
+ 17477627624048666267ull, 2309372836767939868ull}},
+{{11314063771728812469ull, 7964694518492044894ull,
+ 3400290456351281218ull, 2886716045959924836ull}},
+{{4919207677806239778ull, 732496111260280310ull, 4250363070439101523ull,
+ 3608395057449906045ull}},
+{{15372381634112575530ull, 14750678194357514099ull,
+ 9924639856476264807ull, 4510493821812382556ull}},
+{{7301895512106665754ull, 16136702899114528168ull,
+ 15426271947152441312ull, 2819058638632739097ull}},
+{{9127369390133332193ull, 1724134550183608594ull,
+ 5447781878658387929ull, 3523823298290923872ull}},
+{{2185839700811889433ull, 6766854206156898647ull,
+ 6809727348322984911ull, 4404779122863654840ull}},
+{{8283678840648512752ull, 11146812906489143510ull,
+ 4256079592701865569ull, 2752986951789784275ull}},
+{{1131226513955865132ull, 98458077829265676ull, 708413472449944058ull,
+ 3441233689737230344ull}},
+{{1414033142444831414ull, 9346444634141357903ull, 885516840562430072ull,
+ 4301542112171537930ull}},
+{{7801299741669101490ull, 5841527896338348689ull,
+ 5165134043778906699ull, 2688463820107211206ull}},
+{{14363310695513764767ull, 2690223851995547957ull,
+ 15679789591578409182ull, 3360579775134014007ull}},
+{{4119080314110042246ull, 12586151851849210755ull,
+ 14988050971045623573ull, 4200724718917517509ull}},
+{{268582187105082452ull, 10172187916619450674ull,
+ 11673374866117208685ull, 2625452949323448443ull}},
+{{9559099770736128873ull, 17326920914201701246ull,
+ 9980032564219122952ull, 3281816186654310554ull}},
+{{2725502676565385283ull, 3211907069042574942ull,
+ 3251668668419127883ull, 4102270233317888193ull}},
+{{15538497228135529514ull, 18148342982647467002ull,
+ 13561507963830424686ull, 2563918895823680120ull}},
+{{10199749498314636084ull, 13462056691454557945ull,
+ 16951884954788030858ull, 3204898619779600150ull}},
+{{17361372891320683009ull, 7604198827463421623ull,
+ 11966484156630262765ull, 4006123274724500188ull}},
+{{17768387084716508737ull, 7058467276378332466ull,
+ 16702424634748690036ull, 2503827046702812617ull}},
+{{12987111819040860113ull, 8823084095472915583ull,
+ 7042972738153698833ull, 3129783808378515772ull}},
+{{11622203755373687237ull, 15640541137768532383ull,
+ 8803715922692123541ull, 3912229760473144715ull}},
+{{14181406374749636380ull, 12081181220319026691ull,
+ 3196479442468883261ull, 2445143600295715447ull}},
+{{13115071950009657570ull, 1266418470116619652ull,
+ 17830657358368267789ull, 3056429500369644308ull}},
+{{16393839937512071963ull, 6194709106073162469ull,
+ 3841577624250783120ull, 3820536875462055386ull}},
+{{12551992970158738929ull, 3871693191295726543ull,
+ 7012672033584127354ull, 2387835547163784616ull}},
+{{11078305194271035757ull, 14062988525974433987ull,
+ 8765840041980159192ull, 2984794433954730770ull}},
+{{9236195474411406792ull, 17578735657468042484ull,
+ 1733928015620423182ull, 3730993042443413463ull}},
+{{14995994208361905053ull, 6375023767490138648ull,
+ 8001234037403846345ull, 2331870651527133414ull}},
+{{298248686742829701ull, 12580465727790061215ull, 778170509900032123ull,
+ 2914838314408916768ull}},
+{{14207868913710700838ull, 11113896141310188614ull,
+ 972713137375040154ull, 3643547893011145960ull}},
+{{8536464105283600239ull, 4668998139782959960ull,
+ 1215891421718800193ull, 4554434866263932450ull}},
+{{5335290065802250149ull, 14447338883432819735ull,
+ 5371618157001638024ull, 2846521791414957781ull}},
+{{2057426563825424783ull, 18059173604291024669ull,
+ 11326208714679435434ull, 3558152239268697226ull}},
+{{7183469223209168882ull, 13350594968509005028ull,
+ 4934388856494518485ull, 4447690299085871533ull}},
+{{13713040301360506360ull, 10649964864531822094ull,
+ 5389836044522768005ull, 2779806436928669708ull}},
+{{7917928339845857141ull, 17924142099092165522ull,
+ 6737295055653460006ull, 3474758046160837135ull}},
+{{674038387952545619ull, 13181805587010431095ull,
+ 3809932801139437104ull, 4343447557701046419ull}},
+{{7338803020111422868ull, 8238628491881519434ull, 75364991498454238ull,
+ 2714654723563154012ull}},
+{{18396875811994054393ull, 1074913577997123484ull, 94206239373067798ull,
+ 3393318404453942515ull}},
+{{4549350691283016375ull, 10567014009351180164ull,
+ 13952815854498498459ull, 4241648005567428143ull}},
+{{12066716218906661042ull, 4298540746630793650ull,
+ 15638038936702643393ull, 2651030003479642589ull}},
+{{5860023236778550495ull, 9984861951715879967ull,
+ 5712490615596140529ull, 3313787504349553237ull}},
+{{2713343027545800214ull, 17092763458072237863ull,
+ 11752299287922563565ull, 4142234380436941546ull}},
+{{8613368419857206990ull, 12988820170508842616ull,
+ 11956873073378990132ull, 2588896487773088466ull}},
+{{10766710524821508738ull, 16236025213136053270ull,
+ 5722719304868961857ull, 3236120609716360583ull}},
+{{4235016119172110114ull, 6459973461137902876ull,
+ 2541713112658814418ull, 4045150762145450729ull}},
+{{11870257111337344629ull, 8649169431638577201ull,
+ 13117785741480228771ull, 2528219226340906705ull}},
+{{1002763333889517075ull, 6199775771120833598ull,
+ 2562174121568122252ull, 3160274032926133382ull}},
+{{10476826204216672151ull, 7749719713901041997ull,
+ 12426089688814928623ull, 3950342541157666727ull}},
+{{8853859386849114047ull, 11761103848829233104ull,
+ 14683835083150412245ull, 2468964088223541704ull}},
+{{11067324233561392558ull, 866321755754377668ull,
+ 18354793853938015307ull, 3086205110279427130ull}},
+{{13834155291951740698ull, 14917960249975135797ull,
+ 13720120280567743325ull, 3857756387849283913ull}},
+{{10952190066683531888ull, 11629568165448153825ull,
+ 1657546147713757722ull, 2411097742405802446ull}},
+{{18301923601781802764ull, 5313588169955416473ull,
+ 11295304721496972961ull, 3013872178007253057ull}},
+{{9042346446945089743ull, 11253671230871658496ull,
+ 284072846589052489ull, 3767340222509066322ull}},
+{{5651466529340681090ull, 116015491653704704ull, 4789231547545545710ull,
+ 2354587639068166451ull}},
+{{7064333161675851362ull, 9368391401421906688ull,
+ 1374853416004544233ull, 2943234548835208064ull}},
+{{8830416452094814202ull, 16322175270204771264ull,
+ 1718566770005680291ull, 3679043186044010080ull}},
+{{11038020565118517753ull, 15791033069328576176ull,
+ 2148208462507100364ull, 4598803982555012600ull}},
+{{6898762853199073596ull, 646023631475584302ull, 1342630289066937728ull,
+ 2874252489096882875ull}},
+{{17846825603353617802ull, 807529539344480377ull,
+ 15513345916615835872ull, 3592815611371103593ull}},
+{{8473473948909858541ull, 1009411924180600472ull,
+ 5556624340487631128ull, 4491019514213879492ull}},
+{{5295921218068661588ull, 630882452612875295ull,
+ 12696262249659545263ull, 2806887196383674682ull}},
+{{2008215504158439081ull, 14623661121048257831ull,
+ 6646955775219655770ull, 3508608995479593353ull}},
+{{16345327435480212563ull, 9056204364455546480ull,
+ 12920380737451957617ull, 4385761244349491691ull}},
+{{10215829647175132852ull, 17189342773853186310ull,
+ 5769394951693779558ull, 2741100777718432307ull}},
+{{3546415022114140257ull, 12263306430461707080ull,
+ 2600057671189836544ull, 3426375972148040384ull}},
+{{4433018777642675321ull, 15329133038077133850ull,
+ 3250072088987295680ull, 4282969965185050480ull}},
+{{7382322754454059980ull, 9580708148798208656ull,
+ 2031295055617059800ull, 2676856228240656550ull}},
+{{9227903443067574975ull, 11975885185997760820ull,
+ 11762490856376100558ull, 3346070285300820687ull}},
+{{11534879303834468718ull, 5746484445642425217ull,
+ 10091427552042737794ull, 4182587856626025859ull}},
+{{291770537255461093ull, 8203238796953903665ull, 4001299210813017169ull,
+ 2614117410391266162ull}},
+{{4976399189996714270ull, 14865734514619767485ull,
+ 14224996050371047269ull, 3267646762989082702ull}},
+{{10832185005923280742ull, 4747110087992545644ull,
+ 8557873026109033279ull, 4084558453736353378ull}},
+{{15993487665556826272ull, 9884472832636422883ull,
+ 9960356659745533703ull, 2552849033585220861ull}},
+{{15380173563518644936ull, 7743905022368140700ull,
+ 17062131843109305033ull, 3191061291981526076ull}},
+{{778472880688754553ull, 14291567296387563780ull,
+ 2880920730177079675ull, 3988826614976907596ull}},
+{{9709917587285247404ull, 6626386551028533410ull,
+ 11023947493215450605ull, 2493016634360567247ull}},
+{{2914024947251783447ull, 12894669207213054667ull,
+ 9168248348091925352ull, 3116270792950709059ull}},
+{{17477589239346893021ull, 16118336509016318333ull,
+ 6848624416687518786ull, 3895338491188386324ull}},
+{{13229336283805502090ull, 14685646336562586862ull,
+ 13503762297284475049ull, 2434586556992741452ull}},
+{{7313298317902101804ull, 4521999865421069866ull,
+ 16879702871605593812ull, 3043233196240926815ull}},
+{{18364994934232403063ull, 5652499831776337332ull,
+ 16487942571079604361ull, 3804041495301158519ull}},
+{{2254749797040476107ull, 15062027440928680593ull,
+ 17222493134565834581ull, 2377525934563224074ull}},
+{{7430123264727983037ull, 4992476245878687029ull,
+ 12304744381352517419ull, 2971907418204030093ull}},
+{{13899340099337366701ull, 1628909288920970882ull,
+ 1545872421408483062ull, 3714884272755037617ull}},
+{{13298773580513242092ull, 14853126360857770513ull,
+ 12495385309448771673ull, 2321802670471898510ull}},
+{{2788408920359388903ull, 4731349895790049430ull,
+ 6395859599956188784ull, 2902253338089873138ull}},
+{{12708883187304011937ull, 5914187369737561787ull,
+ 17218196536800011788ull, 3627816672612341422ull}},
+{{11274417965702627017ull, 7392734212171952234ull,
+ 12299373634145238927ull, 4534770840765426778ull}},
+{{11658197246991529790ull, 11537987910248552002ull,
+ 12298794539768162233ull, 2834231775478391736ull}},
+{{5349374521884636429ull, 587426832528526291ull,
+ 15373493174710202792ull, 3542789719347989670ull}},
+{{2075032133928407632ull, 734283540660657864ull, 9993494431532977682ull,
+ 4428487149184987088ull}},
+{{1296895083705254770ull, 5070613231340299069ull,
+ 6245934019708111051ull, 2767804468240616930ull}},
+{{6232804873058956367ull, 1726580520747985932ull,
+ 17030789561489914622ull, 3459755585300771162ull}},
+{{7791006091323695458ull, 11381597687789758223ull,
+ 12065114915007617469ull, 4324694481625963953ull}},
+{{11786907834718391518ull, 9419341564082292841ull,
+ 623167794238679062ull, 2702934051016227471ull}},
+{{898576738115825685ull, 2550804918248090244ull,
+ 14614017798080512540ull, 3378667563770284338ull}},
+{{1123220922644782106ull, 3188506147810112805ull,
+ 9044150210745864867ull, 4223334454712855423ull}},
+{{3007856085866682768ull, 18133717406877178167ull,
+ 12570122909357247397ull, 2639584034195534639ull}},
+{{17594878162615517172ull, 8832088703314308996ull,
+ 11100967618269171343ull, 3299480042744418299ull}},
+{{3546853629559844849ull, 6428424860715498342ull,
+ 9264523504409076275ull, 4124350053430522874ull}},
+{{16051841573757066743ull, 1711922528733492511ull,
+ 10402013208683060576ull, 2577718783394076796ull}},
+{{15453115948768945525ull, 2139903160916865639ull,
+ 13002516510853825720ull, 3222148479242595995ull}},
+{{14704708917533794002ull, 2674878951146082049ull,
+ 11641459620139894246ull, 4027685599053244994ull}},
+{{2272914045817539395ull, 15506857399748464993ull,
+ 11887598281014821807ull, 2517303499408278121ull}},
+{{7452828575699312148ull, 14771885731258193337ull,
+ 1024439795986363547ull, 3146629374260347652ull}},
+{{13927721738051528089ull, 13853171145645353767ull,
+ 1280549744982954434ull, 3933286717825434565ull}},
+{{15622355113923286912ull, 13269917984455734008ull,
+ 3106186599828040473ull, 2458304198640896603ull}},
+{{1081199818694557023ull, 2752339425287503799ull,
+ 17717791305067214304ull, 3072880248301120753ull}},
+{{15186557828650359991ull, 3440424281609379748ull,
+ 8312181076051854168ull, 3841100310376400942ull}},
+{{268226606051699187ull, 2150265176005862343ull, 583427154105020951ull,
+ 2400687693985250589ull}},
+{{14170341312846787695ull, 16522889525289491640ull,
+ 5340969961058664092ull, 3000859617481563236ull}},
+{{17712926641058484619ull, 2206867832902312934ull,
+ 6676212451323330116ull, 3751074521851954045ull}},
+{{6458893132234164983ull, 10602664432418721392ull,
+ 6478475791290775274ull, 2344421576157471278ull}},
+{{8073616415292706229ull, 4029958503668625932ull,
+ 17321466775968244901ull, 2930526970196839097ull}},
+{{10092020519115882786ull, 9649134148013170319ull,
+ 7816775414678142414ull, 3663158712746048872ull}},
+{{8003339630467465578ull, 2838045648161687091ull,
+ 9770969268347678018ull, 4578948390932561090ull}},
+{{2696244259828472034ull, 6385464548528442336ull,
+ 10718541811144686665ull, 2861842744332850681ull}},
+{{3370305324785590043ull, 12593516704087940824ull,
+ 18009863282358246235ull, 3577303430416063351ull}},
+{{4212881655981987553ull, 11130209861682538126ull,
+ 17900643084520419890ull, 4471629288020079189ull}},
+{{16468109090270905933ull, 11568067181978974232ull,
+ 13493744937038956383ull, 2794768305012549493ull}},
+{{2138392289129080800ull, 9848397959046329887ull,
+ 3032123116016531767ull, 3493460381265686867ull}},
+{{16508048416693514712ull, 7698811430380524454ull,
+ 17625211950302828421ull, 4366825476582108583ull}},
+{{5705844242006058791ull, 7117600153201521736ull,
+ 17933286496580349619ull, 2729265922863817864ull}},
+{{7132305302507573489ull, 4285314173074514266ull,
+ 3969864047015885408ull, 3411582403579772331ull}},
+{{18138753664989242669ull, 5356642716343142832ull,
+ 350644040342468856ull, 4264478004474715414ull}},
+{{11336721040618276668ull, 3347901697714464270ull,
+ 14054210580496206747ull, 2665298752796697133ull}},
+{{4947529263918070027ull, 18019935177425244050ull,
+ 3732705170338094721ull, 3331623440995871417ull}},
+{{15407783616752363342ull, 8689860916499391350ull,
+ 9277567481350006306ull, 4164529301244839271ull}},
+{{5018178742042839185ull, 10042849091239507498ull,
+ 12716008703484835797ull, 2602830813278024544ull}},
+{{15496095464408324789ull, 17165247382476772276ull,
+ 15895010879356044746ull, 3253538516597530680ull}},
+{{923375256800854370ull, 12233187191241189538ull,
+ 1422019525485504317ull, 4066923145746913351ull}},
+{{5188795553927921886ull, 9951585003739437413ull,
+ 7806291231069522054ull, 2541826966091820844ull}},
+{{11097680460837290261ull, 3216109217819520958ull,
+ 9757864038836902568ull, 3177283707614776055ull}},
+{{4648728539191837018ull, 4020136522274401198ull,
+ 7585644030118740306ull, 3971604634518470069ull}},
+{{16740513392277061848ull, 7124271344848888652ull,
+ 7046870528037906643ull, 2482252896574043793ull}},
+{{2478897666636775694ull, 4293653162633722912ull,
+ 13420274178474771208ull, 3102816120717554741ull}},
+{{3098622083295969618ull, 5367066453292153640ull,
+ 2940284667811300298ull, 3878520150896943427ull}},
+{{1936638802059981011ull, 7966102551734983929ull,
+ 17978578981877920350ull, 2424075094310589641ull}},
+{{7032484521002364168ull, 734256152813954103ull, 8638165672065236726ull,
+ 3030093867888237052ull}},
+{{4178919632825567306ull, 10141192227872218437ull,
+ 10797707090081545907ull, 3787617334860296315ull}},
+{{4917667779729673518ull, 4032402133206442571ull,
+ 4442723922087272240ull, 2367260834287685197ull}},
+{{1535398706234703994ull, 5040502666508053214ull,
+ 10165090921036478204ull, 2959076042859606496ull}},
+{{11142620419648155800ull, 6300628333135066517ull,
+ 12706363651295597755ull, 3698845053574508120ull}},
+{{9269980771493791327ull, 1632049698995722621ull,
+ 7941477282059748597ull, 2311778158484067575ull}},
+{{16199161982794627063ull, 6651748142172041180ull,
+ 5315160584147297842ull, 2889722698105084469ull}},
+{{1802208404783732213ull, 17538057214569827284ull,
+ 11255636748611510206ull, 3612153372631355586ull}},
+{{2252760505979665266ull, 12699199481357508297ull,
+ 4846173898909611950ull, 4515191715789194483ull}},
+{{12937190362305760551ull, 3325313657421054781ull,
+ 723015677604813517ull, 2821994822368246552ull}},
+{{2336429897600036977ull, 8768328090203706381ull, 903769597006016896ull,
+ 3527493527960308190ull}},
+{{7532223390427434125ull, 10960410112754632976ull,
+ 10353084033112296928ull, 4409366909950385237ull}},
+{{4707639619017146328ull, 6850256320471645610ull,
+ 8776520529908879532ull, 2755854318718990773ull}},
+{{15107921560626208718ull, 8562820400589557012ull,
+ 15582336680813487319ull, 3444817898398738466ull}},
+{{438157877073209282ull, 6091839482309558362ull,
+ 10254548814162083341ull, 4306022372998423083ull}},
+{{4885534691598143705ull, 6113242685657167928ull,
+ 4103249999637608136ull, 2691263983124014427ull}},
+{{6106918364497679631ull, 7641553357071459910ull, 517376481119622266ull,
+ 3364079978905018034ull}},
+{{16857019992476875347ull, 328569659484549079ull,
+ 9870092638254303641ull, 4205099973631272542ull}},
+{{17453166522939128948ull, 11734571083246312934ull,
+ 1557121880481551871ull, 2628187483519545339ull}},
+{{12593086116819135377ull, 10056527835630503264ull,
+ 15781460405884103551ull, 3285234354399431673ull}},
+{{15741357646023919221ull, 7958973776110741176ull,
+ 5891767452072965727ull, 4106542942999289592ull}},
+{{9838348528764949513ull, 11891887637710295091ull,
+ 3682354657545603579ull, 2566589339374555995ull}},
+{{7686249642528798988ull, 10253173528710480960ull,
+ 18438001377214168186ull, 3208236674218194993ull}},
+{{9607812053160998735ull, 3593094874033325392ull,
+ 9212443666235546521ull, 4010295842772743742ull}},
+{{6004882533225624209ull, 13774899342339298130ull,
+ 1146091272969828671ull, 2506434901732964839ull}},
+{{16729475203386806069ull, 12606938159496734758ull,
+ 15267672146494449551ull, 3133043627166206048ull}},
+{{11688471967378731779ull, 11146986680943530544ull,
+ 637846109408510323ull, 3916304533957757561ull}},
+{{7305294979611707362ull, 4661023666376012638ull,
+ 11927868864448788712ull, 2447690333723598475ull}},
+{{18354990761369410010ull, 5826279582970015797ull,
+ 10298150062133597986ull, 3059612917154498094ull}},
+{{9108680396429598801ull, 16506221515567295555ull,
+ 3649315540812221674ull, 3824516146443122618ull}},
+{{3387082238554805299ull, 14928074465656947626ull,
+ 6892508231435026450ull, 2390322591526951636ull}},
+{{13457224835048282431ull, 9436721045216408724ull,
+ 8615635289293783063ull, 2987903239408689545ull}},
+{{16821531043810353039ull, 7184215288093123001ull,
+ 15381230130044616733ull, 3734879049260861931ull}},
+{{3595927874740388793ull, 6795977564271895828ull,
+ 7307425822064191506ull, 2334299405788038707ull}},
+{{4494909843425485992ull, 17718343992194645593ull,
+ 4522596259152851478ull, 2917874257235048384ull}},
+{{10230323322709245393ull, 12924557953388531183ull,
+ 5653245323941064348ull, 3647342821543810480ull}},
+{{8176218134959168838ull, 16155697441735663979ull,
+ 7066556654926330435ull, 4559178526929763100ull}},
+{{2804293325135786572ull, 7791467891871096035ull,
+ 13639969946183732330ull, 2849486579331101937ull}},
+{{17340424711701896927ull, 515962827984094235ull,
+ 3214904377447501701ull, 3561858224163877422ull}},
+{{17063844871199983254ull, 5256639553407505698ull,
+ 13242002508664152934ull, 4452322780204846777ull}},
+{{15276589062927377438ull, 17120457776161854773ull,
+ 1358722540274013727ull, 2782701737628029236ull}},
+{{5260678273377058085ull, 16788886201774930563ull,
+ 1698403175342517159ull, 3478377172035036545ull}},
+{{1964161823293934703ull, 16374421733791275300ull,
+ 6734689987605534353ull, 4347971465043795681ull}},
+{{10450973176413484997ull, 3316484555978465206ull,
+ 15738396288321928731ull, 2717482165652372300ull}},
+{{3840344433662080438ull, 17980663750255245220ull,
+ 1226251286692859297ull, 3396852707065465376ull}},
+{{4800430542077600548ull, 8640771632536892813ull,
+ 1532814108366074122ull, 4246065883831831720ull}},
+{{5306112098012194295ull, 10012168288762945912ull,
+ 958008817728796326ull, 2653791177394894825ull}},
+{{6632640122515242868ull, 3291838324098906582ull,
+ 5809197040588383312ull, 3317238971743618531ull}},
+{{17514172189998829393ull, 4114797905123633227ull,
+ 2649810282308091236ull, 4146548714679523164ull}},
+{{8640514609535574419ull, 11795120727557046575ull,
+ 10879503463297332830ull, 2591592946674701977ull}},
+{{6188957243492080119ull, 5520528872591532411ull,
+ 18211065347549053942ull, 3239491183343377471ull}},
+{{3124510535937712245ull, 16124033127594191322ull,
+ 18152145666008929523ull, 4049363979179221839ull}},
+{{6564505103388458057ull, 7771677695532675624ull,
+ 18262620068896662808ull, 2530852486987013649ull}},
+{{8205631379235572572ull, 9714597119415844530ull,
+ 8993217030838664798ull, 3163565608733767062ull}},
+{{1033667187189689907ull, 2919874362415029855ull,
+ 2018149251693555190ull, 3954457010917208828ull}},
+{{7563571019634638048ull, 15659979531791557371ull,
+ 10484715319163247801ull, 2471535631823255517ull}},
+{{4842777756115909656ull, 5739916359457283002ull,
+ 17717580167381447656ull, 3089419539779069396ull}},
+{{15276844231999662877ull, 7174895449321603752ull,
+ 3700231135517257954ull, 3861774424723836746ull}},
+{{9548027644999789299ull, 9095995674253390249ull,
+ 6924330478125674125ull, 2413609015452397966ull}},
+{{16546720574677124527ull, 15981680611244125715ull,
+ 17878785134511868464ull, 3017011269315497457ull}},
+{{16071714699919017755ull, 1530356690345605528ull,
+ 8513423362857671869ull, 3771264086644371822ull}},
+{{10044821687449386097ull, 3262315940679697407ull,
+ 709203583358657014ull, 2357040054152732389ull}},
+{{7944341090884344717ull, 13301266962704397567ull,
+ 5498190497625709171ull, 2946300067690915486ull}},
+{{5318740345178042992ull, 12014897684953109055ull,
+ 16096110158886912272ull, 3682875084613644357ull}},
+{{2036739413045165836ull, 15018622106191386319ull,
+ 6285079643326476628ull, 4603593855767055447ull}},
+{{8190491160794310504ull, 163266779514840641ull,
+ 10845703804720129749ull, 2877246159854409654ull}},
+{{14849799969420276033ull, 4815769492820938705ull,
+ 4333757719045386378ull, 3596557699818012068ull}},
+{{4727191906493181330ull, 15243083902880949190ull,
+ 5417197148806732972ull, 4495697124772515085ull}},
+{{16789552996840402043ull, 303555402445817435ull,
+ 5691591227217902060ull, 2809810702982821928ull}},
+{{16375255227623114650ull, 379444253057271794ull,
+ 7114489034022377575ull, 3512263378728527410ull}},
+{{11245696997674117504ull, 14309363371603753455ull,
+ 18116483329382747776ull, 4390329223410659262ull}},
+{{13946089651187405296ull, 8943352107252345909ull,
+ 6711116062436829456ull, 2743955764631662039ull}},
+{{3597554008702092908ull, 11179190134065432387ull,
+ 3777209059618648916ull, 3429944705789577549ull}},
+{{18332000566159779847ull, 13973987667581790483ull,
+ 9333197342950699049ull, 4287430882236971936ull}},
+{{9151657344636168453ull, 1816213264597537196ull,
+ 5833248339344186906ull, 2679644301398107460ull}},
+{{11439571680795210566ull, 11493638617601697303ull,
+ 7291560424180233632ull, 3349555376747634325ull}},
+{{9687778582566625303ull, 14367048272002121629ull,
+ 13726136548652679944ull, 4186944220934542906ull}},
+{{8360704623317834767ull, 8979405170001326018ull,
+ 13190521361335312869ull, 2616840138084089316ull}},
+{{1227508742292517650ull, 15835942480929045427ull,
+ 16488151701669141086ull, 3271050172605111645ull}},
+{{15369443983147810775ull, 10571556064306530975ull,
+ 6775131571804262646ull, 4088812715756389557ull}},
+{{16523431517108463590ull, 1995536521764193955ull,
+ 6540300241591358106ull, 2555507947347743473ull}},
+{{16042603377958191584ull, 11717792689060018252ull,
+ 12787061320416585536ull, 3194384934184679341ull}},
+{{1606510148738187864ull, 14647240861325022816ull,
+ 2148768595238568208ull, 3992981167730849177ull}},
+{{1004068842961367415ull, 9154525538328139260ull,
+ 12872195418092574890ull, 2495613229831780735ull}},
+{{1255086053701709269ull, 2219784886055398267ull,
+ 11478558254188330709ull, 3119516537289725919ull}},
+{{15403915622409300298ull, 7386417125996635737ull,
+ 9736511799308025482ull, 3899395671612157399ull}},
+{{2709918236364730830ull, 9228196722175285240ull,
+ 13002848902208597782ull, 2437122294757598374ull}},
+{{3387397795455913538ull, 2311873865864330742ull,
+ 7030189090905971420ull, 3046402868446997968ull}},
+{{13457619281174667730ull, 2889842332330413427ull,
+ 8787736363632464275ull, 3808003585558747460ull}},
+{{6105169041520473379ull, 17947052522202366056ull,
+ 14715707264125065979ull, 2380002240974217162ull}},
+{{7631461301900591724ull, 17822129634325569666ull,
+ 9171262043301556666ull, 2975002801217771453ull}},
+{{315954590520963847ull, 13054290006052186275ull,
+ 16075763572554333737ull, 3718753501522214316ull}},
+{{16338372683571460069ull, 1241402226141534565ull,
+ 823980195991682778ull, 2324220938451383948ull}},
+{{6587907799182161374ull, 10775124819531694015ull,
+ 1029975244989603472ull, 2905276173064229935ull}},
+{{3623198730550313813ull, 13468906024414617519ull,
+ 15122527111519168052ull, 3631595216330287418ull}},
+{{18364056468470055978ull, 16836132530518271898ull,
+ 9679786852544184257ull, 4539494020412859273ull}},
+{{16089221311221172890ull, 3605053803932838080ull,
+ 17579081828908584921ull, 2837183762758037045ull}},
+{{1664782565316914497ull, 9118003273343435505ull,
+ 8138794230853567439ull, 3546479703447546307ull}},
+{{6692664225073531025ull, 6785818073251906477ull,
+ 5561806770139571395ull, 4433099629309432884ull}},
+{{6488758149884650843ull, 1935293286568747596ull,
+ 12699501268192007930ull, 2770687268318395552ull}},
+{{8110947687355813553ull, 11642488645065710303ull,
+ 15874376585240009912ull, 3463359085397994440ull}},
+{{5526998590767379037ull, 14553110806332137879ull,
+ 1396226657840460774ull, 4329198856747493051ull}},
+{{10371903146870693755ull, 4484008235530198270ull,
+ 17013542725646145648ull, 2705749285467183156ull}},
+{{3741506896733591385ull, 5605010294412747838ull,
+ 2820184333348130444ull, 3382186606833978946ull}},
+{{13900255657771765039ull, 7006262868015934797ull,
+ 12748602453539938863ull, 4227733258542473682ull}},
+{{10993502795321047102ull, 11296443320151041104ull,
+ 12579562551889849693ull, 2642333286589046051ull}},
+{{13741878494151308877ull, 285496094906637668ull,
+ 11112767171434924213ull, 3302916608236307564ull}},
+{{17177348117689136096ull, 4968556137060684989ull,
+ 13890958964293655266ull, 4128645760295384455ull}},
+{{13041685582769404012ull, 7717033604090316022ull,
+ 15599378380324616397ull, 2580403600184615284ull}},
+{{7078734941606979207ull, 14257978023540282932ull,
+ 1052478901696218880ull, 3225504500230769106ull}},
+{{8848418677008724009ull, 17822472529425353665ull,
+ 10538970663975049408ull, 4031880625288461382ull}},
+{{17059476719198922266ull, 11139045330890846040ull,
+ 1975170646557017976ull, 2519925390805288364ull}},
+{{2877601825289101216ull, 13923806663613557551ull,
+ 2468963308196272470ull, 3149906738506610455ull}},
+{{17432060336893540232ull, 8181386292662171130ull,
+ 16921262190527504300ull, 3937383423133263068ull}},
+{{15506723728985850549ull, 14336738469768632764ull,
+ 1352416832224914379ull, 2460864639458289418ull}},
+{{936660587522761570ull, 13309237068783403052ull,
+ 10913893077135918782ull, 3076080799322861772ull}},
+{{1170825734403451963ull, 7413174299124478007ull,
+ 13642366346419898478ull, 3845100999153577215ull}},
+{{7649295111643239333ull, 21547918525410850ull, 15444007994153518405ull,
+ 2403188124470985759ull}},
+{{338246852699273358ull, 4638620916584151467ull,
+ 14693323974264510102ull, 3003985155588732199ull}},
+{{14257866621156255409ull, 15021648182584965141ull,
+ 13754968949403249723ull, 3754981444485915249ull}},
+{{11217009647436353583ull, 7082687104901909261ull,
+ 1679326565735949221ull, 2346863402803697031ull}},
+{{186204004013278267ull, 13465044899554774481ull,
+ 15934216262452100238ull, 2933579253504621288ull}},
+{{4844441023443985737ull, 7607934087588692293ull,
+ 1471026254355573682ull, 3666974066880776611ull}},
+{{10667237297732370076ull, 286545572631089558ull,
+ 15673840873226630815ull, 4583717583600970763ull}},
+{{2055337292655343393ull, 7096620010535512830ull,
+ 7490307536552950307ull, 2864823489750606727ull}},
+{{11792543652673955050ull, 4259088994742003133ull,
+ 4751198402263799980ull, 3581029362188258409ull}},
+{{905621510560280100ull, 5323861243427503917ull,
+ 10550684021257137879ull, 4476286702735323011ull}},
+{{2871856453313869015ull, 10244942304783271804ull,
+ 4288334504072017222ull, 2797679189209576882ull}},
+{{3589820566642336268ull, 3582805844124313947ull,
+ 14583790166944797336ull, 3497098986511971102ull}},
+{{18322333763585084047ull, 4478507305155392433ull,
+ 9006365671826220862ull, 4371373733139963878ull}},
+{{4533929574599595674ull, 16634125121004283983ull,
+ 1017292526464000134ull, 2732108583212477424ull}},
+{{1055725949822106688ull, 11569284364400579171ull,
+ 1271615658080000168ull, 3415135729015596780ull}},
+{{15154715492559797072ull, 14461605455500723963ull,
+ 1589519572600000210ull, 4268919661269495975ull}},
+{{7165854173636179218ull, 13650189428115340381ull,
+ 7910978760516081987ull, 2668074788293434984ull}},
+{{13569003735472611926ull, 12451050766716787572ull,
+ 9888723450645102484ull, 3335093485366793730ull}},
+{{16961254669340764908ull, 15563813458395984465ull,
+ 3137532276451602297ull, 4168866856708492163ull}},
+{{3683255140696896212ull, 2809854383856408435ull,
+ 18101858737278109100ull, 2605541785442807601ull}},
+{{18439126981153283976ull, 3512317979820510543ull,
+ 8792265366315472663ull, 3256927231803509502ull}},
+{{18437222708014217066ull, 18225455530057801891ull,
+ 1766959671039565020ull, 4071159039754386878ull}},
+{{9217421183295191715ull, 2167537669431350374ull,
+ 14939407849681891850ull, 2544474399846491798ull}},
+{{2298404442264213835ull, 11932794123643963776ull,
+ 9450887775247589004ull, 3180592999808114748ull}},
+{{2873005552830267294ull, 14915992654554954720ull,
+ 11813609719059486255ull, 3975741249760143435ull}},
+{{1795628470518917059ull, 16240024436737928556ull,
+ 5077663065198484957ull, 2484838281100089647ull}},
+{{2244535588148646323ull, 6464972490640246983ull,
+ 1735392813070718293ull, 3106047851375112059ull}},
+{{16640727540467971616ull, 12692901631727696632ull,
+ 16004299071620561578ull, 3882559814218890073ull}},
+{{10400454712792482260ull, 12544749538257198299ull,
+ 3085157892121769130ull, 2426599883886806296ull}},
+{{8388882372563214921ull, 6457564885966722066ull,
+ 3856447365152211413ull, 3033249854858507870ull}},
+{{1262730928849242843ull, 12683642125885790487ull,
+ 14043931243295040074ull, 3791562318573134837ull}},
+{{7706735858171858633ull, 12538962347106006958ull,
+ 11083300036273093998ull, 2369726449108209273ull}},
+{{410047785860047484ull, 6450330897027732890ull, 19066990059203786ull,
+ 2962158061385261592ull}},
+{{9735931769179835162ull, 17286285658139441920ull, 23833737574004732ull,
+ 3702697576731576990ull}},
+{{6084957355737396977ull, 1580556499482375392ull,
+ 13849954141265916670ull, 2314185985457235618ull}},
+{{7606196694671746221ull, 11199067661207745048ull,
+ 8089070639727620029ull, 2892732481821544523ull}},
+{{9507745868339682776ull, 163776521227517598ull, 5499652281232137133ull,
+ 3615915602276930654ull}},
+{{2661310298569827661ull, 4816406669961784902ull,
+ 16097937388394947224ull, 4519894502846163317ull}},
+{{15498376991888306001ull, 3010254168726115563ull,
+ 12367053876960535967ull, 2824934064278852073ull}},
+{{14761285221432994597ull, 17597875766189808166ull,
+ 1623759290918506246ull, 3531167580348565092ull}},
+{{9228234489936467438ull, 12773972670882484400ull,
+ 2029699113648132808ull, 4413959475435706365ull}},
+{{5767646556210292149ull, 7983732919301552750ull,
+ 3574404955243776957ull, 2758724672147316478ull}},
+{{16432930232117640994ull, 14591352167554328841ull,
+ 13691378230909497004ull, 3448405840184145597ull}},
+{{6706104734864887530ull, 18239190209442911052ull,
+ 3279164733354707543ull, 4310507300230181997ull}},
+{{13414687496145330515ull, 18317022908542901263ull,
+ 4355320967560386166ull, 2694067062643863748ull}},
+{{12156673351754275239ull, 13672906598823850771ull,
+ 5444151209450482708ull, 3367583828304829685ull}},
+{{10584155671265456145ull, 17091133248529813464ull,
+ 11416875030240491289ull, 4209479785381037106ull}},
+{{6615097294540910091ull, 3764429252690051559ull,
+ 11747232912327694960ull, 2630924865863148191ull}},
+{{3657185599748749709ull, 4705536565862564449ull,
+ 10072355121982230796ull, 3288656082328935239ull}},
+{{9183168018113325040ull, 5881920707328205561ull,
+ 7978757884050400591ull, 4110820102911169049ull}},
+{{17268695057389297910ull, 10593729469721210331ull,
+ 16515938723599970129ull, 2569262564319480655ull}},
+{{16974182803309234484ull, 17853847855578900818ull,
+ 16033237386072574757ull, 3211578205399350819ull}},
+{{11994356467281767297ull, 8482251764191462311ull,
+ 15429860714163330543ull, 4014472756749188524ull}},
+{{14414001819692186417ull, 12218936380260745800ull,
+ 420290909497305781ull, 2509045472968242828ull}},
+{{18017502274615233021ull, 1438612420043768538ull,
+ 525363636871632227ull, 3136306841210303535ull}},
+{{13298505806414265468ull, 15633323580336874385ull,
+ 14491762601371703995ull, 3920383551512879418ull}},
+{{1394037101367834061ull, 7464984228496852539ull,
+ 13669037644284702901ull, 2450239719695549636ull}},
+{{15577604431991956289ull, 13942916304048453577ull,
+ 17086297055355878626ull, 3062799649619437045ull}},
+{{5636947484707781649ull, 8205273343205791164ull,
+ 7522813263912684571ull, 3828499562024296307ull}},
+{{12746464214797139339ull, 2822452830289925525ull,
+ 2395915280731733905ull, 2392812226265185192ull}},
+{{2098022213214260461ull, 8139752056289794811ull,
+ 2994894100914667381ull, 2991015282831481490ull}},
+{{16457585821799989288ull, 14786376088789631417ull,
+ 12966989662998110034ull, 3738769103539351862ull}},
+{{3368462110983911449ull, 13853171073920907540ull,
+ 3492682520946430867ull, 2336730689712094914ull}},
+{{4210577638729889312ull, 12704777823973746521ull,
+ 13589225188037814392ull, 2920913362140118642ull}},
+{{9874908066839749543ull, 15880972279967183151ull,
+ 7763159448192492182ull, 3651141702675148303ull}},
+{{7731949065122299025ull, 10627843313104203131ull,
+ 5092263291813227324ull, 4563927128343935379ull}},
+{{2526625156487742939ull, 15865774107544902765ull,
+ 876821548169573125ull, 2852454455214959612ull}},
+{{7769967464037066578ull, 5997159579148964744ull,
+ 1096026935211966407ull, 3565568069018699515ull}},
+{{9712459330046333222ull, 2884763455508818026ull,
+ 15205091724297121721ull, 4456960086273374393ull}},
+{{10681973099706346168ull, 13332192205761481026ull,
+ 2585653300044619219ull, 2785600053920858996ull}},
+{{4129094337778156902ull, 12053554238774463379ull,
+ 3232066625055774024ull, 3482000067401073745ull}},
+{{549681903795308223ull, 15066942798468079224ull,
+ 8651769299747105434ull, 4352500084251342181ull}},
+{{343551189872067640ull, 14028525267469937419ull,
+ 7713198821555634848ull, 2720312552657088863ull}},
+{{14264497042622248261ull, 17535656584337421773ull,
+ 5029812508517155656ull, 3400390690821361079ull}},
+{{3995563247995646614ull, 3472826656712225601ull,
+ 1675579617219056667ull, 4250488363526701349ull}},
+{{14026442076065748894ull, 18311417724940998664ull,
+ 3353080269975604368ull, 2656555227204188343ull}},
+{{17533052595082186118ull, 4442528082466696714ull,
+ 18026408392751669173ull, 3320694034005235428ull}},
+{{12692943706997956839ull, 10164846121510758797ull,
+ 4086266417230034850ull, 4150867542506544286ull}},
+{{10238932826087416977ull, 10964714844371612152ull,
+ 16388974566050935493ull, 2594292214066590178ull}},
+{{12798666032609271221ull, 18317579573891903094ull,
+ 11262846170708893558ull, 3242865267583237723ull}},
+{{6774960503906813218ull, 13673602430510103060ull,
+ 9466871694958729044ull, 4053581584479047154ull}},
+{{13457722351796534069ull, 17769373555923590220ull,
+ 10528480827776593556ull, 2533488490299404471ull}},
+{{16822152939745667586ull, 3764972871194936159ull,
+ 8548915016293354042ull, 3166860612874255589ull}},
+{{16416005156254696579ull, 13929588125848446007ull,
+ 15297829788794080456ull, 3958575766092819486ull}},
+{{17177532250300267218ull, 8705992578655278754ull,
+ 4949457599568912381ull, 2474109853808012179ull}},
+{{12248543276020558214ull, 15494176741746486347ull,
+ 1575135981033752572ull, 3092637317260015224ull}},
+{{10698993076598309864ull, 920976853473556318ull,
+ 1968919976292190716ull, 3865796646575019030ull}},
+{{2075184654446555761ull, 9798982570275748507ull,
+ 15065633040464782909ull, 2416122904109386893ull}},
+{{16429038873340358413ull, 16860414231272073537ull,
+ 4996983245298814924ull, 3020153630136733617ull}},
+{{6701240536393284304ull, 2628773715380540306ull,
+ 10857915075050906560ull, 3775192037670917021ull}},
+{{8799961353673190594ull, 1642983572112837691ull,
+ 9092039931120510552ull, 2359495023544323138ull}},
+{{6388265673664100339ull, 2053729465141047114ull,
+ 2141677877045862382ull, 2949368779430403923ull}},
+{{17208704128934901231ull, 11790533868281084700ull,
+ 16512155401589491689ull, 3686710974288004903ull}},
+{{3064136087459074923ull, 903109280069192164ull,
+ 16028508233559476708ull, 4608388717860006129ull}},
+{{11138457091516697635ull, 9787815336898020910ull,
+ 3100288618333591086ull, 2880242948662503831ull}},
+{{4699699327541096236ull, 3011397134267750330ull,
+ 17710418828199152570ull, 3600303685828129788ull}},
+{{15097996196281146103ull, 12987618454689463720ull,
+ 3691279461539389096ull, 4500379607285162236ull}},
+{{9436247622675716314ull, 8117261534180914825ull,
+ 11530421700316893993ull, 2812737254553226397ull}},
+{{16406995546772033297ull, 14758262936153531435ull,
+ 577969070113953779ull, 3515921568191532997ull}},
+{{15897058415037653717ull, 13836142651764526390ull,
+ 5334147356069830128ull, 4394901960239416246ull}},
+{{5323975490971145669ull, 8647589157352828994ull,
+ 17168900152825807542ull, 2746813725149635153ull}},
+{{15878341400568707894ull, 1586114409836260434ull,
+ 7626067135750095716ull, 3433517156437043942ull}},
+{{10624554713856109060ull, 1982643012295325543ull,
+ 309211882832843837ull, 4291896445546304928ull}},
+{{13557875723801150019ull, 3544994891898272416ull,
+ 193257426770527398ull, 2682435278466440580ull}},
+{{16947344654751437523ull, 13654615651727616328ull,
+ 241571783463159247ull, 3353044098083050725ull}},
+{{2737436744729745288ull, 12456583546232132507ull,
+ 4913650747756336963ull, 4191305122603813406ull}},
+{{17851799029951948469ull, 5479521707181388864ull,
+ 16906089772629874314ull, 2619565701627383378ull}},
+{{3868004713730383970ull, 16072774170831511889ull,
+ 11909240178932567084ull, 3274457127034229223ull}},
+{{9446691910590367867ull, 1644223639829838245ull,
+ 10274864205238320952ull, 4093071408792786529ull}},
+{{8210025453332673869ull, 1027639774893648903ull,
+ 17951005174342420355ull, 2558169630495491580ull}},
+{{5650845798238454432ull, 15119607773899224841ull,
+ 3992012394218473827ull, 3197712038119364476ull}},
+{{11675243266225455944ull, 14287823698946643147ull,
+ 4990015492773092284ull, 3997140047649205595ull}},
+{{4991184032177216013ull, 18153261848696427775ull,
+ 812916673769488725ull, 2498212529780753497ull}},
+{{1627294021794132112ull, 8856519255588371007ull,
+ 5627831860639248811ull, 3122765662225941871ull}},
+{{15869175582524828852ull, 6458963051058075854ull,
+ 2423103807371673110ull, 3903457077782427339ull}},
+{{5306548720650630129ull, 17871909962193461121ull,
+ 17655340944103153357ull, 2439660673614017086ull}},
+{{11244871919240675565ull, 8504829397459662689ull,
+ 12845804143274165889ull, 3049575842017521358ull}},
+{{221031843768680744ull, 15242722765251966266ull,
+ 6833883142237931553ull, 3811969802521901698ull}},
+{{4749830920782813369ull, 2609172700641397060ull,
+ 8882862982326095125ull, 2382481126576188561ull}},
+{{5937288650978516711ull, 7873151894229134229ull,
+ 15715264746335006810ull, 2978101408220235701ull}},
+{{12033296832150533793ull, 618067830931641978ull,
+ 5809022877636594801ull, 3722626760275294627ull}},
+{{12132496538521471525ull, 11915507440400745996ull,
+ 1324796289309177798ull, 2326641725172059142ull}},
+{{15165620673151839406ull, 5671012263646156687ull,
+ 10879367398491248056ull, 2908302156465073927ull}},
+{{14345339823012411353ull, 7088765329557695859ull,
+ 8987523229686672166ull, 3635377695581342409ull}},
+{{13319988760338126287ull, 18084328698801895632ull,
+ 15846090055535728111ull, 4544222119476678011ull}},
+{{8324992975211328930ull, 18220234464392266626ull,
+ 7597963275496136117ull, 2840138824672923757ull}},
+{{1182869182159385354ull, 8940235025208169571ull,
+ 14109140112797558051ull, 3550173530841154696ull}},
+{{15313644532981395405ull, 6563607763082824059ull,
+ 17636425140996947564ull, 4437716913551443370ull}},
+{{7265184823899678176ull, 13325626888781540845ull,
+ 15634451731550480131ull, 2773573070969652106ull}},
+{{13693167048301985624ull, 12045347592549538152ull,
+ 10319692627583324356ull, 3466966338712065133ull}},
+{{17116458810377482030ull, 15056684490686922690ull,
+ 17511301802906543349ull, 4333707923390081416ull}},
+{{15309472774913314173ull, 11716270815893020633ull,
+ 10944563626816589593ull, 2708567452118800885ull}},
+{{5301782913359479004ull, 810280464584112080ull,
+ 18292390551948124896ull, 3385709315148501106ull}},
+{{6627228641699348755ull, 1012850580730140100ull,
+ 13642116153080380312ull, 4232136643935626383ull}},
+{{13365389937916868780ull, 633031612956337562ull,
+ 15443851623316319551ull, 2645085402459766489ull}},
+{{7483365385541310167ull, 14626347571477585665ull,
+ 5469756473863235726ull, 3306356753074708112ull}},
+{{13965892750354025612ull, 9059562427492206273ull,
+ 6837195592329044658ull, 4132945941343385140ull}},
+{{1811153941330184152ull, 10273912535610016825ull,
+ 13496619282060428719ull, 2583091213339615712ull}},
+{{6875628445090118094ull, 8230704651085133127ull,
+ 16870774102575535899ull, 3228864016674519640ull}},
+{{3982849537935259713ull, 5676694795429028505ull,
+ 2641723554509868258ull, 4036080020843149551ull}},
+{{14018496007278007081ull, 8159620265570530719ull,
+ 8568606249209749517ull, 2522550013026968469ull}},
+{{12911433990670120947ull, 14811211350390551303ull,
+ 15322443829939574800ull, 3153187516283710586ull}},
+{{11527606469910263279ull, 67270114278637513ull, 9929682750569692693ull,
+ 3941484395354638233ull}},
+{{287225016052832694ull, 2347886830637842398ull,
+ 17735266765174527693ull, 2463427747096648895ull}},
+{{9582403306920816675ull, 7546544556724690901ull,
+ 17557397438040771712ull, 3079284683870811119ull}},
+{{16589690152078408748ull, 9433180695905863626ull,
+ 17335060779123576736ull, 3849105854838513899ull}},
+{{14980242363476393372ull, 5895737934941164766ull,
+ 8528569977738541508ull, 2405691159274071187ull}},
+{{9501930917490715906ull, 7369672418676455958ull,
+ 6049026453745788981ull, 3007113949092588984ull}},
+{{2654041610008619075ull, 13823776541772957852ull,
+ 7561283067182236226ull, 3758892436365736230ull}},
+{{10882148043110162730ull, 13251546357035486561ull,
+ 114115898561509737ull, 2349307772728585144ull}},
+{{18214371072315091316ull, 2729374891012194489ull,
+ 142644873201887172ull, 2936634715910731430ull}},
+{{8932905785111700433ull, 3411718613765243112ull,
+ 9401678128357134773ull, 3670793394888414287ull}},
+{{11166132231389625542ull, 8876334285633941794ull,
+ 7140411642019030562ull, 4588491743610517859ull}},
+{{11590518663045903868ull, 10159394946948601525ull,
+ 2156914267048200149ull, 2867807339756573662ull}},
+{{653090273525216122ull, 17310929702113139811ull,
+ 11919514870665025994ull, 3584759174695717077ull}},
+{{14651420897188683865ull, 12415290090786648955ull,
+ 1064335533049118781ull, 4480948968369646347ull}},
+{{6851295051529233464ull, 10065399315955349549ull,
+ 16806110772651556902ull, 2800593105231028966ull}},
+{{13175804832838929734ull, 3358377108089411128ull,
+ 11784266428959670320ull, 3500741381538786208ull}},
+{{16469756041048662167ull, 4197971385111763910ull,
+ 14730333036199587900ull, 4375926726923482760ull}},
+{{5681911507228025950ull, 11847104152549628252ull,
+ 9206458147624742437ull, 2734954204327176725ull}},
+{{7102389384035032438ull, 973822135404871603ull,
+ 16119758702958315951ull, 3418692755408970906ull}},
+{{4266300711616402643ull, 15052335724538253216ull,
+ 10926326341843119130ull, 4273365944261213633ull}},
+{{2666437944760251652ull, 14019395846263796164ull,
+ 18358169009720419216ull, 2670853715163258520ull}},
+{{3333047430950314565ull, 17524244807829745205ull,
+ 4500967188440972404ull, 3338567143954073151ull}},
+{{8777995307115281110ull, 3458561936077629890ull,
+ 1014522967123827602ull, 4173208929942591439ull}},
+{{10097933085374438598ull, 6773287228475906585ull,
+ 7551605882093474107ull, 2608255581214119649ull}},
+{{17234102375145436152ull, 3854923017167495327ull,
+ 14051193371044230538ull, 3260319476517649561ull}},
+{{16930941950504407285ull, 14042025808314144967ull,
+ 3728933658523124460ull, 4075399345647061952ull}},
+{{17499367746706336410ull, 17999638167051116412ull,
+ 2330583536576952787ull, 2547124591029413720ull}},
+{{3427465609673368896ull, 17887861690386507612ull,
+ 2913229420721190984ull, 3183905738786767150ull}},
+{{4284332012091711120ull, 3913083039273582899ull,
+ 12864908812756264539ull, 3979882173483458937ull}},
+{{371864498343625498ull, 139833890332295360ull, 1123038980331583481ull,
+ 2487426358427161836ull}},
+{{464830622929531872ull, 4786478381342757104ull, 1403798725414479351ull,
+ 3109282948033952295ull}},
+{{581038278661914840ull, 1371411958251058476ull,
+ 15589806462050262901ull, 3886603685042440368ull}},
+{{9586520961018472583ull, 3162975483120605499ull,
+ 9743629038781414313ull, 2429127303151525230ull}},
+{{7371465182845702825ull, 8565405372328144778ull,
+ 2956164261621992083ull, 3036409128939406538ull}},
+{{18437703515411904339ull, 6095070696982793068ull,
+ 12918577363882265912ull, 3795511411174258172ull}},
+{{2300192660277664404ull, 3809419185614245668ull,
+ 17297482889281192003ull, 2372194631983911357ull}},
+{{2875240825347080505ull, 150087963590419181ull, 7786795556319326292ull,
+ 2965243289979889197ull}},
+{{8205737050111238535ull, 187609954488023976ull,
+ 14345180463826545769ull, 3706554112474861496ull}},
+{{5128585656319524085ull, 11646471267623484745ull,
+ 8965737789891591105ull, 2316596320296788435ull}},
+{{11022418088826793010ull, 723031029247192219ull,
+ 6595486218937100978ull, 2895745400370985544ull}},
+{{9166336592606103358ull, 10127160823413766082ull,
+ 8244357773671376222ull, 3619681750463731930ull}},
+{{2234548703902853390ull, 3435578992412431795ull,
+ 1082075180234444470ull, 4524602188079664913ull}},
+{{17537494004435141033ull, 15982294925539933583ull,
+ 12205512033714997553ull, 2827876367549790570ull}},
+{{17310181487116538387ull, 6142810601642753267ull,
+ 6033518005288971134ull, 3534845459437238213ull}},
+{{17026040840468285079ull, 16901885288908217392ull,
+ 12153583525038601821ull, 4418556824296547766ull}},
+{{10641275525292678175ull, 12869521314781329822ull,
+ 2984303684721738234ull, 2761598015185342354ull}},
+{{4078222369761071910ull, 6863529606621886470ull,
+ 12953751642756948601ull, 3451997518981677942ull}},
+{{14321149999056115696ull, 13191098026704745991ull,
+ 6968817516591409943ull, 4314996898727097428ull}},
+{{15868247777051154166ull, 15161965294331548100ull,
+ 13578882984724407022ull, 2696873061704435892ull}},
+{{1388565647604391091ull, 9729084581059659318ull,
+ 16973603730905508778ull, 3371091327130544865ull}},
+{{10959079096360264672ull, 2937983689469798339ull,
+ 7381946608349722261ull, 4213864158913181082ull}},
+{{4543581426011471468ull, 4142082815132317914ull,
+ 9225402648645964317ull, 2633665099320738176ull}},
+{{14902848819369115143ull, 9789289537342785296ull,
+ 11531753310807455396ull, 3292081374150922720ull}},
+{{181816950501842313ull, 12236611921678481621ull,
+ 14414691638509319245ull, 4115101717688653400ull}},
+{{2419478603277345398ull, 9953725460262744965ull,
+ 9009182274068324528ull, 2571938573555408375ull}},
+{{7636034272524069651ull, 12442156825328431206ull,
+ 6649791824158017756ull, 3214923216944260469ull}},
+{{321670803800311256ull, 15552696031660539008ull,
+ 12923925798624910099ull, 4018654021180325586ull}},
+{{201044252375194535ull, 7414592010574142928ull,
+ 12689139642567956716ull, 2511658763237703491ull}},
+{{251305315468993169ull, 9268240013217678660ull,
+ 11249738534782557991ull, 3139573454047129364ull}},
+{{314131644336241461ull, 6973613998094710421ull,
+ 14062173168478197489ull, 3924466817558911705ull}},
+{{2502175286923844865ull, 15887723794877663773ull,
+ 1871329202657791574ull, 2452791760974319816ull}},
+{{7739405127082193985ull, 10636282706742303908ull,
+ 2339161503322239468ull, 3065989701217899770ull}},
+{{9674256408852742481ull, 13295353383427879885ull,
+ 12147323916007575143ull, 3832487126522374712ull}},
+{{8352253264746658003ull, 15227124892283506784ull,
+ 7592077447504734464ull, 2395304454076484195ull}},
+{{10440316580933322504ull, 587162041644831864ull,
+ 4878410790953530177ull, 2994130567595605244ull}},
+{{13050395726166653129ull, 5345638570483427734ull,
+ 6098013488691912721ull, 3742663209494506555ull}},
+{{3544811310426770302ull, 14870239152620612094ull,
+ 1505415421218751498ull, 2339164505934066597ull}},
+{{13654386174888238686ull, 9364426903920989309ull,
+ 6493455294950827277ull, 2923955632417583246ull}},
+{{3232924663328134645ull, 16317219648328624541ull,
+ 17340191155543309904ull, 3654944540521979057ull}},
+{{8652841847587556210ull, 1949780486701229060ull,
+ 7840180889146973669ull, 4568680675652473822ull}},
+{{14631398191596998439ull, 3524455813401962114ull,
+ 288427037289470639ull, 2855425422282796139ull}},
+{{9065875702641472241ull, 18240627822034616355ull,
+ 14195591851894002010ull, 3569281777853495173ull}},
+{{6720658609874452397ull, 13577412740688494636ull,
+ 3909431759585338801ull, 4461602222316868967ull}},
+{{13423783668026308556ull, 1568353935289227291ull,
+ 9360923877381918607ull, 2788501388948043104ull}},
+{{12168043566605497791ull, 15795500474393697826ull,
+ 11701154846727398258ull, 3485626736185053880ull}},
+{{5986682421402096431ull, 10521003556137346475ull,
+ 14626443558409247823ull, 4357033420231317350ull}},
+{{1435833504162616318ull, 13493156250226923403ull,
+ 4529841205578391985ull, 2723145887644573344ull}},
+{{15629849935485434109ull, 3031387257501490541ull,
+ 5662301506972989982ull, 3403932359555716680ull}},
+{{5702254364074628924ull, 13012606108731638985ull,
+ 7077876883716237477ull, 4254915449444645850ull}},
+{{15093124023615112838ull, 10438721827170968317ull,
+ 9035359070750036327ull, 2659322155902903656ull}},
+{{5031346974236727335ull, 8436716265536322493ull,
+ 11294198838437545409ull, 3324152694878629570ull}},
+{{10900869736223297073ull, 15157581350347791020ull,
+ 4894376511192155953ull, 4155190868598286963ull}},
+{{16036415621994336479ull, 2555959316326287531ull,
+ 753142310281403519ull, 2596994292873929352ull}},
+{{15433833509065532694ull, 17030007200690023126ull,
+ 941427887851754398ull, 3246242866092411690ull}},
+{{10068919849477140060ull, 12064136964007753100ull,
+ 10400156896669468806ull, 4057803582615514612ull}},
+{{15516446942777988345ull, 2928399584077457783ull,
+ 15723470097273193812ull, 2536127239134696632ull}},
+{{14783872660045097528ull, 3660499480096822229ull,
+ 1207593547881940649ull, 3170159048918370791ull}},
+{{4644782769774208197ull, 9187310368548415691ull,
+ 15344549990134589523ull, 3962698811147963488ull}},
+{{597146221895186172ull, 3436225971129065855ull, 9590343743834118452ull,
+ 2476686756967477180ull}},
+{{14581490832651146426ull, 4295282463911332318ull,
+ 11987929679792648065ull, 3095858446209346475ull}},
+{{9003491503959157225ull, 9980789098316553302ull,
+ 10373226081313422177ull, 3869823057761683094ull}},
+{{1015496171547085362ull, 17767208232516315574ull,
+ 1871580282393500956ull, 2418639411101051934ull}},
+{{10492742251288632510ull, 3762266216935842851ull,
+ 11562847389846652004ull, 3023299263876314917ull}},
+{{8504241795683402733ull, 4702832771169803564ull, 618501182026151293ull,
+ 3779124079845393647ull}},
+{{14538523159156902517ull, 5245113491194821179ull,
+ 7304092266407426414ull, 2361952549903371029ull}},
+{{13561467930518740242ull, 15779763900848302282ull,
+ 13741801351436670921ull, 2952440687379213786ull}},
+{{7728462876293649494ull, 5889646820778214141ull,
+ 7953879652441062844ull, 3690550859224017233ull}},
+{{7136132306897224886ull, 12904401299841159646ull,
+ 16500389828844134037ull, 2306594287015010770ull}},
+{{18143537420476306915ull, 2295443569519285845ull,
+ 11402115249200391739ull, 2883242858768763463ull}},
+{{8844363720313219932ull, 16704362517181271019ull,
+ 9640958043073101769ull, 3604053573460954329ull}},
+{{6443768631964137011ull, 7045395091194425062ull,
+ 16662883572268765116ull, 4505066966826192911ull}},
+{{17862413450259749344ull, 13626743968851291471ull,
+ 17331831260309060053ull, 2815666854266370569ull}},
+{{17716330794397298776ull, 3198371905781950627ull,
+ 7829731020104161355ull, 3519583567832963212ull}},
+{{17533727474569235565ull, 17833022937509601996ull,
+ 9787163775130201693ull, 4399479459791204015ull}},
+{{1735207634750996421ull, 13451482345157195200ull,
+ 13034506387097457914ull, 2749674662369502509ull}},
+{{2169009543438745526ull, 7590980894591718192ull,
+ 2458074928589658681ull, 3437093327961878137ull}},
+{{2711261929298431907ull, 14100412136667035644ull,
+ 7684279679164461255ull, 4296366659952347671ull}},
+{{10917910742666295750ull, 15730286613057979133ull,
+ 11720203827118870140ull, 2685229162470217294ull}},
+{{18259074446760257591ull, 1216114192612922300ull,
+ 5426882747043811868ull, 3356536453087771618ull}},
+{{4377098984740770373ull, 1520142740766152876ull,
+ 16006975470659540643ull, 4195670566359714522ull}},
+{{11959058902317757291ull, 17090990277474703211ull,
+ 14616045687589600805ull, 2622294103974821576ull}},
+{{10337137609469808710ull, 7528679791561215302ull,
+ 18270057109487001007ull, 3277867629968526970ull}},
+{{3698049974982485079ull, 4799163721024131224ull,
+ 13614199350003975451ull, 4097334537460658713ull}},
+{{2311281234364053175ull, 693634316426388063ull, 1591345566111402801ull,
+ 2560834085912911696ull}},
+{{16724159598237230180ull, 5478728913960372982ull,
+ 1989181957639253501ull, 3201042607391139620ull}},
+{{11681827460941761917ull, 11460097160877854132ull,
+ 2486477447049066876ull, 4001303259238924525ull}},
+{{16524514199943377007ull, 16385932762403434640ull,
+ 3859891413619360749ull, 2500814537024327828ull}},
+{{2208898676219669642ull, 6647357897722129589ull,
+ 4824864267024200937ull, 3126018171280409785ull}},
+{{7372809363701974956ull, 12920883390580049890ull,
+ 10642766352207639075ull, 3907522714100512231ull}},
+{{9219691870741122252ull, 5769709109898837229ull,
+ 13569257997770856278ull, 2442201696312820144ull}},
+{{16136300856853790719ull, 16435508424228322344ull,
+ 16961572497213570347ull, 3052752120391025180ull}},
+{{1723631997357686782ull, 15932699511858015027ull,
+ 2755221547807411318ull, 3815940150488781476ull}},
+{{17218171062844411903ull, 5346251176483871487ull,
+ 10945385504234407882ull, 2384962594055488422ull}},
+{{16911027810128126975ull, 15906186007459615167ull,
+ 4458359843438234044ull, 2981203242569360528ull}},
+{{16527098744232770815ull, 1435988435614967343ull,
+ 5572949804297792556ull, 3726504053211700660ull}},
+{{17246965742786563615ull, 10120864809114130397ull,
+ 12706465664540896155ull, 2329065033257312912ull}},
+{{7723649123201040807ull, 8039394992965275093ull,
+ 15883082080676120194ull, 2911331291571641140ull}},
+{{14266247422428688913ull, 825871704351818058ull,
+ 1407108527135598627ull, 3639164114464551426ull}},
+{{8609437241181085333ull, 14867397685721936285ull,
+ 10982257695774274091ull, 4548955143080689282ull}},
+{{7686741284951872285ull, 6986280544362516226ull,
+ 11475597078286309211ull, 2843096964425430801ull}},
+{{385054569335064548ull, 4121164662025757379ull, 509438292575722802ull,
+ 3553871205531788502ull}},
+{{14316376266950994397ull, 14374827864386972531ull,
+ 9860169902574429310ull, 4442339006914735627ull}},
+{{6641892157630677546ull, 4372581396814469928ull,
+ 3856763179895324367ull, 2776461879321709767ull}},
+{{8302365197038346933ull, 854040727590699506ull, 209267956441767555ull,
+ 3470577349152137209ull}},
+{{1154584459443157858ull, 14902608964770538095ull,
+ 4873270963979597347ull, 4338221686440171511ull}},
+{{7639144314793055517ull, 7008287593767892357ull,
+ 9963323380128330198ull, 2711388554025107194ull}},
+{{14160616411918707301ull, 17983731529064641254ull,
+ 3230782188305636939ull, 3389235692531383993ull}},
+{{8477398478043608318ull, 17867978392903413664ull,
+ 8650163753809434078ull, 4236544615664229991ull}},
+{{5298374048777255199ull, 6555800477137245636ull,
+ 12323881373771978155ull, 2647840384790143744ull}},
+{{6622967560971568998ull, 3583064577994169141ull,
+ 15404851717214972694ull, 3309800480987679680ull}},
+{{12890395469641849152ull, 13702202759347487234ull,
+ 809320572809164251ull, 4137250601234599601ull}},
+{{12668183186953543624ull, 6258033715378485569ull,
+ 12035040404074197417ull, 2585781625771624750ull}},
+{{2000170928409765818ull, 12434228162650494866ull,
+ 5820428468237970963ull, 3232227032214530938ull}},
+{{11723585697366983080ull, 10931099184885730678ull,
+ 16498907622152239512ull, 4040283790268163672ull}},
+{{2715555042426976521ull, 6831936990553581674ull,
+ 10311817263845149695ull, 2525177368917602295ull}},
+{{12617815839888496460ull, 3928235219764589188ull,
+ 8278085561379049215ull, 3156471711147002869ull}},
+{{15772269799860620574ull, 298608006278348581ull,
+ 14959292970151199423ull, 3945589638933753586ull}},
+{{12163511634126581811ull, 7104159031565049719ull,
+ 13961244124771887543ull, 2465993524333595991ull}},
+{{10592703524230839360ull, 4268512771028924245ull,
+ 12839869137537471525ull, 3082491905416994989ull}},
+{{17852565423715937104ull, 9947326982213543210ull,
+ 2214778366639675694ull, 3853114881771243737ull}},
+{{15769539408249848594ull, 1605393345456076602ull,
+ 12913451525218267069ull, 2408196801107027335ull}},
+{{10488552223457534934ull, 6618427700247483657ull,
+ 11530128388095445932ull, 3010246001383784169ull}},
+{{17722376297749306572ull, 8273034625309354571ull,
+ 577602429837143703ull, 3762807501729730212ull}},
+{{8770642176879622656ull, 12088175668459428463ull,
+ 9584373555502990622ull, 2351754688581081382ull}},
+{{6351616702672140415ull, 5886847548719509771ull,
+ 2757094907523962470ull, 2939693360726351728ull}},
+{{3327834859912787615ull, 16581931472754163022ull,
+ 3446368634404953087ull, 3674616700907939660ull}},
+{{13383165611745760327ull, 16115728322515315873ull,
+ 4307960793006191359ull, 4593270876134924575ull}},
+{{1446949479700018348ull, 16989859229213154277ull,
+ 9610004523269951455ull, 2870794297584327859ull}},
+{{6420372868052410839ull, 16625638018089054942ull,
+ 7400819635660051415ull, 3588492871980409824ull}},
+{{17248838121920289357ull, 16170361504183930773ull,
+ 9251024544575064269ull, 4485616089975512280ull}},
+{{13086366835413874800ull, 12412318949328650685ull,
+ 5781890340359415168ull, 2803510056234695175ull}},
+{{2522900488985179788ull, 15515398686660813357ull,
+ 2615676907021881056ull, 3504387570293368969ull}},
+{{7765311629658862639ull, 947504284616465080ull, 7881282152204739225ull,
+ 4380484462866711211ull}},
+{{4853319768536789150ull, 12121405223953760435ull,
+ 2619958335914268063ull, 2737802789291694507ull}},
+{{1454963692243598533ull, 10540070511514812640ull,
+ 17110005975174998791ull, 3422253486614618133ull}},
+{{1818704615304498166ull, 8563402120966127896ull,
+ 7552449413686584777ull, 4277816858268272667ull}},
+{{1136690384565311354ull, 16881341371672299695ull,
+ 2414437874340421533ull, 2673635536417670417ull}},
+{{15255921035988802904ull, 7266618659308210906ull,
+ 7629733361352914821ull, 3342044420522088021ull}},
+{{9846529258131227822ull, 13694959342562651537ull,
+ 14148852720118531430ull, 4177555525652610026ull}},
+{{17683295832400487149ull, 3947663570674269306ull,
+ 13454718968501470048ull, 2610972203532881266ull}},
+{{12880747753645833128ull, 4934579463342836633ull,
+ 7595026673772061752ull, 3263715254416101583ull}},
+{{2265876636775127698ull, 6168224329178545792ull,
+ 4882097323787689286ull, 4079644068020126979ull}},
+{{1416172897984454812ull, 17690198261018754832ull,
+ 745467818153611851ull, 2549777542512579362ull}},
+{{1770216122480568514ull, 17501061807846055636ull,
+ 10155206809546790622ull, 3187221928140724202ull}},
+{{2212770153100710643ull, 12652955222952793737ull,
+ 3470636475078712470ull, 3984027410175905253ull}},
+{{12912196391756413912ull, 3296410995918108181ull,
+ 4474990806137889246ull, 2490017131359940783ull}},
+{{2305187434413353678ull, 13343885781752411035ull,
+ 982052489244973653ull, 3112521414199925979ull}},
+{{16716542348298855809ull, 2844799171908350081ull,
+ 15062623666838380779ull, 3890651767749907473ull}},
+{{3530309940045703025ull, 17918900546938576465ull,
+ 2496610764132906130ull, 2431657354843692171ull}},
+{{9024573443484516685ull, 13175253646818444773ull,
+ 16955821510448296375ull, 3039571693554615213ull}},
+{{15892402822783033760ull, 11857381040095668062ull,
+ 7359718832778206757ull, 3799464616943269017ull}},
+{{5321065745812008196ull, 9716706159273486491ull,
+ 16129039316554848983ull, 2374665385589543135ull}},
+{{2039646163837622341ull, 7534196680664470210ull,
+ 15549613127266173325ull, 2968331731986928919ull}},
+{{11772929741651803734ull, 14029431869257975666ull,
+ 14825330390655328752ull, 3710414664983661149ull}},
+{{11969767106959765238ull, 8768394918286234791ull,
+ 11571674503373274422ull, 2319009165614788218ull}},
+{{10350522865272318644ull, 1737121611003017681ull,
+ 5241221092361817220ull, 2898761457018485273ull}},
+{{17549839600017786208ull, 2171402013753772101ull,
+ 11163212383879659429ull, 3623451821273106591ull}},
+{{8102241444740069048ull, 7325938535619603031ull,
+ 9342329461422186382ull, 4529314776591383239ull}},
+{{11981429930603625011ull, 18413769640044415606ull,
+ 12756484941029948344ull, 2830821735369614524ull}},
+{{5753415376399755456ull, 4570467976345967892ull,
+ 15945606176287435431ull, 3538527169212018155ull}},
+{{7191769220499694320ull, 1101398952005071961ull,
+ 15320321701931906385ull, 4423158961515022694ull}},
+{{16024070808880778710ull, 12217589391071639735ull,
+ 4963515045280053586ull, 2764474350946889184ull}},
+{{15418402492673585484ull, 6048614701984773861ull,
+ 6204393806600066983ull, 3455592938683611480ull}},
+{{5437945060559818142ull, 2949082359053579423ull,
+ 7755492258250083729ull, 4319491173354514350ull}},
+{{10316244690490968195ull, 13372391520476956899ull,
+ 235496642978914426ull, 2699681983346571469ull}},
+{{8283619844686322340ull, 7492117363741420316ull,
+ 4906056822151030937ull, 3374602479183214336ull}},
+{{10354524805857902925ull, 13976832723104163299ull,
+ 6132571027688788671ull, 4218253098979017920ull}},
+{{4165734994447495376ull, 15653049479581183918ull,
+ 3832856892305492919ull, 2636408186861886200ull}},
+{{14430540779914145028ull, 14954625831049091993ull,
+ 4791071115381866149ull, 3295510233577357750ull}},
+{{4203117919610517573ull, 4858224233529201280ull,
+ 15212210931082108495ull, 4119387791971697187ull}},
+{{2626948699756573483ull, 9953919173596832656ull,
+ 7201788822712623857ull, 2574617369982310742ull}},
+{{3283685874695716854ull, 17054084985423428724ull,
+ 18225608065245555629ull, 3218271712477888427ull}},
+{{4104607343369646067ull, 7482548176497122193ull,
+ 18170324063129556633ull, 4022839640597360534ull}},
+{{14094594635674498552ull, 16205807656379171130ull,
+ 6744766521028584991ull, 2514274775373350334ull}},
+{{8394871257738347382ull, 15645573552046576009ull,
+ 17654330188140507047ull, 3142843469216687917ull}},
+{{15105275090600322132ull, 14945280921630832107ull,
+ 8232854679893470097ull, 3928554336520859897ull}},
+{{7134953922411507380ull, 2423271548378188211ull,
+ 16674749221001888571ull, 2455346460325537435ull}},
+{{4307006384586996321ull, 16864147490754898976ull,
+ 16231750507824972809ull, 3069183075406921794ull}},
+{{5383757980733745402ull, 7245126308161460008ull,
+ 11066316097926440204ull, 3836478844258652243ull}},
+{{3364848737958590876ull, 13751575979455688313ull,
+ 4610604551990331175ull, 2397799277661657652ull}},
+{{8817746940875626499ull, 12577783955892222487ull,
+ 5763255689987913969ull, 2997249097077072065ull}},
+{{6410497657667145220ull, 1887171889583114397ull,
+ 11815755630912280366ull, 3746561371346340081ull}},
+{{6312404045255659715ull, 15014540486271610210ull,
+ 467318241679093372ull, 2341600857091462551ull}},
+{{17113877093424350451ull, 321431534129961146ull,
+ 14419205857381030428ull, 2927001071364328188ull}},
+{{12168974329925662256ull, 401789417662451433ull,
+ 18024007321726288035ull, 3658751339205410235ull}},
+{{1376159857124914108ull, 14337294827360228004ull,
+ 17918323133730472139ull, 4573439174006762794ull}},
+{{10083471947557847125ull, 6654966257886448550ull,
+ 15810637977008932991ull, 2858399483754226746ull}},
+{{3380967897592533099ull, 3707021803930672784ull,
+ 10539925434406390431ull, 3572999354692783433ull}},
+{{4226209871990666373ull, 22091236485953076ull, 17786592811435375943ull,
+ 4466249193365979291ull}},
+{{11864753206848942291ull, 6931336050444802528ull,
+ 8810777497933416012ull, 2791405745853737057ull}},
+{{14830941508561177864ull, 8664170063056003160ull,
+ 15625157890844157919ull, 3489257182317171321ull}},
+{{91932811991920714ull, 6218526560392616047ull, 5696389308273033687ull,
+ 4361571477896464152ull}},
+{{6974987035136032302ull, 10804108127886466885ull,
+ 3560243317670646054ull, 2725982173685290095ull}},
+{{13330419812347428282ull, 4281763123003307798ull,
+ 18285362202370471280ull, 3407477717106612618ull}},
+{{7439652728579509544ull, 5352203903754134748ull,
+ 13633330716108313292ull, 4259347146383265773ull}},
+{{13873154992216969273ull, 12568499476701110025ull,
+ 10826674706781389759ull, 2662091966489541108ull}},
+{{3506385684989047880ull, 11098938327448999628ull,
+ 13533343383476737199ull, 3327614958111926385ull}},
+{{4382982106236309849ull, 9261986890883861631ull,
+ 3081621174063757787ull, 4159518697639907982ull}},
+{{9656892844038775512ull, 3482898797588719567ull,
+ 15761071289072012329ull, 2599699186024942488ull}},
+{{7459430036621081486ull, 8965309515413287363ull,
+ 1254595037630463795ull, 3249623982531178111ull}},
+{{4712601527348963953ull, 6594950875839221300ull,
+ 15403301852320243456ull, 4062029978163972638ull}},
+{{12168747991447878279ull, 4121844297399513312ull,
+ 5015377639272764256ull, 2538768736352482899ull}},
+{{15210934989309847849ull, 5152305371749391640ull,
+ 1657536030663567416ull, 3173460920440603624ull}},
+{{566924662927758195ull, 6440381714686739551ull, 2071920038329459270ull,
+ 3966826150550754530ull}},
+{{7271856941970930728ull, 17860296626961375931ull,
+ 5906636042383299947ull, 2479266344094221581ull}},
+{{4478135159036275506ull, 17713684765274332010ull,
+ 11994981071406512838ull, 3099082930117776976ull}},
+{{14821040985650120190ull, 12918733919738139204ull,
+ 14993726339258141048ull, 3873853662647221220ull}},
+{{39778579176549311ull, 8074208699836337003ull, 147706925181562347ull,
+ 2421158539154513263ull}},
+{{13884781279252850351ull, 5481074856368033349ull,
+ 14019691711759116646ull, 3026448173943141578ull}},
+{{3520918543783899226ull, 16074715607314817495ull,
+ 8301242602844119999ull, 3783060217428926973ull}},
+{{9118103117506018872ull, 16964226282212842790ull,
+ 7494119635991268951ull, 2364412635893079358ull}},
+{{2174256860027747782ull, 16593596834338665584ull,
+ 144277508134310381ull, 2955515794866349198ull}},
+{{2717821075034684728ull, 6906937987641168268ull,
+ 9403718922022663785ull, 3694394743582936497ull}},
+{{10922010208751453763ull, 15846051288344199927ull,
+ 17406539372332634625ull, 2308996714739335310ull}},
+{{9040826742511929300ull, 5972506055148086197ull,
+ 12534802178561017474ull, 2886245893424169138ull}},
+{{15912719446567299529ull, 16689004605789883554ull,
+ 6445130686346496034ull, 3607807366780211423ull}},
+{{10667527271354348603ull, 11637883720382578635ull,
+ 3444727339505732139ull, 4509759208475264279ull}},
+{{4361361535382773925ull, 4967834316025417695ull,
+ 9070483614832164443ull, 2818599505297040174ull}},
+{{840015900801079502ull, 1598106876604384215ull, 2114732481685429746ull,
+ 3523249381621300218ull}},
+{{14885077931283513089ull, 11221005632610256076ull,
+ 11866787638961562990ull, 4404061727026625272ull}},
+{{79801670197419873ull, 2401442501954022144ull, 7416742274350976869ull,
+ 2752538579391640795ull}},
+{{99752087746774841ull, 7613489145869915584ull, 4659241824511333182ull,
+ 3440673224239550994ull}},
+{{124690109683468551ull, 293489395482618672ull, 15047424317493942286ull,
+ 4300841530299438742ull}},
+{{77931318552167845ull, 14018488927458800382ull, 4792954180006326024ull,
+ 2688025956437149214ull}},
+{{9320786185044985614ull, 17523111159323500477ull,
+ 15214564761862683338ull, 3360032445546436517ull}},
+{{16262668749733619921ull, 12680516912299599788ull,
+ 5183147897046190461ull, 4200040556933045647ull}},
+{{940795931728736643ull, 10231166079400943820ull,
+ 10156996463294950894ull, 2625025348083153529ull}},
+{{1175994914660920804ull, 3565585562396403967ull,
+ 17307931597546076522ull, 3281281685103941911ull}},
+{{15305051698608314716ull, 13680353989850280766ull,
+ 17023228478505207748ull, 4101602106379927389ull}},
+{{4953971293202808794ull, 17773593280511201287ull,
+ 12945360808279448794ull, 2563501316487454618ull}},
+{{1580778098076123088ull, 12993619563784225801ull,
+ 6958328973494535185ull, 3204376645609318273ull}},
+{{6587658641022541764ull, 2406966399448118539ull,
+ 13309597235295556886ull, 4005470807011647841ull}},
+{{1811443641425394651ull, 15339412054937237799ull,
+ 1400969244418641197ull, 2503419254382279901ull}},
+{{16099362607063907025ull, 5339207013389383536ull,
+ 6362897573950689401ull, 3129274067977849876ull}},
+{{1677459185120332166ull, 11285694785164117325ull,
+ 7953621967438361751ull, 3911592584972312345ull}},
+{{3354254999913901556ull, 13971088268368655184ull,
+ 16500228775717445854ull, 2444745365607695215ull}},
+{{4192818749892376944ull, 8240488298606043172ull,
+ 16013599951219419414ull, 3055931707009619019ull}},
+{{5241023437365471180ull, 1077238336402778157ull,
+ 15405313920596886364ull, 3819914633762023774ull}},
+{{5581482657567113440ull, 9896645997106512156ull,
+ 5016635181945666073ull, 2387446646101264859ull}},
+{{6976853321958891800ull, 16982493514810528099ull,
+ 1659107959004694687ull, 2984308307626581074ull}},
+{{4109380634021226846ull, 16616430875085772220ull,
+ 11297256985610644167ull, 3730385384533226342ull}},
+{{11791734933118042587ull, 17302798324569689493ull,
+ 2449099597579264700ull, 2331490865333266464ull}},
+{{904610611115389521ull, 3181753832002560251ull, 3061374496974080876ull,
+ 2914363581666583080ull}},
+{{14965821319176400613ull, 3977192290003200313ull,
+ 3826718121217601095ull, 3642954477083228850ull}},
+{{4872218593688337055ull, 359804344076612488ull,
+ 14006769688376777177ull, 4553693096354036062ull}},
+{{3045136621055210659ull, 11754092761116352565ull,
+ 4142545036808097831ull, 2846058185221272539ull}},
+{{8418106794746401228ull, 10080929932968052802ull,
+ 566495277582734385ull, 3557572731526590674ull}},
+{{1299261456578225727ull, 17212848434637453907ull,
+ 9931491133833193789ull, 4446965914408238342ull}},
+{{16952939474857248744ull, 13063873280862102643ull,
+ 1595495940218358214ull, 2779353696505148964ull}},
+{{16579488325144173025ull, 7106469564222852496ull,
+ 1994369925272947768ull, 3474192120631436205ull}},
+{{2277616332720664666ull, 8883086955278565621ull,
+ 7104648425018572614ull, 4342740150789295256ull}},
+{{3729353217164109368ull, 940243328621715609ull, 4440405265636607884ull,
+ 2714212594243309535ull}},
+{{9273377539882524614ull, 1175304160777144511ull, 938820563618371951ull,
+ 3392765742804136919ull}},
+{{6980035906425767863ull, 15304188256253594351ull,
+ 15008583759805128650ull, 4240957178505171148ull}},
+{{11280051469157186771ull, 14176803678585884373ull,
+ 156992813023429598ull, 2650598236565731968ull}},
+{{265006281164319751ull, 8497632561377579659ull, 196241016279286998ull,
+ 3313247795707164960ull}},
+{{14166315906737563401ull, 1398668664867198765ull,
+ 245301270349108748ull, 4141559744633956200ull}},
+{{11159790450924671078ull, 10097539952396775036ull,
+ 153313293968192967ull, 2588474840396222625ull}},
+{{13949738063655838847ull, 8010238922068580891ull,
+ 4803327635887629113ull, 3235593550495278281ull}},
+{{12825486561142410655ull, 14624484671013114018ull,
+ 10615845563286924295ull, 4044491938119097851ull}},
+{{12627615119141394564ull, 16057831947024278117ull,
+ 4329060467840633732ull, 2527807461324436157ull}},
+{{1949460843644579492ull, 1625545860070796031ull,
+ 10023011603228180070ull, 3159759326655545196ull}},
+{{16271884109837888077ull, 11255304361943270846ull,
+ 12528764504035225087ull, 3949699158319431495ull}},
+{{5558241550221292144ull, 13952094253855626135ull,
+ 14748006842663097535ull, 2468561973949644684ull}},
+{{2336115919349227276ull, 12828431798892144765ull,
+ 18435008553328871919ull, 3085702467437055855ull}},
+{{7531830917613921999ull, 11423853730187793052ull,
+ 18432074673233701995ull, 3857128084296319819ull}},
+{{13930766360363477058ull, 4834065572153676705ull,
+ 9214203661557369795ull, 2410705052685199887ull}},
+{{3578399895172182610ull, 1430895946764707978ull,
+ 6906068558519324340ull, 3013381315856499859ull}},
+{{13696371905820004071ull, 1788619933455884972ull,
+ 4020899679721767521ull, 3766726644820624824ull}},
+{{17783604477992278352ull, 12647102504478397867ull,
+ 2513062299826104700ull, 2354204153012890515ull}},
+{{17617819579062960036ull, 15808878130597997334ull,
+ 16976385930064794587ull, 2942755191266113143ull}},
+{{12798902436973924237ull, 15149411644820108764ull,
+ 16608796394153605330ull, 3678443989082641429ull}},
+{{15998628046217405296ull, 9713392519170360147ull,
+ 6925937437409842951ull, 4598054986353301787ull}},
+{{7693299519672184358ull, 12988399352122556948ull,
+ 2022867889167457892ull, 2873784366470813617ull}},
+{{9616624399590230448ull, 16235499190153196185ull,
+ 7140270879886710269ull, 3592230458088517021ull}},
+{{16632466517915175964ull, 6459315932409331519ull,
+ 13537024618285775741ull, 4490288072610646276ull}},
+{{17312820601338066834ull, 6342915466969526151ull,
+ 17684012423283385646ull, 2806430045381653922ull}},
+{{17029339733245195638ull, 17152016370566683497ull,
+ 12881643492249456249ull, 3508037556727067403ull}},
+{{7451616611274330835ull, 7604962407926190660ull,
+ 11490368346884432408ull, 4385046945908834254ull}},
+{{13880632418901232580ull, 4753101504953869162ull,
+ 2569794198375382351ull, 2740654341193021409ull}},
+{{8127418486771764917ull, 1329690862764948549ull,
+ 7823928766396615843ull, 3425817926491276761ull}},
+{{14770959126892094050ull, 15497171633738349398ull,
+ 14391596976423157707ull, 4282272408114095951ull}},
+{{4620163435880170878ull, 7379889261872774422ull,
+ 15912277137905555423ull, 2676420255071309969ull}},
+{{14998576331704989405ull, 4613175558913580123ull,
+ 6055288367099780567ull, 3345525318839137462ull}},
+{{14136534396203848852ull, 1154783430214587250ull,
+ 16792482495729501517ull, 4181906648548921827ull}},
+{{13447020016054793437ull, 3027582653097810983ull,
+ 8189458550617244496ull, 2613691655343076142ull}},
+{{12197089001641103892ull, 3784478316372263729ull,
+ 1013451151416779812ull, 3267114569178845178ull}},
+{{1411303196769216152ull, 4730597895465329662ull,
+ 10490185976125750573ull, 4083893211473556472ull}},
+{{14717122553262923807ull, 5262466693879524990ull,
+ 6556366235078594108ull, 2552433257170972795ull}},
+{{9173031154723878951ull, 6578083367349406238ull,
+ 3583771775420854731ull, 3190541571463715994ull}},
+{{2242916906550072881ull, 3610918190759369894ull,
+ 13703086756130844222ull, 3988176964329644992ull}},
+{{15236881121875959263ull, 16091881924506769895ull,
+ 8564429222581777638ull, 2492610602706028120ull}},
+{{14434415383917561174ull, 10891480368778686561ull,
+ 10705536528227222048ull, 3115763253382535150ull}},
+{{4207961174614787756ull, 13614350460973358202ull,
+ 4158548623429251752ull, 3894704066728168938ull}},
+{{7241661752561630252ull, 8508969038108348876ull,
+ 7210778908070670249ull, 2434190041705105586ull}},
+{{9052077190702037814ull, 15247897316062823999ull,
+ 18236845671943113619ull, 3042737552131381982ull}},
+{{6703410469950159364ull, 14448185626651142095ull,
+ 13572685053074116216ull, 3803421940164227478ull}},
+{{11107160571359931459ull, 9030116016656963809ull,
+ 3871242139743934731ull, 2377138712602642174ull}},
+{{48892658917750611ull, 6675959002393816858ull, 14062424711534694222ull,
+ 2971423390753302717ull}},
+{{9284487860501964072ull, 17568320789847046880ull,
+ 3742972834136204065ull, 3714279238441628397ull}},
+{{5802804912813727545ull, 4062671466013322444ull,
+ 4645201030548821493ull, 2321424524026017748ull}},
+{{7253506141017159431ull, 9690025350944040959ull,
+ 5806501288186026866ull, 2901780655032522185ull}},
+{{4455196657844061385ull, 2889159651825275391ull,
+ 11869812628659921487ull, 3627225818790652731ull}},
+{{957309803877688827ull, 17446507620063757951ull,
+ 10225579767397513954ull, 4534032273488315914ull}},
+{{7515847655064637373ull, 15515753280967236623ull,
+ 11002673373050834125ull, 2833770170930197446ull}},
+{{4783123550403408812ull, 5559633545926882067ull,
+ 4529969679458766849ull, 3542212713662746808ull}},
+{{1367218419576873111ull, 11561227950835990488ull,
+ 5662462099323458561ull, 4427765892078433510ull}},
+{{854511512235545695ull, 308238441631412199ull, 17374096867359325313ull,
+ 2767353682549020943ull}},
+{{14903197445576595830ull, 4996984070466653152ull,
+ 17105935065771768737ull, 3459192103186276179ull}},
+{{182252733261193171ull, 10857916106510704345ull,
+ 16770732813787323017ull, 4323990128982845224ull}},
+{{11643123004356715492ull, 18315412612637659975ull,
+ 10481708008617076885ull, 2702493830614278265ull}},
+{{9942217737018506461ull, 9059207710514911257ull,
+ 17713821029198734011ull, 3378117288267847831ull}},
+{{17039458189700520980ull, 6712323619716251167ull,
+ 17530590268071029610ull, 4222646610334809789ull}},
+{{17567190396203907469ull, 8806888280750044883ull,
+ 13262461926758087458ull, 2639154131459256118ull}},
+{{17347301976827496432ull, 1785238314082780296ull,
+ 7354705371592833515ull, 3298942664324070148ull}},
+{{3237383397324818924ull, 16066605947885639083ull,
+ 9193381714491041893ull, 4123678330405087685ull}},
+{{18164265687823869492ull, 12347471726642218378ull,
+ 8051706580770595135ull, 2577298956503179803ull}},
+{{13481960072925061056ull, 10822653639875385069ull,
+ 5452947207535856015ull, 3221623695628974754ull}},
+{{3017392035874162608ull, 8916631031416843433ull,
+ 16039556046274595827ull, 4027029619536218442ull}},
+{{13415085068489821390ull, 3267051385421833193ull,
+ 14636408547349010296ull, 2516893512210136526ull}},
+{{2933798280330113026ull, 4083814231777291492ull,
+ 9072138647331487062ull, 3146116890262670658ull}},
+{{3667247850412641282ull, 14328139826576390173ull,
+ 2116801272309583019ull, 3932646112828338323ull}},
+{{4597872915721594754ull, 6649244382396549906ull,
+ 17463901859689347051ull, 2457903820517711451ull}},
+{{14970713181506769250ull, 3699869459568299478ull,
+ 17218191306184295910ull, 3072379775647139314ull}},
+{{9490019440028685754ull, 13848208861315150156ull,
+ 12299367095875594079ull, 3840474719558924143ull}},
+{{15154634186872704405ull, 15572659565963050703ull,
+ 14604633462563328155ull, 2400296699724327589ull}},
+{{14331606715163492602ull, 14854138439026425475ull,
+ 4420733772921996482ull, 3000370874655409487ull}},
+{{13302822375526977848ull, 9344301011928256036ull,
+ 914231197725107699ull, 3750463593319261859ull}},
+{{17537636021559136963ull, 3534345123241466070ull,
+ 16712295563074049976ull, 2344039745824538661ull}},
+{{12698672990094145396ull, 4417931404051832588ull,
+ 7055311398560398758ull, 2930049682280673327ull}},
+{{15873341237617681745ull, 14745786291919566543ull,
+ 4207453229773110543ull, 3662562102850841659ull}},
+{{15229990528594714277ull, 13820546846472070275ull,
+ 647630518789000275ull, 4578202628563552074ull}},
+{{7212901071158002471ull, 6331998769831349970ull,
+ 5016455092670513076ull, 2861376642852220046ull}},
+{{18239498375802278897ull, 7914998462289187462ull,
+ 15493940902692917153ull, 3576720803565275057ull}},
+{{13576000932898072813ull, 14505434096288872232ull,
+ 5532368073083982729ull, 4470901004456593822ull}},
+{{8485000583061295508ull, 2148367282539463289ull,
+ 17292788100959652918ull, 2794313127785371138ull}},
+{{15217936747254007289ull, 11908831140029104919ull,
+ 12392613089344790339ull, 3492891409731713923ull}},
+{{14410734915640121207ull, 10274352906608993245ull,
+ 10879080343253600020ull, 4366114262164642404ull}},
+{{11312552331488769707ull, 15644842603485396586ull,
+ 16022797251388275820ull, 2728821413852901502ull}},
+{{4917318377506186325ull, 1109309180647194117ull,
+ 10805124527380568968ull, 3411026767316126878ull}},
+{{10758333990310120811ull, 1386636475808992646ull,
+ 4283033622370935402ull, 4263783459145158598ull}},
+{{2112272725516437603ull, 5478333815808008308ull,
+ 16511954069263998338ull, 2664864661965724123ull}},
+{{2640340906895547003ull, 16071289306614786193ull,
+ 16028256568152610018ull, 3331080827457155154ull}},
+{{7912112152046821658ull, 10865739596413706933ull,
+ 10811948673335986715ull, 4163851034321443943ull}},
+{{7250913104242957488ull, 4485244238544872881ull,
+ 13674996948476073553ull, 2602406896450902464ull}},
+{{13675327398731084764ull, 10218241316608479005ull,
+ 17093746185595091941ull, 3253008620563628080ull}},
+{{3259101193131692243ull, 17384487664187986661ull,
+ 2920438658284313310ull, 4066260775704535101ull}},
+{{4342781254921001604ull, 6253618771690103759ull,
+ 4131117170641389771ull, 2541412984815334438ull}},
+{{816790550223864101ull, 3205337446185241795ull,
+ 14387268500156513022ull, 3176766231019168047ull}},
+{{14856046243061993839ull, 13230043844586328051ull,
+ 13372399606768253373ull, 3970957788773960059ull}},
+{{6979185892700052197ull, 10574620412080148984ull,
+ 6051906745016464406ull, 2481848617983725037ull}},
+{{8723982365875065246ull, 3994903478245410422ull,
+ 12176569449697968412ull, 3102310772479656296ull}},
+{{1681605920489055750ull, 4993629347806763028ull,
+ 15220711812122460515ull, 3877888465599570370ull}},
+{{10274375737160435652ull, 815175333165532940ull,
+ 14124630901003925726ull, 2423680290999731481ull}},
+{{12842969671450544565ull, 10242341203311691983ull,
+ 3820730570972743445ull, 3029600363749664352ull}},
+{{11442026070885792802ull, 17414612522567002883ull,
+ 4775913213715929306ull, 3787000454687080440ull}},
+{{4845423285089926549ull, 15495818845031764706ull,
+ 2984945758572455816ull, 2366875284179425275ull}},
+{{15280151143217183995ull, 923029482580154266ull,
+ 17566240253497733483ull, 2958594105224281593ull}},
+{{9876816892166704185ull, 14988844908507356545ull,
+ 8122742261590003141ull, 3698242631530351992ull}},
+{{17702225603672659876ull, 11673871077030791792ull,
+ 5076713913493751963ull, 2311401644706469995ull}},
+{{3681037930881273229ull, 9980652827861101837ull,
+ 1734206373439802050ull, 2889252055883087494ull}},
+{{9212983432028979440ull, 3252443997971601488ull,
+ 11391130003654528371ull, 3611565069853859367ull}},
+{{11516229290036224299ull, 17900613052746665572ull,
+ 9627226486140772559ull, 4514456337317324209ull}},
+{{16421015343127415995ull, 18105412185607747838ull,
+ 17546231599906452609ull, 2821535210823327630ull}},
+{{11302897142054494186ull, 8796707176727521086ull,
+ 12709417463028289954ull, 3526919013529159538ull}},
+{{4905249390713341924ull, 1772511934054625550ull,
+ 6663399791930586635ull, 4408648766911449423ull}},
+{{16900838924478002415ull, 17248721023279998632ull,
+ 11082153897597698502ull, 2755405479319655889ull}},
+{{2679304581887951403ull, 12337529242245222483ull, 17634316714959416ull,
+ 3444256849149569862ull}},
+{{17184188782642102965ull, 15421911552806528103ull,
+ 9245414932748475078ull, 4305321061436962327ull}},
+{{17657647016792396209ull, 5027008702076692160ull,
+ 12695913360608878780ull, 2690825663398101454ull}},
+{{3625314697280943646ull, 6283760877595865201ull,
+ 6646519663906322667ull, 3363532079247626818ull}},
+{{9143329390028567461ull, 3243015078567443597ull,
+ 17531521616737679142ull, 4204415099059533522ull}},
+{{8020423877981548615ull, 15861942479386815960ull,
+ 15568887028888437367ull, 2627759436912208451ull}},
+{{10025529847476935769ull, 15215742080806132046ull,
+ 14849422767683158805ull, 3284699296140260564ull}},
+{{3308540272491393903ull, 5184619545725501346ull, 115034385894396891ull,
+ 4105874120175325706ull}},
+{{6679523688734509094ull, 934544206864744389ull, 4683582509611385961ull,
+ 2566171325109578566ull}},
+{{12961090629345524271ull, 5779866277008318390ull,
+ 15077850173869008259ull, 3207714156386973207ull}},
+{{6977991249827129530ull, 2613146827833010084ull,
+ 14235626698908872420ull, 4009642695483716509ull}},
+{{13584616567996731765ull, 10856588804250407110ull,
+ 11203109696031739214ull, 2506026684677322818ull}},
+{{7757398673141138898ull, 4347363968458233080ull,
+ 4780515083184898210ull, 3132533355846653523ull}},
+{{9696748341426423622ull, 14657576997427567158ull,
+ 1363957835553734858ull, 3915666694808316904ull}},
+{{1448781694964126860ull, 13772671641819617378ull,
+ 852473647221084286ull, 2447291684255198065ull}},
+{{11034349155559934383ull, 7992467515419745914ull,
+ 5677278077453743262ull, 3059114605318997581ull}},
+{{4569564407595142170ull, 767212357419906585ull,
+ 11708283615244566982ull, 3823893256648746976ull}},
+{{14385192800815433617ull, 14314565778669605327ull,
+ 7317677259527854363ull, 2389933285405466860ull}},
+{{13369804982591904117ull, 13281521204909618755ull,
+ 9147096574409817954ull, 2987416606756833575ull}},
+{{12100570209812492242ull, 7378529469282247636ull,
+ 6822184699584884539ull, 3734270758446041969ull}},
+{{16786228417987583459ull, 2305737909087710820ull,
+ 15793080483309022597ull, 2333919224028776230ull}},
+{{2536041448774927708ull, 7493858404787026430ull,
+ 10517978567281502438ull, 2917399030035970288ull}},
+{{12393423847823435443ull, 143950969129007229ull,
+ 13147473209101878048ull, 3646748787544962860ull}},
+{{1656721754497130592ull, 179938711411259037ull,
+ 16434341511377347560ull, 4558435984431203575ull}},
+{{3341294105774400572ull, 112461694632036898ull,
+ 17188992472251924081ull, 2849022490269502234ull}},
+{{13399989669072776523ull, 4752263136717434026ull,
+ 12262868553460129293ull, 3561278112836877793ull}},
+{{7526615049486194845ull, 10552014939324180437ull,
+ 1493527636542997904ull, 4451597641046097242ull}},
+{{7009977415142565731ull, 6595009337077612773ull,
+ 5545140791266761594ull, 2782248525653810776ull}},
+{{13374157787355595067ull, 17467133708201791774ull,
+ 6931425989083451992ull, 3477810657067263470ull}},
+{{7494325197339718026ull, 3387173061542688102ull,
+ 17887654523209090799ull, 4347263321334079337ull}},
+{{72267229909935862ull, 9034512191105261920ull, 4262255049364599893ull,
+ 2717039575833799586ull}},
+{{90334037387419828ull, 15904826257308965304ull,
+ 14551190848560525674ull, 3396299469792249482ull}},
+{{112917546734274784ull, 10657660784781430822ull,
+ 8965616523845881285ull, 4245374337240311853ull}},
+{{13905631521991085452ull, 8966880999702088215ull,
+ 7909353336617369755ull, 2653358960775194908ull}},
+{{12770353384061468911ull, 6596915231200222365ull,
+ 9886691670771712194ull, 3316698700968993635ull}},
+{{2127883674794672427ull, 17469516075855053765ull,
+ 7746678570037252338ull, 4145873376211242044ull}},
+{{3635770305960364219ull, 15530133565836796507ull,
+ 14065046143128058519ull, 2591170860132026277ull}},
+{{18379770937732618986ull, 14800980938868607729ull,
+ 3746249623627909437ull, 3238963575165032847ull}},
+{{9139655616883610020ull, 4666168118303595950ull, 71126011107498893ull,
+ 4048704468956291059ull}},
+{{1100598742124868359ull, 5222198083153441421ull,
+ 16185354821438044472ull, 2530440293097681911ull}},
+{{5987434446083473352ull, 6527747603941801776ull,
+ 15620007508370167686ull, 3163050366372102389ull}},
+{{7484293057604341690ull, 17383056541782028028ull,
+ 5689951330180545895ull, 3953812957965127987ull}},
+{{13901055197857489365ull, 17781939366254849373ull,
+ 1250376572149147232ull, 2471133098728204992ull}},
+{{3541260942039697994ull, 3780680134109010101ull,
+ 1562970715186434041ull, 3088916373410256240ull}},
+{{9038262195977010396ull, 9337536186063650530ull,
+ 1953713393983042551ull, 3861145466762820300ull}},
+{{10260599890913019402ull, 12753489143930863437ull,
+ 10444442908094177402ull, 2413215916726762687ull}},
+{{17437435882068662156ull, 6718489393058803488ull,
+ 8443867616690333849ull, 3016519895908453359ull}},
+{{3350050778876276079ull, 13009797759750892265ull,
+ 5943148502435529407ull, 3770649869885566699ull}},
+{{13622996782866142309ull, 15048652627485389521ull,
+ 1408624804808511927ull, 2356656168678479187ull}},
+{{3193687923300514175ull, 14199129765929348998ull,
+ 15595839061292803621ull, 2945820210848098983ull}},
+{{13215481940980418526ull, 3913854152129522535ull,
+ 14883112808188616623ull, 3682275263560123729ull}},
+{{11907666407798135254ull, 280631671734515265ull,
+ 4768832954953607067ull, 4602844079450154662ull}},
+{{524762477232752678ull, 16316295859329929705ull,
+ 16815578652128168128ull, 2876777549656346663ull}},
+{{5267639114968328751ull, 1948625750452860515ull,
+ 16407787296732822257ull, 3595971937070433329ull}},
+{{1972862875283023035ull, 7047468206493463548ull,
+ 6674676065633864109ull, 4494964921338041662ull}},
+{{10456411333906665205ull, 6710510638272108669ull,
+ 18006730596303328780ull, 2809353075836276038ull}},
+{{17682200185810719410ull, 8388138297840135836ull,
+ 13285041208524385167ull, 3511691344795345048ull}},
+{{3656006158553847646ull, 5873486853872781892ull,
+ 16606301510655481459ull, 4389614180994181310ull}},
+{{11508375885950930587ull, 1365086274456794730ull,
+ 5767252425732288008ull, 2743508863121363319ull}},
+{{5162097820583887426ull, 1706357843070993413ull,
+ 2597379513737972106ull, 3429386078901704149ull}},
+{{11064308294157247186ull, 11356319340693517574ull,
+ 7858410410599853036ull, 4286732598627130186ull}},
+{{2303506665420891588ull, 16321071624788224292ull,
+ 9523192525052296051ull, 2679207874141956366ull}},
+{{2879383331776114484ull, 15789653512557892461ull,
+ 2680618619460594256ull, 3349009842677445458ull}},
+{{8210915183147531009ull, 1290322816987813960ull,
+ 12574145311180518629ull, 4186262303346806822ull}},
+{{5131821989467206881ull, 3112294769831077677ull,
+ 3247154801060436239ull, 2616413939591754264ull}},
+{{11026463505261396505ull, 17725426517571010808ull,
+ 4058943501325545298ull, 3270517424489692830ull}},
+{{13783079381576745631ull, 12933411110108987702ull,
+ 14297051413511707431ull, 4088146780612116037ull}},
+{{4002738595058078116ull, 15000910971459199170ull,
+ 11241500142658511096ull, 2555091737882572523ull}},
+{{14226795280677373453ull, 304394640614447346ull,
+ 9440189159895750967ull, 3193864672353215654ull}},
+{{8560122063991941008ull, 14215551356050222895ull,
+ 2576864413014912900ull, 3992330840441519568ull}},
+{{12267605317636044986ull, 18108091634386165117ull,
+ 1610540258134320562ull, 2495206775275949730ull}},
+{{1499448591762892520ull, 13411742506127930589ull,
+ 11236547359522676511ull, 3119008469094937162ull}},
+{{6485996758131003554ull, 12152992114232525332ull,
+ 4822312162548569831ull, 3898760586368671453ull}},
+{{13277120010686653030ull, 14513149099036410188ull,
+ 5319788110806550096ull, 2436725366480419658ull}},
+{{16596400013358316287ull, 18141436373795512735ull,
+ 15873107175362963428ull, 3045906708100524572ull}},
+{{16133813998270507454ull, 4230051393534839303ull,
+ 1394639895494152670ull, 3807383385125655716ull}},
+{{17001162776560149015ull, 16478840176241438276ull,
+ 10095021971538621226ull, 2379614615703534822ull}},
+{{2804709396990634653ull, 11375178183447022038ull,
+ 3395405427568500725ull, 2974518269629418528ull}},
+{{12729258783093069124ull, 383914674026613835ull,
+ 4244256784460625907ull, 3718147837036773160ull}},
+{{5649943730219474251ull, 16380847735762491311ull,
+ 2652660490287891191ull, 2323842398147983225ull}},
+{{2450743644346954909ull, 15864373651275726235ull,
+ 7927511631287251893ull, 2904802997684979031ull}},
+{{16898487610715857348ull, 5995409008812494081ull,
+ 5297703520681676963ull, 3631003747106223789ull}},
+{{7288051458112657973ull, 2882575242588229698ull,
+ 11233815419279484108ull, 4538754683882779736ull}},
+{{9166718179747799137ull, 11024981563472419369ull,
+ 7021134637049677567ull, 2836721677426737335ull}},
+{{16070083743112136826ull, 9169540935913136307ull,
+ 4164732277884709055ull, 3545902096783421669ull}},
+{{15475918660462783128ull, 6850240151464032480ull,
+ 9817601365783274223ull, 4432377620979277086ull}},
+{{9672449162789239455ull, 11198929122306102156ull,
+ 1524314835187158485ull, 2770236013112048179ull}},
+{{12090561453486549319ull, 163603347600463983ull,
+ 15740451599266111819ull, 3462795016390060223ull}},
+{{10501515798430798745ull, 14039562239782743691ull,
+ 15063878480655251869ull, 4328493770487575279ull}},
+{{4257604364805555264ull, 11080569409077908759ull,
+ 16332453078050614274ull, 2705308606554734549ull}},
+{{710319437579556175ull, 4627339724492610141ull, 6580508292281104131ull,
+ 3381635758193418187ull}},
+{{5499585315401833123ull, 1172488637188374772ull,
+ 3613949346923992260ull, 4227044697741772734ull}},
+{{12660612858980921510ull, 9956177435097510040ull,
+ 16093776397109658874ull, 2641902936088607958ull}},
+{{15825766073726151887ull, 3221849757017111742ull,
+ 10893848459532297785ull, 3302378670110759948ull}},
+{{10558835555302914051ull, 8638998214698777582ull,
+ 13617310574415372231ull, 4127973337638449935ull}},
+{{1987586203636933378ull, 12316902911827817845ull,
+ 15428348136650689500ull, 2579983336024031209ull}},
+{{7096168772973554627ull, 15396128639784772306ull,
+ 5450377115531198163ull, 3224979170030039012ull}},
+{{18093583003071719091ull, 14633474781303577478ull,
+ 6812971394413997704ull, 4031223962537548765ull}},
+{{6696803358492436528ull, 9145921738314735924ull,
+ 6563950130722442517ull, 2519514976585967978ull}},
+{{8371004198115545660ull, 16044088191320807809ull,
+ 17428309700257828954ull, 3149393720732459972ull}},
+{{15075441266071819979ull, 10831738202296233953ull,
+ 3338643051612734577ull, 3936742150915574966ull}},
+{{2504621763653805631ull, 18299051422503615981ull,
+ 15921709962540122822ull, 2460463844322234353ull}},
+{{7742463222994644943ull, 13650442241274744168ull,
+ 6067079397892989816ull, 3075579805402792942ull}},
+{{9678079028743306178ull, 17063052801593430210ull,
+ 16807221284221013078ull, 3844474756753491177ull}},
+{{10660485411391954266ull, 6052721982568505977ull,
+ 3586984274997051318ull, 2402796722970931986ull}},
+{{17937292782667330736ull, 16789274515065408279ull,
+ 13707102380601089955ull, 3003495903713664982ull}},
+{{17809929959906775516ull, 16374907125404372445ull,
+ 7910505938896586636ull, 3754369879642081228ull}},
+{{13437049234155428649ull, 1010944916522956970ull,
+ 14167438248665142456ull, 2346481174776300767ull}},
+{{7572939505839510004ull, 1263681145653696213ull,
+ 13097611792404040166ull, 2933101468470375959ull}},
+{{14077860400726775408ull, 10802973468921896074ull,
+ 11760328722077662303ull, 3666376835587969949ull}},
+{{8373953464053693452ull, 8892030817724982189ull, 865352847314914167ull,
+ 4582971044484962437ull}},
+{{7539563924247252360ull, 12475048288719195724ull,
+ 2846688538785515306ull, 2864356902803101523ull}},
+{{9424454905309065450ull, 6370438324044218847ull,
+ 17393418728764057845ull, 3580446128503876903ull}},
+{{7168882613208943908ull, 12574733923482661463ull,
+ 17130087392527684402ull, 4475557660629846129ull}},
+{{11398080660896671799ull, 12470894720604051318ull,
+ 3788775592688720895ull, 2797223537893653831ull}},
+{{5024228789266063940ull, 10976932382327676244ull,
+ 124283472433513215ull, 3496529422367067289ull}},
+{{6280285986582579925ull, 9109479459482207401ull,
+ 4767040358969279423ull, 4370661777958834111ull}},
+{{15454393787682582214ull, 12610953689817461481ull,
+ 9896929251996881495ull, 2731663611224271319ull}},
+{{5482934179321064055ull, 11152006093844438948ull,
+ 7759475546568713965ull, 3414579514030339149ull}},
+{{6853667724151330068ull, 104949562023384973ull,
+ 14311030451638280361ull, 4268224392537923936ull}},
+{{6589385336808275245ull, 11594808522333085368ull,
+ 8944394032273925225ull, 2667640245336202460ull}},
+{{8236731671010344056ull, 658452597634192998ull,
+ 11180492540342406532ull, 3334550306670253075ull}},
+{{1072542551908154262ull, 823065747042741248ull, 9363929657000620261ull,
+ 4168187883337816344ull}},
+{{670339094942596414ull, 2820259101115407232ull, 5852456035625387663ull,
+ 2605117427086135215ull}},
+{{837923868678245517ull, 17360381931676422752ull,
+ 2703884026104346674ull, 3256396783857669019ull}},
+{{1047404835847806896ull, 12477105377740752632ull,
+ 17214913087912597055ull, 4070495979822086273ull}},
+{{654628022404879310ull, 14715719888729052251ull,
+ 3841791652304291303ull, 2544059987388803921ull}},
+{{14653343083288262850ull, 13782963842483927409ull,
+ 9413925583807752033ull, 3180074984236004901ull}},
+{{4481620798828164850ull, 3393646747822745550ull,
+ 16379092998187077946ull, 3975093730295006126ull}},
+{{16636071054549766744ull, 6732715235816603872ull,
+ 5625247105439535812ull, 2484433581434378829ull}},
+{{2348344744477656813ull, 8415894044770754841ull,
+ 11643244900226807669ull, 3105541976792973536ull}},
+{{7547116949024458921ull, 15131553574390831455ull,
+ 14554056125283509586ull, 3881927470991216920ull}},
+{{11634477120781368682ull, 14068907002421657563ull,
+ 9096285078302193491ull, 2426204669369510575ull}},
+{{9931410382549322948ull, 12974447734599684050ull,
+ 6758670329450353960ull, 3032755836711888219ull}},
+{{3190890941331877877ull, 16218059668249605063ull,
+ 3836651893385554546ull, 3790944795889860274ull}},
+{{8911835865973505529ull, 14747973311083391068ull,
+ 7009593451793359495ull, 2369340497431162671ull}},
+{{11139794832466881911ull, 13823280620426850931ull,
+ 4150305796314311465ull, 2961675621788953339ull}},
+{{9313057522156214485ull, 3444042720251399952ull, 576196226965501428ull,
+ 3702094527236191674ull}},
+{{5820660951347634053ull, 11375898737011900778ull,
+ 4971808660280826296ull, 2313809079522619796ull}},
+{{16499198226039318374ull, 14219873421264875972ull,
+ 6214760825351032870ull, 2892261349403274745ull}},
+{{2177253708839596352ull, 8551469739726319158ull,
+ 12380137050116178992ull, 3615326686754093431ull}},
+{{11944939172904271248ull, 10689337174657898947ull,
+ 10863485294217835836ull, 4519158358442616789ull}},
+{{5159743973851475578ull, 15904207771015962650ull,
+ 9095521318099841349ull, 2824473974026635493ull}},
+{{15673052004169120280ull, 6045201658487789600ull,
+ 15981087666052189591ull, 3530592467533294366ull}},
+{{1144570931501848734ull, 2944816054682349097ull,
+ 10752987545710461181ull, 4413240584416617958ull}},
+{{12244571878257125219ull, 4146353043390162137ull,
+ 2108931197641650334ull, 2758275365260386224ull}},
+{{1470656792539242812ull, 14406313341092478480ull,
+ 2636163997052062917ull, 3447844206575482780ull}},
+{{1838320990674053515ull, 4172833621083434388ull,
+ 3295204996315078647ull, 4309805258219353475ull}},
+{{10372322656026059255ull, 9525550040818228348ull,
+ 18200404187192781818ull, 2693628286387095921ull}},
+{{12965403320032574069ull, 2683565514168009627ull,
+ 8915447178708813561ull, 3367035357983869902ull}},
+{{11595068131613329682ull, 7966142911137399938ull,
+ 1920936936531241143ull, 4208794197479837378ull}},
+{{11858603600685718955ull, 11896368347101956817ull,
+ 5812271603759413618ull, 2630496373424898361ull}},
+{{988196445574984982ull, 5647088397022670214ull,
+ 11877025523126654927ull, 3288120466781122951ull}},
+{{10458617593823507035ull, 2447174477850949863ull,
+ 10234595885480930755ull, 4110150583476403689ull}},
+{{13454165023780773753ull, 17670385113152701328ull,
+ 17925837474494051481ull, 2568844114672752305ull}},
+{{16817706279725967191ull, 8252923336158712948ull,
+ 8572238787835400640ull, 3211055143340940382ull}},
+{{2575388775947907373ull, 10316154170198391186ull,
+ 1491926447939474992ull, 4013818929176175478ull}},
+{{6221304003394830012ull, 6447596356373994491ull,
+ 14767512085244335582ull, 2508636830735109673ull}},
+{{3164943985816149611ull, 17282867482322268922ull,
+ 4624332051273255765ull, 3135796038418887092ull}},
+{{13179552019124962822ull, 7768526297620672440ull,
+ 5780415064091569707ull, 3919745048023608865ull}},
+{{8237220011953101764ull, 2549485926799226323ull,
+ 15141974461125700827ull, 2449840655014755540ull}},
+{{5684838996513989301ull, 17021915463781196616ull,
+ 480724002697574417ull, 3062300818768444426ull}},
+{{7106048745642486626ull, 7442336274444332058ull,
+ 9824277040226743830ull, 3827876023460555532ull}},
+{{9052966484453942045ull, 39774153100319632ull, 15363545186996490702ull,
+ 2392422514662847207ull}},
+{{11316208105567427557ull, 9273089728230175348ull,
+ 14592745465318225473ull, 2990528143328559009ull}},
+{{14145260131959284446ull, 16203048178715107089ull,
+ 4405873776365618129ull, 3738160179160698762ull}},
+{{1923258554833470923ull, 3209376084055860075ull,
+ 7365357128655899235ull, 2336350111975436726ull}},
+{{16239131248824002365ull, 17846778160351988805ull,
+ 18430068447674649851ull, 2920437639969295907ull}},
+{{6463856005747839244ull, 17696786682012598103ull,
+ 18425899541165924410ull, 3650547049961619884ull}},
+{{3468133988757411151ull, 12897611315660971821ull,
+ 4585630352747853897ull, 4563183812452024856ull}},
+{{4473426752187075922ull, 1143478044647025532ull,
+ 2866018970467408686ull, 2851989882782515535ull}},
+{{5591783440233844902ull, 10652719592663557723ull,
+ 17417581768366424569ull, 3564987353478144418ull}},
+{{2378043281864918223ull, 17927585509256835058ull,
+ 12548605173603254903ull, 4456234191847680523ull}},
+{{6097963069592961794ull, 18122269970926603767ull,
+ 5537035224288340362ull, 2785146369904800327ull}},
+{{3010767818563814338ull, 13429465426803478901ull,
+ 2309608011933037549ull, 3481432962381000409ull}},
+{{8375145791632155827ull, 2951773728222184914ull,
+ 7498696033343684841ull, 4351791202976250511ull}},
+{{9846152138197485296ull, 13374073626207335331ull,
+ 11604214048480884881ull, 2719869501860156569ull}},
+{{7696004154319468716ull, 2882533977477005452ull, 670209505318942390ull,
+ 3399836877325195712ull}},
+{{9620005192899335894ull, 12826539508701032623ull,
+ 837761881648677987ull, 4249796096656494640ull}},
+{{12930032273203166790ull, 5710744183724451437ull,
+ 523601176030423742ull, 2656122560410309150ull}},
+{{2327482286221794776ull, 16361802266510340105ull,
+ 9877873506892805485ull, 3320153200512886437ull}},
+{{7521038876204631373ull, 6617194777855761419ull,
+ 16959027902043394761ull, 4150191500641108046ull}},
+{{2394806288414200657ull, 15664961782228320647ull,
+ 5987706420349733821ull, 2593869687900692529ull}},
+{{16828565915799914533ull, 5746144172503237096ull,
+ 12096319043864555181ull, 3242337109875865661ull}},
+{{2588963321040341550ull, 11794366234056434275ull,
+ 1285340749548530264ull, 4052921387344832077ull}},
+{{17759003140146071133ull, 7371478896285271421ull,
+ 3109180977681525367ull, 2533075867090520048ull}},
+{{8363695869900425204ull, 4602662601929201373ull,
+ 3886476222101906709ull, 3166344833863150060ull}},
+{{15066305855802919409ull, 10365014270838889620ull,
+ 4858095277627383386ull, 3957931042328937575ull}},
+{{193069123022048823ull, 11089819937701693917ull,
+ 9953838576158196472ull, 2473706901455585984ull}},
+{{4853022422204948932ull, 13862274922127117396ull,
+ 12442298220197745590ull, 3092133626819482480ull}},
+{{6066278027756186165ull, 8104471615804120937ull,
+ 15552872775247181988ull, 3865167033524353100ull}},
+{{15320638813416086113ull, 14288666796732351393ull,
+ 497173447674712934ull, 2415729395952720688ull}},
+{{5315740461487943929ull, 8637461459060663434ull, 621466809593391168ull,
+ 3019661744940900860ull}},
+{{15868047613714705720ull, 10796826823825829292ull,
+ 776833511991738960ull, 3774577181176126075ull}},
+{{694157721716915267ull, 6748016764891143308ull,
+ 16626422009490694514ull, 2359110738235078796ull}},
+{{867697152146144084ull, 17658392992968704943ull,
+ 2336283438153816526ull, 2948888422793848496ull}},
+{{14919679495464843816ull, 12849619204356105370ull,
+ 2920354297692270658ull, 3686110528492310620ull}},
+{{9426227332476278962ull, 6838651968590355905ull,
+ 3650442872115338323ull, 4607638160615388275ull}},
+{{17420607128866144112ull, 1968314471155278488ull,
+ 18422427859567944116ull, 2879773850384617671ull}},
+{{3329014837373128523ull, 2460393088944098111ull,
+ 18416348806032542241ull, 3599717312980772089ull}},
+{{17996326601998574366ull, 7687177379607510542ull,
+ 9185377952258514089ull, 4499646641225965112ull}},
+{{6636018107821721075ull, 16333700908323163849ull,
+ 5740861220161571305ull, 2812279150766228195ull}},
+{{12906708653204539248ull, 6582068080121791099ull,
+ 2564390506774576228ull, 3515348938457785244ull}},
+{{11521699798078286156ull, 8227585100152238874ull,
+ 3205488133468220285ull, 4394186173072231555ull}},
+{{11812748392226316751ull, 7448083696808843248ull,
+ 18144331147913495342ull, 2746366358170144721ull}},
+{{14765935490282895939ull, 86732584156278252ull, 8845355879609705466ull,
+ 3432957947712680902ull}},
+{{10675289144068308ull, 9331787767050123624ull, 1833322812657356024ull,
+ 4291197434640851128ull}},
+{{6672055715042693ull, 5832367354406327265ull, 1145826757910847515ull,
+ 2681998396650531955ull}},
+{{4620026088071191270ull, 2678773174580521177ull,
+ 15267341502670723106ull, 3352497995813164943ull}},
+{{10386718628516376991ull, 12571838505080427279ull,
+ 14472490859911015978ull, 4190622494766456179ull}},
+{{13409228170463817475ull, 12469085084102654953ull,
+ 6739463778230691034ull, 2619139059229035112ull}},
+{{2926477157797608132ull, 6362984318273542884ull,
+ 8424329722788363793ull, 3273923824036293890ull}},
+{{3658096447247010165ull, 12565416416269316509ull,
+ 1307040116630678933ull, 4092404780045367363ull}},
+{{4592153288743075305ull, 10159228269382016770ull,
+ 16957801137390031997ull, 2557752987528354601ull}},
+{{14963563647783619940ull, 17310721355154908866ull,
+ 7362193366455376284ull, 3197191234410443252ull}},
+{{9481082522874749116ull, 3191657620234084467ull,
+ 9202741708069220356ull, 3996489043013054065ull}},
+{{3619833567583024246ull, 11218158049501078600ull,
+ 17280928613611732482ull, 2497805651883158790ull}},
+{{4524791959478780307ull, 4799325525021572442ull,
+ 12377788730159889795ull, 3122257064853948488ull}},
+{{14879361986203251192ull, 1387470887849577648ull,
+ 15472235912699862244ull, 3902821331067435610ull}},
+{{9299601241377031995ull, 10090541341760761838ull,
+ 14281833463864801806ull, 2439263331917147256ull}},
+{{2401129514866514186ull, 3389804640346176490ull,
+ 17852291829831002258ull, 3049079164896434070ull}},
+{{12224783930437918540ull, 13460627837287496420ull,
+ 13091992750433977014ull, 3811348956120542588ull}},
+{{16863861993378474896ull, 3801206379877297358ull,
+ 17405867505876011442ull, 2382093097575339117ull}},
+{{11856455454868317812ull, 13974880011701397506ull,
+ 7922276327062850590ull, 2977616371969173897ull}},
+{{5597197281730621456ull, 8245227977771971075ull,
+ 14514531427255951142ull, 3722020464961467371ull}},
+{{1192405291867944458ull, 541581467680094018ull, 6765739132821275512ull,
+ 2326262790600917107ull}},
+{{10713878651689706381ull, 676976834600117522ull,
+ 3845487897599206486ull, 2907828488251146384ull}},
+{{4168976277757357168ull, 10069593080104922711ull,
+ 4806859871999008107ull, 3634785610313932980ull}},
+{{599534328769308556ull, 7975305331703765485ull, 6008574839998760134ull,
+ 4543482012892416225ull}},
+{{2680551964694511800ull, 372879813887465524ull,
+ 15284574321067694844ull, 2839676258057760140ull}},
+{{3350689955868139749ull, 466099767359331905ull, 658973827625066939ull,
+ 3549595322572200176ull}},
+{{8800048463262562591ull, 14417682764481328593ull,
+ 823717284531333673ull, 4436994153215250220ull}},
+{{17029245335607571379ull, 2093522700159748514ull,
+ 9738195339686859354ull, 2773121345759531387ull}},
+{{12063184632654688416ull, 11840275412054461451ull,
+ 7561058156181186288ull, 3466401682199414234ull}},
+{{10467294772390972616ull, 14800344265068076814ull,
+ 227950658371707052ull, 4333002102749267793ull}},
+{{1930373214316969981ull, 26843128812772201ull, 11671684207550786668ull,
+ 2708126314218292370ull}},
+{{7024652536323600380ull, 33553911015965251ull, 5366233222583707527ull,
+ 3385157892772865463ull}},
+{{4169129651977112571ull, 13877000444052120276ull,
+ 2096105509802246504ull, 4231447365966081829ull}},
+{{11829078069340471165ull, 8673125277532575172ull,
+ 3615908952840098017ull, 2644654603728801143ull}},
+{{14786347586675588956ull, 15453092615343106869ull,
+ 18354944246332286233ull, 3305818254661001428ull}},
+{{4647876428062322483ull, 5481307713896719875ull,
+ 4496936234205806176ull, 4132272818326251786ull}},
+{{599079758325257600ull, 3425817321185449922ull, 7422271164806016764ull,
+ 2582670511453907366ull}},
+{{9972221734761347808ull, 4282271651481812402ull, 54466919152745147ull,
+ 3228338139317384208ull}},
+{{3241905131596908952ull, 741153545924877599ull, 68083648940931434ull,
+ 4035422674146730260ull}},
+{{8943719734889149951ull, 5074906984630436403ull,
+ 9265924317442857954ull, 2522139171341706412ull}},
+{{6567963650184049535ull, 15567005767642821312ull,
+ 11582405396803572442ull, 3152673964177133015ull}},
+{{8209954562730061919ull, 10235385172698750832ull,
+ 9866320727577077649ull, 3940842455221416269ull}},
+{{5131221601706288699ull, 17926330779005189030ull,
+ 8472293463949367482ull, 2463026534513385168ull}},
+{{15637399038987636682ull, 13184541436901710479ull,
+ 10590366829936709353ull, 3078783168141731460ull}},
+{{14935062780307157948ull, 2645618740844974387ull,
+ 13237958537420886692ull, 3848478960177164325ull}},
+{{7028571228478279766ull, 10876883749882884800ull,
+ 10579567095101748134ull, 2405299350110727703ull}},
+{{8785714035597849707ull, 4372732650498830192ull,
+ 8612772850449797264ull, 3006624187638409629ull}},
+{{10982142544497312134ull, 5465915813123537740ull,
+ 15377652081489634484ull, 3758280234548012036ull}},
+{{16087211127165595892ull, 12639569420056986895ull,
+ 387660514076245744ull, 2348925146592507523ull}},
+{{15497327890529606961ull, 15799461775071233619ull,
+ 14319633697877470892ull, 2936156433240634403ull}},
+{{14759973844734620797ull, 1302583145129490408ull,
+ 13287856103919450712ull, 3670195541550793004ull}},
+{{3223232208724380ull, 1628228931411863011ull, 16609820129899313390ull,
+ 4587744426938491255ull}},
+{{16142915584626310402ull, 14852701137414578093ull,
+ 17298666608828152724ull, 2867340266836557034ull}},
+{{6343586425500724290ull, 119132348058671001ull,
+ 12399961224180415098ull, 3584175333545696293ull}},
+{{12541169050303293266ull, 9372287471928114559ull,
+ 1664893474943355160ull, 4480219166932120367ull}},
+{{14755759684080640148ull, 5857679669955071599ull,
+ 7958087449480678831ull, 2800136979332575229ull}},
+{{13833013586673412280ull, 2710413569016451595ull,
+ 14559295330278236443ull, 3500171224165719036ull}},
+{{12679580964914377446ull, 17223075016552728206ull,
+ 18199119162847795553ull, 4375214030207148795ull}},
+{{3313052084644098000ull, 3846892857704373273ull,
+ 9068606467566178269ull, 2734508768879467997ull}},
+{{8753001124232510404ull, 9420302090557854495ull,
+ 15947444102885110740ull, 3418135961099334996ull}},
+{{6329565386863250101ull, 11775377613197318119ull,
+ 1487561054896836809ull, 4272669951374168746ull}},
+{{10873507394430613169ull, 442081980607241968ull,
+ 5541411677737910910ull, 2670418719608855466ull}},
+{{13591884243038266462ull, 9775974512613828268ull,
+ 16150136634027164445ull, 3338023399511069332ull}},
+{{16989855303797833077ull, 16831654159194673239ull,
+ 1740926718824403940ull, 4172529249388836666ull}},
+{{17536188592514727529ull, 1296411812641894966ull,
+ 5699765217692640367ull, 2607830780868022916ull}},
+{{12696863703788633603ull, 15455572821084532420ull,
+ 7124706522115800458ull, 3259788476085028645ull}},
+{{15871079629735792004ull, 10096093989500889717ull,
+ 13517569171072138477ull, 4074735595106285806ull}},
+{{12225267777798563955ull, 8615901752651750025ull,
+ 3836794713492698644ull, 2546709746941428629ull}},
+{{1446526666966041231ull, 10769877190814687532ull,
+ 9407679410293261209ull, 3183387183676785786ull}},
+{{1808158333707551539ull, 18074032506945747319ull,
+ 2536227226011800703ull, 3979233979595982233ull}},
+{{8047627986208301568ull, 18213799344482173930ull,
+ 13114357062325845199ull, 2487021237247488895ull}},
+{{836162945905601152ull, 18155563162175329509ull,
+ 11781260309479918595ull, 3108776546559361119ull}},
+{{5656889700809389344ull, 18082767934291773982ull,
+ 10114889368422510340ull, 3885970683199201399ull}},
+{{17370614118288032052ull, 2078357922077582930ull,
+ 13239334882905150819ull, 2428731676999500874ull}},
+{{12489895611005264257ull, 16433005457879142375ull,
+ 7325796566776662715ull, 3035914596249376093ull}},
+{{11000683495329192417ull, 15929570803921540065ull,
+ 13768931726898216298ull, 3794893245311720116ull}},
+{{18404642230649215021ull, 14567667770878350444ull,
+ 17828954366166160994ull, 2371808278319825072ull}},
+{{4559058714601967160ull, 8986212676743162248ull,
+ 3839448883998149627ull, 2964760347899781341ull}},
+{{5698823393252458950ull, 6621079827501564906ull,
+ 9410997123425074938ull, 3705950434874726676ull}},
+{{8173450639210174748ull, 8749860910615865970ull,
+ 15105245238995447644ull, 2316219021796704172ull}},
+{{993441262157942627ull, 10937326138269832463ull, 434812475034757939ull,
+ 2895273777245880216ull}},
+{{15076859632979591995ull, 9059971654409902674ull,
+ 543515593793447424ull, 3619092221557350270ull}},
+{{9622702504369714186ull, 11324964568012378343ull,
+ 9902766529096585088ull, 4523865276946687837ull}},
+{{12931718092872153222ull, 7078102855007736464ull,
+ 8495072089899059632ull, 2827415798091679898ull}},
+{{16164647616090191528ull, 8847628568759670580ull,
+ 1395468075519048732ull, 3534269747614599873ull}},
+{{1759065446403187794ull, 11059535710949588226ull,
+ 6356021112826198819ull, 4417837184518249841ull}},
+{{5711101922429380275ull, 4606366810129798689ull,
+ 15501728241584844022ull, 2761148240323906150ull}},
+{{11750563421464113248ull, 14981330549517024169ull,
+ 10153788265126279219ull, 3451435300404882688ull}},
+{{853146221547977848ull, 14114977168468892308ull,
+ 12692235331407849024ull, 4314294125506103360ull}},
+{{9756588425322261963ull, 8821860730293057692ull,
+ 7932647082129905640ull, 2696433828441314600ull}},
+{{12195735531652827454ull, 11027325912866322115ull,
+ 9915808852662382050ull, 3370542285551643250ull}},
+{{10632983396138646413ull, 4560785354228126836ull,
+ 3171389028973201755ull, 4213177856939554063ull}},
+{{15868986659441429816ull, 544647837178885320ull,
+ 8899647170749332953ull, 2633236160587221289ull}},
+{{1389489250592235654ull, 5292495814900994555ull,
+ 15736244981864054095ull, 3291545200734026611ull}},
+{{15571919618522458280ull, 2003933750198855289ull,
+ 15058620208902679715ull, 4114431500917533264ull}},
+{{2814920733935454569ull, 17393359658370142220ull,
+ 9411637630564174821ull, 2571519688073458290ull}},
+{{3518650917419318211ull, 7906641517680514063ull,
+ 2541175001350442719ull, 3214399610091822863ull}},
+{{18233371702056311476ull, 5271615878673254674ull,
+ 17011526806970217111ull, 4017999512614778578ull}},
+{{16007543332212582577ull, 10212288951811866027ull,
+ 15243890272783773598ull, 2511249695384236611ull}},
+{{15397743146838340317ull, 3541989152910056726ull,
+ 14443176822552329094ull, 3139062119230295764ull}},
+{{10023806896693149588ull, 13650858477992346716ull,
+ 18053971028190411367ull, 3923827649037869705ull}},
+{{15488251347287994300ull, 15449315576386298553ull,
+ 4366202864977925248ull, 2452392280648668566ull}},
+{{5525256128827829163ull, 864900396773321576ull,
+ 14681125618077182369ull, 3065490350810835707ull}},
+{{6906570161034786454ull, 5692811514394039874ull,
+ 13739721004169090057ull, 3831862938513544634ull}},
+{{8928292369074129438ull, 15087222242564744681ull,
+ 13199011646033069189ull, 2394914336570965396ull}},
+{{15772051479770049701ull, 5023969747923767139ull,
+ 16498764557541336487ull, 2993642920713706745ull}},
+{{15103378331285174223ull, 1668276166477321020ull,
+ 6788397641644506897ull, 3742053650892133432ull}},
+{{216239420198458081ull, 12571887650116795398ull,
+ 4242748526027816810ull, 2338783531807583395ull}},
+{{9493671312102848410ull, 6491487525791218439ull, 691749639107383109ull,
+ 2923479414759479244ull}},
+{{7255403121701172608ull, 12726045425666410953ull,
+ 864687048884228886ull, 3654349268449349055ull}},
+{{13680939920553853664ull, 6684184745228237883ull,
+ 14915916866387449820ull, 4567936585561686318ull}},
+{{6244744441132464588ull, 13400987502622424485ull,
+ 4710762023064768233ull, 2854960365976053949ull}},
+{{12417616569842968639ull, 2916176322995866894ull,
+ 10500138547258348196ull, 3568700457470067436ull}},
+{{6298648675448934990ull, 3645220403744833618ull,
+ 13125173184072935245ull, 4460875571837584295ull}},
+{{8548341440582972273ull, 4584105761554214963ull,
+ 15120762267686666384ull, 2788047232398490184ull}},
+{{6073740782301327437ull, 5730132201942768704ull, 454208760898781364ull,
+ 3485059040498112731ull}},
+{{7592175977876659297ull, 7162665252428460880ull,
+ 14402819006405640417ull, 4356323800622640913ull}},
+{{4745109986172912061ull, 16005880828836257810ull,
+ 2084232851362443404ull, 2722702375389150571ull}},
+{{15154759519570915884ull, 1560606962335770646ull,
+ 16440349119485217968ull, 3403377969236438213ull}},
+{{9720077362608869046ull, 1950758702919713308ull,
+ 6715378344074358748ull, 4254222461545547767ull}},
+{{15298420388485318962ull, 10442596226179596625ull,
+ 11114640492687556073ull, 2658889038465967354ull}},
+{{5287967430324484991ull, 17664931301151883686ull,
+ 4669928579004669283ull, 3323611298082459193ull}},
+{{15833331324760382046ull, 17469478108012466703ull,
+ 10449096742183224508ull, 4154514122603073991ull}},
+{{16813361105616320635ull, 1695051780653015881ull,
+ 13448214491505597174ull, 2596571326626921244ull}},
+{{7181643326738237082ull, 11342186762671045660ull,
+ 16810268114381996467ull, 3245714158283651555ull}},
+{{8977054158422796352ull, 9566047434911419171ull,
+ 16401149124550107680ull, 4057142697854564444ull}},
+{{3304815839800553768ull, 5978779646819636982ull,
+ 1027346165989041492ull, 2535714186159102778ull}},
+{{13354391836605468018ull, 7473474558524546227ull,
+ 10507554744341077673ull, 3169642732698878472ull}},
+{{12081303777329447118ull, 13953529216583070688ull,
+ 13134443430426347091ull, 3962053415873598090ull}},
+{{7550814860830904449ull, 6415112751150725228ull,
+ 12820713162443854836ull, 2476283384920998806ull}},
+{{9438518576038630561ull, 8018890938938406535ull,
+ 6802519416200042737ull, 3095354231151248508ull}},
+{{7186462201620900298ull, 14635299692100396073ull,
+ 8503149270250053421ull, 3869192788939060635ull}},
+{{16020753922081532446ull, 11452905316776441497ull,
+ 3008625284692589436ull, 2418245493086912897ull}},
+{{6190884347319751846ull, 14316131645970551872ull,
+ 8372467624293124699ull, 3022806866358641121ull}},
+{{7738605434149689807ull, 13283478539035801936ull,
+ 15077270548793793778ull, 3778508582948301401ull}},
+{{4836628396343556129ull, 12913860105324764114ull,
+ 2505765065355039255ull, 2361567864342688376ull}},
+{{15269157532284220970ull, 11530639113228567238ull,
+ 3132206331693799069ull, 2951959830428360470ull}},
+{{9863074878500500404ull, 578240836253545336ull,
+ 13138629951472024645ull, 3689949788035450587ull}},
+{{6164421799062812753ull, 2667243531872159787ull,
+ 5905800710456321451ull, 2306218617522156617ull}},
+{{3093841230401128037ull, 17169112470122363446ull,
+ 11993936906497789717ull, 2882773271902695771ull}},
+{{13090673574856185854ull, 7626332532370790595ull,
+ 10380735114694849243ull, 3603466589878369714ull}},
+{{11751655950142844413ull, 4921229647036100340ull,
+ 3752546856513785746ull, 4504333237347962143ull}},
+{{16568157005694053566ull, 7687454547824950616ull,
+ 9262870812962197947ull, 2815208273342476339ull}},
+{{2263452183408015342ull, 4997632166353800367ull,
+ 6966902497775359530ull, 3519010341678095424ull}},
+{{16664373284542182889ull, 15470412244797026266ull,
+ 8708628122219199412ull, 4398762927097619280ull}},
+{{15026919321266252210ull, 445635616143365608ull,
+ 5442892576386999633ull, 2749226829436012050ull}},
+{{336905077873263646ull, 5168730538606594915ull,
+ 16026987757338525349ull, 3436533536795015062ull}},
+{{14256189402623743270ull, 11072599191685631547ull,
+ 10810362659818380878ull, 4295666920993768828ull}},
+{{6604275367426145592ull, 2308688476376131813ull,
+ 15979848699241263857ull, 2684791825621105517ull}},
+{{12867030227710069894ull, 7497546613897552670ull,
+ 6139752818769416109ull, 3355989782026381897ull}},
+{{6860415747782811559ull, 13983619285799328742ull,
+ 12286377041889158040ull, 4194987227532977371ull}},
+{{18122817897646420936ull, 8739762053624580463ull,
+ 5373142641967029823ull, 2621867017208110857ull}},
+{{18041836353630638266ull, 6313016548603337675ull,
+ 11328114320886175183ull, 3277333771510138571ull}},
+{{17940609423610909929ull, 3279584667326784190ull,
+ 9548456882680331075ull, 4096667214387673214ull}},
+{{6601194871329430802ull, 18190641481575097783ull,
+ 1356099533247819017ull, 2560417008992295759ull}},
+{{3639807570734400598ull, 8903243796686708517ull,
+ 15530182471841937484ull, 3200521261240369698ull}},
+{{9161445481845388652ull, 11129054745858385646ull,
+ 10189356052947646047ull, 4000651576550462123ull}},
+{{1114217407725980003ull, 13873188243802572885ull,
+ 4062504523878584827ull, 2500407235344038827ull}},
+{{6004457778084862908ull, 12729799286325828202ull,
+ 466444636420843130ull, 3125509044180048534ull}},
+{{16728944259460854443ull, 6688877071052509444ull,
+ 9806427832380829721ull, 3906886305225060667ull}},
+{{1232218125308258219ull, 15709763215476288163ull,
+ 3823174386024324623ull, 2441803940765662917ull}},
+{{15375330711917486486ull, 15025518000917972299ull,
+ 9390654000957793683ull, 3052254925957078646ull}},
+{{14607477371469470203ull, 14170211482720077470ull,
+ 2514945464342466296ull, 3815318657446348308ull}},
+{{4517987338741030973ull, 8856382176700048419ull,
+ 10795212952068817243ull, 2384574160903967692ull}},
+{{1035798154998900812ull, 6458791702447672620ull,
+ 13494016190086021554ull, 2980717701129959615ull}},
+{{1294747693748626015ull, 17296861664914366583ull,
+ 12255834219180139038ull, 3725897126412449519ull}},
+{{7726746336233973116ull, 6198852522144091210ull,
+ 14577425414628668755ull, 2328685704007780949ull}},
+{{435060883437690586ull, 3136879634252726109ull, 4386723713003672232ull,
+ 2910857130009726187ull}},
+{{5155512122724501137ull, 3921099542815907636ull, 871718622827202386ull,
+ 3638571412512157734ull}},
+{{6444390153405626421ull, 14124746465374660353ull,
+ 10313020315388778790ull, 4548214265640197167ull}},
+{{15556958891946986273ull, 4216280522431774816ull,
+ 13363166724759068600ull, 2842633916025123229ull}},
+{{999454541224181226ull, 5270350653039718521ull, 2868900350666672038ull,
+ 3553292395031404037ull}},
+{{5861004194957614436ull, 15811310353154423959ull,
+ 8197811456760727951ull, 4441615493789255046ull}},
+{{10580656649489590879ull, 16799597998362596830ull,
+ 511946142048067065ull, 2776009683618284404ull}},
+{{4002448775007212790ull, 7164439442671082326ull, 639932677560083832ull,
+ 3470012104522855505ull}},
+{{14226433005613791795ull, 8955549303338852907ull,
+ 5411601865377492694ull, 4337515130653569381ull}},
+{{6585677619294925920ull, 985532296159395163ull, 5688094175074626886ull,
+ 2710946956658480863ull}},
+{{3620411005691269496ull, 10455287407054019762ull,
+ 2498431700415895703ull, 3388683695823101079ull}},
+{{13748885793968862678ull, 8457423240390136798ull,
+ 16958097680802033341ull, 4235854619778876348ull}},
+{{3981367602803151270ull, 7591732534457529451ull,
+ 1375439013646495030ull, 2647409137361797718ull}},
+{{365023485076551183ull, 266293631217136006ull, 10942670803912894596ull,
+ 3309261421702247147ull}},
+{{9679651393200464787ull, 332867039021420007ull, 9066652486463730341ull,
+ 4136576777127808934ull}},
+{{12967311148391372348ull, 2513884908602081456ull,
+ 1054971785612443559ull, 2585360485704880584ull}},
+{{16209138935489215435ull, 16977414191034765532ull,
+ 1318714732015554448ull, 3231700607131100730ull}},
+{{1814679595651967678ull, 2775023665083905300ull,
+ 10871765451874218869ull, 4039625758913875912ull}},
+{{10357546784137255607ull, 4040232799891134764ull,
+ 6794853407421386793ull, 2524766099321172445ull}},
+{{12946933480171569508ull, 9661977018291306359ull,
+ 13105252777704121395ull, 3155957624151465556ull}},
+{{11571980831787073981ull, 7465785254436745045ull,
+ 16381565972130151744ull, 3944947030189331945ull}},
+{{9538331029080615191ull, 4666115784022965653ull,
+ 3320949704940262984ull, 2465591893868332466ull}},
+{{16534599804778156892ull, 5832644730028707066ull,
+ 13374559168030104538ull, 3081989867335415582ull}},
+{{11444877719117920307ull, 16514177949390659641ull,
+ 7494826923182854864ull, 3852487334169269478ull}},
+{{235519546807618336ull, 10321361218369162276ull, 72580808561896386ull,
+ 2407804583855793424ull}},
+{{294399433509522920ull, 3678329486106677037ull, 90726010702370483ull,
+ 3009755729819741780ull}},
+{{4979685310314291554ull, 18432969912915510008ull,
+ 113407513377963103ull, 3762194662274677225ull}},
+{{3112303318946432221ull, 18438135223213275611ull,
+ 11600094741929696699ull, 2351371663921673265ull}},
+{{17725437203965203988ull, 18435983010589206609ull,
+ 665060372129957162ull, 2939214579902091582ull}},
+{{8321738449674341273ull, 13821606726381732454ull,
+ 10054697502017222261ull, 3674018224877614477ull}},
+{{1178801025238150784ull, 3441950352695001856ull,
+ 17180057895948915731ull, 4592522781097018096ull}},
+{{736750640773844240ull, 18292120034930233824ull,
+ 10737536184968072331ull, 2870326738185636310ull}},
+{{920938300967305300ull, 18253464025235404376ull,
+ 4198548194355314606ull, 3587908422732045388ull}},
+{{1151172876209131625ull, 13593457994689479662ull,
+ 5248185242944143258ull, 4484885528415056735ull}},
+{{14554541102912870978ull, 13107597265108312692ull,
+ 10197644804481171392ull, 2803053455259410459ull}},
+{{18193176378641088722ull, 16384496581385390865ull,
+ 8135369987174076336ull, 3503816819074263074ull}},
+{{8906412418019197190ull, 2033876653022186966ull, 945840447112819613ull,
+ 4379771023842828843ull}},
+{{954821742834610340ull, 3577015917352560806ull,
+ 16732051343941369922ull, 2737356889901768026ull}},
+{{10416899215398038733ull, 13694641933545476815ull,
+ 11691692143071936594ull, 3421696112377210033ull}},
+{{8409438000820160512ull, 7894930380077070211ull, 779557123557757031ull,
+ 4277120140471512542ull}},
+{{2950055741298906368ull, 11851860515189250738ull,
+ 14322281257505761856ull, 2673200087794695338ull}},
+{{12910941713478408768ull, 14814825643986563422ull,
+ 8679479535027426512ull, 3341500109743369173ull}},
+{{6915305104993235152ull, 71787981273652662ull, 15461035437211671045ull,
+ 4176875137179211466ull}},
+{{18157123745902935682ull, 2350710497509726865ull,
+ 14274833166684682307ull, 2610546960737007166ull}},
+{{8861346627096505891ull, 16773446177169322294ull,
+ 8620169421501077075ull, 3263183700921258958ull}},
+{{1853311247015856555ull, 16355121703034264964ull,
+ 1551839740021570536ull, 4078979626151573698ull}},
+{{10381691566239686155ull, 10221951064396415602ull,
+ 5581585855940869489ull, 2549362266344733561ull}},
+{{3753742420944831886ull, 17389124848922907407ull,
+ 11588668338353474765ull, 3186702832930916951ull}},
+{{80492007753651953ull, 7901348005871470547ull, 9874149404514455553ull,
+ 3983378541163646189ull}},
+{{16191208569341890135ull, 16467557549738138851ull,
+ 8477186387035228672ull, 2489611588227278868ull}},
+{{15627324693249974765ull, 2137702863463121948ull,
+ 10596482983794035841ull, 3112014485284098585ull}},
+{{1087411792852916840ull, 7283814597756290340ull,
+ 17857289748169932705ull, 3890018106605123231ull}},
+{{9903004407387848833ull, 16081599169666151222ull,
+ 18078335120247289796ull, 2431261316628202019ull}},
+{{3155383472380035233ull, 1655254888373137412ull,
+ 17986232881881724342ull, 3039076645785252524ull}},
+{{3944229340475044041ull, 11292440647321197573ull,
+ 4036047028642603811ull, 3798845807231565656ull}},
+{{4770986347010596478ull, 4751932395362054531ull,
+ 2522529392901627382ull, 2374278629519728535ull}},
+{{1352046915335857693ull, 15163287531057343972ull,
+ 16988219796409197939ull, 2967848286899660668ull}},
+{{1690058644169822117ull, 14342423395394292061ull,
+ 2788530671801945808ull, 3709810358624575836ull}},
+{{3362129661819832775ull, 8964014622121432538ull,
+ 10966203706730991938ull, 2318631474140359897ull}},
+{{13426034114129566777ull, 1981646240797014864ull,
+ 18319440651841127827ull, 2898289342675449871ull}},
+{{16782542642661958471ull, 16312115856278432292ull,
+ 18287614796374021879ull, 3622861678344312339ull}},
+{{2531434229617896472ull, 15778458801920652462ull,
+ 18247832477040139445ull, 4528577097930390424ull}},
+{{15417204448793349007ull, 12167379760414101740ull,
+ 11404895298150087153ull, 2830360686206494015ull}},
+{{824761487282134643ull, 1374166645235463464ull, 9644433104260221038ull,
+ 3537950857758117519ull}},
+{{1030951859102668304ull, 10941080343399105138ull,
+ 7443855361897888393ull, 4422438572197646899ull}},
+{{5256030930366555594ull, 18367390260692910471ull,
+ 2346566591972486293ull, 2764024107623529312ull}},
+{{1958352644530806588ull, 9124179770583974377ull,
+ 2933208239965607867ull, 3455030134529411640ull}},
+{{7059626824090896139ull, 6793538694802580067ull,
+ 3666510299957009834ull, 4318787668161764550ull}},
+{{2106423755843116135ull, 8857647702679000446ull,
+ 16126626992755294858ull, 2699242292601102843ull}},
+{{11856401731658670977ull, 1848687591493974749ull,
+ 15546597722516730669ull, 3374052865751378554ull}},
+{{985444109291175009ull, 6922545507794856341ull,
+ 10209875116291137528ull, 4217566082189223193ull}},
+{{2921745577520678333ull, 4326590942371785213ull,
+ 17910386993750430715ull, 2635978801368264495ull}},
+{{8263867990328235820ull, 796552659537343612ull,
+ 17776297723760650490ull, 3294973501710330619ull}},
+{{10329834987910294775ull, 10219062861276455323ull,
+ 17608686136273425208ull, 4118716877137913274ull}},
+{{4150303858230240282ull, 6386914288297784577ull,
+ 15617114853598278659ull, 2574198048211195796ull}},
+{{9799565841215188257ull, 3371956841944842817ull,
+ 1074649493288296708ull, 3217747560263994746ull}},
+{{16861143319946373225ull, 4214946052431053521ull,
+ 10566683903465146693ull, 4022184450329993432ull}},
+{{3620685547325401410ull, 4940184291983102403ull,
+ 6604177439665716683ull, 2513865281456245895ull}},
+{{18360914989438915474ull, 1563544346551490099ull,
+ 3643535781154757950ull, 3142331601820307369ull}},
+{{18339457718371256439ull, 11177802470044138432ull,
+ 9166105744870835341ull, 3927914502275384211ull}},
+{{11462161073982035274ull, 9291969552991280472ull,
+ 3422973081330578136ull, 2454946563922115132ull}},
+{{14327701342477544093ull, 11614961941239100590ull,
+ 4278716351663222670ull, 3068683204902643915ull}},
+{{8686254641242154308ull, 5295330389694099930ull, 736709421151640434ull,
+ 3835854006128304894ull}},
+{{10040595169203734347ull, 7921267511986200360ull,
+ 14295501443501938983ull, 2397408753830190558ull}},
+{{12550743961504667933ull, 5289898371555362546ull,
+ 8646004767522647921ull, 2996760942287738198ull}},
+{{6465057915026059108ull, 11224058982871591087ull,
+ 1584133922548534093ull, 3745951177859672748ull}},
+{{10958190224532368799ull, 9320879873508438381ull,
+ 10213455738447609616ull, 2341219486162295467ull}},
+{{18309423799092848902ull, 11651099841885547976ull,
+ 8155133654632124116ull, 2926524357702869334ull}},
+{{4440035675156509512ull, 14563874802356934971ull,
+ 970545031435379337ull, 3658155447128586668ull}},
+{{938358575518248986ull, 4369785447664005002ull, 1213181289294224172ull,
+ 4572694308910733335ull}},
+{{5198160128126293520ull, 11954487941644778934ull,
+ 7675767333449971963ull, 2857933943069208334ull}},
+{{15721072197012642708ull, 10331423908628585763ull,
+ 371337129957689146ull, 3572417428836510418ull}},
+{{15039654227838415481ull, 3690907848930956396ull,
+ 9687543449301887241ull, 4465521786045638022ull}},
+{{176411855544233868ull, 13836032451650317508ull,
+ 1443028637386291621ull, 2790951116278523764ull}},
+{{220514819430292335ull, 3459982509280733173ull, 1803785796732864527ull,
+ 3488688895348154705ull}},
+{{4887329542715253322ull, 18160036191883080178ull,
+ 6866418264343468562ull, 4360861119185193381ull}},
+{{7666266982624421231ull, 15961708638354313015ull,
+ 6597354424428361803ull, 2725538199490745863ull}},
+{{4971147709853138634ull, 15340449779515503365ull,
+ 3635007012108064350ull, 3406922749363432329ull}},
+{{10825620655743811197ull, 9952190187539603398ull,
+ 9155444783562468342ull, 4258653436704290411ull}},
+{{2154326891412494094ull, 1608432848784864220ull,
+ 3416309980512848762ull, 2661658397940181507ull}},
+{{2692908614265617617ull, 11233913097835856083ull,
+ 18105445530923224664ull, 3327072997425226883ull}},
+{{17201193823114185734ull, 14042391372294820103ull,
+ 18020120895226642926ull, 4158841246781533604ull}},
+{{17668275167087447940ull, 4164808589256874660ull,
+ 2039203522661876021ull, 2599275779238458503ull}},
+{{3638599885149758309ull, 9817696754998481230ull,
+ 16384062458609508738ull, 3249094724048073128ull}},
+{{13771621893291973694ull, 3048748906893325729ull,
+ 2033333999552334307ull, 4061368405060091411ull}},
+{{1689734655666401703ull, 18046369131304186245ull,
+ 17411734814216066605ull, 2538355253162557131ull}},
+{{6723854338010390032ull, 8722903358848069094ull,
+ 17152982499342695353ull, 3172944066453196414ull}},
+{{17628189959367763348ull, 15515315216987474271ull,
+ 12217856087323593383ull, 3966180083066495518ull}},
+{{17935147752245933949ull, 16614601038258253275ull,
+ 3024474036149857960ull, 2478862551916559699ull}},
+{{17807248671880029532ull, 2321507224113264978ull,
+ 17615650600469486163ull, 3098578189895699623ull}},
+{{13035688802995261107ull, 16736942085423744935ull,
+ 17407877232159469799ull, 3873222737369624529ull}},
+{{15064834529513120048ull, 17378117831030922440ull,
+ 3962394242458586768ull, 2420764210856015331ull}},
+{{384299088181848444ull, 3275903215079101435ull, 341306784645845557ull,
+ 3025955263570019164ull}},
+{{14315431915509474267ull, 8706565037276264697ull,
+ 426633480807306946ull, 3782444079462523955ull}},
+{{2029615919552339561ull, 10053289166725053340ull,
+ 16407546990000424505ull, 2364027549664077471ull}},
+{{2537019899440424451ull, 17178297476833704579ull,
+ 15897747719073142727ull, 2955034437080096839ull}},
+{{17006332929582694275ull, 16861185827614742819ull,
+ 15260498630414040505ull, 3693793046350121049ull}},
+{{8323115071775489970ull, 3620712114618132406ull,
+ 2620282616367693460ull, 2308620653968825656ull}},
+{{1180521802864586655ull, 4525890143272665508ull,
+ 3275353270459616825ull, 2885775817461032070ull}},
+{{1475652253580733318ull, 10269048697518219789ull,
+ 13317563624929296839ull, 3607219771826290087ull}},
+{{6456251335403304552ull, 8224624853470386832ull,
+ 12035268512734233145ull, 4509024714782862609ull}},
+{{4035157084627065345ull, 16669605579487461530ull,
+ 604513792817813859ull, 2818140446739289131ull}},
+{{14267318392638607489ull, 16225320955931939008ull,
+ 14590700296304431036ull, 3522675558424111413ull}},
+{{17834147990798259361ull, 1834907121205372144ull,
+ 4403317315098375084ull, 4403344448030139267ull}},
+{{11146342494248912101ull, 10370188987608133398ull,
+ 446230312722790475ull, 2752090280018837042ull}},
+{{4709556080956364318ull, 8351050216082778844ull,
+ 9781159927758263902ull, 3440112850023546302ull}},
+{{5886945101195455398ull, 1215440733248697747ull,
+ 3003077872843054070ull, 4300141062529432878ull}},
+{{1373497679033465672ull, 14594708513562599804ull,
+ 15711981725809072505ull, 2687588164080895548ull}},
+{{1716872098791832089ull, 4408327586671086043ull,
+ 1193233083551789016ull, 3359485205101119436ull}},
+{{15981148178771953824ull, 5510409483338857553ull,
+ 1491541354439736270ull, 4199356506376399295ull}},
+{{3070688584091389284ull, 17279063982368949683ull,
+ 7849742374165917024ull, 2624597816485249559ull}},
+{{17673418785396400317ull, 3152085904251635487ull,
+ 5200491949280008377ull, 3280747270606561949ull}},
+{{17480087463318112492ull, 8551793398741932263ull,
+ 11112300955027398375ull, 4100934088258202436ull}},
+{{17842583692214902164ull, 12262399901854789520ull,
+ 16168560133746899792ull, 2563083805161376522ull}},
+{{3856485541559076088ull, 15327999877318486901ull,
+ 10987328130328848932ull, 3203854756451720653ull}},
+{{9432292945376233014ull, 713255772938557010ull,
+ 18345846181338449070ull, 4004818445564650816ull}},
+{{10506869109287533538ull, 14280842913368761843ull,
+ 11466153863336530668ull, 2503011528477906760ull}},
+{{8521900368182029019ull, 17851053641710952304ull,
+ 14332692329170663335ull, 3128764410597383450ull}},
+{{10652375460227536273ull, 17702131033711302476ull,
+ 8692493374608553361ull, 3910955513246729313ull}},
+{{15881106699496985979ull, 4146302868428482191ull,
+ 16962023405198815611ull, 2444347195779205820ull}},
+{{15239697355943844570ull, 571192567108214835ull,
+ 2755785182788967898ull, 3055433994724007276ull}},
+{{14437935676502417808ull, 9937362745740044352ull,
+ 3444731478486209872ull, 3819292493405009095ull}},
+{{9023709797814011130ull, 6210851716087527720ull,
+ 9070486201694963026ull, 2387057808378130684ull}},
+{{11279637247267513912ull, 16986936681964185458ull,
+ 11338107752118703782ull, 2983822260472663355ull}},
+{{4876174522229616582ull, 12010298815600456015ull,
+ 9560948671720991824ull, 3729777825590829194ull}},
+{{9965138104034592220ull, 7506436759750285009ull,
+ 10587278938253007794ull, 2331111140994268246ull}},
+{{17068108648470628179ull, 159673912833080453ull,
+ 4010726635961483935ull, 2913888926242835308ull}},
+{{7500077755306121512ull, 14034650446323514279ull,
+ 5013408294951854918ull, 3642361157803544135ull}},
+{{4763411175705263986ull, 8319941021049617041ull,
+ 1655074350262430744ull, 4552951447254430169ull}},
+{{14506347030884259751ull, 5199963138156010650ull,
+ 12563636514982488975ull, 2845594654534018855ull}},
+{{8909561751750548881ull, 1888267904267625409ull,
+ 11092859625300723315ull, 3556993318167523569ull}},
+{{15748638208115574005ull, 16195392935616695473ull,
+ 31016476343740431ull, 4446241647709404462ull}},
+{{2925369852431151897ull, 17039649612401516527ull,
+ 13854443352997001481ull, 2778901029818377788ull}},
+{{17491770370821103584ull, 7464503960219731946ull,
+ 17318054191246251852ull, 3473626287272972235ull}},
+{{12641340926671603671ull, 9330629950274664933ull,
+ 17035881720630426911ull, 4342032859091215294ull}},
+{{10206681088383446247ull, 12749172746562747439ull,
+ 6035740056966628915ull, 2713770536932009559ull}},
+{{8146665342051919904ull, 11324779914776046395ull,
+ 2932989052780898240ull, 3392213171165011949ull}},
+{{5571645659137511976ull, 14155974893470057994ull,
+ 8277922334403510704ull, 4240266463956264936ull}},
+{{8093964555388332889ull, 8847484308418786246ull,
+ 5173701459002194190ull, 2650166539972665585ull}},
+{{894083657380640304ull, 1835983348668707000ull,
+ 11078812842180130642ull, 3312708174965831981ull}},
+{{1117604571725800379ull, 11518351222690659558ull, 13457997442999590ull,
+ 4140885218707289977ull}},
+{{14533560912610788949ull, 2587283495754274319ull,
+ 11537626294470344504ull, 2588053261692056235ull}},
+{{13555265122336098282ull, 3234104369692842899ull,
+ 9810346849660542726ull, 3235066577115070294ull}},
+{{12332395384492734949ull, 13266002498970829432ull,
+ 3039561525220902599ull, 4043833221393837868ull}},
+{{7707747115307959343ull, 15208780589497850251ull,
+ 11123097990117839932ull, 2527395763371148667ull}},
+{{5022997875707561275ull, 564231663162761198ull, 9292186469219912012ull,
+ 3159244704213935834ull}},
+{{15502119381489227402ull, 705289578953451497ull,
+ 2391861049670114207ull, 3949055880267419793ull}},
+{{2771295585789685270ull, 7358335014486989042ull,
+ 13024128202112291139ull, 2468159925167137370ull}},
+{{12687491519091882396ull, 4586232749681348398ull,
+ 7056788215785588116ull, 3085199906458921713ull}},
+{{6635992362010077186ull, 5732790937101685498ull,
+ 13432671288159373049ull, 3856499883073652141ull}},
+{{8759181244683686146ull, 15112209381757023196ull,
+ 10701262564313302107ull, 2410312426921032588ull}},
+{{10948976555854607682ull, 14278575708768891091ull,
+ 13376578205391627634ull, 3012890533651290735ull}},
+{{9074534676390871698ull, 8624847599106338056ull,
+ 12109036738312146639ull, 3766113167064113419ull}},
+{{5671584172744294812ull, 12308058777082543141ull,
+ 5262304952231397697ull, 2353820729415070887ull}},
+{{11701166234357756418ull, 1550015416071015214ull,
+ 1966195171861859218ull, 2942275911768838609ull}},
+{{5403085756092419715ull, 11160891306943544826ull,
+ 7069429983254711926ull, 3677844889711048261ull}},
+{{15977229231970300451ull, 4727742096824655224ull,
+ 13448473497495777812ull, 4597306112138810326ull}},
+{{9985768269981437782ull, 12178210847370185323ull,
+ 3793609917507473228ull, 2873316320086756454ull}},
+{{7870524319049409324ull, 15222763559212731654ull,
+ 13965384433739117343ull, 3591645400108445567ull}},
+{{614783361956985847ull, 14416768430588526664ull,
+ 12845044523746508775ull, 4489556750135556959ull}},
+{{384239601223116154ull, 15928009296758911021ull,
+ 14945681854982649840ull, 2805972968834723099ull}},
+{{5091985519956283097ull, 1463267547239087160ull,
+ 14070416300300924397ull, 3507466211043403874ull}},
+{{6364981899945353871ull, 6440770452476246854ull,
+ 8364648338521379688ull, 4384332763804254843ull}},
+{{17813171742748009882ull, 4025481532797654283ull,
+ 2922062202362168353ull, 2740207977377659277ull}},
+{{17654778660007624448ull, 9643537934424455758ull,
+ 8264263771380098345ull, 3425259971722074096ull}},
+{{12845101288154754752ull, 16666108436457957602ull,
+ 10330329714225122931ull, 4281574964652592620ull}},
+{{12639874323524109624ull, 8110474763572529549ull,
+ 15679828108245477640ull, 2675984352907870387ull}},
+{{1964784849122973318ull, 10138093454465661937ull,
+ 14988099116879459146ull, 3344980441134837984ull}},
+{{7067667079831104551ull, 3449244781227301613ull, 288379822389772317ull,
+ 4181225551418547481ull}},
+{{6723134934108134297ull, 4461620997480757460ull,
+ 11709452435062077458ull, 2613265969636592175ull}},
+{{8403918667635167871ull, 14800398283705722633ull,
+ 10025129525400208918ull, 3266582462045740219ull}},
+{{15116584352971347742ull, 9277125817777377483ull,
+ 7919725888322873244ull, 4083228077557175274ull}},
+{{7142022211393398387ull, 15021575672965636735ull,
+ 9561514698629183681ull, 2552017548473234546ull}},
+{{4315841745814360080ull, 4941911535924882207ull,
+ 2728521336431703794ull, 3190021935591543183ull}},
+{{783116163840562195ull, 15400761456760878567ull,
+ 17245709725821793454ull, 3987527419489428978ull}},
+{{7406976630041433228ull, 5013789892048161200ull,
+ 15390254597066008813ull, 2492204637180893111ull}},
+{{9258720787551791535ull, 10878923383487589404ull,
+ 14626132227905123112ull, 3115255796476116389ull}},
+{{11573400984439739419ull, 13598654229359486755ull,
+ 4447607229599240178ull, 3894069745595145487ull}},
+{{4927532606061143185ull, 13110844911777067126ull,
+ 9697283546140606967ull, 2433793590996965929ull}},
+{{15382787794431204789ull, 11776870121293946003ull,
+ 16733290451103146613ull, 3042241988746207411ull}},
+{{14616798724611618082ull, 886029596335268792ull,
+ 16304927045451545363ull, 3802802485932759264ull}},
+{{9135499202882261302ull, 16694669562205400659ull,
+ 10190579403407215851ull, 2376751553707974540ull}},
+{{6807687985175438723ull, 16256650934329362920ull,
+ 12738224254259019814ull, 2970939442134968175ull}},
+{{8509609981469298404ull, 11097441631056927842ull,
+ 11311094299396386864ull, 3713674302668710219ull}},
+{{9930192256845699406ull, 6935901019410579901ull,
+ 4763590927909047838ull, 2321046439167943887ull}},
+{{17024426339484512162ull, 17893248311118000684ull,
+ 1342802641458921893ull, 2901308048959929859ull}},
+{{2833788850646088586ull, 8531502333615337144ull,
+ 15513561357105816079ull, 3626635061199912323ull}},
+{{3542236063307610733ull, 6052691898591783526ull,
+ 14780265677954882195ull, 4533293826499890404ull}},
+{{16048955594849420420ull, 1477089427406170751ull, 14294011867025564ull,
+ 2833308641562431503ull}},
+{{15449508475134387621ull, 1846361784257713439ull,
+ 13852925570115945667ull, 3541635801953039378ull}},
+{{14700199575490596622ull, 16143010285604305511ull,
+ 8092784925790156275ull, 4427044752441299223ull}},
+{{16105153762322704745ull, 7783538419288996992ull,
+ 11975519606259929528ull, 2766902970275812014ull}},
+{{1684698129193829315ull, 9729423024111246241ull,
+ 5746027470970136102ull, 3458628712844765018ull}},
+{{6717558679919674548ull, 2938406743284281993ull,
+ 16405906375567445936ull, 4323285891055956272ull}},
+{{15727689221018266353ull, 1836504214552676245ull,
+ 10253691484729653710ull, 2702053681909972670ull}},
+{{5824553470990669229ull, 11519002305045621115ull,
+ 3593742319057291329ull, 3377567102387465838ull}},
+{{2669005820310948632ull, 563694826024862682ull,
+ 13715549935676389970ull, 4221958877984332297ull}},
+{{6279814656121730799ull, 4963995284692927080ull,
+ 1654689682156661875ull, 2638724298740207686ull}},
+{{7849768320152163499ull, 1593308087438770946ull,
+ 11291734139550603152ull, 3298405373425259607ull}},
+{{588838363335428565ull, 1991635109298463683ull, 9502981656010866036ull,
+ 4123006716781574509ull}},
+{{16508925041580500517ull, 10468143980166315609ull,
+ 8245206544220485224ull, 2576879197988484068ull}},
+{{6801098246693461935ull, 13085179975207894512ull,
+ 10306508180275606530ull, 3221098997485605085ull}},
+{{8501372808366827418ull, 7133102932155092332ull,
+ 17494821243771896067ull, 4026373746857006356ull}},
+{{14536730042084042945ull, 2152346323383238755ull,
+ 1710891240502659234ull, 2516483591785628973ull}},
+{{13559226534177665777ull, 11913804941083824252ull,
+ 6750300069055711946ull, 3145604489732036216ull}},
+{{16949033167722082221ull, 5668884139500004507ull,
+ 8437875086319639933ull, 3932005612165045270ull}},
+{{8287302720612607436ull, 5848895596401196769ull, 661985910522387054ull,
+ 2457503507603153294ull}},
+{{14970814419193147199ull, 16534491532356271769ull,
+ 10050854425007759625ull, 3071879384503941617ull}},
+{{4878459968709270287ull, 6833056360163176000ull,
+ 17175254049687087436ull, 3839849230629927021ull}},
+{{3049037480443293929ull, 13494032261956760808ull,
+ 13040376790268123599ull, 2399905769143704388ull}},
+{{3811296850554117411ull, 12255854309018563106ull,
+ 16300470987835154499ull, 2999882211429630485ull}},
+{{13987493100047422572ull, 10708131867845815978ull,
+ 6540530679511779412ull, 3749852764287038107ull}},
+{{13353869205957027012ull, 15915954454258410794ull,
+ 1781988665481168180ull, 2343657977679398817ull}},
+{{7468964470591507957ull, 1448198994113461877ull,
+ 6839171850278848130ull, 2929572472099248521ull}},
+{{13947891606666772850ull, 11033620779496603154ull,
+ 13160650831275948066ull, 3661965590124060651ull}},
+{{8211492471478690254ull, 4568653937515978135ull,
+ 11839127520667547179ull, 4577456987655075814ull}},
+{{12049711822315263265ull, 549565701733792382ull,
+ 2787768681989829083ull, 2860910617284422384ull}},
+{{5838767741039303273ull, 14522015182449404190ull,
+ 3484710852487286353ull, 3576138271605527980ull}},
+{{16521831713153904899ull, 4317460922779591525ull,
+ 4355888565609107942ull, 4470172839506909975ull}},
+{{12631987829934884514ull, 16533471132019408415ull,
+ 9639959381146774319ull, 2793858024691818734ull}},
+{{11178298768991217739ull, 16055152896596872615ull,
+ 2826577189578692091ull, 3492322530864773418ull}},
+{{9361187442811634269ull, 15457255102318702865ull,
+ 12756593523828140922ull, 4365403163580966772ull}},
+{{17379957197825741178ull, 14272470457376577194ull,
+ 17196242989247363884ull, 2728376977238104232ull}},
+{{12501574460427400665ull, 17840588071720721493ull,
+ 3048559662849653239ull, 3410471221547630291ull}},
+{{1791910020252087119ull, 17689049071223513963ull,
+ 17645757633844230261ull, 4263089026934537863ull}},
+{{17260844827153412114ull, 13361498678728390178ull,
+ 17946127548793725769ull, 2664430641834086164ull}},
+{{12352683997086989334ull, 2866815293128324011ull,
+ 3985915362282605596ull, 3330538302292607706ull}},
+{{10829168977931348763ull, 3583519116410405014ull,
+ 14205766239708032803ull, 4163172877865759632ull}},
+{{2156544592779705073ull, 18380600512252360798ull,
+ 8878603899817520501ull, 2601983048666099770ull}},
+{{11919052777829407149ull, 9140692585033287285ull,
+ 1874882837917124819ull, 3252478810832624713ull}},
+{{1063757917004595224ull, 6814179712864221203ull,
+ 6955289565823793928ull, 4065598513540780891ull}},
+{{16805749762623729679ull, 4258862320540138251ull,
+ 2041212969426177253ull, 2540999070962988057ull}},
+{{16395501184852274195ull, 9935263919102560718ull,
+ 7163202230210109470ull, 3176248838703735071ull}},
+{{11271004444210566936ull, 3195707862023425090ull,
+ 4342316769335248934ull, 3970311048379668839ull}},
+{{11656063796058992239ull, 15832375469046804393ull,
+ 9631477008475612439ull, 2481444405237293024ull}},
+{{735021689791576587ull, 15178783317881117588ull,
+ 12039346260594515549ull, 3101805506546616280ull}},
+{{918777112239470733ull, 5138421092069233273ull,
+ 15049182825743144437ull, 3877256883183270350ull}},
+{{12103450741218138969ull, 5517356191756964747ull,
+ 4794053247662077369ull, 2423285551989543969ull}},
+{{10517627408095285807ull, 11508381258123593838ull,
+ 10604252578004984615ull, 3029106939986929961ull}},
+{{3923662223264331450ull, 9773790554227104394ull,
+ 17867001740933618673ull, 3786383674983662451ull}},
+{{7063974907967595060ull, 17637834142460410006ull,
+ 8861033078869817718ull, 2366489796864789032ull}},
+{{18053340671814269633ull, 12823920641220736699ull,
+ 11076291348587272148ull, 2958112246080986290ull}},
+{{17954989821340449138ull, 16029900801525920874ull,
+ 4621992148879314377ull, 3697640307601232863ull}},
+{{15833554656765168615ull, 3101158973312618690ull,
+ 9806274120690653342ull, 2311025192250770539ull}},
+{{10568571284101684961ull, 13099820753495549171ull,
+ 7646156632435928773ull, 2888781490313463174ull}},
+{{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull,
+ 3610976862891828968ull}},
+{{10748785108374647871ull, 17009705413516254652ull,
+ 417904692112668948ull, 4513721078614786210ull}},
+{{15941362729588930728ull, 1407693846592883349ull,
+ 4872876450997805997ull, 2821075674134241381ull}},
+{{6091645356703999697ull, 6371303326668492091ull,
+ 10702781582174645400ull, 3526344592667801726ull}},
+{{3002870677452611718ull, 7964129158335615114ull,
+ 4155104940863530942ull, 4407930740834752158ull}},
+{{6488480191835270228ull, 365894705532371542ull,
+ 16431998643321870551ull, 2754956713021720098ull}},
+{{17333972276648863593ull, 14292426437197628139ull,
+ 11316626267297562380ull, 3443695891277150123ull}},
+{{17055779327383691587ull, 17865533046497035174ull,
+ 9534096815694565071ull, 4304619864096437654ull}},
+{{6048176061187419338ull, 18083487181701728840ull,
+ 1347124491381715265ull, 2690387415060273534ull}},
+{{7560220076484274172ull, 8769300921844997338ull,
+ 10907277651081919890ull, 3362984268825341917ull}},
+{{226903058750566907ull, 1738254115451470865ull,
+ 18245783082279787767ull, 4203730336031677396ull}},
+{{11671029457787574077ull, 8003937849798251146ull,
+ 2180242389570091546ull, 2627331460019798373ull}},
+{{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull,
+ 3284164325024747966ull}},
+{{11318454500152002639ull, 5588623862668685560ull,
+ 18394608293592278729ull, 4105205406280934957ull}},
+{{7074034062595001650ull, 15022104960236398235ull,
+ 13802473192708868157ull, 2565753378925584348ull}},
+{{4230856559816364158ull, 4942573145013334082ull,
+ 17253091490886085197ull, 3207191723656980435ull}},
+{{14511942736625231005ull, 10789902449694055506ull,
+ 16954678345180218592ull, 4008989654571225544ull}},
+{{13681650228818157283ull, 6743689031058784691ull,
+ 10596673965737636620ull, 2505618534107015965ull}},
+{{12490376767595308699ull, 8429611288823480864ull,
+ 17857528475599433679ull, 3132023167633769956ull}},
+{{15612970959494135874ull, 5925328092601963176ull,
+ 3875166520789740483ull, 3915028959542212446ull}},
+{{9758106849683834921ull, 1397487048662533033ull,
+ 16257037130775751514ull, 2446893099713882778ull}},
+{{16809319580532181555ull, 10970230847682942099ull,
+ 11097924376614913584ull, 3058616374642353473ull}},
+{{16399963457237839040ull, 13712788559603677624ull,
+ 37347415486478268ull, 3823270468302941842ull}},
+{{10249977160773649400ull, 17793864886607074323ull,
+ 4635028153106436821ull, 2389544042689338651ull}},
+{{8200785432539673846ull, 8407273052976679192ull,
+ 1182099172955658123ull, 2986930053361673314ull}},
+{{10250981790674592308ull, 5897405297793461086ull,
+ 10700996003049348462ull, 3733662566702091642ull}},
+{{1795177600744232288ull, 17520936366403076891ull,
+ 11299808520333230692ull, 2333539104188807276ull}},
+{{16079030056212454072ull, 3454426384294294497ull,
+ 14124760650416538366ull, 2916923880236009095ull}},
+{{6263729514983403878ull, 13541405017222643930ull,
+ 13044264794593285053ull, 3646154850295011369ull}},
+{{17053033930584030656ull, 3091698216246141200ull,
+ 2470272937959442605ull, 4557693562868764212ull}},
+{{10658146206615019160ull, 4238154394367532202ull,
+ 10767292623079427436ull, 2848558476792977632ull}},
+{{4099310721413998142ull, 5297692992959415253ull,
+ 13459115778849284295ull, 3560698095991222040ull}},
+{{9735824420194885581ull, 2010430222771881162ull,
+ 16823894723561605369ull, 4450872619989027550ull}},
+{{10696576281049191393ull, 12785733935300895486ull,
+ 5903248183798615451ull, 2781795387493142219ull}},
+{{4147348314456713433ull, 11370481400698731454ull,
+ 2767374211320881410ull, 3477244234366427774ull}},
+{{14407557429925667599ull, 4989729714018638509ull,
+ 12682589801005877571ull, 4346555292958034717ull}},
+{{11310566402917236201ull, 812738062047955116ull,
+ 10232461634842367434ull, 2716597058098771698ull}},
+{{14138208003646545252ull, 10239294614414719703ull,
+ 3567205006698183484ull, 3395746322623464623ull}},
+{{13061073986130793660ull, 12799118268018399629ull,
+ 18294064313654893067ull, 4244682903279330778ull}},
+{{10469014250545439990ull, 5693605908297805816ull,
+ 16045476214461696071ull, 2652926814549581736ull}},
+{{13086267813181799987ull, 2505321366944869366ull,
+ 1610101194367568473ull, 3316158518186977171ull}},
+{{7134462729622474176ull, 7743337727108474612ull,
+ 15847684548241624303ull, 4145198147733721463ull}},
+{{13682411242868822168ull, 11757115107083878488ull,
+ 16822331870292097045ull, 2590748842333575914ull}},
+{{17103014053586027710ull, 861335828572684398ull,
+ 11804542801010345499ull, 3238436052916969893ull}},
+{{12155395530127758829ull, 14911727840998019210ull,
+ 920620445980768161ull, 4048045066146212367ull}},
+{{12208808224757237173ull, 2402300872982680150ull,
+ 7492916806379061957ull, 2530028166341382729ull}},
+{{6037638244091770658ull, 7614562109655738092ull,
+ 13977832026401215350ull, 3162535207926728411ull}},
+{{7547047805114713322ull, 294830600214896807ull,
+ 12860604014574131284ull, 3953169009908410514ull}},
+{{11634433905837777682ull, 9407641161989086312ull,
+ 12649563527536219956ull, 2470730631192756571ull}},
+{{14543042382297222103ull, 11759551452486357890ull,
+ 11200268390992887041ull, 3088413288990945714ull}},
+{{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull,
+ 3860516611238682143ull}},
+{{3291301328921775936ull, 5151924306131002686ull,
+ 9903131185070039977ull, 2412822882024176339ull}},
+{{13337498698006995728ull, 11051591401091141261ull,
+ 7767227962910162067ull, 3016028602530220424ull}},
+{{2836815317226580948ull, 9202803232936538673ull,
+ 9709034953637702584ull, 3770035753162775530ull}},
+{{13302224619335082852ull, 5751752020585336670ull,
+ 10679832864450952019ull, 2356272345726734706ull}},
+{{7404408737314077757ull, 2578004007304282934ull,
+ 4126419043708914216ull, 2945340432158418383ull}},
+{{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull,
+ 3681675540198022979ull}},
+{{40173605984776736ull, 13251503298267717893ull,
+ 14517980288043107294ull, 4602094425247528723ull}},
+{{2330951512954179412ull, 3670503542989935779ull,
+ 6767894670813248107ull, 2876309015779705452ull}},
+{{16748747446474887977ull, 18423187484019583435ull,
+ 8459868338516560133ull, 3595386269724631815ull}},
+{{16324248289666222067ull, 9193926299742315582ull,
+ 5963149404718312263ull, 4494232837155789769ull}},
+{{5590969162614000888ull, 12663732964980029095ull,
+ 15256183424017414924ull, 2808895523222368605ull}},
+{{2377025434840113206ull, 15829666206225036369ull,
+ 5235171224739604943ull, 3511119404027960757ull}},
+{{7582967811977529411ull, 15175396739353907557ull,
+ 11155650049351894083ull, 4388899255034950946ull}},
+{{7045197891699649834ull, 7178779952882498271ull,
+ 11583967299272321706ull, 2743062034396844341ull}},
+{{4194811346197174389ull, 18196846977957898647ull,
+ 644901068808238420ull, 3428827542996055427ull}},
+{{631828164319080082ull, 4299314648737821693ull,
+ 14641184391292461738ull, 4286034428745069283ull}},
+{{2700735611913119003ull, 7298757673888526462ull,
+ 6844897235344094634ull, 2678771517965668302ull}},
+{{12599291551746174562ull, 18346819129215433885ull,
+ 17779493581034894100ull, 3348464397457085377ull}},
+{{1914056384400554490ull, 4486779837809740741ull,
+ 8389308921011453914ull, 4185580496821356722ull}},
+{{3502128249464040509ull, 7415923417058475867ull,
+ 9855004094059546600ull, 2615987810513347951ull}},
+{{18212718367112214348ull, 9269904271323094833ull,
+ 7707069099147045346ull, 3269984763141684939ull}},
+{{8930839903608104222ull, 2364008302299092734ull,
+ 5022150355506418779ull, 4087480953927106174ull}},
+{{970088921327677235ull, 17618406253432790623ull,
+ 16973902027473675448ull, 2554675596204441358ull}},
+{{15047669206941760256ull, 3576263743081436662ull,
+ 11994005497487318503ull, 3193344495255551698ull}},
+{{9586214471822424512ull, 18305387734133959540ull,
+ 5769134835004372320ull, 3991680619069439623ull}},
+{{15214756081743791128ull, 11440867333833724712ull,
+ 10523238299518814556ull, 2494800386918399764ull}},
+{{571701028470187294ull, 14301084167292155891ull,
+ 13154047874398518195ull, 3118500483647999705ull}},
+{{14549684340869897829ull, 13264669190687806959ull,
+ 2607501787715984032ull, 3898125604559999632ull}},
+{{16011081740684767999ull, 8290418244179879349ull,
+ 1629688617322490020ull, 2436328502849999770ull}},
+{{6178794120573796287ull, 10363022805224849187ull,
+ 11260482808507888333ull, 3045410628562499712ull}},
+{{3111806632289857455ull, 17565464524958449388ull,
+ 14075603510634860416ull, 3806763285703124640ull}},
+{{11168251182035936718ull, 10978415328099030867ull,
+ 8797252194146787760ull, 2379227053564452900ull}},
+{{9348627959117532993ull, 13723019160123788584ull,
+ 10996565242683484700ull, 2974033816955566125ull}},
+{{11685784948896916241ull, 17153773950154735730ull,
+ 18357392571781743779ull, 3717542271194457656ull}},
+{{11915301611487960555ull, 8415265709633015879ull,
+ 11473370357363589862ull, 2323463919496536035ull}},
+{{10282440995932562789ull, 1295710100186494041ull,
+ 9730026928277099424ull, 2904329899370670044ull}},
+{{17464737263343091390ull, 1619637625233117551ull,
+ 12162533660346374280ull, 3630412374213337555ull}},
+{{17219235560751476334ull, 2024547031541396939ull,
+ 10591481057005579946ull, 4538015467766671944ull}},
+{{8456179216255978757ull, 5877027913140760991ull,
+ 6619675660628487466ull, 2836259667354169965ull}},
+{{5958538001892585542ull, 16569656928280727047ull,
+ 12886280594212997236ull, 3545324584192712456ull}},
+{{2836486483938344023ull, 2265327086641357193ull,
+ 16107850742766246546ull, 4431655730240890570ull}},
+{{13302019098529934775ull, 6027515447578236149ull,
+ 14679092732656291995ull, 2769784831400556606ull}},
+{{2792465817880254756ull, 2922708291045407283ull,
+ 9125493878965589186ull, 3462231039250695758ull}},
+{{17325640327632482157ull, 12876757400661534911ull,
+ 2183495311852210674ull, 4327788799063369698ull}},
+{{17746054232411383205ull, 12659659393840847223ull,
+ 5976370588335019575ull, 2704867999414606061ull}},
+{{17570881772086841102ull, 11212888223873671125ull,
+ 12082149253846162373ull, 3381084999268257576ull}},
+{{8128544159826387665ull, 181052224559925195ull,
+ 15102686567307702967ull, 4226356249085321970ull}},
+{{2774497090677798339ull, 7030686667991035103ull,
+ 14050865122994702258ull, 2641472655678326231ull}},
+{{17303179418629411635ull, 18011730371843569686ull,
+ 12951895385315989918ull, 3301840819597907789ull}},
+{{12405602236431988736ull, 13291290927949686300ull,
+ 2354811176362823686ull, 4127301024497384737ull}},
+{{16976873434624768768ull, 3695370811541166033ull,
+ 13000972031295234564ull, 2579563140310865460ull}},
+{{7386033737998797248ull, 4619213514426457542ull,
+ 16251215039119043205ull, 3224453925388581825ull}},
+{{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull,
+ 4030567406735727282ull}},
+{{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull,
+ 2519104629209829551ull}},
+{{13842222223753820550ull, 2349222876544249363ull,
+ 6214609585557347206ull, 3148880786512286939ull}},
+{{12691091761264887783ull, 12159900632535087512ull,
+ 3156575963519296103ull, 3936100983140358674ull}},
+{{7931932350790554864ull, 14517466922975511551ull,
+ 6584545995626947968ull, 2460063114462724171ull}},
+{{5303229420060805676ull, 18146833653719389439ull,
+ 3618996476106297056ull, 3075078893078405214ull}},
+{{2017350756648619191ull, 4236797993439685183ull,
+ 13747117631987647129ull, 3843848616348006517ull}},
+{{8178373250546468851ull, 14177213791968272999ull,
+ 10897791529205973407ull, 2402405385217504073ull}},
+{{5611280544755698159ull, 13109831221532953345ull,
+ 18233925429934854663ull, 3003006731521880091ull}},
+{{11625786699372010603ull, 11775603008488803777ull,
+ 18180720768991180425ull, 3753758414402350114ull}},
+{{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull,
+ 2346099009001468821ull}},
+{{5047420592760418868ull, 9776150602685301439ull,
+ 6133237568526430875ull, 2932623761251836027ull}},
+{{1697589722523135681ull, 7608502234929238895ull,
+ 3054860942230650690ull, 3665779701564795034ull}},
+{{15957045208436083313ull, 287255756806772810ull,
+ 13041948214643089171ull, 4582224626955993792ull}},
+{{14584839273699939975ull, 16320435912500090670ull,
+ 8151217634151930731ull, 2863890391847496120ull}},
+{{9007677055270149160ull, 15788858872197725434ull,
+ 10189022042689913414ull, 3579862989809370150ull}},
+{{2036224282232910642ull, 10512701553392380985ull,
+ 3512905516507615960ull, 4474828737261712688ull}},
+{{12801855222464038911ull, 6570438470870238115ull,
+ 2195565947817259975ull, 2796767960788570430ull}},
+{{11390633009652660735ull, 3601362070160409740ull,
+ 11967829471626350777ull, 3495959950985713037ull}},
+{{14238291262065825919ull, 9113388606127900079ull,
+ 1124728784250774759ull, 4369949938732141297ull}},
+{{15816461066432223055ull, 12613396906471019405ull,
+ 12232170536225203984ull, 2731218711707588310ull}},
+{{5935518277758115107ull, 15766746133088774257ull,
+ 6066841133426729172ull, 3414023389634485388ull}},
+{{12031083865625031788ull, 1261688592651416205ull,
+ 7583551416783411466ull, 4267529237043106735ull}},
+{{9825270425229338820ull, 5400241388834523032ull,
+ 11657248663130714022ull, 2667205773151941709ull}},
+{{12281588031536673524ull, 15973673772897929598ull,
+ 736502773631228815ull, 3334007216439927137ull}},
+{{6128613002566066097ull, 15355406197695024094ull,
+ 5532314485466423923ull, 4167509020549908921ull}},
+{{17665441181885955023ull, 7291285864345696106ull,
+ 14986911599484984712ull, 2604693137843693075ull}},
+{{12858429440502667971ull, 9114107330432120133ull,
+ 14121953480928842986ull, 3255866422304616344ull}},
+{{2237978745346171251ull, 2169262126185374359ull,
+ 17652441851161053733ull, 4069833027880770430ull}},
+{{8316265743482438888ull, 3661631838079552926ull,
+ 6421090138548270679ull, 2543645642425481519ull}},
+{{1171960142498272802ull, 18412097852881604870ull,
+ 3414676654757950444ull, 3179557053031851899ull}},
+{{10688322214977616811ull, 4568378242392454471ull,
+ 18103403873729601768ull, 3974446316289814873ull}},
+{{13597730412002092363ull, 2855236401495284044ull,
+ 4397098393439919249ull, 2484028947681134296ull}},
+{{16997163015002615453ull, 8180731520296492959ull,
+ 5496372991799899061ull, 3105036184601417870ull}},
+{{16634767750325881413ull, 14837600418798004103ull,
+ 16093838276604649634ull, 3881295230751772337ull}},
+{{17314258871594757739ull, 13885186280176140468ull,
+ 3141119895236824165ull, 2425809519219857711ull}},
+{{3196079515783895558ull, 3521424794938011874ull,
+ 17761457924328193919ull, 3032261899024822138ull}},
+{{13218471431584645255ull, 18236839048954678554ull,
+ 12978450368555466590ull, 3790327373781027673ull}},
+{{12873230663167791189ull, 6786338387169286192ull,
+ 1194002452706084763ull, 2368954608613142296ull}},
+{{16091538328959738986ull, 3871236965534219836ull,
+ 1492503065882605954ull, 2961193260766427870ull}},
+{{1667678837490122116ull, 14062418243772550604ull,
+ 11089000869208033250ull, 3701491575958034837ull}},
+{{10265671310286102131ull, 13400697420785232031ull,
+ 9236468552468714733ull, 2313432234973771773ull}},
+{{8220403119430239759ull, 2915813720699376327ull,
+ 16157271709013281321ull, 2891790293717214716ull}},
+{{5663817880860411795ull, 8256453169301608313ull,
+ 1749845562557050035ull, 3614737867146518396ull}},
+{{11691458369502902647ull, 5708880443199622487ull,
+ 2187306953196312544ull, 4518422333933147995ull}},
+{{14224690508580396011ull, 3568050276999764054ull,
+ 17507967910243553004ull, 2824013958708217496ull}},
+{{8557491098870719205ull, 4460062846249705068ull,
+ 3438215814094889639ull, 3530017448385271871ull}},
+{{10696863873588399007ull, 963392539384743431ull,
+ 18132827822900775761ull, 4412521810481589838ull}},
+{{13603068948633831235ull, 12131335383183934404ull,
+ 6721331370885596946ull, 2757826131550993649ull}},
+{{17003836185792289044ull, 5940797192125142197ull,
+ 13013350232034384087ull, 3447282664438742061ull}},
+{{7419737176958197593ull, 2814310471729039843ull,
+ 2431629734760816397ull, 4309103330548427577ull}},
+{{2331492726385179544ull, 4064787054044343854ull,
+ 13048983630293980008ull, 2693189581592767235ull}},
+{{12137737944836250237ull, 5080983817555429817ull,
+ 11699543519440087106ull, 3366486976990959044ull}},
+{{1337114375763149085ull, 15574601808799063080ull,
+ 14624429399300108882ull, 4208108721238698805ull}},
+{{835696484851968178ull, 14345812148926802329ull,
+ 11446111383776262003ull, 2630067950774186753ull}},
+{{5656306624492348127ull, 13320579167731115007ull,
+ 472581174438163792ull, 3287584938467733442ull}},
+{{2458697262188047254ull, 16650723959663893759ull,
+ 9814098504902480548ull, 4109481173084666802ull}},
+{{8454214816508611390ull, 1183330437935157791ull,
+ 10745497583991438247ull, 2568425733177916751ull}},
+{{5956082502208376333ull, 15314221102701110951ull,
+ 8820185961561909904ull, 3210532166472395939ull}},
+{{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull,
+ 4013165208090494924ull}},
+{{13300100739401646331ull, 2740863199630467122ull,
+ 13231838557807900481ull, 2508228255056559327ull}},
+{{7401753887397282105ull, 8037765017965471807ull,
+ 11928112178832487697ull, 3135285318820699159ull}},
+{{4640506340819214727ull, 14658892290884227663ull,
+ 10298454205113221717ull, 3919106648525873949ull}},
+{{9817845490653091061ull, 11467650691016336241ull,
+ 8742376887409457525ull, 2449441655328671218ull}},
+{{16883992881743751730ull, 499505308488256589ull,
+ 1704599072407046099ull, 3061802069160839023ull}},
+{{7269933046897525950ull, 14459439690892484449ull,
+ 15965806895790971335ull, 3827252586451048778ull}},
+{{16072923200379423479ull, 15954678834448884636ull,
+ 14590315328296744988ull, 2392032866531905486ull}},
+{{1644409926764727733ull, 1496604469351554180ull,
+ 9014522123516155428ull, 2990041083164881858ull}},
+{{2055512408455909666ull, 1870755586689442725ull,
+ 2044780617540418477ull, 3737551353956102323ull}},
+{{3590538264498637493ull, 3475065250894595655ull,
+ 17418888950458619212ull, 2335969596222563951ull}},
+{{18323230885905460578ull, 4343831563618244568ull,
+ 17161925169645886111ull, 2919961995278204939ull}},
+{{4457294533672274107ull, 818103436095417807ull,
+ 16840720443629969735ull, 3649952494097756174ull}},
+{{959932148662954729ull, 14857687350401435971ull,
+ 11827528517682686360ull, 4562440617622195218ull}},
+{{16740858657410204370ull, 9286054594000897481ull,
+ 12003891341979066879ull, 2851525386013872011ull}},
+{{7091015266480591750ull, 6995882224073733948ull,
+ 10393178159046445695ull, 3564406732517340014ull}},
+{{8863769083100739688ull, 4133166761664779531ull,
+ 3768100661953281311ull, 4455508415646675018ull}},
+{{3234012667724268353ull, 9500758253681569063ull,
+ 6966748932148188723ull, 2784692759779171886ull}},
+{{17877573889937499153ull, 7264261798674573424ull,
+ 17931808202040011712ull, 3480865949723964857ull}},
+{{3900223288712322326ull, 9080327248343216781ull,
+ 8579702197267850928ull, 4351082437154956072ull}},
+{{4743482564658895406ull, 5675204530214510488ull,
+ 5362313873292406830ull, 2719426523221847545ull}},
+{{5929353205823619257ull, 16317377699622913918ull,
+ 11314578360042896441ull, 3399283154027309431ull}},
+{{16635063544134299879ull, 6561664069246478685ull,
+ 9531536931626232648ull, 4249103942534136789ull}},
+{{12702757724297631377ull, 4101040043279049178ull,
+ 8263053591480089357ull, 2655689964083835493ull}},
+{{6655075118517263413ull, 9737986072526199377ull,
+ 14940503007777499600ull, 3319612455104794366ull}},
+{{12930529916573967170ull, 12172482590657749221ull,
+ 9452256722867098692ull, 4149515568880992958ull}},
+{{10387424207072423433ull, 16831173656015869071ull,
+ 1295974433364548778ull, 2593447230550620599ull}},
+{{8372594240413141387ull, 11815595033165060531ull,
+ 15455026096987849685ull, 3241809038188275748ull}},
+{{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull,
+ 4052261297735344686ull}},
+{{3658785488805649269ull, 16724923399604708884ull,
+ 14380082147485451518ull, 2532663311084590428ull}},
+{{4573481861007061586ull, 11682782212651110297ull,
+ 17975102684356814398ull, 3165829138855738035ull}},
+{{10328538344686214887ull, 5380105728959112063ull,
+ 17857192337018630094ull, 3957286423569672544ull}},
+{{13372865493069966160ull, 17197624135881608751ull,
+ 11160745210636643808ull, 2473304014731045340ull}},
+{{12104395847910069796ull, 3050286096142459323ull,
+ 13950931513295804761ull, 3091630018413806675ull}},
+{{10518808791460199341ull, 8424543638605462058ull,
+ 12826978373192368047ull, 3864537523017258344ull}},
+{{11185941513090012492ull, 12182868801769495642ull,
+ 8016861483245230029ull, 2415335951885786465ull}},
+{{4759054854507739807ull, 1393527946929705841ull,
+ 14632762872483925441ull, 3019169939857233081ull}},
+{{10560504586562062663ull, 6353595952089520205ull,
+ 4455895535322743089ull, 3773962424821541352ull}},
+{{8906158375814983117ull, 15500212516124419888ull,
+ 2784934709576714430ull, 2358726515513463345ull}},
+{{11132697969768728896ull, 10151893608300749052ull,
+ 8092854405398280942ull, 2948408144391829181ull}},
+{{13915872462210911119ull, 3466494973521160507ull,
+ 14727754025175239082ull, 3685510180489786476ull}},
+{{12783154559336250995ull, 13556490753756226442ull,
+ 18409692531469048852ull, 4606887725612233095ull}},
+{{12601157618012544776ull, 17696178757952417334ull,
+ 18423586859809237388ull, 2879304828507645684ull}},
+{{6528074985660905162ull, 3673479373730970052ull,
+ 4582739501051995120ull, 3599131035634557106ull}},
+{{8160093732076131452ull, 4591849217163712565ull,
+ 14951796413169769708ull, 4498913794543196382ull}},
+{{7405901591761276110ull, 12093277797582096161ull,
+ 4733186739803718163ull, 2811821121589497739ull}},
+{{13869063008128983041ull, 10504911228550232297ull,
+ 1304797406327259800ull, 3514776401986872174ull}},
+{{3501270704879065090ull, 13131139035687790372ull,
+ 10854368794763850558ull, 4393470502483590217ull}},
+{{11411666227404191489ull, 3595275878877481078ull,
+ 18313195542795876359ull, 2745919064052243885ull}},
+{{5041210747400463553ull, 18329152903879015060ull,
+ 9056436373212681736ull, 3432398830065304857ull}},
+{{6301513434250579442ull, 4464697056139217209ull,
+ 15932231484943240075ull, 4290498537581631071ull}},
+{{15467660942475081911ull, 484592650873316803ull,
+ 16875173705730606903ull, 2681561585988519419ull}},
+{{14722890159666464485ull, 14440798868873809716ull,
+ 16482281113735870724ull, 3351951982485649274ull}},
+{{18403612699583080606ull, 18050998586092262145ull,
+ 11379479355315062597ull, 4189939978107061593ull}},
+{{4584728909598343523ull, 13587717125521357793ull,
+ 194645569430832267ull, 2618712486316913496ull}},
+{{10342597155425317307ull, 12372960388474309337ull,
+ 243306961788540334ull, 3273390607896141870ull}},
+{{17539932462709034538ull, 6242828448738110863ull,
+ 9527505739090451226ull, 4091738259870177337ull}},
+{{17879986816834228443ull, 8513453798888707193ull,
+ 17483906133000001776ull, 2557336412418860835ull}},
+{{8514925465760621841ull, 10641817248610883992ull,
+ 17243196647822614316ull, 3196670515523576044ull}},
+{{10643656832200777301ull, 13302271560763604990ull,
+ 3107251736068716279ull, 3995838144404470056ull}},
+{{2040599501698097909ull, 15231448753118334975ull,
+ 1942032335042947674ull, 2497398840252793785ull}},
+{{16385807432404786099ull, 9815938904543142910ull,
+ 7039226437231072497ull, 3121748550315992231ull}},
+{{11258887253651206815ull, 16881609649106316542ull,
+ 4187347028111452717ull, 3902185687894990289ull}},
+{{2425118515104616356ull, 12856849039905141791ull,
+ 14146306938638127708ull, 2438866054934368930ull}},
+{{16866456199162934157ull, 16071061299881427238ull,
+ 8459511636442883827ull, 3048582568667961163ull}},
+{{11859698212098891888ull, 15477140606424396144ull,
+ 5962703527126216880ull, 3810728210834951454ull}},
+{{7412311382561807430ull, 9673212879015247590ull,
+ 17561747759736049262ull, 2381705131771844658ull}},
+{{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull,
+ 2977131414714805823ull}},
+{{52521489184354349ull, 12808552114247630408ull,
+ 11299329810091719308ull, 3721414268393507279ull}},
+{{32825930740221468ull, 17228717108259544813ull,
+ 13979610158948406423ull, 2325883917745942049ull}},
+{{4652718431852664739ull, 16924210366897043112ull,
+ 3639454643403344317ull, 2907354897182427562ull}},
+{{5815898039815830924ull, 7320204903339140178ull,
+ 13772690341108956205ull, 3634193621478034452ull}},
+{{16493244586624564463ull, 13761942147601313126ull,
+ 17215862926386195256ull, 4542742026847543065ull}},
+{{5696591848212964885ull, 8601213842250820704ull,
+ 3842385301350290179ull, 2839213766779714416ull}},
+{{7120739810266206107ull, 6139831284386137976ull,
+ 4802981626687862724ull, 3549017208474643020ull}},
+{{8900924762832757633ull, 7674789105482672470ull,
+ 6003727033359828405ull, 4436271510593303775ull}},
+{{951391958343085617ull, 7102586200140364246ull,
+ 10669858423490974609ull, 2772669694120814859ull}},
+{{10412611984783632829ull, 13489918768602843211ull,
+ 8725637010936330357ull, 3465837117651018574ull}},
+{{8404078962552153132ull, 3027340405471390302ull,
+ 1683674226815637139ull, 4332296397063773218ull}},
+{{640863333167707804ull, 18032988817915476603ull,
+ 5663982410187161115ull, 2707685248164858261ull}},
+{{14636137221741798467ull, 17929550003966957849ull,
+ 11691664031161339298ull, 3384606560206072826ull}},
+{{4460113471895084371ull, 13188565468103921504ull,
+ 5391208002096898315ull, 4230758200257591033ull}},
+{{2787570919934427732ull, 5937010408351256988ull,
+ 14898720047379031207ull, 2644223875160994395ull}},
+{{3484463649918034665ull, 2809576992011683331ull,
+ 14011714040796401105ull, 3305279843951242994ull}},
+{{18190637617679707043ull, 8123657258441992067ull,
+ 8291270514140725573ull, 4131599804939053743ull}},
+{{9063305501836122950ull, 7383128795739938994ull,
+ 12099573098979035339ull, 2582249878086908589ull}},
+{{2105759840440377880ull, 4617224976247535839ull,
+ 1289408318441630462ull, 3227812347608635737ull}},
+{{16467257855832636061ull, 14994903257164195606ull,
+ 6223446416479425981ull, 4034765434510794671ull}},
+{{5680350141468009635ull, 11677657544941316206ull,
+ 10807183037940723094ull, 2521728396569246669ull}},
+{{16323809713689787851ull, 5373699894321869449ull,
+ 18120664815853291772ull, 3152160495711558336ull}},
+{{6569704086830071102ull, 6717124867902336812ull,
+ 4204086946107063099ull, 3940200619639447921ull}},
+{{13329437091123570247ull, 1892360033225266555ull,
+ 14156769387385384197ull, 2462625387274654950ull}},
+{{12050110345477074904ull, 6977136059958971098ull,
+ 8472589697376954438ull, 3078281734093318688ull}},
+{{5839265894991567822ull, 17944792111803489681ull,
+ 10590737121721193047ull, 3847852167616648360ull}},
+{{15178756230438199649ull, 18133024097518262906ull,
+ 6619210701075745654ull, 2404907604760405225ull}},
+{{9750073251192973753ull, 13442908085043052825ull,
+ 12885699394772069972ull, 3006134505950506531ull}},
+{{16799277582418605095ull, 16803635106303816031ull,
+ 11495438225037699561ull, 3757668132438133164ull}},
+{{17417077516652710041ull, 3584742913798803163ull,
+ 16408020927503338034ull, 2348542582773833227ull}},
+{{17159660877388499647ull, 13704300679103279762ull,
+ 15898340140951784638ull, 2935678228467291534ull}},
+{{12226204059880848751ull, 7907003812024323895ull,
+ 10649553139334954990ull, 3669597785584114418ull}},
+{{10671069056423673034ull, 660382728175629061ull,
+ 4088569387313917930ull, 4586997231980143023ull}},
+{{8975261169478489598ull, 5024425223537156067ull,
+ 9472884894712280562ull, 2866873269987589389ull}},
+{{6607390443420724094ull, 15503903566276220892ull,
+ 16452792136817738606ull, 3583591587484486736ull}},
+{{8259238054275905117ull, 10156507420990500307ull,
+ 2119246097312621642ull, 4479489484355608421ull}},
+{{2856180774708746746ull, 10959503156546450596ull,
+ 3630371820034082478ull, 2799680927722255263ull}},
+{{3570225968385933433ull, 4476006908828287437ull,
+ 18373022830324766810ull, 3499601159652819078ull}},
+{{9074468478909804695ull, 14818380672890135104ull,
+ 13742906501051182704ull, 4374501449566023848ull}},
+{{5671542799318627935ull, 9261487920556334440ull,
+ 8589316563156989190ull, 2734063405978764905ull}},
+{{7089428499148284918ull, 2353487863840642242ull,
+ 15348331722373624392ull, 3417579257473456131ull}},
+{{18085157660790131956ull, 2941859829800802802ull,
+ 14573728634539642586ull, 4271974071841820164ull}},
+{{15914909556421220376ull, 6450348412052889655ull,
+ 18331952433442052424ull, 2669983794901137602ull}},
+{{15281950927099137566ull, 8062935515066112069ull,
+ 13691568504947789722ull, 3337479743626422003ull}},
+{{5267380603591758246ull, 855297356977864279ull,
+ 12502774612757349249ull, 4171849679533027504ull}},
+{{10209641904885930760ull, 12063775894179634934ull,
+ 7814234132973343280ull, 2607406049708142190ull}},
+{{3538680344252637642ull, 15079719867724543668ull,
+ 544420629361903292ull, 3259257562135177738ull}},
+{{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull,
+ 4074071952668972172ull}},
+{{14293809065015842918ull, 9475188137446105788ull,
+ 15413308176577997635ull, 2546294970418107607ull}},
+{{17867261331269803647ull, 7232299153380244331ull,
+ 14654949202295109140ull, 3182868713022634509ull}},
+{{17722390645659866655ull, 9040373941725305414ull,
+ 4483628447586722713ull, 3978585891278293137ull}},
+{{6464808135110028755ull, 17179448759646785644ull,
+ 14331482825810171455ull, 2486616182048933210ull}},
+{{8081010168887535944ull, 16862624931131094151ull,
+ 8690981495407938511ull, 3108270227561166513ull}},
+{{5489576692682032026ull, 16466595145486479785ull,
+ 15475412887687311043ull, 3885337784451458141ull}},
+{{14960200478994739776ull, 7985778956715355913ull,
+ 11977976064018263354ull, 2428336115282161338ull}},
+{{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull,
+ 3035420144102701673ull}},
+{{6081490679326576260ull, 5560250592226661759ull,
+ 11798058572387454635ull, 3794275180128377091ull}},
+{{10718460702220192019ull, 1169313610927969647ull,
+ 5067943598528465195ull, 2371421987580235682ull}},
+{{8786389859347852119ull, 15296700068942125771ull,
+ 15558301535015357301ull, 2964277484475294602ull}},
+{{6371301305757427245ull, 5285817030895493502ull,
+ 10224504881914420819ull, 3705346855594118253ull}},
+{{17817121371380555740ull, 997792635095989486ull,
+ 8696158560410206964ull, 2315841784746323908ull}},
+{{13048029677370918867ull, 1247240793869986858ull,
+ 10870198200512758705ull, 2894802230932904885ull}},
+{{7086665059858872776ull, 6170737010764871477ull,
+ 18199433769068336285ull, 3618502788666131106ull}},
+{{13470017343250978874ull, 12325107281883477250ull,
+ 13525920174480644548ull, 4523128485832663883ull}},
+{{13030446857959249701ull, 16926564088031949089ull,
+ 6147857099836708890ull, 2826955303645414927ull}},
+{{2453000517166898414ull, 11934833073185160554ull,
+ 3073135356368498209ull, 3533694129556768659ull}},
+{{12289622683313398825ull, 1083483286199286980ull,
+ 17676477250742786474ull, 4417117661945960823ull}},
+{{16904386213925650074ull, 5288863072301942266ull,
+ 17965327309355323402ull, 2760698538716225514ull}},
+{{11907110730552286784ull, 15834450877232203641ull,
+ 13233287099839378444ull, 3450873173395281893ull}},
+{{1048830357908194768ull, 1346319522830702936ull,
+ 2706550819517059344ull, 4313591466744102367ull}},
+{{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull,
+ 2695994666715063979ull}},
+{{14654456772397940874ull, 10275184164066262476ull,
+ 6149718093871667028ull, 3369993333393829974ull}},
+{{18318070965497426093ull, 12843980205082828095ull,
+ 16910519654194359593ull, 4212491666742287467ull}},
+{{18366323381076973164ull, 1109958600535685703ull,
+ 8263231774657780794ull, 2632807291713929667ull}},
+{{18346218207918828551ull, 10610820287524382937ull,
+ 5717353699894838088ull, 3291009114642412084ull}},
+{{9097714704616371977ull, 13263525359405478672ull,
+ 7146692124868547610ull, 4113761393303015105ull}},
+{{5686071690385232486ull, 12901389368055812074ull,
+ 15995897624111312016ull, 2571100870814384440ull}},
+{{16330961649836316415ull, 16126736710069765092ull,
+ 1548127956429588404ull, 3213876088517980551ull}},
+{{1966957988585843903ull, 1711676813877654750ull,
+ 15770218000819149218ull, 4017345110647475688ull}},
+{{15064406798148316151ull, 5681484027100922122ull,
+ 9856386250511968261ull, 2510840694154672305ull}},
+{{9607136460830619381ull, 11713541052303540557ull,
+ 16932168831567348230ull, 3138550867693340381ull}},
+{{16620606594465662130ull, 5418554278524649888ull,
+ 7330152984177021576ull, 3923188584616675477ull}},
+{{10387879121541038832ull, 3386596424077906180ull,
+ 6887188624324332437ull, 2451992865385422173ull}},
+{{12984848901926298539ull, 8844931548524770629ull,
+ 13220671798832803450ull, 3064991081731777716ull}},
+{{2396003072125709462ull, 1832792398801187479ull,
+ 16525839748541004313ull, 3831238852164722145ull}},
+{{8415030947719650270ull, 12674710295319211934ull,
+ 3411120815197045839ull, 2394524282602951341ull}},
+{{1295416647794787029ull, 11231701850721627014ull,
+ 8875587037423695203ull, 2993155353253689176ull}},
+{{10842642846598259595ull, 9427941294974645863ull,
+ 11094483796779619004ull, 3741444191567111470ull}},
+{{13694180806764994103ull, 15115835346213929472ull,
+ 2322366354559873973ull, 2338402619729444669ull}},
+{{17117726008456242628ull, 5059736127485248128ull,
+ 7514643961627230371ull, 2923003274661805836ull}},
+{{2950413436860751669ull, 1712984140929172257ull,
+ 9393304952034037964ull, 3653754093327257295ull}},
+{{8299702814503327491ull, 2141230176161465321ull,
+ 7129945171615159551ull, 4567192616659071619ull}},
+{{16716529305133049442ull, 8255797887741997681ull,
+ 2150372723045780767ull, 2854495385411919762ull}},
+{{7060603576134148090ull, 5708061341250109198ull,
+ 11911337940662001767ull, 3568119231764899702ull}},
+{{18049126507022460921ull, 2523390658135248593ull,
+ 5665800388972726401ull, 4460149039706124628ull}},
+{{4363175039247956220ull, 13106334207403000131ull,
+ 12764497279962729808ull, 2787593149816327892ull}},
+{{842282780632557370ull, 16382917759253750164ull,
+ 15955621599953412260ull, 3484491437270409865ull}},
+{{1052853475790696713ull, 2031903125357636089ull,
+ 6109468944659601614ull, 4355614296588012332ull}},
+{{12187248468437655206ull, 15104997508630686267ull,
+ 13041790127267026816ull, 2722258935367507707ull}},
+{{10622374567119681103ull, 434502812078806218ull,
+ 11690551640656395617ull, 3402823669209384634ull}},
+{{4054596172044825571ull, 5154814533525895677ull,
+ 5389817513965718713ull, 4253529586511730793ull}},
+{{4839965616741709934ull, 14750974129522154558ull,
+ 14897850992297043955ull, 2658455991569831745ull}},
+{{15273329057781913225ull, 13827031643475305293ull,
+ 4787255685089141232ull, 3323069989462289682ull}},
+{{5256603266945227819ull, 17283789554344131617ull,
+ 15207441643216202348ull, 4153837486827862102ull}},
+{{14814592087909237147ull, 1578996434610306452ull,
+ 4892965008582738564ull, 2596148429267413814ull}},
+{{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull,
+ 3245185536584267267ull}},
+{{9312742082076019330ull, 7078867947505991736ull,
+ 14562786853551610862ull, 4056481920730334084ull}},
+{{5820463801297512082ull, 18259350522473408547ull,
+ 18325113820324532596ull, 2535301200456458802ull}},
+{{2663893733194502198ull, 4377444079382209068ull,
+ 13683020238550889938ull, 3169126500570573503ull}},
+{{3329867166493127747ull, 14695177136082537143ull,
+ 12492089279761224518ull, 3961408125713216879ull}},
+{{8998696006699286698ull, 4572799691624197810ull,
+ 14725084827491847180ull, 2475880078570760549ull}},
+{{2024997971519332565ull, 5715999614530247263ull,
+ 4571297979082645263ull, 3094850098213450687ull}},
+{{16366305519681329418ull, 2533313499735421174ull,
+ 1102436455425918675ull, 3868562622766813359ull}},
+{{5617254931373442982ull, 17724222001830495898ull,
+ 7606551812282281027ull, 2417851639229258349ull}},
+{{16244940701071579536ull, 17543591483860731968ull,
+ 14119875783780239188ull, 3022314549036572936ull}},
+{{1859431802629922803ull, 3482745281116363345ull,
+ 17649844729725298986ull, 3777893186295716170ull}},
+{{12691359922712171512ull, 6788401819125114994ull,
+ 15642838974505699770ull, 2361183241434822606ull}},
+{{6640827866535438582ull, 17708874310761169551ull,
+ 10330176681277348904ull, 2951479051793528258ull}},
+{{3689348814741910324ull, 3689348814741910323ull,
+ 3689348814741910323ull, 3689348814741910323ull}},
+{{0ull, 0ull, 0ull, 4611686018427387904ull}},
+{{0ull, 0ull, 0ull, 2882303761517117440ull}},
+{{0ull, 0ull, 0ull, 3602879701896396800ull}},
+{{0ull, 0ull, 0ull, 4503599627370496000ull}},
+{{0ull, 0ull, 0ull, 2814749767106560000ull}},
+{{0ull, 0ull, 0ull, 3518437208883200000ull}},
+{{0ull, 0ull, 0ull, 4398046511104000000ull}},
+{{0ull, 0ull, 0ull, 2748779069440000000ull}},
+{{0ull, 0ull, 0ull, 3435973836800000000ull}},
+{{0ull, 0ull, 0ull, 4294967296000000000ull}},
+{{0ull, 0ull, 0ull, 2684354560000000000ull}},
+{{0ull, 0ull, 0ull, 3355443200000000000ull}},
+{{0ull, 0ull, 0ull, 4194304000000000000ull}},
+{{0ull, 0ull, 0ull, 2621440000000000000ull}},
+{{0ull, 0ull, 0ull, 3276800000000000000ull}},
+{{0ull, 0ull, 0ull, 4096000000000000000ull}},
+{{0ull, 0ull, 0ull, 2560000000000000000ull}},
+{{0ull, 0ull, 0ull, 3200000000000000000ull}},
+{{0ull, 0ull, 0ull, 4000000000000000000ull}},
+{{0ull, 0ull, 0ull, 2500000000000000000ull}},
+{{0ull, 0ull, 0ull, 3125000000000000000ull}},
+{{0ull, 0ull, 0ull, 3906250000000000000ull}},
+{{0ull, 0ull, 0ull, 2441406250000000000ull}},
+{{0ull, 0ull, 0ull, 3051757812500000000ull}},
+{{0ull, 0ull, 0ull, 3814697265625000000ull}},
+{{0ull, 0ull, 0ull, 2384185791015625000ull}},
+{{0ull, 0ull, 0ull, 2980232238769531250ull}},
+{{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}},
+{{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}},
+{{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}},
+{{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}},
+{{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}},
+{{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}},
+{{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}},
+{{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}},
+{{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}},
+{{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}},
+{{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}},
+{{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}},
+{{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}},
+{{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}},
+{{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}},
+{{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}},
+{{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}},
+{{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}},
+{{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}},
+{{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}},
+{{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}},
+{{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}},
+{{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}},
+{{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}},
+{{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}},
+{{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}},
+{{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}},
+{{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}},
+{{0ull, 4611686018427387904ull, 9222577334724359131ull,
+ 3761581922631320025ull}},
+{{0ull, 576460752303423488ull, 17293325880271194217ull,
+ 2350988701644575015ull}},
+{{0ull, 5332261958806667264ull, 17004971331911604867ull,
+ 2938735877055718769ull}},
+{{0ull, 2053641430080946176ull, 7421156109607342372ull,
+ 3673419846319648462ull}},
+{{0ull, 2567051787601182720ull, 53073100154402157ull,
+ 4591774807899560578ull}},
+{{0ull, 3910250376464433152ull, 4644856706023889252ull,
+ 2869859254937225361ull}},
+{{0ull, 4887812970580541440ull, 10417756900957249469ull,
+ 3587324068671531701ull}},
+{{0ull, 10721452231653064704ull, 17633882144623949740ull,
+ 4484155085839414626ull}},
+{{0ull, 15924279681637941248ull, 15632862358817356491ull,
+ 2802596928649634141ull}},
+{{0ull, 15293663583620038656ull, 5706019893239531902ull,
+ 3503246160812042677ull}},
+{{0ull, 9893707442670272512ull, 11744210884976802782ull,
+ 4379057701015053346ull}},
+{{0ull, 1571881133241532416ull, 11951817821537889643ull,
+ 2736911063134408341ull}},
+{{0ull, 15799909471834079232ull, 1104714221640198341ull,
+ 3421138828918010427ull}},
+{{0ull, 5914828784510435328ull, 15215950832332411639ull,
+ 4276423536147513033ull}},
+{{0ull, 10614297017960103936ull, 2592440242566675418ull,
+ 2672764710092195646ull}},
+{{0ull, 4044499235595354112ull, 12463922340063120081ull,
+ 3340955887615244557ull}},
+{{0ull, 9667310062921580544ull, 1744844869796736389ull,
+ 4176194859519055697ull}},
+{{0ull, 8347911798539681792ull, 12619743089691430003ull,
+ 2610121787199409810ull}},
+{{0ull, 5823203729747214336ull, 6551306825259511696ull,
+ 3262652233999262263ull}},
+{{0ull, 7279004662184017920ull, 3577447513147001716ull,
+ 4078315292499077829ull}},
+{{0ull, 13772749950719787008ull, 4541747704930570024ull,
+ 2548947057811923643ull}},
+{{0ull, 17215937438399733760ull, 1065498612735824626ull,
+ 3186183822264904554ull}},
+{{0ull, 12296549761144891392ull, 10555245302774556591ull,
+ 3982729777831130692ull}},
+{{0ull, 14602872628356638976ull, 15820400351088873677ull,
+ 2489206111144456682ull}},
+{{0ull, 4418532730163635008ull, 10552128402006316289ull,
+ 3111507638930570853ull}},
+{{0ull, 10134851931131931664ull, 17801846520935283265ull,
+ 3889384548663213566ull}},
+{{0ull, 17863497503025927050ull, 6514468057157164136ull,
+ 2430865342914508479ull}},
+{{9223372036854775808ull, 3882627805072857196ull,
+ 3531399053019067267ull, 3038581678643135599ull}},
+{{11529215046068469760ull, 241598737913683591ull,
+ 18249306871555997796ull, 3798227098303919498ull}},
+{{14123288431433875456ull, 9374371248050828052ull,
+ 16017502813149886526ull, 2373891936439949686ull}},
+{{17654110539292344320ull, 2494592023208759257ull,
+ 10798506479582582350ull, 2967364920549937108ull}},
+{{8232580118833266688ull, 12341612065865724880ull,
+ 13498133099478227937ull, 3709206150687421385ull}},
+{{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull,
+ 2318253844179638366ull}},
+{{15655075254693265408ull, 5606659160333633146ull,
+ 11121877236270789064ull, 2897817305224547957ull}},
+{{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull,
+ 3622271631530684947ull}},
+{{17543526057817145344ull, 17983776974876077599ull,
+ 13919168667852566984ull, 4527839539413356183ull}},
+{{17882232813776797696ull, 11239860609297548499ull,
+ 15617009445048936221ull, 2829899712133347614ull}},
+{{17741104998793609216ull, 214767706339771912ull,
+ 10297889769456394469ull, 3537374640166684518ull}},
+{{3729637174782459904ull, 4880145651352102795ull,
+ 3648990174965717278ull, 4421718300208355648ull}},
+{{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull,
+ 2763573937630222280ull}},
+{{13866533336563843072ull, 11883064322366759140ull,
+ 2850773574191966623ull, 3454467422037777850ull}},
+{{17333166670704803840ull, 10242144384531061021ull,
+ 12786839004594734087ull, 4318084277547222312ull}},
+{{13139072178404196352ull, 13318869267972994994ull,
+ 7991774377871708804ull, 2698802673467013945ull}},
+{{7200468186150469632ull, 16648586584966243743ull,
+ 14601403990767023909ull, 3373503341833767431ull}},
+{{4388899214260699136ull, 6975675175925640967ull,
+ 13640068970031391983ull, 4216879177292209289ull}},
+{{9660591036554018816ull, 11277326012594607460ull,
+ 1607514078628538133ull, 2635549485807630806ull}},
+{{12075738795692523520ull, 261599460461095613ull,
+ 11232764635140448475ull, 3294436857259538507ull}},
+{{1259615439333490688ull, 14162057380858533229ull,
+ 9429269775498172689ull, 4118046071574423134ull}},
+{{3093102658797125632ull, 1933756835395501412ull,
+ 1281607591258970027ull, 2573778794734014459ull}},
+{{3866378323496407040ull, 16252254099526540477ull,
+ 15437067544355876245ull, 3217223493417518073ull}},
+{{9444658922797896704ull, 6480259569126011884ull,
+ 5461276375162681595ull, 4021529366771897592ull}},
+{{15126283863603461248ull, 1744319221490063475ull,
+ 3413297734476675997ull, 2513455854232435995ull}},
+{{14296168811076938656ull, 6792085045289967248ull,
+ 18101680223378008708ull, 3141819817790544993ull}},
+{{17870211013846173320ull, 8490106306612459060ull,
+ 8792042223940347173ull, 3927274772238181242ull}},
+{{1945509846799082517ull, 7612159450846480865ull,
+ 10106712408390104887ull, 2454546732648863276ull}},
+{{7043573326926241051ull, 4903513295130713177ull,
+ 12633390510487631109ull, 3068183415811079095ull}},
+{{13416152677085189217ull, 10741077637340779375ull,
+ 11180052119682150982ull, 3835229269763848869ull}},
+{{15302624450819325117ull, 2101487504910599205ull,
+ 9293375584015038316ull, 2397018293602405543ull}},
+{{5293222508241992684ull, 2626859381138249007ull,
+ 7005033461591409991ull, 2996272867003006929ull}},
+{{2004842116875102951ull, 17118632281704974971ull,
+ 13367977845416650392ull, 3745341083753758661ull}},
+{{17393927387542797009ull, 10699145176065609356ull,
+ 10660829162599100447ull, 2340838177346099163ull}},
+{{3295665160718944645ull, 8762245451654623792ull,
+ 8714350434821487655ull, 2926047721682623954ull}},
+{{4119581450898680806ull, 6341120796140891836ull,
+ 1669566006672083761ull, 3657559652103279943ull}},
+{{5149476813623351007ull, 12538087013603502699ull,
+ 15922015563622268413ull, 4571949565129099928ull}},
+{{912579999300900428ull, 10142147392715883139ull,
+ 9951259727263917758ull, 2857468478205687455ull}},
+{{14975783054408289246ull, 3454312204040078115ull,
+ 7827388640652509294ull, 3571835597757109319ull}},
+{{14108042799582973654ull, 13541262291904873452ull,
+ 5172549782388248713ull, 4464794497196386649ull}},
+{{18040898786594134342ull, 1545759904799464051ull,
+ 14762058660061125206ull, 2790496560747741655ull}},
+{{17939437464815280023ull, 11155571917854105872ull,
+ 13840887306649018603ull, 3488120700934677069ull}},
+{{3977552757309548413ull, 9332778878890244437ull,
+ 3466051078029109542ull, 4360150876168346337ull}},
+{{4791813482532161710ull, 1221300780879014869ull,
+ 13695496969836663224ull, 2725094297605216460ull}},
+{{10601452871592590042ull, 1526625976098768586ull,
+ 17119371212295829030ull, 3406367872006520575ull}},
+{{4028444052635961744ull, 11131654506978236541ull,
+ 16787527996942398383ull, 4257959840008150719ull}},
+{{4823620542111170042ull, 13874813094502479694ull,
+ 17409734025730080845ull, 2661224900005094199ull}},
+{{15252897714493738360ull, 3508458312845935905ull,
+ 17150481513735213153ull, 3326531125006367749ull}},
+{{5231064087835009238ull, 8997258909484807786ull,
+ 7603043836886852729ull, 4158163906257959687ull}},
+{{7881101073324268678ull, 17152501864496474626ull,
+ 11669431425695364811ull, 2598852441411224804ull}},
+{{628004304800560040ull, 16828941312193205379ull,
+ 14586789282119206014ull, 3248565551764031005ull}},
+{{14620063436282863761ull, 11812804603386730915ull,
+ 4398428547366843806ull, 4060706939705038757ull}},
+{{6831696638463095899ull, 2771316858689318918ull,
+ 5054860851317971331ull, 2537941837315649223ull}},
+{{17762992834933645682ull, 17299204128643812359ull,
+ 1706890045720076259ull, 3172427296644561529ull}},
+{{17592055025239669198ull, 17012319142377377545ull,
+ 6745298575577483228ull, 3965534120805701911ull}},
+{{4077505363133711393ull, 1409327427131085158ull,
+ 11133340637377008874ull, 2478458825503563694ull}},
+{{14320253740771915049ull, 10985031320768632255ull,
+ 4693303759866485284ull, 3098073531879454618ull}},
+{{13288631157537505907ull, 13731289150960790319ull,
+ 15090001736687882413ull, 3872591914849318272ull}},
+{{15222923501102023048ull, 10887898728564187901ull,
+ 9431251085429926508ull, 2420369946780823920ull}},
+{{5193596321095365098ull, 13609873410705234877ull,
+ 11789063856787408135ull, 3025462433476029900ull}},
+{{11103681419796594277ull, 12400655744954155692ull,
+ 14736329820984260169ull, 3781828041845037375ull}},
+{{16163172924227647231ull, 832880812955265451ull,
+ 16127735165756244462ull, 2363642526153148359ull}},
+{{15592280136857171135ull, 10264473053048857622ull,
+ 15547982938767917673ull, 2954553157691435449ull}},
+{{10266978134216688110ull, 17442277334738459932ull,
+ 5599920618177733379ull, 3693191447114294312ull}},
+{{15640233370740205877ull, 8595580324997843505ull,
+ 3499950386361083362ull, 2308244654446433945ull}},
+{{5715233658143093634ull, 1521103369392528574ull,
+ 8986624001378742107ull, 2885305818058042431ull}},
+{{16367414109533642851ull, 15736437267022824429ull,
+ 6621593983296039729ull, 3606632272572553039ull}},
+{{6624209581634889851ull, 5835488528496366825ull,
+ 3665306460692661758ull, 4508290340715691299ull}},
+{{15669346034590275917ull, 17482238385592392977ull,
+ 18431717602428771262ull, 2817681462947307061ull}},
+{{5751624487955681184ull, 12629425945135715414ull,
+ 9204588947753800366ull, 3522101828684133827ull}},
+{{16412902646799377288ull, 6563410394564868459ull,
+ 6894050166264862554ull, 4402627285855167284ull}},
+{{7952221145035916853ull, 8713817515030430691ull,
+ 13532153390770314904ull, 2751642053659479552ull}},
+{{5328590412867508163ull, 10892271893788038364ull,
+ 16915191738462893630ull, 3439552567074349440ull}},
+{{6660738016084385203ull, 4391967830380272147ull,
+ 2697245599369065422ull, 4299440708842936801ull}},
+{{1857118250839046800ull, 16580037949269833804ull,
+ 13214993545674135648ull, 2687150443026835500ull}},
+{{2321397813548808500ull, 2278303362877740639ull,
+ 16518741932092669561ull, 3358938053783544375ull}},
+{{16736805322218174337ull, 7459565222024563702ull,
+ 16036741396688449047ull, 4198672567229430469ull}},
+{{5848817307958971057ull, 11579757291406434170ull,
+ 12328806382143974606ull, 2624170354518394043ull}},
+{{16534393671803489629ull, 5251324577403266904ull,
+ 10799321959252580354ull, 3280212943147992554ull}},
+{{2221248016044810420ull, 15787527758608859439ull,
+ 4275780412210949634ull, 4100266178934990693ull}},
+{{8305809037669088369ull, 14478890867557925053ull,
+ 4978205766845537473ull, 2562666361834369183ull}},
+{{14993947315513748365ull, 4263555529165242604ull,
+ 1611071190129533938ull, 3203332952292961479ull}},
+{{295690070682633840ull, 14552816448311329064ull,
+ 15848897042944081134ull, 4004166190366201848ull}},
+{{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull,
+ 2502603868978876155ull}},
+{{4842693886148195591ull, 10216466345636378855ull,
+ 7770264796372675482ull, 3128254836223595194ull}},
+{{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull,
+ 3910318545279493993ull}},
+{{12430265883104630126ull, 13746221855562655860ull,
+ 11835126895200387600ull, 2443949090799683745ull}},
+{{15537832353880787657ull, 17182777319453319825ull,
+ 958850563718320788ull, 3054936363499604682ull}},
+{{5587232387068820859ull, 3031727575607098166ull,
+ 10421935241502676794ull, 3818670454374505852ull}},
+{{17327078297200176749ull, 6506515753181824257ull,
+ 15737081562793948804ull, 2386669033984066157ull}},
+{{7823789816218057224ull, 8133144691477280322ull,
+ 5836293898210272293ull, 2983336292480082697ull}},
+{{556365233417795722ull, 14778116882773988307ull,
+ 11907053391190228270ull, 3729170365600103371ull}},
+{{16488629335381979991ull, 4624637033306354787ull,
+ 5136065360280198717ull, 2330731478500064607ull}},
+{{15999100650800087084ull, 10392482310060331388ull,
+ 1808395681922860492ull, 2913414348125080759ull}},
+{{1552131739790557239ull, 12990602887575414236ull,
+ 16095552657685739327ull, 3641767935156350948ull}},
+{{1940164674738196549ull, 11626567591041879891ull,
+ 1672696748397622543ull, 4552209918945438686ull}},
+{{17353503986207230507ull, 14184133772042256787ull,
+ 14880493523030677801ull, 2845131199340899178ull}},
+{{17080193964331650230ull, 3895109159770657272ull,
+ 9377244866933571444ull, 3556413999176123973ull}},
+{{2903498381705011171ull, 4868886449713321591ull,
+ 16333242102094352209ull, 4445517498970154966ull}},
+{{8732215516206713838ull, 14572269077139295754ull,
+ 5596590295381582226ull, 2778448436856346854ull}},
+{{1691897358403616490ull, 8991964309569343885ull,
+ 16219109906081753591ull, 3473060546070433567ull}},
+{{6726557716431908516ull, 6628269368534291952ull,
+ 15662201364174804085ull, 4341325682588041959ull}},
+{{4204098572769942823ull, 6448511364547626422ull,
+ 16706404880250334409ull, 2713328551617526224ull}},
+{{14478495252817204336ull, 12672325224111920931ull,
+ 2436262026603366395ull, 3391660689521907781ull}},
+{{13486433047594117516ull, 11228720511712513260ull,
+ 7657013551681595898ull, 4239575861902384726ull}},
+{{17652392691601099256ull, 11629636338247708691ull,
+ 173947451373609532ull, 2649734913688990454ull}},
+{{17453804846073986166ull, 14537045422809635864ull,
+ 9440806351071787723ull, 3312168642111238067ull}},
+{{3370511983882931091ull, 13559620760084656927ull,
+ 7189321920412346750ull, 4140210802639047584ull}},
+{{9024099017567913788ull, 3863076956625522675ull,
+ 4493326200257716719ull, 2587631751649404740ull}},
+{{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull,
+ 3234539689561755925ull}},
+{{8335547191915630413ull, 14106508276975308012ull,
+ 11632508206330070277ull, 4043174611952194906ull}},
+{{14433089031802044817ull, 11122410682323261459ull,
+ 11882003647383681827ull, 2526984132470121816ull}},
+{{13429675271325168117ull, 9291327334476688920ull,
+ 14852504559229602284ull, 3158730165587652270ull}},
+{{16787094089156460146ull, 11614159168095861150ull,
+ 9342258662182227047ull, 3948412706984565338ull}},
+{{5880247787295399687ull, 14176378507700995075ull,
+ 10450597682291279808ull, 2467757941865353336ull}},
+{{2738623715691861705ull, 17720473134626243844ull,
+ 13063247102864099760ull, 3084697427331691670ull}},
+{{3423279644614827131ull, 3703847344573253189ull,
+ 7105686841725348893ull, 3855871784164614588ull}},
+{{4445392787097960909ull, 4620747599571977195ull,
+ 13664426312933118866ull, 2409919865102884117ull}},
+{{945054965445063232ull, 14999306536319747302ull,
+ 3245474835884234870ull, 3012399831378605147ull}},
+{{10404690743661104848ull, 9525761133544908319ull,
+ 17891901600137457300ull, 3765499789223256433ull}},
+{{13420460742429272386ull, 15176972745320343507ull,
+ 4264909472444828956ull, 2353437368264535271ull}},
+{{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull,
+ 2941796710330669089ull}},
+{{15204862387011503223ull, 655589822426097210ull,
+ 5510999546088198269ull, 3677245887913336361ull}},
+{{9782705946909603221ull, 5431173296460009417ull,
+ 11500435451037635740ull, 4596557359891670451ull}},
+{{17643406262886971773ull, 12617855347142281693ull,
+ 4881929147684828385ull, 2872848349932294032ull}},
+{{8219199773326551005ull, 1937261128645688405ull,
+ 6102411434606035482ull, 3591060437415367540ull}},
+{{14885685735085576660ull, 11644948447661886314ull,
+ 7628014293257544352ull, 4488825546769209425ull}},
+{{13915239602855873316ull, 7278092779788678946ull,
+ 16296723979354434980ull, 2805515966730755890ull}},
+{{8170677466715065837ull, 9097615974735848683ull,
+ 11147532937338267917ull, 3506894958413444863ull}},
+{{5601660814966444393ull, 15983705986847198758ull,
+ 9322730153245446992ull, 4383618698016806079ull}},
+{{17336096064636191458ull, 9989816241779499223ull,
+ 12744235373419486226ull, 2739761686260503799ull}},
+{{17058434062367851418ull, 3263898265369598221ull,
+ 11318608198346969879ull, 3424702107825629749ull}},
+{{7487984522677650560ull, 17914930886994161489ull,
+ 313202192651548636ull, 4280877634782037187ull}},
+{{16209205372742001360ull, 1973459767516575122ull,
+ 16336652434903075562ull, 2675548521738773241ull}},
+{{11038134679072725892ull, 11690196746250494711ull,
+ 6585757488346680740ull, 3344435652173466552ull}},
+{{9185982330413519461ull, 14612745932813118389ull,
+ 8232196860433350925ull, 4180544565216833190ull}},
+{{8047081965722143615ull, 11438809217221892945ull,
+ 533437019343456424ull, 2612840353260520744ull}},
+{{14670538475580067423ull, 14298511521527366181ull,
+ 666796274179320530ull, 3266050441575650930ull}},
+{{4503115039192920567ull, 8649767365054431919ull,
+ 10056867379578926471ull, 4082563051969563662ull}},
+{{9731975927136657210ull, 12323633630800101805ull,
+ 1673856093809441140ull, 2551601907480977289ull}},
+{{16776655927348209417ull, 15404542038500127256ull,
+ 6704006135689189329ull, 3189502384351221611ull}},
+{{2524075835475710155ull, 5420619492842995359ull,
+ 3768321651184098758ull, 3986877980439027014ull}},
+{{8495076424813400703ull, 17222945238309035811ull,
+ 16190259087272225435ull, 2491798737774391883ull}},
+{{6007159512589362975ull, 16916995529458906860ull,
+ 15626137840662893890ull, 3114748422217989854ull}},
+{{7508949390736703718ull, 11922872374968857767ull,
+ 10309300263973841555ull, 3893435527772487318ull}},
+{{11610622396851521680ull, 5145952225141842152ull,
+ 1831626646556263068ull, 2433397204857804574ull}},
+{{14513277996064402100ull, 6432440281427302690ull,
+ 11512905345050104643ull, 3041746506072255717ull}},
+{{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull,
+ 3802183132590319647ull}},
+{{3268047902177385309ull, 11366412245202738595ull,
+ 7265075043910123788ull, 2376364457868949779ull}},
+{{17920117933003895348ull, 14208015306503423243ull,
+ 4469657786460266831ull, 2970455572336187224ull}},
+{{17788461397827481281ull, 13148333114701891150ull,
+ 5587072233075333539ull, 3713069465420234030ull}},
+{{6506102355214787897ull, 5911865187474988017ull,
+ 17326978200954247174ull, 2320668415887646268ull}},
+{{12744313962445872775ull, 16613203521198510829ull,
+ 3211978677483257351ull, 2900835519859557836ull}},
+{{2095334397775177256ull, 16154818383070750633ull,
+ 4014973346854071689ull, 3626044399824447295ull}},
+{{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull,
+ 4532555499780559119ull}},
+{{2213440750565280719ull, 13197412614077447420ull,
+ 7171923193353707923ull, 2832847187362849449ull}},
+{{2766800938206600899ull, 11885079749169421371ull,
+ 13576590010119522808ull, 3541058984203561811ull}},
+{{17293559228040414836ull, 14856349686461776713ull,
+ 12359051494222015606ull, 4426323730254452264ull}},
+{{3890945489884177417ull, 4673532535611222542ull,
+ 7724407183888759754ull, 2766452331409032665ull}},
+{{14087053899209997579ull, 15065287706368803985ull,
+ 14267194998288337596ull, 3458065414261290831ull}},
+{{3773759318730333261ull, 384865559251453366ull,
+ 13222307729433034092ull, 4322581767826613539ull}},
+{{16193657629488622000ull, 9463913011386934161ull,
+ 5958099321681952355ull, 2701613604891633462ull}},
+{{6407013981578613788ull, 7218205245806279798ull,
+ 16670996188957216252ull, 3377017006114541827ull}},
+{{17232139513828043043ull, 9022756557257849747ull,
+ 16227059217769132411ull, 4221271257643177284ull}},
+{{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull,
+ 2638294536026985803ull}},
+{{10580305233661041188ull, 8778410817267965579ull,
+ 14983233023095828648ull, 3297868170033732253ull}},
+{{8613695523648913581ull, 10973013521584956974ull,
+ 4893983223587622098ull, 4122335212542165317ull}},
+{{771873683853183084ull, 11469819469417986013ull,
+ 5364582523955957763ull, 2576459507838853323ull}},
+{{5576528123243866759ull, 9725588318345094612ull,
+ 2094042136517559300ull, 3220574384798566654ull}},
+{{6970660154054833449ull, 12156985397931368265ull,
+ 11840924707501724933ull, 4025717980998208317ull}},
+{{15885877642352740666ull, 9903958882920799117ull,
+ 9706420951402272035ull, 2516073738123880198ull}},
+{{6022288997658762120ull, 7768262585223610993ull,
+ 2909654152398064236ull, 3145092172654850248ull}},
+{{12139547265500840554ull, 9710328231529513741ull,
+ 3637067690497580295ull, 3931365215818562810ull}},
+{{9893060050151719298ull, 12986484172347027944ull,
+ 6884853324988375588ull, 2457103259886601756ull}},
+{{12366325062689649123ull, 16233105215433784930ull,
+ 8606066656235469485ull, 3071379074858252195ull}},
+{{6234534291507285595ull, 6456323464010067451ull,
+ 6145897301866948953ull, 3839223843572815244ull}},
+{{1590740922978359545ull, 15564417211074761917ull,
+ 13064557850521618903ull, 2399514902233009527ull}},
+{{6600112172150337335ull, 14843835495416064492ull,
+ 11719011294724635725ull, 2999393627791261909ull}},
+{{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull,
+ 3749242034739077387ull}},
+{{12073866662133532899ull, 14479050242310917824ull,
+ 16649467353948127004ull, 2343276271711923366ull}},
+{{15092333327666916124ull, 18098812802888647280ull,
+ 11588462155580382947ull, 2929095339639904208ull}},
+{{418672585874093539ull, 18011829985183421197ull,
+ 14485577694475478684ull, 3661369174549880260ull}},
+{{5135026750770004827ull, 4068043407769724880ull,
+ 18106972118094348356ull, 4576711468187350325ull}},
+{{3209391719231253017ull, 11765899166710853858ull,
+ 13622700583022661674ull, 2860444667617093953ull}},
+{{13235111685893842080ull, 5484001921533791514ull,
+ 3193317673496163381ull, 3575555834521367442ull}},
+{{7320517570512526791ull, 11466688420344627297ull,
+ 13215019128724980034ull, 4469444793151709302ull}},
+{{16104538527638799005ull, 11778366281142779964ull,
+ 3647700937025724617ull, 2793402995719818314ull}},
+{{1683929085838947140ull, 887899796146311244ull,
+ 13782998208136931580ull, 3491753744649772892ull}},
+{{2104911357298683925ull, 1109874745182889055ull,
+ 17228747760171164475ull, 4364692180812216115ull}},
+{{8233098625952759309ull, 16834572780235163323ull,
+ 8462124340893283844ull, 2727932613007635072ull}},
+{{5679687264013561232ull, 2596471901584402538ull,
+ 10577655426116604806ull, 3409915766259543840ull}},
+{{16322981116871727348ull, 12468961913835278980ull,
+ 13222069282645756007ull, 4262394707824429800ull}},
+{{978491161190053785ull, 14710630223788131219ull,
+ 8263793301653597504ull, 2663996692390268625ull}},
+{{15058172006769730943ull, 18388287779735164023ull,
+ 14941427645494384784ull, 3329995865487835781ull}},
+{{14211028990034775774ull, 4538615650959403413ull,
+ 4841726501585817269ull, 4162494831859794727ull}},
+{{11187736127985428811ull, 5142477791063321085ull,
+ 9943608091132217649ull, 2601559269912371704ull}},
+{{149612104699622302ull, 11039783257256539261ull,
+ 12429510113915272061ull, 3251949087390464630ull}},
+{{4798701149301915781ull, 18411415089998061980ull,
+ 6313515605539314268ull, 4064936359238080788ull}},
+{{12222560255168473171ull, 2283762394394012929ull,
+ 13169319290316847226ull, 2540585224523800492ull}},
+{{1443142263678427752ull, 12078075029847291970ull,
+ 16461649112896059032ull, 3175731530654750615ull}},
+{{11027299866452810498ull, 15097593787309114962ull,
+ 15965375372692685886ull, 3969664413318438269ull}},
+{{11503748434960394466ull, 4824310098640808947ull,
+ 12284202617146622631ull, 2481040258324023918ull}},
+{{9767999525273105178ull, 1418701604873623280ull,
+ 6131881234578502481ull, 3101300322905029898ull}},
+{{12209999406591381472ull, 6385063024519417004ull,
+ 16888223580077903909ull, 3876625403631287372ull}},
+{{16854621665974389228ull, 6296507399538329579ull,
+ 1331767700693914135ull, 2422890877269554608ull}},
+{{16456591064040598631ull, 3258948230995524070ull,
+ 1664709625867392669ull, 3028613596586943260ull}},
+{{11347366793195972481ull, 8685371307171792992ull,
+ 2080887032334240836ull, 3785766995733679075ull}},
+{{7092104245747482801ull, 14651729103837146428ull,
+ 17441455459704758186ull, 2366104372333549421ull}},
+{{8865130307184353501ull, 9091289342941657227ull,
+ 7966761269348784021ull, 2957630465416936777ull}},
+{{6469726865553053972ull, 15975797697104459438ull,
+ 14570137605113367930ull, 3697038081771170971ull}},
+{{17878637346252822445ull, 14596559579117675052ull,
+ 6800492993982161004ull, 2310648801106981857ull}},
+{{3901552609106476440ull, 18245699473897093816ull,
+ 13112302260905089159ull, 2888311001383727321ull}},
+{{4876940761383095549ull, 18195438323943979366ull,
+ 2555319770849197737ull, 3610388751729659152ull}},
+{{15319547988583645245ull, 8909239849647810495ull,
+ 3194149713561497172ull, 4512985939662073940ull}},
+{{16492246520505860134ull, 14791646942884657367ull,
+ 11219715607830711540ull, 2820616212288796212ull}},
+{{16003622132204937264ull, 42814604896270093ull,
+ 14024644509788389426ull, 3525770265360995265ull}},
+{{6169469609974007867ull, 9276890292975113425ull,
+ 3695747581953323070ull, 4407212831701244082ull}},
+{{15385133552302224677ull, 1186370414682057986ull,
+ 6921528257148214823ull, 2754508019813277551ull}},
+{{10008044903523005038ull, 15318021073634736195ull,
+ 4040224303007880624ull, 3443135024766596939ull}},
+{{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull,
+ 4303918780958246174ull}},
+{{14159853356215006054ull, 2743831926922361844ull,
+ 14109179530489953010ull, 2689949238098903858ull}},
+{{17699816695268757568ull, 12653161945507728113ull,
+ 8413102376257665454ull, 3362436547623629823ull}},
+{{8289712813803783248ull, 6593080395029884334ull,
+ 5904691951894693914ull, 4203045684529537279ull}},
+{{569384490199976626ull, 8732361265321065613ull,
+ 10607961497575265552ull, 2626903552830960799ull}},
+{{5323416631177358686ull, 10915451581651332016ull,
+ 8648265853541694036ull, 3283629441038700999ull}},
+{{6654270788971698358ull, 13644314477064165020ull,
+ 6198646298499729641ull, 4104536801298376249ull}},
+{{13382291279962087282ull, 1610167520524021281ull,
+ 15403368982630800786ull, 2565335500811485155ull}},
+{{2892806044670445390ull, 11236081437509802410ull,
+ 14642525209861113078ull, 3206669376014356444ull}},
+{{12839379592692832546ull, 4821729760032477204ull,
+ 18303156512326391348ull, 4008336720017945555ull}},
+{{17247984282287796149ull, 12236953136875074060ull,
+ 9133629810990300640ull, 2505210450011215972ull}},
+{{3113236279150193570ull, 15296191421093842576ull,
+ 11417037263737875800ull, 3131513062514019965ull}},
+{{3891545348937741963ull, 673495202657751604ull, 436238524390181039ull,
+ 3914391328142524957ull}},
+{{11655587879940864535ull, 7338463529302176608ull,
+ 2578492086957557101ull, 2446494580089078098ull}},
+{{14569484849926080669ull, 13784765430055108664ull,
+ 12446487145551722184ull, 3058118225111347622ull}},
+{{18211856062407600836ull, 17230956787568885830ull,
+ 6334736895084876922ull, 3822647781389184528ull}},
+{{6770724020577362618ull, 15381034010657941548ull,
+ 3959210559428048076ull, 2389154863368240330ull}},
+{{8463405025721703273ull, 779548439612875319ull,
+ 14172385236139835904ull, 2986443579210300412ull}},
+{{5967570263724741187ull, 974435549516094149ull,
+ 17715481545174794880ull, 3733054474012875515ull}},
+{{6035574424041657194ull, 609022218447558843ull, 8766332956520552848ull,
+ 2333159046258047197ull}},
+{{2932782011624683588ull, 761277773059448554ull,
+ 15569602214078078964ull, 2916448807822558996ull}},
+{{12889349551385630293ull, 951597216324310692ull,
+ 1015258693888047089ull, 3645561009778198746ull}},
+{{16111686939232037867ull, 5801182538832776269ull,
+ 10492445404214834669ull, 4556951262222748432ull}},
+{{12375647346233717619ull, 5931582095984179120ull,
+ 6557778377634271668ull, 2848094538889217770ull}},
+{{15469559182792147023ull, 7414477619980223900ull,
+ 17420595008897615393ull, 3560118173611522212ull}},
+{{890204904780632163ull, 13879783043402667780ull,
+ 3328999687412467625ull, 4450147717014402766ull}},
+{{9779750102342670910ull, 1757335374485585506ull,
+ 15915682859914955978ull, 2781342323134001728ull}},
+{{3001315591073562830ull, 11420041254961757691ull,
+ 1447859501184143356ull, 3476677903917502161ull}},
+{{17586702544124117249ull, 14275051568702197113ull,
+ 6421510394907567099ull, 4345847379896877701ull}},
+{{4074160062436491425ull, 6616064221225179244ull,
+ 6319287006030923389ull, 2716154612435548563ull}},
+{{5092700078045614281ull, 12881766294958861959ull,
+ 3287422739111266332ull, 3395193265544435704ull}},
+{{1754189079129629947ull, 16102207868698577449ull,
+ 4109278423889082915ull, 4243991581930544630ull}},
+{{12625583220524488477ull, 7758036908722916953ull,
+ 16403357070212840534ull, 2652494738706590393ull}},
+{{1946920970373446884ull, 474174099048870384ull, 6669138282483886956ull,
+ 3315618423383237992ull}},
+{{2433651212966808605ull, 592717623811087980ull, 8336422853104858695ull,
+ 4144523029229047490ull}},
+{{10744404044959031186ull, 7287977542523011843ull,
+ 9821950301617924588ull, 2590326893268154681ull}},
+{{8818819037771401079ull, 9109971928153764804ull,
+ 16889123895449793639ull, 3237908616585193351ull}},
+{{11023523797214251348ull, 6775778891764818101ull,
+ 16499718850884854145ull, 4047385770731491689ull}},
+{{9195545382472601045ull, 15764076853421481073ull,
+ 3394795254161951984ull, 2529616106707182306ull}},
+{{16106117746518139210ull, 1258351993067299725ull,
+ 13466866104557215789ull, 3162020133383977882ull}},
+{{6297589127865510300ull, 6184626009761512561ull,
+ 7610210593841743928ull, 3952525166729972353ull}},
+{{15465208250984413698ull, 3865391256100945350ull,
+ 16285596667219559715ull, 2470328229206232720ull}},
+{{10108138276875741314ull, 220053051698793784ull,
+ 1910251760314898028ull, 3087910286507790901ull}},
+{{12635172846094676643ull, 275066314623492230ull,
+ 6999500718821010439ull, 3859887858134738626ull}},
+{{3285297010381784998ull, 7089445474280764500ull,
+ 8986373967690519428ull, 2412429911334211641ull}},
+{{4106621262977231247ull, 8861806842850955625ull,
+ 15844653478040537189ull, 3015537389167764551ull}},
+{{9744962597148926963ull, 15688944571991082435ull,
+ 15194130829123283582ull, 3769421736459705689ull}},
+{{3784758614004385400ull, 5193904339067038618ull,
+ 2578802740560970383ull, 2355888585287316056ull}},
+{{13954320304360257558ull, 1880694405406410368ull,
+ 3223503425701212979ull, 2944860731609145070ull}},
+{{17442900380450321947ull, 16185926062040176672ull,
+ 13252751318981292031ull, 3681075914511431337ull}},
+{{3356881401853350818ull, 15620721559122832937ull,
+ 2730881093444451327ull, 4601344893139289172ull}},
+{{13627265922226814021ull, 16680480002092852441ull,
+ 10930172720257557887ull, 2875840558212055732ull}},
+{{3199024347501353815ull, 16238913984188677648ull,
+ 13662715900321947359ull, 3594800697765069665ull}},
+{{3998780434376692268ull, 15686956461808459156ull,
+ 3243336820120270487ull, 4493500872206337082ull}},
+{{11722609808340208476ull, 16721876816271368828ull,
+ 6638771531002556958ull, 2808438045128960676ull}},
+{{14653262260425260595ull, 11678973983484435227ull,
+ 8298464413753196198ull, 3510547556411200845ull}},
+{{13704891807104187839ull, 5375345442500768226ull,
+ 14984766535618883152ull, 4388184445514001056ull}},
+{{13177243397867505304ull, 3359590901562980141ull,
+ 9365479084761801970ull, 2742615278446250660ull}},
+{{2636496192052217917ull, 13422860663808500985ull,
+ 11706848855952252462ull, 3428269098057813325ull}},
+{{7907306258492660301ull, 7555203792905850423ull, 798503014658151866ull,
+ 4285336372572266657ull}},
+{{11859595439198994544ull, 9333688388993544418ull,
+ 12028279430229814676ull, 2678335232857666660ull}},
+{{5601122262143967372ull, 11667110486241930523ull,
+ 15035349287787268345ull, 3347919041072083325ull}},
+{{2389716809252571311ull, 748830052520249442ull, 4959128554451921720ull,
+ 4184898801340104157ull}},
+{{6105259024210244973ull, 468018782825155901ull, 5405298355746145027ull,
+ 2615561750837565098ull}},
+{{12243259798690194121ull, 14420081533813608588ull,
+ 15979994981537457091ull, 3269452188546956372ull}},
+{{15304074748362742651ull, 13413415898839622831ull,
+ 1528249653212269748ull, 4086815235683695466ull}},
+{{16482575745367796013ull, 17606756973629540077ull,
+ 5566842051685056496ull, 2554259522302309666ull}},
+{{6768161626427581304ull, 3561702143327373481ull,
+ 16181924601461096429ull, 3192824402877887082ull}},
+{{13071888051461864534ull, 9063813697586604755ull,
+ 11004033714971594728ull, 3991030503597358853ull}},
+{{5864087022949971382ull, 5664883560991627972ull,
+ 9183364081070940657ull, 2494394064748349283ull}},
+{{7330108778687464227ull, 11692790469666922869ull,
+ 6867519082911287917ull, 3117992580935436604ull}},
+{{13774321991786718188ull, 780930031801489874ull,
+ 8584398853639109897ull, 3897490726169295755ull}},
+{{13220637263294086772ull, 12017296315944400931ull,
+ 3059406274310749733ull, 2435931703855809847ull}},
+{{11914110560690220560ull, 1186562339648337452ull,
+ 17659315898170600879ull, 3044914629819762308ull}},
+{{14892638200862775700ull, 15318260979842585527ull,
+ 3627400799003699482ull, 3806143287274702886ull}},
+{{16225427903180316669ull, 14185599130829003858ull,
+ 16102183554659475888ull, 2378839554546689303ull}},
+{{11058412842120620028ull, 17731998913536254823ull,
+ 15516043424896956956ull, 2973549443183361629ull}},
+{{9211330034223387131ull, 3718254568210766913ull,
+ 5559996225839032484ull, 3716936803979202037ull}},
+{{17286296317458086717ull, 11547281141986505128ull,
+ 5780840650363089254ull, 2323085502487001273ull}},
+{{3161126323113056780ull, 5210729390628355603ull,
+ 11837736831381249472ull, 2903856878108751591ull}},
+{{17786465959173484687ull, 6513411738285444503ull,
+ 10185485020799173936ull, 3629821097635939489ull}},
+{{17621396430539467955ull, 8141764672856805629ull,
+ 17343542294426355324ull, 4537276372044924361ull}},
+{{13319215778300861424ull, 14311974957390279326ull,
+ 3922184906375390221ull, 2835797732528077726ull}},
+{{7425647686021300972ull, 4054910641455685446ull,
+ 14126103169824013585ull, 3544747165660097157ull}},
+{{58687570671850406ull, 9680324320246994712ull, 3822570906997853269ull,
+ 4430933957075121447ull}},
+{{36679731669906504ull, 8356045709368065647ull, 9306635844514740149ull,
+ 2769333723171950904ull}},
+{{13880907719869546842ull, 15056743155137469962ull,
+ 11633294805643425186ull, 3461667153964938630ull}},
+{{8127762612982157745ull, 9597556907067061645ull,
+ 5318246470199505675ull, 4327083942456173288ull}},
+{{7385694642327542543ull, 3692630057703219576ull,
+ 3323904043874691047ull, 2704427464035108305ull}},
+{{9232118302909428178ull, 4101553701636566ull, 8766566073270751713ull,
+ 3380534330043885381ull}},
+{{2316775841782009414ull, 4616812960554433612ull,
+ 15569893610015827545ull, 4225667912554856726ull}},
+{{10671356937968531692ull, 14414723146414990767ull,
+ 5119497487832504311ull, 2641042445346785454ull}},
+{{8727510154033276711ull, 13406717914591350555ull,
+ 15622743896645406197ull, 3301303056683481817ull}},
+{{6297701674114207985ull, 2923339337957024482ull,
+ 5693371815524594035ull, 4126628820854352272ull}},
+{{8547749564748767895ull, 17967988150718997965ull,
+ 3558357384702871271ull, 2579143013033970170ull}},
+{{15296372974363347772ull, 17848299169971359552ull,
+ 13671318767733364897ull, 3223928766292462712ull}},
+{{673722144244633099ull, 8475315907182035729ull,
+ 17089148459666706122ull, 4029910957865578390ull}},
+{{11950291386221365447ull, 9908758460416160234ull,
+ 6069031768864303422ull, 2518694348665986494ull}},
+{{5714492195921931001ull, 3162576038665424485ull,
+ 16809661747935155086ull, 3148367935832483117ull}},
+{{11754801263329801655ull, 13176592085186556414ull,
+ 7177019129636780145ull, 3935459919790603897ull}},
+{{2735064771153738131ull, 1317841025600515903ull,
+ 16014852002091457351ull, 2459662449869127435ull}},
+{{17253889019224336375ull, 15482359337282808590ull,
+ 15406878984186933784ull, 3074578062336409294ull}},
+{{12343989237175644661ull, 906205097893959122ull,
+ 10035226693378891423ull, 3843222577920511618ull}},
+{{12326679291662165817ull, 7483907213824806307ull,
+ 10883702701789195043ull, 2402014111200319761ull}},
+{{10796663096150319367ull, 4743197998853619980ull,
+ 18216314395663881708ull, 3002517639000399701ull}},
+{{13495828870187899209ull, 5928997498567024975ull,
+ 8935334939297688423ull, 3753147048750499627ull}},
+{{15352422071508518862ull, 10623152464245472465ull,
+ 3278741327847361312ull, 2345716905469062267ull}},
+{{5355469534103484865ull, 13278940580306840582ull,
+ 17933484715091365352ull, 2932146131836327833ull}},
+{{15917708954484131889ull, 16598675725383550727ull,
+ 8581797838582042978ull, 3665182664795409792ull}},
+{{15285450174677776957ull, 11524972619874662601ull,
+ 10727247298227553723ull, 4581478330994262240ull}},
+{{2635877331532528743ull, 4897264878207970174ull,
+ 6704529561392221077ull, 2863423956871413900ull}},
+{{12518218701270436736ull, 10733267116187350621ull,
+ 8380661951740276346ull, 3579279946089267375ull}},
+{{1812715321305882208ull, 4193211858379412469ull,
+ 5864141421247957529ull, 4474099932611584219ull}},
+{{3438790085029870332ull, 14149972457555602553ull,
+ 1359245379066279503ull, 2796312457882240137ull}},
+{{8910173624714725819ull, 13075779553517115287ull,
+ 6310742742260237283ull, 3495390572352800171ull}},
+{{6526031012466019370ull, 11733038423469006205ull,
+ 3276742409397908700ull, 4369238215441000214ull}},
+{{6384612392004956058ull, 16556521051522904686ull,
+ 15883022061155856649ull, 2730773884650625133ull}},
+{{17204137526860970881ull, 6860593259121467145ull,
+ 6018719521162657100ull, 3413467355813281417ull}},
+{{7670113853294049889ull, 8575741573901833932ull,
+ 12135085419880709279ull, 4266834194766601771ull}},
+{{14017193195163556989ull, 12277367511329728063ull,
+ 5278585378211749347ull, 2666771371729126107ull}},
+{{12909805475527058332ull, 10735023370734772175ull,
+ 1986545704337298780ull, 3333464214661407634ull}},
+{{11525570825981435011ull, 13418779213418465219ull,
+ 11706554167276399283ull, 4166830268326759542ull}},
+{{4897638757024702930ull, 6080893999172846810ull,
+ 2704910336120361648ull, 2604268917704224714ull}},
+{{15345420483135654470ull, 7601117498966058512ull,
+ 12604509957005227868ull, 3255336147130280892ull}},
+{{735031530210016471ull, 9501396873707573141ull,
+ 15755637446256534835ull, 4069170183912851115ull}},
+{{2765237715594954247ull, 3632530036853539261ull,
+ 7541430394696640320ull, 2543231364945531947ull}},
+{{8068233162921080712ull, 4540662546066924076ull,
+ 4815101974943412496ull, 3179039206181914934ull}},
+{{10085291453651350890ull, 5675828182583655095ull,
+ 15242249505534041428ull, 3973799007727393667ull}},
+{{13220836186173176163ull, 12770764650969560242ull,
+ 7220562931745081940ull, 2483624379829621042ull}},
+{{7302673195861694395ull, 15963455813711950303ull,
+ 18249075701536128233ull, 3104530474787026302ull}},
+{{4516655476399730090ull, 6119261711857774167ull,
+ 13587972590065384484ull, 3880663093483782878ull}},
+{{9740438700390913162ull, 13047910606765884662ull,
+ 3880796850363477398ull, 2425414433427364299ull}},
+{{2952176338633865645ull, 7086516221602580020ull, 239310044526958844ull,
+ 3031768041784205374ull}},
+{{3690220423292332056ull, 8858145277003225025ull,
+ 9522509592513474363ull, 3789710052230256717ull}},
+{{13835602810626177295ull, 3230497788913321688ull,
+ 8257411504534615429ull, 2368568782643910448ull}},
+{{17294503513282721619ull, 8649808254569040014ull,
+ 10321764380668269286ull, 2960710978304888060ull}},
+{{12394757354748626215ull, 1588888281356524210ull,
+ 12902205475835336608ull, 3700888722881110075ull}},
+{{12358409365145279289ull, 993055175847827631ull,
+ 5758035413183391428ull, 2313055451800693797ull}},
+{{10836325688004211207ull, 1241318969809784539ull,
+ 11809230284906627189ull, 2891319314750867246ull}},
+{{8933721091577876105ull, 6163334730689618578ull,
+ 5538165819278508178ull, 3614149143438584058ull}},
+{{1943779327617569323ull, 16927540450216799031ull,
+ 16146079310952911030ull, 4517686429298230072ull}},
+{{8132391107402062683ull, 5968026762958111490ull,
+ 10091299569345569394ull, 2823554018311393795ull}},
+{{942116847397802545ull, 16683405490552415171ull,
+ 8002438443254573838ull, 3529442522889242244ull}},
+{{15012704114529416894ull, 11630884826335743155ull,
+ 10003048054068217298ull, 4411803153611552805ull}},
+{{7077097062367191607ull, 11880989034887227376ull,
+ 8557748043006329763ull, 2757376971007220503ull}},
+{{8846371327958989508ull, 10239550275181646316ull,
+ 6085499035330524300ull, 3446721213759025629ull}},
+{{11057964159948736885ull, 12799437843977057895ull,
+ 12218559812590543279ull, 4308401517198782036ull}},
+{{13828756627609042409ull, 14917177680126743040ull,
+ 16859971919723865357ull, 2692750948249238772ull}},
+{{17285945784511303012ull, 4811414044876265088ull,
+ 2628220825945280081ull, 3365938685311548466ull}},
+{{3160688156929577148ull, 10625953574522719265ull,
+ 12508648069286375909ull, 4207423356639435582ull}},
+{{13504645144149455478ull, 8947063993290393492ull,
+ 3206219024876597039ull, 2629639597899647239ull}},
+{{16880806430186819347ull, 6572143973185603961ull,
+ 17842831836377910011ull, 3287049497374559048ull}},
+{{7265949982451360472ull, 3603493948054617048ull,
+ 3856795721762835898ull, 4108811871718198811ull}},
+{{4541218739032100295ull, 6863869735961523559ull, 104654316888078484ull,
+ 2568007419823874257ull}},
+{{1064837405362737465ull, 8579837169951904449ull,
+ 4742503914537486009ull, 3210009274779842821ull}},
+{{5942732775130809735ull, 15336482480867268465ull,
+ 10539815911599245415ull, 4012511593474803526ull}},
+{{15243423030525225845ull, 16502830578183124646ull,
+ 1975698926322140480ull, 2507819745921752204ull}},
+{{9830906751301756498ull, 2181794149019354192ull,
+ 2469623657902675601ull, 3134774682402190255ull}},
+{{12288633439127195622ull, 7338928704701580644ull,
+ 16922087627660508213ull, 3918468353002737818ull}},
+{{16903767936309273072ull, 6892673449652181854ull,
+ 15187990785715205537ull, 2449042720626711136ull}},
+{{11906337883531815532ull, 13227527830492615222ull,
+ 538244408434455305ull, 3061303400783388921ull}},
+{{5659550317559993606ull, 2699351732833605316ull,
+ 5284491528970457036ull, 3826629250979236151ull}},
+{{12760590985329771812ull, 10910466869875779130ull,
+ 10220336233247617503ull, 2391643281862022594ull}},
+{{6727366694807438957ull, 9026397568917336009ull,
+ 3552048254704746071ull, 2989554102327528243ull}},
+{{13020894386936686600ull, 6671310942719282107ull,
+ 18275118373663096301ull, 3736942627909410303ull}},
+{{5832215982621735173ull, 6475412348413245269ull,
+ 18339478011180517044ull, 2335589142443381439ull}},
+{{11901955996704556871ull, 8094265435516556586ull,
+ 18312661495548258401ull, 2919486428054226799ull}},
+{{5654072959025920280ull, 14729517812823083637ull,
+ 18279140851007935097ull, 3649358035067783499ull}},
+{{11679277217209788254ull, 4576839210746690834ull,
+ 18237240045332530968ull, 4561697543834729374ull}},
+{{11911234279183505563ull, 2860524506716681771ull,
+ 6786589009905443951ull, 2851060964896705859ull}},
+{{10277356830551994050ull, 17410713688678015926ull,
+ 3871550243954417034ull, 3563826206120882324ull}},
+{{3623324001335216754ull, 12540020073992744100ull,
+ 4839437804943021293ull, 4454782757651102905ull}},
+{{11487949537689286279ull, 10143355555459159014ull,
+ 14553863674157858068ull, 2784239223531939315ull}},
+{{5136564885256832041ull, 12679194444323948768ull,
+ 13580643574269934681ull, 3480299029414924144ull}},
+{{6420706106571040051ull, 2013935000122772248ull,
+ 16975804467837418352ull, 4350373786768655180ull}},
+{{4012941316606900032ull, 1258709375076732655ull,
+ 1386505755543610662ull, 2718983616730409488ull}},
+{{404490627331237136ull, 10796758755700691627ull,
+ 1733132194429513327ull, 3398729520913011860ull}},
+{{14340671339446210132ull, 8884262426198476629ull,
+ 2166415243036891659ull, 4248411901141264825ull}},
+{{11268762596367575285ull, 3246821007160353941ull,
+ 12883224572966527047ull, 2655257438213290515ull}},
+{{250895190177305394ull, 17893584314232606139ull,
+ 11492344697780770904ull, 3319071797766613144ull}},
+{{14148677043003795454ull, 3920236319081206057ull,
+ 14365430872225963631ull, 4148839747208266430ull}},
+{{1925394124236290303ull, 9367676727066835642ull,
+ 4366708276713839365ull, 2593024842005166519ull}},
+{{11630114692150138687ull, 16321281927260932456ull,
+ 846699327464911302ull, 3241281052506458149ull}},
+{{14537643365187673358ull, 11178230372221389762ull,
+ 5670060177758527032ull, 4051601315633072686ull}},
+{{13697713121669683753ull, 6986393982638368601ull,
+ 17378845666381243107ull, 2532250822270670428ull}},
+{{3287083346804940979ull, 4121306459870572848ull,
+ 3276813009267002268ull, 3165313527838338036ull}},
+{{4108854183506176224ull, 5151633074838216060ull,
+ 4096016261583752835ull, 3956641909797922545ull}},
+{{11791405901546135948ull, 913927662560191085ull,
+ 14089225209558315282ull, 2472901193623701590ull}},
+{{904199321650506223ull, 10365781615055014665ull,
+ 8388159475093118294ull, 3091126492029626988ull}},
+{{5741935170490520683ull, 3733854981963992523ull,
+ 10485199343866397868ull, 3863908115037033735ull}},
+{{1282866472342881475ull, 11557031400582271135ull,
+ 13470778617557580523ull, 2414942571898146084ull}},
+{{15438641145710765555ull, 9834603232300451014ull,
+ 16838473271946975654ull, 3018678214872682605ull}},
+{{10074929395283681136ull, 3069882003520787960ull,
+ 7213033534651555856ull, 3773347768590853257ull}},
+{{6296830872052300710ull, 1918676252200492475ull,
+ 16037361005225692170ull, 2358342355369283285ull}},
+{{3259352571637987984ull, 11621717352105391402ull,
+ 6211643201249951500ull, 2947927944211604107ull}},
+{{13297562751402260787ull, 14527146690131739252ull,
+ 3152867983135051471ull, 3684909930264505134ull}},
+{{16621953439252825984ull, 13547247344237286161ull,
+ 13164457015773590147ull, 4606137412830631417ull}},
+{{3471191871891934384ull, 6161186580934609899ull,
+ 1310256607217411986ull, 2878835883019144636ull}},
+{{18174047895147081692ull, 16924855263023038181ull,
+ 1637820759021764982ull, 3598544853773930795ull}},
+{{8882501813651688403ull, 11932697041924021919ull,
+ 15882334004059369940ull, 4498181067217413493ull}},
+{{12469092661173387108ull, 16681307688057289507ull,
+ 12232301761750800164ull, 2811363167010883433ull}},
+{{10974679808039345981ull, 2404890536362060268ull,
+ 1455319146906336494ull, 3514203958763604292ull}},
+{{13718349760049182476ull, 12229485207307351143ull,
+ 1819148933632920617ull, 4392754948454505365ull}},
+{{15491497627671820904ull, 725899226926012608ull,
+ 3442811092734269338ull, 2745471842784065853ull}},
+{{917627960880224514ull, 10130746070512291569ull,
+ 8915199884345224576ull, 3431839803480082316ull}},
+{{5758720969527668546ull, 12663432588140364461ull,
+ 11143999855431530720ull, 4289799754350102895ull}},
+{{5905043615168486793ull, 7914645367587727788ull,
+ 13882528937285788556ull, 2681124846468814309ull}},
+{{7381304518960608492ull, 9893306709484659735ull,
+ 3518103116325071983ull, 3351406058086017887ull}},
+{{4614944630273372710ull, 7754947368428436765ull,
+ 18232686950688503691ull, 4189257572607522358ull}},
+{{5190183403134551896ull, 2540999096054079026ull,
+ 6783743325752926903ull, 2618285982879701474ull}},
+{{15711101290772965678ull, 17011306925349762494ull,
+ 17703051194045934436ull, 3272857478599626842ull}},
+{{10415504576611431290ull, 2817389582977651502ull,
+ 12905441955702642238ull, 4091071848249533553ull}},
+{{1898004341954756652ull, 15595926544643195901ull,
+ 1148372194673069542ull, 2556919905155958471ull}},
+{{6984191445870833719ull, 10271536143949219068ull,
+ 15270523298623500640ull, 3196149881444948088ull}},
+{{8730239307338542149ull, 12839420179936523835ull,
+ 641410049569824184ull, 3995187351806185111ull}},
+{{3150556557872894891ull, 8024637612460327397ull,
+ 7318410308622221971ull, 2496992094878865694ull}},
+{{8549881715768506518ull, 5419110997148021342ull,
+ 18371384922632553272ull, 3121240118598582117ull}},
+{{1463980107855857339ull, 6773888746435026678ull,
+ 9129173098008527878ull, 3901550148248227647ull}},
+{{14750045622692074549ull, 18068738521804055385ull,
+ 12623262213896411779ull, 2438468842655142279ull}},
+{{4602498973082929474ull, 17974237133827681328ull,
+ 11167391748943126820ull, 3048086053318927849ull}},
+{{5753123716353661843ull, 4021052343575050044ull, 124181630896744814ull,
+ 3810107566648659812ull}},
+{{12819074359575814460ull, 16348215770016569989ull,
+ 9300985556165241316ull, 2381317229155412382ull}},
+{{2188784894187604363ull, 1988525638811160871ull,
+ 2402859908351775838ull, 2976646536444265478ull}},
+{{16571039173016669165ull, 11709029085368726896ull,
+ 12226946922294495605ull, 3720808170555331847ull}},
+{{10356899483135418228ull, 9623986187569148262ull,
+ 14559370854075141609ull, 2325505106597082404ull}},
+{{3722752317064496977ull, 16641668752888823232ull,
+ 18199213567593927011ull, 2906881383246353005ull}},
+{{4653440396330621222ull, 16190399922683641136ull,
+ 8913958904210245052ull, 3633601729057941257ull}},
+{{5816800495413276527ull, 1791255829644999804ull,
+ 15754134648690194220ull, 4542002161322426571ull}},
+{{12858872346488073638ull, 10342906930382900685ull,
+ 7540491146217677435ull, 2838751350826516607ull}},
+{{2238532377827928335ull, 8316947644551237953ull,
+ 4813927914344708890ull, 3548439188533145759ull}},
+{{7409851490712298322ull, 1172812518834271633ull,
+ 1405723874503498209ull, 4435548985666432199ull}},
+{{16160372227763656212ull, 12262222870339889530ull,
+ 7796106449205768236ull, 2772218116041520124ull}},
+{{10977093247849794457ull, 15327778587924861913ull,
+ 9745133061507210295ull, 3465272645051900155ull}},
+{{18333052578239630975ull, 14548037216478689487ull,
+ 7569730308456624965ull, 4331590806314875194ull}},
+{{18375686889040851215ull, 11398366269512874881ull,
+ 9342767461212778507ull, 2707244253946796996ull}},
+{{9134550556018900307ull, 9636271818463705698ull,
+ 11678459326515973134ull, 3384055317433496245ull}},
+{{2194816158168849576ull, 2821967736224856315ull, 763016102862802706ull,
+ 4230069146791870307ull}},
+{{17512661163351388649ull, 6375415853567923100ull,
+ 16617786128785109355ull, 2643793216744918941ull}},
+{{3444082380479684195ull, 3357583798532515972ull,
+ 6937174605699222982ull, 3304741520931148677ull}},
+{{4305102975599605244ull, 13420351785020420773ull,
+ 13283154275551416631ull, 4130926901163935846ull}},
+{{4996532368963447229ull, 15305248893278844839ull,
+ 3690285403792247490ull, 2581829313227459904ull}},
+{{1633979442776921133ull, 9908189079743780241ull,
+ 4612856754740309363ull, 3227286641534324880ull}},
+{{6654160321898539320ull, 7773550331252337397ull,
+ 5766070943425386704ull, 4034108301917906100ull}},
+{{6464693210400281027ull, 4858468957032710873ull,
+ 12827166376495642498ull, 2521317688698691312ull}},
+{{12692552531427739188ull, 15296458233145664399ull,
+ 16033957970619553122ull, 3151647110873364140ull}},
+{{11254004645857286080ull, 9897200754577304691ull,
+ 1595703389564889787ull, 3939558888591705176ull}},
+{{4727909894447109848ull, 3879907462397121480ull, 997314618478056117ull,
+ 2462224305369815735ull}},
+{{5909887368058887310ull, 9461570346423789754ull,
+ 15081701328379733858ull, 3077780381712269668ull}},
+{{16610731246928384946ull, 2603590896174961384ull,
+ 405382586765115707ull, 3847225477140337086ull}},
+{{10381707029330240591ull, 17768145374605208529ull,
+ 14088422172010361028ull, 2404515923212710678ull}},
+{{17588819805090188643ull, 3763437644546959045ull,
+ 8387155678158175478ull, 3005644904015888348ull}},
+{{8150966701080572092ull, 13927669092538474615ull,
+ 10483944597697719347ull, 3757056130019860435ull}},
+{{12011883215816439414ull, 6398950173622852682ull,
+ 4246622364347380640ull, 2348160081262412772ull}},
+{{5791481982915773459ull, 7998687717028565853ull,
+ 5308277955434225800ull, 2935200101578015965ull}},
+{{11851038497072104727ull, 9998359646285707316ull,
+ 11247033462720170154ull, 3669000126972519956ull}},
+{{14813798121340130909ull, 3274577521002358337ull,
+ 14058791828400212693ull, 4586250158715649945ull}},
+{{2341094798196499962ull, 4352453959840167913ull,
+ 1869215865109051077ull, 2866406349197281216ull}},
+{{7538054516173012857ull, 10052253468227597795ull,
+ 2336519831386313846ull, 3583007936496601520ull}},
+{{4810882126788878167ull, 3341944798429721436ull,
+ 2920649789232892308ull, 4478759920620751900ull}},
+{{12230173366097824663ull, 11312087535873351705ull,
+ 11048778155125333500ull, 2799224950387969937ull}},
+{{1452658652340117116ull, 14140109419841689632ull,
+ 18422658712334054779ull, 3499031187984962421ull}},
+{{1815823315425146395ull, 13063450756374724136ull,
+ 9193265335135404762ull, 4373788984981203027ull}},
+{{1134889572140716497ull, 12776342741161590489ull,
+ 3439947825245934024ull, 2733618115613251892ull}},
+{{6030297983603283525ull, 15970428426451988111ull,
+ 4299934781557417530ull, 3417022644516564865ull}},
+{{2926186461076716502ull, 10739663496210209331ull,
+ 9986604495374159817ull, 4271278305645706081ull}},
+{{17969767602668805478ull, 18241504731199850591ull,
+ 17770842855677319645ull, 2669548941028566300ull}},
+{{17850523484908618944ull, 8966822858717649527ull,
+ 3766809495887097941ull, 3336936176285707876ull}},
+{{17701468337708385775ull, 15820214591824449813ull,
+ 4708511869858872426ull, 4171170220357134845ull}},
+{{13369260720281435062ull, 14499320138317669037ull,
+ 5248662927875489218ull, 2606981387723209278ull}},
+{{2876517845069630115ull, 8900778136042310489ull,
+ 15784200696699137331ull, 3258726734654011597ull}},
+{{8207333324764425548ull, 6514286651625500207ull,
+ 5895192815591757952ull, 4073408418317514497ull}},
+{{12047112355618847824ull, 4071429157265937629ull,
+ 15213710555813318480ull, 2545880261448446560ull}},
+{{1223832389241396067ull, 5089286446582422037ull, 570394121057096484ull,
+ 3182350326810558201ull}},
+{{6141476504979132988ull, 6361608058228027546ull,
+ 5324678669748758509ull, 3977937908513197751ull}},
+{{8450108834039346022ull, 6281848045606211168ull,
+ 10245453196234055924ull, 2486211192820748594ull}},
+{{10562636042549182527ull, 7852310057007763960ull,
+ 3583444458437794097ull, 3107763991025935743ull}},
+{{13203295053186478159ull, 14427073589687092854ull,
+ 18314363628329406333ull, 3884704988782419678ull}},
+{{3640373389814160945ull, 11322764002768126986ull,
+ 6834791249278491054ull, 2427940617989012299ull}},
+{{13773838774122476989ull, 4930082966605382924ull,
+ 3931803043170725914ull, 3034925772486265374ull}},
+{{17217298467653096237ull, 15385975745111504463ull,
+ 14138125840818183200ull, 3793657215607831717ull}},
+{{17678340569924267004ull, 9616234840694690289ull,
+ 11142171659725058452ull, 2371035759754894823ull}},
+{{8262867657123170043ull, 12020293550868362862ull,
+ 9316028556228935161ull, 2963794699693618529ull}},
+{{1105212534549186746ull, 1190308883303289866ull,
+ 16256721713713556856ull, 3704743374617023161ull}},
+{{5302443852520629620ull, 743943052064556166ull, 3242922043429891179ull,
+ 2315464609135639476ull}},
+{{15851426852505562833ull, 14764986870362858919ull,
+ 4053652554287363973ull, 2894330761419549345ull}},
+{{15202597547204565637ull, 4621175532671409937ull,
+ 9678751711286592871ull, 3617913451774436681ull}},
+{{5168188878723543335ull, 1164783397411874518ull,
+ 16710125657535628993ull, 4522391814718045851ull}},
+{{17065176104484378296ull, 12257204669450891333ull,
+ 8137985526746074168ull, 2826494884198778657ull}},
+{{7496412075323309158ull, 15321505836813614167ull,
+ 14784167926859980614ull, 3533118605248473321ull}},
+{{4758829075726748544ull, 9928510259162241901ull,
+ 4645151853292812056ull, 4416398256560591652ull}},
+{{5280111181542911792ull, 6205318911976401188ull,
+ 12126591945162783343ull, 2760248910350369782ull}},
+{{6600138976928639740ull, 3144962621543113581ull,
+ 5934867894598703371ull, 3450311137937962228ull}},
+{{12861859739588187579ull, 17766261332211055688ull,
+ 7418584868248379213ull, 4312888922422452785ull}},
+{{8038662337242617237ull, 13409756341845603757ull,
+ 16165830588723706768ull, 2695555576514032990ull}},
+{{14660013939980659450ull, 16762195427307004696ull,
+ 10983916199049857652ull, 3369444470642541238ull}},
+{{18325017424975824312ull, 2506000210424204254ull,
+ 4506523211957546258ull, 4211805588303176548ull}},
+{{6841449872182502291ull, 6177936149942515563ull,
+ 12039949044328242219ull, 2632378492689485342ull}},
+{{3940126321800739960ull, 3110734169000756550ull,
+ 5826564268555526966ull, 3290473115861856678ull}},
+{{14148529939105700758ull, 13111789748105721495ull,
+ 16506577372549184515ull, 4113091394827320847ull}},
+{{15760360239582144830ull, 5889025583352381982ull,
+ 17234139885484322178ull, 2570682121767075529ull}},
+{{10477078262622905229ull, 16584654016045253286ull,
+ 7707616801573239010ull, 3213352652208844412ull}},
+{{3872975791423855729ull, 11507445483201790800ull,
+ 9634521001966548763ull, 4016690815261055515ull}},
+{{2420609869639909831ull, 4886310417787425298ull,
+ 3715732617015399025ull, 2510431759538159697ull}},
+{{12249134373904663096ull, 10719574040661669526ull,
+ 9256351789696636685ull, 3138039699422699621ull}},
+{{6088045930526053062ull, 18011153569254474812ull,
+ 16182125755548183760ull, 3922549624278374526ull}},
+{{13028400743433558972ull, 11256970980784046757ull,
+ 5502142578790226946ull, 2451593515173984079ull}},
+{{2450442874009785003ull, 4847841689125282639ull,
+ 2265992205060395779ull, 3064491893967480099ull}},
+{{16898111647794394965ull, 1448116092979215394ull,
+ 16667548311607658436ull, 3830614867459350123ull}},
+{{15173005798298884757ull, 10128444594966785429ull,
+ 8111374685541092570ull, 2394134292162093827ull}},
+{{5131199192591442235ull, 3437183706853705979ull,
+ 5527532338498977809ull, 2992667865202617284ull}},
+{{1802312972311914889ull, 8908165651994520378ull,
+ 6909415423123722261ull, 3740834831503271605ull}},
+{{5738131626122334710ull, 7873446541710269188ull,
+ 6624227648666020365ull, 2338021769689544753ull}},
+{{7172664532652918387ull, 14453494195565224389ull,
+ 12891970579259913360ull, 2922527212111930941ull}},
+{{13577516684243535888ull, 18066867744456530486ull,
+ 2279905168792727988ull, 3653159015139913677ull}},
+{{7748523818449644052ull, 4136840606861111492ull,
+ 7461567479418297890ull, 4566448768924892096ull}},
+{{14066199423385803341ull, 7197211397715582586ull,
+ 4663479674636436181ull, 2854030480578057560ull}},
+{{8359377242377478368ull, 13608200265571866137ull,
+ 5829349593295545226ull, 3567538100722571950ull}},
+{{15060907571399235864ull, 7786878295110056863ull,
+ 16510059028474207341ull, 4459422625903214937ull}},
+{{16330596259765604271ull, 7172641943657479491ull,
+ 3401257865155297732ull, 2787139141189509336ull}},
+{{15801559306279617434ull, 8965802429571849364ull,
+ 4251572331444122165ull, 3483923926486886670ull}},
+{{1305205059139970177ull, 15818939055392199610ull,
+ 14537837451159928514ull, 4354904908108608337ull}},
+{{5427439180389869265ull, 14498522928047512660ull,
+ 2168619379333873465ull, 2721815567567880211ull}},
+{{6784298975487336581ull, 4288095604777227113ull,
+ 16545832279449505544ull, 3402269459459850263ull}},
+{{13092059737786558630ull, 5360119505971533891ull,
+ 16070604330884494026ull, 4252836824324812829ull}},
+{{5876694326902905192ull, 7961760709659596586ull,
+ 12349970716016502718ull, 2658023015203008018ull}},
+{{16569239945483407298ull, 728828850219719924ull,
+ 6214091358165852590ull, 3322528769003760023ull}},
+{{2264805858144707506ull, 10134408099629425714ull,
+ 3155928179279927833ull, 4153160961254700029ull}},
+{{6027189679767830095ull, 17863220108336860831ull,
+ 4278298121263648847ull, 2595725600784187518ull}},
+{{2922301081282399715ull, 17717339116993688135ull,
+ 14571244688434336867ull, 3244657000980234397ull}},
+{{17487934406885163356ull, 17534987877814722264ull,
+ 4378997805260757372ull, 4055821251225292997ull}},
+{{10929959004303227098ull, 1735995386779425607ull,
+ 5042716637501667310ull, 2534888282015808123ull}},
+{{9050762736951645968ull, 11393366270329057817ull,
+ 1691709778449696233ull, 3168610352519760154ull}},
+{{15925139439616945364ull, 406649782629158559ull,
+ 11338009259916896100ull, 3960762940649700192ull}},
+{{16870741177401672709ull, 9477528150997999907ull,
+ 7086255787448060062ull, 2475476837906062620ull}},
+{{16476740453324702982ull, 2623538151892724076ull,
+ 8857819734310075078ull, 3094346047382578275ull}},
+{{2149181492946327111ull, 12502794726720680904ull,
+ 6460588649460205943ull, 3867932559228222844ull}},
+{{1343238433091454444ull, 14731775731841507421ull,
+ 13261239942767404522ull, 2417457849517639277ull}},
+{{6290734059791705959ull, 9191347627947108468ull,
+ 2741491873177091941ull, 3021822311897049097ull}},
+{{7863417574739632449ull, 16100870553361273489ull,
+ 8038550859898752830ull, 3777277889871311371ull}},
+{{16443851030280740041ull, 5451358077423408026ull,
+ 2718251278223026567ull, 2360798681169569607ull}},
+{{11331441750996149243ull, 2202511578351872129ull,
+ 17232872153060946921ull, 2950998351461962008ull}},
+{{329244133463022842ull, 7364825491367228066ull, 3094346117616632035ull,
+ 3688747939327452511ull}},
+{{9634927203683554360ull, 4594345845781647178ull,
+ 17702990702302953756ull, 4610934924159315638ull}},
+{{10633515520729609379ull, 12094838190468305294ull,
+ 6452683170511958193ull, 2881834327599572274ull}},
+{{4068522364057235916ull, 1283489682803217906ull,
+ 17289225999994723550ull, 3602292909499465342ull}},
+{{14309024991926320703ull, 10827734140358798190ull,
+ 12388160463138628629ull, 4502866136874331678ull}},
+{{4331454601526562535ull, 9073176846937942821ull,
+ 3130914271034254989ull, 2814291335546457299ull}},
+{{10026004270335591073ull, 15953157077099816430ull,
+ 17748700894074982448ull, 3517864169433071623ull}},
+{{3309133301064713033ull, 1494702272665218922ull,
+ 17574190099166340157ull, 4397330211791339529ull}},
+{{6679894331592833550ull, 3240031929629455778ull,
+ 4066339784337880742ull, 2748331382369587206ull}},
+{{17573239951345817745ull, 13273411948891595530ull,
+ 14306296767277126735ull, 3435414227961984007ull}},
+{{12743177902327496374ull, 11980078917687106509ull,
+ 13271184940669020515ull, 4294267784952480009ull}},
+{{10270329198168379186ull, 5181706314340747616ull,
+ 1376961560277055966ull, 2683917365595300006ull}},
+{{12837911497710473982ull, 15700504929780710328ull,
+ 10944573987201095765ull, 3354896706994125007ull}},
+{{16047389372138092477ull, 5790573106943724198ull,
+ 9069031465573981803ull, 4193620883742656259ull}},
+{{5417932339158919894ull, 1313265182626133672ull,
+ 3362301656770044675ull, 2621013052339160162ull}},
+{{6772415423948649868ull, 15476639533564830802ull,
+ 13426249107817331651ull, 3276266315423950202ull}},
+{{17688891316790588143ull, 14734113398528650598ull,
+ 7559439347916888756ull, 4095332894279937753ull}},
+{{6443871054566729685ull, 18432192910935182432ull,
+ 16253864638516525232ull, 2559583058924961095ull}},
+{{8054838818208412107ull, 4593497064959426424ull,
+ 15705644779718268637ull, 3199478823656201369ull}},
+{{10068548522760515133ull, 10353557349626670934ull,
+ 5796997919365672084ull, 3999348529570251712ull}},
+{{1681156808297934054ull, 15694345380371445142ull,
+ 3623123699603545052ull, 2499592830981407320ull}},
+{{11324818047227193376ull, 1171187651754754811ull,
+ 4528904624504431316ull, 3124491038726759150ull}},
+{{9544336540606603816ull, 1463984564693443514ull,
+ 14884502817485314953ull, 3905613798408448937ull}},
+{{10576896356306515289ull, 12444205399001871956ull,
+ 2385285233287239989ull, 2441008624005280586ull}},
+{{13221120445383144111ull, 1720198693470176233ull,
+ 12204978578463825795ull, 3051260780006600732ull}},
+{{2691342501446766427ull, 15985306422119884004ull,
+ 15256223223079782243ull, 3814075975008250915ull}},
+{{10905461100259004825ull, 7684973504611233550ull,
+ 7229296505211169950ull, 2383797484380156822ull}},
+{{4408454338468980223ull, 382844843909266130ull,
+ 18259992668368738246ull, 2979746855475196027ull}},
+{{14733939959941001087ull, 9701928091741358470ull,
+ 18213304817033534903ull, 3724683569343995034ull}},
+{{4597026456535737775ull, 12981234084979430900ull,
+ 15995001529073347218ull, 2327927230839996896ull}},
+{{5746283070669672219ull, 7003170569369512817ull,
+ 1547007837632132407ull, 2909909038549996121ull}},
+{{11794539856764478178ull, 4142277193284503117ull,
+ 6545445815467553413ull, 3637386298187495151ull}},
+{{908116765673434010ull, 9789532510033016801ull, 3570121250907053862ull,
+ 4546732872734368939ull}},
+{{12096788024614366017ull, 1506771800343247596ull,
+ 18372226846312766328ull, 2841708045458980586ull}},
+{{15120985030767957521ull, 1883464750429059495ull,
+ 13741911521036182102ull, 3552135056823725733ull}},
+{{14289545270032558997ull, 11577702974891100177ull,
+ 3342331346013063915ull, 4440168821029657167ull}},
+{{2013436766129267517ull, 4930221350093243659ull,
+ 9006486118899246803ull, 2775105513143535729ull}},
+{{16351854012943748108ull, 1551090669189166669ull,
+ 15869793667051446408ull, 3468881891429419661ull}},
+{{6604759460897521423ull, 1938863336486458337ull,
+ 6002184028532144298ull, 4336102364286774577ull}},
+{{15657189709129420650ull, 5823475603731424364ull,
+ 15280580063901059946ull, 2710063977679234110ull}},
+{{1124743062702224196ull, 16502716541519056264ull,
+ 9877353043021549124ull, 3387579972099042638ull}},
+{{1405928828377780245ull, 2181651603189268714ull,
+ 3123319266922160598ull, 4234474965123803298ull}},
+{{5490391536163500557ull, 15198590307275456658ull,
+ 6563760560253738277ull, 2646546853202377061ull}},
+{{16086361457059151504ull, 5163179828812157110ull,
+ 12816386718744560751ull, 3308183566502971326ull}},
+{{10884579784469163572ull, 1842288767587808484ull,
+ 6797111361575925131ull, 4135229458128714158ull}},
+{{16026234402148003041ull, 17292331544238237966ull,
+ 18083252656267116918ull, 2584518411330446348ull}},
+{{10809420965830227993ull, 12392042393443021650ull,
+ 4157321746624344532ull, 3230648014163057936ull}},
+{{4288404170433009183ull, 15490052991803777063ull,
+ 5196652183280430665ull, 4038310017703822420ull}},
+{{9597781634161712596ull, 2763754092236278808ull,
+ 12471279651405044974ull, 2523943761064889012ull}},
+{{11997227042702140744ull, 12678064652150124318ull,
+ 15589099564256306217ull, 3154929701331111265ull}},
+{{5773161766522900122ull, 2012522759905491686ull,
+ 5651316400038219060ull, 3943662126663889082ull}},
+{{17443284159358976289ull, 10481198761795708111ull,
+ 8143758768451274816ull, 2464788829164930676ull}},
+{{17192419180771332457ull, 13101498452244635139ull,
+ 10179698460564093520ull, 3080986036456163345ull}},
+{{16878837957536777667ull, 16376873065305793924ull,
+ 17336309094132504804ull, 3851232545570204181ull}},
+{{1325901686605710234ull, 1012173628961345395ull,
+ 13141036193046509455ull, 2407020340981377613ull}},
+{{15492435163539301504ull, 15100275091483845455ull,
+ 2591237186025973106ull, 3008775426226722017ull}},
+{{14753857935996738976ull, 9651971827500031011ull,
+ 7850732500959854287ull, 3760969282783402521ull}},
+{{6915318200784267908ull, 12950011419828601238ull,
+ 16435922859168378689ull, 2350605801739626575ull}},
+{{17867519787835110693ull, 2352456219503587835ull,
+ 15933217555533085458ull, 2938257252174533219ull}},
+{{17722713716366500462ull, 12163942311234260602ull,
+ 15304835925988968918ull, 3672821565218166524ull}},
+{{12930020108603349770ull, 5981555852188049945ull,
+ 684300833776659532ull, 4591026956522708156ull}},
+{{1163733540236011750ull, 12961844444472307024ull,
+ 9651060057965188015ull, 2869391847826692597ull}},
+{{1454666925295014688ull, 11590619537162995876ull,
+ 16675511090883872923ull, 3586739809783365746ull}},
+{{1818333656618768360ull, 9876588403026356941ull,
+ 11621016826750065346ull, 4483424762229207183ull}},
+{{3442301544600424177ull, 10784553770318860992ull,
+ 14180664544359872697ull, 2802140476393254489ull}},
+{{4302876930750530221ull, 18092378231325964144ull,
+ 3890772625167677159ull, 3502675595491568112ull}},
+{{5378596163438162776ull, 18003786770730067276ull,
+ 4863465781459596449ull, 4378344494364460140ull}},
+{{12584994639003627543ull, 4334837704065210191ull,
+ 12263038150267023589ull, 2736465308977787587ull}},
+{{11119557280327146525ull, 10030233148508900643ull,
+ 10717111669406391582ull, 3420581636222234484ull}},
+{{9287760581981545252ull, 3314419398781349996ull,
+ 13396389586757989478ull, 4275727045277793105ull}},
+{{15028222400593241591ull, 15906570179520507459ull,
+ 1455214464082661567ull, 2672329403298620691ull}},
+{{14173591982314164084ull, 15271526705973246420ull,
+ 15654076135385490671ull, 3340411754123275863ull}},
+{{17716989977892705105ull, 14477722364039170121ull,
+ 14955909150804475435ull, 4175514692654094829ull}},
+{{4155589708541858835ull, 6742733468310787374ull,
+ 11653286228466491099ull, 2609696682908809268ull}},
+{{14417859172532099352ull, 3816730816961096313ull,
+ 14566607785583113874ull, 3262120853636011585ull}},
+{{4187265910382960477ull, 13994285558056146200ull,
+ 4373201676696728630ull, 4077651067045014482ull}},
+{{2617041193989350299ull, 4134742455357703471ull,
+ 7344937066362843298ull, 2548531916903134051ull}},
+{{17106359547768851585ull, 14391800106051905146ull,
+ 4569485314526166218ull, 3185664896128917564ull}},
+{{12159577397856288673ull, 8766378095710105625ull,
+ 5711856643157707773ull, 3982081120161146955ull}},
+{{682206846019098565ull, 7784829319032509968ull, 1264067392759873406ull,
+ 2488800700100716847ull}},
+{{852758557523873206ull, 507664611935861652ull, 15415142296232005470ull,
+ 3111000875125896058ull}},
+{{1065948196904841508ull, 9857952801774602873ull,
+ 10045555833435231029ull, 3888751093907370073ull}},
+{{12195432669133995702ull, 8467063510322820747ull,
+ 17807687441965489153ull, 2430469433692106295ull}},
+{{10632604817990106724ull, 15195515406330913838ull,
+ 17647923284029473537ull, 3038086792115132869ull}},
+{{4067383985632857597ull, 5159336202631478586ull,
+ 8224846049754678210ull, 3797608490143916087ull}},
+{{7153801009447923902ull, 7836271145072062020ull,
+ 12058057808737755737ull, 2373505306339947554ull}},
+{{8942251261809904878ull, 14407024949767465429ull,
+ 5849200224067418863ull, 2966881632924934443ull}},
+{{15789500095689769001ull, 13397095168781943882ull,
+ 2699814261656885675ull, 3708602041156168054ull}},
+{{14480123578233493530ull, 6067341471275020974ull,
+ 15522441968817717259ull, 2317876275722605033ull}},
+{{8876782435937091104ull, 2972490820666388314ull,
+ 5567994405739982862ull, 2897345344653256292ull}},
+{{1872606008066588072ull, 12938985562687761201ull,
+ 6959993007174978577ull, 3621681680816570365ull}},
+{{6952443528510622994ull, 2338673898077537789ull,
+ 13311677277396111126ull, 4527102101020712956ull}},
+{{6651120214532833323ull, 15296729241580624830ull,
+ 17543170335227345261ull, 2829438813137945597ull}},
+{{17537272305020817462ull, 5285853496693617325ull,
+ 8093904863752017865ull, 3536798516422431997ull}},
+{{8086532325993858115ull, 11219002889294409561ull,
+ 14729067098117410235ull, 4420998145528039996ull}},
+{{16583297749814631082ull, 4706033796595312023ull,
+ 18429038973178157205ull, 2763123840955024997ull}},
+{{16117436168840900949ull, 10494228264171527933ull,
+ 9201240661190532794ull, 3453904801193781247ull}},
+{{6311737155768962474ull, 3894413293359634109ull,
+ 6889864808060778089ull, 4317381001492226559ull}},
+{{6250678731569295498ull, 13963223354418241078ull,
+ 11223694532679068161ull, 2698363125932641599ull}},
+{{17036720451316395181ull, 3618971137740637635ull,
+ 9417932147421447298ull, 3372953907415801999ull}},
+{{16684214545718106072ull, 13747085959030572852ull,
+ 7160729165849421218ull, 4216192384269752499ull}},
+{{1204262054219040487ull, 13203614742821495937ull,
+ 2169612719442194309ull, 2635120240168595312ull}},
+{{6117013586201188513ull, 2669460373244706209ull,
+ 2712015899302742887ull, 3293900300210744140ull}},
+{{12257953001178873545ull, 17171883521838046473ull,
+ 3390019874128428608ull, 4117375375263430175ull}},
+{{743691598095714110ull, 10732427201148779046ull,
+ 9036291448971349736ull, 2573359609539643859ull}},
+{{10152986534474418445ull, 13415534001435973807ull,
+ 6683678292786799266ull, 3216699511924554824ull}},
+{{8079547149665635152ull, 7546045464940191451ull,
+ 8354597865983499083ull, 4020874389905693530ull}},
+{{2743873959327328018ull, 2410435406373925705ull,
+ 9833309684667074831ull, 2513046493691058456ull}},
+{{8041528467586547927ull, 16848102313249570843ull,
+ 12291637105833843538ull, 3141308117113823070ull}},
+{{5440224566055797004ull, 11836755854707187746ull,
+ 6141174345437528615ull, 3926635146392278838ull}},
+{{8011826372212261032ull, 14315501436833074197ull,
+ 17673292021180619096ull, 2454146966495174273ull}},
+{{14626468983692714194ull, 17894376796041342746ull,
+ 8256556971193610158ull, 3067683708118967842ull}},
+{{9059714192761116934ull, 13144598958196902625ull,
+ 1097324177137236890ull, 3834604635148709803ull}},
+{{17191536416544167844ull, 12827060367300452044ull,
+ 16826728675206630720ull, 2396627896967943626ull}},
+{{3042676446970658189ull, 16033825459125565056ull,
+ 11810038807153512592ull, 2995784871209929533ull}},
+{{3803345558713322736ull, 1595537750197404704ull, 927490453659727029ull,
+ 3744731089012411917ull}},
+{{2377090974195826710ull, 3303054103087071892ull,
+ 2885524542751023345ull, 2340456930632757448ull}},
+{{2971363717744783387ull, 8740503647286227769ull,
+ 3606905678438779181ull, 2925571163290946810ull}},
+{{8325890665608367138ull, 15537315577535172615ull,
+ 13732004134903249784ull, 3656963954113683512ull}},
+{{5795677313583071019ull, 974900398209414153ull,
+ 17165005168629062231ull, 4571204942642104390ull}},
+{{15151513367057889147ull, 7526841776521965701ull,
+ 6116442211965775990ull, 2857003089151315244ull}},
+{{5104333653540197721ull, 185180183797681319ull, 7645552764957219988ull,
+ 3571253861439144055ull}},
+{{1768731048497859248ull, 231475229747101649ull, 4945254937769137081ull,
+ 4464067326798930069ull}},
+{{12634671951379631790ull, 11673887064660408290ull,
+ 5396627345319404627ull, 2790042079249331293ull}},
+{{6569967902369763929ull, 9980672812398122459ull,
+ 11357470200076643688ull, 3487552599061664116ull}},
+{{3600773859534817007ull, 12475841015497653074ull,
+ 14196837750095804610ull, 4359440748827080145ull}},
+{{6862169680636648534ull, 12409086653113421075ull,
+ 1955494566168796025ull, 2724650468016925091ull}},
+{{3966026082368422763ull, 1676300261109612632ull,
+ 16279426262993158744ull, 3405813085021156363ull}},
+{{4957532602960528454ull, 2095375326387015790ull,
+ 15737596810314060526ull, 4257266356276445454ull}},
+{{16933515932132493996ull, 15144667634274048580ull,
+ 5224311988018899924ull, 2660791472672778409ull}},
+{{2720150841456065879ull, 484090469133009110ull,
+ 11142076003451012810ull, 3325989340840973011ull}},
+{{12623560588674858156ull, 9828485123271037195ull,
+ 9315908985886378108ull, 4157486676051216264ull}},
+{{5583882358708092396ull, 15366175238899174055ull,
+ 5822443116178986317ull, 2598429172532010165ull}},
+{{2368166929957727591ull, 5372660993341803857ull,
+ 11889739913651120801ull, 3248036465665012706ull}},
+{{7571894680874547392ull, 11327512260104642725ull,
+ 5638802855209125193ull, 4060045582081265883ull}},
+{{7038277184760286072ull, 162166134924319847ull, 1218408775292009294ull,
+ 2537528488800791177ull}},
+{{4186160462522969686ull, 9426079705510175617ull,
+ 6134696987542399521ull, 3171910611000988971ull}},
+{{9844386596581100012ull, 16394285650315107425ull,
+ 3056685216000611497ull, 3964888263751236214ull}},
+{{17681956668931657268ull, 3328899503805860284ull,
+ 15745486315282545898ull, 2478055164844522633ull}},
+{{3655701762455019968ull, 13384496416612101164ull,
+ 5846799838821018660ull, 3097568956055653292ull}},
+{{4569627203068774960ull, 16730620520765126455ull,
+ 7308499798526273325ull, 3871961195069566615ull}},
+{{9773546029559066206ull, 12762480834691897986ull,
+ 11485341401720002684ull, 2419975746918479134ull}},
+{{2993560500094056950ull, 15953101043364872483ull,
+ 5133304715295227547ull, 3024969683648098918ull}},
+{{17577008680399734899ull, 15329690285778702699ull,
+ 15640002930973810242ull, 3781212104560123647ull}},
+{{8679787416036140360ull, 14192742447039077091ull,
+ 16692530859499713257ull, 2363257565350077279ull}},
+{{6238048251617787546ull, 3905870003516682652ull,
+ 16253977555947253668ull, 2954071956687596599ull}},
+{{7797560314522234432ull, 4882337504395853315ull,
+ 15705785926506679181ull, 3692589945859495749ull}},
+{{2567632187362702568ull, 5357303949461102274ull,
+ 12121959213280368440ull, 2307868716162184843ull}},
+{{12432912271058154018ull, 6696629936826377842ull,
+ 10540762998173072646ull, 2884835895202731054ull}},
+{{6317768301967916715ull, 17594159457887748111ull,
+ 3952581710861564999ull, 3606044869003413818ull}},
+{{3285524359032507990ull, 17381013303932297235ull,
+ 14164099175431732057ull, 4507556086254267272ull}},
+{{18194353788891175158ull, 3945604287316603915ull,
+ 8852561984644832536ull, 2817222553908917045ull}},
+{{18131256217686581043ull, 4932005359145754894ull,
+ 15677388499233428574ull, 3521528192386146306ull}},
+{{13440698235253450496ull, 15388378735786969426ull,
+ 10373363587187009909ull, 4401910240482682883ull}},
+{{13012122415460794464ull, 11923579719080549843ull,
+ 4177509232778187241ull, 2751193900301676802ull}},
+{{11653467000898605176ull, 1069416593568523592ull,
+ 14445258577827509860ull, 3438992375377096002ull}},
+{{14566833751123256470ull, 1336770741960654490ull,
+ 8833201185429611517ull, 4298740469221370003ull}},
+{{13715957112879423198ull, 3141324722939103008ull,
+ 3214907731679813246ull, 2686712793263356252ull}},
+{{17144946391099278997ull, 13150027940528654568ull,
+ 4018634664599766557ull, 3358390991579195315ull}},
+{{2984438915164547130ull, 2602476870378654499ull, 411607312322320293ull,
+ 4197988739473994144ull}},
+{{18006175386473699620ull, 3932391053200353013ull,
+ 257254570201450183ull, 2623742962171246340ull}},
+{{8672661177809960813ull, 303802798073053363ull, 321568212751812729ull,
+ 3279678702714057925ull}},
+{{6229140453835063113ull, 4991439516018704608ull,
+ 5013646284367153815ull, 4099598378392572406ull}},
+{{3893212783646914446ull, 10037178725152772236ull,
+ 16968586983011634846ull, 2562248986495357753ull}},
+{{4866515979558643057ull, 3323101369586189487ull,
+ 7375675673482379846ull, 3202811233119197192ull}},
+{{1471458956020915917ull, 13377248748837512667ull,
+ 9219594591852974807ull, 4003514041398996490ull}},
+{{17060562912008930112ull, 15278309495664527272ull,
+ 10373932638335497158ull, 2502196275874372806ull}},
+{{2878959566301611024ull, 9874514832725883283ull,
+ 3744043761064595640ull, 3127745344842966008ull}},
+{{17433757513159177492ull, 12343143540907354103ull,
+ 4680054701330744550ull, 3909681681053707510ull}},
+{{17813627473365567789ull, 3102778694639708410ull,
+ 16760092243613879056ull, 2443551050658567193ull}},
+{{13043662304852183928ull, 3878473368299635513ull,
+ 7115057249235185108ull, 3054438813323208992ull}},
+{{2469519825783066198ull, 4848091710374544392ull,
+ 8893821561543981385ull, 3818048516654011240ull}},
+{{1543449891114416374ull, 14559272365052560005ull,
+ 5558638475964988365ull, 2386280322908757025ull}},
+{{6540998382320408371ull, 4364032401033536294ull,
+ 11559984113383623361ull, 2982850403635946281ull}},
+{{17399620014755286272ull, 10066726519719308271ull,
+ 614922086447365489ull, 3728563004544932852ull}},
+{{17792291536863135776ull, 17820919120893037429ull,
+ 9607698340884379238ull, 2330351877840583032ull}},
+{{8405306365796756008ull, 13052776864261520979ull,
+ 12009622926105474048ull, 2912939847300728790ull}},
+{{5894946938818557106ull, 16315971080326901224ull,
+ 5788656620777066752ull, 3641174809125910988ull}},
+{{7368683673523196382ull, 1948219776699074914ull,
+ 7235820775971333441ull, 4551468511407388735ull}},
+{{9217113314379385643ull, 12746852406505391581ull,
+ 11439917012623165256ull, 2844667819629617959ull}},
+{{16133077661401619958ull, 15933565508131739476ull,
+ 9688210247351568666ull, 3555834774537022449ull}},
+{{1719603003042473331ull, 10693584848309898538ull,
+ 16721948827616848737ull, 4444793468171278061ull}},
+{{5686437895328933736ull, 18212705576262156346ull,
+ 12757061026474224412ull, 2777995917607048788ull}},
+{{16331419406015942978ull, 4319137896618143816ull,
+ 15946326283092780516ull, 3472494897008810985ull}},
+{{1967530183810377106ull, 5398922370772679771ull,
+ 6097849798583811933ull, 4340618621261013732ull}},
+{{17370607429377343356ull, 5680169490946618808ull,
+ 13034528160969658266ull, 2712886638288133582ull}},
+{{3266515213012127578ull, 16323583900538049319ull,
+ 7069788164357297024ull, 3391108297860166978ull}},
+{{17918202071547323185ull, 1957735801963010032ull,
+ 18060607242301397089ull, 4238885372325208722ull}},
+{{11198876294717076991ull, 12752799922295351030ull,
+ 15899565544865761084ull, 2649303357703255451ull}},
+{{4775223331541570430ull, 15940999902869188788ull,
+ 15262770912654813451ull, 3311629197129069314ull}},
+{{5969029164426963038ull, 15314563860159098081ull,
+ 9855091603963741006ull, 4139536496411336643ull}},
+{{15259858273835321659ull, 4959916394172048396ull,
+ 3853589243263644177ull, 2587210310257085402ull}},
+{{628078768584600457ull, 10811581511142448400ull,
+ 14040358590934331029ull, 3234012887821356752ull}},
+{{785098460730750572ull, 18126162907355448404ull,
+ 17550448238667913786ull, 4042516109776695940ull}},
+{{9714058574811494915ull, 15940537835524543156ull,
+ 1745658112312670308ull, 2526572568610434963ull}},
+{{12142573218514368644ull, 1478928220696127329ull,
+ 16017130695673001598ull, 3158215710763043703ull}},
+{{1343158467860797093ull, 11072032312724934970ull,
+ 15409727351163864093ull, 3947769638453804629ull}},
+{{5451160060840386087ull, 9225863204666778308ull,
+ 11936922603691109010ull, 2467356024033627893ull}},
+{{6813950076050482609ull, 2308956968978697077ull,
+ 1086095199331722551ull, 3084195030042034867ull}},
+{{13129123613490491165ull, 16721254266505535058ull,
+ 15192677054446816900ull, 3855243787552543583ull}},
+{{12817388276858944882ull, 1227411879711183603ull,
+ 16412952186670342419ull, 2409527367220339739ull}},
+{{11410049327646293199ull, 15369322904921143216ull,
+ 15904504214910540119ull, 3011909209025424674ull}},
+{{14262561659557866498ull, 14599967612724041116ull,
+ 10657258231783399341ull, 3764886511281780843ull}},
+{{18137473074078442370ull, 11430822767166219649ull,
+ 4354943385650930636ull, 2353054069551113027ull}},
+{{8836783287315889250ull, 14288528458957774562ull,
+ 831993213636275391ull, 2941317586938891284ull}},
+{{1822607072290085754ull, 13248974555269830299ull,
+ 1039991517045344239ull, 3676646983673614105ull}},
+{{16113316895644770905ull, 11949532175659899969ull,
+ 5911675414734068203ull, 4595808729592017631ull}},
+{{3153294032136899960ull, 5162614600573743529ull,
+ 10612326161849874483ull, 2872380455995011019ull}},
+{{8553303558598512854ull, 1841582232289791507ull,
+ 8653721683884955200ull, 3590475569993763774ull}},
+{{6079943429820753163ull, 2301977790362239384ull,
+ 1593780068001418192ull, 4488094462492204718ull}},
+{{3799964643637970727ull, 1438736118976399615ull,
+ 14831170597783050082ull, 2805059039057627948ull}},
+{{138269786120075505ull, 11021792185575275327ull, 92219173519260986ull,
+ 3506323798822034936ull}},
+{{14007895287932258093ull, 4553868195114318350ull,
+ 115273966899076233ull, 4382904748527543670ull}},
+{{4143248536530273404ull, 14375382668014918729ull,
+ 13907104284594086357ull, 2739315467829714793ull}},
+{{9790746689090229659ull, 4134170279736484699ull,
+ 3548822300460444235ull, 3424144334787143492ull}},
+{{7626747342935399170ull, 556026831243217970ull, 4436027875575555294ull,
+ 4280180418483929365ull}},
+{{9378403107762012385ull, 14182574824809174943ull,
+ 5078360431448416010ull, 2675112761552455853ull}},
+{{7111317866275127577ull, 8504846494156692871ull,
+ 10959636557737907917ull, 3343890951940569816ull}},
+{{4277461314416521568ull, 15242744136123253993ull,
+ 13699545697172384896ull, 4179863689925712270ull}},
+{{14202628367578795740ull, 9526715085077033745ull,
+ 3950530042305352656ull, 2612414806203570169ull}},
+{{3918227404191330963ull, 11908393856346292182ull,
+ 9549848571309078724ull, 3265518507754462711ull}},
+{{14121156292093939511ull, 14885492320432865227ull,
+ 7325624695708960501ull, 4081898134693078389ull}},
+{{6519879673345018243ull, 11609275709484234719ull,
+ 6884358444031794265ull, 2551186334183173993ull}},
+{{3538163573253884899ull, 676536581573129687ull,
+ 13217134073467130736ull, 3188982917728967491ull}},
+{{18257762521849519836ull, 845670726966412108ull,
+ 11909731573406525516ull, 3986228647161209364ull}},
+{{2187729539301174090ull, 9751916241208783376ull,
+ 16666954270233854255ull, 2491392904475755852ull}},
+{{2734661924126467612ull, 7578209283083591316ull,
+ 2386948764082766203ull, 3114241130594694816ull}},
+{{3418327405158084515ull, 4861075585427101241ull,
+ 2983685955103457754ull, 3892801413243368520ull}},
+{{13665669674292272582ull, 7649858259319326179ull,
+ 1864803721939661096ull, 2433000883277105325ull}},
+{{12470401074437952823ull, 9562322824149157724ull,
+ 6942690670851964274ull, 3041251104096381656ull}},
+{{15588001343047441029ull, 2729531493331671347ull,
+ 8678363338564955343ull, 3801563880120477070ull}},
+{{7436657830190956691ull, 8623486210973376448ull, 812291068175709185ull,
+ 2375977425075298169ull}},
+{{9295822287738695864ull, 15391043782144108464ull,
+ 5627049853647024385ull, 2969971781344122711ull}},
+{{11619777859673369830ull, 5403746672397971868ull,
+ 2422126298631392578ull, 3712464726680153389ull}},
+{{16485733199150631952ull, 7989027688676120321ull,
+ 3819671945858314313ull, 2320290454175095868ull}},
+{{6772108443656126228ull, 14597970629272538306ull,
+ 4774589932322892891ull, 2900363067718869835ull}},
+{{17688507591424933593ull, 13635777268163284978ull,
+ 1356551396976228210ull, 3625453834648587294ull}},
+{{12887262452426391183ull, 7821349548349330415ull,
+ 10919061283075061071ull, 4531817293310734117ull}},
+{{14972068060407576345ull, 11805872495359413365ull,
+ 9130256311135607121ull, 2832385808319208823ull}},
+{{4880027020227306720ull, 922282563917102995ull, 6801134370492120998ull,
+ 3540482260399011029ull}},
+{{1488347756856745495ull, 10376225241751154552ull,
+ 13113103981542539151ull, 4425602825498763786ull}},
+{{930217348035465935ull, 13402669803735553451ull,
+ 12807376006891474873ull, 2766001765936727366ull}},
+{{14997829740326496130ull, 2918279199387278101ull,
+ 6785847971759567784ull, 3457502207420909208ull}},
+{{4912229120125956451ull, 3647848999234097627ull,
+ 8482309964699459730ull, 4321877759276136510ull}},
+{{764300190865028830ull, 6891591642948698921ull, 689757709509774427ull,
+ 2701173599547585319ull}},
+{{5567061257008673941ull, 4002803535258485747ull,
+ 14697255192169381746ull, 3376466999434481648ull}},
+{{2347140552833454522ull, 14226876455927882992ull,
+ 18371568990211727182ull, 4220583749293102060ull}},
+{{1466962845520909077ull, 4280111766527538966ull,
+ 2258858582027553681ull, 2637864843308188788ull}},
+{{11057075593755912154ull, 9961825726586811611ull,
+ 2823573227534442101ull, 3297331054135235985ull}},
+{{9209658473767502288ull, 17063968176660902418ull,
+ 8141152552845440530ull, 4121663817669044981ull}},
+{{10367722564532076834ull, 15276666128840451915ull,
+ 7394063354742094283ull, 2576039886043153113ull}},
+{{8347967187237708139ull, 14484146642623176990ull,
+ 13854265211855005758ull, 3220049857553941391ull}},
+{{1211586947192359365ull, 8881811266424195430ull,
+ 12706145496391369294ull, 4025062321942426739ull}},
+{{14592299897277388315ull, 939446023087734239ull,
+ 5635497926030911857ull, 2515663951214016712ull}},
+{{13628688853169347490ull, 5785993547287055703ull,
+ 7044372407538639821ull, 3144579939017520890ull}},
+{{12424175048034296459ull, 11844177952536207533ull,
+ 18028837546278075584ull, 3930724923771901112ull}},
+{{10070952414235129239ull, 7402611220335129708ull,
+ 11268023466423797240ull, 2456703077357438195ull}},
+{{12588690517793911548ull, 9253264025418912135ull,
+ 9473343314602358646ull, 3070878846696797744ull}},
+{{11124177128815001531ull, 2343207994918864361ull,
+ 11841679143252948308ull, 3838598558370997180ull}},
+{{35081677868294101ull, 10687877033679066034ull,
+ 16624421501387868500ull, 2399124098981873237ull}},
+{{9267224134190143434ull, 13359846292098832542ull,
+ 6945468821452671913ull, 2998905123727341547ull}},
+{{2360658130882903485ull, 2864749809841376966ull,
+ 4070150008388451988ull, 3748631404659176934ull}},
+{{15310469387083978390ull, 11013840668005636411ull,
+ 16378901810524946204ull, 2342894627911985583ull}},
+{{14526400715427585084ull, 13767300835007045514ull,
+ 15861941244728794851ull, 2928618284889981979ull}},
+{{8934628857429705547ull, 12597440025331418989ull,
+ 15215740537483605660ull, 3660772856112477474ull}},
+{{15779972090214519837ull, 15746800031664273736ull,
+ 9796303634999731267ull, 4575966070140596843ull}},
+{{9862482556384074898ull, 7535907010576477133ull,
+ 3816846762661138090ull, 2859978793837873027ull}},
+{{16939789213907481527ull, 196511726365820608ull, 159372434899034709ull,
+ 3574973492297341284ull}},
+{{2727992443674800292ull, 4857325676384663665ull, 199215543623793386ull,
+ 4468716865371676605ull}},
+{{13234210323365219943ull, 7647514566167802694ull,
+ 2430352723978564818ull, 2792948040857297878ull}},
+{{7319390867351749121ull, 336021170854977560ull,
+ 12261312941827981831ull, 3491185051071622347ull}},
+{{9149238584189686401ull, 14255084518850885662ull,
+ 10714955158857589384ull, 4363981313839527934ull}},
+{{1106588096691166097ull, 8909427824281803539ull,
+ 2085160955858605461ull, 2727488321149704959ull}},
+{{15218293176146121333ull, 15748470798779642327ull,
+ 16441509250105420538ull, 3409360401437131198ull}},
+{{14411180451755263762ull, 10462216461619777101ull,
+ 11328514525776999865ull, 4261700501796413998ull}},
+{{11312830791560733803ull, 18068100334580830448ull,
+ 2468635560183237011ull, 2663562813622758749ull}},
+{{14141038489450917254ull, 17973439399798650156ull,
+ 7697480468656434168ull, 3329453517028448436ull}},
+{{17676298111813646567ull, 4020055176038761079ull,
+ 9621850585820542711ull, 4161816896285560545ull}},
+{{17965215347524610961ull, 9430063512665307530ull,
+ 17542871662206308954ull, 2601135560178475340ull}},
+{{13233147147550987893ull, 2564207353976858605ull,
+ 3481845504048334577ull, 3251419450223094176ull}},
+{{2706375879156571154ull, 7816945210898461161ull,
+ 4352306880060418221ull, 4064274312778867720ull}},
+{{13220699970541326731ull, 7191433766025232177ull,
+ 2720191800037761388ull, 2540171445486792325ull}},
+{{2690816907894494702ull, 8989292207531540222ull,
+ 8011925768474589639ull, 3175214306858490406ull}},
+{{12586893171722894185ull, 6624929240987037373ull,
+ 791535173738461241ull, 3969017883573113008ull}},
+{{10172651241540502818ull, 15669795821685368118ull,
+ 494709483586538275ull, 2480636177233195630ull}},
+{{3492442015070852714ull, 14975558758679322244ull,
+ 9841758891337948652ull, 3100795221541494537ull}},
+{{4365552518838565893ull, 272704374639601189ull,
+ 16913884632599823720ull, 3875994026926868171ull}},
+{{5034313333487797635ull, 170440234149750743ull, 8265334886161195873ull,
+ 2422496266829292607ull}},
+{{1681205648432359140ull, 4824736311114576333ull,
+ 5719982589274106937ull, 3028120333536615759ull}},
+{{6713193078967836829ull, 10642606407320608320ull,
+ 2538292218165245767ull, 3785150416920769699ull}},
+{{4195745674354898018ull, 13569158032216462056ull,
+ 17727333700849136268ull, 2365719010575481061ull}},
+{{5244682092943622523ull, 16961447540270577570ull,
+ 8324109070779256623ull, 2957148763219351327ull}},
+{{15779224653034303961ull, 16590123406910834058ull,
+ 5793450320046682875ull, 3696435954024189159ull}},
+{{14473701426573827880ull, 8062984120105577334ull,
+ 10538435477670258653ull, 2310272471265118224ull}},
+{{8868754746362509042ull, 14690416168559359572ull,
+ 13173044347087823316ull, 2887840589081397780ull}},
+{{11085943432953136302ull, 18363020210699199465ull,
+ 16466305433859779145ull, 3609800736351747225ull}},
+{{22371235909256665ull, 9118717208091835620ull, 6747823737042560220ull,
+ 4512250920439684032ull}},
+{{9237354059298061224ull, 14922570291912173070ull,
+ 4217389835651600137ull, 2820156825274802520ull}},
+{{2323320537267800722ull, 4818154809608052626ull,
+ 5271737294564500172ull, 3525196031593503150ull}},
+{{12127522708439526710ull, 6022693512010065782ull,
+ 15813043655060401023ull, 4406495039491878937ull}},
+{{2968015674347316290ull, 10681712472647372970ull,
+ 2965623256771668783ull, 2754059399682424336ull}},
+{{12933391629788921171ull, 8740454572381828308ull,
+ 3707029070964585979ull, 3442574249603030420ull}},
+{{16166739537236151463ull, 6313882197049897481ull,
+ 4633786338705732474ull, 4303217812003788025ull}},
+{{3186683183131512809ull, 8557862391583573830ull,
+ 14425331507759552556ull, 2689511132502367515ull}},
+{{13206726015769166819ull, 10697327989479467287ull,
+ 13419978366272052791ull, 3361888915627959394ull}},
+{{11896721501284070619ull, 8759973968421946205ull,
+ 7551600920985290181ull, 4202361144534949243ull}},
+{{9741293947516238089ull, 7780826739477410330ull,
+ 2413907566402112411ull, 2626475715334343277ull}},
+{{2953245397540521803ull, 5114347405919375009ull,
+ 7629070476430028418ull, 3283094644167929096ull}},
+{{8303242765353040158ull, 15616306294253994569ull,
+ 9536338095537535522ull, 4103868305209911370ull}},
+{{16718741774414119859ull, 14371877452336134509ull,
+ 10571897328138347605ull, 2564917690756194606ull}},
+{{7063369162735486112ull, 4129788760138004425ull,
+ 3991499623318158699ull, 3206147113445243258ull}},
+{{13440897471846745543ull, 550549931745117627ull,
+ 14212746566002474182ull, 4007683891806554072ull}},
+{{6094717910690522013ull, 14179151762622862229ull,
+ 8882966603751546363ull, 2504802432379096295ull}},
+{{12230083406790540420ull, 13112253684851189882ull,
+ 6492022236262045050ull, 3131003040473870369ull}},
+{{6064232221633399717ull, 7166945069209211545ull,
+ 12726713813754944217ull, 3913753800592337961ull}},
+{{15319360184589344583ull, 16008555714324226975ull,
+ 1036667105955758279ull, 2446096125370211226ull}},
+{{14537514212309292825ull, 15399008624477895815ull,
+ 10519205919299473657ull, 3057620156712764032ull}},
+{{13560206746959228127ull, 5413702725315206057ull,
+ 13149007399124342072ull, 3822025195890955040ull}},
+{{1557600189208435723ull, 3383564203322003786ull,
+ 8218129624452713795ull, 2388765747431846900ull}},
+{{11170372273365320462ull, 18064513309434668444ull,
+ 10272662030565892243ull, 2985957184289808625ull}},
+{{13962965341706650578ull, 17968955618365947651ull,
+ 17452513556634753208ull, 3732446480362260781ull}},
+{{6421010329352962659ull, 11230597261478717282ull,
+ 13213663982110414707ull, 2332779050226412988ull}},
+{{17249634948545979132ull, 9426560558421008698ull,
+ 16517079977638018384ull, 2915973812783016235ull}},
+{{12338671648827698107ull, 11783200698026260873ull,
+ 16034663953620135076ull, 3644967265978770294ull}},
+{{1588281505752458921ull, 14729000872532826092ull,
+ 10819957905170393037ull, 4556209082473462868ull}},
+{{10216047977950062634ull, 11511468554546710259ull,
+ 15985845727586271456ull, 2847630676545914292ull}},
+{{8158373954010190388ull, 14389335693183387824ull,
+ 1535563085773287704ull, 3559538345682392866ull}},
+{{10197967442512737985ull, 17986669616479234780ull,
+ 11142825894071385438ull, 4449422932102991082ull}},
+{{15597101688425237049ull, 6629982491872133833ull,
+ 11575952202222003803ull, 2780889332564369426ull}},
+{{5661319055249382599ull, 3675792096412779388ull,
+ 5246568215922728946ull, 3476111665705461783ull}},
+{{7076648819061728249ull, 13818112157370750043ull,
+ 1946524251476023278ull, 4345139582131827229ull}},
+{{2117062502699886204ull, 4024634079929330873ull,
+ 3522420666386208501ull, 2715712238832392018ull}},
+{{7258014146802245659ull, 9642478618339051495ull,
+ 13626397869837536434ull, 3394640298540490022ull}},
+{{4460831665075419169ull, 2829726236069038561ull,
+ 7809625300442144735ull, 4243300373175612528ull}},
+{{14317234836740606741ull, 8686107925184230956ull,
+ 4881015812776340459ull, 2652062733234757830ull}},
+{{17896543545925758426ull, 6245948888052900791ull,
+ 15324641802825201382ull, 3315078416543447287ull}},
+{{17758993413979810128ull, 17030808146920901797ull,
+ 14544116235104113823ull, 4143848020679309109ull}},
+{{13405213892951075282ull, 17561784119466645479ull,
+ 11395915656153765091ull, 2589905012924568193ull}},
+{{12144831347761456199ull, 17340544130905918945ull,
+ 409836514910042652ull, 3237381266155710242ull}},
+{{1345981129419656536ull, 3228936089922847066ull,
+ 9735667680492329124ull, 4046726582694637802ull}},
+{{5452924224314673239ull, 11241457093056555224ull,
+ 10696478318735093606ull, 2529204114184148626ull}},
+{{6816155280393341549ull, 4828449329465918222ull,
+ 4147225861564091200ull, 3161505142730185783ull}},
+{{17743566137346452744ull, 6035561661832397777ull,
+ 572346308527726096ull, 3951881428412732229ull}},
+{{4172199808200451109ull, 3772226038645248611ull,
+ 2663559452043522762ull, 2469925892757957643ull}},
+{{603563741823175983ull, 13938654585161336572ull,
+ 17164507370336567164ull, 3087407365947447053ull}},
+{{754454677278969978ull, 17423318231451670715ull,
+ 7620576157638545243ull, 3859259207434308817ull}},
+{{16612435237795213901ull, 8583730885443600244ull,
+ 16292075144592560537ull, 2412037004646443010ull}},
+{{2318799973534465760ull, 15341349625231888210ull,
+ 11141721893885924863ull, 3015046255808053763ull}},
+{{12121872003772858007ull, 14565001013112472358ull,
+ 9315466348930018175ull, 3768807819760067204ull}},
+{{2964483983930648351ull, 16020654660836377080ull,
+ 15045538504936037167ull, 2355504887350042002ull}},
+{{3705604979913310438ull, 15414132307618083446ull,
+ 9583551094315270651ull, 2944381109187552503ull}},
+{{13855378261746413856ull, 14655979366095216403ull,
+ 7367752849466700410ull, 3680476386484440629ull}},
+{{12707536808755629416ull, 9096602170764244696ull,
+ 13821377080260763417ull, 4600595483105550786ull}},
+{{7942210505472268385ull, 17214591402796122695ull,
+ 13250046693590365039ull, 2875372176940969241ull}},
+{{5316077113412947577ull, 16906553235067765465ull,
+ 2727500311705792587ull, 3594215221176211552ull}},
+{{11256782410193572375ull, 16521505525407318927ull,
+ 3409375389632240734ull, 4492769026470264440ull}},
+{{13953018034012064591ull, 5714254934952186425ull,
+ 2130859618520150459ull, 2807980641543915275ull}},
+{{3606214487232917026ull, 2531132650262845128ull,
+ 16498632578432351786ull, 3509975801929894093ull}},
+{{4507768109041146283ull, 12387287849683332218ull,
+ 6788232667758276020ull, 4387469752412367617ull}},
+{{7429041086578104331ull, 16965426942906858444ull,
+ 15771860463417392272ull, 2742168595257729760ull}},
+{{9286301358222630413ull, 2760039604924021439ull,
+ 1268081505562188725ull, 3427710744072162201ull}},
+{{6996190679350900113ull, 8061735524582414703ull,
+ 6196787900380123810ull, 4284638430090202751ull}},
+{{11290148202235394427ull, 9650270721291397093ull,
+ 10790521465378659237ull, 2677899018806376719ull}},
+{{277627197512079321ull, 16674524420041634271ull,
+ 8876465813295936142ull, 3347373773507970899ull}},
+{{14182092052172262863ull, 11619783488197267030ull,
+ 6483896248192532274ull, 4184217216884963624ull}},
+{{4252121514180276386ull, 11874050698550679798ull,
+ 4052435155120332671ull, 2615135760553102265ull}},
+{{14538523929580121290ull, 10230877354760961843ull,
+ 9677229962327803743ull, 3268919700691377831ull}},
+{{13561468893547763708ull, 8176910675023814400ull,
+ 7484851434482366775ull, 4086149625864222289ull}},
+{{8475918058467352318ull, 12028098199530965856ull,
+ 16207247192619948994ull, 2553843516165138930ull}},
+{{10594897573084190397ull, 5811750712558931512ull,
+ 11035686953920160435ull, 3192304395206423663ull}},
+{{13243621966355237997ull, 2653002372271276486ull,
+ 9182922673972812640ull, 3990380494008029579ull}},
+{{3665577710544635844ull, 1658126482669547804ull,
+ 3433483662019313948ull, 2493987808755018487ull}},
+{{4581972138180794805ull, 2072658103336934755ull,
+ 18126912632806306147ull, 3117484760943773108ull}},
+{{1115779154298605602ull, 16425880684453332156ull,
+ 4211896717298331067ull, 3896855951179716386ull}},
+{{9920734008291404309ull, 7960332418569638645ull,
+ 7244121466738844821ull, 2435534969487322741ull}},
+{{17012603528791643291ull, 14562101541639436210ull,
+ 13666837851850943930ull, 3044418711859153426ull}},
+{{12042382374134778305ull, 8979254890194519455ull,
+ 7860175277958904105ull, 3805523389823941783ull}},
+{{14444018011475318297ull, 17141249352440044419ull,
+ 11830138576365396921ull, 2378452118639963614ull}},
+{{13443336495916759967ull, 7591503635267891812ull,
+ 5564301183601970344ull, 2973065148299954518ull}},
+{{16804170619895949959ull, 9489379544084864765ull,
+ 16178748516357238738ull, 3716331435374943147ull}},
+{{12808449646648662676ull, 10542548233480428382ull,
+ 7805874813509580259ull, 2322707147109339467ull}},
+{{6787190021456052537ull, 8566499273423147574ull,
+ 5145657498459587420ull, 2903383933886674334ull}},
+{{17707359563674841480ull, 10708124091778934467ull,
+ 15655443909929260083ull, 3629229917358342917ull}},
+{{17522513436166163945ull, 8773469096296280180ull,
+ 5734246832129411392ull, 4536537396697928647ull}},
+{{1728198860749076658ull, 5483418185185175113ull,
+ 10501433297721963976ull, 2835335872936205404ull}},
+{{6771934594363733726ull, 6854272731481468891ull,
+ 13126791622152454970ull, 3544169841170256755ull}},
+{{3853232224527279254ull, 17791212951206611922ull,
+ 11796803509263180808ull, 4430212301462820944ull}},
+{{7019956158756937438ull, 11119508094504132451ull,
+ 7373002193289488005ull, 2768882688414263090ull}},
+{{4163259180018783893ull, 64327062848001852ull, 18439624778466635815ull,
+ 3461103360517828862ull}},
+{{5204073975023479866ull, 13915466883842166027ull,
+ 13826158936228518960ull, 4326379200647286078ull}},
+{{946703225175980965ull, 8697166802401353767ull, 4029663316715436446ull,
+ 2703987000404553799ull}},
+{{15018437086752139918ull, 1648086466146916400ull,
+ 425393127466907654ull, 3379983750505692249ull}},
+{{326302284730623281ull, 11283480119538421309ull,
+ 5143427427761022471ull, 4224979688132115311ull}},
+{{2509781937170333503ull, 13969704102352595174ull,
+ 10132171169991720900ull, 2640612305082572069ull}},
+{{12360599458317692686ull, 17462130127940743967ull,
+ 17276899980917039029ull, 3300765381353215086ull}},
+{{10839063304469727954ull, 7992604604643766247ull,
+ 12372752939291522979ull, 4125956726691518858ull}},
+{{13691943592934661827ull, 2689534868688659952ull,
+ 12344656605484589766ull, 2578722954182199286ull}},
+{{17114929491168327284ull, 12585290622715600748ull,
+ 6207448720000961399ull, 3223403692727749108ull}},
+{{2946917790250857489ull, 11119927259967113032ull,
+ 7759310900001201749ull, 4029254615909686385ull}},
+{{1841823618906785931ull, 9255797546693139597ull,
+ 16378784358569220853ull, 2518284134943553990ull}},
+{{6913965542060870317ull, 16181432951793812400ull,
+ 11250108411356750258ull, 3147855168679442488ull}},
+{{8642456927576087897ull, 11003419152887489692ull,
+ 14062635514195937823ull, 3934818960849303110ull}},
+{{14624907616589830744ull, 13794665998195762913ull,
+ 4177461177945073235ull, 2459261850530814444ull}},
+{{4446076465455124717ull, 12631646479317315738ull,
+ 5221826472431341544ull, 3074077313163518055ull}},
+{{14780967618673681704ull, 15789558099146644672ull,
+ 1915597072111789026ull, 3842596641454397569ull}},
+{{9238104761671051065ull, 14480159830394040824ull,
+ 12726463216138337901ull, 2401622900908998480ull}},
+{{11547630952088813832ull, 4265141732710387318ull,
+ 15908079020172922377ull, 3002028626136248100ull}},
+{{5211166653256241482ull, 9943113184315372052ull,
+ 1438354701506601355ull, 3752535782670310126ull}},
+{{12480351195139926734ull, 3908602730983413580ull,
+ 14734029743723789559ull, 2345334864168943828ull}},
+{{15600438993924908418ull, 274067395301879071ull,
+ 18417537179654736949ull, 2931668580211179785ull}},
+{{14888862723978747618ull, 4954270262554736743ull,
+ 9186863419286257474ull, 3664585725263974732ull}},
+{{13999392386546046618ull, 15416209865048196737ull,
+ 11483579274107821842ull, 4580732156579968415ull}},
+{{1832091213950197281ull, 14246817184082510865ull,
+ 14094766073958470507ull, 2862957597862480259ull}},
+{{6901800035865134505ull, 13196835461675750677ull,
+ 13006771574020700230ull, 3578696997328100324ull}},
+{{13238936063258806035ull, 7272672290239912538ull,
+ 16258464467525875288ull, 4473371246660125405ull}},
+{{12886021057964141676ull, 4545420181399945336ull,
+ 12467383301417366007ull, 2795857029162578378ull}},
+{{16107526322455177095ull, 1070089208322543766ull,
+ 6360857089916931701ull, 3494821286453222973ull}},
+{{10911035866214195560ull, 5949297528830567612ull,
+ 12562757380823552530ull, 4368526608066528716ull}},
+{{16042769453238648033ull, 8329996973946492661ull,
+ 17075095399869496139ull, 2730329130041580447ull}},
+{{6218403761266146329ull, 5800810199005727923ull,
+ 16732183231409482270ull, 3412911412551975559ull}},
+{{3161318683155295008ull, 16474384785611935712ull,
+ 16303543020834464933ull, 4266139265689969449ull}},
+{{1975824176972059380ull, 12602333500221153772ull,
+ 3272185360380458727ull, 2666337041056230906ull}},
+{{2469780221215074225ull, 11141230856849054311ull,
+ 13313603737330349217ull, 3332921301320288632ull}},
+{{16922283331801006493ull, 91480515779154176ull,
+ 16642004671662936522ull, 4166151626650360790ull}},
+{{10576427082375629058ull, 4668861340789359264ull,
+ 5789566901361947422ull, 2603844766656475494ull}},
+{{13220533852969536323ull, 15059448712841474888ull,
+ 16460330663557210085ull, 3254805958320594367ull}},
+{{16525667316211920403ull, 4989252835769679898ull,
+ 15963727311019124703ull, 4068507447900742959ull}},
+{{14940228091059838156ull, 10035812049997131792ull,
+ 16894858597028034795ull, 2542817154937964349ull}},
+{{228541040115246079ull, 7933079044069026837ull, 7283515191002879782ull,
+ 3178521443672455437ull}},
+{{4897362318571445503ull, 692976768231507738ull,
+ 13716080007180987632ull, 3973151804590569296ull}},
+{{7672537467534541343ull, 433110480144692336ull, 8572550004488117270ull,
+ 2483219877869105810ull}},
+{{9590671834418176679ull, 9764760137035641228ull,
+ 1492315468755370779ull, 3104024847336382263ull}},
+{{11988339793022720849ull, 7594264152867163631ull,
+ 15700452391226377186ull, 3880031059170477828ull}},
+{{14410241398280282387ull, 9358101113969365173ull,
+ 589410707661709933ull, 2425019411981548643ull}},
+{{4177743692568189271ull, 16309312410889094371ull,
+ 14571821439859301128ull, 3031274264976935803ull}},
+{{610493597282848685ull, 1939896439901816348ull,
+ 13603090781396738507ull, 3789092831221169754ull}},
+{{9604930535156556236ull, 17353336339434492881ull,
+ 13113617756800349470ull, 2368183019513231096ull}},
+{{16617849187373083199ull, 12468298387438340293ull,
+ 16392022196000436838ull, 2960228774391538870ull}},
+{{6937253428934190287ull, 6362000947443149559ull,
+ 11266655708145770240ull, 3700285967989423588ull}},
+{{11253312420724950786ull, 3976250592151968474ull,
+ 16265031854445882208ull, 2312678729993389742ull}},
+{{4843268489051412674ull, 4970313240189960593ull,
+ 11107917781202576952ull, 2890848412491737178ull}},
+{{10665771629741653746ull, 6212891550237450741ull,
+ 4661525189648445382ull, 3613560515614671473ull}},
+{{17943900555604455087ull, 16989486474651589234ull,
+ 10438592505487944631ull, 4516950644518339341ull}},
+{{15826623865680172333ull, 17535958074298325127ull,
+ 8829963325143659346ull, 2823094152823962088ull}},
+{{15171593813672827512ull, 12696575556018130601ull,
+ 11037454156429574183ull, 3528867691029952610ull}},
+{{5129434211808870678ull, 11259033426595275348ull,
+ 4573445658682191921ull, 4411084613787440763ull}},
+{{12429268419235319982ull, 119366863980965236ull, 552560527462675999ull,
+ 2756927883617150477ull}},
+{{15536585524044149978ull, 13984266635258370257ull,
+ 5302386677755732902ull, 3446159854521438096ull}},
+{{5585673849773023760ull, 8256961257218187014ull,
+ 6627983347194666128ull, 4307699818151797620ull}},
+{{17326104211390303562ull, 5160600785761366883ull,
+ 13365861628851442138ull, 2692312386344873512ull}},
+{{17045944245810491549ull, 15674123019056484412ull,
+ 16707327036064302672ull, 3365390482931091890ull}},
+{{2860686233553562820ull, 1145909700111053900ull,
+ 11660786758225602533ull, 4206738103663864863ull}},
+{{11011300932825752570ull, 3022036571783102639ull,
+ 14205520751532083439ull, 2629211314789915539ull}},
+{{9152440147604802809ull, 17612603770011042011ull,
+ 13145214920987716394ull, 3286514143487394424ull}},
+{{6828864166078615607ull, 12792382675659026706ull,
+ 16431518651234645493ull, 4108142679359243030ull}},
+{{8879726122226522659ull, 10301082181500585643ull,
+ 5658013138594265529ull, 2567589174599526894ull}},
+{{6487971634355765419ull, 17488038745303119958ull,
+ 16295888460097607719ull, 3209486468249408617ull}},
+{{17333336579799482582ull, 17248362413201512043ull,
+ 6534802519839845937ull, 4011858085311760772ull}},
+{{8527492353160982662ull, 3862697480609863171ull,
+ 13307623611754679519ull, 2507411303319850482ull}},
+{{6047679423023840423ull, 216685832334941060ull, 7411157477838573591ull,
+ 3134264129149813103ull}},
+{{7559599278779800529ull, 14105915345700840037ull,
+ 4652260828870829084ull, 3917830161437266379ull}},
+{{7030592558451069283ull, 18039569127917800831ull,
+ 601820008830574225ull, 2448643850898291487ull}},
+{{4176554679636448699ull, 8714403354615087327ull,
+ 14587333066320381494ull, 3060804813622864358ull}},
+{{609007331118172970ull, 1669632156414083351ull, 9010794296045701060ull,
+ 3826006017028580448ull}},
+{{7298158609589939962ull, 10266892134613577902ull,
+ 5631746435028563162ull, 2391253760642862780ull}},
+{{18346070298842200761ull, 3610243131412196569ull,
+ 7039683043785703953ull, 2989067200803578475ull}},
+{{9097529818270587239ull, 9124489932692633616ull,
+ 4187917786304742037ull, 3736334001004473094ull}},
+{{5685956136419117025ull, 8008649217146589962ull,
+ 16452506671722627485ull, 2335208750627795683ull}},
+{{16330817207378672089ull, 14622497539860625356ull,
+ 15953947321225896452ull, 2919010938284744604ull}},
+{{1966777435513788495ull, 18278121924825781696ull,
+ 1495690077822818949ull, 3648763672855930756ull}},
+{{2458471794392235618ull, 9012594350750063408ull,
+ 1869612597278523687ull, 4560954591069913445ull}},
+{{1536544871495147261ull, 12550400496859871486ull,
+ 3474350882512771256ull, 2850596619418695903ull}},
+{{11144053126223709885ull, 15688000621074839357ull,
+ 18177996658423127782ull, 3563245774273369878ull}},
+{{95008352497473644ull, 10386628739488773389ull,
+ 13499123786174133920ull, 4454057217841712348ull}},
+{{2365223229524614980ull, 6491642962180483368ull,
+ 17660324403213609508ull, 2783785761151070217ull}},
+{{2956529036905768724ull, 8114553702725604210ull,
+ 8240347448734848173ull, 3479732201438837772ull}},
+{{12919033332986986713ull, 14754878146834393166ull,
+ 10300434310918560216ull, 4349665251798547215ull}},
+{{3462709814689478792ull, 9221798841771495729ull,
+ 13355300471965181991ull, 2718540782374092009ull}},
+{{8940073286789236394ull, 6915562533786981757ull,
+ 2859067534674313777ull, 3398175977967615012ull}},
+{{15786777626913933396ull, 13256139185661115100ull,
+ 3573834418342892221ull, 4247719972459518765ull}},
+{{643363979966432565ull, 10590930000251890890ull,
+ 4539489520678001590ull, 2654824982787199228ull}},
+{{10027577011812816514ull, 4015290463460087804ull,
+ 5674361900847501988ull, 3318531228483999035ull}},
+{{12534471264766020642ull, 5019113079325109755ull,
+ 2481266357631989581ull, 4148164035604998794ull}},
+{{5528201531265068950ull, 5442788683791887549ull,
+ 6162477491947381392ull, 2592602522253124246ull}},
+{{11521937932508724091ull, 6803485854739859436ull,
+ 16926468901789002548ull, 3240753152816405307ull}},
+{{14402422415635905113ull, 8504357318424824295ull,
+ 16546400108808865281ull, 4050941441020506634ull}},
+{{15919043037413522552ull, 16844438370083984944ull,
+ 14953186086432928704ull, 2531838400637816646ull}},
+{{1452059723057351574ull, 2608803888895429565ull,
+ 9468110571186385073ull, 3164798000797270808ull}},
+{{6426760672249077371ull, 7872690879546674860ull,
+ 11835138213982981341ull, 3955997500996588510ull}},
+{{13240097457010449165ull, 7226274808930365739ull,
+ 2785275365311975434ull, 2472498438122867819ull}},
+{{11938435802835673552ull, 18256215548017732982ull,
+ 17316652261922133004ull, 3090623047653584773ull}},
+{{5699672716689816132ull, 4373525361312614612ull,
+ 7810757272120502544ull, 3863278809566980967ull}},
+{{12785667484785910891ull, 2733453350820384132ull,
+ 11799252322716395946ull, 2414549255979363104ull}},
+{{15982084355982388614ull, 12640188725380255973ull,
+ 14749065403395494932ull, 3018186569974203880ull}},
+{{6142547389695822055ull, 15800235906725319967ull,
+ 18436331754244368665ull, 3772733212467754850ull}},
+{{10756621146200970640ull, 2957618414062243123ull,
+ 16134393364830118320ull, 2357958257792346781ull}},
+{{8834090414323825396ull, 3697023017577803904ull,
+ 6332933650755484188ull, 2947447822240433477ull}},
+{{11042613017904781745ull, 4621278771972254880ull,
+ 12527853081871743139ull, 3684309777800541846ull}},
+{{13803266272380977182ull, 1164912446537930696ull,
+ 6436444315484903116ull, 4605387222250677308ull}},
+{{8627041420238110739ull, 9951442315940982493ull,
+ 13246149734032840255ull, 2878367013906673317ull}},
+{{15395487793725026327ull, 7827616876498840212ull,
+ 2722629112258886607ull, 3597958767383341647ull}},
+{{797615668446731293ull, 5172835077196162362ull,
+ 17238344445605771971ull, 4497448459229177058ull}},
+{{5110195811206594962ull, 927178914033907524ull,
+ 15385651296930995386ull, 2810905287018235661ull}},
+{{6387744764008243703ull, 10382345679397160213ull,
+ 5397006065881580520ull, 3513631608772794577ull}},
+{{12596366973437692532ull, 12977932099246450266ull,
+ 11357943600779363554ull, 4392039510965993221ull}},
+{{12484415376825945737ull, 12722893580456419320ull,
+ 9404557759700796173ull, 2745024694353745763ull}},
+{{15605519221032432171ull, 2068558920288360438ull,
+ 7144011181198607313ull, 3431280867942182204ull}},
+{{10283526989435764406ull, 7197384668787838452ull,
+ 8930013976498259141ull, 4289101084927727755ull}},
+{{15650576405252128562ull, 6804208427206092984ull,
+ 3275415726097718011ull, 2680688178079829847ull}},
+{{1116476432855609086ull, 3893574515580228327ull,
+ 17929327712904311226ull, 3350860222599787308ull}},
+{{15230653596351675069ull, 14090340181330061216ull,
+ 3964915567420837416ull, 4188575278249734136ull}},
+{{9519158497719796919ull, 8806462613331288260ull,
+ 2478072229638023385ull, 2617859548906083835ull}},
+{{11898948122149746148ull, 15619764285091498229ull,
+ 16932648342329692943ull, 3272324436132604793ull}},
+{{1038627097405018973ull, 14913019337936984883ull,
+ 7330752372629952467ull, 4090405545165755992ull}},
+{{16790043000373994522ull, 7014794076996921599ull,
+ 4581720232893720292ull, 2556503465728597495ull}},
+{{16375867732040105249ull, 8768492596246151999ull,
+ 1115464272689762461ull, 3195629332160746869ull}},
+{{15858148646622743657ull, 15572301763735077903ull,
+ 6006016359289590980ull, 3994536665200933586ull}},
+{{16828871931780296642ull, 509316565479647881ull,
+ 8365446242983382267ull, 2496585415750583491ull}},
+{{7201031859443207090ull, 14471703762131723564ull,
+ 5845121785301839929ull, 3120731769688229364ull}},
+{{9001289824304008862ull, 4254571647382490743ull,
+ 7306402231627299912ull, 3900914712110286705ull}},
+{{12543335167831087395ull, 2659107279614056714ull,
+ 16095716440835532205ull, 2438071695068929190ull}},
+{{6455796922934083436ull, 7935570117944958797ull,
+ 10896273514189639448ull, 3047589618836161488ull}},
+{{12681432172094992199ull, 9919462647431198496ull,
+ 13620341892737049310ull, 3809487023545201860ull}},
+{{7925895107559370124ull, 1587978136217111156ull,
+ 17736085719815431627ull, 2380929389715751162ull}},
+{{9907368884449212655ull, 15820030725553552657ull,
+ 12946735112914513725ull, 2976161737144688953ull}},
+{{16995897123988903723ull, 5939980351659777109ull,
+ 2348360835860978445ull, 3720202171430861192ull}},
+{{12928278711706758779ull, 6018330729001054645ull,
+ 1467725522413111528ull, 2325126357144288245ull}},
+{{2325290334351284762ull, 7522913411251318307ull,
+ 6446342921443777314ull, 2906407946430360306ull}},
+{{16741670973221269664ull, 180269727209372075ull,
+ 17281300688659497451ull, 3633009933037950382ull}},
+{{16315402698099199176ull, 14060395214293878806ull,
+ 12378253823969596005ull, 4541262416297437978ull}},
+{{5585440667884611581ull, 11093590018147368206ull,
+ 12348094658408385407ull, 2838289010185898736ull}},
+{{16205172871710540284ull, 9255301504256822353ull,
+ 15435118323010481759ull, 3547861262732373420ull}},
+{{6421408034356011643ull, 6957440861893640038ull, 847153830053550583ull,
+ 4434826578415466776ull}},
+{{17848438076754670989ull, 11265929566324606879ull,
+ 529471143783469114ull, 2771766611509666735ull}},
+{{17698861577515950832ull, 4859039921050982791ull,
+ 14496896985011500105ull, 3464708264387083418ull}},
+{{17511890953467550636ull, 10685485919741116393ull,
+ 8897749194409599323ull, 4330885330483854273ull}},
+{{4027402818276137292ull, 4372585690624503794ull,
+ 17090308292574469337ull, 2706803331552408920ull}},
+{{14257625559699947423ull, 10077418131708017646ull,
+ 2916141292008535055ull, 3383504164440511151ull}},
+{{8598659912770158470ull, 7985086646207634154ull,
+ 17480234670292832531ull, 4229380205550638938ull}},
+{{9985848463908736948ull, 2684836144666077394ull,
+ 15536832687360408236ull, 2643362628469149336ull}},
+{{3258938543031145377ull, 3356045180832596743ull, 974296785490958679ull,
+ 3304203285586436671ull}},
+{{17908731234071095433ull, 18030114531322909640ull,
+ 15052929037145862060ull, 4130254106983045838ull}},
+{{11192957021294434646ull, 2045449545222042717ull,
+ 4796394629788775884ull, 2581408816864403649ull}},
+{{156138221335879595ull, 2556811931527553397ull,
+ 10607179305663357759ull, 3226761021080504561ull}},
+{{4806858795097237398ull, 17031072969691605458ull,
+ 17870660150506585102ull, 4033451276350630701ull}},
+{{7615972765363161278ull, 6032734587629865507ull,
+ 13475005603280309641ull, 2520907047719144188ull}},
+{{4908279938276563693ull, 12152604252964719788ull,
+ 16843757004100387051ull, 3151133809648930235ull}},
+{{6135349922845704616ull, 10579069297778511831ull,
+ 16443010236698095910ull, 3938917262061162794ull}},
+{{10752122729419647241ull, 2000232292684181990ull,
+ 14888567416363697848ull, 2461823288788226746ull}},
+{{4216781374919783244ull, 2500290365855227488ull,
+ 9387337233599846502ull, 3077279110985283433ull}},
+{{5270976718649729054ull, 12348734994173810168ull,
+ 16345857560427196031ull, 3846598888731604291ull}},
+{{3294360449156080659ull, 14635488398999713211ull,
+ 7910317966053303567ull, 2404124305457252682ull}},
+{{17953008616727264536ull, 13682674480322253609ull,
+ 664525420711853651ull, 3005155381821565853ull}},
+{{8606202715626916958ull, 12491657081975429108ull,
+ 5442342794317204968ull, 3756444227276957316ull}},
+{{14602248734121598907ull, 7807285676234643192ull,
+ 12624836283303028913ull, 2347777642048098322ull}},
+{{18252810917651998633ull, 14370793113720691894ull,
+ 6557673317274010333ull, 2934722052560122903ull}},
+{{13592641610210222484ull, 4128433336868701156ull,
+ 3585405628165125013ull, 3668402565700153629ull}},
+{{16990802012762778104ull, 9772227689513264349ull,
+ 9093443053633794170ull, 4585503207125192036ull}},
+{{12925094267190430267ull, 10719328324373178122ull,
+ 14906773945375897164ull, 2865939504453245022ull}},
+{{6932995797133262026ull, 13399160405466472653ull,
+ 9410095394865095647ull, 3582424380566556278ull}},
+{{13277930764843965437ull, 12137264488405702912ull,
+ 2539247206726593751ull, 4478030475708195348ull}},
+{{8298706728027478398ull, 14503319332894646176ull,
+ 10810401541058896902ull, 2798769047317622092ull}},
+{{10373383410034347997ull, 8905777129263531912ull,
+ 13513001926323621128ull, 3498461309147027615ull}},
+{{12966729262542934997ull, 11132221411579414890ull,
+ 12279566389477138506ull, 4373076636433784519ull}},
+{{12715891807516722277ull, 11569324400664522210ull,
+ 14592258021064293422ull, 2733172897771115324ull}},
+{{6671492722541127038ull, 5238283463975876955ull,
+ 18240322526330366778ull, 3416466122213894155ull}},
+{{3727679884749020894ull, 15771226366824622002ull,
+ 18188717139485570568ull, 4270582652767367694ull}},
+{{6941485946395525963ull, 9857016479265388751ull,
+ 6756262193751093701ull, 2669114157979604809ull}},
+{{4065171414567019549ull, 16932956617509123843ull,
+ 13057013760616255030ull, 3336392697474506011ull}},
+{{469778249781386533ull, 11942823735031628996ull,
+ 11709581182342930884ull, 4170490871843132514ull}},
+{{9516983442968142391ull, 16687636871249543930ull,
+ 11930174257391719706ull, 2606556794901957821ull}},
+{{2672857266855402181ull, 11636174052207154105ull,
+ 1077659766457485921ull, 3258195993627447277ull}},
+{{7952757601996640630ull, 710159509976778919ull, 5958760726499245306ull,
+ 4072744992034309096ull}},
+{{11888002528888982250ull, 5055535712162874728ull,
+ 3724225454062028316ull, 2545465620021443185ull}},
+{{14860003161111227812ull, 6319419640203593410ull,
+ 9266967836004923299ull, 3181832025026803981ull}},
+{{9351631914534258957ull, 3287588531827103859ull,
+ 16195395813433542028ull, 3977290031283504976ull}},
+{{3538926937370217896ull, 11278114869246715720ull,
+ 10122122383395963767ull, 2485806269552190610ull}},
+{{4423658671712772370ull, 9485957568131006746ull,
+ 3429280942390178901ull, 3107257836940238263ull}},
+{{14752945376495741271ull, 16469132978591146336ull,
+ 18121659233269887338ull, 3884072296175297828ull}},
+{{9220590860309838294ull, 14904894130046854364ull,
+ 2102664983938903778ull, 2427545185109561143ull}},
+{{11525738575387297868ull, 9407745625703792147ull,
+ 16463389285205793435ull, 3034431481386951428ull}},
+{{9795487200806734431ull, 7147996013702352280ull,
+ 2132492532797690178ull, 3793039351733689286ull}},
+{{6122179500504209019ull, 9079183526991358079ull,
+ 15167865888280720073ull, 2370649594833555803ull}},
+{{3041038357202873370ull, 15960665427166585503ull,
+ 14348146341923512187ull, 2963311993541944754ull}},
+{{17636356001785755424ull, 15339145765530843974ull,
+ 8711810890549614426ull, 3704139991927430943ull}},
+{{6411036482688709236ull, 14198652121884165388ull,
+ 12362410834234590872ull, 2315087494954644339ull}},
+{{8013795603360886545ull, 17748315152355206735ull,
+ 10841327524365850686ull, 2893859368693305424ull}},
+{{5405558485773720278ull, 12962021903589232611ull,
+ 13551659405457313358ull, 3617324210866631780ull}},
+{{2145262088789762443ull, 6979155342631764956ull,
+ 16939574256821641698ull, 4521655263583289725ull}},
+{{10564160842348377335ull, 8973658107572241001ull,
+ 12893076919727220013ull, 2826034539739556078ull}},
+{{17816887071362859573ull, 15828758652892689155ull,
+ 6892974112804249208ull, 3532543174674445098ull}},
+{{17659422820776186562ull, 1339204242406309828ull,
+ 17839589677860087319ull, 4415678968343056372ull}},
+{{1813767226130340793ull, 7754531679145025499ull,
+ 1926371511807778766ull, 2759799355214410233ull}},
+{{16102267087945089703ull, 469792562076506065ull,
+ 7019650408187111362ull, 3449749194018012791ull}},
+{{6292775804649198417ull, 9810612739450408390ull,
+ 4162876991806501298ull, 4312186492522515989ull}},
+{{17768042933187912723ull, 10743318980583893147ull,
+ 4907641129092757263ull, 2695116557826572493ull}},
+{{17598367648057503000ull, 8817462707302478530ull,
+ 10746237429793334483ull, 3368895697283215616ull}},
+{{12774587523217102941ull, 6410142365700710259ull,
+ 13432796787241668104ull, 4211119621604019520ull}},
+{{5678274192796995386ull, 4006338978562943912ull,
+ 8395497992026042565ull, 2631949763502512200ull}},
+{{7097842740996244233ull, 9619609741631067794ull,
+ 10494372490032553206ull, 3289937204378140250ull}},
+{{18095675463100081099ull, 2801140140184058934ull,
+ 3894593575685915700ull, 4112421505472675313ull}},
+{{6698111146010162783ull, 10974084624469812642ull,
+ 13963336030872167072ull, 2570263440920422070ull}},
+{{17596010969367479287ull, 13717605780587265802ull,
+ 8230798001735433032ull, 3212829301150527588ull}},
+{{12771641674854573300ull, 17147007225734082253ull,
+ 10288497502169291290ull, 4016036626438159485ull}},
+{{10288119055997802265ull, 15328565534511189312ull,
+ 8736153948069501008ull, 2510022891523849678ull}},
+{{12860148819997252831ull, 713962844429435024ull,
+ 1696820398232100453ull, 3137528614404812098ull}},
+{{16075186024996566039ull, 5504139573964181684ull,
+ 11344397534644901374ull, 3921910768006015122ull}},
+{{823619228768077966ull, 17275145289009777265ull,
+ 11701934477580451262ull, 2451194230003759451ull}},
+{{5641210054387485362ull, 12370559574407445773ull,
+ 10015732078548176174ull, 3063992787504699314ull}},
+{{11663198586411744606ull, 6239827431154531408ull,
+ 3296293061330444410ull, 3829990984380874143ull}},
+{{7289499116507340379ull, 8511578162898970034ull,
+ 8977712190972609612ull, 2393744365238046339ull}},
+{{18335245932488951282ull, 10639472703623712542ull,
+ 6610454220288374111ull, 2992180456547557924ull}},
+{{13695685378756413294ull, 8687654861102252774ull,
+ 8263067775360467639ull, 3740225570684447405ull}},
+{{3948117343295370405ull, 12347313315829989840ull,
+ 7470260368813986226ull, 2337640981677779628ull}},
+{{4935146679119213006ull, 6210769607932711492ull,
+ 9337825461017482783ull, 2922051227097224535ull}},
+{{6168933348899016257ull, 3151775991488501461ull,
+ 7060595807844465575ull, 3652564033871530669ull}},
+{{12322852704551158226ull, 17774778044642790538ull,
+ 13437430778232969872ull, 4565705042339413336ull}},
+{{12313468958771861795ull, 11109236277901744086ull,
+ 8398394236395606170ull, 2853565651462133335ull}},
+{{6168464161610051436ull, 4663173310522404300ull,
+ 5886306777067119809ull, 3566957064327666669ull}},
+{{7710580202012564295ull, 10440652656580393279ull,
+ 11969569489761287665ull, 4458696330409583336ull}},
+{{11736641653898934540ull, 18054622956431215559ull,
+ 7480980931100804790ull, 2786685206505989585ull}},
+{{10059116048946280271ull, 13344906658684243641ull,
+ 13962912182303393892ull, 3483356508132486981ull}},
+{{17185581079610238243ull, 16681133323355304551ull,
+ 3618582172597078653ull, 4354195635165608727ull}},
+{{17658517202397480758ull, 12731551336310759296ull,
+ 9179142885514256014ull, 2721372271978505454ull}},
+{{3626402429287299331ull, 6691067133533673313ull,
+ 2250556570038044210ull, 3401715339973131818ull}},
+{{9144689055036512068ull, 17587205953771867449ull,
+ 12036567749402331070ull, 4252144174966414772ull}},
+{{17244645705466289803ull, 6380317702680029251ull,
+ 16746226880231232727ull, 2657590109354009232ull}},
+{{16944121113405474349ull, 3363711109922648660ull,
+ 2486039526579489293ull, 3321987636692511541ull}},
+{{2733407318047291321ull, 8816324905830698730ull,
+ 7719235426651749520ull, 4152484545865639426ull}},
+{{6320065592206944980ull, 5510203066144186706ull,
+ 9436208160084731354ull, 2595302841166024641ull}},
+{{17123454027113457032ull, 16111125869535009190ull,
+ 16406946218533302096ull, 3244128551457530801ull}},
+{{12180945497037045482ull, 1692163263209209872ull,
+ 6673624717884463909ull, 4055160689321913502ull}},
+{{7613090935648153427ull, 3363445048719450122ull,
+ 18006073503959953655ull, 2534475430826195938ull}},
+{{292991632705415975ull, 18039364366181476365ull,
+ 13284219843095166260ull, 3168094288532744923ull}},
+{{4977925559309157873ull, 4102461384017293840ull,
+ 11993588785441569922ull, 3960117860665931154ull}},
+{{3111203474568223671ull, 7175724383438196554ull,
+ 12107679009328369105ull, 2475073662916206971ull}},
+{{13112376380065055396ull, 13581341497725133596ull,
+ 10522912743233073477ull, 3093842078645258714ull}},
+{{16390470475081319245ull, 3141618816874253283ull,
+ 3930268892186566039ull, 3867302598306573393ull}},
+{{7938201037712130576ull, 8881040788187490158ull,
+ 13985633103685073534ull, 2417064123941608370ull}},
+{{699379260285387412ull, 1877928948379586890ull, 8258669342751566110ull,
+ 3021330154927010463ull}},
+{{10097596112211510073ull, 11570783222329259420ull,
+ 5711650660012069733ull, 3776662693658763079ull}},
+{{15534369606986969604ull, 9537582523169481089ull,
+ 10487310690148625439ull, 2360414183536726924ull}},
+{{5582903953451548293ull, 7310292135534463458ull,
+ 13109138362685781799ull, 2950517729420908655ull}},
+{{16202001978669211174ull, 4526179150990691418ull,
+ 11774736934929839345ull, 3688147161776135819ull}},
+{{11029130436481738159ull, 10269409957165752177ull,
+ 10106735150234911277ull, 4610183952220169774ull}},
+{{18422421568869556110ull, 8724224232442289062ull,
+ 1705023450469431644ull, 2881364970137606109ull}},
+{{13804654924232169329ull, 10905280290552861328ull,
+ 6742965331514177459ull, 3601706212672007636ull}},
+{{17255818655290211661ull, 9019914344763688756ull,
+ 8428706664392721824ull, 4502132765840009545ull}},
+{{1561514622701606481ull, 5637446465477305473ull,
+ 16797156711313920900ull, 2813832978650005965ull}},
+{{6563579296804396005ull, 7046808081846631841ull,
+ 7161387833860237413ull, 3517291223312507457ull}},
+{{12816160139432882910ull, 13420196120735677705ull,
+ 13563420810752684670ull, 4396614029140634321ull}},
+{{1092571059504469963ull, 3775936557032410662ull,
+ 1559608979079346063ull, 2747883768212896451ull}},
+{{10589085861235363261ull, 108234677863125423ull,
+ 15784569279131346291ull, 3434854710266120563ull}},
+{{8624671308116816172ull, 13970351402611070491ull,
+ 15119025580486794959ull, 4293568387832650704ull}},
+{{3084576558359316156ull, 15648998654273000913ull,
+ 9449390987804246849ull, 2683480242395406690ull}},
+{{8467406716376533099ull, 5726190262559087429ull,
+ 2588366697900532754ull, 3354350302994258363ull}},
+{{15195944413898054277ull, 16381109865053635094ull,
+ 17070516427657829654ull, 4192937878742822953ull}},
+{{4885779240258896020ull, 5626507647231134030ull,
+ 3751543739645061678ull, 2620586174214264346ull}},
+{{15330596087178395832ull, 16256506595893693345ull,
+ 13912801711411102905ull, 3275732717767830432ull}},
+{{5328187053690831078ull, 6485575189584952970ull,
+ 17391002139263878632ull, 4094665897209788040ull}},
+{{7941802926984157328ull, 4053484493490595606ull,
+ 10869376337039924145ull, 2559166185756117525ull}},
+{{703881621875420852ull, 9678541635290632412ull,
+ 18198406439727293085ull, 3198957732195146906ull}},
+{{879852027344276065ull, 16709863062540678419ull,
+ 13524636012804340548ull, 3998697165243933633ull}},
+{{16690808581586030205ull, 1220292377233148203ull,
+ 1535368480361630987ull, 2499185728277458521ull}},
+{{16251824708555149852ull, 15360423526823598966ull,
+ 6530896618879426637ull, 3123982160346823151ull}},
+{{11091408848839161507ull, 5365471353247334996ull,
+ 3551934755171895393ull, 3904977700433528939ull}},
+{{16155502567379251750ull, 14882634641848054132ull,
+ 18360860286478292284ull, 2440611062770955586ull}},
+{{1747634135514513071ull, 156549228600516050ull,
+ 13727703321243089548ull, 3050763828463694483ull}},
+{{11407914706247917147ull, 195686535750645062ull,
+ 12547943133126474031ull, 3813454785579618104ull}},
+{{2518260672977560313ull, 7039833112485235020ull,
+ 7842464458204046269ull, 2383409240987261315ull}},
+{{3147825841221950391ull, 13411477409033931679ull,
+ 5191394554327669932ull, 2979261551234076644ull}},
+{{17769840356809601701ull, 16764346761292414598ull,
+ 6489243192909587415ull, 3724076939042595805ull}},
+{{6494464204578613159ull, 17395245753448840980ull,
+ 6361620004782186086ull, 2327548086901622378ull}},
+{{8118080255723266449ull, 12520685154956275417ull,
+ 17175397042832508416ull, 2909435108627027972ull}},
+{{14759286338081470965ull, 15650856443695344271ull,
+ 3022502229831083904ull, 3636793885783784966ull}},
+{{13837421904174450802ull, 1116826480909628723ull,
+ 13001499824143630689ull, 4545992357229731207ull}},
+{{6342545680895337799ull, 12227231596636987712ull,
+ 15043466417730851036ull, 2841245223268582004ull}},
+{{7928182101119172249ull, 15284039495796234640ull,
+ 357588948454012179ull, 3551556529085727506ull}},
+{{9910227626398965311ull, 14493363351317905396ull,
+ 9670358222422291032ull, 4439445661357159382ull}},
+{{15417264303354129128ull, 9058352094573690872ull,
+ 1432287870586543991ull, 2774653538348224614ull}},
+{{824836305483109794ull, 6711254099789725687ull,
+ 11013731875087955797ull, 3468316922935280767ull}},
+{{14866103437136050954ull, 13000753643164545012ull,
+ 9155478825432556842ull, 4335396153669100959ull}},
+{{67942611355256038ull, 12737157045405228537ull,
+ 12639703293536429882ull, 2709622596043188099ull}},
+{{4696614282621457952ull, 6698074269901759863ull,
+ 11187943098493149449ull, 3387028245053985124ull}},
+{{1259081834849434536ull, 12984278855804587733ull,
+ 13984928873116436811ull, 4233785306317481405ull}},
+{{3092769155994590537ull, 5809331275664173381ull,
+ 11046423554911466959ull, 2646115816448425878ull}},
+{{8477647463420626075ull, 2649978076152828822ull,
+ 4584657406784557891ull, 3307644770560532348ull}},
+{{1373687292421006786ull, 17147530650473199740ull,
+ 5730821758480697363ull, 4134555963200665435ull}},
+{{10081926594617905049ull, 8411363647332055885ull,
+ 1275920589836741900ull, 2584097477000415897ull}},
+{{17214094261699769215ull, 10514204559165069856ull,
+ 6206586755723315279ull, 3230121846250519871ull}},
+{{3070873753415159903ull, 8531069680528949417ull,
+ 3146547426226756195ull, 4037652307813149839ull}},
+{{13448511141952944700ull, 3026075541116899433ull,
+ 8884121169032804478ull, 2523532692383218649ull}},
+{{2975580872159017162ull, 13005966463250900100ull,
+ 15716837479718393501ull, 3154415865479023311ull}},
+{{3719476090198771453ull, 2422400023781461413ull,
+ 15034360831220603973ull, 3943019831848779139ull}},
+{{4630515565587926110ull, 3819843024077107335ull,
+ 7090632510299183531ull, 2464387394905486962ull}},
+{{1176458438557519734ull, 163117761668996265ull,
+ 18086662674728755222ull, 3080484243631858702ull}},
+{{6082259066624287571ull, 9427269238941021139ull,
+ 13384956306556168219ull, 3850605304539823378ull}},
+{{1495568907426485780ull, 3586200265124444260ull,
+ 12977283710024993041ull, 2406628315337389611ull}},
+{{1869461134283107225ull, 9094436349832943229ull,
+ 11609918619103853397ull, 3008285394171737014ull}},
+{{6948512436281271935ull, 15979731455718566940ull,
+ 5289026237025040938ull, 3760356742714671268ull}},
+{{13566192309530570768ull, 14599018178251492241ull,
+ 12529013434995426394ull, 2350222964196669542ull}},
+{{3122682331631049747ull, 9025400685959589494ull,
+ 6437894756889507185ull, 2937778705245836928ull}},
+{{13126724951393587992ull, 15893436875876874771ull,
+ 8047368446111883981ull, 3672223381557296160ull}},
+{{11796720170814597086ull, 6031738039563929752ull,
+ 10059210557639854977ull, 4590279226946620200ull}},
+{{7372950106759123179ull, 15299051320795925855ull,
+ 6287006598524909360ull, 2868924516841637625ull}},
+{{4604501615021516070ull, 677070077285355703ull,
+ 12470444266583524605ull, 3586155646052047031ull}},
+{{1143941000349507183ull, 5458023615034082533ull,
+ 10976369314802017852ull, 4482694557565058789ull}},
+{{3020806134432135941ull, 12634636796251077391ull,
+ 9166073830964955109ull, 2801684098478161743ull}},
+{{17611065723322333639ull, 1958237940031683026ull,
+ 6845906270278805983ull, 3502105123097702179ull}},
+{{12790460117298141240ull, 16282855480321767495ull,
+ 3945696819421119574ull, 4377631403872127724ull}},
+{{14911566600952420131ull, 5565098656773716780ull,
+ 11689432548992975542ull, 2736019627420079827ull}},
+{{192714177480973548ull, 16179745357821921784ull,
+ 10000104667813831523ull, 3420024534275099784ull}},
+{{240892721851216935ull, 15612995678850014326ull,
+ 12500130834767289404ull, 4275030667843874730ull}},
+{{13985616006439174297ull, 534750262426483145ull,
+ 12424267790156943782ull, 2671894167402421706ull}},
+{{3646961952766804159ull, 9891809864887879740ull,
+ 6306962700841403919ull, 3339867709253027133ull}},
+{{4558702440958505198ull, 7753076312682461771ull,
+ 12495389394479142803ull, 4174834636566283916ull}},
+{{543346016385371797ull, 2539829686212844655ull,
+ 17032990408404240060ull, 2609271647853927447ull}},
+{{14514240575763878458ull, 3174787107766055818ull,
+ 16679551992077912171ull, 3261589559817409309ull}},
+{{8919428682850072264ull, 17803541939989733485ull,
+ 7014381934815226501ull, 4076986949771761637ull}},
+{{7880485935994989117ull, 13433056721707277380ull,
+ 6689831718473210515ull, 2548116843607351023ull}},
+{{9850607419993736397ull, 12179634883706708821ull,
+ 3750603629664125240ull, 3185146054509188779ull}},
+{{16924945293419558400ull, 15224543604633386026ull,
+ 76568518652768646ull, 3981432568136485974ull}},
+{{15189776826814611904ull, 4903653734468478362ull,
+ 13882913379440144116ull, 2488395355085303733ull}},
+{{9763848996663489072ull, 6129567168085597953ull,
+ 3518583669018016433ull, 3110494193856629667ull}},
+{{16816497264256749244ull, 12273644978534385345ull,
+ 18233287641554684253ull, 3888117742320787083ull}},
+{{3592781762519386422ull, 9976871120797684793ull,
+ 9089961766757983706ull, 2430073588950491927ull}},
+{{9102663221576620931ull, 3247716864142330183ull,
+ 6750766190020091729ull, 3037591986188114909ull}},
+{{6766643008543388259ull, 8671332098605300633ull,
+ 13050143755952502565ull, 3796989982735143636ull}},
+{{15758366926408087422ull, 7725425570842006847ull,
+ 17379711884325089911ull, 2373118739209464772ull}},
+{{15086272639582721374ull, 5045095945125120655ull,
+ 3277895781696810773ull, 2966398424011830966ull}},
+{{14246154781051013813ull, 10918055949833788723ull,
+ 13320741763975789274ull, 3707998030014788707ull}},
+{{6598003728943189681ull, 11435470987073505856ull,
+ 6019620593271174344ull, 2317498768759242942ull}},
+{{8247504661178987102ull, 14294338733841882320ull,
+ 16747897778443743738ull, 2896873460949053677ull}},
+{{10309380826473733877ull, 8644551380447577092ull,
+ 7099814167772515961ull, 3621091826186317097ull}},
+{{12886726033092167346ull, 15417375243986859269ull,
+ 13486453728143032855ull, 4526364782732896371ull}},
+{{10360046779896298543ull, 16553388555132868899ull,
+ 6123190570875701582ull, 2828977989208060232ull}},
+{{8338372456442985275ull, 11468363657061310316ull,
+ 7653988213594626978ull, 3536222486510075290ull}},
+{{10422965570553731594ull, 5112082534471862087ull,
+ 344113230138507915ull, 4420278108137594113ull}},
+{{13431882509237164102ull, 889208574831219852ull,
+ 11744285814905037207ull, 2762673817585996320ull}},
+{{16789853136546455128ull, 14946568773821188527ull,
+ 14680357268631296508ull, 3453342271982495400ull}},
+{{16375630402255681006ull, 236466893566934043ull,
+ 18350446585789120636ull, 4316677839978119250ull}},
+{{7928925992196106677ull, 9371163845334109585ull,
+ 16080715134545588301ull, 2697923649986324531ull}},
+{{14522843508672521250ull, 16325640825095024885ull,
+ 15489207899754597472ull, 3372404562482905664ull}},
+{{4318496330558487850ull, 1960306957659229491ull, 914765800983695225ull,
+ 4215505703103632081ull}},
+{{393217197385360954ull, 12754406894605488192ull,
+ 12100943671683279275ull, 2634691064439770050ull}},
+{{491521496731701193ull, 11331322599829472336ull,
+ 5902807552749323286ull, 3293363830549712563ull}},
+{{614401870914626491ull, 4940781212932064612ull, 2766823422509266204ull,
+ 4116704788187140704ull}},
+{{9607373206176417365ull, 12311360294937316190ull,
+ 1729264639068291377ull, 2572940492616962940ull}},
+{{2785844470865745898ull, 1554142313389481526ull,
+ 2161580798835364222ull, 3216175615771203675ull}},
+{{12705677625436958181ull, 11166049928591627715ull,
+ 16537034053826368989ull, 4020219519714004593ull}},
+{{5635205506684404911ull, 9284624214583461274ull,
+ 3418117256000398762ull, 2512637199821252871ull}},
+{{16267378920210281947ull, 2382408231374550784ull,
+ 18107704625282662165ull, 3140796499776566088ull}},
+{{1887479576553300817ull, 7589696307645576385ull,
+ 4187886707893776090ull, 3925995624720707611ull}},
+{{12708889781414282771ull, 9355246210705873144ull,
+ 311586183219916104ull, 2453747265450442257ull}},
+{{15886112226767853464ull, 11694057763382341430ull,
+ 5001168747452283034ull, 3067184081813052821ull}},
+{{10634268246605041021ull, 5394200167373150980ull,
+ 10863146952742741697ull, 3833980102266316026ull}},
+{{15869789690982926447ull, 14900590150676689122ull,
+ 11401152863891601464ull, 2396237563916447516ull}},
+{{10613865076873882250ull, 178993614636309787ull,
+ 14251441079864501831ull, 2995296954895559395ull}},
+{{8655645327664964908ull, 14058800073577550946ull,
+ 13202615331403239384ull, 3744121193619449244ull}},
+{{10021464348217990972ull, 8786750045985969341ull,
+ 17475006618981800423ull, 2340075746012155777ull}},
+{{17138516453699876619ull, 6371751539055073772ull,
+ 8008700218445086817ull, 2925094682515194722ull}},
+{{2976401493415294157ull, 12576375442246230120ull,
+ 787503236201582713ull, 3656368353143993403ull}},
+{{3720501866769117697ull, 1885411247525623938ull,
+ 14819437100534142104ull, 4570460441429991753ull}},
+{{6936999685158086465ull, 1178382029703514961ull,
+ 2344619160192756959ull, 2856537775893744846ull}},
+{{13282935624874995985ull, 15308035592411557413ull,
+ 12154145987095722006ull, 3570672219867181057ull}},
+{{2768611475811581269ull, 9911672453659670959ull,
+ 1357624428587488796ull, 4463340274833976322ull}},
+{{8647911200023320149ull, 15418167320392070157ull,
+ 5460201286294568401ull, 2789587671771235201ull}},
+{{15421575018456538090ull, 5437651095207923984ull,
+ 11436937626295598406ull, 3486984589714044001ull}},
+{{830224699361120997ull, 16020435905864680789ull, 461113977587334295ull,
+ 4358730737142555002ull}},
+{{2824733446314394575ull, 16930301468806507349ull,
+ 4899882254419471838ull, 2724206710714096876ull}},
+{{8142602826320381123ull, 11939504799153358378ull,
+ 6124852818024339798ull, 3405258388392621095ull}},
+{{954881496045700595ull, 5701008962086922165ull, 3044380004103036844ull,
+ 4256572985490776369ull}},
+{{2902643944242256824ull, 12786502638159102161ull,
+ 13431952548632867787ull, 2660358115931735230ull}},
+{{8239990948730208934ull, 11371442279271489797ull,
+ 7566568648936308926ull, 3325447644914669038ull}},
+{{14911674704340149072ull, 4990930812234586438ull,
+ 234838774315610350ull, 4156809556143336298ull}},
+{{4708110671785205266ull, 16954389812928780236ull,
+ 4758460252374644372ull, 2598005972589585186ull}},
+{{5885138339731506582ull, 2746243192451423679ull,
+ 15171447352323081274ull, 3247507465736981482ull}},
+{{2744736906236995324ull, 12656176027419055407ull,
+ 9740937153549075784ull, 4059384332171226853ull}},
+{{8632989594039203934ull, 7910110017136909629ull,
+ 8393928730181866317ull, 2537115207607016783ull}},
+{{15402923010976392821ull, 14499323539848524940ull,
+ 5880724894299944992ull, 3171394009508770979ull}},
+{{806909690010939410ull, 18124154424810656176ull,
+ 2739220099447543336ull, 3964242511885963724ull}},
+{{504318556256837131ull, 11327596515506660110ull,
+ 10935384599009490393ull, 2477651569928727327ull}},
+{{9853770232175822222ull, 324437589101161425ull, 9057544730334475088ull,
+ 3097064462410909159ull}},
+{{16928898808647165682ull, 405546986376451781ull,
+ 6710244894490705956ull, 3871330578013636449ull}},
+{{12886404764618172503ull, 9476838903340058171ull,
+ 15723118105125160982ull, 2419581611258522780ull}},
+{{11496319937345327725ull, 2622676592320296906ull,
+ 1207153557696899612ull, 3024477014073153476ull}},
+{{5147027884826883848ull, 3278345740400371133ull,
+ 1508941947121124515ull, 3780596267591441845ull}},
+{{5522735437230496357ull, 18189867152246089622ull,
+ 3248931726164396773ull, 2362872667244651153ull}},
+{{16126791333392896254ull, 8902275885025448315ull,
+ 8672850676132883871ull, 2953590834055813941ull}},
+{{15546803148313732414ull, 6516158837854422490ull,
+ 15452749363593492743ull, 3691988542569767426ull}},
+{{14328437986123470663ull, 10990128301300095912ull,
+ 14269654370673320868ull, 2307492839106104641ull}},
+{{17910547482654338328ull, 13737660376625119890ull,
+ 4002009908059487373ull, 2884366048882630802ull}},
+{{13164812316463147102ull, 3337017415499236151ull,
+ 14225884421929135025ull, 3605457561103288502ull}},
+{{11844329377151545974ull, 8782957787801433093ull,
+ 8558983490556642973ull, 4506821951379110628ull}},
+{{9708548869933410186ull, 7795191626589589635ull,
+ 14572736718452677666ull, 2816763719611944142ull}},
+{{7524000068989374828ull, 520617496382211236ull, 8992548861211071275ull,
+ 3520954649514930178ull}},
+{{9405000086236718535ull, 14485829925759927757ull,
+ 2017314039659063285ull, 4401193311893662723ull}},
+{{8183968063111643037ull, 11359486712813648800ull,
+ 17401722339282772217ull, 2750745819933539201ull}},
+{{10229960078889553796ull, 364300335734897288ull,
+ 7917094868821301560ull, 3438432274916924002ull}},
+{{12787450098611942244ull, 455375419668621610ull, 672996549171851142ull,
+ 4298040343646155003ull}},
+{{12603842330059851807ull, 14119667692575052218ull,
+ 16561523907728264627ull, 2686275214778846876ull}},
+{{6531430875720038950ull, 13037898597291427369ull,
+ 2255160810950779168ull, 3357844018473558596ull}},
+{{12775974613077436592ull, 16297373246614284211ull,
+ 2818951013688473960ull, 4197305023091948245ull}},
+{{5679141123959703918ull, 10185858279133927632ull,
+ 4067687392768990177ull, 2623315639432467653ull}},
+{{7098926404949629898ull, 17344008867344797444ull,
+ 9696295259388625625ull, 3279144549290584566ull}},
+{{8873658006187037372ull, 7844953028898833093ull,
+ 2896997037381006224ull, 4098930686613230708ull}},
+{{7851879263080592310ull, 4903095643061770683ull,
+ 11033995185217904698ull, 2561831679133269192ull}},
+{{5203163060423352483ull, 15352241590681989162ull,
+ 13792493981522380872ull, 3202289598916586490ull}},
+{{15727325862383966411ull, 743557914642934836ull,
+ 8017245440048200283ull, 4002861998645733113ull}},
+{{606206627135203199ull, 16605624761147691937ull,
+ 16539993446098594936ull, 2501788749153583195ull}},
+{{5369444302346391903ull, 2310286877725063305ull,
+ 16063305789195855767ull, 3127235936441978994ull}},
+{{11323491396360377783ull, 16722916652438492843ull,
+ 10855760199640043900ull, 3909044920552473743ull}},
+{{4771339113511542162ull, 1228450870919282219ull,
+ 13702379152416109294ull, 2443153075345296089ull}},
+{{1352487873462039799ull, 10758935625503878582ull,
+ 3292915885237972905ull, 3053941344181620112ull}},
+{{10913981878682325556ull, 18060355550307236131ull,
+ 4116144856547466131ull, 3817426680227025140ull}},
+{{4515395664962759521ull, 8981879209728328630ull,
+ 11795962572196942140ull, 2385891675141890712ull}},
+{{14867616618058225209ull, 11227349012160410787ull,
+ 14744953215246177675ull, 2982364593927363390ull}},
+{{13972834754145393607ull, 9422500246773125580ull,
+ 9207819482202946286ull, 3727955742409204238ull}},
+{{17956393758195646813ull, 1277376635805815583ull,
+ 1143201157949453525ull, 2329972339005752649ull}},
+{{17833806179317170612ull, 6208406813184657383ull,
+ 6040687465864204810ull, 2912465423757190811ull}},
+{{17680571705719075361ull, 16983880553335597537ull,
+ 2939173313902868108ull, 3640581779696488514ull}},
+{{8265656576866680489ull, 2783106617959945306ull,
+ 12897338679233360944ull, 4550727224620610642ull}},
+{{9777721378969063210ull, 1739441636224965816ull,
+ 12672522692948238494ull, 2844204515387881651ull}},
+{{12222151723711329012ull, 11397674082135983078ull,
+ 11228967347757910213ull, 3555255644234852064ull}},
+{{6054317617784385457ull, 412034547387815136ull,
+ 14036209184697387767ull, 4444069555293565080ull}},
+{{3783948511115240911ull, 7175050619758466316ull,
+ 8772630740435867354ull, 2777543472058478175ull}},
+{{4729935638894051138ull, 18192185311552858703ull,
+ 6354102407117446288ull, 3471929340073097719ull}},
+{{1300733530190176019ull, 4293487565731521763ull,
+ 3330941990469419957ull, 4339911675091372149ull}},
+{{16953859520864717676ull, 4989272737795895053ull,
+ 4387681753257081425ull, 2712444796932107593ull}},
+{{7357266345798733383ull, 10848276940672256721ull,
+ 10096288209998739685ull, 3390555996165134491ull}},
+{{13808268950675804632ull, 18172032194267708805ull,
+ 8008674244071036702ull, 4238194995206418114ull}},
+{{10936011103386071847ull, 6745834102989930099ull,
+ 9617107420971785843ull, 2648871872004011321ull}},
+{{9058327860805201905ull, 3820606610310024720ull,
+ 16633070294642120208ull, 3311089840005014151ull}},
+{{11322909826006502381ull, 4775758262887530900ull,
+ 16179651849875262356ull, 4138862300006267689ull}},
+{{16300190678108839796ull, 12208220951159482620ull,
+ 3194753378530957116ull, 2586788937503917306ull}},
+{{1928494273926498129ull, 15260276188949353276ull,
+ 13216813760018472203ull, 3233486171879896632ull}},
+{{2410617842408122661ull, 14463659217759303691ull,
+ 16521017200023090254ull, 4041857714849870790ull}},
+{{17647537216000934328ull, 4428100992672176902ull,
+ 5713949731587043505ull, 2526161071781169244ull}},
+{{12836049483146392101ull, 10146812259267609032ull,
+ 7142437164483804381ull, 3157701339726461555ull}},
+{{16045061853932990127ull, 17295201342511899194ull,
+ 4316360437177367572ull, 3947126674658076944ull}},
+{{14639849677135506733ull, 1586128802215161188ull,
+ 2697725273235854733ull, 2466954171661298090ull}},
+{{18299812096419383417ull, 6594347021196339389ull,
+ 12595528628399594224ull, 3083692714576622612ull}},
+{{9039707065242065559ull, 8242933776495424237ull,
+ 15744410785499492780ull, 3854615893220778265ull}},
+{{7955659924989984926ull, 14375205647164415956ull,
+ 2922727713296101131ull, 2409134933262986416ull}},
+{{9944574906237481158ull, 13357321040528132041ull,
+ 3653409641620126414ull, 3011418666578733020ull}},
+{{17042404651224239351ull, 7473279263805389243ull,
+ 4566762052025158018ull, 3764273333223416275ull}},
+{{8345659897801455643ull, 9282485558305756181ull, 548383273302029809ull,
+ 2352670833264635172ull}},
+{{15043760890679207457ull, 16214792966309583130ull,
+ 685479091627537261ull, 2940838541580793965ull}},
+{{9581329076494233513ull, 6433433152604815201ull,
+ 5468534882961809481ull, 3676048176975992456ull}},
+{{16588347364045179795ull, 12653477459183406905ull,
+ 6835668603702261851ull, 4595060221219990570ull}},
+{{3450188074887155516ull, 5602580402775935364ull,
+ 8883978895741301561ull, 2871912638262494106ull}},
+{{4312735093608944395ull, 11614911521897307109ull,
+ 1881601582821851143ull, 3589890797828117633ull}},
+{{10002604885438568398ull, 9906953383944245982ull,
+ 6963687996954701833ull, 4487363497285147041ull}},
+{{1639942034971717345ull, 17721060911033623499ull,
+ 15881520044165158405ull, 2804602185803216900ull}},
+{{15884985598996810393ull, 8316268083509865661ull,
+ 1405155981496896391ull, 3505752732254021126ull}},
+{{6021173943463849279ull, 5783649085959944173ull,
+ 10979817013725896297ull, 4382190915317526407ull}},
+{{6069076723878599752ull, 15143995724793434868ull,
+ 13779914661219767041ull, 2738869322073454004ull}},
+{{7586345904848249689ull, 5094936600709629873ull,
+ 17224893326524708802ull, 3423586652591817505ull}},
+{{14094618399487700016ull, 15592042787741813149ull,
+ 7696058602873722290ull, 4279483315739771882ull}},
+{{11114979508893506462ull, 14356712760766021122ull,
+ 9421722645223464335ull, 2674677072337357426ull}},
+{{4670352349262107269ull, 13334204932530138499ull,
+ 2553781269674554611ull, 3343346340421696783ull}},
+{{1226254418150246183ull, 12056070147235285220ull,
+ 17027284642375356976ull, 4179182925527120978ull}},
+{{9989781048198679672ull, 7535043842022053262ull,
+ 15253738919911986014ull, 2611989328454450611ull}},
+{{3263854273393573782ull, 195432765672790770ull,
+ 14455487631462594614ull, 3264986660568063264ull}},
+{{13303189878596743036ull, 9467662993945764270ull,
+ 18069359539328243267ull, 4081233325710079080ull}},
+{{3702807655695576494ull, 3611446362002408717ull,
+ 11293349712080152042ull, 2550770828568799425ull}},
+{{9240195588046858521ull, 13737679989357786704ull,
+ 281629084818026340ull, 3188463535710999282ull}},
+{{11550244485058573151ull, 17172099986697233380ull,
+ 9575408392877308733ull, 3985579419638749102ull}},
+{{16442274840016384027ull, 13038405500899464814ull,
+ 1372944227120930054ull, 2490987137274218189ull}},
+{{11329471513165704226ull, 7074634839269555210ull,
+ 6327866302328550472ull, 3113733921592772736ull}},
+{{4938467354602354475ull, 8843293549086944013ull,
+ 7909832877910688090ull, 3892167401990965920ull}},
+{{5392385105840165499ull, 10138744486606727912ull,
+ 4943645548694180056ull, 2432604626244353700ull}},
+{{6740481382300206873ull, 12673430608258409890ull,
+ 6179556935867725070ull, 3040755782805442125ull}},
+{{17648973764730034400ull, 6618416223468236554ull,
+ 12336132188262044242ull, 3800944728506802656ull}},
+{{15642294621383659404ull, 8748196158095035750ull,
+ 7710082617663777651ull, 2375590455316751660ull}},
+{{10329496239874798447ull, 6323559179191406784ull,
+ 9637603272079722064ull, 2969488069145939575ull}},
+{{12911870299843498058ull, 7904448973989258480ull,
+ 7435318071672264676ull, 3711860086432424469ull}},
+{{8069918937402186287ull, 14163652645598062358ull,
+ 6952916804008859374ull, 2319912554020265293ull}},
+{{864026634897957050ull, 8481193770142802140ull,
+ 13302832023438462122ull, 2899890692525331616ull}},
+{{1080033293622446313ull, 1378120175823726867ull,
+ 16628540029298077653ull, 3624863365656664520ull}},
+{{15185099672310221603ull, 6334336238207046487ull,
+ 2338930962913045450ull, 4531079207070830651ull}},
+{{16408216322834970358ull, 8570646167306791958ull,
+ 17602732916316511070ull, 2831924504419269156ull}},
+{{11286898366688937139ull, 1489935672278714140ull,
+ 3556672071686087222ull, 3539905630524086446ull}},
+{{14108622958361171424ull, 11085791627203168483ull,
+ 13669212126462384835ull, 4424882038155108057ull}},
+{{6512046339762038188ull, 4622776757788286350ull,
+ 1625728551397908666ull, 2765551273846942536ull}},
+{{17363429961557323543ull, 15001842984090133745ull,
+ 2032160689247385832ull, 3456939092308678170ull}},
+{{7869229396664490717ull, 305559656403115566ull,
+ 11763572898414008099ull, 4321173865385847712ull}},
+{{306582354487918794ull, 16331875849747804893ull,
+ 7352233061508755061ull, 2700733665866154820ull}},
+{{4994913961537286397ull, 6579786756902592404ull,
+ 9190291326885943827ull, 3375917082332693525ull}},
+{{6243642451921607996ull, 3613047427700852601ull,
+ 16099550177034817688ull, 4219896352915866906ull}},
+{{15431491578519474757ull, 2258154642313032875ull,
+ 14673904879074148959ull, 2637435220572416816ull}},
+{{14677678454721955543ull, 16657751358173454806ull,
+ 18342381098842686198ull, 3296794025715521020ull}},
+{{9123726031547668620ull, 11598817160862042700ull,
+ 4481232299843806132ull, 4120992532144401276ull}},
+{{14925700806572068696ull, 16472632762393552495ull,
+ 12024142224257154640ull, 2575620332590250797ull}},
+{{14045439989787697966ull, 2144046879282389003ull,
+ 1195119725039279589ull, 3219525415737813497ull}},
+{{12945113968807234553ull, 7291744617530374158ull,
+ 6105585674726487390ull, 4024406769672266871ull}},
+{{3479010212077133692ull, 18392398441238647561ull,
+ 10733520074345136474ull, 2515254231045166794ull}},
+{{8960448783523805019ull, 13767126014693533643ull,
+ 4193528056076644785ull, 3144067788806458493ull}},
+{{6588874960977368369ull, 3373849463084753342ull,
+ 9853596088523193886ull, 3930084736008073116ull}},
+{{17953104905893018943ull, 15943713969710134550ull,
+ 15381869592181771986ull, 2456302960005045697ull}},
+{{13218009095511497870ull, 10706270425282892380ull,
+ 5392278934945051271ull, 3070378700006307122ull}},
+{{16522511369389372338ull, 8771152013176227571ull,
+ 15963720705536089897ull, 3837973375007883902ull}},
+{{8020726596654663759ull, 17011185054303611992ull,
+ 5365639422532668281ull, 2398733359379927439ull}},
+{{10025908245818329699ull, 7428923262597351278ull,
+ 2095363259738447448ull, 2998416699224909299ull}},
+{{3309013270418136316ull, 9286154078246689098ull,
+ 16454262129955223022ull, 3748020874031136623ull}},
+{{6679819312438723102ull, 1192160280476792782ull,
+ 17201442858863096245ull, 2342513046269460389ull}},
+{{17573146177403179685ull, 6101886369023378881ull,
+ 7666745518296706594ull, 2928141307836825487ull}},
+{{8131374666471810894ull, 16850729998133999410ull,
+ 4971745879443495338ull, 3660176634796031859ull}},
+{{940846296234987809ull, 11840040460812723455ull,
+ 1602996330876981269ull, 4575220793495039824ull}},
+{{7505557962787949237ull, 9705868297221646111ull,
+ 1001872706798113293ull, 2859512995934399890ull}},
+{{4770261435057548642ull, 16744021389954445543ull,
+ 10475712920352417424ull, 3574391244917999862ull}},
+{{1351140775394547898ull, 2483282663733505313ull,
+ 3871269113585745973ull, 4467989056147499828ull}},
+{{12373678030690062197ull, 3857894674047134772ull,
+ 11642915232845867041ull, 2792493160092187392ull}},
+{{15467097538362577746ull, 9434054360986306369ull,
+ 14553644041057333801ull, 3490616450115234240ull}},
+{{5498813867671058470ull, 16404253969660270866ull,
+ 18192055051321667251ull, 4363270562644042800ull}},
+{{8048444685721799448ull, 7946815721823975339ull,
+ 11370034407076042032ull, 2727044101652526750ull}},
+{{5448869838724861406ull, 9933519652279969174ull,
+ 4989170971990276732ull, 3408805127065658438ull}},
+{{16034459335260852565ull, 12416899565349961467ull,
+ 15459835751842621723ull, 4261006408832073047ull}},
+{{7715694075324338901ull, 5454719219130031965ull,
+ 16579926372542720433ull, 2663129005520045654ull}},
+{{14256303612582811531ull, 11430085042339927860ull,
+ 11501535928823624733ull, 3328911256900057068ull}},
+{{17820379515728514413ull, 452548247642746113ull,
+ 14376919911029530917ull, 4161139071125071335ull}},
+{{4220208169689239652ull, 2588685663990410273ull,
+ 15903103972034538679ull, 2600711919453169584ull}},
+{{9886946230538937469ull, 17070915135270176553ull,
+ 1432135891333621732ull, 3250889899316461981ull}},
+{{16970368806601059741ull, 2891899845378169075ull,
+ 6401855882594415070ull, 4063612374145577476ull}},
+{{8300637494911968386ull, 15642495458643519384ull,
+ 13224531963476285226ull, 2539757733840985922ull}},
+{{10375796868639960482ull, 10329747286449623422ull,
+ 7307292917490580725ull, 3174697167301232403ull}},
+{{3746374048945174795ull, 17523870126489417182ull,
+ 4522430128435838002ull, 3968371459126540504ull}},
+{{16176541835872897959ull, 15564104847483273642ull,
+ 2826518830272398751ull, 2480232161954087815ull}},
+{{10997305257986346641ull, 14843445040926704149ull,
+ 17368206593122662151ull, 3100290202442609768ull}},
+{{18358317590910321205ull, 13942620282730992282ull,
+ 3263514167693776073ull, 3875362753053262211ull}},
+{{16085634512746338657ull, 1796608649065788320ull,
+ 18180597419304467710ull, 2422101720658288881ull}},
+{{1660299067223371705ull, 11469132848187011209ull,
+ 8890688718848420925ull, 3027627150822861102ull}},
+{{6687059852456602536ull, 501358004951600299ull, 1889988861705750349ull,
+ 3784533938528576378ull}},
+{{1873569398571682633ull, 2619191762308444139ull,
+ 5792929056993481872ull, 2365333711580360236ull}},
+{{16177019803496767003ull, 3273989702885555173ull,
+ 7241161321241852340ull, 2956667139475450295ull}},
+{{6386216699088795042ull, 4092487128606943967ull,
+ 4439765633124927521ull, 3695833924344312869ull}},
+{{10908914464571578757ull, 14087019501447809739ull,
+ 5080696529916773652ull, 2309896202715195543ull}},
+{{9024457062287085542ull, 17608774376809762174ull,
+ 1739184643968579161ull, 2887370253393994429ull}},
+{{2057199291004081120ull, 8175909915730039006ull,
+ 6785666823388111856ull, 3609212816742493036ull}},
+{{11794871150609877208ull, 10219887394662548757ull,
+ 8482083529235139820ull, 4511516020928116295ull}},
+{{9677637478344867207ull, 15610801658518868781ull,
+ 12218831233413044243ull, 2819697513080072684ull}},
+{{16708732866358471913ull, 14901816054721198072ull,
+ 15273539041766305304ull, 3524621891350090855ull}},
+{{2439172009238538275ull, 180525994691945975ull,
+ 14480237783780493727ull, 4405777364187613569ull}},
+{{8442011533415168278ull, 7030357774323548090ull,
+ 2132619587221726723ull, 2753610852617258481ull}},
+{{1329142379914184539ull, 4176261199477047209ull,
+ 7277460502454546308ull, 3442013565771573101ull}},
+{{6273113993320118578ull, 5220326499346309011ull,
+ 13708511646495570789ull, 4302516957214466376ull}},
+{{1614853236611380159ull, 5568547071305137084ull,
+ 8567819779059731743ull, 2689073098259041485ull}},
+{{2018566545764225199ull, 2348997820704033451ull,
+ 15321460742252052583ull, 3361341372823801856ull}},
+{{16358266237487445211ull, 16771305331162205525ull,
+ 705081854105514112ull, 4201676716029752321ull}},
+{{12529759407643347209ull, 10482065831976378453ull,
+ 11969891204884416080ull, 2626047947518595200ull}},
+{{1827141204272020299ull, 13102582289970473067ull,
+ 14962364006105520100ull, 3282559934398244000ull}},
+{{16118984560622189086ull, 16378227862463091333ull,
+ 256210933922348509ull, 4103199917997805001ull}},
+{{12380208359602562131ull, 12542235423253126035ull,
+ 11689346879769937578ull, 2564499948748628125ull}},
+{{10863574431075814759ull, 6454422242211631736ull,
+ 776625544430258261ull, 3205624935935785157ull}},
+{{13579468038844768449ull, 12679713821191927574ull,
+ 5582467948965210730ull, 4007031169919731446ull}},
+{{3875481505850592377ull, 12536507156672342638ull,
+ 17324100523385420418ull, 2504394481199832153ull}},
+{{14067723919168016279ull, 6447261908985652489ull,
+ 7820067598949611811ull, 3130493101499790192ull}},
+{{3749596843677856636ull, 3447391367804677708ull,
+ 9775084498687014764ull, 3913116376874737740ull}},
+{{11566870064153436206ull, 11377991641732699375ull,
+ 15332799848534160035ull, 2445697735546711087ull}},
+{{9846901561764407353ull, 9610803533738486315ull,
+ 14554313792240312140ull, 3057122169433388859ull}},
+{{7696940933778121287ull, 12013504417173107894ull,
+ 13581206221873002271ull, 3821402711791736074ull}},
+{{198902065183937901ull, 14425969288374274290ull,
+ 13099939907098014323ull, 2388376694869835046ull}},
+{{9471999618334698184ull, 13420775592040454958ull,
+ 7151552847017742096ull, 2985470868587293808ull}},
+{{2616627486063596922ull, 16775969490050568698ull,
+ 8939441058772177620ull, 3731838585734117260ull}},
+{{6247078197217135980ull, 1261608894426829628ull,
+ 14810522698587386821ull, 2332399116083823287ull}},
+{{7808847746521419975ull, 6188697136460924939ull,
+ 13901467354806845622ull, 2915498895104779109ull}},
+{{5149373664724387065ull, 16959243457430931982ull,
+ 3541776138226393315ull, 3644373618880973887ull}},
+{{15660089117760259639ull, 16587368303361277073ull,
+ 18262278228065155356ull, 4555467023601217358ull}},
+{{2870026670959080419ull, 1143733152746022363ull,
+ 6802237874113334194ull, 2847166889750760849ull}},
+{{17422591393981014235ull, 10653038477787303761ull,
+ 13114483361069055646ull, 3558958612188451061ull}},
+{{7943181187194104082ull, 4092926060379353894ull,
+ 2558046146054155846ull, 4448698265235563827ull}},
+{{352802223568927147ull, 16393136843019259896ull,
+ 17739679905779705067ull, 2780436415772227391ull}},
+{{441002779461158934ull, 15879735035346686966ull,
+ 17562913863797243430ull, 3475545519715284239ull}},
+{{9774625511181224475ull, 10626296757328582899ull,
+ 17341956311319166384ull, 4344431899644105299ull}},
+{{3803297935274571345ull, 6641435473330364312ull,
+ 8532879685360785038ull, 2715269937277565812ull}},
+{{4754122419093214181ull, 17525166378517731198ull,
+ 10666099606700981297ull, 3394087421596957265ull}},
+{{15166025060721293535ull, 8071399917865000285ull,
+ 17944310526803614526ull, 4242609276996196581ull}},
+{{11784608672164502411ull, 432938930238237274ull,
+ 13521037088465953031ull, 2651630798122622863ull}},
+{{5507388803350852206ull, 14376231718079960305ull,
+ 12289610342155053384ull, 3314538497653278579ull}},
+{{11495922022615953162ull, 17970289647599950381ull,
+ 10750326909266428826ull, 4143173122066598224ull}},
+{{9490794273348664678ull, 15843117048177356892ull,
+ 6718954318291518016ull, 2589483201291623890ull}},
+{{11863492841685830848ull, 1357152236512144499ull,
+ 17622064934719173329ull, 3236854001614529862ull}},
+{{10217680033679900655ull, 6308126314067568528ull,
+ 12804209131544190853ull, 4046067502018162328ull}},
+{{6386050021049937910ull, 6248421955505924282ull,
+ 8002630707215119283ull, 2528792188761351455ull}},
+{{17205934563167198195ull, 3198841425955017448ull,
+ 5391602365591511200ull, 3160990235951689319ull}},
+{{3060674130249446128ull, 3998551782443771811ull,
+ 2127816938562001096ull, 3951237794939611649ull}},
+{{18053822395901761494ull, 2499094864027357381ull,
+ 12859100632669720445ull, 2469523621837257280ull}},
+{{8732219939595038155ull, 7735554598461584631ull,
+ 16073875790837150556ull, 3086904527296571600ull}},
+{{6303588906066409790ull, 9669443248076980789ull,
+ 1645600664836886579ull, 3858630659120714501ull}},
+{{6245586075505200071ull, 3737559020834419041ull,
+ 3334343424736748064ull, 2411644161950446563ull}},
+{{12418668612808887993ull, 4671948776043023801ull,
+ 18002987336203098792ull, 3014555202438058203ull}},
+{{1688277710728946279ull, 5839935970053779752ull,
+ 17892048151826485586ull, 3768194003047572754ull}},
+{{1055173569205591424ull, 8261645999711000249ull,
+ 15794216113318941395ull, 2355121251904732971ull}},
+{{5930652979934377184ull, 5715371481211362407ull,
+ 15131084123221288840ull, 2943901564880916214ull}},
+{{2801630206490583576ull, 7144214351514203009ull,
+ 9690483117171835242ull, 3679876956101145268ull}},
+{{8113723776540617374ull, 18153639976247529569ull,
+ 12113103896464794052ull, 4599846195126431585ull}},
+{{16600292406406355619ull, 2122652948299930172ull,
+ 653160907649414427ull, 2874903871954019741ull}},
+{{2303621434298392908ull, 16488374240657076428ull,
+ 5428137152989155937ull, 3593629839942524676ull}},
+{{2879526792872991135ull, 6775409745539181823ull,
+ 6785171441236444922ull, 4492037299928155845ull}},
+{{8717233273186701315ull, 8846317109389376543ull,
+ 6546575159986472028ull, 2807523312455097403ull}},
+{{6284855573055988740ull, 11057896386736720679ull,
+ 3571532931555702131ull, 3509404140568871754ull}},
+{{3244383447892598021ull, 9210684464993512945ull,
+ 13687788201299403472ull, 4386755175711089692ull}},
+{{13556954701001343523ull, 5756677790620945590ull,
+ 17778239662666902978ull, 2741721984819431057ull}},
+{{7722821339396903596ull, 16419219275130957796ull,
+ 8387741523051465010ull, 3427152481024288822ull}},
+{{9653526674246129495ull, 11300652057058921437ull,
+ 1261304866959555455ull, 4283940601280361028ull}},
+{{8339297180617524886ull, 13980436563302907754ull,
+ 10011687578704497967ull, 2677462875800225642ull}},
+{{1200749438917130300ull, 12863859685701246789ull,
+ 3291237436525846651ull, 3346828594750282053ull}},
+{{6112622817073800779ull, 11468138588699170582ull,
+ 8725732814084696218ull, 4183535743437852566ull}},
+{{17655447315953289199ull, 11779272636364369517ull,
+ 841896990375547232ull, 2614709839648657854ull}},
+{{8234251089659447786ull, 14724090795455461897ull,
+ 10275743274824209848ull, 3268387299560822317ull}},
+{{14904499880501697637ull, 18405113494319327371ull,
+ 17456365111957650214ull, 4085484124451027896ull}},
+{{7009469416099867071ull, 6891509915522191703ull,
+ 10910228194973531384ull, 2553427577781892435ull}},
+{{4150150751697445935ull, 8614387394402739629ull,
+ 9026099225289526326ull, 3191784472227365544ull}},
+{{9799374458049195323ull, 1544612206148648728ull,
+ 11282624031611907908ull, 3989730590284206930ull}},
+{{6124609036280747077ull, 10188754665697681263ull,
+ 11663326038184830346ull, 2493581618927629331ull}},
+{{3044075276923545942ull, 3512571295267325771ull,
+ 9967471529303650029ull, 3116977023659536664ull}},
+{{17640152151436596139ull, 9002400137511545117ull,
+ 12459339411629562536ull, 3896221279574420830ull}},
+{{13330938103861566539ull, 5626500085944715698ull,
+ 3175401113841088681ull, 2435138299734013019ull}},
+{{7440300592972182366ull, 11644811125858282527ull,
+ 17804309447583524563ull, 3043922874667516273ull}},
+{{4688689722787840053ull, 9944327888895465255ull,
+ 8420328754197241992ull, 3804903593334395342ull}},
+{{9847960104383481889ull, 6215204930559665784ull, 651019452945888341ull,
+ 2378064745833997089ull}},
+{{12309950130479352362ull, 12380692181626970134ull,
+ 5425460334609748330ull, 2972580932292496361ull}},
+{{6164065626244414644ull, 6252493190178936860ull,
+ 11393511436689573317ull, 3715726165365620451ull}},
+{{13075913053257534961ull, 6213651253075529489ull,
+ 4815101638717289371ull, 2322328853353512782ull}},
+{{2509833261289754989ull, 3155378047917023958ull,
+ 15242249085251387522ull, 2902911066691890977ull}},
+{{12360663613466969544ull, 13167594596751055755ull,
+ 5217753301282070690ull, 3628638833364863722ull}},
+{{10839143498406324026ull, 7236121209084043886ull,
+ 15745563663457364171ull, 4535798541706079652ull}},
+{{2162778668076564612ull, 2216732746463833477ull, 617605252806076799ull,
+ 2834874088566299783ull}},
+{{7315159353523093669ull, 16605973988361955558ull,
+ 14607064621289759710ull, 3543592610707874728ull}},
+{{18367321228758642894ull, 11534095448597668639ull,
+ 18258830776612199638ull, 4429490763384843410ull}},
+{{18397104795615233665ull, 2597123636946154995ull,
+ 16023455253810012678ull, 2768431727115527131ull}},
+{{18384694976091654177ull, 12469776583037469552ull,
+ 15417633048835127943ull, 3460539658894408914ull}},
+{{4534124646405016105ull, 10975534710369449037ull,
+ 10048669274189134121ull, 4325674573618011143ull}},
+{{5139670913216829018ull, 18388924240049375408ull,
+ 13197947324009290681ull, 2703546608511256964ull}},
+{{6424588641521036273ull, 9151097244779555548ull,
+ 16497434155011613352ull, 3379433260639071205ull}},
+{{8030735801901295341ull, 11438871555974444435ull,
+ 6786734638482352978ull, 4224291575798839007ull}},
+{{2713366866974615636ull, 11760980740911415676ull,
+ 11159238176692552467ull, 2640182234874274379ull}},
+{{3391708583718269545ull, 10089539907711881691ull,
+ 9337361702438302680ull, 3300227793592842974ull}},
+{{18074693784930000643ull, 12611924884639852113ull,
+ 2448330091193102542ull, 4125284741991053718ull}},
+{{4379154587940168546ull, 3270767034472519667ull,
+ 15365264362277852801ull, 2578302963744408573ull}},
+{{862257216497822778ull, 8700144811518037488ull, 5371522397565152289ull,
+ 3222878704680510717ull}},
+{{1077821520622278473ull, 15486867032824934764ull,
+ 11326089015383828265ull, 4028598380850638396ull}},
+{{9897010487243699854ull, 2761762867874502371ull,
+ 16302177671469668474ull, 2517873988031648997ull}},
+{{7759577090627236913ull, 12675575621697903772ull,
+ 6542664034054921880ull, 3147342485039561247ull}},
+{{9699471363284046141ull, 15844469527122379715ull,
+ 3566644024141264446ull, 3934178106299451559ull}},
+{{3756326592838834886ull, 5291107436024099418ull,
+ 9146681542729372135ull, 2458861316437157224ull}},
+{{13918780277903319416ull, 2002198276602736368ull,
+ 11433351928411715169ull, 3073576645546446530ull}},
+{{17398475347379149270ull, 7114433864180808364ull,
+ 5068317873659868153ull, 3841970806933058163ull}},
+{{1650675055257192486ull, 15975736211181474988ull,
+ 861855661823723643ull, 2401231754333161352ull}},
+{{2063343819071490607ull, 15357984245549455831ull,
+ 1077319577279654554ull, 3001539692916451690ull}},
+{{16414237829121526971ull, 9974108270082043980ull,
+ 10570021508454344001ull, 3751924616145564612ull}},
+{{1035526606346178549ull, 17763032714869747248ull,
+ 15829635479638740808ull, 2344952885090977882ull}},
+{{1294408257932723186ull, 3757046819877632444ull,
+ 10563672312693650203ull, 2931191106363722353ull}},
+{{1618010322415903982ull, 84622506419652651ull, 17816276409294450658ull,
+ 3663988882954652941ull}},
+{{15857570958302043690ull, 9329150169879341621ull,
+ 8435287456335899610ull, 4579986103693316177ull}},
+{{12216824858152471258ull, 10442404874601976417ull,
+ 16801269706278407016ull, 2862491314808322610ull}},
+{{1435973017408425361ull, 13053006093252470522ull,
+ 11778215095993232962ull, 3578114143510403263ull}},
+{{11018338308615307509ull, 7092885579710812344ull,
+ 10111082851564153299ull, 4472642679388004079ull}},
+{{6886461442884567193ull, 2127210478105563763ull,
+ 13236955809868677668ull, 2795401674617502549ull}},
+{{3996390785178321087ull, 2659013097631954704ull,
+ 2711136707053683373ull, 3494252093271878187ull}},
+{{4995488481472901359ull, 7935452390467331284ull,
+ 17223978939099267928ull, 4367815116589847733ull}},
+{{12345552337775339158ull, 4959657744042082052ull,
+ 13070829846150736407ull, 2729884447868654833ull}},
+{{15431940422219173947ull, 1587886161625214661ull,
+ 2503479252406256797ull, 3412355559835818542ull}},
+{{5454867472491803722ull, 6596543720458906231ull,
+ 12352721102362596804ull, 4265444449794773177ull}},
+{{10326821197948459182ull, 13346211862141592202ull,
+ 802921661335541146ull, 2665902781121733236ull}},
+{{3685154460580798170ull, 7459392790822214445ull,
+ 1003652076669426433ull, 3332378476402166545ull}},
+{{9218129094153385616ull, 13935927006955155960ull,
+ 5866251114264170945ull, 4165473095502708181ull}},
+{{5761330683845866010ull, 1792425351705890619ull,
+ 5972249955628800793ull, 2603420684689192613ull}},
+{{2589977336379944609ull, 6852217708059751178ull,
+ 12076998462963388895ull, 3254275855861490766ull}},
+{{12460843707329706569ull, 3953586116647301068ull,
+ 5872876041849460311ull, 4067844819826863458ull}},
+{{17011399353935842414ull, 9388520350545645023ull,
+ 8282233544583300598ull, 2542403012391789661ull}},
+{{16652563173992415113ull, 2512278401327280471ull,
+ 14964477949156513652ull, 3178003765489737076ull}},
+{{16204017949063130987ull, 3140348001659100589ull,
+ 258853362736090449ull, 3972504706862171346ull}},
+{{12433354227378150819ull, 13491932547105407628ull,
+ 4773469370137444434ull, 2482815441788857091ull}},
+{{15541692784222688524ull, 7641543647026983727ull,
+ 1355150694244417639ull, 3103519302236071364ull}},
+{{14815429961850972750ull, 4940243540356341755ull,
+ 1693938367805522049ull, 3879399127795089205ull}},
+{{6953800716943164017ull, 14616867258791183357ull,
+ 3364554489092145232ull, 2424624454871930753ull}},
+{{13303936914606342925ull, 18271084073488979196ull,
+ 8817379129792569444ull, 3030780568589913441ull}},
+{{16629921143257928657ull, 4392111018151672379ull,
+ 15633409930668099710ull, 3788475710737391801ull}},
+{{8087857705322511459ull, 16580127441626958949ull,
+ 2853352179026480462ull, 2367797319210869876ull}},
+{{14721508150080527227ull, 11501787265178922878ull,
+ 3566690223783100578ull, 2959746649013587345ull}},
+{{9178513150745883226ull, 5153862044618877790ull,
+ 9070048798156263627ull, 3699683311266984181ull}},
+{{1124884700788789112ull, 915320768673104667ull, 7974623508061358719ull,
+ 2312302069541865113ull}},
+{{15241163931268150102ull, 14979209016123544545ull,
+ 14579965403504086302ull, 2890377586927331391ull}},
+{{5216396858803023916ull, 9500639233299654874ull,
+ 13613270735952719974ull, 3612971983659164239ull}},
+{{15743868110358555702ull, 2652427004769792784ull,
+ 12404902401513512064ull, 4516214979573955299ull}},
+{{9839917568974097314ull, 1657766877981120490ull,
+ 5447220991732251088ull, 2822634362233722062ull}},
+{{3076524924362845835ull, 2072208597476400613ull,
+ 16032398276520089668ull, 3528292952792152577ull}},
+{{8457342173880945197ull, 2590260746845500766ull,
+ 6205439790367948373ull, 4410366190990190722ull}},
+{{674152840248202844ull, 3924755975992131931ull, 8490085887407355637ull,
+ 2756478869368869201ull}},
+{{14677749105592417267ull, 9517630988417552817ull,
+ 15224293377686582450ull, 3445598586711086501ull}},
+{{4512128326708357872ull, 2673666698667165214ull,
+ 5195308666826064351ull, 4306998233388858127ull}},
+{{16655138259474887382ull, 8588570714308060114ull,
+ 10164596944407372075ull, 2691873895868036329ull}},
+{{11595550787488833420ull, 6124027374457687239ull,
+ 17317432198936602998ull, 3364842369835045411ull}},
+{{9882752465933653870ull, 16878406254926884857ull,
+ 17035104230243365843ull, 4206052962293806764ull}},
+{{17705935337277003429ull, 8243160900115609083ull,
+ 1423568107047327844ull, 2628783101433629228ull}},
+{{17520733153168866382ull, 10303951125144511354ull,
+ 1779460133809159805ull, 3285978876792036535ull}},
+{{12677544404606307170ull, 17491624924858027097ull,
+ 16059383222543613468ull, 4107473595990045668ull}},
+{{1005936225237860125ull, 1708893541181491128ull, 813742477234982610ull,
+ 2567170997493778543ull}},
+{{1257420281547325157ull, 11359488963331639718ull,
+ 14852236151825891974ull, 3208963746867223178ull}},
+{{10795147388788932254ull, 4975989167309773839ull,
+ 9341923152927589160ull, 4011204683584028973ull}},
+{{13664496145634164515ull, 3109993229568608649ull,
+ 8144544979793437177ull, 2507002927240018108ull}},
+{{3245562126760541931ull, 8499177555388148716ull,
+ 10180681224741796471ull, 3133753659050022635ull}},
+{{4056952658450677414ull, 6012285925807797991ull,
+ 8114165512499857685ull, 3917192073812528294ull}},
+{{9453124439172755240ull, 6063521712843567696ull, 459667426885023149ull,
+ 2448245046132830184ull}},
+{{11816405548965944050ull, 12191088159481847524ull,
+ 574584283606278936ull, 3060306307666037730ull}},
+{{14770506936207430062ull, 15238860199352309405ull,
+ 9941602391362624478ull, 3825382884582547162ull}},
+{{11537409844343337741ull, 4912601606167805474ull,
+ 10825187513029028203ull, 2390864302864091976ull}},
+{{5198390268574396368ull, 1529065989282368939ull,
+ 13531484391286285254ull, 2988580378580114970ull}},
+{{1886301817290607556ull, 11134704523457736982ull,
+ 7690983452253080759ull, 3735725473225143713ull}},
+{{15013996691088793435ull, 13876719354802167469ull,
+ 16336079703726645234ull, 2334828420765714820ull}},
+{{4932437808578828081ull, 8122527156647933529ull,
+ 1973355555948754927ull, 2918535525957143526ull}},
+{{10777233279150923005ull, 5541472927382529007ull,
+ 11690066481790719467ull, 3648169407446429407ull}},
+{{8859855580511265853ull, 2315155140800773355ull,
+ 10000897083811011430ull, 4560211759308036759ull}},
+{{3231566728605847206ull, 15282030018282647059ull,
+ 13168089705022963999ull, 2850132349567522974ull}},
+{{17874516466039472719ull, 14490851504425920919ull,
+ 7236740094423929191ull, 3562665436959403718ull}},
+{{17731459564121952995ull, 13501878362105013245ull,
+ 18269297154884687297ull, 4453331796199254647ull}},
+{{13388005236789914574ull, 1521144948674551422ull,
+ 18335839749444011417ull, 2783332372624534154ull}},
+{{7511634509132617410ull, 6513117204270577182ull,
+ 13696427649950238463ull, 3479165465780667693ull}},
+{{166171099560995954ull, 3529710486910833574ull, 3285476507155634367ull,
+ 4348956832225834617ull}},
+{{13938914992507786183ull, 9123598081960352839ull,
+ 13582637863040741239ull, 2718098020141146635ull}},
+{{12811957722207344825ull, 6792811584023053145ull,
+ 12366611310373538645ull, 3397622525176433294ull}},
+{{2179889097477017319ull, 13102700498456204336ull,
+ 6234892101112147498ull, 4247028156470541618ull}},
+{{1362430685923135825ull, 12800873829962515614ull,
+ 8508493581622480090ull, 2654392597794088511ull}},
+{{10926410394258695589ull, 6777720250598368709ull,
+ 6023930958600712209ull, 3317990747242610639ull}},
+{{18269699011250757390ull, 13083836331675348790ull,
+ 2918227679823502357ull, 4147488434053263299ull}},
+{{6806875863604335465ull, 10483240716510786946ull,
+ 17964793364385546637ull, 2592180271283289561ull}},
+{{17731966866360195139ull, 17715736914065871586ull,
+ 8620933650199769584ull, 3240225339104111952ull}},
+{{12941586546095468115ull, 3697927068872787867ull,
+ 10776167062749711981ull, 4050281673880139940ull}},
+{{5782648582095973620ull, 4617047427259186369ull,
+ 15958476451073345796ull, 2531426046175087462ull}},
+{{11839996746047354929ull, 5771309284073982961ull,
+ 10724723526986906437ull, 3164282557718859328ull}},
+{{964937877277029950ull, 11825822623519866606ull,
+ 13405904408733633046ull, 3955353197148574160ull}},
+{{14438144228580307431ull, 2779453121272528724ull,
+ 8378690255458520654ull, 2472095748217858850ull}},
+{{18047680285725384288ull, 12697688438445436713ull,
+ 1249990782468375009ull, 3090119685272323563ull}},
+{{8724542301874566648ull, 2037052492774632180ull,
+ 15397546533367632474ull, 3862649606590404453ull}},
+{{14676210975526379963ull, 5884843826411533016ull,
+ 11929309592568464248ull, 2414156004119002783ull}},
+{{18345263719407974954ull, 7356054783014416270ull,
+ 10299950972283192406ull, 3017695005148753479ull}},
+{{13708207612405192884ull, 18418440515622796146ull,
+ 8263252696926602603ull, 3772118756435941849ull}},
+{{13179315776180633457ull, 9205682313050553639ull,
+ 16693747981647596387ull, 2357574222772463655ull}},
+{{11862458701798403917ull, 6895416872885804145ull,
+ 16255498958632107580ull, 2946967778465579569ull}},
+{{993015321965841184ull, 8619271091107255182ull, 6484315643007970763ull,
+ 3683709723081974462ull}},
+{{10464641189312077288ull, 6162402845456681073ull,
+ 17328766590614739262ull, 4604637153852468077ull}},
+{{18069615789388518065ull, 17686559833692589382ull,
+ 13136322128347905990ull, 2877898221157792548ull}},
+{{13363647699880871773ull, 12884827755260960920ull,
+ 16420402660434882488ull, 3597372776447240685ull}},
+{{16704559624851089717ull, 16106034694076201150ull,
+ 6690445270261439398ull, 4496715970559050857ull}},
+{{5828663747104543169ull, 5454585665370237815ull,
+ 15710743339981869384ull, 2810447481599406785ull}},
+{{2674143665453291057ull, 6818232081712797269ull,
+ 5803371119695173018ull, 3513059351999258482ull}},
+{{7954365600244001725ull, 17746162138995772394ull,
+ 16477585936473742080ull, 4391324189999073102ull}},
+{{9583164518579888983ull, 11091351336872357746ull,
+ 5686805191868700896ull, 2744577618749420689ull}},
+{{2755583611370085420ull, 13864189171090447183ull,
+ 11720192508263264024ull, 3430722023436775861ull}},
+{{17279537569494770487ull, 17330236463863058978ull,
+ 815182580046916318ull, 4288402529295969827ull}},
+{{15411396999361619459ull, 6219711771487023957ull,
+ 16650390177025180363ull, 2680251580809981141ull}},
+{{5429188193919860611ull, 3162953695931392043ull,
+ 6977929665999311742ull, 3350314476012476427ull}},
+{{2174799223972437860ull, 13177064156769015862ull,
+ 4110726064071751773ull, 4187893095015595534ull}},
+{{15194307570264937374ull, 10541508107194328865ull,
+ 16404261845327008570ull, 2617433184384747208ull}},
+{{5157826407549008006ull, 3953513097138135274ull,
+ 2058583232949209097ull, 3271791480480934011ull}},
+{{15670655046291035815ull, 9553577389850056996ull,
+ 16408287096468675083ull, 4089739350601167513ull}},
+{{570787367077121577ull, 3665142859442591671ull, 3337650407651840071ull,
+ 2556087094125729696ull}},
+{{14548542264128565683ull, 18416486629585403300ull,
+ 4172063009564800088ull, 3195108867657162120ull}},
+{{18185677830160707103ull, 4573864213272202509ull,
+ 5215078761956000111ull, 3993886084571452650ull}},
+{{13671891653064135892ull, 9776194160936208424ull,
+ 7871110244649887973ull, 2496178802857157906ull}},
+{{17089864566330169865ull, 16831928719597648434ull,
+ 615515768957584158ull, 3120223503571447383ull}},
+{{12138958671057936523ull, 11816538862642284735ull,
+ 14604452766479143910ull, 3900279379464309228ull}},
+{{14504378197052292183ull, 2773650770724040055ull,
+ 18351155015904240752ull, 2437674612165193267ull}},
+{{13518786727887977324ull, 3467063463405050069ull,
+ 18327257751452913036ull, 3047093265206491584ull}},
+{{3063425354577807943ull, 4333829329256312587ull,
+ 4462328115606589679ull, 3808866581508114481ull}},
+{{18055541911106987629ull, 9626172358426277222ull,
+ 14318170118322588309ull, 2380541613442571550ull}},
+{{13346055352028958728ull, 16644401466460234432ull,
+ 8674340611048459578ull, 2975677016803214438ull}},
+{{16682569190036198410ull, 11582129796220517232ull,
+ 1619553726955798665ull, 3719596271004018048ull}},
+{{10426605743772624006ull, 321302094996741414ull,
+ 1012221079347374166ull, 2324747669377511280ull}},
+{{3809885142861004200ull, 9624999655600702576ull,
+ 1265276349184217707ull, 2905934586721889100ull}},
+{{4762356428576255250ull, 7419563551073490316ull,
+ 1581595436480272134ull, 3632418233402361375ull}},
+{{5952945535720319062ull, 51082401987087087ull, 15812052350882503880ull,
+ 4540522791752951718ull}},
+{{10638119987466281270ull, 31926501241929429ull, 5270846700874177021ull,
+ 2837826744845594824ull}},
+{{17909336002760239491ull, 4651594144979799690ull,
+ 6588558376092721276ull, 3547283431056993530ull}},
+{{13163297966595523556ull, 5814492681224749613ull,
+ 17459070006970677403ull, 4434104288821241912ull}},
+{{10532904238335896175ull, 1328214916551774556ull,
+ 10911918754356673377ull, 2771315180513276195ull}},
+{{13166130297919870218ull, 6271954664117106099ull,
+ 9028212424518453817ull, 3464143975641595244ull}},
+{{11845976853972449868ull, 12451629348573770528ull,
+ 11285265530648067271ull, 4330179969551994055ull}},
+{{7403735533732781168ull, 14699797370499688436ull,
+ 13970819984296123900ull, 2706362480969996284ull}},
+{{9254669417165976460ull, 18374746713124610545ull,
+ 17463524980370154875ull, 3382953101212495355ull}},
+{{16180022789884858479ull, 18356747372978375277ull,
+ 17217720207035305690ull, 4228691376515619194ull}},
+{{12418357252891730501ull, 16084653126538872452ull,
+ 15372761147824453960ull, 2642932110322261996ull}},
+{{15522946566114663127ull, 1659072334464038949ull,
+ 769207361071015835ull, 3303665137902827496ull}},
+{{5568625152361165196ull, 15908898473362212399ull,
+ 961509201338769793ull, 4129581422378534370ull}},
+{{10397919747866810104ull, 3025532518210300893ull,
+ 5212629269264119025ull, 2580988388986583981ull}},
+{{17609085703260900534ull, 8393601666190264020ull,
+ 11127472605007536685ull, 3226235486233229976ull}},
+{{3564613055366574051ull, 15103688101165217930ull,
+ 13909340756259420856ull, 4032794357791537470ull}},
+{{6839569178031496686ull, 9439805063228261206ull,
+ 4081651954234750131ull, 2520496473619710919ull}},
+{{17772833509394146665ull, 7188070310607938603ull,
+ 490378924366049760ull, 3150620592024638649ull}},
+{{17604355868315295428ull, 8985087888259923254ull,
+ 5224659673884950104ull, 3938275740030798311ull}},
+{{6391036399269671738ull, 5615679930162452034ull,
+ 10182941323819175671ull, 2461422337519248944ull}},
+{{17212167535941865481ull, 2407913894275677138ull,
+ 12728676654773969589ull, 3076777921899061180ull}},
+{{12291837383072556043ull, 7621578386271984327ull,
+ 15910845818467461986ull, 3845972402373826475ull}},
+{{14599927392061429383ull, 9375172509847378108ull,
+ 7638435627328469789ull, 2403732751483641547ull}},
+{{18249909240076786729ull, 16330651655736610539ull,
+ 4936358515733199332ull, 3004665939354551934ull}},
+{{18200700531668595507ull, 1966570495961211558ull,
+ 15393820181521274974ull, 3755832424193189917ull}},
+{{6763751813865484288ull, 15064164615257920936ull,
+ 11926980622664490810ull, 2347395265120743698ull}},
+{{8454689767331855360ull, 9606833732217625362ull,
+ 5685353741475837705ull, 2934244081400929623ull}},
+{{1344990172310043392ull, 16620228183699419607ull,
+ 2495006158417409227ull, 3667805101751162029ull}},
+{{15516295770669717951ull, 16163599211196886604ull,
+ 7730443716449149438ull, 4584756377188952536ull}},
+{{474312819813797912ull, 5490563488570666224ull, 4831527322780718399ull,
+ 2865472735743095335ull}},
+{{592891024767247390ull, 2251518342285944876ull, 1427723135048510095ull,
+ 3581840919678869169ull}},
+{{741113780959059237ull, 16649455983139594807ull,
+ 6396339937238025522ull, 4477301149598586461ull}},
+{{7380725140740493879ull, 15017596007889634658ull,
+ 6303555469987459903ull, 2798313218499116538ull}},
+{{2534389070841541ull, 14160308991434655419ull, 17102816374339100687ull,
+ 3497891523123895672ull}},
+{{13838226041620715638ull, 13088700220865931369ull,
+ 2931776394214324243ull, 4372364403904869591ull}},
+{{1731362248371865418ull, 5874594628827513154ull,
+ 8749889274025034508ull, 2732727752440543494ull}},
+{{11387574847319607580ull, 7343243286034391442ull,
+ 1713989555676517327ull, 3415909690550679368ull}},
+{{5011096522294733667ull, 4567368089115601399ull,
+ 2142486944595646659ull, 4269887113188349210ull}},
+{{10049464354075290398ull, 548762046483556922ull,
+ 5950740358799667066ull, 2668679445742718256ull}},
+{{3338458405739337190ull, 9909324594959221961ull,
+ 7438425448499583832ull, 3335849307178397820ull}},
+{{8784759025601559391ull, 12386655743699027451ull,
+ 9298031810624479790ull, 4169811633972997275ull}},
+{{3184631381787280668ull, 3129973821384504253ull,
+ 3505426872426605917ull, 2606132271233123297ull}},
+{{8592475245661488738ull, 8524153295158018220ull,
+ 8993469608960645300ull, 3257665339041404121ull}},
+{{10740594057076860923ull, 10655191618947522775ull,
+ 15853523029628194529ull, 4072081673801755151ull}},
+{{13630400313314119933ull, 18188709807910671494ull,
+ 16825980921158703436ull, 2545051046126096969ull}},
+{{7814628354787874108ull, 4289143186178787752ull,
+ 7197418096166215584ull, 3181313807657621212ull}},
+{{9768285443484842635ull, 5361428982723484690ull,
+ 8996772620207769480ull, 3976642259572026515ull}},
+{{10716864420605414551ull, 3350893114202177931ull,
+ 3317139878416161973ull, 2485401412232516572ull}},
+{{8784394507329380285ull, 8800302411180110318ull,
+ 4146424848020202466ull, 3106751765290645715ull}},
+{{1757121097306949548ull, 1777005977120362090ull, 571345041597865179ull,
+ 3883439706613307144ull}},
+{{5709886704244231371ull, 17251529800196083970ull,
+ 357090650998665736ull, 2427149816633316965ull}},
+{{16360730417160065022ull, 3117668176535553346ull,
+ 5058049332175720075ull, 3033937270791646206ull}},
+{{11227540984595305470ull, 17732143275951605395ull,
+ 15545933702074425901ull, 3792421588489557757ull}},
+{{4711370106158371967ull, 13388432556683447324ull,
+ 12022051573010210140ull, 2370263492805973598ull}},
+{{5889212632697964958ull, 16735540695854309155ull,
+ 5804192429407986867ull, 2962829366007466998ull}},
+{{2749829772445068294ull, 16307739851390498540ull,
+ 16478612573614759392ull, 3703536707509333747ull}},
+{{10942015644632943492ull, 10192337407119061587ull,
+ 7993289849295530668ull, 2314710442193333592ull}},
+{{9065833537363791461ull, 12740421758898826984ull,
+ 9991612311619413335ull, 2893388052741666990ull}},
+{{11332291921704739326ull, 11313841180196145826ull,
+ 3266143352669490861ull, 3616735065927083738ull}},
+{{4941992865276148349ull, 307243419963018571ull,
+ 13306051227691639385ull, 4520918832408854672ull}},
+{{782902531583898766ull, 11721242183545356367ull,
+ 8316282017307274615ull, 2825574270255534170ull}},
+{{14813686219762037170ull, 10039866711004307554ull,
+ 1171980484779317461ull, 3531967837819417713ull}},
+{{9293735737847770654ull, 17161519407182772347ull,
+ 6076661624401534730ull, 4414959797274272141ull}},
+{{3502741826941162707ull, 15337635647916620621ull,
+ 6103756524464653158ull, 2759349873296420088ull}},
+{{8990113302103841287ull, 9948672523040999968ull,
+ 7629695655580816448ull, 3449187341620525110ull}},
+{{11237641627629801609ull, 12435840653801249960ull,
+ 313747532621244752ull, 4311484177025656388ull}},
+{{7023526017268626006ull, 7772400408625781225ull,
+ 9419464244743053778ull, 2694677610641035242ull}},
+{{13391093540013170411ull, 492128473927450723ull,
+ 2550958269074041415ull, 3368347013301294053ull}},
+{{12127180906589075110ull, 14450218647691477116ull,
+ 7800383854769939672ull, 4210433766626617566ull}},
+{{16802860103472947752ull, 9031386654807173197ull,
+ 263553890803824391ull, 2631521104141635979ull}},
+{{7168517074059020978ull, 6677547300081578593ull,
+ 14164500418786944201ull, 3289401380177044973ull}},
+{{13572332361001164126ull, 12958620143529361145ull,
+ 3870567468201516539ull, 4111751725221306217ull}},
+{{1565178697984645723ull, 5793294580492156764ull,
+ 13948319713694417597ull, 2569844828263316385ull}},
+{{1956473372480807154ull, 11853304244042583859ull,
+ 3600341586835858284ull, 3212306035329145482ull}},
+{{16280649770883172654ull, 14816630305053229823ull,
+ 13723799020399598663ull, 4015382544161431852ull}},
+{{17092935134443064765ull, 16177922968299350495ull,
+ 17800746424604524972ull, 2509614090100894907ull}},
+{{16754482899626443052ull, 1775659636664636503ull,
+ 17639247012328268312ull, 3137017612626118634ull}},
+{{16331417606105665911ull, 2219574545830795629ull,
+ 12825686728555559582ull, 3921272015782648293ull}},
+{{12512979013029735146ull, 15222292146426410980ull,
+ 10321897214560918690ull, 2450795009864155183ull}},
+{{15641223766287168933ull, 9804493146178237917ull,
+ 8290685499773760459ull, 3063493762330193979ull}},
+{{5716471652576797454ull, 7643930414295409493ull,
+ 5751670856289812670ull, 3829367202912742474ull}},
+{{5878637792074192361ull, 165770490507243029ull, 8206480303608520823ull,
+ 2393354501820464046ull}},
+{{11959983258520128355ull, 14042271168416217498ull,
+ 1034728342655875220ull, 2991693127275580058ull}},
+{{5726607036295384636ull, 17552838960520271873ull,
+ 10516782465174619833ull, 3739616409094475072ull}},
+{{15108344443753085158ull, 4052995322684088064ull,
+ 6572989040734137396ull, 2337260255684046920ull}},
+{{438686480981804831ull, 5066244153355110081ull, 8216236300917671745ull,
+ 2921575319605058650ull}},
+{{5160044119654643942ull, 10944491210121275505ull,
+ 1046923339292313873ull, 3651969149506323313ull}},
+{{11061741167995692832ull, 18292300031078982285ull,
+ 5920340192542780245ull, 4564961436882904141ull}},
+{{9219431239211001972ull, 13738530528638057880ull,
+ 6006055629552931605ull, 2853100898051815088ull}},
+{{11524289049013752465ull, 3338105105515408638ull,
+ 7507569536941164507ull, 3566376122564768860ull}},
+{{5181989274412414773ull, 18007689437176424510ull,
+ 9384461921176455633ull, 4457970153205961075ull}},
+{{17073801351789922945ull, 4337276870594183462ull,
+ 3559445691521590819ull, 2786231345753725672ull}},
+{{12118879652882627874ull, 809910069815341424ull,
+ 4449307114401988524ull, 3482789182192157090ull}},
+{{15148599566103284842ull, 1012387587269176780ull,
+ 14785005929857261463ull, 4353486477740196362ull}},
+{{244502691959777218ull, 7550271269684317344ull,
+ 13852314724588176318ull, 2720929048587622726ull}},
+{{305628364949721523ull, 214467050250620872ull, 8092021368880444590ull,
+ 3401161310734528408ull}},
+{{382035456187151903ull, 9491455849668051898ull,
+ 10115026711100555737ull, 4251451638418160510ull}},
+{{4850458178544357844ull, 17461374952111002196ull,
+ 1710205676010459431ull, 2657157274011350319ull}},
+{{6063072723180447305ull, 17215032671711364841ull,
+ 15972815150295238001ull, 3321446592514187898ull}},
+{{12190526922402947035ull, 7683732784357042339ull,
+ 10742646901014271694ull, 4151808240642734873ull}},
+{{5313236317288147945ull, 190646971795763558ull,
+ 18243369359202389569ull, 2594880150401709295ull}},
+{{15864917433464960739ull, 4849994733172092351ull,
+ 18192525680575599057ull, 3243600188002136619ull}},
+{{15219460773403813020ull, 10674179434892503343ull,
+ 18128971082292110917ull, 4054500235002670774ull}},
+{{16429692011018464993ull, 8977205156021508541ull,
+ 6718920908005181419ull, 2534062646876669234ull}},
+{{6702056958490917530ull, 6609820426599497773ull,
+ 17622023171861252582ull, 3167578308595836542ull}},
+{{12989257216541034816ull, 17485647570104148024ull,
+ 12804156927971789919ull, 3959472885744795678ull}},
+{{8118285760338146760ull, 17846058758956174371ull,
+ 3390912061554980795ull, 2474670553590497299ull}},
+{{5536171181995295546ull, 17695887430267830060ull,
+ 18073698132225889706ull, 3093338191988121623ull}},
+{{6920213977494119432ull, 12896487250980011767ull,
+ 17980436646854974229ull, 3866672739985152029ull}},
+{{11242662763574906501ull, 10366147541076201306ull,
+ 13543615913498052845ull, 2416670462490720018ull}},
+{{4829956417613857319ull, 17569370444772639537ull,
+ 7706147855017790248ull, 3020838078113400023ull}},
+{{10649131540444709552ull, 3514968982256247805ull,
+ 5020998800344849907ull, 3776047597641750029ull}},
+{{8961550221991637422ull, 18337756678406012542ull,
+ 5443967259429225143ull, 2360029748526093768ull}},
+{{1978565740634770970ull, 18310509829580127774ull,
+ 6804959074286531429ull, 2950037185657617210ull}},
+{{11696579212648239520ull, 9053079231692996005ull,
+ 17729570879712940095ull, 3687546482072021512ull}},
+{{785665960528135688ull, 6704663021188857103ull, 3715219525931623503ull,
+ 4609433102590026891ull}},
+{{7408570252971166661ull, 11107943415884117545ull, 16169194493570737ull,
+ 2880895689118766807ull}},
+{{13872398834641346230ull, 49871214572983219ull,
+ 13855269548399127134ull, 3601119611398458508ull}},
+{{12728812524874294884ull, 9285711055071004832ull,
+ 17319086935498908917ull, 4501399514248073135ull}},
+{{7955507828046434303ull, 8109412418633071972ull,
+ 17741958362327899929ull, 2813374696405045709ull}},
+{{9944384785058042878ull, 14748451541718727869ull,
+ 8342389897627711199ull, 3516718370506307137ull}},
+{{17042166999749941502ull, 13823878408721021932ull,
+ 15039673390462026903ull, 4395897963132883921ull}},
+{{1427982337988937631ull, 15557453033091720564ull,
+ 2482266841397684958ull, 2747436226958052451ull}},
+{{1784977922486172038ull, 10223444254509874897ull,
+ 16937891607029269910ull, 3434295283697565563ull}},
+{{6842908421535102952ull, 3555933281282567813ull,
+ 16560678490359199484ull, 4292869104621956954ull}},
+{{6582660772673133297ull, 11445830337656380691ull,
+ 14962110074901887581ull, 2683043190388723096ull}},
+{{3616639947414028717ull, 472229866788312152ull, 255893519917807861ull,
+ 3353803987985903871ull}},
+{{4520799934267535896ull, 5201973351912778094ull,
+ 14154924955179423538ull, 4192254984982379838ull}},
+{{16660558014199373647ull, 7862919363372874212ull,
+ 4235142078559751807ull, 2620159365613987399ull}},
+{{2378953444039665443ull, 5216963185788704862ull, 682241579772301855ull,
+ 3275199207017484249ull}},
+{{12197063841904357612ull, 1909517963808493173ull,
+ 5464487993142765223ull, 4093999008771855311ull}},
+{{9929007910403917459ull, 8110977755021390089ull,
+ 10332834023355310120ull, 2558749380482409569ull}},
+{{17022945906432284728ull, 10138722193776737611ull,
+ 17527728547621525554ull, 3198436725603011961ull}},
+{{16666996364612968006ull, 3450030705366146206ull,
+ 8074602629244743231ull, 3998045907003764952ull}},
+{{5805186709455717100ull, 9073798218494923235ull,
+ 5046626643277964519ull, 2498778691877353095ull}},
+{{2644797368392258471ull, 6730561754691266140ull,
+ 1696597285670067745ull, 3123473364846691369ull}},
+{{3305996710490323089ull, 13024888211791470579ull,
+ 6732432625514972585ull, 3904341706058364211ull}},
+{{18207149008552309595ull, 1223026104728587255ull,
+ 1901927381733163914ull, 2440213566286477632ull}},
+{{18147250242262999089ull, 10752154667765509877ull,
+ 2377409227166454892ull, 3050266957858097040ull}},
+{{8849004747546585149ull, 13440193334706887347ull,
+ 2971761533958068615ull, 3812833697322621300ull}},
+{{3224784958002921766ull, 15317649861832886448ull,
+ 11080722995578568692ull, 2383021060826638312ull}},
+{{4030981197503652208ull, 700318253581556444ull,
+ 13850903744473210866ull, 2978776326033297890ull}},
+{{5038726496879565260ull, 10098769853831721363ull,
+ 8090257643736737774ull, 3723470407541622363ull}},
+{{843361051336034336ull, 1700045140217437948ull, 2750568018121767157ull,
+ 2327169004713513977ull}},
+{{1054201314170042919ull, 6736742443699185339ull,
+ 8049896041079596850ull, 2908961255891892471ull}},
+{{15152809697994717361ull, 17644300091478757481ull,
+ 5450684032922108158ull, 3636201569864865589ull}},
+{{5105954067211232989ull, 12832003077493671044ull,
+ 11425041059580023102ull, 4545251962331081986ull}},
+{{12414593328861796426ull, 3408315905006156498ull,
+ 11752336680664902343ull, 2840782476456926241ull}},
+{{6294869624222469725ull, 18095452936539859335ull,
+ 855362795548964216ull, 3550978095571157802ull}},
+{{3256901011850699252ull, 4172572096965272553ull,
+ 10292575531290981079ull, 4438722619463947252ull}},
+{{13564778178475156793ull, 9525386588244377201ull,
+ 15656231743911638982ull, 2774201637164967032ull}},
+{{3120914667811782279ull, 2683361198450695694ull,
+ 1123545606179997112ull, 3467752046456208791ull}},
+{{13124515371619503656ull, 3354201498063369617ull,
+ 15239490063007160102ull, 4334690058070260988ull}},
+{{1285293079621107929ull, 15931433991571769723ull,
+ 301309252524699255ull, 2709181286293913118ull}},
+{{15441674404808548624ull, 15302606471037324249ull,
+ 9600008602510649877ull, 3386476607867391397ull}},
+{{5467034950728522067ull, 5293200033514491600ull,
+ 16611696771565700251ull, 4233095759834239246ull}},
+{{3416896844205326292ull, 1002407011732863298ull,
+ 5770624463801174753ull, 2645684849896399529ull}},
+{{13494493092111433673ull, 5864694783093467026ull,
+ 11824966598178856345ull, 3307106062370499411ull}},
+{{7644744328284516283ull, 11942554497294221687ull,
+ 10169522229296182527ull, 4133882577963124264ull}},
+{{11695494232818904533ull, 14381625588449970410ull,
+ 6355951393310114079ull, 2583676611226952665ull}},
+{{5395995754168854858ull, 13365345967135075109ull,
+ 12556625260065030503ull, 3229595764033690831ull}},
+{{11356680711138456477ull, 12094996440491455982ull,
+ 11084095556653900225ull, 4036994705042113539ull}},
+{{2486239426034147394ull, 641843747666078133ull, 4621716713694993689ull,
+ 2523121690651320962ull}},
+{{7719485300970072147ull, 5413990703009985570ull,
+ 15000517928973517919ull, 3153902113314151202ull}},
+{{425984589357814375ull, 2155802360335094059ull, 9527275374362121591ull,
+ 3942377641642689003ull}},
+{{16407141432844491649ull, 8264905502850515642ull,
+ 3648704099762632042ull, 2463986026026680627ull}},
+{{11285554754200838753ull, 1107759841708368745ull,
+ 18395938179985453765ull, 3079982532533350783ull}},
+{{271885387468884729ull, 5996385820562848836ull,
+ 18383236706554429302ull, 3849978165666688479ull}},
+{{9393300404022828764ull, 17582799193133944234ull,
+ 18407051969237600169ull, 2406236353541680299ull}},
+{{2518253468173760147ull, 8143440936135266581ull,
+ 18397128943119612308ull, 3007795441927100374ull}},
+{{7759502853644588087ull, 10179301170169083226ull,
+ 13773039142044739577ull, 3759744302408875468ull}},
+{{9461375301955255459ull, 17891278277424146776ull,
+ 17831521500632738043ull, 2349840189005547167ull}},
+{{11826719127444069323ull, 17752411828352795566ull,
+ 17677715857363534650ull, 2937300236256933959ull}},
+{{5560026872450310846ull, 12967142748586218650ull,
+ 17485458803277030409ull, 3671625295321167449ull}},
+{{16173405627417664365ull, 2373870380450609600ull,
+ 8021765448814124300ull, 4589531619151459312ull}},
+{{10108378517136040228ull, 10707041024636406808ull,
+ 5013603405508827687ull, 2868457261969662070ull}},
+{{12635473146420050285ull, 8772115262368120606ull,
+ 15490376293740810417ull, 3585571577462077587ull}},
+{{6570969396170287049ull, 15576830096387538662ull,
+ 14751284348748625117ull, 4481964471827596984ull}},
+{{17941913927888593118ull, 12041361819455905615ull,
+ 9219552717967890698ull, 2801227794892248115ull}},
+{{17815706391433353493ull, 5828330237465106211ull,
+ 6912754879032475469ull, 3501534743615310144ull}},
+{{17657946970864303962ull, 11897098815258770668ull,
+ 8640943598790594336ull, 4376918429519137680ull}},
+{{1812844819935414168ull, 7435686759536731668ull,
+ 5400589749244121460ull, 2735574018449461050ull}},
+{{2266056024919267710ull, 9294608449420914585ull,
+ 15974109223409927633ull, 3419467523061826312ull}},
+{{7444256049576472542ull, 16229946580203531135ull,
+ 1520892455552857925ull, 4274334403827282891ull}},
+{{11570189058626377195ull, 12449559621840900911ull,
+ 17091458849216393867ull, 2671459002392051806ull}},
+{{9851050304855583589ull, 10950263508873738235ull,
+ 12140951524665716526ull, 3339323752990064758ull}},
+{{7702126862642091583ull, 4464457349237396986ull,
+ 5952817368977369850ull, 4174154691237580948ull}},
+{{9425515307578695143ull, 7401971861700761020ull,
+ 12943882892465631964ull, 2608846682023488092ull}},
+{{11781894134473368929ull, 9252464827125951275ull,
+ 16179853615582039955ull, 3261058352529360115ull}},
+{{10115681649664323257ull, 6953895015480051190ull,
+ 15613131001050162040ull, 4076322940661700144ull}},
+{{1710615012612814132ull, 4346184384675031994ull,
+ 9758206875656351275ull, 2547701837913562590ull}},
+{{11361640802620793473ull, 821044462416402088ull,
+ 2974386557715663286ull, 3184627297391953238ull}},
+{{14202051003275991841ull, 10249677614875278418ull,
+ 12941355233999354915ull, 3980784121739941547ull}},
+{{13487967895474882805ull, 4100205500083355059ull,
+ 5782504012035902870ull, 2487990076087463467ull}},
+{{12248273850916215602ull, 14348628911958969632ull,
+ 2616443996617490683ull, 3109987595109329334ull}},
+{{15310342313645269502ull, 13324100121521324136ull,
+ 12493927032626639162ull, 3887484493886661667ull}},
+{{9568963946028293439ull, 12939248594378215489ull,
+ 5502861386177955524ull, 2429677808679163542ull}},
+{{16572890950962754703ull, 16174060742972769361ull,
+ 16101948769577220213ull, 3037097260848954427ull}},
+{{6881055633421279666ull, 6382517873433797990ull,
+ 15515749943544137363ull, 3796371576061193034ull}},
+{{18135717826170463503ull, 1683230661682429791ull,
+ 14309029733142473756ull, 2372732235038245646ull}},
+{{18057961264285691475ull, 2104038327103037239ull,
+ 8662915129573316387ull, 2965915293797807058ull}},
+{{17960765561929726440ull, 16465105964160960261ull,
+ 1605271875111869675ull, 3707394117247258823ull}},
+{{13531321485419772977ull, 7984848218386906211ull,
+ 7920823949586000403ull, 2317121323279536764ull}},
+{{12302465838347328317ull, 5369374254556244860ull,
+ 9901029936982500504ull, 2896401654099420955ull}},
+{{15378082297934160396ull, 6711717818195306075ull,
+ 7764601402800737726ull, 3620502067624276194ull}},
+{{14610916853990312591ull, 17613019309598908402ull,
+ 482379716646146349ull, 4525627584530345243ull}},
+{{13743509052171333274ull, 13313980077713011703ull,
+ 16442388387399699132ull, 2828517240331465776ull}},
+{{12567700296786778688ull, 16642475097141264629ull,
+ 2106241410540072299ull, 3535646550414332221ull}},
+{{1874567315701309648ull, 16191407852999192883ull,
+ 7244487781602478278ull, 4419558188017915276ull}},
+{{17312505636809176194ull, 5507943889697107647ull,
+ 13751176900356324732ull, 2762223867511197047ull}},
+{{17028946027584082339ull, 6884929862121384559ull,
+ 12577285107018018011ull, 3452779834388996309ull}},
+{{16674496516052715019ull, 3994476309224342795ull,
+ 1886548328490358802ull, 4315974792986245387ull}},
+{{8115717313319252935ull, 7108233711692602151ull,
+ 17319993769802331915ull, 2697484245616403366ull}},
+{{5532960623221678265ull, 4273606121188364785ull,
+ 12426620175398139086ull, 3371855307020504208ull}},
+{{11527886797454485735ull, 14565379688340231789ull,
+ 15533275219247673857ull, 4214819133775630260ull}},
+{{9510772257622747537ull, 2185833277571563012ull, 484924975175020353ull,
+ 2634261958609768913ull}},
+{{11888465322028434421ull, 7343977615391841669ull,
+ 5217842237396163345ull, 3292827448262211141ull}},
+{{1025523597253379314ull, 13791658037667189991ull,
+ 11133988815172592085ull, 4116034310327763926ull}},
+{{7558481275924443927ull, 10925629282755687696ull,
+ 2347056991055482149ull, 2572521443954852454ull}},
+{{9448101594905554909ull, 18268722621871997524ull,
+ 12157193275674128494ull, 3215651804943565567ull}},
+{{11810126993631943636ull, 13612531240485221097ull,
+ 10584805576165272714ull, 4019564756179456959ull}},
+{{463800343378882917ull, 13119518043730651090ull,
+ 13533032512744377302ull, 2512227972612160599ull}},
+{{9803122466078379454ull, 7176025517808538054ull,
+ 12304604622503083724ull, 3140284965765200749ull}},
+{{3030531045743198509ull, 8970031897260672568ull,
+ 1545697722846690943ull, 3925356207206500937ull}},
+{{1894081903589499068ull, 12523798963429002211ull,
+ 12495276122847651599ull, 2453347629504063085ull}},
+{{16202660434769037547ull, 11043062685858864859ull,
+ 1784037098277400787ull, 3066684536880078857ull}},
+{{15641639525033909030ull, 9192142338896193170ull,
+ 6841732391274138888ull, 3833355671100098571ull}},
+{{14387710721573581048ull, 5745088961810120731ull,
+ 1970239735332642853ull, 2395847294437561607ull}},
+{{13372952383539588406ull, 11793047220690038818ull,
+ 16297857724447967278ull, 2994809118046952008ull}},
+{{7492818442569709699ull, 5517936989007772715ull,
+ 1925578081850407482ull, 3743511397558690011ull}},
+{{2377168517392374610ull, 8060396636557245851ull,
+ 17344387365652362340ull, 2339694623474181256ull}},
+{{16806518702022631975ull, 10075495795696557313ull,
+ 3233740133355901309ull, 2924618279342726571ull}},
+{{7173090322246126256ull, 17206055763048084546ull,
+ 17877233221977040348ull, 3655772849178408213ull}},
+{{18189734939662433628ull, 3060825630100554066ull,
+ 8511483472189136724ull, 4569716061473010267ull}},
+{{15980270355716408922ull, 11136388055667622099ull,
+ 3013834160904516500ull, 2856072538420631417ull}},
+{{15363651926218123248ull, 13920485069584527624ull,
+ 8378978719558033529ull, 3570090673025789271ull}},
+{{757820834063102444ull, 3565548281698495819ull, 5862037381020154008ull,
+ 4462613341282236589ull}},
+{{16614539085785296692ull, 2228467676061559886ull,
+ 5969616372351290207ull, 2789133338301397868ull}},
+{{11544801820376845056ull, 16620642650359113570ull,
+ 7462020465439112758ull, 3486416672876747335ull}},
+{{5207630238616280512ull, 11552431276094116155ull,
+ 4715839563371503044ull, 4358020841095934169ull}},
+{{948925889921481368ull, 16443641584413598405ull,
+ 14476614773175659162ull, 2723763025684958855ull}},
+{{5797843380829239614ull, 11331179943662222198ull,
+ 13484082448042186049ull, 3404703782106198569ull}},
+{{16470676262891325326ull, 328916874295614035ull,
+ 3020045004770568850ull, 4255879727632748212ull}},
+{{7988329655093384377ull, 4817259064862146676ull,
+ 11110900164836381339ull, 2659924829770467632ull}},
+{{9985412068866730471ull, 1409887812650295441ull,
+ 13888625206045476674ull, 3324906037213084540ull}},
+{{17093451104510800992ull, 10985731802667645109ull,
+ 17360781507556845842ull, 4156132546516355675ull}},
+{{12989249949532944572ull, 11477768395094666097ull,
+ 8544645433009334699ull, 2597582841572722297ull}},
+{{2401504381634017003ull, 9735524475440944718ull,
+ 15292492809689056278ull, 3246978551965902871ull}},
+{{12225252513897297062ull, 2946033557446405089ull,
+ 14503929993683932444ull, 4058723189957378589ull}},
+{{723253793544728808ull, 11064643010258778989ull,
+ 11370799255266151729ull, 2536701993723361618ull}},
+{{5515753260358298914ull, 18442489781250861640ull,
+ 4990127032227913853ull, 3170877492154202023ull}},
+{{6894691575447873642ull, 9218054171281413338ull,
+ 1625972771857504413ull, 3963596865192752529ull}},
+{{8920868253082308931ull, 8067126866264577288ull,
+ 12545448028479410018ull, 2477248040745470330ull}},
+{{11151085316352886163ull, 860536545975945802ull,
+ 6458437998744486715ull, 3096560050931837913ull}},
+{{4715484608586331896ull, 14910728737752095965ull,
+ 12684733516857996297ull, 3870700063664797391ull}},
+{{5253020889580151387ull, 2401676433453978122ull,
+ 14845487475677329542ull, 2419187539790498369ull}},
+{{15789648148829965042ull, 12225467578672248460ull,
+ 4721801289314498215ull, 3023984424738122962ull}},
+{{1290316112327904686ull, 10670148454912922672ull,
+ 15125623648497898577ull, 3779980530922653702ull}},
+{{806447570204940429ull, 18198057830389046430ull,
+ 4841828761883798706ull, 2362487831826658564ull}},
+{{10231431499610951344ull, 13524200251131532229ull,
+ 6052285952354748383ull, 2953109789783323205ull}},
+{{17400975392941077084ull, 12293564295487027382ull,
+ 12177043458870823383ull, 3691387237229154006ull}},
+{{6263923602160785274ull, 14601006712320473970ull,
+ 2998966143366876710ull, 2307117023268221254ull}},
+{{17053276539555757400ull, 9027886353545816654ull,
+ 12972079716063371696ull, 2883896279085276567ull}},
+{{12093223637589920942ull, 11284857941932270818ull,
+ 11603413626651826716ull, 3604870348856595709ull}},
+{{5893157510132625369ull, 14106072427415338523ull,
+ 669208978032619683ull, 4506087936070744637ull}},
+{{1377380434619196904ull, 6510452257920892625ull,
+ 2724098620484081254ull, 2816304960044215398ull}},
+{{6333411561701384034ull, 17361437359255891589ull,
+ 12628495312459877375ull, 3520381200055269247ull}},
+{{12528450470554117946ull, 17090110680642476582ull,
+ 11173933122147458815ull, 4400476500069086559ull}},
+{{3218595525668935812ull, 17598848203042629720ull,
+ 13901237228983243615ull, 2750297812543179099ull}},
+{{4023244407086169765ull, 17386874235375899246ull,
+ 12764860517801666615ull, 3437872265678973874ull}},
+{{14252427545712488015ull, 17121906775792486153ull,
+ 6732703610397307461ull, 4297340332098717343ull}},
+{{1990238188429223153ull, 13007034744083997798ull,
+ 11125468784139399019ull, 2685837707561698339ull}},
+{{11711169772391304750ull, 11647107411677609343ull,
+ 9295149961746860870ull, 3357297134452122924ull}},
+{{10027276197061743033ull, 5335512227742235871ull,
+ 11618937452183576088ull, 4196621418065153655ull}},
+{{13184576650804671252ull, 3334695142338897419ull,
+ 14179364935255816911ull, 2622888386290721034ull}},
+{{11869034795078451161ull, 18003426983205785486ull,
+ 8500834132214995330ull, 3278610482863401293ull}},
+{{5612921456993288143ull, 13280911692152456050ull,
+ 15237728683696132067ull, 4098263103579251616ull}},
+{{8119761929048192993ull, 5994726798381591079ull,
+ 9523580427310082542ull, 2561414439737032260ull}},
+{{5538016392882853338ull, 16716780534831764657ull,
+ 11904475534137603177ull, 3201768049671290325ull}},
+{{11534206509530954576ull, 7060917613257542109ull,
+ 1045536362389840260ull, 4002210062089112907ull}},
+{{9514722077670540562ull, 13636445545140739626ull,
+ 16794361290989507826ull, 2501381288805695566ull}},
+{{2670030560233399894ull, 7822184894571148725ull,
+ 11769579576882108975ull, 3126726611007119458ull}},
+{{7949224218719137772ull, 5166045099786548002ull,
+ 5488602434247860411ull, 3908408263758899323ull}},
+{{9579951155126849012ull, 922935178152898549ull, 1124533512191218805ull,
+ 2442755164849312077ull}},
+{{16586624962335949168ull, 5765354991118511090ull,
+ 6017352908666411410ull, 3053443956061640096ull}},
+{{11509909166065160652ull, 16430065775752914671ull,
+ 7521691135833014262ull, 3816804945077050120ull}},
+{{14111222256431807264ull, 5657105091418183765ull,
+ 4701056959895633914ull, 2385503090673156325ull}},
+{{3803969765257595368ull, 16294753401127505515ull,
+ 10488007218296930296ull, 2981878863341445406ull}},
+{{143276188144606306ull, 1921697677699830278ull, 3886636986016387063ull,
+ 3727348579176806758ull}},
+{{13924605672872542653ull, 8118590076203475779ull,
+ 16264206171542405626ull, 2329592861985504223ull}},
+{{12794071072663290412ull, 924865558399568916ull,
+ 15718571696000619129ull, 2911991077481880279ull}},
+{{15992588840829113015ull, 5767767966426849049ull,
+ 15036528601573386007ull, 3639988846852350349ull}},
+{{6155677995754227557ull, 2598023939606173408ull,
+ 4960602696684568797ull, 4549986058565437937ull}},
+{{3847298747346392223ull, 3929607971467552332ull,
+ 14629591731496325258ull, 2843741286603398710ull}},
+{{4809123434182990279ull, 14135382001189216223ull,
+ 9063617627515630764ull, 3554676608254248388ull}},
+{{1399718274301349945ull, 17669227501486520279ull,
+ 11329522034394538455ull, 4443345760317810485ull}},
+{{7792352949079425572ull, 17960796216070157030ull,
+ 9386794280710280486ull, 2777091100198631553ull}},
+{{517069149494506156ull, 13227623233232920480ull,
+ 16345178869315238512ull, 3471363875248289441ull}},
+{{646336436868132695ull, 16534529041541150600ull,
+ 6596415531361884428ull, 4339204844060361802ull}},
+{{403960273042582935ull, 1110708614108443317ull, 8734445725528565672ull,
+ 2712003027537726126ull}},
+{{5116636359730616572ull, 1388385767635554146ull,
+ 1694685120055931282ull, 3390003784422157658ull}},
+{{15619167486518046523ull, 10958854246399218490ull,
+ 11341728436924689910ull, 4237504730527697072ull}},
+{{14373665697501166981ull, 2237597885572123652ull,
+ 7088580273077931194ull, 2648440456579810670ull}},
+{{17967082121876458726ull, 12020369393819930373ull,
+ 18084097378202189800ull, 3310550570724763337ull}},
+{{8623794597063409696ull, 15025461742274912967ull,
+ 8770063667470573538ull, 4138188213405954172ull}},
+{{12307400650805712916ull, 14002599607349208508ull,
+ 14704661829023884269ull, 2586367633378721357ull}},
+{{15384250813507141145ull, 3668191453904346923ull,
+ 4545769230997691625ull, 3232959541723401697ull}},
+{{14618627498456538527ull, 9196925335807821558ull,
+ 10293897557174502435ull, 4041199427154252121ull}},
+{{4524956168107948676ull, 3442235325666194522ull,
+ 17962901019302533782ull, 2525749641971407575ull}},
+{{14879567246989711652ull, 13526166193937518960ull,
+ 17841940255700779323ull, 3157187052464259469ull}},
+{{152714985027587949ull, 12296021723994510797ull,
+ 8467367264343810442ull, 3946483815580324337ull}},
+{{2401289874855936421ull, 12296699595923957152ull,
+ 16821319586283351286ull, 2466552384737702710ull}},
+{{3001612343569920526ull, 6147502458050170632ull,
+ 11803277445999413300ull, 3083190480922128388ull}},
+{{3752015429462400657ull, 7684378072562713290ull,
+ 14754096807499266625ull, 3853988101152660485ull}},
+{{6956695661841388315ull, 16331951341420165566ull,
+ 11527153513900735592ull, 2408742563220412803ull}},
+{{17919241614156511201ull, 1968195103065655341ull,
+ 9797255873948531587ull, 3010928204025516004ull}},
+{{8563993962413475290ull, 16295301934114232889ull,
+ 12246569842435664483ull, 3763660255031895005ull}},
+{{16881711272576891816ull, 7878720699607701603ull,
+ 9959949160735984254ull, 2352287659394934378ull}},
+{{16490453072293726866ull, 625028837654851196ull,
+ 3226564414065204510ull, 2940359574243667973ull}},
+{{2166322266657606966ull, 10004658083923339804ull,
+ 8644891536008893541ull, 3675449467804584966ull}},
+{{2707902833322008708ull, 17117508623331562659ull,
+ 1582742383156341118ull, 4594311834755731208ull}},
+{{17833340335322113107ull, 6086756871154838757ull,
+ 989213989472713199ull, 2871444896722332005ull}},
+{{8456617363870477671ull, 2996760070516160543ull,
+ 5848203505268279403ull, 3589306120902915006ull}},
+{{5959085686410709185ull, 17581008143427364391ull,
+ 16533626418440125061ull, 4486632651128643757ull}},
+{{10641957581647775097ull, 13293973098855796696ull,
+ 12639359520738772115ull, 2804145406955402348ull}},
+{{13302446977059718871ull, 12005780355142357966ull,
+ 15799199400923465144ull, 3505181758694252935ull}},
+{{7404686684469872780ull, 15007225443927947458ull,
+ 15137313232726943526ull, 4381477198367816169ull}},
+{{9239615196221058392ull, 4767829884027579257ull,
+ 2543291742813257848ull, 2738423248979885106ull}},
+{{16161205013703710894ull, 5959787355034474071ull,
+ 12402486715371348118ull, 3423029061224856382ull}},
+{{15589820248702250713ull, 16673106230647868397ull,
+ 6279736357359409339ull, 4278786326531070478ull}},
+{{12049480664652600648ull, 8114848384941223796ull,
+ 17759893278631794549ull, 2674241454081919048ull}},
+{{15061850830815750810ull, 14755246499603917649ull,
+ 3753122524580191570ull, 3342801817602398811ull}},
+{{4992255483237524800ull, 9220686087650121254ull, 79717137297851559ull,
+ 4178502272002998514ull}},
+{{16955217732305616712ull, 12680457832422407639ull,
+ 4661509229238545128ull, 2611563920001874071ull}},
+{{16582336146954632986ull, 15850572290528009549ull,
+ 1215200518120793506ull, 3264454900002342589ull}},
+{{6892862128411127521ull, 10589843326305236129ull,
+ 6130686666078379787ull, 4080568625002928236ull}},
+{{15837253876325424461ull, 4312809069727078628ull,
+ 13055051203153763175ull, 2550355390626830147ull}},
+{{1349823271697228960ull, 779325318731460382ull,
+ 11707127985514816065ull, 3187944238283537684ull}},
+{{10910651126476312007ull, 5585842666841713381ull,
+ 14633909981893520081ull, 3984930297854422105ull}},
+{{9124999963261388957ull, 15020366712844540623ull,
+ 2228664711042368194ull, 2490581436159013816ull}},
+{{6794563935649348292ull, 9552086354200899971ull,
+ 2785830888802960243ull, 3113226795198767270ull}},
+{{3881518901134297461ull, 7328421924323737060ull,
+ 12705660647858476112ull, 3891533493998459087ull}},
+{{11649321350063711721ull, 4580263702702335662ull,
+ 14858566932552629426ull, 2432208433749036929ull}},
+{{5338279650724863843ull, 14948701665232695386ull,
+ 4738150610408623070ull, 3040260542186296162ull}},
+{{15896221600260855612ull, 9462505044686093424ull,
+ 15146060299865554646ull, 3800325677732870202ull}},
+{{9935138500163034758ull, 1302379634501420486ull,
+ 14077973705843359558ull, 2375203548583043876ull}},
+{{3195551088349017639ull, 10851346579981551416ull,
+ 17597467132304199447ull, 2969004435728804845ull}},
+{{3994438860436272048ull, 8952497206549551366ull,
+ 8161775860098085597ull, 3711255544661006057ull}},
+{{16331582343054833742ull, 7901153763307163555ull,
+ 16630324958629773258ull, 2319534715413128785ull}},
+{{15802791910391154274ull, 653070167279178636ull,
+ 6952848143005052861ull, 2899418394266410982ull}},
+{{1306745814279391226ull, 5428023727526361200ull,
+ 17914432215611091884ull, 3624272992833013727ull}},
+{{1633432267849239033ull, 6785029659407951500ull,
+ 17781354251086476951ull, 4530341241041267159ull}},
+{{10244267204260550204ull, 11158172564771051543ull,
+ 18030875434570129950ull, 2831463275650791974ull}},
+{{8193647986898299851ull, 4724343669109038621ull,
+ 13315222256357886630ull, 3539329094563489968ull}},
+{{14853746002050262717ull, 15128801623241074084ull,
+ 16644027820447358287ull, 4424161368204362460ull}},
+{{60219214426638390ull, 16373030042166753159ull, 1179145350924823121ull,
+ 2765100855127726538ull}},
+{{13910332073315461700ull, 6631229497426277736ull,
+ 10697303725510804710ull, 3456376068909658172ull}},
+{{17387915091644327125ull, 17512408908637622978ull,
+ 13371629656888505887ull, 4320470086137072715ull}},
+{{15479132950705092357ull, 17862784595539596217ull,
+ 6051425526341622227ull, 2700293803835670447ull}},
+{{5513858133099201734ull, 17716794725997107368ull,
+ 2952595889499639880ull, 3375367254794588059ull}},
+{{6892322666374002168ull, 3699249333786832594ull,
+ 17525802917156713563ull, 4219209068493235073ull}},
+{{8919387684911139259ull, 6187824403076419ull, 4036097795581864121ull,
+ 2637005667808271921ull}},
+{{6537548587711536170ull, 4619420798931233428ull,
+ 9656808262904718055ull, 3296257084760339901ull}},
+{{8171935734639420212ull, 1162589980236653881ull,
+ 16682696347058285473ull, 4120321355950424876ull}},
+{{16636674880218107393ull, 12255833783716378435ull,
+ 1203313180056652612ull, 2575200847469015548ull}},
+{{16184157581845246337ull, 15319792229645473044ull,
+ 1504141475070815765ull, 3219001059336269435ull}},
+{{1783452903597006305ull, 5314682231774677594ull,
+ 15715234899120683419ull, 4023751324170336793ull}},
+{{5726344083175516845ull, 1015833385645479544ull,
+ 2904492784309345281ull, 2514844577606460496ull}},
+{{7157930103969396056ull, 5881477750484237334ull,
+ 3630615980386681601ull, 3143555722008075620ull}},
+{{18170784666816520877ull, 11963533206532684571ull,
+ 4538269975483352001ull, 3929444652510094525ull}},
+{{9050897407546631597ull, 559679226441846001ull, 5142261743890788953ull,
+ 2455902907818809078ull}},
+{{15925307777860677400ull, 5311285051479695405ull,
+ 15651199216718261999ull, 3069878634773511347ull}},
+{{6071576667043683037ull, 2027420295922231353ull,
+ 14952313002470439595ull, 3837348293466889184ull}},
+{{15323950462970771659ull, 17408038749447252259ull,
+ 9345195626544024746ull, 2398342683416805740ull}},
+{{14543252060286076669ull, 12536676399954289516ull,
+ 11681494533180030933ull, 2997928354271007175ull}},
+{{18179065075357595836ull, 1835787444660698183ull,
+ 9990182148047650763ull, 3747410442838758969ull}},
+{{18279444699739579254ull, 17288268217408794028ull,
+ 17773078888598251486ull, 2342131526774224355ull}},
+{{4402561800964922451ull, 12386963234906216728ull,
+ 17604662592320426454ull, 2927664408467780444ull}},
+{{5503202251206153064ull, 6260332006777995102ull,
+ 3559084166690981452ull, 3659580510584725556ull}},
+{{16102374850862467138ull, 7825415008472493877ull,
+ 4448855208363726815ull, 4574475638230906945ull}},
+{{12369827291002735913ull, 11808413407936390529ull,
+ 14309749551295799019ull, 2859047273894316840ull}},
+{{1627226058471256179ull, 10148830741493100258ull,
+ 17887186939119748774ull, 3573809092367896050ull}},
+{{11257404609943846032ull, 3462666390011599514ull,
+ 13135611637044910160ull, 4467261365459870063ull}},
+{{11647563899642291674ull, 2164166493757249696ull,
+ 15127286300794150706ull, 2792038353412418789ull}},
+{{14559454874552864593ull, 11928580154051337928ull,
+ 5074049820710524670ull, 3490047941765523487ull}},
+{{18199318593191080741ull, 5687353155709396602ull,
+ 1730876257460767934ull, 4362559927206904359ull}},
+{{15986260139171813367ull, 17389653777600536588ull,
+ 7999326688554061814ull, 2726599954504315224ull}},
+{{1536081100255215093ull, 12513695185145894928ull,
+ 9999158360692577268ull, 3408249943130394030ull}},
+{{1920101375319018866ull, 15642118981432368660ull,
+ 3275575914010945777ull, 4260312428912992538ull}},
+{{10423435396429162599ull, 2858795335754148556ull,
+ 6658920964684229015ull, 2662695268070620336ull}},
+{{13029294245536453249ull, 17408552224974849407ull,
+ 8323651205855286268ull, 3328369085088275420ull}},
+{{11674931788493178657ull, 3313946207509010143ull,
+ 10404564007319107836ull, 4160461356360344275ull}},
+{{14214361395449318517ull, 11294588416547907147ull,
+ 4197009495360748445ull, 2600288347725215172ull}},
+{{13156265725884260242ull, 283177465402720222ull,
+ 5246261869200935557ull, 3250360434656518965ull}},
+{{7221960120500549494ull, 4965657850180788182ull,
+ 11169513354928557350ull, 4062950543320648706ull}},
+{{18348783130595007146ull, 16938594211645156325ull,
+ 11592631865257736247ull, 2539344089575405441ull}},
+{{9100920857961595221ull, 16561556746129057503ull,
+ 655731776290006597ull, 3174180111969256802ull}},
+{{6764465054024606122ull, 6866887877379158167ull,
+ 10043036757217284055ull, 3967725139961571002ull}},
+{{11145319686406460682ull, 11209333951003055710ull,
+ 10888583991688190438ull, 2479828212475981876ull}},
+{{4708277571153300045ull, 4788295401899043830ull,
+ 13610729989610238048ull, 3099785265594977345ull}},
+{{15108719000796400864ull, 5985369252373804787ull,
+ 3178354431730633848ull, 3874731581993721682ull}},
+{{7137106366284056588ull, 3740855782733627992ull,
+ 6598157538259034059ull, 2421707238746076051ull}},
+{{8921382957855070735ull, 64383709989647086ull, 3636010904396404670ull,
+ 3027134048432595064ull}},
+{{1928356660464062610ull, 9303851674341834666ull,
+ 4545013630495505837ull, 3783917560540743830ull}},
+{{5816908931217427036ull, 8120750305677340618ull,
+ 16675691574341854860ull, 2364948475337964893ull}},
+{{16494508200876559603ull, 10150937882096675772ull,
+ 7009556412645154863ull, 2956185594172456117ull}},
+{{2171391177386147887ull, 8076986334193456812ull,
+ 13373631534233831483ull, 3695231992715570146ull}},
+{{10580491522721118238ull, 2742273449657216555ull,
+ 12970205727323532581ull, 2309519995447231341ull}},
+{{8613928384974009893ull, 8039527830498908598ull,
+ 2377699103872252014ull, 2886899994309039177ull}},
+{{1544038444362736558ull, 826037751268859940ull, 7583809898267702922ull,
+ 3608624992886298971ull}},
+{{1930048055453420697ull, 10255919225940850733ull,
+ 4868076354407240748ull, 4510781241107873714ull}},
+{{3512123043872081888ull, 15633321553067807516ull,
+ 7654233739931913371ull, 2819238275692421071ull}},
+{{4390153804840102360ull, 14929965922907371491ull,
+ 4956106156487503810ull, 3524047844615526339ull}},
+{{876006237622740046ull, 9439085366779438556ull, 1583446677181991859ull,
+ 4405059805769407924ull}},
+{{9770875935368988337ull, 3593585345023455145ull,
+ 10213026210093520720ull, 2753162378605879952ull}},
+{{16825280937638623325ull, 4491981681279318931ull,
+ 12766282762616900900ull, 3441452973257349940ull}},
+{{16419915153620891252ull, 5614977101599148664ull,
+ 15957853453271126125ull, 4301816216571687425ull}},
+{{10262446971013057033ull, 5815203697713161867ull,
+ 3056129380653371972ull, 2688635135357304641ull}},
+{{8216372695338933387ull, 7269004622141452334ull,
+ 8431847744244102869ull, 3360793919196630801ull}},
+{{1047093832318890925ull, 13697941796104203322ull,
+ 15151495698732516490ull, 4200992398995788501ull}},
+{{5266119663626694732ull, 13172899640992514980ull,
+ 11775527820921516758ull, 2625620249372367813ull}},
+{{6582649579533368415ull, 7242752514385867917ull, 884351720869732236ull,
+ 3282025311715459767ull}},
+{{12839997992844098423ull, 9053440642982334896ull,
+ 14940497706369329007ull, 4102531639644324708ull}},
+{{8024998745527561515ull, 12575929429505041166ull,
+ 114439029626054821ull, 2564082274777702943ull}},
+{{807876395054676085ull, 1884853731599137746ull,
+ 13978106842314732239ull, 3205102843472128678ull}},
+{{10233217530673120914ull, 16191125219781085894ull,
+ 8249261516038639490ull, 4006378554340160848ull}},
+{{1784074938243312668ull, 14731139280790566588ull,
+ 5155788447524149681ull, 2503986596462600530ull}},
+{{2230093672804140834ull, 4578866045706044523ull,
+ 15668107596259962910ull, 3129983245578250662ull}},
+{{16622675146287339755ull, 14946954593987331461ull,
+ 10361762458470177829ull, 3912479056972813328ull}},
+{{12695014975643281299ull, 11647689630455776115ull,
+ 6476101536543861143ull, 2445299410608008330ull}},
+{{11257082701126713720ull, 9947926019642332240ull,
+ 17318498957534602237ull, 3056624263260010412ull}},
+{{14071353376408392149ull, 17046593542980303204ull,
+ 3201379623208701180ull, 3820780329075013016ull}},
+{{18017967897110020902ull, 1430748927507913694ull,
+ 2000862264505438238ull, 2387987705671883135ull}},
+{{13299087834532750319ull, 11011808196239667926ull,
+ 16336135885913961509ull, 2984984632089853918ull}},
+{{7400487756311162090ull, 18376446263726972812ull,
+ 11196797820537676078ull, 3731230790112317398ull}},
+{{13848676884549252115ull, 6873592896401970103ull,
+ 2386312619408659645ull, 2332019243820198374ull}},
+{{12699160087259177239ull, 13203677138929850533ull,
+ 12206262811115600364ull, 2915024054775247967ull}},
+{{2038892053791807837ull, 16504596423662313167ull,
+ 10646142495467112551ull, 3643780068469059959ull}},
+{{16383673122521923508ull, 16019059511150503554ull,
+ 8695992100906502785ull, 4554725085586324949ull}},
+{{14851481720003590097ull, 3094383166827982865ull,
+ 7740838072280258193ull, 2846703178491453093ull}},
+{{4729294094722323909ull, 8479664976962366486ull,
+ 14287733608777710645ull, 3558378973114316366ull}},
+{{15134989655257680694ull, 15211267239630346011ull,
+ 8636294974117362498ull, 4447973716392895458ull}},
+{{7153525525322356482ull, 14118728043196354161ull,
+ 10009370377250739465ull, 2779983572745559661ull}},
+{{13553592925080333506ull, 3813351998713278989ull,
+ 17123398989990812236ull, 3474979465931949576ull}},
+{{3106933101068253171ull, 4766689998391598737ull,
+ 2957504663778963679ull, 4343724332414936971ull}},
+{{13471048234236127992ull, 9896710276635831066ull,
+ 17989341479357709963ull, 2714827707759335606ull}},
+{{7615438255940384182ull, 7759201827367400929ull,
+ 13263304812342361646ull, 3393534634699169508ull}},
+{{14130983838352868131ull, 475630247354475353ull,
+ 16579131015427952058ull, 4241918293373961885ull}},
+{{1914335871329460726ull, 4908954923023935000ull,
+ 12667799893856163988ull, 2651198933358726178ull}},
+{{2392919839161825907ull, 6136193653779918750ull,
+ 6611377830465429177ull, 3313998666698407723ull}},
+{{12214521835807058192ull, 12281928085652286341ull,
+ 3652536269654398567ull, 4142498333373009654ull}},
+{{9939919156593105322ull, 14593734081173760819ull,
+ 16117893223816162816ull, 2589061458358131033ull}},
+{{7813212927313993749ull, 18242167601467201024ull,
+ 6312308474488039808ull, 3236326822947663792ull}},
+{{9766516159142492186ull, 4355965428124449664ull,
+ 7890385593110049761ull, 4045408528684579740ull}},
+{{6104072599464057616ull, 14251693438646250800ull,
+ 14154863032548556908ull, 2528380330427862337ull}},
+{{7630090749330072020ull, 17814616798307813500ull,
+ 3858520735403532423ull, 3160475413034827922ull}},
+{{9537613436662590025ull, 17656584979457378971ull,
+ 14046522956109191337ull, 3950594266293534902ull}},
+{{3655165388700424814ull, 4117836584519780001ull,
+ 4167390829140856682ull, 2469121416433459314ull}},
+{{9180642754302918921ull, 14370667767504500809ull,
+ 14432610573280846660ull, 3086401770541824142ull}},
+{{16087489461306036555ull, 17963334709380626011ull,
+ 8817391179746282517ull, 3858002213177280178ull}},
+{{7748837904102578895ull, 13532927202576585209ull,
+ 10122555505768814477ull, 2411251383235800111ull}},
+{{14297733398555611523ull, 3081100947938567799ull,
+ 8041508363783630193ull, 3014064229044750139ull}},
+{{13260480729767126500ull, 8463062203350597653ull,
+ 5440199436302149837ull, 3767580286305937674ull}},
+{{10593643465318148015ull, 7595256886307817485ull,
+ 8011810666116231552ull, 2354737678941211046ull}},
+{{17853740350075072922ull, 9494071107884771856ull,
+ 791391295790513632ull, 2943422098676513808ull}},
+{{3870431363884289536ull, 11867588884855964821ull,
+ 989239119738142040ull, 3679277623345642260ull}},
+{{9449725223282749824ull, 14834486106069956026ull,
+ 1236548899672677550ull, 4599097029182052825ull}},
+{{10517764282979106544ull, 4659867797866334612ull,
+ 12302058108363893229ull, 2874435643238783015ull}},
+{{13147205353723883180ull, 10436520765760306169ull,
+ 10765886617027478632ull, 3593044554048478769ull}},
+{{2598948636872690263ull, 13045650957200382712ull,
+ 18069044289711736194ull, 4491305692560598461ull}},
+{{1624342898045431415ull, 12765217866677627099ull,
+ 13598995690283529073ull, 2807066057850374038ull}},
+{{15865486677838952980ull, 2121464278064870161ull,
+ 7775372575999635534ull, 3508832572312967548ull}},
+{{5996800292016527513ull, 11875202384435863510ull,
+ 9719215719999544417ull, 4386040715391209435ull}},
+{{17583058237792493408ull, 504472462631332837ull,
+ 3768666815786021309ull, 2741275447119505897ull}},
+{{8143764741958453048ull, 5242276596716553951ull,
+ 9322519538159914540ull, 3426594308899382371ull}},
+{{5568019909020678406ull, 6552845745895692439ull,
+ 7041463404272505271ull, 4283242886124227964ull}},
+{{10397541470779005860ull, 11013057618825889630ull,
+ 13624286664525091602ull, 2677026803827642477ull}},
+{{3773554801618981517ull, 4542949986677586230ull,
+ 3195300275374200791ull, 3346283504784553097ull}},
+{{13940315538878502704ull, 1067001464919594883ull,
+ 8605811362645138893ull, 4182854380980691371ull}},
+{{6406854202585370238ull, 2972718924788440754ull,
+ 3072789092439517856ull, 2614283988112932107ull}},
+{{17231939790086488605ull, 3715898655985550942ull,
+ 17676044420831561032ull, 3267854985141165133ull}},
+{{12316552700753334949ull, 4644873319981938678ull,
+ 8259997470757287578ull, 4084818731426456417ull}},
+{{3086159419543446439ull, 7514731843416099578ull,
+ 16691713465291774496ull, 2553011707141535260ull}},
+{{13081071311284083857ull, 9393414804270124472ull,
+ 2417897757905166504ull, 3191264633926919076ull}},
+{{16351339139105104821ull, 11741768505337655590ull,
+ 3022372197381458130ull, 3989080792408648845ull}},
+{{5607900943513302609ull, 11950291334263422648ull,
+ 4194825632577105283ull, 2493175495255405528ull}},
+{{7009876179391628261ull, 10326178149401890406ull,
+ 5243532040721381604ull, 3116469369069256910ull}},
+{{17985717261094311134ull, 12907722686752363007ull,
+ 15777787087756502813ull, 3895586711336571137ull}},
+{{18158602315825026315ull, 10373169688433920831ull,
+ 2943587902206732402ull, 2434741694585356961ull}},
+{{18086566876353894990ull, 3743090073687625231ull,
+ 8291170896185803407ull, 3043427118231696201ull}},
+{{17996522577014980833ull, 67176573682143635ull,
+ 14975649638659642163ull, 3804283897789620251ull}},
+{{8941983601420669069ull, 16182886423047197436ull,
+ 7053938014948582399ull, 2377677436118512657ull}},
+{{11177479501775836336ull, 15616922010381608891ull,
+ 13429108537113115903ull, 2972096795148140821ull}},
+{{9360163358792407516ull, 14909466494549623210ull,
+ 2951327616109231167ull, 3715120993935176027ull}},
+{{10461788117672642602ull, 16235945586734596362ull,
+ 17985480824564127143ull, 2321950621209485016ull}},
+{{3853863110236027444ull, 15683245964990857549ull,
+ 4035106956995607313ull, 2902438276511856271ull}},
+{{9429014906222422209ull, 5768999400956408224ull, 432197677817121238ull,
+ 3628047845639820339ull}},
+{{11786268632778027761ull, 16434621288050286088ull,
+ 14375305152553565259ull, 4535059807049775423ull}},
+{{7366417895486267351ull, 7965795295817734853ull,
+ 15902094747987060143ull, 2834412379406109639ull}},
+{{13819708387785222092ull, 5345558101344780662ull,
+ 15265932416556437275ull, 3543015474257637049ull}},
+{{8051263447876751807ull, 2070261608253587924ull,
+ 5247357465413382882ull, 4428769342822046312ull}},
+{{14255411691777745688ull, 5905599523585880356ull,
+ 3279598415883364301ull, 2767980839263778945ull}},
+{{17819264614722182110ull, 11993685422909738349ull,
+ 8711184038281593280ull, 3459976049079723681ull}},
+{{8439022713120563925ull, 14992106778637172937ull,
+ 15500666066279379504ull, 4324970061349654601ull}},
+{{16803604241768822213ull, 9370066736648233085ull,
+ 2770387263783530334ull, 2703106288343534126ull}},
+{{7169447246928864054ull, 2489211383955515549ull,
+ 12686356116584188726ull, 3378882860429417657ull}},
+{{13573495077088467972ull, 12334886266799170244ull,
+ 2022887090448072195ull, 4223603575536772072ull}},
+{{17706806460035068291ull, 5403460907535787450ull,
+ 1264304431530045122ull, 2639752234710482545ull}},
+{{12910136038189059555ull, 15977698171274510121ull,
+ 6192066557839944306ull, 3299690293388103181ull}},
+{{2302611992454160732ull, 10748750677238361844ull,
+ 12351769215727318287ull, 4124612866735128976ull}},
+{{10662504532138626266ull, 13635498200915058008ull,
+ 7719855759829573929ull, 2577883041709455610ull}},
+{{13328130665173282832ull, 3209314695861658798ull,
+ 426447662932191604ull, 3222353802136819513ull}},
+{{7436791294611827732ull, 4011643369827073498ull,
+ 5144745597092627409ull, 4027942252671024391ull}},
+{{9259680577559780236ull, 14036492152210390696ull,
+ 10132995025823973986ull, 2517463907919390244ull}},
+{{11574600721949725295ull, 8322243153408212562ull,
+ 12666243782279967483ull, 3146829884899237805ull}},
+{{5244878865582380811ull, 5791117923332877799ull,
+ 1997746672567795642ull, 3933537356124047257ull}},
+{{10195578318630069863ull, 8231134720510436528ull,
+ 12777806716423342036ull, 2458460847577529535ull}},
+{{12744472898287587329ull, 10288918400638045660ull,
+ 11360572377101789641ull, 3073076059471911919ull}},
+{{15930591122859484161ull, 17472834019224944979ull,
+ 9589029452949849147ull, 3841345074339889899ull}},
+{{7650776442573483649ull, 8614678252801896660ull,
+ 3687300398879961765ull, 2400840671462431187ull}},
+{{9563470553216854561ull, 15380033834429758729ull,
+ 18444183553882115918ull, 3001050839328038983ull}},
+{{16566024209948456105ull, 10001670256182422603ull,
+ 18443543423925256994ull, 3751313549160048729ull}},
+{{8047922122004091114ull, 10862729928541402031ull,
+ 4609685612312203765ull, 2344570968225030456ull}},
+{{5448216634077725988ull, 18190098429104140443ull,
+ 5762107015390254706ull, 2930713710281288070ull}},
+{{2198584774169769581ull, 13514250999525399746ull,
+ 16426005806092594191ull, 3663392137851610087ull}},
+{{11971603004566987784ull, 12281127730979361778ull,
+ 15920821239188354835ull, 4579240172314512609ull}},
+{{12093937896281755269ull, 5369861822648407159ull,
+ 3032984246851639916ull, 2862025107696570381ull}},
+{{10505736351924806182ull, 6712327278310508949ull,
+ 8402916326991937799ull, 3577531384620712976ull}},
+{{17743856458333395632ull, 3778723079460748282ull,
+ 10503645408739922249ull, 4471914230775891220ull}},
+{{15701596304885760174ull, 13890916970731437436ull,
+ 15788150417317227213ull, 2794946394234932012ull}},
+{{1180251307397648602ull, 3528588158132133084ull,
+ 1288443947936982401ull, 3493682992793665016ull}},
+{{1475314134247060752ull, 9022421216092554259ull,
+ 1610554934921228001ull, 4367103740992081270ull}},
+{{17062972398400270634ull, 17168228306126316171ull,
+ 14841654889607931212ull, 2729439838120050793ull}},
+{{16717029479572950388ull, 3013541308948343598ull,
+ 4717010556727750304ull, 3411799797650063492ull}},
+{{11672914812611412177ull, 3766926636185429498ull,
+ 5896263195909687880ull, 4264749747062579365ull}},
+{{11907257776309520515ull, 2354329147615893436ull,
+ 5991007506657248877ull, 2665468591914112103ull}},
+{{14884072220386900644ull, 7554597452947254699ull,
+ 2877073364894173192ull, 3331835739892640129ull}},
+{{13993404257056237901ull, 9443246816184068374ull,
+ 8208027724545104394ull, 4164794674865800161ull}},
+{{4134191642232760784ull, 10513715278542430638ull,
+ 16659232373909160006ull, 2602996671791125100ull}},
+{{14391111589645726788ull, 3918772061323262489ull,
+ 2377296393676898392ull, 3253745839738906376ull}},
+{{4153831431774994773ull, 4898465076654078112ull,
+ 2971620492096122990ull, 4067182299673632970ull}},
+{{2596144644859371733ull, 16896598728190962532ull,
+ 6468948825987464772ull, 2541988937296020606ull}},
+{{3245180806074214666ull, 2674004336529151549ull,
+ 17309558069339106774ull, 3177486171620025757ull}},
+{{8668162026020156237ull, 12565877457516215244ull,
+ 7801889531391719755ull, 3971857714525032197ull}},
+{{14640973303117373456ull, 5547830401733940575ull,
+ 7182023966333518799ull, 2482411071578145123ull}},
+{{13689530610469328916ull, 2323101983740037815ull,
+ 4365843939489510595ull, 3103013839472681404ull}},
+{{12500227244659273241ull, 16738935534957210981ull,
+ 5457304924361888243ull, 3878767299340851755ull}},
+{{10118485037125739728ull, 8155991700134562911ull,
+ 1104972568512486200ull, 2424229562088032347ull}},
+{{8036420277979786756ull, 10194989625168203639ull,
+ 15216273765922771462ull, 3030286952610040433ull}},
+{{5433839329047345540ull, 3520364994605478741ull,
+ 5185284152121300616ull, 3787858690762550542ull}},
+{{5701992589868284915ull, 2200228121628424213ull,
+ 17075860650357976597ull, 2367411681726594088ull}},
+{{11739176755762744048ull, 7361971170462918170ull,
+ 2898081739237919130ull, 2959264602158242611ull}},
+{{5450598907848654251ull, 18425835999933423521ull,
+ 17457660229329562624ull, 3699080752697803263ull}},
+{{14935839363473878667ull, 11516147499958389700ull,
+ 17828566670972058496ull, 2311925470436127039ull}},
+{{223055130632796718ull, 14395184374947987126ull,
+ 17674022320287685216ull, 2889906838045158799ull}},
+{{9502190950145771705ull, 17993980468684983907ull,
+ 17480841881932218616ull, 3612383547556448499ull}},
+{{7266052669254826728ull, 4045731512146678268ull,
+ 17239366333987885367ull, 4515479434445560624ull}},
+{{13764654955139042513ull, 9446111222732755773ull,
+ 10774603958742428354ull, 2822174646528475390ull}},
+{{3370760638641639429ull, 2584266991561168909ull,
+ 4244882911573259635ull, 3527718308160594238ull}},
+{{8825136816729437190ull, 17065391794733624848ull,
+ 14529475676321350351ull, 4409647885200742797ull}},
+{{5515710510455898244ull, 17583398899349597386ull,
+ 11386765306914537921ull, 2756029928250464248ull}},
+{{16118010174924648613ull, 8144190568904833020ull,
+ 14233456633643172402ull, 3445037410313080310ull}},
+{{1700768644946259150ull, 956866174276265468ull, 8568448755199189695ull,
+ 4306296762891350388ull}},
+{{10286352439946187777ull, 7515570386563747773ull,
+ 14578652508854269367ull, 2691435476807093992ull}},
+{{17469626568360122625ull, 4782776964777296812ull,
+ 18223315636067836709ull, 3364294346008867490ull}},
+{{3390289136740601665ull, 10590157224399008920ull,
+ 13555772508230020078ull, 4205367932511084363ull}},
+{{2118930710462876041ull, 2007162246821992671ull,
+ 6166514808430068597ull, 2628354957819427727ull}},
+{{16483721443360758763ull, 7120638826954878742ull,
+ 3096457492110197842ull, 3285443697274284659ull}},
+{{11381279767346172646ull, 18124170570548374236ull,
+ 17705629920419911014ull, 4106804621592855823ull}},
+{{16336671891446133712ull, 6715920588165345993ull,
+ 17983547727903526240ull, 2566752888495534889ull}},
+{{6585781809025503428ull, 8394900735206682492ull,
+ 8644376604597244088ull, 3208441110619418612ull}},
+{{8232227261281879284ull, 10493625919008353115ull,
+ 10805470755746555110ull, 4010551388274273265ull}},
+{{2839299029087480601ull, 1946830180952832793ull,
+ 18282634268410066704ull, 2506594617671420790ull}},
+{{8160809804786738655ull, 2433537726191040991ull,
+ 13629920798657807572ull, 3133243272089275988ull}},
+{{5589326237556035415ull, 3041922157738801239ull,
+ 17037400998322259465ull, 3916554090111594985ull}},
+{{10410857926113603990ull, 13430416394655220534ull,
+ 3730846596310330309ull, 2447846306319746866ull}},
+{{3790200370787229180ull, 2952962438036861956ull,
+ 13886930282242688695ull, 3059807882899683582ull}},
+{{4737750463484036475ull, 17526261102828241157ull,
+ 8135290815948585060ull, 3824759853624604478ull}},
+{{5266937048891216749ull, 1730541152412874915ull, 472870741540477759ull,
+ 2390474908515377799ull}},
+{{1971985292686633032ull, 15998234495798257356ull,
+ 14426146482207760910ull, 2988093635644222248ull}},
+{{2464981615858291290ull, 10774421082893045887ull,
+ 18032683102759701138ull, 3735117044555277810ull}},
+{{8458142537552513912ull, 11345699195235541583ull,
+ 15882112957652201115ull, 2334448152847048631ull}},
+{{5960992153513254486ull, 9570437975617039075ull,
+ 15240955178637863490ull, 2918060191058810789ull}},
+{{2839554173464180204ull, 2739675432666523036ull,
+ 5216135918015165651ull, 3647575238823513487ull}},
+{{3549442716830225254ull, 17259652346115317507ull,
+ 1908483879091569159ull, 4559469048529391859ull}},
+{{18359302762514748448ull, 17704811743963155297ull,
+ 17333703488928088388ull, 2849668155330869911ull}},
+{{9114070397861271848ull, 3684270606244392506ull,
+ 17055443342732722582ull, 3562085194163587389ull}},
+{{2169215960471814002ull, 13828710294660266441ull,
+ 7484246123133739515ull, 4452606492704484237ull}},
+{{12884975021363353511ull, 6337100924948972573ull,
+ 6983496836172281149ull, 2782879057940302648ull}},
+{{2271160721422028177ull, 12533062174613603621ull,
+ 8729371045215351436ull, 3478598822425378310ull}},
+{{7450636920204923125ull, 15666327718267004526ull,
+ 1688341769664413487ull, 4348248528031722888ull}},
+{{44962056700689050ull, 16708983851557959685ull, 1055213606040258429ull,
+ 2717655330019826805ull}},
+{{4667888589303249216ull, 7051171759165285894ull,
+ 5930703025977710941ull, 3397069162524783506ull}},
+{{15058232773483837328ull, 13425650717383995271ull,
+ 16636750819326914484ull, 4246336453155979382ull}},
+{{16328924511068480186ull, 17614403735219772852ull,
+ 5786283243651933648ull, 2653960283222487114ull}},
+{{1964411565126048616ull, 3571260595315164450ull,
+ 16456226091419692869ull, 3317450354028108892ull}},
+{{11678886493262336578ull, 9075761762571343466ull,
+ 2123538540565064470ull, 4146812942535136116ull}},
+{{11910990076716348266ull, 1060665083179701762ull,
+ 10550583624707941102ull, 2591758089084460072ull}},
+{{5665365559040659524ull, 10549203390829403011ull,
+ 13188229530884926377ull, 3239697611355575090ull}},
+{{2470020930373436501ull, 17798190256964141668ull,
+ 7261914876751382163ull, 4049622014194468863ull}},
+{{10767135118338173621ull, 8818025901388894590ull,
+ 11456225825610695708ull, 2531013758871543039ull}},
+{{4235546861067941218ull, 11022532376736118238ull,
+ 9708596263585981731ull, 3163767198589428799ull}},
+{{14517805613189702331ull, 9166479452492759893ull,
+ 7524059311055089260ull, 3954708998236785999ull}},
+{{11379471517457257909ull, 14952421694662750741ull,
+ 11620066097050512643ull, 2471693123897991249ull}},
+{{389281341539408674ull, 14078841099901050523ull, 690024566030977092ull,
+ 3089616404872489062ull}},
+{{14321659732206424554ull, 17598551374876313153ull,
+ 10085902744393497173ull, 3862020506090611327ull}},
+{{2033508304987933491ull, 13304937618511389673ull,
+ 13221218242887017589ull, 2413762816306632079ull}},
+{{7153571399662304767ull, 2796113967857073379ull,
+ 11914836785181384083ull, 3017203520383290099ull}},
+{{4330278231150493055ull, 17330200515103505436ull,
+ 10281859963049342199ull, 3771504400479112624ull}},
+{{11929795931323833968ull, 17748904349580772753ull,
+ 6426162476905838874ull, 2357190250299445390ull}},
+{{1077186858872628747ull, 12962758400121190134ull,
+ 17256075132987074401ull, 2946487812874306737ull}},
+{{10569855610445561742ull, 2368389944869323955ull,
+ 7735035860951679290ull, 3683109766092883422ull}},
+{{8600633494629564273ull, 12183859467941430752ull,
+ 445422789334823304ull, 4603887207616104278ull}},
+{{5375395934143477671ull, 7614912167463394220ull,
+ 14113447298616428277ull, 2877429504760065173ull}},
+{{6719244917679347089ull, 14130326227756630679ull,
+ 3806751067988371634ull, 3596786880950081467ull}},
+{{3787370128671795957ull, 8439535747841012541ull, 146752816558076639ull,
+ 4495983601187601834ull}},
+{{4672949339633566425ull, 12192238870041714694ull,
+ 4703406528776185803ull, 2809989750742251146ull}},
+{{15064558711396733839ull, 10628612569124755463ull,
+ 15102630197825008062ull, 3512487188427813932ull}},
+{{14219012370818529395ull, 4062393674551168521ull,
+ 431543673571708462ull, 4390608985534767416ull}},
+{{1969353704120499016ull, 16374054101876644038ull,
+ 269714795982317788ull, 2744130615959229635ull}},
+{{11685064167005399578ull, 2020823553636253431ull,
+ 14172201550260060948ull, 3430163269949037043ull}},
+{{9994644190329361568ull, 2526029442045316789ull,
+ 13103565919397688281ull, 4287704087436296304ull}},
+{{8552495628169544932ull, 13107983447346792753ull,
+ 8189728699623555175ull, 2679815054647685190ull}},
+{{15302305553639319069ull, 11773293290756103037ull,
+ 1013788837674668161ull, 3349768818309606488ull}},
+{{5292823886766985125ull, 881558558162965085ull, 1267236047093335202ull,
+ 4187211022887008110ull}},
+{{5613857938443059655ull, 5162660117279241082ull,
+ 14627080584715498213ull, 2617006889304380068ull}},
+{{16240694459908600377ull, 11065011165026439256ull,
+ 18283850730894372766ull, 3271258611630475085ull}},
+{{1854124001176198855ull, 4607891919428273263ull,
+ 9019755358335802246ull, 4089073264538093857ull}},
+{{8076356528376206140ull, 16714990504924834501ull,
+ 17166562145028346163ull, 2555670790336308660ull}},
+{{14707131678897645579ull, 16282052112728655222ull,
+ 3011458607575881088ull, 3194588487920385826ull}},
+{{9160542561767281166ull, 1905821067201267412ull,
+ 12987695296324627169ull, 3993235609900482282ull}},
+{{14948711137959326537ull, 12720353213069261892ull,
+ 12728995578630279884ull, 2495772256187801426ull}},
+{{239144848739606555ull, 15900441516336577366ull,
+ 6687872436433074047ull, 3119715320234751783ull}},
+{{9522303097779284002ull, 15263865876993333803ull,
+ 3748154527113954655ull, 3899644150293439729ull}},
+{{3645596426898358549ull, 16457445200761915483ull,
+ 13871811625514691419ull, 2437277593933399830ull}},
+{{18392053588905111898ull, 15960120482525006449ull,
+ 8116392495038588466ull, 3046596992416749788ull}},
+{{9155008930849226161ull, 10726778566301482254ull,
+ 10145490618798235583ull, 3808246240520937235ull}},
+{{1110194563353378447ull, 13621765631579508265ull,
+ 4035088627535203287ull, 2380153900325585772ull}},
+{{5999429222619110962ull, 12415521021046997427ull,
+ 5043860784419004109ull, 2975192375406982215ull}},
+{{2887600509846500799ull, 1684343221026583072ull,
+ 1693139962096367233ull, 3718990469258727769ull}},
+{{1804750318654062999ull, 12581929559210084180ull,
+ 12587427522378699280ull, 2324369043286704855ull}},
+{{2255937898317578749ull, 15727411949012605225ull,
+ 11122598384545986196ull, 2905461304108381069ull}},
+{{7431608391324361340ull, 1212520862556204915ull, 68189925400319034ull,
+ 3631826630135476337ull}},
+{{4677824470728063771ull, 10739023115050031952ull,
+ 4696923425177786696ull, 4539783287669345421ull}},
+{{2923640294205039857ull, 6711889446906269970ull,
+ 5241420149949810637ull, 2837364554793340888ull}},
+{{12877922404611075629ull, 13001547827060225366ull,
+ 6551775187437263296ull, 3546705693491676110ull}},
+{{6874030968909068729ull, 16251934783825281708ull,
+ 17413091021151354928ull, 4433382116864595137ull}},
+{{13519641392422943764ull, 10157459239890801067ull,
+ 3965652860578514974ull, 2770863823040371961ull}},
+{{12287865722101291800ull, 3473452013008725526ull,
+ 9568752094150531622ull, 3463579778800464951ull}},
+{{6136460115771838942ull, 13565187053115682716ull,
+ 7349254099260776623ull, 4329474723500581189ull}},
+{{13058659609212175147ull, 15395770935838383553ull,
+ 6899126821251679341ull, 2705921702187863243ull}},
+{{2488266456233055222ull, 5409655614515815730ull,
+ 4012222508137211273ull, 3382402127734829054ull}},
+{{12333705107146094835ull, 11373755536572157566ull,
+ 14238650172026289899ull, 4228002659668536317ull}},
+{{3096879673538921368ull, 4802754201143904527ull,
+ 11204999366730125139ull, 2642501662292835198ull}},
+{{17706157647205815422ull, 1391756733002492754ull,
+ 4782877171557880616ull, 3303127077866043998ull}},
+{{12909325022152493469ull, 1739695916253115943ull,
+ 15201968501302126578ull, 4128908847332554997ull}},
+{{14985857166486390275ull, 5698995966085585368ull,
+ 11807073322527523063ull, 2580568029582846873ull}},
+{{285577384398436227ull, 2512058939179593807ull, 923783597877240117ull,
+ 3225710036978558592ull}},
+{{14192029785780208996ull, 7751759692401880162ull,
+ 1154729497346550146ull, 4032137546223198240ull}},
+{{13481704634540018527ull, 9456535826178563005ull,
+ 721705935841593841ull, 2520085966389498900ull}},
+{{3017072737892859446ull, 16432355801150591661ull,
+ 902132419801992301ull, 3150107457986873625ull}},
+{{8383026940793462211ull, 6705386696156075864ull,
+ 5739351543179878281ull, 3937634322483592031ull}},
+{{5239391837995913882ull, 15720081731166017175ull,
+ 10504623742128505781ull, 2461021451552245019ull}},
+{{1937553779067504449ull, 5815044108675357757ull,
+ 8519093659233244323ull, 3076276814440306274ull}},
+{{7033628242261768465ull, 2657119117416809292ull,
+ 1425495037186779596ull, 3845346018050382843ull}},
+{{13619389688268381099ull, 10884071485240281615ull,
+ 17031835462737594911ull, 2403341261281489276ull}},
+{{12412551091908088469ull, 8993403338122964115ull,
+ 2843050254712442023ull, 3004176576601861596ull}},
+{{10904002846457722682ull, 6630068154226317240ull,
+ 3553812818390552529ull, 3755220720752326995ull}},
+{{6815001779036076677ull, 15673007642459918035ull,
+ 18362034075989952994ull, 2347012950470204371ull}},
+{{3907066205367707942ull, 10367887516220121736ull,
+ 18340856576560053339ull, 2933766188087755464ull}},
+{{4883832756709634927ull, 8348173376847764266ull,
+ 4479326646990515058ull, 3667207735109694331ull}},
+{{15328162982741819467ull, 1211844684204929524ull,
+ 987472290310755919ull, 4584009668887117914ull}},
+{{356729827358861359ull, 7674931955269162809ull, 5228856199871610353ull,
+ 2865006043054448696ull}},
+{{5057598302625964603ull, 14205350962513841415ull,
+ 6536070249839512941ull, 3581257553818060870ull}},
+{{1710311859855067849ull, 3921630647860138057ull,
+ 17393459849154166985ull, 4476571942272576087ull}},
+{{12598159958477887166ull, 13980234200981056045ull,
+ 17788441433362436221ull, 2797857463920360054ull}},
+{{1912641892815195245ull, 3640234695944156345ull,
+ 13012179754848269469ull, 3497321829900450068ull}},
+{{7002488384446381960ull, 9161979388357583335ull,
+ 16265224693560336836ull, 4371652287375562585ull}},
+{{11294084267920070581ull, 14949609154578265392ull,
+ 3248236405834128666ull, 2732282679609726616ull}},
+{{14117605334900088227ull, 9463639406368055932ull,
+ 4060295507292660833ull, 3415353349512158270ull}},
+{{17647006668625110283ull, 16441235276387457819ull,
+ 14298741420970601849ull, 4269191686890197837ull}},
+{{8723536158676999975ull, 3358243020101079281ull,
+ 11242556397320320108ull, 2668244804306373648ull}},
+{{15516106216773637873ull, 4197803775126349101ull,
+ 14053195496650400135ull, 3335306005382967060ull}},
+{{5560074715684883629ull, 635568700480548473ull,
+ 17566494370813000169ull, 4169132506728708825ull}},
+{{15004261743371522028ull, 11926445483868812555ull,
+ 4061529954117043249ull, 2605707816705443016ull}},
+{{14143641160787014631ull, 1072998799553851982ull,
+ 5076912442646304062ull, 3257134770881803770ull}},
+{{8456179414128992481ull, 10564620536297090786ull,
+ 15569512590162655885ull, 4071418463602254712ull}},
+{{9896798152258008205ull, 8908730844399375693ull,
+ 9730945368851659928ull, 2544636539751409195ull}},
+{{16982683708749898160ull, 11135913555499219616ull,
+ 7551995692637187006ull, 3180795674689261494ull}},
+{{2781610562227821084ull, 4696519907519248713ull, 216622578941707950ull,
+ 3975994593361576868ull}},
+{{13267721647460857937ull, 16770382997481694157ull,
+ 9358761148693343276ull, 2484996620850985542ull}},
+{{2749594004043908710ull, 2516234673142566081ull,
+ 2475079399011903288ull, 3106245776063731928ull}},
+{{8048678523482273791ull, 3145293341428207601ull,
+ 3093849248764879110ull, 3882807220079664910ull}},
+{{16559639123244890880ull, 15800866393674793462ull,
+ 15768713835760213155ull, 2426754512549790568ull}},
+{{11476176867201337791ull, 15139396973666103924ull,
+ 1264148220990714828ull, 3033443140687238211ull}},
+{{14345221084001672239ull, 477502143373078289ull,
+ 15415243331520557248ull, 3791803925859047763ull}},
+{{2048234149859963294ull, 298438839608173931ull, 7328684072986654328ull,
+ 2369877453661904852ull}},
+{{16395350742607117829ull, 373048549510217413ull,
+ 9160855091233317910ull, 2962346817077381065ull}},
+{{6659130372976733574ull, 9689682723742547575ull,
+ 16062754882469035291ull, 3702933521346726331ull}},
+{{11079485510751540340ull, 3750208693125398282ull,
+ 7733378792329453105ull, 2314333450841703957ull}},
+{{4625984851584649617ull, 9299446884834135757ull,
+ 14278409508839204285ull, 2892916813552129946ull}},
+{{10394167082908199925ull, 16235994624470057600ull,
+ 8624639849194229548ull, 3616146016940162433ull}},
+{{12992708853635249906ull, 1848249206878020384ull,
+ 15392485829920174840ull, 4520182521175203041ull}},
+{{8120443033522031191ull, 1155155754298762740ull,
+ 2702774616059027419ull, 2825114075734501901ull}},
+{{10150553791902538989ull, 15279002748155617137ull,
+ 7990154288501172177ull, 3531392594668127376ull}},
+{{17299878258305561640ull, 5263695379912357709ull,
+ 9987692860626465222ull, 4414240743335159220ull}},
+{{13118266920654669977ull, 17124867667727387280ull,
+ 15465680074746316571ull, 2758900464584474512ull}},
+{{16397833650818337472ull, 16794398566231846196ull,
+ 885356019723344098ull, 3448625580730593141ull}},
+{{2050547989813370223ull, 11769626170935031938ull,
+ 5718381043081568027ull, 4310781975913241426ull}},
+{{5893278512060744294ull, 5050173347620701009ull,
+ 8185674170353367921ull, 2694238734945775891ull}},
+{{11978284158503318271ull, 10924402702953264165ull,
+ 5620406694514321997ull, 3367798418682219864ull}},
+{{1137797142846984127ull, 18267189397118968111ull,
+ 7025508368142902496ull, 4209748023352774830ull}},
+{{7628652241920446935ull, 11416993373199355069ull,
+ 18226000785371477772ull, 2631092514595484268ull}},
+{{14147501320827946573ull, 14271241716499193836ull,
+ 4335756908004795599ull, 3288865643244355336ull}},
+{{17684376651034933216ull, 13227366127196604391ull,
+ 5419696135005994499ull, 4111082054055444170ull}},
+{{17970264434537915116ull, 5961260820284183792ull,
+ 7998996102806134466ull, 2569426283784652606ull}},
+{{4016086469462842279ull, 16674948062210005549ull,
+ 775373091652892274ull, 3211782854730815758ull}},
+{{9631794105255940753ull, 11620313040907731128ull,
+ 10192588401420891151ull, 4014728568413519697ull}},
+{{6019871315784962971ull, 14180224678208413811ull,
+ 17899582796956526729ull, 2509205355258449810ull}},
+{{2913153126303815809ull, 3890222792478353552ull,
+ 13151106459340882604ull, 3136506694073062263ull}},
+{{3641441407879769762ull, 4862778490597941940ull,
+ 11827197055748715351ull, 3920633367591327829ull}},
+{{11499272916779631909ull, 9956765584264795568ull,
+ 9697841169056641046ull, 2450395854744579893ull}},
+{{14374091145974539886ull, 3222584943476218652ull,
+ 16733987479748189212ull, 3062994818430724866ull}},
+{{17967613932468174858ull, 4028231179345273315ull,
+ 11694112312830460707ull, 3828743523038406083ull}},
+{{8923915698578915334ull, 211801477877101870ull, 5002977186305343990ull,
+ 2392964701899003802ull}},
+{{1931522586368868360ull, 9488123884201153146ull,
+ 15477093519736455795ull, 2991205877373754752ull}},
+{{11637775269815861258ull, 7248468836824053528ull,
+ 899622825961018128ull, 3739007346717193441ull}},
+{{7273609543634913286ull, 4530293023015033455ull,
+ 12091479312294106090ull, 2336879591698245900ull}},
+{{4480325911116253704ull, 14886238315623567627ull,
+ 15114349140367632612ull, 2921099489622807375ull}},
+{{988721370467929225ull, 161053820819907918ull, 14281250407032152862ull,
+ 3651374362028509219ull}},
+{{10459273749939687340ull, 9424689312879660705ull,
+ 13239876990362803173ull, 4564217952535636524ull}},
+{{18066261139780774347ull, 8196273829763481892ull,
+ 17498295155831527791ull, 2852636220334772827ull}},
+{{4136082351016416318ull, 5633656268776964462ull,
+ 17261182926362021835ull, 3565795275418466034ull}},
+{{14393474975625296206ull, 2430384317543817673ull,
+ 12353106621097751486ull, 4457244094273082543ull}},
+{{2078392832124728273ull, 15354048253747049758ull,
+ 14638220665827176534ull, 2785777558920676589ull}},
+{{11821363077010686149ull, 9969188280329036389ull,
+ 4462717777001806956ull, 3482221948650845737ull}},
+{{941645790981193974ull, 12461485350411295487ull,
+ 10190083239679646599ull, 4352777435813557171ull}},
+{{7506057647004328090ull, 14705957371648141535ull,
+ 4062959015586085172ull, 2720485897383473232ull}},
+{{4770886040328022208ull, 18382446714560176919ull,
+ 5078698769482606465ull, 3400607371729341540ull}},
+{{1351921531982639856ull, 9143000337918057437ull,
+ 6348373461853258082ull, 4250759214661676925ull}},
+{{3150793966702843862ull, 10326061229626173802ull,
+ 6273576422871980253ull, 2656724509163548078ull}},
+{{13161864495233330636ull, 17519262555460105156ull,
+ 17065342565444751124ull, 3320905636454435097ull}},
+{{16452330619041663294ull, 3452334120615579829ull,
+ 7496620151523775194ull, 4151132045568043872ull}},
+{{12588549646114733511ull, 6769394843812125297ull,
+ 4685387594702359496ull, 2594457528480027420ull}},
+{{1900629002361253177ull, 8461743554765156622ull,
+ 5856734493377949370ull, 3243071910600034275ull}},
+{{11599158289806342279ull, 1353807406601669969ull,
+ 2709232098295048809ull, 4053839888250042844ull}},
+{{331944903487882069ull, 12375344675194513491ull,
+ 10916642098289181313ull, 2533649930156276777ull}},
+{{14249989184642016298ull, 1634122788710978151ull,
+ 18257488641288864546ull, 3167062412695345971ull}},
+{{13200800462375132468ull, 11266025522743498497ull,
+ 18210174783183692778ull, 3958828015869182464ull}},
+{{1332971261343375937ull, 11652951970142074465ull,
+ 11381359239489807986ull, 2474267509918239040ull}},
+{{6277900095106607825ull, 5342817925822817273ull,
+ 14226699049362259983ull, 3092834387397798800ull}},
+{{12459061137310647685ull, 2066836388851133687ull,
+ 17783373811702824979ull, 3866042984247248500ull}},
+{{14704442238460236659ull, 17432673807527816218ull,
+ 1891236595459489803ull, 2416276865154530313ull}},
+{{9157180761220520016ull, 17179156240982382369ull,
+ 6975731762751750158ull, 3020346081443162891ull}},
+{{16058161969953037924ull, 12250573264373202153ull,
+ 4107978685012299794ull, 3775432601803953614ull}},
+{{3118822203579566846ull, 12268294308660639250ull,
+ 16402544733414851083ull, 2359645376127471008ull}},
+{{13121899791329234366ull, 10723681867398411158ull,
+ 2056436843059012238ull, 2949556720159338761ull}},
+{{7179002702306767149ull, 4181230297393238140ull,
+ 7182232072251153202ull, 3686945900199173451ull}},
+{{8973753377883458936ull, 14449909908596323483ull,
+ 4366104071886553598ull, 4608682375248966814ull}},
+{{3302752851963467883ull, 4419507674445314273ull,
+ 16563873100211259711ull, 2880426484530604258ull}},
+{{8740127083381722758ull, 912698574629254937ull,
+ 11481469338409298831ull, 3600533105663255323ull}},
+{{15536844872654541352ull, 14975931273568732383ull,
+ 9740150654584235634ull, 4500666382079069154ull}},
+{{16628057073050170201ull, 13971643064407845643ull,
+ 10699280177542535175ull, 2812916488799418221ull}},
+{{16173385322885324847ull, 12852867812082419150ull,
+ 17985786240355556873ull, 3516145610999272776ull}},
+{{10993359616751880251ull, 2231026709820860226ull,
+ 4035488726734894476ull, 4395182013749090971ull}},
+{{11482535778897313061ull, 10617763730492813449ull,
+ 216337444995615095ull, 2746988758593181857ull}},
+{{518111668339477614ull, 8660518644688628908ull, 4882107824671906773ull,
+ 3433735948241477321ull}},
+{{647639585424347017ull, 15437334324288174039ull,
+ 10714320799267271370ull, 4292169935301846651ull}},
+{{7322303768531298742ull, 14260019971107496678ull,
+ 4390607490328350654ull, 2682606209563654157ull}},
+{{18376251747518899235ull, 8601652927029595039ull,
+ 10099945381337826222ull, 3353257761954567696ull}},
+{{18358628665971236140ull, 1528694121932217991ull,
+ 12624931726672282778ull, 4191572202443209620ull}},
+{{18391671943873104444ull, 5567119844635024148ull,
+ 17113954366024952544ull, 2619732626527006012ull}},
+{{4542845856131828939ull, 6958899805793780186ull,
+ 2945698883821639064ull, 3274665783158757516ull}},
+{{14901929357019561981ull, 8698624757242225232ull,
+ 3682123604777048830ull, 4093332228948446895ull}},
+{{9313705848137226238ull, 824954454849002866ull, 9218856280626737375ull,
+ 2558332643092779309ull}},
+{{2418760273316756990ull, 14866251123843417295ull,
+ 16135256369210809622ull, 3197915803865974136ull}},
+{{16858508396928109949ull, 9359441867949495810ull,
+ 1722326387803960412ull, 3997394754832467671ull}},
+{{15148253766507456622ull, 15073023204323210689ull,
+ 7993983020018557113ull, 2498371721770292294ull}},
+{{5100259152852157066ull, 5006220950121849650ull, 769106738168420584ull,
+ 3122964652212865368ull}},
+{{15598695977919972140ull, 6257776187652312062ull,
+ 961383422710525730ull, 3903705815266081710ull}},
+{{5137498967772594684ull, 8522796135710082943ull,
+ 14435922694476242293ull, 2439816134541301068ull}},
+{{1810187691288355451ull, 15265181188064991583ull,
+ 18044903368095302866ull, 3049770168176626335ull}},
+{{16097792669392608025ull, 9858104448226463670ull,
+ 17944443191691740679ull, 3812212710220782919ull}},
+{{5449434399942992112ull, 13078844307782621650ull,
+ 18132806022448419780ull, 2382632943887989324ull}},
+{{16035165036783515948ull, 16348555384728277062ull,
+ 4219263454350973109ull, 2978291179859986656ull}},
+{{10820584259124619127ull, 6600636175628182616ull,
+ 5274079317938716387ull, 3722863974824983320ull}},
+{{6762865161952886954ull, 1819554600553920183ull,
+ 3296299573711697742ull, 2326789984265614575ull}},
+{{3841895434013720789ull, 11497815287547176037ull,
+ 17955432522421785889ull, 2908487480332018218ull}},
+{{9414055310944538890ull, 537211054151806334ull,
+ 13220918616172456554ull, 3635609350415022773ull}},
+{{2544197101825897804ull, 9894885854544533726ull,
+ 2691090214933406980ull, 4544511688018778467ull}},
+{{15425181243923349840ull, 15407675695945109386ull,
+ 17822832448829237026ull, 2840319805011736541ull}},
+{{10058104518049411492ull, 10036222583076610925ull,
+ 8443482505754382571ull, 3550399756264670677ull}},
+{{17184316665989152268ull, 7933592210418375752ull,
+ 15166039150620366118ull, 4437999695330838346ull}},
+{{10740197916243220168ull, 346809113084096941ull,
+ 14090460487565116728ull, 2773749809581773966ull}},
+{{18036933413731413114ull, 433511391355121176ull,
+ 8389703572601620102ull, 3467187261977217458ull}},
+{{4099422693454714776ull, 9765261276048677279ull,
+ 1263757428897249319ull, 4333984077471521823ull}},
+{{9479668211050278591ull, 13020817325171505155ull,
+ 7707377420701862680ull, 2708740048419701139ull}},
+{{7237899245385460335ull, 16276021656464381444ull,
+ 5022535757449940446ull, 3385925060524626424ull}},
+{{9047374056731825419ull, 11121655033725700997ull,
+ 6278169696812425558ull, 4232406325655783030ull}},
+{{7960451794671084839ull, 2339348377651175219ull,
+ 17758914115789929686ull, 2645253953534864393ull}},
+{{5338878724911468144ull, 12147557508918744832ull,
+ 8363584589455248395ull, 3306567441918580492ull}},
+{{6673598406139335180ull, 10572760867721043136ull,
+ 10454480736819060494ull, 4133209302398225615ull}},
+{{4170999003837084488ull, 1996289523898264056ull,
+ 13451579488152994665ull, 2583255813998891009ull}},
+{{5213748754796355610ull, 7107047923300217974ull,
+ 2979416304909079619ull, 3229069767498613762ull}},
+{{15740557980350220320ull, 4272123885697884563ull,
+ 12947642417991125332ull, 4036337209373267202ull}},
+{{7532005728505193748ull, 11893449465415953660ull,
+ 12703962529671841236ull, 2522710755858292001ull}},
+{{9415007160631492185ull, 14866811831769942075ull,
+ 2044895106807637833ull, 3153388444822865002ull}},
+{{7157072932361977327ull, 4748456734430263882ull,
+ 11779490920364323100ull, 3941735556028581252ull}},
+{{9084856601153623734ull, 12191157495873690734ull,
+ 16585553862082477745ull, 2463584722517863282ull}},
+{{2132698714587253859ull, 1403888814559949706ull,
+ 11508570290748321374ull, 3079480903147329103ull}},
+{{11889245430088843132ull, 10978233055054712940ull,
+ 9774026845008013813ull, 3849351128934161379ull}},
+{{16654150430660302766ull, 9167238668622889539ull,
+ 3802923768916314681ull, 2405844455583850862ull}},
+{{16206002019897990553ull, 16070734354205999828ull,
+ 13977026748000169159ull, 3007305569479813577ull}},
+{{1810758451162936575ull, 15476731924330111882ull,
+ 3636225379718047737ull, 3759131961849766972ull}},
+{{5743410050404223263ull, 2755428425065238070ull,
+ 11496012899178555644ull, 2349457476156104357ull}},
+{{16402634599860054887ull, 3444285531331547587ull,
+ 534958068691030843ull, 2936821845195130447ull}},
+{{15891607231397680705ull, 18140414969446598196ull,
+ 14503755641145952265ull, 3671027306493913058ull}},
+{{1417764965537549265ull, 8840460656526084034ull,
+ 8906322514577664524ull, 4588784133117391323ull}},
+{{5497789121888356195ull, 14748659947183578329ull,
+ 3260608562397346375ull, 2867990083198369577ull}},
+{{11483922420787833147ull, 13824138915552085007ull,
+ 8687446721424070873ull, 3584987603997961971ull}},
+{{9743217007557403530ull, 3445115589157942547ull,
+ 6247622383352700688ull, 4481234504997452464ull}},
+{{3783667620509683255ull, 2153197243223714092ull,
+ 3904763989595437930ull, 2800771565623407790ull}},
+{{4729584525637104068ull, 11914868590884418423ull,
+ 14104327023849073220ull, 3500964457029259737ull}},
+{{1300294638618992181ull, 14893585738605523029ull,
+ 3795350724529177813ull, 4376205571286574672ull}},
+{{3118527158350564065ull, 11614334095842145845ull,
+ 2372094202830736133ull, 2735128482054109170ull}},
+{{8509844966365592985ull, 682859564520518594ull,
+ 12188489790393195975ull, 3418910602567636462ull}},
+{{1413934171102215424ull, 14688632510932811955ull,
+ 6012240201136719160ull, 4273638253209545578ull}},
+{{17024609921434742304ull, 9180395319333007471ull,
+ 8369336144137837379ull, 2671023908255965986ull}},
+{{16669076383366039976ull, 6863808130738871435ull,
+ 1238298143317520916ull, 3338779885319957483ull}},
+{{16224659460780162066ull, 8579760163423589294ull,
+ 15382930734429064857ull, 4173474856649946853ull}},
+{{5528726144560213387ull, 16891565148208213069ull,
+ 11920174718231859487ull, 2608421785406216783ull}},
+{{11522593699127654638ull, 16502770416832878432ull,
+ 10288532379362436455ull, 3260527231757770979ull}},
+{{14403242123909568297ull, 16016777002613710136ull,
+ 8248979455775657665ull, 4075659039697213724ull}},
+{{9002026327443480186ull, 3092956598992486979ull,
+ 14378984196714561849ull, 2547286899810758577ull}},
+{{6640846890876962328ull, 8477881767167996628ull,
+ 4138672190611038599ull, 3184108624763448222ull}},
+{{8301058613596202910ull, 5985666190532607881ull,
+ 14396712275118574057ull, 3980135780954310277ull}},
+{{16717376679566096579ull, 15270256415151349685ull,
+ 11303788181162802737ull, 2487584863096443923ull}},
+{{7061662794175457012ull, 5252762463657023395ull,
+ 9518049208026115518ull, 3109481078870554904ull}},
+{{4215392474291933361ull, 15789325116426055052ull,
+ 11897561510032644397ull, 3886851348588193630ull}},
+{{11857992333287234159ull, 12174171206979978359ull,
+ 2824289925343014844ull, 2429282092867621019ull}},
+{{10210804398181654794ull, 15217714008724972949ull,
+ 17365420461960932267ull, 3036602616084526273ull}},
+{{17375191516154456396ull, 14410456492478828282ull,
+ 7871717522169001622ull, 3795753270105657842ull}},
+{{15471180716023923152ull, 4394849289371879772ull,
+ 9531509469783013918ull, 2372345793816036151ull}},
+{{892231821320352324ull, 14716933648569625524ull,
+ 7302700818801379493ull, 2965432242270045189ull}},
+{{1115289776650440405ull, 4561109005429868193ull,
+ 13740062041929112271ull, 3706790302837556486ull}},
+{{12226271156474995013ull, 9768222156034749476ull,
+ 3975852757778307265ull, 2316743939273472804ull}},
+{{15282838945593743766ull, 16821963713470824749ull,
+ 4969815947222884081ull, 2895929924091841005ull}},
+{{5268490626710015996ull, 7192396586556367225ull,
+ 10823955952455993006ull, 3619912405114801256ull}},
+{{11197299301814907899ull, 18213867770050234839ull,
+ 13529944940569991257ull, 4524890506393501570ull}},
+{{13915841091275399293ull, 4466138328640314918ull,
+ 13067901606283632440ull, 2828056566495938481ull}},
+{{8171429327239473308ull, 5582672910800393648ull,
+ 2499818952572376838ull, 3535070708119923102ull}},
+{{10214286659049341635ull, 16201713175355267868ull,
+ 12348145727570246855ull, 4418838385149903877ull}},
+{{15607301198760614330ull, 17043599762238124273ull,
+ 10023434088945098236ull, 2761773990718689923ull}},
+{{5674068443168604200ull, 2857755629088103726ull,
+ 7917606592753984892ull, 3452217488398362404ull}},
+{{16315957590815531058ull, 3572194536360129657ull,
+ 9897008240942481115ull, 4315271860497953005ull}},
+{{3279944466618625056ull, 18373522649720938700ull,
+ 8491473159802744648ull, 2697044912811220628ull}},
+{{4099930583273281319ull, 4520159238441621759ull,
+ 10614341449753430811ull, 3371306141014025785ull}},
+{{513227210664213745ull, 1038513029624639295ull,
+ 17879612830619176418ull, 4214132676267532231ull}},
+{{7238296034306215447ull, 5260756661942787463ull,
+ 18092287046778067117ull, 2633832922667207644ull}},
+{{4436184024455381404ull, 11187631845855872233ull,
+ 4168614734763032280ull, 3292291153334009556ull}},
+{{10156916048996614659ull, 13984539807319840291ull,
+ 5210768418453790350ull, 4115363941667511945ull}},
+{{4042229521409190210ull, 4128651361147512278ull,
+ 14785945307602088729ull, 2572102463542194965ull}},
+{{14276158938616263571ull, 9772500219861778251ull,
+ 4647373579220447199ull, 3215128079427743707ull}},
+{{13233512654842941559ull, 7603939256399834910ull,
+ 1197530955598171095ull, 4018910099284679634ull}},
+{{3659259390849450571ull, 11669991062890978675ull,
+ 5360142865676244838ull, 2511818812052924771ull}},
+{{18409132293843976925ull, 5364116791758947535ull,
+ 2088492563667918144ull, 3139773515066155964ull}},
+{{18399729348877583252ull, 6705145989698684419ull,
+ 2610615704584897680ull, 3924716893832694955ull}},
+{{9193987833834795581ull, 4190716243561677762ull,
+ 17772535879861418714ull, 2452948058645434346ull}},
+{{2269112755438718668ull, 14461767341306873011ull,
+ 12992297812971997584ull, 3066185073306792933ull}},
+{{16671448999580562047ull, 18077209176633591263ull,
+ 2405314210932833268ull, 3832731341633491167ull}},
+{{17337184652378933136ull, 2074883698541218731ull,
+ 8420850409474102649ull, 2395457088520931979ull}},
+{{17059794797046278515ull, 7205290641603911318ull,
+ 5914376993415240407ull, 2994321360651164974ull}},
+{{12101371459453072336ull, 4394927283577501244ull,
+ 16616343278623826317ull, 3742901700813956217ull}},
+{{16786729199012946018ull, 5052672561449632229ull,
+ 3467685521498809592ull, 2339313563008722636ull}},
+{{7148353443484018811ull, 6315840701812040287ull,
+ 4334606901873511990ull, 2924141953760903295ull}},
+{{4323755785927635609ull, 17118172914119826167ull,
+ 806572608914502083ull, 3655177442201129119ull}},
+{{793008713982156607ull, 16786030124222394805ull,
+ 14843273816425291316ull, 4568971802751411398ull}},
+{{2801473455452541832ull, 1267896790784220945ull,
+ 4665360116838419169ull, 2855607376719632124ull}},
+{{8113527837743065194ull, 6196557006907664085ull,
+ 5831700146048023961ull, 3569509220899540155ull}},
+{{14753595815606219396ull, 12357382277061968010ull,
+ 2677939164132642047ull, 4461886526124425194ull}},
+{{13832683403181275027ull, 14640892950804811862ull,
+ 6285397996010289183ull, 2788679078827765746ull}},
+{{8067482217121817975ull, 13689430170078626924ull,
+ 17080119531867637287ull, 3485848848534707182ull}},
+{{10084352771402272469ull, 12500101694170895751ull,
+ 12126777377979770801ull, 4357311060668383978ull}},
+{{13220249509767502149ull, 895034531215727988ull,
+ 12190921879664744655ull, 2723319412917739986ull}},
+{{16525311887209377686ull, 14953851219301823697ull,
+ 6015280312726155010ull, 3404149266147174983ull}},
+{{6821581803729558396ull, 9468941987272503814ull,
+ 2907414372480305859ull, 4255186582683968729ull}},
+{{18098546682613137710ull, 3612245732831620931ull,
+ 13346349028868660922ull, 2659491614177480455ull}},
+{{18011497334839034233ull, 13738679202894301972ull,
+ 12071250267658438248ull, 3324364517721850569ull}},
+{{4067627594839241175ull, 17173349003617877466ull,
+ 1254004779290884098ull, 4155455647152313212ull}},
+{{7153953265201913639ull, 15345029145688561320ull,
+ 10007125023911578369ull, 2597159779470195757ull}},
+{{8942441581502392048ull, 5346228376828537938ull,
+ 17120592298316860866ull, 3246449724337744696ull}},
+{{1954679940023214252ull, 15906157507890448231ull,
+ 2953996299186524466ull, 4058062155422180871ull}},
+{{8139203990155590764ull, 14553034460858918048ull,
+ 8763776714632659647ull, 2536288847138863044ull}},
+{{10174004987694488454ull, 13579607057646259656ull,
+ 10954720893290824559ull, 3170361058923578805ull}},
+{{12717506234618110568ull, 12362822803630436666ull,
+ 18305087135040918603ull, 3962951323654473506ull}},
+{{12560127415063707009ull, 5420921243055328964ull,
+ 16052365477827962031ull, 2476844577284045941ull}},
+{{15700159268829633761ull, 2164465535391773301ull,
+ 6230398792002788827ull, 3096055721605057427ull}},
+{{5790141030754878489ull, 16540639974521880339ull,
+ 3176312471576098129ull, 3870069652006321784ull}},
+{{1312995135008105104ull, 3420370956435093356ull,
+ 1985195294735061331ull, 2418793532503951115ull}},
+{{1641243918760131380ull, 18110521750826030407ull,
+ 16316552173700990375ull, 3023491915629938893ull}},
+{{15886612953732327937ull, 18026466170105150104ull,
+ 6560632161844074257ull, 3779364894537423617ull}},
+{{9929133096082704961ull, 4349012328674636959ull,
+ 15629610147221016171ull, 2362103059085889760ull}},
+{{7799730351675993297ull, 824579392415908295ull, 1090268610316718598ull,
+ 2952628823857362201ull}},
+{{5137976921167603717ull, 10254096277374661177ull,
+ 5974521781323286151ull, 3690786029821702751ull}},
+{{14740450621798222083ull, 13326339201000245091ull,
+ 10651605140968135700ull, 2306741268638564219ull}},
+{{13813877258820389700ull, 16657924001250306364ull,
+ 8702820407782781721ull, 2883426585798205274ull}},
+{{17267346573525487125ull, 6987346946280719243ull,
+ 1655153472873701344ull, 3604283232247756593ull}},
+{{16972497198479471002ull, 8734183682850899054ull,
+ 6680627859519514584ull, 4505354040309695741ull}},
+{{5996124730622281472ull, 5458864801781811909ull,
+ 6481235421413390567ull, 2815846275193559838ull}},
+{{12106841931705239744ull, 2211894983799876982ull,
+ 17324916313621514017ull, 3519807843991949797ull}},
+{{5910180377776773872ull, 7376554748177234132ull,
+ 7821087336744728809ull, 4399759804989937247ull}},
+{{12917234772965259478ull, 16139561763679241092ull,
+ 11805708613106537361ull, 2749849878118710779ull}},
+{{16146543466206574348ull, 6339394149316887653ull,
+ 10145449747955783798ull, 3437312347648388474ull}},
+{{6348121277476054223ull, 17147614723500885375ull,
+ 3458440148089953939ull, 4296640434560485593ull}},
+{{10885104826063615745ull, 8411416192974359407ull,
+ 13690740138624690972ull, 2685400271600303495ull}},
+{{8994695014152131778ull, 10514270241217949259ull,
+ 12501739154853475811ull, 3356750339500379369ull}},
+{{6631682749262776818ull, 8531151783095048670ull,
+ 1792115888284681052ull, 4195937924375474212ull}},
+{{17979859773571399223ull, 14555341901289181226ull,
+ 10343444467032701465ull, 2622461202734671382ull}},
+{{13251452680109473221ull, 4359119321329312821ull,
+ 3705933546936101024ull, 3278076503418339228ull}},
+{{2729257794854677814ull, 5448899151661641027ull,
+ 4632416933670126280ull, 4097595629272924035ull}},
+{{17846687186280031298ull, 3405561969788525641ull,
+ 589417574330134973ull, 2560997268295577522ull}},
+{{8473300927567875410ull, 8868638480663044956ull,
+ 9960144004767444524ull, 3201246585369471902ull}},
+{{10591626159459844263ull, 11085798100828806195ull,
+ 3226807969104529847ull, 4001558231711839878ull}},
+{{4313923340448708712ull, 13846152840659085728ull,
+ 15851813035972494866ull, 2500973894819899923ull}},
+{{5392404175560885890ull, 8084319013969081352ull,
+ 15203080276538230679ull, 3126217368524874904ull}},
+{{6740505219451107363ull, 5493712749033963786ull, 557106271963236733ull,
+ 3907771710656093631ull}},
+{{8824501780584330006ull, 5739413477359921318ull,
+ 7265720447618104814ull, 2442357319160058519ull}},
+{{1807255188875636699ull, 16397638883554677456ull,
+ 4470464541095243113ull, 3052946648950073149ull}},
+{{2259068986094545874ull, 6661990549161183108ull,
+ 10199766694796441796ull, 3816183311187591436ull}},
+{{10635290153163866980ull, 13387116130080515250ull,
+ 15598226221102551930ull, 2385114569492244647ull}},
+{{4070740654600057916ull, 7510523125745868255ull,
+ 14886096757950802009ull, 2981393211865305809ull}},
+{{476739799822684491ull, 13999839925609723223ull,
+ 4772562892156338799ull, 3726741514831632262ull}},
+{{7215491402530259663ull, 15667428981147158870ull,
+ 16817909862879875461ull, 2329213446769770163ull}},
+{{18242736290017600387ull, 5749228171151784875ull,
+ 16410701310172456423ull, 2911516808462212704ull}},
+{{18191734344094612580ull, 2574849195512343190ull,
+ 2066632564006018913ull, 3639396010577765881ull}},
+{{13516295893263489916ull, 7830247512817816892ull,
+ 7194976723434911545ull, 4549245013222207351ull}},
+{{17671056970144457006ull, 16423119741579605317ull,
+ 11414389479787901571ull, 2843278133263879594ull}},
+{{8253763157398407545ull, 15917213658547118743ull,
+ 5044614812880101156ull, 3554097666579849493ull}},
+{{5705517928320621527ull, 1449772999474346813ull,
+ 10917454534527514350ull, 4442622083224811866ull}},
+{{5871791714414082407ull, 14741166179953630470ull,
+ 11435095102507084372ull, 2776638802015507416ull}},
+{{16563111679872378816ull, 18426457724942038087ull,
+ 14293868878133855465ull, 3470798502519384270ull}},
+{{16092203581413085616ull, 9198014100895383897ull,
+ 8643964060812543524ull, 4338498128149230338ull}},
+{{3140098210742096654ull, 14972130849914390744ull,
+ 10014163556435227606ull, 2711561330093268961ull}},
+{{3925122763427620818ull, 9491791525538212622ull,
+ 17129390463971422412ull, 3389451662616586201ull}},
+{{14129775491139301830ull, 11864739406922765777ull,
+ 7576680024682114303ull, 4236814578270732752ull}},
+{{1913580654320981788ull, 14332991156967810467ull,
+ 4735425015426321439ull, 2648009111419207970ull}},
+{{16227033873183390947ull, 13304552927782375179ull,
+ 15142653306137677607ull, 3310011389274009962ull}},
+{{15672106323051850780ull, 12019005141300581070ull,
+ 9704944595817321201ull, 4137514236592512453ull}},
+{{5183380433480018833ull, 594349185671781313ull, 8371433381599519703ull,
+ 2585946397870320283ull}},
+{{11090911560277411446ull, 14577994537371890353ull,
+ 5852605708572011724ull, 3232432997337900354ull}},
+{{28581395064600595ull, 18222493171714862942ull,
+ 16539129172569790463ull, 4040541246672375442ull}},
+{{13852921427197539084ull, 18306587259962871194ull,
+ 14948641751283506943ull, 2525338279170234651ull}},
+{{8092779747142148047ull, 18271548056526201089ull,
+ 14074116170676995775ull, 3156672848962793314ull}},
+{{14727660702355072963ull, 18227749052230363457ull,
+ 8369273176491468911ull, 3945841061203491643ull}},
+{{2287258911330838746ull, 18309872185285059017ull,
+ 2924952726093474117ull, 2466150663252182277ull}},
+{{7470759657590936336ull, 9052282176324160059ull,
+ 8267876926044230551ull, 3082688329065227846ull}},
+{{4726763553561282516ull, 6703666701977812170ull,
+ 1111474120700512381ull, 3853360411331534808ull}},
+{{7565913239403189477ull, 6495634697949826558ull, 694671325437820238ull,
+ 2408350257082209255ull}},
+{{234019512399211038ull, 17342915409292059006ull,
+ 14703397212079439009ull, 3010437821352761568ull}},
+{{9515896427353789605ull, 7843586206332910045ull,
+ 18379246515099298762ull, 3763047276690951960ull}},
+{{8253278276309812455ull, 9513927397385456682ull,
+ 11487029071937061726ull, 2351904547931844975ull}},
+{{1093225808532489761ull, 2669037209877045045ull,
+ 9747100321493939254ull, 2939880684914806219ull}},
+{{5978218279093000105ull, 12559668549201082114ull,
+ 7572189383440036163ull, 3674850856143507774ull}},
+{{16696144885721025939ull, 11087899668073964738ull,
+ 241864692445269396ull, 4593563570179384718ull}},
+{{15046776572003029116ull, 16153309329401003769ull,
+ 13986223488060457084ull, 2870977231362115448ull}},
+{{4973412659721622683ull, 1744892588041703096ull,
+ 17482779360075571356ull, 3588721539202644310ull}},
+{{6216765824652028354ull, 2181115735052128870ull,
+ 12630102163239688387ull, 4485901924003305388ull}},
+{{17720536695689681433ull, 17504098398903438207ull,
+ 17117185888879581049ull, 2803688702502065867ull}},
+{{17538984851184713888ull, 8045064943347134047ull,
+ 16784796342672088408ull, 3504610878127582334ull}},
+{{17312045045553504455ull, 10056331179183917559ull,
+ 11757623391485334702ull, 4380763597659477918ull}},
+{{17737557181112022141ull, 1673520968562560570ull,
+ 2736828601250946285ull, 2737977248537173699ull}},
+{{12948574439535251868ull, 6703587229130588617ull,
+ 17256093806845846568ull, 3422471560671467123ull}},
+{{2350659994136901123ull, 8379484036413235772ull,
+ 16958431240129920306ull, 4278089450839333904ull}},
+{{10692534533190339010ull, 9848863541185660261ull,
+ 10599019525081200191ull, 2673805906774583690ull}},
+{{17977354184915311666ull, 7699393408054687422ull,
+ 4025402369496724431ull, 3342257383468229613ull}},
+{{13248320694289363775ull, 5012555741640971374ull,
+ 9643438980298293443ull, 4177821729335287016ull}},
+{{3668514415503464455ull, 827004329311913157ull, 6027149362686433402ull,
+ 2611138580834554385ull}},
+{{9197329037806718473ull, 10257127448494667254ull,
+ 12145622721785429656ull, 3263923226043192981ull}},
+{{2273289260403622283ull, 12821409310618334068ull,
+ 1346970346949623358ull, 4079904032553991227ull}},
+{{10644177824607039735ull, 3401694800709070888ull,
+ 16982757531339372263ull, 2549940020346244516ull}},
+{{13305222280758799669ull, 18087176556168502322ull,
+ 2781702840464663712ull, 3187425025432805646ull}},
+{{7408155814093723778ull, 4162226621501076287ull,
+ 12700500587435605449ull, 3984281281791007057ull}},
+{{11547626411449659217ull, 14130606684506642439ull,
+ 1020283839506171549ull, 2490175801119379411ull}},
+{{9822846995884686118ull, 3828200300351139337ull,
+ 15110412854664878149ull, 3112719751399224263ull}},
+{{16890244763283245551ull, 9396936393866312075ull,
+ 14276330049903709782ull, 3890899689249030329ull}},
+{{8250559967838334517ull, 1261399227739057143ull,
+ 2005177253548736758ull, 2431812305780643956ull}},
+{{5701513941370530243ull, 10800121071528597237ull,
+ 2506471566935920947ull, 3039765382225804945ull}},
+{{11738578445140550707ull, 8888465320983358642ull,
+ 7744775477097289088ull, 3799706727782256181ull}},
+{{11948297546640232096ull, 5555290825614599151ull,
+ 7146327682399499632ull, 2374816704863910113ull}},
+{{10323685914872902216ull, 6944113532018248939ull,
+ 13544595621426762444ull, 2968520881079887641ull}},
+{{8292921375163739866ull, 8680141915022811174ull,
+ 3095686471501289343ull, 3710651101349859552ull}},
+{{571389841049949513ull, 12342617724530338840ull,
+ 1934804044688305839ull, 2319156938343662220ull}},
+{{714237301312436891ull, 10816586137235535646ull,
+ 2418505055860382299ull, 2898946172929577775ull}},
+{{10116168663495321921ull, 8909046653117031653ull,
+ 16858189375107641586ull, 3623682716161972218ull}},
+{{17256896847796540305ull, 1912936279541513758ull,
+ 11849364682029776175ull, 4529603395202465273ull}},
+{{6173874511445449787ull, 8113114202354527955ull, 488323898627528253ull,
+ 2831002122001540796ull}},
+{{3105657120879424329ull, 14753078771370547848ull,
+ 610404873284410316ull, 3538752652501925995ull}},
+{{3882071401099280412ull, 18441348464213184810ull,
+ 14598064146887676607ull, 4423440815627407493ull}},
+{{7037980644114438162ull, 18443371817774322362ull,
+ 11429633101018491831ull, 2764650509767129683ull}},
+{{18020847841997823510ull, 18442528753790515048ull,
+ 9675355357845726885ull, 3455813137208912104ull}},
+{{4079315728787727771ull, 9218102886955980099ull,
+ 12094194197307158607ull, 4319766421511140130ull}},
+{{243729321278635905ull, 12678843331988569418ull,
+ 12170557391744362033ull, 2699854013444462581ull}},
+{{9528033688453070689ull, 2013496109703548060ull,
+ 1378138684398288830ull, 3374817516805578227ull}},
+{{11910042110566338361ull, 11740242173984210883ull,
+ 15557731410780024749ull, 4218521896006972783ull}},
+{{5137933309890267524ull, 9643494367953825754ull,
+ 16641111159378597324ull, 2636576185004357989ull}},
+{{15645788674217610213ull, 12054367959942282192ull,
+ 6966330893941082943ull, 3295720231255447487ull}},
+{{1110491769062461150ull, 10456273931500464837ull,
+ 4096227598998965775ull, 4119650289069309359ull}},
+{{2999900364877732171ull, 13452700234828872379ull,
+ 9477671277015435465ull, 2574781430668318349ull}},
+{{17584933511379328926ull, 2980817238253926761ull,
+ 16458775114696682236ull, 3218476788335397936ull}},
+{{8146108833941997445ull, 3726021547817408452ull,
+ 2126724819661301179ull, 4023095985419247421ull}},
+{{14314690058068524211ull, 22920458172186330ull, 3635046021502007189ull,
+ 2514434990887029638ull}},
+{{8669990535730879456ull, 4640336591142620817ull,
+ 13767179563732284794ull, 3143043738608787047ull}},
+{{15449174188090987224ull, 15023792775783051829ull,
+ 12597288436237968088ull, 3928804673260983809ull}},
+{{11961576876770560967ull, 9389870484864407393ull,
+ 955776245007648199ull, 2455502920788114881ull}},
+{{1116913040681037497ull, 7125652087653121338ull,
+ 5806406324686948153ull, 3069378650985143601ull}},
+{{10619513337706072679ull, 13518751127993789576ull,
+ 11869693924286073095ull, 3836723313731429501ull}},
+{{6637195836066295424ull, 15366748482637200341ull,
+ 9724401711892489636ull, 2397952071082143438ull}},
+{{12908180813510257184ull, 761691529586948810ull,
+ 2932130103010836238ull, 2997440088852679298ull}},
+{{6911853980033045672ull, 10175486448838461821ull,
+ 12888534665618321105ull, 3746800111065849122ull}},
+{{6625751746734347497ull, 17888894076592508398ull,
+ 12667020184438838594ull, 2341750069416155701ull}},
+{{17505561720272710180ull, 13137745558885859689ull,
+ 1998717175266384531ull, 2927187586770194627ull}},
+{{8046894095058724012ull, 11810495930179936708ull,
+ 16333454524365144376ull, 3658984483462743283ull}},
+{{10058617618823405015ull, 14763119912724920885ull,
+ 15805132137029042566ull, 4573730604328429104ull}},
+{{8592479020978322087ull, 4615263927025687649ull,
+ 9878207585643151604ull, 2858581627705268190ull}},
+{{15352284794650290512ull, 5769079908782109561ull,
+ 3124387445199163697ull, 3573227034631585238ull}},
+{{5355297938030699428ull, 11823035904405024856ull,
+ 13128856343353730429ull, 4466533793289481547ull}},
+{{3347061211269187143ull, 9695240449466834487ull,
+ 5899692205382387566ull, 2791583620805925967ull}},
+{{18018884569368647641ull, 2895678524978767300ull,
+ 2762929238300596554ull, 3489479526007407459ull}},
+{{4076861638001257935ull, 12842970193078234934ull,
+ 17288719603157909404ull, 4361849407509259323ull}},
+{{16383096579032949921ull, 17250228407528672641ull,
+ 8499606742759999425ull, 2726155879693287077ull}},
+{{6643812668509023689ull, 7727727454128677090ull,
+ 15236194446877387186ull, 3407694849616608846ull}},
+{{17528137872491055420ull, 436287280806070554ull,
+ 9821871021741958175ull, 4259618562020761058ull}},
+{{15566772188734297542ull, 7190208578144875952ull,
+ 10750355407016111763ull, 2662261601262975661ull}},
+{{1011721162208320311ull, 4376074704253707037ull,
+ 18049630277197527608ull, 3327827001578719576ull}},
+{{5876337471187788292ull, 5470093380317133796ull,
+ 4115293772787357894ull, 4159783751973399471ull}},
+{{12896082956347143491ull, 17253866417980372334ull,
+ 9489587635633180539ull, 2599864844983374669ull}},
+{{6896731658579153556ull, 16955647004048077514ull,
+ 16473670562968863578ull, 3249831056229218336ull}},
+{{17844286610078717752ull, 11971186718205321084ull,
+ 2145344130001527857ull, 4062288820286522921ull}},
+{{1929307094444422787ull, 564462671237243822ull,
+ 12870055127319424671ull, 2538930512679076825ull}},
+{{11635005904910304292ull, 14540636394328718489ull,
+ 2252510853867117126ull, 3173663140848846032ull}},
+{{708699325855716653ull, 8952423456056122304ull, 2815638567333896408ull,
+ 3967078926061057540ull}},
+{{442937078659822908ull, 5595264660035076440ull,
+ 10983146141438461063ull, 2479424328788160962ull}},
+{{553671348324778635ull, 2382394806616457646ull, 4505560639943300521ull,
+ 3099280410985201203ull}},
+{{9915461222260749102ull, 7589679526697959961ull,
+ 1020264781501737747ull, 3874100513731501504ull}},
+{{17726378309981437949ull, 2437706694972531023ull,
+ 637665488438586092ull, 2421312821082188440ull}},
+{{17546286869049409532ull, 3047133368715663779ull,
+ 797081860548232615ull, 3026641026352735550ull}},
+{{17321172567884374011ull, 17643974766176743436ull,
+ 10219724362540066576ull, 3783301282940919437ull}},
+{{1602360818072957949ull, 11027484228860464648ull,
+ 8693170735801235562ull, 2364563301838074648ull}},
+{{2002951022591197436ull, 4560983249220805002ull,
+ 10866463419751544453ull, 2955704127297593310ull}},
+{{11727060815093772603ull, 10312915079953394156ull,
+ 4359707237834654758ull, 3694630159121991638ull}},
+{{16552785046288383685ull, 1833885906543483443ull,
+ 16559875078928822936ull, 2309143849451244773ull}},
+{{16079295289433091702ull, 2292357383179354304ull,
+ 6864785793378864958ull, 2886429811814055967ull}},
+{{1652375038081813012ull, 12088818765828968689ull,
+ 3969296223296193293ull, 3608037264767569959ull}},
+{{6677154816029654168ull, 1275965402004047149ull, 349934260692853713ull,
+ 4510046580959462449ull}},
+{{6479064769232227807ull, 12326693422320999228ull,
+ 11747923959001503330ull, 2818779113099664030ull}},
+{{8098830961540284759ull, 6184994741046473227ull,
+ 5461532911897103355ull, 3523473891374580038ull}},
+{{5511852683497968045ull, 3119557407880703630ull,
+ 16050288176726155002ull, 4404342364218225047ull}},
+{{17279965982468393740ull, 6561409398352827672ull,
+ 16948959138094928732ull, 2752713977636390654ull}},
+{{3153213404375940559ull, 8201761747941034591ull,
+ 11962826885763885107ull, 3440892472045488318ull}},
+{{17776574810752089411ull, 5640516166498905334ull,
+ 5730161570350080576ull, 4301115590056860398ull}},
+{{6498673238292667978ull, 3525322604061815834ull,
+ 17416409036750964072ull, 2688197243785537748ull}},
+{{17346713584720610780ull, 4406653255077269792ull,
+ 3323767222229153474ull, 3360246554731922186ull}},
+{{3236647907191211859ull, 14731688605701363049ull,
+ 13378081064641217650ull, 4200308193414902732ull}},
+{{13552119988062977172ull, 13818991396990739809ull,
+ 17584672702255536839ull, 2625192620884314207ull}},
+{{3105091929796557753ull, 12662053227811036858ull,
+ 17369154859392033145ull, 3281490776105392759ull}},
+{{13104736949100472999ull, 1992508479481632360ull,
+ 17099757555812653528ull, 4101863470131740949ull}},
+{{8190460593187795625ull, 1245317799676020225ull,
+ 12993191481596602407ull, 2563664668832338093ull}},
+{{14849761759912132435ull, 15391705304877188993ull,
+ 2406431296713589296ull, 3204580836040422617ull}},
+{{4727144144608001831ull, 792887557386934626ull, 7619725139319374525ull,
+ 4005726045050528271ull}},
+{{7566151108807389049ull, 2801397732580528093ull,
+ 11679857239715690934ull, 2503578778156580169ull}},
+{{14069374904436624215ull, 12725119202580435924ull,
+ 764763494362449955ull, 3129473472695725212ull}},
+{{17586718630545780268ull, 11294712984798157001ull,
+ 955954367953062444ull, 3911841840869656515ull}},
+{{4074170116450030812ull, 16282567652353623934ull,
+ 16738372544466521691ull, 2444901150543535321ull}},
+{{14316084682417314323ull, 15741523547014642013ull,
+ 7087907625300988402ull, 3056126438179419152ull}},
+{{4060047797739479191ull, 10453532396913526709ull,
+ 8859884531626235503ull, 3820158047724273940ull}},
+{{4843372882800868447ull, 13450986775712036049ull,
+ 14760799869121172997ull, 2387598779827671212ull}},
+{{10665902121928473462ull, 2978675414357881349ull, 4255762691914631ull,
+ 2984498474784589016ull}},
+{{17944063670837979732ull, 17558402323229515398ull, 5319703364893288ull,
+ 3730623093480736270ull}},
+{{6603353775846349429ull, 10974001452018447124ull,
+ 13838382869885222017ull, 2331639433425460168ull}},
+{{8254192219807936786ull, 18329187833450446809ull,
+ 17297978587356527521ull, 2914549291781825210ull}},
+{{14929426293187308886ull, 9076426736530894799ull,
+ 12399101197340883594ull, 3643186614727281513ull}},
+{{14050096848056748203ull, 2122161383808842691ull,
+ 1663818441393940781ull, 4553983268409101892ull}},
+{{6475467520821773675ull, 3632193874094220634ull,
+ 10263258562725988796ull, 2846239542755688682ull}},
+{{17317706437881992902ull, 4540242342617775792ull,
+ 3605701166552710187ull, 3557799428444610853ull}},
+{{3200388973642939511ull, 1063616909844831837ull,
+ 9118812476618275638ull, 4447249285555763566ull}},
+{{4306086117740531147ull, 14499818623935183610ull,
+ 1087571779459034369ull, 2779530803472352229ull}},
+{{14605979684030439741ull, 4289715224636815800ull,
+ 5971150742751180866ull, 3474413504340440286ull}},
+{{18257474605038049677ull, 14585516067650795558ull,
+ 16687310465293751890ull, 4343016880425550357ull}},
+{{6799235609721393144ull, 13727633560709135128ull,
+ 12735412050022288883ull, 2714385550265968973ull}},
+{{8499044512151741430ull, 12547855932459031006ull,
+ 2084207007245697392ull, 3392981937832461217ull}},
+{{1400433603334900979ull, 15684819915573788758ull,
+ 7216944777484509644ull, 4241227422290576521ull}},
+{{14710329057366476824ull, 579640410378842165ull,
+ 16039805531996288288ull, 2650767138931610325ull}},
+{{4552853266425932318ull, 724550512973552707ull, 6214698859713196648ull,
+ 3313458923664512907ull}},
+{{1079380564605027494ull, 905688141216940884ull, 3156687556214107906ull,
+ 4141823654580641134ull}},
+{{9897984889732917992ull, 5177741106687975956ull,
+ 15807987777915981153ull, 2588639784112900708ull}},
+{{12372481112166147489ull, 11083862401787357849ull,
+ 1313240648685424825ull, 3235799730141125886ull}},
+{{1630543334925520650ull, 19769946952033600ull, 10864922847711556840ull,
+ 4044749662676407357ull}},
+{{1019089584328450406ull, 12356216845021000ull, 9096419789033416977ull,
+ 2527968539172754598ull}},
+{{1273861980410563008ull, 4627131289483664154ull,
+ 2147152699436995413ull, 3159960673965943248ull}},
+{{10815699512367979567ull, 10395600130281968096ull,
+ 2683940874296244266ull, 3949950842457429060ull}},
+{{6759812195229987230ull, 11108936099853617964ull,
+ 10900835083289928474ull, 2468719276535893162ull}},
+{{8449765244037484037ull, 4662798087962246647ull,
+ 4402671817257634785ull, 3085899095669866453ull}},
+{{5950520536619467142ull, 10440183628380196213ull,
+ 10115025789999431385ull, 3857373869587333066ull}},
+{{6024918344600860916ull, 18054329813806092393ull,
+ 10933577137177032519ull, 2410858668492083166ull}},
+{{12142833949178464049ull, 17956226248830227587ull,
+ 4443599384616514841ull, 3013573335615103958ull}},
+{{10566856418045692157ull, 8610224755755620772ull,
+ 14777871267625419360ull, 3766966669518879947ull}},
+{{15827657298133333406ull, 5381390472347262982ull,
+ 6930326533052193148ull, 2354354168449299967ull}},
+{{10561199585811890950ull, 6726738090434078728ull,
+ 4051222147887853531ull, 2942942710561624959ull}},
+{{13201499482264863687ull, 3796736594615210506ull,
+ 452341666432429010ull, 3678678388202031199ull}},
+{{7278502315976303801ull, 13969292780123788941ull,
+ 14400485138322699974ull, 4598347985252538998ull}},
+{{6854906956698883828ull, 4119121969149980184ull,
+ 4388617193024299580ull, 2873967490782836874ull}},
+{{8568633695873604785ull, 5148902461437475230ull,
+ 14709143528135150283ull, 3592459363478546092ull}},
+{{1487420082987230173ull, 1824442058369456134ull,
+ 18386429410168937854ull, 4490574204348182615ull}},
+{{14764695607149182570ull, 14975334341763073795ull,
+ 18409047408996668014ull, 2806608877717614134ull}},
+{{13844183490509090309ull, 9495795890349066436ull,
+ 13787937224391059210ull, 3508261097147017668ull}},
+{{17305229363136362886ull, 2646372826081557237ull,
+ 17234921530488824013ull, 4385326371433772085ull}},
+{{13121611361173920756ull, 3959826025514667225ull,
+ 13077668965769208960ull, 2740828982146107553ull}},
+{{2566956146185237232ull, 4949782531893334032ull,
+ 2512028151929347488ull, 3426036227682634442ull}},
+{{3208695182731546540ull, 6187228164866667540ull,
+ 12363407226766460168ull, 4282545284603293052ull}},
+{{11228806526061992396ull, 3867017603041667212ull,
+ 16950501553583813413ull, 2676590802877058157ull}},
+{{14036008157577490495ull, 9445458022229471919ull,
+ 7353068886697603054ull, 3345738503596322697ull}},
+{{12933324178544475214ull, 2583450490932064091ull,
+ 13803022126799391722ull, 4182173129495403371ull}},
+{{5777484602376603057ull, 6226342575259927961ull,
+ 6321045820035925874ull, 2613858205934627107ull}},
+{{11833541771398141725ull, 17006300255929685759ull,
+ 3289621256617519438ull, 3267322757418283884ull}},
+{{10180241195820289253ull, 12034503283057331391ull,
+ 4112026570771899298ull, 4084153446772854855ull}},
+{{13280179775028762639ull, 12133250570338220023ull,
+ 9487545634373518917ull, 2552595904233034284ull}},
+{{11988538700358565395ull, 1331505157640611317ull,
+ 11859432042966898647ull, 3190744880291292855ull}},
+{{1150615320166043031ull, 15499439502332927859ull,
+ 10212604035281235404ull, 3988431100364116069ull}},
+{{16860035639599634559ull, 463777652103304103ull,
+ 8688720531264466080ull, 2492769437727572543ull}},
+{{16463358531072155294ull, 579722065129130129ull,
+ 6249214645653194696ull, 3115961797159465679ull}},
+{{6744140108558030406ull, 724652581411412662ull, 3199832288639105466ull,
+ 3894952246449332099ull}},
+{{18050145623130932716ull, 5064593881809520817ull,
+ 18140796244895298580ull, 2434345154030832561ull}},
+{{8727623973631502183ull, 6330742352261901022ull,
+ 8840937250836959513ull, 3042931442538540702ull}},
+{{1686157930184601920ull, 12525113958754764182ull,
+ 1827799526691423583ull, 3803664303173175878ull}},
+{{14888906761647539912ull, 14745725251862809469ull,
+ 14977432759464303451ull, 2377290189483234923ull}},
+{{4776075396777261178ull, 13820470546401123933ull,
+ 14110104930902991410ull, 2971612736854043654ull}},
+{{10581780264398964377ull, 8052216146146629108ull,
+ 8414259126773963455ull, 3714515921067554568ull}},
+{{15836984702104128544ull, 11950164118982725048ull,
+ 5258911954233727159ull, 2321572450667221605ull}},
+{{1349486803920609063ull, 10326019130301018407ull,
+ 11185325961219546853ull, 2901965563334027006ull}},
+{{15521916560182925041ull, 17519209931303660912ull,
+ 4758285414669657758ull, 3627456954167533758ull}},
+{{955651626519104685ull, 12675640377274800333ull,
+ 15171228805191848006ull, 4534321192709417197ull}},
+{{2903125275788134380ull, 3310589217369362304ull,
+ 11787861012458598956ull, 2833950745443385748ull}},
+{{3628906594735167975ull, 4138236521711702880ull,
+ 14734826265573248695ull, 3542438431804232185ull}},
+{{4536133243418959969ull, 561109633712240696ull, 4583474776684397157ull,
+ 4428048039755290232ull}},
+{{2835083277136849981ull, 2656536530283844387ull,
+ 2864671735427748223ull, 2767530024847056395ull}},
+{{17378912151703226188ull, 17155728718136969195ull,
+ 17415897724566848990ull, 3459412531058820493ull}},
+{{17111954171201644831ull, 12221288860816435686ull,
+ 7934814100426397526ull, 4324265663823525617ull}},
+{{6083285338573640115ull, 3026619519582884400ull,
+ 16488473858834968214ull, 2702666039889703510ull}},
+{{7604106673217050144ull, 13006646436333381308ull,
+ 11387220286688934459ull, 3378332549862129388ull}},
+{{9505133341521312680ull, 11646622026989338731ull,
+ 14234025358361168074ull, 4222915687327661735ull}},
+{{3634865329237126473ull, 11890824785295724611ull,
+ 15813794876616811902ull, 2639322304579788584ull}},
+{{18378639716828571803ull, 5640158944764879955ull,
+ 1320499522061463262ull, 3299152880724735731ull}},
+{{18361613627608326850ull, 16273570717810875752ull,
+ 15485682457858992789ull, 4123941100905919663ull}},
+{{11476008517255204282ull, 12476824707845491297ull,
+ 16596080563802952349ull, 2577463188066199789ull}},
+{{509952591286841640ull, 1760972829524700410ull, 6910042649471526725ull,
+ 3221828985082749737ull}},
+{{9860812775963327858ull, 6812902055333263416ull,
+ 13249239330266796310ull, 4027286231353437171ull}},
+{{6163007984977079911ull, 18093121839865453347ull,
+ 5974931572203053741ull, 2517053894595898232ull}},
+{{3092073962793961985ull, 8781344244549652972ull,
+ 7468664465253817177ull, 3146317368244872790ull}},
+{{3865092453492452481ull, 15588366324114454119ull,
+ 112458544712495663ull, 3932896710306090988ull}},
+{{9333211811073864657ull, 16660257980212615680ull,
+ 9293658627300085597ull, 2458060443941306867ull}},
+{{11666514763842330821ull, 6990264419983605888ull,
+ 7005387265697719093ull, 3072575554926633584ull}},
+{{14583143454802913526ull, 13349516543406895264ull,
+ 8756734082122148866ull, 3840719443658291980ull}},
+{{9114464659251820954ull, 12955133858056697444ull,
+ 14696330838181118849ull, 2400449652286432487ull}},
+{{11393080824064776192ull, 2358859267288708093ull,
+ 13758727529299010658ull, 3000562065358040609ull}},
+{{406292974798806528ull, 12171946120965660925ull,
+ 3363351356341599610ull, 3750702581697550762ull}},
+{{2559776118462948032ull, 12219152344030925982ull,
+ 6713780616140887660ull, 2344189113560969226ull}},
+{{12423092184933460848ull, 15273940430038657477ull,
+ 17615597807030885383ull, 2930236391951211532ull}},
+{{1693807175884662348ull, 14480739519120933943ull,
+ 3572753185079055113ull, 3662795489939014416ull}},
+{{15952317025137991647ull, 4265866343619003716ull,
+ 4465941481348818892ull, 4578494362423768020ull}},
+{{746826103856468972ull, 11889538501616653131ull,
+ 12014585462697787615ull, 2861558976514855012ull}},
+{{14768590685102749926ull, 10250237108593428509ull,
+ 15018231828372234519ull, 3576948720643568765ull}},
+{{4625680301096273696ull, 8201110367314397733ull,
+ 4937731730183129437ull, 4471185900804460957ull}},
+{{5196893197398865012ull, 7431536988785192535ull,
+ 5391925340578149850ull, 2794491188002788098ull}},
+{{1884430478321193361ull, 66049199126714861ull, 15963278712577463121ull,
+ 3493113985003485122ull}},
+{{6967224116328879605ull, 4694247517335781480ull,
+ 10730726353867053093ull, 4366392481254356403ull}},
+{{4354515072705549753ull, 5239747707548557377ull,
+ 4400860961953214231ull, 2728995300783972752ull}},
+{{10054829859309325096ull, 1937998616008308817ull,
+ 5501076202441517789ull, 3411244125979965940ull}},
+{{17180223342564044273ull, 7034184288437773925ull,
+ 6876345253051897236ull, 4264055157474957425ull}},
+{{13043482598316221623ull, 13619737217128384511ull,
+ 15826930829225905532ull, 2665034473421848390ull}},
+{{11692667229467889125ull, 17024671521410480639ull,
+ 10560291499677606107ull, 3331293091777310488ull}},
+{{10004148018407473502ull, 16669153383335712895ull,
+ 13200364374597007634ull, 4164116364721638110ull}},
+{{13170121539145752795ull, 15029906883012208463ull,
+ 3638541715695741867ull, 2602572727951023819ull}},
+{{11850965905504803089ull, 14175697585337872675ull,
+ 18383235199901841046ull, 3253215909938779773ull}},
+{{10202021363453615958ull, 8496249944817565036ull,
+ 9143985944595137596ull, 4066519887423474717ull}},
+{{15599635389013285782ull, 14533528252365753955ull,
+ 8020834224585654949ull, 2541574929639671698ull}},
+{{14887858217839219323ull, 4331852260175028732ull,
+ 802670743877292879ull, 3176968662049589623ull}},
+{{163078698589472538ull, 803129306791398012ull, 14838396485128779811ull,
+ 3971210827561987028ull}},
+{{9325296223473196144ull, 16642856881240481421ull, 50625766350711573ull,
+ 2482006767226241893ull}},
+{{16268306297768883084ull, 6968513046268438064ull,
+ 4674968226365777371ull, 3102508459032802366ull}},
+{{1888638798501552239ull, 4098955289408159677ull,
+ 15067082319811997522ull, 3878135573791002957ull}},
+{{3486242258277164102ull, 7173533074307487702ull,
+ 11722769459096192403ull, 2423834733619376848ull}},
+{{13581174859701230935ull, 4355230324456971723ull,
+ 14653461823870240504ull, 3029793417024221060ull}},
+{{12364782556199150764ull, 5444037905571214654ull,
+ 18316827279837800630ull, 3787241771280276325ull}},
+{{3116303079197081324ull, 17237581746264172871ull,
+ 13753860059112319345ull, 2367026107050172703ull}},
+{{17730436904278515367ull, 7711919127548052376ull,
+ 12580639055463011278ull, 2958782633812715879ull}},
+{{3716302056638592592ull, 416526872580289663ull,
+ 11114112800901376194ull, 3698478292265894849ull}},
+{{9240217813040202226ull, 4872015313790068943ull, 28791472922278265ull,
+ 2311548932666184281ull}},
+{{6938586247872864879ull, 10701705160664974083ull,
+ 4647675359580235735ull, 2889436165832730351ull}},
+{{4061546791413693195ull, 8765445432403829700ull,
+ 1197908181047906765ull, 3611795207290912939ull}},
+{{5076933489267116493ull, 15568492808932175029ull,
+ 15332443281592047168ull, 4514744009113641173ull}},
+{{5478926440005641760ull, 9730308005582609393ull,
+ 11888620060208723432ull, 2821715005696025733ull}},
+{{11460344068434440104ull, 12162885006978261741ull,
+ 1025717019978740578ull, 3527143757120032167ull}},
+{{490372030260886418ull, 5980234221868051369ull,
+ 15117204330255589435ull, 4408929696400040208ull}},
+{{11835697564981523772ull, 1431803379453838153ull,
+ 9448252706409743397ull, 2755581060250025130ull}},
+{{959563900944741002ull, 6401440242744685596ull, 2586943846157403438ull,
+ 3444476325312531413ull}},
+{{1199454876180926253ull, 17225172340285632803ull,
+ 7845365826124142201ull, 4305595406640664266ull}},
+{{16890560362108936572ull, 3848203685037438645ull,
+ 9515039659754976780ull, 2690997129150415166ull}},
+{{7278142397354007003ull, 4810254606296798307ull,
+ 2670427537838945167ull, 3363746411438018958ull}},
+{{4485991978265120850ull, 1401132239443609980ull,
+ 12561406459153457267ull, 4204683014297523697ull}},
+{{12027117023270476339ull, 17016608714148113901ull,
+ 933350009329828935ull, 2627926883935952311ull}},
+{{1198838223805931712ull, 16659074874257754473ull,
+ 15001745566944449881ull, 3284908604919940388ull}},
+{{6110233798184802544ull, 6988785537540029379ull, 305437884971010736ull,
+ 4106135756149925486ull}},
+{{1513053114651807638ull, 4367990960962518362ull,
+ 14025956733389045422ull, 2566334847593703428ull}},
+{{11114688430169535356ull, 14683360738057923760ull,
+ 17532445916736306777ull, 3207918559492129285ull}},
+{{13893360537711919194ull, 4519142867290240988ull,
+ 8080499340638219760ull, 4009898199365161607ull}},
+{{17906722372924725305ull, 2824464292056400617ull,
+ 11967841115539969206ull, 2506186374603226004ull}},
+{{8548344910873742919ull, 12753952401925276580ull,
+ 14959801394424961507ull, 3132732968254032505ull}},
+{{10685431138592178648ull, 11330754483979207821ull,
+ 4864693687749038172ull, 3915916210317540632ull}},
+{{8984237470833805607ull, 16305093589341780696ull,
+ 3040433554843148857ull, 2447447631448462895ull}},
+{{11230296838542257009ull, 6546308931395062158ull,
+ 17635599998836099784ull, 3059309539310578618ull}},
+{{4814499011323045453ull, 8182886164243827698ull,
+ 12821127961690348922ull, 3824136924138223273ull}},
+{{7620747900504291312ull, 9725989871079780215ull,
+ 1095675948415386220ull, 2390085577586389546ull}},
+{{4914248857202976236ull, 12157487338849725269ull,
+ 10592966972374008583ull, 2987606971982986932ull}},
+{{10754497089931108199ull, 10585173155134768682ull,
+ 13241208715467510729ull, 3734508714978733665ull}},
+{{11333246699634330529ull, 18144948268027700186ull,
+ 1358226419526112349ull, 2334067946861708541ull}},
+{{4943186337688137353ull, 8846127279752461521ull,
+ 6309469042835028341ull, 2917584933577135676ull}},
+{{10790668940537559595ull, 15669345118117964805ull,
+ 7886836303543785426ull, 3646981166971419595ull}},
+{{18100022194099337398ull, 10363309360792680198ull,
+ 5246859361002343879ull, 4558726458714274494ull}},
+{{6700827852884697970ull, 13394597378136506980ull,
+ 17114345155908628636ull, 2849204036696421558ull}},
+{{8376034816105872462ull, 16743246722670633725ull,
+ 12169559408031009987ull, 3561505045870526948ull}},
+{{15081729538559728481ull, 16317372384910904252ull,
+ 15211949260038762484ull, 4451881307338158685ull}},
+{{202708924745054493ull, 974985703714539350ull, 11813311296737920505ull,
+ 2782425817086349178ull}},
+{{9476758192786093924ull, 5830418148070562091ull,
+ 5543267084067624823ull, 3478032271357936473ull}},
+{{7234261722555229501ull, 2676336666660814710ull,
+ 11540769873511918933ull, 4347540339197420591ull}},
+{{18356471631879182150ull, 3978553425876703145ull,
+ 14130510198586031189ull, 2717212711998387869ull}},
+{{9110531484566813976ull, 9584877800773266836ull,
+ 3828079692950375274ull, 3396515889997984837ull}},
+{{11388164355708517470ull, 2757725214111807737ull,
+ 9396785634615356997ull, 4245644862497481046ull}},
+{{200073694676741563ull, 4029421268033573788ull, 1261305003207210219ull,
+ 2653528039060925654ull}},
+{{250092118345926953ull, 425090566614579331ull, 10800003290863788582ull,
+ 3316910048826157067ull}},
+{{14147673203214572403ull, 9754735245122999971ull,
+ 8888318095152347823ull, 4146137561032696334ull}},
+{{6536452742795413800ull, 13014238555842956838ull,
+ 943512791042829485ull, 2591335975645435209ull}},
+{{17393937965349043058ull, 2432740139521532335ull,
+ 5791077007230924761ull, 3239169969556794011ull}},
+{{17130736438258915919ull, 7652611192829303323ull,
+ 2627160240611268047ull, 4048962461945992514ull}},
+{{8400867264698128497ull, 11700411023159396433ull,
+ 6253661168809430433ull, 2530601538716245321ull}},
+{{15112770099300048526ull, 790455723667081829ull,
+ 12428762479439175946ull, 3163251923395306651ull}},
+{{5055904568842896945ull, 10211441691438628095ull,
+ 10924267080871582028ull, 3954064904244133314ull}},
+{{10077469383167892447ull, 15605523094003918367ull,
+ 11439352943972126671ull, 2471290565152583321ull}},
+{{7985150710532477654ull, 14895217849077510055ull,
+ 464133124682994627ull, 3089113206440729152ull}},
+{{5369752369738209164ull, 14007336292919499665ull,
+ 580166405853743284ull, 3861391508050911440ull}},
+{{14885310277154850488ull, 17977957219929463098ull,
+ 362604003658589552ull, 2413369692531819650ull}},
+{{9383265809588787301ull, 4025702451202277257ull,
+ 9676627041428012749ull, 3016712115664774562ull}},
+{{16340768280413372031ull, 9643814082430234475ull,
+ 2872411764930240128ull, 3770890144580968203ull}},
+{{7907137166044663567ull, 6027383801518896547ull,
+ 17936158417577257744ull, 2356806340363105126ull}},
+{{5272235439128441555ull, 7534229751898620684ull,
+ 13196825985116796372ull, 2946007925453881408ull}},
+{{6590294298910551944ull, 9417787189873275855ull,
+ 16496032481395995465ull, 3682509906817351760ull}},
+{{3626181855210802025ull, 16383920005768982723ull,
+ 2173296528035442715ull, 4603137383521689701ull}},
+{{18407264724002608930ull, 7934106994391920249ull,
+ 3664153339235845649ull, 2876960864701056063ull}},
+{{9174022849721097450ull, 14529319761417288216ull,
+ 18415249729326970773ull, 3596201080876320078ull}},
+{{11467528562151371813ull, 4326591646489446558ull,
+ 13795690124803937659ull, 4495251351095400098ull}},
+{{2555519332917219479ull, 398276769842210147ull,
+ 13233992346429848941ull, 2809532094434625061ull}},
+{{17029457221428688061ull, 5109531980730150587ull,
+ 2707432377755147464ull, 3511915118043281327ull}},
+{{16675135508358472172ull, 6386914975912688234ull,
+ 17219348527476098042ull, 4389893897554101658ull}},
+{{15033645711151433012ull, 8603507878372818050ull,
+ 15373778848099949180ull, 2743683685971313536ull}},
+{{9568685102084515456ull, 10754384847966022563ull,
+ 770479486415384859ull, 3429604607464141921ull}},
+{{7349170359178256416ull, 8831295041530140300ull,
+ 5574785376446618978ull, 4287005759330177401ull}},
+{{13816603511341186068ull, 10131245419383725591ull,
+ 15013455906347606621ull, 2679378599581360875ull}},
+{{12659068370749094681ull, 17275742792657044893ull,
+ 14155133864507120372ull, 3349223249476701094ull}},
+{{1988777408154204640ull, 3147934417111754501ull,
+ 8470545293779124658ull, 4186529061845876368ull}},
+{{3548828889310071852ull, 6579145029122234467ull,
+ 5294090808611952911ull, 2616580663653672730ull}},
+{{18271094166919753527ull, 3612245267975405179ull,
+ 15840985547619716947ull, 3270725829567090912ull}},
+{{18227181690222304005ull, 18350364640251420186ull,
+ 1354487860815094567ull, 4088407286958863641ull}},
+{{16003674574816327907ull, 18386506927798219472ull,
+ 12375769959077903864ull, 2555254554349289775ull}},
+{{1557849144810858268ull, 4536389586038222725ull,
+ 10858026430419991927ull, 3194068192936612219ull}},
+{{6558997449440960738ull, 1058800964120390502ull,
+ 8960847019597602005ull, 3992585241170765274ull}},
+{{17934431461182764174ull, 2967593611788938015ull,
+ 10212215405675889157ull, 2495365775731728296ull}},
+{{17806353308051067313ull, 8321178033163560423ull,
+ 12765269257094861446ull, 3119207219664660370ull}},
+{{17646255616636446237ull, 1178100504599674721ull,
+ 6733214534513801000ull, 3899009024580825463ull}},
+{{4111380732756697042ull, 736312815374796701ull,
+ 11125788111712207481ull, 2436880640363015914ull}},
+{{9750911934373259207ull, 5532077037645883780ull,
+ 4683863102785483543ull, 3046100800453769893ull}},
+{{12188639917966574008ull, 2303410278629966821ull,
+ 10466514896909242333ull, 3807626000567212366ull}},
+{{9923742957942802707ull, 3745474433357423215ull,
+ 1929885792140888554ull, 2379766250354507729ull}},
+{{7792992679001115480ull, 13905215078551554827ull,
+ 7024043258603498596ull, 2974707812943134661ull}},
+{{5129554830324006446ull, 17381518848189443534ull,
+ 13391740091681761149ull, 3718384766178918326ull}},
+{{17041029824234667741ull, 13169292289332096160ull,
+ 3758151538873712814ull, 2323990478861823954ull}},
+{{2854543206583783060ull, 7238243324810344393ull,
+ 13921061460446916826ull, 2904988098577279942ull}},
+{{8179865026657116729ull, 18271176192867706299ull,
+ 8177954788703870224ull, 3631235123221599928ull}},
+{{5613145264894008007ull, 4392226167375081258ull,
+ 10222443485879837781ull, 4539043904026999910ull}},
+{{8119901808986142909ull, 5050984363823119738ull,
+ 1777341160247510709ull, 2836902440016874944ull}},
+{{926505224377902828ull, 10925416473206287577ull,
+ 2221676450309388386ull, 3546128050021093680ull}},
+{{5769817548899766439ull, 4433398554653083663ull,
+ 2777095562886735483ull, 4432660062526367100ull}},
+{{10523664995703435880ull, 465031087444483337ull,
+ 10959056763658985485ull, 2770412539078979437ull}},
+{{17766267263056682754ull, 5192974877732992075ull,
+ 18310506973001119760ull, 3463015673848724296ull}},
+{{17596148060393465539ull, 6491218597166240094ull,
+ 4441389642541848084ull, 4328769592310905371ull}},
+{{6385906519318528058ull, 13280383660083675867ull,
+ 470025517374961100ull, 2705480995194315857ull}},
+{{3370697130720772168ull, 16600479575104594834ull,
+ 5199217915146089279ull, 3381851243992894821ull}},
+{{13436743450255741018ull, 16138913450453355638ull,
+ 11110708412359999503ull, 4227314054991118526ull}},
+{{3786278637982450233ull, 17004349934174429130ull,
+ 2332506739297611785ull, 2642071284369449079ull}},
+{{13956220334332838599ull, 7420379362435872700ull,
+ 16750691479404178444ull, 3302589105461811348ull}},
+{{17445275417916048248ull, 9275474203044840875ull,
+ 2491620275545671439ull, 4128236381827264186ull}},
+{{8597454126983836203ull, 12714700404544107403ull,
+ 6168948690643432553ull, 2580147738642040116ull}},
+{{6135131640302407350ull, 2058317450397970542ull,
+ 7711185863304290692ull, 3225184673302550145ull}},
+{{16892286587232784995ull, 2572896812997463177ull,
+ 14250668347557751269ull, 4031480841628187681ull}},
+{{3640150089379408766ull, 3913903517337108438ull,
+ 1989138689582512687ull, 2519675526017617301ull}},
+{{13773559648579036766ull, 280693378243997643ull,
+ 7098109380405528763ull, 3149594407522021626ull}},
+{{12605263542296408053ull, 14185924778087160766ull,
+ 18096008762361686761ull, 3936993009402527032ull}},
+{{3266603695507867129ull, 1948673958663393623ull,
+ 11310005476476054226ull, 2460620630876579395ull}},
+{{17918312674666997623ull, 11659214485184017836ull,
+ 9525820827167679878ull, 3075775788595724244ull}},
+{{3951146769624195413ull, 5350646069625246488ull,
+ 11907276033959599848ull, 3844719735744655305ull}},
+{{2469466731015122133ull, 3344153793515779055ull, 524518493583668049ull,
+ 2402949834840409566ull}},
+{{16921891469051066379ull, 8791878260322111722ull,
+ 9879020153834360869ull, 3003687293550511957ull}},
+{{11928992299459057165ull, 15601533843830027557ull,
+ 16960461210720338990ull, 3754609116938139946ull}},
+{{9761463196375604680ull, 5139272633966379319ull,
+ 15211974275127599773ull, 2346630698086337466ull}},
+{{7590142977042117946ull, 11035776810885362053ull,
+ 9791595807054723908ull, 2933288372607921833ull}},
+{{14099364739730035337ull, 13794721013606702566ull,
+ 16851180777245792789ull, 3666610465759902291ull}},
+{{8400833887807768363ull, 3408343211726214496ull,
+ 16452289953129853083ull, 4583263082199877864ull}},
+{{5250521179879855227ull, 18271115571824741724ull,
+ 10282681220706158176ull, 2864539426374923665ull}},
+{{6563151474849819034ull, 4392150391071375539ull,
+ 17465037544310085625ull, 3580674282968654581ull}},
+{{3592253325134885888ull, 10101874007266607328ull,
+ 7996238875105443319ull, 4475842853710818227ull}},
+{{2245158328209303680ull, 13231200282182711436ull,
+ 2691806287727208122ull, 2797401783569261392ull}},
+{{2806447910261629600ull, 7315628315873613487ull,
+ 3364757859659010153ull, 3496752229461576740ull}},
+{{17343117943109200712ull, 13756221413269404762ull,
+ 4205947324573762691ull, 4370940286826970925ull}},
+{{15451134732870638349ull, 6291795374079684024ull,
+ 4934560087072295634ull, 2731837679266856828ull}},
+{{867174342378746320ull, 17088116254454380839ull,
+ 6168200108840369542ull, 3414797099083571035ull}},
+{{14919025983255596612ull, 12136773281213200240ull,
+ 3098564117623074024ull, 4268496373854463794ull}},
+{{9324391239534747883ull, 7585483300758250150ull,
+ 6548288591941809169ull, 2667810233659039871ull}},
+{{2432117012563659045ull, 14093540144375200592ull,
+ 3573674721499873557ull, 3334762792073799839ull}},
+{{3040146265704573807ull, 3781867125186837028ull,
+ 18302151457157005659ull, 4168453490092249798ull}},
+{{11123463452920134437ull, 57823944028079190ull, 6827158642295740633ull,
+ 2605283431307656124ull}},
+{{4680957279295392239ull, 4683965948462486892ull,
+ 8533948302869675791ull, 3256604289134570155ull}},
+{{5851196599119240298ull, 1243271417150720711ull,
+ 6055749360159706835ull, 4070755361418212694ull}},
+{{10574526902090607043ull, 16917945700215058108ull,
+ 17619901405381980483ull, 2544222100886382933ull}},
+{{13218158627613258803ull, 16535746106841434731ull,
+ 8189818701445311892ull, 3180277626107978667ull}},
+{{11911012266089185600ull, 2222938559842241798ull,
+ 5625587358379251962ull, 3975347032634973334ull}},
+{{2832696647878353096ull, 6001022618328789028ull,
+ 17351050154269196188ull, 2484591895396858333ull}},
+{{3540870809847941370ull, 7501278272910986285ull,
+ 7853754637554331523ull, 3105739869246072917ull}},
+{{9037774530737314616ull, 4764911822711344952ull,
+ 14428879315370302308ull, 3882174836557591146ull}},
+{{5648609081710821635ull, 12201441926049366403ull,
+ 13629735590533826846ull, 2426359272848494466ull}},
+{{2449075333711139140ull, 6028430370706932196ull,
+ 7813797451312507750ull, 3032949091060618083ull}},
+{{3061344167138923925ull, 16758910000238441053ull,
+ 5155560795713246783ull, 3791186363825772604ull}},
+{{4219183113675521405ull, 17391847777790107514ull,
+ 12445597534175555047ull, 2369491477391107877ull}},
+{{14497350928949177564ull, 17128123703810246488ull,
+ 1721938862437280097ull, 2961864346738884847ull}},
+{{18121688661186471955ull, 7575096574480644398ull,
+ 15987481633328763834ull, 3702330433423606058ull}},
+{{6714369394814157068ull, 9346121377477790653ull,
+ 14603862039257865300ull, 2313956520889753786ull}},
+{{13004647761945084239ull, 11682651721847238316ull,
+ 9031455512217555817ull, 2892445651112192233ull}},
+{{16255809702431355299ull, 768256597026884183ull,
+ 15901005408699332676ull, 3615557063890240291ull}},
+{{15708076109611806220ull, 960320746283605229ull,
+ 15264570742446777941ull, 4519446329862800364ull}},
+{{12123390577721072839ull, 2906043475640947220ull,
+ 316984677174460405ull, 2824653956164250228ull}},
+{{15154238222151341049ull, 8244240362978571929ull,
+ 396230846468075506ull, 3530817445205312785ull}},
+{{5107739722407012599ull, 1081928416868439104ull,
+ 5106974576512482287ull, 4413521806506640981ull}},
+{{3192337326504382875ull, 7593734288183856296ull,
+ 5497702119533995381ull, 2758451129066650613ull}},
+{{3990421658130478593ull, 14103853878657208274ull,
+ 11483813667844882130ull, 3448063911333313266ull}},
+{{14211399109517874050ull, 8406445311466734534ull,
+ 5131395047951326855ull, 4310079889166641583ull}},
+{{4270438425021283377ull, 12171557347307790940ull,
+ 10124650932610661140ull, 2693799930729150989ull}},
+{{5338048031276604221ull, 15214446684134738675ull,
+ 17267499684190714329ull, 3367249913411438736ull}},
+{{2060874020668367373ull, 5183000299886259632ull,
+ 3137630531528841296ull, 4209062391764298421ull}},
+{{1288046262917729608ull, 3239375187428912270ull,
+ 4266862091419219762ull, 2630663994852686513ull}},
+{{10833429865501937818ull, 13272591021140916145ull,
+ 9945263632701412606ull, 3288329993565858141ull}},
+{{18153473350304810176ull, 7367366739571369373ull,
+ 17043265559304153662ull, 4110412491957322676ull}},
+{{13651763853154200312ull, 18439662267514269570ull,
+ 1428668937710320230ull, 2569007807473326673ull}},
+{{7841332779587974582ull, 13826205797538061155ull,
+ 6397522190565288192ull, 3211259759341658341ull}},
+{{5189979956057580324ull, 17282757246922576444ull,
+ 12608588756633998144ull, 4014074699177072926ull}},
+{{12467109509390763511ull, 10801723279326610277ull,
+ 3268681954468860936ull, 2508796686985670579ull}},
+{{1748828831456290676ull, 13502154099158262847ull,
+ 17920910498368239882ull, 3135995858732088223ull}},
+{{16021094094602527057ull, 7654320587093052750ull,
+ 17789452104532911949ull, 3919994823415110279ull}},
+{{5401497790699191507ull, 7089793376146851921ull,
+ 18035936592974151824ull, 2449996764634443924ull}},
+{{11363558256801377287ull, 8862241720183564901ull,
+ 4098176667508138164ull, 3062495955793054906ull}},
+{{369389765719557897ull, 11077802150229456127ull,
+ 14346092871239948513ull, 3828119944741318632ull}},
+{{7148397631215805542ull, 6097316252328223ull, 8966308044524967821ull,
+ 2392574965463324145ull}},
+{{4323811020592369023ull, 4619307663742798183ull,
+ 15819571074083597680ull, 2990718706829155181ull}},
+{{793077757313073375ull, 5774134579678497729ull, 5939405787322333388ull,
+ 3738398383536443977ull}},
+{{12024888644389140619ull, 12832206149153836888ull,
+ 15241343663144928127ull, 2336498989710277485ull}},
+{{15031110805486425774ull, 11428571668014908206ull,
+ 5216621523648996447ull, 2920623737137846857ull}},
+{{9565516470003256410ull, 9674028566591247354ull,
+ 11132462922988633463ull, 3650779671422308571ull}},
+{{2733523550649294704ull, 7480849689811671289ull,
+ 9303892635308403925ull, 4563474589277885714ull}},
+{{13237667265224278950ull, 6981374065345988507ull,
+ 10426618915495140357ull, 2852171618298678571ull}},
+{{11935398063102960784ull, 13338403600109873538ull,
+ 8421587625941537542ull, 3565214522873348214ull}},
+{{5695875542023925171ull, 7449632463282566115ull,
+ 1303612495572146120ull, 4456518153591685268ull}},
+{{1254079204551259280ull, 4656020289551603822ull,
+ 10038129846587367133ull, 2785323845994803292ull}},
+{{10790971042543849908ull, 10431711380366892681ull,
+ 12547662308234208916ull, 3481654807493504115ull}},
+{{18100399821607200289ull, 13039639225458615851ull,
+ 11072891866865373241ull, 4352068509366880144ull}},
+{{9006906879290806229ull, 1232245488270553051ull,
+ 6920557416790858276ull, 2720042818354300090ull}},
+{{6646947580686119882ull, 1540306860338191314ull,
+ 17874068807843348653ull, 3400053522942875112ull}},
+{{17532056512712425660ull, 6537069593850127046ull,
+ 3895841936094634200ull, 4250066903678593891ull}},
+{{6345849302017878134ull, 4085668496156329404ull, 129058200845452423ull,
+ 2656291814799121182ull}},
+{{7932311627522347667ull, 495399601768023851ull, 9384694787911591337ull,
+ 3320364768498901477ull}},
+{{5303703515975546680ull, 5230935520637417718ull,
+ 16342554503316877075ull, 4150455960623626846ull}},
+{{17149872752766880387ull, 963491691184692121ull,
+ 5602410546145660268ull, 2594034975389766779ull}},
+{{7602282885676436772ull, 1204364613980865152ull,
+ 2391327164254687431ull, 3242543719237208474ull}},
+{{9502853607095545965ull, 15340513822758245152ull,
+ 12212530992173135096ull, 4053179649046510592ull}},
+{{5939283504434716228ull, 9587821139223903220ull,
+ 7632831870108209435ull, 2533237280654069120ull}},
+{{7424104380543395285ull, 7373090405602491121ull,
+ 9541039837635261794ull, 3166546600817586400ull}},
+{{13891816494106632010ull, 18439735043857889709ull,
+ 11926299797044077242ull, 3958183251021983000ull}},
+{{10988228318030338959ull, 16136520420838568972ull,
+ 7453937373152548276ull, 2473864531888739375ull}},
+{{13735285397537923698ull, 1723906452338659599ull,
+ 4705735698013297442ull, 3092330664860924219ull}},
+{{12557420728495016718ull, 11378255102278100307ull,
+ 1270483604089233898ull, 3865413331076155274ull}},
+{{5542544946095691497ull, 11723095457351200596ull,
+ 5405738270983159090ull, 2415883331922597046ull}},
+{{6928181182619614371ull, 5430497284834224937ull,
+ 15980544875583724671ull, 3019854164903246307ull}},
+{{13271912496701905868ull, 2176435587615393267ull,
+ 15363995076052267935ull, 3774817706129057884ull}},
+{{5989102301224997216ull, 8277801269900702648ull, 379124885677891651ull,
+ 2359261066330661178ull}},
+{{7486377876531246520ull, 5735565568948490406ull,
+ 9697278143952140372ull, 2949076332913326472ull}},
+{{134600308809282341ull, 7169456961185613008ull,
+ 12121597679940175465ull, 3686345416141658090ull}},
+{{168250386011602926ull, 13573507219909404164ull,
+ 5928625063070443523ull, 4607931770177072613ull}},
+{{9328528528112027637ull, 6177599003229683650ull,
+ 6011233673632721154ull, 2879957356360670383ull}},
+{{2437288623285258738ull, 16945370790891880371ull,
+ 2902356073613513538ull, 3599946695450837979ull}},
+{{16881668834388737135ull, 11958341451760074655ull,
+ 17463003147299055635ull, 4499933369313547473ull}},
+{{17468572049134042565ull, 5168120398136352707ull,
+ 3996847939420827916ull, 2812458355820967171ull}},
+{{17224029042990165303ull, 6460150497670440884ull,
+ 384373905848646991ull, 3515572944776208964ull}},
+{{3083292230028155012ull, 3463502103660663202ull, 480467382310808739ull,
+ 4394466180970261205ull}},
+{{6538743662194984787ull, 18305589879283772165ull,
+ 2606135123157949413ull, 2746541363106413253ull}},
+{{12785115596171118887ull, 9046929293822551494ull,
+ 7869354922374824671ull, 3433176703883016566ull}},
+{{6758022458359122801ull, 6696975598850801464ull, 613321616113755031ull,
+ 4291470879853770708ull}},
+{{4223764036474451751ull, 11103138776922832771ull,
+ 9606698046925872702ull, 2682169299908606692ull}},
+{{668019027165676785ull, 4655551434298765156ull,
+ 12008372558657340878ull, 3352711624885758365ull}},
+{{835023783957095981ull, 15042811329728232253ull,
+ 1175407643039512385ull, 4190889531107197957ull}},
+{{2827732874186878940ull, 2484228053439063302ull,
+ 3040472786113389193ull, 2619305956941998723ull}},
+{{12758038129588374483ull, 7716971085226217031ull,
+ 17635649037923900203ull, 3274132446177498403ull}},
+{{11335861643558080200ull, 5034527838105383385ull,
+ 17432875278977487350ull, 4092665557721873004ull}},
+{{167384499582718269ull, 16981637954098028328ull,
+ 1672175012506153785ull, 2557915973576170628ull}},
+{{209230624478397836ull, 7391989387340371698ull, 2090218765632692232ull,
+ 3197394966970213285ull}},
+{{9484910317452773103ull, 9239986734175464622ull,
+ 7224459475468253194ull, 3996743708712766606ull}},
+{{1316382929980595285ull, 10386677727287053293ull,
+ 18350345227449821958ull, 2497964817945479128ull}},
+{{6257164680903132011ull, 3759975122254040808ull,
+ 4491187460602725832ull, 3122456022431848911ull}},
+{{7821455851128915013ull, 4699968902817551010ull,
+ 1002298307326019386ull, 3903070028039811139ull}},
+{{9500095925382959787ull, 7549166582688357285ull,
+ 16767337506574619780ull, 2439418767524881961ull}},
+{{16486805925156087638ull, 9436458228360446606ull,
+ 7124113827936111013ull, 3049273459406102452ull}},
+{{11385135369590333740ull, 16407258803877946162ull,
+ 8905142284920138766ull, 3811591824257628065ull}},
+{{11727395624421346491ull, 5642850733996328447ull,
+ 17094928974143556489ull, 2382244890161017540ull}},
+{{10047558512099295210ull, 11665249435922798463ull,
+ 2921917143969893995ull, 2977806112701271926ull}},
+{{7947762121696731109ull, 9969875776476110175ull,
+ 12875768466817143302ull, 3722257640876589907ull}},
+{{11884880353701538799ull, 1619486341870180955ull,
+ 5741512282547020612ull, 2326411025547868692ull}},
+{{10244414423699535595ull, 2024357927337726194ull,
+ 7176890353183775765ull, 2908013781934835865ull}},
+{{3582145992769643685ull, 7142133427599545647ull,
+ 13582798959907107610ull, 3635017227418544831ull}},
+{{18312740546244218319ull, 18151038821354207866ull,
+ 12366812681456496608ull, 4543771534273181039ull}},
+{{16057148859830024353ull, 11344399263346379916ull,
+ 14646786953551392236ull, 2839857208920738149ull}},
+{{1624692001077978825ull, 14180499079182974896ull,
+ 4473425636657076583ull, 3549821511150922687ull}},
+{{2030865001347473532ull, 13113937830551330716ull,
+ 980096027393957825ull, 4437276888938653359ull}},
+{{10492662662696946765ull, 1278682116453499841ull,
+ 7530089044762305497ull, 2773298055586658349ull}},
+{{17727514346798571361ull, 6210038663994262705ull,
+ 14024297324380269775ull, 3466622569483322936ull}},
+{{8324334878216050489ull, 3150862311565440478ull,
+ 17530371655475337219ull, 4333278211854153670ull}},
+{{591023280457643652ull, 18110190009224257963ull,
+ 6344796266244697857ull, 2708298882408846044ull}},
+{{14573837155854218276ull, 8802679456248158741ull,
+ 7930995332805872322ull, 3385373603011057555ull}},
+{{4382238389535609133ull, 1779977283455422619ull,
+ 5302058147579952499ull, 4231717003763821944ull}},
+{{433055984246061757ull, 17253386866655496801ull,
+ 3313786342237470311ull, 2644823127352388715ull}},
+{{5153005998734965100ull, 16955047564891983097ull,
+ 17977290983079001601ull, 3306028909190485893ull}},
+{{11052943516846094278ull, 7358751400832815159ull,
+ 8636555673566588290ull, 4132536136488107367ull}},
+{{13825618725669890780ull, 9210905643947897378ull,
+ 12315376323620199537ull, 2582835085305067104ull}},
+{{8058651370232587667ull, 16125318073362259627ull,
+ 15394220404525249421ull, 3228543856631333880ull}},
+{{5461628194363346680ull, 6321589536420660822ull, 796031431947010161ull,
+ 4035679820789167351ull}},
+{{17248575676759255387ull, 15480208506331382773ull,
+ 7415048672607963206ull, 2522299887993229594ull}},
+{{7725661540666905522ull, 10126888596059452659ull, 45438803905178200ull,
+ 3152874859991536993ull}},
+{{5045390907406243998ull, 12658610745074315824ull,
+ 4668484523308860654ull, 3941093574989421241ull}},
+{{3153369317128902499ull, 3299945697244059486ull,
+ 14447017873136507669ull, 2463183484368388275ull}},
+{{13165083683265903932ull, 8736618139982462261ull,
+ 13447086322993246682ull, 3078979355460485344ull}},
+{{2621296548800216202ull, 1697400638123302019ull,
+ 16808857903741558353ull, 3848724194325606680ull}},
+{{17779211407495992791ull, 12590090444895533521ull,
+ 10505536189838473970ull, 2405452621453504175ull}},
+{{8388956204087827276ull, 6514241019264641094ull,
+ 8520234218870704559ull, 3006815776816880219ull}},
+{{1262823218255008287ull, 3531115255653413464ull,
+ 6038606755160992795ull, 3758519721021100274ull}},
+{{789264511409380180ull, 18347848099279241079ull,
+ 8385815240403008400ull, 2349074825638187671ull}},
+{{14821638694543888936ull, 4488066050389499732ull,
+ 5870583032076372597ull, 2936343532047734589ull}},
+{{80304294470309554ull, 10221768581414262570ull,
+ 11949914808522853650ull, 3670429415059668236ull}},
+{{9323752404942662751ull, 3553838689913052404ull,
+ 14937393510653567063ull, 4588036768824585295ull}},
+{{15050717289943940027ull, 9138678208836739608ull,
+ 16253399971799561270ull, 2867522980515365809ull}},
+{{366652538720373418ull, 2199975724191148703ull, 6481691909467287876ull,
+ 3584403725644207262ull}},
+{{14293373728682630485ull, 2749969655238935878ull,
+ 17325486923688885653ull, 4480504657055259077ull}},
+{{4321672561999256149ull, 4024574043738028876ull,
+ 13134272336519247485ull, 2800315410659536923ull}},
+{{5402090702499070186ull, 9642403573099923999ull,
+ 11806154402221671452ull, 3500394263324421154ull}},
+{{2140927359696449829ull, 12053004466374904999ull,
+ 5534320965922313507ull, 4375492829155526443ull}},
+{{8255608627451362999ull, 5227284782270621672ull,
+ 1153107594487751990ull, 2734683018222204027ull}},
+{{10319510784314203749ull, 15757478014693052898ull,
+ 15276442548391853699ull, 3418353772777755033ull}},
+{{3676016443537978878ull, 15085161499938928219ull,
+ 5260495130207653412ull, 4272942215972193792ull}},
+{{18438411341707094463ull, 204853900607054328ull,
+ 3287809456379783383ull, 2670588884982621120ull}},
+{{4601270103424316462ull, 14091125431040981623ull,
+ 4109761820474729228ull, 3338236106228276400ull}},
+{{1139901610853007674ull, 17613906788801227029ull,
+ 5137202275593411535ull, 4172795132785345500ull}},
+{{3018281515996823748ull, 17926220770641848749ull,
+ 12434123459100658017ull, 2607996957990840937ull}},
+{{8384537913423417589ull, 8572717908020147224ull,
+ 1707596268593658810ull, 3259996197488551172ull}},
+{{10480672391779271987ull, 1492525348170408222ull,
+ 2134495335742073513ull, 4074995246860688965ull}},
+{{1938734226434657088ull, 12462043388674974899ull,
+ 3639902594052489897ull, 2546872029287930603ull}},
+{{16258475838325485072ull, 1742496180561554911ull,
+ 18384936297847776084ull, 3183590036609913253ull}},
+{{15711408779479468435ull, 2178120225701943639ull,
+ 9146112317027556393ull, 3979487545762391567ull}},
+{{16737159514815749628ull, 12890540187132184534ull,
+ 12633849225783304601ull, 2487179716101494729ull}},
+{{11698077356664911227ull, 2278117178633066956ull,
+ 1957253476946967040ull, 3108974645126868412ull}},
+{{14622596695831139034ull, 2847646473291333695ull,
+ 2446566846183708800ull, 3886218306408585515ull}},
+{{16056651962535543752ull, 1779779045807083559ull,
+ 17670005343360675664ull, 2428886441505365946ull}},
+{{15459128934742041786ull, 2224723807258854449ull,
+ 12864134642346068772ull, 3036108051881707433ull}},
+{{5488853113145388521ull, 2780904759073568062ull,
+ 2245110247650422253ull, 3795135064852134292ull}},
+{{17265591250998031538ull, 4043908483634673990ull,
+ 10626565941636289716ull, 2371959415532583932ull}},
+{{12358617026892763614ull, 5054885604543342488ull,
+ 13283207427045362145ull, 2964949269415729915ull}},
+{{15448271283615954517ull, 10930293024106566014ull,
+ 11992323265379314777ull, 3706186586769662394ull}},
+{{5043483533832583670ull, 18360648186135073519ull,
+ 12106888059289459639ull, 2316366616731038996ull}},
+{{1692668398863341683ull, 18339124214241453995ull,
+ 15133610074111824549ull, 2895458270913798745ull}},
+{{15950893553861340815ull, 9088847212519653781ull,
+ 5081954537357616975ull, 3619322838642248432ull}},
+{{6103558887044512307ull, 6749372997222179323ull,
+ 6352443171697021219ull, 4524153548302810540ull}},
+{{1508881295189126240ull, 1912515114050168125ull,
+ 13193649019165414070ull, 2827595967689256587ull}},
+{{6497787637413795704ull, 11614015929417485964ull,
+ 11880375255529379683ull, 3534494959611570734ull}},
+{{8122234546767244630ull, 9905833893344469551ull,
+ 5627097032556948796ull, 4418118699514463418ull}},
+{{11993925619370609750ull, 15414518220195069277ull,
+ 8128621663775480901ull, 2761324187196539636ull}},
+{{1157348968931098475ull, 5433089719961672885ull,
+ 10160777079719351127ull, 3451655233995674545ull}},
+{{6058372229591260998ull, 2179676131524703202ull,
+ 17312657368076576813ull, 4314569042494593181ull}},
+{{8398168661921926028ull, 3668140591416633453ull,
+ 13126253864261554460ull, 2696605651559120738ull}},
+{{15109396845829795439ull, 4585175739270791816ull,
+ 7184445293472167267ull, 3370757064448900923ull}},
+{{440001983577692682ull, 1119783655661101867ull, 4368870598412821180ull,
+ 4213446330561126154ull}},
+{{16415902304231915591ull, 9923236821642964474ull,
+ 7342230142435401141ull, 2633403956600703846ull}},
+{{11296505843435118680ull, 17015732045481093497ull,
+ 18401159714899027234ull, 3291754945750879807ull}},
+{{285574249011734638ull, 12046293019996591064ull,
+ 18389763625196396139ull, 4114693682188599759ull}},
+{{178483905632334149ull, 5223090128284175463ull,
+ 18411131293388829443ull, 2571683551367874849ull}},
+{{14058162937322581398ull, 1917176641927831424ull,
+ 9178856061453873092ull, 3214604439209843562ull}},
+{{17572703671653226747ull, 2396470802409789280ull,
+ 2250198039962565557ull, 4018255549012304453ull}},
+{{10982939794783266717ull, 3803637260719812252ull,
+ 3712216784190297425ull, 2511409718132690283ull}},
+{{13728674743479083397ull, 9366232594327153219ull, 28584961810483877ull,
+ 3139262147665862854ull}},
+{{12549157410921466342ull, 16319476761336329428ull,
+ 9259103239117880654ull, 3924077684582328567ull}},
+{{17066595418680692272ull, 5587986957407817988ull,
+ 12704468552089757265ull, 2452548552863955354ull}},
+{{2886500199641313723ull, 11596669715187160390ull,
+ 6657213653257420773ull, 3065685691079944193ull}},
+{{12831497286406417962ull, 660779088701786775ull,
+ 12933203084999163871ull, 3832107113849930241ull}},
+{{14937214831645093083ull, 7330515958079698590ull,
+ 1165722900483395563ull, 2395066946156206401ull}},
+{{9448146502701590545ull, 4551458929172235334ull,
+ 6068839644031632358ull, 2993833682695258001ull}},
+{{2586811091522212373ull, 14912695698320069976ull,
+ 12197735573466928351ull, 3742292103369072501ull}},
+{{1616756932201382733ull, 16237963839091125591ull,
+ 9929427742630524171ull, 2338932564605670313ull}},
+{{15856004220533892129ull, 15685768780436519084ull,
+ 17023470696715543118ull, 2923665705757087891ull}},
+{{1373261201957813545ull, 10383838938690873048ull,
+ 16667652352467040994ull, 3654582132196359864ull}},
+{{1716576502447266931ull, 3756426636508815502ull,
+ 2387821366874249627ull, 4568227665245449831ull}},
+{{14907918369311705544ull, 41923638604315736ull, 8409917381937487873ull,
+ 2855142290778406144ull}},
+{{188153887930080314ull, 4664090566682782575ull,
+ 10512396727421859841ull, 3568927863473007680ull}},
+{{14070250415194764104ull, 10441799226780866122ull,
+ 13140495909277324801ull, 4461159829341259600ull}},
+{{13405592527924115469ull, 18055339562806511086ull,
+ 8212809943298328000ull, 2788224893338287250ull}},
+{{7533618623050368528ull, 4122430379798587242ull,
+ 1042640392268134193ull, 3485281116672859063ull}},
+{{193651241958184852ull, 9764723993175621957ull,
+ 15138358545617331453ull, 4356601395841073828ull}},
+{{2426875035437559485ull, 8408795504948457675ull, 238102054156056350ull,
+ 2722875872400671143ull}},
+{{16868651849579113068ull, 1287622344330796285ull,
+ 14132685622977234150ull, 3403594840500838928ull}},
+{{7250756756691727623ull, 10832899967268271165ull,
+ 17665857028721542687ull, 4254493550626048660ull}},
+{{6837565982146023717ull, 13688091507183751334ull,
+ 1817788606096188371ull, 2659058469141280413ull}},
+{{17770329514537305454ull, 12498428365552301263ull,
+ 6883921776047623368ull, 3323823086426600516ull}},
+{{17601225874744243913ull, 15623035456940376579ull,
+ 8604902220059529210ull, 4154778858033250645ull}},
+{{8694923162501458494ull, 14376083179015123266ull,
+ 7683906896750899708ull, 2596736786270781653ull}},
+{{1645281916272047309ull, 17970103973768904083ull,
+ 14216569639366012539ull, 3245920982838477066ull}},
+{{15891660450622222848ull, 17850943948783742199ull,
+ 8547340012352739866ull, 4057401228548096333ull}},
+{{16849816809279971136ull, 15768525986417226778ull,
+ 7647930516934156368ull, 2535875767842560208ull}},
+{{11838898974745188112ull, 1263913409311981857ull,
+ 9559913146167695461ull, 3169844709803200260ull}},
+{{963565663149321428ull, 6191577780067365226ull,
+ 11949891432709619326ull, 3962305887254000325ull}},
+{{5213914557895713797ull, 17704794167824266978ull,
+ 9774525154657206030ull, 2476441179533750203ull}},
+{{15740765234224418054ull, 12907620672925557914ull,
+ 7606470424894119634ull, 3095551474417187754ull}},
+{{10452584505925746759ull, 6911153804302171585ull,
+ 284715994262873735ull, 3869439343021484693ull}},
+{{18062080362272061485ull, 11237000155329939096ull,
+ 2483790505627990036ull, 2418399589388427933ull}},
+{{4130856379130525240ull, 14046250194162423871ull,
+ 7716424150462375449ull, 3022999486735534916ull}},
+{{551884455485768646ull, 3722754687420866127ull, 9645530188077969312ull,
+ 3778749358419418645ull}},
+{{7262456812319687260ull, 2326721679638041329ull,
+ 8334299376762424772ull, 2361718349012136653ull}},
+{{13689757033826996978ull, 2908402099547551661ull,
+ 15029560239380418869ull, 2952147936265170816ull}},
+{{3277138237001582511ull, 8247188642861827481ull, 340206225515971970ull,
+ 3690184920331463521ull}},
+{{13577426444194458830ull, 9766178920216030079ull,
+ 11741843937015952241ull, 2306365575207164700ull}},
+{{12360097036815685633ull, 16819409668697425503ull,
+ 14677304921269940301ull, 2882956969008955875ull}},
+{{10838435277592219137ull, 7189204030589618167ull,
+ 13734945133160037473ull, 3603696211261194844ull}},
+{{8936358078562886017ull, 13598191056664410613ull,
+ 17168681416450046841ull, 4504620264076493555ull}},
+{{7891066808315497713ull, 1581340382774174777ull,
+ 8424582876067585324ull, 2815387665047808472ull}},
+{{14475519528821760045ull, 1976675478467718471ull,
+ 10530728595084481655ull, 3519234581309760590ull}},
+{{13482713392599812152ull, 16305902403366811801ull,
+ 3940038707000826260ull, 4399043226637200738ull}},
+{{1509166842733800739ull, 967816965249481568ull, 7074210210302904317ull,
+ 2749402016648250461ull}},
+{{1886458553417250924ull, 5821457224989239864ull,
+ 13454448781306018300ull, 3436752520810313076ull}},
+{{2358073191771563655ull, 7276821531236549830ull,
+ 16818060976632522875ull, 4295940651012891345ull}},
+{{15308853800139390996ull, 2242170447809149691ull,
+ 3593759082754244941ull, 2684962906883057091ull}},
+{{14524381231746850841ull, 7414399078188825018ull,
+ 18327256908724969888ull, 3356203633603821363ull}},
+{{8932104502828787743ull, 9267998847736031273ull,
+ 18297385117478824456ull, 4195254542004776704ull}},
+{{17111780360336462100ull, 5792499279835019545ull,
+ 11435865698424265285ull, 2622034088752985440ull}},
+{{7554667395138413913ull, 11852310118221162336ull,
+ 14294832123030331606ull, 3277542610941231800ull}},
+{{9443334243923017391ull, 5592015610921677112ull,
+ 17868540153787914508ull, 4096928263676539750ull}},
+{{5902083902451885869ull, 12718381793680824003ull,
+ 6556151577690058663ull, 2560580164797837344ull}},
+{{2765918859637469433ull, 11286291223673642100ull,
+ 8195189472112573329ull, 3200725205997296680ull}},
+{{3457398574546836791ull, 272805974309888913ull,
+ 10243986840140716662ull, 4000906507496620850ull}},
+{{13690089155160242754ull, 14005561789225844282ull,
+ 11014177793515335817ull, 2500566567185388031ull}},
+{{7889239407095527635ull, 3671894181250141641ull,
+ 9156036223466781868ull, 3125708208981735039ull}},
+{{14473235277296797447ull, 4589867726562677051ull,
+ 6833359260906089431ull, 3907135261227168799ull}},
+{{6739929039096804453ull, 9786196356742755013ull,
+ 11188378565707387750ull, 2441959538266980499ull}},
+{{13036597317298393470ull, 3009373409073667958ull,
+ 9373787188706846784ull, 3052449422833725624ull}},
+{{7072374609768216029ull, 3761716761342084948ull,
+ 11717233985883558480ull, 3815561778542157030ull}},
+{{13643606167959910826ull, 2351072975838803092ull,
+ 2711585222749836146ull, 2384726111588848144ull}},
+{{17054507709949888533ull, 12162213256653279673ull,
+ 3389481528437295182ull, 2980907639486060180ull}},
+{{7483076582155196954ull, 5979394533961823784ull,
+ 4236851910546618978ull, 3726134549357575225ull}},
+{{4676922863846998096ull, 8348807602153527769ull,
+ 14177247490160106621ull, 2328834093348484515ull}},
+{{10457839598236135524ull, 15047695521119297615ull,
+ 13109873344272745372ull, 2911042616685605644ull}},
+{{8460613479367781501ull, 362875327689570403ull,
+ 16387341680340931716ull, 3638803270857007055ull}},
+{{5964080830782338973ull, 453594159611963004ull,
+ 15872491081998776741ull, 4548504088571258819ull}},
+{{12950922556093737666ull, 2589339358971170829ull,
+ 7614463917035541511ull, 2842815055357036762ull}},
+{{2353595139835008371ull, 17071732253996127249ull,
+ 294707859439651080ull, 3553518819196295953ull}},
+{{7553679943221148367ull, 2892921243785607445ull,
+ 4980070842726951755ull, 4441898523995369941ull}},
+{{7026892973726911682ull, 17948976841861862317ull,
+ 5418387285918038798ull, 2776186577497106213ull}},
+{{13395302235586027506ull, 13212849015472552088ull,
+ 11384670125824936402ull, 3470233221871382766ull}},
+{{16744127794482534382ull, 7292689232485914302ull,
+ 5007465620426394695ull, 4337791527339228458ull}},
+{{5853393853124196085ull, 11475459797944778295ull,
+ 7741352031193884588ull, 2711119704587017786ull}},
+{{2705056297977857202ull, 14344324747430972869ull,
+ 453318002137579927ull, 3388899630733772233ull}},
+{{7993006390899709407ull, 13318719915861328182ull,
+ 5178333521099362813ull, 4236124538417215291ull}},
+{{383942975884930475ull, 10630042956627024066ull, 930615441473407806ull,
+ 2647577836510759557ull}},
+{{9703300756710938902ull, 4064181658929004274ull,
+ 5774955320269147662ull, 3309472295638449446ull}},
+{{2905753909033897819ull, 14303599110516031151ull,
+ 16442066187191210385ull, 4136840369548061807ull}},
+{{8733625220787267993ull, 2022220416431437613ull,
+ 17193820394635588347ull, 2585525230967538629ull}},
+{{15528717544411472896ull, 16362833575821460728ull,
+ 7657217438012321721ull, 3231906538709423287ull}},
+{{964152856804789503ull, 6618483914494662199ull, 4959835779088014248ull,
+ 4039883173386779109ull}},
+{{7520124563144075296ull, 4136552446559163874ull,
+ 5405740371143702857ull, 2524926983366736943ull}},
+{{176783667075318312ull, 9782376576626342747ull, 2145489445502240667ull,
+ 3156158729208421179ull}},
+{{14056037639126311601ull, 7616284702355540529ull,
+ 16516919862159964546ull, 3945198411510526473ull}},
+{{1867494496812862895ull, 9371863957399600735ull,
+ 3405545886208895985ull, 2465749007194079046ull}},
+{{16169426176298242331ull, 16326515965176888822ull,
+ 13480304394615895789ull, 3082186258992598807ull}},
+{{10988410683518027105ull, 6573086901188947316ull,
+ 12238694474842481833ull, 3852732823740748509ull}},
+{{16091128714053542749ull, 15637394359311561832ull,
+ 9955027055990245097ull, 2407958014837967818ull}},
+{{1667166818857376820ull, 5711684893857288579ull,
+ 3220411783133030564ull, 3009947518547459773ull}},
+{{15919016578853884737ull, 7139606117321610723ull,
+ 8637200747343676109ull, 3762434398184324716ull}},
+{{7643542352569984009ull, 6768096832539700654ull,
+ 14621622503944573376ull, 2351521498865202947ull}},
+{{331055903857704203ull, 8460121040674625818ull,
+ 13665342111503328816ull, 2939401873581503684ull}},
+{{9637191916676906061ull, 10575151300843282272ull,
+ 17081677639379161020ull, 3674252341976879605ull}},
+{{12046489895846132577ull, 13218939126054102840ull,
+ 7517038993941787563ull, 4592815427471099507ull}},
+{{7529056184903832861ull, 5955993944570120323ull,
+ 2392306361999923275ull, 2870509642169437192ull}},
+{{4799634212702403172ull, 2833306412285262500ull,
+ 2990382952499904094ull, 3588137052711796490ull}},
+{{5999542765878003964ull, 12765005052211353933ull,
+ 12961350727479655925ull, 4485171315889745612ull}},
+{{6055557237887446430ull, 10283971166845790160ull,
+ 17324216241529560761ull, 2803232072431091007ull}},
+{{7569446547359308037ull, 17466649976984625604ull,
+ 17043584283484563047ull, 3504040090538863759ull}},
+{{9461808184199135046ull, 17221626452803394101ull,
+ 16692794335928315905ull, 4380050113173579699ull}},
+{{8219473124338153356ull, 3845987505361039457ull,
+ 8127153450741503489ull, 2737531320733487312ull}},
+{{14886027423850079599ull, 9419170400128687225ull,
+ 10158941813426879361ull, 3421914150916859140ull}},
+{{4772476224530435787ull, 16385649018588246936ull,
+ 12698677266783599201ull, 4277392688646073925ull}},
+{{2982797640331522367ull, 3323501608976572479ull,
+ 10242516300953443453ull, 2673370430403796203ull}},
+{{17563555105696566671ull, 8766063029648103502ull,
+ 8191459357764416412ull, 3341713038004745254ull}},
+{{12731071845265932530ull, 10957578787060129378ull,
+ 1015952160350744707ull, 4177141297505931568ull}},
+{{12568605921718595735ull, 4542643732698886909ull,
+ 634970100219215442ull, 2610713310941207230ull}},
+{{1875699346866080957ull, 14901676702728384445ull,
+ 10017084662128795110ull, 3263391638676509037ull}},
+{{6956310202009989100ull, 9403723841555704748ull,
+ 17133041846088381792ull, 4079239548345636296ull}},
+{{13571065913111018996ull, 5877327400972315467ull,
+ 10708151153805238620ull, 2549524717716022685ull}},
+{{12352146372961385841ull, 7346659251215394334ull,
+ 17996874960683936179ull, 3186905897145028356ull}},
+{{6216810929346956493ull, 4571638045591855014ull,
+ 4049349627145368608ull, 3983632371431285446ull}},
+{{17720564886124011520ull, 2857273778494909383ull,
+ 16365901572248019092ull, 2489770232144553403ull}},
+{{17539020089227626496ull, 3571592223118636729ull,
+ 15845690946882635961ull, 3112212790180691754ull}},
+{{8088717056252369408ull, 9076176297325683816ull,
+ 10583741646748519143ull, 3890265987725864693ull}},
+{{5055448160157730880ull, 12590139213469634241ull,
+ 8920681538431518416ull, 2431416242328665433ull}},
+{{10930996218624551504ull, 15737674016837042801ull,
+ 15762537941466785924ull, 3039270302910831791ull}},
+{{18275431291708077284ull, 1225348447336751885ull,
+ 15091486408406094502ull, 3799087878638539739ull}},
+{{13727987566531242255ull, 14600900834867633640ull,
+ 7126335996040115111ull, 2374429924149087337ull}},
+{{17159984458164052818ull, 13639440025157154146ull,
+ 13519606013477531793ull, 2968037405186359171ull}},
+{{12226608535850290215ull, 3214241976164278971ull,
+ 12287821498419526838ull, 3710046756482948964ull}},
+{{5335787325692737432ull, 15843959290384838069ull,
+ 16903260473366980081ull, 2318779222801843102ull}},
+{{11281420175543309694ull, 5969891057698883874ull,
+ 11905703554853949294ull, 2898474028502303878ull}},
+{{4878403182574361310ull, 16685735858978380651ull,
+ 5658757406712660809ull, 3623092535627879848ull}},
+{{1486317959790563733ull, 7022111768440812102ull,
+ 7073446758390826012ull, 4528865669534849810ull}},
+{{14764006780151266045ull, 13612191892130283371ull,
+ 9032590242421654161ull, 2830541043459281131ull}},
+{{13843322456761694653ull, 3180181809880690502ull,
+ 6679051784599679798ull, 3538176304324101414ull}},
+{{8080781034097342508ull, 13198599299205638936ull,
+ 17572186767604375555ull, 4422720380405126767ull}},
+{{5050488146310839068ull, 5943281552789830383ull,
+ 17900145757393816578ull, 2764200237753204229ull}},
+{{1701424164461160930ull, 16652473977842063787ull,
+ 8540124141460107010ull, 3455250297191505287ull}},
+{{15961838260858614875ull, 11592220435447803925ull,
+ 6063469158397745859ull, 4319062871489381609ull}},
+{{12281991922250328249ull, 4939294762941183501ull,
+ 15318883270067060922ull, 2699414294680863505ull}},
+{{1517431847530746599ull, 15397490490531255185ull,
+ 5313546032301662440ull, 3374267868351079382ull}},
+{{6508475827840821153ull, 800119039454517365ull,
+ 15865304577231853859ull, 4217834835438849227ull}},
+{{6373640401614207173ull, 16640975464154931017ull,
+ 7609972351556214709ull, 2636146772149280767ull}},
+{{12578736520445146870ull, 6966161274911500059ull,
+ 4900779421017880483ull, 3295183465186600959ull}},
+{{11111734632129045683ull, 4096015575211987170ull,
+ 1514288257844962700ull, 4118979331483251199ull}},
+{{11556520163508041456ull, 11783381771362267789ull,
+ 7863959188794183543ull, 2574362082177031999ull}},
+{{610592149102888108ull, 10117541195775446833ull,
+ 5218262967565341525ull, 3217952602721289999ull}},
+{{5374926204805998039ull, 17258612513146696445ull,
+ 1911142691029289002ull, 4022440753401612499ull}},
+{{5665171887217442726ull, 15398318839144073182ull,
+ 17335365246389163290ull, 2514025470876007811ull}},
+{{16304836895876579216ull, 10024526512075315669ull,
+ 17057520539559066209ull, 3142531838595009764ull}},
+{{6545988064563560308ull, 17142344158521532491ull,
+ 2875156600739281145ull, 3928164798243762206ull}},
+{{1785399531138531240ull, 3796436071434875951ull,
+ 15632030930744214428ull, 2455102998902351378ull}},
+{{16066807469205327762ull, 4745545089293594938ull,
+ 10316666626575492227ull, 3068878748627939223ull}},
+{{10860137299651883895ull, 1320245343189605769ull,
+ 8284147264791977380ull, 3836098435784924029ull}},
+{{18316800858350897195ull, 10048525376348279413ull,
+ 7483435049708679814ull, 2397561522365577518ull}},
+{{9060943017656457781ull, 3337284683580573459ull, 130921775281073960ull,
+ 2996951902956971898ull}},
+{{6714492753643184322ull, 4171605854475716824ull,
+ 9387024255956118258ull, 3746189878696214872ull}},
+{{4196557971026990202ull, 7218939677474710919ull,
+ 5866890159972573911ull, 2341368674185134295ull}},
+{{634011445356349848ull, 4411988578416000745ull, 2721926681538329485ull,
+ 2926710842731417869ull}},
+{{5404200325122825214ull, 10126671741447388835ull,
+ 8014094370350299760ull, 3658388553414272336ull}},
+{{2143564387976143613ull, 12658339676809236044ull,
+ 10017617962937874700ull, 4572985691767840420ull}},
+{{10563099779339865566ull, 17134834334860548335ull,
+ 15484383263690947495ull, 2858116057354900262ull}},
+{{8592188705747444054ull, 16806856900148297515ull,
+ 10132107042758908561ull, 3572645071693625328ull}},
+{{6128549863756917163ull, 7173513069903208182ull,
+ 12665133803448635702ull, 4465806339617031660ull}},
+{{17665401720130236939ull, 18318503723971668825ull,
+ 17139080664010173121ull, 2791128962260644787ull}},
+{{8246694094880632462ull, 9063071599682422320ull,
+ 16812164811585328498ull, 3488911202825805984ull}},
+{{10308367618600790577ull, 2105467462748252092ull,
+ 2568461940772109007ull, 4361139003532257481ull}},
+{{15666101798480269919ull, 8233446191858739413ull,
+ 13134503759051037889ull, 2725711877207660925ull}},
+{{5747569192818173686ull, 14903493758250812171ull,
+ 2583071643531633649ull, 3407139846509576157ull}},
+{{2572775472595329204ull, 4794309142531351502ull,
+ 7840525572841929966ull, 4258924808136970196ull}},
+{{15443042725654244465ull, 16831501269364258400ull,
+ 14123700519880982036ull, 2661828005085606372ull}},
+{{857059333358253965ull, 2592632512995771385ull,
+ 17654625649851227546ull, 3327285006357007965ull}},
+{{5683010185125205360ull, 12464162678099490039ull,
+ 8233224007031870720ull, 4159106257946259957ull}},
+{{10469410393344335206ull, 7790101673812181274ull,
+ 7451608013608613152ull, 2599441411216412473ull}},
+{{3863390954825643199ull, 9737627092265226593ull,
+ 13926196035438154344ull, 3249301764020515591ull}},
+{{9440924711959441903ull, 12172033865331533241ull,
+ 12796059025870305026ull, 4061627205025644489ull}},
+{{17429792991043120950ull, 12219207184259596179ull,
+ 1080007863527858785ull, 2538517003141027806ull}},
+{{17175555220376513283ull, 1438950925042331512ull,
+ 10573381866264599290ull, 3173146253926284757ull}},
+{{3022699951761089987ull, 11022060693157690199ull,
+ 17828413351258137016ull, 3966432817407855946ull}},
+{{8806716497491763098ull, 6888787933223556374ull,
+ 15754444362963723539ull, 2479020510879909966ull}},
+{{1785023585009928065ull, 3999298898102057564ull,
+ 10469683416849878616ull, 3098775638599887458ull}},
+{{2231279481262410081ull, 4999123622627571955ull,
+ 3863732234207572462ull, 3873469548249859323ull}},
+{{17535450740284863965ull, 16959510319424396183ull,
+ 108989637166038836ull, 2420918467656162077ull}},
+{{17307627406928692052ull, 2752643825570943613ull,
+ 4747923064884936450ull, 3026148084570202596ull}},
+{{7799476203378701353ull, 12664176818818455325ull,
+ 5934903831106170562ull, 3782685105712753245ull}},
+{{7180515636325382298ull, 12526796530188922482ull,
+ 6015157903655050553ull, 2364178191070470778ull}},
+{{18199016582261503680ull, 1823437607453989390ull,
+ 16742319416423589000ull, 2955222738838088472ull}},
+{{13525398690972103792ull, 2279297009317486738ull,
+ 2481155196819934634ull, 3694028423547610591ull}},
+{{13065060200284952774ull, 6036246649250817115ull,
+ 8468251025653541002ull, 2308767764717256619ull}},
+{{11719639231928803063ull, 16768680348418297202ull,
+ 5973627763639538348ull, 2885959705896570774ull}},
+{{5426177003056228021ull, 2514106361813319887ull,
+ 16690406741404198744ull, 3607449632370713467ull}},
+{{2171035235392897122ull, 3142632952266649859ull,
+ 16251322408327860526ull, 4509312040463391834ull}},
+{{17497798086616418366ull, 15799203650448819873ull,
+ 14768762523632300732ull, 2818320025289619896ull}},
+{{8037189552988359245ull, 1302260489351473226ull, 14209080830824300ull,
+ 3522900031612024871ull}},
+{{823114904380673248ull, 1627825611689341533ull,
+ 13852819406320694087ull, 4403625039515031088ull}},
+{{2820289824451614732ull, 7934920034946920314ull,
+ 8658012128950433804ull, 2752265649696894430ull}},
+{{12748734317419294223ull, 9918650043683650392ull,
+ 1599143124333266447ull, 3440332062121118038ull}},
+{{15935917896774117779ull, 7786626536177175086ull,
+ 11222300942271358867ull, 4300415077651397547ull}},
+{{5348262667056435708ull, 2560798575897040477ull,
+ 4708095079705905340ull, 2687759423532123467ull}},
+{{11297014352247932539ull, 3200998219871300596ull,
+ 1273432831204993771ull, 3359699279415154334ull}},
+{{14121267940309915673ull, 17836305830121289457ull,
+ 10815163075861018021ull, 4199624099268942917ull}},
+{{1908263435052615440ull, 13453534153039499863ull,
+ 9065319931626830215ull, 2624765062043089323ull}},
+{{16220387349097933012ull, 12205231672871986924ull,
+ 6719963896106149865ull, 3280956327553861654ull}},
+{{1828740112662864649ull, 1421481535807819944ull,
+ 17623326906987463140ull, 4101195409442327067ull}},
+{{1142962570414290406ull, 10111797996734663273ull,
+ 8708736307653470510ull, 2563247130901454417ull}},
+{{6040389231445250911ull, 3416375459063553283ull,
+ 15497606402994226042ull, 3204058913626818021ull}},
+{{2938800520879175735ull, 13493841360684217412ull,
+ 5536949948460618840ull, 4005073642033522527ull}},
+{{11060122362404260642ull, 8433650850427635882ull,
+ 10378122745428968631ull, 2503171026270951579ull}},
+{{4601780916150549995ull, 5930377544607156949ull,
+ 8360967413358822885ull, 3128963782838689474ull}},
+{{10363912163615575397ull, 12024657949186334090ull,
+ 1227837229843752798ull, 3911204728548361843ull}},
+{{11089131120687122527ull, 2903725199814070902ull,
+ 16908299333148203163ull, 2444502955342726151ull}},
+{{4638041864004127351ull, 17464714555049752340ull,
+ 16523688148007866049ull, 3055628694178407689ull}},
+{{5797552330005159189ull, 7995835138530026713ull,
+ 6819552129727668850ull, 3819535867723009612ull}},
+{{15152685252321694253ull, 9609082980008654599ull,
+ 13485592117934568839ull, 2387209917326881007ull}},
+{{14329170546974729912ull, 7399667706583430345ull,
+ 12245304128990823145ull, 2984012396658601259ull}},
+{{4076405128436248678ull, 13861270651656675836ull,
+ 10694944142811141027ull, 3730015495823251574ull}},
+{{11771125242127431232ull, 6357451148071728445ull,
+ 2072654070829575238ull, 2331259684889532234ull}},
+{{878848497377125328ull, 17170185971944436365ull,
+ 11814189625391744855ull, 2914074606111915292ull}},
+{{5710246640148794564ull, 16851046446503157552ull,
+ 14767737031739681069ull, 3642593257639894115ull}},
+{{7137808300185993205ull, 7228750002846783228ull,
+ 13847985271247213433ull, 4553241572049867644ull}},
+{{13684502224471021561ull, 16047183797847709277ull,
+ 17878362831384284203ull, 2845775982531167277ull}},
+{{3270569725306613239ull, 15447293728882248693ull,
+ 8512895483948191542ull, 3557219978163959097ull}},
+{{8699898175060654453ull, 10085745124248035058ull,
+ 15252805373362627332ull, 4446524972704948871ull}},
+{{10049122377840296937ull, 15526962739509797719ull,
+ 16450532385992723938ull, 2779078107940593044ull}},
+{{7949716953872983268ull, 10185331387532471341ull,
+ 2116421408781353307ull, 3473847634925741306ull}},
+{{14548832210768616988ull, 8119978215988201272ull,
+ 11868898797831467442ull, 4342309543657176632ull}},
+{{9093020131730385618ull, 9686672403420013699ull,
+ 7418061748644667151ull, 2713943464785735395ull}},
+{{6754589146235594118ull, 7496654485847629220ull,
+ 4660891167378446035ull, 3392429330982169244ull}},
+{{8443236432794492648ull, 4759132088882148621ull,
+ 5826113959223057544ull, 4240536663727711555ull}},
+{{7582865779710251857ull, 2974457555551342888ull,
+ 1335478215300717013ull, 2650335414829819722ull}},
+{{9478582224637814821ull, 8329757962866566514ull,
+ 10892719805980672074ull, 3312919268537274652ull}},
+{{2624855743942492718ull, 1188825416728432335ull,
+ 13615899757475840093ull, 4141149085671593315ull}},
+{{8558063867605139805ull, 3048858894668964161ull,
+ 6204094339208706106ull, 2588218178544745822ull}},
+{{15309265852933812660ull, 13034445655190981009ull,
+ 16978489960865658440ull, 3235272723180932277ull}},
+{{5301524260885102113ull, 16293057068988726262ull,
+ 7388054395799909338ull, 4044090903976165347ull}},
+{{17148510718335352533ull, 14794846686545341817ull,
+ 2311690988161249384ull, 2527556814985103342ull}},
+{{7600580342637026954ull, 46814284472125656ull, 12112985772056337539ull,
+ 3159446018731379177ull}},
+{{9500725428296283693ull, 13893575910872320782ull,
+ 1306174159788258211ull, 3949307523414223972ull}},
+{{1326267374257789404ull, 6377641935081506537ull,
+ 10039730886722437190ull, 2468317202133889982ull}},
+{{6269520236249624659ull, 17195424455706658979ull,
+ 3326291571548270679ull, 3085396502667362478ull}},
+{{3225214276884642919ull, 16882594551205935820ull,
+ 13381236501290114157ull, 3856745628334203097ull}},
+{{11239130959907677633ull, 12857464603717403839ull,
+ 1445743785665239492ull, 2410466017708876936ull}},
+{{9437227681457209137ull, 16071830754646754799ull,
+ 1807179732081549365ull, 3013082522136096170ull}},
+{{7184848583394123517ull, 6254730388026279787ull,
+ 11482346701956712515ull, 3766353152670120212ull}},
+{{2184687355407633246ull, 1603363483302730915ull,
+ 16399838725577721130ull, 2353970720418825132ull}},
+{{16565917249541705270ull, 11227576390983189451ull,
+ 2053054333262599796ull, 2942463400523531416ull}},
+{{16095710543499743683ull, 14034470488728986814ull,
+ 2566317916578249745ull, 3678079250654414270ull}},
+{{10896266142519903796ull, 3708030055629069806ull,
+ 12431269432577587990ull, 4597599063318017837ull}},
+{{2198480320647551969ull, 16152576840050332341ull,
+ 10075386404574686445ull, 2873499414573761148ull}},
+{{7359786419236827865ull, 6355662994780751714ull,
+ 12594233005718358057ull, 3591874268217201435ull}},
+{{18423105060900810639ull, 12556264761903327546ull,
+ 11131105238720559667ull, 4489842835271501794ull}},
+{{16126126681490394553ull, 5541822466975885764ull,
+ 11568626792627737696ull, 2806151772044688621ull}},
+{{1710914278153441576ull, 6927278083719857206ull, 625725435502508408ull,
+ 3507689715055860777ull}},
+{{11362014884546577777ull, 8659097604649821507ull,
+ 5393842812805523414ull, 4384612143819825971ull}},
+{{4795416293627917159ull, 800249984478750538ull, 1065308748789758182ull,
+ 2740382589887391232ull}},
+{{15217642403889672257ull, 10223684517453213980ull,
+ 1331635935987197727ull, 3425478237359239040ull}},
+{{575308931152538705ull, 8167919628389129572ull, 1664544919983997159ull,
+ 4281847796699048800ull}},
+{{9582940118825112499ull, 12022478795384287838ull,
+ 1040340574989998224ull, 2676154872936905500ull}},
+{{2755303111676614815ull, 15028098494230359798ull,
+ 1300425718737497780ull, 3345193591171131875ull}},
+{{12667500926450544327ull, 338379044078398131ull,
+ 15460590203704035938ull, 4181491988963914843ull}},
+{{5611345069817896252ull, 4823172920976386736ull,
+ 7357025868101328509ull, 2613432493102446777ull}},
+{{7014181337272370315ull, 10640652169647871324ull,
+ 13807968353554048540ull, 3266790616378058471ull}},
+{{8767726671590462894ull, 13300815212059839155ull,
+ 12648274423515172771ull, 4083488270472573089ull}},
+{{3173986160530345357ull, 6007166498323705520ull, 987642487055901126ull,
+ 2552180169045358181ull}},
+{{3967482700662931696ull, 16732330159759407708ull,
+ 5846239127247264311ull, 3190225211306697726ull}},
+{{4959353375828664620ull, 16303726681271871731ull,
+ 16531170945913856197ull, 3987781514133372157ull}},
+{{793752850679221436ull, 12495672185008613784ull,
+ 12637824850409854075ull, 2492363446333357598ull}},
+{{992191063349026795ull, 11007904212833379326ull,
+ 6573909026157541786ull, 3115454307916696998ull}},
+{{10463610866041059301ull, 4536508229186948349ull,
+ 17440758319551703041ull, 3894317884895871247ull}},
+{{8845599800489356015ull, 14364532689310312478ull,
+ 17818002977360896256ull, 2433948678059919529ull}},
+{{1833627713756919211ull, 17955665861637890598ull,
+ 8437445666418956608ull, 3042435847574899412ull}},
+{{11515406679050924822ull, 3997838253337811631ull,
+ 10546807083023695761ull, 3803044809468624265ull}},
+{{14114658202047909870ull, 14027863954404602029ull,
+ 18120969472958279610ull, 2376903005917890165ull}},
+{{3808264697277723625ull, 8311457906150976729ull,
+ 8816153785915685801ull, 2971128757397362707ull}},
+{{9372016890024542435ull, 15001008401116108815ull,
+ 6408506213967219347ull, 3713910946746703384ull}},
+{{12775039583906420878ull, 7069787241483874057ull,
+ 4005316383729512092ull, 2321194341716689615ull}},
+{{2133741424600862386ull, 8837234051854842572ull, 394959461234502211ull,
+ 2901492927145862019ull}},
+{{2667176780751077982ull, 6434856546391165311ull,
+ 14328757381825291476ull, 3626866158932327523ull}},
+{{17169029031221011189ull, 8043570682988956638ull,
+ 13299260708854226441ull, 4533582698665409404ull}},
+{{6118957126085744089ull, 16556446722936567659ull,
+ 17535409979888667333ull, 2833489186665880877ull}},
+{{3037010389179792208ull, 6860500348388545862ull,
+ 8084204419578670455ull, 3541861483332351097ull}},
+{{13019635023329516067ull, 3963939417058294423ull,
+ 14716941542900725973ull, 4427326854165438871ull}},
+{{15054800917222029398ull, 4783305144875127966ull,
+ 16115617491954035589ull, 2767079283853399294ull}},
+{{9595129109672760940ull, 10590817449521297862ull,
+ 10921149828087768678ull, 3458849104816749118ull}},
+{{2770539350236175367ull, 4015149775046846520ull,
+ 4428065248254935040ull, 4323561381020936398ull}},
+{{1731587093897609604ull, 2509468609404279075ull,
+ 16602598835441498112ull, 2702225863138085248ull}},
+{{15999541922654175717ull, 3136835761755348843ull,
+ 2306504470592321024ull, 3377782328922606561ull}},
+{{15387741384890331743ull, 3921044702194186054ull,
+ 7494816606667789184ull, 4222227911153258201ull}},
+{{5005652347129069435ull, 2450652938871366284ull,
+ 16213475425235838000ull, 2638892444470786375ull}},
+{{6257065433911336794ull, 3063316173589207855ull,
+ 15655158263117409596ull, 3298615555588482969ull}},
+{{3209645773961783088ull, 3829145216986509819ull,
+ 5733889773614598283ull, 4123269444485603712ull}},
+{{18146929673221972094ull, 87372751402874684ull, 3583681108509123927ull,
+ 2577043402803502320ull}},
+{{4236918017817913502ull, 13944273994535757068ull,
+ 4479601385636404908ull, 3221304253504377900ull}},
+{{5296147522272391877ull, 17430342493169696335ull,
+ 5599501732045506135ull, 4026630316880472375ull}},
+{{10227621229061326779ull, 17811493085872142065ull,
+ 10417217610169523190ull, 2516643948050295234ull}},
+{{17396212554754046378ull, 13040994320485401773ull,
+ 3798149975857128180ull, 3145804935062869043ull}},
+{{7910207638160394261ull, 16301242900606752217ull,
+ 136001451394022321ull, 3932256168828586304ull}},
+{{16473094819918716173ull, 3270747785238138279ull, 85000907121263951ull,
+ 2457660105517866440ull}},
+{{15979682506471007312ull, 17923492786829836561ull,
+ 106251133901579938ull, 3072075131897333050ull}},
+{{6139545077806595428ull, 13180993946682519894ull,
+ 9356185954231750731ull, 3840093914871666312ull}},
+{{17672273728911285855ull, 5932278207462880981ull,
+ 5847616221394844207ull, 2400058696794791445ull}},
+{{8255284105856943606ull, 2803661740901213323ull,
+ 11921206295170943163ull, 3000073370993489306ull}},
+{{5707419113893791604ull, 17339635231408680366ull,
+ 5678135832108903145ull, 3750091713741861633ull}},
+{{17402195001465783465ull, 3919742991989343372ull,
+ 15078049941136534226ull, 2343807321088663520ull}},
+{{3305999678122677715ull, 14123050776841455024ull,
+ 400818352711116166ull, 2929759151360829401ull}},
+{{4132499597653347143ull, 8430441434197042972ull,
+ 5112708959316283112ull, 3662198939201036751ull}},
+{{5165624497066683929ull, 10538051792746303715ull,
+ 1779200180717965986ull, 4577748674001295939ull}},
+{{922672301452983504ull, 11197968388893827726ull,
+ 17252901177444586405ull, 2861092921250809961ull}},
+{{10376712413671005187ull, 162402430835120945ull,
+ 7731068416523569295ull, 3576366151563512452ull}},
+{{17582576535516144388ull, 14038061093826064893ull,
+ 9663835520654461618ull, 4470457689454390565ull}},
+{{13294953343911284195ull, 13385474202068678462ull,
+ 8345740209622732463ull, 2794036055908994103ull}},
+{{7395319643034329435ull, 12120156734158460174ull,
+ 5820489243601027675ull, 3492545069886242629ull}},
+{{20777516938135986ull, 10538509899270687314ull,
+ 11887297572928672498ull, 4365681337357803286ull}},
+{{4624671966513722895ull, 11198254705471567475ull,
+ 2817874964653032407ull, 2728550835848627054ull}},
+{{1169153939714765715ull, 9386132363412071440ull,
+ 12745715742671066317ull, 3410688544810783817ull}},
+{{1461442424643457144ull, 16344351472692477204ull,
+ 2097086623056669184ull, 4263360681013479772ull}},
+{{10136773552256936523ull, 10215219670432798252ull,
+ 10534051176265194048ull, 2664600425633424857ull}},
+{{12670966940321170654ull, 12769024588040997815ull,
+ 17779249988758880464ull, 3330750532041781071ull}},
+{{11227022656974075413ull, 15961280735051247269ull,
+ 17612376467521212676ull, 4163438165052226339ull}},
+{{9322732169822491085ull, 752428422552253735ull, 8701892282987063971ull,
+ 2602148853157641462ull}},
+{{7041729193850725953ull, 14775593583472480881ull,
+ 1653993316879054155ull, 3252686066447051828ull}},
+{{13413847510740795345ull, 13857805960913213197ull,
+ 2067491646098817694ull, 4065857583058814785ull}},
+{{10689497703426691043ull, 4049442707143370344ull,
+ 12821397324880230819ull, 2541160989411759240ull}},
+{{13361872129283363803ull, 450117365501825026ull,
+ 16026746656100288524ull, 3176451236764699050ull}},
+{{7478968124749428946ull, 562646706877281283ull,
+ 10810061283270584847ull, 3970564045955873813ull}},
+{{2368512068754699139ull, 7269183219439382658ull,
+ 9062131311257809481ull, 2481602528722421133ull}},
+{{12184012122798149732ull, 13698165042726616226ull,
+ 15939350157499649755ull, 3102003160903026416ull}},
+{{6006643116642911357ull, 12511020284980882379ull,
+ 1477443623165010578ull, 3877503951128783021ull}},
+{{1448308938688125646ull, 12431073696540439391ull,
+ 3229245273691825563ull, 2423439969455489388ull}},
+{{15645444228642320770ull, 10927156102248161334ull,
+ 4036556592114781954ull, 3029299961819361735ull}},
+{{10333433248948125154ull, 4435573090955425860ull,
+ 434009721716089539ull, 3786624952274202169ull}},
+{{15681767817447354029ull, 466390172633447210ull,
+ 11800471122141025722ull, 2366640595171376355ull}},
+{{10378837734954416729ull, 9806359752646584821ull,
+ 10138902884248894248ull, 2958300743964220444ull}},
+{{17585233187120408815ull, 12257949690808231026ull,
+ 12673628605311117810ull, 3697875929955275555ull}},
+{{15602456760377643413ull, 12272904575182532295ull,
+ 5615174869105754679ull, 2311172456222047222ull}},
+{{14891384932044666363ull, 10729444700550777465ull,
+ 16242340623236969157ull, 2888965570277559027ull}},
+{{4779173109773669241ull, 18023491894115859736ull,
+ 15691239760618823542ull, 3611206962846948784ull}},
+{{5973966387217086551ull, 13305992830790048862ull,
+ 1167305627063977812ull, 4514008703558685981ull}},
+{{17568787047292842807ull, 17539617556098556346ull,
+ 3035409026128680084ull, 2821255439724178738ull}},
+{{12737611772261277700ull, 3477777871413643817ull,
+ 13017633319515625914ull, 3526569299655223422ull}},
+{{2086956660044433413ull, 13570594376121830580ull,
+ 7048669612539756584ull, 4408211624569029278ull}},
+{{10527719949382546691ull, 8481621485076144112ull,
+ 18240476563119511577ull, 2755132265355643298ull}},
+{{13159649936728183364ull, 15213712874772568044ull,
+ 13577223667044613663ull, 3443915331694554123ull}},
+{{16449562420910229205ull, 14405455075038322151ull,
+ 12359843565378379175ull, 4304894164618192654ull}},
+{{17198505540709975109ull, 15920938449540033200ull,
+ 3113216209934099080ull, 2690558852886370409ull}},
+{{3051387852177917271ull, 1454428988215489885ull,
+ 8503206280845011755ull, 3363198566107963011ull}},
+{{8425920833649784492ull, 15653094290551526068ull,
+ 6017321832628876789ull, 4203998207634953764ull}},
+{{14489572557885891116ull, 12089026940808397744ull,
+ 12984198182247823801ull, 2627498879771846102ull}},
+{{18111965697357363895ull, 1276225620728333468ull,
+ 7006875690955003944ull, 3284373599714807628ull}},
+{{4193213047987153252ull, 1595282025910416836ull,
+ 8758594613693754930ull, 4105466999643509535ull}},
+{{11844130191846746591ull, 5608737284621398426ull,
+ 12391650661199678687ull, 2565916874777193459ull}},
+{{5581790702953657430ull, 2399235587349360129ull,
+ 10877877308072210455ull, 3207396093471491824ull}},
+{{11588924397119459692ull, 16834102539468863873ull,
+ 13597346635090263068ull, 4009245116839364780ull}},
+{{325548720558580452ull, 1297942050313264113ull,
+ 17721713683786190226ull, 2505778198024602987ull}},
+{{5018621919125613468ull, 10845799599746355949ull,
+ 17540456086305349878ull, 3132222747530753734ull}},
+{{10884963417334404739ull, 4333877462828169128ull,
+ 12702198071026911540ull, 3915278434413442168ull}},
+{{6803102135834002962ull, 11932045451122381513ull,
+ 7938873794391819712ull, 2447049021508401355ull}},
+{{13115563688219891607ull, 14915056813902976891ull,
+ 5311906224562386736ull, 3058811276885501694ull}},
+{{11782768591847476604ull, 197076943669169498ull,
+ 15863254817557759229ull, 3823514096106877117ull}},
+{{11975916388332060782ull, 2429016099006924888ull,
+ 12220377270187293470ull, 2389696310066798198ull}},
+{{14969895485415075977ull, 12259642160613431918ull,
+ 6052099550879341029ull, 2987120387583497748ull}},
+{{9488997319914069163ull, 1489494645484626186ull,
+ 7565124438599176287ull, 3733900484479372185ull}},
+{{10542309343373681131ull, 7848463181068973222ull,
+ 16257417820192954939ull, 2333687802799607615ull}},
+{{3954514642362325606ull, 5198892957908828624ull,
+ 15710086256813805770ull, 2917109753499509519ull}},
+{{4943143302952907007ull, 15721988234240811588ull,
+ 15025921802589869308ull, 3646387191874386899ull}},
+{{6178929128691133759ull, 1205741219091462869ull,
+ 14170716234809948732ull, 4557983989842983624ull}},
+{{6167673714645652552ull, 9976960298786940101ull,
+ 8856697646756217957ull, 2848739993651864765ull}},
+{{12321278161734453593ull, 17082886391911063030ull,
+ 15682558076872660350ull, 3560924992064830956ull}},
+{{6178225665313291183ull, 12130235953034052980ull,
+ 1156453522381273822ull, 4451156240081038696ull}},
+{{13084763077675582798ull, 2969711452218895208ull,
+ 722783451488296139ull, 2781972650050649185ull}},
+{{16355953847094478497ull, 17547197370555782722ull,
+ 5515165332787758077ull, 3477465812563311481ull}},
+{{11221570272013322313ull, 8098938657912564691ull,
+ 11505642684412085501ull, 4346832265704139351ull}},
+{{4707638410794632494ull, 7367679670409046884ull,
+ 14108555705398635294ull, 2716770166065087094ull}},
+{{5884548013493290617ull, 18432971624866084413ull,
+ 8412322594893518309ull, 3395962707581358868ull}},
+{{11967371035294001176ull, 9206156475800441804ull,
+ 10515403243616897887ull, 4244953384476698585ull}},
+{{16702978933913526543ull, 12671376825016357983ull,
+ 18101342073329030939ull, 2653095865297936615ull}},
+{{16267037648964520275ull, 11227535012843059575ull,
+ 18014991573233900770ull, 3316369831622420769ull}},
+{{15722111042778262439ull, 4811046729199048661ull,
+ 8683681411260212251ull, 4145462289528025962ull}},
+{{12132162410950107977ull, 701061196535711461ull,
+ 10038986900465020561ull, 2590913930955016226ull}},
+{{1330144958405471259ull, 5488012514097027231ull,
+ 3325361588726499893ull, 3238642413693770283ull}},
+{{15497739253289002785ull, 11471701661048671942ull,
+ 17991760041190288578ull, 4048303017117212853ull}},
+{{5074401014878238837ull, 11781499556582807868ull,
+ 13550693034957624313ull, 2530189385698258033ull}},
+{{6343001268597798546ull, 891816390446346123ull, 3103308238414866680ull,
+ 3162736732122822542ull}},
+{{3317065567319860278ull, 1114770488057932654ull,
+ 13102507334873359158ull, 3953420915153528177ull}},
+{{15908224034857076386ull, 14531789610318371620ull,
+ 1271538056654767617ull, 2470888071970955111ull}},
+{{1438535969861793867ull, 4329678957615800814ull,
+ 15424480626100623234ull, 3088610089963693888ull}},
+{{11021541999182018141ull, 14635470733874526825ull,
+ 833856708916227426ull, 3860762612454617361ull}},
+{{18417678795557231098ull, 13758855227098967169ull,
+ 12050375489141111901ull, 2412976632784135850ull}},
+{{9187040439164375161ull, 3363510978591545250ull,
+ 5839597324571614069ull, 3016220790980169813ull}},
+{{2260428512100693143ull, 8816074741666819467ull,
+ 11911182674141905490ull, 3770275988725212266ull}},
+{{17553668884558790879ull, 10121732731969150070ull,
+ 12056175189766078835ull, 2356422492953257666ull}},
+{{12718714068843712790ull, 8040479896534049684ull,
+ 5846846950352822736ull, 2945528116191572083ull}},
+{{15898392586054640987ull, 10050599870667562105ull,
+ 2696872669513640516ull, 3681910145239465104ull}},
+{{6037932677286137522ull, 12563249838334452632ull,
+ 3371090836892050645ull, 4602387681549331380ull}},
+{{3773707923303835952ull, 10157874158172726847ull,
+ 11330303809912307461ull, 2876492300968332112ull}},
+{{105448885702407035ull, 17309028716143296463ull,
+ 14162879762390384326ull, 3595615376210415140ull}},
+{{13966869162410172506ull, 12412913858324344770ull,
+ 17703599702987980408ull, 4494519220263018925ull}},
+{{13340979244933745720ull, 7758071161452715481ull,
+ 13370592823581181707ull, 2809074512664386828ull}},
+{{2841166000885018438ull, 5085902933388506448ull,
+ 16713241029476477134ull, 3511343140830483535ull}},
+{{3551457501106273048ull, 15580750703590408868ull,
+ 16279865268418208513ull, 4389178926038104419ull}},
+{{11443032975046196463ull, 2820440162102923686ull,
+ 7869072783547686369ull, 2743236828773815262ull}},
+{{5080419181952969771ull, 8137236221056042512ull, 612968942579832153ull,
+ 3429046035967269078ull}},
+{{6350523977441212213ull, 14783231294747441044ull,
+ 9989583215079565999ull, 4286307544959086347ull}},
+{{13192449522755533442ull, 16157048586858232508ull,
+ 3937646500211034797ull, 2678942215599428967ull}},
+{{16490561903444416802ull, 6361252678290626923ull,
+ 310372106836405593ull, 3348677769499286209ull}},
+{{16001516360878133098ull, 12563251866290671558ull,
+ 4999651151972894895ull, 4185847211874107761ull}},
+{{5389261707121445283ull, 14769561444072751580ull,
+ 14653997016051529069ull, 2616154507421317350ull}},
+{{6736577133901806603ull, 4626893749808775763ull,
+ 9094124233209635529ull, 3270193134276646688ull}},
+{{3809035398949870350ull, 10395303205688357608ull,
+ 11367655291512044411ull, 4087741417845808360ull}},
+{{2380647124343668969ull, 4191221494341529553ull,
+ 7104784557195027757ull, 2554838386153630225ull}},
+{{7587494923856974115ull, 9850712886354299845ull,
+ 13492666714921172600ull, 3193547982692037781ull}},
+{{14096054673248605547ull, 12313391107942874806ull,
+ 3030775338369302038ull, 3991934978365047227ull}},
+{{4198348152352990563ull, 3084183424036908850ull,
+ 18035135650976671438ull, 2494959361478154516ull}},
+{{14471307227296014012ull, 13078601316900911870ull,
+ 4097175490011287681ull, 3118699201847693146ull}},
+{{8865761997265241707ull, 2513193590843976126ull,
+ 14344841399368885410ull, 3898374002309616432ull}},
+{{929415229863388163ull, 6182432012704872983ull, 8965525874605553381ull,
+ 2436483751443510270ull}},
+{{14996827092611398916ull, 12339726034308479132ull,
+ 1983535306402165918ull, 3045604689304387838ull}},
+{{299289792054697028ull, 6201285506030823108ull,
+ 11702791169857483206ull, 3807005861630484797ull}},
+{{9410428156888961451ull, 17710861496551428154ull,
+ 9620087490374620955ull, 2379378663519052998ull}},
+{{2539663159256426006ull, 17526890852261897289ull,
+ 2801737326113500386ull, 2974223329398816248ull}},
+{{7786264967497920411ull, 12685241528472595803ull,
+ 3502171657641875483ull, 3717779161748520310ull}},
+{{2560572595472506305ull, 5622432946081678425ull,
+ 16023915341308335889ull, 2323611976092825193ull}},
+{{7812401762768020785ull, 11639727201029485935ull,
+ 6194836121353256149ull, 2904514970116031492ull}},
+{{5153816185032638077ull, 714600946004693707ull, 7743545151691570187ull,
+ 3630643712645039365ull}},
+{{1830584212863409692ull, 14728309237788030846ull,
+ 14291117458041850637ull, 4538304640806299206ull}},
+{{14979173188321794770ull, 11511036282831213230ull,
+ 4320262392848768744ull, 2836440400503937004ull}},
+{{9500594448547467654ull, 14388795353539016538ull,
+ 5400327991060960930ull, 3545550500629921255ull}},
+{{2652371023829558760ull, 8762622155068994865ull,
+ 2138723970398813259ull, 4431938125787401569ull}},
+{{13186946935961943985ull, 3170795837704427838ull,
+ 12865917527567728047ull, 2769961328617125980ull}},
+{{7260311633097654173ull, 17798552852412698510ull,
+ 16082396909459660058ull, 3462451660771407475ull}},
+{{18298761578226843524ull, 13024819028661097329ull,
+ 15491310118397187169ull, 4328064575964259344ull}},
+{{4519196958750695347ull, 1222982865272103975ull,
+ 9682068823998241981ull, 2705040359977662090ull}},
+{{1037310180010981279ull, 6140414600017517873ull,
+ 2879213993143026668ull, 3381300449972077613ull}},
+{{5908323743441114503ull, 7675518250021897341ull,
+ 8210703509856171239ull, 4226625562465097016ull}},
+{{5998545348864390517ull, 11714727933904767694ull,
+ 5131689693660107024ull, 2641640976540685635ull}},
+{{16721553722935263954ull, 14643409917380959617ull,
+ 1802926098647745876ull, 3302051220675857044ull}},
+{{7066884098386916230ull, 18304262396726199522ull,
+ 2253657623309682345ull, 4127564025844821305ull}},
+{{9028488579919210548ull, 4522634970312792845ull,
+ 12937751060637021226ull, 2579727516153013315ull}},
+{{15897296743326401089ull, 14876665749745766864ull,
+ 11560502807368888628ull, 3224659395191266644ull}},
+{{1424876855448449745ull, 149088113472656965ull,
+ 14450628509211110786ull, 4030824243989083305ull}},
+{{3196391043868975043ull, 4704866089347798507ull,
+ 2114113790615862385ull, 2519265152493177066ull}},
+{{17830546860118382515ull, 10492768630112136037ull,
+ 11866014275124603789ull, 3149081440616471332ull}},
+{{8453125519865814432ull, 17727646806067557951ull,
+ 14832517843905754736ull, 3936351800770589165ull}},
+{{12200732477557215876ull, 11079779253792223719ull,
+ 11576166661654790662ull, 2460219875481618228ull}},
+{{10639229578519131941ull, 4626352030385503841ull,
+ 14470208327068488328ull, 3075274844352022785ull}},
+{{17910722991576302830ull, 5782940037981879801ull,
+ 4252702353553446698ull, 3844093555440028482ull}},
+{{4276672842094107413ull, 8226023542166062780ull,
+ 7269624989398292090ull, 2402558472150017801ull}},
+{{5345841052617634266ull, 1059157390852802667ull,
+ 13698717255175253017ull, 3003198090187522251ull}},
+{{2070615297344654929ull, 5935632756993391238ull,
+ 12511710550541678367ull, 3753997612734402814ull}},
+{{15129192616122573043ull, 10627299500761951379ull,
+ 3208133075661161075ull, 2346248507959001759ull}},
+{{14299804751725828399ull, 8672438357525051320ull,
+ 17845224399858615056ull, 2932810634948752198ull}},
+{{17874755939657285499ull, 10840547946906314150ull,
+ 13083158462968493012ull, 3666013293685940248ull}},
+{{13120072887716831065ull, 13550684933632892688ull,
+ 16353948078710616265ull, 4582516617107425310ull}},
+{{8200045554823019416ull, 1551649055879476074ull,
+ 5609531530766747262ull, 2864072885692140819ull}},
+{{1026684906673998462ull, 11162933356704120901ull,
+ 2400228395031046173ull, 3580091107115176024ull}},
+{{5895042151769885981ull, 118608640597987414ull, 3000285493788807717ull,
+ 4475113883893970030ull}},
+{{17519459400138342451ull, 2379973409587436085ull,
+ 15710236488900168535ull, 2796946177433731268ull}},
+{{8064266194890764351ull, 16810024817266458819ull,
+ 1191051537415659052ull, 3496182721792164086ull}},
+{{5468646725186067535ull, 2565786947873521908ull,
+ 10712186458624349624ull, 4370228402240205107ull}},
+{{12641276240096068017ull, 1603616842420951192ull,
+ 4389273527426524563ull, 2731392751400128192ull}},
+{{15801595300120085022ull, 15839579108308352702ull,
+ 5486591909283155703ull, 3414240939250160240ull}},
+{{10528622088295330469ull, 15187787866958052974ull,
+ 6858239886603944629ull, 4267801174062700300ull}},
+{{1968702786757193639ull, 11798210426062477061ull,
+ 13509771965982241201ull, 2667375733789187687ull}},
+{{7072564501873879953ull, 912704977295932614ull,
+ 12275528939050413598ull, 3334219667236484609ull}},
+{{18064077664197125749ull, 10364253258474691575ull,
+ 1509353118530853285ull, 4167774584045605762ull}},
+{{18207577567764285449ull, 8783501295760376186ull,
+ 5555031717509171207ull, 2604859115028503601ull}},
+{{13536099922850581003ull, 6367690601273082329ull,
+ 11555475665313851913ull, 3256073893785629501ull}},
+{{3085066848281062542ull, 12571299270018740816ull,
+ 609286526360151179ull, 4070092367232036877ull}},
+{{1928166780175664089ull, 5551219034548019058ull,
+ 2686647088188788439ull, 2543807729520023048ull}},
+{{11633580512074355919ull, 2327337774757635918ull,
+ 3358308860235985549ull, 3179759661900028810ull}},
+{{5318603603238169091ull, 7520858236874432802ull,
+ 13421258112149757744ull, 3974699577375036012ull}},
+{{7935813270451243586ull, 4700536398046520501ull,
+ 17611658356948374398ull, 2484187235859397507ull}},
+{{14531452606491442386ull, 15099042534412926434ull,
+ 17402886927758080093ull, 3105234044824246884ull}},
+{{8940943721259527175ull, 5038745112733994331ull,
+ 3306864585988048501ull, 3881542556030308606ull}},
+{{3282246816573510532ull, 5455058704672440409ull,
+ 15901848421524694025ull, 2425964097518942878ull}},
+{{8714494539144276069ull, 11430509399267938415ull,
+ 10653938490051091723ull, 3032455121898678598ull}},
+{{6281432155502957183ull, 9676450730657535115ull,
+ 4094051075709088846ull, 3790568902373348248ull}},
+{{1620052087975654287ull, 1436095688233571543ull,
+ 2558781922318180529ull, 2369105563983342655ull}},
+{{15860123165251731571ull, 6406805628719352332ull,
+ 17033535458179889373ull, 2961381954979178318ull}},
+{{1378409882855112848ull, 12620193054326578320ull,
+ 12068547285870085908ull, 3701727443723972898ull}},
+{{861506176784445530ull, 17110992695808887258ull,
+ 12154528072096191596ull, 2313579652327483061ull}},
+{{10300254757835332720ull, 2941996796051557456ull,
+ 1358102034838075784ull, 2891974565409353827ull}},
+{{12875318447294165900ull, 3677495995064446820ull,
+ 15532685598829758442ull, 3614968206761692283ull}},
+{{16094148059117707375ull, 13820242030685334333ull,
+ 14804170980109810148ull, 4518710258452115354ull}},
+{{12364685546162261062ull, 17861023306033109766ull,
+ 13864292880996019246ull, 2824193911532572096ull}},
+{{6232484895848050519ull, 13102907095686611400ull,
+ 17330366101245024058ull, 3530242389415715120ull}},
+{{7790606119810063149ull, 7155261832753488442ull,
+ 3216213552846728457ull, 4412802986769643901ull}},
+{{9480814843308677372ull, 16001253691539400036ull,
+ 4315976479742899237ull, 2758001866731027438ull}},
+{{11851018554135846715ull, 6166509059142086333ull,
+ 14618342636533399855ull, 3447502333413784297ull}},
+{{978715137387644682ull, 3096450305500220013ull, 4437870240384586107ull,
+ 4309377916767230372ull}},
+{{2917539970080971878ull, 18076182505433495172ull,
+ 11997040937095142124ull, 2693361197979518982ull}},
+{{3646924962601214848ull, 4148484058082317349ull,
+ 5772929134514151848ull, 3366701497474398728ull}},
+{{9170342221678906464ull, 5185605072602896686ull,
+ 7216161418142689810ull, 4208376871842998410ull}},
+{{1119777870121928636ull, 7852689188804198333ull,
+ 9121786904766569035ull, 2630235544901874006ull}},
+{{6011408356079798699ull, 5204175467577860012ull,
+ 2178861594103435486ull, 3287794431127342508ull}},
+{{7514260445099748373ull, 15728591371327100823ull,
+ 2723576992629294357ull, 4109743038909178135ull}},
+{{11613941805828424589ull, 12136212616293131966ull,
+ 8619764648034390829ull, 2568589399318236334ull}},
+{{5294055220430754929ull, 1335207715084251246ull,
+ 1551333773188212729ull, 3210736749147795418ull}},
+{{15840941062393219469ull, 6280695662282701961ull,
+ 11162539253340041719ull, 4013420936434744272ull}},
+{{2983059136354680312ull, 10842963816567770582ull,
+ 6976587033337526074ull, 2508388085271715170ull}},
+{{12952195957298126198ull, 4330332733854937419ull,
+ 17944105828526683401ull, 3135485106589643962ull}},
+{{11578558928195269844ull, 10024601935746059678ull,
+ 13206760248803578443ull, 3919356383237054953ull}},
+{{2624913311694655748ull, 3959533200627593347ull,
+ 1336696127861154671ull, 2449597739523159346ull}},
+{{17116199694900483397ull, 337730482357103779ull,
+ 10894242196681219147ull, 3061997174403949182ull}},
+{{16783563600198216343ull, 14257221158228543436ull,
+ 4394430708996748125ull, 3827496468004936478ull}},
+{{1266355213269109406ull, 11216606233106533600ull,
+ 16581577248405131290ull, 2392185292503085298ull}},
+{{1582944016586386758ull, 4797385754528391192ull,
+ 11503599523651638305ull, 2990231615628856623ull}},
+{{1978680020732983447ull, 10608418211587876894ull,
+ 9767813386137159977ull, 3737789519536070779ull}},
+{{15071733068240278367ull, 18159476428310892818ull,
+ 3799040357122031033ull, 2336118449710044237ull}},
+{{9616294298445572150ull, 8864287480106452311ull,
+ 9360486464829926696ull, 2920148062137555296ull}},
+{{7408681854629577284ull, 11080359350133065389ull,
+ 11700608081037408370ull, 3650185077671944120ull}},
+{{13872538336714359508ull, 4627077150811555928ull,
+ 14625760101296760463ull, 4562731347089930150ull}},
+{{8670336460446474693ull, 9809452246898304311ull,
+ 4529414044883087385ull, 2851707091931206344ull}},
+{{6226234557130705462ull, 16873501327050268293ull,
+ 5661767556103859231ull, 3564633864914007930ull}},
+{{12394479214840769731ull, 16480190640385447462ull,
+ 16300581481984599847ull, 4455792331142509912ull}},
+{{3134863490848093178ull, 17217648177881986520ull,
+ 10187863426240374904ull, 2784870206964068695ull}},
+{{3918579363560116473ull, 3075316148642931534ull,
+ 8123143264373080727ull, 3481087758705085869ull}},
+{{14121596241304921399ull, 17679203241085828129ull,
+ 14765615098893738812ull, 4351359698381357336ull}},
+{{1908468623174494018ull, 1826129988823866773ull,
+ 9228509436808586758ull, 2719599811488348335ull}},
+{{6997271797395505427ull, 11506034522884609274ull,
+ 6923950777583345543ull, 3399499764360435419ull}},
+{{17969961783599157591ull, 9770857135178373688ull,
+ 4043252453551794025ull, 4249374705450544274ull}},
+{{11231226114749473495ull, 17636000755554953315ull,
+ 7138718801897259169ull, 2655859190906590171ull}},
+{{9427346625009453964ull, 8209942889161527932ull,
+ 4311712483944186058ull, 3319823988633237714ull}},
+{{11784183281261817455ull, 1039056574597134107ull,
+ 14613012641785008381ull, 4149779985791547142ull}},
+{{5059271541574941958ull, 2955253368336902769ull,
+ 4521446882688242334ull, 2593612491119716964ull}},
+{{10935775445396065351ull, 12917438747275904269ull,
+ 5651808603360302917ull, 3242015613899646205ull}},
+{{18281405325172469593ull, 2311740378812716624ull,
+ 11676446772627766551ull, 4052519517374557756ull}},
+{{11425878328232793496ull, 8362366764399029746ull,
+ 16521151269747129902ull, 2532824698359098597ull}},
+{{5058975873436216062ull, 1229586418644011375ull,
+ 6816381031901748666ull, 3166030872948873247ull}},
+{{1712033823367882173ull, 10760355060159790027ull,
+ 3908790271449797928ull, 3957538591186091559ull}},
+{{17210922204100784022ull, 6725221912599868766ull,
+ 9360522947297205561ull, 2473461619491307224ull}},
+{{12290280718271204220ull, 13018213409177223862ull,
+ 11700653684121506951ull, 3091827024364134030ull}},
+{{6139478860984229466ull, 11661080743044141924ull,
+ 5402445068297107881ull, 3864783780455167538ull}},
+{{13060546324969919225ull, 370646436761506846ull,
+ 7988214186113080330ull, 2415489862784479711ull}},
+{{7102310869357623223ull, 9686680082806659366ull,
+ 5373581714213962508ull, 3019362328480599639ull}},
+{{18101260623551804836ull, 12108350103508324207ull,
+ 2105291124340065231ull, 3774202910600749549ull}},
+{{18230816917360959879ull, 14485247842333784485ull,
+ 3621649961926234721ull, 2358876819125468468ull}},
+{{8953463091419036136ull, 4271501747635066895ull,
+ 4527062452407793402ull, 2948596023906835585ull}},
+{{6580142845846407266ull, 14562749221398609427ull,
+ 10270514083937129656ull, 3685745029883544481ull}},
+{{3613492538880621179ull, 18203436526748261784ull,
+ 17449828623348799974ull, 4607181287354430601ull}},
+{{2258432836800388237ull, 6765461810790275711ull,
+ 3988613861951918128ull, 2879488304596519126ull}},
+{{16658099101282649008ull, 8456827263487844638ull,
+ 14209139364294673468ull, 3599360380745648907ull}},
+{{11599251839748535452ull, 10571034079359805798ull,
+ 13149738186940953931ull, 4499200475932061134ull}},
+{{2637846381415446754ull, 4301053290386184672ull,
+ 3606900348410708303ull, 2812000297457538209ull}},
+{{3297307976769308442ull, 764630594555342936ull, 9120311453940773283ull,
+ 3515000371821922761ull}},
+{{4121634970961635552ull, 14790846298476342382ull,
+ 16012075335853354507ull, 4393750464777403451ull}},
+{{16411079912133185932ull, 6938435927334020036ull,
+ 7701704075694652615ull, 2746094040485877157ull}},
+{{2067105816456930799ull, 4061358890740137142ull,
+ 14238816113045703673ull, 3432617550607346446ull}},
+{{11807254307425939307ull, 9688384631852559331ull,
+ 8575148104452353783ull, 4290771938259183058ull}},
+{{5073690932927518115ull, 12972769422548931438ull,
+ 9971153583710109018ull, 2681732461411989411ull}},
+{{15565485703014173452ull, 6992589741331388489ull,
+ 7852255961210248369ull, 3352165576764986764ull}},
+{{5621799073485553103ull, 13352423195091623516ull,
+ 9815319951512810461ull, 4190206970956233455ull}},
+{{12736996457783246497ull, 10651107506145958649ull,
+ 13052103997336588394ull, 2618879356847645909ull}},
+{{2086187516946894410ull, 4090512345827672504ull,
+ 2480071941388571781ull, 3273599196059557387ull}},
+{{2607734396183618012ull, 9724826450711978534ull,
+ 16935147982017878438ull, 4091998995074446733ull}},
+{{15464892052896924970ull, 1466330513267598679ull,
+ 12890310497974867976ull, 2557499371921529208ull}},
+{{14719429047693768308ull, 1832913141584498349ull,
+ 16112888122468584970ull, 3196874214901911510ull}},
+{{4564228254335046673ull, 11514513463835398745ull,
+ 10917738116230955404ull, 3996092768627389388ull}},
+{{14381857705027873931ull, 16419942951751900023ull,
+ 16046958359499122935ull, 2497557980392118367ull}},
+{{13365636112857454509ull, 15913242671262487125ull,
+ 15447011930946515765ull, 3121947475490147959ull}},
+{{2871987085789654424ull, 6056495283795945195ull,
+ 14697078895255756803ull, 3902434344362684949ull}},
+{{17935892993114391679ull, 1479466543158771794ull,
+ 11491517318748541954ull, 2439021465226678093ull}},
+{{13196494204538213791ull, 11072705215803240551ull,
+ 529338593153513730ull, 3048776831533347617ull}},
+{{11883931737245379335ull, 4617509482899274881ull,
+ 5273359259869280067ull, 3810971039416684521ull}},
+{{509928308137280228ull, 580100417598352849ull, 14825064583486769802ull,
+ 2381856899635427825ull}},
+{{5249096403598988189ull, 9948497558852716869ull,
+ 4696272674076298540ull, 2977321124544284782ull}},
+{{11173056522926123141ull, 12435621948565896086ull,
+ 15093712879450148983ull, 3721651405680355977ull}},
+{{2371474308401439059ull, 14689792745494766910ull,
+ 2516041522015261258ull, 2326032128550222486ull}},
+{{12187714922356574632ull, 9138868895013682829ull,
+ 12368423939373852381ull, 2907540160687778107ull}},
+{{1399585597663554577ull, 16035272137194491441ull,
+ 10848843905789927572ull, 3634425200859722634ull}},
+{{6361168015506831126ull, 1597346097783562685ull,
+ 4337682845382633658ull, 4543031501074653293ull}},
+{{6281573018905463406ull, 5610027329542114582ull,
+ 5016894787577839988ull, 2839394688171658308ull}},
+{{17075338310486605065ull, 7012534161927643227ull,
+ 6271118484472299985ull, 3549243360214572885ull}},
+{{16732486869680868427ull, 13377353720836941938ull,
+ 12450584124017762885ull, 4436554200268216106ull}},
+{{15069490311977930671ull, 10666689084736782663ull,
+ 12393301095938489707ull, 2772846375167635066ull}},
+{{14225176871545025435ull, 8721675337493590425ull,
+ 6268254333068336326ull, 3466057968959543833ull}},
+{{3946413034149118081ull, 1678722135012212224ull,
+ 12447003934762808312ull, 4332572461199429791ull}},
+{{2466508146343198801ull, 1049201334382632640ull,
+ 14696906486867837051ull, 2707857788249643619ull}},
+{{3083135182928998501ull, 15146559723260454512ull,
+ 13759447090157408409ull, 3384822235312054524ull}},
+{{3853918978661248126ull, 5098141598793404428ull,
+ 17199308862696760512ull, 4231027794140068155ull}},
+{{11632071398518055887ull, 3186338499245877767ull,
+ 8443725029971781368ull, 2644392371337542597ull}},
+{{9928403229720181955ull, 3982923124057347209ull,
+ 15166342305892114614ull, 3305490464171928246ull}},
+{{17022190055577615348ull, 14202025941926459819ull,
+ 9734555845510367459ull, 4131863080214910308ull}},
+{{8333025775522315640ull, 6570423204490343435ull,
+ 15307469440298755470ull, 2582414425134318942ull}},
+{{5804596200975506646ull, 17436401042467705102ull,
+ 9910964763518668529ull, 3228018031417898678ull}},
+{{16479117288074159116ull, 7960443247802467665ull,
+ 3165333917543559854ull, 4035022539272373348ull}},
+{{3381919277405267592ull, 363591011449154387ull,
+ 11201705735319500717ull, 2521889087045233342ull}},
+{{18062457152038748201ull, 5066174782738830887ull,
+ 4778760132294600088ull, 3152361358806541678ull}},
+{{17966385421621047348ull, 6332718478423538609ull,
+ 15196822202223025918ull, 3940451698508177097ull}},
+{{4311461860872072736ull, 17793007104296875343ull,
+ 2580484848748309342ull, 2462782311567610686ull}},
+{{777641307662703016ull, 13017886843516318371ull,
+ 12448978097790162486ull, 3078477889459513357ull}},
+{{14807109689860542482ull, 7048986517540622155ull,
+ 1726164566955539396ull, 3848097361824391697ull}},
+{{6948600546949145100ull, 13628988610317664655ull,
+ 12608067900415681882ull, 2405060851140244810ull}},
+{{4074064665259043470ull, 7812863726042305011ull,
+ 6536712838664826545ull, 3006326063925306013ull}},
+{{480894813146416434ull, 14377765675980269168ull,
+ 12782577066758421085ull, 3757907579906632516ull}},
+{{300559258216510271ull, 11291946556701362182ull,
+ 17212482703578788986ull, 2348692237441645322ull}},
+{{9599071109625413647ull, 4891561159021926919ull,
+ 12292231342618710425ull, 2935865296802056653ull}},
+{{7387152868604379155ull, 10726137467204796553ull,
+ 1530231122991224319ull, 3669831621002570817ull}},
+{{13845627104182861847ull, 8795985815578607787ull,
+ 6524474922166418303ull, 4587289526253213521ull}},
+{{6347673930900594703ull, 12415020162377711723ull,
+ 15607011872422481199ull, 2867055953908258450ull}},
+{{3322906395198355474ull, 10907089184544751750ull,
+ 10285392803673325691ull, 3583819942385323063ull}},
+{{13377005030852720151ull, 9022175462253551783ull,
+ 8245054986164269210ull, 4479774927981653829ull}},
+{{15278157171924031950ull, 10250545682335857768ull,
+ 7459002375566362208ull, 2799859329988533643ull}},
+{{650952391195488322ull, 12813182102919822211ull,
+ 4712066951030564856ull, 3499824162485667054ull}},
+{{14648748544276524114ull, 16016477628649777763ull,
+ 15113455725642981878ull, 4374780203107083817ull}},
+{{6849624830959133620ull, 5398612499478723198ull,
+ 2528380800885781818ull, 2734237626941927386ull}},
+{{17785403075553692832ull, 15971637661203179805ull,
+ 12383848037962003080ull, 3417797033677409232ull}},
+{{8396695789159952328ull, 1517803002794423141ull,
+ 15479810047452503851ull, 4272246292096761540ull}},
+{{7553777877438664157ull, 17089527941242372127ull,
+ 451509242803039098ull, 2670153932560475963ull}},
+{{4830536328370942293ull, 12138537889698189351ull,
+ 14399444608785962585ull, 3337692415700594953ull}},
+{{1426484392036289962ull, 1338114306840572977ull,
+ 4164247705700289520ull, 4172115519625743692ull}},
+{{12420767791091150986ull, 836321441775358110ull,
+ 11826026852917456758ull, 2607572199766089807ull}},
+{{6302587702009162925ull, 10268773839073973446ull,
+ 10170847547719433043ull, 3259465249707612259ull}},
+{{17101606664366229464ull, 8224281280415078903ull,
+ 8101873416221903400ull, 4074331562134515324ull}},
+{{17606033192869975271ull, 5140175800259424314ull,
+ 14287042921993465433ull, 2546457226334072077ull}},
+{{12784169454232693281ull, 11036905768751668297ull,
+ 4023745597209668079ull, 3183071532917590097ull}},
+{{2145153762508702889ull, 9184446192512197468ull,
+ 9641368014939473003ull, 3978839416146987621ull}},
+{{10564093138422715114ull, 3434435861106429465ull,
+ 8331698018550864579ull, 2486774635091867263ull}},
+{{17816802441455781796ull, 18128102881665200543ull,
+ 5802936504761192819ull, 3108468293864834079ull}},
+{{17659317033392339341ull, 18048442583654112775ull,
+ 2641984612524103120ull, 3885585367331042599ull}},
+{{17954602173511293944ull, 11280276614783820484ull,
+ 8568769410468646306ull, 2428490854581901624ull}},
+{{3996508643179565814ull, 4876973731624999798ull,
+ 10710961763085807883ull, 3035613568227377030ull}},
+{{14219007840829233075ull, 1484531146103861843ull,
+ 4165330167002484046ull, 3794516960284221288ull}},
+{{6581036891304576720ull, 14762890021597077364ull,
+ 2603331354376552528ull, 2371573100177638305ull}},
+{{8226296114130720900ull, 6868453286795089ull, 7865850211398078565ull,
+ 2964466375222047881ull}},
+{{14894556161090789029ull, 4620271585035881765ull,
+ 14443998782674986110ull, 3705582969027559851ull}},
+{{11614940609895437095ull, 16722727795929589815ull,
+ 6721656229958172366ull, 2315989355642224907ull}},
+{{9906989743941908465ull, 11680037708057211461ull,
+ 3790384269020327554ull, 2894986694552781134ull}},
+{{16995423198354773485ull, 5376675098216738518ull,
+ 13961352373130185251ull, 3618733368190976417ull}},
+{{12020906961088691049ull, 2109157854343535244ull,
+ 3616632411130567852ull, 4523416710238720522ull}},
+{{16736438887535207714ull, 10541595695819485335ull,
+ 6872081275383992811ull, 2827135443899200326ull}},
+{{16308862590991621738ull, 8565308601346968765ull,
+ 17813473631084766822ull, 3533919304874000407ull}},
+{{6551020183457363460ull, 1483263714828935149ull,
+ 17655156020428570624ull, 4417399131092500509ull}},
+{{6400230623874546115ull, 927039821768084468ull,
+ 13340315521981550592ull, 2760874456932812818ull}},
+{{8000288279843182643ull, 1158799777210105585ull,
+ 7452022365622162432ull, 3451093071166016023ull}},
+{{14612046368231366208ull, 1448499721512631981ull,
+ 4703341938600315136ull, 4313866338957520029ull}},
+{{11438371989358297832ull, 905312325945394988ull,
+ 5245431720838890912ull, 2696166461848450018ull}},
+{{14297964986697872290ull, 1131640407431743735ull,
+ 15780161687903389448ull, 3370208077310562522ull}},
+{{13260770214944952459ull, 1414550509289679669ull,
+ 10501830073024461002ull, 4212760096638203153ull}},
+{{10593824393554289239ull, 5495780086733437697ull,
+ 18092858841708757886ull, 2632975060398876970ull}},
+{{17853966510370249452ull, 16093097145271572929ull,
+ 13392701515281171549ull, 3291218825498596213ull}},
+{{8482400082680648103ull, 6281313376307302450ull,
+ 2905818838819300725ull, 4114023531873245267ull}},
+{{9913186070102792969ull, 6231663869405757983ull,
+ 17957037838757920617ull, 2571264707420778291ull}},
+{{7779796569201103307ull, 12401265855184585383ull,
+ 17834611280020012867ull, 3214080884275972864ull}},
+{{5113059693073991229ull, 10889896300553343825ull,
+ 3846520026315464468ull, 4017601105344966081ull}},
+{{14724877354239714279ull, 16029557224700615698ull,
+ 13933290062515635052ull, 2511000690840603800ull}},
+{{9182724655944867040ull, 1590202457166218007ull,
+ 17416612578144543816ull, 3138750863550754750ull}},
+{{6866719801503695896ull, 1987753071457772509ull,
+ 12547393685825903962ull, 3923438579438443438ull}},
+{{6597542885153503887ull, 5854031688088495722ull,
+ 3230435035213802072ull, 2452149112149027149ull}},
+{{17470300643296655667ull, 7317539610110619652ull,
+ 8649729812444640494ull, 3065186390186283936ull}},
+{{3391131730411267967ull, 18370296549493050374ull,
+ 10812162265555800617ull, 3831482987732854920ull}},
+{{15954515386789206192ull, 4563906315792074627ull,
+ 6757601415972375386ull, 2394676867333034325ull}},
+{{15331458215059119836ull, 14928254931594869092ull,
+ 13058687788392857136ull, 2993346084166292906ull}},
+{{717578695114348178ull, 213574590784034750ull, 7099987698636295613ull,
+ 3741682605207866133ull}},
+{{14283544739728631324ull, 2439327128453715670ull,
+ 6743335320861378710ull, 2338551628254916333ull}},
+{{8631058887806013347ull, 12272530947421920396ull,
+ 13040855169504111291ull, 2923189535318645416ull}},
+{{10788823609757516683ull, 10728977665850012591ull,
+ 16301068961880139114ull, 3653986919148306770ull}},
+{{8874343493769507950ull, 4187850045457739931ull,
+ 11152964165495398085ull, 4567483648935383463ull}},
+{{3240621674392248517ull, 4923249287624781409ull,
+ 13888131631075705659ull, 2854677280584614664ull}},
+{{8662463111417698550ull, 1542375591103588857ull,
+ 17360164538844632074ull, 3568346600730768330ull}},
+{{15439764907699511091ull, 11151341525734261879ull,
+ 12476833636701014284ull, 4460433250913460413ull}},
+{{16567382094953276288ull, 16192960490438689482ull,
+ 10103864032151827879ull, 2787770781820912758ull}},
+{{11485855581836819552ull, 15629514594620973949ull,
+ 3406458003335009041ull, 3484713477276140948ull}},
+{{522261422013860728ull, 5701835187994053725ull, 4258072504168761302ull,
+ 4355891846595176185ull}},
+{{2632256397972356907ull, 17398705047778447290ull,
+ 14190510361173945573ull, 2722432404121985115ull}},
+{{12513692534320221942ull, 7913323254440895400ull,
+ 13126451933040044063ull, 3403040505152481394ull}},
+{{15642115667900277427ull, 5279968049623731346ull,
+ 7184692879445279271ull, 4253800631440601743ull}},
+{{14388008310865061296ull, 10217509058655913947ull,
+ 11407962077294381400ull, 2658625394650376089ull}},
+{{13373324370153938716ull, 12771886323319892434ull,
+ 424894541335813038ull, 3323281743312970112ull}},
+{{7493283425837647587ull, 6741485867295089735ull, 531118176669766298ull,
+ 4154102179141212640ull}},
+{{11600831168789611598ull, 8825114685486818988ull,
+ 331948860418603936ull, 2596313861963257900ull}},
+{{14501038960987014497ull, 11031393356858523735ull,
+ 414936075523254920ull, 3245392327454072375ull}},
+{{13514612682806380218ull, 13789241696073154669ull,
+ 14353728149686232362ull, 4056740409317590468ull}},
+{{10752475935967681588ull, 13229962078473109572ull,
+ 18194452130408671034ull, 2535462755823494042ull}},
+{{13440594919959601985ull, 7314080561236611157ull,
+ 13519693126156062985ull, 3169328444779367553ull}},
+{{2965685594667338769ull, 13754286719973151851ull,
+ 3064558352412915019ull, 3961660555974209442ull}},
+{{17994454561162944395ull, 6290586190769525954ull,
+ 6527034988685459791ull, 2476037847483880901ull}},
+{{13269696164598904686ull, 3251546720034519539ull,
+ 12770479754284212643ull, 3095047309354851126ull}},
+{{11975434187321242953ull, 17899491455325313136ull,
+ 6739727656000489995ull, 3868809136693563908ull}},
+{{7484646367075776846ull, 8881339150364626758ull,
+ 13435701821855082055ull, 2418005710433477442ull}},
+{{132435921989945249ull, 6489987919528395544ull, 7571255240464076761ull,
+ 3022507138041846803ull}},
+{{165544902487431561ull, 12724170917837882334ull,
+ 4852383032152708047ull, 3778133922552308504ull}},
+{{13938523619336808438ull, 14870135851289758314ull,
+ 3032739395095442529ull, 2361333701595192815ull}},
+{{8199782487316234739ull, 4752611758830034181ull,
+ 17625982299151466874ull, 2951667126993991018ull}},
+{{14861414127572681328ull, 15164136735392318534ull,
+ 12809105837084557784ull, 3689583908742488773ull}},
+{{4676697811305537926ull, 9477585459620199084ull,
+ 10311534157391542567ull, 2305989942964055483ull}},
+{{5845872264131922408ull, 7235295806097860951ull,
+ 8277731678312040305ull, 2882487428705069354ull}},
+{{2695654311737515105ull, 13655805776049714093ull,
+ 1123792561035274573ull, 3603109285881336693ull}},
+{{7981253908099281786ull, 3234699164779978904ull,
+ 6016426719721481121ull, 4503886607351670866ull}},
+{{4988283692562051116ull, 13550902024055956575ull,
+ 8371952718253313604ull, 2814929129594794291ull}},
+{{1623668597275175991ull, 16938627530069945719ull,
+ 5853254879389254101ull, 3518661411993492864ull}},
+{{15864643801876133701ull, 7338226357305268436ull,
+ 7316568599236567627ull, 4398326764991866080ull}},
+{{692030339317807755ull, 2280548464102098821ull, 4572855374522854767ull,
+ 2748954228119916300ull}},
+{{5476723942574647598ull, 16685743635409787238ull,
+ 5716069218153568458ull, 3436192785149895375ull}},
+{{16069276965073085305ull, 11633807507407458239ull,
+ 2533400504264572669ull, 4295240981437369219ull}},
+{{16960827130811760172ull, 9576972701343355351ull,
+ 17724276379661215582ull, 2684525613398355761ull}},
+{{16589347895087312311ull, 2747843839824418381ull,
+ 8320287419294355766ull, 3355657016747944702ull}},
+{{6901626813576976676ull, 12658176836635298785ull,
+ 1176987237263168899ull, 4194571270934930878ull}},
+{{15842731804554080183ull, 5605517513683367788ull,
+ 14570675078571644274ull, 2621607044334331798ull}},
+{{1356670681983048613ull, 16230268928958985544ull,
+ 8989971811359779534ull, 3277008805417914748ull}},
+{{1695838352478810766ull, 11064464124343956122ull,
+ 11237464764199724418ull, 4096261006772393435ull}},
+{{5671584988726644633ull, 11526976096142360480ull,
+ 4717572468411133809ull, 2560163129232745897ull}},
+{{7089481235908305791ull, 573662064895786888ull,
+ 10508651603941305166ull, 3200203911540932371ull}},
+{{8861851544885382238ull, 9940449617974509418ull,
+ 8524128486499243553ull, 4000254889426165464ull}},
+{{10150343233980751803ull, 17741996057302538146ull,
+ 5327580304062027220ull, 2500159305891353415ull}},
+{{3464557005621163946ull, 3730750997918621067ull,
+ 2047789361650146122ull, 3125199132364191769ull}},
+{{18165754312308618644ull, 13886810784253052141ull,
+ 7171422720490070556ull, 3906498915455239711ull}},
+{{13659439454406580605ull, 17902628777012933396ull,
+ 11399668227947375953ull, 2441561822159524819ull}},
+{{17074299318008225756ull, 8543227915984003033ull,
+ 9637899266506832038ull, 3051952277699406024ull}},
+{{7507816092228118483ull, 1455662858125227984ull,
+ 12047374083133540048ull, 3814940347124257530ull}},
+{{4692385057642574052ull, 909789286328267490ull,
+ 12141294820385850434ull, 2384337716952660956ull}},
+{{15088853358907993373ull, 10360608644765110170ull,
+ 15176618525482313042ull, 2980422146190826195ull}},
+{{9637694661780215908ull, 3727388769101611905ull,
+ 14359087138425503399ull, 3725527682738532744ull}},
+{{17552774209681104702ull, 9247147008329589296ull,
+ 8974429461515939624ull, 2328454801711582965ull}},
+{{3494223688391829262ull, 11558933760411986621ull,
+ 15829722845322312434ull, 2910568502139478706ull}},
+{{8979465628917174481ull, 5225295163660207468ull,
+ 10563781519798114735ull, 3638210627674348383ull}},
+{{11224332036146468102ull, 1919932936147871431ull,
+ 8593040881320255515ull, 4547763284592935479ull}},
+{{13932736550232624420ull, 17340859149588277308ull,
+ 12288179578466241552ull, 2842352052870584674ull}},
+{{17415920687790780524ull, 3229329863275795019ull,
+ 6136852436228026133ull, 3552940066088230843ull}},
+{{17158214841311087751ull, 8648348347522131678ull,
+ 3059379526857644762ull, 4441175082610288554ull}},
+{{6112198257392041941ull, 10016903735628720203ull,
+ 6523798222713415880ull, 2775734426631430346ull}},
+{{3028561803312664522ull, 12521129669535900254ull,
+ 17378119815246545658ull, 3469668033289287932ull}},
+{{13009074290995606460ull, 6428040050065099509ull,
+ 3275905695348630457ull, 4337085041611609916ull}},
+{{10436514441085947990ull, 15546740077359156953ull,
+ 11270813096447669843ull, 2710678151007256197ull}},
+{{17657329069784822891ull, 14821739078271558287ull,
+ 253458315277423592ull, 3388347688759070247ull}},
+{{17459975318803640710ull, 80429774129896243ull,
+ 14151880949378943203ull, 4235434610948837808ull}},
+{{8606641565038581492ull, 16191169673327042816ull,
+ 8844925593361839501ull, 2647146631843023630ull}},
+{{10758301956298226865ull, 6403904036376639808ull,
+ 1832784954847523569ull, 3308933289803779538ull}},
+{{13447877445372783581ull, 12616566063898187664ull,
+ 11514353230414180269ull, 4136166612254724422ull}},
+{{8404923403357989738ull, 10191196799150061242ull,
+ 2584784750581474764ull, 2585104132659202764ull}},
+{{1282782217342711365ull, 12738995998937576553ull,
+ 3230980938226843455ull, 3231380165824003455ull}},
+{{6215163790105777110ull, 11312058980244582787ull,
+ 17873784228065718031ull, 4039225207280004318ull}},
+{{1578634359602416742ull, 13987565890293946098ull,
+ 6559429124113685865ull, 2524515754550002699ull}},
+{{11196664986357796735ull, 3649399307585268910ull,
+ 3587600386714719428ull, 3155644693187503374ull}},
+{{4772459196092470111ull, 4561749134481586138ull,
+ 13707872520248175093ull, 3944555866484379217ull}},
+{{7594473015985181723ull, 5156936218264685288ull,
+ 1649891297514027577ull, 2465347416552737011ull}},
+{{9493091269981477154ull, 11057856291258244514ull,
+ 15897422177174698183ull, 3081684270690921263ull}},
+{{2642992050622070634ull, 9210634345645417739ull,
+ 15260091703040984825ull, 3852105338363651579ull}},
+{{17792771096134651811ull, 17285861512096855846ull,
+ 7231714305186921563ull, 2407565836477282237ull}},
+{{13017591833313538955ull, 16995640871693681904ull,
+ 13651328899911039858ull, 3009457295596602796ull}},
+{{16271989791641923694ull, 12021179052762326572ull,
+ 17064161124888799823ull, 3761821619495753495ull}},
+{{946621582921426501ull, 14430765935617535964ull,
+ 17582629730696581745ull, 2351138512184845934ull}},
+{{1183276978651783126ull, 4203399364239756243ull,
+ 12754915126515951374ull, 2938923140231057418ull}},
+{{15314154278596892619ull, 14477621242154471111ull,
+ 6720271871290163409ull, 3673653925288821773ull}},
+{{14531006829818727870ull, 4261968497410925177ull,
+ 13012025857540092166ull, 4592067406611027216ull}},
+{{2164350240995623063ull, 16498788366163991948ull,
+ 8132516160962557603ull, 2870042129131892010ull}},
+{{2705437801244528829ull, 16011799439277602031ull,
+ 942273164348421196ull, 3587552661414865013ull}},
+{{17216855306837824748ull, 1568005225387450922ull,
+ 5789527473862914400ull, 4484440826768581266ull}},
+{{15372220585201028371ull, 980003265867156826ull,
+ 8230140689591709404ull, 2802775516730363291ull}},
+{{9991903694646509656ull, 1225004082333946033ull,
+ 5675989843562248851ull, 3503469395912954114ull}},
+{{17101565636735524974ull, 15366313158199596253ull,
+ 16318359341307586871ull, 4379336744891192642ull}},
+{{12994321532173397061ull, 16521474751515829514ull,
+ 14810660606744629698ull, 2737085465556995401ull}},
+{{7019529878361970518ull, 11428471402540011085ull,
+ 4678267703148623411ull, 3421356831946244252ull}},
+{{13386098366379851052ull, 9673903234747625952ull,
+ 5847834628935779264ull, 4276696039932805315ull}},
+{{8366311478987406907ull, 6046189521717266220ull,
+ 1349053633871168088ull, 2672935024958003322ull}},
+{{10457889348734258634ull, 7557736902146582775ull,
+ 10909689079193735918ull, 3341168781197504152ull}},
+{{8460675667490435388ull, 223799090828452661ull,
+ 13637111348992169898ull, 4176460976496880190ull}},
+{{7593765301395216070ull, 4751560450195170817ull,
+ 3911508574692718282ull, 2610288110310550119ull}},
+{{14103892645171407991ull, 15162822599598739329ull,
+ 277699699938509948ull, 3262860137888187649ull}},
+{{3794807751182096277ull, 506784175788872546ull, 4958810643350525340ull,
+ 4078575172360234561ull}},
+{{6983440862916198077ull, 9540112146722821149ull,
+ 14628471698162548097ull, 2549109482725146600ull}},
+{{13340987097072635501ull, 16536826201830914340ull,
+ 18285589622703185121ull, 3186386853406433250ull}},
+{{16676233871340794376ull, 6835974697006479213ull,
+ 13633614991524205594ull, 3982983566758041563ull}},
+{{12728489178801690437ull, 8884170204056437412ull,
+ 6215166360488934544ull, 2489364729223775977ull}},
+{{15910611473502113046ull, 11105212755070546765ull,
+ 12380643969038556084ull, 3111705911529719971ull}},
+{{6053206286595477595ull, 13881515943838183457ull,
+ 10864118942870807201ull, 3889632389412149964ull}},
+{{15312468975190643257ull, 1758418437257782804ull,
+ 16013446376149030309ull, 2431020243382593727ull}},
+{{693842145278752456ull, 6809709064999616410ull,
+ 15405121951758899982ull, 3038775304228242159ull}},
+{{10090674718453216377ull, 17735508368104296320ull,
+ 14644716421271237073ull, 3798469130285302699ull}},
+{{6306671699033260236ull, 4167163702424103344ull,
+ 6847104754080829219ull, 2374043206428314187ull}},
+{{7883339623791575295ull, 597268609602741276ull, 3947194924173648620ull,
+ 2967554008035392734ull}},
+{{9854174529739469118ull, 746585762003426595ull,
+ 14157365692071836583ull, 3709442510044240917ull}},
+{{3853016071873474247ull, 7384145128893223478ull,
+ 11154196566758591816ull, 2318401568777650573ull}},
+{{14039642126696618617ull, 9230181411116529347ull,
+ 107687653166076058ull, 2898001960972063217ull}},
+{{12937866639943385367ull, 2314354727040885876ull,
+ 4746295584884982977ull, 3622502451215079021ull}},
+{{16172333299929231709ull, 7504629427228495249ull,
+ 10544555499533616625ull, 4528128064018848776ull}},
+{{3190179284814687962ull, 16219608438086279291ull,
+ 6590347187208510390ull, 2830080040011780485ull}},
+{{17822782161300523664ull, 11051138510753073305ull,
+ 12849620002438025892ull, 3537600050014725606ull}},
+{{8443419646343490868ull, 13813923138441341632ull,
+ 6838652966192756557ull, 4422000062518407008ull}},
+{{5277137278964681793ull, 10939544970739532472ull,
+ 4274158103870472848ull, 2763750039074004380ull}},
+{{6596421598705852241ull, 13674431213424415590ull,
+ 5342697629838091060ull, 3454687548842505475ull}},
+{{17468899035237091109ull, 17093039016780519487ull,
+ 2066686018870225921ull, 4318359436053131844ull}},
+{{17835590924664263799ull, 3765620357846742823ull,
+ 10515050798648667009ull, 2698974647533207402ull}},
+{{17682802637402941845ull, 9318711465735816433ull,
+ 3920441461456057953ull, 3373718309416509253ull}},
+{{8268445241471513594ull, 16260075350597158446ull,
+ 9512237845247460345ull, 4217147886770636566ull}},
+{{556092257492308093ull, 3245018066482142173ull, 1333462634852274812ull,
+ 2635717429231647854ull}},
+{{5306801340292773020ull, 4056272583102677716ull,
+ 10890200330420119323ull, 3294646786539559817ull}},
+{{6633501675365966275ull, 458654710450959241ull,
+ 18224436431452537058ull, 4118308483174449771ull}},
+{{15675153593172198682ull, 4898345212459237429ull,
+ 9084429760444141709ull, 2573942801984031107ull}},
+{{5758883936183084640ull, 10734617534001434691ull,
+ 6743851182127789232ull, 3217428502480038884ull}},
+{{2586918901801467896ull, 13418271917501793364ull,
+ 8429813977659736540ull, 4021785628100048605ull}},
+{{10840196350480693243ull, 17609791985293396660ull,
+ 7574476745251029289ull, 2513616017562530378ull}},
+{{13550245438100866554ull, 8177181926334582113ull,
+ 244723894709010804ull, 3142020021953162973ull}},
+{{3102748742343919480ull, 10221477407918227642ull,
+ 4917590886813651409ull, 3927525027441453716ull}},
+{{6550903982392337579ull, 17917638426017362036ull,
+ 12296866341113307938ull, 2454703142150908572ull}},
+{{8188629977990421974ull, 13173675995666926737ull,
+ 15371082926391634923ull, 3068378927688635715ull}},
+{{14847473490915415371ull, 11855408976156270517ull,
+ 14602167639562155750ull, 3835473659610794644ull}},
+{{11585513941035828559ull, 2797944591670281169ull,
+ 18349726811581123152ull, 2397171037256746652ull}},
+{{646834371012621987ull, 3497430739587851462ull, 4490414440766852324ull,
+ 2996463796570933316ull}},
+{{10031915000620553292ull, 4371788424484814327ull,
+ 5613018050958565405ull, 3745579745713666645ull}},
+{{13187475903028927663ull, 5038210774516702906ull,
+ 5813979291062797330ull, 2340987341071041653ull}},
+{{7260972841931383771ull, 15521135505000654441ull,
+ 11879160132255884566ull, 2926234176338802066ull}},
+{{13687902070841617618ull, 10178047344396042243ull,
+ 5625578128465079900ull, 3657792720423502583ull}},
+{{12498191570124634118ull, 12722559180495052804ull,
+ 2420286642153961971ull, 4572240900529378229ull}},
+{{17034741768182672132ull, 5645756478595714050ull,
+ 3818522160559920184ull, 2857650562830861393ull}},
+{{12070055173373564357ull, 7057195598244642563ull,
+ 9384838719127288134ull, 3572063203538576741ull}},
+{{10475882948289567542ull, 18044866534660579012ull,
+ 16342734417336498071ull, 4465079004423220926ull}},
+{{15770798879535755522ull, 18195570611803943738ull,
+ 5602522992407923390ull, 2790674377764513079ull}},
+{{10490126562564918594ull, 13521091227900153865ull,
+ 2391467722082516334ull, 3488342972205641349ull}},
+{{17724344221633536147ull, 7677991998020416523ull,
+ 7601020671030533322ull, 4360428715257051686ull}},
+{{8771872129307266140ull, 9410431017190148231ull, 138951900966695422ull,
+ 2725267947035657304ull}},
+{{6353154143206694771ull, 2539666734632909481ull, 173689876208369278ull,
+ 3406584933794571630ull}},
+{{12553128697435756367ull, 12397955455145912659ull,
+ 9440484382115237405ull, 4258231167243214537ull}},
+{{5539862426683653778ull, 10054565168679889364ull,
+ 17429517784890493138ull, 2661394479527009085ull}},
+{{6924828033354567222ull, 3344834423995085897ull,
+ 7951839175830952711ull, 3326743099408761357ull}},
+{{13267721060120596932ull, 18016101085276021083ull,
+ 14551484988216078792ull, 4158428874260951696ull}},
+{{5986482653361679130ull, 11260063178297513177ull,
+ 9094678117635049245ull, 2599018046413094810ull}},
+{{12094789335129486817ull, 240020917589727759ull,
+ 2144975610189035749ull, 3248772558016368513ull}},
+{{10506800650484470617ull, 4911712165414547603ull,
+ 7292905531163682590ull, 4060965697520460641ull}},
+{{4260907397339100184ull, 16904878158666255964ull,
+ 16087281003045771378ull, 2538103560950287900ull}},
+{{5326134246673875230ull, 11907725661478044147ull,
+ 1662357180097662607ull, 3172629451187859876ull}},
+{{2045981789914956133ull, 10272971058420167280ull,
+ 2077946475122078259ull, 3965786813984824845ull}},
+{{1278738618696847583ull, 4114763902298910598ull,
+ 3604559556164992864ull, 2478616758740515528ull}},
+{{10821795310225835287ull, 5143454877873638247ull,
+ 4505699445206241080ull, 3098270948425644410ull}},
+{{8915558119354906205ull, 6429318597342047809ull,
+ 14855496343362577158ull, 3872838685532055512ull}},
+{{17101438870665286138ull, 17853382178620943592ull,
+ 9284685214601610723ull, 2420524178457534695ull}},
+{{2930054514622056056ull, 17705041704848791587ull,
+ 6994170499824625500ull, 3025655223071918369ull}},
+{{17497626198559733782ull, 3684558057351437867ull,
+ 13354399143208169780ull, 3782069028839897961ull}},
+{{8630173364886139662ull, 11526220822699424475ull,
+ 1428970436864024256ull, 2363793143024936226ull}},
+{{6176030687680286674ull, 14407776028374280594ull,
+ 11009585082934806128ull, 2954741428781170282ull}},
+{{16943410396455134150ull, 18009720035467850742ull,
+ 4538609316813731852ull, 3693426785976462853ull}},
+{{5977945479357070940ull, 2032702985312630906ull,
+ 5142473832222276360ull, 2308391741235289283ull}},
+{{16695803886051114483ull, 2540878731640788632ull,
+ 1816406271850457546ull, 2885489676544111604ull}},
+{{2423010783854341487ull, 12399470451405761599ull,
+ 2270507839813071932ull, 3606862095680139505ull}},
+{{16863821535100090571ull, 15499338064257201998ull,
+ 7449820818193727819ull, 4508577619600174381ull}},
+{{5928202441010168703ull, 7381243280947057297ull,
+ 6961981020584773839ull, 2817861012250108988ull}},
+{{12021939069690098783ull, 4614868082756433717ull,
+ 8702476275730967299ull, 3522326265312636235ull}},
+{{1192365781830459766ull, 1156899085018154243ull,
+ 6266409326236321220ull, 4402907831640795294ull}},
+{{16886129678139895018ull, 9946433964991122209ull,
+ 17751563884179864474ull, 2751817394775497058ull}},
+{{7272604042392705060ull, 3209670419384126954ull,
+ 12966082818370054785ull, 3439771743469371323ull}},
+{{18314127089845657133ull, 8623774042657546596ull,
+ 11595917504535180577ull, 4299714679336714154ull}},
+{{2222957394298759901ull, 16919073822729436383ull,
+ 11859134458761875764ull, 2687321674585446346ull}},
+{{16613754798155613588ull, 2702098204702243862ull,
+ 5600546036597568898ull, 3359152093231807933ull}},
+{{11543821460839741176ull, 12600994792732580636ull,
+ 11612368564174349026ull, 4198940116539759916ull}},
+{{16438260449879614043ull, 12487307763885250801ull,
+ 16481102389463743949ull, 2624337572837349947ull}},
+{{6712767507067353842ull, 1774076649574399790ull,
+ 15989691968402292033ull, 3280421966046687434ull}},
+{{17614331420688968111ull, 6829281830395387641ull,
+ 10763742923648089233ull, 4100527457558359293ull}},
+{{4091428110289523213ull, 15797516190065587036ull,
+ 9033182336493749722ull, 2562829660973974558ull}},
+{{5114285137861904017ull, 10523523200727207987ull,
+ 2068105883762411345ull, 3203537076217468198ull}},
+{{1781170403899992117ull, 17766090019336397888ull,
+ 11808504391557789989ull, 4004421345271835247ull}},
+{{1113231502437495073ull, 13409649271298942632ull,
+ 14297844272364700599ull, 2502763340794897029ull}},
+{{1391539378046868841ull, 12150375570696290386ull,
+ 4037247285173712037ull, 3128454175993621287ull}},
+{{10962796259413361859ull, 1352911408088199270ull,
+ 434873088039752143ull, 3910567719992026609ull}},
+{{2240061643705963258ull, 7763098657696206400ull,
+ 11801010726093314849ull, 2444104824995016630ull}},
+{{2800077054632454073ull, 14315559340547645904ull,
+ 5527891370761867753ull, 3055131031243770788ull}},
+{{3500096318290567591ull, 4059391120402393668ull,
+ 6909864213452334692ull, 3818913789054713485ull}},
+{{11410932235786380552ull, 11760491487106271850ull,
+ 6624508142621403134ull, 2386821118159195928ull}},
+{{5040293257878199882ull, 5477242322028064005ull,
+ 8280635178276753918ull, 2983526397698994910ull}},
+{{10912052590775137757ull, 16069924939389855814ull,
+ 1127421935991166589ull, 3729407997123743638ull}},
+{{2208346850807073194ull, 12349546096332353836ull,
+ 14539696765276642830ull, 2330879998202339773ull}},
+{{2760433563508841493ull, 6213560583560666487ull,
+ 4339562901313639826ull, 2913599997752924717ull}},
+{{17285600009668215578ull, 16990322766305608916ull,
+ 10036139645069437686ull, 3641999997191155896ull}},
+{{3160255938375717856ull, 12014531421027235338ull,
+ 12545174556336797108ull, 4552499996488944870ull}},
+{{6586845979912211564ull, 16732454174996797894ull,
+ 3229048079283110288ull, 2845312497805590544ull}},
+{{17456929511745040263ull, 2468823645036445751ull,
+ 4036310099103887861ull, 3556640622256988180ull}},
+{{17209475871253912425ull, 7697715574722945093ull,
+ 5045387623879859826ull, 4445800777821235225ull}},
+{{13061765428747389218ull, 9422758252629228587ull,
+ 14682582310993382151ull, 2778625486138272015ull}},
+{{11715520767506848618ull, 7166761797359147830ull,
+ 13741541870314339785ull, 3473281857672840019ull}},
+{{5421028922528784964ull, 13570138265126322692ull,
+ 12565241319465536827ull, 4341602322091050024ull}},
+{{12611515113435266411ull, 6175493406490257730ull,
+ 7853275824665960517ull, 2713501451306906265ull}},
+{{6541021854939307205ull, 12331052776540210067ull,
+ 14428280799259838550ull, 3391876814133632831ull}},
+{{3564591300246746103ull, 6190443933820486776ull,
+ 13423664980647410284ull, 4239846017667041039ull}},
+{{2227869562654216314ull, 13092399495492580043ull,
+ 15307319640545713283ull, 2649903761041900649ull}},
+{{16619895008599934105ull, 11753813350938337149ull,
+ 5299091495399977892ull, 3312379701302375812ull}},
+{{6939810705467753919ull, 14692266688672921437ull,
+ 6623864369249972365ull, 4140474626627969765ull}},
+{{6643224700131040152ull, 11488509689634269850ull,
+ 6445758239994926680ull, 2587796641642481103ull}},
+{{17527402912018575997ull, 14360637112042837312ull,
+ 3445511781566270446ull, 3234745802053101379ull}},
+{{3462509566313668380ull, 8727424353198770833ull,
+ 18141947782240001770ull, 4043432252566376723ull}},
+{{13693283525014512498ull, 10066326239176619674ull,
+ 9032874354686307154ull, 2527145157853985452ull}},
+{{7893232369413364814ull, 3359535762115998785ull,
+ 11291092943357883943ull, 3158931447317481815ull}},
+{{14478226480194093922ull, 18034477757927162193ull,
+ 9502180160769967024ull, 3948664309146852269ull}},
+{{2131362522480226845ull, 11271548598704476371ull,
+ 8244705609694923342ull, 2467915193216782668ull}},
+{{16499261208382447269ull, 4866063711525819655ull,
+ 10305882012118654178ull, 3084893991520978335ull}},
+{{16012390492050671182ull, 15305951676262050377ull,
+ 8270666496720929818ull, 3856117489401222919ull}},
+{{3090215029890587633ull, 14177905816091169390ull,
+ 12086695588091662992ull, 2410073430875764324ull}},
+{{13086140824218010349ull, 17722382270113961737ull,
+ 15108369485114578740ull, 3012591788594705405ull}},
+{{2522617974990349224ull, 3706233763932900556ull,
+ 5050403801111059714ull, 3765739735743381757ull}},
+{{10800008271223744073ull, 6928082120885450751ull,
+ 5462345384908106273ull, 2353587334839613598ull}},
+{{8888324320602292187ull, 13271788669534201343ull,
+ 16051303767989908649ull, 2941984168549516997ull}},
+{{6498719382325477330ull, 2754677781635587967ull,
+ 6229071654705222100ull, 3677480210686896247ull}},
+{{3511713209479458758ull, 3443347227044484959ull,
+ 3174653549954139721ull, 4596850263358620309ull}},
+{{9112349783565743580ull, 13681307062971272859ull,
+ 4290001477935031277ull, 2873031414599137693ull}},
+{{6778751211029791571ull, 3266575773431927362ull,
+ 9974187865846177001ull, 3591289268248922116ull}},
+{{17696811050642015271ull, 8694905735217297106ull,
+ 12467734832307721251ull, 4489111585311152645ull}},
+{{15672192925078647449ull, 3128473075297116739ull,
+ 10098177279406019734ull, 2805694740819470403ull}},
+{{14978555137920921407ull, 13133963380976171732ull,
+ 8011035580830136763ull, 3507118426024338004ull}},
+{{276449848691600143ull, 11805768207792826762ull,
+ 10013794476037670954ull, 4383898032530422505ull}},
+{{4784467173859637993ull, 11990291148297904630ull,
+ 17787836593592014106ull, 2739936270331514065ull}},
+{{15203956004179323299ull, 5764491898517604979ull,
+ 8399737686707853921ull, 3424920337914392582ull}},
+{{14393258986796766220ull, 11817300891574394128ull,
+ 1276300071530041593ull, 4281150422392990728ull}},
+{{8995786866747978888ull, 468284029592914474ull, 797687544706275996ull,
+ 2675719013995619205ull}},
+{{2021361546580197802ull, 585355036991143093ull, 5608795449310232899ull,
+ 3344648767494524006ull}},
+{{7138387951652635156ull, 14566751851521092578ull,
+ 16234366348492566931ull, 4180810959368155007ull}},
+{{9073178488210284877ull, 6798376897986988909ull,
+ 17064007995448936188ull, 2613006849605096879ull}},
+{{15953159128690244000ull, 8497971122483736136ull,
+ 16718323975883782331ull, 3266258562006371099ull}},
+{{1494704837153253384ull, 6010777884677282267ull,
+ 16286218951427340010ull, 4082823202507963874ull}},
+{{17075091587716641029ull, 8368422196350689320ull,
+ 14790572863069475410ull, 2551764501567477421ull}},
+{{2897120410936249670ull, 1237155708583585843ull,
+ 4653158023554680551ull, 3189705626959346777ull}},
+{{17456458568952475799ull, 15381502691011646015ull,
+ 10428133547870738592ull, 3987132033699183471ull}},
+{{17827815633236379231ull, 9613439181882278759ull,
+ 13435112495060293476ull, 2491957521061989669ull}},
+{{17673083523118086134ull, 12016798977352848449ull,
+ 2958832563543203133ull, 3114946901327487087ull}},
+{{8256296348615443956ull, 1185940666408896850ull,
+ 17533598759711167629ull, 3893683626659358858ull}},
+{{9771871236312040377ull, 3047055925719254483ull,
+ 15570185243246867672ull, 2433552266662099286ull}},
+{{7603153026962662567ull, 3808819907149068104ull,
+ 10239359517203808782ull, 3041940333327624108ull}},
+{{9503941283703328208ull, 13984396920791110938ull,
+ 12799199396504760977ull, 3802425416659530135ull}},
+{{10551649320741968034ull, 1822719047853362480ull,
+ 14917028650456557467ull, 2376515885412206334ull}},
+{{13189561650927460043ull, 16113456865098866812ull,
+ 9422913776215921025ull, 2970644856765257918ull}},
+{{16486952063659325053ull, 6306763026091419803ull,
+ 2555270183415125474ull, 3713306070956572398ull}},
+{{7998502030573384206ull, 8553412909734525281ull,
+ 15432101919916617133ull, 2320816294347857748ull}},
+{{14609813556644118162ull, 15303452155595544505ull,
+ 843383326186219800ull, 2901020367934822186ull}},
+{{4427208890522983990ull, 682571120784879016ull,
+ 10277601194587550559ull, 3626275459918527732ull}},
+{{5534011113153729988ull, 14688271956263262482ull,
+ 12847001493234438198ull, 4532844324898159665ull}},
+{{8070442964148469147ull, 4568483954237151147ull,
+ 1111846905630442018ull, 2833027703061349791ull}},
+{{5476367686758198529ull, 14933976979651214742ull,
+ 15224866687320216234ull, 3541284628826687238ull}},
+{{16068831645302523969ull, 9444099187709242619ull,
+ 9807711322295494485ull, 4426605786033359048ull}},
+{{7737176769100383529ull, 8208405001531970589ull,
+ 6129819576434684053ull, 2766628616270849405ull}},
+{{14283156979802867315ull, 14872192270342351140ull,
+ 12273960488970742970ull, 3458285770338561756ull}},
+{{17853946224753584144ull, 9366868301073163117ull,
+ 15342450611213428713ull, 4322857212923202195ull}},
+{{13464559399684684042ull, 17383507734239196708ull,
+ 7283188622794698993ull, 2701785758077001372ull}},
+{{16830699249605855052ull, 7894326612516832173ull,
+ 9103985778493373742ull, 3377232197596251715ull}},
+{{7203316006725155103ull, 644536228791264409ull, 6768296204689329274ull,
+ 4221540246995314644ull}},
+{{16031287550271691700ull, 5014521161421928159ull,
+ 13453557164785606604ull, 2638462654372071652ull}},
+{{15427423419412226721ull, 6268151451777410199ull,
+ 16816946455982008255ull, 3298078317965089565ull}},
+{{14672593255837895497ull, 3223503296294374845ull,
+ 7186125014695346607ull, 4122597897456361957ull}},
+{{11476213794112378638ull, 8932218587825066134ull,
+ 6797171143398285581ull, 2576623685910226223ull}},
+{{5121895205785697489ull, 15776959253208720572ull,
+ 3884777910820469072ull, 3220779607387782779ull}},
+{{6402369007232121861ull, 1274454992801349099ull, 244286370098198437ull,
+ 4025974509234728474ull}},
+{{1695637620306382211ull, 3102377379714537139ull,
+ 4764364999738761927ull, 2516234068271705296ull}},
+{{15954605080665141476ull, 17713029779925335135ull,
+ 5955456249673452408ull, 3145292585339631620ull}},
+{{15331570332404038941ull, 3694543151197117303ull,
+ 7444320312091815511ull, 3931615731674539525ull}},
+{{16499760485393606194ull, 9226618497139280170ull,
+ 6958543204271078646ull, 2457259832296587203ull}},
+{{11401328569887231935ull, 2309901084569324405ull,
+ 4086492986911460404ull, 3071574790370734004ull}},
+{{416602657076876206ull, 2887376355711655507ull, 5108116233639325505ull,
+ 3839468487963417505ull}},
+{{16401277725168905293ull, 13333825268388254451ull,
+ 14721787692093048200ull, 2399667804977135940ull}},
+{{15889911138033743712ull, 16667281585485318064ull,
+ 18402234615116310250ull, 2999584756221419925ull}},
+{{1415644848832628024ull, 11610729945001871773ull,
+ 9167735213613224101ull, 3749480945276774907ull}},
+{{3190621039734086467ull, 9562549224839863810ull,
+ 3423991499294571111ull, 2343425590797984317ull}},
+{{13211648336522383892ull, 7341500512622441858ull,
+ 8891675392545601793ull, 2929281988497480396ull}},
+{{7291188383798204057ull, 13788561659205440227ull,
+ 11114594240682002241ull, 3661602485621850495ull}},
+{{4502299461320367167ull, 3400644018724636572ull,
+ 9281556782425114898ull, 4577003107027313119ull}},
+{{12037309200180005287ull, 6737088530130285761ull,
+ 12718502016656778667ull, 2860626941892070699ull}},
+{{1211578444942842897ull, 3809674644235469298ull,
+ 11286441502393585430ull, 3575783677365088374ull}},
+{{10737845093033329429ull, 13985465342149112430ull,
+ 4884679841137205979ull, 4469729596706360468ull}},
+{{2099467164718442990ull, 6435072829629501317ull,
+ 12276296937565529545ull, 2793580997941475292ull}},
+{{7236019974325441641ull, 12655527055464264550ull,
+ 15345371171956911931ull, 3491976247426844115ull}},
+{{18268397004761577859ull, 11207722800902942783ull,
+ 14570027946518752010ull, 4364970309283555144ull}},
+{{18335277155617068018ull, 11616512768991727143ull,
+ 9106267466574220006ull, 2728106443302221965ull}},
+{{18307410426093947118ull, 5297268924384883121ull,
+ 15994520351645162912ull, 3410133054127777456ull}},
+{{9049204977335270186ull, 6621586155481103902ull,
+ 1546406365846902024ull, 4262666317659721821ull}},
+{{1044067092407155962ull, 4138491347175689939ull,
+ 3272346987868007717ull, 2664166448537326138ull}},
+{{15140141920791108665ull, 9784800202397000327ull,
+ 13313805771689785454ull, 3330208060671657672ull}},
+{{14313491382561497927ull, 3007628216141474601ull,
+ 16642257214612231818ull, 4162760075839572090ull}},
+{{2028403086459854348ull, 6491453653515809530ull,
+ 15013096777560032790ull, 2601725047399732556ull}},
+{{11758875894929593743ull, 17337689103749537720ull,
+ 319626898240489371ull, 3252156309249665696ull}},
+{{14698594868661992179ull, 17060425361259534246ull,
+ 399533622800611714ull, 4065195386562082120ull}},
+{{4574935774486357208ull, 15274451869214596808ull,
+ 249708514250382321ull, 2540747116601301325ull}},
+{{5718669718107946510ull, 5258006781236082298ull,
+ 4923821661240365806ull, 3175933895751626656ull}},
+{{16371709184489708946ull, 15795880513399878680ull,
+ 6154777076550457257ull, 3969917369689533320ull}},
+{{10232318240306068091ull, 2954896293233842319ull,
+ 3846735672844035786ull, 2481198356055958325ull}},
+{{8178711781955197210ull, 12916992403397078707ull,
+ 9420105609482432636ull, 3101497945069947906ull}},
+{{5611703709016608608ull, 16146240504246348384ull,
+ 2551759974998264987ull, 3876872431337434883ull}},
+{{3507314818135380380ull, 7785557305940273788ull,
+ 17735751048869773281ull, 2423045269585896801ull}},
+{{4384143522669225475ull, 14343632650852730139ull,
+ 8334630755805052889ull, 3028806586982371002ull}},
+{{868493384909143940ull, 4094482758283748962ull, 1194916407901540304ull,
+ 3786008233727963753ull}},
+{{5154494383995602867ull, 2559051723927343101ull,
+ 12276037801006932450ull, 2366255146079977345ull}},
+{{11054803998421891487ull, 12422186691763954684ull,
+ 1509989195976501850ull, 2957818932599971682ull}},
+{{13818504998027364359ull, 6304361327850167547ull,
+ 11110858531825403121ull, 3697273665749964602ull}},
+{{6330722614553408772ull, 15469440875974824477ull,
+ 11555972600818264854ull, 2310796041093727876ull}},
+{{12525089286619148869ull, 10113429058113754788ull,
+ 14444965751022831068ull, 2888495051367159845ull}},
+{{15656361608273936087ull, 12641786322642193485ull,
+ 4221149133496375123ull, 3610618814208949807ull}},
+{{5735393955060256396ull, 11190546884875353953ull,
+ 664750398443081000ull, 4513273517761187259ull}},
+{{15113836267981130008ull, 6994091803047096220ull,
+ 16556370063522783289ull, 2820795948600742036ull}},
+{{445551261266860894ull, 13354300772236258180ull,
+ 2248718505693927495ull, 3525994935750927546ull}},
+{{556939076583576117ull, 12081189946867934821ull,
+ 12034270168972185177ull, 4407493669688659432ull}},
+{{2653929932078429025ull, 633214689151377407ull, 7521418855607615736ull,
+ 2754683543555412145ull}},
+{{17152470470380199993ull, 791518361439221758ull,
+ 14013459587936907574ull, 3443354429444265181ull}},
+{{12217216051120474184ull, 10212769988653803006ull,
+ 3681766429638970755ull, 4304193036805331477ull}},
+{{3024074013522908461ull, 4077138233694932927ull,
+ 4606947027738050674ull, 2690120648003332173ull}},
+{{17615150572185799288ull, 14319794828973441966ull,
+ 10370369803099951246ull, 3362650810004165216ull}},
+{{12795566178377473302ull, 8676371499362026650ull,
+ 12962962253874939058ull, 4203313512505206520ull}},
+{{12608914879913308718ull, 10034418205528654560ull,
+ 8101851408671836911ull, 2627070945315754075ull}},
+{{15761143599891635897ull, 7931336738483430296ull,
+ 5515628242412408235ull, 3283838681644692594ull}},
+{{1254685426154993256ull, 5302484904676899967ull,
+ 16117907339870286102ull, 4104798352055865742ull}},
+{{7701707418987952641ull, 17149111120705226191ull,
+ 5462006068991540909ull, 2565498970034916089ull}},
+{{5015448255307552897ull, 7601330845599369027ull,
+ 11439193604666814041ull, 3206873712543645111ull}},
+{{1657624300707053217ull, 14113349575426599188ull,
+ 9687305987406129647ull, 4008592140679556389ull}},
+{{10259387224796684069ull, 15738372512282706348ull,
+ 8360409251342524981ull, 2505370087924722743ull}},
+{{12824234030995855086ull, 5837907585071219223ull,
+ 5838825545750768323ull, 3131712609905903429ull}},
+{{11418606520317430953ull, 2685698462911636125ull,
+ 11910217950615848308ull, 3914640762382379286ull}},
+{{9442472084412088298ull, 10901933576174548386ull,
+ 2832200200707517288ull, 2446650476488987054ull}},
+{{2579718068660334564ull, 13627416970218185483ull,
+ 12763622287739172418ull, 3058313095611233817ull}},
+{{17059705641107581917ull, 7810899175917956045ull,
+ 2119469804391801811ull, 3822891369514042272ull}},
+{{12968159034905932651ull, 2575968975735028576ull,
+ 1324668627744876132ull, 2389307105946276420ull}},
+{{16210198793632415813ull, 3219961219668785720ull,
+ 1655835784681095165ull, 2986633882432845525ull}},
+{{1816004418330968150ull, 8636637543013370055ull,
+ 6681480749278756860ull, 3733292353041056906ull}},
+{{8052531789097936950ull, 14621270501238132092ull,
+ 8787611486726610941ull, 2333307720650660566ull}},
+{{10065664736372421187ull, 4441530071265501403ull,
+ 1761142321553487869ull, 2916634650813325708ull}},
+{{7970394902038138580ull, 10163598607509264658ull,
+ 2201427901941859836ull, 3645793313516657135ull}},
+{{739621590692897417ull, 12704498259386580823ull,
+ 16586842932709488507ull, 4557241641895821418ull}},
+{{7379792521824142742ull, 5634468402902919062ull,
+ 14978462851370818221ull, 2848276026184888386ull}},
+{{1368615425402619ull, 11654771522056036732ull, 9499706527358746968ull,
+ 3560345032731110483ull}},
+{{1710769281753274ull, 14568464402570045915ull, 7262947140771045806ull,
+ 4450431290913888104ull}},
+{{16141970295296953460ull, 4493604233178890792ull,
+ 4539341962981903629ull, 2781519556821180065ull}},
+{{1730718795411640209ull, 10228691309901001395ull,
+ 10285863472154767440ull, 3476899446026475081ull}},
+{{15998456549546713974ull, 12785864137376251743ull,
+ 17469015358620847204ull, 4346124307533093851ull}},
+{{16916564371107778090ull, 17214537122714933147ull,
+ 8612291589924335550ull, 2716327692208183657ull}},
+{{16534019445457334708ull, 12294799366538890626ull,
+ 15377050505832807342ull, 3395409615260229571ull}},
+{{11444152269966892577ull, 6145127171318837475ull,
+ 14609627113863621274ull, 4244262019075286964ull}},
+{{4846752159515613909ull, 8452390500501661326ull,
+ 18354388983019539104ull, 2652663761922054352ull}},
+{{15281812236249293194ull, 10565488125627076657ull,
+ 4496242155064872264ull, 3315829702402567941ull}},
+{{5267207240029452780ull, 13206860157033845822ull,
+ 10231988712258478234ull, 4144787128003209926ull}},
+{{17127062580300571700ull, 12865973616573541542ull,
+ 1783306926734160992ull, 2590491955002006204ull}},
+{{12185456188520938817ull, 16082467020716926928ull,
+ 2229133658417701240ull, 3238114943752507755ull}},
+{{15231820235651173521ull, 1656339702186607044ull,
+ 16621475128304290263ull, 4047643679690634693ull}},
+{{296515610427207643ull, 7952741341507711259ull,
+ 12694264964403875366ull, 2529777299806646683ull}},
+{{14205702568316173265ull, 717554640029863265ull,
+ 11256145187077456304ull, 3162221624758308354ull}},
+{{3922070155113052869ull, 896943300037329082ull, 4846809446992044572ull,
+ 3952777030947885443ull}},
+{{7062979865373045947ull, 9783961599378106484ull, 723412895156333905ull,
+ 2470485644342428402ull}},
+{{8828724831716307434ull, 16841638017650021009ull,
+ 10127638155800193189ull, 3088107055428035502ull}},
+{{15647592058072772197ull, 7216989466780362549ull,
+ 3436175657895465679ull, 3860133819285044378ull}},
+{{12085588045509176575ull, 11428147444378808449ull,
+ 6759295804612053953ull, 2412583637053152736ull}},
+{{1271927001604307007ull, 450126250191346850ull, 8449119755765067442ull,
+ 3015729546316440920ull}},
+{{10813280788860159566ull, 9786029849593959370ull,
+ 10561399694706334302ull, 3769661932895551150ull}},
+{{11369986511464987633ull, 1504582637568836702ull,
+ 1989188790764071035ull, 2356038708059719469ull}},
+{{4989111102476458733ull, 15715786352243209590ull,
+ 7098172006882476697ull, 2945048385074649336ull}},
+{{15459760914950349224ull, 5809674885021848275ull,
+ 8872715008603095872ull, 3681310481343311670ull}},
+{{14713015125260548626ull, 7262093606277310344ull,
+ 1867521723899094032ull, 4601638101679139588ull}},
+{{9195634453287842892ull, 4538808503923318965ull,
+ 10390573114291709578ull, 2876023813549462242ull}},
+{{16106229085037191518ull, 14896882666758924514ull,
+ 3764844356009861164ull, 3595029766936827803ull}},
+{{10909414319441713590ull, 174359259739104027ull, 94369426584938552ull,
+ 4493787208671034754ull}},
+{{4512540940437377042ull, 108974537336940017ull, 4670666910042974499ull,
+ 2808617005419396721ull}},
+{{10252362193974109206ull, 13971276226953338733ull,
+ 10450019655981106027ull, 3510771256774245901ull}},
+{{17427138760895024412ull, 12852409265264285512ull,
+ 17674210588403770438ull, 4388464070967807376ull}},
+{{10891961725559390258ull, 3421069772362790541ull,
+ 11046381617752356524ull, 2742790044354879610ull}},
+{{18226638175376625726ull, 4276337215453488176ull,
+ 4584604985335669847ull, 3428487555443599513ull}},
+{{4336553645511230541ull, 733735500889472317ull,
+ 10342442250096975213ull, 4285609444304499391ull}},
+{{5016189037658213040ull, 2764427697269614150ull,
+ 13381555433951691364ull, 2678505902690312119ull}},
+{{15493608333927542108ull, 3455534621587017687ull,
+ 12115258274012226301ull, 3348132378362890149ull}},
+{{14755324398982039731ull, 8931104295411160013ull,
+ 1309014787233119164ull, 4185165472953612687ull}},
+{{11527920758577468784ull, 14805312221486750816ull,
+ 7735663269661781333ull, 2615728420596007929ull}},
+{{14409900948221835980ull, 4671582221576274808ull,
+ 14281265105504614571ull, 3269660525745009911ull}},
+{{18012376185277294975ull, 1227791758542955606ull,
+ 13239895363453380310ull, 4087075657181262389ull}},
+{{6646049097370921456ull, 14602427904371510966ull,
+ 10580777611372056645ull, 2554422285738288993ull}},
+{{17530933408568427627ull, 4417976825182224995ull,
+ 17837658032642458711ull, 3193027857172861241ull}},
+{{17301980742283146630ull, 910785013050393340ull,
+ 8462014485520909677ull, 3991284821466076552ull}},
+{{1590365927072190836ull, 2875083642370189790ull,
+ 5288759053450568548ull, 2494553013416297845ull}},
+{{11211329445695014353ull, 3593854552962737237ull,
+ 11222634835240598589ull, 3118191266770372306ull}},
+{{179103751836604229ull, 9104004209630809451ull, 4804921507195972428ull,
+ 3897739083462965383ull}},
+{{16252840909393735307ull, 14913374667874031714ull,
+ 9920604969638564623ull, 2436086927164353364ull}},
+{{11092679099887393326ull, 14030032316415151739ull,
+ 12400756212048205779ull, 3045108658955441705ull}},
+{{9254162856431853753ull, 12925854377091551770ull,
+ 1665887209778093512ull, 3806385823694302132ull}},
+{{10395537803697296500ull, 8078658985682219856ull,
+ 10264551542966084253ull, 2378991139808938832ull}},
+{{12994422254621620625ull, 14710009750530162724ull,
+ 12830689428707605316ull, 2973738924761173540ull}},
+{{16243027818277025781ull, 18387512188162703405ull,
+ 16038361785884506645ull, 3717173655951466925ull}},
+{{12457735395636835065ull, 13798038126815383580ull,
+ 12329819125391510605ull, 2323233534969666828ull}},
+{{15572169244546043832ull, 3412489603237065763ull,
+ 15412273906739388257ull, 2904041918712083535ull}},
+{{14853525537255166885ull, 8877298022473720108ull,
+ 14653656364996847417ull, 3630052398390104419ull}},
+{{120162847859406991ull, 15708308546519538040ull,
+ 13705384437818671367ull, 4537565497987630524ull}},
+{{75101779912129369ull, 16735221869215793131ull,
+ 17789237310491445412ull, 2835978436242269077ull}},
+{{13928935280172325423ull, 2472283262810189797ull,
+ 8401488582832143054ull, 3544973045302836347ull}},
+{{3576111044933243067ull, 12313726115367513055ull,
+ 5890174710112790913ull, 4431216306628545434ull}},
+{{9152598430724358773ull, 778549794463613803ull, 8293045212247882225ull,
+ 2769510191642840896ull}},
+{{6829062019978060562ull, 5584873261506905158ull,
+ 10366306515309852781ull, 3461887739553551120ull}},
+{{17759699561827351511ull, 11592777595311019351ull,
+ 12957883144137315976ull, 4327359674441938900ull}},
+{{18017341253783176550ull, 7245485997069387094ull,
+ 17322049001940598293ull, 2704599796526211812ull}},
+{{13298304530374194880ull, 13668543514764121772ull,
+ 3205817178716196250ull, 3380749745657764766ull}},
+{{16622880662967743600ull, 7862307356600376407ull,
+ 13230643510250021121ull, 4225937182072205957ull}},
+{{17306829441995921606ull, 16443157143943705014ull,
+ 10574995203119957152ull, 2641210738795128723ull}},
+{{12410164765640126199ull, 2107202356220079652ull,
+ 8607057985472558537ull, 3301513423493910904ull}},
+{{15512705957050157749ull, 7245688963702487469ull,
+ 10758822481840698171ull, 4126891779367388630ull}},
+{{12001284232370042545ull, 2222712593100360716ull,
+ 2112578032723048453ull, 2579307362104617894ull}},
+{{15001605290462553182ull, 7390076759802838799ull,
+ 11864094577758586374ull, 3224134202630772367ull}},
+{{14140320594650803573ull, 14223912898772691ull,
+ 10218432203770845064ull, 4030167753288465459ull}},
+{{6531857362443058281ull, 8889945561732932ull, 4080677118143084213ull,
+ 2518854845805290912ull}},
+{{8164821703053822851ull, 4622798450379554069ull,
+ 5100846397678855266ull, 3148568557256613640ull}},
+{{14817713147244666468ull, 15001870099829218394ull,
+ 6376057997098569082ull, 3935710696570767050ull}},
+{{13872756735455304447ull, 13987854830820649400ull,
+ 8596722266613993580ull, 2459819185356729406ull}},
+{{17340945919319130558ull, 17484818538525811750ull,
+ 1522530796412716167ull, 3074773981695911758ull}},
+{{12452810362294137390ull, 17244337154729876784ull,
+ 11126535532370671017ull, 3843467477119889697ull}},
+{{7783006476433835869ull, 3860181694065091134ull, 36555680090587530ull,
+ 2402167173199931061ull}},
+{{505386058687519028ull, 14048599154436139726ull,
+ 4657380618540622316ull, 3002708966499913826ull}},
+{{9855104610214174593ull, 17560748943045174657ull,
+ 15045097810030553703ull, 3753386208124892282ull}},
+{{17688655427452328881ull, 17892997117044316016ull,
+ 14014872149696483968ull, 2345866380078057676ull}},
+{{3664075210605859485ull, 3919502322595843405ull,
+ 17518590187120604961ull, 2932332975097572095ull}},
+{{9191780031684712260ull, 9511063921672192160ull,
+ 17286551715473368297ull, 3665416218871965119ull}},
+{{11489725039605890325ull, 16500515920517628104ull,
+ 16996503625914322467ull, 4581770273589956399ull}},
+{{7181078149753681453ull, 8006979441109823613ull,
+ 17540343793837533398ull, 2863606420993722749ull}},
+{{13588033705619489720ull, 785352264532503708ull,
+ 8090371687014753036ull, 3579508026242153437ull}},
+{{16985042132024362150ull, 981690330665629635ull,
+ 14724650627195829199ull, 4474385032802691796ull}},
+{{8309808323301532392ull, 7531085484307100378ull,
+ 18426278678852169057ull, 2796490645501682372ull}},
+{{1163888367272139682ull, 14025542873811263377ull,
+ 4586104274855659705ull, 3495613306877102966ull}},
+{{6066546477517562506ull, 3696870536981915509ull,
+ 14956002380424350440ull, 4369516633596378707ull}},
+{{6097434557662170519ull, 2310544085613697193ull,
+ 7041658478551525073ull, 2730947895997736692ull}},
+{{12233479215505101052ull, 7499866125444509395ull,
+ 8802073098189406341ull, 3413684869997170865ull}},
+{{10680163000953988411ull, 13986518675233024648ull,
+ 15614277391164145830ull, 4267106087496463581ull}},
+{{6675101875596242757ull, 4129888153593252501ull,
+ 12064766378691285096ull, 2666941304685289738ull}},
+{{12955563362922691350ull, 5162360191991565626ull,
+ 5857585936509330562ull, 3333676630856612173ull}},
+{{6971082166798588380ull, 15676322276844232841ull,
+ 11933668439064051106ull, 4167095788570765216ull}},
+{{15886141400317587497ull, 14409387441455033429ull,
+ 7458542774415031941ull, 2604434867856728260ull}},
+{{6022618695114820660ull, 4176676246536628075ull,
+ 9323178468018789927ull, 3255543584820910325ull}},
+{{2916587350466137921ull, 609159289743397190ull,
+ 16265659103450875313ull, 4069429481026137906ull}},
+{{15657925149323499913ull, 11909939602158093003ull,
+ 14777722958084184974ull, 2543393425641336191ull}},
+{{14960720418226986987ull, 5664052465842840446ull,
+ 13860467679177843314ull, 3179241782051670239ull}},
+{{9477528485928957925ull, 16303437619158326366ull,
+ 12713898580544916238ull, 3974052227564587799ull}},
+{{1311769285278210799ull, 5577962493546566075ull,
+ 14863715640481654505ull, 2483782642227867374ull}},
+{{15474769661879927211ull, 11584139135360595497ull,
+ 9356272513747292323ull, 3104728302784834218ull}},
+{{5508404022067745302ull, 9868487900773356468ull,
+ 2471968605329339596ull, 3880910378481042773ull}},
+{{12666124550647116622ull, 15391176974838123600ull,
+ 3850823387544531199ull, 2425568986550651733ull}},
+{{15832655688308895777ull, 14627285200120266596ull,
+ 9425215252858051903ull, 3031961233188314666ull}},
+{{1344075536676568105ull, 13672420481722945342ull,
+ 2558147029217789071ull, 3789951541485393333ull}},
+{{14675105265705018778ull, 15462791828717922694ull,
+ 3904684902474812121ull, 2368719713428370833ull}},
+{{9120509545276497664ull, 5493431730615239656ull,
+ 9492542146520903056ull, 2960899641785463541ull}},
+{{11400636931595622080ull, 6866789663269049570ull,
+ 16477363701578516724ull, 3701124552231829426ull}},
+{{11737084100674651704ull, 13515115576397931789ull,
+ 14910038331913960856ull, 2313202845144893391ull}},
+{{836297070561150918ull, 16893894470497414737ull,
+ 14025861896465063166ull, 2891503556431116739ull}},
+{{5657057356628826552ull, 11893996051266992613ull,
+ 12920641352153941054ull, 3614379445538895924ull}},
+{{11683007714213421094ull, 5644123027228964958ull,
+ 16150801690192426318ull, 4517974306923619905ull}},
+{{2690193802956000280ull, 17362634947300266811ull,
+ 3176722028729184592ull, 2823733941827262441ull}},
+{{17197800308977164061ull, 3256549610415781897ull,
+ 8582588554338868645ull, 3529667427284078051ull}},
+{{7662192330939291365ull, 8682373031447115276ull,
+ 6116549674496197902ull, 4412084284105097564ull}},
+{{14012242243691832911ull, 814797126227059143ull,
+ 13046215583414899497ull, 2757552677565685977ull}},
+{{12903616786187403235ull, 5630182426211211833ull,
+ 2472711423986460659ull, 3446940846957107472ull}},
+{{2294462927452090331ull, 2426042014336626888ull,
+ 3090889279983075824ull, 4308676058696384340ull}},
+{{1434039329657556457ull, 1516276258960391805ull,
+ 11155177836844198198ull, 2692922536685240212ull}},
+{{6404235180499333475ull, 11118717360555265564ull,
+ 13943972296055247747ull, 3366153170856550265ull}},
+{{8005293975624166844ull, 9286710682266694051ull,
+ 3594907314786895972ull, 4207691463570687832ull}},
+{{2697465725551410326ull, 15027566213271459590ull,
+ 2246817071741809982ull, 2629807164731679895ull}},
+{{12595204193794038715ull, 9561085729734548679ull,
+ 16643579394959426190ull, 3287258955914599868ull}},
+{{11132319223815160490ull, 2727985125313410041ull,
+ 2357730169989731122ull, 4109073694893249836ull}},
+{{40170487243393450ull, 6316676721748269180ull, 10696953393098357759ull,
+ 2568171059308281147ull}},
+{{50213109054241813ull, 3284159883757948571ull, 8759505722945559295ull,
+ 3210213824135351434ull}},
+{{13897824441599965978ull, 17940257909979599425ull,
+ 1726010116827173310ull, 4012767280169189293ull}},
+{{1768611248358896880ull, 6600975175309861737ull,
+ 3384599332230677271ull, 2507979550105743308ull}},
+{{6822450078876009004ull, 3639532950709939267ull,
+ 4230749165288346589ull, 3134974437632179135ull}},
+{{3916376580167623351ull, 9161102206814811988ull, 676750438183045332ull,
+ 3918718047040223919ull}},
+{{11671107399459540403ull, 14949060916114033300ull,
+ 7340498051505485188ull, 2449198779400139949ull}},
+{{14588884249324425503ull, 239582071432990009ull,
+ 13787308582809244390ull, 3061498474250174936ull}},
+{{4401047256373368167ull, 9522849626146013320ull,
+ 17234135728511555487ull, 3826873092812718670ull}},
+{{2750654535233355105ull, 12869310043982340181ull,
+ 6159648811892334275ull, 2391795683007949169ull}},
+{{8050004187469081785ull, 11474951536550537322ull,
+ 12311247033292805748ull, 2989744603759936461ull}},
+{{839133197481576423ull, 14343689420688171653ull,
+ 1554000736333843473ull, 3737180754699920577ull}},
+{{2830301257639679216ull, 2047276860289025427ull,
+ 12500465506277121931ull, 2335737971687450360ull}},
+{{17372934627331762732ull, 16394154130643445495ull,
+ 15625581882846402413ull, 2919672464609312950ull}},
+{{17104482265737315511ull, 6657634608022143157ull,
+ 10308605316703227209ull, 3649590580761641188ull}},
+{{7545544776889480677ull, 12933729278455066851ull,
+ 12885756645879034011ull, 4561988225952051485ull}},
+{{2410122476342231471ull, 5777737789820722830ull,
+ 10359440912888090209ull, 2851242641220032178ull}},
+{{12236025132282565147ull, 11833858255703291441ull,
+ 3725929104255336953ull, 3564053301525040223ull}},
+{{1459973360071042721ull, 957264764346950590ull, 45725361891783288ull,
+ 4455066626906300279ull}},
+{{14747541405326565413ull, 598290477716844118ull,
+ 6946107378823446411ull, 2784416641816437674ull}},
+{{9211054719803430958ull, 14582921152428218860ull,
+ 17906006260384083821ull, 3480520802270547092ull}},
+{{11513818399754288698ull, 4393593385253109863ull,
+ 3935763751770553161ull, 4350651002838183866ull}},
+{{14113665527487512292ull, 14275210911851663424ull,
+ 7071538363283983629ull, 2719156876773864916ull}},
+{{17642081909359390365ull, 4008955584532415568ull,
+ 8839422954104979537ull, 3398946095967331145ull}},
+{{3605858312989686340ull, 9622880499092907365ull,
+ 15660964711058612325ull, 4248682619959163931ull}},
+{{4559504454832247915ull, 8320143321146761055ull,
+ 7482259935197938751ull, 2655426637474477457ull}},
+{{1087694550112921990ull, 5788493133006063415ull,
+ 13964510937424811343ull, 3319283296843096821ull}},
+{{15194676242923316199ull, 2623930397830191364ull,
+ 3620580616498850467ull, 4149104121053871027ull}},
+{{273300614972296816ull, 17780857563139727267ull,
+ 18403763949807639205ull, 2593190075658669391ull}},
+{{14176683823997534732ull, 8391013898642495371ull,
+ 18393018918832161103ull, 3241487594573336739ull}},
+{{13109168761569530511ull, 5877081354875731310ull,
+ 18379587630112813475ull, 4051859493216670924ull}},
+{{3581544457553568666ull, 1367332837583638117ull,
+ 2263870231965732614ull, 2532412183260419328ull}},
+{{9088616590369348736ull, 10932538083834323454ull,
+ 2829837789957165767ull, 3165515229075524160ull}},
+{{2137398701106910112ull, 9053986586365516414ull,
+ 3537297237446457209ull, 3956894036344405200ull}},
+{{15170932243473982532ull, 17187956662546917518ull,
+ 2210810773404035755ull, 2473058772715253250ull}},
+{{9740293267487702357ull, 16873259809756258994ull,
+ 11986885503609820502ull, 3091323465894066562ull}},
+{{2951994547504852138ull, 11868202725340547935ull,
+ 5760234842657499820ull, 3864154332367583203ull}},
+{{8762525619831614443ull, 16640998740192618267ull,
+ 1294303767447243435ull, 2415096457729739502ull}},
+{{6341471006362130149ull, 16189562406813384930ull,
+ 10841251746163830102ull, 3018870572162174377ull}},
+{{17150210794807438494ull, 11013580971661955354ull,
+ 18163250701132175532ull, 3773588215202717971ull}},
+{{15330567765182036963ull, 16106860144143497904ull,
+ 9046188678993915755ull, 2358492634501698732ull}},
+{{716465632767994588ull, 15521889161751984477ull,
+ 11307735848742394694ull, 2948115793127123415ull}},
+{{5507268059387381139ull, 10178989415335204788ull,
+ 9522983792500605464ull, 3685144741408904269ull}},
+{{6884085074234226423ull, 12723736769169005985ull,
+ 16515415759053144734ull, 4606430926761130336ull}},
+{{15831768217464861275ull, 3340649462303240836ull,
+ 10322134849408215459ull, 2879019329225706460ull}},
+{{1342966198121524977ull, 18010869883161214758ull,
+ 12902668561760269323ull, 3598774161532133075ull}},
+{{10902079784506682029ull, 17901901335524130543ull,
+ 11516649683772948750ull, 4498467701915166344ull}},
+{{13731328892957758125ull, 6577002316275193685ull,
+ 7197906052358092969ull, 2811542313696978965ull}},
+{{3329103060915033944ull, 12832938913771380011ull,
+ 13609068583875004115ull, 3514427892121223706ull}},
+{{17996436881425956141ull, 11429487623786837109ull,
+ 7787963692988979336ull, 4393034865151529633ull}},
+{{13553616060104916541ull, 7143429764866773193ull,
+ 16396692354186581845ull, 2745646790719706020ull}},
+{{3106962019848981964ull, 13540973224510854396ull,
+ 2049121369023675690ull, 3432058488399632526ull}},
+{{3883702524811227454ull, 7702844493783792187ull,
+ 11784773748134370421ull, 4290073110499540657ull}},
+{{121471068793323207ull, 7120120817828564069ull, 447954564942899657ull,
+ 2681295694062212911ull}},
+{{4763524854419041913ull, 13511837040713092990ull,
+ 14395001261460788283ull, 3351619617577766138ull}},
+{{15177778104878578199ull, 12278110282463978333ull,
+ 8770379539971209546ull, 4189524521972207673ull}},
+{{11791954324762805326ull, 12285504944967374362ull,
+ 17010702258550475726ull, 2618452826232629795ull}},
+{{5516570869098730850ull, 6133509144354442145ull,
+ 16651691804760706754ull, 3273066032790787244ull}},
+{{11507399604800801466ull, 16890258467297828489ull,
+ 2367870682241331826ull, 4091332540988484056ull}},
+{{274595725359419061ull, 15168097560488530710ull,
+ 1479919176400832391ull, 2557082838117802535ull}},
+{{9566616693554049634ull, 14348435932183275483ull,
+ 15684957025783204201ull, 3196353547647253168ull}},
+{{7346584848515174138ull, 4100486859946930642ull,
+ 1159452208519453636ull, 3995441934559066461ull}},
+{{9203301548749371740ull, 11786176324321607459ull,
+ 3030500639538352474ull, 2497151209099416538ull}},
+{{6892440917509326771ull, 5509348368547233516ull,
+ 13011497836277716401ull, 3121439011374270672ull}},
+{{8615551146886658464ull, 11498371479111429799ull,
+ 16264372295347145501ull, 3901798764217838340ull}},
+{{12302248494445243396ull, 9492325183658337576ull,
+ 941860647737190130ull, 2438624227636148963ull}},
+{{15377810618056554245ull, 2642034442718146162ull,
+ 15012383864953651375ull, 3048280284545186203ull}},
+{{9998891235715916998ull, 17137601108679846415ull,
+ 14153793812764676314ull, 3810350355681482754ull}},
+{{13166836049963529980ull, 15322686711352291913ull,
+ 13457807151405310600ull, 2381468972300926721ull}},
+{{2623487007172248763ull, 706614315480813276ull, 2987200883974474539ull,
+ 2976836215376158402ull}},
+{{3279358758965310954ull, 14718325949633180307ull,
+ 12957373141822868981ull, 3721045269220198002ull}},
+{{18190500288849177010ull, 11504796727734431643ull,
+ 12710044232066681017ull, 2325653293262623751ull}},
+{{18126439342634083359ull, 545937854385875842ull,
+ 11275869271655963368ull, 2907066616578279689ull}},
+{{13434677141437828390ull, 682422317982344803ull, 259778534287790498ull,
+ 3633833270722849612ull}},
+{{12181660408369897584ull, 10076399934332706812ull,
+ 324723167859738122ull, 4542291588403562015ull}},
+{{16836909792085961798ull, 10909435977385329661ull,
+ 7120481007553418182ull, 2838932242752226259ull}},
+{{7211079184825288535ull, 4413422934876886269ull,
+ 4288915241014384824ull, 3548665303440282824ull}},
+{{13625534999458998573ull, 5516778668596107836ull,
+ 5361144051267981030ull, 4435831629300353530ull}},
+{{17739331411516649916ull, 17283044723154731109ull,
+ 7962401050469876047ull, 2772394768312720956ull}},
+{{8339106209113648683ull, 16992119885516025983ull,
+ 9953001313087345059ull, 3465493460390901195ull}},
+{{5812196742964672950ull, 16628463838467644575ull,
+ 7829565622931793420ull, 4331866825488626494ull}},
+{{10550151991994002450ull, 1169417862187502051ull,
+ 281792495904982984ull, 2707416765930391559ull}},
+{{8576003971565115158ull, 1461772327734377564ull,
+ 14187298675163392442ull, 3384270957412989448ull}},
+{{10720004964456393948ull, 11050587446522747763ull,
+ 17734123343954240552ull, 4230338696766236810ull}},
+{{4394160093571552266ull, 6906617154076717352ull,
+ 15695513108398788249ull, 2643961685478898006ull}},
+{{5492700116964440332ull, 13244957461023284594ull,
+ 10396019348643709503ull, 3304952106848622508ull}},
+{{16089247183060326223ull, 11944510807851717838ull,
+ 12995024185804636879ull, 4131190133560778135ull}},
+{{5444093470985315985ull, 14382848282548405505ull,
+ 15039419143768979905ull, 2581993833475486334ull}},
+{{11416802857159032886ull, 4143502297903343169ull,
+ 9575901892856449074ull, 3227492291844357918ull}},
+{{435945516166627395ull, 14402749909233954770ull,
+ 2746505329215785534ull, 4034365364805447398ull}},
+{{4884151966031530026ull, 4390032674843833827ull,
+ 15551623886042029671ull, 2521478353003404623ull}},
+{{1493503939112024628ull, 875854825127404380ull,
+ 14827843839125149185ull, 3151847941254255779ull}},
+{{1866879923890030785ull, 5706504549836643379ull,
+ 13923118780479048577ull, 3939809926567819724ull}},
+{{17307701016927126905ull, 15095780389716371871ull,
+ 17925321274654181168ull, 2462381204104887327ull}},
+{{17022940252731520727ull, 422981413435913223ull,
+ 17794965574890338557ull, 3077976505131109159ull}},
+{{16666989297487013005ull, 5140412785222279433ull,
+ 17632020950185535292ull, 3847470631413886449ull}},
+{{3499339283288301272ull, 12436130027618700454ull,
+ 4102484066224877701ull, 2404669144633679031ull}},
+{{13597546140965152398ull, 1710104479241211855ull,
+ 516419064353709223ull, 3005836430792098789ull}},
+{{12385246657779052593ull, 15972688654333678531ull,
+ 5257209848869524432ull, 3757295538490123486ull}},
+{{5434936151898213919ull, 9982930408958549082ull,
+ 17120814210825616482ull, 2348309711556327178ull}},
+{{16017042226727543207ull, 3255290974343410544ull,
+ 12177645726677244795ull, 2935387139445408973ull}},
+{{1574558709699877392ull, 17904171773211426893ull,
+ 1386999103064392281ull, 3669233924306761217ull}},
+{{6579884405552234644ull, 8545156661232119904ull,
+ 6345434897257878256ull, 4586542405383451521ull}},
+{{4112427753470146653ull, 5340722913270074940ull,
+ 15495111856854643670ull, 2866589003364657200ull}},
+{{5140534691837683316ull, 15899275678442369483ull,
+ 922145747358752971ull, 3583236254205821501ull}},
+{{1813982346369716241ull, 15262408579625573950ull,
+ 5764368202625829118ull, 4479045317757276876ull}},
+{{14968797021763236363ull, 4927319343838595814ull,
+ 12826102163495919007ull, 2799403323598298047ull}},
+{{9487624240349269645ull, 1547463161370856864ull,
+ 11420941685942510855ull, 3499254154497872559ull}},
+{{11859530300436587056ull, 15769387006995734792ull,
+ 9664491089000750664ull, 4374067693122340699ull}},
+{{7412206437772866910ull, 9855866879372334245ull,
+ 3734463921411775213ull, 2733792308201462937ull}},
+{{13876944065643471542ull, 16931519617642805710ull,
+ 9279765920192106920ull, 3417240385251828671ull}},
+{{8122808045199563619ull, 2717655448343955522ull,
+ 6988021381812745747ull, 4271550481564785839ull}},
+{{9688441046677115166ull, 17839435719710829865ull,
+ 11285042391274047947ull, 2669719050977991149ull}},
+{{16722237326773781862ull, 17687608631211149427ull,
+ 271244933810396222ull, 3337148813722488937ull}},
+{{16291110640039839423ull, 12886138752159160976ull,
+ 4950742185690383182ull, 4171436017153111171ull}},
+{{10181944150024899640ull, 3442150701672087706ull,
+ 788370856842795537ull, 2607147510720694482ull}},
+{{3504058150676348741ull, 8914374395517497537ull,
+ 10208835607908270229ull, 3258934388400868102ull}},
+{{8991758706772823831ull, 15754654012824259825ull,
+ 3537672473030561978ull, 4073667985501085128ull}},
+{{17149064237801484654ull, 14458344776442550294ull,
+ 2211045295644101236ull, 2546042490938178205ull}},
+{{12212958260397080010ull, 18072930970553187868ull,
+ 7375492637982514449ull, 3182553113672722756ull}},
+{{15266197825496350012ull, 8756105657909321123ull,
+ 9219365797478143062ull, 3978191392090903445ull}},
+{{7235530631721524806ull, 860880017765937798ull, 8067946632637533366ull,
+ 2486369620056814653ull}},
+{{18267785326506681815ull, 10299472059062198055ull,
+ 14696619309224304611ull, 3107962025071018316ull}},
+{{18223045639705964365ull, 8262654055400359665ull,
+ 18370774136530380764ull, 3884952531338772895ull}},
+{{4471874497175145872ull, 14387530821480000599ull,
+ 18399262862972569833ull, 2428095332086733059ull}},
+{{978157103041544436ull, 4149355471567837037ull,
+ 18387392560288324388ull, 3035119165108416324ull}},
+{{5834382397229318449ull, 5186694339459796296ull,
+ 4537496626650853869ull, 3793898956385520406ull}},
+{{3646488998268324031ull, 5547526971376066637ull,
+ 16670993446938947380ull, 2371186847740950253ull}},
+{{9169797266262792942ull, 6934408714220083296ull,
+ 7003683753391520513ull, 2963983559676187817ull}},
+{{11462246582828491178ull, 13279696911202492024ull,
+ 13366290710166788545ull, 3704979449595234771ull}},
+{{7163904114267806986ull, 1382281541860475659ull,
+ 6048088684640548889ull, 2315612155997021732ull}},
+{{4343194124407370829ull, 6339537945752982478ull,
+ 7560110855800686111ull, 2894515194996277165ull}},
+{{14652364692363989344ull, 3312736413763840193ull,
+ 14061824588178245543ull, 3618143993745346456ull}},
+{{4480397810172822968ull, 17975978572486963954ull,
+ 17577280735222806928ull, 4522679992181683070ull}},
+{{7411934649785402259ull, 11234986607804352471ull,
+ 6374114441086866426ull, 2826674995113551919ull}},
+{{4653232293804364919ull, 4820361222900664781ull,
+ 3355957032931195129ull, 3533343743891939899ull}},
+{{10428226385682844053ull, 10637137547053218880ull,
+ 18030004346446157623ull, 4416679679864924873ull}},
+{{6517641491051777533ull, 13565739994549343656ull,
+ 4351223688887766658ull, 2760424799915578046ull}},
+{{8147051863814721917ull, 7733802956331903762ull,
+ 14662401647964484131ull, 3450530999894472557ull}},
+{{960442792913626588ull, 5055567676987491799ull, 4492944004673441452ull,
+ 4313163749868090697ull}},
+{{7517805773212098474ull, 12383101834971958182ull,
+ 14337305048989370667ull, 2695727343667556685ull}},
+{{173885179660347284ull, 10867191275287559824ull,
+ 4086573255954549622ull, 3369659179584445857ull}},
+{{217356474575434105ull, 4360617057254673972ull, 9719902588370574932ull,
+ 4212073974480557321ull}},
+{{9359219833464422124ull, 11948757697638947040ull,
+ 17604154163800079092ull, 2632546234050348325ull}},
+{{11699024791830527654ull, 14935947122048683800ull,
+ 8170134649467935153ull, 3290682792562935407ull}},
+{{14623780989788159568ull, 4834875847278691038ull,
+ 5600982293407531038ull, 4113353490703669259ull}},
+{{4528177100190211826ull, 16856855459831345611ull,
+ 1194770924166012946ull, 2570845931689793287ull}},
+{{1048535356810376878ull, 11847697287934406206ull,
+ 15328521710489679895ull, 3213557414612241608ull}},
+{{10534041232867746906ull, 10197935591490619853ull,
+ 713908064402548253ull, 4016946768265302011ull}},
+{{8889618779756035768ull, 8679552753895331360ull,
+ 16587093604747450322ull, 2510591730165813756ull}},
+{{11112023474695044710ull, 1626068905514388392ull,
+ 2287122932224761287ull, 3138239662707267196ull}},
+{{13890029343368805888ull, 15867644187175149202ull,
+ 2858903665280951608ull, 3922799578384083995ull}},
+{{13292954358032891584ull, 9917277616984468251ull,
+ 17927715855296452419ull, 2451749736490052496ull}},
+{{12004506929113726576ull, 7784911002803197410ull,
+ 3962900745411013908ull, 3064687170612565621ull}},
+{{5782261624537382412ull, 9731138753503996763ull,
+ 9565311950191155289ull, 3830858963265707026ull}},
+{{1308070506122170056ull, 17611176767008467737ull,
+ 10590005987296859959ull, 2394286852041066891ull}},
+{{6246774151080100473ull, 17402284940333196767ull,
+ 8625821465693687045ull, 2992858565051333614ull}},
+{{3196781670422737688ull, 7917798120134332247ull,
+ 1558904795262332999ull, 3741073206314167018ull}},
+{{8915517571655292911ull, 11866152852725039510ull,
+ 5586001515466346028ull, 2338170753946354386ull}},
+{{1921024927714340331ull, 14832691065906299388ull,
+ 16205873931187708343ull, 2922713442432942982ull}},
+{{2401281159642925413ull, 13929177813955486331ull,
+ 11033970377129859621ull, 3653391803041178728ull}},
+{{16836659504835820478ull, 3576414212162194201ull,
+ 13792462971412324527ull, 4566739753801473410ull}},
+{{3605383162881305943ull, 9152787910242453232ull,
+ 13231975375560090733ull, 2854212346125920881ull}},
+{{4506728953601632429ull, 16052670906230454444ull,
+ 2704911164167949704ull, 3567765432657401102ull}},
+{{5633411192002040536ull, 1619094559078516439ull,
+ 12604510992064712939ull, 4459706790821751377ull}},
+{{10438411022642357191ull, 17152835163919930438ull,
+ 960290342399363730ull, 2787316744263594611ull}},
+{{3824641741448170681ull, 12217671918045137240ull,
+ 15035420983281368375ull, 3484145930329493263ull}},
+{{4780802176810213351ull, 10660403879129033646ull,
+ 14182590210674322565ull, 4355182412911866579ull}},
+{{16823059415788547056ull, 8968595433669339980ull,
+ 6558275872457757651ull, 2721989008069916612ull}},
+{{2582080196026132204ull, 6599058273659287072ull,
+ 8197844840572197064ull, 3402486260087395765ull}},
+{{3227600245032665255ull, 8248822842074108840ull,
+ 14858992069142634234ull, 4253107825109244706ull}},
+{{2017250153145415785ull, 9767200294723705929ull,
+ 13898556061641534300ull, 2658192390693277941ull}},
+{{7133248709859157635ull, 12209000368404632411ull,
+ 3538137021769754163ull, 3322740488366597427ull}},
+{{4304874868896559139ull, 10649564442078402610ull,
+ 18257729332494356416ull, 4153425610458246783ull}},
+{{7302232811487737366ull, 6655977776299001631ull,
+ 18328609860450054616ull, 2595891006536404239ull}},
+{{4516104995932283804ull, 8319972220373752039ull,
+ 18299076307135180366ull, 3244863758170505299ull}},
+{{1033445226487966851ull, 1176593238612414241ull,
+ 18262159365491587554ull, 4056079697713131624ull}},
+{{12175118312623449042ull, 5347056792560146804ull,
+ 11413849603432242221ull, 2535049811070707265ull}},
+{{15218897890779311302ull, 11295507009127571409ull,
+ 432253949008139064ull, 3168812263838384082ull}},
+{{5188564308191975416ull, 14119383761409464262ull,
+ 9763689473114949638ull, 3961015329797980102ull}},
+{{17077910747902148347ull, 4212928832453527259ull,
+ 1490619902269455620ull, 2475634581123737564ull}},
+{{16735702416450297529ull, 5266161040566909074ull,
+ 1863274877836819525ull, 3094543226404671955ull}},
+{{11696255983708096104ull, 11194387319136024247ull,
+ 16164151652578188118ull, 3868179033005839943ull}},
+{{14227689017458641921ull, 2384806056032627250ull,
+ 17020123810502449430ull, 2417611895628649964ull}},
+{{8561239234968526593ull, 12204379606895559871ull,
+ 2828410689418510171ull, 3022014869535812456ull}},
+{{6089863025283270337ull, 10643788490192061935ull,
+ 3535513361773137714ull, 3777518586919765570ull}},
+{{10723693418443125817ull, 11264053824797426613ull,
+ 6821381869535598975ull, 2360949116824853481ull}},
+{{18016302791481295175ull, 9468381262569395362ull,
+ 13138413355346886623ull, 2951186396031066851ull}},
+{{13297006452496843161ull, 7223790559784356299ull,
+ 11811330675756220375ull, 3688982995038833564ull}},
+{{12009572047193666047ull, 4418052181303057470ull,
+ 14764163344695275469ull, 4611228743798541955ull}},
+{{2894296511068653375ull, 5067125622528104871ull,
+ 6921759081220853216ull, 2882017964874088722ull}},
+{{17452928694117980431ull, 6333907028160131088ull,
+ 17875570888380842328ull, 3602522456092610902ull}},
+{{3369416793937923923ull, 7917383785200163861ull,
+ 13121091573621277102ull, 4503153070115763628ull}},
+{{4411728505424896404ull, 336678847322714509ull,
+ 17424054270368073997ull, 2814470668822352267ull}},
+{{10126346650208508409ull, 5032534577580781040ull,
+ 17168381819532704592ull, 3518088336027940334ull}},
+{{12657933312760635511ull, 6290668221975976300ull,
+ 12237105237561104932ull, 4397610420034925418ull}},
+{{17134580357330173003ull, 13155039675589760995ull,
+ 12259876791903078486ull, 2748506512521828386ull}},
+{{16806539428235328349ull, 7220427557632425436ull,
+ 6101473953024072300ull, 3435633140652285483ull}},
+{{2561430211584608820ull, 9025534447040531796ull,
+ 3015156422852702471ull, 4294541425815356854ull}},
+{{10824265919095156321ull, 12558488057041414228ull,
+ 15719530819565102756ull, 2684088391134598033ull}},
+{{13530332398868945401ull, 15698110071301767785ull,
+ 5814355469174214733ull, 3355110488918247542ull}},
+{{3077857443304018039ull, 5787579533845046020ull,
+ 16491316373322544225ull, 4193888111147809427ull}},
+{{11147032938919787083ull, 15146452254721623522ull,
+ 8001229724112896188ull, 2621180069467380892ull}},
+{{4710419136794958045ull, 486321244692477787ull,
+ 10001537155141120236ull, 3276475086834226115ull}},
+{{1276337902566309652ull, 607901555865597234ull, 7890235425499012391ull,
+ 4095593858542782644ull}},
+{{5409397207531331437ull, 7297467500057080127ull,
+ 14154769177791658552ull, 2559746161589239152ull}},
+{{2150060490986776392ull, 9121834375071350159ull,
+ 17693461472239573190ull, 3199682701986548940ull}},
+{{16522633669015634202ull, 2178920931984411890ull,
+ 3670082766589914872ull, 3999603377483186176ull}},
+{{14938332061562159280ull, 1361825582490257431ull,
+ 2293801729118696795ull, 2499752110926991360ull}},
+{{14061229058525311196ull, 15537340033394985501ull,
+ 2867252161398370993ull, 3124690138658739200ull}},
+{{3741478267874475283ull, 5586616986461568165ull,
+ 3584065201747963742ull, 3905862673323424000ull}},
+{{4644266926635241004ull, 17326693671820643815ull,
+ 2240040751092477338ull, 2441164170827140000ull}},
+{{1193647639866663351ull, 12434995052921028961ull,
+ 2800050938865596673ull, 3051455213533925000ull}},
+{{6103745568260717093ull, 1708685760869122489ull,
+ 3500063673581995842ull, 3814319016917406250ull}},
+{{15344056026231417943ull, 5679614618970589459ull,
+ 6799225814416135305ull, 2383949385573378906ull}},
+{{14568384014361884525ull, 11711204292140624728ull,
+ 17722404304874944939ull, 2979936731966723632ull}},
+{{18210480017952355656ull, 10027319346748393006ull,
+ 3706261307384129558ull, 3724920914958404541ull}},
+{{6769863992792834381ull, 1655388573290357725ull,
+ 4622256326328774926ull, 2328075571849002838ull}},
+{{13074016009418430880ull, 11292607753467722964ull,
+ 15001192444765744465ull, 2910094464811253547ull}},
+{{16342520011773038600ull, 280701636552489993ull,
+ 14139804537529792678ull, 3637618081014066934ull}},
+{{6593091959434134538ull, 9574249082545388300ull,
+ 8451383635057465039ull, 4547022601267583668ull}},
+{{13344054511501109895ull, 12901434704231949543ull,
+ 14505486808765691457ull, 2841889125792239792ull}},
+{{12068382120948999464ull, 2291735325007773217ull,
+ 18131858510957114322ull, 3552361407240299740ull}},
+{{1250419595904085618ull, 12088041193114492330ull,
+ 4218079064986841286ull, 4440451759050374676ull}},
+{{5393198265867441415ull, 2943339727269169802ull,
+ 11859671452471551612ull, 2775282349406484172ull}},
+{{15964869869189077577ull, 3679174659086462252ull,
+ 14824589315589439515ull, 3469102936758105215ull}},
+{{1509343262776795355ull, 18434026379140241528ull,
+ 13919050626059411489ull, 4336378670947631519ull}},
+{{943339539235497097ull, 4603737459321569099ull,
+ 15616935668928214037ull, 2710236669342269699ull}},
+{{15014232479326535083ull, 10366357842579349277ull,
+ 14909483567732879642ull, 3387795836677837124ull}},
+{{4932732543876005142ull, 3734575266369410789ull, 190110385956547937ull,
+ 4234744795847296406ull}},
+{{5388800849136197166ull, 13863324587549351503ull,
+ 13953877046505006172ull, 2646715497404560253ull}},
+{{2124315042992858553ull, 17329155734436689379ull,
+ 3607288252849094003ull, 3308394371755700317ull}},
+{{16490451859023236904ull, 17049758649618473819ull,
+ 9120796334488755408ull, 4135492964694625396ull}},
+{{8000689402675829113ull, 10656099156011546137ull,
+ 14923869745910247938ull, 2584683102934140872ull}},
+{{14612547771772174295ull, 4096751908159656863ull,
+ 208093108678258307ull, 3230853878667676091ull}},
+{{13653998696287829965ull, 509253866772183175ull,
+ 14095174441129986596ull, 4038567348334595113ull}},
+{{15451278212820975584ull, 9541655703587390292ull,
+ 1891954998065159766ull, 2524104592709121946ull}},
+{{867353692316667864ull, 2703697592629462058ull,
+ 11588315784436225516ull, 3155130740886402432ull}},
+{{10307564152250610638ull, 3379621990786827572ull,
+ 14485394730545281895ull, 3943913426108003040ull}},
+{{15665599632011407457ull, 9029792771882849088ull,
+ 9053371706590801184ull, 2464945891317501900ull}},
+{{1135255466304707705ull, 11287240964853561361ull,
+ 11316714633238501480ull, 3081182364146877375ull}},
+{{6030755351308272535ull, 14109051206066951701ull,
+ 9534207273120738946ull, 3851477955183596719ull}},
+{{6075065103781364287ull, 13429843022219232717ull,
+ 12876408573341543697ull, 2407173721989747949ull}},
+{{12205517398154093262ull, 2952245722491877184ull,
+ 2260452661394765910ull, 3008967152487184937ull}},
+{{15256896747692616578ull, 12913679189969622288ull,
+ 7437251845170845291ull, 3761208940608981171ull}},
+{{9535560467307885361ull, 5765206484517319978ull,
+ 2342439394018084355ull, 2350755587880613232ull}},
+{{2696078547280080893ull, 2594822087219262069ull,
+ 2928049242522605444ull, 2938444484850766540ull}},
+{{7981784202527489021ull, 3243527609024077586ull,
+ 3660061553153256805ull, 3673055606063458175ull}},
+{{753858216304585468ull, 8666095529707484887ull,
+ 18410134996723734718ull, 4591319507579322718ull}},
+{{7388690412831447773ull, 804623687639790150ull, 6894648354524946295ull,
+ 2869574692237076699ull}},
+{{12490979184533909ull, 14840837664831901400ull, 4006624424728794964ull,
+ 3586968365296345874ull}},
+{{15613723980667386ull, 104303007330325134ull, 14231652567765769514ull,
+ 4483710456620432342ull}},
+{{13844816632770080828ull, 4676875398008841112ull,
+ 4283096836426218042ull, 2802319035387770214ull}},
+{{17306020790962601035ull, 15069466284365827198ull,
+ 14577243082387548360ull, 3502898794234712767ull}},
+{{12409153951848475486ull, 390088781747732382ull,
+ 13609867834557047547ull, 4378623492793390959ull}},
+{{3144035201477909275ull, 16384706553088190403ull,
+ 15423696424239236572ull, 2736639682995869349ull}},
+{{17765102057129550305ull, 2034139117650686387ull,
+ 5444562475016882004ull, 3420799603744836687ull}},
+{{17594691552984549978ull, 2542673897063357984ull,
+ 2194017075343714601ull, 4275999504681045859ull}},
+{{10996682220615343736ull, 13118386231733068500ull,
+ 17512161736585679289ull, 2672499690425653661ull}},
+{{13745852775769179670ull, 2562924734384171913ull,
+ 8055144115449935400ull, 3340624613032067077ull}},
+{{3347257914429310876ull, 3203655917980214892ull,
+ 14680616162739807154ull, 4175780766290083846ull}},
+{{11315408233373095105ull, 6613970967165022211ull,
+ 4563699083284991567ull, 2609862978931302404ull}},
+{{9532574273288980978ull, 3655777690528889860ull,
+ 5704623854106239459ull, 3262328723664128005ull}},
+{{11915717841611226222ull, 18404780168443276037ull,
+ 11742465836060187227ull, 4077910904580160006ull}},
+{{9753166660220710341ull, 9197144596063353571ull,
+ 2727355129110229113ull, 2548694315362600004ull}},
+{{7579772306848500022ull, 16108116763506579868ull,
+ 3409193911387786391ull, 3185867894203250005ull}},
+{{9474715383560625027ull, 15523459935955836931ull,
+ 8873178407662120893ull, 3982334867754062506ull}},
+{{3615854105511696690ull, 12008005469186092034ull,
+ 10157422523216213462ull, 2488959292346289066ull}},
+{{13743189668744396671ull, 5786634799627839234ull,
+ 3473406117165491020ull, 3111199115432861333ull}},
+{{7955615049075720030ull, 7233293499534799043ull,
+ 8953443664884251679ull, 3888998894291076666ull}},
+{{2666416396458631067ull, 11438337464850331258ull,
+ 10207588308980045203ull, 2430624308931922916ull}},
+{{12556392532428064642ull, 9686235812635526168ull,
+ 12759485386225056504ull, 3038280386164903645ull}},
+{{15695490665535080802ull, 12107794765794407710ull,
+ 2114298677499156918ull, 3797850482706129557ull}},
+{{5197995647532037597ull, 2955685710194116915ull,
+ 3627279682650667026ull, 2373656551691330973ull}},
+{{1885808540987659093ull, 12917979174597421952ull,
+ 9145785621740721686ull, 2967070689614163716ull}},
+{{2357260676234573866ull, 6924101931392001632ull,
+ 11432232027175902108ull, 3708838362017704645ull}},
+{{1473287922646608666ull, 13550935743974776828ull,
+ 9450988026198632769ull, 2318023976261065403ull}},
+{{1841609903308260833ull, 3103611624686307323ull,
+ 7202049014320903058ull, 2897529970326331754ull}},
+{{16137070434417489753ull, 13102886567712659961ull,
+ 18225933304755904630ull, 3621912462907914692ull}},
+{{6336279987739698479ull, 7155236172786049144ull,
+ 4335672557235329172ull, 4527390578634893366ull}},
+{{3960174992337311550ull, 13695394644846056523ull,
+ 16544853403554244444ull, 2829619111646808353ull}},
+{{338532721994251533ull, 17119243306057570654ull,
+ 6846008699160641843ull, 3537023889558510442ull}},
+{{9646537939347590224ull, 16787368114144575413ull,
+ 17780882910805578112ull, 4421279861948138052ull}},
+{{8334929221305937842ull, 10492105071340359633ull,
+ 1889679782398710512ull, 2763299913717586283ull}},
+{{15030347545059810206ull, 13115131339175449541ull,
+ 16197157783280551852ull, 3454124892146982853ull}},
+{{4952876376042599046ull, 16393914173969311927ull,
+ 6411389173818526103ull, 4317656115183728567ull}},
+{{10013076762667706260ull, 17163725386371901810ull,
+ 10924647261277660670ull, 2698535071989830354ull}},
+{{3292973916479857017ull, 12231284696110101455ull,
+ 4432437039742300030ull, 3373168839987287943ull}},
+{{17951275450881984983ull, 6065733833282851010ull,
+ 928860281250487134ull, 4216461049984109929ull}},
+{{15831233175228628518ull, 17626141701083945593ull,
+ 12109752721850024218ull, 2635288156240068705ull}},
+{{5953983413753621936ull, 12809305089500156184ull,
+ 1302132847030366561ull, 3294110195300085882ull}},
+{{7442479267192027420ull, 2176573306593031518ull,
+ 10851038095642734010ull, 4117637744125107352ull}},
+{{39863523567629234ull, 5972044335048032603ull, 6781898809776708756ull,
+ 2573523590078192095ull}},
+{{13884887459741700254ull, 7465055418810040753ull,
+ 3865687493793498041ull, 3216904487597740119ull}},
+{{3521051269394961605ull, 13943005291939938846ull,
+ 220423348814484647ull, 4021130609497175149ull}},
+{{16035715098654014715ull, 15631907335103543634ull,
+ 2443607602222746856ull, 2513206630935734468ull}},
+{{10821271836462742586ull, 1093140095169877927ull,
+ 3054509502778433571ull, 3141508288669668085ull}},
+{{8914903777151040329ull, 15201483174244511121ull,
+ 8429822896900429867ull, 3926885360837085106ull}},
+{{17101029906787869966ull, 7195083974689125498ull,
+ 9880325328990156571ull, 2454303350523178191ull}},
+{{12152915346630061649ull, 4382168949934018969ull,
+ 7738720642810307810ull, 3067879188153972739ull}},
+{{1356086128005413349ull, 14701083224272299520ull,
+ 5061714785085496858ull, 3834848985192465924ull}},
+{{847553830003383343ull, 13799863033597575104ull,
+ 12386943777533211344ull, 2396780615745291202ull}},
+{{1059442287504229179ull, 17249828791996968880ull,
+ 6260307685061738372ull, 2995975769681614003ull}},
+{{1324302859380286474ull, 3115541916286659484ull,
+ 3213698587899785062ull, 3744969712102017504ull}},
+{{10051061323967454854ull, 15782271752961325889ull,
+ 2008561617437365663ull, 2340606070063760940ull}},
+{{17175512673386706472ull, 15116153672774269457ull,
+ 2510702021796707079ull, 2925757587579701175ull}},
+{{7634332786451219377ull, 14283506072540448918ull,
+ 16973435582528047561ull, 3657196984474626468ull}},
+{{319543946209248414ull, 4019324535393397436ull, 2770050404450507836ull,
+ 4571496230593283086ull}},
+{{9423087003235556067ull, 11735449871475649205ull,
+ 15566339558063731109ull, 2857185144120801928ull}},
+{{16390544772471832987ull, 834254284062397794ull,
+ 1011180373870112271ull, 3571481430151002411ull}},
+{{11264808928735015426ull, 14877875910360160955ull,
+ 15099033522619804050ull, 4464351787688753013ull}},
+{{4734662571245690689ull, 13910358462402488501ull,
+ 11742738960851071483ull, 2790219867305470633ull}},
+{{10530014232484501266ull, 12776262059575722722ull,
+ 843365645781675642ull, 3487774834131838292ull}},
+{{3939145753750850774ull, 6746955537614877595ull,
+ 1054207057227094553ull, 4359718542664797865ull}},
+{{156123086880587782ull, 15746062257077768257ull,
+ 12188094456835403855ull, 2724824089165498665ull}},
+{{4806839877028122631ull, 15070891802919822417ull,
+ 1400060015762091107ull, 3406030111456873332ull}},
+{{10620235864712541193ull, 14226928735222390117ull,
+ 1750075019702613884ull, 4257537639321091665ull}},
+{{8943490424659032198ull, 18115202496368769631ull,
+ 12623011933382603437ull, 2660961024575682290ull}},
+{{6567677012396402343ull, 8808945065178798327ull,
+ 6555392879873478489ull, 3326201280719602863ull}},
+{{3597910247068115025ull, 15622867349900885813ull,
+ 3582555081414460207ull, 4157751600899503579ull}},
+{{4554536913631265843ull, 16681821121329135489ull,
+ 18379997990379895293ull, 2598594750562189736ull}},
+{{10304857160466470207ull, 7017218346379255649ull,
+ 4528253414265317501ull, 3248243438202737171ull}},
+{{17492757469010475663ull, 13383208951401457465ull,
+ 1048630749404258972ull, 4060304297753421464ull}},
+{{4015444390490465433ull, 17587877631480686724ull,
+ 655394218377661857ull, 2537690186095888415ull}},
+{{5019305488113081792ull, 8149788984068694693ull,
+ 14654300828254241034ull, 3172112732619860518ull}},
+{{10885817878568740143ull, 963864193231092558ull,
+ 9094503998463025485ull, 3965140915774825648ull}},
+{{2191950155678074686ull, 2908258129983126801ull,
+ 5684064999039390928ull, 2478213072359266030ull}},
+{{7351623713024981261ull, 3635322662478908501ull,
+ 16328453285654014468ull, 3097766340449082537ull}},
+{{13801215659708614480ull, 4544153328098635626ull,
+ 6575508551785354373ull, 3872207925561353172ull}},
+{{13237445805745271954ull, 5145938839275341218ull,
+ 13333064881720622291ull, 2420129953475845732ull}},
+{{7323435220326814135ull, 1820737530666788619ull,
+ 16666331102150777864ull, 3025162441844807165ull}},
+{{4542608006981129764ull, 2275921913333485774ull,
+ 6997855822406308618ull, 3781453052306008957ull}},
+{{16674188059645369815ull, 6034137214260816512ull,
+ 6679502898217636838ull, 2363408157691255598ull}},
+{{2395991000847160653ull, 16766043554680796449ull,
+ 17572750659626821855ull, 2954260197114069497ull}},
+{{7606674769486338720ull, 16345868424923607657ull,
+ 8130880269251363607ull, 3692825246392586872ull}},
+{{16283386776997431460ull, 17133696793218336641ull,
+ 5081800168282102254ull, 2308015778995366795ull}},
+{{6519175415964625613ull, 12193748954668144994ull,
+ 1740564191925239914ull, 2885019723744208494ull}},
+{{17372341306810557824ull, 6018814156480405434ull,
+ 11399077276761325701ull, 3606274654680260617ull}},
+{{12492054596658421472ull, 12135203714027894697ull,
+ 413788540669493414ull, 4507843318350325772ull}},
+{{890005095270431564ull, 2972816302840046282ull, 9481989874773209192ull,
+ 2817402073968953607ull}},
+{{10335878405942815263ull, 3716020378550057852ull,
+ 7240801325039123586ull, 3521752592461192009ull}},
+{{12919848007428519078ull, 13868397510042348123ull,
+ 13662687674726292386ull, 4402190740576490011ull}},
+{{5769061995429130472ull, 13279434462203855481ull,
+ 6233336787490238789ull, 2751369212860306257ull}},
+{{11823013512713800994ull, 2764235022472655639ull,
+ 12403357002790186391ull, 3439211516075382821ull}},
+{{10167080872464863339ull, 17290351833372983261ull,
+ 1669138198205569276ull, 4299014395094228527ull}},
+{{8660268554504233539ull, 1583097859003338730ull,
+ 7960740401519562654ull, 2686883996933892829ull}},
+{{1601963656275516115ull, 11202244360608949221ull,
+ 14562611520326841221ull, 3358604996167366036ull}},
+{{6614140588771783048ull, 167747395479022814ull,
+ 18203264400408551527ull, 4198256245209207545ull}},
+{{17968895923264528117ull, 7022371149815471114ull,
+ 4459511222614262848ull, 2623910153255754716ull}},
+{{13237747867225884338ull, 8777963937269338893ull,
+ 5574389028267828560ull, 3279887691569693395ull}},
+{{2712126778750191711ull, 10972454921586673617ull,
+ 2356300266907397796ull, 4099859614462116744ull}},
+{{13224294282787339580ull, 16081156362846446818ull,
+ 1472687666817123622ull, 2562412259038822965ull}},
+{{7306995816629398666ull, 10878073416703282715ull,
+ 6452545601948792432ull, 3203015323798528706ull}},
+{{4522058752359360429ull, 13597591770879103394ull,
+ 17289054039290766348ull, 4003769154748160882ull}},
+{{7437972738651988172ull, 17721866893654215429ull,
+ 15417344792984116871ull, 2502355721717600551ull}},
+{{13909151941742373119ull, 17540647598640381382ull,
+ 14659994972802758185ull, 3127944652147000689ull}},
+{{8163067890323190591ull, 8090751443018313016ull,
+ 4489935660721284020ull, 3909930815183750862ull}},
+{{5101917431451994119ull, 14280091688741221443ull,
+ 16641267843232966224ull, 2443706759489844288ull}},
+{{1765710770887604745ull, 17850114610926526804ull,
+ 2354840730331656164ull, 3054633449362305361ull}},
+{{2207138463609505931ull, 3865899189948606889ull,
+ 7555236931341958110ull, 3818291811702881701ull}},
+{{12908676585824410967ull, 16251245049000043017ull,
+ 7027866091302417770ull, 2386432382314301063ull}},
+{{2300787676998349997ull, 11090684274395277964ull,
+ 4173146595700634309ull, 2983040477892876329ull}},
+{{2875984596247937496ull, 28297287711933743ull, 9828119263053180791ull,
+ 3728800597366095411ull}},
+{{8715019400296042791ull, 6935214832461040445ull,
+ 3836731530194544042ull, 2330500373353809632ull}},
+{{15505460268797441393ull, 17892390577431076364ull,
+ 4795914412743180052ull, 2913125466692262040ull}},
+{{935081262287250125ull, 3918744148079293840ull, 5994893015928975066ull,
+ 3641406833365327550ull}},
+{{1168851577859062656ull, 14121802221953893108ull,
+ 16716988306765994640ull, 4551758541706659437ull}},
+{{9953904273016689968ull, 8826126388721183192ull,
+ 12753960700942440602ull, 2844849088566662148ull}},
+{{12442380341270862460ull, 1809285949046703182ull,
+ 15942450876178050753ull, 3556061360708327685ull}},
+{{6329603389733802267ull, 6873293454735766882ull,
+ 6093005539940399729ull, 4445076700885409607ull}},
+{{8567688137011014321ull, 15825023455278324061ull,
+ 10725657490103831686ull, 2778172938053381004ull}},
+{{15321296189691155805ull, 10557907282243129268ull,
+ 13407071862629789608ull, 3472716172566726255ull}},
+{{704876163404393140ull, 13197384102803911586ull,
+ 12147153809859849106ull, 4340895215708407819ull}},
+{{5052233620555133617ull, 12860051082679832645ull,
+ 5286128121948711739ull, 2713059509817754887ull}},
+{{10926978044121304925ull, 11463377834922402902ull,
+ 1995974134008501770ull, 3391324387272193609ull}},
+{{4435350518296855348ull, 5105850256798227820ull,
+ 7106653685938015117ull, 4239155484090242011ull}},
+{{11995466110790310401ull, 5496999419712586339ull,
+ 2135815544497565496ull, 2649472177556401257ull}},
+{{10382646620060500097ull, 6871249274640732924ull,
+ 7281455449049344774ull, 3311840221945501571ull}},
+{{12978308275075625121ull, 17812433630155691963ull,
+ 4490133292884293063ull, 4139800277431876964ull}},
+{{5805599662708571749ull, 18050300046488389333ull,
+ 12029705344907458972ull, 2587375173394923102ull}},
+{{11868685596813102590ull, 4116130984400935050ull,
+ 5813759644279547908ull, 3234218966743653878ull}},
+{{5612484959161602429ull, 5145163730501168813ull,
+ 16490571592204210693ull, 4042773708429567347ull}},
+{{5813646108689695470ull, 5521570340776924460ull,
+ 8000764235913937731ull, 2526733567768479592ull}},
+{{7267057635862119338ull, 2290276907543767671ull,
+ 10000955294892422164ull, 3158416959710599490ull}},
+{{4472136026400261268ull, 2862846134429709589ull,
+ 3277822081760751897ull, 3948021199638249363ull}},
+{{5100928025713857245ull, 13318493880087038253ull,
+ 18189539865596327599ull, 2467513249773905851ull}},
+{{10987846050569709460ull, 12036431331681409912ull,
+ 18125238813568021595ull, 3084391562217382314ull}},
+{{13734807563212136825ull, 10433853146174374486ull,
+ 13433176480105251186ull, 3855489452771727893ull}},
+{{3972568708580197612ull, 11132844234786371958ull,
+ 10701578309279475943ull, 2409680907982329933ull}},
+{{14189082922580022823ull, 9304369275055577043ull,
+ 17988658905026732833ull, 3012101134977912416ull}},
+{{13124667634797640624ull, 16242147612246859208ull,
+ 4039079557573864425ull, 3765126418722390521ull}},
+{{8202917271748525390ull, 3233813230013205149ull,
+ 14053639769552135026ull, 2353204011701494075ull}},
+{{14865332608113044642ull, 13265638574371282244ull,
+ 12955363693512780878ull, 2941505014626867594ull}},
+{{134921686431754186ull, 7358676181109326998ull, 6970832580036200290ull,
+ 3676881268283584493ull}},
+{{9392024144894468540ull, 18421717263241434555ull,
+ 13325226743472638266ull, 4596101585354480616ull}},
+{{3564172081345348886ull, 16125259307953284501ull,
+ 8328266714670398916ull, 2872563490846550385ull}},
+{{9066901120109074011ull, 1709830061232054010ull,
+ 15022019411765386550ull, 3590704363558187981ull}},
+{{2110254363281566706ull, 11360659613394843321ull,
+ 4942466209424569475ull, 4488380454447734977ull}},
+{{12848124023119448951ull, 4794569249158083123ull,
+ 14618256426958825682ull, 2805237784029834360ull}},
+{{11448469010471923285ull, 15216583598302379712ull,
+ 18272820533698532102ull, 3506547230037292950ull}},
+{{14310586263089904106ull, 9797357461023198832ull,
+ 13617653630268389320ull, 4383184037546616188ull}},
+{{8944116414431190067ull, 6123348413139499270ull,
+ 17734405555772519133ull, 2739490023466635117ull}},
+{{1956773481184211775ull, 12265871534851761992ull,
+ 8332948889433485204ull, 3424362529333293897ull}},
+{{2445966851480264719ull, 15332339418564702490ull,
+ 15027872130219244409ull, 4280453161666617371ull}},
+{{6140415300602553353ull, 2665183108961857200ull,
+ 7086577072173333804ull, 2675283226041635857ull}},
+{{7675519125753191692ull, 3331478886202321500ull,
+ 13469907358644055159ull, 3344104032552044821ull}},
+{{9594398907191489614ull, 17999406663035065587ull,
+ 3002326143022905236ull, 4180130040690056027ull}},
+{{3690656307780987057ull, 2026257127542140184ull,
+ 18017354903885173437ull, 2612581275431285016ull}},
+{{4613320384726233821ull, 7144507427855063134ull,
+ 4074949556146915180ull, 3265726594289106271ull}},
+{{14990022517762568085ull, 8930634284818828917ull,
+ 482000926756256071ull, 4082158242861382839ull}},
+{{11674607082815299005ull, 12499175455652849929ull,
+ 7218779606863741900ull, 2551348901788364274ull}},
+{{758200798236960044ull, 15623969319566062412ull,
+ 18246846545434453183ull, 3189186127235455342ull}},
+{{947750997796200055ull, 14918275631030190111ull,
+ 13585186144938290671ull, 3986482659044319178ull}},
+{{7509873401263706891ull, 16241451297034950675ull,
+ 13102427359013819573ull, 2491551661902699486ull}},
+{{4775655733152245709ull, 6466756066011524632ull,
+ 7154662161912498659ull, 3114439577378374358ull}},
+{{5969569666440307136ull, 3471759064087017886ull,
+ 18166699739245399132ull, 3893049471722967947ull}},
+{{17566039096807355672ull, 11393221451909161986ull,
+ 9048344327814680505ull, 2433155919826854967ull}},
+{{12734176834154418782ull, 406468759604288771ull,
+ 6698744391340962728ull, 3041444899783568709ull}},
+{{11306035024265635574ull, 508085949505360964ull,
+ 12985116507603591314ull, 3801806124729460886ull}},
+{{16289643927020798042ull, 4929239736868238506ull,
+ 3504011798824856667ull, 2376128827955913054ull}},
+{{11138682871921221744ull, 1549863652657910229ull,
+ 13603386785385846642ull, 2970161034944891317ull}},
+{{88295534619363468ull, 11160701602677163595ull, 3169175426450144590ull,
+ 3712701293681114147ull}},
+{{16196085773632959832ull, 2363752483245839342ull,
+ 18121635706027198033ull, 2320438308550696341ull}},
+{{11021735180186423982ull, 7566376622484687082ull,
+ 8816986577251833829ull, 2900547885688370427ull}},
+{{4553796938378254169ull, 14069656796533246757ull,
+ 6409547203137404382ull, 3625684857110463034ull}},
+{{10303932191400205615ull, 8363698958811782638ull,
+ 17235306040776531286ull, 4532106071388078792ull}},
+{{1828271601197740605ull, 615625830829976245ull,
+ 10772066275485332054ull, 2832566294617549245ull}},
+{{6897025519924563661ull, 9992904325392246114ull,
+ 18076768862784052971ull, 3540707868271936556ull}},
+{{17844653936760480384ull, 7879444388312919738ull,
+ 4149217004770514598ull, 4425884835339920696ull}},
+{{15764594728902688144ull, 312966724268186932ull,
+ 2593260627981571624ull, 2766178022087450435ull}},
+{{1258999337418808564ull, 391208405335233666ull,
+ 17076633840259128242ull, 3457722527609313043ull}},
+{{10797121208628286513ull, 9712382543523817890ull,
+ 16734106281896522398ull, 4322153159511641304ull}},
+{{11359886773820066975ull, 1458553071274998277ull,
+ 10458816426185326499ull, 2701345724694775815ull}},
+{{364800411992920006ull, 15658249394375911559ull,
+ 8461834514304270219ull, 3376682155868469769ull}},
+{{14291058570273313720ull, 14961125724542501544ull,
+ 15188979161307725678ull, 4220852694835587211ull}},
+{{8931911606420821075ull, 4739017559411675561ull,
+ 7187268966603634597ull, 2638032934272242007ull}},
+{{15776575526453414248ull, 10535457967691982355ull,
+ 4372400189827155342ull, 3297541167840302509ull}},
+{{15109033389639379905ull, 3945950422760202136ull,
+ 10077186255711332082ull, 4121926459800378136ull}},
+{{9443145868524612441ull, 7077905032652514239ull,
+ 6298241409819582551ull, 2576204037375236335ull}},
+{{7192246317228377647ull, 4235695272388254895ull,
+ 3261115743847090285ull, 3220255046719045419ull}},
+{{4378621878108084155ull, 9906305108912706523ull,
+ 17911452735091026568ull, 4025318808398806773ull}},
+{{430795664603858645ull, 6191440693070441577ull,
+ 13500500968645585557ull, 2515824255249254233ull}},
+{{5150180599182211210ull, 12350986884765439875ull,
+ 3040568155524818234ull, 3144780319061567792ull}},
+{{1826039730550376108ull, 6215361569102024036ull,
+ 3800710194406022793ull, 3930975398826959740ull}},
+{{10364646868448760876ull, 15413816026757234782ull,
+ 11598815908358540053ull, 2456859624266849837ull}},
+{{3732436548706175287ull, 5432211978164379766ull, 663461830166011355ull,
+ 3071074530333562297ull}},
+{{13888917722737494916ull, 2178578954278086803ull,
+ 5441013306134902098ull, 3838843162916952871ull}},
+{{6374730567497240371ull, 5973297864851192156ull,
+ 10318162343975395667ull, 2399276976823095544ull}},
+{{7968413209371550464ull, 2854936312636602291ull,
+ 12897702929969244584ull, 2999096221028869430ull}},
+{{5348830493287050175ull, 3568670390795752864ull,
+ 6898756625606779922ull, 3748870276286086788ull}},
+{{3343019058304406360ull, 6842105012674733444ull,
+ 13535094927859013259ull, 2343043922678804242ull}},
+{{4178773822880507950ull, 3940945247416028901ull,
+ 7695496622968990766ull, 2928804903348505303ull}},
+{{9835153297028022841ull, 14149553596124811934ull,
+ 5007684760283850553ull, 3661006129185631629ull}},
+{{3070569584430252743ull, 3851883939873851206ull,
+ 10871291968782201096ull, 4576257661482039536ull}},
+{{15754164045551071677ull, 2407427462421157003ull,
+ 6794557480488875685ull, 2860161038426274710ull}},
+{{15081019038511451692ull, 7620970346453834158ull,
+ 17716568887465870414ull, 3575201298032843387ull}},
+{{9627901761284538806ull, 302840896212516890ull,
+ 17534025090904950114ull, 4469001622541054234ull}},
+{{10629124619230224658ull, 4800961578560210960ull,
+ 15570451700242981725ull, 2793126014088158896ull}},
+{{13286405774037780823ull, 10612887991627651604ull,
+ 1016320551594175540ull, 3491407517610198621ull}},
+{{16608007217547226028ull, 13266109989534564505ull,
+ 5882086707920107329ull, 4364259397012748276ull}},
+{{3462475483325934412ull, 1373789715818020960ull,
+ 12899676229304842889ull, 2727662123132967672ull}},
+{{4328094354157418015ull, 6328923163199914104ull,
+ 16124595286631053611ull, 3409577653916209590ull}},
+{{5410117942696772518ull, 3299467935572504726ull,
+ 10932372071434041206ull, 4261972067395261988ull}},
+{{17216381769467646536ull, 15897225515014979165ull,
+ 16056104581501051561ull, 2663732542122038742ull}},
+{{7685419156552394458ull, 6036473838486560245ull,
+ 10846758690021538644ull, 3329665677652548428ull}},
+{{14218459964117880976ull, 7545592298108200306ull,
+ 13558448362526923305ull, 4162082097065685535ull}},
+{{13498223496001063514ull, 16245210232386094951ull,
+ 15391559254220408921ull, 2601301310666053459ull}},
+{{12261093351573941489ull, 6471454735200454977ull,
+ 14627763049348123248ull, 3251626638332566824ull}},
+{{1491308634185263149ull, 8089318419000568722ull,
+ 18284703811685154060ull, 4064533297915708530ull}},
+{{5543753914793177372ull, 14279196048730131259ull,
+ 16039625900730609191ull, 2540333311197317831ull}},
+{{2318006375064083811ull, 13237309042485276170ull,
+ 15437846357485873585ull, 3175416638996647289ull}},
+{{12120880005684880572ull, 2711578247824431500ull,
+ 5462249891575178270ull, 3969270798745809112ull}},
+{{16798922040407826166ull, 15529794460172433399ull,
+ 3413906182234486418ull, 2480794249216130695ull}},
+{{16386966532082394803ull, 10188871038360765941ull,
+ 18102440783075271735ull, 3100992811520163368ull}},
+{{6648650109820829791ull, 8124402779523569523ull,
+ 4181306905134538053ull, 3876241014400204211ull}},
+{{1849563309424324668ull, 7383594746415924904ull, 307473806495392331ull,
+ 2422650634000127632ull}}
+};
+
+// **********************************************************************
+
+static const UINT128 breakpoints_bid32[] = { {{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{11908810229357645280ull, 469708516554766ull}},
+{{5954405114678822640ull, 234854258277383ull}},
+{{12200574594194187128ull, 117427129138691ull}},
+{{15323659333951869372ull, 58713564569345ull}},
+{{2831320374921140396ull, 293567822846729ull}},
+{{10639032224315346006ull, 146783911423364ull}},
+{{5319516112157673003ull, 73391955711682ull}},
+{{8150836487078813399ull, 366959778558411ull}},
+{{13298790280394182507ull, 183479889279205ull}},
+{{15872767177051867061ull, 91739944639602ull}},
+{{5576859590421128845ull, 458699723198014ull}},
+{{2788429795210564422ull, 229349861599007ull}},
+{{10617586934460058019ull, 114674930799503ull}},
+{{14532165504084804817ull, 57337465399751ull}},
+{{17320595299295369240ull, 286687326998758ull}},
+{{8660297649647684620ull, 143343663499379ull}},
+{{13553520861678618118ull, 71671831749689ull}},
+{{12427372087264435742ull, 358359158748448ull}},
+{{6213686043632217871ull, 179179579374224ull}},
+{{3106843021816108935ull, 89589789687112ull}},
+{{15534215109080544677ull, 447948948435560ull}},
+{{7767107554540272338ull, 223974474217780ull}},
+{{3883553777270136169ull, 111987237108890ull}},
+{{971024812641129231ull, 559936185544451ull}},
+{{9708884443175340423ull, 279968092772225ull}},
+{{14077814258442446019ull, 139984046386112ull}},
+{{7038907129221223009ull, 69992023193056ull}},
+{{16747791572396563433ull, 349960115965281ull}},
+{{17597267823053057524ull, 174980057982640ull}},
+{{8798633911526528762ull, 87490028991320ull}},
+{{7099681410213540580ull, 437450144956602ull}},
+{{3549840705106770290ull, 218725072478301ull}},
+{{10998292389408160953ull, 109362536239150ull}},
+{{18097973799621701533ull, 546812681195752ull}},
+{{9048986899810850766ull, 273406340597876ull}},
+{{4524493449905425383ull, 136703170298938ull}},
+{{2262246724952712691ull, 68351585149469ull}},
+{{11311233624763563458ull, 341757925747345ull}},
+{{14878988849236557537ull, 170878962873672ull}},
+{{7439494424618278768ull, 85439481436836ull}},
+{{303983975672290610ull, 427197407184182ull}},
+{{151991987836145305ull, 213598703592091ull}},
+{{9299368030772848460ull, 106799351796045ull}},
+{{9603352006445139071ull, 533996758980227ull}},
+{{14025048040077345343ull, 266998379490113ull}},
+{{16235896056893448479ull, 133499189745056ull}},
+{{8117948028446724239ull, 66749594872528ull}},
+{{3696251994814517967ull, 333747974362642ull}},
+{{1848125997407258983ull, 166873987181321ull}},
+{{10147435035558405299ull, 83436993590660ull}},
+{{13843687030372923267ull, 417184967953302ull}},
+{{6921843515186461633ull, 208592483976651ull}},
+{{12684293794448006624ull, 104296241988325ull}},
+{{8081236751111378276ull, 521481209941628ull}},
+{{4040618375555689138ull, 260740604970814ull}},
+{{2020309187777844569ull, 130370302485407ull}},
+{{10233526630743698092ull, 65185151242703ull}},
+{{14274145006299387230ull, 325925756213517ull}},
+{{16360444540004469423ull, 162962878106758ull}},
+{{8180222270002234711ull, 81481439053379ull}},
+{{4007623202592070326ull, 407407195266897ull}},
+{{11227183638150810971ull, 203703597633448ull}},
+{{5613591819075405485ull, 101851798816724ull}},
+{{9621215021667475812ull, 509258994083621ull}},
+{{14033979547688513714ull, 254629497041810ull}},
+{{7016989773844256857ull, 127314748520905ull}},
+{{12731866923776904236ull, 63657374260452ull}},
+{{8319102397755866334ull, 318286871302263ull}},
+{{13382923235732708975ull, 159143435651131ull}},
+{{15914833654721130295ull, 79571717825565ull}},
+{{5787191978767445014ull, 397858589127829ull}},
+{{12116968026238498315ull, 198929294563914ull}},
+{{6058484013119249157ull, 99464647281957ull}},
+{{11845675991886694171ull, 497323236409786ull}},
+{{5922837995943347085ull, 248661618204893ull}},
+{{12184791034826449350ull, 124330809102446ull}},
+{{6092395517413224675ull, 62165404551223ull}},
+{{12015233513356571761ull, 310827022756116ull}},
+{{6007616756678285880ull, 155413511378058ull}},
+{{3003808378339142940ull, 77706755689029ull}},
+{{15019041891695714701ull, 388533778445145ull}},
+{{16732892982702633158ull, 194266889222572ull}},
+{{8366446491351316579ull, 97133444611286ull}},
+{{4938744309337479665ull, 485667223056432ull}},
+{{2469372154668739832ull, 242833611528216ull}},
+{{1234686077334369916ull, 121416805764108ull}},
+{{617343038667184958ull, 60708402882054ull}},
+{{3086715193335924790ull, 303542014410270ull}},
+{{1543357596667962395ull, 151771007205135ull}},
+{{9995050835188757005ull, 75885503602567ull}},
+{{13081766028524681796ull, 379427518012837ull}},
+{{15764255051117116706ull, 189713759006418ull}},
+{{7882127525558558353ull, 94856879503209ull}},
+{{2517149480373688533ull, 474284397516047ull}},
+{{10481946777041620074ull, 237142198758023ull}},
+{{14464345425375585845ull, 118571099379011ull}},
+{{16455544749542568730ull, 59285549689505ull}},
+{{8490747452874637189ull, 296427748447529ull}},
+{{13468745763292094402ull, 148213874223764ull}},
+{{6734372881646047201ull, 74106937111882ull}},
+{{15225120334520684390ull, 370534685559411ull}},
+{{16835932204115118003ull, 185267342779705ull}},
+{{17641338138912334809ull, 92633671389852ull}},
+{{14419714399723467584ull, 463168356949264ull}},
+{{7209857199861733792ull, 231584178474632ull}},
+{{3604928599930866896ull, 115792089237316ull}},
+{{1802464299965433448ull, 57896044618658ull}},
+{{9012321499827167240ull, 289480223093290ull}},
+{{4506160749913583620ull, 144740111546645ull}},
+{{11476452411811567618ull, 72370055773322ull}},
+{{2042029837929183242ull, 361850278866613ull}},
+{{10244386955819367429ull, 180925139433306ull}},
+{{5122193477909683714ull, 90462569716653ull}},
+{{7164223315838866956ull, 452312848583266ull}},
+{{3582111657919433478ull, 226156424291633ull}},
+{{11014427865814492547ull, 113078212145816ull}},
+{{5507213932907246273ull, 56539106072908ull}},
+{{9089325590826679752ull, 282695530364541ull}},
+{{13768034832268115684ull, 141347765182270ull}},
+{{6884017416134057842ull, 70673882591135ull}},
+{{15973343006960737594ull, 353369412955676ull}},
+{{7986671503480368797ull, 176684706477838ull}},
+{{3993335751740184398ull, 88342353238919ull}},
+{{1519934684991370376ull, 441711766194596ull}},
+{{759967342495685188ull, 220855883097298ull}},
+{{379983671247842594ull, 110427941548649ull}},
+{{1899918356239212970ull, 552139707743245ull}},
+{{10173331214974382293ull, 276069853871622ull}},
+{{5086665607487191146ull, 138034926935811ull}},
+{{11766704840598371381ull, 69017463467905ull}},
+{{3493291981863202058ull, 345087317339528ull}},
+{{1746645990931601029ull, 172543658669764ull}},
+{{873322995465800514ull, 86271829334882ull}},
+{{4366614977329002573ull, 431359146674410ull}},
+{{2183307488664501286ull, 215679573337205ull}},
+{{10315025781187026451ull, 107839786668602ull}},
+{{14681640758516029024ull, 539198933343012ull}},
+{{7340820379258014512ull, 269599466671506ull}},
+{{3670410189629007256ull, 134799733335753ull}},
+{{11058577131669279436ull, 67399866667876ull}},
+{{18399397510927293948ull, 336999333339382ull}},
+{{9199698755463646974ull, 168499666669691ull}},
+{{13823221414586599295ull, 84249833334845ull}},
+{{13775874851804341627ull, 421249166674228ull}},
+{{6887937425902170813ull, 210624583337114ull}},
+{{3443968712951085406ull, 105312291668557ull}},
+{{17219843564755427034ull, 526561458342785ull}},
+{{17833293819232489325ull, 263280729171392ull}},
+{{8916646909616244662ull, 131640364585696ull}},
+{{4458323454808122331ull, 65820182292848ull}},
+{{3844873200331060040ull, 329100911464241ull}},
+{{11145808637020305828ull, 164550455732120ull}},
+{{5572904318510152914ull, 82275227866060ull}},
+{{9417777518841212954ull, 411376139330301ull}},
+{{13932260796275382285ull, 205688069665150ull}},
+{{6966130398137691142ull, 102844034832575ull}},
+{{16383907916978904097ull, 514220174162876ull}},
+{{8191953958489452048ull, 257110087081438ull}},
+{{4095976979244726024ull, 128555043540719ull}},
+{{11271360526477138820ull, 64277521770359ull}},
+{{1016570411257039252ull, 321387608851798ull}},
+{{508285205628519626ull, 160693804425899ull}},
+{{9477514639669035621ull, 80346902212949ull}},
+{{10494085050926074874ull, 401734511064747ull}},
+{{14470414562317813245ull, 200867255532373ull}},
+{{16458579318013682430ull, 100433627766186ull}},
+{{8505920295230205688ull, 502168138830934ull}},
+{{4252960147615102844ull, 251084069415467ull}},
+{{11349852110662327230ull, 125542034707733ull}},
+{{14898298092185939423ull, 62771017353866ull}},
+{{704514166091490651ull, 313855086769334ull}},
+{{352257083045745325ull, 156927543384667ull}},
+{{9399500578377648470ull, 78463771692333ull}},
+{{10104014744469139122ull, 392318858461667ull}},
+{{14275379409089345369ull, 196159429230833ull}},
+{{16361061741399448492ull, 98079714615416ull}},
+{{8018332412159035998ull, 490398573077084ull}},
+{{4009166206079517999ull, 245199286538542ull}},
+{{2004583103039758999ull, 122599643269271ull}},
+{{10225663588374655307ull, 61299821634635ull}},
+{{14234829794454173307ull, 306499108173177ull}},
+{{16340786934081862461ull, 153249554086588ull}},
+{{8170393467040931230ull, 76624777043294ull}},
+{{3958479187785552922ull, 383123885216472ull}},
+{{1979239593892776461ull, 191561942608236ull}},
+{{989619796946388230ull, 95780971304118ull}},
+{{4948098984731941152ull, 478904856520590ull}},
+{{2474049492365970576ull, 239452428260295ull}},
+{{10460396783037761096ull, 119726214130147ull}},
+{{14453570428373656356ull, 59863107065073ull}},
+{{16927619920739626932ull, 299315535325368ull}},
+{{8463809960369813466ull, 149657767662684ull}},
+{{4231904980184906733ull, 74828883831342ull}},
+{{2712780827214982049ull, 374144419156711ull}},
+{{10579762450462266832ull, 187072209578355ull}},
+{{14513253262085909224ull, 93536104789177ull}},
+{{17226034089300891273ull, 467680523945888ull}},
+{{8613017044650445636ull, 233840261972944ull}},
+{{4306508522325222818ull, 116920130986472ull}},
+{{2153254261162611409ull, 58460065493236ull}},
+{{10766271305813057046ull, 292300327466180ull}},
+{{5383135652906528523ull, 146150163733090ull}},
+{{2691567826453264261ull, 73075081866545ull}},
+{{13457839132266321307ull, 365375409332725ull}},
+{{15952291602987936461ull, 182687704666362ull}},
+{{7976145801493968230ull, 91343852333181ull}},
+{{2987240860050737922ull, 456719261665907ull}},
+{{10716992466880144769ull, 228359630832953ull}},
+{{14581868270294848192ull, 114179815416476ull}},
+{{7290934135147424096ull, 57089907708238ull}},
+{{18007926602027568865ull, 285449538541191ull}},
+{{18227335337868560240ull, 142724769270595ull}},
+{{18337039705789055928ull, 71362384635297ull}},
+{{17898222234107073178ull, 356811923176489ull}},
+{{18172483153908312397ull, 178405961588244ull}},
+{{9086241576954156198ull, 89202980794122ull}},
+{{8537719737351677760ull, 446014903970612ull}},
+{{4268859868675838880ull, 223007451985306ull}},
+{{2134429934337919440ull, 111503725992653ull}},
+{{10672149671689597200ull, 557518629963265ull}},
+{{14559446872699574408ull, 278759314981632ull}},
+{{7279723436349787204ull, 139379657490816ull}},
+{{3639861718174893602ull, 69689828745408ull}},
+{{18199308590874468010ull, 348449143727040ull}},
+{{9099654295437234005ull, 174224571863520ull}},
+{{4549827147718617002ull, 87112285931760ull}},
+{{4302391664883533397ull, 435561429658801ull}},
+{{11374567869296542506ull, 217780714829400ull}},
+{{5687283934648271253ull, 108890357414700ull}},
+{{9989675599531804650ull, 544451787073501ull}},
+{{14218209836620678133ull, 272225893536750ull}},
+{{7109104918310339066ull, 136112946768375ull}},
+{{12777924496009945341ull, 68056473384187ull}},
+{{8549390258921071858ull, 340282366920938ull}},
+{{4274695129460535929ull, 170141183460469ull}},
+{{11360719601585043772ull, 85070591730234ull}},
+{{1463365786796564015ull, 425352958651173ull}},
+{{9955054930253057815ull, 212676479325586ull}},
+{{4977527465126528907ull, 106338239662793ull}},
+{{6440893251923092922ull, 531691198313966ull}},
+{{3220446625961546461ull, 265845599156983ull}},
+{{10833595349835549038ull, 132922799578491ull}},
+{{14640169711772550327ull, 66461399789245ull}},
+{{17860616337734096788ull, 332306998946228ull}},
+{{8930308168867048394ull, 166153499473114ull}},
+{{4465154084433524197ull, 83076749736557ull}},
+{{3879026348458069369ull, 415383748682786ull}},
+{{1939513174229034684ull, 207691874341393ull}},
+{{10193128623969293150ull, 103845937170696ull}},
+{{14072154972427362520ull, 519229685853482ull}},
+{{7036077486213681260ull, 259614842926741ull}},
+{{12741410779961616438ull, 129807421463370ull}},
+{{6370705389980808219ull, 64903710731685ull}},
+{{13406782876194489479ull, 324518553658426ull}},
+{{6703391438097244739ull, 162259276829213ull}},
+{{12575067755903398177ull, 81129638414606ull}},
+{{7535106558388336041ull, 405648192073033ull}},
+{{12990925316048943828ull, 202824096036516ull}},
+{{6495462658024471914ull, 101412048018258ull}},
+{{14030569216412807955ull, 507060240091291ull}},
+{{16238656645061179785ull, 253530120045645ull}},
+{{17342700359385365700ull, 126765060022822ull}},
+{{8671350179692682850ull, 63382530011411ull}},
+{{6463262751044311020ull, 316912650057057ull}},
+{{12455003412376931318ull, 158456325028528ull}},
+{{6227501706188465659ull, 79228162514264ull}},
+{{12690764457232776679ull, 396140812571321ull}},
+{{15568754265471164147ull, 198070406285660ull}},
+{{7784377132735582073ull, 99035203142830ull}},
+{{2028397516258807136ull, 495176015714152ull}},
+{{1014198758129403568ull, 247588007857076ull}},
+{{507099379064701784ull, 123794003928538ull}},
+{{253549689532350892ull, 61897001964269ull}},
+{{1267748447661754460ull, 309485009821345ull}},
+{{9857246260685653038ull, 154742504910672ull}},
+{{4928623130342826519ull, 77371252455336ull}},
+{{6196371578004580979ull, 386856262276681ull}},
+{{12321557825857066297ull, 193428131138340ull}},
+{{6160778912928533148ull, 96714065569170ull}},
+{{12357150490933114128ull, 483570327845851ull}},
+{{15401947282321332872ull, 241785163922925ull}},
+{{16924345678015442244ull, 120892581961462ull}},
+{{8462172839007721122ull, 60446290980731ull}},
+{{5417376047619502378ull, 302231454903657ull}},
+{{11932060060664526997ull, 151115727451828ull}},
+{{5966030030332263498ull, 75557863725914ull}},
+{{11383406077951765876ull, 377789318629571ull}},
+{{14915075075830658746ull, 188894659314785ull}},
+{{16680909574770105181ull, 94447329657392ull}},
+{{9617571579012319442ull, 472236648286964ull}},
+{{4808785789506159721ull, 236118324143482ull}},
+{{2404392894753079860ull, 118059162071741ull}},
+{{10425568484231315738ull, 59029581035870ull}},
+{{15234354273737475459ull, 295147905179352ull}},
+{{7617177136868737729ull, 147573952589676ull}},
+{{3808588568434368864ull, 73786976294838ull}},
+{{596198768462292708ull, 368934881474191ull}},
+{{9521471421085922162ull, 184467440737095ull}},
+{{13984107747397736889ull, 92233720368547ull}},
+{{14580306515860029597ull, 461168601842738ull}},
+{{7290153257930014798ull, 230584300921369ull}},
+{{12868448665819783207ull, 115292150460684ull}},
+{{6434224332909891603ull, 57646075230342ull}},
+{{13724377590839906402ull, 288230376151711ull}},
+{{16085560832274729009ull, 144115188075855ull}},
+{{17266152452992140312ull, 72057594037927ull}},
+{{12543785970122495098ull, 360287970189639ull}},
+{{15495265021916023357ull, 180143985094819ull}},
+{{16971004547812787486ull, 90071992547409ull}},
+{{11068046444225730969ull, 450359962737049ull}},
+{{14757395258967641292ull, 225179981368524ull}},
+{{7378697629483820646ull, 112589990684262ull}},
+{{3689348814741910323ull, 56294995342131ull}},
+{{18446744073709551615ull, 281474976710655ull}},
+{{18446744073709551615ull, 140737488355327ull}},
+{{18446744073709551615ull, 70368744177663ull}},
+{{18446744073709551615ull, 351843720888319ull}},
+{{18446744073709551615ull, 175921860444159ull}},
+{{18446744073709551615ull, 87960930222079ull}},
+{{18446744073709551615ull, 439804651110399ull}},
+{{18446744073709551615ull, 219902325555199ull}},
+{{18446744073709551615ull, 109951162777599ull}},
+{{18446744073709551615ull, 549755813887999ull}},
+{{18446744073709551615ull, 274877906943999ull}},
+{{18446744073709551615ull, 137438953471999ull}},
+{{18446744073709551615ull, 68719476735999ull}},
+{{18446744073709551615ull, 343597383679999ull}},
+{{18446744073709551615ull, 171798691839999ull}},
+{{18446744073709551615ull, 85899345919999ull}},
+{{18446744073709551615ull, 429496729599999ull}},
+{{18446744073709551615ull, 214748364799999ull}},
+{{18446744073709551615ull, 107374182399999ull}},
+{{18446744073709551615ull, 536870911999999ull}},
+{{18446744073709551615ull, 268435455999999ull}},
+{{18446744073709551615ull, 134217727999999ull}},
+{{18446744073709551615ull, 67108863999999ull}},
+{{18446744073709551615ull, 335544319999999ull}},
+{{18446744073709551615ull, 167772159999999ull}},
+{{18446744073709551615ull, 83886079999999ull}},
+{{18446744073709551615ull, 419430399999999ull}},
+{{18446744073709551615ull, 209715199999999ull}},
+{{18446744073709551615ull, 104857599999999ull}},
+{{18446744073709551615ull, 524287999999999ull}},
+{{18446744073709551615ull, 262143999999999ull}},
+{{18446744073709551615ull, 131071999999999ull}},
+{{18446744073709551615ull, 65535999999999ull}},
+{{18446744073709551615ull, 327679999999999ull}},
+{{18446744073709551615ull, 163839999999999ull}},
+{{18446744073709551615ull, 81919999999999ull}},
+{{18446744073709551615ull, 409599999999999ull}},
+{{18446744073709551615ull, 204799999999999ull}},
+{{18446744073709551615ull, 102399999999999ull}},
+{{18446744073709551615ull, 511999999999999ull}},
+{{18446744073709551615ull, 255999999999999ull}},
+{{18446744073709551615ull, 127999999999999ull}},
+{{18446744073709551615ull, 63999999999999ull}},
+{{18446744073709551615ull, 319999999999999ull}},
+{{18446744073709551615ull, 159999999999999ull}},
+{{18446744073709551615ull, 79999999999999ull}},
+{{18446744073709551615ull, 399999999999999ull}},
+{{18446744073709551615ull, 199999999999999ull}},
+{{18446744073709551615ull, 99999999999999ull}},
+{{18446744073709551615ull, 499999999999999ull}},
+{{18446744073709551615ull, 249999999999999ull}},
+{{18446744073709551615ull, 124999999999999ull}},
+{{18446744073709551615ull, 62499999999999ull}},
+{{18446744073709551615ull, 312499999999999ull}},
+{{18446744073709551615ull, 156249999999999ull}},
+{{18446744073709551615ull, 78124999999999ull}},
+{{18446744073709551615ull, 390624999999999ull}},
+{{18446744073709551615ull, 195312499999999ull}},
+{{18446744073709551615ull, 97656249999999ull}},
+{{18446744073709551615ull, 488281249999999ull}},
+{{18446744073709551615ull, 244140624999999ull}},
+{{18446744073709551615ull, 122070312499999ull}},
+{{18446744073709551615ull, 61035156249999ull}},
+{{18446744073709551615ull, 305175781249999ull}},
+{{18446744073709551615ull, 152587890624999ull}},
+{{18446744073709551615ull, 76293945312499ull}},
+{{18446744073709551615ull, 381469726562499ull}},
+{{18446744073709551615ull, 190734863281249ull}},
+{{18446744073709551615ull, 95367431640624ull}},
+{{18446744073709551615ull, 476837158203124ull}},
+{{9223372036854775807ull, 238418579101562ull}},
+{{4611686018427387903ull, 119209289550781ull}},
+{{11529215046068469759ull, 59604644775390ull}},
+{{2305843009213693951ull, 298023223876953ull}},
+{{10376293541461622783ull, 149011611938476ull}},
+{{5188146770730811391ull, 74505805969238ull}},
+{{7493989779944505343ull, 372529029846191ull}},
+{{12970366926827028479ull, 186264514923095ull}},
+{{15708555500268290047ull, 93132257461547ull}},
+{{4755801206503243775ull, 465661287307739ull}},
+{{11601272640106397695ull, 232830643653869ull}},
+{{15024008356907974655ull, 116415321826934ull}},
+{{7512004178453987327ull, 58207660913467ull}},
+{{666532744850833407ull, 291038304567337ull}},
+{{9556638409280192511ull, 145519152283668ull}},
+{{4778319204640096255ull, 72759576141834ull}},
+{{5444851949490929663ull, 363797880709171ull}},
+{{11945798011600240639ull, 181898940354585ull}},
+{{15196271042654896127ull, 90949470177292ull}},
+{{2194378918436274175ull, 454747350886464ull}},
+{{1097189459218137087ull, 227373675443232ull}},
+{{548594729609068543ull, 113686837721616ull}},
+{{274297364804534271ull, 56843418860808ull}},
+{{1371486824022671359ull, 284217094304040ull}},
+{{685743412011335679ull, 142108547152020ull}},
+{{342871706005667839ull, 71054273576010ull}},
+{{1714358530028339199ull, 355271367880050ull}},
+{{857179265014169599ull, 177635683940025ull}},
+{{9651961669361860607ull, 88817841970012ull}},
+{{11366320199390199807ull, 444089209850062ull}},
+{{5683160099695099903ull, 222044604925031ull}},
+{{12064952086702325759ull, 111022302462515ull}},
+{{4984528212382973951ull, 555111512312578ull}},
+{{2492264106191486975ull, 277555756156289ull}},
+{{10469504089950519295ull, 138777878078144ull}},
+{{5234752044975259647ull, 69388939039072ull}},
+{{7727016151166746623ull, 346944695195361ull}},
+{{13086880112438149119ull, 173472347597680ull}},
+{{6543440056219074559ull, 86736173798840ull}},
+{{14270456207385821183ull, 433680868994201ull}},
+{{16358600140547686399ull, 216840434497100ull}},
+{{8179300070273843199ull, 108420217248550ull}},
+{{4003012203950112767ull, 542101086242752ull}},
+{{2001506101975056383ull, 271050543121376ull}},
+{{1000753050987528191ull, 135525271560688ull}},
+{{500376525493764095ull, 67762635780344ull}},
+{{2501882627468820479ull, 338813178901720ull}},
+{{1250941313734410239ull, 169406589450860ull}},
+{{625470656867205119ull, 84703294725430ull}},
+{{3127353284336025599ull, 423516473627150ull}},
+{{1563676642168012799ull, 211758236813575ull}},
+{{10005210357938782207ull, 105879118406787ull}},
+{{13132563642274807807ull, 529395592033937ull}},
+{{15789653857992179711ull, 264697796016968ull}},
+{{7894826928996089855ull, 132348898008484ull}},
+{{3947413464498044927ull, 66174449004242ull}},
+{{1290323248780673023ull, 330872245021211ull}},
+{{9868533661245112319ull, 165436122510605ull}},
+{{14157638867477331967ull, 82718061255302ull}},
+{{15447962116258004991ull, 413590306276513ull}},
+{{16947353094983778303ull, 206795153138256ull}},
+{{8473676547491889151ull, 103397576569128ull}},
+{{5474894590040342527ull, 516987882845642ull}},
+{{2737447295020171263ull, 258493941422821ull}},
+{{10592095684364861439ull, 129246970711410ull}},
+{{5296047842182430719ull, 64623485355705ull}},
+{{8033495137202601983ull, 323117426778526ull}},
+{{4016747568601300991ull, 161558713389263ull}},
+{{11231745821155426303ull, 80779356694631ull}},
+{{818496884648476671ull, 403896783473158ull}},
+{{409248442324238335ull, 201948391736579ull}},
+{{9427996258016894975ull, 100974195868289ull}},
+{{10246493142665371647ull, 504870979341447ull}},
+{{14346618608187461631ull, 252435489670723ull}},
+{{16396681340948506623ull, 126217744835361ull}},
+{{17421712707329029119ull, 63108872417680ull}},
+{{13321587241806939135ull, 315544362088404ull}},
+{{6660793620903469567ull, 157772181044202ull}},
+{{3330396810451734783ull, 78886090522101ull}},
+{{16651984052258673919ull, 394430452610505ull}},
+{{17549364062984112767ull, 197215226305252ull}},
+{{8774682031492056383ull, 98607613152626ull}},
+{{6979922010041178687ull, 493038065763132ull}},
+{{3489961005020589343ull, 246519032881566ull}},
+{{1744980502510294671ull, 123259516440783ull}},
+{{10095862288109923143ull, 61629758220391ull}},
+{{13585823293130512487ull, 308148791101957ull}},
+{{16016283683420032051ull, 154074395550978ull}},
+{{8008141841710016025ull, 77037197775489ull}},
+{{3147221061130976897ull, 385185988877447ull}},
+{{10796982567420264256ull, 192592994438723ull}},
+{{14621863320564907936ull, 96296497219361ull}},
+{{17769084381695884834ull, 481482486096808ull}},
+{{8884542190847942417ull, 240741243048404ull}},
+{{4442271095423971208ull, 120370621524202ull}},
+{{2221135547711985604ull, 60185310762101ull}},
+{{11105677738559928021ull, 300926553810505ull}},
+{{14776210906134739818ull, 150463276905252ull}},
+{{7388105453067369909ull, 75231638452626ull}},
+{{47039117917746314ull, 376158192263132ull}},
+{{23519558958873157ull, 188079096131566ull}},
+{{11759779479436578ull, 94039548065783ull}},
+{{58798897397182893ull, 470197740328915ull}},
+{{9252771485553367254ull, 235098870164457ull}},
+{{13849757779631459435ull, 117549435082228ull}},
+{{6924878889815729717ull, 58774717541114ull}},
+{{16177650375369096972ull, 293873587705571ull}},
+{{17312197224539324294ull, 146936793852785ull}},
+{{17879470649124437955ull, 73468396926392ull}},
+{{15610376950783983311ull, 367341984631964ull}},
+{{7805188475391991655ull, 183670992315982ull}},
+{{3902594237695995827ull, 91835496157991ull}},
+{{1066227114770427523ull, 459177480789956ull}},
+{{533113557385213761ull, 229588740394978ull}},
+{{266556778692606880ull, 114794370197489ull}},
+{{9356650426201079248ull, 57397185098744ull}},
+{{9889763983586293010ull, 286985925493722ull}},
+{{4944881991793146505ull, 143492962746861ull}},
+{{11695813032751349060ull, 71746481373430ull}},
+{{3138832942628090454ull, 358732406867153ull}},
+{{10792788508168821035ull, 179366203433576ull}},
+{{5396394254084410517ull, 89683101716788ull}},
+{{8535227196712500972ull, 448415508583941ull}},
+{{13490985635211026294ull, 224207754291970ull}},
+{{6745492817605513147ull, 112103877145985ull}},
+{{15280720014318014119ull, 560519385729926ull}},
+{{7640360007159007059ull, 280259692864963ull}},
+{{13043552040434279337ull, 140129846432481ull}},
+{{15745148057071915476ull, 70064923216240ull}},
+{{4938763990521370920ull, 350324616081204ull}},
+{{2469381995260685460ull, 175162308040602ull}},
+{{1234690997630342730ull, 87581154020301ull}},
+{{6173454988151713650ull, 437905770101505ull}},
+{{12310099530930632633ull, 218952885050752ull}},
+{{6155049765465316316ull, 109476442525376ull}},
+{{12328504753617029967ull, 547382212626881ull}},
+{{15387624413663290791ull, 273691106313440ull}},
+{{7693812206831645395ull, 136845553156720ull}},
+{{3846906103415822697ull, 68422776578360ull}},
+{{787786443369561873ull, 342113882891801ull}},
+{{9617265258539556744ull, 171056941445900ull}},
+{{4808632629269778372ull, 85528470722950ull}},
+{{5596419072639340246ull, 427642353614751ull}},
+{{12021581573174445931ull, 213821176807375ull}},
+{{15234162823441998773ull, 106910588403687ull}},
+{{2383837822371787403ull, 534552942018439ull}},
+{{10415290948040669509ull, 267276471009219ull}},
+{{14431017510875110562ull, 133638235504609ull}},
+{{16438880792292331089ull, 66819117752304ull}},
+{{8407427666623448983ull, 334095588761524ull}},
+{{4203713833311724491ull, 167047794380762ull}},
+{{2101856916655862245ull, 83523897190381ull}},
+{{10509284583279311229ull, 417619485951905ull}},
+{{14478014328494431422ull, 208809742975952ull}},
+{{7239007164247215711ull, 104404871487976ull}},
+{{17748291747526526940ull, 522024357439881ull}},
+{{18097517910618039278ull, 261012178719940ull}},
+{{9048758955309019639ull, 130506089359970ull}},
+{{4524379477654509819ull, 65253044679985ull}},
+{{4175153314562997481ull, 326265223399926ull}},
+{{2087576657281498740ull, 163132611699963ull}},
+{{10267160365495525178ull, 81566305849981ull}},
+{{14442313680058522660ull, 407831529249907ull}},
+{{16444528876884037138ull, 203915764624953ull}},
+{{17445636475296794377ull, 101957882312476ull}},
+{{13441206081645765421ull, 509789411562384ull}},
+{{6720603040822882710ull, 254894705781192ull}},
+{{3360301520411441355ull, 127447352890596ull}},
+{{1680150760205720677ull, 63723676445298ull}},
+{{8400753801028603388ull, 318618382226490ull}},
+{{4200376900514301694ull, 159309191113245ull}},
+{{11323560487111926655ull, 79654595556622ull}},
+{{1277570214430978427ull, 398272977783113ull}},
+{{9862157144070265021ull, 199136488891556ull}},
+{{4931078572035132510ull, 99568244445778ull}},
+{{6208648786466110938ull, 497841222228891ull}},
+{{12327696430087831277ull, 248920611114445ull}},
+{{15387220251898691446ull, 124460305557222ull}},
+{{7693610125949345723ull, 62230152778611ull}},
+{{1574562482327625384ull, 311150763893057ull}},
+{{10010653278018588500ull, 155575381946528ull}},
+{{5005326639009294250ull, 77787690973264ull}},
+{{6579889121336919634ull, 388938454866321ull}},
+{{12513316597523235625ull, 194469227433160ull}},
+{{6256658298761617812ull, 97234613716580ull}},
+{{12836547420098537447ull, 486173068582901ull}},
+{{15641645746904044531ull, 243086534291450ull}},
+{{7820822873452022265ull, 121543267145725ull}},
+{{13133783473580786940ull, 60771633572862ull}},
+{{10328685146775279856ull, 303858167864313ull}},
+{{14387714610242415736ull, 151929083932156ull}},
+{{7193857305121207868ull, 75964541966078ull}},
+{{17522542451896487724ull, 379822709830391ull}},
+{{17984643262803019670ull, 189911354915195ull}},
+{{18215693668256285643ull, 94955677457597ull}},
+{{17291492046443221751ull, 474778387287989ull}},
+{{17869118060076386683ull, 237389193643994ull}},
+{{8934559030038193341ull, 118694596821997ull}},
+{{13690651551873872478ull, 59347298410998ull}},
+{{13113025538240707546ull, 296736492054993ull}},
+{{15779884805975129581ull, 148368246027496ull}},
+{{7889942402987564790ull, 74184123013748ull}},
+{{2556223867518720721ull, 370920615068742ull}},
+{{1278111933759360360ull, 185460307534371ull}},
+{{9862428003734455988ull, 92730153767185ull}},
+{{12418651871253176710ull, 463650768835927ull}},
+{{15432697972481364163ull, 231825384417963ull}},
+{{16939721023095457889ull, 115912692208981ull}},
+{{17693232548402504752ull, 57956346104490ull}},
+{{14679186447174317299ull, 289781730522454ull}},
+{{7339593223587158649ull, 144890865261227ull}},
+{{12893168648648355132ull, 72445432630613ull}},
+{{9125611022113120816ull, 362227163153068ull}},
+{{4562805511056560408ull, 181113581576534ull}},
+{{2281402755528280204ull, 90556790788267ull}},
+{{11407013777641401020ull, 452783953941335ull}},
+{{14926878925675476318ull, 226391976970667ull}},
+{{16686811499692513967ull, 113195988485333ull}},
+{{17566777786701032791ull, 56597994242666ull}},
+{{14046912638666957494ull, 282989971213334ull}},
+{{7023456319333478747ull, 141494985606667ull}},
+{{12735100196521515181ull, 70747492803333ull}},
+{{8335268761478921059ull, 353737464016668ull}},
+{{4167634380739460529ull, 176868732008334ull}},
+{{2083817190369730264ull, 88434366004167ull}},
+{{10419085951848651324ull, 442171830020835ull}},
+{{14432915012779101470ull, 221085915010417ull}},
+{{16439829543244326543ull, 110542957505208ull}},
+{{8412171421383426251ull, 552714787526044ull}},
+{{4206085710691713125ull, 276357393763022ull}},
+{{2103042855345856562ull, 138178696881511ull}},
+{{10274893464527704089ull, 69089348440755ull}},
+{{14480979175219417215ull, 345446742203777ull}},
+{{16463861624464484415ull, 172723371101888ull}},
+{{8231930812232242207ull, 86361685550944ull}},
+{{4266165913742107807ull, 431808427754722ull}},
+{{2133082956871053903ull, 215904213877361ull}},
+{{10289913515290302759ull, 107952106938680ull}},
+{{14556079429032410566ull, 539760534693402ull}},
+{{7278039714516205283ull, 269880267346701ull}},
+{{12862391894112878449ull, 134940133673350ull}},
+{{6431195947056439224ull, 67470066836675ull}},
+{{13709235661572644508ull, 337350334183376ull}},
+{{6854617830786322254ull, 168675167091688ull}},
+{{3427308915393161127ull, 84337583545844ull}},
+{{17136544576965805635ull, 421687917729220ull}},
+{{8568272288482902817ull, 210843958864610ull}},
+{{4284136144241451408ull, 105421979432305ull}},
+{{2973936647497705428ull, 527109897161526ull}},
+{{1486968323748852714ull, 263554948580763ull}},
+{{9966856198729202165ull, 131777474290381ull}},
+{{14206800136219376890ull, 65888737145190ull}},
+{{15693768459968229604ull, 329443685725953ull}},
+{{17070256266838890610ull, 164721842862976ull}}
+};
+
+static const int exponents_bid32[] = { -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 2,
+ 2,
+ 2,
+ 3,
+ 3,
+ 3,
+ 3,
+ 4,
+ 4,
+ 4,
+ 5,
+ 5,
+ 5,
+ 6,
+ 6,
+ 6,
+ 7,
+ 7,
+ 7,
+ 7,
+ 8,
+ 8,
+ 8,
+ 9,
+ 9,
+ 9,
+ 10,
+ 10,
+ 10,
+ 10,
+ 11,
+ 11,
+ 11,
+ 12,
+ 12,
+ 12,
+ 13,
+ 13,
+ 13,
+ 13,
+ 14,
+ 14,
+ 14,
+ 15,
+ 15,
+ 15,
+ 16,
+ 16,
+ 16,
+ 16,
+ 17,
+ 17,
+ 17,
+ 18,
+ 18,
+ 18,
+ 19,
+ 19,
+ 19,
+ 19,
+ 20,
+ 20,
+ 20,
+ 21,
+ 21,
+ 21,
+ 22,
+ 22,
+ 22,
+ 22,
+ 23,
+ 23,
+ 23,
+ 24,
+ 24,
+ 24,
+ 25,
+ 25,
+ 25,
+ 25,
+ 26,
+ 26,
+ 26,
+ 27,
+ 27,
+ 27,
+ 28,
+ 28,
+ 28,
+ 28,
+ 29,
+ 29,
+ 29,
+ 30,
+ 30,
+ 30,
+ 31,
+ 31,
+ 31,
+ 31,
+ 32,
+ 32,
+ 32,
+ 33,
+ 33,
+ 33,
+ 34,
+ 34,
+ 34,
+ 34,
+ 35,
+ 35,
+ 35,
+ 36,
+ 36,
+ 36,
+ 37,
+ 37,
+ 37,
+ 38,
+ 38,
+ 38,
+ 38,
+ 39,
+ 39,
+ 39,
+ 40,
+ 40,
+ 40,
+ 41,
+ 41,
+ 41,
+ 41,
+ 42,
+ 42,
+ 42,
+ 43,
+ 43,
+ 43,
+ 44,
+ 44,
+ 44,
+ 44,
+ 45,
+ 45,
+ 45,
+ 46,
+ 46,
+ 46,
+ 47,
+ 47,
+ 47,
+ 47,
+ 48,
+ 48,
+ 48,
+ 49,
+ 49,
+ 49,
+ 50,
+ 50,
+ 50,
+ 50,
+ 51,
+ 51,
+ 51,
+ 52,
+ 52,
+ 52,
+ 53,
+ 53,
+ 53,
+ 53,
+ 54,
+ 54,
+ 54,
+ 55,
+ 55,
+ 55,
+ 56,
+ 56,
+ 56,
+ 56,
+ 57,
+ 57,
+ 57,
+ 58,
+ 58,
+ 58,
+ 59,
+ 59,
+ 59,
+ 59,
+ 60,
+ 60,
+ 60,
+ 61,
+ 61,
+ 61,
+ 62,
+ 62,
+ 62,
+ 62,
+ 63,
+ 63,
+ 63,
+ 64,
+ 64,
+ 64,
+ 65,
+ 65,
+ 65,
+ 66,
+ 66,
+ 66,
+ 66,
+ 67,
+ 67,
+ 67,
+ 68,
+ 68,
+ 68,
+ 69,
+ 69,
+ 69,
+ 69,
+ 70,
+ 70,
+ 70,
+ 71,
+ 71,
+ 71,
+ 72,
+ 72,
+ 72,
+ 72,
+ 73,
+ 73,
+ 73,
+ 74,
+ 74,
+ 74,
+ 75,
+ 75,
+ 75,
+ 75,
+ 76,
+ 76,
+ 76,
+ 77,
+ 77,
+ 77,
+ 78,
+ 78,
+ 78,
+ 78,
+ 79,
+ 79,
+ 79,
+ 80,
+ 80,
+ 80,
+ 81,
+ 81,
+ 81,
+ 81,
+ 82,
+ 82,
+ 82,
+ 83,
+ 83,
+ 83,
+ 84,
+ 84,
+ 84,
+ 84,
+ 85,
+ 85,
+ 85,
+ 86,
+ 86,
+ 86,
+ 87,
+ 87,
+ 87,
+ 87,
+ 88,
+ 88,
+ 88,
+ 89,
+ 89,
+ 89,
+ 90,
+ 90,
+ 90,
+ 90,
+ 91,
+ 91,
+ 91,
+ 92,
+ 92,
+ 92,
+ 93,
+ 93,
+ 93,
+ 93,
+ 94,
+ 94,
+ 94,
+ 95,
+ 95,
+ 95,
+ 96,
+ 96,
+ 96,
+ 97,
+ 97,
+ 97,
+ 97,
+ 98,
+ 98,
+ 98,
+ 99,
+ 99,
+ 99,
+ 100,
+ 100,
+ 100,
+ 100,
+ 101,
+ 101,
+ 101,
+ 102,
+ 102,
+ 102,
+ 103,
+ 103,
+ 103,
+ 103,
+ 104,
+ 104,
+ 104,
+ 105,
+ 105,
+ 105,
+ 106,
+ 106,
+ 106,
+ 106,
+ 107,
+ 107,
+ 107,
+ 108,
+ 108,
+ 108,
+ 109,
+ 109,
+ 109,
+ 109,
+ 110,
+ 110,
+ 110,
+ 111,
+ 111,
+ 111,
+ 112,
+ 112,
+ 112,
+ 112,
+ 113,
+ 113,
+ 113,
+ 114,
+ 114,
+ 114,
+ 115,
+ 115,
+ 115,
+ 115,
+ 116,
+ 116,
+ 116,
+ 117,
+ 117,
+ 117,
+ 118,
+ 118,
+ 118,
+ 118,
+ 119,
+ 119,
+ 119,
+ 120,
+ 120,
+ 120,
+ 121,
+ 121,
+ 121,
+ 121,
+ 122,
+ 122,
+ 122,
+ 123,
+ 123,
+ 123,
+ 124,
+ 124,
+ 124,
+ 125,
+ 125,
+ 125,
+ 125,
+ 126,
+ 126,
+ 126,
+ 127,
+ 127,
+ 127,
+ 128,
+ 128,
+ 128,
+ 128,
+ 129,
+ 129,
+ 129,
+ 130,
+ 130,
+ 130,
+ 131,
+ 131,
+ 131,
+ 131,
+ 132,
+ 132,
+ 132,
+ 133,
+ 133,
+ 133,
+ 134,
+ 134,
+ 134,
+ 134,
+ 135,
+ 135,
+ 135,
+ 136,
+ 136,
+ 136,
+ 137,
+ 137,
+ 137,
+ 137,
+ 138,
+ 138,
+ 138,
+ 139,
+ 139,
+ 139,
+ 140,
+ 140,
+ 140,
+ 140,
+ 141,
+ 141,
+ 141,
+ 142,
+ 142,
+ 142,
+ 143,
+ 143,
+ 143,
+ 143,
+ 144,
+ 144,
+ 144,
+ 145,
+ 145,
+ 145,
+ 146,
+ 146,
+ 146,
+ 146,
+ 147,
+ 147,
+ 147,
+ 148,
+ 148,
+ 148,
+ 149,
+ 149,
+ 149,
+ 149,
+ 150,
+ 150,
+ 150,
+ 151,
+ 151,
+ 151,
+ 152,
+ 152,
+ 152,
+ 153,
+ 153,
+ 153,
+ 153,
+ 154,
+ 154,
+ 154,
+ 155,
+ 155,
+ 155,
+ 156,
+ 156,
+ 156,
+ 156,
+ 157,
+ 157,
+ 157,
+ 158,
+ 158,
+ 158,
+ 159,
+ 159,
+ 159,
+ 159,
+ 160,
+ 160,
+ 160,
+ 161,
+ 161,
+ 161,
+ 162,
+ 162,
+ 162,
+ 162,
+ 163,
+ 163,
+ 163,
+ 164,
+ 164,
+ 164,
+ 165,
+ 165,
+ 165,
+ 165,
+ 166,
+ 166,
+ 166,
+ 167,
+ 167,
+ 167,
+ 168,
+ 168,
+ 168,
+ 168,
+ 169,
+ 169,
+ 169,
+ 170,
+ 170,
+ 170,
+ 171,
+ 171,
+ 171,
+ 171,
+ 172,
+ 172,
+ 172,
+ 173,
+ 173,
+ 173,
+ 174,
+ 174,
+ 174,
+ 174,
+ 175,
+ 175,
+ 175,
+ 176,
+ 176,
+ 176,
+ 177,
+ 177,
+ 177,
+ 177,
+ 178,
+ 178,
+ 178,
+ 179,
+ 179,
+ 179,
+ 180,
+ 180,
+ 180,
+ 180,
+ 181,
+ 181,
+ 181,
+ 182,
+ 182,
+ 182,
+ 183,
+ 183,
+ 183,
+ 184,
+ 184,
+ 184,
+ 184,
+ 185,
+ 185,
+ 185,
+ 186,
+ 186,
+ 186,
+ 187,
+ 187,
+ 187,
+ 187,
+ 188,
+ 188,
+ 188,
+ 189,
+ 189,
+ 189,
+ 190,
+ 190,
+ 190,
+ 190,
+ 191,
+ 191,
+};
+
+static const UINT256 multipliers1_bid32[] = { {{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{8022453891189237964ull, 4305922861044245892ull,
+ 15091728617112590342ull, 392727477223ull}},
+{{16044907782378475927ull, 8611845722088491784ull,
+ 11736713160515629068ull, 785454954447ull}},
+{{13643071491047400238ull, 17223691444176983569ull,
+ 5026682247321706520ull, 1570909908895ull}},
+{{8839398908385248859ull, 16000638814644415523ull,
+ 10053364494643413041ull, 3141819817790ull}},
+{{16525275040644691065ull, 6889476577670793427ull,
+ 2010672898928682608ull, 628363963558ull}},
+{{14603806007579830513ull, 13778953155341586855ull,
+ 4021345797857365216ull, 1256727927116ull}},
+{{10760867941450109410ull, 9111162236973622095ull,
+ 8042691595714730433ull, 2513455854232ull}},
+{{2152173588290021882ull, 1822232447394724419ull,
+ 8987235948626766733ull, 502691170846ull}},
+{{4304347176580043764ull, 3644464894789448838ull,
+ 17974471897253533466ull, 1005382341692ull}},
+{{8608694353160087528ull, 7288929789578897676ull,
+ 17502199720797515316ull, 2010764683385ull}},
+{{9100436500115838152ull, 5147134772657689858ull,
+ 3500439944159503063ull, 402152936677ull}},
+{{18200873000231676304ull, 10294269545315379716ull,
+ 7000879888319006126ull, 804305873354ull}},
+{{17955001926753800992ull, 2141795016921207817ull,
+ 14001759776638012253ull, 1608611746708ull}},
+{{17463259779798050368ull, 4283590033842415635ull,
+ 9556775479566472890ull, 3217223493417ull}},
+{{10871349585443430720ull, 8235415636252303773ull,
+ 9290052725397115224ull, 643444698683ull}},
+{{3295955097177309824ull, 16470831272504607547ull,
+ 133361377084678832ull, 1286889397367ull}},
+{{6591910194354619648ull, 14494918471299663478ull,
+ 266722754169357665ull, 2573778794734ull}},
+{{8697079668354744576ull, 17656378953227573988ull,
+ 14810739809801512825ull, 514755758946ull}},
+{{17394159336709489152ull, 16866013832745596360ull,
+ 11174735545893474035ull, 1029511517893ull}},
+{{16341574599709426688ull, 15285283591781641105ull,
+ 3902727018077396455ull, 2059023035787ull}},
+{{10647012549425705984ull, 10435754347840148867ull,
+ 8159243033099299937ull, 411804607157ull}},
+{{2847281025141860352ull, 2424764621970746119ull,
+ 16318486066198599875ull, 823609214314ull}},
+{{5694562050283720704ull, 4849529243941492238ull,
+ 14190228058687648134ull, 1647218428629ull}},
+{{4828261224798654464ull, 12037952293014029417ull,
+ 17595440870705170919ull, 329443685725ull}},
+{{9656522449597308928ull, 5629160512318507218ull,
+ 16744137667700790223ull, 658887371451ull}},
+{{866300825485066240ull, 11258321024637014437ull,
+ 15041531261692028830ull, 1317774742903ull}},
+{{1732601650970132480ull, 4069897975564477258ull,
+ 11636318449674506045ull, 2635549485807ull}},
+{{346520330194026496ull, 8192677224596716098ull, 9705961319418721855ull,
+ 527109897161ull}},
+{{693040660388052992ull, 16385354449193432196ull, 965178565127892094ull,
+ 1054219794323ull}},
+{{1386081320776105984ull, 14323964824677312776ull,
+ 1930357130255784189ull, 2108439588646ull}},
+{{3966565078897131520ull, 2864792964935462555ull,
+ 4075420240793067161ull, 421687917729ull}},
+{{7933130157794263040ull, 5729585929870925110ull,
+ 8150840481586134322ull, 843375835458ull}},
+{{15866260315588526080ull, 11459171859741850220ull,
+ 16301680963172268644ull, 1686751670916ull}},
+{{3173252063117705216ull, 2291834371948370044ull,
+ 6949685007376364052ull, 337350334183ull}},
+{{6346504126235410432ull, 4583668743896740088ull,
+ 13899370014752728104ull, 674700668366ull}},
+{{12693008252470820864ull, 9167337487793480176ull,
+ 9351995955795904592ull, 1349401336733ull}},
+{{6939272431232090112ull, 18334674975586960353ull,
+ 257247837882257568ull, 2698802673467ull}},
+{{12455900930472148992ull, 3666934995117392070ull,
+ 7430147197060272160ull, 539760534693ull}},
+{{6465057787234746368ull, 7333869990234784141ull,
+ 14860294394120544320ull, 1079521069386ull}},
+{{12930115574469492736ull, 14667739980469568282ull,
+ 11273844714531537024ull, 2159042138773ull}},
+{{17343418373861539840ull, 10312245625577734302ull,
+ 13322815387132038374ull, 431808427754ull}},
+{{16240092674013528064ull, 2177747177445916989ull,
+ 8198886700554525133ull, 863616855509ull}},
+{{14033441274317504512ull, 4355494354891833979ull,
+ 16397773401109050266ull, 1727233711018ull}},
+{{13874734699089231872ull, 15628494129946008088ull,
+ 14347601124447541022ull, 345446742203ull}},
+{{9302725324468912128ull, 12810244186182464561ull,
+ 10248458175185530429ull, 690893484407ull}},
+{{158706575228272640ull, 7173744298655377507ull, 2050172276661509243ull,
+ 1381786968815ull}},
+{{317413150456545280ull, 14347488597310755014ull,
+ 4100344553323018486ull, 2763573937630ull}},
+{{63482630091309056ull, 6558846534204061326ull, 820068910664603697ull,
+ 552714787526ull}},
+{{126965260182618112ull, 13117693068408122652ull,
+ 1640137821329207394ull, 1105429575052ull}},
+{{253930520365236224ull, 7788642063106693688ull, 3280275642658414789ull,
+ 2210859150104ull}},
+{{3740134918814957568ull, 12625774856847069707ull,
+ 15413450387499324250ull, 442171830020ull}},
+{{7480269837629915136ull, 6804805639984587798ull,
+ 12380156701289096885ull, 884343660041ull}},
+{{14960539675259830272ull, 13609611279969175596ull,
+ 6313569328868642154ull, 1768687320083ull}},
+{{14060154379277697024ull, 10100619885477655765ull,
+ 12330760309999459400ull, 353737464016ull}},
+{{9673564684845842432ull, 1754495697245759915ull,
+ 6214776546289367185ull, 707474928033ull}},
+{{900385295982133248ull, 3508991394491519831ull,
+ 12429553092578734370ull, 1414949856066ull}},
+{{1800770591964266496ull, 7017982788983039662ull,
+ 6412362111447917124ull, 2829899712133ull}},
+{{15117549377360494592ull, 8782294187280428578ull,
+ 12350518866515314394ull, 565979942426ull}},
+{{11788354681011437568ull, 17564588374560857157ull,
+ 6254293659321077172ull, 1131959884853ull}},
+{{5129965288313323520ull, 16682432675412162699ull,
+ 12508587318642154345ull, 2263919769706ull}},
+{{1025993057662664704ull, 7025835349824342863ull,
+ 6191066278470341192ull, 452783953941ull}},
+{{2051986115325329408ull, 14051670699648685726ull,
+ 12382132556940682384ull, 905567907882ull}},
+{{4103972230650658816ull, 9656597325587819836ull,
+ 6317521040171813153ull, 1811135815765ull}},
+{{15578189705097773056ull, 12999365909343294936ull,
+ 1263504208034362630ull, 362227163153ull}},
+{{12709635336485994496ull, 7551987744977038257ull,
+ 2527008416068725261ull, 724454326306ull}},
+{{6972526599262437376ull, 15103975489954076515ull,
+ 5054016832137450522ull, 1448908652612ull}},
+{{13945053198524874752ull, 11761206906198601414ull,
+ 10108033664274901045ull, 2897817305224ull}},
+{{13857057083930705920ull, 17109636640207361575ull,
+ 16779001991822621501ull, 579563461044ull}},
+{{9267370094151860224ull, 15772529206705171535ull,
+ 15111259909935691387ull, 1159126922089ull}},
+{{87996114594168832ull, 13098314339700791455ull,
+ 11775775746161831159ull, 2318253844179ull}},
+{{11085645667144564736ull, 13687709312165889260ull,
+ 17112550408200007524ull, 463650768835ull}},
+{{3724547260579577856ull, 8928674550622226905ull,
+ 15778356742690463433ull, 927301537671ull}},
+{{7449094521159155712ull, 17857349101244453810ull,
+ 13109969411671375250ull, 1854603075343ull}},
+{{12557865348457562112ull, 14639516264474621731ull,
+ 13690040326560006019ull, 370920615068ull}},
+{{6668986623205572608ull, 10832288455239691847ull,
+ 8933336579410460423ull, 741841230137ull}},
+{{13337973246411145216ull, 3217832836769832078ull,
+ 17866673158820920847ull, 1483682460274ull}},
+{{8229202419112738816ull, 6435665673539664157ull,
+ 17286602243932290078ull, 2967364920549ull}},
+{{16403235742790189056ull, 8665830764191753477ull,
+ 18214715707754099308ull, 593472984109ull}},
+{{14359727411870826496ull, 17331661528383506955ull,
+ 17982687341798647000ull, 1186945968219ull}},
+{{10272710750032101376ull, 16216578983057462295ull,
+ 17518630609887742385ull, 2373891936439ull}},
+{{16811937408974061568ull, 18000711055579133751ull,
+ 18261121380945189769ull, 474778387287ull}},
+{{15177130744238571520ull, 17554678037448715887ull,
+ 18075498688180827923ull, 949556774575ull}},
+{{11907517414767591424ull, 16662612001187880159ull,
+ 17704253302652104231ull, 1899113549151ull}},
+{{6070852297695428608ull, 10711220029721396678ull,
+ 7230199475272331169ull, 379822709830ull}},
+{{12141704595390857216ull, 2975695985733241740ull,
+ 14460398950544662339ull, 759645419660ull}},
+{{5836665117072162816ull, 5951391971466483481ull,
+ 10474053827379773062ull, 1519290839321ull}},
+{{11673330234144325632ull, 11902783942932966962ull,
+ 2501363581049994508ull, 3038581678643ull}},
+{{13402712491054596096ull, 6069905603328503715ull,
+ 11568319160435729871ull, 607716335728ull}},
+{{8358680908399640576ull, 12139811206657007431ull,
+ 4689894247161908126ull, 1215432671457ull}},
+{{16717361816799281152ull, 5832878339604463246ull,
+ 9379788494323816253ull, 2430865342914ull}},
+{{14411518807585587200ull, 8545273297404713295ull,
+ 16633352957832404543ull, 486173068582ull}},
+{{10376293541461622784ull, 17090546594809426591ull,
+ 14819961841955257470ull, 972346137165ull}},
+{{2305843009213693952ull, 15734349115909301567ull,
+ 11193179610200963325ull, 1944692274331ull}},
+{{11529215046068469760ull, 6836218637923770636ull,
+ 5927984736782102988ull, 388938454866ull}},
+{{4611686018427387904ull, 13672437275847541273ull,
+ 11855969473564205976ull, 777876909732ull}},
+{{9223372036854775808ull, 8898130477985530930ull,
+ 5265194873418860337ull, 1555753819465ull}},
+{{0ull, 17796260955971061861ull, 10530389746837720674ull,
+ 3111507638930ull}},
+{{0ull, 18316647450161853665ull, 2106077949367544134ull,
+ 622301527786ull}},
+{{0ull, 18186550826614155714ull, 4212155898735088269ull,
+ 1244603055572ull}},
+{{0ull, 17926357579518759812ull, 8424311797470176539ull,
+ 2489206111144ull}},
+{{0ull, 14653317960129482932ull, 16442257618461676600ull,
+ 497841222228ull}},
+{{0ull, 10859891846549414248ull, 14437771163213801585ull,
+ 995682444457ull}},
+{{0ull, 3273039619389276880ull, 10428798252718051555ull,
+ 1991364888915ull}},
+{{0ull, 654607923877855376ull, 2085759650543610311ull,
+ 398272977783ull}},
+{{0ull, 1309215847755710752ull, 4171519301087220622ull,
+ 796545955566ull}},
+{{0ull, 2618431695511421504ull, 8343038602174441244ull,
+ 1593091911132ull}},
+{{0ull, 5236863391022843008ull, 16686077204348882488ull,
+ 3186183822264ull}},
+{{0ull, 8426070307688389248ull, 18094610699837417790ull,
+ 637236764452ull}},
+{{0ull, 16852140615376778496ull, 17742477325965283964ull,
+ 1274473528905ull}},
+{{0ull, 15257537157044005376ull, 17038210578221016313ull,
+ 2548947057811ull}},
+{{0ull, 17808902690376442368ull, 7096990930386113585ull,
+ 509789411562ull}},
+{{0ull, 17171061307043333120ull, 14193981860772227171ull,
+ 1019578823124ull}},
+{{0ull, 15895378540377114624ull, 9941219647834902727ull,
+ 2039157646249ull}},
+{{0ull, 6868424522817333248ull, 16745639188534621838ull,
+ 407831529249ull}},
+{{0ull, 13736849045634666496ull, 15044534303359692060ull,
+ 815663058499ull}},
+{{0ull, 9026954017559781376ull, 11642324533009832505ull,
+ 1631326116999ull}},
+{{0ull, 18053908035119562752ull, 4837904992310113394ull,
+ 3262652233999ull}},
+{{0ull, 14678828051249643520ull, 15724976257429663971ull,
+ 652530446799ull}},
+{{0ull, 10910912028789735424ull, 13003208441149776327ull,
+ 1305060893599ull}},
+{{0ull, 3375079983869919232ull, 7559672808590001039ull,
+ 2610121787199ull}},
+{{0ull, 11743062440999714816ull, 16269329820685641500ull,
+ 522024357439ull}},
+{{0ull, 5039380808289878016ull, 14091915567661731385ull,
+ 1044048714879ull}},
+{{0ull, 10078761616579756032ull, 9737087061613911154ull,
+ 2088097429759ull}},
+{{0ull, 13083798767541682176ull, 16704812671290423523ull,
+ 417619485951ull}},
+{{0ull, 7720853461373812736ull, 14962881268871295431ull,
+ 835238971903ull}},
+{{0ull, 15441706922747625472ull, 11479018464033039246ull,
+ 1670477943807ull}},
+{{0ull, 14156387828775256064ull, 9674501322290428495ull,
+ 334095588761ull}},
+{{0ull, 9866031583840960512ull, 902258570871305375ull,
+ 668191177523ull}},
+{{0ull, 1285319093972369408ull, 1804517141742610751ull,
+ 1336382355046ull}},
+{{0ull, 2570638187944738816ull, 3609034283485221502ull,
+ 2672764710092ull}},
+{{0ull, 15271522896556589056ull, 8100504486180864946ull,
+ 534552942018ull}},
+{{0ull, 12096301719403626496ull, 16201008972361729893ull,
+ 1069105884036ull}},
+{{0ull, 5745859365097701376ull, 13955273871013908171ull,
+ 2138211768073ull}},
+{{0ull, 15906567131987181568ull, 13859101218428512603ull,
+ 427642353614ull}},
+{{0ull, 13366390190264811520ull, 9271458363147473591ull,
+ 855284707229ull}},
+{{0ull, 8286036306820071424ull, 96172652585395567ull,
+ 1710569414459ull}},
+{{0ull, 5346556076105924608ull, 14776629789484720406ull,
+ 342113882891ull}},
+{{0ull, 10693112152211849216ull, 11106515505259889196ull,
+ 684227765783ull}},
+{{0ull, 2939480230714146816ull, 3766286936810226777ull,
+ 1368455531567ull}},
+{{0ull, 5878960461428293632ull, 7532573873620453554ull,
+ 2736911063134ull}},
+{{0ull, 12243838536511389696ull, 16263910033691732003ull,
+ 547382212626ull}},
+{{0ull, 6040932999313227776ull, 14081075993673912391ull,
+ 1094764425253ull}},
+{{0ull, 12081865998626455552ull, 9715407913638273166ull,
+ 2189528850507ull}},
+{{0ull, 13484419643951022080ull, 9321779212211475279ull,
+ 437905770101ull}},
+{{0ull, 8522095214192492544ull, 196814350713398943ull,
+ 875811540203ull}},
+{{0ull, 17044190428384985088ull, 393628701426797886ull,
+ 1751623080406ull}},
+{{0ull, 10787535715160817664ull, 3768074555027269900ull,
+ 350324616081ull}},
+{{0ull, 3128327356612083712ull, 7536149110054539801ull,
+ 700649232162ull}},
+{{0ull, 6256654713224167424ull, 15072298220109079602ull,
+ 1401298464324ull}},
+{{0ull, 12513309426448334848ull, 11697852366508607588ull,
+ 2802596928649ull}},
+{{0ull, 9881359514773487616ull, 17096965732269362810ull,
+ 560519385729ull}},
+{{0ull, 1315974955837423616ull, 15747187390829174005ull,
+ 1121038771459ull}},
+{{0ull, 2631949911674847232ull, 13047630707948796394ull,
+ 2242077542919ull}},
+{{0ull, 11594436426560700416ull, 17366921400557400571ull,
+ 448415508583ull}},
+{{0ull, 4742128779411849216ull, 16287098727405249527ull,
+ 896831017167ull}},
+{{0ull, 9484257558823698432ull, 14127453381100947438ull,
+ 1793662034335ull}},
+{{0ull, 12964897955990470656ull, 2825490676220189487ull,
+ 358732406867ull}},
+{{0ull, 7483051838271389696ull, 5650981352440378975ull,
+ 717464813734ull}},
+{{0ull, 14966103676542779392ull, 11301962704880757950ull,
+ 1434929627468ull}},
+{{0ull, 11485463279376007168ull, 4157181336051964285ull,
+ 2869859254937ull}},
+{{0ull, 9675790285359022080ull, 8210133896694213503ull,
+ 573971850987ull}},
+{{0ull, 904836497008492544ull, 16420267793388427007ull,
+ 1147943701974ull}},
+{{0ull, 1809672994016985088ull, 14393791513067302398ull,
+ 2295887403949ull}},
+{{0ull, 7740632228287217664ull, 17636153561581101772ull,
+ 459177480789ull}},
+{{0ull, 15481264456574435328ull, 16825563049452651928ull,
+ 918354961579ull}},
+{{0ull, 12515784839439319040ull, 15204382025195752241ull,
+ 1836709923159ull}},
+{{0ull, 2503156967887863808ull, 17798271664006791741ull,
+ 367341984631ull}},
+{{0ull, 5006313935775727616ull, 17149799254304031866ull,
+ 734683969263ull}},
+{{0ull, 10012627871551455232ull, 15852854434898512116ull,
+ 1469367938527ull}},
+{{0ull, 1578511669393358848ull, 13258964796087472617ull,
+ 2938735877055ull}},
+{{0ull, 7694399963362492416ull, 2651792959217494523ull,
+ 587747175411ull}},
+{{0ull, 15388799926724984832ull, 5303585918434989046ull,
+ 1175494350822ull}},
+{{0ull, 12330855779740418048ull, 10607171836869978093ull,
+ 2350988701644ull}},
+{{0ull, 9844868785431904256ull, 16878829626341636911ull,
+ 470197740328ull}},
+{{0ull, 1242993497154256896ull, 15310915178973722207ull,
+ 940395480657ull}},
+{{0ull, 2485986994308513792ull, 12175086284237892798ull,
+ 1880790961315ull}},
+{{0ull, 11565243843087433728ull, 2435017256847578559ull,
+ 376158192263ull}},
+{{0ull, 4683743612465315840ull, 4870034513695157119ull,
+ 752316384526ull}},
+{{0ull, 9367487224930631680ull, 9740069027390314238ull,
+ 1504632769052ull}},
+{{0ull, 288230376151711744ull, 1033393981071076861ull,
+ 3009265538105ull}},
+{{0ull, 3746994889972252672ull, 206678796214215372ull,
+ 601853107621ull}},
+{{0ull, 7493989779944505344ull, 413357592428430744ull,
+ 1203706215242ull}},
+{{0ull, 14987979559889010688ull, 826715184856861488ull,
+ 2407412430484ull}},
+{{0ull, 10376293541461622784ull, 14922738295939013590ull,
+ 481482486096ull}},
+{{0ull, 2305843009213693952ull, 11398732518168475565ull,
+ 962964972193ull}},
+{{0ull, 4611686018427387904ull, 4350720962627399514ull,
+ 1925929944387ull}},
+{{0ull, 4611686018427387904ull, 8248841822009300549ull,
+ 385185988877ull}},
+{{0ull, 9223372036854775808ull, 16497683644018601098ull,
+ 770371977754ull}},
+{{0ull, 0ull, 14548623214327650581ull, 1540743955509ull}},
+{{0ull, 0ull, 10650502354945749546ull, 3081487911019ull}},
+{{0ull, 0ull, 16887495729956791202ull, 616297582203ull}},
+{{0ull, 0ull, 15328247386204030788ull, 1232595164407ull}},
+{{0ull, 0ull, 12209750698698509960ull, 2465190328815ull}},
+{{0ull, 0ull, 2441950139739701992ull, 493038065763ull}},
+{{0ull, 0ull, 4883900279479403984ull, 986076131526ull}},
+{{0ull, 0ull, 9767800558958807968ull, 1972152263052ull}},
+{{0ull, 0ull, 9332257741275582240ull, 394430452610ull}},
+{{0ull, 0ull, 217771408841612864ull, 788860905221ull}},
+{{0ull, 0ull, 435542817683225728ull, 1577721810442ull}},
+{{0ull, 0ull, 871085635366451456ull, 3155443620884ull}},
+{{0ull, 0ull, 14931612386040931584ull, 631088724176ull}},
+{{0ull, 0ull, 11416480698372311552ull, 1262177448353ull}},
+{{0ull, 0ull, 4386217323035071488ull, 2524354896707ull}},
+{{0ull, 0ull, 8255941094090834944ull, 504870979341ull}},
+{{0ull, 0ull, 16511882188181669888ull, 1009741958682ull}},
+{{0ull, 0ull, 14577020302653788160ull, 2019483917365ull}},
+{{0ull, 0ull, 2915404060530757632ull, 403896783473ull}},
+{{0ull, 0ull, 5830808121061515264ull, 807793566946ull}},
+{{0ull, 0ull, 11661616242123030528ull, 1615587133892ull}},
+{{0ull, 0ull, 4876488410536509440ull, 3231174267785ull}},
+{{0ull, 0ull, 975297682107301888ull, 646234853557ull}},
+{{0ull, 0ull, 1950595364214603776ull, 1292469707114ull}},
+{{0ull, 0ull, 3901190728429207552ull, 2584939414228ull}},
+{{0ull, 0ull, 11848284589911572480ull, 516987882845ull}},
+{{0ull, 0ull, 5249825106113593344ull, 1033975765691ull}},
+{{0ull, 0ull, 10499650212227186688ull, 2067951531382ull}},
+{{0ull, 0ull, 9478627671929257984ull, 413590306276ull}},
+{{0ull, 0ull, 510511270148964352ull, 827180612553ull}},
+{{0ull, 0ull, 1021022540297928704ull, 1654361225106ull}},
+{{0ull, 0ull, 3893553322801496064ull, 330872245021ull}},
+{{0ull, 0ull, 7787106645602992128ull, 661744490042ull}},
+{{0ull, 0ull, 15574213291205984256ull, 1323488980084ull}},
+{{0ull, 0ull, 12701682508702416896ull, 2646977960169ull}},
+{{0ull, 0ull, 17297731760708124672ull, 529395592033ull}},
+{{0ull, 0ull, 16148719447706697728ull, 1058791184067ull}},
+{{0ull, 0ull, 13850694821703843840ull, 2117582368135ull}},
+{{0ull, 0ull, 2770138964340768768ull, 423516473627ull}},
+{{0ull, 0ull, 5540277928681537536ull, 847032947254ull}},
+{{0ull, 0ull, 11080555857363075072ull, 1694065894508ull}},
+{{0ull, 0ull, 13284157615698345984ull, 338813178901ull}},
+{{0ull, 0ull, 8121571157687140352ull, 677626357803ull}},
+{{0ull, 0ull, 16243142315374280704ull, 1355252715606ull}},
+{{0ull, 0ull, 14039540557039009792ull, 2710505431213ull}},
+{{0ull, 0ull, 13875954555633532928ull, 542101086242ull}},
+{{0ull, 0ull, 9305165037557514240ull, 1084202172485ull}},
+{{0ull, 0ull, 163586001405476864ull, 2168404344971ull}},
+{{0ull, 0ull, 3722066015023005696ull, 433680868994ull}},
+{{0ull, 0ull, 7444132030046011392ull, 867361737988ull}},
+{{0ull, 0ull, 14888264060092022784ull, 1734723475976ull}},
+{{0ull, 0ull, 6667001626760314880ull, 346944695195ull}},
+{{0ull, 0ull, 13334003253520629760ull, 693889390390ull}},
+{{0ull, 0ull, 8221262433331707904ull, 1387778780781ull}},
+{{0ull, 0ull, 16442524866663415808ull, 2775557561562ull}},
+{{0ull, 0ull, 10667202602816503808ull, 555111512312ull}},
+{{0ull, 0ull, 2887661131923456000ull, 1110223024625ull}},
+{{0ull, 0ull, 5775322263846912000ull, 2220446049250ull}},
+{{0ull, 0ull, 1155064452769382400ull, 444089209850ull}},
+{{0ull, 0ull, 2310128905538764800ull, 888178419700ull}},
+{{0ull, 0ull, 4620257811077529600ull, 1776356839400ull}},
+{{0ull, 0ull, 924051562215505920ull, 355271367880ull}},
+{{0ull, 0ull, 1848103124431011840ull, 710542735760ull}},
+{{0ull, 0ull, 3696206248862023680ull, 1421085471520ull}},
+{{0ull, 0ull, 7392412497724047360ull, 2842170943040ull}},
+{{0ull, 0ull, 1478482499544809472ull, 568434188608ull}},
+{{0ull, 0ull, 2956964999089618944ull, 1136868377216ull}},
+{{0ull, 0ull, 5913929998179237888ull, 2273736754432ull}},
+{{0ull, 0ull, 8561483629119668224ull, 454747350886ull}},
+{{0ull, 0ull, 17122967258239336448ull, 909494701772ull}},
+{{0ull, 0ull, 15799190442769121280ull, 1818989403545ull}},
+{{0ull, 0ull, 3159838088553824256ull, 363797880709ull}},
+{{0ull, 0ull, 6319676177107648512ull, 727595761418ull}},
+{{0ull, 0ull, 12639352354215297024ull, 1455191522836ull}},
+{{0ull, 0ull, 6831960634721042432ull, 2910383045673ull}},
+{{0ull, 0ull, 12434438571169939456ull, 582076609134ull}},
+{{0ull, 0ull, 6422133068630327296ull, 1164153218269ull}},
+{{0ull, 0ull, 12844266137260654592ull, 2328306436538ull}},
+{{0ull, 0ull, 13636899671677861888ull, 465661287307ull}},
+{{0ull, 0ull, 8827055269646172160ull, 931322574615ull}},
+{{0ull, 0ull, 17654110539292344320ull, 1862645149230ull}},
+{{0ull, 0ull, 3530822107858468864ull, 372529029846ull}},
+{{0ull, 0ull, 7061644215716937728ull, 745058059692ull}},
+{{0ull, 0ull, 14123288431433875456ull, 1490116119384ull}},
+{{0ull, 0ull, 9799832789158199296ull, 2980232238769ull}},
+{{0ull, 0ull, 16717361816799281152ull, 596046447753ull}},
+{{0ull, 0ull, 14987979559889010688ull, 1192092895507ull}},
+{{0ull, 0ull, 11529215046068469760ull, 2384185791015ull}},
+{{0ull, 0ull, 2305843009213693952ull, 476837158203ull}},
+{{0ull, 0ull, 4611686018427387904ull, 953674316406ull}},
+{{0ull, 0ull, 9223372036854775808ull, 1907348632812ull}},
+{{0ull, 0ull, 9223372036854775808ull, 381469726562ull}},
+{{0ull, 0ull, 0ull, 762939453125ull}},
+{{0ull, 0ull, 0ull, 1525878906250ull}},
+{{0ull, 0ull, 0ull, 3051757812500ull}},
+{{0ull, 0ull, 0ull, 610351562500ull}},
+{{0ull, 0ull, 0ull, 1220703125000ull}},
+{{0ull, 0ull, 0ull, 2441406250000ull}},
+{{0ull, 0ull, 0ull, 488281250000ull}},
+{{0ull, 0ull, 0ull, 976562500000ull}},
+{{0ull, 0ull, 0ull, 1953125000000ull}},
+{{0ull, 0ull, 0ull, 390625000000ull}},
+{{0ull, 0ull, 0ull, 781250000000ull}},
+{{0ull, 0ull, 0ull, 1562500000000ull}},
+{{0ull, 0ull, 0ull, 3125000000000ull}},
+{{0ull, 0ull, 0ull, 625000000000ull}},
+{{0ull, 0ull, 0ull, 1250000000000ull}},
+{{0ull, 0ull, 0ull, 2500000000000ull}},
+{{0ull, 0ull, 0ull, 500000000000ull}},
+{{0ull, 0ull, 0ull, 1000000000000ull}},
+{{0ull, 0ull, 0ull, 2000000000000ull}},
+{{0ull, 0ull, 0ull, 400000000000ull}},
+{{0ull, 0ull, 0ull, 800000000000ull}},
+{{0ull, 0ull, 0ull, 1600000000000ull}},
+{{0ull, 0ull, 0ull, 3200000000000ull}},
+{{0ull, 0ull, 0ull, 640000000000ull}},
+{{0ull, 0ull, 0ull, 1280000000000ull}},
+{{0ull, 0ull, 0ull, 2560000000000ull}},
+{{0ull, 0ull, 0ull, 512000000000ull}},
+{{0ull, 0ull, 0ull, 1024000000000ull}},
+{{0ull, 0ull, 0ull, 2048000000000ull}},
+{{0ull, 0ull, 0ull, 409600000000ull}},
+{{0ull, 0ull, 0ull, 819200000000ull}},
+{{0ull, 0ull, 0ull, 1638400000000ull}},
+{{0ull, 0ull, 0ull, 3276800000000ull}},
+{{0ull, 0ull, 0ull, 655360000000ull}},
+{{0ull, 0ull, 0ull, 1310720000000ull}},
+{{0ull, 0ull, 0ull, 2621440000000ull}},
+{{0ull, 0ull, 0ull, 524288000000ull}},
+{{0ull, 0ull, 0ull, 1048576000000ull}},
+{{0ull, 0ull, 0ull, 2097152000000ull}},
+{{0ull, 0ull, 0ull, 419430400000ull}},
+{{0ull, 0ull, 0ull, 838860800000ull}},
+{{0ull, 0ull, 0ull, 1677721600000ull}},
+{{0ull, 0ull, 0ull, 335544320000ull}},
+{{0ull, 0ull, 0ull, 671088640000ull}},
+{{0ull, 0ull, 0ull, 1342177280000ull}},
+{{0ull, 0ull, 0ull, 2684354560000ull}},
+{{0ull, 0ull, 0ull, 536870912000ull}},
+{{0ull, 0ull, 0ull, 1073741824000ull}},
+{{0ull, 0ull, 0ull, 2147483648000ull}},
+{{0ull, 0ull, 0ull, 429496729600ull}},
+{{0ull, 0ull, 0ull, 858993459200ull}},
+{{0ull, 0ull, 0ull, 1717986918400ull}},
+{{0ull, 0ull, 0ull, 343597383680ull}},
+{{0ull, 0ull, 0ull, 687194767360ull}},
+{{0ull, 0ull, 0ull, 1374389534720ull}},
+{{0ull, 0ull, 0ull, 2748779069440ull}},
+{{0ull, 0ull, 0ull, 549755813888ull}},
+{{0ull, 0ull, 0ull, 1099511627776ull}},
+{{0ull, 0ull, 0ull, 2199023255552ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 439804651110ull}},
+{{14757395258967641293ull, 14757395258967641292ull,
+ 14757395258967641292ull, 879609302220ull}},
+{{11068046444225730970ull, 11068046444225730969ull,
+ 11068046444225730969ull, 1759218604441ull}},
+{{16971004547812787487ull, 2213609288845146193ull,
+ 5902958103587056517ull, 351843720888ull}},
+{{15495265021916023358ull, 4427218577690292387ull,
+ 11805916207174113034ull, 703687441776ull}},
+{{12543785970122495099ull, 8854437155380584775ull,
+ 5165088340638674452ull, 1407374883553ull}},
+{{6640827866535438582ull, 17708874310761169551ull,
+ 10330176681277348904ull, 2814749767106ull}},
+{{5017514388048998040ull, 3541774862152233910ull,
+ 5755384150997380104ull, 562949953421ull}},
+{{10035028776097996080ull, 7083549724304467820ull,
+ 11510768301994760208ull, 1125899906842ull}},
+{{1623313478486440543ull, 14167099448608935641ull,
+ 4574792530279968800ull, 2251799813685ull}},
+{{4014011510439198432ull, 2833419889721787128ull, 914958506055993760ull,
+ 450359962737ull}},
+{{8028023020878396864ull, 5666839779443574256ull,
+ 1829917012111987520ull, 900719925474ull}},
+{{16056046041756793727ull, 11333679558887148512ull,
+ 3659834024223975040ull, 1801439850948ull}},
+{{3211209208351358746ull, 13334782356003160672ull,
+ 11800013249070525977ull, 360287970189ull}},
+{{6422418416702717491ull, 8222820638296769728ull,
+ 5153282424431500339ull, 720575940379ull}},
+{{12844836833405434982ull, 16445641276593539456ull,
+ 10306564848863000678ull, 1441151880758ull}},
+{{7242929593101318347ull, 14444538479477527297ull,
+ 2166385624016449741ull, 2882303761517ull}},
+{{1448585918620263670ull, 13956954140121236429ull,
+ 7811974754287110594ull, 576460752303ull}},
+{{2897171837240527339ull, 9467164206532921242ull,
+ 15623949508574221189ull, 1152921504606ull}},
+{{5794343674481054678ull, 487584339356290868ull,
+ 12801154943438890763ull, 2305843009213ull}},
+{{15916263993863852229ull, 3786865682613168496ull,
+ 13628277432913509122ull, 461168601842ull}},
+{{13385783914018152841ull, 7573731365226336993ull,
+ 8809810792117466628ull, 922337203685ull}},
+{{8324823754326754065ull, 15147462730452673987ull,
+ 17619621584234933256ull, 1844674407370ull}},
+{{12733011195091081783ull, 6718841360832445120ull,
+ 3523924316846986651ull, 368934881474ull}},
+{{7019278316472611950ull, 13437682721664890241ull,
+ 7047848633693973302ull, 737869762948ull}},
+{{14038556632945223899ull, 8428621369620228866ull,
+ 14095697267387946605ull, 1475739525896ull}},
+{{9630369192180896181ull, 16857242739240457733ull,
+ 9744650461066341594ull, 2951479051793ull}},
+{{1926073838436179237ull, 10750146177331912193ull,
+ 13016976536438999288ull, 590295810358ull}},
+{{3852147676872358473ull, 3053548280954272770ull,
+ 7587208999168446961ull, 1180591620717ull}},
+{{7704295353744716945ull, 6107096561908545540ull,
+ 15174417998336893922ull, 2361183241434ull}},
+{{5230207885490853713ull, 4910768127123619431ull,
+ 17792278858635020077ull, 472236648286ull}},
+{{10460415770981707425ull, 9821536254247238862ull,
+ 17137813643560488538ull, 944473296573ull}},
+{{2474087468253863233ull, 1196328434784926109ull,
+ 15828883213411425461ull, 1888946593147ull}},
+{{7873515123134593293ull, 11307312131182716191ull,
+ 10544474272166105738ull, 377789318629ull}},
+{{15747030246269186586ull, 4167880188655880766ull,
+ 2642204470622659861ull, 755578637259ull}},
+{{13047316418828821556ull, 8335760377311761533ull,
+ 5284408941245319722ull, 1511157274518ull}},
+{{7647888763948091496ull, 16671520754623523067ull,
+ 10568817882490639444ull, 3022314549036ull}},
+{{8908275382273438946ull, 3334304150924704613ull,
+ 5803112391240038212ull, 604462909807ull}},
+{{17816550764546877891ull, 6668608301849409226ull,
+ 11606224782480076424ull, 1208925819614ull}},
+{{17186357455384204166ull, 13337216603698818453ull,
+ 4765705491250601232ull, 2417851639229ull}},
+{{18194666750044482126ull, 6356792135481674013ull,
+ 15710536357217761539ull, 483570327845ull}},
+{{17942589426379412636ull, 12713584270963348027ull,
+ 12974328640725971462ull, 967140655691ull}},
+{{17438434779049273656ull, 6980424468217144439ull,
+ 7501913207742391309ull, 1934281311383ull}},
+{{7177035770551765055ull, 8774782523127249534ull,
+ 12568429085774209231ull, 386856262276ull}},
+{{14354071541103530109ull, 17549565046254499068ull,
+ 6690114097838866846ull, 773712524553ull}},
+{{10261399008497508602ull, 16652386018799446521ull,
+ 13380228195677733693ull, 1547425049106ull}},
+{{2076053943285465587ull, 14858027963889341427ull,
+ 8313712317645915771ull, 3094850098213ull}},
+{{4104559603399003441ull, 17729000851745509578ull,
+ 12730788907754914123ull, 618970019642ull}},
+{{8209119206798006882ull, 17011257629781467540ull,
+ 7014833741800276631ull, 1237940039285ull}},
+{{16418238413596013763ull, 15575771185853383464ull,
+ 14029667483600553263ull, 2475880078570ull}},
+{{10662345312203023399ull, 14183200681396407662ull,
+ 2805933496720110652ull, 495176015714ull}},
+{{2877946550696495182ull, 9919657289083263709ull,
+ 5611866993440221305ull, 990352031428ull}},
+{{5755893101392990364ull, 1392570504456975802ull,
+ 11223733986880442611ull, 1980704062856ull}},
+{{15908573879246239366ull, 7657211730375215806ull,
+ 5934095612117998845ull, 396140812571ull}},
+{{13370403684782927115ull, 15314423460750431613ull,
+ 11868191224235997690ull, 792281625142ull}},
+{{8294063295856302614ull, 12182102847791311611ull,
+ 5289638374762443765ull, 1584563250285ull}},
+{{16588126591712605228ull, 5917461621873071606ull,
+ 10579276749524887531ull, 3169126500570ull}},
+{{10696322947826341692ull, 4872841139116524644ull,
+ 2115855349904977506ull, 633825300114ull}},
+{{2945901821943131768ull, 9745682278233049289ull,
+ 4231710699809955012ull, 1267650600228ull}},
+{{5891803643886263536ull, 1044620482756546962ull,
+ 8463421399619910025ull, 2535301200456ull}},
+{{12246407173002983677ull, 3898272911293219715ull,
+ 5382033094665892328ull, 507060240091ull}},
+{{6046070272296415738ull, 7796545822586439431ull,
+ 10764066189331784656ull, 1014120480182ull}},
+{{12092140544592831476ull, 15593091645172878862ull,
+ 3081388304954017696ull, 2028240960365ull}},
+{{13486474553144297265ull, 6807967143776486095ull,
+ 616277660990803539ull, 405648192073ull}},
+{{8526205032579042914ull, 13615934287552972191ull,
+ 1232555321981607078ull, 811296384146ull}},
+{{17052410065158085827ull, 8785124501396392766ull,
+ 2465110643963214157ull, 1622592768292ull}},
+{{15658076056606620037ull, 17570249002792785533ull,
+ 4930221287926428314ull, 3245185536584ull}},
+{{6820964026063234331ull, 14582096244784288076ull,
+ 15743439516552926955ull, 649037107316ull}},
+{{13641928052126468662ull, 10717448415859024536ull,
+ 13040134959396302295ull, 1298074214633ull}},
+{{8837112030543385707ull, 2988152758008497457ull,
+ 7633525845083052975ull, 2596148429267ull}},
+{{16524817665076318435ull, 7976328181085520137ull,
+ 8905402798500431241ull, 519229685853ull}},
+{{14602891256443085253ull, 15952656362171040275ull,
+ 17810805597000862482ull, 1038459371706ull}},
+{{10759038439176618889ull, 13458568650632528935ull,
+ 17174867120292173349ull, 2076918743413ull}},
+{{9530505317319144425ull, 10070411359610326433ull,
+ 14503019868284165639ull, 415383748682ull}},
+{{614266560928737233ull, 1694078645511101251ull,
+ 10559295662858779663ull, 830767497365ull}},
+{{1228533121857474465ull, 3388157291022202502ull,
+ 2671847252008007710ull, 1661534994731ull}},
+{{11313753068597225863ull, 4366980272946350823ull,
+ 4223718265143511865ull, 332306998946ull}},
+{{4180762063484900109ull, 8733960545892701647ull,
+ 8447436530287023730ull, 664613997892ull}},
+{{8361524126969800218ull, 17467921091785403294ull,
+ 16894873060574047460ull, 1329227995784ull}},
+{{16723048253939600436ull, 16489098109861254972ull,
+ 15343002047438543305ull, 2658455991569ull}},
+{{7033958465529830411ull, 18055214880939892287ull,
+ 17825995668455349953ull, 531691198313ull}},
+{{14067916931059660821ull, 17663685688170232958ull,
+ 17205247263201148291ull, 1063382396627ull}},
+{{9689089788409770026ull, 16880627302630914301ull,
+ 15963750452692744967ull, 2126764793255ull}},
+{{13005864401907684975ull, 10754823090010003506ull,
+ 3192750090538548993ull, 425352958651ull}},
+{{7564984730105818334ull, 3062902106310455397ull,
+ 6385500181077097987ull, 850705917302ull}},
+{{15129969460211636667ull, 6125804212620910794ull,
+ 12771000362154195974ull, 1701411834604ull}},
+{{10404691521526147980ull, 12293207286749913128ull,
+ 17311595331398480487ull, 340282366920ull}},
+{{2362638969342744344ull, 6139670499790274641ull,
+ 16176446589087409359ull, 680564733841ull}},
+{{4725277938685488687ull, 12279340999580549282ull,
+ 13906149104465267102ull, 1361129467683ull}},
+{{9450555877370977374ull, 6111937925451546948ull,
+ 9365554135220982589ull, 2722258935367ull}},
+{{16647506434441836768ull, 4911736399832219712ull,
+ 9251808456528017164ull, 544451787073ull}},
+{{14848268795174121920ull, 9823472799664439425ull, 56872839346482712ull,
+ 1088903574147ull}},
+{{11249793516638692223ull, 1200201525619327235ull,
+ 113745678692965425ull, 2177807148294ull}},
+{{17007353962295379738ull, 14997435564091506739ull,
+ 14780144394706234377ull, 435561429658ull}},
+{{15567963850881207859ull, 11548127054473461863ull,
+ 11113544715702917139ull, 871122859317ull}},
+{{12689183628052864101ull, 4649510035237372111ull,
+ 3780345357696282663ull, 1742245718635ull}},
+{{17295231984578214113ull, 11997948451273205391ull,
+ 756069071539256532ull, 348449143727ull}},
+{{16143719895446876610ull, 5549152828836859167ull,
+ 1512138143078513065ull, 696898287454ull}},
+{{13840695717184201604ull, 11098305657673718335ull,
+ 3024276286157026130ull, 1393796574908ull}},
+{{9234647360658851592ull, 3749867241637885055ull,
+ 6048552572314052261ull, 2787593149816ull}},
+{{9225627101615590965ull, 8128671077811397657ull,
+ 4899059329204720775ull, 557518629963ull}},
+{{4510129521630314ull, 16257342155622795315ull, 9798118658409441550ull,
+ 1115037259926ull}},
+{{9020259043260628ull, 14067940237536039014ull, 1149493243109331485ull,
+ 2230074519853ull}},
+{{7380501681292472772ull, 13881634491732938772ull,
+ 11297945092847597266ull, 446014903970ull}},
+{{14761003362584945544ull, 9316524909756325928ull,
+ 4149146111985642917ull, 892029807941ull}},
+{{11075262651460339472ull, 186305745803100241ull,
+ 8298292223971285835ull, 1784059615882ull}},
+{{13283098974517798864ull, 7415958778644440694ull,
+ 9038356074278077813ull, 356811923176ull}},
+{{8119453875326046112ull, 14831917557288881389ull,
+ 18076712148556155626ull, 713623846352ull}},
+{{16238907750652092224ull, 11217091040868211162ull,
+ 17706680223402759637ull, 1427247692705ull}},
+{{14031071427594632831ull, 3987438008026870709ull,
+ 16966616373095967659ull, 2854495385411ull}},
+{{17563609544486567859ull, 797487601605374141ull,
+ 7082672089361103855ull, 570899077082ull}},
+{{16680475015263584102ull, 1594975203210748283ull,
+ 14165344178722207710ull, 1141798154164ull}},
+{{14914205956817616588ull, 3189950406421496567ull,
+ 9883944283734863804ull, 2283596308329ull}},
+{{2982841191363523318ull, 11706036525510030283ull,
+ 16734184115714614053ull, 456719261665ull}},
+{{5965682382727046636ull, 4965328977310508950ull,
+ 15021624157719676491ull, 913438523331ull}},
+{{11931364765454093271ull, 9930657954621017900ull,
+ 11596504241729801366ull, 1826877046663ull}},
+{{17143668212058459947ull, 16743526849891844872ull,
+ 13387347292571691242ull, 365375409332ull}},
+{{15840592350407368278ull, 15040309626074138129ull,
+ 8327950511433830869ull, 730750818665ull}},
+{{13234440627105184940ull, 11633875178438724643ull,
+ 16655901022867661739ull, 1461501637330ull}},
+{{8022137180500818264ull, 4821006283167897671ull,
+ 14865057972025771863ull, 2923003274661ull}},
+{{1604427436100163653ull, 15721596515601220827ull,
+ 6662360409147064695ull, 584600654932ull}},
+{{3208854872200327306ull, 12996448957492890038ull,
+ 13324720818294129391ull, 1169201309864ull}},
+{{6417709744400654611ull, 7546153841276228460ull,
+ 8202697562878707167ull, 2338402619729ull}},
+{{4972890763622041246ull, 5198579582997156015ull,
+ 16397934771543382726ull, 467680523945ull}},
+{{9945781527244082491ull, 10397159165994312030ull,
+ 14349125469377213836ull, 935361047891ull}},
+{{1444818980778613366ull, 2347574258279072445ull,
+ 10251506865044876057ull, 1870722095783ull}},
+{{288963796155722674ull, 469514851655814489ull, 13118347817234706181ull,
+ 374144419156ull}},
+{{577927592311445347ull, 939029703311628978ull, 7789951560759860746ull,
+ 748288838313ull}},
+{{1155855184622890693ull, 1878059406623257956ull,
+ 15579903121519721492ull, 1496577676626ull}},
+{{2311710369245781385ull, 3756118813246515912ull,
+ 12713062169329891368ull, 2993155353253ull}},
+{{11530388518074887247ull, 4440572577391213505ull,
+ 13610658878091709243ull, 598631070650ull}},
+{{4614032962440222877ull, 8881145154782427011ull,
+ 8774573682473866870ull, 1197262141301ull}},
+{{9228065924880445754ull, 17762290309564854022ull,
+ 17549147364947733740ull, 2394524282602ull}},
+{{16603008443943730444ull, 10931155691396791450ull,
+ 10888527102473367394ull, 478904856520ull}},
+{{14759272814177909272ull, 3415567309084031285ull,
+ 3330310131237183173ull, 957809713041ull}},
+{{11071801554646266927ull, 6831134618168062571ull,
+ 6660620262474366346ull, 1915619426082ull}},
+{{16971755569896894679ull, 12434273367859343483ull,
+ 8710821681978693915ull, 383123885216ull}},
+{{15496767066084237741ull, 6421802662009135351ull,
+ 17421643363957387831ull, 766247770432ull}},
+{{12546790058458923865ull, 12843605324018270703ull,
+ 16396542654205224046ull, 1532495540865ull}},
+{{6646836043208296113ull, 7240466574326989791ull,
+ 14346341234700896477ull, 3064991081731ull}},
+{{16086762467609300516ull, 12516139759091128927ull,
+ 6558617061682089618ull, 612998216346ull}},
+{{13726780861509049415ull, 6585535444472706239ull,
+ 13117234123364179237ull, 1225996432692ull}},
+{{9006817649308547214ull, 13171070888945412479ull,
+ 7787724173018806858ull, 2451992865385ull}},
+{{9180061159345530090ull, 13702260622014813465ull,
+ 1557544834603761371ull, 490398573077ull}},
+{{18360122318691060179ull, 8957777170320075314ull,
+ 3115089669207522743ull, 980797146154ull}},
+{{18273500563672568741ull, 17915554340640150629ull,
+ 6230179338415045486ull, 1961594292308ull}},
+{{14722746556960244718ull, 18340506127095671418ull,
+ 12314082311908740066ull, 392318858461ull}},
+{{10998749040210937820ull, 18234268180481791221ull,
+ 6181420550107928517ull, 784637716923ull}},
+{{3550754006712324023ull, 18021792287254030827ull,
+ 12362841100215857035ull, 1569275433846ull}},
+{{7101508013424648045ull, 17596840500798510038ull,
+ 6278938126722162455ull, 3138550867693ull}},
+{{5109650417426839933ull, 14587414544385432977ull,
+ 12323834069570163460ull, 627710173538ull}},
+{{10219300834853679865ull, 10728085015061314338ull,
+ 6200924065430775305ull, 1255420347077ull}},
+{{1991857595997808113ull, 3009425956413077061ull,
+ 12401848130861550611ull, 2510840694154ull}},
+{{4087720333941471946ull, 601885191282615412ull,
+ 17237764885139951415ull, 502168138830ull}},
+{{8175440667882943892ull, 1203770382565230824ull,
+ 16028785696570351214ull, 1004336277661ull}},
+{{16350881335765887783ull, 2407540765130461648ull,
+ 13610827319431150812ull, 2008672555323ull}},
+{{14338222711378908527ull, 481508153026092329ull,
+ 13790211908111961132ull, 401734511064ull}},
+{{10229701349048265437ull, 963016306052184659ull,
+ 9133679742514370648ull, 803469022129ull}},
+{{2012658624386979257ull, 1926032612104369319ull,
+ 18267359485028741296ull, 1606938044258ull}},
+{{4025317248773958514ull, 3852065224208738638ull,
+ 18087974896347930976ull, 3213876088517ull}},
+{{4494412264496702026ull, 11838459489067478697ull,
+ 10996292608753406841ull, 642775217703ull}},
+{{8988824528993404052ull, 5230174904425405778ull,
+ 3545841143797262067ull, 1285550435407ull}},
+{{17977649057986808104ull, 10460349808850811556ull,
+ 7091682287594524134ull, 2571100870814ull}},
+{{18352925070565002914ull, 13160116405995893280ull,
+ 16175731716486546119ull, 514220174162ull}},
+{{18259106067420454212ull, 7873488738282234945ull,
+ 13904719359263540623ull, 1028440348325ull}},
+{{18071468061131356807ull, 15746977476564469891ull,
+ 9362694644817529630ull, 2056880696651ull}},
+{{10992991241710092008ull, 6838744310054804301ull,
+ 5561887743705416249ull, 411376139330ull}},
+{{3539238409710632400ull, 13677488620109608603ull,
+ 11123775487410832498ull, 822752278660ull}},
+{{7078476819421264799ull, 8908233166509665590ull,
+ 3800806901112113381ull, 1645504557321ull}},
+{{8794392993368073607ull, 9160344262785753764ull,
+ 4449510194964332999ull, 329100911464ull}},
+{{17588785986736147213ull, 18320688525571507528ull,
+ 8899020389928665998ull, 658201822928ull}},
+{{16730827899762742809ull, 18194632977433463441ull,
+ 17798040779857331997ull, 1316403645856ull}},
+{{15014911725815934001ull, 17942521881157375267ull,
+ 17149337486005112379ull, 2632807291713ull}},
+{{17760377604130828093ull, 10967202005715295699ull,
+ 14497913941426753445ull, 526561458342ull}},
+{{17074011134552104570ull, 3487659937721039783ull,
+ 10549083809143955275ull, 1053122916685ull}},
+{{15701278195394657524ull, 6975319875442079567ull,
+ 2651423544578358934ull, 2106245833371ull}},
+{{10518953268562752152ull, 1395063975088415913ull,
+ 4219633523657582110ull, 421249166674ull}},
+{{2591162463415952687ull, 2790127950176831827ull,
+ 8439267047315164220ull, 842498333348ull}},
+{{5182324926831905373ull, 5580255900353663654ull,
+ 16878534094630328440ull, 1684996666696ull}},
+{{1036464985366381075ull, 4805399994812643054ull,
+ 7065055633667976011ull, 336999333339ull}},
+{{2072929970732762150ull, 9610799989625286108ull,
+ 14130111267335952022ull, 673998666678ull}},
+{{4145859941465524299ull, 774855905541020600ull, 9813478460962352429ull,
+ 1347997333357ull}},
+{{8291719882931048597ull, 1549711811082041200ull,
+ 1180212848215153242ull, 2695994666715ull}},
+{{9037041606070030366ull, 7688639991700228886ull, 236042569643030648ull,
+ 539198933343ull}},
+{{18074083212140060732ull, 15377279983400457772ull,
+ 472085139286061296ull, 1078397866686ull}},
+{{17701422350570569847ull, 12307815893091363929ull,
+ 944170278572122593ull, 2156795733372ull}},
+{{18297679729081755263ull, 2461563178618272785ull,
+ 7567531685198245165ull, 431359146674ull}},
+{{18148615384453958909ull, 4923126357236545571ull,
+ 15135063370396490330ull, 862718293348ull}},
+{{17850486695198366201ull, 9846252714473091143ull,
+ 11823382667083429044ull, 1725436586697ull}},
+{{18327492598007314533ull, 5658599357636528551ull,
+ 9743374162900506455ull, 345087317339ull}},
+{{18208241122305077450ull, 11317198715273057103ull,
+ 1040004252091461294ull, 690174634679ull}},
+{{17969738170900603284ull, 4187653356836562591ull,
+ 2080008504182922589ull, 1380349269358ull}},
+{{17492732268091654952ull, 8375306713673125183ull,
+ 4160017008365845178ull, 2760698538716ull}},
+{{10877244083102151637ull, 16432456601702266329ull,
+ 4521352216415079358ull, 552139707743ull}},
+{{3307744092494751658ull, 14418169129694981043ull,
+ 9042704432830158717ull, 1104279415486ull}},
+{{6615488184989503315ull, 10389594185680410470ull,
+ 18085408865660317435ull, 2208558830972ull}},
+{{8701795266481721310ull, 9456616466619902740ull,
+ 10995779402615884133ull, 441711766194ull}},
+{{17403590532963442619ull, 466488859530253864ull,
+ 3544814731522216651ull, 883423532389ull}},
+{{16360436992217333622ull, 932977719060507729ull,
+ 7089629463044433302ull, 1766847064778ull}},
+{{18029482657411108018ull, 186595543812101545ull,
+ 12485972336834617630ull, 353369412955ull}},
+{{17612221241112664419ull, 373191087624203091ull,
+ 6525200599959683644ull, 706738825911ull}},
+{{16777698408515777221ull, 746382175248406183ull,
+ 13050401199919367288ull, 1413477651822ull}},
+{{15108652743322002825ull, 1492764350496812367ull,
+ 7654058326129182960ull, 2826955303645ull}},
+{{10400428178148221212ull, 298552870099362473ull,
+ 1530811665225836592ull, 565391060729ull}},
+{{2354112282586890807ull, 597105740198724947ull, 3061623330451673184ull,
+ 1130782121458ull}},
+{{4708224565173781614ull, 1194211480397449894ull,
+ 6123246660903346368ull, 2261564242916ull}},
+{{12009691357260487293ull, 14996237555047131271ull,
+ 4913998146922579596ull, 452312848583ull}},
+{{5572638640811422969ull, 11545731036384710927ull,
+ 9827996293845159193ull, 904625697166ull}},
+{{11145277281622845937ull, 4644717999059870238ull,
+ 1209248513980766771ull, 1809251394333ull}},
+{{9607753085808389834ull, 15686338858779615340ull,
+ 11309896147021884323ull, 361850278866ull}},
+{{768762097907228052ull, 12925933643849679065ull,
+ 4173048220334217031ull, 723700557733ull}},
+{{1537524195814456104ull, 7405123213989806514ull,
+ 8346096440668434063ull, 1447401115466ull}},
+{{3075048391628912207ull, 14810246427979613028ull,
+ 16692192881336868126ull, 2894802230932ull}},
+{{4304358493067692765ull, 14030095729821653575ull,
+ 10717136205751194271ull, 578960446186ull}},
+{{8608716986135385529ull, 9613447385933755534ull,
+ 2987528337792836927ull, 1157920892373ull}},
+{{17217433972270771058ull, 780150698157959452ull,
+ 5975056675585673855ull, 2315841784746ull}},
+{{14511533238679885182ull, 3845378954373502213ull,
+ 4884360149859045094ull, 463168356949ull}},
+{{10576322403650218747ull, 7690757908747004427ull,
+ 9768720299718090188ull, 926336713898ull}},
+{{2705900733590885877ull, 15381515817494008855ull,
+ 1090696525726628760ull, 1852673427797ull}},
+{{7919877776201997822ull, 10455000792982622417ull,
+ 7596836934629146398ull, 370534685559ull}},
+{{15839755552403995644ull, 2463257512255693218ull,
+ 15193673869258292797ull, 741069371118ull}},
+{{13232767031098439671ull, 4926515024511386437ull,
+ 11940603664807033978ull, 1482138742237ull}},
+{{8018789988487327726ull, 9853030049022772875ull,
+ 5434463255904516340ull, 2964277484475ull}},
+{{1603757997697465546ull, 1970606009804554575ull,
+ 1086892651180903268ull, 592855496895ull}},
+{{3207515995394931091ull, 3941212019609109150ull,
+ 2173785302361806536ull, 1185710993790ull}},
+{{6415031990789862181ull, 7882424039218218300ull,
+ 4347570604723613072ull, 2371421987580ull}},
+{{8661704027641793083ull, 8955182437327464306ull, 869514120944722614ull,
+ 474284397516ull}},
+{{17323408055283586166ull, 17910364874654928612ull,
+ 1739028241889445228ull, 948568795032ull}},
+{{16200072036857620715ull, 17373985675600305609ull,
+ 3478056483778890457ull, 1897137590064ull}},
+{{3240014407371524143ull, 7164145949861971445ull,
+ 15453006555723419384ull, 379427518012ull}},
+{{6480028814743048286ull, 14328291899723942890ull,
+ 12459269037737287152ull, 758855036025ull}},
+{{12960057629486096572ull, 10209839725738334164ull,
+ 6471794001765022689ull, 1517710072051ull}},
+{{7473371185262641527ull, 1972935377767116713ull,
+ 12943588003530045379ull, 3035420144102ull}},
+{{16252069496020169599ull, 4083935890295333665ull,
+ 9967415230189829722ull, 607084028820ull}},
+{{14057394918330787581ull, 8167871780590667331ull,
+ 1488086386670107828ull, 1214168057641ull}},
+{{9668045762952023545ull, 16335743561181334663ull,
+ 2976172773340215656ull, 2428336115282ull}},
+{{5622957967332315033ull, 14335195156461997902ull,
+ 7973932184151863777ull, 485667223056ull}},
+{{11245915934664630065ull, 10223646239214444188ull,
+ 15947864368303727555ull, 971334446112ull}},
+{{4045087795619708513ull, 2000548404719336761ull,
+ 13448984662897903495ull, 1942668892225ull}},
+{{4498366373865852026ull, 400109680943867352ull, 2689796932579580699ull,
+ 388533778445ull}},
+{{8996732747731704052ull, 800219361887734704ull, 5379593865159161398ull,
+ 777067556890ull}},
+{{17993465495463408103ull, 1600438723775469408ull,
+ 10759187730318322796ull, 1554135113780ull}},
+{{17540186917217264590ull, 3200877447550938817ull,
+ 3071631386927093976ull, 3108270227561ull}},
+{{18265432642411094211ull, 8018873118994008409ull,
+ 4303675092127329118ull, 621654045512ull}},
+{{18084121211112636806ull, 16037746237988016819ull,
+ 8607350184254658236ull, 1243308091024ull}},
+{{17721498348515721995ull, 13628748402266482023ull,
+ 17214700368509316473ull, 2486616182048ull}},
+{{18301694928670785692ull, 6415098495195206727ull,
+ 14510986517927594264ull, 497323236409ull}},
+{{18156645783632019768ull, 12830196990390413455ull,
+ 10575228962145636912ull, 994646472819ull}},
+{{17866547493554487919ull, 7213649907071275295ull,
+ 2703713850581722209ull, 1989292945639ull}},
+{{14641355942936628554ull, 12510776425639986028ull,
+ 15298138029083985734ull, 397858589127ull}},
+{{10835967812163705491ull, 6574808777570420441ull,
+ 12149531984458419853ull, 795717178255ull}},
+{{3225191550617859366ull, 13149617555140840883ull,
+ 5852319895207288090ull, 1591434356511ull}},
+{{6450383101235718732ull, 7852491036572130150ull,
+ 11704639790414576181ull, 3182868713022ull}},
+{{12358123064472874716ull, 12638544651540156999ull,
+ 9719625587566735882ull, 636573742604ull}},
+{{6269502055236197816ull, 6830345229370762383ull, 992507101423920149ull,
+ 1273147485209ull}},
+{{12539004110472395632ull, 13660690458741524766ull,
+ 1985014202847840298ull, 2546294970418ull}},
+{{9886498451578299773ull, 6421486906490215276ull,
+ 11465049284795299029ull, 509258994083ull}},
+{{1326252829447047930ull, 12842973812980430553ull,
+ 4483354495881046442ull, 1018517988167ull}},
+{{2652505658894095859ull, 7239203552251309490ull,
+ 8966708991762092885ull, 2037035976334ull}},
+{{15287896390746460465ull, 16205235969417903190ull,
+ 16550737057320059869ull, 407407195266ull}},
+{{12129048707783369314ull, 13963727865126254765ull,
+ 14654730040930568123ull, 814814390533ull}},
+{{5811353341857187011ull, 9480711656542957915ull,
+ 10862716008151584631ull, 1629628781067ull}},
+{{11622706683714374021ull, 514679239376364214ull,
+ 3278687942593617647ull, 3259257562135ull}},
+{{6013890151484785128ull, 7481633477359093489ull, 655737588518723529ull,
+ 651851512427ull}},
+{{12027780302969570255ull, 14963266954718186978ull,
+ 1311475177037447058ull, 1303703024854ull}},
+{{5608816532229588893ull, 11479789835726822341ull,
+ 2622950354074894117ull, 2607406049708ull}},
+{{4811112121187828102ull, 2295957967145364468ull,
+ 11592636515040709793ull, 521481209941ull}},
+{{9622224242375656204ull, 4591915934290728936ull,
+ 4738528956371867970ull, 1042962419883ull}},
+{{797704411041760792ull, 9183831868581457873ull, 9477057912743735940ull,
+ 2085924839766ull}},
+{{14916936141175993452ull, 5526115188458201897ull,
+ 5584760397290657511ull, 417184967953ull}},
+{{11387128208642435287ull, 11052230376916403795ull,
+ 11169520794581315022ull, 834369935906ull}},
+{{4327512343575318957ull, 3657716680123255975ull,
+ 3892297515453078429ull, 1668739871813ull}},
+{{8244200098198884438ull, 8110240965508471841ull,
+ 11846505947316346655ull, 333747974362ull}},
+{{16488400196397768876ull, 16220481931016943682ull,
+ 5246267820923141694ull, 667495948725ull}},
+{{14530056319085986135ull, 13994219788324335749ull,
+ 10492535641846283389ull, 1334991897450ull}},
+{{10613368564462420654ull, 9541695502939119883ull,
+ 2538327209983015163ull, 2669983794901ull}},
+{{9501371342376304778ull, 16665734359555465269ull,
+ 4197014256738513355ull, 533996758980ull}},
+{{555998611043057939ull, 14884724645401378923ull,
+ 8394028513477026711ull, 1067993517960ull}},
+{{1111997222086115877ull, 11322705217093206230ull,
+ 16788057026954053423ull, 2135987035920ull}},
+{{11290445888642954145ull, 13332587487644372215ull,
+ 3357611405390810684ull, 427197407184ull}},
+{{4134147703576356674ull, 8218430901579192815ull,
+ 6715222810781621369ull, 854394814368ull}},
+{{8268295407152713348ull, 16436861803158385630ull,
+ 13430445621563242738ull, 1708789628736ull}},
+{{16411054340398183963ull, 18044767619599318418ull,
+ 6375437939054558870ull, 341757925747ull}},
+{{14375364607086816309ull, 17642791165489085221ull,
+ 12750875878109117741ull, 683515851494ull}},
+{{10303985140464081001ull, 16838838257268618827ull,
+ 7055007682508683867ull, 1367031702989ull}},
+{{2161226207218610386ull, 15230932440827686039ull,
+ 14110015365017367735ull, 2734063405978ull}},
+{{7810942870927542724ull, 14114232932391268177ull,
+ 13890049517229204516ull, 546812681195ull}},
+{{15621885741855085448ull, 9781721791072984738ull,
+ 9333354960748857417ull, 1093625362391ull}},
+{{12797027410000619279ull, 1116699508436417861ull,
+ 219965847788163219ull, 2187250724783ull}},
+{{13627451926225854826ull, 7602037531171104218ull,
+ 11112039613783363613ull, 437450144956ull}},
+{{8808159778742158035ull, 15204075062342208437ull,
+ 3777335153857175610ull, 874900289913ull}},
+{{17616319557484316070ull, 11961406050974865258ull,
+ 7554670307714351221ull, 1749800579826ull}},
+{{3523263911496863214ull, 9770978839678793698ull,
+ 5200282876284780567ull, 349960115965ull}},
+{{7046527822993726428ull, 1095213605648035780ull,
+ 10400565752569561135ull, 699920231930ull}},
+{{14093055645987452856ull, 2190427211296071560ull,
+ 2354387431429570654ull, 1399840463861ull}},
+{{9739367218265354095ull, 4380854422592143121ull,
+ 4708774862859141308ull, 2799680927722ull}},
+{{5637222258394981143ull, 876170884518428624ull, 8320452602055648908ull,
+ 559936185544ull}},
+{{11274444516789962285ull, 1752341769036857248ull,
+ 16640905204111297816ull, 1119872371088ull}}
+};
+
+static const UINT256 multipliers2_bid32[] =
+ { {{7156996302188685206ull, 14694123111064470433ull,
+ 3521238664523520994ull, 11704ull}},
+{{14313992604377370412ull, 10941502148419389250ull,
+ 7042477329047041989ull, 23408ull}},
+{{10181241135045189207ull, 3436260223129226885ull,
+ 14084954658094083979ull, 46816ull}},
+{{1915738196380826798ull, 6872520446258453771ull,
+ 9723165242478616342ull, 93633ull}},
+{{3831476392761653595ull, 13745040892516907542ull,
+ 999586411247681068ull, 187267ull}},
+{{7662952785523307189ull, 9043337711324263468ull,
+ 1999172822495362137ull, 374534ull}},
+{{15325905571046614378ull, 18086675422648526936ull,
+ 3998345644990724274ull, 749068ull}},
+{{12205067068383677139ull, 17726606771587502257ull,
+ 7996691289981448549ull, 1498136ull}},
+{{5963390063057802661ull, 17006469469465452899ull,
+ 15993382579962897099ull, 2996272ull}},
+{{11926780126115605321ull, 15566194865221354182ull,
+ 13540021086216242583ull, 5992545ull}},
+{{5406816178521659026ull, 12685645656733156749ull,
+ 8633298098722933551ull, 11985091ull}},
+{{10813632357043318052ull, 6924547239756761882ull,
+ 17266596197445867103ull, 23970182ull}},
+{{3180520640377084488ull, 13849094479513523765ull,
+ 16086448321182182590ull, 47940365ull}},
+{{6361041280754168975ull, 9251444885317495914ull,
+ 13726152568654813565ull, 95880731ull}},
+{{12722082561508337950ull, 56145696925440212ull, 9005561063600075515ull,
+ 191761463ull}},
+{{6997421049307124283ull, 112291393850880425ull,
+ 18011122127200151030ull, 383522926ull}},
+{{13994842098614248565ull, 224582787701760850ull,
+ 17575500180690750444ull, 767045853ull}},
+{{9542940123518945513ull, 449165575403521701ull,
+ 16704256287671949272ull, 1534091707ull}},
+{{639136173328339410ull, 898331150807043403ull, 14961768501634346928ull,
+ 3068183415ull}},
+{{1278272346656678820ull, 1796662301614086806ull,
+ 11476792929559142240ull, 6136366831ull}},
+{{2556544693313357639ull, 3593324603228173612ull,
+ 4506841785408732864ull, 12272733663ull}},
+{{5113089386626715277ull, 7186649206456347224ull,
+ 9013683570817465728ull, 24545467326ull}},
+{{10226178773253430554ull, 14373298412912694448ull,
+ 18027367141634931456ull, 49090934652ull}},
+{{2005613472797309491ull, 10299852752115837281ull,
+ 17607990209560311297ull, 98181869305ull}},
+{{4011226945594618982ull, 2152961430522122946ull,
+ 16769236345411070979ull, 196363738611ull}},
+{{4491594203860834120ull, 430592286104424589ull, 7043196083824124519ull,
+ 39272747722ull}},
+{{8983188407721668240ull, 861184572208849178ull,
+ 14086392167648249038ull, 78545495444ull}},
+{{17966376815443336479ull, 1722369144417698356ull,
+ 9726040261586946460ull, 157090990889ull}},
+{{17486009557177121341ull, 3444738288835396713ull,
+ 1005336449464341304ull, 314181981779ull}},
+{{7186550726177334592ull, 11756994101992810312ull,
+ 14958462548860509553ull, 62836396355ull}},
+{{14373101452354669183ull, 5067244130276069008ull,
+ 11470181024011467491ull, 125672792711ull}},
+{{10299458830999786749ull, 10134488260552138017ull,
+ 4493617974313383366ull, 251345585423ull}},
+{{5749240580941867673ull, 16784292911078068896ull,
+ 11966770039088407642ull, 50269117084ull}},
+{{11498481161883735346ull, 15121841748446586176ull,
+ 5486796004467263669ull, 100538234169ull}},
+{{4550218250057919076ull, 11796939423183620737ull,
+ 10973592008934527339ull, 201076468338ull}},
+{{15667438908979225108ull, 9738085514120544793ull,
+ 13262764846012636437ull, 40215293667ull}},
+{{12888133744248898600ull, 1029426954531537971ull,
+ 8078785618315721259ull, 80430587335ull}},
+{{7329523414788245584ull, 2058853909063075943ull,
+ 16157571236631442518ull, 160861174670ull}},
+{{14659046829576491168ull, 4117707818126151886ull,
+ 13868398399553333420ull, 321722349341ull}},
+{{10310506995399118880ull, 4512890378367140700ull,
+ 6463028494652577007ull, 64344469868ull}},
+{{2174269917088686144ull, 9025780756734281401ull,
+ 12926056989305154014ull, 128688939736ull}},
+{{4348539834177372288ull, 18051561513468562802ull,
+ 7405369904900756412ull, 257377879473ull}},
+{{8248405596319295104ull, 3610312302693712560ull,
+ 12549120425205882252ull, 51475575894ull}},
+{{16496811192638590208ull, 7220624605387425120ull,
+ 6651496776702212888ull, 102951151789ull}},
+{{14546878311567628800ull, 14441249210774850241ull,
+ 13302993553404425776ull, 205902303578ull}},
+{{2909375662313525760ull, 17645645101122611341ull,
+ 13728645154906616124ull, 41180460715ull}},
+{{5818751324627051520ull, 16844546128535671066ull,
+ 9010546236103680633ull, 82360921431ull}},
+{{11637502649254103040ull, 15242348183361790516ull,
+ 18021092472207361267ull, 164721842862ull}},
+{{2327500529850820608ull, 17805864895639999396ull,
+ 10982916123925292899ull, 32944368572ull}},
+{{4655001059701641216ull, 17164985717570447176ull,
+ 3519088174141034183ull, 65888737145ull}},
+{{9310002119403282432ull, 15883227361431342736ull,
+ 7038176348282068367ull, 131777474290ull}},
+{{173260165097013248ull, 13319710649153133857ull,
+ 14076352696564136735ull, 263554948580ull}},
+{{7413349662503223296ull, 2663942129830626771ull,
+ 2815270539312827347ull, 52710989716ull}},
+{{14826699325006446592ull, 5327884259661253542ull,
+ 5630541078625654694ull, 105421979432ull}},
+{{11206654576303341568ull, 10655768519322507085ull,
+ 11261082157251309388ull, 210843958864ull}},
+{{9620028544744488960ull, 9509851333348322063ull,
+ 17009611690417903170ull, 42168791772ull}},
+{{793313015779426304ull, 572958592987092511ull, 15572479307126254725ull,
+ 84337583545ull}},
+{{1586626031558852608ull, 1145917185974185022ull,
+ 12698214540542957834ull, 168675167091ull}},
+{{7696022835795591168ull, 229183437194837004ull, 6228991722850501890ull,
+ 33735033418ull}},
+{{15392045671591182336ull, 458366874389674008ull,
+ 12457983445701003780ull, 67470066836ull}},
+{{12337347269472813056ull, 916733748779348017ull,
+ 6469222817692455944ull, 134940133673ull}},
+{{6227950465236074496ull, 1833467497558696035ull,
+ 12938445635384911888ull, 269880267346ull}},
+{{16002985352014856192ull, 15124088758479380499ull,
+ 6277037941818892700ull, 53976053469ull}},
+{{13559226630320160768ull, 11801433443249209383ull,
+ 12554075883637785401ull, 107952106938ull}},
+{{8671709186930769920ull, 5156122812788867151ull,
+ 6661407693566019187ull, 215904213877ull}},
+{{1734341837386153984ull, 15788619821525414723ull,
+ 8710979168197024483ull, 43180842775ull}},
+{{3468683674772307968ull, 13130495569341277830ull,
+ 17421958336394048967ull, 86361685550ull}},
+{{6937367349544615936ull, 7814247064973004044ull,
+ 16397172599078546319ull, 172723371101ull}},
+{{16144868728876564480ull, 1562849412994600808ull,
+ 6968783334557619587ull, 34544674220ull}},
+{{13842993384043577344ull, 3125698825989201617ull,
+ 13937566669115239174ull, 69089348440ull}},
+{{9239242694377603072ull, 6251397651978403235ull,
+ 9428389264520926732ull, 138178696881ull}},
+{{31741315045654528ull, 12502795303956806471ull, 410034455332301848ull,
+ 276357393763ull}},
+{{7385045892492951552ull, 6189907875533271617ull,
+ 11150053335292191339ull, 55271478752ull}},
+{{14770091784985903104ull, 12379815751066543234ull,
+ 3853362596874831062ull, 110542957505ull}},
+{{11093439496262254592ull, 6312887428423534853ull,
+ 7706725193749662125ull, 221085915010ull}},
+{{13286734343478181888ull, 1262577485684706970ull,
+ 1541345038749932425ull, 44217183002ull}},
+{{8126724613246812160ull, 2525154971369413941ull,
+ 3082690077499864850ull, 88434366004ull}},
+{{16253449226493624320ull, 5050309942738827882ull,
+ 6165380154999729700ull, 176868732008ull}},
+{{3250689845298724864ull, 12078108432773496546ull,
+ 12301122475225676909ull, 35373746401ull}},
+{{6501379690597449728ull, 5709472791837441476ull,
+ 6155500876741802203ull, 70747492803ull}},
+{{13002759381194899456ull, 11418945583674882952ull,
+ 12311001753483604406ull, 141494985606ull}},
+{{7558774688680247296ull, 4391147093640214289ull,
+ 6175259433257657197ull, 282989971213ull}},
+{{16269150196703690752ull, 878229418728042857ull,
+ 12303098330877262409ull, 56597994242ull}},
+{{14091556319697829888ull, 1756458837456085715ull,
+ 6159452588044973202ull, 113195988485ull}},
+{{9736368565686108160ull, 3512917674912171431ull,
+ 12318905176089946404ull, 226391976970ull}},
+{{1947273713137221632ull, 15459978793950075579ull,
+ 2463781035217989280ull, 45278395394ull}},
+{{3894547426274443264ull, 12473213514190599542ull,
+ 4927562070435978561ull, 90556790788ull}},
+{{7789094852548886528ull, 6499682954671647468ull,
+ 9855124140871957123ull, 181113581576ull}},
+{{8936516599993597952ull, 16057331849901970786ull,
+ 5660373642916301747ull, 36222716315ull}},
+{{17873033199987195904ull, 13667919626094389956ull,
+ 11320747285832603495ull, 72445432630ull}},
+{{17299322326264840192ull, 8889095178479228297ull,
+ 4194750497955655375ull, 144890865261ull}},
+{{16151900578820128768ull, 17778190356958456595ull,
+ 8389500995911310750ull, 289781730522ull}},
+{{10609077745247846400ull, 10934335700875511965ull,
+ 9056597828666082796ull, 57956346104ull}},
+{{2771411416786141184ull, 3421927328041472315ull,
+ 18113195657332165593ull, 115912692208ull}},
+{{5542822833572282368ull, 6843854656082944630ull,
+ 17779647240954779570ull, 231825384417ull}},
+{{8487262196198277120ull, 8747468560700409572ull,
+ 10934627077674776560ull, 46365076883ull}},
+{{16974524392396554240ull, 17494937121400819144ull,
+ 3422510081640001504ull, 92730153767ull}},
+{{15502304711083556864ull, 16543130169092086673ull,
+ 6845020163280003009ull, 185460307534ull}},
+{{6789809756958621696ull, 14376672478044148304ull,
+ 16126399291623641894ull, 37092061506ull}},
+{{13579619513917243392ull, 10306600882378744992ull,
+ 13806054509537732173ull, 74184123013ull}},
+{{8712494954124935168ull, 2166457691047938369ull,
+ 9165364945365912731ull, 148368246027ull}},
+{{17424989908249870336ull, 4332915382095876738ull,
+ 18330729890731825462ull, 296736492054ull}},
+{{18242393240617615360ull, 4555931891161085670ull,
+ 18423541237114006385ull, 59347298410ull}},
+{{18038042407525679104ull, 9111863782322171341ull,
+ 18400338400518461154ull, 118694596821ull}},
+{{17629340741341806592ull, 18223727564644342683ull,
+ 18353932727327370692ull, 237389193643ull}},
+{{14593914592494092288ull, 3644745512928868536ull,
+ 14738832989691205108ull, 47477838728ull}},
+{{10741085111278632960ull, 7289491025857737073ull,
+ 11030921905672858600ull, 94955677457ull}},
+{{3035426148847714304ull, 14578982051715474147ull,
+ 3615099737636165584ull, 189911354915ull}},
+{{4296434044511453184ull, 17673191669310736122ull,
+ 723019947527233116ull, 37982270983ull}},
+{{8592868089022906368ull, 16899639264911920628ull,
+ 1446039895054466233ull, 75964541966ull}},
+{{17185736178045812736ull, 15352534456114289640ull,
+ 2892079790108932467ull, 151929083932ull}},
+{{15924728282382073856ull, 12258324838519027665ull,
+ 5784159580217864935ull, 303858167864ull}},
+{{17942340915444056064ull, 17209060226671446825ull,
+ 15914227175011214279ull, 60771633572ull}},
+{{17437937757178560512ull, 15971376379633342035ull,
+ 13381710276312876943ull, 121543267145ull}},
+{{16429131440647569408ull, 13496008685557132455ull,
+ 8316676478916202271ull, 243086534291ull}},
+{{10664523917613334528ull, 10077899366595247137ull,
+ 5352684110525150777ull, 48617306858ull}},
+{{2882303761517117440ull, 1709054659480942659ull,
+ 10705368221050301555ull, 97234613716ull}},
+{{5764607523034234880ull, 3418109318961885318ull,
+ 2963992368391051494ull, 194469227433ull}},
+{{1152921504606846976ull, 8062319493276197710ull,
+ 11660844917903941268ull, 38893845486ull}},
+{{2305843009213693952ull, 16124638986552395420ull,
+ 4874945762098330920ull, 77787690973ull}},
+{{4611686018427387904ull, 13802533899395239224ull,
+ 9749891524196661841ull, 155575381946ull}},
+{{9223372036854775808ull, 9158323725080926832ull,
+ 1053038974683772067ull, 311150763893ull}},
+{{9223372036854775808ull, 1831664745016185366ull,
+ 11278654239162485383ull, 62230152778ull}},
+{{0ull, 3663329490032370733ull, 4110564404615419150ull,
+ 124460305557ull}},
+{{0ull, 7326658980064741466ull, 8221128809230838300ull,
+ 248920611114ull}},
+{{0ull, 16222727054980589586ull, 16401621020813808952ull,
+ 49784122222ull}},
+{{0ull, 13998710036251627556ull, 14356497967918066289ull,
+ 99568244445ull}},
+{{0ull, 9550675998793703496ull, 10266251862126580963ull,
+ 199136488891ull}},
+{{0ull, 16667530458726381992ull, 5742599187167226515ull,
+ 39827297778ull}},
+{{0ull, 14888316843743212368ull, 11485198374334453031ull,
+ 79654595556ull}},
+{{0ull, 11329889613776873120ull, 4523652674959354447ull,
+ 159309191113ull}},
+{{0ull, 4213035153844194624ull, 9047305349918708895ull,
+ 318618382226ull}},
+{{0ull, 4531955845510749248ull, 5498809884725652102ull,
+ 63723676445ull}},
+{{0ull, 9063911691021498496ull, 10997619769451304204ull,
+ 127447352890ull}},
+{{0ull, 18127823382042996992ull, 3548495465193056792ull,
+ 254894705781ull}},
+{{0ull, 14693611120634330368ull, 4399047907780521681ull,
+ 50978941156ull}},
+{{0ull, 10940478167559109120ull, 8798095815561043363ull,
+ 101957882312ull}},
+{{0ull, 3434212261408666624ull, 17596191631122086727ull,
+ 203915764624ull}},
+{{0ull, 4376191267023643648ull, 18276633585192058638ull,
+ 40783152924ull}},
+{{0ull, 8752382534047287296ull, 18106523096674565660ull,
+ 81566305849ull}},
+{{0ull, 17504765068094574592ull, 17766302119639579704ull,
+ 163132611699ull}},
+{{0ull, 16562786062479597568ull, 17085860165569607793ull,
+ 326265223399ull}},
+{{0ull, 10691254841979740160ull, 18174567292081562851ull,
+ 65253044679ull}},
+{{0ull, 2935765610249928704ull, 17902390510453574087ull,
+ 130506089359ull}},
+{{0ull, 5871531220499857408ull, 17358036947197596558ull,
+ 261012178719ull}},
+{{0ull, 8553003873583792128ull, 18229002648407160604ull,
+ 52202435743ull}},
+{{0ull, 17106007747167584256ull, 18011261223104769592ull,
+ 104404871487ull}},
+{{0ull, 15765271420625616896ull, 17575778372499987569ull,
+ 208809742975ull}},
+{{0ull, 17910449543092764672ull, 3515155674499997513ull,
+ 41761948595ull}},
+{{0ull, 17374155012475977728ull, 7030311348999995027ull,
+ 83523897190ull}},
+{{0ull, 16301565951242403840ull, 14060622697999990055ull,
+ 167047794380ull}},
+{{0ull, 3260313190248480768ull, 2812124539599998011ull,
+ 33409558876ull}},
+{{0ull, 6520626380496961536ull, 5624249079199996022ull,
+ 66819117752ull}},
+{{0ull, 13041252760993923072ull, 11248498158399992044ull,
+ 133638235504ull}},
+{{0ull, 7635761448278294528ull, 4050252243090432473ull,
+ 267276471009ull}},
+{{0ull, 8905849919139479552ull, 15567445707585727787ull,
+ 53455294201ull}},
+{{0ull, 17811699838278959104ull, 12688147341461903958ull,
+ 106910588403ull}},
+{{0ull, 17176655602848366592ull, 6929550609214256301ull,
+ 213821176807ull}},
+{{0ull, 14503377564795404288ull, 8764607751326671906ull,
+ 42764235361ull}},
+{{0ull, 10560011055881256960ull, 17529215502653343813ull,
+ 85528470722ull}},
+{{0ull, 2673278038052962304ull, 16611686931597136011ull,
+ 171056941445ull}},
+{{0ull, 4224004422352502784ull, 3322337386319427202ull,
+ 34211388289ull}},
+{{0ull, 8448008844705005568ull, 6644674772638854404ull,
+ 68422776578ull}},
+{{0ull, 16896017689410011136ull, 13289349545277708808ull,
+ 136845553156ull}},
+{{0ull, 15345291305110470656ull, 8131955016845866001ull,
+ 273691106313ull}},
+{{0ull, 17826453519989735424ull, 12694437447594904169ull,
+ 54738221262ull}},
+{{0ull, 17206162966269919232ull, 6942130821480256723ull,
+ 109476442525ull}},
+{{0ull, 15965581858830286848ull, 13884261642960513447ull,
+ 218952885050ull}},
+{{0ull, 10571814001249878016ull, 2776852328592102689ull,
+ 43790577010ull}},
+{{0ull, 2696883928790204416ull, 5553704657184205379ull,
+ 87581154020ull}},
+{{0ull, 5393767857580408832ull, 11107409314368410758ull,
+ 175162308040ull}},
+{{0ull, 12146800015741812736ull, 2221481862873682151ull,
+ 35032461608ull}},
+{{0ull, 5846855957774073856ull, 4442963725747364303ull,
+ 70064923216ull}},
+{{0ull, 11693711915548147712ull, 8885927451494728606ull,
+ 140129846432ull}},
+{{0ull, 4940679757386743808ull, 17771854902989457213ull,
+ 280259692864ull}},
+{{0ull, 8366833580961169408ull, 18311766239565532735ull,
+ 56051938572ull}},
+{{0ull, 16733667161922338816ull, 18176788405421513854ull,
+ 112103877145ull}},
+{{0ull, 15020590250135126016ull, 17906832737133476093ull,
+ 224207754291ull}},
+{{0ull, 17761513308994666496ull, 7270715362168605541ull,
+ 44841550858ull}},
+{{0ull, 17076282544279781376ull, 14541430724337211083ull,
+ 89683101716ull}},
+{{0ull, 15705821014850011136ull, 10636117374964870551ull,
+ 179366203433ull}},
+{{0ull, 17898559461937643520ull, 13195269919218705079ull,
+ 35873240686ull}},
+{{0ull, 17350374850165735424ull, 7943795764727858543ull,
+ 71746481373ull}},
+{{0ull, 16254005626621919232ull, 15887591529455717087ull,
+ 143492962746ull}},
+{{0ull, 14061267179534286848ull, 13328438985201882559ull,
+ 286985925493ull}},
+{{0ull, 10190951065390678016ull, 13733734241266107481ull,
+ 57397185098ull}},
+{{0ull, 1935158057071804416ull, 9020724408822663347ull,
+ 114794370197ull}},
+{{0ull, 3870316114143608832ull, 18041448817645326694ull,
+ 229588740394ull}},
+{{0ull, 11842109667054452736ull, 18365685022496706631ull,
+ 45917748078ull}},
+{{0ull, 5237475260399353856ull, 18284625971283861647ull,
+ 91835496157ull}},
+{{0ull, 10474950520798707712ull, 18122507868858171678ull,
+ 183670992315ull}},
+{{0ull, 13163036548385472512ull, 3624501573771634335ull,
+ 36734198463ull}},
+{{0ull, 7879329023061393408ull, 7249003147543268671ull,
+ 73468396926ull}},
+{{0ull, 15758658046122786816ull, 14498006295086537342ull,
+ 146936793852ull}},
+{{0ull, 13070572018536022016ull, 10549268516463523069ull,
+ 293873587705ull}},
+{{0ull, 17371509662674845696ull, 2109853703292704613ull,
+ 58774717541ull}},
+{{0ull, 16296275251640139776ull, 4219707406585409227ull,
+ 117549435082ull}},
+{{0ull, 14145806429570727936ull, 8439414813170818455ull,
+ 235098870164ull}},
+{{0ull, 17586556544881786880ull, 16445278221601804983ull,
+ 47019774032ull}},
+{{0ull, 16726369016054022144ull, 14443812369494058351ull,
+ 94039548065ull}},
+{{0ull, 15005993958398492672ull, 10440880665278565087ull,
+ 188079096131ull}},
+{{0ull, 14069245235905429504ull, 5777524947797623340ull,
+ 37615819226ull}},
+{{0ull, 9691746398101307392ull, 11555049895595246681ull,
+ 75231638452ull}},
+{{0ull, 936748722493063168ull, 4663355717480941747ull,
+ 150463276905ull}},
+{{0ull, 1873497444986126336ull, 9326711434961883494ull,
+ 300926553810ull}},
+{{0ull, 15132094747964866560ull, 1865342286992376698ull,
+ 60185310762ull}},
+{{0ull, 11817445422220181504ull, 3730684573984753397ull,
+ 120370621524ull}},
+{{0ull, 5188146770730811392ull, 7461369147969506795ull,
+ 240741243048ull}},
+{{0ull, 12105675798371893248ull, 12560320273819632328ull,
+ 48148248609ull}},
+{{0ull, 5764607523034234880ull, 6673896473929713041ull,
+ 96296497219ull}},
+{{0ull, 11529215046068469760ull, 13347792947859426082ull,
+ 192592994438ull}},
+{{0ull, 2305843009213693952ull, 13737605033797616186ull,
+ 38518598887ull}},
+{{0ull, 4611686018427387904ull, 9028465993885680756ull,
+ 77037197775ull}},
+{{0ull, 9223372036854775808ull, 18056931987771361512ull,
+ 154074395550ull}},
+{{0ull, 0ull, 17667119901833171409ull, 308148791101ull}},
+{{0ull, 0ull, 7222772795108544605ull, 61629758220ull}},
+{{0ull, 0ull, 14445545590217089210ull, 123259516440ull}},
+{{0ull, 0ull, 10444347106724626804ull, 246519032881ull}},
+{{0ull, 0ull, 5778218236086835684ull, 49303806576ull}},
+{{0ull, 0ull, 11556436472173671368ull, 98607613152ull}},
+{{0ull, 0ull, 4666128870637791120ull, 197215226305ull}},
+{{0ull, 0ull, 933225774127558224ull, 39443045261ull}},
+{{0ull, 0ull, 1866451548255116448ull, 78886090522ull}},
+{{0ull, 0ull, 3732903096510232896ull, 157772181044ull}},
+{{0ull, 0ull, 7465806193020465792ull, 315544362088ull}},
+{{0ull, 0ull, 12561207682829824128ull, 63108872417ull}},
+{{0ull, 0ull, 6675671291950096640ull, 126217744835ull}},
+{{0ull, 0ull, 13351342583900193280ull, 252435489670ull}},
+{{0ull, 0ull, 2670268516780038656ull, 50487097934ull}},
+{{0ull, 0ull, 5340537033560077312ull, 100974195868ull}},
+{{0ull, 0ull, 10681074067120154624ull, 201948391736ull}},
+{{0ull, 0ull, 5825563628165941248ull, 40389678347ull}},
+{{0ull, 0ull, 11651127256331882496ull, 80779356694ull}},
+{{0ull, 0ull, 4855510438954213376ull, 161558713389ull}},
+{{0ull, 0ull, 9711020877908426752ull, 323117426778ull}},
+{{0ull, 0ull, 13010250619807416320ull, 64623485355ull}},
+{{0ull, 0ull, 7573757165905281024ull, 129246970711ull}},
+{{0ull, 0ull, 15147514331810562048ull, 258493941422ull}},
+{{0ull, 0ull, 10408200495845933056ull, 51698788284ull}},
+{{0ull, 0ull, 2369656917982314496ull, 103397576569ull}},
+{{0ull, 0ull, 4739313835964628992ull, 206795153138ull}},
+{{0ull, 0ull, 12015909211418656768ull, 41359030627ull}},
+{{0ull, 0ull, 5585074349127761920ull, 82718061255ull}},
+{{0ull, 0ull, 11170148698255523840ull, 165436122510ull}},
+{{0ull, 0ull, 2234029739651104768ull, 33087224502ull}},
+{{0ull, 0ull, 4468059479302209536ull, 66174449004ull}},
+{{0ull, 0ull, 8936118958604419072ull, 132348898008ull}},
+{{0ull, 0ull, 17872237917208838144ull, 264697796016ull}},
+{{0ull, 0ull, 7263796398183677952ull, 52939559203ull}},
+{{0ull, 0ull, 14527592796367355904ull, 105879118406ull}},
+{{0ull, 0ull, 10608441519025160192ull, 211758236813ull}},
+{{0ull, 0ull, 13189734748030763008ull, 42351647362ull}},
+{{0ull, 0ull, 7932725422351974400ull, 84703294725ull}},
+{{0ull, 0ull, 15865450844703948800ull, 169406589450ull}},
+{{0ull, 0ull, 3173090168940789760ull, 33881317890ull}},
+{{0ull, 0ull, 6346180337881579520ull, 67762635780ull}},
+{{0ull, 0ull, 12692360675763159040ull, 135525271560ull}},
+{{0ull, 0ull, 6937977277816766464ull, 271050543121ull}},
+{{0ull, 0ull, 5076944270305263616ull, 54210108624ull}},
+{{0ull, 0ull, 10153888540610527232ull, 108420217248ull}},
+{{0ull, 0ull, 1861033007511502848ull, 216840434497ull}},
+{{0ull, 0ull, 7750904230986121216ull, 43368086899ull}},
+{{0ull, 0ull, 15501808461972242432ull, 86736173798ull}},
+{{0ull, 0ull, 12556872850234933248ull, 173472347597ull}},
+{{0ull, 0ull, 9890072199530807296ull, 34694469519ull}},
+{{0ull, 0ull, 1333400325352062976ull, 69388939039ull}},
+{{0ull, 0ull, 2666800650704125952ull, 138777878078ull}},
+{{0ull, 0ull, 5333601301408251904ull, 277555756156ull}},
+{{0ull, 0ull, 4756069075023560704ull, 55511151231ull}},
+{{0ull, 0ull, 9512138150047121408ull, 111022302462ull}},
+{{0ull, 0ull, 577532226384691200ull, 222044604925ull}},
+{{0ull, 0ull, 115506445276938240ull, 44408920985ull}},
+{{0ull, 0ull, 231012890553876480ull, 88817841970ull}},
+{{0ull, 0ull, 462025781107752960ull, 177635683940ull}},
+{{0ull, 0ull, 92405156221550592ull, 35527136788ull}},
+{{0ull, 0ull, 184810312443101184ull, 71054273576ull}},
+{{0ull, 0ull, 369620624886202368ull, 142108547152ull}},
+{{0ull, 0ull, 739241249772404736ull, 284217094304ull}},
+{{0ull, 0ull, 14905243508922122240ull, 56843418860ull}},
+{{0ull, 0ull, 11363742944134692864ull, 113686837721ull}},
+{{0ull, 0ull, 4280741814559834112ull, 227373675443ull}},
+{{0ull, 0ull, 11924194807137697792ull, 45474735088ull}},
+{{0ull, 0ull, 5401645540565843968ull, 90949470177ull}},
+{{0ull, 0ull, 10803291081131687936ull, 181898940354ull}},
+{{0ull, 0ull, 16918053475193978880ull, 36379788070ull}},
+{{0ull, 0ull, 15389362876678406144ull, 72759576141ull}},
+{{0ull, 0ull, 12331981679647260672ull, 145519152283ull}},
+{{0ull, 0ull, 6217219285584969728ull, 291038304567ull}},
+{{0ull, 0ull, 8622141486600814592ull, 58207660913ull}},
+{{0ull, 0ull, 17244282973201629184ull, 116415321826ull}},
+{{0ull, 0ull, 16041821872693706752ull, 232830643653ull}},
+{{0ull, 0ull, 14276410818764472320ull, 46566128730ull}},
+{{0ull, 0ull, 10106077563819393024ull, 93132257461ull}},
+{{0ull, 0ull, 1765411053929234432ull, 186264514923ull}},
+{{0ull, 0ull, 11421128655011577856ull, 37252902984ull}},
+{{0ull, 0ull, 4395513236313604096ull, 74505805969ull}},
+{{0ull, 0ull, 8791026472627208192ull, 149011611938ull}},
+{{0ull, 0ull, 17582052945254416384ull, 298023223876ull}},
+{{0ull, 0ull, 7205759403792793600ull, 59604644775ull}},
+{{0ull, 0ull, 14411518807585587200ull, 119209289550ull}},
+{{0ull, 0ull, 10376293541461622784ull, 238418579101ull}},
+{{0ull, 0ull, 5764607523034234880ull, 47683715820ull}},
+{{0ull, 0ull, 11529215046068469760ull, 95367431640ull}},
+{{0ull, 0ull, 4611686018427387904ull, 190734863281ull}},
+{{0ull, 0ull, 4611686018427387904ull, 38146972656ull}},
+{{0ull, 0ull, 9223372036854775808ull, 76293945312ull}},
+{{0ull, 0ull, 0ull, 152587890625ull}},
+{{0ull, 0ull, 0ull, 305175781250ull}},
+{{0ull, 0ull, 0ull, 61035156250ull}},
+{{0ull, 0ull, 0ull, 122070312500ull}},
+{{0ull, 0ull, 0ull, 244140625000ull}},
+{{0ull, 0ull, 0ull, 48828125000ull}},
+{{0ull, 0ull, 0ull, 97656250000ull}},
+{{0ull, 0ull, 0ull, 195312500000ull}},
+{{0ull, 0ull, 0ull, 39062500000ull}},
+{{0ull, 0ull, 0ull, 78125000000ull}},
+{{0ull, 0ull, 0ull, 156250000000ull}},
+{{0ull, 0ull, 0ull, 312500000000ull}},
+{{0ull, 0ull, 0ull, 62500000000ull}},
+{{0ull, 0ull, 0ull, 125000000000ull}},
+{{0ull, 0ull, 0ull, 250000000000ull}},
+{{0ull, 0ull, 0ull, 50000000000ull}},
+{{0ull, 0ull, 0ull, 100000000000ull}},
+{{0ull, 0ull, 0ull, 200000000000ull}},
+{{0ull, 0ull, 0ull, 40000000000ull}},
+{{0ull, 0ull, 0ull, 80000000000ull}},
+{{0ull, 0ull, 0ull, 160000000000ull}},
+{{0ull, 0ull, 0ull, 320000000000ull}},
+{{0ull, 0ull, 0ull, 64000000000ull}},
+{{0ull, 0ull, 0ull, 128000000000ull}},
+{{0ull, 0ull, 0ull, 256000000000ull}},
+{{0ull, 0ull, 0ull, 51200000000ull}},
+{{0ull, 0ull, 0ull, 102400000000ull}},
+{{0ull, 0ull, 0ull, 204800000000ull}},
+{{0ull, 0ull, 0ull, 40960000000ull}},
+{{0ull, 0ull, 0ull, 81920000000ull}},
+{{0ull, 0ull, 0ull, 163840000000ull}},
+{{0ull, 0ull, 0ull, 327680000000ull}},
+{{0ull, 0ull, 0ull, 65536000000ull}},
+{{0ull, 0ull, 0ull, 131072000000ull}},
+{{0ull, 0ull, 0ull, 262144000000ull}},
+{{0ull, 0ull, 0ull, 52428800000ull}},
+{{0ull, 0ull, 0ull, 104857600000ull}},
+{{0ull, 0ull, 0ull, 209715200000ull}},
+{{0ull, 0ull, 0ull, 41943040000ull}},
+{{0ull, 0ull, 0ull, 83886080000ull}},
+{{0ull, 0ull, 0ull, 167772160000ull}},
+{{0ull, 0ull, 0ull, 33554432000ull}},
+{{0ull, 0ull, 0ull, 67108864000ull}},
+{{0ull, 0ull, 0ull, 134217728000ull}},
+{{0ull, 0ull, 0ull, 268435456000ull}},
+{{0ull, 0ull, 0ull, 53687091200ull}},
+{{0ull, 0ull, 0ull, 107374182400ull}},
+{{0ull, 0ull, 0ull, 214748364800ull}},
+{{0ull, 0ull, 0ull, 42949672960ull}},
+{{0ull, 0ull, 0ull, 85899345920ull}},
+{{0ull, 0ull, 0ull, 171798691840ull}},
+{{0ull, 0ull, 0ull, 34359738368ull}},
+{{0ull, 0ull, 0ull, 68719476736ull}},
+{{0ull, 0ull, 0ull, 137438953472ull}},
+{{0ull, 0ull, 0ull, 274877906944ull}},
+{{14757395258967641293ull, 14757395258967641292ull,
+ 14757395258967641292ull, 54975581388ull}},
+{{11068046444225730970ull, 11068046444225730969ull,
+ 11068046444225730969ull, 109951162777ull}},
+{{3689348814741910324ull, 3689348814741910323ull,
+ 3689348814741910323ull, 219902325555ull}},
+{{4427218577690292388ull, 11805916207174113034ull,
+ 737869762948382064ull, 43980465111ull}},
+{{8854437155380584776ull, 5165088340638674452ull,
+ 1475739525896764129ull, 87960930222ull}},
+{{17708874310761169552ull, 10330176681277348904ull,
+ 2951479051793528258ull, 175921860444ull}},
+{{7231123676894144234ull, 9444732965739290427ull,
+ 15347691069326346944ull, 35184372088ull}},
+{{14462247353788288467ull, 442721857769029238ull,
+ 12248638064943142273ull, 70368744177ull}},
+{{10477750633867025318ull, 885443715538058477ull,
+ 6050532056176732930ull, 140737488355ull}},
+{{2508757194024499020ull, 1770887431076116955ull,
+ 12101064112353465860ull, 281474976710ull}},
+{{501751438804899804ull, 354177486215223391ull, 2420212822470693172ull,
+ 56294995342ull}},
+{{1003502877609799608ull, 708354972430446782ull, 4840425644941386344ull,
+ 112589990684ull}},
+{{2007005755219599216ull, 1416709944860893564ull,
+ 9680851289882772688ull, 225179981368ull}},
+{{401401151043919844ull, 3972690803714089036ull,
+ 13004216702202285507ull, 45035996273ull}},
+{{802802302087839687ull, 7945381607428178072ull, 7561689330695019398ull,
+ 90071992547ull}},
+{{1605604604175679373ull, 15890763214856356144ull,
+ 15123378661390038796ull, 180143985094ull}},
+{{15078516179802777168ull, 3178152642971271228ull,
+ 17782070991245649052ull, 36028797018ull}},
+{{11710288285896002719ull, 6356305285942542457ull,
+ 17117397908781746488ull, 72057594037ull}},
+{{4973832498082453822ull, 12712610571885084915ull,
+ 15788051743853941360ull, 144115188075ull}},
+{{9947664996164907643ull, 6978477070060618214ull,
+ 13129359413998331105ull, 288230376151ull}},
+{{1989532999232981529ull, 5085044228754033966ull,
+ 6315220697541576544ull, 57646075230ull}},
+{{3979065998465963058ull, 10170088457508067932ull,
+ 12630441395083153088ull, 115292150460ull}},
+{{7958131996931926115ull, 1893432841306584248ull,
+ 6814138716456754561ull, 230584300921ull}},
+{{1591626399386385223ull, 7757384197745137496ull,
+ 5052176558033261235ull, 46116860184ull}},
+{{3183252798772770446ull, 15514768395490274992ull,
+ 10104353116066522470ull, 92233720368ull}},
+{{6366505597545540892ull, 12582792717270998368ull,
+ 1761962158423493325ull, 184467440737ull}},
+{{1273301119509108179ull, 9895256172938020320ull,
+ 7731090061168519311ull, 36893488147ull}},
+{{2546602239018216357ull, 1343768272166489024ull,
+ 15462180122337038623ull, 73786976294ull}},
+{{5093204478036432714ull, 2687536544332978048ull,
+ 12477616170964525630ull, 147573952589ull}},
+{{10186408956072865427ull, 5375073088665956096ull,
+ 6508488268219499644ull, 295147905179ull}},
+{{16794677050182214379ull, 12143061061958922188ull,
+ 16059092912611541221ull, 59029581035ull}},
+{{15142610026654877141ull, 5839378050208292761ull,
+ 13671441751513530827ull, 118059162071ull}},
+{{11838475979600202665ull, 11678756100416585523ull,
+ 8896139429317510038ull, 236118324143ull}},
+{{17125090454887681826ull, 6025100034825227427ull,
+ 12847274330089232977ull, 47223664828ull}},
+{{15803436836065812036ull, 12050200069650454855ull,
+ 7247804586468914338ull, 94447329657ull}},
+{{13160129598422072455ull, 5653656065591358095ull,
+ 14495609172937828677ull, 188894659314ull}},
+{{6321374734426324815ull, 4820080027860181942ull,
+ 17656517093555207028ull, 37778931862ull}},
+{{12642749468852649629ull, 9640160055720363884ull,
+ 16866290113400862440ull, 75557863725ull}},
+{{6838754863995747641ull, 833576037731176153ull,
+ 15285836153092173265ull, 151115727451ull}},
+{{13677509727991495281ull, 1667152075462352306ull,
+ 12124928232474794914ull, 302231454903ull}},
+{{13803548389824030026ull, 7712128044576291107ull,
+ 13493032090720689952ull, 60446290980ull}},
+{{9160352705938508436ull, 15424256089152582215ull,
+ 8539320107731828288ull, 120892581961ull}},
+{{18320705411877016871ull, 12401768104595612814ull,
+ 17078640215463656577ull, 241785163922ull}},
+{{14732187526601134344ull, 17237748879886763855ull,
+ 10794425672576551961ull, 48357032784ull}},
+{{11017630979492717072ull, 16028753686063976095ull,
+ 3142107271443552307ull, 96714065569ull}},
+{{3588517885275882528ull, 13610763298418400575ull,
+ 6284214542887104615ull, 193428131138ull}},
+{{11785750021280907476ull, 13790199103909411084ull,
+ 12324889352803151892ull, 38685626227ull}},
+{{5124755968852263335ull, 9133654134109270553ull,
+ 6203034631896752169ull, 77371252455ull}},
+{{10249511937704526669ull, 18267308268218541106ull,
+ 12406069263793504338ull, 154742504910ull}},
+{{2052279801699501721ull, 18087872462727530597ull,
+ 6365394453877457061ull, 309485009821ull}},
+{{15167851219307541637ull, 10996272122029326765ull,
+ 4962427705517401735ull, 61897001964ull}},
+{{11888958364905531658ull, 3545800170349101915ull,
+ 9924855411034803471ull, 123794003928ull}},
+{{5331172656101511700ull, 7091600340698203831ull,
+ 1402966748360055326ull, 247588007857ull}},
+{{15823629790187943633ull, 12486366512365371735ull,
+ 7659290979155831711ull, 49517601571ull}},
+{{13200515506666335650ull, 6525988951021191855ull,
+ 15318581958311663423ull, 99035203142ull}},
+{{7954286939623119683ull, 13051977902042383711ull,
+ 12190419842913775230ull, 198070406285ull}},
+{{5280206202666534260ull, 2610395580408476742ull,
+ 2438083968582755046ull, 39614081257ull}},
+{{10560412405333068520ull, 5220791160816953484ull,
+ 4876167937165510092ull, 79228162514ull}},
+{{2674080736956585423ull, 10441582321633906969ull,
+ 9752335874331020184ull, 158456325028ull}},
+{{5348161473913170846ull, 2436420569558262322ull,
+ 1057927674952488753ull, 316912650057ull}},
+{{8448329924266454816ull, 487284113911652464ull, 7590283164474318397ull,
+ 63382530011ull}},
+{{16896659848532909632ull, 974568227823304928ull,
+ 15180566328948636794ull, 126765060022ull}},
+{{15346575623356267647ull, 1949136455646609857ull,
+ 11914388584187721972ull, 253530120045ull}},
+{{17826710383638894823ull, 7768524920613142617ull,
+ 2382877716837544394ull, 50706024009ull}},
+{{17206676693568238029ull, 15537049841226285235ull,
+ 4765755433675088788ull, 101412048018ull}},
+{{15966609313426924441ull, 12627355608743018855ull,
+ 9531510867350177577ull, 202824096036ull}},
+{{14261368306911115858ull, 13593517565974334740ull,
+ 5595650988211945838ull, 40564819207ull}},
+{{10075992540112680100ull, 8740291058239117865ull,
+ 11191301976423891677ull, 81129638414ull}},
+{{1705241006515808583ull, 17480582116478235731ull,
+ 3935859879138231738ull, 162259276829ull}},
+{{3410482013031617166ull, 16514420159246919846ull,
+ 7871719758276463477ull, 324518553658ull}},
+{{4371445217348233757ull, 3302884031849383969ull,
+ 12642390395881023665ull, 64903710731ull}},
+{{8742890434696467513ull, 6605768063698767938ull,
+ 6838036718052495714ull, 129807421463ull}},
+{{17485780869392935026ull, 13211536127397535876ull,
+ 13676073436104991428ull, 259614842926ull}},
+{{3497156173878587006ull, 17399702484447148468ull,
+ 6424563501962908608ull, 51922968585ull}},
+{{6994312347757174011ull, 16352660895184745320ull,
+ 12849127003925817217ull, 103845937170ull}},
+{{13988624695514348021ull, 14258577716659939024ull,
+ 7251509934142082819ull, 207691874341ull}},
+{{17555120198070510897ull, 2851715543331987804ull,
+ 5139650801570326887ull, 41538374868ull}},
+{{16663496322431470178ull, 5703431086663975609ull,
+ 10279301603140653774ull, 83076749736ull}},
+{{14880248571153388740ull, 11406862173327951219ull,
+ 2111859132571755932ull, 166153499473ull}},
+{{17733444973198319041ull, 2281372434665590243ull,
+ 11490418270740082156ull, 33230699894ull}},
+{{17020145872687086466ull, 4562744869331180487ull,
+ 4534092467770612696ull, 66461399789ull}},
+{{15593547671664621315ull, 9125489738662360975ull,
+ 9068184935541225392ull, 132922799578ull}},
+{{12740351269619691014ull, 18250979477324721951ull,
+ 18136369871082450784ull, 265845599156ull}},
+{{6237419068665848526ull, 3650195895464944390ull,
+ 7316622788958400480ull, 53169119831ull}},
+{{12474838137331697052ull, 7300391790929888780ull,
+ 14633245577916800960ull, 106338239662ull}},
+{{6502932200953842488ull, 14600783581859777561ull,
+ 10819747082124050304ull, 212676479325ull}},
+{{1300586440190768498ull, 17677551975339596805ull,
+ 2163949416424810060ull, 42535295865ull}},
+{{2601172880381536995ull, 16908359876969641994ull,
+ 4327898832849620121ull, 85070591730ull}},
+{{5202345760763073990ull, 15369975680229732372ull,
+ 8655797665699240243ull, 170141183460ull}},
+{{1040469152152614798ull, 14142041580271677444ull,
+ 1731159533139848048ull, 34028236692ull}},
+{{2080938304305229596ull, 9837339086833803272ull,
+ 3462319066279696097ull, 68056473384ull}},
+{{4161876608610459192ull, 1227934099958054928ull,
+ 6924638132559392195ull, 136112946768ull}},
+{{8323753217220918384ull, 2455868199916109856ull,
+ 13849276265118784390ull, 272225893536ull}},
+{{9043448272928004324ull, 4180522454725132294ull,
+ 6459204067765667201ull, 54445178707ull}},
+{{18086896545856008647ull, 8361044909450264588ull,
+ 12918408135531334402ull, 108890357414ull}},
+{{17727049018002465677ull, 16722089818900529177ull,
+ 7390072197353117188ull, 217780714829ull}},
+{{18302805062568134429ull, 10723115593263926481ull,
+ 16235409698438264730ull, 43556142965ull}},
+{{18158866051426717241ull, 2999487112818301347ull,
+ 14024075323166977845ull, 87112285931ull}},
+{{17870988029143882865ull, 5998974225636602695ull,
+ 9601406572624404074ull, 174224571863ull}},
+{{10952895235312597220ull, 8578492474611141185ull,
+ 12988327758750611784ull, 34844914372ull}},
+{{3459046396915642823ull, 17156984949222282371ull,
+ 7529911443791671952ull, 69689828745ull}},
+{{6918092793831285646ull, 15867225824735013126ull,
+ 15059822887583343905ull, 139379657490ull}},
+{{13836185587662571291ull, 13287707575760474636ull,
+ 11672901701457136195ull, 278759314981ull}},
+{{10145934747016334905ull, 6346890329894005250ull,
+ 6023929155033337562ull, 55751862996ull}},
+{{1845125420323118193ull, 12693780659788010501ull,
+ 12047858310066675124ull, 111503725992ull}},
+{{3690250840646236386ull, 6940817245866469386ull,
+ 5648972546423798633ull, 223007451985ull}},
+{{15495445427096888570ull, 12456209893399024846ull,
+ 1129794509284759726ull, 44601490397ull}},
+{{12544146780484225524ull, 6465675713088498077ull,
+ 2259589018569519453ull, 89202980794ull}},
+{{6641549487258899432ull, 12931351426176996155ull,
+ 4519178037139038906ull, 178405961588ull}},
+{{16085705156419421180ull, 17343665544203040523ull,
+ 11971882051653538750ull, 35681192317ull}},
+{{13724666239129290743ull, 16240587014696529431ull,
+ 5497020029597525885ull, 71362384635ull}},
+{{9002588404549029869ull, 14034429955683507247ull,
+ 10994040059195051771ull, 142724769270ull}},
+{{18005176809098059738ull, 9622115837657462878ull,
+ 3541336044680551927ull, 285449538541ull}},
+{{7290384176561522271ull, 12992469611757223545ull,
+ 4397616023678020708ull, 57089907708ull}},
+{{14580768353123044542ull, 7538195149804895474ull,
+ 8795232047356041417ull, 114179815416ull}},
+{{10714792632536537467ull, 15076390299609790949ull,
+ 17590464094712082834ull, 228359630832ull}},
+{{2142958526507307494ull, 6704626874663868513ull,
+ 10896790448426237213ull, 45671926166ull}},
+{{4285917053014614987ull, 13409253749327737026ull,
+ 3346836823142922810ull, 91343852333ull}},
+{{8571834106029229974ull, 8371763424945922436ull,
+ 6693673646285845621ull, 182687704666ull}},
+{{12782413265431576965ull, 9053050314473005133ull,
+ 5028083543999079447ull, 36537540933ull}},
+{{7118082457153602313ull, 18106100628946010267ull,
+ 10056167087998158894ull, 73075081866ull}},
+{{14236164914307204626ull, 17765457184182468918ull,
+ 1665590102286766173ull, 146150163733ull}},
+{{10025585754904857635ull, 17084170294655386221ull,
+ 3331180204573532347ull, 292300327466ull}},
+{{16762512409948612820ull, 14484880503156808213ull,
+ 4355584855656616792ull, 58460065493ull}},
+{{15078280746187674024ull, 10523016932604064811ull,
+ 8711169711313233585ull, 116920130986ull}},
+{{11709817418665796431ull, 2599289791498578007ull,
+ 17422339422626467171ull, 233840261972ull}},
+{{2341963483733159287ull, 11587904402525446571ull,
+ 10863165514009114080ull, 46768052394ull}},
+{{4683926967466318573ull, 4729064731341341526ull,
+ 3279586954308676545ull, 93536104789ull}},
+{{9367853934932637145ull, 9458129462682683052ull,
+ 6559173908617353090ull, 187072209578ull}},
+{{1873570786986527429ull, 12959672336762267580ull,
+ 12379881225949201587ull, 37414441915ull}},
+{{3747141573973054858ull, 7472600599814983544ull,
+ 6313018378188851559ull, 74828883831ull}},
+{{7494283147946109716ull, 14945201199629967088ull,
+ 12626036756377703118ull, 149657767662ull}},
+{{14988566295892219432ull, 11443658325550382560ull,
+ 6805329439045854621ull, 299315535325ull}},
+{{6687062073920354210ull, 5978080479851986835ull,
+ 1361065887809170924ull, 59863107065ull}},
+{{13374124147840708419ull, 11956160959703973670ull,
+ 2722131775618341848ull, 119726214130ull}},
+{{8301504221971865222ull, 5465577845698395725ull,
+ 5444263551236683697ull, 239452428260ull}},
+{{9038998473878193691ull, 8471813198623499791ull,
+ 1088852710247336739ull, 47890485652ull}},
+{{18077996947756387382ull, 16943626397246999582ull,
+ 2177705420494673478ull, 95780971304ull}},
+{{17709249821803223148ull, 15440508720784447549ull,
+ 4355410840989346957ull, 191561942608ull}},
+{{18299245223328285923ull, 3088101744156889509ull,
+ 11939128612423600361ull, 38312388521ull}},
+{{18151746372947020229ull, 6176203488313779019ull,
+ 5431513151137649106ull, 76624777043ull}},
+{{17856748672184488841ull, 12352406976627558039ull,
+ 10863026302275298212ull, 153249554086ull}},
+{{17266753270659426066ull, 6258069879545564463ull,
+ 3279308530841044809ull, 306499108173ull}},
+{{3453350654131885214ull, 8630311605392933539ull,
+ 11723908150393939931ull, 61299821634ull}},
+{{6906701308263770427ull, 17260623210785867078ull,
+ 5001072227078328246ull, 122599643269ull}},
+{{13813402616527540853ull, 16074502347862182540ull,
+ 10002144454156656493ull, 245199286538ull}},
+{{6452029338047418494ull, 6904249284314346831ull,
+ 13068475335057062268ull, 49039857307ull}},
+{{12904058676094836988ull, 13808498568628693662ull,
+ 7690206596404572920ull, 98079714615ull}},
+{{7361373278480122359ull, 9170253063547835709ull,
+ 15380413192809145841ull, 196159429230ull}},
+{{1472274655696024472ull, 5523399427451477465ull,
+ 3076082638561829168ull, 39231885846ull}},
+{{2944549311392048944ull, 11046798854902954930ull,
+ 6152165277123658336ull, 78463771692ull}},
+{{5889098622784097888ull, 3646853636096358244ull,
+ 12304330554247316673ull, 156927543384ull}},
+{{11778197245568195775ull, 7293707272192716488ull,
+ 6161917034785081730ull, 313855086769ull}},
+{{9734337078597459802ull, 16216136713406184590ull,
+ 15989778665924657638ull, 62771017353ull}},
+{{1021930083485367987ull, 13985529353102817565ull,
+ 13532813258139763661ull, 125542034707ull}},
+{{2043860166970735973ull, 9524314632496083514ull,
+ 8618882442569975707ull, 251084069415ull}},
+{{4098120848136057518ull, 9283560555983037349ull,
+ 1723776488513995141ull, 50216813883ull}},
+{{8196241696272115036ull, 120377038256523082ull, 3447552977027990283ull,
+ 100433627766ull}},
+{{16392483392544230072ull, 240754076513046164ull,
+ 6895105954055980566ull, 200867255532ull}},
+{{10657194307992666661ull, 11116197259528340202ull,
+ 8757718820295016759ull, 40173451106ull}},
+{{2867644542275781706ull, 3785650445347128789ull,
+ 17515437640590033519ull, 80346902212ull}},
+{{5735289084551563411ull, 7571300890694257578ull,
+ 16584131207470515422ull, 160693804425ull}},
+{{11470578169103126821ull, 15142601781388515156ull,
+ 14721518341231479228ull, 321387608851ull}},
+{{2294115633820625365ull, 17785915615245344324ull,
+ 6633652482988206168ull, 64277521770ull}},
+{{4588231267641250729ull, 17125087156781137032ull,
+ 13267304965976412337ull, 128555043540ull}},
+{{9176462535282501457ull, 15803430239852722448ull,
+ 8087865858243273059ull, 257110087081ull}},
+{{12903338951282231261ull, 3160686047970544489ull,
+ 5306921986390564935ull, 51422017416ull}},
+{{7359933828854910906ull, 6321372095941088979ull,
+ 10613843972781129870ull, 102844034832ull}},
+{{14719867657709821812ull, 12642744191882177958ull,
+ 2780943871852708124ull, 205688069665ull}},
+{{10322671161025785009ull, 17285944097344076884ull,
+ 556188774370541624ull, 41137613933ull}},
+{{2198598248342018402ull, 16125144120978602153ull,
+ 1112377548741083249ull, 82275227866ull}},
+{{4397196496684036804ull, 13803544168247652690ull,
+ 2224755097482166499ull, 164550455732ull}},
+{{4568788114078717684ull, 6450057648391440861ull,
+ 7823648648980253946ull, 32910091146ull}},
+{{9137576228157435368ull, 12900115296782881722ull,
+ 15647297297960507892ull, 65820182292ull}},
+{{18275152456314870736ull, 7353486519856211828ull,
+ 12847850522211464169ull, 131640364585ull}},
+{{18103560838920189855ull, 14706973039712423657ull,
+ 7248956970713376722ull, 263280729171ull}},
+{{3620712167784037971ull, 14009441052168215701ull,
+ 5139140208884585667ull, 52656145834ull}},
+{{7241424335568075942ull, 9572138030626879786ull,
+ 10278280417769171335ull, 105312291668ull}},
+{{14482848671136151884ull, 697531987544207956ull,
+ 2109816761828791055ull, 210624583337ull}},
+{{13964616178452961347ull, 7518204026992662237ull,
+ 7800660981849578857ull, 42124916667ull}},
+{{9482488283196371077ull, 15036408053985324475ull,
+ 15601321963699157714ull, 84249833334ull}},
+{{518232492683190538ull, 11626072034261097335ull,
+ 12755899853688763813ull, 168499666669ull}},
+{{7482344128020458754ull, 9703912036336040113ull,
+ 17308575229705394055ull, 33699933333ull}},
+{{14964688256040917508ull, 961079998962528610ull,
+ 16170406385701236495ull, 67399866667ull}},
+{{11482632438372283400ull, 1922159997925057221ull,
+ 13894068697692921374ull, 134799733335ull}},
+{{4518520803035015183ull, 3844319995850114443ull,
+ 9341393321676291132ull, 269599466671ull}},
+{{4593052975348913360ull, 11836910443395753858ull,
+ 5557627479077168549ull, 53919893334ull}},
+{{9186105950697826720ull, 5227076813081956100ull,
+ 11115254958154337099ull, 107839786668ull}},
+{{18372211901395653440ull, 10454153626163912200ull,
+ 3783765842599122582ull, 215679573337ull}},
+{{18431837639246771981ull, 16848225984200423732ull,
+ 8135450798003645162ull, 43135914667ull}},
+{{18416931204783992346ull, 15249707894691295849ull,
+ 16270901596007290325ull, 86271829334ull}},
+{{18387118335858433075ull, 12052671715673040083ull,
+ 14095059118305029035ull, 172543658669ull}},
+{{11056121296655507262ull, 17167929602102249309ull,
+ 17576407082628647099ull, 34508731733ull}},
+{{3665498519601462907ull, 15889115130494947003ull,
+ 16706070091547742583ull, 69017463467ull}},
+{{7330997039202925814ull, 13331486187280342390ull,
+ 14965396109385933551ull, 138034926935ull}},
+{{14661994078405851627ull, 8216228300851133164ull,
+ 11484048145062315487ull, 276069853871ull}},
+{{10311096445164990972ull, 12711292104395957602ull,
+ 5986158443754373420ull, 55213970774ull}},
+{{2175448816620430328ull, 6975840135082363589ull,
+ 11972316887508746841ull, 110427941548ull}},
+{{4350897633240860655ull, 13951680270164727178ull,
+ 5497889701307942066ull, 220855883097ull}},
+{{4559528341390082455ull, 13858382498258676405ull,
+ 8478275569745409059ull, 44171176619ull}},
+{{9119056682780164909ull, 9270020922807801194ull,
+ 16956551139490818119ull, 88342353238ull}},
+{{18238113365560329817ull, 93297771906050772ull,
+ 15466358205272084623ull, 176684706477ull}},
+{{11026320302595886610ull, 18659554381210154ull,
+ 10471969270538237571ull, 35336941295ull}},
+{{3605896531482221604ull, 37319108762420309ull, 2497194467366923526ull,
+ 70673882591ull}},
+{{7211793062964443207ull, 74638217524840618ull, 4994388934733847052ull,
+ 141347765182ull}},
+{{14423586125928886414ull, 149276435049681236ull,
+ 9988777869467694104ull, 282695530364ull}},
+{{17642112484153418576ull, 11097901731235667216ull,
+ 16755150832861180113ull, 56539106072ull}},
+{{16837480894597285536ull, 3749059388761782817ull,
+ 15063557592012808611ull, 113078212145ull}},
+{{15228217715485019455ull, 7498118777523565635ull,
+ 11680371110316065606ull, 226156424291ull}},
+{{10424341172580824538ull, 8878321384988533773ull,
+ 6025423036805123444ull, 45231284858ull}},
+{{2401938271452097459ull, 17756642769977067547ull,
+ 12050846073610246888ull, 90462569716ull}},
+{{4803876542904194917ull, 17066541466244583478ull,
+ 5654948073510942161ull, 180925139433ull}},
+{{8339472938064659630ull, 18170703552216557988ull,
+ 12199036058927919401ull, 36185027886ull}},
+{{16678945876129319260ull, 17894663030723564360ull,
+ 5951328044146287187ull, 72370055773ull}},
+{{14911147678549086904ull, 17342581987737577105ull,
+ 11902656088292574375ull, 144740111546ull}},
+{{11375551283388622191ull, 16238419901765602595ull,
+ 5358568102875597135ull, 289480223093ull}},
+{{13343156700903455408ull, 14315730424578851488ull,
+ 12139760064800850396ull, 57896044618ull}},
+{{8239569328097359200ull, 10184716775448151361ull,
+ 5832776055892149177ull, 115792089237ull}},
+{{16479138656194718399ull, 1922689477186751106ull,
+ 11665552111784298355ull, 231584178474ull}},
+{{3295827731238943680ull, 15141933154404991514ull,
+ 17090505681324500963ull, 46316835694ull}},
+{{6591655462477887360ull, 11837122235100431412ull,
+ 15734267288939450311ull, 92633671389ull}},
+{{13183310924955774719ull, 5227500396491311208ull,
+ 13021790504169349007ull, 185267342779ull}},
+{{17394057443958796237ull, 4734848894040172564ull,
+ 17361753359801511094ull, 37053468555ull}},
+{{16341370814208040858ull, 9469697788080345129ull,
+ 16276762645893470572ull, 74106937111ull}},
+{{14235997554706530099ull, 492651502451138643ull,
+ 14106781218077389529ull, 148213874223ull}},
+{{10025251035703508581ull, 985303004902277287ull,
+ 9766818362445227442ull, 296427748447ull}},
+{{5694399021882612040ull, 14954455859948096750ull,
+ 9332061301972866134ull, 59285549689ull}},
+{{11388798043765224079ull, 11462167646186641884ull,
+ 217378530236180653ull, 118571099379ull}},
+{{4330852013820896542ull, 4477591218663732153ull, 434757060472361307ull,
+ 237142198758ull}},
+{{11934216846989910278ull, 895518243732746430ull,
+ 11154997856320203231ull, 47428439751ull}},
+{{5421689620270268940ull, 1791036487465492861ull,
+ 3863251638930854846ull, 94856879503ull}},
+{{10843379240540537880ull, 3582072974930985722ull,
+ 7726503277861709692ull, 189713759006ull}},
+{{2168675848108107576ull, 11784461039211928114ull,
+ 5234649470314252261ull, 37942751801ull}},
+{{4337351696216215152ull, 5122178004714304612ull,
+ 10469298940628504523ull, 75885503602ull}},
+{{8674703392432430304ull, 10244356009428609224ull,
+ 2491853807547457430ull, 151771007205ull}},
+{{17349406784864860608ull, 2041967945147666832ull,
+ 4983707615094914861ull, 303542014410ull}},
+{{14537927801198703092ull, 4097742403771443689ull,
+ 996741523018982972ull, 60708402882ull}},
+{{10629111528687854567ull, 8195484807542887379ull,
+ 1993483046037965944ull, 121416805764ull}},
+{{2811478983666157517ull, 16390969615085774759ull,
+ 3986966092075931888ull, 242833611528ull}},
+{{562295796733231504ull, 6967542737759065275ull,
+ 11865439662640917347ull, 48566722305ull}},
+{{1124591593466463007ull, 13935085475518130550ull,
+ 5284135251572283078ull, 97133444611ull}},
+{{2249183186932926013ull, 9423426877326709484ull,
+ 10568270503144566157ull, 194266889222ull}},
+{{11517883081612316173ull, 16642080634432983189ull,
+ 9492351730112733877ull, 38853377844ull}},
+{{4589022089515080729ull, 14837417195156414763ull,
+ 537959386515916139ull, 77706755689ull}},
+{{9178044179030161457ull, 11228090316603277910ull,
+ 1075918773031832279ull, 155413511378ull}},
+{{18356088358060322914ull, 4009436559497004204ull,
+ 2151837546063664559ull, 310827022756ull}},
+{{18428612930579705876ull, 801887311899400840ull,
+ 4119716323954643235ull, 62165404551ull}},
+{{18410481787449860135ull, 1603774623798801681ull,
+ 8239432647909286470ull, 124330809102ull}},
+{{18374219501190168654ull, 3207549247597603363ull,
+ 16478865295818572940ull, 248661618204ull}},
+{{11053541529721854378ull, 15398905108487161965ull,
+ 18053168318131355880ull, 49732323640ull}},
+{{3660338985734157139ull, 12351066143264772315ull,
+ 17659592562553160145ull, 99464647281ull}},
+{{7320677971468314277ull, 6255388212819993014ull,
+ 16872441051396768675ull, 198929294563ull}},
+{{8842833223777483502ull, 12319124086789729572ull,
+ 14442534654505084704ull, 39785858912ull}},
+{{17685666447554967004ull, 6191504099869907528ull,
+ 10438325235300617793ull, 79571717825ull}},
+{{16924588821400382391ull, 12383008199739815057ull,
+ 2429906396891683970ull, 159143435651ull}},
+{{15402433569091213166ull, 6319272325770078499ull,
+ 4859812793783367941ull, 318286871302ull}},
+{{10459184343302063280ull, 12331900909379746669ull,
+ 8350660188240494234ull, 63657374260ull}},
+{{2471624612894574944ull, 6217057745049941723ull,
+ 16701320376480988469ull, 127314748520ull}},
+{{4943249225789149887ull, 12434115490099883446ull,
+ 14955896679252425322ull, 254629497041ull}},
+{{15746045104125471271ull, 13554869542245707658ull,
+ 6680528150592395387ull, 50925899408ull}},
+{{13045346134541390925ull, 8662995010781863701ull,
+ 13361056301184790775ull, 101851798816ull}},
+{{7643948195373230233ull, 17325990021563727403ull,
+ 8275368528660029934ull, 203703597633ull}},
+{{1528789639074646047ull, 10843895633796566127ull,
+ 12723120149957736956ull, 40740719526ull}},
+{{3057579278149292093ull, 3241047193883580638ull,
+ 6999496226205922297ull, 81481439053ull}},
+{{6115158556298584186ull, 6482094387767161276ull,
+ 13998992452411844594ull, 162962878106ull}},
+{{12230317112597168372ull, 12964188775534322552ull,
+ 9551240831114137572ull, 325925756213ull}},
+{{9824761052003254321ull, 2592837755106864510ull,
+ 12978294610448558484ull, 65185151242ull}},
+{{1202778030296957026ull, 5185675510213729021ull,
+ 7509845147187565352ull, 130370302485ull}},
+{{2405556060593914051ull, 10371351020427458042ull,
+ 15019690294375130704ull, 260740604970ull}},
+{{4170460026860693134ull, 16831665463053132901ull,
+ 3003938058875026140ull, 52148120994ull}},
+{{8340920053721386267ull, 15216586852396714186ull,
+ 6007876117750052281ull, 104296241988ull}},
+{{16681840107442772534ull, 11986429631083876756ull,
+ 12015752235500104563ull, 208592483976ull}},
+{{3336368021488554507ull, 17154681185184416644ull,
+ 6092499261841931235ull, 41718496795ull}},
+{{6672736042977109014ull, 15862618296659281672ull,
+ 12184998523683862471ull, 83436993590ull}},
+{{13345472085954218027ull, 13278492519609011728ull,
+ 5923252973658173327ull, 166873987181ull}},
+{{6358443231932753929ull, 13723744948147533315ull,
+ 4873999409473544988ull, 33374797436ull}},
+{{12716886463865507858ull, 9000745822585515014ull,
+ 9747998818947089977ull, 66749594872ull}},
+{{6987028854021464099ull, 18001491645171030029ull,
+ 1049253564184628338ull, 133499189745ull}},
+{{13974057708042928197ull, 17556239216632508442ull,
+ 2098507128369256677ull, 266998379490ull}},
+{{17552206800576226933ull, 10889945472810322334ull,
+ 419701425673851335ull, 53399675898ull}},
+{{16657669527442902249ull, 3333146871911093053ull,
+ 839402851347702671ull, 106799351796ull}},
+{{14868594981176252881ull, 6666293743822186107ull,
+ 1678805702695405342ull, 213598703592ull}},
+{{6663067810977160900ull, 16090654007732078514ull,
+ 7714458770022901714ull, 42719740718ull}},
+{{13326135621954321799ull, 13734563941754605412ull,
+ 15428917540045803429ull, 85439481436ull}},
+{{8205527170199091982ull, 9022383809799659209ull,
+ 12411091006382055243ull, 170878962873ull}},
+{{1641105434039818397ull, 5493825576701842165ull,
+ 13550264645502142018ull, 34175792574ull}},
+{{3282210868079636793ull, 10987651153403684330ull,
+ 8653785217294732420ull, 68351585149ull}},
+{{6564421736159273585ull, 3528558233097817044ull,
+ 17307570434589464841ull, 136703170298ull}},
+{{13128843472318547170ull, 7057116466195634088ull,
+ 16168396795469378066ull, 273406340597ull}},
+{{6315117509205619758ull, 12479469737464857787ull,
+ 10612376988577696259ull, 54681268119ull}},
+{{12630235018411239515ull, 6512195401220163958ull,
+ 2778009903445840903ull, 109362536239ull}},
+{{6813725963112927413ull, 13024390802440327917ull,
+ 5556019806891681806ull, 218725072478ull}},
+{{5052094007364495806ull, 17362273419455706876ull,
+ 12179250405604067330ull, 43745014495ull}},
+{{10104188014728991612ull, 16277802765201862136ull,
+ 5911756737498583045ull, 87490028991ull}},
+{{1761631955748431607ull, 14108861456694172657ull,
+ 11823513474997166091ull, 174980057982ull}},
+{{352326391149686322ull, 13889818735564565501ull,
+ 9743400324483253864ull, 34996011596ull}},
+{{704652782299372643ull, 9332893397419579386ull, 1040056575256956113ull,
+ 69992023193ull}},
+{{1409305564598745286ull, 219042721129607156ull, 2080113150513912227ull,
+ 139984046386ull}},
+{{2818611129197490572ull, 438085442259214312ull, 4160226301027824454ull,
+ 279968092772ull}},
+{{11631768670065229084ull, 3776965903193753185ull,
+ 8210742889689385537ull, 55993618554ull}},
+{{4816793266420906552ull, 7553931806387506371ull,
+ 16421485779378771074ull, 111987237108ull}}
+};
+
+static const UINT128 coefflimits_bid32[] = { {{10000000ull, 0ull}},
+{{2000000ull, 0ull}},
+{{400000ull, 0ull}},
+{{80000ull, 0ull}},
+{{16000ull, 0ull}},
+{{3200ull, 0ull}},
+{{640ull, 0ull}},
+{{128ull, 0ull}},
+{{25ull, 0ull}},
+{{5ull, 0ull}},
+{{1ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}}
+};
+
+// **********************************************************************
+
+static const UINT128 breakpoints_bid64[] = { {{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{632147898099709952ull, 73239311802481213ull}},
+{{9539445985904630784ull, 36619655901240606ull}},
+{{4769722992952315392ull, 18309827950620303ull}},
+{{5401870891052025344ull, 91549139753101516ull}},
+{{2700935445526012672ull, 45774569876550758ull}},
+{{1350467722763006208ull, 22887284938275379ull}},
+{{6752338613815031552ull, 114436424691376895ull}},
+{{12599541343762291456ull, 57218212345688447ull}},
+{{15523142708735921408ull, 28609106172844223ull}},
+{{3828737248841401600ull, 143045530864221119ull}},
+{{11137740661275476480ull, 71522765432110559ull}},
+{{14792242367492514048ull, 35761382716055279ull}},
+{{16619493220601032704ull, 17880691358027639ull}},
+{{9310489808166957824ull, 89403456790138199ull}},
+{{13878616940938254592ull, 44701728395069099ull}},
+{{16162680507323902976ull, 22350864197534549ull}},
+{{7026426241781309440ull, 111754320987672749ull}},
+{{12736585157745430528ull, 55877160493836374ull}},
+{{6368292578872715264ull, 27938580246918187ull}},
+{{13394718820654024704ull, 139692901234590936ull}},
+{{6697359410327012352ull, 69846450617295468ull}},
+{{3348679705163506176ull, 34923225308647734ull}},
+{{1674339852581753088ull, 17461612654323867ull}},
+{{8371699262908765440ull, 87308063271619335ull}},
+{{13409221668309158400ull, 43654031635809667ull}},
+{{15927982871009355008ull, 21827015817904833ull}},
+{{5852938060208568832ull, 109135079089524169ull}},
+{{12149841066959060224ull, 54567539544762084ull}},
+{{6074920533479529984ull, 27283769772381042ull}},
+{{11927858593688099072ull, 136418848861905211ull}},
+{{15187301333698825216ull, 68209424430952605ull}},
+{{16817022703704188416ull, 34104712215476302ull}},
+{{8408511351852094208ull, 17052356107738151ull}},
+{{5149068611841367808ull, 85261780538690757ull}},
+{{11797906342775459584ull, 42630890269345378ull}},
+{{5898953171387729664ull, 21315445134672689ull}},
+{{11048021783229097728ull, 106577225673363446ull}},
+{{5524010891614548736ull, 53288612836681723ull}},
+{{11985377482662050048ull, 26644306418340861ull}},
+{{4586655192181596416ull, 133221532091704308ull}},
+{{2293327596090798080ull, 66610766045852154ull}},
+{{1146663798045399040ull, 33305383022926077ull}},
+{{9796703935877475328ull, 16652691511463038ull}},
+{{12090031531968273664ull, 83263457557315192ull}},
+{{6045015765984136704ull, 41631728778657596ull}},
+{{3022507882992068352ull, 20815864389328798ull}},
+{{15112539414960342016ull, 104079321946643990ull}},
+{{7556269707480171008ull, 52039660973321995ull}},
+{{13001506890594861312ull, 26019830486660997ull}},
+{{9667302231845651712ull, 130099152433304988ull}},
+{{4833651115922825728ull, 65049576216652494ull}},
+{{2416825557961412864ull, 32524788108326247ull}},
+{{10431784815835482112ull, 16262394054163123ull}},
+{{15265435931758308096ull, 81311970270815617ull}},
+{{16856090002733929728ull, 40655985135407808ull}},
+{{8428045001366964736ull, 20327992567703904ull}},
+{{5246736859415721472ull, 101639962838519522ull}},
+{{2623368429707860736ull, 50819981419259761ull}},
+{{10535056251708706048ull, 25409990709629880ull}},
+{{15781793111124427520ull, 127049953548149402ull}},
+{{7890896555562213632ull, 63524976774074701ull}},
+{{13168820314635882496ull, 31762488387037350ull}},
+{{6584410157317941248ull, 15881244193518675ull}},
+{{14475306712880155136ull, 79406220967593376ull}},
+{{7237653356440077568ull, 39703110483796688ull}},
+{{3618826678220038656ull, 19851555241898344ull}},
+{{18094133391100194048ull, 99257776209491720ull}},
+{{9047066695550096896ull, 49628888104745860ull}},
+{{4523533347775048448ull, 24814444052372930ull}},
+{{4170922665165690880ull, 124072220261864651ull}},
+{{11308833369437621248ull, 62036110130932325ull}},
+{{14877788721573586432ull, 31018055065466162ull}},
+{{7438894360786793216ull, 15509027532733081ull}},
+{{300983656514862848ull, 77545137663665407ull}},
+{{9373863865112207104ull, 38772568831832703ull}},
+{{13910303969410879232ull, 19386284415916351ull}},
+{{14211287625925742080ull, 96931422079581758ull}},
+{{7105643812962871040ull, 48465711039790879ull}},
+{{12776193943336211200ull, 24232855519895439ull}},
+{{8540737495552401920ull, 121164277599477198ull}},
+{{4270368747776200960ull, 60582138799738599ull}},
+{{11358556410742876160ull, 30291069399869299ull}},
+{{14902650242226213888ull, 15145534699934649ull}},
+{{726274916292863232ull, 75727673499673249ull}},
+{{9586509495001207296ull, 37863836749836624ull}},
+{{4793254747500603648ull, 18931918374918312ull}},
+{{5519529663793467136ull, 94659591874591561ull}},
+{{11983136868751509248ull, 47329795937295780ull}},
+{{5991568434375754496ull, 23664897968647890ull}},
+{{11511098098169221632ull, 118324489843239451ull}},
+{{14978921085939386624ull, 59162244921619725ull}},
+{{16712832579824468992ull, 29581122460809862ull}},
+{{8356416289912234496ull, 14790561230404931ull}},
+{{4888593302142069504ull, 73952806152024657ull}},
+{{11667668687925810432ull, 36976403076012328ull}},
+{{5833834343962905088ull, 18488201538006164ull}},
+{{10722427646104974848ull, 92441007690030821ull}},
+{{14584585859907263232ull, 46220503845015410ull}},
+{{7292292929953631488ull, 23110251922507705ull}},
+{{18014720576058606592ull, 115551259612538526ull}},
+{{9007360288029303296ull, 57775629806269263ull}},
+{{13727052180869427456ull, 28887814903134631ull}},
+{{16086898127289489408ull, 14443907451567315ull}},
+{{6647514341609241088ull, 72219537257836579ull}},
+{{12547129207659396352ull, 36109768628918289ull}},
+{{15496936640684473856ull, 18054884314459144ull}},
+{{3697706908584163584ull, 90274421572295724ull}},
+{{1848853454292081664ull, 45137210786147862ull}},
+{{924426727146040832ull, 22568605393073931ull}},
+{{4622133635730204416ull, 112843026965369655ull}},
+{{11534438854719877888ull, 56421513482684827ull}},
+{{14990591464214714624ull, 28210756741342413ull}},
+{{1165981026235367680ull, 141053783706712069ull}},
+{{9806362549972459520ull, 70526891853356034ull}},
+{{4903181274986229760ull, 35263445926678017ull}},
+{{11674962674347890688ull, 17631722963339008ull}},
+{{3034581150610798848ull, 88158614816695043ull}},
+{{10740662612160175104ull, 44079307408347521ull}},
+{{14593703342934863360ull, 22039653704173760ull}},
+{{17628284493545662208ull, 110198268520868803ull}},
+{{18037514283627606784ull, 55099134260434401ull}},
+{{18242129178668579072ull, 27549567130217200ull}},
+{{17423669598504689920ull, 137747835651086004ull}},
+{{8711834799252344832ull, 68873917825543002ull}},
+{{4355917399626172416ull, 34436958912771501ull}},
+{{11401330736667862016ull, 17218479456385750ull}},
+{{1666421462210655232ull, 86092397281928753ull}},
+{{10056582767960103424ull, 43046198640964376ull}},
+{{5028291383980051712ull, 21523099320482188ull}},
+{{6694712846190706944ull, 107615496602410941ull}},
+{{12570728459950129152ull, 53807748301205470ull}},
+{{6285364229975064576ull, 26903874150602735ull}},
+{{12980077076165771776ull, 134519370753013676ull}},
+{{6490038538082885888ull, 67259685376506838ull}},
+{{3245019269041442816ull, 33629842688253419ull}},
+{{10845881671375497216ull, 16814921344126709ull}},
+{{17335920209458383104ull, 84074606720633547ull}},
+{{17891332141583967232ull, 42037303360316773ull}},
+{{18169038107646759424ull, 21018651680158386ull}},
+{{17058214243395590912ull, 105093258400791934ull}},
+{{8529107121697795328ull, 52546629200395967ull}},
+{{13487925597703673344ull, 26273314600197983ull}},
+{{12099395767389712896ull, 131366573000989918ull}},
+{{6049697883694856448ull, 65683286500494959ull}},
+{{12248220978702203904ull, 32841643250247479ull}},
+{{15347482526205877760ull, 16420821625123739ull}},
+{{2950436336191182592ull, 82104108125618699ull}},
+{{10698590204950366976ull, 41052054062809349ull}},
+{{14572667139329959168ull, 20526027031404674ull}},
+{{17523103475521142016ull, 102630135157023373ull}},
+{{17984923774615346688ull, 51315067578511686ull}},
+{{8992461887307673344ull, 25657533789255843ull}},
+{{8068821289119264000ull, 128287668946279217ull}},
+{{13257782681414407680ull, 64143834473139608ull}},
+{{6628891340707203840ull, 32071917236569804ull}},
+{{3314445670353601792ull, 16035958618284902ull}},
+{{16572228351768009728ull, 80179793091424510ull}},
+{{8286114175884004864ull, 40089896545712255ull}},
+{{13366429124796778240ull, 20044948272856127ull}},
+{{11491913402855236352ull, 100224741364280638ull}},
+{{5745956701427618048ull, 50112370682140319ull}},
+{{12096350387568584704ull, 25056185341070159ull}},
+{{5141519716714269696ull, 125280926705350798ull}},
+{{2570759858357134848ull, 62640463352675399ull}},
+{{10508751966033343232ull, 31320231676337699ull}},
+{{14477748019871447296ull, 15660115838168849ull}},
+{{17048507878228582144ull, 78300579190844248ull}},
+{{8524253939114290944ull, 39150289595422124ull}},
+{{4262126969557145344ull, 19575144797711062ull}},
+{{2863890774076176128ull, 97875723988555311ull}},
+{{10655317423892863744ull, 48937861994277655ull}},
+{{14551030748801207552ull, 24468930997138827ull}},
+{{17414921522877383936ull, 122344654985694138ull}},
+{{8707460761438691840ull, 61172327492847069ull}},
+{{13577102417574121728ull, 30586163746423534ull}},
+{{6788551208787060736ull, 15293081873211767ull}},
+{{15496011970225752832ull, 76465409366058836ull}},
+{{7748005985112876288ull, 38232704683029418ull}},
+{{3874002992556438016ull, 19116352341514709ull}},
+{{923270889072639488ull, 95581761707573546ull}},
+{{461635444536319744ull, 47790880853786773ull}},
+{{9454189759122935552ull, 23895440426893386ull}},
+{{10377460648195575040ull, 119477202134466932ull}},
+{{5188730324097787392ull, 59738601067233466ull}},
+{{2594365162048893696ull, 29869300533616733ull}},
+{{10520554617879222528ull, 14934650266808366ull}},
+{{15709284941977010176ull, 74673251334041832ull}},
+{{7854642470988505088ull, 37336625667020916ull}},
+{{3927321235494252544ull, 18668312833510458ull}},
+{{1189862103761711104ull, 93341564167552291ull}},
+{{9818303088735631360ull, 46670782083776145ull}},
+{{14132523581222591488ull, 23335391041888072ull}},
+{{15322385684984302592ull, 116676955209440363ull}},
+{{16884564879346927104ull, 58338477604720181ull}},
+{{17665654476528239360ull, 29169238802360090ull}},
+{{8832827238264119552ull, 14584619401180045ull}},
+{{7270648043901495296ull, 72923097005900227ull}},
+{{12858696058805523456ull, 36461548502950113ull}},
+{{15652720066257537536ull, 18230774251475056ull}},
+{{4476624036449481216ull, 91153871257375284ull}},
+{{2238312018224740608ull, 45576935628687642ull}},
+{{1119156009112370176ull, 22788467814343821ull}},
+{{5595780045561851392ull, 113942339071719105ull}},
+{{12021262059635701504ull, 56971169535859552ull}},
+{{6010631029817850624ull, 28485584767929776ull}},
+{{11606411075379702272ull, 142427923839648881ull}},
+{{15026577574544626944ull, 71213961919824440ull}},
+{{7513288787272313344ull, 35606980959912220ull}},
+{{3756644393636156672ull, 17803490479956110ull}},
+{{336477894471232000ull, 89017452399780551ull}},
+{{9391610984090391808ull, 44508726199890275ull}},
+{{13919177528899971584ull, 22254363099945137ull}},
+{{14255655423371203840ull, 111271815499725688ull}},
+{{7127827711685601792ull, 55635907749862844ull}},
+{{3563913855842800896ull, 27817953874931422ull}},
+{{17819569279214004736ull, 139089769374657110ull}},
+{{8909784639607002368ull, 69544884687328555ull}},
+{{13678264356658276864ull, 34772442343664277ull}},
+{{16062504215183914240ull, 17386221171832138ull}},
+{{6525544781081364992ull, 86931105859160694ull}},
+{{3262772390540682496ull, 43465552929580347ull}},
+{{10854758232125116928ull, 21732776464790173ull}},
+{{17380303013206482176ull, 108663882323950867ull}},
+{{17913523543458016768ull, 54331941161975433ull}},
+{{18180133808583784192ull, 27165970580987716ull}},
+{{17113692748080714752ull, 135829852904938584ull}},
+{{8556846374040357376ull, 67914926452469292ull}},
+{{4278423187020178688ull, 33957463226234646ull}},
+{{2139211593510089216ull, 16978731613117323ull}},
+{{10696057967550446592ull, 84893658065586615ull}},
+{{14571401020629999104ull, 42446829032793307ull}},
+{{16509072547169775360ull, 21223414516396653ull}},
+{{8758386441010670336ull, 106117072581983269ull}},
+{{13602565257360110848ull, 53058536290991634ull}},
+{{6801282628680055296ull, 26529268145495817ull}},
+{{15559669069690725888ull, 132646340727479086ull}},
+{{7779834534845362944ull, 66323170363739543ull}},
+{{13113289304277457152ull, 33161585181869771ull}},
+{{15780016688993504256ull, 16580792590934885ull}},
+{{5113107150129315840ull, 82903962954674429ull}},
+{{11779925611919433728ull, 41451981477337214ull}},
+{{5889962805959716864ull, 20725990738668607ull}},
+{{11003069956089032704ull, 103629953693343036ull}},
+{{5501534978044516352ull, 51814976846671518ull}},
+{{2750767489022258176ull, 25907488423335759ull}},
+{{13753837445111290880ull, 129537442116678795ull}},
+{{16100290759410421248ull, 64768721058339397ull}},
+{{17273517416559986432ull, 32384360529169698ull}},
+{{8636758708279993088ull, 16192180264584849ull}},
+{{6290305393980862720ull, 80960901322924247ull}},
+{{12368524733845207040ull, 40480450661462123ull}},
+{{15407634403777379328ull, 20240225330731061ull}},
+{{3251195724048690688ull, 101201126653655309ull}},
+{{10848969898879121152ull, 50600563326827654ull}},
+{{5424484949439560448ull, 25300281663413827ull}},
+{{8675680673488251136ull, 126501408317069136ull}},
+{{4337840336744125440ull, 63250704158534568ull}},
+{{2168920168372062720ull, 31625352079267284ull}},
+{{1084460084186031360ull, 15812676039633642ull}},
+{{5422300420930157056ull, 79063380198168210ull}},
+{{2711150210465078528ull, 39531690099084105ull}},
+{{10578947142087314944ull, 19765845049542052ull}},
+{{16001247563017472000ull, 98829225247710262ull}},
+{{8000623781508736000ull, 49414612623855131ull}},
+{{13223683927609143808ull, 24707306311927565ull}},
+{{10778187416917064192ull, 123536531559637828ull}},
+{{5389093708458532096ull, 61768265779818914ull}},
+{{2694546854229265920ull, 30884132889909457ull}},
+{{10570645463969408768ull, 15442066444954728ull}},
+{{15959739172427940864ull, 77210332224773642ull}},
+{{7979869586213970432ull, 38605166112386821ull}},
+{{13213306829961761024ull, 19302583056193410ull}},
+{{10726301928680150272ull, 96512915280967053ull}},
+{{14586523001194850816ull, 48256457640483526ull}},
+{{7293261500597425408ull, 24128228820241763ull}},
+{{18019563429277575936ull, 120641144101208816ull}},
+{{9009781714638787840ull, 60320572050604408ull}},
+{{4504890857319393792ull, 30160286025302204ull}},
+{{2252445428659696896ull, 15080143012651102ull}},
+{{11262227143298484992ull, 75400715063255510ull}},
+{{5631113571649242368ull, 37700357531627755ull}},
+{{12038928822679396864ull, 18850178765813877ull}},
+{{4854411892268330240ull, 94250893829069388ull}},
+{{2427205946134164992ull, 47125446914534694ull}},
+{{1213602973067082496ull, 23562723457267347ull}},
+{{6068014865335412992ull, 117813617286336735ull}},
+{{12257379469522482176ull, 58906808643168367ull}},
+{{15352061771616016896ull, 29453404321584183ull}},
+{{16899402922662784256ull, 14726702160792091ull}},
+{{10710038318475714816ull, 73633510803960459ull}},
+{{14578391196092633088ull, 36816755401980229ull}},
+{{16512567634901092352ull, 18408377700990114ull}},
+{{8775861879667255808ull, 92041888504950574ull}},
+{{4387930939833627904ull, 46020944252475287ull}},
+{{11417337506771589632ull, 23010472126237643ull}},
+{{1746455312729293824ull, 115052360631188218ull}},
+{{873227656364646912ull, 57526180315594109ull}},
+{{9659985865037099264ull, 28763090157797054ull}},
+{{11406441177766393344ull, 143815450788985272ull}},
+{{5703220588883196672ull, 71907725394492636ull}},
+{{2851610294441598208ull, 35953862697246318ull}},
+{{1425805147220798976ull, 17976931348623159ull}},
+{{7129025736103995648ull, 89884656743115795ull}},
+{{12787884904906773504ull, 44942328371557897ull}},
+{{15617314489308162560ull, 22471164185778948ull}},
+{{4299596151702606848ull, 112355820928894744ull}},
+{{2149798075851303424ull, 56177910464447372ull}},
+{{1074899037925651712ull, 28088955232223686ull}},
+{{5374495189628258560ull, 140444776161118430ull}},
+{{2687247594814129152ull, 70222388080559215ull}},
+{{10566995834261840384ull, 35111194040279607ull}},
+{{14506869953985696000ull, 17555597020139803ull}},
+{{17194117548799825152ull, 87777985100699018ull}},
+{{8597058774399912448ull, 43888992550349509ull}},
+{{13521901424054732032ull, 21944496275174754ull}},
+{{12269274899145005824ull, 109722481375873773ull}},
+{{15358009486427278592ull, 54861240687936886ull}},
+{{7679004743213639168ull, 27430620343968443ull}},
+{{1501535568649093632ull, 137153101719842217ull}},
+{{9974139821179322624ull, 68576550859921108ull}},
+{{4987069910589661184ull, 34288275429960554ull}},
+{{2493534955294830592ull, 17144137714980277ull}},
+{{12467674776474153216ull, 85720688574901385ull}},
+{{15457209425091852288ull, 42860344287450692ull}},
+{{7728604712545926144ull, 21430172143725346ull}},
+{{1749535415310527744ull, 107150860718626732ull}},
+{{874767707655263744ull, 53575430359313366ull}},
+{{437383853827631872ull, 26787715179656683ull}},
+{{2186919269138159872ull, 133938575898283415ull}},
+{{10316831671423855616ull, 66969287949141707ull}},
+{{14381787872566703616ull, 33484643974570853ull}},
+{{16414265973138127616ull, 16742321987285426ull}},
+{{8284353570852431616ull, 83711609936427134ull}},
+{{4142176785426215680ull, 41855804968213567ull}},
+{{11294460429567883520ull, 20927902484106783ull}},
+{{1132069926710763776ull, 104639512420533918ull}},
+{{566034963355381760ull, 52319756210266959ull}},
+{{9506389518532466688ull, 26159878105133479ull}},
+{{10638459445243230464ull, 130799390525667397ull}},
+{{14542601759476390912ull, 65399695262833698ull}},
+{{7271300879738195456ull, 32699847631416849ull}},
+{{12859022476723873536ull, 16349923815708424ull}},
+{{8954880162490713088ull, 81749619078542123ull}},
+{{13700812118100132352ull, 40874809539271061ull}},
+{{16073778095904841984ull, 20437404769635530ull}},
+{{6581914184686003456ull, 102187023848177654ull}},
+{{3290957092343001600ull, 51093511924088827ull}},
+{{10868850583026276608ull, 25546755962044413ull}},
+{{17450764767712280064ull, 127733779810222067ull}},
+{{17948754420710915840ull, 63866889905111033ull}},
+{{18197749247210233600ull, 31933444952555516ull}},
+{{9098874623605116672ull, 15966722476277758ull}},
+{{8600884970606481152ull, 79833612381388792ull}},
+{{4300442485303240448ull, 39916806190694396ull}},
+{{2150221242651620096ull, 19958403095347198ull}},
+{{10751106213258101248ull, 99792015476735990ull}},
+{{5375553106629050624ull, 49896007738367995ull}},
+{{11911148590169300992ull, 24948003869183997ull}},
+{{4215510729717850880ull, 124740019345919988ull}},
+{{2107755364858925312ull, 62370009672959994ull}},
+{{1053877682429462528ull, 31185004836479997ull}},
+{{9750310878069507072ull, 15592502418239998ull}},
+{{11858066242928432640ull, 77962512091199992ull}},
+{{5929033121464216320ull, 38981256045599996ull}},
+{{2964516560732108032ull, 19490628022799998ull}},
+{{14822582803660540672ull, 97453140113999990ull}},
+{{7411291401830270208ull, 48726570056999995ull}},
+{{12929017737769910784ull, 24363285028499997ull}},
+{{9304856467720900096ull, 121816425142499988ull}},
+{{4652428233860450048ull, 60908212571249994ull}},
+{{2326214116930224896ull, 30454106285624997ull}},
+{{10386479095319888128ull, 15227053142812498ull}},
+{{15038907329180338432ull, 76135265714062492ull}},
+{{7519453664590169088ull, 38067632857031246ull}},
+{{3759726832295084544ull, 19033816428515623ull}},
+{{351890087765871360ull, 95169082142578116ull}},
+{{175945043882935552ull, 47584541071289058ull}},
+{{87972521941467648ull, 23792270535644529ull}},
+{{439862609707339264ull, 118961352678222645ull}},
+{{9443303341708445440ull, 59480676339111322ull}},
+{{4721651670854222592ull, 29740338169555661ull}},
+{{11584197872281886976ull, 14870169084777830ull}},
+{{2580757140280781056ull, 74350845423889153ull}},
+{{10513750606995166208ull, 37175422711944576ull}},
+{{5256875303497583104ull, 18587711355972288ull}},
+{{7837632443778364160ull, 92938556779861441ull}},
+{{13142188258743957760ull, 46469278389930720ull}},
+{{6571094129371978752ull, 23234639194965360ull}},
+{{14408726573150343168ull, 116173195974826801ull}},
+{{16427735323429947392ull, 58086597987413400ull}},
+{{8213867661714973696ull, 29043298993706700ull}},
+{{4106933830857486848ull, 14521649496853350ull}},
+{{2087925080577882624ull, 72608247484266751ull}},
+{{10267334577143717120ull, 36304123742133375ull}},
+{{14357039325426634240ull, 18152061871066687ull}},
+{{16444964406004516864ull, 90760309355333438ull}},
+{{8222482203002258432ull, 45380154677666719ull}},
+{{13334613138355905024ull, 22690077338833359ull}},
+{{11332833470650870272ull, 113450386694166798ull}},
+{{5666416735325435136ull, 56725193347083399ull}},
+{{12056580404517493248ull, 28362596673541699ull}},
+{{4942669801458812160ull, 141812983367708498ull}},
+{{2471334900729405952ull, 70906491683854249ull}},
+{{10459039487219478784ull, 35453245841927124ull}},
+{{5229519743609739264ull, 17726622920963562ull}},
+{{7700854644339145472ull, 88633114604817811ull}},
+{{13073799359024348416ull, 44316557302408905ull}},
+{{15760271716366949888ull, 22158278651204452ull}},
+{{5014382286996544000ull, 110791393256022264ull}},
+{{2507191143498272000ull, 55395696628011132ull}},
+{{1253595571749135872ull, 27697848314005566ull}},
+{{6267977858745679872ull, 138489241570027830ull}},
+{{3133988929372839936ull, 69244620785013915ull}},
+{{10790366501541195776ull, 34622310392506957ull}},
+{{14618555287625373696ull, 17311155196253478ull}},
+{{17752544216998213632ull, 86555775981267393ull}},
+{{18099644145353882624ull, 43277887990633696ull}},
+{{9049822072676941312ull, 21638943995316848ull}},
+{{8355622215965603328ull, 108194719976584242ull}},
+{{4177811107982801664ull, 54097359988292121ull}},
+{{11312277590846176512ull, 27048679994146060ull}},
+{{1221155733102228480ull, 135243399970730303ull}},
+{{9833949903405890048ull, 67621699985365151ull}},
+{{14140346988557720832ull, 33810849992682575ull}},
+{{16293545531133636096ull, 16905424996341287ull}},
+{{7680751360829974528ull, 84527124981706439ull}},
+{{13063747717269763072ull, 42263562490853219ull}},
+{{15755245895489657344ull, 21131781245426609ull}},
+{{4989253182610080256ull, 105658906227133049ull}},
+{{11717998628159815936ull, 52829453113566524ull}},
+{{5858999314079907840ull, 26414726556783262ull}},
+{{10848252496689988352ull, 132073632783916311ull}},
+{{14647498285199769856ull, 66036816391958155ull}},
+{{16547121179454660608ull, 33018408195979077ull}},
+{{17496932626582106112ull, 16509204097989538ull}},
+{{13697686838072324608ull, 82546020489947694ull}},
+{{6848843419036162304ull, 41273010244973847ull}},
+{{12647793746372856832ull, 20636505122486923ull}},
+{{7898736510735629824ull, 103182525612434618ull}},
+{{3949368255367814912ull, 51591262806217309ull}},
+{{11198056164538683136ull, 25795631403108654ull}},
+{{650048601564761600ull, 128978157015543273ull}},
+{{9548396337637156608ull, 64489078507771636ull}},
+{{4774198168818578176ull, 32244539253885818ull}},
+{{2387099084409288960ull, 16122269626942909ull}},
+{{11935495422046445824ull, 80611348134714545ull}},
+{{15191119747877998592ull, 40305674067357272ull}},
+{{7595559873938999296ull, 20152837033678636ull}},
+{{1084311222275893504ull, 100764185168393182ull}},
+{{542155611137946624ull, 50382092584196591ull}},
+{{9494449842423749120ull, 25191046292098295ull}},
+{{10578761064699642624ull, 125955231460491477ull}},
+{{14512752569204596992ull, 62977615730245738ull}},
+{{7256376284602298368ull, 31488807865122869ull}},
+{{12851560179155924992ull, 15744403932561434ull}},
+{{8917568674650970624ull, 78722019662807173ull}},
+{{13682156374180261120ull, 39361009831403586ull}},
+{{6841078187090130432ull, 19680504915701793ull}},
+{{15758646861741101056ull, 98402524578508966ull}},
+{{7879323430870550528ull, 49201262289254483ull}},
+{{13163033752290051072ull, 24600631144627241ull}},
+{{10474936540321600768ull, 123003155723136208ull}},
+{{5237468270160800256ull, 61501577861568104ull}},
+{{2618734135080400128ull, 30750788930784052ull}},
+{{1309367067540199936ull, 15375394465392026ull}},
+{{6546835337701000448ull, 76876972326960130ull}},
+{{3273417668850500096ull, 38438486163480065ull}},
+{{10860080871280025856ull, 19219243081740032ull}},
+{{17406916208981026304ull, 96096215408700162ull}},
+{{8703458104490513152ull, 48048107704350081ull}},
+{{13575101089100032256ull, 24024053852175040ull}},
+{{12535273224371507200ull, 120120269260875203ull}},
+{{15491008649040529408ull, 60060134630437601ull}},
+{{16968876361375040512ull, 30030067315218800ull}},
+{{8484438180687520256ull, 15015033657609400ull}},
+{{5528702756018498048ull, 75075168288047002ull}},
+{{2764351378009249024ull, 37537584144023501ull}},
+{{10605547725859400192ull, 18768792072011750ull}},
+{{16134250481877898240ull, 93843960360058752ull}},
+{{8067125240938949120ull, 46921980180029376ull}},
+{{4033562620469474560ull, 23460990090014688ull}},
+{{1721069028637821184ull, 117304950450073441ull}},
+{{10083906551173686272ull, 58652475225036720ull}},
+{{5041953275586843136ull, 29326237612518360ull}},
+{{2520976637793421568ull, 14663118806259180ull}},
+{{12604883188967108096ull, 73315594031295900ull}},
+{{6302441594483554048ull, 36657797015647950ull}},
+{{3151220797241776896ull, 18328898507823975ull}},
+{{15756103986208884992ull, 91644492539119875ull}},
+{{17101424029959218176ull, 45822246269559937ull}},
+{{17774084051834384896ull, 22911123134779968ull}},
+{{15083443964333718272ull, 114555615673899844ull}},
+{{7541721982166859008ull, 57277807836949922ull}},
+{{3770860991083429376ull, 28638903918474961ull}},
+{{407560881707596288ull, 143194519592374806ull}},
+{{203780440853798144ull, 71597259796187403ull}},
+{{9325262257281674752ull, 35798629898093701ull}},
+{{13886003165495613184ull, 17899314949046850ull}},
+{{14089783606349411328ull, 89496574745234253ull}},
+{{16268263840029481472ull, 44748287372617126ull}},
+{{8134131920014740736ull, 22374143686308563ull}},
+{{3777171452654600704ull, 111870718431542817ull}},
+{{11111957763182076160ull, 55935359215771408ull}},
+{{5555978881591037952ull, 27967679607885704ull}},
+{{9333150334245638656ull, 139838398039428521ull}},
+{{13889947203977595136ull, 69919199019714260ull}},
+{{6944973601988797440ull, 34959599509857130ull}},
+{{3472486800994398720ull, 17479799754928565ull}},
+{{17362434004971993856ull, 87398998774642825ull}},
+{{17904589039340772608ull, 43699499387321412ull}},
+{{8952294519670386176ull, 21849749693660706ull}},
+{{7867984450932828672ull, 109248748468303532ull}},
+{{3933992225466414336ull, 54624374234151766ull}},
+{{1966996112733207040ull, 27312187117075883ull}},
+{{9834980563666035968ull, 136560935585379415ull}},
+{{14140862318687793664ull, 68280467792689707ull}},
+{{16293803196198672640ull, 34140233896344853ull}},
+{{17370273634954112000ull, 17070116948172426ull}},
+{{13064391879932354304ull, 85350584740862134ull}},
+{{6532195939966177024ull, 42675292370431067ull}},
+{{12489470006837864192ull, 21337646185215533ull}},
+{{7107117813060667136ull, 106688230926077668ull}},
+{{3553558906530333440ull, 53344115463038834ull}},
+{{1776779453265166592ull, 26672057731519417ull}},
+{{8883897266325833728ull, 133360288657597085ull}},
+{{13665320670017692672ull, 66680144328798542ull}},
+{{6832660335008846336ull, 33340072164399271ull}},
+{{12639702204359198976ull, 16670036082199635ull}},
+{{7858278800667340032ull, 83350180410998178ull}},
+{{3929139400333669888ull, 41675090205499089ull}},
+{{11187941737021610752ull, 20837545102749544ull}},
+{{599476463979399168ull, 104187725513747723ull}},
+{{9523110268844475392ull, 52093862756873861ull}},
+{{13984927171277013504ull, 26046931378436930ull}},
+{{14584403635256412928ull, 130234656892184653ull}},
+{{16515573854482982144ull, 65117328446092326ull}},
+{{8257786927241490944ull, 32558664223046163ull}},
+{{13352265500475521280ull, 16279332111523081ull}},
+{{11421095281248951808ull, 81396660557615408ull}},
+{{5710547640624475904ull, 40698330278807704ull}},
+{{2855273820312237824ull, 20349165139403852ull}},
+{{14276369101561189888ull, 101745825697019260ull}},
+{{7138184550780594944ull, 50872912848509630ull}},
+{{3569092275390297344ull, 25436456424254815ull}},
+{{17845461376951487488ull, 127182282121274075ull}},
+{{18146102725330519552ull, 63591141060637037ull}},
+{{18296423399520035584ull, 31795570530318518ull}},
+{{9148211699760017664ull, 15897785265159259ull}},
+{{8847570351380985600ull, 79488926325796297ull}},
+{{13647157212545268480ull, 39744463162898148ull}},
+{{6823578606272634112ull, 19872231581449074ull}},
+{{15671148957653619968ull, 99361157907245371ull}},
+{{17058946515681585664ull, 49680578953622685ull}},
+{{17752845294695568640ull, 24840289476811342ull}},
+{{14977250178639637248ull, 124201447384056714ull}},
+{{7488625089319818496ull, 62100723692028357ull}},
+{{12967684581514684928ull, 31050361846014178ull}},
+{{6483842290757342464ull, 15525180923007089ull}},
+{{13972467380077160960ull, 77625904615035446ull}},
+{{6986233690038580480ull, 38812952307517723ull}},
+{{12716488881874065920ull, 19406476153758861ull}},
+{{8242212188241675520ull, 97032380768794308ull}},
+{{4121106094120837632ull, 48516190384397154ull}},
+{{2060553047060418816ull, 24258095192198577ull}},
+{{10302765235302094592ull, 121290475960992885ull}},
+{{14374754654505822976ull, 60645237980496442ull}},
+{{7187377327252911360ull, 30322618990248221ull}},
+{{12817060700481231360ull, 15161309495124110ull}},
+{{8745071281277502976ull, 75806547475620553ull}},
+{{13595907677493527296ull, 37903273737810276ull}},
+{{6797953838746763520ull, 18951636868905138ull}},
+{{15543025120024266496ull, 94758184344525691ull}},
+{{16994884596866908928ull, 47379092172262845ull}},
+{{17720814335288230144ull, 23689546086131422ull}},
+{{14817095381602945280ull, 118447730430657114ull}},
+{{7408547690801472512ull, 59223865215328557ull}},
+{{12927645882255512064ull, 29611932607664278ull}},
+{{6463822941127756032ull, 14805966303832139ull}},
+{{13872370631929228800ull, 74029831519160696ull}},
+{{6936185315964614400ull, 37014915759580348ull}},
+{{3468092657982307072ull, 18507457879790174ull}},
+{{17340463289911535872ull, 92537289398950870ull}},
+{{8670231644955767808ull, 46268644699475435ull}},
+{{13558487859332659712ull, 23134322349737717ull}},
+{{12452207075534644224ull, 115671611748688588ull}},
+{{6226103537767322112ull, 57835805874344294ull}},
+{{3113051768883661056ull, 28917902937172147ull}},
+{{10779897921296606208ull, 14458951468586073ull}},
+{{17006001459063928320ull, 72294757342930367ull}},
+{{17726372766386739968ull, 36147378671465183ull}},
+{{18086558420048145664ull, 18073689335732591ull}},
+{{16645815805402522624ull, 90368446678662959ull}},
+{{17546279939556037120ull, 45184223339331479ull}},
+{{17996512006632794368ull, 22592111669665739ull}},
+{{16195583738325765376ull, 112960558348328699ull}},
+{{17321163906017658368ull, 56480279174164349ull}},
+{{17883953989863604992ull, 28240139587082174ull}},
+{{15632793654479818752ull, 141200697935410874ull}},
+{{7816396827239909376ull, 70600348967705437ull}},
+{{13131570450474730496ull, 35300174483852718ull}},
+{{6565785225237365248ull, 17650087241926359ull}},
+{{14382182052477274624ull, 88250436209631796ull}},
+{{7191091026238637312ull, 44125218104815898ull}},
+{{3595545513119318528ull, 22062609052407949ull}},
+{{17977727565596593408ull, 110313045262039745ull}},
+{{18212235819653072384ull, 55156522631019872ull}},
+{{9106117909826536192ull, 27578261315509936ull}},
+{{8637101401713577984ull, 137891306577549682ull}},
+{{4318550700856788992ull, 68945653288774841ull}},
+{{11382647387283170304ull, 34472826644387420ull}},
+{{5691323693641585152ull, 17236413322193710ull}},
+{{10009874394498374144ull, 86182066610968551ull}},
+{{14228309234103962880ull, 43091033305484275ull}},
+{{16337526653906757120ull, 21545516652742137ull}},
+{{7900656974695579648ull, 107727583263710689ull}},
+{{13173700524202565632ull, 53863791631855344ull}},
+{{6586850262101282816ull, 26931895815927672ull}},
+{{14487507236796862464ull, 134659479079638361ull}},
+{{16467125655253207040ull, 67329739539819180ull}},
+{{8233562827626603520ull, 33664869769909590ull}},
+{{4116781413813301760ull, 16832434884954795ull}},
+{{2137162995356957184ull, 84162174424773976ull}},
+{{1068581497678478592ull, 42081087212386988ull}},
+{{534290748839239168ull, 21040543606193494ull}},
+{{2671453744196196608ull, 105202718030967470ull}},
+{{1335726872098098176ull, 52601359015483735ull}},
+{{9891235472903824896ull, 26300679507741867ull}},
+{{12562689217100021504ull, 131503397538709337ull}},
+{{15504716645404786432ull, 65751698769354668ull}},
+{{7752358322702393088ull, 32875849384677334ull}},
+{{3876179161351196416ull, 16437924692338667ull}},
+{{934151733046431488ull, 82189623461693336ull}},
+{{467075866523215616ull, 41094811730846668ull}},
+{{233537933261607680ull, 20547405865423334ull}},
+{{1167689666308039424ull, 102737029327116670ull}},
+{{583844833154019584ull, 51368514663558335ull}},
+{{9515294453431785472ull, 25684257331779167ull}},
+{{10682984119739825152ull, 128421286658895837ull}},
+{{14564864096724688384ull, 64210643329447918ull}},
+{{7282432048362344192ull, 32105321664723959ull}},
+{{12864588061035947776ull, 16052660832361979ull}},
+{{8982708084051084544ull, 80263304161809898ull}},
+{{4491354042025542144ull, 40131652080904949ull}},
+{{11469049057867546880ull, 20065826040452474ull}},
+{{2005013068209080064ull, 100329130202262373ull}},
+{{10225878570959315712ull, 50164565101131186ull}},
+{{5112939285479657728ull, 25082282550565593ull}},
+{{7117952353688738048ull, 125411412752827966ull}},
+{{3558976176844368896ull, 62705706376413983ull}},
+{{11002860125276960256ull, 31352853188206991ull}},
+{{14724802099493255936ull, 15676426594103495ull}},
+{{18283778276337624832ull, 78382132970517478ull}},
+{{9141889138168812288ull, 39191066485258739ull}},
+{{13794316605939181824ull, 19595533242629369ull}},
+{{13631350808567255296ull, 97977666213146848ull}},
+{{6815675404283627520ull, 48988833106573424ull}},
+{{3407837702141813760ull, 24494416553286712ull}},
+{{17039188510709069312ull, 122472082766433560ull}},
+{{8519594255354534656ull, 61236041383216780ull}},
+{{4259797127677267200ull, 30618020691608390ull}},
+{{2129898563838633472ull, 15309010345804195ull}},
+{{10649492819193168128ull, 76545051729020975ull}},
+{{14548118446451359744ull, 38272525864510487ull}},
+{{16497431260080455680ull, 19136262932255243ull}},
+{{8700180005564072448ull, 95681314661276219ull}},
+{{13573462039636812032ull, 47840657330638109ull}},
+{{16010103056673181696ull, 23920328665319054ull}},
+{{6263538988527702528ull, 119601643326595274ull}},
+{{3131769494263851264ull, 59800821663297637ull}},
+{{10789256783986701312ull, 29900410831648818ull}},
+{{5394628391993350656ull, 14950205415824409ull}},
+{{8526397886257201920ull, 74751027079122046ull}},
+{{4263198943128600832ull, 37375513539561023ull}},
+{{11354971508419076096ull, 18687756769780511ull}},
+{{1434625320966726656ull, 93438783848902558ull}},
+{{717312660483363328ull, 46719391924451279ull}},
+{{9582028367096457472ull, 23359695962225639ull}},
+{{11016653688063184128ull, 116798479811128197ull}},
+{{14731698880886367744ull, 58399239905564098ull}},
+{{7365849440443183872ull, 29199619952782049ull}},
+{{12906296757076367616ull, 14599809976391024ull}},
+{{9191251564253184000ull, 72999049881955123ull}},
+{{13818997818981367808ull, 36499524940977561ull}},
+{{16132870946345459712ull, 18249762470488780ull}},
+{{6877378436889092096ull, 91248812352443904ull}},
+{{3438689218444546048ull, 45624406176221952ull}},
+{{1719344609222273024ull, 22812203088110976ull}},
+{{8596723046111365376ull, 114061015440554880ull}},
+{{4298361523055682560ull, 57030507720277440ull}},
+{{2149180761527841280ull, 28515253860138720ull}},
+{{10745903807639206656ull, 142576269300693600ull}},
+{{5372951903819603200ull, 71288134650346800ull}},
+{{2686475951909801472ull, 35644067325173400ull}},
+{{1343237975954900736ull, 17822033662586700ull}},
+{{6716189879774504192ull, 89110168312933500ull}},
+{{3358094939887251968ull, 44555084156466750ull}},
+{{1679047469943625984ull, 22277542078233375ull}},
+{{8395237349718130176ull, 111387710391166875ull}},
+{{13420990711713840896ull, 55693855195583437ull}},
+{{15933867392711696128ull, 27846927597791718ull}},
+{{5882360668720274688ull, 139234637988958594ull}},
+{{2941180334360137216ull, 69617318994479297ull}},
+{{10693962204034844416ull, 34808659497239648ull}},
+{{5346981102017422080ull, 17404329748619824ull}},
+{{8288161436377559552ull, 87021648743099121ull}},
+{{13367452755043555584ull, 43510824371549560ull}},
+{{6683726377521777664ull, 21755412185774780ull}},
+{{14971887813899337472ull, 108777060928873901ull}},
+{{16709315943804444416ull, 54388530464436950ull}},
+{{8354657971902222080ull, 27194265232218475ull}},
+{{4879801712092008192ull, 135971326161092377ull}},
+{{11663272892900779776ull, 67985663080546188ull}},
+{{5831636446450389760ull, 33992831540273094ull}},
+{{2915818223225194752ull, 16996415770136547ull}},
+{{14579091116125974784ull, 84982078850682735ull}},
+{{16512917594917763072ull, 42491039425341367ull}},
+{{17479830834313657344ull, 21245519712670683ull}},
+{{13612177876730080512ull, 106227598563353419ull}},
+{{16029460975219815936ull, 53113799281676709ull}},
+{{17238102524464683776ull, 26556899640838354ull}},
+{{12403536327485212928ull, 132784498204191774ull}},
+{{6201768163742606336ull, 66392249102095887ull}},
+{{12324256118726078976ull, 33196124551047943ull}},
+{{15385500096217815296ull, 16598062275523971ull}},
+{{3140524186250870016ull, 82990311377619859ull}},
+{{10793634129980210688ull, 41495155688809929ull}},
+{{14620189101844881152ull, 20747577844404964ull}},
+{{17760713288095751424ull, 103737889222024823ull}},
+{{18103728680902651392ull, 51868944611012411ull}},
+{{18275236377306101504ull, 25934472305506205ull}},
+{{17589205591692301312ull, 129672361527531029ull}},
+{{18017974832700926464ull, 64836180763765514ull}},
+{{9008987416350463232ull, 32418090381882757ull}},
+{{13727865745030007296ull, 16209045190941378ull}},
+{{13299096504021382144ull, 81045225954706893ull}},
+{{15872920288865466880ull, 40522612977353446ull}},
+{{7936460144432733440ull, 20261306488676723ull}},
+{{2788812574744564224ull, 101306532443383617ull}},
+{{10617778324227057920ull, 50653266221691808ull}},
+{{5308889162113528832ull, 25326633110845904ull}},
+{{8097701736858093056ull, 126633165554229521ull}},
+{{13272222905283822336ull, 63316582777114760ull}},
+{{6636111452641911040ull, 31658291388557380ull}},
+{{3318055726320955392ull, 15829145694278690ull}},
+{{16590278631604777984ull, 79145728471393450ull}},
+{{8295139315802388992ull, 39572864235696725ull}},
+{{13370941694755970304ull, 19786432117848362ull}},
+{{11514476252651196672ull, 98932160589241813ull}},
+{{14980610163180374016ull, 49466080294620906ull}},
+{{7490305081590187008ull, 24733040147310453ull}},
+{{558037260531832064ull, 123665200736552267ull}},
+{{9502390667120691712ull, 61832600368276133ull}},
+{{13974567370415121664ull, 30916300184138066ull}},
+{{6987283685207560704ull, 15458150092069033ull}},
+{{16489674352328252672ull, 77290750460345166ull}},
+{{8244837176164126208ull, 38645375230172583ull}},
+{{13345790624936838912ull, 19322687615086291ull}},
+{{11388720903555539968ull, 96613438075431458ull}},
+{{5694360451777769984ull, 48306719037715729ull}},
+{{12070552262743660800ull, 24153359518857864ull}},
+{{5012529092589649152ull, 120766797594289323ull}},
+{{11729636583149600256ull, 60383398797144661ull}},
+{{15088190328429575936ull, 30191699398572330ull}},
+{{7544095164214787840ull, 15095849699286165ull}},
+{{826987673654836736ull, 75479248496430827ull}},
+{{9636865873682194176ull, 37739624248215413ull}},
+{{14041804973695872768ull, 18869812124107706ull}},
+{{14868792647350709760ull, 94349060620538533ull}},
+{{16657768360530130688ull, 47174530310269266ull}},
+{{8328884180265065216ull, 23587265155134633ull}},
+{{4750932753906223616ull, 117936325775673167ull}},
+{{11598838413807887616ull, 58968162887836583ull}},
+{{15022791243758719488ull, 29484081443918291ull}},
+{{16734767658734135552ull, 14742040721959145ull}},
+{{9886861998832471552ull, 73710203609795729ull}},
+{{14166803036271011584ull, 36855101804897864ull}},
+{{7083401518135505664ull, 18427550902448932ull}},
+{{16970263516967977216ull, 92137754512244661ull}},
+{{17708503795338764288ull, 46068877256122330ull}},
+{{8854251897669382144ull, 23034438628061165ull}},
+{{7377771340927808000ull, 115172193140305827ull}},
+{{12912257707318679808ull, 57586096570152913ull}},
+{{15679500890514115584ull, 28793048285076456ull}},
+{{4610528157732371968ull, 143965241425382284ull}},
+{{2305264078866185984ull, 71982620712691142ull}},
+{{1152632039433092864ull, 35991310356345571ull}},
+{{9799688056571322112ull, 17995655178172785ull}},
+{{12104952135437508352ull, 89978275890863927ull}},
+{{15275848104573529856ull, 44989137945431963ull}},
+{{16861296089141540608ull, 22494568972715981ull}},
+{{10519504150869497600ull, 112472844863579909ull}},
+{{14483124112289524480ull, 56236422431789954ull}},
+{{7241562056144762112ull, 28118211215894977ull}},
+{{17761066207014259712ull, 140591056079474886ull}},
+{{8880533103507129856ull, 70295528039737443ull}},
+{{13663638588608340736ull, 35147764019868721ull}},
+{{16055191331158946048ull, 17573882009934360ull}},
+{{6488980360956524544ull, 87869410049671804ull}},
+{{3244490180478262272ull, 43934705024835902ull}},
+{{1622245090239131136ull, 21967352512417951ull}},
+{{8111225451195655680ull, 109836762562089755ull}},
+{{13278984762452603648ull, 54918381281044877ull}},
+{{15862864418081077504ull, 27459190640522438ull}},
+{{5527345795567181568ull, 137295953202612194ull}},
+{{2763672897783590656ull, 68647976601306097ull}},
+{{10605208485746571008ull, 34323988300653048ull}},
+{{5302604242873285376ull, 17161994150326524ull}},
+{{8066277140656876288ull, 85809970751632621ull}},
+{{13256510607183213824ull, 42904985375816310ull}},
+{{6628255303591606784ull, 21452492687908155ull}},
+{{14694532444248483328ull, 107262463439540776ull}},
+{{7347266222124241664ull, 53631231719770388ull}},
+{{3673633111062120704ull, 26815615859885194ull}},
+{{18368165555310604288ull, 134078079299425970ull}},
+{{9184082777655302144ull, 67039039649712985ull}},
+{{13815413425682426880ull, 33519519824856492ull}},
+{{6907706712841213440ull, 16759759912428246ull}},
+{{16091789490496515584ull, 83798799562141231ull}},
+{{17269266782103033600ull, 41899399781070615ull}},
+{{17858005427906292480ull, 20949699890535307ull}},
+{{15503050844693256448ull, 104748499452676539ull}},
+{{16974897459201403904ull, 52374249726338269ull}},
+{{17710820766455477760ull, 26187124863169134ull}},
+{{14767127537439182848ull, 130935624315845674ull}},
+{{7383563768719591424ull, 65467812157922837ull}},
+{{12915153921214571520ull, 32733906078961418ull}},
+{{6457576960607285760ull, 16366953039480709ull}},
+{{13841140729326877184ull, 81834765197403546ull}},
+{{6920570364663438592ull, 40917382598701773ull}},
+{{12683657219186494976ull, 20458691299350886ull}},
+{{8078053874803820544ull, 102293456496754433ull}},
+{{13262398974256686080ull, 51146728248377216ull}},
+{{6631199487128343040ull, 25573364124188608ull}},
+{{14709253361932163584ull, 127866820620943041ull}},
+{{16577998717820857600ull, 63933410310471520ull}},
+{{8288999358910428672ull, 31966705155235760ull}},
+{{4144499679455214336ull, 15983352577617880ull}},
+{{2275754323566520320ull, 79916762888089401ull}},
+{{10361249198638035968ull, 39958381444044700ull}},
+{{5180624599319017984ull, 19979190722022350ull}},
+{{7456378922885538304ull, 99895953610111751ull}},
+{{12951561498297544960ull, 49947976805055875ull}},
+{{15699152786003548160ull, 24973988402527937ull}},
+{{4708787635179535104ull, 124869942012639689ull}},
+{{11577765854444543232ull, 62434971006319844ull}},
+{{5788882927222271488ull, 31217485503159922ull}},
+{{2894441463611135744ull, 15608742751579961ull}},
+{{14472207318055679232ull, 78043713757899805ull}},
+{{16459475695882615296ull, 39021856878949902ull}},
+{{8229737847941307648ull, 19510928439474951ull}},
+{{4255201092287435264ull, 97554642197374757ull}},
+{{11350972582998493440ull, 48777321098687378ull}},
+{{5675486291499246592ull, 24388660549343689ull}},
+{{9930687383786682112ull, 121943302746718446ull}},
+{{4965343691893340928ull, 60971651373359223ull}},
+{{11706043882801446144ull, 30485825686679611ull}},
+{{15076393978255498752ull, 15242912843339805ull}},
+{{1594993596439288320ull, 76214564216699029ull}},
+{{10020868835074419968ull, 38107282108349514ull}},
+{{5010434417537209856ull, 19053641054174757ull}},
+{{6605428013976498432ull, 95268205270873786ull}},
+{{3302714006988249088ull, 47634102635436893ull}},
+{{10874729040348900352ull, 23817051317718446ull}},
+{{17480157054325398784ull, 119085256588592232ull}},
+{{8740078527162699264ull, 59542628294296116ull}},
+{{4370039263581349632ull, 29771314147148058ull}},
+{{2185019631790674688ull, 14885657073574029ull}},
+{{10925098158953374208ull, 74428285367870145ull}},
+{{14685921116331462912ull, 37214142683935072ull}},
+{{7342960558165731328ull, 18607071341967536ull}},
+{{18268058717119105792ull, 93035356709837681ull}},
+{{18357401395414328576ull, 46517678354918840ull}},
+{{9178700697707164160ull, 23258839177459420ull}},
+{{9000015341116718336ull, 116294195887297102ull}},
+{{4500007670558359040ull, 58147097943648551ull}},
+{{11473375872133955328ull, 29073548971824275ull}},
+{{14960059972921753344ull, 14536774485912137ull}},
+{{1013323569770561024ull, 72683872429560689ull}},
+{{9730033821740056320ull, 36341936214780344ull}},
+{{4865016910870028032ull, 18170968107390172ull}},
+{{5878340480640589312ull, 90854840536950861ull}},
+{{12162542277175070464ull, 45427420268475430ull}},
+{{6081271138587535104ull, 22713710134237715ull}},
+{{11959611619228124416ull, 113568550671188576ull}},
+{{5979805809614062080ull, 56784275335594288ull}},
+{{2989902904807031040ull, 28392137667797144ull}},
+{{14949514524035155712ull, 141960688338985720ull}},
+{{7474757262017577728ull, 70980344169492860ull}},
+{{3737378631008788736ull, 35490172084746430ull}},
+{{1868689315504394240ull, 17745086042373215ull}},
+{{9343446577521972224ull, 88725430211866075ull}},
+{{13895095325615761920ull, 44362715105933037ull}},
+{{16170919699662656768ull, 22181357552966518ull}},
+{{7067622203475077376ull, 110906787764832594ull}},
+{{3533811101737538560ull, 55453393882416297ull}},
+{{10990277587723545088ull, 27726696941208148ull}},
+{{18057899791198622720ull, 138633484706040742ull}},
+{{9028949895599311360ull, 69316742353020371ull}},
+{{13737846984654431488ull, 34658371176510185ull}},
+{{16092295529181991424ull, 17329185588255092ull}},
+{{6674501351071751168ull, 86645927941275464ull}},
+{{3337250675535875584ull, 43322963970637732ull}},
+{{1668625337767937792ull, 21661481985318866ull}},
+{{8343126688839688960ull, 108307409926594330ull}},
+{{4171563344419844352ull, 54153704963297165ull}},
+{{11309153709064697856ull, 27076852481648582ull}},
+{{1205536324194835456ull, 135384262408242913ull}},
+{{9826140198952193536ull, 67692131204121456ull}},
+{{4913070099476096768ull, 33846065602060728ull}},
+{{2456535049738048256ull, 16923032801030364ull}},
+{{12282675248690241792ull, 84615164005151820ull}},
+{{6141337624345120768ull, 42307582002575910ull}},
+{{3070668812172560384ull, 21153791001287955ull}},
+{{15353344060862802432ull, 105768955006439775ull}},
+{{16900044067286177024ull, 52884477503219887ull}},
+{{17673394070497864192ull, 26442238751609943ull}},
+{{14579994057651115264ull, 132211193758049719ull}},
+{{16513369065680333312ull, 66105596879024859ull}},
+{{17480056569694942464ull, 33052798439512429ull}},
+{{17963400321702246912ull, 16526399219756214ull}},
+{{16030025313673028864ull, 82631996098781074ull}},
+{{8015012656836514304ull, 41315998049390537ull}},
+{{13230878365273032960ull, 20657999024695268ull}},
+{{10814159605236510208ull, 103289995123476343ull}},
+{{14630451839473030912ull, 51644997561738171ull}},
+{{16538597956591291136ull, 25822498780869085ull}},
+{{8906013488118249984ull, 129112493904345429ull}},
+{{13676378780913900800ull, 64556246952172714ull}},
+{{6838189390456950272ull, 32278123476086357ull}},
+{{12642466732083250944ull, 16139061738043178ull}},
+{{7872101439287600128ull, 80695308690215893ull}},
+{{13159422756498575872ull, 40347654345107946ull}},
+{{6579711378249287936ull, 20173827172553973ull}},
+{{14451812817536888064ull, 100869135862769866ull}},
+{{7225906408768443904ull, 50434567931384933ull}},
+{{12836325241238997760ull, 25217283965692466ull}},
+{{8841393985066334208ull, 126086419828462333ull}},
+{{13644069029387942912ull, 63043209914231166ull}},
+{{6822034514693971456ull, 31521604957115583ull}},
+{{12634389294201761536ull, 15760802478557791ull}},
+{{7831714249880152832ull, 78804012392788958ull}},
+{{3915857124940076288ull, 39402006196394479ull}},
+{{11181300599324813824ull, 19701003098197239ull}},
+{{566270775495415296ull, 98505015490986198ull}},
+{{283135387747707648ull, 49252507745493099ull}},
+{{9364939730728629504ull, 24626253872746549ull}},
+{{9931210506224044800ull, 123131269363732747ull}},
+{{14188977289966798080ull, 61565634681866373ull}},
+{{16317860681838174720ull, 30782817340933186ull}},
+{{8158930340919087360ull, 15391408670466593ull}},
+{{3901163557176334080ull, 76957043352332967ull}},
+{{11173953815442942720ull, 38478521676166483ull}},
+{{14810348944576247040ull, 19239260838083241ull}},
+{{264768428043029760ull, 96196304190416209ull}},
+{{9355756250876290560ull, 48098152095208104ull}},
+{{4677878125438145280ull, 24049076047604052ull}},
+{{4942646553481175040ull, 120245380238020261ull}},
+{{11694695313595363328ull, 60122690119010130ull}},
+{{5847347656797681664ull, 30061345059505065ull}},
+{{12147045865253616640ull, 15030672529752532ull}},
+{{5394997105139428352ull, 75153362648762663ull}},
+{{11920870589424489984ull, 37576681324381331ull}},
+{{15183807331567020800ull, 18788340662190665ull}},
+{{2132060362996897536ull, 93941703310953329ull}},
+{{10289402218353224448ull, 46970851655476664ull}},
+{{5144701109176612096ull, 23485425827738332ull}},
+{{7276761472173509888ull, 117427129138691661ull}},
+{{12861752772941530624ull, 58713564569345830ull}},
+{{6430876386470765312ull, 29356782284672915ull}},
+{{12438810230090158336ull, 14678391142336457ull}},
+{{6853818929322137600ull, 73391955711682288ull}},
+{{3426909464661068800ull, 36695977855841144ull}},
+{{1713454732330534400ull, 18347988927920572ull}},
+{{8567273661652672000ull, 91739944639602860ull}},
+{{4283636830826336000ull, 45869972319801430ull}},
+{{2141818415413167872ull, 22934986159900715ull}},
+{{10709092077065839872ull, 114674930799503575ull}},
+{{14577918075387695616ull, 57337465399751787ull}},
+{{16512331074548623616ull, 28668732699875893ull}},
+{{8774679077904912128ull, 143343663499379469ull}},
+{{13610711575807231744ull, 71671831749689734ull}},
+{{6805355787903615744ull, 35835915874844867ull}},
+{{12626049930806583552ull, 17917957937422433ull}},
+{{7790017432904263936ull, 89589789687112168ull}},
+{{3895008716452131840ull, 44794894843556084ull}},
+{{1947504358226065920ull, 22397447421778042ull}},
+{{9737521791130330112ull, 111987237108890210ull}},
+{{4868760895565165056ull, 55993618554445105ull}},
+{{11657752484637358336ull, 27996809277222552ull}},
+{{2948530202058136832ull, 139984046386112763ull}},
+{{10697637137883844096ull, 69992023193056381ull}},
+{{14572190605796697856ull, 34996011596528190ull}},
+{{7286095302898348800ull, 17498005798264095ull}},
+{{17983732440782193152ull, 87490028991320476ull}},
+{{8991866220391096576ull, 43745014495660238ull}},
+{{4495933110195548160ull, 21872507247830119ull}},
+{{4032921477268189696ull, 109362536239150596ull}},
+{{2016460738634094848ull, 54681268119575298ull}},
+{{1008230369317047296ull, 27340634059787649ull}},
+{{5041151846585237248ull, 136703170298938245ull}},
+{{11743947960147394304ull, 68351585149469122ull}},
+{{5871973980073697024ull, 34175792574734561ull}},
+{{12159359026891624192ull, 17087896287367280ull}},
+{{5456562913329467136ull, 85439481436836403ull}},
+{{11951653493519509248ull, 42719740718418201ull}},
+{{15199198783614530304ull, 21359870359209100ull}},
+{{2209017623234446080ull, 106799351796045504ull}},
+{{1104508811617222912ull, 53399675898022752ull}},
+{{552254405808611328ull, 26699837949011376ull}},
+{{2761272029043057664ull, 133499189745056880ull}},
+{{1380636014521528832ull, 66749594872528440ull}},
+{{690318007260764416ull, 33374797436264220ull}},
+{{345159003630382080ull, 16687398718132110ull}},
+{{1725795018151910912ull, 83436993590660550ull}},
+{{862897509075955456ull, 41718496795330275ull}},
+{{9654820791392753408ull, 20859248397665137ull}},
+{{11380615809544664576ull, 104296241988325687ull}},
+{{14913679941627108096ull, 52148120994162843ull}},
+{{16680212007668329728ull, 26074060497081421ull}},
+{{9614083743503442944ull, 130370302485407109ull}},
+{{14030413908606497280ull, 65185151242703554ull}},
+{{7015206954303248640ull, 32592575621351777ull}},
+{{12730975514006400000ull, 16296287810675888ull}},
+{{8314645348903345664ull, 81481439053379443ull}},
+{{13380694711306448640ull, 40740719526689721ull}},
+{{15913719392508000000ull, 20370359763344860ull}},
+{{5781620667701794304ull, 101851798816724304ull}},
+{{2890810333850897152ull, 50925899408362152ull}},
+{{1445405166925448448ull, 25462949704181076ull}},
+{{7227025834627242752ull, 127314748520905380ull}},
+{{3613512917313621248ull, 63657374260452690ull}},
+{{1806756458656810496ull, 31828687130226345ull}},
+{{10126750266183181056ull, 15914343565113172ull}},
+{{13740263183496802560ull, 79571717825565862ull}},
+{{6870131591748401152ull, 39785858912782931ull}},
+{{12658437832728976384ull, 19892929456391465ull}},
+{{7951956942516227328ull, 99464647281957328ull}},
+{{3975978471258113536ull, 49732323640978664ull}},
+{{1987989235629056768ull, 24866161820489332ull}},
+{{9939946178145284352ull, 124330809102446660ull}},
+{{4969973089072642048ull, 62165404551223330ull}},
+{{2484986544536321024ull, 31082702275611665ull}},
+{{10465865309122936320ull, 15541351137805832ull}},
+{{15435838398195578368ull, 77706755689029162ull}},
+{{7717919199097789184ull, 38853377844514581ull}},
+{{13082331636403670272ull, 19426688922257290ull}},
+{{10071425960889697280ull, 97133444611286453ull}},
+{{14259085017299624448ull, 48566722305643226ull}},
+{{7129542508649812224ull, 24283361152821613ull}},
+{{17200968469539509504ull, 121416805764108066ull}},
+{{8600484234769754624ull, 60708402882054033ull}},
+{{13523614154239653120ull, 30354201441027016ull}},
+{{6761807077119826432ull, 15177100720513508ull}},
+{{15362291311889581312ull, 75885503602567541ull}},
+{{16904517692799566336ull, 37942751801283770ull}},
+{{8452258846399783168ull, 18971375900641885ull}},
+{{5367806084579812864ull, 94856879503209427ull}},
+{{11907275079144682240ull, 47428439751604713ull}},
+{{15177009576427116800ull, 23714219875802356ull}},
+{{2098071587297378304ull, 118571099379011784ull}},
+{{1049035793648689152ull, 59285549689505892ull}},
+{{524517896824344576ull, 29642774844752946ull}},
+{{262258948412172288ull, 14821387422376473ull}},
+{{1311294742060861440ull, 74106937111882365ull}},
+{{9879019407885206528ull, 37053468555941182ull}},
+{{4939509703942603264ull, 18526734277970591ull}},
+{{6250804446003464704ull, 92633671389852956ull}},
+{{3125402223001732352ull, 46316835694926478ull}},
+{{1562701111500866048ull, 23158417847463239ull}},
+{{7813505557504330752ull, 115792089237316195ull}},
+{{13130124815606941184ull, 57896044618658097ull}},
+{{15788434444658246400ull, 28948022309329048ull}},
+{{7894217222329123072ull, 14474011154664524ull}},
+{{2577597964226512896ull, 72370055773322622ull}},
+{{1288798982113256448ull, 36185027886661311ull}},
+{{9867771527911404032ull, 18092513943330655ull}},
+{{12445369492137916928ull, 90462569716653277ull}},
+{{15446056782923734272ull, 45231284858326638ull}},
+{{7723028391461867008ull, 22615642429163319ull}},
+{{1721653809890232320ull, 113078212145816597ull}},
+{{10084198941799891968ull, 56539106072908298ull}},
+{{5042099470899945984ull, 28269553036454149ull}},
+{{6763753280790178304ull, 141347765182270746ull}},
+{{3381876640395089152ull, 70673882591135373ull}},
+{{10914310357052320256ull, 35336941295567686ull}},
+{{5457155178526160128ull, 17668470647783843ull}},
+{{8839031818921249280ull, 88342353238919216ull}},
+{{4419515909460624640ull, 44171176619459608ull}},
+{{2209757954730312192ull, 22085588309729804ull}},
+{{11048789773651561728ull, 110427941548649020ull}},
+{{5524394886825780736ull, 55213970774324510ull}},
+{{2762197443412890368ull, 27606985387162255ull}},
+{{13810987217064452096ull, 138034926935811275ull}},
+{{16128865645387001856ull, 69017463467905637ull}},
+{{17287804859548276736ull, 34508731733952818ull}},
+{{8643902429774138368ull, 17254365866976409ull}},
+{{6326024001451588608ull, 86271829334882047ull}},
+{{12386384037580570112ull, 43135914667441023ull}},
+{{15416564055645060864ull, 21567957333720511ull}},
+{{3295843983387097856ull, 107839786668602559ull}},
+{{10871294028548324608ull, 53919893334301279ull}},
+{{14659019051128937984ull, 26959946667150639ull}},
+{{17954863034516036096ull, 134799733335753198ull}},
+{{8977431517258018048ull, 67399866667876599ull}},
+{{13712087795483784704ull, 33699933333938299ull}},
+{{16079415934596668160ull, 16849966666969149ull}},
+{{6610103378145134592ull, 84249833334845749ull}},
+{{12528423725927343104ull, 42124916667422874ull}},
+{{6264211862963671552ull, 21062458333711437ull}},
+{{12874315241108806144ull, 105312291668557186ull}},
+{{6437157620554403072ull, 52656145834278593ull}},
+{{12441950847131977216ull, 26328072917139296ull}},
+{{6869522014531232000ull, 131640364585696483ull}},
+{{12658133044120391680ull, 65820182292848241ull}},
+{{15552438558914971648ull, 32910091146424120ull}},
+{{7776219279457485824ull, 16455045573212060ull}},
+{{1987608249868325888ull, 82275227866060302ull}},
+{{993804124934162944ull, 41137613933030151ull}},
+{{9720274099321857280ull, 20568806966515075ull}},
+{{11707882349190183424ull, 102844034832575377ull}},
+{{15077313211449867520ull, 51422017416287688ull}},
+{{7538656605724933632ull, 25711008708143844ull}},
+{{799794881205565440ull, 128555043540719222ull}},
+{{399897440602782720ull, 64277521770359611ull}},
+{{9423320757156167168ull, 32138760885179805ull}},
+{{13935032415432859392ull, 16069380442589902ull}},
+{{14334929856035642112ull, 80346902212949513ull}},
+{{16390836964872596736ull, 40173451106474756ull}},
+{{8195418482436298240ull, 20086725553237378ull}},
+{{4083604264762388992ull, 100433627766186892ull}},
+{{2041802132381194496ull, 50216813883093446ull}},
+{{1020901066190597120ull, 25108406941546723ull}},
+{{5104505330952986112ull, 125542034707733615ull}},
+{{11775624702331268864ull, 62771017353866807ull}},
+{{15111184388020410112ull, 31385508676933403ull}},
+{{16778964230864980736ull, 15692754338466701ull}},
+{{10107844859486698240ull, 78463771692333509ull}},
+{{14277294466598124800ull, 39231885846166754ull}},
+{{7138647233299062272ull, 19615942923083377ull}},
+{{17246492092785760768ull, 98079714615416886ull}},
+{{8623246046392880384ull, 49039857307708443ull}},
+{{13534995060051215872ull, 24519928653854221ull}},
+{{12334743079127425024ull, 122599643269271108ull}},
+{{6167371539563712512ull, 61299821634635554ull}},
+{{3083685769781856256ull, 30649910817317777ull}},
+{{10765214921745703936ull, 15324955408658888ull}},
+{{16932586461309416448ull, 76624777043294442ull}},
+{{8466293230654708224ull, 38312388521647221ull}},
+{{13456518652182129920ull, 19156194260823610ull}},
+{{11942361039781994752ull, 95780971304118053ull}},
+{{15194552556745773056ull, 47890485652059026ull}},
+{{7597276278372886528ull, 23945242826029513ull}},
+{{1092893244445329664ull, 119726214130147567ull}},
+{{9769818659077440512ull, 59863107065073783ull}},
+{{14108281366393496064ull, 29931553532536891ull}},
+{{16277512720051523840ull, 14965776766268445ull}},
+{{7600587305419412992ull, 74828883831342229ull}},
+{{13023665689564482304ull, 37414441915671114ull}},
+{{6511832844782241024ull, 18707220957835557ull}},
+{{14112420150201654016ull, 93536104789177786ull}},
+{{7056210075100826880ull, 46768052394588893ull}},
+{{12751477074405189120ull, 23384026197294446ull}},
+{{8417153150897291776ull, 116920130986472233ull}},
+{{13431948612303421696ull, 58460065493236116ull}},
+{{6715974306151710720ull, 29230032746618058ull}},
+{{3357987153075855360ull, 14615016373309029ull}},
+{{16789935765379277056ull, 73075081866545145ull}},
+{{17618339919544414208ull, 36537540933272572ull}},
+{{8809169959772207104ull, 18268770466636286ull}},
+{{7152361651441932800ull, 91343852333181432ull}},
+{{3576180825720966400ull, 45671926166590716ull}},
+{{1788090412860483072ull, 22835963083295358ull}},
+{{8940452064302415872ull, 114179815416476790ull}},
+{{4470226032151207936ull, 57089907708238395ull}},
+{{11458485052930379776ull, 28544953854119197ull}},
+{{1952193043523244032ull, 142724769270595988ull}},
+{{976096521761622016ull, 71362384635297994ull}},
+{{488048260880811008ull, 35681192317648997ull}},
+{{9467396167295181312ull, 17840596158824498ull}},
+{{10443492689056803328ull, 89202980794122492ull}},
+{{5221746344528401664ull, 44601490397061246ull}},
+{{2610873172264200704ull, 22300745198530623ull}},
+{{13054365861321004288ull, 111503725992653115ull}},
+{{15750554967515277824ull, 55751862996326557ull}},
+{{17098649520612414720ull, 27875931498163278ull}},
+{{11706271308223867392ull, 139379657490816394ull}},
+{{5853135654111933696ull, 69689828745408197ull}},
+{{12149939863910742528ull, 34844914372704098ull}},
+{{6074969931955371264ull, 17422457186352049ull}},
+{{11928105586067304960ull, 87112285931760246ull}},
+{{5964052793033652480ull, 43556142965880123ull}},
+{{12205398433371601920ull, 21778071482940061ull}},
+{{5686759945729355520ull, 108890357414700308ull}},
+{{2843379972864677632ull, 54445178707350154ull}},
+{{1421689986432338688ull, 27222589353675077ull}},
+{{7108449932161694208ull, 136112946768375385ull}},
+{{12777597002935622912ull, 68056473384187692ull}},
+{{6388798501467811328ull, 34028236692093846ull}},
+{{3194399250733905664ull, 17014118346046923ull}},
+{{15971996253669528576ull, 85070591730234615ull}},
+{{17209370163689540096ull, 42535295865117307ull}},
+{{17828057118699545856ull, 21267647932558653ull}},
+{{15353309298659522816ull, 106338239662793269ull}},
+{{16900026686184537088ull, 53169119831396634ull}},
+{{8450013343092268544ull, 26584559915698317ull}},
+{{5356578568042240000ull, 132922799578491587ull}},
+{{11901661320875895808ull, 66461399789245793ull}},
+{{15174202697292723712ull, 33230699894622896ull}},
+{{7587101348646361856ull, 16615349947311448ull}},
+{{1042018595812706048ull, 83076749736557242ull}},
+{{521009297906352896ull, 41538374868278621ull}},
+{{9483876685807952128ull, 20769187434139310ull}},
+{{10525895281620658432ull, 103845937170696552ull}},
+{{5262947640810329088ull, 51922968585348276ull}},
+{{2631473820405164544ull, 25961484292674138ull}},
+{{13157369102025822976ull, 129807421463370690ull}},
+{{6578684551012911360ull, 64903710731685345ull}},
+{{12512714312361231360ull, 32451855365842672ull}},
+{{6256357156180615680ull, 16225927682921336ull}},
+{{12835041707193527296ull, 81129638414606681ull}},
+{{15640892890451539456ull, 40564819207303340ull}},
+{{7820446445225769728ull, 20282409603651670ull}},
+{{2208744078709745408ull, 101412048018258352ull}},
+{{1104372039354872576ull, 50706024009129176ull}},
+{{552186019677436160ull, 25353012004564588ull}},
+{{2760930098387181568ull, 126765060022822940ull}},
+{{1380465049193590784ull, 63382530011411470ull}},
+{{690232524596795392ull, 31691265005705735ull}},
+{{9568488299153173504ull, 15845632502852867ull}},
+{{10948953348346764288ull, 79228162514264337ull}},
+{{14697848711028157952ull, 39614081257132168ull}},
+{{7348924355514078976ull, 19807040628566084ull}},
+{{18297877703860843264ull, 99035203142830421ull}},
+{{18372310888785197312ull, 49517601571415210ull}},
+{{9186155444392598528ull, 24758800785707605ull}},
+{{9037289074543890432ull, 123794003928538027ull}},
+{{13742016574126721024ull, 61897001964269013ull}},
+{{16094380323918136320ull, 30948500982134506ull}},
+{{8047190161959068160ull, 15474250491067253ull}},
+{{3342462662376237568ull, 77371252455336267ull}},
+{{10894603368042894592ull, 38685626227668133ull}},
+{{14670673720876222976ull, 19342813113834066ull}},
+{{18013136383252460544ull, 96714065569170333ull}},
+{{18229940228481006080ull, 48357032784585166ull}},
+{{9114970114240503040ull, 24178516392292583ull}},
+{{8681362423783412224ull, 120892581961462917ull}},
+{{13564053248746481920ull, 60446290980731458ull}},
+{{6782026624373240832ull, 30223145490365729ull}},
+{{12614385349041396224ull, 15111572745182864ull}},
+{{7731694524078326528ull, 75557863725914323ull}},
+{{13089219298893938944ull, 37778931862957161ull}},
+{{15767981686301745152ull, 18889465931478580ull}},
+{{5052932136670520320ull, 94447329657392904ull}},
+{{2526466068335260160ull, 47223664828696452ull}},
+{{1263233034167630080ull, 23611832414348226ull}},
+{{6316165170838150400ull, 118059162071741130ull}},
+{{3158082585419075072ull, 59029581035870565ull}},
+{{10802413329564313344ull, 29514790517935282ull}},
+{{5401206664782156544ull, 14757395258967641ull}},
+{{8559289250201231872ull, 73786976294838206ull}},
+{{4279644625100615936ull, 36893488147419103ull}},
+{{11363194349405083648ull, 18446744073709551ull}},
+{{1475739525896763904ull, 92233720368547758ull}},
+{{737869762948381952ull, 46116860184273879ull}},
+{{9592306918328966656ull, 23058430092136939ull}},
+{{11068046444225730816ull, 115292150460684697ull}},
+{{14757395258967641088ull, 57646075230342348ull}},
+{{7378697629483820544ull, 28823037615171174ull}},
+{{3689348814741910272ull, 14411518807585587ull}},
+{{18446744073709551360ull, 72057594037927935ull}},
+{{18446744073709551360ull, 36028797018963967ull}},
+{{18446744073709551360ull, 18014398509481983ull}},
+{{18446744073709551360ull, 90071992547409919ull}},
+{{18446744073709551360ull, 45035996273704959ull}},
+{{18446744073709551360ull, 22517998136852479ull}},
+{{18446744073709551360ull, 112589990684262399ull}},
+{{18446744073709551360ull, 56294995342131199ull}},
+{{18446744073709551360ull, 28147497671065599ull}},
+{{18446744073709551360ull, 140737488355327999ull}},
+{{18446744073709551360ull, 70368744177663999ull}},
+{{18446744073709551360ull, 35184372088831999ull}},
+{{18446744073709551360ull, 17592186044415999ull}},
+{{18446744073709551360ull, 87960930222079999ull}},
+{{18446744073709551360ull, 43980465111039999ull}},
+{{18446744073709551360ull, 21990232555519999ull}},
+{{18446744073709551360ull, 109951162777599999ull}},
+{{18446744073709551360ull, 54975581388799999ull}},
+{{18446744073709551360ull, 27487790694399999ull}},
+{{18446744073709551360ull, 137438953471999999ull}},
+{{18446744073709551360ull, 68719476735999999ull}},
+{{18446744073709551360ull, 34359738367999999ull}},
+{{18446744073709551360ull, 17179869183999999ull}},
+{{18446744073709551360ull, 85899345919999999ull}},
+{{18446744073709551360ull, 42949672959999999ull}},
+{{18446744073709551360ull, 21474836479999999ull}},
+{{18446744073709551360ull, 107374182399999999ull}},
+{{18446744073709551360ull, 53687091199999999ull}},
+{{18446744073709551360ull, 26843545599999999ull}},
+{{18446744073709551360ull, 134217727999999999ull}},
+{{18446744073709551360ull, 67108863999999999ull}},
+{{18446744073709551360ull, 33554431999999999ull}},
+{{18446744073709551360ull, 16777215999999999ull}},
+{{18446744073709551360ull, 83886079999999999ull}},
+{{18446744073709551360ull, 41943039999999999ull}},
+{{18446744073709551360ull, 20971519999999999ull}},
+{{18446744073709551360ull, 104857599999999999ull}},
+{{18446744073709551360ull, 52428799999999999ull}},
+{{18446744073709551360ull, 26214399999999999ull}},
+{{18446744073709551360ull, 131071999999999999ull}},
+{{18446744073709551360ull, 65535999999999999ull}},
+{{18446744073709551360ull, 32767999999999999ull}},
+{{18446744073709551360ull, 16383999999999999ull}},
+{{18446744073709551360ull, 81919999999999999ull}},
+{{18446744073709551360ull, 40959999999999999ull}},
+{{18446744073709551360ull, 20479999999999999ull}},
+{{18446744073709551360ull, 102399999999999999ull}},
+{{18446744073709551360ull, 51199999999999999ull}},
+{{18446744073709551360ull, 25599999999999999ull}},
+{{18446744073709551360ull, 127999999999999999ull}},
+{{18446744073709551360ull, 63999999999999999ull}},
+{{18446744073709551360ull, 31999999999999999ull}},
+{{18446744073709551360ull, 15999999999999999ull}},
+{{18446744073709551360ull, 79999999999999999ull}},
+{{18446744073709551360ull, 39999999999999999ull}},
+{{18446744073709551360ull, 19999999999999999ull}},
+{{18446744073709551360ull, 99999999999999999ull}},
+{{18446744073709551360ull, 49999999999999999ull}},
+{{18446744073709551360ull, 24999999999999999ull}},
+{{18446744073709551360ull, 124999999999999999ull}},
+{{18446744073709551360ull, 62499999999999999ull}},
+{{18446744073709551360ull, 31249999999999999ull}},
+{{18446744073709551360ull, 15624999999999999ull}},
+{{18446744073709551360ull, 78124999999999999ull}},
+{{18446744073709551360ull, 39062499999999999ull}},
+{{18446744073709551360ull, 19531249999999999ull}},
+{{18446744073709551360ull, 97656249999999999ull}},
+{{18446744073709551360ull, 48828124999999999ull}},
+{{18446744073709551360ull, 24414062499999999ull}},
+{{18446744073709551360ull, 122070312499999999ull}},
+{{18446744073709551360ull, 61035156249999999ull}},
+{{18446744073709551360ull, 30517578124999999ull}},
+{{18446744073709551360ull, 15258789062499999ull}},
+{{18446744073709551360ull, 76293945312499999ull}},
+{{18446744073709551360ull, 38146972656249999ull}},
+{{18446744073709551360ull, 19073486328124999ull}},
+{{18446744073709551360ull, 95367431640624999ull}},
+{{18446744073709551360ull, 47683715820312499ull}},
+{{18446744073709551360ull, 23841857910156249ull}},
+{{18446744073709551360ull, 119209289550781249ull}},
+{{18446744073709551360ull, 59604644775390624ull}},
+{{9223372036854775552ull, 29802322387695312ull}},
+{{4611686018427387648ull, 14901161193847656ull}},
+{{4611686018427387648ull, 74505805969238281ull}},
+{{11529215046068469504ull, 37252902984619140ull}},
+{{5764607523034234624ull, 18626451492309570ull}},
+{{10376293541461622528ull, 93132257461547851ull}},
+{{14411518807585586944ull, 46566128730773925ull}},
+{{16429131440647569152ull, 23283064365386962ull}},
+{{8358680908399640320ull, 116415321826934814ull}},
+{{4179340454199820032ull, 58207660913467407ull}},
+{{11313042263954685696ull, 29103830456733703ull}},
+{{14879893168832118528ull, 14551915228366851ull}},
+{{612489549322387200ull, 72759576141834259ull}},
+{{9529616811515969280ull, 36379788070917129ull}},
+{{13988180442612760320ull, 18189894035458564ull}},
+{{14600669991935147776ull, 90949470177292823ull}},
+{{16523707032822349568ull, 45474735088646411ull}},
+{{17485225553265950464ull, 22737367544323205ull}},
+{{13639151471491546880ull, 113686837721616029ull}},
+{{16042947772600549120ull, 56843418860808014ull}},
+{{8021473886300274432ull, 28421709430404007ull}},
+{{3213881284082269952ull, 142108547152020037ull}},
+{{10830312678895910656ull, 71054273576010018ull}},
+{{5415156339447955200ull, 35527136788005009ull}},
+{{11930950206578753280ull, 17763568394002504ull}},
+{{4314518811765112576ull, 88817841970012523ull}},
+{{11380631442737331968ull, 44408920985006261ull}},
+{{14913687758223441664ull, 22204460492503130ull}},
+{{781462496279002880ull, 111022302462515654ull}},
+{{390731248139501312ull, 55511151231257827ull}},
+{{9418737660924526336ull, 27755575615628913ull}},
+{{10200200157203529472ull, 138777878078144567ull}},
+{{14323472115456540416ull, 69388939039072283ull}},
+{{16385108094583045888ull, 34694469519536141ull}},
+{{17415926084146298624ull, 17347234759768070ull}},
+{{13292654125893287680ull, 86736173798840354ull}},
+{{6646327062946643712ull, 43368086899420177ull}},
+{{12546535568328097536ull, 21684043449710088ull}},
+{{7392445620511833856ull, 108420217248550443ull}},
+{{12919594847110692608ull, 54210108624275221ull}},
+{{15683169460410121984ull, 27105054312137610ull}},
+{{4628871007212404480ull, 135525271560688054ull}},
+{{2314435503606202112ull, 67762635780344027ull}},
+{{10380589788657876736ull, 33881317890172013ull}},
+{{14413666931183714048ull, 16940658945086006ull}},
+{{16728102434789916416ull, 84703294725430033ull}},
+{{17587423254249733888ull, 42351647362715016ull}},
+{{8793711627124866816ull, 21175823681357508ull}},
+{{7075069988205231872ull, 105879118406787542ull}},
+{{3537534994102615808ull, 52939559203393771ull}},
+{{10992139533906083584ull, 26469779601696885ull}},
+{{18067209522111315712ull, 132348898008484427ull}},
+{{18256976797910433536ull, 66174449004242213ull}},
+{{18351860435809992448ull, 33087224502121106ull}},
+{{9175930217904996096ull, 16543612251060553ull}},
+{{8986162942105878272ull, 82718061255302767ull}},
+{{13716453507907714816ull, 41359030627651383ull}},
+{{16081598790808633088ull, 20679515313825691ull}},
+{{6621017659204960000ull, 103397576569128459ull}},
+{{12533880866457255680ull, 51698788284564229ull}},
+{{15490312470083403520ull, 25849394142282114ull}},
+{{3664586055578812160ull, 129246970711410574ull}},
+{{1832293027789405952ull, 64623485355705287ull}},
+{{10139518550749478656ull, 32311742677852643ull}},
+{{14293131312229515008ull, 16155871338926321ull}},
+{{16125424340018921216ull, 80779356694631608ull}},
+{{8062712170009460480ull, 40389678347315804ull}},
+{{4031356085004730112ull, 20194839173657902ull}},
+{{1710036351314099968ull, 100974195868289511ull}},
+{{10078390212511825664ull, 50487097934144755ull}},
+{{14262567143110688512ull, 25243548967072377ull}},
+{{15972603494424788736ull, 126217744835361888ull}},
+{{7986301747212394240ull, 63108872417680944ull}},
+{{3993150873606196992ull, 31554436208840472ull}},
+{{1996575436803098368ull, 15777218104420236ull}},
+{{9982877184015492864ull, 78886090522101180ull}},
+{{4991438592007746304ull, 39443045261050590ull}},
+{{2495719296003873024ull, 19721522630525295ull}},
+{{12478596480019366144ull, 98607613152626475ull}},
+{{15462670276864458752ull, 49303806576313237ull}},
+{{16954707175287005184ull, 24651903288156618ull}},
+{{10986559581596819968ull, 123259516440783094ull}},
+{{5493279790798409984ull, 61629758220391547ull}},
+{{11970011932253980672ull, 30814879110195773ull}},
+{{15208378002981766144ull, 15407439555097886ull}},
+{{2254913720070624512ull, 77037197775489434ull}},
+{{1127456860035312128ull, 38518598887744717ull}},
+{{9787100466872431872ull, 19259299443872358ull}},
+{{12042014186943056384ull, 96296497219361792ull}},
+{{6021007093471528192ull, 48148248609680896ull}},
+{{3010503546735763968ull, 24074124304840448ull}},
+{{15052517733678820608ull, 120370621524202240ull}},
+{{7526258866839410176ull, 60185310762101120ull}},
+{{3763129433419705088ull, 30092655381050560ull}},
+{{1881564716709852416ull, 15046327690525280ull}},
+{{9407823583549262848ull, 75231638452626400ull}},
+{{4703911791774631424ull, 37615819226313200ull}},
+{{2351955895887315712ull, 18807909613156600ull}},
+{{11759779479436578560ull, 94039548065783000ull}},
+{{5879889739718289152ull, 47019774032891500ull}},
+{{2939944869859144448ull, 23509887016445750ull}},
+{{14699724349295723264ull, 117549435082228750ull}},
+{{7349862174647861504ull, 58774717541114375ull}},
+{{12898303124178706432ull, 29387358770557187ull}},
+{{15672523598944129024ull, 14693679385278593ull}},
+{{4575641699882439168ull, 73468396926392969ull}},
+{{11511192886795995392ull, 36734198463196484ull}},
+{{5755596443397997568ull, 18367099231598242ull}},
+{{10331238143280436736ull, 91835496157991211ull}},
+{{14388991108494994176ull, 45917748078995605ull}},
+{{16417867591102272768ull, 22958874039497802ull}},
+{{8302361660673158144ull, 114794370197489014ull}},
+{{4151180830336579072ull, 57397185098744507ull}},
+{{11298962452023065344ull, 28698592549372253ull}},
+{{1154580038986671872ull, 143492962746861268ull}},
+{{577290019493335808ull, 71746481373430634ull}},
+{{288645009746667776ull, 35873240686715317ull}},
+{{9367694541728109568ull, 17936620343357658ull}},
+{{9944984561221445632ull, 89683101716788292ull}},
+{{4972492280610722816ull, 44841550858394146ull}},
+{{2486246140305361408ull, 22420775429197073ull}},
+{{12431230701526807040ull, 112103877145985365ull}},
+{{15438987387618179328ull, 56051938572992682ull}},
+{{7719493693809089536ull, 28025969286496341ull}},
+{{1703980321626345216ull, 140129846432481707ull}},
+{{10075362197667948288ull, 70064923216240853ull}},
+{{14261053135688749824ull, 35032461608120426ull}},
+{{7130526567844374784ull, 17516230804060213ull}},
+{{17205888765512323328ull, 87581154020301066ull}},
+{{8602944382756161536ull, 43790577010150533ull}},
+{{13524844228232856576ull, 21895288505075266ull}},
+{{12283988920035628544ull, 109476442525376333ull}},
+{{15365366496872590080ull, 54738221262688166ull}},
+{{7682683248436294912ull, 27369110631344083ull}},
+{{1519928094762371840ull, 136845553156720417ull}},
+{{9983336084235961600ull, 68422776578360208ull}},
+{{4991668042117980672ull, 34211388289180104ull}},
+{{2495834021058990336ull, 17105694144590052ull}},
+{{12479170105294952192ull, 85528470722950260ull}},
+{{6239585052647475968ull, 42764235361475130ull}},
+{{3119792526323737856ull, 21382117680737565ull}},
+{{15598962631618690304ull, 106910588403687825ull}},
+{{17022853352664120832ull, 53455294201843912ull}},
+{{8511426676332060416ull, 26727647100921956ull}},
+{{5663645234241199104ull, 133638235504609782ull}},
+{{2831822617120599552ull, 66819117752304891ull}},
+{{10639283345415075584ull, 33409558876152445ull}},
+{{14543013709562313472ull, 16704779438076222ull}},
+{{17374836326682913024ull, 83523897190381113ull}},
+{{17910790200196232192ull, 41761948595190556ull}},
+{{8955395100098116096ull, 20880974297595278ull}},
+{{7883487353071477760ull, 104404871487976392ull}},
+{{3941743676535738880ull, 52202435743988196ull}},
+{{1970871838267869440ull, 26101217871994098ull}},
+{{9854359191339347200ull, 130506089359970490ull}},
+{{4927179595669673472ull, 65253044679985245ull}},
+{{11686961834689612544ull, 32626522339992622ull}},
+{{5843480917344806144ull, 16313261169996311ull}},
+{{10770660513014479872ull, 81566305849981556ull}},
+{{5385330256507239936ull, 40783152924990778ull}},
+{{2692665128253619968ull, 20391576462495389ull}},
+{{13463325641268099840ull, 101957882312476945ull}},
+{{15955034857488825600ull, 50978941156238472ull}},
+{{7977517428744412672ull, 25489470578119236ull}},
+{{2994098996302961152ull, 127447352890596182ull}},
+{{1497049498151480576ull, 63723676445298091ull}},
+{{9971896785930515968ull, 31861838222649045ull}},
+{{14209320429820033792ull, 15930919111324522ull}},
+{{15706369927971514368ull, 79654595556622613ull}},
+{{17076557000840532992ull, 39827297778311306ull}},
+{{8538278500420266496ull, 19913648889155653ull}},
+{{5797904354682229248ull, 99568244445778267ull}},
+{{12122324214195890432ull, 49784122222889133ull}},
+{{15284534143952720896ull, 24892061111444566ull}},
+{{2635694424925398784ull, 124460305557222834ull}},
+{{1317847212462699264ull, 62230152778611417ull}},
+{{9882295643086125312ull, 31115076389305708ull}},
+{{4941147821543062528ull, 15557538194652854ull}},
+{{6258995034005762048ull, 77787690973264271ull}},
+{{12352869553857656832ull, 38893845486632135ull}},
+{{15399806813783604224ull, 19446922743316067ull}},
+{{3212057774079814656ull, 97234613716580339ull}},
+{{10829400923894683136ull, 48617306858290169ull}},
+{{14638072498802117376ull, 24308653429145084ull}},
+{{17850130272881932032ull, 121543267145725423ull}},
+{{18148437173295741696ull, 60771633572862711ull}},
+{{18297590623502646528ull, 30385816786431355ull}},
+{{18372167348606098944ull, 15192908393215677ull}},
+{{18073860448192289280ull, 75964541966078389ull}},
+{{18260302260950920448ull, 37982270983039194ull}},
+{{9130151130475460096ull, 18991135491519597ull}},
+{{8757267504958198016ull, 94955677457597987ull}},
+{{13602005789333874688ull, 47477838728798993ull}},
+{{16024374931521713152ull, 23738919364399496ull}},
+{{6334898362770359808ull, 118694596821997484ull}},
+{{3167449181385179904ull, 59347298410998742ull}},
+{{1583724590692589824ull, 29673649205499371ull}},
+{{10015234332201070592ull, 14836824602749685ull}},
+{{13182683513586250496ull, 74184123013748427ull}},
+{{15814713793647900928ull, 37092061506874213ull}},
+{{17130728933678726144ull, 18546030753437106ull}},
+{{11866668373555425280ull, 92730153767185534ull}},
+{{5933334186777712640ull, 46365076883592767ull}},
+{{12190039130243632128ull, 23182538441796383ull}},
+{{5609963430089505792ull, 115912692208981918ull}},
+{{2804981715044752896ull, 57956346104490959ull}},
+{{10625862894377152256ull, 28978173052245479ull}},
+{{14536303484043351808ull, 14489086526122739ull}},
+{{17341285199088104960ull, 72445432630613698ull}},
+{{8670642599544052480ull, 36222716315306849ull}},
+{{13558693336626801920ull, 18111358157653424ull}},
+{{12453234462005355264ull, 90556790788267123ull}},
+{{15449989267857453312ull, 45278395394133561ull}},
+{{16948366670783502336ull, 22639197697066780ull}},
+{{10954857059079306240ull, 113195988485333904ull}},
+{{5477428529539653120ull, 56597994242666952ull}},
+{{2738714264769826560ull, 28298997121333476ull}},
+{{13693571323849132800ull, 141494985606667380ull}},
+{{6846785661924566272ull, 70747492803333690ull}},
+{{3423392830962283008ull, 35373746401666845ull}},
+{{10935068452335917312ull, 17686873200833422ull}},
+{{17781854114260483840ull, 88434366004167112ull}},
+{{8890927057130241792ull, 44217183002083556ull}},
+{{4445463528565120768ull, 22108591501041778ull}},
+{{3780573569116053248ull, 110542957505208891ull}},
+{{11113658821412802304ull, 55271478752604445ull}},
+{{14780201447561176832ull, 27635739376302222ull}},
+{{114030942967678464ull, 138178696881511114ull}},
+{{57015471483839232ull, 69089348440755557ull}},
+{{9251879772596695296ull, 34544674220377778ull}},
+{{4625939886298347520ull, 17272337110188889ull}},
+{{4682955357782187008ull, 86361685550944446ull}},
+{{2341477678891093504ull, 43180842775472223ull}},
+{{10394110876300322560ull, 21590421387736111ull}},
+{{15077066234082509568ull, 107952106938680557ull}},
+{{16761905153896030464ull, 53976053469340278ull}},
+{{8380952576948015104ull, 26988026734670139ull}},
+{{5011274737320973312ull, 134940133673350697ull}},
+{{11729009405515262464ull, 67470066836675348ull}},
+{{5864504702757631232ull, 33735033418337674ull}},
+{{2932252351378815488ull, 16867516709168837ull}},
+{{14661261756894077952ull, 84337583545844185ull}},
+{{16554002915301814784ull, 42168791772922092ull}},
+{{8277001457650907392ull, 21084395886461046ull}},
+{{4491519140835433728ull, 105421979432305232ull}},
+{{2245759570417716736ull, 52710989716152616ull}},
+{{1122879785208858368ull, 26355494858076308ull}},
+{{5614398926044292352ull, 131777474290381540ull}},
+{{2807199463022146048ull, 65888737145190770ull}},
+{{1403599731511073024ull, 32944368572595385ull}},
+{{9925171902610312192ull, 16472184286297692ull}},
+{{12732371365632458496ull, 82360921431488462ull}},
+{{6366185682816229120ull, 41180460715744231ull}},
+{{12406464878262890240ull, 20590230357872115ull}},
+{{6692092170185797376ull, 102951151789360578ull}},
+{{3346046085092898560ull, 51475575894680289ull}},
+{{10896395079401224960ull, 25737787947340144ull}},
+{{17588487249587022336ull, 128688939736700722ull}},
+{{8794243624793511168ull, 64344469868350361ull}},
+{{13620493849251531264ull, 32172234934175180ull}},
+{{6810246924625765632ull, 16086117467087590ull}},
+{{15604490549419276800ull, 80430587335437951ull}},
+{{17025617311564414208ull, 40215293667718975ull}},
+{{17736180692636982784ull, 20107646833859487ull}},
+{{14893927168346708224ull, 100538234169297439ull}},
+{{16670335621028129792ull, 50269117084648719ull}},
+{{17558539847368840704ull, 25134558542324359ull}},
+{{14005722942005997312ull, 125672792711621799ull}},
+{{16226233507857774336ull, 62836396355810899ull}},
+{{17336488790783662848ull, 31418198177905449ull}},
+{{17891616432246607104ull, 15709099088952724ull}},
+{{15671105866394830080ull, 78545495444763624ull}},
+{{7835552933197414912ull, 39272747722381812ull}},
+{{3917776466598707456ull, 19636373861190906ull}},
+{{1142138259283986176ull, 98181869305954531ull}},
+{{9794441166496768768ull, 49090934652977265ull}},
+{{14120592620103160064ull, 24545467326488632ull}},
+{{15262730879387146496ull, 122727336632443163ull}},
+{{16854737476548348928ull, 61363668316221581ull}},
+{{17650740775128950272ull, 30681834158110790ull}},
+{{8825370387564475136ull, 15340917079055395ull}},
+{{7233363790403272448ull, 76704585395276977ull}},
+{{12840053932056411904ull, 38352292697638488ull}},
+{{6420026966028205824ull, 19176146348819244ull}},
+{{13653390756431478528ull, 95880731744096221ull}},
+{{16050067415070514944ull, 47940365872048110ull}},
+{{8025033707535257344ull, 23970182936024055ull}},
+{{3231680390257184512ull, 119850914680120277ull}},
+{{10839212231983367936ull, 59925457340060138ull}},
+{{5419606115991683840ull, 29962728670030069ull}},
+{{11933175094850617600ull, 14981364335015034ull}},
+{{4325643253124434176ull, 74906821675075173ull}},
+{{11386193663416992768ull, 37453410837537586ull}},
+{{5693096831708496384ull, 18726705418768793ull}},
+{{10018740084832930816ull, 93633527093843966ull}},
+{{5009370042416465408ull, 46816763546921983ull}},
+{{11728057058063008512ull, 23408381773460991ull}},
+{{3300053069186387712ull, 117041908867304958ull}},
+{{1650026534593193728ull, 58520954433652479ull}},
+{{10048385304151372544ull, 29260477216826239ull}},
+{{14247564688930461952ull, 14630238608413119ull}},
+{{15897591223523655936ull, 73151193042065598ull}},
+{{7948795611761827840ull, 36575596521032799ull}},
+{{13197769842735689728ull, 18287798260516399ull}},
+{{10648616992549794048ull, 91438991302581998ull}},
+{{5324308496274896896ull, 45719495651290999ull}},
+{{11885526284992224256ull, 22859747825645499ull}},
+{{4087399203832466944ull, 114298739128227498ull}},
+{{2043699601916233472ull, 57149369564113749ull}},
+{{10245221837812892416ull, 28574684782056874ull}},
+{{14332621041645359360ull, 142873423910284372ull}},
+{{7166310520822679552ull, 71436711955142186ull}},
+{{3583155260411339776ull, 35718355977571093ull}},
+{{11014949667060445696ull, 17859177988785546ull}},
+{{18181260187883125504ull, 89295889943927732ull}},
+{{9090630093941562624ull, 44647944971963866ull}},
+{{4545315046970781184ull, 22323972485981933ull}},
+{{4279831161144355328ull, 111619862429909666ull}},
+{{2139915580572177664ull, 55809931214954833ull}},
+{{10293329827140864512ull, 27904965607477416ull}},
+{{14573160988285219840ull, 139524828037387082ull}},
+{{7286580494142609920ull, 69762414018693541ull}},
+{{12866662283926080768ull, 34881207009346770ull}},
+{{6433331141963040256ull, 17440603504673385ull}},
+{{13719911636105650176ull, 87203017523366926ull}},
+{{6859955818052825088ull, 43601508761683463ull}},
+{{12653349945881188352ull, 21800754380841731ull}},
+{{7926517508277287168ull, 109003771904208658ull}},
+{{3963258754138643456ull, 54501885952104329ull}},
+{{11205001413924097536ull, 27250942976052164ull}},
+{{684774848491833088ull, 136254714880260823ull}},
+{{9565759461100692224ull, 68127357440130411ull}},
+{{14006251767405121792ull, 34063678720065205ull}},
+{{16226497920557336576ull, 17031839360032602ull}},
+{{7345513307948477440ull, 85159196800163014ull}},
+{{3672756653974238720ull, 42579598400081507ull}},
+{{11059750363841895168ull, 21289799200040753ull}},
+{{18405263671790372608ull, 106448996000203767ull}},
+{{18426003872749961984ull, 53224498000101883ull}},
+{{18436373973229756672ull, 26612249000050941ull}},
+{{18394893571310577920ull, 133061245000254709ull}},
+{{18420818822510064640ull, 66530622500127354ull}},
+{{9210409411255032320ull, 33265311250063677ull}},
+{{13828576742482291968ull, 16632655625031838ull}},
+{{13802651491282805248ull, 83163278125159193ull}},
+{{16124697782496178432ull, 41581639062579596ull}},
+{{8062348891248089088ull, 20790819531289798ull}},
+{{3418256308821342720ull, 103954097656448992ull}},
+{{1709128154410671360ull, 51977048828224496ull}},
+{{854564077205335552ull, 25988524414112248ull}},
+{{4272820386026678528ull, 129942622070561240ull}},
+{{2136410193013339136ull, 64971311035280620ull}},
+{{1068205096506669568ull, 32485655517640310ull}},
+{{534102548253334784ull, 16242827758820155ull}},
+{{2670512741266673920ull, 81214138794100775ull}},
+{{10558628407488112640ull, 40607069397050387ull}},
+{{14502686240598832128ull, 20303534698525193ull}},
+{{17173198981865506304ull, 101517673492625968ull}},
+{{8586599490932753152ull, 50758836746312984ull}},
+{{4293299745466376448ull, 25379418373156492ull}},
+{{3019754653622331136ull, 126897091865782461ull}},
+{{10733249363665941248ull, 63448545932891230ull}},
+{{5366624681832970496ull, 31724272966445615ull}},
+{{11906684377771260928ull, 15862136483222807ull}},
+{{4193189667727650816ull, 79310682416114038ull}},
+{{2096594833863825408ull, 39655341208057019ull}},
+{{10271669453786688512ull, 19827670604028509ull}},
+{{14464859121514339328ull, 99138353020142547ull}},
+{{16455801597611945472ull, 49569176510071273ull}},
+{{17451272835660748544ull, 24784588255035636ull}},
+{{13469387883465536512ull, 123922941275178184ull}},
+{{6734693941732768256ull, 61961470637589092ull}},
+{{3367346970866384128ull, 30980735318794546ull}},
+{{1683673485433191936ull, 15490367659397273ull}},
+{{8418367427165960192ull, 77451838296986365ull}},
+{{13432555750437755904ull, 38725919148493182ull}},
+{{6716277875218877952ull, 19362959574246591ull}},
+{{15134645302384838144ull, 96814797871232956ull}},
+{{7567322651192419072ull, 48407398935616478ull}},
+{{3783661325596209408ull, 24203699467808239ull}},
+{{471562554271496192ull, 121018497339041196ull}},
+{{235781277135748096ull, 60509248669520598ull}},
+{{117890638567874048ull, 30254624334760299ull}},
+{{9282317356138712832ull, 15127312167380149ull}},
+{{9518098633274460928ull, 75636560836900747ull}},
+{{13982421353492006144ull, 37818280418450373ull}},
+{{16214582713600778752ull, 18909140209225186ull}},
+{{7285937273165688320ull, 94545701046125934ull}},
+{{3642968636582844160ull, 47272850523062967ull}},
+{{11044856355146197760ull, 23636425261531483ull}},
+{{18330793628311886080ull, 118182126307657417ull}},
+{{18388768851010718720ull, 59091063153828708ull}},
+{{9194384425505359360ull, 29545531576914354ull}},
+{{4597192212752679680ull, 14772765788457177ull}},
+{{4539216990053847040ull, 73863828942285886ull}},
+{{2269608495026923520ull, 36931914471142943ull}},
+{{10358176284368237568ull, 18465957235571471ull}},
+{{14897393274422084608ull, 92329786177857357ull}},
+{{16672068674065818112ull, 46164893088928678ull}},
+{{8336034337032909056ull, 23082446544464339ull}},
+{{4786683537745442048ull, 115412232722321697ull}},
+{{11616713805727496704ull, 57706116361160848ull}},
+{{5808356902863748352ull, 28853058180580424ull}},
+{{2904178451431874048ull, 14426529090290212ull}},
+{{14520892257159371008ull, 72132645451451060ull}},
+{{7260446128579685376ull, 36066322725725530ull}},
+{{3630223064289842688ull, 18033161362862765ull}},
+{{18151115321449213696ull, 90165806814313825ull}},
+{{18298929697579382528ull, 45082903407156912ull}},
+{{9149464848789691136ull, 22541451703578456ull}},
+{{8853836096529353472ull, 112707258517892282ull}},
+{{4426918048264676608ull, 56353629258946141ull}},
+{{11436831060987113984ull, 28176814629473070ull}},
+{{1843923083806916096ull, 140884073147365353ull}},
+{{10145333578758233856ull, 70442036573682676ull}},
+{{5072666789379116800ull, 35221018286841338ull}},
+{{2536333394689558272ull, 17610509143420669ull}},
+{{12681666973447792128ull, 88052545717103345ull}},
+{{15564205523578671872ull, 44026272858551672ull}},
+{{7782102761789335808ull, 22013136429275836ull}},
+{{2017025661527576576ull, 110065682146379182ull}},
+{{1008512830763788288ull, 55032841073189591ull}},
+{{9727628452236669952ull, 27516420536594795ull}},
+{{11744654113764246528ull, 137582102682973977ull}},
+{{15095699093736899072ull, 68791051341486988ull}},
+{{7547849546868449536ull, 34395525670743494ull}},
+{{3773924773434224640ull, 17197762835371747ull}},
+{{422879793461572096ull, 85988814176858736ull}},
+{{211439896730786048ull, 42994407088429368ull}},
+{{105719948365392896ull, 21497203544214684ull}},
+{{528599741826965248ull, 107486017721073420ull}},
+{{264299870913482496ull, 53743008860536710ull}},
+{{132149935456741120ull, 26871504430268355ull}},
+{{660749677283706624ull, 134357522151341775ull}},
+{{9553746875496628992ull, 67178761075670887ull}},
+{{14000245474603090176ull, 33589380537835443ull}},
+{{16223494774156320768ull, 16794690268917721ull}},
+{{7330497575943398400ull, 83973451344588609ull}},
+{{12888620824826475008ull, 41986725672294304ull}},
+{{6444310412413237504ull, 20993362836147152ull}},
+{{13774807988356635904ull, 104966814180735761ull}},
+{{16110776031033093632ull, 52483407090367880ull}},
+{{8055388015516546816ull, 26241703545183940ull}},
+{{3383451930163631360ull, 131208517725919702ull}},
+{{1691725965081815552ull, 65604258862959851ull}},
+{{10069235019395683584ull, 32802129431479925ull}},
+{{14257989546552617472ull, 16401064715739962ull}},
+{{15949715511634433280ull, 82005323578699813ull}},
+{{17198229792671992320ull, 41002661789349906ull}},
+{{8599114896335996160ull, 20501330894674953ull}},
+{{6102086334260877824ull, 102506654473374767ull}},
+{{12274415203985214720ull, 51253327236687383ull}},
+{{15360579638847383040ull, 25626663618343691ull}},
+{{3015921899398709504ull, 128133318091718459ull}},
+{{10731332986554130432ull, 64066659045859229ull}},
+{{14589038530131841024ull, 32033329522929614ull}},
+{{7294519265065920512ull, 16016664761464807ull}},
+{{18025852251620050944ull, 80083323807324036ull}},
+{{9012926125810025472ull, 40041661903662018ull}},
+{{4506463062905012736ull, 20020830951831009ull}},
+{{4085571240815512320ull, 100104154759155046ull}},
+{{2042785620407756032ull, 50052077379577523ull}},
+{{10244764847058653696ull, 25026038689788761ull}},
+{{14330336087874166016ull, 125130193448943807ull}},
+{{16388540080791858688ull, 62565096724471903ull}},
+{{17417642077250705152ull, 31282548362235951ull}},
+{{17932193075480128256ull, 15641274181117975ull}},
+{{15873989082562435584ull, 78206370905589879ull}},
+{{17160366578135993600ull, 39103185452794939ull}},
+{{17803555325922772480ull, 19551592726397469ull}},
+{{15230800334775656704ull, 97757963631987349ull}},
+{{16838772204242604032ull, 48878981815993674ull}},
+{{8419386102121302016ull, 24439490907996837ull}},
+{{5203442363187407104ull, 122197454539984187ull}},
+{{11825093218448479232ull, 61098727269992093ull}},
+{{15135918646079015424ull, 30549363634996046ull}},
+{{7567959323039507712ull, 15274681817498023ull}},
+{{946308467778435584ull, 76373409087490117ull}},
+{{9696526270743993600ull, 38186704543745058ull}},
+{{4848263135371996672ull, 19093352271872529ull}},
+{{5794571603150432256ull, 95466761359362646ull}},
+{{2897285801575216128ull, 47733380679681323ull}},
+{{10672014937642383872ull, 23866690339840661ull}},
+{{16466586540792816128ull, 119333451699203307ull}},
+{{17456665307251183872ull, 59666725849601653ull}},
+{{17951704690480367616ull, 29833362924800826ull}},
+{{8975852345240183808ull, 14916681462400413ull}},
+{{7985773578781816064ull, 74583407312002067ull}},
+{{13216258826245683712ull, 37291703656001033ull}},
+{{15831501449977617664ull, 18645851828000516ull}},
+{{5370530955049882368ull, 93229259140002584ull}},
+{{2685265477524941056ull, 46614629570001292ull}},
+{{1342632738762470400ull, 23307314785000646ull}},
+{{6713163693812352768ull, 116536573925003230ull}},
+{{3356581846906176256ull, 58268286962501615ull}},
+{{10901662960307863808ull, 29134143481250807ull}},
+{{14674203517008707584ull, 14567071740625403ull}},
+{{18030785363914884096ull, 72835358703127018ull}},
+{{9015392681957442048ull, 36417679351563509ull}},
+{{13731068377833496832ull, 18208839675781754ull}},
+{{13315109668038829568ull, 91044198378908773ull}},
+{{15880926870874190592ull, 45522099189454386ull}},
+{{7940463435437095168ull, 22761049594727193ull}},
+{{2808829029766373120ull, 113805247973635967ull}},
+{{10627786551737962240ull, 56902623986817983ull}},
+{{14537265312723756800ull, 28451311993408991ull}},
+{{17346094342490130176ull, 142256559967044958ull}},
+{{8673047171245064960ull, 71128279983522479ull}},
+{{13559895622477308160ull, 35564139991761239ull}},
+{{16003319848093429760ull, 17782069995880619ull}},
+{{6229622945628943360ull, 88910349979403099ull}},
+{{12338183509669247488ull, 44455174989701549ull}},
+{{15392463791689399552ull, 22227587494850774ull}},
+{{3175342663608791296ull, 111137937474253874ull}},
+{{1587671331804395520ull, 55568968737126937ull}},
+{{10017207702756973568ull, 27784484368563468ull}},
+{{13192550366365765120ull, 138922421842817342ull}},
+{{6596275183182882560ull, 69461210921408671ull}},
+{{12521509628446216960ull, 34730605460704335ull}},
+{{15484126851077884160ull, 17365302730352167ull}},
+{{3633657960551215360ull, 86826513651760839ull}},
+{{11040201017130383360ull, 43413256825880419ull}},
+{{14743472545419967488ull, 21706628412940209ull}},
+{{18377130505971182848ull, 108533142064701048ull}},
+{{9188565252985591296ull, 54266571032350524ull}},
+{{4594282626492795648ull, 27133285516175262ull}},
+{{4524669058754426880ull, 135666427580876311ull}},
+{{11485706566231989248ull, 67833213790438155ull}},
+{{14966225319970770432ull, 33916606895219077ull}},
+{{16706484696840161024ull, 16958303447609538ull}},
+{{9745447189362598656ull, 84791517238047694ull}},
+{{4872723594681299200ull, 42395758619023847ull}},
+{{11659733834195425280ull, 21197879309511923ull}},
+{{2958436949848472576ull, 105989396547559618ull}},
+{{1479218474924236288ull, 52994698273779809ull}},
+{{9962981274316893952ull, 26497349136889904ull}},
+{{12921418224165366528ull, 132486745684449522ull}},
+{{6460709112082683136ull, 66243372842224761ull}},
+{{12453726592896117248ull, 33121686421112380ull}},
+{{6226863296448058624ull, 16560843210556190ull}},
+{{12687572408530742016ull, 82804216052780951ull}},
+{{15567158241120146688ull, 41402108026390475ull}},
+{{17006951157414849024ull, 20701054013195237ull}},
+{{11247779492236039424ull, 103505270065976189ull}},
+{{14847261782972795392ull, 51752635032988094ull}},
+{{7423630891486397696ull, 25876317516494047ull}},
+{{224666310012885760ull, 129381587582470237ull}},
+{{9335705191861218560ull, 64690793791235118ull}},
+{{4667852595930609152ull, 32345396895617559ull}},
+{{11557298334820080384ull, 16172698447808779ull}},
+{{2446259452971747584ull, 80863492239043898ull}},
+{{1223129726485873664ull, 40431746119521949ull}},
+{{9834936900097712640ull, 20215873059760974ull}},
+{{12281196353069460224ull, 101079365298804872ull}},
+{{6140598176534729984ull, 50539682649402436ull}},
+{{3070299088267364864ull, 25269841324701218ull}},
+{{15351495441336825344ull, 126349206623506090ull}},
+{{7675747720668412672ull, 63174603311753045ull}},
+{{13061245897188982016ull, 31587301655876522ull}},
+{{6530622948594490880ull, 15793650827938261ull}},
+{{14206370669262903552ull, 78968254139691306ull}},
+{{7103185334631451648ull, 39484127069845653ull}},
+{{12774964704170501632ull, 19742063534922826ull}},
+{{8534591299723853824ull, 98710317674614133ull}},
+{{13490667686716702720ull, 49355158837307066ull}},
+{{6745333843358351360ull, 24677579418653533ull}},
+{{15279925143082205184ull, 123387897093267666ull}},
+{{7639962571541102592ull, 61693948546633833ull}},
+{{13043353322625327104ull, 30846974273316916ull}},
+{{6521676661312663552ull, 15423487136658458ull}},
+{{14161639232853766144ull, 77117435683292291ull}},
+{{16304191653281658880ull, 38558717841646145ull}},
+{{17375467863495605248ull, 19279358920823072ull}},
+{{13090363022639819776ull, 96396794604115364ull}},
+{{6545181511319909888ull, 48198397302057682ull}},
+{{3272590755659954944ull, 24099198651028841ull}},
+{{16362953778299774720ull, 120495993255144205ull}},
+{{17404848926004663040ull, 60247996627572102ull}},
+{{8702424463002331392ull, 30123998313786051ull}},
+{{13574584268355941376ull, 15061999156893025ull}},
+{{12532689120651053056ull, 75309995784465128ull}},
+{{6266344560325526528ull, 37654997892232564ull}},
+{{3133172280162763264ull, 18827498946116282ull}},
+{{15665861400813816320ull, 94137494730581410ull}},
+{{7832930700406908160ull, 47068747365290705ull}},
+{{13139837387058229760ull, 23534373682645352ull}},
+{{10358954714162494720ull, 117671868413226763ull}},
+{{14402849393936023040ull, 58835934206613381ull}},
+{{16424796733822787328ull, 29417967103306690ull}},
+{{8212398366911393536ull, 14708983551653345ull}},
+{{4168503687137865216ull, 73544917758266727ull}},
+{{11307623880423708416ull, 36772458879133363ull}},
+{{14877183977066629888ull, 18386229439566681ull}},
+{{598943590494943744ull, 91931147197833409ull}},
+{{9522843832102247680ull, 45965573598916704ull}},
+{{4761421916051123712ull, 22982786799458352ull}},
+{{5360365506546067456ull, 114913933997291761ull}},
+{{11903554790127809536ull, 57456966998645880ull}},
+{{5951777395063904768ull, 28728483499322940ull}},
+{{11312142901609972224ull, 143642417496614701ull}},
+{{14879443487659761920ull, 71821208748307350ull}},
+{{7439721743829880832ull, 35910604374153675ull}},
+{{12943232908769716224ull, 17955302187076837ull}},
+{{9375932322719926528ull, 89776510935384188ull}},
+{{4687966161359963136ull, 44888255467692094ull}},
+{{2343983080679981568ull, 22444127733846047ull}},
+{{11719915403399908352ull, 112220638669230235ull}},
+{{15083329738554729984ull, 56110319334615117ull}},
+{{16765036906132140800ull, 28055159667307558ull}},
+{{10038208235822497536ull, 140275798336537794ull}},
+{{5019104117911248640ull, 70137899168268897ull}},
+{{11732924095810400000ull, 35068949584134448ull}},
+{{5866462047905199872ull, 17534474792067224ull}},
+{{10885566165816448768ull, 87672373960336121ull}},
+{{14666155119763000064ull, 43836186980168060ull}},
+{{7333077559881499904ull, 21918093490084030ull}},
+{{18218643725697948928ull, 109590467450420151ull}},
+{{18332693899703750144ull, 54795233725210075ull}},
+{{18389718986706650880ull, 27397616862605037ull}},
+{{18161618638695048192ull, 136988084313025189ull}},
+{{18304181356202299904ull, 68494042156512594ull}},
+{{9152090678101149952ull, 34247021078256297ull}},
+{{13799417375905350656ull, 17123510539128148ull}},
+{{13656854658398098944ull, 85617552695640743ull}},
+{{16051799366053825280ull, 42808776347820371ull}},
+{{17249271719881688320ull, 21404388173910185ull}},
+{{12459382304570235904ull, 107021940869550929ull}},
+{{15453063189139893760ull, 53510970434775464ull}},
+{{7726531594569946880ull, 26755485217387732ull}},
+{{1739169825430631168ull, 133777426086938662ull}},
+{{869584912715315456ull, 66888713043469331ull}},
+{{9658164493212433408ull, 33444356521734665ull}},
+{{14052454283460992512ull, 16722178260867332ull}},
+{{14922039196176308224ull, 83610891304336663ull}},
+{{16684391634942929920ull, 41805445652168331ull}},
+{{17565567854326240768ull, 20902722826084165ull}},
+{{14040862976792997376ull, 104513614130420829ull}},
+{{16243803525251274496ull, 52256807065210414ull}},
+{{8121901762625637120ull, 26128403532605207ull}},
+{{3716020665709083136ull, 130642017663026037ull}},
+{{11081382369709317376ull, 65321008831513018ull}},
+{{5540691184854658560ull, 32660504415756509ull}},
+{{11993717629282105088ull, 16330252207878254ull}},
+{{4628355925281870848ull, 81651261039391273ull}},
+{{11537549999495711232ull, 40825630519695636ull}},
+{{5768774999747855616ull, 20412815259847818ull}},
+{{10397130925029726464ull, 102064076299239091ull}},
+{{14421937499369638912ull, 51032038149619545ull}},
+{{16434340786539595264ull, 25516019074809772ull}},
+{{8384727637859770112ull, 127580095374048864ull}},
+{{4192363818929884928ull, 63790047687024432ull}},
+{{2096181909464942336ull, 31895023843512216ull}},
+{{1048090954732471040ull, 15947511921756108ull}},
+{{5240454773662356224ull, 79737559608780540ull}},
+{{2620227386831177984ull, 39868779804390270ull}},
+{{1310113693415588864ull, 19934389902195135ull}},
+{{6550568467077945344ull, 99671949510975675ull}},
+{{12498656270393748480ull, 49835974755487837ull}},
+{{15472700172051650048ull, 24917987377743918ull}},
+{{3576524565420043776ull, 124589936888719594ull}},
+{{1788262282710021888ull, 62294968444359797ull}},
+{{10117503178209786624ull, 31147484222179898ull}},
+{{5058751589104893184ull, 15573742111089949ull}},
+{{6847013871814915328ull, 77868710555449746ull}},
+{{3423506935907457536ull, 38934355277724873ull}},
+{{10935125504808504576ull, 19467177638862436ull}},
+{{17782139376623419904ull, 97335888194312182ull}},
+{{8891069688311709952ull, 48667944097156091ull}},
+{{13668906881010630656ull, 24333972048578045ull}},
+{{13004302183924499200ull, 121669860242890228ull}},
+{{6502151091962249472ull, 60834930121445114ull}},
+{{3251075545981124608ull, 30417465060722557ull}},
+{{10848909809845338112ull, 15208732530361278ull}},
+{{17351060901807587840ull, 76043662651806392ull}},
+{{8675530450903793920ull, 38021831325903196ull}},
+{{4337765225451896832ull, 19010915662951598ull}},
+{{3242082053549933056ull, 95054578314757991ull}},
+{{10844413063629742336ull, 47527289157378995ull}},
+{{14645578568669646848ull, 23763644578689497ull}},
+{{17887660622219580160ull, 118818222893447488ull}},
+{{8943830311109789952ull, 59409111446723744ull}},
+{{4471915155554894848ull, 29704555723361872ull}},
+{{2235957577777447424ull, 14852277861680936ull}},
+{{11179787888887237632ull, 74261389308404680ull}},
+{{5589893944443618816ull, 37130694654202340ull}},
+{{2794946972221809408ull, 18565347327101170ull}},
+{{13974734861109047040ull, 92826736635505850ull}},
+{{6987367430554523392ull, 46413368317752925ull}},
+{{12717055752132037376ull, 23206684158876462ull}},
+{{8245046539531532800ull, 116033420794382313ull}},
+{{13345895306620542208ull, 58016710397191156ull}},
+{{6672947653310270976ull, 29008355198595578ull}},
+{{3336473826655135488ull, 14504177599297789ull}},
+{{16682369133275677696ull, 72520887996488945ull}},
+{{17564556603492614656ull, 36260443998244472ull}},
+{{8782278301746307328ull, 18130221999122236ull}},
+{{7017903361312433408ull, 90651109995611182ull}},
+{{3508951680656216576ull, 45325554997805591ull}},
+{{10977847877182884096ull, 22662777498902795ull}},
+{{17995751238495317760ull, 113313887494513977ull}},
+{{18221247656102434560ull, 56656943747256988ull}},
+{{9110623828051217152ull, 28328471873628494ull}},
+{{8659630992836983552ull, 141642359368142472ull}},
+{{4329815496418491648ull, 70821179684071236ull}},
+{{2164907748209245696ull, 35410589842035618ull}},
+{{1082453874104622848ull, 17705294921017809ull}},
+{{5412269370523114752ull, 88526474605089045ull}},
+{{11929506722116333056ull, 44263237302544522ull}},
+{{5964753361058166528ull, 22131618651272261ull}},
+{{11377022731581281280ull, 110658093256361306ull}},
+{{5688511365790640640ull, 55329046628180653ull}},
+{{12067627719750096128ull, 27664523314090326ull}},
+{{4997906377621825792ull, 138322616570451633ull}},
+{{11722325225665688576ull, 69161308285225816ull}},
+{{5861162612832844288ull, 34580654142612908ull}},
+{{2930581306416422144ull, 17290327071306454ull}},
+{{14652906532082110720ull, 86451635356532270ull}},
+{{7326453266041055232ull, 43225817678266135ull}},
+{{12886598669875303424ull, 21612908839133067ull}},
+{{9092761128247862784ull, 108064544195665338ull}},
+{{4546380564123931392ull, 54032272097832669ull}},
+{{11496562318916741376ull, 27016136048916334ull}},
+{{2142579373455052544ull, 135080680244581673ull}},
+{{10294661723582301952ull, 67540340122290836ull}},
+{{5147330861791150848ull, 33770170061145418ull}},
+{{2573665430895575296ull, 16885085030572709ull}},
+{{12868327154477877504ull, 84425425152863545ull}},
+{{15657535614093714432ull, 42212712576431772ull}},
+{{7828767807046857216ull, 21106356288215886ull}},
+{{2250350887815183360ull, 105531781441079432ull}},
+{{1125175443907591680ull, 52765890720539716ull}},
+{{562587721953795840ull, 26382945360269858ull}},
+{{2812938609768979200ull, 131914726801349290ull}},
+{{1406469304884489472ull, 65957363400674645ull}},
+{{9926606689297020416ull, 32978681700337322ull}},
+{{4963303344648510208ull, 16489340850168661ull}},
+{{6369772649532999936ull, 82446704250843306ull}},
+{{3184886324766499840ull, 41223352125421653ull}},
+{{10815815199238025728ull, 20611676062710826ull}},
+{{17185587848771025664ull, 103058380313554132ull}},
+{{8592793924385512704ull, 51529190156777066ull}},
+{{4296396962192756224ull, 25764595078388533ull}},
+{{3035240737254230528ull, 128822975391942666ull}},
+{{1517620368627115264ull, 64411487695971333ull}},
+{{9982182221168333312ull, 32205743847985666ull}},
+{{4991091110584166656ull, 16102871923992833ull}},
+{{6508711479211281920ull, 80514359619964166ull}},
+{{3254355739605640960ull, 40257179809982083ull}},
+{{10850549906657596160ull, 20128589904991041ull}},
+{{17359261385868878336ull, 100642949524955207ull}},
+{{17903002729789214976ull, 50321474762477603ull}},
+{{18174873401749383168ull, 25160737381238801ull}},
+{{17087390713908709888ull, 125803686906194009ull}},
+{{17767067393809130752ull, 62901843453097004ull}},
+{{8883533696904565248ull, 31450921726548502ull}},
+{{4441766848452282624ull, 15725460863274251ull}},
+{{3762090168551861760ull, 78627304316371256ull}},
+{{1881045084275930880ull, 39313652158185628ull}},
+{{940522542137965312ull, 19656826079092814ull}},
+{{4702612710689827328ull, 98284130395464070ull}},
+{{2351306355344913664ull, 49142065197732035ull}},
+{{10399025214527232512ull, 24571032598866017ull}},
+{{15101637925217059840ull, 122855162994330087ull}},
+{{16774190999463305728ull, 61427581497165043ull}},
+{{17610467536586428672ull, 30713790748582521ull}},
+{{18028605805147990016ull, 15356895374291260ull}},
+{{16356052730901744384ull, 76784476871456304ull}},
+{{8178026365450872064ull, 38392238435728152ull}},
+{{4089013182725435904ull, 19196119217864076ull}},
+{{1998321839917628672ull, 95980596089320381ull}},
+{{10222532956813590016ull, 47990298044660190ull}},
+{{5111266478406795008ull, 23995149022330095ull}},
+{{7109588318324423936ull, 119975745111650476ull}},
+{{3554794159162211840ull, 59987872555825238ull}},
+{{1777397079581105920ull, 29993936277912619ull}},
+{{10112070576645328640ull, 14996968138956309ull}},
+{{13666864735807540736ull, 74984840694781547ull}},
+{{16056804404758546176ull, 37492420347390773ull}},
+{{17251774239234048768ull, 18746210173695386ull}},
+{{12471894901332037888ull, 93731050868476934ull}},
+{{6235947450666018816ull, 46865525434238467ull}},
+{{12341345762187785216ull, 23432762717119233ull}},
+{{6366496589810271744ull, 117163813585596168ull}},
+{{3183248294905135872ull, 58581906792798084ull}},
+{{1591624147452567808ull, 29290953396399042ull}},
+{{795812073726283776ull, 14645476698199521ull}},
+{{3979060368631419648ull, 73227383490997605ull}},
+{{11212902221170485504ull, 36613691745498802ull}},
+{{5606451110585242624ull, 18306845872749401ull}},
+{{9585511479216662528ull, 91534229363747006ull}},
+{{4792755739608331264ull, 45767114681873503ull}},
+{{11619749906658941440ull, 22883557340936751ull}},
+{{2758517312166052608ull, 114417786704683758ull}},
+{{1379258656083026176ull, 57208893352341879ull}},
+{{9913001364896288768ull, 28604446676170939ull}},
+{{12671518677062341632ull, 143022233380854697ull}},
+{{15559131375385946624ull, 71511116690427348ull}},
+{{7779565687692973312ull, 35755558345213674ull}},
+{{3889782843846486528ull, 17877779172606837ull}},
+{{1002170145522881536ull, 89388895863034186ull}},
+{{501085072761440768ull, 44694447931517093ull}},
+{{9473914573235496192ull, 22347223965758546ull}},
+{{10476084718758377728ull, 111736119828792732ull}},
+{{5238042359379188736ull, 55868059914396366ull}},
+{{2619021179689594368ull, 27934029957198183ull}},
+{{13095105898447972352ull, 139670149785990915ull}},
+{{15770924986078761984ull, 69835074892995457ull}},
+{{17108834529894156800ull, 34917537446497728ull}},
+{{8554417264947078400ull, 17458768723248864ull}},
+{{5878598177316288768ull, 87293843616244322ull}},
+{{2939299088658144256ull, 43646921808122161ull}},
+{{10693021581183847936ull, 21823460904061080ull}},
+{{16571619758500136704ull, 109117304520305402ull}},
+{{8285809879250068224ull, 54558652260152701ull}},
+{{13366276976479809792ull, 27279326130076350ull}},
+{{11491152661270395136ull, 136396630650381753ull}},
+{{14968948367489973248ull, 68198315325190876ull}},
+{{7484474183744986624ull, 34099157662595438ull}},
+{{3742237091872493312ull, 17049578831297719ull}},
+{{264441385652914944ull, 85247894156488596ull}},
+{{132220692826457344ull, 42623947078244298ull}},
+{{66110346413228544ull, 21311973539122149ull}},
+{{330551732066143744ull, 106559867695610745ull}},
+{{9388647902887847680ull, 53279933847805372ull}},
+{{4694323951443923712ull, 26639966923902686ull}},
+{{5024875683510067712ull, 133199834619513431ull}},
+{{11735809878609809664ull, 66599917309756715ull}},
+{{15091276976159680512ull, 33299958654878357ull}},
+{{16769010524934616064ull, 16649979327439178ull}},
+{{10058076329834874112ull, 83249896637195894ull}},
+{{5029038164917436928ull, 41624948318597947ull}},
+{{11737891119313494272ull, 20812474159298973ull}},
+{{3349223375438816768ull, 104062370796494868ull}},
+{{1674611687719408384ull, 52031185398247434ull}},
+{{837305843859704064ull, 26015592699123717ull}},
+{{4186529219298521088ull, 130077963495618585ull}},
+{{11316636646504036352ull, 65038981747809292ull}},
+{{5658318323252018176ull, 32519490873904646ull}},
+{{2829159161626009088ull, 16259745436952323ull}},
+{{14145795808130045440ull, 81298727184761615ull}},
+{{16296269940919798528ull, 40649363592380807ull}},
+{{17371507007314674944ull, 20324681796190403ull}},
+{{13070558741735168768ull, 101623408980952019ull}},
+{{15758651407722360064ull, 50811704490476009ull}},
+{{17102697740715955712ull, 25405852245238004ull}},
+{{11726512408741573120ull, 127029261226190024ull}},
+{{5863256204370786560ull, 63514630613095012ull}},
+{{2931628102185393152ull, 31757315306547506ull}},
+{{1465814051092696576ull, 15878657653273753ull}},
+{{7329070255463483136ull, 79393288266368765ull}},
+{{12887907164586517248ull, 39696644133184382ull}},
+{{6443953582293258496ull, 19848322066592191ull}},
+{{13773023837756741888ull, 99241610332960956ull}},
+{{6886511918878370816ull, 49620805166480478ull}},
+{{3443255959439185408ull, 24810402583240239ull}},
+{{17216279797195927552ull, 124052012916201195ull}},
+{{17831511935452739584ull, 62026006458100597ull}},
+{{18139128004581145600ull, 31013003229050298ull}},
+{{9069564002290572800ull, 15506501614525149ull}},
+{{8454331864033760768ull, 77532508072625747ull}},
+{{13450537968871656192ull, 38766254036312873ull}},
+{{15948641021290603776ull, 19383127018156436ull}},
+{{5956228811614812928ull, 96915635090782184ull}},
+{{2978114405807406336ull, 48457817545391092ull}},
+{{1489057202903703040ull, 24228908772695546ull}},
+{{7445286014518516224ull, 121144543863477730ull}},
+{{3722643007259258112ull, 60572271931738865ull}},
+{{11084693540484404736ull, 30286135965869432ull}},
+{{5542346770242202368ull, 15143067982934716ull}},
+{{9264989777501460480ull, 75715339914673581ull}},
+{{13855866925605506048ull, 37857669957336790ull}},
+{{6927933462802753024ull, 18928834978668395ull}},
+{{16192923240304213504ull, 94644174893341976ull}},
+{{8096461620152106752ull, 47322087446670988ull}},
+{{4048230810076053248ull, 23661043723335494ull}},
+{{1794409976670715392ull, 118305218616677471ull}},
+{{10120577025190133504ull, 59152609308338735ull}},
+{{14283660549449842432ull, 29576304654169367ull}},
+{{16365202311579696896ull, 14788152327084683ull}},
+{{8039035263060278784ull, 73940761635423419ull}},
+{{13242889668384915200ull, 36970380817711709ull}},
+{{15844816871047233280ull, 18485190408855854ull}},
+{{5437108060397960704ull, 92425952044279274ull}},
+{{2718554030198980352ull, 46212976022139637ull}},
+{{10582649051954265856ull, 23106488011069818ull}},
+{{16019757112352226816ull, 115532440055349092ull}},
+{{8009878556176113408ull, 57766220027674546ull}},
+{{4004939278088056576ull, 28883110013837273ull}},
+{{11225841675898803968ull, 14441555006918636ull}},
+{{788976158365366016ull, 72207775034593183ull}},
+{{9617860116037458688ull, 36103887517296591ull}},
+{{14032302094873505024ull, 18051943758648295ull}},
+{{14821278253238871040ull, 90259718793241478ull}},
+{{7410639126619435520ull, 45129859396620739ull}},
+{{12928691600164493568ull, 22564929698310369ull}},
+{{9303225779693812992ull, 112824648491551848ull}},
+{{4651612889846906368ull, 56412324245775924ull}},
+{{2325806444923453184ull, 28206162122887962ull}},
+{{11629032224617266432ull, 141030810614439810ull}},
+{{5814516112308633088ull, 70515405307219905ull}},
+{{12130630093009092352ull, 35257702653609952ull}},
+{{6065315046504546048ull, 17628851326804976ull}},
+{{11879831158813179392ull, 88144256634024881ull}},
+{{15163287616261365504ull, 44072128317012440ull}},
+{{7581643808130682624ull, 22036064158506220ull}},
+{{1014730893234310656ull, 110180320792531102ull}},
+{{507365446617155328ull, 55090160396265551ull}},
+{{9477054760163353344ull, 27545080198132775ull}},
+{{10491785653397664000ull, 137725400990663877ull}},
+{{14469264863553607680ull, 68862700495331938ull}},
+{{7234632431776803840ull, 34431350247665969ull}},
+{{12840688252743177728ull, 17215675123832984ull}},
+{{8863209042587233792ull, 86078375619164923ull}},
+{{13654976558148392704ull, 43039187809582461ull}},
+{{16050860315928972032ull, 21519593904791230ull}},
+{{6467325284806654464ull, 107597969523956154ull}},
+{{3233662642403327232ull, 53798984761978077ull}},
+{{10840203358056439296ull, 26899492380989038ull}},
+{{17307528642863094016ull, 134497461904945192ull}},
+{{8653764321431546880ull, 67248730952472596ull}},
+{{4326882160715773440ull, 33624365476236298ull}},
+{{2163441080357886720ull, 16812182738118149ull}},
+{{10817205401789433600ull, 84060913690590745ull}},
+{{14631974737749492480ull, 42030456845295372ull}},
+{{7315987368874746112ull, 21015228422647686ull}},
+{{18133192770664179968ull, 105076142113238431ull}},
+{{18289968422186865664ull, 52538071056619215ull}},
+{{18368356247948208640ull, 26269035528309607ull}},
+{{18054804944902837248ull, 131345177641548039ull}},
+{{18250774509306194432ull, 65672588820774019ull}},
+{{18348759291507873024ull, 32836294410387009ull}},
+{{18397751682608712192ull, 16418147205193504ull}},
+{{18201782118205355008ull, 82090736025967524ull}},
+{{9100891059102677504ull, 41045368012983762ull}},
+{{4550445529551338752ull, 20522684006491881ull}},
+{{4305483574047142144ull, 102613420032459406ull}},
+{{2152741787023570944ull, 51306710016229703ull}},
+{{10299742930366561280ull, 25653355008114851ull}},
+{{14605226504413703680ull, 128266775040574257ull}},
+{{16525985289061627648ull, 64133387520287128ull}},
+{{8262992644530813696ull, 32066693760143564ull}},
+{{4131496322265406720ull, 16033346880071782ull}},
+{{2210737537617482752ull, 80166734400358911ull}},
+{{10328740805663517184ull, 40083367200179455ull}},
+{{14387742439686534400ull, 20041683600089727ull}},
+{{16598479977304017408ull, 100208418000448638ull}},
+{{8299239988652008704ull, 50104209000224319ull}},
+{{13372992031180780032ull, 25052104500112159ull}},
+{{11524727934775245824ull, 125260522500560798ull}},
+{{5762363967387622912ull, 62630261250280399ull}},
+{{12104554020548587264ull, 31315130625140199ull}},
+{{15275649047129069312ull, 15657565312570099ull}},
+{{2591268940807140608ull, 78287826562850499ull}},
+{{10519006507258345984ull, 39143913281425249ull}},
+{{14482875290483948800ull, 19571956640712624ull}},
+{{17074144231291089664ull, 97859783203563123ull}},
+{{17760444152500320512ull, 48929891601781561ull}},
+{{18103594113104935936ull, 24464945800890780ull}},
+{{16730994270686474240ull, 122324729004453904ull}},
+{{8365497135343237120ull, 61162364502226952ull}},
+{{4182748567671618560ull, 30581182251113476ull}},
+{{2091374283835809280ull, 15290591125556738ull}},
+{{10456871419179046400ull, 76452955627783690ull}},
+{{5228435709589523200ull, 38226477813891845ull}},
+{{11837589891649537280ull, 19113238906945922ull}},
+{{3847717237119032064ull, 95566194534729613ull}},
+{{11147230655414291712ull, 47783097267364806ull}},
+{{5573615327707145728ull, 23891548633682403ull}},
+{{9421332564826178048ull, 119457743168412016ull}},
+{{4710666282413089024ull, 59728871584206008ull}},
+{{2355333141206544384ull, 29864435792103004ull}},
+{{1177666570603272192ull, 14932217896051502ull}},
+{{5888332853016361216ull, 74661089480257510ull}},
+{{2944166426508180480ull, 37330544740128755ull}},
+{{10695455250108866048ull, 18665272370064377ull}},
+{{16583788103125227520ull, 93326361850321887ull}},
+{{17515266088417389568ull, 46663180925160943ull}},
+{{17981005081063470592ull, 23331590462580471ull}},
+{{16118049110479146496ull, 116657952312902359ull}},
+{{17282396592094349056ull, 58328976156451179ull}},
+{{17864570332901950208ull, 29164488078225589ull}},
+{{18155657203305750784ull, 14582244039112794ull}},
+{{16991309721690548224ull, 72911220195563974ull}},
+{{8495654860845274112ull, 36455610097781987ull}},
+{{13471199467277412864ull, 18227805048890993ull}},
+{{12015765115258409472ull, 91139025244454968ull}},
+{{6007882557629204736ull, 45569512622227484ull}},
+{{3003941278814602240ull, 22784756311113742ull}},
+{{15019706394073011968ull, 113923781555568710ull}},
+{{7509853197036505856ull, 56961890777784355ull}},
+{{12978298635373028608ull, 28480945388892177ull}},
+{{9551260955736489216ull, 142404726944460888ull}},
+{{4775630477868244480ull, 71202363472230444ull}},
+{{2387815238934122240ull, 35601181736115222ull}},
+{{1193907619467060992ull, 17800590868057611ull}},
+{{5969538097335305728ull, 89002954340288055ull}},
+{{12208141085522428672ull, 44501477170144027ull}},
+{{15327442579615990016ull, 22250738585072013ull}},
+{{2850236603241744384ull, 111253692925360069ull}},
+{{10648490338475648000ull, 55626846462680034ull}},
+{{5324245169237824000ull, 27813423231340017ull}},
+{{8174481772479568384ull, 139067116156700086ull}},
+{{4087240886239784192ull, 69533558078350043ull}},
+{{11266992479974667776ull, 34766779039175021ull}},
+{{14856868276842109696ull, 17383389519587510ull}},
+{{497365089372342272ull, 86916947597937554ull}},
+{{248682544686171136ull, 43458473798968777ull}},
+{{9347713309197861376ull, 21729236899484388ull}},
+{{9845078398570203648ull, 108646184497421942ull}},
+{{4922539199285101824ull, 54323092248710971ull}},
+{{11684641636497326592ull, 27161546124355485ull}},
+{{3082975961357978880ull, 135807730621777428ull}},
+{{1541487980678989312ull, 67903865310888714ull}},
+{{770743990339494656ull, 33951932655444357ull}},
+{{9608744032024523008ull, 16975966327722178ull}},
+{{11150232012703512576ull, 84879831638610892ull}},
+{{5575116006351756288ull, 42439915819305446ull}},
+{{2787558003175878144ull, 21219957909652723ull}},
+{{13937790015879390720ull, 106099789548263615ull}},
+{{16192267044794471168ull, 53049894774131807ull}},
+{{17319505559252011264ull, 26524947387065903ull}},
+{{12810551501421850368ull, 132624736935329519ull}},
+{{15628647787565700864ull, 66312368467664759ull}},
+{{17037695930637626112ull, 33156184233832379ull}},
+{{17742220002173588736ull, 16578092116916189ull}},
+{{14924123716029738240ull, 82890460584580949ull}},
+{{16685433894869644800ull, 41445230292290474ull}},
+{{8342716947434822400ull, 20722615146145237ull}},
+{{4820096589755009280ull, 103613075730726187ull}},
+{{11633420331732280320ull, 51806537865363093ull}},
+{{15040082202720915968ull, 25903268932681546ull}},
+{{1413434718766373632ull, 129516344663407734ull}},
+{{706717359383186688ull, 64758172331703867ull}},
+{{9576730716546369024ull, 32379086165851933ull}},
+{{14011737395127960320ull, 16189543082925966ull}},
+{{14718454754511147264ull, 80947715414629833ull}},
+{{16582599414110349312ull, 40473857707314916ull}},
+{{8291299707055174656ull, 20236928853657458ull}},
+{{4563010387856770304ull, 101184644268287292ull}},
+{{2281505193928385024ull, 50592322134143646ull}},
+{{1140752596964192512ull, 25296161067071823ull}},
+{{5703762984820963072ull, 126480805335359115ull}},
+{{12075253529265257216ull, 63240402667679557ull}},
+{{15260998801487404288ull, 31620201333839778ull}},
+{{7630499400743702016ull, 15810100666919889ull}},
+{{1259008856299407872ull, 79050503334599447ull}},
+{{9852876465004479744ull, 39525251667299723ull}},
+{{14149810269357015552ull, 19762625833649861ull}},
+{{15408819125656423680ull, 98813129168249308ull}},
+{{7704409562828211712ull, 49406564584124654ull}},
+{{3852204781414105856ull, 24703282292062327ull}},
+{{814279833360977920ull, 123516411460311636ull}},
+{{407139916680488960ull, 61758205730155818ull}},
+{{203569958340244480ull, 30879102865077909ull}},
+{{9325157016024898048ull, 15439551432538954ull}},
+{{9732296932705387008ull, 77197757162694772ull}},
+{{4866148466352693504ull, 38598878581347386ull}},
+{{2433074233176346624ull, 19299439290673693ull}},
+{{12165371165881733632ull, 96497196453368465ull}},
+{{15306057619795642624ull, 48248598226684232ull}},
+{{7653028809897821184ull, 24124299113342116ull}},
+{{1371655902070003456ull, 120621495566710582ull}},
+{{685827951035001600ull, 60310747783355291ull}},
+{{9566286012372276480ull, 30155373891677645ull}},
+{{14006515043040913920ull, 15077686945838822ull}},
+{{14692342994075915776ull, 75388434729194113ull}},
+{{16569543533892733696ull, 37694217364597056ull}},
+{{8284771766946366720ull, 18847108682298528ull}},
+{{4530370687312731136ull, 94235543411492642ull}},
+{{2265185343656365568ull, 47117771705746321ull}},
+{{10355964708682958592ull, 23558885852873160ull}},
+{{14886335395995689728ull, 117794429264365802ull}},
+{{7443167697997844736ull, 58897214632182901ull}},
+{{12944955885853698048ull, 29448607316091450ull}},
+{{6472477942926849024ull, 14724303658045725ull}},
+{{13915645640924694016ull, 73621518290228626ull}},
+{{6957822820462347008ull, 36810759145114313ull}},
+{{12702283447085949184ull, 18405379572557156ull}},
+{{8171185014301091584ull, 92026897862785783ull}},
+{{13308964544005321472ull, 46013448931392891ull}},
+{{15877854308857436416ull, 23006724465696445ull}},
+{{5602295249448976640ull, 115033622328482229ull}},
+{{12024519661579264000ull, 57516811164241114ull}},
+{{6012259830789632000ull, 28758405582120557ull}},
+{{11614555080238608640ull, 143792027910602786ull}},
+{{5807277540119304192ull, 71896013955301393ull}},
+{{12127010806914427904ull, 35948006977650696ull}},
+{{6063505403457213952ull, 17974003488825348ull}},
+{{11870782943576518400ull, 89870017444126741ull}},
+{{15158763508643034880ull, 44935008722063370ull}},
+{{7579381754321517312ull, 22467504361031685ull}},
+{{1003420624188484096ull, 112337521805158427ull}},
+{{9725082348949017856ull, 56168760902579213ull}},
+{{14085913211329284608ull, 28084380451289606ull}},
+{{15089333835517768960ull, 140421902256448033ull}},
+{{16768038954613660160ull, 70210951128224016ull}},
+{{8384019477306830080ull, 35105475564112008ull}},
+{{4192009738653414912ull, 17552737782056004ull}},
+{{2513304619557523712ull, 87763688910280021ull}},
+{{10480024346633537536ull, 43881844455140010ull}},
+{{5240012173316768768ull, 21940922227570005ull}},
+{{7753316792874292480ull, 109704611137850026ull}},
+{{3876658396437146112ull, 54852305568925013ull}},
+{{11161701235073348864ull, 27426152784462506ull}},
+{{468273954238089984ull, 137130763922312533ull}},
+{{9457509013973820672ull, 68565381961156266ull}},
+{{4728754506986910208ull, 34282690980578133ull}},
+{{11587749290348230912ull, 17141345490289066ull}},
+{{2598514230612500224ull, 85706727451445333ull}},
+{{10522629152161025792ull, 42853363725722666ull}},
+{{5261314576080512768ull, 21426681862861333ull}},
+{{7859828806693012992ull, 107133409314306666ull}},
+{{3929914403346506496ull, 53566704657153333ull}},
+{{11188329238528028928ull, 26783352328576666ull}},
+{{601413971511490560ull, 133916761642883333ull}},
+{{9524079022610521088ull, 66958380821441666ull}},
+{{4762039511305260544ull, 33479190410720833ull}},
+{{11604391792507406080ull, 16739595205360416ull}},
+{{2681726741408375552ull, 83697976026802083ull}},
+{{10564235407558963456ull, 41848988013401041ull}},
+{{14505489740634257408ull, 20924494006700520ull}},
+{{17187216482042633216ull, 104622470033502603ull}},
+{{17816980277876092416ull, 52311235016751301ull}},
+{{18131862175792822016ull, 26155617508375650ull}},
+{{16872334584125903616ull, 130778087541878254ull}},
+{{8436167292062951680ull, 65389043770939127ull}},
+{{13441455682886251520ull, 32694521885469563ull}},
+{{15944099878297901568ull, 16347260942734781ull}},
+{{5933523096651301888ull, 81736304713673909ull}},
+{{12190133585180426752ull, 40868152356836954ull}},
+{{6095066792590213376ull, 20434076178418477ull}},
+{{12028589889241515264ull, 102170380892092386ull}},
+{{6014294944620757504ull, 51085190446046193ull}},
+{{12230519509165154560ull, 25542595223023096ull}},
+{{5812365324697118208ull, 127712976115115483ull}},
+{{12129554699203334912ull, 63856488057557741ull}},
+{{15288149386456443136ull, 31928244028778870ull}},
+{{7644074693228221440ull, 15964122014389435ull}},
+{{1326885318722004736ull, 79820610071947177ull}},
+{{9886814696215778048ull, 39910305035973588ull}},
+{{4943407348107888896ull, 19955152517986794ull}},
+{{6270292666829893888ull, 99775762589933971ull}},
+{{12358518370269722624ull, 49887881294966985ull}},
+{{15402631221989637120ull, 24943940647483492ull}},
+{{3226179815109979648ull, 124719703237417464ull}},
+{{1613089907554989824ull, 62359851618708732ull}},
+{{806544953777494784ull, 31179925809354366ull}},
+{{403272476888747264ull, 15589962904677183ull}},
+{{2016362384443737344ull, 77949814523385915ull}},
+{{10231553229076644352ull, 38974907261692957ull}},
+{{14339148651393097984ull, 19487453630846478ull}},
+{{16355511035836835328ull, 97437268154232393ull}},
+{{17401127554773193472ull, 48718634077116196ull}},
+{{8700563777386596608ull, 24359317038558098ull}},
+{{6609330739513880320ull, 121796585192790492ull}},
+{{3304665369756940032ull, 60898292596395246ull}},
+{{1652332684878469888ull, 30449146298197623ull}},
+{{10049538379294010624ull, 15224573149098811ull}},
+{{13354203749050950912ull, 76122865745494057ull}},
+{{15900473911380251136ull, 38061432872747028ull}},
+{{7950236955690125568ull, 19030716436373514ull}},
+{{2857696631031525120ull, 95153582181867572ull}},
+{{1428848315515762432ull, 47576791090933786ull}},
+{{714424157757881088ull, 23788395545466893ull}},
+{{3572120788789406464ull, 118941977727334465ull}},
+{{11009432431249478912ull, 59470988863667232ull}},
+{{5504716215624739328ull, 29735494431833616ull}},
+{{2752358107812369664ull, 14867747215916808ull}},
+{{13761790539061848832ull, 74338736079584040ull}},
+{{6880895269530924288ull, 37169368039792020ull}},
+{{3440447634765462016ull, 18584684019896010ull}},
+{{17202238173827310848ull, 92923420099480050ull}},
+{{8601119086913655296ull, 46461710049740025ull}},
+{{13523931580311603456ull, 23230855024870012ull}},
+{{12279425680429362944ull, 116154275124350063ull}},
+{{15363084877069457152ull, 58077137562175031ull}},
+{{16904914475389504256ull, 29038568781087515ull}},
+{{17675829274549527808ull, 14519284390543757ull}},
+{{14592170077909433600ull, 72596421952718789ull}},
+{{16519457075809492480ull, 36298210976359394ull}},
+{{8259728537904746240ull, 18149105488179697ull}},
+{{4405154542104628224ull, 90745527440898487ull}},
+{{11425949307907089920ull, 45372763720449243ull}},
+{{14936346690808320768ull, 22686381860224621ull}},
+{{894757159203397632ull, 113431909301123109ull}},
+{{9670750616456474624ull, 56715954650561554ull}},
+{{4835375308228237312ull, 28357977325280777ull}},
+{{5730132467431634944ull, 141789886626403886ull}},
+{{2865066233715817472ull, 70894943313201943ull}},
+{{10655905153712684544ull, 35447471656600971ull}},
+{{14551324613711118080ull, 17723735828300485ull}},
+{{17416390847426935552ull, 88618679141502428ull}},
+{{8708195423713467648ull, 44309339570751214ull}},
+{{4354097711856733696ull, 22154669785375607ull}},
+{{3323744485574117632ull, 110773348926878036ull}},
+{{1661872242787058688ull, 55386674463439018ull}},
+{{830936121393529344ull, 27693337231719509ull}},
+{{4154680606967647232ull, 138466686158597545ull}},
+{{11300712340338599424ull, 69233343079298772ull}}
+};
+
+static const int exponents_bid64[] = { -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ -1,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1,
+ 2,
+ 2,
+ 2,
+ 3,
+ 3,
+ 3,
+ 3,
+ 4,
+ 4,
+ 4,
+ 5,
+ 5,
+ 5,
+ 6,
+ 6,
+ 6,
+ 6,
+ 7,
+ 7,
+ 7,
+ 8,
+ 8,
+ 8,
+ 9,
+ 9,
+ 9,
+ 9,
+ 10,
+ 10,
+ 10,
+ 11,
+ 11,
+ 11,
+ 12,
+ 12,
+ 12,
+ 12,
+ 13,
+ 13,
+ 13,
+ 14,
+ 14,
+ 14,
+ 15,
+ 15,
+ 15,
+ 15,
+ 16,
+ 16,
+ 16,
+ 17,
+ 17,
+ 17,
+ 18,
+ 18,
+ 18,
+ 18,
+ 19,
+ 19,
+ 19,
+ 20,
+ 20,
+ 20,
+ 21,
+ 21,
+ 21,
+ 21,
+ 22,
+ 22,
+ 22,
+ 23,
+ 23,
+ 23,
+ 24,
+ 24,
+ 24,
+ 24,
+ 25,
+ 25,
+ 25,
+ 26,
+ 26,
+ 26,
+ 27,
+ 27,
+ 27,
+ 27,
+ 28,
+ 28,
+ 28,
+ 29,
+ 29,
+ 29,
+ 30,
+ 30,
+ 30,
+ 30,
+ 31,
+ 31,
+ 31,
+ 32,
+ 32,
+ 32,
+ 33,
+ 33,
+ 33,
+ 34,
+ 34,
+ 34,
+ 34,
+ 35,
+ 35,
+ 35,
+ 36,
+ 36,
+ 36,
+ 37,
+ 37,
+ 37,
+ 37,
+ 38,
+ 38,
+ 38,
+ 39,
+ 39,
+ 39,
+ 40,
+ 40,
+ 40,
+ 40,
+ 41,
+ 41,
+ 41,
+ 42,
+ 42,
+ 42,
+ 43,
+ 43,
+ 43,
+ 43,
+ 44,
+ 44,
+ 44,
+ 45,
+ 45,
+ 45,
+ 46,
+ 46,
+ 46,
+ 46,
+ 47,
+ 47,
+ 47,
+ 48,
+ 48,
+ 48,
+ 49,
+ 49,
+ 49,
+ 49,
+ 50,
+ 50,
+ 50,
+ 51,
+ 51,
+ 51,
+ 52,
+ 52,
+ 52,
+ 52,
+ 53,
+ 53,
+ 53,
+ 54,
+ 54,
+ 54,
+ 55,
+ 55,
+ 55,
+ 55,
+ 56,
+ 56,
+ 56,
+ 57,
+ 57,
+ 57,
+ 58,
+ 58,
+ 58,
+ 58,
+ 59,
+ 59,
+ 59,
+ 60,
+ 60,
+ 60,
+ 61,
+ 61,
+ 61,
+ 62,
+ 62,
+ 62,
+ 62,
+ 63,
+ 63,
+ 63,
+ 64,
+ 64,
+ 64,
+ 65,
+ 65,
+ 65,
+ 65,
+ 66,
+ 66,
+ 66,
+ 67,
+ 67,
+ 67,
+ 68,
+ 68,
+ 68,
+ 68,
+ 69,
+ 69,
+ 69,
+ 70,
+ 70,
+ 70,
+ 71,
+ 71,
+ 71,
+ 71,
+ 72,
+ 72,
+ 72,
+ 73,
+ 73,
+ 73,
+ 74,
+ 74,
+ 74,
+ 74,
+ 75,
+ 75,
+ 75,
+ 76,
+ 76,
+ 76,
+ 77,
+ 77,
+ 77,
+ 77,
+ 78,
+ 78,
+ 78,
+ 79,
+ 79,
+ 79,
+ 80,
+ 80,
+ 80,
+ 80,
+ 81,
+ 81,
+ 81,
+ 82,
+ 82,
+ 82,
+ 83,
+ 83,
+ 83,
+ 83,
+ 84,
+ 84,
+ 84,
+ 85,
+ 85,
+ 85,
+ 86,
+ 86,
+ 86,
+ 86,
+ 87,
+ 87,
+ 87,
+ 88,
+ 88,
+ 88,
+ 89,
+ 89,
+ 89,
+ 90,
+ 90,
+ 90,
+ 90,
+ 91,
+ 91,
+ 91,
+ 92,
+ 92,
+ 92,
+ 93,
+ 93,
+ 93,
+ 93,
+ 94,
+ 94,
+ 94,
+ 95,
+ 95,
+ 95,
+ 96,
+ 96,
+ 96,
+ 96,
+ 97,
+ 97,
+ 97,
+ 98,
+ 98,
+ 98,
+ 99,
+ 99,
+ 99,
+ 99,
+ 100,
+ 100,
+ 100,
+ 101,
+ 101,
+ 101,
+ 102,
+ 102,
+ 102,
+ 102,
+ 103,
+ 103,
+ 103,
+ 104,
+ 104,
+ 104,
+ 105,
+ 105,
+ 105,
+ 105,
+ 106,
+ 106,
+ 106,
+ 107,
+ 107,
+ 107,
+ 108,
+ 108,
+ 108,
+ 108,
+ 109,
+ 109,
+ 109,
+ 110,
+ 110,
+ 110,
+ 111,
+ 111,
+ 111,
+ 111,
+ 112,
+ 112,
+ 112,
+ 113,
+ 113,
+ 113,
+ 114,
+ 114,
+ 114,
+ 114,
+ 115,
+ 115,
+ 115,
+ 116,
+ 116,
+ 116,
+ 117,
+ 117,
+ 117,
+ 117,
+ 118,
+ 118,
+ 118,
+ 119,
+ 119,
+ 119,
+ 120,
+ 120,
+ 120,
+ 121,
+ 121,
+ 121,
+ 121,
+ 122,
+ 122,
+ 122,
+ 123,
+ 123,
+ 123,
+ 124,
+ 124,
+ 124,
+ 124,
+ 125,
+ 125,
+ 125,
+ 126,
+ 126,
+ 126,
+ 127,
+ 127,
+ 127,
+ 127,
+ 128,
+ 128,
+ 128,
+ 129,
+ 129,
+ 129,
+ 130,
+ 130,
+ 130,
+ 130,
+ 131,
+ 131,
+ 131,
+ 132,
+ 132,
+ 132,
+ 133,
+ 133,
+ 133,
+ 133,
+ 134,
+ 134,
+ 134,
+ 135,
+ 135,
+ 135,
+ 136,
+ 136,
+ 136,
+ 136,
+ 137,
+ 137,
+ 137,
+ 138,
+ 138,
+ 138,
+ 139,
+ 139,
+ 139,
+ 139,
+ 140,
+ 140,
+ 140,
+ 141,
+ 141,
+ 141,
+ 142,
+ 142,
+ 142,
+ 142,
+ 143,
+ 143,
+ 143,
+ 144,
+ 144,
+ 144,
+ 145,
+ 145,
+ 145,
+ 145,
+ 146,
+ 146,
+ 146,
+ 147,
+ 147,
+ 147,
+ 148,
+ 148,
+ 148,
+ 149,
+ 149,
+ 149,
+ 149,
+ 150,
+ 150,
+ 150,
+ 151,
+ 151,
+ 151,
+ 152,
+ 152,
+ 152,
+ 152,
+ 153,
+ 153,
+ 153,
+ 154,
+ 154,
+ 154,
+ 155,
+ 155,
+ 155,
+ 155,
+ 156,
+ 156,
+ 156,
+ 157,
+ 157,
+ 157,
+ 158,
+ 158,
+ 158,
+ 158,
+ 159,
+ 159,
+ 159,
+ 160,
+ 160,
+ 160,
+ 161,
+ 161,
+ 161,
+ 161,
+ 162,
+ 162,
+ 162,
+ 163,
+ 163,
+ 163,
+ 164,
+ 164,
+ 164,
+ 164,
+ 165,
+ 165,
+ 165,
+ 166,
+ 166,
+ 166,
+ 167,
+ 167,
+ 167,
+ 167,
+ 168,
+ 168,
+ 168,
+ 169,
+ 169,
+ 169,
+ 170,
+ 170,
+ 170,
+ 170,
+ 171,
+ 171,
+ 171,
+ 172,
+ 172,
+ 172,
+ 173,
+ 173,
+ 173,
+ 173,
+ 174,
+ 174,
+ 174,
+ 175,
+ 175,
+ 175,
+ 176,
+ 176,
+ 176,
+ 176,
+ 177,
+ 177,
+ 177,
+ 178,
+ 178,
+ 178,
+ 179,
+ 179,
+ 179,
+ 180,
+ 180,
+ 180,
+ 180,
+ 181,
+ 181,
+ 181,
+ 182,
+ 182,
+ 182,
+ 183,
+ 183,
+ 183,
+ 183,
+ 184,
+ 184,
+ 184,
+ 185,
+ 185,
+ 185,
+ 186,
+ 186,
+ 186,
+ 186,
+ 187,
+ 187,
+ 187,
+ 188,
+ 188,
+ 188,
+ 189,
+ 189,
+ 189,
+ 189,
+ 190,
+ 190,
+ 190,
+ 191,
+ 191,
+ 191,
+ 192,
+ 192,
+ 192,
+ 192,
+ 193,
+ 193,
+ 193,
+ 194,
+ 194,
+ 194,
+ 195,
+ 195,
+ 195,
+ 195,
+ 196,
+ 196,
+ 196,
+ 197,
+ 197,
+ 197,
+ 198,
+ 198,
+ 198,
+ 198,
+ 199,
+ 199,
+ 199,
+ 200,
+ 200,
+ 200,
+ 201,
+ 201,
+ 201,
+ 201,
+ 202,
+ 202,
+ 202,
+ 203,
+ 203,
+ 203,
+ 204,
+ 204,
+ 204,
+ 204,
+ 205,
+ 205,
+ 205,
+ 206,
+ 206,
+ 206,
+ 207,
+ 207,
+ 207,
+ 208,
+ 208,
+ 208,
+ 208,
+ 209,
+ 209,
+ 209,
+ 210,
+ 210,
+ 210,
+ 211,
+ 211,
+ 211,
+ 211,
+ 212,
+ 212,
+ 212,
+ 213,
+ 213,
+ 213,
+ 214,
+ 214,
+ 214,
+ 214,
+ 215,
+ 215,
+ 215,
+ 216,
+ 216,
+ 216,
+ 217,
+ 217,
+ 217,
+ 217,
+ 218,
+ 218,
+ 218,
+ 219,
+ 219,
+ 219,
+ 220,
+ 220,
+ 220,
+ 220,
+ 221,
+ 221,
+ 221,
+ 222,
+ 222,
+ 222,
+ 223,
+ 223,
+ 223,
+ 223,
+ 224,
+ 224,
+ 224,
+ 225,
+ 225,
+ 225,
+ 226,
+ 226,
+ 226,
+ 226,
+ 227,
+ 227,
+ 227,
+ 228,
+ 228,
+ 228,
+ 229,
+ 229,
+ 229,
+ 229,
+ 230,
+ 230,
+ 230,
+ 231,
+ 231,
+ 231,
+ 232,
+ 232,
+ 232,
+ 232,
+ 233,
+ 233,
+ 233,
+ 234,
+ 234,
+ 234,
+ 235,
+ 235,
+ 235,
+ 236,
+ 236,
+ 236,
+ 236,
+ 237,
+ 237,
+ 237,
+ 238,
+ 238,
+ 238,
+ 239,
+ 239,
+ 239,
+ 239,
+ 240,
+ 240,
+ 240,
+ 241,
+ 241,
+ 241,
+ 242,
+ 242,
+ 242,
+ 242,
+ 243,
+ 243,
+ 243,
+ 244,
+ 244,
+ 244,
+ 245,
+ 245,
+ 245,
+ 245,
+ 246,
+ 246,
+ 246,
+ 247,
+ 247,
+ 247,
+ 248,
+ 248,
+ 248,
+ 248,
+ 249,
+ 249,
+ 249,
+ 250,
+ 250,
+ 250,
+ 251,
+ 251,
+ 251,
+ 251,
+ 252,
+ 252,
+ 252,
+ 253,
+ 253,
+ 253,
+ 254,
+ 254,
+ 254,
+ 254,
+ 255,
+ 255,
+ 255,
+ 256,
+ 256,
+ 256,
+ 257,
+ 257,
+ 257,
+ 257,
+ 258,
+ 258,
+ 258,
+ 259,
+ 259,
+ 259,
+ 260,
+ 260,
+ 260,
+ 260,
+ 261,
+ 261,
+ 261,
+ 262,
+ 262,
+ 262,
+ 263,
+ 263,
+ 263,
+ 263,
+ 264,
+ 264,
+ 264,
+ 265,
+ 265,
+ 265,
+ 266,
+ 266,
+ 266,
+ 267,
+ 267,
+ 267,
+ 267,
+ 268,
+ 268,
+ 268,
+ 269,
+ 269,
+ 269,
+ 270,
+ 270,
+ 270,
+ 270,
+ 271,
+ 271,
+ 271,
+ 272,
+ 272,
+ 272,
+ 273,
+ 273,
+ 273,
+ 273,
+ 274,
+ 274,
+ 274,
+ 275,
+ 275,
+ 275,
+ 276,
+ 276,
+ 276,
+ 276,
+ 277,
+ 277,
+ 277,
+ 278,
+ 278,
+ 278,
+ 279,
+ 279,
+ 279,
+ 279,
+ 280,
+ 280,
+ 280,
+ 281,
+ 281,
+ 281,
+ 282,
+ 282,
+ 282,
+ 282,
+ 283,
+ 283,
+ 283,
+ 284,
+ 284,
+ 284,
+ 285,
+ 285,
+ 285,
+ 285,
+ 286,
+ 286,
+ 286,
+ 287,
+ 287,
+ 287,
+ 288,
+ 288,
+ 288,
+ 288,
+ 289,
+ 289,
+ 289,
+ 290,
+ 290,
+ 290,
+ 291,
+ 291,
+ 291,
+ 291,
+ 292,
+ 292,
+ 292,
+ 293,
+ 293,
+ 293,
+ 294,
+ 294,
+ 294,
+ 295,
+ 295,
+ 295,
+ 295,
+ 296,
+ 296,
+ 296,
+ 297,
+ 297,
+ 297,
+ 298,
+ 298,
+ 298,
+ 298,
+ 299,
+ 299,
+ 299,
+ 300,
+ 300,
+ 300,
+ 301,
+ 301,
+ 301,
+ 301,
+ 302,
+ 302,
+ 302,
+ 303,
+ 303,
+ 303,
+ 304,
+ 304,
+ 304,
+ 304,
+ 305,
+ 305,
+ 305,
+ 306,
+ 306,
+ 306,
+ 307,
+ 307,
+ 307,
+ 307,
+ 308,
+ 308,
+ 308,
+ 309,
+ 309,
+ 309,
+ 310,
+ 310,
+ 310,
+ 310,
+ 311,
+ 311,
+ 311,
+ 312,
+ 312,
+ 312,
+ 313,
+ 313,
+ 313,
+ 313,
+ 314,
+ 314,
+ 314,
+ 315,
+ 315,
+ 315,
+ 316,
+ 316,
+ 316,
+ 316,
+ 317,
+ 317,
+ 317,
+ 318,
+ 318,
+ 318,
+ 319,
+ 319,
+ 319,
+ 319,
+ 320,
+ 320,
+ 320,
+ 321,
+ 321,
+ 321,
+ 322,
+ 322,
+ 322,
+ 322,
+ 323,
+ 323,
+ 323,
+ 324,
+ 324,
+ 324,
+ 325,
+ 325,
+ 325,
+ 326,
+ 326,
+ 326,
+ 326,
+ 327,
+ 327,
+ 327,
+ 328,
+ 328,
+ 328,
+ 329,
+ 329,
+ 329,
+ 329,
+ 330,
+ 330,
+ 330,
+ 331,
+ 331,
+ 331,
+ 332,
+ 332,
+ 332,
+ 332,
+ 333,
+ 333,
+ 333,
+ 334,
+ 334,
+ 334,
+ 335,
+ 335,
+ 335,
+ 335,
+ 336,
+ 336,
+ 336,
+ 337,
+ 337,
+ 337,
+ 338,
+ 338,
+ 338,
+ 338,
+ 339,
+ 339,
+ 339,
+ 340,
+ 340,
+ 340,
+ 341,
+ 341,
+ 341,
+ 341,
+ 342,
+ 342,
+ 342,
+ 343,
+ 343,
+ 343,
+ 344,
+ 344,
+ 344,
+ 344,
+ 345,
+ 345,
+ 345,
+ 346,
+ 346,
+ 346,
+ 347,
+ 347,
+ 347,
+ 347,
+ 348,
+ 348,
+ 348,
+ 349,
+ 349,
+ 349,
+ 350,
+ 350,
+ 350,
+ 350,
+ 351,
+ 351,
+ 351,
+ 352,
+ 352,
+ 352,
+ 353,
+ 353,
+ 353,
+ 354,
+ 354,
+ 354,
+ 354,
+ 355,
+ 355,
+ 355,
+ 356,
+ 356,
+ 356,
+ 357,
+ 357,
+ 357,
+ 357,
+ 358,
+ 358,
+ 358,
+ 359,
+ 359,
+ 359,
+ 360,
+ 360,
+ 360,
+ 360,
+ 361,
+ 361,
+ 361,
+ 362,
+ 362,
+ 362,
+ 363,
+ 363,
+ 363,
+ 363,
+ 364,
+ 364,
+ 364,
+ 365,
+ 365,
+ 365,
+ 366,
+ 366,
+ 366,
+ 366,
+ 367,
+ 367,
+ 367,
+ 368,
+ 368,
+ 368,
+ 369,
+ 369,
+ 369,
+ 369,
+ 370,
+ 370,
+ 370,
+ 371,
+ 371,
+ 371,
+ 372,
+ 372,
+ 372,
+ 372,
+ 373,
+ 373,
+ 373,
+ 374,
+ 374,
+ 374,
+ 375,
+ 375,
+ 375,
+ 375,
+ 376,
+ 376,
+ 376,
+ 377,
+ 377,
+ 377,
+ 378,
+ 378,
+ 378,
+ 378,
+ 379,
+ 379,
+ 379,
+ 380,
+ 380,
+ 380,
+ 381,
+ 381,
+ 381,
+ 381,
+ 382,
+ 382,
+ 382,
+ 383,
+ 383,
+ 383,
+ 384,
+ 384,
+ 384,
+ 385,
+ 385,
+ 385,
+ 385,
+ 386,
+ 386,
+ 386,
+ 387,
+ 387,
+ 387,
+ 388,
+ 388,
+ 388,
+ 388,
+ 389,
+ 389,
+ 389,
+ 390,
+ 390,
+ 390,
+ 391,
+ 391,
+ 391,
+ 391,
+ 392,
+ 392,
+ 392,
+ 393,
+ 393,
+ 393,
+ 394,
+ 394,
+ 394,
+ 394,
+ 395,
+ 395,
+ 395,
+ 396,
+ 396,
+ 396,
+ 397,
+ 397,
+ 397,
+ 397,
+ 398,
+ 398,
+ 398,
+ 399,
+ 399,
+ 399,
+ 400,
+ 400,
+ 400,
+ 400,
+ 401,
+ 401,
+ 401,
+ 402,
+ 402,
+ 402,
+ 403,
+ 403,
+ 403,
+ 403,
+ 404,
+ 404,
+ 404,
+ 405,
+ 405,
+ 405,
+ 406,
+ 406,
+ 406,
+ 406,
+ 407,
+ 407,
+ 407,
+ 408,
+ 408,
+ 408,
+ 409,
+ 409,
+ 409,
+ 409,
+ 410,
+ 410,
+ 410,
+ 411,
+ 411,
+ 411,
+ 412,
+ 412,
+ 412,
+ 413,
+ 413,
+ 413,
+ 413,
+ 414,
+ 414,
+ 414,
+ 415,
+ 415,
+ 415,
+ 416,
+ 416,
+ 416,
+ 416,
+ 417,
+ 417,
+ 417,
+ 418,
+ 418,
+ 418,
+ 419,
+ 419,
+ 419,
+ 419,
+ 420,
+ 420,
+ 420,
+ 421,
+ 421,
+ 421,
+ 422,
+ 422,
+ 422,
+ 422,
+ 423,
+ 423,
+ 423,
+ 424,
+ 424,
+ 424,
+ 425,
+ 425,
+ 425,
+ 425,
+ 426,
+ 426,
+ 426,
+ 427,
+ 427,
+ 427,
+ 428,
+ 428,
+ 428,
+ 428,
+ 429,
+ 429,
+ 429,
+ 430,
+ 430,
+ 430,
+ 431,
+ 431,
+ 431,
+ 431,
+ 432,
+ 432,
+ 432,
+ 433,
+ 433,
+ 433,
+ 434,
+ 434,
+ 434,
+ 434,
+ 435,
+ 435,
+ 435,
+ 436,
+ 436,
+ 436,
+ 437,
+ 437,
+ 437,
+ 437,
+ 438,
+ 438,
+ 438,
+ 439,
+ 439,
+ 439,
+ 440,
+ 440,
+ 440,
+ 441,
+ 441,
+ 441,
+ 441,
+ 442,
+ 442,
+ 442,
+ 443,
+ 443,
+ 443,
+ 444,
+ 444,
+ 444,
+ 444,
+ 445,
+ 445,
+ 445,
+ 446,
+ 446,
+ 446,
+ 447,
+ 447,
+ 447,
+ 447,
+ 448,
+ 448,
+ 448,
+ 449,
+ 449,
+ 449,
+ 450,
+ 450,
+ 450,
+ 450,
+ 451,
+ 451,
+ 451,
+ 452,
+ 452,
+ 452,
+ 453,
+ 453,
+ 453,
+ 453,
+ 454,
+ 454,
+ 454,
+ 455,
+ 455,
+ 455,
+ 456,
+ 456,
+ 456,
+ 456,
+ 457,
+ 457,
+ 457,
+ 458,
+ 458,
+ 458,
+ 459,
+ 459,
+ 459,
+ 459,
+ 460,
+ 460,
+ 460,
+ 461,
+ 461,
+ 461,
+ 462,
+ 462,
+ 462,
+ 462,
+ 463,
+ 463,
+ 463,
+ 464,
+ 464,
+ 464,
+ 465,
+ 465,
+ 465,
+ 465,
+ 466,
+ 466,
+ 466,
+ 467,
+ 467,
+ 467,
+ 468,
+ 468,
+ 468,
+ 468,
+ 469,
+ 469,
+ 469,
+ 470,
+ 470,
+ 470,
+ 471,
+ 471,
+ 471,
+ 472,
+ 472,
+ 472,
+ 472,
+ 473,
+ 473,
+ 473,
+ 474,
+ 474,
+ 474,
+ 475,
+ 475,
+ 475,
+ 475,
+ 476,
+ 476,
+ 476,
+ 477,
+ 477,
+ 477,
+ 478,
+ 478,
+ 478,
+ 478,
+ 479,
+ 479,
+ 479,
+ 480,
+ 480,
+ 480,
+ 481,
+ 481,
+ 481,
+ 481,
+ 482,
+ 482,
+ 482,
+ 483,
+ 483,
+ 483,
+ 484,
+ 484,
+ 484,
+ 484,
+ 485,
+ 485,
+ 485,
+ 486,
+ 486,
+ 486,
+ 487,
+ 487,
+ 487,
+ 487,
+ 488,
+ 488,
+ 488,
+ 489,
+ 489,
+ 489,
+ 490,
+ 490,
+ 490,
+ 490,
+ 491,
+ 491,
+ 491,
+ 492,
+ 492,
+ 492,
+ 493,
+ 493,
+ 493,
+ 493,
+ 494,
+ 494,
+ 494,
+ 495,
+ 495,
+ 495,
+ 496,
+ 496,
+ 496,
+ 496,
+ 497,
+ 497,
+ 497,
+ 498,
+ 498,
+ 498,
+ 499,
+ 499,
+ 499,
+ 500,
+ 500,
+ 500,
+ 500,
+ 501,
+ 501,
+ 501,
+ 502,
+ 502,
+ 502,
+ 503,
+ 503,
+ 503,
+ 503,
+ 504,
+ 504,
+ 504,
+ 505,
+ 505,
+ 505,
+ 506,
+ 506,
+ 506,
+ 506,
+ 507,
+ 507,
+ 507,
+ 508,
+ 508,
+ 508,
+ 509,
+ 509,
+ 509,
+ 509,
+ 510,
+ 510,
+ 510,
+ 511,
+ 511,
+ 511,
+ 512,
+ 512,
+ 512,
+ 512,
+ 513,
+ 513,
+ 513,
+ 514,
+ 514,
+ 514,
+ 515,
+ 515,
+ 515,
+ 515,
+ 516,
+ 516,
+ 516,
+ 517,
+ 517,
+ 517,
+ 518,
+ 518,
+ 518,
+ 518,
+ 519,
+ 519,
+ 519,
+ 520,
+ 520,
+ 520,
+ 521,
+ 521,
+ 521,
+ 521,
+ 522,
+ 522,
+ 522,
+ 523,
+ 523,
+ 523,
+ 524,
+ 524,
+ 524,
+ 524,
+ 525,
+ 525,
+ 525,
+ 526,
+ 526,
+ 526,
+ 527,
+ 527,
+ 527,
+ 527,
+ 528,
+ 528,
+ 528,
+ 529,
+ 529,
+ 529,
+ 530,
+ 530,
+ 530,
+ 531,
+ 531,
+ 531,
+ 531,
+ 532,
+ 532,
+ 532,
+ 533,
+ 533,
+ 533,
+ 534,
+ 534,
+ 534,
+ 534,
+ 535,
+ 535,
+ 535,
+ 536,
+ 536,
+ 536,
+ 537,
+ 537,
+ 537,
+ 537,
+ 538,
+ 538,
+ 538,
+ 539,
+ 539,
+ 539,
+ 540,
+ 540,
+ 540,
+ 540,
+ 541,
+ 541,
+ 541,
+ 542,
+ 542,
+ 542,
+ 543,
+ 543,
+ 543,
+ 543,
+ 544,
+ 544,
+ 544,
+ 545,
+ 545,
+ 545,
+ 546,
+ 546,
+ 546,
+ 546,
+ 547,
+ 547,
+ 547,
+ 548,
+ 548,
+ 548,
+ 549,
+ 549,
+ 549,
+ 549,
+ 550,
+ 550,
+ 550,
+ 551,
+ 551,
+ 551,
+ 552,
+ 552,
+ 552,
+ 552,
+ 553,
+ 553,
+ 553,
+ 554,
+ 554,
+ 554,
+ 555,
+ 555,
+ 555,
+ 555,
+ 556,
+ 556,
+ 556,
+ 557,
+ 557,
+ 557,
+ 558,
+ 558,
+ 558,
+ 559,
+ 559,
+ 559,
+ 559,
+ 560,
+ 560,
+ 560,
+ 561,
+ 561,
+ 561,
+ 562,
+ 562,
+ 562,
+ 562,
+ 563,
+ 563,
+ 563,
+ 564,
+ 564,
+ 564,
+ 565,
+ 565,
+ 565,
+ 565,
+ 566,
+ 566,
+ 566,
+ 567,
+ 567,
+ 567,
+ 568,
+ 568,
+ 568,
+ 568,
+ 569,
+ 569,
+ 569,
+ 570,
+ 570,
+ 570,
+ 571,
+ 571,
+ 571,
+ 571,
+ 572,
+ 572,
+ 572,
+ 573,
+ 573,
+ 573,
+ 574,
+ 574,
+ 574,
+ 574,
+ 575,
+ 575,
+ 575,
+ 576,
+ 576,
+ 576,
+ 577,
+ 577,
+ 577,
+ 577,
+ 578,
+ 578,
+ 578,
+ 579,
+ 579,
+ 579,
+ 580,
+ 580,
+ 580,
+ 580,
+ 581,
+ 581,
+ 581,
+ 582,
+ 582,
+ 582,
+ 583,
+ 583,
+ 583,
+ 583,
+ 584,
+ 584,
+ 584,
+ 585,
+ 585,
+ 585,
+ 586,
+ 586,
+ 586,
+ 587,
+ 587,
+ 587,
+ 587,
+ 588,
+ 588,
+ 588,
+ 589,
+ 589,
+ 589,
+ 590,
+ 590,
+ 590,
+ 590,
+ 591,
+ 591,
+ 591,
+ 592,
+ 592,
+ 592,
+ 593,
+ 593,
+ 593,
+ 593,
+ 594,
+ 594,
+ 594,
+ 595,
+ 595,
+ 595,
+ 596,
+ 596,
+ 596,
+ 596,
+ 597,
+ 597,
+ 597,
+ 598,
+ 598,
+ 598,
+ 599,
+ 599,
+ 599,
+ 599,
+ 600,
+ 600,
+ 600,
+ 601,
+ 601,
+ 601,
+ 602,
+ 602,
+ 602,
+ 602,
+ 603,
+ 603,
+ 603,
+ 604,
+ 604,
+ 604,
+ 605,
+ 605,
+ 605,
+ 605,
+ 606,
+ 606,
+ 606,
+ 607,
+ 607,
+ 607,
+ 608,
+ 608,
+ 608,
+ 608,
+ 609,
+ 609,
+ 609,
+ 610,
+ 610,
+ 610,
+ 611,
+ 611,
+ 611,
+ 611,
+ 612,
+ 612,
+ 612,
+ 613,
+ 613,
+ 613,
+ 614,
+ 614,
+ 614,
+ 614,
+ 615,
+ 615,
+ 615,
+ 616,
+ 616,
+ 616,
+ 617,
+ 617,
+ 617,
+ 618,
+ 618,
+ 618,
+ 618,
+ 619,
+ 619,
+ 619,
+ 620,
+ 620,
+ 620,
+ 621,
+ 621,
+ 621,
+ 621,
+ 622,
+ 622,
+ 622,
+ 623,
+ 623,
+ 623,
+ 624,
+ 624,
+ 624,
+ 624,
+ 625,
+ 625,
+ 625,
+ 626,
+ 626,
+ 626,
+ 627,
+ 627,
+ 627,
+ 627,
+ 628,
+ 628,
+ 628,
+ 629,
+ 629,
+ 629,
+ 630,
+ 630,
+ 630,
+ 630,
+ 631,
+ 631,
+ 631,
+ 632,
+ 632,
+ 632,
+ 633,
+ 633,
+ 633,
+ 633,
+ 634,
+ 634,
+ 634,
+ 635,
+ 635,
+ 635,
+ 636,
+ 636,
+ 636,
+ 636,
+ 637,
+ 637,
+ 637,
+ 638,
+ 638,
+ 638,
+ 639,
+ 639,
+ 639,
+ 639,
+ 640,
+ 640,
+ 640,
+ 641,
+ 641,
+ 641,
+ 642,
+ 642,
+ 642,
+ 642,
+ 643,
+ 643,
+ 643,
+ 644,
+ 644,
+ 644,
+ 645,
+ 645,
+ 645,
+ 646,
+ 646,
+ 646,
+ 646,
+ 647,
+ 647,
+ 647,
+ 648,
+ 648,
+ 648,
+ 649,
+ 649,
+ 649,
+ 649,
+ 650,
+ 650,
+ 650,
+ 651,
+ 651,
+ 651,
+ 652,
+ 652,
+ 652,
+ 652,
+ 653,
+ 653,
+ 653,
+ 654,
+ 654,
+ 654,
+ 655,
+ 655,
+ 655,
+ 655,
+ 656,
+ 656,
+ 656,
+ 657,
+ 657,
+ 657,
+ 658,
+ 658,
+ 658,
+ 658,
+ 659,
+ 659,
+ 659,
+ 660,
+ 660,
+ 660,
+ 661,
+ 661,
+ 661,
+ 661,
+ 662,
+ 662,
+ 662,
+ 663,
+ 663,
+ 663,
+ 664,
+ 664,
+ 664,
+ 664,
+ 665,
+ 665,
+ 665,
+ 666,
+ 666,
+ 666,
+ 667,
+ 667,
+ 667,
+ 667,
+ 668,
+ 668,
+ 668,
+ 669,
+ 669,
+ 669,
+ 670,
+ 670,
+ 670,
+ 670,
+ 671,
+ 671,
+ 671,
+ 672,
+ 672,
+ 672,
+ 673,
+ 673,
+ 673,
+ 673,
+ 674,
+ 674,
+ 674,
+ 675,
+ 675,
+ 675,
+ 676,
+ 676,
+ 676,
+ 677,
+ 677,
+ 677,
+ 677,
+ 678,
+ 678,
+ 678,
+ 679,
+ 679,
+ 679,
+ 680,
+ 680,
+ 680,
+ 680,
+ 681,
+ 681,
+ 681,
+ 682,
+ 682,
+ 682,
+ 683,
+ 683,
+ 683,
+ 683,
+ 684,
+ 684,
+ 684,
+ 685,
+ 685,
+ 685,
+ 686,
+ 686,
+ 686,
+ 686,
+ 687,
+ 687,
+ 687,
+ 688,
+ 688,
+ 688,
+ 689,
+ 689,
+ 689,
+ 689,
+ 690,
+ 690,
+ 690,
+ 691,
+ 691,
+ 691,
+ 692,
+ 692,
+ 692,
+ 692,
+ 693,
+ 693,
+ 693,
+ 694,
+ 694,
+ 694,
+ 695,
+ 695,
+ 695,
+ 695,
+ 696,
+ 696,
+ 696,
+ 697,
+ 697,
+ 697,
+ 698,
+ 698,
+ 698,
+ 698,
+ 699,
+ 699,
+ 699,
+ 700,
+ 700,
+ 700,
+ 701,
+ 701,
+ 701,
+ 701,
+ 702,
+ 702,
+ 702,
+ 703,
+ 703,
+ 703,
+ 704,
+ 704,
+ 704,
+ 705,
+ 705,
+ 705,
+ 705,
+ 706,
+ 706,
+ 706,
+ 707,
+ 707,
+ 707,
+ 708,
+ 708,
+ 708,
+ 708,
+ 709,
+ 709,
+ 709,
+ 710,
+ 710,
+ 710,
+ 711,
+ 711,
+ 711,
+ 711,
+ 712,
+ 712,
+ 712,
+ 713,
+ 713,
+ 713,
+ 714,
+ 714,
+ 714,
+ 714,
+ 715,
+ 715,
+ 715,
+ 716,
+ 716,
+ 716,
+ 717,
+ 717,
+ 717,
+ 717,
+ 718,
+ 718,
+ 718,
+ 719,
+ 719,
+ 719,
+ 720,
+ 720,
+ 720,
+ 720,
+ 721,
+ 721,
+ 721,
+ 722,
+ 722,
+ 722,
+ 723,
+ 723,
+ 723,
+ 723,
+ 724,
+ 724,
+ 724,
+ 725,
+ 725,
+ 725,
+ 726,
+ 726,
+ 726,
+ 726,
+ 727,
+ 727,
+ 727,
+ 728,
+ 728,
+ 728,
+ 729,
+ 729,
+ 729,
+ 729,
+ 730,
+ 730,
+ 730,
+ 731,
+ 731,
+ 731,
+ 732,
+ 732,
+ 732,
+ 733,
+ 733,
+ 733,
+ 733,
+ 734,
+ 734,
+ 734,
+ 735,
+ 735,
+ 735,
+ 736,
+ 736,
+ 736,
+ 736,
+ 737,
+ 737,
+ 737,
+ 738,
+ 738,
+ 738,
+ 739,
+ 739,
+ 739,
+ 739,
+ 740,
+ 740,
+ 740,
+ 741,
+ 741,
+ 741,
+ 742,
+ 742,
+ 742,
+ 742,
+ 743,
+ 743,
+ 743,
+ 744,
+ 744,
+ 744,
+ 745,
+ 745,
+ 745,
+ 745,
+ 746,
+ 746,
+ 746,
+ 747,
+ 747,
+ 747,
+ 748,
+ 748,
+ 748,
+ 748,
+ 749,
+ 749,
+ 749,
+ 750,
+ 750,
+ 750,
+ 751,
+ 751,
+ 751,
+ 751,
+ 752,
+ 752,
+ 752,
+ 753,
+ 753,
+ 753,
+ 754,
+ 754,
+ 754,
+ 754,
+ 755,
+ 755,
+ 755,
+ 756,
+ 756,
+ 756,
+ 757,
+ 757,
+ 757,
+ 757,
+ 758,
+ 758,
+ 758,
+ 759,
+ 759,
+ 759,
+ 760,
+ 760,
+ 760,
+ 760,
+ 761,
+ 761,
+ 761,
+ 762,
+ 762,
+ 762,
+ 763,
+ 763,
+ 763,
+ 764,
+ 764,
+ 764,
+ 764,
+ 765,
+ 765,
+ 765,
+ 766,
+ 766,
+ 766,
+ 767,
+ 767,
+};
+
+static const UINT256 multipliers1_bid64[] = { {{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{0ull, 0ull, 0ull, 0ull}},
+{{11950291386221365447ull, 9908758460416160234ull,
+ 6069031768864303422ull, 2518694348665986494ull}},
+{{5453838698733179278ull, 1370772847122768853ull,
+ 12138063537728606845ull, 5037388697331972988ull}},
+{{10907677397466358555ull, 2741545694245537706ull,
+ 5829383001747662074ull, 10074777394663945977ull}},
+{{9560233108977092358ull, 4237657953591017864ull,
+ 8544574229833353061ull, 2014955478932789195ull}},
+{{673722144244633099ull, 8475315907182035729ull,
+ 17089148459666706122ull, 4029910957865578390ull}},
+{{1347444288489266198ull, 16950631814364071458ull,
+ 15731552845623860628ull, 8059821915731156781ull}},
+{{7648186487181673886ull, 18147521621840455584ull,
+ 6835659383866682448ull, 1611964383146231356ull}},
+{{15296372974363347772ull, 17848299169971359552ull,
+ 13671318767733364897ull, 3223928766292462712ull}},
+{{12146001875017143928ull, 17249854266233167489ull,
+ 8895893461757178179ull, 6447857532584925425ull}},
+{{13497246819229159756ull, 18207366112214274790ull,
+ 1779178692351435635ull, 1289571506516985085ull}},
+{{8547749564748767895ull, 17967988150718997965ull,
+ 3558357384702871271ull, 2579143013033970170ull}},
+{{17095499129497535789ull, 17489232227728444314ull,
+ 7116714769405742543ull, 5158286026067940340ull}},
+{{15744254185285519961ull, 16531720381747337013ull,
+ 14233429538811485087ull, 10316572052135880680ull}},
+{{3148850837057103993ull, 10685041705833288049ull,
+ 2846685907762297017ull, 2063314410427176136ull}},
+{{6297701674114207985ull, 2923339337957024482ull,
+ 5693371815524594035ull, 4126628820854352272ull}},
+{{12595403348228415969ull, 5846678675914048964ull,
+ 11386743631049188070ull, 8253257641708704544ull}},
+{{13587127113871414164ull, 15926730994150451085ull,
+ 17034743985177478906ull, 1650651528341740908ull}},
+{{8727510154033276711ull, 13406717914591350555ull,
+ 15622743896645406197ull, 3301303056683481817ull}},
+{{17455020308066553422ull, 8366691755473149494ull,
+ 12798743719581260779ull, 6602606113366963635ull}},
+{{14559050505839041654ull, 16430733610062271191ull,
+ 2559748743916252155ull, 1320521222673392727ull}},
+{{10671356937968531692ull, 14414723146414990767ull,
+ 5119497487832504311ull, 2641042445346785454ull}},
+{{2895969802227511768ull, 10382702219120429919ull,
+ 10238994975665008623ull, 5282084890693570908ull}},
+{{5791939604455023535ull, 2318660364531308222ull,
+ 2031245877620465631ull, 10564169781387141817ull}},
+{{1158387920891004707ull, 11531778517131992614ull,
+ 7784946805007913772ull, 2112833956277428363ull}},
+{{2316775841782009414ull, 4616812960554433612ull,
+ 15569893610015827545ull, 4225667912554856726ull}},
+{{4633551683564018828ull, 9233625921108867224ull,
+ 12693043146322103474ull, 8451335825109713453ull}},
+{{4616059151454714089ull, 9225422813705594091ull,
+ 13606655073490151664ull, 1690267165021942690ull}},
+{{9232118302909428178ull, 4101553701636566ull, 8766566073270751713ull,
+ 3380534330043885381ull}},
+{{17492532109304740ull, 8203107403273133ull, 17533132146541503426ull,
+ 6761068660087770762ull}},
+{{3692847321163771272ull, 11069687065706385596ull,
+ 10885324058792121331ull, 1352213732017554152ull}},
+{{7385694642327542543ull, 3692630057703219576ull,
+ 3323904043874691047ull, 2704427464035108305ull}},
+{{14771389284655085085ull, 7385260115406439152ull,
+ 6647808087749382094ull, 5408854928070216610ull}},
+{{11096034495600618553ull, 14770520230812878305ull,
+ 13295616175498764188ull, 10817709856140433220ull}},
+{{13287253343345854681ull, 14022150490388306630ull,
+ 2659123235099752837ull, 2163541971228086644ull}},
+{{8127762612982157745ull, 9597556907067061645ull,
+ 5318246470199505675ull, 4327083942456173288ull}},
+{{16255525225964315489ull, 748369740424571674ull,
+ 10636492940399011351ull, 8654167884912346576ull}},
+{{6940453859934773421ull, 7528371577568734981ull,
+ 5816647402821712593ull, 1730833576982469315ull}},
+{{13880907719869546842ull, 15056743155137469962ull,
+ 11633294805643425186ull, 3461667153964938630ull}},
+{{9315071366029542068ull, 11666742236565388309ull,
+ 4819845537577298757ull, 6923334307929877261ull}},
+{{9241711902689729060ull, 13401394891538808631ull,
+ 4653317922257370074ull, 1384666861585975452ull}},
+{{36679731669906504ull, 8356045709368065647ull, 9306635844514740149ull,
+ 2769333723171950904ull}},
+{{73359463339813008ull, 16712091418736131294ull, 166527615319928682ull,
+ 5538667446343901809ull}},
+{{146718926679626015ull, 14977438763762710972ull, 333055230639857365ull,
+ 11077334892687803618ull}},
+{{29343785335925203ull, 14063534196978273164ull,
+ 11134657490353702442ull, 2215466978537560723ull}},
+{{58687570671850406ull, 9680324320246994712ull, 3822570906997853269ull,
+ 4430933957075121447ull}},
+{{117375141343700812ull, 913904566784437808ull, 7645141813995706539ull,
+ 8861867914150242894ull}},
+{{3712823843010650486ull, 11250827357582618531ull,
+ 16286423621766782600ull, 1772373582830048578ull}},
+{{7425647686021300972ull, 4054910641455685446ull,
+ 14126103169824013585ull, 3544747165660097157ull}},
+{{14851295372042601943ull, 8109821282911370892ull,
+ 9805462265938475554ull, 7089494331320194315ull}},
+{{6659607889150430712ull, 16379359515549915471ull,
+ 1961092453187695110ull, 1417898866264038863ull}},
+{{13319215778300861424ull, 14311974957390279326ull,
+ 3922184906375390221ull, 2835797732528077726ull}},
+{{8191687482892171231ull, 10177205841071007037ull,
+ 7844369812750780443ull, 5671595465056155452ull}},
+{{16383374965784342462ull, 1907667608432462458ull,
+ 15688739625501560887ull, 11343190930112310904ull}},
+{{18034070252124509786ull, 4070882336428402814ull,
+ 17895143184067953470ull, 2268638186022462180ull}},
+{{17621396430539467955ull, 8141764672856805629ull,
+ 17343542294426355324ull, 4537276372044924361ull}},
+{{16796048787369384293ull, 16283529345713611259ull,
+ 16240340515143159032ull, 9074552744089848723ull}},
+{{18116605016441518152ull, 3256705869142722251ull,
+ 14316114547254362776ull, 1814910548817969744ull}},
+{{17786465959173484687ull, 6513411738285444503ull,
+ 10185485020799173936ull, 3629821097635939489ull}},
+{{17126187844637417758ull, 13026823476570889007ull,
+ 1924225967888796256ull, 7259642195271878979ull}},
+{{10803935198411304198ull, 2605364695314177801ull,
+ 15142240452545400544ull, 1451928439054375795ull}},
+{{3161126323113056780ull, 5210729390628355603ull,
+ 11837736831381249472ull, 2903856878108751591ull}},
+{{6322252646226113560ull, 10421458781256711206ull,
+ 5228729589052947328ull, 5807713756217503183ull}},
+{{12644505292452227119ull, 2396173488803870796ull,
+ 10457459178105894657ull, 11615427512435006366ull}},
+{{17286296317458086717ull, 11547281141986505128ull,
+ 5780840650363089254ull, 2323085502487001273ull}},
+{{16125848561206621817ull, 4647818210263458641ull,
+ 11561681300726178509ull, 4646171004974002546ull}},
+{{13804953048703692018ull, 9295636420526917283ull,
+ 4676618527742805402ull, 9292342009948005093ull}},
+{{13829037053966469374ull, 1859127284105383456ull,
+ 12003370149774292050ull, 1858468401989601018ull}},
+{{9211330034223387131ull, 3718254568210766913ull,
+ 5559996225839032484ull, 3716936803979202037ull}},
+{{18422660068446774261ull, 7436509136421533826ull,
+ 11119992451678064968ull, 7433873607958404074ull}},
+{{14752578457915085822ull, 8865999456768127411ull,
+ 16981393749303254286ull, 1486774721591680814ull}},
+{{11058412842120620028ull, 17731998913536254823ull,
+ 15516043424896956956ull, 2973549443183361629ull}},
+{{3670081610531688440ull, 17017253753362958031ull,
+ 12585342776084362297ull, 5947098886366723259ull}},
+{{7340163221063376879ull, 15587763433016364446ull,
+ 6723941478459172979ull, 11894197772733446519ull}},
+{{16225427903180316669ull, 14185599130829003858ull,
+ 16102183554659475888ull, 2378839554546689303ull}},
+{{14004111732651081721ull, 9924454187948456101ull,
+ 13757623035609400161ull, 4757679109093378607ull}},
+{{9561479391592611826ull, 1402164302187360587ull,
+ 9068501997509248707ull, 9515358218186757215ull}},
+{{16669691137286163658ull, 7659130489921292763ull,
+ 1813700399501849741ull, 1903071643637351443ull}},
+{{14892638200862775700ull, 15318260979842585527ull,
+ 3627400799003699482ull, 3806143287274702886ull}},
+{{11338532328015999784ull, 12189777885975619439ull,
+ 7254801598007398965ull, 7612286574549405772ull}},
+{{5957055280345110280ull, 9816653206678944534ull,
+ 8829657949085300439ull, 1522457314909881154ull}},
+{{11914110560690220560ull, 1186562339648337452ull,
+ 17659315898170600879ull, 3044914629819762308ull}},
+{{5381477047670889504ull, 2373124679296674905ull,
+ 16871887722631650142ull, 6089829259639524617ull}},
+{{10762954095341779008ull, 4746249358593349810ull,
+ 15297031371553748668ull, 12179658519279049235ull}},
+{{13220637263294086772ull, 12017296315944400931ull,
+ 3059406274310749733ull, 2435931703855809847ull}},
+{{7994530452878621927ull, 5587848558179250247ull,
+ 6118812548621499467ull, 4871863407711619694ull}},
+{{15989060905757243853ull, 11175697116358500494ull,
+ 12237625097242998934ull, 9743726815423239388ull}},
+{{6887160995893359094ull, 9613837052755520745ull,
+ 13515571463674330756ull, 1948745363084647877ull}},
+{{13774321991786718188ull, 780930031801489874ull,
+ 8584398853639109897ull, 3897490726169295755ull}},
+{{9101899909863884759ull, 1561860063602979749ull,
+ 17168797707278219794ull, 7794981452338591510ull}},
+{{12888426426198507922ull, 15069767271688237242ull,
+ 3433759541455643958ull, 1558996290467718302ull}},
+{{7330108778687464227ull, 11692790469666922869ull,
+ 6867519082911287917ull, 3117992580935436604ull}},
+{{14660217557374928454ull, 4938836865624294122ull,
+ 13735038165822575835ull, 6235985161870873208ull}},
+{{10873691041040305291ull, 9877673731248588245ull,
+ 9023332257935600054ull, 12471970323741746417ull}},
+{{5864087022949971382ull, 5664883560991627972ull,
+ 9183364081070940657ull, 2494394064748349283ull}},
+{{11728174045899942763ull, 11329767121983255944ull,
+ 18366728162141881314ull, 4988788129496698566ull}},
+{{5009604018090333910ull, 4212790170256960273ull,
+ 18286712250574211013ull, 9977576258993397133ull}},
+{{15759316062585708075ull, 4531906848793302377ull,
+ 14725388894340573172ull, 1995515251798679426ull}},
+{{13071888051461864534ull, 9063813697586604755ull,
+ 11004033714971594728ull, 3991030503597358853ull}},
+{{7697032029214177451ull, 18127627395173209511ull,
+ 3561323356233637840ull, 7982061007194717707ull}},
+{{12607452850068566460ull, 11004223108518462548ull,
+ 8090962300730548214ull, 1596412201438943541ull}},
+{{6768161626427581304ull, 3561702143327373481ull,
+ 16181924601461096429ull, 3192824402877887082ull}},
+{{13536323252855162607ull, 7123404286654746962ull,
+ 13917105129212641242ull, 6385648805755774165ull}},
+{{8625902432000773598ull, 14246808573309493925ull,
+ 9387466184715730868ull, 12771297611511548331ull}},
+{{16482575745367796013ull, 17606756973629540077ull,
+ 5566842051685056496ull, 2554259522302309666ull}},
+{{14518407417026040409ull, 16766769873549528539ull,
+ 11133684103370112993ull, 5108519044604619332ull}},
+{{10590070760342529202ull, 15086795673389505463ull,
+ 3820624133030674371ull, 10217038089209238665ull}},
+{{16875409411036147134ull, 6706707949419811415ull,
+ 764124826606134874ull, 2043407617841847733ull}},
+{{15304074748362742651ull, 13413415898839622831ull,
+ 1528249653212269748ull, 4086815235683695466ull}},
+{{12161405423015933685ull, 8380087723969694047ull,
+ 3056499306424539497ull, 8173630471367390932ull}},
+{{6121629899345097061ull, 16433412803761580102ull,
+ 7989997490768728545ull, 1634726094273478186ull}},
+{{12243259798690194121ull, 14420081533813608588ull,
+ 15979994981537457091ull, 3269452188546956372ull}},
+{{6039775523670836625ull, 10393418993917665561ull,
+ 13513245889365362567ull, 6538904377093912745ull}},
+{{12276001548959898295ull, 9457381428267353758ull,
+ 2702649177873072513ull, 1307780875418782549ull}},
+{{6105259024210244973ull, 468018782825155901ull, 5405298355746145027ull,
+ 2615561750837565098ull}},
+{{12210518048420489946ull, 936037565650311802ull,
+ 10810596711492290054ull, 5231123501675130196ull}},
+{{5974292023131428276ull, 1872075131300623605ull,
+ 3174449349275028492ull, 10462247003350260393ull}},
+{{1194858404626285656ull, 374415026260124721ull,
+ 11702936314080736668ull, 2092449400670052078ull}},
+{{2389716809252571311ull, 748830052520249442ull, 4959128554451921720ull,
+ 4184898801340104157ull}},
+{{4779433618505142621ull, 1497660105040498884ull,
+ 9918257108903843440ull, 8369797602680208314ull}},
+{{12023933167926759494ull, 15056927279975741069ull,
+ 16741046680748409980ull, 1673959520536041662ull}},
+{{5601122262143967372ull, 11667110486241930523ull,
+ 15035349287787268345ull, 3347919041072083325ull}},
+{{11202244524287934743ull, 4887476898774309430ull,
+ 11623954501864985075ull, 6695838082144166651ull}},
+{{5929797719599497272ull, 4666844194496772209ull,
+ 6014139715114907338ull, 1339167616428833330ull}},
+{{11859595439198994544ull, 9333688388993544418ull,
+ 12028279430229814676ull, 2678335232857666660ull}},
+{{5272446804688437472ull, 220632704277537221ull, 5609814786750077737ull,
+ 5356670465715333321ull}},
+{{10544893609376874943ull, 441265408555074442ull,
+ 11219629573500155474ull, 10713340931430666642ull}},
+{{13177025166101105959ull, 3777601896452925211ull,
+ 9622623544183851741ull, 2142668186286133328ull}},
+{{7907306258492660301ull, 7555203792905850423ull, 798503014658151866ull,
+ 4285336372572266657ull}},
+{{15814612516985320601ull, 15110407585811700846ull,
+ 1597006029316303732ull, 8570672745144533314ull}},
+{{10541620132880884767ull, 6711430331904250492ull,
+ 15076796464830902039ull, 1714134549028906662ull}},
+{{2636496192052217917ull, 13422860663808500985ull,
+ 11706848855952252462ull, 3428269098057813325ull}},
+{{5272992384104435834ull, 8398977253907450354ull,
+ 4966953638194953309ull, 6856538196115626651ull}},
+{{15811993735788528460ull, 1679795450781490070ull,
+ 4682739542380900985ull, 1371307639223125330ull}},
+{{13177243397867505304ull, 3359590901562980141ull,
+ 9365479084761801970ull, 2742615278446250660ull}},
+{{7907742722025458991ull, 6719181803125960283ull, 284214095814052324ull,
+ 5485230556892501321ull}},
+{{15815485444050917981ull, 13438363606251920566ull,
+ 568428191628104648ull, 10970461113785002642ull}},
+{{6852445903552093920ull, 2687672721250384113ull,
+ 7492383267809441576ull, 2194092222757000528ull}},
+{{13704891807104187839ull, 5375345442500768226ull,
+ 14984766535618883152ull, 4388184445514001056ull}},
+{{8963039540498824062ull, 10750690885001536453ull,
+ 11522788997528214688ull, 8776368891028002113ull}},
+{{16550003167067406106ull, 5839486991742217613ull,
+ 13372604243731373907ull, 1755273778205600422ull}},
+{{14653262260425260595ull, 11678973983484435227ull,
+ 8298464413753196198ull, 3510547556411200845ull}},
+{{10859780447140969573ull, 4911203893259318839ull,
+ 16596928827506392397ull, 7021095112822401690ull}},
+{{5861304904170104238ull, 8360938408135684414ull,
+ 3319385765501278479ull, 1404219022564480338ull}},
+{{11722609808340208476ull, 16721876816271368828ull,
+ 6638771531002556958ull, 2808438045128960676ull}},
+{{4998475542970865335ull, 14997009558833186041ull,
+ 13277543062005113917ull, 5616876090257921352ull}},
+{{9996951085941730669ull, 11547275043956820466ull,
+ 8108342050300676219ull, 11233752180515842705ull}},
+{{1999390217188346134ull, 17066850267759005386ull,
+ 1621668410060135243ull, 2246750436103168541ull}},
+{{3998780434376692268ull, 15686956461808459156ull,
+ 3243336820120270487ull, 4493500872206337082ull}},
+{{7997560868753384536ull, 12927168849907366696ull,
+ 6486673640240540975ull, 8987001744412674164ull}},
+{{1599512173750676908ull, 17342829028949114632ull,
+ 16054729987015749487ull, 1797400348882534832ull}},
+{{3199024347501353815ull, 16238913984188677648ull,
+ 13662715900321947359ull, 3594800697765069665ull}},
+{{6398048695002707629ull, 14031083894667803680ull,
+ 8878687726934343103ull, 7189601395530139331ull}},
+{{16037004997968182819ull, 17563612037901202028ull,
+ 5465086360128778943ull, 1437920279106027866ull}},
+{{13627265922226814021ull, 16680480002092852441ull,
+ 10930172720257557887ull, 2875840558212055732ull}},
+{{8807787770744076426ull, 14914215930476153267ull,
+ 3413601366805564159ull, 5751681116424111465ull}},
+{{17615575541488152852ull, 11381687787242754918ull,
+ 6827202733611128319ull, 11503362232848222930ull}},
+{{10901812737781451217ull, 17033732816416192276ull,
+ 1365440546722225663ull, 2300672446569644586ull}},
+{{3356881401853350818ull, 15620721559122832937ull,
+ 2730881093444451327ull, 4601344893139289172ull}},
+{{6713762803706701635ull, 12794699044536114258ull,
+ 5461762186888902655ull, 9202689786278578344ull}},
+{{8721450190225160974ull, 17316335067874864144ull,
+ 15849747696345421823ull, 1840537957255715668ull}},
+{{17442900380450321947ull, 16185926062040176672ull,
+ 13252751318981292031ull, 3681075914511431337ull}},
+{{16439056687191092278ull, 13925108050370801729ull,
+ 8058758564253032447ull, 7362151829022862675ull}},
+{{6977160152180128779ull, 10163719239557980992ull,
+ 1611751712850606489ull, 1472430365804572535ull}},
+{{13954320304360257558ull, 1880694405406410368ull,
+ 3223503425701212979ull, 2944860731609145070ull}},
+{{9461896535010963499ull, 3761388810812820737ull,
+ 6447006851402425958ull, 5889721463218290140ull}},
+{{477048996312375382ull, 7522777621625641475ull,
+ 12894013702804851916ull, 11779442926436580280ull}},
+{{3784758614004385400ull, 5193904339067038618ull,
+ 2578802740560970383ull, 2355888585287316056ull}},
+{{7569517228008770799ull, 10387808678134077236ull,
+ 5157605481121940766ull, 4711777170574632112ull}},
+{{15139034456017541598ull, 2328873282558602856ull,
+ 10315210962243881533ull, 9423554341149264224ull}},
+{{14095853335429239290ull, 7844472285995541217ull,
+ 16820437451416417599ull, 1884710868229852844ull}},
+{{9744962597148926963ull, 15688944571991082435ull,
+ 15194130829123283582ull, 3769421736459705689ull}},
+{{1043181120588302309ull, 12931145070272613255ull,
+ 11941517584537015549ull, 7538843472919411379ull}},
+{{11276682668343391432ull, 13654275458280253620ull,
+ 17145698775875044402ull, 1507768694583882275ull}},
+{{4106621262977231247ull, 8861806842850955625ull,
+ 15844653478040537189ull, 3015537389167764551ull}},
+{{8213242525954462494ull, 17723613685701911250ull,
+ 13242562882371522762ull, 6031074778335529103ull}},
+{{16426485051908924987ull, 17000483297694270884ull,
+ 8038381691033493909ull, 12062149556671058207ull}},
+{{3285297010381784998ull, 7089445474280764500ull,
+ 8986373967690519428ull, 2412429911334211641ull}},
+{{6570594020763569995ull, 14178890948561529000ull,
+ 17972747935381038856ull, 4824859822668423282ull}},
+{{13141188041527139990ull, 9911037823413506384ull,
+ 17498751797052526097ull, 9649719645336846565ull}},
+{{6317586423047338322ull, 9360905194166521923ull,
+ 3499750359410505219ull, 1929943929067369313ull}},
+{{12635172846094676643ull, 275066314623492230ull,
+ 6999500718821010439ull, 3859887858134738626ull}},
+{{6823601618479801669ull, 550132629246984461ull,
+ 13999001437642020878ull, 7719775716269477252ull}},
+{{5054069138437870657ull, 110026525849396892ull,
+ 10178497917012224822ull, 1543955143253895450ull}},
+{{10108138276875741314ull, 220053051698793784ull,
+ 1910251760314898028ull, 3087910286507790901ull}},
+{{1769532480041931012ull, 440106103397587569ull, 3820503520629796056ull,
+ 6175820573015581802ull}},
+{{3539064960083862023ull, 880212206795175138ull, 7641007041259592112ull,
+ 12351641146031163604ull}},
+{{15465208250984413698ull, 3865391256100945350ull,
+ 16285596667219559715ull, 2470328229206232720ull}},
+{{12483672428259275779ull, 7730782512201890701ull,
+ 14124449260729567814ull, 4940656458412465441ull}},
+{{6520600782808999942ull, 15461565024403781403ull,
+ 9802154447749584012ull, 9881312916824930883ull}},
+{{12372166600787530958ull, 3092313004880756280ull,
+ 13028477333775647772ull, 1976262583364986176ull}},
+{{6297589127865510300ull, 6184626009761512561ull,
+ 7610210593841743928ull, 3952525166729972353ull}},
+{{12595178255731020600ull, 12369252019523025122ull,
+ 15220421187683487856ull, 7905050333459944706ull}},
+{{17276430910113845413ull, 9852548033388425670ull,
+ 6733433052278607894ull, 1581010066691988941ull}},
+{{16106117746518139210ull, 1258351993067299725ull,
+ 13466866104557215789ull, 3162020133383977882ull}},
+{{13765491419326726803ull, 2516703986134599451ull,
+ 8486988135404879962ull, 6324040266767955765ull}},
+{{9084238764943901990ull, 5033407972269198903ull,
+ 16973976270809759924ull, 12648080533535911530ull}},
+{{9195545382472601045ull, 15764076853421481073ull,
+ 3394795254161951984ull, 2529616106707182306ull}},
+{{18391090764945202089ull, 13081409633133410530ull,
+ 6789590508323903969ull, 5059232213414364612ull}},
+{{18335437456180852562ull, 7716075192557269445ull,
+ 13579181016647807939ull, 10118464426828729224ull}},
+{{14735133935461901482ull, 12611261482737184858ull,
+ 17473231462297202880ull, 2023692885365745844ull}},
+{{11023523797214251348ull, 6775778891764818101ull,
+ 16499718850884854145ull, 4047385770731491689ull}},
+{{3600303520718951080ull, 13551557783529636203ull,
+ 14552693628060156674ull, 8094771541462983379ull}},
+{{4409409518885700540ull, 13778358000931658210ull,
+ 17667933984579672627ull, 1618954308292596675ull}},
+{{8818819037771401079ull, 9109971928153764804ull,
+ 16889123895449793639ull, 3237908616585193351ull}},
+{{17637638075542802157ull, 18219943856307529608ull,
+ 15331503717190035662ull, 6475817233170386703ull}},
+{{14595574059334291401ull, 3643988771261505921ull,
+ 14134347187663738102ull, 1295163446634077340ull}},
+{{10744404044959031186ull, 7287977542523011843ull,
+ 9821950301617924588ull, 2590326893268154681ull}},
+{{3042064016208510756ull, 14575955085046023687ull,
+ 1197156529526297560ull, 5180653786536309363ull}},
+{{6084128032417021512ull, 10705166096382495758ull,
+ 2394313059052595121ull, 10361307573072618726ull}},
+{{1216825606483404303ull, 9519730848760319798ull,
+ 4168211426552429347ull, 2072261514614523745ull}},
+{{2433651212966808605ull, 592717623811087980ull, 8336422853104858695ull,
+ 4144523029229047490ull}},
+{{4867302425933617209ull, 1185435247622175960ull,
+ 16672845706209717390ull, 8289046058458094980ull}},
+{{973460485186723442ull, 237087049524435192ull, 3334569141241943478ull,
+ 1657809211691618996ull}},
+{{1946920970373446884ull, 474174099048870384ull, 6669138282483886956ull,
+ 3315618423383237992ull}},
+{{3893841940746893768ull, 948348198097740768ull,
+ 13338276564967773912ull, 6631236846766475984ull}},
+{{15536163647117020047ull, 3879018454361458476ull,
+ 17425050571961196075ull, 1326247369353295196ull}},
+{{12625583220524488477ull, 7758036908722916953ull,
+ 16403357070212840534ull, 2652494738706590393ull}},
+{{6804422367339425337ull, 15516073817445833907ull,
+ 14359970066716129452ull, 5304989477413180787ull}},
+{{13608844734678850674ull, 12585403561182116198ull,
+ 10273196059722707289ull, 10609978954826361575ull}},
+{{10100466576419590782ull, 17274475971204064532ull,
+ 2054639211944541457ull, 2121995790965272315ull}},
+{{1754189079129629947ull, 16102207868698577449ull,
+ 4109278423889082915ull, 4243991581930544630ull}},
+{{3508378158259259893ull, 13757671663687603282ull,
+ 8218556847778165831ull, 8487983163861089260ull}},
+{{11769722075877582949ull, 6440883147479430979ull,
+ 1643711369555633166ull, 1697596632772217852ull}},
+{{5092700078045614281ull, 12881766294958861959ull,
+ 3287422739111266332ull, 3395193265544435704ull}},
+{{10185400156091228561ull, 7316788516208172302ull,
+ 6574845478222532665ull, 6790386531088871408ull}},
+{{2037080031218245713ull, 12531404147467365430ull,
+ 12383015539870237502ull, 1358077306217774281ull}},
+{{4074160062436491425ull, 6616064221225179244ull,
+ 6319287006030923389ull, 2716154612435548563ull}},
+{{8148320124872982849ull, 13232128442450358488ull,
+ 12638574012061846778ull, 5432309224871097126ull}},
+{{16296640249745965697ull, 8017512811191165360ull,
+ 6830403950414141941ull, 10864618449742194253ull}},
+{{18016723308916834433ull, 16360897821205874364ull,
+ 12434127234308559357ull, 2172923689948438850ull}},
+{{17586702544124117249ull, 14275051568702197113ull,
+ 6421510394907567099ull, 4345847379896877701ull}},
+{{16726661014538682881ull, 10103359063694842611ull,
+ 12843020789815134199ull, 8691694759793755402ull}},
+{{10724029832391557223ull, 5710020627480878845ull,
+ 9947301787446847486ull, 1738338951958751080ull}},
+{{3001315591073562830ull, 11420041254961757691ull,
+ 1447859501184143356ull, 3476677903917502161ull}},
+{{6002631182147125659ull, 4393338436213963766ull,
+ 2895719002368286713ull, 6953355807835004322ull}},
+{{4889875051171335455ull, 878667687242792753ull, 7957841429957477989ull,
+ 1390671161567000864ull}},
+{{9779750102342670910ull, 1757335374485585506ull,
+ 15915682859914955978ull, 2781342323134001728ull}},
+{{1112756130975790204ull, 3514670748971171013ull,
+ 13384621646120360340ull, 5562684646268003457ull}},
+{{2225512261951580407ull, 7029341497942342026ull,
+ 8322499218531169064ull, 11125369292536006915ull}},
+{{445102452390316082ull, 16163263558556109698ull,
+ 1664499843706233812ull, 2225073858507201383ull}},
+{{890204904780632163ull, 13879783043402667780ull,
+ 3328999687412467625ull, 4450147717014402766ull}},
+{{1780409809561264326ull, 9312822013095783944ull,
+ 6657999374824935251ull, 8900295434028805532ull}},
+{{7734779591396073512ull, 12930610846844887758ull,
+ 8710297504448807696ull, 1780059086805761106ull}},
+{{15469559182792147023ull, 7414477619980223900ull,
+ 17420595008897615393ull, 3560118173611522212ull}},
+{{12492374291874742430ull, 14828955239960447801ull,
+ 16394445944085679170ull, 7120236347223044425ull}},
+{{6187823673116858810ull, 2965791047992089560ull,
+ 3278889188817135834ull, 1424047269444608885ull}},
+{{12375647346233717619ull, 5931582095984179120ull,
+ 6557778377634271668ull, 2848094538889217770ull}},
+{{6304550618757883621ull, 11863164191968358241ull,
+ 13115556755268543336ull, 5696189077778435540ull}},
+{{12609101237515767242ull, 5279584310227164866ull,
+ 7784369436827535057ull, 11392378155556871081ull}},
+{{17279215506470794742ull, 12123963306271163942ull,
+ 5246222702107417334ull, 2278475631111374216ull}},
+{{16111686939232037867ull, 5801182538832776269ull,
+ 10492445404214834669ull, 4556951262222748432ull}},
+{{13776629804754524117ull, 11602365077665552539ull,
+ 2538146734720117722ull, 9113902524445496865ull}},
+{{6444674775692815147ull, 9699170645016931154ull, 507629346944023544ull,
+ 1822780504889099373ull}},
+{{12889349551385630293ull, 951597216324310692ull,
+ 1015258693888047089ull, 3645561009778198746ull}},
+{{7331955029061708970ull, 1903194432648621385ull,
+ 2030517387776094178ull, 7291122019556397492ull}},
+{{1466391005812341794ull, 380638886529724277ull, 7784801107039039482ull,
+ 1458224403911279498ull}},
+{{2932782011624683588ull, 761277773059448554ull,
+ 15569602214078078964ull, 2916448807822558996ull}},
+{{5865564023249367176ull, 1522555546118897108ull,
+ 12692460354446606312ull, 5832897615645117993ull}},
+{{11731128046498734352ull, 3045111092237794216ull,
+ 6938176635183661008ull, 11665795231290235987ull}},
+{{6035574424041657194ull, 609022218447558843ull, 8766332956520552848ull,
+ 2333159046258047197ull}},
+{{12071148848083314388ull, 1218044436895117686ull,
+ 17532665913041105696ull, 4666318092516094394ull}},
+{{5695553622457077159ull, 2436088873790235373ull,
+ 16618587752372659776ull, 9332636185032188789ull}},
+{{12207157168717146402ull, 487217774758047074ull,
+ 18081112809442173248ull, 1866527237006437757ull}},
+{{5967570263724741187ull, 974435549516094149ull,
+ 17715481545174794880ull, 3733054474012875515ull}},
+{{11935140527449482373ull, 1948871099032188298ull,
+ 16984219016640038144ull, 7466108948025751031ull}},
+{{13455074549715627445ull, 389774219806437659ull,
+ 7086192618069917952ull, 1493221789605150206ull}},
+{{8463405025721703273ull, 779548439612875319ull,
+ 14172385236139835904ull, 2986443579210300412ull}},
+{{16926810051443406545ull, 1559096879225750638ull,
+ 9898026398570120192ull, 5972887158420600825ull}},
+{{15406876029177261474ull, 3118193758451501277ull,
+ 1349308723430688768ull, 11945774316841201651ull}},
+{{6770724020577362618ull, 15381034010657941548ull,
+ 3959210559428048076ull, 2389154863368240330ull}},
+{{13541448041154725236ull, 12315323947606331480ull,
+ 7918421118856096153ull, 4778309726736480660ull}},
+{{8636152008599898856ull, 6183903821503111345ull,
+ 15836842237712192307ull, 9556619453472961320ull}},
+{{9105928031203800418ull, 8615478393784442915ull,
+ 3167368447542438461ull, 1911323890694592264ull}},
+{{18211856062407600836ull, 17230956787568885830ull,
+ 6334736895084876922ull, 3822647781389184528ull}},
+{{17976968051105650055ull, 16015169501428220045ull,
+ 12669473790169753845ull, 7645295562778369056ull}},
+{{7284742424963040335ull, 6892382715027554332ull,
+ 6223243572775861092ull, 1529059112555673811ull}},
+{{14569484849926080669ull, 13784765430055108664ull,
+ 12446487145551722184ull, 3058118225111347622ull}},
+{{10692225626142609721ull, 9122786786400665713ull,
+ 6446230217393892753ull, 6116236450222695245ull}},
+{{2937707178575667825ull, 18245573572801331427ull,
+ 12892460434787785506ull, 12232472900445390490ull}},
+{{11655587879940864535ull, 7338463529302176608ull,
+ 2578492086957557101ull, 2446494580089078098ull}},
+{{4864431686172177453ull, 14676927058604353217ull,
+ 5156984173915114202ull, 4892989160178156196ull}},
+{{9728863372344354906ull, 10907110043499154818ull,
+ 10313968347830228405ull, 9785978320356312392ull}},
+{{1945772674468870982ull, 9560119638183651610ull,
+ 9441491299049866327ull, 1957195664071262478ull}},
+{{3891545348937741963ull, 673495202657751604ull, 436238524390181039ull,
+ 3914391328142524957ull}},
+{{7783090697875483925ull, 1346990405315503208ull, 872477048780362078ull,
+ 7828782656285049914ull}},
+{{1556618139575096785ull, 7648095710546921288ull,
+ 14931890668723713708ull, 1565756531257009982ull}},
+{{3113236279150193570ull, 15296191421093842576ull,
+ 11417037263737875800ull, 3131513062514019965ull}},
+{{6226472558300387140ull, 12145638768478133536ull,
+ 4387330453766199985ull, 6263026125028039931ull}},
+{{12452945116600774280ull, 5844533463246715456ull,
+ 8774660907532399971ull, 12526052250056079862ull}},
+{{17247984282287796149ull, 12236953136875074060ull,
+ 9133629810990300640ull, 2505210450011215972ull}},
+{{16049224490866040682ull, 6027162200040596505ull,
+ 18267259621980601281ull, 5010420900022431944ull}},
+{{13651704908022529747ull, 12054324400081193011ull,
+ 18087775170251650946ull, 10020841800044863889ull}},
+{{6419689796346416273ull, 2410864880016238602ull,
+ 18374950293017971482ull, 2004168360008972777ull}},
+{{12839379592692832546ull, 4821729760032477204ull,
+ 18303156512326391348ull, 4008336720017945555ull}},
+{{7232015111676113475ull, 9643459520064954409ull,
+ 18159568950943231080ull, 8016673440035891111ull}},
+{{1446403022335222695ull, 5618040718754901205ull,
+ 7321262604930556539ull, 1603334688007178222ull}},
+{{2892806044670445390ull, 11236081437509802410ull,
+ 14642525209861113078ull, 3206669376014356444ull}},
+{{5785612089340890780ull, 4025418801310053204ull,
+ 10838306346012674541ull, 6413338752028712889ull}},
+{{15914517676835819449ull, 805083760262010640ull,
+ 16925056528170176201ull, 1282667750405742577ull}},
+{{13382291279962087282ull, 1610167520524021281ull,
+ 15403368982630800786ull, 2565335500811485155ull}},
+{{8317838486214622947ull, 3220335041048042563ull,
+ 12359993891552049956ull, 5130671001622970311ull}},
+{{16635676972429245894ull, 6440670082096085126ull,
+ 6273243709394548296ull, 10261342003245940623ull}},
+{{3327135394485849179ull, 16045529275386858318ull,
+ 12322695186104640628ull, 2052268400649188124ull}},
+{{6654270788971698358ull, 13644314477064165020ull,
+ 6198646298499729641ull, 4104536801298376249ull}},
+{{13308541577943396715ull, 8841884880418778424ull,
+ 12397292596999459283ull, 8209073602596752498ull}},
+{{2661708315588679343ull, 5457725790825666008ull,
+ 13547504963625622826ull, 1641814720519350499ull}},
+{{5323416631177358686ull, 10915451581651332016ull,
+ 8648265853541694036ull, 3283629441038700999ull}},
+{{10646833262354717372ull, 3384159089593112416ull,
+ 17296531707083388073ull, 6567258882077401998ull}},
+{{9508064281954764121ull, 4366180632660532806ull,
+ 14527352785642408584ull, 1313451776415480399ull}},
+{{569384490199976626ull, 8732361265321065613ull,
+ 10607961497575265552ull, 2626903552830960799ull}},
+{{1138768980399953251ull, 17464722530642131226ull,
+ 2769178921440979488ull, 5253807105661921599ull}},
+{{2277537960799906502ull, 16482700987574710836ull,
+ 5538357842881958977ull, 10507614211323843198ull}},
+{{4144856406901891624ull, 3296540197514942167ull,
+ 12175718012802122765ull, 2101522842264768639ull}},
+{{8289712813803783248ull, 6593080395029884334ull,
+ 5904691951894693914ull, 4203045684529537279ull}},
+{{16579425627607566495ull, 13186160790059768668ull,
+ 11809383903789387828ull, 8406091369059074558ull}},
+{{18073280384489154592ull, 6326580972753864056ull,
+ 13429923224983608535ull, 1681218273811814911ull}},
+{{17699816695268757568ull, 12653161945507728113ull,
+ 8413102376257665454ull, 3362436547623629823ull}},
+{{16952889316827963519ull, 6859579817305904611ull,
+ 16826204752515330909ull, 6724873095247259646ull}},
+{{7079926678107503027ull, 1371915963461180922ull,
+ 7054589765244976505ull, 1344974619049451929ull}},
+{{14159853356215006054ull, 2743831926922361844ull,
+ 14109179530489953010ull, 2689949238098903858ull}},
+{{9872962638720460492ull, 5487663853844723689ull,
+ 9771614987270354404ull, 5379898476197807717ull}},
+{{1299181203731369368ull, 10975327707689447379ull,
+ 1096485900831157192ull, 10759796952395615435ull}},
+{{3949185055488184197ull, 9573763171021710122ull, 219297180166231438ull,
+ 2151959390479123087ull}},
+{{7898370110976368394ull, 700782268333868628ull, 438594360332462877ull,
+ 4303918780958246174ull}},
+{{15796740221952736787ull, 1401564536667737256ull,
+ 877188720664925754ull, 8607837561916492348ull}},
+{{14227394488616278327ull, 7659010536817368097ull,
+ 11243484188358716120ull, 1721567512383298469ull}},
+{{10008044903523005038ull, 15318021073634736195ull,
+ 4040224303007880624ull, 3443135024766596939ull}},
+{{1569345733336458460ull, 12189298073559920775ull,
+ 8080448606015761249ull, 6886270049533193878ull}},
+{{7692566776151112339ull, 9816557244195804801ull,
+ 12684136165428883219ull, 1377254009906638775ull}},
+{{15385133552302224677ull, 1186370414682057986ull,
+ 6921528257148214823ull, 2754508019813277551ull}},
+{{12323523030894897738ull, 2372740829364115973ull,
+ 13843056514296429646ull, 5509016039626555102ull}},
+{{6200301988080243859ull, 4745481658728231947ull,
+ 9239368954883307676ull, 11018032079253110205ull}},
+{{12308106841841779742ull, 4638445146487556712ull,
+ 1847873790976661535ull, 2203606415850622041ull}},
+{{6169469609974007867ull, 9276890292975113425ull,
+ 3695747581953323070ull, 4407212831701244082ull}},
+{{12338939219948015734ull, 107036512240675234ull,
+ 7391495163906646141ull, 8814425663402488164ull}},
+{{17225183102957244440ull, 21407302448135046ull,
+ 16235694291748970521ull, 1762885132680497632ull}},
+{{16003622132204937264ull, 42814604896270093ull,
+ 14024644509788389426ull, 3525770265360995265ull}},
+{{13560500190700322911ull, 85629209792540187ull, 9602544945867227236ull,
+ 7051540530721990531ull}},
+{{17469495297107705875ull, 7395823471442328683ull,
+ 5609857803915355770ull, 1410308106144398106ull}},
+{{16492246520505860134ull, 14791646942884657367ull,
+ 11219715607830711540ull, 2820616212288796212ull}},
+{{14537748967302168652ull, 11136549812059763119ull,
+ 3992687141951871465ull, 5641232424577592425ull}},
+{{10628753860894785687ull, 3826355550409974623ull,
+ 7985374283903742931ull, 11282464849155184850ull}},
+{{16883146031146598431ull, 4454619924823905247ull,
+ 1597074856780748586ull, 2256492969831036970ull}},
+{{15319547988583645245ull, 8909239849647810495ull,
+ 3194149713561497172ull, 4512985939662073940ull}},
+{{12192351903457738873ull, 17818479699295620991ull,
+ 6388299427122994344ull, 9025971879324147880ull}},
+{{2438470380691547775ull, 18321091198826765491ull,
+ 1277659885424598868ull, 1805194375864829576ull}},
+{{4876940761383095549ull, 18195438323943979366ull,
+ 2555319770849197737ull, 3610388751729659152ull}},
+{{9753881522766191098ull, 17944132574178407116ull,
+ 5110639541698395475ull, 7220777503459318304ull}},
+{{1950776304553238220ull, 18346221773803322716ull,
+ 15779523167307320387ull, 1444155500691863660ull}},
+{{3901552609106476440ull, 18245699473897093816ull,
+ 13112302260905089159ull, 2888311001383727321ull}},
+{{7803105218212952879ull, 18044654874084636016ull,
+ 7777860448100626703ull, 5776622002767454643ull}},
+{{15606210436425905757ull, 17642565674459720416ull,
+ 15555720896201253407ull, 11553244005534909286ull}},
+{{17878637346252822445ull, 14596559579117675052ull,
+ 6800492993982161004ull, 2310648801106981857ull}},
+{{17310530618796093273ull, 10746375084525798489ull,
+ 13600985987964322009ull, 4621297602213963714ull}},
+{{16174317163882634929ull, 3046006095342045363ull,
+ 8755227902219092403ull, 9242595204427927429ull}},
+{{3234863432776526986ull, 7987898848552229719ull,
+ 16508440839411459773ull, 1848519040885585485ull}},
+{{6469726865553053972ull, 15975797697104459438ull,
+ 14570137605113367930ull, 3697038081771170971ull}},
+{{12939453731106107943ull, 13504851320499367260ull,
+ 10693531136517184245ull, 7394076163542341943ull}},
+{{13655937190446952559ull, 13769016708325604421ull,
+ 13206752671529167818ull, 1478815232708468388ull}},
+{{8865130307184353501ull, 9091289342941657227ull,
+ 7966761269348784021ull, 2957630465416936777ull}},
+{{17730260614368707001ull, 18182578685883314454ull,
+ 15933522538697568042ull, 5915260930833873554ull}},
+{{17013777155027862386ull, 17918413298057077293ull,
+ 13420301003685584469ull, 11830521861667747109ull}},
+{{7092104245747482801ull, 14651729103837146428ull,
+ 17441455459704758186ull, 2366104372333549421ull}},
+{{14184208491494965601ull, 10856714133964741240ull,
+ 16436166845699964757ull, 4732208744667098843ull}},
+{{9921672909280379586ull, 3266684194219930865ull,
+ 14425589617690377899ull, 9464417489334197687ull}},
+{{5673683396597986241ull, 4342685653585896496ull,
+ 10263815553021896226ull, 1892883497866839537ull}},
+{{11347366793195972481ull, 8685371307171792992ull,
+ 2080887032334240836ull, 3785766995733679075ull}},
+{{4247989512682393345ull, 17370742614343585985ull,
+ 4161774064668481672ull, 7571533991467358150ull}},
+{{8228295532020299316ull, 10852846152352537843ull,
+ 832354812933696334ull, 1514306798293471630ull}},
+{{16456591064040598631ull, 3258948230995524070ull,
+ 1664709625867392669ull, 3028613596586943260ull}},
+{{14466438054371645646ull, 6517896461991048141ull,
+ 3329419251734785338ull, 6057227193173886520ull}},
+{{10486132035033739675ull, 13035792923982096283ull,
+ 6658838503469570676ull, 12114454386347773040ull}},
+{{16854621665974389228ull, 6296507399538329579ull,
+ 1331767700693914135ull, 2422890877269554608ull}},
+{{15262499258239226840ull, 12593014799076659159ull,
+ 2663535401387828270ull, 4845781754539109216ull}},
+{{12078254442768902064ull, 6739285524443766703ull,
+ 5327070802775656541ull, 9691563509078218432ull}},
+{{6104999703295690736ull, 12415903549114484310ull,
+ 8444111790038951954ull, 1938312701815643686ull}},
+{{12209999406591381472ull, 6385063024519417004ull,
+ 16888223580077903909ull, 3876625403631287372ull}},
+{{5973254739473211328ull, 12770126049038834009ull,
+ 15329703086446256202ull, 7753250807262574745ull}},
+{{4883999762636552589ull, 9932722839291587448ull,
+ 3065940617289251240ull, 1550650161452514949ull}},
+{{9767999525273105178ull, 1418701604873623280ull,
+ 6131881234578502481ull, 3101300322905029898ull}},
+{{1089254976836658739ull, 2837403209747246561ull,
+ 12263762469157004962ull, 6202600645810059796ull}},
+{{2178509953673317478ull, 5674806419494493122ull,
+ 6080780864604458308ull, 12405201291620119593ull}},
+{{11503748434960394466ull, 4824310098640808947ull,
+ 12284202617146622631ull, 2481040258324023918ull}},
+{{4560752796211237315ull, 9648620197281617895ull,
+ 6121661160583693646ull, 4962080516648047837ull}},
+{{9121505592422474629ull, 850496320853684174ull,
+ 12243322321167387293ull, 9924161033296095674ull}},
+{{5513649933226405249ull, 7548796893654557481ull,
+ 17206059723201118751ull, 1984832206659219134ull}},
+{{11027299866452810498ull, 15097593787309114962ull,
+ 15965375372692685886ull, 3969664413318438269ull}},
+{{3607855659196069380ull, 11748443500908678309ull,
+ 13484006671675820157ull, 7939328826636876539ull}},
+{{721571131839213876ull, 6039037514923645985ull,
+ 17454196593302805324ull, 1587865765327375307ull}},
+{{1443142263678427752ull, 12078075029847291970ull,
+ 16461649112896059032ull, 3175731530654750615ull}},
+{{2886284527356855504ull, 5709405985985032324ull,
+ 14476554152082566449ull, 6351463061309501231ull}},
+{{5772569054713711007ull, 11418811971970064648ull,
+ 10506364230455581282ull, 12702926122619002463ull}},
+{{12222560255168473171ull, 2283762394394012929ull,
+ 13169319290316847226ull, 2540585224523800492ull}},
+{{5998376436627394726ull, 4567524788788025859ull,
+ 7891894506924142836ull, 5081170449047600985ull}},
+{{11996752873254789452ull, 9135049577576051718ull,
+ 15783789013848285672ull, 10162340898095201970ull}},
+{{2399350574650957891ull, 9205707544999030990ull,
+ 3156757802769657134ull, 2032468179619040394ull}},
+{{4798701149301915781ull, 18411415089998061980ull,
+ 6313515605539314268ull, 4064936359238080788ull}},
+{{9597402298603831562ull, 18376086106286572344ull,
+ 12627031211078628537ull, 8129872718476161576ull}},
+{{9298178089204586959ull, 14743263665483045438ull,
+ 6214755056957636030ull, 1625974543695232315ull}},
+{{149612104699622302ull, 11039783257256539261ull,
+ 12429510113915272061ull, 3251949087390464630ull}},
+{{299224209399244603ull, 3632822440803526906ull, 6412276154120992507ull,
+ 6503898174780929261ull}},
+{{14817240100847490214ull, 11794610932386436350ull,
+ 4971804045566108824ull, 1300779634956185852ull}},
+{{11187736127985428811ull, 5142477791063321085ull,
+ 9943608091132217649ull, 2601559269912371704ull}},
+{{3928728182261306006ull, 10284955582126642171ull,
+ 1440472108554883682ull, 5203118539824743409ull}},
+{{7857456364522612011ull, 2123167090543732726ull,
+ 2880944217109767365ull, 10406237079649486818ull}},
+{{16328886531872163695ull, 11492679862334477514ull,
+ 11644235287647684442ull, 2081247415929897363ull}},
+{{14211028990034775774ull, 4538615650959403413ull,
+ 4841726501585817269ull, 4162494831859794727ull}},
+{{9975313906359999932ull, 9077231301918806827ull,
+ 9683453003171634538ull, 8324989663719589454ull}},
+{{16752458040239641280ull, 9194143889867582011ull,
+ 16694085859601968200ull, 1664997932743917890ull}},
+{{15058172006769730943ull, 18388287779735164023ull,
+ 14941427645494384784ull, 3329995865487835781ull}},
+{{11669599939829910269ull, 18329831485760776431ull,
+ 11436111217279217953ull, 6659991730975671563ull}},
+{{9712617617449802701ull, 7355315111894065609ull,
+ 13355268687681574560ull, 1331998346195134312ull}},
+{{978491161190053785ull, 14710630223788131219ull,
+ 8263793301653597504ull, 2663996692390268625ull}},
+{{1956982322380107569ull, 10974516373866710822ull,
+ 16527586603307195009ull, 5327993384780537250ull}},
+{{3913964644760215138ull, 3502288674023870028ull,
+ 14608429132904838403ull, 10655986769561074501ull}},
+{{8161490558435863674ull, 15457852993772415298ull,
+ 6611034641322878003ull, 2131197353912214900ull}},
+{{16322981116871727348ull, 12468961913835278980ull,
+ 13222069282645756007ull, 4262394707824429800ull}},
+{{14199218160033903080ull, 6491179753961006345ull,
+ 7997394491581960399ull, 8524789415648859601ull}},
+{{2839843632006780616ull, 1298235950792201269ull,
+ 5288827713058302403ull, 1704957883129771920ull}},
+{{5679687264013561232ull, 2596471901584402538ull,
+ 10577655426116604806ull, 3409915766259543840ull}},
+{{11359374528027122464ull, 5192943803168805076ull,
+ 2708566778523657996ull, 6819831532519087681ull}},
+{{13339921349831155463ull, 8417286390117581661ull,
+ 4231062170446641922ull, 1363966306503817536ull}},
+{{8233098625952759309ull, 16834572780235163323ull,
+ 8462124340893283844ull, 2727932613007635072ull}},
+{{16466197251905518618ull, 15222401486760775030ull,
+ 16924248681786567689ull, 5455865226015270144ull}},
+{{14485650430101485619ull, 11998058899811998445ull,
+ 15401753289863583763ull, 10911730452030540289ull}},
+{{10275827715504117771ull, 9778309409446220335ull,
+ 17837745916940358045ull, 2182346090406108057ull}},
+{{2104911357298683925ull, 1109874745182889055ull,
+ 17228747760171164475ull, 4364692180812216115ull}},
+{{4209822714597367849ull, 2219749490365778110ull,
+ 16010751446632777334ull, 8729384361624432231ull}},
+{{841964542919473570ull, 443949898073155622ull, 6891499104068465790ull,
+ 1745876872324886446ull}},
+{{1683929085838947140ull, 887899796146311244ull,
+ 13782998208136931580ull, 3491753744649772892ull}},
+{{3367858171677894279ull, 1775799592292622488ull,
+ 9119252342564311544ull, 6983507489299545785ull}},
+{{8052269263819399503ull, 15112555177426165790ull,
+ 1823850468512862308ull, 1396701497859909157ull}},
+{{16104538527638799005ull, 11778366281142779964ull,
+ 3647700937025724617ull, 2793402995719818314ull}},
+{{13762332981568046393ull, 5109988488576008313ull,
+ 7295401874051449235ull, 5586805991439636628ull}},
+{{9077921889426541170ull, 10219976977152016627ull,
+ 14590803748102898470ull, 11173611982879273256ull}},
+{{12883630822111039204ull, 5733344210172313648ull,
+ 6607509564362490017ull, 2234722396575854651ull}},
+{{7320517570512526791ull, 11466688420344627297ull,
+ 13215019128724980034ull, 4469444793151709302ull}},
+{{14641035141025053582ull, 4486632766979702978ull,
+ 7983294183740408453ull, 8938889586303418605ull}},
+{{6617555842946921040ull, 11965372997621671565ull,
+ 1596658836748081690ull, 1787777917260683721ull}},
+{{13235111685893842080ull, 5484001921533791514ull,
+ 3193317673496163381ull, 3575555834521367442ull}},
+{{8023479298078132543ull, 10968003843067583029ull,
+ 6386635346992326762ull, 7151111669042734884ull}},
+{{1604695859615626509ull, 5882949583355426929ull,
+ 16034722328366106645ull, 1430222333808546976ull}},
+{{3209391719231253017ull, 11765899166710853858ull,
+ 13622700583022661674ull, 2860444667617093953ull}},
+{{6418783438462506034ull, 5085054259712156100ull,
+ 8798657092335771733ull, 5720889335234187907ull}},
+{{12837566876925012068ull, 10170108519424312200ull,
+ 17597314184671543466ull, 11441778670468375814ull}},
+{{2567513375385002414ull, 2034021703884862440ull,
+ 18276858095901949986ull, 2288355734093675162ull}},
+{{5135026750770004827ull, 4068043407769724880ull,
+ 18106972118094348356ull, 4576711468187350325ull}},
+{{10270053501540009654ull, 8136086815539449760ull,
+ 17767200162479145096ull, 9153422936374700651ull}},
+{{9432708329791822578ull, 9005914992591710598ull,
+ 7242788847237739342ull, 1830684587274940130ull}},
+{{418672585874093539ull, 18011829985183421197ull,
+ 14485577694475478684ull, 3661369174549880260ull}},
+{{837345171748187077ull, 17576915896657290778ull,
+ 10524411315241405753ull, 7322738349099760521ull}},
+{{7546166663833458062ull, 18272778438299099448ull,
+ 5794231077790191473ull, 1464547669819952104ull}},
+{{15092333327666916124ull, 18098812802888647280ull,
+ 11588462155580382947ull, 2929095339639904208ull}},
+{{11737922581624280632ull, 17750881532067742945ull,
+ 4730180237451214279ull, 5858190679279808417ull}},
+{{5029101089539009647ull, 17055018990425934275ull,
+ 9460360474902428559ull, 11716381358559616834ull}},
+{{12073866662133532899ull, 14479050242310917824ull,
+ 16649467353948127004ull, 2343276271711923366ull}},
+{{5700989250557514182ull, 10511356410912284033ull,
+ 14852190634186702393ull, 4686552543423846733ull}},
+{{11401978501115028364ull, 2575968748115016450ull,
+ 11257637194663853171ull, 9373105086847693467ull}},
+{{13348442144448736643ull, 11583240193848734259ull,
+ 9630225068416591280ull, 1874621017369538693ull}},
+{{8250140215187921669ull, 4719736313987916903ull, 813706063123630945ull,
+ 3749242034739077387ull}},
+{{16500280430375843337ull, 9439472627975833806ull,
+ 1627412126247261890ull, 7498484069478154774ull}},
+{{3300056086075168668ull, 16645289784562808054ull,
+ 15082877684217093670ull, 1499696813895630954ull}},
+{{6600112172150337335ull, 14843835495416064492ull,
+ 11719011294724635725ull, 2999393627791261909ull}},
+{{13200224344300674670ull, 11240926917122577368ull,
+ 4991278515739719835ull, 5998787255582523819ull}},
+{{7953704614891797724ull, 4035109760535603121ull,
+ 9982557031479439671ull, 11997574511165047638ull}},
+{{1590740922978359545ull, 15564417211074761917ull,
+ 13064557850521618903ull, 2399514902233009527ull}},
+{{3181481845956719090ull, 12682090348439972218ull,
+ 7682371627333686191ull, 4799029804466019055ull}},
+{{6362963691913438179ull, 6917436623170392820ull,
+ 15364743254667372383ull, 9598059608932038110ull}},
+{{12340639182608418606ull, 12451533768859809533ull,
+ 3072948650933474476ull, 1919611921786407622ull}},
+{{6234534291507285595ull, 6456323464010067451ull,
+ 6145897301866948953ull, 3839223843572815244ull}},
+{{12469068583014571190ull, 12912646928020134902ull,
+ 12291794603733897906ull, 7678447687145630488ull}},
+{{6183162531344824562ull, 17339924644571668273ull,
+ 13526405364972510550ull, 1535689537429126097ull}},
+{{12366325062689649123ull, 16233105215433784930ull,
+ 8606066656235469485ull, 3071379074858252195ull}},
+{{6285906051669746629ull, 14019466357158018245ull,
+ 17212133312470938971ull, 6142758149716504390ull}},
+{{12571812103339493257ull, 9592188640606484874ull,
+ 15977522551232326327ull, 12285516299433008781ull}},
+{{9893060050151719298ull, 12986484172347027944ull,
+ 6884853324988375588ull, 2457103259886601756ull}},
+{{1339376026593886980ull, 7526224270984504273ull,
+ 13769706649976751177ull, 4914206519773203512ull}},
+{{2678752053187773959ull, 15052448541969008546ull,
+ 9092669226243950738ull, 9828413039546407025ull}},
+{{15293145669605196085ull, 14078536152619532678ull,
+ 1818533845248790147ull, 1965682607909281405ull}},
+{{12139547265500840554ull, 9710328231529513741ull,
+ 3637067690497580295ull, 3931365215818562810ull}},
+{{5832350457292129491ull, 973912389349475867ull, 7274135380995160591ull,
+ 7862730431637125620ull}},
+{{12234516535684156868ull, 3884131292611805496ull,
+ 1454827076199032118ull, 1572546086327425124ull}},
+{{6022288997658762120ull, 7768262585223610993ull,
+ 2909654152398064236ull, 3145092172654850248ull}},
+{{12044577995317524239ull, 15536525170447221986ull,
+ 5819308304796128472ull, 6290184345309700496ull}},
+{{5642411916925496862ull, 12626306267184892357ull,
+ 11638616609592256945ull, 12580368690619400992ull}},
+{{15885877642352740666ull, 9903958882920799117ull,
+ 9706420951402272035ull, 2516073738123880198ull}},
+{{13325011210995929715ull, 1361173692132046619ull,
+ 966097829094992455ull, 5032147476247760397ull}},
+{{8203278348282307813ull, 2722347384264093239ull,
+ 1932195658189984910ull, 10064294952495520794ull}},
+{{12708702113882192533ull, 15301864735820459940ull,
+ 15143834390605638274ull, 2012858990499104158ull}},
+{{6970660154054833449ull, 12156985397931368265ull,
+ 11840924707501724933ull, 4025717980998208317ull}},
+{{13941320308109666897ull, 5867226722153184914ull,
+ 5235105341293898251ull, 8051435961996416635ull}},
+{{2788264061621933380ull, 4862794159172547306ull,
+ 1047021068258779650ull, 1610287192399283327ull}},
+{{5576528123243866759ull, 9725588318345094612ull,
+ 2094042136517559300ull, 3220574384798566654ull}},
+{{11153056246487733517ull, 1004432562980637608ull,
+ 4188084273035118601ull, 6441148769597133308ull}},
+{{9609308878781367350ull, 14958281771563768814ull,
+ 11905663298832754689ull, 1288229753919426661ull}},
+{{771873683853183084ull, 11469819469417986013ull,
+ 5364582523955957763ull, 2576459507838853323ull}},
+{{1543747367706366168ull, 4492894865126420410ull,
+ 10729165047911915527ull, 5152919015677706646ull}},
+{{3087494735412732335ull, 8985789730252840820ull,
+ 3011586022114279438ull, 10305838031355413293ull}},
+{{4306847761824456791ull, 5486506760792478487ull,
+ 11670363648648586857ull, 2061167606271082658ull}},
+{{8613695523648913581ull, 10973013521584956974ull,
+ 4893983223587622098ull, 4122335212542165317ull}},
+{{17227391047297827161ull, 3499282969460362332ull,
+ 9787966447175244197ull, 8244670425084330634ull}},
+{{14513524653685296402ull, 4389205408633982789ull,
+ 16714988548402690132ull, 1648934085016866126ull}},
+{{10580305233661041188ull, 8778410817267965579ull,
+ 14983233023095828648ull, 3297868170033732253ull}},
+{{2713866393612530759ull, 17556821634535931159ull,
+ 11519721972482105680ull, 6595736340067464507ull}},
+{{4232122093464416475ull, 10890061956391006878ull,
+ 9682642023980241782ull, 1319147268013492901ull}},
+{{8464244186928832950ull, 3333379839072462140ull, 918539974250931949ull,
+ 2638294536026985803ull}},
+{{16928488373857665900ull, 6666759678144924280ull,
+ 1837079948501863898ull, 5276589072053971606ull}},
+{{15410232674005780184ull, 13333519356289848561ull,
+ 3674159897003727796ull, 10553178144107943212ull}},
+{{17839441793768797330ull, 13734750315483700681ull,
+ 8113529608884566205ull, 2110635628821588642ull}},
+{{17232139513828043043ull, 9022756557257849747ull,
+ 16227059217769132411ull, 4221271257643177284ull}},
+{{16017534953946534470ull, 18045513114515699495ull,
+ 14007374361828713206ull, 8442542515286354569ull}},
+{{3203506990789306894ull, 3609102622903139899ull,
+ 17558870131333383934ull, 1688508503057270913ull}},
+{{6407013981578613788ull, 7218205245806279798ull,
+ 16670996188957216252ull, 3377017006114541827ull}},
+{{12814027963157227576ull, 14436410491612559596ull,
+ 14895248304204880888ull, 6754034012229083655ull}},
+{{17320200851599086808ull, 13955328542548242888ull,
+ 2979049660840976177ull, 1350806802445816731ull}},
+{{16193657629488622000ull, 9463913011386934161ull,
+ 5958099321681952355ull, 2701613604891633462ull}},
+{{13940571185267692384ull, 481081949064316707ull,
+ 11916198643363904711ull, 5403227209783266924ull}},
+{{9434398296825833152ull, 962163898128633415ull, 5385653213018257806ull,
+ 10806454419566533849ull}},
+{{1886879659365166631ull, 192432779625726683ull,
+ 15834525901571292854ull, 2161290883913306769ull}},
+{{3773759318730333261ull, 384865559251453366ull,
+ 13222307729433034092ull, 4322581767826613539ull}},
+{{7547518637460666522ull, 769731118502906732ull, 7997871385156516568ull,
+ 8645163535653227079ull}},
+{{16266898986459774598ull, 7532643853184401992ull,
+ 16356969535998944606ull, 1729032707130645415ull}},
+{{14087053899209997579ull, 15065287706368803985ull,
+ 14267194998288337596ull, 3458065414261290831ull}},
+{{9727363724710443541ull, 11683831339028056355ull,
+ 10087645922867123577ull, 6916130828522581663ull}},
+{{1945472744942088709ull, 2336766267805611271ull,
+ 13085575628799155685ull, 1383226165704516332ull}},
+{{3890945489884177417ull, 4673532535611222542ull,
+ 7724407183888759754ull, 2766452331409032665ull}},
+{{7781890979768354833ull, 9347065071222445084ull,
+ 15448814367777519508ull, 5532904662818065330ull}},
+{{15563781959536709665ull, 247386068735338552ull,
+ 12450884661845487401ull, 11065809325636130661ull}},
+{{17870151650874983226ull, 7428174843230888356ull,
+ 6179525747111007803ull, 2213161865127226132ull}},
+{{17293559228040414836ull, 14856349686461776713ull,
+ 12359051494222015606ull, 4426323730254452264ull}},
+{{16140374382371278055ull, 11265955299214001811ull,
+ 6271358914734479597ull, 8852647460508904529ull}},
+{{10606772505958076258ull, 5942539874584710685ull,
+ 16011667041914537212ull, 1770529492101780905ull}},
+{{2766800938206600899ull, 11885079749169421371ull,
+ 13576590010119522808ull, 3541058984203561811ull}},
+{{5533601876413201798ull, 5323415424629291126ull,
+ 8706435946529494001ull, 7082117968407123623ull}},
+{{1106720375282640360ull, 15822078343893499518ull,
+ 12809333633531629769ull, 1416423593681424724ull}},
+{{2213440750565280719ull, 13197412614077447420ull,
+ 7171923193353707923ull, 2832847187362849449ull}},
+{{4426881501130561438ull, 7948081154445343224ull,
+ 14343846386707415847ull, 5665694374725698898ull}},
+{{8853763002261122876ull, 15896162308890686448ull,
+ 10240948699705280078ull, 11331388749451397797ull}},
+{{12838799044677955545ull, 3179232461778137289ull,
+ 9426887369424876662ull, 2266277749890279559ull}},
+{{7230854015646359474ull, 6358464923556274579ull, 407030665140201708ull,
+ 4532555499780559119ull}},
+{{14461708031292718948ull, 12716929847112549158ull,
+ 814061330280403416ull, 9065110999561118238ull}},
+{{10271039235742364436ull, 17300781228390151124ull,
+ 11230858710281811652ull, 1813022199912223647ull}},
+{{2095334397775177256ull, 16154818383070750633ull,
+ 4014973346854071689ull, 3626044399824447295ull}},
+{{4190668795550354512ull, 13862892692431949650ull,
+ 8029946693708143379ull, 7252088799648894590ull}},
+{{15595529018077712196ull, 17529973797454031222ull,
+ 1605989338741628675ull, 1450417759929778918ull}},
+{{12744313962445872775ull, 16613203521198510829ull,
+ 3211978677483257351ull, 2900835519859557836ull}},
+{{7041883851182193933ull, 14779662968687470043ull,
+ 6423957354966514703ull, 5801671039719115672ull}},
+{{14083767702364387865ull, 11112581863665388470ull,
+ 12847914709933029407ull, 11603342079438231344ull}},
+{{6506102355214787897ull, 5911865187474988017ull,
+ 17326978200954247174ull, 2320668415887646268ull}},
+{{13012204710429575793ull, 11823730374949976034ull,
+ 16207212328198942732ull, 4641336831775292537ull}},
+{{7577665347149599969ull, 5200716676190400453ull,
+ 13967680582688333849ull, 9282673663550585075ull}},
+{{8894230698913740641ull, 15797538594205721383ull,
+ 2793536116537666769ull, 1856534732710117015ull}},
+{{17788461397827481281ull, 13148333114701891150ull,
+ 5587072233075333539ull, 3713069465420234030ull}},
+{{17130178721945410945ull, 7849922155694230685ull,
+ 11174144466150667079ull, 7426138930840468060ull}},
+{{18183431003356723482ull, 16327379690106487429ull,
+ 2234828893230133415ull, 1485227786168093612ull}},
+{{17920117933003895348ull, 14208015306503423243ull,
+ 4469657786460266831ull, 2970455572336187224ull}},
+{{17393491792298239079ull, 9969286539297294871ull,
+ 8939315572920533663ull, 5940911144672374448ull}},
+{{16340239510886926542ull, 1491829004885038127ull,
+ 17878631145841067327ull, 11881822289344748896ull}},
+{{3268047902177385309ull, 11366412245202738595ull,
+ 7265075043910123788ull, 2376364457868949779ull}},
+{{6536095804354770617ull, 4286080416695925574ull,
+ 14530150087820247577ull, 4752728915737899558ull}},
+{{13072191608709541233ull, 8572160833391851148ull,
+ 10613556101930943538ull, 9505457831475799117ull}},
+{{13682484765967639217ull, 1714432166678370229ull,
+ 9501408849870009354ull, 1901091566295159823ull}},
+{{8918225458225726817ull, 3428864333356740459ull, 556073626030467092ull,
+ 3802183132590319647ull}},
+{{17836450916451453633ull, 6857728666713480918ull,
+ 1112147252060934184ull, 7604366265180639294ull}},
+{{7256638998032201050ull, 12439592177568427153ull,
+ 14979824709379828129ull, 1520873253036127858ull}},
+{{14513277996064402100ull, 6432440281427302690ull,
+ 11512905345050104643ull, 3041746506072255717ull}},
+{{10579811918419252584ull, 12864880562854605381ull,
+ 4579066616390657670ull, 6083493012144511435ull}},
+{{2712879763128953551ull, 7283017051999659147ull,
+ 9158133232781315341ull, 12166986024289022870ull}},
+{{11610622396851521680ull, 5145952225141842152ull,
+ 1831626646556263068ull, 2433397204857804574ull}},
+{{4774500719993491744ull, 10291904450283684305ull,
+ 3663253293112526136ull, 4866794409715609148ull}},
+{{9549001439986983487ull, 2137064826857816994ull,
+ 7326506586225052273ull, 9733588819431218296ull}},
+{{12977846732223127667ull, 15184808224339204691ull,
+ 5154650131986920777ull, 1946717763886243659ull}},
+{{7508949390736703718ull, 11922872374968857767ull,
+ 10309300263973841555ull, 3893435527772487318ull}},
+{{15017898781473407436ull, 5399000676228163918ull,
+ 2171856454238131495ull, 7786871055544974637ull}},
+{{3003579756294681488ull, 8458497764729453430ull,
+ 7813068920331446945ull, 1557374211108994927ull}},
+{{6007159512589362975ull, 16916995529458906860ull,
+ 15626137840662893890ull, 3114748422217989854ull}},
+{{12014319025178725949ull, 15387246985208262104ull,
+ 12805531607616236165ull, 6229496844435979709ull}},
+{{5581893976647900281ull, 12327749896706972593ull,
+ 7164319141522920715ull, 12458993688871959419ull}},
+{{8495076424813400703ull, 17222945238309035811ull,
+ 16190259087272225435ull, 2491798737774391883ull}},
+{{16990152849626801406ull, 15999146402908520006ull,
+ 13933774100834899255ull, 4983597475548783767ull}},
+{{15533561625544051195ull, 13551548732107488397ull,
+ 9420804127960246895ull, 9967194951097567535ull}},
+{{10485409954592630886ull, 2710309746421497679ull,
+ 1884160825592049379ull, 1993438990219513507ull}},
+{{2524075835475710155ull, 5420619492842995359ull,
+ 3768321651184098758ull, 3986877980439027014ull}},
+{{5048151670951420310ull, 10841238985685990718ull,
+ 7536643302368197516ull, 7973755960878054028ull}},
+{{8388327963674104709ull, 16925643056104839436ull,
+ 12575375104699370472ull, 1594751192175610805ull}},
+{{16776655927348209417ull, 15404542038500127256ull,
+ 6704006135689189329ull, 3189502384351221611ull}},
+{{15106567780986867217ull, 12362340003290702897ull,
+ 13408012271378378659ull, 6379004768702443222ull}},
+{{11766391488264182818ull, 6277935932871854179ull,
+ 8369280469047205703ull, 12758009537404886445ull}},
+{{9731975927136657210ull, 12323633630800101805ull,
+ 1673856093809441140ull, 2551601907480977289ull}},
+{{1017207780563762804ull, 6200523187890651995ull,
+ 3347712187618882281ull, 5103203814961954578ull}},
+{{2034415561127525608ull, 12401046375781303990ull,
+ 6695424375237764562ull, 10206407629923909156ull}},
+{{11474929556451236092ull, 13548255719381991767ull,
+ 5028433689789463235ull, 2041281525984781831ull}},
+{{4503115039192920567ull, 8649767365054431919ull,
+ 10056867379578926471ull, 4082563051969563662ull}},
+{{9006230078385841133ull, 17299534730108863838ull,
+ 1666990685448301326ull, 8165126103939127325ull}},
+{{16558641274644809520ull, 7149255760763683090ull,
+ 333398137089660265ull, 1633025220787825465ull}},
+{{14670538475580067423ull, 14298511521527366181ull,
+ 666796274179320530ull, 3266050441575650930ull}},
+{{10894332877450583230ull, 10150278969345180747ull,
+ 1333592548358641061ull, 6532100883151301860ull}},
+{{13246913019715847616ull, 5719404608610946472ull,
+ 266718509671728212ull, 1306420176630260372ull}},
+{{8047081965722143615ull, 11438809217221892945ull,
+ 533437019343456424ull, 2612840353260520744ull}},
+{{16094163931444287230ull, 4430874360734234274ull,
+ 1066874038686912849ull, 5225680706521041488ull}},
+{{13741583789179022844ull, 8861748721468468549ull,
+ 2133748077373825698ull, 10451361413042082976ull}},
+{{13816363202061535539ull, 16529745003261335002ull,
+ 4116098430216675462ull, 2090272282608416595ull}},
+{{9185982330413519461ull, 14612745932813118389ull,
+ 8232196860433350925ull, 4180544565216833190ull}},
+{{18371964660827038922ull, 10778747791916685162ull,
+ 16464393720866701851ull, 8361089130433666380ull}},
+{{14742439376391138754ull, 5845098373125247355ull,
+ 3292878744173340370ull, 1672217826086733276ull}},
+{{11038134679072725892ull, 11690196746250494711ull,
+ 6585757488346680740ull, 3344435652173466552ull}},
+{{3629525284435900168ull, 4933649418791437807ull,
+ 13171514976693361481ull, 6688871304346933104ull}},
+{{8104602686371000680ull, 986729883758287561ull,
+ 17391698254306313589ull, 1337774260869386620ull}},
+{{16209205372742001360ull, 1973459767516575122ull,
+ 16336652434903075562ull, 2675548521738773241ull}},
+{{13971666671774451104ull, 3946919535033150245ull,
+ 14226560796096599508ull, 5351097043477546483ull}},
+{{9496589269839350592ull, 7893839070066300491ull,
+ 10006377518483647400ull, 10702194086955092967ull}},
+{{12967364298193601088ull, 8957465443497080744ull,
+ 9379973133180550126ull, 2140438817391018593ull}},
+{{7487984522677650560ull, 17914930886994161489ull,
+ 313202192651548636ull, 4280877634782037187ull}},
+{{14975969045355301120ull, 17383117700278771362ull,
+ 626404385303097273ull, 8561755269564074374ull}},
+{{17752589068038701517ull, 10855321169539574918ull,
+ 14882676136028260747ull, 1712351053912814874ull}},
+{{17058434062367851418ull, 3263898265369598221ull,
+ 11318608198346969879ull, 3424702107825629749ull}},
+{{15670124051026151219ull, 6527796530739196443ull,
+ 4190472322984388142ull, 6849404215651259499ull}},
+{{17891420069172871537ull, 4994908120889749611ull,
+ 15595489723564518921ull, 1369880843130251899ull}},
+{{17336096064636191458ull, 9989816241779499223ull,
+ 12744235373419486226ull, 2739761686260503799ull}},
+{{16225448055562831299ull, 1532888409849446831ull,
+ 7041726673129420837ull, 5479523372521007599ull}},
+{{14004152037416110981ull, 3065776819698893663ull,
+ 14083453346258841674ull, 10959046745042015198ull}},
+{{2800830407483222197ull, 7991852993423599379ull,
+ 13884737113477499304ull, 2191809349008403039ull}},
+{{5601660814966444393ull, 15983705986847198758ull,
+ 9322730153245446992ull, 4383618698016806079ull}},
+{{11203321629932888785ull, 13520667899984845900ull,
+ 198716232781342369ull, 8767237396033612159ull}},
+{{13308710770212308727ull, 13772180024222700149ull,
+ 14797138505523909766ull, 1753447479206722431ull}},
+{{8170677466715065837ull, 9097615974735848683ull,
+ 11147532937338267917ull, 3506894958413444863ull}},
+{{16341354933430131674ull, 18195231949471697366ull,
+ 3848321800966984218ull, 7013789916826889727ull}},
+{{6957619801427936658ull, 3639046389894339473ull,
+ 8148361989677217490ull, 1402757983365377945ull}},
+{{13915239602855873316ull, 7278092779788678946ull,
+ 16296723979354434980ull, 2805515966730755890ull}},
+{{9383735132002195016ull, 14556185559577357893ull,
+ 14146703884999318344ull, 5611031933461511781ull}},
+{{320726190294838416ull, 10665627045445164171ull,
+ 9846663696289085073ull, 11222063866923023563ull}},
+{{7442842867542788330ull, 5822474223830943157ull,
+ 13037379183483547984ull, 2244412773384604712ull}},
+{{14885685735085576660ull, 11644948447661886314ull,
+ 7628014293257544352ull, 4488825546769209425ull}},
+{{11324627396461601703ull, 4843152821614221013ull,
+ 15256028586515088705ull, 8977651093538418850ull}},
+{{13332971923518051311ull, 968630564322844202ull,
+ 3051205717303017741ull, 1795530218707683770ull}},
+{{8219199773326551005ull, 1937261128645688405ull,
+ 6102411434606035482ull, 3591060437415367540ull}},
+{{16438399546653102009ull, 3874522257291376810ull,
+ 12204822869212070964ull, 7182120874830735080ull}},
+{{18045075168298261695ull, 15532299710425916654ull,
+ 2440964573842414192ull, 1436424174966147016ull}},
+{{17643406262886971773ull, 12617855347142281693ull,
+ 4881929147684828385ull, 2872848349932294032ull}},
+{{16840068452064391930ull, 6788966620575011771ull,
+ 9763858295369656771ull, 5745696699864588064ull}},
+{{15233392830419232244ull, 13577933241150023543ull,
+ 1080972517029761926ull, 11491393399729176129ull}},
+{{14114725010309577419ull, 2715586648230004708ull,
+ 14973589762373593678ull, 2298278679945835225ull}},
+{{9782705946909603221ull, 5431173296460009417ull,
+ 11500435451037635740ull, 4596557359891670451ull}},
+{{1118667820109654825ull, 10862346592920018835ull,
+ 4554126828365719864ull, 9193114719783340903ull}},
+{{7602431193505751612ull, 9551166948067824413ull,
+ 11978871809898874942ull, 1838622943956668180ull}},
+{{15204862387011503223ull, 655589822426097210ull,
+ 5510999546088198269ull, 3677245887913336361ull}},
+{{11962980700313454830ull, 1311179644852194421ull,
+ 11021999092176396538ull, 7354491775826672722ull}},
+{{6081944954804601290ull, 262235928970438884ull, 9583097447919099954ull,
+ 1470898355165334544ull}},
+{{12163889909609202579ull, 524471857940877768ull, 719450822128648292ull,
+ 2941796710330669089ull}},
+{{5881035745508853541ull, 1048943715881755537ull,
+ 1438901644257296584ull, 5883593420661338178ull}},
+{{11762071491017707081ull, 2097887431763511074ull,
+ 2877803288514593168ull, 11767186841322676356ull}},
+{{13420460742429272386ull, 15176972745320343507ull,
+ 4264909472444828956ull, 2353437368264535271ull}},
+{{8394177411148993156ull, 11907201416931135399ull,
+ 8529818944889657913ull, 4706874736529070542ull}},
+{{16788354822297986312ull, 5367658760152719182ull,
+ 17059637889779315827ull, 9413749473058141084ull}},
+{{14425717408685328232ull, 4762880566772454159ull,
+ 18169322836923504458ull, 1882749894611628216ull}},
+{{10404690743661104848ull, 9525761133544908319ull,
+ 17891901600137457300ull, 3765499789223256433ull}},
+{{2362637413612658080ull, 604778193380265023ull,
+ 17337059126565362985ull, 7530999578446512867ull}},
+{{472527482722531616ull, 7499653268159873651ull,
+ 10846109454796893243ull, 1506199915689302573ull}},
+{{945054965445063232ull, 14999306536319747302ull,
+ 3245474835884234870ull, 3012399831378605147ull}},
+{{1890109930890126464ull, 11551868998929942988ull,
+ 6490949671768469741ull, 6024799662757210294ull}},
+{{3780219861780252927ull, 4656993924150334360ull,
+ 12981899343536939483ull, 12049599325514420588ull}},
+{{4445392787097960909ull, 4620747599571977195ull,
+ 13664426312933118866ull, 2409919865102884117ull}},
+{{8890785574195921818ull, 9241495199143954390ull,
+ 8882108552156686116ull, 4819839730205768235ull}},
+{{17781571148391843635ull, 36246324578357164ull,
+ 17764217104313372233ull, 9639679460411536470ull}},
+{{10935011859162189374ull, 11075295709141402402ull,
+ 3552843420862674446ull, 1927935892082307294ull}},
+{{3423279644614827131ull, 3703847344573253189ull,
+ 7105686841725348893ull, 3855871784164614588ull}},
+{{6846559289229654262ull, 7407694689146506378ull,
+ 14211373683450697786ull, 7711743568329229176ull}},
+{{1369311857845930853ull, 8860236567313121922ull,
+ 6531623551432049880ull, 1542348713665845835ull}},
+{{2738623715691861705ull, 17720473134626243844ull,
+ 13063247102864099760ull, 3084697427331691670ull}},
+{{5477247431383723409ull, 16994202195542936072ull,
+ 7679750132018647905ull, 6169394854663383341ull}},
+{{10954494862767446818ull, 15541660317376320528ull,
+ 15359500264037295811ull, 12338789709326766682ull}},
+{{5880247787295399687ull, 14176378507700995075ull,
+ 10450597682291279808ull, 2467757941865353336ull}},
+{{11760495574590799374ull, 9906012941692438534ull,
+ 2454451290873008001ull, 4935515883730706673ull}},
+{{5074247075472047131ull, 1365281809675325453ull,
+ 4908902581746016003ull, 9871031767461413346ull}},
+{{8393547044578230073ull, 15030451620902706383ull,
+ 4671129331091113523ull, 1974206353492282669ull}},
+{{16787094089156460146ull, 11614159168095861150ull,
+ 9342258662182227047ull, 3948412706984565338ull}},
+{{15127444104603368675ull, 4781574262482170685ull,
+ 237773250654902479ull, 7896825413969130677ull}},
+{{6714837635662584059ull, 4645663667238344460ull,
+ 7426252279614801142ull, 1579365082793826135ull}},
+{{13429675271325168117ull, 9291327334476688920ull,
+ 14852504559229602284ull, 3158730165587652270ull}},
+{{8412606468940784617ull, 135910595243826225ull,
+ 11258265044749652953ull, 6317460331175304541ull}},
+{{16825212937881569233ull, 271821190487652450ull,
+ 4069786015789754290ull, 12634920662350609083ull}},
+{{14433089031802044817ull, 11122410682323261459ull,
+ 11882003647383681827ull, 2526984132470121816ull}},
+{{10419433989894538017ull, 3798077290936971303ull,
+ 5317263221057812039ull, 5053968264940243633ull}},
+{{2392123906079524417ull, 7596154581873942607ull,
+ 10634526442115624078ull, 10107936529880487266ull}},
+{{4167773595957815207ull, 16276626175342429814ull,
+ 5816254103165035138ull, 2021587305976097453ull}},
+{{8335547191915630413ull, 14106508276975308012ull,
+ 11632508206330070277ull, 4043174611952194906ull}},
+{{16671094383831260826ull, 9766272480241064408ull,
+ 4818272338950588939ull, 8086349223904389813ull}},
+{{3334218876766252166ull, 9331952125532033528ull,
+ 12031700912015848757ull, 1617269844780877962ull}},
+{{6668437753532504331ull, 217160177354515440ull, 5616657750322145899ull,
+ 3234539689561755925ull}},
+{{13336875507065008661ull, 434320354709030880ull,
+ 11233315500644291798ull, 6469079379123511850ull}},
+{{13735421545638732702ull, 11154910515167537145ull,
+ 2246663100128858359ull, 1293815875824702370ull}},
+{{9024099017567913788ull, 3863076956625522675ull,
+ 4493326200257716719ull, 2587631751649404740ull}},
+{{18048198035135827576ull, 7726153913251045350ull,
+ 8986652400515433438ull, 5175263503298809480ull}},
+{{17649651996562103535ull, 15452307826502090701ull,
+ 17973304801030866876ull, 10350527006597618960ull}},
+{{10908628028796241354ull, 6779810380042328463ull,
+ 3594660960206173375ull, 2070105401319523792ull}},
+{{3370511983882931091ull, 13559620760084656927ull,
+ 7189321920412346750ull, 4140210802639047584ull}},
+{{6741023967765862181ull, 8672497446459762238ull,
+ 14378643840824693501ull, 8280421605278095168ull}},
+{{8726902423036993083ull, 16491894748259593740ull,
+ 13943775212390669669ull, 1656084321055619033ull}},
+{{17453804846073986166ull, 14537045422809635864ull,
+ 9440806351071787723ull, 3312168642111238067ull}},
+{{16460865618438420715ull, 10627346771909720113ull,
+ 434868628434023831ull, 6624337284222476135ull}},
+{{18049568382655325436ull, 5814818169123854345ull, 86973725686804766ull,
+ 1324867456844495227ull}},
+{{17652392691601099256ull, 11629636338247708691ull,
+ 173947451373609532ull, 2649734913688990454ull}},
+{{16858041309492646895ull, 4812528602785865767ull,
+ 347894902747219065ull, 5299469827377980908ull}},
+{{15269338545275742174ull, 9625057205571731535ull,
+ 695789805494438130ull, 10598939654755961816ull}},
+{{6743216523797058758ull, 5614360255856256630ull,
+ 3828506775840797949ull, 2119787930951192363ull}},
+{{13486433047594117516ull, 11228720511712513260ull,
+ 7657013551681595898ull, 4239575861902384726ull}},
+{{8526122021478683416ull, 4010696949715474905ull,
+ 15314027103363191797ull, 8479151723804769452ull}},
+{{16462619663263377976ull, 15559534648910736273ull,
+ 10441503050156459005ull, 1695830344760953890ull}},
+{{14478495252817204336ull, 12672325224111920931ull,
+ 2436262026603366395ull, 3391660689521907781ull}},
+{{10510246431924857056ull, 6897906374514290247ull,
+ 4872524053206732791ull, 6783321379043815562ull}},
+{{2102049286384971412ull, 12447627719128589019ull,
+ 8353202440125167204ull, 1356664275808763112ull}},
+{{4204098572769942823ull, 6448511364547626422ull,
+ 16706404880250334409ull, 2713328551617526224ull}},
+{{8408197145539885645ull, 12897022729095252844ull,
+ 14966065686791117202ull, 5426657103235052449ull}},
+{{16816394291079771289ull, 7347301384480954072ull,
+ 11485387299872682789ull, 10853314206470104899ull}},
+{{3363278858215954258ull, 12537506721121921784ull,
+ 17054472718942177850ull, 2170662841294020979ull}},
+{{6726557716431908516ull, 6628269368534291952ull,
+ 15662201364174804085ull, 4341325682588041959ull}},
+{{13453115432863817032ull, 13256538737068583904ull,
+ 12877658654640056554ull, 8682651365176083919ull}},
+{{10069320716056584053ull, 13719354191639447750ull,
+ 17332926989895652603ull, 1736530273035216783ull}},
+{{1691897358403616490ull, 8991964309569343885ull,
+ 16219109906081753591ull, 3473060546070433567ull}},
+{{3383794716807232979ull, 17983928619138687770ull,
+ 13991475738453955566ull, 6946121092140867135ull}},
+{{4366107758103356919ull, 7286134538569647877ull,
+ 2798295147690791113ull, 1389224218428173427ull}},
+{{8732215516206713838ull, 14572269077139295754ull,
+ 5596590295381582226ull, 2778448436856346854ull}},
+{{17464431032413427676ull, 10697794080569039892ull,
+ 11193180590763164453ull, 5556896873712693708ull}},
+{{16482117991117303736ull, 2948844087428528169ull,
+ 3939617107816777291ull, 11113793747425387417ull}},
+{{10675121227707281394ull, 11657815261711436603ull,
+ 8166621051047176104ull, 2222758749485077483ull}},
+{{2903498381705011171ull, 4868886449713321591ull,
+ 16333242102094352209ull, 4445517498970154966ull}},
+{{5806996763410022342ull, 9737772899426643182ull,
+ 14219740130479152802ull, 8891034997940309933ull}},
+{{8540096982165825115ull, 1947554579885328636ull,
+ 13911994470321561530ull, 1778206999588061986ull}},
+{{17080193964331650230ull, 3895109159770657272ull,
+ 9377244866933571444ull, 3556413999176123973ull}},
+{{15713643854953748843ull, 7790218319541314545ull,
+ 307745660157591272ull, 7112827998352247947ull}},
+{{17900124029958391062ull, 16315438922875904201ull,
+ 7440246761515338900ull, 1422565599670449589ull}},
+{{17353503986207230507ull, 14184133772042256787ull,
+ 14880493523030677801ull, 2845131199340899178ull}},
+{{16260263898704909398ull, 9921523470374961959ull,
+ 11314242972351803987ull, 5690262398681798357ull}},
+{{14073783723700267180ull, 1396302867040372303ull,
+ 4181741870994056359ull, 11380524797363596715ull}},
+{{10193454374223874083ull, 15036655832375715753ull,
+ 836348374198811271ull, 2276104959472719343ull}},
+{{1940164674738196549ull, 11626567591041879891ull,
+ 1672696748397622543ull, 4552209918945438686ull}},
+{{3880329349476393097ull, 4806391108374208166ull,
+ 3345393496795245087ull, 9104419837890877372ull}},
+{{776065869895278620ull, 15718673480642482926ull,
+ 8047776328842869663ull, 1820883967578175474ull}},
+{{1552131739790557239ull, 12990602887575414236ull,
+ 16095552657685739327ull, 3641767935156350948ull}},
+{{3104263479581114478ull, 7534461701441276856ull,
+ 13744361241661927039ull, 7283535870312701897ull}},
+{{7999550325400043542ull, 5196241155030165694ull,
+ 10127569877816206054ull, 1456707174062540379ull}},
+{{15999100650800087084ull, 10392482310060331388ull,
+ 1808395681922860492ull, 2913414348125080759ull}},
+{{13551457227890622552ull, 2338220546411111161ull,
+ 3616791363845720985ull, 5826828696250161518ull}},
+{{8656170382071693488ull, 4676441092822222323ull,
+ 7233582727691441970ull, 11653657392500323036ull}},
+{{16488629335381979991ull, 4624637033306354787ull,
+ 5136065360280198717ull, 2330731478500064607ull}},
+{{14530514597054408365ull, 9249274066612709575ull,
+ 10272130720560397434ull, 4661462957000129214ull}},
+{{10614285120399265113ull, 51804059515867535ull, 2097517367411243253ull,
+ 9322925914000258429ull}},
+{{9501554653563673669ull, 7389058441386994153ull,
+ 15176898732449889943ull, 1864585182800051685ull}},
+{{556365233417795722ull, 14778116882773988307ull,
+ 11907053391190228270ull, 3729170365600103371ull}},
+{{1112730466835591444ull, 11109489691838424998ull,
+ 5367362708670904925ull, 7458340731200206743ull}},
+{{3911894908109028612ull, 13289944382593415969ull,
+ 12141518985959911954ull, 1491668146240041348ull}},
+{{7823789816218057224ull, 8133144691477280322ull,
+ 5836293898210272293ull, 2983336292480082697ull}},
+{{15647579632436114448ull, 16266289382954560644ull,
+ 11672587796420544586ull, 5966672584960165394ull}},
+{{12848415191162677280ull, 14085834692199569673ull,
+ 4898431519131537557ull, 11933345169920330789ull}},
+{{17327078297200176749ull, 6506515753181824257ull,
+ 15737081562793948804ull, 2386669033984066157ull}},
+{{16207412520690801882ull, 13013031506363648515ull,
+ 13027419051878345992ull, 4773338067968132315ull}},
+{{13968080967672052148ull, 7579318939017745415ull,
+ 7608094030047140369ull, 9546676135936264631ull}},
+{{2793616193534410430ull, 1515863787803549083ull,
+ 5210967620751338397ull, 1909335227187252926ull}},
+{{5587232387068820859ull, 3031727575607098166ull,
+ 10421935241502676794ull, 3818670454374505852ull}},
+{{11174464774137641718ull, 6063455151214196332ull,
+ 2397126409295801972ull, 7637340908749011705ull}},
+{{16992288213795169637ull, 8591388659726659912ull,
+ 479425281859160394ull, 1527468181749802341ull}},
+{{15537832353880787657ull, 17182777319453319825ull,
+ 958850563718320788ull, 3054936363499604682ull}},
+{{12628920634052023698ull, 15918810565197088035ull,
+ 1917701127436641577ull, 6109872726999209364ull}},
+{{6811097194394495779ull, 13390877056684624455ull,
+ 3835402254873283155ull, 12219745453998418728ull}},
+{{12430265883104630126ull, 13746221855562655860ull,
+ 11835126895200387600ull, 2443949090799683745ull}},
+{{6413787692499708635ull, 9045699637415760105ull,
+ 5223509716691223585ull, 4887898181599367491ull}},
+{{12827575384999417270ull, 18091399274831520210ull,
+ 10447019433382447170ull, 9775796363198734982ull}},
+{{9944212706483704101ull, 10996977484450124688ull,
+ 9468101516160310080ull, 1955159272639746996ull}},
+{{1441681339257856585ull, 3547210895190697761ull, 489458958611068545ull,
+ 3910318545279493993ull}},
+{{2883362678515713170ull, 7094421790381395522ull, 978917917222137090ull,
+ 7820637090558987986ull}},
+{{11644718979928873604ull, 5108233172818189427ull,
+ 3885132398186337741ull, 1564127418111797597ull}},
+{{4842693886148195591ull, 10216466345636378855ull,
+ 7770264796372675482ull, 3128254836223595194ull}},
+{{9685387772296391182ull, 1986188617563206094ull,
+ 15540529592745350965ull, 6256509672447190388ull}},
+{{924031470883230748ull, 3972377235126412189ull,
+ 12634315111781150314ull, 12513019344894380777ull}},
+{{184806294176646150ull, 4483824261767192761ull, 9905560651840050709ull,
+ 2502603868978876155ull}},
+{{369612588353292299ull, 8967648523534385522ull, 1364377229970549802ull,
+ 5005207737957752311ull}},
+{{739225176706584598ull, 17935297047068771044ull,
+ 2728754459941099604ull, 10010415475915504622ull}},
+{{147845035341316920ull, 7276408224155664532ull, 7924448521472040567ull,
+ 2002083095183100924ull}},
+{{295690070682633840ull, 14552816448311329064ull,
+ 15848897042944081134ull, 4004166190366201848ull}},
+{{591380141365267679ull, 10658888822913106512ull,
+ 13251050012178610653ull, 8008332380732403697ull}},
+{{7496973657756874183ull, 2131777764582621302ull,
+ 10028907631919542777ull, 1601666476146480739ull}},
+{{14993947315513748365ull, 4263555529165242604ull,
+ 1611071190129533938ull, 3203332952292961479ull}},
+{{11541150557317945113ull, 8527111058330485209ull,
+ 3222142380259067876ull, 6406665904585922958ull}},
+{{13376276555689319993ull, 16462817470633738334ull,
+ 11712474920277544544ull, 1281333180917184591ull}},
+{{8305809037669088369ull, 14478890867557925053ull,
+ 4978205766845537473ull, 2562666361834369183ull}},
+{{16611618075338176737ull, 10511037661406298490ull,
+ 9956411533691074947ull, 5125332723668738366ull}},
+{{14776492076966801857ull, 2575331249103045365ull,
+ 1466078993672598279ull, 10250665447337476733ull}},
+{{10333996044877181018ull, 7893763879304429719ull,
+ 11361262242960250625ull, 2050133089467495346ull}},
+{{2221248016044810420ull, 15787527758608859439ull,
+ 4275780412210949634ull, 4100266178934990693ull}},
+{{4442496032089620839ull, 13128311443508167262ull,
+ 8551560824421899269ull, 8200532357869981386ull}},
+{{8267196835901744815ull, 2625662288701633452ull,
+ 5399660979626290177ull, 1640106471573996277ull}},
+{{16534393671803489629ull, 5251324577403266904ull,
+ 10799321959252580354ull, 3280212943147992554ull}},
+{{14622043269897427641ull, 10502649154806533809ull,
+ 3151899844795609092ull, 6560425886295985109ull}},
+{{2924408653979485529ull, 5789878645703217085ull,
+ 15387775227926763111ull, 1312085177259197021ull}},
+{{5848817307958971057ull, 11579757291406434170ull,
+ 12328806382143974606ull, 2624170354518394043ull}},
+{{11697634615917942113ull, 4712770509103316724ull,
+ 6210868690578397597ull, 5248340709036788087ull}},
+{{4948525158126332609ull, 9425541018206633449ull,
+ 12421737381156795194ull, 10496681418073576174ull}},
+{{8368402661109087169ull, 12953154647867057659ull,
+ 17241742735199000331ull, 2099336283614715234ull}},
+{{16736805322218174337ull, 7459565222024563702ull,
+ 16036741396688449047ull, 4198672567229430469ull}},
+{{15026866570726797057ull, 14919130444049127405ull,
+ 13626738719667346478ull, 8397345134458860939ull}},
+{{10384070943629180058ull, 10362523718293646127ull,
+ 17482743002901110588ull, 1679469026891772187ull}},
+{{2321397813548808500ull, 2278303362877740639ull,
+ 16518741932092669561ull, 3358938053783544375ull}},
+{{4642795627097617000ull, 4556606725755481278ull,
+ 14590739790475787506ull, 6717876107567088751ull}},
+{{928559125419523400ull, 8290018974634916902ull, 6607496772837067824ull,
+ 1343575221513417750ull}},
+{{1857118250839046800ull, 16580037949269833804ull,
+ 13214993545674135648ull, 2687150443026835500ull}},
+{{3714236501678093600ull, 14713331824830115992ull,
+ 7983243017638719681ull, 5374300886053671001ull}},
+{{7428473003356187199ull, 10979919575950680368ull,
+ 15966486035277439363ull, 10748601772107342002ull}},
+{{12553741044896968410ull, 2195983915190136073ull,
+ 10571994836539308519ull, 2149720354421468400ull}},
+{{6660738016084385203ull, 4391967830380272147ull,
+ 2697245599369065422ull, 4299440708842936801ull}},
+{{13321476032168770406ull, 8783935660760544294ull,
+ 5394491198738130844ull, 8598881417685873602ull}},
+{{2664295206433754082ull, 5446135946894019182ull,
+ 8457595869231446815ull, 1719776283537174720ull}},
+{{5328590412867508163ull, 10892271893788038364ull,
+ 16915191738462893630ull, 3439552567074349440ull}},
+{{10657180825735016325ull, 3337799713866525112ull,
+ 15383639403216235645ull, 6879105134148698881ull}},
+{{13199482609372734235ull, 4356908757515215345ull,
+ 6766076695385157452ull, 1375821026829739776ull}},
+{{7952221145035916853ull, 8713817515030430691ull,
+ 13532153390770314904ull, 2751642053659479552ull}},
+{{15904442290071833706ull, 17427635030060861382ull,
+ 8617562707831078192ull, 5503284107318959105ull}},
+{{13362140506434115796ull, 16408525986412171149ull,
+ 17235125415662156385ull, 11006568214637918210ull}},
+{{17429823360254464452ull, 3281705197282434229ull,
+ 3447025083132431277ull, 2201313642927583642ull}},
+{{16412902646799377288ull, 6563410394564868459ull,
+ 6894050166264862554ull, 4402627285855167284ull}},
+{{14379061219889202960ull, 13126820789129736919ull,
+ 13788100332529725108ull, 8805254571710334568ull}},
+{{2875812243977840592ull, 6314712972567857707ull,
+ 13825666510731675991ull, 1761050914342066913ull}},
+{{5751624487955681184ull, 12629425945135715414ull,
+ 9204588947753800366ull, 3522101828684133827ull}},
+{{11503248975911362368ull, 6812107816561879212ull,
+ 18409177895507600733ull, 7044203657368267654ull}},
+{{17058045054149913767ull, 8741119192796196488ull,
+ 18439230838069161439ull, 1408840731473653530ull}},
+{{15669346034590275917ull, 17482238385592392977ull,
+ 18431717602428771262ull, 2817681462947307061ull}},
+{{12891947995471000218ull, 16517732697475234339ull,
+ 18416691131147990909ull, 5635362925894614123ull}},
+{{7337151917232448819ull, 14588721321240917063ull,
+ 18386638188586430203ull, 11270725851789228247ull}},
+{{12535476827672220734ull, 2917744264248183412ull,
+ 11056025267201106687ull, 2254145170357845649ull}},
+{{6624209581634889851ull, 5835488528496366825ull,
+ 3665306460692661758ull, 4508290340715691299ull}},
+{{13248419163269779702ull, 11670977056992733650ull,
+ 7330612921385323516ull, 9016580681431382598ull}},
+{{17407079091621597234ull, 17091590670366188022ull,
+ 12534169028502795672ull, 1803316136286276519ull}},
+{{16367414109533642851ull, 15736437267022824429ull,
+ 6621593983296039729ull, 3606632272572553039ull}},
+{{14288084145357734085ull, 13026130460336097243ull,
+ 13243187966592079459ull, 7213264545145106078ull}},
+{{2857616829071546817ull, 9983923721551040095ull,
+ 13716684037544146861ull, 1442652909029021215ull}},
+{{5715233658143093634ull, 1521103369392528574ull,
+ 8986624001378742107ull, 2885305818058042431ull}},
+{{11430467316286187268ull, 3042206738785057148ull,
+ 17973248002757484214ull, 5770611636116084862ull}},
+{{4414190558862822919ull, 6084413477570114297ull,
+ 17499751931805416812ull, 11541223272232169725ull}},
+{{15640233370740205877ull, 8595580324997843505ull,
+ 3499950386361083362ull, 2308244654446433945ull}},
+{{12833722667770860138ull, 17191160649995687011ull,
+ 6999900772722166724ull, 4616489308892867890ull}},
+{{7220701261832168659ull, 15935577226281822407ull,
+ 13999801545444333449ull, 9232978617785735780ull}},
+{{5133489067108344055ull, 17944510704224005774ull,
+ 2799960309088866689ull, 1846595723557147156ull}},
+{{10266978134216688110ull, 17442277334738459932ull,
+ 5599920618177733379ull, 3693191447114294312ull}},
+{{2087212194723824604ull, 16437810595767368249ull,
+ 11199841236355466759ull, 7386382894228588624ull}},
+{{7796140068428585568ull, 14355608563379204619ull,
+ 16997363506238734644ull, 1477276578845717724ull}},
+{{15592280136857171135ull, 10264473053048857622ull,
+ 15547982938767917673ull, 2954553157691435449ull}},
+{{12737816200004790653ull, 2082202032388163629ull,
+ 12649221803826283731ull, 5909106315382870899ull}},
+{{7028888326300029689ull, 4164404064776327259ull,
+ 6851699533943015846ull, 11818212630765741799ull}},
+{{16163172924227647231ull, 832880812955265451ull,
+ 16127735165756244462ull, 2363642526153148359ull}},
+{{13879601774745742846ull, 1665761625910530903ull,
+ 13808726257802937308ull, 4727285052306296719ull}},
+{{9312459475781934075ull, 3331523251821061807ull,
+ 9170708441896323000ull, 9454570104612593439ull}},
+{{5551840709898297139ull, 15423699909331853654ull,
+ 16591536947346905892ull, 1890914020922518687ull}},
+{{11103681419796594277ull, 12400655744954155692ull,
+ 14736329820984260169ull, 3781828041845037375ull}},
+{{3760618765883636937ull, 6354567416198759769ull,
+ 11025915568258968723ull, 7563656083690074751ull}},
+{{11820170197402458357ull, 16028308742207393246ull,
+ 5894531928393704067ull, 1512731216738014950ull}},
+{{5193596321095365098ull, 13609873410705234877ull,
+ 11789063856787408135ull, 3025462433476029900ull}},
+{{10387192642190730196ull, 8773002747700918138ull,
+ 5131383639865264655ull, 6050924866952059801ull}},
+{{2327641210671908775ull, 17546005495401836277ull,
+ 10262767279730529310ull, 12101849733904119602ull}},
+{{15222923501102023048ull, 10887898728564187901ull,
+ 9431251085429926508ull, 2420369946780823920ull}},
+{{11999102928494494480ull, 3329053383418824187ull,
+ 415758097150301401ull, 4840739893561647841ull}},
+{{5551461783279437343ull, 6658106766837648375ull, 831516194300602802ull,
+ 9681479787123295682ull}},
+{{15867687615623528762ull, 16089016612335170967ull,
+ 7545000868343941206ull, 1936295957424659136ull}},
+{{13288631157537505907ull, 13731289150960790319ull,
+ 15090001736687882413ull, 3872591914849318272ull}},
+{{8130518241365460198ull, 9015834228212029023ull,
+ 11733259399666213211ull, 7745183829698636545ull}},
+{{16383498907240733333ull, 5492515660384316127ull,
+ 2346651879933242642ull, 1549036765939727309ull}},
+{{14320253740771915049ull, 10985031320768632255ull,
+ 4693303759866485284ull, 3098073531879454618ull}},
+{{10193763407834278482ull, 3523318567827712895ull,
+ 9386607519732970569ull, 6196147063758909236ull}},
+{{1940782741959005347ull, 7046637135655425791ull, 326470965756389522ull,
+ 12392294127517818473ull}},
+{{4077505363133711393ull, 1409327427131085158ull,
+ 11133340637377008874ull, 2478458825503563694ull}},
+{{8155010726267422785ull, 2818654854262170316ull,
+ 3819937201044466132ull, 4956917651007127389ull}},
+{{16310021452534845570ull, 5637309708524340632ull,
+ 7639874402088932264ull, 9913835302014254778ull}},
+{{18019399549474610407ull, 8506159571188688772ull,
+ 12596021324643517422ull, 1982767060402850955ull}},
+{{17592055025239669198ull, 17012319142377377545ull,
+ 6745298575577483228ull, 3965534120805701911ull}},
+{{16737365976769786780ull, 15577894211045203475ull,
+ 13490597151154966457ull, 7931068241611403822ull}},
+{{18104868454321598649ull, 17872974101176681987ull,
+ 10076817059714813937ull, 1586213648322280764ull}},
+{{17762992834933645682ull, 17299204128643812359ull,
+ 1706890045720076259ull, 3172427296644561529ull}},
+{{17079241596157739747ull, 16151664183578073103ull,
+ 3413780091440152519ull, 6344854593289123058ull}},
+{{15711739118605927877ull, 13856584293446594591ull,
+ 6827560182880305039ull, 12689709186578246116ull}},
+{{6831696638463095899ull, 2771316858689318918ull,
+ 5054860851317971331ull, 2537941837315649223ull}},
+{{13663393276926191798ull, 5542633717378637836ull,
+ 10109721702635942662ull, 5075883674631298446ull}},
+{{8880042480142831979ull, 11085267434757275673ull,
+ 1772699331562333708ull, 10151767349262596893ull}},
+{{16533403754996207689ull, 5906402301693365457ull,
+ 11422586310538197711ull, 2030353469852519378ull}},
+{{14620063436282863761ull, 11812804603386730915ull,
+ 4398428547366843806ull, 4060706939705038757ull}},
+{{10793382798856175906ull, 5178865133063910215ull,
+ 8796857094733687613ull, 8121413879410077514ull}},
+{{9537374189255055828ull, 8414470656096602689ull,
+ 16516766677914378815ull, 1624282775882015502ull}},
+{{628004304800560040ull, 16828941312193205379ull,
+ 14586789282119206014ull, 3248565551764031005ull}},
+{{1256008609601120079ull, 15211138550676859142ull,
+ 10726834490528860413ull, 6497131103528062011ull}},
+{{3940550536662134339ull, 17799622969103013121ull,
+ 5834715712847682405ull, 1299426220705612402ull}},
+{{7881101073324268678ull, 17152501864496474626ull,
+ 11669431425695364811ull, 2598852441411224804ull}},
+{{15762202146648537356ull, 15858259655283397636ull,
+ 4892118777681178007ull, 5197704882822449609ull}},
+{{13077660219587523095ull, 13269775236857243657ull,
+ 9784237555362356015ull, 10395409765644899218ull}},
+{{2615532043917504619ull, 13722001491597179701ull,
+ 13024893955298202172ull, 2079081953128979843ull}},
+{{5231064087835009238ull, 8997258909484807786ull,
+ 7603043836886852729ull, 4158163906257959687ull}},
+{{10462128175670018476ull, 17994517818969615572ull,
+ 15206087673773705458ull, 8316327812515919374ull}},
+{{16849820894101644988ull, 10977601193277743760ull,
+ 17798612793722382384ull, 1663265562503183874ull}},
+{{15252897714493738360ull, 3508458312845935905ull,
+ 17150481513735213153ull, 3326531125006367749ull}},
+{{12059051355277925104ull, 7016916625691871811ull,
+ 15854218953760874690ull, 6653062250012735499ull}},
+{{2411810271055585021ull, 16160778584106015655ull,
+ 17928239049719816230ull, 1330612450002547099ull}},
+{{4823620542111170042ull, 13874813094502479694ull,
+ 17409734025730080845ull, 2661224900005094199ull}},
+{{9647241084222340084ull, 9302882115295407772ull,
+ 16372723977750610075ull, 5322449800010188399ull}},
+{{847738094735128551ull, 159020156881263929ull, 14298703881791668535ull,
+ 10644899600020376799ull}},
+{{11237594063172756680ull, 14789199290343894078ull,
+ 17617136035325974999ull, 2128979920004075359ull}},
+{{4028444052635961744ull, 11131654506978236541ull,
+ 16787527996942398383ull, 4257959840008150719ull}},
+{{8056888105271923487ull, 3816564940246921466ull,
+ 15128311920175245151ull, 8515919680016301439ull}},
+{{5300726435796295021ull, 763312988049384293ull,
+ 17783057643002690323ull, 1703183936003260287ull}},
+{{10601452871592590042ull, 1526625976098768586ull,
+ 17119371212295829030ull, 3406367872006520575ull}},
+{{2756161669475628467ull, 3053251952197537173ull,
+ 15791998350882106444ull, 6812735744013041151ull}},
+{{11619278778120856663ull, 610650390439507434ull,
+ 6847748484918331612ull, 1362547148802608230ull}},
+{{4791813482532161710ull, 1221300780879014869ull,
+ 13695496969836663224ull, 2725094297605216460ull}},
+{{9583626965064323420ull, 2442601561758029738ull,
+ 8944249865963774832ull, 5450188595210432921ull}},
+{{720509856419095223ull, 4885203123516059477ull,
+ 17888499731927549664ull, 10900377190420865842ull}},
+{{11212148415509550015ull, 4666389439445122218ull,
+ 10956397575869330579ull, 2180075438084173168ull}},
+{{3977552757309548413ull, 9332778878890244437ull,
+ 3466051078029109542ull, 4360150876168346337ull}},
+{{7955105514619096825ull, 218813684070937258ull, 6932102156058219085ull,
+ 8720301752336692674ull}},
+{{8969718732407640012ull, 14801157995781828744ull,
+ 16143815690179285109ull, 1744060350467338534ull}},
+{{17939437464815280023ull, 11155571917854105872ull,
+ 13840887306649018603ull, 3488120700934677069ull}},
+{{17432130855921008430ull, 3864399761998660129ull,
+ 9235030539588485591ull, 6976241401869354139ull}},
+{{18243821430151842979ull, 772879952399732025ull,
+ 16604401366885338411ull, 1395248280373870827ull}},
+{{18040898786594134342ull, 1545759904799464051ull,
+ 14762058660061125206ull, 2790496560747741655ull}},
+{{17635053499478717067ull, 3091519809598928103ull,
+ 11077373246412698796ull, 5580993121495483311ull}},
+{{16823362925247882518ull, 6183039619197856207ull,
+ 3708002419115845976ull, 11161986242990966623ull}},
+{{7054021399791486827ull, 15994003182807212534ull,
+ 11809646928048900164ull, 2232397248598193324ull}},
+{{14108042799582973654ull, 13541262291904873452ull,
+ 5172549782388248713ull, 4464794497196386649ull}},
+{{9769341525456395691ull, 8635780510100195289ull,
+ 10345099564776497427ull, 8929588994392773298ull}},
+{{16711263564058920431ull, 1727156102020039057ull,
+ 13137066357181030455ull, 1785917798878554659ull}},
+{{14975783054408289246ull, 3454312204040078115ull,
+ 7827388640652509294ull, 3571835597757109319ull}},
+{{11504822035107026876ull, 6908624408080156231ull,
+ 15654777281305018588ull, 7143671195514218638ull}},
+{{9679662036505226022ull, 5071073696357941569ull,
+ 14199001900486734687ull, 1428734239102843727ull}},
+{{912579999300900428ull, 10142147392715883139ull,
+ 9951259727263917758ull, 2857468478205687455ull}},
+{{1825159998601800855ull, 1837550711722214662ull,
+ 1455775380818283901ull, 5714936956411374911ull}},
+{{3650319997203601709ull, 3675101423444429324ull,
+ 2911550761636567802ull, 11429873912822749822ull}},
+{{11798110443666451312ull, 15492415543656527157ull,
+ 7961007781811134206ull, 2285974782564549964ull}},
+{{5149476813623351007ull, 12538087013603502699ull,
+ 15922015563622268413ull, 4571949565129099928ull}},
+{{10298953627246702013ull, 6629429953497453782ull,
+ 13397287053534985211ull, 9143899130258199857ull}},
+{{2059790725449340403ull, 12393932434925221726ull,
+ 10058155040190817688ull, 1828779826051639971ull}},
+{{4119581450898680806ull, 6341120796140891836ull,
+ 1669566006672083761ull, 3657559652103279943ull}},
+{{8239162901797361611ull, 12682241592281783672ull,
+ 3339132013344167522ull, 7315119304206559886ull}},
+{{1647832580359472323ull, 13604494762682087704ull,
+ 4357175217410743827ull, 1463023860841311977ull}},
+{{3295665160718944645ull, 8762245451654623792ull,
+ 8714350434821487655ull, 2926047721682623954ull}},
+{{6591330321437889289ull, 17524490903309247584ull,
+ 17428700869642975310ull, 5852095443365247908ull}},
+{{13182660642875778577ull, 16602237732908943552ull,
+ 16410657665576399005ull, 11704190886730495817ull}},
+{{17393927387542797009ull, 10699145176065609356ull,
+ 10660829162599100447ull, 2340838177346099163ull}},
+{{16341110701376042401ull, 2951546278421667097ull,
+ 2874914251488649279ull, 4681676354692198327ull}},
+{{14235477329042533185ull, 5903092556843334195ull,
+ 5749828502977298558ull, 9363352709384396654ull}},
+{{10225793095292327284ull, 8559316140852487485ull,
+ 15907360959563101004ull, 1872670541876879330ull}},
+{{2004842116875102951ull, 17118632281704974971ull,
+ 13367977845416650392ull, 3745341083753758661ull}},
+{{4009684233750205902ull, 15790520489700398326ull,
+ 8289211617123749169ull, 7490682167507517323ull}},
+{{11869983290975772150ull, 10536801727423900311ull,
+ 12725888767650480803ull, 1498136433501503464ull}},
+{{5293222508241992684ull, 2626859381138249007ull,
+ 7005033461591409991ull, 2996272867003006929ull}},
+{{10586445016483985368ull, 5253718762276498014ull,
+ 14010066923182819982ull, 5992545734006013858ull}},
+{{2726145959258419119ull, 10507437524552996029ull,
+ 9573389772656088348ull, 11985091468012027717ull}},
+{{15302624450819325117ull, 2101487504910599205ull,
+ 9293375584015038316ull, 2397018293602405543ull}},
+{{12158504827929098618ull, 4202975009821198411ull,
+ 140007094320525016ull, 4794036587204811087ull}},
+{{5870265582148645619ull, 8405950019642396823ull, 280014188641050032ull,
+ 9588073174409622174ull}},
+{{15931448375397370417ull, 5370538818670389687ull,
+ 14813398096695851299ull, 1917614634881924434ull}},
+{{13416152677085189217ull, 10741077637340779375ull,
+ 11180052119682150982ull, 3835229269763848869ull}},
+{{8385561280460826818ull, 3035411200972007135ull,
+ 3913360165654750349ull, 7670458539527697739ull}},
+{{12745158700317896334ull, 11675128684420132396ull,
+ 15540067292098591362ull, 1534091707905539547ull}},
+{{7043573326926241051ull, 4903513295130713177ull,
+ 12633390510487631109ull, 3068183415811079095ull}},
+{{14087146653852482101ull, 9807026590261426354ull,
+ 6820036947265710602ull, 6136366831622158191ull}},
+{{9727549233995412585ull, 1167309106813301093ull,
+ 13640073894531421205ull, 12272733663244316382ull}},
+{{1945509846799082517ull, 7612159450846480865ull,
+ 10106712408390104887ull, 2454546732648863276ull}},
+{{3891019693598165034ull, 15224318901692961730ull,
+ 1766680743070658158ull, 4909093465297726553ull}},
+{{7782039387196330068ull, 12001893729676371844ull,
+ 3533361486141316317ull, 9818186930595453106ull}},
+{{8935105506923086660ull, 13468425190161005338ull,
+ 4396021111970173586ull, 1963637386119090621ull}},
+{{17870211013846173320ull, 8490106306612459060ull,
+ 8792042223940347173ull, 3927274772238181242ull}},
+{{17293677953982795024ull, 16980212613224918121ull,
+ 17584084447880694346ull, 7854549544476362484ull}},
+{{7148084405538469328ull, 3396042522644983624ull,
+ 18274212148543780162ull, 1570909908895272496ull}},
+{{14296168811076938656ull, 6792085045289967248ull,
+ 18101680223378008708ull, 3141819817790544993ull}},
+{{10145593548444325696ull, 13584170090579934497ull,
+ 17756616373046465800ull, 6283639635581089987ull}},
+{{1844443023179099776ull, 8721596107450317379ull,
+ 17066488672383379985ull, 12567279271162179975ull}},
+{{15126283863603461248ull, 1744319221490063475ull,
+ 3413297734476675997ull, 2513455854232435995ull}},
+{{11805823653497370880ull, 3488638442980126951ull,
+ 6826595468953351994ull, 5026911708464871990ull}},
+{{5164903233285190144ull, 6977276885960253903ull,
+ 13653190937906703988ull, 10053823416929743980ull}},
+{{4722329461398948352ull, 12463501821417781750ull,
+ 2730638187581340797ull, 2010764683385948796ull}},
+{{9444658922797896704ull, 6480259569126011884ull,
+ 5461276375162681595ull, 4021529366771897592ull}},
+{{442573771886241792ull, 12960519138252023769ull,
+ 10922552750325363190ull, 8043058733543795184ull}},
+{{11156561198602979328ull, 17349499086618046046ull,
+ 16941905809032713930ull, 1608611746708759036ull}},
+{{3866378323496407040ull, 16252254099526540477ull,
+ 15437067544355876245ull, 3217223493417518073ull}},
+{{7732756646992814080ull, 14057764125343529338ull,
+ 12427391015002200875ull, 6434446986835036147ull}},
+{{1546551329398562816ull, 10190250454552526514ull,
+ 9864175832484260821ull, 1286889397367007229ull}},
+{{3093102658797125632ull, 1933756835395501412ull,
+ 1281607591258970027ull, 2573778794734014459ull}},
+{{6186205317594251264ull, 3867513670791002824ull,
+ 2563215182517940054ull, 5147557589468028918ull}},
+{{12372410635188502528ull, 7735027341582005648ull,
+ 5126430365035880108ull, 10295115178936057836ull}},
+{{9853179756521521152ull, 16304400727284042422ull,
+ 4714634887749086344ull, 2059023035787211567ull}},
+{{1259615439333490688ull, 14162057380858533229ull,
+ 9429269775498172689ull, 4118046071574423134ull}},
+{{2519230878666981376ull, 9877370688007514842ull, 411795477286793763ull,
+ 8236092143148846269ull}},
+{{15261241434701037568ull, 9354171767085323614ull,
+ 14839754354425000045ull, 1647218428629769253ull}},
+{{12075738795692523520ull, 261599460461095613ull,
+ 11232764635140448475ull, 3294436857259538507ull}},
+{{5704733517675495424ull, 523198920922191227ull, 4018785196571345334ull,
+ 6588873714519077015ull}},
+{{4830295518277009408ull, 14862035043152079538ull,
+ 803757039314269066ull, 1317774742903815403ull}},
+{{9660591036554018816ull, 11277326012594607460ull,
+ 1607514078628538133ull, 2635549485807630806ull}},
+{{874437999398486016ull, 4107907951479663305ull, 3215028157257076267ull,
+ 5271098971615261612ull}},
+{{1748875998796972032ull, 8215815902959326610ull,
+ 6430056314514152534ull, 10542197943230523224ull}},
+{{11417821643985125376ull, 12711209624817596291ull,
+ 16043406521870471799ull, 2108439588646104644ull}},
+{{4388899214260699136ull, 6975675175925640967ull,
+ 13640068970031391983ull, 4216879177292209289ull}},
+{{8777798428521398272ull, 13951350351851281934ull,
+ 8833393866353232350ull, 8433758354584418579ull}},
+{{12823606129930010624ull, 17547665329337897679ull,
+ 16524074032238287762ull, 1686751670916883715ull}},
+{{7200468186150469632ull, 16648586584966243743ull,
+ 14601403990767023909ull, 3373503341833767431ull}},
+{{14400936372300939264ull, 14850429096222935870ull,
+ 10756063907824496203ull, 6747006683667534863ull}},
+{{6569536089202098176ull, 6659434633986497497ull,
+ 13219259225790630210ull, 1349401336733506972ull}},
+{{13139072178404196352ull, 13318869267972994994ull,
+ 7991774377871708804ull, 2698802673467013945ull}},
+{{7831400283098841088ull, 8190994462236438373ull,
+ 15983548755743417609ull, 5397605346934027890ull}},
+{{15662800566197682176ull, 16381988924472876746ull,
+ 13520353437777283602ull, 10795210693868055781ull}},
+{{17889955372207177728ull, 14344444229120306318ull,
+ 6393419502297367043ull, 2159042138773611156ull}},
+{{17333166670704803840ull, 10242144384531061021ull,
+ 12786839004594734087ull, 4318084277547222312ull}},
+{{16219589267700056064ull, 2037544695352570427ull,
+ 7126933935479916559ull, 8636168555094444625ull}},
+{{6933266668281921536ull, 15164904198038155378ull,
+ 1425386787095983311ull, 1727233711018888925ull}},
+{{13866533336563843072ull, 11883064322366759140ull,
+ 2850773574191966623ull, 3454467422037777850ull}},
+{{9286322599418134528ull, 5319384571023966665ull,
+ 5701547148383933247ull, 6908934844075555700ull}},
+{{9235962149367447552ull, 8442574543688613979ull,
+ 1140309429676786649ull, 1381786968815111140ull}},
+{{25180225025343488ull, 16885149087377227959ull, 2280618859353573298ull,
+ 2763573937630222280ull}},
+{{50360450050686976ull, 15323554101044904302ull, 4561237718707146597ull,
+ 5527147875260444560ull}},
+{{100720900101373952ull, 12200364128380256988ull,
+ 9122475437414293195ull, 11054295750520889120ull}},
+{{11088190624246005760ull, 2440072825676051397ull,
+ 1824495087482858639ull, 2210859150104177824ull}},
+{{3729637174782459904ull, 4880145651352102795ull,
+ 3648990174965717278ull, 4421718300208355648ull}},
+{{7459274349564919808ull, 9760291302704205590ull,
+ 7297980349931434556ull, 8843436600416711296ull}},
+{{8870552499396804608ull, 9330755890024661764ull,
+ 5148944884728197234ull, 1768687320083342259ull}},
+{{17741104998793609216ull, 214767706339771912ull,
+ 10297889769456394469ull, 3537374640166684518ull}},
+{{17035465923877666816ull, 429535412679543825ull,
+ 2149035465203237322ull, 7074749280333369037ull}},
+{{18164488443743174656ull, 14843302341503550057ull,
+ 7808504722524468110ull, 1414949856066673807ull}},
+{{17882232813776797696ull, 11239860609297548499ull,
+ 15617009445048936221ull, 2829899712133347614ull}},
+{{17317721553844043776ull, 4032977144885545383ull,
+ 12787274816388320827ull, 5659799424266695229ull}},
+{{16188699033978535936ull, 8065954289771090767ull,
+ 7127805559067090038ull, 11319598848533390459ull}},
+{{17995135065763348480ull, 8991888487438038799ull,
+ 16182956370781059300ull, 2263919769706678091ull}},
+{{17543526057817145344ull, 17983776974876077599ull,
+ 13919168667852566984ull, 4527839539413356183ull}},
+{{16640308041924739072ull, 17520809876042603583ull,
+ 9391593261995582353ull, 9055679078826712367ull}},
+{{14396108052610678784ull, 3504161975208520716ull,
+ 9257016281882937117ull, 1811135815765342473ull}},
+{{10345472031511805952ull, 7008323950417041433ull, 67288490056322618ull,
+ 3622271631530684947ull}},
+{{2244199989314060288ull, 14016647900834082867ull,
+ 134576980112645236ull, 7244543263061369894ull}},
+{{7827537627346632704ull, 2803329580166816573ull,
+ 14784310654990170340ull, 1448908652612273978ull}},
+{{15655075254693265408ull, 5606659160333633146ull,
+ 11121877236270789064ull, 2897817305224547957ull}},
+{{12863406435676979200ull, 11213318320667266293ull,
+ 3797010398832026512ull, 5795634610449095915ull}},
+{{7280068797644406784ull, 3979892567624980971ull,
+ 7594020797664053025ull, 11591269220898191830ull}},
+{{5145362574270791680ull, 795978513524996194ull, 1518804159532810605ull,
+ 2318253844179638366ull}},
+{{10290725148541583360ull, 1591957027049992388ull,
+ 3037608319065621210ull, 4636507688359276732ull}},
+{{2134706223373615104ull, 3183914054099984777ull,
+ 6075216638131242420ull, 9273015376718553464ull}},
+{{4116290059416633344ull, 15394178069787638248ull,
+ 15972438586593889776ull, 1854603075343710692ull}},
+{{8232580118833266688ull, 12341612065865724880ull,
+ 13498133099478227937ull, 3709206150687421385ull}},
+{{16465160237666533376ull, 6236480058021898144ull,
+ 8549522125246904259ull, 7418412301374842771ull}},
+{{18050427306500947968ull, 1247296011604379628ull,
+ 5399253239791291175ull, 1483682460274968554ull}},
+{{17654110539292344320ull, 2494592023208759257ull,
+ 10798506479582582350ull, 2967364920549937108ull}},
+{{16861477004875137024ull, 4989184046417518515ull,
+ 3150268885455613084ull, 5934729841099874217ull}},
+{{15276209936040722432ull, 9978368092835037031ull,
+ 6300537770911226168ull, 11869459682199748434ull}},
+{{14123288431433875456ull, 9374371248050828052ull,
+ 16017502813149886526ull, 2373891936439949686ull}},
+{{9799832789158199296ull, 301998422392104489ull,
+ 13588261552590221437ull, 4747783872879899373ull}},
+{{1152921504606846976ull, 603996844784208979ull, 8729779031470891258ull,
+ 9495567745759798747ull}},
+{{14987979559889010688ull, 120799368956841795ull,
+ 9124653435777998898ull, 1899113549151959749ull}},
+{{11529215046068469760ull, 241598737913683591ull,
+ 18249306871555997796ull, 3798227098303919498ull}},
+{{4611686018427387904ull, 483197475827367183ull,
+ 18051869669402443976ull, 7596454196607838997ull}},
+{{4611686018427387904ull, 11164685939391204406ull,
+ 10989071563364309441ull, 1519290839321567799ull}},
+{{9223372036854775808ull, 3882627805072857196ull,
+ 3531399053019067267ull, 3038581678643135599ull}},
+{{0ull, 7765255610145714393ull, 7062798106038134534ull,
+ 6077163357286271198ull}},
+{{0ull, 15530511220291428786ull, 14125596212076269068ull,
+ 12154326714572542396ull}},
+{{0ull, 17863497503025927050ull, 6514468057157164136ull,
+ 2430865342914508479ull}},
+{{0ull, 17280250932342302484ull, 13028936114314328273ull,
+ 4861730685829016958ull}},
+{{0ull, 16113757790975053352ull, 7611128154919104931ull,
+ 9723461371658033917ull}},
+{{0ull, 14290798002420741640ull, 8900923260467641632ull,
+ 1944692274331606783ull}},
+{{0ull, 10134851931131931664ull, 17801846520935283265ull,
+ 3889384548663213566ull}},
+{{0ull, 1822959788554311712ull, 17156948968161014915ull,
+ 7778769097326427133ull}},
+{{0ull, 11432638401936593312ull, 14499436237857933952ull,
+ 1555753819465285426ull}},
+{{0ull, 4418532730163635008ull, 10552128402006316289ull,
+ 3111507638930570853ull}},
+{{0ull, 8837065460327270016ull, 2657512730303080962ull,
+ 6223015277861141707ull}},
+{{0ull, 17674130920654540032ull, 5315025460606161924ull,
+ 12446030555722283414ull}},
+{{0ull, 14602872628356638976ull, 15820400351088873677ull,
+ 2489206111144456682ull}},
+{{0ull, 10759001183003726336ull, 13194056628468195739ull,
+ 4978412222288913365ull}},
+{{0ull, 3071258292297901056ull, 7941369183226839863ull,
+ 9956824444577826731ull}},
+{{0ull, 15371646917427221504ull, 5277622651387278295ull,
+ 1991364888915565346ull}},
+{{0ull, 12296549761144891392ull, 10555245302774556591ull,
+ 3982729777831130692ull}},
+{{0ull, 6146355448580231168ull, 2663746531839561567ull,
+ 7965459555662261385ull}},
+{{0ull, 8607968719199866880ull, 532749306367912313ull,
+ 1593091911132452277ull}},
+{{0ull, 17215937438399733760ull, 1065498612735824626ull,
+ 3186183822264904554ull}},
+{{0ull, 15985130803089915904ull, 2130997225471649253ull,
+ 6372367644529809108ull}},
+{{0ull, 13523517532470280192ull, 4261994450943298507ull,
+ 12744735289059618216ull}},
+{{0ull, 13772749950719787008ull, 4541747704930570024ull,
+ 2548947057811923643ull}},
+{{0ull, 9098755827730022400ull, 9083495409861140049ull,
+ 5097894115623847286ull}},
+{{0ull, 18197511655460044800ull, 18166990819722280098ull,
+ 10195788231247694572ull}},
+{{0ull, 3639502331092008960ull, 11012095793428276666ull,
+ 2039157646249538914ull}},
+{{0ull, 7279004662184017920ull, 3577447513147001716ull,
+ 4078315292499077829ull}},
+{{0ull, 14558009324368035840ull, 7154895026294003432ull,
+ 8156630584998155658ull}},
+{{0ull, 2911601864873607168ull, 12499025449484531656ull,
+ 1631326116999631131ull}},
+{{0ull, 5823203729747214336ull, 6551306825259511696ull,
+ 3262652233999262263ull}},
+{{0ull, 11646407459494428672ull, 13102613650519023392ull,
+ 6525304467998524526ull}},
+{{0ull, 13397327936124616704ull, 6309871544845715001ull,
+ 1305060893599704905ull}},
+{{0ull, 8347911798539681792ull, 12619743089691430003ull,
+ 2610121787199409810ull}},
+{{0ull, 16695823597079363584ull, 6792742105673308390ull,
+ 5220243574398819621ull}},
+{{0ull, 14944903120449175552ull, 13585484211346616781ull,
+ 10440487148797639242ull}},
+{{0ull, 14057027068315566080ull, 10095794471753144002ull,
+ 2088097429759527848ull}},
+{{0ull, 9667310062921580544ull, 1744844869796736389ull,
+ 4176194859519055697ull}},
+{{0ull, 887876052133609472ull, 3489689739593472779ull,
+ 8352389719038111394ull}},
+{{0ull, 11245621654652452864ull, 15455333206886335848ull,
+ 1670477943807622278ull}},
+{{0ull, 4044499235595354112ull, 12463922340063120081ull,
+ 3340955887615244557ull}},
+{{0ull, 8088998471190708224ull, 6481100606416688546ull,
+ 6681911775230489115ull}},
+{{0ull, 5307148508980051968ull, 1296220121283337709ull,
+ 1336382355046097823ull}},
+{{0ull, 10614297017960103936ull, 2592440242566675418ull,
+ 2672764710092195646ull}},
+{{0ull, 2781849962210656256ull, 5184880485133350837ull,
+ 5345529420184391292ull}},
+{{0ull, 5563699924421312512ull, 10369760970266701674ull,
+ 10691058840368782584ull}},
+{{0ull, 12180786429109993472ull, 16831347453020981627ull,
+ 2138211768073756516ull}},
+{{0ull, 5914828784510435328ull, 15215950832332411639ull,
+ 4276423536147513033ull}},
+{{0ull, 11829657569020870656ull, 11985157590955271662ull,
+ 8552847072295026067ull}},
+{{0ull, 17123326772771815424ull, 9775729147674874978ull,
+ 1710569414459005213ull}},
+{{0ull, 15799909471834079232ull, 1104714221640198341ull,
+ 3421138828918010427ull}},
+{{0ull, 13153074869958606848ull, 2209428443280396683ull,
+ 6842277657836020854ull}},
+{{0ull, 10009312603475542016ull, 15199280947623720629ull,
+ 1368455531567204170ull}},
+{{0ull, 1571881133241532416ull, 11951817821537889643ull,
+ 2736911063134408341ull}},
+{{0ull, 3143762266483064832ull, 5456891569366227670ull,
+ 5473822126268816683ull}},
+{{0ull, 6287524532966129664ull, 10913783138732455340ull,
+ 10947644252537633366ull}},
+{{0ull, 4946853721335136256ull, 5872105442488401391ull,
+ 2189528850507526673ull}},
+{{0ull, 9893707442670272512ull, 11744210884976802782ull,
+ 4379057701015053346ull}},
+{{0ull, 1340670811630993408ull, 5041677696244053949ull,
+ 8758115402030106693ull}},
+{{0ull, 7646831791810019328ull, 12076381983474541759ull,
+ 1751623080406021338ull}},
+{{0ull, 15293663583620038656ull, 5706019893239531902ull,
+ 3503246160812042677ull}},
+{{0ull, 12140583093530525696ull, 11412039786479063805ull,
+ 7006492321624085354ull}},
+{{0ull, 17185511877673746432ull, 17039803216263454053ull,
+ 1401298464324817070ull}},
+{{0ull, 15924279681637941248ull, 15632862358817356491ull,
+ 2802596928649634141ull}},
+{{0ull, 13401815289566330880ull, 12818980643925161367ull,
+ 5605193857299268283ull}},
+{{0ull, 8356886505423110144ull, 7191217214140771119ull,
+ 11210387714598536567ull}},
+{{0ull, 5360726115826532352ull, 8816941072311974870ull,
+ 2242077542919707313ull}},
+{{0ull, 10721452231653064704ull, 17633882144623949740ull,
+ 4484155085839414626ull}},
+{{0ull, 2996160389596577792ull, 16821020215538347865ull,
+ 8968310171678829253ull}},
+{{0ull, 11667278522145046528ull, 14432250487333400542ull,
+ 1793662034335765850ull}},
+{{0ull, 4887812970580541440ull, 10417756900957249469ull,
+ 3587324068671531701ull}},
+{{0ull, 9775625941161082880ull, 2388769728204947322ull,
+ 7174648137343063403ull}},
+{{0ull, 1955125188232216576ull, 11545800389866720434ull,
+ 1434929627468612680ull}},
+{{0ull, 3910250376464433152ull, 4644856706023889252ull,
+ 2869859254937225361ull}},
+{{0ull, 7820500752928866304ull, 9289713412047778504ull,
+ 5739718509874450722ull}},
+{{0ull, 15641001505857732608ull, 132682750386005392ull,
+ 11479437019748901445ull}},
+{{0ull, 10506897930655367168ull, 26536550077201078ull,
+ 2295887403949780289ull}},
+{{0ull, 2567051787601182720ull, 53073100154402157ull,
+ 4591774807899560578ull}},
+{{0ull, 5134103575202365440ull, 106146200308804314ull,
+ 9183549615799121156ull}},
+{{0ull, 1026820715040473088ull, 3710578054803671186ull,
+ 1836709923159824231ull}},
+{{0ull, 2053641430080946176ull, 7421156109607342372ull,
+ 3673419846319648462ull}},
+{{0ull, 4107282860161892352ull, 14842312219214684744ull,
+ 7346839692639296924ull}},
+{{0ull, 11889503016258109440ull, 17725857702810578241ull,
+ 1469367938527859384ull}},
+{{0ull, 5332261958806667264ull, 17004971331911604867ull,
+ 2938735877055718769ull}},
+{{0ull, 10664523917613334528ull, 15563198590113658118ull,
+ 5877471754111437539ull}},
+{{0ull, 2882303761517117440ull, 12679653106517764621ull,
+ 11754943508222875079ull}},
+{{0ull, 576460752303423488ull, 17293325880271194217ull,
+ 2350988701644575015ull}},
+{{0ull, 1152921504606846976ull, 16139907686832836818ull,
+ 4701977403289150031ull}},
+{{0ull, 2305843009213693952ull, 13833071299956122020ull,
+ 9403954806578300063ull}},
+{{0ull, 11529215046068469760ull, 13834660704216955373ull,
+ 1880790961315660012ull}},
+{{0ull, 4611686018427387904ull, 9222577334724359131ull,
+ 3761581922631320025ull}},
+{{0ull, 9223372036854775808ull, 18445154669448718262ull,
+ 7523163845262640050ull}},
+{{0ull, 9223372036854775808ull, 3689030933889743652ull,
+ 1504632769052528010ull}},
+{{0ull, 0ull, 7378061867779487305ull, 3009265538105056020ull}},
+{{0ull, 0ull, 14756123735558974610ull, 6018531076210112040ull}},
+{{0ull, 0ull, 11065503397408397604ull, 12037062152420224081ull}},
+{{0ull, 0ull, 5902449494223589844ull, 2407412430484044816ull}},
+{{0ull, 0ull, 11804898988447179688ull, 4814824860968089632ull}},
+{{0ull, 0ull, 5163053903184807760ull, 9629649721936179265ull}},
+{{0ull, 0ull, 1032610780636961552ull, 1925929944387235853ull}},
+{{0ull, 0ull, 2065221561273923104ull, 3851859888774471706ull}},
+{{0ull, 0ull, 4130443122547846208ull, 7703719777548943412ull}},
+{{0ull, 0ull, 8204786253993389888ull, 1540743955509788682ull}},
+{{0ull, 0ull, 16409572507986779776ull, 3081487911019577364ull}},
+{{0ull, 0ull, 14372400942264007936ull, 6162975822039154729ull}},
+{{0ull, 0ull, 10298057810818464256ull, 12325951644078309459ull}},
+{{0ull, 0ull, 16817006821131334144ull, 2465190328815661891ull}},
+{{0ull, 0ull, 15187269568553116672ull, 4930380657631323783ull}},
+{{0ull, 0ull, 11927795063396681728ull, 9860761315262647567ull}},
+{{0ull, 0ull, 9764256642163156992ull, 1972152263052529513ull}},
+{{0ull, 0ull, 1081769210616762368ull, 3944304526105059027ull}},
+{{0ull, 0ull, 2163538421233524736ull, 7888609052210118054ull}},
+{{0ull, 0ull, 15190102943214346240ull, 1577721810442023610ull}},
+{{0ull, 0ull, 11933461812719140864ull, 3155443620884047221ull}},
+{{0ull, 0ull, 5420179551728730112ull, 6310887241768094443ull}},
+{{0ull, 0ull, 10840359103457460224ull, 12621774483536188886ull}},
+{{0ull, 0ull, 5857420635433402368ull, 2524354896707237777ull}},
+{{0ull, 0ull, 11714841270866804736ull, 5048709793414475554ull}},
+{{0ull, 0ull, 4982938468024057856ull, 10097419586828951109ull}},
+{{0ull, 0ull, 15753982952572452864ull, 2019483917365790221ull}},
+{{0ull, 0ull, 13061221831435354112ull, 4038967834731580443ull}},
+{{0ull, 0ull, 7675699589161156608ull, 8077935669463160887ull}},
+{{0ull, 0ull, 8913837547316051968ull, 1615587133892632177ull}},
+{{0ull, 0ull, 17827675094632103936ull, 3231174267785264354ull}},
+{{0ull, 0ull, 17208606115554656256ull, 6462348535570528709ull}},
+{{0ull, 0ull, 18199116482078572544ull, 1292469707114105741ull}},
+{{0ull, 0ull, 17951488890447593472ull, 2584939414228211483ull}},
+{{0ull, 0ull, 17456233707185635328ull, 5169878828456422967ull}},
+{{0ull, 0ull, 16465723340661719040ull, 10339757656912845935ull}},
+{{0ull, 0ull, 3293144668132343808ull, 2067951531382569187ull}},
+{{0ull, 0ull, 6586289336264687616ull, 4135903062765138374ull}},
+{{0ull, 0ull, 13172578672529375232ull, 8271806125530276748ull}},
+{{0ull, 0ull, 13702562178731606016ull, 1654361225106055349ull}},
+{{0ull, 0ull, 8958380283753660416ull, 3308722450212110699ull}},
+{{0ull, 0ull, 17916760567507320832ull, 6617444900424221398ull}},
+{{0ull, 0ull, 14651398557727195136ull, 1323488980084844279ull}},
+{{0ull, 0ull, 10856053041744838656ull, 2646977960169688559ull}},
+{{0ull, 0ull, 3265362009780125696ull, 5293955920339377119ull}},
+{{0ull, 0ull, 6530724019560251392ull, 10587911840678754238ull}},
+{{0ull, 0ull, 12374191248137781248ull, 2117582368135750847ull}},
+{{0ull, 0ull, 6301638422566010880ull, 4235164736271501695ull}},
+{{0ull, 0ull, 12603276845132021760ull, 8470329472543003390ull}},
+{{0ull, 0ull, 2520655369026404352ull, 1694065894508600678ull}},
+{{0ull, 0ull, 5041310738052808704ull, 3388131789017201356ull}},
+{{0ull, 0ull, 10082621476105617408ull, 6776263578034402712ull}},
+{{0ull, 0ull, 9395221924704944128ull, 1355252715606880542ull}},
+{{0ull, 0ull, 343699775700336640ull, 2710505431213761085ull}},
+{{0ull, 0ull, 687399551400673280ull, 5421010862427522170ull}},
+{{0ull, 0ull, 1374799102801346560ull, 10842021724855044340ull}},
+{{0ull, 0ull, 274959820560269312ull, 2168404344971008868ull}},
+{{0ull, 0ull, 549919641120538624ull, 4336808689942017736ull}},
+{{0ull, 0ull, 1099839282241077248ull, 8673617379884035472ull}},
+{{0ull, 0ull, 7598665485932036096ull, 1734723475976807094ull}},
+{{0ull, 0ull, 15197330971864072192ull, 3469446951953614188ull}},
+{{0ull, 0ull, 11947917870018592768ull, 6938893903907228377ull}},
+{{0ull, 0ull, 9768281203487539200ull, 1387778780781445675ull}},
+{{0ull, 0ull, 1089818333265526784ull, 2775557561562891351ull}},
+{{0ull, 0ull, 2179636666531053568ull, 5551115123125782702ull}},
+{{0ull, 0ull, 4359273333062107136ull, 11102230246251565404ull}},
+{{0ull, 0ull, 15629249925580062720ull, 2220446049250313080ull}},
+{{0ull, 0ull, 12811755777450573824ull, 4440892098500626161ull}},
+{{0ull, 0ull, 7176767481191596032ull, 8881784197001252323ull}},
+{{0ull, 0ull, 12503399940464050176ull, 1776356839400250464ull}},
+{{0ull, 0ull, 6560055807218548736ull, 3552713678800500929ull}},
+{{0ull, 0ull, 13120111614437097472ull, 7105427357601001858ull}},
+{{0ull, 0ull, 13692068767113150464ull, 1421085471520200371ull}},
+{{0ull, 0ull, 8937393460516749312ull, 2842170943040400743ull}},
+{{0ull, 0ull, 17874786921033498624ull, 5684341886080801486ull}},
+{{0ull, 0ull, 17302829768357445632ull, 11368683772161602973ull}},
+{{0ull, 0ull, 14528612397897220096ull, 2273736754432320594ull}},
+{{0ull, 0ull, 10610480722084888576ull, 4547473508864641189ull}},
+{{0ull, 0ull, 2774217370460225536ull, 9094947017729282379ull}},
+{{0ull, 0ull, 15312238733059686400ull, 1818989403545856475ull}},
+{{0ull, 0ull, 12177733392409821184ull, 3637978807091712951ull}},
+{{0ull, 0ull, 5908722711110090752ull, 7275957614183425903ull}},
+{{0ull, 0ull, 12249790986447749120ull, 1455191522836685180ull}},
+{{0ull, 0ull, 6052837899185946624ull, 2910383045673370361ull}},
+{{0ull, 0ull, 12105675798371893248ull, 5820766091346740722ull}},
+{{0ull, 0ull, 5764607523034234880ull, 11641532182693481445ull}},
+{{0ull, 0ull, 1152921504606846976ull, 2328306436538696289ull}},
+{{0ull, 0ull, 2305843009213693952ull, 4656612873077392578ull}},
+{{0ull, 0ull, 4611686018427387904ull, 9313225746154785156ull}},
+{{0ull, 0ull, 4611686018427387904ull, 1862645149230957031ull}},
+{{0ull, 0ull, 9223372036854775808ull, 3725290298461914062ull}},
+{{0ull, 0ull, 0ull, 7450580596923828125ull}},
+{{0ull, 0ull, 0ull, 1490116119384765625ull}},
+{{0ull, 0ull, 0ull, 2980232238769531250ull}},
+{{0ull, 0ull, 0ull, 5960464477539062500ull}},
+{{0ull, 0ull, 0ull, 11920928955078125000ull}},
+{{0ull, 0ull, 0ull, 2384185791015625000ull}},
+{{0ull, 0ull, 0ull, 4768371582031250000ull}},
+{{0ull, 0ull, 0ull, 9536743164062500000ull}},
+{{0ull, 0ull, 0ull, 1907348632812500000ull}},
+{{0ull, 0ull, 0ull, 3814697265625000000ull}},
+{{0ull, 0ull, 0ull, 7629394531250000000ull}},
+{{0ull, 0ull, 0ull, 1525878906250000000ull}},
+{{0ull, 0ull, 0ull, 3051757812500000000ull}},
+{{0ull, 0ull, 0ull, 6103515625000000000ull}},
+{{0ull, 0ull, 0ull, 12207031250000000000ull}},
+{{0ull, 0ull, 0ull, 2441406250000000000ull}},
+{{0ull, 0ull, 0ull, 4882812500000000000ull}},
+{{0ull, 0ull, 0ull, 9765625000000000000ull}},
+{{0ull, 0ull, 0ull, 1953125000000000000ull}},
+{{0ull, 0ull, 0ull, 3906250000000000000ull}},
+{{0ull, 0ull, 0ull, 7812500000000000000ull}},
+{{0ull, 0ull, 0ull, 1562500000000000000ull}},
+{{0ull, 0ull, 0ull, 3125000000000000000ull}},
+{{0ull, 0ull, 0ull, 6250000000000000000ull}},
+{{0ull, 0ull, 0ull, 12500000000000000000ull}},
+{{0ull, 0ull, 0ull, 2500000000000000000ull}},
+{{0ull, 0ull, 0ull, 5000000000000000000ull}},
+{{0ull, 0ull, 0ull, 10000000000000000000ull}},
+{{0ull, 0ull, 0ull, 2000000000000000000ull}},
+{{0ull, 0ull, 0ull, 4000000000000000000ull}},
+{{0ull, 0ull, 0ull, 8000000000000000000ull}},
+{{0ull, 0ull, 0ull, 1600000000000000000ull}},
+{{0ull, 0ull, 0ull, 3200000000000000000ull}},
+{{0ull, 0ull, 0ull, 6400000000000000000ull}},
+{{0ull, 0ull, 0ull, 12800000000000000000ull}},
+{{0ull, 0ull, 0ull, 2560000000000000000ull}},
+{{0ull, 0ull, 0ull, 5120000000000000000ull}},
+{{0ull, 0ull, 0ull, 10240000000000000000ull}},
+{{0ull, 0ull, 0ull, 2048000000000000000ull}},
+{{0ull, 0ull, 0ull, 4096000000000000000ull}},
+{{0ull, 0ull, 0ull, 8192000000000000000ull}},
+{{0ull, 0ull, 0ull, 1638400000000000000ull}},
+{{0ull, 0ull, 0ull, 3276800000000000000ull}},
+{{0ull, 0ull, 0ull, 6553600000000000000ull}},
+{{0ull, 0ull, 0ull, 1310720000000000000ull}},
+{{0ull, 0ull, 0ull, 2621440000000000000ull}},
+{{0ull, 0ull, 0ull, 5242880000000000000ull}},
+{{0ull, 0ull, 0ull, 10485760000000000000ull}},
+{{0ull, 0ull, 0ull, 2097152000000000000ull}},
+{{0ull, 0ull, 0ull, 4194304000000000000ull}},
+{{0ull, 0ull, 0ull, 8388608000000000000ull}},
+{{0ull, 0ull, 0ull, 1677721600000000000ull}},
+{{0ull, 0ull, 0ull, 3355443200000000000ull}},
+{{0ull, 0ull, 0ull, 6710886400000000000ull}},
+{{0ull, 0ull, 0ull, 1342177280000000000ull}},
+{{0ull, 0ull, 0ull, 2684354560000000000ull}},
+{{0ull, 0ull, 0ull, 5368709120000000000ull}},
+{{0ull, 0ull, 0ull, 10737418240000000000ull}},
+{{0ull, 0ull, 0ull, 2147483648000000000ull}},
+{{0ull, 0ull, 0ull, 4294967296000000000ull}},
+{{0ull, 0ull, 0ull, 8589934592000000000ull}},
+{{0ull, 0ull, 0ull, 1717986918400000000ull}},
+{{0ull, 0ull, 0ull, 3435973836800000000ull}},
+{{0ull, 0ull, 0ull, 6871947673600000000ull}},
+{{0ull, 0ull, 0ull, 1374389534720000000ull}},
+{{0ull, 0ull, 0ull, 2748779069440000000ull}},
+{{0ull, 0ull, 0ull, 5497558138880000000ull}},
+{{0ull, 0ull, 0ull, 10995116277760000000ull}},
+{{0ull, 0ull, 0ull, 2199023255552000000ull}},
+{{0ull, 0ull, 0ull, 4398046511104000000ull}},
+{{0ull, 0ull, 0ull, 8796093022208000000ull}},
+{{0ull, 0ull, 0ull, 1759218604441600000ull}},
+{{0ull, 0ull, 0ull, 3518437208883200000ull}},
+{{0ull, 0ull, 0ull, 7036874417766400000ull}},
+{{0ull, 0ull, 0ull, 1407374883553280000ull}},
+{{0ull, 0ull, 0ull, 2814749767106560000ull}},
+{{0ull, 0ull, 0ull, 5629499534213120000ull}},
+{{0ull, 0ull, 0ull, 11258999068426240000ull}},
+{{0ull, 0ull, 0ull, 2251799813685248000ull}},
+{{0ull, 0ull, 0ull, 4503599627370496000ull}},
+{{0ull, 0ull, 0ull, 9007199254740992000ull}},
+{{0ull, 0ull, 0ull, 1801439850948198400ull}},
+{{0ull, 0ull, 0ull, 3602879701896396800ull}},
+{{0ull, 0ull, 0ull, 7205759403792793600ull}},
+{{0ull, 0ull, 0ull, 1441151880758558720ull}},
+{{0ull, 0ull, 0ull, 2882303761517117440ull}},
+{{0ull, 0ull, 0ull, 5764607523034234880ull}},
+{{0ull, 0ull, 0ull, 11529215046068469760ull}},
+{{0ull, 0ull, 0ull, 2305843009213693952ull}},
+{{0ull, 0ull, 0ull, 4611686018427387904ull}},
+{{0ull, 0ull, 0ull, 9223372036854775808ull}},
+{{11068046444225730970ull, 11068046444225730969ull,
+ 11068046444225730969ull, 1844674407370955161ull}},
+{{3689348814741910324ull, 3689348814741910323ull,
+ 3689348814741910323ull, 3689348814741910323ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 7378697629483820646ull}},
+{{12543785970122495099ull, 8854437155380584775ull,
+ 5165088340638674452ull, 1475739525896764129ull}},
+{{6640827866535438582ull, 17708874310761169551ull,
+ 10330176681277348904ull, 2951479051793528258ull}},
+{{13281655733070877164ull, 16971004547812787486ull,
+ 2213609288845146193ull, 5902958103587056517ull}},
+{{8116567392432202712ull, 15495265021916023357ull,
+ 4427218577690292387ull, 11805916207174113034ull}},
+{{12691359922712171512ull, 6788401819125114994ull,
+ 15642838974505699770ull, 2361183241434822606ull}},
+{{6935975771714791408ull, 13576803638250229989ull,
+ 12838933875301847924ull, 4722366482869645213ull}},
+{{13871951543429582816ull, 8706863202790908362ull,
+ 7231123676894144233ull, 9444732965739290427ull}},
+{{10153087938169737210ull, 1741372640558181672ull,
+ 8824922364862649493ull, 1888946593147858085ull}},
+{{1859431802629922803ull, 3482745281116363345ull,
+ 17649844729725298986ull, 3777893186295716170ull}},
+{{3718863605259845606ull, 6965490562232726690ull,
+ 16852945385741046356ull, 7555786372591432341ull}},
+{{8122470350535789768ull, 8771795741930365984ull,
+ 7059937891890119594ull, 1511157274518286468ull}},
+{{16244940701071579536ull, 17543591483860731968ull,
+ 14119875783780239188ull, 3022314549036572936ull}},
+{{14043137328433607455ull, 16640438894011912321ull,
+ 9793007493850926761ull, 6044629098073145873ull}},
+{{9639530583157663293ull, 14834133714314273027ull,
+ 1139270913992301907ull, 12089258196146291747ull}},
+{{5617254931373442982ull, 17724222001830495898ull,
+ 7606551812282281027ull, 2417851639229258349ull}},
+{{11234509862746885964ull, 17001699929951440180ull,
+ 15213103624564562055ull, 4835703278458516698ull}},
+{{4022275651784220311ull, 15556655786193328745ull,
+ 11979463175419572495ull, 9671406556917033397ull}},
+{{8183152759840664709ull, 10490028786722486395ull,
+ 9774590264567735145ull, 1934281311383406679ull}},
+{{16366305519681329418ull, 2533313499735421174ull,
+ 1102436455425918675ull, 3868562622766813359ull}},
+{{14285866965653107219ull, 5066626999470842349ull,
+ 2204872910851837350ull, 7737125245533626718ull}},
+{{10235871022614442091ull, 12081371844119899439ull,
+ 11509021026396098439ull, 1547425049106725343ull}},
+{{2024997971519332565ull, 5715999614530247263ull,
+ 4571297979082645263ull, 3094850098213450687ull}},
+{{4049995943038665129ull, 11431999229060494526ull,
+ 9142595958165290526ull, 6189700196426901374ull}},
+{{8099991886077330257ull, 4417254384411437436ull,
+ 18285191916330581053ull, 12379400392853802748ull}},
+{{8998696006699286698ull, 4572799691624197810ull,
+ 14725084827491847180ull, 2475880078570760549ull}},
+{{17997392013398573396ull, 9145599383248395620ull,
+ 11003425581274142744ull, 4951760157141521099ull}},
+{{17548039953087595175ull, 18291198766496791241ull,
+ 3560107088838733872ull, 9903520314283042199ull}},
+{{10888305620101339682ull, 7347588568041268571ull,
+ 15469416676735388067ull, 1980704062856608439ull}},
+{{3329867166493127747ull, 14695177136082537143ull,
+ 12492089279761224518ull, 3961408125713216879ull}},
+{{6659734332986255494ull, 10943610198455522670ull,
+ 6537434485812897421ull, 7922816251426433759ull}},
+{{1331946866597251099ull, 2188722039691104534ull,
+ 16064882156130220777ull, 1584563250285286751ull}},
+{{2663893733194502198ull, 4377444079382209068ull,
+ 13683020238550889938ull, 3169126500570573503ull}},
+{{5327787466389004395ull, 8754888158764418136ull,
+ 8919296403392228260ull, 6338253001141147007ull}},
+{{10655574932778008790ull, 17509776317528836272ull,
+ 17838592806784456520ull, 12676506002282294014ull}},
+{{5820463801297512082ull, 18259350522473408547ull,
+ 18325113820324532596ull, 2535301200456458802ull}},
+{{11640927602595024163ull, 18071956971237265478ull,
+ 18203483566939513577ull, 5070602400912917605ull}},
+{{4835111131480496709ull, 17697169868764979341ull,
+ 17960223060169475539ull, 10141204801825835211ull}},
+{{4656371041038009665ull, 3539433973752995868ull,
+ 7281393426775805431ull, 2028240960365167042ull}},
+{{9312742082076019330ull, 7078867947505991736ull,
+ 14562786853551610862ull, 4056481920730334084ull}},
+{{178740090442487044ull, 14157735895011983473ull,
+ 10678829633393670108ull, 8112963841460668169ull}},
+{{35748018088497409ull, 10210244808486217341ull,
+ 16893161185646375314ull, 1622592768292133633ull}},
+{{71496036176994818ull, 1973745543262883066ull, 15339578297583199013ull,
+ 3245185536584267267ull}},
+{{142992072353989635ull, 3947491086525766132ull,
+ 12232412521456846410ull, 6490371073168534535ull}},
+{{7407296043954618574ull, 789498217305153226ull, 2446482504291369282ull,
+ 1298074214633706907ull}},
+{{14814592087909237147ull, 1578996434610306452ull,
+ 4892965008582738564ull, 2596148429267413814ull}},
+{{11182440102108922678ull, 3157992869220612905ull,
+ 9785930017165477128ull, 5192296858534827628ull}},
+{{3918136130508293739ull, 6315985738441225811ull,
+ 1125115960621402640ull, 10384593717069655257ull}},
+{{11851673670327389718ull, 8641894777172065808ull,
+ 7603720821608101174ull, 2076918743413931051ull}},
+{{5256603266945227819ull, 17283789554344131617ull,
+ 15207441643216202348ull, 4153837486827862102ull}},
+{{10513206533890455638ull, 16120835034978711618ull,
+ 11968139212722853081ull, 8307674973655724205ull}},
+{{16860036565745732421ull, 6913515821737652646ull,
+ 2393627842544570616ull, 1661534994731144841ull}},
+{{15273329057781913225ull, 13827031643475305293ull,
+ 4787255685089141232ull, 3323069989462289682ull}},
+{{12099914041854274834ull, 9207319213241058971ull,
+ 9574511370178282465ull, 6646139978924579364ull}},
+{{2419982808370854967ull, 16598859101615853087ull,
+ 16672297533003297785ull, 1329227995784915872ull}},
+{{4839965616741709934ull, 14750974129522154558ull,
+ 14897850992297043955ull, 2658455991569831745ull}},
+{{9679931233483419867ull, 11055204185334757500ull,
+ 11348957910884536295ull, 5316911983139663491ull}},
+{{913118393257288118ull, 3663664296959963385ull, 4251171748059520975ull,
+ 10633823966279326983ull}},
+{{11250670122877188594ull, 11800779303617723646ull,
+ 11918280793837635164ull, 2126764793255865396ull}},
+{{4054596172044825571ull, 5154814533525895677ull,
+ 5389817513965718713ull, 4253529586511730793ull}},
+{{8109192344089651141ull, 10309629067051791354ull,
+ 10779635027931437426ull, 8507059173023461586ull}},
+{{5311187283559840552ull, 9440623442894178917ull,
+ 5845275820328197808ull, 1701411834604692317ull}},
+{{10622374567119681103ull, 434502812078806218ull,
+ 11690551640656395617ull, 3402823669209384634ull}},
+{{2798005060529810589ull, 869005624157612437ull, 4934359207603239618ull,
+ 6805647338418769269ull}},
+{{15316996271073603411ull, 7552498754315343133ull,
+ 15744267100488289216ull, 1361129467683753853ull}},
+{{12187248468437655206ull, 15104997508630686267ull,
+ 13041790127267026816ull, 2722258935367507707ull}},
+{{5927752863165758795ull, 11763250943551820919ull,
+ 7636836180824502017ull, 5444517870735015415ull}},
+{{11855505726331517589ull, 5079757813394090222ull,
+ 15273672361649004035ull, 10889035741470030830ull}},
+{{9749798774750124165ull, 1015951562678818044ull,
+ 3054734472329800807ull, 2177807148294006166ull}},
+{{1052853475790696713ull, 2031903125357636089ull,
+ 6109468944659601614ull, 4355614296588012332ull}},
+{{2105706951581393425ull, 4063806250715272178ull,
+ 12218937889319203228ull, 8711228593176024664ull}},
+{{421141390316278685ull, 8191458879626875082ull,
+ 17201182836831481938ull, 1742245718635204932ull}},
+{{842282780632557370ull, 16382917759253750164ull,
+ 15955621599953412260ull, 3484491437270409865ull}},
+{{1684565561265114740ull, 14319091444797948712ull,
+ 13464499126197272905ull, 6968982874540819731ull}},
+{{11404959556478753918ull, 6553167103701500065ull,
+ 6382248639981364904ull, 1393796574908163946ull}},
+{{4363175039247956220ull, 13106334207403000131ull,
+ 12764497279962729808ull, 2787593149816327892ull}},
+{{8726350078495912439ull, 7765924341096448646ull,
+ 7082250486215908001ull, 5575186299632655785ull}},
+{{17452700156991824877ull, 15531848682192897292ull,
+ 14164500972431816002ull, 11150372599265311570ull}},
+{{18247935290366006269ull, 10485067365922400104ull,
+ 2832900194486363200ull, 2230074519853062314ull}},
+{{18049126507022460921ull, 2523390658135248593ull,
+ 5665800388972726401ull, 4460149039706124628ull}},
+{{17651508940335370225ull, 5046781316270497187ull,
+ 11331600777945452802ull, 8920298079412249256ull}},
+{{3530301788067074045ull, 12077402707479830407ull,
+ 5955668970331000883ull, 1784059615882449851ull}},
+{{7060603576134148090ull, 5708061341250109198ull,
+ 11911337940662001767ull, 3568119231764899702ull}},
+{{14121207152268296180ull, 11416122682500218396ull,
+ 5375931807614451918ull, 7136238463529799405ull}},
+{{17581636689421300529ull, 13351270980725774648ull,
+ 1075186361522890383ull, 1427247692705959881ull}},
+{{16716529305133049442ull, 8255797887741997681ull,
+ 2150372723045780767ull, 2854495385411919762ull}},
+{{14986314536556547267ull, 16511595775483995363ull,
+ 4300745446091561534ull, 5708990770823839524ull}},
+{{11525884999403542918ull, 14576447477258439111ull,
+ 8601490892183123069ull, 11417981541647679048ull}},
+{{13373223444106439554ull, 10293987124935508468ull,
+ 12788344622662355583ull, 2283596308329535809ull}},
+{{8299702814503327491ull, 2141230176161465321ull,
+ 7129945171615159551ull, 4567192616659071619ull}},
+{{16599405629006654981ull, 4282460352322930642ull,
+ 14259890343230319102ull, 9134385233318143238ull}},
+{{10698578755285151643ull, 856492070464586128ull,
+ 13920024512871794790ull, 1826877046663628647ull}},
+{{2950413436860751669ull, 1712984140929172257ull,
+ 9393304952034037964ull, 3653754093327257295ull}},
+{{5900826873721503338ull, 3425968281858344514ull, 339865830358524312ull,
+ 7307508186654514591ull}},
+{{8558863004228121314ull, 11753240100597399872ull,
+ 3757321980813615185ull, 1461501637330902918ull}},
+{{17117726008456242628ull, 5059736127485248128ull,
+ 7514643961627230371ull, 2923003274661805836ull}},
+{{15788707943202933640ull, 10119472254970496257ull,
+ 15029287923254460742ull, 5846006549323611672ull}},
+{{13130671812696315664ull, 1792200436231440899ull,
+ 11611831772799369869ull, 11692013098647223345ull}},
+{{13694180806764994103ull, 15115835346213929472ull,
+ 2322366354559873973ull, 2338402619729444669ull}},
+{{8941617539820436589ull, 11784926618718307329ull,
+ 4644732709119747947ull, 4676805239458889338ull}},
+{{17883235079640873178ull, 5123109163727063042ull,
+ 9289465418239495895ull, 9353610478917778676ull}},
+{{14644693460153905606ull, 4713970647487322931ull,
+ 5547241898389809502ull, 1870722095783555735ull}},
+{{10842642846598259595ull, 9427941294974645863ull,
+ 11094483796779619004ull, 3741444191567111470ull}},
+{{3238541619486967573ull, 409138516239740111ull, 3742223519849686393ull,
+ 7482888383134222941ull}},
+{{647708323897393515ull, 14839222962215589315ull,
+ 4437793518711847601ull, 1496577676626844588ull}},
+{{1295416647794787029ull, 11231701850721627014ull,
+ 8875587037423695203ull, 2993155353253689176ull}},
+{{2590833295589574058ull, 4016659627733702412ull,
+ 17751174074847390407ull, 5986310706507378352ull}},
+{{5181666591179148116ull, 8033319255467404824ull,
+ 17055604075985229198ull, 11972621413014756705ull}},
+{{8415030947719650270ull, 12674710295319211934ull,
+ 3411120815197045839ull, 2394524282602951341ull}},
+{{16830061895439300539ull, 6902676516928872252ull,
+ 6822241630394091679ull, 4789048565205902682ull}},
+{{15213379717169049462ull, 13805353033857744505ull,
+ 13644483260788183358ull, 9578097130411805364ull}},
+{{10421373572917630539ull, 10139768236255369547ull,
+ 17486291911125277964ull, 1915619426082361072ull}},
+{{2396003072125709462ull, 1832792398801187479ull,
+ 16525839748541004313ull, 3831238852164722145ull}},
+{{4792006144251418924ull, 3665584797602374958ull,
+ 14604935423372457010ull, 7662477704329444291ull}},
+{{15715796487817925078ull, 4422465774262385314ull,
+ 6610335899416401725ull, 1532495540865888858ull}},
+{{12984848901926298539ull, 8844931548524770629ull,
+ 13220671798832803450ull, 3064991081731777716ull}},
+{{7522953730143045462ull, 17689863097049541259ull,
+ 7994599523956055284ull, 6129982163463555433ull}},
+{{15045907460286090924ull, 16932982120389530902ull,
+ 15989199047912110569ull, 12259964326927110866ull}},
+{{10387879121541038832ull, 3386596424077906180ull,
+ 6887188624324332437ull, 2451992865385422173ull}},
+{{2329014169372526047ull, 6773192848155812361ull,
+ 13774377248648664874ull, 4903985730770844346ull}},
+{{4658028338745052093ull, 13546385696311624722ull,
+ 9102010423587778132ull, 9807971461541688693ull}},
+{{8310303297232831065ull, 2709277139262324944ull,
+ 12888448528943286596ull, 1961594292308337738ull}},
+{{16620606594465662130ull, 5418554278524649888ull,
+ 7330152984177021576ull, 3923188584616675477ull}},
+{{14794469115221772644ull, 10837108557049299777ull,
+ 14660305968354043152ull, 7846377169233350954ull}},
+{{14026940267270085499ull, 5856770526151770278ull,
+ 17689456452638449923ull, 1569275433846670190ull}},
+{{9607136460830619381ull, 11713541052303540557ull,
+ 16932168831567348230ull, 3138550867693340381ull}},
+{{767528847951687146ull, 4980338030897529499ull,
+ 15417593589425144845ull, 6277101735386680763ull}},
+{{1535057695903374291ull, 9960676061795058998ull,
+ 12388443105140738074ull, 12554203470773361527ull}},
+{{15064406798148316151ull, 5681484027100922122ull,
+ 9856386250511968261ull, 2510840694154672305ull}},
+{{11682069522587080686ull, 11362968054201844245ull,
+ 1266028427314384906ull, 5021681388309344611ull}},
+{{4917394971464609756ull, 4279192034694136875ull,
+ 2532056854628769813ull, 10043362776618689222ull}},
+{{983478994292921952ull, 855838406938827375ull, 7885109000409574609ull,
+ 2008672555323737844ull}},
+{{1966957988585843903ull, 1711676813877654750ull,
+ 15770218000819149218ull, 4017345110647475688ull}},
+{{3933915977171687805ull, 3423353627755309500ull,
+ 13093691927928746820ull, 8034690221294951377ull}},
+{{8165480824918158208ull, 8063368355034882546ull,
+ 9997436015069570010ull, 1606938044258990275ull}},
+{{16330961649836316415ull, 16126736710069765092ull,
+ 1548127956429588404ull, 3213876088517980551ull}},
+{{14215179225963081214ull, 13806729346429978569ull,
+ 3096255912859176809ull, 6427752177035961102ull}},
+{{2843035845192616243ull, 6450694684027906037ull,
+ 7997948812055656008ull, 1285550435407192220ull}},
+{{5686071690385232486ull, 12901389368055812074ull,
+ 15995897624111312016ull, 2571100870814384440ull}},
+{{11372143380770464971ull, 7356034662402072532ull,
+ 13545051174513072417ull, 5142201741628768881ull}},
+{{4297542687831378326ull, 14712069324804145065ull,
+ 8643358275316593218ull, 10284403483257537763ull}},
+{{4548857352308185989ull, 6631762679702739336ull,
+ 12796718099289049613ull, 2056880696651507552ull}},
+{{9097714704616371977ull, 13263525359405478672ull,
+ 7146692124868547610ull, 4113761393303015105ull}},
+{{18195429409232743953ull, 8080306645101405728ull,
+ 14293384249737095221ull, 8227522786606030210ull}},
+{{18396481140814190084ull, 5305410143762191468ull,
+ 2858676849947419044ull, 1645504557321206042ull}},
+{{18346218207918828551ull, 10610820287524382937ull,
+ 5717353699894838088ull, 3291009114642412084ull}},
+{{18245692342128105486ull, 2774896501339214259ull,
+ 11434707399789676177ull, 6582018229284824168ull}},
+{{18406533727393262390ull, 554979300267842851ull,
+ 13354987924183666205ull, 1316403645856964833ull}},
+{{18366323381076973164ull, 1109958600535685703ull,
+ 8263231774657780794ull, 2632807291713929667ull}},
+{{18285902688444394712ull, 2219917201071371407ull,
+ 16526463549315561588ull, 5265614583427859334ull}},
+{{18125061303179237808ull, 4439834402142742815ull,
+ 14606183024921571560ull, 10531229166855718669ull}},
+{{18382407519603488855ull, 15645362139396189855ull,
+ 17678631863951955604ull, 2106245833371143733ull}},
+{{18318070965497426093ull, 12843980205082828095ull,
+ 16910519654194359593ull, 4212491666742287467ull}},
+{{18189397857285300569ull, 7241216336456104575ull,
+ 15374295234679167571ull, 8424983333484574935ull}},
+{{7327228386198970437ull, 5137592082033131238ull,
+ 3074859046935833514ull, 1684996666696914987ull}},
+{{14654456772397940874ull, 10275184164066262476ull,
+ 6149718093871667028ull, 3369993333393829974ull}},
+{{10862169471086330132ull, 2103624254422973337ull,
+ 12299436187743334057ull, 6739986666787659948ull}},
+{{9551131523701086673ull, 420724850884594667ull,
+ 13527933681774397781ull, 1347997333357531989ull}},
+{{655518973692621730ull, 841449701769189335ull, 8609123289839243946ull,
+ 2695994666715063979ull}},
+{{1311037947385243460ull, 1682899403538378670ull,
+ 17218246579678487892ull, 5391989333430127958ull}},
+{{2622075894770486919ull, 3365798807076757340ull,
+ 15989749085647424168ull, 10783978666860255917ull}},
+{{524415178954097384ull, 673159761415351468ull, 10576647446613305480ull,
+ 2156795733372051183ull}},
+{{1048830357908194768ull, 1346319522830702936ull,
+ 2706550819517059344ull, 4313591466744102367ull}},
+{{2097660715816389535ull, 2692639045661405872ull,
+ 5413101639034118688ull, 8627182933488204734ull}},
+{{15176927402130919200ull, 7917225438616101820ull,
+ 15840015586774465030ull, 1725436586697640946ull}},
+{{11907110730552286784ull, 15834450877232203641ull,
+ 13233287099839378444ull, 3450873173395281893ull}},
+{{5367477387395021951ull, 13222157680754855667ull,
+ 8019830125969205273ull, 6901746346790563787ull}},
+{{8452193106962825037ull, 2644431536150971133ull,
+ 8982663654677661701ull, 1380349269358112757ull}},
+{{16904386213925650074ull, 5288863072301942266ull,
+ 17965327309355323402ull, 2760698538716225514ull}},
+{{15362028354141748531ull, 10577726144603884533ull,
+ 17483910545001095188ull, 5521397077432451029ull}},
+{{12277312634573945445ull, 2708708215498217451ull,
+ 16521077016292638761ull, 11042794154864902059ull}},
+{{6144811341656699413ull, 541741643099643490ull,
+ 18061610662226169045ull, 2208558830972980411ull}},
+{{12289622683313398825ull, 1083483286199286980ull,
+ 17676477250742786474ull, 4417117661945960823ull}},
+{{6132501292917246033ull, 2166966572398573961ull,
+ 16906210427776021332ull, 8834235323891921647ull}},
+{{1226500258583449207ull, 15190788573447356085ull,
+ 10759939715039024912ull, 1766847064778384329ull}},
+{{2453000517166898414ull, 11934833073185160554ull,
+ 3073135356368498209ull, 3533694129556768659ull}},
+{{4906001034333796827ull, 5422922072660769492ull,
+ 6146270712736996419ull, 7067388259113537318ull}},
+{{15738595465834400659ull, 8463282044015974544ull,
+ 12297300586773130253ull, 1413477651822707463ull}},
+{{13030446857959249701ull, 16926564088031949089ull,
+ 6147857099836708890ull, 2826955303645414927ull}},
+{{7614149642208947785ull, 15406384102354346563ull,
+ 12295714199673417781ull, 5653910607290829854ull}},
+{{15228299284417895569ull, 12366024130999141510ull,
+ 6144684325637283947ull, 11307821214581659709ull}},
+{{6735008671625489437ull, 6162553640941738625ull,
+ 15986332124095098082ull, 2261564242916331941ull}},
+{{13470017343250978874ull, 12325107281883477250ull,
+ 13525920174480644548ull, 4523128485832663883ull}},
+{{8493290612792406132ull, 6203470490057402885ull,
+ 8605096275251737481ull, 9046256971665327767ull}},
+{{12766704566784212196ull, 12308740542237211546ull,
+ 9099716884534168142ull, 1809251394333065553ull}},
+{{7086665059858872776ull, 6170737010764871477ull,
+ 18199433769068336285ull, 3618502788666131106ull}},
+{{14173330119717745552ull, 12341474021529742954ull,
+ 17952123464427120954ull, 7237005577332262213ull}},
+{{6524014838685459434ull, 9846992433789769237ull,
+ 14658471137111155160ull, 1447401115466452442ull}},
+{{13048029677370918867ull, 1247240793869986858ull,
+ 10870198200512758705ull, 2894802230932904885ull}},
+{{7649315281032286118ull, 2494481587739973717ull,
+ 3293652327315965794ull, 5789604461865809771ull}},
+{{15298630562064572236ull, 4988963175479947434ull,
+ 6587304654631931588ull, 11579208923731619542ull}},
+{{17817121371380555740ull, 997792635095989486ull,
+ 8696158560410206964ull, 2315841784746323908ull}},
+{{17187498669051559864ull, 1995585270191978973ull,
+ 17392317120820413928ull, 4631683569492647816ull}},
+{{15928253264393568112ull, 3991170540383957947ull,
+ 16337890167931276240ull, 9263367138985295633ull}},
+{{3185650652878713623ull, 11866280552302522559ull,
+ 14335624477811986217ull, 1852673427797059126ull}},
+{{6371301305757427245ull, 5285817030895493502ull,
+ 10224504881914420819ull, 3705346855594118253ull}},
+{{12742602611514854490ull, 10571634061790987004ull,
+ 2002265690119290022ull, 7410693711188236507ull}},
+{{13616566966528701868ull, 16871722071325838693ull,
+ 7779150767507678650ull, 1482138742237647301ull}},
+{{8786389859347852119ull, 15296700068942125771ull,
+ 15558301535015357301ull, 2964277484475294602ull}},
+{{17572779718695704238ull, 12146656064174699926ull,
+ 12669858996321162987ull, 5928554968950589205ull}},
+{{16698815363681856860ull, 5846568054639848237ull,
+ 6892973918932774359ull, 11857109937901178411ull}},
+{{10718460702220192019ull, 1169313610927969647ull,
+ 5067943598528465195ull, 2371421987580235682ull}},
+{{2990177330730832421ull, 2338627221855939295ull,
+ 10135887197056930390ull, 4742843975160471364ull}},
+{{5980354661461664842ull, 4677254443711878590ull,
+ 1825030320404309164ull, 9485687950320942729ull}},
+{{12264117376518063938ull, 12003497332968106687ull,
+ 15122401323048503125ull, 1897137590064188545ull}},
+{{6081490679326576260ull, 5560250592226661759ull,
+ 11798058572387454635ull, 3794275180128377091ull}},
+{{12162981358653152520ull, 11120501184453323518ull,
+ 5149373071065357654ull, 7588550360256754183ull}},
+{{2432596271730630504ull, 9602797866374485350ull,
+ 12097921058438802500ull, 1517710072051350836ull}},
+{{4865192543461261008ull, 758851659039419084ull, 5749098043168053385ull,
+ 3035420144102701673ull}},
+{{9730385086922522016ull, 1517703318078838168ull,
+ 11498196086336106770ull, 6070840288205403346ull}},
+{{1014026100135492416ull, 3035406636157676337ull,
+ 4549648098962661924ull, 12141680576410806693ull}},
+{{14960200478994739776ull, 7985778956715355913ull,
+ 11977976064018263354ull, 2428336115282161338ull}},
+{{11473656884279927936ull, 15971557913430711827ull,
+ 5509208054326975092ull, 4856672230564322677ull}},
+{{4500569694850304256ull, 13496371753151872039ull,
+ 11018416108653950185ull, 9713344461128645354ull}},
+{{11968160383195791821ull, 17456669609598015700ull,
+ 16961078480698431329ull, 1942668892225729070ull}},
+{{5489576692682032026ull, 16466595145486479785ull,
+ 15475412887687311043ull, 3885337784451458141ull}},
+{{10979153385364064051ull, 14486446217263407954ull,
+ 12504081701665070471ull, 7770675568902916283ull}},
+{{13263877121298543780ull, 17654684502420322883ull,
+ 13568862784558745063ull, 1554135113780583256ull}},
+{{8081010168887535944ull, 16862624931131094151ull,
+ 8690981495407938511ull, 3108270227561166513ull}},
+{{16162020337775071888ull, 15278505788552636686ull,
+ 17381962990815877023ull, 6216540455122333026ull}},
+{{13877296601840592159ull, 12110267503395721757ull,
+ 16317181907922202431ull, 12433080910244666053ull}},
+{{6464808135110028755ull, 17179448759646785644ull,
+ 14331482825810171455ull, 2486616182048933210ull}},
+{{12929616270220057510ull, 15912153445584019672ull,
+ 10216221577910791295ull, 4973232364097866421ull}},
+{{7412488466730563404ull, 13377562817458487729ull,
+ 1985699082112030975ull, 9946464728195732843ull}},
+{{8861195322829933328ull, 13743559007717428515ull,
+ 11465186260648137164ull, 1989292945639146568ull}},
+{{17722390645659866655ull, 9040373941725305414ull,
+ 4483628447586722713ull, 3978585891278293137ull}},
+{{16998037217610181693ull, 18080747883450610829ull,
+ 8967256895173445426ull, 7957171782556586274ull}},
+{{18157002702489677632ull, 3616149576690122165ull,
+ 16550846638002330378ull, 1591434356511317254ull}},
+{{17867261331269803647ull, 7232299153380244331ull,
+ 14654949202295109140ull, 3182868713022634509ull}},
+{{17287778588830055677ull, 14464598306760488663ull,
+ 10863154330880666664ull, 6365737426045269019ull}},
+{{16128813103950559738ull, 10482452539811425711ull,
+ 3279564588051781713ull, 12731474852090538039ull}},
+{{14293809065015842918ull, 9475188137446105788ull,
+ 15413308176577997635ull, 2546294970418107607ull}},
+{{10140874056322134219ull, 503632201182659961ull,
+ 12379872279446443655ull, 5092589940836215215ull}},
+{{1835004038934716821ull, 1007264402365319923ull,
+ 6313000485183335694ull, 10185179881672430431ull}},
+{{11435047252012674334ull, 201452880473063984ull,
+ 4951948911778577462ull, 2037035976334486086ull}},
+{{4423350430315797052ull, 402905760946127969ull, 9903897823557154924ull,
+ 4074071952668972172ull}},
+{{8846700860631594104ull, 805811521892255938ull, 1361051573404758232ull,
+ 8148143905337944345ull}},
+{{1769340172126318821ull, 7539859933862271834ull, 272210314680951646ull,
+ 1629628781067588869ull}},
+{{3538680344252637642ull, 15079719867724543668ull,
+ 544420629361903292ull, 3259257562135177738ull}},
+{{7077360688505275283ull, 11712695661739535720ull,
+ 1088841258723806585ull, 6518515124270355476ull}},
+{{5104820952442965380ull, 6031887947089817467ull,
+ 3907117066486671640ull, 1303703024854071095ull}},
+{{10209641904885930760ull, 12063775894179634934ull,
+ 7814234132973343280ull, 2607406049708142190ull}},
+{{1972539736062309903ull, 5680807714649718253ull,
+ 15628468265946686561ull, 5214812099416284380ull}},
+{{3945079472124619806ull, 11361615429299436506ull,
+ 12810192458183821506ull, 10429624198832568761ull}},
+{{11857062338650654931ull, 9651020715343707947ull,
+ 6251387306378674624ull, 2085924839766513752ull}},
+{{5267380603591758246ull, 855297356977864279ull,
+ 12502774612757349249ull, 4171849679533027504ull}},
+{{10534761207183516491ull, 1710594713955728558ull,
+ 6558805151805146882ull, 8343699359066055009ull}},
+{{16864347500404344591ull, 4031467757533056034ull,
+ 16069156289328670669ull, 1668739871813211001ull}},
+{{15281950927099137566ull, 8062935515066112069ull,
+ 13691568504947789722ull, 3337479743626422003ull}},
+{{12117157780488723516ull, 16125871030132224139ull,
+ 8936392936186027828ull, 6674959487252844007ull}},
+{{17180826815065385996ull, 3225174206026444827ull,
+ 9165976216721026212ull, 1334991897450568801ull}},
+{{15914909556421220376ull, 6450348412052889655ull,
+ 18331952433442052424ull, 2669983794901137602ull}},
+{{13383075039132889136ull, 12900696824105779311ull,
+ 18217160793174553232ull, 5339967589802275205ull}},
+{{8319406004556226656ull, 7354649574502007007ull,
+ 17987577512639554849ull, 10679935179604550411ull}},
+{{9042578830395065978ull, 1470929914900401401ull,
+ 7286864317269821293ull, 2135987035920910082ull}},
+{{18085157660790131956ull, 2941859829800802802ull,
+ 14573728634539642586ull, 4271974071841820164ull}},
+{{17723571247870712295ull, 5883719659601605605ull,
+ 10700713195369733556ull, 8543948143683640329ull}},
+{{3544714249574142459ull, 1176743931920321121ull,
+ 16897537898041588004ull, 1708789628736728065ull}},
+{{7089428499148284918ull, 2353487863840642242ull,
+ 15348331722373624392ull, 3417579257473456131ull}},
+{{14178856998296569836ull, 4706975727681284484ull,
+ 12249919371037697168ull, 6835158514946912263ull}},
+{{2835771399659313968ull, 4630743960278167220ull,
+ 13518030318433270403ull, 1367031702989382452ull}},
+{{5671542799318627935ull, 9261487920556334440ull,
+ 8589316563156989190ull, 2734063405978764905ull}},
+{{11343085598637255869ull, 76231767403117264ull,
+ 17178633126313978381ull, 5468126811957529810ull}},
+{{4239427123564960121ull, 152463534806234529ull,
+ 15910522178918405146ull, 10936253623915059621ull}},
+{{4537234239454902348ull, 7409190336445067552ull,
+ 6871453250525591352ull, 2187250724783011924ull}},
+{{9074468478909804695ull, 14818380672890135104ull,
+ 13742906501051182704ull, 4374501449566023848ull}},
+{{18148936957819609390ull, 11190017272070718592ull,
+ 9039068928392813793ull, 8749002899132047697ull}},
+{{11008485021047742525ull, 2238003454414143718ull,
+ 9186511415162383405ull, 1749800579826409539ull}},
+{{3570225968385933433ull, 4476006908828287437ull,
+ 18373022830324766810ull, 3499601159652819078ull}},
+{{7140451936771866865ull, 8952013817656574874ull,
+ 18299301586939982004ull, 6999202319305638157ull}},
+{{1428090387354373373ull, 5479751578273225298ull,
+ 11038557946871817047ull, 1399840463861127631ull}},
+{{2856180774708746746ull, 10959503156546450596ull,
+ 3630371820034082478ull, 2799680927722255263ull}},
+{{5712361549417493492ull, 3472262239383349576ull,
+ 7260743640068164957ull, 5599361855444510526ull}},
+{{11424723098834986984ull, 6944524478766699152ull,
+ 14521487280136329914ull, 11198723710889021052ull}},
+{{13352991063992728367ull, 5078253710495250153ull,
+ 10282995085511086629ull, 2239744742177804210ull}},
+{{8259238054275905117ull, 10156507420990500307ull,
+ 2119246097312621642ull, 4479489484355608421ull}},
+{{16518476108551810234ull, 1866270768271448998ull,
+ 4238492194625243285ull, 8958978968711216842ull}},
+{{3303695221710362047ull, 7751951783138110446ull,
+ 8226396068408869303ull, 1791795793742243368ull}},
+{{6607390443420724094ull, 15503903566276220892ull,
+ 16452792136817738606ull, 3583591587484486736ull}},
+{{13214780886841448187ull, 12561063058842890168ull,
+ 14458840199925925597ull, 7167183174968973473ull}},
+{{13711002621594020607ull, 2512212611768578033ull,
+ 13959814484210916089ull, 1433436634993794694ull}},
+{{8975261169478489598ull, 5024425223537156067ull,
+ 9472884894712280562ull, 2866873269987589389ull}},
+{{17950522338956979196ull, 10048850447074312134ull,
+ 499025715715009508ull, 5733746539975178779ull}},
+{{17454300604204406776ull, 1650956820439072653ull,
+ 998051431430019017ull, 11467493079950357558ull}},
+{{14558906565066612325ull, 330191364087814530ull,
+ 11267656730511734773ull, 2293498615990071511ull}},
+{{10671069056423673034ull, 660382728175629061ull,
+ 4088569387313917930ull, 4586997231980143023ull}},
+{{2895394039137794452ull, 1320765456351258123ull,
+ 8177138774627835860ull, 9173994463960286046ull}},
+{{15336474066795200184ull, 3953501906012161947ull,
+ 5324776569667477495ull, 1834798892792057209ull}},
+{{12226204059880848751ull, 7907003812024323895ull,
+ 10649553139334954990ull, 3669597785584114418ull}},
+{{6005664046052145885ull, 15814007624048647791ull,
+ 2852362204960358364ull, 7339195571168228837ull}},
+{{8579830438694249824ull, 6852150339551639881ull,
+ 7949170070475892319ull, 1467839114233645767ull}},
+{{17159660877388499647ull, 13704300679103279762ull,
+ 15898340140951784638ull, 2935678228467291534ull}},
+{{15872577681067447677ull, 8961857284497007909ull,
+ 13349936208194017661ull, 5871356456934583069ull}},
+{{13298411288425343738ull, 17923714568994015819ull,
+ 8253128342678483706ull, 11742712913869166139ull}},
+{{17417077516652710041ull, 3584742913798803163ull,
+ 16408020927503338034ull, 2348542582773833227ull}},
+{{16387410959595868465ull, 7169485827597606327ull,
+ 14369297781297124452ull, 4697085165547666455ull}},
+{{14328077845482185314ull, 14338971655195212655ull,
+ 10291851488884697288ull, 9394170331095332911ull}},
+{{17623010828064078356ull, 17625189590006683823ull,
+ 5747719112518849780ull, 1878834066219066582ull}},
+{{16799277582418605095ull, 16803635106303816031ull,
+ 11495438225037699561ull, 3757668132438133164ull}},
+{{15151811091127658574ull, 15160526138898080447ull,
+ 4544132376365847507ull, 7515336264876266329ull}},
+{{14098408662451262685ull, 6721454042521526412ull,
+ 15666221734240810794ull, 1503067252975253265ull}},
+{{9750073251192973753ull, 13442908085043052825ull,
+ 12885699394772069972ull, 3006134505950506531ull}},
+{{1053402428676395890ull, 8439072096376554035ull,
+ 7324654715834588329ull, 6012269011901013063ull}},
+{{2106804857352791779ull, 16878144192753108070ull,
+ 14649309431669176658ull, 12024538023802026126ull}},
+{{15178756230438199649ull, 18133024097518262906ull,
+ 6619210701075745654ull, 2404907604760405225ull}},
+{{11910768387166847682ull, 17819304121326974197ull,
+ 13238421402151491309ull, 4809815209520810450ull}},
+{{5374792700624143747ull, 17191864168944396779ull,
+ 8030098730593431003ull, 9619630419041620901ull}},
+{{12143004984350559719ull, 18195768092756520648ull,
+ 5295368560860596523ull, 1923926083808324180ull}},
+{{5839265894991567822ull, 17944792111803489681ull,
+ 10590737121721193047ull, 3847852167616648360ull}},
+{{11678531789983135644ull, 17442840149897427746ull,
+ 2734730169732834479ull, 7695704335233296721ull}},
+{{6025055172738537452ull, 3488568029979485549ull,
+ 4236294848688477219ull, 1539140867046659344ull}},
+{{12050110345477074904ull, 6977136059958971098ull,
+ 8472589697376954438ull, 3078281734093318688ull}},
+{{5653476617244598192ull, 13954272119917942197ull,
+ 16945179394753908876ull, 6156563468186637376ull}},
+{{11306953234489196384ull, 9461800166126332778ull,
+ 15443614715798266137ull, 12313126936373274753ull}},
+{{13329437091123570247ull, 1892360033225266555ull,
+ 14156769387385384197ull, 2462625387274654950ull}},
+{{8212130108537588877ull, 3784720066450533111ull,
+ 9866794701061216778ull, 4925250774549309901ull}},
+{{16424260217075177753ull, 7569440132901066222ull,
+ 1286845328412881940ull, 9850501549098619803ull}},
+{{3284852043415035551ull, 12581934470805944214ull,
+ 11325415509908307357ull, 1970100309819723960ull}},
+{{6569704086830071102ull, 6717124867902336812ull,
+ 4204086946107063099ull, 3940200619639447921ull}},
+{{13139408173660142203ull, 13434249735804673624ull,
+ 8408173892214126198ull, 7880401239278895842ull}},
+{{17385276893699669734ull, 2686849947160934724ull,
+ 9060332407926645886ull, 1576080247855779168ull}},
+{{16323809713689787851ull, 5373699894321869449ull,
+ 18120664815853291772ull, 3152160495711558336ull}},
+{{14200875353670024086ull, 10747399788643738899ull,
+ 17794585557997031928ull, 6304320991423116673ull}},
+{{9955006633630496555ull, 3048055503577926183ull,
+ 17142427042284512241ull, 12608641982846233347ull}},
+{{5680350141468009635ull, 11677657544941316206ull,
+ 10807183037940723094ull, 2521728396569246669ull}},
+{{11360700282936019269ull, 4908571016173080796ull,
+ 3167622002171894573ull, 5043456793138493339ull}},
+{{4274656492162486921ull, 9817142032346161593ull,
+ 6335244004343789146ull, 10086913586276986678ull}},
+{{8233628927916318031ull, 16720823665436873611ull,
+ 12335095245094488798ull, 2017382717255397335ull}},
+{{16467257855832636061ull, 14994903257164195606ull,
+ 6223446416479425981ull, 4034765434510794671ull}},
+{{14487771637955720506ull, 11543062440618839597ull,
+ 12446892832958851963ull, 8069530869021589342ull}},
+{{10276251957074964748ull, 2308612488123767919ull,
+ 9868076196075591039ull, 1613906173804317868ull}},
+{{2105759840440377880ull, 4617224976247535839ull,
+ 1289408318441630462ull, 3227812347608635737ull}},
+{{4211519680880755759ull, 9234449952495071678ull,
+ 2578816636883260924ull, 6455624695217271474ull}},
+{{4531652750918061475ull, 12914936434724745305ull,
+ 15273158586344293477ull, 1291124939043454294ull}},
+{{9063305501836122950ull, 7383128795739938994ull,
+ 12099573098979035339ull, 2582249878086908589ull}},
+{{18126611003672245900ull, 14766257591479877988ull,
+ 5752402124248519062ull, 5164499756173817179ull}},
+{{17806477933634940183ull, 11085771109250204361ull,
+ 11504804248497038125ull, 10328999512347634358ull}},
+{{18318690845694629330ull, 13285200666075771841ull,
+ 13369007293925138594ull, 2065799902469526871ull}},
+{{18190637617679707043ull, 8123657258441992067ull,
+ 8291270514140725573ull, 4131599804939053743ull}},
+{{17934531161649862470ull, 16247314516883984135ull,
+ 16582541028281451146ull, 8263199609878107486ull}},
+{{10965603861813793141ull, 10628160532860617473ull,
+ 7005857020398200552ull, 1652639921975621497ull}},
+{{3484463649918034665ull, 2809576992011683331ull,
+ 14011714040796401105ull, 3305279843951242994ull}},
+{{6968927299836069330ull, 5619153984023366662ull,
+ 9576684007883250594ull, 6610559687902485989ull}},
+{{1393785459967213866ull, 12191877241030404302ull,
+ 16672732060544291411ull, 1322111937580497197ull}},
+{{2787570919934427732ull, 5937010408351256988ull,
+ 14898720047379031207ull, 2644223875160994395ull}},
+{{5575141839868855464ull, 11874020816702513976ull,
+ 11350696021048510798ull, 5288447750321988791ull}},
+{{11150283679737710927ull, 5301297559695476336ull,
+ 4254647968387469981ull, 10576895500643977583ull}},
+{{2230056735947542186ull, 15817654770906736560ull,
+ 11918976037903224965ull, 2115379100128795516ull}},
+{{4460113471895084371ull, 13188565468103921504ull,
+ 5391208002096898315ull, 4230758200257591033ull}},
+{{8920226943790168742ull, 7930386862498291392ull,
+ 10782416004193796631ull, 8461516400515182066ull}},
+{{16541440647725675042ull, 8964775001983478924ull,
+ 5845832015580669649ull, 1692303280103036413ull}},
+{{14636137221741798467ull, 17929550003966957849ull,
+ 11691664031161339298ull, 3384606560206072826ull}},
+{{10825530369774045317ull, 17412355934224364083ull,
+ 4936583988613126981ull, 6769213120412145653ull}},
+{{9543803703438629710ull, 18239866445812514109ull,
+ 12055363241948356365ull, 1353842624082429130ull}},
+{{640863333167707804ull, 18032988817915476603ull,
+ 5663982410187161115ull, 2707685248164858261ull}},
+{{1281726666335415607ull, 17619233562121401590ull,
+ 11327964820374322231ull, 5415370496329716522ull}},
+{{2563453332670831214ull, 16791723050533251564ull,
+ 4209185567039092847ull, 10830740992659433045ull}},
+{{4202039481276076566ull, 10737042239590470959ull,
+ 841837113407818569ull, 2166148198531886609ull}},
+{{8404078962552153132ull, 3027340405471390302ull,
+ 1683674226815637139ull, 4332296397063773218ull}},
+{{16808157925104306264ull, 6054680810942780604ull,
+ 3367348453631274278ull, 8664592794127546436ull}},
+{{14429678029246592223ull, 15968331421156197413ull,
+ 4362818505468165178ull, 1732918558825509287ull}},
+{{10412611984783632829ull, 13489918768602843211ull,
+ 8725637010936330357ull, 3465837117651018574ull}},
+{{2378479895857714042ull, 8533093463496134807ull,
+ 17451274021872660715ull, 6931674235302037148ull}},
+{{475695979171542809ull, 12774665136924957931ull,
+ 14558301248600263112ull, 1386334847060407429ull}},
+{{951391958343085617ull, 7102586200140364246ull,
+ 10669858423490974609ull, 2772669694120814859ull}},
+{{1902783916686171233ull, 14205172400280728492ull,
+ 2892972773272397602ull, 5545339388241629719ull}},
+{{3805567833372342466ull, 9963600726851905368ull,
+ 5785945546544795205ull, 11090678776483259438ull}},
+{{4450462381416378817ull, 13060766589596112043ull,
+ 12225235553534690010ull, 2218135755296651887ull}},
+{{8900924762832757633ull, 7674789105482672470ull,
+ 6003727033359828405ull, 4436271510593303775ull}},
+{{17801849525665515266ull, 15349578210965344940ull,
+ 12007454066719656810ull, 8872543021186607550ull}},
+{{3560369905133103054ull, 3069915642193068988ull,
+ 2401490813343931362ull, 1774508604237321510ull}},
+{{7120739810266206107ull, 6139831284386137976ull,
+ 4802981626687862724ull, 3549017208474643020ull}},
+{{14241479620532412213ull, 12279662568772275952ull,
+ 9605963253375725448ull, 7098034416949286040ull}},
+{{2848295924106482443ull, 13523978957980186160ull,
+ 1921192650675145089ull, 1419606883389857208ull}},
+{{5696591848212964885ull, 8601213842250820704ull,
+ 3842385301350290179ull, 2839213766779714416ull}},
+{{11393183696425929770ull, 17202427684501641408ull,
+ 7684770602700580358ull, 5678427533559428832ull}},
+{{4339623319142307924ull, 15958111295293731201ull,
+ 15369541205401160717ull, 11356855067118857664ull}},
+{{8246622293312282232ull, 6880971073800656563ull,
+ 17831303500047873436ull, 2271371013423771532ull}},
+{{16493244586624564463ull, 13761942147601313126ull,
+ 17215862926386195256ull, 4542742026847543065ull}},
+{{14539745099539577309ull, 9077140221493074637ull,
+ 15984981779062838897ull, 9085484053695086131ull}},
+{{2907949019907915462ull, 12883474488524345897ull,
+ 6886345170554478102ull, 1817096810739017226ull}},
+{{5815898039815830924ull, 7320204903339140178ull,
+ 13772690341108956205ull, 3634193621478034452ull}},
+{{11631796079631661847ull, 14640409806678280356ull,
+ 9098636608508360794ull, 7268387242956068905ull}},
+{{2326359215926332370ull, 17685477220303297364ull,
+ 1819727321701672158ull, 1453677448591213781ull}},
+{{4652718431852664739ull, 16924210366897043112ull,
+ 3639454643403344317ull, 2907354897182427562ull}},
+{{9305436863705329478ull, 15401676660084534608ull,
+ 7278909286806688635ull, 5814709794364855124ull}},
+{{164129653701107339ull, 12356609246459517601ull,
+ 14557818573613377271ull, 11629419588729710248ull}},
+{{32825930740221468ull, 17228717108259544813ull,
+ 13979610158948406423ull, 2325883917745942049ull}},
+{{65651861480442936ull, 16010690142809538010ull, 9512476244187261231ull,
+ 4651767835491884099ull}},
+{{131303722960885872ull, 13574636211909524404ull, 578208414664970847ull,
+ 9303535670983768199ull}},
+{{26260744592177175ull, 6404276057123815204ull, 14873036941900635462ull,
+ 1860707134196753639ull}},
+{{52521489184354349ull, 12808552114247630408ull,
+ 11299329810091719308ull, 3721414268393507279ull}},
+{{105042978368708697ull, 7170360154785709200ull, 4151915546473887001ull,
+ 7442828536787014559ull}},
+{{21008595673741740ull, 1434072030957141840ull, 15587778368262418693ull,
+ 1488565707357402911ull}},
+{{42017191347483479ull, 2868144061914283680ull, 12728812662815285770ull,
+ 2977131414714805823ull}},
+{{84034382694966958ull, 5736288123828567360ull, 7010881251921019924ull,
+ 5954262829429611647ull}},
+{{168068765389933915ull, 11472576247657134720ull,
+ 14021762503842039848ull, 11908525658859223294ull}},
+{{7412311382561807430ull, 9673212879015247590ull,
+ 17561747759736049262ull, 2381705131771844658ull}},
+{{14824622765123614859ull, 899681684320943564ull,
+ 16676751445762546909ull, 4763410263543689317ull}},
+{{11202501456537678102ull, 1799363368641887129ull,
+ 14906758817815542202ull, 9526820527087378635ull}},
+{{5929849106049445944ull, 7738570303212198072ull,
+ 2981351763563108440ull, 1905364105417475727ull}},
+{{11859698212098891888ull, 15477140606424396144ull,
+ 5962703527126216880ull, 3810728210834951454ull}},
+{{5272652350488232159ull, 12507537139139240673ull,
+ 11925407054252433761ull, 7621456421669902908ull}},
+{{8433228099581467079ull, 17258902686795489427ull,
+ 13453127855076217721ull, 1524291284333980581ull}},
+{{16866456199162934157ull, 16071061299881427238ull,
+ 8459511636442883827ull, 3048582568667961163ull}},
+{{15286168324616316697ull, 13695378526053302861ull,
+ 16919023272885767655ull, 6097165137335922326ull}},
+{{12125592575523081777ull, 8944012978397054107ull,
+ 15391302472061983695ull, 12194330274671844653ull}},
+{{2425118515104616356ull, 12856849039905141791ull,
+ 14146306938638127708ull, 2438866054934368930ull}},
+{{4850237030209232711ull, 7266954006100731966ull,
+ 9845869803566703801ull, 4877732109868737861ull}},
+{{9700474060418465421ull, 14533908012201463932ull,
+ 1244995533423855986ull, 9755464219737475723ull}},
+{{5629443626825603408ull, 17664176861407934079ull,
+ 11317045550910502166ull, 1951092843947495144ull}},
+{{11258887253651206815ull, 16881609649106316542ull,
+ 4187347028111452717ull, 3902185687894990289ull}},
+{{4071030433592862014ull, 15316475224503081469ull,
+ 8374694056222905435ull, 7804371375789980578ull}},
+{{8192903716202393050ull, 14131341489126347263ull,
+ 12742985255470312056ull, 1560874275157996115ull}},
+{{16385807432404786099ull, 9815938904543142910ull,
+ 7039226437231072497ull, 3121748550315992231ull}},
+{{14324870791100020581ull, 1185133735376734205ull,
+ 14078452874462144995ull, 6243497100631984462ull}},
+{{10202997508490489545ull, 2370267470753468411ull,
+ 9710161675214738374ull, 12486994201263968925ull}},
+{{2040599501698097909ull, 15231448753118334975ull,
+ 1942032335042947674ull, 2497398840252793785ull}},
+{{4081199003396195818ull, 12016153432527118334ull,
+ 3884064670085895349ull, 4994797680505587570ull}},
+{{8162398006792391636ull, 5585562791344685052ull,
+ 7768129340171790699ull, 9989595361011175140ull}},
+{{5321828416100388651ull, 15874507817236578303ull,
+ 1553625868034358139ull, 1997919072202235028ull}},
+{{10643656832200777301ull, 13302271560763604990ull,
+ 3107251736068716279ull, 3995838144404470056ull}},
+{{2840569590692002986ull, 8157799047817658365ull,
+ 6214503472137432559ull, 7991676288808940112ull}},
+{{4257462732880310921ull, 5320908624305441996ull,
+ 8621598323911307158ull, 1598335257761788022ull}},
+{{8514925465760621841ull, 10641817248610883992ull,
+ 17243196647822614316ull, 3196670515523576044ull}},
+{{17029850931521243682ull, 2836890423512216368ull,
+ 16039649221935677017ull, 6393341031047152089ull}},
+{{15612957789332935747ull, 5673780847024432737ull,
+ 13632554370161802418ull, 12786682062094304179ull}},
+{{17879986816834228443ull, 8513453798888707193ull,
+ 17483906133000001776ull, 2557336412418860835ull}},
+{{17313229559958905269ull, 17026907597777414387ull,
+ 16521068192290451936ull, 5114672824837721671ull}},
+{{16179715046208258921ull, 15607071121845277159ull,
+ 14595392310871352257ull, 10229345649675443343ull}},
+{{17993338268209293077ull, 3121414224369055431ull,
+ 13987124906400001421ull, 2045869129935088668ull}},
+{{17539932462709034538ull, 6242828448738110863ull,
+ 9527505739090451226ull, 4091738259870177337ull}},
+{{16633120851708517460ull, 12485656897476221727ull,
+ 608267404471350836ull, 8183476519740354675ull}},
+{{14394670614567434462ull, 6186480194237154668ull,
+ 121653480894270167ull, 1636695303948070935ull}},
+{{10342597155425317307ull, 12372960388474309337ull,
+ 243306961788540334ull, 3273390607896141870ull}},
+{{2238450237141082998ull, 6299176703239067059ull, 486613923577080669ull,
+ 6546781215792283740ull}},
+{{11515736491653947570ull, 16017230599615454704ull,
+ 97322784715416133ull, 1309356243158456748ull}},
+{{4584728909598343523ull, 13587717125521357793ull,
+ 194645569430832267ull, 2618712486316913496ull}},
+{{9169457819196687045ull, 8728690177333163970ull, 389291138861664535ull,
+ 5237424972633826992ull}},
+{{18338915638393374090ull, 17457380354666327940ull,
+ 778582277723329070ull, 10474849945267653984ull}},
+{{18425178386646316111ull, 18248871329900906880ull,
+ 14913111714512307106ull, 2094969989053530796ull}},
+{{18403612699583080606ull, 18050998586092262145ull,
+ 11379479355315062597ull, 4189939978107061593ull}},
+{{18360481325456609595ull, 17655253098474972675ull,
+ 4312214636920573579ull, 8379879956214123187ull}},
+{{7361445079833232243ull, 7220399434436904858ull,
+ 8241140556867935362ull, 1675975991242824637ull}},
+{{14722890159666464485ull, 14440798868873809716ull,
+ 16482281113735870724ull, 3351951982485649274ull}},
+{{10999036245623377353ull, 10434853664038067817ull,
+ 14517818153762189833ull, 6703903964971298549ull}},
+{{16957202508092316764ull, 9465668362291434209ull,
+ 17660958889720079259ull, 1340780792994259709ull}},
+{{15467660942475081911ull, 484592650873316803ull,
+ 16875173705730606903ull, 2681561585988519419ull}},
+{{12488577811240612206ull, 969185301746633607ull,
+ 15303603337751662190ull, 5363123171977038839ull}},
+{{6530411548771672795ull, 1938370603493267215ull,
+ 12160462601793772764ull, 10726246343954077679ull}},
+{{12374128753980065529ull, 11455720564924384412ull,
+ 17189487779326395845ull, 2145249268790815535ull}},
+{{6301513434250579442ull, 4464697056139217209ull,
+ 15932231484943240075ull, 4290498537581631071ull}},
+{{12603026868501158883ull, 8929394112278434418ull,
+ 13417718896176928534ull, 8580997075163262143ull}},
+{{2520605373700231777ull, 9164576451939507530ull,
+ 13751590223461116676ull, 1716199415032652428ull}},
+{{5041210747400463553ull, 18329152903879015060ull,
+ 9056436373212681736ull, 3432398830065304857ull}},
+{{10082421494800927106ull, 18211561734048478504ull,
+ 18112872746425363473ull, 6864797660130609714ull}},
+{{5705833113702095745ull, 11021009976293516347ull,
+ 18379969808252713987ull, 1372959532026121942ull}},
+{{11411666227404191489ull, 3595275878877481078ull,
+ 18313195542795876359ull, 2745919064052243885ull}},
+{{4376588381098831362ull, 7190551757754962157ull,
+ 18179647011882201102ull, 5491838128104487771ull}},
+{{8753176762197662723ull, 14381103515509924314ull,
+ 17912549950054850588ull, 10983676256208975543ull}},
+{{1750635352439532545ull, 6565569517843895186ull,
+ 14650556434236701087ull, 2196735251241795108ull}},
+{{3501270704879065090ull, 13131139035687790372ull,
+ 10854368794763850558ull, 4393470502483590217ull}},
+{{7002541409758130179ull, 7815533997666029128ull,
+ 3261993515818149501ull, 8786941004967180435ull}},
+{{16157903540919267329ull, 5252455614275116148ull,
+ 652398703163629900ull, 1757388200993436087ull}},
+{{13869063008128983041ull, 10504911228550232297ull,
+ 1304797406327259800ull, 3514776401986872174ull}},
+{{9291381942548414466ull, 2563078383390912979ull,
+ 2609594812654519601ull, 7029552803973744348ull}},
+{{12926322832735413863ull, 15270010935645823888ull,
+ 11589965406756634889ull, 1405910560794748869ull}},
+{{7405901591761276110ull, 12093277797582096161ull,
+ 4733186739803718163ull, 2811821121589497739ull}},
+{{14811803183522552219ull, 5739811521454640706ull,
+ 9466373479607436327ull, 5623642243178995478ull}},
+{{11176862293335552822ull, 11479623042909281413ull,
+ 486002885505321038ull, 11247284486357990957ull}},
+{{13303418902892841534ull, 2295924608581856282ull,
+ 7475898206584884854ull, 2249456897271598191ull}},
+{{8160093732076131452ull, 4591849217163712565ull,
+ 14951796413169769708ull, 4498913794543196382ull}},
+{{16320187464152262904ull, 9183698434327425130ull,
+ 11456848752629987800ull, 8997827589086392765ull}},
+{{3264037492830452581ull, 1836739686865485026ull,
+ 2291369750525997560ull, 1799565517817278553ull}},
+{{6528074985660905162ull, 3673479373730970052ull,
+ 4582739501051995120ull, 3599131035634557106ull}},
+{{13056149971321810324ull, 7346958747461940104ull,
+ 9165479002103990240ull, 7198262071269114212ull}},
+{{6300578809006272388ull, 8848089378976208667ull,
+ 9211793429904618694ull, 1439652414253822842ull}},
+{{12601157618012544776ull, 17696178757952417334ull,
+ 18423586859809237388ull, 2879304828507645684ull}},
+{{6755571162315537936ull, 16945613442195283053ull,
+ 18400429645908923161ull, 5758609657015291369ull}},
+{{13511142324631075871ull, 15444482810681014490ull,
+ 18354115218108294707ull, 11517219314030582739ull}},
+{{6391577279668125498ull, 6778245376878113221ull,
+ 18428218302589300234ull, 2303443862806116547ull}},
+{{12783154559336250995ull, 13556490753756226442ull,
+ 18409692531469048852ull, 4606887725612233095ull}},
+{{7119565044962950374ull, 8666237433802901269ull,
+ 18372640989228546089ull, 9213775451224466191ull}},
+{{16181308267960231368ull, 1733247486760580253ull,
+ 7363877012587619541ull, 1842755090244893238ull}},
+{{13915872462210911119ull, 3466494973521160507ull,
+ 14727754025175239082ull, 3685510180489786476ull}},
+{{9385000850712270622ull, 6932989947042321015ull,
+ 11008763976640926548ull, 7371020360979572953ull}},
+{{5566348984884364448ull, 5075946804150374526ull,
+ 13269799239553916279ull, 1474204072195914590ull}},
+{{11132697969768728896ull, 10151893608300749052ull,
+ 8092854405398280942ull, 2948408144391829181ull}},
+{{3818651865827906175ull, 1857043142891946489ull,
+ 16185708810796561885ull, 5896816288783658362ull}},
+{{7637303731655812349ull, 3714086285783892978ull,
+ 13924673547883572154ull, 11793632577567316725ull}},
+{{8906158375814983117ull, 15500212516124419888ull,
+ 2784934709576714430ull, 2358726515513463345ull}},
+{{17812316751629966233ull, 12553680958539288160ull,
+ 5569869419153428861ull, 4717453031026926690ull}},
+{{17177889429550380849ull, 6660617843369024705ull,
+ 11139738838306857723ull, 9434906062053853380ull}},
+{{14503624330135807140ull, 12400170012899535910ull,
+ 2227947767661371544ull, 1886981212410770676ull}},
+{{10560504586562062663ull, 6353595952089520205ull,
+ 4455895535322743089ull, 3773962424821541352ull}},
+{{2674265099414573710ull, 12707191904179040411ull,
+ 8911791070645486178ull, 7547924849643082704ull}},
+{{11602899464108645712ull, 9920136010319628728ull,
+ 16539753473096738528ull, 1509584969928616540ull}},
+{{4759054854507739807ull, 1393527946929705841ull,
+ 14632762872483925441ull, 3019169939857233081ull}},
+{{9518109709015479614ull, 2787055893859411682ull,
+ 10818781671258299266ull, 6038339879714466163ull}},
+{{589475344321407612ull, 5574111787718823365ull, 3190819268807046916ull,
+ 12076679759428932327ull}},
+{{11185941513090012492ull, 12182868801769495642ull,
+ 8016861483245230029ull, 2415335951885786465ull}},
+{{3925138952470473368ull, 5918993529829439669ull,
+ 16033722966490460059ull, 4830671903771572930ull}},
+{{7850277904940946736ull, 11837987059658879338ull,
+ 13620701859271368502ull, 9661343807543145861ull}},
+{{5259404395730099671ull, 13435643856157506837ull,
+ 6413489186596184023ull, 1932268761508629172ull}},
+{{10518808791460199341ull, 8424543638605462058ull,
+ 12826978373192368047ull, 3864537523017258344ull}},
+{{2590873509210847066ull, 16849087277210924117ull,
+ 7207212672675184478ull, 7729075046034516689ull}},
+{{15275569960809810706ull, 10748515084926005469ull,
+ 16198837793502678188ull, 1545815009206903337ull}},
+{{12104395847910069796ull, 3050286096142459323ull,
+ 13950931513295804761ull, 3091630018413806675ull}},
+{{5762047622110587976ull, 6100572192284918647ull,
+ 9455118952882057906ull, 6183260036827613351ull}},
+{{11524095244221175951ull, 12201144384569837294ull,
+ 463493832054564196ull, 12366520073655226703ull}},
+{{13372865493069966160ull, 17197624135881608751ull,
+ 11160745210636643808ull, 2473304014731045340ull}},
+{{8298986912430380704ull, 15948504198053665887ull,
+ 3874746347563736001ull, 4946608029462090681ull}},
+{{16597973824860761408ull, 13450264322397780158ull,
+ 7749492695127472003ull, 9893216058924181362ull}},
+{{14387641209197883252ull, 2690052864479556031ull,
+ 8928596168509315047ull, 1978643211784836272ull}},
+{{10328538344686214887ull, 5380105728959112063ull,
+ 17857192337018630094ull, 3957286423569672544ull}},
+{{2210332615662878157ull, 10760211457918224127ull,
+ 17267640600327708572ull, 7914572847139345089ull}},
+{{11510112967358306601ull, 5841391106325555148ull,
+ 18210923379033183007ull, 1582914569427869017ull}},
+{{4573481861007061586ull, 11682782212651110297ull,
+ 17975102684356814398ull, 3165829138855738035ull}},
+{{9146963722014123172ull, 4918820351592668978ull,
+ 17503461295004077181ull, 6331658277711476071ull}},
+{{18293927444028246343ull, 9837640703185337956ull,
+ 16560178516298602746ull, 12663316555422952143ull}},
+{{3658785488805649269ull, 16724923399604708884ull,
+ 14380082147485451518ull, 2532663311084590428ull}},
+{{7317570977611298537ull, 15003102725499866152ull,
+ 10313420221261351421ull, 5065326622169180857ull}},
+{{14635141955222597074ull, 11559461377290180688ull,
+ 2180096368813151227ull, 10130653244338361715ull}},
+{{2927028391044519415ull, 9690589904941856784ull, 436019273762630245ull,
+ 2026130648867672343ull}},
+{{5854056782089038830ull, 934435736174161952ull, 872038547525260491ull,
+ 4052261297735344686ull}},
+{{11708113564178077660ull, 1868871472348323904ull,
+ 1744077095050520982ull, 8104522595470689372ull}},
+{{13409669157061346502ull, 15131169553437306073ull,
+ 7727513048493924842ull, 1620904519094137874ull}},
+{{8372594240413141387ull, 11815595033165060531ull,
+ 15455026096987849685ull, 3241809038188275748ull}},
+{{16745188480826282774ull, 5184445992620569446ull,
+ 12463308120266147755ull, 6483618076376551497ull}},
+{{14417084140390987525ull, 8415586828007934535ull,
+ 9871359253537050197ull, 1296723615275310299ull}},
+{{10387424207072423433ull, 16831173656015869071ull,
+ 1295974433364548778ull, 2593447230550620599ull}},
+{{2328104340435295250ull, 15215603238322186527ull,
+ 2591948866729097557ull, 5186894461101241198ull}},
+{{4656208680870590499ull, 11984462402934821438ull,
+ 5183897733458195115ull, 10373788922202482396ull}},
+{{15688636995141759393ull, 6086241295328874610ull,
+ 4726128361433549346ull, 2074757784440496479ull}},
+{{12930529916573967170ull, 12172482590657749221ull,
+ 9452256722867098692ull, 4149515568880992958ull}},
+{{7414315759438382723ull, 5898221107605946827ull, 457769372024645769ull,
+ 8299031137761985917ull}},
+{{12550909596113407515ull, 4868993036263099688ull,
+ 7470251503888749800ull, 1659806227552397183ull}},
+{{6655075118517263413ull, 9737986072526199377ull,
+ 14940503007777499600ull, 3319612455104794366ull}},
+{{13310150237034526825ull, 1029228071342847138ull,
+ 11434261941845447585ull, 6639224910209588733ull}},
+{{6351378862148815689ull, 11273892058494300397ull,
+ 13354898832594820486ull, 1327844982041917746ull}},
+{{12702757724297631377ull, 4101040043279049178ull,
+ 8263053591480089357ull, 2655689964083835493ull}},
+{{6958771374885711137ull, 8202080086558098357ull,
+ 16526107182960178714ull, 5311379928167670986ull}},
+{{13917542749771422273ull, 16404160173116196714ull,
+ 14605470292210805812ull, 10622759856335341973ull}},
+{{17540903808921925748ull, 3280832034623239342ull,
+ 13989140502667892132ull, 2124551971267068394ull}},
+{{16635063544134299879ull, 6561664069246478685ull,
+ 9531536931626232648ull, 4249103942534136789ull}},
+{{14823383014559048142ull, 13123328138492957371ull,
+ 616329789542913680ull, 8498207885068273579ull}},
+{{2964676602911809629ull, 17382060886666232767ull,
+ 14880661216876224028ull, 1699641577013654715ull}},
+{{5929353205823619257ull, 16317377699622913918ull,
+ 11314578360042896441ull, 3399283154027309431ull}},
+{{11858706411647238513ull, 14188011325536276220ull,
+ 4182412646376241267ull, 6798566308054618863ull}},
+{{2371741282329447703ull, 2837602265107255244ull,
+ 11904528973500979223ull, 1359713261610923772ull}},
+{{4743482564658895406ull, 5675204530214510488ull,
+ 5362313873292406830ull, 2719426523221847545ull}},
+{{9486965129317790811ull, 11350409060429020976ull,
+ 10724627746584813660ull, 5438853046443695090ull}},
+{{527186184926030005ull, 4254074047148490337ull, 3002511419460075705ull,
+ 10877706092887390181ull}},
+{{11173483681210936971ull, 4540163624171608390ull,
+ 4289851098633925464ull, 2175541218577478036ull}},
+{{3900223288712322326ull, 9080327248343216781ull,
+ 8579702197267850928ull, 4351082437154956072ull}},
+{{7800446577424644651ull, 18160654496686433562ull,
+ 17159404394535701856ull, 8702164874309912144ull}},
+{{8938786944968749577ull, 3632130899337286712ull,
+ 18189276137874781664ull, 1740432974861982428ull}},
+{{17877573889937499153ull, 7264261798674573424ull,
+ 17931808202040011712ull, 3480865949723964857ull}},
+{{17308403706165446690ull, 14528523597349146849ull,
+ 17416872330370471808ull, 6961731899447929715ull}},
+{{10840378370716909985ull, 13973751163695560339ull,
+ 3483374466074094361ull, 1392346379889585943ull}},
+{{3234012667724268353ull, 9500758253681569063ull,
+ 6966748932148188723ull, 2784692759779171886ull}},
+{{6468025335448536706ull, 554772433653586510ull,
+ 13933497864296377447ull, 5569385519558343772ull}},
+{{12936050670897073411ull, 1109544867307173020ull,
+ 9420251654883203278ull, 11138771039116687545ull}},
+{{13655256578405145652ull, 11289955417687165573ull,
+ 1884050330976640655ull, 2227754207823337509ull}},
+{{8863769083100739688ull, 4133166761664779531ull,
+ 3768100661953281311ull, 4455508415646675018ull}},
+{{17727538166201479375ull, 8266333523329559062ull,
+ 7536201323906562622ull, 8911016831293350036ull}},
+{{3545507633240295875ull, 12721313148891642782ull,
+ 5196589079523222847ull, 1782203366258670007ull}},
+{{7091015266480591750ull, 6995882224073733948ull,
+ 10393178159046445695ull, 3564406732517340014ull}},
+{{14182030532961183500ull, 13991764448147467896ull,
+ 2339612244383339774ull, 7128813465034680029ull}},
+{{17593801365559877993ull, 13866399333855224548ull,
+ 15225317707844309247ull, 1425762693006936005ull}},
+{{16740858657410204370ull, 9286054594000897481ull,
+ 12003891341979066879ull, 2851525386013872011ull}},
+{{15034973241110857124ull, 125365114292243347ull,
+ 5561038610248582143ull, 5703050772027744023ull}},
+{{11623202408512162631ull, 250730228584486695ull,
+ 11122077220497164286ull, 11406101544055488046ull}},
+{{9703338111186253173ull, 7428843675200717985ull,
+ 5913764258841343180ull, 2281220308811097609ull}},
+{{959932148662954729ull, 14857687350401435971ull,
+ 11827528517682686360ull, 4562440617622195218ull}},
+{{1919864297325909458ull, 11268630627093320326ull,
+ 5208312961655821105ull, 9124881235244390437ull}},
+{{11452019303690912862ull, 9632423754902484711ull,
+ 8420360221814984867ull, 1824976247048878087ull}},
+{{4457294533672274107ull, 818103436095417807ull,
+ 16840720443629969735ull, 3649952494097756174ull}},
+{{8914589067344548213ull, 1636206872190835614ull,
+ 15234696813550387854ull, 7299904988195512349ull}},
+{{9161615442952730289ull, 11395287818663898092ull,
+ 17804334621677718863ull, 1459980997639102469ull}},
+{{18323230885905460578ull, 4343831563618244568ull,
+ 17161925169645886111ull, 2919961995278204939ull}},
+{{18199717698101369540ull, 8687663127236489137ull,
+ 15877106265582220606ull, 5839923990556409879ull}},
+{{17952691322493187464ull, 17375326254472978275ull,
+ 13307468457454889596ull, 11679847981112819759ull}},
+{{3590538264498637493ull, 3475065250894595655ull,
+ 17418888950458619212ull, 2335969596222563951ull}},
+{{7181076528997274986ull, 6950130501789191310ull,
+ 16391033827207686808ull, 4671939192445127903ull}},
+{{14362153057994549971ull, 13900261003578382620ull,
+ 14335323580705822000ull, 9343878384890255807ull}},
+{{10251128241082730641ull, 10158749830199497170ull,
+ 10245762345624985046ull, 1868775676978051161ull}},
+{{2055512408455909666ull, 1870755586689442725ull,
+ 2044780617540418477ull, 3737551353956102323ull}},
+{{4111024816911819331ull, 3741511173378885450ull,
+ 4089561235080836954ull, 7475102707912204646ull}},
+{{822204963382363867ull, 748302234675777090ull, 4507261061758077714ull,
+ 1495020541582440929ull}},
+{{1644409926764727733ull, 1496604469351554180ull,
+ 9014522123516155428ull, 2990041083164881858ull}},
+{{3288819853529455465ull, 2993208938703108360ull,
+ 18029044247032310856ull, 5980082166329763716ull}},
+{{6577639707058910929ull, 5986417877406216720ull,
+ 17611344420355070096ull, 11960164332659527433ull}},
+{{16072923200379423479ull, 15954678834448884636ull,
+ 14590315328296744988ull, 2392032866531905486ull}},
+{{13699102327049295341ull, 13462613595188217657ull,
+ 10733886582883938361ull, 4784065733063810973ull}},
+{{8951460580389039066ull, 8478483116666883699ull,
+ 3021029092058325107ull, 9568131466127621947ull}},
+{{12858338560303538783ull, 16453091882301018032ull,
+ 7982903447895485667ull, 1913626293225524389ull}},
+{{7269933046897525950ull, 14459439690892484449ull,
+ 15965806895790971335ull, 3827252586451048778ull}},
+{{14539866093795051900ull, 10472135308075417282ull,
+ 13484869717872391055ull, 7654505172902097557ull}},
+{{17665368477726651673ull, 9473124691098904102ull,
+ 10075671573058298857ull, 1530901034580419511ull}},
+{{16883992881743751730ull, 499505308488256589ull,
+ 1704599072407046099ull, 3061802069160839023ull}},
+{{15321241689777951843ull, 999010616976513179ull,
+ 3409198144814092198ull, 6123604138321678046ull}},
+{{12195739305846352069ull, 1998021233953026359ull,
+ 6818396289628184396ull, 12247208276643356092ull}},
+{{9817845490653091061ull, 11467650691016336241ull,
+ 8742376887409457525ull, 2449441655328671218ull}},
+{{1188946907596630505ull, 4488557308323120867ull,
+ 17484753774818915051ull, 4898883310657342436ull}},
+{{2377893815193261009ull, 8977114616646241734ull,
+ 16522763475928278486ull, 9797766621314684873ull}},
+{{11543625207264383172ull, 16552818182296889639ull,
+ 14372599139411386666ull, 1959553324262936974ull}},
+{{4640506340819214727ull, 14658892290884227663ull,
+ 10298454205113221717ull, 3919106648525873949ull}},
+{{9281012681638429454ull, 10871040508058903710ull,
+ 2150164336516891819ull, 7838213297051747899ull}},
+{{12924248980553416861ull, 13242254545837511711ull,
+ 15187428126271019656ull, 1567642659410349579ull}},
+{{7401753887397282105ull, 8037765017965471807ull,
+ 11928112178832487697ull, 3135285318820699159ull}},
+{{14803507774794564210ull, 16075530035930943614ull,
+ 5409480283955423778ull, 6270570637641398319ull}},
+{{11160271475879576803ull, 13704315998152335613ull,
+ 10818960567910847557ull, 12541141275282796638ull}},
+{{13300100739401646331ull, 2740863199630467122ull,
+ 13231838557807900481ull, 2508228255056559327ull}},
+{{8153457405093741045ull, 5481726399260934245ull,
+ 8016933041906249346ull, 5016456510113118655ull}},
+{{16306914810187482089ull, 10963452798521868490ull,
+ 16033866083812498692ull, 10032913020226237310ull}},
+{{10640080591521317065ull, 9571388189188194344ull,
+ 3206773216762499738ull, 2006582604045247462ull}},
+{{2833417109333082513ull, 696032304666837073ull, 6413546433524999477ull,
+ 4013165208090494924ull}},
+{{5666834218666165025ull, 1392064609333674146ull,
+ 12827092867049998954ull, 8026330416180989848ull}},
+{{12201413287958963975ull, 7657110551350555475ull,
+ 13633465017635730760ull, 1605266083236197969ull}},
+{{5956082502208376333ull, 15314221102701110951ull,
+ 8820185961561909904ull, 3210532166472395939ull}},
+{{11912165004416752666ull, 12181698131692670286ull,
+ 17640371923123819809ull, 6421064332944791878ull}},
+{{13450479445109081503ull, 9815037255822354703ull,
+ 14596120828850494931ull, 1284212866588958375ull}},
+{{8454214816508611390ull, 1183330437935157791ull,
+ 10745497583991438247ull, 2568425733177916751ull}},
+{{16908429633017222779ull, 2366660875870315582ull,
+ 3044251094273324878ull, 5136851466355833503ull}},
+{{15370115192324893942ull, 4733321751740631165ull,
+ 6088502188546649756ull, 10273702932711667006ull}},
+{{10452720667948799435ull, 8325361979831946879ull,
+ 4907049252451240274ull, 2054740586542333401ull}},
+{{2458697262188047254ull, 16650723959663893759ull,
+ 9814098504902480548ull, 4109481173084666802ull}},
+{{4917394524376094508ull, 14854703845618235902ull,
+ 1181452936095409481ull, 8218962346169333605ull}},
+{{12051525349100949872ull, 6660289583865557503ull,
+ 236290587219081896ull, 1643792469233866721ull}},
+{{5656306624492348127ull, 13320579167731115007ull,
+ 472581174438163792ull, 3287584938467733442ull}},
+{{11312613248984696253ull, 8194414261752678398ull,
+ 945162348876327585ull, 6575169876935466884ull}},
+{{9641220279280759897ull, 16396278111318176972ull,
+ 14946427728742906809ull, 1315033975387093376ull}},
+{{835696484851968178ull, 14345812148926802329ull,
+ 11446111383776262003ull, 2630067950774186753ull}},
+{{1671392969703936356ull, 10244880224144053042ull,
+ 4445478693842972391ull, 5260135901548373507ull}},
+{{3342785939407872711ull, 2043016374578554468ull,
+ 8890957387685944783ull, 10520271803096747014ull}},
+{{668557187881574543ull, 7787300904399531540ull,
+ 16535586736504830249ull, 2104054360619349402ull}},
+{{1337114375763149085ull, 15574601808799063080ull,
+ 14624429399300108882ull, 4208108721238698805ull}},
+{{2674228751526298169ull, 12702459543888574544ull,
+ 10802114724890666149ull, 8416217442477397611ull}},
+{{15292241009272900927ull, 2540491908777714908ull,
+ 5849771759720043553ull, 1683243488495479522ull}},
+{{12137737944836250237ull, 5080983817555429817ull,
+ 11699543519440087106ull, 3366486976990959044ull}},
+{{5828731815962948858ull, 10161967635110859635ull,
+ 4952342965170622596ull, 6732973953981918089ull}},
+{{1165746363192589772ull, 2032393527022171927ull,
+ 15747863852001765812ull, 1346594790796383617ull}},
+{{2331492726385179544ull, 4064787054044343854ull,
+ 13048983630293980008ull, 2693189581592767235ull}},
+{{4662985452770359087ull, 8129574108088687708ull,
+ 7651223186878408400ull, 5386379163185534471ull}},
+{{9325970905540718173ull, 16259148216177375416ull,
+ 15302446373756816800ull, 10772758326371068942ull}},
+{{12933240625333874605ull, 10630527272719295729ull,
+ 10439186904235184006ull, 2154551665274213788ull}},
+{{7419737176958197593ull, 2814310471729039843ull,
+ 2431629734760816397ull, 4309103330548427577ull}},
+{{14839474353916395185ull, 5628620943458079686ull,
+ 4863259469521632794ull, 8618206661096855154ull}},
+{{17725290129750920330ull, 12193770632917346906ull,
+ 15730047152871967851ull, 1723641332219371030ull}},
+{{17003836185792289044ull, 5940797192125142197ull,
+ 13013350232034384087ull, 3447282664438742061ull}},
+{{15560928297875026471ull, 11881594384250284395ull,
+ 7579956390359216558ull, 6894565328877484123ull}},
+{{6801534474316915618ull, 6065667691591967202ull,
+ 12584037722297574281ull, 1378913065775496824ull}},
+{{13603068948633831235ull, 12131335383183934404ull,
+ 6721331370885596946ull, 2757826131550993649ull}},
+{{8759393823558110854ull, 5815926692658317193ull,
+ 13442662741771193893ull, 5515652263101987298ull}},
+{{17518787647116221708ull, 11631853385316634386ull,
+ 8438581409832836170ull, 11031304526203974597ull}},
+{{14571803973648975312ull, 9705068306547147523ull,
+ 9066413911450387880ull, 2206260905240794919ull}},
+{{10696863873588399007ull, 963392539384743431ull,
+ 18132827822900775761ull, 4412521810481589838ull}},
+{{2946983673467246397ull, 1926785078769486863ull,
+ 17818911572091999906ull, 8825043620963179677ull}},
+{{4278745549435359603ull, 11453403459979628342ull,
+ 10942479943902220627ull, 1765008724192635935ull}},
+{{8557491098870719205ull, 4460062846249705068ull,
+ 3438215814094889639ull, 3530017448385271871ull}},
+{{17114982197741438410ull, 8920125692499410136ull,
+ 6876431628189779278ull, 7060034896770543742ull}},
+{{7112345254290198006ull, 1784025138499882027ull,
+ 8753983955121776502ull, 1412006979354108748ull}},
+{{14224690508580396011ull, 3568050276999764054ull,
+ 17507967910243553004ull, 2824013958708217496ull}},
+{{10002636943451240405ull, 7136100553999528109ull,
+ 16569191746777554392ull, 5648027917416434993ull}},
+{{1558529813192929194ull, 14272201107999056219ull,
+ 14691639419845557168ull, 11296055834832869987ull}},
+{{15069101221606227132ull, 2854440221599811243ull,
+ 10317025513452932080ull, 2259211166966573997ull}},
+{{11691458369502902647ull, 5708880443199622487ull,
+ 2187306953196312544ull, 4518422333933147995ull}},
+{{4936172665296253678ull, 11417760886399244975ull,
+ 4374613906392625088ull, 9036844667866295990ull}},
+{{12055280977284981706ull, 13351598621505579964ull,
+ 874922781278525017ull, 1807368933573259198ull}},
+{{5663817880860411795ull, 8256453169301608313ull,
+ 1749845562557050035ull, 3614737867146518396ull}},
+{{11327635761720823589ull, 16512906338603216626ull,
+ 3499691125114100070ull, 7229475734293036792ull}},
+{{13333573596569895688ull, 10681278897204463971ull,
+ 8078635854506640660ull, 1445895146858607358ull}},
+{{8220403119430239759ull, 2915813720699376327ull,
+ 16157271709013281321ull, 2891790293717214716ull}},
+{{16440806238860479518ull, 5831627441398752654ull,
+ 13867799344317011026ull, 5783580587434429433ull}},
+{{14434868404011407419ull, 11663254882797505309ull,
+ 9288854614924470436ull, 11567161174868858867ull}},
+{{10265671310286102131ull, 13400697420785232031ull,
+ 9236468552468714733ull, 2313432234973771773ull}},
+{{2084598546862652645ull, 8354650767860912447ull, 26193031227877851ull,
+ 4626864469947543547ull}},
+{{4169197093725305289ull, 16709301535721824894ull, 52386062455755702ull,
+ 9253728939895087094ull}},
+{{833839418745061058ull, 7031209121886275302ull,
+ 14767872471458792433ull, 1850745787979017418ull}},
+{{1667678837490122116ull, 14062418243772550604ull,
+ 11089000869208033250ull, 3701491575958034837ull}},
+{{3335357674980244231ull, 9678092413835549592ull,
+ 3731257664706514885ull, 7402983151916069675ull}},
+{{8045769164479869493ull, 1935618482767109918ull, 746251532941302977ull,
+ 1480596630383213935ull}},
+{{16091538328959738986ull, 3871236965534219836ull,
+ 1492503065882605954ull, 2961193260766427870ull}},
+{{13736332584209926355ull, 7742473931068439673ull,
+ 2985006131765211908ull, 5922386521532855740ull}},
+{{9025921094710301093ull, 15484947862136879347ull,
+ 5970012263530423816ull, 11844773043065711480ull}},
+{{12873230663167791189ull, 6786338387169286192ull,
+ 1194002452706084763ull, 2368954608613142296ull}},
+{{7299717252626030761ull, 13572676774338572385ull,
+ 2388004905412169526ull, 4737909217226284592ull}},
+{{14599434505252061521ull, 8698609474967593154ull,
+ 4776009810824339053ull, 9475818434452569184ull}},
+{{6609235715792322628ull, 9118419524477339277ull,
+ 15712597221132509103ull, 1895163686890513836ull}},
+{{13218471431584645255ull, 18236839048954678554ull,
+ 12978450368555466590ull, 3790327373781027673ull}},
+{{7990198789459738893ull, 18026934024199805493ull,
+ 7510156663401381565ull, 7580654747562055347ull}},
+{{1598039757891947779ull, 10984084434323781745ull,
+ 8880728962164096959ull, 1516130949512411069ull}},
+{{3196079515783895558ull, 3521424794938011874ull,
+ 17761457924328193919ull, 3032261899024822138ull}},
+{{6392159031567791115ull, 7042849589876023748ull,
+ 17076171774946836222ull, 6064523798049644277ull}},
+{{12784318063135582229ull, 14085699179752047496ull,
+ 15705599476184120828ull, 12129047596099288555ull}},
+{{17314258871594757739ull, 13885186280176140468ull,
+ 3141119895236824165ull, 2425809519219857711ull}},
+{{16181773669479963862ull, 9323628486642729321ull,
+ 6282239790473648331ull, 4851619038439715422ull}},
+{{13916803265250376107ull, 200512899575907027ull,
+ 12564479580947296663ull, 9703238076879430844ull}},
+{{17540755912017716515ull, 7418800209399002051ull,
+ 17270291175157100625ull, 1940647615375886168ull}},
+{{16634767750325881413ull, 14837600418798004103ull,
+ 16093838276604649634ull, 3881295230751772337ull}},
+{{14822791426942211209ull, 11228456763886456591ull,
+ 13740932479499747653ull, 7762590461503544675ull}},
+{{17721953544356083535ull, 13313737797003022287ull,
+ 2748186495899949530ull, 1552518092300708935ull}},
+{{16997163015002615453ull, 8180731520296492959ull,
+ 5496372991799899061ull, 3105036184601417870ull}},
+{{15547581956295679290ull, 16361463040592985919ull,
+ 10992745983599798122ull, 6210072369202835740ull}},
+{{12648419838881806964ull, 14276182007476420223ull,
+ 3538747893490044629ull, 12420144738405671481ull}},
+{{13597730412002092363ull, 2855236401495284044ull,
+ 4397098393439919249ull, 2484028947681134296ull}},
+{{8748716750294633109ull, 5710472802990568089ull,
+ 8794196786879838498ull, 4968057895362268592ull}},
+{{17497433500589266218ull, 11420945605981136178ull,
+ 17588393573759676996ull, 9936115790724537184ull}},
+{{14567533144343584214ull, 2284189121196227235ull,
+ 18275073973719576692ull, 1987223158144907436ull}},
+{{10688322214977616811ull, 4568378242392454471ull,
+ 18103403873729601768ull, 3974446316289814873ull}},
+{{2929900356245682005ull, 9136756484784908943ull,
+ 17760063673749651920ull, 7948892632579629747ull}},
+{{585980071249136401ull, 9206048926440802435ull,
+ 10930710364233751030ull, 1589778526515925949ull}},
+{{1171960142498272802ull, 18412097852881604870ull,
+ 3414676654757950444ull, 3179557053031851899ull}},
+{{2343920284996545604ull, 18377451632053658124ull,
+ 6829353309515900889ull, 6359114106063703798ull}},
+{{4687840569993091207ull, 18308159190397764632ull,
+ 13658706619031801779ull, 12718228212127407596ull}},
+{{8316265743482438888ull, 3661631838079552926ull,
+ 6421090138548270679ull, 2543645642425481519ull}},
+{{16632531486964877776ull, 7323263676159105852ull,
+ 12842180277096541358ull, 5087291284850963038ull}},
+{{14818318900220203935ull, 14646527352318211705ull,
+ 7237616480483531100ull, 10174582569701926077ull}},
+{{10342361409527861434ull, 10308003099947462987ull,
+ 8826220925580526866ull, 2034916513940385215ull}},
+{{2237978745346171251ull, 2169262126185374359ull,
+ 17652441851161053733ull, 4069833027880770430ull}},
+{{4475957490692342502ull, 4338524252370748718ull,
+ 16858139628612555850ull, 8139666055761540861ull}},
+{{15652586757106109794ull, 4557053665216060066ull,
+ 7060976740464421493ull, 1627933211152308172ull}},
+{{12858429440502667971ull, 9114107330432120133ull,
+ 14121953480928842986ull, 3255866422304616344ull}},
+{{7270114807295784325ull, 18228214660864240267ull,
+ 9797162888148134356ull, 6511732844609232689ull}},
+{{8832720590942977512ull, 3645642932172848053ull,
+ 16716827836597268164ull, 1302346568921846537ull}},
+{{17665441181885955023ull, 7291285864345696106ull,
+ 14986911599484984712ull, 2604693137843693075ull}},
+{{16884138290062358430ull, 14582571728691392213ull,
+ 11527079125260417808ull, 5209386275687386151ull}},
+{{15321532506415165243ull, 10718399383673232811ull,
+ 4607414176811284001ull, 10418772551374772303ull}},
+{{3064306501283033049ull, 16901075135702287855ull,
+ 11989529279587987769ull, 2083754510274954460ull}},
+{{6128613002566066097ull, 15355406197695024094ull,
+ 5532314485466423923ull, 4167509020549908921ull}},
+{{12257226005132132194ull, 12264068321680496572ull,
+ 11064628970932847847ull, 8335018041099817842ull}},
+{{6140794015768336762ull, 17210208923303740607ull,
+ 9591623423670390215ull, 1667003608219963568ull}},
+{{12281588031536673524ull, 15973673772897929598ull,
+ 736502773631228815ull, 3334007216439927137ull}},
+{{6116431989363795432ull, 13500603472086307581ull,
+ 1473005547262457631ull, 6668014432879854274ull}},
+{{4912635212614669410ull, 2700120694417261516ull,
+ 15051996368420132819ull, 1333602886575970854ull}},
+{{9825270425229338820ull, 5400241388834523032ull,
+ 11657248663130714022ull, 2667205773151941709ull}},
+{{1203796776749126023ull, 10800482777669046065ull,
+ 4867753252551876428ull, 5334411546303883419ull}},
+{{2407593553498252045ull, 3154221481628540514ull,
+ 9735506505103752857ull, 10668823092607766838ull}},
+{{15238913969667291702ull, 630844296325708102ull,
+ 13015147745246481541ull, 2133764618521553367ull}},
+{{12031083865625031788ull, 1261688592651416205ull,
+ 7583551416783411466ull, 4267529237043106735ull}},
+{{5615423657540511959ull, 2523377185302832411ull,
+ 15167102833566822932ull, 8535058474086213470ull}},
+{{12191131175733833362ull, 7883373066544387128ull,
+ 3033420566713364586ull, 1707011694817242694ull}},
+{{5935518277758115107ull, 15766746133088774257ull,
+ 6066841133426729172ull, 3414023389634485388ull}},
+{{11871036555516230214ull, 13086748192467996898ull,
+ 12133682266853458345ull, 6828046779268970776ull}},
+{{17131602570070887336ull, 6306698453235509702ull,
+ 6116085268112601992ull, 1365609355853794155ull}},
+{{15816461066432223055ull, 12613396906471019405ull,
+ 12232170536225203984ull, 2731218711707588310ull}},
+{{13186178059154894494ull, 6780049739232487195ull,
+ 6017596998740856353ull, 5462437423415176621ull}},
+{{7925612044600237372ull, 13560099478464974391ull,
+ 12035193997481712706ull, 10924874846830353242ull}},
+{{16342517667887688768ull, 13780066339918725847ull,
+ 9785736428980163187ull, 2184974969366070648ull}},
+{{14238291262065825919ull, 9113388606127900079ull,
+ 1124728784250774759ull, 4369949938732141297ull}},
+{{10029838450422100221ull, 18226777212255800159ull,
+ 2249457568501549518ull, 8739899877464282594ull}},
+{{5695316504826330368ull, 11024053071934980678ull,
+ 15207286772667951196ull, 1747979975492856518ull}},
+{{11390633009652660735ull, 3601362070160409740ull,
+ 11967829471626350777ull, 3495959950985713037ull}},
+{{4334521945595769854ull, 7202724140320819481ull,
+ 5488914869543149938ull, 6991919901971426075ull}},
+{{15624299648086795264ull, 12508591272289894865ull,
+ 1097782973908629987ull, 1398383980394285215ull}},
+{{12801855222464038911ull, 6570438470870238115ull,
+ 2195565947817259975ull, 2796767960788570430ull}},
+{{7156966371218526206ull, 13140876941740476231ull,
+ 4391131895634519950ull, 5593535921577140860ull}},
+{{14313932742437052412ull, 7835009809771400846ull,
+ 8782263791269039901ull, 11187071843154281720ull}},
+{{10241484177971231129ull, 5256350776696190492ull,
+ 1756452758253807980ull, 2237414368630856344ull}},
+{{2036224282232910642ull, 10512701553392380985ull,
+ 3512905516507615960ull, 4474828737261712688ull}},
+{{4072448564465821284ull, 2578659033075210354ull,
+ 7025811033015231921ull, 8949657474523425376ull}},
+{{4503838527635074580ull, 7894429436098862717ull,
+ 5094511021344956707ull, 1789931494904685075ull}},
+{{9007677055270149160ull, 15788858872197725434ull,
+ 10189022042689913414ull, 3579862989809370150ull}},
+{{18015354110540298320ull, 13130973670685899252ull,
+ 1931300011670275213ull, 7159725979618740301ull}},
+{{7292419636849969988ull, 17383589993104821143ull,
+ 4075608817075965365ull, 1431945195923748060ull}},
+{{14584839273699939975ull, 16320435912500090670ull,
+ 8151217634151930731ull, 2863890391847496120ull}},
+{{10722934473690328333ull, 14194127751290629725ull,
+ 16302435268303861463ull, 5727780783694992240ull}},
+{{2999124873671105049ull, 9941511428871707835ull,
+ 14158126462898171311ull, 11455561567389984481ull}},
+{{7978522604218041657ull, 9366999915258162213ull,
+ 6520974107321544585ull, 2291112313477996896ull}},
+{{15957045208436083313ull, 287255756806772810ull,
+ 13041948214643089171ull, 4582224626955993792ull}},
+{{13467346343162615009ull, 574511513613545621ull,
+ 7637152355576626726ull, 9164449253911987585ull}},
+{{10072166898116343649ull, 3804251117464619447ull,
+ 1527430471115325345ull, 1832889850782397517ull}},
+{{1697589722523135681ull, 7608502234929238895ull,
+ 3054860942230650690ull, 3665779701564795034ull}},
+{{3395179445046271361ull, 15217004469858477790ull,
+ 6109721884461301380ull, 7331559403129590068ull}},
+{{11747082333234985242ull, 14111447338197426527ull,
+ 12289990821117991245ull, 1466311880625918013ull}},
+{{5047420592760418868ull, 9776150602685301439ull,
+ 6133237568526430875ull, 2932623761251836027ull}},
+{{10094841185520837735ull, 1105557131661051262ull,
+ 12266475137052861751ull, 5865247522503672054ull}},
+{{1742938297332123854ull, 2211114263322102525ull,
+ 6086206200396171886ull, 11730495045007344109ull}},
+{{348587659466424771ull, 442222852664420505ull, 15974636499046875670ull,
+ 2346099009001468821ull}},
+{{697175318932849542ull, 884445705328841010ull, 13502528924384199724ull,
+ 4692198018002937643ull}},
+{{1394350637865699083ull, 1768891410657682020ull,
+ 8558313775058847832ull, 9384396036005875287ull}},
+{{15036265386540781110ull, 15111173541099177696ull,
+ 9090360384495590212ull, 1876879207201175057ull}},
+{{11625786699372010603ull, 11775603008488803777ull,
+ 18180720768991180425ull, 3753758414402350114ull}},
+{{4804829325034469590ull, 5104461943268055939ull,
+ 17914697464272809235ull, 7507516828804700229ull}},
+{{12029012309232624888ull, 15778287647621252480ull,
+ 18340334751822203139ull, 1501503365760940045ull}},
+{{5611280544755698159ull, 13109831221532953345ull,
+ 18233925429934854663ull, 3003006731521880091ull}},
+{{11222561089511396318ull, 7772918369356355074ull,
+ 18021106786160157711ull, 6006013463043760183ull}},
+{{3998378105313241020ull, 15545836738712710149ull,
+ 17595469498610763806ull, 12012026926087520367ull}},
+{{8178373250546468851ull, 14177213791968272999ull,
+ 10897791529205973407ull, 2402405385217504073ull}},
+{{16356746501092937701ull, 9907683510226994382ull,
+ 3348838984702395199ull, 4804810770435008147ull}},
+{{14266748928476323786ull, 1368622946744437149ull,
+ 6697677969404790399ull, 9609621540870016294ull}},
+{{10232047415179085404ull, 11341771033574618399ull,
+ 16096930852848599372ull, 1921924308174003258ull}},
+{{2017350756648619191ull, 4236797993439685183ull,
+ 13747117631987647129ull, 3843848616348006517ull}},
+{{4034701513297238382ull, 8473595986879370366ull,
+ 9047491190265742642ull, 7687697232696013035ull}},
+{{11874986746885178646ull, 9073416826859694719ull,
+ 1809498238053148528ull, 1537539446539202607ull}},
+{{5303229420060805676ull, 18146833653719389439ull,
+ 3618996476106297056ull, 3075078893078405214ull}},
+{{10606458840121611352ull, 17846923233729227262ull,
+ 7237992952212594113ull, 6150157786156810428ull}},
+{{2766173606533671088ull, 17247102393748902909ull,
+ 14475985904425188227ull, 12300315572313620856ull}},
+{{7931932350790554864ull, 14517466922975511551ull,
+ 6584545995626947968ull, 2460063114462724171ull}},
+{{15863864701581109728ull, 10588189772241471486ull,
+ 13169091991253895937ull, 4920126228925448342ull}},
+{{13280985329452667840ull, 2729635470773391357ull,
+ 7891439908798240259ull, 9840252457850896685ull}},
+{{6345545880632443892ull, 15303322353122319564ull,
+ 1578287981759648051ull, 1968050491570179337ull}},
+{{12691091761264887783ull, 12159900632535087512ull,
+ 3156575963519296103ull, 3936100983140358674ull}},
+{{6935439448820223949ull, 5873057191360623409ull,
+ 6313151927038592207ull, 7872201966280717348ull}},
+{{16144483148731686083ull, 1174611438272124681ull,
+ 12330676829633449411ull, 1574440393256143469ull}},
+{{13842222223753820550ull, 2349222876544249363ull,
+ 6214609585557347206ull, 3148880786512286939ull}},
+{{9237700373798089483ull, 4698445753088498727ull,
+ 12429219171114694412ull, 6297761573024573878ull}},
+{{28656673886627349ull, 9396891506176997455ull, 6411694268519837208ull,
+ 12595523146049147757ull}},
+{{5731334777325470ull, 1879378301235399491ull, 8661036483187788088ull,
+ 2519104629209829551ull}},
+{{11462669554650940ull, 3758756602470798982ull, 17322072966375576176ull,
+ 5038209258419659102ull}},
+{{22925339109301879ull, 7517513204941597964ull, 16197401859041600736ull,
+ 10076418516839318205ull}},
+{{4585067821860376ull, 5192851455730229916ull, 3239480371808320147ull,
+ 2015283703367863641ull}},
+{{9170135643720752ull, 10385702911460459832ull, 6478960743616640294ull,
+ 4030567406735727282ull}},
+{{18340271287441503ull, 2324661749211368048ull, 12957921487233280589ull,
+ 8061134813471454564ull}},
+{{3693016868999398624ull, 11532978794068004579ull,
+ 17348979556414297410ull, 1612226962694290912ull}},
+{{7386033737998797248ull, 4619213514426457542ull,
+ 16251215039119043205ull, 3224453925388581825ull}},
+{{14772067475997594496ull, 9238427028852915084ull,
+ 14055686004528534794ull, 6448907850777163651ull}},
+{{17711808754167160192ull, 1847685405770583016ull,
+ 6500486015647617282ull, 1289781570155432730ull}},
+{{16976873434624768768ull, 3695370811541166033ull,
+ 13000972031295234564ull, 2579563140310865460ull}},
+{{15507002795539985920ull, 7390741623082332067ull,
+ 7555199988880917512ull, 5159126280621730921ull}},
+{{12567261517370420223ull, 14781483246164664135ull,
+ 15110399977761835024ull, 10318252561243461842ull}},
+{{6202801118215994368ull, 6645645463974843150ull,
+ 10400777625036187651ull, 2063650512248692368ull}},
+{{12405602236431988736ull, 13291290927949686300ull,
+ 2354811176362823686ull, 4127301024497384737ull}},
+{{6364460399154425855ull, 8135837782189820985ull,
+ 4709622352725647373ull, 8254602048994769474ull}},
+{{8651589709314705818ull, 9005865185921784843ull,
+ 15699319729512770767ull, 1650920409798953894ull}},
+{{17303179418629411635ull, 18011730371843569686ull,
+ 12951895385315989918ull, 3301840819597907789ull}},
+{{16159614763549271654ull, 17576716669977587757ull,
+ 7457046696922428221ull, 6603681639195815579ull}},
+{{10610620582193674978ull, 3515343333995517551ull,
+ 16248804598352126937ull, 1320736327839163115ull}},
+{{2774497090677798339ull, 7030686667991035103ull,
+ 14050865122994702258ull, 2641472655678326231ull}},
+{{5548994181355596677ull, 14061373335982070206ull,
+ 9654986172279852900ull, 5282945311356652463ull}},
+{{11097988362711193353ull, 9676002598254588796ull,
+ 863228270850154185ull, 10565890622713304927ull}},
+{{13287644116767969641ull, 9313898149134738405ull,
+ 7551343283653851483ull, 2113178124542660985ull}},
+{{8128544159826387665ull, 181052224559925195ull,
+ 15102686567307702967ull, 4226356249085321970ull}},
+{{16257088319652775329ull, 362104449119850390ull,
+ 11758629060905854318ull, 8452712498170643941ull}},
+{{18008812922898196359ull, 14829816148791611370ull,
+ 6041074626923081186ull, 1690542499634128788ull}},
+{{17570881772086841102ull, 11212888223873671125ull,
+ 12082149253846162373ull, 3381084999268257576ull}},
+{{16695019470464130587ull, 3979032374037790635ull,
+ 5717554433982773131ull, 6762169998536515153ull}},
+{{18096399153060467411ull, 15553201733775199419ull,
+ 12211557331022285595ull, 1352433999707303030ull}},
+{{17746054232411383205ull, 12659659393840847223ull,
+ 5976370588335019575ull, 2704867999414606061ull}},
+{{17045364391113214793ull, 6872574713972142831ull,
+ 11952741176670039151ull, 5409735998829212122ull}},
+{{15643984708516877969ull, 13745149427944285663ull,
+ 5458738279630526686ull, 10819471997658424245ull}},
+{{17886192200671016887ull, 6438378700330767455ull,
+ 1091747655926105337ull, 2163894399531684849ull}},
+{{17325640327632482157ull, 12876757400661534911ull,
+ 2183495311852210674ull, 4327788799063369698ull}},
+{{16204536581555412698ull, 7306770727613518207ull,
+ 4366990623704421349ull, 8655577598126739396ull}},
+{{10619604945794903186ull, 1461354145522703641ull,
+ 4562746939482794593ull, 1731115519625347879ull}},
+{{2792465817880254756ull, 2922708291045407283ull,
+ 9125493878965589186ull, 3462231039250695758ull}},
+{{5584931635760509512ull, 5845416582090814566ull,
+ 18250987757931178372ull, 6924462078501391516ull}},
+{{15874381586119743196ull, 12237129760643893882ull,
+ 7339546366328145997ull, 1384892415700278303ull}},
+{{13302019098529934775ull, 6027515447578236149ull,
+ 14679092732656291995ull, 2769784831400556606ull}},
+{{8157294123350317933ull, 12055030895156472299ull,
+ 10911441391603032374ull, 5539569662801113213ull}},
+{{16314588246700635866ull, 5663317716603392982ull,
+ 3376138709496513133ull, 11079139325602226427ull}},
+{{10641615278823947820ull, 1132663543320678596ull,
+ 8053925371383123273ull, 2215827865120445285ull}},
+{{2836486483938344023ull, 2265327086641357193ull,
+ 16107850742766246546ull, 4431655730240890570ull}},
+{{5672972967876688046ull, 4530654173282714386ull,
+ 13768957411822941476ull, 8863311460481781141ull}},
+{{12202641037801068579ull, 8284828464140363523ull,
+ 6443140297106498618ull, 1772662292096356228ull}},
+{{5958538001892585542ull, 16569656928280727047ull,
+ 12886280594212997236ull, 3545324584192712456ull}},
+{{11917076003785171083ull, 14692569782851902478ull,
+ 7325817114716442857ull, 7090649168385424913ull}},
+{{13451461644982765187ull, 2938513956570380495ull,
+ 12533209867169019541ull, 1418129833677084982ull}},
+{{8456179216255978757ull, 5877027913140760991ull,
+ 6619675660628487466ull, 2836259667354169965ull}},
+{{16912358432511957513ull, 11754055826281521982ull,
+ 13239351321256974932ull, 5672519334708339930ull}},
+{{15377972791314363410ull, 5061367578853492349ull,
+ 8031958568804398249ull, 11345038669416679861ull}},
+{{17832989817230513975ull, 1012273515770698469ull,
+ 5295740528502789973ull, 2269007733883335972ull}},
+{{17219235560751476334ull, 2024547031541396939ull,
+ 10591481057005579946ull, 4538015467766671944ull}},
+{{15991727047793401051ull, 4049094063082793879ull,
+ 2736218040301608276ull, 9076030935533343889ull}},
+{{17955740668526321503ull, 809818812616558775ull,
+ 15304638867027962948ull, 1815206187106668777ull}},
+{{17464737263343091390ull, 1619637625233117551ull,
+ 12162533660346374280ull, 3630412374213337555ull}},
+{{16482730452976631164ull, 3239275250466235103ull,
+ 5878323246983196944ull, 7260824748426675111ull}},
+{{14364592534821057203ull, 647855050093247020ull,
+ 4865013464138549712ull, 1452164949685335022ull}},
+{{10282440995932562789ull, 1295710100186494041ull,
+ 9730026928277099424ull, 2904329899370670044ull}},
+{{2118137918155573962ull, 2591420200372988083ull,
+ 1013309782844647232ull, 5808659798741340089ull}},
+{{4236275836311147924ull, 5182840400745976166ull,
+ 2026619565689294464ull, 11617319597482680178ull}},
+{{11915301611487960555ull, 8415265709633015879ull,
+ 11473370357363589862ull, 2323463919496536035ull}},
+{{5383859149266369493ull, 16830531419266031759ull,
+ 4499996641017628108ull, 4646927838993072071ull}},
+{{10767718298532738985ull, 15214318764822511902ull,
+ 8999993282035256217ull, 9293855677986144142ull}},
+{{5842892474448458121ull, 17800259011932143673ull,
+ 9178696285890871889ull, 1858771135597228828ull}},
+{{11685784948896916241ull, 17153773950154735730ull,
+ 18357392571781743779ull, 3717542271194457656ull}},
+{{4924825824084280865ull, 15860803826599919845ull,
+ 18268041069853935943ull, 7435084542388915313ull}},
+{{4674313979558766497ull, 6861509580061894292ull,
+ 14721654658196518158ull, 1487016908477783062ull}},
+{{9348627959117532993ull, 13723019160123788584ull,
+ 10996565242683484700ull, 2974033816955566125ull}},
+{{250511844525514369ull, 8999294246538025553ull, 3546386411657417785ull,
+ 5948067633911132251ull}},
+{{501023689051028738ull, 17998588493076051106ull,
+ 7092772823314835570ull, 11896135267822264502ull}},
+{{11168251182035936718ull, 10978415328099030867ull,
+ 8797252194146787760ull, 2379227053564452900ull}},
+{{3889758290362321819ull, 3510086582488510119ull,
+ 17594504388293575521ull, 4758454107128905800ull}},
+{{7779516580724643637ull, 7020173164977020238ull,
+ 16742264702877599426ull, 9516908214257811601ull}},
+{{1555903316144928728ull, 8782732262479224694ull,
+ 7037801755317430208ull, 1903381642851562320ull}},
+{{3111806632289857455ull, 17565464524958449388ull,
+ 14075603510634860416ull, 3806763285703124640ull}},
+{{6223613264579714909ull, 16684184976207347160ull,
+ 9704462947560169217ull, 7613526571406249281ull}},
+{{12312769097141673952ull, 14404883439467200401ull,
+ 5630241404253944166ull, 1522705314281249856ull}},
+{{6178794120573796287ull, 10363022805224849187ull,
+ 11260482808507888333ull, 3045410628562499712ull}},
+{{12357588241147592574ull, 2279301536740146758ull,
+ 4074221543306225051ull, 6090821257124999425ull}},
+{{6268432408585633531ull, 4558603073480293517ull,
+ 8148443086612450102ull, 12181642514249998850ull}},
+{{16011081740684767999ull, 8290418244179879349ull,
+ 1629688617322490020ull, 2436328502849999770ull}},
+{{13575419407659984382ull, 16580836488359758699ull,
+ 3259377234644980040ull, 4872657005699999540ull}},
+{{8704094741610417148ull, 14714928903009965783ull,
+ 6518754469289960081ull, 9745314011399999080ull}},
+{{16498214207289724723ull, 6632334595343903479ull,
+ 1303750893857992016ull, 1949062802279999816ull}},
+{{14549684340869897829ull, 13264669190687806959ull,
+ 2607501787715984032ull, 3898125604559999632ull}},
+{{10652624608030244042ull, 8082594307666062303ull,
+ 5215003575431968065ull, 7796251209119999264ull}},
+{{9509222551089869455ull, 16373914120500853753ull,
+ 15800395974054034905ull, 1559250241823999852ull}},
+{{571701028470187294ull, 14301084167292155891ull,
+ 13154047874398518195ull, 3118500483647999705ull}},
+{{1143402056940374587ull, 10155424260874760166ull,
+ 7861351675087484775ull, 6237000967295999411ull}},
+{{2286804113880749174ull, 1864104448039968716ull,
+ 15722703350174969551ull, 12474001934591998822ull}},
+{{15214756081743791128ull, 11440867333833724712ull,
+ 10523238299518814556ull, 2494800386918399764ull}},
+{{11982768089778030640ull, 4434990593957897809ull,
+ 2599732525328077497ull, 4989600773836799529ull}},
+{{5518792105846509663ull, 8869981187915795619ull,
+ 5199465050656154994ull, 9979201547673599058ull}},
+{{4793107235911212256ull, 9152693867066979770ull,
+ 12107939454356961968ull, 1995840309534719811ull}},
+{{9586214471822424512ull, 18305387734133959540ull,
+ 5769134835004372320ull, 3991680619069439623ull}},
+{{725684869935297407ull, 18164031394558367465ull,
+ 11538269670008744641ull, 7983361238138879246ull}},
+{{7523834603470880128ull, 11011503908395494139ull,
+ 5997002748743659251ull, 1596672247627775849ull}},
+{{15047669206941760256ull, 3576263743081436662ull,
+ 11994005497487318503ull, 3193344495255551698ull}},
+{{11648594340173968895ull, 7152527486162873325ull,
+ 5541266921265085390ull, 6386688990511103397ull}},
+{{4850444606638386174ull, 14305054972325746651ull,
+ 11082533842530170780ull, 12773377981022206794ull}},
+{{970088921327677235ull, 17618406253432790623ull,
+ 16973902027473675448ull, 2554675596204441358ull}},
+{{1940177842655354470ull, 16790068433156029630ull,
+ 15501059981237799281ull, 5109351192408882717ull}},
+{{3880355685310708939ull, 15133392792602507644ull,
+ 12555375888766046947ull, 10218702384817765435ull}},
+{{4465419951804052111ull, 10405376188004322175ull,
+ 2511075177753209389ull, 2043740476963553087ull}},
+{{8930839903608104222ull, 2364008302299092734ull,
+ 5022150355506418779ull, 4087480953927106174ull}},
+{{17861679807216208444ull, 4728016604598185468ull,
+ 10044300711012837558ull, 8174961907854212348ull}},
+{{18329731220410882982ull, 4634952135661547416ull,
+ 13076906586428298481ull, 1634992381570842469ull}},
+{{18212718367112214348ull, 9269904271323094833ull,
+ 7707069099147045346ull, 3269984763141684939ull}},
+{{17978692660514877079ull, 93064468936638051ull,
+ 15414138198294090693ull, 6539969526283369878ull}},
+{{10974436161586796063ull, 3707961708529237933ull,
+ 14150874083884549108ull, 1307993905256673975ull}},
+{{3502128249464040509ull, 7415923417058475867ull,
+ 9855004094059546600ull, 2615987810513347951ull}},
+{{7004256498928081017ull, 14831846834116951734ull,
+ 1263264114409541584ull, 5231975621026695903ull}},
+{{14008512997856162033ull, 11216949594524351852ull,
+ 2526528228819083169ull, 10463951242053391806ull}},
+{{10180400229055053053ull, 2243389918904870370ull,
+ 4194654460505726957ull, 2092790248410678361ull}},
+{{1914056384400554490ull, 4486779837809740741ull,
+ 8389308921011453914ull, 4185580496821356722ull}},
+{{3828112768801108980ull, 8973559675619481482ull,
+ 16778617842022907828ull, 8371160993642713444ull}},
+{{15523017812727863089ull, 9173409564607716942ull,
+ 18113118827372222858ull, 1674232198728542688ull}},
+{{12599291551746174562ull, 18346819129215433885ull,
+ 17779493581034894100ull, 3348464397457085377ull}},
+{{6751839029782797507ull, 18246894184721316155ull,
+ 17112243088360236585ull, 6696928794914170755ull}},
+{{1350367805956559502ull, 3649378836944263231ull,
+ 3422448617672047317ull, 1339385758982834151ull}},
+{{2700735611913119003ull, 7298757673888526462ull,
+ 6844897235344094634ull, 2678771517965668302ull}},
+{{5401471223826238006ull, 14597515347777052924ull,
+ 13689794470688189268ull, 5357543035931336604ull}},
+{{10802942447652476012ull, 10748286621844554232ull,
+ 8932844867666826921ull, 10715086071862673209ull}},
+{{9539286119014315849ull, 2149657324368910846ull,
+ 16543964232501006677ull, 2143017214372534641ull}},
+{{631828164319080082ull, 4299314648737821693ull,
+ 14641184391292461738ull, 4286034428745069283ull}},
+{{1263656328638160163ull, 8598629297475643386ull,
+ 10835624708875371860ull, 8572068857490138567ull}},
+{{11320777709953363003ull, 9098423488978949323ull,
+ 9545822571258895018ull, 1714413771498027713ull}},
+{{4194811346197174389ull, 18196846977957898647ull,
+ 644901068808238420ull, 3428827542996055427ull}},
+{{8389622692394348777ull, 17946949882206245678ull,
+ 1289802137616476841ull, 6857655085992110854ull}},
+{{12745970982704600725ull, 3589389976441249135ull,
+ 15015355686490936661ull, 1371531017198422170ull}},
+{{7045197891699649834ull, 7178779952882498271ull,
+ 11583967299272321706ull, 2743062034396844341ull}},
+{{14090395783399299668ull, 14357559905764996542ull,
+ 4721190524835091796ull, 5486124068793688683ull}},
+{{9734047493089047719ull, 10268375737820441469ull,
+ 9442381049670183593ull, 10972248137587377366ull}},
+{{13014855942843540514ull, 16811070406531729586ull,
+ 5577825024675947041ull, 2194449627517475473ull}},
+{{7582967811977529411ull, 15175396739353907557ull,
+ 11155650049351894083ull, 4388899255034950946ull}},
+{{15165935623955058822ull, 11904049404998263498ull,
+ 3864556024994236551ull, 8777798510069901893ull}},
+{{10411884754274832411ull, 17138205139967293992ull,
+ 11840957649224578279ull, 1755559702013980378ull}},
+{{2377025434840113206ull, 15829666206225036369ull,
+ 5235171224739604943ull, 3511119404027960757ull}},
+{{4754050869680226411ull, 13212588338740521122ull,
+ 10470342449479209887ull, 7022238808055921514ull}},
+{{12018856618161776252ull, 6331866482490014547ull,
+ 16851463748863483270ull, 1404447761611184302ull}},
+{{5590969162614000888ull, 12663732964980029095ull,
+ 15256183424017414924ull, 2808895523222368605ull}},
+{{11181938325228001776ull, 6880721856250506574ull,
+ 12065622774325278233ull, 5617791046444737211ull}},
+{{3917132576746451935ull, 13761443712501013149ull,
+ 5684501474941004850ull, 11235582092889474423ull}},
+{{8162124144833111034ull, 13820335186725933599ull,
+ 12204946739213931939ull, 2247116418577894884ull}},
+{{16324248289666222067ull, 9193926299742315582ull,
+ 5963149404718312263ull, 4494232837155789769ull}},
+{{14201752505622892517ull, 18387852599484631165ull,
+ 11926298809436624526ull, 8988465674311579538ull}},
+{{17597745760092219797ull, 18434965778864567525ull,
+ 13453306206113055874ull, 1797693134862315907ull}},
+{{16748747446474887977ull, 18423187484019583435ull,
+ 8459868338516560133ull, 3595386269724631815ull}},
+{{15050750819240224337ull, 18399630894329615255ull,
+ 16919736677033120267ull, 7190772539449263630ull}},
+{{10388847793331865514ull, 11058623808349743697ull,
+ 3383947335406624053ull, 1438154507889852726ull}},
+{{2330951512954179412ull, 3670503542989935779ull,
+ 6767894670813248107ull, 2876309015779705452ull}},
+{{4661903025908358824ull, 7341007085979871558ull,
+ 13535789341626496214ull, 5752618031559410904ull}},
+{{9323806051816717647ull, 14682014171959743116ull,
+ 8624834609543440812ull, 11505236063118821809ull}},
+{{9243458839847164176ull, 6625751649133858946ull,
+ 16482362180876329455ull, 2301047212623764361ull}},
+{{40173605984776736ull, 13251503298267717893ull,
+ 14517980288043107294ull, 4602094425247528723ull}},
+{{80347211969553471ull, 8056262522825884170ull, 10589216502376662973ull,
+ 9204188850495057447ull}},
+{{16069442393910695ull, 1611252504565176834ull, 9496540929959153241ull,
+ 1840837770099011489ull}},
+{{32138884787821389ull, 3222505009130353668ull, 546337786208754866ull,
+ 3681675540198022979ull}},
+{{64277769575642777ull, 6445010018260707336ull, 1092675572417509732ull,
+ 7363351080396045958ull}},
+{{3702204368657038879ull, 1289002003652141467ull,
+ 11286581558709232916ull, 1472670216079209191ull}},
+{{7404408737314077757ull, 2578004007304282934ull,
+ 4126419043708914216ull, 2945340432158418383ull}},
+{{14808817474628155514ull, 5156008014608565868ull,
+ 8252838087417828432ull, 5890680864316836766ull}},
+{{11170890875546759412ull, 10312016029217131737ull,
+ 16505676174835656864ull, 11781361728633673532ull}},
+{{13302224619335082852ull, 5751752020585336670ull,
+ 10679832864450952019ull, 2356272345726734706ull}},
+{{8157705164960614088ull, 11503504041170673341ull,
+ 2912921655192352422ull, 4712544691453469413ull}},
+{{16315410329921228176ull, 4560264008631795066ull,
+ 5825843310384704845ull, 9425089382906938826ull}},
+{{10641779695468066282ull, 4601401616468269336ull,
+ 4854517476818851292ull, 1885017876581387765ull}},
+{{2836815317226580948ull, 9202803232936538673ull,
+ 9709034953637702584ull, 3770035753162775530ull}},
+{{5673630634453161895ull, 18405606465873077346ull,
+ 971325833565853552ull, 7540071506325551061ull}},
+{{15892121385858273672ull, 14749167737400346438ull,
+ 3883613981455081033ull, 1508014301265110212ull}},
+{{13337498698006995728ull, 11051591401091141261ull,
+ 7767227962910162067ull, 3016028602530220424ull}},
+{{8228253322304439839ull, 3656438728472730907ull,
+ 15534455925820324135ull, 6032057205060440848ull}},
+{{16456506644608879678ull, 7312877456945461814ull,
+ 12622167777931096654ull, 12064114410120881697ull}},
+{{3291301328921775936ull, 5151924306131002686ull,
+ 9903131185070039977ull, 2412822882024176339ull}},
+{{6582602657843551871ull, 10303848612262005372ull,
+ 1359518296430528338ull, 4825645764048352679ull}},
+{{13165205315687103742ull, 2160953150814459128ull,
+ 2719036592861056677ull, 9651291528096705358ull}},
+{{13701087507363151718ull, 432190630162891825ull,
+ 11611853762797942305ull, 1930258305619341071ull}},
+{{8955430941016751820ull, 864381260325783651ull, 4776963451886332994ull,
+ 3860516611238682143ull}},
+{{17910861882033503640ull, 1728762520651567302ull,
+ 9553926903772665988ull, 7721033222477364286ull}},
+{{7271521191148611052ull, 15103147763097954753ull,
+ 5600134195496443520ull, 1544206644495472857ull}},
+{{14543042382297222103ull, 11759551452486357890ull,
+ 11200268390992887041ull, 3088413288990945714ull}},
+{{10639340690884892589ull, 5072358831263164165ull,
+ 3953792708276222467ull, 6176826577981891429ull}},
+{{2831937308060233562ull, 10144717662526328331ull,
+ 7907585416552444934ull, 12353653155963782858ull}},
+{{11634433905837777682ull, 9407641161989086312ull,
+ 12649563527536219956ull, 2470730631192756571ull}},
+{{4822123737966003748ull, 368538250268621009ull, 6852382981362888297ull,
+ 4941461262385513143ull}},
+{{9644247475932007496ull, 737076500537242018ull,
+ 13704765962725776594ull, 9882922524771026286ull}},
+{{12996895939412132469ull, 147415300107448403ull,
+ 6430302007287065642ull, 1976584504954205257ull}},
+{{7547047805114713322ull, 294830600214896807ull,
+ 12860604014574131284ull, 3953169009908410514ull}},
+{{15094095610229426643ull, 589661200429793614ull,
+ 7274463955438710952ull, 7906338019816821029ull}},
+{{3018819122045885329ull, 3807281054827869046ull,
+ 16212288050055383483ull, 1581267603963364205ull}},
+{{6037638244091770658ull, 7614562109655738092ull,
+ 13977832026401215350ull, 3162535207926728411ull}},
+{{12075276488183541315ull, 15229124219311476184ull,
+ 9508919979092879084ull, 6325070415853456823ull}},
+{{5703808902657531013ull, 12011504364913400753ull,
+ 571095884476206553ull, 12650140831706913647ull}},
+{{12208808224757237173ull, 2402300872982680150ull,
+ 7492916806379061957ull, 2530028166341382729ull}},
+{{5970872375804922729ull, 4804601745965360301ull,
+ 14985833612758123914ull, 5060056332682765458ull}},
+{{11941744751609845457ull, 9609203491930720602ull,
+ 11524923151806696212ull, 10120112665365530917ull}},
+{{6077697765063879415ull, 16679235957353785413ull,
+ 9683682259845159888ull, 2024022533073106183ull}},
+{{12155395530127758829ull, 14911727840998019210ull,
+ 920620445980768161ull, 4048045066146212367ull}},
+{{5864046986545966042ull, 11376711608286486805ull,
+ 1841240891961536323ull, 8096090132292424734ull}},
+{{8551507026793013855ull, 9654039951141118007ull,
+ 15125643437359948557ull, 1619218026458484946ull}},
+{{17103014053586027710ull, 861335828572684398ull,
+ 11804542801010345499ull, 3238436052916969893ull}},
+{{15759284033462503804ull, 1722671657145368797ull,
+ 5162341528311139382ull, 6476872105833939787ull}},
+{{6841205621434411084ull, 15101929590396715052ull,
+ 8411165935146048522ull, 1295374421166787957ull}},
+{{13682411242868822168ull, 11757115107083878488ull,
+ 16822331870292097045ull, 2590748842333575914ull}},
+{{8918078412028092720ull, 5067486140458205361ull,
+ 15197919666874642475ull, 5181497684667151829ull}},
+{{17836156824056185439ull, 10134972280916410722ull,
+ 11949095260039733334ull, 10362995369334303659ull}},
+{{3567231364811237088ull, 13095040900409013114ull,
+ 17147214310975587959ull, 2072599073866860731ull}},
+{{7134462729622474176ull, 7743337727108474612ull,
+ 15847684548241624303ull, 4145198147733721463ull}},
+{{14268925459244948351ull, 15486675454216949224ull,
+ 13248625022773696990ull, 8290396295467442927ull}},
+{{6543133906590899994ull, 10476032720327210491ull,
+ 10028422634038560044ull, 1658079259093488585ull}},
+{{13086267813181799987ull, 2505321366944869366ull,
+ 1610101194367568473ull, 3316158518186977171ull}},
+{{7725791552654048358ull, 5010642733889738733ull,
+ 3220202388735136946ull, 6632317036373954342ull}},
+{{5234507125272719995ull, 12070174991003678716ull,
+ 8022738107230848035ull, 1326463407274790868ull}},
+{{10469014250545439990ull, 5693605908297805816ull,
+ 16045476214461696071ull, 2652926814549581736ull}},
+{{2491284427381328363ull, 11387211816595611633ull,
+ 13644208355213840526ull, 5305853629099163473ull}},
+{{4982568854762656726ull, 4327679559481671650ull,
+ 8841672636718129437ull, 10611707258198326947ull}},
+{{15753909029920172638ull, 15622931170863975622ull,
+ 9147032156827446533ull, 2122341451639665389ull}},
+{{13061073986130793660ull, 12799118268018399629ull,
+ 18294064313654893067ull, 4244682903279330778ull}},
+{{7675403898552035704ull, 7151492462327247643ull,
+ 18141384553600234519ull, 8489365806558661557ull}},
+{{16292476038678048434ull, 5119647307207359851ull,
+ 11006974540203867550ull, 1697873161311732311ull}},
+{{14138208003646545252ull, 10239294614414719703ull,
+ 3567205006698183484ull, 3395746322623464623ull}},
+{{9829671933583538887ull, 2031845155119887791ull,
+ 7134410013396366969ull, 6791492645246929246ull}},
+{{5655283201458618101ull, 406369031023977558ull, 5116230817421183717ull,
+ 1358298529049385849ull}},
+{{11310566402917236201ull, 812738062047955116ull,
+ 10232461634842367434ull, 2716597058098771698ull}},
+{{4174388732124920786ull, 1625476124095910233ull,
+ 2018179195975183252ull, 5433194116197543397ull}},
+{{8348777464249841572ull, 3250952248191820466ull,
+ 4036358391950366504ull, 10866388232395086794ull}},
+{{16427150751817609608ull, 11718236893864095062ull,
+ 15564666937357714593ull, 2173277646479017358ull}},
+{{14407557429925667599ull, 4989729714018638509ull,
+ 12682589801005877571ull, 4346555292958034717ull}},
+{{10368370786141783581ull, 9979459428037277019ull,
+ 6918435528302203526ull, 8693110585916069435ull}},
+{{2073674157228356717ull, 5685240700349365727ull,
+ 1383687105660440705ull, 1738622117183213887ull}},
+{{4147348314456713433ull, 11370481400698731454ull,
+ 2767374211320881410ull, 3477244234366427774ull}},
+{{8294696628913426865ull, 4294218727687911292ull,
+ 5534748422641762821ull, 6954488468732855548ull}},
+{{5348288140524595697ull, 15616239004505223551ull,
+ 12174996128754083533ull, 1390897693746571109ull}},
+{{10696576281049191393ull, 12785733935300895486ull,
+ 5903248183798615451ull, 2781795387493142219ull}},
+{{2946408488388831169ull, 7124723796892239357ull,
+ 11806496367597230903ull, 5563590774986284438ull}},
+{{5892816976777662337ull, 14249447593784478714ull,
+ 5166248661484910190ull, 11127181549972568877ull}},
+{{4867912210097442791ull, 10228587148240716389ull,
+ 8411947361780802684ull, 2225436309994513775ull}},
+{{9735824420194885581ull, 2010430222771881162ull,
+ 16823894723561605369ull, 4450872619989027550ull}},
+{{1024904766680219546ull, 4020860445543762325ull,
+ 15201045373413659122ull, 8901745239978055101ull}},
+{{11273027397561774879ull, 11872218533334483434ull,
+ 6729557889424642147ull, 1780349047995611020ull}},
+{{4099310721413998142ull, 5297692992959415253ull,
+ 13459115778849284295ull, 3560698095991222040ull}},
+{{8198621442827996284ull, 10595385985918830506ull,
+ 8471487483989016974ull, 7121396191982444081ull}},
+{{5329073103307509580ull, 2119077197183766101ull,
+ 5383646311539713718ull, 1424279238396488816ull}},
+{{10658146206615019160ull, 4238154394367532202ull,
+ 10767292623079427436ull, 2848558476792977632ull}},
+{{2869548339520486704ull, 8476308788735064405ull,
+ 3087841172449303256ull, 5697116953585955265ull}},
+{{5739096679040973407ull, 16952617577470128810ull,
+ 6175682344898606512ull, 11394233907171910530ull}},
+{{8526516965292015328ull, 10769221144977846408ull,
+ 1235136468979721302ull, 2278846781434382106ull}},
+{{17053033930584030656ull, 3091698216246141200ull,
+ 2470272937959442605ull, 4557693562868764212ull}},
+{{15659323787458509695ull, 6183396432492282401ull,
+ 4940545875918885210ull, 9115387125737528424ull}},
+{{3131864757491701939ull, 15994074545466097773ull,
+ 15745504434151418334ull, 1823077425147505684ull}},
+{{6263729514983403878ull, 13541405017222643930ull,
+ 13044264794593285053ull, 3646154850295011369ull}},
+{{12527459029966807756ull, 8636065960735736244ull,
+ 7641785515477018491ull, 7292309700590022739ull}},
+{{17262887064961002844ull, 1727213192147147248ull,
+ 16285752362063044991ull, 1458461940118004547ull}},
+{{16079030056212454072ull, 3454426384294294497ull,
+ 14124760650416538366ull, 2916923880236009095ull}},
+{{13711316038715356528ull, 6908852768588588995ull,
+ 9802777227123525116ull, 5833847760472018191ull}},
+{{8975888003721161440ull, 13817705537177177991ull,
+ 1158810380537498616ull, 11667695520944036383ull}},
+{{1795177600744232288ull, 17520936366403076891ull,
+ 11299808520333230692ull, 2333539104188807276ull}},
+{{3590355201488464576ull, 16595128659096602166ull,
+ 4152872966956909769ull, 4667078208377614553ull}},
+{{7180710402976929152ull, 14743513244483652716ull,
+ 8305745933913819539ull, 9334156416755229106ull}},
+{{5125490895337296154ull, 2948702648896730543ull,
+ 5350498001524674231ull, 1866831283351045821ull}},
+{{10250981790674592308ull, 5897405297793461086ull,
+ 10700996003049348462ull, 3733662566702091642ull}},
+{{2055219507639632999ull, 11794810595586922173ull,
+ 2955247932389145308ull, 7467325133404183285ull}},
+{{4100392716269836923ull, 13427008563343115404ull,
+ 591049586477829061ull, 1493465026680836657ull}},
+{{8200785432539673846ull, 8407273052976679192ull,
+ 1182099172955658123ull, 2986930053361673314ull}},
+{{16401570865079347692ull, 16814546105953358384ull,
+ 2364198345911316246ull, 5973860106723346628ull}},
+{{14356397656449143767ull, 15182348138197165153ull,
+ 4728396691822632493ull, 11947720213446693256ull}},
+{{10249977160773649400ull, 17793864886607074323ull,
+ 4635028153106436821ull, 2389544042689338651ull}},
+{{2053210247837747184ull, 17140985699504597031ull,
+ 9270056306212873643ull, 4779088085378677302ull}},
+{{4106420495675494368ull, 15835227325299642446ull, 93368538716195671ull,
+ 9558176170757354605ull}},
+{{8199981728618919520ull, 6856394279801838812ull, 18673707743239134ull,
+ 1911635234151470921ull}},
+{{16399963457237839040ull, 13712788559603677624ull,
+ 37347415486478268ull, 3823270468302941842ull}},
+{{14353182840766126464ull, 8978833045497803633ull, 74694830972956537ull,
+ 7646540936605883684ull}},
+{{17628031827120866586ull, 5485115423841471049ull,
+ 14772334225162232600ull, 1529308187321176736ull}},
+{{16809319580532181555ull, 10970230847682942099ull,
+ 11097924376614913584ull, 3058616374642353473ull}},
+{{15171895087354811494ull, 3493717621656332583ull,
+ 3749104679520275553ull, 6117232749284706947ull}},
+{{11897046101000071372ull, 6987435243312665167ull,
+ 7498209359040551106ull, 12234465498569413894ull}},
+{{9758106849683834921ull, 1397487048662533033ull,
+ 16257037130775751514ull, 2446893099713882778ull}},
+{{1069469625658118226ull, 2794974097325066067ull,
+ 14067330187841951412ull, 4893786199427765557ull}},
+{{2138939251316236451ull, 5589948194650132134ull,
+ 9687916301974351208ull, 9787572398855531115ull}},
+{{7806485479747067937ull, 12186036083155757396ull,
+ 1937583260394870241ull, 1957514479771106223ull}},
+{{15612970959494135874ull, 5925328092601963176ull,
+ 3875166520789740483ull, 3915028959542212446ull}},
+{{12779197845278720131ull, 11850656185203926353ull,
+ 7750333041579480966ull, 7830057919084424892ull}},
+{{6245188383797654350ull, 13438177681266516240ull,
+ 8928764237799716839ull, 1566011583816884978ull}},
+{{12490376767595308699ull, 8429611288823480864ull,
+ 17857528475599433679ull, 3132023167633769956ull}},
+{{6534009461481065782ull, 16859222577646961729ull,
+ 17268312877489315742ull, 6264046335267539913ull}},
+{{13068018922962131563ull, 15271701081584371842ull,
+ 16089881681269079869ull, 12528092670535079827ull}},
+{{13681650228818157283ull, 6743689031058784691ull,
+ 10596673965737636620ull, 2505618534107015965ull}},
+{{8916556383926762949ull, 13487378062117569383ull,
+ 2746603857765721624ull, 5011237068214031931ull}},
+{{17833112767853525897ull, 8528012050525587150ull,
+ 5493207715531443249ull, 10022474136428063862ull}},
+{{7255971368312615503ull, 5394951224847027753ull,
+ 8477339172590109296ull, 2004494827285612772ull}},
+{{14511942736625231005ull, 10789902449694055506ull,
+ 16954678345180218592ull, 4008989654571225544ull}},
+{{10577141399540910394ull, 3133060825678559397ull,
+ 15462612616650885569ull, 8017979309142451089ull}},
+{{2115428279908182079ull, 11694658609361442849ull,
+ 17849917782297818406ull, 1603595861828490217ull}},
+{{4230856559816364158ull, 4942573145013334082ull,
+ 17253091490886085197ull, 3207191723656980435ull}},
+{{8461713119632728315ull, 9885146290026668164ull,
+ 16059438908062618778ull, 6414383447313960871ull}},
+{{12760389068152276633ull, 16734424516972974925ull,
+ 6901236596354434078ull, 1282876689462792174ull}},
+{{7074034062595001650ull, 15022104960236398235ull,
+ 13802473192708868157ull, 2565753378925584348ull}},
+{{14148068125190003299ull, 11597465846763244854ull,
+ 9158202311708184699ull, 5131506757851168697ull}},
+{{9849392176670454981ull, 4748187619816938093ull,
+ 18316404623416369399ull, 10263013515702337394ull}},
+{{5659227250076001320ull, 12017683968189118588ull,
+ 18420676183650915172ull, 2052602703140467478ull}},
+{{11318454500152002639ull, 5588623862668685560ull,
+ 18394608293592278729ull, 4105205406280934957ull}},
+{{4190164926594453662ull, 11177247725337371121ull,
+ 18342472513475005842ull, 8210410812561869915ull}},
+{{11906079429544621702ull, 9614147174551294870ull,
+ 3668494502695001168ull, 1642082162512373983ull}},
+{{5365414785379691788ull, 781550275393038125ull, 7336989005390002337ull,
+ 3284164325024747966ull}},
+{{10730829570759383576ull, 1563100550786076250ull,
+ 14673978010780004674ull, 6568328650049495932ull}},
+{{5835514728893787039ull, 4001968924899125573ull,
+ 10313493231639821581ull, 1313665730009899186ull}},
+{{11671029457787574077ull, 8003937849798251146ull,
+ 2180242389570091546ull, 2627331460019798373ull}},
+{{4895314841865596538ull, 16007875699596502293ull,
+ 4360484779140183092ull, 5254662920039596746ull}},
+{{9790629683731193075ull, 13569007325483452970ull,
+ 8720969558280366185ull, 10509325840079193492ull}},
+{{9336823566230059262ull, 10092499094580511240ull,
+ 9122891541139893883ull, 2101865168015838698ull}},
+{{226903058750566907ull, 1738254115451470865ull,
+ 18245783082279787767ull, 4203730336031677396ull}},
+{{453806117501133814ull, 3476508230902941730ull,
+ 18044822090850023918ull, 8407460672063354793ull}},
+{{3780110038242137086ull, 4384650460922498669ull,
+ 14677010862395735753ull, 1681492134412670958ull}},
+{{7560220076484274172ull, 8769300921844997338ull,
+ 10907277651081919890ull, 3362984268825341917ull}},
+{{15120440152968548344ull, 17538601843689994676ull,
+ 3367811228454288164ull, 6725968537650683835ull}},
+{{3024088030593709669ull, 18265115627705640228ull,
+ 673562245690857632ull, 1345193707530136767ull}},
+{{6048176061187419338ull, 18083487181701728840ull,
+ 1347124491381715265ull, 2690387415060273534ull}},
+{{12096352122374838675ull, 17720230289693906064ull,
+ 2694248982763430531ull, 5380774830120547068ull}},
+{{5745960171040125734ull, 16993716505678260513ull,
+ 5388497965526861063ull, 10761549660241094136ull}},
+{{8527889663691845794ull, 18156138560103293395ull,
+ 4767048407847282535ull, 2152309932048218827ull}},
+{{17055779327383691587ull, 17865533046497035174ull,
+ 9534096815694565071ull, 4304619864096437654ull}},
+{{15664814581057831557ull, 17284322019284518733ull,
+ 621449557679578527ull, 8609239728192875309ull}},
+{{17890358175179207605ull, 7146213218598814069ull,
+ 14881685170503556998ull, 1721847945638575061ull}},
+{{17333972276648863593ull, 14292426437197628139ull,
+ 11316626267297562380ull, 3443695891277150123ull}},
+{{16221200479588175569ull, 10138108800685704663ull,
+ 4186508460885573145ull, 6887391782554300247ull}},
+{{3244240095917635114ull, 9406319389620961579ull,
+ 8215999321660935275ull, 1377478356510860049ull}},
+{{6488480191835270228ull, 365894705532371542ull,
+ 16431998643321870551ull, 2754956713021720098ull}},
+{{12976960383670540455ull, 731789411064743084ull,
+ 14417253212934189486ull, 5509913426043440197ull}},
+{{7507176693631529294ull, 1463578822129486169ull,
+ 10387762352158827356ull, 11019826852086880395ull}},
+{{1501435338726305859ull, 3982064579167807557ull,
+ 2077552470431765471ull, 2203965370417376079ull}},
+{{3002870677452611718ull, 7964129158335615114ull,
+ 4155104940863530942ull, 4407930740834752158ull}},
+{{6005741354905223435ull, 15928258316671230228ull,
+ 8310209881727061884ull, 8815861481669504316ull}},
+{{12269194715206775657ull, 3185651663334246045ull,
+ 5351390791087322700ull, 1763172296333900863ull}},
+{{6091645356703999697ull, 6371303326668492091ull,
+ 10702781582174645400ull, 3526344592667801726ull}},
+{{12183290713407999394ull, 12742606653336984182ull,
+ 2958819090639739184ull, 7052689185335603453ull}},
+{{17194053401649241172ull, 9927218960151217482ull,
+ 11659810262353678806ull, 1410537837067120690ull}},
+{{15941362729588930728ull, 1407693846592883349ull,
+ 4872876450997805997ull, 2821075674134241381ull}},
+{{13435981385468309839ull, 2815387693185766699ull,
+ 9745752901995611994ull, 5642151348268482762ull}},
+{{8425218697227068061ull, 5630775386371533399ull,
+ 1044761730281672372ull, 11284302696536965525ull}},
+{{5374392554187323936ull, 8504852706758127326ull, 208952346056334474ull,
+ 2256860539307393105ull}},
+{{10748785108374647871ull, 17009705413516254652ull,
+ 417904692112668948ull, 4513721078614786210ull}},
+{{3050826143039744126ull, 15572666753322957689ull,
+ 835809384225337897ull, 9027442157229572420ull}},
+{{4299514043349859149ull, 10493230980148412184ull,
+ 167161876845067579ull, 1805488431445914484ull}},
+{{8599028086699718297ull, 2539717886587272752ull, 334323753690135159ull,
+ 3610976862891828968ull}},
+{{17198056173399436594ull, 5079435773174545504ull,
+ 668647507380270318ull, 7221953725783657936ull}},
+{{14507657678905618289ull, 15773282413602550393ull,
+ 3823078316217964386ull, 1444390745156731587ull}},
+{{10568571284101684961ull, 13099820753495549171ull,
+ 7646156632435928773ull, 2888781490313463174ull}},
+{{2690398494493818305ull, 7752897433281546727ull,
+ 15292313264871857547ull, 5777562980626926348ull}},
+{{5380796988987636610ull, 15505794866563093454ull,
+ 12137882456034163478ull, 11555125961253852697ull}},
+{{15833554656765168615ull, 3101158973312618690ull,
+ 9806274120690653342ull, 2311025192250770539ull}},
+{{13220365239820785614ull, 6202317946625237381ull,
+ 1165804167671755068ull, 4622050384501541079ull}},
+{{7993986405932019612ull, 12404635893250474763ull,
+ 2331608335343510136ull, 9244100769003082158ull}},
+{{8977494910670224569ull, 17238322437617736245ull,
+ 11534368111294432996ull, 1848820153800616431ull}},
+{{17954989821340449138ull, 16029900801525920874ull,
+ 4621992148879314377ull, 3697640307601232863ull}},
+{{17463235568971346659ull, 13613057529342290133ull,
+ 9243984297758628755ull, 7395280615202465726ull}},
+{{18250042372761910625ull, 6411960320610368349ull,
+ 5538145674293636074ull, 1479056123040493145ull}},
+{{18053340671814269633ull, 12823920641220736699ull,
+ 11076291348587272148ull, 2958112246080986290ull}},
+{{17659937269918987650ull, 7201097208731921783ull,
+ 3705838623464992681ull, 5916224492161972581ull}},
+{{16873130466128423684ull, 14402194417463843567ull,
+ 7411677246929985362ull, 11832448984323945162ull}},
+{{7063974907967595060ull, 17637834142460410006ull,
+ 8861033078869817718ull, 2366489796864789032ull}},
+{{14127949815935190120ull, 16828924211211268396ull,
+ 17722066157739635437ull, 4732979593729578064ull}},
+{{9809155558160828624ull, 15211104348712985177ull,
+ 16997388241769719259ull, 9465959187459156129ull}},
+{{1961831111632165725ull, 14110267313968328005ull,
+ 18156872907321585144ull, 1893191837491831225ull}},
+{{3923662223264331450ull, 9773790554227104394ull,
+ 17867001740933618673ull, 3786383674983662451ull}},
+{{7847324446528662900ull, 1100837034744657172ull,
+ 17287259408157685731ull, 7572767349967324903ull}},
+{{5258813704047642904ull, 14977562665916572727ull,
+ 14525498325857268115ull, 1514553469993464980ull}},
+{{10517627408095285807ull, 11508381258123593838ull,
+ 10604252578004984615ull, 3029106939986929961ull}},
+{{2588510742481019997ull, 4570018442537636061ull,
+ 2761761082300417615ull, 6058213879973859923ull}},
+{{5177021484962039993ull, 9140036885075272122ull,
+ 5523522164600835230ull, 12116427759947719846ull}},
+{{12103450741218138969ull, 5517356191756964747ull,
+ 4794053247662077369ull, 2423285551989543969ull}},
+{{5760157408726726321ull, 11034712383513929495ull,
+ 9588106495324154738ull, 4846571103979087938ull}},
+{{11520314817453452641ull, 3622680693318307374ull,
+ 729468916938757861ull, 9693142207958175877ull}},
+{{9682760592974511175ull, 11792582582889392444ull,
+ 7524591412871572218ull, 1938628441591635175ull}},
+{{918777112239470733ull, 5138421092069233273ull,
+ 15049182825743144437ull, 3877256883183270350ull}},
+{{1837554224478941466ull, 10276842184138466546ull,
+ 11651621577776737258ull, 7754513766366540701ull}},
+{{367510844895788294ull, 16812763695795334602ull,
+ 6019673130297257774ull, 1550902753273308140ull}},
+{{735021689791576587ull, 15178783317881117588ull,
+ 12039346260594515549ull, 3101805506546616280ull}},
+{{1470043379583153173ull, 11910822562052683560ull,
+ 5631948447479479483ull, 6203611013093232561ull}},
+{{2940086759166306346ull, 5374901050395815504ull,
+ 11263896894958958967ull, 12407222026186465122ull}},
+{{11656063796058992239ull, 15832375469046804393ull,
+ 9631477008475612439ull, 2481444405237293024ull}},
+{{4865383518408432862ull, 13218006864384057171ull,
+ 816209943241673263ull, 4962888810474586049ull}},
+{{9730767036816865723ull, 7989269655058562726ull,
+ 1632419886483346527ull, 9925777620949172098ull}},
+{{5635502222105283468ull, 1597853931011712545ull,
+ 11394530421522400275ull, 1985155524189834419ull}},
+{{11271004444210566936ull, 3195707862023425090ull,
+ 4342316769335248934ull, 3970311048379668839ull}},
+{{4095264814711582255ull, 6391415724046850181ull,
+ 8684633538670497868ull, 7940622096759337678ull}},
+{{8197750592426137098ull, 4967631959551280359ull,
+ 12804973151959830543ull, 1588124419351867535ull}},
+{{16395501184852274195ull, 9935263919102560718ull,
+ 7163202230210109470ull, 3176248838703735071ull}},
+{{14344258295994996774ull, 1423783764495569821ull,
+ 14326404460420218941ull, 6352497677407470142ull}},
+{{10241772518280441931ull, 2847567528991139643ull,
+ 10206064847130886266ull, 12704995354814940285ull}},
+{{16805749762623729679ull, 4258862320540138251ull,
+ 2041212969426177253ull, 2540999070962988057ull}},
+{{15164755451537907742ull, 8517724641080276503ull,
+ 4082425938852354506ull, 5081998141925976114ull}},
+{{11882766829366263868ull, 17035449282160553007ull,
+ 8164851877704709012ull, 10163996283851952228ull}},
+{{9755250995357073420ull, 3407089856432110601ull,
+ 12701016819766672772ull, 2032799256770390445ull}},
+{{1063757917004595224ull, 6814179712864221203ull,
+ 6955289565823793928ull, 4065598513540780891ull}},
+{{2127515834009190448ull, 13628359425728442406ull,
+ 13910579131647587856ull, 8131197027081561782ull}},
+{{15182898425769479383ull, 13793718329371419450ull,
+ 10160813455813338217ull, 1626239405416312356ull}},
+{{11919052777829407149ull, 9140692585033287285ull,
+ 1874882837917124819ull, 3252478810832624713ull}},
+{{5391361481949262682ull, 18281385170066574571ull,
+ 3749765675834249638ull, 6504957621665249426ull}},
+{{1078272296389852537ull, 18413672292980956207ull,
+ 4439301949908760250ull, 1300991524333049885ull}},
+{{2156544592779705073ull, 18380600512252360798ull,
+ 8878603899817520501ull, 2601983048666099770ull}},
+{{4313089185559410146ull, 18314456950795169980ull,
+ 17757207799635041003ull, 5203966097332199540ull}},
+{{8626178371118820291ull, 18182169827880788344ull,
+ 17067671525560530391ull, 10407932194664399081ull}},
+{{5414584488965674382ull, 11015131595059978315ull,
+ 7102883119854016401ull, 2081586438932879816ull}},
+{{10829168977931348763ull, 3583519116410405014ull,
+ 14205766239708032803ull, 4163172877865759632ull}},
+{{3211593882153145910ull, 7167038232820810029ull,
+ 9964788405706513990ull, 8326345755731519265ull}},
+{{15399714035398270475ull, 1433407646564162005ull,
+ 1992957681141302798ull, 1665269151146303853ull}},
+{{12352683997086989334ull, 2866815293128324011ull,
+ 3985915362282605596ull, 3330538302292607706ull}},
+{{6258623920464427051ull, 5733630586256648023ull,
+ 7971830724565211192ull, 6661076604585215412ull}},
+{{8630422413576706057ull, 15904121376218970897ull,
+ 8973063774396862884ull, 1332215320917043082ull}},
+{{17260844827153412114ull, 13361498678728390178ull,
+ 17946127548793725769ull, 2664430641834086164ull}}
+};
+
+static const UINT256 multipliers2_bid64[] =
+ { {{9438227768328448678ull, 4145630637659340425ull,
+ 17596454752367787604ull, 34ull}},
+{{429711462947345740ull, 8291261275318680851ull,
+ 16746165431026023592ull, 69ull}},
+{{859422925894691480ull, 16582522550637361702ull,
+ 15045586788342495568ull, 139ull}},
+{{1718845851789382959ull, 14718301027565171788ull,
+ 11644429502975439521ull, 279ull}},
+{{3437691703578765918ull, 10989857981420791960ull,
+ 4842114932241327427ull, 559ull}},
+{{6875383407157531835ull, 3532971889132032304ull,
+ 9684229864482654855ull, 1118ull}},
+{{13750766814315063670ull, 7065943778264064608ull,
+ 921715655255758094ull, 2237ull}},
+{{9054789554920575724ull, 14131887556528129217ull,
+ 1843431310511516188ull, 4474ull}},
+{{18109579109841151448ull, 9817031039346706818ull,
+ 3686862621023032377ull, 8948ull}},
+{{17772414145972751280ull, 1187318004983862021ull,
+ 7373725242046064755ull, 17896ull}},
+{{17098084218235950944ull, 2374636009967724043ull,
+ 14747450484092129510ull, 35792ull}},
+{{15749424362762350272ull, 4749272019935448087ull,
+ 11048156894474707404ull, 71585ull}},
+{{13052104651815148928ull, 9498544039870896175ull,
+ 3649569715239863192ull, 143171ull}},
+{{7657465229920746239ull, 550344006032240735ull, 7299139430479726385ull,
+ 286342ull}},
+{{15314930459841492478ull, 1100688012064481470ull,
+ 14598278860959452770ull, 572684ull}},
+{{12183116845973433340ull, 2201376024128962941ull,
+ 10749813648209353924ull, 1145369ull}},
+{{5919489618237315063ull, 4402752048257925883ull,
+ 3052883222709156232ull, 2290739ull}},
+{{11838979236474630126ull, 8805504096515851766ull,
+ 6105766445418312464ull, 4581478ull}},
+{{5231214399239708635ull, 17611008193031703533ull,
+ 12211532890836624928ull, 9162956ull}},
+{{10462428798479417270ull, 16775272312353855450ull,
+ 5976321707963698241ull, 18325913ull}},
+{{2478113523249282924ull, 15103800550998159285ull,
+ 11952643415927396483ull, 36651826ull}},
+{{4956227046498565847ull, 11760857028286766954ull,
+ 5458542758145241351ull, 73303653ull}},
+{{9912454092997131693ull, 5074969982863982292ull,
+ 10917085516290482703ull, 146607306ull}},
+{{1378164112284711770ull, 10149939965727964585ull,
+ 3387426958871413790ull, 293214613ull}},
+{{2756328224569423540ull, 1853135857746377554ull,
+ 6774853917742827581ull, 586429226ull}},
+{{5512656449138847079ull, 3706271715492755108ull,
+ 13549707835485655162ull, 1172858452ull}},
+{{11025312898277694158ull, 7412543430985510216ull,
+ 8652671597261758708ull, 2345716905ull}},
+{{3603881722845836699ull, 14825086861971020433ull,
+ 17305343194523517416ull, 4691433810ull}},
+{{7207763445691673397ull, 11203429650232489250ull,
+ 16163942315337483217ull, 9382867621ull}},
+{{14415526891383346794ull, 3960115226755426884ull,
+ 13881140556965414819ull, 18765735243ull}},
+{{10384309709057141972ull, 7920230453510853769ull,
+ 9315537040221278022ull, 37531470487ull}},
+{{2321875344404732328ull, 15840460907021707539ull,
+ 184330006733004428ull, 75062940975ull}},
+{{4643750688809464655ull, 13234177740333863462ull,
+ 368660013466008857ull, 150125881950ull}},
+{{9287501377618929309ull, 8021611406958175308ull, 737320026932017715ull,
+ 300251763900ull}},
+{{128258681528307001ull, 16043222813916350617ull,
+ 1474640053864035430ull, 600503527800ull}},
+{{256517363056614002ull, 13639701554123149618ull,
+ 2949280107728070861ull, 1201007055600ull}},
+{{513034726113228003ull, 8832659034536747620ull, 5898560215456141723ull,
+ 2402014111200ull}},
+{{1026069452226456005ull, 17665318069073495240ull,
+ 11797120430912283446ull, 4804028222400ull}},
+{{2052138904452912009ull, 16883892064437438864ull,
+ 5147496788115015277ull, 9608056444801ull}},
+{{4104277808905824018ull, 15321040055165326112ull,
+ 10294993576230030555ull, 19216112889602ull}},
+{{8208555617811648035ull, 12195336036621100608ull,
+ 2143243078750509495ull, 38432225779205ull}},
+{{16417111235623296070ull, 5943927999532649600ull,
+ 4286486157501018991ull, 76864451558410ull}},
+{{14387478397537040523ull, 11887855999065299201ull,
+ 8572972315002037982ull, 153728903116820ull}},
+{{10328212721364529429ull, 5328967924421046787ull,
+ 17145944630004075965ull, 307457806233640ull}},
+{{2209681369019507241ull, 10657935848842093575ull,
+ 15845145186298600314ull, 614915612467281ull}},
+{{4419362738039014482ull, 2869127623974635534ull,
+ 13243546298887649013ull, 1229831224934563ull}},
+{{8838725476078028963ull, 5738255247949271068ull,
+ 8040348524065746410ull, 2459662449869127ull}},
+{{17677450952156057925ull, 11476510495898542136ull,
+ 16080697048131492820ull, 4919324899738254ull}},
+{{16908157830602564233ull, 4506276918087532657ull,
+ 13714650022553434025ull, 9838649799476509ull}},
+{{15369571587495576850ull, 9012553836175065315ull,
+ 8982555971397316434ull, 19677299598953019ull}},
+{{12292399101281602084ull, 18025107672350130631ull,
+ 17965111942794632868ull, 39354599197906038ull}},
+{{6138054128853652551ull, 17603471270990709647ull,
+ 17483479811879714121ull, 78709198395812077ull}},
+{{12276108257707305101ull, 16760198468271867678ull,
+ 16520215550049876627ull, 157418396791624155ull}},
+{{6105472441705058585ull, 15073652862834183741ull,
+ 14593687026390201639ull, 314836793583248311ull}},
+{{12210944883410117170ull, 11700561651958815866ull,
+ 10740629979070851663ull, 629673587166496623ull}},
+{{5975145693110682724ull, 4954379230208080117ull,
+ 3034515884432151711ull, 1259347174332993247ull}},
+{{1195029138622136545ull, 12058922290267346993ull,
+ 7985600806370250988ull, 251869434866598649ull}},
+{{2390058277244273090ull, 5671100506825142370ull,
+ 15971201612740501977ull, 503738869733197298ull}},
+{{4780116554488546179ull, 11342201013650284740ull,
+ 13495659151771452338ull, 1007477739466394597ull}},
+{{956023310897709236ull, 2268440202730056948ull,
+ 10077829459838111114ull, 201495547893278919ull}},
+{{1912046621795418472ull, 4536880405460113896ull,
+ 1708914845966670612ull, 402991095786557839ull}},
+{{3824093243590836943ull, 9073760810920227792ull,
+ 3417829691933341224ull, 805982191573115678ull}},
+{{15522213907685808682ull, 9193449791667866204ull,
+ 11751612382612399214ull, 161196438314623135ull}},
+{{12597683741662065747ull, 18386899583335732409ull,
+ 5056480691515246812ull, 322392876629246271ull}},
+{{6748623409614579878ull, 18327055092961913203ull,
+ 10112961383030493625ull, 644785753258492542ull}},
+{{1349724681922915976ull, 11044108648076203287ull,
+ 9401289906089919371ull, 128957150651698508ull}},
+{{2699449363845831952ull, 3641473222442854958ull, 355835738470287127ull,
+ 257914301303397017ull}},
+{{5398898727691663903ull, 7282946444885709916ull, 711671476940574254ull,
+ 515828602606794034ull}},
+{{10797797455383327805ull, 14565892889771419832ull,
+ 1423342953881148508ull, 1031657205213588068ull}},
+{{13227605935302396531ull, 6602527392696194289ull,
+ 11352715035001960671ull, 206331441042717613ull}},
+{{8008467796895241445ull, 13205054785392388579ull,
+ 4258685996294369726ull, 412662882085435227ull}},
+{{16016935593790482890ull, 7963365497075225542ull,
+ 8517371992588739453ull, 825325764170870454ull}},
+{{17960782377725737871ull, 8971370728898865754ull,
+ 16460869657485389183ull, 165065152834174090ull}},
+{{17474820681741924126ull, 17942741457797731509ull,
+ 14474995241261226750ull, 330130305668348181ull}},
+{{16502897289774296635ull, 17438738841885911403ull,
+ 10503246408812901885ull, 660260611336696363ull}},
+{{6989928272696769651ull, 14555794212602913250ull,
+ 13168695725988311346ull, 132052122267339272ull}},
+{{13979856545393539301ull, 10664844351496274884ull,
+ 7890647378267071077ull, 264104244534678545ull}},
+{{9512969017077526985ull, 2882944629282998153ull,
+ 15781294756534142155ull, 528208489069357090ull}},
+{{579193960445502354ull, 5765889258565996307ull,
+ 13115845439358732694ull, 1056416978138714181ull}},
+{{7494536421572921118ull, 1153177851713199261ull,
+ 6312517902613656862ull, 211283395627742836ull}},
+{{14989072843145842235ull, 2306355703426398522ull,
+ 12625035805227313724ull, 422566791255485672ull}},
+{{11531401612582132853ull, 4612711406852797045ull,
+ 6803327536745075832ull, 845133582510971345ull}},
+{{9684977952000247217ull, 8301239910854380055ull,
+ 1360665507349015166ull, 169026716502194269ull}},
+{{923211830290942818ull, 16602479821708760111ull,
+ 2721331014698030332ull, 338053433004388538ull}},
+{{1846423660581885636ull, 14758215569707968606ull,
+ 5442662029396060665ull, 676106866008777076ull}},
+{{7747982361600197774ull, 6640991928683504044ull,
+ 4777881220621122456ull, 135221373201755415ull}},
+{{15495964723200395548ull, 13281983857367008088ull,
+ 9555762441242244912ull, 270442746403510830ull}},
+{{12545185372691239479ull, 8117223641024464561ull,
+ 664780808774938209ull, 540885492807021661ull}},
+{{6643626671672927341ull, 16234447282048929123ull,
+ 1329561617549876418ull, 1081770985614043322ull}},
+{{12396771778560316438ull, 3246889456409785824ull,
+ 7644609952993795930ull, 216354197122808664ull}},
+{{6346799483411081260ull, 6493778912819571649ull,
+ 15289219905987591860ull, 432708394245617328ull}},
+{{12693598966822162519ull, 12987557825639143298ull,
+ 12131695738265632104ull, 865416788491234657ull}},
+{{17296115052332073797ull, 6286860379869738982ull,
+ 9805036777136947067ull, 173083357698246931ull}},
+{{16145486030954595977ull, 12573720759739477965ull,
+ 1163329480564342518ull, 346166715396493863ull}},
+{{13844227988199640338ull, 6700697445769404315ull,
+ 2326658961128685037ull, 692333430792987726ull}},
+{{13836892041865659038ull, 12408185933379611832ull,
+ 4154680606967647330ull, 138466686158597545ull}},
+{{9227040010021766459ull, 6369627793049672049ull,
+ 8309361213935294661ull, 276933372317195090ull}},
+{{7335946333981301ull, 12739255586099344099ull, 16618722427870589322ull,
+ 553866744634390180ull}},
+{{14671892667962602ull, 7031767098489136582ull, 14790700782031627029ull,
+ 1107733489268780361ull}},
+{{7381632008017413167ull, 1406353419697827316ull,
+ 6647488971148235729ull, 221546697853756072ull}},
+{{14763264016034826334ull, 2812706839395654632ull,
+ 13294977942296471458ull, 443093395707512144ull}},
+{{11079783958360101051ull, 5625413678791309265ull,
+ 8143211810883391300ull, 886186791415024289ull}},
+{{16973352050639661503ull, 15882477994725903145ull,
+ 16386037621144319552ull, 177237358283004857ull}},
+{{15499960027569771390ull, 13318211915742254675ull,
+ 14325331168579087489ull, 354474716566009715ull}},
+{{12553175981429991164ull, 8189679757774957735ull,
+ 10203918263448623363ull, 708949433132019431ull}},
+{{17268030455253639526ull, 16395331210522632839ull,
+ 5730132467431634995ull, 141789886626403886ull}},
+{{16089316836797727436ull, 14343918347335714063ull,
+ 11460264934863269991ull, 283579773252807772ull}},
+{{13731889599885903255ull, 10241092620961876511ull,
+ 4473785796016988367ull, 567159546505615545ull}},
+{{9017035126062254893ull, 2035441168214201407ull,
+ 8947571592033976735ull, 1134319093011231090ull}},
+{{9182104654696271625ull, 407088233642840281ull, 1789514318406795347ull,
+ 226863818602246218ull}},
+{{18364209309392543250ull, 814176467285680562ull,
+ 3579028636813590694ull, 453727637204492436ull}},
+{{18281674545075534884ull, 1628352934571361125ull,
+ 7158057273627181388ull, 907455274408984872ull}},
+{{3656334909015106977ull, 325670586914272225ull, 8810309084209256924ull,
+ 181491054881796974ull}},
+{{7312669818030213954ull, 651341173828544450ull,
+ 17620618168418513848ull, 362982109763593948ull}},
+{{14625339636060427907ull, 1302682347657088900ull,
+ 16794492263127476080ull, 725964219527187897ull}},
+{{10303765556695906228ull, 7639234099015238426ull,
+ 10737596082109315862ull, 145192843905437579ull}},
+{{2160787039682260840ull, 15278468198030476853ull,
+ 3028448090509080108ull, 290385687810875159ull}},
+{{4321574079364521680ull, 12110192322351402090ull,
+ 6056896181018160217ull, 580771375621750318ull}},
+{{8643148158729043359ull, 5773640570993252564ull,
+ 12113792362036320435ull, 1161542751243500636ull}},
+{{1728629631745808672ull, 4844076928940560836ull,
+ 6112107287149174410ull, 232308550248700127ull}},
+{{3457259263491617344ull, 9688153857881121672ull,
+ 12224214574298348820ull, 464617100497400254ull}},
+{{6914518526983234687ull, 929563642052691728ull, 6001685074887146025ull,
+ 929234200994800509ull}},
+{{8761601334880467584ull, 14943307987378179638ull,
+ 15957732273945070497ull, 185846840198960101ull}},
+{{17523202669760935168ull, 11439871901046807660ull,
+ 13468720474180589379ull, 371693680397920203ull}},
+{{16599661265812318719ull, 4432999728384063705ull,
+ 8490696874651627143ull, 743387360795840407ull}},
+{{3319932253162463744ull, 886599945676812741ull, 9076837004414146075ull,
+ 148677472159168081ull}},
+{{6639864506324927488ull, 1773199891353625482ull,
+ 18153674008828292150ull, 297354944318336162ull}},
+{{13279729012649854976ull, 3546399782707250964ull,
+ 17860603943947032684ull, 594709888636672325ull}},
+{{8112713951590158335ull, 7092799565414501929ull,
+ 17274463814184513752ull, 1189419777273344651ull}},
+{{9001240419801852314ull, 12486606357308631355ull,
+ 7144241577578813073ull, 237883955454668930ull}},
+{{18002480839603704627ull, 6526468640907711094ull,
+ 14288483155157626147ull, 475767910909337860ull}},
+{{17558217605497857637ull, 13052937281815422189ull,
+ 10130222236605700678ull, 951535821818675721ull}},
+{{14579689965325302497ull, 17367982715330725730ull,
+ 5715393262063050458ull, 190307164363735144ull}},
+{{10712635856941053378ull, 16289221356951899845ull,
+ 11430786524126100917ull, 380614328727470288ull}},
+{{2978527640172555140ull, 14131698640194248075ull,
+ 4414828974542650219ull, 761228657454940577ull}},
+{{4285054342776421352ull, 6515688542780759938ull,
+ 8261663424392350690ull, 152245731490988115ull}},
+{{8570108685552842703ull, 13031377085561519876ull,
+ 16523326848784701380ull, 304491462981976230ull}},
+{{17140217371105685405ull, 7616010097413488136ull,
+ 14599909623859851145ull, 608982925963952461ull}},
+{{15833690668501819194ull, 15232020194826976273ull,
+ 10753075174010150674ull, 1217965851927904923ull}},
+{{3166738133700363839ull, 10425101668449215901ull,
+ 13218661479027761104ull, 243593170385580984ull}},
+{{6333476267400727678ull, 2403459263188880186ull,
+ 7990578884345970593ull, 487186340771161969ull}},
+{{12666952534801455355ull, 4806918526377760372ull,
+ 15981157768691941186ull, 974372681542323938ull}},
+{{6222739321702201395ull, 15718778964243193367ull,
+ 14264277997964119206ull, 194874536308464787ull}},
+{{12445478643404402789ull, 12990813854776835118ull,
+ 10081811922218686797ull, 389749072616929575ull}},
+{{6444213213099253961ull, 7534883635844118621ull,
+ 1716879770727821979ull, 779498145233859151ull}},
+{{4978191457361761116ull, 1506976727168823724ull,
+ 4032724768887474719ull, 155899629046771830ull}},
+{{9956382914723522231ull, 3013953454337647448ull,
+ 8065449537774949438ull, 311799258093543660ull}},
+{{1466021755737492846ull, 6027906908675294897ull,
+ 16130899075549898876ull, 623598516187087320ull}},
+{{2932043511474985691ull, 12055813817350589794ull,
+ 13815054077390246136ull, 1247197032374174641ull}},
+{{4275757517036907462ull, 9789860392953938605ull,
+ 6452359630219959550ull, 249439406474834928ull}},
+{{8551515034073814923ull, 1132976712198325594ull,
+ 12904719260439919101ull, 498878812949669856ull}},
+{{17103030068147629846ull, 2265953424396651188ull,
+ 7362694447170286586ull, 997757625899339713ull}},
+{{10799303643113346616ull, 15210585943846971530ull,
+ 12540585333659788286ull, 199551525179867942ull}},
+{{3151863212517141615ull, 11974427813984391445ull,
+ 6634426593610024957ull, 399103050359735885ull}},
+{{6303726425034283230ull, 5502111554259231274ull,
+ 13268853187220049915ull, 798206100719471770ull}},
+{{16018140543974497939ull, 1100422310851846254ull,
+ 2653770637444009983ull, 159641220143894354ull}},
+{{13589537014239444262ull, 2200844621703692509ull,
+ 5307541274888019966ull, 319282440287788708ull}},
+{{8732329954769336908ull, 4401689243407385019ull,
+ 10615082549776039932ull, 638564880575577416ull}},
+{{17464659909538673815ull, 8803378486814770038ull,
+ 2783421025842528248ull, 1277129761151154833ull}},
+{{18250327240875376056ull, 5450024512104864330ull,
+ 11624730649394236619ull, 255425952230230966ull}},
+{{18053910408041200496ull, 10900049024209728661ull,
+ 4802717225078921622ull, 510851904460461933ull}},
+{{17661076742372849375ull, 3353353974709905707ull,
+ 9605434450157843245ull, 1021703808920923866ull}},
+{{14600261792700300845ull, 4360019609683891464ull,
+ 5610435704773478972ull, 204340761784184773ull}},
+{{10753779511691050074ull, 8720039219367782929ull,
+ 11220871409546957944ull, 408681523568369546ull}},
+{{3060814949672548531ull, 17440078438735565859ull,
+ 3994998745384364272ull, 817363047136739093ull}},
+{{15369558248902150999ull, 3488015687747113171ull,
+ 11867046193302603824ull, 163472609427347818ull}},
+{{12292372424094750382ull, 6976031375494226343ull,
+ 5287348312895656032ull, 326945218854695637ull}},
+{{6138000774479949148ull, 13952062750988452687ull,
+ 10574696625791312064ull, 653890437709391274ull}},
+{{1227600154895989830ull, 13858458994423421507ull,
+ 16872334584125903705ull, 130778087541878254ull}},
+{{2455200309791979659ull, 9270173915137291398ull,
+ 15297925094542255795ull, 261556175083756509ull}},
+{{4910400619583959318ull, 93603756565031180ull, 12149106115374959975ull,
+ 523112350167513019ull}},
+{{9820801239167918636ull, 187207513130062360ull, 5851468157040368334ull,
+ 1046224700335026039ull}},
+{{13032206692059314697ull, 11105487946851743441ull,
+ 15927688890375714959ull, 209244940067005207ull}},
+{{7617669310409077778ull, 3764231819993935267ull,
+ 13408633707041878303ull, 418489880134010415ull}},
+{{15235338620818155555ull, 7528463639987870534ull,
+ 8370523340374204990ull, 836979760268020831ull}},
+{{3047067724163631111ull, 5195041542739484430ull,
+ 5363453482816751321ull, 167395952053604166ull}},
+{{6094135448327262222ull, 10390083085478968860ull,
+ 10726906965633502642ull, 334791904107208332ull}},
+{{12188270896654524444ull, 2333422097248386104ull,
+ 3007069857557453669ull, 669583808214416665ull}},
+{{13505700623556635859ull, 15224079678417318513ull,
+ 601413971511490733ull, 133916761642883333ull}},
+{{8564657173403720101ull, 12001415283125085411ull,
+ 1202827943022981467ull, 267833523285766666ull}},
+{{17129314346807440202ull, 5556086492540619206ull,
+ 2405655886045962935ull, 535667046571533332ull}},
+{{15811884619905328788ull, 11112172985081238413ull,
+ 4811311772091925870ull, 1071334093143066664ull}},
+{{10541074553464886404ull, 16979829855983888975ull,
+ 15719657613386026466ull, 214266818628613332ull}},
+{{2635405033220221192ull, 15512915638258226335ull,
+ 12992571153062501317ull, 428533637257226665ull}},
+{{5270810066440442384ull, 12579087202806901054ull,
+ 7538398232415451019ull, 857067274514453331ull}},
+{{15811557272255729770ull, 2515817440561380210ull,
+ 5197028461225000527ull, 171413454902890666ull}},
+{{13176370470801907923ull, 5031634881122760421ull,
+ 10394056922450001054ull, 342826909805781332ull}},
+{{7905996867894264230ull, 10063269762245520843ull,
+ 2341369771190450492ull, 685653819611562665ull}},
+{{1581199373578852846ull, 9391351581932924815ull, 468273954238090098ull,
+ 137130763922312533ull}},
+{{3162398747157705692ull, 335959090156298014ull, 936547908476180197ull,
+ 274261527844625066ull}},
+{{6324797494315411384ull, 671918180312596028ull, 1873095816952360394ull,
+ 548523055689250132ull}},
+{{12649594988630822768ull, 1343836360625192056ull,
+ 3746191633904720788ull, 1097046111378500264ull}},
+{{13597965441951895524ull, 7647464901608859057ull,
+ 15506633585748585450ull, 219409222275700052ull}},
+{{8749186810194239431ull, 15294929803217718115ull,
+ 12566523097787619284ull, 438818444551400105ull}},
+{{17498373620388478861ull, 12143115532725884614ull,
+ 6686302121865686953ull, 877636889102800211ull}},
+{{14567721168303426742ull, 17186018365512818215ull,
+ 5026609239115047713ull, 175527377820560042ull}},
+{{10688698262897301868ull, 15925292657316084815ull,
+ 10053218478230095427ull, 351054755641120084ull}},
+{{2930652452085052119ull, 13403841240922618015ull,
+ 1659692882750639239ull, 702109511282240169ull}},
+{{11654176934642741394ull, 13748814692410254572ull,
+ 15089333835517769140ull, 140421902256448033ull}},
+{{4861609795575931171ull, 9050885311110957529ull,
+ 11731923597325986665ull, 280843804512896067ull}},
+{{9723219591151862342ull, 18101770622221915058ull,
+ 5017103120942421714ull, 561687609025792135ull}},
+{{999695108594173067ull, 17756797170734278501ull,
+ 10034206241884843429ull, 1123375218051584270ull}},
+{{199939021718834614ull, 18308754693114496993ull,
+ 2006841248376968685ull, 224675043610316854ull}},
+{{399878043437669227ull, 18170765312519442370ull,
+ 4013682496753937371ull, 449350087220633708ull}},
+{{799756086875338454ull, 17894786551329333124ull,
+ 8027364993507874743ull, 898700174441267416ull}},
+{{11227997661600798661ull, 18336352569233507917ull,
+ 5294821813443485271ull, 179740034888253483ull}},
+{{4009251249492045705ull, 18225961064757464219ull,
+ 10589643626886970543ull, 359480069776506966ull}},
+{{8018502498984091410ull, 18005178055805376822ull,
+ 2732543180064389471ull, 718960139553013933ull}},
+{{5293049314538728606ull, 18358430870128716657ull,
+ 11614555080238608863ull, 143792027910602786ull}},
+{{10586098629077457211ull, 18270117666547881698ull,
+ 4782366086767666111ull, 287584055821205573ull}},
+{{2725453184445362805ull, 18093491259386211781ull,
+ 9564732173535332223ull, 575168111642411146ull}},
+{{5450906368890725609ull, 17740238445062871946ull,
+ 682720273361112831ull, 1150336223284822293ull}},
+{{1090181273778145122ull, 18305442947980215682ull,
+ 11204590498897953535ull, 230067244656964458ull}},
+{{2180362547556290244ull, 18164141822250879748ull,
+ 3962436924086355455ull, 460134489313928917ull}},
+{{4360725095112580487ull, 17881539570792207880ull,
+ 7924873848172710911ull, 920268978627857834ull}},
+{{872145019022516098ull, 3576307914158441576ull,
+ 16342370028602183475ull, 184053795725571566ull}},
+{{1744290038045032195ull, 7152615828316883152ull,
+ 14237995983494815334ull, 368107591451143133ull}},
+{{3488580076090064390ull, 14305231656633766304ull,
+ 10029247893280079052ull, 736215182902286267ull}},
+{{11765762459443743848ull, 17618441590294394553ull,
+ 9384547208139836456ull, 147243036580457253ull}},
+{{5084780845177936079ull, 16790139106879237491ull,
+ 322350342570121297ull, 294486073160914507ull}},
+{{10169561690355872158ull, 15133534140048923366ull,
+ 644700685140242595ull, 588972146321829014ull}},
+{{1892379307002192700ull, 11820324206388295117ull,
+ 1289401370280485191ull, 1177944292643658028ull}},
+{{4067824676142348864ull, 17121460100245300316ull,
+ 11325926718281828007ull, 235588858528731605ull}},
+{{8135649352284697727ull, 15796176126781049016ull,
+ 4205109362854104399ull, 471177717057463211ull}},
+{{16271298704569395453ull, 13145608179852546416ull,
+ 8410218725708208799ull, 942355434114926422ull}},
+{{10632957370397699737ull, 6318470450712419606ull,
+ 9060741374625462406ull, 188471086822985284ull}},
+{{2819170667085847858ull, 12636940901424839213ull,
+ 18121482749250924812ull, 376942173645970568ull}},
+{{5638341334171695716ull, 6827137729140126810ull,
+ 17796221424792298009ull, 753884347291941137ull}},
+{{4817017081576249467ull, 5054776360569935685ull,
+ 10937941914442280248ull, 150776869458388227ull}},
+{{9634034163152498933ull, 10109552721139871370ull,
+ 3429139755175008880ull, 301553738916776455ull}},
+{{821324252595446250ull, 1772361368570191125ull, 6858279510350017761ull,
+ 603107477833552910ull}},
+{{1642648505190892499ull, 3544722737140382250ull,
+ 13716559020700035522ull, 1206214955667105820ull}},
+{{7707227330521999147ull, 8087642176911897096ull,
+ 2743311804140007104ull, 241242991133421164ull}},
+{{15414454661043998293ull, 16175284353823794192ull,
+ 5486623608280014208ull, 482485982266842328ull}},
+{{12382165248378444969ull, 13903824633938036769ull,
+ 10973247216560028417ull, 964971964533684656ull}},
+{{9855130679159509641ull, 13848811371013338323ull,
+ 5883998258053916006ull, 192994392906736931ull}},
+{{1263517284609467665ull, 9250878668317125031ull,
+ 11767996516107832013ull, 385988785813473862ull}},
+{{2527034569218935329ull, 55013262924698446ull, 5089248958506112411ull,
+ 771977571626947725ull}},
+{{7884104543327607713ull, 3700351467326850012ull,
+ 1017849791701222482ull, 154395514325389545ull}},
+{{15768209086655215425ull, 7400702934653700024ull,
+ 2035699583402444964ull, 308791028650779090ull}},
+{{13089674099600879233ull, 14801405869307400049ull,
+ 4071399166804889928ull, 617582057301558180ull}},
+{{7732604125492206849ull, 11156067664905248483ull,
+ 8142798333609779857ull, 1235164114603116360ull}},
+{{1546520825098441370ull, 9609911162464870343ull,
+ 1628559666721955971ull, 247032822920623272ull}},
+{{3093041650196882740ull, 773078251220189070ull, 3257119333443911943ull,
+ 494065645841246544ull}},
+{{6186083300393765479ull, 1546156502440378140ull,
+ 6514238666887823886ull, 988131291682493088ull}},
+{{15994611919046394389ull, 15066626559455716920ull,
+ 12370894177603295746ull, 197626258336498617ull}},
+{{13542479764383237162ull, 11686509045201882225ull,
+ 6295044281497039877ull, 395252516672997235ull}},
+{{8638215455056922707ull, 4926274016694212835ull,
+ 12590088562994079755ull, 790505033345994470ull}},
+{{1727643091011384542ull, 985254803338842567ull, 2518017712598815951ull,
+ 158101006669198894ull}},
+{{3455286182022769083ull, 1970509606677685134ull,
+ 5036035425197631902ull, 316202013338397788ull}},
+{{6910572364045538166ull, 3941019213355370268ull,
+ 10072070850395263804ull, 632404026676795576ull}},
+{{13821144728091076331ull, 7882038426710740536ull,
+ 1697397627080975992ull, 1264808053353591153ull}},
+{{6453577760360125590ull, 1576407685342148107ull,
+ 11407525969641926168ull, 252961610670718230ull}},
+{{12907155520720251179ull, 3152815370684296214ull,
+ 4368307865574300720ull, 505923221341436461ull}},
+{{7367566967730950741ull, 6305630741368592429ull,
+ 8736615731148601440ull, 1011846442682872922ull}},
+{{5162862208288100472ull, 8639823777757539132ull,
+ 9126020775713540934ull, 202369288536574584ull}},
+{{10325724416576200943ull, 17279647555515078264ull,
+ 18252041551427081868ull, 404738577073149168ull}},
+{{2204704759442850270ull, 16112551037320604913ull,
+ 18057339029144612121ull, 809477154146298337ull}},
+{{4130289766630480378ull, 14290556651689851952ull,
+ 10990165435312743070ull, 161895430829259667ull}},
+{{8260579533260960755ull, 10134369229670152288ull,
+ 3533586796915934525ull, 323790861658519335ull}},
+{{16521159066521921509ull, 1821994385630752960ull,
+ 7067173593831869051ull, 647581723317038670ull}},
+{{6993580628046294625ull, 4053747691868060915ull,
+ 1413434718766373810ull, 129516344663407734ull}},
+{{13987161256092589250ull, 8107495383736121830ull,
+ 2826869437532747620ull, 259032689326815468ull}},
+{{9527578438475626884ull, 16214990767472243661ull,
+ 5653738875065495240ull, 518065378653630936ull}},
+{{608412803241702152ull, 13983237461234935707ull,
+ 11307477750130990481ull, 1036130757307261872ull}},
+{{121682560648340431ull, 13864693936472718111ull,
+ 9640193179510018742ull, 207226151461452374ull}},
+{{243365121296680861ull, 9282643799235884606ull, 833642285310485869ull,
+ 414452302922904749ull}},
+{{486730242593361721ull, 118543524762217596ull, 1667284570620971739ull,
+ 828904605845809498ull}},
+{{11165392492744403314ull, 7402406334436264165ull,
+ 11401503358349925317ull, 165780921169161899ull}},
+{{3884040911779255012ull, 14804812668872528331ull,
+ 4356262642990299018ull, 331561842338323799ull}},
+{{7768081823558510024ull, 11162881264035505046ull,
+ 8712525285980598037ull, 663123684676647598ull}},
+{{5242965179453612328ull, 2232576252807101009ull,
+ 12810551501421850577ull, 132624736935329519ull}},
+{{10485930358907224656ull, 4465152505614202018ull,
+ 7174358929134149538ull, 265249473870659039ull}},
+{{2525116644104897696ull, 8930305011228404037ull,
+ 14348717858268299076ull, 530498947741318078ull}},
+{{5050233288209795391ull, 17860610022456808074ull,
+ 10250691642827046536ull, 1060997895482636157ull}},
+{{8388744287125779725ull, 14640168448717092584ull,
+ 9428835958049229953ull, 212199579096527231ull}},
+{{16777488574251559450ull, 10833592823724633552ull,
+ 410927842388908291ull, 424399158193054463ull}},
+{{15108233074793567283ull, 3220441573739715489ull,
+ 821855684777816583ull, 848798316386108926ull}},
+{{14089693059184444427ull, 15401483573715584390ull,
+ 3853719951697473639ull, 169759663277221785ull}},
+{{9732642044659337237ull, 12356223073721617165ull,
+ 7707439903394947279ull, 339519326554443570ull}},
+{{1018540015609122857ull, 6265702073733682715ull,
+ 15414879806789894559ull, 679038653108887140ull}},
+{{14961103262089465865ull, 16010535673714377835ull,
+ 3082975961357978911ull, 135807730621777428ull}},
+{{11475462450469380113ull, 13574327273719204055ull,
+ 6165951922715957823ull, 271615461243554856ull}},
+{{4504180827229208609ull, 8701910473728856495ull,
+ 12331903845431915647ull, 543230922487109712ull}},
+{{9008361654458417217ull, 17403820947457712990ull,
+ 6217063617154279678ull, 1086461844974219425ull}},
+{{12869718775117414413ull, 14548810633717273567ull,
+ 1243412723430855935ull, 217292368994843885ull}},
+{{7292693476525277210ull, 10650877193724995519ull,
+ 2486825446861711871ull, 434584737989687770ull}},
+{{14585386953050554420ull, 2855010313740439422ull,
+ 4973650893723423743ull, 869169475979375540ull}},
+{{2917077390610110884ull, 11639048506973818854ull,
+ 994730178744684748ull, 173833895195875108ull}},
+{{5834154781220221768ull, 4831352940238086092ull,
+ 1989460357489369497ull, 347667790391750216ull}},
+{{11668309562440443536ull, 9662705880476172184ull,
+ 3978920714978738994ull, 695335580783500432ull}},
+{{2333661912488088708ull, 5621889990837144760ull,
+ 8174481772479568445ull, 139067116156700086ull}},
+{{4667323824976177415ull, 11243779981674289520ull,
+ 16348963544959136890ull, 278134232313400172ull}},
+{{9334647649952354829ull, 4040815889639027424ull,
+ 14251183016208722165ull, 556268464626800345ull}},
+{{222551226195158041ull, 8081631779278054849ull,
+ 10055621958707892714ull, 1112536929253600691ull}},
+{{14801905504206672901ull, 1616326355855610969ull,
+ 5700473206483488866ull, 222507385850720138ull}},
+{{11157066934703794186ull, 3232652711711221939ull,
+ 11400946412966977732ull, 445014771701440276ull}},
+{{3867389795698036756ull, 6465305423422443879ull,
+ 4355148752224403848ull, 890029543402880553ull}},
+{{773477959139607352ull, 4982409899426399099ull,
+ 11939076194670611739ull, 178005908680576110ull}},
+{{1546955918279214703ull, 9964819798852798198ull,
+ 5431408315631671862ull, 356011817361152221ull}},
+{{3093911836558429405ull, 1482895523996044780ull,
+ 10862816631263343725ull, 712023634722304442ull}},
+{{7997479996795506528ull, 7675276734283029602ull,
+ 9551260955736489391ull, 142404726944460888ull}},
+{{15994959993591013055ull, 15350553468566059204ull,
+ 655777837763427166ull, 284809453888921777ull}},
+{{13543175913472474494ull, 12254362863422566793ull,
+ 1311555675526854333ull, 569618907777843554ull}},
+{{8639607753235397371ull, 6061981653135581971ull,
+ 2623111351053708667ull, 1139237815555687108ull}},
+{{5417270365388989798ull, 1212396330627116394ull,
+ 11592668714436472703ull, 227847563111137421ull}},
+{{10834540730777979595ull, 2424792661254232788ull,
+ 4738593355163393790ull, 455695126222274843ull}},
+{{3222337387846407574ull, 4849585322508465577ull,
+ 9477186710326787580ull, 911390252444549686ull}},
+{{11712513921795012485ull, 4659265879243603438ull,
+ 5584786156807267839ull, 182278050488909937ull}},
+{{4978283769880473353ull, 9318531758487206877ull,
+ 11169572313614535678ull, 364556100977819874ull}},
+{{9956567539760946705ull, 190319443264862138ull, 3892400553519519741ull,
+ 729112201955639749ull}},
+{{13059359952177920311ull, 38063888652972427ull,
+ 15535875369671545241ull, 145822440391127949ull}},
+{{7671975830646289006ull, 76127777305944855ull, 12625006665633538866ull,
+ 291644880782255899ull}},
+{{15343951661292578011ull, 152255554611889710ull,
+ 6803269257557526116ull, 583289761564511799ull}},
+{{12241159248875604405ull, 304511109223779421ull,
+ 13606538515115052232ull, 1166579523129023598ull}},
+{{6137580664517031205ull, 60902221844755884ull, 13789354147248741416ull,
+ 233315904625804719ull}},
+{{12275161329034062409ull, 121804443689511768ull,
+ 9131964220787931216ull, 466631809251609439ull}},
+{{6103578584358573201ull, 243608887379023537ull,
+ 18263928441575862432ull, 933263618503218878ull}},
+{{8599413346355535287ull, 48721777475804707ull, 14720832132540903456ull,
+ 186652723700643775ull}},
+{{17198826692711070574ull, 97443554951609414ull,
+ 10994920191372255296ull, 373305447401287551ull}},
+{{15950909311712589531ull, 194887109903218829ull,
+ 3543096309034958976ull, 746610894802575103ull}},
+{{14258228306568248876ull, 14796372680948285058ull,
+ 11776665706032722764ull, 149322178960515020ull}},
+{{10069712539426946136ull, 11146001288187018501ull,
+ 5106587338355893913ull, 298644357921030041ull}},
+{{1692681005144340655ull, 3845258502664485387ull,
+ 10213174676711787827ull, 597288715842060082ull}},
+{{3385362010288681309ull, 7690517005328970774ull,
+ 1979605279714024038ull, 1194577431684120165ull}},
+{{8055770031541556909ull, 12606149845291525124ull,
+ 395921055942804807ull, 238915486336824033ull}},
+{{16111540063083113817ull, 6765555616873498632ull,
+ 791842111885609615ull, 477830972673648066ull}},
+{{13776336052456676017ull, 13531111233746997265ull,
+ 1583684223771219230ull, 955661945347296132ull}},
+{{10133964839975155850ull, 10084919876233220099ull,
+ 7695434474238064492ull, 191132389069459226ull}},
+{{1821185606240760084ull, 1723095678756888583ull,
+ 15390868948476128985ull, 382264778138918452ull}},
+{{3642371212481520168ull, 3446191357513777166ull,
+ 12334993823242706354ull, 764529556277836905ull}},
+{{728474242496304034ull, 15446633530470396726ull,
+ 2466998764648541270ull, 152905911255567381ull}},
+{{1456948484992608067ull, 12446522987231241836ull,
+ 4933997529297082541ull, 305811822511134762ull}},
+{{2913896969985216134ull, 6446301900752932056ull,
+ 9867995058594165083ull, 611623645022269524ull}},
+{{5827793939970432268ull, 12892603801505864112ull,
+ 1289246043478778550ull, 1223247290044539049ull}},
+{{4854907602735996777ull, 17335916019268814115ull,
+ 15015244467663397002ull, 244649458008907809ull}},
+{{9709815205471993554ull, 16225087964828076614ull,
+ 11583744861617242389ull, 489298916017815619ull}},
+{{972886337234435491ull, 14003431855946601613ull,
+ 4720745649524933163ull, 978597832035631239ull}},
+{{194577267446887099ull, 10179384000673140969ull,
+ 15701544388872627925ull, 195719566407126247ull}},
+{{389154534893774197ull, 1912023927636730322ull,
+ 12956344704035704235ull, 391439132814252495ull}},
+{{778309069787548393ull, 3824047855273460644ull, 7465945334361856854ull,
+ 782878265628504991ull}},
+{{14913057072925150972ull, 764809571054692128ull,
+ 5182537881614281694ull, 156575653125700998ull}},
+{{11379370072140750327ull, 1529619142109384257ull,
+ 10365075763228563388ull, 313151306251401996ull}},
+{{4311996070571949038ull, 3059238284218768515ull,
+ 2283407452747575160ull, 626302612502803993ull}},
+{{8623992141143898075ull, 6118476568437537030ull,
+ 4566814905495150320ull, 1252605225005607986ull}},
+{{5414147242970689939ull, 4913044128429417729ull,
+ 4602711795840940387ull, 250521045001121597ull}},
+{{10828294485941379877ull, 9826088256858835458ull,
+ 9205423591681880774ull, 501042090002243194ull}},
+{{3209844898173208137ull, 1205432440008119301ull,
+ 18410847183363761549ull, 1002084180004486388ull}},
+{{11710015423860372597ull, 7619784117485444506ull,
+ 14750215880898483279ull, 200416836000897277ull}},
+{{4973286774011193578ull, 15239568234970889013ull,
+ 11053687688087414942ull, 400833672001794555ull}},
+{{9946573548022387156ull, 12032392396232226410ull,
+ 3660631302465278269ull, 801667344003589111ull}},
+{{1989314709604477432ull, 2406478479246445282ull,
+ 4421475075234965977ull, 160333468800717822ull}},
+{{3978629419208954863ull, 4812956958492890564ull,
+ 8842950150469931954ull, 320666937601435644ull}},
+{{7957258838417909725ull, 9625913916985781128ull,
+ 17685900300939863908ull, 641333875202871288ull}},
+{{16348847026651223238ull, 5614531598139066548ull,
+ 14605226504413703751ull, 128266775040574257ull}},
+{{14250949979592894860ull, 11229063196278133097ull,
+ 10763708935117855886ull, 256533550081148515ull}},
+{{10055155885476238103ull, 4011382318846714579ull,
+ 3080673796526160157ull, 513067100162297031ull}},
+{{1663567697242924590ull, 8022764637693429159ull,
+ 6161347593052320314ull, 1026134200324594062ull}},
+{{332713539448584918ull, 5293901742280596155ull, 8610967148094284709ull,
+ 205226840064918812ull}},
+{{665427078897169836ull, 10587803484561192310ull,
+ 17221934296188569418ull, 410453680129837624ull}},
+{{1330854157794339672ull, 2728862895412833004ull,
+ 15997124518667587221ull, 820907360259675249ull}},
+{{15023566090526509228ull, 545772579082566600ull,
+ 17956820162701158737ull, 164181472051935049ull}},
+{{11600388107343466839ull, 1091545158165133201ull,
+ 17466896251692765858ull, 328362944103870099ull}},
+{{4754032140977382061ull, 2183090316330266403ull,
+ 16487048429675980100ull, 656725888207740199ull}},
+{{8329504057679297059ull, 15194013322233694573ull,
+ 18054804944902837312ull, 131345177641548039ull}},
+{{16659008115358594117ull, 11941282570757837530ull,
+ 17662865816096123009ull, 262690355283096079ull}},
+{{14871272157007636618ull, 5435821067806123445ull,
+ 16878987558482694403ull, 525380710566192159ull}},
+{{11295800240305721620ull, 10871642135612246891ull,
+ 15311231043255837190ull, 1050761421132384319ull}},
+{{2259160048061144324ull, 16931723686090090671ull,
+ 17819641467618808730ull, 210152284226476863ull}},
+{{4518320096122288648ull, 15416703298470629726ull,
+ 17192538861528065845ull, 420304568452953727ull}},
+{{9036640192244577296ull, 12386662523231707836ull,
+ 15938333649346580075ull, 840609136905907455ull}},
+{{5496676853190825783ull, 2477332504646341567ull,
+ 3187666729869316015ull, 168121827381181491ull}},
+{{10993353706381651565ull, 4954665009292683134ull,
+ 6375333459738632030ull, 336243654762362982ull}},
+{{3539963339053751514ull, 9909330018585366269ull,
+ 12750666919477264060ull, 672487309524725964ull}},
+{{11776039112036481273ull, 16739261262684714546ull,
+ 17307528642863094104ull, 134497461904945192ull}},
+{{5105334150363410929ull, 15031778451659877477ull,
+ 16168313212016636593ull, 268994923809890385ull}},
+{{10210668300726821858ull, 11616812829610203338ull,
+ 13889882350323721571ull, 537989847619780771ull}},
+{{1974592527744092099ull, 4786881585510855061ull,
+ 9333020626937891527ull, 1075979695239561543ull}},
+{{4084267320290728743ull, 957376317102171012ull,
+ 12934650569613309275ull, 215195939047912308ull}},
+{{8168534640581457486ull, 1914752634204342024ull,
+ 7422557065517066934ull, 430391878095824617ull}},
+{{16337069281162914972ull, 3829505268408684048ull,
+ 14845114131034133868ull, 860783756191649234ull}},
+{{3267413856232582995ull, 8144598683165557456ull,
+ 17726418085174468066ull, 172156751238329846ull}},
+{{6534827712465165989ull, 16289197366331114912ull,
+ 17006092096639384516ull, 344313502476659693ull}},
+{{13069655424930331978ull, 14131650658952678208ull,
+ 15565440119569217417ull, 688627004953319387ull}},
+{{9992628714469887042ull, 17583725390758176934ull,
+ 10491785653397664129ull, 137725400990663877ull}},
+{{1538513355230222468ull, 16720706707806802253ull,
+ 2536827233085776643ull, 275450801981327755ull}},
+{{3077026710460444936ull, 14994669341904052890ull,
+ 5073654466171553287ull, 550901603962655510ull}},
+{{6154053420920889871ull, 11542594610098554164ull,
+ 10147308932343106575ull, 1101803207925311020ull}},
+{{15988205943151819267ull, 2308518922019710832ull,
+ 2029461786468621315ull, 220360641585062204ull}},
+{{13529667812594086918ull, 4617037844039421665ull,
+ 4058923572937242630ull, 440721283170124408ull}},
+{{8612591551478622220ull, 9234075688078843331ull,
+ 8117847145874485260ull, 881442566340248816ull}},
+{{9101215939779545091ull, 5536163952357678989ull,
+ 5312918243916807375ull, 176288513268049763ull}},
+{{18202431879559090181ull, 11072327904715357978ull,
+ 10625836487833614750ull, 352577026536099526ull}},
+{{17958119685408628746ull, 3697911735721164341ull,
+ 2804928901957677885ull, 705154053072199053ull}},
+{{18349019196049367042ull, 11807628791369963837ull,
+ 11629032224617266546ull, 141030810614439810ull}},
+{{18251294318389182468ull, 5168513509030376059ull,
+ 4811320375524981477ull, 282061621228879621ull}},
+{{18055844563068813320ull, 10337027018060752119ull,
+ 9622640751049962954ull, 564123242457759242ull}},
+{{17664945052428075024ull, 2227309962411952623ull,
+ 798537428390374293ull, 1128246484915518485ull}},
+{{7222337825227525328ull, 11513508436708121494ull,
+ 159707485678074858ull, 225649296983103697ull}},
+{{14444675650455050656ull, 4580272799706691372ull,
+ 319414971356149717ull, 451298593966207394ull}},
+{{10442607227200549696ull, 9160545599413382745ull,
+ 638829942712299434ull, 902597187932414788ull}},
+{{9467219074923930586ull, 9210806749366497195ull,
+ 11195812432768190856ull, 180519437586482957ull}},
+{{487694076138309555ull, 18421613498732994391ull,
+ 3944880791826830096ull, 361038875172965915ull}},
+{{975388152276619110ull, 18396482923756437166ull,
+ 7889761583653660193ull, 722077750345931830ull}},
+{{14952472889422965115ull, 14747343028977018402ull,
+ 1577952316730732038ull, 144415550069186366ull}},
+{{11458201705136378614ull, 11047941984244485189ull,
+ 3155904633461464077ull, 288831100138372732ull}},
+{{4469659336563205612ull, 3649139894779418763ull,
+ 6311809266922928155ull, 577662200276745464ull}},
+{{8939318673126411223ull, 7298279789558837526ull,
+ 12623618533845856310ull, 1155324400553490928ull}},
+{{16545258993592923538ull, 12527702402137498474ull,
+ 13592770150994902231ull, 231064880110698185ull}},
+{{14643773913476295459ull, 6608660730565445333ull,
+ 8738796228280252847ull, 462129760221396371ull}},
+{{10840803753243039301ull, 13217321461130890667ull,
+ 17477592456560505694ull, 924259520442792742ull}},
+{{13236207194874338830ull, 6332813106968088456ull,
+ 10874216120795921785ull, 184851904088558548ull}},
+{{8025670316039126044ull, 12665626213936176913ull,
+ 3301688167882291954ull, 369703808177117097ull}},
+{{16051340632078252088ull, 6884508354162802210ull,
+ 6603376335764583909ull, 739407616354234194ull}},
+{{14278314570641381388ull, 12444948115058291411ull,
+ 16078070526120558074ull, 147881523270846838ull}},
+{{10109885067573211159ull, 6443152156407031207ull,
+ 13709396978531564533ull, 295763046541693677ull}},
+{{1773026061436870701ull, 12886304312814062415ull,
+ 8972049883353577450ull, 591526093083387355ull}},
+{{3546052122873741401ull, 7325864551918573214ull,
+ 17944099766707154901ull, 1183052186166774710ull}},
+{{709210424574748281ull, 5154521725125624966ull, 3588819953341430980ull,
+ 236610437233354942ull}},
+{{1418420849149496561ull, 10309043450251249932ull,
+ 7177639906682861960ull, 473220874466709884ull}},
+{{2836841698298993121ull, 2171342826792948248ull,
+ 14355279813365723921ull, 946441748933419768ull}},
+{{7946065969143619271ull, 15191663824326230942ull,
+ 13939102406898875753ull, 189288349786683953ull}},
+{{15892131938287238541ull, 11936583574942910268ull,
+ 9431460740088199891ull, 378576699573367907ull}},
+{{13337519802864925466ull, 5426423076176268921ull,
+ 416177406466848167ull, 757153399146735815ull}},
+{{13735550404798716063ull, 8463982244719074430ull, 83235481293369633ull,
+ 151430679829347163ull}},
+{{9024356735887880510ull, 16927964489438148861ull,
+ 166470962586739266ull, 302861359658694326ull}},
+{{18048713471775761019ull, 15409184905166746106ull,
+ 332941925173478533ull, 605722719317388652ull}},
+{{17650682869841970422ull, 12371625736623940597ull,
+ 665883850346957067ull, 1211445438634777304ull}},
+{{14598183018194125054ull, 6163673962066698442ull,
+ 14890572029037032706ull, 242289087726955460ull}},
+{{10749621962678698492ull, 12327347924133396885ull,
+ 11334399984364513796ull, 484578175453910921ull}},
+{{3052499851647845368ull, 6207951774557242155ull,
+ 4222055895019475977ull, 969156350907821843ull}},
+{{610499970329569074ull, 1241590354911448431ull,
+ 11912457623229626165ull, 193831270181564368ull}},
+{{1220999940659138148ull, 2483180709822896862ull,
+ 5378171172749700714ull, 387662540363128737ull}},
+{{2441999881318276295ull, 4966361419645793724ull,
+ 10756342345499401428ull, 775325080726257474ull}},
+{{4177748791005565583ull, 8371969913412979391ull,
+ 16908663728067521578ull, 155065016145251494ull}},
+{{8355497582011131165ull, 16743939826825958782ull,
+ 15370583382425491540ull, 310130032290502989ull}},
+{{16710995164022262329ull, 15041135579942365948ull,
+ 12294422691141431465ull, 620260064581005979ull}},
+{{14975246254334973041ull, 11635527086175180281ull,
+ 6142101308573311315ull, 1240520129162011959ull}},
+{{2995049250866994609ull, 17084500676202677349ull,
+ 15985815520682303555ull, 248104025832402391ull}},
+{{5990098501733989217ull, 15722257278695803082ull,
+ 13524886967655055495ull, 496208051664804783ull}},
+{{11980197003467978433ull, 12997770483682054548ull,
+ 8603029861600559375ull, 992416103329609567ull}},
+{{2396039400693595687ull, 9978251726220231556ull,
+ 9099303601803932521ull, 198483220665921913ull}},
+{{4792078801387191373ull, 1509759378730911496ull,
+ 18198607203607865043ull, 396966441331843826ull}},
+{{9584157602774382746ull, 3019518757461822992ull,
+ 17950470333506178470ull, 793932882663687653ull}},
+{{1916831520554876550ull, 11671950195718095568ull,
+ 14658140510926966663ull, 158786576532737530ull}},
+{{3833663041109753099ull, 4897156317726639520ull,
+ 10869536948144381711ull, 317573153065475061ull}},
+{{7667326082219506197ull, 9794312635453279040ull,
+ 3292329822579211806ull, 635146306130950123ull}},
+{{15334652164439012394ull, 1141881197197006464ull,
+ 6584659645158423613ull, 1270292612261900246ull}},
+{{14134976877113533449ull, 14985771498407042585ull,
+ 5006280743773595045ull, 254058522452380049ull}},
+{{9823209680517515281ull, 11524798923104533555ull,
+ 10012561487547190091ull, 508117044904760098ull}},
+{{1199675287325478946ull, 4602853772499515495ull,
+ 1578378901384828567ull, 1016234089809520197ull}},
+{{14997330316432737082ull, 15677966013467544391ull,
+ 7694373409760786359ull, 203246817961904039ull}},
+{{11547916559155922548ull, 12909187953225537167ull,
+ 15388746819521572719ull, 406493635923808078ull}},
+{{4649089044602293480ull, 7371631832741522719ull,
+ 12330749565333593823ull, 812987271847616157ull}},
+{{15687213067888099989ull, 1474326366548304543ull,
+ 9844847542550539411ull, 162597454369523231ull}},
+{{12927682062066648362ull, 2948652733096609087ull,
+ 1242951011391527206ull, 325194908739046463ull}},
+{{7408620050423745107ull, 5897305466193218175ull,
+ 2485902022783054412ull, 650389817478092926ull}},
+{{12549770454310479991ull, 12247507537464374604ull,
+ 4186529219298521205ull, 130077963495618585ull}},
+{{6652796834911408366ull, 6048271001219197593ull,
+ 8373058438597042411ull, 260155926991237170ull}},
+{{13305593669822816732ull, 12096542002438395186ull,
+ 16746116877194084822ull, 520311853982474340ull}},
+{{8164443265936081848ull, 5746339931167238757ull,
+ 15045489680678618029ull, 1040623707964948681ull}},
+{{9011586282671037016ull, 1149267986233447751ull,
+ 6698446750877633929ull, 208124741592989736ull}},
+{{18023172565342074032ull, 2298535972466895502ull,
+ 13396893501755267858ull, 416249483185979472ull}},
+{{17599601056974596448ull, 4597071944933791005ull,
+ 8347042929800984100ull, 832498966371958945ull}},
+{{3519920211394919290ull, 919414388986758201ull, 1669408585960196820ull,
+ 166499793274391789ull}},
+{{7039840422789838580ull, 1838828777973516402ull,
+ 3338817171920393640ull, 332999586548783578ull}},
+{{14079680845579677159ull, 3677657555947032804ull,
+ 6677634343840787280ull, 665999173097567156ull}},
+{{2815936169115935432ull, 4424880325931316884ull,
+ 5024875683510067779ull, 133199834619513431ull}},
+{{5631872338231870864ull, 8849760651862633768ull,
+ 10049751367020135558ull, 266399669239026862ull}},
+{{11263744676463741727ull, 17699521303725267536ull,
+ 1652758660330719500ull, 532799338478053725ull}},
+{{4080745279217931837ull, 16952298533740983457ull,
+ 3305517320661439001ull, 1065598676956107450ull}},
+{{11884195500069317337ull, 7079808521490107014ull,
+ 661103464132287800ull, 213119735391221490ull}},
+{{5321646926429083058ull, 14159617042980214029ull,
+ 1322206928264575600ull, 426239470782442980ull}},
+{{10643293852858166116ull, 9872490012250876442ull,
+ 2644413856529151201ull, 852478941564885960ull}},
+{{13196705214797364193ull, 5663846817192085611ull,
+ 528882771305830240ull, 170495788312977192ull}},
+{{7946666355885176770ull, 11327693634384171223ull,
+ 1057765542611660480ull, 340991576625954384ull}},
+{{15893332711770353540ull, 4208643195058790830ull,
+ 2115531085223320961ull, 681983153251908768ull}},
+{{17936061801321712001ull, 15599123897979399458ull,
+ 11491152661270395161ull, 136396630650381753ull}},
+{{17425379528933872386ull, 12751503722249247301ull,
+ 4535561248831238707ull, 272793261300763507ull}},
+{{16404014984158193155ull, 7056263370788942987ull,
+ 9071122497662477415ull, 545586522601527014ull}},
+{{14361285894606834694ull, 14112526741577885975ull,
+ 18142244995324954830ull, 1091173045203054028ull}},
+{{13940303623147097909ull, 13890551792541308164ull,
+ 14696495443290721935ull, 218234609040610805ull}},
+{{9433863172584644201ull, 9334359511373064713ull,
+ 10946246812871892255ull, 436469218081221611ull}},
+{{420982271459736785ull, 221974949036577811ull, 3445749552034232895ull,
+ 872938436162443223ull}},
+{{14841591713259588650ull, 11112441434033046531ull,
+ 11757196354632577548ull, 174587687232488644ull}},
+{{11236439352809625684ull, 3778138794356541447ull,
+ 5067648635555603481ull, 349175374464977289ull}},
+{{4026134631909699752ull, 7556277588713082895ull,
+ 10135297271111206962ull, 698350748929954578ull}},
+{{805226926381939951ull, 1511255517742616579ull,
+ 13095105898447972362ull, 139670149785990915ull}},
+{{1610453852763879901ull, 3022511035485233158ull,
+ 7743467723186393108ull, 279340299571981831ull}},
+{{3220907705527759801ull, 6045022070970466316ull,
+ 15486935446372786216ull, 558680599143963662ull}},
+{{6441815411055519602ull, 12090044141940932632ull,
+ 12527126819036020816ull, 1117361198287927325ull}},
+{{12356409526436834890ull, 6107357643130096849ull,
+ 2505425363807204163ull, 223472239657585465ull}},
+{{6266074979164118164ull, 12214715286260193699ull,
+ 5010850727614408326ull, 446944479315170930ull}},
+{{12532149958328236328ull, 5982686498810835782ull,
+ 10021701455228816653ull, 893888958630341860ull}},
+{{2506429991665647266ull, 12264583743987898126ull,
+ 2004340291045763330ull, 178777791726068372ull}},
+{{5012859983331294532ull, 6082423414266244636ull,
+ 4008680582091526661ull, 357555583452136744ull}},
+{{10025719966662589063ull, 12164846828532489272ull,
+ 8017361164183053322ull, 715111166904273488ull}},
+{{9383841622816338459ull, 2432969365706497854ull,
+ 12671518677062341634ull, 143022233380854697ull}},
+{{320939171923125302ull, 4865938731412995709ull, 6896293280415131652ull,
+ 286044466761709395ull}},
+{{641878343846250604ull, 9731877462825991418ull,
+ 13792586560830263304ull, 572088933523418790ull}},
+{{1283756687692501207ull, 1017010851942431220ull,
+ 9138429047950974993ull, 1144177867046837581ull}},
+{{15014146596506141535ull, 14960797429356127536ull,
+ 5517034624332105321ull, 228835573409367516ull}},
+{{11581549119302731453ull, 11474850785002703457ull,
+ 11034069248664210643ull, 457671146818735032ull}},
+{{4716354164895911289ull, 4502957496295855299ull,
+ 3621394423618869671ull, 915342293637470065ull}},
+{{943270832979182258ull, 4589940314001081383ull, 724278884723773934ull,
+ 183068458727494013ull}},
+{{1886541665958364516ull, 9179880628002162766ull,
+ 1448557769447547868ull, 366136917454988026ull}},
+{{3773083331916729031ull, 18359761256004325532ull,
+ 2897115538895095736ull, 732273834909976052ull}},
+{{754616666383345807ull, 14739998695426596076ull,
+ 7958120737262839793ull, 146454766981995210ull}},
+{{1509233332766691613ull, 11033253317143640536ull,
+ 15916241474525679587ull, 292909533963990420ull}},
+{{3018466665533383225ull, 3619762560577729456ull,
+ 13385738875341807559ull, 585819067927980841ull}},
+{{6036933331066766450ull, 7239525121155458912ull,
+ 8324733676974063502ull, 1171638135855961683ull}},
+{{8586084295697173937ull, 1447905024231091782ull,
+ 12732993179620543670ull, 234327627171192336ull}},
+{{17172168591394347873ull, 2895810048462183564ull,
+ 7019242285531535724ull, 468655254342384673ull}},
+{{15897593109079144130ull, 5791620096924367129ull,
+ 14038484571063071448ull, 937310508684769346ull}},
+{{14247565066041559796ull, 15915719278352514718ull,
+ 6497045728954524612ull, 187462101736953869ull}},
+{{10048386058373567975ull, 13384694482995477821ull,
+ 12994091457909049225ull, 374924203473907738ull}},
+{{1650028043037584334ull, 8322644892281404027ull,
+ 7541438842108546835ull, 749848406947815477ull}},
+{{15087400867575158160ull, 9043226607940101451ull,
+ 8886985397905530013ull, 149969681389563095ull}},
+{{11728057661440764704ull, 18086453215880202903ull,
+ 17773970795811060026ull, 299939362779126190ull}},
+{{5009371249171977791ull, 17726162358050854191ull,
+ 17101197517912568437ull, 599878725558252381ull}},
+{{10018742498343955581ull, 17005580642392156766ull,
+ 15755650962115585259ull, 1199757451116504763ull}},
+{{13071794943894522086ull, 10779813757962251999ull,
+ 14219176636648848021ull, 239951490223300952ull}},
+{{7696845814079492556ull, 3112883442214952383ull,
+ 9991609199588144427ull, 479902980446601905ull}},
+{{15393691628158985111ull, 6225766884429904766ull,
+ 1536474325466737238ull, 959805960893203811ull}},
+{{3078738325631797023ull, 16002548635853622246ull,
+ 3996643679835257770ull, 191961192178640762ull}},
+{{6157476651263594045ull, 13558353197997692876ull,
+ 7993287359670515541ull, 383922384357281524ull}},
+{{12314953302527188089ull, 8669962322285834136ull,
+ 15986574719341031083ull, 767844768714563048ull}},
+{{9841688289989258265ull, 5423341279199077150ull,
+ 14265361388093937186ull, 153568953742912609ull}},
+{{1236632506268964913ull, 10846682558398154301ull,
+ 10083978702478322756ull, 307137907485825219ull}},
+{{2473265012537929825ull, 3246621043086756986ull,
+ 1721213331247093897ull, 614275814971650439ull}},
+{{4946530025075859649ull, 6493242086173513972ull,
+ 3442426662494187794ull, 1228551629943300878ull}},
+{{15746701263982813223ull, 8677346046718523440ull,
+ 11756531776724568528ull, 245710325988660175ull}},
+{{13046658454256074830ull, 17354692093437046881ull,
+ 5066319479739585440ull, 491420651977320351ull}},
+{{7646572834802598043ull, 16262640113164542147ull,
+ 10132638959479170881ull, 982841303954640702ull}},
+{{1529314566960519609ull, 14320574466858639399ull,
+ 9405225421379654822ull, 196568260790928140ull}},
+{{3058629133921039217ull, 10194404860007727182ull,
+ 363706769049758029ull, 393136521581856281ull}},
+{{6117258267842078434ull, 1942065646305902748ull, 727413538099516059ull,
+ 786273043163712562ull}},
+{{15980846912536056980ull, 4077761944003090872ull,
+ 7524180337103723858ull, 157254608632742512ull}},
+{{13514949751362562344ull, 8155523888006181745ull,
+ 15048360674207447716ull, 314509217265485024ull}},
+{{8583155429015573071ull, 16311047776012363491ull,
+ 11649977274705343816ull, 629018434530970049ull}},
+{{17166310858031146141ull, 14175351478315175366ull,
+ 4853210475701136017ull, 1258036869061940099ull}},
+{{10811959801090049875ull, 6524419110404945396ull,
+ 15728037354107868496ull, 251607373812388019ull}},
+{{3177175528470548134ull, 13048838220809890793ull,
+ 13009330634506185376ull, 503214747624776039ull}},
+{{6354351056941096267ull, 7650932367910229970ull,
+ 7571917195302819137ull, 1006429495249552079ull}},
+{{4960219026130129577ull, 5219535288323956317ull,
+ 16271778698028205120ull, 201285899049910415ull}},
+{{9920438052260259153ull, 10439070576647912634ull,
+ 14096813322346858624ull, 402571798099820831ull}},
+{{1394132030810966690ull, 2431397079586273653ull,
+ 9746882570984165633ull, 805143596199641663ull}},
+{{15036221665129834631ull, 4175628230659165053ull,
+ 13017422958422564096ull, 161028719239928332ull}},
+{{11625699256550117646ull, 8351256461318330107ull,
+ 7588101843135576576ull, 322057438479856665ull}},
+{{4804654439390683675ull, 16702512922636660215ull,
+ 15176203686271153152ull, 644114876959713330ull}},
+{{8339628517361957382ull, 10719200214011152689ull,
+ 3035240737254230630ull, 128822975391942666ull}},
+{{16679257034723914763ull, 2991656354312753762ull,
+ 6070481474508461261ull, 257645950783885332ull}},
+{{14911769995738277910ull, 5983312708625507525ull,
+ 12140962949016922522ull, 515291901567770664ull}},
+{{11376795917767004204ull, 11966625417251015051ull,
+ 5835181824324293428ull, 1030583803135541329ull}},
+{{13343405627779131811ull, 9772022712934023656ull,
+ 15924431623832499978ull, 206116760627108265ull}},
+{{8240067181848712005ull, 1097301352158495697ull,
+ 13402119173955448341ull, 412233521254216531ull}},
+{{16480134363697424009ull, 2194602704316991394ull,
+ 8357494274201345066ull, 824467042508433063ull}},
+{{14364073316965215772ull, 15196315799831039571ull,
+ 12739545299065999982ull, 164893408501686612ull}},
+{{10281402560220879927ull, 11945887525952527527ull,
+ 7032346524422448349ull, 329786817003373225ull}},
+{{2116061046732208238ull, 5445030978195503439ull,
+ 14064693048844896699ull, 659573634006746450ull}},
+{{11491258653572172618ull, 15846401454606741980ull,
+ 2812938609768979339ull, 131914726801349290ull}},
+{{4535773233434793619ull, 13246058835503932345ull,
+ 5625877219537958679ull, 263829453602698580ull}},
+{{9071546466869587237ull, 8045373597298313074ull,
+ 11251754439075917359ull, 527658907205397160ull}},
+{{18143092933739174473ull, 16090747194596626148ull,
+ 4056764804442283102ull, 1055317814410794321ull}},
+{{7317967401489745218ull, 14286195883145056199ull,
+ 4500701775630366943ull, 211063562882158864ull}},
+{{14635934802979490436ull, 10125647692580560782ull,
+ 9001403551260733887ull, 422127125764317728ull}},
+{{10825125532249429255ull, 1804551311451569949ull,
+ 18002807102521467775ull, 844254251528635456ull}},
+{{2165025106449885851ull, 4050259077032224313ull,
+ 7289910235246203878ull, 168850850305727091ull}},
+{{4330050212899771702ull, 8100518154064448626ull,
+ 14579820470492407756ull, 337701700611454182ull}},
+{{8660100425799543404ull, 16201036308128897252ull,
+ 10712896867275263896ull, 675403401222908365ull}},
+{{12800066529385639651ull, 6929556076367689773ull,
+ 2142579373455052779ull, 135080680244581673ull}},
+{{7153388985061727685ull, 13859112152735379547ull,
+ 4285158746910105558ull, 270161360489163346ull}},
+{{14306777970123455370ull, 9271480231761207478ull,
+ 8570317493820211117ull, 540322720978326692ull}},
+{{10166811866537359124ull, 96216389812863341ull,
+ 17140634987640422235ull, 1080645441956653384ull}},
+{{2033362373307471825ull, 14776638536930213961ull,
+ 18185522256495725739ull, 216129088391330676ull}},
+{{4066724746614943650ull, 11106533000150876306ull,
+ 17924300439281899863ull, 432258176782661353ull}},
+{{8133449493229887299ull, 3766321926592200996ull,
+ 17401856804854248111ull, 864516353565322707ull}},
+{{16384085157613618753ull, 11821310829544171168ull,
+ 10859068990454670268ull, 172903270713064541ull}},
+{{14321426241517685890ull, 5195877585378790721ull,
+ 3271393907199788921ull, 345806541426129083ull}},
+{{10196108409325820163ull, 10391755170757581443ull,
+ 6542787814399577842ull, 691613082852258166ull}},
+{{5728570496607074356ull, 13146397478377247258ull,
+ 4997906377621825891ull, 138322616570451633ull}},
+{{11457140993214148712ull, 7846050883044942900ull,
+ 9995812755243651783ull, 276645233140903266ull}},
+{{4467537912718745807ull, 15692101766089885801ull,
+ 1544881436777751950ull, 553290466281806533ull}},
+{{8935075825437491613ull, 12937459458470219986ull,
+ 3089762873555503901ull, 1106580932563613066ull}},
+{{12855061609313229293ull, 9966189521177864643ull,
+ 4307301389453011103ull, 221316186512722613ull}},
+{{7263379144916906969ull, 1485634968646177671ull,
+ 8614602778906022207ull, 442632373025445226ull}},
+{{14526758289833813937ull, 2971269937292355342ull,
+ 17229205557812044414ull, 885264746050890452ull}},
+{{13973398102192493757ull, 4283602802200381391ull,
+ 10824538741046229529ull, 177052949210178090ull}},
+{{9500052130675435898ull, 8567205604400762783ull,
+ 3202333408382907442ull, 354105898420356181ull}},
+{{553360187641320180ull, 17134411208801525567ull,
+ 6404666816765814884ull, 708211796840712362ull}},
+{{11178718481753995006ull, 7116231056502215436ull,
+ 8659630992836983623ull, 141642359368142472ull}},
+{{3910692889798438396ull, 14232462113004430873ull,
+ 17319261985673967246ull, 283284718736284944ull}},
+{{7821385779596876791ull, 10018180152299310130ull,
+ 16191779897638382877ull, 566569437472569889ull}},
+{{15642771559193753581ull, 1589616230889068644ull,
+ 13936815721567214139ull, 1133138874945139779ull}},
+{{10507251941322571363ull, 11385969690403544698ull,
+ 17544758403281084120ull, 226627774989027955ull}},
+{{2567759808935591109ull, 4325195307097537781ull,
+ 16642772732852616625ull, 453255549978055911ull}},
+{{5135519617871182218ull, 8650390614195075562ull,
+ 14838801391995681634ull, 906511099956111823ull}},
+{{15784499182541877737ull, 9108775752322835758ull,
+ 14035806722624867296ull, 181302219991222364ull}},
+{{13122254291374203857ull, 18217551504645671517ull,
+ 9624869371540182976ull, 362604439982444729ull}},
+{{7797764509038856098ull, 17988358935581791419ull,
+ 802994669370814337ull, 725208879964889459ull}},
+{{1559552901807771220ull, 7287020601858268607ull,
+ 14917994192841804160ull, 145041775992977891ull}},
+{{3119105803615542440ull, 14574041203716537214ull,
+ 11389244311974056704ull, 290083551985955783ull}},
+{{6238211607231084879ull, 10701338333723522812ull,
+ 4331744550238561793ull, 580167103971911567ull}},
+{{12476423214462169757ull, 2955932593737494008ull,
+ 8663489100477123587ull, 1160334207943823134ull}},
+{{17252679901860075245ull, 4280535333489409124ull,
+ 16490093079063066010ull, 232066841588764626ull}},
+{{16058615730010598873ull, 8561070666978818249ull,
+ 14533442084416580404ull, 464133683177529253ull}},
+{{13670487386311646129ull, 17122141333957636499ull,
+ 10620140095123609192ull, 928267366355058507ull}},
+{{13802143921488060196ull, 18181823525759168592ull,
+ 9502725648508542484ull, 185653473271011701ull}},
+{{9157543769266568775ull, 17916902977808785569ull,
+ 558707223307533353ull, 371306946542023403ull}},
+{{18315087538533137549ull, 17387061881908019522ull,
+ 1117414446615066707ull, 742613893084046806ull}},
+{{3663017507706627510ull, 14545458820607334874ull,
+ 3912831704064923664ull, 148522778616809361ull}},
+{{7326035015413255020ull, 10644173567505118132ull,
+ 7825663408129847329ull, 297045557233618722ull}},
+{{14652070030826510040ull, 2841603061300684648ull,
+ 15651326816259694659ull, 594091114467237444ull}},
+{{10857395987943468463ull, 5683206122601369297ull,
+ 12855909558809837702ull, 1188182228934474889ull}},
+{{13239525641814424663ull, 4825990039262184182ull,
+ 17328577170729608833ull, 237636445786894977ull}},
+{{8032307209919297709ull, 9651980078524368365ull,
+ 16210410267749666050ull, 475272891573789955ull}},
+{{16064614419838595417ull, 857216083339185114ull,
+ 13974076461789780485ull, 950545783147579911ull}},
+{{3212922883967719084ull, 3860792031409747346ull,
+ 6484164107099866420ull, 190109156629515982ull}},
+{{6425845767935438167ull, 7721584062819494692ull,
+ 12968328214199732840ull, 380218313259031964ull}},
+{{12851691535870876333ull, 15443168125638989384ull,
+ 7489912354689914064ull, 760436626518063929ull}},
+{{9949035936657995913ull, 14156680069353528846ull,
+ 16255377729905624105ull, 152087325303612785ull}},
+{{1451327799606440210ull, 9866616064997506077ull,
+ 14064011386101696595ull, 304174650607225571ull}},
+{{2902655599212880420ull, 1286488056285460538ull,
+ 9681278698493841575ull, 608349301214451143ull}},
+{{5805311198425760840ull, 2572976112570921076ull, 915813323278131534ull,
+ 1216698602428902287ull}},
+{{8539759869168972815ull, 4203944037256094538ull,
+ 7561860294139446953ull, 243339720485780457ull}},
+{{17079519738337945629ull, 8407888074512189076ull,
+ 15123720588278893906ull, 486679440971560914ull}},
+{{15712295402966339642ull, 16815776149024378153ull,
+ 11800697102848236196ull, 973358881943121829ull}},
+{{14210505524818998898ull, 3363155229804875630ull,
+ 17117534679537288532ull, 194671776388624365ull}},
+{{9974266975928446180ull, 6726310459609751261ull,
+ 15788325285365025448ull, 389343552777248731ull}},
+{{1501789878147340744ull, 13452620919219502523ull,
+ 13129906497020499280ull, 778687105554497463ull}},
+{{3989706790371378472ull, 13758570628069631474ull,
+ 13694027743629830825ull, 155737421110899492ull}},
+{{7979413580742756944ull, 9070397182429711332ull,
+ 8941311413550110035ull, 311474842221798985ull}},
+{{15958827161485513888ull, 18140794364859422664ull,
+ 17882622827100220070ull, 622949684443597970ull}},
+{{13470910249261476160ull, 17834844656009293713ull,
+ 17318501580490888525ull, 1245899368887195941ull}},
+{{17451577308819936525ull, 7256317745943769065ull,
+ 7153049130840088028ull, 249179873777439188ull}},
+{{16456410543930321434ull, 14512635491887538131ull,
+ 14306098261680176056ull, 498359747554878376ull}},
+{{14466077014151091251ull, 10578526910065524647ull,
+ 10165452449650800497ull, 996719495109756753ull}},
+{{10271913032314038897ull, 2115705382013104929ull,
+ 13101136934155891069ull, 199343899021951350ull}},
+{{2097081990918526178ull, 4231410764026209859ull,
+ 7755529794602230522ull, 398687798043902701ull}},
+{{4194163981837052355ull, 8462821528052419718ull,
+ 15511059589204461044ull, 797375596087805402ull}},
+{{15596228055335051764ull, 5381913120352394266ull,
+ 10480909547324712855ull, 159475119217561080ull}},
+{{12745712036960551912ull, 10763826240704788533ull,
+ 2515075020939874094ull, 318950238435122161ull}},
+{{7044680000211552207ull, 3080908407700025451ull,
+ 5030150041879748189ull, 637900476870244322ull}},
+{{14089360000423104413ull, 6161816815400050902ull,
+ 10060300083759496378ull, 1275800953740488644ull}},
+{{17575267259052262176ull, 8611060992563830826ull,
+ 16769455275719540568ull, 255160190748097728ull}},
+{{16703790444394972735ull, 17222121985127661653ull,
+ 15092166477729529520ull, 510320381496195457ull}},
+{{14960836815080393854ull, 15997499896545771691ull,
+ 11737588881749507425ull, 1020640762992390915ull}},
+{{6681516177757989094ull, 3199499979309154338ull,
+ 2347517776349901485ull, 204128152598478183ull}},
+{{13363032355515978188ull, 6398999958618308676ull,
+ 4695035552699802970ull, 408256305196956366ull}},
+{{8279320637322404760ull, 12797999917236617353ull,
+ 9390071105399605940ull, 816512610393912732ull}},
+{{1655864127464480952ull, 9938297612931144117ull,
+ 9256711850563741834ull, 163302522078782546ull}},
+{{3311728254928961904ull, 1429851152152736618ull, 66679627417932053ull,
+ 326605044157565093ull}},
+{{6623456509857923808ull, 2859702304305473236ull, 133359254835864106ull,
+ 653210088315130186ull}},
+{{12392737746197315732ull, 7950638090344915293ull,
+ 3716020665709083144ull, 130642017663026037ull}},
+{{6338731418685079847ull, 15901276180689830587ull,
+ 7432041331418166288ull, 261284035326052074ull}},
+{{12677462837370159693ull, 13355808287670109558ull,
+ 14864082662836332577ull, 522568070652104148ull}},
+{{6908181601030767770ull, 8264872501630667501ull,
+ 11281421251963113539ull, 1045136141304208297ull}},
+{{8760333949689974201ull, 5342323315068043823ull,
+ 9634981879876443354ull, 209027228260841659ull}},
+{{17520667899379948401ull, 10684646630136087646ull,
+ 823219686043335092ull, 418054456521683319ull}},
+{{16594591725050345185ull, 2922549186562623677ull,
+ 1646439372086670185ull, 836108913043366638ull}},
+{{3318918345010069037ull, 11652556281538255705ull,
+ 11397334318643065006ull, 167221782608673327ull}},
+{{6637836690020138074ull, 4858368489366959794ull,
+ 4347924563576578397ull, 334443565217346655ull}},
+{{13275673380040276148ull, 9716736978733919588ull,
+ 8695849127153156794ull, 668887130434693310ull}},
+{{10033832305491875876ull, 16700742654714425210ull,
+ 1739169825430631358ull, 133777426086938662ull}},
+{{1620920537274200136ull, 14954741235719298805ull,
+ 3478339650861262717ull, 267554852173877324ull}},
+{{3241841074548400272ull, 11462738397729045994ull,
+ 6956679301722525435ull, 535109704347754648ull}},
+{{6483682149096800544ull, 4478732721748540372ull,
+ 13913358603445050871ull, 1070219408695509296ull}},
+{{16054131688787001402ull, 8274444173833528720ull,
+ 6472020535430920497ull, 214043881739101859ull}},
+{{13661519303864451188ull, 16548888347667057441ull,
+ 12944041070861840994ull, 428087763478203718ull}},
+{{8876294534019350759ull, 14651032621624563267ull,
+ 7441338068014130373ull, 856175526956407437ull}},
+{{9153956536287690799ull, 2930206524324912653ull,
+ 8866965243086646721ull, 171235105391281487ull}},
+{{18307913072575381597ull, 5860413048649825306ull,
+ 17733930486173293442ull, 342470210782562974ull}},
+{{18169082071441211577ull, 11720826097299650613ull,
+ 17021116898637035268ull, 684940421565125949ull}},
+{{3633816414288242316ull, 9722862848943750769ull,
+ 18161618638695048346ull, 136988084313025189ull}},
+{{7267632828576484631ull, 998981624177949922ull,
+ 17876493203680545077ull, 273976168626050379ull}},
+{{14535265657152969262ull, 1997963248355899844ull,
+ 17306242333651538538ull, 547952337252100759ull}},
+{{10623787240596386907ull, 3995926496711799689ull,
+ 16165740593593525460ull, 1095904674504201519ull}},
+{{13192803892345008351ull, 15556580558310001230ull,
+ 17990543377686346384ull, 219180934900840303ull}},
+{{7938863710980465086ull, 12666417042910450845ull,
+ 17534342681663141153ull, 438361869801680607ull}},
+{{15877727421960930172ull, 6886090012111350074ull,
+ 16621941289616730691ull, 876723739603361215ull}},
+{{3175545484392186035ull, 5066566817164180338ull,
+ 3324388257923346138ull, 175344747920672243ull}},
+{{6351090968784372069ull, 10133133634328360676ull,
+ 6648776515846692276ull, 350689495841344486ull}},
+{{12702181937568744137ull, 1819523194947169736ull,
+ 13297553031693384553ull, 701378991682688972ull}},
+{{6229785202255659151ull, 363904638989433947ull,
+ 10038208235822497557ull, 140275798336537794ull}},
+{{12459570404511318302ull, 727809277978867894ull,
+ 1629672397935443498ull, 280551596673075589ull}},
+{{6472396735313084987ull, 1455618555957735789ull,
+ 3259344795870886996ull, 561103193346151178ull}},
+{{12944793470626169973ull, 2911237111915471578ull,
+ 6518689591741773992ull, 1122206386692302356ull}},
+{{6278307508867144318ull, 11650293866608825285ull,
+ 4993086733090265121ull, 224441277338460471ull}},
+{{12556615017734288636ull, 4853843659508098954ull,
+ 9986173466180530243ull, 448882554676920942ull}},
+{{6666485961759025656ull, 9707687319016197909ull,
+ 1525602858651508870ull, 897765109353841885ull}},
+{{16090692451319446424ull, 1941537463803239581ull,
+ 305120571730301774ull, 179553021870768377ull}},
+{{13734640828929341232ull, 3883074927606479163ull,
+ 610241143460603548ull, 359106043741536754ull}},
+{{9022537584149130848ull, 7766149855212958327ull,
+ 1220482286921207096ull, 718212087483073508ull}},
+{{5493856331571736493ull, 16310625230010232958ull,
+ 11312142901609972388ull, 143642417496614701ull}},
+{{10987712663143472986ull, 14174506386310914300ull,
+ 4177541729510393161ull, 287284834993229403ull}},
+{{3528681252577394355ull, 9902268698912276985ull,
+ 8355083459020786323ull, 574569669986458806ull}},
+{{7057362505154788710ull, 1357793324115002354ull,
+ 16710166918041572647ull, 1149139339972917612ull}},
+{{12479518945256688712ull, 15028953923790641763ull,
+ 10720731013092135175ull, 229827867994583522ull}},
+{{6512293816803825807ull, 11611163773871731911ull,
+ 2994717952474718735ull, 459655735989167045ull}},
+{{13024587633607651614ull, 4775583474033912206ull,
+ 5989435904949437471ull, 919311471978334090ull}},
+{{9983615156205350970ull, 4644465509548692764ull,
+ 1197887180989887494ull, 183862294395666818ull}},
+{{1520486238701150323ull, 9288931019097385529ull,
+ 2395774361979774988ull, 367724588791333636ull}},
+{{3040972477402300645ull, 131117964485219442ull, 4791548723959549977ull,
+ 735449177582667272ull}},
+{{4297543310222370453ull, 14783618851864685181ull,
+ 8337007374275730641ull, 147089835516533454ull}},
+{{8595086620444740905ull, 11120493630019818746ull,
+ 16674014748551461283ull, 294179671033066908ull}},
+{{17190173240889481809ull, 3794243186330085876ull,
+ 14901285423393370951ull, 588359342066133817ull}},
+{{15933602408069412001ull, 7588486372660171753ull,
+ 11355826773077190286ull, 1176718684132267635ull}},
+{{17944115740581523693ull, 5207046089273944673ull,
+ 2271165354615438057ull, 235343736826453527ull}},
+{{17441487407453495770ull, 10414092178547889347ull,
+ 4542330709230876114ull, 470687473652907054ull}},
+{{16436230741197439924ull, 2381440283386227079ull,
+ 9084661418461752229ull, 941374947305814108ull}},
+{{6976594962981398308ull, 7854985686161066062ull,
+ 12884978727918081415ull, 188274989461162821ull}},
+{{13953189925962796616ull, 15709971372322132124ull,
+ 7323213382126611214ull, 376549978922325643ull}},
+{{9459635778216041616ull, 12973198670934712633ull,
+ 14646426764253222429ull, 753099957844651286ull}},
+{{12959973599868939293ull, 2594639734186942526ull,
+ 6618634167592554809ull, 150619991568930257ull}},
+{{7473203126028326970ull, 5189279468373885053ull,
+ 13237268335185109618ull, 301239983137860514ull}},
+{{14946406252056653940ull, 10378558936747770106ull,
+ 8027792596660667620ull, 602479966275721029ull}},
+{{11446068430403756263ull, 2310373799785988597ull,
+ 16055585193321335241ull, 1204959932551442058ull}},
+{{5978562500822661576ull, 15219470018924839012ull,
+ 14279163482889998017ull, 240991986510288411ull}},
+{{11957125001645323152ull, 11992195964140126408ull,
+ 10111582892070444419ull, 481983973020576823ull}},
+{{5467505929581094687ull, 5537647854570701201ull,
+ 1776421710431337223ull, 963967946041153647ull}},
+{{4782850000658129261ull, 1107529570914140240ull,
+ 7733981971570088091ull, 192793589208230729ull}},
+{{9565700001316258522ull, 2215059141828280480ull,
+ 15467963943140176182ull, 385587178416461458ull}},
+{{684655928922965427ull, 4430118283656560961ull,
+ 12489183812570800748ull, 771174356832922917ull}},
+{{3826280000526503409ull, 886023656731312192ull, 9876534391997980796ull,
+ 154234871366584583ull}},
+{{7652560001053006817ull, 1772047313462624384ull,
+ 1306324710286409976ull, 308469742733169167ull}},
+{{15305120002106013634ull, 3544094626925248768ull,
+ 2612649420572819952ull, 616939485466338334ull}},
+{{12163495930502475652ull, 7088189253850497537ull,
+ 5225298841145639904ull, 1233878970932676668ull}},
+{{17190094445068136424ull, 8796335480253920153ull,
+ 12113106212454858950ull, 246775794186535333ull}},
+{{15933444816426721231ull, 17592670960507840307ull,
+ 5779468351200166284ull, 493551588373070667ull}},
+{{13420145559143890845ull, 16738597847306128999ull,
+ 11558936702400332569ull, 987103176746141334ull}},
+{{10062726741312598816ull, 14415766013686956769ull,
+ 17069182599447707806ull, 197420635349228266ull}},
+{{1678709408915646015ull, 10384787953664361923ull,
+ 15691621125185863997ull, 394841270698456533ull}},
+{{3357418817831292030ull, 2322831833619172230ull,
+ 12936498176662176379ull, 789682541396913067ull}},
+{{4360832578308168730ull, 4153915181465744769ull,
+ 9965997264816255922ull, 157936508279382613ull}},
+{{8721665156616337459ull, 8307830362931489538ull,
+ 1485250455922960228ull, 315873016558765227ull}},
+{{17443330313232674917ull, 16615660725862979076ull,
+ 2970500911845920456ull, 631746033117530454ull}},
+{{16439916552755798217ull, 14784577378016406537ull,
+ 5941001823691840913ull, 1263492066235060908ull}},
+{{14356029754776890613ull, 6646264290345191630ull,
+ 12256246808964099152ull, 252698413247012181ull}},
+{{10265315435844229610ull, 13292528580690383261ull,
+ 6065749544218646688ull, 505396826494024363ull}},
+{{2083886797978907604ull, 8138313087671214907ull,
+ 12131499088437293377ull, 1010793652988048726ull}},
+{{416777359595781521ull, 12695709061759973951ull,
+ 6115648632429368998ull, 202158730597609745ull}},
+{{833554719191563042ull, 6944674049810396286ull,
+ 12231297264858737997ull, 404317461195219490ull}},
+{{1667109438383126083ull, 13889348099620792572ull,
+ 6015850456007924378ull, 808634922390438981ull}},
+{{4022770702418535540ull, 17535264878891799807ull,
+ 4892518905943495198ull, 161726984478087796ull}},
+{{8045541404837071080ull, 16623785684074047998ull,
+ 9785037811886990397ull, 323453968956175592ull}},
+{{16091082809674142159ull, 14800827294438544380ull,
+ 1123331550064429179ull, 646907937912351185ull}},
+{{17975611820902469725ull, 17717560717855350168ull,
+ 224666310012885835ull, 129381587582470237ull}},
+{{17504479568095387834ull, 16988377362001148721ull,
+ 449332620025771671ull, 258763175164940474ull}},
+{{16562215062481224051ull, 15530010650292745827ull,
+ 898665240051543343ull, 517526350329880948ull}},
+{{14677686051252896485ull, 12613277226875940039ull,
+ 1797330480103086687ull, 1035052700659761896ull}},
+{{10314234839734399944ull, 13590701889600918977ull,
+ 4048814910762527660ull, 207010540131952379ull}},
+{{2181725605759248271ull, 8734659705492286339ull,
+ 8097629821525055321ull, 414021080263904758ull}},
+{{4363451211518496542ull, 17469319410984572678ull,
+ 16195259643050110642ull, 828042160527809516ull}},
+{{4562039057045609632ull, 14561910326422645505ull,
+ 6928400743351932451ull, 165608432105561903ull}},
+{{9124078114091219263ull, 10677076579135739394ull,
+ 13856801486703864903ull, 331216864211123806ull}},
+{{18248156228182438526ull, 2907409084561927172ull,
+ 9266858899698178191ull, 662433728422247613ull}},
+{{7338980060378398029ull, 15338877075880026727ull,
+ 12921418224165366607ull, 132486745684449522ull}},
+{{14677960120756796057ull, 12231010078050501838ull,
+ 7396092374621181599ull, 264973491368899045ull}},
+{{10909176167804040498ull, 6015276082391452061ull,
+ 14792184749242363199ull, 529946982737798090ull}},
+{{3371608261898529379ull, 12030552164782904123ull,
+ 11137625424775174782ull, 1059893965475596181ull}},
+{{4363670467121616199ull, 13474156877182311794ull,
+ 5916873899696945279ull, 211978793095119236ull}},
+{{8727340934243232398ull, 8501569680655071972ull,
+ 11833747799393890559ull, 423957586190238472ull}},
+{{17454681868486464796ull, 17003139361310143944ull,
+ 5220751525078229502ull, 847915172380476945ull}},
+{{7180285188439203283ull, 10779325501745849435ull,
+ 1044150305015645900ull, 169583034476095389ull}},
+{{14360570376878406565ull, 3111906929782147254ull,
+ 2088300610031291801ull, 339166068952190778ull}},
+{{10274396680047261514ull, 6223813859564294509ull,
+ 4176601220062583602ull, 678332137904381556ull}},
+{{9433576965493272950ull, 12312809216138589871ull,
+ 4524669058754427043ull, 135666427580876311ull}},
+{{420409857276994283ull, 6178874358567628127ull, 9049338117508854087ull,
+ 271332855161752622ull}},
+{{840819714553988565ull, 12357748717135256254ull,
+ 18098676235017708174ull, 542665710323505244ull}},
+{{1681639429107977129ull, 6268753360560960892ull,
+ 17750608396325864733ull, 1085331420647010489ull}},
+{{15093723144789236719ull, 8632448301596012824ull,
+ 18307516938232814239ull, 217066284129402097ull}},
+{{11740702215868921822ull, 17264896603192025649ull,
+ 18168289802756076862ull, 434132568258804195ull}},
+{{5034660358028292027ull, 16083049132674499683ull,
+ 17889835531802602109ull, 868265136517608391ull}},
+{{12074978515831389375ull, 3216609826534899936ull,
+ 7267315921102430745ull, 173653027303521678ull}},
+{{5703212957953227134ull, 6433219653069799873ull,
+ 14534631842204861490ull, 347306054607043356ull}},
+{{11406425915906454268ull, 12866439306139599746ull,
+ 10622519610700171364ull, 694612109214086713ull}},
+{{13349331627407021824ull, 9951985490711740595ull,
+ 13192550366365765242ull, 138922421842817342ull}},
+{{8251919181104492031ull, 1457226907713929575ull,
+ 7938356659021978869ull, 277844843685634685ull}},
+{{16503838362208984061ull, 2914453815427859150ull,
+ 15876713318043957738ull, 555689687371269370ull}},
+{{14560932650708416505ull, 5828907630855718301ull,
+ 13306682562378363860ull, 1111379374742538741ull}},
+{{10290884159625503948ull, 4855130340913053983ull,
+ 6350685327217583095ull, 222275874948507748ull}},
+{{2135024245541456279ull, 9710260681826107967ull,
+ 12701370654435166190ull, 444551749897015496ull}},
+{{4270048491082912558ull, 973777289942664318ull, 6955997235160780765ull,
+ 889103499794030993ull}},
+{{4543358512958492835ull, 11262801902214263833ull,
+ 12459245891257887122ull, 177820699958806198ull}},
+{{9086717025916985670ull, 4078859730718976050ull,
+ 6471747708806222629ull, 355641399917612397ull}},
+{{18173434051833971339ull, 8157719461437952100ull,
+ 12943495417612445258ull, 711282799835224794ull}},
+{{11013384439850614915ull, 9010241521771411066ull,
+ 17346094342490130344ull, 142256559967044958ull}},
+{{3580024805991678213ull, 18020483043542822133ull,
+ 16245444611270709072ull, 284513119934089917ull}},
+{{7160049611983356425ull, 17594222013376092650ull,
+ 14044145148831866529ull, 569026239868179835ull}},
+{{14320099223966712850ull, 16741699953042633684ull,
+ 9641546223954181443ull, 1138052479736359671ull}},
+{{13932066289019073540ull, 18105735249576168029ull,
+ 5617658059532746611ull, 227610495947271934ull}},
+{{9417388504328595463ull, 17764726425442784443ull,
+ 11235316119065493223ull, 455220991894543868ull}},
+{{388032934947639310ull, 17082708777176017271ull,
+ 4023888164421434831ull, 910441983789087737ull}},
+{{14835001845957169155ull, 14484588199660934423ull,
+ 8183475262368107612ull, 182088396757817547ull}},
+{{11223259618204786694ull, 10522432325612317231ull,
+ 16366950524736215225ull, 364176793515635094ull}},
+{{3999775162700021771ull, 2598120577515082847ull,
+ 14287156975762878835ull, 728353587031270189ull}},
+{{4489303847281914678ull, 15277019374470657862ull,
+ 17614826654120217059ull, 145670717406254037ull}},
+{{8978607694563829355ull, 12107294675231764108ull,
+ 16782909234530882503ull, 291341434812508075ull}},
+{{17957215389127658710ull, 5767845276753976600ull,
+ 15119074395352213391ull, 582682869625016151ull}},
+{{17467686704545765804ull, 11535690553507953201ull,
+ 11791404716994875166ull, 1165365739250032303ull}},
+{{3493537340909153161ull, 17064533369669231933ull,
+ 13426327387624706002ull, 233073147850006460ull}},
+{{6987074681818306322ull, 15682322665628912250ull,
+ 8405910701539860389ull, 466146295700012921ull}},
+{{13974149363636612643ull, 12917901257548272884ull,
+ 16811821403079720779ull, 932292591400025842ull}},
+{{2794829872727322529ull, 6272929066251564900ull,
+ 10741061910099764802ull, 186458518280005168ull}},
+{{5589659745454645057ull, 12545858132503129800ull,
+ 3035379746489977988ull, 372917036560010337ull}},
+{{11179319490909290114ull, 6644972191296707984ull,
+ 6070759492979955977ull, 745834073120020674ull}},
+{{2235863898181858023ull, 5018343253001251920ull,
+ 15971547157563632488ull, 149166814624004134ull}},
+{{4471727796363716046ull, 10036686506002503840ull,
+ 13496350241417713360ull, 298333629248008269ull}},
+{{8943455592727432092ull, 1626628938295456064ull,
+ 8545956409125875105ull, 596667258496016539ull}},
+{{17886911185454864183ull, 3253257876590912128ull,
+ 17091912818251750210ull, 1193334516992033078ull}},
+{{7266731051832883160ull, 11718698019543913395ull,
+ 14486429007876081011ull, 238666903398406615ull}},
+{{14533462103665766320ull, 4990651965378275174ull,
+ 10526113942042610407ull, 477333806796813231ull}},
+{{10620180133621981023ull, 9981303930756550349ull,
+ 2605483810375669198ull, 954667613593626463ull}},
+{{2124036026724396205ull, 5685609600893220393ull,
+ 11589143206300864809ull, 190933522718725292ull}},
+{{4248072053448792410ull, 11371219201786440786ull,
+ 4731542338892178002ull, 381867045437450585ull}},
+{{8496144106897584819ull, 4295694329863329956ull,
+ 9463084677784356005ull, 763734090874901170ull}},
+{{5388577636121427287ull, 859138865972665991ull, 1892616935556871201ull,
+ 152746818174980234ull}},
+{{10777155272242854574ull, 1718277731945331982ull,
+ 3785233871113742402ull, 305493636349960468ull}},
+{{3107566470776157532ull, 3436555463890663965ull,
+ 7570467742227484804ull, 610987272699920936ull}},
+{{6215132941552315063ull, 6873110927781327930ull,
+ 15140935484454969608ull, 1221974545399841872ull}},
+{{1243026588310463013ull, 1374622185556265586ull,
+ 10406884726374814568ull, 244394909079968374ull}},
+{{2486053176620926026ull, 2749244371112531172ull,
+ 2367025379040077520ull, 488789818159936749ull}},
+{{4972106353241852051ull, 5498488742225062344ull,
+ 4734050758080155040ull, 977579636319873498ull}},
+{{8373118900132191057ull, 12167744192670743438ull,
+ 12014856595841761977ull, 195515927263974699ull}},
+{{16746237800264382113ull, 5888744311631935260ull,
+ 5582969117973972339ull, 391031854527949399ull}},
+{{15045731526819212610ull, 11777488623263870521ull,
+ 11165938235947944678ull, 782063709055898798ull}},
+{{10387843934847663169ull, 6044846539394684427ull,
+ 13301234091415319905ull, 156412741811179759ull}},
+{{2328943795985774721ull, 12089693078789368855ull,
+ 8155724109121088194ull, 312825483622359519ull}},
+{{4657887591971549442ull, 5732642083869186094ull,
+ 16311448218242176389ull, 625650967244719038ull}},
+{{9315775183943098883ull, 11465284167738372188ull,
+ 14176152362774801162ull, 1251301934489438077ull}},
+{{9241852666272440423ull, 17050452092515315730ull,
+ 10213928102038780878ull, 250260386897887615ull}},
+{{36961258835329230ull, 15654160111321079845ull, 1981112130368010141ull,
+ 500520773795775231ull}},
+{{73922517670658460ull, 12861576148932608074ull, 3962224260736020283ull,
+ 1001041547591550462ull}},
+{{14772179762501772985ull, 2572315229786521614ull,
+ 8171142481631024703ull, 200208309518310092ull}},
+{{11097615451293994354ull, 5144630459573043229ull,
+ 16342284963262049406ull, 400416619036620184ull}},
+{{3748486828878437092ull, 10289260919146086459ull,
+ 14237825852814547196ull, 800833238073240369ull}},
+{{15507092624743328712ull, 2057852183829217291ull,
+ 17604960429530550732ull, 160166647614648073ull}},
+{{12567441175777105807ull, 4115704367658434583ull,
+ 16763176785351549848ull, 320333295229296147ull}},
+{{6688138277844659997ull, 8231408735316869167ull,
+ 15079609496993548080ull, 640666590458592295ull}},
+{{8716325285052752646ull, 1646281747063373833ull,
+ 3015921899398709616ull, 128133318091718459ull}},
+{{17432650570105505292ull, 3292563494126747666ull,
+ 6031843798797419232ull, 256266636183436918ull}},
+{{16418557066501458967ull, 6585126988253495333ull,
+ 12063687597594838464ull, 512533272366873836ull}},
+{{14390370059293366317ull, 13170253976506990667ull,
+ 5680631121480125312ull, 1025066544733747673ull}},
+{{10256771641342493910ull, 2634050795301398133ull,
+ 12204172668521756032ull, 205013308946749534ull}},
+{{2066799208975436204ull, 5268101590602796267ull,
+ 5961601263333960448ull, 410026617893499069ull}},
+{{4133598417950872408ull, 10536203181205592534ull,
+ 11923202526667920896ull, 820053235786998138ull}},
+{{11894766127815905452ull, 16864635895208759799ull,
+ 13452686949559315148ull, 164010647157399627ull}},
+{{5342788181922259287ull, 15282527716707967983ull,
+ 8458629825409078681ull, 328021294314799255ull}},
+{{10685576363844518573ull, 12118311359706384350ull,
+ 16917259650818157363ull, 656042588629598510ull}},
+{{13205161716994634685ull, 13491708716167007839ull,
+ 3383451930163631472ull, 131208517725919702ull}},
+{{7963579360279717753ull, 8536673358624464063ull,
+ 6766903860327262945ull, 262417035451839404ull}},
+{{15927158720559435505ull, 17073346717248928126ull,
+ 13533807720654525890ull, 524834070903678808ull}},
+{{13407573367409319393ull, 15699949360788304637ull,
+ 8620871367599500165ull, 1049668141807357617ull}},
+{{17438909932449505172ull, 10518687501641481573ull,
+ 9102871903003720679ull, 209933628361471523ull}},
+{{16431075791189458727ull, 2590630929573411531ull,
+ 18205743806007441359ull, 419867256722943046ull}},
+{{14415407508669365837ull, 5181261859146823063ull,
+ 17964743538305331102ull, 839734513445886093ull}},
+{{13951127945959604137ull, 1036252371829364612ull,
+ 14660995151886797190ull, 167946902689177218ull}},
+{{9455511818209656658ull, 2072504743658729225ull,
+ 10875246230064042764ull, 335893805378354437ull}},
+{{464279562709761700ull, 4145009487317458451ull, 3303748386418533912ull,
+ 671787610756708875ull}},
+{{11160902356767683310ull, 8207699526947312336ull,
+ 660749677283706782ull, 134357522151341775ull}},
+{{3875060639825815004ull, 16415399053894624673ull,
+ 1321499354567413564ull, 268715044302683550ull}},
+{{7750121279651630007ull, 14384054034079697730ull,
+ 2642998709134827129ull, 537430088605367100ull}},
+{{15500242559303260013ull, 10321363994449843844ull,
+ 5285997418269654259ull, 1074860177210734200ull}},
+{{14168094956086382973ull, 16821668057857610061ull,
+ 1057199483653930851ull, 214972035442146840ull}},
+{{9889445838463214329ull, 15196592042005668507ull,
+ 2114398967307861703ull, 429944070884293680ull}},
+{{1332147603216877041ull, 11946440010301785399ull,
+ 4228797934615723407ull, 859888141768587360ull}},
+{{3955778335385285732ull, 9767985631544177726ull, 845759586923144681ull,
+ 171977628353717472ull}},
+{{7911556670770571463ull, 1089227189378803836ull,
+ 1691519173846289363ull, 343955256707434944ull}},
+{{15823113341541142926ull, 2178454378757607672ull,
+ 3383038347692578726ull, 687910513414869888ull}},
+{{6853971483050138909ull, 15193086134719162827ull,
+ 11744654113764246714ull, 137582102682973977ull}},
+{{13707942966100277817ull, 11939428195728774038ull,
+ 5042564153818941813ull, 275164205365947955ull}},
+{{8969141858491004017ull, 5432112317747996461ull,
+ 10085128307637883627ull, 550328410731895910ull}},
+{{17938283716982008034ull, 10864224635495992922ull,
+ 1723512541566215638ull, 1100656821463791821ull}},
+{{7277005558138311930ull, 16930240186066839877ull,
+ 4034051323055153450ull, 220131364292758364ull}},
+{{14554011116276623860ull, 15413736298424128138ull,
+ 8068102646110306901ull, 440262728585516728ull}},
+{{10661278158843696104ull, 12380728523138704661ull,
+ 16136205292220613803ull, 880525457171033456ull}},
+{{2132255631768739221ull, 17233540963595382225ull,
+ 6916589873186033083ull, 176105091434206691ull}},
+{{4264511263537478442ull, 16020337853481212834ull,
+ 13833179746372066167ull, 352210182868413382ull}},
+{{8529022527074956884ull, 13593931633252874052ull,
+ 9219615419034580719ull, 704420365736826765ull}},
+{{5395153320156901700ull, 17476181585618216103ull,
+ 1843923083806916143ull, 140884073147365353ull}},
+{{10790306640313803400ull, 16505619097526880590ull,
+ 3687846167613832287ull, 281768146294730706ull}},
+{{3133869206918055184ull, 14564494121344209565ull,
+ 7375692335227664575ull, 563536292589461412ull}},
+{{6267738413836110367ull, 10682244168978867514ull,
+ 14751384670455329151ull, 1127072585178922824ull}},
+{{16010942941734863367ull, 2136448833795773502ull,
+ 17707672193058707123ull, 225414517035784564ull}},
+{{13575141809760175117ull, 4272897667591547005ull,
+ 16968600312407862630ull, 450829034071569129ull}},
+{{8703539545810798617ull, 8545795335183094011ull,
+ 15490456551106173644ull, 901658068143138259ull}},
+{{16498103168129801017ull, 12777205511262349771ull,
+ 17855486569188876021ull, 180331613628627651ull}},
+{{14549462262550050417ull, 7107666948815147927ull,
+ 17264229064668200427ull, 360663227257255303ull}},
+{{10652180451390549217ull, 14215333897630295855ull,
+ 16081714055626849238ull, 721326454514510607ull}},
+{{2130436090278109844ull, 2843066779526059171ull,
+ 10595040440609190494ull, 144265290902902121ull}},
+{{4260872180556219687ull, 5686133559052118342ull,
+ 2743336807508829372ull, 288530581805804243ull}},
+{{8521744361112439374ull, 11372267118104236684ull,
+ 5486673615017658744ull, 577061163611608486ull}},
+{{17043488722224878747ull, 4297790162498921752ull,
+ 10973347230035317489ull, 1154122327223216972ull}},
+{{14476744188670706719ull, 4548906847241694673ull,
+ 9573367075490884144ull, 230824465444643394ull}},
+{{10506744303631861822ull, 9097813694483389347ull,
+ 699990077272216672ull, 461648930889286789ull}},
+{{2566744533554172028ull, 18195627388966778695ull,
+ 1399980154544433344ull, 923297861778573578ull}},
+{{7892046536194655052ull, 11017823107277176385ull,
+ 11348042475134617638ull, 184659572355714715ull}},
+{{15784093072389310104ull, 3588902140844801154ull,
+ 4249340876559683661ull, 369319144711429431ull}},
+{{13121442071069068592ull, 7177804281689602309ull,
+ 8498681753119367322ull, 738638289422858862ull}},
+{{13692334858439544688ull, 16192956115305561754ull,
+ 9078433980107694110ull, 147727657884571772ull}},
+{{8937925643169537760ull, 13939168156901571893ull,
+ 18156867960215388221ull, 295455315769143544ull}},
+{{17875851286339075520ull, 9431592240093592170ull,
+ 17866991846721224827ull, 590910631538287089ull}},
+{{17304958498968599424ull, 416440406477632725ull,
+ 17287239619732898039ull, 1181821263076574179ull}},
+{{14529038144019450855ull, 11151334525521257514ull,
+ 18214843182914220900ull, 236364252615314835ull}},
+{{10611332214329350093ull, 3855924977332963413ull,
+ 17982942292118890185ull, 472728505230629671ull}},
+{{2775920354949148570ull, 7711849954665926827ull,
+ 17519140510528228754ull, 945457010461259343ull}},
+{{15312579329957471007ull, 8921067620417006011ull,
+ 14571874546331376720ull, 189091402092251868ull}},
+{{12178414586205390398ull, 17842135240834012023ull,
+ 10697005018953201824ull, 378182804184503737ull}},
+{{5910085098701229179ull, 17237526407958472431ull,
+ 2947265964196852033ull, 756365608369007475ull}},
+{{15939412278707887129ull, 14515551725817425455ull,
+ 589453192839370406ull, 151273121673801495ull}},
+{{13432080483706222641ull, 10584359377925299295ull,
+ 1178906385678740813ull, 302546243347602990ull}},
+{{8417416893702893666ull, 2721974682141046975ull,
+ 2357812771357481627ull, 605092486695205980ull}},
+{{16834833787405787332ull, 5443949364282093950ull,
+ 4715625542714963254ull, 1210184973390411960ull}},
+{{18124362016448798760ull, 15846185131824060082ull,
+ 943125108542992650ull, 242036994678082392ull}},
+{{17801979959188045903ull, 13245626189938568549ull,
+ 1886250217085985301ull, 484073989356164784ull}},
+{{17157215844666540189ull, 8044508306167585483ull,
+ 3772500434171970603ull, 968147978712329568ull}},
+{{18188838427900949331ull, 5298250475975427419ull,
+ 11822546531060125090ull, 193629595742465913ull}},
+{{17930932782092347046ull, 10596500951950854839ull,
+ 5198348988410698564ull, 387259191484931827ull}},
+{{17415121490475142475ull, 2746257830192158063ull,
+ 10396697976821397129ull, 774518382969863654ull}},
+{{7172373112836938819ull, 11617298010264162582ull,
+ 16836734854331920718ull, 154903676593972730ull}},
+{{14344746225673877637ull, 4787851946818773548ull,
+ 15226725634954289821ull, 309807353187945461ull}},
+{{10242748377638203657ull, 9575703893637547097ull,
+ 12006707196199028026ull, 619614706375890923ull}},
+{{2038752681566855697ull, 704663713565542579ull, 5566670318688504437ull,
+ 1239229412751781847ull}},
+{{11475796980539102109ull, 14898328001680749808ull,
+ 8492031693221521533ull, 247845882550356369ull}},
+{{4504849887368652602ull, 11349911929651948001ull,
+ 16984063386443043067ull, 495691765100712738ull}},
+{{9009699774737305204ull, 4253079785594344386ull,
+ 15521382699176534519ull, 991383530201425477ull}},
+{{9180637584431281688ull, 4539964771860779200ull,
+ 10482974169319127550ull, 198276706040285095ull}},
+{{18361275168862563375ull, 9079929543721558400ull,
+ 2519204264928703484ull, 396553412080570191ull}},
+{{18275806264015575133ull, 18159859087443116801ull,
+ 5038408529857406968ull, 793106824161140382ull}},
+{{7344510067545025350ull, 3631971817488623360ull,
+ 8386379335455302040ull, 158621364832228076ull}},
+{{14689020135090050700ull, 7263943634977246720ull,
+ 16772758670910604080ull, 317242729664456152ull}},
+{{10931296196470549783ull, 14527887269954493441ull,
+ 15098773268111656544ull, 634485459328912305ull}},
+{{3415848319231547950ull, 10609030466199435267ull,
+ 11750802462513761473ull, 1268970918657824611ull}},
+{{4372518478588219914ull, 16879201352207528346ull,
+ 6039509307244662617ull, 253794183731564922ull}},
+{{8745036957176439827ull, 15311658630705505076ull,
+ 12079018614489325235ull, 507588367463129844ull}},
+{{17490073914352879653ull, 12176573187701458536ull,
+ 5711293155269098855ull, 1015176734926259689ull}},
+{{3498014782870575931ull, 17192709896507933000ull,
+ 15899653890021461063ull, 203035346985251937ull}},
+{{6996029565741151861ull, 15938675719306314384ull,
+ 13352563706333370511ull, 406070693970503875ull}},
+{{13992059131482303722ull, 13430607364903077152ull,
+ 8258383338957189407ull, 812141387941007751ull}},
+{{2798411826296460745ull, 13754167917206346400ull,
+ 5341025482533348204ull, 162428277588201550ull}},
+{{5596823652592921489ull, 9061591760703141184ull,
+ 10682050965066696409ull, 324856555176403100ull}},
+{{11193647305185842978ull, 18123183521406282368ull,
+ 2917357856423841202ull, 649713110352806201ull}},
+{{5928078275779078919ull, 14692683148506987443ull,
+ 4272820386026678563ull, 129942622070561240ull}},
+{{11856156551558157838ull, 10938622223304423270ull,
+ 8545640772053357127ull, 259885244141122480ull}},
+{{5265569029406764059ull, 3430500372899294925ull,
+ 17091281544106714255ull, 519770488282244960ull}},
+{{10531138058813528118ull, 6861000745798589850ull,
+ 15735819014503876894ull, 1039540976564489921ull}},
+{{2106227611762705624ull, 1372200149159717970ull,
+ 6836512617642685702ull, 207908195312897984ull}},
+{{4212455223525411247ull, 2744400298319435940ull,
+ 13673025235285371404ull, 415816390625795968ull}},
+{{8424910447050822494ull, 5488800596638871880ull,
+ 8899306396861191192ull, 831632781251591937ull}},
+{{16442377348377805792ull, 15855155378295415668ull,
+ 9158558908856058884ull, 166326556250318387ull}},
+{{14438010623046059968ull, 13263566682881279721ull,
+ 18317117817712117769ull, 332653112500636774ull}},
+{{10429277172382568319ull, 8080389292053007827ull,
+ 18187491561714683923ull, 665306225001273549ull}},
+{{16843250693444154957ull, 8994775487894422211ull,
+ 18394893571310578077ull, 133061245000254709ull}},
+{{15239757313178758297ull, 17989550975788844423ull,
+ 18343043068911604538ull, 266122490000509419ull}},
+{{12032770552647964978ull, 17532357877868137231ull,
+ 18239342064113657461ull, 532244980001018839ull}},
+{{5618797031586378340ull, 16617971682026722847ull,
+ 18031940054517763307ull, 1064489960002037679ull}},
+{{12191805850543006638ull, 7012943151147254892ull,
+ 18363783269871193954ull, 212897992000407535ull}},
+{{5936867627376461660ull, 14025886302294509785ull,
+ 18280822466032836292ull, 425795984000815071ull}},
+{{11873735254752923319ull, 9605028530879467954ull,
+ 18114900858356120969ull, 851591968001630143ull}},
+{{6064095865692494987ull, 9299703335659714237ull,
+ 14691026615896955163ull, 170318393600326028ull}},
+{{12128191731384989974ull, 152662597609876858ull,
+ 10935309158084358711ull, 340636787200652057ull}},
+{{5809639389060428332ull, 305325195219753717ull, 3423874242459165806ull,
+ 681273574401304115ull}},
+{{12229974322037816636ull, 3750413853785861066ull,
+ 684774848491833161ull, 136254714880260823ull}},
+{{6013204570366081656ull, 7500827707571722133ull,
+ 1369549696983666322ull, 272509429760521646ull}},
+{{12026409140732163312ull, 15001655415143444266ull,
+ 2739099393967332644ull, 545018859521043292ull}},
+{{5606074207754775008ull, 11556566756577336917ull,
+ 5478198787934665289ull, 1090037719042086584ull}},
+{{1121214841550955002ull, 13379359795541198353ull,
+ 15853035016554574350ull, 218007543808417316ull}},
+{{2242429683101910003ull, 8311975517372845090ull,
+ 13259325959399597085ull, 436015087616834633ull}},
+{{4484859366203820006ull, 16623951034745690180ull,
+ 8071907845089642554ull, 872030175233669267ull}},
+{{4586320687982674325ull, 7014139021691048359ull,
+ 8993079198501749157ull, 174406035046733853ull}},
+{{9172641375965348649ull, 14028278043382096718ull,
+ 17986158397003498314ull, 348812070093467706ull}},
+{{18345282751930697298ull, 9609812013054641820ull,
+ 17525572720297445013ull, 697624140186935413ull}},
+{{7358405365128049783ull, 5611311217352838687ull,
+ 14573160988285219972ull, 139524828037387082ull}},
+{{14716810730256099566ull, 11222622434705677374ull,
+ 10699577902860888328ull, 279049656074774165ull}},
+{{10986877386802647515ull, 3998500795701803133ull,
+ 2952411732012225041ull, 558099312149548331ull}},
+{{3527010699895743414ull, 7997001591403606267ull,
+ 5904823464024450082ull, 1116198624299096662ull}},
+{{4394750954721059006ull, 16356795577248362546ull,
+ 8559662322288710662ull, 223239724859819332ull}},
+{{8789501909442118012ull, 14266847080787173476ull,
+ 17119324644577421325ull, 446479449719638664ull}},
+{{17579003818884236024ull, 10086950087864795336ull,
+ 15791905215445291035ull, 892958899439277329ull}},
+{{3515800763776847205ull, 16774785276540600360ull,
+ 17915776302056699499ull, 178591779887855465ull}},
+{{7031601527553694410ull, 15102826479371649104ull,
+ 17384808530403847383ull, 357183559775710931ull}},
+{{14063203055107388819ull, 11758908885033746592ull,
+ 16322872987098143151ull, 714367119551421863ull}},
+{{6501989425763388087ull, 17109177035974390611ull,
+ 14332621041645359599ull, 142873423910284372ull}},
+{{13003978851526776174ull, 15771609998239229606ull,
+ 10218498009581167583ull, 285746847820568745ull}},
+{{7561213629344000732ull, 13096475922768907597ull,
+ 1990251945452783551ull, 571493695641137491ull}},
+{{15122427258688001464ull, 7746207771828263578ull,
+ 3980503890905567103ull, 1142987391282274982ull}},
+{{14092531895963331263ull, 1549241554365652715ull,
+ 8174798407664934067ull, 228597478256454996ull}},
+{{9738319718217110909ull, 3098483108731305431ull,
+ 16349596815329868134ull, 457194956512909992ull}},
+{{1029895362724670202ull, 6196966217462610863ull,
+ 14252449556950184652ull, 914389913025819985ull}},
+{{205979072544934041ull, 8618090872976342819ull, 2850489911390036930ull,
+ 182877982605163997ull}},
+{{411958145089868081ull, 17236181745952685638ull,
+ 5700979822780073860ull, 365755965210327994ull}},
+{{823916290179736162ull, 16025619418195819660ull,
+ 11401959645560147721ull, 731511930420655988ull}},
+{{14922178517003588526ull, 17962519142606805224ull,
+ 13348438373337760513ull, 146302386084131197ull}},
+{{11397612960297625435ull, 17478294211504058833ull,
+ 8250132672965969411ull, 292604772168262395ull}},
+{{4348481846885699253ull, 16509844349298566051ull,
+ 16500265345931938823ull, 585209544336524790ull}},
+{{8696963693771398505ull, 14572944624887580486ull,
+ 14553786618154326031ull, 1170419088673049581ull}},
+{{12807439182980010671ull, 10293286554461336743ull,
+ 6600106138372775529ull, 234083817734609916ull}},
+{{7168134292250469725ull, 2139829035213121871ull,
+ 13200212276745551059ull, 468167635469219832ull}},
+{{14336268584500939450ull, 4279658070426243742ull,
+ 7953680479781550502ull, 936335270938439665ull}},
+{{17624648975867829183ull, 8234629243569069394ull,
+ 1590736095956310100ull, 187267054187687933ull}},
+{{16802553878026106750ull, 16469258487138138789ull,
+ 3181472191912620200ull, 374534108375375866ull}},
+{{15158363682342661883ull, 14491772900566725963ull,
+ 6362944383825240401ull, 749068216750751732ull}},
+{{6721021551210442700ull, 13966401024339076162ull,
+ 8651286506248868726ull, 149813643350150346ull}},
+{{13442043102420885400ull, 9486057974968600708ull,
+ 17302573012497737453ull, 299627286700300692ull}},
+{{8437342131132219184ull, 525371876227649801ull,
+ 16158401951285923291ull, 599254573400601385ull}},
+{{16874684262264438367ull, 1050743752455299602ull,
+ 13870059828862294966ull, 1198509146801202771ull}},
+{{18132332111420528967ull, 7588846379974880566ull,
+ 6463360780514369316ull, 239701829360240554ull}},
+{{17817920149131506317ull, 15177692759949761133ull,
+ 12926721561028738632ull, 479403658720481108ull}},
+{{17189096224553461017ull, 11908641446189970651ull,
+ 7406699048347925649ull, 958807317440962217ull}},
+{{10816516874394512850ull, 6071077103979904453ull,
+ 8860037439153405776ull, 191761463488192443ull}},
+{{3186289675079474084ull, 12142154207959808907ull,
+ 17720074878306811552ull, 383522926976384886ull}},
+{{6372579350158948167ull, 5837564342210066198ull,
+ 16993405682904071489ull, 767045853952769773ull}},
+{{1274515870031789634ull, 8546210497925833886ull,
+ 14466727580806545267ull, 153409170790553954ull}},
+{{2549031740063579267ull, 17092420995851667772ull,
+ 10486711087903538918ull, 306818341581107909ull}},
+{{5098063480127158534ull, 15738097917993783928ull,
+ 2526678102097526221ull, 613636683162215819ull}},
+{{10196126960254317067ull, 13029451762278016240ull,
+ 5053356204195052443ull, 1227273366324431638ull}},
+{{5728574206792773737ull, 6295239167197513571ull,
+ 12078717685064741458ull, 245454673264886327ull}},
+{{11457148413585547473ull, 12590478334395027142ull,
+ 5710691296419931300ull, 490909346529772655ull}},
+{{4467552753461543330ull, 6734212595080502669ull,
+ 11421382592839862601ull, 981818693059545310ull}},
+{{893510550692308666ull, 5036191333758010857ull, 2284276518567972520ull,
+ 196363738611909062ull}},
+{{1787021101384617332ull, 10072382667516021714ull,
+ 4568553037135945040ull, 392727477223818124ull}},
+{{3574042202769234664ull, 1698021261322491812ull,
+ 9137106074271890081ull, 785454954447636248ull}},
+{{4404157255295757256ull, 15096999511232139655ull,
+ 12895467659080108985ull, 157090990889527249ull}},
+{{8808314510591514512ull, 11747254948754727694ull,
+ 7344191244450666355ull, 314181981779054499ull}},
+{{17616629021183029024ull, 5047765823799903772ull,
+ 14688382488901332711ull, 628363963558108998ull}},
+{{16786513968656506432ull, 10095531647599807545ull,
+ 10930020904093113806ull, 1256727927116217997ull}},
+{{14425349237957032256ull, 13087152773745692478ull,
+ 9564701810302443407ull, 251345585423243599ull}},
+{{10403954402204512896ull, 7727561473781833341ull,
+ 682659546895335199ull, 502691170846487199ull}},
+{{2361164730699474176ull, 15455122947563666683ull,
+ 1365319093790670398ull, 1005382341692974398ull}},
+{{15229628205107536128ull, 6780373404254643659ull,
+ 11341110262983865049ull, 201076468338594879ull}},
+{{12012512336505520640ull, 13560746808509287319ull,
+ 4235476452258178482ull, 402152936677189759ull}},
+{{5578280599301489664ull, 8674749543309023023ull,
+ 8470952904516356965ull, 804305873354379518ull}},
+{{4805004934602208256ull, 12802996352887535574ull,
+ 12762237025129002362ull, 160861174670875903ull}},
+{{9610009869204416512ull, 7159248632065519532ull,
+ 7077729976548453109ull, 321722349341751807ull}},
+{{773275664699281408ull, 14318497264131039065ull,
+ 14155459953096906218ull, 643444698683503614ull}},
+{{7533352762423676928ull, 10242397082310028459ull,
+ 17588487249587022536ull, 128688939736700722ull}},
+{{15066705524847353856ull, 2038050090910505302ull,
+ 16730230425464493457ull, 257377879473401445ull}},
+{{11686666975985156096ull, 4076100181821010605ull,
+ 15013716777219435298ull, 514755758946802891ull}},
+{{4926589878260760576ull, 8152200363642021211ull,
+ 11580689480729318980ull, 1029511517893605783ull}},
+{{15742713234619793408ull, 12698486516954135211ull,
+ 13384184340371594765ull, 205902303578721156ull}},
+{{13038682395530035200ull, 6950228960198718807ull,
+ 8321624607033637915ull, 411804607157442313ull}},
+{{7630620717350518784ull, 13900457920397437615ull,
+ 16643249214067275830ull, 823609214314884626ull}},
+{{5215472958212014080ull, 6469440398821397846ull,
+ 7017998657555365489ull, 164721842862976925ull}},
+{{10430945916424028160ull, 12938880797642795692ull,
+ 14035997315110730978ull, 329443685725953850ull}},
+{{2415147759138504704ull, 7431017521576039769ull,
+ 9625250556511910341ull, 658887371451907701ull}},
+{{4172378366569611264ull, 8864901133799028600ull,
+ 5614398926044292391ull, 131777474290381540ull}},
+{{8344756733139222528ull, 17729802267598057200ull,
+ 11228797852088584782ull, 263554948580763080ull}},
+{{16689513466278445056ull, 17012860461486562784ull,
+ 4010851630467617949ull, 527109897161526161ull}},
+{{14932282858847338496ull, 15578976849263573953ull,
+ 8021703260935235899ull, 1054219794323052322ull}},
+{{17743851830737108992ull, 6805144184594625113ull,
+ 8983038281670867826ull, 210843958864610464ull}},
+{{17040959587764666368ull, 13610288369189250227ull,
+ 17966076563341735652ull, 421687917729220928ull}},
+{{15635175101819781120ull, 8773832664668948839ull,
+ 17485409052973919689ull, 843375835458441857ull}},
+{{3127035020363956224ull, 5444115347675700091ull,
+ 10875779440078604584ull, 168675167091688371ull}},
+{{6254070040727912448ull, 10888230695351400182ull,
+ 3304814806447657552ull, 337350334183376743ull}},
+{{12508140081455824896ull, 3329717316993248748ull,
+ 6609629612895315105ull, 674700668366753486ull}},
+{{17259023275258806272ull, 4355292278140560072ull,
+ 5011274737320973344ull, 134940133673350697ull}},
+{{16071302476808060928ull, 8710584556281120145ull,
+ 10022549474641946688ull, 269880267346701394ull}},
+{{13695860879906570240ull, 17421169112562240291ull,
+ 1598354875574341760ull, 539760534693402789ull}},
+{{8944977686103588864ull, 16395594151414928967ull,
+ 3196709751148683521ull, 1079521069386805578ull}},
+{{5478344351962628096ull, 18036514089250627086ull,
+ 11707388394455467673ull, 215904213877361115ull}},
+{{10956688703925256192ull, 17626284104791702556ull,
+ 4968032715201383731ull, 431808427754722231ull}},
+{{3466633334140960768ull, 16805824135873853497ull,
+ 9936065430402767463ull, 863616855509444462ull}},
+{{8072024296312012800ull, 3361164827174770699ull,
+ 9365910715564374139ull, 172723371101888892ull}},
+{{16144048592624025600ull, 6722329654349541398ull,
+ 285077357419196662ull, 345446742203777785ull}},
+{{13841353111538499584ull, 13444659308699082797ull,
+ 570154714838393324ull, 690893484407555570ull}},
+{{6457619437049610240ull, 17446327120707457852ull,
+ 114030942967678664ull, 138178696881511114ull}},
+{{12915238874099220480ull, 16445910167705364088ull,
+ 228061885935357329ull, 276357393763022228ull}},
+{{7383733674488889344ull, 14445076261701176561ull,
+ 456123771870714659ull, 552714787526044456ull}},
+{{14767467348977778688ull, 10443408449692801506ull,
+ 912247543741429319ull, 1105429575052088912ull}},
+{{10332191099279376384ull, 5778030504680470624ull,
+ 7561147138232106510ull, 221085915010417782ull}},
+{{2217638124849201152ull, 11556061009360941249ull,
+ 15122294276464213020ull, 442171830020835564ull}},
+{{4435276249698402304ull, 4665377945012330882ull,
+ 11797844479218874425ull, 884343660041671129ull}},
+{{4576404064681590784ull, 15690470847970107469ull,
+ 17116964154811416177ull, 176868732008334225ull}},
+{{9152808129363181568ull, 12934197622230663322ull,
+ 15787184235913280739ull, 353737464016668451ull}},
+{{18305616258726363136ull, 7421651170751775028ull,
+ 13127624398117009863ull, 707474928033336903ull}},
+{{18418518510712913920ull, 5173679048892265328ull,
+ 13693571323849132942ull, 141494985606667380ull}},
+{{18390292947716276224ull, 10347358097784530657ull,
+ 8940398573988714268ull, 282989971213334761ull}},
+{{18333841821723000832ull, 2247972121859509699ull,
+ 17880797147977428537ull, 565979942426669522ull}},
+{{18220939569736450048ull, 4495944243719019399ull,
+ 17314850222245305458ull, 1131959884853339045ull}},
+{{11022885543431110656ull, 11967235292969534849ull,
+ 3462970044449061091ull, 226391976970667809ull}},
+{{3599027013152669696ull, 5487726512229518083ull,
+ 6925940088898122183ull, 452783953941335618ull}},
+{{7198054026305339392ull, 10975453024459036166ull,
+ 13851880177796244366ull, 905567907882671236ull}},
+{{12507657249486798848ull, 9573788234375627879ull,
+ 6459724850301159196ull, 181113581576534247ull}},
+{{6568570425264046080ull, 700832395041704143ull,
+ 12919449700602318393ull, 362227163153068494ull}},
+{{13137140850528092160ull, 1401664790083408286ull,
+ 7392155327495085170ull, 724454326306136989ull}},
+{{2627428170105618432ull, 15037728216984322950ull,
+ 16235826324466658326ull, 144890865261227397ull}},
+{{5254856340211236864ull, 11628712360259094284ull,
+ 14024908575223765037ull, 289781730522454795ull}},
+{{10509712680422473728ull, 4810680646808636952ull,
+ 9603073076737978459ull, 579563461044909591ull}},
+{{2572681287135395840ull, 9621361293617273905ull, 759402079766405302ull,
+ 1159126922089819183ull}},
+{{514536257427079168ull, 1924272258723454781ull,
+ 11219926860179012030ull, 231825384417963836ull}},
+{{1029072514854158336ull, 3848544517446909562ull,
+ 3993109646648472444ull, 463650768835927673ull}},
+{{2058145029708316672ull, 7697089034893819124ull,
+ 7986219293296944888ull, 927301537671855346ull}},
+{{11479675450167394304ull, 16296813065946405117ull,
+ 5286592673401299300ull, 185460307534371069ull}},
+{{4512606826625236992ull, 14146882058183258619ull,
+ 10573185346802598601ull, 370920615068742138ull}},
+{{9025213653250473984ull, 9847020042656965622ull,
+ 2699626619895645587ull, 741841230137484277ull}},
+{{5494391545392005120ull, 16726799267499034417ull,
+ 7918622953462949763ull, 148368246027496855ull}},
+{{10988783090784010240ull, 15006854461288517218ull,
+ 15837245906925899527ull, 296736492054993710ull}},
+{{3530822107858468864ull, 11566964848867482821ull,
+ 13227747740142247439ull, 593472984109987421ull}},
+{{7061644215716937728ull, 4687185624025414026ull,
+ 8008751406574943263ull, 1186945968219974843ull}},
+{{8791026472627208192ull, 4626785939546993128ull,
+ 12669796725540719622ull, 237389193643994968ull}},
+{{17582052945254416384ull, 9253571879093986256ull,
+ 6892849377371887628ull, 474778387287989937ull}},
+{{16717361816799281152ull, 60399684478420897ull,
+ 13785698754743775257ull, 949556774575979874ull}},
+{{14411518807585587200ull, 3701428751637594502ull,
+ 17514535009916396344ull, 189911354915195974ull}},
+{{10376293541461622784ull, 7402857503275189005ull,
+ 16582325946123241072ull, 379822709830391949ull}},
+{{2305843009213693952ull, 14805715006550378011ull,
+ 14717907818536930528ull, 759645419660783899ull}},
+{{11529215046068469760ull, 10339840630793896248ull,
+ 17700976822675027398ull, 151929083932156779ull}},
+{{4611686018427387904ull, 2232937187878240881ull,
+ 16955209571640503181ull, 303858167864313559ull}},
+{{9223372036854775808ull, 4465874375756481762ull,
+ 15463675069571454746ull, 607716335728627119ull}},
+{{0ull, 8931748751512963525ull, 12480606065433357876ull,
+ 1215432671457254239ull}},
+{{0ull, 1786349750302592705ull, 17253516472054312868ull,
+ 243086534291450847ull}},
+{{0ull, 3572699500605185410ull, 16060288870399074120ull,
+ 486173068582901695ull}},
+{{0ull, 7145399001210370820ull, 13673833667088596624ull,
+ 972346137165803391ull}},
+{{0ull, 1429079800242074164ull, 6424115548159629648ull,
+ 194469227433160678ull}},
+{{0ull, 2858159600484148328ull, 12848231096319259296ull,
+ 388938454866321356ull}},
+{{0ull, 5716319200968296656ull, 7249718118928966976ull,
+ 777876909732642713ull}},
+{{0ull, 15900659099161300624ull, 12517990068011524364ull,
+ 155575381946528542ull}},
+{{0ull, 13354574124613049632ull, 6589236062313497113ull,
+ 311150763893057085ull}},
+{{0ull, 8262404175516547648ull, 13178472124626994227ull,
+ 622301527786114170ull}},
+{{0ull, 16524808351033095296ull, 7910200175544436838ull,
+ 1244603055572228341ull}},
+{{0ull, 18062356929174260352ull, 5271388849850797690ull,
+ 248920611114445668ull}},
+{{0ull, 17677969784638969088ull, 10542777699701595381ull,
+ 497841222228891336ull}},
+{{0ull, 16909195495568386560ull, 2638811325693639147ull,
+ 995682444457782673ull}},
+{{0ull, 3381839099113677312ull, 11595808709364458799ull,
+ 199136488891556534ull}},
+{{0ull, 6763678198227354624ull, 4744873345019365982ull,
+ 398272977783113069ull}},
+{{0ull, 13527356396454709248ull, 9489746690038731964ull,
+ 796545955566226138ull}},
+{{0ull, 10084168908774762496ull, 12965995782233477362ull,
+ 159309191113245227ull}},
+{{0ull, 1721593743839973376ull, 7485247490757403109ull,
+ 318618382226490455ull}},
+{{0ull, 3443187487679946752ull, 14970494981514806218ull,
+ 637236764452980910ull}},
+{{0ull, 6886374975359893504ull, 11494245889320060820ull,
+ 1274473528905961821ull}},
+{{0ull, 5066623809813889024ull, 5988197992605922487ull,
+ 254894705781192364ull}},
+{{0ull, 10133247619627778048ull, 11976395985211844974ull,
+ 509789411562384728ull}},
+{{0ull, 1819751165546004480ull, 5506047896714138333ull,
+ 1019578823124769457ull}},
+{{0ull, 363950233109200896ull, 8479907208826648313ull,
+ 203915764624953891ull}},
+{{0ull, 727900466218401792ull, 16959814417653296626ull,
+ 407831529249907782ull}},
+{{0ull, 1455800932436803584ull, 15472884761597041636ull,
+ 815663058499815565ull}},
+{{0ull, 3980509001229271040ull, 3094576952319408327ull,
+ 163132611699963113ull}},
+{{0ull, 7961018002458542080ull, 6189153904638816654ull,
+ 326265223399926226ull}},
+{{0ull, 15922036004917084160ull, 12378307809277633308ull,
+ 652530446799852452ull}},
+{{0ull, 3184407200983416832ull, 9854359191339347308ull,
+ 130506089359970490ull}},
+{{0ull, 6368814401966833664ull, 1261974308969143000ull,
+ 261012178719940981ull}},
+{{0ull, 12737628803933667328ull, 2523948617938286000ull,
+ 522024357439881962ull}},
+{{0ull, 7028513534157783040ull, 5047897235876572001ull,
+ 1044048714879763924ull}},
+{{0ull, 1405702706831556608ull, 15766974706142955693ull,
+ 208809742975952784ull}},
+{{0ull, 2811405413663113216ull, 13087205338576359770ull,
+ 417619485951905569ull}},
+{{0ull, 5622810827326226432ull, 7727666603443167924ull,
+ 835238971903811139ull}},
+{{0ull, 12192608609690976256ull, 16302928579656274877ull,
+ 167047794380762227ull}},
+{{0ull, 5938473145672400896ull, 14159113085602998139ull,
+ 334095588761524455ull}},
+{{0ull, 11876946291344801792ull, 9871482097496444662ull,
+ 668191177523048911ull}},
+{{0ull, 13443435702494691328ull, 5663645234241199255ull,
+ 133638235504609782ull}},
+{{0ull, 8440127331279831040ull, 11327290468482398511ull,
+ 267276471009219564ull}},
+{{0ull, 16880254662559662080ull, 4207836863255245406ull,
+ 534552942018439129ull}},
+{{0ull, 15313765251409772544ull, 8415673726510490813ull,
+ 1069105884036878258ull}},
+{{0ull, 6752101865023864832ull, 12751181189527829132ull,
+ 213821176807375651ull}},
+{{0ull, 13504203730047729664ull, 7055618305346106648ull,
+ 427642353614751303ull}},
+{{0ull, 8561663386385907712ull, 14111236610692213297ull,
+ 855284707229502606ull}},
+{{0ull, 12780379121502912512ull, 6511596136880352982ull,
+ 171056941445900521ull}},
+{{0ull, 7114014169296273408ull, 13023192273760705965ull,
+ 342113882891801042ull}},
+{{0ull, 14228028338592546816ull, 7599640473811860314ull,
+ 684227765783602085ull}},
+{{0ull, 17603000926686150656ull, 1519928094762372062ull,
+ 136845553156720417ull}},
+{{0ull, 16759257779662749696ull, 3039856189524744125ull,
+ 273691106313440834ull}},
+{{0ull, 15071771485615947776ull, 6079712379049488251ull,
+ 547382212626881668ull}},
+{{0ull, 11696798897522343936ull, 12159424758098976503ull,
+ 1094764425253763336ull}},
+{{0ull, 17096755038472110080ull, 6121233766361705623ull,
+ 218952885050752667ull}},
+{{0ull, 15746766003234668544ull, 12242467532723411247ull,
+ 437905770101505334ull}},
+{{0ull, 13046787932759785472ull, 6038190991737270879ull,
+ 875811540203010669ull}},
+{{0ull, 13677404030777688064ull, 15965033457315095468ull,
+ 175162308040602133ull}},
+{{0ull, 8908063987845824512ull, 13483322840920639321ull,
+ 350324616081204267ull}},
+{{0ull, 17816127975691649024ull, 8519901608131727026ull,
+ 700649232162408535ull}},
+{{0ull, 7252574409880240128ull, 1703980321626345405ull,
+ 140129846432481707ull}},
+{{0ull, 14505148819760480256ull, 3407960643252690810ull,
+ 280259692864963414ull}},
+{{0ull, 10563553565811408896ull, 6815921286505381621ull,
+ 560519385729926828ull}},
+{{0ull, 2680363057913266176ull, 13631842573010763243ull,
+ 1121038771459853656ull}},
+{{0ull, 15293467870550294528ull, 6415717329344062971ull,
+ 224207754291970731ull}},
+{{0ull, 12140191667391037440ull, 12831434658688125943ull,
+ 448415508583941462ull}},
+{{0ull, 5833639261072523264ull, 7216125243666700271ull,
+ 896831017167882925ull}},
+{{0ull, 4856076666956414976ull, 1443225048733340054ull,
+ 179366203433576585ull}},
+{{0ull, 9712153333912829952ull, 2886450097466680108ull,
+ 358732406867153170ull}},
+{{0ull, 977562594116108288ull, 5772900194933360217ull,
+ 717464813734306340ull}},
+{{0ull, 7574210148307042304ull, 1154580038986672043ull,
+ 143492962746861268ull}},
+{{0ull, 15148420296614084608ull, 2309160077973344086ull,
+ 286985925493722536ull}},
+{{0ull, 11850096519518617600ull, 4618320155946688173ull,
+ 573971850987445072ull}},
+{{0ull, 5253448965327683584ull, 9236640311893376347ull,
+ 1147943701974890144ull}},
+{{0ull, 4740038607807447040ull, 16604723321346316562ull,
+ 229588740394978028ull}},
+{{0ull, 9480077215614894080ull, 14762702568983081508ull,
+ 459177480789956057ull}},
+{{0ull, 513410357520236544ull, 11078661064256611401ull,
+ 918354961579912115ull}},
+{{0ull, 3792030886245957632ull, 2215732212851322280ull,
+ 183670992315982423ull}},
+{{0ull, 7584061772491915264ull, 4431464425702644560ull,
+ 367341984631964846ull}},
+{{0ull, 15168123544983830528ull, 8862928851405289120ull,
+ 734683969263929692ull}},
+{{0ull, 10412322338480586752ull, 9151283399764878470ull,
+ 146936793852785938ull}},
+{{0ull, 2377900603251621888ull, 18302566799529756941ull,
+ 293873587705571876ull}},
+{{0ull, 4755801206503243776ull, 18158389525349962266ull,
+ 587747175411143753ull}},
+{{0ull, 9511602413006487552ull, 17870034976990372916ull,
+ 1175494350822287507ull}},
+{{0ull, 12970366926827028480ull, 10952704624881895229ull,
+ 235098870164457501ull}},
+{{0ull, 7493989779944505344ull, 3458665176054238843ull,
+ 470197740328915003ull}},
+{{0ull, 14987979559889010688ull, 6917330352108477686ull,
+ 940395480657830006ull}},
+{{0ull, 10376293541461622784ull, 5072814885163605860ull,
+ 188079096131566001ull}},
+{{0ull, 2305843009213693952ull, 10145629770327211721ull,
+ 376158192263132002ull}},
+{{0ull, 4611686018427387904ull, 1844515466944871826ull,
+ 752316384526264005ull}},
+{{0ull, 4611686018427387904ull, 368903093388974365ull,
+ 150463276905252801ull}},
+{{0ull, 9223372036854775808ull, 737806186777948730ull,
+ 300926553810505602ull}},
+{{0ull, 0ull, 1475612373555897461ull, 601853107621011204ull}},
+{{0ull, 0ull, 2951224747111794922ull, 1203706215242022408ull}},
+{{0ull, 0ull, 11658291393648089954ull, 240741243048404481ull}},
+{{0ull, 0ull, 4869838713586628292ull, 481482486096808963ull}},
+{{0ull, 0ull, 9739677427173256584ull, 962964972193617926ull}},
+{{0ull, 0ull, 5637284300176561640ull, 192592994438723585ull}},
+{{0ull, 0ull, 11274568600353123280ull, 385185988877447170ull}},
+{{0ull, 0ull, 4102393126996694944ull, 770371977754894341ull}},
+{{0ull, 0ull, 4509827440141249312ull, 154074395550978868ull}},
+{{0ull, 0ull, 9019654880282498624ull, 308148791101957736ull}},
+{{0ull, 0ull, 18039309760564997248ull, 616297582203915472ull}},
+{{0ull, 0ull, 17631875447420442880ull, 1232595164407830945ull}},
+{{0ull, 0ull, 3526375089484088576ull, 246519032881566189ull}},
+{{0ull, 0ull, 7052750178968177152ull, 493038065763132378ull}},
+{{0ull, 0ull, 14105500357936354304ull, 986076131526264756ull}},
+{{0ull, 0ull, 6510448886329181184ull, 197215226305252951ull}},
+{{0ull, 0ull, 13020897772658362368ull, 394430452610505902ull}},
+{{0ull, 0ull, 7595051471607173120ull, 788860905221011805ull}},
+{{0ull, 0ull, 1519010294321434624ull, 157772181044202361ull}},
+{{0ull, 0ull, 3038020588642869248ull, 315544362088404722ull}},
+{{0ull, 0ull, 6076041177285738496ull, 631088724176809444ull}},
+{{0ull, 0ull, 12152082354571476992ull, 1262177448353618888ull}},
+{{0ull, 0ull, 13498462915140026368ull, 252435489670723777ull}},
+{{0ull, 0ull, 8550181756570501120ull, 504870979341447555ull}},
+{{0ull, 0ull, 17100363513141002240ull, 1009741958682895110ull}},
+{{0ull, 0ull, 3420072702628200448ull, 201948391736579022ull}},
+{{0ull, 0ull, 6840145405256400896ull, 403896783473158044ull}},
+{{0ull, 0ull, 13680290810512801792ull, 807793566946316088ull}},
+{{0ull, 0ull, 13804104606328291328ull, 161558713389263217ull}},
+{{0ull, 0ull, 9161465138947031040ull, 323117426778526435ull}},
+{{0ull, 0ull, 18322930277894062080ull, 646234853557052870ull}},
+{{0ull, 0ull, 3664586055578812416ull, 129246970711410574ull}},
+{{0ull, 0ull, 7329172111157624832ull, 258493941422821148ull}},
+{{0ull, 0ull, 14658344222315249664ull, 516987882845642296ull}},
+{{0ull, 0ull, 10869944370920947712ull, 1033975765691284593ull}},
+{{0ull, 0ull, 13242035318409920512ull, 206795153138256918ull}},
+{{0ull, 0ull, 8037326563110289408ull, 413590306276513837ull}},
+{{0ull, 0ull, 16074653126220578816ull, 827180612553027674ull}},
+{{0ull, 0ull, 17972325884211757056ull, 165436122510605534ull}},
+{{0ull, 0ull, 17497907694713962496ull, 330872245021211069ull}},
+{{0ull, 0ull, 16549071315718373376ull, 661744490042422139ull}},
+{{0ull, 0ull, 18067209522111315968ull, 132348898008484427ull}},
+{{0ull, 0ull, 17687674970513080320ull, 264697796016968855ull}},
+{{0ull, 0ull, 16928605867316609024ull, 529395592033937711ull}},
+{{0ull, 0ull, 15410467660923666432ull, 1058791184067875423ull}},
+{{0ull, 0ull, 14150139976410464256ull, 211758236813575084ull}},
+{{0ull, 0ull, 9853535879111376896ull, 423516473627150169ull}},
+{{0ull, 0ull, 1260327684513202176ull, 847032947254300339ull}},
+{{0ull, 0ull, 15009460795870281728ull, 169406589450860067ull}},
+{{0ull, 0ull, 11572177518031011840ull, 338813178901720135ull}},
+{{0ull, 0ull, 4697610962352472064ull, 677626357803440271ull}},
+{{0ull, 0ull, 4628871007212404736ull, 135525271560688054ull}},
+{{0ull, 0ull, 9257742014424809472ull, 271050543121376108ull}},
+{{0ull, 0ull, 68739955140067328ull, 542101086242752217ull}},
+{{0ull, 0ull, 137479910280134656ull, 1084202172485504434ull}},
+{{0ull, 0ull, 14784891241023668224ull, 216840434497100886ull}},
+{{0ull, 0ull, 11123038408337784832ull, 433680868994201773ull}},
+{{0ull, 0ull, 3799332742966018048ull, 867361737988403547ull}},
+{{0ull, 0ull, 8138564178077024256ull, 173472347597680709ull}},
+{{0ull, 0ull, 16277128356154048512ull, 346944695195361418ull}},
+{{0ull, 0ull, 14107512638598545408ull, 693889390390722837ull}},
+{{0ull, 0ull, 10200200157203529728ull, 138777878078144567ull}},
+{{0ull, 0ull, 1953656240697507840ull, 277555756156289135ull}},
+{{0ull, 0ull, 3907312481395015680ull, 555111512312578270ull}},
+{{0ull, 0ull, 7814624962790031360ull, 1110223024625156540ull}},
+{{0ull, 0ull, 1562924992558006272ull, 222044604925031308ull}},
+{{0ull, 0ull, 3125849985116012544ull, 444089209850062616ull}},
+{{0ull, 0ull, 6251699970232025088ull, 888178419700125232ull}},
+{{0ull, 0ull, 8629037623530225664ull, 177635683940025046ull}},
+{{0ull, 0ull, 17258075247060451328ull, 355271367880050092ull}},
+{{0ull, 0ull, 16069406420411351040ull, 710542735760100185ull}},
+{{0ull, 0ull, 3213881284082270208ull, 142108547152020037ull}},
+{{0ull, 0ull, 6427762568164540416ull, 284217094304040074ull}},
+{{0ull, 0ull, 12855525136329080832ull, 568434188608080148ull}},
+{{0ull, 0ull, 7264306198948610048ull, 1136868377216160297ull}},
+{{0ull, 0ull, 8831558869273542656ull, 227373675443232059ull}},
+{{0ull, 0ull, 17663117738547085312ull, 454747350886464118ull}},
+{{0ull, 0ull, 16879491403384619008ull, 909494701772928237ull}},
+{{0ull, 0ull, 10754595910160744448ull, 181898940354585647ull}},
+{{0ull, 0ull, 3062447746611937280ull, 363797880709171295ull}},
+{{0ull, 0ull, 6124895493223874560ull, 727595761418342590ull}},
+{{0ull, 0ull, 1224979098644774912ull, 145519152283668518ull}},
+{{0ull, 0ull, 2449958197289549824ull, 291038304567337036ull}},
+{{0ull, 0ull, 4899916394579099648ull, 582076609134674072ull}},
+{{0ull, 0ull, 9799832789158199296ull, 1164153218269348144ull}},
+{{0ull, 0ull, 16717361816799281152ull, 232830643653869628ull}},
+{{0ull, 0ull, 14987979559889010688ull, 465661287307739257ull}},
+{{0ull, 0ull, 11529215046068469760ull, 931322574615478515ull}},
+{{0ull, 0ull, 2305843009213693952ull, 186264514923095703ull}},
+{{0ull, 0ull, 4611686018427387904ull, 372529029846191406ull}},
+{{0ull, 0ull, 9223372036854775808ull, 745058059692382812ull}},
+{{0ull, 0ull, 9223372036854775808ull, 149011611938476562ull}},
+{{0ull, 0ull, 0ull, 298023223876953125ull}},
+{{0ull, 0ull, 0ull, 596046447753906250ull}},
+{{0ull, 0ull, 0ull, 1192092895507812500ull}},
+{{0ull, 0ull, 0ull, 238418579101562500ull}},
+{{0ull, 0ull, 0ull, 476837158203125000ull}},
+{{0ull, 0ull, 0ull, 953674316406250000ull}},
+{{0ull, 0ull, 0ull, 190734863281250000ull}},
+{{0ull, 0ull, 0ull, 381469726562500000ull}},
+{{0ull, 0ull, 0ull, 762939453125000000ull}},
+{{0ull, 0ull, 0ull, 152587890625000000ull}},
+{{0ull, 0ull, 0ull, 305175781250000000ull}},
+{{0ull, 0ull, 0ull, 610351562500000000ull}},
+{{0ull, 0ull, 0ull, 1220703125000000000ull}},
+{{0ull, 0ull, 0ull, 244140625000000000ull}},
+{{0ull, 0ull, 0ull, 488281250000000000ull}},
+{{0ull, 0ull, 0ull, 976562500000000000ull}},
+{{0ull, 0ull, 0ull, 195312500000000000ull}},
+{{0ull, 0ull, 0ull, 390625000000000000ull}},
+{{0ull, 0ull, 0ull, 781250000000000000ull}},
+{{0ull, 0ull, 0ull, 156250000000000000ull}},
+{{0ull, 0ull, 0ull, 312500000000000000ull}},
+{{0ull, 0ull, 0ull, 625000000000000000ull}},
+{{0ull, 0ull, 0ull, 1250000000000000000ull}},
+{{0ull, 0ull, 0ull, 250000000000000000ull}},
+{{0ull, 0ull, 0ull, 500000000000000000ull}},
+{{0ull, 0ull, 0ull, 1000000000000000000ull}},
+{{0ull, 0ull, 0ull, 200000000000000000ull}},
+{{0ull, 0ull, 0ull, 400000000000000000ull}},
+{{0ull, 0ull, 0ull, 800000000000000000ull}},
+{{0ull, 0ull, 0ull, 160000000000000000ull}},
+{{0ull, 0ull, 0ull, 320000000000000000ull}},
+{{0ull, 0ull, 0ull, 640000000000000000ull}},
+{{0ull, 0ull, 0ull, 1280000000000000000ull}},
+{{0ull, 0ull, 0ull, 256000000000000000ull}},
+{{0ull, 0ull, 0ull, 512000000000000000ull}},
+{{0ull, 0ull, 0ull, 1024000000000000000ull}},
+{{0ull, 0ull, 0ull, 204800000000000000ull}},
+{{0ull, 0ull, 0ull, 409600000000000000ull}},
+{{0ull, 0ull, 0ull, 819200000000000000ull}},
+{{0ull, 0ull, 0ull, 163840000000000000ull}},
+{{0ull, 0ull, 0ull, 327680000000000000ull}},
+{{0ull, 0ull, 0ull, 655360000000000000ull}},
+{{0ull, 0ull, 0ull, 131072000000000000ull}},
+{{0ull, 0ull, 0ull, 262144000000000000ull}},
+{{0ull, 0ull, 0ull, 524288000000000000ull}},
+{{0ull, 0ull, 0ull, 1048576000000000000ull}},
+{{0ull, 0ull, 0ull, 209715200000000000ull}},
+{{0ull, 0ull, 0ull, 419430400000000000ull}},
+{{0ull, 0ull, 0ull, 838860800000000000ull}},
+{{0ull, 0ull, 0ull, 167772160000000000ull}},
+{{0ull, 0ull, 0ull, 335544320000000000ull}},
+{{0ull, 0ull, 0ull, 671088640000000000ull}},
+{{0ull, 0ull, 0ull, 134217728000000000ull}},
+{{0ull, 0ull, 0ull, 268435456000000000ull}},
+{{0ull, 0ull, 0ull, 536870912000000000ull}},
+{{0ull, 0ull, 0ull, 1073741824000000000ull}},
+{{0ull, 0ull, 0ull, 214748364800000000ull}},
+{{0ull, 0ull, 0ull, 429496729600000000ull}},
+{{0ull, 0ull, 0ull, 858993459200000000ull}},
+{{0ull, 0ull, 0ull, 171798691840000000ull}},
+{{0ull, 0ull, 0ull, 343597383680000000ull}},
+{{0ull, 0ull, 0ull, 687194767360000000ull}},
+{{0ull, 0ull, 0ull, 137438953472000000ull}},
+{{0ull, 0ull, 0ull, 274877906944000000ull}},
+{{0ull, 0ull, 0ull, 549755813888000000ull}},
+{{0ull, 0ull, 0ull, 1099511627776000000ull}},
+{{0ull, 0ull, 0ull, 219902325555200000ull}},
+{{0ull, 0ull, 0ull, 439804651110400000ull}},
+{{0ull, 0ull, 0ull, 879609302220800000ull}},
+{{0ull, 0ull, 0ull, 175921860444160000ull}},
+{{0ull, 0ull, 0ull, 351843720888320000ull}},
+{{0ull, 0ull, 0ull, 703687441776640000ull}},
+{{0ull, 0ull, 0ull, 140737488355328000ull}},
+{{0ull, 0ull, 0ull, 281474976710656000ull}},
+{{0ull, 0ull, 0ull, 562949953421312000ull}},
+{{0ull, 0ull, 0ull, 1125899906842624000ull}},
+{{0ull, 0ull, 0ull, 225179981368524800ull}},
+{{0ull, 0ull, 0ull, 450359962737049600ull}},
+{{0ull, 0ull, 0ull, 900719925474099200ull}},
+{{0ull, 0ull, 0ull, 180143985094819840ull}},
+{{0ull, 0ull, 0ull, 360287970189639680ull}},
+{{0ull, 0ull, 0ull, 720575940379279360ull}},
+{{0ull, 0ull, 0ull, 144115188075855872ull}},
+{{0ull, 0ull, 0ull, 288230376151711744ull}},
+{{0ull, 0ull, 0ull, 576460752303423488ull}},
+{{0ull, 0ull, 0ull, 1152921504606846976ull}},
+{{3689348814741910324ull, 3689348814741910323ull,
+ 3689348814741910323ull, 230584300921369395ull}},
+{{7378697629483820647ull, 7378697629483820646ull,
+ 7378697629483820646ull, 461168601842738790ull}},
+{{14757395258967641293ull, 14757395258967641292ull,
+ 14757395258967641292ull, 922337203685477580ull}},
+{{17708874310761169552ull, 10330176681277348904ull,
+ 2951479051793528258ull, 184467440737095516ull}},
+{{16971004547812787487ull, 2213609288845146193ull,
+ 5902958103587056517ull, 368934881474191032ull}},
+{{15495265021916023358ull, 4427218577690292387ull,
+ 11805916207174113034ull, 737869762948382064ull}},
+{{3099053004383204672ull, 11953490159763789447ull,
+ 17118578500402463899ull, 147573952589676412ull}},
+{{6198106008766409343ull, 5460236245818027278ull,
+ 15790412927095376183ull, 295147905179352825ull}},
+{{12396212017532818686ull, 10920472491636054556ull,
+ 13134081780481200750ull, 590295810358705651ull}},
+{{6345679961356085756ull, 3394200909562557497ull,
+ 7821419487252849885ull, 1180591620717411303ull}},
+{{1269135992271217152ull, 11746886626138242469ull,
+ 12632330341676300946ull, 236118324143482260ull}},
+{{2538271984542434303ull, 5047029178566933322ull,
+ 6817916609643050277ull, 472236648286964521ull}},
+{{5076543969084868605ull, 10094058357133866644ull,
+ 13635833219286100554ull, 944473296573929042ull}},
+{{1015308793816973721ull, 5708160486168683652ull,
+ 10105864273341040757ull, 188894659314785808ull}},
+{{2030617587633947442ull, 11416320972337367304ull,
+ 1764984472972529898ull, 377789318629571617ull}},
+{{4061235175267894884ull, 4385897870965182992ull,
+ 3529968945945059797ull, 755578637259143234ull}},
+{{11880293479279309947ull, 4566528388934946921ull,
+ 15463389048156653252ull, 151115727451828646ull}},
+{{5313842884849068277ull, 9133056777869893843ull,
+ 12480034022603754888ull, 302231454903657293ull}},
+{{10627685769698136554ull, 18266113555739787686ull,
+ 6513323971497958160ull, 604462909807314587ull}},
+{{2808627465686721491ull, 18085483037770023757ull,
+ 13026647942995916321ull, 1208925819614629174ull}},
+{{7940423122621164945ull, 3617096607554004751ull,
+ 17362724847566824557ull, 241785163922925834ull}},
+{{15880846245242329890ull, 7234193215108009502ull,
+ 16278705621424097498ull, 483570327845851669ull}},
+{{13314948416775108163ull, 14468386430216019005ull,
+ 14110667169138643380ull, 967140655691703339ull}},
+{{17420384942322662926ull, 17651072545010845093ull,
+ 17579528692795369968ull, 193428131138340667ull}},
+{{16394025810935774235ull, 16855401016312138571ull,
+ 16712313311881188321ull, 386856262276681335ull}},
+{{14341307548161996854ull, 15264057958914725527ull,
+ 14977882550052825027ull, 773712524553362671ull}},
+{{2868261509632399371ull, 14120858036008676075ull,
+ 6684925324752475328ull, 154742504910672534ull}},
+{{5736523019264798742ull, 9794971998307800534ull,
+ 13369850649504950657ull, 309485009821345068ull}},
+{{11473046038529597483ull, 1143199922906049452ull,
+ 8292957225300349699ull, 618970019642690137ull}},
+{{4499348003349643349ull, 2286399845812098905ull,
+ 16585914450600699398ull, 1237940039285380274ull}},
+{{8278567230153749317ull, 7835977598646240427ull,
+ 18074578149087781172ull, 247588007857076054ull}},
+{{16557134460307498633ull, 15671955197292480854ull,
+ 17702412224466010728ull, 495176015714152109ull}},
+{{14667524846905445649ull, 12897166320875410093ull,
+ 16958080375222469841ull, 990352031428304219ull}},
+{{14001551413606820100ull, 2579433264175082018ull,
+ 18149011334012135261ull, 198070406285660843ull}},
+{{9556358753504088583ull, 5158866528350164037ull,
+ 17851278594314718906ull, 396140812571321687ull}},
+{{665973433298625550ull, 10317733056700328075ull,
+ 17255813114919886196ull, 792281625142643375ull}},
+{{3822543501401635434ull, 5752895426081975938ull,
+ 3451162622983977239ull, 158456325028528675ull}},
+{{7645087002803270867ull, 11505790852163951876ull,
+ 6902325245967954478ull, 316912650057057350ull}},
+{{15290174005606541733ull, 4564837630618352136ull,
+ 13804650491935908957ull, 633825300114114700ull}},
+{{12133603937503531849ull, 9129675261236704273ull,
+ 9162556910162266298ull, 1267650600228229401ull}},
+{{9805418416984527017ull, 16583330311214982147ull,
+ 5521860196774363582ull, 253530120045645880ull}},
+{{1164092760259502417ull, 14719916548720412679ull,
+ 11043720393548727165ull, 507060240091291760ull}},
+{{2328185520519004833ull, 10993089023731273742ull,
+ 3640696713387902715ull, 1014120480182583521ull}},
+{{11533683548329531937ull, 5887966619488165071ull,
+ 4417488157419490866ull, 202824096036516704ull}},
+{{4620623022949512257ull, 11775933238976330143ull,
+ 8834976314838981732ull, 405648192073033408ull}},
+{{9241246045899024513ull, 5105122404243108670ull,
+ 17669952629677963465ull, 811296384146066816ull}},
+{{5537598023921715226ull, 4710373295590532057ull,
+ 7223339340677503016ull, 162259276829213363ull}},
+{{11075196047843430452ull, 9420746591181064114ull,
+ 14446678681355006032ull, 324518553658426726ull}},
+{{3703648021977309287ull, 394749108652576613ull,
+ 10446613289000460449ull, 649037107316853453ull}},
+{{740729604395461858ull, 7457647451214335969ull,
+ 13157369102025823059ull, 129807421463370690ull}},
+{{1481459208790923715ull, 14915294902428671938ull,
+ 7867994130342094502ull, 259614842926741381ull}},
+{{2962918417581847430ull, 11383845731147792260ull,
+ 15735988260684189005ull, 519229685853482762ull}},
+{{5925836835163694859ull, 4320947388586032904ull,
+ 13025232447658826395ull, 1038459371706965525ull}},
+{{15942562626000380265ull, 864189477717206580ull,
+ 2605046489531765279ull, 207691874341393105ull}},
+{{13438381178291208914ull, 1728378955434413161ull,
+ 5210092979063530558ull, 415383748682786210ull}},
+{{8430018282872866211ull, 3456757910868826323ull,
+ 10420185958127061116ull, 830767497365572420ull}},
+{{16443398915542214535ull, 4380700396915675587ull,
+ 2084037191625412223ull, 166153499473114484ull}},
+{{14440053757374877454ull, 8761400793831351175ull,
+ 4168074383250824446ull, 332306998946228968ull}},
+{{10433363441040203292ull, 17522801587662702351ull,
+ 8336148766501648892ull, 664613997892457936ull}},
+{{16844067947175681952ull, 14572606761758271439ull,
+ 5356578568042240101ull, 132922799578491587ull}},
+{{15241391820641812287ull, 10698469449806991263ull,
+ 10713157136084480203ull, 265845599156983174ull}},
+{{12036039567574072957ull, 2950194825904430911ull,
+ 2979570198459408791ull, 531691198313966349ull}},
+{{5625335061438594297ull, 5900389651808861823ull,
+ 5959140396918817582ull, 1063382396627932698ull}},
+{{12193113456513449829ull, 1180077930361772364ull,
+ 12259874523609494486ull, 212676479325586539ull}},
+{{5939482839317348042ull, 2360155860723544729ull,
+ 6073004973509437356ull, 425352958651173079ull}},
+{{11878965678634696084ull, 4720311721447089458ull,
+ 12146009947018874712ull, 850705917302346158ull}},
+{{13443839579952670187ull, 944062344289417891ull,
+ 13497248433629505912ull, 170141183460469231ull}},
+{{8440935086195788757ull, 1888124688578835783ull,
+ 8547752793549460208ull, 340282366920938463ull}},
+{{16881870172391577514ull, 3776249377157671566ull,
+ 17095505587098920416ull, 680564733841876926ull}},
+{{14444420478704046473ull, 8133947504915354959ull,
+ 7108449932161694406ull, 136112946768375385ull}},
+{{10442096883698541329ull, 16267895009830709919ull,
+ 14216899864323388812ull, 272225893536750770ull}},
+{{2437449693687531042ull, 14089045945951868223ull,
+ 9987055654937226009ull, 544451787073501541ull}},
+{{4874899387375062083ull, 9731347818194184830ull,
+ 1527367236164900403ull, 1088903574147003083ull}},
+{{4664328692216922740ull, 5635618378380747289ull,
+ 11373519891458711050ull, 217780714829400616ull}},
+{{9328657384433845480ull, 11271236756761494578ull,
+ 4300295709207870484ull, 435561429658801233ull}},
+{{210570695158139343ull, 4095729439813437541ull, 8600591418415740969ull,
+ 871122859317602466ull}},
+{{3731462953773538192ull, 819145887962687508ull, 5409467098425058517ull,
+ 174224571863520493ull}},
+{{7462925907547076384ull, 1638291775925375016ull,
+ 10818934196850117034ull, 348449143727040986ull}},
+{{14925851815094152767ull, 3276583551850750032ull,
+ 3191124319990682452ull, 696898287454081973ull}},
+{{10363867992502651200ull, 655316710370150006ull,
+ 11706271308223867460ull, 139379657490816394ull}},
+{{2280991911295750784ull, 1310633420740300013ull,
+ 4965798542738183304ull, 278759314981632789ull}},
+{{4561983822591501568ull, 2621266841480600026ull,
+ 9931597085476366608ull, 557518629963265578ull}},
+{{9123967645183003135ull, 5242533682961200052ull,
+ 1416450097243181600ull, 1115037259926531157ull}},
+{{16582188788004241920ull, 8427204366076060656ull,
+ 7661987648932456966ull, 223007451985306231ull}},
+{{14717633502298932224ull, 16854408732152121313ull,
+ 15323975297864913932ull, 446014903970612462ull}},
+{{10988522930888312831ull, 15262073390594691011ull,
+ 12201206522020276249ull, 892029807941224925ull}},
+{{2197704586177662567ull, 17809809937086579495ull,
+ 2440241304404055249ull, 178405961588244985ull}},
+{{4395409172355325133ull, 17172875800463607374ull,
+ 4880482608808110499ull, 356811923176489970ull}},
+{{8790818344710650265ull, 15899007527217663132ull,
+ 9760965217616220999ull, 713623846352979940ull}},
+{{5447512483684040377ull, 17937196764411173919ull,
+ 1952193043523244199ull, 142724769270595988ull}},
+{{10895024967368080753ull, 17427649455112796222ull,
+ 3904386087046488399ull, 285449538541191976ull}},
+{{3343305861026609889ull, 16408554836516040829ull,
+ 7808772174092976799ull, 570899077082383952ull}},
+{{6686611722053219777ull, 14370365599322530042ull,
+ 15617544348185953599ull, 1141798154164767904ull}},
+{{1337322344410643956ull, 13942119564090236978ull,
+ 17880904128604832012ull, 228359630832953580ull}},
+{{2674644688821287911ull, 9437495054470922340ull,
+ 17315064183500112409ull, 456719261665907161ull}},
+{{5349289377642575822ull, 428246035232293064ull,
+ 16183384293290673203ull, 913438523331814323ull}},
+{{1069857875528515165ull, 3774998021788368936ull,
+ 14304723302883865610ull, 182687704666362864ull}},
+{{2139715751057030329ull, 7549996043576737872ull,
+ 10162702532058179604ull, 365375409332725729ull}},
+{{4279431502114060657ull, 15099992087153475744ull,
+ 1878660990406807592ull, 730750818665451459ull}},
+{{855886300422812132ull, 6709347232172605472ull,
+ 15133127457049002811ull, 146150163733090291ull}},
+{{1711772600845624263ull, 13418694464345210944ull,
+ 11819510840388454006ull, 292300327466180583ull}},
+{{3423545201691248526ull, 8390644854980870272ull,
+ 5192277607067356397ull, 584600654932361167ull}},
+{{6847090403382497052ull, 16781289709961740544ull,
+ 10384555214134712794ull, 1169201309864722334ull}},
+{{8748115710160320057ull, 14424304386218079078ull,
+ 16834306301794583851ull, 233840261972944466ull}},
+{{17496231420320640114ull, 10401864698726606540ull,
+ 15221868529879616087ull, 467680523945888933ull}},
+{{16545718766931728611ull, 2356985323743661465ull,
+ 11996992986049680559ull, 935361047891777867ull}},
+{{6998492568128256046ull, 4160745879490642616ull,
+ 9778096226693756758ull, 187072209578355573ull}},
+{{13996985136256512091ull, 8321491758981285232ull,
+ 1109448379677961900ull, 374144419156711147ull}},
+{{9547226198803472566ull, 16642983517962570465ull,
+ 2218896759355923800ull, 748288838313422294ull}},
+{{16666840498728335806ull, 18085991962560155385ull,
+ 15201174610838826052ull, 149657767662684458ull}},
+{{14886936923747119996ull, 17725239851410759155ull,
+ 11955605147968100489ull, 299315535325368917ull}},
+{{11327129773784688376ull, 17003735629111966695ull,
+ 5464466222226649363ull, 598631070650737835ull}},
+{{4207515473859825135ull, 15560727184514381775ull,
+ 10928932444453298727ull, 1197262141301475670ull}},
+{{8220200724255785674ull, 10490843066386697001ull,
+ 2185786488890659745ull, 239452428260295134ull}},
+{{16440401448511571347ull, 2534942059063842386ull,
+ 4371572977781319491ull, 478904856520590268ull}},
+{{14434058823313591078ull, 5069884118127684773ull,
+ 8743145955562638982ull, 957809713041180536ull}},
+{{6576160579404628539ull, 12082023267851267924ull,
+ 5437978005854438119ull, 191561942608236107ull}},
+{{13152321158809257078ull, 5717302461992984232ull,
+ 10875956011708876239ull, 383123885216472214ull}},
+{{7857898243908962539ull, 11434604923985968465ull,
+ 3305167949708200862ull, 766247770432944429ull}},
+{{5260928463523702831ull, 5976269799539104016ull,
+ 15418428848909281465ull, 153249554086588885ull}},
+{{10521856927047405662ull, 11952539599078208032ull,
+ 12390113624109011314ull, 306499108173177771ull}},
+{{2596969780385259708ull, 5458335124446864449ull,
+ 6333483174508471013ull, 612998216346355543ull}},
+{{5193939560770519416ull, 10916670248893728898ull,
+ 12666966349016942026ull, 1225996432692711086ull}},
+{{1038787912154103884ull, 9562031679262566426ull,
+ 6222742084545298728ull, 245199286538542217ull}},
+{{2077575824308207767ull, 677319284815581236ull,
+ 12445484169090597457ull, 490398573077084434ull}},
+{{4155151648616415533ull, 1354638569631162472ull,
+ 6444224264471643298ull, 980797146154168869ull}},
+{{15588425588690924400ull, 7649625343410053140ull,
+ 16046240111861969952ull, 196159429230833773ull}},
+{{12730107103672297183ull, 15299250686820106281ull,
+ 13645736150014388288ull, 392318858461667547ull}},
+{{7013470133635042750ull, 12151757299930660947ull,
+ 8844728226319224961ull, 784637716923335095ull}},
+{{12470740470952739520ull, 6119700274728042512ull,
+ 1768945645263844992ull, 156927543384667019ull}},
+{{6494736868195927423ull, 12239400549456085025ull,
+ 3537891290527689984ull, 313855086769334038ull}},
+{{12989473736391854846ull, 6032057025202618434ull,
+ 7075782581055379969ull, 627710173538668076ull}},
+{{7532203399074158076ull, 12064114050405236869ull,
+ 14151565162110759938ull, 1255420347077336152ull}},
+{{16263835938782472908ull, 2412822810081047373ull,
+ 10209010661905972634ull, 251084069415467230ull}},
+{{14080927803855394200ull, 4825645620162094747ull,
+ 1971277250102393652ull, 502168138830934461ull}},
+{{9715111534001236784ull, 9651291240324189495ull,
+ 3942554500204787304ull, 1004336277661868922ull}},
+{{5632371121542157680ull, 5619607062806748222ull,
+ 8167208529524778107ull, 200867255532373784ull}},
+{{11264742243084315360ull, 11239214125613496444ull,
+ 16334417059049556214ull, 401734511064747568ull}},
+{{4082740412459079104ull, 4031684177517441273ull,
+ 14222090044389560813ull, 803469022129495137ull}},
+{{11884594526717546791ull, 806336835503488254ull,
+ 10223115638361732809ull, 160693804425899027ull}},
+{{5322444979725541965ull, 1612673671006976509ull,
+ 1999487203013914002ull, 321387608851798055ull}},
+{{10644889959451083930ull, 3225347342013953018ull,
+ 3998974406027828004ull, 642775217703596110ull}},
+{{9507675621374037433ull, 15402464727370431896ull,
+ 799794881205565600ull, 128555043540719222ull}},
+{{568607169038523249ull, 12358185381031312177ull,
+ 1599589762411131201ull, 257110087081438444ull}},
+{{1137214338077046498ull, 6269626688353072738ull,
+ 3199179524822262403ull, 514220174162876888ull}},
+{{2274428676154092995ull, 12539253376706145476ull,
+ 6398359049644524806ull, 1028440348325753776ull}},
+{{11522932179456549569ull, 9886548304825049741ull,
+ 4969020624670815284ull, 205688069665150755ull}},
+{{4599120285203547521ull, 1326352535940547867ull,
+ 9938041249341630569ull, 411376139330301510ull}},
+{{9198240570407095042ull, 2652705071881095734ull,
+ 1429338424973709522ull, 822752278660603021ull}},
+{{9218345743565239655ull, 11598587458601950116ull,
+ 3975216499736652227ull, 164550455732120604ull}},
+{{18436691487130479310ull, 4750430843494348616ull,
+ 7950432999473304455ull, 329100911464241208ull}},
+{{18426638900551407003ull, 9500861686988697233ull,
+ 15900865998946608910ull, 658201822928482416ull}},
+{{18442723039077922694ull, 5589521152139649769ull,
+ 6869522014531232105ull, 131640364585696483ull}},
+{{18438702004446293771ull, 11179042304279299539ull,
+ 13739044029062464210ull, 263280729171392966ull}},
+{{18430659935183035926ull, 3911340534849047463ull,
+ 9031343984415376805ull, 526561458342785933ull}},
+{{18414575796656520236ull, 7822681069698094927ull,
+ 18062687968830753610ull, 1053122916685571866ull}},
+{{14750961603557035017ull, 5253885028681529308ull,
+ 7301886408508061045ull, 210624583337114373ull}},
+{{11055179133404518418ull, 10507770057363058617ull,
+ 14603772817016122090ull, 421249166674228746ull}},
+{{3663614193099485219ull, 2568796041016565619ull,
+ 10760801560322692565ull, 842498333348457493ull}},
+{{8111420468103717691ull, 11581805652429044093ull,
+ 13220206756290269482ull, 168499666669691498ull}},
+{{16222840936207435381ull, 4716867231148536570ull,
+ 7993669438870987349ull, 336999333339382997ull}},
+{{13998937798705319145ull, 9433734462297073141ull,
+ 15987338877741974698ull, 673998666678765994ull}},
+{{13867834003966794799ull, 9265444521943235274ull,
+ 17954863034516036232ull, 134799733335753198ull}},
+{{9288923934224037981ull, 84144970176918933ull, 17462981995322520849ull,
+ 269599466671506397ull}},
+{{131103794738524346ull, 168289940353837867ull, 16479219916935490082ull,
+ 539198933343012795ull}},
+{{262207589477048692ull, 336579880707675734ull, 14511695760161428548ull,
+ 1078397866686025591ull}},
+{{11120487962121140708ull, 14824711235109176439ull,
+ 6591687966774196032ull, 215679573337205118ull}},
+{{3794231850532729800ull, 11202678396508801263ull,
+ 13183375933548392065ull, 431359146674410236ull}},
+{{7588463701065459600ull, 3958612719308050910ull,
+ 7920007793387232515ull, 862718293348820473ull}},
+{{12585739184438822890ull, 11859768988087341151ull,
+ 12652048002903177472ull, 172543658669764094ull}},
+{{6724734295168094164ull, 5272793902465130687ull,
+ 6857351932096803329ull, 345087317339528189ull}},
+{{13449468590336188327ull, 10545587804930261374ull,
+ 13714703864193606658ull, 690174634679056378ull}},
+{{2689893718067237666ull, 5798466375727962598ull,
+ 13810987217064452301ull, 138034926935811275ull}},
+{{5379787436134475331ull, 11596932751455925196ull,
+ 9175230360419352986ull, 276069853871622551ull}},
+{{10759574872268950662ull, 4747121429202298776ull,
+ 18350460720838705973ull, 552139707743245102ull}},
+{{3072405670828349707ull, 9494242858404597553ull,
+ 18254177367967860330ull, 1104279415486490205ull}},
+{{11682527578391400911ull, 1898848571680919510ull,
+ 3650835473593572066ull, 220855883097298041ull}},
+{{4918311083073250206ull, 3797697143361839021ull,
+ 7301670947187144132ull, 441711766194596082ull}},
+{{9836622166146500412ull, 7595394286723678042ull,
+ 14603341894374288264ull, 883423532389192164ull}},
+{{1967324433229300083ull, 12587125301570466578ull,
+ 17678063637842498945ull, 176684706477838432ull}},
+{{3934648866458600165ull, 6727506529431381540ull,
+ 16909383201975446275ull, 353369412955676865ull}},
+{{7869297732917200330ull, 13455013058862763080ull,
+ 15372022330241340934ull, 706738825911353731ull}},
+{{1573859546583440066ull, 2691002611772552616ull,
+ 6763753280790178510ull, 141347765182270746ull}},
+{{3147719093166880132ull, 5382005223545105232ull,
+ 13527506561580357020ull, 282695530364541492ull}},
+{{6295438186333760264ull, 10764010447090210464ull,
+ 8608269049451162424ull, 565391060729082985ull}},
+{{12590876372667520527ull, 3081276820470869312ull,
+ 17216538098902324849ull, 1130782121458165970ull}},
+{{6207524089275414429ull, 15373650623061815155ull,
+ 3443307619780464969ull, 226156424291633194ull}},
+{{12415048178550828857ull, 12300557172414078694ull,
+ 6886615239560929939ull, 452312848583266388ull}},
+{{6383352283392106098ull, 6154370271118605773ull,
+ 13773230479121859879ull, 904625697166532776ull}},
+{{12344716900904152190ull, 1230874054223721154ull,
+ 6443994910566282299ull, 180925139433306555ull}},
+{{6242689728098752763ull, 2461748108447442309ull,
+ 12887989821132564598ull, 361850278866613110ull}},
+{{12485379456197505525ull, 4923496216894884618ull,
+ 7329235568555577580ull, 723700557733226221ull}},
+{{17254471150207142398ull, 4674048058120887246ull,
+ 5155195928453025839ull, 144740111546645244ull}},
+{{16062198226704733180ull, 9348096116241774493ull,
+ 10310391856906051678ull, 289480223093290488ull}},
+{{13677652379699914743ull, 249448158773997371ull,
+ 2174039640102551741ull, 578960446186580977ull}},
+{{8908560685690277870ull, 498896317547994743ull, 4348079280205103482ull,
+ 1157920892373161954ull}},
+{{16539107396105696867ull, 3789128078251509271ull,
+ 15627011115008661989ull, 231584178474632390ull}},
+{{14631470718501842118ull, 7578256156503018543ull,
+ 12807278156307772362ull, 463168356949264781ull}},
+{{10816197363294132620ull, 15156512313006037087ull,
+ 7167812238905993108ull, 926336713898529563ull}},
+{{13231285916884557494ull, 6720651277343117740ull,
+ 12501608892006929591ull, 185267342779705912ull}},
+{{8015827760059563371ull, 13441302554686235481ull,
+ 6556473710304307566ull, 370534685559411825ull}},
+{{16031655520119126742ull, 8435861035662919346ull,
+ 13112947420608615133ull, 741069371118823650ull}},
+{{17963726362991466642ull, 12755218651358314838ull,
+ 2622589484121723026ull, 148213874223764730ull}},
+{{17480708652273381667ull, 7063693229007078061ull,
+ 5245178968243446053ull, 296427748447529460ull}},
+{{16514673230837211717ull, 14127386458014156123ull,
+ 10490357936486892106ull, 592855496895058920ull}},
+{{14582602387964871818ull, 9808028842318760631ull,
+ 2533971799264232597ull, 1185710993790117841ull}},
+{{17673915736560615657ull, 13029652212689483095ull,
+ 4196143174594756842ull, 237142198758023568ull}},
+{{16901087399411679697ull, 7612560351669414575ull,
+ 8392286349189513685ull, 474284397516047136ull}},
+{{15355430725113807777ull, 15225120703338829151ull,
+ 16784572698379027370ull, 948568795032094272ull}},
+{{14139132589248492525ull, 10423721770151586476ull,
+ 10735612169159626120ull, 189713759006418854ull}},
+{{9831521104787433434ull, 2400699466593621337ull,
+ 3024480264609700625ull, 379427518012837709ull}},
+{{1216298135865315252ull, 4801398933187242675ull,
+ 6048960529219401250ull, 758855036025675418ull}},
+{{11311306071398794020ull, 12028326230863179504ull,
+ 12277838550069611219ull, 151771007205135083ull}},
+{{4175868069088036424ull, 5609908388016807393ull,
+ 6108933026429670823ull, 303542014410270167ull}},
+{{8351736138176072848ull, 11219816776033614786ull,
+ 12217866052859341646ull, 607084028820540334ull}},
+{{16703472276352145696ull, 3992889478357677956ull,
+ 5988988032009131677ull, 1214168057641080669ull}},
+{{10719392084754249786ull, 4487926710413445914ull,
+ 15955192865369467628ull, 242833611528216133ull}},
+{{2992040095798947956ull, 8975853420826891829ull,
+ 13463641657029383640ull, 485667223056432267ull}},
+{{5984080191597895911ull, 17951706841653783658ull,
+ 8480539240349215664ull, 971334446112864535ull}},
+{{8575513667803399829ull, 18347736627298398024ull,
+ 1696107848069843132ull, 194266889222572907ull}},
+{{17151027335606799657ull, 18248729180887244432ull,
+ 3392215696139686265ull, 388533778445145814ull}},
+{{15855310597504047698ull, 18050714288064937249ull,
+ 6784431392279372531ull, 777067556890291628ull}},
+{{14239108563726540510ull, 18367538116580628742ull,
+ 12424932722681605475ull, 155413511378058325ull}},
+{{10031473053743529403ull, 18288332159451705869ull,
+ 6403121371653659335ull, 310827022756116651ull}},
+{{1616202033777507189ull, 18129920245193860123ull,
+ 12806242743307318671ull, 621654045512233302ull}},
+{{3232404067555014378ull, 17813096416678168630ull,
+ 7165741412905085727ull, 1243308091024466605ull}},
+{{8025178442994823522ull, 10941316912819454372ull,
+ 1433148282581017145ull, 248661618204893321ull}},
+{{16050356885989647044ull, 3435889751929357128ull,
+ 2866296565162034291ull, 497323236409786642ull}},
+{{13653969698269742472ull, 6871779503858714257ull,
+ 5732593130324068582ull, 994646472819573284ull}},
+{{13798840383879679464ull, 5063704715513653174ull,
+ 15903913885032455009ull, 198929294563914656ull}},
+{{9150936694049807312ull, 10127409431027306349ull,
+ 13361083696355358402ull, 397858589127829313ull}},
+{{18301873388099614624ull, 1808074788345061082ull,
+ 8275423319001165189ull, 795717178255658627ull}},
+{{14728421121845653895ull, 4050963772410922539ull,
+ 9033782293284053684ull, 159143435651131725ull}},
+{{11010098169981756173ull, 8101927544821845079ull,
+ 18067564586568107368ull, 318286871302263450ull}},
+{{3573452266253960730ull, 16203855089643690159ull,
+ 17688385099426663120ull, 636573742604526901ull}},
+{{7146904532507921459ull, 13960966105577828702ull,
+ 16930026125143774625ull, 1273147485209053803ull}},
+{{1429380906501584292ull, 13860239665341296710ull,
+ 14454051669254485894ull, 254629497041810760ull}},
+{{2858761813003168584ull, 9273735256973041804ull,
+ 10461359264799420173ull, 509258994083621521ull}},
+{{5717523626006337167ull, 100726440236531992ull, 2475974455889288731ull,
+ 1018517988167243043ull}},
+{{4832853539943177757ull, 14777540547014947691ull,
+ 11563241335403588715ull, 203703597633448608ull}},
+{{9665707079886355514ull, 11108337020320343766ull,
+ 4679738597097625815ull, 407407195266897217ull}},
+{{884670086063159411ull, 3769929966931135917ull, 9359477194195251631ull,
+ 814814390533794434ull}},
+{{7555631646696452529ull, 753985993386227183ull,
+ 16629290697806691619ull, 162962878106758886ull}},
+{{15111263293392905057ull, 1507971986772454366ull,
+ 14811837321903831622ull, 325925756213517773ull}},
+{{11775782513076258498ull, 3015943973544908733ull,
+ 11176930570098111628ull, 651851512427035547ull}},
+{{13423202946840982670ull, 603188794708981746ull,
+ 9614083743503442972ull, 130370302485407109ull}},
+{{8399661819972413723ull, 1206377589417963493ull, 781423413297334328ull,
+ 260740604970814219ull}},
+{{16799323639944827445ull, 2412755178835926986ull,
+ 1562846826594668656ull, 521481209941628438ull}},
+{{15151903206180103274ull, 4825510357671853973ull,
+ 3125693653189337312ull, 1042962419883256876ull}},
+{{6719729455977930978ull, 12033148515760101764ull,
+ 4314487545379777785ull, 208592483976651375ull}},
+{{13439458911955861956ull, 5619552957810651912ull,
+ 8628975090759555571ull, 417184967953302750ull}},
+{{8432173750202172296ull, 11239105915621303825ull,
+ 17257950181519111142ull, 834369935906605500ull}},
+{{9065132379524255106ull, 9626518812608081411ull,
+ 3451590036303822228ull, 166873987181321100ull}},
+{{18130264759048510211ull, 806293551506611206ull,
+ 6903180072607644457ull, 333747974362642200ull}},
+{{17813785444387468806ull, 1612587103013222413ull,
+ 13806360145215288914ull, 667495948725284400ull}},
+{{10941454718361314408ull, 15079912679570285775ull,
+ 2761272029043057782ull, 133499189745056880ull}},
+{{3436165363013077200ull, 11713081285431019935ull,
+ 5522544058086115565ull, 266998379490113760ull}},
+{{6872330726026154399ull, 4979418497152488254ull,
+ 11045088116172231131ull, 533996758980227520ull}},
+{{13744661452052308797ull, 9958836994304976508ull,
+ 3643432158634910646ull, 1067993517960455041ull}},
+{{2748932290410461760ull, 9370465028344815948ull,
+ 4418035246468892452ull, 213598703592091008ull}},
+{{5497864580820923519ull, 294185982980080280ull, 8836070492937784905ull,
+ 427197407184182016ull}},
+{{10995729161641847038ull, 588371965960160560ull,
+ 17672140985875569810ull, 854394814368364032ull}},
+{{9577843461812190054ull, 7496372022675852758ull,
+ 10913125826658934608ull, 170878962873672806ull}},
+{{708942849914828492ull, 14992744045351705517ull,
+ 3379507579608317600ull, 341757925747345613ull}},
+{{1417885699829656984ull, 11538744016993859418ull,
+ 6759015159216635201ull, 683515851494691226ull}},
+{{283577139965931397ull, 9686446432882592530ull, 5041151846585237363ull,
+ 136703170298938245ull}},
+{{567154279931862794ull, 926148792055633444ull, 10082303693170474727ull,
+ 273406340597876490ull}},
+{{1134308559863725587ull, 1852297584111266888ull,
+ 1717863312631397838ull, 546812681195752981ull}},
+{{2268617119727451174ull, 3704595168222533776ull,
+ 3435726625262795676ull, 1093625362391505962ull}},
+{{15211118682913131528ull, 11808965477870237724ull,
+ 8065842954536379781ull, 218725072478301192ull}},
+{{11975493292116711440ull, 5171186882030923833ull,
+ 16131685909072759563ull, 437450144956602384ull}},
+{{5504242510523871263ull, 10342373764061847667ull,
+ 13816627744435967510ull, 874900289913204769ull}},
+{{4790197316846684576ull, 16825870011780010826ull,
+ 17520720807854834794ull, 174980057982640953ull}},
+{{9580394633693369152ull, 15204995949850470036ull,
+ 16594697542000117973ull, 349960115965281907ull}},
+{{714045193677186687ull, 11963247825991388457ull,
+ 14742651010290684331ull, 699920231930563815ull}},
+{{11210855482961168307ull, 6081998379940188014ull,
+ 2948530202058136866ull, 139984046386112763ull}},
+{{3974966892212784998ull, 12163996759880376029ull,
+ 5897060404116273732ull, 279968092772225526ull}},
+{{7949933784425569996ull, 5881249446051200442ull,
+ 11794120808232547465ull, 559936185544451052ull}},
+{{15899867568851139992ull, 11762498892102400884ull,
+ 5141497542755543314ull, 1119872371088902105ull}},
+{{14248019957995958968ull, 17109895037388121469ull,
+ 1028299508551108662ull, 223974474217780421ull}},
+{{10049295842282366320ull, 15773046001066691323ull,
+ 2056599017102217325ull, 447948948435560842ull}},
+{{1651847610855181024ull, 13099347928423831031ull,
+ 4113198034204434651ull, 895897896871121684ull}},
+{{4019718336912946528ull, 2619869585684766206ull,
+ 15580034865808528223ull, 179179579374224336ull}},
+{{8039436673825893056ull, 5239739171369532412ull,
+ 12713325657907504830ull, 358359158748448673ull}},
+{{16078873347651786112ull, 10479478342739064824ull,
+ 6979907242105458044ull, 716718317496897347ull}},
+{{3215774669530357223ull, 5785244483289723288ull,
+ 8774679077904912255ull, 143343663499379469ull}},
+{{6431549339060714445ull, 11570488966579446576ull,
+ 17549358155809824510ull, 286687326998758938ull}},
+{{12863098678121428890ull, 4694233859449341536ull,
+ 16651972237910097405ull, 573374653997517877ull}},
+{{7279453282533306163ull, 9388467718898683073ull,
+ 14857200402110643194ull, 1146749307995035755ull}},
+{{8834588285990481879ull, 16635088802747377907ull,
+ 2971440080422128638ull, 229349861599007151ull}},
+{{17669176571980963758ull, 14823433531785204198ull,
+ 5942880160844257277ull, 458699723198014302ull}},
+{{16891609070252375900ull, 11200122989860856781ull,
+ 11885760321688514555ull, 917399446396028604ull}},
+{{3378321814050475180ull, 16997419856939812649ull,
+ 17134547323305344203ull, 183479889279205720ull}},
+{{6756643628100950360ull, 15548095640170073682ull,
+ 15822350572901136791ull, 366959778558411441ull}},
+{{13513287256201900720ull, 12649447206630595748ull,
+ 13197957072092721967ull, 733919557116822883ull}},
+{{13770703895466111114ull, 2529889441326119149ull,
+ 13707637858644275363ull, 146783911423364576ull}},
+{{9094663717222670612ull, 5059778882652238299ull,
+ 8968531643578999110ull, 293567822846729153ull}},
+{{18189327434445341223ull, 10119557765304476598ull,
+ 17937063287157998220ull, 587135645693458306ull}},
+{{17931910795181130829ull, 1792371456899401581ull,
+ 17427382500606444825ull, 1174271291386916613ull}},
+{{18343777418003867459ull, 11426520735605611285ull,
+ 14553522944347019934ull, 234854258277383322ull}},
+{{18240810762298183301ull, 4406297397501670955ull,
+ 10660301814984488253ull, 469708516554766645ull}},
+{{18034877450886814986ull, 8812594795003341911ull,
+ 2873859556259424890ull, 939417033109533291ull}},
+{{10985673119661183644ull, 5451867773742578705ull,
+ 4264120725993795301ull, 187883406621906658ull}},
+{{3524602165612815672ull, 10903735547485157411ull,
+ 8528241451987590602ull, 375766813243813316ull}},
+{{7049204331225631343ull, 3360727021260763206ull,
+ 17056482903975181205ull, 751533626487626632ull}},
+{{12477887310470857239ull, 8050843033735973287ull,
+ 10789994210278856887ull, 150306725297525326ull}},
+{{6509030547232162861ull, 16101686067471946575ull,
+ 3133244346848162158ull, 300613450595050653ull}},
+{{13018061094464325721ull, 13756628061234341534ull,
+ 6266488693696324317ull, 601226901190101306ull}},
+{{7589378115219099825ull, 9066512048759131453ull,
+ 12532977387392648635ull, 1202453802380202612ull}},
+{{1517875623043819965ull, 9192000039235646937ull,
+ 9885293106962350373ull, 240490760476040522ull}},
+{{3035751246087639930ull, 18384000078471293874ull,
+ 1323842140215149130ull, 480981520952081045ull}},
+{{6071502492175279860ull, 18321256083233036132ull,
+ 2647684280430298261ull, 961963041904162090ull}},
+{{12282346942660786942ull, 7353600031388517549ull,
+ 529536856086059652ull, 192392608380832418ull}},
+{{6117949811612022267ull, 14707200062777035099ull,
+ 1059073712172119304ull, 384785216761664836ull}},
+{{12235899623224044534ull, 10967656051844518582ull,
+ 2118147424344238609ull, 769570433523329672ull}},
+{{13515226368870539877ull, 5882880025110814039ull,
+ 7802327114352668368ull, 153914086704665934ull}},
+{{8583708664031528137ull, 11765760050221628079ull,
+ 15604654228705336736ull, 307828173409331868ull}},
+{{17167417328063056274ull, 5084776026733704542ull,
+ 12762564383701121857ull, 615656346818663737ull}},
+{{15888090582416560932ull, 10169552053467409085ull,
+ 7078384693692692098ull, 1231312693637327475ull}},
+{{14245664560709043156ull, 13101956854919212786ull,
+ 1415676938738538419ull, 246262538727465495ull}},
+{{10044585047708534696ull, 7757169636128873957ull,
+ 2831353877477076839ull, 492525077454930990ull}},
+{{1642426021707517776ull, 15514339272257747915ull,
+ 5662707754954153678ull, 985050154909861980ull}},
+{{11396531648567234525ull, 14170914298677280552ull,
+ 1132541550990830735ull, 197010030981972396ull}},
+{{4346319223424917434ull, 9895084523645009489ull,
+ 2265083101981661471ull, 394020061963944792ull}},
+{{8692638446849834867ull, 1343424973580467362ull,
+ 4530166203963322943ull, 788040123927889584ull}},
+{{16495922948337608267ull, 7647382624199914118ull,
+ 15663428499760305881ull, 157608024785577916ull}},
+{{14545101822965664917ull, 15294765248399828237ull,
+ 12880112925811060146ull, 315216049571155833ull}},
+{{10643459572221778217ull, 12142786423090104859ull,
+ 7313481777912568677ull, 630432099142311667ull}},
+{{2840175070734004818ull, 5838828772470658103ull,
+ 14626963555825137355ull, 1260864198284623334ull}},
+{{7946732643630621610ull, 15925161013461772913ull,
+ 17682787970132668763ull, 252172839656924666ull}},
+{{15893465287261243220ull, 13403577953213994210ull,
+ 16918831866555785911ull, 504345679313849333ull}},
+{{13340186500812934824ull, 8360411832718436805ull,
+ 15390919659402020207ull, 1008691358627698667ull}},
+{{17425432559130228258ull, 16429477625511328653ull,
+ 10456881561364224687ull, 201738271725539733ull}},
+{{16404121044550904899ull, 14412211177313105691ull,
+ 2467019049018897759ull, 403476543451079467ull}},
+{{14361498015392258182ull, 10377678280916659767ull,
+ 4934038098037795519ull, 806953086902158934ull}},
+{{2872299603078451637ull, 13143582100409062923ull,
+ 15744202878575200396ull, 161390617380431786ull}},
+{{5744599206156903273ull, 7840420127108574230ull,
+ 13041661683440849177ull, 322781234760863573ull}},
+{{11489198412313806546ull, 15680840254217148460ull,
+ 7636579293172146738ull, 645562469521727147ull}},
+{{2297839682462761310ull, 3136168050843429692ull,
+ 8906013488118249994ull, 129112493904345429ull}},
+{{4595679364925522619ull, 6272336101686859384ull,
+ 17812026976236499988ull, 258224987808690858ull}},
+{{9191358729851045237ull, 12544672203373718768ull,
+ 17177309878763448360ull, 516449975617381717ull}},
+{{18382717459702090473ull, 6642600333037885920ull,
+ 15907875683817345105ull, 1032899951234763435ull}},
+{{3676543491940418095ull, 1328520066607577184ull,
+ 3181575136763469021ull, 206579990246952687ull}},
+{{7353086983880836190ull, 2657040133215154368ull,
+ 6363150273526938042ull, 413159980493905374ull}},
+{{14706173967761672379ull, 5314080266430308736ull,
+ 12726300547053876084ull, 826319960987810748ull}},
+{{14009281237778065446ull, 8441513682769882393ull,
+ 13613306553636506186ull, 165263992197562149ull}},
+{{9571818401846579275ull, 16883027365539764787ull,
+ 8779869033563460756ull, 330527984395124299ull}},
+{{696892729983606933ull, 15319310657369977959ull,
+ 17559738067126921513ull, 661055968790248598ull}},
+{{139378545996721387ull, 6753210946215905915ull,
+ 14579994057651115272ull, 132211193758049719ull}},
+{{278757091993442774ull, 13506421892431811830ull,
+ 10713244041592678928ull, 264422387516099439ull}},
+{{557514183986885547ull, 8566099711154072044ull, 2979744009475806241ull,
+ 528844775032198879ull}},
+{{1115028367973771093ull, 17132199422308144088ull,
+ 5959488018951612482ull, 1057689550064397758ull}},
+{{11291052117820485189ull, 3426439884461628817ull,
+ 12259944048016053466ull, 211537910012879551ull}},
+{{4135360161931418761ull, 6852879768923257635ull,
+ 6073144022322555316ull, 423075820025759103ull}},
+{{8270720323862837521ull, 13705759537846515270ull,
+ 12146288044645110632ull, 846151640051518206ull}},
+{{12722190508998298474ull, 13809198351795034023ull,
+ 6118606423670932449ull, 169230328010303641ull}},
+{{6997636944287045332ull, 9171652629880516431ull,
+ 12237212847341864899ull, 338460656020607282ull}},
+{{13995273888574090663ull, 18343305259761032862ull,
+ 6027681620974178182ull, 676921312041214565ull}},
+{{17556450036682459426ull, 11047358681436027218ull,
+ 1205536324194835636ull, 135384262408242913ull}},
+{{16666155999655367235ull, 3647973289162502821ull,
+ 2411072648389671273ull, 270768524816485826ull}},
+{{14885567925601182854ull, 7295946578325005643ull,
+ 4822145296779342546ull, 541537049632971652ull}},
+{{11324391777492814091ull, 14591893156650011287ull,
+ 9644290593558685092ull, 1083074099265943304ull}},
+{{13332924799724293788ull, 6607727446071912580ull,
+ 16686253377679378311ull, 216614819853188660ull}},
+{{8219105525739035960ull, 13215454892143825161ull,
+ 14925762681649205006ull, 433229639706377321ull}},
+{{16438211051478071920ull, 7984165710578098706ull,
+ 11404781289588858397ull, 866459279412754643ull}},
+{{6976991025037524708ull, 1596833142115619741ull,
+ 13349002702143502649ull, 173291855882550928ull}},
+{{13953982050075049415ull, 3193666284231239482ull,
+ 8251261330577453682ull, 346583711765101857ull}},
+{{9461220026440547213ull, 6387332568462478965ull,
+ 16502522661154907364ull, 693167423530203714ull}},
+{{12960290449513840413ull, 12345512957918226762ull,
+ 18057899791198622765ull, 138633484706040742ull}},
+{{7473836825318129209ull, 6244281842126901909ull,
+ 17669055508687693915ull, 277266969412081485ull}},
+{{14947673650636258417ull, 12488563684253803818ull,
+ 16891366943665836214ull, 554533938824162971ull}},
+{{11448603227562965217ull, 6530383294798056021ull,
+ 15335989813622120813ull, 1109067877648325943ull}},
+{{9668418274996413690ull, 4995425473701521527ull,
+ 14135244406950155132ull, 221813575529665188ull}},
+{{890092476283275764ull, 9990850947403043055ull, 9823744740190758648ull,
+ 443627151059330377ull}},
+{{1780184952566551527ull, 1534957821096534494ull,
+ 1200745406671965681ull, 887254302118660755ull}},
+{{356036990513310306ull, 3996340378961217222ull, 240149081334393136ull,
+ 177450860423732151ull}},
+{{712073981026620611ull, 7992680757922434444ull, 480298162668786272ull,
+ 354901720847464302ull}},
+{{1424147962053241222ull, 15985361515844868888ull,
+ 960596325337572544ull, 709803441694928604ull}},
+{{3974178407152558568ull, 14265118747394704747ull,
+ 14949514524035155801ull, 141960688338985720ull}},
+{{7948356814305117135ull, 10083493421079857878ull,
+ 11452284974360759987ull, 283921376677971441ull}},
+{{15896713628610234270ull, 1720242768450164140ull,
+ 4457825875011968359ull, 567842753355942883ull}},
+{{13346683183510916924ull, 3440485536900328281ull,
+ 8915651750023936718ull, 1135685506711885766ull}},
+{{2669336636702183385ull, 15445492366347706949ull,
+ 5472479164746697666ull, 227137101342377153ull}},
+{{5338673273404366770ull, 12444240658985862282ull,
+ 10944958329493395333ull, 454274202684754306ull}},
+{{10677346546808733539ull, 6441737244262172948ull,
+ 3443172585277239051ull, 908548405369508613ull}},
+{{9514166938845567355ull, 16045742707820075882ull,
+ 11756680961281178779ull, 181709681073901722ull}},
+{{581589803981583093ull, 13644741341930600149ull,
+ 5066617848852805943ull, 363419362147803445ull}},
+{{1163179607963166185ull, 8842738610151648682ull,
+ 10133235697705611887ull, 726838724295606890ull}},
+{{14990031180560274530ull, 9147245351514150382ull,
+ 2026647139541122377ull, 145367744859121378ull}},
+{{11533318287410997444ull, 18294490703028300765ull,
+ 4053294279082244754ull, 290735489718242756ull}},
+{{4619892501112443271ull, 18142237332347049915ull,
+ 8106588558164489509ull, 581470979436485512ull}},
+{{9239785002224886542ull, 17837730590984548214ull,
+ 16213177116328979019ull, 1162941958872971024ull}},
+{{9226654629928797955ull, 14635592562422640612ull,
+ 18000030682233437096ull, 232588391774594204ull}},
+{{6565186148044294ull, 10824441051135729609ull, 17553317290757322577ull,
+ 465176783549188409ull}},
+{{13130372296088588ull, 3202138028561907602ull, 16659890507805093539ull,
+ 930353567098376819ull}},
+{{2626074459217718ull, 11708474049938112490ull, 18089373360528660000ull,
+ 186070713419675363ull}},
+{{5252148918435435ull, 4970204026166673364ull, 17732002647347768385ull,
+ 372141426839350727ull}},
+{{10504297836870870ull, 9940408052333346728ull, 17017261220985985154ull,
+ 744282853678701455ull}},
+{{7380798489051194821ull, 16745476869434310638ull,
+ 3403452244197197030ull, 148856570735740291ull}},
+{{14761596978102389641ull, 15044209665159069660ull,
+ 6806904488394394061ull, 297713141471480582ull}},
+{{11076449882495227666ull, 11641675256608587705ull,
+ 13613808976788788123ull, 595426282942961164ull}},
+{{3706155691280903715ull, 4836606439507623795ull,
+ 8780873879868024631ull, 1190852565885922329ull}},
+{{741231138256180743ull, 967321287901524759ull, 16513570034941246219ull,
+ 238170513177184465ull}},
+{{1482462276512361486ull, 1934642575803049518ull,
+ 14580395996172940822ull, 476341026354368931ull}},
+{{2964924553024722972ull, 3869285151606099036ull,
+ 10714047918636330028ull, 952682052708737863ull}},
+{{7971682540088765241ull, 4463205845063130130ull,
+ 13210856027952996975ull, 190536410541747572ull}},
+{{15943365080177530482ull, 8926411690126260260ull,
+ 7974967982196442334ull, 381072821083495145ull}},
+{{13439986086645509348ull, 17852823380252520521ull,
+ 15949935964392884668ull, 762145642166990290ull}},
+{{17445392476296743163ull, 14638611120276235073ull,
+ 3189987192878576933ull, 152429128433398058ull}},
+{{16444040878883934709ull, 10830478166842918531ull,
+ 6379974385757153867ull, 304858256866796116ull}},
+{{14441337684058317801ull, 3214212259976285447ull,
+ 12759948771514307735ull, 609716513733592232ull}},
+{{10435931294407083986ull, 6428424519952570895ull,
+ 7073153469319063854ull, 1219433027467184465ull}},
+{{16844581517849058090ull, 16043080162958155471ull,
+ 1414630693863812770ull, 243886605493436893ull}},
+{{15242418961988564564ull, 13639416252206759327ull,
+ 2829261387727625541ull, 487773210986873786ull}},
+{{12038093850267577512ull, 8832088430703967039ull,
+ 5658522775455251083ull, 975546421973747572ull}},
+{{17165014029021156796ull, 1766417686140793407ull,
+ 8510402184574870863ull, 195109284394749514ull}},
+{{15883283984332761975ull, 3532835372281586815ull,
+ 17020804369149741726ull, 390218568789499028ull}},
+{{13319823894955972333ull, 7065670744563173631ull,
+ 15594864664589931836ull, 780437137578998057ull}},
+{{17421360037958835760ull, 12481180593138365695ull,
+ 10497670562401807013ull, 156087427515799611ull}},
+{{16395976002208119903ull, 6515617112567179775ull,
+ 2548597051094062411ull, 312174855031599223ull}},
+{{14345207930706688190ull, 13031234225134359551ull,
+ 5097194102188124822ull, 624349710063198446ull}},
+{{10243671787703824763ull, 7615724376559167487ull,
+ 10194388204376249645ull, 1248699420126396892ull}},
+{{16806129616508406246ull, 8901842504795654143ull,
+ 9417575270359070575ull, 249739884025279378ull}},
+{{15165515159307260875ull, 17803685009591308287ull,
+ 388406467008589534ull, 499479768050558757ull}},
+{{11884286244904970134ull, 17160625945473064959ull,
+ 776812934017179069ull, 998959536101117514ull}},
+{{9755554878464814674ull, 14500171633320343961ull,
+ 14912757845771077106ull, 199791907220223502ull}},
+{{1064365683220077731ull, 10553599192931136307ull,
+ 11378771617832602597ull, 399583814440447005ull}},
+{{2128731366440155461ull, 2660454312152720998ull,
+ 4310799161955653579ull, 799167628880894011ull}},
+{{11493792717513762062ull, 532090862430544199ull,
+ 4551508647133041039ull, 159833525776178802ull}},
+{{4540841361317972508ull, 1064181724861088399ull,
+ 9103017294266082078ull, 319667051552357604ull}},
+{{9081682722635945015ull, 2128363449722176798ull,
+ 18206034588532164156ull, 639334103104715208ull}},
+{{18163365445271890030ull, 4256726899444353596ull,
+ 17965325103354776696ull, 1278668206209430417ull}},
+{{18390068348022019299ull, 11919391824114601688ull,
+ 10971762650154775985ull, 255733641241886083ull}},
+{{18333392622334486982ull, 5392039574519651761ull,
+ 3496781226600000355ull, 511467282483772167ull}},
+{{18220041170959422347ull, 10784079149039303523ull,
+ 6993562453200000710ull, 1022934564967544334ull}},
+{{11022705863675705116ull, 16914211088775501997ull,
+ 16156107749607641434ull, 204586912993508866ull}},
+{{3598667653641858616ull, 15381678103841452379ull,
+ 13865471425505731253ull, 409173825987017733ull}},
+{{7197335307283717231ull, 12316612133973353142ull,
+ 9284198777301910891ull, 818347651974035467ull}},
+{{1439467061456743447ull, 13531368871020401598ull,
+ 9235537384944202824ull, 163669530394807093ull}},
+{{2878934122913486893ull, 8615993668331251580ull, 24330696178854033ull,
+ 327339060789614187ull}},
+{{5757868245826973785ull, 17231987336662503160ull, 48661392357708066ull,
+ 654678121579228374ull}},
+{{1151573649165394757ull, 3446397467332500632ull,
+ 14767127537439182906ull, 130935624315845674ull}},
+{{2303147298330789514ull, 6892794934665001264ull,
+ 11087511001168814196ull, 261871248631691349ull}},
+{{4606294596661579028ull, 13785589869330002528ull,
+ 3728277928628076776ull, 523742497263382699ull}},
+{{9212589193323158056ull, 9124435664950453440ull,
+ 7456555857256153553ull, 1047484994526765398ull}},
+{{5531866653406541935ull, 5514235947732001011ull,
+ 12559357615676961680ull, 209496998905353079ull}},
+{{11063733306813083869ull, 11028471895464002022ull,
+ 6671971157644371744ull, 418993997810706159ull}},
+{{3680722539916616122ull, 3610199717218452429ull,
+ 13343942315288743489ull, 837987995621412318ull}},
+{{4425493322725233548ull, 8100737572927511132ull,
+ 13736834907283479667ull, 167597599124282463ull}},
+{{8850986645450467095ull, 16201475145855022264ull,
+ 9026925740857407718ull, 335195198248564927ull}},
+{{17701973290900934190ull, 13956206218000492912ull,
+ 18053851481714815437ull, 670390396497129854ull}},
+{{14608441102405917808ull, 6480590058342008905ull,
+ 18368165555310604380ull, 134078079299425970ull}},
+{{10770138131102284000ull, 12961180116684017811ull,
+ 18289587036911657144ull, 268156158598851941ull}},
+{{3093532188495016383ull, 7475616159658484007ull,
+ 18132430000113762673ull, 536312317197703883ull}},
+{{6187064376990032765ull, 14951232319316968014ull,
+ 17818115926517973730ull, 1072624634395407767ull}},
+{{4926761690139916877ull, 10368944093347214249ull,
+ 10942320814787415392ull, 214524926879081553ull}},
+{{9853523380279833753ull, 2291144112984876882ull,
+ 3437897555865279169ull, 429049853758163107ull}},
+{{1260302686850115889ull, 4582288225969753765ull,
+ 6875795111730558338ull, 858099707516326214ull}},
+{{7630758166853843825ull, 8295155274677771399ull,
+ 16132554281313752960ull, 171619941503265242ull}},
+{{15261516333707687649ull, 16590310549355542798ull,
+ 13818364488917954304ull, 343239883006530485ull}},
+{{12076288593705823681ull, 14733877025001533981ull,
+ 9189984904126356993ull, 686479766013060971ull}},
+{{2415257718741164737ull, 17704170663967948089ull,
+ 5527345795567181721ull, 137295953202612194ull}},
+{{4830515437482329473ull, 16961597254226344562ull,
+ 11054691591134363443ull, 274591906405224388ull}},
+{{9661030874964658945ull, 15476450434743137508ull,
+ 3662639108559175271ull, 549183812810448777ull}},
+{{875317676219766273ull, 12506156795776723401ull,
+ 7325278217118350543ull, 1098367625620897554ull}},
+{{11243109979469684225ull, 9879928988639165326ull,
+ 16222450902391311401ull, 219673525124179510ull}},
+{{4039475885229816833ull, 1313113903568779037ull,
+ 13998157731073071187ull, 439347050248359021ull}},
+{{8078951770459633665ull, 2626227807137558074ull,
+ 9549571388436590758ull, 878694100496718043ull}},
+{{1615790354091926733ull, 4214594376169421938ull,
+ 12977960721913049121ull, 175738820099343608ull}},
+{{3231580708183853466ull, 8429188752338843876ull,
+ 7509177370116546626ull, 351477640198687217ull}},
+{{6463161416367706932ull, 16858377504677687752ull,
+ 15018354740233093252ull, 702955280397374434ull}},
+{{12360678727499272356ull, 7061024315677447873ull,
+ 17761066207014259943ull, 140591056079474886ull}},
+{{6274613381288993096ull, 14122048631354895747ull,
+ 17075388340318968270ull, 281182112158949773ull}},
+{{12549226762577986192ull, 9797353189000239878ull,
+ 15704032606928384925ull, 562364224317899547ull}},
+{{6651709451446420767ull, 1147962304290928141ull,
+ 12961321140147218235ull, 1124728448635799095ull}},
+{{5019690705031194477ull, 229592460858185628ull, 2592264228029443647ull,
+ 224945689727159819ull}},
+{{10039381410062388954ull, 459184921716371256ull,
+ 5184528456058887294ull, 449891379454319638ull}},
+{{1632018746415226291ull, 918369843432742513ull,
+ 10369056912117774588ull, 899782758908639276ull}},
+{{7705101378766865905ull, 14941069227654189795ull,
+ 5763160197165465240ull, 179956551781727855ull}},
+{{15410202757533731809ull, 11435394381598827974ull,
+ 11526320394330930481ull, 359913103563455710ull}},
+{{12373661441357912002ull, 4424044689488104333ull,
+ 4605896714952309347ull, 719826207126911421ull}},
+{{6164081103013492724ull, 11952855382123351836ull,
+ 4610528157732372192ull, 143965241425382284ull}},
+{{12328162206026985448ull, 5458966690537152056ull,
+ 9221056315464744385ull, 287930482850764568ull}},
+{{6209580338344419279ull, 10917933381074304113ull,
+ 18442112630929488770ull, 575860965701529136ull}},
+{{12419160676688838557ull, 3389122688439056610ull,
+ 18437481188149425925ull, 1151721931403058273ull}},
+{{13551878579563498681ull, 11745870981913542291ull,
+ 14755542681855616154ull, 230344386280611654ull}},
+{{8657013085417445746ull, 5044997890117532967ull,
+ 11064341290001680693ull, 460688772561223309ull}},
+{{17314026170834891492ull, 10089995780235065934ull,
+ 3681938506293809770ull, 921377545122446619ull}},
+{{14530851678392709268ull, 16775394415014654479ull,
+ 15493782960226403246ull, 184275509024489323ull}},
+{{10614959283075866920ull, 15104044756319757343ull,
+ 12540821846743254877ull, 368551018048978647ull}},
+{{2783174492442182224ull, 11761345438929963071ull,
+ 6634899619776958139ull, 737102036097957295ull}},
+{{556634898488436445ull, 17109664346753633907ull,
+ 1326979923955391627ull, 147420407219591459ull}},
+{{1113269796976872890ull, 15772584619797716198ull,
+ 2653959847910783255ull, 294840814439182918ull}},
+{{2226539593953745780ull, 13098425165885880780ull,
+ 5307919695821566511ull, 589681628878365836ull}},
+{{4453079187907491559ull, 7750106258062209944ull,
+ 10615839391643133023ull, 1179363257756731672ull}},
+{{15648011096549139605ull, 1550021251612441988ull,
+ 9501865507812447251ull, 235872651551346334ull}},
+{{12849278119388727593ull, 3100042503224883977ull,
+ 556986941915342886ull, 471745303102692669ull}},
+{{7251812165067903570ull, 6200085006449767955ull,
+ 1113973883830685772ull, 943490606205385338ull}},
+{{1450362433013580714ull, 1240017001289953591ull,
+ 11290841220991868124ull, 188698121241077067ull}},
+{{2900724866027161428ull, 2480034002579907182ull,
+ 4134938368274184632ull, 377396242482154135ull}},
+{{5801449732054322856ull, 4960068005159814364ull,
+ 8269876736548369264ull, 754792484964308270ull}},
+{{12228336390636595541ull, 15749408859999604165ull,
+ 1653975347309673852ull, 150958496992861654ull}},
+{{6009928707563639466ull, 13052073646289656715ull,
+ 3307950694619347705ull, 301916993985723308ull}},
+{{12019857415127278931ull, 7657403218869761814ull,
+ 6615901389238695411ull, 603833987971446616ull}},
+{{5592970756545006246ull, 15314806437739523629ull,
+ 13231802778477390822ull, 1207667975942893232ull}},
+{{12186640595534732219ull, 17820356546515546018ull,
+ 10025058185179298810ull, 241533595188578646ull}},
+{{5926537117359912822ull, 17193969019321540421ull,
+ 1603372296649046005ull, 483067190377157293ull}},
+{{11853074234719825644ull, 15941193964933529226ull,
+ 3206744593298092011ull, 966134380754314586ull}},
+{{13438661291169696099ull, 10566936422470526491ull,
+ 4330697733401528725ull, 193226876150862917ull}},
+{{8430578508629840581ull, 2687128771231501367ull,
+ 8661395466803057451ull, 386453752301725834ull}},
+{{16861157017259681161ull, 5374257542463002734ull,
+ 17322790933606114902ull, 772907504603451668ull}},
+{{18129626662419577525ull, 1074851508492600546ull,
+ 14532604630946953950ull, 154581500920690333ull}},
+{{17812509251129603434ull, 2149703016985201093ull,
+ 10618465188184356284ull, 309163001841380667ull}},
+{{17178274428549655252ull, 4299406033970402187ull,
+ 2790186302659160952ull, 618326003682761335ull}},
+{{15909804783389758888ull, 8598812067940804375ull,
+ 5580372605318321904ull, 1236652007365522670ull}},
+{{17939356215645593071ull, 16477157672555802167ull,
+ 1116074521063664380ull, 247330401473104534ull}},
+{{17431968357581634525ull, 14507571271402052719ull,
+ 2232149042127328761ull, 494660802946209068ull}},
+{{16417192641453717434ull, 10568398469094553823ull,
+ 4464298084254657523ull, 989321605892418136ull}},
+{{10662136157774564134ull, 16871074952786552057ull,
+ 4582208431592841827ull, 197864321178483627ull}},
+{{2877528241839576651ull, 15295405831863552499ull,
+ 9164416863185683655ull, 395728642356967254ull}},
+{{5755056483679153301ull, 12144067590017553382ull,
+ 18328833726371367311ull, 791457284713934508ull}},
+{{4840360111477740984ull, 17186208776971151969ull,
+ 14733813189500004431ull, 158291456942786901ull}},
+{{9680720222955481967ull, 15925673480232752322ull,
+ 11020882305290457247ull, 316582913885573803ull}},
+{{914696372201412318ull, 13404602886755953029ull,
+ 3595020536871362879ull, 633165827771147607ull}},
+{{1829392744402824635ull, 8362461699802354442ull,
+ 7190041073742725759ull, 1266331655542295214ull}},
+{{365878548880564927ull, 12740538784186201858ull,
+ 16195403473716186444ull, 253266331108459042ull}},
+{{731757097761129854ull, 7034333494662852100ull,
+ 13944062873722821273ull, 506532662216918085ull}},
+{{1463514195522259708ull, 14068666989325704200ull,
+ 9441381673736090930ull, 1013065324433836171ull}},
+{{3982051653846362265ull, 6503082212607051163ull,
+ 5577625149489128509ull, 202613064886767234ull}},
+{{7964103307692724530ull, 13006164425214102326ull,
+ 11155250298978257018ull, 405226129773534468ull}},
+{{15928206615385449059ull, 7565584776718653036ull,
+ 3863756524246962421ull, 810452259547068937ull}},
+{{17943036582044731105ull, 12581163399569461576ull,
+ 8151448934333213130ull, 162090451909413787ull}},
+{{17439329090379910594ull, 6715582725429371537ull,
+ 16302897868666426261ull, 324180903818827574ull}},
+{{16431914107050269571ull, 13431165450858743075ull,
+ 14159051663623300906ull, 648361807637655149ull}},
+{{3286382821410053915ull, 2686233090171748615ull,
+ 17589205591692301474ull, 129672361527531029ull}},
+{{6572765642820107829ull, 5372466180343497230ull,
+ 16731667109675051332ull, 259344723055062059ull}},
+{{13145531285640215657ull, 10744932360686994460ull,
+ 15016590145640551048ull, 518689446110124119ull}},
+{{7844318497570879697ull, 3043120647664437305ull,
+ 11586436217571550481ull, 1037378892220248239ull}},
+{{1568863699514175940ull, 608624129532887461ull,
+ 17074682502481951389ull, 207475778444049647ull}},
+{{3137727399028351879ull, 1217248259065774922ull,
+ 15702620931254351162ull, 414951556888099295ull}},
+{{6275454798056703758ull, 2434496518131549844ull,
+ 12958497788799150708ull, 829903113776198591ull}},
+{{12323137403837071722ull, 15244294562593951261ull,
+ 6281048372501740464ull, 165980622755239718ull}},
+{{6199530733964591827ull, 12041845051478350907ull,
+ 12562096745003480929ull, 331961245510479436ull}},
+{{12399061467929183653ull, 5636946029247150198ull,
+ 6677449416297410243ull, 663922491020958873ull}},
+{{17237207552553478024ull, 4816738020591340362ull,
+ 12403536327485213018ull, 132784498204191774ull}},
+{{16027671031397404431ull, 9633476041182680725ull,
+ 6360328581260874420ull, 265568996408383549ull}},
+{{13608597989085257245ull, 820208008655809835ull,
+ 12720657162521748841ull, 531137992816767098ull}},
+{{8770451904460962874ull, 1640416017311619671ull,
+ 6994570251333946066ull, 1062275985633534197ull}},
+{{16511485639859833868ull, 11396129647688054903ull,
+ 8777611679750609859ull, 212455197126706839ull}},
+{{14576227206010116120ull, 4345515221666558191ull,
+ 17555223359501219719ull, 424910394253413678ull}},
+{{10705710338310680623ull, 8691030443333116383ull,
+ 16663702645292887822ull, 849820788506827357ull}},
+{{9519839697145956771ull, 16495601347634264569ull,
+ 10711438158542398210ull, 169964157701365471ull}},
+{{592935320582361926ull, 14544458621558977523ull,
+ 2976132243375244805ull, 339928315402730943ull}},
+{{1185870641164723852ull, 10642173169408403430ull,
+ 5952264486750489611ull, 679856630805461886ull}},
+{{7615871757716765417ull, 9507132263365501332ull,
+ 4879801712092008245ull, 135971326161092377ull}},
+{{15231743515433530834ull, 567520453021451048ull,
+ 9759603424184016491ull, 271942652322184754ull}},
+{{12016742957157510051ull, 1135040906042902097ull,
+ 1072462774658481366ull, 543885304644369509ull}},
+{{5586741840605468486ull, 2270081812085804195ull,
+ 2144925549316962732ull, 1087770609288739018ull}},
+{{1117348368121093698ull, 454016362417160839ull,
+ 11497031554089123516ull, 217554121857747803ull}},
+{{2234696736242187395ull, 908032724834321678ull, 4547319034468695416ull,
+ 435108243715495607ull}},
+{{4469393472484374789ull, 1816065449668643356ull,
+ 9094638068937390832ull, 870216487430991214ull}},
+{{8272576323980695605ull, 4052561904675638994ull,
+ 16576322872755119459ull, 174043297486198242ull}},
+{{16545152647961391209ull, 8105123809351277988ull,
+ 14705901671800687302ull, 348086594972396485ull}},
+{{14643561222213230801ull, 16210247618702555977ull,
+ 10965059269891822988ull, 696173189944792971ull}},
+{{6618061059184556484ull, 17999444782708152488ull,
+ 5882360668720274920ull, 139234637988958594ull}},
+{{13236122118369112967ull, 17552145491706753360ull,
+ 11764721337440549841ull, 278469275977917188ull}},
+{{8025500163028674317ull, 16657546909703955105ull,
+ 5082698601171548067ull, 556938551955834377ull}},
+{{16051000326057348634ull, 14868349745698358594ull,
+ 10165397202343096135ull, 1113877103911668754ull}},
+{{14278246509437200697ull, 17731065208107313011ull,
+ 16790474699436260519ull, 222775420782333750ull}},
+{{10109748945164849777ull, 17015386342505074407ull,
+ 15134205325162969423ull, 445550841564667501ull}},
+{{1772753816620147938ull, 15584028611300597199ull,
+ 11821666576616387231ull, 891101683129335003ull}},
+{{11422597207549760558ull, 17874200981227760732ull,
+ 13432379759549008415ull, 178220336625867000ull}},
+{{4398450341389969499ull, 17301657888745969849ull,
+ 8418015445388465215ull, 356440673251734001ull}},
+{{8796900682779938997ull, 16156571703782388082ull,
+ 16836030890776930431ull, 712881346503468002ull}},
+{{1759380136555987800ull, 14299360784982208586ull,
+ 10745903807639206732ull, 142576269300693600ull}},
+{{3518760273111975599ull, 10151977496254865556ull,
+ 3045063541568861849ull, 285152538601387201ull}},
+{{7037520546223951198ull, 1857210918800179496ull,
+ 6090127083137723699ull, 570305077202774402ull}},
+{{14075041092447902395ull, 3714421837600358992ull,
+ 12180254166275447398ull, 1140610154405548804ull}},
+{{17572403477457221772ull, 8121581997003892444ull,
+ 17193446092222730772ull, 228122030881109760ull}},
+{{16698062881204891928ull, 16243163994007784889ull,
+ 15940148110735909928ull, 456244061762219521ull}},
+{{14949381688700232239ull, 14039583914306018163ull,
+ 13433552147762268241ull, 912488123524439043ull}},
+{{10368573967223867095ull, 17565312041828844925ull,
+ 13754756873778184617ull, 182497624704887808ull}},
+{{2290403860738182573ull, 16683880009948138235ull,
+ 9062769673846817619ull, 364995249409775617ull}},
+{{4580807721476365145ull, 14921015946186724854ull,
+ 18125539347693635239ull, 729990498819551234ull}},
+{{8294859173779093676ull, 14052249633463075940ull,
+ 18382503128506368340ull, 145998099763910246ull}},
+{{16589718347558187351ull, 9657755193216600264ull,
+ 18318262183303185065ull, 291996199527820493ull}},
+{{14732692621406823086ull, 868766312723648913ull,
+ 18189780292896818515ull, 583992399055640987ull}},
+{{11018641169104094555ull, 1737532625447297827ull,
+ 17932816512084085414ull, 1167984798111281975ull}},
+{{5893077048562729235ull, 15104901784057100858ull,
+ 3586563302416817082ull, 233596959622256395ull}},
+{{11786154097125458469ull, 11763059494404650100ull,
+ 7173126604833634165ull, 467193919244512790ull}},
+{{5125564120541365321ull, 5079374915099748585ull,
+ 14346253209667268331ull, 934387838489025580ull}},
+{{4714461638850183388ull, 4705223797761860040ull,
+ 2869250641933453666ull, 186877567697805116ull}},
+{{9428923277700366775ull, 9410447595523720080ull,
+ 5738501283866907332ull, 373755135395610232ull}},
+{{411102481691181934ull, 374151117337888545ull, 11477002567733814665ull,
+ 747510270791220464ull}},
+{{14839615755305877680ull, 14832225482435219001ull,
+ 17052795772514404225ull, 149502054158244092ull}},
+{{11232487436902203743ull, 11217706891160886387ull,
+ 15658847471319256835ull, 299004108316488185ull}},
+{{4018230800094855870ull, 3988669708612221159ull,
+ 12870950868928962055ull, 598008216632976371ull}},
+{{8036461600189711740ull, 7977339417224442318ull,
+ 7295157664148372494ull, 1196016433265952743ull}},
+{{1607292320037942348ull, 8974165512928709110ull,
+ 12527077977055405468ull, 239203286653190548ull}},
+{{3214584640075884696ull, 17948331025857418220ull,
+ 6607411880401259320ull, 478406573306381097ull}},
+{{6429169280151769392ull, 17449917978005284824ull,
+ 13214823760802518641ull, 956813146612762194ull}},
+{{16043229114997995172ull, 3489983595601056964ull,
+ 17400360011128145021ull, 191362629322552438ull}},
+{{13639714156286438727ull, 6979967191202113929ull,
+ 16353975948546738426ull, 382725258645104877ull}},
+{{8832684238863325837ull, 13959934382404227859ull,
+ 14261207823383925236ull, 765450517290209755ull}},
+{{1766536847772665168ull, 6481335691222755895ull,
+ 2852241564676785047ull, 153090103458041951ull}},
+{{3533073695545330335ull, 12962671382445511790ull,
+ 5704483129353570094ull, 306180206916083902ull}},
+{{7066147391090660670ull, 7478598691181471964ull,
+ 11408966258707140189ull, 612360413832167804ull}},
+{{14132294782181321339ull, 14957197382362943928ull,
+ 4371188443704728762ull, 1224720827664335609ull}},
+{{17583854215403905561ull, 6680788291214499108ull,
+ 15631632947708587045ull, 244944165532867121ull}},
+{{16720964357098259505ull, 13361576582428998217ull,
+ 12816521821707622474ull, 489888331065734243ull}},
+{{14995184640486967394ull, 8276409091148444819ull,
+ 7186299569705693333ull, 979776662131468487ull}},
+{{17756432187065034772ull, 1655281818229688963ull,
+ 8815957543424959313ull, 195955332426293697ull}},
+{{17066120300420517928ull, 3310563636459377927ull,
+ 17631915086849918626ull, 391910664852587394ull}},
+{{15685496527131484239ull, 6621127272918755855ull,
+ 16817086099990285636ull, 783821329705174789ull}},
+{{3137099305426296848ull, 1324225454583751171ull,
+ 18120812478965698420ull, 156764265941034957ull}},
+{{6274198610852593696ull, 2648450909167502342ull,
+ 17794880884221845224ull, 313528531882069915ull}},
+{{12548397221705187391ull, 5296901818335004684ull,
+ 17143017694734138832ull, 627057063764139831ull}},
+{{6650050369700823166ull, 10593803636670009369ull,
+ 15839291315758726048ull, 1254114127528279663ull}},
+{{1330010073940164634ull, 5808109542075912197ull,
+ 14235904707377476179ull, 250822825505655932ull}},
+{{2660020147880329267ull, 11616219084151824394ull,
+ 10025065341045400742ull, 501645651011311865ull}},
+{{5320040295760658533ull, 4785694094594097172ull,
+ 1603386608381249869ull, 1003291302022623731ull}},
+{{8442705688635952353ull, 957138818918819434ull, 4010026136418160297ull,
+ 200658260404524746ull}},
+{{16885411377271904706ull, 1914277637837638868ull,
+ 8020052272836320594ull, 401316520809049492ull}},
+{{15324078680834257796ull, 3828555275675277737ull,
+ 16040104545672641188ull, 802633041618098984ull}},
+{{17822210995134492852ull, 8144408684618876193ull,
+ 17965416168102169530ull, 160526608323619796ull}},
+{{17197677916559434088ull, 16288817369237752387ull,
+ 17484088262494787444ull, 321053216647239593ull}},
+{{15948611759409316560ull, 14130890664765953159ull,
+ 16521432451280023273ull, 642106433294479187ull}},
+{{17947117610849504605ull, 2826178132953190631ull,
+ 10682984119739825301ull, 128421286658895837ull}},
+{{17447491147989457594ull, 5652356265906381263ull,
+ 2919224165770098986ull, 256842573317791675ull}},
+{{16448238222269363571ull, 11304712531812762527ull,
+ 5838448331540197972ull, 513685146635583350ull}},
+{{14449732370829175526ull, 4162680989915973439ull,
+ 11676896663080395945ull, 1027370293271166700ull}},
+{{17647341733133476398ull, 832536197983194687ull,
+ 2335379332616079189ull, 205474058654233340ull}},
+{{16847939392557401180ull, 1665072395966389375ull,
+ 4670758665232158378ull, 410948117308466680ull}},
+{{15249134711405250744ull, 3330144791932778751ull,
+ 9341517330464316756ull, 821896234616933360ull}},
+{{10428524571764870796ull, 4355377773128466073ull,
+ 1868303466092863351ull, 164379246923386672ull}},
+{{2410305069820189975ull, 8710755546256932147ull,
+ 3736606932185726702ull, 328758493846773344ull}},
+{{4820610139640379949ull, 17421511092513864294ull,
+ 7473213864371453404ull, 657516987693546688ull}},
+{{4653470842669986313ull, 10862999847986593505ull,
+ 12562689217100021650ull, 131503397538709337ull}},
+{{9306941685339972626ull, 3279255622263635394ull,
+ 6678634360490491685ull, 263006795077418675ull}},
+{{167139296970393636ull, 6558511244527270789ull,
+ 13357268720980983370ull, 526013590154837350ull}},
+{{334278593940787272ull, 13117022489054541578ull,
+ 8267793368252415124ull, 1052027180309674701ull}},
+{{11134902163013888424ull, 2623404497810908315ull,
+ 5342907488392393348ull, 210405436061934940ull}},
+{{3823060252318225232ull, 5246808995621816631ull,
+ 10685814976784786696ull, 420810872123869880ull}},
+{{7646120504636450464ull, 10493617991243633262ull,
+ 2924885879860021776ull, 841621744247739761ull}},
+{{16286619359894931386ull, 9477421227732547298ull,
+ 4274325990713914678ull, 168324348849547952ull}},
+{{14126494646080311155ull, 508098381755542981ull,
+ 8548651981427829357ull, 336648697699095904ull}},
+{{9806245218451070694ull, 1016196763511085963ull,
+ 17097303962855658714ull, 673297395398191808ull}},
+{{1961249043690214139ull, 7581936982186037839ull,
+ 14487507236796862712ull, 134659479079638361ull}},
+{{3922498087380428278ull, 15163873964372075678ull,
+ 10528270399884173808ull, 269318958159276723ull}},
+{{7844996174760856556ull, 11881003855034599740ull,
+ 2609796726058796001ull, 538637916318553447ull}},
+{{15689992349521713111ull, 5315263636359647864ull,
+ 5219593452117592003ull, 1077275832637106894ull}},
+{{6827347284646252946ull, 8441750356755750219ull,
+ 15801313949391159693ull, 215455166527421378ull}},
+{{13654694569292505891ull, 16883500713511500438ull,
+ 13155883825072767770ull, 430910333054842757ull}},
+{{8862645064875460165ull, 15320257353313449261ull,
+ 7865023576435983925ull, 861820666109685515ull}},
+{{5461877827717002357ull, 3064051470662689852ull,
+ 1573004715287196785ull, 172364133221937103ull}},
+{{10923755655434004713ull, 6128102941325379704ull,
+ 3146009430574393570ull, 344728266443874206ull}},
+{{3400767237158457809ull, 12256205882650759409ull,
+ 6292018861148787140ull, 689456532887748412ull}},
+{{4369502262173601885ull, 9829938806013972528ull,
+ 8637101401713578074ull, 137891306577549682ull}},
+{{8739004524347203770ull, 1213133538318393440ull,
+ 17274202803427156149ull, 275782613155099364ull}},
+{{17478009048694407540ull, 2426267076636786880ull,
+ 16101661533144760682ull, 551565226310198729ull}},
+{{16509274023679263464ull, 4852534153273573761ull,
+ 13756578992579969748ull, 1103130452620397459ull}},
+{{14369901248961583663ull, 8349204460138535398ull,
+ 17508711057483635242ull, 220626090524079491ull}},
+{{10293058424213615709ull, 16698408920277070797ull,
+ 16570678041257718868ull, 441252181048158983ull}},
+{{2139372774717679802ull, 14950073766844589979ull,
+ 14694612008805886121ull, 882504362096317967ull}},
+{{7806572184427356607ull, 14058061197594648965ull,
+ 10317620031244997870ull, 176500872419263593ull}},
+{{15613144368854713214ull, 9669378321479746314ull,
+ 2188495988780444125ull, 353001744838527187ull}},
+{{12779544663999874811ull, 892012569249941013ull,
+ 4376991977560888251ull, 706003489677054374ull}},
+{{13623955377025705932ull, 178402513849988202ull,
+ 15632793654479818943ull, 141200697935410874ull}},
+{{8801166680341860248ull, 356805027699976405ull,
+ 12818843235250086270ull, 282401395870821749ull}},
+{{17602333360683720495ull, 713610055399952810ull,
+ 7190942396790620924ull, 564802791741643499ull}},
+{{16757922647657889374ull, 1427220110799905621ull,
+ 14381884793581241848ull, 1129605583483286998ull}},
+{{10730282159015398522ull, 3974792836901891447ull,
+ 13944423402941979339ull, 225921116696657399ull}},
+{{3013820244321245427ull, 7949585673803782895ull,
+ 9442102732174407062ull, 451842233393314799ull}},
+{{6027640488642490853ull, 15899171347607565790ull,
+ 437461390639262508ull, 903684466786629599ull}},
+{{8584225727212318817ull, 10558531899005333804ull,
+ 14844887537095493794ull, 180736893357325919ull}},
+{{17168451454424637634ull, 2670319724301115992ull,
+ 11243031000481435973ull, 361473786714651839ull}},
+{{15890158835139723652ull, 5340639448602231985ull,
+ 4039317927253320330ull, 722947573429303679ull}},
+{{17935427025995586024ull, 15825523148688087689ull,
+ 15565258844418305358ull, 144589514685860735ull}},
+{{17424109978281620431ull, 13204302223666623763ull,
+ 12683773615127059101ull, 289179029371721471ull}},
+{{16401475882853689245ull, 7961860373623695911ull,
+ 6920803156544566587ull, 578358058743442943ull}},
+{{14356207691997826874ull, 15923720747247391823ull,
+ 13841606313089133174ull, 1156716117486885886ull}},
+{{13939287982625296345ull, 3184744149449478364ull,
+ 6457670077359736958ull, 231343223497377177ull}},
+{{9431831891541041073ull, 6369488298898956729ull,
+ 12915340154719473916ull, 462686446994754354ull}},
+{{416919709372530529ull, 12738976597797913459ull,
+ 7383936235729396216ull, 925372893989508709ull}},
+{{14840779200842147399ull, 2547795319559582691ull,
+ 16234182506113520536ull, 185074578797901741ull}},
+{{11234814327974743182ull, 5095590639119165383ull,
+ 14021620938517489456ull, 370149157595803483ull}},
+{{4022884582239934747ull, 10191181278238330767ull,
+ 9596497803325427296ull, 740298315191606967ull}},
+{{804576916447986950ull, 13106282699873397123ull,
+ 9297997190148906105ull, 148059663038321393ull}},
+{{1609153832895973899ull, 7765821326037242630ull, 149250306588260595ull,
+ 296119326076642787ull}},
+{{3218307665791947798ull, 15531642652074485260ull,
+ 298500613176521190ull, 592238652153285574ull}},
+{{6436615331583895595ull, 12616541230439418904ull,
+ 597001226353042381ull, 1184477304306571148ull}},
+{{12355369510542510089ull, 17280703505055525073ull,
+ 11187446689496339445ull, 236895460861314229ull}},
+{{6263994947375468561ull, 16114662936401498531ull,
+ 3928149305283127275ull, 473790921722628459ull}},
+{{12527989894750937122ull, 13782581799093445446ull,
+ 7856298610566254551ull, 947581843445256918ull}},
+{{2505597978950187425ull, 17513911618786330382ull,
+ 12639306166338981879ull, 189516368689051383ull}},
+{{5011195957900374849ull, 16581079163863109148ull,
+ 6831868258968412143ull, 379032737378102767ull}},
+{{10022391915800749698ull, 14715414254016666680ull,
+ 13663736517936824287ull, 758065474756205534ull}},
+{{5693827197902060263ull, 6632431665545243659ull,
+ 17490142562555006150ull, 151613094951241106ull}},
+{{11387654395804120526ull, 13264863331090487318ull,
+ 16533541051400460684ull, 303226189902482213ull}},
+{{4328564717898689435ull, 8082982588471423021ull,
+ 14620338029091369753ull, 606452379804964427ull}},
+{{8657129435797378870ull, 16165965176942846042ull,
+ 10793931984473187890ull, 1212904759609928855ull}},
+{{9110123516643296421ull, 3233193035388569208ull,
+ 2158786396894637578ull, 242580951921985771ull}},
+{{18220247033286592841ull, 6466386070777138416ull,
+ 4317572793789275156ull, 485161903843971542ull}},
+{{17993749992863634066ull, 12932772141554276833ull,
+ 8635145587578550312ull, 970323807687943084ull}},
+{{18356145257540368106ull, 6275903243052765689ull,
+ 16484424376483351355ull, 194064761537588616ull}},
+{{18265546441371184596ull, 12551806486105531379ull,
+ 14522104679257151094ull, 388129523075177233ull}},
+{{18084348809032817576ull, 6656868898501511143ull,
+ 10597465284804750573ull, 776259046150354467ull}},
+{{14684916206032294485ull, 1331373779700302228ull,
+ 9498190686444770761ull, 155251809230070893ull}},
+{{10923088338355037354ull, 2662747559400604457ull,
+ 549637299179989906ull, 310503618460141787ull}},
+{{3399432603000523091ull, 5325495118801208915ull,
+ 1099274598359979812ull, 621007236920283574ull}},
+{{6798865206001046182ull, 10650990237602417830ull,
+ 2198549196719959624ull, 1242014473840567148ull}},
+{{8738470670684029883ull, 9508895677004304212ull,
+ 11507756283569722894ull, 248402894768113429ull}},
+{{17476941341368059766ull, 571047280299056808ull,
+ 4568768493429894173ull, 496805789536226859ull}},
+{{16507138609026567915ull, 1142094560598113617ull,
+ 9137536986859788346ull, 993611579072453718ull}},
+{{6990776536547223907ull, 14985814171087264016ull,
+ 12895553841597688638ull, 198722315814490743ull}},
+{{13981553073094447813ull, 11524884268464976416ull,
+ 7344363609485825661ull, 397444631628981487ull}},
+{{9516362072479344009ull, 4603024463220401217ull,
+ 14688727218971651323ull, 794889263257962974ull}},
+{{16660667673463510095ull, 8299302522127900889ull,
+ 17695140702761971557ull, 158977852651592594ull}},
+{{14874591273217468573ull, 16598605044255801779ull,
+ 16943537331814391498ull, 317955705303185189ull}},
+{{11302438472725385530ull, 14750466014802051943ull,
+ 15440330589919231381ull, 635911410606370379ull}},
+{{4158132871741219444ull, 11054187955894552271ull,
+ 12433917106128911147ull, 1271822821212740759ull}},
+{{8210324203832064536ull, 5900186405920820777ull,
+ 17244178680193423522ull, 254364564242548151ull}},
+{{16420648407664129071ull, 11800372811841641554ull,
+ 16041613286677295428ull, 508729128485096303ull}},
+{{14394552741618706525ull, 5154001549973731493ull,
+ 13636482499645039241ull, 1017458256970192607ull}},
+{{6568259363065651629ull, 12098846754220477268ull,
+ 10105994129412828494ull, 203491651394038521ull}},
+{{13136518726131303257ull, 5750949434731402920ull,
+ 1765244185116105373ull, 406983302788077043ull}},
+{{7826293378553054897ull, 11501898869462805841ull,
+ 3530488370232210746ull, 813966605576154086ull}},
+{{12633305119936341949ull, 9679077403376381814ull,
+ 4395446488788352472ull, 162793321115230817ull}},
+{{6819866166163132282ull, 911410733043212013ull, 8790892977576704945ull,
+ 325586642230461634ull}},
+{{13639732332326264564ull, 1822821466086424026ull,
+ 17581785955153409890ull, 651173284460923268ull}},
+{{17485341725432894206ull, 11432610737443015774ull,
+ 14584403635256412947ull, 130234656892184653ull}},
+{{16523939377156236796ull, 4418477401176479933ull,
+ 10722063196803274279ull, 260469313784369307ull}},
+{{14601134680602921975ull, 8836954802352959867ull,
+ 2997382319896996942ull, 520938627568738615ull}},
+{{10755525287496292333ull, 17673909604705919735ull,
+ 5994764639793993884ull, 1041877255137477230ull}},
+{{16908500316466899760ull, 18292177179908825239ull,
+ 1198952927958798776ull, 208375451027495446ull}},
+{{15370256559224247903ull, 18137610286108098863ull,
+ 2397905855917597553ull, 416750902054990892ull}},
+{{12293769044738944189ull, 17828476498506646111ull,
+ 4795811711835195107ull, 833501804109981784ull}},
+{{9837451438431609485ull, 7255044114443239545ull,
+ 15716557601334680314ull, 166700360821996356ull}},
+{{1228158803153667353ull, 14510088228886479091ull,
+ 12986371128959809012ull, 333400721643992713ull}},
+{{2456317606307334705ull, 10573432384063406566ull,
+ 7525998184210066409ull, 666801443287985427ull}},
+{{7869961150745287588ull, 5804035291554591636ull,
+ 8883897266325833928ull, 133360288657597085ull}},
+{{15739922301490575175ull, 11608070583109183272ull,
+ 17767794532651667856ull, 266720577315194170ull}},
+{{13033100529271598734ull, 4769397092508814929ull,
+ 17088844991593784097ull, 533441154630388341ull}},
+{{7619456984833645851ull, 9538794185017629859ull,
+ 15730945909478016578ull, 1066882309260776683ull}},
+{{1523891396966729171ull, 5597107651745436295ull,
+ 14214235626121334285ull, 213376461852155336ull}},
+{{3047782793933458341ull, 11194215303490872590ull,
+ 9981727178533116954ull, 426752923704310673ull}},
+{{6095565587866916681ull, 3941686533272193564ull,
+ 1516710283356682293ull, 853505847408621347ull}},
+{{15976508376541024629ull, 788337306654438712ull,
+ 7682039686155157105ull, 170701169481724269ull}},
+{{13506272679372497642ull, 1576674613308877425ull,
+ 15364079372310314210ull, 341402338963448538ull}},
+{{8565801285035443668ull, 3153349226617754851ull,
+ 12281414670911076804ull, 682804677926897077ull}},
+{{9091857886490909380ull, 4320018660065461293ull,
+ 9834980563666036007ull, 136560935585379415ull}},
+{{18183715772981818760ull, 8640037320130922586ull,
+ 1223217053622520398ull, 273121871170758831ull}},
+{{17920687472254085904ull, 17280074640261845173ull,
+ 2446434107245040796ull, 546243742341517662ull}},
+{{17394630870798620192ull, 16113405206814138731ull,
+ 4892868214490081593ull, 1092487484683035324ull}},
+{{14546972618385455008ull, 10601378670846648392ull,
+ 15735968901865657611ull, 218497496936607064ull}},
+{{10647201163061358400ull, 2756013267983745169ull,
+ 13025193730021763607ull, 436994993873214129ull}},
+{{2847658252413165184ull, 5512026535967490339ull,
+ 7603643386333975598ull, 873989987746428259ull}},
+{{4258880465224543360ull, 8481102936677318714ull,
+ 16278123936234436412ull, 174797997549285651ull}},
+{{8517760930449086720ull, 16962205873354637428ull,
+ 14109503798759321208ull, 349595995098571303ull}},
+{{17035521860898173440ull, 15477667672999723240ull,
+ 9772263523809090801ull, 699191990197142607ull}},
+{{14475150816405365658ull, 14163579978825675617ull,
+ 9333150334245638806ull, 139838398039428521ull}},
+{{10503557559101179700ull, 9880415883941799619ull,
+ 219556594781725997ull, 279676796078857043ull}},
+{{2560371044492807783ull, 1314087694174047623ull, 439113189563451995ull,
+ 559353592157714086ull}},
+{{5120742088985615565ull, 2628175388348095246ull, 878226379126903990ull,
+ 1118707184315428172ull}},
+{{12092194862022854083ull, 7904332707153439695ull,
+ 7554342905309201444ull, 223741436863085634ull}},
+{{5737645650336156549ull, 15808665414306879391ull,
+ 15108685810618402888ull, 447482873726171268ull}},
+{{11475291300672313098ull, 13170586754904207166ull,
+ 11770627547527254161ull, 894965747452342537ull}},
+{{17052453519102103913ull, 13702163795206572402ull,
+ 9732823138989271478ull, 178993149490468507ull}},
+{{15658162964494656209ull, 8957583516703593189ull,
+ 1018902204268991341ull, 357986298980937015ull}},
+{{12869581855279760802ull, 17915167033407186379ull,
+ 2037804408537982682ull, 715972597961874030ull}},
+{{6263265185797862484ull, 10961731036165257922ull,
+ 407560881707596536ull, 143194519592374806ull}},
+{{12526530371595724968ull, 3476717998620964228ull,
+ 815121763415193073ull, 286389039184749612ull}},
+{{6606316669481898319ull, 6953435997241928457ull,
+ 1630243526830386146ull, 572778078369499224ull}},
+{{13212633338963796637ull, 13906871994483856914ull,
+ 3260487053660772292ull, 1145556156738998448ull}},
+{{17399921926760400621ull, 2781374398896771382ull,
+ 11720143854957885428ull, 229111231347799689ull}},
+{{16353099779811249625ull, 5562748797793542765ull,
+ 4993543636206219240ull, 458222462695599379ull}},
+{{14259455485912947633ull, 11125497595587085531ull,
+ 9987087272412438480ull, 916444925391198758ull}},
+{{17609286356150230820ull, 13293145963343148075ull,
+ 13065463898708218665ull, 183288985078239751ull}},
+{{16771828638590910023ull, 8139547852976744535ull,
+ 7684183723706885715ull, 366577970156479503ull}},
+{{15096913203472268429ull, 16279095705953489071ull,
+ 15368367447413771430ull, 733155940312959006ull}},
+{{10398080270178274333ull, 6945167955932608137ull,
+ 6763022304224664609ull, 146631188062591801ull}},
+{{2349416466646997049ull, 13890335911865216275ull,
+ 13526044608449329218ull, 293262376125183602ull}},
+{{4698832933293994097ull, 9333927750020880934ull,
+ 8605345143189106821ull, 586524752250367205ull}},
+{{9397665866587988194ull, 221111426332210252ull,
+ 17210690286378213643ull, 1173049504500734410ull}},
+{{1879533173317597639ull, 11112268729492173020ull,
+ 3442138057275642728ull, 234609900900146882ull}},
+{{3759066346635195278ull, 3777793385274794424ull,
+ 6884276114551285457ull, 469219801800293764ull}},
+{{7518132693270390555ull, 7555586770549588848ull,
+ 13768552229102570914ull, 938439603600587528ull}},
+{{1503626538654078111ull, 8889814983593738416ull,
+ 13821756890046245152ull, 187687920720117505ull}},
+{{3007253077308156222ull, 17779629967187476832ull,
+ 9196769706382938688ull, 375375841440235011ull}},
+{{6014506154616312444ull, 17112515860665402048ull,
+ 18393539412765877377ull, 750751682880470022ull}},
+{{8581598860407083136ull, 18179898431100721702ull,
+ 11057405512036996121ull, 150150336576094004ull}},
+{{17163197720814166271ull, 17913052788491891788ull,
+ 3668066950364440627ull, 300300673152188009ull}},
+{{15879651367918780925ull, 17379361503274231961ull,
+ 7336133900728881255ull, 600601346304376018ull}},
+{{13312558662128010234ull, 16311978932838912307ull,
+ 14672267801457762511ull, 1201202692608752036ull}},
+{{17419906991393243340ull, 10641093416051603107ull,
+ 6623802375033462825ull, 240240538521750407ull}},
+{{16393069909076935063ull, 2835442758393654599ull,
+ 13247604750066925651ull, 480481077043500814ull}},
+{{14339395744444318510ull, 5670885516787309199ull,
+ 8048465426424299686ull, 960962154087001629ull}},
+{{17625274407856504995ull, 1134177103357461839ull,
+ 16367088344252501230ull, 192192430817400325ull}},
+{{16803804742003458374ull, 2268354206714923679ull,
+ 14287432614795450844ull, 384384861634800651ull}},
+{{15160865410297365131ull, 4536708413429847359ull,
+ 10128121155881350072ull, 768769723269601303ull}},
+{{17789568341027114319ull, 907341682685969471ull,
+ 13093670675402000984ull, 153753944653920260ull}},
+{{17132392608344677022ull, 1814683365371938943ull,
+ 7740597277094450352ull, 307507889307840521ull}},
+{{15818041142979802428ull, 3629366730743877887ull,
+ 15481194554188900704ull, 615015778615681042ull}},
+{{13189338212250053240ull, 7258733461487755775ull,
+ 12515645034668249792ull, 1230031557231362085ull}},
+{{10016565271933831295ull, 8830444321781371801ull,
+ 2503129006933649958ull, 246006311446272417ull}},
+{{1586386470158110973ull, 17660888643562743603ull,
+ 5006258013867299916ull, 492012622892544834ull}},
+{{3172772940316221946ull, 16875033213415935590ull,
+ 10012516027734599833ull, 984025245785089668ull}},
+{{4323903402805154713ull, 7064355457425097441ull,
+ 13070549649772650936ull, 196805049157017933ull}},
+{{8647806805610309425ull, 14128710914850194882ull,
+ 7694355225835750256ull, 393610098314035867ull}},
+{{17295613611220618850ull, 9810677755990838148ull,
+ 15388710451671500513ull, 787220196628071734ull}},
+{{3459122722244123770ull, 9340833180681988276ull,
+ 17835137349301941395ull, 157444039325614346ull}},
+{{6918245444488247540ull, 234922287654424936ull,
+ 17223530624894331175ull, 314888078651228693ull}},
+{{13836490888976495080ull, 469844575308849872ull,
+ 16000317176079110734ull, 629776157302457387ull}},
+{{9226237704243438543ull, 939689150617699745ull,
+ 13553890278448669852ull, 1259552314604914775ull}},
+{{9223945170332508355ull, 7566635459607360595ull,
+ 2710778055689733970ull, 251910462920982955ull}},
+{{1146266955465094ull, 15133270919214721191ull, 5421556111379467940ull,
+ 503820925841965910ull}},
+{{2292533910930188ull, 11819797764719890766ull, 10843112222758935881ull,
+ 1007641851683931820ull}},
+{{7379156136266006684ull, 6053308367685888476ull,
+ 2168622444551787176ull, 201528370336786364ull}},
+{{14758312272532013368ull, 12106616735371776952ull,
+ 4337244889103574352ull, 403056740673572728ull}},
+{{11069880471354475120ull, 5766489397034002289ull,
+ 8674489778207148705ull, 806113481347145456ull}},
+{{2213976094270895024ull, 4842646694148710781ull,
+ 5424246770383340064ull, 161222696269429091ull}},
+{{4427952188541790048ull, 9685293388297421562ull,
+ 10848493540766680128ull, 322445392538858182ull}},
+{{8855904377083580096ull, 923842702885291508ull, 3250243007823808641ull,
+ 644890785077716365ull}},
+{{16528576134384357312ull, 3874117355318968624ull,
+ 650048601564761728ull, 128978157015543273ull}},
+{{14610408195059163008ull, 7748234710637937249ull,
+ 1300097203129523456ull, 257956314031086546ull}},
+{{10774072316408774400ull, 15496469421275874499ull,
+ 2600194406259046912ull, 515912628062173092ull}},
+{{3101400559107997184ull, 12546194768842197383ull,
+ 5200388812518093825ull, 1031825256124346184ull}},
+{{7998977741305420084ull, 17266634212736080769ull,
+ 15797473021471260057ull, 206365051224869236ull}},
+{{15997955482610840167ull, 16086524351762609922ull,
+ 13148201969232968499ull, 412730102449738473ull}},
+{{13549166891512128717ull, 13726304629815668229ull,
+ 7849659864756385383ull, 825460204899476947ull}},
+{{17467228637270067037ull, 2745260925963133645ull,
+ 8948629602435097723ull, 165092040979895389ull}},
+{{16487713200830582457ull, 5490521851926267291ull,
+ 17897259204870195446ull, 330184081959790778ull}},
+{{14528682327951613297ull, 10981043703852534583ull,
+ 17347774336030839276ull, 660368163919581557ull}},
+{{6595085280332232983ull, 13264255184996237886ull,
+ 10848252496689988501ull, 132073632783916311ull}},
+{{13190170560664465966ull, 8081766296282924156ull,
+ 3249760919670425387ull, 264147265567832623ull}},
+{{7933597047619380315ull, 16163532592565848313ull,
+ 6499521839340850774ull, 528294531135665246ull}},
+{{15867194095238760629ull, 13880321111422145010ull,
+ 12999043678681701549ull, 1056589062271330492ull}},
+{{6862787633789662449ull, 6465413037026339325ull,
+ 9978506365220160956ull, 211317812454266098ull}},
+{{13725575267579324898ull, 12930826074052678650ull,
+ 1510268656730770296ull, 422635624908532197ull}},
+{{9004406461449098180ull, 7414908074395805685ull,
+ 3020537313461540593ull, 845271249817064394ull}},
+{{9179578921773640283ull, 8861679244362981783ull,
+ 15361502721659949411ull, 169054249963412878ull}},
+{{18359157843547280565ull, 17723358488725963566ull,
+ 12276261369610347206ull, 338108499926825757ull}},
+{{18271571613385009514ull, 16999972903742375517ull,
+ 6105778665511142797ull, 676216999853651515ull}},
+{{18411709581644643196ull, 10778692210232295749ull,
+ 1221155733102228559ull, 135243399970730303ull}},
+{{18376675089579734775ull, 3110640346755039883ull,
+ 2442311466204457119ull, 270486799941460606ull}},
+{{18306606105449917934ull, 6221280693510079767ull,
+ 4884622932408914238ull, 540973599882921212ull}},
+{{18166468137190284252ull, 12442561387020159535ull,
+ 9769245864817828476ull, 1081947199765842424ull}},
+{{3633293627438056851ull, 2488512277404031907ull,
+ 16711244431931206988ull, 216389439953168484ull}},
+{{7266587254876113701ull, 4977024554808063814ull,
+ 14975744790152862360ull, 432778879906336969ull}},
+{{14533174509752227401ull, 9954049109616127628ull,
+ 11504745506596173104ull, 865557759812673939ull}},
+{{6595983716692355804ull, 13058856266148956495ull,
+ 17058344360286875913ull, 173111551962534787ull}},
+{{13191967433384711607ull, 7670968458588361374ull,
+ 15669944646864200211ull, 346223103925069575ull}},
+{{7937190793059871598ull, 15341936917176722749ull,
+ 12893145220018848806ull, 692446207850139151ull}},
+{{5276786973353884643ull, 10447085012919165196ull,
+ 6267977858745680084ull, 138489241570027830ull}},
+{{10553573946707769286ull, 2447425952128778776ull,
+ 12535955717491360169ull, 276978483140055660ull}},
+{{2660403819705986955ull, 4894851904257557553ull,
+ 6625167361273168722ull, 553956966280111321ull}},
+{{5320807639411973910ull, 9789703808515115106ull,
+ 13250334722546337444ull, 1107913932560222642ull}},
+{{8442859157366215429ull, 5647289576444933344ull,
+ 10028764573993088135ull, 221582786512044528ull}},
+{{16885718314732430857ull, 11294579152889866688ull,
+ 1610785074276624654ull, 443165573024089057ull}},
+{{15324692555755310098ull, 4142414232070181761ull,
+ 3221570148553249309ull, 886331146048178114ull}},
+{{17822333770118703313ull, 11896529290639767321ull,
+ 15401709288678291154ull, 177266229209635622ull}},
+{{17197923466527855009ull, 5346314507569983027ull,
+ 12356674503647030693ull, 354532458419271245ull}},
+{{15949102859346158402ull, 10692629015139966055ull,
+ 6266604933584509770ull, 709064916838542491ull}},
+{{6879169386611142004ull, 5827874617769903534ull,
+ 4942669801458812277ull, 141812983367708498ull}},
+{{13758338773222284007ull, 11655749235539807068ull,
+ 9885339602917624554ull, 283625966735416996ull}},
+{{9069933472735016398ull, 4864754397370062521ull,
+ 1323935132125697493ull, 567251933470833993ull}},
+{{18139866945470032796ull, 9729508794740125042ull,
+ 2647870264251394986ull, 1134503866941667986ull}},
+{{18385368648061647852ull, 9324599388431845654ull,
+ 4218922867592189320ull, 226900773388333597ull}},
+{{18323993222413744088ull, 202454703154139693ull,
+ 8437845735184378641ull, 453801546776667194ull}},
+{{18201242371117936560ull, 404909406308279387ull,
+ 16875691470368757282ull, 907603093553334388ull}},
+{{11018946103707407959ull, 80981881261655877ull,
+ 14443184738299482426ull, 181520618710666877ull}},
+{{3591148133705264301ull, 161963762523311755ull,
+ 10439625402889413236ull, 363041237421333755ull}},
+{{7182296267410528602ull, 323927525046623510ull, 2432506732069274856ull,
+ 726082474842667511ull}},
+{{8815156882965926367ull, 7443483134493145348ull,
+ 4175850161155765294ull, 145216494968533502ull}},
+{{17630313765931852734ull, 14886966268986290696ull,
+ 8351700322311530588ull, 290432989937067004ull}},
+{{16813883458154153851ull, 11327188464263029777ull,
+ 16703400644623061177ull, 580865979874134008ull}},
+{{15181022842598756086ull, 4207632854816507939ull,
+ 14960057215536570739ull, 1161731959748268017ull}},
+{{3036204568519751218ull, 4530875385705211911ull,
+ 10370709072591134794ull, 232346391949653603ull}},
+{{6072409137039502435ull, 9061750771410423822ull,
+ 2294674071472717972ull, 464692783899307207ull}},
+{{12144818274079004869ull, 18123501542820847644ull,
+ 4589348142945435944ull, 929385567798614414ull}},
+{{9807661284299621621ull, 14692746752789900498ull,
+ 15675264887556728481ull, 185877113559722882ull}},
+{{1168578494889691625ull, 10938749431870249381ull,
+ 12903785701403905347ull, 371754227119445765ull}},
+{{2337156989779383249ull, 3430754790030947146ull,
+ 7360827329098259079ull, 743508454238891531ull}},
+{{4156780212697786973ull, 686150958006189429ull, 5161514280561562139ull,
+ 148701690847778306ull}},
+{{8313560425395573946ull, 1372301916012378858ull,
+ 10323028561123124278ull, 297403381695556612ull}},
+{{16627120850791147892ull, 2744603832024757716ull,
+ 2199313048536696940ull, 594806763391113225ull}},
+{{14807497627872744167ull, 5489207664049515433ull,
+ 4398626097073393880ull, 1189613526782226450ull}},
+{{14029545969800279803ull, 1097841532809903086ull,
+ 879725219414678776ull, 237922705356445290ull}},
+{{9612347865891007990ull, 2195683065619806173ull,
+ 1759450438829357552ull, 475845410712890580ull}},
+{{777951658072464364ull, 4391366131239612347ull, 3518900877658715104ull,
+ 951690821425781160ull}},
+{{3844939146356403196ull, 15635668485215563762ull,
+ 703780175531743020ull, 190338164285156232ull}},
+{{7689878292712806392ull, 12824592896721575908ull,
+ 1407560351063486041ull, 380676328570312464ull}},
+{{15379756585425612784ull, 7202441719733600200ull,
+ 2815120702126972083ull, 761352657140624928ull}},
+{{6765300131827032880ull, 5129837158688630363ull,
+ 11631070584651125386ull, 152270531428124985ull}},
+{{13530600263654065760ull, 10259674317377260726ull,
+ 4815397095592699156ull, 304541062856249971ull}},
+{{8614456453598579904ull, 2072604561044969837ull,
+ 9630794191185398313ull, 609082125712499942ull}},
+{{17228912907197159808ull, 4145209122089939674ull,
+ 814844308661245010ull, 1218164251424999885ull}},
+{{18203177840407073255ull, 829041824417987934ull, 162968861732249002ull,
+ 243632850284999977ull}},
+{{17959611607104594893ull, 1658083648835975869ull,
+ 325937723464498004ull, 487265700569999954ull}},
+{{17472479140499638170ull, 3316167297671951739ull,
+ 651875446928996008ull, 974531401139999908ull}},
+{{3494495828099927634ull, 4352582274276300671ull,
+ 11198421533611530171ull, 194906280227999981ull}},
+{{6988991656199855268ull, 8705164548552601342ull,
+ 3950098993513508726ull, 389812560455999963ull}},
+{{13977983312399710536ull, 17410329097105202684ull,
+ 7900197987027017452ull, 779625120911999926ull}},
+{{10174294291963762754ull, 14550112263646771506ull,
+ 5269388412147313813ull, 155925024182399985ull}},
+{{1901844510217973891ull, 10653480453583991397ull,
+ 10538776824294627627ull, 311850048364799970ull}},
+{{3803689020435947782ull, 2860216833458431178ull,
+ 2630809574879703639ull, 623700096729599941ull}},
+{{7607378040871895564ull, 5720433666916862356ull,
+ 5261619149759407278ull, 1247400193459199882ull}},
+{{5210824422916289436ull, 1144086733383372471ull,
+ 8431021459435702102ull, 249480038691839976ull}},
+{{10421648845832578872ull, 2288173466766744942ull,
+ 16862042918871404204ull, 498960077383679952ull}},
+{{2396553617955606128ull, 4576346933533489885ull,
+ 15277341764033256792ull, 997920154767359905ull}},
+{{7858008353074941872ull, 8293967016190518623ull,
+ 3055468352806651358ull, 199584030953471981ull}},
+{{15716016706149883744ull, 16587934032381037246ull,
+ 6110936705613302716ull, 399168061906943962ull}},
+{{12985289338590215872ull, 14729123991052522877ull,
+ 12221873411226605433ull, 798336123813887924ull}},
+{{17354453126685684468ull, 10324522427694325221ull,
+ 17201769941212962379ull, 159667224762777584ull}},
+{{16262162179661817319ull, 2202300781679098827ull,
+ 15956795808716373143ull, 319334449525555169ull}},
+{{14077580285614083021ull, 4404601563358197655ull,
+ 13466847543723194670ull, 638668899051110339ull}},
+{{9708416497518614426ull, 8809203126716395311ull,
+ 8486951013736837724ull, 1277337798102220679ull}},
+{{16699078558471364178ull, 12829887069569010031ull,
+ 16454785461715008837ull, 255467559620444135ull}},
+{{14951413043233176740ull, 7213030065428468447ull,
+ 14462826849720466059ull, 510935119240888271ull}},
+{{11456082012756801864ull, 14426060130856936895ull,
+ 10478909625731380502ull, 1021870238481776543ull}},
+{{2291216402551360373ull, 2885212026171387379ull,
+ 13163828369372007070ull, 204374047696355308ull}},
+{{4582432805102720746ull, 5770424052342774758ull,
+ 7880912665034462524ull, 408748095392710617ull}},
+{{9164865610205441491ull, 11540848104685549516ull,
+ 15761825330068925048ull, 817496190785421234ull}},
+{{12901019566266819268ull, 9686867250420930549ull,
+ 17909760324981426302ull, 163499238157084246ull}},
+{{7355295058824086920ull, 926990427132309483ull,
+ 17372776576253300989ull, 326998476314168493ull}},
+{{14710590117648173840ull, 1853980854264618966ull,
+ 16298809078797050362ull, 653996952628336987ull}},
+{{2942118023529634768ull, 15128191429820565086ull,
+ 10638459445243230718ull, 130799390525667397ull}},
+{{5884236047059269536ull, 11809638785931578556ull,
+ 2830174816776909821ull, 261598781051334795ull}},
+{{11768472094118539072ull, 5172533498153605496ull,
+ 5660349633553819643ull, 523197562102669590ull}},
+{{5090200114527526527ull, 10345066996307210993ull,
+ 11320699267107639286ull, 1046395124205339180ull}},
+{{15775435281873146599ull, 5758362214003352521ull,
+ 2264139853421527857ull, 209279024841067836ull}},
+{{13104126490036741581ull, 11516724428006705043ull,
+ 4528279706843055714ull, 418558049682135672ull}},
+{{7761508906363931545ull, 4586704782303858471ull,
+ 9056559413686111429ull, 837116099364271344ull}},
+{{16309697040240427602ull, 11985387400686502663ull,
+ 16568707141704863578ull, 167423219872854268ull}},
+{{14172650006771303588ull, 5524030727663453711ull,
+ 14690670209700175541ull, 334846439745708537ull}},
+{{9898555939833055559ull, 11048061455326907423ull,
+ 10934596345690799466ull, 669692879491417075ull}},
+{{16737106446934252405ull, 5898961105807291807ull,
+ 2186919269138159893ull, 133938575898283415ull}},
+{{15027468820158953194ull, 11797922211614583615ull,
+ 4373838538276319786ull, 267877151796566830ull}},
+{{11608193566608354771ull, 5149100349519615615ull,
+ 8747677076552639573ull, 535754303593133660ull}},
+{{4769643059507157925ull, 10298200699039231231ull,
+ 17495354153105279146ull, 1071508607186267320ull}},
+{{8332626241385252232ull, 5748988954549756569ull,
+ 3499070830621055829ull, 214301721437253464ull}},
+{{16665252482770504463ull, 11497977909099513138ull,
+ 6998141661242111658ull, 428603442874506928ull}},
+{{14883760891831457310ull, 4549211744489474661ull,
+ 13996283322484223317ull, 857206885749013856ull}},
+{{17734147437333932755ull, 11977888793123625901ull,
+ 6488605479238754986ull, 171441377149802771ull}},
+{{17021550800958313894ull, 5509033512537700187ull,
+ 12977210958477509973ull, 342882754299605542ull}},
+{{15596357528207076171ull, 11018067025075400375ull,
+ 7507677843245468330ull, 685765508599211085ull}},
+{{3119271505641415235ull, 2203613405015080075ull,
+ 1501535568649093666ull, 137153101719842217ull}},
+{{6238543011282830469ull, 4407226810030160150ull,
+ 3003071137298187332ull, 274306203439684434ull}},
+{{12477086022565660937ull, 8814453620060320300ull,
+ 6006142274596374664ull, 548612406879368868ull}},
+{{6507427971421770257ull, 17628907240120640601ull,
+ 12012284549192749328ull, 1097224813758737736ull}},
+{{1301485594284354052ull, 18283176706991769413ull,
+ 6091805724580460188ull, 219444962751747547ull}},
+{{2602971188568708103ull, 18119609340273987210ull,
+ 12183611449160920377ull, 438889925503495094ull}},
+{{5205942377137416206ull, 17792474606838422804ull,
+ 5920478824612289139ull, 877779851006990189ull}},
+{{8419886104911303888ull, 14626541365593415530ull,
+ 15941491023890099120ull, 175555970201398037ull}},
+{{16839772209822607775ull, 10806338657477279444ull,
+ 13436237974070646625ull, 351111940402796075ull}},
+{{15232800345935663934ull, 3165933241245007273ull,
+ 8425731874431741635ull, 702223880805592151ull}},
+{{17803955328154774080ull, 4322535462990911777ull,
+ 5374495189628258650ull, 140444776161118430ull}},
+{{17161166582599996544ull, 8645070925981823555ull,
+ 10748990379256517300ull, 280889552322236860ull}},
+{{15875589091490441471ull, 17290141851963647111ull,
+ 3051236684803482984ull, 561779104644473721ull}},
+{{13304434109271331325ull, 16133539630217742607ull,
+ 6102473369606965969ull, 1123558209288947442ull}},
+{{13728933266079997235ull, 6916056740785458844ull,
+ 8599192303405213840ull, 224711641857789488ull}},
+{{9011122458450442854ull, 13832113481570917689ull,
+ 17198384606810427680ull, 449423283715578976ull}},
+{{18022244916900885707ull, 9217482889432283762ull,
+ 15950025139911303745ull, 898846567431157953ull}},
+{{3604448983380177142ull, 12911543022112187722ull,
+ 14258051472207991718ull, 179769313486231590ull}},
+{{7208897966760354283ull, 7376341970514823828ull,
+ 10069358870706431821ull, 359538626972463181ull}},
+{{14417795933520708565ull, 14752683941029647656ull,
+ 1691973667703312026ull, 719077253944926363ull}},
+{{2883559186704141713ull, 17707932047173570824ull,
+ 11406441177766393374ull, 143815450788985272ull}},
+{{5767118373408283426ull, 16969120020637590032ull,
+ 4366138281823235133ull, 287630901577970545ull}},
+{{11534236746816566852ull, 15491495967565628448ull,
+ 8732276563646470267ull, 575261803155941090ull}},
+{{4621729419923582088ull, 12536247861421705281ull,
+ 17464553127292940535ull, 1150523606311882180ull}},
+{{4613694698726626741ull, 2507249572284341056ull,
+ 3492910625458588107ull, 230104721262376436ull}},
+{{9227389397453253482ull, 5014499144568682112ull,
+ 6985821250917176214ull, 460209442524752872ull}},
+{{8034721196955348ull, 10028998289137364225ull, 13971642501834352428ull,
+ 920418885049505744ull}},
+{{7380304573723211716ull, 9384497287311293491ull,
+ 17551723759334511778ull, 184083777009901148ull}},
+{{14760609147446423432ull, 322250500913035366ull,
+ 16656703444959471941ull, 368167554019802297ull}},
+{{11074474221183295248ull, 644501001826070733ull,
+ 14866662816209392266ull, 736335108039604595ull}},
+{{16972290103204300343ull, 3818249015107124469ull,
+ 2973332563241878453ull, 147267021607920919ull}},
+{{15497836132699049069ull, 7636498030214248939ull,
+ 5946665126483756906ull, 294534043215841838ull}},
+{{12548928191688546521ull, 15272996060428497879ull,
+ 11893330252967513812ull, 589068086431683676ull}},
+{{6651112309667541426ull, 12099248047147444143ull,
+ 5339916432225476009ull, 1178136172863367353ull}},
+{{1330222461933508286ull, 9798547238913309475ull,
+ 12136029730670826171ull, 235627234572673470ull}},
+{{2660444923867016571ull, 1150350404117067334ull,
+ 5825315387632100727ull, 471254469145346941ull}},
+{{5320889847734033141ull, 2300700808234134668ull,
+ 11650630775264201454ull, 942508938290693882ull}},
+{{15821573228514447921ull, 4149488976388737256ull,
+ 9708823784536660937ull, 188501787658138776ull}},
+{{13196402383319344226ull, 8298977952777474513ull,
+ 970903495363770258ull, 377003575316277553ull}},
+{{7946060692929136836ull, 16597955905554949027ull,
+ 1941806990727540516ull, 754007150632555106ull}},
+{{16346607397553468660ull, 10698288810594810451ull,
+ 4077710212887418426ull, 150801430126511021ull}},
+{{14246470721397385704ull, 2949833547480069287ull,
+ 8155420425774836853ull, 301602860253022042ull}},
+{{10046197369085219792ull, 5899667094960138575ull,
+ 16310840851549673706ull, 603205720506044084ull}},
+{{1645650664460887968ull, 11799334189920277151ull,
+ 14174937629389795796ull, 1206411441012088169ull}},
+{{4018478947634087917ull, 2359866837984055430ull,
+ 17592382784845600452ull, 241282288202417633ull}},
+{{8036957895268175834ull, 4719733675968110860ull,
+ 16738021495981649288ull, 482564576404835267ull}},
+{{16073915790536351667ull, 9439467351936221720ull,
+ 15029298918253746960ull, 965129152809670535ull}},
+{{3214783158107270334ull, 1887893470387244344ull,
+ 3005859783650749392ull, 193025830561934107ull}},
+{{6429566316214540667ull, 3775786940774488688ull,
+ 6011719567301498784ull, 386051661123868214ull}},
+{{12859132632429081334ull, 7551573881548977376ull,
+ 12023439134602997568ull, 772103322247736428ull}},
+{{9950524155969636914ull, 5199663591051705798ull,
+ 13472734271146330483ull, 154420664449547285ull}},
+{{1454304238229722211ull, 10399327182103411597ull,
+ 8498724468583109350ull, 308841328899094571ull}},
+{{2908608476459444421ull, 2351910290497271578ull,
+ 16997448937166218701ull, 617682657798189142ull}},
+{{5817216952918888841ull, 4703820580994543156ull,
+ 15548153800622885786ull, 1235365315596378285ull}},
+{{8542141020067598415ull, 4630112930940818954ull,
+ 3109630760124577157ull, 247073063119275657ull}},
+{{17084282040135196830ull, 9260225861881637908ull,
+ 6219261520249154314ull, 494146126238551314ull}},
+{{15721820006560842043ull, 73707650053724201ull,
+ 12438523040498308629ull, 988292252477102628ull}},
+{{14212410445537899379ull, 7393439159494565486ull,
+ 13555751052325392695ull, 197658450495420525ull}},
+{{9978076817366247141ull, 14786878318989130973ull,
+ 8664758030941233774ull, 395316900990841051ull}},
+{{1509409561022942665ull, 11127012564268710331ull,
+ 17329516061882467549ull, 790633801981682102ull}},
+{{7680579541688409180ull, 5914751327595652389ull,
+ 10844600841860314156ull, 158126760396336420ull}},
+{{15361159083376818359ull, 11829502655191304778ull,
+ 3242457610011076696ull, 316253520792672841ull}},
+{{12275574093044085102ull, 5212261236673057941ull,
+ 6484915220022153393ull, 632507041585345682ull}},
+{{6104404112378618587ull, 10424522473346115883ull,
+ 12969830440044306786ull, 1265014083170691364ull}},
+{{12288927266701454687ull, 2084904494669223176ull,
+ 17351361346976502650ull, 253002816634138272ull}},
+{{6131110459693357758ull, 4169808989338446353ull,
+ 16255978620243453684ull, 506005633268276545ull}},
+{{12262220919386715516ull, 8339617978676892706ull,
+ 14065213166777355752ull, 1012011266536553091ull}},
+{{17209839442844984396ull, 12735970039961109510ull,
+ 6502391448097381473ull, 202402253307310618ull}},
+{{15972934811980417176ull, 7025196006212667405ull,
+ 13004782896194762947ull, 404804506614621236ull}},
+{{13499125550251282736ull, 14050392012425334811ull,
+ 7562821718679974278ull, 809609013229242473ull}},
+{{10078522739534077194ull, 6499427217226977285ull,
+ 12580610787961725825ull, 161921802645848494ull}},
+{{1710301405358602771ull, 12998854434453954571ull,
+ 6714477502213900034ull, 323843605291696989ull}},
+{{3420602810717205542ull, 7550964795198357526ull,
+ 13428955004427800069ull, 647687210583393978ull}},
+{{11752167006369172078ull, 8888890588523492151ull,
+ 13753837445111290983ull, 129537442116678795ull}},
+{{5057589939028792540ull, 17777781177046984303ull,
+ 9060930816513030350ull, 259074884233357591ull}},
+{{10115179878057585080ull, 17108818280384416990ull,
+ 18121861633026060701ull, 518149768466715182ull}},
+{{1783615682405618544ull, 15770892487059282365ull,
+ 17796979192342569787ull, 1036299536933430365ull}},
+{{7735420765964944356ull, 10532876126895677119ull,
+ 3559395838468513957ull, 207259907386686073ull}},
+{{15470841531929888711ull, 2619008180081802622ull,
+ 7118791676937027915ull, 414519814773372146ull}},
+{{12494938990150225805ull, 5238016360163605245ull,
+ 14237583353874055830ull, 829039629546744292ull}},
+{{9877685427513865808ull, 8426300901516541695ull,
+ 10226214300258631812ull, 165807925909348858ull}},
+{{1308626781318179999ull, 16852601803033083391ull,
+ 2005684526807712008ull, 331615851818697717ull}},
+{{2617253562636359998ull, 15258459532356615166ull,
+ 4011369053615424017ull, 663231703637395434ull}},
+{{7902148342011092646ull, 6741040721213233356ull,
+ 15559669069690726096ull, 132646340727479086ull}},
+{{15804296684022185292ull, 13482081442426466712ull,
+ 12672594065671900576ull, 265292681454958173ull}},
+{{13161849294334818968ull, 8517418811143381809ull,
+ 6898444057634249537ull, 530585362909916347ull}},
+{{7876954514960086319ull, 17034837622286763619ull,
+ 13796888115268499074ull, 1061170725819832694ull}},
+{{8954088532475837911ull, 14475013968683083693ull,
+ 17516772882021341107ull, 212234145163966538ull}},
+{{17908177064951675821ull, 10503283863656615770ull,
+ 16586801690333130599ull, 424468290327933077ull}},
+{{17369610056193800025ull, 2559823653603679925ull,
+ 14726859306956709583ull, 848936580655866155ull}},
+{{14541968455464490975ull, 11580011174946466954ull,
+ 2945371861391341916ull, 169787316131173231ull}},
+{{10637192837219430334ull, 4713278276183382293ull,
+ 5890743722782683833ull, 339574632262346462ull}},
+{{2827641600729309051ull, 9426556552366764587ull,
+ 11781487445565367666ull, 679149264524692924ull}},
+{{7944225949629682457ull, 1885311310473352917ull,
+ 17113692748080714826ull, 135829852904938584ull}},
+{{15888451899259364913ull, 3770622620946705834ull,
+ 15780641422451878036ull, 271659705809877169ull}},
+{{13330159724809178210ull, 7541245241893411669ull,
+ 13114538771194204456ull, 543319411619754339ull}},
+{{8213575375908804804ull, 15082490483786823339ull,
+ 7782333468678857296ull, 1086638823239508679ull}},
+{{16400110334149402254ull, 3016498096757364667ull,
+ 16313861952703412752ull, 217327764647901735ull}},
+{{14353476594589252892ull, 6032996193514729335ull,
+ 14180979831697273888ull, 434655529295803471ull}},
+{{10260209115468954167ull, 12065992387029458671ull,
+ 9915215589684996160ull, 869311058591606943ull}},
+{{16809437082061432127ull, 13481244921631622703ull,
+ 13051089562162730201ull, 173862211718321388ull}},
+{{15172130090413312637ull, 8515745769553693791ull,
+ 7655435050615908787ull, 347724423436642777ull}},
+{{11897516107117073657ull, 17031491539107387583ull,
+ 15310870101231817574ull, 695448846873285554ull}},
+{{6068852036165325055ull, 14474344752047208486ull,
+ 17819569279214004807ull, 139089769374657110ull}},
+{{12137704072330650109ull, 10501945430384865356ull,
+ 17192394484718457999ull, 278179538749314221ull}},
+{{5828664070951748602ull, 2557146787060179097ull,
+ 15938044895727364383ull, 556359077498628443ull}},
+{{11657328141903497204ull, 5114293574120358194ull,
+ 13429345717745177150ull, 1112718154997256887ull}},
+{{6020814443122609764ull, 8401556344307892285ull,
+ 10064566773032856076ull, 222543630999451377ull}},
+{{12041628886245219528ull, 16803112688615784570ull,
+ 1682389472356160536ull, 445087261998902755ull}},
+{{5636513698780887440ull, 15159481303522017525ull,
+ 3364778944712321073ull, 890174523997805510ull}},
+{{12195349183981908458ull, 14099942704930134474ull,
+ 672955788942464214ull, 178034904799561102ull}},
+{{5943954294254265299ull, 9753141336150717333ull,
+ 1345911577884928429ull, 356069809599122204ull}},
+{{11887908588508530598ull, 1059538598591883050ull,
+ 2691823155769856859ull, 712139619198244408ull}},
+{{9756279347185526766ull, 7590605349202197256ull,
+ 11606411075379702341ull, 142427923839648881ull}},
+{{1065814620661501916ull, 15181210698404394513ull,
+ 4766078077049853066ull, 284855847679297763ull}},
+{{2131629241323003832ull, 11915677323099237410ull,
+ 9532156154099706133ull, 569711695358595526ull}},
+{{4263258482646007664ull, 5384610572488923204ull, 617568234489860651ull,
+ 1139423390717191053ull}},
+{{11920698140754932503ull, 15834317373465425933ull,
+ 11191560091123703099ull, 227884678143438210ull}},
+{{5394652207800313389ull, 13221890673221300251ull,
+ 3936376108537854583ull, 455769356286876421ull}},
+{{10789304415600626778ull, 7997037272733048886ull,
+ 7872752217075709167ull, 911538712573752842ull}},
+{{2157860883120125356ull, 16356802713514251070ull,
+ 8953248072898962479ull, 182307742514750568ull}},
+{{4315721766240250711ull, 14266861353318950524ull,
+ 17906496145797924959ull, 364615485029501136ull}},
+{{8631443532480501422ull, 10086978632928349432ull,
+ 17366248217886298303ull, 729230970059002273ull}},
+{{12794335150721831254ull, 5706744541327580209ull,
+ 14541296087802990630ull, 145846194011800454ull}},
+{{7141926227734110892ull, 11413489082655160419ull,
+ 10635848101896429644ull, 291692388023600909ull}},
+{{14283852455468221784ull, 4380234091600769222ull,
+ 2824952130083307673ull, 583384776047201819ull}},
+{{10120960837226891952ull, 8760468183201538445ull,
+ 5649904260166615346ull, 1166769552094403638ull}},
+{{16781587426413019684ull, 16509488895607948981ull,
+ 12198027296259054038ull, 233353910418880727ull}},
+{{15116430779116487751ull, 14572233717506346347ull,
+ 5949310518808556461ull, 466707820837761455ull}},
+{{11786117484523423885ull, 10697723361303141079ull,
+ 11898621037617112923ull, 933415641675522910ull}},
+{{9735921126388505424ull, 13207591116486359185ull,
+ 2379724207523422584ull, 186683128335104582ull}},
+{{1025098179067459231ull, 7968438159263166755ull,
+ 4759448415046845169ull, 373366256670209164ull}},
+{{2050196358134918462ull, 15936876318526333510ull,
+ 9518896830093690338ull, 746732513340418328ull}},
+{{4099388086368894016ull, 6876724078447177025ull,
+ 12971825810244469037ull, 149346502668083665ull}},
+{{8198776172737788031ull, 13753448156894354050ull,
+ 7496907546779386458ull, 298693005336167331ull}},
+{{16397552345475576062ull, 9060152240079156484ull,
+ 14993815093558772917ull, 597386010672334662ull}},
+{{14348360617241600508ull, 18120304480158312969ull,
+ 11540886113407994218ull, 1194772021344669325ull}},
+{{10248369752932140748ull, 14692107340257393563ull,
+ 2308177222681598843ull, 238954404268933865ull}},
+{{2049995432154729880ull, 10937470606805235511ull,
+ 4616354445363197687ull, 477908808537867730ull}},
+{{4099990864309459760ull, 3428197139900919406ull,
+ 9232708890726395375ull, 955817617075735460ull}},
+{{4509346987603802276ull, 685639427980183881ull, 1846541778145279075ull,
+ 191163523415147092ull}},
+{{9018693975207604551ull, 1371278855960367762ull,
+ 3693083556290558150ull, 382327046830294184ull}},
+{{18037387950415209101ull, 2742557711920735524ull,
+ 7386167112581116300ull, 764654093660588368ull}},
+{{10986175219566862467ull, 11616557986609878074ull,
+ 12545279866741954229ull, 152930818732117673ull}},
+{{3525606365424173318ull, 4786371899510204533ull,
+ 6643815659774356843ull, 305861637464235347ull}},
+{{7051212730848346635ull, 9572743799020409066ull,
+ 13287631319548713686ull, 611723274928470694ull}},
+{{14102425461696693269ull, 698743524331266516ull,
+ 8128518565387875757ull, 1223446549856941389ull}},
+{{10199182721823159301ull, 3829097519608163626ull,
+ 16383098972045216444ull, 244689309971388277ull}},
+{{1951621369936766985ull, 7658195039216327253ull,
+ 14319453870380881272ull, 489378619942776555ull}},
+{{3903242739873533969ull, 15316390078432654506ull,
+ 10192163667052210928ull, 978757239885553111ull}},
+{{780648547974706794ull, 17820673274654172194ull,
+ 5727781548152352508ull, 195751447977110622ull}},
+{{1561297095949413588ull, 17194602475598792772ull,
+ 11455563096304705017ull, 391502895954221244ull}},
+{{3122594191898827175ull, 15942460877488033928ull,
+ 4464382118899858419ull, 783005791908442489ull}},
+{{4313867653121675759ull, 14256538619723337755ull,
+ 15650271682747612976ull, 156601158381688497ull}},
+{{8627735306243351517ull, 10066333165737123894ull,
+ 12853799291785674337ull, 313202316763376995ull}},
+{{17255470612486703033ull, 1685922257764696172ull,
+ 7260854509861797059ull, 626404633526753991ull}},
+{{16064197151263854450ull, 3371844515529392345ull,
+ 14521709019723594118ull, 1252809267053507982ull}},
+{{3212839430252770890ull, 674368903105878469ull,
+ 10283039433428539470ull, 250561853410701596ull}},
+{{6425678860505541780ull, 1348737806211756938ull,
+ 2119334793147527324ull, 501123706821403193ull}},
+{{12851357721011083560ull, 2697475612423513876ull,
+ 4238669586295054648ull, 1002247413642806386ull}},
+{{2570271544202216712ull, 15296890381452344068ull,
+ 4537082732000921252ull, 200449482728561277ull}},
+{{5140543088404433424ull, 12147036689195136520ull,
+ 9074165464001842505ull, 400898965457122554ull}},
+{{10281086176808866848ull, 5847329304680721424ull,
+ 18148330928003685011ull, 801797930914245108ull}},
+{{13124263679587504340ull, 15926861119903785577ull,
+ 14697712629826467971ull, 160359586182849021ull}},
+{{7801783285465457063ull, 13406978166098019539ull,
+ 10948681185943384327ull, 320719172365698043ull}},
+{{15603566570930914125ull, 8367212258486487462ull,
+ 3450618298177217039ull, 641438344731396087ull}},
+{{14188759758411913795ull, 5362791266439207815ull,
+ 8068821289119264054ull, 128287668946279217ull}},
+{{9930775443114275973ull, 10725582532878415631ull,
+ 16137642578238528108ull, 256575337892558434ull}},
+{{1414806812519000330ull, 3004420992047279647ull,
+ 13828541082767504601ull, 513150675785116869ull}},
+{{2829613625038000660ull, 6008841984094559294ull,
+ 9210338091825457586ull, 1026301351570233739ull}},
+{{15323317983975241425ull, 1201768396818911858ull,
+ 16599462877332732810ull, 205260270314046747ull}},
+{{12199891894240931234ull, 2403536793637823717ull,
+ 14752181680955914004ull, 410520540628093495ull}},
+{{5953039714772310851ull, 4807073587275647435ull,
+ 11057619288202276392ull, 821041081256186991ull}},
+{{12258654387180193140ull, 12029461161680860456ull,
+ 5900872672382365601ull, 164208216251237398ull}},
+{{6070564700650834664ull, 5612178249652169297ull,
+ 11801745344764731203ull, 328416432502474796ull}},
+{{12141129401301669328ull, 11224356499304338594ull,
+ 5156746615819910790ull, 656832865004949593ull}},
+{{9806923509744154512ull, 13312917744086598688ull,
+ 12099395767389713127ull, 131366573000989918ull}},
+{{1167102945778757408ull, 8179091414463645761ull,
+ 5752047461069874639ull, 262733146001979837ull}},
+{{2334205891557514816ull, 16358182828927291522ull,
+ 11504094922139749278ull, 525466292003959674ull}},
+{{4668411783115029631ull, 14269621584145031428ull,
+ 4561445770569946941ull, 1050932584007919349ull}},
+{{12001728800848736896ull, 2853924316829006285ull,
+ 15669684413081630681ull, 210186516801583869ull}},
+{{5556713527987922176ull, 5707848633658012571ull,
+ 12892624752453709746ull, 420373033603167739ull}},
+{{11113427055975844351ull, 11415697267316025142ull,
+ 7338505431197867876ull, 840746067206335479ull}},
+{{9601383040678989517ull, 2283139453463205028ull,
+ 16225096345207214868ull, 168149213441267095ull}},
+{{756022007648427418ull, 4566278906926410057ull,
+ 14003448616704878120ull, 336298426882534191ull}},
+{{1512044015296854835ull, 9132557813852820114ull,
+ 9560153159700204624ull, 672596853765068383ull}},
+{{3991757617801281291ull, 9205209192254384669ull,
+ 12980077076165771894ull, 134519370753013676ull}},
+{{7983515235602562581ull, 18410418384508769338ull,
+ 7513410078621992172ull, 269038741506027353ull}},
+{{15967030471205125161ull, 18374092695307987060ull,
+ 15026820157243984345ull, 538077483012054706ull}},
+{{13487316868700698705ull, 18301441316906422505ull,
+ 11606896240778417075ull, 1076154966024109413ull}},
+{{13765509817965870711ull, 14728334707607015470ull,
+ 13389425692381414384ull, 215230993204821882ull}},
+{{9084275562222189806ull, 11009925341504479325ull,
+ 8332107311053277153ull, 430461986409643765ull}},
+{{18168551124444379611ull, 3573106609299407034ull,
+ 16664214622106554307ull, 860923972819287530ull}},
+{{7323059039630786246ull, 8093318951343702053ull,
+ 3332842924421310861ull, 172184794563857506ull}},
+{{14646118079261572491ull, 16186637902687404106ull,
+ 6665685848842621722ull, 344369589127715012ull}},
+{{10845492084813593365ull, 13926531731665256597ull,
+ 13331371697685243445ull, 688739178255430024ull}},
+{{5858447231704628997ull, 17542701605300692612ull,
+ 17423669598504689981ull, 137747835651086004ull}},
+{{11716894463409257993ull, 16638659136891833608ull,
+ 16400595123299828347ull, 275495671302172009ull}},
+{{4987044853108964369ull, 14830574200074115601ull,
+ 14354446172890105079ull, 550991342604344019ull}},
+{{9974089706217928738ull, 11214404326438679586ull,
+ 10262148272070658543ull, 1101982685208688039ull}},
+{{13062864385469316718ull, 9621578494771556563ull,
+ 16809824913381773001ull, 220396537041737607ull}},
+{{7678984697229081819ull, 796412915833561511ull,
+ 15172905753053994387ull, 440793074083475215ull}},
+{{15357969394458163637ull, 1592825831667123022ull,
+ 11899067432398437158ull, 881586148166950431ull}},
+{{6760942693633543051ull, 15075960425301065897ull,
+ 6069162301221597754ull, 176317229633390086ull}},
+{{13521885387267086101ull, 11705176776892580178ull,
+ 12138324602443195509ull, 352634459266780172ull}},
+{{8597026700824620586ull, 4963609480075608741ull,
+ 5829905131176839403ull, 705268918533560345ull}},
+{{16476800599132565410ull, 12060768340240852717ull,
+ 1165981026235367880ull, 141053783706712069ull}},
+{{14506857124555579204ull, 5674792606772153819ull,
+ 2331962052470735761ull, 282107567413424138ull}},
+{{10566970175401606792ull, 11349585213544307639ull,
+ 4663924104941471522ull, 564215134826848276ull}},
+{{2687196277093661968ull, 4252426353379063663ull,
+ 9327848209882943045ull, 1128430269653696552ull}},
+{{537439255418732394ull, 8229182900159633379ull, 9244267271460409255ull,
+ 225686053930739310ull}},
+{{1074878510837464788ull, 16458365800319266758ull, 41790469211266894ull,
+ 451372107861478621ull}},
+{{2149757021674929575ull, 14469987526928981900ull, 83580938422533789ull,
+ 902744215722957242ull}},
+{{4119300219076896239ull, 6583346320127706703ull,
+ 7395413817168327404ull, 180548843144591448ull}},
+{{8238600438153792477ull, 13166692640255413406ull,
+ 14790827634336654808ull, 361097686289182896ull}},
+{{16477200876307584953ull, 7886641206801275196ull,
+ 11134911194963758001ull, 722195372578365793ull}},
+{{3295440175261516991ull, 16334723500327896332ull,
+ 13295028683218482569ull, 144439074515673158ull}},
+{{6590880350523033981ull, 14222702926946241048ull,
+ 8143313292727413523ull, 288878149031346317ull}},
+{{13181760701046067962ull, 9998661780182930480ull,
+ 16286626585454827047ull, 577756298062692634ull}},
+{{7916777328382584308ull, 1550579486656309345ull,
+ 14126509097200102479ull, 1155512596125385269ull}},
+{{12651401909902247832ull, 11378162341556992838ull,
+ 17582697078407661788ull, 231102519225077053ull}},
+{{6856059746094944047ull, 4309580609404434061ull,
+ 16718650083105771961ull, 462205038450154107ull}},
+{{13712119492189888093ull, 8619161218808868122ull,
+ 14990556092501992306ull, 924410076900308215ull}},
+{{13810470342663708589ull, 5413181058503683947ull,
+ 2998111218500398461ull, 184882015380061643ull}},
+{{9174196611617865561ull, 10826362117007367895ull,
+ 5996222437000796922ull, 369764030760123286ull}},
+{{18348393223235731121ull, 3205980160305184174ull,
+ 11992444874001593845ull, 739528061520246572ull}},
+{{7359027459389056548ull, 8019893661544857481ull,
+ 9777186604284139415ull, 147905612304049314ull}},
+{{14718054918778113095ull, 16039787323089714962ull,
+ 1107629134858727214ull, 295811224608098629ull}},
+{{10989365763846674573ull, 13632830572469878309ull,
+ 2215258269717454429ull, 591622449216197258ull}},
+{{3531987453983797530ull, 8818917071230205003ull,
+ 4430516539434908859ull, 1183244898432394516ull}},
+{{11774443935022490476ull, 1763783414246041000ull,
+ 4575452122628892095ull, 236648979686478903ull}},
+{{5102143796335429336ull, 3527566828492082001ull,
+ 9150904245257784190ull, 473297959372957806ull}},
+{{10204287592670858671ull, 7055133656984164002ull,
+ 18301808490515568380ull, 946595918745915612ull}},
+{{16798252777501813027ull, 8789724360880653446ull,
+ 11039059327586934322ull, 189319183749183122ull}},
+{{15149761481294074438ull, 17579448721761306893ull,
+ 3631374581464317028ull, 378638367498366245ull}},
+{{11852778888878597260ull, 16712153369813062171ull,
+ 7262749162928634057ull, 757276734996732490ull}},
+{{13438602222001450422ull, 10721128303446433080ull,
+ 1452549832585726811ull, 151455346999346498ull}},
+{{8430460370293349228ull, 2995512533183314545ull,
+ 2905099665171453623ull, 302910693998692996ull}},
+{{16860920740586698455ull, 5991025066366629090ull,
+ 5810199330342907246ull, 605821387997385992ull}},
+{{15275097407463845293ull, 11982050132733258181ull,
+ 11620398660685814492ull, 1211642775994771984ull}},
+{{10433717110976589705ull, 6085758841288561959ull,
+ 17081474991104804191ull, 242328555198954396ull}},
+{{2420690148243627794ull, 12171517682577123919ull,
+ 15716205908500056766ull, 484657110397908793ull}},
+{{4841380296487255588ull, 5896291291444696222ull,
+ 12985667743290561917ull, 969314220795817587ull}},
+{{4657624874039361441ull, 15936653517256580537ull,
+ 9975831178141933029ull, 193862844159163517ull}},
+{{9315249748078722882ull, 13426562960803609458ull,
+ 1504918282574314443ull, 387725688318327035ull}},
+{{183755422447894147ull, 8406381847897667301ull, 3009836565148628887ull,
+ 775451376636654070ull}},
+{{11104797528715309799ull, 9059973999063354106ull,
+ 601967313029725777ull, 155090275327330814ull}},
+{{3762850983721067982ull, 18119947998126708213ull,
+ 1203934626059451554ull, 310180550654661628ull}},
+{{7525701967442135964ull, 17793151922543864810ull,
+ 2407869252118903109ull, 620361101309323256ull}},
+{{15051403934884271928ull, 17139559771378178004ull,
+ 4815738504237806219ull, 1240722202618646512ull}},
+{{3010280786976854386ull, 7117260769017545924ull,
+ 8341845330331381890ull, 248144440523729302ull}},
+{{6020561573953708771ull, 14234521538035091848ull,
+ 16683690660662763780ull, 496288881047458604ull}},
+{{12041123147907417542ull, 10022299002360632080ull,
+ 14920637247615975945ull, 992577762094917209ull}},
+{{17165619888549124802ull, 16761855059439767708ull,
+ 17741522708490836481ull, 198515552418983441ull}},
+{{15884495703388697987ull, 15076966045169983801ull,
+ 17036301343272121347ull, 397031104837966883ull}},
+{{13322247333067844357ull, 11707188016630415987ull,
+ 15625858612834691079ull, 794062209675933767ull}},
+{{13732495910839299841ull, 6030786418067993520ull,
+ 10503869352050758862ull, 158812441935186753ull}},
+{{9018247747969048066ull, 12061572836135987041ull,
+ 2560994630391966108ull, 317624883870373507ull}},
+{{18036495495938096132ull, 5676401598562422466ull,
+ 5121989260783932217ull, 635249767740747014ull}},
+{{17626246918166640648ull, 11352803197124844933ull,
+ 10243978521567864434ull, 1270499535481494028ull}},
+{{3525249383633328130ull, 9649258268908789633ull,
+ 13116842148539303856ull, 254099907096298805ull}},
+{{7050498767266656259ull, 851772464108027650ull, 7786940223369056097ull,
+ 508199814192597611ull}},
+{{14100997534533312518ull, 1703544928216055300ull,
+ 15573880446738112194ull, 1016399628385195222ull}},
+{{6509548321648572827ull, 4030057800385121383ull,
+ 10493473718831443085ull, 203279925677039044ull}},
+{{13019096643297145654ull, 8060115600770242766ull,
+ 2540203363953334554ull, 406559851354078089ull}},
+{{7591449212884739692ull, 16120231201540485533ull,
+ 5080406727906669108ull, 813119702708156178ull}},
+{{16275685101544589232ull, 6913395055050007429ull,
+ 12084127789807064791ull, 162623940541631235ull}},
+{{14104626129379626847ull, 13826790110100014859ull,
+ 5721511505904577966ull, 325247881083262471ull}},
+{{9762508185049702077ull, 9206836146490478103ull,
+ 11443023011809155933ull, 650495762166524942ull}},
+{{13020548081235671385ull, 1841367229298095620ull,
+ 9667302231845651833ull, 130099152433304988ull}},
+{{7594352088761791154ull, 3682734458596191241ull, 887860389981752050ull,
+ 260198304866609977ull}},
+{{15188704177523582308ull, 7365468917192382482ull,
+ 1775720779963504100ull, 520396609733219954ull}},
+{{11930664281337612999ull, 14730937834384764965ull,
+ 3551441559927008200ull, 1040793219466439908ull}},
+{{13454179300493253570ull, 14014234011102683962ull,
+ 11778334756211132609ull, 208158643893287981ull}},
+{{8461614527276955523ull, 9581723948495816309ull,
+ 5109925438712713603ull, 416317287786575963ull}},
+{{16923229054553911046ull, 716703823282081002ull,
+ 10219850877425427207ull, 832634575573151926ull}},
+{{3384645810910782210ull, 11211387208882147170ull,
+ 5733318990226995764ull, 166526915114630385ull}},
+{{6769291621821564419ull, 3976030344054742724ull,
+ 11466637980453991529ull, 333053830229260770ull}},
+{{13538583243643128837ull, 7952060688109485448ull,
+ 4486531887198431442ull, 666107660458521541ull}},
+{{6397065463470536091ull, 12658458581847628059ull,
+ 4586655192181596611ull, 133221532091704308ull}},
+{{12794130926941072181ull, 6870173089985704502ull,
+ 9173310384363193223ull, 266443064183408616ull}}
+};
+
+static const UINT128 coefflimits_bid64[] = { {{10000000000000000ull, 0ull}},
+{{2000000000000000ull, 0ull}},
+{{400000000000000ull, 0ull}},
+{{80000000000000ull, 0ull}},
+{{16000000000000ull, 0ull}},
+{{3200000000000ull, 0ull}},
+{{640000000000ull, 0ull}},
+{{128000000000ull, 0ull}},
+{{25600000000ull, 0ull}},
+{{5120000000ull, 0ull}},
+{{1024000000ull, 0ull}},
+{{204800000ull, 0ull}},
+{{40960000ull, 0ull}},
+{{8192000ull, 0ull}},
+{{1638400ull, 0ull}},
+{{327680ull, 0ull}},
+{{65536ull, 0ull}},
+{{13107ull, 0ull}},
+{{2621ull, 0ull}},
+{{524ull, 0ull}},
+{{104ull, 0ull}},
+{{20ull, 0ull}},
+{{4ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}},
+{{0ull, 0ull}}
+};
+
+// **********************************************************************
+
+static const UINT128 coefflimits_bid128[] =
+ { {{4003012203950112768ull, 542101086242752ull}},
+{{8179300070273843200ull, 108420217248550ull}},
+{{1635860014054768640ull, 21684043449710ull}},
+{{327172002810953728ull, 4336808689942ull}},
+{{7444132030046011392ull, 867361737988ull}},
+{{12556872850234933248ull, 173472347597ull}},
+{{9890072199530807296ull, 34694469519ull}},
+{{16735409698873802752ull, 6938893903ull}},
+{{14415128384000491520ull, 1387778780ull}},
+{{2883025676800098304ull, 277555756ull}},
+{{4265953950101929984ull, 55511151ull}},
+{{4542539604762296320ull, 11102230ull}},
+{{908507920952459264ull, 2220446ull}},
+{{3871050398932402176ull, 444089ull}},
+{{15531605338754121728ull, 88817ull}},
+{{10485018697234644992ull, 17763ull}},
+{{13165050183672659968ull, 3552ull}},
+{{10011707666218352640ull, 710ull}},
+{{2002341533243670528ull, 142ull}},
+{{7779165936132554752ull, 28ull}},
+{{12623879631452241920ull, 5ull}},
+{{2524775926290448384ull, 1ull}},
+{{4194304000000000000ull, 0ull}},
+{{838860800000000000ull, 0ull}},
+{{167772160000000000ull, 0ull}},
+{{33554432000000000ull, 0ull}},
+{{6710886400000000ull, 0ull}},
+{{1342177280000000ull, 0ull}},
+{{268435456000000ull, 0ull}},
+{{53687091200000ull, 0ull}},
+{{10737418240000ull, 0ull}},
+{{2147483648000ull, 0ull}},
+{{429496729600ull, 0ull}},
+{{85899345920ull, 0ull}},
+{{17179869184ull, 0ull}},
+{{3435973836ull, 0ull}},
+{{687194767ull, 0ull}},
+{{137438953ull, 0ull}},
+{{27487790ull, 0ull}},
+{{5497558ull, 0ull}},
+{{1099511ull, 0ull}},
+{{219902ull, 0ull}},
+{{43980ull, 0ull}},
+{{8796ull, 0ull}},
+{{1759ull, 0ull}},
+{{351ull, 0ull}},
+{{70ull, 0ull}},
+{{14ull, 0ull}},
+{{2ull, 0ull}}
+};
+
+// These are the different, bipartite, tables for conversion to bid128
+// Using the same approach, the tables become extremely large
+// And things are more amenable here since there's never overflow/underflow
+
+static const UINT256 outertable_sig[] =
+ { {{16710528681477587410ull, 1427578414467097172ull,
+ 17470362193306814444ull, 17633471421292828081ull}},
+{{15880413049339289368ull, 3169162604521042544ull,
+ 12421848348224877000ull, 10175591536883283100ull}},
+{{728324709502741634ull, 5487234822932806241ull,
+ 14277366029702694882ull, 11743877385420605756ull}},
+{{5270439690693945016ull, 5335305964155802506ull,
+ 4731239033579481048ull, 13553871098685738146ull}},
+{{15770926697301461842ull, 17478494563481727979ull,
+ 12172666691698088779ull, 15642825255298684824ull}},
+{{6706015564063194464ull, 9524484409513358023ull,
+ 3584925281718916951ull, 18053733887991431306ull}},
+{{11970480524618434228ull, 11405570099769256704ull,
+ 15462553542164535233ull, 10418108684938663938ull}},
+{{6786207772287397676ull, 2319456072422691258ull,
+ 3306628541457879036ull, 12023771840725819358ull}},
+{{11981052113010165492ull, 3504057943690712651ull,
+ 1876153621163772099ull, 13876903538819465956ull}},
+{{9393164661428669080ull, 12786250932199773041ull,
+ 1469280998340568779ull, 16015644206874417279ull}},
+{{16924685242153318850ull, 18017830257179898541ull,
+ 8443357802200517361ull, 9242006282008467740ull}},
+{{10964968671057563176ull, 5039440430669711539ull,
+ 5426243050445487622ull, 10666405798403203685ull}},
+{{10955754838860298353ull, 7697974614691938479ull,
+ 5802604364043796934ull, 12310337083160321132ull}},
+{{2020816881108765590ull, 11827301330378587775ull,
+ 11428107909474365520ull, 14207634883319258514ull}},
+{{17088069107880998350ull, 4283872614129133981ull,
+ 3596834484036483711ull, 16397348635874181367ull}},
+{{17878879927905357932ull, 16765016545576715295ull,
+ 16689816215723394984ull, 9462273083962776199ull}},
+{{13121733289080687293ull, 18283685101712419716ull,
+ 16276586284347626380ull, 10920620632484725600ull}},
+{{17814811358648632259ull, 13245640156276305425ull,
+ 16363965810173909683ull, 12603732099085151178ull}},
+{{4756697993914874888ull, 11508234184157253656ull,
+ 5137266535116401279ull, 14546248621894116172ull}},
+{{5318236458935323174ull, 6543830884414701181ull,
+ 6453355338781772809ull, 16788150311867950084ull}},
+{{6485710970464102310ull, 9658720758000782538ull,
+ 1405691438411884535ull, 9687789553853107178ull}},
+{{16668567668910748869ull, 7353216905500064137ull,
+ 16398637311140236340ull, 11180894225541718927ull}},
+{{10250898639443956700ull, 17209112682100433509ull,
+ 10404161081088486903ull, 12904119664018836844ull}},
+{{8190593687966138954ull, 9395575747272723417ull,
+ 5270639644724875979ull, 14892932617404296676ull}},
+{{16096765186944088526ull, 5812137315202163815ull,
+ 13827109944906121794ull, 17188266051577202911ull}},
+{{13125058493821651226ull, 13878096157524874998ull,
+ 7819283672493662452ull, 9918680808189048078ull}},
+{{10784977039313888136ull, 7095114120404217728ull,
+ 5980679097159643429ull, 11447370977331402726ull}},
+{{18074025829186132275ull, 1141984379626550674ull,
+ 7557580538320593620ull, 13211666432945230258ull}},
+{{884127375074722974ull, 5630658839879210216ull, 8888788495242174599ull,
+ 15247879210087606793ull}},
+{{14794677677148287412ull, 15991859528909753139ull,
+ 2255166953101703543ull, 17597917839164816062ull}},
+{{11781503818372409883ull, 16487377189598053250ull,
+ 1614766483381505408ull, 10155074945409931597ull}},
+{{13901203812957478350ull, 17671725616207330354ull,
+ 9774501520532043416ull, 11720198729122693309ull}},
+{{2841277750318224700ull, 62614824260888948ull, 7875289095414864909ull,
+ 13526543032773672749ull}},
+{{4177215723684349918ull, 5549883551398310595ull,
+ 6548711429670794128ull, 15611285324269742443ull}},
+{{10113135653152274419ull, 1238174514434849746ull,
+ 15010187426055142985ull, 18017332949391848572ull}},
+{{15332868447221136909ull, 16659234357027498643ull,
+ 8156814090647504084ull, 10397103116953834012ull}},
+{{15245187402216469644ull, 12129929088655149192ull,
+ 9861651730211963150ull, 11999528845718521943ull}},
+{{11169863271521019024ull, 11690833164181629132ull,
+ 18055231442152805128ull, 13848924157002783033ull}},
+{{5681139181384005971ull, 16315598095635316730ull,
+ 12429006944274865118ull, 15983352577617880224ull}},
+{{0ull, 0ull, 0ull, 9223372036854775808ull}},
+{{847738094735128551ull, 159020156881263929ull, 14298703881791668535ull,
+ 10644899600020376799ull}},
+{{12571812103339493257ull, 9592188640606484874ull,
+ 15977522551232326327ull, 12285516299433008781ull}},
+{{11255846670375652269ull, 16219642565822741785ull,
+ 1164180458167399492ull, 14178988662640388631ull}},
+{{4768530159026621925ull, 11269558331910606010ull,
+ 14728279675391465720ull, 16364287392998134214ull}},
+{{10435171899994305314ull, 3358688235984080491ull,
+ 10873005112892106269ull, 9443194724678278428ull}},
+{{9001934648837042518ull, 12742858465034581069ull,
+ 7821978264675184102ull, 10898601872067700364ull}},
+{{17621267265258286727ull, 4697230115438671198ull,
+ 9730745556445007669ull, 12578319756070083561ull}},
+{{15489206033570711069ull, 5939008219696634639ull,
+ 7281543418588385486ull, 14516919669433371671ull}},
+{{5582382164278045428ull, 1021128504191590019ull,
+ 15859662269683349667ull, 16754301112998936544ull}},
+{{13306060077138970688ull, 17077419079040409017ull,
+ 602300193611639289ull, 9668256495766433483ull}},
+{{16144900726383728979ull, 6332437060439625781ull,
+ 3394061071468721991ull, 11158350687084940805ull}},
+{{841527738022137013ull, 8576187517129556015ull, 4780478900157118356ull,
+ 12878101662951253988ull}},
+{{6209518431268106959ull, 6563228687006195825ull,
+ 8680557599339190037ull, 14862904661462481806ull}},
+{{13777918056850427098ull, 13980713634323581067ull,
+ 3260730320187665275ull, 17153610117183879308ull}},
+{{14026398967643035423ull, 16044002814696042637ull,
+ 13563648246219923183ull, 9898682214361989196ull}},
+{{8580849201736980837ull, 7652064075251385167ull,
+ 12055336643618066002ull, 11424290153682525668ull}},
+{{7703450277136593061ull, 30939122015382097ull, 1733744904199768989ull,
+ 13185028339041359606ull}},
+{{16645858086931268484ull, 268706294728574543ull,
+ 4562366333509913804ull, 15217135591158481007ull}},
+{{1535817262145462730ull, 16249574698204674087ull,
+ 1726174694286833848ull, 17562435942139069664ull}},
+{{1327779613951528273ull, 12607890553358950732ull,
+ 6773080245737622022ull, 10134599720625107110ull}},
+{{10146669700226523625ull, 6816618733538609533ull,
+ 17338427607494047961ull, 11696567815043613180ull}},
+{{1218646606393179524ull, 8053984438814192242ull,
+ 5512554737593155320ull, 13499270067222312908ull}},
+{{8529816360522570005ull, 2898610325645650649ull,
+ 12799329154556421864ull, 15579808985797328396ull}},
+{{8976626101186384018ull, 17306366585957786234ull,
+ 18289272351796647404ull, 17981005404381600394ull}},
+{{13259258789938866699ull, 3853966764738768487ull,
+ 3962898110873089456ull, 10376139901559067117ull}},
+{{899097863387258947ull, 18205835716688941338ull,
+ 5828614502416977816ull, 11975334730781032005ull}},
+{{6805696657844643720ull, 11269663690239600300ull,
+ 15713752492130876427ull, 13821001188766021149ull}},
+{{1390669429605106863ull, 9874674503958832077ull,
+ 10784451562526769943ull, 15951126056533488631ull}},
+{{5704986635434998471ull, 13359511205918707297ull,
+ 13484363347568202582ull, 18409550726197325520ull}},
+{{8031416311578790746ull, 15203770801091158414ull,
+ 10108131133879485063ull, 10623436763626360685ull}},
+{{14540970352057967818ull, 10823414366732926995ull,
+ 16152175176069010361ull, 12260745560745135745ull}},
+{{15950896424073439808ull, 7311065895593189991ull,
+ 14504991862333000338ull, 14150400200058902426ull}},
+{{5978819348613013533ull, 5596367464999577452ull,
+ 9804643584580705193ull, 16331292810031855499ull}},
+{{8586457898440847299ull, 6018330550275346810ull,
+ 7956755163056284140ull, 9424154832238877876ull}},
+{{1114429888821394320ull, 1760611426277998851ull,
+ 9839409379426382903ull, 10876627507095459665ull}},
+{{7554605751361075608ull, 6504275622057553570ull,
+ 9148491728899045148ull, 12552958650829068784ull}},
+{{9208049516541304162ull, 15518058123431536615ull,
+ 17563500997894963674ull, 14487649851631658771ull}},
+{{1484107481346855224ull, 16657394431011607502ull,
+ 12009304572091620947ull, 16720520162760224108ull}},
+{{14325586681310127114ull, 11250726580617083666ull,
+ 2403442209646777766ull, 9648762821313776241ull}},
+{{14963893077912294692ull, 3450059817568720983ull,
+ 15313875826588494017ull, 11135852602159508258ull}}
+};
+
+static const UINT256 innertable_sig[] =
+ { {{1014026100135492416ull, 3035406636157676337ull,
+ 4549648098962661924ull, 12141680576410806693ull}},
+{{5879218643596753424ull, 3794258295197095421ull,
+ 10298746142130715309ull, 15177100720513508366ull}},
+{{5980354661461664842ull, 4677254443711878590ull,
+ 1825030320404309164ull, 9485687950320942729ull}},
+{{16698815363681856860ull, 5846568054639848237ull,
+ 6892973918932774359ull, 11857109937901178411ull}},
+{{7038461149320157363ull, 2696524049872422393ull,
+ 4004531380238580045ull, 14821387422376473014ull}},
+{{15928253264393568112ull, 3991170540383957947ull,
+ 16337890167931276240ull, 9263367138985295633ull}},
+{{15298630562064572236ull, 4988963175479947434ull,
+ 6587304654631931588ull, 11579208923731619542ull}},
+{{9899916165725939487ull, 6236203969349934293ull,
+ 17457502855144690293ull, 14474011154664524427ull}},
+{{16986581225584812263ull, 12406940980114805770ull,
+ 17210192550503474962ull, 18092513943330655534ull}},
+{{15228299284417895569ull, 12366024130999141510ull,
+ 6144684325637283947ull, 11307821214581659709ull}},
+{{9812002068667593653ull, 10845844145321538984ull,
+ 12292541425473992838ull, 14134776518227074636ull}},
+{{12265002585834492066ull, 4333933144797147922ull,
+ 15365676781842491048ull, 17668470647783843295ull}},
+{{12277312634573945445ull, 2708708215498217451ull,
+ 16521077016292638761ull, 11042794154864902059ull}},
+{{10734954774790043902ull, 7997571287800159718ull,
+ 16039660251938410547ull, 13803492693581127574ull}},
+{{4195321431632779070ull, 5385278091322811744ull,
+ 10826203278068237376ull, 17254365866976409468ull}},
+{{2622075894770486919ull, 3365798807076757340ull,
+ 15989749085647424168ull, 10783978666860255917ull}},
+{{3277594868463108648ull, 4207248508845946675ull,
+ 6152128301777116498ull, 13479973333575319897ull}},
+{{17932051640861049522ull, 14482432672912209151ull,
+ 12301846395648783526ull, 16849966666969149871ull}},
+{{18125061303179237808ull, 4439834402142742815ull,
+ 14606183024921571560ull, 10531229166855718669ull}},
+{{18044640610546659355ull, 5549793002678428519ull,
+ 4422670725869800738ull, 13164036458569648337ull}},
+{{17944114744755936290ull, 16160613290202811457ull,
+ 10140024425764638826ull, 16455045573212060421ull}},
+{{4297542687831378326ull, 14712069324804145065ull,
+ 8643358275316593218ull, 10284403483257537763ull}},
+{{9983614378216610811ull, 9166714619150405523ull,
+ 6192511825718353619ull, 12855504354071922204ull}},
+{{7867831954343375609ull, 6846707255510619000ull,
+ 7740639782147942024ull, 16069380442589902755ull}},
+{{4917394971464609756ull, 4279192034694136875ull,
+ 2532056854628769813ull, 10043362776618689222ull}},
+{{1535057695903374291ull, 9960676061795058998ull,
+ 12388443105140738074ull, 12554203470773361527ull}},
+{{11142194156733993672ull, 3227473040389047939ull,
+ 10873867862998534689ull, 15692754338466701909ull}},
+{{4658028338745052093ull, 13546385696311624722ull,
+ 9102010423587778132ull, 9807971461541688693ull}},
+{{15045907460286090924ull, 16932982120389530902ull,
+ 15989199047912110569ull, 12259964326927110866ull}},
+{{9584012288502837847ull, 7331169595204749916ull,
+ 10763126773035362404ull, 15324955408658888583ull}},
+{{15213379717169049462ull, 13805353033857744505ull,
+ 13644483260788183358ull, 9578097130411805364ull}},
+{{5181666591179148116ull, 8033319255467404824ull,
+ 17055604075985229198ull, 11972621413014756705ull}},
+{{6477083238973935145ull, 818277032479480222ull, 7484447039699372786ull,
+ 14965776766268445882ull}},
+{{17883235079640873178ull, 5123109163727063042ull,
+ 9289465418239495895ull, 9353610478917778676ull}},
+{{13130671812696315664ull, 1792200436231440899ull,
+ 11611831772799369869ull, 11692013098647223345ull}},
+{{11801653747443006676ull, 6851936563716689028ull,
+ 679731660717048624ull, 14615016373309029182ull}},
+{{14752067184303758345ull, 8564920704645861285ull,
+ 10073036612751086588ull, 18268770466636286477ull}},
+{{11525884999403542918ull, 14576447477258439111ull,
+ 8601490892183123069ull, 11417981541647679048ull}},
+{{9795670230827040743ull, 4385501291290885177ull,
+ 10751863615228903837ull, 14272476927059598810ull}},
+{{16856273806961188833ull, 10093562632540994375ull,
+ 4216457482181353988ull, 17840596158824498513ull}},
+{{17452700156991824877ull, 15531848682192897292ull,
+ 14164500972431816002ull, 11150372599265311570ull}},
+{{3369131122530229480ull, 10191438815886345808ull,
+ 8482254178684994195ull, 13937965749081639463ull}},
+{{4211413903162786849ull, 8127612501430544356ull,
+ 5991131704928854840ull, 17422457186352049329ull}},
+{{11855505726331517589ull, 5079757813394090222ull,
+ 15273672361649004035ull, 10889035741470030830ull}},
+{{5596010121059621178ull, 1738011248315224874ull,
+ 9868718415206479236ull, 13611294676837538538ull}},
+{{16218384688179302281ull, 2172514060394031092ull,
+ 3112525982153323237ull, 17014118346046923173ull}},
+{{913118393257288118ull, 3663664296959963385ull, 4251171748059520975ull,
+ 10633823966279326983ull}},
+{{5753084009998998051ull, 18414638426482117943ull,
+ 702278666647013314ull, 13292279957849158729ull}},
+{{2579668994071359659ull, 13794925996247871621ull,
+ 5489534351736154547ull, 16615349947311448411ull}},
+{{3918136130508293739ull, 6315985738441225811ull,
+ 1125115960621402640ull, 10384593717069655257ull}},
+{{285984144707979270ull, 7894982173051532264ull, 6018080969204141204ull,
+ 12980742146337069071ull}},
+{{357480180884974087ull, 9868727716314415330ull, 2910915193077788601ull,
+ 16225927682921336339ull}},
+{{4835111131480496709ull, 17697169868764979341ull,
+ 17960223060169475539ull, 10141204801825835211ull}},
+{{10655574932778008790ull, 17509776317528836272ull,
+ 17838592806784456520ull, 12676506002282294014ull}},
+{{13319468665972510987ull, 3440476323201493724ull,
+ 13074868971625794843ull, 15845632502852867518ull}},
+{{17548039953087595175ull, 18291198766496791241ull,
+ 3560107088838733872ull, 9903520314283042199ull}},
+{{8099991886077330257ull, 4417254384411437436ull,
+ 18285191916330581053ull, 12379400392853802748ull}},
+{{10124989857596662821ull, 10133253998941684699ull,
+ 4409745821703674700ull, 15474250491067253436ull}},
+{{4022275651784220311ull, 15556655786193328745ull,
+ 11979463175419572495ull, 9671406556917033397ull}},
+{{9639530583157663293ull, 14834133714314273027ull,
+ 1139270913992301907ull, 12089258196146291747ull}},
+{{7437727210519691212ull, 13930981124465453380ull,
+ 15259146697772541096ull, 15111572745182864683ull}},
+{{13871951543429582816ull, 8706863202790908362ull,
+ 7231123676894144233ull, 9444732965739290427ull}},
+{{8116567392432202712ull, 15495265021916023357ull,
+ 4427218577690292387ull, 11805916207174113034ull}},
+{{14757395258967641293ull, 14757395258967641292ull,
+ 14757395258967641292ull, 14757395258967641292ull}},
+{{0ull, 0ull, 0ull, 9223372036854775808ull}},
+{{0ull, 0ull, 0ull, 11529215046068469760ull}},
+{{0ull, 0ull, 0ull, 14411518807585587200ull}},
+{{0ull, 0ull, 0ull, 18014398509481984000ull}},
+{{0ull, 0ull, 0ull, 11258999068426240000ull}},
+{{0ull, 0ull, 0ull, 14073748835532800000ull}},
+{{0ull, 0ull, 0ull, 17592186044416000000ull}},
+{{0ull, 0ull, 0ull, 10995116277760000000ull}},
+{{0ull, 0ull, 0ull, 13743895347200000000ull}},
+{{0ull, 0ull, 0ull, 17179869184000000000ull}},
+{{0ull, 0ull, 0ull, 10737418240000000000ull}},
+{{0ull, 0ull, 0ull, 13421772800000000000ull}},
+{{0ull, 0ull, 0ull, 16777216000000000000ull}},
+{{0ull, 0ull, 0ull, 10485760000000000000ull}},
+{{0ull, 0ull, 0ull, 13107200000000000000ull}},
+{{0ull, 0ull, 0ull, 16384000000000000000ull}},
+{{0ull, 0ull, 0ull, 10240000000000000000ull}},
+{{0ull, 0ull, 0ull, 12800000000000000000ull}},
+{{0ull, 0ull, 0ull, 16000000000000000000ull}},
+{{0ull, 0ull, 0ull, 10000000000000000000ull}},
+{{0ull, 0ull, 0ull, 12500000000000000000ull}},
+{{0ull, 0ull, 0ull, 15625000000000000000ull}},
+{{0ull, 0ull, 0ull, 9765625000000000000ull}},
+{{0ull, 0ull, 0ull, 12207031250000000000ull}},
+{{0ull, 0ull, 0ull, 15258789062500000000ull}},
+{{0ull, 0ull, 0ull, 9536743164062500000ull}},
+{{0ull, 0ull, 0ull, 11920928955078125000ull}},
+{{0ull, 0ull, 0ull, 14901161193847656250ull}},
+{{0ull, 0ull, 4611686018427387904ull, 9313225746154785156ull}},
+{{0ull, 0ull, 5764607523034234880ull, 11641532182693481445ull}},
+{{0ull, 0ull, 11817445422220181504ull, 14551915228366851806ull}},
+{{0ull, 0ull, 5548434740920451072ull, 18189894035458564758ull}},
+{{0ull, 0ull, 17302829768357445632ull, 11368683772161602973ull}},
+{{0ull, 0ull, 7793479155164643328ull, 14210854715202003717ull}},
+{{0ull, 0ull, 14353534962383192064ull, 17763568394002504646ull}},
+{{0ull, 0ull, 4359273333062107136ull, 11102230246251565404ull}},
+{{0ull, 0ull, 5449091666327633920ull, 13877787807814456755ull}},
+{{0ull, 0ull, 2199678564482154496ull, 17347234759768070944ull}},
+{{0ull, 0ull, 1374799102801346560ull, 10842021724855044340ull}},
+{{0ull, 0ull, 1718498878501683200ull, 13552527156068805425ull}},
+{{0ull, 0ull, 6759809616554491904ull, 16940658945086006781ull}},
+{{0ull, 0ull, 6530724019560251392ull, 10587911840678754238ull}},
+{{0ull, 0ull, 17386777061305090048ull, 13234889800848442797ull}},
+{{0ull, 0ull, 7898413271349198848ull, 16543612251060553497ull}},
+{{0ull, 0ull, 16465723340661719040ull, 10339757656912845935ull}},
+{{0ull, 0ull, 15970468157399760896ull, 12924697071141057419ull}},
+{{0ull, 0ull, 15351399178322313216ull, 16155871338926321774ull}},
+{{0ull, 0ull, 4982938468024057856ull, 10097419586828951109ull}},
+{{0ull, 0ull, 10840359103457460224ull, 12621774483536188886ull}},
+{{0ull, 0ull, 4327076842467049472ull, 15777218104420236108ull}},
+{{0ull, 0ull, 11927795063396681728ull, 9860761315262647567ull}},
+{{0ull, 0ull, 10298057810818464256ull, 12325951644078309459ull}},
+{{0ull, 0ull, 8260886245095692416ull, 15407439555097886824ull}},
+{{0ull, 0ull, 5163053903184807760ull, 9629649721936179265ull}},
+{{0ull, 0ull, 11065503397408397604ull, 12037062152420224081ull}},
+{{0ull, 0ull, 18443565265187884909ull, 15046327690525280101ull}},
+{{0ull, 2305843009213693952ull, 13833071299956122020ull,
+ 9403954806578300063ull}},
+{{0ull, 2882303761517117440ull, 12679653106517764621ull,
+ 11754943508222875079ull}},
+{{0ull, 8214565720323784704ull, 11237880364719817872ull,
+ 14693679385278593849ull}},
+{{0ull, 10268207150404730880ull, 212292400617608628ull,
+ 18367099231598242312ull}},
+{{0ull, 15641001505857732608ull, 132682750386005392ull,
+ 11479437019748901445ull}},
+{{0ull, 1104507808612614144ull, 4777539456409894645ull,
+ 14349296274686126806ull}},
+{{0ull, 5992320779193155584ull, 15195296357367144114ull,
+ 17936620343357658507ull}},
+{{0ull, 8356886505423110144ull, 7191217214140771119ull,
+ 11210387714598536567ull}}
+};
+
+static const int outertable_exp[] = { -16839,
+ -16413,
+ -15988,
+ -15563,
+ -15138,
+ -14713,
+ -14287,
+ -13862,
+ -13437,
+ -13012,
+ -12586,
+ -12161,
+ -11736,
+ -11311,
+ -10886,
+ -10460,
+ -10035,
+ -9610,
+ -9185,
+ -8760,
+ -8334,
+ -7909,
+ -7484,
+ -7059,
+ -6634,
+ -6208,
+ -5783,
+ -5358,
+ -4933,
+ -4508,
+ -4082,
+ -3657,
+ -3232,
+ -2807,
+ -2382,
+ -1956,
+ -1531,
+ -1106,
+ -681,
+ -255,
+ 170,
+ 595,
+ 1020,
+ 1445,
+ 1871,
+ 2296,
+ 2721,
+ 3146,
+ 3571,
+ 3997,
+ 4422,
+ 4847,
+ 5272,
+ 5697,
+ 6123,
+ 6548,
+ 6973,
+ 7398,
+ 7823,
+ 8249,
+ 8674,
+ 9099,
+ 9524,
+ 9949,
+ 10375,
+ 10800,
+ 11225,
+ 11650,
+ 12075,
+ 12501,
+ 12926,
+ 13351,
+ 13776,
+ 14202,
+ 14627,
+ 15052,
+ 15477,
+ 15902,
+ 16328,
+ 16753,
+};
+
+static const int innertable_exp[] = { -468,
+ -465,
+ -461,
+ -458,
+ -455,
+ -451,
+ -448,
+ -445,
+ -442,
+ -438,
+ -435,
+ -432,
+ -428,
+ -425,
+ -422,
+ -418,
+ -415,
+ -412,
+ -408,
+ -405,
+ -402,
+ -398,
+ -395,
+ -392,
+ -388,
+ -385,
+ -382,
+ -378,
+ -375,
+ -372,
+ -368,
+ -365,
+ -362,
+ -358,
+ -355,
+ -352,
+ -349,
+ -345,
+ -342,
+ -339,
+ -335,
+ -332,
+ -329,
+ -325,
+ -322,
+ -319,
+ -315,
+ -312,
+ -309,
+ -305,
+ -302,
+ -299,
+ -295,
+ -292,
+ -289,
+ -285,
+ -282,
+ -279,
+ -275,
+ -272,
+ -269,
+ -265,
+ -262,
+ -259,
+ -255,
+ -252,
+ -249,
+ -246,
+ -242,
+ -239,
+ -236,
+ -232,
+ -229,
+ -226,
+ -222,
+ -219,
+ -216,
+ -212,
+ -209,
+ -206,
+ -202,
+ -199,
+ -196,
+ -192,
+ -189,
+ -186,
+ -182,
+ -179,
+ -176,
+ -172,
+ -169,
+ -166,
+ -162,
+ -159,
+ -156,
+ -153,
+ -149,
+ -146,
+ -143,
+ -139,
+ -136,
+ -133,
+ -129,
+ -126,
+ -123,
+ -119,
+ -116,
+ -113,
+ -109,
+ -106,
+ -103,
+ -99,
+ -96,
+ -93,
+ -89,
+ -86,
+ -83,
+ -79,
+ -76,
+ -73,
+ -69,
+ -66,
+ -63,
+ -60,
+ -56,
+ -53,
+ -50,
+ -46,
+};
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid32_to_binary32 (float *pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT32 x = *px;
+#else
+float
+bid32_to_binary32 (UINT32 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid32 (x, s, e, k, (c.w[1]), return_binary32_zero (s),
+ return_binary32_inf (s), return_binary32_nan);
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89
+// Thus a shift of 25 given that we've already upacked in c.w[1]
+
+ c.w[1] = c.w[1] << 25;
+ c.w[0] = 0;
+ k = k + 89;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is e >= ceil(128 * log_10(2)) = 39
+
+ if (e >= 39) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary32_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -80)
+ e = -80;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary32 + 80)[e];
+ e_out = (exponents_binary32 + 80)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary32 + 80)[e];
+ } else {
+ r = (multipliers2_binary32 + 80)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 26)
+ d = 26;
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == (1ull << 24)) {
+ c_prov = 1ull << 23;
+ e_out = e_out + 1;
+ } else if ((c_prov == (1ull << 23)) && (e_out == 1)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63))))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 255) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary32_ovf (s);
+ }
+// Modify exponent for a tiny result, otherwise lop the implicit bit
+
+ if (c_prov < (1ull << 23))
+ e_out = 0;
+ else
+ c_prov = c_prov & ((1ull << 23) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary32 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_binary32 (float *pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+float
+bid64_to_binary32 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid64 (x, s, e, k, (c.w[0]), return_binary32_zero (s),
+ return_binary32_inf (s), return_binary32_nan);
+ c.w[1] = 0;
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59
+
+ sll128_short (c.w[1], c.w[0], 59);
+ k = k + 59;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is e >= ceil(128 * log_10(2)) = 39
+
+ if (e >= 39) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary32_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -80)
+ e = -80;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary32 + 80)[e];
+ e_out = (exponents_binary32 + 80)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary32 + 80)[e];
+ } else {
+ r = (multipliers2_binary32 + 80)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 26)
+ d = 26;
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == (1ull << 24)) {
+ c_prov = 1ull << 23;
+ e_out = e_out + 1;
+ } else if ((c_prov == (1ull << 23)) && (e_out == 1)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63))))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 255) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary32_ovf (s);
+ }
+// Modify exponent for a tiny result, otherwise lop the implicit bit
+
+ if (c_prov < (1ull << 23))
+ e_out = 0;
+ else
+ c_prov = c_prov & ((1ull << 23) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary32 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_to_binary32 (float *pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+float
+bid128_to_binary32 (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid128 (x, s, e, k, c, return_binary32_zero (s),
+ return_binary32_inf (s), return_binary32_nan);
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is e >= ceil(128 * log_10(2)) = 39
+
+ if (e >= 39) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary32_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -80)
+ e = -80;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary32 + 80)[e];
+ e_out = (exponents_binary32 + 80)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary32 + 80)[e];
+ } else {
+ r = (multipliers2_binary32 + 80)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 26)
+ d = 26;
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == (1ull << 24)) {
+ c_prov = 1ull << 23;
+ e_out = e_out + 1;
+ } else if ((c_prov == (1ull << 23)) && (e_out == 1)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63))))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 255) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary32_ovf (s);
+ }
+// Modify exponent for a tiny result, otherwise lop the implicit bit
+
+ if (c_prov < (1ull << 23))
+ e_out = 0;
+ else
+ c_prov = c_prov & ((1ull << 23) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary32 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid32_to_binary64 (double *pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT32 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#else
+double
+bid32_to_binary64 (UINT32 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+ unpack_bid32 (x, s, e, k, (c.w[1]), return_binary64_zero (s),
+ return_binary64_inf (s), return_binary64_nan);
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89
+// In fact shift a further 6 places ready for reciprocal multiplication
+// Thus (113-24)+6=95, a shift of 31 given that we've already upacked in c.w[1]
+
+ c.w[1] = c.w[1] << 31;
+ c.w[0] = 0;
+ k = k + 89;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is e >= ceil(1024 * log_10(2)) = ceil(308.25) = 309
+
+ if (e >= 309) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary64_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -358)
+ e = -358;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary64 + 358)[e];
+ e_out = (exponents_binary64 + 358)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary64 + 358)[e];
+ } else {
+ r = (multipliers2_binary64 + 358)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 55)
+ d = 55;
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == (1ull << 53)) {
+ c_prov = 1ull << 52;
+ e_out = e_out + 1;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 2047) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary64_ovf (s);
+ }
+// Modify exponent for a tiny result, otherwise lop the implicit bit
+
+ if (c_prov < (1ull << 52))
+ e_out = 0;
+ else
+ c_prov = c_prov & ((1ull << 52) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary64 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_binary64 (double *pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#else
+double
+bid64_to_binary64 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+ unpack_bid64 (x, s, e, k, (c.w[1]), return_binary64_zero (s),
+ return_binary64_inf (s), return_binary64_nan);
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59
+// In fact shift a further 6 places ready for reciprocal multiplication
+// Thus (113-54)+6=65, a shift of 1 given that we've already upacked in c.w[1]
+
+ c.w[1] = c.w[1] << 1;
+ c.w[0] = 0;
+ k = k + 59;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(1024 * log_10(2)) = ceil(308.25) = 309
+
+ if (e >= 309) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary64_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -358)
+ e = -358;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary64 + 358)[e];
+ e_out = (exponents_binary64 + 358)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary64 + 358)[e];
+ } else {
+ r = (multipliers2_binary64 + 358)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 55)
+ d = 55;
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == (1ull << 53)) {
+ c_prov = 1ull << 52;
+ e_out = e_out + 1;
+ } else if ((c_prov == (1ull << 52)) && (e_out == 1))
+ {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63))))
+
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 2047) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary64_ovf (s);
+ }
+// Modify exponent for a tiny result, otherwise lop the implicit bit
+
+ if (c_prov < (1ull << 52))
+ e_out = 0;
+ else
+ c_prov = c_prov & ((1ull << 52) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary64 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_to_binary64 (double *pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#else
+double
+bid128_to_binary64 (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+ unpack_bid128 (x, s, e, k, c, return_binary64_zero (s),
+ return_binary64_inf (s), return_binary64_nan);
+
+// Shift 6 more places left ready for reciprocal multiplication
+
+ sll128_short (c.w[1], c.w[0], 6);
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(1024 * log_10(2)) = ceil(308.25) = 309
+
+ if (e >= 309) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary64_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -358)
+ e = -358;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary64 + 358)[e];
+ e_out = (exponents_binary64 + 358)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary64 + 358)[e];
+ } else {
+ r = (multipliers2_binary64 + 358)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 55)
+ d = 55;
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == (1ull << 53)) {
+ c_prov = 1ull << 52;
+ e_out = e_out + 1;
+ } else if ((c_prov == (1ull << 52)) && (e_out == 1)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[4] < (1ull << 63))))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 2047) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary64_ovf (s);
+ }
+// Modify exponent for a tiny result, otherwise lop the implicit bit
+
+ if (c_prov < (1ull << 52))
+ e_out = 0;
+ else
+ c_prov = c_prov & ((1ull << 52) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary64 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if __ENABLE_BINARY80__
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid32_to_binary80 (BINARY80 * pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT32 x = *px;
+#else
+BINARY80
+bid32_to_binary80 (UINT32 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid32 (x, s, e, k, (c.w[1]), return_binary80_zero (s),
+ return_binary80_inf (s), return_binary80_nan);
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89
+// Given that we've unpacked in the high part (<<64), that's just <<25
+
+ c.w[1] = c.w[1] << 25;
+ c.w[0] = 0;
+ k = k + 89;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933
+
+ if (e >= 4933) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary80_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -4985)
+ e = -4985;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary80 + 4985)[e];
+ e_out = (exponents_binary80 + 4985)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary80 + 4985)[e];
+ } else {
+ r = (multipliers2_binary80 + 4985)[e];
+ e_out = e_out + 1;
+ }
+
+
+// Do the reciprocal multiplication; make an effective shift of 303 bits
+// by shifting 47 places right and taking the result from word 4
+
+ __mul_128x256_to_384 (z, c, r)
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], 47);
+
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 66)
+ d = 66;
+ if (d >= 64) {
+ d -= 64;
+ z.w[1] = z.w[2], z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = 0;
+ }
+ e_out = 1;
+ srl256 (z.w[4], z.w[3], z.w[2], z.w[1], d);
+ }
+ c_prov = z.w[4];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 0) {
+ c_prov = 1ull << 63;
+ e_out = e_out + 1;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 32767) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary80_ovf (s);
+ }
+// Modify exponent for a tiny result
+
+ if (c_prov < (1ull << 63))
+ e_out = 0;
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[3] != 0) || (z.w[2] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary80 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_binary80 (BINARY80 * pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+BINARY80
+bid64_to_binary80 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid64 (x, s, e, k, (c.w[0]), return_binary80_zero (s),
+ return_binary80_inf (s), return_binary80_nan);
+ c.w[1] = 0;
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59
+
+ sll128_short (c.w[1], c.w[0], 59);
+ k = k + 59;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933
+
+ if (e >= 4933) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary80_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -4985)
+ e = -4985;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary80 + 4985)[e];
+ e_out = (exponents_binary80 + 4985)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary80 + 4985)[e];
+ } else {
+ r = (multipliers2_binary80 + 4985)[e];
+ e_out = e_out + 1;
+ }
+
+
+// Do the reciprocal multiplication; make an effective shift of 303 bits
+// by shifting 47 places right and taking the result from word 4
+
+ __mul_128x256_to_384 (z, c, r)
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], 47);
+
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 66)
+ d = 66;
+ if (d >= 64) {
+ d -= 64;
+ z.w[1] = z.w[2], z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = 0;
+ }
+ e_out = 1;
+ srl256 (z.w[4], z.w[3], z.w[2], z.w[1], d);
+ }
+ c_prov = z.w[4];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 0) {
+ c_prov = 1ull << 63;
+ e_out = e_out + 1;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 32767) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary80_ovf (s);
+ }
+// Modify exponent for a tiny result
+
+ if (c_prov < (1ull << 63))
+ e_out = 0;
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[3] != 0) || (z.w[2] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary80 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_to_binary80 (BINARY80 * pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+BINARY80
+bid128_to_binary80 (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid128 (x, s, e, k, c, return_binary80_zero (s),
+ return_binary80_inf (s), return_binary80_nan);
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933
+
+ if (e >= 4933) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary80_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 115) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -4985)
+ e = -4985;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary80 + 4985)[e];
+ e_out = (exponents_binary80 + 4985)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary80 + 4985)[e];
+ } else {
+ r = (multipliers2_binary80 + 4985)[e];
+ e_out = e_out + 1;
+ }
+
+
+// Do the reciprocal multiplication; make an effective shift of 303 bits
+// by shifting 47 places right and taking the result from word 4
+
+ __mul_128x256_to_384 (z, c, r)
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], 47);
+
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 66)
+ d = 66;
+ if (d >= 64) {
+ d -= 64;
+ z.w[1] = z.w[2], z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = 0;
+ }
+ e_out = 1;
+ srl256 (z.w[4], z.w[3], z.w[2], z.w[1], d);
+ }
+ c_prov = z.w[4];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 0) {
+ c_prov = 1ull << 63;
+ e_out = e_out + 1;
+ } else if ((c_prov == (1ull << 63)) && (e_out == 1)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[3] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[3] < (1ull << 63))))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 32767) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary80_ovf (s);
+ }
+// Modify exponent for a tiny result
+
+ if (c_prov < (1ull << 63))
+ e_out = 0;
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[3] != 0) || (z.w[2] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary80 (s, e_out, c_prov);
+}
+
+#endif // matches #if __ENABLE_BINARY80__
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid32_to_binary128 (BINARY128 * pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT32 x = *px;
+#else
+BINARY128
+bid32_to_binary128 (UINT32 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid32 (x, s, e, k, (c.w[1]), return_binary128_zero (s),
+ return_binary128_inf (s), return_binary128_nan);
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-24=89
+// But also make an additional shift of 2 places to get a whole-word lop:
+// (c * r) >> 254 = ((c << 2) * r) >> 256. Given that we unpack in the high
+// end, our shift is (89+2)-64 = 27
+
+ c.w[0] = 0;
+ c.w[1] = c.w[1] << 27;
+ k = k + 89;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933
+
+ if (e >= 4933) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary128_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 114) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -5000)
+ e = -5000;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary128 + 5000)[e];
+ e_out = (exponents_binary128 + 5000)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary128 + 5000)[e];
+ } else {
+ r = (multipliers2_binary128 + 5000)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication; make an effective shift of 254 bits
+// (given that we already shifted left 2 places) by lopping from word 4
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 115)
+ d = 115;
+ if (d >= 64) {
+ d -= 64;
+ z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = z.w[5], z.w[5] = 0;
+ }
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0) {
+ c_prov_hi = c_prov_hi + 1;
+ if (c_prov_hi == 1ull << 49) {
+ c_prov_hi = 1ull << 48;
+ e_out = e_out + 1;
+ }
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 32767) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary128_ovf (s);
+ }
+// Modify exponent for a tiny result; otherwise lop off the implicit bit
+
+ if (c_prov_hi < (1ull << 48))
+ e_out = 0;
+ else
+ c_prov_hi = c_prov_hi & ((1ull << 48) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[3] != 0) || (z.w[2] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary128 (s, e_out, c_prov_hi, c_prov_lo);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_to_binary128 (BINARY128 * pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+BINARY128
+bid64_to_binary128 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+ unpack_bid64 (x, s, e, k, (c.w[0]), return_binary128_zero (s),
+ return_binary128_inf (s), return_binary128_nan);
+ c.w[1] = 0;
+
+// Correct to 2^112 <= c < 2^113 with corresponding exponent adding 113-54=59
+// But also make an additional shift of 2 places to get a whole-word lop:
+// (c * r) >> 254 = ((c << 2) * r) >> 256
+
+ sll128_short (c.w[1], c.w[0], 61);
+ k = k + 59;
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933
+
+ if (e >= 4933) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary128_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 114) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -5000)
+ e = -5000;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary128 + 5000)[e];
+ e_out = (exponents_binary128 + 5000)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary128 + 5000)[e];
+ } else {
+ r = (multipliers2_binary128 + 5000)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication; make an effective shift of 254 bits
+// (given that we already shifted left 2 places) by lopping from word 4
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 115)
+ d = 115;
+ if (d >= 64) {
+ d -= 64;
+ z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = z.w[5], z.w[5] = 0;
+ }
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0) {
+ c_prov_hi = c_prov_hi + 1;
+ if (c_prov_hi == 1ull << 49) {
+ c_prov_hi = 1ull << 48;
+ e_out = e_out + 1;
+ }
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 32767) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary128_ovf (s);
+ }
+// Modify exponent for a tiny result; otherwise lop off the implicit bit
+
+ if (c_prov_hi < (1ull << 48))
+ e_out = 0;
+ else
+ c_prov_hi = c_prov_hi & ((1ull << 48) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[3] != 0) || (z.w[2] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary128 (s, e_out, c_prov_hi, c_prov_lo);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_to_binary128 (BINARY128 * pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT128 x = *px;
+#else
+BINARY128
+bid128_to_binary128 (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT128 c;
+ UINT128 m_min;
+ int s, e, k, e_out;
+ UINT256 r;
+ UINT384 z;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input and shift two further places for reciprocal multiplication
+
+ unpack_bid128 (x, s, e, k, c, return_binary128_zero (s),
+ return_binary128_inf (s), return_binary128_nan);
+ sll128_short (c.w[1], c.w[0], 2);
+
+// Check for "trivial" overflow, when 10^e * 1 > 2^{sci_emax+1}, just to
+// keep tables smaller (it would be intercepted later otherwise).
+//
+// (Note that we may have normalized the coefficient, but we have a
+// corresponding exponent postcorrection to account for; this can
+// afford to be conservative anyway.)
+//
+// We actually check if e >= ceil((sci_emax + 1) * log_10(2))
+// which in this case is 2 >= ceil(16384 * log_10(2)) = ceil(4932.07544) = 4933
+
+ if (e >= 4933) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary128_ovf (s);
+ }
+// Also check for "trivial" underflow, when 10^e * 2^113 <= 2^emin * 1/4,
+// so test e <= floor((emin - 114) * log_10(2))
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -5000)
+ e = -5000;
+
+// Look up the breakpoint and approximate exponent
+
+ m_min = (breakpoints_binary128 + 5000)[e];
+ e_out = (exponents_binary128 + 5000)[e] - k;
+
+// Choose provisional exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_binary128 + 5000)[e];
+ } else {
+ r = (multipliers2_binary128 + 5000)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication; make an effective shift of 254 bits
+// (given that we already shifted left 2 places) by lopping from word 4
+
+ __mul_128x256_to_384 (z, c, r)
+// Check for exponent underflow and compensate by shifting the product
+// Cut off the process at precision+2, since we can't really shift further
+ if (e_out < 1) {
+ int d;
+ d = 1 - e_out;
+ if (d > 115)
+ d = 115;
+ if (d >= 64) {
+ d -= 64;
+ z.w[2] = z.w[3], z.w[3] = z.w[4], z.w[4] = z.w[5], z.w[5] = 0;
+ }
+ e_out = 1;
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], d);
+ }
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill into the next binade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0) {
+ c_prov_hi = c_prov_hi + 1;
+ if (c_prov_hi == 1ull << 49) {
+ c_prov_hi = 1ull << 48;
+ e_out = e_out + 1;
+ } else if ((c_prov_hi == (1ull << 48)) && (e_out == 1)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[3] < (3ull << 62))) ||
+ ((rnd_mode + (s & 1) == 2) && (z.w[3] < (1ull << 63))))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+ }
+// Check for overflow
+
+ if (e_out >= 32767) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_binary128_ovf (s);
+ }
+// Modify exponent for a tiny result; otherwise lop off the implicit bit
+
+ if (c_prov_hi < (1ull << 48))
+ e_out = 0;
+ else
+ c_prov_hi = c_prov_hi & ((1ull << 48) - 1);
+
+// Set the inexact and underflow flag as appropriate
+
+ if ((z.w[3] != 0) || (z.w[2] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (e_out == 0)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result as a binary floating-point number
+
+ return_binary128 (s, e_out, c_prov_hi, c_prov_lo);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary32_to_bid32 (UINT32 * pres, float *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ float x = *px;
+#else
+UINT32
+binary32_to_bid32 (float x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary32 (x, s, e, c.w[1], t, return_bid32_zero (s),
+ return_bid32_inf (s), return_bid32_nan);
+
+// Treat like a quad input for uniformity, so (2^{113-24} * c * r) >> 320,
+// where 320 is the truncation value for the reciprocal multiples, exactly
+// five 64-bit words. So we shift 113-24=89 places. Since we unpacked in
+// the high end, shift a further 89-64=25 places
+//
+// Remember to compensate for the fact that exponents are integer for quad
+
+ c.w[0] = 0;
+ c.w[1] = c.w[1] << 25;
+ t += (113 - 24);
+ e -= (113 - 24);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 211) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], -e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull))
+ return_bid32 (s, 101, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid32[a];
+ srl128 (cint.w[1], cint.w[0], t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid32 (s, 101 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -450)
+ e = -450;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid32 + 450)[e];
+ e_out = (exponents_bid32 + 450)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid32 + 450)[e];
+ } else {
+ r = (multipliers2_bid32 + 450)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000ull) {
+ c_prov = 1000000ull;
+ e_out = e_out + 1;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 90 + 101) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid32 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary64_to_bid32 (UINT32 * pres, double *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ double x = *px;
+#else
+UINT32
+binary64_to_bid32 (double x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary64 (x, s, e, c.w[0], t, return_bid32_zero (s),
+ return_bid32_inf (s), return_bid32_nan);
+
+// Treat like a quad input for uniformity, so (2^{113-53} * c * r) >> 320,
+// where 320 is the truncation value for the reciprocal multiples, exactly
+// five 64-bit words. So we shift 113-53=60 places
+//
+// Remember to compensate for the fact that exponents are integer for quad
+
+ c.w[1] = 0;
+ sll128_short (c.w[1], c.w[0], 60);
+ t += (113 - 53);
+ e -= (113 - 53);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 211) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], -e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull))
+ return_bid32 (s, 101, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid32[a];
+ srl128 (cint.w[1], cint.w[0], t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid32 (s, 101 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -450)
+ e = -450;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid32 + 450)[e];
+ e_out = (exponents_bid32 + 450)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid32 + 450)[e];
+ } else {
+ r = (multipliers2_bid32 + 450)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000ull) {
+ c_prov = 1000000ull;
+ e_out = e_out + 1;
+ } else if ((c_prov == 1000000ull) && (e_out == 0)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull))
+ || ((rnd_mode + (s & 1) == 2)
+ && (z.w[4] <= 16602069666338596454ull)))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 90 + 101) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid32 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if __ENABLE_BINARY80__
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary80_to_bid32 (UINT32 * pres, BINARY80 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ BINARY80 x = *px;
+#else
+UINT32
+binary80_to_bid32 (BINARY80 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary80 (x, s, e, c.w[0], t, return_bid32_zero (s),
+ return_bid32_inf (s), return_bid32_nan);
+
+// Treat like a quad input for uniformity, so (2^{113-64} * c * r) >> 320,
+// where 320 is the truncation value for the reciprocal multiples, exactly
+// five 64-bit words. So we shift 113-64=49 places
+//
+// Remember to compensate for the fact that exponents are integer for quad
+
+ c.w[1] = 0;
+ sll128_short (c.w[1], c.w[0], 49);
+ t += (113 - 64);
+ e -= (113 - 64);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 211) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], -e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull))
+ return_bid32 (s, 101, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid32[a];
+ srl128 (cint.w[1], cint.w[0], t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid32 (s, 101 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -450)
+ e = -450;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid32 + 450)[e];
+ e_out = (exponents_bid32 + 450)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid32 + 450)[e];
+ } else {
+ r = (multipliers2_bid32 + 450)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000ull) {
+ c_prov = 1000000ull;
+ e_out = e_out + 1;
+ } else if ((c_prov == 1000000ull) && (e_out == 0)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull))
+ || ((rnd_mode + (s & 1) == 2)
+ && (z.w[4] <= 16602069666338596454ull)))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 90 + 101) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid32 (s, e_out, c_prov);
+}
+
+#endif // matches #if __ENABLE_BINARY80__
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary128_to_bid32 (UINT32 * pres, BINARY128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ BINARY128 x = *px;
+#else
+UINT32
+binary128_to_bid32 (BINARY128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary128 (x, s, e, c.w[1], c.w[0], t, return_bid32_zero (s),
+ return_bid32_inf (s), return_bid32_nan);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 211) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], -e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000ull))
+ return_bid32 (s, 101, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid32[a];
+ srl128 (cint.w[1], cint.w[0], t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid32 (s, 101 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -450)
+ e = -450;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid32 + 450)[e];
+ e_out = (exponents_bid32 + 450)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid32 + 450)[e];
+ } else {
+ r = (multipliers2_bid32 + 450)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+// This needs to be done in extra precision because of the precision disparity
+// and the fact that the breakpoint isn't an exact binary number.
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000ull) {
+ c_prov = 1000000ull;
+ e_out = e_out + 1;
+ } else if ((c_prov == 1000000ull) && (e_out == 0)) {
+ if ((((rnd_mode & 3) == 0) &&
+ le128 (z.w[4], z.w[3],
+ 17524406870024074035ull, 3689348814741910323ull)) ||
+ ((rnd_mode + (s & 1) == 2) &&
+ le128 (z.w[4], z.w[3],
+ 16602069666338596454ull, 7378697629483820646ull)))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 90 + 101) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid32_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid32 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary32_to_bid64 (UINT64 * pres, float *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ float x = *px;
+#else
+UINT64
+binary32_to_bid64 (float x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary32 (x, s, e, c.w[1], t, return_bid64_zero (s),
+ return_bid64_inf (s), return_bid64_nan);
+
+// Treat like a quad input for uniformity, so (2^{113-24} * c * r) >> 312
+// (312 is the shift value for these tables) which can be written as
+// (2^97 c * r) >> 320, lopping off exactly 320 bits = 5 words. Thus we put
+// input coefficient as the high part of c (<<64) shifted by 33 bits (<<97)
+//
+// Remember to compensate for the fact that exponents are integer for quad
+
+ c.w[1] = c.w[1] << 33;
+ c.w[0] = 0;
+ t += (113 - 24);
+ e -= (113 - 24);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 1168) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 8 places to the left in preparation for the reciprocal
+// multiplication; thus we add 8 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 8 - e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull))
+ return_bid64 (s, 398, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid64[a];
+ srl128 (cint.w[1], cint.w[0], 8 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid64 (s, 398 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -1437)
+ e = -1437;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid64 + 1437)[e];
+ e_out = (exponents_bid64 + 1437)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid64 + 1437)[e];
+ } else {
+ r = (multipliers2_bid64 + 1437)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000000000000ull) {
+ c_prov = 1000000000000000ull;
+ e_out = e_out + 1;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 369 + 398) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000000000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid64 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary64_to_bid64 (UINT64 * pres, double *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ double x = *px;
+#else
+UINT64
+binary64_to_bid64 (double x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary64 (x, s, e, c.w[1], t, return_bid64_zero (s),
+ return_bid64_inf (s), return_bid64_nan);
+
+// Treat like a quad input for uniformity, so (2^{113-53} * c * r) >> 312
+// (312 is the shift value for these tables) which can be written as
+// (2^68 c * r) >> 320, lopping off exactly 320 bits = 5 words. Thus we put
+// input coefficient as the high part of c (<<64) shifted by 4 bits (<<68)
+//
+// Remember to compensate for the fact that exponents are integer for quad
+
+ c.w[1] = c.w[1] << 4;
+ c.w[0] = 0;
+ t += (113 - 53);
+ e -= (113 - 53);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 1168) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 8 places to the left in preparation for the reciprocal
+// multiplication; thus we add 8 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 8 - e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull))
+ return_bid64 (s, 398, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid64[a];
+ srl128 (cint.w[1], cint.w[0], 8 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid64 (s, 398 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -1437)
+ e = -1437;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid64 + 1437)[e];
+ e_out = (exponents_bid64 + 1437)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid64 + 1437)[e];
+ } else {
+ r = (multipliers2_bid64 + 1437)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000000000000ull) {
+ c_prov = 1000000000000000ull;
+ e_out = e_out + 1;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 369 + 398) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000000000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid64 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if __ENABLE_BINARY80__
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary80_to_bid64 (UINT64 * pres, BINARY80 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ BINARY80 x = *px;
+#else
+UINT64
+binary80_to_bid64 (BINARY80 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary80 (x, s, e, c.w[1], t, return_bid64_zero (s),
+ return_bid64_inf (s), return_bid64_nan);
+
+// Treat like a quad input for uniformity, so (2^{113-64} * c * r) >> 312
+// (312 is the shift value for these tables) which can be written as
+// (2^57 c * r) >> 320, lopping off exactly 320 bits = 5 words. Thus we put the
+// input in the high part then shift right 7 places
+
+ c.w[0] = 0;
+ srl128_short (c.w[1], c.w[0], 7);
+ t += (113 - 64);
+ e -= (113 - 64);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 1168) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 8 places to the left in preparation for the reciprocal
+// multiplication; thus we add 8 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 8 - e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull))
+ return_bid64 (s, 398, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid64[a];
+ srl128 (cint.w[1], cint.w[0], 8 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid64 (s, 398 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -1437)
+ e = -1437;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid64 + 1437)[e];
+ e_out = (exponents_bid64 + 1437)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid64 + 1437)[e];
+ } else {
+ r = (multipliers2_bid64 + 1437)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000000000000ull) {
+ c_prov = 1000000000000000ull;
+ e_out = e_out + 1;
+ } else if ((c_prov == 1000000000000000ull) && (e_out == 0)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull))
+ || ((rnd_mode + (s & 1) == 2)
+ && (z.w[4] <= 16602069666338596454ull)))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 369 + 398) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000000000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid64 (s, e_out, c_prov);
+}
+
+#endif // matches #if __ENABLE_BINARY80__
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary128_to_bid64 (UINT64 * pres, BINARY128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ BINARY128 x = *px;
+#else
+UINT64
+binary128_to_bid64 (BINARY128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov;
+ UINT128 m_min;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary128 (x, s, e, c.w[1], c.w[0], t, return_bid64_zero (s),
+ return_bid64_inf (s), return_bid64_nan);
+
+// Shift left 8 spaces so (c * r) >> 312 = ((c<<8) * r) >> 320 and we
+// can lop off exactly 5 words
+
+ sll128_short (c.w[1], c.w[0], 8);
+
+// Check for "trivial" overflow, when 2^e * 2^112 > 10^emax * 10^d.
+// We actually check if e >= ceil((emax + d) * log_2(10) - 112)
+// This could be intercepted later, but it's convenient to keep tables smaller
+
+ if (e >= 1168) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 8 places to the left in preparation for the reciprocal
+// multiplication; thus we add 8 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 8 - e);
+ if ((cint.w[1] == 0) && (cint.w[0] < 10000000000000000ull))
+ return_bid64 (s, 398, cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid64[a];
+ srl128 (cint.w[1], cint.w[0], 8 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid64 (s, 398 - a, cc.w[0]);
+ }
+ }
+ }
+// Check for "trivial" underflow, when 2^e * 2^113 <= 10^emin * 1/4,
+// so test e <= floor(emin * log_2(10) - 115)
+// In this case just fix ourselves at that value for uniformity.
+//
+// This is important not only to keep the tables small but to maintain the
+// testing of the round/sticky words as a correct rounding method
+
+ if (e <= -1437)
+ e = -1437;
+
+// Now look up our exponent e, and the breakpoint between e and e+1
+
+ m_min = (breakpoints_bid64 + 1437)[e];
+ e_out = (exponents_bid64 + 1437)[e];
+
+// Choose exponent and reciprocal multiplier based on breakpoint
+
+ if (le128 (c.w[1], c.w[0], m_min.w[1], m_min.w[0])) {
+ r = (multipliers1_bid64 + 1437)[e];
+ } else {
+ r = (multipliers2_bid64 + 1437)[e];
+ e_out = e_out + 1;
+ }
+
+// Do the reciprocal multiplication
+
+ __mul_128x256_to_384 (z, c, r)
+ c_prov = z.w[5];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+// Flag underflow where it may be needed even for |result| = SNN
+
+ if (lt128
+ (roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) + (c_prov & 1)].
+ w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov & 1)].w[0], z.w[4], z.w[3])) {
+ c_prov = c_prov + 1;
+ if (c_prov == 10000000000000000ull) {
+ c_prov = 1000000000000000ull;
+ e_out = e_out + 1;
+ } else if ((c_prov == 1000000000000000ull) && (e_out == 0)) {
+ if ((((rnd_mode & 3) == 0) && (z.w[4] <= 17524406870024074035ull))
+ || ((rnd_mode + (s & 1) == 2)
+ && (z.w[4] <= 16602069666338596454ull)))
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+ }
+// Check for overflow
+
+ if (e_out > 369 + 398) {
+ *pfpsf |= (OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ return_bid64_ovf (s);
+ }
+// Set the inexact flag as appropriate and check underflow
+// It's no doubt superfluous to check inexactness, but anyway...
+
+ if ((z.w[4] != 0) || (z.w[3] != 0)) {
+ *pfpsf |= INEXACT_EXCEPTION;
+ if (c_prov < 1000000000000000ull)
+ *pfpsf |= UNDERFLOW_EXCEPTION;
+ }
+// Package up the result
+
+ return_bid64 (s, e_out, c_prov);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary32_to_bid128 (UINT128 * pres, float *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ float x = *px;
+#else
+UINT128
+binary32_to_bid128 (float x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out, e_plus, e_hi, e_lo, f;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary32 (x, s, e, c.w[1], t, return_bid128_zero (s),
+ return_bid128_inf (s), return_bid128_nan);
+
+// Shift up to the top: like a pure quad coefficient with a shift of 15.
+// In our case, this is 2^{113-24+15} times the core, so unpack at the
+// high end shifted by 40.
+
+ c.w[0] = 0;
+ c.w[1] = c.w[1] << 40;
+
+ t += (113 - 24);
+ e -= (113 - 24);
+
+// (We never need to check for overflow: this format is the biggest of all!)
+
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 15 places to the left in preparation for the reciprocal
+// multiplication; thus we add 15 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 15 - e);
+ if (lt128 (cint.w[1], cint.w[0],
+ 542101086242752ull, 4003012203950112768ull))
+ return_bid128 (s, 6176, cint.w[1], cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid128[a];
+ srl128 (cint.w[1], cint.w[0], 15 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]);
+ }
+ }
+ }
+// Input exponent can stretch between the maximal and minimal
+// exponents (remembering we force normalization): -16607 <= e <= 16271
+
+// Compute the estimated decimal exponent e_out; the provisional exponent
+// will be either "e_out" or "e_out-1" depending on later significand check
+// NB: this is the *biased* exponent
+
+ e_plus = e + 42152;
+ e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512;
+
+// Set up pointers into the bipartite table
+
+ e_hi = 11232 - e_out;
+ e_lo = e_hi & 127;
+ e_hi = e_hi >> 7;
+
+// Look up the inner entry first
+
+ r = innertable_sig[e_lo], f = innertable_exp[e_lo];
+
+// If we need the other entry, multiply significands and add exponents
+
+ if (e_hi != 39) {
+ UINT256 s = outertable_sig[e_hi];
+ UINT512 t;
+ f = f + 256 + outertable_exp[e_hi];
+ __mul_256x256_to_512 (t, r, s);
+ r.w[0] = t.w[4] + 1, r.w[1] = t.w[5],
+ r.w[2] = t.w[6], r.w[3] = t.w[7];
+ }
+
+ __mul_128x256_to_384 (z, c, r);
+
+// Make adjustive shift, ignoring the lower 128 bits
+
+ e = -(241 + e + f);
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e);
+
+// Now test against 10^33 and so decide on adjustment
+// I feel there ought to be a smarter way of doing the multiplication
+
+ if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) {
+ __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4],
+ z.w[3], z.w[2]);
+ e_out = e_out - 1;
+ }
+// Set up provisional results
+
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0)
+ c_prov_hi = c_prov_hi + 1;
+ else if ((c_prov_lo == 4003012203950112768ull) &&
+ (c_prov_hi == 542101086242752ull)) {
+ c_prov_hi = 54210108624275ull;
+ c_prov_lo = 4089650035136921600ull;
+ e_out = e_out + 1;
+ }
+ }
+// Don't need to check overflow or underflow; however set inexact flag
+
+ if ((z.w[3] != 0) || (z.w[2] != 0))
+ *pfpsf |= INEXACT_EXCEPTION;
+
+// Package up the result
+
+ return_bid128 (s, e_out, c_prov_hi, c_prov_lo);
+}
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary64_to_bid128 (UINT128 * pres, double *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ double x = *px;
+#else
+UINT128
+binary64_to_bid128 (double x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out, e_plus, e_hi, e_lo, f;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary64 (x, s, e, c.w[1], t, return_bid128_zero (s),
+ return_bid128_inf (s), return_bid128_nan);
+
+// Shift up to the top: like a pure quad coefficient with a shift of 15.
+// In our case, this is 2^{113-53+15} times the core, so unpack at the
+// high end shifted by 11.
+
+ c.w[0] = 0;
+ c.w[1] = c.w[1] << 11;
+
+ t += (113 - 53);
+ e -= (113 - 53);
+
+// (We never need to check for overflow: this format is the biggest of all!)
+
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 15 places to the left in preparation for the reciprocal
+// multiplication; thus we add 15 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 15 - e);
+ if (lt128 (cint.w[1], cint.w[0],
+ 542101086242752ull, 4003012203950112768ull))
+ return_bid128 (s, 6176, cint.w[1], cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid128[a];
+ srl128 (cint.w[1], cint.w[0], 15 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]);
+ }
+ }
+ }
+// Input exponent can stretch between the maximal and minimal
+// exponents (remembering we force normalization): -16607 <= e <= 16271
+
+// Compute the estimated decimal exponent e_out; the provisional exponent
+// will be either "e_out" or "e_out-1" depending on later significand check
+// NB: this is the *biased* exponent
+
+ e_plus = e + 42152;
+ e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512;
+
+// Set up pointers into the bipartite table
+
+ e_hi = 11232 - e_out;
+ e_lo = e_hi & 127;
+ e_hi = e_hi >> 7;
+
+// Look up the inner entry first
+
+ r = innertable_sig[e_lo], f = innertable_exp[e_lo];
+
+// If we need the other entry, multiply significands and add exponents
+
+ if (e_hi != 39) {
+ UINT256 s = outertable_sig[e_hi];
+ UINT512 t;
+ f = f + 256 + outertable_exp[e_hi];
+ __mul_256x256_to_512 (t, r, s);
+ r.w[0] = t.w[4] + 1, r.w[1] = t.w[5],
+ r.w[2] = t.w[6], r.w[3] = t.w[7];
+ }
+
+ __mul_128x256_to_384 (z, c, r);
+
+// Make adjustive shift, ignoring the lower 128 bits
+
+ e = -(241 + e + f);
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e);
+
+// Now test against 10^33 and so decide on adjustment
+// I feel there ought to be a smarter way of doing the multiplication
+
+ if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) {
+ __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4],
+ z.w[3], z.w[2]);
+ e_out = e_out - 1;
+ }
+// Set up provisional results
+
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0)
+ c_prov_hi = c_prov_hi + 1;
+ else if ((c_prov_lo == 4003012203950112768ull) &&
+ (c_prov_hi == 542101086242752ull)) {
+ c_prov_hi = 54210108624275ull;
+ c_prov_lo = 4089650035136921600ull;
+ e_out = e_out + 1;
+ }
+ }
+// Don't need to check overflow or underflow; however set inexact flag
+
+ if ((z.w[3] != 0) || (z.w[2] != 0))
+ *pfpsf |= INEXACT_EXCEPTION;
+
+// Package up the result
+
+ return_bid128 (s, e_out, c_prov_hi, c_prov_lo);
+}
+
+// **********************************************************************
+
+#if __ENABLE_BINARY80__
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary80_to_bid128 (UINT128 * pres, BINARY80 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ BINARY80 x = *px;
+#else
+UINT128
+binary80_to_bid128 (BINARY80 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out, e_plus, e_hi, e_lo, f;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary80 (x, s, e, c.w[1], t, return_bid128_zero (s),
+ return_bid128_inf (s), return_bid128_nan);
+
+// Treat like a pure quad coefficient with a shift of 15. We get this
+// just by unpacking at the high end
+
+ c.w[0] = 0;
+
+ t += (113 - 64);
+ e -= (113 - 64);
+
+// (We never need to check for overflow: this format is the biggest of all!)
+
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 15 places to the left in preparation for the reciprocal
+// multiplication; thus we add 15 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 15 - e);
+ if (lt128 (cint.w[1], cint.w[0],
+ 542101086242752ull, 4003012203950112768ull))
+ return_bid128 (s, 6176, cint.w[1], cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid128[a];
+ srl128 (cint.w[1], cint.w[0], 15 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]);
+ }
+ }
+ }
+// Input exponent can stretch between the maximal and minimal
+// exponents (remembering we force normalization): -16607 <= e <= 16271
+
+// Compute the estimated decimal exponent e_out; the provisional exponent
+// will be either "e_out" or "e_out-1" depending on later significand check
+// NB: this is the *biased* exponent
+
+ e_plus = e + 42152;
+ e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512;
+
+// Set up pointers into the bipartite table
+
+ e_hi = 11232 - e_out;
+ e_lo = e_hi & 127;
+ e_hi = e_hi >> 7;
+
+// Look up the inner entry first
+
+ r = innertable_sig[e_lo], f = innertable_exp[e_lo];
+
+// If we need the other entry, multiply significands and add exponents
+
+ if (e_hi != 39) {
+ UINT256 s = outertable_sig[e_hi];
+ UINT512 t;
+ f = f + 256 + outertable_exp[e_hi];
+ __mul_256x256_to_512 (t, r, s);
+ r.w[0] = t.w[4] + 1, r.w[1] = t.w[5],
+ r.w[2] = t.w[6], r.w[3] = t.w[7];
+ }
+
+ __mul_128x256_to_384 (z, c, r);
+
+// Make adjustive shift, ignoring the lower 128 bits
+
+ e = -(241 + e + f);
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e);
+
+// Now test against 10^33 and so decide on adjustment
+// I feel there ought to be a smarter way of doing the multiplication
+
+ if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) {
+ __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4],
+ z.w[3], z.w[2]);
+ e_out = e_out - 1;
+ }
+// Set up provisional results
+
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0)
+ c_prov_hi = c_prov_hi + 1;
+ else if ((c_prov_lo == 4003012203950112768ull) &&
+ (c_prov_hi == 542101086242752ull)) {
+ c_prov_hi = 54210108624275ull;
+ c_prov_lo = 4089650035136921600ull;
+ e_out = e_out + 1;
+ }
+ }
+// Don't need to check overflow or underflow; however set inexact flag
+
+ if ((z.w[3] != 0) || (z.w[2] != 0))
+ *pfpsf |= INEXACT_EXCEPTION;
+
+// Package up the result
+
+ return_bid128 (s, e_out, c_prov_hi, c_prov_lo);
+}
+
+#endif // matches #if __ENABLE_BINARY80__
+
+// **********************************************************************
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+binary128_to_bid128 (UINT128 * pres, BINARY128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ BINARY128 x = *px;
+#else
+UINT128
+binary128_to_bid128 (BINARY128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 c;
+ UINT64 c_prov_hi, c_prov_lo;
+ UINT256 r;
+ UINT384 z;
+
+ int e, s, t, e_out, e_plus, e_hi, e_lo, f;
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round rnd_mode = *prnd_mode;
+#endif
+#endif
+
+// Unpack the input
+
+ unpack_binary128 (x, s, e, c.w[1], c.w[0], t, return_bid128_zero (s),
+ return_bid128_inf (s), return_bid128_nan);
+
+// Shift up 15 places to move to the top
+
+ sll128_short (c.w[1], c.w[0], 15);
+
+// (We never need to check for overflow: this format is the biggest of all!)
+
+// Now filter out all the exact cases where we need to specially force
+// the exponent to 0. We can let through inexact cases and those where the
+// main path will do the right thing anyway, e.g. integers outside coeff range.
+//
+// First check that e <= 0, because if e > 0, the input must be >= 2^113,
+// which is too large for the coefficient of any target decimal format.
+// We write a = -(e + t)
+//
+// (1) If e + t >= 0 <=> a <= 0 the input is an integer; treat it specially
+// iff it fits in the coefficient range. Shift c' = c >> -e, and
+// compare with the coefficient range; if it's in range then c' is
+// our coefficient, exponent is 0. Otherwise we pass through.
+//
+// (2) If a > 0 then we have a non-integer input. The special case would
+// arise as c' / 2^a where c' = c >> t, i.e. 10^-a * (5^a c'). Now
+// if a > 48 we can immediately forget this, since 5^49 > 10^34.
+// Otherwise we determine whether we're in range by a table based on
+// a, and if so get the multiplier also from a table based on a.
+//
+// Note that when we shift, we need to take into account the fact that
+// c is already 15 places to the left in preparation for the reciprocal
+// multiplication; thus we add 15 to all the shift counts
+
+ if (e <= 0) {
+ UINT128 cint;
+ int a = -(e + t);
+ cint.w[1] = c.w[1], cint.w[0] = c.w[0];
+ if (a <= 0) {
+ srl128 (cint.w[1], cint.w[0], 15 - e);
+ if (lt128 (cint.w[1], cint.w[0],
+ 542101086242752ull, 4003012203950112768ull))
+ return_bid128 (s, 6176, cint.w[1], cint.w[0]);
+ } else if (a <= 48) {
+ UINT128 pow5 = coefflimits_bid128[a];
+ srl128 (cint.w[1], cint.w[0], 15 + t);
+ if (le128 (cint.w[1], cint.w[0], pow5.w[1], pow5.w[0])) {
+ UINT128 cc;
+ cc.w[1] = cint.w[1];
+ cc.w[0] = cint.w[0];
+ pow5 = power_five[a];
+ __mul_128x128_low (cc, cc, pow5);
+ return_bid128 (s, 6176 - a, cc.w[1], cc.w[0]);
+ }
+ }
+ }
+// Input exponent can stretch between the maximal and minimal
+// exponents (remembering we force normalization): -16607 <= e <= 16271
+
+// Compute the estimated decimal exponent e_out; the provisional exponent
+// will be either "e_out" or "e_out-1" depending on later significand check
+// NB: this is the *biased* exponent
+
+ e_plus = e + 42152;
+ e_out = (((19728 * e_plus) + ((19779 * e_plus) >> 16)) >> 16) - 6512;
+
+// Set up pointers into the bipartite table
+
+ e_hi = 11232 - e_out;
+ e_lo = e_hi & 127;
+ e_hi = e_hi >> 7;
+
+// Look up the inner entry first
+
+ r = innertable_sig[e_lo], f = innertable_exp[e_lo];
+
+// If we need the other entry, multiply significands and add exponents
+
+ if (e_hi != 39) {
+ UINT256 s = outertable_sig[e_hi];
+ UINT512 t;
+ f = f + 256 + outertable_exp[e_hi];
+ __mul_256x256_to_512 (t, r, s);
+ // *** NB I should run an exhaustive check this +1 doesn't overflow
+ r.w[0] = t.w[4] + 1, r.w[1] = t.w[5],
+ r.w[2] = t.w[6], r.w[3] = t.w[7];
+ }
+
+ __mul_128x256_to_384 (z, c, r);
+
+// Make adjustive shift, ignoring the lower 128 bits
+
+ e = -(241 + e + f);
+ srl256 (z.w[5], z.w[4], z.w[3], z.w[2], e);
+
+// Now test against 10^33 and so decide on adjustment
+// I feel there ought to be a smarter way of doing the multiplication
+
+ if (lt128 (z.w[5], z.w[4], 54210108624275ull, 4089650035136921600ull)) {
+ __mul_10x256_to_256 (z.w[5], z.w[4], z.w[3], z.w[2], z.w[5], z.w[4],
+ z.w[3], z.w[2]);
+ e_out = e_out - 1;
+ }
+// Set up provisional results
+
+ c_prov_hi = z.w[5];
+ c_prov_lo = z.w[4];
+
+// Round using round-sticky words
+// If we spill over into the next decade, correct
+
+ if (lt128
+ (roundbound_128
+ [(rnd_mode << 2) + ((s & 1) << 1) + (c_prov_lo & 1)].w[1],
+ roundbound_128[(rnd_mode << 2) + ((s & 1) << 1) +
+ (c_prov_lo & 1)].w[0], z.w[3], z.w[2])) {
+ c_prov_lo = c_prov_lo + 1;
+ if (c_prov_lo == 0)
+ c_prov_hi = c_prov_hi + 1;
+ else if ((c_prov_lo == 4003012203950112768ull) &&
+ (c_prov_hi == 542101086242752ull)) {
+ c_prov_hi = 54210108624275ull;
+ c_prov_lo = 4089650035136921600ull;
+ e_out = e_out + 1;
+ }
+ }
+// Don't need to check overflow or underflow; however set inexact flag
+
+ if ((z.w[3] != 0) || (z.w[2] != 0))
+ *pfpsf |= INEXACT_EXCEPTION;
+
+// Package up the result
+
+ return_bid128 (s, e_out, c_prov_hi, c_prov_lo);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid_conf.h b/gcc-4.9/libgcc/config/libbid/bid_conf.h
new file mode 100644
index 000000000..68921442e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_conf.h
@@ -0,0 +1,1171 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _BID_CONF_H
+#define _BID_CONF_H
+
+// Name Changes
+
+#define _IDEC_glbflags __bid_IDEC_glbflags
+#define _IDEC_glbround __bid_IDEC_glbround
+#define _IDEC_glbexcepthandling __bid_IDEC_glbexcepthandling
+#define _IDEC_glbexceptionmasks __bid_IDEC_glbexceptionmasks
+#define bid64_add __bid64_add
+#define bid64_sub __bid64_sub
+#define bid64_mul __bid64_mul
+#define bid64_div __bid64_div
+#define bid64dq_div __bid64dq_div
+#define bid64qd_div __bid64qd_div
+#define bid64qq_div __bid64qq_div
+#define bid64q_sqrt __bid64q_sqrt
+#define bid64_sqrt __bid64_sqrt
+#define bid64_rem __bid64_rem
+#define bid64_fma __bid64_fma
+#define bid64_scalb __bid64_scalb
+#define round128_19_38 __bid_round128_19_38
+#define round192_39_57 __bid_round192_39_57
+#define round256_58_76 __bid_round256_58_76
+#define round64_2_18 __bid_round64_2_18
+#define bid64_nextafter __bid64_nextafter
+#define bid64_nextdown __bid64_nextdown
+#define bid64_nextup __bid64_nextup
+#define b2d __bid_b2d
+#define b2d2 __bid_b2d2
+#define b2d3 __bid_b2d3
+#define b2d4 __bid_b2d4
+#define b2d5 __bid_b2d5
+#define bid128_canonize __bid128_canonize
+#define bid32_canonize __bid32_canonize
+#define bid64_canonize __bid64_canonize
+#define bid_to_bid128 __bid_to_bid128
+#define bid_to_bid32 __bid_to_bid32
+#define bid_to_bid64 __bid_to_bid64
+#define bid_to_dpd128 __bid_to_dpd128
+#define bid_to_dpd32 __bid_to_dpd32
+#define bid_to_dpd64 __bid_to_dpd64
+#define d2b __bid_d2b
+#define d2b2 __bid_d2b2
+#define d2b3 __bid_d2b3
+#define d2b4 __bid_d2b4
+#define d2b5 __bid_d2b5
+#define d2b6 __bid_d2b6
+#define dpd_to_bid128 __bid_dpd_to_bid128
+#define dpd_to_bid32 __bid_dpd_to_bid32
+#define dpd_to_bid64 __bid_dpd_to_bid64
+#define bid128_nextafter __bid128_nextafter
+#define bid128_nextdown __bid128_nextdown
+#define bid128_nextup __bid128_nextup
+#define bid64_logb __bid64_logb
+#define bid64_quantize __bid64_quantize
+#define estimate_bin_expon __bid_estimate_bin_expon
+#define estimate_decimal_digits __bid_estimate_decimal_digits
+#define power10_index_binexp __bid_power10_index_binexp
+#define power10_index_binexp_128 __bid_power10_index_binexp_128
+#define power10_table_128 __bid_power10_table_128
+#define reciprocals10_128 __bid_reciprocals10_128
+#define reciprocals10_64 __bid_reciprocals10_64
+#define recip_scale __bid_recip_scale
+#define round_const_table __bid_round_const_table
+#define round_const_table_128 __bid_round_const_table_128
+#define short_recip_scale __bid_short_recip_scale
+#define bid64_from_string __bid64_from_string
+#define bid64_to_string __bid64_to_string
+#define Inv_Tento9 __bid_Inv_Tento9
+#define midi_tbl __bid_midi_tbl
+#define Tento3 __bid_Tento3
+#define Tento6 __bid_Tento6
+#define Tento9 __bid_Tento9
+#define Twoto30_m_10to9 __bid_Twoto30_m_10to9
+#define Twoto60 __bid_Twoto60
+#define Twoto60_m_10to18 __bid_Twoto60_m_10to18
+#define convert_table __bid_convert_table
+#define factors __bid_factors
+#define packed_10000_zeros __bid_packed_10000_zeros
+#define char_table2 __bid_char_table2
+#define char_table3 __bid_char_table3
+#define Ex128m128 __bid_Ex128m128
+#define Ex192m192 __bid_Ex192m192
+#define Ex256m256 __bid_Ex256m256
+#define Ex64m64 __bid_Ex64m64
+#define half128 __bid_half128
+#define half192 __bid_half192
+#define half256 __bid_half256
+#define half64 __bid_half64
+#define Kx128 __bid_Kx128
+#define Kx192 __bid_Kx192
+#define Kx256 __bid_Kx256
+#define Kx64 __bid_Kx64
+#define mask128 __bid_mask128
+#define mask192 __bid_mask192
+#define mask256 __bid_mask256
+#define mask64 __bid_mask64
+#define maskhigh128 __bid_maskhigh128
+#define maskhigh128M __bid_maskhigh128M
+#define maskhigh192M __bid_maskhigh192M
+#define maskhigh256M __bid_maskhigh256M
+#define midpoint128 __bid_midpoint128
+#define midpoint192 __bid_midpoint192
+#define midpoint256 __bid_midpoint256
+#define midpoint64 __bid_midpoint64
+#define nr_digits __bid_nr_digits
+#define onehalf128 __bid_onehalf128
+#define onehalf128M __bid_onehalf128M
+#define onehalf192M __bid_onehalf192M
+#define onehalf256M __bid_onehalf256M
+#define shiftright128 __bid_shiftright128
+#define shiftright128M __bid_shiftright128M
+#define shiftright192M __bid_shiftright192M
+#define shiftright256M __bid_shiftright256M
+#define shift_ten2m3k128 __bid_shift_ten2m3k128
+#define shift_ten2m3k64 __bid_shift_ten2m3k64
+#define ten2k128 __bid_ten2k128
+#define ten2k256 __bid_ten2k256
+#define ten2k64 __bid_ten2k64
+#define ten2m3k128 __bid_ten2m3k128
+#define ten2m3k64 __bid_ten2m3k64
+#define ten2mk128 __bid_ten2mk128
+#define ten2mk128M __bid_ten2mk128M
+#define ten2mk128trunc __bid_ten2mk128trunc
+#define ten2mk128truncM __bid_ten2mk128truncM
+#define ten2mk192M __bid_ten2mk192M
+#define ten2mk192truncM __bid_ten2mk192truncM
+#define ten2mk256M __bid_ten2mk256M
+#define ten2mk256truncM __bid_ten2mk256truncM
+#define ten2mk64 __bid_ten2mk64
+#define ten2mxtrunc128 __bid_ten2mxtrunc128
+#define ten2mxtrunc192 __bid_ten2mxtrunc192
+#define ten2mxtrunc256 __bid_ten2mxtrunc256
+#define ten2mxtrunc64 __bid_ten2mxtrunc64
+#define bid128_add __bid128_add
+#define bid128dd_add __bid128dd_add
+#define bid128dd_sub __bid128dd_sub
+#define bid128dq_add __bid128dq_add
+#define bid128dq_sub __bid128dq_sub
+#define bid128qd_add __bid128qd_add
+#define bid128qd_sub __bid128qd_sub
+#define bid128_sub __bid128_sub
+#define bid64dq_add __bid64dq_add
+#define bid64dq_sub __bid64dq_sub
+#define bid64qd_add __bid64qd_add
+#define bid64qd_sub __bid64qd_sub
+#define bid64qq_add __bid64qq_add
+#define bid64qq_sub __bid64qq_sub
+#define bid128dd_mul __bid128dd_mul
+#define bid128dq_mul __bid128dq_mul
+#define bid128_mul __bid128_mul
+#define bid128qd_mul __bid128qd_mul
+#define bid64dq_mul __bid64dq_mul
+#define bid64qd_mul __bid64qd_mul
+#define bid64qq_mul __bid64qq_mul
+#define bid128dd_div __bid128dd_div
+#define bid128_div __bid128_div
+#define bid128dq_div __bid128dq_div
+#define bid128qd_div __bid128qd_div
+#define bid128d_sqrt __bid128d_sqrt
+#define bid128_sqrt __bid128_sqrt
+#define bid128ddd_fma __bid128ddd_fma
+#define bid128ddq_fma __bid128ddq_fma
+#define bid128dqd_fma __bid128dqd_fma
+#define bid128dqq_fma __bid128dqq_fma
+#define bid128_fma __bid128_fma
+#define bid128qdd_fma __bid128qdd_fma
+#define bid128qdq_fma __bid128qdq_fma
+#define bid128qqd_fma __bid128qqd_fma
+#define bid64ddq_fma __bid64ddq_fma
+#define bid64dqd_fma __bid64dqd_fma
+#define bid64dqq_fma __bid64dqq_fma
+#define bid64qdd_fma __bid64qdd_fma
+#define bid64qdq_fma __bid64qdq_fma
+#define bid64qqd_fma __bid64qqd_fma
+#define bid64qqq_fma __bid64qqq_fma
+#define bid128_round_integral_exact __bid128_round_integral_exact
+#define bid128_round_integral_nearest_away __bid128_round_integral_nearest_away
+#define bid128_round_integral_nearest_even __bid128_round_integral_nearest_even
+#define bid128_round_integral_negative __bid128_round_integral_negative
+#define bid128_round_integral_positive __bid128_round_integral_positive
+#define bid128_round_integral_zero __bid128_round_integral_zero
+#define bid64_round_integral_exact __bid64_round_integral_exact
+#define bid64_round_integral_nearest_away __bid64_round_integral_nearest_away
+#define bid64_round_integral_nearest_even __bid64_round_integral_nearest_even
+#define bid64_round_integral_negative __bid64_round_integral_negative
+#define bid64_round_integral_positive __bid64_round_integral_positive
+#define bid64_round_integral_zero __bid64_round_integral_zero
+#define bid128_quantize __bid128_quantize
+#define bid128_scalb __bid128_scalb
+#define bid64_maxnum __bid64_maxnum
+#define bid64_maxnum_mag __bid64_maxnum_mag
+#define bid64_minnum __bid64_minnum
+#define bid64_minnum_mag __bid64_minnum_mag
+#define bid128_maxnum __bid128_maxnum
+#define bid128_maxnum_mag __bid128_maxnum_mag
+#define bid128_minnum __bid128_minnum
+#define bid128_minnum_mag __bid128_minnum_mag
+#define bid128_rem __bid128_rem
+#define bid128_logb __bid128_logb
+#define getDecimalRoundingDirection __bid_getDecimalRoundingDirection
+#define is754 __bid_is754
+#define is754R __bid_is754R
+#define signalException __bid_signalException
+#define lowerFlags __bid_lowerFlags
+#define restoreFlags __bid_restoreFlags
+#define saveFlags __bid_saveFlags
+#define setDecimalRoundingDirection __bid_setDecimalRoundingDirection
+#define testFlags __bid_testFlags
+#define testSavedFlags __bid_testSavedFlags
+#define bid32_to_bid64 __bid32_to_bid64
+#define bid64_to_bid32 __bid64_to_bid32
+#define bid128_to_string __bid128_to_string
+#define mod10_18_tbl __bid_mod10_18_tbl
+#define bid128_to_bid32 __bid128_to_bid32
+#define bid32_to_bid128 __bid32_to_bid128
+#define bid128_to_bid64 __bid128_to_bid64
+#define bid64_to_bid128 __bid64_to_bid128
+#define bid128_from_string __bid128_from_string
+#define bid128_from_int32 __bid128_from_int32
+#define bid128_from_int64 __bid128_from_int64
+#define bid128_from_uint32 __bid128_from_uint32
+#define bid128_from_uint64 __bid128_from_uint64
+#define bid64_from_int32 __bid64_from_int32
+#define bid64_from_int64 __bid64_from_int64
+#define bid64_from_uint32 __bid64_from_uint32
+#define bid64_from_uint64 __bid64_from_uint64
+#define bid64_abs __bid64_abs
+#define bid64_class __bid64_class
+#define bid64_copy __bid64_copy
+#define bid64_copySign __bid64_copySign
+#define bid64_isCanonical __bid64_isCanonical
+#define bid64_isFinite __bid64_isFinite
+#define bid64_isInf __bid64_isInf
+#define bid64_isNaN __bid64_isNaN
+#define bid64_isNormal __bid64_isNormal
+#define bid64_isSignaling __bid64_isSignaling
+#define bid64_isSigned __bid64_isSigned
+#define bid64_isSubnormal __bid64_isSubnormal
+#define bid64_isZero __bid64_isZero
+#define bid64_negate __bid64_negate
+#define bid64_radix __bid64_radix
+#define bid64_sameQuantum __bid64_sameQuantum
+#define bid64_totalOrder __bid64_totalOrder
+#define bid64_totalOrderMag __bid64_totalOrderMag
+#define bid128_abs __bid128_abs
+#define bid128_class __bid128_class
+#define bid128_copy __bid128_copy
+#define bid128_copySign __bid128_copySign
+#define bid128_isCanonical __bid128_isCanonical
+#define bid128_isFinite __bid128_isFinite
+#define bid128_isInf __bid128_isInf
+#define bid128_isNaN __bid128_isNaN
+#define bid128_isNormal __bid128_isNormal
+#define bid128_isSignaling __bid128_isSignaling
+#define bid128_isSigned __bid128_isSigned
+#define bid128_isSubnormal __bid128_isSubnormal
+#define bid128_isZero __bid128_isZero
+#define bid128_negate __bid128_negate
+#define bid128_radix __bid128_radix
+#define bid128_sameQuantum __bid128_sameQuantum
+#define bid128_totalOrder __bid128_totalOrder
+#define bid128_totalOrderMag __bid128_totalOrderMag
+#define bid64_quiet_equal __bid64_quiet_equal
+#define bid64_quiet_greater __bid64_quiet_greater
+#define bid64_quiet_greater_equal __bid64_quiet_greater_equal
+#define bid64_quiet_greater_unordered __bid64_quiet_greater_unordered
+#define bid64_quiet_less __bid64_quiet_less
+#define bid64_quiet_less_equal __bid64_quiet_less_equal
+#define bid64_quiet_less_unordered __bid64_quiet_less_unordered
+#define bid64_quiet_not_equal __bid64_quiet_not_equal
+#define bid64_quiet_not_greater __bid64_quiet_not_greater
+#define bid64_quiet_not_less __bid64_quiet_not_less
+#define bid64_quiet_ordered __bid64_quiet_ordered
+#define bid64_quiet_unordered __bid64_quiet_unordered
+#define bid64_signaling_greater __bid64_signaling_greater
+#define bid64_signaling_greater_equal __bid64_signaling_greater_equal
+#define bid64_signaling_greater_unordered __bid64_signaling_greater_unordered
+#define bid64_signaling_less __bid64_signaling_less
+#define bid64_signaling_less_equal __bid64_signaling_less_equal
+#define bid64_signaling_less_unordered __bid64_signaling_less_unordered
+#define bid64_signaling_not_greater __bid64_signaling_not_greater
+#define bid64_signaling_not_less __bid64_signaling_not_less
+#define bid128_quiet_equal __bid128_quiet_equal
+#define bid128_quiet_greater __bid128_quiet_greater
+#define bid128_quiet_greater_equal __bid128_quiet_greater_equal
+#define bid128_quiet_greater_unordered __bid128_quiet_greater_unordered
+#define bid128_quiet_less __bid128_quiet_less
+#define bid128_quiet_less_equal __bid128_quiet_less_equal
+#define bid128_quiet_less_unordered __bid128_quiet_less_unordered
+#define bid128_quiet_not_equal __bid128_quiet_not_equal
+#define bid128_quiet_not_greater __bid128_quiet_not_greater
+#define bid128_quiet_not_less __bid128_quiet_not_less
+#define bid128_quiet_ordered __bid128_quiet_ordered
+#define bid128_quiet_unordered __bid128_quiet_unordered
+#define bid128_signaling_greater __bid128_signaling_greater
+#define bid128_signaling_greater_equal __bid128_signaling_greater_equal
+#define bid128_signaling_greater_unordered __bid128_signaling_greater_unordered
+#define bid128_signaling_less __bid128_signaling_less
+#define bid128_signaling_less_equal __bid128_signaling_less_equal
+#define bid128_signaling_less_unordered __bid128_signaling_less_unordered
+#define bid128_signaling_not_greater __bid128_signaling_not_greater
+#define bid128_signaling_not_less __bid128_signaling_not_less
+#define bid64_to_int32_ceil __bid64_to_int32_ceil
+#define bid64_to_int32_floor __bid64_to_int32_floor
+#define bid64_to_int32_int __bid64_to_int32_int
+#define bid64_to_int32_rnint __bid64_to_int32_rnint
+#define bid64_to_int32_rninta __bid64_to_int32_rninta
+#define bid64_to_int32_xceil __bid64_to_int32_xceil
+#define bid64_to_int32_xfloor __bid64_to_int32_xfloor
+#define bid64_to_int32_xint __bid64_to_int32_xint
+#define bid64_to_int32_xrnint __bid64_to_int32_xrnint
+#define bid64_to_int32_xrninta __bid64_to_int32_xrninta
+#define bid64_to_uint32_ceil __bid64_to_uint32_ceil
+#define bid64_to_uint32_floor __bid64_to_uint32_floor
+#define bid64_to_uint32_int __bid64_to_uint32_int
+#define bid64_to_uint32_rnint __bid64_to_uint32_rnint
+#define bid64_to_uint32_rninta __bid64_to_uint32_rninta
+#define bid64_to_uint32_xceil __bid64_to_uint32_xceil
+#define bid64_to_uint32_xfloor __bid64_to_uint32_xfloor
+#define bid64_to_uint32_xint __bid64_to_uint32_xint
+#define bid64_to_uint32_xrnint __bid64_to_uint32_xrnint
+#define bid64_to_uint32_xrninta __bid64_to_uint32_xrninta
+#define bid64_to_int64_ceil __bid64_to_int64_ceil
+#define bid64_to_int64_floor __bid64_to_int64_floor
+#define bid64_to_int64_int __bid64_to_int64_int
+#define bid64_to_int64_rnint __bid64_to_int64_rnint
+#define bid64_to_int64_rninta __bid64_to_int64_rninta
+#define bid64_to_int64_xceil __bid64_to_int64_xceil
+#define bid64_to_int64_xfloor __bid64_to_int64_xfloor
+#define bid64_to_int64_xint __bid64_to_int64_xint
+#define bid64_to_int64_xrnint __bid64_to_int64_xrnint
+#define bid64_to_int64_xrninta __bid64_to_int64_xrninta
+#define bid64_to_uint64_ceil __bid64_to_uint64_ceil
+#define bid64_to_uint64_floor __bid64_to_uint64_floor
+#define bid64_to_uint64_int __bid64_to_uint64_int
+#define bid64_to_uint64_rnint __bid64_to_uint64_rnint
+#define bid64_to_uint64_rninta __bid64_to_uint64_rninta
+#define bid64_to_uint64_xceil __bid64_to_uint64_xceil
+#define bid64_to_uint64_xfloor __bid64_to_uint64_xfloor
+#define bid64_to_uint64_xint __bid64_to_uint64_xint
+#define bid64_to_uint64_xrnint __bid64_to_uint64_xrnint
+#define bid64_to_uint64_xrninta __bid64_to_uint64_xrninta
+#define bid128_to_int32_ceil __bid128_to_int32_ceil
+#define bid128_to_int32_floor __bid128_to_int32_floor
+#define bid128_to_int32_int __bid128_to_int32_int
+#define bid128_to_int32_rnint __bid128_to_int32_rnint
+#define bid128_to_int32_rninta __bid128_to_int32_rninta
+#define bid128_to_int32_xceil __bid128_to_int32_xceil
+#define bid128_to_int32_xfloor __bid128_to_int32_xfloor
+#define bid128_to_int32_xint __bid128_to_int32_xint
+#define bid128_to_int32_xrnint __bid128_to_int32_xrnint
+#define bid128_to_int32_xrninta __bid128_to_int32_xrninta
+#define bid128_to_uint32_ceil __bid128_to_uint32_ceil
+#define bid128_to_uint32_floor __bid128_to_uint32_floor
+#define bid128_to_uint32_int __bid128_to_uint32_int
+#define bid128_to_uint32_rnint __bid128_to_uint32_rnint
+#define bid128_to_uint32_rninta __bid128_to_uint32_rninta
+#define bid128_to_uint32_xceil __bid128_to_uint32_xceil
+#define bid128_to_uint32_xfloor __bid128_to_uint32_xfloor
+#define bid128_to_uint32_xint __bid128_to_uint32_xint
+#define bid128_to_uint32_xrnint __bid128_to_uint32_xrnint
+#define bid128_to_uint32_xrninta __bid128_to_uint32_xrninta
+#define bid128_to_int64_ceil __bid128_to_int64_ceil
+#define bid128_to_int64_floor __bid128_to_int64_floor
+#define bid128_to_int64_int __bid128_to_int64_int
+#define bid128_to_int64_rnint __bid128_to_int64_rnint
+#define bid128_to_int64_rninta __bid128_to_int64_rninta
+#define bid128_to_int64_xceil __bid128_to_int64_xceil
+#define bid128_to_int64_xfloor __bid128_to_int64_xfloor
+#define bid128_to_int64_xint __bid128_to_int64_xint
+#define bid128_to_int64_xrnint __bid128_to_int64_xrnint
+#define bid128_to_int64_xrninta __bid128_to_int64_xrninta
+#define bid128_to_uint64_ceil __bid128_to_uint64_ceil
+#define bid128_to_uint64_floor __bid128_to_uint64_floor
+#define bid128_to_uint64_int __bid128_to_uint64_int
+#define bid128_to_uint64_rnint __bid128_to_uint64_rnint
+#define bid128_to_uint64_rninta __bid128_to_uint64_rninta
+#define bid128_to_uint64_xceil __bid128_to_uint64_xceil
+#define bid128_to_uint64_xfloor __bid128_to_uint64_xfloor
+#define bid128_to_uint64_xint __bid128_to_uint64_xint
+#define bid128_to_uint64_xrnint __bid128_to_uint64_xrnint
+#define bid128_to_uint64_xrninta __bid128_to_uint64_xrninta
+#define bid128_to_binary128 __bid128_to_binary128
+#define bid128_to_binary32 __bid128_to_binary32
+#define bid128_to_binary64 __bid128_to_binary64
+#define bid128_to_binary80 __bid128_to_binary80
+#define bid32_to_binary128 __bid32_to_binary128
+#define bid32_to_binary32 __bid32_to_binary32
+#define bid32_to_binary64 __bid32_to_binary64
+#define bid32_to_binary80 __bid32_to_binary80
+#define bid64_to_binary128 __bid64_to_binary128
+#define bid64_to_binary32 __bid64_to_binary32
+#define bid64_to_binary64 __bid64_to_binary64
+#define bid64_to_binary80 __bid64_to_binary80
+#define binary128_to_bid128 __binary128_to_bid128
+#define binary128_to_bid32 __binary128_to_bid32
+#define binary128_to_bid64 __binary128_to_bid64
+#define binary32_to_bid128 __binary32_to_bid128
+#define binary32_to_bid32 __binary32_to_bid32
+#define binary32_to_bid64 __binary32_to_bid64
+#define binary64_to_bid128 __binary64_to_bid128
+#define binary64_to_bid32 __binary64_to_bid32
+#define binary64_to_bid64 __binary64_to_bid64
+#define binary80_to_bid128 __binary80_to_bid128
+#define binary80_to_bid32 __binary80_to_bid32
+#define binary80_to_bid64 __binary80_to_bid64
+#define bid64_to_uint16_ceil __bid64_to_uint16_ceil
+#define bid64_to_uint16_floor __bid64_to_uint16_floor
+#define bid64_to_uint16_int __bid64_to_uint16_int
+#define bid64_to_uint16_rnint __bid64_to_uint16_rnint
+#define bid64_to_uint16_rninta __bid64_to_uint16_rninta
+#define bid64_to_uint16_xceil __bid64_to_uint16_xceil
+#define bid64_to_uint16_xfloor __bid64_to_uint16_xfloor
+#define bid64_to_uint16_xint __bid64_to_uint16_xint
+#define bid64_to_uint16_xrnint __bid64_to_uint16_xrnint
+#define bid64_to_uint16_xrninta __bid64_to_uint16_xrninta
+#define bid64_to_int16_ceil __bid64_to_int16_ceil
+#define bid64_to_int16_floor __bid64_to_int16_floor
+#define bid64_to_int16_int __bid64_to_int16_int
+#define bid64_to_int16_rnint __bid64_to_int16_rnint
+#define bid64_to_int16_rninta __bid64_to_int16_rninta
+#define bid64_to_int16_xceil __bid64_to_int16_xceil
+#define bid64_to_int16_xfloor __bid64_to_int16_xfloor
+#define bid64_to_int16_xint __bid64_to_int16_xint
+#define bid64_to_int16_xrnint __bid64_to_int16_xrnint
+#define bid64_to_int16_xrninta __bid64_to_int16_xrninta
+#define bid128_to_uint16_ceil __bid128_to_uint16_ceil
+#define bid128_to_uint16_floor __bid128_to_uint16_floor
+#define bid128_to_uint16_int __bid128_to_uint16_int
+#define bid128_to_uint16_rnint __bid128_to_uint16_rnint
+#define bid128_to_uint16_rninta __bid128_to_uint16_rninta
+#define bid128_to_uint16_xceil __bid128_to_uint16_xceil
+#define bid128_to_uint16_xfloor __bid128_to_uint16_xfloor
+#define bid128_to_uint16_xint __bid128_to_uint16_xint
+#define bid128_to_uint16_xrnint __bid128_to_uint16_xrnint
+#define bid128_to_uint16_xrninta __bid128_to_uint16_xrninta
+#define bid128_to_int16_ceil __bid128_to_int16_ceil
+#define bid128_to_int16_floor __bid128_to_int16_floor
+#define bid128_to_int16_int __bid128_to_int16_int
+#define bid128_to_int16_rnint __bid128_to_int16_rnint
+#define bid128_to_int16_rninta __bid128_to_int16_rninta
+#define bid128_to_int16_xceil __bid128_to_int16_xceil
+#define bid128_to_int16_xfloor __bid128_to_int16_xfloor
+#define bid128_to_int16_xint __bid128_to_int16_xint
+#define bid128_to_int16_xrnint __bid128_to_int16_xrnint
+#define bid128_to_int16_xrninta __bid128_to_int16_xrninta
+#define bid64_to_uint8_ceil __bid64_to_uint8_ceil
+#define bid64_to_uint8_floor __bid64_to_uint8_floor
+#define bid64_to_uint8_int __bid64_to_uint8_int
+#define bid64_to_uint8_rnint __bid64_to_uint8_rnint
+#define bid64_to_uint8_rninta __bid64_to_uint8_rninta
+#define bid64_to_uint8_xceil __bid64_to_uint8_xceil
+#define bid64_to_uint8_xfloor __bid64_to_uint8_xfloor
+#define bid64_to_uint8_xint __bid64_to_uint8_xint
+#define bid64_to_uint8_xrnint __bid64_to_uint8_xrnint
+#define bid64_to_uint8_xrninta __bid64_to_uint8_xrninta
+#define bid64_to_int8_ceil __bid64_to_int8_ceil
+#define bid64_to_int8_floor __bid64_to_int8_floor
+#define bid64_to_int8_int __bid64_to_int8_int
+#define bid64_to_int8_rnint __bid64_to_int8_rnint
+#define bid64_to_int8_rninta __bid64_to_int8_rninta
+#define bid64_to_int8_xceil __bid64_to_int8_xceil
+#define bid64_to_int8_xfloor __bid64_to_int8_xfloor
+#define bid64_to_int8_xint __bid64_to_int8_xint
+#define bid64_to_int8_xrnint __bid64_to_int8_xrnint
+#define bid64_to_int8_xrninta __bid64_to_int8_xrninta
+#define bid128_to_uint8_ceil __bid128_to_uint8_ceil
+#define bid128_to_uint8_floor __bid128_to_uint8_floor
+#define bid128_to_uint8_int __bid128_to_uint8_int
+#define bid128_to_uint8_rnint __bid128_to_uint8_rnint
+#define bid128_to_uint8_rninta __bid128_to_uint8_rninta
+#define bid128_to_uint8_xceil __bid128_to_uint8_xceil
+#define bid128_to_uint8_xfloor __bid128_to_uint8_xfloor
+#define bid128_to_uint8_xint __bid128_to_uint8_xint
+#define bid128_to_uint8_xrnint __bid128_to_uint8_xrnint
+#define bid128_to_uint8_xrninta __bid128_to_uint8_xrninta
+#define bid128_to_int8_ceil __bid128_to_int8_ceil
+#define bid128_to_int8_floor __bid128_to_int8_floor
+#define bid128_to_int8_int __bid128_to_int8_int
+#define bid128_to_int8_rnint __bid128_to_int8_rnint
+#define bid128_to_int8_rninta __bid128_to_int8_rninta
+#define bid128_to_int8_xceil __bid128_to_int8_xceil
+#define bid128_to_int8_xfloor __bid128_to_int8_xfloor
+#define bid128_to_int8_xint __bid128_to_int8_xint
+#define bid128_to_int8_xrnint __bid128_to_int8_xrnint
+#define bid128_to_int8_xrninta __bid128_to_int8_xrninta
+
+#ifdef IN_LIBGCC2
+#if !defined ENABLE_DECIMAL_BID_FORMAT || !ENABLE_DECIMAL_BID_FORMAT
+#error BID not enabled in libbid
+#endif
+
+#ifndef BID_BIG_ENDIAN
+#define BID_BIG_ENDIAN __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__
+#endif
+
+#ifndef BID_THREAD
+#if defined (HAVE_CC_TLS) && defined (USE_TLS)
+#define BID_THREAD __thread
+#endif
+#endif
+
+#define _intptr_t_defined
+#define DECIMAL_CALL_BY_REFERENCE 0
+#define DECIMAL_GLOBAL_ROUNDING 1
+#define DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS 1
+#define DECIMAL_GLOBAL_EXCEPTION_FLAGS 1
+#define DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS 1
+#define BID_HAS_GCC_DECIMAL_INTRINSICS 1
+#endif /* IN_LIBGCC2 */
+
+// Configuration Options
+
+#define SET_STATUS_FLAGS
+
+#ifndef BID_THREAD
+#define BID_THREAD
+#endif
+
+#ifndef BID_HAS_GCC_DECIMAL_INTRINSICS
+#define BID_HAS_GCC_DECIMAL_INTRINSICS 0
+#endif
+
+#if !defined(WINDOWS) || defined(__INTEL_COMPILER)
+// #define UNCHANGED_BINARY_STATUS_FLAGS
+#endif
+// #define HPUX_OS
+
+// If DECIMAL_CALL_BY_REFERENCE is defined then numerical arguments and results
+// are passed by reference otherwise they are passed by value (except that
+// a pointer is always passed to the status flags)
+
+#ifndef DECIMAL_CALL_BY_REFERENCE
+#define DECIMAL_CALL_BY_REFERENCE 0
+#endif
+
+// If DECIMAL_GLOBAL_ROUNDING is defined then the rounding mode is a global
+// variable _IDEC_glbround, otherwise it is passed as a parameter when needed
+
+#ifndef DECIMAL_GLOBAL_ROUNDING
+#define DECIMAL_GLOBAL_ROUNDING 0
+#endif
+
+#ifndef DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS
+#define DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS 0
+#endif
+
+// If DECIMAL_GLOBAL_EXCEPTION_FLAGS is defined then the exception status flags
+// are represented by a global variable _IDEC_glbflags, otherwise they are
+// passed as a parameter when needed
+
+#ifndef DECIMAL_GLOBAL_EXCEPTION_FLAGS
+#define DECIMAL_GLOBAL_EXCEPTION_FLAGS 0
+#endif
+
+#ifndef DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS
+#define DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS 0
+#endif
+
+// If DECIMAL_ALTERNATE_EXCEPTION_HANDLING is defined then the exception masks
+// are examined and exception handling information is provided to the caller
+// if alternate exception handling is necessary
+
+#ifndef DECIMAL_ALTERNATE_EXCEPTION_HANDLING
+#define DECIMAL_ALTERNATE_EXCEPTION_HANDLING 0
+#endif
+
+typedef unsigned int _IDEC_round;
+typedef unsigned int _IDEC_flags; // could be a struct with diagnostic info
+
+#if DECIMAL_ALTERNATE_EXCEPTION_HANDLING
+ // If DECIMAL_GLOBAL_EXCEPTION_MASKS is defined then the exception mask bits
+ // are represented by a global variable _IDEC_exceptionmasks, otherwise they
+ // are passed as a parameter when needed; DECIMAL_GLOBAL_EXCEPTION_MASKS is
+ // ignored
+ // if DECIMAL_ALTERNATE_EXCEPTION_HANDLING is not defined
+ // **************************************************************************
+#define DECIMAL_GLOBAL_EXCEPTION_MASKS 0
+ // **************************************************************************
+
+ // If DECIMAL_GLOBAL_EXCEPTION_INFO is defined then the alternate exception
+ // handling information is represented by a global data structure
+ // _IDEC_glbexcepthandling, otherwise it is passed by reference as a
+ // parameter when needed; DECIMAL_GLOBAL_EXCEPTION_INFO is ignored
+ // if DECIMAL_ALTERNATE_EXCEPTION_HANDLING is not defined
+ // **************************************************************************
+#define DECIMAL_GLOBAL_EXCEPTION_INFO 0
+ // **************************************************************************
+#endif
+
+// Notes: 1) rnd_mode from _RND_MODE_ARG is used by the caller of a function
+// from this library, and can be any name
+// 2) rnd_mode and prnd_mode from _RND_MODE_PARAM are fixed names
+// and *must* be used in the library functions
+// 3) _IDEC_glbround is the fixed name for the global variable holding
+// the rounding mode
+
+#if !DECIMAL_GLOBAL_ROUNDING
+#if DECIMAL_CALL_BY_REFERENCE
+#define _RND_MODE_ARG , &rnd_mode
+#define _RND_MODE_PARAM , _IDEC_round *prnd_mode
+#define _RND_MODE_ARG_ALONE &rnd_mode
+#define _RND_MODE_PARAM_ALONE _IDEC_round *prnd_mode
+#else
+#define _RND_MODE_ARG , rnd_mode
+#define _RND_MODE_PARAM , _IDEC_round rnd_mode
+#define _RND_MODE_ARG_ALONE rnd_mode
+#define _RND_MODE_PARAM_ALONE _IDEC_round rnd_mode
+#endif
+#else
+#define _RND_MODE_ARG
+#define _RND_MODE_PARAM
+#define _RND_MODE_ARG_ALONE
+#define _RND_MODE_PARAM_ALONE
+#define rnd_mode _IDEC_glbround
+#endif
+
+// Notes: 1) pfpsf from _EXC_FLAGS_ARG is used by the caller of a function
+// from this library, and can be any name
+// 2) pfpsf from _EXC_FLAGS_PARAM is a fixed name and *must* be used
+// in the library functions
+// 3) _IDEC_glbflags is the fixed name for the global variable holding
+// the floating-point status flags
+#if !DECIMAL_GLOBAL_EXCEPTION_FLAGS
+#define _EXC_FLAGS_ARG , pfpsf
+#define _EXC_FLAGS_PARAM , _IDEC_flags *pfpsf
+#else
+#define _EXC_FLAGS_ARG
+#define _EXC_FLAGS_PARAM
+#define pfpsf &_IDEC_glbflags
+#endif
+
+#if DECIMAL_GLOBAL_ROUNDING
+extern BID_THREAD _IDEC_round _IDEC_glbround;
+#endif
+
+#if DECIMAL_GLOBAL_EXCEPTION_FLAGS
+extern BID_THREAD _IDEC_flags _IDEC_glbflags;
+#endif
+
+#if DECIMAL_ALTERNATE_EXCEPTION_HANDLING
+#if DECIMAL_GLOBAL_EXCEPTION_MASKS
+extern BID_THREAD _IDEC_exceptionmasks _IDEC_glbexceptionmasks;
+#endif
+#if DECIMAL_GLOBAL_EXCEPTION_INFO
+extern BID_THREAD _IDEC_excepthandling _IDEC_glbexcepthandling;
+#endif
+#endif
+
+#if DECIMAL_ALTERNATE_EXCEPTION_HANDLING
+
+ // Notes: 1) exc_mask from _EXC_MASKS_ARG is used by the caller of a function
+ // from this library, and can be any name
+ // 2) exc_mask and pexc_mask from _EXC_MASKS_PARAM are fixed names
+ // and *must* be used in the library functions
+ // 3) _IDEC_glbexceptionmasks is the fixed name for the global
+ // variable holding the floating-point exception masks
+#if !DECIMAL_GLOBAL_EXCEPTION_MASKS
+#if DECIMAL_CALL_BY_REFERENCE
+#define _EXC_MASKS_ARG , &exc_mask
+#define _EXC_MASKS_PARAM , _IDEC_exceptionmasks *pexc_mask
+#else
+#define _EXC_MASKS_ARG , exc_mask
+#define _EXC_MASKS_PARAM , _IDEC_exceptionmasks exc_mask
+#endif
+#else
+#define _EXC_MASKS_ARG
+#define _EXC_MASKS_PARAM
+#define exc_mask _IDEC_glbexceptionmasks
+#endif
+
+ // Notes: 1) pexc_info from _EXC_INFO_ARG is used by the caller of a function
+ // from this library, and can be any name
+ // 2) pexc_info from _EXC_INFO_PARAM is a fixed name and *must* be
+ // used in the library functions
+ // 3) _IDEC_glbexcepthandling is the fixed name for the global
+ // variable holding the floating-point exception information
+#if !DECIMAL_GLOBAL_EXCEPTION_INFO
+#define _EXC_INFO_ARG , pexc_info
+#define _EXC_INFO_PARAM , _IDEC_excepthandling *pexc_info
+#else
+#define _EXC_INFO_ARG
+#define _EXC_INFO_PARAM
+#define pexc_info &_IDEC_glbexcepthandling
+#endif
+#else
+#define _EXC_MASKS_ARG
+#define _EXC_MASKS_PARAM
+#define _EXC_INFO_ARG
+#define _EXC_INFO_PARAM
+#endif
+
+
+#ifndef BID_BIG_ENDIAN
+#define BID_BIG_ENDIAN 0
+#endif
+
+#if BID_BIG_ENDIAN
+#define BID_SWAP128(x) { \
+ UINT64 sw; \
+ sw = (x).w[1]; \
+ (x).w[1] = (x).w[0]; \
+ (x).w[0] = sw; \
+ }
+#else
+#define BID_SWAP128(x)
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+#define BID_RETURN_VAL(x) { *pres = (x); return; }
+#if BID_BIG_ENDIAN && defined BID_128RES
+#define BID_RETURN(x) { BID_SWAP128(x); *pres = (x); return; }
+#else
+#define BID_RETURN(x) { *pres = (x); return; }
+#endif
+#else
+#define BID_RETURN_VAL(x) return(x);
+#if BID_BIG_ENDIAN && defined BID_128RES
+#define BID_RETURN(x) { BID_SWAP128(x); return(x); }
+#else
+#define BID_RETURN(x) return(x);
+#endif
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+#define BIDECIMAL_CALL1(_FUNC, _RES, _OP1) \
+ _FUNC(&(_RES), &(_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND(_FUNC, _RES, _OP1) \
+ _FUNC(&(_RES), &(_OP1) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL2(_FUNC, _RES, _OP1, _OP2) \
+ _FUNC(&(_RES), &(_OP1), &(_OP2) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL2_NORND(_FUNC, _RES, _OP1, _OP2) \
+ _FUNC(&(_RES), &(_OP1), &(_OP2) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND_RESREF(_FUNC, _RES, _OP1) \
+ _FUNC((_RES), &(_OP1) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_RESARG(_FUNC, _RES, _OP1) \
+ _FUNC(&(_RES), (_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_RESREF(_FUNC, _RES, _OP1) \
+ _FUNC((_RES), &(_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND_NOSTAT(_FUNC, _RES, _OP1) \
+ _FUNC(&(_RES), &(_OP1) _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL2_NORND_NOSTAT(_FUNC, _RES, _OP1, _OP2) \
+ _FUNC(&(_RES), &(_OP1), &(_OP2) _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL3(_FUNC, _RES, _OP1, _OP2, _OP3) \
+ _FUNC(&(_RES), &(_OP1), &(_OP2), &(_OP3) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _FUNC(&(_RES), &(_OP1) _EXC_FLAGS_ARG )
+#define BIDECIMAL_CALL1_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _FUNC(&(_RES), &(_OP1) )
+#define BIDECIMAL_CALL2_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1, _OP2) \
+ _FUNC(&(_RES), &(_OP1), &(_OP2) )
+#define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1) \
+ _FUNC(&(_OP1) _EXC_FLAGS_ARG )
+#define BIDECIMAL_CALL2_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1, _OP2) \
+ _FUNC(&(_OP1), &(_OP2) _EXC_FLAGS_ARG )
+#define BIDECIMAL_CALLV_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES) \
+ _FUNC(&(_RES) _RND_MODE_ARG)
+#define BIDECIMAL_CALL1_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _FUNC(&(_OP1) _RND_MODE_ARG)
+#else
+#define BIDECIMAL_CALL1(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL2(_FUNC, _RES, _OP1, _OP2) \
+ _RES = _FUNC((_OP1), (_OP2) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL2_NORND(_FUNC, _RES, _OP1, _OP2) \
+ _RES = _FUNC((_OP1), (_OP2) _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND_RESREF(_FUNC, _RES, _OP1) \
+ _FUNC((_RES), _OP1 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_RESARG(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_RESREF(_FUNC, _RES, _OP1) \
+ _FUNC((_RES), _OP1 _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND_NOSTAT(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL2_NORND_NOSTAT(_FUNC, _RES, _OP1, _OP2) \
+ _RES = _FUNC((_OP1), (_OP2) _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL3(_FUNC, _RES, _OP1, _OP2, _OP3) \
+ _RES = _FUNC((_OP1), (_OP2), (_OP3) _RND_MODE_ARG _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG)
+#define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) _EXC_FLAGS_ARG)
+#define BIDECIMAL_CALL1_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) )
+#define BIDECIMAL_CALL2_NORND_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1, _OP2) \
+ _RES = _FUNC((_OP1), (_OP2) )
+#define BIDECIMAL_CALL1_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1) \
+ _FUNC((_OP1) _EXC_FLAGS_ARG)
+#define BIDECIMAL_CALL2_NORND_NOMASK_NOINFO_RESVOID(_FUNC, _OP1, _OP2) \
+ _FUNC((_OP1), (_OP2) _EXC_FLAGS_ARG)
+#define BIDECIMAL_CALLV_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES) \
+ _RES = _FUNC(_RND_MODE_ARG_ALONE)
+#if !DECIMAL_GLOBAL_ROUNDING
+#define BIDECIMAL_CALL1_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _RES = _FUNC((_OP1) _RND_MODE_ARG)
+#else
+#define BIDECIMAL_CALL1_NOFLAGS_NOMASK_NOINFO(_FUNC, _RES, _OP1) \
+ _FUNC((_OP1) _RND_MODE_ARG)
+#endif
+#endif
+
+#if BID_BIG_ENDIAN
+#define HIGH_128W 0
+#define LOW_128W 1
+#else
+#define HIGH_128W 1
+#define LOW_128W 0
+#endif
+
+#if BID_BIG_ENDIAN
+#define COPY_ARG_REF(arg_name) \
+ UINT128 arg_name={ pbid_##arg_name->w[1], pbid_##arg_name->w[0]};
+#define COPY_ARG_VAL(arg_name) \
+ UINT128 arg_name={ bid_##arg_name.w[1], bid_##arg_name.w[0]};
+#else
+#define COPY_ARG_REF(arg_name) \
+ UINT128 arg_name=*pbid_##arg_name;
+#define COPY_ARG_VAL(arg_name) \
+ UINT128 arg_name= bid_##arg_name;
+#endif
+
+#define COPY_ARG_TYPE_REF(type, arg_name) \
+ type arg_name=*pbid_##arg_name;
+#define COPY_ARG_TYPE_VAL(type, arg_name) \
+ type arg_name= bid_##arg_name;
+
+#if !DECIMAL_GLOBAL_ROUNDING
+#define SET_RND_MODE() \
+ _IDEC_round rnd_mode = *prnd_mode;
+#else
+#define SET_RND_MODE()
+#endif
+
+#define PROLOG_REF(arg_name) \
+ COPY_ARG_REF(arg_name)
+
+#define PROLOG_VAL(arg_name) \
+ COPY_ARG_VAL(arg_name)
+
+#define PROLOG_TYPE_REF(type, arg_name) \
+ COPY_ARG_TYPE_REF(type, arg_name)
+
+#define PROLOG_TYPE_VAL(type, arg_name) \
+ COPY_ARG_TYPE_VAL(type, arg_name)
+
+#define OTHER_PROLOG_REF()
+#define OTHER_PROLOG_VAL()
+
+#if DECIMAL_CALL_BY_REFERENCE
+#define BID128_FUNCTION_ARG1(fn_name, arg_name)\
+ void fn_name (UINT128 * pres, \
+ UINT128 * \
+ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARG1_NORND(fn_name, arg_name)\
+ void fn_name (UINT128 * pres, \
+ UINT128 * \
+ pbid_##arg_name _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name) \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name)\
+ void fn_name (restype * pres, \
+ UINT128 * \
+ pbid_##arg_name _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name) \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARG2(fn_name, arg_name1, arg_name2)\
+ void fn_name (UINT128 * pres, \
+ UINT128 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name1) \
+ PROLOG_REF(arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name1, arg_name2)\
+ void fn_name (restype * pres, \
+ UINT128 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name1) \
+ PROLOG_REF(arg_name2) \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARG128_ARGTYPE2(fn_name, arg_name1, type2, arg_name2)\
+ void fn_name (UINT128 * pres, \
+ UINT128 *pbid_##arg_name1, type2 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name1) \
+ PROLOG_TYPE_REF(type2, arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2(type0, fn_name, type1, arg_name1, type2, arg_name2)\
+ void fn_name (type0 *pres, \
+ type1 *pbid_##arg_name1, type2 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_TYPE_REF(type1, arg_name1) \
+ PROLOG_TYPE_REF(type2, arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARGTYPE1_ARG128(fn_name, type1, arg_name1, arg_name2)\
+ void fn_name (UINT128 * pres, \
+ type1 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_TYPE_REF(type1, arg_name1) \
+ PROLOG_REF(arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARG128_ARGTYPE2(type0, fn_name, arg_name1, type2, arg_name2)\
+ void fn_name (type0 *pres, \
+ UINT128 *pbid_##arg_name1, type2 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name1) \
+ PROLOG_TYPE_REF(type2, arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARGTYPE1_ARG128(type0, fn_name, type1, arg_name1, arg_name2)\
+ void fn_name (type0 *pres, \
+ type1 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_TYPE_REF(type1, arg_name1) \
+ PROLOG_REF(arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARG128_ARG128(type0, fn_name, arg_name1, arg_name2)\
+ void fn_name (type0 * pres, \
+ UINT128 *pbid_##arg_name1, UINT128 *pbid_##arg_name2 \
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name1) \
+ PROLOG_REF(arg_name2) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARG1(type0, fn_name, arg_name)\
+ void fn_name (type0 * pres, \
+ UINT128 * \
+ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_REF(arg_name) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define BID128_FUNCTION_ARGTYPE1(fn_name, type1, arg_name)\
+ void fn_name (UINT128 * pres, \
+ type1 * \
+ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_TYPE_REF(type1, arg_name) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARGTYPE1(type0, fn_name, type1, arg_name)\
+ void fn_name (type0 * pres, \
+ type1 * \
+ pbid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_TYPE_REF(type1, arg_name) \
+ SET_RND_MODE() \
+ OTHER_PROLOG_REF()
+
+#define TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\
+ void fn_name (type0 * pres, \
+ type1 * \
+ pbid_##arg_name _EXC_FLAGS_PARAM _EXC_MASKS_PARAM \
+ _EXC_INFO_PARAM) {\
+ PROLOG_TYPE_REF(type1, arg_name) \
+ OTHER_PROLOG_REF()
+
+//////////////////////////////////////////
+/////////////////////////////////////////
+////////////////////////////////////////
+
+#else
+
+//////////////////////////////////////////
+/////////////////////////////////////////
+////////////////////////////////////////
+
+#define BID128_FUNCTION_ARG1(fn_name, arg_name)\
+ UINT128 \
+ fn_name (UINT128 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARG1_NORND(fn_name, arg_name)\
+ UINT128 \
+ fn_name (UINT128 bid_##arg_name _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARG1_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name)\
+ restype \
+ fn_name (UINT128 bid_##arg_name _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARG2(fn_name, arg_name1, arg_name2)\
+ UINT128 \
+ fn_name (UINT128 bid_##arg_name1, \
+ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name1) \
+ PROLOG_VAL(arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE(restype, fn_name, arg_name1, arg_name2)\
+ restype \
+ fn_name (UINT128 bid_##arg_name1, \
+ UINT128 bid_##arg_name2 _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name1) \
+ PROLOG_VAL(arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARG128_ARGTYPE2(fn_name, arg_name1, type2, arg_name2)\
+ UINT128 \
+ fn_name (UINT128 bid_##arg_name1, \
+ type2 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name1) \
+ PROLOG_TYPE_VAL(type2, arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2(type0, fn_name, type1, arg_name1, type2, arg_name2)\
+ type0 \
+ fn_name (type1 bid_##arg_name1, \
+ type2 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_TYPE_VAL(type1, arg_name1) \
+ PROLOG_TYPE_VAL(type2, arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARGTYPE1_ARG128(fn_name, type1, arg_name1, arg_name2)\
+ UINT128 \
+ fn_name (type1 bid_##arg_name1, \
+ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_TYPE_VAL(type1, arg_name1) \
+ PROLOG_VAL(arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARG128_ARGTYPE2(type0, fn_name, arg_name1, type2, arg_name2)\
+ type0 \
+ fn_name (UINT128 bid_##arg_name1, \
+ type2 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name1) \
+ PROLOG_TYPE_VAL(type2, arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARGTYPE1_ARG128(type0, fn_name, type1, arg_name1, arg_name2)\
+ type0 \
+ fn_name (type1 bid_##arg_name1, \
+ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_TYPE_VAL(type1, arg_name1) \
+ PROLOG_VAL(arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARG128_ARG128(type0, fn_name, arg_name1, arg_name2)\
+ type0 \
+ fn_name (UINT128 bid_##arg_name1, \
+ UINT128 bid_##arg_name2 _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name1) \
+ PROLOG_VAL(arg_name2) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARG1(type0, fn_name, arg_name)\
+ type0 \
+ fn_name (UINT128 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_VAL(arg_name) \
+ OTHER_PROLOG_VAL()
+
+#define BID128_FUNCTION_ARGTYPE1(fn_name, type1, arg_name)\
+ UINT128 \
+ fn_name (type1 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_TYPE_VAL(type1, arg_name) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARGTYPE1(type0, fn_name, type1, arg_name)\
+ type0 \
+ fn_name (type1 bid_##arg_name _RND_MODE_PARAM _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_TYPE_VAL(type1, arg_name) \
+ OTHER_PROLOG_VAL()
+
+#define TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\
+ type0 \
+ fn_name (type1 bid_##arg_name _EXC_FLAGS_PARAM \
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) { \
+ PROLOG_TYPE_VAL(type1, arg_name) \
+ OTHER_PROLOG_VAL()
+
+#endif
+
+
+
+#define BID_TO_SMALL_UINT_CVT_FUNCTION(type0, fn_name, type1, arg_name, cvt_fn_name, type2, size_mask, invalid_res)\
+ TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\
+ type2 res; \
+ _IDEC_flags saved_fpsc=*pfpsf; \
+ BIDECIMAL_CALL1_NORND(cvt_fn_name, res, arg_name); \
+ if(res & size_mask) { \
+ *pfpsf = saved_fpsc | INVALID_EXCEPTION; \
+ res = invalid_res; } \
+ BID_RETURN_VAL((type0)res); \
+ }
+
+#define BID_TO_SMALL_INT_CVT_FUNCTION(type0, fn_name, type1, arg_name, cvt_fn_name, type2, size_mask, invalid_res)\
+ TYPE0_FUNCTION_ARGTYPE1_NORND(type0, fn_name, type1, arg_name)\
+ type2 res, sgn_mask; \
+ _IDEC_flags saved_fpsc=*pfpsf; \
+ BIDECIMAL_CALL1_NORND(cvt_fn_name, res, arg_name); \
+ sgn_mask = res & size_mask; \
+ if(sgn_mask && (sgn_mask != (type2)size_mask)) { \
+ *pfpsf = saved_fpsc | INVALID_EXCEPTION; \
+ res = invalid_res; } \
+ BID_RETURN_VAL((type0)res); \
+ }
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/bid_convert_data.c b/gcc-4.9/libgcc/config/libbid/bid_convert_data.c
new file mode 100644
index 000000000..746c342b1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_convert_data.c
@@ -0,0 +1,2108 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+// convert_table[j][k][i] = digit i (base 10^8) of k*2^(26+7*j)
+const UINT32 convert_table[5][128][2] = {
+ {{0, 0}
+ , {67108864, 0}
+ , {34217728, 1}
+ , {1326592, 2}
+ , {68435456, 2}
+ ,
+ {35544320, 3}
+ , {2653184, 4}
+ , {69762048, 4}
+ , {36870912, 5}
+ , {3979776, 6}
+ ,
+ {71088640, 6}
+ , {38197504, 7}
+ , {5306368, 8}
+ , {72415232, 8}
+ , {39524096, 9}
+ ,
+ {6632960, 10}
+ , {73741824, 10}
+ , {40850688, 11}
+ , {7959552, 12}
+ , {75068416, 12}
+ ,
+ {42177280, 13}
+ , {9286144, 14}
+ , {76395008, 14}
+ , {43503872, 15}
+ , {10612736, 16}
+ ,
+ {77721600, 16}
+ , {44830464, 17}
+ , {11939328, 18}
+ , {79048192, 18}
+ , {46157056, 19}
+ ,
+ {13265920, 20}
+ , {80374784, 20}
+ , {47483648, 21}
+ , {14592512, 22}
+ , {81701376, 22}
+ ,
+ {48810240, 23}
+ , {15919104, 24}
+ , {83027968, 24}
+ , {50136832, 25}
+ , {17245696, 26}
+ ,
+ {84354560, 26}
+ , {51463424, 27}
+ , {18572288, 28}
+ , {85681152, 28}
+ , {52790016, 29}
+ ,
+ {19898880, 30}
+ , {87007744, 30}
+ , {54116608, 31}
+ , {21225472, 32}
+ , {88334336, 32}
+ ,
+ {55443200, 33}
+ , {22552064, 34}
+ , {89660928, 34}
+ , {56769792, 35}
+ , {23878656, 36}
+ ,
+ {90987520, 36}
+ , {58096384, 37}
+ , {25205248, 38}
+ , {92314112, 38}
+ , {59422976, 39}
+ ,
+ {26531840, 40}
+ , {93640704, 40}
+ , {60749568, 41}
+ , {27858432, 42}
+ , {94967296, 42}
+ ,
+ {62076160, 43}
+ , {29185024, 44}
+ , {96293888, 44}
+ , {63402752, 45}
+ , {30511616, 46}
+ ,
+ {97620480, 46}
+ , {64729344, 47}
+ , {31838208, 48}
+ , {98947072, 48}
+ , {66055936, 49}
+ ,
+ {33164800, 50}
+ , {273664, 51}
+ , {67382528, 51}
+ , {34491392, 52}
+ , {1600256, 53}
+ ,
+ {68709120, 53}
+ , {35817984, 54}
+ , {2926848, 55}
+ , {70035712, 55}
+ , {37144576, 56}
+ ,
+ {4253440, 57}
+ , {71362304, 57}
+ , {38471168, 58}
+ , {5580032, 59}
+ , {72688896, 59}
+ ,
+ {39797760, 60}
+ , {6906624, 61}
+ , {74015488, 61}
+ , {41124352, 62}
+ , {8233216, 63}
+ ,
+ {75342080, 63}
+ , {42450944, 64}
+ , {9559808, 65}
+ , {76668672, 65}
+ , {43777536, 66}
+ ,
+ {10886400, 67}
+ , {77995264, 67}
+ , {45104128, 68}
+ , {12212992, 69}
+ , {79321856, 69}
+ ,
+ {46430720, 70}
+ , {13539584, 71}
+ , {80648448, 71}
+ , {47757312, 72}
+ , {14866176, 73}
+ ,
+ {81975040, 73}
+ , {49083904, 74}
+ , {16192768, 75}
+ , {83301632, 75}
+ , {50410496, 76}
+ ,
+ {17519360, 77}
+ , {84628224, 77}
+ , {51737088, 78}
+ , {18845952, 79}
+ , {85954816, 79}
+ ,
+ {53063680, 80}
+ , {20172544, 81}
+ , {87281408, 81}
+ , {54390272, 82}
+ , {21499136, 83}
+ ,
+ {88608000, 83}
+ , {55716864, 84}
+ , {22825728, 85}
+ ,
+ }
+ ,
+
+ {{0, 0}
+ , {89934592, 85}
+ , {79869184, 171}
+ , {69803776, 257}
+ , {59738368, 343}
+ ,
+ {49672960, 429}
+ , {39607552, 515}
+ , {29542144, 601}
+ , {19476736, 687}
+ , {9411328, 773}
+ ,
+ {99345920, 858}
+ , {89280512, 944}
+ , {79215104, 1030}
+ , {69149696, 1116}
+ , {59084288, 1202}
+ ,
+ {49018880, 1288}
+ , {38953472, 1374}
+ , {28888064, 1460}
+ , {18822656, 1546}
+ , {8757248, 1632}
+ ,
+ {98691840, 1717}
+ , {88626432, 1803}
+ , {78561024, 1889}
+ , {68495616, 1975}
+ , {58430208, 2061}
+ ,
+ {48364800, 2147}
+ , {38299392, 2233}
+ , {28233984, 2319}
+ , {18168576, 2405}
+ , {8103168, 2491}
+ ,
+ {98037760, 2576}
+ , {87972352, 2662}
+ , {77906944, 2748}
+ , {67841536, 2834}
+ , {57776128, 2920}
+ ,
+ {47710720, 3006}
+ , {37645312, 3092}
+ , {27579904, 3178}
+ , {17514496, 3264}
+ , {7449088, 3350}
+ ,
+ {97383680, 3435}
+ , {87318272, 3521}
+ , {77252864, 3607}
+ , {67187456, 3693}
+ , {57122048, 3779}
+ ,
+ {47056640, 3865}
+ , {36991232, 3951}
+ , {26925824, 4037}
+ , {16860416, 4123}
+ , {6795008, 4209}
+ ,
+ {96729600, 4294}
+ , {86664192, 4380}
+ , {76598784, 4466}
+ , {66533376, 4552}
+ , {56467968, 4638}
+ ,
+ {46402560, 4724}
+ , {36337152, 4810}
+ , {26271744, 4896}
+ , {16206336, 4982}
+ , {6140928, 5068}
+ ,
+ {96075520, 5153}
+ , {86010112, 5239}
+ , {75944704, 5325}
+ , {65879296, 5411}
+ , {55813888, 5497}
+ ,
+ {45748480, 5583}
+ , {35683072, 5669}
+ , {25617664, 5755}
+ , {15552256, 5841}
+ , {5486848, 5927}
+ ,
+ {95421440, 6012}
+ , {85356032, 6098}
+ , {75290624, 6184}
+ , {65225216, 6270}
+ , {55159808, 6356}
+ ,
+ {45094400, 6442}
+ , {35028992, 6528}
+ , {24963584, 6614}
+ , {14898176, 6700}
+ , {4832768, 6786}
+ ,
+ {94767360, 6871}
+ , {84701952, 6957}
+ , {74636544, 7043}
+ , {64571136, 7129}
+ , {54505728, 7215}
+ ,
+ {44440320, 7301}
+ , {34374912, 7387}
+ , {24309504, 7473}
+ , {14244096, 7559}
+ , {4178688, 7645}
+ ,
+ {94113280, 7730}
+ , {84047872, 7816}
+ , {73982464, 7902}
+ , {63917056, 7988}
+ , {53851648, 8074}
+ ,
+ {43786240, 8160}
+ , {33720832, 8246}
+ , {23655424, 8332}
+ , {13590016, 8418}
+ , {3524608, 8504}
+ ,
+ {93459200, 8589}
+ , {83393792, 8675}
+ , {73328384, 8761}
+ , {63262976, 8847}
+ , {53197568, 8933}
+ ,
+ {43132160, 9019}
+ , {33066752, 9105}
+ , {23001344, 9191}
+ , {12935936, 9277}
+ , {2870528, 9363}
+ ,
+ {92805120, 9448}
+ , {82739712, 9534}
+ , {72674304, 9620}
+ , {62608896, 9706}
+ , {52543488, 9792}
+ ,
+ {42478080, 9878}
+ , {32412672, 9964}
+ , {22347264, 10050}
+ , {12281856, 10136}
+ , {2216448, 10222}
+ ,
+ {92151040, 10307}
+ , {82085632, 10393}
+ , {72020224, 10479}
+ , {61954816, 10565}
+ , {51889408, 10651}
+ ,
+ {41824000, 10737}
+ , {31758592, 10823}
+ , {21693184, 10909}
+ ,
+ }
+ ,
+
+ {{0, 0}
+ , {11627776, 10995}
+ , {23255552, 21990}
+ , {34883328, 32985}
+ , {46511104, 43980}
+ ,
+ {58138880, 54975}
+ , {69766656, 65970}
+ , {81394432, 76965}
+ , {93022208, 87960}
+ , {4649984, 98956}
+ ,
+ {16277760, 109951}
+ , {27905536, 120946}
+ , {39533312, 131941}
+ , {51161088, 142936}
+ , {62788864, 153931}
+ ,
+ {74416640, 164926}
+ , {86044416, 175921}
+ , {97672192, 186916}
+ , {9299968, 197912}
+ , {20927744, 208907}
+ ,
+ {32555520, 219902}
+ , {44183296, 230897}
+ , {55811072, 241892}
+ , {67438848, 252887}
+ , {79066624, 263882}
+ ,
+ {90694400, 274877}
+ , {2322176, 285873}
+ , {13949952, 296868}
+ , {25577728, 307863}
+ , {37205504, 318858}
+ ,
+ {48833280, 329853}
+ , {60461056, 340848}
+ , {72088832, 351843}
+ , {83716608, 362838}
+ , {95344384, 373833}
+ ,
+ {6972160, 384829}
+ , {18599936, 395824}
+ , {30227712, 406819}
+ , {41855488, 417814}
+ , {53483264, 428809}
+ ,
+ {65111040, 439804}
+ , {76738816, 450799}
+ , {88366592, 461794}
+ , {99994368, 472789}
+ , {11622144, 483785}
+ ,
+ {23249920, 494780}
+ , {34877696, 505775}
+ , {46505472, 516770}
+ , {58133248, 527765}
+ , {69761024, 538760}
+ ,
+ {81388800, 549755}
+ , {93016576, 560750}
+ , {4644352, 571746}
+ , {16272128, 582741}
+ , {27899904, 593736}
+ ,
+ {39527680, 604731}
+ , {51155456, 615726}
+ , {62783232, 626721}
+ , {74411008, 637716}
+ , {86038784, 648711}
+ ,
+ {97666560, 659706}
+ , {9294336, 670702}
+ , {20922112, 681697}
+ , {32549888, 692692}
+ , {44177664, 703687}
+ ,
+ {55805440, 714682}
+ , {67433216, 725677}
+ , {79060992, 736672}
+ , {90688768, 747667}
+ , {2316544, 758663}
+ ,
+ {13944320, 769658}
+ , {25572096, 780653}
+ , {37199872, 791648}
+ , {48827648, 802643}
+ , {60455424, 813638}
+ ,
+ {72083200, 824633}
+ , {83710976, 835628}
+ , {95338752, 846623}
+ , {6966528, 857619}
+ , {18594304, 868614}
+ ,
+ {30222080, 879609}
+ , {41849856, 890604}
+ , {53477632, 901599}
+ , {65105408, 912594}
+ , {76733184, 923589}
+ ,
+ {88360960, 934584}
+ , {99988736, 945579}
+ , {11616512, 956575}
+ , {23244288, 967570}
+ , {34872064, 978565}
+ ,
+ {46499840, 989560}
+ , {58127616, 1000555}
+ , {69755392, 1011550}
+ , {81383168, 1022545}
+ , {93010944, 1033540}
+ ,
+ {4638720, 1044536}
+ , {16266496, 1055531}
+ , {27894272, 1066526}
+ , {39522048, 1077521}
+ , {51149824, 1088516}
+ ,
+ {62777600, 1099511}
+ , {74405376, 1110506}
+ , {86033152, 1121501}
+ , {97660928, 1132496}
+ , {9288704, 1143492}
+ ,
+ {20916480, 1154487}
+ , {32544256, 1165482}
+ , {44172032, 1176477}
+ , {55799808, 1187472}
+ , {67427584, 1198467}
+ ,
+ {79055360, 1209462}
+ , {90683136, 1220457}
+ , {2310912, 1231453}
+ , {13938688, 1242448}
+ , {25566464, 1253443}
+ ,
+ {37194240, 1264438}
+ , {48822016, 1275433}
+ , {60449792, 1286428}
+ , {72077568, 1297423}
+ , {83705344, 1308418}
+ ,
+ {95333120, 1319413}
+ , {6960896, 1330409}
+ , {18588672, 1341404}
+ , {30216448, 1352399}
+ , {41844224, 1363394}
+ ,
+ {53472000, 1374389}
+ , {65099776, 1385384}
+ , {76727552, 1396379}
+ ,
+ }
+ ,
+
+ {{0, 0}
+ , {88355328, 1407374}
+ , {76710656, 2814749}
+ , {65065984, 4222124}
+ , {53421312, 5629499}
+ ,
+ {41776640, 7036874}
+ , {30131968, 8444249}
+ , {18487296, 9851624}
+ , {6842624, 11258999}
+ , {95197952, 12666373}
+ ,
+ {83553280, 14073748}
+ , {71908608, 15481123}
+ , {60263936, 16888498}
+ , {48619264, 18295873}
+ , {36974592, 19703248}
+ ,
+ {25329920, 21110623}
+ , {13685248, 22517998}
+ , {2040576, 23925373}
+ , {90395904, 25332747}
+ , {78751232, 26740122}
+ ,
+ {67106560, 28147497}
+ , {55461888, 29554872}
+ , {43817216, 30962247}
+ , {32172544, 32369622}
+ , {20527872, 33776997}
+ ,
+ {8883200, 35184372}
+ , {97238528, 36591746}
+ , {85593856, 37999121}
+ , {73949184, 39406496}
+ , {62304512, 40813871}
+ ,
+ {50659840, 42221246}
+ , {39015168, 43628621}
+ , {27370496, 45035996}
+ , {15725824, 46443371}
+ , {4081152, 47850746}
+ ,
+ {92436480, 49258120}
+ , {80791808, 50665495}
+ , {69147136, 52072870}
+ , {57502464, 53480245}
+ , {45857792, 54887620}
+ ,
+ {34213120, 56294995}
+ , {22568448, 57702370}
+ , {10923776, 59109745}
+ , {99279104, 60517119}
+ , {87634432, 61924494}
+ ,
+ {75989760, 63331869}
+ , {64345088, 64739244}
+ , {52700416, 66146619}
+ , {41055744, 67553994}
+ , {29411072, 68961369}
+ ,
+ {17766400, 70368744}
+ , {6121728, 71776119}
+ , {94477056, 73183493}
+ , {82832384, 74590868}
+ , {71187712, 75998243}
+ ,
+ {59543040, 77405618}
+ , {47898368, 78812993}
+ , {36253696, 80220368}
+ , {24609024, 81627743}
+ , {12964352, 83035118}
+ ,
+ {1319680, 84442493}
+ , {89675008, 85849867}
+ , {78030336, 87257242}
+ , {66385664, 88664617}
+ , {54740992, 90071992}
+ ,
+ {43096320, 91479367}
+ , {31451648, 92886742}
+ , {19806976, 94294117}
+ , {8162304, 95701492}
+ , {96517632, 97108866}
+ ,
+ {84872960, 98516241}
+ , {73228288, 99923616}
+ , {61583616, 1330991}
+ , {49938944, 2738366}
+ , {38294272, 4145741}
+ ,
+ {26649600, 5553116}
+ , {15004928, 6960491}
+ , {3360256, 8367866}
+ , {91715584, 9775240}
+ , {80070912, 11182615}
+ ,
+ {68426240, 12589990}
+ , {56781568, 13997365}
+ , {45136896, 15404740}
+ , {33492224, 16812115}
+ , {21847552, 18219490}
+ ,
+ {10202880, 19626865}
+ , {98558208, 21034239}
+ , {86913536, 22441614}
+ , {75268864, 23848989}
+ , {63624192, 25256364}
+ ,
+ {51979520, 26663739}
+ , {40334848, 28071114}
+ , {28690176, 29478489}
+ , {17045504, 30885864}
+ , {5400832, 32293239}
+ ,
+ {93756160, 33700613}
+ , {82111488, 35107988}
+ , {70466816, 36515363}
+ , {58822144, 37922738}
+ , {47177472, 39330113}
+ ,
+ {35532800, 40737488}
+ , {23888128, 42144863}
+ , {12243456, 43552238}
+ , {598784, 44959613}
+ , {88954112, 46366987}
+ ,
+ {77309440, 47774362}
+ , {65664768, 49181737}
+ , {54020096, 50589112}
+ , {42375424, 51996487}
+ , {30730752, 53403862}
+ ,
+ {19086080, 54811237}
+ , {7441408, 56218612}
+ , {95796736, 57625986}
+ , {84152064, 59033361}
+ , {72507392, 60440736}
+ ,
+ {60862720, 61848111}
+ , {49218048, 63255486}
+ , {37573376, 64662861}
+ , {25928704, 66070236}
+ , {14284032, 67477611}
+ ,
+ {2639360, 68884986}
+ , {90994688, 70292360}
+ , {79350016, 71699735}
+ , {67705344, 73107110}
+ , {56060672, 74514485}
+ ,
+ {44416000, 75921860}
+ , {32771328, 77329235}
+ , {21126656, 78736610}
+ ,
+ }
+ ,
+
+ {{0, 0}
+ , {9481984, 80143985}
+ , {18963968, 60287970}
+ , {28445952, 40431955}
+ , {37927936, 20575940}
+ ,
+ {47409920, 719925}
+ , {56891904, 80863910}
+ , {66373888, 61007895}
+ , {75855872, 41151880}
+ , {85337856, 21295865}
+ ,
+ {94819840, 1439850}
+ , {4301824, 81583836}
+ , {13783808, 61727821}
+ , {23265792, 41871806}
+ , {32747776, 22015791}
+ ,
+ {42229760, 2159776}
+ , {51711744, 82303761}
+ , {61193728, 62447746}
+ , {70675712, 42591731}
+ , {80157696, 22735716}
+ ,
+ {89639680, 2879701}
+ , {99121664, 83023686}
+ , {8603648, 63167672}
+ , {18085632, 43311657}
+ , {27567616, 23455642}
+ ,
+ {37049600, 3599627}
+ , {46531584, 83743612}
+ , {56013568, 63887597}
+ , {65495552, 44031582}
+ , {74977536, 24175567}
+ ,
+ {84459520, 4319552}
+ , {93941504, 84463537}
+ , {3423488, 64607523}
+ , {12905472, 44751508}
+ , {22387456, 24895493}
+ ,
+ {31869440, 5039478}
+ , {41351424, 85183463}
+ , {50833408, 65327448}
+ , {60315392, 45471433}
+ , {69797376, 25615418}
+ ,
+ {79279360, 5759403}
+ , {88761344, 85903388}
+ , {98243328, 66047373}
+ , {7725312, 46191359}
+ , {17207296, 26335344}
+ ,
+ {26689280, 6479329}
+ , {36171264, 86623314}
+ , {45653248, 66767299}
+ , {55135232, 46911284}
+ , {64617216, 27055269}
+ ,
+ {74099200, 7199254}
+ , {83581184, 87343239}
+ , {93063168, 67487224}
+ , {2545152, 47631210}
+ , {12027136, 27775195}
+ ,
+ {21509120, 7919180}
+ , {30991104, 88063165}
+ , {40473088, 68207150}
+ , {49955072, 48351135}
+ , {59437056, 28495120}
+ ,
+ {68919040, 8639105}
+ , {78401024, 88783090}
+ , {87883008, 68927075}
+ , {97364992, 49071060}
+ , {6846976, 29215046}
+ ,
+ {16328960, 9359031}
+ , {25810944, 89503016}
+ , {35292928, 69647001}
+ , {44774912, 49790986}
+ , {54256896, 29934971}
+ ,
+ {63738880, 10078956}
+ , {73220864, 90222941}
+ , {82702848, 70366926}
+ , {92184832, 50510911}
+ , {1666816, 30654897}
+ ,
+ {11148800, 10798882}
+ , {20630784, 90942867}
+ , {30112768, 71086852}
+ , {39594752, 51230837}
+ , {49076736, 31374822}
+ ,
+ {58558720, 11518807}
+ , {68040704, 91662792}
+ , {77522688, 71806777}
+ , {87004672, 51950762}
+ , {96486656, 32094747}
+ ,
+ {5968640, 12238733}
+ , {15450624, 92382718}
+ , {24932608, 72526703}
+ , {34414592, 52670688}
+ , {43896576, 32814673}
+ ,
+ {53378560, 12958658}
+ , {62860544, 93102643}
+ , {72342528, 73246628}
+ , {81824512, 53390613}
+ , {91306496, 33534598}
+ ,
+ {788480, 13678584}
+ , {10270464, 93822569}
+ , {19752448, 73966554}
+ , {29234432, 54110539}
+ , {38716416, 34254524}
+ ,
+ {48198400, 14398509}
+ , {57680384, 94542494}
+ , {67162368, 74686479}
+ , {76644352, 54830464}
+ , {86126336, 34974449}
+ ,
+ {95608320, 15118434}
+ , {5090304, 95262420}
+ , {14572288, 75406405}
+ , {24054272, 55550390}
+ , {33536256, 35694375}
+ ,
+ {43018240, 15838360}
+ , {52500224, 95982345}
+ , {61982208, 76126330}
+ , {71464192, 56270315}
+ , {80946176, 36414300}
+ ,
+ {90428160, 16558285}
+ , {99910144, 96702270}
+ , {9392128, 76846256}
+ , {18874112, 56990241}
+ , {28356096, 37134226}
+ ,
+ {37838080, 17278211}
+ , {47320064, 97422196}
+ , {56802048, 77566181}
+ , {66284032, 57710166}
+ , {75766016, 37854151}
+ ,
+ {85248000, 17998136}
+ , {94729984, 98142121}
+ , {4211968, 78286107}
+ ,
+ }
+ ,
+};
+
+// for j>=min_j[i+1], there is k s.t. convert_table[i][j][k]>0
+// int min_j[] = { 0, 0, 0, 3 };
+
+// for even k, ((packed_10000_zeros[k>>3])>>(k&7))&3)=greatest(i) s.t. 10^i divides k
+const UINT8 packed_10000_zeros[] = {
+
+ 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x20, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x3, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x2,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x20, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x2, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x20, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x2, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x2,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x20, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x3, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x20, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x2, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x2,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x20, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10, 0x40, 0x0, 0x3, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40,
+ 0x0, 0x2, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0,
+ 0x2, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x20,
+ 0x40, 0x0, 0x1,
+ 0x4, 0x10, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0, 0x2, 0x4, 0x10, 0x40,
+ 0x0, 0x1, 0x4,
+ 0x10, 0x40, 0x0, 0x1, 0x4, 0x20, 0x40, 0x0, 0x1, 0x4, 0x10, 0x40, 0x0,
+ 0x1, 0x4, 0x10,
+ 0x40, 0x0,
+};
+
+
+const SINT8 factors[1024][2] = {
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {6, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 3}
+ , {1, 0}
+ , {0, 0}
+ , {7, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {5, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {6, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {5, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 3}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {8, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {6, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 3}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {7, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {6, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {5, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 3}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {9, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {5, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {6, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 4}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {7, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {6, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 3}
+ ,
+ {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {8, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {5, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {6, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {5, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 3}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {7, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 2}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 2}
+ , {1, 0}
+ , {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 2}
+ ,
+ {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {6, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 2}
+ , {4, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {5, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {3, 3}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 0}
+ , {0, 1}
+ , {1, 0}
+ , {0, 0}
+ , {4, 0}
+ , {0, 0}
+ , {1, 1}
+ ,
+ {0, 0}
+ , {2, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 1}
+ , {3, 0}
+ , {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {2, 1}
+ ,
+ {0, 0}
+ , {1, 0}
+ , {0, 0}
+ , {10, 0}
+ ,
+};
diff --git a/gcc-4.9/libgcc/config/libbid/bid_decimal_data.c b/gcc-4.9/libgcc/config/libbid/bid_decimal_data.c
new file mode 100644
index 000000000..36bdf1afe
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_decimal_data.c
@@ -0,0 +1,1293 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+UINT64 round_const_table[][19] = {
+ { // RN
+ 0ull, // 0 extra digits
+ 5ull, // 1 extra digits
+ 50ull, // 2 extra digits
+ 500ull, // 3 extra digits
+ 5000ull, // 4 extra digits
+ 50000ull, // 5 extra digits
+ 500000ull, // 6 extra digits
+ 5000000ull, // 7 extra digits
+ 50000000ull, // 8 extra digits
+ 500000000ull, // 9 extra digits
+ 5000000000ull, // 10 extra digits
+ 50000000000ull, // 11 extra digits
+ 500000000000ull, // 12 extra digits
+ 5000000000000ull, // 13 extra digits
+ 50000000000000ull, // 14 extra digits
+ 500000000000000ull, // 15 extra digits
+ 5000000000000000ull, // 16 extra digits
+ 50000000000000000ull, // 17 extra digits
+ 500000000000000000ull // 18 extra digits
+ }
+ ,
+ { // RD
+ 0ull, // 0 extra digits
+ 0ull, // 1 extra digits
+ 0ull, // 2 extra digits
+ 00ull, // 3 extra digits
+ 000ull, // 4 extra digits
+ 0000ull, // 5 extra digits
+ 00000ull, // 6 extra digits
+ 000000ull, // 7 extra digits
+ 0000000ull, // 8 extra digits
+ 00000000ull, // 9 extra digits
+ 000000000ull, // 10 extra digits
+ 0000000000ull, // 11 extra digits
+ 00000000000ull, // 12 extra digits
+ 000000000000ull, // 13 extra digits
+ 0000000000000ull, // 14 extra digits
+ 00000000000000ull, // 15 extra digits
+ 000000000000000ull, // 16 extra digits
+ 0000000000000000ull, // 17 extra digits
+ 00000000000000000ull // 18 extra digits
+ }
+ ,
+ { // round to Inf
+ 0ull, // 0 extra digits
+ 9ull, // 1 extra digits
+ 99ull, // 2 extra digits
+ 999ull, // 3 extra digits
+ 9999ull, // 4 extra digits
+ 99999ull, // 5 extra digits
+ 999999ull, // 6 extra digits
+ 9999999ull, // 7 extra digits
+ 99999999ull, // 8 extra digits
+ 999999999ull, // 9 extra digits
+ 9999999999ull, // 10 extra digits
+ 99999999999ull, // 11 extra digits
+ 999999999999ull, // 12 extra digits
+ 9999999999999ull, // 13 extra digits
+ 99999999999999ull, // 14 extra digits
+ 999999999999999ull, // 15 extra digits
+ 9999999999999999ull, // 16 extra digits
+ 99999999999999999ull, // 17 extra digits
+ 999999999999999999ull // 18 extra digits
+ }
+ ,
+ { // RZ
+ 0ull, // 0 extra digits
+ 0ull, // 1 extra digits
+ 0ull, // 2 extra digits
+ 00ull, // 3 extra digits
+ 000ull, // 4 extra digits
+ 0000ull, // 5 extra digits
+ 00000ull, // 6 extra digits
+ 000000ull, // 7 extra digits
+ 0000000ull, // 8 extra digits
+ 00000000ull, // 9 extra digits
+ 000000000ull, // 10 extra digits
+ 0000000000ull, // 11 extra digits
+ 00000000000ull, // 12 extra digits
+ 000000000000ull, // 13 extra digits
+ 0000000000000ull, // 14 extra digits
+ 00000000000000ull, // 15 extra digits
+ 000000000000000ull, // 16 extra digits
+ 0000000000000000ull, // 17 extra digits
+ 00000000000000000ull // 18 extra digits
+ }
+ ,
+ { // round ties away from 0
+ 0ull, // 0 extra digits
+ 5ull, // 1 extra digits
+ 50ull, // 2 extra digits
+ 500ull, // 3 extra digits
+ 5000ull, // 4 extra digits
+ 50000ull, // 5 extra digits
+ 500000ull, // 6 extra digits
+ 5000000ull, // 7 extra digits
+ 50000000ull, // 8 extra digits
+ 500000000ull, // 9 extra digits
+ 5000000000ull, // 10 extra digits
+ 50000000000ull, // 11 extra digits
+ 500000000000ull, // 12 extra digits
+ 5000000000000ull, // 13 extra digits
+ 50000000000000ull, // 14 extra digits
+ 500000000000000ull, // 15 extra digits
+ 5000000000000000ull, // 16 extra digits
+ 50000000000000000ull, // 17 extra digits
+ 500000000000000000ull // 18 extra digits
+ }
+ ,
+};
+
+UINT128 round_const_table_128[][36] = {
+ { //RN
+ {{0ull, 0ull}
+ }
+ , // 0 extra digits
+ {{5ull, 0ull}
+ }
+ , // 1 extra digits
+ {{50ull, 0ull}
+ }
+ , // 2 extra digits
+ {{500ull, 0ull}
+ }
+ , // 3 extra digits
+ {{5000ull, 0ull}
+ }
+ , // 4 extra digits
+ {{50000ull, 0ull}
+ }
+ , // 5 extra digits
+ {{500000ull, 0ull}
+ }
+ , // 6 extra digits
+ {{5000000ull, 0ull}
+ }
+ , // 7 extra digits
+ {{50000000ull, 0ull}
+ }
+ , // 8 extra digits
+ {{500000000ull, 0ull}
+ }
+ , // 9 extra digits
+ {{5000000000ull, 0ull}
+ }
+ , // 10 extra digits
+ {{50000000000ull, 0ull}
+ }
+ , // 11 extra digits
+ {{500000000000ull, 0ull}
+ }
+ , // 12 extra digits
+ {{5000000000000ull, 0ull}
+ }
+ , // 13 extra digits
+ {{50000000000000ull, 0ull}
+ }
+ , // 14 extra digits
+ {{500000000000000ull, 0ull}
+ }
+ , // 15 extra digits
+ {{5000000000000000ull, 0ull}
+ }
+ , // 16 extra digits
+ {{50000000000000000ull, 0ull}
+ }
+ , // 17 extra digits
+ {{500000000000000000ull, 0ull}
+ }
+ , // 18 extra digits
+ {{5000000000000000000ull, 0ull}
+ }
+ , // 19 extra digits
+ {{0xb5e3af16b1880000ull, 2ull}
+ }
+ , //20
+ {{0x1ae4d6e2ef500000ull, 27ull}
+ }
+ , //21
+ {{0xcf064dd59200000ull, 271ull}
+ }
+ , //22
+ {{0x8163f0a57b400000ull, 2710ull}
+ }
+ , //23
+ {{0xde76676d0800000ull, 27105ull}
+ }
+ , //24
+ {{0x8b0a00a425000000ull, 0x422caull}
+ }
+ , //25
+ {{0x6e64066972000000ull, 0x295be9ull}
+ }
+ , //26
+ {{0x4fe8401e74000000ull, 0x19d971eull}
+ }
+ , //27
+ {{0x1f12813088000000ull, 0x1027e72full}
+ }
+ , //28
+ {{0x36b90be550000000ull, 0xa18f07d7ull}
+ }
+ , //29
+ {{0x233a76f520000000ull, 0x64f964e68ull}
+ }
+ , //30
+ {{0x6048a59340000000ull, 0x3f1bdf1011ull}
+ }
+ , //31
+ {{0xc2d677c080000000ull, 0x27716b6a0adull}
+ }
+ , //32
+ {{0x9c60ad8500000000ull, 0x18a6e32246c9ull}
+ }
+ , //33
+ {{0x1bc6c73200000000ull, 0xf684df56c3e0ull}
+ }
+ , //34
+ {{0x15c3c7f400000000ull, 0x9a130b963a6c1ull}
+ }
+ , //35
+ }
+ ,
+ { //RD
+ {{0ull, 0ull}
+ }
+ , // 0 extra digits
+ {{0ull, 0ull}
+ }
+ , // 1 extra digits
+ {{0ull, 0ull}
+ }
+ , // 2 extra digits
+ {{00ull, 0ull}
+ }
+ , // 3 extra digits
+ {{000ull, 0ull}
+ }
+ , // 4 extra digits
+ {{0000ull, 0ull}
+ }
+ , // 5 extra digits
+ {{00000ull, 0ull}
+ }
+ , // 6 extra digits
+ {{000000ull, 0ull}
+ }
+ , // 7 extra digits
+ {{0000000ull, 0ull}
+ }
+ , // 8 extra digits
+ {{00000000ull, 0ull}
+ }
+ , // 9 extra digits
+ {{000000000ull, 0ull}
+ }
+ , // 10 extra digits
+ {{0000000000ull, 0ull}
+ }
+ , // 11 extra digits
+ {{00000000000ull, 0ull}
+ }
+ , // 12 extra digits
+ {{000000000000ull, 0ull}
+ }
+ , // 13 extra digits
+ {{0000000000000ull, 0ull}
+ }
+ , // 14 extra digits
+ {{00000000000000ull, 0ull}
+ }
+ , // 15 extra digits
+ {{000000000000000ull, 0ull}
+ }
+ , // 16 extra digits
+ {{0000000000000000ull, 0ull}
+ }
+ , // 17 extra digits
+ {{00000000000000000ull, 0ull}
+ }
+ , // 18 extra digits
+ {{000000000000000000ull, 0ull}
+ }
+ , // 19 extra digits
+ {{0ull, 0ull}
+ }
+ , //20
+ {{0ull, 0ull}
+ }
+ , //21
+ {{0ull, 0ull}
+ }
+ , //22
+ {{0ull, 0ull}
+ }
+ , //23
+ {{0ull, 0ull}
+ }
+ , //24
+ {{0ull, 0ull}
+ }
+ , //25
+ {{0ull, 0ull}
+ }
+ , //26
+ {{0ull, 0ull}
+ }
+ , //27
+ {{0ull, 0ull}
+ }
+ , //28
+ {{0ull, 0ull}
+ }
+ , //29
+ {{0ull, 0ull}
+ }
+ , //30
+ {{0ull, 0ull}
+ }
+ , //31
+ {{0ull, 0ull}
+ }
+ , //32
+ {{0ull, 0ull}
+ }
+ , //33
+ {{0ull, 0ull}
+ }
+ , //34
+ {{0ull, 0ull}
+ }
+ , //35
+ }
+ ,
+ { //RU
+ {{0ull, 0ull}
+ }
+ , // 0 extra digits
+ {{9ull, 0ull}
+ }
+ , // 1 extra digits
+ {{99ull, 0ull}
+ }
+ , // 2 extra digits
+ {{999ull, 0ull}
+ }
+ , // 3 extra digits
+ {{9999ull, 0ull}
+ }
+ , // 4 extra digits
+ {{99999ull, 0ull}
+ }
+ , // 5 extra digits
+ {{999999ull, 0ull}
+ }
+ , // 6 extra digits
+ {{9999999ull, 0ull}
+ }
+ , // 7 extra digits
+ {{99999999ull, 0ull}
+ }
+ , // 8 extra digits
+ {{999999999ull, 0ull}
+ }
+ , // 9 extra digits
+ {{9999999999ull, 0ull}
+ }
+ , // 10 extra digits
+ {{99999999999ull, 0ull}
+ }
+ , // 11 extra digits
+ {{999999999999ull, 0ull}
+ }
+ , // 12 extra digits
+ {{9999999999999ull, 0ull}
+ }
+ , // 13 extra digits
+ {{99999999999999ull, 0ull}
+ }
+ , // 14 extra digits
+ {{999999999999999ull, 0ull}
+ }
+ , // 15 extra digits
+ {{9999999999999999ull, 0ull}
+ }
+ , // 16 extra digits
+ {{99999999999999999ull, 0ull}
+ }
+ , // 17 extra digits
+ {{999999999999999999ull, 0ull}
+ }
+ , // 18 extra digits
+ {{9999999999999999999ull, 0ull}
+ }
+ , // 19 extra digits
+ {{0x6BC75E2D630FFFFFull, 0x5ull}
+ }
+ , //20
+ {{0x35C9ADC5DE9FFFFFull, 0x36ull}
+ }
+ , //21
+ {{0x19E0C9BAB23FFFFFull, 0x21eull}
+ }
+ , //22
+ {{0x2C7E14AF67FFFFFull, 0x152dull}
+ }
+ , //23
+ {{0x1BCECCEDA0FFFFFFull, 0xd3c2ull}
+ }
+ , //24
+ {{0x1614014849FFFFFFull, 0x84595ull}
+ }
+ , //25
+ {{0xDCC80CD2E3FFFFFFull, 0x52b7d2ull}
+ }
+ , //26
+ {{0x9FD0803CE7FFFFFFull, 0x33B2E3Cull}
+ }
+ , //27
+ {{0x3E2502610FFFFFFFull, 0x204FCE5Eull}
+ }
+ , //28
+ {{0x6D7217CA9FFFFFFFull, 0x1431E0FAEull}
+ }
+ , //29
+ {{0x4674EDEA3FFFFFFFull, 0xC9F2C9CD0ull}
+ }
+ , //30
+ {{0xC0914B267FFFFFFFull, 0x7E37BE2022ull}
+ }
+ , //31
+ {{0x85ACEF80FFFFFFFFull, 0x4EE2D6D415Bull}
+ }
+ , //32
+ {{0x38c15b09ffffffffull, 0x314dc6448d93ull}
+ }
+ , //33
+ {{0x378d8e63ffffffffull, 0x1ed09bead87c0ull}
+ }
+ , //34
+ {{0x2b878fe7ffffffffull, 0x13426172c74d82ull}
+ }
+ , //35
+ }
+ ,
+ { //RZ
+ {{0ull, 0ull}
+ }
+ , // 0 extra digits
+ {{0ull, 0ull}
+ }
+ , // 1 extra digits
+ {{0ull, 0ull}
+ }
+ , // 2 extra digits
+ {{00ull, 0ull}
+ }
+ , // 3 extra digits
+ {{000ull, 0ull}
+ }
+ , // 4 extra digits
+ {{0000ull, 0ull}
+ }
+ , // 5 extra digits
+ {{00000ull, 0ull}
+ }
+ , // 6 extra digits
+ {{000000ull, 0ull}
+ }
+ , // 7 extra digits
+ {{0000000ull, 0ull}
+ }
+ , // 8 extra digits
+ {{00000000ull, 0ull}
+ }
+ , // 9 extra digits
+ {{000000000ull, 0ull}
+ }
+ , // 10 extra digits
+ {{0000000000ull, 0ull}
+ }
+ , // 11 extra digits
+ {{00000000000ull, 0ull}
+ }
+ , // 12 extra digits
+ {{000000000000ull, 0ull}
+ }
+ , // 13 extra digits
+ {{0000000000000ull, 0ull}
+ }
+ , // 14 extra digits
+ {{00000000000000ull, 0ull}
+ }
+ , // 15 extra digits
+ {{000000000000000ull, 0ull}
+ }
+ , // 16 extra digits
+ {{0000000000000000ull, 0ull}
+ }
+ , // 17 extra digits
+ {{00000000000000000ull, 0ull}
+ }
+ , // 18 extra digits
+ {{000000000000000000ull, 0ull}
+ }
+ , // 19 extra digits
+ {{0ull, 0ull}
+ }
+ , //20
+ {{0ull, 0ull}
+ }
+ , //21
+ {{0ull, 0ull}
+ }
+ , //22
+ {{0ull, 0ull}
+ }
+ , //23
+ {{0ull, 0ull}
+ }
+ , //24
+ {{0ull, 0ull}
+ }
+ , //25
+ {{0ull, 0ull}
+ }
+ , //26
+ {{0ull, 0ull}
+ }
+ , //27
+ {{0ull, 0ull}
+ }
+ , //28
+ {{0ull, 0ull}
+ }
+ , //29
+ {{0ull, 0ull}
+ }
+ , //30
+ {{0ull, 0ull}
+ }
+ , //31
+ {{0ull, 0ull}
+ }
+ , //32
+ {{0ull, 0ull}
+ }
+ , //33
+ {{0ull, 0ull}
+ }
+ , //34
+ {{0ull, 0ull}
+ }
+ , //35
+ }
+ ,
+ { //RN, ties away
+ {{0ull, 0ull}
+ }
+ , // 0 extra digits
+ {{5ull, 0ull}
+ }
+ , // 1 extra digits
+ {{50ull, 0ull}
+ }
+ , // 2 extra digits
+ {{500ull, 0ull}
+ }
+ , // 3 extra digits
+ {{5000ull, 0ull}
+ }
+ , // 4 extra digits
+ {{50000ull, 0ull}
+ }
+ , // 5 extra digits
+ {{500000ull, 0ull}
+ }
+ , // 6 extra digits
+ {{5000000ull, 0ull}
+ }
+ , // 7 extra digits
+ {{50000000ull, 0ull}
+ }
+ , // 8 extra digits
+ {{500000000ull, 0ull}
+ }
+ , // 9 extra digits
+ {{5000000000ull, 0ull}
+ }
+ , // 10 extra digits
+ {{50000000000ull, 0ull}
+ }
+ , // 11 extra digits
+ {{500000000000ull, 0ull}
+ }
+ , // 12 extra digits
+ {{5000000000000ull, 0ull}
+ }
+ , // 13 extra digits
+ {{50000000000000ull, 0ull}
+ }
+ , // 14 extra digits
+ {{500000000000000ull, 0ull}
+ }
+ , // 15 extra digits
+ {{5000000000000000ull, 0ull}
+ }
+ , // 16 extra digits
+ {{50000000000000000ull, 0ull}
+ }
+ , // 17 extra digits
+ {{500000000000000000ull, 0ull}
+ }
+ , // 18 extra digits
+ {{5000000000000000000ull, 0ull}
+ }
+ , // 19 extra digits
+ {{0xb5e3af16b1880000ull, 2ull}
+ }
+ , //20
+ {{0x1ae4d6e2ef500000ull, 27ull}
+ }
+ , //21
+ {{0xcf064dd59200000ull, 271ull}
+ }
+ , //22
+ {{0x8163f0a57b400000ull, 2710ull}
+ }
+ , //23
+ {{0xde76676d0800000ull, 27105ull}
+ }
+ , //24
+ {{0x8b0a00a425000000ull, 0x422caull}
+ }
+ , //25
+ {{0x6e64066972000000ull, 0x295be9ull}
+ }
+ , //26
+ {{0x4fe8401e74000000ull, 0x19d971eull}
+ }
+ , //27
+ {{0x1f12813088000000ull, 0x1027e72full}
+ }
+ , //28
+ {{0x36b90be550000000ull, 0xa18f07d7ull}
+ }
+ , //29
+ {{0x233a76f520000000ull, 0x64f964e68ull}
+ }
+ , //30
+ {{0x6048a59340000000ull, 0x3f1bdf1011ull}
+ }
+ , //31
+ {{0xc2d677c080000000ull, 0x27716b6a0adull}
+ }
+ , //32
+ {{0x9c60ad8500000000ull, 0x18a6e32246c9ull}
+ }
+ , //33
+ {{0x1bc6c73200000000ull, 0xf684df56c3e0ull}
+ }
+ , //34
+ {{0x15c3c7f400000000ull, 0x9a130b963a6c1ull}
+ }
+ , //35
+ }
+};
+
+
+UINT128 reciprocals10_128[] = {
+ {{0ull, 0ull}
+ }
+ , // 0 extra digits
+ {{0x3333333333333334ull, 0x3333333333333333ull}
+ }
+ , // 1 extra digit
+ {{0x51eb851eb851eb86ull, 0x051eb851eb851eb8ull}
+ }
+ , // 2 extra digits
+ {{0x3b645a1cac083127ull, 0x0083126e978d4fdfull}
+ }
+ , // 3 extra digits
+ {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL}
+ }
+ , // 10^(-4) * 2^131
+ {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL}
+ }
+ , // 10^(-5) * 2^134
+ {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL}
+ }
+ , // 10^(-6) * 2^137
+ {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL}
+ }
+ , // 10^(-7) * 2^141
+ {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL}
+ }
+ , // 10^(-8) * 2^144
+ {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL}
+ }
+ , // 10^(-9) * 2^147
+ {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL}
+ }
+ , // 10^(-10) * 2^151
+ {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL}
+ }
+ , // 10^(-11) * 2^154
+ {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL}
+ }
+ , // 10^(-12) * 2^157
+ {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL}
+ }
+ , // 10^(-13) * 2^161
+ {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL}
+ }
+ , // 10^(-14) * 2^164
+ {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL}
+ }
+ , // 10^(-15) * 2^167
+ {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL}
+ }
+ , // 10^(-16) * 2^171
+ {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL}
+ }
+ , // 10^(-17) * 2^174
+ {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL}
+ }
+ , // 10^(-18) * 2^177
+ {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL}
+ }
+ , // 10^(-19) * 2^181
+ {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL}
+ }
+ , // 10^(-20) * 2^184
+ {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL}
+ }
+ , // 10^(-21) * 2^187
+ {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL}
+ }
+ , // 10^(-22) * 2^191
+ {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL}
+ }
+ , // 10^(-23) * 2^194
+ {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL}
+ }
+ , // 10^(-24) * 2^197
+ {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL}
+ }
+ , // 10^(-25) * 2^201
+ {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL}
+ }
+ , // 10^(-26) * 2^204
+ {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL}
+ }
+ , // 10^(-27) * 2^207
+ {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL}
+ }
+ , // 10^(-28) * 2^211
+ {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL}
+ }
+ , // 10^(-29) * 2^214
+ {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL}
+ }
+ , // 10^(-30) * 2^217
+ {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL}
+ }
+ , // 10^(-31) * 2^220
+ {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL}
+ }
+ , // 10^(-32) * 2^224
+ {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL}
+ }
+ , // 10^(-33) * 2^227
+ {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL}
+ }
+ , // 10^(-34) * 2^230
+ {{0x0f2abc9d8c9689d1ull, 0x01a95a5b7f87a0efull}
+ }
+ , // 35 extra digits
+};
+
+
+int recip_scale[] = {
+ 129 - 128, // 1
+ 129 - 128, // 1/10
+ 129 - 128, // 1/10^2
+ 129 - 128, // 1/10^3
+ 3, // 131 - 128
+ 6, // 134 - 128
+ 9, // 137 - 128
+ 13, // 141 - 128
+ 16, // 144 - 128
+ 19, // 147 - 128
+ 23, // 151 - 128
+ 26, // 154 - 128
+ 29, // 157 - 128
+ 33, // 161 - 128
+ 36, // 164 - 128
+ 39, // 167 - 128
+ 43, // 171 - 128
+ 46, // 174 - 128
+ 49, // 177 - 128
+ 53, // 181 - 128
+ 56, // 184 - 128
+ 59, // 187 - 128
+ 63, // 191 - 128
+
+ 66, // 194 - 128
+ 69, // 197 - 128
+ 73, // 201 - 128
+ 76, // 204 - 128
+ 79, // 207 - 128
+ 83, // 211 - 128
+ 86, // 214 - 128
+ 89, // 217 - 128
+ 92, // 220 - 128
+ 96, // 224 - 128
+ 99, // 227 - 128
+ 102, // 230 - 128
+ 109, // 237 - 128, 1/10^35
+};
+
+
+// tables used in computation
+int estimate_decimal_digits[129] = {
+ 1, //2^0 =1 < 10^0
+ 1, //2^1 =2 < 10^1
+ 1, //2^2 =4 < 10^1
+ 1, //2^3 =8 < 10^1
+ 2, //2^4 =16 < 10^2
+ 2, //2^5 =32 < 10^2
+ 2, //2^6 =64 < 10^2
+ 3, //2^7 =128 < 10^3
+ 3, //2^8 =256 < 10^3
+ 3, //2^9 =512 < 10^3
+ 4, //2^10=1024 < 10^4
+ 4, //2^11=2048 < 10^4
+ 4, //2^12=4096 < 10^4
+ 4, //2^13=8192 < 10^4
+ 5, //2^14=16384 < 10^5
+ 5, //2^15=32768 < 10^5
+
+ 5, //2^16=65536 < 10^5
+ 6, //2^17=131072 < 10^6
+ 6, //2^18=262144 < 10^6
+ 6, //2^19=524288 < 10^6
+ 7, //2^20=1048576 < 10^7
+ 7, //2^21=2097152 < 10^7
+ 7, //2^22=4194304 < 10^7
+ 7, //2^23=8388608 < 10^7
+ 8, //2^24=16777216 < 10^8
+ 8, //2^25=33554432 < 10^8
+ 8, //2^26=67108864 < 10^8
+ 9, //2^27=134217728 < 10^9
+ 9, //2^28=268435456 < 10^9
+ 9, //2^29=536870912 < 10^9
+ 10, //2^30=1073741824< 10^10
+ 10, //2^31=2147483648< 10^10
+
+ 10, //2^32=4294967296 < 10^10
+ 10, //2^33=8589934592 < 10^10
+ 11, //2^34=17179869184 < 10^11
+ 11, //2^35=34359738368 < 10^11
+ 11, //2^36=68719476736 < 10^11
+ 12, //2^37=137438953472 < 10^12
+ 12, //2^38=274877906944 < 10^12
+ 12, //2^39=549755813888 < 10^12
+ 13, //2^40=1099511627776 < 10^13
+ 13, //2^41=2199023255552 < 10^13
+ 13, //2^42=4398046511104 < 10^13
+ 13, //2^43=8796093022208 < 10^13
+ 14, //2^44=17592186044416 < 10^14
+ 14, //2^45=35184372088832 < 10^14
+ 14, //2^46=70368744177664 < 10^14
+ 15, //2^47=140737488355328< 10^15
+
+ 15, //2^48=281474976710656 < 10^15
+ 15, //2^49=562949953421312 < 10^15
+ 16, //2^50=1125899906842624 < 10^16
+ 16, //2^51=2251799813685248 < 10^16
+ 16, //2^52=4503599627370496 < 10^16
+ 16, //2^53=9007199254740992 < 10^16
+ 17, //2^54=18014398509481984 < 10^17
+ 17, //2^55=36028797018963968 < 10^17
+ 17, //2^56=72057594037927936 < 10^17
+ 18, //2^57=144115188075855872 < 10^18
+ 18, //2^58=288230376151711744 < 10^18
+ 18, //2^59=576460752303423488 < 10^18
+ 19, //2^60=1152921504606846976< 10^19
+ 19, //2^61=2305843009213693952< 10^19
+ 19, //2^62=4611686018427387904< 10^19
+ 19, //2^63=9223372036854775808< 10^19
+
+ 20, //2^64=18446744073709551616
+ 20, //2^65=36893488147419103232
+ 20, //2^66=73786976294838206464
+ 21, //2^67=147573952589676412928
+ 21, //2^68=295147905179352825856
+ 21, //2^69=590295810358705651712
+ 22, //2^70=1180591620717411303424
+ 22, //2^71=2361183241434822606848
+ 22, //2^72=4722366482869645213696
+ 22, //2^73=9444732965739290427392
+ 23, //2^74=18889465931478580854784
+ 23, //2^75=37778931862957161709568
+ 23, //2^76=75557863725914323419136
+ 24, //2^77=151115727451828646838272
+ 24, //2^78=302231454903657293676544
+ 24, //2^79=604462909807314587353088
+
+ 25, //2^80=1208925819614629174706176
+ 25, //2^81=2417851639229258349412352
+ 25, //2^82=4835703278458516698824704
+ 25, //2^83=9671406556917033397649408
+ 26, //2^84=19342813113834066795298816
+ 26, //2^85=38685626227668133590597632
+ 26, //2^86=77371252455336267181195264
+ 27, //2^87=154742504910672534362390528
+ 27, //2^88=309485009821345068724781056
+ 27, //2^89=618970019642690137449562112
+ 28, //2^90=1237940039285380274899124224
+ 28, //2^91=2475880078570760549798248448
+ 28, //2^92=4951760157141521099596496896
+ 28, //2^93=9903520314283042199192993792
+ 29, //2^94=19807040628566084398385987584
+ 29, //2^95=39614081257132168796771975168
+ 29, //2^96=79228162514264337593543950336
+
+ 30, //2^97=158456325028528675187087900672
+ 30, //2^98=316912650057057350374175801344
+ 30, //2^99=633825300114114700748351602688
+ 31, //2^100=1267650600228229401496703205376
+ 31, //2^101=2535301200456458802993406410752
+ 31, //2^102=5070602400912917605986812821504
+ 32, //2^103=10141204801825835211973625643008
+ 32, //2^104=20282409603651670423947251286016
+ 32, //2^105=40564819207303340847894502572032
+ 32, //2^106=81129638414606681695789005144064
+ 33, //2^107=162259276829213363391578010288128
+ 33, // 2^108
+ 33, // 2^109
+ 34, // 2^110
+ 34, // 2^111
+ 34, // 2^112
+ 35, // 2^113
+ 35, // 2^114
+ 35, // 2^115
+ 35, // 2^116
+ 36, // 2^117
+ 36, // 2^118
+ 36, // 2^119
+ 37, // 2^120
+ 37, // 2^121
+ 37, // 2^122
+ 38, // 2^123
+ 38, // 2^124
+ 38, // 2^125
+ 38, // 2^126
+ 39, // 2^127
+ 39 // 2^128
+};
+
+
+UINT128 power10_table_128[] = {
+ {{0x0000000000000001ull, 0x0000000000000000ull}}, // 10^0
+ {{0x000000000000000aull, 0x0000000000000000ull}}, // 10^1
+ {{0x0000000000000064ull, 0x0000000000000000ull}}, // 10^2
+ {{0x00000000000003e8ull, 0x0000000000000000ull}}, // 10^3
+ {{0x0000000000002710ull, 0x0000000000000000ull}}, // 10^4
+ {{0x00000000000186a0ull, 0x0000000000000000ull}}, // 10^5
+ {{0x00000000000f4240ull, 0x0000000000000000ull}}, // 10^6
+ {{0x0000000000989680ull, 0x0000000000000000ull}}, // 10^7
+ {{0x0000000005f5e100ull, 0x0000000000000000ull}}, // 10^8
+ {{0x000000003b9aca00ull, 0x0000000000000000ull}}, // 10^9
+ {{0x00000002540be400ull, 0x0000000000000000ull}}, // 10^10
+ {{0x000000174876e800ull, 0x0000000000000000ull}}, // 10^11
+ {{0x000000e8d4a51000ull, 0x0000000000000000ull}}, // 10^12
+ {{0x000009184e72a000ull, 0x0000000000000000ull}}, // 10^13
+ {{0x00005af3107a4000ull, 0x0000000000000000ull}}, // 10^14
+ {{0x00038d7ea4c68000ull, 0x0000000000000000ull}}, // 10^15
+ {{0x002386f26fc10000ull, 0x0000000000000000ull}}, // 10^16
+ {{0x016345785d8a0000ull, 0x0000000000000000ull}}, // 10^17
+ {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}}, // 10^18
+ {{0x8ac7230489e80000ull, 0x0000000000000000ull}}, // 10^19
+ {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
+ {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
+ {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
+ {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
+ {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
+ {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
+ {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
+ {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
+ {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
+ {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
+ {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
+ {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
+ {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
+ {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33
+ {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
+ {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
+ {{0xb34b9f1000000000ull, 0x00c097ce7bc90715ull}}, // 10^36
+ {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
+ {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
+};
+
+
+int estimate_bin_expon[] = {
+ 0, // 10^0
+ 3, // 10^1
+ 6, // 10^2
+ 9, // 10^3
+ 13, // 10^4
+ 16, // 10^5
+ 19, // 10^6
+ 23, // 10^7
+ 26, // 10^8
+ 29, // 10^9
+ 33, // 10^10
+ 36, // 10^11
+ 39, // 10^12
+ 43, // 10^13
+ 46, // 10^14
+ 49, // 10^15
+ 53 // 10^16
+};
+
+
+UINT64 power10_index_binexp[] = {
+ 0x000000000000000aull,
+ 0x000000000000000aull,
+ 0x000000000000000aull,
+ 0x000000000000000aull,
+ 0x0000000000000064ull,
+ 0x0000000000000064ull,
+ 0x0000000000000064ull,
+ 0x00000000000003e8ull,
+ 0x00000000000003e8ull,
+ 0x00000000000003e8ull,
+ 0x0000000000002710ull,
+ 0x0000000000002710ull,
+ 0x0000000000002710ull,
+ 0x0000000000002710ull,
+ 0x00000000000186a0ull,
+ 0x00000000000186a0ull,
+ 0x00000000000186a0ull,
+ 0x00000000000f4240ull,
+ 0x00000000000f4240ull,
+ 0x00000000000f4240ull,
+ 0x0000000000989680ull,
+ 0x0000000000989680ull,
+ 0x0000000000989680ull,
+ 0x0000000000989680ull,
+ 0x0000000005f5e100ull,
+ 0x0000000005f5e100ull,
+ 0x0000000005f5e100ull,
+ 0x000000003b9aca00ull,
+ 0x000000003b9aca00ull,
+ 0x000000003b9aca00ull,
+ 0x00000002540be400ull,
+ 0x00000002540be400ull,
+ 0x00000002540be400ull,
+ 0x00000002540be400ull,
+ 0x000000174876e800ull,
+ 0x000000174876e800ull,
+ 0x000000174876e800ull,
+ 0x000000e8d4a51000ull,
+ 0x000000e8d4a51000ull,
+ 0x000000e8d4a51000ull,
+ 0x000009184e72a000ull,
+ 0x000009184e72a000ull,
+ 0x000009184e72a000ull,
+ 0x000009184e72a000ull,
+ 0x00005af3107a4000ull,
+ 0x00005af3107a4000ull,
+ 0x00005af3107a4000ull,
+ 0x00038d7ea4c68000ull,
+ 0x00038d7ea4c68000ull,
+ 0x00038d7ea4c68000ull,
+ 0x002386f26fc10000ull,
+ 0x002386f26fc10000ull,
+ 0x002386f26fc10000ull,
+ 0x002386f26fc10000ull,
+ 0x016345785d8a0000ull,
+ 0x016345785d8a0000ull,
+ 0x016345785d8a0000ull,
+ 0x0de0b6b3a7640000ull,
+ 0x0de0b6b3a7640000ull,
+ 0x0de0b6b3a7640000ull,
+ 0x8ac7230489e80000ull,
+ 0x8ac7230489e80000ull,
+ 0x8ac7230489e80000ull,
+ 0x8ac7230489e80000ull
+};
+
+
+int short_recip_scale[] = {
+ 1,
+ 65 - 64,
+ 69 - 64,
+ 71 - 64,
+ 75 - 64,
+ 78 - 64,
+ 81 - 64,
+ 85 - 64,
+ 88 - 64,
+ 91 - 64,
+ 95 - 64,
+ 98 - 64,
+ 101 - 64,
+ 105 - 64,
+ 108 - 64,
+ 111 - 64,
+ 115 - 64, //114 - 64
+ 118 - 64
+};
+
+
+UINT64 reciprocals10_64[] = {
+ 1ull, // dummy value for 0 extra digits
+ 0x3333333333333334ull, // 1 extra digit
+ 0x51eb851eb851eb86ull,
+ 0x20c49ba5e353f7cfull,
+ 0x346dc5d63886594bull,
+ 0x29f16b11c6d1e109ull,
+ 0x218def416bdb1a6eull,
+ 0x35afe535795e90b0ull,
+ 0x2af31dc4611873c0ull,
+ 0x225c17d04dad2966ull,
+ 0x36f9bfb3af7b7570ull,
+ 0x2bfaffc2f2c92ac0ull,
+ 0x232f33025bd42233ull,
+ 0x384b84d092ed0385ull,
+ 0x2d09370d42573604ull,
+ 0x24075f3dceac2b37ull,
+ 0x39a5652fb1137857ull,
+ 0x2e1dea8c8da92d13ull
+};
+
+
+
+UINT128 power10_index_binexp_128[] = {
+ {{0x000000000000000aull, 0x0000000000000000ull}},
+ {{0x000000000000000aull, 0x0000000000000000ull}},
+ {{0x000000000000000aull, 0x0000000000000000ull}},
+ {{0x000000000000000aull, 0x0000000000000000ull}},
+ {{0x0000000000000064ull, 0x0000000000000000ull}},
+ {{0x0000000000000064ull, 0x0000000000000000ull}},
+ {{0x0000000000000064ull, 0x0000000000000000ull}},
+ {{0x00000000000003e8ull, 0x0000000000000000ull}},
+ {{0x00000000000003e8ull, 0x0000000000000000ull}},
+ {{0x00000000000003e8ull, 0x0000000000000000ull}},
+ {{0x0000000000002710ull, 0x0000000000000000ull}},
+ {{0x0000000000002710ull, 0x0000000000000000ull}},
+ {{0x0000000000002710ull, 0x0000000000000000ull}},
+ {{0x0000000000002710ull, 0x0000000000000000ull}},
+ {{0x00000000000186a0ull, 0x0000000000000000ull}},
+ {{0x00000000000186a0ull, 0x0000000000000000ull}},
+ {{0x00000000000186a0ull, 0x0000000000000000ull}},
+ {{0x00000000000f4240ull, 0x0000000000000000ull}},
+ {{0x00000000000f4240ull, 0x0000000000000000ull}},
+ {{0x00000000000f4240ull, 0x0000000000000000ull}},
+ {{0x0000000000989680ull, 0x0000000000000000ull}},
+ {{0x0000000000989680ull, 0x0000000000000000ull}},
+ {{0x0000000000989680ull, 0x0000000000000000ull}},
+ {{0x0000000000989680ull, 0x0000000000000000ull}},
+ {{0x0000000005f5e100ull, 0x0000000000000000ull}},
+ {{0x0000000005f5e100ull, 0x0000000000000000ull}},
+ {{0x0000000005f5e100ull, 0x0000000000000000ull}},
+ {{0x000000003b9aca00ull, 0x0000000000000000ull}},
+ {{0x000000003b9aca00ull, 0x0000000000000000ull}},
+ {{0x000000003b9aca00ull, 0x0000000000000000ull}},
+ {{0x00000002540be400ull, 0x0000000000000000ull}},
+ {{0x00000002540be400ull, 0x0000000000000000ull}},
+ {{0x00000002540be400ull, 0x0000000000000000ull}},
+ {{0x00000002540be400ull, 0x0000000000000000ull}},
+ {{0x000000174876e800ull, 0x0000000000000000ull}},
+ {{0x000000174876e800ull, 0x0000000000000000ull}},
+ {{0x000000174876e800ull, 0x0000000000000000ull}},
+ {{0x000000e8d4a51000ull, 0x0000000000000000ull}},
+ {{0x000000e8d4a51000ull, 0x0000000000000000ull}},
+ {{0x000000e8d4a51000ull, 0x0000000000000000ull}},
+ {{0x000009184e72a000ull, 0x0000000000000000ull}},
+ {{0x000009184e72a000ull, 0x0000000000000000ull}},
+ {{0x000009184e72a000ull, 0x0000000000000000ull}},
+ {{0x000009184e72a000ull, 0x0000000000000000ull}},
+ {{0x00005af3107a4000ull, 0x0000000000000000ull}},
+ {{0x00005af3107a4000ull, 0x0000000000000000ull}},
+ {{0x00005af3107a4000ull, 0x0000000000000000ull}},
+ {{0x00038d7ea4c68000ull, 0x0000000000000000ull}},
+ {{0x00038d7ea4c68000ull, 0x0000000000000000ull}},
+ {{0x00038d7ea4c68000ull, 0x0000000000000000ull}},
+ {{0x002386f26fc10000ull, 0x0000000000000000ull}},
+ {{0x002386f26fc10000ull, 0x0000000000000000ull}},
+ {{0x002386f26fc10000ull, 0x0000000000000000ull}},
+ {{0x002386f26fc10000ull, 0x0000000000000000ull}},
+ {{0x016345785d8a0000ull, 0x0000000000000000ull}},
+ {{0x016345785d8a0000ull, 0x0000000000000000ull}},
+ {{0x016345785d8a0000ull, 0x0000000000000000ull}},
+ {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}},
+ {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}},
+ {{0x0de0b6b3a7640000ull, 0x0000000000000000ull}},
+ {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
+ {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
+ {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
+ {{0x8ac7230489e80000ull, 0x0000000000000000ull}},
+ {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
+ {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
+ {{0x6bc75e2d63100000ull, 0x0000000000000005ull}}, // 10^20
+ {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
+ {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
+ {{0x35c9adc5dea00000ull, 0x0000000000000036ull}}, // 10^21
+ {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
+ {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
+ {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
+ {{0x19e0c9bab2400000ull, 0x000000000000021eull}}, // 10^22
+ {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
+ {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
+ {{0x02c7e14af6800000ull, 0x000000000000152dull}}, // 10^23
+ {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
+ {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
+ {{0x1bcecceda1000000ull, 0x000000000000d3c2ull}}, // 10^24
+ {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
+ {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
+ {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
+ {{0x161401484a000000ull, 0x0000000000084595ull}}, // 10^25
+ {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
+ {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
+ {{0xdcc80cd2e4000000ull, 0x000000000052b7d2ull}}, // 10^26
+ {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
+ {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
+ {{0x9fd0803ce8000000ull, 0x00000000033b2e3cull}}, // 10^27
+ {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
+ {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
+ {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
+ {{0x3e25026110000000ull, 0x00000000204fce5eull}}, // 10^28
+ {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
+ {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
+ {{0x6d7217caa0000000ull, 0x00000001431e0faeull}}, // 10^29
+ {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
+ {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
+ {{0x4674edea40000000ull, 0x0000000c9f2c9cd0ull}}, // 10^30
+ {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
+ {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
+ {{0xc0914b2680000000ull, 0x0000007e37be2022ull}}, // 10^31
+ {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
+ {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
+ {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
+ {{0x85acef8100000000ull, 0x000004ee2d6d415bull}}, // 10^32
+ {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33
+ {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33
+ {{0x38c15b0a00000000ull, 0x0000314dc6448d93ull}}, // 10^33, entry 112
+ {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
+ {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
+ {{0x378d8e6400000000ull, 0x0001ed09bead87c0ull}}, // 10^34
+ {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
+ {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
+ {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
+ {{0x2b878fe800000000ull, 0x0013426172c74d82ull}}, // 10^35
+ {{0xb34b9f1000000000ull, 0x00c097ce7bc90715ull}}, // 10^36
+ {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
+ {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
+ {{0x00f436a000000000ull, 0x0785ee10d5da46d9ull}}, // 10^37
+ {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
+ {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
+ {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
+ {{0x098a224000000000ull, 0x4b3b4ca85a86c47aull}}, // 10^38
+};
diff --git a/gcc-4.9/libgcc/config/libbid/bid_decimal_globals.c b/gcc-4.9/libgcc/config/libbid/bid_decimal_globals.c
new file mode 100644
index 000000000..d96bd01e7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_decimal_globals.c
@@ -0,0 +1,100 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+#include "bid_gcc_intrinsics.h"
+
+#if DECIMAL_GLOBAL_ROUNDING
+BID_THREAD _IDEC_round _IDEC_glbround = ROUNDING_TO_NEAREST;
+
+#if DECIMAL_GLOBAL_ROUNDING_ACCESS_FUNCTIONS
+void
+__dfp_set_round (int mode) {
+ _IDEC_glbround = mode;
+}
+
+int
+__dfp_get_round (void) {
+ return _IDEC_glbround;
+}
+#endif
+#endif
+
+#if DECIMAL_GLOBAL_EXCEPTION_FLAGS
+BID_THREAD _IDEC_flags _IDEC_glbflags = EXACT_STATUS;
+
+#if DECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS
+#include <fenv.h>
+
+void
+__dfp_clear_except (void) {
+ _IDEC_glbflags &= ~FLAG_MASK;
+}
+
+int
+__dfp_test_except (int mask) {
+ int flags = 0;
+
+ if ((_IDEC_glbflags & INEXACT_EXCEPTION) != 0)
+ flags |= mask & FE_INEXACT;
+ if ((_IDEC_glbflags & UNDERFLOW_EXCEPTION) != 0)
+ flags |= mask & FE_UNDERFLOW;
+ if ((_IDEC_glbflags & OVERFLOW_EXCEPTION) != 0)
+ flags |= mask & FE_OVERFLOW;
+ if ((_IDEC_glbflags & ZERO_DIVIDE_EXCEPTION) != 0)
+ flags |= mask & FE_DIVBYZERO;
+ if ((_IDEC_glbflags & INVALID_EXCEPTION) != 0)
+ flags |= mask & FE_INVALID;
+
+ return flags;
+}
+
+void
+__dfp_raise_except (int mask) {
+ _IDEC_flags flags = 0;
+
+ if ((mask & FE_INEXACT) != 0)
+ flags |= INEXACT_EXCEPTION;
+ if ((mask & FE_UNDERFLOW) != 0)
+ flags |= UNDERFLOW_EXCEPTION;
+ if ((mask & FE_OVERFLOW) != 0)
+ flags |= OVERFLOW_EXCEPTION;
+ if ((mask & FE_DIVBYZERO) != 0)
+ flags |= ZERO_DIVIDE_EXCEPTION;
+ if ((mask & FE_INVALID) != 0)
+ flags |= INVALID_EXCEPTION;
+
+ _IDEC_glbflags |= flags;
+}
+#endif
+#endif
+
+#if DECIMAL_ALTERNATE_EXCEPTION_HANDLING
+#if DECIMAL_GLOBAL_EXCEPTION_MASKS
+BID_THREAD _IDEC_exceptionmasks _IDEC_glbexceptionmasks =
+ _IDEC_allexcmasksset;
+#endif
+#if DECIMAL_GLOBAL_EXCEPTION_INFO
+BID_THREAD _IDEC_excepthandling _IDEC_glbexcepthandling;
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/bid_div_macros.h b/gcc-4.9/libgcc/config/libbid/bid_div_macros.h
new file mode 100644
index 000000000..e8404f364
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_div_macros.h
@@ -0,0 +1,540 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _DIV_MACROS_H_
+#define _DIV_MACROS_H_
+
+#include "bid_internal.h"
+
+#define FENCE __fence
+//#define FENCE
+
+//#define DOUBLE_EXTENDED_ON
+
+#if DOUBLE_EXTENDED_ON
+
+
+__BID_INLINE__ void
+__div_128_by_128 (UINT128 * pCQ, UINT128 * pCR, UINT128 CX, UINT128 CY) {
+ UINT128 CB, CB2, CB4, CB8, CQB, CA;
+ int_double d64, dm64, ds;
+ int_float t64;
+ double dx, dq, dqh;
+ BINARY80 lq, lx, ly;
+ UINT64 Rh, R, B2, B4, Ph, Ql, Ql2, carry, Qh;
+
+ if (!CY.w[1]) {
+ pCR->w[1] = 0;
+
+ if (!CX.w[1]) {
+ pCQ->w[0] = CX.w[0] / CY.w[0];
+ pCQ->w[1] = 0;
+ pCR->w[1] = 0;
+ pCR->w[0] = CX.w[0] - pCQ->w[0] * CY.w[0];
+ } else {
+
+ // This path works for CX<2^116 only
+
+ // 2^64
+ d64.i = 0x43f0000000000000;
+ // 2^64
+ dm64.i = 0x3bf0000000000000;
+ // 1.5*2^(-52)
+ ds.i = 0x3cb8000000000000;
+ dx = (BINARY80) CX.w[1] * d64.d + (BINARY80) CX.w[0];
+ dq = dx / (BINARY80) CY.w[0];
+ dq -= dq * (ds.d);
+ dqh = dq * dm64.d;
+ Qh = (UINT64) dqh;
+ Ql = (UINT64) (dq - ((double) Qh) * d64.d);
+
+ Rh = CX.w[0] - Ql * CY.w[0];
+ Ql2 = Rh / CY.w[0];
+ pCR->w[0] = Rh - Ql2 * CY.w[0];
+ __add_carry_out ((pCQ->w[0]), carry, Ql, Ql2);
+ pCQ->w[1] = Qh + carry;
+
+ }
+ return;
+ }
+ // now CY.w[1] > 0
+
+ // 2^64
+ t64.i = 0x5f800000;
+ lx = (BINARY80) CX.w[1] * (BINARY80) t64.d + (BINARY80) CX.w[0];
+ ly = (BINARY80) CY.w[1] * (BINARY80) t64.d + (BINARY80) CY.w[0];
+ lq = lx / ly;
+ pCQ->w[0] = (UINT64) lq;
+
+ pCQ->w[1] = 0;
+
+ if (!pCQ->w[0]) {
+ /*if(__unsigned_compare_ge_128(CX,CY))
+ {
+ pCQ->w[0] = 1;
+ __sub_128_128((*pCR), CX, CY);
+ }
+ else */
+ {
+ pCR->w[1] = CX.w[1];
+ pCR->w[0] = CX.w[0];
+ }
+ return;
+ }
+
+ if (CY.w[1] >= 16 || pCQ->w[0] <= 0x1000000000000000ull) {
+ pCQ->w[0] = (UINT64) lq - 1;
+ __mul_64x128_full (Ph, CQB, (pCQ->w[0]), CY);
+ __sub_128_128 (CA, CX, CQB);
+ if (__unsigned_compare_ge_128 (CA, CY)) {
+ __sub_128_128 (CA, CA, CY);
+ pCQ->w[0]++;
+ if (__unsigned_compare_ge_128 (CA, CY)) {
+ __sub_128_128 (CA, CA, CY);
+ pCQ->w[0]++;
+ }
+ }
+ pCR->w[1] = CA.w[1];
+ pCR->w[0] = CA.w[0];
+ } else {
+ pCQ->w[0] = (UINT64) lq - 6;
+
+ __mul_64x128_full (Ph, CQB, (pCQ->w[0]), CY);
+ __sub_128_128 (CA, CX, CQB);
+
+ CB8.w[1] = (CY.w[1] << 3) | (CY.w[0] >> 61);
+ CB8.w[0] = CY.w[0] << 3;
+ CB4.w[1] = (CY.w[1] << 2) | (CY.w[0] >> 62);
+ CB4.w[0] = CY.w[0] << 2;
+ CB2.w[1] = (CY.w[1] << 1) | (CY.w[0] >> 63);
+ CB2.w[0] = CY.w[0] << 1;
+
+ if (__unsigned_compare_ge_128 (CA, CB8)) {
+ pCQ->w[0] += 8;
+ __sub_128_128 (CA, CA, CB8);
+ }
+ if (__unsigned_compare_ge_128 (CA, CB4)) {
+ pCQ->w[0] += 4;
+ __sub_128_128 (CA, CA, CB4);
+ }
+ if (__unsigned_compare_ge_128 (CA, CB2)) {
+ pCQ->w[0] += 2;
+ __sub_128_128 (CA, CA, CB2);
+ }
+ if (__unsigned_compare_ge_128 (CA, CY)) {
+ pCQ->w[0] += 1;
+ __sub_128_128 (CA, CA, CY);
+ }
+
+ pCR->w[1] = CA.w[1];
+ pCR->w[0] = CA.w[0];
+ }
+}
+
+
+
+
+
+
+__BID_INLINE__ void
+__div_256_by_128 (UINT128 * pCQ, UINT256 * pCA4, UINT128 CY) {
+ UINT256 CQ2Y;
+ UINT128 CQ2, CQ3Y;
+ UINT64 Q3, carry64;
+ int_double d64;
+ BINARY80 lx, ly, lq, l64, l128;
+
+ // 2^64
+ d64.i = 0x43f0000000000000ull;
+ l64 = (BINARY80) d64.d;
+ // 2^128
+ l128 = l64 * l64;
+
+ lx =
+ ((BINARY80) (*pCA4).w[3] * l64 +
+ (BINARY80) (*pCA4).w[2]) * l128 +
+ (BINARY80) (*pCA4).w[1] * l64 + (BINARY80) (*pCA4).w[0];
+ ly = (BINARY80) CY.w[1] * l128 + (BINARY80) CY.w[0] * l64;
+
+ lq = lx / ly;
+ CQ2.w[1] = (UINT64) lq;
+ lq = (lq - CQ2.w[1]) * l64;
+ CQ2.w[0] = (UINT64) lq;
+
+ // CQ2*CY
+ __mul_128x128_to_256 (CQ2Y, CY, CQ2);
+
+ // CQ2Y <= (*pCA4) ?
+ if (CQ2Y.w[3] < (*pCA4).w[3]
+ || (CQ2Y.w[3] == (*pCA4).w[3]
+ && (CQ2Y.w[2] < (*pCA4).w[2]
+ || (CQ2Y.w[2] == (*pCA4).w[2]
+ && (CQ2Y.w[1] < (*pCA4).w[1]
+ || (CQ2Y.w[1] == (*pCA4).w[1]
+ && (CQ2Y.w[0] <= (*pCA4).w[0]))))))) {
+
+ // (*pCA4) -CQ2Y, guaranteed below 5*2^49*CY < 5*2^(49+128)
+ __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CQ2Y.w[0]);
+ __sub_borrow_in_out ((*pCA4).w[1], carry64, (*pCA4).w[1], CQ2Y.w[1],
+ carry64);
+ (*pCA4).w[2] = (*pCA4).w[2] - CQ2Y.w[2] - carry64;
+
+ lx = ((BINARY80) (*pCA4).w[2] * l128 +
+ ((BINARY80) (*pCA4).w[1] * l64 +
+ (BINARY80) (*pCA4).w[0])) * l64;
+ lq = lx / ly;
+ Q3 = (UINT64) lq;
+
+ if (Q3) {
+ Q3--;
+ __mul_64x128_short (CQ3Y, Q3, CY);
+ __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CQ3Y.w[0]);
+ (*pCA4).w[1] = (*pCA4).w[1] - CQ3Y.w[1] - carry64;
+
+ if ((*pCA4).w[1] > CY.w[1]
+ || ((*pCA4).w[1] == CY.w[1] && (*pCA4).w[0] >= CY.w[0])) {
+ Q3++;
+ __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]);
+ (*pCA4).w[1] = (*pCA4).w[1] - CY.w[1] - carry64;
+ if ((*pCA4).w[1] > CY.w[1]
+ || ((*pCA4).w[1] == CY.w[1] && (*pCA4).w[0] >= CY.w[0])) {
+ Q3++;
+ __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0],
+ CY.w[0]);
+ (*pCA4).w[1] = (*pCA4).w[1] - CY.w[1] - carry64;
+ }
+ }
+ // add Q3 to Q2
+ __add_carry_out (CQ2.w[0], carry64, Q3, CQ2.w[0]);
+ CQ2.w[1] += carry64;
+ }
+ } else {
+ // CQ2Y - (*pCA4), guaranteed below 5*2^(49+128)
+ __sub_borrow_out ((*pCA4).w[0], carry64, CQ2Y.w[0], (*pCA4).w[0]);
+ __sub_borrow_in_out ((*pCA4).w[1], carry64, CQ2Y.w[1], (*pCA4).w[1],
+ carry64);
+ (*pCA4).w[2] = CQ2Y.w[2] - (*pCA4).w[2] - carry64;
+
+ lx =
+ ((BINARY80) (*pCA4).w[2] * l128 +
+ (BINARY80) (*pCA4).w[1] * l64 + (BINARY80) (*pCA4).w[0]) * l64;
+ lq = lx / ly;
+ Q3 = 1 + (UINT64) lq;
+
+ __mul_64x128_short (CQ3Y, Q3, CY);
+ __sub_borrow_out ((*pCA4).w[0], carry64, CQ3Y.w[0], (*pCA4).w[0]);
+ (*pCA4).w[1] = CQ3Y.w[1] - (*pCA4).w[1] - carry64;
+
+ if ((SINT64) (*pCA4).w[1] > (SINT64) CY.w[1]
+ || ((*pCA4).w[1] == CY.w[1] && (*pCA4).w[0] >= CY.w[0])) {
+ Q3--;
+ __sub_borrow_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]);
+ (*pCA4).w[1] = (*pCA4).w[1] - CY.w[1] - carry64;
+ } else if ((SINT64) (*pCA4).w[1] < 0) {
+ Q3++;
+ __add_carry_out ((*pCA4).w[0], carry64, (*pCA4).w[0], CY.w[0]);
+ (*pCA4).w[1] = (*pCA4).w[1] + CY.w[1] + carry64;
+ }
+ // subtract Q3 from Q2
+ __sub_borrow_out (CQ2.w[0], carry64, CQ2.w[0], Q3);
+ CQ2.w[1] -= carry64;
+ }
+
+ // (*pCQ) + CQ2 + carry
+ __add_carry_out ((*pCQ).w[0], carry64, CQ2.w[0], (*pCQ).w[0]);
+ (*pCQ).w[1] = (*pCQ).w[1] + CQ2.w[1] + carry64;
+
+
+}
+#else
+
+__BID_INLINE__ void
+__div_128_by_128 (UINT128 * pCQ, UINT128 * pCR, UINT128 CX0, UINT128 CY) {
+ UINT128 CY36, CY51, CQ, A2, CX, CQT;
+ UINT64 Q;
+ int_double t64, d49, d60;
+ double lx, ly, lq;
+
+ if (!CX0.w[1] && !CY.w[1]) {
+ pCQ->w[0] = CX0.w[0] / CY.w[0];
+ pCQ->w[1] = 0;
+ pCR->w[1] = pCR->w[0] = 0;
+ pCR->w[0] = CX0.w[0] - pCQ->w[0] * CY.w[0];
+ return;
+ }
+
+ CX.w[1] = CX0.w[1];
+ CX.w[0] = CX0.w[0];
+
+ // 2^64
+ t64.i = 0x43f0000000000000ull;
+ lx = (double) CX.w[1] * t64.d + (double) CX.w[0];
+ ly = (double) CY.w[1] * t64.d + (double) CY.w[0];
+ lq = lx / ly;
+
+ CY36.w[1] = CY.w[0] >> (64 - 36);
+ CY36.w[0] = CY.w[0] << 36;
+
+ CQ.w[1] = CQ.w[0] = 0;
+
+ // Q >= 2^100 ?
+ if (!CY.w[1] && !CY36.w[1] && (CX.w[1] >= CY36.w[0])) {
+ // then Q >= 2^100
+
+ // 2^(-60)*CX/CY
+ d60.i = 0x3c30000000000000ull;
+ lq *= d60.d;
+ Q = (UINT64) lq - 4ull;
+
+ // Q*CY
+ __mul_64x64_to_128 (A2, Q, CY.w[0]);
+
+ // A2 <<= 60
+ A2.w[1] = (A2.w[1] << 60) | (A2.w[0] >> (64 - 60));
+ A2.w[0] <<= 60;
+
+ __sub_128_128 (CX, CX, A2);
+
+ lx = (double) CX.w[1] * t64.d + (double) CX.w[0];
+ lq = lx / ly;
+
+ CQ.w[1] = Q >> (64 - 60);
+ CQ.w[0] = Q << 60;
+ }
+
+
+ CY51.w[1] = (CY.w[1] << 51) | (CY.w[0] >> (64 - 51));
+ CY51.w[0] = CY.w[0] << 51;
+
+ if (CY.w[1] < (UINT64) (1 << (64 - 51))
+ && (__unsigned_compare_gt_128 (CX, CY51))) {
+ // Q > 2^51
+
+ // 2^(-49)*CX/CY
+ d49.i = 0x3ce0000000000000ull;
+ lq *= d49.d;
+
+ Q = (UINT64) lq - 1ull;
+
+ // Q*CY
+ __mul_64x64_to_128 (A2, Q, CY.w[0]);
+ A2.w[1] += Q * CY.w[1];
+
+ // A2 <<= 49
+ A2.w[1] = (A2.w[1] << 49) | (A2.w[0] >> (64 - 49));
+ A2.w[0] <<= 49;
+
+ __sub_128_128 (CX, CX, A2);
+
+ CQT.w[1] = Q >> (64 - 49);
+ CQT.w[0] = Q << 49;
+ __add_128_128 (CQ, CQ, CQT);
+
+ lx = (double) CX.w[1] * t64.d + (double) CX.w[0];
+ lq = lx / ly;
+ }
+
+ Q = (UINT64) lq;
+
+ __mul_64x64_to_128 (A2, Q, CY.w[0]);
+ A2.w[1] += Q * CY.w[1];
+
+ __sub_128_128 (CX, CX, A2);
+ if ((SINT64) CX.w[1] < 0) {
+ Q--;
+ CX.w[0] += CY.w[0];
+ if (CX.w[0] < CY.w[0])
+ CX.w[1]++;
+ CX.w[1] += CY.w[1];
+ if ((SINT64) CX.w[1] < 0) {
+ Q--;
+ CX.w[0] += CY.w[0];
+ if (CX.w[0] < CY.w[0])
+ CX.w[1]++;
+ CX.w[1] += CY.w[1];
+ }
+ } else if (__unsigned_compare_ge_128 (CX, CY)) {
+ Q++;
+ __sub_128_128 (CX, CX, CY);
+ }
+
+ __add_128_64 (CQ, CQ, Q);
+
+
+ pCQ->w[1] = CQ.w[1];
+ pCQ->w[0] = CQ.w[0];
+ pCR->w[1] = CX.w[1];
+ pCR->w[0] = CX.w[0];
+ return;
+}
+
+
+__BID_INLINE__ void
+__div_256_by_128 (UINT128 * pCQ, UINT256 * pCA4, UINT128 CY) {
+ UINT256 CA4, CA2, CY51, CY36;
+ UINT128 CQ, A2, A2h, CQT;
+ UINT64 Q, carry64;
+ int_double t64, d49, d60;
+ double lx, ly, lq, d128, d192;
+
+ // the quotient is assumed to be at most 113 bits,
+ // as needed by BID128 divide routines
+
+ // initial dividend
+ CA4.w[3] = (*pCA4).w[3];
+ CA4.w[2] = (*pCA4).w[2];
+ CA4.w[1] = (*pCA4).w[1];
+ CA4.w[0] = (*pCA4).w[0];
+ CQ.w[1] = (*pCQ).w[1];
+ CQ.w[0] = (*pCQ).w[0];
+
+ // 2^64
+ t64.i = 0x43f0000000000000ull;
+ d128 = t64.d * t64.d;
+ d192 = d128 * t64.d;
+ lx = (double) CA4.w[3] * d192 + ((double) CA4.w[2] * d128 +
+ ((double) CA4.w[1] * t64.d +
+ (double) CA4.w[0]));
+ ly = (double) CY.w[1] * t64.d + (double) CY.w[0];
+ lq = lx / ly;
+
+ CY36.w[2] = CY.w[1] >> (64 - 36);
+ CY36.w[1] = (CY.w[1] << 36) | (CY.w[0] >> (64 - 36));
+ CY36.w[0] = CY.w[0] << 36;
+
+ CQ.w[1] = (*pCQ).w[1];
+ CQ.w[0] = (*pCQ).w[0];
+
+ // Q >= 2^100 ?
+ if (CA4.w[3] > CY36.w[2]
+ || (CA4.w[3] == CY36.w[2]
+ && (CA4.w[2] > CY36.w[1]
+ || (CA4.w[2] == CY36.w[1] && CA4.w[1] >= CY36.w[0])))) {
+ // 2^(-60)*CA4/CY
+ d60.i = 0x3c30000000000000ull;
+ lq *= d60.d;
+ Q = (UINT64) lq - 4ull;
+
+ // Q*CY
+ __mul_64x128_to_192 (CA2, Q, CY);
+
+ // CA2 <<= 60
+ // CA2.w[3] = CA2.w[2] >> (64-60);
+ CA2.w[2] = (CA2.w[2] << 60) | (CA2.w[1] >> (64 - 60));
+ CA2.w[1] = (CA2.w[1] << 60) | (CA2.w[0] >> (64 - 60));
+ CA2.w[0] <<= 60;
+
+ // CA4 -= CA2
+ __sub_borrow_out (CA4.w[0], carry64, CA4.w[0], CA2.w[0]);
+ __sub_borrow_in_out (CA4.w[1], carry64, CA4.w[1], CA2.w[1],
+ carry64);
+ CA4.w[2] = CA4.w[2] - CA2.w[2] - carry64;
+
+ lx = ((double) CA4.w[2] * d128 +
+ ((double) CA4.w[1] * t64.d + (double) CA4.w[0]));
+ lq = lx / ly;
+
+ CQT.w[1] = Q >> (64 - 60);
+ CQT.w[0] = Q << 60;
+ __add_128_128 (CQ, CQ, CQT);
+ }
+
+ CY51.w[2] = CY.w[1] >> (64 - 51);
+ CY51.w[1] = (CY.w[1] << 51) | (CY.w[0] >> (64 - 51));
+ CY51.w[0] = CY.w[0] << 51;
+
+ if (CA4.w[2] > CY51.w[2] || ((CA4.w[2] == CY51.w[2])
+ &&
+ (__unsigned_compare_gt_128 (CA4, CY51))))
+ {
+ // Q > 2^51
+
+ // 2^(-49)*CA4/CY
+ d49.i = 0x3ce0000000000000ull;
+ lq *= d49.d;
+
+ Q = (UINT64) lq - 1ull;
+
+ // Q*CY
+ __mul_64x64_to_128 (A2, Q, CY.w[0]);
+ __mul_64x64_to_128 (A2h, Q, CY.w[1]);
+ A2.w[1] += A2h.w[0];
+ if (A2.w[1] < A2h.w[0])
+ A2h.w[1]++;
+
+ // A2 <<= 49
+ CA2.w[2] = (A2h.w[1] << 49) | (A2.w[1] >> (64 - 49));
+ CA2.w[1] = (A2.w[1] << 49) | (A2.w[0] >> (64 - 49));
+ CA2.w[0] = A2.w[0] << 49;
+
+ __sub_borrow_out (CA4.w[0], carry64, CA4.w[0], CA2.w[0]);
+ __sub_borrow_in_out (CA4.w[1], carry64, CA4.w[1], CA2.w[1],
+ carry64);
+ CA4.w[2] = CA4.w[2] - CA2.w[2] - carry64;
+
+ CQT.w[1] = Q >> (64 - 49);
+ CQT.w[0] = Q << 49;
+ __add_128_128 (CQ, CQ, CQT);
+
+ lx = ((double) CA4.w[2] * d128 +
+ ((double) CA4.w[1] * t64.d + (double) CA4.w[0]));
+ lq = lx / ly;
+ }
+
+ Q = (UINT64) lq;
+ __mul_64x64_to_128 (A2, Q, CY.w[0]);
+ A2.w[1] += Q * CY.w[1];
+
+ __sub_128_128 (CA4, CA4, A2);
+ if ((SINT64) CA4.w[1] < 0) {
+ Q--;
+ CA4.w[0] += CY.w[0];
+ if (CA4.w[0] < CY.w[0])
+ CA4.w[1]++;
+ CA4.w[1] += CY.w[1];
+ if ((SINT64) CA4.w[1] < 0) {
+ Q--;
+ CA4.w[0] += CY.w[0];
+ if (CA4.w[0] < CY.w[0])
+ CA4.w[1]++;
+ CA4.w[1] += CY.w[1];
+ }
+ } else if (__unsigned_compare_ge_128 (CA4, CY)) {
+ Q++;
+ __sub_128_128 (CA4, CA4, CY);
+ }
+
+ __add_128_64 (CQ, CQ, Q);
+
+ pCQ->w[1] = CQ.w[1];
+ pCQ->w[0] = CQ.w[0];
+ pCA4->w[1] = CA4.w[1];
+ pCA4->w[0] = CA4.w[0];
+ return;
+
+
+
+}
+
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/bid_dpd.c b/gcc-4.9/libgcc/config/libbid/bid_dpd.c
new file mode 100644
index 000000000..69184968b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_dpd.c
@@ -0,0 +1,782 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define DECNUMDIGITS 34 // work with up to 34 digits
+
+#include "bid_internal.h"
+#include "bid_b2d.h"
+
+UINT32
+bid_to_bid32 (UINT32 ba) {
+ UINT32 res;
+ UINT32 sign, comb, exp;
+ UINT32 trailing;
+ UINT32 bcoeff;
+
+ sign = (ba & 0x80000000ul);
+ comb = (ba & 0x7ff00000ul) >> 20;
+ trailing = (ba & 0x000ffffful);
+
+ if ((comb & 0x780) == 0x780) {
+ ba &= 0xfff0000ul;
+ return ba;
+ } else {
+ if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0xff;
+ bcoeff = ((8 + (comb & 1)) << 20) | trailing;
+ } else {
+ exp = (comb >> 3) & 0xff;
+ bcoeff = ((comb & 7) << 20) | trailing;
+ }
+ if (bcoeff >= 10000000)
+ bcoeff = 0;
+ res = very_fast_get_BID32 (sign, exp, bcoeff);
+ }
+ return res;
+}
+
+UINT64
+bid_to_bid64 (UINT64 ba) {
+ UINT64 res;
+ UINT64 sign, comb, exp;
+ UINT64 trailing;
+ UINT64 bcoeff;
+
+ sign = (ba & 0x8000000000000000ull);
+ comb = (ba & 0x7ffc000000000000ull) >> 50;
+ trailing = (ba & 0x0003ffffffffffffull);
+
+ if ((comb & 0x1e00) == 0x1e00) {
+ ba &= 0xfff000000000000ULL;
+ return ba;
+ } else {
+ if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0x3ff;
+ bcoeff = ((8 + (comb & 1)) << 50) | trailing;
+ } else {
+ exp = (comb >> 3) & 0x3ff;
+ bcoeff = ((comb & 7) << 50) | trailing;
+ }
+ if (bcoeff >= 10000000000000000ull)
+ bcoeff = 0ull;
+ res = very_fast_get_BID64 (sign, exp, bcoeff);
+ }
+ return res;
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid_to_dpd32 (UINT32 * pres, UINT32 * pba) {
+ UINT32 ba = *pba;
+#else
+UINT32
+bid_to_dpd32 (UINT32 ba) {
+#endif
+ UINT32 res;
+
+ UINT32 sign, comb, exp, trailing;
+ UINT32 b0, b1, b2;
+ UINT32 bcoeff, dcoeff;
+ UINT32 nanb = 0;
+
+ sign = (ba & 0x80000000);
+ comb = (ba & 0x7ff00000) >> 20;
+ trailing = (ba & 0xfffff);
+
+ // Detect infinity, and return canonical infinity
+ if ((comb & 0x7c0) == 0x780) {
+ res = sign | 0x78000000;
+ BID_RETURN (res);
+ // Detect NaN, and canonicalize trailing
+ } else if ((comb & 0x7c0) == 0x7c0) {
+ if (trailing > 999999)
+ trailing = 0;
+ nanb = ba & 0xfe000000;
+ exp = 0;
+ bcoeff = trailing;
+ } else { // Normal number
+ if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0xff;
+ bcoeff = ((8 + (comb & 1)) << 20) | trailing;
+ } else {
+ exp = (comb >> 3) & 0xff;
+ bcoeff = ((comb & 7) << 20) | trailing;
+ }
+ // Zero the coefficient if non-canonical (>= 10^7)
+ if (bcoeff >= 10000000)
+ bcoeff = 0;
+ }
+
+ b0 = bcoeff / 1000000;
+ b1 = (bcoeff / 1000) % 1000;
+ b2 = bcoeff % 1000;
+ dcoeff = (b2d[b1] << 10) | b2d[b2];
+
+ if (b0 >= 8) // is b0 8 or 9?
+ res =
+ sign |
+ ((0x600 | ((exp >> 6) << 7) | ((b0 & 1) << 6) | (exp & 0x3f)) <<
+ 20) | dcoeff;
+ else // else b0 is 0..7
+ res =
+ sign | ((((exp >> 6) << 9) | (b0 << 6) | (exp & 0x3f)) << 20) |
+ dcoeff;
+
+ res |= nanb;
+
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid_to_dpd64 (UINT64 * pres, UINT64 * pba) {
+ UINT64 ba = *pba;
+#else
+UINT64
+bid_to_dpd64 (UINT64 ba) {
+#endif
+ UINT64 res;
+
+ UINT64 sign, comb, exp;
+ UINT64 trailing;
+ UINT32 b0, b1, b2, b3, b4, b5;
+ UINT64 bcoeff;
+ UINT64 dcoeff;
+ UINT32 yhi, ylo;
+ UINT64 nanb = 0;
+
+//printf("arg bid "FMT_LLX16" \n", ba);
+ sign = (ba & 0x8000000000000000ull);
+ comb = (ba & 0x7ffc000000000000ull) >> 50;
+ trailing = (ba & 0x0003ffffffffffffull);
+
+ // Detect infinity, and return canonical infinity
+ if ((comb & 0x1f00) == 0x1e00) {
+ res = sign | 0x7800000000000000ull;
+ BID_RETURN (res);
+ // Detect NaN, and canonicalize trailing
+ } else if ((comb & 0x1e00) == 0x1e00) {
+ if (trailing > 999999999999999ull)
+ trailing = 0;
+ nanb = ba & 0xfe00000000000000ull;
+ exp = 0;
+ bcoeff = trailing;
+ } else { // Normal number
+ if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0x3ff;
+ bcoeff = ((8 + (comb & 1)) << 50) | trailing;
+ } else {
+ exp = (comb >> 3) & 0x3ff;
+ bcoeff = ((comb & 7) << 50) | trailing;
+ }
+
+ // Zero the coefficient if it is non-canonical (>= 10^16)
+ if (bcoeff >= 10000000000000000ull)
+ bcoeff = 0;
+ }
+
+// Floor(2^61 / 10^9)
+#define D61 (2305843009ull)
+
+// Multipy the binary coefficient by ceil(2^64 / 1000), and take the upper
+// 64-bits in order to compute a division by 1000.
+
+#if 1
+ yhi =
+ ((UINT64) D61 *
+ (UINT64) (UINT32) (bcoeff >> (UINT64) 27)) >> (UINT64) 34;
+ ylo = bcoeff - 1000000000ull * yhi;
+ if (ylo >= 1000000000) {
+ ylo = ylo - 1000000000;
+ yhi = yhi + 1;
+ }
+#else
+ yhi = bcoeff / 1000000000ull;
+ ylo = bcoeff % 1000000000ull;
+#endif
+
+ // yhi = ABBBCCC ylo = DDDEEEFFF
+ b5 = ylo % 1000; // b5 = FFF
+ b3 = ylo / 1000000; // b3 = DDD
+ b4 = (ylo / 1000) - (1000 * b3); // b4 = EEE
+ b2 = yhi % 1000; // b2 = CCC
+ b0 = yhi / 1000000; // b0 = A
+ b1 = (yhi / 1000) - (1000 * b0); // b1 = BBB
+
+ dcoeff = b2d[b5] | b2d2[b4] | b2d3[b3] | b2d4[b2] | b2d5[b1];
+
+ if (b0 >= 8) // is b0 8 or 9?
+ res =
+ sign |
+ ((0x1800 | ((exp >> 8) << 9) | ((b0 & 1) << 8) | (exp & 0xff)) <<
+ 50) | dcoeff;
+ else // else b0 is 0..7
+ res =
+ sign | ((((exp >> 8) << 11) | (b0 << 8) | (exp & 0xff)) << 50) |
+ dcoeff;
+
+ res |= nanb;
+
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+dpd_to_bid32 (UINT32 * pres, UINT32 * pda) {
+ UINT32 da = *pda;
+#else
+UINT32
+dpd_to_bid32 (UINT32 da) {
+#endif
+ UINT32 in = *(UINT32 *) & da;
+ UINT32 res;
+
+ UINT32 sign, comb, exp;
+ UINT32 trailing;
+ UINT32 d0 = 0, d1, d2;
+ UINT64 bcoeff;
+ UINT32 nanb = 0;
+
+ sign = (in & 0x80000000);
+ comb = (in & 0x7ff00000) >> 20;
+ trailing = (in & 0x000fffff);
+
+ if ((comb & 0x7e0) == 0x780) { // G0..G4 = 1111 -> Inf
+ res = in & 0xf8000000;
+ BID_RETURN (res);
+ } else if ((comb & 0x7c0) == 0x7c0) { // G0..G5 = 11111 -> NaN
+ nanb = in & 0xfe000000;
+ exp = 0;
+ } else { // Normal number
+ if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> d0 = 8 + G4
+ d0 = ((comb >> 6) & 1) | 8;
+ exp = ((comb & 0x180) >> 1) | (comb & 0x3f);
+ } else {
+ d0 = (comb >> 6) & 0x7;
+ exp = ((comb & 0x600) >> 3) | (comb & 0x3f);
+ }
+ }
+ d1 = d2b2[(trailing >> 10) & 0x3ff];
+ d2 = d2b[(trailing) & 0x3ff];
+
+ bcoeff = d2 + d1 + (1000000 * d0);
+ if (bcoeff < 0x800000) {
+ res = (exp << 23) | bcoeff | sign;
+ } else {
+ res = (exp << 21) | sign | 0x60000000 | (bcoeff & 0x1fffff);
+ }
+
+ res |= nanb;
+
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+dpd_to_bid64 (UINT64 * pres, UINT64 * pda) {
+ UINT64 da = *pda;
+#else
+UINT64
+dpd_to_bid64 (UINT64 da) {
+#endif
+ UINT64 in = *(UINT64 *) & da;
+ UINT64 res;
+
+ UINT64 sign, comb, exp;
+ UINT64 trailing;
+ // UINT64 d0, d1, d2, d3, d4, d5;
+
+ UINT64 d1, d2;
+ UINT32 d0, d3, d4, d5;
+ UINT64 bcoeff;
+ UINT64 nanb = 0;
+
+//printf("arg dpd "FMT_LLX16" \n", in);
+ sign = (in & 0x8000000000000000ull);
+ comb = (in & 0x7ffc000000000000ull) >> 50;
+ trailing = (in & 0x0003ffffffffffffull);
+
+ if ((comb & 0x1f00) == 0x1e00) { // G0..G4 = 1111 -> Inf
+ res = in & 0xf800000000000000ull;
+ BID_RETURN (res);
+ } else if ((comb & 0x1f00) == 0x1f00) { // G0..G5 = 11111 -> NaN
+ nanb = in & 0xfe00000000000000ull;
+ exp = 0;
+ d0 = 0;
+ } else { // Normal number
+ if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> d0 = 8 + G4
+ d0 = ((comb >> 8) & 1) | 8;
+ // d0 = (comb & 0x0100 ? 9 : 8);
+ exp = (comb & 0x600) >> 1;
+ // exp = (comb & 0x0400 ? 1 : 0) * 0x200 + (comb & 0x0200 ? 1 : 0) * 0x100; // exp leading bits are G2..G3
+ } else {
+ d0 = (comb >> 8) & 0x7;
+ exp = (comb & 0x1800) >> 3;
+ // exp = (comb & 0x1000 ? 1 : 0) * 0x200 + (comb & 0x0800 ? 1 : 0) * 0x100; // exp loading bits are G0..G1
+ }
+ }
+ d1 = d2b5[(trailing >> 40) & 0x3ff];
+ d2 = d2b4[(trailing >> 30) & 0x3ff];
+ d3 = d2b3[(trailing >> 20) & 0x3ff];
+ d4 = d2b2[(trailing >> 10) & 0x3ff];
+ d5 = d2b[(trailing) & 0x3ff];
+
+ bcoeff = (d5 + d4 + d3) + d2 + d1 + (1000000000000000ull * d0);
+ exp += (comb & 0xff);
+ res = very_fast_get_BID64 (sign, exp, bcoeff);
+
+ res |= nanb;
+
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid_to_dpd128 (UINT128 * pres, UINT128 * pba) {
+ UINT128 ba = *pba;
+#else
+UINT128
+bid_to_dpd128 (UINT128 ba) {
+#endif
+ UINT128 res;
+
+ UINT128 sign;
+ UINT32 comb, exp;
+ UINT128 trailing;
+ UINT128 d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11;
+ UINT128 bcoeff;
+ UINT128 dcoeff;
+ UINT64 nanb = 0;
+
+ sign.w[1] = (ba.w[HIGH_128W] & 0x8000000000000000ull);
+ sign.w[0] = 0;
+ comb = (ba.w[HIGH_128W] & 0x7fffc00000000000ull) >> 46;
+ trailing.w[1] = (ba.w[HIGH_128W] & 0x00003fffffffffffull);
+ trailing.w[0] = ba.w[LOW_128W];
+ exp = 0;
+
+ if ((comb & 0x1f000) == 0x1e000) { // G0..G4 = 1111 -> Inf
+ res.w[HIGH_128W] = ba.w[HIGH_128W] & 0xf800000000000000ull;
+ res.w[LOW_128W] = 0;
+ BID_RETURN (res);
+ // Detect NaN, and canonicalize trailing
+ } else if ((comb & 0x1f000) == 0x1f000) {
+ if ((trailing.w[1] > 0x0000314dc6448d93ULL) || // significand is non-canonical
+ ((trailing.w[1] == 0x0000314dc6448d93ULL)
+ && (trailing.w[0] >= 0x38c15b0a00000000ULL))
+ // significand is non-canonical
+ ) {
+ trailing.w[1] = trailing.w[0] = 0ull;
+ }
+ bcoeff.w[1] = trailing.w[1];
+ bcoeff.w[0] = trailing.w[0];
+ nanb = ba.w[HIGH_128W] & 0xfe00000000000000ull;
+ exp = 0;
+ } else { // Normal number
+ if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0x3fff;
+ bcoeff.w[1] =
+ ((UINT64) (8 + (comb & 1)) << (UINT64) 46) | trailing.w[1];
+ bcoeff.w[0] = trailing.w[0];
+ } else {
+ exp = (comb >> 3) & 0x3fff;
+ bcoeff.w[1] =
+ ((UINT64) (comb & 7) << (UINT64) 46) | trailing.w[1];
+ bcoeff.w[0] = trailing.w[0];
+ }
+ // Zero the coefficient if non-canonical (>= 10^34)
+ if (bcoeff.w[1] > 0x1ed09bead87c0ull ||
+ (bcoeff.w[1] == 0x1ed09bead87c0ull
+ && bcoeff.w[0] >= 0x378D8E6400000000ull)) {
+ bcoeff.w[0] = bcoeff.w[1] = 0;
+ }
+ }
+ // Constant 2^128 / 1000 + 1
+ {
+ UINT128 t;
+ UINT64 t2;
+ UINT128 d1000;
+ UINT128 b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1;
+ d1000.w[1] = 0x4189374BC6A7EFull;
+ d1000.w[0] = 0x9DB22D0E56041894ull;
+ __mul_128x128_high (b11, bcoeff, d1000);
+ __mul_128x128_high (b10, b11, d1000);
+ __mul_128x128_high (b9, b10, d1000);
+ __mul_128x128_high (b8, b9, d1000);
+ __mul_128x128_high (b7, b8, d1000);
+ __mul_128x128_high (b6, b7, d1000);
+ __mul_128x128_high (b5, b6, d1000);
+ __mul_128x128_high (b4, b5, d1000);
+ __mul_128x128_high (b3, b4, d1000);
+ __mul_128x128_high (b2, b3, d1000);
+ __mul_128x128_high (b1, b2, d1000);
+
+
+ __mul_64x128_full (t2, t, 1000ull, b11);
+ __sub_128_128 (d11, bcoeff, t);
+ __mul_64x128_full (t2, t, 1000ull, b10);
+ __sub_128_128 (d10, b11, t);
+ __mul_64x128_full (t2, t, 1000ull, b9);
+ __sub_128_128 (d9, b10, t);
+ __mul_64x128_full (t2, t, 1000ull, b8);
+ __sub_128_128 (d8, b9, t);
+ __mul_64x128_full (t2, t, 1000ull, b7);
+ __sub_128_128 (d7, b8, t);
+ __mul_64x128_full (t2, t, 1000ull, b6);
+ __sub_128_128 (d6, b7, t);
+ __mul_64x128_full (t2, t, 1000ull, b5);
+ __sub_128_128 (d5, b6, t);
+ __mul_64x128_full (t2, t, 1000ull, b4);
+ __sub_128_128 (d4, b5, t);
+ __mul_64x128_full (t2, t, 1000ull, b3);
+ __sub_128_128 (d3, b4, t);
+ __mul_64x128_full (t2, t, 1000ull, b2);
+ __sub_128_128 (d2, b3, t);
+ __mul_64x128_full (t2, t, 1000ull, b1);
+ __sub_128_128 (d1, b2, t);
+ d0 = b1;
+
+ }
+
+ dcoeff.w[0] = b2d[d11.w[0]] | (b2d[d10.w[0]] << 10) |
+ (b2d[d9.w[0]] << 20) | (b2d[d8.w[0]] << 30) | (b2d[d7.w[0]] << 40) |
+ (b2d[d6.w[0]] << 50) | (b2d[d5.w[0]] << 60);
+ dcoeff.w[1] =
+ (b2d[d5.w[0]] >> 4) | (b2d[d4.w[0]] << 6) | (b2d[d3.w[0]] << 16) |
+ (b2d[d2.w[0]] << 26) | (b2d[d1.w[0]] << 36);
+
+ res.w[0] = dcoeff.w[0];
+ if (d0.w[0] >= 8) {
+ res.w[1] =
+ sign.
+ w[1] |
+ ((0x18000 | ((exp >> 12) << 13) | ((d0.w[0] & 1) << 12) |
+ (exp & 0xfff)) << 46) | dcoeff.w[1];
+ } else {
+ res.w[1] =
+ sign.
+ w[1] | ((((exp >> 12) << 15) | (d0.w[0] << 12) | (exp & 0xfff))
+ << 46) | dcoeff.w[1];
+ }
+
+ res.w[1] |= nanb;
+
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+dpd_to_bid128 (UINT128 * pres, UINT128 * pda) {
+ UINT128 da = *pda;
+#else
+UINT128
+dpd_to_bid128 (UINT128 da) {
+#endif
+ UINT128 in = *(UINT128 *) & da;
+ UINT128 res;
+
+ UINT128 sign;
+ UINT64 exp, comb;
+ UINT128 trailing;
+ UINT64 d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11;
+ UINT128 bcoeff;
+ UINT64 tl, th;
+ UINT64 nanb = 0;
+
+ sign.w[1] = (in.w[HIGH_128W] & 0x8000000000000000ull);
+ sign.w[0] = 0;
+ comb = (in.w[HIGH_128W] & 0x7fffc00000000000ull) >> 46;
+ trailing.w[1] = (in.w[HIGH_128W] & 0x00003fffffffffffull);
+ trailing.w[0] = in.w[LOW_128W];
+ exp = 0;
+
+ if ((comb & 0x1f000) == 0x1e000) { // G0..G4 = 1111 -> Inf
+ res.w[HIGH_128W] = in.w[HIGH_128W] & 0xf800000000000000ull;
+ res.w[LOW_128W] = 0ull;
+ BID_RETURN (res);
+ } else if ((comb & 0x1f000) == 0x1f000) { // G0..G4 = 11111 -> NaN
+ nanb = in.w[HIGH_128W] & 0xfe00000000000000ull;
+ exp = 0;
+ d0 = 0;
+ } else { // Normal number
+ if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> d0 = 8 + G4
+ d0 = 8 + (comb & 0x01000 ? 1 : 0);
+ exp =
+ (comb & 0x04000 ? 1 : 0) * 0x2000 +
+ (comb & 0x02000 ? 1 : 0) * 0x1000;
+ // exp leading bits are G2..G3
+ } else {
+ d0 =
+ 4 * (comb & 0x04000 ? 1 : 0) + 2 * (comb & 0x2000 ? 1 : 0) +
+ (comb & 0x1000 ? 1 : 0);
+ exp =
+ (comb & 0x10000 ? 1 : 0) * 0x2000 +
+ (comb & 0x08000 ? 1 : 0) * 0x1000;
+ // exp loading bits are G0..G1
+ }
+ }
+
+ d11 = d2b[(trailing.w[0]) & 0x3ff];
+ d10 = d2b[(trailing.w[0] >> 10) & 0x3ff];
+ d9 = d2b[(trailing.w[0] >> 20) & 0x3ff];
+ d8 = d2b[(trailing.w[0] >> 30) & 0x3ff];
+ d7 = d2b[(trailing.w[0] >> 40) & 0x3ff];
+ d6 = d2b[(trailing.w[0] >> 50) & 0x3ff];
+ d5 = d2b[(trailing.w[0] >> 60) | ((trailing.w[1] & 0x3f) << 4)];
+ d4 = d2b[(trailing.w[1] >> 6) & 0x3ff];
+ d3 = d2b[(trailing.w[1] >> 16) & 0x3ff];
+ d2 = d2b[(trailing.w[1] >> 26) & 0x3ff];
+ d1 = d2b[(trailing.w[1] >> 36) & 0x3ff];
+
+ tl =
+ d11 + (d10 * 1000ull) + (d9 * 1000000ull) + (d8 * 1000000000ull) +
+ (d7 * 1000000000000ull) + (d6 * 1000000000000000ull);
+ th =
+ d5 + (d4 * 1000ull) + (d3 * 1000000ull) + (d2 * 1000000000ull) +
+ (d1 * 1000000000000ull) + (d0 * 1000000000000000ull);
+ __mul_64x64_to_128 (bcoeff, th, 1000000000000000000ull);
+ __add_128_64 (bcoeff, bcoeff, tl);
+
+ if (!nanb)
+ exp += (comb & 0xfff);
+
+ res.w[0] = bcoeff.w[0];
+ res.w[1] = (exp << 49) | sign.w[1] | bcoeff.w[1];
+
+ res.w[1] |= nanb;
+
+ BID_SWAP128 (res);
+ BID_RETURN (res);
+}
+
+UINT128
+bid_to_bid128 (UINT128 bq) {
+ UINT128 res;
+ UINT64 sign, comb, exp;
+ UINT64 trailing;
+ UINT64 bcoeff;
+
+ UINT128 rq;
+ UINT128 qcoeff;
+ UINT64 ba, bb;
+
+ ba = *((UINT64 *) & bq + HIGH_128W);
+ bb = *((UINT64 *) & bq + LOW_128W);
+
+ sign = (ba & 0x8000000000000000ull);
+ comb = (ba & 0x7fffc00000000000ull) >> 46;
+ trailing = (ba & 0x00003fffffffffffull);
+
+ if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0x3fff;
+ bcoeff = ((8 + (comb & 1)) << 46) | trailing;
+ } else {
+ exp = (comb >> 3) & 0x3fff;
+ bcoeff = ((comb & 7) << 46) | trailing;
+ }
+
+ if ((comb & 0x1f000) == 0x1f000) { //NaN
+ ba &= 0xfe003fffffffffffULL; // make exponent 0
+ bcoeff &= 0x00003fffffffffffull; // NaN payloat is only T.
+ if ((bcoeff > 0x0000314dc6448d93ULL) || // significand is non-canonical
+ ((bcoeff == 0x0000314dc6448d93ULL)
+ && (bb >= 0x38c15b0a00000000ULL))
+ // significand is non-canonical
+ ) {
+ bcoeff = 0ull;
+ ba &= ~0x00003fffffffffffull;
+ bb = 0ull;
+ }
+ *((UINT64 *) & rq + HIGH_128W) = ba;
+ *((UINT64 *) & rq + LOW_128W) = bb;
+ return rq;
+ } else if ((comb & 0x1e000) == 0x1e000) { //Inf
+ ba &= 0xf800000000000000ULL; // make exponent and significand 0
+ bb = 0;
+ *((UINT64 *) & rq + HIGH_128W) = ba;
+ *((UINT64 *) & rq + LOW_128W) = bb;
+ return rq;
+ }
+
+ if ((bcoeff > 0x0001ed09bead87c0ull)
+ || ((bcoeff == 0x0001ed09bead87c0ull)
+ && (bb > 0x378d8e63ffffffffull))) {
+ // significand is non-canonical
+ bcoeff = 0ull;
+ bb = 0ull;
+ }
+
+ *((UINT64 *) & qcoeff + 1) = bcoeff;
+ *((UINT64 *) & qcoeff + 0) = bb;
+
+ get_BID128_fast (&res, sign, exp, qcoeff);
+
+ BID_SWAP128 (res);
+ return res;
+}
+
+UINT32
+bid32_canonize (UINT32 ba) {
+ FPSC bidrnd;
+ unsigned int rnd = 0;
+
+ UINT32 res;
+ UINT32 sign, comb, exp;
+ UINT32 trailing;
+ UINT32 bcoeff;
+
+ sign = (ba & 0x80000000);
+ comb = (ba & 0x7ff00000) >> 20;
+ trailing = (ba & 0x000fffff);
+
+ if ((comb & 0x600) == 0x600) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0xff;
+ bcoeff = ((8 + (comb & 1)) << 20) | trailing;
+ } else {
+ exp = (comb >> 3) & 0xff;
+ bcoeff = ((comb & 7) << 20) | trailing;
+ }
+
+ if ((comb & 0x7c0) == 0x7c0) { //NaN
+ ba &= 0xfe0fffff; // make exponent 0
+ bcoeff &= 0x000fffff; // NaN payloat is only T.
+ if (bcoeff >= 1000000)
+ ba &= 0xfff00000; //treat non-canonical significand
+ return ba;
+ } else if ((comb & 0x780) == 0x780) { //Inf
+ ba &= 0xf8000000; // make exponent and significand 0
+ return ba;
+ }
+
+ if (bcoeff >= 10000000)
+ bcoeff = 0;
+ rnd = bidrnd = ROUNDING_TO_NEAREST;
+ res = get_BID32 (sign, exp, bcoeff, rnd, &bidrnd);
+ return res;
+}
+
+UINT64
+bid64_canonize (UINT64 ba) {
+ UINT64 res;
+ UINT64 sign, comb, exp;
+ UINT64 trailing;
+ UINT64 bcoeff;
+
+ sign = (ba & 0x8000000000000000ull);
+ comb = (ba & 0x7ffc000000000000ull) >> 50;
+ trailing = (ba & 0x0003ffffffffffffull);
+
+
+ if ((comb & 0x1800) == 0x1800) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0x3ff;
+ bcoeff = ((8 + (comb & 1)) << 50) | trailing;
+ } else {
+ exp = (comb >> 3) & 0x3ff;
+ bcoeff = ((comb & 7) << 50) | trailing;
+ }
+
+ if ((comb & 0x1f00) == 0x1f00) { //NaN
+ ba &= 0xfe03ffffffffffffULL; // make exponent 0
+ bcoeff &= 0x0003ffffffffffffull; // NaN payloat is only T.
+ if (bcoeff >= 1000000000000000ull)
+ ba &= 0xfe00000000000000ull; // treat non canonical significand and zero G6-G12
+ return ba;
+ } else if ((comb & 0x1e00) == 0x1e00) { //Inf
+ ba &= 0xf800000000000000ULL; // make exponent and significand 0
+ return ba;
+ }
+
+ if (bcoeff >= 10000000000000000ull) {
+ bcoeff = 0ull;
+ }
+ res = very_fast_get_BID64 (sign, exp, bcoeff);
+ return res;
+}
+
+UINT128
+bid128_canonize (UINT128 bq) {
+ UINT128 res;
+ UINT64 sign, comb, exp;
+ UINT64 trailing;
+ UINT64 bcoeff;
+
+ UINT128 rq;
+ UINT128 qcoeff;
+ UINT64 ba, bb;
+
+ ba = *((UINT64 *) & bq + HIGH_128W);
+ bb = *((UINT64 *) & bq + LOW_128W);
+
+ sign = (ba & 0x8000000000000000ull);
+ comb = (ba & 0x7fffc00000000000ull) >> 46;
+ trailing = (ba & 0x00003fffffffffffull);
+
+ if ((comb & 0x18000) == 0x18000) { // G0..G1 = 11 -> exp is G2..G11
+ exp = (comb >> 1) & 0x3fff;
+ bcoeff = ((8 + (comb & 1)) << 46) | trailing;
+ } else {
+ exp = (comb >> 3) & 0x3fff;
+ bcoeff = ((comb & 7) << 46) | trailing;
+ }
+
+ if ((comb & 0x1f000) == 0x1f000) { //NaN
+ ba &= 0xfe003fffffffffffULL; // make exponent 0
+ bcoeff &= 0x00003fffffffffffull; // NaN payload is only T.
+
+ if ((bcoeff > 0x0000314dc6448d93ULL) || // significand is non-canonical
+ ((bcoeff == 0x0000314dc6448d93ULL)
+ && (bb >= 0x38c15b0a00000000ULL))
+ // significand is non-canonical
+ ) {
+ bcoeff = 0ull;
+ ba &= ~0x00003fffffffffffull;
+ bb = 0ull;
+ }
+ *((UINT64 *) & rq + HIGH_128W) = ba;
+ *((UINT64 *) & rq + LOW_128W) = bb;
+ return rq;
+ } else if ((comb & 0x1e000) == 0x1e000) { //Inf
+ ba &= 0xf800000000000000ULL; // make exponent and significand 0
+ bb = 0;
+ *((UINT64 *) & rq + HIGH_128W) = ba;
+ *((UINT64 *) & rq + LOW_128W) = bb;
+ return rq;
+ }
+
+ if ((bcoeff > 0x0001ed09bead87c0ull) || // significand is non-canonical
+ ((bcoeff == 0x0001ed09bead87c0ull)
+ && (bb > 0x378d8e63ffffffffull))
+ // significand is non-canonical
+ ) {
+ bcoeff = 0ull;
+ bb = 0ull;
+ }
+
+ *((UINT64 *) & qcoeff + 1) = bcoeff;
+ *((UINT64 *) & qcoeff + 0) = bb;
+
+ get_BID128_fast (&res, sign, exp, qcoeff);
+ BID_SWAP128 (res);
+ return res;
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid_flag_operations.c b/gcc-4.9/libgcc/config/libbid/bid_flag_operations.c
new file mode 100644
index 000000000..2078b063a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_flag_operations.c
@@ -0,0 +1,345 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ * Non-computational Operations on Flags:
+ ****************************************************************************/
+
+#include "bid_internal.h"
+
+// Note the following definitions from bid_conf.h: if the status flags are
+// global, they have a fixed name recognized by the library functions:
+// _IDEC_glbflags; pfpsf, defined as &_IDEC_glbflags, can be used instead; no
+// argument is passed for the status flags to the library functions; if the
+// status flags are local then they are passed as an arument, always by
+// reference, to the library functions
+//
+// #if !DECIMAL_GLOBAL_EXCEPTION_FLAGS
+// #define _EXC_FLAGS_PARAM , _IDEC_flags *pfpsf
+// #else
+// extern _IDEC_flags _IDEC_glbflags;
+// #define _EXC_FLAGS_PARAM
+// #define pfpsf &_IDEC_glbflags
+// #endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+signalException (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) {
+ // *pflagsmask is the logical OR of the flags to be set, e.g.
+ // *pflagsmask =INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION
+ // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to set all five IEEE 754R
+ // exception flags
+ *pfpsf = *pfpsf | (*pflagsmask & BID_IEEE_FLAGS);
+}
+#else
+void
+signalException (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) {
+ // flagsmask is the logical OR of the flags to be set, e.g.
+ // flagsmask = INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION
+ // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to set all five IEEE 754R
+ // exception flags
+ *pfpsf = *pfpsf | (flagsmask & BID_IEEE_FLAGS);
+}
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+lowerFlags (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) {
+ // *pflagsmask is the logical OR of the flags to be cleared, e.g.
+ // *pflagsmask =INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION
+ // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to clear all five IEEE 754R
+ // exception flags
+ *pfpsf = *pfpsf & ~(*pflagsmask & BID_IEEE_FLAGS);
+}
+#else
+void
+lowerFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) {
+ // flagsmask is the logical OR of the flags to be cleared, e.g.
+ // flagsmask = INVALID_EXCEPTION | ZERO_DIVIDE_EXCEPTION | OVERFLOW_EXCEPTION
+ // UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION to clear all five IEEE 754R
+ // exception flags
+ *pfpsf = *pfpsf & ~(flagsmask & BID_IEEE_FLAGS);
+}
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+testFlags (_IDEC_flags * praised,
+ _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) {
+ // *praised is a pointer to the result, i.e. the logical OR of the flags
+ // selected by *pflagsmask that are set; e.g. if
+ // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION
+ // and only the invalid and inexact flags are raised (set) then upon return
+ // *praised = INVALID_EXCEPTION | INEXACT_EXCEPTION
+ *praised = *pfpsf & (*pflagsmask & BID_IEEE_FLAGS);
+}
+#else
+_IDEC_flags
+testFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) {
+ _IDEC_flags raised;
+ // the raturn value raised is the logical OR of the flags
+ // selected by flagsmask, that are set; e.g. if
+ // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION and
+ // only the invalid and inexact flags are raised (set) then the return value
+ // is raised = INVALID_EXCEPTION | INEXACT_EXCEPTION
+ raised = *pfpsf & (flagsmask & BID_IEEE_FLAGS);
+ return (raised);
+}
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+testSavedFlags (_IDEC_flags * praised, _IDEC_flags * psavedflags,
+ _IDEC_flags * pflagsmask) {
+ // *praised is a pointer to the result, i.e. the logical OR of the flags
+ // selected by *pflagsmask that are set in *psavedflags; e.g. if
+ // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION
+ // and only the invalid and inexact flags are raised (set) in *psavedflags
+ // then upon return *praised = INVALID_EXCEPTION | INEXACT_EXCEPTION
+ // Note that the flags could be saved in a global variable, but this function
+ // would still expect that value as an argument passed by reference
+ *praised = *psavedflags & (*pflagsmask & BID_IEEE_FLAGS);
+}
+#else
+_IDEC_flags
+testSavedFlags (_IDEC_flags savedflags, _IDEC_flags flagsmask) {
+ _IDEC_flags raised;
+ // the raturn value raised is the logical OR of the flags
+ // selected by flagsmask, that are set in savedflags; e.g. if
+ // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION and
+ // only the invalid and inexact flags are raised (set) in savedflags
+ // then the return value is raised = INVALID_EXCEPTION | INEXACT_EXCEPTION
+ // Note that the flags could be saved in a global variable, but this function
+ // would still expect that value as an argument passed by value
+ raised = savedflags & (flagsmask & BID_IEEE_FLAGS);
+ return (raised);
+}
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+restoreFlags (_IDEC_flags * pflagsvalues,
+ _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) {
+ // restore the status flags selected by *pflagsmask to the values speciafied
+ // (as a logical OR) in *pflagsvalues; e.g. if
+ // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION
+ // and only the invalid and inexact flags are raised (set) in *pflagsvalues
+ // then upon return the invalid status flag will be set, the underflow status
+ // flag will be clear, and the inexact status flag will be set
+ *pfpsf = *pfpsf & ~(*pflagsmask & BID_IEEE_FLAGS);
+ // clear flags that have to be restored
+ *pfpsf = *pfpsf | (*pflagsvalues & (*pflagsmask & BID_IEEE_FLAGS));
+ // restore flags
+}
+#else
+void
+restoreFlags (_IDEC_flags flagsvalues,
+ _IDEC_flags flagsmask _EXC_FLAGS_PARAM) {
+ // restore the status flags selected by flagsmask to the values speciafied
+ // (as a logical OR) in flagsvalues; e.g. if
+ // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION
+ // and only the invalid and inexact flags are raised (set) in flagsvalues
+ // then upon return the invalid status flag will be set, the underflow status
+ // flag will be clear, and the inexact status flag will be set
+ *pfpsf = *pfpsf & ~(flagsmask & BID_IEEE_FLAGS);
+ // clear flags that have to be restored
+ *pfpsf = *pfpsf | (flagsvalues & (flagsmask & BID_IEEE_FLAGS));
+ // restore flags
+}
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+saveFlags (_IDEC_flags * pflagsvalues,
+ _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM) {
+ // return in *pflagsvalues the status flags specified (as a logical OR) in
+ // *pflagsmask; e.g. if
+ // *pflagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION
+ // and only the invalid and inexact flags are raised (set) in the status word,
+ // then upon return the value in *pflagsvalues will have the invalid status
+ // flag set, the underflow status flag clear, and the inexact status flag set
+ *pflagsvalues = *pfpsf & (*pflagsmask & BID_IEEE_FLAGS);
+}
+#else
+_IDEC_flags
+saveFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM) {
+ _IDEC_flags flagsvalues;
+ // return the status flags specified (as a logical OR) in flagsmask; e.g. if
+ // flagsmask = INVALID_EXCEPTION | UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION
+ // and only the invalid and inexact flags are raised (set) in the status word,
+ // then the return value will have the invalid status flag set, the
+ // underflow status flag clear, and the inexact status flag set
+ flagsvalues = *pfpsf & (flagsmask & BID_IEEE_FLAGS);
+ return (flagsvalues);
+}
+#endif
+
+// Note the following definitions from bid_conf.h (rearranged): if the rounding
+// mode is global, it has a fixed name recognized by the library functions:
+// _IDEC_glbround; rnd_mode, defined as &_IDEC_glbround, can be used instead; no
+// argument is passed for the rounding mode to the library functions; if the
+// rounding mode is local then it is passed as an arument, by reference or by
+// value, to the library functions
+//
+// #if DECIMAL_CALL_BY_REFERENCE
+// #if !DECIMAL_GLOBAL_ROUNDING
+// #define _RND_MODE_PARAM , _IDEC_round *prnd_mode
+// #else
+// #define _RND_MODE_PARAM
+// #define rnd_mode _IDEC_glbround
+// #endif
+// #else
+// #if !DECIMAL_GLOBAL_ROUNDING
+// #define _RND_MODE_PARAM , _IDEC_round rnd_mode
+// #else
+// #define _RND_MODE_PARAM
+// #define rnd_mode _IDEC_glbround
+// #endif
+// #endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ // #define _RND_MODE_PARAM , _IDEC_round *prnd_mode
+void
+getDecimalRoundingDirection (_IDEC_round * rounding_mode
+ _RND_MODE_PARAM) {
+ // returns the current rounding mode
+ *rounding_mode = *prnd_mode;
+}
+#else
+ // #define _RND_MODE_PARAM
+ // #define rnd_mode _IDEC_glbround
+void
+getDecimalRoundingDirection (_IDEC_round * rounding_mode
+ _RND_MODE_PARAM) {
+ // returns the current rounding mode
+ *rounding_mode = rnd_mode;
+}
+#endif
+#else
+#if !DECIMAL_GLOBAL_ROUNDING
+ // #define _RND_MODE_PARAM , _IDEC_round rnd_mode
+_IDEC_round
+getDecimalRoundingDirection (_IDEC_round rnd_mode) {
+ // returns the current rounding mode
+ return (rnd_mode);
+}
+#else
+ // #define _RND_MODE_PARAM
+ // #define rnd_mode _IDEC_glbround
+_IDEC_round
+getDecimalRoundingDirection (void) {
+ // returns the current rounding mode
+ return (rnd_mode);
+}
+#endif
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+#if !DECIMAL_GLOBAL_ROUNDING
+ // #define _RND_MODE_PARAM , _IDEC_round *prnd_mode
+void
+setDecimalRoundingDirection (_IDEC_round * rounding_mode
+ _RND_MODE_PARAM) {
+ // sets the current rounding mode to the value in *rounding_mode, if valid
+ if (*rounding_mode == ROUNDING_TO_NEAREST ||
+ *rounding_mode == ROUNDING_DOWN ||
+ *rounding_mode == ROUNDING_UP ||
+ *rounding_mode == ROUNDING_TO_ZERO ||
+ *rounding_mode == ROUNDING_TIES_AWAY) {
+ *prnd_mode = *rounding_mode;
+ }
+}
+#else
+ // #define _RND_MODE_PARAM
+ // #define rnd_mode _IDEC_glbround
+void
+setDecimalRoundingDirection (_IDEC_round * rounding_mode
+ ) {
+ // sets the global rounding mode to the value in *rounding_mode, if valid
+ if (*rounding_mode == ROUNDING_TO_NEAREST ||
+ *rounding_mode == ROUNDING_DOWN ||
+ *rounding_mode == ROUNDING_UP ||
+ *rounding_mode == ROUNDING_TO_ZERO ||
+ *rounding_mode == ROUNDING_TIES_AWAY) {
+ rnd_mode = *rounding_mode;
+ }
+}
+#endif
+#else
+#if !DECIMAL_GLOBAL_ROUNDING
+ // #define _RND_MODE_PARAM , _IDEC_round rnd_mode
+_IDEC_round
+setDecimalRoundingDirection (_IDEC_round rounding_mode _RND_MODE_PARAM) {
+ // sets the current rounding mode to the value in rounding_mode;
+ // however, when arguments are passed by value and the rounding mode
+ // is a local variable, this is not of any use
+ if (rounding_mode == ROUNDING_TO_NEAREST ||
+ rounding_mode == ROUNDING_DOWN ||
+ rounding_mode == ROUNDING_UP ||
+ rounding_mode == ROUNDING_TO_ZERO ||
+ rounding_mode == ROUNDING_TIES_AWAY) {
+ return (rounding_mode);
+ }
+ return (rnd_mode);
+}
+#else
+ // #define _RND_MODE_PARAM
+ // #define rnd_mode _IDEC_glbround
+void
+setDecimalRoundingDirection (_IDEC_round rounding_mode) {
+ // sets the current rounding mode to the value in rounding_mode, if valid;
+ if (rounding_mode == ROUNDING_TO_NEAREST ||
+ rounding_mode == ROUNDING_DOWN ||
+ rounding_mode == ROUNDING_UP ||
+ rounding_mode == ROUNDING_TO_ZERO ||
+ rounding_mode == ROUNDING_TIES_AWAY) {
+ rnd_mode = rounding_mode;
+ }
+}
+#endif
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+is754 (int *retval) {
+ *retval = 0;
+}
+#else
+int
+is754 (void) {
+ return 0;
+}
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+is754R (int *retval) {
+ *retval = 1;
+}
+#else
+int
+is754R (void) {
+ return 1;
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/bid_from_int.c b/gcc-4.9/libgcc/config/libbid/bid_from_int.c
new file mode 100644
index 000000000..0c4a311ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_from_int.c
@@ -0,0 +1,349 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "bid_internal.h"
+
+/*****************************************************************************
+ * BID64_round_integral_exact
+ ****************************************************************************/
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_from_int32 (UINT64 * pres,
+ int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ int x = *px;
+#else
+UINT64
+bid64_from_int32 (int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+
+ // if integer is negative, put the absolute value
+ // in the lowest 32bits of the result
+ if ((x & SIGNMASK32) == SIGNMASK32) {
+ // negative int32
+ x = ~x + 1; // 2's complement of x
+ res = (unsigned int) x | 0xb1c0000000000000ull;
+ // (exp << 53)) = biased exp. is 0
+ } else { // positive int32
+ res = x | 0x31c0000000000000ull; // (exp << 53)) = biased exp. is 0
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_from_uint32 (UINT64 * pres, unsigned int *px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ unsigned int x = *px;
+#else
+UINT64
+bid64_from_uint32 (unsigned int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT64 res;
+
+ res = x | 0x31c0000000000000ull; // (exp << 53)) = biased exp. is 0
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_from_int64 (UINT64 * pres, SINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ SINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64_from_int64 (SINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res;
+ UINT64 x_sign, C;
+ unsigned int q, ind;
+ int incr_exp = 0;
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0;
+ int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+
+ x_sign = x & 0x8000000000000000ull;
+ // if the integer is negative, use the absolute value
+ if (x_sign)
+ C = ~((UINT64) x) + 1;
+ else
+ C = x;
+ if (C <= BID64_SIG_MAX) { // |C| <= 10^16-1 and the result is exact
+ if (C < 0x0020000000000000ull) { // C < 2^53
+ res = x_sign | 0x31c0000000000000ull | C;
+ } else { // C >= 2^53
+ res =
+ x_sign | 0x6c70000000000000ull | (C & 0x0007ffffffffffffull);
+ }
+ } else { // |C| >= 10^16 and the result may be inexact
+ // the smallest |C| is 10^16 which has 17 decimal digits
+ // the largest |C| is 0x8000000000000000 = 9223372036854775808 w/ 19 digits
+ if (C < 0x16345785d8a0000ull) { // x < 10^17
+ q = 17;
+ ind = 1; // number of digits to remove for q = 17
+ } else if (C < 0xde0b6b3a7640000ull) { // C < 10^18
+ q = 18;
+ ind = 2; // number of digits to remove for q = 18
+ } else { // C < 10^19
+ q = 19;
+ ind = 3; // number of digits to remove for q = 19
+ }
+ // overflow and underflow are not possible
+ // Note: performace can be improved by inlining this call
+ round64_2_18 ( // will work for 19 digits too if C fits in 64 bits
+ q, ind, C, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ if (incr_exp)
+ ind++;
+ // set the inexact flag
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even)
+ *pfpsf |= INEXACT_EXCEPTION;
+ // general correction from RN to RA, RM, RP, RZ; result uses ind for exp
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((!x_sign
+ && ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode == ROUNDING_TIES_AWAY
+ || rnd_mode == ROUNDING_UP) && is_midpoint_gt_even)))
+ || (x_sign
+ && ((rnd_mode == ROUNDING_DOWN && is_inexact_lt_midpoint)
+ ||
+ ((rnd_mode == ROUNDING_TIES_AWAY
+ || rnd_mode == ROUNDING_DOWN)
+ && is_midpoint_gt_even)))) {
+ res = res + 1;
+ if (res == 0x002386f26fc10000ull) { // res = 10^16 => rounding overflow
+ res = 0x00038d7ea4c68000ull; // 10^15
+ ind = ind + 1;
+ }
+ } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) &&
+ ((x_sign && (rnd_mode == ROUNDING_UP ||
+ rnd_mode == ROUNDING_TO_ZERO)) ||
+ (!x_sign && (rnd_mode == ROUNDING_DOWN ||
+ rnd_mode == ROUNDING_TO_ZERO)))) {
+ res = res - 1;
+ // check if we crossed into the lower decade
+ if (res == 0x00038d7ea4c67fffull) { // 10^15 - 1
+ res = 0x002386f26fc0ffffull; // 10^16 - 1
+ ind = ind - 1;
+ }
+ } else {
+ ; // exact, the result is already correct
+ }
+ }
+ if (res < 0x0020000000000000ull) { // res < 2^53
+ res = x_sign | (((UINT64) ind + 398) << 53) | res;
+ } else { // res >= 2^53
+ res =
+ x_sign | 0x6000000000000000ull | (((UINT64) ind + 398) << 51) |
+ (res & 0x0007ffffffffffffull);
+ }
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid64_from_uint64 (UINT64 * pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#if !DECIMAL_GLOBAL_ROUNDING
+ unsigned int rnd_mode = *prnd_mode;
+#endif
+#else
+UINT64
+bid64_from_uint64 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM) {
+#endif
+
+ UINT64 res;
+ UINT128 x128, res128;
+ unsigned int q, ind;
+ int incr_exp = 0;
+ int is_midpoint_lt_even = 0, is_midpoint_gt_even = 0;
+ int is_inexact_lt_midpoint = 0, is_inexact_gt_midpoint = 0;
+
+ if (x <= BID64_SIG_MAX) { // x <= 10^16-1 and the result is exact
+ if (x < 0x0020000000000000ull) { // x < 2^53
+ res = 0x31c0000000000000ull | x;
+ } else { // x >= 2^53
+ res = 0x6c70000000000000ull | (x & 0x0007ffffffffffffull);
+ }
+ } else { // x >= 10^16 and the result may be inexact
+ // the smallest x is 10^16 which has 17 decimal digits
+ // the largest x is 0xffffffffffffffff = 18446744073709551615 w/ 20 digits
+ if (x < 0x16345785d8a0000ull) { // x < 10^17
+ q = 17;
+ ind = 1; // number of digits to remove for q = 17
+ } else if (x < 0xde0b6b3a7640000ull) { // x < 10^18
+ q = 18;
+ ind = 2; // number of digits to remove for q = 18
+ } else if (x < 0x8ac7230489e80000ull) { // x < 10^19
+ q = 19;
+ ind = 3; // number of digits to remove for q = 19
+ } else { // x < 10^20
+ q = 20;
+ ind = 4; // number of digits to remove for q = 20
+ }
+ // overflow and underflow are not possible
+ // Note: performace can be improved by inlining this call
+ if (q <= 19) {
+ round64_2_18 ( // will work for 20 digits too if x fits in 64 bits
+ q, ind, x, &res, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ } else { // q = 20
+ x128.w[1] = 0x0;
+ x128.w[0] = x;
+ round128_19_38 (q, ind, x128, &res128, &incr_exp,
+ &is_midpoint_lt_even, &is_midpoint_gt_even,
+ &is_inexact_lt_midpoint, &is_inexact_gt_midpoint);
+ res = res128.w[0]; // res.w[1] is 0
+ }
+ if (incr_exp)
+ ind++;
+ // set the inexact flag
+ if (is_inexact_lt_midpoint || is_inexact_gt_midpoint ||
+ is_midpoint_lt_even || is_midpoint_gt_even)
+ *pfpsf |= INEXACT_EXCEPTION;
+ // general correction from RN to RA, RM, RP, RZ; result uses ind for exp
+ if (rnd_mode != ROUNDING_TO_NEAREST) {
+ if ((rnd_mode == ROUNDING_UP && is_inexact_lt_midpoint) ||
+ ((rnd_mode == ROUNDING_TIES_AWAY || rnd_mode == ROUNDING_UP)
+ && is_midpoint_gt_even)) {
+ res = res + 1;
+ if (res == 0x002386f26fc10000ull) { // res = 10^16 => rounding overflow
+ res = 0x00038d7ea4c68000ull; // 10^15
+ ind = ind + 1;
+ }
+ } else if ((is_midpoint_lt_even || is_inexact_gt_midpoint) &&
+ (rnd_mode == ROUNDING_DOWN ||
+ rnd_mode == ROUNDING_TO_ZERO)) {
+ res = res - 1;
+ // check if we crossed into the lower decade
+ if (res == 0x00038d7ea4c67fffull) { // 10^15 - 1
+ res = 0x002386f26fc0ffffull; // 10^16 - 1
+ ind = ind - 1;
+ }
+ } else {
+ ; // exact, the result is already correct
+ }
+ }
+ if (res < 0x0020000000000000ull) { // res < 2^53
+ res = (((UINT64) ind + 398) << 53) | res;
+ } else { // res >= 2^53
+ res = 0x6000000000000000ull | (((UINT64) ind + 398) << 51) |
+ (res & 0x0007ffffffffffffull);
+ }
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_from_int32 (UINT128 * pres,
+ int *px _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ int x = *px;
+#else
+UINT128
+bid128_from_int32 (int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 res;
+
+ // if integer is negative, use the absolute value
+ if ((x & SIGNMASK32) == SIGNMASK32) {
+ res.w[HIGH_128W] = 0xb040000000000000ull;
+ res.w[LOW_128W] = ~((unsigned int) x) + 1; // 2's complement of x
+ } else {
+ res.w[HIGH_128W] = 0x3040000000000000ull;
+ res.w[LOW_128W] = (unsigned int) x;
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_from_uint32 (UINT128 * pres, unsigned int *px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ unsigned int x = *px;
+#else
+UINT128
+bid128_from_uint32 (unsigned int x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+ UINT128 res;
+
+ res.w[HIGH_128W] = 0x3040000000000000ull;
+ res.w[LOW_128W] = x;
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_from_int64 (UINT128 * pres, SINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ SINT64 x = *px;
+#else
+UINT128
+bid128_from_int64 (SINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 res;
+
+ // if integer is negative, use the absolute value
+ if ((x & SIGNMASK64) == SIGNMASK64) {
+ res.w[HIGH_128W] = 0xb040000000000000ull;
+ res.w[LOW_128W] = ~x + 1; // 2's complement of x
+ } else {
+ res.w[HIGH_128W] = 0x3040000000000000ull;
+ res.w[LOW_128W] = x;
+ }
+ BID_RETURN (res);
+}
+
+#if DECIMAL_CALL_BY_REFERENCE
+void
+bid128_from_uint64 (UINT128 * pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+ UINT64 x = *px;
+#else
+UINT128
+bid128_from_uint64 (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM) {
+#endif
+
+ UINT128 res;
+
+ res.w[HIGH_128W] = 0x3040000000000000ull;
+ res.w[LOW_128W] = x;
+ BID_RETURN (res);
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid_functions.h b/gcc-4.9/libgcc/config/libbid/bid_functions.h
new file mode 100644
index 000000000..e8afac562
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_functions.h
@@ -0,0 +1,3279 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _BID_FUNCTIONS_H
+#define _BID_FUNCTIONS_H
+
+#ifdef IN_LIBGCC2
+// When we are built as the part of the gcc runtime library, libgcc,
+// we will use gcc types defined in bid_gcc_intrinsics.h.
+#include "bid_gcc_intrinsics.h"
+
+#define ALIGN(n) __attribute__ ((aligned(n)))
+#else
+typedef char SINT8;
+typedef unsigned char UINT8;
+typedef unsigned UINT32;
+typedef signed SINT32;
+
+#ifdef __GNUC__
+#define __int64 long long
+#endif
+
+#if __GNUC__ || defined LINUX || defined SUNOS
+typedef unsigned long long UINT64;
+typedef signed long long SINT64;
+#else
+typedef unsigned __int64 UINT64;
+typedef signed __int64 SINT64;
+#endif
+
+#if defined _MSC_VER
+#if defined _M_IX86 && !defined __INTEL_COMPILER // Win IA-32, MS compiler
+#define ALIGN(n)
+#else
+#define ALIGN(n) __declspec(align(n))
+#endif
+#else
+#define ALIGN(n) __attribute__ ((aligned(n)))
+#endif
+
+// bid_gcc_intrinsics.h will also define this.
+typedef
+ALIGN (16)
+ struct {
+ UINT64 w[2];
+ } UINT128;
+#endif
+
+
+#if !defined _MSC_VER || defined __INTEL_COMPILER
+#define __ENABLE_BINARY80__ 1
+#endif
+
+#ifndef HPUX_OS
+#define BINARY80 long double
+#define BINARY128 UINT128
+#define SQRT80 sqrtl
+#else
+#define BINARY80 __float80
+#define BINARY128 __float128
+#define SQRT80 sqrtw
+#endif
+
+ typedef ALIGN (16)
+ struct {
+ UINT64 w[3];
+ } UINT192;
+ typedef ALIGN (16)
+ struct {
+ UINT64 w[4];
+ } UINT256;
+ typedef unsigned int FPSC; // floating-point status and control
+
+// TYPE parameters
+#define BID128_MAXDIGITS 34
+#define BID64_MAXDIGITS 16
+#define BID32_MAXDIGITS 7
+
+// rounding modes
+#define ROUNDING_TO_NEAREST 0x00000
+#define ROUNDING_DOWN 0x00001
+#define ROUNDING_UP 0x00002
+#define ROUNDING_TO_ZERO 0x00003
+#define ROUNDING_TIES_AWAY 0x00004
+
+#define RMODE_MASK (ROUNDING_TO_NEAREST | ROUNDING_DOWN | ROUNDING_UP | ROUNDING_TO_ZERO | ROUNDING_TIES_AWAY)
+
+// status
+#define FLAG_MASK 0x0000003f
+#define BID_IEEE_FLAGS 0x0000003d
+#define EXACT_STATUS 0x00000000
+#define INEXACT_EXCEPTION 0x00000020
+#define UNDERFLOW_EXCEPTION 0x00000010
+#define OVERFLOW_EXCEPTION 0x00000008
+#define ZERO_DIVIDE_EXCEPTION 0x00000004
+#define DENORMAL_EXCEPTION 0x00000002
+#define INVALID_EXCEPTION 0x00000001
+
+#define MODE_MASK 0x00001f80
+#define INEXACT_MODE 0x00001000
+#define UNDERFLOW_MODE 0x00000800
+#define OVERFLOW_MODE 0x00000400
+#define ZERO_DIVIDE_MODE 0x00000200
+#define DENORMAL_MODE 0x00000100
+#define INVALID_MODE 0x00000080
+
+#if defined LINUX || defined __GLIBC__ || defined SUNOS
+#define LX16 "%016llx"
+#define LX "%llx"
+#define LD4 "%4llu"
+#define LD16 "%016lld"
+#define LD "%lld"
+#define LUD "%llu"
+#define LUD16 "%016llu"
+#define X8 "%08x"
+#define X4 "%04x"
+
+#define FMT_LLX16 "%016llx"
+#define FMT_LLX "%llx"
+#define FMT_LLU4 "%4llu"
+#define FMT_LLD16 "%016lld"
+#define FMT_LLD "%lld"
+#define FMT_LLU "%llu"
+#define FMT_LLU16 "%016llu"
+#define FMT_X8 "%08x"
+#define FMT_X4 "%04x"
+#else
+#define LX16 "%016I64x"
+#define LX "%I64x"
+#define LD16 "%016I64d"
+#define LD4 "%4I64u"
+#define LD "%I64d"
+#define LUD "%I64u"
+#define LUD16 "%016I64u"
+#define X8 "%08x"
+#define X4 "%04x"
+
+#define FMT_LLX16 "%016I64x"
+#define FMT_LLX "%I64x"
+#define FMT_LLD16 "%016I64d"
+#define FMT_LLU4 "%4I64u"
+#define FMT_LLD "%I64d"
+#define FMT_LLU "%I64u"
+#define FMT_LLU16 "%016I64u"
+#define FMT_X8 "%08x"
+#define FMT_X4 "%04x"
+#endif
+
+#define decNumberIsSNaN(dn) (((dn)->bits&(DECSNAN))!=0)
+ int __signbitf (float);
+ int __signbit (double);
+
+#define __IMFC99MACRO_( __x__, __func__ ) \
+ (( sizeof( __x__ ) > sizeof( float )) \
+ ? __func__( (double)(__x__) ) \
+ : __func__##f( (float)(__x__) ))
+
+#define signbit( __x__ ) __IMFC99MACRO_( __x__, __signbit )
+
+#if !defined(__INTEL_COMPILER)
+
+#define __fence
+
+#define isinf( __x__ ) __IMFC99MACRO_( __x__, __isinf )
+#define isnan( __x__ ) __IMFC99MACRO_( __x__, __isnan )
+
+ int __isnanf (float);
+ int __isnan (double);
+
+ int __isinff (float);
+ int __isinf (double);
+
+#endif
+
+/* rounding modes */
+// typedef unsigned int _IDEC_round;
+ extern _IDEC_round _IDEC_gblround; // initialized to ROUNDING_TO_NEAREST
+
+/* exception flags */
+// typedef unsigned int _IDEC_flags; // could be a struct with diagnostic info
+ extern _IDEC_flags _IDEC_gblflags; // initialized to EXACT_STATUS
+
+/* exception masks */
+ typedef unsigned int _IDEC_exceptionmasks;
+ extern _IDEC_exceptionmasks _IDEC_gblexceptionmasks; // initialized to MODE_MASK
+
+#if DECIMAL_ALTERNATE_EXCEPTION_HANDLING
+
+/* exception information */
+
+ typedef struct {
+ unsigned int inexact_result:1;
+ unsigned int underflow:1;
+ unsigned int overflow:1;
+ unsigned int zero_divide:1;
+ unsigned int invalid_operation:1;
+ } fpieee_exception_flags_t;
+
+ typedef enum {
+ _fp_round_nearest,
+ _fp_round_minus_infinity,
+ _fp_round_plus_infinity,
+ _fp_round_chopped,
+ _fp_round_away
+ } fpieee_rounding_mode_t;
+
+ typedef enum {
+ _fp_precision24,
+ _fp_precision63,
+ _fp_precision64,
+ _fp_precision7,
+ _fp_precision16,
+ _fp_precision34
+ } _fpieee_precision_t;
+
+ typedef enum {
+ _fp_code_unspecified,
+ _fp_code_add,
+ _fp_code_subtract,
+ _fp_code_multiply,
+ _fp_code_divide,
+ _fp_code_square_root,
+ _fp_code_compare,
+ _fp_code_convert,
+ _fp_code_convert_to_integer_neareven,
+ _fp_code_convert_to_integer_down,
+ _fp_code_convert_to_integer_up,
+ _fp_code_convert_to_integer_truncate,
+ _fp_code_convert_to_integer_nearaway,
+ _fp_code_fma,
+ _fp_code_fmin,
+ _fp_code_fmax,
+ _fp_code_famin,
+ _fp_code_famax,
+ _fp_code_round_to_integral,
+ _fp_code_minnum,
+ _fp_code_maxnum,
+ _fp_code_minnummag,
+ _fp_code_maxnummag,
+ _fp_code_quantize,
+ _fp_code_logb,
+ _fp_code_scaleb,
+ _fp_code_remainder,
+ _fp_code_nextup,
+ _fp_code_nextdown,
+ _fp_code_nextafter,
+ } fp_operation_code_t;
+
+ typedef enum {
+ _fp_compare_equal,
+ _fp_compare_greater,
+ _fp_compare_less,
+ _fp_compare_unordered
+ } fpieee_compare_result_t;
+
+ typedef enum {
+ _fp_format_fp32,
+ _fp_format_fp64,
+ _fp_format_fp80,
+ _fp_format_fp128,
+ _fp_format_dec_fp32,
+ _fp_format_dec_fp64,
+ _fp_format_dec_fp128,
+ _fp_format_i8, /* 8-bit integer */
+ _fp_format_i16, /* 16-bit integer */
+ _fp_format_i32, /* 32-bit integer */
+ _fp_format_i64, /* 64-bit integer */
+ _fp_format_u8, /* 8-bit unsigned integer */
+ _fp_format_u16, /* 16-bit unsigned integer */
+ _fp_format_u32, /* 32-bit unsigned integer */
+ _fp_format_u64, /* 64-bit unsigned integer */
+ _fp_format_compare, /* compare value format */
+ _fp_format_decimal_char, /* decimal character */
+ _fp_format_string /* string */
+ } fpieee_format_t;
+
+ typedef struct {
+ unsigned short W[5];
+ } _float80_t;
+
+ typedef struct {
+ unsigned int W[4];
+ } _float128_t;
+
+ typedef struct {
+ union {
+ float fp32_value;
+ double fp64_value;
+ _float80_t fp80_value;
+ _float128_t fp128_value;
+ UINT32 decfp32_value;
+ UINT64 decfp64_value;
+ UINT128 decfp128_value;
+ char i8_value;
+ short i16_value;
+ int i32_value;
+ SINT64 i64_value;
+ unsigned char u8_value;
+ unsigned short u16_value;
+ unsigned int u32_value;
+ unsigned long u64_value;
+ fpieee_compare_result_t compare_value;
+ unsigned char s[256];
+ } value;
+ unsigned int operand_valid:1;
+ fpieee_format_t format:5;
+ } fpieee_value_t;
+
+ typedef struct {
+ unsigned int rounding_mode:3;
+ unsigned int precision:3;
+ unsigned int operation:26;
+ fpieee_exception_flags_t cause;
+ fpieee_exception_flags_t enable;
+ fpieee_exception_flags_t status;
+ fpieee_value_t operand1;
+ fpieee_value_t operand2;
+ fpieee_value_t operand3;
+ fpieee_value_t result;
+ } _IDEC_excepthandling;
+ extern _IDEC_excepthandling _IDEC_glbexcepthandling;
+
+#endif
+
+#if DECIMAL_CALL_BY_REFERENCE
+
+ extern void bid_to_dpd32 (UINT32 * pres, UINT32 * px);
+ extern void bid_to_dpd64 (UINT64 * pres, UINT64 * px);
+ extern void bid_to_dpd128 (UINT128 * pres, UINT128 * px);
+ extern void dpd_to_bid32 (UINT32 * pres, UINT32 * px);
+ extern void dpd_to_bid64 (UINT64 * pres, UINT64 * px);
+ extern void dpd_to_bid128 (UINT128 * pres, UINT128 * px);
+
+ extern void bid128dd_add (UINT128 * pres, UINT64 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dq_add (UINT128 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qd_add (UINT128 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_add (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dd_sub (UINT128 * pres, UINT64 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dq_sub (UINT128 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qd_sub (UINT128 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_sub (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dd_mul (UINT128 * pres, UINT64 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dq_mul (UINT128 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qd_mul (UINT128 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_mul (UINT128 * pres, UINT128 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_div (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dd_div (UINT128 * pres, UINT64 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dq_div (UINT128 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qd_div (UINT128 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_fma (UINT128 * pres, UINT128 * px,
+ UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128ddd_fma (UINT128 * pres, UINT64 * px,
+ UINT64 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128ddq_fma (UINT128 * pres, UINT64 * px,
+ UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dqd_fma (UINT128 * pres, UINT64 * px,
+ UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128dqq_fma (UINT128 * pres, UINT64 * px,
+ UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qdd_fma (UINT128 * pres, UINT128 * px,
+ UINT64 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qdq_fma (UINT128 * pres, UINT128 * px,
+ UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128qqd_fma (UINT128 * pres, UINT128 * px,
+ UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ // Note: bid128qqq_fma is represented by bid128_fma
+ // Note: bid64ddd_fma is represented by bid64_fma
+ extern void bid64ddq_fma (UINT64 * pres, UINT64 * px,
+ UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64dqd_fma (UINT64 * pres, UINT64 * px,
+ UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64dqq_fma (UINT64 * pres, UINT64 * px,
+ UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qdd_fma (UINT64 * pres, UINT128 * px,
+ UINT64 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qdq_fma (UINT64 * pres, UINT128 * px,
+ UINT64 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qqd_fma (UINT64 * pres, UINT128 * px,
+ UINT128 * py, UINT64 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qqq_fma (UINT64 * pres, UINT128 * px,
+ UINT128 * py, UINT128 * pz
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_sqrt (UINT128 * pres,
+ UINT128 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128d_sqrt (UINT128 * pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_add (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64dq_add (UINT64 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qd_add (UINT64 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qq_add (UINT64 * pres, UINT128 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_sub (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64dq_sub (UINT64 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qd_sub (UINT64 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qq_sub (UINT64 * pres, UINT128 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_mul (UINT64 * pres, UINT64 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64dq_mul (UINT64 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qd_mul (UINT64 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qq_mul (UINT64 * pres, UINT128 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_div (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64dq_div (UINT64 * pres, UINT64 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qd_div (UINT64 * pres, UINT128 * px,
+ UINT64 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64qq_div (UINT64 * pres, UINT128 * px,
+ UINT128 * py
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_fma (UINT64 * pres, UINT64 * px,
+ UINT64 * py,
+ UINT64 *
+ pz _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_sqrt (UINT64 * pres,
+ UINT64 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64q_sqrt (UINT64 * pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_to_int8_rnint (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int8_xrnint (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int8_rninta (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int8_xrninta (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int8_int (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_int8_xint (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_int8_floor (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int8_xfloor (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int8_ceil (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_int8_xceil (char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_rnint (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_xrnint (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_rninta (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_xrninta (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_int (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_int16_xint (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_floor (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_xfloor (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_ceil (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int16_xceil (short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_rnint (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_xrnint (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_rninta (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_xrninta (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_int (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_xint (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_floor (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_xfloor (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_ceil (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint8_xceil (unsigned char *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_rnint (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_xrnint (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_rninta (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_xrninta (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_int (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_xint (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_floor (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_xfloor (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_ceil (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint16_xceil (unsigned short *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_rnint (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_xrnint (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_rninta (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_xrninta (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_int (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_int32_xint (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_floor (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_xfloor (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_ceil (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int32_xceil (int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_rnint (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_xrnint (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_rninta (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_xrninta (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_int (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_xint (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_floor (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_xfloor (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_ceil (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint32_xceil (unsigned int *pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_rnint (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_xrnint (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_rninta (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_xrninta (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_int (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_int64_xint (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_floor (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_xfloor (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_ceil (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_int64_xceil (SINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_rnint (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_xrnint (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_rninta (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_xrninta (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_int (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_xint (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_floor (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_xfloor (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_ceil (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_to_uint64_xceil (UINT64 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_rnint (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_xrnint (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_rninta (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_xrninta (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_int (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int32_xint (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int32_floor (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_xfloor (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int32_ceil (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int32_xceil (int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int8_rnint (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int8_xrnint (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int8_rninta (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int8_xrninta (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int8_int (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int8_xint (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int8_floor (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int8_xfloor (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int8_ceil (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int8_xceil (char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int16_rnint (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int16_xrnint (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int16_rninta (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int16_xrninta (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int16_int (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int16_xint (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int16_floor (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int16_xfloor (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int16_ceil (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int16_xceil (short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_rnint (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_xrnint (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_rninta (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_xrninta (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_int (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_xint (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_floor (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_xfloor (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_ceil (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_uint8_xceil (unsigned char *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_rnint (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_xrnint (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_rninta (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_xrninta (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_int (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_xint (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_floor (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_xfloor (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_ceil (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint16_xceil (unsigned short *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_rnint (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_xrnint (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_rninta (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_xrninta (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_int (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_xint (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_floor (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_xfloor (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_ceil (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint32_xceil (unsigned int *pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_rnint (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_xrnint (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_rninta (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_xrninta (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_int (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int64_xint (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int64_floor (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_xfloor (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_int64_ceil (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_int64_xceil (SINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_rnint (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_xrnint (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_rninta (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_xrninta (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_int (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_xint (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_floor (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_xfloor (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_ceil (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_uint64_xceil (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid64_quiet_equal (int *pres, UINT64 * px, UINT64 * py
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_quiet_greater_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_greater_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_less_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_less_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_not_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_not_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_not_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_quiet_ordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_quiet_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_greater_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_greater_unordered (int *pres,
+ UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_less_equal (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_less_unordered (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_not_greater (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_signaling_not_less (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid128_quiet_equal (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_quiet_greater (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_greater_equal (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_greater_unordered (int *pres,
+ UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_less (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_less_equal (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_less_unordered (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_not_equal (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_not_greater (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_not_less (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_ordered (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_quiet_unordered (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_greater (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_greater_equal (int *pres,
+ UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_greater_unordered (int *pres,
+ UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_less (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_less_equal (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_less_unordered (int *pres,
+ UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_not_greater (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_signaling_not_less (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid64_round_integral_exact (UINT64 * pres, UINT64 * px
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_round_integral_nearest_even (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_round_integral_negative (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_round_integral_positive (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_round_integral_zero (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_round_integral_nearest_away (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid128_round_integral_exact (UINT128 * pres,
+ UINT128 *
+ px _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_round_integral_nearest_even (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_round_integral_negative (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_round_integral_positive (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_round_integral_zero (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_round_integral_nearest_away (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid64_nextup (UINT64 * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_nextdown (UINT64 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_nextafter (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid128_nextup (UINT128 * pres, UINT128 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_nextdown (UINT128 * pres,
+ UINT128 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_nextafter (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid64_minnum (UINT64 * pres, UINT64 * px, UINT64 * py
+ _EXC_FLAGS_PARAM);
+ extern void bid64_minnum_mag (UINT64 * pres, UINT64 * px,
+ UINT64 * py _EXC_FLAGS_PARAM);
+ extern void bid64_maxnum (UINT64 * pres, UINT64 * px, UINT64 * py
+ _EXC_FLAGS_PARAM);
+ extern void bid64_maxnum_mag (UINT64 * pres, UINT64 * px,
+ UINT64 * py _EXC_FLAGS_PARAM);
+
+ extern void bid128_minnum (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM);
+ extern void bid128_minnum_mag (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM);
+ extern void bid128_maxnum (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM);
+ extern void bid128_maxnum_mag (UINT128 * pres, UINT128 * px,
+ UINT128 * py _EXC_FLAGS_PARAM);
+
+ extern void bid64_from_int32 (UINT64 * pres, int *px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_from_uint32 (UINT64 * pres, unsigned int *px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_from_int64 (UINT64 * pres, SINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_from_uint64 (UINT64 * pres,
+ UINT64 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_from_int32 (UINT128 * pres,
+ int *px _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_from_uint32 (UINT128 * pres,
+ unsigned int *px _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_from_int64 (UINT128 * pres,
+ SINT64 *
+ px _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_from_uint64 (UINT128 * pres,
+ UINT64 *
+ px _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern void bid64_isSigned (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isNormal (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isSubnormal (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isFinite (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isZero (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isInf (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isSignaling (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isCanonical (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_isNaN (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_copy (UINT64 * pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_negate (UINT64 * pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_abs (UINT64 * pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_copySign (UINT64 * pres, UINT64 * px, UINT64 * py
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_class (int *pres, UINT64 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_sameQuantum (int *pres, UINT64 * px, UINT64 * py
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_totalOrder (int *pres, UINT64 * px, UINT64 * py
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_totalOrderMag (int *pres, UINT64 * px,
+ UINT64 *
+ py _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_radix (int *pres,
+ UINT64 *
+ px _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_isSigned (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isNormal (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isSubnormal (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isFinite (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isZero (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isInf (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isSignaling (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isCanonical (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_isNaN (int *pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_copy (UINT128 * pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_negate (UINT128 * pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_abs (UINT128 * pres, UINT128 * px
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_copySign (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_class (int *pres,
+ UINT128 *
+ px _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_sameQuantum (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_totalOrder (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_totalOrderMag (int *pres, UINT128 * px,
+ UINT128 *
+ py _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid128_radix (int *pres,
+ UINT128 *
+ px _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_rem (UINT64 * pres, UINT64 * px, UINT64 * py
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_logb (int * pres, UINT64 * px
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_scalb (UINT64 * pres, UINT64 * px,
+ int *pn _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_rem (UINT128 * pres, UINT128 * px, UINT128 * py
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_logb (int * pres, UINT128 * px
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_scalb (UINT128 * pres, UINT128 * px,
+ int *pn _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid32_to_bid64 (UINT64 * pres,
+ UINT32 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid32_to_bid128 (UINT128 * pres,
+ UINT32 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_bid128 (UINT128 * pres,
+ UINT64 *
+ px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern void bid64_to_bid32 (UINT32 * pres,
+ UINT64 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_bid32 (UINT32 * pres,
+ UINT128 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_bid64 (UINT64 * pres,
+ UINT128 *
+ px _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_from_string (UINT64 * pres, char *ps
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid64_to_string (char *ps, UINT64 * px
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_from_string (UINT128 * pres, char *ps
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_string (char *str, UINT128 * px
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_quantize (UINT64 * pres, UINT64 * px,
+ UINT64 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_quantize (UINT128 * pres, UINT128 * px,
+ UINT128 *
+ py _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_to_binary32 (float *pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_to_binary64 (double *pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_to_binary80 (BINARY80 * pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid128_to_binary128 (BINARY128 * pres, UINT128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary128_to_bid32 (UINT32 * pres, BINARY128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary128_to_bid64 (UINT64 * pres, BINARY128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary128_to_bid128 (UINT128 * pres, BINARY128 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_to_binary32 (float *pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_to_binary64 (double *pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_to_binary80 (BINARY80 * pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_to_binary128 (BINARY128 * pres, UINT64 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary64_to_bid32 (UINT32 * pres, double *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary64_to_bid64 (UINT64 * pres, double *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary64_to_bid128 (UINT128 * pres, double *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid32_to_binary32 (float *pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid32_to_binary64 (double *pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid32_to_binary80 (BINARY80 * pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid32_to_binary128 (BINARY128 * pres, UINT32 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary32_to_bid32 (UINT32 * pres, float *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary32_to_bid64 (UINT64 * pres, float *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary32_to_bid128 (UINT128 * pres, float *px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary80_to_bid32 (UINT32 * pres, BINARY80 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary80_to_bid64 (UINT64 * pres, BINARY80 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void binary80_to_bid128 (UINT128 * pres, BINARY80 * px
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void is754 (int *retval);
+
+ extern void is754R (int *retval);
+
+ extern void signalException (_IDEC_flags *
+ pflagsmask _EXC_FLAGS_PARAM);
+
+ extern void lowerFlags (_IDEC_flags * pflagsmask _EXC_FLAGS_PARAM);
+
+ extern void testFlags (_IDEC_flags * praised,
+ _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM);
+
+ extern void testSavedFlags (_IDEC_flags * praised,
+ _IDEC_flags * psavedflags,
+ _IDEC_flags * pflagsmask);
+
+ extern void restoreFlags (_IDEC_flags * pflagsvalues,
+ _IDEC_flags *
+ pflagsmask _EXC_FLAGS_PARAM);
+
+ extern void saveFlags (_IDEC_flags * pflagsvalues,
+ _IDEC_flags * pflagsmask _EXC_FLAGS_PARAM);
+
+ void getDecimalRoundingDirection (_IDEC_round *
+ rounding_mode _RND_MODE_PARAM);
+
+ void setDecimalRoundingDirection (_IDEC_round *
+ rounding_mode _RND_MODE_PARAM);
+
+#else
+
+ extern UINT32 bid_to_dpd32 (UINT32 px);
+ extern UINT64 bid_to_dpd64 (UINT64 px);
+ extern UINT128 bid_to_dpd128 (UINT128 px);
+ extern UINT32 dpd_to_bid32 (UINT32 px);
+ extern UINT64 dpd_to_bid64 (UINT64 px);
+ extern UINT128 dpd_to_bid128 (UINT128 px);
+
+ extern UINT128 bid128dd_add (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dq_add (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qd_add (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_add (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dd_sub (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dq_sub (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qd_sub (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_sub (UINT128 x,
+ UINT128 y _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128dd_mul (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dq_mul (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qd_mul (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_mul (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_div (UINT128 x,
+ UINT128 y _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128dd_div (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dq_div (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qd_div (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_fma (UINT128 x, UINT128 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128ddd_fma (UINT64 x, UINT64 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128ddq_fma (UINT64 x, UINT64 y, UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dqd_fma (UINT64 x, UINT128 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128dqq_fma (UINT64 x, UINT128 y,
+ UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qdd_fma (UINT128 x, UINT64 y, UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qdq_fma (UINT128 x, UINT64 y,
+ UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128qqd_fma (UINT128 x, UINT128 y,
+ UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ // Note: bid128qqq_fma is represented by bid128_fma
+ // Note: bid64ddd_fma is represented by bid64_fma
+ extern UINT64 bid64ddq_fma (UINT64 x, UINT64 y,
+ UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64dqd_fma (UINT64 x, UINT128 y,
+ UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64dqq_fma (UINT64 x, UINT128 y,
+ UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qdd_fma (UINT128 x, UINT64 y,
+ UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qdq_fma (UINT128 x, UINT64 y,
+ UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qqd_fma (UINT128 x, UINT128 y,
+ UINT64 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qqq_fma (UINT128 x, UINT128 y,
+ UINT128 z
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 bid128_sqrt (UINT128 x _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128d_sqrt (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT64 bid64_add (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64dq_add (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qd_add (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qq_add (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_sub (UINT64 x,
+ UINT64 y _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64dq_sub (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qd_sub (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qq_sub (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_mul (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64dq_mul (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qd_mul (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qq_mul (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_div (UINT64 x,
+ UINT64 y _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64dq_div (UINT64 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qd_div (UINT128 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64qq_div (UINT128 x, UINT128 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_fma (UINT64 x, UINT64 y,
+ UINT64 z _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_sqrt (UINT64 x _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64q_sqrt (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern char bid128_to_int8_rnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid128_to_int8_xrnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid128_to_int8_rninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid128_to_int8_xrninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid128_to_int8_int (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid128_to_int8_xint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid128_to_int8_floor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid128_to_int8_xfloor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid128_to_int8_ceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid128_to_int8_xceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_rnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_xrnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_rninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_xrninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_int (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_xint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_floor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_xfloor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_ceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid128_to_int16_xceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_rnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_xrnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_rninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_xrninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_int (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_xint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_floor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_xfloor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_ceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid128_to_uint8_xceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_rnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_xrnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_rninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_xrninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_int (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_xint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_floor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_xfloor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_ceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid128_to_uint16_xceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_rnint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_xrnint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_rninta (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_xrninta (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_int (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_to_int32_xint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_to_int32_floor (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_xfloor (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_to_int32_ceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_to_int32_xceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_rnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_xrnint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_rninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_xrninta (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_int (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_xint (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_floor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_xfloor (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_ceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid128_to_uint32_xceil (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_rnint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_xrnint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_rninta (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_xrninta (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_int (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_xint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_floor (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_xfloor (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_ceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid128_to_int64_xceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_rnint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_xrnint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_rninta (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_xrninta (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_int (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_xint (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_floor (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_xfloor (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_ceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_uint64_xceil (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_to_int32_rnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_to_int32_xrnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_to_int32_rninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_to_int32_xrninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_to_int32_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_to_int32_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_to_int32_floor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_to_int32_xfloor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_to_int32_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_to_int32_xceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid64_to_int8_rnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid64_to_int8_xrnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid64_to_int8_rninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid64_to_int8_xrninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid64_to_int8_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid64_to_int8_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid64_to_int8_floor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid64_to_int8_xfloor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern char bid64_to_int8_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern char bid64_to_int8_xceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern short bid64_to_int16_rnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_xrnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_rninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_xrninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern short bid64_to_int16_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_floor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_xfloor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern short bid64_to_int16_xceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_rnint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_xrnint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_rninta (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_xrninta (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_floor (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_xfloor (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned char bid64_to_uint8_xceil (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_rnint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_xrnint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_rninta (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_xrninta (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_int (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_xint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_floor (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_xfloor (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_ceil (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned short bid64_to_uint16_xceil (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_rnint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_xrnint (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_rninta (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_xrninta (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_floor (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_xfloor (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern unsigned int bid64_to_uint32_xceil (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_rnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_xrnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_rninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_xrninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_floor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_xfloor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern SINT64 bid64_to_int64_xceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_rnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_xrnint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_rninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_xrninta (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_int (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_xint (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_floor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_xfloor (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_ceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_to_uint64_xceil (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern int bid64_quiet_equal (UINT64 x, UINT64 y
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_quiet_greater_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_greater_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_quiet_less_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_less_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_not_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_not_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_quiet_not_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_quiet_ordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_quiet_unordered (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_greater_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_greater_unordered (UINT64 x,
+ UINT64 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_signaling_less_equal (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_less_unordered (UINT64 x,
+ UINT64 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_not_greater (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_signaling_not_less (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern int bid128_quiet_equal (UINT128 x, UINT128 y
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_greater (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_quiet_greater_equal (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_greater_unordered (UINT128 x,
+ UINT128 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_less (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_quiet_less_equal (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_less_unordered (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_not_equal (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_not_greater (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_not_less (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_quiet_ordered (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_quiet_unordered (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_greater (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_greater_equal (UINT128 x,
+ UINT128 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_greater_unordered (UINT128 x,
+ UINT128 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_less (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_less_equal (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_less_unordered (UINT128 x,
+ UINT128 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_not_greater (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_signaling_not_less (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT64 bid64_round_integral_exact (UINT64 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_round_integral_nearest_even (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_round_integral_negative (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_round_integral_positive (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_round_integral_zero (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_round_integral_nearest_away (UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT128 bid128_round_integral_exact (UINT128 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_round_integral_nearest_even (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_round_integral_negative (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_round_integral_positive (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_round_integral_zero (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_round_integral_nearest_away (UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT64 bid64_nextup (UINT64 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_nextafter (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 bid128_nextup (UINT128 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_nextdown (UINT128 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_nextafter (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT64 bid64_minnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM);
+ extern UINT64 bid64_minnum_mag (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM);
+ extern UINT64 bid64_maxnum (UINT64 x, UINT64 y _EXC_FLAGS_PARAM);
+ extern UINT64 bid64_maxnum_mag (UINT64 x,
+ UINT64 y _EXC_FLAGS_PARAM);
+
+ extern UINT128 bid128_minnum (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM);
+ extern UINT128 bid128_minnum_mag (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM);
+ extern UINT128 bid128_maxnum (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM);
+ extern UINT128 bid128_maxnum_mag (UINT128 x,
+ UINT128 y _EXC_FLAGS_PARAM);
+
+ extern UINT64 bid64_from_int32 (int x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_from_uint32 (unsigned int x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_from_int64 (SINT64 x _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_from_uint64 (UINT64 _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_from_int32 (int x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_from_uint32 (unsigned int x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_from_int64 (SINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_from_uint64 (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern int bid64_isSigned (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isNormal (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isSubnormal (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isFinite (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isZero (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isInf (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_isSignaling (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isCanonical (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_isNaN (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_copy (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_negate (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_abs (UINT64 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT64 bid64_copySign (UINT64 x,
+ UINT64 y _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid64_class (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_sameQuantum (UINT64 x, UINT64 y
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_totalOrder (UINT64 x, UINT64 y
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_totalOrderMag (UINT64 x, UINT64 y
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_radix (UINT64 x _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern int bid128_isSigned (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isNormal (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isSubnormal (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isFinite (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isZero (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isInf (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isSignaling (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isCanonical (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_isNaN (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_copy (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_negate (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_abs (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_copySign (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_class (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_sameQuantum (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_totalOrder (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_totalOrderMag (UINT128 x,
+ UINT128 y _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern int bid128_radix (UINT128 x _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT64 bid64_rem (UINT64 x, UINT64 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid64_logb (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_scalb (UINT64 x,
+ int n _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 bid128_rem (UINT128 x, UINT128 y
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern int bid128_logb (UINT128 x
+ _EXC_FLAGS_PARAM _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+ extern UINT128 bid128_scalb (UINT128 x,
+ int n _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT64 bid32_to_bid64 (UINT32 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid32_to_bid128 (UINT32 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid64_to_bid128 (UINT64 x _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT32 bid64_to_bid32 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT32 bid128_to_bid32 (UINT128 x _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid128_to_bid64 (UINT128 x _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern void bid64_to_string (char *ps, UINT64 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT64 bid64_from_string (char *ps
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern void bid128_to_string (char *str, UINT128 x
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+ extern UINT128 bid128_from_string (char *ps
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT64 bid64_quantize (UINT64 x, UINT64 y
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 bid128_quantize (UINT128 x, UINT128 y
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+
+ extern UINT32 binary128_to_bid32 (BINARY128 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT64 binary128_to_bid64 (BINARY128 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT128 binary128_to_bid128 (BINARY128 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT32 binary64_to_bid32 (double x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT64 binary64_to_bid64 (double x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 binary64_to_bid128 (double x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT32 binary80_to_bid32 (BINARY80 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT64 binary80_to_bid64 (BINARY80 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 binary80_to_bid128 (BINARY80 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern UINT32 binary32_to_bid32 (float x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT64 binary32_to_bid64 (float x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern UINT128 binary32_to_bid128 (float x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern float bid128_to_binary32 (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern double bid128_to_binary64 (UINT128 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern BINARY80 bid128_to_binary80 (UINT128 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern BINARY128 bid128_to_binary128 (UINT128 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern float bid64_to_binary32 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern double bid64_to_binary64 (UINT64 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern BINARY80 bid64_to_binary80 (UINT64 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern BINARY128 bid64_to_binary128 (UINT64 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern float bid32_to_binary32 (UINT32 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern double bid32_to_binary64 (UINT32 x
+ _RND_MODE_PARAM _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM _EXC_INFO_PARAM);
+
+ extern BINARY80 bid32_to_binary80 (UINT32 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern BINARY128 bid32_to_binary128 (UINT32 x
+ _RND_MODE_PARAM
+ _EXC_FLAGS_PARAM
+ _EXC_MASKS_PARAM
+ _EXC_INFO_PARAM);
+
+ extern int is754 (void);
+
+ extern int is754R (void);
+
+ extern void signalException (_IDEC_flags flagsmask
+ _EXC_FLAGS_PARAM);
+
+ extern void lowerFlags (_IDEC_flags flagsmask _EXC_FLAGS_PARAM);
+
+ extern _IDEC_flags testFlags (_IDEC_flags flagsmask
+ _EXC_FLAGS_PARAM);
+
+ extern _IDEC_flags testSavedFlags (_IDEC_flags savedflags,
+ _IDEC_flags flagsmask);
+
+ extern void restoreFlags (_IDEC_flags flagsvalues,
+ _IDEC_flags flagsmask _EXC_FLAGS_PARAM);
+
+ extern _IDEC_flags saveFlags (_IDEC_flags flagsmask
+ _EXC_FLAGS_PARAM);
+
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round getDecimalRoundingDirection (_IDEC_round rnd_mode);
+#else
+ _IDEC_round getDecimalRoundingDirection (void);
+#endif
+
+#if !DECIMAL_GLOBAL_ROUNDING
+ _IDEC_round setDecimalRoundingDirection (_IDEC_round
+ rounding_mode
+ _RND_MODE_PARAM);
+#else
+ void setDecimalRoundingDirection (_IDEC_round rounding_mode);
+#endif
+
+#endif
+
+// Internal Functions
+
+ extern void
+ round64_2_18 (int q,
+ int x,
+ UINT64 C,
+ UINT64 * ptr_Cstar,
+ int *delta_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint);
+
+ extern void
+ round128_19_38 (int q,
+ int x,
+ UINT128 C,
+ UINT128 * ptr_Cstar,
+ int *delta_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint);
+
+ extern void
+ round192_39_57 (int q,
+ int x,
+ UINT192 C,
+ UINT192 * ptr_Cstar,
+ int *delta_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint);
+
+ extern void
+ round256_58_76 (int q,
+ int x,
+ UINT256 C,
+ UINT256 * ptr_Cstar,
+ int *delta_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint);
+
+#endif
+
+// Prototypes for Internal Functions
+
+ extern UINT32 bid_to_bid32 (UINT32);
+ extern UINT64 bid_to_bid64 (UINT64);
+ extern UINT128 bid_to_bid128 (UINT128);
+ extern UINT32 bid32_canonize (UINT32);
+ extern UINT64 bid64_canonize (UINT64);
+ extern UINT128 bid128_canonize (UINT128);
diff --git a/gcc-4.9/libgcc/config/libbid/bid_gcc_intrinsics.h b/gcc-4.9/libgcc/config/libbid/bid_gcc_intrinsics.h
new file mode 100644
index 000000000..eec68bc05
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_gcc_intrinsics.h
@@ -0,0 +1,288 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _BID_GCC_INTRINSICS_H
+#define _BID_GCC_INTRINSICS_H
+
+#ifdef IN_LIBGCC2
+
+#include "tconfig.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+
+#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
+#endif
+
+#ifndef LIBGCC2_HAS_XF_MODE
+#define LIBGCC2_HAS_XF_MODE \
+ (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80)
+#endif
+
+#ifndef LIBGCC2_HAS_TF_MODE
+#define LIBGCC2_HAS_TF_MODE \
+ (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
+#endif
+
+#ifndef BID_HAS_XF_MODE
+#define BID_HAS_XF_MODE LIBGCC2_HAS_XF_MODE
+#endif
+
+#ifndef BID_HAS_TF_MODE
+#define BID_HAS_TF_MODE LIBGCC2_HAS_TF_MODE
+#endif
+
+/* Some handy typedefs. */
+
+typedef float SFtype __attribute__ ((mode (SF)));
+typedef float DFtype __attribute__ ((mode (DF)));
+#if LIBGCC2_HAS_XF_MODE
+typedef float XFtype __attribute__ ((mode (XF)));
+#endif /* LIBGCC2_HAS_XF_MODE */
+#if LIBGCC2_HAS_TF_MODE
+typedef float TFtype __attribute__ ((mode (TF)));
+#endif /* LIBGCC2_HAS_XF_MODE */
+
+typedef int SItype __attribute__ ((mode (SI)));
+typedef int DItype __attribute__ ((mode (DI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+typedef unsigned int UDItype __attribute__ ((mode (DI)));
+
+/* The type of the result of a decimal float comparison. This must
+ match `word_mode' in GCC for the target. */
+
+typedef int CMPtype __attribute__ ((mode (word)));
+
+typedef int SINT8 __attribute__ ((mode (QI)));
+typedef unsigned int UINT8 __attribute__ ((mode (QI)));
+typedef USItype UINT32;
+typedef SItype SINT32;
+typedef UDItype UINT64;
+typedef DItype SINT64;
+
+/* It has to be identical to the one defined in bid_functions.h. */
+typedef __attribute__ ((aligned(16))) struct
+{
+ UINT64 w[2];
+} UINT128;
+#else /* if not IN_LIBGCC2 */
+
+#ifndef BID_HAS_XF_MODE
+#define BID_HAS_XF_MODE 1
+#endif
+
+#ifndef BID_HAS_TF_MODE
+#if defined __i386__
+#define BID_HAS_TF_MODE 0
+#else
+#define BID_HAS_TF_MODE 1
+#endif
+#endif
+
+#ifndef SFtype
+#define SFtype float
+#endif
+
+#ifndef DFtype
+#define DFtype double
+#endif
+
+#if BID_HAS_XF_MODE
+#ifndef XFtype
+#define XFtype long double
+#endif
+
+#endif /* IN_LIBGCC2 */
+
+#if BID_HAS_TF_MODE
+#ifndef TFtype
+#define TFtype __float128
+#endif
+#endif
+
+#ifndef SItype
+#define SItype SINT32
+#endif
+
+#ifndef DItype
+#define DItype SINT64
+#endif
+
+#ifndef USItype
+#define USItype UINT32
+#endif
+
+#ifndef UDItype
+#define UDItype UINT64
+#endif
+
+#ifndef CMPtype
+#define CMPtype long
+#endif
+#endif /* IN_LIBGCC2 */
+
+#if BID_HAS_GCC_DECIMAL_INTRINSICS
+/* Prototypes for gcc instrinsics */
+
+extern _Decimal64 __bid_adddd3 (_Decimal64, _Decimal64);
+extern _Decimal64 __bid_subdd3 (_Decimal64, _Decimal64);
+extern _Decimal32 __bid_addsd3 (_Decimal32, _Decimal32);
+extern _Decimal32 __bid_subsd3 (_Decimal32, _Decimal32);
+extern _Decimal128 __bid_addtd3 (_Decimal128, _Decimal128);
+extern _Decimal128 __bid_subtd3 (_Decimal128, _Decimal128);
+extern DFtype __bid_truncdddf (_Decimal64);
+extern DItype __bid_fixdddi (_Decimal64);
+extern _Decimal32 __bid_truncddsd2 (_Decimal64);
+extern SFtype __bid_truncddsf (_Decimal64);
+extern SItype __bid_fixddsi (_Decimal64);
+extern _Decimal128 __bid_extendddtd2 (_Decimal64);
+#if BID_HAS_TF_MODE
+extern TFtype __bid_extendddtf (_Decimal64);
+#endif
+extern UDItype __bid_fixunsdddi (_Decimal64);
+extern USItype __bid_fixunsddsi (_Decimal64);
+#if BID_HAS_XF_MODE
+extern XFtype __bid_extendddxf (_Decimal64);
+#endif
+extern _Decimal64 __bid_extenddfdd (DFtype);
+extern _Decimal32 __bid_truncdfsd (DFtype);
+extern _Decimal128 __bid_extenddftd (DFtype);
+extern _Decimal64 __bid_floatdidd (DItype);
+extern _Decimal32 __bid_floatdisd (DItype);
+extern _Decimal128 __bid_floatditd (DItype);
+extern _Decimal64 __bid_divdd3 (_Decimal64, _Decimal64);
+extern _Decimal32 __bid_divsd3 (_Decimal32, _Decimal32);
+extern _Decimal128 __bid_divtd3 (_Decimal128, _Decimal128);
+extern CMPtype __bid_eqdd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_eqsd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_eqtd2 (_Decimal128, _Decimal128);
+extern CMPtype __bid_gedd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_gesd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_getd2 (_Decimal128, _Decimal128);
+extern CMPtype __bid_gtdd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_gtsd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_gttd2 (_Decimal128, _Decimal128);
+extern CMPtype __bid_ledd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_lesd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_letd2 (_Decimal128, _Decimal128);
+extern CMPtype __bid_ltdd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_ltsd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_lttd2 (_Decimal128, _Decimal128);
+extern CMPtype __bid_nedd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_nesd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_netd2 (_Decimal128, _Decimal128);
+extern CMPtype __bid_unorddd2 (_Decimal64, _Decimal64);
+extern CMPtype __bid_unordsd2 (_Decimal32, _Decimal32);
+extern CMPtype __bid_unordtd2 (_Decimal128, _Decimal128);
+extern _Decimal64 __bid_muldd3 (_Decimal64, _Decimal64);
+extern _Decimal32 __bid_mulsd3 (_Decimal32, _Decimal32);
+extern _Decimal128 __bid_multd3 (_Decimal128, _Decimal128);
+extern _Decimal64 __bid_extendsddd2 (_Decimal32);
+extern DFtype __bid_extendsddf (_Decimal32);
+extern DItype __bid_fixsddi (_Decimal32);
+extern SFtype __bid_truncsdsf (_Decimal32);
+extern SItype __bid_fixsdsi (_Decimal32);
+extern _Decimal128 __bid_extendsdtd2 (_Decimal32);
+#if BID_HAS_TF_MODE
+extern TFtype __bid_extendsdtf (_Decimal32);
+#endif
+extern UDItype __bid_fixunssddi (_Decimal32);
+extern USItype __bid_fixunssdsi (_Decimal32);
+#if BID_HAS_XF_MODE
+extern XFtype __bid_extendsdxf (_Decimal32);
+#endif
+extern _Decimal64 __bid_extendsfdd (SFtype);
+extern _Decimal32 __bid_extendsfsd (SFtype);
+extern _Decimal128 __bid_extendsftd (SFtype);
+extern _Decimal64 __bid_floatsidd (SItype);
+extern _Decimal32 __bid_floatsisd (SItype);
+extern _Decimal128 __bid_floatsitd (SItype);
+extern _Decimal64 __bid_trunctddd2 (_Decimal128);
+extern DFtype __bid_trunctddf (_Decimal128);
+extern DItype __bid_fixtddi (_Decimal128);
+extern _Decimal32 __bid_trunctdsd2 (_Decimal128);
+extern SFtype __bid_trunctdsf (_Decimal128);
+extern SItype __bid_fixtdsi (_Decimal128);
+#if BID_HAS_TF_MODE
+extern TFtype __bid_trunctdtf (_Decimal128);
+#endif
+extern UDItype __bid_fixunstddi (_Decimal128);
+extern USItype __bid_fixunstdsi (_Decimal128);
+#if BID_HAS_XF_MODE
+extern XFtype __bid_trunctdxf (_Decimal128);
+#endif
+#if BID_HAS_TF_MODE
+extern _Decimal64 __bid_trunctfdd (TFtype);
+extern _Decimal32 __bid_trunctfsd (TFtype);
+extern _Decimal128 __bid_extendtftd (TFtype);
+#endif
+extern _Decimal64 __bid_floatunsdidd (UDItype);
+extern _Decimal32 __bid_floatunsdisd (UDItype);
+extern _Decimal128 __bid_floatunsditd (UDItype);
+extern _Decimal64 __bid_floatunssidd (USItype);
+extern _Decimal32 __bid_floatunssisd (USItype);
+extern _Decimal128 __bid_floatunssitd (USItype);
+#if BID_HAS_XF_MODE
+extern _Decimal64 __bid_truncxfdd (XFtype);
+extern _Decimal32 __bid_truncxfsd (XFtype);
+extern _Decimal128 __bid_extendxftd (XFtype);
+#endif
+extern int isinfd32 (_Decimal32);
+extern int isinfd64 (_Decimal64);
+extern int isinfd128 (_Decimal128);
+#endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
+
+extern void __dfp_set_round (int);
+extern int __dfp_get_round (void);
+extern void __dfp_clear_except (void);
+extern int __dfp_test_except (int);
+extern void __dfp_raise_except (int);
+
+#if BID_HAS_GCC_DECIMAL_INTRINSICS
+/* Used by gcc intrinsics. We have to define them after UINT128
+ is defined. */
+union decimal32 {
+ _Decimal32 d;
+ UINT32 i;
+};
+
+union decimal64 {
+ _Decimal64 d;
+ UINT64 i;
+};
+
+union decimal128 {
+ _Decimal128 d;
+ UINT128 i;
+};
+
+#if BID_HAS_TF_MODE
+union float128 {
+ TFtype f;
+ UINT128 i;
+};
+#endif
+#endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
+
+#endif /* _BID_GCC_INTRINSICS_H */
diff --git a/gcc-4.9/libgcc/config/libbid/bid_inline_add.h b/gcc-4.9/libgcc/config/libbid/bid_inline_add.h
new file mode 100644
index 000000000..331e610a8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_inline_add.h
@@ -0,0 +1,1253 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ *
+ * Helper add functions (for fma)
+ *
+ * __BID_INLINE__ UINT64 get_add64(
+ * UINT64 sign_x, int exponent_x, UINT64 coefficient_x,
+ * UINT64 sign_y, int exponent_y, UINT64 coefficient_y,
+ * int rounding_mode)
+ *
+ * __BID_INLINE__ UINT64 get_add128(
+ * UINT64 sign_x, int exponent_x, UINT64 coefficient_x,
+ * UINT64 sign_y, int final_exponent_y, UINT128 CY,
+ * int extra_digits, int rounding_mode)
+ *
+ *****************************************************************************
+ *
+ * Algorithm description:
+ *
+ * get_add64: same as BID64 add, but arguments are unpacked and there
+ * are no special case checks
+ *
+ * get_add128: add 64-bit coefficient to 128-bit product (which contains
+ * 16+extra_digits decimal digits),
+ * return BID64 result
+ * - the exponents are compared and the two coefficients are
+ * properly aligned for addition/subtraction
+ * - multiple paths are needed
+ * - final result exponent is calculated and the lower term is
+ * rounded first if necessary, to avoid manipulating
+ * coefficients longer than 128 bits
+ *
+ ****************************************************************************/
+
+#ifndef _INLINE_BID_ADD_H_
+#define _INLINE_BID_ADD_H_
+
+#include "bid_internal.h"
+
+#define MAX_FORMAT_DIGITS 16
+#define DECIMAL_EXPONENT_BIAS 398
+#define MASK_BINARY_EXPONENT 0x7ff0000000000000ull
+#define BINARY_EXPONENT_BIAS 0x3ff
+#define UPPER_EXPON_LIMIT 51
+
+///////////////////////////////////////////////////////////////////////
+//
+// get_add64() is essentially the same as bid_add(), except that
+// the arguments are unpacked
+//
+//////////////////////////////////////////////////////////////////////
+__BID_INLINE__ UINT64
+get_add64 (UINT64 sign_x, int exponent_x, UINT64 coefficient_x,
+ UINT64 sign_y, int exponent_y, UINT64 coefficient_y,
+ int rounding_mode, unsigned *fpsc) {
+ UINT128 CA, CT, CT_new;
+ UINT64 sign_a, sign_b, coefficient_a, coefficient_b, sign_s, sign_ab,
+ rem_a;
+ UINT64 saved_ca, saved_cb, C0_64, C64, remainder_h, T1, carry, tmp,
+ C64_new;
+ int_double tempx;
+ int exponent_a, exponent_b, diff_dec_expon;
+ int bin_expon_ca, extra_digits, amount, scale_k, scale_ca;
+ unsigned rmode, status;
+
+ // sort arguments by exponent
+ if (exponent_x <= exponent_y) {
+ sign_a = sign_y;
+ exponent_a = exponent_y;
+ coefficient_a = coefficient_y;
+ sign_b = sign_x;
+ exponent_b = exponent_x;
+ coefficient_b = coefficient_x;
+ } else {
+ sign_a = sign_x;
+ exponent_a = exponent_x;
+ coefficient_a = coefficient_x;
+ sign_b = sign_y;
+ exponent_b = exponent_y;
+ coefficient_b = coefficient_y;
+ }
+
+ // exponent difference
+ diff_dec_expon = exponent_a - exponent_b;
+
+ /* get binary coefficients of x and y */
+
+ //--- get number of bits in the coefficients of x and y ---
+
+ tempx.d = (double) coefficient_a;
+ bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+
+ if (!coefficient_a) {
+ return get_BID64 (sign_b, exponent_b, coefficient_b, rounding_mode,
+ fpsc);
+ }
+ if (diff_dec_expon > MAX_FORMAT_DIGITS) {
+ // normalize a to a 16-digit coefficient
+
+ scale_ca = estimate_decimal_digits[bin_expon_ca];
+ if (coefficient_a >= power10_table_128[scale_ca].w[0])
+ scale_ca++;
+
+ scale_k = 16 - scale_ca;
+
+ coefficient_a *= power10_table_128[scale_k].w[0];
+
+ diff_dec_expon -= scale_k;
+ exponent_a -= scale_k;
+
+ /* get binary coefficients of x and y */
+
+ //--- get number of bits in the coefficients of x and y ---
+ tempx.d = (double) coefficient_a;
+ bin_expon_ca = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+
+ if (diff_dec_expon > MAX_FORMAT_DIGITS) {
+#ifdef SET_STATUS_FLAGS
+ if (coefficient_b) {
+ __set_status_flags (fpsc, INEXACT_EXCEPTION);
+ }
+#endif
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (((rounding_mode) & 3) && coefficient_b) // not ROUNDING_TO_NEAREST
+ {
+ switch (rounding_mode) {
+ case ROUNDING_DOWN:
+ if (sign_b) {
+ coefficient_a -= ((((SINT64) sign_a) >> 63) | 1);
+ if (coefficient_a < 1000000000000000ull) {
+ exponent_a--;
+ coefficient_a = 9999999999999999ull;
+ } else if (coefficient_a >= 10000000000000000ull) {
+ exponent_a++;
+ coefficient_a = 1000000000000000ull;
+ }
+ }
+ break;
+ case ROUNDING_UP:
+ if (!sign_b) {
+ coefficient_a += ((((SINT64) sign_a) >> 63) | 1);
+ if (coefficient_a < 1000000000000000ull) {
+ exponent_a--;
+ coefficient_a = 9999999999999999ull;
+ } else if (coefficient_a >= 10000000000000000ull) {
+ exponent_a++;
+ coefficient_a = 1000000000000000ull;
+ }
+ }
+ break;
+ default: // RZ
+ if (sign_a != sign_b) {
+ coefficient_a--;
+ if (coefficient_a < 1000000000000000ull) {
+ exponent_a--;
+ coefficient_a = 9999999999999999ull;
+ }
+ }
+ break;
+ }
+ } else
+#endif
+#endif
+ // check special case here
+ if ((coefficient_a == 1000000000000000ull)
+ && (diff_dec_expon == MAX_FORMAT_DIGITS + 1)
+ && (sign_a ^ sign_b)
+ && (coefficient_b > 5000000000000000ull)) {
+ coefficient_a = 9999999999999999ull;
+ exponent_a--;
+ }
+
+ return get_BID64 (sign_a, exponent_a, coefficient_a,
+ rounding_mode, fpsc);
+ }
+ }
+ // test whether coefficient_a*10^(exponent_a-exponent_b) may exceed 2^62
+ if (bin_expon_ca + estimate_bin_expon[diff_dec_expon] < 60) {
+ // coefficient_a*10^(exponent_a-exponent_b)<2^63
+
+ // multiply by 10^(exponent_a-exponent_b)
+ coefficient_a *= power10_table_128[diff_dec_expon].w[0];
+
+ // sign mask
+ sign_b = ((SINT64) sign_b) >> 63;
+ // apply sign to coeff. of b
+ coefficient_b = (coefficient_b + sign_b) ^ sign_b;
+
+ // apply sign to coefficient a
+ sign_a = ((SINT64) sign_a) >> 63;
+ coefficient_a = (coefficient_a + sign_a) ^ sign_a;
+
+ coefficient_a += coefficient_b;
+ // get sign
+ sign_s = ((SINT64) coefficient_a) >> 63;
+ coefficient_a = (coefficient_a + sign_s) ^ sign_s;
+ sign_s &= 0x8000000000000000ull;
+
+ // coefficient_a < 10^16 ?
+ if (coefficient_a < power10_table_128[MAX_FORMAT_DIGITS].w[0]) {
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rounding_mode == ROUNDING_DOWN && (!coefficient_a)
+ && sign_a != sign_b)
+ sign_s = 0x8000000000000000ull;
+#endif
+#endif
+ return get_BID64 (sign_s, exponent_b, coefficient_a,
+ rounding_mode, fpsc);
+ }
+ // otherwise rounding is necessary
+
+ // already know coefficient_a<10^19
+ // coefficient_a < 10^17 ?
+ if (coefficient_a < power10_table_128[17].w[0])
+ extra_digits = 1;
+ else if (coefficient_a < power10_table_128[18].w[0])
+ extra_digits = 2;
+ else
+ extra_digits = 3;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rounding_mode;
+ if (sign_s && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ coefficient_a += round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_a,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C64 = CT.w[1] >> amount;
+
+ } else {
+ // coefficient_a*10^(exponent_a-exponent_b) is large
+ sign_s = sign_a;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rounding_mode;
+ if (sign_s && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+
+ // check whether we can take faster path
+ scale_ca = estimate_decimal_digits[bin_expon_ca];
+
+ sign_ab = sign_a ^ sign_b;
+ sign_ab = ((SINT64) sign_ab) >> 63;
+
+ // T1 = 10^(16-diff_dec_expon)
+ T1 = power10_table_128[16 - diff_dec_expon].w[0];
+
+ // get number of digits in coefficient_a
+ //P_ca = power10_table_128[scale_ca].w[0];
+ //P_ca_m1 = power10_table_128[scale_ca-1].w[0];
+ if (coefficient_a >= power10_table_128[scale_ca].w[0]) {
+ scale_ca++;
+ //P_ca_m1 = P_ca;
+ //P_ca = power10_table_128[scale_ca].w[0];
+ }
+
+ scale_k = 16 - scale_ca;
+
+ // apply sign
+ //Ts = (T1 + sign_ab) ^ sign_ab;
+
+ // test range of ca
+ //X = coefficient_a + Ts - P_ca_m1;
+
+ // addition
+ saved_ca = coefficient_a - T1;
+ coefficient_a =
+ (SINT64) saved_ca *(SINT64) power10_table_128[scale_k].w[0];
+ extra_digits = diff_dec_expon - scale_k;
+
+ // apply sign
+ saved_cb = (coefficient_b + sign_ab) ^ sign_ab;
+ // add 10^16 and rounding constant
+ coefficient_b =
+ saved_cb + 10000000000000000ull +
+ round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_b,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C0_64 = CT.w[1] >> amount;
+
+ // result coefficient
+ C64 = C0_64 + coefficient_a;
+ // filter out difficult (corner) cases
+ // the following test is equivalent to
+ // ( (initial_coefficient_a + Ts) < P_ca &&
+ // (initial_coefficient_a + Ts) > P_ca_m1 ),
+ // which ensures the number of digits in coefficient_a does not change
+ // after adding (the appropriately scaled and rounded) coefficient_b
+ if ((UINT64) (C64 - 1000000000000000ull - 1) >
+ 9000000000000000ull - 2) {
+ if (C64 >= 10000000000000000ull) {
+ // result has more than 16 digits
+ if (!scale_k) {
+ // must divide coeff_a by 10
+ saved_ca = saved_ca + T1;
+ __mul_64x64_to_128 (CA, saved_ca, 0x3333333333333334ull);
+ //reciprocals10_64[1]);
+ coefficient_a = CA.w[1] >> 1;
+ rem_a =
+ saved_ca - (coefficient_a << 3) - (coefficient_a << 1);
+ coefficient_a = coefficient_a - T1;
+
+ saved_cb +=
+ /*90000000000000000 */ +rem_a *
+ power10_table_128[diff_dec_expon].w[0];
+ } else
+ coefficient_a =
+ (SINT64) (saved_ca - T1 -
+ (T1 << 3)) * (SINT64) power10_table_128[scale_k -
+ 1].w[0];
+
+ extra_digits++;
+ coefficient_b =
+ saved_cb + 100000000000000000ull +
+ round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT, coefficient_b,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C0_64 = CT.w[1] >> amount;
+
+ // result coefficient
+ C64 = C0_64 + coefficient_a;
+ } else if (C64 <= 1000000000000000ull) {
+ // less than 16 digits in result
+ coefficient_a =
+ (SINT64) saved_ca *(SINT64) power10_table_128[scale_k +
+ 1].w[0];
+ //extra_digits --;
+ exponent_b--;
+ coefficient_b =
+ (saved_cb << 3) + (saved_cb << 1) + 100000000000000000ull +
+ round_const_table[rmode][extra_digits];
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (CT_new, coefficient_b,
+ reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift C64 right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+ C0_64 = CT_new.w[1] >> amount;
+
+ // result coefficient
+ C64_new = C0_64 + coefficient_a;
+ if (C64_new < 10000000000000000ull) {
+ C64 = C64_new;
+#ifdef SET_STATUS_FLAGS
+ CT = CT_new;
+#endif
+ } else
+ exponent_b++;
+ }
+
+ }
+
+ }
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits
+ // is exactly .5
+ // this is the same as fractional part of
+ // (initial_P + 0.5*10^extra_digits)/10^extra_digits is exactly zero
+
+ // get remainder
+ remainder_h = CT.w[1] << (64 - amount);
+
+ // test whether fractional part is 0
+ if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits])) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status = INEXACT_EXCEPTION;
+
+ // get remainder
+ remainder_h = CT.w[1] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if ((remainder_h == 0x8000000000000000ull)
+ && (CT.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h && (CT.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (tmp, carry, CT.w[0],
+ reciprocals10_64[extra_digits]);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ break;
+ }
+ __set_status_flags (fpsc, status);
+
+#endif
+
+ return get_BID64 (sign_s, exponent_b + extra_digits, C64,
+ rounding_mode, fpsc);
+}
+
+
+///////////////////////////////////////////////////////////////////
+// round 128-bit coefficient and return result in BID64 format
+// do not worry about midpoint cases
+//////////////////////////////////////////////////////////////////
+static UINT64
+__bid_simple_round64_sticky (UINT64 sign, int exponent, UINT128 P,
+ int extra_digits, int rounding_mode,
+ unsigned *fpsc) {
+ UINT128 Q_high, Q_low, C128;
+ UINT64 C64;
+ int amount, rmode;
+
+ rmode = rounding_mode;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (sign && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#endif
+#endif
+ __add_128_64 (P, P, round_const_table[rmode][extra_digits]);
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Q_high, Q_low, P,
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+ __shr_128 (C128, Q_high, amount);
+
+ C64 = __low_64 (C128);
+
+#ifdef SET_STATUS_FLAGS
+
+ __set_status_flags (fpsc, INEXACT_EXCEPTION);
+
+#endif
+
+ return get_BID64 (sign, exponent, C64, rounding_mode, fpsc);
+}
+
+///////////////////////////////////////////////////////////////////
+// round 128-bit coefficient and return result in BID64 format
+///////////////////////////////////////////////////////////////////
+static UINT64
+__bid_full_round64 (UINT64 sign, int exponent, UINT128 P,
+ int extra_digits, int rounding_mode,
+ unsigned *fpsc) {
+ UINT128 Q_high, Q_low, C128, Stemp, PU;
+ UINT64 remainder_h, C64, carry, CY;
+ int amount, amount2, rmode, status = 0;
+
+ if (exponent < 0) {
+ if (exponent >= -16 && (extra_digits + exponent < 0)) {
+ extra_digits = -exponent;
+#ifdef SET_STATUS_FLAGS
+ if (extra_digits > 0) {
+ rmode = rounding_mode;
+ if (sign && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ __add_128_128 (PU, P,
+ round_const_table_128[rmode][extra_digits]);
+ if (__unsigned_compare_gt_128
+ (power10_table_128[extra_digits + 15], PU))
+ status = UNDERFLOW_EXCEPTION;
+ }
+#endif
+ }
+ }
+
+ if (extra_digits > 0) {
+ exponent += extra_digits;
+ rmode = rounding_mode;
+ if (sign && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ __add_128_128 (P, P, round_const_table_128[rmode][extra_digits]);
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Q_high, Q_low, P,
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+ __shr_128_long (C128, Q_high, amount);
+
+ C64 = __low_64 (C128);
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits
+ // is exactly .5
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & Q_high.w[0];
+
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0]))) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status |= INEXACT_EXCEPTION;
+
+ // get remainder
+ remainder_h = Q_high.w[0] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Q_low.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1],
+ reciprocals10_128[extra_digits].w[1], CY);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ __set_status_flags (fpsc, status);
+
+#endif
+ } else {
+ C64 = P.w[0];
+ if (!C64) {
+ sign = 0;
+ if (rounding_mode == ROUNDING_DOWN)
+ sign = 0x8000000000000000ull;
+ }
+ }
+ return get_BID64 (sign, exponent, C64, rounding_mode, fpsc);
+}
+
+/////////////////////////////////////////////////////////////////////////////////
+// round 192-bit coefficient (P, remainder_P) and return result in BID64 format
+// the lowest 64 bits (remainder_P) are used for midpoint checking only
+////////////////////////////////////////////////////////////////////////////////
+static UINT64
+__bid_full_round64_remainder (UINT64 sign, int exponent, UINT128 P,
+ int extra_digits, UINT64 remainder_P,
+ int rounding_mode, unsigned *fpsc,
+ unsigned uf_status) {
+ UINT128 Q_high, Q_low, C128, Stemp;
+ UINT64 remainder_h, C64, carry, CY;
+ int amount, amount2, rmode, status = uf_status;
+
+ rmode = rounding_mode;
+ if (sign && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+ if (rmode == ROUNDING_UP && remainder_P) {
+ P.w[0]++;
+ if (!P.w[0])
+ P.w[1]++;
+ }
+
+ if (extra_digits) {
+ __add_128_64 (P, P, round_const_table[rmode][extra_digits]);
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Q_high, Q_low, P,
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+ __shr_128 (C128, Q_high, amount);
+
+ C64 = __low_64 (C128);
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (!remainder_P && (C64 & 1)) {
+ // check whether fractional part of initial_P/10^extra_digits
+ // is exactly .5
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & Q_high.w[0];
+
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0]))) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status |= INEXACT_EXCEPTION;
+
+ if (!remainder_P) {
+ // get remainder
+ remainder_h = Q_high.w[0] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Q_low.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1],
+ reciprocals10_128[extra_digits].w[1], CY);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+ }
+ __set_status_flags (fpsc, status);
+
+#endif
+ } else {
+ C64 = P.w[0];
+#ifdef SET_STATUS_FLAGS
+ if (remainder_P) {
+ __set_status_flags (fpsc, uf_status | INEXACT_EXCEPTION);
+ }
+#endif
+ }
+
+ return get_BID64 (sign, exponent + extra_digits, C64, rounding_mode,
+ fpsc);
+}
+
+
+///////////////////////////////////////////////////////////////////
+// get P/10^extra_digits
+// result fits in 64 bits
+///////////////////////////////////////////////////////////////////
+__BID_INLINE__ UINT64
+__truncate (UINT128 P, int extra_digits)
+// extra_digits <= 16
+{
+ UINT128 Q_high, Q_low, C128;
+ UINT64 C64;
+ int amount;
+
+ // get P*(2^M[extra_digits])/10^extra_digits
+ __mul_128x128_full (Q_high, Q_low, P,
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+ __shr_128 (C128, Q_high, amount);
+
+ C64 = __low_64 (C128);
+
+ return C64;
+}
+
+
+///////////////////////////////////////////////////////////////////
+// return number of decimal digits in 128-bit value X
+///////////////////////////////////////////////////////////////////
+__BID_INLINE__ int
+__get_dec_digits64 (UINT128 X) {
+ int_double tempx;
+ int digits_x, bin_expon_cx;
+
+ if (!X.w[1]) {
+ //--- get number of bits in the coefficients of x and y ---
+ tempx.d = (double) X.w[0];
+ bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+ // get number of decimal digits in the coeff_x
+ digits_x = estimate_decimal_digits[bin_expon_cx];
+ if (X.w[0] >= power10_table_128[digits_x].w[0])
+ digits_x++;
+ return digits_x;
+ }
+ tempx.d = (double) X.w[1];
+ bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+ // get number of decimal digits in the coeff_x
+ digits_x = estimate_decimal_digits[bin_expon_cx + 64];
+ if (__unsigned_compare_ge_128 (X, power10_table_128[digits_x]))
+ digits_x++;
+
+ return digits_x;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// add 64-bit coefficient to 128-bit coefficient, return result in BID64 format
+//
+////////////////////////////////////////////////////////////////////////////////
+__BID_INLINE__ UINT64
+get_add128 (UINT64 sign_x, int exponent_x, UINT64 coefficient_x,
+ UINT64 sign_y, int final_exponent_y, UINT128 CY,
+ int extra_digits, int rounding_mode, unsigned *fpsc) {
+ UINT128 CY_L, CX, FS, F, CT, ST, T2;
+ UINT64 CYh, CY0L, T, S, coefficient_y, remainder_y;
+ SINT64 D = 0;
+ int_double tempx;
+ int diff_dec_expon, extra_digits2, exponent_y, status;
+ int extra_dx, diff_dec2, bin_expon_cx, digits_x, rmode;
+
+ // CY has more than 16 decimal digits
+
+ exponent_y = final_exponent_y - extra_digits;
+
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ rounding_mode = 0;
+#endif
+#ifdef IEEE_ROUND_NEAREST
+ rounding_mode = 0;
+#endif
+
+ if (exponent_x > exponent_y) {
+ // normalize x
+ //--- get number of bits in the coefficients of x and y ---
+ tempx.d = (double) coefficient_x;
+ bin_expon_cx = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+ // get number of decimal digits in the coeff_x
+ digits_x = estimate_decimal_digits[bin_expon_cx];
+ if (coefficient_x >= power10_table_128[digits_x].w[0])
+ digits_x++;
+
+ extra_dx = 16 - digits_x;
+ coefficient_x *= power10_table_128[extra_dx].w[0];
+ if ((sign_x ^ sign_y) && (coefficient_x == 1000000000000000ull)) {
+ extra_dx++;
+ coefficient_x = 10000000000000000ull;
+ }
+ exponent_x -= extra_dx;
+
+ if (exponent_x > exponent_y) {
+
+ // exponent_x > exponent_y
+ diff_dec_expon = exponent_x - exponent_y;
+
+ if (exponent_x <= final_exponent_y + 1) {
+ __mul_64x64_to_128 (CX, coefficient_x,
+ power10_table_128[diff_dec_expon].w[0]);
+
+ if (sign_x == sign_y) {
+ __add_128_128 (CT, CY, CX);
+ if ((exponent_x >
+ final_exponent_y) /*&& (final_exponent_y>0) */ )
+ extra_digits++;
+ if (__unsigned_compare_ge_128
+ (CT, power10_table_128[16 + extra_digits]))
+ extra_digits++;
+ } else {
+ __sub_128_128 (CT, CY, CX);
+ if (((SINT64) CT.w[1]) < 0) {
+ CT.w[0] = 0 - CT.w[0];
+ CT.w[1] = 0 - CT.w[1];
+ if (CT.w[0])
+ CT.w[1]--;
+ sign_y = sign_x;
+ } else if (!(CT.w[1] | CT.w[0])) {
+ sign_y =
+ (rounding_mode !=
+ ROUNDING_DOWN) ? 0 : 0x8000000000000000ull;
+ }
+ if ((exponent_x + 1 >=
+ final_exponent_y) /*&& (final_exponent_y>=0) */ ) {
+ extra_digits = __get_dec_digits64 (CT) - 16;
+ if (extra_digits <= 0) {
+ if (!CT.w[0] && rounding_mode == ROUNDING_DOWN)
+ sign_y = 0x8000000000000000ull;
+ return get_BID64 (sign_y, exponent_y, CT.w[0],
+ rounding_mode, fpsc);
+ }
+ } else
+ if (__unsigned_compare_gt_128
+ (power10_table_128[15 + extra_digits], CT))
+ extra_digits--;
+ }
+
+ return __bid_full_round64 (sign_y, exponent_y, CT, extra_digits,
+ rounding_mode, fpsc);
+ }
+ // diff_dec2+extra_digits is the number of digits to eliminate from
+ // argument CY
+ diff_dec2 = exponent_x - final_exponent_y;
+
+ if (diff_dec2 >= 17) {
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ if ((rounding_mode) & 3) {
+ switch (rounding_mode) {
+ case ROUNDING_UP:
+ if (!sign_y) {
+ D = ((SINT64) (sign_x ^ sign_y)) >> 63;
+ D = D + D + 1;
+ coefficient_x += D;
+ }
+ break;
+ case ROUNDING_DOWN:
+ if (sign_y) {
+ D = ((SINT64) (sign_x ^ sign_y)) >> 63;
+ D = D + D + 1;
+ coefficient_x += D;
+ }
+ break;
+ case ROUNDING_TO_ZERO:
+ if (sign_y != sign_x) {
+ D = 0 - 1;
+ coefficient_x += D;
+ }
+ break;
+ }
+ if (coefficient_x < 1000000000000000ull) {
+ coefficient_x -= D;
+ coefficient_x =
+ D + (coefficient_x << 1) + (coefficient_x << 3);
+ exponent_x--;
+ }
+ }
+#endif
+#endif
+#ifdef SET_STATUS_FLAGS
+ if (CY.w[1] | CY.w[0])
+ __set_status_flags (fpsc, INEXACT_EXCEPTION);
+#endif
+ return get_BID64 (sign_x, exponent_x, coefficient_x,
+ rounding_mode, fpsc);
+ }
+ // here exponent_x <= 16+final_exponent_y
+
+ // truncate CY to 16 dec. digits
+ CYh = __truncate (CY, extra_digits);
+
+ // get remainder
+ T = power10_table_128[extra_digits].w[0];
+ __mul_64x64_to_64 (CY0L, CYh, T);
+
+ remainder_y = CY.w[0] - CY0L;
+
+ // align coeff_x, CYh
+ __mul_64x64_to_128 (CX, coefficient_x,
+ power10_table_128[diff_dec2].w[0]);
+
+ if (sign_x == sign_y) {
+ __add_128_64 (CT, CX, CYh);
+ if (__unsigned_compare_ge_128
+ (CT, power10_table_128[16 + diff_dec2]))
+ diff_dec2++;
+ } else {
+ if (remainder_y)
+ CYh++;
+ __sub_128_64 (CT, CX, CYh);
+ if (__unsigned_compare_gt_128
+ (power10_table_128[15 + diff_dec2], CT))
+ diff_dec2--;
+ }
+
+ return __bid_full_round64_remainder (sign_x, final_exponent_y, CT,
+ diff_dec2, remainder_y,
+ rounding_mode, fpsc, 0);
+ }
+ }
+ // Here (exponent_x <= exponent_y)
+ {
+ diff_dec_expon = exponent_y - exponent_x;
+
+ if (diff_dec_expon > MAX_FORMAT_DIGITS) {
+ rmode = rounding_mode;
+
+ if ((sign_x ^ sign_y)) {
+ if (!CY.w[0])
+ CY.w[1]--;
+ CY.w[0]--;
+ if (__unsigned_compare_gt_128
+ (power10_table_128[15 + extra_digits], CY)) {
+ if (rmode & 3) {
+ extra_digits--;
+ final_exponent_y--;
+ } else {
+ CY.w[0] = 1000000000000000ull;
+ CY.w[1] = 0;
+ extra_digits = 0;
+ }
+ }
+ }
+ __scale128_10 (CY, CY);
+ extra_digits++;
+ CY.w[0] |= 1;
+
+ return __bid_simple_round64_sticky (sign_y, final_exponent_y, CY,
+ extra_digits, rmode, fpsc);
+ }
+ // apply sign to coeff_x
+ sign_x ^= sign_y;
+ sign_x = ((SINT64) sign_x) >> 63;
+ CX.w[0] = (coefficient_x + sign_x) ^ sign_x;
+ CX.w[1] = sign_x;
+
+ // check whether CY (rounded to 16 digits) and CX have
+ // any digits in the same position
+ diff_dec2 = final_exponent_y - exponent_x;
+
+ if (diff_dec2 <= 17) {
+ // align CY to 10^ex
+ S = power10_table_128[diff_dec_expon].w[0];
+ __mul_64x128_short (CY_L, S, CY);
+
+ __add_128_128 (ST, CY_L, CX);
+ extra_digits2 = __get_dec_digits64 (ST) - 16;
+ return __bid_full_round64 (sign_y, exponent_x, ST, extra_digits2,
+ rounding_mode, fpsc);
+ }
+ // truncate CY to 16 dec. digits
+ CYh = __truncate (CY, extra_digits);
+
+ // get remainder
+ T = power10_table_128[extra_digits].w[0];
+ __mul_64x64_to_64 (CY0L, CYh, T);
+
+ coefficient_y = CY.w[0] - CY0L;
+ // add rounding constant
+ rmode = rounding_mode;
+ if (sign_y && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (!(rmode & 3)) //ROUNDING_TO_NEAREST
+#endif
+#endif
+ {
+ coefficient_y += round_const_table[rmode][extra_digits];
+ }
+ // align coefficient_y, coefficient_x
+ S = power10_table_128[diff_dec_expon].w[0];
+ __mul_64x64_to_128 (F, coefficient_y, S);
+
+ // fraction
+ __add_128_128 (FS, F, CX);
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ {
+ // rounding code, here RN_EVEN
+ // 10^(extra_digits+diff_dec_expon)
+ T2 = power10_table_128[diff_dec_expon + extra_digits];
+ if (__unsigned_compare_gt_128 (FS, T2)
+ || ((CYh & 1) && __test_equal_128 (FS, T2))) {
+ CYh++;
+ __sub_128_128 (FS, FS, T2);
+ }
+ }
+#endif
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ if (rmode == 4) //ROUNDING_TO_NEAREST
+#endif
+ {
+ // rounding code, here RN_AWAY
+ // 10^(extra_digits+diff_dec_expon)
+ T2 = power10_table_128[diff_dec_expon + extra_digits];
+ if (__unsigned_compare_ge_128 (FS, T2)) {
+ CYh++;
+ __sub_128_128 (FS, FS, T2);
+ }
+ }
+#endif
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ switch (rmode) {
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if ((SINT64) FS.w[1] < 0) {
+ CYh--;
+ if (CYh < 1000000000000000ull) {
+ CYh = 9999999999999999ull;
+ final_exponent_y--;
+ }
+ } else {
+ T2 = power10_table_128[diff_dec_expon + extra_digits];
+ if (__unsigned_compare_ge_128 (FS, T2)) {
+ CYh++;
+ __sub_128_128 (FS, FS, T2);
+ }
+ }
+ break;
+ case ROUNDING_UP:
+ if ((SINT64) FS.w[1] < 0)
+ break;
+ T2 = power10_table_128[diff_dec_expon + extra_digits];
+ if (__unsigned_compare_gt_128 (FS, T2)) {
+ CYh += 2;
+ __sub_128_128 (FS, FS, T2);
+ } else if ((FS.w[1] == T2.w[1]) && (FS.w[0] == T2.w[0])) {
+ CYh++;
+ FS.w[1] = FS.w[0] = 0;
+ } else if (FS.w[1] | FS.w[0])
+ CYh++;
+ break;
+ }
+#endif
+#endif
+
+#ifdef SET_STATUS_FLAGS
+ status = INEXACT_EXCEPTION;
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ if (!(rmode & 3))
+#endif
+#endif
+ {
+ // RN modes
+ if ((FS.w[1] ==
+ round_const_table_128[0][diff_dec_expon + extra_digits].w[1])
+ && (FS.w[0] ==
+ round_const_table_128[0][diff_dec_expon +
+ extra_digits].w[0]))
+ status = EXACT_STATUS;
+ }
+#ifndef IEEE_ROUND_NEAREST
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+ else if (!FS.w[1] && !FS.w[0])
+ status = EXACT_STATUS;
+#endif
+#endif
+
+ __set_status_flags (fpsc, status);
+#endif
+
+ return get_BID64 (sign_y, final_exponent_y, CYh, rounding_mode,
+ fpsc);
+ }
+
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+// If coefficient_z is less than 16 digits long, normalize to 16 digits
+//
+/////////////////////////////////////////////////////////////////////////
+static UINT64
+BID_normalize (UINT64 sign_z, int exponent_z,
+ UINT64 coefficient_z, UINT64 round_dir, int round_flag,
+ int rounding_mode, unsigned *fpsc) {
+ SINT64 D;
+ int_double tempx;
+ int digits_z, bin_expon, scale, rmode;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = rounding_mode;
+ if (sign_z && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ if (coefficient_z >= power10_table_128[15].w[0])
+ return z;
+#endif
+#endif
+
+ //--- get number of bits in the coefficients of x and y ---
+ tempx.d = (double) coefficient_z;
+ bin_expon = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+ // get number of decimal digits in the coeff_x
+ digits_z = estimate_decimal_digits[bin_expon];
+ if (coefficient_z >= power10_table_128[digits_z].w[0])
+ digits_z++;
+
+ scale = 16 - digits_z;
+ exponent_z -= scale;
+ if (exponent_z < 0) {
+ scale += exponent_z;
+ exponent_z = 0;
+ }
+ coefficient_z *= power10_table_128[scale].w[0];
+
+#ifdef SET_STATUS_FLAGS
+ if (round_flag) {
+ __set_status_flags (fpsc, INEXACT_EXCEPTION);
+ if (coefficient_z < 1000000000000000ull)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else if ((coefficient_z == 1000000000000000ull) && !exponent_z
+ && ((SINT64) (round_dir ^ sign_z) < 0) && round_flag
+ && (rmode == ROUNDING_DOWN || rmode == ROUNDING_TO_ZERO))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ }
+#endif
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (round_flag && (rmode & 3)) {
+ D = round_dir ^ sign_z;
+
+ if (rmode == ROUNDING_UP) {
+ if (D >= 0)
+ coefficient_z++;
+ } else {
+ if (D < 0)
+ coefficient_z--;
+ if (coefficient_z < 1000000000000000ull && exponent_z) {
+ coefficient_z = 9999999999999999ull;
+ exponent_z--;
+ }
+ }
+ }
+#endif
+#endif
+
+ return get_BID64 (sign_z, exponent_z, coefficient_z, rounding_mode,
+ fpsc);
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+//
+// 0*10^ey + cz*10^ez, ey<ez
+//
+//////////////////////////////////////////////////////////////////////////
+
+__BID_INLINE__ UINT64
+add_zero64 (int exponent_y, UINT64 sign_z, int exponent_z,
+ UINT64 coefficient_z, unsigned *prounding_mode,
+ unsigned *fpsc) {
+ int_double tempx;
+ int bin_expon, scale_k, scale_cz;
+ int diff_expon;
+
+ diff_expon = exponent_z - exponent_y;
+
+ tempx.d = (double) coefficient_z;
+ bin_expon = ((tempx.i & MASK_BINARY_EXPONENT) >> 52) - 0x3ff;
+ scale_cz = estimate_decimal_digits[bin_expon];
+ if (coefficient_z >= power10_table_128[scale_cz].w[0])
+ scale_cz++;
+
+ scale_k = 16 - scale_cz;
+ if (diff_expon < scale_k)
+ scale_k = diff_expon;
+ coefficient_z *= power10_table_128[scale_k].w[0];
+
+ return get_BID64 (sign_z, exponent_z - scale_k, coefficient_z,
+ *prounding_mode, fpsc);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/bid_internal.h b/gcc-4.9/libgcc/config/libbid/bid_internal.h
new file mode 100644
index 000000000..71cba9eed
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_internal.h
@@ -0,0 +1,2607 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __BIDECIMAL_H
+#define __BIDECIMAL_H
+
+#include "bid_conf.h"
+#include "bid_functions.h"
+
+#define __BID_INLINE__ static __inline
+
+/*********************************************************************
+ *
+ * Logical Shift Macros
+ *
+ *********************************************************************/
+
+#define __shr_128(Q, A, k) \
+{ \
+ (Q).w[0] = (A).w[0] >> k; \
+ (Q).w[0] |= (A).w[1] << (64-k); \
+ (Q).w[1] = (A).w[1] >> k; \
+}
+
+#define __shr_128_long(Q, A, k) \
+{ \
+ if((k)<64) { \
+ (Q).w[0] = (A).w[0] >> k; \
+ (Q).w[0] |= (A).w[1] << (64-k); \
+ (Q).w[1] = (A).w[1] >> k; \
+ } \
+ else { \
+ (Q).w[0] = (A).w[1]>>((k)-64); \
+ (Q).w[1] = 0; \
+ } \
+}
+
+#define __shl_128_long(Q, A, k) \
+{ \
+ if((k)<64) { \
+ (Q).w[1] = (A).w[1] << k; \
+ (Q).w[1] |= (A).w[0] >> (64-k); \
+ (Q).w[0] = (A).w[0] << k; \
+ } \
+ else { \
+ (Q).w[1] = (A).w[0]<<((k)-64); \
+ (Q).w[0] = 0; \
+ } \
+}
+
+#define __low_64(Q) (Q).w[0]
+/*********************************************************************
+ *
+ * String Macros
+ *
+ *********************************************************************/
+#define tolower_macro(x) (((unsigned char)((x)-'A')<=('Z'-'A'))?((x)-'A'+'a'):(x))
+/*********************************************************************
+ *
+ * Compare Macros
+ *
+ *********************************************************************/
+// greater than
+// return 0 if A<=B
+// non-zero if A>B
+#define __unsigned_compare_gt_128(A, B) \
+ ((A.w[1]>B.w[1]) || ((A.w[1]==B.w[1]) && (A.w[0]>B.w[0])))
+// greater-or-equal
+#define __unsigned_compare_ge_128(A, B) \
+ ((A.w[1]>B.w[1]) || ((A.w[1]==B.w[1]) && (A.w[0]>=B.w[0])))
+#define __test_equal_128(A, B) (((A).w[1]==(B).w[1]) && ((A).w[0]==(B).w[0]))
+// tighten exponent range
+#define __tight_bin_range_128(bp, P, bin_expon) \
+{ \
+UINT64 M; \
+ M = 1; \
+ (bp) = (bin_expon); \
+ if((bp)<63) { \
+ M <<= ((bp)+1); \
+ if((P).w[0] >= M) (bp)++; } \
+ else if((bp)>64) { \
+ M <<= ((bp)+1-64); \
+ if(((P).w[1]>M) ||((P).w[1]==M && (P).w[0]))\
+ (bp)++; } \
+ else if((P).w[1]) (bp)++; \
+}
+/*********************************************************************
+ *
+ * Add/Subtract Macros
+ *
+ *********************************************************************/
+// add 64-bit value to 128-bit
+#define __add_128_64(R128, A128, B64) \
+{ \
+UINT64 R64H; \
+ R64H = (A128).w[1]; \
+ (R128).w[0] = (B64) + (A128).w[0]; \
+ if((R128).w[0] < (B64)) \
+ R64H ++; \
+ (R128).w[1] = R64H; \
+}
+// subtract 64-bit value from 128-bit
+#define __sub_128_64(R128, A128, B64) \
+{ \
+UINT64 R64H; \
+ R64H = (A128).w[1]; \
+ if((A128).w[0] < (B64)) \
+ R64H --; \
+ (R128).w[1] = R64H; \
+ (R128).w[0] = (A128).w[0] - (B64); \
+}
+// add 128-bit value to 128-bit
+// assume no carry-out
+#define __add_128_128(R128, A128, B128) \
+{ \
+UINT128 Q128; \
+ Q128.w[1] = (A128).w[1]+(B128).w[1]; \
+ Q128.w[0] = (B128).w[0] + (A128).w[0]; \
+ if(Q128.w[0] < (B128).w[0]) \
+ Q128.w[1] ++; \
+ (R128).w[1] = Q128.w[1]; \
+ (R128).w[0] = Q128.w[0]; \
+}
+#define __sub_128_128(R128, A128, B128) \
+{ \
+UINT128 Q128; \
+ Q128.w[1] = (A128).w[1]-(B128).w[1]; \
+ Q128.w[0] = (A128).w[0] - (B128).w[0]; \
+ if((A128).w[0] < (B128).w[0]) \
+ Q128.w[1] --; \
+ (R128).w[1] = Q128.w[1]; \
+ (R128).w[0] = Q128.w[0]; \
+}
+#define __add_carry_out(S, CY, X, Y) \
+{ \
+UINT64 X1=X; \
+ S = X + Y; \
+ CY = (S<X1) ? 1 : 0; \
+}
+#define __add_carry_in_out(S, CY, X, Y, CI) \
+{ \
+UINT64 X1; \
+ X1 = X + CI; \
+ S = X1 + Y; \
+ CY = ((S<X1) || (X1<CI)) ? 1 : 0; \
+}
+#define __sub_borrow_out(S, CY, X, Y) \
+{ \
+UINT64 X1=X; \
+ S = X - Y; \
+ CY = (S>X1) ? 1 : 0; \
+}
+#define __sub_borrow_in_out(S, CY, X, Y, CI) \
+{ \
+UINT64 X1, X0=X; \
+ X1 = X - CI; \
+ S = X1 - Y; \
+ CY = ((S>X1) || (X1>X0)) ? 1 : 0; \
+}
+// increment C128 and check for rounding overflow:
+// if (C_128) = 10^34 then (C_128) = 10^33 and increment the exponent
+#define INCREMENT(C_128, exp) \
+{ \
+ C_128.w[0]++; \
+ if (C_128.w[0] == 0) C_128.w[1]++; \
+ if (C_128.w[1] == 0x0001ed09bead87c0ull && \
+ C_128.w[0] == 0x378d8e6400000000ull) { \
+ exp++; \
+ C_128.w[1] = 0x0000314dc6448d93ull; \
+ C_128.w[0] = 0x38c15b0a00000000ull; \
+ } \
+}
+// decrement C128 and check for rounding underflow, but only at the
+// boundary: if C_128 = 10^33 - 1 and exp > 0 then C_128 = 10^34 - 1
+// and decrement the exponent
+#define DECREMENT(C_128, exp) \
+{ \
+ C_128.w[0]--; \
+ if (C_128.w[0] == 0xffffffffffffffffull) C_128.w[1]--; \
+ if (C_128.w[1] == 0x0000314dc6448d93ull && \
+ C_128.w[0] == 0x38c15b09ffffffffull && exp > 0) { \
+ exp--; \
+ C_128.w[1] = 0x0001ed09bead87c0ull; \
+ C_128.w[0] = 0x378d8e63ffffffffull; \
+ } \
+}
+
+ /*********************************************************************
+ *
+ * Multiply Macros
+ *
+ *********************************************************************/
+#define __mul_64x64_to_64(P64, CX, CY) (P64) = (CX) * (CY)
+/***************************************
+ * Signed, Full 64x64-bit Multiply
+ ***************************************/
+#define __imul_64x64_to_128(P, CX, CY) \
+{ \
+UINT64 SX, SY; \
+ __mul_64x64_to_128(P, CX, CY); \
+ \
+ SX = ((SINT64)(CX))>>63; \
+ SY = ((SINT64)(CY))>>63; \
+ SX &= CY; SY &= CX; \
+ \
+ (P).w[1] = (P).w[1] - SX - SY; \
+}
+/***************************************
+ * Signed, Full 64x128-bit Multiply
+ ***************************************/
+#define __imul_64x128_full(Ph, Ql, A, B) \
+{ \
+UINT128 ALBL, ALBH, QM2, QM; \
+ \
+ __imul_64x64_to_128(ALBH, (A), (B).w[1]); \
+ __imul_64x64_to_128(ALBL, (A), (B).w[0]); \
+ \
+ (Ql).w[0] = ALBL.w[0]; \
+ QM.w[0] = ALBL.w[1]; \
+ QM.w[1] = ((SINT64)ALBL.w[1])>>63; \
+ __add_128_128(QM2, ALBH, QM); \
+ (Ql).w[1] = QM2.w[0]; \
+ Ph = QM2.w[1]; \
+}
+/*****************************************************
+ * Unsigned Multiply Macros
+ *****************************************************/
+// get full 64x64bit product
+//
+#define __mul_64x64_to_128(P, CX, CY) \
+{ \
+UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2;\
+ CXH = (CX) >> 32; \
+ CXL = (UINT32)(CX); \
+ CYH = (CY) >> 32; \
+ CYL = (UINT32)(CY); \
+ \
+ PM = CXH*CYL; \
+ PH = CXH*CYH; \
+ PL = CXL*CYL; \
+ PM2 = CXL*CYH; \
+ PH += (PM>>32); \
+ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \
+ \
+ (P).w[1] = PH + (PM>>32); \
+ (P).w[0] = (PM<<32)+(UINT32)PL; \
+}
+// get full 64x64bit product
+// Note:
+// This macro is used for CX < 2^61, CY < 2^61
+//
+#define __mul_64x64_to_128_fast(P, CX, CY) \
+{ \
+UINT64 CXH, CXL, CYH, CYL, PL, PH, PM; \
+ CXH = (CX) >> 32; \
+ CXL = (UINT32)(CX); \
+ CYH = (CY) >> 32; \
+ CYL = (UINT32)(CY); \
+ \
+ PM = CXH*CYL; \
+ PL = CXL*CYL; \
+ PH = CXH*CYH; \
+ PM += CXL*CYH; \
+ PM += (PL>>32); \
+ \
+ (P).w[1] = PH + (PM>>32); \
+ (P).w[0] = (PM<<32)+(UINT32)PL; \
+}
+// used for CX< 2^60
+#define __sqr64_fast(P, CX) \
+{ \
+UINT64 CXH, CXL, PL, PH, PM; \
+ CXH = (CX) >> 32; \
+ CXL = (UINT32)(CX); \
+ \
+ PM = CXH*CXL; \
+ PL = CXL*CXL; \
+ PH = CXH*CXH; \
+ PM += PM; \
+ PM += (PL>>32); \
+ \
+ (P).w[1] = PH + (PM>>32); \
+ (P).w[0] = (PM<<32)+(UINT32)PL; \
+}
+// get full 64x64bit product
+// Note:
+// This implementation is used for CX < 2^61, CY < 2^61
+//
+#define __mul_64x64_to_64_high_fast(P, CX, CY) \
+{ \
+UINT64 CXH, CXL, CYH, CYL, PL, PH, PM; \
+ CXH = (CX) >> 32; \
+ CXL = (UINT32)(CX); \
+ CYH = (CY) >> 32; \
+ CYL = (UINT32)(CY); \
+ \
+ PM = CXH*CYL; \
+ PL = CXL*CYL; \
+ PH = CXH*CYH; \
+ PM += CXL*CYH; \
+ PM += (PL>>32); \
+ \
+ (P) = PH + (PM>>32); \
+}
+// get full 64x64bit product
+//
+#define __mul_64x64_to_128_full(P, CX, CY) \
+{ \
+UINT64 CXH, CXL, CYH,CYL,PL,PH,PM,PM2;\
+ CXH = (CX) >> 32; \
+ CXL = (UINT32)(CX); \
+ CYH = (CY) >> 32; \
+ CYL = (UINT32)(CY); \
+ \
+ PM = CXH*CYL; \
+ PH = CXH*CYH; \
+ PL = CXL*CYL; \
+ PM2 = CXL*CYH; \
+ PH += (PM>>32); \
+ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \
+ \
+ (P).w[1] = PH + (PM>>32); \
+ (P).w[0] = (PM<<32)+(UINT32)PL; \
+}
+#define __mul_128x128_high(Q, A, B) \
+{ \
+UINT128 ALBL, ALBH, AHBL, AHBH, QM, QM2; \
+ \
+ __mul_64x64_to_128(ALBH, (A).w[0], (B).w[1]); \
+ __mul_64x64_to_128(AHBL, (B).w[0], (A).w[1]); \
+ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \
+ __mul_64x64_to_128(AHBH, (A).w[1],(B).w[1]); \
+ \
+ __add_128_128(QM, ALBH, AHBL); \
+ __add_128_64(QM2, QM, ALBL.w[1]); \
+ __add_128_64((Q), AHBH, QM2.w[1]); \
+}
+#define __mul_128x128_full(Qh, Ql, A, B) \
+{ \
+UINT128 ALBL, ALBH, AHBL, AHBH, QM, QM2; \
+ \
+ __mul_64x64_to_128(ALBH, (A).w[0], (B).w[1]); \
+ __mul_64x64_to_128(AHBL, (B).w[0], (A).w[1]); \
+ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \
+ __mul_64x64_to_128(AHBH, (A).w[1],(B).w[1]); \
+ \
+ __add_128_128(QM, ALBH, AHBL); \
+ (Ql).w[0] = ALBL.w[0]; \
+ __add_128_64(QM2, QM, ALBL.w[1]); \
+ __add_128_64((Qh), AHBH, QM2.w[1]); \
+ (Ql).w[1] = QM2.w[0]; \
+}
+#define __mul_128x128_low(Ql, A, B) \
+{ \
+UINT128 ALBL; \
+UINT64 QM64; \
+ \
+ __mul_64x64_to_128(ALBL, (A).w[0], (B).w[0]); \
+ QM64 = (B).w[0]*(A).w[1] + (A).w[0]*(B).w[1]; \
+ \
+ (Ql).w[0] = ALBL.w[0]; \
+ (Ql).w[1] = QM64 + ALBL.w[1]; \
+}
+#define __mul_64x128_low(Ql, A, B) \
+{ \
+ UINT128 ALBL, ALBH, QM2; \
+ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \
+ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \
+ (Ql).w[0] = ALBL.w[0]; \
+ __add_128_64(QM2, ALBH, ALBL.w[1]); \
+ (Ql).w[1] = QM2.w[0]; \
+}
+#define __mul_64x128_full(Ph, Ql, A, B) \
+{ \
+UINT128 ALBL, ALBH, QM2; \
+ \
+ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \
+ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \
+ \
+ (Ql).w[0] = ALBL.w[0]; \
+ __add_128_64(QM2, ALBH, ALBL.w[1]); \
+ (Ql).w[1] = QM2.w[0]; \
+ Ph = QM2.w[1]; \
+}
+#define __mul_64x128_to_192(Q, A, B) \
+{ \
+UINT128 ALBL, ALBH, QM2; \
+ \
+ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \
+ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \
+ \
+ (Q).w[0] = ALBL.w[0]; \
+ __add_128_64(QM2, ALBH, ALBL.w[1]); \
+ (Q).w[1] = QM2.w[0]; \
+ (Q).w[2] = QM2.w[1]; \
+}
+#define __mul_64x128_to192(Q, A, B) \
+{ \
+UINT128 ALBL, ALBH, QM2; \
+ \
+ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \
+ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \
+ \
+ (Q).w[0] = ALBL.w[0]; \
+ __add_128_64(QM2, ALBH, ALBL.w[1]); \
+ (Q).w[1] = QM2.w[0]; \
+ (Q).w[2] = QM2.w[1]; \
+}
+#define __mul_128x128_to_256(P256, A, B) \
+{ \
+UINT128 Qll, Qlh; \
+UINT64 Phl, Phh, CY1, CY2; \
+ \
+ __mul_64x128_full(Phl, Qll, A.w[0], B); \
+ __mul_64x128_full(Phh, Qlh, A.w[1], B); \
+ (P256).w[0] = Qll.w[0]; \
+ __add_carry_out((P256).w[1],CY1, Qlh.w[0], Qll.w[1]); \
+ __add_carry_in_out((P256).w[2],CY2, Qlh.w[1], Phl, CY1); \
+ (P256).w[3] = Phh + CY2; \
+}
+//
+// For better performance, will check A.w[1] against 0,
+// but not B.w[1]
+// Use this macro accordingly
+#define __mul_128x128_to_256_check_A(P256, A, B) \
+{ \
+UINT128 Qll, Qlh; \
+UINT64 Phl, Phh, CY1, CY2; \
+ \
+ __mul_64x128_full(Phl, Qll, A.w[0], B); \
+ (P256).w[0] = Qll.w[0]; \
+ if(A.w[1]) { \
+ __mul_64x128_full(Phh, Qlh, A.w[1], B); \
+ __add_carry_out((P256).w[1],CY1, Qlh.w[0], Qll.w[1]); \
+ __add_carry_in_out((P256).w[2],CY2, Qlh.w[1], Phl, CY1); \
+ (P256).w[3] = Phh + CY2; } \
+ else { \
+ (P256).w[1] = Qll.w[1]; \
+ (P256).w[2] = Phl; \
+ (P256).w[3] = 0; } \
+}
+#define __mul_64x192_to_256(lP, lA, lB) \
+{ \
+UINT128 lP0,lP1,lP2; \
+UINT64 lC; \
+ __mul_64x64_to_128(lP0, lA, (lB).w[0]); \
+ __mul_64x64_to_128(lP1, lA, (lB).w[1]); \
+ __mul_64x64_to_128(lP2, lA, (lB).w[2]); \
+ (lP).w[0] = lP0.w[0]; \
+ __add_carry_out((lP).w[1],lC,lP1.w[0],lP0.w[1]); \
+ __add_carry_in_out((lP).w[2],lC,lP2.w[0],lP1.w[1],lC); \
+ (lP).w[3] = lP2.w[1] + lC; \
+}
+#define __mul_64x256_to_320(P, A, B) \
+{ \
+UINT128 lP0,lP1,lP2,lP3; \
+UINT64 lC; \
+ __mul_64x64_to_128(lP0, A, (B).w[0]); \
+ __mul_64x64_to_128(lP1, A, (B).w[1]); \
+ __mul_64x64_to_128(lP2, A, (B).w[2]); \
+ __mul_64x64_to_128(lP3, A, (B).w[3]); \
+ (P).w[0] = lP0.w[0]; \
+ __add_carry_out((P).w[1],lC,lP1.w[0],lP0.w[1]); \
+ __add_carry_in_out((P).w[2],lC,lP2.w[0],lP1.w[1],lC); \
+ __add_carry_in_out((P).w[3],lC,lP3.w[0],lP2.w[1],lC); \
+ (P).w[4] = lP3.w[1] + lC; \
+}
+#define __mul_192x192_to_384(P, A, B) \
+{ \
+UINT256 P0,P1,P2; \
+UINT64 CY; \
+ __mul_64x192_to_256(P0, (A).w[0], B); \
+ __mul_64x192_to_256(P1, (A).w[1], B); \
+ __mul_64x192_to_256(P2, (A).w[2], B); \
+ (P).w[0] = P0.w[0]; \
+ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \
+ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \
+ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \
+ (P).w[4] = P1.w[3] + CY; \
+ __add_carry_out((P).w[2],CY,P2.w[0],(P).w[2]); \
+ __add_carry_in_out((P).w[3],CY,P2.w[1],(P).w[3],CY); \
+ __add_carry_in_out((P).w[4],CY,P2.w[2],(P).w[4],CY); \
+ (P).w[5] = P2.w[3] + CY; \
+}
+#define __mul_64x320_to_384(P, A, B) \
+{ \
+UINT128 lP0,lP1,lP2,lP3,lP4; \
+UINT64 lC; \
+ __mul_64x64_to_128(lP0, A, (B).w[0]); \
+ __mul_64x64_to_128(lP1, A, (B).w[1]); \
+ __mul_64x64_to_128(lP2, A, (B).w[2]); \
+ __mul_64x64_to_128(lP3, A, (B).w[3]); \
+ __mul_64x64_to_128(lP4, A, (B).w[4]); \
+ (P).w[0] = lP0.w[0]; \
+ __add_carry_out((P).w[1],lC,lP1.w[0],lP0.w[1]); \
+ __add_carry_in_out((P).w[2],lC,lP2.w[0],lP1.w[1],lC); \
+ __add_carry_in_out((P).w[3],lC,lP3.w[0],lP2.w[1],lC); \
+ __add_carry_in_out((P).w[4],lC,lP4.w[0],lP3.w[1],lC); \
+ (P).w[5] = lP4.w[1] + lC; \
+}
+// A*A
+// Full 128x128-bit product
+#define __sqr128_to_256(P256, A) \
+{ \
+UINT128 Qll, Qlh, Qhh; \
+UINT64 TMP_C1, TMP_C2; \
+ \
+ __mul_64x64_to_128(Qhh, A.w[1], A.w[1]); \
+ __mul_64x64_to_128(Qlh, A.w[0], A.w[1]); \
+ Qhh.w[1] += (Qlh.w[1]>>63); \
+ Qlh.w[1] = (Qlh.w[1]+Qlh.w[1])|(Qlh.w[0]>>63); \
+ Qlh.w[0] += Qlh.w[0]; \
+ __mul_64x64_to_128(Qll, A.w[0], A.w[0]); \
+ \
+ __add_carry_out((P256).w[1],TMP_C1, Qlh.w[0], Qll.w[1]); \
+ (P256).w[0] = Qll.w[0]; \
+ __add_carry_in_out((P256).w[2],TMP_C2, Qlh.w[1], Qhh.w[0], TMP_C1); \
+ (P256).w[3] = Qhh.w[1]+TMP_C2; \
+}
+#define __mul_128x128_to_256_low_high(PQh, PQl, A, B) \
+{ \
+UINT128 Qll, Qlh; \
+UINT64 Phl, Phh, C1, C2; \
+ \
+ __mul_64x128_full(Phl, Qll, A.w[0], B); \
+ __mul_64x128_full(Phh, Qlh, A.w[1], B); \
+ (PQl).w[0] = Qll.w[0]; \
+ __add_carry_out((PQl).w[1],C1, Qlh.w[0], Qll.w[1]); \
+ __add_carry_in_out((PQh).w[0],C2, Qlh.w[1], Phl, C1); \
+ (PQh).w[1] = Phh + C2; \
+}
+#define __mul_256x256_to_512(P, A, B) \
+{ \
+UINT512 P0,P1,P2,P3; \
+UINT64 CY; \
+ __mul_64x256_to_320(P0, (A).w[0], B); \
+ __mul_64x256_to_320(P1, (A).w[1], B); \
+ __mul_64x256_to_320(P2, (A).w[2], B); \
+ __mul_64x256_to_320(P3, (A).w[3], B); \
+ (P).w[0] = P0.w[0]; \
+ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \
+ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \
+ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \
+ __add_carry_in_out((P).w[4],CY,P1.w[3],P0.w[4],CY); \
+ (P).w[5] = P1.w[4] + CY; \
+ __add_carry_out((P).w[2],CY,P2.w[0],(P).w[2]); \
+ __add_carry_in_out((P).w[3],CY,P2.w[1],(P).w[3],CY); \
+ __add_carry_in_out((P).w[4],CY,P2.w[2],(P).w[4],CY); \
+ __add_carry_in_out((P).w[5],CY,P2.w[3],(P).w[5],CY); \
+ (P).w[6] = P2.w[4] + CY; \
+ __add_carry_out((P).w[3],CY,P3.w[0],(P).w[3]); \
+ __add_carry_in_out((P).w[4],CY,P3.w[1],(P).w[4],CY); \
+ __add_carry_in_out((P).w[5],CY,P3.w[2],(P).w[5],CY); \
+ __add_carry_in_out((P).w[6],CY,P3.w[3],(P).w[6],CY); \
+ (P).w[7] = P3.w[4] + CY; \
+}
+#define __mul_192x256_to_448(P, A, B) \
+{ \
+UINT512 P0,P1,P2; \
+UINT64 CY; \
+ __mul_64x256_to_320(P0, (A).w[0], B); \
+ __mul_64x256_to_320(P1, (A).w[1], B); \
+ __mul_64x256_to_320(P2, (A).w[2], B); \
+ (P).w[0] = P0.w[0]; \
+ __add_carry_out((P).w[1],CY,P1.w[0],P0.w[1]); \
+ __add_carry_in_out((P).w[2],CY,P1.w[1],P0.w[2],CY); \
+ __add_carry_in_out((P).w[3],CY,P1.w[2],P0.w[3],CY); \
+ __add_carry_in_out((P).w[4],CY,P1.w[3],P0.w[4],CY); \
+ (P).w[5] = P1.w[4] + CY; \
+ __add_carry_out((P).w[2],CY,P2.w[0],(P).w[2]); \
+ __add_carry_in_out((P).w[3],CY,P2.w[1],(P).w[3],CY); \
+ __add_carry_in_out((P).w[4],CY,P2.w[2],(P).w[4],CY); \
+ __add_carry_in_out((P).w[5],CY,P2.w[3],(P).w[5],CY); \
+ (P).w[6] = P2.w[4] + CY; \
+}
+#define __mul_320x320_to_640(P, A, B) \
+{ \
+UINT512 P0,P1,P2,P3; \
+UINT64 CY; \
+ __mul_256x256_to_512((P), (A), B); \
+ __mul_64x256_to_320(P1, (A).w[4], B); \
+ __mul_64x256_to_320(P2, (B).w[4], A); \
+ __mul_64x64_to_128(P3, (A).w[4], (B).w[4]); \
+ __add_carry_out((P0).w[0],CY,P1.w[0],P2.w[0]); \
+ __add_carry_in_out((P0).w[1],CY,P1.w[1],P2.w[1],CY); \
+ __add_carry_in_out((P0).w[2],CY,P1.w[2],P2.w[2],CY); \
+ __add_carry_in_out((P0).w[3],CY,P1.w[3],P2.w[3],CY); \
+ __add_carry_in_out((P0).w[4],CY,P1.w[4],P2.w[4],CY); \
+ P3.w[1] += CY; \
+ __add_carry_out((P).w[4],CY,(P).w[4],P0.w[0]); \
+ __add_carry_in_out((P).w[5],CY,(P).w[5],P0.w[1],CY); \
+ __add_carry_in_out((P).w[6],CY,(P).w[6],P0.w[2],CY); \
+ __add_carry_in_out((P).w[7],CY,(P).w[7],P0.w[3],CY); \
+ __add_carry_in_out((P).w[8],CY,P3.w[0],P0.w[4],CY); \
+ (P).w[9] = P3.w[1] + CY; \
+}
+#define __mul_384x384_to_768(P, A, B) \
+{ \
+UINT512 P0,P1,P2,P3; \
+UINT64 CY; \
+ __mul_320x320_to_640((P), (A), B); \
+ __mul_64x320_to_384(P1, (A).w[5], B); \
+ __mul_64x320_to_384(P2, (B).w[5], A); \
+ __mul_64x64_to_128(P3, (A).w[5], (B).w[5]); \
+ __add_carry_out((P0).w[0],CY,P1.w[0],P2.w[0]); \
+ __add_carry_in_out((P0).w[1],CY,P1.w[1],P2.w[1],CY); \
+ __add_carry_in_out((P0).w[2],CY,P1.w[2],P2.w[2],CY); \
+ __add_carry_in_out((P0).w[3],CY,P1.w[3],P2.w[3],CY); \
+ __add_carry_in_out((P0).w[4],CY,P1.w[4],P2.w[4],CY); \
+ __add_carry_in_out((P0).w[5],CY,P1.w[5],P2.w[5],CY); \
+ P3.w[1] += CY; \
+ __add_carry_out((P).w[5],CY,(P).w[5],P0.w[0]); \
+ __add_carry_in_out((P).w[6],CY,(P).w[6],P0.w[1],CY); \
+ __add_carry_in_out((P).w[7],CY,(P).w[7],P0.w[2],CY); \
+ __add_carry_in_out((P).w[8],CY,(P).w[8],P0.w[3],CY); \
+ __add_carry_in_out((P).w[9],CY,(P).w[9],P0.w[4],CY); \
+ __add_carry_in_out((P).w[10],CY,P3.w[0],P0.w[5],CY); \
+ (P).w[11] = P3.w[1] + CY; \
+}
+#define __mul_64x128_short(Ql, A, B) \
+{ \
+UINT64 ALBH_L; \
+ \
+ __mul_64x64_to_64(ALBH_L, (A),(B).w[1]); \
+ __mul_64x64_to_128((Ql), (A), (B).w[0]); \
+ \
+ (Ql).w[1] += ALBH_L; \
+}
+#define __scale128_10(D,_TMP) \
+{ \
+UINT128 _TMP2,_TMP8; \
+ _TMP2.w[1] = (_TMP.w[1]<<1)|(_TMP.w[0]>>63); \
+ _TMP2.w[0] = _TMP.w[0]<<1; \
+ _TMP8.w[1] = (_TMP.w[1]<<3)|(_TMP.w[0]>>61); \
+ _TMP8.w[0] = _TMP.w[0]<<3; \
+ __add_128_128(D, _TMP2, _TMP8); \
+}
+// 64x64-bit product
+#define __mul_64x64_to_128MACH(P128, CX64, CY64) \
+{ \
+ UINT64 CXH,CXL,CYH,CYL,PL,PH,PM,PM2; \
+ CXH = (CX64) >> 32; \
+ CXL = (UINT32)(CX64); \
+ CYH = (CY64) >> 32; \
+ CYL = (UINT32)(CY64); \
+ PM = CXH*CYL; \
+ PH = CXH*CYH; \
+ PL = CXL*CYL; \
+ PM2 = CXL*CYH; \
+ PH += (PM>>32); \
+ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \
+ (P128).w[1] = PH + (PM>>32); \
+ (P128).w[0] = (PM<<32)+(UINT32)PL; \
+}
+// 64x64-bit product
+#define __mul_64x64_to_128HIGH(P64, CX64, CY64) \
+{ \
+ UINT64 CXH,CXL,CYH,CYL,PL,PH,PM,PM2; \
+ CXH = (CX64) >> 32; \
+ CXL = (UINT32)(CX64); \
+ CYH = (CY64) >> 32; \
+ CYL = (UINT32)(CY64); \
+ PM = CXH*CYL; \
+ PH = CXH*CYH; \
+ PL = CXL*CYL; \
+ PM2 = CXL*CYH; \
+ PH += (PM>>32); \
+ PM = (UINT64)((UINT32)PM)+PM2+(PL>>32); \
+ P64 = PH + (PM>>32); \
+}
+#define __mul_128x64_to_128(Q128, A64, B128) \
+{ \
+ UINT64 ALBH_L; \
+ ALBH_L = (A64) * (B128).w[1]; \
+ __mul_64x64_to_128MACH((Q128), (A64), (B128).w[0]); \
+ (Q128).w[1] += ALBH_L; \
+}
+// might simplify by calculating just QM2.w[0]
+#define __mul_64x128_to_128(Ql, A, B) \
+{ \
+ UINT128 ALBL, ALBH, QM2; \
+ __mul_64x64_to_128(ALBH, (A), (B).w[1]); \
+ __mul_64x64_to_128(ALBL, (A), (B).w[0]); \
+ (Ql).w[0] = ALBL.w[0]; \
+ __add_128_64(QM2, ALBH, ALBL.w[1]); \
+ (Ql).w[1] = QM2.w[0]; \
+}
+/*********************************************************************
+ *
+ * BID Pack/Unpack Macros
+ *
+ *********************************************************************/
+/////////////////////////////////////////
+// BID64 definitions
+////////////////////////////////////////
+#define DECIMAL_MAX_EXPON_64 767
+#define DECIMAL_EXPONENT_BIAS 398
+#define MAX_FORMAT_DIGITS 16
+/////////////////////////////////////////
+// BID128 definitions
+////////////////////////////////////////
+#define DECIMAL_MAX_EXPON_128 12287
+#define DECIMAL_EXPONENT_BIAS_128 6176
+#define MAX_FORMAT_DIGITS_128 34
+/////////////////////////////////////////
+// BID32 definitions
+////////////////////////////////////////
+#define DECIMAL_MAX_EXPON_32 191
+#define DECIMAL_EXPONENT_BIAS_32 101
+#define MAX_FORMAT_DIGITS_32 7
+////////////////////////////////////////
+// Constant Definitions
+///////////////////////////////////////
+#define SPECIAL_ENCODING_MASK64 0x6000000000000000ull
+#define INFINITY_MASK64 0x7800000000000000ull
+#define SINFINITY_MASK64 0xf800000000000000ull
+#define SSNAN_MASK64 0xfc00000000000000ull
+#define NAN_MASK64 0x7c00000000000000ull
+#define SNAN_MASK64 0x7e00000000000000ull
+#define QUIET_MASK64 0xfdffffffffffffffull
+#define LARGE_COEFF_MASK64 0x0007ffffffffffffull
+#define LARGE_COEFF_HIGH_BIT64 0x0020000000000000ull
+#define SMALL_COEFF_MASK64 0x001fffffffffffffull
+#define EXPONENT_MASK64 0x3ff
+#define EXPONENT_SHIFT_LARGE64 51
+#define EXPONENT_SHIFT_SMALL64 53
+#define LARGEST_BID64 0x77fb86f26fc0ffffull
+#define SMALLEST_BID64 0xf7fb86f26fc0ffffull
+#define SMALL_COEFF_MASK128 0x0001ffffffffffffull
+#define LARGE_COEFF_MASK128 0x00007fffffffffffull
+#define EXPONENT_MASK128 0x3fff
+#define LARGEST_BID128_HIGH 0x5fffed09bead87c0ull
+#define LARGEST_BID128_LOW 0x378d8e63ffffffffull
+#define SPECIAL_ENCODING_MASK32 0x60000000ul
+#define INFINITY_MASK32 0x78000000ul
+#define LARGE_COEFF_MASK32 0x007ffffful
+#define LARGE_COEFF_HIGH_BIT32 0x00800000ul
+#define SMALL_COEFF_MASK32 0x001ffffful
+#define EXPONENT_MASK32 0xff
+#define LARGEST_BID32 0x77f8967f
+#define NAN_MASK32 0x7c000000
+#define SNAN_MASK32 0x7e000000
+#define MASK_BINARY_EXPONENT 0x7ff0000000000000ull
+#define BINARY_EXPONENT_BIAS 0x3ff
+#define UPPER_EXPON_LIMIT 51
+// data needed for BID pack/unpack macros
+extern UINT64 round_const_table[][19];
+extern UINT128 reciprocals10_128[];
+extern int recip_scale[];
+extern UINT128 power10_table_128[];
+extern int estimate_decimal_digits[];
+extern int estimate_bin_expon[];
+extern UINT64 power10_index_binexp[];
+extern int short_recip_scale[];
+extern UINT64 reciprocals10_64[];
+extern UINT128 power10_index_binexp_128[];
+extern UINT128 round_const_table_128[][36];
+
+
+//////////////////////////////////////////////
+// Status Flag Handling
+/////////////////////////////////////////////
+#define __set_status_flags(fpsc, status) *(fpsc) |= status
+#define is_inexact(fpsc) ((*(fpsc))&INEXACT_EXCEPTION)
+
+__BID_INLINE__ UINT64
+unpack_BID64 (UINT64 * psign_x, int *pexponent_x,
+ UINT64 * pcoefficient_x, UINT64 x) {
+ UINT64 tmp, coeff;
+
+ *psign_x = x & 0x8000000000000000ull;
+
+ if ((x & SPECIAL_ENCODING_MASK64) == SPECIAL_ENCODING_MASK64) {
+ // special encodings
+ // coefficient
+ coeff = (x & LARGE_COEFF_MASK64) | LARGE_COEFF_HIGH_BIT64;
+
+ if ((x & INFINITY_MASK64) == INFINITY_MASK64) {
+ *pexponent_x = 0;
+ *pcoefficient_x = x & 0xfe03ffffffffffffull;
+ if ((x & 0x0003ffffffffffffull) >= 1000000000000000ull)
+ *pcoefficient_x = x & 0xfe00000000000000ull;
+ if ((x & NAN_MASK64) == INFINITY_MASK64)
+ *pcoefficient_x = x & SINFINITY_MASK64;
+ return 0; // NaN or Infinity
+ }
+ // check for non-canonical values
+ if (coeff >= 10000000000000000ull)
+ coeff = 0;
+ *pcoefficient_x = coeff;
+ // get exponent
+ tmp = x >> EXPONENT_SHIFT_LARGE64;
+ *pexponent_x = (int) (tmp & EXPONENT_MASK64);
+ return coeff;
+ }
+ // exponent
+ tmp = x >> EXPONENT_SHIFT_SMALL64;
+ *pexponent_x = (int) (tmp & EXPONENT_MASK64);
+ // coefficient
+ *pcoefficient_x = (x & SMALL_COEFF_MASK64);
+
+ return *pcoefficient_x;
+}
+
+//
+// BID64 pack macro (general form)
+//
+__BID_INLINE__ UINT64
+get_BID64 (UINT64 sgn, int expon, UINT64 coeff, int rmode,
+ unsigned *fpsc) {
+ UINT128 Stemp, Q_low;
+ UINT64 QH, r, mask, C64, remainder_h, CY, carry;
+ int extra_digits, amount, amount2;
+ unsigned status;
+
+ if (coeff > 9999999999999999ull) {
+ expon++;
+ coeff = 1000000000000000ull;
+ }
+ // check for possible underflow/overflow
+ if (((unsigned) expon) >= 3 * 256) {
+ if (expon < 0) {
+ // underflow
+ if (expon + MAX_FORMAT_DIGITS < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc,
+ UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == ROUNDING_DOWN && sgn)
+ return 0x8000000000000001ull;
+ if (rmode == ROUNDING_UP && !sgn)
+ return 1ull;
+#endif
+#endif
+ // result is 0
+ return sgn;
+ }
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (sgn && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#endif
+#endif
+ // get digits to be shifted out
+ extra_digits = -expon;
+ coeff += round_const_table[rmode][extra_digits];
+
+ // get coeff*(2^M[extra_digits])/10^extra_digits
+ __mul_64x128_full (QH, Q_low, coeff,
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+
+ C64 = QH >> amount;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits is exactly .5
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & QH;
+
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0]))) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ if (is_inexact (fpsc))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ remainder_h = QH << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Q_low.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1],
+ reciprocals10_128[extra_digits].w[1], CY);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status);
+ }
+
+#endif
+
+ return sgn | C64;
+ }
+ while (coeff < 1000000000000000ull && expon >= 3 * 256) {
+ expon--;
+ coeff = (coeff << 3) + (coeff << 1);
+ }
+ if (expon > DECIMAL_MAX_EXPON_64) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+ // overflow
+ r = sgn | INFINITY_MASK64;
+ switch (rmode) {
+ case ROUNDING_DOWN:
+ if (!sgn)
+ r = LARGEST_BID64;
+ break;
+ case ROUNDING_TO_ZERO:
+ r = sgn | LARGEST_BID64;
+ break;
+ case ROUNDING_UP:
+ // round up
+ if (sgn)
+ r = SMALLEST_BID64;
+ }
+ return r;
+ }
+ }
+
+ mask = 1;
+ mask <<= EXPONENT_SHIFT_SMALL64;
+
+ // check whether coefficient fits in 10*5+3 bits
+ if (coeff < mask) {
+ r = expon;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (coeff | sgn);
+ return r;
+ }
+ // special format
+
+ // eliminate the case coeff==10^16 after rounding
+ if (coeff == 10000000000000000ull) {
+ r = expon + 1;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (1000000000000000ull | sgn);
+ return r;
+ }
+
+ r = expon;
+ r <<= EXPONENT_SHIFT_LARGE64;
+ r |= (sgn | SPECIAL_ENCODING_MASK64);
+ // add coeff, without leading bits
+ mask = (mask >> 2) - 1;
+ coeff &= mask;
+ r |= coeff;
+
+ return r;
+}
+
+
+
+
+//
+// No overflow/underflow checking
+//
+__BID_INLINE__ UINT64
+fast_get_BID64 (UINT64 sgn, int expon, UINT64 coeff) {
+ UINT64 r, mask;
+
+ mask = 1;
+ mask <<= EXPONENT_SHIFT_SMALL64;
+
+ // check whether coefficient fits in 10*5+3 bits
+ if (coeff < mask) {
+ r = expon;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (coeff | sgn);
+ return r;
+ }
+ // special format
+
+ // eliminate the case coeff==10^16 after rounding
+ if (coeff == 10000000000000000ull) {
+ r = expon + 1;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (1000000000000000ull | sgn);
+ return r;
+ }
+
+ r = expon;
+ r <<= EXPONENT_SHIFT_LARGE64;
+ r |= (sgn | SPECIAL_ENCODING_MASK64);
+ // add coeff, without leading bits
+ mask = (mask >> 2) - 1;
+ coeff &= mask;
+ r |= coeff;
+
+ return r;
+}
+
+
+//
+// no underflow checking
+//
+__BID_INLINE__ UINT64
+fast_get_BID64_check_OF (UINT64 sgn, int expon, UINT64 coeff, int rmode,
+ unsigned *fpsc) {
+ UINT64 r, mask;
+
+ if (((unsigned) expon) >= 3 * 256 - 1) {
+ if ((expon == 3 * 256 - 1) && coeff == 10000000000000000ull) {
+ expon = 3 * 256;
+ coeff = 1000000000000000ull;
+ }
+
+ if (((unsigned) expon) >= 3 * 256) {
+ while (coeff < 1000000000000000ull && expon >= 3 * 256) {
+ expon--;
+ coeff = (coeff << 3) + (coeff << 1);
+ }
+ if (expon > DECIMAL_MAX_EXPON_64) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc,
+ OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+ // overflow
+ r = sgn | INFINITY_MASK64;
+ switch (rmode) {
+ case ROUNDING_DOWN:
+ if (!sgn)
+ r = LARGEST_BID64;
+ break;
+ case ROUNDING_TO_ZERO:
+ r = sgn | LARGEST_BID64;
+ break;
+ case ROUNDING_UP:
+ // round up
+ if (sgn)
+ r = SMALLEST_BID64;
+ }
+ return r;
+ }
+ }
+ }
+
+ mask = 1;
+ mask <<= EXPONENT_SHIFT_SMALL64;
+
+ // check whether coefficient fits in 10*5+3 bits
+ if (coeff < mask) {
+ r = expon;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (coeff | sgn);
+ return r;
+ }
+ // special format
+
+ // eliminate the case coeff==10^16 after rounding
+ if (coeff == 10000000000000000ull) {
+ r = expon + 1;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (1000000000000000ull | sgn);
+ return r;
+ }
+
+ r = expon;
+ r <<= EXPONENT_SHIFT_LARGE64;
+ r |= (sgn | SPECIAL_ENCODING_MASK64);
+ // add coeff, without leading bits
+ mask = (mask >> 2) - 1;
+ coeff &= mask;
+ r |= coeff;
+
+ return r;
+}
+
+
+//
+// No overflow/underflow checking
+// or checking for coefficients equal to 10^16 (after rounding)
+//
+__BID_INLINE__ UINT64
+very_fast_get_BID64 (UINT64 sgn, int expon, UINT64 coeff) {
+ UINT64 r, mask;
+
+ mask = 1;
+ mask <<= EXPONENT_SHIFT_SMALL64;
+
+ // check whether coefficient fits in 10*5+3 bits
+ if (coeff < mask) {
+ r = expon;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (coeff | sgn);
+ return r;
+ }
+ // special format
+ r = expon;
+ r <<= EXPONENT_SHIFT_LARGE64;
+ r |= (sgn | SPECIAL_ENCODING_MASK64);
+ // add coeff, without leading bits
+ mask = (mask >> 2) - 1;
+ coeff &= mask;
+ r |= coeff;
+
+ return r;
+}
+
+//
+// No overflow/underflow checking or checking for coefficients above 2^53
+//
+__BID_INLINE__ UINT64
+very_fast_get_BID64_small_mantissa (UINT64 sgn, int expon, UINT64 coeff) {
+ // no UF/OF
+ UINT64 r;
+
+ r = expon;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (coeff | sgn);
+ return r;
+}
+
+
+//
+// This pack macro is used when underflow is known to occur
+//
+__BID_INLINE__ UINT64
+get_BID64_UF (UINT64 sgn, int expon, UINT64 coeff, UINT64 R, int rmode,
+ unsigned *fpsc) {
+ UINT128 C128, Q_low, Stemp;
+ UINT64 C64, remainder_h, QH, carry, CY;
+ int extra_digits, amount, amount2;
+ unsigned status;
+
+ // underflow
+ if (expon + MAX_FORMAT_DIGITS < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == ROUNDING_DOWN && sgn)
+ return 0x8000000000000001ull;
+ if (rmode == ROUNDING_UP && !sgn)
+ return 1ull;
+#endif
+#endif
+ // result is 0
+ return sgn;
+ }
+ // 10*coeff
+ coeff = (coeff << 3) + (coeff << 1);
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (sgn && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#endif
+#endif
+ if (R)
+ coeff |= 1;
+ // get digits to be shifted out
+ extra_digits = 1 - expon;
+ C128.w[0] = coeff + round_const_table[rmode][extra_digits];
+
+ // get coeff*(2^M[extra_digits])/10^extra_digits
+ __mul_64x128_full (QH, Q_low, C128.w[0],
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+
+ C64 = QH >> amount;
+ //__shr_128(C128, Q_high, amount);
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits is exactly .5
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & QH;
+
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0]))) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ if (is_inexact (fpsc))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ remainder_h = QH << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Q_low.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1],
+ reciprocals10_128[extra_digits].w[1], CY);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status);
+ }
+
+#endif
+
+ return sgn | C64;
+
+}
+
+
+
+//
+// This pack macro doesnot check for coefficients above 2^53
+//
+__BID_INLINE__ UINT64
+get_BID64_small_mantissa (UINT64 sgn, int expon, UINT64 coeff,
+ int rmode, unsigned *fpsc) {
+ UINT128 C128, Q_low, Stemp;
+ UINT64 r, mask, C64, remainder_h, QH, carry, CY;
+ int extra_digits, amount, amount2;
+ unsigned status;
+
+ // check for possible underflow/overflow
+ if (((unsigned) expon) >= 3 * 256) {
+ if (expon < 0) {
+ // underflow
+ if (expon + MAX_FORMAT_DIGITS < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc,
+ UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == ROUNDING_DOWN && sgn)
+ return 0x8000000000000001ull;
+ if (rmode == ROUNDING_UP && !sgn)
+ return 1ull;
+#endif
+#endif
+ // result is 0
+ return sgn;
+ }
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (sgn && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#endif
+#endif
+ // get digits to be shifted out
+ extra_digits = -expon;
+ C128.w[0] = coeff + round_const_table[rmode][extra_digits];
+
+ // get coeff*(2^M[extra_digits])/10^extra_digits
+ __mul_64x128_full (QH, Q_low, C128.w[0],
+ reciprocals10_128[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = recip_scale[extra_digits];
+
+ C64 = QH >> amount;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits is exactly .5
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & QH;
+
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0]))) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ if (is_inexact (fpsc))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ remainder_h = QH << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h
+ && (Q_low.w[1] < reciprocals10_128[extra_digits].w[1]
+ || (Q_low.w[1] == reciprocals10_128[extra_digits].w[1]
+ && Q_low.w[0] <
+ reciprocals10_128[extra_digits].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Q_low.w[0],
+ reciprocals10_128[extra_digits].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Q_low.w[1],
+ reciprocals10_128[extra_digits].w[1], CY);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status);
+ }
+
+#endif
+
+ return sgn | C64;
+ }
+
+ while (coeff < 1000000000000000ull && expon >= 3 * 256) {
+ expon--;
+ coeff = (coeff << 3) + (coeff << 1);
+ }
+ if (expon > DECIMAL_MAX_EXPON_64) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+ // overflow
+ r = sgn | INFINITY_MASK64;
+ switch (rmode) {
+ case ROUNDING_DOWN:
+ if (!sgn)
+ r = LARGEST_BID64;
+ break;
+ case ROUNDING_TO_ZERO:
+ r = sgn | LARGEST_BID64;
+ break;
+ case ROUNDING_UP:
+ // round up
+ if (sgn)
+ r = SMALLEST_BID64;
+ }
+ return r;
+ } else {
+ mask = 1;
+ mask <<= EXPONENT_SHIFT_SMALL64;
+ if (coeff >= mask) {
+ r = expon;
+ r <<= EXPONENT_SHIFT_LARGE64;
+ r |= (sgn | SPECIAL_ENCODING_MASK64);
+ // add coeff, without leading bits
+ mask = (mask >> 2) - 1;
+ coeff &= mask;
+ r |= coeff;
+ return r;
+ }
+ }
+ }
+
+ r = expon;
+ r <<= EXPONENT_SHIFT_SMALL64;
+ r |= (coeff | sgn);
+
+ return r;
+}
+
+
+/*****************************************************************************
+*
+* BID128 pack/unpack macros
+*
+*****************************************************************************/
+
+//
+// Macro for handling BID128 underflow
+// sticky bit given as additional argument
+//
+__BID_INLINE__ UINT128 *
+handle_UF_128_rem (UINT128 * pres, UINT64 sgn, int expon, UINT128 CQ,
+ UINT64 R, unsigned *prounding_mode, unsigned *fpsc) {
+ UINT128 T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1, CQ2, CQ8;
+ UINT64 carry, CY;
+ int ed2, amount;
+ unsigned rmode, status;
+
+ // UF occurs
+ if (expon + MAX_FORMAT_DIGITS_128 < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+ pres->w[1] = sgn;
+ pres->w[0] = 0;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if ((sgn && *prounding_mode == ROUNDING_DOWN)
+ || (!sgn && *prounding_mode == ROUNDING_UP))
+ pres->w[0] = 1ull;
+#endif
+#endif
+ return pres;
+ }
+ // CQ *= 10
+ CQ2.w[1] = (CQ.w[1] << 1) | (CQ.w[0] >> 63);
+ CQ2.w[0] = CQ.w[0] << 1;
+ CQ8.w[1] = (CQ.w[1] << 3) | (CQ.w[0] >> 61);
+ CQ8.w[0] = CQ.w[0] << 3;
+ __add_128_128 (CQ, CQ2, CQ8);
+
+ // add remainder
+ if (R)
+ CQ.w[0] |= 1;
+
+ ed2 = 1 - expon;
+ // add rounding constant to CQ
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = *prounding_mode;
+ if (sgn && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+ T128 = round_const_table_128[rmode][ed2];
+ __add_carry_out (CQ.w[0], carry, T128.w[0], CQ.w[0]);
+ CQ.w[1] = CQ.w[1] + T128.w[1] + carry;
+
+ TP128 = reciprocals10_128[ed2];
+ __mul_128x128_full (Qh, Ql, CQ, TP128);
+ amount = recip_scale[ed2];
+
+ if (amount >= 64) {
+ CQ.w[0] = Qh.w[1] >> (amount - 64);
+ CQ.w[1] = 0;
+ } else {
+ __shr_128 (CQ, Qh, amount);
+ }
+
+ expon = 0;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (!(*prounding_mode))
+#endif
+ if (CQ.w[0] & 1) {
+ // check whether fractional part of initial_P/10^ed1 is exactly .5
+
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ if (!Qh1.w[1] && !Qh1.w[0]
+ && (Ql.w[1] < reciprocals10_128[ed2].w[1]
+ || (Ql.w[1] == reciprocals10_128[ed2].w[1]
+ && Ql.w[0] < reciprocals10_128[ed2].w[0]))) {
+ CQ.w[0]--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ if (is_inexact (fpsc))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[ed2].w[1]
+ || (Ql.w[1] == reciprocals10_128[ed2].w[1]
+ && Ql.w[0] < reciprocals10_128[ed2].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if ((!Qh1.w[1]) && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[ed2].w[1]
+ || (Ql.w[1] == reciprocals10_128[ed2].w[1]
+ && Ql.w[0] < reciprocals10_128[ed2].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Ql.w[0],
+ reciprocals10_128[ed2].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Ql.w[1],
+ reciprocals10_128[ed2].w[1], CY);
+ __shr_128_long (Qh, Qh1, (128 - amount));
+ Tmp.w[0] = 1;
+ Tmp.w[1] = 0;
+ __shl_128_long (Tmp1, Tmp, amount);
+ Qh.w[0] += carry;
+ if (Qh.w[0] < carry)
+ Qh.w[1]++;
+ if (__unsigned_compare_ge_128 (Qh, Tmp1))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status);
+ }
+
+#endif
+
+ pres->w[1] = sgn | CQ.w[1];
+ pres->w[0] = CQ.w[0];
+
+ return pres;
+
+}
+
+
+//
+// Macro for handling BID128 underflow
+//
+__BID_INLINE__ UINT128 *
+handle_UF_128 (UINT128 * pres, UINT64 sgn, int expon, UINT128 CQ,
+ unsigned *prounding_mode, unsigned *fpsc) {
+ UINT128 T128, TP128, Qh, Ql, Qh1, Stemp, Tmp, Tmp1;
+ UINT64 carry, CY;
+ int ed2, amount;
+ unsigned rmode, status;
+
+ // UF occurs
+ if (expon + MAX_FORMAT_DIGITS_128 < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+ pres->w[1] = sgn;
+ pres->w[0] = 0;
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if ((sgn && *prounding_mode == ROUNDING_DOWN)
+ || (!sgn && *prounding_mode == ROUNDING_UP))
+ pres->w[0] = 1ull;
+#endif
+#endif
+ return pres;
+ }
+
+ ed2 = 0 - expon;
+ // add rounding constant to CQ
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ rmode = *prounding_mode;
+ if (sgn && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#else
+ rmode = 0;
+#endif
+#else
+ rmode = 0;
+#endif
+
+ T128 = round_const_table_128[rmode][ed2];
+ __add_carry_out (CQ.w[0], carry, T128.w[0], CQ.w[0]);
+ CQ.w[1] = CQ.w[1] + T128.w[1] + carry;
+
+ TP128 = reciprocals10_128[ed2];
+ __mul_128x128_full (Qh, Ql, CQ, TP128);
+ amount = recip_scale[ed2];
+
+ if (amount >= 64) {
+ CQ.w[0] = Qh.w[1] >> (amount - 64);
+ CQ.w[1] = 0;
+ } else {
+ __shr_128 (CQ, Qh, amount);
+ }
+
+ expon = 0;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (!(*prounding_mode))
+#endif
+ if (CQ.w[0] & 1) {
+ // check whether fractional part of initial_P/10^ed1 is exactly .5
+
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ if (!Qh1.w[1] && !Qh1.w[0]
+ && (Ql.w[1] < reciprocals10_128[ed2].w[1]
+ || (Ql.w[1] == reciprocals10_128[ed2].w[1]
+ && Ql.w[0] < reciprocals10_128[ed2].w[0]))) {
+ CQ.w[0]--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ if (is_inexact (fpsc))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ __shl_128_long (Qh1, Qh, (128 - amount));
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (Qh1.w[1] == 0x8000000000000000ull && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[ed2].w[1]
+ || (Ql.w[1] == reciprocals10_128[ed2].w[1]
+ && Ql.w[0] < reciprocals10_128[ed2].w[0])))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if ((!Qh1.w[1]) && (!Qh1.w[0])
+ && (Ql.w[1] < reciprocals10_128[ed2].w[1]
+ || (Ql.w[1] == reciprocals10_128[ed2].w[1]
+ && Ql.w[0] < reciprocals10_128[ed2].w[0])))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp.w[0], CY, Ql.w[0],
+ reciprocals10_128[ed2].w[0]);
+ __add_carry_in_out (Stemp.w[1], carry, Ql.w[1],
+ reciprocals10_128[ed2].w[1], CY);
+ __shr_128_long (Qh, Qh1, (128 - amount));
+ Tmp.w[0] = 1;
+ Tmp.w[1] = 0;
+ __shl_128_long (Tmp1, Tmp, amount);
+ Qh.w[0] += carry;
+ if (Qh.w[0] < carry)
+ Qh.w[1]++;
+ if (__unsigned_compare_ge_128 (Qh, Tmp1))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status);
+ }
+
+#endif
+
+ pres->w[1] = sgn | CQ.w[1];
+ pres->w[0] = CQ.w[0];
+
+ return pres;
+
+}
+
+
+
+//
+// BID128 unpack, input passed by value
+//
+__BID_INLINE__ UINT64
+unpack_BID128_value (UINT64 * psign_x, int *pexponent_x,
+ UINT128 * pcoefficient_x, UINT128 x) {
+ UINT128 coeff, T33, T34;
+ UINT64 ex;
+
+ *psign_x = (x.w[1]) & 0x8000000000000000ull;
+
+ // special encodings
+ if ((x.w[1] & INFINITY_MASK64) >= SPECIAL_ENCODING_MASK64) {
+ if ((x.w[1] & INFINITY_MASK64) < INFINITY_MASK64) {
+ // non-canonical input
+ pcoefficient_x->w[0] = 0;
+ pcoefficient_x->w[1] = 0;
+ ex = (x.w[1]) >> 47;
+ *pexponent_x = ((int) ex) & EXPONENT_MASK128;
+ return 0;
+ }
+ // 10^33
+ T33 = power10_table_128[33];
+ /*coeff.w[0] = x.w[0];
+ coeff.w[1] = (x.w[1]) & LARGE_COEFF_MASK128;
+ pcoefficient_x->w[0] = x.w[0];
+ pcoefficient_x->w[1] = x.w[1];
+ if (__unsigned_compare_ge_128 (coeff, T33)) // non-canonical
+ pcoefficient_x->w[1] &= (~LARGE_COEFF_MASK128); */
+
+ pcoefficient_x->w[0] = x.w[0];
+ pcoefficient_x->w[1] = (x.w[1]) & 0x00003fffffffffffull;
+ if (__unsigned_compare_ge_128 ((*pcoefficient_x), T33)) // non-canonical
+ {
+ pcoefficient_x->w[1] = (x.w[1]) & 0xfe00000000000000ull;
+ pcoefficient_x->w[0] = 0;
+ } else
+ pcoefficient_x->w[1] = (x.w[1]) & 0xfe003fffffffffffull;
+ if ((x.w[1] & NAN_MASK64) == INFINITY_MASK64) {
+ pcoefficient_x->w[0] = 0;
+ pcoefficient_x->w[1] = x.w[1] & SINFINITY_MASK64;
+ }
+ *pexponent_x = 0;
+ return 0; // NaN or Infinity
+ }
+
+ coeff.w[0] = x.w[0];
+ coeff.w[1] = (x.w[1]) & SMALL_COEFF_MASK128;
+
+ // 10^34
+ T34 = power10_table_128[34];
+ // check for non-canonical values
+ if (__unsigned_compare_ge_128 (coeff, T34))
+ coeff.w[0] = coeff.w[1] = 0;
+
+ pcoefficient_x->w[0] = coeff.w[0];
+ pcoefficient_x->w[1] = coeff.w[1];
+
+ ex = (x.w[1]) >> 49;
+ *pexponent_x = ((int) ex) & EXPONENT_MASK128;
+
+ return coeff.w[0] | coeff.w[1];
+}
+
+
+//
+// BID128 unpack, input pased by reference
+//
+__BID_INLINE__ UINT64
+unpack_BID128 (UINT64 * psign_x, int *pexponent_x,
+ UINT128 * pcoefficient_x, UINT128 * px) {
+ UINT128 coeff, T33, T34;
+ UINT64 ex;
+
+ *psign_x = (px->w[1]) & 0x8000000000000000ull;
+
+ // special encodings
+ if ((px->w[1] & INFINITY_MASK64) >= SPECIAL_ENCODING_MASK64) {
+ if ((px->w[1] & INFINITY_MASK64) < INFINITY_MASK64) {
+ // non-canonical input
+ pcoefficient_x->w[0] = 0;
+ pcoefficient_x->w[1] = 0;
+ ex = (px->w[1]) >> 47;
+ *pexponent_x = ((int) ex) & EXPONENT_MASK128;
+ return 0;
+ }
+ // 10^33
+ T33 = power10_table_128[33];
+ coeff.w[0] = px->w[0];
+ coeff.w[1] = (px->w[1]) & LARGE_COEFF_MASK128;
+ pcoefficient_x->w[0] = px->w[0];
+ pcoefficient_x->w[1] = px->w[1];
+ if (__unsigned_compare_ge_128 (coeff, T33)) { // non-canonical
+ pcoefficient_x->w[1] &= (~LARGE_COEFF_MASK128);
+ pcoefficient_x->w[0] = 0;
+ }
+ *pexponent_x = 0;
+ return 0; // NaN or Infinity
+ }
+
+ coeff.w[0] = px->w[0];
+ coeff.w[1] = (px->w[1]) & SMALL_COEFF_MASK128;
+
+ // 10^34
+ T34 = power10_table_128[34];
+ // check for non-canonical values
+ if (__unsigned_compare_ge_128 (coeff, T34))
+ coeff.w[0] = coeff.w[1] = 0;
+
+ pcoefficient_x->w[0] = coeff.w[0];
+ pcoefficient_x->w[1] = coeff.w[1];
+
+ ex = (px->w[1]) >> 49;
+ *pexponent_x = ((int) ex) & EXPONENT_MASK128;
+
+ return coeff.w[0] | coeff.w[1];
+}
+
+//
+// Pack macro checks for overflow, but not underflow
+//
+__BID_INLINE__ UINT128 *
+get_BID128_very_fast_OF (UINT128 * pres, UINT64 sgn, int expon,
+ UINT128 coeff, unsigned *prounding_mode,
+ unsigned *fpsc) {
+ UINT128 T;
+ UINT64 tmp, tmp2;
+
+ if ((unsigned) expon > DECIMAL_MAX_EXPON_128) {
+
+ if (expon - MAX_FORMAT_DIGITS_128 <= DECIMAL_MAX_EXPON_128) {
+ T = power10_table_128[MAX_FORMAT_DIGITS_128 - 1];
+ while (__unsigned_compare_gt_128 (T, coeff)
+ && expon > DECIMAL_MAX_EXPON_128) {
+ coeff.w[1] =
+ (coeff.w[1] << 3) + (coeff.w[1] << 1) + (coeff.w[0] >> 61) +
+ (coeff.w[0] >> 63);
+ tmp2 = coeff.w[0] << 3;
+ coeff.w[0] = (coeff.w[0] << 1) + tmp2;
+ if (coeff.w[0] < tmp2)
+ coeff.w[1]++;
+
+ expon--;
+ }
+ }
+ if ((unsigned) expon > DECIMAL_MAX_EXPON_128) {
+ // OF
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (*prounding_mode == ROUNDING_TO_ZERO
+ || (sgn && *prounding_mode == ROUNDING_UP) || (!sgn
+ &&
+ *prounding_mode
+ ==
+ ROUNDING_DOWN))
+ {
+ pres->w[1] = sgn | LARGEST_BID128_HIGH;
+ pres->w[0] = LARGEST_BID128_LOW;
+ } else
+#endif
+#endif
+ {
+ pres->w[1] = sgn | INFINITY_MASK64;
+ pres->w[0] = 0;
+ }
+ return pres;
+ }
+ }
+
+ pres->w[0] = coeff.w[0];
+ tmp = expon;
+ tmp <<= 49;
+ pres->w[1] = sgn | tmp | coeff.w[1];
+
+ return pres;
+}
+
+
+//
+// No overflow/underflow checks
+// No checking for coefficient == 10^34 (rounding artifact)
+//
+__BID_INLINE__ UINT128 *
+get_BID128_very_fast (UINT128 * pres, UINT64 sgn, int expon,
+ UINT128 coeff) {
+ UINT64 tmp;
+
+ pres->w[0] = coeff.w[0];
+ tmp = expon;
+ tmp <<= 49;
+ pres->w[1] = sgn | tmp | coeff.w[1];
+
+ return pres;
+}
+
+//
+// No overflow/underflow checks
+//
+__BID_INLINE__ UINT128 *
+get_BID128_fast (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff) {
+ UINT64 tmp;
+
+ // coeff==10^34?
+ if (coeff.w[1] == 0x0001ed09bead87c0ull
+ && coeff.w[0] == 0x378d8e6400000000ull) {
+ expon++;
+ // set coefficient to 10^33
+ coeff.w[1] = 0x0000314dc6448d93ull;
+ coeff.w[0] = 0x38c15b0a00000000ull;
+ }
+
+ pres->w[0] = coeff.w[0];
+ tmp = expon;
+ tmp <<= 49;
+ pres->w[1] = sgn | tmp | coeff.w[1];
+
+ return pres;
+}
+
+//
+// General BID128 pack macro
+//
+__BID_INLINE__ UINT128 *
+get_BID128 (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff,
+ unsigned *prounding_mode, unsigned *fpsc) {
+ UINT128 T;
+ UINT64 tmp, tmp2;
+
+ // coeff==10^34?
+ if (coeff.w[1] == 0x0001ed09bead87c0ull
+ && coeff.w[0] == 0x378d8e6400000000ull) {
+ expon++;
+ // set coefficient to 10^33
+ coeff.w[1] = 0x0000314dc6448d93ull;
+ coeff.w[0] = 0x38c15b0a00000000ull;
+ }
+ // check OF, UF
+ if (expon < 0 || expon > DECIMAL_MAX_EXPON_128) {
+ // check UF
+ if (expon < 0) {
+ return handle_UF_128 (pres, sgn, expon, coeff, prounding_mode,
+ fpsc);
+ }
+
+ if (expon - MAX_FORMAT_DIGITS_128 <= DECIMAL_MAX_EXPON_128) {
+ T = power10_table_128[MAX_FORMAT_DIGITS_128 - 1];
+ while (__unsigned_compare_gt_128 (T, coeff)
+ && expon > DECIMAL_MAX_EXPON_128) {
+ coeff.w[1] =
+ (coeff.w[1] << 3) + (coeff.w[1] << 1) + (coeff.w[0] >> 61) +
+ (coeff.w[0] >> 63);
+ tmp2 = coeff.w[0] << 3;
+ coeff.w[0] = (coeff.w[0] << 1) + tmp2;
+ if (coeff.w[0] < tmp2)
+ coeff.w[1]++;
+
+ expon--;
+ }
+ }
+ if (expon > DECIMAL_MAX_EXPON_128) {
+ if (!(coeff.w[1] | coeff.w[0])) {
+ pres->w[1] = sgn | (((UINT64) DECIMAL_MAX_EXPON_128) << 49);
+ pres->w[0] = 0;
+ return pres;
+ }
+ // OF
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (*prounding_mode == ROUNDING_TO_ZERO
+ || (sgn && *prounding_mode == ROUNDING_UP) || (!sgn
+ &&
+ *prounding_mode
+ ==
+ ROUNDING_DOWN))
+ {
+ pres->w[1] = sgn | LARGEST_BID128_HIGH;
+ pres->w[0] = LARGEST_BID128_LOW;
+ } else
+#endif
+#endif
+ {
+ pres->w[1] = sgn | INFINITY_MASK64;
+ pres->w[0] = 0;
+ }
+ return pres;
+ }
+ }
+
+ pres->w[0] = coeff.w[0];
+ tmp = expon;
+ tmp <<= 49;
+ pres->w[1] = sgn | tmp | coeff.w[1];
+
+ return pres;
+}
+
+
+//
+// Macro used for conversions from string
+// (no additional arguments given for rounding mode, status flags)
+//
+__BID_INLINE__ UINT128 *
+get_BID128_string (UINT128 * pres, UINT64 sgn, int expon, UINT128 coeff) {
+ UINT128 D2, D8;
+ UINT64 tmp;
+ unsigned rmode = 0, status;
+
+ // coeff==10^34?
+ if (coeff.w[1] == 0x0001ed09bead87c0ull
+ && coeff.w[0] == 0x378d8e6400000000ull) {
+ expon++;
+ // set coefficient to 10^33
+ coeff.w[1] = 0x0000314dc6448d93ull;
+ coeff.w[0] = 0x38c15b0a00000000ull;
+ }
+ // check OF, UF
+ if ((unsigned) expon > DECIMAL_MAX_EXPON_128) {
+ // check UF
+ if (expon < 0)
+ return handle_UF_128 (pres, sgn, expon, coeff, &rmode, &status);
+
+ // OF
+
+ if (expon < DECIMAL_MAX_EXPON_128 + 34) {
+ while (expon > DECIMAL_MAX_EXPON_128 &&
+ (coeff.w[1] < power10_table_128[33].w[1] ||
+ (coeff.w[1] == power10_table_128[33].w[1]
+ && coeff.w[0] < power10_table_128[33].w[0]))) {
+ D2.w[1] = (coeff.w[1] << 1) | (coeff.w[0] >> 63);
+ D2.w[0] = coeff.w[0] << 1;
+ D8.w[1] = (coeff.w[1] << 3) | (coeff.w[0] >> 61);
+ D8.w[0] = coeff.w[0] << 3;
+
+ __add_128_128 (coeff, D2, D8);
+ expon--;
+ }
+ } else if (!(coeff.w[0] | coeff.w[1]))
+ expon = DECIMAL_MAX_EXPON_128;
+
+ if (expon > DECIMAL_MAX_EXPON_128) {
+ pres->w[1] = sgn | INFINITY_MASK64;
+ pres->w[0] = 0;
+ switch (rmode) {
+ case ROUNDING_DOWN:
+ if (!sgn) {
+ pres->w[1] = LARGEST_BID128_HIGH;
+ pres->w[0] = LARGEST_BID128_LOW;
+ }
+ break;
+ case ROUNDING_TO_ZERO:
+ pres->w[1] = sgn | LARGEST_BID128_HIGH;
+ pres->w[0] = LARGEST_BID128_LOW;
+ break;
+ case ROUNDING_UP:
+ // round up
+ if (sgn) {
+ pres->w[1] = sgn | LARGEST_BID128_HIGH;
+ pres->w[0] = LARGEST_BID128_LOW;
+ }
+ break;
+ }
+
+ return pres;
+ }
+ }
+
+ pres->w[0] = coeff.w[0];
+ tmp = expon;
+ tmp <<= 49;
+ pres->w[1] = sgn | tmp | coeff.w[1];
+
+ return pres;
+}
+
+
+
+/*****************************************************************************
+*
+* BID32 pack/unpack macros
+*
+*****************************************************************************/
+
+
+__BID_INLINE__ UINT32
+unpack_BID32 (UINT32 * psign_x, int *pexponent_x,
+ UINT32 * pcoefficient_x, UINT32 x) {
+ UINT32 tmp;
+
+ *psign_x = x & 0x80000000;
+
+ if ((x & SPECIAL_ENCODING_MASK32) == SPECIAL_ENCODING_MASK32) {
+ // special encodings
+ if ((x & INFINITY_MASK32) == INFINITY_MASK32) {
+ *pcoefficient_x = x & 0xfe0fffff;
+ if ((x & 0x000fffff) >= 1000000)
+ *pcoefficient_x = x & 0xfe000000;
+ if ((x & NAN_MASK32) == INFINITY_MASK32)
+ *pcoefficient_x = x & 0xf8000000;
+ *pexponent_x = 0;
+ return 0; // NaN or Infinity
+ }
+ // coefficient
+ *pcoefficient_x = (x & SMALL_COEFF_MASK32) | LARGE_COEFF_HIGH_BIT32;
+ // check for non-canonical value
+ if (*pcoefficient_x >= 10000000)
+ *pcoefficient_x = 0;
+ // get exponent
+ tmp = x >> 21;
+ *pexponent_x = tmp & EXPONENT_MASK32;
+ return 1;
+ }
+ // exponent
+ tmp = x >> 23;
+ *pexponent_x = tmp & EXPONENT_MASK32;
+ // coefficient
+ *pcoefficient_x = (x & LARGE_COEFF_MASK32);
+
+ return *pcoefficient_x;
+}
+
+//
+// General pack macro for BID32
+//
+__BID_INLINE__ UINT32
+get_BID32 (UINT32 sgn, int expon, UINT64 coeff, int rmode,
+ unsigned *fpsc) {
+ UINT128 Q;
+ UINT64 C64, remainder_h, carry, Stemp;
+ UINT32 r, mask;
+ int extra_digits, amount, amount2;
+ unsigned status;
+
+ if (coeff > 9999999ull) {
+ expon++;
+ coeff = 1000000ull;
+ }
+ // check for possible underflow/overflow
+ if (((unsigned) expon) > DECIMAL_MAX_EXPON_32) {
+ if (expon < 0) {
+ // underflow
+ if (expon + MAX_FORMAT_DIGITS_32 < 0) {
+#ifdef SET_STATUS_FLAGS
+ __set_status_flags (fpsc,
+ UNDERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == ROUNDING_DOWN && sgn)
+ return 0x80000001;
+ if (rmode == ROUNDING_UP && !sgn)
+ return 1;
+#endif
+#endif
+ // result is 0
+ return sgn;
+ }
+ // get digits to be shifted out
+#ifdef IEEE_ROUND_NEAREST_TIES_AWAY
+ rmode = 0;
+#endif
+#ifdef IEEE_ROUND_NEAREST
+ rmode = 0;
+#endif
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (sgn && (unsigned) (rmode - 1) < 2)
+ rmode = 3 - rmode;
+#endif
+#endif
+
+ extra_digits = -expon;
+ coeff += round_const_table[rmode][extra_digits];
+
+ // get coeff*(2^M[extra_digits])/10^extra_digits
+ __mul_64x64_to_128 (Q, coeff, reciprocals10_64[extra_digits]);
+
+ // now get P/10^extra_digits: shift Q_high right by M[extra_digits]-128
+ amount = short_recip_scale[extra_digits];
+
+ C64 = Q.w[1] >> amount;
+
+#ifndef IEEE_ROUND_NEAREST_TIES_AWAY
+#ifndef IEEE_ROUND_NEAREST
+ if (rmode == 0) //ROUNDING_TO_NEAREST
+#endif
+ if (C64 & 1) {
+ // check whether fractional part of initial_P/10^extra_digits is exactly .5
+
+ // get remainder
+ amount2 = 64 - amount;
+ remainder_h = 0;
+ remainder_h--;
+ remainder_h >>= amount2;
+ remainder_h = remainder_h & Q.w[1];
+
+ if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits])) {
+ C64--;
+ }
+ }
+#endif
+
+#ifdef SET_STATUS_FLAGS
+
+ if (is_inexact (fpsc))
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION);
+ else {
+ status = INEXACT_EXCEPTION;
+ // get remainder
+ remainder_h = Q.w[1] << (64 - amount);
+
+ switch (rmode) {
+ case ROUNDING_TO_NEAREST:
+ case ROUNDING_TIES_AWAY:
+ // test whether fractional part is 0
+ if (remainder_h == 0x8000000000000000ull
+ && (Q.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ case ROUNDING_DOWN:
+ case ROUNDING_TO_ZERO:
+ if (!remainder_h && (Q.w[0] < reciprocals10_64[extra_digits]))
+ status = EXACT_STATUS;
+ break;
+ default:
+ // round up
+ __add_carry_out (Stemp, carry, Q.w[0],
+ reciprocals10_64[extra_digits]);
+ if ((remainder_h >> (64 - amount)) + carry >=
+ (((UINT64) 1) << amount))
+ status = EXACT_STATUS;
+ }
+
+ if (status != EXACT_STATUS)
+ __set_status_flags (fpsc, UNDERFLOW_EXCEPTION | status);
+ }
+
+#endif
+
+ return sgn | (UINT32) C64;
+ }
+
+ while (coeff < 1000000 && expon > DECIMAL_MAX_EXPON_32) {
+ coeff = (coeff << 3) + (coeff << 1);
+ expon--;
+ }
+ if (((unsigned) expon) > DECIMAL_MAX_EXPON_32) {
+ __set_status_flags (fpsc, OVERFLOW_EXCEPTION | INEXACT_EXCEPTION);
+ // overflow
+ r = sgn | INFINITY_MASK32;
+ switch (rmode) {
+ case ROUNDING_DOWN:
+ if (!sgn)
+ r = LARGEST_BID32;
+ break;
+ case ROUNDING_TO_ZERO:
+ r = sgn | LARGEST_BID32;
+ break;
+ case ROUNDING_UP:
+ // round up
+ if (sgn)
+ r = sgn | LARGEST_BID32;
+ }
+ return r;
+ }
+ }
+
+ mask = 1 << 23;
+
+ // check whether coefficient fits in DECIMAL_COEFF_FIT bits
+ if (coeff < mask) {
+ r = expon;
+ r <<= 23;
+ r |= ((UINT32) coeff | sgn);
+ return r;
+ }
+ // special format
+
+ r = expon;
+ r <<= 21;
+ r |= (sgn | SPECIAL_ENCODING_MASK32);
+ // add coeff, without leading bits
+ mask = (1 << 21) - 1;
+ r |= (((UINT32) coeff) & mask);
+
+ return r;
+}
+
+
+
+//
+// no overflow/underflow checks
+//
+__BID_INLINE__ UINT32
+very_fast_get_BID32 (UINT32 sgn, int expon, UINT32 coeff) {
+ UINT32 r, mask;
+
+ mask = 1 << 23;
+
+ // check whether coefficient fits in 10*2+3 bits
+ if (coeff < mask) {
+ r = expon;
+ r <<= 23;
+ r |= (coeff | sgn);
+ return r;
+ }
+ // special format
+ r = expon;
+ r <<= 21;
+ r |= (sgn | SPECIAL_ENCODING_MASK32);
+ // add coeff, without leading bits
+ mask = (1 << 21) - 1;
+ coeff &= mask;
+ r |= coeff;
+
+ return r;
+}
+
+
+
+/*************************************************************
+ *
+ *************************************************************/
+typedef
+ALIGN (16)
+ struct {
+ UINT64 w[6];
+ } UINT384;
+ typedef ALIGN (16)
+ struct {
+ UINT64 w[8];
+ } UINT512;
+
+// #define P 34
+#define MASK_STEERING_BITS 0x6000000000000000ull
+#define MASK_BINARY_EXPONENT1 0x7fe0000000000000ull
+#define MASK_BINARY_SIG1 0x001fffffffffffffull
+#define MASK_BINARY_EXPONENT2 0x1ff8000000000000ull
+ //used to take G[2:w+3] (sec 3.3)
+#define MASK_BINARY_SIG2 0x0007ffffffffffffull
+ //used to mask out G4:T0 (sec 3.3)
+#define MASK_BINARY_OR2 0x0020000000000000ull
+ //used to prefix 8+G4 to T (sec 3.3)
+#define UPPER_EXPON_LIMIT 51
+#define MASK_EXP 0x7ffe000000000000ull
+#define MASK_SPECIAL 0x7800000000000000ull
+#define MASK_NAN 0x7c00000000000000ull
+#define MASK_SNAN 0x7e00000000000000ull
+#define MASK_ANY_INF 0x7c00000000000000ull
+#define MASK_INF 0x7800000000000000ull
+#define MASK_SIGN 0x8000000000000000ull
+#define MASK_COEFF 0x0001ffffffffffffull
+#define BIN_EXP_BIAS (0x1820ull << 49)
+
+#define EXP_MIN 0x0000000000000000ull
+ // EXP_MIN = (-6176 + 6176) << 49
+#define EXP_MAX 0x5ffe000000000000ull
+ // EXP_MAX = (6111 + 6176) << 49
+#define EXP_MAX_P1 0x6000000000000000ull
+ // EXP_MAX + 1 = (6111 + 6176 + 1) << 49
+#define EXP_P1 0x0002000000000000ull
+ // EXP_ P1= 1 << 49
+#define expmin -6176
+ // min unbiased exponent
+#define expmax 6111
+ // max unbiased exponent
+#define expmin16 -398
+ // min unbiased exponent
+#define expmax16 369
+ // max unbiased exponent
+
+#define SIGNMASK32 0x80000000
+#define BID64_SIG_MAX 0x002386F26FC0ffffull
+#define SIGNMASK64 0x8000000000000000ull
+
+// typedef unsigned int FPSC; // floating-point status and control
+ // bit31:
+ // bit30:
+ // bit29:
+ // bit28:
+ // bit27:
+ // bit26:
+ // bit25:
+ // bit24:
+ // bit23:
+ // bit22:
+ // bit21:
+ // bit20:
+ // bit19:
+ // bit18:
+ // bit17:
+ // bit16:
+ // bit15:
+ // bit14: RC:2
+ // bit13: RC:1
+ // bit12: RC:0
+ // bit11: PM
+ // bit10: UM
+ // bit9: OM
+ // bit8: ZM
+ // bit7: DM
+ // bit6: IM
+ // bit5: PE
+ // bit4: UE
+ // bit3: OE
+ // bit2: ZE
+ // bit1: DE
+ // bit0: IE
+
+#define ROUNDING_MODE_MASK 0x00007000
+
+ typedef struct _DEC_DIGITS {
+ unsigned int digits;
+ UINT64 threshold_hi;
+ UINT64 threshold_lo;
+ unsigned int digits1;
+ } DEC_DIGITS;
+
+ extern DEC_DIGITS nr_digits[];
+ extern UINT64 midpoint64[];
+ extern UINT128 midpoint128[];
+ extern UINT192 midpoint192[];
+ extern UINT256 midpoint256[];
+ extern UINT64 ten2k64[];
+ extern UINT128 ten2k128[];
+ extern UINT256 ten2k256[];
+ extern UINT128 ten2mk128[];
+ extern UINT64 ten2mk64[];
+ extern UINT128 ten2mk128trunc[];
+ extern int shiftright128[];
+ extern UINT64 maskhigh128[];
+ extern UINT64 maskhigh128M[];
+ extern UINT64 maskhigh192M[];
+ extern UINT64 maskhigh256M[];
+ extern UINT64 onehalf128[];
+ extern UINT64 onehalf128M[];
+ extern UINT64 onehalf192M[];
+ extern UINT64 onehalf256M[];
+ extern UINT128 ten2mk128M[];
+ extern UINT128 ten2mk128truncM[];
+ extern UINT192 ten2mk192truncM[];
+ extern UINT256 ten2mk256truncM[];
+ extern int shiftright128M[];
+ extern int shiftright192M[];
+ extern int shiftright256M[];
+ extern UINT192 ten2mk192M[];
+ extern UINT256 ten2mk256M[];
+ extern unsigned char char_table2[];
+ extern unsigned char char_table3[];
+
+ extern UINT64 ten2m3k64[];
+ extern unsigned int shift_ten2m3k64[];
+ extern UINT128 ten2m3k128[];
+ extern unsigned int shift_ten2m3k128[];
+
+
+
+/***************************************************************************
+ *************** TABLES FOR GENERAL ROUNDING FUNCTIONS *********************
+ ***************************************************************************/
+
+ extern UINT64 Kx64[];
+ extern unsigned int Ex64m64[];
+ extern UINT64 half64[];
+ extern UINT64 mask64[];
+ extern UINT64 ten2mxtrunc64[];
+
+ extern UINT128 Kx128[];
+ extern unsigned int Ex128m128[];
+ extern UINT64 half128[];
+ extern UINT64 mask128[];
+ extern UINT128 ten2mxtrunc128[];
+
+ extern UINT192 Kx192[];
+ extern unsigned int Ex192m192[];
+ extern UINT64 half192[];
+ extern UINT64 mask192[];
+ extern UINT192 ten2mxtrunc192[];
+
+ extern UINT256 Kx256[];
+ extern unsigned int Ex256m256[];
+ extern UINT64 half256[];
+ extern UINT64 mask256[];
+ extern UINT256 ten2mxtrunc256[];
+
+ typedef union __bid64_128 {
+ UINT64 b64;
+ UINT128 b128;
+ } BID64_128;
+
+ BID64_128 bid_fma (unsigned int P0,
+ BID64_128 x1, unsigned int P1,
+ BID64_128 y1, unsigned int P2,
+ BID64_128 z1, unsigned int P3,
+ unsigned int rnd_mode, FPSC * fpsc);
+
+#define P16 16
+#define P34 34
+
+ union __int_double {
+ UINT64 i;
+ double d;
+ };
+ typedef union __int_double int_double;
+
+
+ union __int_float {
+ UINT32 i;
+ float d;
+ };
+ typedef union __int_float int_float;
+
+#define SWAP(A,B,T) {\
+ T = A; \
+ A = B; \
+ B = T; \
+}
+
+// this macro will find coefficient_x to be in [2^A, 2^(A+1) )
+// ie it knows that it is A bits long
+#define NUMBITS(A, coefficient_x, tempx){\
+ temp_x.d=(float)coefficient_x;\
+ A=((tempx.i >>23) & EXPONENT_MASK32) - 0x7f;\
+}
+
+ enum class_types {
+ signalingNaN,
+ quietNaN,
+ negativeInfinity,
+ negativeNormal,
+ negativeSubnormal,
+ negativeZero,
+ positiveZero,
+ positiveSubnormal,
+ positiveNormal,
+ positiveInfinity
+ };
+
+ typedef union {
+ UINT64 ui64;
+ double d;
+ } BID_UI64DOUBLE;
+
+#endif
diff --git a/gcc-4.9/libgcc/config/libbid/bid_round.c b/gcc-4.9/libgcc/config/libbid/bid_round.c
new file mode 100644
index 000000000..ed0a71db9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_round.c
@@ -0,0 +1,1049 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*****************************************************************************
+ *
+ * BID64 encoding:
+ * ****************************************
+ * 63 62 53 52 0
+ * |---|------------------|--------------|
+ * | S | Biased Exp (E) | Coeff (c) |
+ * |---|------------------|--------------|
+ *
+ * bias = 398
+ * number = (-1)^s * 10^(E-398) * c
+ * coefficient range - 0 to (2^53)-1
+ * COEFF_MAX = 2^53-1 = 9007199254740991
+ *
+ *****************************************************************************
+ *
+ * BID128 encoding:
+ * 1-bit sign
+ * 14-bit biased exponent in [0x21, 0x3020] = [33, 12320]
+ * unbiased exponent in [-6176, 6111]; exponent bias = 6176
+ * 113-bit unsigned binary integer coefficient (49-bit high + 64-bit low)
+ * Note: 10^34-1 ~ 2^112.945555... < 2^113 => coefficient fits in 113 bits
+ *
+ * Note: assume invalid encodings are not passed to this function
+ *
+ * Round a number C with q decimal digits, represented as a binary integer
+ * to q - x digits. Six different routines are provided for different values
+ * of q. The maximum value of q used in the library is q = 3 * P - 1 where
+ * P = 16 or P = 34 (so q <= 111 decimal digits).
+ * The partitioning is based on the following, where Kx is the scaled
+ * integer representing the value of 10^(-x) rounded up to a number of bits
+ * sufficient to ensure correct rounding:
+ *
+ * --------------------------------------------------------------------------
+ * q x max. value of a max number min. number
+ * of bits in C of bits in Kx
+ * --------------------------------------------------------------------------
+ *
+ * GROUP 1: 64 bits
+ * round64_2_18 ()
+ *
+ * 2 [1,1] 10^1 - 1 < 2^3.33 4 4
+ * ... ... ... ... ...
+ * 18 [1,17] 10^18 - 1 < 2^59.80 60 61
+ *
+ * GROUP 2: 128 bits
+ * round128_19_38 ()
+ *
+ * 19 [1,18] 10^19 - 1 < 2^63.11 64 65
+ * 20 [1,19] 10^20 - 1 < 2^66.44 67 68
+ * ... ... ... ... ...
+ * 38 [1,37] 10^38 - 1 < 2^126.24 127 128
+ *
+ * GROUP 3: 192 bits
+ * round192_39_57 ()
+ *
+ * 39 [1,38] 10^39 - 1 < 2^129.56 130 131
+ * ... ... ... ... ...
+ * 57 [1,56] 10^57 - 1 < 2^189.35 190 191
+ *
+ * GROUP 4: 256 bits
+ * round256_58_76 ()
+ *
+ * 58 [1,57] 10^58 - 1 < 2^192.68 193 194
+ * ... ... ... ... ...
+ * 76 [1,75] 10^76 - 1 < 2^252.47 253 254
+ *
+ * GROUP 5: 320 bits
+ * round320_77_96 ()
+ *
+ * 77 [1,76] 10^77 - 1 < 2^255.79 256 257
+ * 78 [1,77] 10^78 - 1 < 2^259.12 260 261
+ * ... ... ... ... ...
+ * 96 [1,95] 10^96 - 1 < 2^318.91 319 320
+ *
+ * GROUP 6: 384 bits
+ * round384_97_115 ()
+ *
+ * 97 [1,96] 10^97 - 1 < 2^322.23 323 324
+ * ... ... ... ... ...
+ * 115 [1,114] 10^115 - 1 < 2^382.03 383 384
+ *
+ ****************************************************************************/
+
+#include "bid_internal.h"
+
+void
+round64_2_18 (int q,
+ int x,
+ UINT64 C,
+ UINT64 * ptr_Cstar,
+ int *incr_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint) {
+
+ UINT128 P128;
+ UINT128 fstar;
+ UINT64 Cstar;
+ UINT64 tmp64;
+ int shift;
+ int ind;
+
+ // Note:
+ // In round128_2_18() positive numbers with 2 <= q <= 18 will be
+ // rounded to nearest only for 1 <= x <= 3:
+ // x = 1 or x = 2 when q = 17
+ // x = 2 or x = 3 when q = 18
+ // However, for generality and possible uses outside the frame of IEEE 754R
+ // this implementation works for 1 <= x <= q - 1
+
+ // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even,
+ // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are
+ // initialized to 0 by the caller
+
+ // round a number C with q decimal digits, 2 <= q <= 18
+ // to q - x digits, 1 <= x <= 17
+ // C = C + 1/2 * 10^x where the result C fits in 64 bits
+ // (because the largest value is 999999999999999999 + 50000000000000000 =
+ // 0x0e92596fd628ffff, which fits in 60 bits)
+ ind = x - 1; // 0 <= ind <= 16
+ C = C + midpoint64[ind];
+ // kx ~= 10^(-x), kx = Kx64[ind] * 2^(-Ex), 0 <= ind <= 16
+ // P128 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx
+ // the approximation kx of 10^(-x) was rounded up to 64 bits
+ __mul_64x64_to_128MACH (P128, C, Kx64[ind]);
+ // calculate C* = floor (P128) and f*
+ // Cstar = P128 >> Ex
+ // fstar = low Ex bits of P128
+ shift = Ex64m64[ind]; // in [3, 56]
+ Cstar = P128.w[1] >> shift;
+ fstar.w[1] = P128.w[1] & mask64[ind];
+ fstar.w[0] = P128.w[0];
+ // the top Ex bits of 10^(-x) are T* = ten2mxtrunc64[ind], e.g.
+ // if x=1, T*=ten2mxtrunc64[0]=0xcccccccccccccccc
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has q - x decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has q - x decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has q - x decimal digits,
+ // correct by Property 1)
+ // in the caling function n = C* * 10^(e+x)
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (fstar.w[1] > half64[ind] ||
+ (fstar.w[1] == half64[ind] && fstar.w[0])) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[1] - half64[ind];
+ if (tmp64 || fstar.w[0] > ten2mxtrunc64[ind]) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ // check for midpoints (could do this before determining inexactness)
+ if (fstar.w[1] == 0 && fstar.w[0] <= ten2mxtrunc64[ind]) {
+ // the result is a midpoint
+ if (Cstar & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result may be 0
+ Cstar--; // Cstar is now even
+ *ptr_is_midpoint_gt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ *ptr_is_midpoint_lt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ }
+ }
+ // check for rounding overflow, which occurs if Cstar = 10^(q-x)
+ ind = q - x; // 1 <= ind <= q - 1
+ if (Cstar == ten2k64[ind]) { // if Cstar = 10^(q-x)
+ Cstar = ten2k64[ind - 1]; // Cstar = 10^(q-x-1)
+ *incr_exp = 1;
+ } else { // 10^33 <= Cstar <= 10^34 - 1
+ *incr_exp = 0;
+ }
+ *ptr_Cstar = Cstar;
+}
+
+
+void
+round128_19_38 (int q,
+ int x,
+ UINT128 C,
+ UINT128 * ptr_Cstar,
+ int *incr_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint) {
+
+ UINT256 P256;
+ UINT256 fstar;
+ UINT128 Cstar;
+ UINT64 tmp64;
+ int shift;
+ int ind;
+
+ // Note:
+ // In round128_19_38() positive numbers with 19 <= q <= 38 will be
+ // rounded to nearest only for 1 <= x <= 23:
+ // x = 3 or x = 4 when q = 19
+ // x = 4 or x = 5 when q = 20
+ // ...
+ // x = 18 or x = 19 when q = 34
+ // x = 1 or x = 2 or x = 19 or x = 20 when q = 35
+ // x = 2 or x = 3 or x = 20 or x = 21 when q = 36
+ // x = 3 or x = 4 or x = 21 or x = 22 when q = 37
+ // x = 4 or x = 5 or x = 22 or x = 23 when q = 38
+ // However, for generality and possible uses outside the frame of IEEE 754R
+ // this implementation works for 1 <= x <= q - 1
+
+ // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even,
+ // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are
+ // initialized to 0 by the caller
+
+ // round a number C with q decimal digits, 19 <= q <= 38
+ // to q - x digits, 1 <= x <= 37
+ // C = C + 1/2 * 10^x where the result C fits in 128 bits
+ // (because the largest value is 99999999999999999999999999999999999999 +
+ // 5000000000000000000000000000000000000 =
+ // 0x4efe43b0c573e7e68a043d8fffffffff, which fits is 127 bits)
+
+ ind = x - 1; // 0 <= ind <= 36
+ if (ind <= 18) { // if 0 <= ind <= 18
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint64[ind];
+ if (C.w[0] < tmp64)
+ C.w[1]++;
+ } else { // if 19 <= ind <= 37
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint128[ind - 19].w[0];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ }
+ C.w[1] = C.w[1] + midpoint128[ind - 19].w[1];
+ }
+ // kx ~= 10^(-x), kx = Kx128[ind] * 2^(-Ex), 0 <= ind <= 36
+ // P256 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx
+ // the approximation kx of 10^(-x) was rounded up to 128 bits
+ __mul_128x128_to_256 (P256, C, Kx128[ind]);
+ // calculate C* = floor (P256) and f*
+ // Cstar = P256 >> Ex
+ // fstar = low Ex bits of P256
+ shift = Ex128m128[ind]; // in [2, 63] but have to consider two cases
+ if (ind <= 18) { // if 0 <= ind <= 18
+ Cstar.w[0] = (P256.w[2] >> shift) | (P256.w[3] << (64 - shift));
+ Cstar.w[1] = (P256.w[3] >> shift);
+ fstar.w[0] = P256.w[0];
+ fstar.w[1] = P256.w[1];
+ fstar.w[2] = P256.w[2] & mask128[ind];
+ fstar.w[3] = 0x0ULL;
+ } else { // if 19 <= ind <= 37
+ Cstar.w[0] = P256.w[3] >> shift;
+ Cstar.w[1] = 0x0ULL;
+ fstar.w[0] = P256.w[0];
+ fstar.w[1] = P256.w[1];
+ fstar.w[2] = P256.w[2];
+ fstar.w[3] = P256.w[3] & mask128[ind];
+ }
+ // the top Ex bits of 10^(-x) are T* = ten2mxtrunc64[ind], e.g.
+ // if x=1, T*=ten2mxtrunc128[0]=0xcccccccccccccccccccccccccccccccc
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has q - x decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has q - x decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has q - x decimal digits,
+ // correct by Property 1)
+ // in the caling function n = C* * 10^(e+x)
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind <= 18) { // if 0 <= ind <= 18
+ if (fstar.w[2] > half128[ind] ||
+ (fstar.w[2] == half128[ind] && (fstar.w[1] || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[2] - half128[ind];
+ if (tmp64 || fstar.w[1] > ten2mxtrunc128[ind].w[1] || (fstar.w[1] == ten2mxtrunc128[ind].w[1] && fstar.w[0] > ten2mxtrunc128[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 19 <= ind <= 37
+ if (fstar.w[3] > half128[ind] || (fstar.w[3] == half128[ind] &&
+ (fstar.w[2] || fstar.w[1]
+ || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[3] - half128[ind];
+ if (tmp64 || fstar.w[2] || fstar.w[1] > ten2mxtrunc128[ind].w[1] || (fstar.w[1] == ten2mxtrunc128[ind].w[1] && fstar.w[0] > ten2mxtrunc128[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ }
+ // check for midpoints (could do this before determining inexactness)
+ if (fstar.w[3] == 0 && fstar.w[2] == 0 &&
+ (fstar.w[1] < ten2mxtrunc128[ind].w[1] ||
+ (fstar.w[1] == ten2mxtrunc128[ind].w[1] &&
+ fstar.w[0] <= ten2mxtrunc128[ind].w[0]))) {
+ // the result is a midpoint
+ if (Cstar.w[0] & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result may be 0
+ Cstar.w[0]--; // Cstar is now even
+ if (Cstar.w[0] == 0xffffffffffffffffULL) {
+ Cstar.w[1]--;
+ }
+ *ptr_is_midpoint_gt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ *ptr_is_midpoint_lt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ }
+ }
+ // check for rounding overflow, which occurs if Cstar = 10^(q-x)
+ ind = q - x; // 1 <= ind <= q - 1
+ if (ind <= 19) {
+ if (Cstar.w[1] == 0x0ULL && Cstar.w[0] == ten2k64[ind]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k64[ind - 1]; // Cstar = 10^(q-x-1)
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind == 20) {
+ // if ind = 20
+ if (Cstar.w[1] == ten2k128[0].w[1]
+ && Cstar.w[0] == ten2k128[0].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k64[19]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = 0x0ULL;
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else { // if 21 <= ind <= 37
+ if (Cstar.w[1] == ten2k128[ind - 20].w[1] &&
+ Cstar.w[0] == ten2k128[ind - 20].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k128[ind - 21].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k128[ind - 21].w[1];
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ }
+ ptr_Cstar->w[1] = Cstar.w[1];
+ ptr_Cstar->w[0] = Cstar.w[0];
+}
+
+
+void
+round192_39_57 (int q,
+ int x,
+ UINT192 C,
+ UINT192 * ptr_Cstar,
+ int *incr_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint) {
+
+ UINT384 P384;
+ UINT384 fstar;
+ UINT192 Cstar;
+ UINT64 tmp64;
+ int shift;
+ int ind;
+
+ // Note:
+ // In round192_39_57() positive numbers with 39 <= q <= 57 will be
+ // rounded to nearest only for 5 <= x <= 42:
+ // x = 23 or x = 24 or x = 5 or x = 6 when q = 39
+ // x = 24 or x = 25 or x = 6 or x = 7 when q = 40
+ // ...
+ // x = 41 or x = 42 or x = 23 or x = 24 when q = 57
+ // However, for generality and possible uses outside the frame of IEEE 754R
+ // this implementation works for 1 <= x <= q - 1
+
+ // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even,
+ // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are
+ // initialized to 0 by the caller
+
+ // round a number C with q decimal digits, 39 <= q <= 57
+ // to q - x digits, 1 <= x <= 56
+ // C = C + 1/2 * 10^x where the result C fits in 192 bits
+ // (because the largest value is
+ // 999999999999999999999999999999999999999999999999999999999 +
+ // 50000000000000000000000000000000000000000000000000000000 =
+ // 0x2ad282f212a1da846afdaf18c034ff09da7fffffffffffff, which fits in 190 bits)
+ ind = x - 1; // 0 <= ind <= 55
+ if (ind <= 18) { // if 0 <= ind <= 18
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint64[ind];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0) {
+ C.w[2]++;
+ }
+ }
+ } else if (ind <= 37) { // if 19 <= ind <= 37
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint128[ind - 19].w[0];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0) {
+ C.w[2]++;
+ }
+ }
+ tmp64 = C.w[1];
+ C.w[1] = C.w[1] + midpoint128[ind - 19].w[1];
+ if (C.w[1] < tmp64) {
+ C.w[2]++;
+ }
+ } else { // if 38 <= ind <= 57 (actually ind <= 55)
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint192[ind - 38].w[0];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0ull) {
+ C.w[2]++;
+ }
+ }
+ tmp64 = C.w[1];
+ C.w[1] = C.w[1] + midpoint192[ind - 38].w[1];
+ if (C.w[1] < tmp64) {
+ C.w[2]++;
+ }
+ C.w[2] = C.w[2] + midpoint192[ind - 38].w[2];
+ }
+ // kx ~= 10^(-x), kx = Kx192[ind] * 2^(-Ex), 0 <= ind <= 55
+ // P384 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx
+ // the approximation kx of 10^(-x) was rounded up to 192 bits
+ __mul_192x192_to_384 (P384, C, Kx192[ind]);
+ // calculate C* = floor (P384) and f*
+ // Cstar = P384 >> Ex
+ // fstar = low Ex bits of P384
+ shift = Ex192m192[ind]; // in [1, 63] but have to consider three cases
+ if (ind <= 18) { // if 0 <= ind <= 18
+ Cstar.w[2] = (P384.w[5] >> shift);
+ Cstar.w[1] = (P384.w[5] << (64 - shift)) | (P384.w[4] >> shift);
+ Cstar.w[0] = (P384.w[4] << (64 - shift)) | (P384.w[3] >> shift);
+ fstar.w[5] = 0x0ULL;
+ fstar.w[4] = 0x0ULL;
+ fstar.w[3] = P384.w[3] & mask192[ind];
+ fstar.w[2] = P384.w[2];
+ fstar.w[1] = P384.w[1];
+ fstar.w[0] = P384.w[0];
+ } else if (ind <= 37) { // if 19 <= ind <= 37
+ Cstar.w[2] = 0x0ULL;
+ Cstar.w[1] = P384.w[5] >> shift;
+ Cstar.w[0] = (P384.w[5] << (64 - shift)) | (P384.w[4] >> shift);
+ fstar.w[5] = 0x0ULL;
+ fstar.w[4] = P384.w[4] & mask192[ind];
+ fstar.w[3] = P384.w[3];
+ fstar.w[2] = P384.w[2];
+ fstar.w[1] = P384.w[1];
+ fstar.w[0] = P384.w[0];
+ } else { // if 38 <= ind <= 57
+ Cstar.w[2] = 0x0ULL;
+ Cstar.w[1] = 0x0ULL;
+ Cstar.w[0] = P384.w[5] >> shift;
+ fstar.w[5] = P384.w[5] & mask192[ind];
+ fstar.w[4] = P384.w[4];
+ fstar.w[3] = P384.w[3];
+ fstar.w[2] = P384.w[2];
+ fstar.w[1] = P384.w[1];
+ fstar.w[0] = P384.w[0];
+ }
+
+ // the top Ex bits of 10^(-x) are T* = ten2mxtrunc192[ind], e.g. if x=1,
+ // T*=ten2mxtrunc192[0]=0xcccccccccccccccccccccccccccccccccccccccccccccccc
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has q - x decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has q - x decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has q - x decimal digits,
+ // correct by Property 1)
+ // in the caling function n = C* * 10^(e+x)
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind <= 18) { // if 0 <= ind <= 18
+ if (fstar.w[3] > half192[ind] || (fstar.w[3] == half192[ind] &&
+ (fstar.w[2] || fstar.w[1]
+ || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[3] - half192[ind];
+ if (tmp64 || fstar.w[2] > ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] > ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] > ten2mxtrunc192[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind <= 37) { // if 19 <= ind <= 37
+ if (fstar.w[4] > half192[ind] || (fstar.w[4] == half192[ind] &&
+ (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[4] - half192[ind];
+ if (tmp64 || fstar.w[3] || fstar.w[2] > ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] > ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] > ten2mxtrunc192[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 38 <= ind <= 55
+ if (fstar.w[5] > half192[ind] || (fstar.w[5] == half192[ind] &&
+ (fstar.w[4] || fstar.w[3]
+ || fstar.w[2] || fstar.w[1]
+ || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[5] - half192[ind];
+ if (tmp64 || fstar.w[4] || fstar.w[3] || fstar.w[2] > ten2mxtrunc192[ind].w[2] || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] > ten2mxtrunc192[ind].w[1]) || (fstar.w[2] == ten2mxtrunc192[ind].w[2] && fstar.w[1] == ten2mxtrunc192[ind].w[1] && fstar.w[0] > ten2mxtrunc192[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ }
+ // check for midpoints (could do this before determining inexactness)
+ if (fstar.w[5] == 0 && fstar.w[4] == 0 && fstar.w[3] == 0 &&
+ (fstar.w[2] < ten2mxtrunc192[ind].w[2] ||
+ (fstar.w[2] == ten2mxtrunc192[ind].w[2] &&
+ fstar.w[1] < ten2mxtrunc192[ind].w[1]) ||
+ (fstar.w[2] == ten2mxtrunc192[ind].w[2] &&
+ fstar.w[1] == ten2mxtrunc192[ind].w[1] &&
+ fstar.w[0] <= ten2mxtrunc192[ind].w[0]))) {
+ // the result is a midpoint
+ if (Cstar.w[0] & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result may be 0
+ Cstar.w[0]--; // Cstar is now even
+ if (Cstar.w[0] == 0xffffffffffffffffULL) {
+ Cstar.w[1]--;
+ if (Cstar.w[1] == 0xffffffffffffffffULL) {
+ Cstar.w[2]--;
+ }
+ }
+ *ptr_is_midpoint_gt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ *ptr_is_midpoint_lt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ }
+ }
+ // check for rounding overflow, which occurs if Cstar = 10^(q-x)
+ ind = q - x; // 1 <= ind <= q - 1
+ if (ind <= 19) {
+ if (Cstar.w[2] == 0x0ULL && Cstar.w[1] == 0x0ULL &&
+ Cstar.w[0] == ten2k64[ind]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k64[ind - 1]; // Cstar = 10^(q-x-1)
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind == 20) {
+ // if ind = 20
+ if (Cstar.w[2] == 0x0ULL && Cstar.w[1] == ten2k128[0].w[1] &&
+ Cstar.w[0] == ten2k128[0].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k64[19]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = 0x0ULL;
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind <= 38) { // if 21 <= ind <= 38
+ if (Cstar.w[2] == 0x0ULL && Cstar.w[1] == ten2k128[ind - 20].w[1] &&
+ Cstar.w[0] == ten2k128[ind - 20].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k128[ind - 21].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k128[ind - 21].w[1];
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind == 39) {
+ if (Cstar.w[2] == ten2k256[0].w[2] && Cstar.w[1] == ten2k256[0].w[1]
+ && Cstar.w[0] == ten2k256[0].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k128[18].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k128[18].w[1];
+ Cstar.w[2] = 0x0ULL;
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else { // if 40 <= ind <= 56
+ if (Cstar.w[2] == ten2k256[ind - 39].w[2] &&
+ Cstar.w[1] == ten2k256[ind - 39].w[1] &&
+ Cstar.w[0] == ten2k256[ind - 39].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k256[ind - 40].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k256[ind - 40].w[1];
+ Cstar.w[2] = ten2k256[ind - 40].w[2];
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ }
+ ptr_Cstar->w[2] = Cstar.w[2];
+ ptr_Cstar->w[1] = Cstar.w[1];
+ ptr_Cstar->w[0] = Cstar.w[0];
+}
+
+
+void
+round256_58_76 (int q,
+ int x,
+ UINT256 C,
+ UINT256 * ptr_Cstar,
+ int *incr_exp,
+ int *ptr_is_midpoint_lt_even,
+ int *ptr_is_midpoint_gt_even,
+ int *ptr_is_inexact_lt_midpoint,
+ int *ptr_is_inexact_gt_midpoint) {
+
+ UINT512 P512;
+ UINT512 fstar;
+ UINT256 Cstar;
+ UINT64 tmp64;
+ int shift;
+ int ind;
+
+ // Note:
+ // In round256_58_76() positive numbers with 58 <= q <= 76 will be
+ // rounded to nearest only for 24 <= x <= 61:
+ // x = 42 or x = 43 or x = 24 or x = 25 when q = 58
+ // x = 43 or x = 44 or x = 25 or x = 26 when q = 59
+ // ...
+ // x = 60 or x = 61 or x = 42 or x = 43 when q = 76
+ // However, for generality and possible uses outside the frame of IEEE 754R
+ // this implementation works for 1 <= x <= q - 1
+
+ // assume *ptr_is_midpoint_lt_even, *ptr_is_midpoint_gt_even,
+ // *ptr_is_inexact_lt_midpoint, and *ptr_is_inexact_gt_midpoint are
+ // initialized to 0 by the caller
+
+ // round a number C with q decimal digits, 58 <= q <= 76
+ // to q - x digits, 1 <= x <= 75
+ // C = C + 1/2 * 10^x where the result C fits in 256 bits
+ // (because the largest value is 9999999999999999999999999999999999999999
+ // 999999999999999999999999999999999999 + 500000000000000000000000000
+ // 000000000000000000000000000000000000000000000000 =
+ // 0x1736ca15d27a56cae15cf0e7b403d1f2bd6ebb0a50dc83ffffffffffffffffff,
+ // which fits in 253 bits)
+ ind = x - 1; // 0 <= ind <= 74
+ if (ind <= 18) { // if 0 <= ind <= 18
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint64[ind];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ }
+ } else if (ind <= 37) { // if 19 <= ind <= 37
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint128[ind - 19].w[0];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ }
+ tmp64 = C.w[1];
+ C.w[1] = C.w[1] + midpoint128[ind - 19].w[1];
+ if (C.w[1] < tmp64) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ } else if (ind <= 57) { // if 38 <= ind <= 57
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint192[ind - 38].w[0];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0ull) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ }
+ tmp64 = C.w[1];
+ C.w[1] = C.w[1] + midpoint192[ind - 38].w[1];
+ if (C.w[1] < tmp64) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ tmp64 = C.w[2];
+ C.w[2] = C.w[2] + midpoint192[ind - 38].w[2];
+ if (C.w[2] < tmp64) {
+ C.w[3]++;
+ }
+ } else { // if 58 <= ind <= 76 (actually 58 <= ind <= 74)
+ tmp64 = C.w[0];
+ C.w[0] = C.w[0] + midpoint256[ind - 58].w[0];
+ if (C.w[0] < tmp64) {
+ C.w[1]++;
+ if (C.w[1] == 0x0ull) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ }
+ tmp64 = C.w[1];
+ C.w[1] = C.w[1] + midpoint256[ind - 58].w[1];
+ if (C.w[1] < tmp64) {
+ C.w[2]++;
+ if (C.w[2] == 0x0) {
+ C.w[3]++;
+ }
+ }
+ tmp64 = C.w[2];
+ C.w[2] = C.w[2] + midpoint256[ind - 58].w[2];
+ if (C.w[2] < tmp64) {
+ C.w[3]++;
+ }
+ C.w[3] = C.w[3] + midpoint256[ind - 58].w[3];
+ }
+ // kx ~= 10^(-x), kx = Kx256[ind] * 2^(-Ex), 0 <= ind <= 74
+ // P512 = (C + 1/2 * 10^x) * kx * 2^Ex = (C + 1/2 * 10^x) * Kx
+ // the approximation kx of 10^(-x) was rounded up to 192 bits
+ __mul_256x256_to_512 (P512, C, Kx256[ind]);
+ // calculate C* = floor (P512) and f*
+ // Cstar = P512 >> Ex
+ // fstar = low Ex bits of P512
+ shift = Ex256m256[ind]; // in [0, 63] but have to consider four cases
+ if (ind <= 18) { // if 0 <= ind <= 18
+ Cstar.w[3] = (P512.w[7] >> shift);
+ Cstar.w[2] = (P512.w[7] << (64 - shift)) | (P512.w[6] >> shift);
+ Cstar.w[1] = (P512.w[6] << (64 - shift)) | (P512.w[5] >> shift);
+ Cstar.w[0] = (P512.w[5] << (64 - shift)) | (P512.w[4] >> shift);
+ fstar.w[7] = 0x0ULL;
+ fstar.w[6] = 0x0ULL;
+ fstar.w[5] = 0x0ULL;
+ fstar.w[4] = P512.w[4] & mask256[ind];
+ fstar.w[3] = P512.w[3];
+ fstar.w[2] = P512.w[2];
+ fstar.w[1] = P512.w[1];
+ fstar.w[0] = P512.w[0];
+ } else if (ind <= 37) { // if 19 <= ind <= 37
+ Cstar.w[3] = 0x0ULL;
+ Cstar.w[2] = P512.w[7] >> shift;
+ Cstar.w[1] = (P512.w[7] << (64 - shift)) | (P512.w[6] >> shift);
+ Cstar.w[0] = (P512.w[6] << (64 - shift)) | (P512.w[5] >> shift);
+ fstar.w[7] = 0x0ULL;
+ fstar.w[6] = 0x0ULL;
+ fstar.w[5] = P512.w[5] & mask256[ind];
+ fstar.w[4] = P512.w[4];
+ fstar.w[3] = P512.w[3];
+ fstar.w[2] = P512.w[2];
+ fstar.w[1] = P512.w[1];
+ fstar.w[0] = P512.w[0];
+ } else if (ind <= 56) { // if 38 <= ind <= 56
+ Cstar.w[3] = 0x0ULL;
+ Cstar.w[2] = 0x0ULL;
+ Cstar.w[1] = P512.w[7] >> shift;
+ Cstar.w[0] = (P512.w[7] << (64 - shift)) | (P512.w[6] >> shift);
+ fstar.w[7] = 0x0ULL;
+ fstar.w[6] = P512.w[6] & mask256[ind];
+ fstar.w[5] = P512.w[5];
+ fstar.w[4] = P512.w[4];
+ fstar.w[3] = P512.w[3];
+ fstar.w[2] = P512.w[2];
+ fstar.w[1] = P512.w[1];
+ fstar.w[0] = P512.w[0];
+ } else if (ind == 57) {
+ Cstar.w[3] = 0x0ULL;
+ Cstar.w[2] = 0x0ULL;
+ Cstar.w[1] = 0x0ULL;
+ Cstar.w[0] = P512.w[7];
+ fstar.w[7] = 0x0ULL;
+ fstar.w[6] = P512.w[6];
+ fstar.w[5] = P512.w[5];
+ fstar.w[4] = P512.w[4];
+ fstar.w[3] = P512.w[3];
+ fstar.w[2] = P512.w[2];
+ fstar.w[1] = P512.w[1];
+ fstar.w[0] = P512.w[0];
+ } else { // if 58 <= ind <= 74
+ Cstar.w[3] = 0x0ULL;
+ Cstar.w[2] = 0x0ULL;
+ Cstar.w[1] = 0x0ULL;
+ Cstar.w[0] = P512.w[7] >> shift;
+ fstar.w[7] = P512.w[7] & mask256[ind];
+ fstar.w[6] = P512.w[6];
+ fstar.w[5] = P512.w[5];
+ fstar.w[4] = P512.w[4];
+ fstar.w[3] = P512.w[3];
+ fstar.w[2] = P512.w[2];
+ fstar.w[1] = P512.w[1];
+ fstar.w[0] = P512.w[0];
+ }
+
+ // the top Ex bits of 10^(-x) are T* = ten2mxtrunc256[ind], e.g. if x=1,
+ // T*=ten2mxtrunc256[0]=
+ // 0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+ // if (0 < f* < 10^(-x)) then the result is a midpoint
+ // if floor(C*) is even then C* = floor(C*) - logical right
+ // shift; C* has q - x decimal digits, correct by Prop. 1)
+ // else if floor(C*) is odd C* = floor(C*)-1 (logical right
+ // shift; C* has q - x decimal digits, correct by Pr. 1)
+ // else
+ // C* = floor(C*) (logical right shift; C has q - x decimal digits,
+ // correct by Property 1)
+ // in the caling function n = C* * 10^(e+x)
+
+ // determine inexactness of the rounding of C*
+ // if (0 < f* - 1/2 < 10^(-x)) then
+ // the result is exact
+ // else // if (f* - 1/2 > T*) then
+ // the result is inexact
+ if (ind <= 18) { // if 0 <= ind <= 18
+ if (fstar.w[4] > half256[ind] || (fstar.w[4] == half256[ind] &&
+ (fstar.w[3] || fstar.w[2]
+ || fstar.w[1] || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[4] - half256[ind];
+ if (tmp64 || fstar.w[3] > ten2mxtrunc256[ind].w[2] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind <= 37) { // if 19 <= ind <= 37
+ if (fstar.w[5] > half256[ind] || (fstar.w[5] == half256[ind] &&
+ (fstar.w[4] || fstar.w[3]
+ || fstar.w[2] || fstar.w[1]
+ || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[5] - half256[ind];
+ if (tmp64 || fstar.w[4] || fstar.w[3] > ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ } else if (ind <= 57) { // if 38 <= ind <= 57
+ if (fstar.w[6] > half256[ind] || (fstar.w[6] == half256[ind] &&
+ (fstar.w[5] || fstar.w[4]
+ || fstar.w[3] || fstar.w[2]
+ || fstar.w[1] || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[6] - half256[ind];
+ if (tmp64 || fstar.w[5] || fstar.w[4] || fstar.w[3] > ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ } else { // if 58 <= ind <= 74
+ if (fstar.w[7] > half256[ind] || (fstar.w[7] == half256[ind] &&
+ (fstar.w[6] || fstar.w[5]
+ || fstar.w[4] || fstar.w[3]
+ || fstar.w[2] || fstar.w[1]
+ || fstar.w[0]))) {
+ // f* > 1/2 and the result may be exact
+ // Calculate f* - 1/2
+ tmp64 = fstar.w[7] - half256[ind];
+ if (tmp64 || fstar.w[6] || fstar.w[5] || fstar.w[4] || fstar.w[3] > ten2mxtrunc256[ind].w[3] || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] > ten2mxtrunc256[ind].w[2]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] > ten2mxtrunc256[ind].w[1]) || (fstar.w[3] == ten2mxtrunc256[ind].w[3] && fstar.w[2] == ten2mxtrunc256[ind].w[2] && fstar.w[1] == ten2mxtrunc256[ind].w[1] && fstar.w[0] > ten2mxtrunc256[ind].w[0])) { // f* - 1/2 > 10^(-x)
+ *ptr_is_inexact_lt_midpoint = 1;
+ } // else the result is exact
+ } else { // the result is inexact; f2* <= 1/2
+ *ptr_is_inexact_gt_midpoint = 1;
+ }
+ }
+ // check for midpoints (could do this before determining inexactness)
+ if (fstar.w[7] == 0 && fstar.w[6] == 0 &&
+ fstar.w[5] == 0 && fstar.w[4] == 0 &&
+ (fstar.w[3] < ten2mxtrunc256[ind].w[3] ||
+ (fstar.w[3] == ten2mxtrunc256[ind].w[3] &&
+ fstar.w[2] < ten2mxtrunc256[ind].w[2]) ||
+ (fstar.w[3] == ten2mxtrunc256[ind].w[3] &&
+ fstar.w[2] == ten2mxtrunc256[ind].w[2] &&
+ fstar.w[1] < ten2mxtrunc256[ind].w[1]) ||
+ (fstar.w[3] == ten2mxtrunc256[ind].w[3] &&
+ fstar.w[2] == ten2mxtrunc256[ind].w[2] &&
+ fstar.w[1] == ten2mxtrunc256[ind].w[1] &&
+ fstar.w[0] <= ten2mxtrunc256[ind].w[0]))) {
+ // the result is a midpoint
+ if (Cstar.w[0] & 0x01) { // Cstar is odd; MP in [EVEN, ODD]
+ // if floor(C*) is odd C = floor(C*) - 1; the result may be 0
+ Cstar.w[0]--; // Cstar is now even
+ if (Cstar.w[0] == 0xffffffffffffffffULL) {
+ Cstar.w[1]--;
+ if (Cstar.w[1] == 0xffffffffffffffffULL) {
+ Cstar.w[2]--;
+ if (Cstar.w[2] == 0xffffffffffffffffULL) {
+ Cstar.w[3]--;
+ }
+ }
+ }
+ *ptr_is_midpoint_gt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ } else { // else MP in [ODD, EVEN]
+ *ptr_is_midpoint_lt_even = 1;
+ *ptr_is_inexact_lt_midpoint = 0;
+ *ptr_is_inexact_gt_midpoint = 0;
+ }
+ }
+ // check for rounding overflow, which occurs if Cstar = 10^(q-x)
+ ind = q - x; // 1 <= ind <= q - 1
+ if (ind <= 19) {
+ if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == 0x0ULL &&
+ Cstar.w[1] == 0x0ULL && Cstar.w[0] == ten2k64[ind]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k64[ind - 1]; // Cstar = 10^(q-x-1)
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind == 20) {
+ // if ind = 20
+ if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == 0x0ULL &&
+ Cstar.w[1] == ten2k128[0].w[1]
+ && Cstar.w[0] == ten2k128[0].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k64[19]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = 0x0ULL;
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind <= 38) { // if 21 <= ind <= 38
+ if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == 0x0ULL &&
+ Cstar.w[1] == ten2k128[ind - 20].w[1] &&
+ Cstar.w[0] == ten2k128[ind - 20].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k128[ind - 21].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k128[ind - 21].w[1];
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind == 39) {
+ if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == ten2k256[0].w[2] &&
+ Cstar.w[1] == ten2k256[0].w[1]
+ && Cstar.w[0] == ten2k256[0].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k128[18].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k128[18].w[1];
+ Cstar.w[2] = 0x0ULL;
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ } else if (ind <= 57) { // if 40 <= ind <= 57
+ if (Cstar.w[3] == 0x0ULL && Cstar.w[2] == ten2k256[ind - 39].w[2] &&
+ Cstar.w[1] == ten2k256[ind - 39].w[1] &&
+ Cstar.w[0] == ten2k256[ind - 39].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k256[ind - 40].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k256[ind - 40].w[1];
+ Cstar.w[2] = ten2k256[ind - 40].w[2];
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ // else if (ind == 58) is not needed becauae we do not have ten2k192[] yet
+ } else { // if 58 <= ind <= 77 (actually 58 <= ind <= 74)
+ if (Cstar.w[3] == ten2k256[ind - 39].w[3] &&
+ Cstar.w[2] == ten2k256[ind - 39].w[2] &&
+ Cstar.w[1] == ten2k256[ind - 39].w[1] &&
+ Cstar.w[0] == ten2k256[ind - 39].w[0]) {
+ // if Cstar = 10^(q-x)
+ Cstar.w[0] = ten2k256[ind - 40].w[0]; // Cstar = 10^(q-x-1)
+ Cstar.w[1] = ten2k256[ind - 40].w[1];
+ Cstar.w[2] = ten2k256[ind - 40].w[2];
+ Cstar.w[3] = ten2k256[ind - 40].w[3];
+ *incr_exp = 1;
+ } else {
+ *incr_exp = 0;
+ }
+ }
+ ptr_Cstar->w[3] = Cstar.w[3];
+ ptr_Cstar->w[2] = Cstar.w[2];
+ ptr_Cstar->w[1] = Cstar.w[1];
+ ptr_Cstar->w[0] = Cstar.w[0];
+
+}
diff --git a/gcc-4.9/libgcc/config/libbid/bid_sqrt_macros.h b/gcc-4.9/libgcc/config/libbid/bid_sqrt_macros.h
new file mode 100644
index 000000000..0d0f8a073
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libbid/bid_sqrt_macros.h
@@ -0,0 +1,331 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _SQRT_MACROS_H_
+#define _SQRT_MACROS_H_
+
+#define FENCE __fence
+
+#if DOUBLE_EXTENDED_ON
+
+extern BINARY80 SQRT80 (BINARY80);
+
+
+__BID_INLINE__ UINT64
+short_sqrt128 (UINT128 A10) {
+ BINARY80 lx, ly, l64;
+ int_float f64;
+
+ // 2^64
+ f64.i = 0x5f800000;
+ l64 = (BINARY80) f64.d;
+ lx = (BINARY80) A10.w[1] * l64 + (BINARY80) A10.w[0];
+ ly = SQRT80 (lx);
+ return (UINT64) ly;
+}
+
+
+__BID_INLINE__ void
+long_sqrt128 (UINT128 * pCS, UINT256 C256) {
+ UINT256 C4;
+ UINT128 CS;
+ UINT64 X;
+ SINT64 SE;
+ BINARY80 l64, lm64, l128, lxL, lx, ly, lS, lSH, lSL, lE, l3, l2,
+ l1, l0, lp, lCl;
+ int_float fx, f64, fm64;
+ int *ple = (int *) &lx;
+
+ // 2^64
+ f64.i = 0x5f800000;
+ l64 = (BINARY80) f64.d;
+
+ l128 = l64 * l64;
+ lx = l3 = (BINARY80) C256.w[3] * l64 * l128;
+ l2 = (BINARY80) C256.w[2] * l128;
+ lx = FENCE (lx + l2);
+ l1 = (BINARY80) C256.w[1] * l64;
+ lx = FENCE (lx + l1);
+ l0 = (BINARY80) C256.w[0];
+ lx = FENCE (lx + l0);
+ // sqrt(C256)
+ lS = SQRT80 (lx);
+
+ // get coefficient
+ // 2^(-64)
+ fm64.i = 0x1f800000;
+ lm64 = (BINARY80) fm64.d;
+ CS.w[1] = (UINT64) (lS * lm64);
+ CS.w[0] = (UINT64) (lS - (BINARY80) CS.w[1] * l64);
+
+ ///////////////////////////////////////
+ // CAUTION!
+ // little endian code only
+ // add solution for big endian
+ //////////////////////////////////////
+ lSH = lS;
+ *((UINT64 *) & lSH) &= 0xffffffff00000000ull;
+
+ // correction for C256 rounding
+ lCl = FENCE (l3 - lx);
+ lCl = FENCE (lCl + l2);
+ lCl = FENCE (lCl + l1);
+ lCl = FENCE (lCl + l0);
+
+ lSL = lS - lSH;
+
+ //////////////////////////////////////////
+ // Watch for compiler re-ordering
+ //
+ /////////////////////////////////////////
+ // C256-S^2
+ lxL = FENCE (lx - lSH * lSH);
+ lp = lSH * lSL;
+ lp += lp;
+ lxL = FENCE (lxL - lp);
+ lSL *= lSL;
+ lxL = FENCE (lxL - lSL);
+ lCl += lxL;
+
+ // correction term
+ lE = lCl / (lS + lS);
+
+ // get low part of coefficient
+ X = CS.w[0];
+ if (lCl >= 0) {
+ SE = (SINT64) (lE);
+ CS.w[0] += SE;
+ if (CS.w[0] < X)
+ CS.w[1]++;
+ } else {
+ SE = (SINT64) (-lE);
+ CS.w[0] -= SE;
+ if (CS.w[0] > X)
+ CS.w[1]--;
+ }
+
+ pCS->w[0] = CS.w[0];
+ pCS->w[1] = CS.w[1];
+}
+
+#else
+
+extern double sqrt (double);
+
+__BID_INLINE__ UINT64
+short_sqrt128 (UINT128 A10) {
+ UINT256 ARS, ARS0, AE0, AE, S;
+
+ UINT64 MY, ES, CY;
+ double lx, l64;
+ int_double f64, ly;
+ int ey, k;
+
+ // 2^64
+ f64.i = 0x43f0000000000000ull;
+ l64 = f64.d;
+ lx = (double) A10.w[1] * l64 + (double) A10.w[0];
+ ly.d = 1.0 / sqrt (lx);
+
+ MY = (ly.i & 0x000fffffffffffffull) | 0x0010000000000000ull;
+ ey = 0x3ff - (ly.i >> 52);
+
+ // A10*RS^2
+ __mul_64x128_to_192 (ARS0, MY, A10);
+ __mul_64x192_to_256 (ARS, MY, ARS0);
+
+ // shr by 2*ey+40, to get a 64-bit value
+ k = (ey << 1) + 104 - 64;
+ if (k >= 128) {
+ if (k > 128)
+ ES = (ARS.w[2] >> (k - 128)) | (ARS.w[3] << (192 - k));
+ else
+ ES = ARS.w[2];
+ } else {
+ if (k >= 64) {
+ ARS.w[0] = ARS.w[1];
+ ARS.w[1] = ARS.w[2];
+ k -= 64;
+ }
+ if (k) {
+ __shr_128 (ARS, ARS, k);
+ }
+ ES = ARS.w[0];
+ }
+
+ ES = ((SINT64) ES) >> 1;
+
+ if (((SINT64) ES) < 0) {
+ ES = -ES;
+
+ // A*RS*eps (scaled by 2^64)
+ __mul_64x192_to_256 (AE0, ES, ARS0);
+
+ AE.w[0] = AE0.w[1];
+ AE.w[1] = AE0.w[2];
+ AE.w[2] = AE0.w[3];
+
+ __add_carry_out (S.w[0], CY, ARS0.w[0], AE.w[0]);
+ __add_carry_in_out (S.w[1], CY, ARS0.w[1], AE.w[1], CY);
+ S.w[2] = ARS0.w[2] + AE.w[2] + CY;
+ } else {
+ // A*RS*eps (scaled by 2^64)
+ __mul_64x192_to_256 (AE0, ES, ARS0);
+
+ AE.w[0] = AE0.w[1];
+ AE.w[1] = AE0.w[2];
+ AE.w[2] = AE0.w[3];
+
+ __sub_borrow_out (S.w[0], CY, ARS0.w[0], AE.w[0]);
+ __sub_borrow_in_out (S.w[1], CY, ARS0.w[1], AE.w[1], CY);
+ S.w[2] = ARS0.w[2] - AE.w[2] - CY;
+ }
+
+ k = ey + 51;
+
+ if (k >= 64) {
+ if (k >= 128) {
+ S.w[0] = S.w[2];
+ S.w[1] = 0;
+ k -= 128;
+ } else {
+ S.w[0] = S.w[1];
+ S.w[1] = S.w[2];
+ }
+ k -= 64;
+ }
+ if (k) {
+ __shr_128 (S, S, k);
+ }
+
+
+ return (UINT64) ((S.w[0] + 1) >> 1);
+
+}
+
+
+
+__BID_INLINE__ void
+long_sqrt128 (UINT128 * pCS, UINT256 C256) {
+ UINT512 ARS0, ARS;
+ UINT256 ARS00, AE, AE2, S;
+ UINT128 ES, ES2, ARS1;
+ UINT64 ES32, CY, MY;
+ double l64, l128, lx, l2, l1, l0;
+ int_double f64, ly;
+ int ey, k, k2;
+
+ // 2^64
+ f64.i = 0x43f0000000000000ull;
+ l64 = f64.d;
+
+ l128 = l64 * l64;
+ lx = (double) C256.w[3] * l64 * l128;
+ l2 = (double) C256.w[2] * l128;
+ lx = FENCE (lx + l2);
+ l1 = (double) C256.w[1] * l64;
+ lx = FENCE (lx + l1);
+ l0 = (double) C256.w[0];
+ lx = FENCE (lx + l0);
+ // sqrt(C256)
+ ly.d = 1.0 / sqrt (lx);
+
+ MY = (ly.i & 0x000fffffffffffffull) | 0x0010000000000000ull;
+ ey = 0x3ff - (ly.i >> 52);
+
+ // A10*RS^2, scaled by 2^(2*ey+104)
+ __mul_64x256_to_320 (ARS0, MY, C256);
+ __mul_64x320_to_384 (ARS, MY, ARS0);
+
+ // shr by k=(2*ey+104)-128
+ // expect k is in the range (192, 256) if result in [10^33, 10^34)
+ // apply an additional signed shift by 1 at the same time (to get eps=eps0/2)
+ k = (ey << 1) + 104 - 128 - 192;
+ k2 = 64 - k;
+ ES.w[0] = (ARS.w[3] >> (k + 1)) | (ARS.w[4] << (k2 - 1));
+ ES.w[1] = (ARS.w[4] >> k) | (ARS.w[5] << k2);
+ ES.w[1] = ((SINT64) ES.w[1]) >> 1;
+
+ // A*RS >> 192 (for error term computation)
+ ARS1.w[0] = ARS0.w[3];
+ ARS1.w[1] = ARS0.w[4];
+
+ // A*RS>>64
+ ARS00.w[0] = ARS0.w[1];
+ ARS00.w[1] = ARS0.w[2];
+ ARS00.w[2] = ARS0.w[3];
+ ARS00.w[3] = ARS0.w[4];
+
+ if (((SINT64) ES.w[1]) < 0) {
+ ES.w[0] = -ES.w[0];
+ ES.w[1] = -ES.w[1];
+ if (ES.w[0])
+ ES.w[1]--;
+
+ // A*RS*eps
+ __mul_128x128_to_256 (AE, ES, ARS1);
+
+ __add_carry_out (S.w[0], CY, ARS00.w[0], AE.w[0]);
+ __add_carry_in_out (S.w[1], CY, ARS00.w[1], AE.w[1], CY);
+ __add_carry_in_out (S.w[2], CY, ARS00.w[2], AE.w[2], CY);
+ S.w[3] = ARS00.w[3] + AE.w[3] + CY;
+ } else {
+ // A*RS*eps
+ __mul_128x128_to_256 (AE, ES, ARS1);
+
+ __sub_borrow_out (S.w[0], CY, ARS00.w[0], AE.w[0]);
+ __sub_borrow_in_out (S.w[1], CY, ARS00.w[1], AE.w[1], CY);
+ __sub_borrow_in_out (S.w[2], CY, ARS00.w[2], AE.w[2], CY);
+ S.w[3] = ARS00.w[3] - AE.w[3] - CY;
+ }
+
+ // 3/2*eps^2, scaled by 2^128
+ ES32 = ES.w[1] + (ES.w[1] >> 1);
+ __mul_64x64_to_128 (ES2, ES32, ES.w[1]);
+ // A*RS*3/2*eps^2
+ __mul_128x128_to_256 (AE2, ES2, ARS1);
+
+ // result, scaled by 2^(ey+52-64)
+ __add_carry_out (S.w[0], CY, S.w[0], AE2.w[0]);
+ __add_carry_in_out (S.w[1], CY, S.w[1], AE2.w[1], CY);
+ __add_carry_in_out (S.w[2], CY, S.w[2], AE2.w[2], CY);
+ S.w[3] = S.w[3] + AE2.w[3] + CY;
+
+ // k in (0, 64)
+ k = ey + 51 - 128;
+ k2 = 64 - k;
+ S.w[0] = (S.w[1] >> k) | (S.w[2] << k2);
+ S.w[1] = (S.w[2] >> k) | (S.w[3] << k2);
+
+ // round to nearest
+ S.w[0]++;
+ if (!S.w[0])
+ S.w[1]++;
+
+ pCS->w[0] = (S.w[1] << 63) | (S.w[0] >> 1);
+ pCS->w[1] = S.w[1] >> 1;
+
+}
+
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/libgcc-glibc.ver b/gcc-4.9/libgcc/config/libgcc-glibc.ver
new file mode 100644
index 000000000..bfbe4baf6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libgcc-glibc.ver
@@ -0,0 +1,55 @@
+# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# In order to work around the very problems that force us to now generally
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+# By now choosing the same version tags for these specific routines, we
+# maintain enough binary compatibility to allow future versions of glibc
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+%exclude {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%inherit GCC_3.0 GLIBC_2.0
+GLIBC_2.0 {
+ # Sampling of DImode arithmetic used by (at least) i386 and m68k.
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+
+ # Exception handling support functions used by most everyone.
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
diff --git a/gcc-4.9/libgcc/config/libgcc-libsystem.ver b/gcc-4.9/libgcc/config/libgcc-libsystem.ver
new file mode 100644
index 000000000..47631749d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/libgcc-libsystem.ver
@@ -0,0 +1 @@
+_darwin10_Unwind_FindEnclosingFunction
diff --git a/gcc-4.9/libgcc/config/lm32/_ashlsi3.S b/gcc-4.9/libgcc/config/lm32/_ashlsi3.S
new file mode 100644
index 000000000..ac2378302
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_ashlsi3.S
@@ -0,0 +1,114 @@
+# _ashlsi3.S for Lattice Mico32
+# Contributed by Jon Beniston <jon@beniston.com> and Richard Henderson.
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+/* Arithmetic left shift. */
+
+ .text
+
+ .global __ashlsi3
+ .type __ashlsi3,@function
+
+ .align 4
+__ashlsi3:
+ /* Only use 5 LSBs, as that's all the h/w shifter uses. */
+ andi r2, r2, 0x1f
+ /* Get address of offset into unrolled shift loop to jump to. */
+#ifdef __PIC__
+ lw r3, (gp+got(__ashlsi3_0))
+#else
+ mvhi r3, hi(__ashlsi3_0)
+ ori r3, r3, lo(__ashlsi3_0)
+#endif
+ add r2, r2, r2
+ add r2, r2, r2
+ sub r3, r3, r2
+ b r3
+
+__ashlsi3_31:
+ add r1, r1, r1
+__ashlsi3_30:
+ add r1, r1, r1
+__ashlsi3_29:
+ add r1, r1, r1
+__ashlsi3_28:
+ add r1, r1, r1
+__ashlsi3_27:
+ add r1, r1, r1
+__ashlsi3_26:
+ add r1, r1, r1
+__ashlsi3_25:
+ add r1, r1, r1
+__ashlsi3_24:
+ add r1, r1, r1
+__ashlsi3_23:
+ add r1, r1, r1
+__ashlsi3_22:
+ add r1, r1, r1
+__ashlsi3_21:
+ add r1, r1, r1
+__ashlsi3_20:
+ add r1, r1, r1
+__ashlsi3_19:
+ add r1, r1, r1
+__ashlsi3_18:
+ add r1, r1, r1
+__ashlsi3_17:
+ add r1, r1, r1
+__ashlsi3_16:
+ add r1, r1, r1
+__ashlsi3_15:
+ add r1, r1, r1
+__ashlsi3_14:
+ add r1, r1, r1
+__ashlsi3_13:
+ add r1, r1, r1
+__ashlsi3_12:
+ add r1, r1, r1
+__ashlsi3_11:
+ add r1, r1, r1
+__ashlsi3_10:
+ add r1, r1, r1
+__ashlsi3_9:
+ add r1, r1, r1
+__ashlsi3_8:
+ add r1, r1, r1
+__ashlsi3_7:
+ add r1, r1, r1
+__ashlsi3_6:
+ add r1, r1, r1
+__ashlsi3_5:
+ add r1, r1, r1
+__ashlsi3_4:
+ add r1, r1, r1
+__ashlsi3_3:
+ add r1, r1, r1
+__ashlsi3_2:
+ add r1, r1, r1
+__ashlsi3_1:
+ add r1, r1, r1
+__ashlsi3_0:
+ ret
+
+ \ No newline at end of file
diff --git a/gcc-4.9/libgcc/config/lm32/_ashrsi3.S b/gcc-4.9/libgcc/config/lm32/_ashrsi3.S
new file mode 100644
index 000000000..6e86c50cc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_ashrsi3.S
@@ -0,0 +1,110 @@
+# _ashrsi3.S for Lattice Mico32
+# Contributed by Jon Beniston <jon@beniston.com> and Richard Henderson.
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+/* Arithmetic right shift. */
+
+ .global __ashrsi3
+ .type __ashrsi3,@function
+
+__ashrsi3:
+ /* Only use 5 LSBs, as that's all the h/w shifter uses. */
+ andi r2, r2, 0x1f
+ /* Get address of offset into unrolled shift loop to jump to. */
+#ifdef __PIC__
+ lw r3, (gp+got(__ashrsi3_0))
+#else
+ mvhi r3, hi(__ashrsi3_0)
+ ori r3, r3, lo(__ashrsi3_0)
+#endif
+ add r2, r2, r2
+ add r2, r2, r2
+ sub r3, r3, r2
+ b r3
+
+__ashrsi3_31:
+ sri r1, r1, 1
+__ashrsi3_30:
+ sri r1, r1, 1
+__ashrsi3_29:
+ sri r1, r1, 1
+__ashrsi3_28:
+ sri r1, r1, 1
+__ashrsi3_27:
+ sri r1, r1, 1
+__ashrsi3_26:
+ sri r1, r1, 1
+__ashrsi3_25:
+ sri r1, r1, 1
+__ashrsi3_24:
+ sri r1, r1, 1
+__ashrsi3_23:
+ sri r1, r1, 1
+__ashrsi3_22:
+ sri r1, r1, 1
+__ashrsi3_21:
+ sri r1, r1, 1
+__ashrsi3_20:
+ sri r1, r1, 1
+__ashrsi3_19:
+ sri r1, r1, 1
+__ashrsi3_18:
+ sri r1, r1, 1
+__ashrsi3_17:
+ sri r1, r1, 1
+__ashrsi3_16:
+ sri r1, r1, 1
+__ashrsi3_15:
+ sri r1, r1, 1
+__ashrsi3_14:
+ sri r1, r1, 1
+__ashrsi3_13:
+ sri r1, r1, 1
+__ashrsi3_12:
+ sri r1, r1, 1
+__ashrsi3_11:
+ sri r1, r1, 1
+__ashrsi3_10:
+ sri r1, r1, 1
+__ashrsi3_9:
+ sri r1, r1, 1
+__ashrsi3_8:
+ sri r1, r1, 1
+__ashrsi3_7:
+ sri r1, r1, 1
+__ashrsi3_6:
+ sri r1, r1, 1
+__ashrsi3_5:
+ sri r1, r1, 1
+__ashrsi3_4:
+ sri r1, r1, 1
+__ashrsi3_3:
+ sri r1, r1, 1
+__ashrsi3_2:
+ sri r1, r1, 1
+__ashrsi3_1:
+ sri r1, r1, 1
+__ashrsi3_0:
+ ret
+ \ No newline at end of file
diff --git a/gcc-4.9/libgcc/config/lm32/_divsi3.c b/gcc-4.9/libgcc/config/lm32/_divsi3.c
new file mode 100644
index 000000000..3d934ca14
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_divsi3.c
@@ -0,0 +1,99 @@
+/* _divsi3 for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgcc_lm32.h"
+
+/* Signed integer division. */
+
+static const UQItype __divsi3_table[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 6, 3, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 8, 4, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 4, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 10, 5, 3, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+ 0, 11, 5, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 12, 6, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+ 0, 13, 6, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0,
+ 0, 14, 7, 4, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0,
+ 0, 15, 7, 5, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+};
+
+SItype
+__divsi3 (SItype a, SItype b)
+{
+ int neg = 0;
+ SItype res;
+ int cfg;
+
+ if (b == 0)
+ {
+ /* Raise divide by zero exception. */
+ int eba, sr;
+ /* Save interrupt enable. */
+ __asm__ __volatile__ ("rcsr %0, IE":"=r" (sr));
+ sr = (sr & 1) << 1;
+ __asm__ __volatile__ ("wcsr IE, %0"::"r" (sr));
+ /* Branch to exception handler. */
+ __asm__ __volatile__ ("rcsr %0, EBA":"=r" (eba));
+ eba += 32 * 5;
+ __asm__ __volatile__ ("mv ea, ra");
+ __asm__ __volatile__ ("b %0"::"r" (eba));
+ __builtin_unreachable ();
+ }
+
+ if (((USItype) (a | b)) < 16)
+ res = __divsi3_table[(a << 4) + b];
+ else
+ {
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ __asm__ ("rcsr %0, CFG":"=r" (cfg));
+ if (cfg & 2)
+ __asm__ ("divu %0, %1, %2": "=r" (res):"r" (a), "r" (b));
+ else
+ res = __udivmodsi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+ }
+
+ return res;
+}
diff --git a/gcc-4.9/libgcc/config/lm32/_lshrsi3.S b/gcc-4.9/libgcc/config/lm32/_lshrsi3.S
new file mode 100644
index 000000000..dc262d87b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_lshrsi3.S
@@ -0,0 +1,109 @@
+# _lshrsi3.S for Lattice Mico32
+# Contributed by Jon Beniston <jon@beniston.com> and Richard Henderson.
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+/* Logical right shift. */
+
+ .global __lshrsi3
+ .type __lshrsi3,@function
+
+__lshrsi3:
+ /* Only use 5 LSBs, as that's all the h/w shifter uses. */
+ andi r2, r2, 0x1f
+ /* Get address of offset into unrolled shift loop to jump to. */
+#ifdef __PIC__
+ lw r3, (gp+got(__lshrsi3_0))
+#else
+ mvhi r3, hi(__lshrsi3_0)
+ ori r3, r3, lo(__lshrsi3_0)
+#endif
+ add r2, r2, r2
+ add r2, r2, r2
+ sub r3, r3, r2
+ b r3
+
+__lshrsi3_31:
+ srui r1, r1, 1
+__lshrsi3_30:
+ srui r1, r1, 1
+__lshrsi3_29:
+ srui r1, r1, 1
+__lshrsi3_28:
+ srui r1, r1, 1
+__lshrsi3_27:
+ srui r1, r1, 1
+__lshrsi3_26:
+ srui r1, r1, 1
+__lshrsi3_25:
+ srui r1, r1, 1
+__lshrsi3_24:
+ srui r1, r1, 1
+__lshrsi3_23:
+ srui r1, r1, 1
+__lshrsi3_22:
+ srui r1, r1, 1
+__lshrsi3_21:
+ srui r1, r1, 1
+__lshrsi3_20:
+ srui r1, r1, 1
+__lshrsi3_19:
+ srui r1, r1, 1
+__lshrsi3_18:
+ srui r1, r1, 1
+__lshrsi3_17:
+ srui r1, r1, 1
+__lshrsi3_16:
+ srui r1, r1, 1
+__lshrsi3_15:
+ srui r1, r1, 1
+__lshrsi3_14:
+ srui r1, r1, 1
+__lshrsi3_13:
+ srui r1, r1, 1
+__lshrsi3_12:
+ srui r1, r1, 1
+__lshrsi3_11:
+ srui r1, r1, 1
+__lshrsi3_10:
+ srui r1, r1, 1
+__lshrsi3_9:
+ srui r1, r1, 1
+__lshrsi3_8:
+ srui r1, r1, 1
+__lshrsi3_7:
+ srui r1, r1, 1
+__lshrsi3_6:
+ srui r1, r1, 1
+__lshrsi3_5:
+ srui r1, r1, 1
+__lshrsi3_4:
+ srui r1, r1, 1
+__lshrsi3_3:
+ srui r1, r1, 1
+__lshrsi3_2:
+ srui r1, r1, 1
+__lshrsi3_1:
+ srui r1, r1, 1
+__lshrsi3_0:
+ ret
diff --git a/gcc-4.9/libgcc/config/lm32/_modsi3.c b/gcc-4.9/libgcc/config/lm32/_modsi3.c
new file mode 100644
index 000000000..5e23f2b2b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_modsi3.c
@@ -0,0 +1,71 @@
+/* _modsi3 for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgcc_lm32.h"
+
+/* Signed integer modulus. */
+
+SItype
+__modsi3 (SItype a, SItype b)
+{
+ int neg = 0;
+ SItype res;
+ int cfg;
+
+ if (b == 0)
+ {
+ /* Raise divide by zero exception. */
+ int eba, sr;
+ /* Save interrupt enable. */
+ __asm__ __volatile__ ("rcsr %0, IE":"=r" (sr));
+ sr = (sr & 1) << 1;
+ __asm__ __volatile__ ("wcsr IE, %0"::"r" (sr));
+ /* Branch to exception handler. */
+ __asm__ __volatile__ ("rcsr %0, EBA":"=r" (eba));
+ eba += 32 * 5;
+ __asm__ __volatile__ ("mv ea, ra");
+ __asm__ __volatile__ ("b %0"::"r" (eba));
+ __builtin_unreachable ();
+ }
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+__asm__ ("rcsr %0, CFG":"=r" (cfg));
+ if (cfg & 2)
+ __asm__ ("modu %0, %1, %2": "=r" (res):"r" (a), "r" (b));
+ else
+ res = __udivmodsi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
diff --git a/gcc-4.9/libgcc/config/lm32/_mulsi3.c b/gcc-4.9/libgcc/config/lm32/_mulsi3.c
new file mode 100644
index 000000000..9770820f3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_mulsi3.c
@@ -0,0 +1,48 @@
+/* _mulsi3 for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgcc_lm32.h"
+
+/* Integer multiplication. */
+
+USItype
+__mulsi3 (USItype a, USItype b)
+{
+ USItype result;
+
+ result = 0;
+
+ if (a == 0)
+ return 0;
+
+ while (b != 0)
+ {
+ if (b & 1)
+ result += a;
+ a <<= 1;
+ b >>= 1;
+ }
+
+ return result;
+}
diff --git a/gcc-4.9/libgcc/config/lm32/_udivmodsi4.c b/gcc-4.9/libgcc/config/lm32/_udivmodsi4.c
new file mode 100644
index 000000000..f0a844c08
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_udivmodsi4.c
@@ -0,0 +1,53 @@
+/* _udivmodsi4 for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgcc_lm32.h"
+
+/* Unsigned integer division/modulus. */
+
+USItype
+__udivmodsi4 (USItype num, USItype den, int modwanted)
+{
+ USItype bit = 1;
+ USItype res = 0;
+
+ while (den < num && bit && !(den & (1L << 31)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
diff --git a/gcc-4.9/libgcc/config/lm32/_udivsi3.c b/gcc-4.9/libgcc/config/lm32/_udivsi3.c
new file mode 100644
index 000000000..b416d8f84
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_udivsi3.c
@@ -0,0 +1,49 @@
+/* _udivsi3 for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgcc_lm32.h"
+
+/* Unsigned integer division. */
+
+USItype
+__udivsi3 (USItype a, USItype b)
+{
+ if (b == 0)
+ {
+ /* Raise divide by zero exception. */
+ int eba, sr;
+ /* Save interrupt enable. */
+ __asm__ __volatile__ ("rcsr %0, IE":"=r" (sr));
+ sr = (sr & 1) << 1;
+ __asm__ __volatile__ ("wcsr IE, %0"::"r" (sr));
+ /* Branch to exception handler. */
+ __asm__ __volatile__ ("rcsr %0, EBA":"=r" (eba));
+ eba += 32 * 5;
+ __asm__ __volatile__ ("mv ea, ra");
+ __asm__ __volatile__ ("b %0"::"r" (eba));
+ __builtin_unreachable ();
+ }
+
+ return __udivmodsi4 (a, b, 0);
+}
diff --git a/gcc-4.9/libgcc/config/lm32/_umodsi3.c b/gcc-4.9/libgcc/config/lm32/_umodsi3.c
new file mode 100644
index 000000000..01a42359c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/_umodsi3.c
@@ -0,0 +1,49 @@
+/* _umodsi3 for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "libgcc_lm32.h"
+
+/* Unsigned modulus. */
+
+USItype
+__umodsi3 (USItype a, USItype b)
+{
+ if (b == 0)
+ {
+ /* Raise divide by zero exception. */
+ int eba, sr;
+ /* Save interrupt enable. */
+ __asm__ __volatile__ ("rcsr %0, IE":"=r" (sr));
+ sr = (sr & 1) << 1;
+ __asm__ __volatile__ ("wcsr IE, %0"::"r" (sr));
+ /* Branch to exception handler. */
+ __asm__ __volatile__ ("rcsr %0, EBA":"=r" (eba));
+ eba += 32 * 5;
+ __asm__ __volatile__ ("mv ea, ra");
+ __asm__ __volatile__ ("b %0"::"r" (eba));
+ __builtin_unreachable ();
+ }
+
+ return __udivmodsi4 (a, b, 1);
+}
diff --git a/gcc-4.9/libgcc/config/lm32/crti.S b/gcc-4.9/libgcc/config/lm32/crti.S
new file mode 100644
index 000000000..4375378c8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/crti.S
@@ -0,0 +1,40 @@
+# crti.S for Lattice Mico32
+# Contributed by Jon Beniston <jon@beniston.com>
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+ .section .init
+ .global _init
+ .type _init,@function
+ .align 4
+_init:
+ addi sp, sp, -4
+ sw (sp+4), ra
+
+ .section .fini
+ .global _fini
+ .type _fini,@function
+ .align 4
+_fini:
+ addi sp, sp, -4
+ sw (sp+4), ra
diff --git a/gcc-4.9/libgcc/config/lm32/crtn.S b/gcc-4.9/libgcc/config/lm32/crtn.S
new file mode 100644
index 000000000..e31dc8a9c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/crtn.S
@@ -0,0 +1,37 @@
+# crtn.S for Lattice Mico32
+# Contributed by Jon Beniston <jon@beniston.com>
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+ .section .init
+
+ lw ra, (sp+4)
+ addi sp, sp, 4
+ ret
+
+ .section .fini
+
+ lw ra, (sp+4)
+ addi sp, sp, 4
+ ret
+
diff --git a/gcc-4.9/libgcc/config/lm32/libgcc_lm32.h b/gcc-4.9/libgcc/config/lm32/libgcc_lm32.h
new file mode 100644
index 000000000..2fc5e1d8e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/libgcc_lm32.h
@@ -0,0 +1,43 @@
+/* Integer arithmetic support for Lattice Mico32.
+ Contributed by Jon Beniston <jon@beniston.com>
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef LIBGCC_LM32_H
+#define LIBGCC_LM32_H
+
+/* Types. */
+
+typedef unsigned char UQItype __attribute__ ((mode (QI)));
+typedef long SItype __attribute__ ((mode (SI)));
+typedef unsigned long USItype __attribute__ ((mode (SI)));
+
+/* Prototypes. */
+
+USItype __mulsi3 (USItype a, USItype b);
+USItype __udivmodsi4 (USItype num, USItype den, int modwanted);
+SItype __divsi3 (SItype a, SItype b);
+SItype __modsi3 (SItype a, SItype b);
+USItype __udivsi3 (USItype a, USItype b);
+USItype __umodsi3 (USItype a, USItype b);
+
+#endif /* LIBGCC_LM32_H */
diff --git a/gcc-4.9/libgcc/config/lm32/sfp-machine.h b/gcc-4.9/libgcc/config/lm32/sfp-machine.h
new file mode 100644
index 000000000..f3f2e9adb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/sfp-machine.h
@@ -0,0 +1,55 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#define __BYTE_ORDER __BIG_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/lm32/t-elf b/gcc-4.9/libgcc/config/lm32/t-elf
new file mode 100644
index 000000000..f96c0988b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/t-elf
@@ -0,0 +1,2 @@
+CRTSTUFF_T_CFLAGS = -G 0 -msign-extend-enabled
+HOST_LIBGCC2_CFLAGS += -G 0 -msign-extend-enabled
diff --git a/gcc-4.9/libgcc/config/lm32/t-lm32 b/gcc-4.9/libgcc/config/lm32/t-lm32
new file mode 100644
index 000000000..725e09a79
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/t-lm32
@@ -0,0 +1,10 @@
+LIB2ADD += \
+ $(srcdir)/config/lm32/_ashlsi3.S \
+ $(srcdir)/config/lm32/_ashrsi3.S \
+ $(srcdir)/config/lm32/_lshrsi3.S \
+ $(srcdir)/config/lm32/_mulsi3.c \
+ $(srcdir)/config/lm32/_udivmodsi4.c \
+ $(srcdir)/config/lm32/_divsi3.c \
+ $(srcdir)/config/lm32/_modsi3.c \
+ $(srcdir)/config/lm32/_udivsi3.c \
+ $(srcdir)/config/lm32/_umodsi3.c
diff --git a/gcc-4.9/libgcc/config/lm32/t-uclinux b/gcc-4.9/libgcc/config/lm32/t-uclinux
new file mode 100644
index 000000000..764243c8f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/lm32/t-uclinux
@@ -0,0 +1,2 @@
+CRTSTUFF_T_CFLAGS = $(PICFLAG) -msign-extend-enabled
+HOST_LIBGCC2_CFLAGS += -msign-extend-enabled
diff --git a/gcc-4.9/libgcc/config/m32c/lib1funcs.S b/gcc-4.9/libgcc/config/m32c/lib1funcs.S
new file mode 100644
index 000000000..821d37314
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32c/lib1funcs.S
@@ -0,0 +1,230 @@
+/* libgcc routines for R8C/M16C/M32C
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
+#define A16
+#define A(n,w) n
+#define W w
+#else
+#define A24
+#define A(n,w) w
+#define W l
+#endif
+
+
+#ifdef L__m32c_memregs
+
+/* Warning: these memory locations are used as a register bank. They
+ *must* end up consecutive in any final executable, so you may *not*
+ use the otherwise obvious ".comm" directive to allocate space for
+ them. */
+
+ .bss
+ .global mem0
+mem0: .space 1
+ .global mem1
+mem1: .space 1
+ .global mem2
+mem2: .space 1
+ .global mem3
+mem3: .space 1
+ .global mem4
+mem4: .space 1
+ .global mem5
+mem5: .space 1
+ .global mem6
+mem6: .space 1
+ .global mem7
+mem7: .space 1
+ .global mem8
+mem8: .space 1
+ .global mem9
+mem9: .space 1
+ .global mem10
+mem10: .space 1
+ .global mem11
+mem11: .space 1
+ .global mem12
+mem12: .space 1
+ .global mem13
+mem13: .space 1
+ .global mem14
+mem14: .space 1
+ .global mem15
+mem15: .space 1
+
+#endif
+
+#ifdef L__m32c_eh_return
+ .text
+ .global __m32c_eh_return
+__m32c_eh_return:
+
+ /* At this point, r0 has the stack adjustment, r1r3 has the
+ address to return to. The stack looks like this:
+
+ old_ra
+ old_fp
+ <- unwound sp
+ ...
+ fb
+ through
+ r0
+ <- sp
+
+ What we need to do is restore all the registers, update the
+ stack, and return to the right place.
+ */
+
+ stc sp,a0
+
+ add.W A(#16,#24),a0
+ /* a0 points to the current stack, just above the register
+ save areas */
+
+ mov.w a0,a1
+ exts.w r0
+ sub.W A(r0,r2r0),a1
+ sub.W A(#3,#4),a1
+ /* a1 points to the new stack. */
+
+ /* This is for the "rts" below. */
+ mov.w r1,[a1]
+#ifdef A16
+ mov.w r2,r1
+ mov.b r1l,2[a1]
+#else
+ mov.w r2,2[a1]
+#endif
+
+ /* This is for the "popc sp" below. */
+ mov.W a1,[a0]
+
+ popm r0,r1,r2,r3,a0,a1,sb,fb
+ popc sp
+ rts
+#endif
+
+/* SImode arguments for SI foo(SI,SI) functions. */
+#ifdef A16
+#define SAL 5[fb]
+#define SAH 7[fb]
+#define SBL 9[fb]
+#define SBH 11[fb]
+#else
+#define SAL 8[fb]
+#define SAH 10[fb]
+#define SBL 12[fb]
+#define SBH 14[fb]
+#endif
+
+#ifdef L__m32c_mulsi3
+ .text
+ .global ___mulsi3
+___mulsi3:
+ enter #0
+ push.w r2
+ mov.w SAL,r0
+ mulu.w SBL,r0 /* writes to r2r0 */
+ mov.w r0,mem0
+ mov.w r2,mem2
+ mov.w SAL,r0
+ mulu.w SBH,r0 /* writes to r2r0 */
+ add.w r0,mem2
+ mov.w SAH,r0
+ mulu.w SBL,r0 /* writes to r2r0 */
+ add.w r0,mem2
+ pop.w r2
+ exitd
+#endif
+
+#ifdef L__m32c_cmpsi2
+ .text
+ .global ___cmpsi2
+___cmpsi2:
+ enter #0
+ cmp.w SBH,SAH
+ jgt cmpsi_gt
+ jlt cmpsi_lt
+ cmp.w SBL,SAL
+ jgt cmpsi_gt
+ jlt cmpsi_lt
+ mov.w #1,r0
+ exitd
+cmpsi_gt:
+ mov.w #2,r0
+ exitd
+cmpsi_lt:
+ mov.w #0,r0
+ exitd
+#endif
+
+#ifdef L__m32c_ucmpsi2
+ .text
+ .global ___ucmpsi2
+___ucmpsi2:
+ enter #0
+ cmp.w SBH,SAH
+ jgtu cmpsi_gt
+ jltu cmpsi_lt
+ cmp.w SBL,SAL
+ jgtu cmpsi_gt
+ jltu cmpsi_lt
+ mov.w #1,r0
+ exitd
+cmpsi_gt:
+ mov.w #2,r0
+ exitd
+cmpsi_lt:
+ mov.w #0,r0
+ exitd
+#endif
+
+#ifdef L__m32c_jsri16
+ .text
+#ifdef A16
+ .global m32c_jsri16
+m32c_jsri16:
+ add.w #-1, sp
+
+ /* Read the address (16 bits) and return address (24 bits) off
+ the stack. */
+ mov.w 4[sp], r0
+ mov.w 1[sp], r3
+ mov.b 3[sp], a0 /* This zero-extends, so the high byte has
+ zero in it. */
+
+ /* Write the return address, then new address, to the stack. */
+ mov.w a0, 1[sp] /* Just to get the zero in 2[sp]. */
+ mov.w r0, 0[sp]
+ mov.w r3, 3[sp]
+ mov.b a0, 5[sp]
+
+ /* This "returns" to the target address, leaving the pending
+ return address on the stack. */
+ rts
+#endif
+
+#endif
diff --git a/gcc-4.9/libgcc/config/m32c/lib2funcs.c b/gcc-4.9/libgcc/config/m32c/lib2funcs.c
new file mode 100644
index 000000000..0bc6c194b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32c/lib2funcs.c
@@ -0,0 +1,147 @@
+/* libgcc routines for R8C/M16C/M32C
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+uint32_type udivmodsi4 (uint32_type, uint32_type, word_type);
+sint32_type __divsi3 (sint32_type, sint32_type);
+sint32_type __modsi3 (sint32_type, sint32_type);
+
+uint32_type
+udivmodsi4 (uint32_type num, uint32_type den, word_type modwanted)
+{
+ uint32_type bit = 1;
+ uint32_type res = 0;
+
+ while (den < num && bit && !(den & (1L << 31)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
+
+sint32_type
+__divsi3 (sint32_type a, sint32_type b)
+{
+ word_type neg = 0;
+ sint32_type res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = udivmodsi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+sint32_type
+__modsi3 (sint32_type a, sint32_type b)
+{
+ word_type neg = 0;
+ sint32_type res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = udivmodsi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+/* See the comment by the definition of LIBGCC2_UNITS_PER_WORD in
+ m32c.h for why we are creating extra versions of some of the
+ functions defined in libgcc2.c. */
+
+#define LIBGCC2_UNITS_PER_WORD 2
+
+#define L_clzsi2
+#define L_ctzsi2
+#define L_ffssi2
+#define L_paritysi2
+#define L_popcountsi2
+
+#include "libgcc2.c"
+
+uint32_type
+__udivsi3 (uint32_type a, uint32_type b)
+{
+ return udivmodsi4 (a, b, 0);
+}
+
+uint32_type
+__umoddi3 (uint32_type a, uint32_type b)
+{
+ return udivmodsi4 (a, b, 1);
+}
+
+/* Returns the number of leading redundant sign bits in X.
+ I.e. the number of bits following the most significant bit which are
+ identical to it. There are no special cases for 0 or other values. */
+
+int
+__clrsbhi2 (word_type x)
+{
+ if (x < 0)
+ x = ~x;
+ if (x == 0)
+ return 15;
+ return __builtin_clz (x) - 1;
+}
diff --git a/gcc-4.9/libgcc/config/m32c/t-m32c b/gcc-4.9/libgcc/config/m32c/t-m32c
new file mode 100644
index 000000000..dac99ec65
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32c/t-m32c
@@ -0,0 +1,13 @@
+LIB1ASMSRC = m32c/lib1funcs.S
+
+LIB1ASMFUNCS = \
+ __m32c_memregs \
+ __m32c_eh_return \
+ __m32c_mulsi3 \
+ __m32c_cmpsi2 \
+ __m32c_ucmpsi2 \
+ __m32c_jsri16
+
+LIB2ADD = $(srcdir)/config/m32c/lib2funcs.c \
+ $(srcdir)/config/m32c/trapv.c
+
diff --git a/gcc-4.9/libgcc/config/m32c/trapv.c b/gcc-4.9/libgcc/config/m32c/trapv.c
new file mode 100644
index 000000000..14cddc135
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32c/trapv.c
@@ -0,0 +1,42 @@
+/* 16-bit trapping arithmetic routines for R8C/M16C/M32C
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* See the comment by the definition of LIBGCC2_UNITS_PER_WORD in
+ m32c.h for why we are creating extra versions of some of the
+ functions defined in libgcc2.c.
+
+ Note - this file is separate from lib2funcs.c so that the following
+ functions will appear in the their object file. This is necessary
+ because they call abort() which is defined in the C library whereas
+ the functions in lib2funcs.c are completely self sufficient. */
+
+#define LIBGCC2_UNITS_PER_WORD 2
+
+#define L_mulvsi3
+#define L_negvsi2
+#define L_addvsi3
+#define L_subvsi3
+
+#include "libgcc2.c"
diff --git a/gcc-4.9/libgcc/config/m32r/initfini.c b/gcc-4.9/libgcc/config/m32r/initfini.c
new file mode 100644
index 000000000..80dd063ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32r/initfini.c
@@ -0,0 +1,168 @@
+/* .init/.fini section handling + C++ global constructor/destructor handling.
+ This file is based on crtstuff.c, sol2-crti.S, sol2-crtn.S.
+
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Declare a pointer to void function type. */
+typedef void (*func_ptr) (void);
+
+#ifdef CRT_INIT
+
+/* NOTE: In order to be able to support SVR4 shared libraries, we arrange
+ to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
+ __DTOR_END__ } per root executable and also one set of these symbols
+ per shared library. So in any given whole process image, we may have
+ multiple definitions of each of these symbols. In order to prevent
+ these definitions from conflicting with one another, and in order to
+ ensure that the proper lists are used for the initialization/finalization
+ of each individual shared library (respectively), we give these symbols
+ only internal (i.e. `static') linkage, and we also make it a point to
+ refer to only the __CTOR_END__ symbol in crtfini.o and the __DTOR_LIST__
+ symbol in crtinit.o, where they are defined. */
+
+static func_ptr __CTOR_LIST__[1]
+ __attribute__ ((used, section (".ctors")))
+ = { (func_ptr) (-1) };
+
+static func_ptr __DTOR_LIST__[1]
+ __attribute__ ((used, section (".dtors")))
+ = { (func_ptr) (-1) };
+
+/* Run all the global destructors on exit from the program. */
+
+/* Some systems place the number of pointers in the first word of the
+ table. On SVR4 however, that word is -1. In all cases, the table is
+ null-terminated. On SVR4, we start from the beginning of the list and
+ invoke each per-compilation-unit destructor routine in order
+ until we find that null.
+
+ Note that this function MUST be static. There will be one of these
+ functions in each root executable and one in each shared library, but
+ although they all have the same code, each one is unique in that it
+ refers to one particular associated `__DTOR_LIST__' which belongs to the
+ same particular root executable or shared library file. */
+
+static void __do_global_dtors (void)
+asm ("__do_global_dtors") __attribute__ ((used, section (".text")));
+
+static void
+__do_global_dtors (void)
+{
+ func_ptr *p;
+
+ for (p = __DTOR_LIST__ + 1; *p; p++)
+ (*p) ();
+}
+
+/* .init section start.
+ This must appear at the start of the .init section. */
+
+asm ("\n\
+ .section .init,\"ax\",@progbits\n\
+ .balign 4\n\
+ .global __init\n\
+__init:\n\
+ push fp\n\
+ push lr\n\
+ mv fp,sp\n\
+ seth r0, #shigh(__fini)\n\
+ add3 r0, r0, #low(__fini)\n\
+ bl atexit\n\
+ .fillinsn\n\
+");
+
+/* .fini section start.
+ This must appear at the start of the .init section. */
+
+asm ("\n\
+ .section .fini,\"ax\",@progbits\n\
+ .balign 4\n\
+ .global __fini\n\
+__fini:\n\
+ push fp\n\
+ push lr\n\
+ mv fp,sp\n\
+ bl __do_global_dtors\n\
+ .fillinsn\n\
+");
+
+#endif /* CRT_INIT */
+
+#ifdef CRT_FINI
+
+/* Put a word containing zero at the end of each of our two lists of function
+ addresses. Note that the words defined here go into the .ctors and .dtors
+ sections of the crtend.o file, and since that file is always linked in
+ last, these words naturally end up at the very ends of the two lists
+ contained in these two sections. */
+
+static func_ptr __CTOR_END__[1]
+ __attribute__ ((used, section (".ctors")))
+ = { (func_ptr) 0 };
+
+static func_ptr __DTOR_END__[1]
+ __attribute__ ((used, section (".dtors")))
+ = { (func_ptr) 0 };
+
+/* Run all global constructors for the program.
+ Note that they are run in reverse order. */
+
+static void __do_global_ctors (void)
+asm ("__do_global_ctors") __attribute__ ((used, section (".text")));
+
+static void
+__do_global_ctors (void)
+{
+ func_ptr *p;
+
+ for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
+ (*p) ();
+}
+
+/* .init section end.
+ This must live at the end of the .init section. */
+
+asm ("\n\
+ .section .init,\"ax\",@progbits\n\
+ bl __do_global_ctors\n\
+ mv sp,fp\n\
+ pop lr\n\
+ pop fp\n\
+ jmp lr\n\
+ .fillinsn\n\
+");
+
+/* .fini section end.
+ This must live at the end of the .fini section. */
+
+asm ("\n\
+ .section .fini,\"ax\",@progbits\n\
+ mv sp,fp\n\
+ pop lr\n\
+ pop fp\n\
+ jmp lr\n\
+ .fillinsn\n\
+");
+
+#endif /* CRT_FINI */
diff --git a/gcc-4.9/libgcc/config/m32r/libgcc-glibc.ver b/gcc-4.9/libgcc/config/m32r/libgcc-glibc.ver
new file mode 100644
index 000000000..a23407c08
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32r/libgcc-glibc.ver
@@ -0,0 +1,48 @@
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# In order to work around the very problems that force us to now generally
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+# By now choosing the same version tags for these specific routines, we
+# maintain enough binary compatibility to allow future versions of glibc
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+# Note that we cannot use the default libgcc-glibc.ver file on sh,
+# because GLIBC_2.0 does not exist on this architecture, as the first
+# ever glibc release on the platform was GLIBC_2.3.
+
+%exclude {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%inherit GCC_3.0 GLIBC_2.3
+GLIBC_2.3 {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
diff --git a/gcc-4.9/libgcc/config/m32r/t-linux b/gcc-4.9/libgcc/config/m32r/t-linux
new file mode 100644
index 000000000..5223b731f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32r/t-linux
@@ -0,0 +1,5 @@
+# Turn off the SDA while compiling libgcc2. There are no headers for it
+# and we want maximal upward compatibility here.
+HOST_LIBGCC2_CFLAGS += -G 0
+
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/m32r/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/m32r/t-m32r b/gcc-4.9/libgcc/config/m32r/t-m32r
new file mode 100644
index 000000000..861044b15
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m32r/t-m32r
@@ -0,0 +1,23 @@
+# Turn off the SDA while compiling libgcc2. There are no headers for it
+# and we want maximal upward compatibility here.
+HOST_LIBGCC2_CFLAGS += -G 0
+
+# We need to use -fpic when we are using gcc to compile the routines in
+# initfini.c. This is only really needed when we are going to use gcc/g++
+# to produce a shared library, but since we don't know ahead of time when
+# we will be doing that, we just always use -fpic when compiling the
+# routines in initfini.c.
+# -fpic currently isn't supported for the m32r.
+# FIXME: No longer true. Empty CRTSTUFF_T_CFLAGS is the default.
+CRTSTUFF_T_CFLAGS =
+
+# .init/.fini section routines
+crtinit.o: $(srcdir)/config/m32r/initfini.c
+ $(crt_compile) $(CRTSTUFF_T_CFLAGS) -DCRT_INIT \
+ -finhibit-size-directive -fno-inline-functions -g0 \
+ -mmodel=medium -c $<
+
+crtfini.o: $(srcdir)/config/m32r/initfini.c
+ $(crt_compile) $(CRTSTUFF_T_CFLAGS) -DCRT_FINI \
+ -finhibit-size-directive -fno-inline-functions -g0 \
+ -mmodel=medium -c $<
diff --git a/gcc-4.9/libgcc/config/m68k/crti.S b/gcc-4.9/libgcc/config/m68k/crti.S
new file mode 100644
index 000000000..8cc60ddbb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/crti.S
@@ -0,0 +1,44 @@
+/* Specialized code needed to support construction and destruction of
+ file-scope objects in C++ and Java code, and to support exception handling.
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Charles-Antoine Gauthier (charles.gauthier@iit.nrc.ca).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * This file just supplies function prologues for the .init and .fini
+ * sections. It is linked in before crtbegin.o.
+ */
+
+ .ident "GNU C crti.o"
+
+ .section .init
+ .globl _init
+ .type _init,@function
+_init:
+ linkw %fp,#0
+
+ .section .fini
+ .globl _fini
+ .type _fini,@function
+_fini:
+ linkw %fp,#0
diff --git a/gcc-4.9/libgcc/config/m68k/crtn.S b/gcc-4.9/libgcc/config/m68k/crtn.S
new file mode 100644
index 000000000..7a36e7606
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/crtn.S
@@ -0,0 +1,40 @@
+/* Specialized code needed to support construction and destruction of
+ file-scope objects in C++ and Java code, and to support exception handling.
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Charles-Antoine Gauthier (charles.gauthier@iit.nrc.ca).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * This file supplies function epilogues for the .init and .fini sections.
+ * It is linked in after all other files.
+ */
+
+ .ident "GNU C crtn.o"
+
+ .section .init
+ unlk %fp
+ rts
+
+ .section .fini
+ unlk %fp
+ rts
diff --git a/gcc-4.9/libgcc/config/m68k/fpgnulib.c b/gcc-4.9/libgcc/config/m68k/fpgnulib.c
new file mode 100644
index 000000000..fe41edf26
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/fpgnulib.c
@@ -0,0 +1,595 @@
+/* This is a stripped down version of floatlib.c. It supplies only those
+ functions which exist in libgcc, but for which there is not assembly
+ language versions in m68k/lb1sf68.S.
+
+ It also includes simplistic support for extended floats (by working in
+ double precision). You must compile this file again with -DEXTFLOAT
+ to get this support. */
+
+/*
+** gnulib support for software floating point.
+** Copyright (C) 1991 by Pipeline Associates, Inc. All rights reserved.
+** Permission is granted to do *anything* you want with this file,
+** commercial or otherwise, provided this message remains intact. So there!
+** I would appreciate receiving any updates/patches/changes that anyone
+** makes, and am willing to be the repository for said changes (am I
+** making a big mistake?).
+**
+** Pat Wood
+** Pipeline Associates, Inc.
+** pipeline!phw@motown.com or
+** sun!pipeline!phw or
+** uunet!motown!pipeline!phw
+**
+** 05/01/91 -- V1.0 -- first release to gcc mailing lists
+** 05/04/91 -- V1.1 -- added float and double prototypes and return values
+** -- fixed problems with adding and subtracting zero
+** -- fixed rounding in truncdfsf2
+** -- fixed SWAP define and tested on 386
+*/
+
+/*
+** The following are routines that replace the gnulib soft floating point
+** routines that are called automatically when -msoft-float is selected.
+** The support single and double precision IEEE format, with provisions
+** for byte-swapped machines (tested on 386). Some of the double-precision
+** routines work at full precision, but most of the hard ones simply punt
+** and call the single precision routines, producing a loss of accuracy.
+** long long support is not assumed or included.
+** Overall accuracy is close to IEEE (actually 68882) for single-precision
+** arithmetic. I think there may still be a 1 in 1000 chance of a bit
+** being rounded the wrong way during a multiply. I'm not fussy enough to
+** bother with it, but if anyone is, knock yourself out.
+**
+** Efficiency has only been addressed where it was obvious that something
+** would make a big difference. Anyone who wants to do this right for
+** best speed should go in and rewrite in assembler.
+**
+** I have tested this only on a 68030 workstation and 386/ix integrated
+** in with -msoft-float.
+*/
+
+/* the following deal with IEEE single-precision numbers */
+#define EXCESS 126L
+#define SIGNBIT 0x80000000L
+#define HIDDEN (1L << 23L)
+#define SIGN(fp) ((fp) & SIGNBIT)
+#define EXP(fp) (((fp) >> 23L) & 0xFF)
+#define MANT(fp) (((fp) & 0x7FFFFFL) | HIDDEN)
+#define PACK(s,e,m) ((s) | ((e) << 23L) | (m))
+
+/* the following deal with IEEE double-precision numbers */
+#define EXCESSD 1022L
+#define HIDDEND (1L << 20L)
+#define EXPDBITS 11
+#define EXPDMASK 0x7FFL
+#define EXPD(fp) (((fp.l.upper) >> 20L) & 0x7FFL)
+#define SIGND(fp) ((fp.l.upper) & SIGNBIT)
+#define MANTD(fp) (((((fp.l.upper) & 0xFFFFF) | HIDDEND) << 10) | \
+ (fp.l.lower >> 22))
+#define MANTDMASK 0xFFFFFL /* mask of upper part */
+
+/* the following deal with IEEE extended-precision numbers */
+#define EXCESSX 16382L
+#define HIDDENX (1L << 31L)
+#define EXPXBITS 15
+#define EXPXMASK 0x7FFF
+#define EXPX(fp) (((fp.l.upper) >> 16) & EXPXMASK)
+#define SIGNX(fp) ((fp.l.upper) & SIGNBIT)
+#define MANTXMASK 0x7FFFFFFFL /* mask of upper part */
+
+union double_long
+{
+ double d;
+ struct {
+ long upper;
+ unsigned long lower;
+ } l;
+};
+
+union float_long {
+ float f;
+ long l;
+};
+
+union long_double_long
+{
+ long double ld;
+ struct
+ {
+ long upper;
+ unsigned long middle;
+ unsigned long lower;
+ } l;
+};
+
+#ifndef EXTFLOAT
+
+int
+__unordsf2(float a, float b)
+{
+ union float_long fl;
+
+ fl.f = a;
+ if (EXP(fl.l) == EXP(~0u) && (MANT(fl.l) & ~HIDDEN) != 0)
+ return 1;
+ fl.f = b;
+ if (EXP(fl.l) == EXP(~0u) && (MANT(fl.l) & ~HIDDEN) != 0)
+ return 1;
+ return 0;
+}
+
+int
+__unorddf2(double a, double b)
+{
+ union double_long dl;
+
+ dl.d = a;
+ if (EXPD(dl) == EXPDMASK
+ && ((dl.l.upper & MANTDMASK) != 0 || dl.l.lower != 0))
+ return 1;
+ dl.d = b;
+ if (EXPD(dl) == EXPDMASK
+ && ((dl.l.upper & MANTDMASK) != 0 || dl.l.lower != 0))
+ return 1;
+ return 0;
+}
+
+/* convert unsigned int to double */
+double
+__floatunsidf (unsigned long a1)
+{
+ long exp = 32 + EXCESSD;
+ union double_long dl;
+
+ if (!a1)
+ {
+ dl.l.upper = dl.l.lower = 0;
+ return dl.d;
+ }
+
+ while (a1 < 0x2000000L)
+ {
+ a1 <<= 4;
+ exp -= 4;
+ }
+
+ while (a1 < 0x80000000L)
+ {
+ a1 <<= 1;
+ exp--;
+ }
+
+ /* pack up and go home */
+ dl.l.upper = exp << 20L;
+ dl.l.upper |= (a1 >> 11L) & ~HIDDEND;
+ dl.l.lower = a1 << 21L;
+
+ return dl.d;
+}
+
+/* convert int to double */
+double
+__floatsidf (long a1)
+{
+ long sign = 0, exp = 31 + EXCESSD;
+ union double_long dl;
+
+ if (!a1)
+ {
+ dl.l.upper = dl.l.lower = 0;
+ return dl.d;
+ }
+
+ if (a1 < 0)
+ {
+ sign = SIGNBIT;
+ a1 = (long)-(unsigned long)a1;
+ if (a1 < 0)
+ {
+ dl.l.upper = SIGNBIT | ((32 + EXCESSD) << 20L);
+ dl.l.lower = 0;
+ return dl.d;
+ }
+ }
+
+ while (a1 < 0x1000000L)
+ {
+ a1 <<= 4;
+ exp -= 4;
+ }
+
+ while (a1 < 0x40000000L)
+ {
+ a1 <<= 1;
+ exp--;
+ }
+
+ /* pack up and go home */
+ dl.l.upper = sign;
+ dl.l.upper |= exp << 20L;
+ dl.l.upper |= (a1 >> 10L) & ~HIDDEND;
+ dl.l.lower = a1 << 22L;
+
+ return dl.d;
+}
+
+/* convert unsigned int to float */
+float
+__floatunsisf (unsigned long l)
+{
+ double foo = __floatunsidf (l);
+ return foo;
+}
+
+/* convert int to float */
+float
+__floatsisf (long l)
+{
+ double foo = __floatsidf (l);
+ return foo;
+}
+
+/* convert float to double */
+double
+__extendsfdf2 (float a1)
+{
+ register union float_long fl1;
+ register union double_long dl;
+ register long exp;
+ register long mant;
+
+ fl1.f = a1;
+
+ dl.l.upper = SIGN (fl1.l);
+ if ((fl1.l & ~SIGNBIT) == 0)
+ {
+ dl.l.lower = 0;
+ return dl.d;
+ }
+
+ exp = EXP(fl1.l);
+ mant = MANT (fl1.l) & ~HIDDEN;
+ if (exp == 0)
+ {
+ /* Denormal. */
+ exp = 1;
+ while (!(mant & HIDDEN))
+ {
+ mant <<= 1;
+ exp--;
+ }
+ mant &= ~HIDDEN;
+ }
+ exp = exp - EXCESS + EXCESSD;
+ dl.l.upper |= exp << 20;
+ dl.l.upper |= mant >> 3;
+ dl.l.lower = mant << 29;
+
+ return dl.d;
+}
+
+/* convert double to float */
+float
+__truncdfsf2 (double a1)
+{
+ register long exp;
+ register long mant;
+ register union float_long fl;
+ register union double_long dl1;
+ int sticky;
+ int shift;
+
+ dl1.d = a1;
+
+ if ((dl1.l.upper & ~SIGNBIT) == 0 && !dl1.l.lower)
+ {
+ fl.l = SIGND(dl1);
+ return fl.f;
+ }
+
+ exp = EXPD (dl1) - EXCESSD + EXCESS;
+
+ sticky = dl1.l.lower & ((1 << 22) - 1);
+ mant = MANTD (dl1);
+ /* shift double mantissa 6 bits so we can round */
+ sticky |= mant & ((1 << 6) - 1);
+ mant >>= 6;
+
+ /* Check for underflow and denormals. */
+ if (exp <= 0)
+ {
+ if (exp < -24)
+ {
+ sticky |= mant;
+ mant = 0;
+ }
+ else
+ {
+ sticky |= mant & ((1 << (1 - exp)) - 1);
+ mant >>= 1 - exp;
+ }
+ exp = 0;
+ }
+
+ /* now round */
+ shift = 1;
+ if ((mant & 1) && (sticky || (mant & 2)))
+ {
+ int rounding = exp ? 2 : 1;
+
+ mant += 1;
+
+ /* did the round overflow? */
+ if (mant >= (HIDDEN << rounding))
+ {
+ exp++;
+ shift = rounding;
+ }
+ }
+ /* shift down */
+ mant >>= shift;
+
+ mant &= ~HIDDEN;
+
+ /* pack up and go home */
+ fl.l = PACK (SIGND (dl1), exp, mant);
+ return (fl.f);
+}
+
+/* convert double to int */
+long
+__fixdfsi (double a1)
+{
+ register union double_long dl1;
+ register long exp;
+ register long l;
+
+ dl1.d = a1;
+
+ if (!dl1.l.upper && !dl1.l.lower)
+ return 0;
+
+ exp = EXPD (dl1) - EXCESSD - 31;
+ l = MANTD (dl1);
+
+ if (exp > 0)
+ {
+ /* Return largest integer. */
+ return SIGND (dl1) ? 0x80000000L : 0x7fffffffL;
+ }
+
+ if (exp <= -32)
+ return 0;
+
+ /* shift down until exp = 0 */
+ if (exp < 0)
+ l >>= -exp;
+
+ return (SIGND (dl1) ? -l : l);
+}
+
+/* convert float to int */
+long
+__fixsfsi (float a1)
+{
+ double foo = a1;
+ return __fixdfsi (foo);
+}
+
+#else /* EXTFLOAT */
+
+/* We do not need these routines for coldfire, as it has no extended
+ float format. */
+#if !defined (__mcoldfire__)
+
+/* Primitive extended precision floating point support.
+
+ We assume all numbers are normalized, don't do any rounding, etc. */
+
+/* Prototypes for the above in case we use them. */
+double __floatunsidf (unsigned long);
+double __floatsidf (long);
+float __floatsisf (long);
+double __extendsfdf2 (float);
+float __truncdfsf2 (double);
+long __fixdfsi (double);
+long __fixsfsi (float);
+
+int
+__unordxf2(long double a, long double b)
+{
+ union long_double_long ldl;
+
+ ldl.ld = a;
+ if (EXPX(ldl) == EXPXMASK
+ && ((ldl.l.middle & MANTXMASK) != 0 || ldl.l.lower != 0))
+ return 1;
+ ldl.ld = b;
+ if (EXPX(ldl) == EXPXMASK
+ && ((ldl.l.middle & MANTXMASK) != 0 || ldl.l.lower != 0))
+ return 1;
+ return 0;
+}
+
+/* convert double to long double */
+long double
+__extenddfxf2 (double d)
+{
+ register union double_long dl;
+ register union long_double_long ldl;
+ register long exp;
+
+ dl.d = d;
+ /*printf ("dfxf in: %g\n", d);*/
+
+ ldl.l.upper = SIGND (dl);
+ if ((dl.l.upper & ~SIGNBIT) == 0 && !dl.l.lower)
+ {
+ ldl.l.middle = 0;
+ ldl.l.lower = 0;
+ return ldl.ld;
+ }
+
+ exp = EXPD (dl) - EXCESSD + EXCESSX;
+ ldl.l.upper |= exp << 16;
+ ldl.l.middle = HIDDENX;
+ /* 31-20: # mantissa bits in ldl.l.middle - # mantissa bits in dl.l.upper */
+ ldl.l.middle |= (dl.l.upper & MANTDMASK) << (31 - 20);
+ /* 1+20: explicit-integer-bit + # mantissa bits in dl.l.upper */
+ ldl.l.middle |= dl.l.lower >> (1 + 20);
+ /* 32 - 21: # bits of dl.l.lower in ldl.l.middle */
+ ldl.l.lower = dl.l.lower << (32 - 21);
+
+ /*printf ("dfxf out: %s\n", dumpxf (ldl.ld));*/
+ return ldl.ld;
+}
+
+/* convert long double to double */
+double
+__truncxfdf2 (long double ld)
+{
+ register long exp;
+ register union double_long dl;
+ register union long_double_long ldl;
+
+ ldl.ld = ld;
+ /*printf ("xfdf in: %s\n", dumpxf (ld));*/
+
+ dl.l.upper = SIGNX (ldl);
+ if ((ldl.l.upper & ~SIGNBIT) == 0 && !ldl.l.middle && !ldl.l.lower)
+ {
+ dl.l.lower = 0;
+ return dl.d;
+ }
+
+ exp = EXPX (ldl) - EXCESSX + EXCESSD;
+ /* ??? quick and dirty: keep `exp' sane */
+ if (exp >= EXPDMASK)
+ exp = EXPDMASK - 1;
+ dl.l.upper |= exp << (32 - (EXPDBITS + 1));
+ /* +1-1: add one for sign bit, but take one off for explicit-integer-bit */
+ dl.l.upper |= (ldl.l.middle & MANTXMASK) >> (EXPDBITS + 1 - 1);
+ dl.l.lower = (ldl.l.middle & MANTXMASK) << (32 - (EXPDBITS + 1 - 1));
+ dl.l.lower |= ldl.l.lower >> (EXPDBITS + 1 - 1);
+
+ /*printf ("xfdf out: %g\n", dl.d);*/
+ return dl.d;
+}
+
+/* convert a float to a long double */
+long double
+__extendsfxf2 (float f)
+{
+ long double foo = __extenddfxf2 (__extendsfdf2 (f));
+ return foo;
+}
+
+/* convert a long double to a float */
+float
+__truncxfsf2 (long double ld)
+{
+ float foo = __truncdfsf2 (__truncxfdf2 (ld));
+ return foo;
+}
+
+/* convert an int to a long double */
+long double
+__floatsixf (long l)
+{
+ double foo = __floatsidf (l);
+ return foo;
+}
+
+/* convert an unsigned int to a long double */
+long double
+__floatunsixf (unsigned long l)
+{
+ double foo = __floatunsidf (l);
+ return foo;
+}
+
+/* convert a long double to an int */
+long
+__fixxfsi (long double ld)
+{
+ long foo = __fixdfsi ((double) ld);
+ return foo;
+}
+
+/* The remaining provide crude math support by working in double precision. */
+
+long double
+__addxf3 (long double x1, long double x2)
+{
+ return (double) x1 + (double) x2;
+}
+
+long double
+__subxf3 (long double x1, long double x2)
+{
+ return (double) x1 - (double) x2;
+}
+
+long double
+__mulxf3 (long double x1, long double x2)
+{
+ return (double) x1 * (double) x2;
+}
+
+long double
+__divxf3 (long double x1, long double x2)
+{
+ return (double) x1 / (double) x2;
+}
+
+long double
+__negxf2 (long double x1)
+{
+ return - (double) x1;
+}
+
+long
+__cmpxf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+long
+__eqxf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+long
+__nexf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+long
+__ltxf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+long
+__lexf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+long
+__gtxf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+long
+__gexf2 (long double x1, long double x2)
+{
+ return __cmpdf2 ((double) x1, (double) x2);
+}
+
+#endif /* !__mcoldfire__ */
+#endif /* EXTFLOAT */
diff --git a/gcc-4.9/libgcc/config/m68k/lb1sf68.S b/gcc-4.9/libgcc/config/m68k/lb1sf68.S
new file mode 100644
index 000000000..afd1defa8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/lb1sf68.S
@@ -0,0 +1,4116 @@
+/* libgcc routines for 68000 w/o floating-point hardware.
+ Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Use this one for any 680x0; assumes no floating point hardware.
+ The trailing " '" appearing on some lines is for ANSI preprocessors. Yuk.
+ Some of this code comes from MINIX, via the folks at ericsson.
+ D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
+*/
+
+/* These are predefined by new versions of GNU cpp. */
+
+#ifndef __USER_LABEL_PREFIX__
+#define __USER_LABEL_PREFIX__ _
+#endif
+
+#ifndef __REGISTER_PREFIX__
+#define __REGISTER_PREFIX__
+#endif
+
+#ifndef __IMMEDIATE_PREFIX__
+#define __IMMEDIATE_PREFIX__ #
+#endif
+
+/* ANSI concatenation macros. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels. */
+
+#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
+
+/* Note that X is a function. */
+
+#ifdef __ELF__
+#define FUNC(x) .type SYM(x),function
+#else
+/* The .proc pseudo-op is accepted, but ignored, by GAS. We could just
+ define this to the empty string for non-ELF systems, but defining it
+ to .proc means that the information is available to the assembler if
+ the need arises. */
+#define FUNC(x) .proc
+#endif
+
+/* Use the right prefix for registers. */
+
+#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
+
+/* Use the right prefix for immediate values. */
+
+#define IMM(x) CONCAT1 (__IMMEDIATE_PREFIX__, x)
+
+#define d0 REG (d0)
+#define d1 REG (d1)
+#define d2 REG (d2)
+#define d3 REG (d3)
+#define d4 REG (d4)
+#define d5 REG (d5)
+#define d6 REG (d6)
+#define d7 REG (d7)
+#define a0 REG (a0)
+#define a1 REG (a1)
+#define a2 REG (a2)
+#define a3 REG (a3)
+#define a4 REG (a4)
+#define a5 REG (a5)
+#define a6 REG (a6)
+#define fp REG (fp)
+#define sp REG (sp)
+#define pc REG (pc)
+
+/* Provide a few macros to allow for PIC code support.
+ * With PIC, data is stored A5 relative so we've got to take a bit of special
+ * care to ensure that all loads of global data is via A5. PIC also requires
+ * jumps and subroutine calls to be PC relative rather than absolute. We cheat
+ * a little on this and in the PIC case, we use short offset branches and
+ * hope that the final object code is within range (which it should be).
+ */
+#ifndef __PIC__
+
+ /* Non PIC (absolute/relocatable) versions */
+
+ .macro PICCALL addr
+ jbsr \addr
+ .endm
+
+ .macro PICJUMP addr
+ jmp \addr
+ .endm
+
+ .macro PICLEA sym, reg
+ lea \sym, \reg
+ .endm
+
+ .macro PICPEA sym, areg
+ pea \sym
+ .endm
+
+#else /* __PIC__ */
+
+# if defined (__uClinux__)
+
+ /* Versions for uClinux */
+
+# if defined(__ID_SHARED_LIBRARY__)
+
+ /* -mid-shared-library versions */
+
+ .macro PICLEA sym, reg
+ movel a5@(_current_shared_library_a5_offset_), \reg
+ movel \sym@GOT(\reg), \reg
+ .endm
+
+ .macro PICPEA sym, areg
+ movel a5@(_current_shared_library_a5_offset_), \areg
+ movel \sym@GOT(\areg), sp@-
+ .endm
+
+ .macro PICCALL addr
+ PICLEA \addr,a0
+ jsr a0@
+ .endm
+
+ .macro PICJUMP addr
+ PICLEA \addr,a0
+ jmp a0@
+ .endm
+
+# else /* !__ID_SHARED_LIBRARY__ */
+
+ /* Versions for -msep-data */
+
+ .macro PICLEA sym, reg
+ movel \sym@GOT(a5), \reg
+ .endm
+
+ .macro PICPEA sym, areg
+ movel \sym@GOT(a5), sp@-
+ .endm
+
+ .macro PICCALL addr
+#if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
+ lea \addr-.-8,a0
+ jsr pc@(a0)
+#else
+ jbsr \addr
+#endif
+ .endm
+
+ .macro PICJUMP addr
+ /* ISA C has no bra.l instruction, and since this assembly file
+ gets assembled into multiple object files, we avoid the
+ bra instruction entirely. */
+#if defined (__mcoldfire__) && !defined (__mcfisab__)
+ lea \addr-.-8,a0
+ jmp pc@(a0)
+#else
+ bra \addr
+#endif
+ .endm
+
+# endif
+
+# else /* !__uClinux__ */
+
+ /* Versions for Linux */
+
+ .macro PICLEA sym, reg
+ movel #_GLOBAL_OFFSET_TABLE_@GOTPC, \reg
+ lea (-6, pc, \reg), \reg
+ movel \sym@GOT(\reg), \reg
+ .endm
+
+ .macro PICPEA sym, areg
+ movel #_GLOBAL_OFFSET_TABLE_@GOTPC, \areg
+ lea (-6, pc, \areg), \areg
+ movel \sym@GOT(\areg), sp@-
+ .endm
+
+ .macro PICCALL addr
+#if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
+ lea \addr-.-8,a0
+ jsr pc@(a0)
+#else
+ jbsr \addr
+#endif
+ .endm
+
+ .macro PICJUMP addr
+ /* ISA C has no bra.l instruction, and since this assembly file
+ gets assembled into multiple object files, we avoid the
+ bra instruction entirely. */
+#if defined (__mcoldfire__) && !defined (__mcfisab__)
+ lea \addr-.-8,a0
+ jmp pc@(a0)
+#else
+ bra \addr
+#endif
+ .endm
+
+# endif
+#endif /* __PIC__ */
+
+
+#ifdef L_floatex
+
+| This is an attempt at a decent floating point (single, double and
+| extended double) code for the GNU C compiler. It should be easy to
+| adapt to other compilers (but beware of the local labels!).
+
+| Starting date: 21 October, 1990
+
+| It is convenient to introduce the notation (s,e,f) for a floating point
+| number, where s=sign, e=exponent, f=fraction. We will call a floating
+| point number fpn to abbreviate, independently of the precision.
+| Let MAX_EXP be in each case the maximum exponent (255 for floats, 1023
+| for doubles and 16383 for long doubles). We then have the following
+| different cases:
+| 1. Normalized fpns have 0 < e < MAX_EXP. They correspond to
+| (-1)^s x 1.f x 2^(e-bias-1).
+| 2. Denormalized fpns have e=0. They correspond to numbers of the form
+| (-1)^s x 0.f x 2^(-bias).
+| 3. +/-INFINITY have e=MAX_EXP, f=0.
+| 4. Quiet NaN (Not a Number) have all bits set.
+| 5. Signaling NaN (Not a Number) have s=0, e=MAX_EXP, f=1.
+
+|=============================================================================
+| exceptions
+|=============================================================================
+
+| This is the floating point condition code register (_fpCCR):
+|
+| struct {
+| short _exception_bits;
+| short _trap_enable_bits;
+| short _sticky_bits;
+| short _rounding_mode;
+| short _format;
+| short _last_operation;
+| union {
+| float sf;
+| double df;
+| } _operand1;
+| union {
+| float sf;
+| double df;
+| } _operand2;
+| } _fpCCR;
+
+ .data
+ .even
+
+ .globl SYM (_fpCCR)
+
+SYM (_fpCCR):
+__exception_bits:
+ .word 0
+__trap_enable_bits:
+ .word 0
+__sticky_bits:
+ .word 0
+__rounding_mode:
+ .word ROUND_TO_NEAREST
+__format:
+ .word NIL
+__last_operation:
+ .word NOOP
+__operand1:
+ .long 0
+ .long 0
+__operand2:
+ .long 0
+ .long 0
+
+| Offsets:
+EBITS = __exception_bits - SYM (_fpCCR)
+TRAPE = __trap_enable_bits - SYM (_fpCCR)
+STICK = __sticky_bits - SYM (_fpCCR)
+ROUND = __rounding_mode - SYM (_fpCCR)
+FORMT = __format - SYM (_fpCCR)
+LASTO = __last_operation - SYM (_fpCCR)
+OPER1 = __operand1 - SYM (_fpCCR)
+OPER2 = __operand2 - SYM (_fpCCR)
+
+| The following exception types are supported:
+INEXACT_RESULT = 0x0001
+UNDERFLOW = 0x0002
+OVERFLOW = 0x0004
+DIVIDE_BY_ZERO = 0x0008
+INVALID_OPERATION = 0x0010
+
+| The allowed rounding modes are:
+UNKNOWN = -1
+ROUND_TO_NEAREST = 0 | round result to nearest representable value
+ROUND_TO_ZERO = 1 | round result towards zero
+ROUND_TO_PLUS = 2 | round result towards plus infinity
+ROUND_TO_MINUS = 3 | round result towards minus infinity
+
+| The allowed values of format are:
+NIL = 0
+SINGLE_FLOAT = 1
+DOUBLE_FLOAT = 2
+LONG_FLOAT = 3
+
+| The allowed values for the last operation are:
+NOOP = 0
+ADD = 1
+MULTIPLY = 2
+DIVIDE = 3
+NEGATE = 4
+COMPARE = 5
+EXTENDSFDF = 6
+TRUNCDFSF = 7
+
+|=============================================================================
+| __clear_sticky_bits
+|=============================================================================
+
+| The sticky bits are normally not cleared (thus the name), whereas the
+| exception type and exception value reflect the last computation.
+| This routine is provided to clear them (you can also write to _fpCCR,
+| since it is globally visible).
+
+ .globl SYM (__clear_sticky_bit)
+
+ .text
+ .even
+
+| void __clear_sticky_bits(void);
+SYM (__clear_sticky_bit):
+ PICLEA SYM (_fpCCR),a0
+#ifndef __mcoldfire__
+ movew IMM (0),a0@(STICK)
+#else
+ clr.w a0@(STICK)
+#endif
+ rts
+
+|=============================================================================
+| $_exception_handler
+|=============================================================================
+
+ .globl $_exception_handler
+
+ .text
+ .even
+
+| This is the common exit point if an exception occurs.
+| NOTE: it is NOT callable from C!
+| It expects the exception type in d7, the format (SINGLE_FLOAT,
+| DOUBLE_FLOAT or LONG_FLOAT) in d6, and the last operation code in d5.
+| It sets the corresponding exception and sticky bits, and the format.
+| Depending on the format if fills the corresponding slots for the
+| operands which produced the exception (all this information is provided
+| so if you write your own exception handlers you have enough information
+| to deal with the problem).
+| Then checks to see if the corresponding exception is trap-enabled,
+| in which case it pushes the address of _fpCCR and traps through
+| trap FPTRAP (15 for the moment).
+
+FPTRAP = 15
+
+$_exception_handler:
+ PICLEA SYM (_fpCCR),a0
+ movew d7,a0@(EBITS) | set __exception_bits
+#ifndef __mcoldfire__
+ orw d7,a0@(STICK) | and __sticky_bits
+#else
+ movew a0@(STICK),d4
+ orl d7,d4
+ movew d4,a0@(STICK)
+#endif
+ movew d6,a0@(FORMT) | and __format
+ movew d5,a0@(LASTO) | and __last_operation
+
+| Now put the operands in place:
+#ifndef __mcoldfire__
+ cmpw IMM (SINGLE_FLOAT),d6
+#else
+ cmpl IMM (SINGLE_FLOAT),d6
+#endif
+ beq 1f
+ movel a6@(8),a0@(OPER1)
+ movel a6@(12),a0@(OPER1+4)
+ movel a6@(16),a0@(OPER2)
+ movel a6@(20),a0@(OPER2+4)
+ bra 2f
+1: movel a6@(8),a0@(OPER1)
+ movel a6@(12),a0@(OPER2)
+2:
+| And check whether the exception is trap-enabled:
+#ifndef __mcoldfire__
+ andw a0@(TRAPE),d7 | is exception trap-enabled?
+#else
+ clrl d6
+ movew a0@(TRAPE),d6
+ andl d6,d7
+#endif
+ beq 1f | no, exit
+ PICPEA SYM (_fpCCR),a1 | yes, push address of _fpCCR
+ trap IMM (FPTRAP) | and trap
+#ifndef __mcoldfire__
+1: moveml sp@+,d2-d7 | restore data registers
+#else
+1: moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 | and return
+ rts
+#endif /* L_floatex */
+
+#ifdef L_mulsi3
+ .text
+ FUNC(__mulsi3)
+ .globl SYM (__mulsi3)
+SYM (__mulsi3):
+ movew sp@(4), d0 /* x0 -> d0 */
+ muluw sp@(10), d0 /* x0*y1 */
+ movew sp@(6), d1 /* x1 -> d1 */
+ muluw sp@(8), d1 /* x1*y0 */
+#ifndef __mcoldfire__
+ addw d1, d0
+#else
+ addl d1, d0
+#endif
+ swap d0
+ clrw d0
+ movew sp@(6), d1 /* x1 -> d1 */
+ muluw sp@(10), d1 /* x1*y1 */
+ addl d1, d0
+
+ rts
+#endif /* L_mulsi3 */
+
+#ifdef L_udivsi3
+ .text
+ FUNC(__udivsi3)
+ .globl SYM (__udivsi3)
+SYM (__udivsi3):
+#ifndef __mcoldfire__
+ movel d2, sp@-
+ movel sp@(12), d1 /* d1 = divisor */
+ movel sp@(8), d0 /* d0 = dividend */
+
+ cmpl IMM (0x10000), d1 /* divisor >= 2 ^ 16 ? */
+ jcc L3 /* then try next algorithm */
+ movel d0, d2
+ clrw d2
+ swap d2
+ divu d1, d2 /* high quotient in lower word */
+ movew d2, d0 /* save high quotient */
+ swap d0
+ movew sp@(10), d2 /* get low dividend + high rest */
+ divu d1, d2 /* low quotient */
+ movew d2, d0
+ jra L6
+
+L3: movel d1, d2 /* use d2 as divisor backup */
+L4: lsrl IMM (1), d1 /* shift divisor */
+ lsrl IMM (1), d0 /* shift dividend */
+ cmpl IMM (0x10000), d1 /* still divisor >= 2 ^ 16 ? */
+ jcc L4
+ divu d1, d0 /* now we have 16-bit divisor */
+ andl IMM (0xffff), d0 /* mask out divisor, ignore remainder */
+
+/* Multiply the 16-bit tentative quotient with the 32-bit divisor. Because of
+ the operand ranges, this might give a 33-bit product. If this product is
+ greater than the dividend, the tentative quotient was too large. */
+ movel d2, d1
+ mulu d0, d1 /* low part, 32 bits */
+ swap d2
+ mulu d0, d2 /* high part, at most 17 bits */
+ swap d2 /* align high part with low part */
+ tstw d2 /* high part 17 bits? */
+ jne L5 /* if 17 bits, quotient was too large */
+ addl d2, d1 /* add parts */
+ jcs L5 /* if sum is 33 bits, quotient was too large */
+ cmpl sp@(8), d1 /* compare the sum with the dividend */
+ jls L6 /* if sum > dividend, quotient was too large */
+L5: subql IMM (1), d0 /* adjust quotient */
+
+L6: movel sp@+, d2
+ rts
+
+#else /* __mcoldfire__ */
+
+/* ColdFire implementation of non-restoring division algorithm from
+ Hennessy & Patterson, Appendix A. */
+ link a6,IMM (-12)
+ moveml d2-d4,sp@
+ movel a6@(8),d0
+ movel a6@(12),d1
+ clrl d2 | clear p
+ moveq IMM (31),d4
+L1: addl d0,d0 | shift reg pair (p,a) one bit left
+ addxl d2,d2
+ movl d2,d3 | subtract b from p, store in tmp.
+ subl d1,d3
+ jcs L2 | if no carry,
+ bset IMM (0),d0 | set the low order bit of a to 1,
+ movl d3,d2 | and store tmp in p.
+L2: subql IMM (1),d4
+ jcc L1
+ moveml sp@,d2-d4 | restore data registers
+ unlk a6 | and return
+ rts
+#endif /* __mcoldfire__ */
+
+#endif /* L_udivsi3 */
+
+#ifdef L_divsi3
+ .text
+ FUNC(__divsi3)
+ .globl SYM (__divsi3)
+SYM (__divsi3):
+ movel d2, sp@-
+
+ moveq IMM (1), d2 /* sign of result stored in d2 (=1 or =-1) */
+ movel sp@(12), d1 /* d1 = divisor */
+ jpl L1
+ negl d1
+#ifndef __mcoldfire__
+ negb d2 /* change sign because divisor <0 */
+#else
+ negl d2 /* change sign because divisor <0 */
+#endif
+L1: movel sp@(8), d0 /* d0 = dividend */
+ jpl L2
+ negl d0
+#ifndef __mcoldfire__
+ negb d2
+#else
+ negl d2
+#endif
+
+L2: movel d1, sp@-
+ movel d0, sp@-
+ PICCALL SYM (__udivsi3) /* divide abs(dividend) by abs(divisor) */
+ addql IMM (8), sp
+
+ tstb d2
+ jpl L3
+ negl d0
+
+L3: movel sp@+, d2
+ rts
+#endif /* L_divsi3 */
+
+#ifdef L_umodsi3
+ .text
+ FUNC(__umodsi3)
+ .globl SYM (__umodsi3)
+SYM (__umodsi3):
+ movel sp@(8), d1 /* d1 = divisor */
+ movel sp@(4), d0 /* d0 = dividend */
+ movel d1, sp@-
+ movel d0, sp@-
+ PICCALL SYM (__udivsi3)
+ addql IMM (8), sp
+ movel sp@(8), d1 /* d1 = divisor */
+#ifndef __mcoldfire__
+ movel d1, sp@-
+ movel d0, sp@-
+ PICCALL SYM (__mulsi3) /* d0 = (a/b)*b */
+ addql IMM (8), sp
+#else
+ mulsl d1,d0
+#endif
+ movel sp@(4), d1 /* d1 = dividend */
+ subl d0, d1 /* d1 = a - (a/b)*b */
+ movel d1, d0
+ rts
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+ .text
+ FUNC(__modsi3)
+ .globl SYM (__modsi3)
+SYM (__modsi3):
+ movel sp@(8), d1 /* d1 = divisor */
+ movel sp@(4), d0 /* d0 = dividend */
+ movel d1, sp@-
+ movel d0, sp@-
+ PICCALL SYM (__divsi3)
+ addql IMM (8), sp
+ movel sp@(8), d1 /* d1 = divisor */
+#ifndef __mcoldfire__
+ movel d1, sp@-
+ movel d0, sp@-
+ PICCALL SYM (__mulsi3) /* d0 = (a/b)*b */
+ addql IMM (8), sp
+#else
+ mulsl d1,d0
+#endif
+ movel sp@(4), d1 /* d1 = dividend */
+ subl d0, d1 /* d1 = a - (a/b)*b */
+ movel d1, d0
+ rts
+#endif /* L_modsi3 */
+
+
+#ifdef L_double
+
+ .globl SYM (_fpCCR)
+ .globl $_exception_handler
+
+QUIET_NaN = 0xffffffff
+
+D_MAX_EXP = 0x07ff
+D_BIAS = 1022
+DBL_MAX_EXP = D_MAX_EXP - D_BIAS
+DBL_MIN_EXP = 1 - D_BIAS
+DBL_MANT_DIG = 53
+
+INEXACT_RESULT = 0x0001
+UNDERFLOW = 0x0002
+OVERFLOW = 0x0004
+DIVIDE_BY_ZERO = 0x0008
+INVALID_OPERATION = 0x0010
+
+DOUBLE_FLOAT = 2
+
+NOOP = 0
+ADD = 1
+MULTIPLY = 2
+DIVIDE = 3
+NEGATE = 4
+COMPARE = 5
+EXTENDSFDF = 6
+TRUNCDFSF = 7
+
+UNKNOWN = -1
+ROUND_TO_NEAREST = 0 | round result to nearest representable value
+ROUND_TO_ZERO = 1 | round result towards zero
+ROUND_TO_PLUS = 2 | round result towards plus infinity
+ROUND_TO_MINUS = 3 | round result towards minus infinity
+
+| Entry points:
+
+ .globl SYM (__adddf3)
+ .globl SYM (__subdf3)
+ .globl SYM (__muldf3)
+ .globl SYM (__divdf3)
+ .globl SYM (__negdf2)
+ .globl SYM (__cmpdf2)
+ .globl SYM (__cmpdf2_internal)
+ .hidden SYM (__cmpdf2_internal)
+
+ .text
+ .even
+
+| These are common routines to return and signal exceptions.
+
+Ld$den:
+| Return and signal a denormalized number
+ orl d7,d0
+ movew IMM (INEXACT_RESULT+UNDERFLOW),d7
+ moveq IMM (DOUBLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Ld$infty:
+Ld$overflow:
+| Return a properly signed INFINITY and set the exception flags
+ movel IMM (0x7ff00000),d0
+ movel IMM (0),d1
+ orl d7,d0
+ movew IMM (INEXACT_RESULT+OVERFLOW),d7
+ moveq IMM (DOUBLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Ld$underflow:
+| Return 0 and set the exception flags
+ movel IMM (0),d0
+ movel d0,d1
+ movew IMM (INEXACT_RESULT+UNDERFLOW),d7
+ moveq IMM (DOUBLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Ld$inop:
+| Return a quiet NaN and set the exception flags
+ movel IMM (QUIET_NaN),d0
+ movel d0,d1
+ movew IMM (INEXACT_RESULT+INVALID_OPERATION),d7
+ moveq IMM (DOUBLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Ld$div$0:
+| Return a properly signed INFINITY and set the exception flags
+ movel IMM (0x7ff00000),d0
+ movel IMM (0),d1
+ orl d7,d0
+ movew IMM (INEXACT_RESULT+DIVIDE_BY_ZERO),d7
+ moveq IMM (DOUBLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+|=============================================================================
+|=============================================================================
+| double precision routines
+|=============================================================================
+|=============================================================================
+
+| A double precision floating point number (double) has the format:
+|
+| struct _double {
+| unsigned int sign : 1; /* sign bit */
+| unsigned int exponent : 11; /* exponent, shifted by 126 */
+| unsigned int fraction : 52; /* fraction */
+| } double;
+|
+| Thus sizeof(double) = 8 (64 bits).
+|
+| All the routines are callable from C programs, and return the result
+| in the register pair d0-d1. They also preserve all registers except
+| d0-d1 and a0-a1.
+
+|=============================================================================
+| __subdf3
+|=============================================================================
+
+| double __subdf3(double, double);
+ FUNC(__subdf3)
+SYM (__subdf3):
+ bchg IMM (31),sp@(12) | change sign of second operand
+ | and fall through, so we always add
+|=============================================================================
+| __adddf3
+|=============================================================================
+
+| double __adddf3(double, double);
+ FUNC(__adddf3)
+SYM (__adddf3):
+#ifndef __mcoldfire__
+ link a6,IMM (0) | everything will be done in registers
+ moveml d2-d7,sp@- | save all data registers and a2 (but d0-d1)
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ movel a6@(8),d0 | get first operand
+ movel a6@(12),d1 |
+ movel a6@(16),d2 | get second operand
+ movel a6@(20),d3 |
+
+ movel d0,d7 | get d0's sign bit in d7 '
+ addl d1,d1 | check and clear sign bit of a, and gain one
+ addxl d0,d0 | bit of extra precision
+ beq Ladddf$b | if zero return second operand
+
+ movel d2,d6 | save sign in d6
+ addl d3,d3 | get rid of sign bit and gain one bit of
+ addxl d2,d2 | extra precision
+ beq Ladddf$a | if zero return first operand
+
+ andl IMM (0x80000000),d7 | isolate a's sign bit '
+ swap d6 | and also b's sign bit '
+#ifndef __mcoldfire__
+ andw IMM (0x8000),d6 |
+ orw d6,d7 | and combine them into d7, so that a's sign '
+ | bit is in the high word and b's is in the '
+ | low word, so d6 is free to be used
+#else
+ andl IMM (0x8000),d6
+ orl d6,d7
+#endif
+ movel d7,a0 | now save d7 into a0, so d7 is free to
+ | be used also
+
+| Get the exponents and check for denormalized and/or infinity.
+
+ movel IMM (0x001fffff),d6 | mask for the fraction
+ movel IMM (0x00200000),d7 | mask to put hidden bit back
+
+ movel d0,d4 |
+ andl d6,d0 | get fraction in d0
+ notl d6 | make d6 into mask for the exponent
+ andl d6,d4 | get exponent in d4
+ beq Ladddf$a$den | branch if a is denormalized
+ cmpl d6,d4 | check for INFINITY or NaN
+ beq Ladddf$nf |
+ orl d7,d0 | and put hidden bit back
+Ladddf$1:
+ swap d4 | shift right exponent so that it starts
+#ifndef __mcoldfire__
+ lsrw IMM (5),d4 | in bit 0 and not bit 20
+#else
+ lsrl IMM (5),d4 | in bit 0 and not bit 20
+#endif
+| Now we have a's exponent in d4 and fraction in d0-d1 '
+ movel d2,d5 | save b to get exponent
+ andl d6,d5 | get exponent in d5
+ beq Ladddf$b$den | branch if b is denormalized
+ cmpl d6,d5 | check for INFINITY or NaN
+ beq Ladddf$nf
+ notl d6 | make d6 into mask for the fraction again
+ andl d6,d2 | and get fraction in d2
+ orl d7,d2 | and put hidden bit back
+Ladddf$2:
+ swap d5 | shift right exponent so that it starts
+#ifndef __mcoldfire__
+ lsrw IMM (5),d5 | in bit 0 and not bit 20
+#else
+ lsrl IMM (5),d5 | in bit 0 and not bit 20
+#endif
+
+| Now we have b's exponent in d5 and fraction in d2-d3. '
+
+| The situation now is as follows: the signs are combined in a0, the
+| numbers are in d0-d1 (a) and d2-d3 (b), and the exponents in d4 (a)
+| and d5 (b). To do the rounding correctly we need to keep all the
+| bits until the end, so we need to use d0-d1-d2-d3 for the first number
+| and d4-d5-d6-d7 for the second. To do this we store (temporarily) the
+| exponents in a2-a3.
+
+#ifndef __mcoldfire__
+ moveml a2-a3,sp@- | save the address registers
+#else
+ movel a2,sp@-
+ movel a3,sp@-
+ movel a4,sp@-
+#endif
+
+ movel d4,a2 | save the exponents
+ movel d5,a3 |
+
+ movel IMM (0),d7 | and move the numbers around
+ movel d7,d6 |
+ movel d3,d5 |
+ movel d2,d4 |
+ movel d7,d3 |
+ movel d7,d2 |
+
+| Here we shift the numbers until the exponents are the same, and put
+| the largest exponent in a2.
+#ifndef __mcoldfire__
+ exg d4,a2 | get exponents back
+ exg d5,a3 |
+ cmpw d4,d5 | compare the exponents
+#else
+ movel d4,a4 | get exponents back
+ movel a2,d4
+ movel a4,a2
+ movel d5,a4
+ movel a3,d5
+ movel a4,a3
+ cmpl d4,d5 | compare the exponents
+#endif
+ beq Ladddf$3 | if equal don't shift '
+ bhi 9f | branch if second exponent is higher
+
+| Here we have a's exponent larger than b's, so we have to shift b. We do
+| this by using as counter d2:
+1: movew d4,d2 | move largest exponent to d2
+#ifndef __mcoldfire__
+ subw d5,d2 | and subtract second exponent
+ exg d4,a2 | get back the longs we saved
+ exg d5,a3 |
+#else
+ subl d5,d2 | and subtract second exponent
+ movel d4,a4 | get back the longs we saved
+ movel a2,d4
+ movel a4,a2
+ movel d5,a4
+ movel a3,d5
+ movel a4,a3
+#endif
+| if difference is too large we don't shift (actually, we can just exit) '
+#ifndef __mcoldfire__
+ cmpw IMM (DBL_MANT_DIG+2),d2
+#else
+ cmpl IMM (DBL_MANT_DIG+2),d2
+#endif
+ bge Ladddf$b$small
+#ifndef __mcoldfire__
+ cmpw IMM (32),d2 | if difference >= 32, shift by longs
+#else
+ cmpl IMM (32),d2 | if difference >= 32, shift by longs
+#endif
+ bge 5f
+2:
+#ifndef __mcoldfire__
+ cmpw IMM (16),d2 | if difference >= 16, shift by words
+#else
+ cmpl IMM (16),d2 | if difference >= 16, shift by words
+#endif
+ bge 6f
+ bra 3f | enter dbra loop
+
+4:
+#ifndef __mcoldfire__
+ lsrl IMM (1),d4
+ roxrl IMM (1),d5
+ roxrl IMM (1),d6
+ roxrl IMM (1),d7
+#else
+ lsrl IMM (1),d7
+ btst IMM (0),d6
+ beq 10f
+ bset IMM (31),d7
+10: lsrl IMM (1),d6
+ btst IMM (0),d5
+ beq 11f
+ bset IMM (31),d6
+11: lsrl IMM (1),d5
+ btst IMM (0),d4
+ beq 12f
+ bset IMM (31),d5
+12: lsrl IMM (1),d4
+#endif
+3:
+#ifndef __mcoldfire__
+ dbra d2,4b
+#else
+ subql IMM (1),d2
+ bpl 4b
+#endif
+ movel IMM (0),d2
+ movel d2,d3
+ bra Ladddf$4
+5:
+ movel d6,d7
+ movel d5,d6
+ movel d4,d5
+ movel IMM (0),d4
+#ifndef __mcoldfire__
+ subw IMM (32),d2
+#else
+ subl IMM (32),d2
+#endif
+ bra 2b
+6:
+ movew d6,d7
+ swap d7
+ movew d5,d6
+ swap d6
+ movew d4,d5
+ swap d5
+ movew IMM (0),d4
+ swap d4
+#ifndef __mcoldfire__
+ subw IMM (16),d2
+#else
+ subl IMM (16),d2
+#endif
+ bra 3b
+
+9:
+#ifndef __mcoldfire__
+ exg d4,d5
+ movew d4,d6
+ subw d5,d6 | keep d5 (largest exponent) in d4
+ exg d4,a2
+ exg d5,a3
+#else
+ movel d5,d6
+ movel d4,d5
+ movel d6,d4
+ subl d5,d6
+ movel d4,a4
+ movel a2,d4
+ movel a4,a2
+ movel d5,a4
+ movel a3,d5
+ movel a4,a3
+#endif
+| if difference is too large we don't shift (actually, we can just exit) '
+#ifndef __mcoldfire__
+ cmpw IMM (DBL_MANT_DIG+2),d6
+#else
+ cmpl IMM (DBL_MANT_DIG+2),d6
+#endif
+ bge Ladddf$a$small
+#ifndef __mcoldfire__
+ cmpw IMM (32),d6 | if difference >= 32, shift by longs
+#else
+ cmpl IMM (32),d6 | if difference >= 32, shift by longs
+#endif
+ bge 5f
+2:
+#ifndef __mcoldfire__
+ cmpw IMM (16),d6 | if difference >= 16, shift by words
+#else
+ cmpl IMM (16),d6 | if difference >= 16, shift by words
+#endif
+ bge 6f
+ bra 3f | enter dbra loop
+
+4:
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+#else
+ lsrl IMM (1),d3
+ btst IMM (0),d2
+ beq 10f
+ bset IMM (31),d3
+10: lsrl IMM (1),d2
+ btst IMM (0),d1
+ beq 11f
+ bset IMM (31),d2
+11: lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 12f
+ bset IMM (31),d1
+12: lsrl IMM (1),d0
+#endif
+3:
+#ifndef __mcoldfire__
+ dbra d6,4b
+#else
+ subql IMM (1),d6
+ bpl 4b
+#endif
+ movel IMM (0),d7
+ movel d7,d6
+ bra Ladddf$4
+5:
+ movel d2,d3
+ movel d1,d2
+ movel d0,d1
+ movel IMM (0),d0
+#ifndef __mcoldfire__
+ subw IMM (32),d6
+#else
+ subl IMM (32),d6
+#endif
+ bra 2b
+6:
+ movew d2,d3
+ swap d3
+ movew d1,d2
+ swap d2
+ movew d0,d1
+ swap d1
+ movew IMM (0),d0
+ swap d0
+#ifndef __mcoldfire__
+ subw IMM (16),d6
+#else
+ subl IMM (16),d6
+#endif
+ bra 3b
+Ladddf$3:
+#ifndef __mcoldfire__
+ exg d4,a2
+ exg d5,a3
+#else
+ movel d4,a4
+ movel a2,d4
+ movel a4,a2
+ movel d5,a4
+ movel a3,d5
+ movel a4,a3
+#endif
+Ladddf$4:
+| Now we have the numbers in d0--d3 and d4--d7, the exponent in a2, and
+| the signs in a4.
+
+| Here we have to decide whether to add or subtract the numbers:
+#ifndef __mcoldfire__
+ exg d7,a0 | get the signs
+ exg d6,a3 | a3 is free to be used
+#else
+ movel d7,a4
+ movel a0,d7
+ movel a4,a0
+ movel d6,a4
+ movel a3,d6
+ movel a4,a3
+#endif
+ movel d7,d6 |
+ movew IMM (0),d7 | get a's sign in d7 '
+ swap d6 |
+ movew IMM (0),d6 | and b's sign in d6 '
+ eorl d7,d6 | compare the signs
+ bmi Lsubdf$0 | if the signs are different we have
+ | to subtract
+#ifndef __mcoldfire__
+ exg d7,a0 | else we add the numbers
+ exg d6,a3 |
+#else
+ movel d7,a4
+ movel a0,d7
+ movel a4,a0
+ movel d6,a4
+ movel a3,d6
+ movel a4,a3
+#endif
+ addl d7,d3 |
+ addxl d6,d2 |
+ addxl d5,d1 |
+ addxl d4,d0 |
+
+ movel a2,d4 | return exponent to d4
+ movel a0,d7 |
+ andl IMM (0x80000000),d7 | d7 now has the sign
+
+#ifndef __mcoldfire__
+ moveml sp@+,a2-a3
+#else
+ movel sp@+,a4
+ movel sp@+,a3
+ movel sp@+,a2
+#endif
+
+| Before rounding normalize so bit #DBL_MANT_DIG is set (we will consider
+| the case of denormalized numbers in the rounding routine itself).
+| As in the addition (not in the subtraction!) we could have set
+| one more bit we check this:
+ btst IMM (DBL_MANT_DIG+1),d0
+ beq 1f
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+ addw IMM (1),d4
+#else
+ lsrl IMM (1),d3
+ btst IMM (0),d2
+ beq 10f
+ bset IMM (31),d3
+10: lsrl IMM (1),d2
+ btst IMM (0),d1
+ beq 11f
+ bset IMM (31),d2
+11: lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 12f
+ bset IMM (31),d1
+12: lsrl IMM (1),d0
+ addl IMM (1),d4
+#endif
+1:
+ lea pc@(Ladddf$5),a0 | to return from rounding routine
+ PICLEA SYM (_fpCCR),a1 | check the rounding mode
+#ifdef __mcoldfire__
+ clrl d6
+#endif
+ movew a1@(6),d6 | rounding mode in d6
+ beq Lround$to$nearest
+#ifndef __mcoldfire__
+ cmpw IMM (ROUND_TO_PLUS),d6
+#else
+ cmpl IMM (ROUND_TO_PLUS),d6
+#endif
+ bhi Lround$to$minus
+ blt Lround$to$zero
+ bra Lround$to$plus
+Ladddf$5:
+| Put back the exponent and check for overflow
+#ifndef __mcoldfire__
+ cmpw IMM (0x7ff),d4 | is the exponent big?
+#else
+ cmpl IMM (0x7ff),d4 | is the exponent big?
+#endif
+ bge 1f
+ bclr IMM (DBL_MANT_DIG-1),d0
+#ifndef __mcoldfire__
+ lslw IMM (4),d4 | put exponent back into position
+#else
+ lsll IMM (4),d4 | put exponent back into position
+#endif
+ swap d0 |
+#ifndef __mcoldfire__
+ orw d4,d0 |
+#else
+ orl d4,d0 |
+#endif
+ swap d0 |
+ bra Ladddf$ret
+1:
+ moveq IMM (ADD),d5
+ bra Ld$overflow
+
+Lsubdf$0:
+| Here we do the subtraction.
+#ifndef __mcoldfire__
+ exg d7,a0 | put sign back in a0
+ exg d6,a3 |
+#else
+ movel d7,a4
+ movel a0,d7
+ movel a4,a0
+ movel d6,a4
+ movel a3,d6
+ movel a4,a3
+#endif
+ subl d7,d3 |
+ subxl d6,d2 |
+ subxl d5,d1 |
+ subxl d4,d0 |
+ beq Ladddf$ret$1 | if zero just exit
+ bpl 1f | if positive skip the following
+ movel a0,d7 |
+ bchg IMM (31),d7 | change sign bit in d7
+ movel d7,a0 |
+ negl d3 |
+ negxl d2 |
+ negxl d1 | and negate result
+ negxl d0 |
+1:
+ movel a2,d4 | return exponent to d4
+ movel a0,d7
+ andl IMM (0x80000000),d7 | isolate sign bit
+#ifndef __mcoldfire__
+ moveml sp@+,a2-a3 |
+#else
+ movel sp@+,a4
+ movel sp@+,a3
+ movel sp@+,a2
+#endif
+
+| Before rounding normalize so bit #DBL_MANT_DIG is set (we will consider
+| the case of denormalized numbers in the rounding routine itself).
+| As in the addition (not in the subtraction!) we could have set
+| one more bit we check this:
+ btst IMM (DBL_MANT_DIG+1),d0
+ beq 1f
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+ addw IMM (1),d4
+#else
+ lsrl IMM (1),d3
+ btst IMM (0),d2
+ beq 10f
+ bset IMM (31),d3
+10: lsrl IMM (1),d2
+ btst IMM (0),d1
+ beq 11f
+ bset IMM (31),d2
+11: lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 12f
+ bset IMM (31),d1
+12: lsrl IMM (1),d0
+ addl IMM (1),d4
+#endif
+1:
+ lea pc@(Lsubdf$1),a0 | to return from rounding routine
+ PICLEA SYM (_fpCCR),a1 | check the rounding mode
+#ifdef __mcoldfire__
+ clrl d6
+#endif
+ movew a1@(6),d6 | rounding mode in d6
+ beq Lround$to$nearest
+#ifndef __mcoldfire__
+ cmpw IMM (ROUND_TO_PLUS),d6
+#else
+ cmpl IMM (ROUND_TO_PLUS),d6
+#endif
+ bhi Lround$to$minus
+ blt Lround$to$zero
+ bra Lround$to$plus
+Lsubdf$1:
+| Put back the exponent and sign (we don't have overflow). '
+ bclr IMM (DBL_MANT_DIG-1),d0
+#ifndef __mcoldfire__
+ lslw IMM (4),d4 | put exponent back into position
+#else
+ lsll IMM (4),d4 | put exponent back into position
+#endif
+ swap d0 |
+#ifndef __mcoldfire__
+ orw d4,d0 |
+#else
+ orl d4,d0 |
+#endif
+ swap d0 |
+ bra Ladddf$ret
+
+| If one of the numbers was too small (difference of exponents >=
+| DBL_MANT_DIG+1) we return the other (and now we don't have to '
+| check for finiteness or zero).
+Ladddf$a$small:
+#ifndef __mcoldfire__
+ moveml sp@+,a2-a3
+#else
+ movel sp@+,a4
+ movel sp@+,a3
+ movel sp@+,a2
+#endif
+ movel a6@(16),d0
+ movel a6@(20),d1
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | restore data registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 | and return
+ rts
+
+Ladddf$b$small:
+#ifndef __mcoldfire__
+ moveml sp@+,a2-a3
+#else
+ movel sp@+,a4
+ movel sp@+,a3
+ movel sp@+,a2
+#endif
+ movel a6@(8),d0
+ movel a6@(12),d1
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | restore data registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 | and return
+ rts
+
+Ladddf$a$den:
+ movel d7,d4 | d7 contains 0x00200000
+ bra Ladddf$1
+
+Ladddf$b$den:
+ movel d7,d5 | d7 contains 0x00200000
+ notl d6
+ bra Ladddf$2
+
+Ladddf$b:
+| Return b (if a is zero)
+ movel d2,d0
+ movel d3,d1
+ bne 1f | Check if b is -0
+ cmpl IMM (0x80000000),d0
+ bne 1f
+ andl IMM (0x80000000),d7 | Use the sign of a
+ clrl d0
+ bra Ladddf$ret
+Ladddf$a:
+ movel a6@(8),d0
+ movel a6@(12),d1
+1:
+ moveq IMM (ADD),d5
+| Check for NaN and +/-INFINITY.
+ movel d0,d7 |
+ andl IMM (0x80000000),d7 |
+ bclr IMM (31),d0 |
+ cmpl IMM (0x7ff00000),d0 |
+ bge 2f |
+ movel d0,d0 | check for zero, since we don't '
+ bne Ladddf$ret | want to return -0 by mistake
+ bclr IMM (31),d7 |
+ bra Ladddf$ret |
+2:
+ andl IMM (0x000fffff),d0 | check for NaN (nonzero fraction)
+ orl d1,d0 |
+ bne Ld$inop |
+ bra Ld$infty |
+
+Ladddf$ret$1:
+#ifndef __mcoldfire__
+ moveml sp@+,a2-a3 | restore regs and exit
+#else
+ movel sp@+,a4
+ movel sp@+,a3
+ movel sp@+,a2
+#endif
+
+Ladddf$ret:
+| Normal exit.
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+ orl d7,d0 | put sign bit back
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+
+Ladddf$ret$den:
+| Return a denormalized number.
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0 | shift right once more
+ roxrl IMM (1),d1 |
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+#endif
+ bra Ladddf$ret
+
+Ladddf$nf:
+ moveq IMM (ADD),d5
+| This could be faster but it is not worth the effort, since it is not
+| executed very often. We sacrifice speed for clarity here.
+ movel a6@(8),d0 | get the numbers back (remember that we
+ movel a6@(12),d1 | did some processing already)
+ movel a6@(16),d2 |
+ movel a6@(20),d3 |
+ movel IMM (0x7ff00000),d4 | useful constant (INFINITY)
+ movel d0,d7 | save sign bits
+ movel d2,d6 |
+ bclr IMM (31),d0 | clear sign bits
+ bclr IMM (31),d2 |
+| We know that one of them is either NaN of +/-INFINITY
+| Check for NaN (if either one is NaN return NaN)
+ cmpl d4,d0 | check first a (d0)
+ bhi Ld$inop | if d0 > 0x7ff00000 or equal and
+ bne 2f
+ tstl d1 | d1 > 0, a is NaN
+ bne Ld$inop |
+2: cmpl d4,d2 | check now b (d1)
+ bhi Ld$inop |
+ bne 3f
+ tstl d3 |
+ bne Ld$inop |
+3:
+| Now comes the check for +/-INFINITY. We know that both are (maybe not
+| finite) numbers, but we have to check if both are infinite whether we
+| are adding or subtracting them.
+ eorl d7,d6 | to check sign bits
+ bmi 1f
+ andl IMM (0x80000000),d7 | get (common) sign bit
+ bra Ld$infty
+1:
+| We know one (or both) are infinite, so we test for equality between the
+| two numbers (if they are equal they have to be infinite both, so we
+| return NaN).
+ cmpl d2,d0 | are both infinite?
+ bne 1f | if d0 <> d2 they are not equal
+ cmpl d3,d1 | if d0 == d2 test d3 and d1
+ beq Ld$inop | if equal return NaN
+1:
+ andl IMM (0x80000000),d7 | get a's sign bit '
+ cmpl d4,d0 | test now for infinity
+ beq Ld$infty | if a is INFINITY return with this sign
+ bchg IMM (31),d7 | else we know b is INFINITY and has
+ bra Ld$infty | the opposite sign
+
+|=============================================================================
+| __muldf3
+|=============================================================================
+
+| double __muldf3(double, double);
+ FUNC(__muldf3)
+SYM (__muldf3):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@-
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ movel a6@(8),d0 | get a into d0-d1
+ movel a6@(12),d1 |
+ movel a6@(16),d2 | and b into d2-d3
+ movel a6@(20),d3 |
+ movel d0,d7 | d7 will hold the sign of the product
+ eorl d2,d7 |
+ andl IMM (0x80000000),d7 |
+ movel d7,a0 | save sign bit into a0
+ movel IMM (0x7ff00000),d7 | useful constant (+INFINITY)
+ movel d7,d6 | another (mask for fraction)
+ notl d6 |
+ bclr IMM (31),d0 | get rid of a's sign bit '
+ movel d0,d4 |
+ orl d1,d4 |
+ beq Lmuldf$a$0 | branch if a is zero
+ movel d0,d4 |
+ bclr IMM (31),d2 | get rid of b's sign bit '
+ movel d2,d5 |
+ orl d3,d5 |
+ beq Lmuldf$b$0 | branch if b is zero
+ movel d2,d5 |
+ cmpl d7,d0 | is a big?
+ bhi Lmuldf$inop | if a is NaN return NaN
+ beq Lmuldf$a$nf | we still have to check d1 and b ...
+ cmpl d7,d2 | now compare b with INFINITY
+ bhi Lmuldf$inop | is b NaN?
+ beq Lmuldf$b$nf | we still have to check d3 ...
+| Here we have both numbers finite and nonzero (and with no sign bit).
+| Now we get the exponents into d4 and d5.
+ andl d7,d4 | isolate exponent in d4
+ beq Lmuldf$a$den | if exponent zero, have denormalized
+ andl d6,d0 | isolate fraction
+ orl IMM (0x00100000),d0 | and put hidden bit back
+ swap d4 | I like exponents in the first byte
+#ifndef __mcoldfire__
+ lsrw IMM (4),d4 |
+#else
+ lsrl IMM (4),d4 |
+#endif
+Lmuldf$1:
+ andl d7,d5 |
+ beq Lmuldf$b$den |
+ andl d6,d2 |
+ orl IMM (0x00100000),d2 | and put hidden bit back
+ swap d5 |
+#ifndef __mcoldfire__
+ lsrw IMM (4),d5 |
+#else
+ lsrl IMM (4),d5 |
+#endif
+Lmuldf$2: |
+#ifndef __mcoldfire__
+ addw d5,d4 | add exponents
+ subw IMM (D_BIAS+1),d4 | and subtract bias (plus one)
+#else
+ addl d5,d4 | add exponents
+ subl IMM (D_BIAS+1),d4 | and subtract bias (plus one)
+#endif
+
+| We are now ready to do the multiplication. The situation is as follows:
+| both a and b have bit 52 ( bit 20 of d0 and d2) set (even if they were
+| denormalized to start with!), which means that in the product bit 104
+| (which will correspond to bit 8 of the fourth long) is set.
+
+| Here we have to do the product.
+| To do it we have to juggle the registers back and forth, as there are not
+| enough to keep everything in them. So we use the address registers to keep
+| some intermediate data.
+
+#ifndef __mcoldfire__
+ moveml a2-a3,sp@- | save a2 and a3 for temporary use
+#else
+ movel a2,sp@-
+ movel a3,sp@-
+ movel a4,sp@-
+#endif
+ movel IMM (0),a2 | a2 is a null register
+ movel d4,a3 | and a3 will preserve the exponent
+
+| First, shift d2-d3 so bit 20 becomes bit 31:
+#ifndef __mcoldfire__
+ rorl IMM (5),d2 | rotate d2 5 places right
+ swap d2 | and swap it
+ rorl IMM (5),d3 | do the same thing with d3
+ swap d3 |
+ movew d3,d6 | get the rightmost 11 bits of d3
+ andw IMM (0x07ff),d6 |
+ orw d6,d2 | and put them into d2
+ andw IMM (0xf800),d3 | clear those bits in d3
+#else
+ moveq IMM (11),d7 | left shift d2 11 bits
+ lsll d7,d2
+ movel d3,d6 | get a copy of d3
+ lsll d7,d3 | left shift d3 11 bits
+ andl IMM (0xffe00000),d6 | get the top 11 bits of d3
+ moveq IMM (21),d7 | right shift them 21 bits
+ lsrl d7,d6
+ orl d6,d2 | stick them at the end of d2
+#endif
+
+ movel d2,d6 | move b into d6-d7
+ movel d3,d7 | move a into d4-d5
+ movel d0,d4 | and clear d0-d1-d2-d3 (to put result)
+ movel d1,d5 |
+ movel IMM (0),d3 |
+ movel d3,d2 |
+ movel d3,d1 |
+ movel d3,d0 |
+
+| We use a1 as counter:
+ movel IMM (DBL_MANT_DIG-1),a1
+#ifndef __mcoldfire__
+ exg d7,a1
+#else
+ movel d7,a4
+ movel a1,d7
+ movel a4,a1
+#endif
+
+1:
+#ifndef __mcoldfire__
+ exg d7,a1 | put counter back in a1
+#else
+ movel d7,a4
+ movel a1,d7
+ movel a4,a1
+#endif
+ addl d3,d3 | shift sum once left
+ addxl d2,d2 |
+ addxl d1,d1 |
+ addxl d0,d0 |
+ addl d7,d7 |
+ addxl d6,d6 |
+ bcc 2f | if bit clear skip the following
+#ifndef __mcoldfire__
+ exg d7,a2 |
+#else
+ movel d7,a4
+ movel a2,d7
+ movel a4,a2
+#endif
+ addl d5,d3 | else add a to the sum
+ addxl d4,d2 |
+ addxl d7,d1 |
+ addxl d7,d0 |
+#ifndef __mcoldfire__
+ exg d7,a2 |
+#else
+ movel d7,a4
+ movel a2,d7
+ movel a4,a2
+#endif
+2:
+#ifndef __mcoldfire__
+ exg d7,a1 | put counter in d7
+ dbf d7,1b | decrement and branch
+#else
+ movel d7,a4
+ movel a1,d7
+ movel a4,a1
+ subql IMM (1),d7
+ bpl 1b
+#endif
+
+ movel a3,d4 | restore exponent
+#ifndef __mcoldfire__
+ moveml sp@+,a2-a3
+#else
+ movel sp@+,a4
+ movel sp@+,a3
+ movel sp@+,a2
+#endif
+
+| Now we have the product in d0-d1-d2-d3, with bit 8 of d0 set. The
+| first thing to do now is to normalize it so bit 8 becomes bit
+| DBL_MANT_DIG-32 (to do the rounding); later we will shift right.
+ swap d0
+ swap d1
+ movew d1,d0
+ swap d2
+ movew d2,d1
+ swap d3
+ movew d3,d2
+ movew IMM (0),d3
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+#else
+ moveq IMM (29),d6
+ lsrl IMM (3),d3
+ movel d2,d7
+ lsll d6,d7
+ orl d7,d3
+ lsrl IMM (3),d2
+ movel d1,d7
+ lsll d6,d7
+ orl d7,d2
+ lsrl IMM (3),d1
+ movel d0,d7
+ lsll d6,d7
+ orl d7,d1
+ lsrl IMM (3),d0
+#endif
+
+| Now round, check for over- and underflow, and exit.
+ movel a0,d7 | get sign bit back into d7
+ moveq IMM (MULTIPLY),d5
+
+ btst IMM (DBL_MANT_DIG+1-32),d0
+ beq Lround$exit
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ addw IMM (1),d4
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+ addl IMM (1),d4
+#endif
+ bra Lround$exit
+
+Lmuldf$inop:
+ moveq IMM (MULTIPLY),d5
+ bra Ld$inop
+
+Lmuldf$b$nf:
+ moveq IMM (MULTIPLY),d5
+ movel a0,d7 | get sign bit back into d7
+ tstl d3 | we know d2 == 0x7ff00000, so check d3
+ bne Ld$inop | if d3 <> 0 b is NaN
+ bra Ld$overflow | else we have overflow (since a is finite)
+
+Lmuldf$a$nf:
+ moveq IMM (MULTIPLY),d5
+ movel a0,d7 | get sign bit back into d7
+ tstl d1 | we know d0 == 0x7ff00000, so check d1
+ bne Ld$inop | if d1 <> 0 a is NaN
+ bra Ld$overflow | else signal overflow
+
+| If either number is zero return zero, unless the other is +/-INFINITY or
+| NaN, in which case we return NaN.
+Lmuldf$b$0:
+ moveq IMM (MULTIPLY),d5
+#ifndef __mcoldfire__
+ exg d2,d0 | put b (==0) into d0-d1
+ exg d3,d1 | and a (with sign bit cleared) into d2-d3
+ movel a0,d0 | set result sign
+#else
+ movel d0,d2 | put a into d2-d3
+ movel d1,d3
+ movel a0,d0 | put result zero into d0-d1
+ movq IMM(0),d1
+#endif
+ bra 1f
+Lmuldf$a$0:
+ movel a0,d0 | set result sign
+ movel a6@(16),d2 | put b into d2-d3 again
+ movel a6@(20),d3 |
+ bclr IMM (31),d2 | clear sign bit
+1: cmpl IMM (0x7ff00000),d2 | check for non-finiteness
+ bge Ld$inop | in case NaN or +/-INFINITY return NaN
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+
+| If a number is denormalized we put an exponent of 1 but do not put the
+| hidden bit back into the fraction; instead we shift left until bit 21
+| (the hidden bit) is set, adjusting the exponent accordingly. We do this
+| to ensure that the product of the fractions is close to 1.
+Lmuldf$a$den:
+ movel IMM (1),d4
+ andl d6,d0
+1: addl d1,d1 | shift a left until bit 20 is set
+ addxl d0,d0 |
+#ifndef __mcoldfire__
+ subw IMM (1),d4 | and adjust exponent
+#else
+ subl IMM (1),d4 | and adjust exponent
+#endif
+ btst IMM (20),d0 |
+ bne Lmuldf$1 |
+ bra 1b
+
+Lmuldf$b$den:
+ movel IMM (1),d5
+ andl d6,d2
+1: addl d3,d3 | shift b left until bit 20 is set
+ addxl d2,d2 |
+#ifndef __mcoldfire__
+ subw IMM (1),d5 | and adjust exponent
+#else
+ subql IMM (1),d5 | and adjust exponent
+#endif
+ btst IMM (20),d2 |
+ bne Lmuldf$2 |
+ bra 1b
+
+
+|=============================================================================
+| __divdf3
+|=============================================================================
+
+| double __divdf3(double, double);
+ FUNC(__divdf3)
+SYM (__divdf3):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@-
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ movel a6@(8),d0 | get a into d0-d1
+ movel a6@(12),d1 |
+ movel a6@(16),d2 | and b into d2-d3
+ movel a6@(20),d3 |
+ movel d0,d7 | d7 will hold the sign of the result
+ eorl d2,d7 |
+ andl IMM (0x80000000),d7
+ movel d7,a0 | save sign into a0
+ movel IMM (0x7ff00000),d7 | useful constant (+INFINITY)
+ movel d7,d6 | another (mask for fraction)
+ notl d6 |
+ bclr IMM (31),d0 | get rid of a's sign bit '
+ movel d0,d4 |
+ orl d1,d4 |
+ beq Ldivdf$a$0 | branch if a is zero
+ movel d0,d4 |
+ bclr IMM (31),d2 | get rid of b's sign bit '
+ movel d2,d5 |
+ orl d3,d5 |
+ beq Ldivdf$b$0 | branch if b is zero
+ movel d2,d5
+ cmpl d7,d0 | is a big?
+ bhi Ldivdf$inop | if a is NaN return NaN
+ beq Ldivdf$a$nf | if d0 == 0x7ff00000 we check d1
+ cmpl d7,d2 | now compare b with INFINITY
+ bhi Ldivdf$inop | if b is NaN return NaN
+ beq Ldivdf$b$nf | if d2 == 0x7ff00000 we check d3
+| Here we have both numbers finite and nonzero (and with no sign bit).
+| Now we get the exponents into d4 and d5 and normalize the numbers to
+| ensure that the ratio of the fractions is around 1. We do this by
+| making sure that both numbers have bit #DBL_MANT_DIG-32-1 (hidden bit)
+| set, even if they were denormalized to start with.
+| Thus, the result will satisfy: 2 > result > 1/2.
+ andl d7,d4 | and isolate exponent in d4
+ beq Ldivdf$a$den | if exponent is zero we have a denormalized
+ andl d6,d0 | and isolate fraction
+ orl IMM (0x00100000),d0 | and put hidden bit back
+ swap d4 | I like exponents in the first byte
+#ifndef __mcoldfire__
+ lsrw IMM (4),d4 |
+#else
+ lsrl IMM (4),d4 |
+#endif
+Ldivdf$1: |
+ andl d7,d5 |
+ beq Ldivdf$b$den |
+ andl d6,d2 |
+ orl IMM (0x00100000),d2
+ swap d5 |
+#ifndef __mcoldfire__
+ lsrw IMM (4),d5 |
+#else
+ lsrl IMM (4),d5 |
+#endif
+Ldivdf$2: |
+#ifndef __mcoldfire__
+ subw d5,d4 | subtract exponents
+ addw IMM (D_BIAS),d4 | and add bias
+#else
+ subl d5,d4 | subtract exponents
+ addl IMM (D_BIAS),d4 | and add bias
+#endif
+
+| We are now ready to do the division. We have prepared things in such a way
+| that the ratio of the fractions will be less than 2 but greater than 1/2.
+| At this point the registers in use are:
+| d0-d1 hold a (first operand, bit DBL_MANT_DIG-32=0, bit
+| DBL_MANT_DIG-1-32=1)
+| d2-d3 hold b (second operand, bit DBL_MANT_DIG-32=1)
+| d4 holds the difference of the exponents, corrected by the bias
+| a0 holds the sign of the ratio
+
+| To do the rounding correctly we need to keep information about the
+| nonsignificant bits. One way to do this would be to do the division
+| using four registers; another is to use two registers (as originally
+| I did), but use a sticky bit to preserve information about the
+| fractional part. Note that we can keep that info in a1, which is not
+| used.
+ movel IMM (0),d6 | d6-d7 will hold the result
+ movel d6,d7 |
+ movel IMM (0),a1 | and a1 will hold the sticky bit
+
+ movel IMM (DBL_MANT_DIG-32+1),d5
+
+1: cmpl d0,d2 | is a < b?
+ bhi 3f | if b > a skip the following
+ beq 4f | if d0==d2 check d1 and d3
+2: subl d3,d1 |
+ subxl d2,d0 | a <-- a - b
+ bset d5,d6 | set the corresponding bit in d6
+3: addl d1,d1 | shift a by 1
+ addxl d0,d0 |
+#ifndef __mcoldfire__
+ dbra d5,1b | and branch back
+#else
+ subql IMM (1), d5
+ bpl 1b
+#endif
+ bra 5f
+4: cmpl d1,d3 | here d0==d2, so check d1 and d3
+ bhi 3b | if d1 > d2 skip the subtraction
+ bra 2b | else go do it
+5:
+| Here we have to start setting the bits in the second long.
+ movel IMM (31),d5 | again d5 is counter
+
+1: cmpl d0,d2 | is a < b?
+ bhi 3f | if b > a skip the following
+ beq 4f | if d0==d2 check d1 and d3
+2: subl d3,d1 |
+ subxl d2,d0 | a <-- a - b
+ bset d5,d7 | set the corresponding bit in d7
+3: addl d1,d1 | shift a by 1
+ addxl d0,d0 |
+#ifndef __mcoldfire__
+ dbra d5,1b | and branch back
+#else
+ subql IMM (1), d5
+ bpl 1b
+#endif
+ bra 5f
+4: cmpl d1,d3 | here d0==d2, so check d1 and d3
+ bhi 3b | if d1 > d2 skip the subtraction
+ bra 2b | else go do it
+5:
+| Now go ahead checking until we hit a one, which we store in d2.
+ movel IMM (DBL_MANT_DIG),d5
+1: cmpl d2,d0 | is a < b?
+ bhi 4f | if b < a, exit
+ beq 3f | if d0==d2 check d1 and d3
+2: addl d1,d1 | shift a by 1
+ addxl d0,d0 |
+#ifndef __mcoldfire__
+ dbra d5,1b | and branch back
+#else
+ subql IMM (1), d5
+ bpl 1b
+#endif
+ movel IMM (0),d2 | here no sticky bit was found
+ movel d2,d3
+ bra 5f
+3: cmpl d1,d3 | here d0==d2, so check d1 and d3
+ bhi 2b | if d1 > d2 go back
+4:
+| Here put the sticky bit in d2-d3 (in the position which actually corresponds
+| to it; if you don't do this the algorithm loses in some cases). '
+ movel IMM (0),d2
+ movel d2,d3
+#ifndef __mcoldfire__
+ subw IMM (DBL_MANT_DIG),d5
+ addw IMM (63),d5
+ cmpw IMM (31),d5
+#else
+ subl IMM (DBL_MANT_DIG),d5
+ addl IMM (63),d5
+ cmpl IMM (31),d5
+#endif
+ bhi 2f
+1: bset d5,d3
+ bra 5f
+#ifndef __mcoldfire__
+ subw IMM (32),d5
+#else
+ subl IMM (32),d5
+#endif
+2: bset d5,d2
+5:
+| Finally we are finished! Move the longs in the address registers to
+| their final destination:
+ movel d6,d0
+ movel d7,d1
+ movel IMM (0),d3
+
+| Here we have finished the division, with the result in d0-d1-d2-d3, with
+| 2^21 <= d6 < 2^23. Thus bit 23 is not set, but bit 22 could be set.
+| If it is not, then definitely bit 21 is set. Normalize so bit 22 is
+| not set:
+ btst IMM (DBL_MANT_DIG-32+1),d0
+ beq 1f
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ roxrl IMM (1),d2
+ roxrl IMM (1),d3
+ addw IMM (1),d4
+#else
+ lsrl IMM (1),d3
+ btst IMM (0),d2
+ beq 10f
+ bset IMM (31),d3
+10: lsrl IMM (1),d2
+ btst IMM (0),d1
+ beq 11f
+ bset IMM (31),d2
+11: lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 12f
+ bset IMM (31),d1
+12: lsrl IMM (1),d0
+ addl IMM (1),d4
+#endif
+1:
+| Now round, check for over- and underflow, and exit.
+ movel a0,d7 | restore sign bit to d7
+ moveq IMM (DIVIDE),d5
+ bra Lround$exit
+
+Ldivdf$inop:
+ moveq IMM (DIVIDE),d5
+ bra Ld$inop
+
+Ldivdf$a$0:
+| If a is zero check to see whether b is zero also. In that case return
+| NaN; then check if b is NaN, and return NaN also in that case. Else
+| return a properly signed zero.
+ moveq IMM (DIVIDE),d5
+ bclr IMM (31),d2 |
+ movel d2,d4 |
+ orl d3,d4 |
+ beq Ld$inop | if b is also zero return NaN
+ cmpl IMM (0x7ff00000),d2 | check for NaN
+ bhi Ld$inop |
+ blt 1f |
+ tstl d3 |
+ bne Ld$inop |
+1: movel a0,d0 | else return signed zero
+ moveq IMM(0),d1 |
+ PICLEA SYM (_fpCCR),a0 | clear exception flags
+ movew IMM (0),a0@ |
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 |
+#else
+ moveml sp@,d2-d7 |
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 |
+ rts |
+
+Ldivdf$b$0:
+ moveq IMM (DIVIDE),d5
+| If we got here a is not zero. Check if a is NaN; in that case return NaN,
+| else return +/-INFINITY. Remember that a is in d0 with the sign bit
+| cleared already.
+ movel a0,d7 | put a's sign bit back in d7 '
+ cmpl IMM (0x7ff00000),d0 | compare d0 with INFINITY
+ bhi Ld$inop | if larger it is NaN
+ tstl d1 |
+ bne Ld$inop |
+ bra Ld$div$0 | else signal DIVIDE_BY_ZERO
+
+Ldivdf$b$nf:
+ moveq IMM (DIVIDE),d5
+| If d2 == 0x7ff00000 we have to check d3.
+ tstl d3 |
+ bne Ld$inop | if d3 <> 0, b is NaN
+ bra Ld$underflow | else b is +/-INFINITY, so signal underflow
+
+Ldivdf$a$nf:
+ moveq IMM (DIVIDE),d5
+| If d0 == 0x7ff00000 we have to check d1.
+ tstl d1 |
+ bne Ld$inop | if d1 <> 0, a is NaN
+| If a is INFINITY we have to check b
+ cmpl d7,d2 | compare b with INFINITY
+ bge Ld$inop | if b is NaN or INFINITY return NaN
+ tstl d3 |
+ bne Ld$inop |
+ bra Ld$overflow | else return overflow
+
+| If a number is denormalized we put an exponent of 1 but do not put the
+| bit back into the fraction.
+Ldivdf$a$den:
+ movel IMM (1),d4
+ andl d6,d0
+1: addl d1,d1 | shift a left until bit 20 is set
+ addxl d0,d0
+#ifndef __mcoldfire__
+ subw IMM (1),d4 | and adjust exponent
+#else
+ subl IMM (1),d4 | and adjust exponent
+#endif
+ btst IMM (DBL_MANT_DIG-32-1),d0
+ bne Ldivdf$1
+ bra 1b
+
+Ldivdf$b$den:
+ movel IMM (1),d5
+ andl d6,d2
+1: addl d3,d3 | shift b left until bit 20 is set
+ addxl d2,d2
+#ifndef __mcoldfire__
+ subw IMM (1),d5 | and adjust exponent
+#else
+ subql IMM (1),d5 | and adjust exponent
+#endif
+ btst IMM (DBL_MANT_DIG-32-1),d2
+ bne Ldivdf$2
+ bra 1b
+
+Lround$exit:
+| This is a common exit point for __muldf3 and __divdf3. When they enter
+| this point the sign of the result is in d7, the result in d0-d1, normalized
+| so that 2^21 <= d0 < 2^22, and the exponent is in the lower byte of d4.
+
+| First check for underlow in the exponent:
+#ifndef __mcoldfire__
+ cmpw IMM (-DBL_MANT_DIG-1),d4
+#else
+ cmpl IMM (-DBL_MANT_DIG-1),d4
+#endif
+ blt Ld$underflow
+| It could happen that the exponent is less than 1, in which case the
+| number is denormalized. In this case we shift right and adjust the
+| exponent until it becomes 1 or the fraction is zero (in the latter case
+| we signal underflow and return zero).
+ movel d7,a0 |
+ movel IMM (0),d6 | use d6-d7 to collect bits flushed right
+ movel d6,d7 | use d6-d7 to collect bits flushed right
+#ifndef __mcoldfire__
+ cmpw IMM (1),d4 | if the exponent is less than 1 we
+#else
+ cmpl IMM (1),d4 | if the exponent is less than 1 we
+#endif
+ bge 2f | have to shift right (denormalize)
+1:
+#ifndef __mcoldfire__
+ addw IMM (1),d4 | adjust the exponent
+ lsrl IMM (1),d0 | shift right once
+ roxrl IMM (1),d1 |
+ roxrl IMM (1),d2 |
+ roxrl IMM (1),d3 |
+ roxrl IMM (1),d6 |
+ roxrl IMM (1),d7 |
+ cmpw IMM (1),d4 | is the exponent 1 already?
+#else
+ addl IMM (1),d4 | adjust the exponent
+ lsrl IMM (1),d7
+ btst IMM (0),d6
+ beq 13f
+ bset IMM (31),d7
+13: lsrl IMM (1),d6
+ btst IMM (0),d3
+ beq 14f
+ bset IMM (31),d6
+14: lsrl IMM (1),d3
+ btst IMM (0),d2
+ beq 10f
+ bset IMM (31),d3
+10: lsrl IMM (1),d2
+ btst IMM (0),d1
+ beq 11f
+ bset IMM (31),d2
+11: lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 12f
+ bset IMM (31),d1
+12: lsrl IMM (1),d0
+ cmpl IMM (1),d4 | is the exponent 1 already?
+#endif
+ beq 2f | if not loop back
+ bra 1b |
+ bra Ld$underflow | safety check, shouldn't execute '
+2: orl d6,d2 | this is a trick so we don't lose '
+ orl d7,d3 | the bits which were flushed right
+ movel a0,d7 | get back sign bit into d7
+| Now call the rounding routine (which takes care of denormalized numbers):
+ lea pc@(Lround$0),a0 | to return from rounding routine
+ PICLEA SYM (_fpCCR),a1 | check the rounding mode
+#ifdef __mcoldfire__
+ clrl d6
+#endif
+ movew a1@(6),d6 | rounding mode in d6
+ beq Lround$to$nearest
+#ifndef __mcoldfire__
+ cmpw IMM (ROUND_TO_PLUS),d6
+#else
+ cmpl IMM (ROUND_TO_PLUS),d6
+#endif
+ bhi Lround$to$minus
+ blt Lround$to$zero
+ bra Lround$to$plus
+Lround$0:
+| Here we have a correctly rounded result (either normalized or denormalized).
+
+| Here we should have either a normalized number or a denormalized one, and
+| the exponent is necessarily larger or equal to 1 (so we don't have to '
+| check again for underflow!). We have to check for overflow or for a
+| denormalized number (which also signals underflow).
+| Check for overflow (i.e., exponent >= 0x7ff).
+#ifndef __mcoldfire__
+ cmpw IMM (0x07ff),d4
+#else
+ cmpl IMM (0x07ff),d4
+#endif
+ bge Ld$overflow
+| Now check for a denormalized number (exponent==0):
+ movew d4,d4
+ beq Ld$den
+1:
+| Put back the exponents and sign and return.
+#ifndef __mcoldfire__
+ lslw IMM (4),d4 | exponent back to fourth byte
+#else
+ lsll IMM (4),d4 | exponent back to fourth byte
+#endif
+ bclr IMM (DBL_MANT_DIG-32-1),d0
+ swap d0 | and put back exponent
+#ifndef __mcoldfire__
+ orw d4,d0 |
+#else
+ orl d4,d0 |
+#endif
+ swap d0 |
+ orl d7,d0 | and sign also
+
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+
+|=============================================================================
+| __negdf2
+|=============================================================================
+
+| double __negdf2(double, double);
+ FUNC(__negdf2)
+SYM (__negdf2):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@-
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ moveq IMM (NEGATE),d5
+ movel a6@(8),d0 | get number to negate in d0-d1
+ movel a6@(12),d1 |
+ bchg IMM (31),d0 | negate
+ movel d0,d2 | make a positive copy (for the tests)
+ bclr IMM (31),d2 |
+ movel d2,d4 | check for zero
+ orl d1,d4 |
+ beq 2f | if zero (either sign) return +zero
+ cmpl IMM (0x7ff00000),d2 | compare to +INFINITY
+ blt 1f | if finite, return
+ bhi Ld$inop | if larger (fraction not zero) is NaN
+ tstl d1 | if d2 == 0x7ff00000 check d1
+ bne Ld$inop |
+ movel d0,d7 | else get sign and return INFINITY
+ andl IMM (0x80000000),d7
+ bra Ld$infty
+1: PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+2: bclr IMM (31),d0
+ bra 1b
+
+|=============================================================================
+| __cmpdf2
+|=============================================================================
+
+GREATER = 1
+LESS = -1
+EQUAL = 0
+
+| int __cmpdf2_internal(double, double, int);
+SYM (__cmpdf2_internal):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@- | save registers
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ moveq IMM (COMPARE),d5
+ movel a6@(8),d0 | get first operand
+ movel a6@(12),d1 |
+ movel a6@(16),d2 | get second operand
+ movel a6@(20),d3 |
+| First check if a and/or b are (+/-) zero and in that case clear
+| the sign bit.
+ movel d0,d6 | copy signs into d6 (a) and d7(b)
+ bclr IMM (31),d0 | and clear signs in d0 and d2
+ movel d2,d7 |
+ bclr IMM (31),d2 |
+ cmpl IMM (0x7ff00000),d0 | check for a == NaN
+ bhi Lcmpd$inop | if d0 > 0x7ff00000, a is NaN
+ beq Lcmpdf$a$nf | if equal can be INFINITY, so check d1
+ movel d0,d4 | copy into d4 to test for zero
+ orl d1,d4 |
+ beq Lcmpdf$a$0 |
+Lcmpdf$0:
+ cmpl IMM (0x7ff00000),d2 | check for b == NaN
+ bhi Lcmpd$inop | if d2 > 0x7ff00000, b is NaN
+ beq Lcmpdf$b$nf | if equal can be INFINITY, so check d3
+ movel d2,d4 |
+ orl d3,d4 |
+ beq Lcmpdf$b$0 |
+Lcmpdf$1:
+| Check the signs
+ eorl d6,d7
+ bpl 1f
+| If the signs are not equal check if a >= 0
+ tstl d6
+ bpl Lcmpdf$a$gt$b | if (a >= 0 && b < 0) => a > b
+ bmi Lcmpdf$b$gt$a | if (a < 0 && b >= 0) => a < b
+1:
+| If the signs are equal check for < 0
+ tstl d6
+ bpl 1f
+| If both are negative exchange them
+#ifndef __mcoldfire__
+ exg d0,d2
+ exg d1,d3
+#else
+ movel d0,d7
+ movel d2,d0
+ movel d7,d2
+ movel d1,d7
+ movel d3,d1
+ movel d7,d3
+#endif
+1:
+| Now that they are positive we just compare them as longs (does this also
+| work for denormalized numbers?).
+ cmpl d0,d2
+ bhi Lcmpdf$b$gt$a | |b| > |a|
+ bne Lcmpdf$a$gt$b | |b| < |a|
+| If we got here d0 == d2, so we compare d1 and d3.
+ cmpl d1,d3
+ bhi Lcmpdf$b$gt$a | |b| > |a|
+ bne Lcmpdf$a$gt$b | |b| < |a|
+| If we got here a == b.
+ movel IMM (EQUAL),d0
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | put back the registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+Lcmpdf$a$gt$b:
+ movel IMM (GREATER),d0
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | put back the registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+Lcmpdf$b$gt$a:
+ movel IMM (LESS),d0
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | put back the registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+
+Lcmpdf$a$0:
+ bclr IMM (31),d6
+ bra Lcmpdf$0
+Lcmpdf$b$0:
+ bclr IMM (31),d7
+ bra Lcmpdf$1
+
+Lcmpdf$a$nf:
+ tstl d1
+ bne Ld$inop
+ bra Lcmpdf$0
+
+Lcmpdf$b$nf:
+ tstl d3
+ bne Ld$inop
+ bra Lcmpdf$1
+
+Lcmpd$inop:
+ movl a6@(24),d0
+ moveq IMM (INEXACT_RESULT+INVALID_OPERATION),d7
+ moveq IMM (DOUBLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+| int __cmpdf2(double, double);
+ FUNC(__cmpdf2)
+SYM (__cmpdf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+
+|=============================================================================
+| rounding routines
+|=============================================================================
+
+| The rounding routines expect the number to be normalized in registers
+| d0-d1-d2-d3, with the exponent in register d4. They assume that the
+| exponent is larger or equal to 1. They return a properly normalized number
+| if possible, and a denormalized number otherwise. The exponent is returned
+| in d4.
+
+Lround$to$nearest:
+| We now normalize as suggested by D. Knuth ("Seminumerical Algorithms"):
+| Here we assume that the exponent is not too small (this should be checked
+| before entering the rounding routine), but the number could be denormalized.
+
+| Check for denormalized numbers:
+1: btst IMM (DBL_MANT_DIG-32),d0
+ bne 2f | if set the number is normalized
+| Normalize shifting left until bit #DBL_MANT_DIG-32 is set or the exponent
+| is one (remember that a denormalized number corresponds to an
+| exponent of -D_BIAS+1).
+#ifndef __mcoldfire__
+ cmpw IMM (1),d4 | remember that the exponent is at least one
+#else
+ cmpl IMM (1),d4 | remember that the exponent is at least one
+#endif
+ beq 2f | an exponent of one means denormalized
+ addl d3,d3 | else shift and adjust the exponent
+ addxl d2,d2 |
+ addxl d1,d1 |
+ addxl d0,d0 |
+#ifndef __mcoldfire__
+ dbra d4,1b |
+#else
+ subql IMM (1), d4
+ bpl 1b
+#endif
+2:
+| Now round: we do it as follows: after the shifting we can write the
+| fraction part as f + delta, where 1 < f < 2^25, and 0 <= delta <= 2.
+| If delta < 1, do nothing. If delta > 1, add 1 to f.
+| If delta == 1, we make sure the rounded number will be even (odd?)
+| (after shifting).
+ btst IMM (0),d1 | is delta < 1?
+ beq 2f | if so, do not do anything
+ orl d2,d3 | is delta == 1?
+ bne 1f | if so round to even
+ movel d1,d3 |
+ andl IMM (2),d3 | bit 1 is the last significant bit
+ movel IMM (0),d2 |
+ addl d3,d1 |
+ addxl d2,d0 |
+ bra 2f |
+1: movel IMM (1),d3 | else add 1
+ movel IMM (0),d2 |
+ addl d3,d1 |
+ addxl d2,d0
+| Shift right once (because we used bit #DBL_MANT_DIG-32!).
+2:
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+#endif
+
+| Now check again bit #DBL_MANT_DIG-32 (rounding could have produced a
+| 'fraction overflow' ...).
+ btst IMM (DBL_MANT_DIG-32),d0
+ beq 1f
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ addw IMM (1),d4
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+ addl IMM (1),d4
+#endif
+1:
+| If bit #DBL_MANT_DIG-32-1 is clear we have a denormalized number, so we
+| have to put the exponent to zero and return a denormalized number.
+ btst IMM (DBL_MANT_DIG-32-1),d0
+ beq 1f
+ jmp a0@
+1: movel IMM (0),d4
+ jmp a0@
+
+Lround$to$zero:
+Lround$to$plus:
+Lround$to$minus:
+ jmp a0@
+#endif /* L_double */
+
+#ifdef L_float
+
+ .globl SYM (_fpCCR)
+ .globl $_exception_handler
+
+QUIET_NaN = 0xffffffff
+SIGNL_NaN = 0x7f800001
+INFINITY = 0x7f800000
+
+F_MAX_EXP = 0xff
+F_BIAS = 126
+FLT_MAX_EXP = F_MAX_EXP - F_BIAS
+FLT_MIN_EXP = 1 - F_BIAS
+FLT_MANT_DIG = 24
+
+INEXACT_RESULT = 0x0001
+UNDERFLOW = 0x0002
+OVERFLOW = 0x0004
+DIVIDE_BY_ZERO = 0x0008
+INVALID_OPERATION = 0x0010
+
+SINGLE_FLOAT = 1
+
+NOOP = 0
+ADD = 1
+MULTIPLY = 2
+DIVIDE = 3
+NEGATE = 4
+COMPARE = 5
+EXTENDSFDF = 6
+TRUNCDFSF = 7
+
+UNKNOWN = -1
+ROUND_TO_NEAREST = 0 | round result to nearest representable value
+ROUND_TO_ZERO = 1 | round result towards zero
+ROUND_TO_PLUS = 2 | round result towards plus infinity
+ROUND_TO_MINUS = 3 | round result towards minus infinity
+
+| Entry points:
+
+ .globl SYM (__addsf3)
+ .globl SYM (__subsf3)
+ .globl SYM (__mulsf3)
+ .globl SYM (__divsf3)
+ .globl SYM (__negsf2)
+ .globl SYM (__cmpsf2)
+ .globl SYM (__cmpsf2_internal)
+ .hidden SYM (__cmpsf2_internal)
+
+| These are common routines to return and signal exceptions.
+
+ .text
+ .even
+
+Lf$den:
+| Return and signal a denormalized number
+ orl d7,d0
+ moveq IMM (INEXACT_RESULT+UNDERFLOW),d7
+ moveq IMM (SINGLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Lf$infty:
+Lf$overflow:
+| Return a properly signed INFINITY and set the exception flags
+ movel IMM (INFINITY),d0
+ orl d7,d0
+ moveq IMM (INEXACT_RESULT+OVERFLOW),d7
+ moveq IMM (SINGLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Lf$underflow:
+| Return 0 and set the exception flags
+ moveq IMM (0),d0
+ moveq IMM (INEXACT_RESULT+UNDERFLOW),d7
+ moveq IMM (SINGLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Lf$inop:
+| Return a quiet NaN and set the exception flags
+ movel IMM (QUIET_NaN),d0
+ moveq IMM (INEXACT_RESULT+INVALID_OPERATION),d7
+ moveq IMM (SINGLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+Lf$div$0:
+| Return a properly signed INFINITY and set the exception flags
+ movel IMM (INFINITY),d0
+ orl d7,d0
+ moveq IMM (INEXACT_RESULT+DIVIDE_BY_ZERO),d7
+ moveq IMM (SINGLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+|=============================================================================
+|=============================================================================
+| single precision routines
+|=============================================================================
+|=============================================================================
+
+| A single precision floating point number (float) has the format:
+|
+| struct _float {
+| unsigned int sign : 1; /* sign bit */
+| unsigned int exponent : 8; /* exponent, shifted by 126 */
+| unsigned int fraction : 23; /* fraction */
+| } float;
+|
+| Thus sizeof(float) = 4 (32 bits).
+|
+| All the routines are callable from C programs, and return the result
+| in the single register d0. They also preserve all registers except
+| d0-d1 and a0-a1.
+
+|=============================================================================
+| __subsf3
+|=============================================================================
+
+| float __subsf3(float, float);
+ FUNC(__subsf3)
+SYM (__subsf3):
+ bchg IMM (31),sp@(8) | change sign of second operand
+ | and fall through
+|=============================================================================
+| __addsf3
+|=============================================================================
+
+| float __addsf3(float, float);
+ FUNC(__addsf3)
+SYM (__addsf3):
+#ifndef __mcoldfire__
+ link a6,IMM (0) | everything will be done in registers
+ moveml d2-d7,sp@- | save all data registers but d0-d1
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ movel a6@(8),d0 | get first operand
+ movel a6@(12),d1 | get second operand
+ movel d0,a0 | get d0's sign bit '
+ addl d0,d0 | check and clear sign bit of a
+ beq Laddsf$b | if zero return second operand
+ movel d1,a1 | save b's sign bit '
+ addl d1,d1 | get rid of sign bit
+ beq Laddsf$a | if zero return first operand
+
+| Get the exponents and check for denormalized and/or infinity.
+
+ movel IMM (0x00ffffff),d4 | mask to get fraction
+ movel IMM (0x01000000),d5 | mask to put hidden bit back
+
+ movel d0,d6 | save a to get exponent
+ andl d4,d0 | get fraction in d0
+ notl d4 | make d4 into a mask for the exponent
+ andl d4,d6 | get exponent in d6
+ beq Laddsf$a$den | branch if a is denormalized
+ cmpl d4,d6 | check for INFINITY or NaN
+ beq Laddsf$nf
+ swap d6 | put exponent into first word
+ orl d5,d0 | and put hidden bit back
+Laddsf$1:
+| Now we have a's exponent in d6 (second byte) and the mantissa in d0. '
+ movel d1,d7 | get exponent in d7
+ andl d4,d7 |
+ beq Laddsf$b$den | branch if b is denormalized
+ cmpl d4,d7 | check for INFINITY or NaN
+ beq Laddsf$nf
+ swap d7 | put exponent into first word
+ notl d4 | make d4 into a mask for the fraction
+ andl d4,d1 | get fraction in d1
+ orl d5,d1 | and put hidden bit back
+Laddsf$2:
+| Now we have b's exponent in d7 (second byte) and the mantissa in d1. '
+
+| Note that the hidden bit corresponds to bit #FLT_MANT_DIG-1, and we
+| shifted right once, so bit #FLT_MANT_DIG is set (so we have one extra
+| bit).
+
+ movel d1,d2 | move b to d2, since we want to use
+ | two registers to do the sum
+ movel IMM (0),d1 | and clear the new ones
+ movel d1,d3 |
+
+| Here we shift the numbers in registers d0 and d1 so the exponents are the
+| same, and put the largest exponent in d6. Note that we are using two
+| registers for each number (see the discussion by D. Knuth in "Seminumerical
+| Algorithms").
+#ifndef __mcoldfire__
+ cmpw d6,d7 | compare exponents
+#else
+ cmpl d6,d7 | compare exponents
+#endif
+ beq Laddsf$3 | if equal don't shift '
+ bhi 5f | branch if second exponent largest
+1:
+ subl d6,d7 | keep the largest exponent
+ negl d7
+#ifndef __mcoldfire__
+ lsrw IMM (8),d7 | put difference in lower byte
+#else
+ lsrl IMM (8),d7 | put difference in lower byte
+#endif
+| if difference is too large we don't shift (actually, we can just exit) '
+#ifndef __mcoldfire__
+ cmpw IMM (FLT_MANT_DIG+2),d7
+#else
+ cmpl IMM (FLT_MANT_DIG+2),d7
+#endif
+ bge Laddsf$b$small
+#ifndef __mcoldfire__
+ cmpw IMM (16),d7 | if difference >= 16 swap
+#else
+ cmpl IMM (16),d7 | if difference >= 16 swap
+#endif
+ bge 4f
+2:
+#ifndef __mcoldfire__
+ subw IMM (1),d7
+#else
+ subql IMM (1), d7
+#endif
+3:
+#ifndef __mcoldfire__
+ lsrl IMM (1),d2 | shift right second operand
+ roxrl IMM (1),d3
+ dbra d7,3b
+#else
+ lsrl IMM (1),d3
+ btst IMM (0),d2
+ beq 10f
+ bset IMM (31),d3
+10: lsrl IMM (1),d2
+ subql IMM (1), d7
+ bpl 3b
+#endif
+ bra Laddsf$3
+4:
+ movew d2,d3
+ swap d3
+ movew d3,d2
+ swap d2
+#ifndef __mcoldfire__
+ subw IMM (16),d7
+#else
+ subl IMM (16),d7
+#endif
+ bne 2b | if still more bits, go back to normal case
+ bra Laddsf$3
+5:
+#ifndef __mcoldfire__
+ exg d6,d7 | exchange the exponents
+#else
+ eorl d6,d7
+ eorl d7,d6
+ eorl d6,d7
+#endif
+ subl d6,d7 | keep the largest exponent
+ negl d7 |
+#ifndef __mcoldfire__
+ lsrw IMM (8),d7 | put difference in lower byte
+#else
+ lsrl IMM (8),d7 | put difference in lower byte
+#endif
+| if difference is too large we don't shift (and exit!) '
+#ifndef __mcoldfire__
+ cmpw IMM (FLT_MANT_DIG+2),d7
+#else
+ cmpl IMM (FLT_MANT_DIG+2),d7
+#endif
+ bge Laddsf$a$small
+#ifndef __mcoldfire__
+ cmpw IMM (16),d7 | if difference >= 16 swap
+#else
+ cmpl IMM (16),d7 | if difference >= 16 swap
+#endif
+ bge 8f
+6:
+#ifndef __mcoldfire__
+ subw IMM (1),d7
+#else
+ subl IMM (1),d7
+#endif
+7:
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0 | shift right first operand
+ roxrl IMM (1),d1
+ dbra d7,7b
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+ subql IMM (1),d7
+ bpl 7b
+#endif
+ bra Laddsf$3
+8:
+ movew d0,d1
+ swap d1
+ movew d1,d0
+ swap d0
+#ifndef __mcoldfire__
+ subw IMM (16),d7
+#else
+ subl IMM (16),d7
+#endif
+ bne 6b | if still more bits, go back to normal case
+ | otherwise we fall through
+
+| Now we have a in d0-d1, b in d2-d3, and the largest exponent in d6 (the
+| signs are stored in a0 and a1).
+
+Laddsf$3:
+| Here we have to decide whether to add or subtract the numbers
+#ifndef __mcoldfire__
+ exg d6,a0 | get signs back
+ exg d7,a1 | and save the exponents
+#else
+ movel d6,d4
+ movel a0,d6
+ movel d4,a0
+ movel d7,d4
+ movel a1,d7
+ movel d4,a1
+#endif
+ eorl d6,d7 | combine sign bits
+ bmi Lsubsf$0 | if negative a and b have opposite
+ | sign so we actually subtract the
+ | numbers
+
+| Here we have both positive or both negative
+#ifndef __mcoldfire__
+ exg d6,a0 | now we have the exponent in d6
+#else
+ movel d6,d4
+ movel a0,d6
+ movel d4,a0
+#endif
+ movel a0,d7 | and sign in d7
+ andl IMM (0x80000000),d7
+| Here we do the addition.
+ addl d3,d1
+ addxl d2,d0
+| Note: now we have d2, d3, d4 and d5 to play with!
+
+| Put the exponent, in the first byte, in d2, to use the "standard" rounding
+| routines:
+ movel d6,d2
+#ifndef __mcoldfire__
+ lsrw IMM (8),d2
+#else
+ lsrl IMM (8),d2
+#endif
+
+| Before rounding normalize so bit #FLT_MANT_DIG is set (we will consider
+| the case of denormalized numbers in the rounding routine itself).
+| As in the addition (not in the subtraction!) we could have set
+| one more bit we check this:
+ btst IMM (FLT_MANT_DIG+1),d0
+ beq 1f
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+#endif
+ addl IMM (1),d2
+1:
+ lea pc@(Laddsf$4),a0 | to return from rounding routine
+ PICLEA SYM (_fpCCR),a1 | check the rounding mode
+#ifdef __mcoldfire__
+ clrl d6
+#endif
+ movew a1@(6),d6 | rounding mode in d6
+ beq Lround$to$nearest
+#ifndef __mcoldfire__
+ cmpw IMM (ROUND_TO_PLUS),d6
+#else
+ cmpl IMM (ROUND_TO_PLUS),d6
+#endif
+ bhi Lround$to$minus
+ blt Lround$to$zero
+ bra Lround$to$plus
+Laddsf$4:
+| Put back the exponent, but check for overflow.
+#ifndef __mcoldfire__
+ cmpw IMM (0xff),d2
+#else
+ cmpl IMM (0xff),d2
+#endif
+ bhi 1f
+ bclr IMM (FLT_MANT_DIG-1),d0
+#ifndef __mcoldfire__
+ lslw IMM (7),d2
+#else
+ lsll IMM (7),d2
+#endif
+ swap d2
+ orl d2,d0
+ bra Laddsf$ret
+1:
+ moveq IMM (ADD),d5
+ bra Lf$overflow
+
+Lsubsf$0:
+| We are here if a > 0 and b < 0 (sign bits cleared).
+| Here we do the subtraction.
+ movel d6,d7 | put sign in d7
+ andl IMM (0x80000000),d7
+
+ subl d3,d1 | result in d0-d1
+ subxl d2,d0 |
+ beq Laddsf$ret | if zero just exit
+ bpl 1f | if positive skip the following
+ bchg IMM (31),d7 | change sign bit in d7
+ negl d1
+ negxl d0
+1:
+#ifndef __mcoldfire__
+ exg d2,a0 | now we have the exponent in d2
+ lsrw IMM (8),d2 | put it in the first byte
+#else
+ movel d2,d4
+ movel a0,d2
+ movel d4,a0
+ lsrl IMM (8),d2 | put it in the first byte
+#endif
+
+| Now d0-d1 is positive and the sign bit is in d7.
+
+| Note that we do not have to normalize, since in the subtraction bit
+| #FLT_MANT_DIG+1 is never set, and denormalized numbers are handled by
+| the rounding routines themselves.
+ lea pc@(Lsubsf$1),a0 | to return from rounding routine
+ PICLEA SYM (_fpCCR),a1 | check the rounding mode
+#ifdef __mcoldfire__
+ clrl d6
+#endif
+ movew a1@(6),d6 | rounding mode in d6
+ beq Lround$to$nearest
+#ifndef __mcoldfire__
+ cmpw IMM (ROUND_TO_PLUS),d6
+#else
+ cmpl IMM (ROUND_TO_PLUS),d6
+#endif
+ bhi Lround$to$minus
+ blt Lround$to$zero
+ bra Lround$to$plus
+Lsubsf$1:
+| Put back the exponent (we can't have overflow!). '
+ bclr IMM (FLT_MANT_DIG-1),d0
+#ifndef __mcoldfire__
+ lslw IMM (7),d2
+#else
+ lsll IMM (7),d2
+#endif
+ swap d2
+ orl d2,d0
+ bra Laddsf$ret
+
+| If one of the numbers was too small (difference of exponents >=
+| FLT_MANT_DIG+2) we return the other (and now we don't have to '
+| check for finiteness or zero).
+Laddsf$a$small:
+ movel a6@(12),d0
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | restore data registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 | and return
+ rts
+
+Laddsf$b$small:
+ movel a6@(8),d0
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | restore data registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 | and return
+ rts
+
+| If the numbers are denormalized remember to put exponent equal to 1.
+
+Laddsf$a$den:
+ movel d5,d6 | d5 contains 0x01000000
+ swap d6
+ bra Laddsf$1
+
+Laddsf$b$den:
+ movel d5,d7
+ swap d7
+ notl d4 | make d4 into a mask for the fraction
+ | (this was not executed after the jump)
+ bra Laddsf$2
+
+| The rest is mainly code for the different results which can be
+| returned (checking always for +/-INFINITY and NaN).
+
+Laddsf$b:
+| Return b (if a is zero).
+ movel a6@(12),d0
+ cmpl IMM (0x80000000),d0 | Check if b is -0
+ bne 1f
+ movel a0,d7
+ andl IMM (0x80000000),d7 | Use the sign of a
+ clrl d0
+ bra Laddsf$ret
+Laddsf$a:
+| Return a (if b is zero).
+ movel a6@(8),d0
+1:
+ moveq IMM (ADD),d5
+| We have to check for NaN and +/-infty.
+ movel d0,d7
+ andl IMM (0x80000000),d7 | put sign in d7
+ bclr IMM (31),d0 | clear sign
+ cmpl IMM (INFINITY),d0 | check for infty or NaN
+ bge 2f
+ movel d0,d0 | check for zero (we do this because we don't '
+ bne Laddsf$ret | want to return -0 by mistake
+ bclr IMM (31),d7 | if zero be sure to clear sign
+ bra Laddsf$ret | if everything OK just return
+2:
+| The value to be returned is either +/-infty or NaN
+ andl IMM (0x007fffff),d0 | check for NaN
+ bne Lf$inop | if mantissa not zero is NaN
+ bra Lf$infty
+
+Laddsf$ret:
+| Normal exit (a and b nonzero, result is not NaN nor +/-infty).
+| We have to clear the exception flags (just the exception type).
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+ orl d7,d0 | put sign bit
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | restore data registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 | and return
+ rts
+
+Laddsf$ret$den:
+| Return a denormalized number (for addition we don't signal underflow) '
+ lsrl IMM (1),d0 | remember to shift right back once
+ bra Laddsf$ret | and return
+
+| Note: when adding two floats of the same sign if either one is
+| NaN we return NaN without regard to whether the other is finite or
+| not. When subtracting them (i.e., when adding two numbers of
+| opposite signs) things are more complicated: if both are INFINITY
+| we return NaN, if only one is INFINITY and the other is NaN we return
+| NaN, but if it is finite we return INFINITY with the corresponding sign.
+
+Laddsf$nf:
+ moveq IMM (ADD),d5
+| This could be faster but it is not worth the effort, since it is not
+| executed very often. We sacrifice speed for clarity here.
+ movel a6@(8),d0 | get the numbers back (remember that we
+ movel a6@(12),d1 | did some processing already)
+ movel IMM (INFINITY),d4 | useful constant (INFINITY)
+ movel d0,d2 | save sign bits
+ movel d1,d3
+ bclr IMM (31),d0 | clear sign bits
+ bclr IMM (31),d1
+| We know that one of them is either NaN of +/-INFINITY
+| Check for NaN (if either one is NaN return NaN)
+ cmpl d4,d0 | check first a (d0)
+ bhi Lf$inop
+ cmpl d4,d1 | check now b (d1)
+ bhi Lf$inop
+| Now comes the check for +/-INFINITY. We know that both are (maybe not
+| finite) numbers, but we have to check if both are infinite whether we
+| are adding or subtracting them.
+ eorl d3,d2 | to check sign bits
+ bmi 1f
+ movel d0,d7
+ andl IMM (0x80000000),d7 | get (common) sign bit
+ bra Lf$infty
+1:
+| We know one (or both) are infinite, so we test for equality between the
+| two numbers (if they are equal they have to be infinite both, so we
+| return NaN).
+ cmpl d1,d0 | are both infinite?
+ beq Lf$inop | if so return NaN
+
+ movel d0,d7
+ andl IMM (0x80000000),d7 | get a's sign bit '
+ cmpl d4,d0 | test now for infinity
+ beq Lf$infty | if a is INFINITY return with this sign
+ bchg IMM (31),d7 | else we know b is INFINITY and has
+ bra Lf$infty | the opposite sign
+
+|=============================================================================
+| __mulsf3
+|=============================================================================
+
+| float __mulsf3(float, float);
+ FUNC(__mulsf3)
+SYM (__mulsf3):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@-
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ movel a6@(8),d0 | get a into d0
+ movel a6@(12),d1 | and b into d1
+ movel d0,d7 | d7 will hold the sign of the product
+ eorl d1,d7 |
+ andl IMM (0x80000000),d7
+ movel IMM (INFINITY),d6 | useful constant (+INFINITY)
+ movel d6,d5 | another (mask for fraction)
+ notl d5 |
+ movel IMM (0x00800000),d4 | this is to put hidden bit back
+ bclr IMM (31),d0 | get rid of a's sign bit '
+ movel d0,d2 |
+ beq Lmulsf$a$0 | branch if a is zero
+ bclr IMM (31),d1 | get rid of b's sign bit '
+ movel d1,d3 |
+ beq Lmulsf$b$0 | branch if b is zero
+ cmpl d6,d0 | is a big?
+ bhi Lmulsf$inop | if a is NaN return NaN
+ beq Lmulsf$inf | if a is INFINITY we have to check b
+ cmpl d6,d1 | now compare b with INFINITY
+ bhi Lmulsf$inop | is b NaN?
+ beq Lmulsf$overflow | is b INFINITY?
+| Here we have both numbers finite and nonzero (and with no sign bit).
+| Now we get the exponents into d2 and d3.
+ andl d6,d2 | and isolate exponent in d2
+ beq Lmulsf$a$den | if exponent is zero we have a denormalized
+ andl d5,d0 | and isolate fraction
+ orl d4,d0 | and put hidden bit back
+ swap d2 | I like exponents in the first byte
+#ifndef __mcoldfire__
+ lsrw IMM (7),d2 |
+#else
+ lsrl IMM (7),d2 |
+#endif
+Lmulsf$1: | number
+ andl d6,d3 |
+ beq Lmulsf$b$den |
+ andl d5,d1 |
+ orl d4,d1 |
+ swap d3 |
+#ifndef __mcoldfire__
+ lsrw IMM (7),d3 |
+#else
+ lsrl IMM (7),d3 |
+#endif
+Lmulsf$2: |
+#ifndef __mcoldfire__
+ addw d3,d2 | add exponents
+ subw IMM (F_BIAS+1),d2 | and subtract bias (plus one)
+#else
+ addl d3,d2 | add exponents
+ subl IMM (F_BIAS+1),d2 | and subtract bias (plus one)
+#endif
+
+| We are now ready to do the multiplication. The situation is as follows:
+| both a and b have bit FLT_MANT_DIG-1 set (even if they were
+| denormalized to start with!), which means that in the product
+| bit 2*(FLT_MANT_DIG-1) (that is, bit 2*FLT_MANT_DIG-2-32 of the
+| high long) is set.
+
+| To do the multiplication let us move the number a little bit around ...
+ movel d1,d6 | second operand in d6
+ movel d0,d5 | first operand in d4-d5
+ movel IMM (0),d4
+ movel d4,d1 | the sums will go in d0-d1
+ movel d4,d0
+
+| now bit FLT_MANT_DIG-1 becomes bit 31:
+ lsll IMM (31-FLT_MANT_DIG+1),d6
+
+| Start the loop (we loop #FLT_MANT_DIG times):
+ moveq IMM (FLT_MANT_DIG-1),d3
+1: addl d1,d1 | shift sum
+ addxl d0,d0
+ lsll IMM (1),d6 | get bit bn
+ bcc 2f | if not set skip sum
+ addl d5,d1 | add a
+ addxl d4,d0
+2:
+#ifndef __mcoldfire__
+ dbf d3,1b | loop back
+#else
+ subql IMM (1),d3
+ bpl 1b
+#endif
+
+| Now we have the product in d0-d1, with bit (FLT_MANT_DIG - 1) + FLT_MANT_DIG
+| (mod 32) of d0 set. The first thing to do now is to normalize it so bit
+| FLT_MANT_DIG is set (to do the rounding).
+#ifndef __mcoldfire__
+ rorl IMM (6),d1
+ swap d1
+ movew d1,d3
+ andw IMM (0x03ff),d3
+ andw IMM (0xfd00),d1
+#else
+ movel d1,d3
+ lsll IMM (8),d1
+ addl d1,d1
+ addl d1,d1
+ moveq IMM (22),d5
+ lsrl d5,d3
+ orl d3,d1
+ andl IMM (0xfffffd00),d1
+#endif
+ lsll IMM (8),d0
+ addl d0,d0
+ addl d0,d0
+#ifndef __mcoldfire__
+ orw d3,d0
+#else
+ orl d3,d0
+#endif
+
+ moveq IMM (MULTIPLY),d5
+
+ btst IMM (FLT_MANT_DIG+1),d0
+ beq Lround$exit
+#ifndef __mcoldfire__
+ lsrl IMM (1),d0
+ roxrl IMM (1),d1
+ addw IMM (1),d2
+#else
+ lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+ addql IMM (1),d2
+#endif
+ bra Lround$exit
+
+Lmulsf$inop:
+ moveq IMM (MULTIPLY),d5
+ bra Lf$inop
+
+Lmulsf$overflow:
+ moveq IMM (MULTIPLY),d5
+ bra Lf$overflow
+
+Lmulsf$inf:
+ moveq IMM (MULTIPLY),d5
+| If either is NaN return NaN; else both are (maybe infinite) numbers, so
+| return INFINITY with the correct sign (which is in d7).
+ cmpl d6,d1 | is b NaN?
+ bhi Lf$inop | if so return NaN
+ bra Lf$overflow | else return +/-INFINITY
+
+| If either number is zero return zero, unless the other is +/-INFINITY,
+| or NaN, in which case we return NaN.
+Lmulsf$b$0:
+| Here d1 (==b) is zero.
+ movel a6@(8),d1 | get a again to check for non-finiteness
+ bra 1f
+Lmulsf$a$0:
+ movel a6@(12),d1 | get b again to check for non-finiteness
+1: bclr IMM (31),d1 | clear sign bit
+ cmpl IMM (INFINITY),d1 | and check for a large exponent
+ bge Lf$inop | if b is +/-INFINITY or NaN return NaN
+ movel d7,d0 | else return signed zero
+ PICLEA SYM (_fpCCR),a0 |
+ movew IMM (0),a0@ |
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 |
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 |
+ rts |
+
+| If a number is denormalized we put an exponent of 1 but do not put the
+| hidden bit back into the fraction; instead we shift left until bit 23
+| (the hidden bit) is set, adjusting the exponent accordingly. We do this
+| to ensure that the product of the fractions is close to 1.
+Lmulsf$a$den:
+ movel IMM (1),d2
+ andl d5,d0
+1: addl d0,d0 | shift a left (until bit 23 is set)
+#ifndef __mcoldfire__
+ subw IMM (1),d2 | and adjust exponent
+#else
+ subql IMM (1),d2 | and adjust exponent
+#endif
+ btst IMM (FLT_MANT_DIG-1),d0
+ bne Lmulsf$1 |
+ bra 1b | else loop back
+
+Lmulsf$b$den:
+ movel IMM (1),d3
+ andl d5,d1
+1: addl d1,d1 | shift b left until bit 23 is set
+#ifndef __mcoldfire__
+ subw IMM (1),d3 | and adjust exponent
+#else
+ subql IMM (1),d3 | and adjust exponent
+#endif
+ btst IMM (FLT_MANT_DIG-1),d1
+ bne Lmulsf$2 |
+ bra 1b | else loop back
+
+|=============================================================================
+| __divsf3
+|=============================================================================
+
+| float __divsf3(float, float);
+ FUNC(__divsf3)
+SYM (__divsf3):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@-
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ movel a6@(8),d0 | get a into d0
+ movel a6@(12),d1 | and b into d1
+ movel d0,d7 | d7 will hold the sign of the result
+ eorl d1,d7 |
+ andl IMM (0x80000000),d7 |
+ movel IMM (INFINITY),d6 | useful constant (+INFINITY)
+ movel d6,d5 | another (mask for fraction)
+ notl d5 |
+ movel IMM (0x00800000),d4 | this is to put hidden bit back
+ bclr IMM (31),d0 | get rid of a's sign bit '
+ movel d0,d2 |
+ beq Ldivsf$a$0 | branch if a is zero
+ bclr IMM (31),d1 | get rid of b's sign bit '
+ movel d1,d3 |
+ beq Ldivsf$b$0 | branch if b is zero
+ cmpl d6,d0 | is a big?
+ bhi Ldivsf$inop | if a is NaN return NaN
+ beq Ldivsf$inf | if a is INFINITY we have to check b
+ cmpl d6,d1 | now compare b with INFINITY
+ bhi Ldivsf$inop | if b is NaN return NaN
+ beq Ldivsf$underflow
+| Here we have both numbers finite and nonzero (and with no sign bit).
+| Now we get the exponents into d2 and d3 and normalize the numbers to
+| ensure that the ratio of the fractions is close to 1. We do this by
+| making sure that bit #FLT_MANT_DIG-1 (hidden bit) is set.
+ andl d6,d2 | and isolate exponent in d2
+ beq Ldivsf$a$den | if exponent is zero we have a denormalized
+ andl d5,d0 | and isolate fraction
+ orl d4,d0 | and put hidden bit back
+ swap d2 | I like exponents in the first byte
+#ifndef __mcoldfire__
+ lsrw IMM (7),d2 |
+#else
+ lsrl IMM (7),d2 |
+#endif
+Ldivsf$1: |
+ andl d6,d3 |
+ beq Ldivsf$b$den |
+ andl d5,d1 |
+ orl d4,d1 |
+ swap d3 |
+#ifndef __mcoldfire__
+ lsrw IMM (7),d3 |
+#else
+ lsrl IMM (7),d3 |
+#endif
+Ldivsf$2: |
+#ifndef __mcoldfire__
+ subw d3,d2 | subtract exponents
+ addw IMM (F_BIAS),d2 | and add bias
+#else
+ subl d3,d2 | subtract exponents
+ addl IMM (F_BIAS),d2 | and add bias
+#endif
+
+| We are now ready to do the division. We have prepared things in such a way
+| that the ratio of the fractions will be less than 2 but greater than 1/2.
+| At this point the registers in use are:
+| d0 holds a (first operand, bit FLT_MANT_DIG=0, bit FLT_MANT_DIG-1=1)
+| d1 holds b (second operand, bit FLT_MANT_DIG=1)
+| d2 holds the difference of the exponents, corrected by the bias
+| d7 holds the sign of the ratio
+| d4, d5, d6 hold some constants
+ movel d7,a0 | d6-d7 will hold the ratio of the fractions
+ movel IMM (0),d6 |
+ movel d6,d7
+
+ moveq IMM (FLT_MANT_DIG+1),d3
+1: cmpl d0,d1 | is a < b?
+ bhi 2f |
+ bset d3,d6 | set a bit in d6
+ subl d1,d0 | if a >= b a <-- a-b
+ beq 3f | if a is zero, exit
+2: addl d0,d0 | multiply a by 2
+#ifndef __mcoldfire__
+ dbra d3,1b
+#else
+ subql IMM (1),d3
+ bpl 1b
+#endif
+
+| Now we keep going to set the sticky bit ...
+ moveq IMM (FLT_MANT_DIG),d3
+1: cmpl d0,d1
+ ble 2f
+ addl d0,d0
+#ifndef __mcoldfire__
+ dbra d3,1b
+#else
+ subql IMM(1),d3
+ bpl 1b
+#endif
+ movel IMM (0),d1
+ bra 3f
+2: movel IMM (0),d1
+#ifndef __mcoldfire__
+ subw IMM (FLT_MANT_DIG),d3
+ addw IMM (31),d3
+#else
+ subl IMM (FLT_MANT_DIG),d3
+ addl IMM (31),d3
+#endif
+ bset d3,d1
+3:
+ movel d6,d0 | put the ratio in d0-d1
+ movel a0,d7 | get sign back
+
+| Because of the normalization we did before we are guaranteed that
+| d0 is smaller than 2^26 but larger than 2^24. Thus bit 26 is not set,
+| bit 25 could be set, and if it is not set then bit 24 is necessarily set.
+ btst IMM (FLT_MANT_DIG+1),d0
+ beq 1f | if it is not set, then bit 24 is set
+ lsrl IMM (1),d0 |
+#ifndef __mcoldfire__
+ addw IMM (1),d2 |
+#else
+ addl IMM (1),d2 |
+#endif
+1:
+| Now round, check for over- and underflow, and exit.
+ moveq IMM (DIVIDE),d5
+ bra Lround$exit
+
+Ldivsf$inop:
+ moveq IMM (DIVIDE),d5
+ bra Lf$inop
+
+Ldivsf$overflow:
+ moveq IMM (DIVIDE),d5
+ bra Lf$overflow
+
+Ldivsf$underflow:
+ moveq IMM (DIVIDE),d5
+ bra Lf$underflow
+
+Ldivsf$a$0:
+ moveq IMM (DIVIDE),d5
+| If a is zero check to see whether b is zero also. In that case return
+| NaN; then check if b is NaN, and return NaN also in that case. Else
+| return a properly signed zero.
+ andl IMM (0x7fffffff),d1 | clear sign bit and test b
+ beq Lf$inop | if b is also zero return NaN
+ cmpl IMM (INFINITY),d1 | check for NaN
+ bhi Lf$inop |
+ movel d7,d0 | else return signed zero
+ PICLEA SYM (_fpCCR),a0 |
+ movew IMM (0),a0@ |
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 |
+#else
+ moveml sp@,d2-d7 |
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6 |
+ rts |
+
+Ldivsf$b$0:
+ moveq IMM (DIVIDE),d5
+| If we got here a is not zero. Check if a is NaN; in that case return NaN,
+| else return +/-INFINITY. Remember that a is in d0 with the sign bit
+| cleared already.
+ cmpl IMM (INFINITY),d0 | compare d0 with INFINITY
+ bhi Lf$inop | if larger it is NaN
+ bra Lf$div$0 | else signal DIVIDE_BY_ZERO
+
+Ldivsf$inf:
+ moveq IMM (DIVIDE),d5
+| If a is INFINITY we have to check b
+ cmpl IMM (INFINITY),d1 | compare b with INFINITY
+ bge Lf$inop | if b is NaN or INFINITY return NaN
+ bra Lf$overflow | else return overflow
+
+| If a number is denormalized we put an exponent of 1 but do not put the
+| bit back into the fraction.
+Ldivsf$a$den:
+ movel IMM (1),d2
+ andl d5,d0
+1: addl d0,d0 | shift a left until bit FLT_MANT_DIG-1 is set
+#ifndef __mcoldfire__
+ subw IMM (1),d2 | and adjust exponent
+#else
+ subl IMM (1),d2 | and adjust exponent
+#endif
+ btst IMM (FLT_MANT_DIG-1),d0
+ bne Ldivsf$1
+ bra 1b
+
+Ldivsf$b$den:
+ movel IMM (1),d3
+ andl d5,d1
+1: addl d1,d1 | shift b left until bit FLT_MANT_DIG is set
+#ifndef __mcoldfire__
+ subw IMM (1),d3 | and adjust exponent
+#else
+ subl IMM (1),d3 | and adjust exponent
+#endif
+ btst IMM (FLT_MANT_DIG-1),d1
+ bne Ldivsf$2
+ bra 1b
+
+Lround$exit:
+| This is a common exit point for __mulsf3 and __divsf3.
+
+| First check for underlow in the exponent:
+#ifndef __mcoldfire__
+ cmpw IMM (-FLT_MANT_DIG-1),d2
+#else
+ cmpl IMM (-FLT_MANT_DIG-1),d2
+#endif
+ blt Lf$underflow
+| It could happen that the exponent is less than 1, in which case the
+| number is denormalized. In this case we shift right and adjust the
+| exponent until it becomes 1 or the fraction is zero (in the latter case
+| we signal underflow and return zero).
+ movel IMM (0),d6 | d6 is used temporarily
+#ifndef __mcoldfire__
+ cmpw IMM (1),d2 | if the exponent is less than 1 we
+#else
+ cmpl IMM (1),d2 | if the exponent is less than 1 we
+#endif
+ bge 2f | have to shift right (denormalize)
+1:
+#ifndef __mcoldfire__
+ addw IMM (1),d2 | adjust the exponent
+ lsrl IMM (1),d0 | shift right once
+ roxrl IMM (1),d1 |
+ roxrl IMM (1),d6 | d6 collect bits we would lose otherwise
+ cmpw IMM (1),d2 | is the exponent 1 already?
+#else
+ addql IMM (1),d2 | adjust the exponent
+ lsrl IMM (1),d6
+ btst IMM (0),d1
+ beq 11f
+ bset IMM (31),d6
+11: lsrl IMM (1),d1
+ btst IMM (0),d0
+ beq 10f
+ bset IMM (31),d1
+10: lsrl IMM (1),d0
+ cmpl IMM (1),d2 | is the exponent 1 already?
+#endif
+ beq 2f | if not loop back
+ bra 1b |
+ bra Lf$underflow | safety check, shouldn't execute '
+2: orl d6,d1 | this is a trick so we don't lose '
+ | the extra bits which were flushed right
+| Now call the rounding routine (which takes care of denormalized numbers):
+ lea pc@(Lround$0),a0 | to return from rounding routine
+ PICLEA SYM (_fpCCR),a1 | check the rounding mode
+#ifdef __mcoldfire__
+ clrl d6
+#endif
+ movew a1@(6),d6 | rounding mode in d6
+ beq Lround$to$nearest
+#ifndef __mcoldfire__
+ cmpw IMM (ROUND_TO_PLUS),d6
+#else
+ cmpl IMM (ROUND_TO_PLUS),d6
+#endif
+ bhi Lround$to$minus
+ blt Lround$to$zero
+ bra Lround$to$plus
+Lround$0:
+| Here we have a correctly rounded result (either normalized or denormalized).
+
+| Here we should have either a normalized number or a denormalized one, and
+| the exponent is necessarily larger or equal to 1 (so we don't have to '
+| check again for underflow!). We have to check for overflow or for a
+| denormalized number (which also signals underflow).
+| Check for overflow (i.e., exponent >= 255).
+#ifndef __mcoldfire__
+ cmpw IMM (0x00ff),d2
+#else
+ cmpl IMM (0x00ff),d2
+#endif
+ bge Lf$overflow
+| Now check for a denormalized number (exponent==0).
+ movew d2,d2
+ beq Lf$den
+1:
+| Put back the exponents and sign and return.
+#ifndef __mcoldfire__
+ lslw IMM (7),d2 | exponent back to fourth byte
+#else
+ lsll IMM (7),d2 | exponent back to fourth byte
+#endif
+ bclr IMM (FLT_MANT_DIG-1),d0
+ swap d0 | and put back exponent
+#ifndef __mcoldfire__
+ orw d2,d0 |
+#else
+ orl d2,d0
+#endif
+ swap d0 |
+ orl d7,d0 | and sign also
+
+ PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+
+|=============================================================================
+| __negsf2
+|=============================================================================
+
+| This is trivial and could be shorter if we didn't bother checking for NaN '
+| and +/-INFINITY.
+
+| float __negsf2(float);
+ FUNC(__negsf2)
+SYM (__negsf2):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@-
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ moveq IMM (NEGATE),d5
+ movel a6@(8),d0 | get number to negate in d0
+ bchg IMM (31),d0 | negate
+ movel d0,d1 | make a positive copy
+ bclr IMM (31),d1 |
+ tstl d1 | check for zero
+ beq 2f | if zero (either sign) return +zero
+ cmpl IMM (INFINITY),d1 | compare to +INFINITY
+ blt 1f |
+ bhi Lf$inop | if larger (fraction not zero) is NaN
+ movel d0,d7 | else get sign and return INFINITY
+ andl IMM (0x80000000),d7
+ bra Lf$infty
+1: PICLEA SYM (_fpCCR),a0
+ movew IMM (0),a0@
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+2: bclr IMM (31),d0
+ bra 1b
+
+|=============================================================================
+| __cmpsf2
+|=============================================================================
+
+GREATER = 1
+LESS = -1
+EQUAL = 0
+
+| int __cmpsf2_internal(float, float, int);
+SYM (__cmpsf2_internal):
+#ifndef __mcoldfire__
+ link a6,IMM (0)
+ moveml d2-d7,sp@- | save registers
+#else
+ link a6,IMM (-24)
+ moveml d2-d7,sp@
+#endif
+ moveq IMM (COMPARE),d5
+ movel a6@(8),d0 | get first operand
+ movel a6@(12),d1 | get second operand
+| Check if either is NaN, and in that case return garbage and signal
+| INVALID_OPERATION. Check also if either is zero, and clear the signs
+| if necessary.
+ movel d0,d6
+ andl IMM (0x7fffffff),d0
+ beq Lcmpsf$a$0
+ cmpl IMM (0x7f800000),d0
+ bhi Lcmpf$inop
+Lcmpsf$1:
+ movel d1,d7
+ andl IMM (0x7fffffff),d1
+ beq Lcmpsf$b$0
+ cmpl IMM (0x7f800000),d1
+ bhi Lcmpf$inop
+Lcmpsf$2:
+| Check the signs
+ eorl d6,d7
+ bpl 1f
+| If the signs are not equal check if a >= 0
+ tstl d6
+ bpl Lcmpsf$a$gt$b | if (a >= 0 && b < 0) => a > b
+ bmi Lcmpsf$b$gt$a | if (a < 0 && b >= 0) => a < b
+1:
+| If the signs are equal check for < 0
+ tstl d6
+ bpl 1f
+| If both are negative exchange them
+#ifndef __mcoldfire__
+ exg d0,d1
+#else
+ movel d0,d7
+ movel d1,d0
+ movel d7,d1
+#endif
+1:
+| Now that they are positive we just compare them as longs (does this also
+| work for denormalized numbers?).
+ cmpl d0,d1
+ bhi Lcmpsf$b$gt$a | |b| > |a|
+ bne Lcmpsf$a$gt$b | |b| < |a|
+| If we got here a == b.
+ movel IMM (EQUAL),d0
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | put back the registers
+#else
+ moveml sp@,d2-d7
+#endif
+ unlk a6
+ rts
+Lcmpsf$a$gt$b:
+ movel IMM (GREATER),d0
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | put back the registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+Lcmpsf$b$gt$a:
+ movel IMM (LESS),d0
+#ifndef __mcoldfire__
+ moveml sp@+,d2-d7 | put back the registers
+#else
+ moveml sp@,d2-d7
+ | XXX if frame pointer is ever removed, stack pointer must
+ | be adjusted here.
+#endif
+ unlk a6
+ rts
+
+Lcmpsf$a$0:
+ bclr IMM (31),d6
+ bra Lcmpsf$1
+Lcmpsf$b$0:
+ bclr IMM (31),d7
+ bra Lcmpsf$2
+
+Lcmpf$inop:
+ movl a6@(16),d0
+ moveq IMM (INEXACT_RESULT+INVALID_OPERATION),d7
+ moveq IMM (SINGLE_FLOAT),d6
+ PICJUMP $_exception_handler
+
+| int __cmpsf2(float, float);
+ FUNC(__cmpsf2)
+SYM (__cmpsf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+
+|=============================================================================
+| rounding routines
+|=============================================================================
+
+| The rounding routines expect the number to be normalized in registers
+| d0-d1, with the exponent in register d2. They assume that the
+| exponent is larger or equal to 1. They return a properly normalized number
+| if possible, and a denormalized number otherwise. The exponent is returned
+| in d2.
+
+Lround$to$nearest:
+| We now normalize as suggested by D. Knuth ("Seminumerical Algorithms"):
+| Here we assume that the exponent is not too small (this should be checked
+| before entering the rounding routine), but the number could be denormalized.
+
+| Check for denormalized numbers:
+1: btst IMM (FLT_MANT_DIG),d0
+ bne 2f | if set the number is normalized
+| Normalize shifting left until bit #FLT_MANT_DIG is set or the exponent
+| is one (remember that a denormalized number corresponds to an
+| exponent of -F_BIAS+1).
+#ifndef __mcoldfire__
+ cmpw IMM (1),d2 | remember that the exponent is at least one
+#else
+ cmpl IMM (1),d2 | remember that the exponent is at least one
+#endif
+ beq 2f | an exponent of one means denormalized
+ addl d1,d1 | else shift and adjust the exponent
+ addxl d0,d0 |
+#ifndef __mcoldfire__
+ dbra d2,1b |
+#else
+ subql IMM (1),d2
+ bpl 1b
+#endif
+2:
+| Now round: we do it as follows: after the shifting we can write the
+| fraction part as f + delta, where 1 < f < 2^25, and 0 <= delta <= 2.
+| If delta < 1, do nothing. If delta > 1, add 1 to f.
+| If delta == 1, we make sure the rounded number will be even (odd?)
+| (after shifting).
+ btst IMM (0),d0 | is delta < 1?
+ beq 2f | if so, do not do anything
+ tstl d1 | is delta == 1?
+ bne 1f | if so round to even
+ movel d0,d1 |
+ andl IMM (2),d1 | bit 1 is the last significant bit
+ addl d1,d0 |
+ bra 2f |
+1: movel IMM (1),d1 | else add 1
+ addl d1,d0 |
+| Shift right once (because we used bit #FLT_MANT_DIG!).
+2: lsrl IMM (1),d0
+| Now check again bit #FLT_MANT_DIG (rounding could have produced a
+| 'fraction overflow' ...).
+ btst IMM (FLT_MANT_DIG),d0
+ beq 1f
+ lsrl IMM (1),d0
+#ifndef __mcoldfire__
+ addw IMM (1),d2
+#else
+ addql IMM (1),d2
+#endif
+1:
+| If bit #FLT_MANT_DIG-1 is clear we have a denormalized number, so we
+| have to put the exponent to zero and return a denormalized number.
+ btst IMM (FLT_MANT_DIG-1),d0
+ beq 1f
+ jmp a0@
+1: movel IMM (0),d2
+ jmp a0@
+
+Lround$to$zero:
+Lround$to$plus:
+Lround$to$minus:
+ jmp a0@
+#endif /* L_float */
+
+| gcc expects the routines __eqdf2, __nedf2, __gtdf2, __gedf2,
+| __ledf2, __ltdf2 to all return the same value as a direct call to
+| __cmpdf2 would. In this implementation, each of these routines
+| simply calls __cmpdf2. It would be more efficient to give the
+| __cmpdf2 routine several names, but separating them out will make it
+| easier to write efficient versions of these routines someday.
+| If the operands recompare unordered unordered __gtdf2 and __gedf2 return -1.
+| The other routines return 1.
+
+#ifdef L_eqdf2
+ .text
+ FUNC(__eqdf2)
+ .globl SYM (__eqdf2)
+SYM (__eqdf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+#endif /* L_eqdf2 */
+
+#ifdef L_nedf2
+ .text
+ FUNC(__nedf2)
+ .globl SYM (__nedf2)
+SYM (__nedf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+#endif /* L_nedf2 */
+
+#ifdef L_gtdf2
+ .text
+ FUNC(__gtdf2)
+ .globl SYM (__gtdf2)
+SYM (__gtdf2):
+ link a6,IMM (0)
+ pea -1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+#endif /* L_gtdf2 */
+
+#ifdef L_gedf2
+ .text
+ FUNC(__gedf2)
+ .globl SYM (__gedf2)
+SYM (__gedf2):
+ link a6,IMM (0)
+ pea -1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+#endif /* L_gedf2 */
+
+#ifdef L_ltdf2
+ .text
+ FUNC(__ltdf2)
+ .globl SYM (__ltdf2)
+SYM (__ltdf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+#endif /* L_ltdf2 */
+
+#ifdef L_ledf2
+ .text
+ FUNC(__ledf2)
+ .globl SYM (__ledf2)
+SYM (__ledf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(20),sp@-
+ movl a6@(16),sp@-
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpdf2_internal)
+ unlk a6
+ rts
+#endif /* L_ledf2 */
+
+| The comments above about __eqdf2, et. al., also apply to __eqsf2,
+| et. al., except that the latter call __cmpsf2 rather than __cmpdf2.
+
+#ifdef L_eqsf2
+ .text
+ FUNC(__eqsf2)
+ .globl SYM (__eqsf2)
+SYM (__eqsf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+#endif /* L_eqsf2 */
+
+#ifdef L_nesf2
+ .text
+ FUNC(__nesf2)
+ .globl SYM (__nesf2)
+SYM (__nesf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+#endif /* L_nesf2 */
+
+#ifdef L_gtsf2
+ .text
+ FUNC(__gtsf2)
+ .globl SYM (__gtsf2)
+SYM (__gtsf2):
+ link a6,IMM (0)
+ pea -1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+#endif /* L_gtsf2 */
+
+#ifdef L_gesf2
+ .text
+ FUNC(__gesf2)
+ .globl SYM (__gesf2)
+SYM (__gesf2):
+ link a6,IMM (0)
+ pea -1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+#endif /* L_gesf2 */
+
+#ifdef L_ltsf2
+ .text
+ FUNC(__ltsf2)
+ .globl SYM (__ltsf2)
+SYM (__ltsf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+#endif /* L_ltsf2 */
+
+#ifdef L_lesf2
+ .text
+ FUNC(__lesf2)
+ .globl SYM (__lesf2)
+SYM (__lesf2):
+ link a6,IMM (0)
+ pea 1
+ movl a6@(12),sp@-
+ movl a6@(8),sp@-
+ PICCALL SYM (__cmpsf2_internal)
+ unlk a6
+ rts
+#endif /* L_lesf2 */
+
+#if defined (__ELF__) && defined (__linux__)
+ /* Make stack non-executable for ELF linux targets. */
+ .section .note.GNU-stack,"",@progbits
+#endif
diff --git a/gcc-4.9/libgcc/config/m68k/linux-atomic.c b/gcc-4.9/libgcc/config/m68k/linux-atomic.c
new file mode 100644
index 000000000..99b0db7be
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/linux-atomic.c
@@ -0,0 +1,211 @@
+/* Linux-specific atomic operations for m68k Linux.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Based on code contributed by CodeSourcery for ARM EABI Linux.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Coldfire dropped the CAS instruction from the base M68K ISA.
+
+ GCC automatically issues a asm memory barrier when it encounters
+ a __sync_synchronize builtin. Thus, we do not need to define this
+ builtin.
+
+ We implement byte, short and int versions of each atomic operation
+ using the kernel helper defined below. There is no support for
+ 64-bit operations yet. */
+
+#include <asm/unistd.h>
+#include <stdbool.h>
+
+#ifndef __NR_atomic_cmpxchg_32
+#define __NR_atomic_cmpxchg_32 335
+#endif
+
+/* Kernel helper for compare-and-exchange a 32-bit value. */
+static inline unsigned
+__kernel_cmpxchg (unsigned *mem, unsigned oldval, unsigned newval)
+{
+ register unsigned *a0 asm("a0") = mem;
+ register unsigned d2 asm("d2") = oldval;
+ register unsigned d1 asm("d1") = newval;
+ register unsigned d0 asm("d0") = __NR_atomic_cmpxchg_32;
+
+ asm volatile ("trap #0"
+ : "=r"(d0), "=r"(d1), "=r"(a0)
+ : "r"(d0), "r"(d1), "r"(d2), "r"(a0)
+ : "memory", "a1");
+
+ return d0;
+}
+
+#define HIDDEN __attribute__ ((visibility ("hidden")))
+
+/* Big endian masks */
+#define INVERT_MASK_1 24
+#define INVERT_MASK_2 16
+
+#define MASK_1 0xffu
+#define MASK_2 0xffffu
+
+#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
+#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
+
+#define WORD_SYNC_OP(OP, PFX_OP, INF_OP, RETURN) \
+ unsigned HIDDEN \
+ NAME##_##RETURN (OP, 4) (unsigned *ptr, unsigned val) \
+ { \
+ unsigned oldval, newval, cmpval = *ptr; \
+ \
+ do { \
+ oldval = cmpval; \
+ newval = PFX_OP (oldval INF_OP val); \
+ cmpval = __kernel_cmpxchg (ptr, oldval, newval); \
+ } while (__builtin_expect (oldval != cmpval, 0)); \
+ \
+ return RETURN; \
+ }
+
+#define SUBWORD_SYNC_OP(OP, PFX_OP, INF_OP, TYPE, WIDTH, RETURN) \
+ TYPE HIDDEN \
+ NAME##_##RETURN (OP, WIDTH) (TYPE *ptr, TYPE sval) \
+ { \
+ unsigned *wordptr = (unsigned *) ((unsigned long) ptr & ~3); \
+ unsigned int mask, shift, oldval, newval, cmpval, wval; \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ wval = (sval & MASK_##WIDTH) << shift; \
+ \
+ cmpval = *wordptr; \
+ do { \
+ oldval = cmpval; \
+ newval = PFX_OP (oldval INF_OP wval); \
+ newval = (newval & mask) | (oldval & ~mask); \
+ cmpval = __kernel_cmpxchg (wordptr, oldval, newval); \
+ } while (__builtin_expect (oldval != cmpval, 0)); \
+ \
+ return (RETURN >> shift) & MASK_##WIDTH; \
+ }
+
+WORD_SYNC_OP (add, , +, oldval)
+WORD_SYNC_OP (sub, , -, oldval)
+WORD_SYNC_OP (or, , |, oldval)
+WORD_SYNC_OP (and, , &, oldval)
+WORD_SYNC_OP (xor, , ^, oldval)
+WORD_SYNC_OP (nand, ~, &, oldval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (or, , |, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (and, , &, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (or, , |, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (and, , &, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval)
+
+WORD_SYNC_OP (add, , +, newval)
+WORD_SYNC_OP (sub, , -, newval)
+WORD_SYNC_OP (or, , |, newval)
+WORD_SYNC_OP (and, , &, newval)
+WORD_SYNC_OP (xor, , ^, newval)
+WORD_SYNC_OP (nand, ~, &, newval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (or, , |, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (and, , &, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (or, , |, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (and, , &, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval)
+
+unsigned HIDDEN
+__sync_val_compare_and_swap_4 (unsigned *ptr, unsigned oldval, unsigned newval)
+{
+ return __kernel_cmpxchg (ptr, oldval, newval);
+}
+
+bool HIDDEN
+__sync_bool_compare_and_swap_4 (unsigned *ptr, unsigned oldval,
+ unsigned newval)
+{
+ return __kernel_cmpxchg (ptr, oldval, newval) == oldval;
+}
+
+#define SUBWORD_VAL_CAS(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE soldval, \
+ TYPE snewval) \
+ { \
+ unsigned *wordptr = (unsigned *)((unsigned long) ptr & ~3); \
+ unsigned int mask, shift, woldval, wnewval; \
+ unsigned oldval, newval, cmpval; \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ woldval = (soldval & MASK_##WIDTH) << shift; \
+ wnewval = (snewval & MASK_##WIDTH) << shift; \
+ cmpval = *wordptr; \
+ \
+ do { \
+ oldval = cmpval; \
+ if ((oldval & mask) != woldval) \
+ break; \
+ newval = (oldval & ~mask) | wnewval; \
+ cmpval = __kernel_cmpxchg (wordptr, oldval, newval); \
+ } while (__builtin_expect (oldval != cmpval, 0)); \
+ \
+ return (oldval >> shift) & MASK_##WIDTH; \
+ }
+
+SUBWORD_VAL_CAS (unsigned short, 2)
+SUBWORD_VAL_CAS (unsigned char, 1)
+
+#define SUBWORD_BOOL_CAS(TYPE, WIDTH) \
+ bool HIDDEN \
+ __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ return (__sync_val_compare_and_swap_##WIDTH (ptr, oldval, newval) \
+ == oldval); \
+ }
+
+SUBWORD_BOOL_CAS (unsigned short, 2)
+SUBWORD_BOOL_CAS (unsigned char, 1)
+
+#undef NAME_oldval
+#define NAME_oldval(OP, WIDTH) __sync_lock_##OP##_##WIDTH
+#define COMMA ,
+
+WORD_SYNC_OP (test_and_set, , COMMA, oldval)
+SUBWORD_SYNC_OP (test_and_set, , COMMA, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (test_and_set, , COMMA, unsigned short, 2, oldval)
diff --git a/gcc-4.9/libgcc/config/m68k/linux-unwind.h b/gcc-4.9/libgcc/config/m68k/linux-unwind.h
new file mode 100644
index 000000000..1ba2a0c43
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/linux-unwind.h
@@ -0,0 +1,158 @@
+/* DWARF2 EH unwinding support for Linux/m68k.
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs.
+ Don't use this at all if inhibit_libc is used. */
+
+#ifndef inhibit_libc
+
+#include <signal.h>
+
+/* <sys/ucontext.h> is unfortunately broken right now. */
+struct uw_ucontext {
+ unsigned long uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ unsigned long uc_filler[80];
+ __sigset_t uc_sigmask;
+};
+
+#define MD_FALLBACK_FRAME_STATE_FOR m68k_fallback_frame_state
+
+#ifdef __mcoldfire__
+#define M68K_FP_SIZE 8
+#else
+#define M68K_FP_SIZE 12
+#endif
+
+static _Unwind_Reason_Code
+m68k_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned short *pc = context->ra;
+ long cfa;
+
+ /* moveq #__NR_sigreturn,%d0; trap #0 */
+ if (pc[0] == 0x7077 && pc[1] == 0x4e40)
+ {
+ struct sigcontext *sc;
+
+ /* Context is passed as the 3rd argument. */
+ sc = *(struct sigcontext **) (context->cfa + 8);
+
+ cfa = sc->sc_usp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset = cfa - (long) context->cfa;
+
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long) &sc->sc_d0 - cfa;
+ fs->regs.reg[1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[1].loc.offset = (long) &sc->sc_d1 - cfa;
+ fs->regs.reg[8].how = REG_SAVED_OFFSET;
+ fs->regs.reg[8].loc.offset = (long) &sc->sc_a0 - cfa;
+ fs->regs.reg[9].how = REG_SAVED_OFFSET;
+ fs->regs.reg[9].loc.offset = (long) &sc->sc_a1 - cfa;
+
+#ifdef __uClinux__
+ fs->regs.reg[13].how = REG_SAVED_OFFSET;
+ fs->regs.reg[13].loc.offset = (long) &sc->sc_a5 - cfa;
+#endif
+
+ fs->regs.reg[24].how = REG_SAVED_OFFSET;
+ fs->regs.reg[24].loc.offset = (long) &sc->sc_pc - cfa;
+
+#ifndef __uClinux__
+ if (*(int *) sc->sc_fpstate)
+ {
+ int *fpregs = (int *) sc->sc_fpregs;
+
+ fs->regs.reg[16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[16].loc.offset = (long) &fpregs[0] - cfa;
+ fs->regs.reg[17].how = REG_SAVED_OFFSET;
+ fs->regs.reg[17].loc.offset = (long) &fpregs[M68K_FP_SIZE/4] - cfa;
+ }
+#elif defined __mcffpu__
+# error Implement this when uClinux kernel is ported to an FPU architecture
+#endif
+ }
+#ifdef __mcoldfire__
+ /* move.l #__NR_rt_sigreturn,%d0; trap #0 */
+ else if (pc[0] == 0x203c && pc[1] == 0x0000 &&
+ pc[2] == 0x00ad && pc[3] == 0x4e40)
+#else
+ /* moveq #~__NR_rt_sigreturn,%d0; not.b %d0; trap #0 */
+ else if (pc[0] == 0x7052 && pc[1] == 0x4600 && pc[2] == 0x4e40)
+#endif
+ {
+ struct uw_ucontext *uc;
+ greg_t *gregs;
+ int i;
+
+ /* Context is passed as the 3rd argument. */
+ uc = *(struct uw_ucontext **) (context->cfa + 8);
+
+ gregs = uc->uc_mcontext.gregs;
+ cfa = gregs[15];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset = cfa - (long) context->cfa;
+
+ /* register %d0-%d7/%a0-%a6 */
+ for (i = 0; i <= 14; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset = (long) &gregs[i] - cfa;
+ }
+
+ /* return address */
+ fs->regs.reg[24].how = REG_SAVED_OFFSET;
+ fs->regs.reg[24].loc.offset = (long) &gregs[16] - cfa;
+
+#define uc_fpstate uc_filler[0]
+
+ if (uc->uc_fpstate)
+ {
+ long fpregs = (long) uc->uc_mcontext.fpregs.f_fpregs;
+
+ /* register %fp0-%fp7 */
+ for (i = 16; i <= 23; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset = fpregs - cfa;
+ fpregs += M68K_FP_SIZE;
+ }
+ }
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ fs->retaddr_column = 24;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+#endif /* ifdef inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/m68k/t-floatlib b/gcc-4.9/libgcc/config/m68k/t-floatlib
new file mode 100644
index 000000000..1ee8782d9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/t-floatlib
@@ -0,0 +1,11 @@
+LIB1ASMSRC = m68k/lb1sf68.S
+LIB1ASMFUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
+ _double _float _floatex \
+ _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \
+ _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2
+
+LIB2ADD = $(srcdir)/config/m68k/fpgnulib.c xfgnulib.c
+
+xfgnulib.c: $(srcdir)/config/m68k/fpgnulib.c
+ echo '#define EXTFLOAT' > xfgnulib.c
+ cat $< >> xfgnulib.c
diff --git a/gcc-4.9/libgcc/config/m68k/t-linux b/gcc-4.9/libgcc/config/m68k/t-linux
new file mode 100644
index 000000000..06f0fe09f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/t-linux
@@ -0,0 +1 @@
+LIB2ADD_ST = $(srcdir)/config/m68k/linux-atomic.c
diff --git a/gcc-4.9/libgcc/config/m68k/t-slibgcc-elf-ver b/gcc-4.9/libgcc/config/m68k/t-slibgcc-elf-ver
new file mode 100644
index 000000000..6aac37cc0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/m68k/t-slibgcc-elf-ver
@@ -0,0 +1,3 @@
+# Bump the version number of the shared libgcc library
+
+SHLIB_SOVERSION = 2
diff --git a/gcc-4.9/libgcc/config/mcore/crti.S b/gcc-4.9/libgcc/config/mcore/crti.S
new file mode 100644
index 000000000..4b67933ef
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mcore/crti.S
@@ -0,0 +1,62 @@
+# crti.S for ELF based systems
+
+# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Written By David Vinayak Henkel-Wallace, June 1992
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+# This file just makes a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+ .section ".init"
+ .global _init
+ .type _init,@function
+ .align 4
+_init:
+ subi r0, 16
+ st.w r15, (r0, 12)
+
+ # These nops are here to align the end of this code with a 16 byte
+ # boundary. The linker will start inserting code into the .init
+ # section at such a boundary.
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+
+ .section ".fini"
+ .global _fini
+ .type _fini,@function
+ .align 4
+_fini:
+ subi r0, 16
+ st.w r15, (r0, 12)
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/gcc-4.9/libgcc/config/mcore/crtn.S b/gcc-4.9/libgcc/config/mcore/crtn.S
new file mode 100644
index 000000000..87f350cfb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mcore/crtn.S
@@ -0,0 +1,44 @@
+# crtn.S for ELF based systems
+
+# Copyright (C) 1992-2014 Free Software Foundation, Inc.
+# Written By David Vinayak Henkel-Wallace, June 1992
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+ .section ".init"
+ .align 4
+
+ ldw r15,(r0, 12)
+ addi r0,16
+ jmp r15
+
+ .section ".fini"
+ .align 4
+
+ ldw r15, (r0, 12)
+ addi r0,16
+ jmp r15
+
+# Th-th-th-that is all folks!
+
diff --git a/gcc-4.9/libgcc/config/mcore/lib1funcs.S b/gcc-4.9/libgcc/config/mcore/lib1funcs.S
new file mode 100644
index 000000000..8f486caf6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mcore/lib1funcs.S
@@ -0,0 +1,303 @@
+/* libgcc routines for the MCore.
+ Copyright (C) 1993-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define CONCAT1(a, b) CONCAT2(a, b)
+#define CONCAT2(a, b) a ## b
+
+/* Use the right prefix for global labels. */
+
+#define SYM(x) CONCAT1 (__, x)
+
+#ifdef __ELF__
+#define TYPE(x) .type SYM (x),@function
+#define SIZE(x) .size SYM (x), . - SYM (x)
+#else
+#define TYPE(x)
+#define SIZE(x)
+#endif
+
+.macro FUNC_START name
+ .text
+ .globl SYM (\name)
+ TYPE (\name)
+SYM (\name):
+.endm
+
+.macro FUNC_END name
+ SIZE (\name)
+.endm
+
+#ifdef L_udivsi3
+FUNC_START udiv32
+FUNC_START udivsi32
+
+ movi r1,0 // r1-r2 form 64 bit dividend
+ movi r4,1 // r4 is quotient (1 for a sentinel)
+
+ cmpnei r3,0 // look for 0 divisor
+ bt 9f
+ trap 3 // divide by 0
+9:
+ // control iterations; skip across high order 0 bits in dividend
+ mov r7,r2
+ cmpnei r7,0
+ bt 8f
+ movi r2,0 // 0 dividend
+ jmp r15 // quick return
+8:
+ ff1 r7 // figure distance to skip
+ lsl r4,r7 // move the sentinel along (with 0's behind)
+ lsl r2,r7 // and the low 32 bits of numerator
+
+// appears to be wrong...
+// tested out incorrectly in our OS work...
+// mov r7,r3 // looking at divisor
+// ff1 r7 // I can move 32-r7 more bits to left.
+// addi r7,1 // ok, one short of that...
+// mov r1,r2
+// lsr r1,r7 // bits that came from low order...
+// rsubi r7,31 // r7 == "32-n" == LEFT distance
+// addi r7,1 // this is (32-n)
+// lsl r4,r7 // fixes the high 32 (quotient)
+// lsl r2,r7
+// cmpnei r4,0
+// bf 4f // the sentinel went away...
+
+ // run the remaining bits
+
+1: lslc r2,1 // 1 bit left shift of r1-r2
+ addc r1,r1
+ cmphs r1,r3 // upper 32 of dividend >= divisor?
+ bf 2f
+ sub r1,r3 // if yes, subtract divisor
+2: addc r4,r4 // shift by 1 and count subtracts
+ bf 1b // if sentinel falls out of quotient, stop
+
+4: mov r2,r4 // return quotient
+ mov r3,r1 // and piggyback the remainder
+ jmp r15
+FUNC_END udiv32
+FUNC_END udivsi32
+#endif
+
+#ifdef L_umodsi3
+FUNC_START urem32
+FUNC_START umodsi3
+ movi r1,0 // r1-r2 form 64 bit dividend
+ movi r4,1 // r4 is quotient (1 for a sentinel)
+ cmpnei r3,0 // look for 0 divisor
+ bt 9f
+ trap 3 // divide by 0
+9:
+ // control iterations; skip across high order 0 bits in dividend
+ mov r7,r2
+ cmpnei r7,0
+ bt 8f
+ movi r2,0 // 0 dividend
+ jmp r15 // quick return
+8:
+ ff1 r7 // figure distance to skip
+ lsl r4,r7 // move the sentinel along (with 0's behind)
+ lsl r2,r7 // and the low 32 bits of numerator
+
+1: lslc r2,1 // 1 bit left shift of r1-r2
+ addc r1,r1
+ cmphs r1,r3 // upper 32 of dividend >= divisor?
+ bf 2f
+ sub r1,r3 // if yes, subtract divisor
+2: addc r4,r4 // shift by 1 and count subtracts
+ bf 1b // if sentinel falls out of quotient, stop
+ mov r2,r1 // return remainder
+ jmp r15
+FUNC_END urem32
+FUNC_END umodsi3
+#endif
+
+#ifdef L_divsi3
+FUNC_START div32
+FUNC_START divsi3
+ mov r5,r2 // calc sign of quotient
+ xor r5,r3
+ abs r2 // do unsigned divide
+ abs r3
+ movi r1,0 // r1-r2 form 64 bit dividend
+ movi r4,1 // r4 is quotient (1 for a sentinel)
+ cmpnei r3,0 // look for 0 divisor
+ bt 9f
+ trap 3 // divide by 0
+9:
+ // control iterations; skip across high order 0 bits in dividend
+ mov r7,r2
+ cmpnei r7,0
+ bt 8f
+ movi r2,0 // 0 dividend
+ jmp r15 // quick return
+8:
+ ff1 r7 // figure distance to skip
+ lsl r4,r7 // move the sentinel along (with 0's behind)
+ lsl r2,r7 // and the low 32 bits of numerator
+
+// tested out incorrectly in our OS work...
+// mov r7,r3 // looking at divisor
+// ff1 r7 // I can move 32-r7 more bits to left.
+// addi r7,1 // ok, one short of that...
+// mov r1,r2
+// lsr r1,r7 // bits that came from low order...
+// rsubi r7,31 // r7 == "32-n" == LEFT distance
+// addi r7,1 // this is (32-n)
+// lsl r4,r7 // fixes the high 32 (quotient)
+// lsl r2,r7
+// cmpnei r4,0
+// bf 4f // the sentinel went away...
+
+ // run the remaining bits
+1: lslc r2,1 // 1 bit left shift of r1-r2
+ addc r1,r1
+ cmphs r1,r3 // upper 32 of dividend >= divisor?
+ bf 2f
+ sub r1,r3 // if yes, subtract divisor
+2: addc r4,r4 // shift by 1 and count subtracts
+ bf 1b // if sentinel falls out of quotient, stop
+
+4: mov r2,r4 // return quotient
+ mov r3,r1 // piggyback the remainder
+ btsti r5,31 // after adjusting for sign
+ bf 3f
+ rsubi r2,0
+ rsubi r3,0
+3: jmp r15
+FUNC_END div32
+FUNC_END divsi3
+#endif
+
+#ifdef L_modsi3
+FUNC_START rem32
+FUNC_START modsi3
+ mov r5,r2 // calc sign of remainder
+ abs r2 // do unsigned divide
+ abs r3
+ movi r1,0 // r1-r2 form 64 bit dividend
+ movi r4,1 // r4 is quotient (1 for a sentinel)
+ cmpnei r3,0 // look for 0 divisor
+ bt 9f
+ trap 3 // divide by 0
+9:
+ // control iterations; skip across high order 0 bits in dividend
+ mov r7,r2
+ cmpnei r7,0
+ bt 8f
+ movi r2,0 // 0 dividend
+ jmp r15 // quick return
+8:
+ ff1 r7 // figure distance to skip
+ lsl r4,r7 // move the sentinel along (with 0's behind)
+ lsl r2,r7 // and the low 32 bits of numerator
+
+1: lslc r2,1 // 1 bit left shift of r1-r2
+ addc r1,r1
+ cmphs r1,r3 // upper 32 of dividend >= divisor?
+ bf 2f
+ sub r1,r3 // if yes, subtract divisor
+2: addc r4,r4 // shift by 1 and count subtracts
+ bf 1b // if sentinel falls out of quotient, stop
+ mov r2,r1 // return remainder
+ btsti r5,31 // after adjusting for sign
+ bf 3f
+ rsubi r2,0
+3: jmp r15
+FUNC_END rem32
+FUNC_END modsi3
+#endif
+
+
+/* GCC expects that {__eq,__ne,__gt,__ge,__le,__lt}{df2,sf2}
+ will behave as __cmpdf2. So, we stub the implementations to
+ jump on to __cmpdf2 and __cmpsf2.
+
+ All of these shortcircuit the return path so that __cmp{sd}f2
+ will go directly back to the caller. */
+
+.macro COMPARE_DF_JUMP name
+ .import SYM (cmpdf2)
+FUNC_START \name
+ jmpi SYM (cmpdf2)
+FUNC_END \name
+.endm
+
+#ifdef L_eqdf2
+COMPARE_DF_JUMP eqdf2
+#endif /* L_eqdf2 */
+
+#ifdef L_nedf2
+COMPARE_DF_JUMP nedf2
+#endif /* L_nedf2 */
+
+#ifdef L_gtdf2
+COMPARE_DF_JUMP gtdf2
+#endif /* L_gtdf2 */
+
+#ifdef L_gedf2
+COMPARE_DF_JUMP gedf2
+#endif /* L_gedf2 */
+
+#ifdef L_ltdf2
+COMPARE_DF_JUMP ltdf2
+#endif /* L_ltdf2 */
+
+#ifdef L_ledf2
+COMPARE_DF_JUMP ledf2
+#endif /* L_ledf2 */
+
+/* SINGLE PRECISION FLOATING POINT STUBS */
+
+.macro COMPARE_SF_JUMP name
+ .import SYM (cmpsf2)
+FUNC_START \name
+ jmpi SYM (cmpsf2)
+FUNC_END \name
+.endm
+
+#ifdef L_eqsf2
+COMPARE_SF_JUMP eqsf2
+#endif /* L_eqsf2 */
+
+#ifdef L_nesf2
+COMPARE_SF_JUMP nesf2
+#endif /* L_nesf2 */
+
+#ifdef L_gtsf2
+COMPARE_SF_JUMP gtsf2
+#endif /* L_gtsf2 */
+
+#ifdef L_gesf2
+COMPARE_SF_JUMP __gesf2
+#endif /* L_gesf2 */
+
+#ifdef L_ltsf2
+COMPARE_SF_JUMP __ltsf2
+#endif /* L_ltsf2 */
+
+#ifdef L_lesf2
+COMPARE_SF_JUMP lesf2
+#endif /* L_lesf2 */
diff --git a/gcc-4.9/libgcc/config/mcore/t-mcore b/gcc-4.9/libgcc/config/mcore/t-mcore
new file mode 100644
index 000000000..8268a17e7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mcore/t-mcore
@@ -0,0 +1,5 @@
+LIB1ASMSRC = mcore/lib1funcs.S
+LIB1ASMFUNCS = _divsi3 _udivsi3 _modsi3 _umodsi3
+
+# could use -msifilter to be safe from interrupt/jmp interactions and others.
+HOST_LIBGCC2_CFLAGS += -O3 -DNO_FLOATLIB_FIXUNSDFSI #-msifilter
diff --git a/gcc-4.9/libgcc/config/mep/lib1funcs.S b/gcc-4.9/libgcc/config/mep/lib1funcs.S
new file mode 100644
index 000000000..56fc1840f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mep/lib1funcs.S
@@ -0,0 +1,125 @@
+/* libgcc routines for Toshiba Media Processor.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define SAVEALL \
+ add3 $sp, $sp, -16*4 ; \
+ sw $0, ($sp) ; \
+ sw $1, 4($sp) ; \
+ sw $2, 8($sp) ; \
+ sw $3, 12($sp) ; \
+ sw $4, 16($sp) ; \
+ sw $5, 20($sp) ; \
+ sw $6, 24($sp) ; \
+ sw $7, 28($sp) ; \
+ sw $8, 32($sp) ; \
+ sw $9, 36($sp) ; \
+ sw $10, 40($sp) ; \
+ sw $11, 44($sp) ; \
+ sw $12, 48($sp) ; \
+ sw $13, 52($sp) ; \
+ sw $14, 56($sp) ; \
+ ldc $5, $lp ; \
+ add $5, 3 ; \
+ mov $6, -4 ; \
+ and $5, $6
+
+#define RESTOREALL \
+ stc $5, $lp ; \
+ lw $14, 56($sp) ; \
+ lw $13, 52($sp) ; \
+ lw $12, 48($sp) ; \
+ lw $11, 44($sp) ; \
+ lw $10, 40($sp) ; \
+ lw $9, 36($sp) ; \
+ lw $8, 32($sp) ; \
+ lw $7, 28($sp) ; \
+ lw $6, 24($sp) ; \
+ lw $5, 20($sp) ; \
+ lw $4, 16($sp) ; \
+ lw $3, 12($sp) ; \
+ lw $2, 8($sp) ; \
+ lw $1, 4($sp) ; \
+ lw $0, ($sp) ; \
+ add3 $sp, $sp, 16*4 ; \
+ ret
+
+#ifdef L_mep_profile
+ .text
+ .global __mep_mcount
+__mep_mcount:
+ SAVEALL
+ ldc $1, $lp
+ mov $2, $0
+ bsr __mep_mcount_2
+ RESTOREALL
+#endif
+
+#ifdef L_mep_bb_init_trace
+ .text
+ .global __mep_bb_init_trace_func
+__mep_bb_init_trace_func:
+ SAVEALL
+ lw $1, ($5)
+ lw $2, 4($5)
+ add $5, 8
+ bsr __bb_init_trace_func
+ RESTOREALL
+#endif
+
+#ifdef L_mep_bb_init
+ .text
+ .global __mep_bb_init_func
+__mep_bb_init_func:
+ SAVEALL
+ lw $1, ($5)
+ add $5, 4
+ bsr __bb_init_func
+ RESTOREALL
+#endif
+
+#ifdef L_mep_bb_trace
+ .text
+ .global __mep_bb_trace_func
+__mep_bb_trace_func:
+ SAVEALL
+ movu $3, __bb
+ lw $1, ($5)
+ sw $1, ($3)
+ lw $2, 4($5)
+ sw $2, 4($3)
+ add $5, 8
+ bsr __bb_trace_func
+ RESTOREALL
+#endif
+
+#ifdef L_mep_bb_increment
+ .text
+ .global __mep_bb_increment_func
+__mep_bb_increment_func:
+ SAVEALL
+ lw $1, ($5)
+ lw $0, ($1)
+ add $0, 1
+ sw $0, ($1)
+ add $5, 4
+ RESTOREALL
+#endif
diff --git a/gcc-4.9/libgcc/config/mep/lib2funcs.c b/gcc-4.9/libgcc/config/mep/lib2funcs.c
new file mode 100644
index 000000000..3be913219
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mep/lib2funcs.c
@@ -0,0 +1,139 @@
+/* libgcc routines for MeP.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef int SItype __attribute__ ((mode (SI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+
+typedef int word_type __attribute__ ((mode (__word__)));
+
+USItype
+__mulsi3 (USItype a, USItype b)
+{
+ USItype c = 0;
+
+ while (a != 0)
+ {
+ if (a & 1)
+ c += b;
+ a >>= 1;
+ b <<= 1;
+ }
+
+ return c;
+}
+
+
+
+USItype
+udivmodsi4(USItype num, USItype den, word_type modwanted)
+{
+ USItype bit = 1;
+ USItype res = 0;
+
+ while (den < num && bit && !(den & (1L<<31)))
+ {
+ den <<=1;
+ bit <<=1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>=1;
+ den >>=1;
+ }
+ if (modwanted) return num;
+ return res;
+}
+
+
+
+SItype
+__divsi3 (SItype a, SItype b)
+{
+ word_type neg = 0;
+ SItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = udivmodsi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+
+
+SItype
+__modsi3 (SItype a, SItype b)
+{
+ word_type neg = 0;
+ SItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = udivmodsi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+
+
+
+SItype
+__udivsi3 (SItype a, SItype b)
+{
+ return udivmodsi4 (a, b, 0);
+}
+
+
+
+SItype
+__umodsi3 (SItype a, SItype b)
+{
+ return udivmodsi4 (a, b, 1);
+}
diff --git a/gcc-4.9/libgcc/config/mep/t-mep b/gcc-4.9/libgcc/config/mep/t-mep
new file mode 100644
index 000000000..fb3a0d60c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mep/t-mep
@@ -0,0 +1,16 @@
+# profiling support
+LIB1ASMSRC = mep/lib1funcs.S
+
+LIB1ASMFUNCS = _mep_profile \
+ _mep_bb_init_trace \
+ _mep_bb_init \
+ _mep_bb_trace \
+ _mep_bb_increment
+
+# multiply and divide routines
+LIB2ADD = \
+ $(srcdir)/config/mep/lib2funcs.c \
+ $(srcdir)/config/mep/tramp.c
+
+# Use -O0 instead of -O2 so we don't get complex relocations
+CRTSTUFF_CFLAGS += -O0
diff --git a/gcc-4.9/libgcc/config/mep/tramp.c b/gcc-4.9/libgcc/config/mep/tramp.c
new file mode 100644
index 000000000..4b294c6df
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mep/tramp.c
@@ -0,0 +1,103 @@
+/* Trampoline support for MeP
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ 7a0a ldc $10,$pc
+ c0ae000a lw $0,10($10)
+ caae000e lw $10,14($10)
+ 10ae jmp $10
+ 00000000 static chain
+ 00000000 function address
+*/
+
+static inline int
+cache_config_register(void) {
+ int rv;
+ asm ("ldc\t%0, $ccfg" : "=r" (rv));
+ return rv;
+}
+
+#define ICACHE_SIZE ((cache_config_register() >> 16) & 0x7f)
+#define DCACHE_SIZE (cache_config_register() & 0x7f)
+
+#define ICACHE_DATA_BASE 0x00300000
+#define ICACHE_TAG_BASE 0x00310000
+#define DCACHE_DATA_BASE 0x00320000
+#define DCACHE_TAG_BASE 0x00330000
+
+static inline void
+flush_dcache (int addr)
+{
+ asm volatile ("cache\t0, (%0)" : : "r" (addr));
+}
+
+void
+__mep_trampoline_helper (unsigned long *tramp,
+ int function_address,
+ int static_chain);
+
+void
+__mep_trampoline_helper (unsigned long *tramp,
+ int function_address,
+ int static_chain)
+{
+ int dsize, isize;
+
+#ifdef __LITTLE_ENDIAN__
+ tramp[0] = 0xc0ae7a0a;
+ tramp[1] = 0xcaae000a;
+ tramp[2] = 0x10ae000e;
+#else
+ tramp[0] = 0x7a0ac0ae;
+ tramp[1] = 0x000acaae;
+ tramp[2] = 0x000e10ae;
+#endif
+ tramp[3] = static_chain;
+ tramp[4] = function_address;
+
+ dsize = DCACHE_SIZE;
+ isize = ICACHE_SIZE;
+
+ if (dsize)
+ {
+ flush_dcache ((int)tramp);
+ flush_dcache ((int)tramp+16);
+ }
+
+ if (isize)
+ {
+ int imask = (isize * 1024) - 1;
+ int tmask = ~imask;
+ unsigned int i;
+ volatile unsigned int *tags;
+
+ imask &= 0xffe0;
+
+ for (i=(unsigned int)tramp; i<(unsigned int)tramp+20; i+=16)
+ {
+ tags = (unsigned int *)(ICACHE_TAG_BASE + (i & imask));
+ if ((*tags & tmask) == (i & tmask))
+ *tags &= ~1;
+ }
+ }
+}
diff --git a/gcc-4.9/libgcc/config/microblaze/crti.S b/gcc-4.9/libgcc/config/microblaze/crti.S
new file mode 100644
index 000000000..68328b172
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/crti.S
@@ -0,0 +1,49 @@
+/* crti.s for __init, __fini
+ This file supplies the prologue for __init and __fini routines
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ Contributed by Michael Eager <eager@eagercon.com>.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .init, "ax"
+ .global __init
+
+ .weak _stack
+ .set _stack, 0xffffffff
+ .weak _stack_end
+ .set _stack_end, 0
+
+ .align 2
+__init:
+ addik r1, r1, -8
+ sw r15, r0, r1
+ la r11, r0, _stack
+ mts rshr, r11
+ la r11, r0, _stack_end
+ mts rslr, r11
+
+ .section .fini, "ax"
+ .global __fini
+ .align 2
+__fini:
+ addik r1, r1, -8
+ sw r15, r0, r1
diff --git a/gcc-4.9/libgcc/config/microblaze/crtn.S b/gcc-4.9/libgcc/config/microblaze/crtn.S
new file mode 100644
index 000000000..5f26d8e45
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/crtn.S
@@ -0,0 +1,35 @@
+/* crtn.s for __init, __fini
+ This file supplies the epilogue for __init and __fini routines
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ Contributed by Michael Eager <eager@eagercon.com>.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .init, "ax"
+ lw r15, r0, r1
+ rtsd r15, 8
+ addik r1, r1, 8
+
+ .section .fini, "ax"
+ lw r15, r0, r1
+ rtsd r15, 8
+ addik r1, r1, 8
diff --git a/gcc-4.9/libgcc/config/microblaze/divsi3.S b/gcc-4.9/libgcc/config/microblaze/divsi3.S
new file mode 100644
index 000000000..0f918255d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/divsi3.S
@@ -0,0 +1,96 @@
+###################################-
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# divsi3.S
+#
+# Divide operation for 32 bit integers.
+# Input : Dividend in Reg r5
+# Divisor in Reg r6
+# Output: Result in Reg r3
+#
+#######################################
+
+ .globl __divsi3
+ .ent __divsi3
+ .type __divsi3,@function
+__divsi3:
+ .frame r1,0,r15
+
+ ADDIK r1,r1,-16
+ SWI r28,r1,0
+ SWI r29,r1,4
+ SWI r30,r1,8
+ SWI r31,r1,12
+
+ BEQI r6,$LaDiv_By_Zero # Div_by_Zero # Division Error
+ BEQI r5,$LaResult_Is_Zero # Result is Zero
+ BGEID r5,$LaR5_Pos
+ XOR r28,r5,r6 # Get the sign of the result
+ RSUBI r5,r5,0 # Make r5 positive
+$LaR5_Pos:
+ BGEI r6,$LaR6_Pos
+ RSUBI r6,r6,0 # Make r6 positive
+$LaR6_Pos:
+ ADDIK r30,r0,0 # Clear mod
+ ADDIK r3,r0,0 # clear div
+ ADDIK r29,r0,32 # Initialize the loop count
+
+ # First part try to find the first '1' in the r5
+$LaDIV0:
+ BLTI r5,$LaDIV2 # This traps r5 == 0x80000000
+$LaDIV1:
+ ADD r5,r5,r5 # left shift logical r5
+ BGTID r5,$LaDIV1
+ ADDIK r29,r29,-1
+$LaDIV2:
+ ADD r5,r5,r5 # left shift logical r5 get the '1' into the Carry
+ ADDC r30,r30,r30 # Move that bit into the Mod register
+ RSUB r31,r6,r30 # Try to subtract (r30 a r6)
+ BLTI r31,$LaMOD_TOO_SMALL
+ OR r30,r0,r31 # Move the r31 to mod since the result was positive
+ ADDIK r3,r3,1
+$LaMOD_TOO_SMALL:
+ ADDIK r29,r29,-1
+ BEQi r29,$LaLOOP_END
+ ADD r3,r3,r3 # Shift in the '1' into div
+ BRI $LaDIV2 # Div2
+$LaLOOP_END:
+ BGEI r28,$LaRETURN_HERE
+ BRID $LaRETURN_HERE
+ RSUBI r3,r3,0 # Negate the result
+$LaDiv_By_Zero:
+$LaResult_Is_Zero:
+ OR r3,r0,r0 # set result to 0
+$LaRETURN_HERE:
+# Restore values of CSRs and that of r3 and the divisor and the dividend
+ LWI r28,r1,0
+ LWI r29,r1,4
+ LWI r30,r1,8
+ LWI r31,r1,12
+ RTSD r15,8
+ ADDIK r1,r1,16
+.end __divsi3
+ .size __divsi3, . - __divsi3
+
diff --git a/gcc-4.9/libgcc/config/microblaze/divsi3_table.c b/gcc-4.9/libgcc/config/microblaze/divsi3_table.c
new file mode 100644
index 000000000..4201e9290
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/divsi3_table.c
@@ -0,0 +1,62 @@
+/* Table for software lookup divide for Xilinx MicroBlaze.
+
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ Contributed by Michael Eager <eager@eagercon.com>.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+
+unsigned char _divsi3_table[] =
+{
+ 0, 0/1, 0/2, 0/3, 0/4, 0/5, 0/6, 0/7,
+ 0/8, 0/9, 0/10, 0/11, 0/12, 0/13, 0/14, 0/15,
+ 0, 1/1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7,
+ 1/8, 1/9, 1/10, 1/11, 1/12, 1/13, 1/14, 1/15,
+ 0, 2/1, 2/2, 2/3, 2/4, 2/5, 2/6, 2/7,
+ 2/8, 2/9, 2/10, 2/11, 2/12, 2/13, 2/14, 2/15,
+ 0, 3/1, 3/2, 3/3, 3/4, 3/5, 3/6, 3/7,
+ 3/8, 3/9, 3/10, 3/11, 3/12, 3/13, 3/14, 3/15,
+ 0, 4/1, 4/2, 4/3, 4/4, 4/5, 4/6, 4/7,
+ 4/8, 4/9, 4/10, 4/11, 4/12, 4/13, 4/14, 4/15,
+ 0, 5/1, 5/2, 5/3, 5/4, 5/5, 5/6, 5/7,
+ 5/8, 5/9, 5/10, 5/11, 5/12, 5/13, 5/14, 5/15,
+ 0, 6/1, 6/2, 6/3, 6/4, 6/5, 6/6, 6/7,
+ 6/8, 6/9, 6/10, 6/11, 6/12, 6/13, 6/14, 6/15,
+ 0, 7/1, 7/2, 7/3, 7/4, 7/5, 7/6, 7/7,
+ 7/8, 7/9, 7/10, 7/11, 7/12, 7/13, 7/14, 7/15,
+ 0, 8/1, 8/2, 8/3, 8/4, 8/5, 8/6, 8/7,
+ 8/8, 8/9, 8/10, 8/11, 8/12, 8/13, 8/14, 8/15,
+ 0, 9/1, 9/2, 9/3, 9/4, 9/5, 9/6, 9/7,
+ 9/8, 9/9, 9/10, 9/11, 9/12, 9/13, 9/14, 9/15,
+ 0, 10/1, 10/2, 10/3, 10/4, 10/5, 10/6, 10/7,
+ 10/8, 10/9, 10/10, 10/11, 10/12, 10/13, 10/14, 10/15,
+ 0, 11/1, 11/2, 11/3, 11/4, 11/5, 11/6, 11/7,
+ 11/8, 11/9, 11/10, 11/11, 11/12, 11/13, 11/14, 11/15,
+ 0, 12/1, 12/2, 12/3, 12/4, 12/5, 12/6, 12/7,
+ 12/8, 12/9, 12/10, 12/11, 12/12, 12/13, 12/14, 12/15,
+ 0, 13/1, 13/2, 13/3, 13/4, 13/5, 13/6, 13/7,
+ 13/8, 13/9, 13/10, 13/11, 13/12, 13/13, 13/14, 13/15,
+ 0, 14/1, 14/2, 14/3, 14/4, 14/5, 14/6, 14/7,
+ 14/8, 14/9, 14/10, 14/11, 14/12, 14/13, 14/14, 14/15,
+ 0, 15/1, 15/2, 15/3, 15/4, 15/5, 15/6, 15/7,
+ 15/8, 15/9, 15/10, 15/11, 15/12, 15/13, 15/14, 15/15,
+};
+
diff --git a/gcc-4.9/libgcc/config/microblaze/moddi3.S b/gcc-4.9/libgcc/config/microblaze/moddi3.S
new file mode 100644
index 000000000..6c7bf5d76
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/moddi3.S
@@ -0,0 +1,115 @@
+###################################
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# modsi3.S
+#
+# modulo operation for 64 bit integers.
+#
+#######################################
+
+
+ .globl __moddi3
+ .ent __moddi3
+__moddi3:
+ .frame r1,0,r15
+
+#Change the stack pointer value and Save callee saved regs
+ addik r1,r1,-24
+ swi r25,r1,0
+ swi r26,r1,4
+ swi r27,r1,8 # used for sign
+ swi r28,r1,12 # used for loop count
+ swi r29,r1,16 # Used for div value High
+ swi r30,r1,20 # Used for div value Low
+
+#Check for Zero Value in the divisor/dividend
+ OR r9,r5,r6 # Check for the op1 being zero
+ BEQID r9,$LaResult_Is_Zero # Result is zero
+ OR r9,r7,r8 # Check for the dividend being zero
+ BEQI r9,$LaDiv_By_Zero # Div_by_Zero # Division Error
+ BGEId r5,$La1_Pos
+ XOR r27,r5,r7 # Get the sign of the result
+ RSUBI r6,r6,0 # Make dividend positive
+ RSUBIC r5,r5,0 # Make dividend positive
+$La1_Pos:
+ BGEI r7,$La2_Pos
+ RSUBI r8,r8,0 # Make Divisor Positive
+ RSUBIC r9,r9,0 # Make Divisor Positive
+$La2_Pos:
+ ADDIK r4,r0,0 # Clear mod low
+ ADDIK r3,r0,0 # Clear mod high
+ ADDIK r29,r0,0 # clear div high
+ ADDIK r30,r0,0 # clear div low
+ ADDIK r28,r0,64 # Initialize the loop count
+ # First part try to find the first '1' in the r5/r6
+$LaDIV1:
+ ADD r6,r6,r6
+ ADDC r5,r5,r5 # left shift logical r5
+ BGEID r5,$LaDIV1
+ ADDIK r28,r28,-1
+$LaDIV2:
+ ADD r6,r6,r6
+ ADDC r5,r5,r5 # left shift logical r5/r6 get the '1' into the Carry
+ ADDC r4,r4,r4 # Move that bit into the Mod register
+ ADDC r3,r3,r3 # Move carry into high mod register
+ rsub r18,r7,r3 # Compare the High Parts of Mod and Divisor
+ bnei r18,$L_High_EQ
+ rsub r18,r6,r4 # Compare Low Parts only if Mod[h] == Divisor[h]
+$L_High_EQ:
+ rSUB r26,r8,r4 # Subtract divisor[L] from Mod[L]
+ rsubc r25,r7,r3 # Subtract divisor[H] from Mod[H]
+ BLTi r25,$LaMOD_TOO_SMALL
+ OR r3,r0,r25 # move r25 to mod [h]
+ OR r4,r0,r26 # move r26 to mod [l]
+ ADDI r30,r30,1
+ ADDC r29,r29,r0
+$LaMOD_TOO_SMALL:
+ ADDIK r28,r28,-1
+ BEQi r28,$LaLOOP_END
+ ADD r30,r30,r30 # Shift in the '1' into div [low]
+ ADDC r29,r29,r29 # Move the carry generated into high
+ BRI $LaDIV2 # Div2
+$LaLOOP_END:
+ BGEI r27,$LaRETURN_HERE
+ rsubi r30,r30,0
+ rsubc r29,r29,r0
+ BRI $LaRETURN_HERE
+$LaDiv_By_Zero:
+$LaResult_Is_Zero:
+ or r29,r0,r0 # set result to 0 [High]
+ or r30,r0,r0 # set result to 0 [Low]
+$LaRETURN_HERE:
+# Restore values of CSRs and that of r29 and the divisor and the dividend
+
+ lwi r25,r1,0
+ lwi r26,r1,4
+ lwi r27,r1,8
+ lwi r28,r1,12
+ lwi r29,r1,16
+ lwi r30,r1,20
+ rtsd r15,8
+ addik r1,r1,24
+ .end __moddi3
+
diff --git a/gcc-4.9/libgcc/config/microblaze/modsi3.S b/gcc-4.9/libgcc/config/microblaze/modsi3.S
new file mode 100644
index 000000000..73951eccf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/modsi3.S
@@ -0,0 +1,95 @@
+###################################
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# modsi3.S
+#
+# modulo operation for 32 bit integers.
+# Input : op1 in Reg r5
+# op2 in Reg r6
+# Output: op1 mod op2 in Reg r3
+#
+#######################################
+
+ .globl __modsi3
+ .ent __modsi3
+ .type __modsi3,@function
+__modsi3:
+ .frame r1,0,r15
+
+ addik r1,r1,-16
+ swi r28,r1,0
+ swi r29,r1,4
+ swi r30,r1,8
+ swi r31,r1,12
+
+ BEQI r6,$LaDiv_By_Zero # Div_by_Zero # Division Error
+ BEQI r5,$LaResult_Is_Zero # Result is Zero
+ BGEId r5,$LaR5_Pos
+ ADD r28,r5,r0 # Get the sign of the result [ Depends only on the first arg]
+ RSUBI r5,r5,0 # Make r5 positive
+$LaR5_Pos:
+ BGEI r6,$LaR6_Pos
+ RSUBI r6,r6,0 # Make r6 positive
+$LaR6_Pos:
+ ADDIK r3,r0,0 # Clear mod
+ ADDIK r30,r0,0 # clear div
+ BLTId r5,$LaDIV2 # If r5 is still negative (0x80000000), skip
+ # the first bit search.
+ ADDIK r29,r0,32 # Initialize the loop count
+ # First part try to find the first '1' in the r5
+$LaDIV1:
+ ADD r5,r5,r5 # left shift logical r5
+ BGEID r5,$LaDIV1 #
+ ADDIK r29,r29,-1
+$LaDIV2:
+ ADD r5,r5,r5 # left shift logical r5 get the '1' into the Carry
+ ADDC r3,r3,r3 # Move that bit into the Mod register
+ rSUB r31,r6,r3 # Try to subtract (r30 a r6)
+ BLTi r31,$LaMOD_TOO_SMALL
+ OR r3,r0,r31 # Move the r31 to mod since the result was positive
+ ADDIK r30,r30,1
+$LaMOD_TOO_SMALL:
+ ADDIK r29,r29,-1
+ BEQi r29,$LaLOOP_END
+ ADD r30,r30,r30 # Shift in the '1' into div
+ BRI $LaDIV2 # Div2
+$LaLOOP_END:
+ BGEI r28,$LaRETURN_HERE
+ BRId $LaRETURN_HERE
+ rsubi r3,r3,0 # Negate the result
+$LaDiv_By_Zero:
+$LaResult_Is_Zero:
+ or r3,r0,r0 # set result to 0 [Both mod as well as div are 0]
+$LaRETURN_HERE:
+# Restore values of CSRs and that of r3 and the divisor and the dividend
+ lwi r28,r1,0
+ lwi r29,r1,4
+ lwi r30,r1,8
+ lwi r31,r1,12
+ rtsd r15,8
+ addik r1,r1,16
+ .end __modsi3
+ .size __modsi3, . - __modsi3
+
diff --git a/gcc-4.9/libgcc/config/microblaze/muldi3_hard.S b/gcc-4.9/libgcc/config/microblaze/muldi3_hard.S
new file mode 100644
index 000000000..14721281c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/muldi3_hard.S
@@ -0,0 +1,144 @@
+###################################-
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# muldi3_hard.S
+#
+# Multiply operation for 64 bit integers, for devices with hard multiply
+# Input : Operand1[H] in Reg r5
+# Operand1[L] in Reg r6
+# Operand2[H] in Reg r7
+# Operand2[L] in Reg r8
+# Output: Result[H] in Reg r3
+# Result[L] in Reg r4
+#
+# Explaination:
+#
+# Both the input numbers are divided into 16 bit number as follows
+# op1 = A B C D
+# op2 = E F G H
+# result = D * H
+# + (C * H + D * G) << 16
+# + (B * H + C * G + D * F) << 32
+# + (A * H + B * G + C * F + D * E) << 48
+#
+# Only 64 bits of the output are considered
+#
+#######################################
+
+ .globl muldi3_hardproc
+ .ent muldi3_hardproc
+muldi3_hardproc:
+ addi r1,r1,-40
+
+# Save the input operands on the caller's stack
+ swi r5,r1,44
+ swi r6,r1,48
+ swi r7,r1,52
+ swi r8,r1,56
+
+# Store all the callee saved registers
+ sw r20,r1,r0
+ swi r21,r1,4
+ swi r22,r1,8
+ swi r23,r1,12
+ swi r24,r1,16
+ swi r25,r1,20
+ swi r26,r1,24
+ swi r27,r1,28
+
+# Load all the 16 bit values for A through H
+ lhui r20,r1,44 # A
+ lhui r21,r1,46 # B
+ lhui r22,r1,48 # C
+ lhui r23,r1,50 # D
+ lhui r24,r1,52 # E
+ lhui r25,r1,54 # F
+ lhui r26,r1,56 # G
+ lhui r27,r1,58 # H
+
+# D * H ==> LSB of the result on stack ==> Store1
+ mul r9,r23,r27
+ swi r9,r1,36 # Pos2 and Pos3
+
+# Hi (Store1) + C * H + D * G ==> Store2 ==> Pos1 and Pos2
+# Store the carry generated in position 2 for Pos 3
+ lhui r11,r1,36 # Pos2
+ mul r9,r22,r27 # C * H
+ mul r10,r23,r26 # D * G
+ add r9,r9,r10
+ addc r12,r0,r0
+ add r9,r9,r11
+ addc r12,r12,r0 # Store the Carry
+ shi r9,r1,36 # Store Pos2
+ swi r9,r1,32
+ lhui r11,r1,32
+ shi r11,r1,34 # Store Pos1
+
+# Hi (Store2) + B * H + C * G + D * F ==> Store3 ==> Pos0 and Pos1
+ mul r9,r21,r27 # B * H
+ mul r10,r22,r26 # C * G
+ mul r7,r23,r25 # D * F
+ add r9,r9,r11
+ add r9,r9,r10
+ add r9,r9,r7
+ swi r9,r1,32 # Pos0 and Pos1
+
+# Hi (Store3) + A * H + B * G + C * F + D * E ==> Store3 ==> Pos0
+ lhui r11,r1,32 # Pos0
+ mul r9,r20,r27 # A * H
+ mul r10,r21,r26 # B * G
+ mul r7,r22,r25 # C * F
+ mul r8,r23,r24 # D * E
+ add r9,r9,r11
+ add r9,r9,r10
+ add r9,r9,r7
+ add r9,r9,r8
+ sext16 r9,r9 # Sign extend the MSB
+ shi r9,r1,32
+
+# Move results to r3 and r4
+ lhui r3,r1,32
+ add r3,r3,r12
+ shi r3,r1,32
+ lwi r3,r1,32 # Hi Part
+ lwi r4,r1,36 # Lo Part
+
+# Restore Callee saved registers
+ lw r20,r1,r0
+ lwi r21,r1,4
+ lwi r22,r1,8
+ lwi r23,r1,12
+ lwi r24,r1,16
+ lwi r25,r1,20
+ lwi r26,r1,24
+ lwi r27,r1,28
+
+# Restore Frame and return
+ rtsd r15,8
+ addi r1,r1,40
+
+.end muldi3_hardproc
+
+
diff --git a/gcc-4.9/libgcc/config/microblaze/mulsi3.S b/gcc-4.9/libgcc/config/microblaze/mulsi3.S
new file mode 100644
index 000000000..7e739a1e0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/mulsi3.S
@@ -0,0 +1,69 @@
+###################################-*-asm*-
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# mulsi3.S
+#
+# Multiply operation for 32 bit integers.
+# Input : Operand1 in Reg r5
+# Operand2 in Reg r6
+# Output: Result [op1 * op2] in Reg r3
+#
+#######################################
+
+ .globl __mulsi3
+ .ent __mulsi3
+ .type __mulsi3,@function
+__mulsi3:
+ .frame r1,0,r15
+ add r3,r0,r0
+ BEQI r5,$L_Result_Is_Zero # Multiply by Zero
+ BEQI r6,$L_Result_Is_Zero # Multiply by Zero
+ BGEId r5,$L_R5_Pos
+ XOR r4,r5,r6 # Get the sign of the result
+ RSUBI r5,r5,0 # Make r5 positive
+$L_R5_Pos:
+ BGEI r6,$L_R6_Pos
+ RSUBI r6,r6,0 # Make r6 positive
+$L_R6_Pos:
+ bri $L1
+$L2:
+ add r5,r5,r5
+$L1:
+ srl r6,r6
+ addc r7,r0,r0
+ beqi r7,$L2
+ bneid r6,$L2
+ add r3,r3,r5
+ blti r4,$L_NegateResult
+ rtsd r15,8
+ nop
+$L_NegateResult:
+ rtsd r15,8
+ rsub r3,r3,r0
+$L_Result_Is_Zero:
+ rtsd r15,8
+ addi r3,r0,0
+ .end __mulsi3
+ .size __mulsi3, . - __mulsi3
diff --git a/gcc-4.9/libgcc/config/microblaze/stack_overflow_exit.S b/gcc-4.9/libgcc/config/microblaze/stack_overflow_exit.S
new file mode 100644
index 000000000..6bac47c98
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/stack_overflow_exit.S
@@ -0,0 +1,61 @@
+###################################-*-asm*-
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# stack_overflow_exit.S
+#
+# Checks for stack overflows and sets the global variable
+# stack_overflow_error with the value of current stack pointer
+#
+# This routine exits from the program
+#
+#######################################
+
+ .globl _stack_overflow_error
+ .data
+ .align 2
+ .type _stack_overflow_error,@object
+ .size _stack_overflow_error,4
+_stack_overflow_error:
+ .data32 0
+
+ .text
+ .globl _stack_overflow_exit
+ .ent _stack_overflow_exit
+ .type _stack_overflow_exit,@function
+
+_stack_overflow_exit:
+#ifdef __PIC__
+ mfs r20,rpc
+ addik r20,r20,_GLOBAL_OFFSET_TABLE_+8
+ swi r1,r20,_stack_overflow_error@GOTOFF
+ bri exit@PLT
+#else
+ swi r1,r0,_stack_overflow_error
+ bri exit
+#endif
+
+ .end _stack_overflow_exit
+ .size _stack_overflow_exit,. - _stack_overflow_exit
diff --git a/gcc-4.9/libgcc/config/microblaze/t-microblaze b/gcc-4.9/libgcc/config/microblaze/t-microblaze
new file mode 100644
index 000000000..96959f029
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/t-microblaze
@@ -0,0 +1,12 @@
+LIB2FUNCS_EXCLUDE += _divsi3 _modsi3 _moddi3 _mulsi3 _udivsi3 _umodsi3
+
+LIB2ADD += \
+ $(srcdir)/config/microblaze/divsi3.S \
+ $(srcdir)/config/microblaze/moddi3.S \
+ $(srcdir)/config/microblaze/modsi3.S \
+ $(srcdir)/config/microblaze/muldi3_hard.S \
+ $(srcdir)/config/microblaze/mulsi3.S \
+ $(srcdir)/config/microblaze/stack_overflow_exit.S \
+ $(srcdir)/config/microblaze/udivsi3.S \
+ $(srcdir)/config/microblaze/umodsi3.S \
+ $(srcdir)/config/microblaze/divsi3_table.c
diff --git a/gcc-4.9/libgcc/config/microblaze/udivsi3.S b/gcc-4.9/libgcc/config/microblaze/udivsi3.S
new file mode 100644
index 000000000..69cb8eb20
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/udivsi3.S
@@ -0,0 +1,103 @@
+###################################-
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# udivsi3.S
+#
+# Unsigned divide operation.
+# Input : Divisor in Reg r5
+# Dividend in Reg r6
+# Output: Result in Reg r3
+#
+#######################################
+
+ .globl __udivsi3
+ .ent __udivsi3
+ .type __udivsi3,@function
+__udivsi3:
+ .frame r1,0,r15
+
+ ADDIK r1,r1,-12
+ SWI r29,r1,0
+ SWI r30,r1,4
+ SWI r31,r1,8
+
+ BEQI r6,$LaDiv_By_Zero # Div_by_Zero # Division Error
+ BEQID r5,$LaResult_Is_Zero # Result is Zero
+ ADDIK r30,r0,0 # Clear mod
+ ADDIK r29,r0,32 # Initialize the loop count
+
+ # Check if r6 and r5 are equal # if yes, return 1
+ RSUB r18,r5,r6
+ BEQID r18,$LaRETURN_HERE
+ ADDIK r3,r0,1
+
+ # Check if (uns)r6 is greater than (uns)r5. In that case, just return 0
+ XOR r18,r5,r6
+ BGEID r18,16
+ ADD r3,r0,r0 # We would anyways clear r3
+ BLTI r6,$LaRETURN_HERE # r6[bit 31 = 1] hence is greater
+ BRI $LCheckr6
+ RSUB r18,r6,r5 # MICROBLAZEcmp
+ BLTI r18,$LaRETURN_HERE
+
+ # If r6 [bit 31] is set, then return result as 1
+$LCheckr6:
+ BGTI r6,$LaDIV0
+ BRID $LaRETURN_HERE
+ ADDIK r3,r0,1
+
+ # First part try to find the first '1' in the r5
+$LaDIV0:
+ BLTI r5,$LaDIV2
+$LaDIV1:
+ ADD r5,r5,r5 # left shift logical r5
+ BGTID r5,$LaDIV1
+ ADDIK r29,r29,-1
+$LaDIV2:
+ ADD r5,r5,r5 # left shift logical r5 get the '1' into the Carry
+ ADDC r30,r30,r30 # Move that bit into the Mod register
+ RSUB r31,r6,r30 # Try to subtract (r30 a r6)
+ BLTI r31,$LaMOD_TOO_SMALL
+ OR r30,r0,r31 # Move the r31 to mod since the result was positive
+ ADDIK r3,r3,1
+$LaMOD_TOO_SMALL:
+ ADDIK r29,r29,-1
+ BEQi r29,$LaLOOP_END
+ ADD r3,r3,r3 # Shift in the '1' into div
+ BRI $LaDIV2 # Div2
+$LaLOOP_END:
+ BRI $LaRETURN_HERE
+$LaDiv_By_Zero:
+$LaResult_Is_Zero:
+ OR r3,r0,r0 # set result to 0
+$LaRETURN_HERE:
+ # Restore values of CSRs and that of r3 and the divisor and the dividend
+ LWI r29,r1,0
+ LWI r30,r1,4
+ LWI r31,r1,8
+ RTSD r15,8
+ ADDIK r1,r1,12
+ .end __udivsi3
+ .size __udivsi3, . - __udivsi3
diff --git a/gcc-4.9/libgcc/config/microblaze/umodsi3.S b/gcc-4.9/libgcc/config/microblaze/umodsi3.S
new file mode 100644
index 000000000..11cf6575a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/microblaze/umodsi3.S
@@ -0,0 +1,106 @@
+###################################
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# Contributed by Michael Eager <eager@eagercon.com>.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+# umodsi3.S
+#
+# Unsigned modulo operation for 32 bit integers.
+# Input : op1 in Reg r5
+# op2 in Reg r6
+# Output: op1 mod op2 in Reg r3
+#
+#######################################
+
+ .globl __umodsi3
+ .ent __umodsi3
+ .type __umodsi3,@function
+__umodsi3:
+ .frame r1,0,r15
+
+ addik r1,r1,-12
+ swi r29,r1,0
+ swi r30,r1,4
+ swi r31,r1,8
+
+ BEQI r6,$LaDiv_By_Zero # Div_by_Zero # Division Error
+ BEQId r5,$LaResult_Is_Zero # Result is Zero
+ ADDIK r3,r0,0 # Clear div
+ ADDIK r30,r0,0 # clear mod
+ ADDIK r29,r0,32 # Initialize the loop count
+
+# Check if r6 and r5 are equal # if yes, return 0
+ rsub r18,r5,r6
+ beqi r18,$LaRETURN_HERE
+
+# Check if (uns)r6 is greater than (uns)r5. In that case, just return r5
+ xor r18,r5,r6
+ bgeid r18,16
+ addik r3,r5,0
+ blti r6,$LaRETURN_HERE
+ bri $LCheckr6
+ rsub r18,r5,r6 # MICROBLAZEcmp
+ bgti r18,$LaRETURN_HERE
+
+# If r6 [bit 31] is set, then return result as r5-r6
+$LCheckr6:
+ bgtid r6,$LaDIV0
+ addik r3,r0,0
+ addik r18,r0,0x7fffffff
+ and r5,r5,r18
+ and r6,r6,r18
+ brid $LaRETURN_HERE
+ rsub r3,r6,r5
+# First part: try to find the first '1' in the r5
+$LaDIV0:
+ BLTI r5,$LaDIV2
+$LaDIV1:
+ ADD r5,r5,r5 # left shift logical r5
+ BGEID r5,$LaDIV1 #
+ ADDIK r29,r29,-1
+$LaDIV2:
+ ADD r5,r5,r5 # left shift logical r5 get the '1' into the Carry
+ ADDC r3,r3,r3 # Move that bit into the Mod register
+ rSUB r31,r6,r3 # Try to subtract (r3 a r6)
+ BLTi r31,$LaMOD_TOO_SMALL
+ OR r3,r0,r31 # Move the r31 to mod since the result was positive
+ ADDIK r30,r30,1
+$LaMOD_TOO_SMALL:
+ ADDIK r29,r29,-1
+ BEQi r29,$LaLOOP_END
+ ADD r30,r30,r30 # Shift in the '1' into div
+ BRI $LaDIV2 # Div2
+$LaLOOP_END:
+ BRI $LaRETURN_HERE
+$LaDiv_By_Zero:
+$LaResult_Is_Zero:
+ or r3,r0,r0 # set result to 0
+$LaRETURN_HERE:
+# Restore values of CSRs and that of r3 and the divisor and the dividend
+ lwi r29,r1,0
+ lwi r30,r1,4
+ lwi r31,r1,8
+ rtsd r15,8
+ addik r1,r1,12
+.end __umodsi3
+ .size __umodsi3, . - __umodsi3
diff --git a/gcc-4.9/libgcc/config/mips/crtfastmath.c b/gcc-4.9/libgcc/config/mips/crtfastmath.c
new file mode 100644
index 000000000..a64e13d44
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/crtfastmath.c
@@ -0,0 +1,53 @@
+/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License
+ and a copy of the GCC Runtime Library Exception along with this
+ program; see the files COPYING3 and COPYING.RUNTIME respectively.
+ If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef __mips_hard_float
+
+/* Flush denormalized numbers to zero. */
+#define _FPU_FLUSH_TZ 0x1000000
+
+/* Rounding control. */
+#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */
+#define _FPU_RC_ZERO 0x1
+#define _FPU_RC_UP 0x2
+#define _FPU_RC_DOWN 0x3
+
+/* Enable interrupts for IEEE exceptions. */
+#define _FPU_IEEE 0x00000F80
+
+/* Macros for accessing the hardware control word. */
+#define _FPU_GETCW(cw) __asm__ ("cfc1 %0,$31" : "=r" (cw))
+#define _FPU_SETCW(cw) __asm__ ("ctc1 %0,$31" : : "r" (cw))
+
+static void __attribute__((constructor,nomips16))
+set_fast_math (void)
+{
+ unsigned int fcr;
+
+ /* Flush to zero, round to nearest, IEEE exceptions disabled. */
+ fcr = _FPU_FLUSH_TZ | _FPU_RC_NEAREST;
+
+ _FPU_SETCW(fcr);
+}
+
+#endif /* __mips_hard_float */
diff --git a/gcc-4.9/libgcc/config/mips/crti.S b/gcc-4.9/libgcc/config/mips/crti.S
new file mode 100644
index 000000000..698059464
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/crti.S
@@ -0,0 +1,49 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* 4 slots for argument spill area. 1 for cpreturn, 1 for stack.
+ Return spill offset of 40 and 20. Aligned to 16 bytes for n32. */
+
+ .section .init,"ax",@progbits
+ .globl _init
+ .type _init,@function
+_init:
+#ifdef __mips64
+ daddu $sp,$sp,-48
+ sd $31,40($sp)
+#else
+ addu $sp,$sp,-32
+ sw $31,20($sp)
+#endif
+
+ .section .fini,"ax",@progbits
+ .globl _fini
+ .type _fini,@function
+_fini:
+#ifdef __mips64
+ daddu $sp,$sp,-48
+ sd $31,40($sp)
+#else
+ addu $sp,$sp,-32
+ sw $31,20($sp)
+#endif
diff --git a/gcc-4.9/libgcc/config/mips/crtn.S b/gcc-4.9/libgcc/config/mips/crtn.S
new file mode 100644
index 000000000..0de2d0c41
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/crtn.S
@@ -0,0 +1,54 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* 4 slots for argument spill area. 1 for cpreturn, 1 for stack.
+ Return spill offset of 40 and 20. Aligned to 16 bytes for n32. */
+
+#ifdef __mips16
+#define RA $7
+#else
+#define RA $31
+#endif
+
+ .section .init,"ax",@progbits
+init:
+#ifdef __mips64
+ ld RA,40($sp)
+ daddu $sp,$sp,48
+#else
+ lw RA,20($sp)
+ addu $sp,$sp,32
+#endif
+ j RA
+
+ .section .fini,"ax",@progbits
+fini:
+#ifdef __mips64
+ ld RA,40($sp)
+ daddu $sp,$sp,48
+#else
+ lw RA,20($sp)
+ addu $sp,$sp,32
+#endif
+ j RA
+
diff --git a/gcc-4.9/libgcc/config/mips/gthr-mipssde.h b/gcc-4.9/libgcc/config/mips/gthr-mipssde.h
new file mode 100644
index 000000000..834701399
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/gthr-mipssde.h
@@ -0,0 +1,237 @@
+/* MIPS SDE threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */
+/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+ Contributed by Nigel Stephens <nigel@mips.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_MIPSSDE_H
+#define GCC_GTHR_MIPSSDE_H
+
+/* MIPS SDE threading API specific definitions.
+ Easy, since the interface is pretty much one-to-one. */
+
+#define __GTHREADS 1
+
+#include <sdethread.h>
+#include <unistd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef __sdethread_key_t __gthread_key_t;
+typedef __sdethread_once_t __gthread_once_t;
+typedef __sdethread_mutex_t __gthread_mutex_t;
+
+typedef struct {
+ long depth;
+ __sdethread_t owner;
+ __sdethread_mutex_t actual;
+} __gthread_recursive_mutex_t;
+
+#define __GTHREAD_MUTEX_INIT __SDETHREAD_MUTEX_INITIALIZER("gthr")
+#define __GTHREAD_ONCE_INIT __SDETHREAD_ONCE_INIT
+static inline int
+__gthread_recursive_mutex_init_function(__gthread_recursive_mutex_t *__mutex);
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+
+#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+# define __gthrw(name) \
+ static __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name)));
+# define __gthrw_(name) __gthrw_ ## name
+#else
+# define __gthrw(name)
+# define __gthrw_(name) name
+#endif
+
+__gthrw(__sdethread_once)
+__gthrw(__sdethread_key_create)
+__gthrw(__sdethread_key_delete)
+__gthrw(__sdethread_getspecific)
+__gthrw(__sdethread_setspecific)
+
+__gthrw(__sdethread_self)
+
+__gthrw(__sdethread_mutex_lock)
+__gthrw(__sdethread_mutex_trylock)
+__gthrw(__sdethread_mutex_unlock)
+
+__gthrw(__sdethread_mutex_init)
+
+__gthrw(__sdethread_threading)
+
+#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+
+static inline int
+__gthread_active_p (void)
+{
+ return !!(void *)&__sdethread_threading;
+}
+
+#else /* not SUPPORTS_WEAK */
+
+static inline int
+__gthread_active_p (void)
+{
+ return 1;
+}
+
+#endif /* SUPPORTS_WEAK */
+
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (__gthread_active_p ())
+ return __gthrw_(__sdethread_once) (__once, __func);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ return __gthrw_(__sdethread_key_create) (__key, __dtor);
+}
+
+static inline int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ return __gthrw_(__sdethread_key_delete) (__key);
+}
+
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ return __gthrw_(__sdethread_getspecific) (__key);
+}
+
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ return __gthrw_(__sdethread_setspecific) (__key, __ptr);
+}
+
+static inline int
+__gthread_mutex_destroy (__gthread_mutex_t * UNUSED(__mutex))
+{
+ return 0;
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(__sdethread_mutex_lock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(__sdethread_mutex_trylock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(__sdethread_mutex_unlock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ __mutex->depth = 0;
+ __mutex->owner = __gthrw_(__sdethread_self) ();
+ return __gthrw_(__sdethread_mutex_init) (&__mutex->actual, NULL);
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ __sdethread_t __me = __gthrw_(__sdethread_self) ();
+
+ if (__mutex->owner != __me)
+ {
+ __gthrw_(__sdethread_mutex_lock) (&__mutex->actual);
+ __mutex->owner = __me;
+ }
+
+ __mutex->depth++;
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ __sdethread_t __me = __gthrw_(__sdethread_self) ();
+
+ if (__mutex->owner != __me)
+ {
+ if (__gthrw_(__sdethread_mutex_trylock) (&__mutex->actual))
+ return 1;
+ __mutex->owner = __me;
+ }
+
+ __mutex->depth++;
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ if (--__mutex->depth == 0)
+ {
+ __mutex->owner = (__sdethread_t) 0;
+ __gthrw_(__sdethread_mutex_unlock) (&__mutex->actual);
+ }
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t
+ * UNUSED(__mutex))
+{
+ return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! GCC_GTHR_MIPSSDE_H */
diff --git a/gcc-4.9/libgcc/config/mips/lib2funcs.c b/gcc-4.9/libgcc/config/mips/lib2funcs.c
new file mode 100644
index 000000000..395433e95
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/lib2funcs.c
@@ -0,0 +1,44 @@
+/* libgcc routines for MIPS
+ Copyright (C) 2013-2014 Free Software Foundation, Inc.
+ DMULT/DDIV replacement support by Juergen Urban, JuergenUrban@gmx.de.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#if defined(__mips64) && defined(_MIPS_ARCH_R5900)
+
+/* Build DI version of libgcc functions. */
+#define LIBGCC2_UNITS_PER_WORD 4
+
+/* The following function is needed when !ISA_HAS_DMULT. */
+#define L_muldi3
+
+/* The following functions are needed when !ISA_HAS_DDIV. */
+#define L_divdi3
+#define L_moddi3
+#define L_udivdi3
+#define L_umoddi3
+#define L_udivmoddi4
+
+/* Use generic definition of functions. */
+#include "libgcc2.c"
+
+#endif
diff --git a/gcc-4.9/libgcc/config/mips/libgcc-mips16.ver b/gcc-4.9/libgcc/config/mips/libgcc-mips16.ver
new file mode 100644
index 000000000..e26d58c98
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/libgcc-mips16.ver
@@ -0,0 +1,48 @@
+# Copyright (C) 2008-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+GCC_4.4.0 {
+ __mips16_addsf3
+ __mips16_subsf3
+ __mips16_mulsf3
+ __mips16_divsf3
+ __mips16_eqsf2
+ __mips16_nesf2
+ __mips16_gtsf2
+ __mips16_gesf2
+ __mips16_lesf2
+ __mips16_ltsf2
+ __mips16_floatsisf
+ __mips16_floatunsisf
+ __mips16_fix_truncsfsi
+ __mips16_adddf3
+ __mips16_subdf3
+ __mips16_muldf3
+ __mips16_divdf3
+ __mips16_extendsfdf2
+ __mips16_truncdfsf2
+ __mips16_eqdf2
+ __mips16_nedf2
+ __mips16_gtdf2
+ __mips16_gedf2
+ __mips16_ledf2
+ __mips16_ltdf2
+ __mips16_floatsidf
+ __mips16_floatunsidf
+ __mips16_fix_truncdfsi
+}
diff --git a/gcc-4.9/libgcc/config/mips/linux-unwind.h b/gcc-4.9/libgcc/config/mips/linux-unwind.h
new file mode 100644
index 000000000..9cf7c807e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/linux-unwind.h
@@ -0,0 +1,125 @@
+/* DWARF2 EH unwinding support for MIPS Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef inhibit_libc
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#include <signal.h>
+#include <asm/unistd.h>
+
+/* The third parameter to the signal handler points to something with
+ * this structure defined in asm/ucontext.h, but the name clashes with
+ * struct ucontext from sys/ucontext.h so this private copy is used. */
+typedef struct _sig_ucontext {
+ unsigned long uc_flags;
+ struct _sig_ucontext *uc_link;
+ stack_t uc_stack;
+ struct sigcontext uc_mcontext;
+ sigset_t uc_sigmask;
+} _sig_ucontext_t;
+
+#define MD_FALLBACK_FRAME_STATE_FOR mips_fallback_frame_state
+
+static _Unwind_Reason_Code
+mips_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ u_int32_t *pc = (u_int32_t *) context->ra;
+ struct sigcontext *sc;
+ _Unwind_Ptr new_cfa, reg_offset;
+ int i;
+
+ /* A MIPS16 or microMIPS frame. Signal frames always use the standard
+ ISA encoding. */
+ if ((_Unwind_Ptr) pc & 3)
+ return _URC_END_OF_STACK;
+
+ /* 24021061 li v0, 0x1061 (rt_sigreturn)*/
+ /* 0000000c syscall */
+ /* or */
+ /* 24021017 li v0, 0x1017 (sigreturn) */
+ /* 0000000c syscall */
+ if (pc[1] != 0x0000000c)
+ return _URC_END_OF_STACK;
+#if _MIPS_SIM == _ABIO32
+ if (pc[0] == (0x24020000 | __NR_sigreturn))
+ {
+ struct sigframe {
+ u_int32_t ass[4]; /* Argument save space for o32. */
+ u_int32_t trampoline[2];
+ struct sigcontext sigctx;
+ } *rt_ = context->cfa;
+ sc = &rt_->sigctx;
+ }
+ else
+#endif
+ if (pc[0] == (0x24020000 | __NR_rt_sigreturn))
+ {
+ struct rt_sigframe {
+ u_int32_t ass[4]; /* Argument save space for o32. */
+ u_int32_t trampoline[2];
+ siginfo_t info;
+ _sig_ucontext_t uc;
+ } *rt_ = context->cfa;
+ sc = &rt_->uc.uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = (_Unwind_Ptr) sc;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
+
+ /* On o32 Linux, the register save slots in the sigcontext are
+ eight bytes. We need the lower half of each register slot,
+ so slide our view of the structure back four bytes. */
+#if _MIPS_SIM == _ABIO32 && defined __MIPSEB__
+ reg_offset = 4;
+#else
+ reg_offset = 0;
+#endif
+
+ for (i = 0; i < 32; i++) {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = (_Unwind_Ptr)&(sc->sc_regs[i]) + reg_offset - new_cfa;
+ }
+ /* "PC & -2" points to the faulting instruction, but the unwind code
+ searches for "(ADDR & -2) - 1". (See MASK_RETURN_ADDR for the source
+ of the -2 mask.) Adding 2 here ensures that "(ADDR & -2) - 1" is the
+ address of the second byte of the faulting instruction.
+
+ Note that setting fs->signal_frame would not work. As the comment
+ above MASK_RETURN_ADDR explains, MIPS unwinders must earch for an
+ odd-valued address. */
+ fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_VAL_OFFSET;
+ fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset
+ = (_Unwind_Ptr)(sc->sc_pc) + 2 - new_cfa;
+ fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
+
+ return _URC_NO_REASON;
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/mips/mips16.S b/gcc-4.9/libgcc/config/mips/mips16.S
new file mode 100644
index 000000000..6a43a9839
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/mips16.S
@@ -0,0 +1,752 @@
+/* mips16 floating point support code
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
+ Contributed by Cygnus Support
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef __mips_micromips
+ /* DO NOTHING */
+#else
+
+/* This file contains mips16 floating point support functions. These
+ functions are called by mips16 code to handle floating point when
+ -msoft-float is not used. They accept the arguments and return
+ values using the soft-float calling convention, but do the actual
+ operation using the hard floating point instructions. */
+
+#if defined _MIPS_SIM && (_MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIO64)
+
+/* This file contains 32-bit assembly code. */
+ .set nomips16
+
+/* Start a function. */
+
+#define STARTFN(NAME) .globl NAME; .ent NAME; NAME:
+
+/* Finish a function. */
+
+#define ENDFN(NAME) .end NAME
+
+/* ARG1
+ The FPR that holds the first floating-point argument.
+
+ ARG2
+ The FPR that holds the second floating-point argument.
+
+ RET
+ The FPR that holds a floating-point return value. */
+
+#define RET $f0
+#define ARG1 $f12
+#ifdef __mips64
+#define ARG2 $f13
+#else
+#define ARG2 $f14
+#endif
+
+/* Set 64-bit register GPR so that its high 32 bits contain HIGH_FPR
+ and so that its low 32 bits contain LOW_FPR. */
+#define MERGE_GPRf(GPR, HIGH_FPR, LOW_FPR) \
+ .set noat; \
+ mfc1 $1, LOW_FPR; \
+ mfc1 GPR, HIGH_FPR; \
+ dsll $1, $1, 32; \
+ dsll GPR, GPR, 32; \
+ dsrl $1, $1, 32; \
+ or GPR, GPR, $1; \
+ .set at
+
+/* Move the high 32 bits of GPR to HIGH_FPR and the low 32 bits of
+ GPR to LOW_FPR. */
+#define MERGE_GPRt(GPR, HIGH_FPR, LOW_FPR) \
+ .set noat; \
+ dsrl $1, GPR, 32; \
+ mtc1 GPR, LOW_FPR; \
+ mtc1 $1, HIGH_FPR; \
+ .set at
+
+/* Jump to T, and use "OPCODE, OP2" to implement a delayed move. */
+#define DELAYt(T, OPCODE, OP2) \
+ .set noreorder; \
+ jr T; \
+ OPCODE, OP2; \
+ .set reorder
+
+#if __mips >= 4
+/* Coprocessor moves are interlocked from the MIPS IV ISA up. */
+#define DELAYf(T, OPCODE, OP2) DELAYt (T, OPCODE, OP2)
+#else
+/* Use "OPCODE. OP2" and jump to T. */
+#define DELAYf(T, OPCODE, OP2) OPCODE, OP2; jr T
+#endif
+
+/* MOVE_SF_BYTE0(D)
+ Move the first single-precision floating-point argument between
+ GPRs and FPRs.
+
+ MOVE_SI_BYTE0(D)
+ Likewise the first single-precision integer argument.
+
+ MOVE_SF_BYTE4(D)
+ Move the second single-precision floating-point argument between
+ GPRs and FPRs, given that the first argument occupies 4 bytes.
+
+ MOVE_SF_BYTE8(D)
+ Move the second single-precision floating-point argument between
+ GPRs and FPRs, given that the first argument occupies 8 bytes.
+
+ MOVE_DF_BYTE0(D)
+ Move the first double-precision floating-point argument between
+ GPRs and FPRs.
+
+ MOVE_DF_BYTE8(D)
+ Likewise the second double-precision floating-point argument.
+
+ MOVE_SF_RET(D, T)
+ Likewise a single-precision floating-point return value,
+ then jump to T.
+
+ MOVE_SC_RET(D, T)
+ Likewise a complex single-precision floating-point return value.
+
+ MOVE_DF_RET(D, T)
+ Likewise a double-precision floating-point return value.
+
+ MOVE_DC_RET(D, T)
+ Likewise a complex double-precision floating-point return value.
+
+ MOVE_SI_RET(D, T)
+ Likewise a single-precision integer return value.
+
+ The D argument is "t" to move to FPRs and "f" to move from FPRs.
+ The return macros may assume that the target of the jump does not
+ use a floating-point register. */
+
+#define MOVE_SF_RET(D, T) DELAY##D (T, m##D##c1 $2,$f0)
+#define MOVE_SI_RET(D, T) DELAY##D (T, m##D##c1 $2,$f0)
+
+#if defined(__mips64) && defined(__MIPSEB__)
+#define MOVE_SC_RET(D, T) MERGE_GPR##D ($2, $f0, $f1); jr T
+#elif defined(__mips64)
+/* The high 32 bits of $2 correspond to the second word in memory;
+ i.e. the imaginary part. */
+#define MOVE_SC_RET(D, T) MERGE_GPR##D ($2, $f1, $f0); jr T
+#elif __mips_fpr == 64
+#define MOVE_SC_RET(D, T) m##D##c1 $2,$f0; DELAY##D (T, m##D##c1 $3,$f1)
+#else
+#define MOVE_SC_RET(D, T) m##D##c1 $2,$f0; DELAY##D (T, m##D##c1 $3,$f2)
+#endif
+
+#if defined(__mips64)
+#define MOVE_SF_BYTE0(D) m##D##c1 $4,$f12
+#define MOVE_SF_BYTE4(D) m##D##c1 $5,$f13
+#define MOVE_SF_BYTE8(D) m##D##c1 $5,$f13
+#else
+#define MOVE_SF_BYTE0(D) m##D##c1 $4,$f12
+#define MOVE_SF_BYTE4(D) m##D##c1 $5,$f14
+#define MOVE_SF_BYTE8(D) m##D##c1 $6,$f14
+#endif
+#define MOVE_SI_BYTE0(D) MOVE_SF_BYTE0(D)
+
+#if defined(__mips64)
+#define MOVE_DF_BYTE0(D) dm##D##c1 $4,$f12
+#define MOVE_DF_BYTE8(D) dm##D##c1 $5,$f13
+#define MOVE_DF_RET(D, T) DELAY##D (T, dm##D##c1 $2,$f0)
+#define MOVE_DC_RET(D, T) dm##D##c1 $3,$f1; MOVE_DF_RET (D, T)
+#elif __mips_fpr == 64 && defined(__MIPSEB__)
+#define MOVE_DF_BYTE0(D) m##D##c1 $5,$f12; m##D##hc1 $4,$f12
+#define MOVE_DF_BYTE8(D) m##D##c1 $7,$f14; m##D##hc1 $6,$f14
+#define MOVE_DF_RET(D, T) m##D##c1 $3,$f0; DELAY##D (T, m##D##hc1 $2,$f0)
+#define MOVE_DC_RET(D, T) m##D##c1 $5,$f1; m##D##hc1 $4,$f1; MOVE_DF_RET (D, T)
+#elif __mips_fpr == 64
+#define MOVE_DF_BYTE0(D) m##D##c1 $4,$f12; m##D##hc1 $5,$f12
+#define MOVE_DF_BYTE8(D) m##D##c1 $6,$f14; m##D##hc1 $7,$f14
+#define MOVE_DF_RET(D, T) m##D##c1 $2,$f0; DELAY##D (T, m##D##hc1 $3,$f0)
+#define MOVE_DC_RET(D, T) m##D##c1 $4,$f1; m##D##hc1 $5,$f1; MOVE_DF_RET (D, T)
+#elif defined(__MIPSEB__)
+/* FPRs are little-endian. */
+#define MOVE_DF_BYTE0(D) m##D##c1 $4,$f13; m##D##c1 $5,$f12
+#define MOVE_DF_BYTE8(D) m##D##c1 $6,$f15; m##D##c1 $7,$f14
+#define MOVE_DF_RET(D, T) m##D##c1 $2,$f1; DELAY##D (T, m##D##c1 $3,$f0)
+#define MOVE_DC_RET(D, T) m##D##c1 $4,$f3; m##D##c1 $5,$f2; MOVE_DF_RET (D, T)
+#else
+#define MOVE_DF_BYTE0(D) m##D##c1 $4,$f12; m##D##c1 $5,$f13
+#define MOVE_DF_BYTE8(D) m##D##c1 $6,$f14; m##D##c1 $7,$f15
+#define MOVE_DF_RET(D, T) m##D##c1 $2,$f0; DELAY##D (T, m##D##c1 $3,$f1)
+#define MOVE_DC_RET(D, T) m##D##c1 $4,$f2; m##D##c1 $5,$f3; MOVE_DF_RET (D, T)
+#endif
+
+/* Single-precision math. */
+
+/* Define a function NAME that loads two single-precision values,
+ performs FPU operation OPCODE on them, and returns the single-
+ precision result. */
+
+#define OPSF3(NAME, OPCODE) \
+STARTFN (NAME); \
+ MOVE_SF_BYTE0 (t); \
+ MOVE_SF_BYTE4 (t); \
+ OPCODE RET,ARG1,ARG2; \
+ MOVE_SF_RET (f, $31); \
+ ENDFN (NAME)
+
+#ifdef L_m16addsf3
+OPSF3 (__mips16_addsf3, add.s)
+#endif
+#ifdef L_m16subsf3
+OPSF3 (__mips16_subsf3, sub.s)
+#endif
+#ifdef L_m16mulsf3
+OPSF3 (__mips16_mulsf3, mul.s)
+#endif
+#ifdef L_m16divsf3
+OPSF3 (__mips16_divsf3, div.s)
+#endif
+
+/* Define a function NAME that loads a single-precision value,
+ performs FPU operation OPCODE on it, and returns the single-
+ precision result. */
+
+#define OPSF2(NAME, OPCODE) \
+STARTFN (NAME); \
+ MOVE_SF_BYTE0 (t); \
+ OPCODE RET,ARG1; \
+ MOVE_SF_RET (f, $31); \
+ ENDFN (NAME)
+
+#ifdef L_m16negsf2
+OPSF2 (__mips16_negsf2, neg.s)
+#endif
+#ifdef L_m16abssf2
+OPSF2 (__mips16_abssf2, abs.s)
+#endif
+
+/* Single-precision comparisons. */
+
+/* Define a function NAME that loads two single-precision values,
+ performs floating point comparison OPCODE, and returns TRUE or
+ FALSE depending on the result. */
+
+#define CMPSF(NAME, OPCODE, TRUE, FALSE) \
+STARTFN (NAME); \
+ MOVE_SF_BYTE0 (t); \
+ MOVE_SF_BYTE4 (t); \
+ OPCODE ARG1,ARG2; \
+ li $2,TRUE; \
+ bc1t 1f; \
+ li $2,FALSE; \
+1:; \
+ j $31; \
+ ENDFN (NAME)
+
+/* Like CMPSF, but reverse the comparison operands. */
+
+#define REVCMPSF(NAME, OPCODE, TRUE, FALSE) \
+STARTFN (NAME); \
+ MOVE_SF_BYTE0 (t); \
+ MOVE_SF_BYTE4 (t); \
+ OPCODE ARG2,ARG1; \
+ li $2,TRUE; \
+ bc1t 1f; \
+ li $2,FALSE; \
+1:; \
+ j $31; \
+ ENDFN (NAME)
+
+#ifdef L_m16eqsf2
+CMPSF (__mips16_eqsf2, c.eq.s, 0, 1)
+#endif
+#ifdef L_m16nesf2
+CMPSF (__mips16_nesf2, c.eq.s, 0, 1)
+#endif
+#ifdef L_m16gtsf2
+REVCMPSF (__mips16_gtsf2, c.lt.s, 1, 0)
+#endif
+#ifdef L_m16gesf2
+REVCMPSF (__mips16_gesf2, c.le.s, 0, -1)
+#endif
+#ifdef L_m16lesf2
+CMPSF (__mips16_lesf2, c.le.s, 0, 1)
+#endif
+#ifdef L_m16ltsf2
+CMPSF (__mips16_ltsf2, c.lt.s, -1, 0)
+#endif
+#ifdef L_m16unordsf2
+CMPSF(__mips16_unordsf2, c.un.s, 1, 0)
+#endif
+
+
+/* Single-precision conversions. */
+
+#ifdef L_m16fltsisf
+STARTFN (__mips16_floatsisf)
+ MOVE_SF_BYTE0 (t)
+ cvt.s.w RET,ARG1
+ MOVE_SF_RET (f, $31)
+ ENDFN (__mips16_floatsisf)
+#endif
+
+#ifdef L_m16fltunsisf
+STARTFN (__mips16_floatunsisf)
+ .set noreorder
+ bltz $4,1f
+ MOVE_SF_BYTE0 (t)
+ .set reorder
+ cvt.s.w RET,ARG1
+ MOVE_SF_RET (f, $31)
+1:
+ and $2,$4,1
+ srl $3,$4,1
+ or $2,$2,$3
+ mtc1 $2,RET
+ cvt.s.w RET,RET
+ add.s RET,RET,RET
+ MOVE_SF_RET (f, $31)
+ ENDFN (__mips16_floatunsisf)
+#endif
+
+#ifdef L_m16fix_truncsfsi
+STARTFN (__mips16_fix_truncsfsi)
+ MOVE_SF_BYTE0 (t)
+ trunc.w.s RET,ARG1,$4
+ MOVE_SI_RET (f, $31)
+ ENDFN (__mips16_fix_truncsfsi)
+#endif
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+
+/* Double-precision math. */
+
+/* Define a function NAME that loads two double-precision values,
+ performs FPU operation OPCODE on them, and returns the double-
+ precision result. */
+
+#define OPDF3(NAME, OPCODE) \
+STARTFN (NAME); \
+ MOVE_DF_BYTE0 (t); \
+ MOVE_DF_BYTE8 (t); \
+ OPCODE RET,ARG1,ARG2; \
+ MOVE_DF_RET (f, $31); \
+ ENDFN (NAME)
+
+#ifdef L_m16adddf3
+OPDF3 (__mips16_adddf3, add.d)
+#endif
+#ifdef L_m16subdf3
+OPDF3 (__mips16_subdf3, sub.d)
+#endif
+#ifdef L_m16muldf3
+OPDF3 (__mips16_muldf3, mul.d)
+#endif
+#ifdef L_m16divdf3
+OPDF3 (__mips16_divdf3, div.d)
+#endif
+
+/* Define a function NAME that loads a double-precision value,
+ performs FPU operation OPCODE on it, and returns the double-
+ precision result. */
+
+#define OPDF2(NAME, OPCODE) \
+STARTFN (NAME); \
+ MOVE_DF_BYTE0 (t); \
+ OPCODE RET,ARG1; \
+ MOVE_DF_RET (f, $31); \
+ ENDFN (NAME)
+
+#ifdef L_m16negdf2
+OPDF2 (__mips16_negdf2, neg.d)
+#endif
+#ifdef L_m16absdf2
+OPDF2 (__mips16_absdf2, abs.d)
+#endif
+
+/* Conversions between single and double precision. */
+
+#ifdef L_m16extsfdf2
+STARTFN (__mips16_extendsfdf2)
+ MOVE_SF_BYTE0 (t)
+ cvt.d.s RET,ARG1
+ MOVE_DF_RET (f, $31)
+ ENDFN (__mips16_extendsfdf2)
+#endif
+
+#ifdef L_m16trdfsf2
+STARTFN (__mips16_truncdfsf2)
+ MOVE_DF_BYTE0 (t)
+ cvt.s.d RET,ARG1
+ MOVE_SF_RET (f, $31)
+ ENDFN (__mips16_truncdfsf2)
+#endif
+
+/* Double-precision comparisons. */
+
+/* Define a function NAME that loads two double-precision values,
+ performs floating point comparison OPCODE, and returns TRUE or
+ FALSE depending on the result. */
+
+#define CMPDF(NAME, OPCODE, TRUE, FALSE) \
+STARTFN (NAME); \
+ MOVE_DF_BYTE0 (t); \
+ MOVE_DF_BYTE8 (t); \
+ OPCODE ARG1,ARG2; \
+ li $2,TRUE; \
+ bc1t 1f; \
+ li $2,FALSE; \
+1:; \
+ j $31; \
+ ENDFN (NAME)
+
+/* Like CMPDF, but reverse the comparison operands. */
+
+#define REVCMPDF(NAME, OPCODE, TRUE, FALSE) \
+STARTFN (NAME); \
+ MOVE_DF_BYTE0 (t); \
+ MOVE_DF_BYTE8 (t); \
+ OPCODE ARG2,ARG1; \
+ li $2,TRUE; \
+ bc1t 1f; \
+ li $2,FALSE; \
+1:; \
+ j $31; \
+ ENDFN (NAME)
+
+#ifdef L_m16eqdf2
+CMPDF (__mips16_eqdf2, c.eq.d, 0, 1)
+#endif
+#ifdef L_m16nedf2
+CMPDF (__mips16_nedf2, c.eq.d, 0, 1)
+#endif
+#ifdef L_m16gtdf2
+REVCMPDF (__mips16_gtdf2, c.lt.d, 1, 0)
+#endif
+#ifdef L_m16gedf2
+REVCMPDF (__mips16_gedf2, c.le.d, 0, -1)
+#endif
+#ifdef L_m16ledf2
+CMPDF (__mips16_ledf2, c.le.d, 0, 1)
+#endif
+#ifdef L_m16ltdf2
+CMPDF (__mips16_ltdf2, c.lt.d, -1, 0)
+#endif
+#ifdef L_m16unorddf2
+CMPDF(__mips16_unorddf2, c.un.d, 1, 0)
+#endif
+
+/* Double-precision conversions. */
+
+#ifdef L_m16fltsidf
+STARTFN (__mips16_floatsidf)
+ MOVE_SI_BYTE0 (t)
+ cvt.d.w RET,ARG1
+ MOVE_DF_RET (f, $31)
+ ENDFN (__mips16_floatsidf)
+#endif
+
+#ifdef L_m16fltunsidf
+STARTFN (__mips16_floatunsidf)
+ MOVE_SI_BYTE0 (t)
+ cvt.d.w RET,ARG1
+ bgez $4,1f
+ li.d ARG1, 4.294967296e+9
+ add.d RET, RET, ARG1
+1: MOVE_DF_RET (f, $31)
+ ENDFN (__mips16_floatunsidf)
+#endif
+
+#ifdef L_m16fix_truncdfsi
+STARTFN (__mips16_fix_truncdfsi)
+ MOVE_DF_BYTE0 (t)
+ trunc.w.d RET,ARG1,$4
+ MOVE_SI_RET (f, $31)
+ ENDFN (__mips16_fix_truncdfsi)
+#endif
+#endif /* !__mips_single_float */
+
+/* We don't export stubs from libgcc_s.so and always require static
+ versions to be pulled from libgcc.a as needed because they use $2
+ and possibly $3 as arguments, diverging from the standard SysV ABI,
+ and as such would require severe pessimisation of MIPS16 PLT entries
+ just for this single special case.
+
+ For compatibility with old binaries that used safe standard MIPS PLT
+ entries and referred to these functions we still export them at
+ version GCC_4.4.0 for run-time loading only. */
+
+#ifdef SHARED
+#define CE_STARTFN(NAME) \
+STARTFN (NAME##_compat); \
+ .symver NAME##_compat, NAME@GCC_4.4.0
+#define CE_ENDFN(NAME) ENDFN (NAME##_compat)
+#else
+#define CE_STARTFN(NAME) \
+STARTFN (NAME); \
+ .hidden NAME
+#define CE_ENDFN(NAME) ENDFN (NAME)
+#endif
+
+/* Define a function NAME that moves a return value of mode MODE from
+ FPRs to GPRs. */
+
+#define RET_FUNCTION(NAME, MODE) \
+CE_STARTFN (NAME); \
+ MOVE_##MODE##_RET (t, $31); \
+ CE_ENDFN (NAME)
+
+#ifdef L_m16retsf
+RET_FUNCTION (__mips16_ret_sf, SF)
+#endif
+
+#ifdef L_m16retsc
+RET_FUNCTION (__mips16_ret_sc, SC)
+#endif
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+#ifdef L_m16retdf
+RET_FUNCTION (__mips16_ret_df, DF)
+#endif
+
+#ifdef L_m16retdc
+RET_FUNCTION (__mips16_ret_dc, DC)
+#endif
+#endif /* !__mips_single_float */
+
+/* STUB_ARGS_X copies the arguments from GPRs to FPRs for argument
+ code X. X is calculated as ARG1 + ARG2 * 4, where ARG1 and ARG2
+ classify the first and second arguments as follows:
+
+ 1: a single-precision argument
+ 2: a double-precision argument
+ 0: no argument, or not one of the above. */
+
+#define STUB_ARGS_0 /* () */
+#define STUB_ARGS_1 MOVE_SF_BYTE0 (t) /* (sf) */
+#define STUB_ARGS_5 MOVE_SF_BYTE0 (t); MOVE_SF_BYTE4 (t) /* (sf, sf) */
+#define STUB_ARGS_9 MOVE_SF_BYTE0 (t); MOVE_DF_BYTE8 (t) /* (sf, df) */
+#define STUB_ARGS_2 MOVE_DF_BYTE0 (t) /* (df) */
+#define STUB_ARGS_6 MOVE_DF_BYTE0 (t); MOVE_SF_BYTE8 (t) /* (df, sf) */
+#define STUB_ARGS_10 MOVE_DF_BYTE0 (t); MOVE_DF_BYTE8 (t) /* (df, df) */
+
+/* These functions are used by 16-bit code when calling via a function
+ pointer. They must copy the floating point arguments from the GPRs
+ to FPRs and then call function $2. */
+
+#define CALL_STUB_NO_RET(NAME, CODE) \
+CE_STARTFN (NAME); \
+ STUB_ARGS_##CODE; \
+ .set noreorder; \
+ jr $2; \
+ move $25,$2; \
+ .set reorder; \
+ CE_ENDFN (NAME)
+
+#ifdef L_m16stub1
+CALL_STUB_NO_RET (__mips16_call_stub_1, 1)
+#endif
+
+#ifdef L_m16stub5
+CALL_STUB_NO_RET (__mips16_call_stub_5, 5)
+#endif
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+
+#ifdef L_m16stub2
+CALL_STUB_NO_RET (__mips16_call_stub_2, 2)
+#endif
+
+#ifdef L_m16stub6
+CALL_STUB_NO_RET (__mips16_call_stub_6, 6)
+#endif
+
+#ifdef L_m16stub9
+CALL_STUB_NO_RET (__mips16_call_stub_9, 9)
+#endif
+
+#ifdef L_m16stub10
+CALL_STUB_NO_RET (__mips16_call_stub_10, 10)
+#endif
+#endif /* !__mips_single_float */
+
+/* Now we have the same set of functions, except that this time the
+ function being called returns an SFmode, SCmode, DFmode or DCmode
+ value; we need to instantiate a set for each case. The calling
+ function will arrange to preserve $18, so these functions are free
+ to use it to hold the return address.
+
+ Note that we do not know whether the function we are calling is 16
+ bit or 32 bit. However, it does not matter, because 16-bit
+ functions always return floating point values in both the gp and
+ the fp regs. It would be possible to check whether the function
+ being called is 16 bits, in which case the copy is unnecessary;
+ however, it's faster to always do the copy. */
+
+#define CALL_STUB_RET(NAME, CODE, MODE) \
+CE_STARTFN (NAME); \
+ .cfi_startproc; \
+ /* Create a fake CFA 4 bytes below the stack pointer. */ \
+ .cfi_def_cfa 29,-4; \
+ /* "Save" $sp in itself so we don't use the fake CFA. \
+ This is: DW_CFA_val_expression r29, { DW_OP_reg29 }. */ \
+ .cfi_escape 0x16,29,1,0x6d; \
+ move $18,$31; \
+ .cfi_register 31,18; \
+ STUB_ARGS_##CODE; \
+ .set noreorder; \
+ jalr $2; \
+ move $25,$2; \
+ .set reorder; \
+ MOVE_##MODE##_RET (f, $18); \
+ .cfi_endproc; \
+ CE_ENDFN (NAME)
+
+/* First, instantiate the single-float set. */
+
+#ifdef L_m16stubsf0
+CALL_STUB_RET (__mips16_call_stub_sf_0, 0, SF)
+#endif
+
+#ifdef L_m16stubsf1
+CALL_STUB_RET (__mips16_call_stub_sf_1, 1, SF)
+#endif
+
+#ifdef L_m16stubsf5
+CALL_STUB_RET (__mips16_call_stub_sf_5, 5, SF)
+#endif
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+#ifdef L_m16stubsf2
+CALL_STUB_RET (__mips16_call_stub_sf_2, 2, SF)
+#endif
+
+#ifdef L_m16stubsf6
+CALL_STUB_RET (__mips16_call_stub_sf_6, 6, SF)
+#endif
+
+#ifdef L_m16stubsf9
+CALL_STUB_RET (__mips16_call_stub_sf_9, 9, SF)
+#endif
+
+#ifdef L_m16stubsf10
+CALL_STUB_RET (__mips16_call_stub_sf_10, 10, SF)
+#endif
+#endif /* !__mips_single_float */
+
+
+/* Now we have the same set of functions again, except that this time
+ the function being called returns an DFmode value. */
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+#ifdef L_m16stubdf0
+CALL_STUB_RET (__mips16_call_stub_df_0, 0, DF)
+#endif
+
+#ifdef L_m16stubdf1
+CALL_STUB_RET (__mips16_call_stub_df_1, 1, DF)
+#endif
+
+#ifdef L_m16stubdf5
+CALL_STUB_RET (__mips16_call_stub_df_5, 5, DF)
+#endif
+
+#ifdef L_m16stubdf2
+CALL_STUB_RET (__mips16_call_stub_df_2, 2, DF)
+#endif
+
+#ifdef L_m16stubdf6
+CALL_STUB_RET (__mips16_call_stub_df_6, 6, DF)
+#endif
+
+#ifdef L_m16stubdf9
+CALL_STUB_RET (__mips16_call_stub_df_9, 9, DF)
+#endif
+
+#ifdef L_m16stubdf10
+CALL_STUB_RET (__mips16_call_stub_df_10, 10, DF)
+#endif
+#endif /* !__mips_single_float */
+
+
+/* Ho hum. Here we have the same set of functions again, this time
+ for when the function being called returns an SCmode value. */
+
+#ifdef L_m16stubsc0
+CALL_STUB_RET (__mips16_call_stub_sc_0, 0, SC)
+#endif
+
+#ifdef L_m16stubsc1
+CALL_STUB_RET (__mips16_call_stub_sc_1, 1, SC)
+#endif
+
+#ifdef L_m16stubsc5
+CALL_STUB_RET (__mips16_call_stub_sc_5, 5, SC)
+#endif
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+#ifdef L_m16stubsc2
+CALL_STUB_RET (__mips16_call_stub_sc_2, 2, SC)
+#endif
+
+#ifdef L_m16stubsc6
+CALL_STUB_RET (__mips16_call_stub_sc_6, 6, SC)
+#endif
+
+#ifdef L_m16stubsc9
+CALL_STUB_RET (__mips16_call_stub_sc_9, 9, SC)
+#endif
+
+#ifdef L_m16stubsc10
+CALL_STUB_RET (__mips16_call_stub_sc_10, 10, SC)
+#endif
+#endif /* !__mips_single_float */
+
+
+/* Finally, another set of functions for DCmode. */
+
+#if !defined(__mips_single_float) && !defined(__SINGLE_FLOAT)
+#ifdef L_m16stubdc0
+CALL_STUB_RET (__mips16_call_stub_dc_0, 0, DC)
+#endif
+
+#ifdef L_m16stubdc1
+CALL_STUB_RET (__mips16_call_stub_dc_1, 1, DC)
+#endif
+
+#ifdef L_m16stubdc5
+CALL_STUB_RET (__mips16_call_stub_dc_5, 5, DC)
+#endif
+
+#ifdef L_m16stubdc2
+CALL_STUB_RET (__mips16_call_stub_dc_2, 2, DC)
+#endif
+
+#ifdef L_m16stubdc6
+CALL_STUB_RET (__mips16_call_stub_dc_6, 6, DC)
+#endif
+
+#ifdef L_m16stubdc9
+CALL_STUB_RET (__mips16_call_stub_dc_9, 9, DC)
+#endif
+
+#ifdef L_m16stubdc10
+CALL_STUB_RET (__mips16_call_stub_dc_10, 10, DC)
+#endif
+#endif /* !__mips_single_float */
+
+#endif
+#endif /* __mips_micromips */
diff --git a/gcc-4.9/libgcc/config/mips/sfp-machine.h b/gcc-4.9/libgcc/config/mips/sfp-machine.h
new file mode 100644
index 000000000..e9d33b7dc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/sfp-machine.h
@@ -0,0 +1,180 @@
+/* softfp machine description for MIPS.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef __mips64
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long long
+#define _FP_WS_TYPE signed long long
+#define _FP_I_TYPE long long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+#define TI_BITS (__CHAR_BIT__ * (int) sizeof (TItype))
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+#ifdef __mips_nan2008
+# define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+# define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1)
+# define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1
+#else
+# define _FP_NANFRAC_S (_FP_QNANBIT_S - 1)
+# define _FP_NANFRAC_D (_FP_QNANBIT_D - 1)
+# define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1
+#endif
+#else
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned int
+#define _FP_WS_TYPE signed int
+#define _FP_I_TYPE int
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#ifdef __mips_nan2008
+# define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+# define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+# define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#else
+# define _FP_NANFRAC_S (_FP_QNANBIT_S - 1)
+# define _FP_NANFRAC_D (_FP_QNANBIT_D - 1), -1
+# define _FP_NANFRAC_Q (_FP_QNANBIT_Q - 1), -1, -1, -1
+#endif
+#endif
+
+/* The type of the result of a floating point comparison. This must
+ match __libgcc_cmp_return__ in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#ifdef __mips_nan2008
+# define _FP_QNANNEGATEDP 0
+#else
+# define _FP_QNANNEGATEDP 1
+#endif
+
+/* Comment from glibc: */
+/* From my experiments it seems X is chosen unless one of the
+ NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) | \
+ _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \
+ { \
+ R##_s = _FP_NANSIGN_##fs; \
+ _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#ifdef __mips_hard_float
+#define FP_EX_INVALID 0x40
+#define FP_EX_DIVZERO 0x20
+#define FP_EX_OVERFLOW 0x10
+#define FP_EX_UNDERFLOW 0x08
+#define FP_EX_INEXACT 0x04
+#define FP_EX_ALL \
+ (FP_EX_INVALID | FP_EX_DIVZERO | FP_EX_OVERFLOW | FP_EX_UNDERFLOW \
+ | FP_EX_INEXACT)
+
+#define FP_EX_ENABLE_SHIFT 5
+#define FP_EX_CAUSE_SHIFT 10
+
+#define FP_RND_NEAREST 0x0
+#define FP_RND_ZERO 0x1
+#define FP_RND_PINF 0x2
+#define FP_RND_MINF 0x3
+#define FP_RND_MASK 0x3
+
+#define _FP_DECL_EX \
+ unsigned long int _fcsr __attribute__ ((unused)) = FP_RND_NEAREST
+
+#define FP_INIT_ROUNDMODE \
+ do { \
+ _fcsr = __builtin_mips_get_fcsr (); \
+ } while (0)
+
+#define FP_ROUNDMODE (_fcsr & FP_RND_MASK)
+
+#define FP_TRAPPING_EXCEPTIONS ((_fcsr >> FP_EX_ENABLE_SHIFT) & FP_EX_ALL)
+
+#define FP_HANDLE_EXCEPTIONS \
+ do { \
+ _fcsr &= ~(FP_EX_ALL << FP_EX_CAUSE_SHIFT); \
+ /* Also clear Unimplemented Operation. */ \
+ _fcsr &= ~(1 << 17); \
+ _fcsr |= _fex | (_fex << FP_EX_CAUSE_SHIFT); \
+ __builtin_mips_set_fcsr (_fcsr); \
+ } while (0);
+
+#else
+#define FP_EX_INVALID (1 << 4)
+#define FP_EX_DIVZERO (1 << 3)
+#define FP_EX_OVERFLOW (1 << 2)
+#define FP_EX_UNDERFLOW (1 << 1)
+#define FP_EX_INEXACT (1 << 0)
+#endif
+
+#define _FP_TININESS_AFTER_ROUNDING 1
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined _MIPSEB
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/mips/t-crtstuff b/gcc-4.9/libgcc/config/mips/t-crtstuff
new file mode 100644
index 000000000..d8ab43be2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-crtstuff
@@ -0,0 +1,2 @@
+# Don't let CTOR_LIST end up in sdata section.
+CRTSTUFF_T_CFLAGS = -G 0
diff --git a/gcc-4.9/libgcc/config/mips/t-elf b/gcc-4.9/libgcc/config/mips/t-elf
new file mode 100644
index 000000000..651f10a53
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-elf
@@ -0,0 +1,3 @@
+# We must build libgcc2.a with -G 0, in case the user wants to link
+# without the $gp register.
+HOST_LIBGCC2_CFLAGS += -G 0
diff --git a/gcc-4.9/libgcc/config/mips/t-mips b/gcc-4.9/libgcc/config/mips/t-mips
new file mode 100644
index 000000000..4fb8e1362
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-mips
@@ -0,0 +1,9 @@
+LIB2_SIDITI_CONV_FUNCS = yes
+
+softfp_float_modes :=
+softfp_int_modes := si di
+softfp_extensions :=
+softfp_truncations :=
+softfp_exclude_libgcc2 := n
+
+LIB2ADD_ST += $(srcdir)/config/mips/lib2funcs.c
diff --git a/gcc-4.9/libgcc/config/mips/t-mips16 b/gcc-4.9/libgcc/config/mips/t-mips16
new file mode 100644
index 000000000..451ba9b81
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-mips16
@@ -0,0 +1,45 @@
+# Copyright (C) 2007-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+LIB1ASMSRC = mips/mips16.S
+LIB1ASMFUNCS = _m16addsf3 _m16subsf3 _m16mulsf3 _m16divsf3 \
+ _m16eqsf2 _m16nesf2 _m16gtsf2 _m16gesf2 _m16lesf2 _m16ltsf2 \
+ _m16unordsf2 \
+ _m16fltsisf _m16fix_truncsfsi _m16fltunsisf \
+ _m16adddf3 _m16subdf3 _m16muldf3 _m16divdf3 \
+ _m16extsfdf2 _m16trdfsf2 \
+ _m16eqdf2 _m16nedf2 _m16gtdf2 _m16gedf2 _m16ledf2 _m16ltdf2 \
+ _m16unorddf2 \
+ _m16fltsidf _m16fix_truncdfsi _m16fltunsidf \
+ _m16retsf _m16retdf \
+ _m16retsc _m16retdc \
+ _m16stub1 _m16stub2 _m16stub5 _m16stub6 _m16stub9 _m16stub10 \
+ _m16stubsf0 _m16stubsf1 _m16stubsf2 _m16stubsf5 _m16stubsf6 \
+ _m16stubsf9 _m16stubsf10 \
+ _m16stubdf0 _m16stubdf1 _m16stubdf2 _m16stubdf5 _m16stubdf6 \
+ _m16stubdf9 _m16stubdf10 \
+ _m16stubsc0 _m16stubsc1 _m16stubsc2 _m16stubsc5 _m16stubsc6 \
+ _m16stubsc9 _m16stubsc10 \
+ _m16stubdc0 _m16stubdc1 _m16stubdc2 _m16stubdc5 _m16stubdc6 \
+ _m16stubdc9 _m16stubdc10
+
+SYNC = yes
+SYNC_CFLAGS = -mno-mips16
+
+# Version these symbols if building libgcc.so.
+SHLIB_MAPFILES += $(srcdir)/config/mips/libgcc-mips16.ver
diff --git a/gcc-4.9/libgcc/config/mips/t-mips64 b/gcc-4.9/libgcc/config/mips/t-mips64
new file mode 100644
index 000000000..a1e3513e2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-mips64
@@ -0,0 +1 @@
+softfp_int_modes += ti
diff --git a/gcc-4.9/libgcc/config/mips/t-sdemtk b/gcc-4.9/libgcc/config/mips/t-sdemtk
new file mode 100644
index 000000000..a06e828b5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-sdemtk
@@ -0,0 +1,3 @@
+# Don't build FPBIT and DPBIT; we'll be using the SDE soft-float library.
+FPBIT =
+DPBIT =
diff --git a/gcc-4.9/libgcc/config/mips/t-softfp-tf b/gcc-4.9/libgcc/config/mips/t-softfp-tf
new file mode 100644
index 000000000..306677b12
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-softfp-tf
@@ -0,0 +1,3 @@
+softfp_float_modes += tf
+softfp_extensions += sftf dftf
+softfp_truncations += tfsf tfdf
diff --git a/gcc-4.9/libgcc/config/mips/t-vr b/gcc-4.9/libgcc/config/mips/t-vr
new file mode 100644
index 000000000..601fbdece
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/t-vr
@@ -0,0 +1,2 @@
+LIB2ADD_ST = $(srcdir)/config/mips/mips16.S \
+ $(srcdir)/config/mips/vr4120-div.S
diff --git a/gcc-4.9/libgcc/config/mips/vr4120-div.S b/gcc-4.9/libgcc/config/mips/vr4120-div.S
new file mode 100644
index 000000000..76c4e7a45
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mips/vr4120-div.S
@@ -0,0 +1,79 @@
+/* Support file for -mfix-vr4120.
+ Copyright (C) 2002-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* This file contains functions which implement divsi3 and modsi3 for
+ -mfix-vr4120. div and ddiv do not give the correct result when one
+ of the operands is negative. */
+
+ .set nomips16
+
+#define DIV \
+ xor $3,$4,$5 /* t = x ^ y */ ; \
+ li $2,0x80000000; \
+ .set noreorder; \
+ bgez $4,1f /* x >= 0 */; \
+ and $3,$3,$2 /* t = (x ^ y) & 0x80000000 in delay slot */ ;\
+ .set reorder; \
+ subu $4,$0,$4 /* x = -x */ ; \
+1:; \
+ .set noreorder; \
+ bgez $5,2f /* y >= 0 */ ; \
+ nop; \
+ subu $5,$0,$5 /* y = -y */ ; \
+ .set reorder; \
+2:; \
+ divu $0,$4,$5; /* we use divu because of INT_MIN */ \
+ .set noreorder; \
+ bne $5,$0,3f; \
+ nop; \
+ break 7 /* division on zero y */ ; \
+3:; \
+ .set reorder; \
+ mflo $2 /* r = x / y */ ; \
+ .set noreorder; \
+ beq $3,$0,4f /* t == 0 */ ; \
+ nop; \
+ subu $2,$0,$2 /* r = -r */ ; \
+ .set reorder; \
+4:
+
+ .globl __vr4120_divsi3
+ .ent __vr4120_divsi3
+__vr4120_divsi3:
+ DIV
+ j $31
+ .end __vr4120_divsi3
+
+ .globl __vr4120_modsi3
+ .ent __vr4120_modsi3
+__vr4120_modsi3:
+ move $6,$4 # x1 = x
+ move $7,$5 # y1 = y
+ DIV
+ mult $2,$7 # r = r * y1
+ mflo $2
+ .set noreorder
+ j $31
+ subu $2,$6,$2 # r = x1 - r in delay slot
+ .end __vr4120_modsi3
diff --git a/gcc-4.9/libgcc/config/mmix/crti.S b/gcc-4.9/libgcc/config/mmix/crti.S
new file mode 100644
index 000000000..82ffa6de8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mmix/crti.S
@@ -0,0 +1,152 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Hans-Peter Nilsson <hp@bitrange.com>
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+% This is the crt0 equivalent for mmix-knuth-mmixware, for setting up
+% things for compiler-generated assembly-code and for setting up things
+% between where the simulator calls and main, and shutting things down on
+% the way back. There's an actual crt0.o elsewhere, but that's a dummy.
+
+% This file and the GCC output are supposed to be *reasonably*
+% mmixal-compatible to enable people to re-use output with Knuth's mmixal.
+% However, forward references are used more freely: we are using the
+% binutils tools. Users of mmixal beware; you will sometimes have to
+% re-order things or use temporary variables.
+
+% Users of mmixal will want to set up 8H and 9H to be .text and .data
+% respectively, so the compiler can switch between them pretending they're
+% segments.
+
+% This little treasure (some contents) is required so the 32 lowest
+% address bits of user data will not be zero. Because of truncation,
+% that would cause testcase gcc.c-torture/execute/980701-1.c to
+% incorrectly fail.
+
+ .data ! mmixal:= 8H LOC Data_Segment
+ .p2align 3
+dstart OCTA 2009
+
+ .text ! mmixal:= 9H LOC 8B; LOC #100
+ .global Main
+
+% The __Stack_start symbol is provided by the link script.
+stackpp OCTA __Stack_start
+crtstxt OCTA _init % Assumed to be the lowest executed address.
+ OCTA __etext % Assumed to be beyond the highest executed address.
+
+crtsdat OCTA dstart % Assumed to be the lowest accessed address.
+ OCTA _end % Assumed to be beyond the highest accessed address.
+
+% "Main" is the magic symbol the simulator jumps to. We want to go
+% on to "main".
+% We need to set rG explicitly to avoid hard-to-debug situations.
+Main SETL $255,32
+ PUT rG,$255
+
+% Make sure we have valid memory for addresses in .text and .data (and
+% .bss, but we include this in .data), for the benefit of mmo-using
+% simulators that require validation of addresses for which contents
+% is not present. Due to its implicit-zero nature, zeros in contents
+% may be left out in the mmo format, but we don't know the boundaries
+% of those zero-chunks; for mmo files from binutils, they correspond
+% to the beginning and end of sections in objects before linking. We
+% validate the contents by executing PRELD (0; one byte) on each
+% 2048-byte-boundary of our .text .data, and we assume this size
+% matches the magic lowest-denominator chunk-size for all
+% validation-requiring simulators. The effect of the PRELD (any size)
+% is assumed to be the same as initial loading of the contents, as
+% long as the PRELD happens before the first PUSHJ/PUSHGO. If it
+% happens after that, we'll need to distinguish between
+% access-for-execution and read/write access.
+
+ GETA $255,crtstxt
+ LDOU $2,$255,0
+ ANDNL $2,#7ff % Align the start at a 2048-boundary.
+ LDOU $3,$255,8
+ SETL $4,2048
+0H PRELD 0,$2,0
+ ADDU $2,$2,$4
+ CMP $255,$2,$3
+ BN $255,0B
+
+ GETA $255,crtsdat
+ LDOU $2,$255,0
+ ANDNL $2,#7ff
+ LDOU $3,$255,8
+0H PRELD 0,$2,0
+ ADDU $2,$2,$4
+ CMP $255,$2,$3
+ BN $255,0B
+
+% Initialize the stack pointer. It is supposedly made a global
+% zero-initialized (allowed to change) register in crtn.S; we use the
+% explicit number.
+ GETA $255,stackpp
+ LDOU $254,$255,0
+
+ PUSHJ $2,_init
+
+#ifdef __MMIX_ABI_GNU__
+% Copy argc and argv from their initial position to argument registers
+% where necessary.
+ SET $231,$0
+ SET $232,$1
+#else
+% For the mmixware ABI, we need to move arguments. The return value will
+% appear in $0.
+ SET $2,$1
+ SET $1,$0
+#endif
+
+ PUSHJ $0,main
+ JMP exit
+
+% Provide the first part of _init and _fini. Save the return address on the
+% register stack. We eventually ignore the return address of these
+% PUSHJ:s, so it doesn't matter that whether .init and .fini code calls
+% functions or where they store rJ. We shouldn't get there, so die
+% (TRAP Halt) if that happens.
+
+ .section .init,"ax",@progbits
+ .global _init
+_init:
+ GET $0,:rJ
+ PUSHJ $1,0F
+ SETL $255,255
+ TRAP 0,0,0
+0H IS @
+
+% Register _fini to be executed as the last atexit function.
+#ifdef __MMIX_ABI_GNU__
+ GETA $231,_fini
+#else
+ GETA $1,_fini
+#endif
+ PUSHJ $0,atexit
+
+ .section .fini,"ax",@progbits
+ .global _fini
+_fini:
+ GET $0,:rJ
+ PUSHJ $1,0F
+ SETL $255,255
+ TRAP 0,0,0
+0H IS @
diff --git a/gcc-4.9/libgcc/config/mmix/crtn.S b/gcc-4.9/libgcc/config/mmix/crtn.S
new file mode 100644
index 000000000..d520a9e6f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mmix/crtn.S
@@ -0,0 +1,87 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Hans-Peter Nilsson <hp@bitrange.com>
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+% This must be the last file on the link-line, allocating global registers
+% from the top.
+
+% Register $254 is the stack-pointer.
+sp GREG
+
+% Register $253 is frame-pointer. It's not supposed to be used in most
+% functions.
+fp GREG
+
+% $252 is the static chain register; nested functions receive the
+% context of the surrounding function through a pointer passed in this
+% register.
+static_chain GREG
+struct_value_reg GREG
+
+% These registers are used to pass state at an exceptional return (C++).
+eh_state_3 GREG
+eh_state_2 GREG
+eh_state_1 GREG
+eh_state_0 GREG
+
+#ifdef __MMIX_ABI_GNU__
+
+% Allocate global registers used by the GNU ABI.
+gnu_parm_reg_16 GREG
+gnu_parm_reg_15 GREG
+gnu_parm_reg_14 GREG
+gnu_parm_reg_13 GREG
+gnu_parm_reg_12 GREG
+gnu_parm_reg_11 GREG
+gnu_parm_reg_10 GREG
+gnu_parm_reg_9 GREG
+gnu_parm_reg_8 GREG
+gnu_parm_reg_7 GREG
+gnu_parm_reg_6 GREG
+gnu_parm_reg_5 GREG
+gnu_parm_reg_4 GREG
+gnu_parm_reg_3 GREG
+gnu_parm_reg_2 GREG
+gnu_parm_reg_1 GREG
+
+#endif /* __MMIX_ABI_GNU__ */
+
+% Provide last part of _init and _fini.
+
+% The return address is stored in the topmost stored register in the
+% register-stack. We ignore the current value in rJ. It is probably
+% garbage because each fragment of _init and _fini may have their own idea
+% of the current stack frame, if they're cut out from a "real" function
+% like in gcc/crtstuff.c.
+
+ .section .init,"ax",@progbits
+ GETA $255,0F
+ PUT rJ,$255
+ POP 0,0
+0H PUT rJ,$0
+ POP 0,0
+
+ .section .fini,"ax",@progbits
+ GETA $255,0F
+ PUT rJ,$255
+ POP 0,0
+0H PUT rJ,$0
+ POP 0,0
diff --git a/gcc-4.9/libgcc/config/mmix/t-mmix b/gcc-4.9/libgcc/config/mmix/t-mmix
new file mode 100644
index 000000000..2ee4f001a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/mmix/t-mmix
@@ -0,0 +1,22 @@
+HOST_LIBGCC2_CFLAGS += -mlibfuncs -O2
+
+# We need to turn off some assumptions on normality for code in crtstuff.c
+# and crt{i,n}.S, specifically about execution not continuing past the
+# end of the section in the file being compiled. Thus we must stop the
+# assembler from generating stubbable PUSHJ relocs, because that will add
+# stubs at the end of the current section when necessary.
+CRTSTUFF_T_CFLAGS = -Wa,--no-stubs
+
+# Don't use global registers in libraries.
+# FIXME: Not applied at "root" level, so disabled at the moment to stop
+# incorrect comparisons with -mabi=gnu.
+#MULTILIB_EXTRA_OPTS = mno-base-addresses
+
+# Cannot use default rules due to $(CRTSTUFF_T_CFLAGS).
+CUSTOM_CRTIN = yes
+
+crti.o: $(srcdir)/config/mmix/crti.S
+ $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $<
+
+crtn.o: $(srcdir)/config/mmix/crtn.S
+ $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $<
diff --git a/gcc-4.9/libgcc/config/moxie/crti.S b/gcc-4.9/libgcc/config/moxie/crti.S
new file mode 100644
index 000000000..25206cf29
--- /dev/null
+++ b/gcc-4.9/libgcc/config/moxie/crti.S
@@ -0,0 +1,40 @@
+# crti.S for moxie
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just make a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+ .file "crti.S"
+
+ .section ".init"
+ .global _init
+ .type _init, @function
+ .p2align 1
+_init:
+
+ .section ".fini"
+ .global _fini
+ .type _fini,@function
+ .p2align 1
+_fini:
diff --git a/gcc-4.9/libgcc/config/moxie/crtn.S b/gcc-4.9/libgcc/config/moxie/crtn.S
new file mode 100644
index 000000000..e49e54c6c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/moxie/crtn.S
@@ -0,0 +1,34 @@
+# crtn.S for moxie
+#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+ .file "crtn.S"
+
+ .section ".init"
+ ret
+
+ .section ".fini"
+ ret
diff --git a/gcc-4.9/libgcc/config/moxie/sfp-machine.h b/gcc-4.9/libgcc/config/moxie/sfp-machine.h
new file mode 100644
index 000000000..6394de30b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/moxie/sfp-machine.h
@@ -0,0 +1,61 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+# define __BYTE_ORDER __BIG_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/gcc-4.9/libgcc/config/msp430/cmpd.c b/gcc-4.9/libgcc/config/msp430/cmpd.c
new file mode 100644
index 000000000..03e690dff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/cmpd.c
@@ -0,0 +1,19 @@
+/* Public domain. */
+int
+__mspabi_cmpf (float x, float y)
+{
+ if (x < y)
+ return -1;
+ if (x > y)
+ return 1;
+ return 0;
+}
+int
+__mspabi_cmpd (double x, double y)
+{
+ if (x < y)
+ return -1;
+ if (x > y)
+ return 1;
+ return 0;
+}
diff --git a/gcc-4.9/libgcc/config/msp430/cmpsi2.S b/gcc-4.9/libgcc/config/msp430/cmpsi2.S
new file mode 100644
index 000000000..7f85c0b9b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/cmpsi2.S
@@ -0,0 +1,98 @@
+; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+#ifdef __MSP430X_LARGE__
+#define ret_ RETA
+#else
+#define ret_ RET
+#endif
+
+ .text
+
+ ;; int __cmpsi2 (signed long A, signed long B)
+ ;;
+ ;; Performs a signed comparison of A and B.
+ ;; If A is less than B it returns 0. If A is greater
+ ;; than B it returns 2. If they are equal it returns 1.
+
+ ;; Note - this code is also used by the __ucmpsi2 routine below.
+
+ .global __cmpsi2
+ .type __cmpsi2, @function
+__cmpsi2:
+ ;; A is in r12 (low), r13 (high)
+ ;; B is in r14 (low), r15 (high)
+ ;; Result put in r12
+
+ cmp.w r13, r15
+ jeq .L_compare_low
+ jge .L_less_than
+.L_greater_than:
+ mov.w #2, r12
+ ret_
+.L_less_than:
+ mov.w #0, r12
+ ret_
+
+.L_compare_low:
+ cmp.w r12, r14
+ jl .L_greater_than
+ jne .L_less_than
+ mov.w #1, r12
+ ret_
+
+ .size __cmpsi2, . - __cmpsi2
+
+
+ ;; int __ucmpsi2 (unsigned long A, unsigned long B)
+ ;;
+ ;; Performs an unsigned comparison of A and B.
+ ;; If A is less than B it returns 0. If A is greater
+ ;; than B it returns 2. If they are equal it returns 1.
+
+;;; Note - this function branches into the __cmpsi2 code above.
+
+ .global __ucmpsi2
+ .type __ucmpsi2, @function
+__ucmpsi2:
+ ;; A is in r12 (low), r13 (high)
+ ;; B is in r14 (low), r15 (high)
+ ;; Result put in r12
+
+ tst r13
+ jn .L_top_bit_set_in_A
+ tst r15
+;;; If the top bit of B is set, but A's is clear we know that A < B.
+ jn .L_less_than
+;;; Neither A nor B has their top bit set so we can use the __cmpsi2 routine.
+;;; Note we use Jc rather than BR as that saves two bytes. The TST insn always
+;;; sets the C bit.
+ jc __cmpsi2
+
+.L_top_bit_set_in_A:
+ tst r15
+;;; If both A and B have their top bit set we can use the __cmpsi2 routine.
+ jn __cmpsi2
+;;; Otherwise A has its top bit set and B does not so A > B.
+ jc .L_greater_than
+
+ .size __ucmpsi2, . - __ucmpsi2
diff --git a/gcc-4.9/libgcc/config/msp430/epilogue.S b/gcc-4.9/libgcc/config/msp430/epilogue.S
new file mode 100644
index 000000000..93ad0caf1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/epilogue.S
@@ -0,0 +1,51 @@
+; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+ .text
+
+ .global __mspabi_func_epilog_7
+ .global __mspabi_func_epilog_6
+ .global __mspabi_func_epilog_5
+ .global __mspabi_func_epilog_4
+ .global __mspabi_func_epilog_3
+ .global __mspabi_func_epilog_2
+ .global __mspabi_func_epilog_1
+
+__mspabi_func_epilog_7:
+ POP R4
+__mspabi_func_epilog_6:
+ POP R5
+__mspabi_func_epilog_5:
+ POP R6
+__mspabi_func_epilog_4:
+ POP R7
+__mspabi_func_epilog_3:
+ POP R8
+__mspabi_func_epilog_2:
+ POP R9
+__mspabi_func_epilog_1:
+ POP R10
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
diff --git a/gcc-4.9/libgcc/config/msp430/floathidf.c b/gcc-4.9/libgcc/config/msp430/floathidf.c
new file mode 100644
index 000000000..304731d51
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/floathidf.c
@@ -0,0 +1,8 @@
+/* Public domain. */
+extern double __floatsidf (long);
+
+double
+__floathidf (int u)
+{
+ return __floatsidf ((long)u);
+}
diff --git a/gcc-4.9/libgcc/config/msp430/floathisf.c b/gcc-4.9/libgcc/config/msp430/floathisf.c
new file mode 100644
index 000000000..64e5d805d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/floathisf.c
@@ -0,0 +1,11 @@
+/* Public domain. */
+typedef int HItype __attribute__ ((mode (HI)));
+typedef float SFtype __attribute__ ((mode (SF)));
+
+extern SFtype __floatsisf (unsigned long);
+
+SFtype
+__floathisf (HItype u)
+{
+ return __floatsisf ((unsigned long)u);
+}
diff --git a/gcc-4.9/libgcc/config/msp430/floatunhidf.c b/gcc-4.9/libgcc/config/msp430/floatunhidf.c
new file mode 100644
index 000000000..f13b55076
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/floatunhidf.c
@@ -0,0 +1,12 @@
+/* Public domain. */
+typedef int HItype __attribute__ ((mode (HI)));
+typedef unsigned int UHItype __attribute__ ((mode (HI)));
+typedef float DFtype __attribute__ ((mode (DF)));
+
+extern DFtype __floatunsidf (unsigned long);
+
+DFtype
+__floatunhidf (UHItype u)
+{
+ return __floatunsidf ((unsigned long)u);
+}
diff --git a/gcc-4.9/libgcc/config/msp430/floatunhisf.c b/gcc-4.9/libgcc/config/msp430/floatunhisf.c
new file mode 100644
index 000000000..ea920bd85
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/floatunhisf.c
@@ -0,0 +1,12 @@
+/* Public domain. */
+typedef int HItype __attribute__ ((mode (HI)));
+typedef unsigned int UHItype __attribute__ ((mode (HI)));
+typedef float SFtype __attribute__ ((mode (SF)));
+
+extern SFtype __floatunsisf (unsigned long);
+
+SFtype
+__floatunhisf (UHItype u)
+{
+ return __floatunsisf ((unsigned long)u);
+}
diff --git a/gcc-4.9/libgcc/config/msp430/lib2bitcountHI.c b/gcc-4.9/libgcc/config/msp430/lib2bitcountHI.c
new file mode 100644
index 000000000..02c5d58d2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2bitcountHI.c
@@ -0,0 +1,49 @@
+/* libgcc routines for MSP430
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef int sint08_type __attribute__ ((mode (QI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+/* See the comment by the definition of LIBGCC2_UNITS_PER_WORD in
+ msp430.h for why we are creating extra versions of some of the
+ functions defined in libgcc2.c. */
+
+#define LIBGCC2_UNITS_PER_WORD 2
+
+#define L_clzsi2
+#define L_ctzsi2
+#define L_ffssi2
+#define L_paritysi2
+#define L_popcountsi2
+
+#include "libgcc2.c"
diff --git a/gcc-4.9/libgcc/config/msp430/lib2divHI.c b/gcc-4.9/libgcc/config/msp430/lib2divHI.c
new file mode 100644
index 000000000..287463e1f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2divHI.c
@@ -0,0 +1,42 @@
+/* HI mode divide routines for libgcc for MSP430
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef int sint08_type __attribute__ ((mode (QI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+#define UINT_TYPE uint16_type
+#define SINT_TYPE sint16_type
+#define BITS_MINUS_1 15
+#define NAME_MODE hi
+
+#include "msp430-divmod.h"
diff --git a/gcc-4.9/libgcc/config/msp430/lib2divQI.c b/gcc-4.9/libgcc/config/msp430/lib2divQI.c
new file mode 100644
index 000000000..7e3f4b2d9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2divQI.c
@@ -0,0 +1,43 @@
+/* QI mode divide routines for libgcc for MSP430
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef int sint08_type __attribute__ ((mode (QI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+#define UINT_TYPE uint08_type
+#define SINT_TYPE sint08_type
+#define BITS_MINUS_1 7
+#define NAME_MODE qi
+
+#include "msp430-divmod.h"
+
diff --git a/gcc-4.9/libgcc/config/msp430/lib2divSI.c b/gcc-4.9/libgcc/config/msp430/lib2divSI.c
new file mode 100644
index 000000000..1bd1822d1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2divSI.c
@@ -0,0 +1,42 @@
+/* SI mode divide routines for libgcc for MSP430
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef int sint08_type __attribute__ ((mode (QI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+#define UINT_TYPE uint32_type
+#define SINT_TYPE sint32_type
+#define BITS_MINUS_1 31
+#define NAME_MODE si
+
+#include "msp430-divmod.h"
diff --git a/gcc-4.9/libgcc/config/msp430/lib2hw_mul.S b/gcc-4.9/libgcc/config/msp430/lib2hw_mul.S
new file mode 100644
index 000000000..7c83323ed
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2hw_mul.S
@@ -0,0 +1,226 @@
+; Copyright (C) 2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+.macro start_func name
+ .pushsection .text.\name,"ax",@progbits
+ .align 2
+ .global \name
+ .type \name , @function
+\name:
+ PUSH.W sr ; Save current interrupt state
+ DINT ; Disable interrupts
+ NOP ; Account for latency
+.endm
+
+.macro end_func name
+#ifdef __MSP430X_LARGE__
+ POP.W sr
+ RETA
+#else
+ RETI
+#endif
+ .size \name , . - \name
+ .popsection
+.endm
+
+.macro mult16 OP1, OP2, RESULT
+;* * 16-bit hardware multiply: int16 = int16 * int16
+;*
+;* - Operand 1 is in R12
+;* - Operand 2 is in R13
+;* - Result is in R12
+;*
+;* To ensure that the multiply is performed atomically, interrupts are
+;* disabled upon routine entry. Interrupt state is restored upon exit.
+;*
+;* Registers used: R12, R13
+;*
+;* Macro arguments are the memory locations of the hardware registers.
+
+ MOV.W r12, &\OP1 ; Load operand 1 into multiplier
+ MOV.W r13, &\OP2 ; Load operand 2 which triggers MPY
+ MOV.W &\RESULT, r12 ; Move result into return register
+.endm
+
+.macro mult1632 OP1, OP2, RESULT_LO, RESULT_HI
+;* * 16-bit hardware multiply with a 32-bit result:
+;* int32 = int16 * int16
+;* uint32 = uint16 * uint16
+;*
+;* - Operand 1 is in R12
+;* - Operand 2 is in R13
+;* - Result is in R12, R13
+;*
+;* To ensure that the multiply is performed atomically, interrupts are
+;* disabled upon routine entry. Interrupt state is restored upon exit.
+;*
+;* Registers used: R12, R13
+;*
+;* Macro arguments are the memory locations of the hardware registers.
+
+ MOV.W r12, &\OP1 ; Load operand 1 into multiplier
+ MOV.W r13, &\OP2 ; Load operand 2 which triggers MPY
+ MOV.W &\RESULT_LO, r12 ; Move low result into return register
+ MOV.W &\RESULT_HI, r13 ; Move high result into return register
+.endm
+
+.macro mult32 OP1, OP2, MAC_OP1, MAC_OP2, RESULT_LO, RESULT_HI
+;* * 32-bit hardware multiply with a 32-bit result using 16 multiply and accumulate:
+;* int32 = int32 * int32
+;*
+;* - Operand 1 is in R12, R13
+;* - Operand 2 is in R14, R15
+;* - Result is in R12, R13
+;*
+;* To ensure that the multiply is performed atomically, interrupts are
+;* disabled upon routine entry. Interrupt state is restored upon exit.
+;*
+;* Registers used: R12, R13, R14, R15
+;*
+;* Macro arguments are the memory locations of the hardware registers.
+
+ MOV.W r12, &\OP1 ; Load operand 1 Low into multiplier
+ MOV.W r14, &\OP2 ; Load operand 2 Low which triggers MPY
+ MOV.W r12, &\MAC_OP1 ; Load operand 1 Low into mac
+ MOV.W &\RESULT_LO, r12 ; Low 16-bits of result ready for return
+ MOV.W &\RESULT_HI, &\RESULT_LO; MOV intermediate mpy high into low
+ MOV.W r15, &\MAC_OP2 ; Load operand 2 High, trigger MAC
+ MOV.W r13, &\MAC_OP1 ; Load operand 1 High
+ MOV.W r14, &\MAC_OP2 ; Load operand 2 Lo, trigger MAC
+ MOV.W &\RESULT_LO, r13 ; Upper 16-bits result ready for return
+.endm
+
+
+.macro mult32_hw OP1_LO OP1_HI OP2_LO OP2_HI RESULT_LO RESULT_HI
+;* * 32-bit hardware multiply with a 32-bit result
+;* int32 = int32 * int32
+;*
+;* - Operand 1 is in R12, R13
+;* - Operand 2 is in R14, R15
+;* - Result is in R12, R13
+;*
+;* To ensure that the multiply is performed atomically, interrupts are
+;* disabled upon routine entry. Interrupt state is restored upon exit.
+;*
+;* Registers used: R12, R13, R14, R15
+;*
+;* Macro arguments are the memory locations of the hardware registers.
+
+ MOV.W r12, &\OP1_LO ; Load operand 1 Low into multiplier
+ MOV.W r13, &\OP1_HI ; Load operand 1 High into multiplier
+ MOV.W r14, &\OP2_LO ; Load operand 2 Low into multiplier
+ MOV.W r15, &\OP2_HI ; Load operand 2 High, trigger MPY
+ MOV.W &\RESULT_LO, r12 ; Ready low 16-bits for return
+ MOV.W &\RESULT_HI, r13 ; Ready high 16-bits for return
+.endm
+
+.macro mult3264_hw OP1_LO OP1_HI OP2_LO OP2_HI RES0 RES1 RES2 RES3
+;* * 32-bit hardware multiply with a 64-bit result
+;* int64 = int32 * int32
+;* uint64 = uint32 * uint32
+;*
+;* - Operand 1 is in R12, R13
+;* - Operand 2 is in R14, R15
+;* - Result is in R12, R13, R14, R15
+;*
+;* To ensure that the multiply is performed atomically, interrupts are
+;* disabled upon routine entry. Interrupt state is restored upon exit.
+;*
+;* Registers used: R12, R13, R14, R15
+;*
+;* Macro arguments are the memory locations of the hardware registers.
+
+ MOV.W r12, &\OP1_LO ; Load operand 1 Low into multiplier
+ MOV.W r13, &\OP1_HI ; Load operand 1 High into multiplier
+ MOV.W r14, &\OP2_LO ; Load operand 2 Low into multiplier
+ MOV.W r15, &\OP2_HI ; Load operand 2 High, trigger MPY
+ MOV.W &\RES0, R12 ; Ready low 16-bits for return
+ MOV.W &\RES1, R13 ;
+ MOV.W &\RES2, R14 ;
+ MOV.W &\RES3, R15 ; Ready high 16-bits for return
+.endm
+
+
+;; First generation MSP430 hardware multiplies ....
+
+.set MPY_OP1, 0x0130
+.set MPY_OP1_S, 0x0132
+.set MAC_OP1, 0x0134
+.set MPY_OP2, 0x0138
+.set MAC_OP2, 0x0138
+.set RESULT_LO, 0x013A
+.set RESULT_HI, 0x013C
+
+ start_func __mulhi2
+ mult16 MPY_OP1, MPY_OP2, RESULT_LO
+ end_func __mulhi2
+
+ start_func __mulsihi2
+ mult1632 MPY_OP1_S, MPY_OP2, RESULT_LO, RESULT_HI
+ end_func __mulsihi2
+
+ start_func __umulsihi2
+ mult1632 MPY_OP1, MPY_OP2, RESULT_LO, RESULT_HI
+ end_func __umulsihi2
+
+ start_func __mulsi2
+ mult32 MPY_OP1, MPY_OP2, MAC_OP1, MAC_OP2, RESULT_LO, RESULT_HI
+ end_func __mulsi2
+
+ start_func __mulsi2_hw32
+ mult32_hw 0x0140, 0x0142, 0x0150, 0x0152, 0x0154, 0x0156
+ end_func __mulsi2_hw32
+
+ start_func __muldisi2_hw32
+ mult3264_hw 0x0144, 0x146, 0x0150, 0x0152, 0x0154, 0x0156, 0x0158, 0x015A
+ end_func __muldisi2_hw32
+
+ start_func __umuldisi2_hw32
+ mult3264_hw 0x0140, 0x142, 0x0150, 0x0152, 0x0154, 0x0156, 0x0158, 0x015A
+ end_func __umuldisi2_hw32
+
+/* The F5xxx series of MCUs support the same 16-bit hardware
+ multiply, but it is accessed from different memory registers. */
+
+ start_func __mulhi2_f5
+ mult16 0x04C0, 0x04C8, 0x04CA
+ end_func __mulhi2_f5
+
+ start_func __mulsihi2_f5
+ mult1632 0x04C2, 0x04C8, 0x04CA, 0x04CC
+ end_func __mulsihi2_f5
+
+ start_func __umulsihi2_f5
+ mult1632 0x04C0, 0x04C8, 0x04CA, 0x04CC
+ end_func __umulsihi2_f5
+
+ start_func __mulsi2_f5
+ mult32_hw 0x04D0, 0x04D2, 0x04E0, 0x04E2, 0x04E4, 0x04E6
+ end_func __mulsi2_f5
+
+ start_func __muldisi2_f5
+ mult3264_hw 0x04D4, 0x04D6, 0x04E0, 0x04E2, 0x04E4, 0x04E6, 0x04E8, 0x04EA
+ end_func __muldisi2_f5
+
+ start_func __umuldisi2_f5
+ mult3264_hw 0x04D0, 0x04D2, 0x04E0, 0x04E2, 0x04E4, 0x04E6, 0x04E8, 0x04EA
+ end_func __umuldisi2_f5
diff --git a/gcc-4.9/libgcc/config/msp430/lib2mul.c b/gcc-4.9/libgcc/config/msp430/lib2mul.c
new file mode 100644
index 000000000..1a36af56b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2mul.c
@@ -0,0 +1,58 @@
+/* libgcc routines for MSP430
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+
+#define UINT_TYPE uint16_type
+#define BITS_MINUS_1 15
+#define NAME_MODE hi
+
+#include "msp430-mul.h"
+
+#undef UINT_TYPE
+#undef BITS_MINUS_1
+#undef NAME_MODE
+
+#define UINT_TYPE uint08_type
+#define BITS_MINUS_1 7
+#define NAME_MODE qi
+
+#include "msp430-mul.h"
+
+#undef UINT_TYPE
+#undef BITS_MINUS_1
+#undef NAME_MODE
+
+#define UINT_TYPE uint32_type
+#define BITS_MINUS_1 31
+#define NAME_MODE si
+
+#include "msp430-mul.h"
diff --git a/gcc-4.9/libgcc/config/msp430/lib2shift.c b/gcc-4.9/libgcc/config/msp430/lib2shift.c
new file mode 100644
index 000000000..472247836
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/lib2shift.c
@@ -0,0 +1,113 @@
+/* Shift functions for the GCC support library for the MSP430
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+
+uint32_type __ashlsi3 (uint32_type in, char bit);
+sint32_type __ashrsi3 (sint32_type in, char bit);
+int __clrsbhi2 (sint16_type x);
+extern int __clrsbsi2 (sint32_type x);
+
+typedef struct
+{
+ union
+ {
+ uint32_type u;
+ uint16_type h[2];
+ } u;
+} dd;
+
+uint32_type
+__ashlsi3 (uint32_type in, char bit)
+{
+ uint16_type h, l;
+ dd d;
+
+ if (bit > 32)
+ return 0;
+ if (bit < 0)
+ return in;
+
+ d.u.u = in;
+ h = d.u.h[1];
+ l = d.u.h[0];
+
+ if (bit > 15)
+ {
+ h = l;
+ l = 0;
+ bit -= 16;
+ }
+
+ while (bit)
+ {
+ h = (h << 1) | (l >> 15);
+ l <<= 1;
+ bit --;
+ }
+
+ d.u.h[1] = h;
+ d.u.h[0] = l;
+ return d.u.u;
+}
+
+sint32_type
+__ashrsi3 (sint32_type in, char bit)
+{
+ sint16_type h;
+ uint16_type l;
+ dd d;
+
+ if (bit > 32)
+ return 0;
+ if (bit < 0)
+ return in;
+
+ d.u.u = in;
+ h = d.u.h[1];
+ l = d.u.h[0];
+
+ while (bit)
+ {
+ l = (h << 15) | (l >> 1);
+ h >>= 1;
+ bit --;
+ }
+
+ d.u.h[1] = h;
+ d.u.h[0] = l;
+ return d.u.u;
+}
+
+int
+__clrsbhi2 (sint16_type x)
+{
+ if (x == 0)
+ return 15;
+ return __clrsbsi2 ((sint32_type) x) - 16;
+}
diff --git a/gcc-4.9/libgcc/config/msp430/mpy.c b/gcc-4.9/libgcc/config/msp430/mpy.c
new file mode 100644
index 000000000..57cffd0ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/mpy.c
@@ -0,0 +1,15 @@
+/* Public domain. */
+extern int __mulhi3 (int, int);
+
+int
+__mulhi3 (int x, int y)
+{
+ volatile int rv = 0;
+
+ while (y > 0)
+ {
+ rv += x;
+ y --;
+ }
+ return rv;
+}
diff --git a/gcc-4.9/libgcc/config/msp430/msp430-divmod.h b/gcc-4.9/libgcc/config/msp430/msp430-divmod.h
new file mode 100644
index 000000000..8e482a661
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/msp430-divmod.h
@@ -0,0 +1,117 @@
+/* libgcc routines for MSP430
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+UINT_TYPE C3(udivmod,NAME_MODE,4) (UINT_TYPE, UINT_TYPE, word_type);
+SINT_TYPE C3(__div,NAME_MODE,3) (SINT_TYPE, SINT_TYPE);
+SINT_TYPE C3(__mod,NAME_MODE,3) (SINT_TYPE, SINT_TYPE);
+UINT_TYPE C3(__udiv,NAME_MODE,3) (UINT_TYPE, UINT_TYPE);
+UINT_TYPE C3(__umod,NAME_MODE,3) (UINT_TYPE, UINT_TYPE);
+
+UINT_TYPE
+C3(udivmod,NAME_MODE,4) (UINT_TYPE num, UINT_TYPE den, word_type modwanted)
+{
+ UINT_TYPE bit = 1;
+ UINT_TYPE res = 0;
+
+ while (den < num && bit && !(den & (1L << BITS_MINUS_1)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
+
+SINT_TYPE
+C3(__div,NAME_MODE,3) (SINT_TYPE a, SINT_TYPE b)
+{
+ word_type neg = 0;
+ SINT_TYPE res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = C3(udivmod,NAME_MODE,4) (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+SINT_TYPE
+C3(__mod,NAME_MODE,3) (SINT_TYPE a, SINT_TYPE b)
+{
+ word_type neg = 0;
+ SINT_TYPE res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = C3(udivmod,NAME_MODE,4) (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+UINT_TYPE
+C3(__udiv,NAME_MODE,3) (UINT_TYPE a, UINT_TYPE b)
+{
+ return C3(udivmod,NAME_MODE,4) (a, b, 0);
+}
+
+UINT_TYPE
+C3(__umod,NAME_MODE,3) (UINT_TYPE a, UINT_TYPE b)
+{
+ return C3(udivmod,NAME_MODE,4) (a, b, 1);
+}
diff --git a/gcc-4.9/libgcc/config/msp430/msp430-mul.h b/gcc-4.9/libgcc/config/msp430/msp430-mul.h
new file mode 100644
index 000000000..29e72a8a7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/msp430-mul.h
@@ -0,0 +1,42 @@
+/* libgcc routines for RL78
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+UINT_TYPE C3(__mul,NAME_MODE,3) (UINT_TYPE, UINT_TYPE);
+UINT_TYPE
+C3(__mul,NAME_MODE,3) (UINT_TYPE a, UINT_TYPE b)
+{
+ UINT_TYPE rv = 0;
+
+ char bit;
+
+ for (bit=0; b && bit<sizeof(UINT_TYPE)*8; bit++)
+ {
+ if (b & 1)
+ rv += a;
+ a <<= 1;
+ b >>= 1;
+ }
+ return rv;
+}
diff --git a/gcc-4.9/libgcc/config/msp430/slli.S b/gcc-4.9/libgcc/config/msp430/slli.S
new file mode 100644
index 000000000..98210fb87
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/slli.S
@@ -0,0 +1,108 @@
+; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+ .text
+
+/* Logical Left Shift - R12 -> R12 */
+
+ .macro _slli n
+ .global __mspabi_slli_\n
+__mspabi_slli_\n:
+ ADD.W R12,R12
+ .endm
+
+ _slli 15
+ _slli 14
+ _slli 13
+ _slli 12
+ _slli 11
+ _slli 10
+ _slli 9
+ _slli 8
+ _slli 7
+ _slli 6
+ _slli 5
+ _slli 4
+ _slli 3
+ _slli 2
+ _slli 1
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+1: ADD.W #-1,R13
+ ADD.W R12,R12
+ .global __mspabi_slli
+__mspabi_slli:
+ CMP #0,R13
+ JNZ 1b
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+/* Logical Left Shift - R12:R13 -> R12:R13 */
+
+ .macro _slll n
+ .global __mspabi_slll_\n
+__mspabi_slll_\n:
+ ADD.W R12,R12
+ ADDC.W R13,R13
+ .endm
+
+ _slll 15
+ _slll 14
+ _slll 13
+ _slll 12
+ _slll 11
+ _slll 10
+ _slll 9
+ _slll 8
+ _slll 7
+ _slll 6
+ _slll 5
+ _slll 4
+ _slll 3
+ _slll 2
+ _slll 1
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+1: ADD.W #-1,R14
+ ADD.W R12,R12
+ ADDC.W R13,R13
+ .global __mspabi_slll
+__mspabi_slll:
+ CMP #0,R14
+ JNZ 1b
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
diff --git a/gcc-4.9/libgcc/config/msp430/srai.S b/gcc-4.9/libgcc/config/msp430/srai.S
new file mode 100644
index 000000000..3a7bf52ba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/srai.S
@@ -0,0 +1,106 @@
+; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+ .text
+
+ .macro _srai n
+ .global __mspabi_srai_\n
+__mspabi_srai_\n:
+ RRA.W R12
+ .endm
+
+/* Logical Right Shift - R12 -> R12 */
+ _srai 15
+ _srai 14
+ _srai 13
+ _srai 12
+ _srai 11
+ _srai 10
+ _srai 9
+ _srai 8
+ _srai 7
+ _srai 6
+ _srai 5
+ _srai 4
+ _srai 3
+ _srai 2
+ _srai 1
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+1: ADD.W #-1,R13
+ RRA.W R12,R12
+ .global __mspabi_srai
+__mspabi_srai:
+ CMP #0,R13
+ JNZ 1b
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+/* Logical Right Shift - R12:R13 -> R12:R13 */
+
+ .macro _sral n
+ .global __mspabi_sral_\n
+__mspabi_sral_\n:
+ RRA.W R13
+ RRC.W R12
+ .endm
+
+ _sral 15
+ _sral 14
+ _sral 13
+ _sral 12
+ _sral 11
+ _sral 10
+ _sral 9
+ _sral 8
+ _sral 7
+ _sral 6
+ _sral 5
+ _sral 4
+ _sral 3
+ _sral 2
+ _sral 1
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+1: ADD.W #-1,R14
+ RRA.W R13
+ RRC.W R12
+ .global __mspabi_sral
+__mspabi_sral:
+ CMP #0,R14
+ JNZ 1b
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
diff --git a/gcc-4.9/libgcc/config/msp430/srli.S b/gcc-4.9/libgcc/config/msp430/srli.S
new file mode 100644
index 000000000..9455f5948
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/srli.S
@@ -0,0 +1,110 @@
+; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+ .text
+
+ .macro _srli n
+ .global __mspabi_srli_\n
+__mspabi_srli_\n:
+ CLRC
+ RRC.W R12
+ .endm
+
+/* Logical Right Shift - R12 -> R12 */
+ _srli 15
+ _srli 14
+ _srli 13
+ _srli 12
+ _srli 11
+ _srli 10
+ _srli 9
+ _srli 8
+ _srli 7
+ _srli 6
+ _srli 5
+ _srli 4
+ _srli 3
+ _srli 2
+ _srli 1
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+1: ADD.W #-1,R13
+ CLRC
+ RRC.W R12,R12
+ .global __mspabi_srli
+__mspabi_srli:
+ CMP #0,R13
+ JNZ 1b
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+/* Logical Right Shift - R12:R13 -> R12:R13 */
+
+ .macro _srll n
+ .global __mspabi_srll_\n
+__mspabi_srll_\n:
+ CLRC
+ RRC.W R13
+ RRC.W R12
+ .endm
+
+ _srll 15
+ _srll 14
+ _srll 13
+ _srll 12
+ _srll 11
+ _srll 10
+ _srll 9
+ _srll 8
+ _srll 7
+ _srll 6
+ _srll 5
+ _srll 4
+ _srll 3
+ _srll 2
+ _srll 1
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
+
+1: ADD.W #-1,R14
+ CLRC
+ RRC.W R13
+ RRC.W R12
+ .global __mspabi_srll
+__mspabi_srll:
+ CMP #0,R14
+ JNZ 1b
+#ifdef __MSP430X_LARGE__
+ RETA
+#else
+ RET
+#endif
diff --git a/gcc-4.9/libgcc/config/msp430/t-msp430 b/gcc-4.9/libgcc/config/msp430/t-msp430
new file mode 100644
index 000000000..7a7b68007
--- /dev/null
+++ b/gcc-4.9/libgcc/config/msp430/t-msp430
@@ -0,0 +1,49 @@
+# Makefile fragment for building LIBGCC for the TI MSP430 processor.
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Note - we have separate versions of the lib2div<mode> files
+# as the functions are quite large and we do not want to pull
+# in unneeded division routines.
+
+LIB2ADD = \
+ $(srcdir)/config/msp430/lib2divQI.c \
+ $(srcdir)/config/msp430/lib2divHI.c \
+ $(srcdir)/config/msp430/lib2divSI.c \
+ $(srcdir)/config/msp430/lib2bitcountHI.c \
+ $(srcdir)/config/msp430/lib2mul.c \
+ $(srcdir)/config/msp430/lib2shift.c \
+ $(srcdir)/config/msp430/epilogue.S \
+ $(srcdir)/config/msp430/mpy.c \
+ $(srcdir)/config/msp430/slli.S \
+ $(srcdir)/config/msp430/srai.S \
+ $(srcdir)/config/msp430/srli.S \
+ $(srcdir)/config/msp430/cmpsi2.S \
+ $(srcdir)/config/msp430/lib2hw_mul.S \
+ $(srcdir)/config/msp430/floatunhisf.c \
+ $(srcdir)/config/msp430/floatunhidf.c \
+ $(srcdir)/config/msp430/floathidf.c \
+ $(srcdir)/config/msp430/floathisf.c \
+ $(srcdir)/config/msp430/cmpd.c
+
+HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections
+
+# Local Variables:
+# mode: Makefile
+# End:
diff --git a/gcc-4.9/libgcc/config/nds32/crtzero.S b/gcc-4.9/libgcc/config/nds32/crtzero.S
new file mode 100644
index 000000000..7ffd347ed
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/crtzero.S
@@ -0,0 +1,103 @@
+/* The startup code sample of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+!!==============================================================================
+!!
+!! crtzero.S
+!!
+!! This is JUST A SAMPLE of nds32 startup code !!
+!! You can refer this content and implement
+!! the actual one in newlib/mculib.
+!!
+!!==============================================================================
+
+!!------------------------------------------------------------------------------
+!! Jump to start up code
+!!------------------------------------------------------------------------------
+ .section .nds32_init, "ax"
+ j _start
+
+!!------------------------------------------------------------------------------
+!! Startup code implementation
+!!------------------------------------------------------------------------------
+ .section .text
+ .global _start
+ .weak _SDA_BASE_
+ .weak _FP_BASE_
+ .align 2
+ .func _start
+ .type _start, @function
+_start:
+.L_fp_gp_lp_init:
+ la $fp, _FP_BASE_ ! init $fp
+ la $gp, _SDA_BASE_ ! init $gp for small data access
+ movi $lp, 0 ! init $lp
+
+.L_stack_init:
+ la $sp, _stack ! init $sp
+ movi $r0, -8 ! align $sp to 8-byte (use 0xfffffff8)
+ and $sp, $sp, $r0 ! align $sp to 8-byte (filter out lower 3-bit)
+
+.L_bss_init:
+ ! clear BSS, this process can be 4 time faster if data is 4 byte aligned
+ ! if so, use swi.p instead of sbi.p
+ ! the related stuff are defined in linker script
+ la $r0, _edata ! get the starting addr of bss
+ la $r2, _end ! get ending addr of bss
+ beq $r0, $r2, .L_call_main ! if no bss just do nothing
+ movi $r1, 0 ! should be cleared to 0
+.L_clear_bss:
+ sbi.p $r1, [$r0], 1 ! Set 0 to bss
+ bne $r0, $r2, .L_clear_bss ! Still bytes left to set
+
+!.L_stack_heap_check:
+! la $r0, _end ! init heap_end
+! s.w $r0, heap_end ! save it
+
+
+!.L_init_argc_argv:
+! ! argc/argv initialization if necessary; default implementation is in crt1.o
+! la $r9, _arg_init ! load address of _arg_init?
+! beqz $r9, .L4 ! has _arg_init? no, go check main()
+! addi $sp, $sp, -512 ! allocate space for command line + arguments
+! move $r6, $sp ! r6 = buffer addr of cmd line
+! move $r0, $r6 ! r0 = buffer addr of cmd line
+! syscall 6002 ! get cmd line
+! move $r0, $r6 ! r0 = buffer addr of cmd line
+! addi $r1, $r6, 256 ! r1 = argv
+! jral $r9 ! init argc/argv
+! addi $r1, $r6, 256 ! r1 = argv
+
+.L_call_main:
+ ! call main() if main() is provided
+ la $r15, main ! load address of main
+ jral $r15 ! call main
+
+.L_terminate_program:
+ syscall 0x1 ! use syscall 0x1 to terminate program
+ .size _start, .-_start
+ .end
+
+!! ------------------------------------------------------------------------
diff --git a/gcc-4.9/libgcc/config/nds32/initfini.c b/gcc-4.9/libgcc/config/nds32/initfini.c
new file mode 100644
index 000000000..7d84fee22
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/initfini.c
@@ -0,0 +1,159 @@
+/* .init/.fini section handling + C++ global constructor/destructor
+ handling of Andes NDS32 cpu for GNU compiler.
+ This file is based on crtstuff.c, sol2-crti.asm, sol2-crtn.asm.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Declare a pointer to void function type. */
+typedef void (*func_ptr) (void);
+
+#ifdef CRT_BEGIN
+
+/* NOTE: In order to be able to support SVR4 shared libraries, we arrange
+ to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
+ __DTOR_END__ } per root executable and also one set of these symbols
+ per shared library. So in any given whole process image, we may have
+ multiple definitions of each of these symbols. In order to prevent
+ these definitions from conflicting with one another, and in order to
+ ensure that the proper lists are used for the initialization/finalization
+ of each individual shared library (respectively), we give these symbols
+ only internal (i.e. `static') linkage, and we also make it a point to
+ refer to only the __CTOR_END__ symbol in crtfini.o and the __DTOR_LIST__
+ symbol in crtinit.o, where they are defined. */
+
+static func_ptr __CTOR_LIST__[1] __attribute__ ((section (".ctors")))
+ = { (func_ptr) (-1) };
+
+static func_ptr __DTOR_LIST__[1] __attribute__ ((section (".dtors")))
+ = { (func_ptr) (-1) };
+
+/* Run all the global destructors on exit from the program. */
+
+/* Some systems place the number of pointers in the first word of the
+ table. On SVR4 however, that word is -1. In all cases, the table is
+ null-terminated. On SVR4, we start from the beginning of the list and
+ invoke each per-compilation-unit destructor routine in order
+ until we find that null.
+
+ Note that this function MUST be static. There will be one of these
+ functions in each root executable and one in each shared library, but
+ although they all have the same code, each one is unique in that it
+ refers to one particular associated `__DTOR_LIST__' which belongs to the
+ same particular root executable or shared library file. */
+
+static void __do_global_dtors (void)
+asm ("__do_global_dtors") __attribute__ ((section (".text")));
+
+static void
+__do_global_dtors (void)
+{
+ func_ptr *p;
+ for (p = __DTOR_LIST__ + 1; *p; p++)
+ (*p) ();
+}
+
+/* .init section start.
+ This must appear at the start of the .init section. */
+
+asm ("\n\
+ .section .init\n\
+ .global _init\n\
+ .type _init, @function\n\
+_init:\n\
+ ! 1. store $fp\n\
+ ! 2. adjust $fp by $sp\n\
+ ! 3. adjust $sp\n\
+");
+
+/* .fini section start.
+ This must appear at the start of the .fini section. */
+
+asm ("\n\
+ .section .fini\n\
+ .global _fini\n\
+ .type _fini, @function\n\
+_fini:\n\
+ ! 1. store $fp\n\
+ ! 2. adjust $fp by $sp\n\
+ ! 3. adjust $sp\n\
+ ! 4. call __do_global_dtors\n\
+ j __do_global_dtors\n\
+");
+
+#endif /* CRT_BEGIN */
+
+#ifdef CRT_END
+
+/* Define __dso_handle which would be needed for C++ library.
+ Since our elf-toolchain only builds programs with static link,
+ we can directly define 'void *__dso_handle = 0'. */
+void *__dso_handle = 0;
+
+/* Put a word containing zero at the end of each of our two lists of function
+ addresses. Note that the words defined here go into the .ctors and .dtors
+ sections of the crtend.o file, and since that file is always linked in
+ last, these words naturally end up at the very ends of the two lists
+ contained in these two sections. */
+
+static func_ptr __CTOR_END__[1] __attribute__ ((section (".ctors")))
+ = { (func_ptr) 0 };
+
+static func_ptr __DTOR_END__[1] __attribute__ ((section (".dtors")))
+ = { (func_ptr) 0 };
+
+/* Run all global constructors for the program.
+ Note that they are run in reverse order. */
+
+static void __do_global_ctors (void)
+asm ("__do_global_ctors") __attribute__ ((section (".text")));
+
+static void
+__do_global_ctors (void)
+{
+ func_ptr *p;
+ for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
+ (*p) ();
+}
+
+/* .init section end.
+ This must live at the end of the .init section. */
+
+asm ("\n\
+ .section .init\n\
+ ! 1. call __do_global_ctors\n\
+ ! 2. adjust back $sp\n\
+ ! 3. restore $fp\n\
+ j __do_global_ctors\n\
+");
+
+/* .fini section end.
+ This must live at the end of the .fini section. */
+
+asm ("\n\
+ .section .fini\n\
+ ! 1. adjust back $sp\n\
+ ! 2. restore $fp\n\
+");
+
+#endif /* CRT_END */
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/adj_intr_lvl.inc b/gcc-4.9/libgcc/config/nds32/isr-library/adj_intr_lvl.inc
new file mode 100644
index 000000000..b264f9bf2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/adj_intr_lvl.inc
@@ -0,0 +1,38 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro ADJ_INTR_LVL
+#if defined(NDS32_NESTED) /* Nested handler. */
+ mfsr $r3, $PSW
+ addi $r3, $r3, #-0x1
+ mtsr $r3, $PSW
+#elif defined(NDS32_NESTED_READY) /* Nested ready handler. */
+ /* Save ipc and ipsw and lower INT level. */
+ mfsr $r3, $PSW
+ addi $r3, $r3, #-0x2
+ mtsr $r3, $PSW
+#else /* Not nested handler. */
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/excp_isr.S b/gcc-4.9/libgcc/config/nds32/isr-library/excp_isr.S
new file mode 100644
index 000000000..c9da7325e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/excp_isr.S
@@ -0,0 +1,132 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "save_mac_regs.inc"
+#include "save_fpu_regs.inc"
+#include "save_fpu_regs_00.inc"
+#include "save_fpu_regs_01.inc"
+#include "save_fpu_regs_02.inc"
+#include "save_fpu_regs_03.inc"
+#include "save_all.inc"
+#include "save_partial.inc"
+#include "adj_intr_lvl.inc"
+#include "restore_mac_regs.inc"
+#include "restore_fpu_regs_00.inc"
+#include "restore_fpu_regs_01.inc"
+#include "restore_fpu_regs_02.inc"
+#include "restore_fpu_regs_03.inc"
+#include "restore_fpu_regs.inc"
+#include "restore_all.inc"
+#include "restore_partial.inc"
+ .section .nds32_isr, "ax" /* Put it in the section of 1st level handler. */
+ .align 1
+/*
+ First Level Handlers
+ 1. First Level Handlers are invokded in vector section via jump instruction
+ with specific names for different configurations.
+ 2. Naming Format: _nds32_e_SR_NT for exception handlers.
+ _nds32_i_SR_NT for interrupt handlers.
+ 2.1 All upper case letters are replaced with specific lower case letters encodings.
+ 2.2 SR: Saved Registers
+ sa: Save All regs (context)
+ ps: Partial Save (all caller-saved regs)
+ 2.3 NT: Nested Type
+ ns: nested
+ nn: not nested
+ nr: nested ready
+*/
+
+/*
+ This is original 16-byte vector size version.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .globl _nds32_e_sa_ns
+ .type _nds32_e_sa_ns, @function
+_nds32_e_sa_ns:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_e_sa_nr
+ .type _nds32_e_sa_nr, @function
+_nds32_e_sa_nr:
+#else /* Not nested handler. */
+ .globl _nds32_e_sa_nn
+ .type _nds32_e_sa_nn, @function
+_nds32_e_sa_nn:
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .globl _nds32_e_ps_ns
+ .type _nds32_e_ps_ns, @function
+_nds32_e_ps_ns:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_e_ps_nr
+ .type _nds32_e_ps_nr, @function
+_nds32_e_ps_nr:
+#else /* Not nested handler. */
+ .globl _nds32_e_ps_nn
+ .type _nds32_e_ps_nn, @function
+_nds32_e_ps_nn:
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
+
+/*
+ This is 16-byte vector size version.
+ The vector id was restored into $r0 in vector by compiler.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+ SAVE_ALL
+#else
+ SAVE_PARTIAL
+#endif
+ /* Prepare to call 2nd level handler. */
+ la $r2, _nds32_jmptbl_00
+ lw $r2, [$r2 + $r0 << #2]
+ ADJ_INTR_LVL /* Adjust INTR level. $r3 is clobbered. */
+ jral $r2
+ /* Restore used registers. */
+#ifdef NDS32_SAVE_ALL_REGS
+ RESTORE_ALL
+#else
+ RESTORE_PARTIAL
+#endif
+ iret
+
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .size _nds32_e_sa_ns, .-_nds32_e_sa_ns
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_e_sa_nr, .-_nds32_e_sa_nr
+#else /* Not nested handler. */
+ .size _nds32_e_sa_nn, .-_nds32_e_sa_nn
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .size _nds32_e_ps_ns, .-_nds32_e_ps_ns
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_e_ps_nr, .-_nds32_e_ps_nr
+#else /* Not nested handler. */
+ .size _nds32_e_ps_nn, .-_nds32_e_ps_nn
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/excp_isr_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/excp_isr_4b.S
new file mode 100644
index 000000000..12074488f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/excp_isr_4b.S
@@ -0,0 +1,133 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "save_mac_regs.inc"
+#include "save_fpu_regs.inc"
+#include "save_fpu_regs_00.inc"
+#include "save_fpu_regs_01.inc"
+#include "save_fpu_regs_02.inc"
+#include "save_fpu_regs_03.inc"
+#include "save_all.inc"
+#include "save_partial.inc"
+#include "adj_intr_lvl.inc"
+#include "restore_mac_regs.inc"
+#include "restore_fpu_regs_00.inc"
+#include "restore_fpu_regs_01.inc"
+#include "restore_fpu_regs_02.inc"
+#include "restore_fpu_regs_03.inc"
+#include "restore_fpu_regs.inc"
+#include "restore_all.inc"
+#include "restore_partial.inc"
+ .section .nds32_isr, "ax" /* Put it in the section of 1st level handler. */
+ .align 1
+/*
+ First Level Handlers
+ 1. First Level Handlers are invokded in vector section via jump instruction
+ with specific names for different configurations.
+ 2. Naming Format: _nds32_e_SR_NT for exception handlers.
+ _nds32_i_SR_NT for interrupt handlers.
+ 2.1 All upper case letters are replaced with specific lower case letters encodings.
+ 2.2 SR: Saved Registers
+ sa: Save All regs (context)
+ ps: Partial Save (all caller-saved regs)
+ 2.3 NT: Nested Type
+ ns: nested
+ nn: not nested
+ nr: nested ready
+*/
+
+/*
+ This is 4-byte vector size version.
+ The "_4b" postfix was added for 4-byte version symbol.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .globl _nds32_e_sa_ns_4b
+ .type _nds32_e_sa_ns_4b, @function
+_nds32_e_sa_ns_4b:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_e_sa_nr_4b
+ .type _nds32_e_sa_nr_4b, @function
+_nds32_e_sa_nr_4b:
+#else /* Not nested handler. */
+ .globl _nds32_e_sa_nn_4b
+ .type _nds32_e_sa_nn_4b, @function
+_nds32_e_sa_nn_4b:
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .globl _nds32_e_ps_ns_4b
+ .type _nds32_e_ps_ns_4b, @function
+_nds32_e_ps_ns_4b:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_e_ps_nr_4b
+ .type _nds32_e_ps_nr_4b, @function
+_nds32_e_ps_nr_4b:
+#else /* Not nested handler. */
+ .globl _nds32_e_ps_nn_4b
+ .type _nds32_e_ps_nn_4b, @function
+_nds32_e_ps_nn_4b:
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
+
+/*
+ This is 4-byte vector size version.
+ The vector id was restored into $lp in vector by compiler.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+ SAVE_ALL_4B
+#else
+ SAVE_PARTIAL_4B
+#endif
+ /* Prepare to call 2nd level handler. */
+ la $r2, _nds32_jmptbl_00
+ lw $r2, [$r2 + $r0 << #2]
+ ADJ_INTR_LVL /* Adjust INTR level. $r3 is clobbered. */
+ jral $r2
+ /* Restore used registers. */
+#ifdef NDS32_SAVE_ALL_REGS
+ RESTORE_ALL
+#else
+ RESTORE_PARTIAL
+#endif
+ iret
+
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .size _nds32_e_sa_ns_4b, .-_nds32_e_sa_ns_4b
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_e_sa_nr_4b, .-_nds32_e_sa_nr_4b
+#else /* Not nested handler. */
+ .size _nds32_e_sa_nn_4b, .-_nds32_e_sa_nn_4b
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .size _nds32_e_ps_ns_4b, .-_nds32_e_ps_ns_4b
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_e_ps_nr_4b, .-_nds32_e_ps_nr_4b
+#else /* Not nested handler. */
+ .size _nds32_e_ps_nn_4b, .-_nds32_e_ps_nn_4b
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/intr_isr.S b/gcc-4.9/libgcc/config/nds32/isr-library/intr_isr.S
new file mode 100644
index 000000000..fe7433725
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/intr_isr.S
@@ -0,0 +1,132 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "save_mac_regs.inc"
+#include "save_fpu_regs.inc"
+#include "save_fpu_regs_00.inc"
+#include "save_fpu_regs_01.inc"
+#include "save_fpu_regs_02.inc"
+#include "save_fpu_regs_03.inc"
+#include "save_all.inc"
+#include "save_partial.inc"
+#include "adj_intr_lvl.inc"
+#include "restore_mac_regs.inc"
+#include "restore_fpu_regs_00.inc"
+#include "restore_fpu_regs_01.inc"
+#include "restore_fpu_regs_02.inc"
+#include "restore_fpu_regs_03.inc"
+#include "restore_fpu_regs.inc"
+#include "restore_all.inc"
+#include "restore_partial.inc"
+ .section .nds32_isr, "ax" /* Put it in the section of 1st level handler. */
+ .align 1
+/*
+ First Level Handlers
+ 1. First Level Handlers are invokded in vector section via jump instruction
+ with specific names for different configurations.
+ 2. Naming Format: _nds32_e_SR_NT for exception handlers.
+ _nds32_i_SR_NT for interrupt handlers.
+ 2.1 All upper case letters are replaced with specific lower case letters encodings.
+ 2.2 SR: Saved Registers
+ sa: Save All regs (context)
+ ps: Partial Save (all caller-saved regs)
+ 2.3 NT: Nested Type
+ ns: nested
+ nn: not nested
+ nr: nested ready
+*/
+
+/*
+ This is original 16-byte vector size version.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .globl _nds32_i_sa_ns
+ .type _nds32_i_sa_ns, @function
+_nds32_i_sa_ns:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_i_sa_nr
+ .type _nds32_i_sa_nr, @function
+_nds32_i_sa_nr:
+#else /* Not nested handler. */
+ .globl _nds32_i_sa_nn
+ .type _nds32_i_sa_nn, @function
+_nds32_i_sa_nn:
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .globl _nds32_i_ps_ns
+ .type _nds32_i_ps_ns, @function
+_nds32_i_ps_ns:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_i_ps_nr
+ .type _nds32_i_ps_nr, @function
+_nds32_i_ps_nr:
+#else /* Not nested handler. */
+ .globl _nds32_i_ps_nn
+ .type _nds32_i_ps_nn, @function
+_nds32_i_ps_nn:
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
+
+/*
+ This is 16-byte vector size version.
+ The vector id was restored into $r0 in vector by compiler.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+ SAVE_ALL
+#else
+ SAVE_PARTIAL
+#endif
+ /* Prepare to call 2nd level handler. */
+ la $r2, _nds32_jmptbl_09 /* For zero-based vcetor id. */
+ lw $r2, [$r2 + $r0 << #2]
+ ADJ_INTR_LVL /* Adjust INTR level. $r3 is clobbered. */
+ jral $r2
+ /* Restore used registers. */
+#ifdef NDS32_SAVE_ALL_REGS
+ RESTORE_ALL
+#else
+ RESTORE_PARTIAL
+#endif
+ iret
+
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .size _nds32_i_sa_ns, .-_nds32_i_sa_ns
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_i_sa_nr, .-_nds32_i_sa_nr
+#else /* Not nested handler. */
+ .size _nds32_i_sa_nn, .-_nds32_i_sa_nn
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .size _nds32_i_ps_ns, .-_nds32_i_ps_ns
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_i_ps_nr, .-_nds32_i_ps_nr
+#else /* Not nested handler. */
+ .size _nds32_i_ps_nn, .-_nds32_i_ps_nn
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/intr_isr_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/intr_isr_4b.S
new file mode 100644
index 000000000..8fc6f2bf4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/intr_isr_4b.S
@@ -0,0 +1,134 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "save_mac_regs.inc"
+#include "save_fpu_regs.inc"
+#include "save_fpu_regs_00.inc"
+#include "save_fpu_regs_01.inc"
+#include "save_fpu_regs_02.inc"
+#include "save_fpu_regs_03.inc"
+#include "save_all.inc"
+#include "save_partial.inc"
+#include "adj_intr_lvl.inc"
+#include "restore_mac_regs.inc"
+#include "restore_fpu_regs_00.inc"
+#include "restore_fpu_regs_01.inc"
+#include "restore_fpu_regs_02.inc"
+#include "restore_fpu_regs_03.inc"
+#include "restore_fpu_regs.inc"
+#include "restore_all.inc"
+#include "restore_partial.inc"
+ .section .nds32_isr, "ax" /* Put it in the section of 1st level handler. */
+ .align 1
+/*
+ First Level Handlers
+ 1. First Level Handlers are invokded in vector section via jump instruction
+ with specific names for different configurations.
+ 2. Naming Format: _nds32_e_SR_NT for exception handlers.
+ _nds32_i_SR_NT for interrupt handlers.
+ 2.1 All upper case letters are replaced with specific lower case letters encodings.
+ 2.2 SR: Saved Registers
+ sa: Save All regs (context)
+ ps: Partial Save (all caller-saved regs)
+ 2.3 NT: Nested Type
+ ns: nested
+ nn: not nested
+ nr: nested ready
+*/
+
+/*
+ This is 4-byte vector size version.
+ The "_4b" postfix was added for 4-byte version symbol.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .globl _nds32_i_sa_ns_4b
+ .type _nds32_i_sa_ns_4b, @function
+_nds32_i_sa_ns_4b:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_i_sa_nr_4b
+ .type _nds32_i_sa_nr_4b, @function
+_nds32_i_sa_nr_4b:
+#else /* Not nested handler. */
+ .globl _nds32_i_sa_nn_4b
+ .type _nds32_i_sa_nn_4b, @function
+_nds32_i_sa_nn_4b:
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .globl _nds32_i_ps_ns_4b
+ .type _nds32_i_ps_ns_4b, @function
+_nds32_i_ps_ns_4b:
+#elif defined(NDS32_NESTED_READY)
+ .globl _nds32_i_ps_nr_4b
+ .type _nds32_i_ps_nr_4b, @function
+_nds32_i_ps_nr_4b:
+#else /* Not nested handler. */
+ .globl _nds32_i_ps_nn_4b
+ .type _nds32_i_ps_nn_4b, @function
+_nds32_i_ps_nn_4b:
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
+
+/*
+ This is 4-byte vector size version.
+ The vector id was restored into $lp in vector by compiler.
+*/
+#ifdef NDS32_SAVE_ALL_REGS
+ SAVE_ALL_4B
+#else
+ SAVE_PARTIAL_4B
+#endif
+ /* Prepare to call 2nd level handler. */
+ la $r2, _nds32_jmptbl_00
+ lw $r2, [$r2 + $r0 << #2]
+ addi $r0, $r0, #-9 /* Make interrput vector id zero-based. */
+ ADJ_INTR_LVL /* Adjust INTR level. $r3 is clobbered. */
+ jral $r2
+ /* Restore used registers. */
+#ifdef NDS32_SAVE_ALL_REGS
+ RESTORE_ALL
+#else
+ RESTORE_PARTIAL
+#endif
+ iret
+
+#ifdef NDS32_SAVE_ALL_REGS
+#if defined(NDS32_NESTED)
+ .size _nds32_i_sa_ns_4b, .-_nds32_i_sa_ns_4b
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_i_sa_nr_4b, .-_nds32_i_sa_nr_4b
+#else /* Not nested handler. */
+ .size _nds32_i_sa_nn_4b, .-_nds32_i_sa_nn_4b
+#endif /* endif for Nest Type */
+#else /* not NDS32_SAVE_ALL_REGS */
+#if defined(NDS32_NESTED)
+ .size _nds32_i_ps_ns_4b, .-_nds32_i_ps_ns_4b
+#elif defined(NDS32_NESTED_READY)
+ .size _nds32_i_ps_nr_4b, .-_nds32_i_ps_nr_4b
+#else /* Not nested handler. */
+ .size _nds32_i_ps_nn_4b, .-_nds32_i_ps_nn_4b
+#endif /* endif for Nest Type */
+#endif /* not NDS32_SAVE_ALL_REGS */
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid00.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid00.S
new file mode 100644
index 000000000..109369eff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid00.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.00, "a"
+ .align 2
+ .weak _nds32_jmptbl_00
+ .type _nds32_jmptbl_00, @object
+_nds32_jmptbl_00:
+ .word 0
+ .size _nds32_jmptbl_00, .-_nds32_jmptbl_00
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid01.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid01.S
new file mode 100644
index 000000000..49fd97657
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid01.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.01, "a"
+ .align 2
+ .weak _nds32_jmptbl_01
+ .type _nds32_jmptbl_01, @object
+_nds32_jmptbl_01:
+ .word 0
+ .size _nds32_jmptbl_01, .-_nds32_jmptbl_01
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid02.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid02.S
new file mode 100644
index 000000000..61f9d5e9b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid02.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.02, "a"
+ .align 2
+ .weak _nds32_jmptbl_02
+ .type _nds32_jmptbl_02, @object
+_nds32_jmptbl_02:
+ .word 0
+ .size _nds32_jmptbl_02, .-_nds32_jmptbl_02
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid03.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid03.S
new file mode 100644
index 000000000..063a728f6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid03.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.03, "a"
+ .align 2
+ .weak _nds32_jmptbl_03
+ .type _nds32_jmptbl_03, @object
+_nds32_jmptbl_03:
+ .word 0
+ .size _nds32_jmptbl_03, .-_nds32_jmptbl_03
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid04.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid04.S
new file mode 100644
index 000000000..58c33168e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid04.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.04, "a"
+ .align 2
+ .weak _nds32_jmptbl_04
+ .type _nds32_jmptbl_04, @object
+_nds32_jmptbl_04:
+ .word 0
+ .size _nds32_jmptbl_04, .-_nds32_jmptbl_04
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid05.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid05.S
new file mode 100644
index 000000000..4c83e80b1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid05.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.05, "a"
+ .align 2
+ .weak _nds32_jmptbl_05
+ .type _nds32_jmptbl_05, @object
+_nds32_jmptbl_05:
+ .word 0
+ .size _nds32_jmptbl_05, .-_nds32_jmptbl_05
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid06.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid06.S
new file mode 100644
index 000000000..507d5eaac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid06.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.06, "a"
+ .align 2
+ .weak _nds32_jmptbl_06
+ .type _nds32_jmptbl_06, @object
+_nds32_jmptbl_06:
+ .word 0
+ .size _nds32_jmptbl_06, .-_nds32_jmptbl_06
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid07.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid07.S
new file mode 100644
index 000000000..22983e462
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid07.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.07, "a"
+ .align 2
+ .weak _nds32_jmptbl_07
+ .type _nds32_jmptbl_07, @object
+_nds32_jmptbl_07:
+ .word 0
+ .size _nds32_jmptbl_07, .-_nds32_jmptbl_07
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid08.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid08.S
new file mode 100644
index 000000000..0b17ea5b8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid08.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.08, "a"
+ .align 2
+ .weak _nds32_jmptbl_08
+ .type _nds32_jmptbl_08, @object
+_nds32_jmptbl_08:
+ .word 0
+ .size _nds32_jmptbl_08, .-_nds32_jmptbl_08
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid09.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid09.S
new file mode 100644
index 000000000..b81660238
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid09.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.09, "a"
+ .align 2
+ .weak _nds32_jmptbl_09
+ .type _nds32_jmptbl_09, @object
+_nds32_jmptbl_09:
+ .word 0
+ .size _nds32_jmptbl_09, .-_nds32_jmptbl_09
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid10.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid10.S
new file mode 100644
index 000000000..0927e6235
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid10.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.10, "a"
+ .align 2
+ .weak _nds32_jmptbl_10
+ .type _nds32_jmptbl_10, @object
+_nds32_jmptbl_10:
+ .word 0
+ .size _nds32_jmptbl_10, .-_nds32_jmptbl_10
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid11.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid11.S
new file mode 100644
index 000000000..e3a9b24d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid11.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.11, "a"
+ .align 2
+ .weak _nds32_jmptbl_11
+ .type _nds32_jmptbl_11, @object
+_nds32_jmptbl_11:
+ .word 0
+ .size _nds32_jmptbl_11, .-_nds32_jmptbl_11
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid12.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid12.S
new file mode 100644
index 000000000..0fbb5304e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid12.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.12, "a"
+ .align 2
+ .weak _nds32_jmptbl_12
+ .type _nds32_jmptbl_12, @object
+_nds32_jmptbl_12:
+ .word 0
+ .size _nds32_jmptbl_12, .-_nds32_jmptbl_12
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid13.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid13.S
new file mode 100644
index 000000000..a4a22f3d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid13.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.13, "a"
+ .align 2
+ .weak _nds32_jmptbl_13
+ .type _nds32_jmptbl_13, @object
+_nds32_jmptbl_13:
+ .word 0
+ .size _nds32_jmptbl_13, .-_nds32_jmptbl_13
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid14.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid14.S
new file mode 100644
index 000000000..be5be0008
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid14.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.14, "a"
+ .align 2
+ .weak _nds32_jmptbl_14
+ .type _nds32_jmptbl_14, @object
+_nds32_jmptbl_14:
+ .word 0
+ .size _nds32_jmptbl_14, .-_nds32_jmptbl_14
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid15.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid15.S
new file mode 100644
index 000000000..dbf4f8aa2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid15.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.15, "a"
+ .align 2
+ .weak _nds32_jmptbl_15
+ .type _nds32_jmptbl_15, @object
+_nds32_jmptbl_15:
+ .word 0
+ .size _nds32_jmptbl_15, .-_nds32_jmptbl_15
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid16.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid16.S
new file mode 100644
index 000000000..2ff61636d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid16.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.16, "a"
+ .align 2
+ .weak _nds32_jmptbl_16
+ .type _nds32_jmptbl_16, @object
+_nds32_jmptbl_16:
+ .word 0
+ .size _nds32_jmptbl_16, .-_nds32_jmptbl_16
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid17.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid17.S
new file mode 100644
index 000000000..11ecb15e2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid17.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.17, "a"
+ .align 2
+ .weak _nds32_jmptbl_17
+ .type _nds32_jmptbl_17, @object
+_nds32_jmptbl_17:
+ .word 0
+ .size _nds32_jmptbl_17, .-_nds32_jmptbl_17
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid18.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid18.S
new file mode 100644
index 000000000..c66a46158
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid18.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.18, "a"
+ .align 2
+ .weak _nds32_jmptbl_18
+ .type _nds32_jmptbl_18, @object
+_nds32_jmptbl_18:
+ .word 0
+ .size _nds32_jmptbl_18, .-_nds32_jmptbl_18
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid19.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid19.S
new file mode 100644
index 000000000..c62d2d3ee
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid19.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.19, "a"
+ .align 2
+ .weak _nds32_jmptbl_19
+ .type _nds32_jmptbl_19, @object
+_nds32_jmptbl_19:
+ .word 0
+ .size _nds32_jmptbl_19, .-_nds32_jmptbl_19
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid20.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid20.S
new file mode 100644
index 000000000..38a0753e4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid20.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.20, "a"
+ .align 2
+ .weak _nds32_jmptbl_20
+ .type _nds32_jmptbl_20, @object
+_nds32_jmptbl_20:
+ .word 0
+ .size _nds32_jmptbl_20, .-_nds32_jmptbl_20
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid21.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid21.S
new file mode 100644
index 000000000..fe1405b88
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid21.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.21, "a"
+ .align 2
+ .weak _nds32_jmptbl_21
+ .type _nds32_jmptbl_21, @object
+_nds32_jmptbl_21:
+ .word 0
+ .size _nds32_jmptbl_21, .-_nds32_jmptbl_21
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid22.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid22.S
new file mode 100644
index 000000000..7432e4735
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid22.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.22, "a"
+ .align 2
+ .weak _nds32_jmptbl_22
+ .type _nds32_jmptbl_22, @object
+_nds32_jmptbl_22:
+ .word 0
+ .size _nds32_jmptbl_22, .-_nds32_jmptbl_22
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid23.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid23.S
new file mode 100644
index 000000000..d592a483c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid23.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.23, "a"
+ .align 2
+ .weak _nds32_jmptbl_23
+ .type _nds32_jmptbl_23, @object
+_nds32_jmptbl_23:
+ .word 0
+ .size _nds32_jmptbl_23, .-_nds32_jmptbl_23
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid24.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid24.S
new file mode 100644
index 000000000..08a661c3d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid24.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.24, "a"
+ .align 2
+ .weak _nds32_jmptbl_24
+ .type _nds32_jmptbl_24, @object
+_nds32_jmptbl_24:
+ .word 0
+ .size _nds32_jmptbl_24, .-_nds32_jmptbl_24
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid25.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid25.S
new file mode 100644
index 000000000..b2b06dd6b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid25.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.25, "a"
+ .align 2
+ .weak _nds32_jmptbl_25
+ .type _nds32_jmptbl_25, @object
+_nds32_jmptbl_25:
+ .word 0
+ .size _nds32_jmptbl_25, .-_nds32_jmptbl_25
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid26.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid26.S
new file mode 100644
index 000000000..f6ec3759e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid26.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.26, "a"
+ .align 2
+ .weak _nds32_jmptbl_26
+ .type _nds32_jmptbl_26, @object
+_nds32_jmptbl_26:
+ .word 0
+ .size _nds32_jmptbl_26, .-_nds32_jmptbl_26
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid27.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid27.S
new file mode 100644
index 000000000..1bf1ce9bd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid27.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.27, "a"
+ .align 2
+ .weak _nds32_jmptbl_27
+ .type _nds32_jmptbl_27, @object
+_nds32_jmptbl_27:
+ .word 0
+ .size _nds32_jmptbl_27, .-_nds32_jmptbl_27
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid28.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid28.S
new file mode 100644
index 000000000..7a2efd7b6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid28.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.28, "a"
+ .align 2
+ .weak _nds32_jmptbl_28
+ .type _nds32_jmptbl_28, @object
+_nds32_jmptbl_28:
+ .word 0
+ .size _nds32_jmptbl_28, .-_nds32_jmptbl_28
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid29.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid29.S
new file mode 100644
index 000000000..e5a8c44a6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid29.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.29, "a"
+ .align 2
+ .weak _nds32_jmptbl_29
+ .type _nds32_jmptbl_29, @object
+_nds32_jmptbl_29:
+ .word 0
+ .size _nds32_jmptbl_29, .-_nds32_jmptbl_29
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid30.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid30.S
new file mode 100644
index 000000000..dbcb66f27
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid30.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.30, "a"
+ .align 2
+ .weak _nds32_jmptbl_30
+ .type _nds32_jmptbl_30, @object
+_nds32_jmptbl_30:
+ .word 0
+ .size _nds32_jmptbl_30, .-_nds32_jmptbl_30
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid31.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid31.S
new file mode 100644
index 000000000..522baf095
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid31.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.31, "a"
+ .align 2
+ .weak _nds32_jmptbl_31
+ .type _nds32_jmptbl_31, @object
+_nds32_jmptbl_31:
+ .word 0
+ .size _nds32_jmptbl_31, .-_nds32_jmptbl_31
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid32.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid32.S
new file mode 100644
index 000000000..8de26cc20
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid32.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.32, "a"
+ .align 2
+ .weak _nds32_jmptbl_32
+ .type _nds32_jmptbl_32, @object
+_nds32_jmptbl_32:
+ .word 0
+ .size _nds32_jmptbl_32, .-_nds32_jmptbl_32
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid33.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid33.S
new file mode 100644
index 000000000..5c6f935b7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid33.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.33, "a"
+ .align 2
+ .weak _nds32_jmptbl_33
+ .type _nds32_jmptbl_33, @object
+_nds32_jmptbl_33:
+ .word 0
+ .size _nds32_jmptbl_33, .-_nds32_jmptbl_33
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid34.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid34.S
new file mode 100644
index 000000000..cadb37416
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid34.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.34, "a"
+ .align 2
+ .weak _nds32_jmptbl_34
+ .type _nds32_jmptbl_34, @object
+_nds32_jmptbl_34:
+ .word 0
+ .size _nds32_jmptbl_34, .-_nds32_jmptbl_34
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid35.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid35.S
new file mode 100644
index 000000000..3e87fdd5b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid35.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.35, "a"
+ .align 2
+ .weak _nds32_jmptbl_35
+ .type _nds32_jmptbl_35, @object
+_nds32_jmptbl_35:
+ .word 0
+ .size _nds32_jmptbl_35, .-_nds32_jmptbl_35
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid36.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid36.S
new file mode 100644
index 000000000..c3d2284f7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid36.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.36, "a"
+ .align 2
+ .weak _nds32_jmptbl_36
+ .type _nds32_jmptbl_36, @object
+_nds32_jmptbl_36:
+ .word 0
+ .size _nds32_jmptbl_36, .-_nds32_jmptbl_36
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid37.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid37.S
new file mode 100644
index 000000000..19d6956a5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid37.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.37, "a"
+ .align 2
+ .weak _nds32_jmptbl_37
+ .type _nds32_jmptbl_37, @object
+_nds32_jmptbl_37:
+ .word 0
+ .size _nds32_jmptbl_37, .-_nds32_jmptbl_37
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid38.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid38.S
new file mode 100644
index 000000000..364c751a5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid38.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.38, "a"
+ .align 2
+ .weak _nds32_jmptbl_38
+ .type _nds32_jmptbl_38, @object
+_nds32_jmptbl_38:
+ .word 0
+ .size _nds32_jmptbl_38, .-_nds32_jmptbl_38
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid39.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid39.S
new file mode 100644
index 000000000..b0ce72ae4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid39.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.39, "a"
+ .align 2
+ .weak _nds32_jmptbl_39
+ .type _nds32_jmptbl_39, @object
+_nds32_jmptbl_39:
+ .word 0
+ .size _nds32_jmptbl_39, .-_nds32_jmptbl_39
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid40.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid40.S
new file mode 100644
index 000000000..c25264622
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid40.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.40, "a"
+ .align 2
+ .weak _nds32_jmptbl_40
+ .type _nds32_jmptbl_40, @object
+_nds32_jmptbl_40:
+ .word 0
+ .size _nds32_jmptbl_40, .-_nds32_jmptbl_40
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid41.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid41.S
new file mode 100644
index 000000000..6200da9d0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid41.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.41, "a"
+ .align 2
+ .weak _nds32_jmptbl_41
+ .type _nds32_jmptbl_41, @object
+_nds32_jmptbl_41:
+ .word 0
+ .size _nds32_jmptbl_41, .-_nds32_jmptbl_41
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid42.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid42.S
new file mode 100644
index 000000000..5281cc442
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid42.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.42, "a"
+ .align 2
+ .weak _nds32_jmptbl_42
+ .type _nds32_jmptbl_42, @object
+_nds32_jmptbl_42:
+ .word 0
+ .size _nds32_jmptbl_42, .-_nds32_jmptbl_42
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid43.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid43.S
new file mode 100644
index 000000000..3489e6909
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid43.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.43, "a"
+ .align 2
+ .weak _nds32_jmptbl_43
+ .type _nds32_jmptbl_43, @object
+_nds32_jmptbl_43:
+ .word 0
+ .size _nds32_jmptbl_43, .-_nds32_jmptbl_43
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid44.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid44.S
new file mode 100644
index 000000000..f4c21d2b3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid44.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.44, "a"
+ .align 2
+ .weak _nds32_jmptbl_44
+ .type _nds32_jmptbl_44, @object
+_nds32_jmptbl_44:
+ .word 0
+ .size _nds32_jmptbl_44, .-_nds32_jmptbl_44
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid45.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid45.S
new file mode 100644
index 000000000..143cb0c5b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid45.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.45, "a"
+ .align 2
+ .weak _nds32_jmptbl_45
+ .type _nds32_jmptbl_45, @object
+_nds32_jmptbl_45:
+ .word 0
+ .size _nds32_jmptbl_45, .-_nds32_jmptbl_45
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid46.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid46.S
new file mode 100644
index 000000000..c0459bdc4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid46.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.46, "a"
+ .align 2
+ .weak _nds32_jmptbl_46
+ .type _nds32_jmptbl_46, @object
+_nds32_jmptbl_46:
+ .word 0
+ .size _nds32_jmptbl_46, .-_nds32_jmptbl_46
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid47.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid47.S
new file mode 100644
index 000000000..596f1dcd2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid47.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.47, "a"
+ .align 2
+ .weak _nds32_jmptbl_47
+ .type _nds32_jmptbl_47, @object
+_nds32_jmptbl_47:
+ .word 0
+ .size _nds32_jmptbl_47, .-_nds32_jmptbl_47
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid48.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid48.S
new file mode 100644
index 000000000..b2e3bb35b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid48.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.48, "a"
+ .align 2
+ .weak _nds32_jmptbl_48
+ .type _nds32_jmptbl_48, @object
+_nds32_jmptbl_48:
+ .word 0
+ .size _nds32_jmptbl_48, .-_nds32_jmptbl_48
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid49.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid49.S
new file mode 100644
index 000000000..03f279b6b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid49.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.49, "a"
+ .align 2
+ .weak _nds32_jmptbl_49
+ .type _nds32_jmptbl_49, @object
+_nds32_jmptbl_49:
+ .word 0
+ .size _nds32_jmptbl_49, .-_nds32_jmptbl_49
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid50.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid50.S
new file mode 100644
index 000000000..635bc1998
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid50.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.50, "a"
+ .align 2
+ .weak _nds32_jmptbl_50
+ .type _nds32_jmptbl_50, @object
+_nds32_jmptbl_50:
+ .word 0
+ .size _nds32_jmptbl_50, .-_nds32_jmptbl_50
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid51.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid51.S
new file mode 100644
index 000000000..26505db75
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid51.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.51, "a"
+ .align 2
+ .weak _nds32_jmptbl_51
+ .type _nds32_jmptbl_51, @object
+_nds32_jmptbl_51:
+ .word 0
+ .size _nds32_jmptbl_51, .-_nds32_jmptbl_51
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid52.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid52.S
new file mode 100644
index 000000000..5230e8f3f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid52.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.52, "a"
+ .align 2
+ .weak _nds32_jmptbl_52
+ .type _nds32_jmptbl_52, @object
+_nds32_jmptbl_52:
+ .word 0
+ .size _nds32_jmptbl_52, .-_nds32_jmptbl_52
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid53.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid53.S
new file mode 100644
index 000000000..3b5c931cb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid53.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.53, "a"
+ .align 2
+ .weak _nds32_jmptbl_53
+ .type _nds32_jmptbl_53, @object
+_nds32_jmptbl_53:
+ .word 0
+ .size _nds32_jmptbl_53, .-_nds32_jmptbl_53
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid54.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid54.S
new file mode 100644
index 000000000..b00b24258
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid54.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.54, "a"
+ .align 2
+ .weak _nds32_jmptbl_54
+ .type _nds32_jmptbl_54, @object
+_nds32_jmptbl_54:
+ .word 0
+ .size _nds32_jmptbl_54, .-_nds32_jmptbl_54
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid55.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid55.S
new file mode 100644
index 000000000..f527c3697
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid55.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.55, "a"
+ .align 2
+ .weak _nds32_jmptbl_55
+ .type _nds32_jmptbl_55, @object
+_nds32_jmptbl_55:
+ .word 0
+ .size _nds32_jmptbl_55, .-_nds32_jmptbl_55
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid56.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid56.S
new file mode 100644
index 000000000..54248ea98
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid56.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.56, "a"
+ .align 2
+ .weak _nds32_jmptbl_56
+ .type _nds32_jmptbl_56, @object
+_nds32_jmptbl_56:
+ .word 0
+ .size _nds32_jmptbl_56, .-_nds32_jmptbl_56
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid57.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid57.S
new file mode 100644
index 000000000..1b3381f86
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid57.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.57, "a"
+ .align 2
+ .weak _nds32_jmptbl_57
+ .type _nds32_jmptbl_57, @object
+_nds32_jmptbl_57:
+ .word 0
+ .size _nds32_jmptbl_57, .-_nds32_jmptbl_57
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid58.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid58.S
new file mode 100644
index 000000000..6e2e63c73
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid58.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.58, "a"
+ .align 2
+ .weak _nds32_jmptbl_58
+ .type _nds32_jmptbl_58, @object
+_nds32_jmptbl_58:
+ .word 0
+ .size _nds32_jmptbl_58, .-_nds32_jmptbl_58
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid59.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid59.S
new file mode 100644
index 000000000..d60b11719
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid59.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.59, "a"
+ .align 2
+ .weak _nds32_jmptbl_59
+ .type _nds32_jmptbl_59, @object
+_nds32_jmptbl_59:
+ .word 0
+ .size _nds32_jmptbl_59, .-_nds32_jmptbl_59
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid60.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid60.S
new file mode 100644
index 000000000..b24f19e99
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid60.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.60, "a"
+ .align 2
+ .weak _nds32_jmptbl_60
+ .type _nds32_jmptbl_60, @object
+_nds32_jmptbl_60:
+ .word 0
+ .size _nds32_jmptbl_60, .-_nds32_jmptbl_60
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid61.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid61.S
new file mode 100644
index 000000000..780e775bd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid61.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.61, "a"
+ .align 2
+ .weak _nds32_jmptbl_61
+ .type _nds32_jmptbl_61, @object
+_nds32_jmptbl_61:
+ .word 0
+ .size _nds32_jmptbl_61, .-_nds32_jmptbl_61
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid62.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid62.S
new file mode 100644
index 000000000..e0ff5622c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid62.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.62, "a"
+ .align 2
+ .weak _nds32_jmptbl_62
+ .type _nds32_jmptbl_62, @object
+_nds32_jmptbl_62:
+ .word 0
+ .size _nds32_jmptbl_62, .-_nds32_jmptbl_62
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid63.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid63.S
new file mode 100644
index 000000000..4b86ed7f7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid63.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.63, "a"
+ .align 2
+ .weak _nds32_jmptbl_63
+ .type _nds32_jmptbl_63, @object
+_nds32_jmptbl_63:
+ .word 0
+ .size _nds32_jmptbl_63, .-_nds32_jmptbl_63
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid64.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid64.S
new file mode 100644
index 000000000..cdb3c91a6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid64.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.64, "a"
+ .align 2
+ .weak _nds32_jmptbl_64
+ .type _nds32_jmptbl_64, @object
+_nds32_jmptbl_64:
+ .word 0
+ .size _nds32_jmptbl_64, .-_nds32_jmptbl_64
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid65.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid65.S
new file mode 100644
index 000000000..fc988f08e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid65.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.65, "a"
+ .align 2
+ .weak _nds32_jmptbl_65
+ .type _nds32_jmptbl_65, @object
+_nds32_jmptbl_65:
+ .word 0
+ .size _nds32_jmptbl_65, .-_nds32_jmptbl_65
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid66.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid66.S
new file mode 100644
index 000000000..c32e1fbd2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid66.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.66, "a"
+ .align 2
+ .weak _nds32_jmptbl_66
+ .type _nds32_jmptbl_66, @object
+_nds32_jmptbl_66:
+ .word 0
+ .size _nds32_jmptbl_66, .-_nds32_jmptbl_66
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid67.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid67.S
new file mode 100644
index 000000000..971bbf785
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid67.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.67, "a"
+ .align 2
+ .weak _nds32_jmptbl_67
+ .type _nds32_jmptbl_67, @object
+_nds32_jmptbl_67:
+ .word 0
+ .size _nds32_jmptbl_67, .-_nds32_jmptbl_67
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid68.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid68.S
new file mode 100644
index 000000000..1e0c37bf1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid68.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.68, "a"
+ .align 2
+ .weak _nds32_jmptbl_68
+ .type _nds32_jmptbl_68, @object
+_nds32_jmptbl_68:
+ .word 0
+ .size _nds32_jmptbl_68, .-_nds32_jmptbl_68
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid69.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid69.S
new file mode 100644
index 000000000..c8f11c456
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid69.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.69, "a"
+ .align 2
+ .weak _nds32_jmptbl_69
+ .type _nds32_jmptbl_69, @object
+_nds32_jmptbl_69:
+ .word 0
+ .size _nds32_jmptbl_69, .-_nds32_jmptbl_69
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid70.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid70.S
new file mode 100644
index 000000000..c154d76d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid70.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.70, "a"
+ .align 2
+ .weak _nds32_jmptbl_70
+ .type _nds32_jmptbl_70, @object
+_nds32_jmptbl_70:
+ .word 0
+ .size _nds32_jmptbl_70, .-_nds32_jmptbl_70
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid71.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid71.S
new file mode 100644
index 000000000..120fb3f03
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid71.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.71, "a"
+ .align 2
+ .weak _nds32_jmptbl_71
+ .type _nds32_jmptbl_71, @object
+_nds32_jmptbl_71:
+ .word 0
+ .size _nds32_jmptbl_71, .-_nds32_jmptbl_71
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid72.S b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid72.S
new file mode 100644
index 000000000..2a5b4f9d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/jmptbl_vid72.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_jmptbl.72, "a"
+ .align 2
+ .weak _nds32_jmptbl_72
+ .type _nds32_jmptbl_72, @object
+_nds32_jmptbl_72:
+ .word 0
+ .size _nds32_jmptbl_72, .-_nds32_jmptbl_72
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/nmih.S b/gcc-4.9/libgcc/config/nds32/isr-library/nmih.S
new file mode 100644
index 000000000..6c06d023b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/nmih.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_nmih, "a"
+ .align 2
+ .weak _nds32_nmih
+ .type _nds32_nmih, @object
+_nds32_nmih:
+ .word 0
+ .size _nds32_nmih, .-_nds32_nmih
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/reset.S b/gcc-4.9/libgcc/config/nds32/isr-library/reset.S
new file mode 100644
index 000000000..c814fc021
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/reset.S
@@ -0,0 +1,130 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_isr, "ax" /* Put it in the section of 1st level handler. */
+ .align 1
+ .weak _SDA_BASE_ /* For reset handler only. */
+ .weak _FP_BASE_ /* For reset handler only. */
+ .weak _nds32_init_mem /* User defined memory initialization function. */
+ .globl _start
+ .globl _nds32_reset
+ .type _nds32_reset, @function
+_nds32_reset:
+_start:
+#ifdef NDS32_EXT_EX9
+ .no_ex9_begin
+#endif
+ /* Handle NMI and warm boot if any of them exists. */
+ beqz $sp, 1f /* Reset, NMI or warm boot? */
+ /* Either NMI or warm boot; save all regs. */
+
+ /* Preserve registers for context-switching. */
+#ifdef __NDS32_REDUCED_REGS__
+ /* For 16-reg mode. */
+ smw.adm $r0, [$sp], $r10, #0x0
+ smw.adm $r15, [$sp], $r15, #0xf
+#else
+ /* For 32-reg mode. */
+ smw.adm $r0, [$sp], $r27, #0xf
+#endif
+#ifdef NDS32_EXT_IFC
+ mfusr $r1, $IFC_LP
+ smw.adm $r1, [$sp], $r2, #0x0 /* Save extra $r2 to keep
+ stack 8-byte alignment. */
+#endif
+
+ la $gp, _SDA_BASE_ /* Init GP for small data access. */
+ move $r0, $sp /* Init parameter. */
+ mfsr $r1, $ITYPE /* Check ITYPE for NMI or warm boot. */
+ andi $r1, $r1, #0xf
+ addi $r1, $r1, #-1
+ beqz $r1, 2f /* Warm boot if true. */
+ l.w $r15, _nds32_nmih /* Load NMI handler. */
+ j 3f
+2:
+ l.w $r15, _nds32_wrh /* Load warm boot handler. */
+3:
+ beqz $r15, 1f /* If no handler, do cold boot. */
+ jral $r15 /* Call handler. */
+ bnez $r0, 1f /* If fail to resume, do cold boot. */
+
+ /* Restore registers for context-switching. */
+#ifdef NDS32_EXT_IFC
+ lmw.bim $r1, [$sp], $r2, #0x0 /* Restore extra $r2 to keep
+ stack 8-byte alignment. */
+ mtusr $r1, $IFC_LP
+#endif
+#ifdef __NDS32_REDUCED_REGS__
+ /* For 16-reg mode. */
+ lmw.bim $r15, [$sp], $r15, #0xf
+ lmw.bim $r0, [$sp], $r10, #0x0
+#else
+ /* For 32-reg mode. */
+ lmw.bim $r0, [$sp], $r27, #0xf
+#endif
+ iret /* Resume operation. */
+
+
+1: /* Cold boot. */
+ /* Set IVB.ESZ = 1 (vector table entry size = 16 bytes) */
+ mfsr $r0, $IVB
+ li $r1, #0xffff3fff
+ and $r0, $r0, $r1
+ ori $r0, $r0, #0x4000
+ mtsr $r0, $IVB
+ dsb
+
+ la $gp, _SDA_BASE_ /* Init $gp. */
+ la $fp, _FP_BASE_ /* Init $fp. */
+ la $sp, _stack /* Init $sp. */
+#ifdef NDS32_EXT_EX9
+/*
+ * Initialize the table base of EX9 instruction
+ * ex9 generation needs to disable before the ITB is set
+ */
+ mfsr $r0, $MSC_CFG /* Check if HW support of EX9. */
+ srli $r0, $r0, 24
+ andi $r0, $r0, 0x1
+ beqz $r0, 4f /* Zero means HW does not support EX9. */
+ la $r0, _ITB_BASE_ /* Init $ITB. */
+ mtusr $r0, $ITB
+ .no_ex9_end
+4:
+#endif
+ la $r15, _nds32_init_mem /* Call DRAM init. _nds32_init_mem
+ may written by C language. */
+ beqz $r15, 6f
+ jral $r15
+6:
+ l.w $r15, _nds32_jmptbl_00 /* Load reset handler. */
+ jral $r15
+/* Reset handler() should never return in a RTOS or non-OS system.
+ In case it does return, an exception will be generated.
+ This exception will be caught either by default break handler or by EDM.
+ Default break handle may just do an infinite loop.
+ EDM will notify GDB and GDB will regain control when the ID is 0x7fff. */
+5:
+ break #0x7fff
+ .size _nds32_reset, .-_nds32_reset
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/reset_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/reset_4b.S
new file mode 100644
index 000000000..f5b533321
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/reset_4b.S
@@ -0,0 +1,131 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_isr, "ax" /* Put it in the section of 1st level handler. */
+ .align 1
+ .weak _SDA_BASE_ /* For reset handler only. */
+ .weak _FP_BASE_ /* For reset handler only. */
+ .weak _nds32_init_mem /* User defined memory initialization function. */
+ .globl _start
+ .globl _nds32_reset_4b
+ .type _nds32_reset_4b, @function
+_nds32_reset_4b:
+_start:
+#ifdef NDS32_EXT_EX9
+ .no_ex9_begin
+#endif
+ /* Handle NMI and warm boot if any of them exists. */
+ beqz $sp, 1f /* Reset, NMI or warm boot? */
+ /* Either NMI or warm boot; save all regs. */
+
+ /* Preserve registers for context-switching. */
+#ifdef __NDS32_REDUCED_REGS__
+ /* For 16-reg mode. */
+ smw.adm $r0, [$sp], $r10, #0x0
+ smw.adm $r15, [$sp], $r15, #0xf
+#else
+ /* For 32-reg mode. */
+ smw.adm $r0, [$sp], $r27, #0xf
+#endif
+#ifdef NDS32_EXT_IFC
+ mfusr $r1, $IFC_LP
+ smw.adm $r1, [$sp], $r2, #0x0 /* Save extra $r2 to keep
+ stack 8-byte alignment. */
+#endif
+
+ la $gp, _SDA_BASE_ /* Init GP for small data access. */
+ move $r0, $sp /* Init parameter. */
+ mfsr $r1, $ITYPE /* Check ITYPE for NMI or warm boot. */
+ andi $r1, $r1, #0xf
+ addi $r1, $r1, #-1
+ beqz $r1, 2f /* Warm boot if true. */
+ l.w $r15, _nds32_nmih /* Load NMI handler. */
+ j 3f
+2:
+ l.w $r15, _nds32_wrh /* Load warm boot handler. */
+3:
+ beqz $r15, 1f /* If no handler, do cold boot. */
+ jral $r15 /* Call handler. */
+ bnez $r0, 1f /* If fail to resume, do cold boot. */
+
+ /* Restore registers for context-switching. */
+#ifdef NDS32_EXT_IFC
+ lmw.bim $r1, [$sp], $r2, #0x0 /* Restore extra $r2 to keep
+ stack 8-byte alignment. */
+ mtusr $r1, $IFC_LP
+#endif
+#ifdef __NDS32_REDUCED_REGS__
+ /* For 16-reg mode. */
+ lmw.bim $r15, [$sp], $r15, #0xf
+ lmw.bim $r0, [$sp], $r10, #0x0
+#else
+ /* For 32-reg mode. */
+ lmw.bim $r0, [$sp], $r27, #0xf
+#endif
+ iret /* Resume operation. */
+
+
+1: /* Cold boot. */
+ /* With vector ID feature, set default vector size to 4B. */
+ /* Set IVB.ESZ = 0 (vector table entry size = 4 bytes) */
+ mfsr $r0, $IVB
+ li $r1, #0xc000
+ or $r0, $r0, $r1
+ xor $r0, $r0, $r1
+ mtsr $r0, $IVB
+ dsb
+
+ la $gp, _SDA_BASE_ /* Init $gp. */
+ la $fp, _FP_BASE_ /* Init $fp. */
+ la $sp, _stack /* Init $sp. */
+#ifdef NDS32_EXT_EX9
+/*
+ * Initialize the table base of EX9 instruction
+ * ex9 generation needs to disable before the ITB is set
+ */
+ mfsr $r0, $MSC_CFG /* Check if HW support of EX9. */
+ srli $r0, $r0, 24
+ andi $r0, $r0, 0x1
+ beqz $r0, 4f /* Zero means HW does not support EX9. */
+ la $r0, _ITB_BASE_ /* Init $ITB. */
+ mtusr $r0, $ITB
+ .no_ex9_end
+4:
+#endif
+ la $r15, _nds32_init_mem /* Call DRAM init. _nds32_init_mem
+ may written by C language. */
+ beqz $r15, 6f
+ jral $r15
+6:
+ l.w $r15, _nds32_jmptbl_00 /* Load reset handler. */
+ jral $r15
+/* Reset handler() should never return in a RTOS or non-OS system.
+ In case it does return, an exception will be generated.
+ This exception will be caught either by default break handler or by EDM.
+ Default break handle may just do an infinite loop.
+ EDM will notify GDB and GDB will regain control when the ID is 0x7fff. */
+5:
+ break #0x7fff
+ .size _nds32_reset_4b, .-_nds32_reset_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_all.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_all.inc
new file mode 100644
index 000000000..b19b3ce1d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_all.inc
@@ -0,0 +1,45 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_ALL
+ setgie.d
+ dsb
+ lmw.bim $r1, [$sp], $r2, #0x0 /* Restore IPC, IPSW. */
+ mtsr $r1, $IPC
+ mtsr $r2, $IPSW
+ RESTORE_FPU_REGS
+ RESTORE_MAC_REGS
+#ifdef NDS32_EXT_IFC
+ lmw.bim $r1, [$sp], $r2, #0x0 /* Restore extra $r2 to keep
+ stack 8-byte alignment. */
+ mtusr $r1, $IFC_LP
+#endif
+#ifdef __NDS32_REDUCED_REGS__
+ lmw.bim $r0, [$sp], $r10, #0x0 /* Restore all regs. */
+ lmw.bim $r15, [$sp], $r15, #0xf
+#else /* not __NDS32_REDUCED_REGS__ */
+ lmw.bim $r0, [$sp], $r27, #0xf /* Restore all regs. */
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs.inc
new file mode 100644
index 000000000..525ecbbf9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs.inc
@@ -0,0 +1,36 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_FPU_REGS
+#if defined(NDS32_EXT_FPU_CONFIG_0)
+ RESTORE_FPU_REGS_00
+#elif defined(NDS32_EXT_FPU_CONFIG_1)
+ RESTORE_FPU_REGS_01
+#elif defined(NDS32_EXT_FPU_CONFIG_2)
+ RESTORE_FPU_REGS_02
+#elif defined(NDS32_EXT_FPU_CONFIG_3)
+ RESTORE_FPU_REGS_03
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_00.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_00.inc
new file mode 100644
index 000000000..3a0ad69e3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_00.inc
@@ -0,0 +1,31 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_FPU_REGS_00
+ fldi.bi $fd0, [$sp], #8
+ fldi.bi $fd1, [$sp], #8
+ fldi.bi $fd2, [$sp], #8
+ fldi.bi $fd3, [$sp], #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_01.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_01.inc
new file mode 100644
index 000000000..deb20b776
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_01.inc
@@ -0,0 +1,35 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_FPU_REGS_01
+ fldi.bi $fd0, [$sp], #8
+ fldi.bi $fd1, [$sp], #8
+ fldi.bi $fd2, [$sp], #8
+ fldi.bi $fd3, [$sp], #8
+ fldi.bi $fd4, [$sp], #8
+ fldi.bi $fd5, [$sp], #8
+ fldi.bi $fd6, [$sp], #8
+ fldi.bi $fd7, [$sp], #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_02.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_02.inc
new file mode 100644
index 000000000..c74c01b3f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_02.inc
@@ -0,0 +1,43 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_FPU_REGS_02
+ fldi.bi $fd0, [$sp], 8
+ fldi.bi $fd1, [$sp], 8
+ fldi.bi $fd2, [$sp], 8
+ fldi.bi $fd3, [$sp], 8
+ fldi.bi $fd4, [$sp], 8
+ fldi.bi $fd5, [$sp], 8
+ fldi.bi $fd6, [$sp], 8
+ fldi.bi $fd7, [$sp], 8
+ fldi.bi $fd8, [$sp], 8
+ fldi.bi $fd9, [$sp], 8
+ fldi.bi $fd10, [$sp], 8
+ fldi.bi $fd11, [$sp], 8
+ fldi.bi $fd12, [$sp], 8
+ fldi.bi $fd13, [$sp], 8
+ fldi.bi $fd14, [$sp], 8
+ fldi.bi $fd15, [$sp], 8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_03.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_03.inc
new file mode 100644
index 000000000..2bdf435a5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_fpu_regs_03.inc
@@ -0,0 +1,59 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_FPU_REGS_03
+ fldi.bi $fd0, [$sp], #8
+ fldi.bi $fd1, [$sp], #8
+ fldi.bi $fd2, [$sp], #8
+ fldi.bi $fd3, [$sp], #8
+ fldi.bi $fd4, [$sp], #8
+ fldi.bi $fd5, [$sp], #8
+ fldi.bi $fd6, [$sp], #8
+ fldi.bi $fd7, [$sp], #8
+ fldi.bi $fd8, [$sp], #8
+ fldi.bi $fd9, [$sp], #8
+ fldi.bi $fd10, [$sp], #8
+ fldi.bi $fd11, [$sp], #8
+ fldi.bi $fd12, [$sp], #8
+ fldi.bi $fd13, [$sp], #8
+ fldi.bi $fd14, [$sp], #8
+ fldi.bi $fd15, [$sp], #8
+ fldi.bi $fd16, [$sp], #8
+ fldi.bi $fd17, [$sp], #8
+ fldi.bi $fd18, [$sp], #8
+ fldi.bi $fd19, [$sp], #8
+ fldi.bi $fd20, [$sp], #8
+ fldi.bi $fd21, [$sp], #8
+ fldi.bi $fd22, [$sp], #8
+ fldi.bi $fd23, [$sp], #8
+ fldi.bi $fd24, [$sp], #8
+ fldi.bi $fd25, [$sp], #8
+ fldi.bi $fd26, [$sp], #8
+ fldi.bi $fd27, [$sp], #8
+ fldi.bi $fd28, [$sp], #8
+ fldi.bi $fd29, [$sp], #8
+ fldi.bi $fd30, [$sp], #8
+ fldi.bi $fd31, [$sp], #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_mac_regs.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_mac_regs.inc
new file mode 100644
index 000000000..a0645ed3d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_mac_regs.inc
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_MAC_REGS
+#ifdef NDS32_DX_REGS
+ lmw.bim $r1, [$sp], $r4, #0x0
+ mtusr $r1, $d0.lo
+ mtusr $r2, $d0.hi
+ mtusr $r3, $d1.lo
+ mtusr $r4, $d1.hi
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/restore_partial.inc b/gcc-4.9/libgcc/config/nds32/isr-library/restore_partial.inc
new file mode 100644
index 000000000..60b86e461
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/restore_partial.inc
@@ -0,0 +1,47 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro RESTORE_PARTIAL
+#if defined(NDS32_NESTED) || defined(NDS32_NESTED_READY)
+ setgie.d
+ dsb
+ lmw.bim $r1, [$sp], $r2, #0x0 /* Restore IPC, IPSW. */
+ mtsr $r1, $IPC /* Set IPC. */
+ mtsr $r2, $IPSW /* Set IPSW. */
+#endif
+ RESTORE_FPU_REGS
+ RESTORE_MAC_REGS
+#ifdef NDS32_EXT_IFC
+ lmw.bim $r1, [$sp], $r2, #0x0 /* Restore extra $r2 to keep
+ stack 8-byte alignment. */
+ mtusr $r1, $IFC_LP
+#endif
+ lmw.bim $r0, [$sp], $r5, #0x0 /* Restore all regs. */
+#ifdef __NDS32_REDUCED_REGS__
+ lmw.bim $r15, [$sp], $r15, #0x2
+#else
+ lmw.bim $r15, [$sp], $r27, #0x2 /* Restore all regs. */
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_all.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_all.inc
new file mode 100644
index 000000000..a2835ac2b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_all.inc
@@ -0,0 +1,67 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_ALL_4B
+#ifdef __NDS32_REDUCED_REGS__
+ smw.adm $r15, [$sp], $r15, #0xf
+ smw.adm $r0, [$sp], $r10, #0x0
+#else /* not __NDS32_REDUCED_REGS__ */
+ smw.adm $r0, [$sp], $r27, #0xf
+#endif /* not __NDS32_REDUCED_REGS__ */
+#ifdef NDS32_EXT_IFC
+ mfusr $r1, $IFC_LP
+ smw.adm $r1, [$sp], $r2, #0x0 /* Save extra $r2 to keep
+ stack 8-byte alignment. */
+#endif
+ SAVE_MAC_REGS
+ SAVE_FPU_REGS
+ mfsr $r1, $IPC /* Get IPC. */
+ mfsr $r2, $IPSW /* Get IPSW. */
+ smw.adm $r1, [$sp], $r2, #0x0 /* Push IPC, IPSW. */
+ move $r1, $sp /* $r1 is ptr to NDS32_CONTEXT. */
+ mfsr $r0, $ITYPE /* Get VID to $r0. */
+ srli $r0, $r0, #5
+#ifdef __NDS32_ISA_V2__
+ andi $r0, $r0, #127
+#else
+ fexti33 $r0, #6
+#endif
+.endm
+
+.macro SAVE_ALL
+/* SAVE_REG_TBL code has been moved to
+ vector table generated by compiler. */
+#ifdef NDS32_EXT_IFC
+ mfusr $r1, $IFC_LP
+ smw.adm $r1, [$sp], $r2, #0x0 /* Save extra $r2 to keep
+ stack 8-byte alignment. */
+#endif
+ SAVE_MAC_REGS
+ SAVE_FPU_REGS
+ mfsr $r1, $IPC /* Get IPC. */
+ mfsr $r2, $IPSW /* Get IPSW. */
+ smw.adm $r1, [$sp], $r2, #0x0 /* Push IPC, IPSW. */
+ move $r1, $sp /* $r1 is ptr to NDS32_CONTEXT. */
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs.inc
new file mode 100644
index 000000000..52034a1a9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs.inc
@@ -0,0 +1,36 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_FPU_REGS
+#if defined(NDS32_EXT_FPU_CONFIG_0)
+ SAVE_FPU_REGS_00
+#elif defined(NDS32_EXT_FPU_CONFIG_1)
+ SAVE_FPU_REGS_01
+#elif defined(NDS32_EXT_FPU_CONFIG_2)
+ SAVE_FPU_REGS_02
+#elif defined(NDS32_EXT_FPU_CONFIG_3)
+ SAVE_FPU_REGS_03
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_00.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_00.inc
new file mode 100644
index 000000000..e31ed235f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_00.inc
@@ -0,0 +1,33 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_FPU_REGS_00
+ addi $sp, $sp, #-8
+ fsdi.bi $fd3, [$sp], #-8
+ fsdi.bi $fd2, [$sp], #-8
+ fsdi.bi $fd1, [$sp], #-8
+ fsdi.bi $fd0, [$sp], #-8
+ addi $sp, $sp, #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_01.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_01.inc
new file mode 100644
index 000000000..46859ac53
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_01.inc
@@ -0,0 +1,37 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_FPU_REGS_01
+ addi $sp, $sp, #-8
+ fsdi.bi $fd7, [$sp], #-8
+ fsdi.bi $fd6, [$sp], #-8
+ fsdi.bi $fd5, [$sp], #-8
+ fsdi.bi $fd4, [$sp], #-8
+ fsdi.bi $fd3, [$sp], #-8
+ fsdi.bi $fd2, [$sp], #-8
+ fsdi.bi $fd1, [$sp], #-8
+ fsdi.bi $fd0, [$sp], #-8
+ addi $sp, $sp, #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_02.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_02.inc
new file mode 100644
index 000000000..e73d276c5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_02.inc
@@ -0,0 +1,45 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_FPU_REGS_02
+ addi $sp, $sp, #-8
+ fsdi.bi $fd15, [$sp], #-8
+ fsdi.bi $fd14, [$sp], #-8
+ fsdi.bi $fd13, [$sp], #-8
+ fsdi.bi $fd12, [$sp], #-8
+ fsdi.bi $fd11, [$sp], #-8
+ fsdi.bi $fd10, [$sp], #-8
+ fsdi.bi $fd9, [$sp], #-8
+ fsdi.bi $fd8, [$sp], #-8
+ fsdi.bi $fd7, [$sp], #-8
+ fsdi.bi $fd6, [$sp], #-8
+ fsdi.bi $fd5, [$sp], #-8
+ fsdi.bi $fd4, [$sp], #-8
+ fsdi.bi $fd3, [$sp], #-8
+ fsdi.bi $fd2, [$sp], #-8
+ fsdi.bi $fd1, [$sp], #-8
+ fsdi.bi $fd0, [$sp], #-8
+ addi $sp, $sp, #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_03.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_03.inc
new file mode 100644
index 000000000..44dae9854
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_fpu_regs_03.inc
@@ -0,0 +1,61 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_FPU_REGS_03
+ addi $sp, $sp, #-8
+ fsdi.bi $fd31, [$sp], #-8
+ fsdi.bi $fd30, [$sp], #-8
+ fsdi.bi $fd29, [$sp], #-8
+ fsdi.bi $fd28, [$sp], #-8
+ fsdi.bi $fd27, [$sp], #-8
+ fsdi.bi $fd26, [$sp], #-8
+ fsdi.bi $fd25, [$sp], #-8
+ fsdi.bi $fd24, [$sp], #-8
+ fsdi.bi $fd23, [$sp], #-8
+ fsdi.bi $fd22, [$sp], #-8
+ fsdi.bi $fd21, [$sp], #-8
+ fsdi.bi $fd20, [$sp], #-8
+ fsdi.bi $fd19, [$sp], #-8
+ fsdi.bi $fd18, [$sp], #-8
+ fsdi.bi $fd17, [$sp], #-8
+ fsdi.bi $fd16, [$sp], #-8
+ fsdi.bi $fd15, [$sp], #-8
+ fsdi.bi $fd14, [$sp], #-8
+ fsdi.bi $fd13, [$sp], #-8
+ fsdi.bi $fd12, [$sp], #-8
+ fsdi.bi $fd11, [$sp], #-8
+ fsdi.bi $fd10, [$sp], #-8
+ fsdi.bi $fd9, [$sp], #-8
+ fsdi.bi $fd8, [$sp], #-8
+ fsdi.bi $fd7, [$sp], #-8
+ fsdi.bi $fd6, [$sp], #-8
+ fsdi.bi $fd5, [$sp], #-8
+ fsdi.bi $fd4, [$sp], #-8
+ fsdi.bi $fd3, [$sp], #-8
+ fsdi.bi $fd2, [$sp], #-8
+ fsdi.bi $fd1, [$sp], #-8
+ fsdi.bi $fd0, [$sp], #-8
+ addi $sp, $sp, #8
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_mac_regs.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_mac_regs.inc
new file mode 100644
index 000000000..2de4b2c54
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_mac_regs.inc
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_MAC_REGS
+#ifdef NDS32_DX_REGS
+ mfusr $r1, $d0.lo
+ mfusr $r2, $d0.hi
+ mfusr $r3, $d1.lo
+ mfusr $r4, $d1.hi
+ smw.adm $r1, [$sp], $r4, #0x0
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/save_partial.inc b/gcc-4.9/libgcc/config/nds32/isr-library/save_partial.inc
new file mode 100644
index 000000000..df9ab6a60
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/save_partial.inc
@@ -0,0 +1,69 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+.macro SAVE_PARTIAL_4B
+#ifdef __NDS32_REDUCED_REGS__
+ smw.adm $r15, [$sp], $r15, #0x2
+#else /* not __NDS32_REDUCED_REGS__ */
+ smw.adm $r15, [$sp], $r27, #0x2
+#endif /* not __NDS32_REDUCED_REGS__ */
+ smw.adm $r0, [$sp], $r5, #0x0
+#ifdef NDS32_EXT_IFC
+ mfusr $r1, $IFC_LP
+ smw.adm $r1, [$sp], $r2, #0x0 /* Save extra $r2 to keep
+ stack 8-byte alignment. */
+#endif
+ SAVE_MAC_REGS
+ SAVE_FPU_REGS
+#if defined(NDS32_NESTED) || defined(NDS32_NESTED_READY)
+ mfsr $r1, $IPC /* Get IPC. */
+ mfsr $r2, $IPSW /* Get IPSW. */
+ smw.adm $r1, [$sp], $r2, #0x0 /* Push IPC, IPSW. */
+#endif
+ mfsr $r0, $ITYPE /* Get VID to $r0. */
+ srli $r0, $r0, #5
+#ifdef __NDS32_ISA_V2__
+ andi $r0, $r0, #127
+#else
+ fexti33 $r0, #6
+#endif
+.endm
+
+.macro SAVE_PARTIAL
+/* SAVE_CALLER_REGS code has been moved to
+ vector table generated by compiler. */
+#ifdef NDS32_EXT_IFC
+ mfusr $r1, $IFC_LP
+ smw.adm $r1, [$sp], $r2, #0x0 /* Save extra $r2 to keep
+ stack 8-byte alignment. */
+#endif
+ SAVE_MAC_REGS
+ SAVE_FPU_REGS
+#if defined(NDS32_NESTED) || defined(NDS32_NESTED_READY)
+ mfsr $r1, $IPC /* Get IPC. */
+ mfsr $r2, $IPSW /* Get IPSW. */
+ smw.adm $r1, [$sp], $r2, #0x0 /* Push IPC, IPSW. */
+#endif
+.endm
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00.S
new file mode 100644
index 000000000..8dbfac356
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.00, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_00
+ .type _nds32_vector_00, @function
+_nds32_vector_00:
+1:
+ j 1b
+ .size _nds32_vector_00, .-_nds32_vector_00
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00_4b.S
new file mode 100644
index 000000000..185aca269
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid00_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.00, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_00_4b
+ .type _nds32_vector_00_4b, @function
+_nds32_vector_00_4b:
+1:
+ j 1b
+ .size _nds32_vector_00_4b, .-_nds32_vector_00_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01.S
new file mode 100644
index 000000000..fe96aca5c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.01, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_01
+ .type _nds32_vector_01, @function
+_nds32_vector_01:
+1:
+ j 1b
+ .size _nds32_vector_01, .-_nds32_vector_01
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01_4b.S
new file mode 100644
index 000000000..5a4a767e0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid01_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.01, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_01_4b
+ .type _nds32_vector_01_4b, @function
+_nds32_vector_01_4b:
+1:
+ j 1b
+ .size _nds32_vector_01_4b, .-_nds32_vector_01_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02.S
new file mode 100644
index 000000000..77e84942a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.02, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_02
+ .type _nds32_vector_02, @function
+_nds32_vector_02:
+1:
+ j 1b
+ .size _nds32_vector_02, .-_nds32_vector_02
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02_4b.S
new file mode 100644
index 000000000..e0a5a405b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid02_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.02, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_02_4b
+ .type _nds32_vector_02_4b, @function
+_nds32_vector_02_4b:
+1:
+ j 1b
+ .size _nds32_vector_02_4b, .-_nds32_vector_02_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03.S
new file mode 100644
index 000000000..7423f7ad3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.03, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_03
+ .type _nds32_vector_03, @function
+_nds32_vector_03:
+1:
+ j 1b
+ .size _nds32_vector_03, .-_nds32_vector_03
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03_4b.S
new file mode 100644
index 000000000..3b8ef06ec
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid03_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.03, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_03_4b
+ .type _nds32_vector_03_4b, @function
+_nds32_vector_03_4b:
+1:
+ j 1b
+ .size _nds32_vector_03_4b, .-_nds32_vector_03_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04.S
new file mode 100644
index 000000000..63ecb4da0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.04, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_04
+ .type _nds32_vector_04, @function
+_nds32_vector_04:
+1:
+ j 1b
+ .size _nds32_vector_04, .-_nds32_vector_04
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04_4b.S
new file mode 100644
index 000000000..6633522c8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid04_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.04, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_04_4b
+ .type _nds32_vector_04_4b, @function
+_nds32_vector_04_4b:
+1:
+ j 1b
+ .size _nds32_vector_04_4b, .-_nds32_vector_04_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05.S
new file mode 100644
index 000000000..839547031
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.05, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_05
+ .type _nds32_vector_05, @function
+_nds32_vector_05:
+1:
+ j 1b
+ .size _nds32_vector_05, .-_nds32_vector_05
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05_4b.S
new file mode 100644
index 000000000..9b24b9cf8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid05_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.05, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_05_4b
+ .type _nds32_vector_05_4b, @function
+_nds32_vector_05_4b:
+1:
+ j 1b
+ .size _nds32_vector_05_4b, .-_nds32_vector_05_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06.S
new file mode 100644
index 000000000..81d4c59a3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.06, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_06
+ .type _nds32_vector_06, @function
+_nds32_vector_06:
+1:
+ j 1b
+ .size _nds32_vector_06, .-_nds32_vector_06
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06_4b.S
new file mode 100644
index 000000000..b8206a2ef
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid06_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.06, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_06_4b
+ .type _nds32_vector_06_4b, @function
+_nds32_vector_06_4b:
+1:
+ j 1b
+ .size _nds32_vector_06_4b, .-_nds32_vector_06_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07.S
new file mode 100644
index 000000000..ac151100b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.07, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_07
+ .type _nds32_vector_07, @function
+_nds32_vector_07:
+1:
+ j 1b
+ .size _nds32_vector_07, .-_nds32_vector_07
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07_4b.S
new file mode 100644
index 000000000..d9be240c3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid07_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.07, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_07_4b
+ .type _nds32_vector_07_4b, @function
+_nds32_vector_07_4b:
+1:
+ j 1b
+ .size _nds32_vector_07_4b, .-_nds32_vector_07_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08.S
new file mode 100644
index 000000000..8652345b0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.08, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_08
+ .type _nds32_vector_08, @function
+_nds32_vector_08:
+1:
+ j 1b
+ .size _nds32_vector_08, .-_nds32_vector_08
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08_4b.S
new file mode 100644
index 000000000..86f36693a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid08_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.08, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_08_4b
+ .type _nds32_vector_08_4b, @function
+_nds32_vector_08_4b:
+1:
+ j 1b
+ .size _nds32_vector_08_4b, .-_nds32_vector_08_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09.S
new file mode 100644
index 000000000..8b7d702f5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.09, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_09
+ .type _nds32_vector_09, @function
+_nds32_vector_09:
+1:
+ j 1b
+ .size _nds32_vector_09, .-_nds32_vector_09
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09_4b.S
new file mode 100644
index 000000000..19a5cc1a5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid09_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.09, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_09_4b
+ .type _nds32_vector_09_4b, @function
+_nds32_vector_09_4b:
+1:
+ j 1b
+ .size _nds32_vector_09_4b, .-_nds32_vector_09_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10.S
new file mode 100644
index 000000000..bb4612bba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.10, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_10
+ .type _nds32_vector_10, @function
+_nds32_vector_10:
+1:
+ j 1b
+ .size _nds32_vector_10, .-_nds32_vector_10
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10_4b.S
new file mode 100644
index 000000000..0250b8e59
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid10_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.10, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_10_4b
+ .type _nds32_vector_10_4b, @function
+_nds32_vector_10_4b:
+1:
+ j 1b
+ .size _nds32_vector_10_4b, .-_nds32_vector_10_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11.S
new file mode 100644
index 000000000..e8dfe487f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.11, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_11
+ .type _nds32_vector_11, @function
+_nds32_vector_11:
+1:
+ j 1b
+ .size _nds32_vector_11, .-_nds32_vector_11
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11_4b.S
new file mode 100644
index 000000000..d9efe4223
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid11_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.11, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_11_4b
+ .type _nds32_vector_11_4b, @function
+_nds32_vector_11_4b:
+1:
+ j 1b
+ .size _nds32_vector_11_4b, .-_nds32_vector_11_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12.S
new file mode 100644
index 000000000..1d9368b83
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.12, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_12
+ .type _nds32_vector_12, @function
+_nds32_vector_12:
+1:
+ j 1b
+ .size _nds32_vector_12, .-_nds32_vector_12
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12_4b.S
new file mode 100644
index 000000000..bf5751a32
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid12_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.12, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_12_4b
+ .type _nds32_vector_12_4b, @function
+_nds32_vector_12_4b:
+1:
+ j 1b
+ .size _nds32_vector_12_4b, .-_nds32_vector_12_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13.S
new file mode 100644
index 000000000..e830e43fa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.13, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_13
+ .type _nds32_vector_13, @function
+_nds32_vector_13:
+1:
+ j 1b
+ .size _nds32_vector_13, .-_nds32_vector_13
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13_4b.S
new file mode 100644
index 000000000..8dffad9e3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid13_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.13, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_13_4b
+ .type _nds32_vector_13_4b, @function
+_nds32_vector_13_4b:
+1:
+ j 1b
+ .size _nds32_vector_13_4b, .-_nds32_vector_13_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14.S
new file mode 100644
index 000000000..d4ce5cc8b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.14, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_14
+ .type _nds32_vector_14, @function
+_nds32_vector_14:
+1:
+ j 1b
+ .size _nds32_vector_14, .-_nds32_vector_14
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14_4b.S
new file mode 100644
index 000000000..3ab3ef7b2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid14_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.14, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_14_4b
+ .type _nds32_vector_14_4b, @function
+_nds32_vector_14_4b:
+1:
+ j 1b
+ .size _nds32_vector_14_4b, .-_nds32_vector_14_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15.S
new file mode 100644
index 000000000..f87fe909d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.15, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_15
+ .type _nds32_vector_15, @function
+_nds32_vector_15:
+1:
+ j 1b
+ .size _nds32_vector_15, .-_nds32_vector_15
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15_4b.S
new file mode 100644
index 000000000..aa0405976
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid15_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.15, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_15_4b
+ .type _nds32_vector_15_4b, @function
+_nds32_vector_15_4b:
+1:
+ j 1b
+ .size _nds32_vector_15_4b, .-_nds32_vector_15_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16.S
new file mode 100644
index 000000000..eb6f842d1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.16, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_16
+ .type _nds32_vector_16, @function
+_nds32_vector_16:
+1:
+ j 1b
+ .size _nds32_vector_16, .-_nds32_vector_16
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16_4b.S
new file mode 100644
index 000000000..c7dcf1093
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid16_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.16, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_16_4b
+ .type _nds32_vector_16_4b, @function
+_nds32_vector_16_4b:
+1:
+ j 1b
+ .size _nds32_vector_16_4b, .-_nds32_vector_16_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17.S
new file mode 100644
index 000000000..b0c322a92
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.17, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_17
+ .type _nds32_vector_17, @function
+_nds32_vector_17:
+1:
+ j 1b
+ .size _nds32_vector_17, .-_nds32_vector_17
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17_4b.S
new file mode 100644
index 000000000..305e4b1f8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid17_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.17, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_17_4b
+ .type _nds32_vector_17_4b, @function
+_nds32_vector_17_4b:
+1:
+ j 1b
+ .size _nds32_vector_17_4b, .-_nds32_vector_17_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18.S
new file mode 100644
index 000000000..2e599f13d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.18, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_18
+ .type _nds32_vector_18, @function
+_nds32_vector_18:
+1:
+ j 1b
+ .size _nds32_vector_18, .-_nds32_vector_18
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18_4b.S
new file mode 100644
index 000000000..d29462d89
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid18_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.18, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_18_4b
+ .type _nds32_vector_18_4b, @function
+_nds32_vector_18_4b:
+1:
+ j 1b
+ .size _nds32_vector_18_4b, .-_nds32_vector_18_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19.S
new file mode 100644
index 000000000..ba0871976
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.19, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_19
+ .type _nds32_vector_19, @function
+_nds32_vector_19:
+1:
+ j 1b
+ .size _nds32_vector_19, .-_nds32_vector_19
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19_4b.S
new file mode 100644
index 000000000..21160d082
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid19_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.19, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_19_4b
+ .type _nds32_vector_19_4b, @function
+_nds32_vector_19_4b:
+1:
+ j 1b
+ .size _nds32_vector_19_4b, .-_nds32_vector_19_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20.S
new file mode 100644
index 000000000..c960c785a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.20, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_20
+ .type _nds32_vector_20, @function
+_nds32_vector_20:
+1:
+ j 1b
+ .size _nds32_vector_20, .-_nds32_vector_20
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20_4b.S
new file mode 100644
index 000000000..92105d62c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid20_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.20, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_20_4b
+ .type _nds32_vector_20_4b, @function
+_nds32_vector_20_4b:
+1:
+ j 1b
+ .size _nds32_vector_20_4b, .-_nds32_vector_20_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21.S
new file mode 100644
index 000000000..a47693f9e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.21, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_21
+ .type _nds32_vector_21, @function
+_nds32_vector_21:
+1:
+ j 1b
+ .size _nds32_vector_21, .-_nds32_vector_21
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21_4b.S
new file mode 100644
index 000000000..843dcb877
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid21_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.21, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_21_4b
+ .type _nds32_vector_21_4b, @function
+_nds32_vector_21_4b:
+1:
+ j 1b
+ .size _nds32_vector_21_4b, .-_nds32_vector_21_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22.S
new file mode 100644
index 000000000..c389bd92e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.22, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_22
+ .type _nds32_vector_22, @function
+_nds32_vector_22:
+1:
+ j 1b
+ .size _nds32_vector_22, .-_nds32_vector_22
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22_4b.S
new file mode 100644
index 000000000..fea74cb5f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid22_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.22, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_22_4b
+ .type _nds32_vector_22_4b, @function
+_nds32_vector_22_4b:
+1:
+ j 1b
+ .size _nds32_vector_22_4b, .-_nds32_vector_22_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23.S
new file mode 100644
index 000000000..2e2df81bc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.23, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_23
+ .type _nds32_vector_23, @function
+_nds32_vector_23:
+1:
+ j 1b
+ .size _nds32_vector_23, .-_nds32_vector_23
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23_4b.S
new file mode 100644
index 000000000..2b143de7c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid23_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.23, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_23_4b
+ .type _nds32_vector_23_4b, @function
+_nds32_vector_23_4b:
+1:
+ j 1b
+ .size _nds32_vector_23_4b, .-_nds32_vector_23_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24.S
new file mode 100644
index 000000000..520447557
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.24, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_24
+ .type _nds32_vector_24, @function
+_nds32_vector_24:
+1:
+ j 1b
+ .size _nds32_vector_24, .-_nds32_vector_24
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24_4b.S
new file mode 100644
index 000000000..daedf45c7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid24_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.24, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_24_4b
+ .type _nds32_vector_24_4b, @function
+_nds32_vector_24_4b:
+1:
+ j 1b
+ .size _nds32_vector_24_4b, .-_nds32_vector_24_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25.S
new file mode 100644
index 000000000..bdbe9f7a0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.25, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_25
+ .type _nds32_vector_25, @function
+_nds32_vector_25:
+1:
+ j 1b
+ .size _nds32_vector_25, .-_nds32_vector_25
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25_4b.S
new file mode 100644
index 000000000..a50588f76
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid25_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.25, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_25_4b
+ .type _nds32_vector_25_4b, @function
+_nds32_vector_25_4b:
+1:
+ j 1b
+ .size _nds32_vector_25_4b, .-_nds32_vector_25_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26.S
new file mode 100644
index 000000000..bc95a880b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.26, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_26
+ .type _nds32_vector_26, @function
+_nds32_vector_26:
+1:
+ j 1b
+ .size _nds32_vector_26, .-_nds32_vector_26
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26_4b.S
new file mode 100644
index 000000000..cf037920e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid26_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.26, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_26_4b
+ .type _nds32_vector_26_4b, @function
+_nds32_vector_26_4b:
+1:
+ j 1b
+ .size _nds32_vector_26_4b, .-_nds32_vector_26_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27.S
new file mode 100644
index 000000000..96b967c37
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.27, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_27
+ .type _nds32_vector_27, @function
+_nds32_vector_27:
+1:
+ j 1b
+ .size _nds32_vector_27, .-_nds32_vector_27
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27_4b.S
new file mode 100644
index 000000000..3d34042c0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid27_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.27, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_27_4b
+ .type _nds32_vector_27_4b, @function
+_nds32_vector_27_4b:
+1:
+ j 1b
+ .size _nds32_vector_27_4b, .-_nds32_vector_27_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28.S
new file mode 100644
index 000000000..d9de47291
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.28, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_28
+ .type _nds32_vector_28, @function
+_nds32_vector_28:
+1:
+ j 1b
+ .size _nds32_vector_28, .-_nds32_vector_28
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28_4b.S
new file mode 100644
index 000000000..caf9f15fd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid28_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.28, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_28_4b
+ .type _nds32_vector_28_4b, @function
+_nds32_vector_28_4b:
+1:
+ j 1b
+ .size _nds32_vector_28_4b, .-_nds32_vector_28_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29.S
new file mode 100644
index 000000000..9ac7af077
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.29, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_29
+ .type _nds32_vector_29, @function
+_nds32_vector_29:
+1:
+ j 1b
+ .size _nds32_vector_29, .-_nds32_vector_29
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29_4b.S
new file mode 100644
index 000000000..4c8529f78
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid29_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.29, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_29_4b
+ .type _nds32_vector_29_4b, @function
+_nds32_vector_29_4b:
+1:
+ j 1b
+ .size _nds32_vector_29_4b, .-_nds32_vector_29_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30.S
new file mode 100644
index 000000000..2b4165a2e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.30, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_30
+ .type _nds32_vector_30, @function
+_nds32_vector_30:
+1:
+ j 1b
+ .size _nds32_vector_30, .-_nds32_vector_30
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30_4b.S
new file mode 100644
index 000000000..80e1d80fa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid30_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.30, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_30_4b
+ .type _nds32_vector_30_4b, @function
+_nds32_vector_30_4b:
+1:
+ j 1b
+ .size _nds32_vector_30_4b, .-_nds32_vector_30_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31.S
new file mode 100644
index 000000000..f6ffcf6f3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.31, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_31
+ .type _nds32_vector_31, @function
+_nds32_vector_31:
+1:
+ j 1b
+ .size _nds32_vector_31, .-_nds32_vector_31
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31_4b.S
new file mode 100644
index 000000000..5503c611a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid31_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.31, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_31_4b
+ .type _nds32_vector_31_4b, @function
+_nds32_vector_31_4b:
+1:
+ j 1b
+ .size _nds32_vector_31_4b, .-_nds32_vector_31_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32.S
new file mode 100644
index 000000000..5a0250a48
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.32, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_32
+ .type _nds32_vector_32, @function
+_nds32_vector_32:
+1:
+ j 1b
+ .size _nds32_vector_32, .-_nds32_vector_32
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32_4b.S
new file mode 100644
index 000000000..4a606f051
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid32_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.32, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_32_4b
+ .type _nds32_vector_32_4b, @function
+_nds32_vector_32_4b:
+1:
+ j 1b
+ .size _nds32_vector_32_4b, .-_nds32_vector_32_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33.S
new file mode 100644
index 000000000..5efcbdf74
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.33, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_33
+ .type _nds32_vector_33, @function
+_nds32_vector_33:
+1:
+ j 1b
+ .size _nds32_vector_33, .-_nds32_vector_33
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33_4b.S
new file mode 100644
index 000000000..ad8556235
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid33_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.33, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_33_4b
+ .type _nds32_vector_33_4b, @function
+_nds32_vector_33_4b:
+1:
+ j 1b
+ .size _nds32_vector_33_4b, .-_nds32_vector_33_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34.S
new file mode 100644
index 000000000..4859c93ec
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.34, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_34
+ .type _nds32_vector_34, @function
+_nds32_vector_34:
+1:
+ j 1b
+ .size _nds32_vector_34, .-_nds32_vector_34
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34_4b.S
new file mode 100644
index 000000000..3cd9484aa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid34_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.34, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_34_4b
+ .type _nds32_vector_34_4b, @function
+_nds32_vector_34_4b:
+1:
+ j 1b
+ .size _nds32_vector_34_4b, .-_nds32_vector_34_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35.S
new file mode 100644
index 000000000..cd7b7183b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.35, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_35
+ .type _nds32_vector_35, @function
+_nds32_vector_35:
+1:
+ j 1b
+ .size _nds32_vector_35, .-_nds32_vector_35
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35_4b.S
new file mode 100644
index 000000000..401e6a25d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid35_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.35, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_35_4b
+ .type _nds32_vector_35_4b, @function
+_nds32_vector_35_4b:
+1:
+ j 1b
+ .size _nds32_vector_35_4b, .-_nds32_vector_35_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36.S
new file mode 100644
index 000000000..3162b4fa4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.36, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_36
+ .type _nds32_vector_36, @function
+_nds32_vector_36:
+1:
+ j 1b
+ .size _nds32_vector_36, .-_nds32_vector_36
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36_4b.S
new file mode 100644
index 000000000..c23f65d0a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid36_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.36, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_36_4b
+ .type _nds32_vector_36_4b, @function
+_nds32_vector_36_4b:
+1:
+ j 1b
+ .size _nds32_vector_36_4b, .-_nds32_vector_36_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37.S
new file mode 100644
index 000000000..bdb1f15e3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.37, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_37
+ .type _nds32_vector_37, @function
+_nds32_vector_37:
+1:
+ j 1b
+ .size _nds32_vector_37, .-_nds32_vector_37
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37_4b.S
new file mode 100644
index 000000000..a8f5249d6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid37_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.37, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_37_4b
+ .type _nds32_vector_37_4b, @function
+_nds32_vector_37_4b:
+1:
+ j 1b
+ .size _nds32_vector_37_4b, .-_nds32_vector_37_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38.S
new file mode 100644
index 000000000..af0fb2a3f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.38, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_38
+ .type _nds32_vector_38, @function
+_nds32_vector_38:
+1:
+ j 1b
+ .size _nds32_vector_38, .-_nds32_vector_38
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38_4b.S
new file mode 100644
index 000000000..2941a6917
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid38_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.38, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_38_4b
+ .type _nds32_vector_38_4b, @function
+_nds32_vector_38_4b:
+1:
+ j 1b
+ .size _nds32_vector_38_4b, .-_nds32_vector_38_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39.S
new file mode 100644
index 000000000..31220fe1f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.39, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_39
+ .type _nds32_vector_39, @function
+_nds32_vector_39:
+1:
+ j 1b
+ .size _nds32_vector_39, .-_nds32_vector_39
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39_4b.S
new file mode 100644
index 000000000..21efbfdfa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid39_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.39, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_39_4b
+ .type _nds32_vector_39_4b, @function
+_nds32_vector_39_4b:
+1:
+ j 1b
+ .size _nds32_vector_39_4b, .-_nds32_vector_39_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40.S
new file mode 100644
index 000000000..ae7b055dd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.40, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_40
+ .type _nds32_vector_40, @function
+_nds32_vector_40:
+1:
+ j 1b
+ .size _nds32_vector_40, .-_nds32_vector_40
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40_4b.S
new file mode 100644
index 000000000..fd3787604
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid40_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.40, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_40_4b
+ .type _nds32_vector_40_4b, @function
+_nds32_vector_40_4b:
+1:
+ j 1b
+ .size _nds32_vector_40_4b, .-_nds32_vector_40_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41.S
new file mode 100644
index 000000000..8392e63d1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.41, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_41
+ .type _nds32_vector_41, @function
+_nds32_vector_41:
+1:
+ j 1b
+ .size _nds32_vector_41, .-_nds32_vector_41
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41_4b.S
new file mode 100644
index 000000000..867d28d3b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid41_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.41, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_41_4b
+ .type _nds32_vector_41_4b, @function
+_nds32_vector_41_4b:
+1:
+ j 1b
+ .size _nds32_vector_41_4b, .-_nds32_vector_41_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42.S
new file mode 100644
index 000000000..b9e9a7078
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.42, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_42
+ .type _nds32_vector_42, @function
+_nds32_vector_42:
+1:
+ j 1b
+ .size _nds32_vector_42, .-_nds32_vector_42
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42_4b.S
new file mode 100644
index 000000000..69b76873d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid42_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.42, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_42_4b
+ .type _nds32_vector_42_4b, @function
+_nds32_vector_42_4b:
+1:
+ j 1b
+ .size _nds32_vector_42_4b, .-_nds32_vector_42_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43.S
new file mode 100644
index 000000000..4d3ac72f9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.43, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_43
+ .type _nds32_vector_43, @function
+_nds32_vector_43:
+1:
+ j 1b
+ .size _nds32_vector_43, .-_nds32_vector_43
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43_4b.S
new file mode 100644
index 000000000..7ae8c1add
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid43_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.43, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_43_4b
+ .type _nds32_vector_43_4b, @function
+_nds32_vector_43_4b:
+1:
+ j 1b
+ .size _nds32_vector_43_4b, .-_nds32_vector_43_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44.S
new file mode 100644
index 000000000..ee44f447f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.44, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_44
+ .type _nds32_vector_44, @function
+_nds32_vector_44:
+1:
+ j 1b
+ .size _nds32_vector_44, .-_nds32_vector_44
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44_4b.S
new file mode 100644
index 000000000..244aeef01
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid44_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.44, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_44_4b
+ .type _nds32_vector_44_4b, @function
+_nds32_vector_44_4b:
+1:
+ j 1b
+ .size _nds32_vector_44_4b, .-_nds32_vector_44_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45.S
new file mode 100644
index 000000000..fe4f619c0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.45, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_45
+ .type _nds32_vector_45, @function
+_nds32_vector_45:
+1:
+ j 1b
+ .size _nds32_vector_45, .-_nds32_vector_45
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45_4b.S
new file mode 100644
index 000000000..0b0da918b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid45_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.45, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_45_4b
+ .type _nds32_vector_45_4b, @function
+_nds32_vector_45_4b:
+1:
+ j 1b
+ .size _nds32_vector_45_4b, .-_nds32_vector_45_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46.S
new file mode 100644
index 000000000..d796b9bc1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.46, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_46
+ .type _nds32_vector_46, @function
+_nds32_vector_46:
+1:
+ j 1b
+ .size _nds32_vector_46, .-_nds32_vector_46
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46_4b.S
new file mode 100644
index 000000000..9268b3eff
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid46_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.46, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_46_4b
+ .type _nds32_vector_46_4b, @function
+_nds32_vector_46_4b:
+1:
+ j 1b
+ .size _nds32_vector_46_4b, .-_nds32_vector_46_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47.S
new file mode 100644
index 000000000..2923a7abb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.47, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_47
+ .type _nds32_vector_47, @function
+_nds32_vector_47:
+1:
+ j 1b
+ .size _nds32_vector_47, .-_nds32_vector_47
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47_4b.S
new file mode 100644
index 000000000..a530380af
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid47_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.47, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_47_4b
+ .type _nds32_vector_47_4b, @function
+_nds32_vector_47_4b:
+1:
+ j 1b
+ .size _nds32_vector_47_4b, .-_nds32_vector_47_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48.S
new file mode 100644
index 000000000..4b65412f7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.48, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_48
+ .type _nds32_vector_48, @function
+_nds32_vector_48:
+1:
+ j 1b
+ .size _nds32_vector_48, .-_nds32_vector_48
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48_4b.S
new file mode 100644
index 000000000..7210fb1b9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid48_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.48, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_48_4b
+ .type _nds32_vector_48_4b, @function
+_nds32_vector_48_4b:
+1:
+ j 1b
+ .size _nds32_vector_48_4b, .-_nds32_vector_48_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49.S
new file mode 100644
index 000000000..8af230502
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.49, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_49
+ .type _nds32_vector_49, @function
+_nds32_vector_49:
+1:
+ j 1b
+ .size _nds32_vector_49, .-_nds32_vector_49
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49_4b.S
new file mode 100644
index 000000000..f9c287405
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid49_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.49, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_49_4b
+ .type _nds32_vector_49_4b, @function
+_nds32_vector_49_4b:
+1:
+ j 1b
+ .size _nds32_vector_49_4b, .-_nds32_vector_49_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50.S
new file mode 100644
index 000000000..c2538c90b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.50, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_50
+ .type _nds32_vector_50, @function
+_nds32_vector_50:
+1:
+ j 1b
+ .size _nds32_vector_50, .-_nds32_vector_50
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50_4b.S
new file mode 100644
index 000000000..a994cb134
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid50_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.50, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_50_4b
+ .type _nds32_vector_50_4b, @function
+_nds32_vector_50_4b:
+1:
+ j 1b
+ .size _nds32_vector_50_4b, .-_nds32_vector_50_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51.S
new file mode 100644
index 000000000..41abff724
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.51, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_51
+ .type _nds32_vector_51, @function
+_nds32_vector_51:
+1:
+ j 1b
+ .size _nds32_vector_51, .-_nds32_vector_51
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51_4b.S
new file mode 100644
index 000000000..0c8f400c2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid51_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.51, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_51_4b
+ .type _nds32_vector_51_4b, @function
+_nds32_vector_51_4b:
+1:
+ j 1b
+ .size _nds32_vector_51_4b, .-_nds32_vector_51_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52.S
new file mode 100644
index 000000000..da40b63f5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.52, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_52
+ .type _nds32_vector_52, @function
+_nds32_vector_52:
+1:
+ j 1b
+ .size _nds32_vector_52, .-_nds32_vector_52
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52_4b.S
new file mode 100644
index 000000000..2e967bc7b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid52_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.52, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_52_4b
+ .type _nds32_vector_52_4b, @function
+_nds32_vector_52_4b:
+1:
+ j 1b
+ .size _nds32_vector_52_4b, .-_nds32_vector_52_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53.S
new file mode 100644
index 000000000..327fc0562
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.53, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_53
+ .type _nds32_vector_53, @function
+_nds32_vector_53:
+1:
+ j 1b
+ .size _nds32_vector_53, .-_nds32_vector_53
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53_4b.S
new file mode 100644
index 000000000..1a1e657e6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid53_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.53, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_53_4b
+ .type _nds32_vector_53_4b, @function
+_nds32_vector_53_4b:
+1:
+ j 1b
+ .size _nds32_vector_53_4b, .-_nds32_vector_53_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54.S
new file mode 100644
index 000000000..368013a37
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.54, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_54
+ .type _nds32_vector_54, @function
+_nds32_vector_54:
+1:
+ j 1b
+ .size _nds32_vector_54, .-_nds32_vector_54
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54_4b.S
new file mode 100644
index 000000000..46008e494
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid54_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.54, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_54_4b
+ .type _nds32_vector_54_4b, @function
+_nds32_vector_54_4b:
+1:
+ j 1b
+ .size _nds32_vector_54_4b, .-_nds32_vector_54_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55.S
new file mode 100644
index 000000000..d9a597e53
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.55, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_55
+ .type _nds32_vector_55, @function
+_nds32_vector_55:
+1:
+ j 1b
+ .size _nds32_vector_55, .-_nds32_vector_55
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55_4b.S
new file mode 100644
index 000000000..71b39721c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid55_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.55, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_55_4b
+ .type _nds32_vector_55_4b, @function
+_nds32_vector_55_4b:
+1:
+ j 1b
+ .size _nds32_vector_55_4b, .-_nds32_vector_55_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56.S
new file mode 100644
index 000000000..f82174856
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.56, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_56
+ .type _nds32_vector_56, @function
+_nds32_vector_56:
+1:
+ j 1b
+ .size _nds32_vector_56, .-_nds32_vector_56
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56_4b.S
new file mode 100644
index 000000000..bd43a4507
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid56_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.56, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_56_4b
+ .type _nds32_vector_56_4b, @function
+_nds32_vector_56_4b:
+1:
+ j 1b
+ .size _nds32_vector_56_4b, .-_nds32_vector_56_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57.S
new file mode 100644
index 000000000..f9ec9d852
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.57, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_57
+ .type _nds32_vector_57, @function
+_nds32_vector_57:
+1:
+ j 1b
+ .size _nds32_vector_57, .-_nds32_vector_57
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57_4b.S
new file mode 100644
index 000000000..136111b01
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid57_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.57, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_57_4b
+ .type _nds32_vector_57_4b, @function
+_nds32_vector_57_4b:
+1:
+ j 1b
+ .size _nds32_vector_57_4b, .-_nds32_vector_57_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58.S
new file mode 100644
index 000000000..af682b1af
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.58, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_58
+ .type _nds32_vector_58, @function
+_nds32_vector_58:
+1:
+ j 1b
+ .size _nds32_vector_58, .-_nds32_vector_58
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58_4b.S
new file mode 100644
index 000000000..19cc66446
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid58_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.58, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_58_4b
+ .type _nds32_vector_58_4b, @function
+_nds32_vector_58_4b:
+1:
+ j 1b
+ .size _nds32_vector_58_4b, .-_nds32_vector_58_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59.S
new file mode 100644
index 000000000..dd762a988
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.59, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_59
+ .type _nds32_vector_59, @function
+_nds32_vector_59:
+1:
+ j 1b
+ .size _nds32_vector_59, .-_nds32_vector_59
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59_4b.S
new file mode 100644
index 000000000..d51299334
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid59_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.59, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_59_4b
+ .type _nds32_vector_59_4b, @function
+_nds32_vector_59_4b:
+1:
+ j 1b
+ .size _nds32_vector_59_4b, .-_nds32_vector_59_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60.S
new file mode 100644
index 000000000..1d6012f11
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.60, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_60
+ .type _nds32_vector_60, @function
+_nds32_vector_60:
+1:
+ j 1b
+ .size _nds32_vector_60, .-_nds32_vector_60
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60_4b.S
new file mode 100644
index 000000000..7ac29a1dd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid60_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.60, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_60_4b
+ .type _nds32_vector_60_4b, @function
+_nds32_vector_60_4b:
+1:
+ j 1b
+ .size _nds32_vector_60_4b, .-_nds32_vector_60_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61.S
new file mode 100644
index 000000000..d236e6b9d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.61, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_61
+ .type _nds32_vector_61, @function
+_nds32_vector_61:
+1:
+ j 1b
+ .size _nds32_vector_61, .-_nds32_vector_61
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61_4b.S
new file mode 100644
index 000000000..b5f396b87
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid61_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.61, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_61_4b
+ .type _nds32_vector_61_4b, @function
+_nds32_vector_61_4b:
+1:
+ j 1b
+ .size _nds32_vector_61_4b, .-_nds32_vector_61_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62.S
new file mode 100644
index 000000000..83a80bd54
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.62, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_62
+ .type _nds32_vector_62, @function
+_nds32_vector_62:
+1:
+ j 1b
+ .size _nds32_vector_62, .-_nds32_vector_62
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62_4b.S
new file mode 100644
index 000000000..20a7acd9b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid62_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.62, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_62_4b
+ .type _nds32_vector_62_4b, @function
+_nds32_vector_62_4b:
+1:
+ j 1b
+ .size _nds32_vector_62_4b, .-_nds32_vector_62_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63.S
new file mode 100644
index 000000000..800827b32
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.63, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_63
+ .type _nds32_vector_63, @function
+_nds32_vector_63:
+1:
+ j 1b
+ .size _nds32_vector_63, .-_nds32_vector_63
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63_4b.S
new file mode 100644
index 000000000..ffb181666
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid63_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.63, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_63_4b
+ .type _nds32_vector_63_4b, @function
+_nds32_vector_63_4b:
+1:
+ j 1b
+ .size _nds32_vector_63_4b, .-_nds32_vector_63_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64.S
new file mode 100644
index 000000000..bf15d00a8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.64, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_64
+ .type _nds32_vector_64, @function
+_nds32_vector_64:
+1:
+ j 1b
+ .size _nds32_vector_64, .-_nds32_vector_64
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64_4b.S
new file mode 100644
index 000000000..996c31908
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid64_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.64, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_64_4b
+ .type _nds32_vector_64_4b, @function
+_nds32_vector_64_4b:
+1:
+ j 1b
+ .size _nds32_vector_64_4b, .-_nds32_vector_64_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65.S
new file mode 100644
index 000000000..c37927b98
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.65, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_65
+ .type _nds32_vector_65, @function
+_nds32_vector_65:
+1:
+ j 1b
+ .size _nds32_vector_65, .-_nds32_vector_65
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65_4b.S
new file mode 100644
index 000000000..c8a0c3e94
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid65_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.65, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_65_4b
+ .type _nds32_vector_65_4b, @function
+_nds32_vector_65_4b:
+1:
+ j 1b
+ .size _nds32_vector_65_4b, .-_nds32_vector_65_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66.S
new file mode 100644
index 000000000..8ef537b21
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.66, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_66
+ .type _nds32_vector_66, @function
+_nds32_vector_66:
+1:
+ j 1b
+ .size _nds32_vector_66, .-_nds32_vector_66
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66_4b.S
new file mode 100644
index 000000000..c6eb4129e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid66_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.66, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_66_4b
+ .type _nds32_vector_66_4b, @function
+_nds32_vector_66_4b:
+1:
+ j 1b
+ .size _nds32_vector_66_4b, .-_nds32_vector_66_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67.S
new file mode 100644
index 000000000..fd8b42480
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.67, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_67
+ .type _nds32_vector_67, @function
+_nds32_vector_67:
+1:
+ j 1b
+ .size _nds32_vector_67, .-_nds32_vector_67
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67_4b.S
new file mode 100644
index 000000000..27a797aa4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid67_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.67, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_67_4b
+ .type _nds32_vector_67_4b, @function
+_nds32_vector_67_4b:
+1:
+ j 1b
+ .size _nds32_vector_67_4b, .-_nds32_vector_67_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68.S
new file mode 100644
index 000000000..08e8ba916
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.68, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_68
+ .type _nds32_vector_68, @function
+_nds32_vector_68:
+1:
+ j 1b
+ .size _nds32_vector_68, .-_nds32_vector_68
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68_4b.S
new file mode 100644
index 000000000..de57f6bab
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid68_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.68, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_68_4b
+ .type _nds32_vector_68_4b, @function
+_nds32_vector_68_4b:
+1:
+ j 1b
+ .size _nds32_vector_68_4b, .-_nds32_vector_68_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69.S
new file mode 100644
index 000000000..1bd459b99
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.69, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_69
+ .type _nds32_vector_69, @function
+_nds32_vector_69:
+1:
+ j 1b
+ .size _nds32_vector_69, .-_nds32_vector_69
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69_4b.S
new file mode 100644
index 000000000..89073d826
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid69_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.69, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_69_4b
+ .type _nds32_vector_69_4b, @function
+_nds32_vector_69_4b:
+1:
+ j 1b
+ .size _nds32_vector_69_4b, .-_nds32_vector_69_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70.S
new file mode 100644
index 000000000..be517b713
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.70, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_70
+ .type _nds32_vector_70, @function
+_nds32_vector_70:
+1:
+ j 1b
+ .size _nds32_vector_70, .-_nds32_vector_70
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70_4b.S
new file mode 100644
index 000000000..5dd016df3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid70_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.70, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_70_4b
+ .type _nds32_vector_70_4b, @function
+_nds32_vector_70_4b:
+1:
+ j 1b
+ .size _nds32_vector_70_4b, .-_nds32_vector_70_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71.S
new file mode 100644
index 000000000..54f38c56a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.71, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_71
+ .type _nds32_vector_71, @function
+_nds32_vector_71:
+1:
+ j 1b
+ .size _nds32_vector_71, .-_nds32_vector_71
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71_4b.S
new file mode 100644
index 000000000..f851043f7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid71_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.71, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_71_4b
+ .type _nds32_vector_71_4b, @function
+_nds32_vector_71_4b:
+1:
+ j 1b
+ .size _nds32_vector_71_4b, .-_nds32_vector_71_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72.S
new file mode 100644
index 000000000..2faeba682
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.72, "ax"
+ .vec_size 16
+ .align 4
+ .weak _nds32_vector_72
+ .type _nds32_vector_72, @function
+_nds32_vector_72:
+1:
+ j 1b
+ .size _nds32_vector_72, .-_nds32_vector_72
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72_4b.S b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72_4b.S
new file mode 100644
index 000000000..d7638fe04
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/vec_vid72_4b.S
@@ -0,0 +1,34 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_vector.72, "ax"
+ .vec_size 4
+ .align 2
+ .weak _nds32_vector_72_4b
+ .type _nds32_vector_72_4b, @function
+_nds32_vector_72_4b:
+1:
+ j 1b
+ .size _nds32_vector_72_4b, .-_nds32_vector_72_4b
diff --git a/gcc-4.9/libgcc/config/nds32/isr-library/wrh.S b/gcc-4.9/libgcc/config/nds32/isr-library/wrh.S
new file mode 100644
index 000000000..bf5e1c038
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/isr-library/wrh.S
@@ -0,0 +1,32 @@
+/* c-isr library stuff of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .nds32_wrh, "a"
+ .align 2
+ .weak _nds32_wrh
+ .type _nds32_wrh, @object
+_nds32_wrh:
+ .word 0
+ .size _nds32_wrh, .-_nds32_wrh
diff --git a/gcc-4.9/libgcc/config/nds32/lib1asmsrc-mculib.S b/gcc-4.9/libgcc/config/nds32/lib1asmsrc-mculib.S
new file mode 100644
index 000000000..6e1c3d07a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/lib1asmsrc-mculib.S
@@ -0,0 +1,5213 @@
+/* mculib libgcc routines of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .mdebug.abi_nds32
+ .previous
+
+
+/* ------------------------------------------- */
+/* FPBIT floating point operations for libgcc */
+/* ------------------------------------------- */
+
+#ifdef L_addsub_sf
+
+ .text
+ .align 2
+ .global __subsf3
+ .type __subsf3, @function
+__subsf3:
+ push $lp
+ pushm $r6, $r9
+
+ move $r2, #0x80000000
+ xor $r1, $r1, $r2
+
+ j .Lsfpadd
+
+ .global __addsf3
+ .type __addsf3, @function
+__addsf3:
+ push $lp
+ pushm $r6, $r9
+.Lsfpadd:
+ srli $r5, $r0, #23
+ andi $r5, $r5, #0xff
+ srli $r7, $r1, #23
+ andi $r7, $r7, #0xff
+ move $r3, #0x80000000
+ slli $r4, $r0, #8
+ or $r4, $r4, $r3
+ slli $r6, $r1, #8
+ or $r6, $r6, $r3
+
+ addi $r9, $r5, #-1
+ slti $r15, $r9, #0xfe
+ beqzs8 .LEspecA
+
+.LElab1:
+ addi $r9, $r7, #-1
+ slti $r15, $r9, #0xfe
+ beqzs8 .LEspecB
+
+.LElab2:
+ sub $r8, $r5, $r7
+ sltsi $r15, $r8, #0
+ bnezs8 .Li1
+ sltsi $r15, $r8, #0x20
+ bnezs8 .Li2
+ move $r6, #2
+ j .Le1
+.Li2:
+ move $r2, $r6
+ srl $r6, $r6, $r8
+ sll $r9, $r6, $r8
+ beq $r9, $r2, .Le1
+ ori $r6, $r6, #2
+ j .Le1
+.Li1:
+ move $r5, $r7
+ subri $r8, $r8, #0
+ sltsi $r15, $r8, #0x20
+ bnezs8 .Li4
+ move $r4, #2
+ j .Le1
+.Li4:
+ move $r2, $r4
+ srl $r4, $r4, $r8
+ sll $r9, $r4, $r8
+ beq $r9, $r2, .Le1
+ ori $r4, $r4, #2
+
+.Le1:
+ and $r8, $r0, $r3
+ xor $r9, $r8, $r1
+ sltsi $r15, $r9, #0
+ bnezs8 .LEsub1
+
+ #ADD($r4, $r6)
+ add $r4, $r4, $r6
+ slt $r15, $r4, $r6
+ beqzs8 .LEres
+ andi $r9, $r4, #1
+ beqz $r9, .Li7
+ ori $r4, $r4, #2
+.Li7:
+ srli $r4, $r4, #1
+ addi $r5, $r5, #1
+ subri $r15, $r5, #0xff
+ bnezs8 .LEres
+ move $r4, #0
+ j .LEres
+
+.LEsub1:
+ #SUB($r4, $r6)
+ move $r15, $r4
+ sub $r4, $r4, $r6
+ slt $r15, $r15, $r4
+ beqzs8 .Li9
+ subri $r4, $r4, #0
+ xor $r8, $r8, $r3
+ j .Le9
+.Li9:
+ beqz $r4, .LEzer
+.Le9:
+#ifdef __NDS32_PERF_EXT__
+ clz $r2, $r4
+#else
+ pushm $r0, $r1
+ pushm $r3, $r5
+ move $r0, $r4
+ bal __clzsi2
+ move $r2, $r0
+ popm $r3, $r5
+ popm $r0, $r1
+#endif
+ sub $r5, $r5, $r2
+ sll $r4, $r4, $r2
+
+.LEres:
+ blez $r5, .LEund
+
+.LElab12:
+ #ADD($r4, $0x80)
+ move $r15, #0x80
+ add $r4, $r4, $r15
+ slt $r15, $r4, $r15
+
+ #ADDC($r5, $0x0)
+ add $r5, $r5, $r15
+ srli $r9, $r4, #8
+ andi $r9, $r9, #1
+ sub $r4, $r4, $r9
+ slli $r4, $r4, #1
+ srli $r4, $r4, #9
+ slli $r9, $r5, #23
+ or $r4, $r4, $r9
+ or $r0, $r4, $r8
+
+.LE999:
+ popm $r6, $r9
+ pop $lp
+ ret5 $lp
+
+.LEund:
+ subri $r2, $r5, #1
+ slti $r15, $r2, #0x20
+ beqzs8 .LEzer
+ move $r9, #0x80000000
+ or $r4, $r4, $r9
+ subri $r9, $r2, #0x20
+ sll $r5, $r4, $r9
+ srl $r4, $r4, $r2
+ beqz $r5, .Li10
+ ori $r4, $r4, #1
+.Li10:
+ move $r5, #0
+ addi $r9, $r4, #0x80
+ sltsi $r15, $r9, #0
+ beqzs8 .LElab12
+ move $r5, #1
+ j .LElab12
+
+.LEspecA:
+ bnez $r5, .Li12
+ add $r4, $r4, $r4
+ beqz $r4, .Li13
+#ifdef __NDS32_PERF_EXT__
+ clz $r8, $r4
+#else
+ pushm $r0, $r5
+ move $r0, $r4
+ bal __clzsi2
+ move $r8, $r0
+ popm $r0, $r5
+#endif
+ sub $r5, $r5, $r8
+ sll $r4, $r4, $r8
+ j .LElab1
+.Li13:
+ subri $r15, $r7, #0xff
+ beqzs8 .LEspecB
+ move $r9, #0x80000000
+ bne $r1, $r9, .LEretB
+.Li12:
+ add $r9, $r4, $r4
+ bnez $r9, .LEnan
+ subri $r15, $r7, #0xff
+ bnezs8 .LEretA
+ xor $r9, $r0, $r1
+ sltsi $r15, $r9, #0
+ bnezs8 .LEnan
+ j .LEretB
+
+.LEspecB:
+ bnez $r7, .Li15
+ add $r6, $r6, $r6
+ beqz $r6, .LEretA
+#ifdef __NDS32_PERF_EXT__
+ clz $r8, $r6
+#else
+ pushm $r0, $r5
+ move $r0, $r6
+ bal __clzsi2
+ move $r8, $r0
+ popm $r0, $r5
+#endif
+ sub $r7, $r7, $r8
+ sll $r6, $r6, $r8
+ j .LElab2
+.Li15:
+ add $r9, $r6, $r6
+ bnez $r9, .LEnan
+
+.LEretB:
+ move $r0, $r1
+ j .LE999
+
+.LEretA:
+ j .LE999
+
+.LEzer:
+ move $r0, #0
+ j .LE999
+
+.LEnan:
+ move $r0, #0xffc00000
+ j .LE999
+ .size __subsf3, .-__subsf3
+ .size __addsf3, .-__addsf3
+#endif /* L_addsub_sf */
+
+
+
+#ifdef L_sf_to_si
+
+ .text
+ .align 2
+ .global __fixsfsi
+ .type __fixsfsi, @function
+__fixsfsi:
+ push $lp
+
+ slli $r1, $r0, #8
+ move $r3, #0x80000000
+ or $r1, $r1, $r3
+ srli $r3, $r0, #23
+ andi $r3, $r3, #0xff
+ subri $r2, $r3, #0x9e
+ blez $r2, .LJspec
+ sltsi $r15, $r2, #0x20
+ bnezs8 .Li42
+ move $r0, #0
+ j .LJ999
+.Li42:
+ srl $r1, $r1, $r2
+ sltsi $r15, $r0, #0
+ beqzs8 .Li43
+ subri $r1, $r1, #0
+.Li43:
+ move $r0, $r1
+
+.LJ999:
+ pop $lp
+ ret5 $lp
+
+.LJspec:
+ move $r3, #0x7f800000
+ slt $r15, $r3, $r0
+ beqzs8 .Li44
+ move $r0, #0x80000000
+ j .LJ999
+.Li44:
+ move $r0, #0x7fffffff
+ j .LJ999
+ .size __fixsfsi, .-__fixsfsi
+#endif /* L_sf_to_si */
+
+
+
+#ifdef L_divsi3
+
+ .text
+ .align 2
+ .globl __divsi3
+ .type __divsi3, @function
+__divsi3:
+ ! ---------------------------------------------------------------------
+ ! neg = 0;
+ ! if (a < 0)
+ ! { a = -a;
+ ! neg = !neg;
+ ! }
+ ! ---------------------------------------------------------------------
+ sltsi $r5, $r0, 0 ! $r5 <- neg = (a < 0) ? 1 : 0
+ subri $r4, $r0, 0 ! $r4 <- a = -a
+ cmovn $r0, $r4, $r5 ! $r0 <- a = neg ? -a : a
+.L2:
+ ! ---------------------------------------------------------------------
+ ! if (b < 0)
+ ! ---------------------------------------------------------------------
+ bgez $r1, .L3 ! if b >= 0, skip
+ ! ---------------------------------------------------------------------
+ ! { b=-b;
+ ! neg=!neg;
+ ! }
+ ! ---------------------------------------------------------------------
+ subri $r1, $r1, 0 ! $r1 <- b = -b
+ subri $r5, $r5, 1 ! $r5 <- neg = !neg
+.L3:
+ ! ---------------------------------------------------------------------
+ !!res = udivmodsi4 (a, b, 1);
+ ! res = 0;
+ ! if (den != 0)
+ ! ---------------------------------------------------------------------
+ movi $r2, 0 ! $r2 <- res = 0
+ beqz $r1, .L1 ! if den == 0, skip
+ ! ---------------------------------------------------------------------
+ ! bit = 1;
+ ! ---------------------------------------------------------------------
+ movi $r4, 1 ! $r4 <- bit = 1
+#ifndef __OPTIMIZE_SIZE__
+.L6:
+#endif
+ ! ---------------------------------------------------------------------
+ ! while (den < num && bit && !(den & (1L << 31)))
+ ! ---------------------------------------------------------------------
+ slt $ta, $r1, $r0 ! $ta <- den < num ?
+ beqz $ta, .L5 ! if no, skip
+ ! ---------------------------------------------------------------------
+ ! { den << = 1;
+ ! bit << = 1;
+ ! }
+ ! ---------------------------------------------------------------------
+#if defined (__OPTIMIZE_SIZE__) && !defined (__NDS32_ISA_V3M__)
+ clz $r3, $r1 ! $r3 <- leading zero count for den
+ clz $ta, $r0 ! $ta <- leading zero count for num
+ sub $r3, $r3, $ta ! $r3 <- number of bits to shift
+ sll $r1, $r1, $r3 ! $r1 <- den
+ sll $r4, $r4, $r3 ! $r2 <- bit
+#else
+ slli $r1, $r1, 1 ! $r1 <- den << = 1
+ slli $r4, $r4, 1 ! $r4 <- bit << = 1
+ b .L6 ! continue loop
+#endif
+.L5:
+ ! ---------------------------------------------------------------------
+ ! while (bit)
+ ! { if (num >= den)
+ ! ---------------------------------------------------------------------
+ slt $ta, $r0, $r1 ! $ta <- num < den ?
+ bnez $ta, .L9 ! if yes, skip
+ ! ---------------------------------------------------------------------
+ ! { num -= den;
+ ! res |= bit;
+ ! }
+ ! ---------------------------------------------------------------------
+ sub $r0, $r0, $r1 ! $r0 <- num -= den
+ or $r2, $r2, $r4 ! $r2 <- res |= bit
+.L9:
+ ! ---------------------------------------------------------------------
+ ! bit >> = 1;
+ ! den >> = 1;
+ ! }
+ !!if (modwanted)
+ !! return num;
+ !!return res;
+ ! ---------------------------------------------------------------------
+ srli $r4, $r4, 1 ! $r4 <- bit >> = 1
+ srli $r1, $r1, 1 ! $r1 <- den >> = 1
+ bnez $r4, .L5 ! if bit != 0, continue loop
+.L1:
+ ! ---------------------------------------------------------------------
+ ! if (neg)
+ ! res = -res;
+ ! return res;
+ ! ---------------------------------------------------------------------
+ subri $r0, $r2, 0 ! $r0 <- -res
+ cmovz $r0, $r2, $r5 ! $r0 <- neg ? -res : res
+ ! ---------------------------------------------------------------------
+ ret
+ .size __divsi3, .-__divsi3
+#endif /* L_divsi3 */
+
+
+
+#ifdef L_divdi3
+
+ !--------------------------------------
+ #ifdef __big_endian__
+ #define V1H $r0
+ #define V1L $r1
+ #define V2H $r2
+ #define V2L $r3
+ #else
+ #define V1H $r1
+ #define V1L $r0
+ #define V2H $r3
+ #define V2L $r2
+ #endif
+ !--------------------------------------
+ .text
+ .align 2
+ .globl __divdi3
+ .type __divdi3, @function
+__divdi3:
+ ! prologue
+#ifdef __NDS32_ISA_V3M__
+ push25 $r10, 0
+#else
+ smw.adm $r6, [$sp], $r10, 2
+#endif
+ ! end of prologue
+ move $r8, V1L
+ move $r9, V1H
+ move $r6, V2L
+ move $r7, V2H
+ movi $r10, 0
+ bgez V1H, .L80
+ bal __negdi2
+ move $r8, V1L
+ move $r9, V1H
+ movi $r10, -1
+.L80:
+ bgez $r7, .L81
+ move V1L, $r6
+ move V1H, $r7
+ bal __negdi2
+ move $r6, V1L
+ move $r7, V1H
+ nor $r10, $r10, $r10
+.L81:
+ move V2L, $r6
+ move V2H, $r7
+ move V1L, $r8
+ move V1H, $r9
+ movi $r4, 0
+ bal __udivmoddi4
+ beqz $r10, .L82
+ bal __negdi2
+.L82:
+ ! epilogue
+#ifdef __NDS32_ISA_V3M__
+ pop25 $r10, 0
+#else
+ lmw.bim $r6, [$sp], $r10, 2
+ ret
+#endif
+ .size __divdi3, .-__divdi3
+#endif /* L_divdi3 */
+
+
+
+#ifdef L_modsi3
+
+ .text
+ .align 2
+ .globl __modsi3
+ .type __modsi3, @function
+__modsi3:
+ ! ---------------------------------------------------------------------
+ ! neg=0;
+ ! if (a<0)
+ ! { a=-a;
+ ! neg=1;
+ ! }
+ ! ---------------------------------------------------------------------
+ sltsi $r5, $r0, 0 ! $r5 <- neg < 0 ? 1 : 0
+ subri $r4, $r0, 0 ! $r4 <- -a
+ cmovn $r0, $r4, $r5 ! $r0 <- |a|
+ ! ---------------------------------------------------------------------
+ ! if (b < 0)
+#ifndef __NDS32_PERF_EXT__
+ ! ---------------------------------------------------------------------
+ bgez $r1, .L3 ! if b >= 0, skip
+ ! ---------------------------------------------------------------------
+ ! b = -b;
+ ! ---------------------------------------------------------------------
+ subri $r1, $r1, 0 ! $r1 <- |b|
+.L3:
+ ! ---------------------------------------------------------------------
+ !!res = udivmodsi4 (a, b, 1);
+ ! if (den != 0)
+ ! ---------------------------------------------------------------------
+#else /* __NDS32_PERF_EXT__ */
+ ! b = -b;
+ !!res = udivmodsi4 (a, b, 1);
+ ! if (den != 0)
+ ! ---------------------------------------------------------------------
+ abs $r1, $r1 ! $r1 <- |b|
+#endif /* __NDS32_PERF_EXT__ */
+ beqz $r1, .L1 ! if den == 0, skip
+ ! ---------------------------------------------------------------------
+ ! { bit = 1;
+ ! res = 0;
+ ! ---------------------------------------------------------------------
+ movi $r4, 1 ! $r4 <- bit = 1
+#ifndef __OPTIMIZE_SIZE__
+.L6:
+#endif
+ ! ---------------------------------------------------------------------
+ ! while (den < num&&bit && !(den & (1L << 31)))
+ ! ---------------------------------------------------------------------
+ slt $ta, $r1, $r0 ! $ta <- den < num ?
+ beqz $ta, .L5 ! if no, skip
+ ! ---------------------------------------------------------------------
+ ! { den << = 1;
+ ! bit << = 1;
+ ! }
+ ! ---------------------------------------------------------------------
+#if defined (__OPTIMIZE_SIZE__) && ! defined (__NDS32_ISA_V3M__)
+ clz $r3, $r1 ! $r3 <- leading zero count for den
+ clz $ta, $r0 ! $ta <- leading zero count for num
+ sub $r3, $r3, $ta ! $r3 <- number of bits to shift
+ sll $r1, $r1, $r3 ! $r1 <- den
+ sll $r4, $r4, $r3 ! $r2 <- bit
+#else
+ slli $r1, $r1, 1 ! $r1 <- den << = 1
+ slli $r4, $r4, 1 ! $r4 <- bit << = 1
+ b .L6 ! continue loop
+#endif
+.L5:
+ ! ---------------------------------------------------------------------
+ ! while (bit)
+ ! { if (num >= den)
+ ! { num -= den;
+ ! res |= bit;
+ ! }
+ ! bit >> = 1;
+ ! den >> = 1;
+ ! }
+ ! }
+ !!if (modwanted)
+ !! return num;
+ !!return res;
+ ! ---------------------------------------------------------------------
+ sub $r2, $r0, $r1 ! $r2 <- num - den
+ slt $ta, $r0, $r1 ! $ta <- num < den ?
+ srli $r4, $r4, 1 ! $r4 <- bit >> = 1
+ cmovz $r0, $r2, $ta ! $r0 <- num = (num < den) ? num : num - den
+ srli $r1, $r1, 1 ! $r1 <- den >> = 1
+ bnez $r4, .L5 ! if bit != 0, continue loop
+.L1:
+ ! ---------------------------------------------------------------------
+ ! if (neg)
+ ! res = -res;
+ ! return res;
+ ! ---------------------------------------------------------------------
+ subri $r3, $r0, 0 ! $r3 <- -res
+ cmovn $r0, $r3, $r5 ! $r0 <- neg ? -res : res
+ ! ---------------------------------------------------------------------
+ ret
+ .size __modsi3, .-__modsi3
+#endif /* L_modsi3 */
+
+
+
+#ifdef L_moddi3
+
+ !--------------------------------------
+ #ifdef __big_endian__
+ #define V1H $r0
+ #define V1L $r1
+ #define V2H $r2
+ #define V2L $r3
+ #else
+ #define V1H $r1
+ #define V1L $r0
+ #define V2H $r3
+ #define V2L $r2
+ #endif
+ !--------------------------------------
+ .text
+ .align 2
+ .globl __moddi3
+ .type __moddi3, @function
+__moddi3:
+ ! =====================================================================
+ ! stack allocation:
+ ! sp+32 +-----------------------+
+ ! | $lp |
+ ! sp+28 +-----------------------+
+ ! | $r6 - $r10 |
+ ! sp+8 +-----------------------+
+ ! | |
+ ! sp+4 +-----------------------+
+ ! | |
+ ! sp +-----------------------+
+ ! =====================================================================
+ ! prologue
+#ifdef __NDS32_ISA_V3M__
+ push25 $r10, 8
+#else
+ smw.adm $r6, [$sp], $r10, 2
+ addi $sp, $sp, -8
+#endif
+ ! end of prologue
+ !------------------------------------------
+ ! __moddi3 (DWtype u, DWtype v)
+ ! {
+ ! word_type c = 0;
+ ! DWunion uu = {.ll = u};
+ ! DWunion vv = {.ll = v};
+ ! DWtype w;
+ ! if (uu.s.high < 0)
+ ! c = ~c,
+ ! uu.ll = -uu.ll;
+ !---------------------------------------------
+ move $r8, V1L
+ move $r9, V1H
+ move $r6, V2L
+ move $r7, V2H
+ movi $r10, 0 ! r10 = c = 0
+ bgez V1H, .L80 ! if u > 0 , go L80
+ bal __negdi2
+ move $r8, V1L
+ move $r9, V1H
+ movi $r10, -1 ! r10 = c = ~c
+ !------------------------------------------------
+ ! if (vv.s.high < 0)
+ ! vv.ll = -vv.ll;
+ !----------------------------------------------
+.L80:
+ bgez $r7, .L81 ! if v > 0 , go L81
+ move V1L, $r6
+ move V1H, $r7
+ bal __negdi2
+ move $r6, V1L
+ move $r7, V1H
+ !------------------------------------------
+ ! (void) __udivmoddi4 (uu.ll, vv.ll, &w);
+ ! if (c)
+ ! w = -w;
+ ! return w;
+ !-----------------------------------------
+.L81:
+ move V2L, $r6
+ move V2H, $r7
+ move V1L, $r8
+ move V1H, $r9
+ addi $r4, $sp, 0
+ bal __udivmoddi4
+ lwi $r0, [$sp+(0)] ! le: sp + 0 is low, be: sp + 0 is high
+ lwi $r1, [$sp+(4)] ! le: sp + 4 is low, be: sp + 4 is high
+ beqz $r10, .L82
+ bal __negdi2
+.L82:
+ ! epilogue
+#ifdef __NDS32_ISA_V3M__
+ pop25 $r10, 8
+#else
+ addi $sp, $sp, 8
+ lmw.bim $r6, [$sp], $r10, 2
+ ret
+#endif
+ .size __moddi3, .-__moddi3
+#endif /* L_moddi3 */
+
+
+
+#ifdef L_mulsi3
+
+ .text
+ .align 2
+ .globl __mulsi3
+ .type __mulsi3, @function
+__mulsi3:
+ ! ---------------------------------------------------------------------
+ ! r = 0;
+ ! while (a)
+ ! $r0: r
+ ! $r1: b
+ ! $r2: a
+ ! ---------------------------------------------------------------------
+ beqz $r0, .L7 ! if a == 0, done
+ move $r2, $r0 ! $r2 <- a
+ movi $r0, 0 ! $r0 <- r <- 0
+.L8:
+ ! ---------------------------------------------------------------------
+ ! { if (a & 1)
+ ! r += b;
+ ! a >> = 1;
+ ! b << = 1;
+ ! }
+ ! $r0: r
+ ! $r1: b
+ ! $r2: a
+ ! $r3: scratch
+ ! $r4: scratch
+ ! ---------------------------------------------------------------------
+ andi $r3, $r2, 1 ! $r3 <- a & 1
+ add $r4, $r0, $r1 ! $r4 <- r += b
+ cmovn $r0, $r4, $r3 ! $r0 <- r
+ srli $r2, $r2, 1 ! $r2 <- a >> = 1
+ slli $r1, $r1, 1 ! $r1 <- b << = 1
+ bnez $r2, .L8 ! if a != 0, continue loop
+.L7:
+ ! ---------------------------------------------------------------------
+ ! $r0: return code
+ ! ---------------------------------------------------------------------
+ ret
+ .size __mulsi3, .-__mulsi3
+#endif /* L_mulsi3 */
+
+
+
+#ifdef L_udivsi3
+
+ .text
+ .align 2
+ .globl __udivsi3
+ .type __udivsi3, @function
+__udivsi3:
+ ! ---------------------------------------------------------------------
+ !!res=udivmodsi4(a,b,0);
+ ! res=0;
+ ! if (den!=0)
+ ! ---------------------------------------------------------------------
+ movi $r2, 0 ! $r2 <- res=0
+ beqz $r1, .L1 ! if den==0, skip
+ ! ---------------------------------------------------------------------
+ ! { bit=1;
+ ! ---------------------------------------------------------------------
+ movi $r4, 1 ! $r4 <- bit=1
+#ifndef __OPTIMIZE_SIZE__
+.L6:
+#endif
+ ! ---------------------------------------------------------------------
+ ! while (den<num
+ ! ---------------------------------------------------------------------
+ slt $ta, $r1, $r0 ! $ta <- den<num?
+ beqz $ta, .L5 ! if no, skip
+ ! ---------------------------------------------------------------------
+ ! &&bit&&!(den&(1L<<31)))
+ ! ---------------------------------------------------------------------
+ bltz $r1, .L5 ! if den<0, skip
+ ! ---------------------------------------------------------------------
+ ! { den<<=1;
+ ! bit<<=1;
+ ! }
+ ! ---------------------------------------------------------------------
+#if defined (__OPTIMIZE_SIZE__) && ! defined (__NDS32_ISA_V3M__)
+ clz $r3, $r1 ! $r3 <- leading zero count for den
+ clz $ta, $r0 ! $ta <- leading zero count for num
+ sub $r3, $r3, $ta ! $r3 <- number of bits to shift
+ sll $r1, $r1, $r3 ! $r1 <- den
+ sll $r2, $r2, $r3 ! $r2 <- bit
+#else
+ slli $r1, $r1, 1 ! $r1 <- den<<=1
+ slli $r4, $r4, 1 ! $r4 <- bit<<=1
+ b .L6 ! continue loop
+#endif
+.L5:
+ ! ---------------------------------------------------------------------
+ ! while (bit)
+ ! { if (num>=den)
+ ! ---------------------------------------------------------------------
+ slt $ta, $r0, $r1 ! $ta <- num<den?
+ bnez $ta, .L9 ! if yes, skip
+ ! ---------------------------------------------------------------------
+ ! { num-=den;
+ ! res|=bit;
+ ! }
+ ! ---------------------------------------------------------------------
+ sub $r0, $r0, $r1 ! $r0 <- num-=den
+ or $r2, $r2, $r4 ! $r2 <- res|=bit
+.L9:
+ ! ---------------------------------------------------------------------
+ ! bit>>=1;
+ ! den>>=1;
+ ! }
+ ! }
+ !!if (modwanted)
+ !! return num;
+ !!return res;
+ ! ---------------------------------------------------------------------
+ srli $r4, $r4, 1 ! $r4 <- bit>>=1
+ srli $r1, $r1, 1 ! $r1 <- den>>=1
+ bnez $r4, .L5 ! if bit!=0, continue loop
+.L1:
+ ! ---------------------------------------------------------------------
+ ! return res;
+ ! ---------------------------------------------------------------------
+ move $r0, $r2 ! $r0 <- return value
+ ! ---------------------------------------------------------------------
+ ! ---------------------------------------------------------------------
+ ret
+ .size __udivsi3, .-__udivsi3
+#endif /* L_udivsi3 */
+
+
+
+#ifdef L_udivdi3
+
+ !--------------------------------------
+ #ifdef __big_endian__
+ #define V1H $r0
+ #define V1L $r1
+ #define V2H $r2
+ #define V2L $r3
+ #else
+ #define V1H $r1
+ #define V1L $r0
+ #define V2H $r3
+ #define V2L $r2
+ #endif
+ !--------------------------------------
+
+ .text
+ .align 2
+ .globl __udivdi3
+ .type __udivdi3, @function
+__udivdi3:
+ ! prologue
+#ifdef __NDS32_ISA_V3M__
+ push25 $r8, 0
+#else
+ smw.adm $r6, [$sp], $r8, 2
+#endif
+ ! end of prologue
+ movi $r4, 0
+ bal __udivmoddi4
+ ! epilogue
+#ifdef __NDS32_ISA_V3M__
+ pop25 $r8, 0
+#else
+ lmw.bim $r6, [$sp], $r8, 2
+ ret
+#endif
+ .size __udivdi3, .-__udivdi3
+#endif /* L_udivdi3 */
+
+
+
+#ifdef L_udivmoddi4
+
+ .text
+ .align 2
+ .globl fudiv_qrnnd
+ .type fudiv_qrnnd, @function
+ #ifdef __big_endian__
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+ #define W6H $r4
+ #define W6L $r5
+ #define OFFSET_L 4
+ #define OFFSET_H 0
+ #else
+ #define P1H $r1
+ #define P1L $r0
+ #define P2H $r3
+ #define P2L $r2
+ #define W6H $r5
+ #define W6L $r4
+ #define OFFSET_L 0
+ #define OFFSET_H 4
+ #endif
+fudiv_qrnnd:
+ !------------------------------------------------------
+ ! function: fudiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator)
+ ! divides a UDWtype, composed by the UWtype integers,HIGH_NUMERATOR (from $r4)
+ ! and LOW_NUMERATOR(from $r5) by DENOMINATOR(from $r6), and places the quotient
+ ! in $r7 and the remainder in $r8.
+ !------------------------------------------------------
+ ! in reg:$r4(n1), $r5(n0), $r6(d0)
+ ! __d1 = ((USItype) (d) >> ((4 * 8) / 2));
+ ! __d0 = ((USItype) (d) & (((USItype) 1 << ((4 * 8) / 2)) - 1));
+ ! __r1 = (n1) % __d1;
+ ! __q1 = (n1) / __d1;
+ ! __m = (USItype) __q1 * __d0;
+ ! __r1 = __r1 * ((USItype) 1 << ((4 * 8) / 2)) | ((USItype) (n0) >> ((4 * 8) / 2));
+ ! if (__r1 < __m)
+ ! {
+ !------------------------------------------------------
+ smw.adm $r0, [$sp], $r4, 2 ! store $lp, when use BASELINE_V1,and must store $r0-$r3
+ srli $r7, $r6, 16 ! $r7 = d1 =__ll_highpart (d)
+ movi $ta, 65535
+ and $r8, $r6, $ta ! $r8 = d0 = __ll_lowpart (d)
+
+ divr $r9, $r10, $r4, $r7 ! $r9 = q1, $r10 = r1
+ and $r4, $r5, $ta ! $r4 = __ll_lowpart (n0)
+ slli $r10, $r10, 16 ! $r10 = r1 << 16
+ srli $ta, $r5, 16 ! $ta = __ll_highpart (n0)
+
+ or $r10, $r10, $ta ! $r10 <- $r0|$r3=__r1
+ mul $r5, $r9, $r8 ! $r5 = m = __q1*__d0
+ slt $ta, $r10, $r5 ! $ta <- __r1<__m
+ beqz $ta, .L2 !if yes,skip
+ !------------------------------------------------------
+ ! __q1--, __r1 += (d);
+ ! if (__r1 >= (d))
+ ! {
+ !------------------------------------------------------
+
+ add $r10, $r10, $r6 !$r10 <- __r1+d=__r1
+ addi $r9, $r9, -1 !$r9 <- __q1--=__q1
+ slt $ta, $r10, $r6 !$ta <- __r1<d
+ bnez $ta, .L2 !if yes,skip
+ !------------------------------------------------------
+ ! if (__r1 < __m)
+ ! {
+ !------------------------------------------------------
+
+ slt $ta, $r10, $r5 !$ta <- __r1<__m
+ beqz $ta, .L2 !if yes,skip
+ !------------------------------------------------------
+ ! __q1--, __r1 += (d);
+ ! }
+ ! }
+ ! }
+ !------------------------------------------------------
+
+ addi $r9, $r9, -1 !$r9 <- __q1--=__q1
+ add $r10, $r10, $r6 !$r2 <- __r1+d=__r1
+.L2:
+ !------------------------------------------------------
+ ! __r1 -= __m;
+ ! __r0 = __r1 % __d1;
+ ! __q0 = __r1 / __d1;
+ ! __m = (USItype) __q0 * __d0;
+ ! __r0 = __r0 * ((USItype) 1 << ((4 * 8) / 2)) \
+ ! | ((USItype) (n0) & (((USItype) 1 << ((4 * 8) / 2)) - 1));
+ ! if (__r0 < __m)
+ ! {
+ !------------------------------------------------------
+ sub $r10, $r10, $r5 !$r10 <- __r1-__m=__r1
+ divr $r7, $r10, $r10, $r7 !$r7 <- r1/__d1=__q0,$r10 <- r1%__d1=__r0
+ slli $r10, $r10, 16 !$r10 <- __r0<<16
+ mul $r5, $r8, $r7 !$r5 <- __q0*__d0=__m
+ or $r10, $r4, $r10 !$r3 <- $r0|__ll_lowpart (n0) =__r0
+ slt $ta, $r10, $r5 !$ta <- __r0<__m
+ beqz $ta, .L5 !if yes,skip
+ !------------------------------------------------------
+ ! __q0--, __r0 += (d);
+ ! if (__r0 >= (d))
+ ! {
+ !------------------------------------------------------
+
+ add $r10, $r10, $r6 !$r10 <- __r0+d=__r0
+ addi $r7, $r7, -1 !$r7 <- __q0--=__q0
+ slt $ta, $r10, $r6 !$ta <- __r0<d
+ bnez $ta, .L5 !if yes,skip
+ !------------------------------------------------------
+ ! if (__r0 < __m)
+ ! {
+ !------------------------------------------------------
+
+ slt $ta, $r10, $r5 !$ta <- __r0<__m
+ beqz $ta, .L5 !if yes,skip
+ !------------------------------------------------------
+ ! __q0--, __r0 += (d);
+ ! }
+ ! }
+ ! }
+ !------------------------------------------------------
+
+ add $r10, $r10, $r6 !$r3 <- __r0+d=__r0
+ addi $r7, $r7, -1 !$r2 <- __q0--=__q0
+.L5:
+ !------------------------------------------------------
+ ! __r0 -= __m;
+ ! *q = (USItype) __q1 * ((USItype) 1 << ((4 * 8) / 2)) | __q0;
+ ! *r = __r0;
+ !}
+ !------------------------------------------------------
+
+ sub $r8, $r10, $r5 !$r8 = r = r0 = __r0-__m
+ slli $r9, $r9, 16 !$r9 <- __q1<<16
+ or $r7, $r9, $r7 !$r7 = q = $r9|__q0
+ lmw.bim $r0, [$sp], $r4, 2
+ ret
+ .size fudiv_qrnnd, .-fudiv_qrnnd
+
+ .align 2
+ .globl __udivmoddi4
+ .type __udivmoddi4, @function
+__udivmoddi4:
+ ! =====================================================================
+ ! stack allocation:
+ ! sp+40 +------------------+
+ ! | q1 |
+ ! sp+36 +------------------+
+ ! | q0 |
+ ! sp+32 +------------------+
+ ! | bm |
+ ! sp+28 +------------------+
+ ! | $lp |
+ ! sp+24 +------------------+
+ ! | $fp |
+ ! sp+20 +------------------+
+ ! | $r6 - $r10 |
+ ! sp +------------------+
+ ! =====================================================================
+
+ addi $sp, $sp, -40
+ smw.bi $r6, [$sp], $r10, 10
+ !------------------------------------------------------
+ ! d0 = dd.s.low;
+ ! d1 = dd.s.high;
+ ! n0 = nn.s.low;
+ ! n1 = nn.s.high;
+ ! if (d1 == 0)
+ ! {
+ !------------------------------------------------------
+
+ move $fp, $r4 !$fp <- rp
+ bnez P2H, .L9 !if yes,skip
+ !------------------------------------------------------
+ ! if (d0 > n1)
+ ! {
+ !------------------------------------------------------
+
+ slt $ta, P1H, P2L !$ta <- n1<d0
+ beqz $ta, .L10 !if yes,skip
+#ifndef __NDS32_PERF_EXT__
+ smw.adm $r0, [$sp], $r5, 0
+ move $r0, P2L
+ bal __clzsi2
+ move $r7, $r0
+ lmw.bim $r0, [$sp], $r5, 0
+#else
+ clz $r7, P2L
+#endif
+ swi $r7, [$sp+(28)]
+ beqz $r7, .L18 !if yes,skip
+ !------------------------------------------------------
+ ! d0 = d0 << bm;
+ ! n1 = (n1 << bm) | (n0 >> ((4 * 8) - bm));
+ ! n0 = n0 << bm;
+ ! }
+ !------------------------------------------------------
+
+ subri $r5, $r7, 32 !$r5 <- 32-bm
+ srl $r5, P1L, $r5 !$r5 <- n0>>$r5
+ sll $r6, P1H, $r7 !$r6 <- n1<<bm
+ or P1H, $r6, $r5 !P2h <- $r5|$r6=n1
+ sll P1L, P1L, $r7 !P1H <- n0<<bm=n0
+ sll P2L, P2L, $r7 !P2L <- d0<<bm=d0
+.L18:
+ !------------------------------------------------------
+ ! fudiv_qrnnd (&q0, &n0, n1, n0, d0);
+ ! q1 = 0;
+ ! } #if (d0 > n1)
+ !------------------------------------------------------
+
+ move $r4,P1H ! give fudiv_qrnnd args
+ move $r5,P1L !
+ move $r6,P2L !
+ bal fudiv_qrnnd !calcaulte q0 n0
+ movi $r6, 0 !P1L <- 0
+ swi $r7,[$sp+32] !q0
+ swi $r6,[$sp+36] !q1
+ move P1L,$r8 !n0
+ b .L19
+.L10:
+ !------------------------------------------------------
+ ! else #if (d0 > n1)
+ ! {
+ ! if(d0 == 0)
+ !------------------------------------------------------
+
+ bnez P2L, .L20 !if yes,skip
+ !------------------------------------------------------
+ ! d0 = 1 / d0;
+ !------------------------------------------------------
+
+ movi $r4, 1 !P1L <- 1
+ divr P2L, $r4, $r4, P2L !$r9=1/d0,P1L=1%d0
+.L20:
+
+#ifndef __NDS32_PERF_EXT__
+ smw.adm $r0, [$sp], $r5, 0
+ move $r0, P2L
+ bal __clzsi2
+ move $r7, $r0
+ lmw.bim $r0, [$sp], $r5, 0
+#else
+ clz $r7, P2L
+#endif
+ swi $r7,[$sp+(28)] ! store bm
+ beqz $r7, .L28 ! if yes,skip
+ !------------------------------------------------------
+ ! b = (4 * 8) - bm;
+ ! d0 = d0 << bm;
+ ! n2 = n1 >> b;
+ ! n1 = (n1 << bm) | (n0 >> b);
+ ! n0 = n0 << bm;
+ ! fudiv_qrnnd (&q1, &n1, n2, n1, d0);
+ ! }
+ !------------------------------------------------------
+
+ subri $r10, $r7, 32 !$r10 <- 32-bm=b
+ srl $r4, P1L, $r10 !$r4 <- n0>>b
+ sll $r5, P1H, $r7 !$r5 <- n1<<bm
+ or $r5, $r5, $r4 !$r5 <- $r5|$r4=n1 !for fun
+ sll P2L, P2L, $r7 !P2L <- d0<<bm=d0 !for fun
+ sll P1L, P1L, $r7 !P1L <- n0<<bm=n0
+ srl $r4, P1H, $r10 !$r4 <- n1>>b=n2 !for fun
+
+ move $r6,P2L !for fun
+ bal fudiv_qrnnd !caculate q1, n1
+
+ swi $r7,[$sp+(36)] ! q1 store
+ move P1H,$r8 ! n1 store
+
+ move $r4,$r8 ! prepare for next fudiv_qrnnd()
+ move $r5,P1L
+ move $r6,P2L
+ b .L29
+.L28:
+ !------------------------------------------------------
+ ! else // bm != 0
+ ! {
+ ! n1 -= d0;
+ ! q1 = 1;
+ !
+ !------------------------------------------------------
+
+ sub P1H, P1H, P2L !P1L <- n1-d0=n1
+ movi $ta, 1 !
+ swi $ta, [$sp+(36)] !1 -> [$sp+(36)]
+
+ move $r4,P1H ! give fudiv_qrnnd args
+ move $r5,P1L
+ move $r6,P2L
+.L29:
+ !------------------------------------------------------
+ ! fudiv_qrnnd (&q0, &n0, n1, n0, d0);
+ !------------------------------------------------------
+
+ bal fudiv_qrnnd !calcuate q0, n0
+ swi $r7,[$sp+(32)] !q0 store
+ move P1L,$r8 !n0
+.L19:
+ !------------------------------------------------------
+ ! if (rp != 0)
+ ! {
+ !------------------------------------------------------
+
+ beqz $fp, .L31 !if yes,skip
+ !------------------------------------------------------
+ ! rr.s.low = n0 >> bm;
+ ! rr.s.high = 0;
+ ! *rp = rr.ll;
+ ! }
+ !------------------------------------------------------
+
+ movi $r5, 0 !$r5 <- 0
+ lwi $r7,[$sp+(28)] !load bm
+ srl $r4, P1L, $r7 !$r4 <- n0>>bm
+ swi $r4, [$fp+OFFSET_L] !r0 !$r4 -> [$sp+(48)]
+ swi $r5, [$fp+OFFSET_H] !r1 !0 -> [$sp+(52)]
+ b .L31
+.L9:
+ !------------------------------------------------------
+ ! else # d1 == 0
+ ! {
+ ! if(d1 > n1)
+ ! {
+ !------------------------------------------------------
+
+ slt $ta, P1H, P2H !$ta <- n1<d1
+ beqz $ta, .L32 !if yes,skip
+ !------------------------------------------------------
+ ! q0 = 0;
+ ! q1 = 0;
+ ! if (rp != 0)
+ ! {
+ !------------------------------------------------------
+
+ movi $r5, 0 !$r5 <- 0
+ swi $r5, [$sp+(32)] !q0 !0 -> [$sp+(40)]=q1
+ swi $r5, [$sp+(36)] !q1 !0 -> [$sp+(32)]=q0
+ beqz $fp, .L31 !if yes,skip
+ !------------------------------------------------------
+ ! rr.s.low = n0;
+ ! rr.s.high = n1;
+ ! *rp = rr.ll;
+ ! }
+ !------------------------------------------------------
+
+ swi P1L, [$fp+OFFSET_L] !P1L -> [rp]
+ swi P1H, [$fp+OFFSET_H] !P1H -> [rp+4]
+ b .L31
+.L32:
+#ifndef __NDS32_PERF_EXT__
+ smw.adm $r0, [$sp], $r5, 0
+ move $r0, P2H
+ bal __clzsi2
+ move $r7, $r0
+ lmw.bim $r0, [$sp], $r5, 0
+#else
+ clz $r7,P2H
+#endif
+ swi $r7,[$sp+(28)] !$r7=bm store
+ beqz $r7, .L42 !if yes,skip
+ !------------------------------------------------------
+ ! USItype m1, m0;
+ ! b = (4 * 8) - bm;
+ ! d1 = (d0 >> b) | (d1 << bm);
+ ! d0 = d0 << bm;
+ ! n2 = n1 >> b;
+ ! n1 = (n0 >> b) | (n1 << bm);
+ ! n0 = n0 << bm;
+ ! fudiv_qrnnd (&q0, &n1, n2, n1, d1);
+ !------------------------------------------------------
+
+ subri $r10, $r7, 32 !$r10 <- 32-bm=b
+ srl $r5, P2L, $r10 !$r5 <- d0>>b
+ sll $r6, P2H, $r7 !$r6 <- d1<<bm
+ or $r6, $r5, $r6 !$r6 <- $r5|$r6=d1 !! func
+ move P2H, $r6 !P2H <- d1
+ srl $r4, P1H, $r10 !$r4 <- n1>>b=n2 !!! func
+ srl $r8, P1L, $r10 !$r8 <- n0>>b !!$r8
+ sll $r9, P1H, $r7 !$r9 <- n1<<bm
+ or $r5, $r8, $r9 !$r5 <- $r8|$r9=n1 !func
+ sll P2L, P2L, $r7 !P2L <- d0<<bm=d0
+ sll P1L, P1L, $r7 !P1L <- n0<<bm=n0
+
+ bal fudiv_qrnnd ! cal q0,n1
+ swi $r7,[$sp+(32)]
+ move P1H,$r8 ! fudiv_qrnnd (&q0, &n1, n2, n1, d1);
+ move $r6, $r7 ! from func
+
+ !----------------------------------------------------
+ ! #umul_ppmm (m1, m0, q0, d0);
+ ! do
+ ! { USItype __x0, __x1, __x2, __x3;
+ ! USItype __ul, __vl, __uh, __vh;
+ ! __ul = ((USItype) (q0) & (((USItype) 1 << ((4 * 8) / 2)) - 1));
+ ! __uh = ((USItype) (q0) >> ((4 * 8) / 2));
+ ! __vl = ((USItype) (d0) & (((USItype) 1 << ((4 * 8) / 2)) - 1));
+ ! __vh = ((USItype) (d0) >> ((4 * 8) / 2));
+ ! __x0 = (USItype) __ul * __vl;
+ ! __x1 = (USItype) __ul * __vh;
+ ! __x2 = (USItype) __uh * __vl;
+ ! __x3 = (USItype) __uh * __vh;
+ ! __x1 += ((USItype) (__x0) >> ((4 * 8) / 2));
+ ! __x1 += __x2;
+ ! if (__x1 < __x2)
+ ! __x3 += ((USItype) 1 << ((4 * 8) / 2));
+ ! (m1) = __x3 + ((USItype) (__x1) >> ((4 * 8) / 2));
+ ! (m0) = (USItype)(q0*d0);
+ ! }
+ ! if (m1 > n1)
+ !---------------------------------------------------
+#ifdef __NDS32_ISA_V3M__
+ !mulr64 $r4, P2L, $r6
+ smw.adm $r0, [$sp], $r3, 0
+ move P1L, P2L
+ move P2L, $r6
+ movi P1H, 0
+ movi P2H, 0
+ bal __muldi3
+ movd44 $r4, $r0
+ lmw.bim $r0, [$sp], $r3, 0
+ move $r8, W6H
+ move $r5, W6L
+#else
+ mulr64 $r4, P2L, $r6
+ move $r8, W6H
+ move $r5, W6L
+#endif
+ slt $ta, P1H, $r8 !$ta <- n1<m1
+ bnez $ta, .L46 !if yes,skip
+ !------------------------------------------------------
+ ! if(m1 == n1)
+ !------------------------------------------------------
+
+ bne $r8, P1H, .L45 !if yes,skip
+ !------------------------------------------------------
+ ! if(m0 > n0)
+ !------------------------------------------------------
+
+ slt $ta, P1L, $r5 !$ta <- n0<m0
+ beqz $ta, .L45 !if yes,skip
+.L46:
+ !------------------------------------------------------
+ ! {
+ ! q0--;
+ ! # sub_ddmmss (m1, m0, m1, m0, d1, d0);
+ ! do
+ ! { USItype __x;
+ ! __x = (m0) - (d0);
+ ! (m1) = (m1) - (d1) - (__x > (m0));
+ ! (m0) = __x;
+ ! }
+ ! }
+ !------------------------------------------------------
+
+ sub $r4, $r5, P2L !$r4 <- m0-d0=__x
+ addi $r6, $r6, -1 !$r6 <- q0--=q0
+ sub $r8, $r8, P2H !$r8 <- m1-d1
+ swi $r6, [$sp+(32)] ! q0 !$r6->[$sp+(32)]
+ slt $ta, $r5, $r4 !$ta <- m0<__x
+ sub $r8, $r8, $ta !$r8 <- P1H-P1L=m1
+ move $r5, $r4 !$r5 <- __x=m0
+.L45:
+ !------------------------------------------------------
+ ! q1 = 0;
+ ! if (rp != 0)
+ ! {
+ !------------------------------------------------------
+
+ movi $r4, 0 !$r4 <- 0
+ swi $r4, [$sp+(36)] !0 -> [$sp+(40)]=q1
+ beqz $fp, .L31 !if yes,skip
+ !------------------------------------------------------
+ ! # sub_ddmmss (n1, n0, n1, n0, m1, m0);
+ ! do
+ ! { USItype __x;
+ ! __x = (n0) - (m0);
+ ! (n1) = (n1) - (m1) - (__x > (n0));
+ ! (n0) = __x;
+ ! }
+ ! rr.s.low = (n1 << b) | (n0 >> bm);
+ ! rr.s.high = n1 >> bm;
+ ! *rp = rr.ll;
+ !------------------------------------------------------
+
+ sub $r4, P1H, $r8 !$r4 <- n1-m1
+ sub $r6, P1L, $r5 !$r6 <- n0-m0=__x=n0
+ slt $ta, P1L, $r6 !$ta <- n0<__x
+ sub P1H, $r4, $ta !P1H <- $r4-$ta=n1
+ move P1L, $r6
+
+ lwi $r7,[$sp+(28)] ! load bm
+ subri $r10,$r7,32
+ sll $r4, P1H, $r10 !$r4 <- n1<<b
+ srl $r5, P1L, $r7 !$r5 <- __x>>bm
+ or $r6, $r5, $r4 !$r6 <- $r5|$r4=rr.s.low
+ srl $r8, P1H, $r7 !$r8 <- n1>>bm =rr.s.high
+ swi $r6, [$fp+OFFSET_L] !
+ swi $r8, [$fp+OFFSET_H] !
+ b .L31
+.L42:
+ !------------------------------------------------------
+ ! else
+ ! {
+ ! if(n1 > d1)
+ !------------------------------------------------------
+
+ slt $ta, P2H, P1H !$ta <- P2H<P1H
+ bnez $ta, .L52 !if yes,skip
+ !------------------------------------------------------
+ ! if (n0 >= d0)
+ !------------------------------------------------------
+
+ slt $ta, P1L, P2L !$ta <- P1L<P2L
+ bnez $ta, .L51 !if yes,skip
+ !------------------------------------------------------
+ ! q0 = 1;
+ ! do
+ ! { USItype __x;
+ ! __x = (n0) - (d0);
+ ! (n1) = (n1) - (d1) - (__x > (n0));
+ ! (n0) = __x;
+ ! }
+ !------------------------------------------------------
+.L52:
+ sub $r4, P1H, P2H !$r4 <- P1H-P2H
+ sub $r6, P1L, P2L !$r6 <- no-d0=__x=n0
+ slt $ta, P1L, $r6 !$ta <- no<__x
+ sub P1H, $r4, $ta !P1H <- $r4-$ta=n1
+ move P1L, $r6 !n0
+ movi $r5, 1 !
+ swi $r5, [$sp+(32)] !1 -> [$sp+(32)]=q0
+ b .L54
+.L51:
+ !------------------------------------------------------
+ ! q0 = 0;
+ !------------------------------------------------------
+
+ movi $r5,0
+ swi $r5, [$sp+(32)] !$r5=0 -> [$sp+(32)]
+.L54:
+ !------------------------------------------------------
+ ! q1 = 0;
+ ! if (rp != 0)
+ ! {
+ !------------------------------------------------------
+
+ movi $r5, 0 !
+ swi $r5, [$sp+(36)] !0 -> [$sp+(36)]
+ beqz $fp, .L31
+ !------------------------------------------------------
+ ! rr.s.low = n0;
+ ! rr.s.high = n1;
+ ! *rp = rr.ll;
+ ! }
+ !------------------------------------------------------
+
+ swi P1L, [$fp+OFFSET_L] !remainder
+ swi P1H, [$fp+OFFSET_H] !
+.L31:
+ !------------------------------------------------------
+ ! const DWunion ww = {{.low = q0, .high = q1}};
+ ! return ww.ll;
+ !}
+ !------------------------------------------------------
+
+ lwi P1L, [$sp+(32)] !quotient
+ lwi P1H, [$sp+(36)]
+ lmw.bim $r6, [$sp], $r10, 10
+ addi $sp, $sp, 12
+ ret
+ .size __udivmoddi4, .-__udivmoddi4
+#endif /* L_udivmoddi4 */
+
+
+
+#ifdef L_umodsi3
+
+ ! =====================================================================
+ .text
+ .align 2
+ .globl __umodsi3
+ .type __umodsi3, @function
+__umodsi3:
+ ! ---------------------------------------------------------------------
+ !!res=udivmodsi4(a,b,1);
+ ! if (den==0)
+ ! return num;
+ ! ---------------------------------------------------------------------
+ beqz $r1, .L1 ! if den==0, skip
+ ! ---------------------------------------------------------------------
+ ! bit=1;
+ ! res=0;
+ ! ---------------------------------------------------------------------
+ movi $r4, 1 ! $r4 <- bit=1
+#ifndef __OPTIMIZE_SIZE__
+.L6:
+#endif
+ ! ---------------------------------------------------------------------
+ ! while (den<num
+ ! ---------------------------------------------------------------------
+ slt $ta, $r1, $r0 ! $ta <- den<num?
+ beqz $ta, .L5 ! if no, skip
+ ! ---------------------------------------------------------------------
+ ! &&bit&&!(den&(1L<<31)))
+ ! ---------------------------------------------------------------------
+ bltz $r1, .L5 ! if den<0, skip
+ ! ---------------------------------------------------------------------
+ ! { den<<=1;
+ ! bit<<=1;
+ ! }
+ ! ---------------------------------------------------------------------
+#if defined (__OPTIMIZE_SIZE__) && ! defined (__NDS32_ISA_V3M__)
+ clz $r3, $r1 ! $r3 <- leading zero count for den
+ clz $ta, $r0 ! $ta <- leading zero count for num
+ sub $r3, $r3, $ta ! $r3 <- number of bits to shift
+ sll $r1, $r1, $r3 ! $r1 <- den
+ sll $r4, $r4, $r3 ! $r2 <- bit
+#else
+ slli $r1, $r1, 1 ! $r1 <- den<<=1
+ slli $r4, $r4, 1 ! $r4 <- bit<<=1
+ b .L6 ! continue loop
+#endif
+.L5:
+ ! ---------------------------------------------------------------------
+ ! while (bit)
+ ! { if (num>=den)
+ ! { num-=den;
+ ! res|=bit;
+ ! }
+ ! bit>>=1;
+ ! den>>=1;
+ ! }
+ !!if (modwanted)
+ !! return num;
+ !!return res;
+ ! ---------------------------------------------------------------------
+ sub $r2, $r0, $r1 ! $r2 <- num-den
+ slt $ta, $r0, $r1 ! $ta <- num<den?
+ srli $r4, $r4, 1 ! $r4 <- bit>>=1
+ cmovz $r0, $r2, $ta ! $r0 <- num=(num<den)?num:num-den
+ srli $r1, $r1, 1 ! $r1 <- den>>=1
+ bnez $r4, .L5 ! if bit!=0, continue loop
+.L1:
+ ! ---------------------------------------------------------------------
+ ! return res;
+ ! ---------------------------------------------------------------------
+ ret
+ .size __umodsi3, .-__umodsi3
+#endif /* L_umodsi3 */
+
+
+
+#ifdef L_umoddi3
+
+ !--------------------------------------
+ #ifdef __big_endian__
+ #define V1H $r0
+ #define V1L $r1
+ #define V2H $r2
+ #define V2L $r3
+ #else
+ #define V1H $r1
+ #define V1L $r0
+ #define V2H $r3
+ #define V2L $r2
+ #endif
+ !--------------------------------------
+ .text
+ .align 2
+ .globl __umoddi3
+ .type __umoddi3, @function
+__umoddi3:
+ ! prologue
+ addi $sp, $sp, -12
+ swi $lp, [$sp+(0)]
+ ! end of prologue
+ addi $r4, $sp, 4
+ bal __udivmoddi4
+ lwi $r0, [$sp+(4)] ! __udivmoddi4 return low when LE mode or return high when BE mode
+ lwi $r1, [$sp+(8)] !
+.L82:
+ ! epilogue
+ lwi $lp, [$sp+(0)]
+ addi $sp, $sp, 12
+ ret
+ .size __umoddi3, .-__umoddi3
+#endif /* L_umoddi3 */
+
+
+
+#ifdef L_muldi3
+
+#ifdef __big_endian__
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+
+ #define V2H $r4
+ #define V2L $r5
+#else
+ #define P1H $r1
+ #define P1L $r0
+ #define P2H $r3
+ #define P2L $r2
+
+ #define V2H $r5
+ #define V2L $r4
+#endif
+
+ ! ====================================================================
+ .text
+ .align 2
+ .globl __muldi3
+ .type __muldi3, @function
+__muldi3:
+ ! parameter passing for libgcc functions normally involves 2 doubles
+ !---------------------------------------
+#ifdef __NDS32_ISA_V3M__
+ ! There is no mulr64 instruction in Andes ISA V3M.
+ ! So we must provide a sequence of calculations to complete the job.
+ smw.adm $r6, [$sp], $r9, 0x0
+ zeh33 $r4, P1L
+ srli $r7, P1L, 16
+ zeh33 $r5, P2L
+ mul $r6, $r5, $r4
+ mul33 $r5, $r7
+ srli $r8, P2L, 16
+ mov55 $r9, $r5
+ maddr32 $r9, $r8, $r4
+ srli $r4, $r6, 16
+ add $r4, $r9, $r4
+ slt45 $r4, $r5
+ slli $r5, $r15, 16
+ maddr32 $r5, $r8, $r7
+ mul P2L, P1H, P2L
+ srli $r7, $r4, 16
+ maddr32 P2L, P2H, P1L
+ add333 P1H, $r5, $r7
+ slli $r4, $r4, 16
+ zeh33 $r6, $r6
+ add333 P1L, $r4, $r6
+ add333 P1H, P2L, P1H
+ lmw.bim $r6, [$sp], $r9, 0x0
+ ret
+#else /* not __NDS32_ISA_V3M__ */
+ mul $ta, P1L, P2H
+ mulr64 $r4, P1L, P2L
+ maddr32 $ta, P1H, P2L
+ move P1L, V2L
+ add P1H, $ta, V2H
+ ret
+#endif /* not __NDS32_ISA_V3M__ */
+ .size __muldi3, .-__muldi3
+#endif /* L_muldi3 */
+
+
+
+#ifdef L_addsub_df
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+ #define P3L $r4
+ #define P3H $r5
+ #define O1L $r7
+ #define O1H $r8
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+ #define P3H $r4
+ #define P3L $r5
+ #define O1H $r7
+ #define O1L $r8
+#endif
+ .text
+ .align 2
+ .global __subdf3
+ .type __subdf3, @function
+__subdf3:
+ push $lp
+ pushm $r6, $r10
+
+ move $r4, #0x80000000
+ xor P2H, P2H, $r4
+
+ j .Lsdpadd
+
+ .global __adddf3
+ .type __adddf3, @function
+__adddf3:
+ push $lp
+ pushm $r6, $r10
+.Lsdpadd:
+ slli $r6, P1H, #1
+ srli $r6, $r6, #21
+ slli P3H, P1H, #11
+ srli $r10, P1L, #21
+ or P3H, P3H, $r10
+ slli P3L, P1L, #11
+ move O1L, #0x80000000
+ or P3H, P3H, O1L
+ slli $r9, P2H, #1
+ srli $r9, $r9, #21
+ slli O1H, P2H, #11
+ srli $r10, P2L, #21
+ or O1H, O1H, $r10
+ or O1H, O1H, O1L
+ slli O1L, P2L, #11
+
+ addi $r10, $r6, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LEspecA
+
+.LElab1:
+ addi $r10, $r9, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LEspecB
+
+.LElab2:
+ #NORMd($r4, P2L, P1L)
+ bnez P3H, .LL1
+ bnez P3L, .LL2
+ move $r6, #0
+ j .LL3
+.LL2:
+ move P3H, P3L
+ move P3L, #0
+ move P2L, #32
+ sub $r6, $r6, P2L
+.LL1:
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r2, $r5
+#else
+ pushm $r0, $r1
+ pushm $r3, $r5
+ move $r0, $r5
+ bal __clzsi2
+ move $r2, $r0
+ popm $r3, $r5
+ popm $r0, $r1
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r3, $r4
+#else
+ pushm $r0, $r2
+ pushm $r4, $r5
+ move $r0, $r4
+ bal __clzsi2
+ move $r3, $r0
+ popm $r4, $r5
+ popm $r0, $r2
+#endif
+#endif /* __big_endian__ */
+ beqz P2L, .LL3
+ sub $r6, $r6, P2L
+ subri P1L, P2L, #32
+ srl P1L, P3L, P1L
+ sll P3L, P3L, P2L
+ sll P3H, P3H, P2L
+ or P3H, P3H, P1L
+.LL3:
+ #NORMd End
+
+ #NORMd($r7, P2L, P1L)
+ bnez O1H, .LL4
+ bnez O1L, .LL5
+ move $r9, #0
+ j .LL6
+.LL5:
+ move O1H, O1L
+ move O1L, #0
+ move P2L, #32
+ sub $r9, $r9, P2L
+.LL4:
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r2, O1H
+#else
+ pushm $r0, $r1
+ pushm $r3, $r5
+ move $r0, O1H
+ bal __clzsi2
+ move $r2, $r0
+ popm $r3, $r5
+ popm $r0, $r1
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r3, O1H
+#else
+ pushm $r0, $r2
+ pushm $r4, $r5
+ move $r0, O1H
+ bal __clzsi2
+ move $r3, $r0
+ popm $r4, $r5
+ popm $r0, $r2
+#endif
+#endif /* __big_endian__ */
+ beqz P2L, .LL6
+ sub $r9, $r9, P2L
+ subri P1L, P2L, #32
+ srl P1L, O1L, P1L
+ sll O1L, O1L, P2L
+ sll O1H, O1H, P2L
+ or O1H, O1H, P1L
+.LL6:
+ #NORMd End
+
+ move $r10, #0x80000000
+ and P1H, P1H, $r10
+
+ beq $r6, $r9, .LEadd3
+ slts $r15, $r9, $r6
+ beqzs8 .Li1
+ sub $r9, $r6, $r9
+ move P2L, #0
+.LL7:
+ move $r10, #0x20
+ slt $r15, $r9, $r10
+ bnezs8 .LL8
+ or P2L, P2L, O1L
+ move O1L, O1H
+ move O1H, #0
+ addi $r9, $r9, #0xffffffe0
+ bnez O1L, .LL7
+.LL8:
+ beqz $r9, .LEadd3
+ move P1L, O1H
+ move $r10, O1L
+ srl O1L, O1L, $r9
+ srl O1H, O1H, $r9
+ subri $r9, $r9, #0x20
+ sll P1L, P1L, $r9
+ or O1L, O1L, P1L
+ sll $r10, $r10, $r9
+ or P2L, P2L, $r10
+ beqz P2L, .LEadd3
+ ori O1L, O1L, #1
+ j .LEadd3
+.Li1:
+ move $r15, $r6
+ move $r6, $r9
+ sub $r9, $r9, $r15
+ move P2L, #0
+.LL10:
+ move $r10, #0x20
+ slt $r15, $r9, $r10
+ bnezs8 .LL11
+ or P2L, P2L, P3L
+ move P3L, P3H
+ move P3H, #0
+ addi $r9, $r9, #0xffffffe0
+ bnez P3L, .LL10
+.LL11:
+ beqz $r9, .LEadd3
+ move P1L, P3H
+ move $r10, P3L
+ srl P3L, P3L, $r9
+ srl P3H, P3H, $r9
+ subri $r9, $r9, #0x20
+ sll P1L, P1L, $r9
+ or P3L, P3L, P1L
+ sll $r10, $r10, $r9
+ or P2L, P2L, $r10
+ beqz P2L, .LEadd3
+ ori P3L, P3L, #1
+
+.LEadd3:
+ xor $r10, P1H, P2H
+ sltsi $r15, $r10, #0
+ bnezs8 .LEsub1
+
+ #ADD(P3L, O1L)
+ add P3L, P3L, O1L
+ slt $r15, P3L, O1L
+
+ #ADDCC(P3H, O1H)
+ beqzs8 .LL13
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .LL14
+ addi P3H, P3H, #0x1
+ j .LL15
+.LL14:
+ move $r15, #1
+ add P3H, P3H, $r15
+ slt $r15, P3H, $r15
+ j .LL15
+.LL13:
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+.LL15:
+
+ beqzs8 .LEres
+ andi $r10, P3L, #1
+ beqz $r10, .Li3
+ ori P3L, P3L, #2
+.Li3:
+ srli P3L, P3L, #1
+ slli $r10, P3H, #31
+ or P3L, P3L, $r10
+ srli P3H, P3H, #1
+ move $r10, #0x80000000
+ or P3H, P3H, $r10
+ addi $r6, $r6, #1
+ subri $r15, $r6, #0x7ff
+ bnezs8 .LEres
+ move $r10, #0x7ff00000
+ or P1H, P1H, $r10
+ move P1L, #0
+ j .LEretA
+
+.LEsub1:
+ #SUB(P3L, O1L)
+ move $r15, P3L
+ sub P3L, P3L, O1L
+ slt $r15, $r15, P3L
+
+ #SUBCC(P3H, O1H)
+ beqzs8 .LL16
+ move $r15, P3H
+ sub P3H, P3H, O1H
+ slt $r15, $r15, P3H
+ beqzs8 .LL17
+ subi333 P3H, P3H, #1
+ j .LL18
+.LL17:
+ move $r15, P3H
+ subi333 P3H, P3H, #1
+ slt $r15, $r15, P3H
+ j .LL18
+.LL16:
+ move $r15, P3H
+ sub P3H, P3H, O1H
+ slt $r15, $r15, P3H
+.LL18:
+
+ beqzs8 .Li5
+ move $r10, #0x80000000
+ xor P1H, P1H, $r10
+
+ subri P3H, P3H, #0
+ beqz P3L, .LL19
+ subri P3L, P3L, #0
+ subi45 P3H, #1
+.LL19:
+
+.Li5:
+ #NORMd($r4, $r9, P1L)
+ bnez P3H, .LL20
+ bnez P3L, .LL21
+ move $r6, #0
+ j .LL22
+.LL21:
+ move P3H, P3L
+ move P3L, #0
+ move $r9, #32
+ sub $r6, $r6, $r9
+.LL20:
+#ifdef __NDS32_PERF_EXT__
+ clz $r9, P3H
+#else
+ pushm $r0, $r5
+ move $r0, P3H
+ bal __clzsi2
+ move $r9, $r0
+ popm $r0, $r5
+#endif
+ beqz $r9, .LL22
+ sub $r6, $r6, $r9
+ subri P1L, $r9, #32
+ srl P1L, P3L, P1L
+ sll P3L, P3L, $r9
+ sll P3H, P3H, $r9
+ or P3H, P3H, P1L
+.LL22:
+ #NORMd End
+
+ or $r10, P3H, P3L
+ bnez $r10, .LEres
+ move P1H, #0
+
+.LEres:
+ blez $r6, .LEund
+
+.LElab8:
+ #ADD(P3L, $0x400)
+ move $r15, #0x400
+ add P3L, P3L, $r15
+ slt $r15, P3L, $r15
+
+ #ADDCC(P3H, $0x0)
+ beqzs8 .LL25
+ add P3H, P3H, $r15
+ slt $r15, P3H, $r15
+.LL25:
+
+ #ADDC($r6, $0x0)
+ add $r6, $r6, $r15
+ srli $r10, P3L, #11
+ andi $r10, $r10, #1
+ sub P3L, P3L, $r10
+ srli P1L, P3L, #11
+ slli $r10, P3H, #21
+ or P1L, P1L, $r10
+ slli $r10, P3H, #1
+ srli $r10, $r10, #12
+ or P1H, P1H, $r10
+ slli $r10, $r6, #20
+ or P1H, P1H, $r10
+
+.LEretA:
+.LE999:
+ popm $r6, $r10
+ pop $lp
+ ret5 $lp
+
+.LEspecA:
+ #ADD(P3L, P3L)
+ move $r15, P3L
+ add P3L, P3L, P3L
+ slt $r15, P3L, $r15
+
+ #ADDC(P3H, P3H)
+ add P3H, P3H, P3H
+ add P3H, P3H, $r15
+ bnez $r6, .Li7
+ or $r10, P3H, P3L
+ beqz $r10, .Li8
+ j .LElab1
+.Li8:
+ subri $r15, $r9, #0x7ff
+ beqzs8 .LEspecB
+ add P3L, P2H, P2H
+ or $r10, P3L, P2L
+ bnez $r10, .LEretB
+ sltsi $r15, P2H, #0
+ bnezs8 .LEretA
+
+.LEretB:
+ move P1L, P2L
+ move P1H, P2H
+ j .LE999
+.Li7:
+ or $r10, P3H, P3L
+ bnez $r10, .LEnan
+ subri $r15, $r9, #0x7ff
+ bnezs8 .LEretA
+ xor $r10, P1H, P2H
+ sltsi $r15, $r10, #0
+ bnezs8 .LEnan
+ j .LEretB
+
+.LEspecB:
+ #ADD(O1L, O1L)
+ move $r15, O1L
+ add O1L, O1L, O1L
+ slt $r15, O1L, $r15
+
+ #ADDC(O1H, O1H)
+ add O1H, O1H, O1H
+ add O1H, O1H, $r15
+ bnez $r9, .Li11
+ or $r10, O1H, O1L
+ beqz $r10, .LEretA
+ j .LElab2
+.Li11:
+ or $r10, O1H, O1L
+ beqz $r10, .LEretB
+
+.LEnan:
+ move P1H, #0xfff80000
+ move P1L, #0
+ j .LEretA
+
+.LEund:
+ subri $r9, $r6, #1
+ move P2L, #0
+.LL26:
+ move $r10, #0x20
+ slt $r15, $r9, $r10
+ bnezs8 .LL27
+ or P2L, P2L, P3L
+ move P3L, P3H
+ move P3H, #0
+ addi $r9, $r9, #0xffffffe0
+ bnez P3L, .LL26
+.LL27:
+ beqz $r9, .LL28
+ move P1L, P3H
+ move $r10, P3L
+ srl P3L, P3L, $r9
+ srl P3H, P3H, $r9
+ subri $r9, $r9, #0x20
+ sll P1L, P1L, $r9
+ or P3L, P3L, P1L
+ sll $r10, $r10, $r9
+ or P2L, P2L, $r10
+ beqz P2L, .LL28
+ ori P3L, P3L, #1
+.LL28:
+ move $r6, #0
+ j .LElab8
+ .size __subdf3, .-__subdf3
+ .size __adddf3, .-__adddf3
+#endif /* L_addsub_df */
+
+
+
+#ifdef L_mul_sf
+
+#if !defined (__big_endian__)
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+#endif
+ .text
+ .align 2
+ .global __mulsf3
+ .type __mulsf3, @function
+__mulsf3:
+ push $lp
+ pushm $r6, $r10
+
+ srli $r3, $r0, #23
+ andi $r3, $r3, #0xff
+ srli $r5, $r1, #23
+ andi $r5, $r5, #0xff
+ move $r6, #0x80000000
+ slli $r2, $r0, #8
+ or $r2, $r2, $r6
+ slli $r4, $r1, #8
+ or $r4, $r4, $r6
+ xor $r8, $r0, $r1
+ and $r6, $r6, $r8
+
+ addi $r8, $r3, #-1
+ slti $r15, $r8, #0xfe
+ beqzs8 .LFspecA
+
+.LFlab1:
+ addi $r8, $r5, #-1
+ slti $r15, $r8, #0xfe
+ beqzs8 .LFspecB
+
+.LFlab2:
+ move $r10, $r3
+/* This is a 64-bit multiple. ($r2, $r7) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r2, $r2, $r4
+#else
+ pushm $r0, $r1
+ pushm $r4, $r5
+ move P1L, $r2
+ movi P1H, #0
+ move P2L, $r4
+ movi P2H, #0
+ bal __muldi3
+ movd44 $r2, $r0
+ popm $r4, $r5
+ popm $r0, $r1
+#endif
+#ifndef __big_endian__
+ move $r7, $r2
+ move $r2, $r3
+#else
+ move $r7, $r3
+#endif
+ move $r3, $r10
+
+ beqz $r7, .Li17
+ ori $r2, $r2, #1
+
+.Li17:
+ sltsi $r15, $r2, #0
+ bnezs8 .Li18
+ slli $r2, $r2, #1
+ addi $r3, $r3, #-1
+.Li18:
+ addi $r8, $r5, #0xffffff82
+ add $r3, $r3, $r8
+ addi $r8, $r3, #-1
+ slti $r15, $r8, #0xfe
+ beqzs8 .LFoveund
+
+.LFlab8:
+ #ADD($r2, $0x80)
+ move $r15, #0x80
+ add $r2, $r2, $r15
+ slt $r15, $r2, $r15
+
+ #ADDC($r3, $0x0)
+ add $r3, $r3, $r15
+ srli $r8, $r2, #8
+ andi $r8, $r8, #1
+ sub $r2, $r2, $r8
+ slli $r2, $r2, #1
+ srli $r2, $r2, #9
+ slli $r8, $r3, #23
+ or $r2, $r2, $r8
+ or $r0, $r2, $r6
+
+.LF999:
+ popm $r6, $r10
+ pop $lp
+ ret5 $lp
+
+.LFspecA:
+ bnez $r3, .Li19
+ add $r2, $r2, $r2
+ beqz $r2, .Li20
+#ifdef __NDS32_PERF_EXT__
+ clz $r7, $r2
+#else
+ pushm $r0, $r5
+ move $r0, $r2
+ bal __clzsi2
+ move $r7, $r0
+ popm $r0, $r5
+#endif
+ sub $r3, $r3, $r7
+ sll $r2, $r2, $r7
+ j .LFlab1
+.Li20:
+ subri $r15, $r5, #0xff
+ beqzs8 .LFnan
+ j .LFzer
+.Li19:
+ add $r8, $r2, $r2
+ bnez $r8, .LFnan
+ bnez $r5, .Li21
+ add $r8, $r4, $r4
+ beqz $r8, .LFnan
+.Li21:
+ subri $r15, $r5, #0xff
+ bnezs8 .LFinf
+
+.LFspecB:
+ bnez $r5, .Li22
+ add $r4, $r4, $r4
+ beqz $r4, .LFzer
+#ifdef __NDS32_PERF_EXT__
+ clz $r7, $r4
+#else
+ pushm $r0, $r5
+ move $r0, $r4
+ bal __clzsi2
+ move $r7, $r0
+ popm $r0, $r5
+#endif
+ sub $r5, $r5, $r7
+ sll $r4, $r4, $r7
+ j .LFlab2
+
+.LFzer:
+ move $r0, $r6
+ j .LF999
+.Li22:
+ add $r8, $r4, $r4
+ bnez $r8, .LFnan
+
+.LFinf:
+ move $r8, #0x7f800000
+ or $r0, $r6, $r8
+ j .LF999
+
+.LFnan:
+ move $r0, #0xffc00000
+ j .LF999
+
+.LFoveund:
+ bgtz $r3, .LFinf
+ subri $r7, $r3, #1
+ slti $r15, $r7, #0x20
+ beqzs8 .LFzer
+ subri $r8, $r7, #0x20
+ sll $r3, $r2, $r8
+ srl $r2, $r2, $r7
+ beqz $r3, .Li25
+ ori $r2, $r2, #2
+.Li25:
+ move $r3, #0
+ addi $r8, $r2, #0x80
+ sltsi $r15, $r8, #0
+ beqzs8 .LFlab8
+ move $r3, #1
+ j .LFlab8
+ .size __mulsf3, .-__mulsf3
+#endif /* L_mul_sf */
+
+
+
+#ifdef L_mul_df
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+ #define P3L $r4
+ #define P3H $r5
+ #define O1L $r7
+ #define O1H $r8
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+ #define P3H $r4
+ #define P3L $r5
+ #define O1H $r7
+ #define O1L $r8
+#endif
+ .text
+ .align 2
+ .global __muldf3
+ .type __muldf3, @function
+__muldf3:
+ push $lp
+ pushm $r6, $r10
+
+ slli $r6, P1H, #1
+ srli $r6, $r6, #21
+ slli P3H, P1H, #11
+ srli $r10, P1L, #21
+ or P3H, P3H, $r10
+ slli P3L, P1L, #11
+ move O1L, #0x80000000
+ or P3H, P3H, O1L
+ slli $r9, P2H, #1
+ srli $r9, $r9, #21
+ slli O1H, P2H, #11
+ srli $r10, P2L, #21
+ or O1H, O1H, $r10
+ or O1H, O1H, O1L
+ xor P1H, P1H, P2H
+ and P1H, P1H, O1L
+ slli O1L, P2L, #11
+
+ addi $r10, $r6, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LFspecA
+
+.LFlab1:
+ addi $r10, $r9, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LFspecB
+
+.LFlab2:
+ addi $r10, $r9, #0xfffffc02
+ add $r6, $r6, $r10
+
+ move $r10, $r8
+/* This is a 64-bit multiple. */
+#ifndef __big_endian__
+/* For little endian: ($r9, $r3) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r8, $r5, $r8
+#else
+ pushm $r0, $r5
+ move $r0, $r5
+ movi $r1, #0
+ move $r2, $r8
+ movi $r3, #0
+ bal __muldi3
+ movd44 $r8, $r0
+ popm $r0, $r5
+#endif
+ move $r3, $r8
+#else /* __big_endian__ */
+/* For big endain: ($r9, $r2) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r8, $r4, $r7
+#else
+ pushm $r0, $r5
+ move $r1, $r4
+ movi $r0, #0
+ move $r3, $r7
+ movi $r2, #0
+ bal __muldi3
+ movd44 $r8, $r0
+ popm $r0, $r5
+#endif
+ move $r2, $r9
+ move $r9, $r8
+#endif /* __big_endian__ */
+ move $r8, $r10
+
+ move $r10, P1H
+/* This is a 64-bit multiple. */
+#ifndef __big_endian__
+/* For little endian: ($r0, $r2) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r4, $r8
+#else
+ pushm $r2, $r5
+ move $r0, $r4
+ movi $r1, #0
+ move $r2, $r8
+ movi $r3, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r2, $r0
+ move $r0, $r1
+#else /* __big_endian__ */
+/* For big endain: ($r1, $r3) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r5, $r7
+#else
+ pushm $r2, $r5
+ move $r1, $r5
+ movi $r0, #0
+ move $r3, $r7
+ movi $r2, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r3, $r1
+ move $r1, $r0
+#endif /* __big_endian__ */
+ move P1H, $r10
+
+ #ADD(P2H, P1L)
+ add P2H, P2H, P1L
+ slt $r15, P2H, P1L
+
+ #ADDC($r9, $0x0)
+ add $r9, $r9, $r15
+
+ move $r10, P1H
+/* This is a 64-bit multiple. */
+#ifndef __big_endian__
+/* For little endian: ($r0, $r8) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r5, $r7
+#else
+ pushm $r2, $r5
+ move $r0, $r5
+ movi $r1, #0
+ move $r2, $r7
+ movi $r3, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r8, $r0
+ move $r0, $r1
+#else /* __big_endian__ */
+/* For big endian: ($r1, $r7) is (high, low). */
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r4, $r8
+#else
+ pushm $r2, $r5
+ move $r1, $r4
+ movi $r0, #0
+ move $r3, $r8
+ movi $r2, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r7, $r1
+ move $r1, $r0
+#endif /* __big_endian__ */
+ move P1H, $r10
+
+ #ADD(P2L, O1H)
+ add P2L, P2L, O1H
+ slt $r15, P2L, O1H
+
+
+ #ADDCC(P2H, P1L)
+ beqzs8 .LL29
+ add P2H, P2H, P1L
+ slt $r15, P2H, P1L
+ beqzs8 .LL30
+ addi P2H, P2H, #0x1
+ j .LL31
+.LL30:
+ move $r15, #1
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+ j .LL31
+.LL29:
+ add P2H, P2H, P1L
+ slt $r15, P2H, P1L
+.LL31:
+
+ #ADDC($r9, $0x0)
+ add $r9, $r9, $r15
+
+/* This is a 64-bit multiple. */
+#ifndef __big_endian__
+/* For little endian: ($r8, $r0) is (high, low). */
+ move $r10, $r9
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r8, $r4, $r7
+#else
+ pushm $r0, $r5
+ move $r0, $r4
+ movi $r1, #0
+ move $r2, $r7
+ movi $r3, #0
+ bal __muldi3
+ movd44 $r8, $r0
+ popm $r0, $r5
+#endif
+ move $r0, $r8
+ move $r8, $r9
+ move $r9, $r10
+#else /* __big_endian__ */
+/* For big endian: ($r7, $r1) is (high, low). */
+ move $r10, $r6
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r6, $r5, $r8
+#else
+ pushm $r0, $r5
+ move $r1, $r5
+ movi $r0, #0
+ move $r3, $r8
+ movi $r2, #0
+ bal __muldi3
+ movd44 $r6, $r0
+ popm $r0, $r5
+#endif
+ move $r1, $r7
+ move $r7, $r6
+ move $r6, $r10
+#endif /* __big_endian__ */
+
+ #ADD(P2L, O1H)
+ add P2L, P2L, O1H
+ slt $r15, P2L, O1H
+
+
+ #ADDCC(P2H, $0x0)
+ beqzs8 .LL34
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+.LL34:
+
+ #ADDC($r9, $0x0)
+ add $r9, $r9, $r15
+ or $r10, P1L, P2L
+ beqz $r10, .Li13
+ ori P2H, P2H, #1
+.Li13:
+ move P3H, $r9
+ move P3L, P2H
+ sltsi $r15, P3H, #0
+ bnezs8 .Li14
+
+ move $r15, P3L
+ add P3L, P3L, P3L
+ slt $r15, P3L, $r15
+ add P3H, P3H, P3H
+ add P3H, P3H, $r15
+ addi $r6, $r6, #-1
+.Li14:
+ addi $r10, $r6, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LFoveund
+
+ #ADD(P3L, $0x400)
+ move $r15, #0x400
+ add P3L, P3L, $r15
+ slt $r15, P3L, $r15
+
+
+ #ADDCC(P3H, $0x0)
+ beqzs8 .LL37
+ add P3H, P3H, $r15
+ slt $r15, P3H, $r15
+.LL37:
+
+ #ADDC($r6, $0x0)
+ add $r6, $r6, $r15
+
+.LFlab8:
+ srli $r10, P3L, #11
+ andi $r10, $r10, #1
+ sub P3L, P3L, $r10
+ srli P1L, P3L, #11
+ slli $r10, P3H, #21
+ or P1L, P1L, $r10
+ slli $r10, P3H, #1
+ srli $r10, $r10, #12
+ or P1H, P1H, $r10
+ slli $r10, $r6, #20
+ or P1H, P1H, $r10
+
+.LFret:
+.LF999:
+ popm $r6, $r10
+ pop $lp
+ ret5 $lp
+
+.LFspecA:
+ #ADD(P3L, P3L)
+ move $r15, P3L
+ add P3L, P3L, P3L
+ slt $r15, P3L, $r15
+
+ #ADDC(P3H, P3H)
+ add P3H, P3H, P3H
+ add P3H, P3H, $r15
+ bnez $r6, .Li15
+ or $r10, P3H, P3L
+ beqz $r10, .Li16
+
+
+ #NORMd($r4, P1L, P2H)
+ bnez P3H, .LL38
+ bnez P3L, .LL39
+ move $r6, #0
+ j .LL40
+.LL39:
+ move P3H, P3L
+ move P3L, #0
+ move P1L, #32
+ sub $r6, $r6, P1L
+.LL38:
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r0, P3H
+#else
+ pushm $r1, P3H
+ move $r0, P3H
+ bal __clzsi2
+ popm $r1, $r5
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r1, $r4
+#else
+ push $r0
+ pushm $r2, $r5
+ move $r0, $r4
+ bal __clzsi2
+ move $r1, $r0
+ popm $r2, $r5
+ pop $r0
+#endif
+#endif /* __big_endian__ */
+ beqz P1L, .LL40
+ sub $r6, $r6, P1L
+ subri P2H, P1L, #32
+ srl P2H, P3L, P2H
+ sll P3L, P3L, P1L
+ sll P3H, P3H, P1L
+ or P3H, P3H, P2H
+.LL40:
+ #NORMd End
+
+ j .LFlab1
+.Li16:
+ subri $r15, $r9, #0x7ff
+ beqzs8 .LFnan
+ j .LFret
+.Li15:
+ or $r10, P3H, P3L
+ bnez $r10, .LFnan
+ bnez $r9, .Li17
+ slli $r10, O1H, #1
+ or $r10, $r10, O1L
+ beqz $r10, .LFnan
+.Li17:
+ subri $r15, $r9, #0x7ff
+ bnezs8 .LFinf
+
+.LFspecB:
+ #ADD(O1L, O1L)
+ move $r15, O1L
+ add O1L, O1L, O1L
+ slt $r15, O1L, $r15
+
+ #ADDC(O1H, O1H)
+ add O1H, O1H, O1H
+ add O1H, O1H, $r15
+ bnez $r9, .Li18
+ or $r10, O1H, O1L
+ beqz $r10, .Li19
+
+
+ #NORMd($r7, P2L, P1L)
+ bnez O1H, .LL41
+ bnez O1L, .LL42
+ move $r9, #0
+ j .LL43
+.LL42:
+ move O1H, O1L
+ move O1L, #0
+ move P2L, #32
+ sub $r9, $r9, P2L
+.LL41:
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r2, $r8
+#else
+ pushm $r0, $r1
+ pushm $r3, $r5
+ move $r0, $r8
+ bal __clzsi2
+ move $r2, $r0
+ popm $r3, $r5
+ popm $r0, $r1
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r3, $r7
+#else
+ pushm $r0, $r2
+ pushm $r4, $r5
+ move $r0, $r7
+ bal __clzsi2
+ move $r3, $r0
+ popm $r4, $r5
+ popm $r0, $r2
+#endif
+#endif /* __big_endian__ */
+ beqz P2L, .LL43
+ sub $r9, $r9, P2L
+ subri P1L, P2L, #32
+ srl P1L, O1L, P1L
+ sll O1L, O1L, P2L
+ sll O1H, O1H, P2L
+ or O1H, O1H, P1L
+.LL43:
+ #NORMd End
+
+ j .LFlab2
+.Li19:
+ move P1L, #0
+ j .LFret
+.Li18:
+ or $r10, O1H, O1L
+ bnez $r10, .LFnan
+
+.LFinf:
+ move $r10, #0x7ff00000
+ or P1H, P1H, $r10
+ move P1L, #0
+ j .LFret
+
+.LFnan:
+ move P1H, #0xfff80000
+ move P1L, #0
+ j .LFret
+
+.LFoveund:
+ bgtz $r6, .LFinf
+ subri P1L, $r6, #1
+ move P2L, #0
+.LL44:
+ move $r10, #0x20
+ slt $r15, P1L, $r10
+ bnezs8 .LL45
+ or P2L, P2L, P3L
+ move P3L, P3H
+ move P3H, #0
+ addi P1L, P1L, #0xffffffe0
+ bnez P3L, .LL44
+.LL45:
+ beqz P1L, .LL46
+ move P2H, P3H
+ move $r10, P3L
+ srl P3L, P3L, P1L
+ srl P3H, P3H, P1L
+ subri P1L, P1L, #0x20
+ sll P2H, P2H, P1L
+ or P3L, P3L, P2H
+ sll $r10, $r10, P1L
+ or P2L, P2L, $r10
+ beqz P2L, .LL46
+ ori P3L, P3L, #1
+.LL46:
+ #ADD(P3L, $0x400)
+ move $r15, #0x400
+ add P3L, P3L, $r15
+ slt $r15, P3L, $r15
+
+ #ADDC(P3H, $0x0)
+ add P3H, P3H, $r15
+ srli $r6, P3H, #31
+ j .LFlab8
+ .size __muldf3, .-__muldf3
+#endif /* L_mul_df */
+
+
+
+#ifdef L_div_sf
+
+ .text
+ .align 2
+ .global __divsf3
+ .type __divsf3, @function
+__divsf3:
+ push $lp
+ pushm $r6, $r10
+
+ move $r7, #0x80000000
+ srli $r4, $r0, #23
+ andi $r4, $r4, #0xff
+ srli $r6, $r1, #23
+ andi $r6, $r6, #0xff
+ slli $r3, $r0, #8
+ or $r3, $r3, $r7
+ slli $r5, $r1, #8
+ or $r5, $r5, $r7
+ xor $r10, $r0, $r1
+ and $r7, $r7, $r10
+
+ addi $r10, $r4, #-1
+ slti $r15, $r10, #0xfe
+ beqzs8 .LGspecA
+
+.LGlab1:
+ addi $r10, $r6, #-1
+ slti $r15, $r10, #0xfe
+ beqzs8 .LGspecB
+
+.LGlab2:
+ slt $r15, $r3, $r5
+ bnezs8 .Li27
+ srli $r3, $r3, #1
+ addi $r4, $r4, #1
+.Li27:
+ srli $r8, $r5, #14
+ divr $r0, $r2, $r3, $r8
+ andi $r9, $r5, #0x3fff
+ mul $r1, $r9, $r0
+ slli $r2, $r2, #14
+
+ #SUB($r2, $r1)
+ move $r15, $r2
+ sub $r2, $r2, $r1
+ slt $r15, $r15, $r2
+ beqzs8 .Li28
+ addi $r0, $r0, #-1
+
+ #ADD($r2, $r5)
+ add $r2, $r2, $r5
+ slt $r15, $r2, $r5
+.Li28:
+ divr $r3, $r2, $r2, $r8
+ mul $r1, $r9, $r3
+ slli $r2, $r2, #14
+
+ #SUB($r2, $r1)
+ move $r15, $r2
+ sub $r2, $r2, $r1
+ slt $r15, $r15, $r2
+ beqzs8 .Li29
+ addi $r3, $r3, #-1
+
+ #ADD($r2, $r5)
+ add $r2, $r2, $r5
+ slt $r15, $r2, $r5
+.Li29:
+ slli $r10, $r0, #14
+ add $r3, $r3, $r10
+ slli $r3, $r3, #4
+ beqz $r2, .Li30
+ ori $r3, $r3, #1
+.Li30:
+ subri $r10, $r6, #0x7e
+ add $r4, $r4, $r10
+ addi $r10, $r4, #-1
+ slti $r15, $r10, #0xfe
+ beqzs8 .LGoveund
+
+.LGlab8:
+ #ADD($r3, $0x80)
+ move $r15, #0x80
+ add $r3, $r3, $r15
+ slt $r15, $r3, $r15
+
+ #ADDC($r4, $0x0)
+ add $r4, $r4, $r15
+ srli $r10, $r3, #8
+ andi $r10, $r10, #1
+ sub $r3, $r3, $r10
+ slli $r3, $r3, #1
+ srli $r3, $r3, #9
+ slli $r10, $r4, #23
+ or $r3, $r3, $r10
+ or $r0, $r3, $r7
+
+.LG999:
+ popm $r6, $r10
+ pop $lp
+ ret5 $lp
+
+.LGspecA:
+ bnez $r4, .Li31
+ add $r3, $r3, $r3
+ beqz $r3, .Li31
+#ifdef __NDS32_PERF_EXT__
+ clz $r8, $r3
+#else
+ pushm $r0, $r5
+ move $r0, $r3
+ bal __clzsi2
+ move $r8, $r0
+ popm $r0, $r5
+#endif
+ sub $r4, $r4, $r8
+ sll $r3, $r3, $r8
+ j .LGlab1
+.Li31:
+ bne $r6, $r4, .Li33
+ add $r10, $r5, $r5
+ beqz $r10, .LGnan
+.Li33:
+ subri $r15, $r6, #0xff
+ beqzs8 .LGspecB
+ beqz $r4, .LGzer
+ add $r10, $r3, $r3
+ bnez $r10, .LGnan
+ j .LGinf
+
+.LGspecB:
+ bnez $r6, .Li34
+ add $r5, $r5, $r5
+ beqz $r5, .LGinf
+#ifdef __NDS32_PERF_EXT__
+ clz $r8, $r5
+#else
+ pushm $r0, $r5
+ move $r0, $r5
+ bal __clzsi2
+ move $r8, $r0
+ popm $r0, $r5
+#endif
+ sub $r6, $r6, $r8
+ sll $r5, $r5, $r8
+ j .LGlab2
+.Li34:
+ add $r10, $r5, $r5
+ bnez $r10, .LGnan
+
+.LGzer:
+ move $r0, $r7
+ j .LG999
+
+.LGoveund:
+ bgtz $r4, .LGinf
+ subri $r8, $r4, #1
+ slti $r15, $r8, #0x20
+ beqzs8 .LGzer
+ subri $r10, $r8, #0x20
+ sll $r4, $r3, $r10
+ srl $r3, $r3, $r8
+ beqz $r4, .Li37
+ ori $r3, $r3, #2
+.Li37:
+ move $r4, #0
+ addi $r10, $r3, #0x80
+ sltsi $r15, $r10, #0
+ beqzs8 .LGlab8
+ move $r4, #1
+ j .LGlab8
+
+.LGinf:
+ move $r10, #0x7f800000
+ or $r0, $r7, $r10
+ j .LG999
+
+.LGnan:
+ move $r0, #0xffc00000
+ j .LG999
+ .size __divsf3, .-__divsf3
+#endif /* L_div_sf */
+
+
+
+#ifdef L_div_df
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+ #define P3L $r4
+ #define P3H $r5
+ #define O1L $r7
+ #define O1H $r8
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+ #define P3H $r4
+ #define P3L $r5
+ #define O1H $r7
+ #define O1L $r8
+#endif
+ .text
+ .align 2
+ .global __divdf3
+ .type __divdf3, @function
+__divdf3:
+ push $lp
+ pushm $r6, $r10
+
+ slli $r6, P1H, #1
+ srli $r6, $r6, #21
+ slli P3H, P1H, #11
+ srli $r10, P1L, #21
+ or P3H, P3H, $r10
+ slli P3L, P1L, #11
+ move O1L, #0x80000000
+ or P3H, P3H, O1L
+ slli $r9, P2H, #1
+ srli $r9, $r9, #21
+ slli O1H, P2H, #11
+ srli $r10, P2L, #21
+ or O1H, O1H, $r10
+ or O1H, O1H, O1L
+ xor P1H, P1H, P2H
+ and P1H, P1H, O1L
+ slli O1L, P2L, #11
+
+ addi $r10, $r6, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LGspecA
+
+.LGlab1:
+ addi $r10, $r9, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LGspecB
+
+.LGlab2:
+ sub $r6, $r6, $r9
+ addi $r6, $r6, #0x3ff
+ srli P3L, P3L, #1
+ slli $r10, P3H, #31
+ or P3L, P3L, $r10
+ srli P3H, P3H, #1
+ srli $r9, O1H, #16
+ divr P2H, P3H, P3H, $r9
+ move $r10, #0xffff
+ and P2L, O1H, $r10
+ mul P1L, P2L, P2H
+ slli P3H, P3H, #16
+ srli $r10, P3L, #16
+ or P3H, P3H, $r10
+
+ #SUB(P3H, P1L)
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+ beqzs8 .Li20
+
+.Lb21:
+ addi P2H, P2H, #-1
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .Lb21
+.Li20:
+ divr $r9, P3H, P3H, $r9
+ mul P1L, P2L, $r9
+ slli P3H, P3H, #16
+ move $r15, #0xffff
+ and $r10, P3L, $r15
+ or P3H, P3H, $r10
+
+ #SUB(P3H, P1L)
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+ beqzs8 .Li22
+
+.Lb23:
+ addi $r9, $r9, #-1
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .Lb23
+.Li22:
+ slli P2H, P2H, #16
+ add P2H, P2H, $r9
+
+/* This is a 64-bit multiple. */
+#ifndef __big_endian__
+/* For little endian: ($r0, $r9) is (high, low). */
+ move $r10, $r1
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r3, $r7
+#else
+ pushm $r2, $r5
+ move $r0, $r3
+ movi $r1, #0
+ move $r2, $r7
+ movi $r3, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r9, $r0
+ move $r0, $r1
+ move $r1, $r10
+#else /* __big_endian__ */
+/* For big endian: ($r1, $r9) is (high, low). */
+ move $r10, $r0
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r2, $r8
+#else
+ pushm $r2, $r5
+ move $r1, $r2
+ movi $r0, #0
+ move $r3, $r8
+ movi $r2, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r9, $r1
+ move $r1, $r0
+ move $r0, $r10
+#endif /* __big_endian__ */
+
+ move P3L, #0
+
+ #SUB(P3L, $r9)
+ move $r15, P3L
+ sub P3L, P3L, $r9
+ slt $r15, $r15, P3L
+
+
+ #SUBCC(P3H, P1L)
+ beqzs8 .LL47
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+ beqzs8 .LL48
+ subi333 P3H, P3H, #1
+ j .LL49
+.LL48:
+ move $r15, P3H
+ subi333 P3H, P3H, #1
+ slt $r15, $r15, P3H
+ j .LL49
+.LL47:
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+.LL49:
+
+ beqzs8 .Li24
+
+.LGlab3:
+ addi P2H, P2H, #-1
+
+ #ADD(P3L, O1L)
+ add P3L, P3L, O1L
+ slt $r15, P3L, O1L
+
+
+ #ADDCC(P3H, O1H)
+ beqzs8 .LL50
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .LL51
+ addi P3H, P3H, #0x1
+ j .LL52
+.LL51:
+ move $r15, #1
+ add P3H, P3H, $r15
+ slt $r15, P3H, $r15
+ j .LL52
+.LL50:
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+.LL52:
+
+ beqzs8 .LGlab3
+.Li24:
+ bne P3H, O1H, .Li25
+ move P1L, O1L
+ move P3H, P3L
+ move $r9, #0
+ move P2L, $r9
+ j .Le25
+.Li25:
+ srli P2L, O1H, #16
+ divr $r9, P3H, P3H, P2L
+ move $r10, #0xffff
+ and $r10, O1H, $r10
+ mul P1L, $r10, $r9
+ slli P3H, P3H, #16
+ srli $r15, P3L, #16
+ or P3H, P3H, $r15
+
+ #SUB(P3H, P1L)
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+ beqzs8 .Li26
+
+.Lb27:
+ addi $r9, $r9, #-1
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .Lb27
+.Li26:
+ divr P2L, P3H, P3H, P2L
+ mul P1L, $r10, P2L
+ slli P3H, P3H, #16
+ move $r10, #0xffff
+ and $r10, P3L, $r10
+ or P3H, P3H, $r10
+
+ #SUB(P3H, P1L)
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+ beqzs8 .Li28
+
+.Lb29:
+ addi P2L, P2L, #-1
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .Lb29
+.Li28:
+ slli $r9, $r9, #16
+ add $r9, $r9, P2L
+
+/* This is a 64-bit multiple. */
+#ifndef __big_endian__
+/* For little endian: ($r0, $r2) is (high, low). */
+ move $r10, $r1
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r9, $r7
+#else
+ pushm $r2, $r5
+ move $r0, $r9
+ movi $r1, #0
+ move $r2, $r7
+ movi $r3, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r2, $r0
+ move $r0, $r1
+ move $r1, $r10
+#else /* __big_endian__ */
+/* For big endian: ($r1, $r3) is (high, low). */
+ move $r10, $r0
+#ifndef __NDS32_ISA_V3M__
+ mulr64 $r0, $r9, $r8
+#else
+ pushm $r2, $r5
+ move $r0, $r9
+ movi $r1, #0
+ move $r2, $r7
+ movi $r3, #0
+ bal __muldi3
+ popm $r2, $r5
+#endif
+ move $r3, $r1
+ move $r1, $r0
+ move $r0, $r10
+#endif /* __big_endian__ */
+
+.Le25:
+ move P3L, #0
+
+ #SUB(P3L, P2L)
+ move $r15, P3L
+ sub P3L, P3L, P2L
+ slt $r15, $r15, P3L
+
+
+ #SUBCC(P3H, P1L)
+ beqzs8 .LL53
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+ beqzs8 .LL54
+ subi333 P3H, P3H, #1
+ j .LL55
+.LL54:
+ move $r15, P3H
+ subi333 P3H, P3H, #1
+ slt $r15, $r15, P3H
+ j .LL55
+.LL53:
+ move $r15, P3H
+ sub P3H, P3H, P1L
+ slt $r15, $r15, P3H
+.LL55:
+
+ beqzs8 .Li30
+
+.LGlab4:
+ addi $r9, $r9, #-1
+
+ #ADD(P3L, O1L)
+ add P3L, P3L, O1L
+ slt $r15, P3L, O1L
+
+
+ #ADDCC(P3H, O1H)
+ beqzs8 .LL56
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+ beqzs8 .LL57
+ addi P3H, P3H, #0x1
+ j .LL58
+.LL57:
+ move $r15, #1
+ add P3H, P3H, $r15
+ slt $r15, P3H, $r15
+ j .LL58
+.LL56:
+ add P3H, P3H, O1H
+ slt $r15, P3H, O1H
+.LL58:
+
+ beqzs8 .LGlab4
+.Li30:
+ sltsi $r15, P2H, #0
+ bnezs8 .Li31
+
+ #ADD($r9, $r9)
+ move $r15, $r9
+ add $r9, $r9, $r9
+ slt $r15, $r9, $r15
+
+ #ADDC(P2H, P2H)
+ add P2H, P2H, P2H
+ add P2H, P2H, $r15
+ addi $r6, $r6, #-1
+.Li31:
+ or $r10, P3H, P3L
+ beqz $r10, .Li32
+ ori $r9, $r9, #1
+.Li32:
+ move P3H, P2H
+ move P3L, $r9
+ addi $r10, $r6, #-1
+ slti $r15, $r10, #0x7fe
+ beqzs8 .LGoveund
+
+ #ADD(P3L, $0x400)
+ move $r15, #0x400
+ add P3L, P3L, $r15
+ slt $r15, P3L, $r15
+
+
+ #ADDCC(P3H, $0x0)
+ beqzs8 .LL61
+ add P3H, P3H, $r15
+ slt $r15, P3H, $r15
+.LL61:
+
+ #ADDC($r6, $0x0)
+ add $r6, $r6, $r15
+
+.LGlab8:
+ srli $r10, P3L, #11
+ andi $r10, $r10, #1
+ sub P3L, P3L, $r10
+ srli P1L, P3L, #11
+ slli $r10, P3H, #21
+ or P1L, P1L, $r10
+ slli $r10, P3H, #1
+ srli $r10, $r10, #12
+ or P1H, P1H, $r10
+ slli $r10, $r6, #20
+ or P1H, P1H, $r10
+
+.LGret:
+.LG999:
+ popm $r6, $r10
+ pop $lp
+ ret5 $lp
+
+.LGoveund:
+ bgtz $r6, .LGinf
+ subri P2H, $r6, #1
+ move P1L, #0
+.LL62:
+ move $r10, #0x20
+ slt $r15, P2H, $r10
+ bnezs8 .LL63
+ or P1L, P1L, P3L
+ move P3L, P3H
+ move P3H, #0
+ addi P2H, P2H, #0xffffffe0
+ bnez P3L, .LL62
+.LL63:
+ beqz P2H, .LL64
+ move P2L, P3H
+ move $r10, P3L
+ srl P3L, P3L, P2H
+ srl P3H, P3H, P2H
+ subri P2H, P2H, #0x20
+ sll P2L, P2L, P2H
+ or P3L, P3L, P2L
+ sll $r10, $r10, P2H
+ or P1L, P1L, $r10
+ beqz P1L, .LL64
+ ori P3L, P3L, #1
+.LL64:
+ #ADD(P3L, $0x400)
+ move $r15, #0x400
+ add P3L, P3L, $r15
+ slt $r15, P3L, $r15
+
+ #ADDC(P3H, $0x0)
+ add P3H, P3H, $r15
+ srli $r6, P3H, #31
+ j .LGlab8
+
+.LGspecA:
+ #ADD(P3L, P3L)
+ move $r15, P3L
+ add P3L, P3L, P3L
+ slt $r15, P3L, $r15
+
+ #ADDC(P3H, P3H)
+ add P3H, P3H, P3H
+ add P3H, P3H, $r15
+ bnez $r6, .Li33
+ or $r10, P3H, P3L
+ beqz $r10, .Li33
+
+
+ #NORMd($r4, P2H, P2L)
+ bnez P3H, .LL65
+ bnez P3L, .LL66
+ move $r6, #0
+ j .LL67
+.LL66:
+ move P3H, P3L
+ move P3L, #0
+ move P2H, #32
+ sub $r6, $r6, P2H
+.LL65:
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r3, $r5
+#else
+ pushm $r0, $r2
+ pushm $r4, $r5
+ move $r0, $r5
+ bal __clzsi2
+ move $r3, $r0
+ popm $r4, $r5
+ popm $r0, $r2
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r2, $r4
+#else
+ pushm $r0, $r1
+ pushm $r3, $r5
+ move $r0, $r4
+ bal __clzsi2
+ move $r2, $r0
+ popm $r3, $r5
+ popm $r0, $r1
+#endif
+#endif /* __big_endian_ */
+ beqz P2H, .LL67
+ sub $r6, $r6, P2H
+ subri P2L, P2H, #32
+ srl P2L, P3L, P2L
+ sll P3L, P3L, P2H
+ sll P3H, P3H, P2H
+ or P3H, P3H, P2L
+.LL67:
+ #NORMd End
+
+ j .LGlab1
+.Li33:
+ bne $r6, $r9, .Li35
+ slli $r10, O1H, #1
+ or $r10, $r10, O1L
+ beqz $r10, .LGnan
+.Li35:
+ subri $r15, $r9, #0x7ff
+ beqzs8 .LGspecB
+ beqz $r6, .LGret
+ or $r10, P3H, P3L
+ bnez $r10, .LGnan
+
+.LGinf:
+ move $r10, #0x7ff00000
+ or P1H, P1H, $r10
+ move P1L, #0
+ j .LGret
+
+.LGspecB:
+ #ADD(O1L, O1L)
+ move $r15, O1L
+ add O1L, O1L, O1L
+ slt $r15, O1L, $r15
+
+ #ADDC(O1H, O1H)
+ add O1H, O1H, O1H
+ add O1H, O1H, $r15
+ bnez $r9, .Li36
+ or $r10, O1H, O1L
+ beqz $r10, .LGinf
+
+
+ #NORMd($r7, P2H, P2L)
+ bnez O1H, .LL68
+ bnez O1L, .LL69
+ move $r9, #0
+ j .LL70
+.LL69:
+ move O1H, O1L
+ move O1L, #0
+ move P2H, #32
+ sub $r9, $r9, P2H
+.LL68:
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r3, $r8
+#else
+ pushm $r0, $r2
+ pushm $r4, $r5
+ move $r0, $r8
+ bal __clzsi2
+ move $r3, $r0
+ popm $r4, $r5
+ popm $r0, $r2
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r2, $r7
+#else
+ pushm $r0, $r1
+ pushm $r3, $r5
+ move $r0, $r7
+ bal __clzsi2
+ move $r2, $r0
+ popm $r3, $r5
+ popm $r0, $r1
+#endif
+#endif /* __big_endian__ */
+ beqz P2H, .LL70
+ sub $r9, $r9, P2H
+ subri P2L, P2H, #32
+ srl P2L, O1L, P2L
+ sll O1L, O1L, P2H
+ sll O1H, O1H, P2H
+ or O1H, O1H, P2L
+.LL70:
+ #NORMd End
+
+ j .LGlab2
+.Li36:
+ or $r10, O1H, O1L
+ beqz $r10, .Li38
+
+.LGnan:
+ move P1H, #0xfff80000
+.Li38:
+ move P1L, #0
+ j .LGret
+ .size __divdf3, .-__divdf3
+#endif /* L_div_df */
+
+
+
+#ifdef L_negate_sf
+
+ .text
+ .align 2
+ .global __negsf2
+ .type __negsf2, @function
+__negsf2:
+ push $lp
+
+ move $r1, #0x80000000
+ xor $r0, $r0, $r1
+
+.LN999:
+ pop $lp
+ ret5 $lp
+ .size __negsf2, .-__negsf2
+#endif /* L_negate_sf */
+
+
+
+#ifdef L_negate_df
+
+#ifndef __big_endian__
+ #define P1H $r1
+#else
+ #define P1H $r0
+#endif
+ .text
+ .align 2
+ .global __negdf2
+ .type __negdf2, @function
+__negdf2:
+ push $lp
+
+ move $r2, #0x80000000
+ xor P1H, P1H, $r2
+
+.LP999:
+ pop $lp
+ ret5 $lp
+ .size __negdf2, .-__negdf2
+#endif /* L_negate_df */
+
+
+
+#ifdef L_sf_to_df
+
+#ifndef __big_endian__
+ #define O1L $r1
+ #define O1H $r2
+#else
+ #define O1H $r1
+ #define O1L $r2
+#endif
+ .text
+ .align 2
+ .global __extendsfdf2
+ .type __extendsfdf2, @function
+__extendsfdf2:
+ push $lp
+
+ srli $r3, $r0, #23
+ andi $r3, $r3, #0xff
+ move $r5, #0x80000000
+ and O1H, $r0, $r5
+ addi $r5, $r3, #-1
+ slti $r15, $r5, #0xfe
+ beqzs8 .LJspec
+
+.LJlab1:
+ addi $r3, $r3, #0x380
+ slli $r5, $r0, #9
+ srli $r5, $r5, #12
+ or O1H, O1H, $r5
+ slli O1L, $r0, #29
+
+.LJret:
+ slli $r5, $r3, #20
+ or O1H, O1H, $r5
+ move $r0, $r1
+ move $r1, $r2
+
+.LJ999:
+ pop $lp
+ ret5 $lp
+
+.LJspec:
+ move O1L, #0
+ add $r0, $r0, $r0
+ beqz $r0, .LJret
+ bnez $r3, .Li42
+
+.Lb43:
+ addi $r3, $r3, #-1
+ add $r0, $r0, $r0
+ move $r5, #0x800000
+ slt $r15, $r0, $r5
+ bnezs8 .Lb43
+ j .LJlab1
+.Li42:
+ move $r3, #0x7ff
+ move $r5, #0xff000000
+ slt $r15, $r5, $r0
+ beqzs8 .LJret
+ move O1H, #0xfff80000
+ j .LJret
+ .size __extendsfdf2, .-__extendsfdf2
+#endif /* L_sf_to_df */
+
+
+
+#ifdef L_df_to_sf
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+#endif
+ .text
+ .align 2
+ .global __truncdfsf2
+ .type __truncdfsf2, @function
+__truncdfsf2:
+ push $lp
+ pushm $r6, $r8
+
+ slli P2H, P1H, #11
+ srli $r7, P1L, #21
+ or P2H, P2H, $r7
+ slli P2L, P1L, #11
+ move $r7, #0x80000000
+ or P2H, P2H, $r7
+ and $r5, P1H, $r7
+ slli $r4, P1H, #1
+ srli $r4, $r4, #21
+ addi $r4, $r4, #0xfffffc80
+ addi $r7, $r4, #-1
+ slti $r15, $r7, #0xfe
+ beqzs8 .LKspec
+
+.LKlab1:
+ beqz P2L, .Li45
+ ori P2H, P2H, #1
+.Li45:
+ #ADD(P2H, $0x80)
+ move $r15, #0x80
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+
+ #ADDC($r4, $0x0)
+ add $r4, $r4, $r15
+ srli $r7, P2H, #8
+ andi $r7, $r7, #1
+ sub P2H, P2H, $r7
+ slli P2H, P2H, #1
+ srli P2H, P2H, #9
+ slli $r7, $r4, #23
+ or P2H, P2H, $r7
+ or $r0, P2H, $r5
+
+.LK999:
+ popm $r6, $r8
+ pop $lp
+ ret5 $lp
+
+.LKspec:
+ subri $r15, $r4, #0x47f
+ bnezs8 .Li46
+ slli $r7, P2H, #1
+ or $r7, $r7, P2L
+ beqz $r7, .Li46
+ move $r0, #0xffc00000
+ j .LK999
+.Li46:
+ sltsi $r15, $r4, #0xff
+ bnezs8 .Li48
+ move $r7, #0x7f800000
+ or $r0, $r5, $r7
+ j .LK999
+.Li48:
+ subri $r6, $r4, #1
+ move $r7, #0x20
+ slt $r15, $r6, $r7
+ bnezs8 .Li49
+ move $r0, $r5
+ j .LK999
+.Li49:
+ subri $r8, $r6, #0x20
+ sll $r7, P2H, $r8
+ or P2L, P2L, $r7
+ srl P2H, P2H, $r6
+ move $r4, #0
+ move $r7, #0x80000000
+ or P2H, P2H, $r7
+ j .LKlab1
+ .size __truncdfsf2, .-__truncdfsf2
+#endif /* L_df_to_sf */
+
+
+
+#ifdef L_df_to_si
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+#else
+ #define P1H $r0
+ #define P1L $r1
+#endif
+ .global __fixdfsi
+ .type __fixdfsi, @function
+__fixdfsi:
+ push $lp
+ pushm $r6, $r6
+
+ slli $r3, P1H, #11
+ srli $r6, P1L, #21
+ or $r3, $r3, $r6
+ move $r6, #0x80000000
+ or $r3, $r3, $r6
+ slli $r6, P1H, #1
+ srli $r6, $r6, #21
+ subri $r2, $r6, #0x41e
+ blez $r2, .LLnaninf
+ move $r6, #0x20
+ slt $r15, $r2, $r6
+ bnezs8 .LL72
+ move $r3, #0
+.LL72:
+ srl $r3, $r3, $r2
+ sltsi $r15, P1H, #0
+ beqzs8 .Li50
+ subri $r3, $r3, #0
+.Li50:
+ move $r0, $r3
+
+.LL999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+
+.LLnaninf:
+ beqz P1L, .Li51
+ ori P1H, P1H, #1
+.Li51:
+ move $r6, #0x7ff00000
+ slt $r15, $r6, P1H
+ beqzs8 .Li52
+ move $r0, #0x80000000
+ j .LL999
+.Li52:
+ move $r0, #0x7fffffff
+ j .LL999
+ .size __fixdfsi, .-__fixdfsi
+#endif /* L_df_to_si */
+
+
+
+#ifdef L_fixsfdi
+
+#ifndef __big_endian__
+ #define O1L $r1
+ #define O1H $r2
+#else
+ #define O1H $r1
+ #define O1L $r2
+#endif
+ .text
+ .align 2
+ .global __fixsfdi
+ .type __fixsfdi, @function
+__fixsfdi:
+ push $lp
+
+ srli $r3, $r0, #23
+ andi $r3, $r3, #0xff
+ slli O1H, $r0, #8
+ move $r5, #0x80000000
+ or O1H, O1H, $r5
+ move O1L, #0
+ sltsi $r15, $r3, #0xbe
+ beqzs8 .LCinfnan
+ subri $r3, $r3, #0xbe
+.LL8:
+ move $r5, #0x20
+ slt $r15, $r3, $r5
+ bnezs8 .LL9
+ move O1L, O1H
+ move O1H, #0
+ addi $r3, $r3, #0xffffffe0
+ bnez O1L, .LL8
+.LL9:
+ beqz $r3, .LL10
+ move $r4, O1H
+ srl O1L, O1L, $r3
+ srl O1H, O1H, $r3
+ subri $r3, $r3, #0x20
+ sll $r4, $r4, $r3
+ or O1L, O1L, $r4
+.LL10:
+ sltsi $r15, $r0, #0
+ beqzs8 .LCret
+
+ subri O1H, O1H, #0
+ beqz O1L, .LL11
+ subri O1L, O1L, #0
+ subi45 O1H, #1
+.LL11:
+
+.LCret:
+ move $r0, $r1
+ move $r1, $r2
+
+.LC999:
+ pop $lp
+ ret5 $lp
+
+.LCinfnan:
+ sltsi $r15, $r0, #0
+ bnezs8 .LCret3
+ subri $r15, $r3, #0xff
+ bnezs8 .Li7
+ slli $r5, O1H, #1
+ beqz $r5, .Li7
+
+.LCret3:
+ move O1H, #0x80000000
+ j .LCret
+.Li7:
+ move O1H, #0x7fffffff
+ move O1L, #-1
+ j .LCret
+ .size __fixsfdi, .-__fixsfdi
+#endif /* L_fixsfdi */
+
+
+
+#ifdef L_fixdfdi
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define O1L $r3
+ #define O1H $r4
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define O1H $r3
+ #define O1L $r4
+#endif
+ .text
+ .align 2
+ .global __fixdfdi
+ .type __fixdfdi, @function
+__fixdfdi:
+ push $lp
+ pushm $r6, $r6
+
+ slli $r5, P1H, #1
+ srli $r5, $r5, #21
+ slli O1H, P1H, #11
+ srli $r6, P1L, #21
+ or O1H, O1H, $r6
+ slli O1L, P1L, #11
+ move $r6, #0x80000000
+ or O1H, O1H, $r6
+ slti $r15, $r5, #0x43e
+ beqzs8 .LCnaninf
+ subri $r2, $r5, #0x43e
+.LL14:
+ move $r6, #0x20
+ slt $r15, $r2, $r6
+ bnezs8 .LL15
+ move O1L, O1H
+ move O1H, #0
+ addi $r2, $r2, #0xffffffe0
+ bnez O1L, .LL14
+.LL15:
+ beqz $r2, .LL16
+ move P1L, O1H
+ srl O1L, O1L, $r2
+ srl O1H, O1H, $r2
+ subri $r2, $r2, #0x20
+ sll P1L, P1L, $r2
+ or O1L, O1L, P1L
+.LL16:
+ sltsi $r15, P1H, #0
+ beqzs8 .LCret
+
+ subri O1H, O1H, #0
+ beqz O1L, .LL17
+ subri O1L, O1L, #0
+ subi45 O1H, #1
+.LL17:
+
+.LCret:
+ move P1L, O1L
+ move P1H, O1H
+
+.LC999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+
+.LCnaninf:
+ sltsi $r15, P1H, #0
+ bnezs8 .LCret3
+ subri $r15, $r5, #0x7ff
+ bnezs8 .Li5
+ slli $r6, O1H, #1
+ or $r6, $r6, O1L
+ beqz $r6, .Li5
+
+.LCret3:
+ move O1H, #0x80000000
+ move O1L, #0
+ j .LCret
+.Li5:
+ move O1H, #0x7fffffff
+ move O1L, #-1
+ j .LCret
+ .size __fixdfdi, .-__fixdfdi
+#endif /* L_fixdfdi */
+
+
+
+#ifdef L_fixunssfsi
+
+ .global __fixunssfsi
+ .type __fixunssfsi, @function
+__fixunssfsi:
+ push $lp
+
+ slli $r1, $r0, #8
+ move $r3, #0x80000000
+ or $r1, $r1, $r3
+ srli $r3, $r0, #23
+ andi $r3, $r3, #0xff
+ subri $r2, $r3, #0x9e
+ sltsi $r15, $r2, #0
+ bnezs8 .LLspec
+ sltsi $r15, $r2, #0x20
+ bnezs8 .Li45
+ move $r0, #0
+ j .LL999
+.Li45:
+ srl $r1, $r1, $r2
+ sltsi $r15, $r0, #0
+ beqzs8 .Li46
+ subri $r1, $r1, #0
+.Li46:
+ move $r0, $r1
+
+.LL999:
+ pop $lp
+ ret5 $lp
+
+.LLspec:
+ move $r3, #0x7f800000
+ slt $r15, $r3, $r0
+ beqzs8 .Li47
+ move $r0, #0x80000000
+ j .LL999
+.Li47:
+ move $r0, #-1
+ j .LL999
+ .size __fixunssfsi, .-__fixunssfsi
+#endif /* L_fixunssfsi */
+
+
+
+#ifdef L_fixunsdfsi
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+#else
+ #define P1H $r0
+ #define P1L $r1
+#endif
+ .text
+ .align 2
+ .global __fixunsdfsi
+ .type __fixunsdfsi, @function
+__fixunsdfsi:
+ push $lp
+ pushm $r6, $r6
+
+ slli $r3, P1H, #11
+ srli $r6, P1L, #21
+ or $r3, $r3, $r6
+ move $r6, #0x80000000
+ or $r3, $r3, $r6
+ slli $r6, P1H, #1
+ srli $r6, $r6, #21
+ subri $r2, $r6, #0x41e
+ sltsi $r15, $r2, #0
+ bnezs8 .LNnaninf
+ move $r6, #0x20
+ slt $r15, $r2, $r6
+ bnezs8 .LL73
+ move $r3, #0
+.LL73:
+ srl $r3, $r3, $r2
+ sltsi $r15, P1H, #0
+ beqzs8 .Li53
+ subri $r3, $r3, #0
+.Li53:
+ move $r0, $r3
+
+.LN999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+
+.LNnaninf:
+ beqz P1L, .Li54
+ ori P1H, P1H, #1
+.Li54:
+ move $r6, #0x7ff00000
+ slt $r15, $r6, P1H
+ beqzs8 .Li55
+ move $r0, #0x80000000
+ j .LN999
+.Li55:
+ move $r0, #-1
+ j .LN999
+ .size __fixunsdfsi, .-__fixunsdfsi
+#endif /* L_fixunsdfsi */
+
+
+
+#ifdef L_fixunssfdi
+
+#ifndef __big_endian__
+ #define O1L $r1
+ #define O1H $r2
+#else
+ #define O1H $r1
+ #define O1L $r2
+#endif
+ .text
+ .align 2
+ .global __fixunssfdi
+ .type __fixunssfdi, @function
+__fixunssfdi:
+ push $lp
+
+ srli $r3, $r0, #23
+ andi $r3, $r3, #0xff
+ slli O1H, $r0, #8
+ move $r5, #0x80000000
+ or O1H, O1H, $r5
+ move O1L, #0
+ sltsi $r15, $r3, #0xbe
+ beqzs8 .LDinfnan
+ subri $r3, $r3, #0xbe
+.LL12:
+ move $r5, #0x20
+ slt $r15, $r3, $r5
+ bnezs8 .LL13
+ move O1L, O1H
+ move O1H, #0
+ addi $r3, $r3, #0xffffffe0
+ bnez O1L, .LL12
+.LL13:
+ beqz $r3, .LL14
+ move $r4, O1H
+ srl O1L, O1L, $r3
+ srl O1H, O1H, $r3
+ subri $r3, $r3, #0x20
+ sll $r4, $r4, $r3
+ or O1L, O1L, $r4
+.LL14:
+ sltsi $r15, $r0, #0
+ beqzs8 .LDret
+
+ subri O1H, O1H, #0
+ beqz O1L, .LL15
+ subri O1L, O1L, #0
+ subi45 O1H, #1
+.LL15:
+
+.LDret:
+ move $r0, $r1
+ move $r1, $r2
+
+.LD999:
+ pop $lp
+ ret5 $lp
+
+.LDinfnan:
+ move O1H, #0x80000000
+ move O1L, #0
+ j .LDret
+ .size __fixunssfdi, .-__fixunssfdi
+#endif /* L_fixunssfdi */
+
+
+
+#ifdef L_fixunsdfdi
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define O1L $r3
+ #define O1H $r4
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define O1H $r3
+ #define O1L $r4
+#endif
+ .text
+ .align 2
+ .global __fixunsdfdi
+ .type __fixunsdfdi, @function
+__fixunsdfdi:
+ push $lp
+ pushm $r6, $r6
+
+ slli $r5, P1H, #1
+ srli $r5, $r5, #21
+ slli O1H, P1H, #11
+ srli $r6, P1L, #21
+ or O1H, O1H, $r6
+ slli O1L, P1L, #11
+ move $r6, #0x80000000
+ or O1H, O1H, $r6
+ slti $r15, $r5, #0x43e
+ beqzs8 .LDnaninf
+ subri $r2, $r5, #0x43e
+.LL18:
+ move $r6, #0x20
+ slt $r15, $r2, $r6
+ bnezs8 .LL19
+ move O1L, O1H
+ move O1H, #0
+ addi $r2, $r2, #0xffffffe0
+ bnez O1L, .LL18
+.LL19:
+ beqz $r2, .LL20
+ move P1L, O1H
+ srl O1L, O1L, $r2
+ srl O1H, O1H, $r2
+ subri $r2, $r2, #0x20
+ sll P1L, P1L, $r2
+ or O1L, O1L, P1L
+.LL20:
+ sltsi $r15, P1H, #0
+ beqzs8 .LDret
+
+ subri O1H, O1H, #0
+ beqz O1L, .LL21
+ subri O1L, O1L, #0
+ subi45 O1H, #1
+.LL21:
+
+.LDret:
+ move P1L, O1L
+ move P1H, O1H
+
+.LD999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+
+.LDnaninf:
+ move O1H, #0x80000000
+ move O1L, #0
+ j .LDret
+ .size __fixunsdfdi, .-__fixunsdfdi
+#endif /* L_fixunsdfdi */
+
+
+
+#ifdef L_si_to_sf
+
+ .text
+ .align 2
+ .global __floatsisf
+ .type __floatsisf, @function
+__floatsisf:
+ push $lp
+
+ move $r4, #0x80000000
+ and $r2, $r0, $r4
+ beqz $r0, .Li39
+ sltsi $r15, $r0, #0
+ beqzs8 .Li40
+ subri $r0, $r0, #0
+.Li40:
+ move $r1, #0x9e
+#ifdef __NDS32_PERF_EXT__
+ clz $r3, $r0
+#else
+ pushm $r0, $r2
+ pushm $r4, $r5
+ bal __clzsi2
+ move $r3, $r0
+ popm $r4, $r5
+ popm $r0, $r2
+#endif
+ sub $r1, $r1, $r3
+ sll $r0, $r0, $r3
+
+ #ADD($r0, $0x80)
+ move $r15, #0x80
+ add $r0, $r0, $r15
+ slt $r15, $r0, $r15
+
+ #ADDC($r1, $0x0)
+ add $r1, $r1, $r15
+ srai $r4, $r0, #8
+ andi $r4, $r4, #1
+ sub $r0, $r0, $r4
+ slli $r0, $r0, #1
+ srli $r0, $r0, #9
+ slli $r4, $r1, #23
+ or $r0, $r0, $r4
+.Li39:
+ or $r0, $r0, $r2
+
+.LH999:
+ pop $lp
+ ret5 $lp
+ .size __floatsisf, .-__floatsisf
+#endif /* L_si_to_sf */
+
+
+
+#ifdef L_si_to_df
+
+#ifndef __big_endian__
+ #define O1L $r1
+ #define O1H $r2
+ #define O2L $r4
+ #define O2H $r5
+#else
+ #define O1H $r1
+ #define O1L $r2
+ #define O2H $r4
+ #define O2L $r5
+#endif
+ .text
+ .align 2
+ .global __floatsidf
+ .type __floatsidf, @function
+__floatsidf:
+ push $lp
+ pushm $r6, $r6
+
+ move O1L, #0
+ move O2H, O1L
+ move $r3, O1L
+ move O1H, $r0
+ beqz O1H, .Li39
+ sltsi $r15, O1H, #0
+ beqzs8 .Li40
+ move O2H, #0x80000000
+
+ subri O1H, O1H, #0
+ beqz O1L, .LL71
+ subri O1L, O1L, #0
+ subi45 O1H, #1
+.LL71:
+.Li40:
+ move $r3, #0x41e
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r4, $r2
+#else
+ pushm $r0, $r3
+ push $r5
+ move $r0, $r2
+ bal __clzsi2
+ move $r4, $r0
+ pop $r5
+ popm $r0, $r3
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r5, $r1
+#else
+ pushm $r0, $r4
+ move $r0, $r1
+ bal __clzsi2
+ move $r5, $r0
+ popm $r0, $r4
+#endif
+#endif /* __big_endian__ */
+ sub $r3, $r3, O2L
+ sll O1H, O1H, O2L
+.Li39:
+ srli O2L, O1L, #11
+ slli $r6, O1H, #21
+ or O2L, O2L, $r6
+ slli $r6, O1H, #1
+ srli $r6, $r6, #12
+ or O2H, O2H, $r6
+ slli $r6, $r3, #20
+ or O2H, O2H, $r6
+ move $r0, $r4
+ move $r1, $r5
+
+.LH999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+ .size __floatsidf, .-__floatsidf
+#endif /* L_si_to_df */
+
+
+
+#ifdef L_floatdisf
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+#endif
+ .text
+ .align 2
+ .global __floatdisf
+ .type __floatdisf, @function
+__floatdisf:
+ push $lp
+ pushm $r6, $r7
+
+ move $r7, #0x80000000
+ and $r5, P1H, $r7
+ move P2H, P1H
+ move P2L, P1L
+ or $r7, P1H, P1L
+ beqz $r7, .Li1
+ sltsi $r15, P1H, #0
+ beqzs8 .Li2
+
+ subri P2H, P2H, #0
+ beqz P2L, .LL1
+ subri P2L, P2L, #0
+ subi45 P2H, #1
+.LL1:
+.Li2:
+ move $r4, #0xbe
+
+
+ #NORMd($r2, $r6, P1L)
+ bnez P2H, .LL2
+ bnez P2L, .LL3
+ move $r4, #0
+ j .LL4
+.LL3:
+ move P2H, P2L
+ move P2L, #0
+ move $r6, #32
+ sub $r4, $r4, $r6
+.LL2:
+#ifdef __NDS32_PERF_EXT__
+ clz $r6, P2H
+#else
+ pushm $r0, $r5
+ move $r0, P2H
+ bal __clzsi2
+ move $r6, $r0
+ popm $r0, $r5
+#endif
+ beqz $r6, .LL4
+ sub $r4, $r4, $r6
+ subri P1L, $r6, #32
+ srl P1L, P2L, P1L
+ sll P2L, P2L, $r6
+ sll P2H, P2H, $r6
+ or P2H, P2H, P1L
+.LL4:
+ #NORMd End
+
+ beqz P2L, .Li3
+ ori P2H, P2H, #1
+.Li3:
+ #ADD(P2H, $0x80)
+ move $r15, #0x80
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+
+ #ADDC($r4, $0x0)
+ add $r4, $r4, $r15
+ srli $r7, P2H, #8
+ andi $r7, $r7, #1
+ sub P2H, P2H, $r7
+ slli P2H, P2H, #1
+ srli P2H, P2H, #9
+ slli $r7, $r4, #23
+ or P2H, P2H, $r7
+.Li1:
+ or $r0, P2H, $r5
+
+.LA999:
+ popm $r6, $r7
+ pop $lp
+ ret5 $lp
+ .size __floatdisf, .-__floatdisf
+#endif /* L_floatdisf */
+
+
+
+#ifdef L_floatdidf
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+ #define O1L $r5
+ #define O1H $r6
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+ #define O1H $r5
+ #define O1L $r6
+#endif
+ .text
+ .align 2
+ .global __floatdidf
+ .type __floatdidf, @function
+__floatdidf:
+ push $lp
+ pushm $r6, $r8
+
+ move $r4, #0
+ move $r7, $r4
+ move P2H, P1H
+ move P2L, P1L
+ or $r8, P1H, P1L
+ beqz $r8, .Li1
+ move $r4, #0x43e
+ sltsi $r15, P1H, #0
+ beqzs8 .Li2
+ move $r7, #0x80000000
+
+ subri P2H, P2H, #0
+ beqz P2L, .LL1
+ subri P2L, P2L, #0
+ subi45 P2H, #1
+.LL1:
+
+.Li2:
+ #NORMd($r2, O1H, O1L)
+ bnez P2H, .LL2
+ bnez P2L, .LL3
+ move $r4, #0
+ j .LL4
+.LL3:
+ move P2H, P2L
+ move P2L, #0
+ move O1H, #32
+ sub $r4, $r4, O1H
+.LL2:
+#ifdef __NDS32_PERF_EXT__
+ clz O1H, P2H
+#else /* not __NDS32_PERF_EXT__ */
+/*
+ Replace clz with function call.
+ clz O1H, P2H
+ EL: clz $r6, $r3
+ EB: clz $r5, $r2
+*/
+#ifndef __big_endian__
+ pushm $r0, $r5
+ move $r0, $r3
+ bal __clzsi2
+ move $r6, $r0
+ popm $r0, $r5
+#else
+ pushm $r0, $r4
+ move $r0, $r2
+ bal __clzsi2
+ move $r5, $r0
+ popm $r0, $r4
+#endif
+#endif /* not __NDS32_PERF_EXT__ */
+ beqz O1H, .LL4
+ sub $r4, $r4, O1H
+ subri O1L, O1H, #32
+ srl O1L, P2L, O1L
+ sll P2L, P2L, O1H
+ sll P2H, P2H, O1H
+ or P2H, P2H, O1L
+.LL4:
+ #NORMd End
+
+ #ADD(P2L, $0x400)
+ move $r15, #0x400
+ add P2L, P2L, $r15
+ slt $r15, P2L, $r15
+
+
+ #ADDCC(P2H, $0x0)
+ beqzs8 .LL7
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+.LL7:
+
+ #ADDC($r4, $0x0)
+ add $r4, $r4, $r15
+ srli $r8, P2L, #11
+ andi $r8, $r8, #1
+ sub P2L, P2L, $r8
+.Li1:
+ srli O1L, P2L, #11
+ slli $r8, P2H, #21
+ or O1L, O1L, $r8
+ slli O1H, P2H, #1
+ srli O1H, O1H, #12
+ slli $r8, $r4, #20
+ or O1H, O1H, $r8
+ or O1H, O1H, $r7
+ move P1L, O1L
+ move P1H, O1H
+
+.LA999:
+ popm $r6, $r8
+ pop $lp
+ ret5 $lp
+ .size __floatdidf, .-__floatdidf
+#endif /* L_floatdidf */
+
+
+
+#ifdef L_floatunsisf
+
+ .text
+ .align 2
+ .global __floatunsisf
+ .type __floatunsisf, @function
+__floatunsisf:
+ push $lp
+
+ beqz $r0, .Li41
+ move $r2, #0x9e
+#ifdef __NDS32_PERF_EXT__
+ clz $r1, $r0
+#else
+ push $r0
+ pushm $r2, $r5
+ bal __clzsi2
+ move $r1, $r0
+ popm $r2, $r5
+ pop $r0
+#endif
+
+ sub $r2, $r2, $r1
+ sll $r0, $r0, $r1
+
+ #ADD($r0, $0x80)
+ move $r15, #0x80
+ add $r0, $r0, $r15
+ slt $r15, $r0, $r15
+
+ #ADDC($r2, $0x0)
+ add $r2, $r2, $r15
+ srli $r3, $r0, #8
+ andi $r3, $r3, #1
+ sub $r0, $r0, $r3
+ slli $r0, $r0, #1
+ srli $r0, $r0, #9
+ slli $r3, $r2, #23
+ or $r0, $r0, $r3
+
+.Li41:
+.LI999:
+ pop $lp
+ ret5 $lp
+ .size __floatunsisf, .-__floatunsisf
+#endif /* L_floatunsisf */
+
+
+
+#ifdef L_floatunsidf
+
+#ifndef __big_endian__
+ #define O1L $r1
+ #define O1H $r2
+ #define O2L $r4
+ #define O2H $r5
+#else
+ #define O1H $r1
+ #define O1L $r2
+ #define O2H $r4
+ #define O2L $r5
+#endif
+ .text
+ .align 2
+ .global __floatunsidf
+ .type __floatunsidf, @function
+__floatunsidf:
+ push $lp
+ pushm $r6, $r6
+
+ move O1L, #0
+ move $r3, O1L
+ move O1H, $r0
+ beqz O1H, .Li41
+ move $r3, #0x41e
+#ifndef __big_endian__
+#ifdef __NDS32_PERF_EXT__
+ clz $r5, $r2
+#else
+ pushm $r0, $r4
+ move $r0, $r2
+ bal __clzsi2
+ move $r5, $r0
+ popm $r0, $r4
+#endif
+#else /* __big_endian__ */
+#ifdef __NDS32_PERF_EXT__
+ clz $r4, $r1
+#else
+ pushm $r0, $r3
+ push $r5
+ move $r0, $r1
+ bal __clzsi2
+ move $r4, $r0
+ pop $r5
+ popm $r0, $r3
+#endif
+#endif /* __big_endian__ */
+ sub $r3, $r3, O2H
+ sll O1H, O1H, O2H
+.Li41:
+ srli O2L, O1L, #11
+ slli $r6, O1H, #21
+ or O2L, O2L, $r6
+ slli O2H, O1H, #1
+ srli O2H, O2H, #12
+ slli $r6, $r3, #20
+ or O2H, O2H, $r6
+ move $r0, $r4
+ move $r1, $r5
+
+.LI999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+ .size __floatunsidf, .-__floatunsidf
+#endif /* L_floatunsidf */
+
+
+
+#ifdef L_floatundisf
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+#endif
+ .text
+ .align 2
+ .global __floatundisf
+ .type __floatundisf, @function
+__floatundisf:
+ push $lp
+ pushm $r6, $r6
+
+ move P2H, P1H
+ move P2L, P1L
+ or $r6, P1H, P1L
+ beqz $r6, .Li4
+ move $r4, #0xbe
+
+
+ #NORMd($r2, $r5, P1L)
+ bnez P2H, .LL5
+ bnez P2L, .LL6
+ move $r4, #0
+ j .LL7
+.LL6:
+ move P2H, P2L
+ move P2L, #0
+ move $r5, #32
+ sub $r4, $r4, $r5
+.LL5:
+#ifdef __NDS32_PERF_EXT__
+ clz $r5, P2H
+#else
+ pushm $r0, $r4
+ move $r0, P2H
+ bal __clzsi2
+ move $r5, $r0
+ popm $r0, $r4
+#endif
+ beqz $r5, .LL7
+ sub $r4, $r4, $r5
+ subri P1L, $r5, #32
+ srl P1L, P2L, P1L
+ sll P2L, P2L, $r5
+ sll P2H, P2H, $r5
+ or P2H, P2H, P1L
+.LL7:
+ #NORMd End
+
+ beqz P2L, .Li5
+ ori P2H, P2H, #1
+.Li5:
+ #ADD(P2H, $0x80)
+ move $r15, #0x80
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+
+ #ADDC($r4, $0x0)
+ add $r4, $r4, $r15
+ srli $r6, P2H, #8
+ andi $r6, $r6, #1
+ sub P2H, P2H, $r6
+ slli P2H, P2H, #1
+ srli P2H, P2H, #9
+ slli $r6, $r4, #23
+ or P2H, P2H, $r6
+.Li4:
+ move $r0, P2H
+
+.LB999:
+ popm $r6, $r6
+ pop $lp
+ ret5 $lp
+ .size __floatundisf, .-__floatundisf
+#endif /* L_floatundisf */
+
+
+
+#ifdef L_floatundidf
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+ #define O1L $r5
+ #define O1H $r6
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+ #define O1H $r5
+ #define O1L $r6
+#endif
+ .text
+ .align 2
+ .global __floatundidf
+ .type __floatundidf, @function
+__floatundidf:
+ push $lp
+ pushm $r6, $r7
+
+ move $r4, #0
+ move P2H, P1H
+ move P2L, P1L
+ or $r7, P1H, P1L
+ beqz $r7, .Li3
+ move $r4, #0x43e
+
+
+ #NORMd($r2, O1H, O1L)
+ bnez P2H, .LL8
+ bnez P2L, .LL9
+ move $r4, #0
+ j .LL10
+.LL9:
+ move P2H, P2L
+ move P2L, #0
+ move O1H, #32
+ sub $r4, $r4, O1H
+.LL8:
+#ifdef __NDS32_PERF_EXT__
+ clz O1H, P2H
+#else /* not __NDS32_PERF_EXT__ */
+/*
+ Replace clz with function call.
+ clz O1H, P2H
+ EL: clz $r6, $r3
+ EB: clz $r5, $r2
+*/
+#ifndef __big_endian__
+ pushm $r0, $r5
+ move $r0, $r3
+ bal __clzsi2
+ move $r6, $r0
+ popm $r0, $r5
+#else
+ pushm $r0, $r4
+ move $r0, $r2
+ bal __clzsi2
+ move $r5, $r0
+ popm $r0, $r4
+#endif
+#endif /* not __NDS32_PERF_EXT__ */
+ beqz O1H, .LL10
+ sub $r4, $r4, O1H
+ subri O1L, O1H, #32
+ srl O1L, P2L, O1L
+ sll P2L, P2L, O1H
+ sll P2H, P2H, O1H
+ or P2H, P2H, O1L
+.LL10:
+ #NORMd End
+
+ #ADD(P2L, $0x400)
+ move $r15, #0x400
+ add P2L, P2L, $r15
+ slt $r15, P2L, $r15
+
+
+ #ADDCC(P2H, $0x0)
+ beqzs8 .LL13
+ add P2H, P2H, $r15
+ slt $r15, P2H, $r15
+.LL13:
+
+ #ADDC($r4, $0x0)
+ add $r4, $r4, $r15
+ srli $r7, P2L, #11
+ andi $r7, $r7, #1
+ sub P2L, P2L, $r7
+.Li3:
+ srli O1L, P2L, #11
+ slli $r7, P2H, #21
+ or O1L, O1L, $r7
+ slli O1H, P2H, #1
+ srli O1H, O1H, #12
+ slli $r7, $r4, #20
+ or O1H, O1H, $r7
+ move P1L, O1L
+ move P1H, O1H
+
+.LB999:
+ popm $r6, $r7
+ pop $lp
+ ret5 $lp
+ .size __floatundidf, .-__floatundidf
+#endif /* L_floatundidf */
+
+
+
+#ifdef L_compare_sf
+
+ .text
+ .align 2
+ .global __cmpsf2
+ .type __cmpsf2, @function
+__cmpsf2:
+ .global __eqsf2
+ .type __eqsf2, @function
+__eqsf2:
+ .global __ltsf2
+ .type __ltsf2, @function
+__ltsf2:
+ .global __lesf2
+ .type __lesf2, @function
+__lesf2:
+ .global __nesf2
+ .type __nesf2, @function
+__nesf2:
+ move $r4, #1
+ j .LA
+
+ .global __gesf2
+ .type __gesf2, @function
+__gesf2:
+ .global __gtsf2
+ .type __gtsf2, @function
+__gtsf2:
+ move $r4, #-1
+.LA:
+ push $lp
+
+ slli $r2, $r0, #1
+ slli $r3, $r1, #1
+ or $r5, $r2, $r3
+ beqz $r5, .LMequ
+ move $r5, #0xff000000
+ slt $r15, $r5, $r2
+ bnezs8 .LMnan
+ slt $r15, $r5, $r3
+ bnezs8 .LMnan
+ srli $r2, $r2, #1
+ sltsi $r15, $r0, #0
+ beqzs8 .Li48
+ subri $r2, $r2, #0
+.Li48:
+ srli $r3, $r3, #1
+ sltsi $r15, $r1, #0
+ beqzs8 .Li49
+ subri $r3, $r3, #0
+.Li49:
+ slts $r15, $r2, $r3
+ beqzs8 .Li50
+ move $r0, #-1
+ j .LM999
+.Li50:
+ slts $r15, $r3, $r2
+ beqzs8 .LMequ
+ move $r0, #1
+ j .LM999
+
+.LMequ:
+ move $r0, #0
+
+.LM999:
+ pop $lp
+ ret5 $lp
+
+.LMnan:
+ move $r0, $r4
+ j .LM999
+ .size __cmpsf2, .-__cmpsf2
+ .size __eqsf2, .-__eqsf2
+ .size __ltsf2, .-__ltsf2
+ .size __lesf2, .-__lesf2
+ .size __nesf2, .-__nesf2
+ .size __gesf2, .-__gesf2
+ .size __gtsf2, .-__gtsf2
+#endif /* L_compare_sf */
+
+
+
+#ifdef L_compare_df
+
+#ifdef __big_endian__
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+#else
+ #define P1H $r1
+ #define P1L $r0
+ #define P2H $r3
+ #define P2L $r2
+#endif
+ .align 2
+ .globl __gtdf2
+ .globl __gedf2
+ .globl __ltdf2
+ .globl __ledf2
+ .globl __eqdf2
+ .globl __nedf2
+ .globl __cmpdf2
+ .type __gtdf2, @function
+ .type __gedf2, @function
+ .type __ltdf2, @function
+ .type __ledf2, @function
+ .type __eqdf2, @function
+ .type __nedf2, @function
+ .type __cmpdf2, @function
+__gtdf2:
+__gedf2:
+ movi $r4, -1
+ b .L1
+
+__ltdf2:
+__ledf2:
+__cmpdf2:
+__nedf2:
+__eqdf2:
+ movi $r4, 1
+.L1:
+#if defined (__NDS32_ISA_V3M__)
+ push25 $r10, 0
+#else
+ smw.adm $r6, [$sp], $r9, 0
+#endif
+
+ sethi $r5, 0x7ff00
+ and $r6, P1H, $r5 ! r6=aExp
+ and $r7, P2H, $r5 ! r7=bExp
+ slli $r8, P1H, 12 ! r8=aSig0
+ slli $r9, P2H, 12 ! r9=bSig0
+ beq $r6, $r5, .L11 ! aExp==0x7ff
+ beq $r7, $r5, .L12 ! bExp==0x7ff
+.L2:
+ slli $ta, P1H, 1 ! ta=ahigh<<1
+ or $ta, P1L, $ta !
+ xor $r5, P1H, P2H ! r5=ahigh^bhigh
+ beqz $ta, .L3 ! if(ahigh<<1)==0,go .L3
+ !-------------------------------
+ ! (ahigh<<1)!=0 || (bhigh<<1)!=0
+ !-------------------------------
+.L4:
+ beqz $r5, .L5 ! ahigh==bhigh, go .L5
+ !--------------------
+ ! a != b
+ !--------------------
+.L6:
+ bltz $r5, .L7 ! if(aSign!=bSign), go .L7
+ !--------------------
+ ! aSign==bSign
+ !--------------------
+ slt $ta, $r6, $r7 ! ta=(aExp<bExp)
+ bne $r6, $r7, .L8 ! if(aExp!=bExp),go .L8
+ slt $ta, $r8, $r9 ! ta=(aSig0<bSig0)
+ bne $r8, $r9, .L8 ! if(aSig0!=bSig0),go .L8
+ slt $ta, P1L, P2L ! ta=(aSig1<bSig1)
+.L8:
+ beqz $ta, .L10 ! if(|a|>|b|), go .L10
+ nor $r0, P2H, P2H ! if(|a|<|b|),return (~yh)
+.L14:
+#if defined (__NDS32_ISA_V3M__)
+ pop25 $r10, 0
+#else
+ lmw.bim $r6, [$sp], $r9, 0
+ ret
+#endif
+.L10:
+ ori $r0, P2H, 1 ! return (yh|1)
+ b .L14
+ !--------------------
+ ! (ahigh<<1)=0
+ !--------------------
+.L3:
+ slli $ta, P2H, 1 ! ta=bhigh<<1
+ or $ta, P2L, $ta !
+ bnez $ta, .L4 ! ta=(bhigh<<1)!=0,go .L4
+.L5:
+ xor $ta, P1L, P2L ! ta=alow^blow
+ bnez $ta, .L6 ! alow!=blow,go .L6
+ movi $r0, 0 ! a==b, return 0
+ b .L14
+ !--------------------
+ ! aExp=0x7ff;
+ !--------------------
+.L11:
+ or P1L, P1L, $r8 ! x1=(aSig0|aSig1)
+ bnez P1L, .L13 ! if(a=nan), go.L13
+ xor $ta, $r7, $r5 ! ta=(bExp^0x7ff)
+ bnez $ta, .L2 ! if(bExp!=0x7ff), go .L2
+ !--------------------
+ ! bExp=0x7ff;
+ !--------------------
+.L12:
+ or $ta, P2L, $r9 ! ta=(bSig0|bSig1)
+ beqz $ta, .L2 ! if(b!=nan), go .L2
+.L13:
+ move $r0, $r4
+ b .L14
+ !--------------------
+ ! aSign!=bSign
+ !--------------------
+.L7:
+ ori $r0, P1H, 1 ! if(aSign!=bSign), return (ahigh|1)
+ b .L14
+
+ .size __gtdf2, .-__gtdf2
+ .size __gedf2, .-__gedf2
+ .size __ltdf2, .-__ltdf2
+ .size __ledf2, .-__ledf2
+ .size __eqdf2, .-__eqdf2
+ .size __nedf2, .-__nedf2
+ .size __cmpdf2, .-__cmpdf2
+#endif /* L_compare_df */
+
+
+
+#ifdef L_unord_sf
+
+ .text
+ .align 2
+ .global __unordsf2
+ .type __unordsf2, @function
+__unordsf2:
+ push $lp
+
+ slli $r2, $r0, #1
+ move $r3, #0xff000000
+ slt $r15, $r3, $r2
+ beqzs8 .Li52
+ move $r0, #1
+ j .LP999
+.Li52:
+ slli $r2, $r1, #1
+ move $r3, #0xff000000
+ slt $r15, $r3, $r2
+ beqzs8 .Li53
+ move $r0, #1
+ j .LP999
+.Li53:
+ move $r0, #0
+
+.LP999:
+ pop $lp
+ ret5 $lp
+ .size __unordsf2, .-__unordsf2
+#endif /* L_unord_sf */
+
+
+
+#ifdef L_unord_df
+
+#ifndef __big_endian__
+ #define P1L $r0
+ #define P1H $r1
+ #define P2L $r2
+ #define P2H $r3
+#else
+ #define P1H $r0
+ #define P1L $r1
+ #define P2H $r2
+ #define P2L $r3
+#endif
+ .text
+ .align 2
+ .global __unorddf2
+ .type __unorddf2, @function
+__unorddf2:
+ push $lp
+
+ slli $r4, P1H, #1
+ beqz P1L, .Li66
+ addi $r4, $r4, #1
+.Li66:
+ move $r5, #0xffe00000
+ slt $r15, $r5, $r4
+ beqzs8 .Li67
+ move $r0, #1
+ j .LR999
+.Li67:
+ slli $r4, P2H, #1
+ beqz P2L, .Li68
+ addi $r4, $r4, #1
+.Li68:
+ move $r5, #0xffe00000
+ slt $r15, $r5, $r4
+ beqzs8 .Li69
+ move $r0, #1
+ j .LR999
+.Li69:
+ move $r0, #0
+
+.LR999:
+ pop $lp
+ ret5 $lp
+ .size __unorddf2, .-__unorddf2
+#endif /* L_unord_df */
+/* ------------------------------------------- */
+/* DPBIT floating point operations for libgcc */
+/* ------------------------------------------- */
diff --git a/gcc-4.9/libgcc/config/nds32/lib1asmsrc-newlib.S b/gcc-4.9/libgcc/config/nds32/lib1asmsrc-newlib.S
new file mode 100644
index 000000000..679b070c4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/lib1asmsrc-newlib.S
@@ -0,0 +1,204 @@
+/* newlib libgcc routines of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ .section .mdebug.abi_nds32
+ .previous
+
+#ifdef L_divsi3
+
+ .text
+ .align 2
+ .globl __divsi3
+ .type __divsi3, @function
+__divsi3:
+ movi $r5, 0 ! res = 0
+ xor $r4, $r0, $r1 ! neg
+ bltz $r0, .L1
+ bltz $r1, .L2
+.L3:
+ movi $r2, 1 ! bit = 1
+ slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor
+ beqz $r3, .L5
+ bltz $r1, .L5
+
+.L4:
+ slli $r2, $r2, 1
+ beqz $r2, .L6
+ slli $r1, $r1, 1
+ slt $r3, $r1, $r0
+ beqz $r3, .L5
+ bgez $r1, .L4
+
+.L5:
+ slt $r3, $r0, $r1
+ bnez $r3, .L8
+ sub $r0, $r0, $r1
+ or $r5, $r5, $r2
+.L8:
+ srli $r1, $r1, 1
+ srli $r2, $r2, 1
+ bnez $r2, .L5
+.L6:
+ bgez $r4, .L7
+ subri $r5, $r5, 0 ! negate if $r4 < 0
+.L7:
+ move $r0, $r5
+ ret
+.L1:
+ subri $r0, $r0, 0 ! change neg to pos
+ bgez $r1, .L3
+.L2:
+ subri $r1, $r1, 0 ! change neg to pos
+ j .L3
+ .size __divsi3, .-__divsi3
+
+#endif /* L_divsi3 */
+
+
+#ifdef L_modsi3
+
+ .text
+ .align 2
+ .globl __modsi3
+ .type __modsi3, @function
+__modsi3:
+ movi $r5, 0 ! res = 0
+ move $r4, $r0 ! neg
+ bltz $r0, .L1
+ bltz $r1, .L2
+.L3:
+ movi $r2, 1 ! bit = 1
+ slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor
+ beqz $r3, .L5
+ bltz $r1, .L5
+
+.L4:
+ slli $r2, $r2, 1
+ beqz $r2, .L6
+ slli $r1, $r1, 1
+ slt $r3, $r1, $r0
+ beqz $r3, .L5
+ bgez $r1, .L4
+
+.L5:
+ slt $r3, $r0, $r1
+ bnez $r3, .L8
+ sub $r0, $r0, $r1
+ or $r5, $r5, $r2
+.L8:
+ srli $r1, $r1, 1
+ srli $r2, $r2, 1
+ bnez $r2, .L5
+.L6:
+ bgez $r4, .L7
+ subri $r0, $r0, 0 ! negate if $r4 < 0
+.L7:
+ ret
+.L1:
+ subri $r0, $r0, 0 ! change neg to pos
+ bgez $r1, .L3
+.L2:
+ subri $r1, $r1, 0 ! change neg to pos
+ j .L3
+ .size __modsi3, .-__modsi3
+
+#endif /* L_modsi3 */
+
+
+#ifdef L_udivsi3
+
+ .text
+ .align 2
+ .globl __udivsi3
+ .type __udivsi3, @function
+__udivsi3:
+ movi $r5, 0 ! res = 0
+ movi $r2, 1 ! bit = 1
+ slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor
+ beqz $r3, .L5
+ bltz $r1, .L5
+
+.L4:
+ slli $r2, $r2, 1
+ beqz $r2, .L6
+ slli $r1, $r1, 1
+ slt $r3, $r1, $r0
+ beqz $r3, .L5
+ bgez $r1, .L4
+
+.L5:
+ slt $r3, $r0, $r1
+ bnez $r3, .L8
+ sub $r0, $r0, $r1
+ or $r5, $r5, $r2
+.L8:
+ srli $r1, $r1, 1
+ srli $r2, $r2, 1
+ bnez $r2, .L5
+.L6:
+ move $r0, $r5
+ ret
+ .size __udivsi3, .-__udivsi3
+
+#endif /* L_udivsi3 */
+
+
+#ifdef L_umodsi3
+
+ .text
+ .align 2
+ .globl __umodsi3
+ .type __umodsi3, @function
+__umodsi3:
+ movi $r5, 0 ! res = 0
+ movi $r2, 1 ! bit = 1
+ slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor
+ beqz $r3, .L5
+ bltz $r1, .L5
+
+.L4:
+ slli $r2, $r2, 1
+ beqz $r2, .L6
+ slli $r1, $r1, 1
+ slt $r3, $r1, $r0
+ beqz $r3, .L5
+ bgez $r1, .L4
+
+.L5:
+ slt $r3, $r0, $r1
+ bnez $r3, .L8
+ sub $r0, $r0, $r1
+ or $r5, $r5, $r2
+.L8:
+ srli $r1, $r1, 1
+ srli $r2, $r2, 1
+ bnez $r2, .L5
+.L6:
+ ret
+ .size __umodsi3, .-__umodsi3
+
+#endif /* L_umodsi3 */
+
+/* ----------------------------------------------------------- */
diff --git a/gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c b/gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c
new file mode 100644
index 000000000..aa60fb5d8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c
@@ -0,0 +1,38 @@
+/* mculib libgcc routines of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+extern int __clzsi2 (int val);
+int
+__clzdi2 (long long val)
+{
+ if (val >> 32)
+ {
+ return __clzsi2 (val >> 32);
+ }
+ else
+ {
+ return __clzsi2 (val) + 32;
+ }
+}
diff --git a/gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c b/gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c
new file mode 100644
index 000000000..8749b5017
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c
@@ -0,0 +1,49 @@
+/* mculib libgcc routines of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+int
+__clzsi2 (int val)
+{
+ int i = 32;
+ int j = 16;
+ int temp;
+
+ for (; j; j >>= 1)
+ {
+ if (temp = val >> j)
+ {
+ if (j == 1)
+ {
+ return (i - 2);
+ }
+ else
+ {
+ i -= j;
+ val = temp;
+ }
+ }
+ }
+ return (i - val);
+}
diff --git a/gcc-4.9/libgcc/config/nds32/sfp-machine.h b/gcc-4.9/libgcc/config/nds32/sfp-machine.h
new file mode 100644
index 000000000..aeda774f8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/sfp-machine.h
@@ -0,0 +1,94 @@
+/* Machine settings for software floating-point emulation
+ of Andes NDS32 cpu for GNU compiler
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Andes Technology Corporation.
+
+ This file is part of GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined __big_endian__
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/nds32/t-nds32 b/gcc-4.9/libgcc/config/nds32/t-nds32
new file mode 100644
index 000000000..3b3ad8407
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/t-nds32
@@ -0,0 +1,58 @@
+# Rules of libgcc and crtstuff of Andes NDS32 cpu for GNU compiler
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by Andes Technology Corporation.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+
+# Note:
+# Because GCC has its own make rules for crtbegin.o and crtend.o,
+# we cannot use crtbegin.o and crtend.o rules.
+# So we create crtbegin1.o and crtend1.o instead.
+# Make sure the linker script include these two objects
+# for building .ctors/.dtors sections.
+
+# Use -DCRT_BEGIN to create beginning parts of .init and .fini content
+# Make sure you are building crtbegin1.o with -O0 optimization,
+# otherwise the static function will be optimized out
+crtbegin1.o: $(srcdir)/config/nds32/initfini.c $(GCC_PASSES) $(CONFIG_H)
+ $(GCC_FOR_TARGET) $(INCLUDES) \
+ $(CFLAGS) \
+ -DCRT_BEGIN \
+ -finhibit-size-directive -fno-inline-functions \
+ -O0 -c $(srcdir)/config/nds32/initfini.c -o crtbegin1.o
+
+# Use -DCRT_END to create ending parts of .init and .fini content
+# Make sure you are building crtend1.o with -O0 optimization,
+# otherwise the static function will be optimized out
+crtend1.o: $(srcdir)/config/nds32/initfini.c $(GCC_PASSES) $(CONFIG_H)
+ $(GCC_FOR_TARGET) $(INCLUDES) \
+ $(CFLAGS) \
+ -DCRT_END \
+ -finhibit-size-directive -fno-inline-functions \
+ -O0 -c $(srcdir)/config/nds32/initfini.c -o crtend1.o
+
+# Use this rule if and only if your crt0.o does not come from library
+# Also, be sure to add 'crtzero.o' in extra_parts in libgcc/config.host
+# and change STARTFILE_SPEC in nds32.h
+#
+#crtzero.o: $(srcdir)/config/nds32/crtzero.S $(GCC_PASSES) $(CONFIG_H)
+# $(GCC_FOR_TARGET) $(INCLUDES) \
+# -c $(srcdir)/config/nds32/crtzero.S -o crtzero.o
+
+
+# ------------------------------------------------------------------------
diff --git a/gcc-4.9/libgcc/config/nds32/t-nds32-isr b/gcc-4.9/libgcc/config/nds32/t-nds32-isr
new file mode 100644
index 000000000..341d4f0db
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/t-nds32-isr
@@ -0,0 +1,212 @@
+# Rules of c-isr library stuff of Andes NDS32 cpu for GNU compiler
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by Andes Technology Corporation.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+
+###############################################################################
+# Makfile fragment rules for libnds32_isr.a to support ISR attribute extension
+###############################################################################
+
+# basic flags setting
+ISR_CFLAGS = $(CFLAGS) -c
+
+# the object files we would like to create
+LIBNDS32_ISR_16B_OBJS = \
+ vec_vid00.o vec_vid01.o vec_vid02.o vec_vid03.o \
+ vec_vid04.o vec_vid05.o vec_vid06.o vec_vid07.o \
+ vec_vid08.o vec_vid09.o vec_vid10.o vec_vid11.o \
+ vec_vid12.o vec_vid13.o vec_vid14.o vec_vid15.o \
+ vec_vid16.o vec_vid17.o vec_vid18.o vec_vid19.o \
+ vec_vid20.o vec_vid21.o vec_vid22.o vec_vid23.o \
+ vec_vid24.o vec_vid25.o vec_vid26.o vec_vid27.o \
+ vec_vid28.o vec_vid29.o vec_vid30.o vec_vid31.o \
+ vec_vid32.o vec_vid33.o vec_vid34.o vec_vid35.o \
+ vec_vid36.o vec_vid37.o vec_vid38.o vec_vid39.o \
+ vec_vid40.o vec_vid41.o vec_vid42.o vec_vid43.o \
+ vec_vid44.o vec_vid45.o vec_vid46.o vec_vid47.o \
+ vec_vid48.o vec_vid49.o vec_vid50.o vec_vid51.o \
+ vec_vid52.o vec_vid53.o vec_vid54.o vec_vid55.o \
+ vec_vid56.o vec_vid57.o vec_vid58.o vec_vid59.o \
+ vec_vid60.o vec_vid61.o vec_vid62.o vec_vid63.o \
+ vec_vid64.o vec_vid65.o vec_vid66.o vec_vid67.o \
+ vec_vid68.o vec_vid69.o vec_vid70.o vec_vid71.o \
+ vec_vid72.o \
+ excp_isr_ps_nn.o excp_isr_ps_ns.o excp_isr_ps_nr.o \
+ excp_isr_sa_nn.o excp_isr_sa_ns.o excp_isr_sa_nr.o \
+ intr_isr_ps_nn.o intr_isr_ps_ns.o intr_isr_ps_nr.o \
+ intr_isr_sa_nn.o intr_isr_sa_ns.o intr_isr_sa_nr.o \
+ reset.o
+
+LIBNDS32_ISR_4B_OBJS = \
+ vec_vid00_4b.o vec_vid01_4b.o vec_vid02_4b.o vec_vid03_4b.o \
+ vec_vid04_4b.o vec_vid05_4b.o vec_vid06_4b.o vec_vid07_4b.o \
+ vec_vid08_4b.o vec_vid09_4b.o vec_vid10_4b.o vec_vid11_4b.o \
+ vec_vid12_4b.o vec_vid13_4b.o vec_vid14_4b.o vec_vid15_4b.o \
+ vec_vid16_4b.o vec_vid17_4b.o vec_vid18_4b.o vec_vid19_4b.o \
+ vec_vid20_4b.o vec_vid21_4b.o vec_vid22_4b.o vec_vid23_4b.o \
+ vec_vid24_4b.o vec_vid25_4b.o vec_vid26_4b.o vec_vid27_4b.o \
+ vec_vid28_4b.o vec_vid29_4b.o vec_vid30_4b.o vec_vid31_4b.o \
+ vec_vid32_4b.o vec_vid33_4b.o vec_vid34_4b.o vec_vid35_4b.o \
+ vec_vid36_4b.o vec_vid37_4b.o vec_vid38_4b.o vec_vid39_4b.o \
+ vec_vid40_4b.o vec_vid41_4b.o vec_vid42_4b.o vec_vid43_4b.o \
+ vec_vid44_4b.o vec_vid45_4b.o vec_vid46_4b.o vec_vid47_4b.o \
+ vec_vid48_4b.o vec_vid49_4b.o vec_vid50_4b.o vec_vid51_4b.o \
+ vec_vid52_4b.o vec_vid53_4b.o vec_vid54_4b.o vec_vid55_4b.o \
+ vec_vid56_4b.o vec_vid57_4b.o vec_vid58_4b.o vec_vid59_4b.o \
+ vec_vid60_4b.o vec_vid61_4b.o vec_vid62_4b.o vec_vid63_4b.o \
+ vec_vid64_4b.o vec_vid65_4b.o vec_vid66_4b.o vec_vid67_4b.o \
+ vec_vid68_4b.o vec_vid69_4b.o vec_vid70_4b.o vec_vid71_4b.o \
+ vec_vid72_4b.o \
+ excp_isr_ps_nn_4b.o excp_isr_ps_ns_4b.o excp_isr_ps_nr_4b.o \
+ excp_isr_sa_nn_4b.o excp_isr_sa_ns_4b.o excp_isr_sa_nr_4b.o \
+ intr_isr_ps_nn_4b.o intr_isr_ps_ns_4b.o intr_isr_ps_nr_4b.o \
+ intr_isr_sa_nn_4b.o intr_isr_sa_ns_4b.o intr_isr_sa_nr_4b.o \
+ reset_4b.o
+
+LIBNDS32_ISR_COMMON_OBJS = \
+ jmptbl_vid00.o jmptbl_vid01.o jmptbl_vid02.o jmptbl_vid03.o \
+ jmptbl_vid04.o jmptbl_vid05.o jmptbl_vid06.o jmptbl_vid07.o \
+ jmptbl_vid08.o jmptbl_vid09.o jmptbl_vid10.o jmptbl_vid11.o \
+ jmptbl_vid12.o jmptbl_vid13.o jmptbl_vid14.o jmptbl_vid15.o \
+ jmptbl_vid16.o jmptbl_vid17.o jmptbl_vid18.o jmptbl_vid19.o \
+ jmptbl_vid20.o jmptbl_vid21.o jmptbl_vid22.o jmptbl_vid23.o \
+ jmptbl_vid24.o jmptbl_vid25.o jmptbl_vid26.o jmptbl_vid27.o \
+ jmptbl_vid28.o jmptbl_vid29.o jmptbl_vid30.o jmptbl_vid31.o \
+ jmptbl_vid32.o jmptbl_vid33.o jmptbl_vid34.o jmptbl_vid35.o \
+ jmptbl_vid36.o jmptbl_vid37.o jmptbl_vid38.o jmptbl_vid39.o \
+ jmptbl_vid40.o jmptbl_vid41.o jmptbl_vid42.o jmptbl_vid43.o \
+ jmptbl_vid44.o jmptbl_vid45.o jmptbl_vid46.o jmptbl_vid47.o \
+ jmptbl_vid48.o jmptbl_vid49.o jmptbl_vid50.o jmptbl_vid51.o \
+ jmptbl_vid52.o jmptbl_vid53.o jmptbl_vid54.o jmptbl_vid55.o \
+ jmptbl_vid56.o jmptbl_vid57.o jmptbl_vid58.o jmptbl_vid59.o \
+ jmptbl_vid60.o jmptbl_vid61.o jmptbl_vid62.o jmptbl_vid63.o \
+ jmptbl_vid64.o jmptbl_vid65.o jmptbl_vid66.o jmptbl_vid67.o \
+ jmptbl_vid68.o jmptbl_vid69.o jmptbl_vid70.o jmptbl_vid71.o \
+ jmptbl_vid72.o \
+ nmih.o \
+ wrh.o
+
+LIBNDS32_ISR_COMPLETE_OBJS = $(LIBNDS32_ISR_16B_OBJS) $(LIBNDS32_ISR_4B_OBJS) $(LIBNDS32_ISR_COMMON_OBJS)
+
+
+# Build common objects for ISR library
+nmih.o: $(srcdir)/config/nds32/isr-library/nmih.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/nmih.S -o nmih.o
+
+wrh.o: $(srcdir)/config/nds32/isr-library/wrh.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/wrh.S -o wrh.o
+
+jmptbl_vid%.o: $(srcdir)/config/nds32/isr-library/jmptbl_vid%.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $< -o $@
+
+
+
+# Build 16b version objects for ISR library. (no "_4b" postfix string)
+vec_vid%.o: $(srcdir)/config/nds32/isr-library/vec_vid%.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $< -o $@
+
+excp_isr_ps_nn.o: $(srcdir)/config/nds32/isr-library/excp_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/excp_isr.S -o excp_isr_ps_nn.o
+
+excp_isr_ps_ns.o: $(srcdir)/config/nds32/isr-library/excp_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/excp_isr.S -o excp_isr_ps_ns.o
+
+excp_isr_ps_nr.o: $(srcdir)/config/nds32/isr-library/excp_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/excp_isr.S -o excp_isr_ps_nr.o
+
+excp_isr_sa_nn.o: $(srcdir)/config/nds32/isr-library/excp_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS $(srcdir)/config/nds32/isr-library/excp_isr.S -o excp_isr_sa_nn.o
+
+excp_isr_sa_ns.o: $(srcdir)/config/nds32/isr-library/excp_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/excp_isr.S -o excp_isr_sa_ns.o
+
+excp_isr_sa_nr.o: $(srcdir)/config/nds32/isr-library/excp_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/excp_isr.S -o excp_isr_sa_nr.o
+
+intr_isr_ps_nn.o: $(srcdir)/config/nds32/isr-library/intr_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/intr_isr.S -o intr_isr_ps_nn.o
+
+intr_isr_ps_ns.o: $(srcdir)/config/nds32/isr-library/intr_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/intr_isr.S -o intr_isr_ps_ns.o
+
+intr_isr_ps_nr.o: $(srcdir)/config/nds32/isr-library/intr_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/intr_isr.S -o intr_isr_ps_nr.o
+
+intr_isr_sa_nn.o: $(srcdir)/config/nds32/isr-library/intr_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS $(srcdir)/config/nds32/isr-library/intr_isr.S -o intr_isr_sa_nn.o
+
+intr_isr_sa_ns.o: $(srcdir)/config/nds32/isr-library/intr_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/intr_isr.S -o intr_isr_sa_ns.o
+
+intr_isr_sa_nr.o: $(srcdir)/config/nds32/isr-library/intr_isr.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/intr_isr.S -o intr_isr_sa_nr.o
+
+reset.o: $(srcdir)/config/nds32/isr-library/reset.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/reset.S -o reset.o
+
+# Build 4b version objects for ISR library.
+vec_vid%_4b.o: $(srcdir)/config/nds32/isr-library/vec_vid%_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $< -o $@
+
+excp_isr_ps_nn_4b.o: $(srcdir)/config/nds32/isr-library/excp_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/excp_isr_4b.S -o excp_isr_ps_nn_4b.o
+
+excp_isr_ps_ns_4b.o: $(srcdir)/config/nds32/isr-library/excp_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/excp_isr_4b.S -o excp_isr_ps_ns_4b.o
+
+excp_isr_ps_nr_4b.o: $(srcdir)/config/nds32/isr-library/excp_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/excp_isr_4b.S -o excp_isr_ps_nr_4b.o
+
+excp_isr_sa_nn_4b.o: $(srcdir)/config/nds32/isr-library/excp_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS $(srcdir)/config/nds32/isr-library/excp_isr_4b.S -o excp_isr_sa_nn_4b.o
+
+excp_isr_sa_ns_4b.o: $(srcdir)/config/nds32/isr-library/excp_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/excp_isr_4b.S -o excp_isr_sa_ns_4b.o
+
+excp_isr_sa_nr_4b.o: $(srcdir)/config/nds32/isr-library/excp_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/excp_isr_4b.S -o excp_isr_sa_nr_4b.o
+
+intr_isr_ps_nn_4b.o: $(srcdir)/config/nds32/isr-library/intr_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/intr_isr_4b.S -o intr_isr_ps_nn_4b.o
+
+intr_isr_ps_ns_4b.o: $(srcdir)/config/nds32/isr-library/intr_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/intr_isr_4b.S -o intr_isr_ps_ns_4b.o
+
+intr_isr_ps_nr_4b.o: $(srcdir)/config/nds32/isr-library/intr_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/intr_isr_4b.S -o intr_isr_ps_nr_4b.o
+
+intr_isr_sa_nn_4b.o: $(srcdir)/config/nds32/isr-library/intr_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS $(srcdir)/config/nds32/isr-library/intr_isr_4b.S -o intr_isr_sa_nn_4b.o
+
+intr_isr_sa_ns_4b.o: $(srcdir)/config/nds32/isr-library/intr_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED $(srcdir)/config/nds32/isr-library/intr_isr_4b.S -o intr_isr_sa_ns_4b.o
+
+intr_isr_sa_nr_4b.o: $(srcdir)/config/nds32/isr-library/intr_isr_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) -DNDS32_SAVE_ALL_REGS -DNDS32_NESTED_READY $(srcdir)/config/nds32/isr-library/intr_isr_4b.S -o intr_isr_sa_nr_4b.o
+
+reset_4b.o: $(srcdir)/config/nds32/isr-library/reset_4b.S
+ $(GCC_FOR_TARGET) $(ISR_CFLAGS) $(srcdir)/config/nds32/isr-library/reset_4b.S -o reset_4b.o
+
+
+# The rule to create libnds32_isr.a file
+libnds32_isr.a: $(LIBNDS32_ISR_COMPLETE_OBJS)
+ $(AR) rc libnds32_isr.a $(LIBNDS32_ISR_COMPLETE_OBJS)
+
+
+# ------------------------------------------------------------------------
diff --git a/gcc-4.9/libgcc/config/nds32/t-nds32-mculib b/gcc-4.9/libgcc/config/nds32/t-nds32-mculib
new file mode 100644
index 000000000..18635c27a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/t-nds32-mculib
@@ -0,0 +1,77 @@
+# Rules of mculib library makefile of Andes NDS32 cpu for GNU compiler
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by Andes Technology Corporation.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Compiler flags to use when compiling 'libgcc2.c'
+HOST_LIBGCC2_CFLAGS = -Os
+
+
+LIB1ASMSRC = nds32/lib1asmsrc-mculib.S
+
+LIB1ASMFUNCS = \
+ _addsub_sf \
+ _sf_to_si \
+ _divsi3 \
+ _divdi3 \
+ _modsi3 \
+ _moddi3 \
+ _mulsi3 \
+ _udivsi3 \
+ _udivdi3 \
+ _udivmoddi4 \
+ _umodsi3 \
+ _umoddi3 \
+ _muldi3 \
+ _addsub_df \
+ _mul_sf \
+ _mul_df \
+ _div_sf \
+ _div_df \
+ _negate_sf \
+ _negate_df \
+ _sf_to_df \
+ _df_to_sf \
+ _df_to_si \
+ _fixsfdi \
+ _fixdfdi \
+ _fixunssfsi \
+ _fixunsdfsi \
+ _fixunssfdi \
+ _fixunsdfdi \
+ _si_to_sf \
+ _si_to_df \
+ _floatdisf \
+ _floatdidf \
+ _floatunsisf \
+ _floatunsidf \
+ _floatundisf \
+ _floatundidf \
+ _compare_sf \
+ _compare_df \
+ _unord_sf \
+ _unord_df
+
+# List of functions not to build from libgcc2.c.
+LIB2FUNCS_EXCLUDE = _clzsi2 _clzdi2
+
+# List of extra C and assembler files(*.S) to add to static libgcc2.
+LIB2ADD_ST += $(srcdir)/config/nds32/lib2csrc-mculib/_clzsi2.c
+LIB2ADD_ST += $(srcdir)/config/nds32/lib2csrc-mculib/_clzdi2.c
+
+# ------------------------------------------------------------------------
diff --git a/gcc-4.9/libgcc/config/nds32/t-nds32-newlib b/gcc-4.9/libgcc/config/nds32/t-nds32-newlib
new file mode 100644
index 000000000..ba6ae90dd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nds32/t-nds32-newlib
@@ -0,0 +1,34 @@
+# Rules of newlib library makefile of Andes NDS32 cpu for GNU compiler
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+# Contributed by Andes Technology Corporation.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Compiler flags to use when compiling 'libgcc2.c'
+HOST_LIBGCC2_CFLAGS = -O2
+
+
+#LIB1ASMSRC = nds32/lib1asmsrc-newlib.S
+#LIB1ASMFUNCS = _divsi3 _modsi3 _udivsi3 _umodsi3
+
+# List of functions not to build from libgcc2.c.
+#LIB2FUNCS_EXCLUDE = _clzsi2
+
+# List of extra C and assembler files(*.S) to add to static libgcc2.
+#LIB2ADD_ST += $(srcdir)/config/nds32/lib2csrc-newlib/_clzsi2.c
+
+# ------------------------------------------------------------------------
diff --git a/gcc-4.9/libgcc/config/nios2/crti.S b/gcc-4.9/libgcc/config/nios2/crti.S
new file mode 100644
index 000000000..f21346ce1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/crti.S
@@ -0,0 +1,85 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Jonah Graham (jgraham@altera.com).
+ Contributed by Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* This file just make a stack frame for the contents of the .fini and
+ .init sections. Users may put any desired instructions in those
+ sections.
+
+ While technically any code can be put in the init and fini sections
+ most stuff will not work other than stuff which obeys the call frame
+ and ABI. All the call-preserved registers are saved, the call clobbered
+ registers should have been saved by the code calling init and fini.
+
+ See crtstuff.c for an example of code that inserts itself in the init
+ and fini sections.
+
+ See crt0.s for the code that calls init and fini. */
+
+ .section ".init"
+ .align 2
+ .global _init
+_init:
+ addi sp, sp, -48
+ stw ra, 44(sp)
+ stw r23, 40(sp)
+ stw r22, 36(sp)
+ stw r21, 32(sp)
+ stw r20, 28(sp)
+ stw r19, 24(sp)
+ stw r18, 20(sp)
+ stw r17, 16(sp)
+ stw r16, 12(sp)
+ stw fp, 8(sp)
+ addi fp, sp, 8
+#ifdef linux
+ nextpc r22
+1: movhi r2, %hiadj(_gp_got - 1b)
+ addi r2, r2, %lo(_gp_got - 1b)
+ add r22, r22, r2
+#endif
+
+
+ .section ".fini"
+ .align 2
+ .global _fini
+_fini:
+ addi sp, sp, -48
+ stw ra, 44(sp)
+ stw r23, 40(sp)
+ stw r22, 36(sp)
+ stw r21, 32(sp)
+ stw r20, 28(sp)
+ stw r19, 24(sp)
+ stw r18, 20(sp)
+ stw r17, 16(sp)
+ stw r16, 12(sp)
+ stw fp, 8(sp)
+ addi fp, sp, 8
+#ifdef linux
+ nextpc r22
+1: movhi r2, %hiadj(_gp_got - 1b)
+ addi r2, r2, %lo(_gp_got - 1b)
+ add r22, r22, r2
+#endif
+
diff --git a/gcc-4.9/libgcc/config/nios2/crtn.S b/gcc-4.9/libgcc/config/nios2/crtn.S
new file mode 100644
index 000000000..54c9cb638
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/crtn.S
@@ -0,0 +1,56 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Jonah Graham (jgraham@altera.com).
+ Contributed by Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* This file just makes sure that the .fini and .init sections do in
+ fact return. Users may put any desired instructions in those sections.
+ This file is the last thing linked into any executable. */
+
+ .section ".init"
+ ldw ra, 44(sp)
+ ldw r23, 40(sp)
+ ldw r22, 36(sp)
+ ldw r21, 32(sp)
+ ldw r20, 28(sp)
+ ldw r19, 24(sp)
+ ldw r18, 20(sp)
+ ldw r17, 16(sp)
+ ldw r16, 12(sp)
+ ldw fp, 8(sp)
+ addi sp, sp, 48
+ ret
+
+ .section ".fini"
+ ldw ra, 44(sp)
+ ldw r23, 40(sp)
+ ldw r22, 36(sp)
+ ldw r21, 32(sp)
+ ldw r20, 28(sp)
+ ldw r19, 24(sp)
+ ldw r18, 20(sp)
+ ldw r17, 16(sp)
+ ldw r16, 12(sp)
+ ldw fp, 8(sp)
+ addi sp, sp, 48
+ ret
+
diff --git a/gcc-4.9/libgcc/config/nios2/lib2-divmod-hi.c b/gcc-4.9/libgcc/config/nios2/lib2-divmod-hi.c
new file mode 100644
index 000000000..be7452cb7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/lib2-divmod-hi.c
@@ -0,0 +1,117 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Altera and Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "lib2-nios2.h"
+
+/* 16-bit HI divide and modulo as used in Nios II. */
+
+static UHItype
+udivmodhi4 (UHItype num, UHItype den, word_type modwanted)
+{
+ UHItype bit = 1;
+ UHItype res = 0;
+
+ while (den < num && bit && !(den & (1L<<15)))
+ {
+ den <<=1;
+ bit <<=1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>=1;
+ den >>=1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
+
+
+HItype
+__divhi3 (HItype a, HItype b)
+{
+ word_type neg = 0;
+ HItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = udivmodhi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+
+HItype
+__modhi3 (HItype a, HItype b)
+{
+ word_type neg = 0;
+ HItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = udivmodhi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+
+UHItype
+__udivhi3 (UHItype a, UHItype b)
+{
+ return udivmodhi4 (a, b, 0);
+}
+
+
+UHItype
+__umodhi3 (UHItype a, UHItype b)
+{
+ return udivmodhi4 (a, b, 1);
+}
+
diff --git a/gcc-4.9/libgcc/config/nios2/lib2-divmod.c b/gcc-4.9/libgcc/config/nios2/lib2-divmod.c
new file mode 100644
index 000000000..cb72ee0c0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/lib2-divmod.c
@@ -0,0 +1,117 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Altera and Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "lib2-nios2.h"
+
+/* 32-bit SI divide and modulo as used in Nios II. */
+
+static USItype
+udivmodsi4 (USItype num, USItype den, word_type modwanted)
+{
+ USItype bit = 1;
+ USItype res = 0;
+
+ while (den < num && bit && !(den & (1L<<31)))
+ {
+ den <<=1;
+ bit <<=1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>=1;
+ den >>=1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
+
+
+SItype
+__divsi3 (SItype a, SItype b)
+{
+ word_type neg = 0;
+ SItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = udivmodsi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+
+SItype
+__modsi3 (SItype a, SItype b)
+{
+ word_type neg = 0;
+ SItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = udivmodsi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+
+SItype
+__udivsi3 (SItype a, SItype b)
+{
+ return udivmodsi4 (a, b, 0);
+}
+
+
+SItype
+__umodsi3 (SItype a, SItype b)
+{
+ return udivmodsi4 (a, b, 1);
+}
+
diff --git a/gcc-4.9/libgcc/config/nios2/lib2-divtable.c b/gcc-4.9/libgcc/config/nios2/lib2-divtable.c
new file mode 100644
index 000000000..a2d813363
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/lib2-divtable.c
@@ -0,0 +1,60 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Altera and Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "lib2-nios2.h"
+
+UQItype __divsi3_table[] =
+{
+ 0, 0/1, 0/2, 0/3, 0/4, 0/5, 0/6, 0/7,
+ 0/8, 0/9, 0/10, 0/11, 0/12, 0/13, 0/14, 0/15,
+ 0, 1/1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7,
+ 1/8, 1/9, 1/10, 1/11, 1/12, 1/13, 1/14, 1/15,
+ 0, 2/1, 2/2, 2/3, 2/4, 2/5, 2/6, 2/7,
+ 2/8, 2/9, 2/10, 2/11, 2/12, 2/13, 2/14, 2/15,
+ 0, 3/1, 3/2, 3/3, 3/4, 3/5, 3/6, 3/7,
+ 3/8, 3/9, 3/10, 3/11, 3/12, 3/13, 3/14, 3/15,
+ 0, 4/1, 4/2, 4/3, 4/4, 4/5, 4/6, 4/7,
+ 4/8, 4/9, 4/10, 4/11, 4/12, 4/13, 4/14, 4/15,
+ 0, 5/1, 5/2, 5/3, 5/4, 5/5, 5/6, 5/7,
+ 5/8, 5/9, 5/10, 5/11, 5/12, 5/13, 5/14, 5/15,
+ 0, 6/1, 6/2, 6/3, 6/4, 6/5, 6/6, 6/7,
+ 6/8, 6/9, 6/10, 6/11, 6/12, 6/13, 6/14, 6/15,
+ 0, 7/1, 7/2, 7/3, 7/4, 7/5, 7/6, 7/7,
+ 7/8, 7/9, 7/10, 7/11, 7/12, 7/13, 7/14, 7/15,
+ 0, 8/1, 8/2, 8/3, 8/4, 8/5, 8/6, 8/7,
+ 8/8, 8/9, 8/10, 8/11, 8/12, 8/13, 8/14, 8/15,
+ 0, 9/1, 9/2, 9/3, 9/4, 9/5, 9/6, 9/7,
+ 9/8, 9/9, 9/10, 9/11, 9/12, 9/13, 9/14, 9/15,
+ 0, 10/1, 10/2, 10/3, 10/4, 10/5, 10/6, 10/7,
+ 10/8, 10/9, 10/10, 10/11, 10/12, 10/13, 10/14, 10/15,
+ 0, 11/1, 11/2, 11/3, 11/4, 11/5, 11/6, 11/7,
+ 11/8, 11/9, 11/10, 11/11, 11/12, 11/13, 11/14, 11/15,
+ 0, 12/1, 12/2, 12/3, 12/4, 12/5, 12/6, 12/7,
+ 12/8, 12/9, 12/10, 12/11, 12/12, 12/13, 12/14, 12/15,
+ 0, 13/1, 13/2, 13/3, 13/4, 13/5, 13/6, 13/7,
+ 13/8, 13/9, 13/10, 13/11, 13/12, 13/13, 13/14, 13/15,
+ 0, 14/1, 14/2, 14/3, 14/4, 14/5, 14/6, 14/7,
+ 14/8, 14/9, 14/10, 14/11, 14/12, 14/13, 14/14, 14/15,
+ 0, 15/1, 15/2, 15/3, 15/4, 15/5, 15/6, 15/7,
+ 15/8, 15/9, 15/10, 15/11, 15/12, 15/13, 15/14, 15/15,
+};
+
diff --git a/gcc-4.9/libgcc/config/nios2/lib2-mul.c b/gcc-4.9/libgcc/config/nios2/lib2-mul.c
new file mode 100644
index 000000000..2852727fa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/lib2-mul.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Altera and Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "lib2-nios2.h"
+
+/* 32-bit SI multiply for Nios II. */
+
+SItype
+__mulsi3 (SItype a, SItype b)
+{
+ SItype res = 0;
+ USItype cnt = a;
+
+ while (cnt)
+ {
+ if (cnt & 1)
+ res += b;
+ b <<= 1;
+ cnt >>= 1;
+ }
+
+ return res;
+}
diff --git a/gcc-4.9/libgcc/config/nios2/lib2-nios2.h b/gcc-4.9/libgcc/config/nios2/lib2-nios2.h
new file mode 100644
index 000000000..c582c2f95
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/lib2-nios2.h
@@ -0,0 +1,49 @@
+/* Integer arithmetic support for Altera Nios II.
+
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Altera and Mentor Graphics, Inc.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef LIB2_NIOS2_H
+#define LIB2_NIOS2_H
+
+/* Types. */
+
+typedef char QItype __attribute__ ((mode (QI)));
+typedef unsigned char UQItype __attribute__ ((mode (QI)));
+typedef short HItype __attribute__ ((mode (HI)));
+typedef unsigned short UHItype __attribute__ ((mode (HI)));
+typedef int SItype __attribute__ ((mode (SI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+/* Exported functions. */
+extern SItype __divsi3 (SItype, SItype);
+extern SItype __modsi3 (SItype, SItype);
+extern SItype __udivsi3 (SItype, SItype);
+extern SItype __umodsi3 (SItype, SItype);
+extern HItype __divhi3 (HItype, HItype);
+extern HItype __modhi3 (HItype, HItype);
+extern UHItype __udivhi3 (UHItype, UHItype);
+extern UHItype __umodhi3 (UHItype, UHItype);
+extern SItype __mulsi3 (SItype, SItype);
+
+#endif /* LIB2_NIOS2_H */
diff --git a/gcc-4.9/libgcc/config/nios2/linux-atomic.c b/gcc-4.9/libgcc/config/nios2/linux-atomic.c
new file mode 100644
index 000000000..7070176e4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/linux-atomic.c
@@ -0,0 +1,286 @@
+/* Linux-specific atomic operations for Nios II Linux.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <asm/unistd.h>
+#define EFAULT 14
+#define EBUSY 16
+#define ENOSYS 38
+
+/* We implement byte, short and int versions of each atomic operation
+ using the kernel helper defined below. There is no support for
+ 64-bit operations yet. */
+
+/* Crash a userspace program with SIGSEV. */
+#define ABORT_INSTRUCTION asm ("stw zero, 0(zero)")
+
+/* Kernel helper for compare-and-exchange a 32-bit value. */
+static inline long
+__kernel_cmpxchg (int oldval, int newval, int *mem)
+{
+ register int r2 asm ("r2");
+ register int *r4 asm ("r4") = mem;
+ register int r5 asm ("r5") = oldval;
+ register int r6 asm ("r6") = newval;
+
+ /* Call the kernel provided fixed address cmpxchg helper routine. */
+ asm volatile ("movi %0, %4\n\t"
+ "callr %0\n"
+ : "=r" (r2)
+ : "r" (r4), "r" (r5), "r" (r6), "I" (0x00001004)
+ : "ra", "memory");
+ return r2;
+}
+
+#define HIDDEN __attribute__ ((visibility ("hidden")))
+
+#ifdef __nios2_little_endian__
+#define INVERT_MASK_1 0
+#define INVERT_MASK_2 0
+#else
+#define INVERT_MASK_1 24
+#define INVERT_MASK_2 16
+#endif
+
+#define MASK_1 0xffu
+#define MASK_2 0xffffu
+
+#define FETCH_AND_OP_WORD(OP, PFX_OP, INF_OP) \
+ int HIDDEN \
+ __sync_fetch_and_##OP##_4 (int *ptr, int val) \
+ { \
+ int failure, tmp; \
+ \
+ do { \
+ tmp = *ptr; \
+ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \
+ } while (failure != 0); \
+ \
+ return tmp; \
+ }
+
+FETCH_AND_OP_WORD (add, , +)
+FETCH_AND_OP_WORD (sub, , -)
+FETCH_AND_OP_WORD (or, , |)
+FETCH_AND_OP_WORD (and, , &)
+FETCH_AND_OP_WORD (xor, , ^)
+FETCH_AND_OP_WORD (nand, ~, &)
+
+#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
+#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
+
+/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for
+ subword-sized quantities. */
+
+#define SUBWORD_SYNC_OP(OP, PFX_OP, INF_OP, TYPE, WIDTH, RETURN) \
+ TYPE HIDDEN \
+ NAME##_##RETURN (OP, WIDTH) (TYPE *ptr, TYPE val) \
+ { \
+ int *wordptr = (int *) ((unsigned long) ptr & ~3); \
+ unsigned int mask, shift, oldval, newval; \
+ int failure; \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ do { \
+ oldval = *wordptr; \
+ newval = ((PFX_OP (((oldval & mask) >> shift) \
+ INF_OP (unsigned int) val)) << shift) & mask; \
+ newval |= oldval & ~mask; \
+ failure = __kernel_cmpxchg (oldval, newval, wordptr); \
+ } while (failure != 0); \
+ \
+ return (RETURN & mask) >> shift; \
+ }
+
+SUBWORD_SYNC_OP (add, , +, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (or, , |, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (and, , &, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (or, , |, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (and, , &, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval)
+
+#define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \
+ int HIDDEN \
+ __sync_##OP##_and_fetch_4 (int *ptr, int val) \
+ { \
+ int tmp, failure; \
+ \
+ do { \
+ tmp = *ptr; \
+ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \
+ } while (failure != 0); \
+ \
+ return PFX_OP (tmp INF_OP val); \
+ }
+
+OP_AND_FETCH_WORD (add, , +)
+OP_AND_FETCH_WORD (sub, , -)
+OP_AND_FETCH_WORD (or, , |)
+OP_AND_FETCH_WORD (and, , &)
+OP_AND_FETCH_WORD (xor, , ^)
+OP_AND_FETCH_WORD (nand, ~, &)
+
+SUBWORD_SYNC_OP (add, , +, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (or, , |, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (and, , &, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (or, , |, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (and, , &, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval)
+
+int HIDDEN
+__sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
+{
+ int actual_oldval, fail;
+
+ while (1)
+ {
+ actual_oldval = *ptr;
+
+ if (oldval != actual_oldval)
+ return actual_oldval;
+
+ fail = __kernel_cmpxchg (actual_oldval, newval, ptr);
+
+ if (!fail)
+ return oldval;
+ }
+}
+
+#define SUBWORD_VAL_CAS(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ int *wordptr = (int *)((unsigned long) ptr & ~3), fail; \
+ unsigned int mask, shift, actual_oldval, actual_newval; \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ while (1) \
+ { \
+ actual_oldval = *wordptr; \
+ \
+ if (((actual_oldval & mask) >> shift) != (unsigned int) oldval) \
+ return (actual_oldval & mask) >> shift; \
+ \
+ actual_newval = (actual_oldval & ~mask) \
+ | (((unsigned int) newval << shift) & mask); \
+ \
+ fail = __kernel_cmpxchg (actual_oldval, actual_newval, \
+ wordptr); \
+ \
+ if (!fail) \
+ return oldval; \
+ } \
+ }
+
+SUBWORD_VAL_CAS (unsigned short, 2)
+SUBWORD_VAL_CAS (unsigned char, 1)
+
+typedef unsigned char bool;
+
+bool HIDDEN
+__sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
+{
+ int failure = __kernel_cmpxchg (oldval, newval, ptr);
+ return (failure == 0);
+}
+
+#define SUBWORD_BOOL_CAS(TYPE, WIDTH) \
+ bool HIDDEN \
+ __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ TYPE actual_oldval \
+ = __sync_val_compare_and_swap_##WIDTH (ptr, oldval, newval); \
+ return (oldval == actual_oldval); \
+ }
+
+SUBWORD_BOOL_CAS (unsigned short, 2)
+SUBWORD_BOOL_CAS (unsigned char, 1)
+
+int HIDDEN
+__sync_lock_test_and_set_4 (int *ptr, int val)
+{
+ int failure, oldval;
+
+ do {
+ oldval = *ptr;
+ failure = __kernel_cmpxchg (oldval, val, ptr);
+ } while (failure != 0);
+
+ return oldval;
+}
+
+#define SUBWORD_TEST_AND_SET(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_lock_test_and_set_##WIDTH (TYPE *ptr, TYPE val) \
+ { \
+ int failure; \
+ unsigned int oldval, newval, shift, mask; \
+ int *wordptr = (int *) ((unsigned long) ptr & ~3); \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ do { \
+ oldval = *wordptr; \
+ newval = (oldval & ~mask) \
+ | (((unsigned int) val << shift) & mask); \
+ failure = __kernel_cmpxchg (oldval, newval, wordptr); \
+ } while (failure != 0); \
+ \
+ return (oldval & mask) >> shift; \
+ }
+
+SUBWORD_TEST_AND_SET (unsigned short, 2)
+SUBWORD_TEST_AND_SET (unsigned char, 1)
+
+#define SYNC_LOCK_RELEASE(TYPE, WIDTH) \
+ void HIDDEN \
+ __sync_lock_release_##WIDTH (TYPE *ptr) \
+ { \
+ /* All writes before this point must be seen before we release \
+ the lock itself. */ \
+ __builtin_sync (); \
+ *ptr = 0; \
+ }
+
+SYNC_LOCK_RELEASE (int, 4)
+SYNC_LOCK_RELEASE (short, 2)
+SYNC_LOCK_RELEASE (char, 1)
diff --git a/gcc-4.9/libgcc/config/nios2/linux-unwind.h b/gcc-4.9/libgcc/config/nios2/linux-unwind.h
new file mode 100644
index 000000000..92ff1f629
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/linux-unwind.h
@@ -0,0 +1,106 @@
+/* DWARF2 EH unwinding support for Nios II Linux.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef inhibit_libc
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs.
+ The corresponding bits in the Linux kernel are in
+ arch/nios2/kernel/signal.c. */
+
+#include <signal.h>
+#include <asm/unistd.h>
+
+/* Exactly the same layout as the kernel structures, unique names. */
+struct nios2_mcontext {
+ int version;
+ int gregs[32];
+};
+
+struct nios2_ucontext {
+ unsigned long uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ struct nios2_mcontext uc_mcontext;
+ sigset_t uc_sigmask; /* mask last for extensibility */
+};
+
+#define MD_FALLBACK_FRAME_STATE_FOR nios2_fallback_frame_state
+
+static _Unwind_Reason_Code
+nios2_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ u_int32_t *pc = (u_int32_t *) context->ra;
+ _Unwind_Ptr new_cfa;
+
+ /* The expected sequence of instructions is:
+ movi r2,(rt_sigreturn)
+ trap
+ Check for the trap first. */
+ if (pc[1] != 0x003b683a)
+ return _URC_END_OF_STACK;
+
+#define NIOS2_REG(NUM,NAME) \
+ (fs->regs.reg[NUM].how = REG_SAVED_OFFSET, \
+ fs->regs.reg[NUM].loc.offset = (_Unwind_Ptr)&(regs->NAME) - new_cfa)
+
+ if (pc[0] == (0x00800004 | (__NR_rt_sigreturn << 6)))
+ {
+ struct rt_sigframe {
+ char retcode[12];
+ siginfo_t info;
+ struct nios2_ucontext uc;
+ } *rt_ = context->ra;
+ struct nios2_mcontext *regs = &rt_->uc.uc_mcontext;
+ int i;
+
+ /* MCONTEXT_VERSION is defined to 2 in the kernel. */
+ if (regs->version != 2)
+ return _URC_END_OF_STACK;
+
+ /* The CFA is the user's incoming stack pointer value. */
+ new_cfa = (_Unwind_Ptr)regs->gregs[28];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
+
+ /* The sequential registers. */
+ for (i = 1; i < 24; i++)
+ NIOS2_REG (i, gregs[i-1]);
+
+ /* The random registers. The kernel stores these in a funny order
+ in the gregs array. */
+ NIOS2_REG (RA_REGNO, gregs[23]);
+ NIOS2_REG (FP_REGNO, gregs[24]);
+ NIOS2_REG (GP_REGNO, gregs[25]);
+ NIOS2_REG (EA_REGNO, gregs[27]);
+
+ fs->retaddr_column = EA_REGNO;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+ }
+#undef NIOS2_REG
+ return _URC_END_OF_STACK;
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/nios2/sfp-machine.h b/gcc-4.9/libgcc/config/nios2/sfp-machine.h
new file mode 100644
index 000000000..9e7c60b3c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/sfp-machine.h
@@ -0,0 +1,81 @@
+/* Soft-FP definitions for Altera Nios II.
+ Copyright (C) 2013-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#ifdef __nios2_little_endian__
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#else
+#define __BYTE_ORDER __BIG_ENDIAN
+#endif
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/nios2/t-linux b/gcc-4.9/libgcc/config/nios2/t-linux
new file mode 100644
index 000000000..1fa581e28
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/t-linux
@@ -0,0 +1,7 @@
+# Soft-float functions go in glibc only, to facilitate the possible
+# future addition of exception and rounding mode support integrated
+# with <fenv.h>.
+
+LIB2FUNCS_EXCLUDE = _floatdidf _floatdisf _fixunsdfsi _fixunssfsi \
+ _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _floatundidf _floatundisf
+LIB2ADD += $(srcdir)/config/nios2/linux-atomic.c
diff --git a/gcc-4.9/libgcc/config/nios2/t-nios2 b/gcc-4.9/libgcc/config/nios2/t-nios2
new file mode 100644
index 000000000..7a81a7f02
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/t-nios2
@@ -0,0 +1,8 @@
+LIB2ADD += $(srcdir)/config/nios2/lib2-divmod.c \
+ $(srcdir)/config/nios2/lib2-divmod-hi.c \
+ $(srcdir)/config/nios2/lib2-divtable.c \
+ $(srcdir)/config/nios2/lib2-mul.c \
+ $(srcdir)/config/nios2/tramp.c
+
+# Disable use of GP-relative addressing in startup code.
+CRTSTUFF_T_CFLAGS += -mno-gpopt
diff --git a/gcc-4.9/libgcc/config/nios2/tramp.c b/gcc-4.9/libgcc/config/nios2/tramp.c
new file mode 100644
index 000000000..78661e237
--- /dev/null
+++ b/gcc-4.9/libgcc/config/nios2/tramp.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 2013-2014 Free Software Foundation, Inc.
+ Contributed by Altera and Mentor Graphics, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Set up trampolines.
+ R12 is the static chain register.
+ R2 is AT, the assembler temporary.
+ The trampoline code looks like:
+ movhi r12,%hi(chain)
+ ori r12,%lo(chain)
+ movhi r2,%hi(fn)
+ ori r2,%lo(fn)
+ jmp r2
+*/
+
+#define SC_REGNO 12
+
+#define MOVHI(reg,imm16) \
+ (((reg) << 22) | ((imm16) << 6) | 0x34)
+#define ORI(reg,imm16) \
+ (((reg) << 27) | ((reg) << 22) | ((imm16) << 6) | 0x14)
+#define JMP(reg) \
+ (((reg) << 27) | (0x0d << 11) | 0x3a)
+
+void
+__trampoline_setup (unsigned int *addr, void *fnptr, void *chainptr)
+{
+ unsigned int fn = (unsigned int) fnptr;
+ unsigned int chain = (unsigned int) chainptr;
+ int i;
+
+ addr[0] = MOVHI (SC_REGNO, ((chain >> 16) & 0xffff));
+ addr[1] = ORI (SC_REGNO, (chain & 0xffff));
+ addr[2] = MOVHI (2, ((fn >> 16) & 0xffff));
+ addr[3] = ORI (2, (fn & 0xffff));
+ addr[4] = JMP (2);
+
+ /* Flush the caches.
+ See Example 9-4 in the Nios II Software Developer's Handbook. */
+ for (i = 0; i < 5; i++)
+ asm volatile ("flushd 0(%0); flushi %0" :: "r"(addr + i) : "memory");
+ asm volatile ("flushp" ::: "memory");
+}
diff --git a/gcc-4.9/libgcc/config/no-sfp-machine.h b/gcc-4.9/libgcc/config/no-sfp-machine.h
new file mode 100644
index 000000000..8f7341d4f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/no-sfp-machine.h
@@ -0,0 +1 @@
+/* Dummy sfp-machine.h header for targets that don't need one. */
diff --git a/gcc-4.9/libgcc/config/no-unwind.h b/gcc-4.9/libgcc/config/no-unwind.h
new file mode 100644
index 000000000..0ecd78a60
--- /dev/null
+++ b/gcc-4.9/libgcc/config/no-unwind.h
@@ -0,0 +1,2 @@
+/* Dummy header for targets without a definition of
+ MD_FALLBACK_FRAME_STATE_FOR. */
diff --git a/gcc-4.9/libgcc/config/pa/fptr.c b/gcc-4.9/libgcc/config/pa/fptr.c
new file mode 100644
index 000000000..347f636dd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/fptr.c
@@ -0,0 +1,131 @@
+/* Subroutine for function pointer canonicalization on PA-RISC with ELF32.
+ Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Contributed by John David Anglin (dave.anglin@nrc.ca).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* WARNING: The code is this function depends on internal and undocumented
+ details of the GNU linker and dynamic loader as implemented for parisc
+ linux. */
+
+/* This MUST match the defines sysdeps/hppa/dl-machine.h and
+ bfd/elf32-hppa.c. */
+#define GOT_FROM_PLT_STUB (4*4)
+
+/* List of byte offsets in _dl_runtime_resolve to search for "bl" branches.
+ The first "bl" branch instruction found MUST be a call to fixup. See
+ the define for TRAMPOLINE_TEMPLATE in sysdeps/hppa/dl-machine.h. If
+ the trampoline template is changed, the list must be appropriately
+ updated. The offset of -4 allows for a magic branch at the start of
+ the template should it be necessary to change the current branch
+ position. */
+#define NOFFSETS 2
+static int fixup_branch_offset[NOFFSETS] = { 32, -4 };
+
+#define GET_FIELD(X, FROM, TO) \
+ ((X) >> (31 - (TO)) & ((1 << ((TO) - (FROM) + 1)) - 1))
+#define SIGN_EXTEND(VAL,BITS) \
+ ((int) ((VAL) >> ((BITS) - 1) ? (-1 << (BITS)) | (VAL) : (VAL)))
+
+struct link_map;
+typedef int (*fptr_t) (void);
+typedef int (*fixup_t) (struct link_map *, unsigned int);
+extern unsigned int _GLOBAL_OFFSET_TABLE_;
+
+/* __canonicalize_funcptr_for_compare must be hidden so that it is not
+ placed in the dynamic symbol table. Like millicode functions, it
+ must be linked into all binaries in order access the got table of
+ that binary. However, we don't use the millicode calling convention
+ and the routine must be a normal function so that it can be compiled
+ as pic code. */
+unsigned int __canonicalize_funcptr_for_compare (fptr_t)
+ __attribute__ ((visibility ("hidden")));
+
+unsigned int
+__canonicalize_funcptr_for_compare (fptr_t fptr)
+{
+ static unsigned int fixup_plabel[2];
+ static fixup_t fixup;
+ unsigned int *plabel, *got;
+
+ /* -1 and page 0 are special. -1 is used in crtend to mark the end of
+ a list of function pointers. Also return immediately if the plabel
+ bit is not set in the function pointer. In this case, the function
+ pointer points directly to the function. */
+ if ((int) fptr == -1 || (unsigned int) fptr < 4096 || !((int) fptr & 2))
+ return (unsigned int) fptr;
+
+ /* The function pointer points to a function descriptor (plabel). If
+ the plabel hasn't been resolved, the first word of the plabel points
+ to the entry of the PLT stub just before the global offset table.
+ The second word in the plabel contains the relocation offset for the
+ function. */
+ plabel = (unsigned int *) ((unsigned int) fptr & ~3);
+ got = (unsigned int *) (plabel[0] + GOT_FROM_PLT_STUB);
+
+ /* Return the address of the function if the plabel has been resolved. */
+ if (got != &_GLOBAL_OFFSET_TABLE_)
+ return plabel[0];
+
+ /* Initialize our plabel for calling fixup if we haven't done so already.
+ This code needs to be thread safe but we don't have to be too careful
+ as the result is invariant. */
+ if (!fixup)
+ {
+ int i;
+ unsigned int *iptr;
+
+ /* Find the first "bl" branch in the offset search list. This is a
+ call to fixup or a magic branch to fixup at the beginning of the
+ trampoline template. The fixup function does the actual runtime
+ resolution of function descriptors. We only look for "bl" branches
+ with a 17-bit pc-relative displacement. */
+ for (i = 0; i < NOFFSETS; i++)
+ {
+ iptr = (unsigned int *) (got[-2] + fixup_branch_offset[i]);
+ if ((*iptr & 0xfc00e000) == 0xe8000000)
+ break;
+ }
+
+ /* This should not happen... */
+ if (i == NOFFSETS)
+ return ~0;
+
+ /* Extract the 17-bit displacement from the instruction. */
+ iptr += SIGN_EXTEND (GET_FIELD (*iptr, 19, 28) |
+ GET_FIELD (*iptr, 29, 29) << 10 |
+ GET_FIELD (*iptr, 11, 15) << 11 |
+ GET_FIELD (*iptr, 31, 31) << 16, 17);
+
+ /* Build a plabel for an indirect call to fixup. */
+ fixup_plabel[0] = (unsigned int) iptr + 8; /* address of fixup */
+ fixup_plabel[1] = got[-1]; /* ltp for fixup */
+ fixup = (fixup_t) ((int) fixup_plabel | 3);
+ }
+
+ /* Call fixup to resolve the function address. got[1] contains the
+ link_map pointer and plabel[1] the relocation offset. */
+ fixup ((struct link_map *) got[1], plabel[1]);
+
+ return plabel[0];
+}
diff --git a/gcc-4.9/libgcc/config/pa/gthr-dce.h b/gcc-4.9/libgcc/config/pa/gthr-dce.h
new file mode 100644
index 000000000..45c9a3e13
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/gthr-dce.h
@@ -0,0 +1,568 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */
+/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_DCE_H
+#define GCC_GTHR_DCE_H
+
+/* If _DCE_THREADS is not defined, then we're building the single
+ threaded version of the libraries and do not want to reference
+ anything related to pthreads or dce. */
+#ifndef _DCE_THREADS
+#include "gthr-single.h"
+#else
+/* DCE threads interface.
+ DCE threads are based on POSIX threads draft 4, and many things
+ have changed since then. */
+
+/* Make sure CONST_CAST2 (original in system.h) is defined. */
+#ifndef CONST_CAST2
+#ifdef __cplusplus
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
+#else
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
+#endif
+#endif
+
+#define __GTHREADS 1
+
+#include <pthread.h>
+
+typedef pthread_key_t __gthread_key_t;
+typedef pthread_once_t __gthread_once_t;
+typedef pthread_mutex_t __gthread_mutex_t;
+typedef pthread_mutex_t __gthread_recursive_mutex_t;
+
+#define __GTHREAD_ONCE_INIT pthread_once_init
+
+#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+
+#define __GTHREAD_MUTEX_INIT_DEFAULT pthread_once_init
+
+#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+# define __gthrw(name) \
+ static __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name)));
+# define __gthrw_(name) __gthrw_ ## name
+#else
+# define __gthrw(name)
+# define __gthrw_(name) name
+#endif
+
+__gthrw(pthread_once)
+__gthrw(pthread_keycreate)
+__gthrw(pthread_getspecific)
+__gthrw(pthread_setspecific)
+__gthrw(pthread_create)
+__gthrw(pthread_mutex_init)
+__gthrw(pthread_mutex_destroy)
+__gthrw(pthread_mutex_lock)
+__gthrw(pthread_mutex_trylock)
+__gthrw(pthread_mutex_unlock)
+__gthrw(pthread_mutexattr_create)
+__gthrw(pthread_mutexattr_setkind_np)
+__gthrw(pthread_mutexattr_delete)
+
+#ifdef _LIBOBJC
+/* Objective-C. */
+__gthrw(pthread_cond_broadcast)
+__gthrw(pthread_cond_destroy)
+__gthrw(pthread_cond_init)
+__gthrw(pthread_cond_signal)
+__gthrw(pthread_cond_wait)
+__gthrw(pthread_exit)
+
+#ifdef pthread_getunique_np
+# define __gthrw_pthread_getunique_np pthread_getunique_np
+#else
+__gthrw(pthread_getunique_np)
+# define __gthrw_pthread_getunique_np __gthrw_(pthread_getunique_np)
+#endif
+
+__gthrw(pthread_mutex_destroy)
+__gthrw(pthread_self)
+__gthrw(pthread_yield)
+#endif
+
+#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+
+static inline int
+__gthread_active_p (void)
+{
+ static void *const __gthread_active_ptr = (void *) &__gthrw_(pthread_create);
+ return __gthread_active_ptr != 0;
+}
+
+#else /* not SUPPORTS_WEAK */
+
+static inline int
+__gthread_active_p (void)
+{
+ return 1;
+}
+
+#endif /* SUPPORTS_WEAK */
+
+#ifdef _LIBOBJC
+
+/* Key structure for maintaining thread specific storage */
+static pthread_key_t _objc_thread_storage;
+
+/* Thread local storage for a single thread */
+static void *thread_local_storage = NULL;
+
+/* Backend initialization functions */
+
+/* Initialize the threads subsystem. */
+static inline int
+__gthread_objc_init_thread_system (void)
+{
+ if (__gthread_active_p ())
+ /* Initialize the thread storage key. */
+ return __gthrw_(pthread_keycreate) (&_objc_thread_storage, NULL);
+ else
+ return -1;
+}
+
+/* Close the threads subsystem. */
+static inline int
+__gthread_objc_close_thread_system (void)
+{
+ if (__gthread_active_p ())
+ return 0;
+ else
+ return -1;
+}
+
+/* Backend thread functions */
+
+/* Create a new thread of execution. */
+static inline objc_thread_t
+__gthread_objc_thread_detach (void (*func)(void *), void *arg)
+{
+ objc_thread_t thread_id;
+ pthread_t new_thread_handle;
+
+ if (!__gthread_active_p ())
+ return NULL;
+
+ if (!(__gthrw_(pthread_create) (&new_thread_handle, pthread_attr_default,
+ (void *) func, arg)))
+ {
+ /* ??? May not work! (64bit) */
+ thread_id = *(objc_thread_t *) &new_thread_handle;
+ pthread_detach (&new_thread_handle); /* Fully detach thread. */
+ }
+ else
+ thread_id = NULL;
+
+ return thread_id;
+}
+
+/* Set the current thread's priority. */
+static inline int
+__gthread_objc_thread_set_priority (int priority)
+{
+ int sys_priority = 0;
+
+ if (!__gthread_active_p ())
+ return -1;
+
+ switch (priority)
+ {
+ case OBJC_THREAD_INTERACTIVE_PRIORITY:
+ sys_priority = (PRI_FG_MIN_NP + PRI_FG_MAX_NP) / 2;
+ break;
+ default:
+ case OBJC_THREAD_BACKGROUND_PRIORITY:
+ sys_priority = (PRI_BG_MIN_NP + PRI_BG_MAX_NP) / 2;
+ break;
+ case OBJC_THREAD_LOW_PRIORITY:
+ sys_priority = (PRI_BG_MIN_NP + PRI_BG_MAX_NP) / 2;
+ break;
+ }
+
+ /* Change the priority. */
+ if (pthread_setprio (__gthrw_(pthread_self) (), sys_priority) >= 0)
+ return 0;
+ else
+ /* Failed */
+ return -1;
+}
+
+/* Return the current thread's priority. */
+static inline int
+__gthread_objc_thread_get_priority (void)
+{
+ int sys_priority;
+
+ if (__gthread_active_p ())
+ {
+ if ((sys_priority = pthread_getprio (__gthrw_(pthread_self) ())) >= 0)
+ {
+ if (sys_priority >= PRI_FG_MIN_NP
+ && sys_priority <= PRI_FG_MAX_NP)
+ return OBJC_THREAD_INTERACTIVE_PRIORITY;
+ if (sys_priority >= PRI_BG_MIN_NP
+ && sys_priority <= PRI_BG_MAX_NP)
+ return OBJC_THREAD_BACKGROUND_PRIORITY;
+ return OBJC_THREAD_LOW_PRIORITY;
+ }
+
+ /* Failed */
+ return -1;
+ }
+ else
+ return OBJC_THREAD_INTERACTIVE_PRIORITY;
+}
+
+/* Yield our process time to another thread. */
+static inline void
+__gthread_objc_thread_yield (void)
+{
+ if (__gthread_active_p ())
+ __gthrw_(pthread_yield) ();
+}
+
+/* Terminate the current thread. */
+static inline int
+__gthread_objc_thread_exit (void)
+{
+ if (__gthread_active_p ())
+ /* exit the thread */
+ __gthrw_(pthread_exit) (&__objc_thread_exit_status);
+
+ /* Failed if we reached here */
+ return -1;
+}
+
+/* Returns an integer value which uniquely describes a thread. */
+static inline objc_thread_t
+__gthread_objc_thread_id (void)
+{
+ if (__gthread_active_p ())
+ {
+ pthread_t self = __gthrw_(pthread_self) ();
+
+ return (objc_thread_t) __gthrw_pthread_getunique_np (&self);
+ }
+ else
+ return (objc_thread_t) 1;
+}
+
+/* Sets the thread's local storage pointer. */
+static inline int
+__gthread_objc_thread_set_data (void *value)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_setspecific) (_objc_thread_storage, value);
+ else
+ {
+ thread_local_storage = value;
+ return 0;
+ }
+}
+
+/* Returns the thread's local storage pointer. */
+static inline void *
+__gthread_objc_thread_get_data (void)
+{
+ void *value = NULL;
+
+ if (__gthread_active_p ())
+ {
+ if (!(__gthrw_(pthread_getspecific) (_objc_thread_storage, &value)))
+ return value;
+
+ return NULL;
+ }
+ else
+ return thread_local_storage;
+}
+
+/* Backend mutex functions */
+
+/* Allocate a mutex. */
+static inline int
+__gthread_objc_mutex_allocate (objc_mutex_t mutex)
+{
+ if (__gthread_active_p ())
+ {
+ mutex->backend = objc_malloc (sizeof (pthread_mutex_t));
+
+ if (__gthrw_(pthread_mutex_init) ((pthread_mutex_t *) mutex->backend,
+ pthread_mutexattr_default))
+ {
+ objc_free (mutex->backend);
+ mutex->backend = NULL;
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+/* Deallocate a mutex. */
+static inline int
+__gthread_objc_mutex_deallocate (objc_mutex_t mutex)
+{
+ if (__gthread_active_p ())
+ {
+ if (__gthrw_(pthread_mutex_destroy) ((pthread_mutex_t *) mutex->backend))
+ return -1;
+
+ objc_free (mutex->backend);
+ mutex->backend = NULL;
+ }
+
+ return 0;
+}
+
+/* Grab a lock on a mutex. */
+static inline int
+__gthread_objc_mutex_lock (objc_mutex_t mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_mutex_lock) ((pthread_mutex_t *) mutex->backend);
+ else
+ return 0;
+}
+
+/* Try to grab a lock on a mutex. */
+static inline int
+__gthread_objc_mutex_trylock (objc_mutex_t mutex)
+{
+ if (__gthread_active_p ()
+ && __gthrw_(pthread_mutex_trylock) ((pthread_mutex_t *) mutex->backend) != 1)
+ return -1;
+
+ return 0;
+}
+
+/* Unlock the mutex */
+static inline int
+__gthread_objc_mutex_unlock (objc_mutex_t mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend);
+ else
+ return 0;
+}
+
+/* Backend condition mutex functions */
+
+/* Allocate a condition. */
+static inline int
+__gthread_objc_condition_allocate (objc_condition_t condition
+ __attribute__ ((__unused__)))
+{
+ if (__gthread_active_p ())
+ /* Unimplemented. */
+ return -1;
+ else
+ return 0;
+}
+
+/* Deallocate a condition. */
+static inline int
+__gthread_objc_condition_deallocate (objc_condition_t condition
+ __attribute__ ((__unused__)))
+{
+ if (__gthread_active_p ())
+ /* Unimplemented. */
+ return -1;
+ else
+ return 0;
+}
+
+/* Wait on the condition */
+static inline int
+__gthread_objc_condition_wait (objc_condition_t condition
+ __attribute__ ((__unused__)),
+ objc_mutex_t mutex __attribute__ ((__unused__)))
+{
+ if (__gthread_active_p ())
+ /* Unimplemented. */
+ return -1;
+ else
+ return 0;
+}
+
+/* Wake up all threads waiting on this condition. */
+static inline int
+__gthread_objc_condition_broadcast (objc_condition_t condition
+ __attribute__ ((__unused__)))
+{
+ if (__gthread_active_p ())
+ /* Unimplemented. */
+ return -1;
+ else
+ return 0;
+}
+
+/* Wake up one thread waiting on this condition. */
+static inline int
+__gthread_objc_condition_signal (objc_condition_t condition
+ __attribute__ ((__unused__)))
+{
+ if (__gthread_active_p ())
+ /* Unimplemented. */
+ return -1;
+ else
+ return 0;
+}
+
+#else /* _LIBOBJC */
+
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_once) (__once, __func);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ return __gthrw_(pthread_keycreate) (__key, __dtor);
+}
+
+static inline int
+__gthread_key_delete (__gthread_key_t __key __attribute__ ((__unused__)))
+{
+ /* Operation is not supported. */
+ return -1;
+}
+
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ void *__ptr;
+ if (__gthrw_(pthread_getspecific) (__key, &__ptr) == 0)
+ return __ptr;
+ else
+ return 0;
+}
+
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ return __gthrw_(pthread_setspecific)
+ (__key, CONST_CAST2(void *, const void *, __ptr));
+}
+
+static inline void
+__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ __gthrw_(pthread_mutex_init) (__mutex, pthread_mutexattr_default);
+}
+
+static inline int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_mutex_destroy) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_mutex_lock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_mutex_trylock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ return __gthrw_(pthread_mutex_unlock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__gthread_active_p ())
+ {
+ pthread_mutexattr_t __attr;
+ int __r;
+
+ __r = __gthrw_(pthread_mutexattr_create) (&__attr);
+ if (!__r)
+ __r = __gthrw_(pthread_mutexattr_setkind_np) (&__attr,
+ MUTEX_RECURSIVE_NP);
+ if (!__r)
+ __r = __gthrw_(pthread_mutex_init) (__mutex, __attr);
+ if (!__r)
+ __r = __gthrw_(pthread_mutexattr_delete) (&__attr);
+ return __r;
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_mutex_lock (__mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_mutex_trylock (__mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_mutex_unlock (__mutex);
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_mutex_destroy (__mutex);
+}
+
+#endif /* _LIBOBJC */
+
+#endif
+#endif /* ! GCC_GTHR_DCE_H */
diff --git a/gcc-4.9/libgcc/config/pa/hpux-unwind.h b/gcc-4.9/libgcc/config/pa/hpux-unwind.h
new file mode 100644
index 000000000..567ddd447
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/hpux-unwind.h
@@ -0,0 +1,361 @@
+/* DWARF2 EH unwinding support for PA HP-UX.
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+/* Don't use this if inhibit_libc is set.
+ The build for this target will fail trying to include missing headers. */
+#ifndef inhibit_libc
+#include <signal.h>
+#include <sys/ucontext.h>
+#include <unistd.h>
+
+/* FIXME: We currently ignore the high halves of general, space and
+ control registers on PA 2.0 machines for applications using the
+ 32-bit runtime. We don't restore space registers or the floating
+ point status registers. */
+
+#define MD_FALLBACK_FRAME_STATE_FOR pa_fallback_frame_state
+
+/* HP-UX 10.X doesn't define GetSSReg. */
+#ifndef GetSSReg
+#define GetSSReg(ssp, ss_reg) \
+ ((UseWideRegs (ssp)) \
+ ? (ssp)->ss_wide.ss_32.ss_reg ## _lo \
+ : (ssp)->ss_narrow.ss_reg)
+#endif
+
+#if TARGET_64BIT
+#define GetSSRegAddr(ssp, ss_reg) ((long) &((ssp)->ss_wide.ss_64.ss_reg))
+#else
+#define GetSSRegAddr(ssp, ss_reg) \
+ ((UseWideRegs (ssp)) \
+ ? (long) &((ssp)->ss_wide.ss_32.ss_reg ## _lo) \
+ : (long) &((ssp)->ss_narrow.ss_reg))
+#endif
+
+#define UPDATE_FS_FOR_SAR(FS, N) \
+ (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \
+ (FS)->regs.reg[N].loc.offset = GetSSRegAddr (mc, ss_cr11) - new_cfa
+
+#define UPDATE_FS_FOR_GR(FS, GRN, N) \
+ (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \
+ (FS)->regs.reg[N].loc.offset = GetSSRegAddr (mc, ss_gr##GRN) - new_cfa
+
+#define UPDATE_FS_FOR_FR(FS, FRN, N) \
+ (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \
+ (FS)->regs.reg[N].loc.offset = (long) &(mc->ss_fr##FRN) - new_cfa;
+
+#define UPDATE_FS_FOR_PC(FS, N) \
+ (FS)->regs.reg[N].how = REG_SAVED_OFFSET; \
+ (FS)->regs.reg[N].loc.offset = GetSSRegAddr (mc, ss_pcoq_head) - new_cfa
+
+/* Extract bit field from word using HP's numbering (MSB = 0). */
+#define GET_FIELD(X, FROM, TO) \
+ ((X) >> (31 - (TO)) & ((1 << ((TO) - (FROM) + 1)) - 1))
+
+static inline int
+sign_extend (int x, int len)
+{
+ int signbit = (1 << (len - 1));
+ int mask = (signbit << 1) - 1;
+ return ((x & mask) ^ signbit) - signbit;
+}
+
+/* Extract a 17-bit signed constant from branch instructions. */
+static inline int
+extract_17 (unsigned word)
+{
+ return sign_extend (GET_FIELD (word, 19, 28)
+ | GET_FIELD (word, 29, 29) << 10
+ | GET_FIELD (word, 11, 15) << 11
+ | (word & 0x1) << 16, 17);
+}
+
+/* Extract a 22-bit signed constant from branch instructions. */
+static inline int
+extract_22 (unsigned word)
+{
+ return sign_extend (GET_FIELD (word, 19, 28)
+ | GET_FIELD (word, 29, 29) << 10
+ | GET_FIELD (word, 11, 15) << 11
+ | GET_FIELD (word, 6, 10) << 16
+ | (word & 0x1) << 21, 22);
+}
+
+static _Unwind_Reason_Code
+pa_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ static long cpu;
+ unsigned int *pc = (unsigned int *) context->ra;
+
+ if (pc == 0)
+ return _URC_END_OF_STACK;
+
+ /* Check for relocation of the return value. */
+ if (!TARGET_64BIT
+ && *(pc + 0) == 0x2fd01224 /* fstd,ma fr4,8(sp) */
+ && *(pc + 1) == 0x0fd9109d /* ldw -4(sp),ret1 */
+ && *(pc + 2) == 0x0fd130bc) /* ldw,mb -8(sp),ret0 */
+ pc += 3;
+ else if (!TARGET_64BIT
+ && *(pc + 0) == 0x27d01224 /* fstw,ma fr4,8(sp) */
+ && *(pc + 1) == 0x0fd130bc) /* ldw,mb -8(sp),ret0 */
+ pc += 2;
+ else if (!TARGET_64BIT
+ && *(pc + 0) == 0x0fdc12b0 /* stw,ma ret0,8(sp) */
+ && *(pc + 1) == 0x0fdd1299 /* stw ret1,-4(sp) */
+ && *(pc + 2) == 0x2fd13024) /* fldd,mb -8(sp),fr4 */
+ pc += 3;
+ else if (!TARGET_64BIT
+ && *(pc + 0) == 0x0fdc12b0 /* stw,ma ret0,8(sp) */
+ && *(pc + 1) == 0x27d13024) /* fldw,mb -8(sp),fr4 */
+ pc += 2;
+
+ /* Check if the return address points to an export stub (PA 1.1 or 2.0). */
+ if ((!TARGET_64BIT
+ && *(pc + 0) == 0x4bc23fd1 /* ldw -18(sp),rp */
+ && *(pc + 1) == 0x004010a1 /* ldsid (rp),r1 */
+ && *(pc + 2) == 0x00011820 /* mtsp r1,sr0 */
+ && *(pc + 3) == 0xe0400002) /* be,n 0(sr0,rp) */
+ ||
+ (!TARGET_64BIT
+ && *(pc + 0) == 0x4bc23fd1 /* ldw -18(sp),rp */
+ && *(pc + 1) == 0xe840d002)) /* bve,n (rp) */
+ {
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 30;
+ fs->regs.cfa_offset = 0;
+
+ fs->retaddr_column = 0;
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = -24;
+
+ /* Update context to describe the stub frame. */
+ uw_update_context (context, fs);
+
+ /* Set up fs to describe the FDE for the caller of this stub. */
+ return uw_frame_state_for (context, fs);
+ }
+ /* Check if the return address points to a relocation stub. */
+ else if (!TARGET_64BIT
+ && *(pc + 0) == 0x0fd11082 /* ldw -8(sp),rp */
+ && (*(pc + 1) == 0xe840c002 /* bv,n r0(rp) */
+ || *(pc + 1) == 0xe840d002)) /* bve,n (rp) */
+ {
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 30;
+ fs->regs.cfa_offset = 0;
+
+ fs->retaddr_column = 0;
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = -8;
+
+ /* Update context to describe the stub frame. */
+ uw_update_context (context, fs);
+
+ /* Set up fs to describe the FDE for the caller of this stub. */
+ return uw_frame_state_for (context, fs);
+ }
+
+ /* Check if the return address is an export stub as signal handlers
+ may return via an export stub. */
+ if (!TARGET_64BIT
+ && (*pc & 0xffe0e002) == 0xe8400000 /* bl x,r2 */
+ && *(pc + 1) == 0x08000240 /* nop */
+ && *(pc + 2) == 0x4bc23fd1 /* ldw -18(sp),rp */
+ && *(pc + 3) == 0x004010a1 /* ldsid (rp),r1 */
+ && *(pc + 4) == 0x00011820 /* mtsp r1,sr0 */
+ && *(pc + 5) == 0xe0400002) /* be,n 0(sr0,rp) */
+ /* Extract target address from PA 1.x 17-bit branch. */
+ pc += extract_17 (*pc) + 2;
+ else if (!TARGET_64BIT
+ && (*pc & 0xfc00e002) == 0xe800a000 /* b,l x,r2 */
+ && *(pc + 1) == 0x08000240 /* nop */
+ && *(pc + 2) == 0x4bc23fd1 /* ldw -18(sp),rp */
+ && *(pc + 3) == 0xe840d002) /* bve,n (rp) */
+ /* Extract target address from PA 2.0 22-bit branch. */
+ pc += extract_22 (*pc) + 2;
+
+ /* Now check if the return address is one of the signal handler
+ returns, _sigreturn or _sigsetreturn. */
+ if ((TARGET_64BIT
+ && *(pc + 0) == 0x53db3f51 /* ldd -58(sp),dp */
+ && *(pc + 8) == 0x34160116 /* ldi 8b,r22 */
+ && *(pc + 9) == 0x08360ac1 /* shladd,l r22,3,r1,r1 */
+ && *(pc + 10) == 0x0c2010c1 /* ldd 0(r1),r1 */
+ && *(pc + 11) == 0xe4202000) /* be,l 0(sr4,r1) */
+ ||
+ (TARGET_64BIT
+ && *(pc + 0) == 0x36dc0000 /* ldo 0(r22),ret0 */
+ && *(pc + 6) == 0x341601c0 /* ldi e0,r22 */
+ && *(pc + 7) == 0x08360ac1 /* shladd,l r22,3,r1,r1 */
+ && *(pc + 8) == 0x0c2010c1 /* ldd 0(r1),r1 */
+ && *(pc + 9) == 0xe4202000) /* be,l 0(sr4,r1) */
+ ||
+ (!TARGET_64BIT
+ && *(pc + 0) == 0x379a0000 /* ldo 0(ret0),r26 */
+ && *(pc + 1) == 0x6bd33fc9 /* stw r19,-1c(sp) */
+ && *(pc + 2) == 0x20200801 /* ldil L%-40000000,r1 */
+ && *(pc + 3) == 0xe420e008 /* be,l 4(sr7,r1) */
+ && *(pc + 4) == 0x34160116) /* ldi 8b,r22 */
+ ||
+ (!TARGET_64BIT
+ && *(pc + 0) == 0x6bd33fc9 /* stw r19,-1c(sp) */
+ && *(pc + 1) == 0x20200801 /* ldil L%-40000000,r1 */
+ && *(pc + 2) == 0xe420e008 /* be,l 4(sr7,r1) */
+ && *(pc + 3) == 0x341601c0)) /* ldi e0,r22 */
+ {
+ /* The previous stack pointer is saved at (long *)SP - 1. The
+ ucontext structure is offset from the start of the previous
+ frame by the siglocal_misc structure. */
+ struct siglocalx *sl = (struct siglocalx *)
+ (*((long *) context->cfa - 1));
+ mcontext_t *mc = &(sl->sl_uc.uc_mcontext);
+
+ long new_cfa = GetSSReg (mc, ss_sp);
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 30;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ UPDATE_FS_FOR_GR (fs, 1, 1);
+ UPDATE_FS_FOR_GR (fs, 2, 2);
+ UPDATE_FS_FOR_GR (fs, 3, 3);
+ UPDATE_FS_FOR_GR (fs, 4, 4);
+ UPDATE_FS_FOR_GR (fs, 5, 5);
+ UPDATE_FS_FOR_GR (fs, 6, 6);
+ UPDATE_FS_FOR_GR (fs, 7, 7);
+ UPDATE_FS_FOR_GR (fs, 8, 8);
+ UPDATE_FS_FOR_GR (fs, 9, 9);
+ UPDATE_FS_FOR_GR (fs, 10, 10);
+ UPDATE_FS_FOR_GR (fs, 11, 11);
+ UPDATE_FS_FOR_GR (fs, 12, 12);
+ UPDATE_FS_FOR_GR (fs, 13, 13);
+ UPDATE_FS_FOR_GR (fs, 14, 14);
+ UPDATE_FS_FOR_GR (fs, 15, 15);
+ UPDATE_FS_FOR_GR (fs, 16, 16);
+ UPDATE_FS_FOR_GR (fs, 17, 17);
+ UPDATE_FS_FOR_GR (fs, 18, 18);
+ UPDATE_FS_FOR_GR (fs, 19, 19);
+ UPDATE_FS_FOR_GR (fs, 20, 20);
+ UPDATE_FS_FOR_GR (fs, 21, 21);
+ UPDATE_FS_FOR_GR (fs, 22, 22);
+ UPDATE_FS_FOR_GR (fs, 23, 23);
+ UPDATE_FS_FOR_GR (fs, 24, 24);
+ UPDATE_FS_FOR_GR (fs, 25, 25);
+ UPDATE_FS_FOR_GR (fs, 26, 26);
+ UPDATE_FS_FOR_GR (fs, 27, 27);
+ UPDATE_FS_FOR_GR (fs, 28, 28);
+ UPDATE_FS_FOR_GR (fs, 29, 29);
+ UPDATE_FS_FOR_GR (fs, 30, 30);
+ UPDATE_FS_FOR_GR (fs, 31, 31);
+
+ if (TARGET_64BIT)
+ {
+ UPDATE_FS_FOR_FR (fs, 4, 32);
+ UPDATE_FS_FOR_FR (fs, 5, 33);
+ UPDATE_FS_FOR_FR (fs, 6, 34);
+ UPDATE_FS_FOR_FR (fs, 7, 35);
+ UPDATE_FS_FOR_FR (fs, 8, 36);
+ UPDATE_FS_FOR_FR (fs, 9, 37);
+ UPDATE_FS_FOR_FR (fs, 10, 38);
+ UPDATE_FS_FOR_FR (fs, 11, 39);
+ UPDATE_FS_FOR_FR (fs, 12, 40);
+ UPDATE_FS_FOR_FR (fs, 13, 41);
+ UPDATE_FS_FOR_FR (fs, 14, 42);
+ UPDATE_FS_FOR_FR (fs, 15, 43);
+ UPDATE_FS_FOR_FR (fs, 16, 44);
+ UPDATE_FS_FOR_FR (fs, 17, 45);
+ UPDATE_FS_FOR_FR (fs, 18, 46);
+ UPDATE_FS_FOR_FR (fs, 19, 47);
+ UPDATE_FS_FOR_FR (fs, 20, 48);
+ UPDATE_FS_FOR_FR (fs, 21, 49);
+ UPDATE_FS_FOR_FR (fs, 22, 50);
+ UPDATE_FS_FOR_FR (fs, 23, 51);
+ UPDATE_FS_FOR_FR (fs, 24, 52);
+ UPDATE_FS_FOR_FR (fs, 25, 53);
+ UPDATE_FS_FOR_FR (fs, 26, 54);
+ UPDATE_FS_FOR_FR (fs, 27, 55);
+ UPDATE_FS_FOR_FR (fs, 28, 56);
+ UPDATE_FS_FOR_FR (fs, 29, 57);
+ UPDATE_FS_FOR_FR (fs, 30, 58);
+ UPDATE_FS_FOR_FR (fs, 31, 59);
+
+ UPDATE_FS_FOR_SAR (fs, 60);
+ }
+ else
+ {
+ UPDATE_FS_FOR_FR (fs, 4, 32);
+ UPDATE_FS_FOR_FR (fs, 5, 34);
+ UPDATE_FS_FOR_FR (fs, 6, 36);
+ UPDATE_FS_FOR_FR (fs, 7, 38);
+ UPDATE_FS_FOR_FR (fs, 8, 40);
+ UPDATE_FS_FOR_FR (fs, 9, 44);
+ UPDATE_FS_FOR_FR (fs, 10, 44);
+ UPDATE_FS_FOR_FR (fs, 11, 46);
+ UPDATE_FS_FOR_FR (fs, 12, 48);
+ UPDATE_FS_FOR_FR (fs, 13, 50);
+ UPDATE_FS_FOR_FR (fs, 14, 52);
+ UPDATE_FS_FOR_FR (fs, 15, 54);
+
+ if (!cpu)
+ cpu = sysconf (_SC_CPU_VERSION);
+
+ /* PA-RISC 1.0 only has 16 floating point registers. */
+ if (cpu != CPU_PA_RISC1_0)
+ {
+ UPDATE_FS_FOR_FR (fs, 16, 56);
+ UPDATE_FS_FOR_FR (fs, 17, 58);
+ UPDATE_FS_FOR_FR (fs, 18, 60);
+ UPDATE_FS_FOR_FR (fs, 19, 62);
+ UPDATE_FS_FOR_FR (fs, 20, 64);
+ UPDATE_FS_FOR_FR (fs, 21, 66);
+ UPDATE_FS_FOR_FR (fs, 22, 68);
+ UPDATE_FS_FOR_FR (fs, 23, 70);
+ UPDATE_FS_FOR_FR (fs, 24, 72);
+ UPDATE_FS_FOR_FR (fs, 25, 74);
+ UPDATE_FS_FOR_FR (fs, 26, 76);
+ UPDATE_FS_FOR_FR (fs, 27, 78);
+ UPDATE_FS_FOR_FR (fs, 28, 80);
+ UPDATE_FS_FOR_FR (fs, 29, 82);
+ UPDATE_FS_FOR_FR (fs, 30, 84);
+ UPDATE_FS_FOR_FR (fs, 31, 86);
+ }
+
+ UPDATE_FS_FOR_SAR (fs, 88);
+ }
+
+ fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
+ UPDATE_FS_FOR_PC (fs, DWARF_ALT_FRAME_RETURN_COLUMN);
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+ }
+
+ return _URC_END_OF_STACK;
+}
+#endif /* inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/pa/lib2funcs.S b/gcc-4.9/libgcc/config/pa/lib2funcs.S
new file mode 100644
index 000000000..49c68599d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/lib2funcs.S
@@ -0,0 +1,74 @@
+; Subroutines for calling unbound dynamic functions from within GDB for HPPA.
+; Subroutines for out of line prologues and epilogues on for the HPPA
+; Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+; This file is part of GCC.
+
+; GCC is free software; you can redistribute it and/or modify
+; it under the terms of the GNU General Public License as published by
+; the Free Software Foundation; either version 3, or (at your option)
+; any later version.
+
+; GCC is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+#if !defined(__pro__) && !defined(__rtems__)
+ .SPACE $PRIVATE$
+ .SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
+ .SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
+ .SPACE $TEXT$
+ .SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
+ .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
+ .SUBSPA $MILLICODE$,QUAD=0,ALIGN=8,ACCESS=44,SORT=8
+#endif
+ .IMPORT $$dyncall,MILLICODE
+#if !defined(__pro__) && !defined(__rtems__)
+ .SPACE $TEXT$
+ .SUBSPA $CODE$
+#else
+ .text
+#endif
+
+; Simply call with the address of the desired import stub in %r22 and
+; arguments in the normal place (%r26-%r23 and stack slots).
+;
+ .align 4
+ .EXPORT __gcc_plt_call,ENTRY,PRIV_LEV=3,RTNVAL=GR
+__gcc_plt_call
+ .PROC
+ .CALLINFO
+ .ENTRY
+ ; Our return address comes in %r31, not %r2!
+ stw %r31,-8(%r30)
+
+ ; An inline version of dyncall so we don't have to worry
+ ; about long calls to millicode, PIC and other complexities.
+ bb,>=,n %r22,30,L$foo
+ depi 0,31,2,%r22
+ ldw 4(%r22),%r19
+ ldw 0(%r22),%r22
+L$foo
+ ldsid (%r22),%r1
+ mtsp %r1,%sr0
+ ble 0(%sr0,%r22)
+ copy %r31,%r2
+ ldw -8(%r30),%r2
+
+ ; We're going to be returning to a stack address, so we
+ ; need to do an intra-space return.
+ ldsid (%rp),%r1
+ mtsp %r1,%sr0
+ be,n 0(%sr0,%rp)
+ .EXIT
+ .PROCEND
diff --git a/gcc-4.9/libgcc/config/pa/linux-atomic.c b/gcc-4.9/libgcc/config/pa/linux-atomic.c
new file mode 100644
index 000000000..d92d6ef79
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/linux-atomic.c
@@ -0,0 +1,305 @@
+/* Linux-specific atomic operations for PA Linux.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ Based on code contributed by CodeSourcery for ARM EABI Linux.
+ Modifications for PA Linux by Helge Deller <deller@gmx.de>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#define EFAULT 14
+#define EBUSY 16
+#define ENOSYS 251
+
+/* All PA-RISC implementations supported by linux have strongly
+ ordered loads and stores. Only cache flushes and purges can be
+ delayed. The data cache implementations are all globally
+ coherent. Thus, there is no need to synchonize memory accesses.
+
+ GCC automatically issues a asm memory barrier when it encounters
+ a __sync_synchronize builtin. Thus, we do not need to define this
+ builtin.
+
+ We implement byte, short and int versions of each atomic operation
+ using the kernel helper defined below. There is no support for
+ 64-bit operations yet. */
+
+/* A privileged instruction to crash a userspace program with SIGILL. */
+#define ABORT_INSTRUCTION asm ("iitlbp %r0,(%sr0, %r0)")
+
+/* Determine kernel LWS function call (0=32-bit, 1=64-bit userspace). */
+#define LWS_CAS (sizeof(unsigned long) == 4 ? 0 : 1)
+
+/* Kernel helper for compare-and-exchange a 32-bit value. */
+static inline long
+__kernel_cmpxchg (int oldval, int newval, int *mem)
+{
+ register unsigned long lws_mem asm("r26") = (unsigned long) (mem);
+ register long lws_ret asm("r28");
+ register long lws_errno asm("r21");
+ register int lws_old asm("r25") = oldval;
+ register int lws_new asm("r24") = newval;
+ asm volatile ( "ble 0xb0(%%sr2, %%r0) \n\t"
+ "ldi %5, %%r20 \n\t"
+ : "=r" (lws_ret), "=r" (lws_errno), "=r" (lws_mem),
+ "=r" (lws_old), "=r" (lws_new)
+ : "i" (LWS_CAS), "2" (lws_mem), "3" (lws_old), "4" (lws_new)
+ : "r1", "r20", "r22", "r23", "r29", "r31", "memory"
+ );
+ if (__builtin_expect (lws_errno == -EFAULT || lws_errno == -ENOSYS, 0))
+ ABORT_INSTRUCTION;
+
+ /* If the kernel LWS call succeeded (lws_errno == 0), lws_ret contains
+ the old value from memory. If this value is equal to OLDVAL, the
+ new value was written to memory. If not, return -EBUSY. */
+ if (!lws_errno && lws_ret != oldval)
+ lws_errno = -EBUSY;
+
+ return lws_errno;
+}
+
+#define HIDDEN __attribute__ ((visibility ("hidden")))
+
+/* Big endian masks */
+#define INVERT_MASK_1 24
+#define INVERT_MASK_2 16
+
+#define MASK_1 0xffu
+#define MASK_2 0xffffu
+
+#define FETCH_AND_OP_WORD(OP, PFX_OP, INF_OP) \
+ int HIDDEN \
+ __sync_fetch_and_##OP##_4 (int *ptr, int val) \
+ { \
+ int failure, tmp; \
+ \
+ do { \
+ tmp = *ptr; \
+ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \
+ } while (failure != 0); \
+ \
+ return tmp; \
+ }
+
+FETCH_AND_OP_WORD (add, , +)
+FETCH_AND_OP_WORD (sub, , -)
+FETCH_AND_OP_WORD (or, , |)
+FETCH_AND_OP_WORD (and, , &)
+FETCH_AND_OP_WORD (xor, , ^)
+FETCH_AND_OP_WORD (nand, ~, &)
+
+#define NAME_oldval(OP, WIDTH) __sync_fetch_and_##OP##_##WIDTH
+#define NAME_newval(OP, WIDTH) __sync_##OP##_and_fetch_##WIDTH
+
+/* Implement both __sync_<op>_and_fetch and __sync_fetch_and_<op> for
+ subword-sized quantities. */
+
+#define SUBWORD_SYNC_OP(OP, PFX_OP, INF_OP, TYPE, WIDTH, RETURN) \
+ TYPE HIDDEN \
+ NAME##_##RETURN (OP, WIDTH) (TYPE *ptr, TYPE val) \
+ { \
+ int *wordptr = (int *) ((unsigned long) ptr & ~3); \
+ unsigned int mask, shift, oldval, newval; \
+ int failure; \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ do { \
+ oldval = *wordptr; \
+ newval = ((PFX_OP (((oldval & mask) >> shift) \
+ INF_OP (unsigned int) val)) << shift) & mask; \
+ newval |= oldval & ~mask; \
+ failure = __kernel_cmpxchg (oldval, newval, wordptr); \
+ } while (failure != 0); \
+ \
+ return (RETURN & mask) >> shift; \
+ }
+
+SUBWORD_SYNC_OP (add, , +, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (or, , |, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (and, , &, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (or, , |, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (and, , &, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, oldval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval)
+
+#define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \
+ int HIDDEN \
+ __sync_##OP##_and_fetch_4 (int *ptr, int val) \
+ { \
+ int tmp, failure; \
+ \
+ do { \
+ tmp = *ptr; \
+ failure = __kernel_cmpxchg (tmp, PFX_OP (tmp INF_OP val), ptr); \
+ } while (failure != 0); \
+ \
+ return PFX_OP (tmp INF_OP val); \
+ }
+
+OP_AND_FETCH_WORD (add, , +)
+OP_AND_FETCH_WORD (sub, , -)
+OP_AND_FETCH_WORD (or, , |)
+OP_AND_FETCH_WORD (and, , &)
+OP_AND_FETCH_WORD (xor, , ^)
+OP_AND_FETCH_WORD (nand, ~, &)
+
+SUBWORD_SYNC_OP (add, , +, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (or, , |, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (and, , &, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval)
+
+SUBWORD_SYNC_OP (add, , +, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (or, , |, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (and, , &, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, newval)
+SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval)
+
+int HIDDEN
+__sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval)
+{
+ int actual_oldval, fail;
+
+ while (1)
+ {
+ actual_oldval = *ptr;
+
+ if (__builtin_expect (oldval != actual_oldval, 0))
+ return actual_oldval;
+
+ fail = __kernel_cmpxchg (actual_oldval, newval, ptr);
+
+ if (__builtin_expect (!fail, 1))
+ return actual_oldval;
+ }
+}
+
+#define SUBWORD_VAL_CAS(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_val_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ int *wordptr = (int *)((unsigned long) ptr & ~3), fail; \
+ unsigned int mask, shift, actual_oldval, actual_newval; \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ while (1) \
+ { \
+ actual_oldval = *wordptr; \
+ \
+ if (__builtin_expect (((actual_oldval & mask) >> shift) \
+ != (unsigned int) oldval, 0)) \
+ return (actual_oldval & mask) >> shift; \
+ \
+ actual_newval = (actual_oldval & ~mask) \
+ | (((unsigned int) newval << shift) & mask); \
+ \
+ fail = __kernel_cmpxchg (actual_oldval, actual_newval, \
+ wordptr); \
+ \
+ if (__builtin_expect (!fail, 1)) \
+ return (actual_oldval & mask) >> shift; \
+ } \
+ }
+
+SUBWORD_VAL_CAS (unsigned short, 2)
+SUBWORD_VAL_CAS (unsigned char, 1)
+
+typedef unsigned char bool;
+
+bool HIDDEN
+__sync_bool_compare_and_swap_4 (int *ptr, int oldval, int newval)
+{
+ int failure = __kernel_cmpxchg (oldval, newval, ptr);
+ return (failure == 0);
+}
+
+#define SUBWORD_BOOL_CAS(TYPE, WIDTH) \
+ bool HIDDEN \
+ __sync_bool_compare_and_swap_##WIDTH (TYPE *ptr, TYPE oldval, \
+ TYPE newval) \
+ { \
+ TYPE actual_oldval \
+ = __sync_val_compare_and_swap_##WIDTH (ptr, oldval, newval); \
+ return (oldval == actual_oldval); \
+ }
+
+SUBWORD_BOOL_CAS (unsigned short, 2)
+SUBWORD_BOOL_CAS (unsigned char, 1)
+
+int HIDDEN
+__sync_lock_test_and_set_4 (int *ptr, int val)
+{
+ int failure, oldval;
+
+ do {
+ oldval = *ptr;
+ failure = __kernel_cmpxchg (oldval, val, ptr);
+ } while (failure != 0);
+
+ return oldval;
+}
+
+#define SUBWORD_TEST_AND_SET(TYPE, WIDTH) \
+ TYPE HIDDEN \
+ __sync_lock_test_and_set_##WIDTH (TYPE *ptr, TYPE val) \
+ { \
+ int failure; \
+ unsigned int oldval, newval, shift, mask; \
+ int *wordptr = (int *) ((unsigned long) ptr & ~3); \
+ \
+ shift = (((unsigned long) ptr & 3) << 3) ^ INVERT_MASK_##WIDTH; \
+ mask = MASK_##WIDTH << shift; \
+ \
+ do { \
+ oldval = *wordptr; \
+ newval = (oldval & ~mask) \
+ | (((unsigned int) val << shift) & mask); \
+ failure = __kernel_cmpxchg (oldval, newval, wordptr); \
+ } while (failure != 0); \
+ \
+ return (oldval & mask) >> shift; \
+ }
+
+SUBWORD_TEST_AND_SET (unsigned short, 2)
+SUBWORD_TEST_AND_SET (unsigned char, 1)
+
+#define SYNC_LOCK_RELEASE(TYPE, WIDTH) \
+ void HIDDEN \
+ __sync_lock_release_##WIDTH (TYPE *ptr) \
+ { \
+ *ptr = 0; \
+ }
+
+SYNC_LOCK_RELEASE (int, 4)
+SYNC_LOCK_RELEASE (short, 2)
+SYNC_LOCK_RELEASE (char, 1)
diff --git a/gcc-4.9/libgcc/config/pa/linux-unwind.h b/gcc-4.9/libgcc/config/pa/linux-unwind.h
new file mode 100644
index 000000000..485f2d98e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/linux-unwind.h
@@ -0,0 +1,141 @@
+/* DWARF2 EH unwinding support for PA Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+/* Don't use this if inhibit_libc is set.
+ The build for this target will fail trying to include missing headers. */
+#ifndef inhibit_libc
+#include <signal.h>
+#include <sys/ucontext.h>
+
+/* Unfortunately, because of various bugs and changes to the kernel,
+ we have several cases to deal with.
+
+ In 2.4, the signal trampoline is 4 words, and (CONTEXT)->ra should
+ point directly at the beginning of the trampoline and struct rt_sigframe.
+
+ In <= 2.6.5-rc2-pa3, the signal trampoline is 9 words, and
+ (CONTEXT)->ra points at the 4th word in the trampoline structure. This
+ is wrong, it should point at the 5th word. This is fixed in 2.6.5-rc2-pa4.
+
+ To detect these cases, we first take (CONTEXT)->ra, align it to 64-bytes
+ to get the beginning of the signal frame, and then check offsets 0, 4
+ and 5 to see if we found the beginning of the trampoline. This will
+ tell us how to locate the sigcontext structure.
+
+ Note that with a 2.4 64-bit kernel, the signal context is not properly
+ passed back to userspace so the unwind will not work correctly. */
+
+#define MD_FALLBACK_FRAME_STATE_FOR pa32_fallback_frame_state
+
+static _Unwind_Reason_Code
+pa32_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned long sp = (unsigned long)context->ra & ~63;
+ unsigned int *pc = (unsigned int *)sp;
+ unsigned long off;
+ _Unwind_Ptr new_cfa;
+ int i;
+ struct sigcontext *sc;
+ struct rt_sigframe {
+ siginfo_t info;
+ struct ucontext uc;
+ } *frame;
+
+ /* rt_sigreturn trampoline:
+ 3419000x ldi 0, %r25 or ldi 1, %r25 (x = 0 or 2)
+ 3414015a ldi __NR_rt_sigreturn, %r20
+ e4008200 be,l 0x100(%sr2, %r0), %sr0, %r31
+ 08000240 nop */
+
+ if (pc[0] == 0x34190000 || pc[0] == 0x34190002)
+ off = 4*4;
+ else if (pc[4] == 0x34190000 || pc[4] == 0x34190002)
+ {
+ pc += 4;
+ off = 10 * 4;
+ }
+ else if (pc[5] == 0x34190000 || pc[5] == 0x34190002)
+ {
+ pc += 5;
+ off = 10 * 4;
+ }
+ else
+ {
+ /* We may have to unwind through an alternate signal stack.
+ We assume that the alignment of the alternate signal stack
+ is BIGGEST_ALIGNMENT (i.e., that it has been allocated using
+ malloc). As a result, we can't distinguish trampolines
+ used prior to 2.6.5-rc2-pa4. However after 2.6.5-rc2-pa4,
+ the return address of a signal trampoline will be on an odd
+ word boundary and we can then determine the frame offset. */
+ sp = (unsigned long)context->ra;
+ pc = (unsigned int *)sp;
+ if ((pc[0] == 0x34190000 || pc[0] == 0x34190002) && (sp & 4))
+ off = 5 * 4;
+ else
+ return _URC_END_OF_STACK;
+ }
+
+ if (pc[1] != 0x3414015a
+ || pc[2] != 0xe4008200
+ || pc[3] != 0x08000240)
+ return _URC_END_OF_STACK;
+
+ frame = (struct rt_sigframe *)(sp + off);
+ sc = &frame->uc.uc_mcontext;
+
+ new_cfa = sc->sc_gr[30];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 30;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+ for (i = 1; i <= 31; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset = (long)&sc->sc_gr[i] - new_cfa;
+ }
+ for (i = 4; i <= 31; i++)
+ {
+ /* FP regs have left and right halves */
+ fs->regs.reg[2*i+24].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2*i+24].loc.offset
+ = (long)&sc->sc_fr[i] - new_cfa;
+ fs->regs.reg[2*i+24+1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2*i+24+1].loc.offset
+ = (long)&sc->sc_fr[i] + 4 - new_cfa;
+ }
+ fs->regs.reg[88].how = REG_SAVED_OFFSET;
+ fs->regs.reg[88].loc.offset = (long) &sc->sc_sar - new_cfa;
+ fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset
+ = (long) &sc->sc_iaoq[0] - new_cfa;
+ fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
+ fs->signal_frame = 1;
+ return _URC_NO_REASON;
+}
+#endif /* inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/pa/milli64.S b/gcc-4.9/libgcc/config/pa/milli64.S
new file mode 100644
index 000000000..e92a47b23
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/milli64.S
@@ -0,0 +1,2134 @@
+/* 32 and 64-bit millicode, original author Hewlett-Packard
+ adapted for gcc by Paul Bame <bame@debian.org>
+ and Alan Modra <alan@linuxcare.com.au>.
+
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef pa64
+ .level 2.0w
+#endif
+
+/* Hardware General Registers. */
+r0: .reg %r0
+r1: .reg %r1
+r2: .reg %r2
+r3: .reg %r3
+r4: .reg %r4
+r5: .reg %r5
+r6: .reg %r6
+r7: .reg %r7
+r8: .reg %r8
+r9: .reg %r9
+r10: .reg %r10
+r11: .reg %r11
+r12: .reg %r12
+r13: .reg %r13
+r14: .reg %r14
+r15: .reg %r15
+r16: .reg %r16
+r17: .reg %r17
+r18: .reg %r18
+r19: .reg %r19
+r20: .reg %r20
+r21: .reg %r21
+r22: .reg %r22
+r23: .reg %r23
+r24: .reg %r24
+r25: .reg %r25
+r26: .reg %r26
+r27: .reg %r27
+r28: .reg %r28
+r29: .reg %r29
+r30: .reg %r30
+r31: .reg %r31
+
+/* Hardware Space Registers. */
+sr0: .reg %sr0
+sr1: .reg %sr1
+sr2: .reg %sr2
+sr3: .reg %sr3
+sr4: .reg %sr4
+sr5: .reg %sr5
+sr6: .reg %sr6
+sr7: .reg %sr7
+
+/* Hardware Floating Point Registers. */
+fr0: .reg %fr0
+fr1: .reg %fr1
+fr2: .reg %fr2
+fr3: .reg %fr3
+fr4: .reg %fr4
+fr5: .reg %fr5
+fr6: .reg %fr6
+fr7: .reg %fr7
+fr8: .reg %fr8
+fr9: .reg %fr9
+fr10: .reg %fr10
+fr11: .reg %fr11
+fr12: .reg %fr12
+fr13: .reg %fr13
+fr14: .reg %fr14
+fr15: .reg %fr15
+
+/* Hardware Control Registers. */
+cr11: .reg %cr11
+sar: .reg %cr11 /* Shift Amount Register */
+
+/* Software Architecture General Registers. */
+rp: .reg r2 /* return pointer */
+#ifdef pa64
+mrp: .reg r2 /* millicode return pointer */
+#else
+mrp: .reg r31 /* millicode return pointer */
+#endif
+ret0: .reg r28 /* return value */
+ret1: .reg r29 /* return value (high part of double) */
+sp: .reg r30 /* stack pointer */
+dp: .reg r27 /* data pointer */
+arg0: .reg r26 /* argument */
+arg1: .reg r25 /* argument or high part of double argument */
+arg2: .reg r24 /* argument */
+arg3: .reg r23 /* argument or high part of double argument */
+
+/* Software Architecture Space Registers. */
+/* sr0 ; return link from BLE */
+sret: .reg sr1 /* return value */
+sarg: .reg sr1 /* argument */
+/* sr4 ; PC SPACE tracker */
+/* sr5 ; process private data */
+
+/* Frame Offsets (millicode convention!) Used when calling other
+ millicode routines. Stack unwinding is dependent upon these
+ definitions. */
+r31_slot: .equ -20 /* "current RP" slot */
+sr0_slot: .equ -16 /* "static link" slot */
+#if defined(pa64)
+mrp_slot: .equ -16 /* "current RP" slot */
+psp_slot: .equ -8 /* "previous SP" slot */
+#else
+mrp_slot: .equ -20 /* "current RP" slot (replacing "r31_slot") */
+#endif
+
+
+#define DEFINE(name,value)name: .EQU value
+#define RDEFINE(name,value)name: .REG value
+#ifdef milliext
+#define MILLI_BE(lbl) BE lbl(sr7,r0)
+#define MILLI_BEN(lbl) BE,n lbl(sr7,r0)
+#define MILLI_BLE(lbl) BLE lbl(sr7,r0)
+#define MILLI_BLEN(lbl) BLE,n lbl(sr7,r0)
+#define MILLIRETN BE,n 0(sr0,mrp)
+#define MILLIRET BE 0(sr0,mrp)
+#define MILLI_RETN BE,n 0(sr0,mrp)
+#define MILLI_RET BE 0(sr0,mrp)
+#else
+#define MILLI_BE(lbl) B lbl
+#define MILLI_BEN(lbl) B,n lbl
+#define MILLI_BLE(lbl) BL lbl,mrp
+#define MILLI_BLEN(lbl) BL,n lbl,mrp
+#define MILLIRETN BV,n 0(mrp)
+#define MILLIRET BV 0(mrp)
+#define MILLI_RETN BV,n 0(mrp)
+#define MILLI_RET BV 0(mrp)
+#endif
+
+#ifdef __STDC__
+#define CAT(a,b) a##b
+#else
+#define CAT(a,b) a/**/b
+#endif
+
+#ifdef ELF
+#define SUBSPA_MILLI .section .text
+#define SUBSPA_MILLI_DIV .section .text.div,"ax",@progbits! .align 16
+#define SUBSPA_MILLI_MUL .section .text.mul,"ax",@progbits! .align 16
+#define ATTR_MILLI
+#define SUBSPA_DATA .section .data
+#define ATTR_DATA
+#define GLOBAL $global$
+#define GSYM(sym) !sym:
+#define LSYM(sym) !CAT(.L,sym:)
+#define LREF(sym) CAT(.L,sym)
+
+#else
+
+#ifdef coff
+/* This used to be .milli but since link32 places different named
+ sections in different segments millicode ends up a long ways away
+ from .text (1meg?). This way they will be a lot closer.
+
+ The SUBSPA_MILLI_* specify locality sets for certain millicode
+ modules in order to ensure that modules that call one another are
+ placed close together. Without locality sets this is unlikely to
+ happen because of the Dynamite linker library search algorithm. We
+ want these modules close together so that short calls always reach
+ (we don't want to require long calls or use long call stubs). */
+
+#define SUBSPA_MILLI .subspa .text
+#define SUBSPA_MILLI_DIV .subspa .text$dv,align=16
+#define SUBSPA_MILLI_MUL .subspa .text$mu,align=16
+#define ATTR_MILLI .attr code,read,execute
+#define SUBSPA_DATA .subspa .data
+#define ATTR_DATA .attr init_data,read,write
+#define GLOBAL _gp
+#else
+#define SUBSPA_MILLI .subspa $MILLICODE$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=8
+#define SUBSPA_MILLI_DIV SUBSPA_MILLI
+#define SUBSPA_MILLI_MUL SUBSPA_MILLI
+#define ATTR_MILLI
+#define SUBSPA_DATA .subspa $BSS$,quad=1,align=8,access=0x1f,sort=80,zero
+#define ATTR_DATA
+#define GLOBAL $global$
+#endif
+#define SPACE_DATA .space $PRIVATE$,spnum=1,sort=16
+
+#define GSYM(sym) !sym
+#define LSYM(sym) !CAT(L$,sym)
+#define LREF(sym) CAT(L$,sym)
+#endif
+
+#ifdef L_dyncall
+ SUBSPA_MILLI
+ ATTR_DATA
+GSYM($$dyncall)
+ .export $$dyncall,millicode
+ .proc
+ .callinfo millicode
+ .entry
+ bb,>=,n %r22,30,LREF(1) ; branch if not plabel address
+ depi 0,31,2,%r22 ; clear the two least significant bits
+ ldw 4(%r22),%r19 ; load new LTP value
+ ldw 0(%r22),%r22 ; load address of target
+LSYM(1)
+#ifdef LINUX
+ bv %r0(%r22) ; branch to the real target
+#else
+ ldsid (%sr0,%r22),%r1 ; get the "space ident" selected by r22
+ mtsp %r1,%sr0 ; move that space identifier into sr0
+ be 0(%sr0,%r22) ; branch to the real target
+#endif
+ stw %r2,-24(%r30) ; save return address into frame marker
+ .exit
+ .procend
+#endif
+
+#ifdef L_divI
+/* ROUTINES: $$divI, $$divoI
+
+ Single precision divide for signed binary integers.
+
+ The quotient is truncated towards zero.
+ The sign of the quotient is the XOR of the signs of the dividend and
+ divisor.
+ Divide by zero is trapped.
+ Divide of -2**31 by -1 is trapped for $$divoI but not for $$divI.
+
+ INPUT REGISTERS:
+ . arg0 == dividend
+ . arg1 == divisor
+ . mrp == return pc
+ . sr0 == return space when called externally
+
+ OUTPUT REGISTERS:
+ . arg0 = undefined
+ . arg1 = undefined
+ . ret1 = quotient
+
+ OTHER REGISTERS AFFECTED:
+ . r1 = undefined
+
+ SIDE EFFECTS:
+ . Causes a trap under the following conditions:
+ . divisor is zero (traps with ADDIT,= 0,25,0)
+ . dividend==-2**31 and divisor==-1 and routine is $$divoI
+ . (traps with ADDO 26,25,0)
+ . Changes memory at the following places:
+ . NONE
+
+ PERMISSIBLE CONTEXT:
+ . Unwindable.
+ . Suitable for internal or external millicode.
+ . Assumes the special millicode register conventions.
+
+ DISCUSSION:
+ . Branchs to other millicode routines using BE
+ . $$div_# for # being 2,3,4,5,6,7,8,9,10,12,14,15
+ .
+ . For selected divisors, calls a divide by constant routine written by
+ . Karl Pettis. Eligible divisors are 1..15 excluding 11 and 13.
+ .
+ . The only overflow case is -2**31 divided by -1.
+ . Both routines return -2**31 but only $$divoI traps. */
+
+RDEFINE(temp,r1)
+RDEFINE(retreg,ret1) /* r29 */
+RDEFINE(temp1,arg0)
+ SUBSPA_MILLI_DIV
+ ATTR_MILLI
+ .import $$divI_2,millicode
+ .import $$divI_3,millicode
+ .import $$divI_4,millicode
+ .import $$divI_5,millicode
+ .import $$divI_6,millicode
+ .import $$divI_7,millicode
+ .import $$divI_8,millicode
+ .import $$divI_9,millicode
+ .import $$divI_10,millicode
+ .import $$divI_12,millicode
+ .import $$divI_14,millicode
+ .import $$divI_15,millicode
+ .export $$divI,millicode
+ .export $$divoI,millicode
+ .proc
+ .callinfo millicode
+ .entry
+GSYM($$divoI)
+ comib,=,n -1,arg1,LREF(negative1) /* when divisor == -1 */
+GSYM($$divI)
+ ldo -1(arg1),temp /* is there at most one bit set ? */
+ and,<> arg1,temp,r0 /* if not, don't use power of 2 divide */
+ addi,> 0,arg1,r0 /* if divisor > 0, use power of 2 divide */
+ b,n LREF(neg_denom)
+LSYM(pow2)
+ addi,>= 0,arg0,retreg /* if numerator is negative, add the */
+ add arg0,temp,retreg /* (denominaotr -1) to correct for shifts */
+ extru,= arg1,15,16,temp /* test denominator with 0xffff0000 */
+ extrs retreg,15,16,retreg /* retreg = retreg >> 16 */
+ or arg1,temp,arg1 /* arg1 = arg1 | (arg1 >> 16) */
+ ldi 0xcc,temp1 /* setup 0xcc in temp1 */
+ extru,= arg1,23,8,temp /* test denominator with 0xff00 */
+ extrs retreg,23,24,retreg /* retreg = retreg >> 8 */
+ or arg1,temp,arg1 /* arg1 = arg1 | (arg1 >> 8) */
+ ldi 0xaa,temp /* setup 0xaa in temp */
+ extru,= arg1,27,4,r0 /* test denominator with 0xf0 */
+ extrs retreg,27,28,retreg /* retreg = retreg >> 4 */
+ and,= arg1,temp1,r0 /* test denominator with 0xcc */
+ extrs retreg,29,30,retreg /* retreg = retreg >> 2 */
+ and,= arg1,temp,r0 /* test denominator with 0xaa */
+ extrs retreg,30,31,retreg /* retreg = retreg >> 1 */
+ MILLIRETN
+LSYM(neg_denom)
+ addi,< 0,arg1,r0 /* if arg1 >= 0, it's not power of 2 */
+ b,n LREF(regular_seq)
+ sub r0,arg1,temp /* make denominator positive */
+ comb,=,n arg1,temp,LREF(regular_seq) /* test against 0x80000000 and 0 */
+ ldo -1(temp),retreg /* is there at most one bit set ? */
+ and,= temp,retreg,r0 /* if so, the denominator is power of 2 */
+ b,n LREF(regular_seq)
+ sub r0,arg0,retreg /* negate numerator */
+ comb,=,n arg0,retreg,LREF(regular_seq) /* test against 0x80000000 */
+ copy retreg,arg0 /* set up arg0, arg1 and temp */
+ copy temp,arg1 /* before branching to pow2 */
+ b LREF(pow2)
+ ldo -1(arg1),temp
+LSYM(regular_seq)
+ comib,>>=,n 15,arg1,LREF(small_divisor)
+ add,>= 0,arg0,retreg /* move dividend, if retreg < 0, */
+LSYM(normal)
+ subi 0,retreg,retreg /* make it positive */
+ sub 0,arg1,temp /* clear carry, */
+ /* negate the divisor */
+ ds 0,temp,0 /* set V-bit to the comple- */
+ /* ment of the divisor sign */
+ add retreg,retreg,retreg /* shift msb bit into carry */
+ ds r0,arg1,temp /* 1st divide step, if no carry */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 2nd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 3rd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 4th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 5th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 6th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 7th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 8th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 9th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 10th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 11th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 12th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 13th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 14th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 15th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 16th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 17th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 18th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 19th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 20th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 21st divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 22nd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 23rd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 24th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 25th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 26th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 27th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 28th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 29th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 30th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 31st divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 32nd divide step, */
+ addc retreg,retreg,retreg /* shift last retreg bit into retreg */
+ xor,>= arg0,arg1,0 /* get correct sign of quotient */
+ sub 0,retreg,retreg /* based on operand signs */
+ MILLIRETN
+ nop
+
+LSYM(small_divisor)
+
+#if defined(pa64)
+/* Clear the upper 32 bits of the arg1 register. We are working with */
+/* small divisors (and 32-bit integers) We must not be mislead */
+/* by "1" bits left in the upper 32 bits. */
+ depd %r0,31,32,%r25
+#endif
+ blr,n arg1,r0
+ nop
+/* table for divisor == 0,1, ... ,15 */
+ addit,= 0,arg1,r0 /* trap if divisor == 0 */
+ nop
+ MILLIRET /* divisor == 1 */
+ copy arg0,retreg
+ MILLI_BEN($$divI_2) /* divisor == 2 */
+ nop
+ MILLI_BEN($$divI_3) /* divisor == 3 */
+ nop
+ MILLI_BEN($$divI_4) /* divisor == 4 */
+ nop
+ MILLI_BEN($$divI_5) /* divisor == 5 */
+ nop
+ MILLI_BEN($$divI_6) /* divisor == 6 */
+ nop
+ MILLI_BEN($$divI_7) /* divisor == 7 */
+ nop
+ MILLI_BEN($$divI_8) /* divisor == 8 */
+ nop
+ MILLI_BEN($$divI_9) /* divisor == 9 */
+ nop
+ MILLI_BEN($$divI_10) /* divisor == 10 */
+ nop
+ b LREF(normal) /* divisor == 11 */
+ add,>= 0,arg0,retreg
+ MILLI_BEN($$divI_12) /* divisor == 12 */
+ nop
+ b LREF(normal) /* divisor == 13 */
+ add,>= 0,arg0,retreg
+ MILLI_BEN($$divI_14) /* divisor == 14 */
+ nop
+ MILLI_BEN($$divI_15) /* divisor == 15 */
+ nop
+
+LSYM(negative1)
+ sub 0,arg0,retreg /* result is negation of dividend */
+ MILLIRET
+ addo arg0,arg1,r0 /* trap iff dividend==0x80000000 && divisor==-1 */
+ .exit
+ .procend
+ .end
+#endif
+
+#ifdef L_divU
+/* ROUTINE: $$divU
+ .
+ . Single precision divide for unsigned integers.
+ .
+ . Quotient is truncated towards zero.
+ . Traps on divide by zero.
+
+ INPUT REGISTERS:
+ . arg0 == dividend
+ . arg1 == divisor
+ . mrp == return pc
+ . sr0 == return space when called externally
+
+ OUTPUT REGISTERS:
+ . arg0 = undefined
+ . arg1 = undefined
+ . ret1 = quotient
+
+ OTHER REGISTERS AFFECTED:
+ . r1 = undefined
+
+ SIDE EFFECTS:
+ . Causes a trap under the following conditions:
+ . divisor is zero
+ . Changes memory at the following places:
+ . NONE
+
+ PERMISSIBLE CONTEXT:
+ . Unwindable.
+ . Does not create a stack frame.
+ . Suitable for internal or external millicode.
+ . Assumes the special millicode register conventions.
+
+ DISCUSSION:
+ . Branchs to other millicode routines using BE:
+ . $$divU_# for 3,5,6,7,9,10,12,14,15
+ .
+ . For selected small divisors calls the special divide by constant
+ . routines written by Karl Pettis. These are: 3,5,6,7,9,10,12,14,15. */
+
+RDEFINE(temp,r1)
+RDEFINE(retreg,ret1) /* r29 */
+RDEFINE(temp1,arg0)
+ SUBSPA_MILLI_DIV
+ ATTR_MILLI
+ .export $$divU,millicode
+ .import $$divU_3,millicode
+ .import $$divU_5,millicode
+ .import $$divU_6,millicode
+ .import $$divU_7,millicode
+ .import $$divU_9,millicode
+ .import $$divU_10,millicode
+ .import $$divU_12,millicode
+ .import $$divU_14,millicode
+ .import $$divU_15,millicode
+ .proc
+ .callinfo millicode
+ .entry
+GSYM($$divU)
+/* The subtract is not nullified since it does no harm and can be used
+ by the two cases that branch back to "normal". */
+ ldo -1(arg1),temp /* is there at most one bit set ? */
+ and,= arg1,temp,r0 /* if so, denominator is power of 2 */
+ b LREF(regular_seq)
+ addit,= 0,arg1,0 /* trap for zero dvr */
+ copy arg0,retreg
+ extru,= arg1,15,16,temp /* test denominator with 0xffff0000 */
+ extru retreg,15,16,retreg /* retreg = retreg >> 16 */
+ or arg1,temp,arg1 /* arg1 = arg1 | (arg1 >> 16) */
+ ldi 0xcc,temp1 /* setup 0xcc in temp1 */
+ extru,= arg1,23,8,temp /* test denominator with 0xff00 */
+ extru retreg,23,24,retreg /* retreg = retreg >> 8 */
+ or arg1,temp,arg1 /* arg1 = arg1 | (arg1 >> 8) */
+ ldi 0xaa,temp /* setup 0xaa in temp */
+ extru,= arg1,27,4,r0 /* test denominator with 0xf0 */
+ extru retreg,27,28,retreg /* retreg = retreg >> 4 */
+ and,= arg1,temp1,r0 /* test denominator with 0xcc */
+ extru retreg,29,30,retreg /* retreg = retreg >> 2 */
+ and,= arg1,temp,r0 /* test denominator with 0xaa */
+ extru retreg,30,31,retreg /* retreg = retreg >> 1 */
+ MILLIRETN
+ nop
+LSYM(regular_seq)
+ comib,>= 15,arg1,LREF(special_divisor)
+ subi 0,arg1,temp /* clear carry, negate the divisor */
+ ds r0,temp,r0 /* set V-bit to 1 */
+LSYM(normal)
+ add arg0,arg0,retreg /* shift msb bit into carry */
+ ds r0,arg1,temp /* 1st divide step, if no carry */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 2nd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 3rd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 4th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 5th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 6th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 7th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 8th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 9th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 10th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 11th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 12th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 13th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 14th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 15th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 16th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 17th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 18th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 19th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 20th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 21st divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 22nd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 23rd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 24th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 25th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 26th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 27th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 28th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 29th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 30th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 31st divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds temp,arg1,temp /* 32nd divide step, */
+ MILLIRET
+ addc retreg,retreg,retreg /* shift last retreg bit into retreg */
+
+/* Handle the cases where divisor is a small constant or has high bit on. */
+LSYM(special_divisor)
+/* blr arg1,r0 */
+/* comib,>,n 0,arg1,LREF(big_divisor) ; nullify previous instruction */
+
+/* Pratap 8/13/90. The 815 Stirling chip set has a bug that prevents us from
+ generating such a blr, comib sequence. A problem in nullification. So I
+ rewrote this code. */
+
+#if defined(pa64)
+/* Clear the upper 32 bits of the arg1 register. We are working with
+ small divisors (and 32-bit unsigned integers) We must not be mislead
+ by "1" bits left in the upper 32 bits. */
+ depd %r0,31,32,%r25
+#endif
+ comib,> 0,arg1,LREF(big_divisor)
+ nop
+ blr arg1,r0
+ nop
+
+LSYM(zero_divisor) /* this label is here to provide external visibility */
+ addit,= 0,arg1,0 /* trap for zero dvr */
+ nop
+ MILLIRET /* divisor == 1 */
+ copy arg0,retreg
+ MILLIRET /* divisor == 2 */
+ extru arg0,30,31,retreg
+ MILLI_BEN($$divU_3) /* divisor == 3 */
+ nop
+ MILLIRET /* divisor == 4 */
+ extru arg0,29,30,retreg
+ MILLI_BEN($$divU_5) /* divisor == 5 */
+ nop
+ MILLI_BEN($$divU_6) /* divisor == 6 */
+ nop
+ MILLI_BEN($$divU_7) /* divisor == 7 */
+ nop
+ MILLIRET /* divisor == 8 */
+ extru arg0,28,29,retreg
+ MILLI_BEN($$divU_9) /* divisor == 9 */
+ nop
+ MILLI_BEN($$divU_10) /* divisor == 10 */
+ nop
+ b LREF(normal) /* divisor == 11 */
+ ds r0,temp,r0 /* set V-bit to 1 */
+ MILLI_BEN($$divU_12) /* divisor == 12 */
+ nop
+ b LREF(normal) /* divisor == 13 */
+ ds r0,temp,r0 /* set V-bit to 1 */
+ MILLI_BEN($$divU_14) /* divisor == 14 */
+ nop
+ MILLI_BEN($$divU_15) /* divisor == 15 */
+ nop
+
+/* Handle the case where the high bit is on in the divisor.
+ Compute: if( dividend>=divisor) quotient=1; else quotient=0;
+ Note: dividend>==divisor iff dividend-divisor does not borrow
+ and not borrow iff carry. */
+LSYM(big_divisor)
+ sub arg0,arg1,r0
+ MILLIRET
+ addc r0,r0,retreg
+ .exit
+ .procend
+ .end
+#endif
+
+#ifdef L_remI
+/* ROUTINE: $$remI
+
+ DESCRIPTION:
+ . $$remI returns the remainder of the division of two signed 32-bit
+ . integers. The sign of the remainder is the same as the sign of
+ . the dividend.
+
+
+ INPUT REGISTERS:
+ . arg0 == dividend
+ . arg1 == divisor
+ . mrp == return pc
+ . sr0 == return space when called externally
+
+ OUTPUT REGISTERS:
+ . arg0 = destroyed
+ . arg1 = destroyed
+ . ret1 = remainder
+
+ OTHER REGISTERS AFFECTED:
+ . r1 = undefined
+
+ SIDE EFFECTS:
+ . Causes a trap under the following conditions: DIVIDE BY ZERO
+ . Changes memory at the following places: NONE
+
+ PERMISSIBLE CONTEXT:
+ . Unwindable
+ . Does not create a stack frame
+ . Is usable for internal or external microcode
+
+ DISCUSSION:
+ . Calls other millicode routines via mrp: NONE
+ . Calls other millicode routines: NONE */
+
+RDEFINE(tmp,r1)
+RDEFINE(retreg,ret1)
+
+ SUBSPA_MILLI
+ ATTR_MILLI
+ .proc
+ .callinfo millicode
+ .entry
+GSYM($$remI)
+GSYM($$remoI)
+ .export $$remI,MILLICODE
+ .export $$remoI,MILLICODE
+ ldo -1(arg1),tmp /* is there at most one bit set ? */
+ and,<> arg1,tmp,r0 /* if not, don't use power of 2 */
+ addi,> 0,arg1,r0 /* if denominator > 0, use power */
+ /* of 2 */
+ b,n LREF(neg_denom)
+LSYM(pow2)
+ comb,>,n 0,arg0,LREF(neg_num) /* is numerator < 0 ? */
+ and arg0,tmp,retreg /* get the result */
+ MILLIRETN
+LSYM(neg_num)
+ subi 0,arg0,arg0 /* negate numerator */
+ and arg0,tmp,retreg /* get the result */
+ subi 0,retreg,retreg /* negate result */
+ MILLIRETN
+LSYM(neg_denom)
+ addi,< 0,arg1,r0 /* if arg1 >= 0, it's not power */
+ /* of 2 */
+ b,n LREF(regular_seq)
+ sub r0,arg1,tmp /* make denominator positive */
+ comb,=,n arg1,tmp,LREF(regular_seq) /* test against 0x80000000 and 0 */
+ ldo -1(tmp),retreg /* is there at most one bit set ? */
+ and,= tmp,retreg,r0 /* if not, go to regular_seq */
+ b,n LREF(regular_seq)
+ comb,>,n 0,arg0,LREF(neg_num_2) /* if arg0 < 0, negate it */
+ and arg0,retreg,retreg
+ MILLIRETN
+LSYM(neg_num_2)
+ subi 0,arg0,tmp /* test against 0x80000000 */
+ and tmp,retreg,retreg
+ subi 0,retreg,retreg
+ MILLIRETN
+LSYM(regular_seq)
+ addit,= 0,arg1,0 /* trap if div by zero */
+ add,>= 0,arg0,retreg /* move dividend, if retreg < 0, */
+ sub 0,retreg,retreg /* make it positive */
+ sub 0,arg1, tmp /* clear carry, */
+ /* negate the divisor */
+ ds 0, tmp,0 /* set V-bit to the comple- */
+ /* ment of the divisor sign */
+ or 0,0, tmp /* clear tmp */
+ add retreg,retreg,retreg /* shift msb bit into carry */
+ ds tmp,arg1, tmp /* 1st divide step, if no carry */
+ /* out, msb of quotient = 0 */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+LSYM(t1)
+ ds tmp,arg1, tmp /* 2nd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 3rd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 4th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 5th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 6th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 7th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 8th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 9th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 10th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 11th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 12th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 13th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 14th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 15th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 16th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 17th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 18th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 19th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 20th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 21st divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 22nd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 23rd divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 24th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 25th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 26th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 27th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 28th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 29th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 30th divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 31st divide step */
+ addc retreg,retreg,retreg /* shift retreg with/into carry */
+ ds tmp,arg1, tmp /* 32nd divide step, */
+ addc retreg,retreg,retreg /* shift last bit into retreg */
+ movb,>=,n tmp,retreg,LREF(finish) /* branch if pos. tmp */
+ add,< arg1,0,0 /* if arg1 > 0, add arg1 */
+ add,tr tmp,arg1,retreg /* for correcting remainder tmp */
+ sub tmp,arg1,retreg /* else add absolute value arg1 */
+LSYM(finish)
+ add,>= arg0,0,0 /* set sign of remainder */
+ sub 0,retreg,retreg /* to sign of dividend */
+ MILLIRET
+ nop
+ .exit
+ .procend
+#ifdef milliext
+ .origin 0x00000200
+#endif
+ .end
+#endif
+
+#ifdef L_remU
+/* ROUTINE: $$remU
+ . Single precision divide for remainder with unsigned binary integers.
+ .
+ . The remainder must be dividend-(dividend/divisor)*divisor.
+ . Divide by zero is trapped.
+
+ INPUT REGISTERS:
+ . arg0 == dividend
+ . arg1 == divisor
+ . mrp == return pc
+ . sr0 == return space when called externally
+
+ OUTPUT REGISTERS:
+ . arg0 = undefined
+ . arg1 = undefined
+ . ret1 = remainder
+
+ OTHER REGISTERS AFFECTED:
+ . r1 = undefined
+
+ SIDE EFFECTS:
+ . Causes a trap under the following conditions: DIVIDE BY ZERO
+ . Changes memory at the following places: NONE
+
+ PERMISSIBLE CONTEXT:
+ . Unwindable.
+ . Does not create a stack frame.
+ . Suitable for internal or external millicode.
+ . Assumes the special millicode register conventions.
+
+ DISCUSSION:
+ . Calls other millicode routines using mrp: NONE
+ . Calls other millicode routines: NONE */
+
+
+RDEFINE(temp,r1)
+RDEFINE(rmndr,ret1) /* r29 */
+ SUBSPA_MILLI
+ ATTR_MILLI
+ .export $$remU,millicode
+ .proc
+ .callinfo millicode
+ .entry
+GSYM($$remU)
+ ldo -1(arg1),temp /* is there at most one bit set ? */
+ and,= arg1,temp,r0 /* if not, don't use power of 2 */
+ b LREF(regular_seq)
+ addit,= 0,arg1,r0 /* trap on div by zero */
+ and arg0,temp,rmndr /* get the result for power of 2 */
+ MILLIRETN
+LSYM(regular_seq)
+ comib,>=,n 0,arg1,LREF(special_case)
+ subi 0,arg1,rmndr /* clear carry, negate the divisor */
+ ds r0,rmndr,r0 /* set V-bit to 1 */
+ add arg0,arg0,temp /* shift msb bit into carry */
+ ds r0,arg1,rmndr /* 1st divide step, if no carry */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 2nd divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 3rd divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 4th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 5th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 6th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 7th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 8th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 9th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 10th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 11th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 12th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 13th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 14th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 15th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 16th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 17th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 18th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 19th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 20th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 21st divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 22nd divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 23rd divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 24th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 25th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 26th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 27th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 28th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 29th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 30th divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 31st divide step */
+ addc temp,temp,temp /* shift temp with/into carry */
+ ds rmndr,arg1,rmndr /* 32nd divide step, */
+ comiclr,<= 0,rmndr,r0
+ add rmndr,arg1,rmndr /* correction */
+ MILLIRETN
+ nop
+
+/* Putting >= on the last DS and deleting COMICLR does not work! */
+LSYM(special_case)
+ sub,>>= arg0,arg1,rmndr
+ copy arg0,rmndr
+ MILLIRETN
+ nop
+ .exit
+ .procend
+ .end
+#endif
+
+#ifdef L_div_const
+/* ROUTINE: $$divI_2
+ . $$divI_3 $$divU_3
+ . $$divI_4
+ . $$divI_5 $$divU_5
+ . $$divI_6 $$divU_6
+ . $$divI_7 $$divU_7
+ . $$divI_8
+ . $$divI_9 $$divU_9
+ . $$divI_10 $$divU_10
+ .
+ . $$divI_12 $$divU_12
+ .
+ . $$divI_14 $$divU_14
+ . $$divI_15 $$divU_15
+ . $$divI_16
+ . $$divI_17 $$divU_17
+ .
+ . Divide by selected constants for single precision binary integers.
+
+ INPUT REGISTERS:
+ . arg0 == dividend
+ . mrp == return pc
+ . sr0 == return space when called externally
+
+ OUTPUT REGISTERS:
+ . arg0 = undefined
+ . arg1 = undefined
+ . ret1 = quotient
+
+ OTHER REGISTERS AFFECTED:
+ . r1 = undefined
+
+ SIDE EFFECTS:
+ . Causes a trap under the following conditions: NONE
+ . Changes memory at the following places: NONE
+
+ PERMISSIBLE CONTEXT:
+ . Unwindable.
+ . Does not create a stack frame.
+ . Suitable for internal or external millicode.
+ . Assumes the special millicode register conventions.
+
+ DISCUSSION:
+ . Calls other millicode routines using mrp: NONE
+ . Calls other millicode routines: NONE */
+
+
+/* TRUNCATED DIVISION BY SMALL INTEGERS
+
+ We are interested in q(x) = floor(x/y), where x >= 0 and y > 0
+ (with y fixed).
+
+ Let a = floor(z/y), for some choice of z. Note that z will be
+ chosen so that division by z is cheap.
+
+ Let r be the remainder(z/y). In other words, r = z - ay.
+
+ Now, our method is to choose a value for b such that
+
+ q'(x) = floor((ax+b)/z)
+
+ is equal to q(x) over as large a range of x as possible. If the
+ two are equal over a sufficiently large range, and if it is easy to
+ form the product (ax), and it is easy to divide by z, then we can
+ perform the division much faster than the general division algorithm.
+
+ So, we want the following to be true:
+
+ . For x in the following range:
+ .
+ . ky <= x < (k+1)y
+ .
+ . implies that
+ .
+ . k <= (ax+b)/z < (k+1)
+
+ We want to determine b such that this is true for all k in the
+ range {0..K} for some maximum K.
+
+ Since (ax+b) is an increasing function of x, we can take each
+ bound separately to determine the "best" value for b.
+
+ (ax+b)/z < (k+1) implies
+
+ (a((k+1)y-1)+b < (k+1)z implies
+
+ b < a + (k+1)(z-ay) implies
+
+ b < a + (k+1)r
+
+ This needs to be true for all k in the range {0..K}. In
+ particular, it is true for k = 0 and this leads to a maximum
+ acceptable value for b.
+
+ b < a+r or b <= a+r-1
+
+ Taking the other bound, we have
+
+ k <= (ax+b)/z implies
+
+ k <= (aky+b)/z implies
+
+ k(z-ay) <= b implies
+
+ kr <= b
+
+ Clearly, the largest range for k will be achieved by maximizing b,
+ when r is not zero. When r is zero, then the simplest choice for b
+ is 0. When r is not 0, set
+
+ . b = a+r-1
+
+ Now, by construction, q'(x) = floor((ax+b)/z) = q(x) = floor(x/y)
+ for all x in the range:
+
+ . 0 <= x < (K+1)y
+
+ We need to determine what K is. Of our two bounds,
+
+ . b < a+(k+1)r is satisfied for all k >= 0, by construction.
+
+ The other bound is
+
+ . kr <= b
+
+ This is always true if r = 0. If r is not 0 (the usual case), then
+ K = floor((a+r-1)/r), is the maximum value for k.
+
+ Therefore, the formula q'(x) = floor((ax+b)/z) yields the correct
+ answer for q(x) = floor(x/y) when x is in the range
+
+ (0,(K+1)y-1) K = floor((a+r-1)/r)
+
+ To be most useful, we want (K+1)y-1 = (max x) >= 2**32-1 so that
+ the formula for q'(x) yields the correct value of q(x) for all x
+ representable by a single word in HPPA.
+
+ We are also constrained in that computing the product (ax), adding
+ b, and dividing by z must all be done quickly, otherwise we will be
+ better off going through the general algorithm using the DS
+ instruction, which uses approximately 70 cycles.
+
+ For each y, there is a choice of z which satisfies the constraints
+ for (K+1)y >= 2**32. We may not, however, be able to satisfy the
+ timing constraints for arbitrary y. It seems that z being equal to
+ a power of 2 or a power of 2 minus 1 is as good as we can do, since
+ it minimizes the time to do division by z. We want the choice of z
+ to also result in a value for (a) that minimizes the computation of
+ the product (ax). This is best achieved if (a) has a regular bit
+ pattern (so the multiplication can be done with shifts and adds).
+ The value of (a) also needs to be less than 2**32 so the product is
+ always guaranteed to fit in 2 words.
+
+ In actual practice, the following should be done:
+
+ 1) For negative x, you should take the absolute value and remember
+ . the fact so that the result can be negated. This obviously does
+ . not apply in the unsigned case.
+ 2) For even y, you should factor out the power of 2 that divides y
+ . and divide x by it. You can then proceed by dividing by the
+ . odd factor of y.
+
+ Here is a table of some odd values of y, and corresponding choices
+ for z which are "good".
+
+ y z r a (hex) max x (hex)
+
+ 3 2**32 1 55555555 100000001
+ 5 2**32 1 33333333 100000003
+ 7 2**24-1 0 249249 (infinite)
+ 9 2**24-1 0 1c71c7 (infinite)
+ 11 2**20-1 0 1745d (infinite)
+ 13 2**24-1 0 13b13b (infinite)
+ 15 2**32 1 11111111 10000000d
+ 17 2**32 1 f0f0f0f 10000000f
+
+ If r is 1, then b = a+r-1 = a. This simplifies the computation
+ of (ax+b), since you can compute (x+1)(a) instead. If r is 0,
+ then b = 0 is ok to use which simplifies (ax+b).
+
+ The bit patterns for 55555555, 33333333, and 11111111 are obviously
+ very regular. The bit patterns for the other values of a above are:
+
+ y (hex) (binary)
+
+ 7 249249 001001001001001001001001 << regular >>
+ 9 1c71c7 000111000111000111000111 << regular >>
+ 11 1745d 000000010111010001011101 << irregular >>
+ 13 13b13b 000100111011000100111011 << irregular >>
+
+ The bit patterns for (a) corresponding to (y) of 11 and 13 may be
+ too irregular to warrant using this method.
+
+ When z is a power of 2 minus 1, then the division by z is slightly
+ more complicated, involving an iterative solution.
+
+ The code presented here solves division by 1 through 17, except for
+ 11 and 13. There are algorithms for both signed and unsigned
+ quantities given.
+
+ TIMINGS (cycles)
+
+ divisor positive negative unsigned
+
+ . 1 2 2 2
+ . 2 4 4 2
+ . 3 19 21 19
+ . 4 4 4 2
+ . 5 18 22 19
+ . 6 19 22 19
+ . 8 4 4 2
+ . 10 18 19 17
+ . 12 18 20 18
+ . 15 16 18 16
+ . 16 4 4 2
+ . 17 16 18 16
+
+ Now, the algorithm for 7, 9, and 14 is an iterative one. That is,
+ a loop body is executed until the tentative quotient is 0. The
+ number of times the loop body is executed varies depending on the
+ dividend, but is never more than two times. If the dividend is
+ less than the divisor, then the loop body is not executed at all.
+ Each iteration adds 4 cycles to the timings.
+
+ divisor positive negative unsigned
+
+ . 7 19+4n 20+4n 20+4n n = number of iterations
+ . 9 21+4n 22+4n 21+4n
+ . 14 21+4n 22+4n 20+4n
+
+ To give an idea of how the number of iterations varies, here is a
+ table of dividend versus number of iterations when dividing by 7.
+
+ smallest largest required
+ dividend dividend iterations
+
+ . 0 6 0
+ . 7 0x6ffffff 1
+ 0x1000006 0xffffffff 2
+
+ There is some overlap in the range of numbers requiring 1 and 2
+ iterations. */
+
+RDEFINE(t2,r1)
+RDEFINE(x2,arg0) /* r26 */
+RDEFINE(t1,arg1) /* r25 */
+RDEFINE(x1,ret1) /* r29 */
+
+ SUBSPA_MILLI_DIV
+ ATTR_MILLI
+
+ .proc
+ .callinfo millicode
+ .entry
+/* NONE of these routines require a stack frame
+ ALL of these routines are unwindable from millicode */
+
+GSYM($$divide_by_constant)
+ .export $$divide_by_constant,millicode
+/* Provides a "nice" label for the code covered by the unwind descriptor
+ for things like gprof. */
+
+/* DIVISION BY 2 (shift by 1) */
+GSYM($$divI_2)
+ .export $$divI_2,millicode
+ comclr,>= arg0,0,0
+ addi 1,arg0,arg0
+ MILLIRET
+ extrs arg0,30,31,ret1
+
+
+/* DIVISION BY 4 (shift by 2) */
+GSYM($$divI_4)
+ .export $$divI_4,millicode
+ comclr,>= arg0,0,0
+ addi 3,arg0,arg0
+ MILLIRET
+ extrs arg0,29,30,ret1
+
+
+/* DIVISION BY 8 (shift by 3) */
+GSYM($$divI_8)
+ .export $$divI_8,millicode
+ comclr,>= arg0,0,0
+ addi 7,arg0,arg0
+ MILLIRET
+ extrs arg0,28,29,ret1
+
+/* DIVISION BY 16 (shift by 4) */
+GSYM($$divI_16)
+ .export $$divI_16,millicode
+ comclr,>= arg0,0,0
+ addi 15,arg0,arg0
+ MILLIRET
+ extrs arg0,27,28,ret1
+
+/****************************************************************************
+*
+* DIVISION BY DIVISORS OF FFFFFFFF, and powers of 2 times these
+*
+* includes 3,5,15,17 and also 6,10,12
+*
+****************************************************************************/
+
+/* DIVISION BY 3 (use z = 2**32; a = 55555555) */
+
+GSYM($$divI_3)
+ .export $$divI_3,millicode
+ comb,<,N x2,0,LREF(neg3)
+
+ addi 1,x2,x2 /* this cannot overflow */
+ extru x2,1,2,x1 /* multiply by 5 to get started */
+ sh2add x2,x2,x2
+ b LREF(pos)
+ addc x1,0,x1
+
+LSYM(neg3)
+ subi 1,x2,x2 /* this cannot overflow */
+ extru x2,1,2,x1 /* multiply by 5 to get started */
+ sh2add x2,x2,x2
+ b LREF(neg)
+ addc x1,0,x1
+
+GSYM($$divU_3)
+ .export $$divU_3,millicode
+ addi 1,x2,x2 /* this CAN overflow */
+ addc 0,0,x1
+ shd x1,x2,30,t1 /* multiply by 5 to get started */
+ sh2add x2,x2,x2
+ b LREF(pos)
+ addc x1,t1,x1
+
+/* DIVISION BY 5 (use z = 2**32; a = 33333333) */
+
+GSYM($$divI_5)
+ .export $$divI_5,millicode
+ comb,<,N x2,0,LREF(neg5)
+
+ addi 3,x2,t1 /* this cannot overflow */
+ sh1add x2,t1,x2 /* multiply by 3 to get started */
+ b LREF(pos)
+ addc 0,0,x1
+
+LSYM(neg5)
+ sub 0,x2,x2 /* negate x2 */
+ addi 1,x2,x2 /* this cannot overflow */
+ shd 0,x2,31,x1 /* get top bit (can be 1) */
+ sh1add x2,x2,x2 /* multiply by 3 to get started */
+ b LREF(neg)
+ addc x1,0,x1
+
+GSYM($$divU_5)
+ .export $$divU_5,millicode
+ addi 1,x2,x2 /* this CAN overflow */
+ addc 0,0,x1
+ shd x1,x2,31,t1 /* multiply by 3 to get started */
+ sh1add x2,x2,x2
+ b LREF(pos)
+ addc t1,x1,x1
+
+/* DIVISION BY 6 (shift to divide by 2 then divide by 3) */
+GSYM($$divI_6)
+ .export $$divI_6,millicode
+ comb,<,N x2,0,LREF(neg6)
+ extru x2,30,31,x2 /* divide by 2 */
+ addi 5,x2,t1 /* compute 5*(x2+1) = 5*x2+5 */
+ sh2add x2,t1,x2 /* multiply by 5 to get started */
+ b LREF(pos)
+ addc 0,0,x1
+
+LSYM(neg6)
+ subi 2,x2,x2 /* negate, divide by 2, and add 1 */
+ /* negation and adding 1 are done */
+ /* at the same time by the SUBI */
+ extru x2,30,31,x2
+ shd 0,x2,30,x1
+ sh2add x2,x2,x2 /* multiply by 5 to get started */
+ b LREF(neg)
+ addc x1,0,x1
+
+GSYM($$divU_6)
+ .export $$divU_6,millicode
+ extru x2,30,31,x2 /* divide by 2 */
+ addi 1,x2,x2 /* cannot carry */
+ shd 0,x2,30,x1 /* multiply by 5 to get started */
+ sh2add x2,x2,x2
+ b LREF(pos)
+ addc x1,0,x1
+
+/* DIVISION BY 10 (shift to divide by 2 then divide by 5) */
+GSYM($$divU_10)
+ .export $$divU_10,millicode
+ extru x2,30,31,x2 /* divide by 2 */
+ addi 3,x2,t1 /* compute 3*(x2+1) = (3*x2)+3 */
+ sh1add x2,t1,x2 /* multiply by 3 to get started */
+ addc 0,0,x1
+LSYM(pos)
+ shd x1,x2,28,t1 /* multiply by 0x11 */
+ shd x2,0,28,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+LSYM(pos_for_17)
+ shd x1,x2,24,t1 /* multiply by 0x101 */
+ shd x2,0,24,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+
+ shd x1,x2,16,t1 /* multiply by 0x10001 */
+ shd x2,0,16,t2
+ add x2,t2,x2
+ MILLIRET
+ addc x1,t1,x1
+
+GSYM($$divI_10)
+ .export $$divI_10,millicode
+ comb,< x2,0,LREF(neg10)
+ copy 0,x1
+ extru x2,30,31,x2 /* divide by 2 */
+ addib,TR 1,x2,LREF(pos) /* add 1 (cannot overflow) */
+ sh1add x2,x2,x2 /* multiply by 3 to get started */
+
+LSYM(neg10)
+ subi 2,x2,x2 /* negate, divide by 2, and add 1 */
+ /* negation and adding 1 are done */
+ /* at the same time by the SUBI */
+ extru x2,30,31,x2
+ sh1add x2,x2,x2 /* multiply by 3 to get started */
+LSYM(neg)
+ shd x1,x2,28,t1 /* multiply by 0x11 */
+ shd x2,0,28,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+LSYM(neg_for_17)
+ shd x1,x2,24,t1 /* multiply by 0x101 */
+ shd x2,0,24,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+
+ shd x1,x2,16,t1 /* multiply by 0x10001 */
+ shd x2,0,16,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+ MILLIRET
+ sub 0,x1,x1
+
+/* DIVISION BY 12 (shift to divide by 4 then divide by 3) */
+GSYM($$divI_12)
+ .export $$divI_12,millicode
+ comb,< x2,0,LREF(neg12)
+ copy 0,x1
+ extru x2,29,30,x2 /* divide by 4 */
+ addib,tr 1,x2,LREF(pos) /* compute 5*(x2+1) = 5*x2+5 */
+ sh2add x2,x2,x2 /* multiply by 5 to get started */
+
+LSYM(neg12)
+ subi 4,x2,x2 /* negate, divide by 4, and add 1 */
+ /* negation and adding 1 are done */
+ /* at the same time by the SUBI */
+ extru x2,29,30,x2
+ b LREF(neg)
+ sh2add x2,x2,x2 /* multiply by 5 to get started */
+
+GSYM($$divU_12)
+ .export $$divU_12,millicode
+ extru x2,29,30,x2 /* divide by 4 */
+ addi 5,x2,t1 /* cannot carry */
+ sh2add x2,t1,x2 /* multiply by 5 to get started */
+ b LREF(pos)
+ addc 0,0,x1
+
+/* DIVISION BY 15 (use z = 2**32; a = 11111111) */
+GSYM($$divI_15)
+ .export $$divI_15,millicode
+ comb,< x2,0,LREF(neg15)
+ copy 0,x1
+ addib,tr 1,x2,LREF(pos)+4
+ shd x1,x2,28,t1
+
+LSYM(neg15)
+ b LREF(neg)
+ subi 1,x2,x2
+
+GSYM($$divU_15)
+ .export $$divU_15,millicode
+ addi 1,x2,x2 /* this CAN overflow */
+ b LREF(pos)
+ addc 0,0,x1
+
+/* DIVISION BY 17 (use z = 2**32; a = f0f0f0f) */
+GSYM($$divI_17)
+ .export $$divI_17,millicode
+ comb,<,n x2,0,LREF(neg17)
+ addi 1,x2,x2 /* this cannot overflow */
+ shd 0,x2,28,t1 /* multiply by 0xf to get started */
+ shd x2,0,28,t2
+ sub t2,x2,x2
+ b LREF(pos_for_17)
+ subb t1,0,x1
+
+LSYM(neg17)
+ subi 1,x2,x2 /* this cannot overflow */
+ shd 0,x2,28,t1 /* multiply by 0xf to get started */
+ shd x2,0,28,t2
+ sub t2,x2,x2
+ b LREF(neg_for_17)
+ subb t1,0,x1
+
+GSYM($$divU_17)
+ .export $$divU_17,millicode
+ addi 1,x2,x2 /* this CAN overflow */
+ addc 0,0,x1
+ shd x1,x2,28,t1 /* multiply by 0xf to get started */
+LSYM(u17)
+ shd x2,0,28,t2
+ sub t2,x2,x2
+ b LREF(pos_for_17)
+ subb t1,x1,x1
+
+
+/* DIVISION BY DIVISORS OF FFFFFF, and powers of 2 times these
+ includes 7,9 and also 14
+
+
+ z = 2**24-1
+ r = z mod x = 0
+
+ so choose b = 0
+
+ Also, in order to divide by z = 2**24-1, we approximate by dividing
+ by (z+1) = 2**24 (which is easy), and then correcting.
+
+ (ax) = (z+1)q' + r
+ . = zq' + (q'+r)
+
+ So to compute (ax)/z, compute q' = (ax)/(z+1) and r = (ax) mod (z+1)
+ Then the true remainder of (ax)/z is (q'+r). Repeat the process
+ with this new remainder, adding the tentative quotients together,
+ until a tentative quotient is 0 (and then we are done). There is
+ one last correction to be done. It is possible that (q'+r) = z.
+ If so, then (q'+r)/(z+1) = 0 and it looks like we are done. But,
+ in fact, we need to add 1 more to the quotient. Now, it turns
+ out that this happens if and only if the original value x is
+ an exact multiple of y. So, to avoid a three instruction test at
+ the end, instead use 1 instruction to add 1 to x at the beginning. */
+
+/* DIVISION BY 7 (use z = 2**24-1; a = 249249) */
+GSYM($$divI_7)
+ .export $$divI_7,millicode
+ comb,<,n x2,0,LREF(neg7)
+LSYM(7)
+ addi 1,x2,x2 /* cannot overflow */
+ shd 0,x2,29,x1
+ sh3add x2,x2,x2
+ addc x1,0,x1
+LSYM(pos7)
+ shd x1,x2,26,t1
+ shd x2,0,26,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+
+ shd x1,x2,20,t1
+ shd x2,0,20,t2
+ add x2,t2,x2
+ addc x1,t1,t1
+
+ /* computed <t1,x2>. Now divide it by (2**24 - 1) */
+
+ copy 0,x1
+ shd,= t1,x2,24,t1 /* tentative quotient */
+LSYM(1)
+ addb,tr t1,x1,LREF(2) /* add to previous quotient */
+ extru x2,31,24,x2 /* new remainder (unadjusted) */
+
+ MILLIRETN
+
+LSYM(2)
+ addb,tr t1,x2,LREF(1) /* adjust remainder */
+ extru,= x2,7,8,t1 /* new quotient */
+
+LSYM(neg7)
+ subi 1,x2,x2 /* negate x2 and add 1 */
+LSYM(8)
+ shd 0,x2,29,x1
+ sh3add x2,x2,x2
+ addc x1,0,x1
+
+LSYM(neg7_shift)
+ shd x1,x2,26,t1
+ shd x2,0,26,t2
+ add x2,t2,x2
+ addc x1,t1,x1
+
+ shd x1,x2,20,t1
+ shd x2,0,20,t2
+ add x2,t2,x2
+ addc x1,t1,t1
+
+ /* computed <t1,x2>. Now divide it by (2**24 - 1) */
+
+ copy 0,x1
+ shd,= t1,x2,24,t1 /* tentative quotient */
+LSYM(3)
+ addb,tr t1,x1,LREF(4) /* add to previous quotient */
+ extru x2,31,24,x2 /* new remainder (unadjusted) */
+
+ MILLIRET
+ sub 0,x1,x1 /* negate result */
+
+LSYM(4)
+ addb,tr t1,x2,LREF(3) /* adjust remainder */
+ extru,= x2,7,8,t1 /* new quotient */
+
+GSYM($$divU_7)
+ .export $$divU_7,millicode
+ addi 1,x2,x2 /* can carry */
+ addc 0,0,x1
+ shd x1,x2,29,t1
+ sh3add x2,x2,x2
+ b LREF(pos7)
+ addc t1,x1,x1
+
+/* DIVISION BY 9 (use z = 2**24-1; a = 1c71c7) */
+GSYM($$divI_9)
+ .export $$divI_9,millicode
+ comb,<,n x2,0,LREF(neg9)
+ addi 1,x2,x2 /* cannot overflow */
+ shd 0,x2,29,t1
+ shd x2,0,29,t2
+ sub t2,x2,x2
+ b LREF(pos7)
+ subb t1,0,x1
+
+LSYM(neg9)
+ subi 1,x2,x2 /* negate and add 1 */
+ shd 0,x2,29,t1
+ shd x2,0,29,t2
+ sub t2,x2,x2
+ b LREF(neg7_shift)
+ subb t1,0,x1
+
+GSYM($$divU_9)
+ .export $$divU_9,millicode
+ addi 1,x2,x2 /* can carry */
+ addc 0,0,x1
+ shd x1,x2,29,t1
+ shd x2,0,29,t2
+ sub t2,x2,x2
+ b LREF(pos7)
+ subb t1,x1,x1
+
+/* DIVISION BY 14 (shift to divide by 2 then divide by 7) */
+GSYM($$divI_14)
+ .export $$divI_14,millicode
+ comb,<,n x2,0,LREF(neg14)
+GSYM($$divU_14)
+ .export $$divU_14,millicode
+ b LREF(7) /* go to 7 case */
+ extru x2,30,31,x2 /* divide by 2 */
+
+LSYM(neg14)
+ subi 2,x2,x2 /* negate (and add 2) */
+ b LREF(8)
+ extru x2,30,31,x2 /* divide by 2 */
+ .exit
+ .procend
+ .end
+#endif
+
+#ifdef L_mulI
+/* VERSION "@(#)$$mulI $ Revision: 12.4 $ $ Date: 94/03/17 17:18:51 $" */
+/******************************************************************************
+This routine is used on PA2.0 processors when gcc -mno-fpregs is used
+
+ROUTINE: $$mulI
+
+
+DESCRIPTION:
+
+ $$mulI multiplies two single word integers, giving a single
+ word result.
+
+
+INPUT REGISTERS:
+
+ arg0 = Operand 1
+ arg1 = Operand 2
+ r31 == return pc
+ sr0 == return space when called externally
+
+
+OUTPUT REGISTERS:
+
+ arg0 = undefined
+ arg1 = undefined
+ ret1 = result
+
+OTHER REGISTERS AFFECTED:
+
+ r1 = undefined
+
+SIDE EFFECTS:
+
+ Causes a trap under the following conditions: NONE
+ Changes memory at the following places: NONE
+
+PERMISSIBLE CONTEXT:
+
+ Unwindable
+ Does not create a stack frame
+ Is usable for internal or external microcode
+
+DISCUSSION:
+
+ Calls other millicode routines via mrp: NONE
+ Calls other millicode routines: NONE
+
+***************************************************************************/
+
+
+#define a0 %arg0
+#define a1 %arg1
+#define t0 %r1
+#define r %ret1
+
+#define a0__128a0 zdep a0,24,25,a0
+#define a0__256a0 zdep a0,23,24,a0
+#define a1_ne_0_b_l0 comb,<> a1,0,LREF(l0)
+#define a1_ne_0_b_l1 comb,<> a1,0,LREF(l1)
+#define a1_ne_0_b_l2 comb,<> a1,0,LREF(l2)
+#define b_n_ret_t0 b,n LREF(ret_t0)
+#define b_e_shift b LREF(e_shift)
+#define b_e_t0ma0 b LREF(e_t0ma0)
+#define b_e_t0 b LREF(e_t0)
+#define b_e_t0a0 b LREF(e_t0a0)
+#define b_e_t02a0 b LREF(e_t02a0)
+#define b_e_t04a0 b LREF(e_t04a0)
+#define b_e_2t0 b LREF(e_2t0)
+#define b_e_2t0a0 b LREF(e_2t0a0)
+#define b_e_2t04a0 b LREF(e2t04a0)
+#define b_e_3t0 b LREF(e_3t0)
+#define b_e_4t0 b LREF(e_4t0)
+#define b_e_4t0a0 b LREF(e_4t0a0)
+#define b_e_4t08a0 b LREF(e4t08a0)
+#define b_e_5t0 b LREF(e_5t0)
+#define b_e_8t0 b LREF(e_8t0)
+#define b_e_8t0a0 b LREF(e_8t0a0)
+#define r__r_a0 add r,a0,r
+#define r__r_2a0 sh1add a0,r,r
+#define r__r_4a0 sh2add a0,r,r
+#define r__r_8a0 sh3add a0,r,r
+#define r__r_t0 add r,t0,r
+#define r__r_2t0 sh1add t0,r,r
+#define r__r_4t0 sh2add t0,r,r
+#define r__r_8t0 sh3add t0,r,r
+#define t0__3a0 sh1add a0,a0,t0
+#define t0__4a0 sh2add a0,0,t0
+#define t0__5a0 sh2add a0,a0,t0
+#define t0__8a0 sh3add a0,0,t0
+#define t0__9a0 sh3add a0,a0,t0
+#define t0__16a0 zdep a0,27,28,t0
+#define t0__32a0 zdep a0,26,27,t0
+#define t0__64a0 zdep a0,25,26,t0
+#define t0__128a0 zdep a0,24,25,t0
+#define t0__t0ma0 sub t0,a0,t0
+#define t0__t0_a0 add t0,a0,t0
+#define t0__t0_2a0 sh1add a0,t0,t0
+#define t0__t0_4a0 sh2add a0,t0,t0
+#define t0__t0_8a0 sh3add a0,t0,t0
+#define t0__2t0_a0 sh1add t0,a0,t0
+#define t0__3t0 sh1add t0,t0,t0
+#define t0__4t0 sh2add t0,0,t0
+#define t0__4t0_a0 sh2add t0,a0,t0
+#define t0__5t0 sh2add t0,t0,t0
+#define t0__8t0 sh3add t0,0,t0
+#define t0__8t0_a0 sh3add t0,a0,t0
+#define t0__9t0 sh3add t0,t0,t0
+#define t0__16t0 zdep t0,27,28,t0
+#define t0__32t0 zdep t0,26,27,t0
+#define t0__256a0 zdep a0,23,24,t0
+
+
+ SUBSPA_MILLI
+ ATTR_MILLI
+ .align 16
+ .proc
+ .callinfo millicode
+ .export $$mulI,millicode
+GSYM($$mulI)
+ combt,<<= a1,a0,LREF(l4) /* swap args if unsigned a1>a0 */
+ copy 0,r /* zero out the result */
+ xor a0,a1,a0 /* swap a0 & a1 using the */
+ xor a0,a1,a1 /* old xor trick */
+ xor a0,a1,a0
+LSYM(l4)
+ combt,<= 0,a0,LREF(l3) /* if a0>=0 then proceed like unsigned */
+ zdep a1,30,8,t0 /* t0 = (a1&0xff)<<1 ********* */
+ sub,> 0,a1,t0 /* otherwise negate both and */
+ combt,<=,n a0,t0,LREF(l2) /* swap back if |a0|<|a1| */
+ sub 0,a0,a1
+ movb,tr,n t0,a0,LREF(l2) /* 10th inst. */
+
+LSYM(l0) r__r_t0 /* add in this partial product */
+LSYM(l1) a0__256a0 /* a0 <<= 8 ****************** */
+LSYM(l2) zdep a1,30,8,t0 /* t0 = (a1&0xff)<<1 ********* */
+LSYM(l3) blr t0,0 /* case on these 8 bits ****** */
+ extru a1,23,24,a1 /* a1 >>= 8 ****************** */
+
+/*16 insts before this. */
+/* a0 <<= 8 ************************** */
+LSYM(x0) a1_ne_0_b_l2 ! a0__256a0 ! MILLIRETN ! nop
+LSYM(x1) a1_ne_0_b_l1 ! r__r_a0 ! MILLIRETN ! nop
+LSYM(x2) a1_ne_0_b_l1 ! r__r_2a0 ! MILLIRETN ! nop
+LSYM(x3) a1_ne_0_b_l0 ! t0__3a0 ! MILLIRET ! r__r_t0
+LSYM(x4) a1_ne_0_b_l1 ! r__r_4a0 ! MILLIRETN ! nop
+LSYM(x5) a1_ne_0_b_l0 ! t0__5a0 ! MILLIRET ! r__r_t0
+LSYM(x6) t0__3a0 ! a1_ne_0_b_l1 ! r__r_2t0 ! MILLIRETN
+LSYM(x7) t0__3a0 ! a1_ne_0_b_l0 ! r__r_4a0 ! b_n_ret_t0
+LSYM(x8) a1_ne_0_b_l1 ! r__r_8a0 ! MILLIRETN ! nop
+LSYM(x9) a1_ne_0_b_l0 ! t0__9a0 ! MILLIRET ! r__r_t0
+LSYM(x10) t0__5a0 ! a1_ne_0_b_l1 ! r__r_2t0 ! MILLIRETN
+LSYM(x11) t0__3a0 ! a1_ne_0_b_l0 ! r__r_8a0 ! b_n_ret_t0
+LSYM(x12) t0__3a0 ! a1_ne_0_b_l1 ! r__r_4t0 ! MILLIRETN
+LSYM(x13) t0__5a0 ! a1_ne_0_b_l0 ! r__r_8a0 ! b_n_ret_t0
+LSYM(x14) t0__3a0 ! t0__2t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x15) t0__5a0 ! a1_ne_0_b_l0 ! t0__3t0 ! b_n_ret_t0
+LSYM(x16) t0__16a0 ! a1_ne_0_b_l1 ! r__r_t0 ! MILLIRETN
+LSYM(x17) t0__9a0 ! a1_ne_0_b_l0 ! t0__t0_8a0 ! b_n_ret_t0
+LSYM(x18) t0__9a0 ! a1_ne_0_b_l1 ! r__r_2t0 ! MILLIRETN
+LSYM(x19) t0__9a0 ! a1_ne_0_b_l0 ! t0__2t0_a0 ! b_n_ret_t0
+LSYM(x20) t0__5a0 ! a1_ne_0_b_l1 ! r__r_4t0 ! MILLIRETN
+LSYM(x21) t0__5a0 ! a1_ne_0_b_l0 ! t0__4t0_a0 ! b_n_ret_t0
+LSYM(x22) t0__5a0 ! t0__2t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x23) t0__5a0 ! t0__2t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x24) t0__3a0 ! a1_ne_0_b_l1 ! r__r_8t0 ! MILLIRETN
+LSYM(x25) t0__5a0 ! a1_ne_0_b_l0 ! t0__5t0 ! b_n_ret_t0
+LSYM(x26) t0__3a0 ! t0__4t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x27) t0__3a0 ! a1_ne_0_b_l0 ! t0__9t0 ! b_n_ret_t0
+LSYM(x28) t0__3a0 ! t0__2t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x29) t0__3a0 ! t0__2t0_a0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x30) t0__5a0 ! t0__3t0 ! b_e_shift ! r__r_2t0
+LSYM(x31) t0__32a0 ! a1_ne_0_b_l0 ! t0__t0ma0 ! b_n_ret_t0
+LSYM(x32) t0__32a0 ! a1_ne_0_b_l1 ! r__r_t0 ! MILLIRETN
+LSYM(x33) t0__8a0 ! a1_ne_0_b_l0 ! t0__4t0_a0 ! b_n_ret_t0
+LSYM(x34) t0__16a0 ! t0__t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x35) t0__9a0 ! t0__3t0 ! b_e_t0 ! t0__t0_8a0
+LSYM(x36) t0__9a0 ! a1_ne_0_b_l1 ! r__r_4t0 ! MILLIRETN
+LSYM(x37) t0__9a0 ! a1_ne_0_b_l0 ! t0__4t0_a0 ! b_n_ret_t0
+LSYM(x38) t0__9a0 ! t0__2t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x39) t0__9a0 ! t0__2t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x40) t0__5a0 ! a1_ne_0_b_l1 ! r__r_8t0 ! MILLIRETN
+LSYM(x41) t0__5a0 ! a1_ne_0_b_l0 ! t0__8t0_a0 ! b_n_ret_t0
+LSYM(x42) t0__5a0 ! t0__4t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x43) t0__5a0 ! t0__4t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x44) t0__5a0 ! t0__2t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x45) t0__9a0 ! a1_ne_0_b_l0 ! t0__5t0 ! b_n_ret_t0
+LSYM(x46) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__t0_a0
+LSYM(x47) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__t0_2a0
+LSYM(x48) t0__3a0 ! a1_ne_0_b_l0 ! t0__16t0 ! b_n_ret_t0
+LSYM(x49) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__t0_4a0
+LSYM(x50) t0__5a0 ! t0__5t0 ! b_e_shift ! r__r_2t0
+LSYM(x51) t0__9a0 ! t0__t0_8a0 ! b_e_t0 ! t0__3t0
+LSYM(x52) t0__3a0 ! t0__4t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x53) t0__3a0 ! t0__4t0_a0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x54) t0__9a0 ! t0__3t0 ! b_e_shift ! r__r_2t0
+LSYM(x55) t0__9a0 ! t0__3t0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x56) t0__3a0 ! t0__2t0_a0 ! b_e_shift ! r__r_8t0
+LSYM(x57) t0__9a0 ! t0__2t0_a0 ! b_e_t0 ! t0__3t0
+LSYM(x58) t0__3a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x59) t0__9a0 ! t0__2t0_a0 ! b_e_t02a0 ! t0__3t0
+LSYM(x60) t0__5a0 ! t0__3t0 ! b_e_shift ! r__r_4t0
+LSYM(x61) t0__5a0 ! t0__3t0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x62) t0__32a0 ! t0__t0ma0 ! b_e_shift ! r__r_2t0
+LSYM(x63) t0__64a0 ! a1_ne_0_b_l0 ! t0__t0ma0 ! b_n_ret_t0
+LSYM(x64) t0__64a0 ! a1_ne_0_b_l1 ! r__r_t0 ! MILLIRETN
+LSYM(x65) t0__8a0 ! a1_ne_0_b_l0 ! t0__8t0_a0 ! b_n_ret_t0
+LSYM(x66) t0__32a0 ! t0__t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x67) t0__8a0 ! t0__4t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x68) t0__8a0 ! t0__2t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x69) t0__8a0 ! t0__2t0_a0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x70) t0__64a0 ! t0__t0_4a0 ! b_e_t0 ! t0__t0_2a0
+LSYM(x71) t0__9a0 ! t0__8t0 ! b_e_t0 ! t0__t0ma0
+LSYM(x72) t0__9a0 ! a1_ne_0_b_l1 ! r__r_8t0 ! MILLIRETN
+LSYM(x73) t0__9a0 ! t0__8t0_a0 ! b_e_shift ! r__r_t0
+LSYM(x74) t0__9a0 ! t0__4t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x75) t0__9a0 ! t0__4t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x76) t0__9a0 ! t0__2t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x77) t0__9a0 ! t0__2t0_a0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x78) t0__9a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x79) t0__16a0 ! t0__5t0 ! b_e_t0 ! t0__t0ma0
+LSYM(x80) t0__16a0 ! t0__5t0 ! b_e_shift ! r__r_t0
+LSYM(x81) t0__9a0 ! t0__9t0 ! b_e_shift ! r__r_t0
+LSYM(x82) t0__5a0 ! t0__8t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x83) t0__5a0 ! t0__8t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x84) t0__5a0 ! t0__4t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x85) t0__8a0 ! t0__2t0_a0 ! b_e_t0 ! t0__5t0
+LSYM(x86) t0__5a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x87) t0__9a0 ! t0__9t0 ! b_e_t02a0 ! t0__t0_4a0
+LSYM(x88) t0__5a0 ! t0__2t0_a0 ! b_e_shift ! r__r_8t0
+LSYM(x89) t0__5a0 ! t0__2t0_a0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x90) t0__9a0 ! t0__5t0 ! b_e_shift ! r__r_2t0
+LSYM(x91) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x92) t0__5a0 ! t0__2t0_a0 ! b_e_4t0 ! t0__2t0_a0
+LSYM(x93) t0__32a0 ! t0__t0ma0 ! b_e_t0 ! t0__3t0
+LSYM(x94) t0__9a0 ! t0__5t0 ! b_e_2t0 ! t0__t0_2a0
+LSYM(x95) t0__9a0 ! t0__2t0_a0 ! b_e_t0 ! t0__5t0
+LSYM(x96) t0__8a0 ! t0__3t0 ! b_e_shift ! r__r_4t0
+LSYM(x97) t0__8a0 ! t0__3t0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x98) t0__32a0 ! t0__3t0 ! b_e_t0 ! t0__t0_2a0
+LSYM(x99) t0__8a0 ! t0__4t0_a0 ! b_e_t0 ! t0__3t0
+LSYM(x100) t0__5a0 ! t0__5t0 ! b_e_shift ! r__r_4t0
+LSYM(x101) t0__5a0 ! t0__5t0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x102) t0__32a0 ! t0__t0_2a0 ! b_e_t0 ! t0__3t0
+LSYM(x103) t0__5a0 ! t0__5t0 ! b_e_t02a0 ! t0__4t0_a0
+LSYM(x104) t0__3a0 ! t0__4t0_a0 ! b_e_shift ! r__r_8t0
+LSYM(x105) t0__5a0 ! t0__4t0_a0 ! b_e_t0 ! t0__5t0
+LSYM(x106) t0__3a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x107) t0__9a0 ! t0__t0_4a0 ! b_e_t02a0 ! t0__8t0_a0
+LSYM(x108) t0__9a0 ! t0__3t0 ! b_e_shift ! r__r_4t0
+LSYM(x109) t0__9a0 ! t0__3t0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x110) t0__9a0 ! t0__3t0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x111) t0__9a0 ! t0__4t0_a0 ! b_e_t0 ! t0__3t0
+LSYM(x112) t0__3a0 ! t0__2t0_a0 ! b_e_t0 ! t0__16t0
+LSYM(x113) t0__9a0 ! t0__4t0_a0 ! b_e_t02a0 ! t0__3t0
+LSYM(x114) t0__9a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__3t0
+LSYM(x115) t0__9a0 ! t0__2t0_a0 ! b_e_2t0a0 ! t0__3t0
+LSYM(x116) t0__3a0 ! t0__2t0_a0 ! b_e_4t0 ! t0__4t0_a0
+LSYM(x117) t0__3a0 ! t0__4t0_a0 ! b_e_t0 ! t0__9t0
+LSYM(x118) t0__3a0 ! t0__4t0_a0 ! b_e_t0a0 ! t0__9t0
+LSYM(x119) t0__3a0 ! t0__4t0_a0 ! b_e_t02a0 ! t0__9t0
+LSYM(x120) t0__5a0 ! t0__3t0 ! b_e_shift ! r__r_8t0
+LSYM(x121) t0__5a0 ! t0__3t0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x122) t0__5a0 ! t0__3t0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x123) t0__5a0 ! t0__8t0_a0 ! b_e_t0 ! t0__3t0
+LSYM(x124) t0__32a0 ! t0__t0ma0 ! b_e_shift ! r__r_4t0
+LSYM(x125) t0__5a0 ! t0__5t0 ! b_e_t0 ! t0__5t0
+LSYM(x126) t0__64a0 ! t0__t0ma0 ! b_e_shift ! r__r_2t0
+LSYM(x127) t0__128a0 ! a1_ne_0_b_l0 ! t0__t0ma0 ! b_n_ret_t0
+LSYM(x128) t0__128a0 ! a1_ne_0_b_l1 ! r__r_t0 ! MILLIRETN
+LSYM(x129) t0__128a0 ! a1_ne_0_b_l0 ! t0__t0_a0 ! b_n_ret_t0
+LSYM(x130) t0__64a0 ! t0__t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x131) t0__8a0 ! t0__8t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x132) t0__8a0 ! t0__4t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x133) t0__8a0 ! t0__4t0_a0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x134) t0__8a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x135) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__3t0
+LSYM(x136) t0__8a0 ! t0__2t0_a0 ! b_e_shift ! r__r_8t0
+LSYM(x137) t0__8a0 ! t0__2t0_a0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x138) t0__8a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x139) t0__8a0 ! t0__2t0_a0 ! b_e_2t0a0 ! t0__4t0_a0
+LSYM(x140) t0__3a0 ! t0__2t0_a0 ! b_e_4t0 ! t0__5t0
+LSYM(x141) t0__8a0 ! t0__2t0_a0 ! b_e_4t0a0 ! t0__2t0_a0
+LSYM(x142) t0__9a0 ! t0__8t0 ! b_e_2t0 ! t0__t0ma0
+LSYM(x143) t0__16a0 ! t0__9t0 ! b_e_t0 ! t0__t0ma0
+LSYM(x144) t0__9a0 ! t0__8t0 ! b_e_shift ! r__r_2t0
+LSYM(x145) t0__9a0 ! t0__8t0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x146) t0__9a0 ! t0__8t0_a0 ! b_e_shift ! r__r_2t0
+LSYM(x147) t0__9a0 ! t0__8t0_a0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x148) t0__9a0 ! t0__4t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x149) t0__9a0 ! t0__4t0_a0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x150) t0__9a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x151) t0__9a0 ! t0__4t0_a0 ! b_e_2t0a0 ! t0__2t0_a0
+LSYM(x152) t0__9a0 ! t0__2t0_a0 ! b_e_shift ! r__r_8t0
+LSYM(x153) t0__9a0 ! t0__2t0_a0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x154) t0__9a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x155) t0__32a0 ! t0__t0ma0 ! b_e_t0 ! t0__5t0
+LSYM(x156) t0__9a0 ! t0__2t0_a0 ! b_e_4t0 ! t0__2t0_a0
+LSYM(x157) t0__32a0 ! t0__t0ma0 ! b_e_t02a0 ! t0__5t0
+LSYM(x158) t0__16a0 ! t0__5t0 ! b_e_2t0 ! t0__t0ma0
+LSYM(x159) t0__32a0 ! t0__5t0 ! b_e_t0 ! t0__t0ma0
+LSYM(x160) t0__5a0 ! t0__4t0 ! b_e_shift ! r__r_8t0
+LSYM(x161) t0__8a0 ! t0__5t0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x162) t0__9a0 ! t0__9t0 ! b_e_shift ! r__r_2t0
+LSYM(x163) t0__9a0 ! t0__9t0 ! b_e_t0 ! t0__2t0_a0
+LSYM(x164) t0__5a0 ! t0__8t0_a0 ! b_e_shift ! r__r_4t0
+LSYM(x165) t0__8a0 ! t0__4t0_a0 ! b_e_t0 ! t0__5t0
+LSYM(x166) t0__5a0 ! t0__8t0_a0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x167) t0__5a0 ! t0__8t0_a0 ! b_e_2t0a0 ! t0__2t0_a0
+LSYM(x168) t0__5a0 ! t0__4t0_a0 ! b_e_shift ! r__r_8t0
+LSYM(x169) t0__5a0 ! t0__4t0_a0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x170) t0__32a0 ! t0__t0_2a0 ! b_e_t0 ! t0__5t0
+LSYM(x171) t0__9a0 ! t0__2t0_a0 ! b_e_t0 ! t0__9t0
+LSYM(x172) t0__5a0 ! t0__4t0_a0 ! b_e_4t0 ! t0__2t0_a0
+LSYM(x173) t0__9a0 ! t0__2t0_a0 ! b_e_t02a0 ! t0__9t0
+LSYM(x174) t0__32a0 ! t0__t0_2a0 ! b_e_t04a0 ! t0__5t0
+LSYM(x175) t0__8a0 ! t0__2t0_a0 ! b_e_5t0 ! t0__2t0_a0
+LSYM(x176) t0__5a0 ! t0__4t0_a0 ! b_e_8t0 ! t0__t0_a0
+LSYM(x177) t0__5a0 ! t0__4t0_a0 ! b_e_8t0a0 ! t0__t0_a0
+LSYM(x178) t0__5a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__8t0_a0
+LSYM(x179) t0__5a0 ! t0__2t0_a0 ! b_e_2t0a0 ! t0__8t0_a0
+LSYM(x180) t0__9a0 ! t0__5t0 ! b_e_shift ! r__r_4t0
+LSYM(x181) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x182) t0__9a0 ! t0__5t0 ! b_e_2t0 ! t0__2t0_a0
+LSYM(x183) t0__9a0 ! t0__5t0 ! b_e_2t0a0 ! t0__2t0_a0
+LSYM(x184) t0__5a0 ! t0__9t0 ! b_e_4t0 ! t0__t0_a0
+LSYM(x185) t0__9a0 ! t0__4t0_a0 ! b_e_t0 ! t0__5t0
+LSYM(x186) t0__32a0 ! t0__t0ma0 ! b_e_2t0 ! t0__3t0
+LSYM(x187) t0__9a0 ! t0__4t0_a0 ! b_e_t02a0 ! t0__5t0
+LSYM(x188) t0__9a0 ! t0__5t0 ! b_e_4t0 ! t0__t0_2a0
+LSYM(x189) t0__5a0 ! t0__4t0_a0 ! b_e_t0 ! t0__9t0
+LSYM(x190) t0__9a0 ! t0__2t0_a0 ! b_e_2t0 ! t0__5t0
+LSYM(x191) t0__64a0 ! t0__3t0 ! b_e_t0 ! t0__t0ma0
+LSYM(x192) t0__8a0 ! t0__3t0 ! b_e_shift ! r__r_8t0
+LSYM(x193) t0__8a0 ! t0__3t0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x194) t0__8a0 ! t0__3t0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x195) t0__8a0 ! t0__8t0_a0 ! b_e_t0 ! t0__3t0
+LSYM(x196) t0__8a0 ! t0__3t0 ! b_e_4t0 ! t0__2t0_a0
+LSYM(x197) t0__8a0 ! t0__3t0 ! b_e_4t0a0 ! t0__2t0_a0
+LSYM(x198) t0__64a0 ! t0__t0_2a0 ! b_e_t0 ! t0__3t0
+LSYM(x199) t0__8a0 ! t0__4t0_a0 ! b_e_2t0a0 ! t0__3t0
+LSYM(x200) t0__5a0 ! t0__5t0 ! b_e_shift ! r__r_8t0
+LSYM(x201) t0__5a0 ! t0__5t0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x202) t0__5a0 ! t0__5t0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x203) t0__5a0 ! t0__5t0 ! b_e_2t0a0 ! t0__4t0_a0
+LSYM(x204) t0__8a0 ! t0__2t0_a0 ! b_e_4t0 ! t0__3t0
+LSYM(x205) t0__5a0 ! t0__8t0_a0 ! b_e_t0 ! t0__5t0
+LSYM(x206) t0__64a0 ! t0__t0_4a0 ! b_e_t02a0 ! t0__3t0
+LSYM(x207) t0__8a0 ! t0__2t0_a0 ! b_e_3t0 ! t0__4t0_a0
+LSYM(x208) t0__5a0 ! t0__5t0 ! b_e_8t0 ! t0__t0_a0
+LSYM(x209) t0__5a0 ! t0__5t0 ! b_e_8t0a0 ! t0__t0_a0
+LSYM(x210) t0__5a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__5t0
+LSYM(x211) t0__5a0 ! t0__4t0_a0 ! b_e_2t0a0 ! t0__5t0
+LSYM(x212) t0__3a0 ! t0__4t0_a0 ! b_e_4t0 ! t0__4t0_a0
+LSYM(x213) t0__3a0 ! t0__4t0_a0 ! b_e_4t0a0 ! t0__4t0_a0
+LSYM(x214) t0__9a0 ! t0__t0_4a0 ! b_e_2t04a0 ! t0__8t0_a0
+LSYM(x215) t0__5a0 ! t0__4t0_a0 ! b_e_5t0 ! t0__2t0_a0
+LSYM(x216) t0__9a0 ! t0__3t0 ! b_e_shift ! r__r_8t0
+LSYM(x217) t0__9a0 ! t0__3t0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x218) t0__9a0 ! t0__3t0 ! b_e_2t0 ! t0__4t0_a0
+LSYM(x219) t0__9a0 ! t0__8t0_a0 ! b_e_t0 ! t0__3t0
+LSYM(x220) t0__3a0 ! t0__9t0 ! b_e_4t0 ! t0__2t0_a0
+LSYM(x221) t0__3a0 ! t0__9t0 ! b_e_4t0a0 ! t0__2t0_a0
+LSYM(x222) t0__9a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__3t0
+LSYM(x223) t0__9a0 ! t0__4t0_a0 ! b_e_2t0a0 ! t0__3t0
+LSYM(x224) t0__9a0 ! t0__3t0 ! b_e_8t0 ! t0__t0_a0
+LSYM(x225) t0__9a0 ! t0__5t0 ! b_e_t0 ! t0__5t0
+LSYM(x226) t0__3a0 ! t0__2t0_a0 ! b_e_t02a0 ! t0__32t0
+LSYM(x227) t0__9a0 ! t0__5t0 ! b_e_t02a0 ! t0__5t0
+LSYM(x228) t0__9a0 ! t0__2t0_a0 ! b_e_4t0 ! t0__3t0
+LSYM(x229) t0__9a0 ! t0__2t0_a0 ! b_e_4t0a0 ! t0__3t0
+LSYM(x230) t0__9a0 ! t0__5t0 ! b_e_5t0 ! t0__t0_a0
+LSYM(x231) t0__9a0 ! t0__2t0_a0 ! b_e_3t0 ! t0__4t0_a0
+LSYM(x232) t0__3a0 ! t0__2t0_a0 ! b_e_8t0 ! t0__4t0_a0
+LSYM(x233) t0__3a0 ! t0__2t0_a0 ! b_e_8t0a0 ! t0__4t0_a0
+LSYM(x234) t0__3a0 ! t0__4t0_a0 ! b_e_2t0 ! t0__9t0
+LSYM(x235) t0__3a0 ! t0__4t0_a0 ! b_e_2t0a0 ! t0__9t0
+LSYM(x236) t0__9a0 ! t0__2t0_a0 ! b_e_4t08a0 ! t0__3t0
+LSYM(x237) t0__16a0 ! t0__5t0 ! b_e_3t0 ! t0__t0ma0
+LSYM(x238) t0__3a0 ! t0__4t0_a0 ! b_e_2t04a0 ! t0__9t0
+LSYM(x239) t0__16a0 ! t0__5t0 ! b_e_t0ma0 ! t0__3t0
+LSYM(x240) t0__9a0 ! t0__t0_a0 ! b_e_8t0 ! t0__3t0
+LSYM(x241) t0__9a0 ! t0__t0_a0 ! b_e_8t0a0 ! t0__3t0
+LSYM(x242) t0__5a0 ! t0__3t0 ! b_e_2t0 ! t0__8t0_a0
+LSYM(x243) t0__9a0 ! t0__9t0 ! b_e_t0 ! t0__3t0
+LSYM(x244) t0__5a0 ! t0__3t0 ! b_e_4t0 ! t0__4t0_a0
+LSYM(x245) t0__8a0 ! t0__3t0 ! b_e_5t0 ! t0__2t0_a0
+LSYM(x246) t0__5a0 ! t0__8t0_a0 ! b_e_2t0 ! t0__3t0
+LSYM(x247) t0__5a0 ! t0__8t0_a0 ! b_e_2t0a0 ! t0__3t0
+LSYM(x248) t0__32a0 ! t0__t0ma0 ! b_e_shift ! r__r_8t0
+LSYM(x249) t0__32a0 ! t0__t0ma0 ! b_e_t0 ! t0__8t0_a0
+LSYM(x250) t0__5a0 ! t0__5t0 ! b_e_2t0 ! t0__5t0
+LSYM(x251) t0__5a0 ! t0__5t0 ! b_e_2t0a0 ! t0__5t0
+LSYM(x252) t0__64a0 ! t0__t0ma0 ! b_e_shift ! r__r_4t0
+LSYM(x253) t0__64a0 ! t0__t0ma0 ! b_e_t0 ! t0__4t0_a0
+LSYM(x254) t0__128a0 ! t0__t0ma0 ! b_e_shift ! r__r_2t0
+LSYM(x255) t0__256a0 ! a1_ne_0_b_l0 ! t0__t0ma0 ! b_n_ret_t0
+/*1040 insts before this. */
+LSYM(ret_t0) MILLIRET
+LSYM(e_t0) r__r_t0
+LSYM(e_shift) a1_ne_0_b_l2
+ a0__256a0 /* a0 <<= 8 *********** */
+ MILLIRETN
+LSYM(e_t0ma0) a1_ne_0_b_l0
+ t0__t0ma0
+ MILLIRET
+ r__r_t0
+LSYM(e_t0a0) a1_ne_0_b_l0
+ t0__t0_a0
+ MILLIRET
+ r__r_t0
+LSYM(e_t02a0) a1_ne_0_b_l0
+ t0__t0_2a0
+ MILLIRET
+ r__r_t0
+LSYM(e_t04a0) a1_ne_0_b_l0
+ t0__t0_4a0
+ MILLIRET
+ r__r_t0
+LSYM(e_2t0) a1_ne_0_b_l1
+ r__r_2t0
+ MILLIRETN
+LSYM(e_2t0a0) a1_ne_0_b_l0
+ t0__2t0_a0
+ MILLIRET
+ r__r_t0
+LSYM(e2t04a0) t0__t0_2a0
+ a1_ne_0_b_l1
+ r__r_2t0
+ MILLIRETN
+LSYM(e_3t0) a1_ne_0_b_l0
+ t0__3t0
+ MILLIRET
+ r__r_t0
+LSYM(e_4t0) a1_ne_0_b_l1
+ r__r_4t0
+ MILLIRETN
+LSYM(e_4t0a0) a1_ne_0_b_l0
+ t0__4t0_a0
+ MILLIRET
+ r__r_t0
+LSYM(e4t08a0) t0__t0_2a0
+ a1_ne_0_b_l1
+ r__r_4t0
+ MILLIRETN
+LSYM(e_5t0) a1_ne_0_b_l0
+ t0__5t0
+ MILLIRET
+ r__r_t0
+LSYM(e_8t0) a1_ne_0_b_l1
+ r__r_8t0
+ MILLIRETN
+LSYM(e_8t0a0) a1_ne_0_b_l0
+ t0__8t0_a0
+ MILLIRET
+ r__r_t0
+
+ .procend
+ .end
+#endif
diff --git a/gcc-4.9/libgcc/config/pa/quadlib.c b/gcc-4.9/libgcc/config/pa/quadlib.c
new file mode 100644
index 000000000..eea4b516f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/quadlib.c
@@ -0,0 +1,245 @@
+/* Subroutines for long double support.
+ Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* HPUX TFmode compare requires a library call to _U_Qfcmp. It takes
+ a magic number as its third argument which indicates what to do.
+ The return value is an integer to be compared against zero. The
+ comparison conditions are the same as those listed in Table 8-12
+ of the PA-RISC 2.0 Architecture book for the fcmp instruction. */
+
+/* Raise FP_INVALID on SNaN as a side effect. */
+#define QCMP_INV 1
+
+/* Comparison relations. */
+#define QCMP_UNORD 2
+#define QCMP_EQ 4
+#define QCMP_LT 8
+#define QCMP_GT 16
+
+int _U_Qfcmp (long double a, long double b, int);
+long _U_Qfcnvfxt_quad_to_sgl (long double);
+
+int _U_Qfeq (long double, long double);
+int _U_Qfne (long double, long double);
+int _U_Qfgt (long double, long double);
+int _U_Qfge (long double, long double);
+int _U_Qflt (long double, long double);
+int _U_Qfle (long double, long double);
+int _U_Qfltgt (long double, long double);
+int _U_Qfunle (long double, long double);
+int _U_Qfunlt (long double, long double);
+int _U_Qfunge (long double, long double);
+int _U_Qfungt (long double, long double);
+int _U_Qfuneq (long double, long double);
+int _U_Qfunord (long double, long double);
+int _U_Qford (long double, long double);
+
+int _U_Qfcomp (long double, long double);
+
+long double _U_Qfneg (long double);
+long double _U_Qfcopysign (long double, long double);
+
+#ifdef __LP64__
+int __U_Qfcnvfxt_quad_to_sgl (long double);
+#endif
+unsigned int _U_Qfcnvfxt_quad_to_usgl(long double);
+long double _U_Qfcnvxf_usgl_to_quad (unsigned int);
+unsigned long long _U_Qfcnvfxt_quad_to_udbl(long double);
+long double _U_Qfcnvxf_udbl_to_quad (unsigned long long);
+
+int
+_U_Qfeq (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_EQ) != 0);
+}
+
+int
+_U_Qfne (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_EQ) == 0);
+}
+
+int
+_U_Qfgt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_GT) != 0);
+}
+
+int
+_U_Qfge (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_EQ | QCMP_GT) != 0);
+}
+
+int
+_U_Qflt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_LT) != 0);
+}
+
+int
+_U_Qfle (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_EQ | QCMP_LT) != 0);
+}
+
+int
+_U_Qfltgt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_LT | QCMP_GT) != 0);
+}
+
+int
+_U_Qfunle (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_EQ | QCMP_LT) != 0);
+}
+
+int
+_U_Qfunlt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_LT) != 0);
+}
+
+int
+_U_Qfunge (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_EQ | QCMP_GT) != 0);
+}
+
+int
+_U_Qfungt (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_GT) != 0);
+}
+
+int
+_U_Qfuneq (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_EQ) != 0);
+}
+
+int
+_U_Qfunord (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD) != 0);
+}
+
+int
+_U_Qford (long double a, long double b)
+{
+ return (_U_Qfcmp (a, b, QCMP_INV | QCMP_EQ | QCMP_LT | QCMP_GT) != 0);
+}
+
+int
+_U_Qfcomp (long double a, long double b)
+{
+ if (_U_Qfcmp (a, b, QCMP_EQ) == 0)
+ return 0;
+
+ return (_U_Qfcmp (a, b, QCMP_UNORD | QCMP_EQ | QCMP_GT) != 0 ? 1 : -1);
+}
+
+/* Negate long double A. */
+long double
+_U_Qfneg (long double a)
+{
+ union
+ {
+ long double ld;
+ int i[4];
+ } u;
+
+ u.ld = a;
+ u.i[0] ^= 0x80000000;
+ return u.ld;
+}
+
+/* Return long double A with sign changed to sign of long double B. */
+long double
+_U_Qfcopysign (long double a, long double b)
+{
+ union
+ {
+ long double ld;
+ int i[4];
+ } ua, ub;
+
+ ua.ld = a;
+ ub.ld = b;
+ ua.i[0] &= 0x7fffffff;
+ ua.i[0] |= (0x80000000 & ub.i[0]);
+ return ua.ld;
+}
+
+#ifdef __LP64__
+/* This routine is only necessary for the PA64 port; for reasons unknown
+ _U_Qfcnvfxt_quad_to_sgl returns the integer in the high 32bits of the
+ return value. Ugh. */
+int
+__U_Qfcnvfxt_quad_to_sgl (long double a)
+{
+ return _U_Qfcnvfxt_quad_to_sgl (a) >> 32;
+}
+#endif
+
+/* HP only has signed conversion in the C library, so need to synthesize
+ unsigned versions. */
+unsigned int
+_U_Qfcnvfxt_quad_to_usgl (long double a)
+{
+ extern long long _U_Qfcnvfxt_quad_to_dbl (long double a);
+ return (unsigned int) _U_Qfcnvfxt_quad_to_dbl (a);
+}
+
+long double
+_U_Qfcnvxf_usgl_to_quad (unsigned int a)
+{
+ extern long double _U_Qfcnvxf_dbl_to_quad (long long);
+ return _U_Qfcnvxf_dbl_to_quad ((long long) a);
+}
+
+typedef union {
+ unsigned long long u[2];
+ long double d[1];
+} quad_type;
+
+unsigned long long
+_U_Qfcnvfxt_quad_to_udbl (long double a)
+{
+ extern quad_type _U_Qfcnvfxt_quad_to_quad (long double a);
+ quad_type u;
+ u = _U_Qfcnvfxt_quad_to_quad(a);
+ return u.u[1];
+}
+
+long double
+_U_Qfcnvxf_udbl_to_quad (unsigned long long a)
+{
+ extern long double _U_Qfcnvxf_quad_to_quad (quad_type a);
+ quad_type u;
+ u.u[0] = 0;
+ u.u[1] = a;
+ return _U_Qfcnvxf_quad_to_quad (u);
+}
diff --git a/gcc-4.9/libgcc/config/pa/stublib.c b/gcc-4.9/libgcc/config/pa/stublib.c
new file mode 100644
index 000000000..31ae61767
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/stublib.c
@@ -0,0 +1,117 @@
+/* Stub functions.
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "tsystem.h"
+
+#ifdef L_register_frame_info
+struct object;
+void __register_frame_info (const void *, struct object *);
+void
+__register_frame_info (__attribute__((unused)) const void *p,
+ __attribute__((unused)) struct object *ob)
+{
+}
+#endif
+
+#ifdef L_deregister_frame_info
+void *__deregister_frame_info (const void *);
+void *
+__deregister_frame_info (__attribute__((unused)) const void *p)
+{
+ return (void *)0;
+}
+#endif
+
+#ifdef L_ITM_registerTMCloneTable
+struct object;
+void _ITM_registerTMCloneTable (const void *, size_t);
+void
+_ITM_registerTMCloneTable (__attribute__((unused)) const void *p,
+ __attribute__((unused)) size_t s)
+{
+}
+#endif
+
+#ifdef L_ITM_deregisterTMCloneTable
+void _ITM_deregisterTMCloneTable (const void *);
+void
+_ITM_deregisterTMCloneTable (__attribute__((unused)) const void *p)
+{
+}
+#endif
+
+#ifdef L_cxa_finalize
+void __cxa_finalize (void *);
+void
+__cxa_finalize (__attribute__((unused)) void *p)
+{
+}
+#endif
+
+#ifdef L_Jv_RegisterClasses
+void _Jv_RegisterClasses (void *);
+void
+_Jv_RegisterClasses (__attribute__((unused)) void *p)
+{
+}
+#endif
+
+#ifdef L_pthread_default_stacksize_np
+int pthread_default_stacksize_np (unsigned long, unsigned long *);
+int
+pthread_default_stacksize_np (__attribute__((unused)) unsigned long new,
+ unsigned long *old)
+{
+ if (old)
+ *old = 0;
+ return 0;
+}
+#endif
+
+#ifdef L_pthread_mutex_lock
+int pthread_mutex_lock (void);
+int
+pthread_mutex_lock (void)
+{
+ return 0;
+}
+#endif
+
+#ifdef L_pthread_mutex_unlock
+int pthread_mutex_unlock (void);
+int
+pthread_mutex_unlock (void)
+{
+ return 0;
+}
+#endif
+
+#ifdef L_pthread_once
+int pthread_once (void);
+int
+pthread_once (void)
+{
+ return 0;
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/pa/t-hpux b/gcc-4.9/libgcc/config/pa/t-hpux
new file mode 100644
index 000000000..fcf93aba3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-hpux
@@ -0,0 +1,3 @@
+LIB2ADD = $(srcdir)/config/pa/lib2funcs.S $(srcdir)/config/pa/quadlib.c
+
+HOST_LIBGCC2_CFLAGS += -frandom-seed=fixed-seed
diff --git a/gcc-4.9/libgcc/config/pa/t-hpux10 b/gcc-4.9/libgcc/config/pa/t-hpux10
new file mode 100644
index 000000000..5620f314a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-hpux10
@@ -0,0 +1 @@
+HOST_LIBGCC2_CFLAGS += -D_T_HPUX10
diff --git a/gcc-4.9/libgcc/config/pa/t-linux b/gcc-4.9/libgcc/config/pa/t-linux
new file mode 100644
index 000000000..2157de9b0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-linux
@@ -0,0 +1,10 @@
+#Plug millicode routines into libgcc.a We want these on both native and
+#cross compiles. We use the "64-bit" routines because the "32-bit" code
+#is broken for certain corner cases.
+LIB1ASMSRC = pa/milli64.S
+LIB1ASMFUNCS = _divI _divU _remI _remU _div_const _mulI _dyncall
+
+HOST_LIBGCC2_CFLAGS += -DELF=1 -DLINUX=1
+
+LIB2ADD = $(srcdir)/config/pa/fptr.c
+LIB2ADD_ST = $(srcdir)/config/pa/linux-atomic.c
diff --git a/gcc-4.9/libgcc/config/pa/t-linux64 b/gcc-4.9/libgcc/config/pa/t-linux64
new file mode 100644
index 000000000..1d0a6ada1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-linux64
@@ -0,0 +1,8 @@
+# Plug millicode routines into libgcc.a We want these on both native and
+# cross compiles.
+# FIXME: Explain.
+LIB1ASMFUNCS := $(filter-out _dyncall, $(LIB1ASMFUNCS))
+
+LIB2ADD_ST = $(srcdir)/config/pa/linux-atomic.c
+
+HOST_LIBGCC2_CFLAGS += -Dpa64=1 -DELF=1
diff --git a/gcc-4.9/libgcc/config/pa/t-openbsd b/gcc-4.9/libgcc/config/pa/t-openbsd
new file mode 100644
index 000000000..8b99068ce
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-openbsd
@@ -0,0 +1,9 @@
+#Plug millicode routines into libgcc.a We want these on both native and
+#cross compiles. We use the "64-bit" routines because the "32-bit" code
+#is broken for certain corner cases.
+LIB1ASMSRC = pa/milli64.S
+LIB1ASMFUNCS = _divI _divU _remI _remU _div_const _mulI _dyncall
+
+HOST_LIBGCC2_CFLAGS += -DELF=1 -DLINUX=1
+
+LIB2ADD = $(srcdir)/config/pa/fptr.c
diff --git a/gcc-4.9/libgcc/config/pa/t-pa64 b/gcc-4.9/libgcc/config/pa/t-pa64
new file mode 100644
index 000000000..98f28edb1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-pa64
@@ -0,0 +1,3 @@
+LIB2ADD = $(srcdir)/config/pa/quadlib.c
+
+HOST_LIBGCC2_CFLAGS += -Dpa64=1 -DELF=1 -mlong-calls
diff --git a/gcc-4.9/libgcc/config/pa/t-slibgcc-dwarf-ver b/gcc-4.9/libgcc/config/pa/t-slibgcc-dwarf-ver
new file mode 100644
index 000000000..fa4688d69
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-slibgcc-dwarf-ver
@@ -0,0 +1,3 @@
+# Set the version number of the shared libgcc library (DWARF2 EH).
+
+SHLIB_SOVERSION = 4
diff --git a/gcc-4.9/libgcc/config/pa/t-slibgcc-hpux b/gcc-4.9/libgcc/config/pa/t-slibgcc-hpux
new file mode 100644
index 000000000..8d6769192
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-slibgcc-hpux
@@ -0,0 +1,24 @@
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Build a shared libgcc library with the HP-UX linker on PA.
+
+SHLIB_EXT = .sl
+SHLIB_SOLINK = @shlib_base_name@$(SHLIB_EXT)
+SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)
+SHLIB_LC =
diff --git a/gcc-4.9/libgcc/config/pa/t-slibgcc-sjlj-ver b/gcc-4.9/libgcc/config/pa/t-slibgcc-sjlj-ver
new file mode 100644
index 000000000..00140cf20
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-slibgcc-sjlj-ver
@@ -0,0 +1,3 @@
+# Set the version number of the shared libgcc library (SJLJ EH).
+
+SHLIB_SOVERSION = 3
diff --git a/gcc-4.9/libgcc/config/pa/t-stublib b/gcc-4.9/libgcc/config/pa/t-stublib
new file mode 100644
index 000000000..8004c1e46
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pa/t-stublib
@@ -0,0 +1,41 @@
+LIBGCCSTUB_OBJS = rfi-stub.o dfi-stub.o ritm-stub.o ditm-stub.o \
+ jvrc-stub.o cxaf-stub.o \
+ pthread_default_stacksize_np-stub.o \
+ pthread_mutex_lock-stub.o \
+ pthread_mutex_unlock-stub.o \
+ pthread_once-stub.o
+
+rfi-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_register_frame_info $<
+
+dfi-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_deregister_frame_info $<
+
+ritm-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_ITM_registerTMCloneTable $<
+
+ditm-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_ITM_deregisterTMCloneTable $<
+
+cxaf-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_cxa_finalize $<
+
+jvrc-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_Jv_RegisterClasses $<
+
+pthread_default_stacksize_np-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_pthread_default_stacksize_np $<
+
+pthread_mutex_lock-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_pthread_mutex_lock $<
+
+pthread_mutex_unlock-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_pthread_mutex_unlock $<
+
+pthread_once-stub.o: $(srcdir)/config/pa/stublib.c
+ $(gcc_compile) -c -O2 -DL_pthread_once $<
+
+libgcc_stub.a: $(LIBGCCSTUB_OBJS)
+ -rm -rf $@
+ $(AR) rc $@ $(LIBGCCSTUB_OBJS)
+ $(RANLIB) $@
diff --git a/gcc-4.9/libgcc/config/pdp11/t-pdp11 b/gcc-4.9/libgcc/config/pdp11/t-pdp11
new file mode 100644
index 000000000..7cadae11a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/pdp11/t-pdp11
@@ -0,0 +1,8 @@
+LIB2ADD = $(srcdir)/udivmod.c \
+ $(srcdir)/udivmodsi4.c \
+ $(srcdir)/memcmp.c \
+ $(srcdir)/memcpy.c \
+ $(srcdir)/memmove.c \
+ $(srcdir)/memset.c
+
+HOST_LIBGCC2_CFLAGS += -O2 -mfloat32
diff --git a/gcc-4.9/libgcc/config/picochip/adddi3.S b/gcc-4.9/libgcc/config/picochip/adddi3.S
new file mode 100644
index 000000000..1e79c798a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/adddi3.S
@@ -0,0 +1,194 @@
+// picoChip ASM file
+//
+// Support for 64-bit addition.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.align 8
+.global __adddi3
+__adddi3:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &__adddi3 = 12 bytes
+
+ // The first operand of add is completely in registers r[2-5]
+ // The second operand of sub is in stack FP(0-3)
+ // and result need to be written pointed to by the register r0.
+ // All we need to do is to load the appropriate values, add them
+ // appropriately (with add or addc ) and then store the values back.
+
+ ldw (FP)0, r1
+ stl r[7:6], (FP)-1
+ add.0 r2, r1, r6
+ ldw (FP)1, r1
+ addc.0 r3, r1, r7
+ ldl (FP)1, r[3:2]
+ stl r[7:6], (r0)0
+ addc.0 r4, r2, r6
+ addc.0 r5, r3, r7
+ stl r[7:6], (r0)1
+ jr (r12)
+=-> ldl (FP)-1, r[7:6]
+
+_picoMark_FUNCTION_END=
+
+// picoChip Function Epilogue : __adddi3
+
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0xe // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#61# 16#64# 16#64# 16#63# 16#69# 16#33# 16#0# // Function name `_adddi3'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
diff --git a/gcc-4.9/libgcc/config/picochip/ashlsi3.S b/gcc-4.9/libgcc/config/picochip/ashlsi3.S
new file mode 100644
index 000000000..40f4a28a8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/ashlsi3.S
@@ -0,0 +1,193 @@
+// picoChip ASM file
+// picoChip ASM file
+//
+// Support for 32-bit arithmetic shift left.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.global ___ashlsi3
+___ashlsi3:
+_picoMark_FUNCTION_BEGIN=
+// picoChip Function Prologue : &___ashlsi3 = 0 bytes
+
+ // if (R2 > 15) goto _L2
+ SUB.0 15,R2,r15
+ JMPLT _L2
+=-> SUB.0 16,R2,R5 // R5 := R5 - R4 (HI)
+
+ LSL.0 R1,R2,R1 // R3 := R1 << R2
+ LSL.0 R0,R2,R4 // R2 := R0 << R2
+
+ LSR.0 R0,R5,R5 // R5 := R12 >> R5 NEED TO CHECK - HARI
+ OR.0 R5,R1,R5 // R3 := R5 IOR R0 (HI)
+ SUB.0 R2,0,r15
+ COPYNE R5,R1
+ JR (R12) // Return to caller
+=-> COPY.0 R4,R0
+
+_L2:
+ LSL.0 R0,R2,R1 // R3 := R0 << R2
+ JR (R12) // Return to caller
+=-> COPY.0 0,R0 // R2 := 0 (short constant)
+
+_picoMark_FUNCTION_END=
+
+// picoChip Function Epilogue : __ashlsi3
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#61# 16#73# 16#68# 16#6c# 16#73# 16#69# 16#33# 16#0# // Function name `_ashlsi3'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
diff --git a/gcc-4.9/libgcc/config/picochip/ashlsi3.c b/gcc-4.9/libgcc/config/picochip/ashlsi3.c
new file mode 100644
index 000000000..74344cd2a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/ashlsi3.c
@@ -0,0 +1,82 @@
+/*
+
+picoChip GCC support for 32-bit shift left.
+
+Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Contributed by Picochip Ltd.
+Maintained by Daniel Towner (daniel.towner@picochip.com)
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef PICOCHIP
+#error "Intended for compilation for PICOCHIP only."
+#endif
+
+typedef int HItype __attribute__ ((mode (HI)));
+typedef unsigned int UHItype __attribute__ ((mode (HI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+
+typedef struct USIstruct {
+ UHItype low, high;
+} USIstruct;
+
+typedef union USIunion {
+ USItype l;
+ USIstruct s;
+} USIunion;
+
+USItype __ashlsi3(USIunion value, HItype count) {
+ USIunion result;
+ int temp;
+
+ /* Ignore a zero count until we get into the (count < 16)
+ clause. This is slightly slower when shifting by zero, but faster
+ and smaller in all other cases (due to the better scheduling
+ opportunities available by putting the test near computational
+ instructions. */
+ /* if (count == 0) return value.l; */
+
+ if (count < 16) {
+ /* Shift low and high words by the count. */
+ result.s.low = value.s.low << count;
+ result.s.high = value.s.high << count;
+
+ /* There is now a hole in the lower `count' bits of the high
+ word. Shift the upper `count' bits of the low word into the
+ high word. This is only required when the count is non-zero. */
+ if (count != 0) {
+ temp = 16 - count;
+ temp = value.s.low >> temp;
+ result.s.high |= temp;
+ }
+
+ } else {
+ /* Shift the lower word of the source into the upper word of the
+ result, and zero the result's lower word. */
+ count -= 16;
+ result.s.high = value.s.low << count;
+ result.s.low = 0;
+
+ }
+
+ return result.l;
+
+}
+
diff --git a/gcc-4.9/libgcc/config/picochip/ashrsi3.S b/gcc-4.9/libgcc/config/picochip/ashrsi3.S
new file mode 100644
index 000000000..7e4048934
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/ashrsi3.S
@@ -0,0 +1,202 @@
+// picoChip ASM file
+//
+// Support for 32-bit arithmetic shift right.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.global ___ashrsi3
+___ashrsi3:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &___ashrsi3 = 0 bytes
+
+ // if (R2 > 15) goto _L2
+ SUB.0 15,R2,r15
+ JMPLT _L2
+=-> COPY.0 R1,R3
+
+ LSR.0 R1,R2,R1 // R1 := R1 >> R2
+ // if (R2 == 0) goto _L4
+ SUB.0 R2,0,r15
+ JMPEQ _L4
+=-> LSR.0 R0,R2,R0 // R2 := R0 >> R2
+
+ SUB.0 16,R2,R4 // R4 := R4 - R2 (HI)
+ ASR.0 R3,15,R5 // R5 = R1 >>{arith} 15
+ LSL.0 R5,R4,R5 // R5 := R5 << R4
+ LSL.0 R3,R4,R4 // R4 := R1 << R4
+ OR.0 R5,R1,R1 // R3 := R5 IOR R3 (HI)
+ BRA _L4
+ =-> OR.0 R4,R0,R0 // R2 := R4 IOR R0 (HI)
+_L2:
+ ASR.0 R1,15,R1 // R4 = R1 >>{arith} 15
+ SUB.0 16,R2,R5 // R5 := R5 - R2 (HI)
+ LSR.0 R3,R2,R0 // R2 := R1 >> R2
+ LSL.0 R1,R5,R5 // R5 := R4 << R5
+ OR.0 R5,R0,R5 // R2 := R5 IOR R2 (HI)
+ SUB.0 R2,16,r15 // R5 := R5 - R2 (HI)
+ COPYNE R5,R0
+_L4:
+ JR (R12) // Return to caller
+
+_picoMark_FUNCTION_END=
+
+// picoChip Function Epilogue : __ashrsi3
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#61# 16#73# 16#68# 16#72# 16#73# 16#69# 16#33# 16#0# // Function name `_ashrsi3'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/ashrsi3.c b/gcc-4.9/libgcc/config/picochip/ashrsi3.c
new file mode 100644
index 000000000..72987ec18
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/ashrsi3.c
@@ -0,0 +1,113 @@
+/*
+
+picoChip GCC support for 32-bit arithmetic shift right.
+
+Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Contributed by Picochip Ltd.
+Maintained by Daniel Towner (daniel.towner@picochip.com)
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef int HItype __attribute__ ((mode (HI)));
+typedef unsigned int UHItype __attribute__ ((mode (HI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+
+typedef struct USIstruct {
+ UHItype low, high;
+} USIstruct;
+
+typedef union USIunion {
+ USItype l;
+ USIstruct s;
+} USIunion;
+
+USItype __ashrsi3(USIunion value, HItype count) {
+ USIunion result;
+ int temp;
+ int wordOfSignBits;
+
+ /* Ignore a zero count until we get into the (count < 16)
+ clause. This is slightly slower when shifting by zero, but faster
+ and smaller in all other cases (due to the better scheduling
+ opportunities available by putting the test near computational
+ instructions. */
+ /* if (count == 0) return value.l; */
+
+ if (count < 16) {
+ /* Shift low and high words by the count. The high word must use
+ an arithmetic shift. There is no arithmetic shift-right by
+ variable, so synthesise it. */
+ int signWord;
+ int reverseCount;
+
+ /* Shift low and high parts by the count. The upper word now has
+ invalid signed bits. */
+ result.s.low = value.s.low >> count;
+ result.s.high = value.s.high >> count;
+
+ if (count != 0) {
+
+ reverseCount = 16 - count;
+
+ /* Given a word of sign bits, shift back left to create the
+ destination sign bits. */
+ wordOfSignBits = __builtin_asri(value.s.high, 15);
+ signWord = wordOfSignBits << reverseCount;
+ result.s.high |= signWord;
+
+ /* There is now a hole in the upper `count' bits of the low
+ word. Shift the lower `count' bits of the upper word into the
+ low word. */
+ temp = value.s.high << reverseCount;
+ result.s.low |= temp;
+ }
+
+ } else {
+ int signWord;
+
+ /* Shift is greater than one word, so top word will always be set
+ to sign bits, and bottom word will be shifted from top word. */
+ result.s.low = value.s.high >> count;
+ result.s.high = __builtin_asri(value.s.high, 15);
+
+ if (count != 16) {
+
+ /* Shift the upper word of the source into the lower word of the
+ result. Arithmetically shift the upper word as well, to retain
+ the sign. This shift must be synthesised, as no such shift
+ exists in the instruction set. */
+ int signWord;
+
+
+ /* Given a complete word of sign-bits, shift this back left to
+ create the destination sign bits. */
+ signWord = result.s.high << (16 - count);
+ // signWord = wordOfSignBits << (16 - count);
+
+ /* Insert the sign bits to the result's low word. */
+ result.s.low |= signWord;
+
+ }
+
+ }
+
+ return result.l;
+
+}
diff --git a/gcc-4.9/libgcc/config/picochip/clzsi2.S b/gcc-4.9/libgcc/config/picochip/clzsi2.S
new file mode 100644
index 000000000..c127a02f1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/clzsi2.S
@@ -0,0 +1,189 @@
+// Copyright (C) 2008-2014 Free Software Foundation, Inc.
+//
+// This file is part of GCC.
+//
+// GCC is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any later
+// version.
+//
+// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// picoChip ASM file
+//.file "clzsi2.S"
+
+.section .text
+
+.global __clzsi2
+__clzsi2:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &__clzsi2 = 0 bytes
+
+ // What value should be operated on? If the top word is empty
+ // then count the bits in the bottom word, and add 16. If the
+ // top word is not empty, then count the bits in the top word.
+
+ // R4 stores the constant 0
+
+ sub.0 R1,0,r15 \ copy.1 16,r2
+ copyeq r0,r1
+ copyne 0,r2
+
+ // R1 now stores value to count, and R2 stores current bit offset.
+ sbc r1,r0
+ asr.0 r1,15,r15 \ add.1 r0,1,r0
+ jr (lr) \ copyne 0,r0
+=-> add.0 r0,r2,r0
+
+_picoMark_FUNCTION_END=
+
+// picoChip Function Epilogue : __clzsi2
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5F# 16#63# 16#6C# 16#7A# 16#73# 16#69# 16#32# 16#0# // Function name `_clzsi2'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/cmpsi2.S b/gcc-4.9/libgcc/config/picochip/cmpsi2.S
new file mode 100644
index 000000000..ebec58828
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/cmpsi2.S
@@ -0,0 +1,212 @@
+// picoChip ASM file
+//.file "ucmpsi2.c"
+//
+// Support for 32-bit signed compare.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Compiled from the following, and then hand optimised.
+//
+// int __cmpsi2 (USItype x, USItype y)
+// {
+//
+// SIunion lx; lx.l = x;
+// SIunion ly; ly.l = y;
+//
+// if (lx.s.high < ly.s.high)
+// return 0;
+// else if (lx.s.high > ly.s.high)
+// return 2;
+// if (lx.s.low < ly.s.low)
+// return 0;
+// else if (lx.s.low > ly.s.low)
+// return 2;
+// return 1;
+// }
+
+.section .text
+
+.align 8
+.global ___cmpsi2
+___cmpsi2:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &___cmpsi2 = 0 bytes
+
+ SUB.0 R1,R3,r15
+
+ BLT _L1
+=-> SUB.0 R3,R1,r15 \ COPY.1 0,R5
+
+ BLT _L1
+=-> SUB.0 R0,R2,r15 \ COPY.1 2,R5
+
+ BLO _L1
+=-> SUB.0 R2,R0,r15 \ COPY.1 0,R5
+
+ BLO _L1
+=-> COPY.0 2,R5
+
+ COPY.0 1,R5
+_L1:
+ JR (R12)
+=-> COPY.0 R5,R0
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __cmpsi2
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#5f# 16#63# 16#6d# 16#70# 16#73# 16#69# 16#32# 16#0# // Function name `__cmpsi2'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/divmod15.S b/gcc-4.9/libgcc/config/picochip/divmod15.S
new file mode 100644
index 000000000..487b1546f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/divmod15.S
@@ -0,0 +1,261 @@
+// picoChip ASM file
+//
+// Support for 16-bit unsigned division/modulus.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.global __divmod15
+__divmod15:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &__divmod15 = 0 bytes
+
+ // The picoChip instruction set has a divstep instruction which
+ // is used to perform one iteration of a binary division algorithm.
+ // The instruction allows 16-bit signed division to be implemented.
+ // It does not directly allow 16-bit unsigned division to be
+ // implemented. Thus, this function pulls out the common division
+ // iteration for 15-bits unsigned, and then special wrappers
+ // provide the logic to change this into a 16-bit signed or
+ // unsigned division, as appropriate. This allows the two
+ // versions of division to share a common implementation, reducing
+ // code size when the two are used together. It also reduces
+ // the maintenance overhead.
+
+ // Input:
+ // r0 - dividend
+ // r1 - divisor
+ // Output:
+ // r0 - quotient
+ // r1 - remainder
+ // R5 is unused
+
+ // Check for special cases. The emphasis is on detecting these as
+ // quickly as possible, so that the main division can be started. If
+ // the user requests division by one, division by self, and so on
+ // then they will just have to accept that this won't be particularly
+ // quick (relatively), whereas a real division (e.g., dividing a
+ // large value by a small value) will run as fast as possible
+ // (i.e., special case detection should not slow down the common case)
+ //
+ // Special cases to consider:
+ //
+ // Division by zero.
+ // Division of zero.
+ // Inputs are equal
+ // Divisor is bigger than dividend
+ // Division by power of two (can be shifted instead).
+ // Division by 1 (special case of power of two division)
+ //
+ // Division/modulus by zero is undefined (ISO C:6.5.5), so
+ // don't bother handling this special case.
+ //
+ // The special cases of division by a power of 2 are ignored, since
+ // they cause the general case to slow down. Omitting these
+ // special cases also reduces code size considerably.
+
+ // Handle divisor >= dividend separately. Note that this also handles
+ // the case where the dividend is zero. Note that the flags must be
+ // preserved, since they are also used at the branch destination.
+ sub.0 r1,r0,r15
+ sbc r0,r2 \ bge divisorGeDividend
+=-> sbc r1,r4
+
+ // Compute the shift count. The amount by which the divisor
+ // must be shifted left to be aligned with the dividend.
+ sub.0 r4,r2,r3
+
+ // Align the divisor to the dividend. Execute a divstep (since at
+ // least one will always be executed). Skip the remaining loop
+ // if the shift count is zero.
+ lsl.0 r1,r3,r1 \ beq skipLoop
+=-> divstep r0,r1 \ add.1 r3,1,r2
+
+ // Execute the divstep loop until temp is 0. This assumes that the
+ // loop count is at least one.
+ sub.0 r3,1,r4
+divLoop:
+ divstep r0,r1 \ bne divLoop
+=-> sub.0 r4,1,r4
+
+skipLoop:
+
+ // The top bits of the result are the remainder. The bottom
+ // bits are the quotient.
+ lsr.0 r0,r2,r1 \ sub.1 16,r2,r4
+ jr (lr ) \ lsl.0 r0,r4,r0
+=-> lsr.0 r0,r4,r0
+
+// Special case.
+
+divisorGeDividend:
+ // The divisor is greater than or equal to the dividend. The flags
+ // indicate which of these alternatives it is. The COPYNE can be used
+ // to set the result appropriately, without introducing any more
+ // branches.
+ copy.0 r0,r1 \ copy.1 0,r0
+ jr (lr) \ copyeq r0,r1
+=-> copyeq 1,r0
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __divmod15
+
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#64# 16#69# 16#76# 16#6d# 16#6f# 16#64# 16#31# 16#35# 16#0# // Function name `_divmod15'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/divmodhi4.S b/gcc-4.9/libgcc/config/picochip/divmodhi4.S
new file mode 100644
index 000000000..55dd71b62
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/divmodhi4.S
@@ -0,0 +1,246 @@
+// picoChip ASM file
+//
+// Support for 16-bit signed division/modulus.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.align 8
+.global __divmodhi4
+__divmodhi4:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &__divmodhi4 = 4 bytes
+
+ // 16-bit signed division. Most of the special cases are dealt
+ // with by the 15-bit signed division library (e.g., division by
+ // zero, division by 1, and so on). This wrapper simply inverts
+ // any negative inputs, calls the 15-bit library, and flips any
+ // results as necessary. The
+ // only special cases to be handled here are where either the
+ // divisor or the dividend are the maximum negative values.
+
+ // Encode r5 with a bit pattern which indicates whether the
+ // outputs of the division must be negated. The MSB will be set
+ // to the sign of the dividend (which controls the remainder's
+ // sign), while the LSB will store the XOR of the two signs,
+ // which indicates the quotient's sign. R5 is not modified by the
+ // 15-bit divmod routine.
+ sub.0 r1,16#8000#,r15 \ asr.1 r0,15,r4
+ beq divisorIsLargestNegative \ lsr.0 r1,15,r3
+=-> sub.0 r0,16#8000#,r15 \ xor.1 r3,r4,r5
+
+ // Handle least negative dividend with a special case. Note that the
+ // absolute value of the divisor is also computed here.
+ add.0 [asr r1,15],r1,r3 \ beq dividendIsLargestNegative
+=-> xor.0 [asr r1,15],r3,r1 \ stw lr,(fp)-1
+
+ // Compute the absolute value of the dividend, and call the main
+ // divide routine.
+ add.0 r4,r0,r2 \ jl (&__divmod15) // fn_call &__divmod15
+=-> xor.0 r4,r2,r0
+
+handleNegatedResults:
+ // Speculatively store the negation of the results.
+ sub.0 0,r0,r2 \ sub.1 0,r1,r3
+
+ // Does the quotient need negating? The LSB indicates this.
+ and.0 r5,1,r15 \ ldw (fp)-1,lr
+ copyne r2,r0
+
+ asr.0 r5,15,r15 \ jr (lr)
+=-> copyne r3,r1
+
+dividendIsLargestNegative:
+
+ // Divide the constant -32768. Use the Hacker's Delight
+ // algorithm (i.e., ((dividend / 2) / divisor) * 2) gives
+ // approximate answer). This code is a special case, so no
+ // great effort is made to make it fast, only to make it
+ // small.
+
+ lsr.0 r0,1,r0 \ jl (&__divmod15) // fn_call &__divmod15
+=-> stw r1,(fp)-2
+
+ // Load the original divisor, and compute the new quotient and
+ // remainder.
+ lsl.0 r0,1,r0 \ ldw (fp)-2,r3
+ lsl.0 r1,1,r1 // Fill stall slot
+
+ // The error in the quotient is 0 or 1. The error can be determined
+ // by comparing the remainder to the original divisor. If the
+ // remainder is bigger, then an error of 1 has been introduced,
+ // which must be fixed.
+ sub.0 r1,r3,r15
+ blo noCompensationForError
+=-> nop
+ add.0 r0,1,r0 \ sub.1 r1,r3,r1
+noCompensationForError:
+ bra handleNegatedResults
+=-> nop
+
+divisorIsLargestNegative:
+ // The flags indicate whether the dividend is also the maximum negative
+ copy.0 r0,r1 \ copy.1 0,r0
+ copyeq r0,r1 \ jr (lr)
+=-> copyeq 1,r0
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __divmodhi4
+
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x4 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#64# 16#69# 16#76# 16#6d# 16#6f# 16#64# 16#68# 16#69# 16#34# 16#0# // Function name `_divmodhi4'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+.section .endFile
diff --git a/gcc-4.9/libgcc/config/picochip/divmodsi4.S b/gcc-4.9/libgcc/config/picochip/divmodsi4.S
new file mode 100644
index 000000000..326c3adba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/divmodsi4.S
@@ -0,0 +1,233 @@
+// picoChip ASM file
+//
+// Support for 32-bit signed division/modulus.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.align 8
+.global __divmodsi4
+__divmodsi4:
+_picoMark_FUNCTION_BEGIN=
+// picoChip Function Prologue : &__divmodsi4 = 8 bytes
+
+ // Note: optimising for size is preferred over optimising for speed.
+
+ // Note: the frame is setup throughout the following instructions,
+ // and is complete at the point the udivmodsi4 function is called.
+
+ // Note that R9 is encoded with a pattern which indicates
+ // whether the remainder and quotient should be negated on
+ // completion. The MSB is set to the sign of the dividend
+ // (i.e., the sign of the remainder), while the LSB encodes
+ // the XOR of the two input's signs (i.e., the sign of the
+ // quotient.
+
+ // If dividend is negative, invert the dividend and flag.
+ ASR.0 r1,15,r4
+ BEQ dividendNotNegative
+=-> STL R[9:8],(FP)-2
+
+ // Dividend is negative - negate dividend.
+ SUB.0 0,R0,R0
+ SUBB.0 0,R1,R1
+
+dividendNotNegative:
+
+ // If divisor is negative, invert the divisor.
+ AND.0 [lsr r3,15],1,r5
+ SUB.0 R3,0, r15
+ BGE divisorNotNegative
+=-> XOR.0 r4,r5,r9
+
+ // Divisor is negative - negate divisor.
+ SUB.0 0,R2,R2
+ SUBB.0 0,R3,R3
+
+divisorNotNegative:
+
+ STL R[13:12],(FP)-1 \ JL (&__udivmodsi4)
+=-> SUB.0 FP,8,FP // udivmodsi expects the frame to be valid still.
+
+ // The LSB of R9 indicates whether the quotient should be negated.
+ AND.0 r9,1,r15
+ BEQ skipQuotientNegation
+=-> LDL (FP)1,R[13:12] // Convenient point to restore link/fp
+
+ SUB.0 0,R4,R4
+ SUBB.0 0,R5,R5
+
+skipQuotientNegation:
+
+ // The MSB of R9 indicates whether the remainder should be negated.
+ ASR.0 R9,15,r15
+ BEQ epilogue
+
+ SUB.0 0,R6,R6
+ SUBB.0 0,R7,R7
+
+epilogue:
+
+ JR (R12)
+=-> LDL (FP)-2,R[9:8]
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __divmodsi4
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x8 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#64# 16#69# 16#76# 16#6d# 16#6f# 16#64# 16#73# 16#69# 16#34# 16#0# // Function name `_divmodsi4'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/lib1funcs.S b/gcc-4.9/libgcc/config/picochip/lib1funcs.S
new file mode 100644
index 000000000..d344170d2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/lib1funcs.S
@@ -0,0 +1,4 @@
+// picoChip ASM file
+// Fake libgcc asm file. This contains nothing, but is used to prevent gcc
+// getting upset about the lack of a lib1funcs.S file when LIB1ASMFUNCS is
+// defined to switch off the compilation of parts of libgcc.
diff --git a/gcc-4.9/libgcc/config/picochip/longjmp.S b/gcc-4.9/libgcc/config/picochip/longjmp.S
new file mode 100644
index 000000000..9370e9422
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/longjmp.S
@@ -0,0 +1,182 @@
+// picoChip ASM file
+//
+// Support for 32-bit arithmetic shift right.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.global _longjmp
+_longjmp:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &_longjmp = 0 bytes
+
+ LDL (R0)0, R[3:2]
+ LDL (R0)1, R[5:4]
+ LDL (R0)2, R[7:6]
+ LDL (R0)3, R[9:8]
+ LDL (R0)4, R[11:10]
+ LDL (R0)5, R[13:12]
+ LDW (R0)12, R14
+ LDW (R0)13, R1
+ JR (R12)
+=-> COPY.0 1,R0
+
+// picoChip Function Epilogue : longjmp
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#6c# 16#6f# 16#6e# 16#67# 16#6a# 16#6d# 16#70# 16#0# // Function name `longjmp'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/lshrsi3.S b/gcc-4.9/libgcc/config/picochip/lshrsi3.S
new file mode 100644
index 000000000..ad233d442
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/lshrsi3.S
@@ -0,0 +1,190 @@
+// picoChip ASM file
+//
+// Support for 32-bit logical shift right.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+.section .text
+
+.global ___lshrsi3
+___lshrsi3:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &___lshrsi3 = 4 bytes
+
+ // if (R2 > 15) goto _L2
+ SUB.0 15,R2,r15
+ JMPLT _L2
+=-> SUB.0 16,R2,R5 // R5 := R5 - R2 (HI)
+
+ LSR.0 R0,R2,R0 // R4 := R0 >> R2
+ LSR.0 R1,R2,R3 // R3 := R1 >> R2
+ // if (R2 == 0) goto _L4
+ LSL.0 R1,R5,R5 // R5 := R1 << R5
+ OR.0 R5,R0,R4 // R2 := R5 IOR R2 (HI)
+ SUB.0 R2,0,r15
+ COPYNE R4,R0 // R0 := R2
+ JR (R12) // Return to caller
+=-> COPY.0 R3,R1 // R1 := R3
+
+_L2:
+ LSR.0 R1,R2,R0 // R2 := R1 >> R2
+ JR (R12) // Return to caller
+=-> COPY.0 0,R1 // R3 := 0 (short constant)
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __lshrsi3
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x4 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#5f# 16#6c# 16#73# 16#68# 16#72# 16#72# 16#73# 16#69# 16#33# 16#0# // Function name `__lshrsi3'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+.section .endFile
diff --git a/gcc-4.9/libgcc/config/picochip/lshrsi3.c b/gcc-4.9/libgcc/config/picochip/lshrsi3.c
new file mode 100644
index 000000000..f100648e5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/lshrsi3.c
@@ -0,0 +1,76 @@
+/*
+
+picoChip GCC support for 32-bit logical shift right.
+
+Copyright (C) 2003-2014 Free Software Foundation, Inc.
+Contributed by Picochip Ltd.
+Maintained by Daniel Towner (daniel.towner@picochip.com)
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+typedef int HItype __attribute__ ((mode (HI)));
+typedef unsigned int UHItype __attribute__ ((mode (HI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+
+typedef struct USIstruct {
+ UHItype low, high;
+} USIstruct;
+
+typedef union USIunion {
+ USItype l;
+ USIstruct s;
+} USIunion;
+
+USItype __lshrsi3(USIunion value, HItype count) {
+ USIunion result;
+ int temp;
+
+ /* Ignore a zero count until we get into the (count < 16)
+ clause. This is slightly slower when shifting by zero, but faster
+ and smaller in all other cases (due to the better scheduling
+ opportunities available by putting the test near computational
+ instructions. */
+
+ if (count < 16) {
+ /* Shift low and high words by the count. */
+ result.s.low = value.s.low >> count;
+ result.s.high = value.s.high >> count;
+
+ /* There is now a hole in the upper `count' bits of the low
+ word. Shift the lower `count' bits of the upper word into the
+ low word. This only works when count isn't zero. */
+ if (count != 0) {
+ temp = value.s.high << (16 - count);
+ result.s.low |= temp;
+ }
+
+ } else {
+ /* Shift the upper word of the source into the lower word of the
+ result, and zero the result's upper word. Note that we actually
+ ned to shift by (count - 16), but as we are only using the
+ bottom 4 bits, this is equivalent to shifting by count. */
+ result.s.low = value.s.high >> count;
+ result.s.high = 0;
+
+ }
+
+ return result.l;
+
+}
diff --git a/gcc-4.9/libgcc/config/picochip/parityhi2.S b/gcc-4.9/libgcc/config/picochip/parityhi2.S
new file mode 100644
index 000000000..357e33dfe
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/parityhi2.S
@@ -0,0 +1,179 @@
+// picoChip ASM file
+//.file "ucmpsi2.c"
+//
+// Support for parity checks.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.align 8
+.global ___parityhi2
+___parityhi2:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &___parityhi2 = 0 bytes
+ XOR.0 [LSR R0,8],R0,R0
+ XOR.0 [LSR R0,4],R0,R0
+ XOR.0 [LSR R0,2],R0,R0
+ JR (R12) \ XOR.0 [LSR R0,1],R0,R0
+=-> AND.0 R0,1,R0
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __parityhi2
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#5f# 16#70# 16#61# 16#72# 16#69# 16#74# 16#79# 16#68# 16#69# 16#32# 16#0# // Function name `__parityhi2'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/popcounthi2.S b/gcc-4.9/libgcc/config/picochip/popcounthi2.S
new file mode 100644
index 000000000..e0f582422
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/popcounthi2.S
@@ -0,0 +1,201 @@
+// picoChip ASM file
+//.file "popcounthi2.S"
+//
+// Support for 16-bit population count.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+// The following code (taken from a newsgroup posting) was compiled, and then
+// hand assembled (a similar version is given in the Hacker's Delight
+// book, chapter 5).
+//
+// int
+// popcount (int value)
+// {
+// value = ((value & 0xAAAA) >> 1) + (value & 0x5555);
+// value = ((value & 0xCCCC) >> 2) + (value & 0x3333);
+// value = ((value & 0xF0F0) >> 4) + (value & 0x0F0F);
+// return ((value & 0xFF00) >> 8) + (value & 0x00FF);
+// }
+//
+// This assembly function is approx. 20x faster than a naive loop
+// implementation of the population count, but about 30% bigger
+// (45 bytes v. 34 bytes).
+
+.align 8
+.global ___popcounthi2
+___popcounthi2:
+
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &___popcounthi2 = 0 bytes
+
+ AND.0 [LSR R0,1],21845,R0 \ AND.1 R0,21845,R5
+ ADD.0 R0,R5,R0
+ AND.0 [LSR R0,2],13107,R0 \ AND.1 R0,13107,R5
+ ADD.0 R0,R5,R0 \ COPY.1 1807,R2
+ AND.0 [LSR R0,4],R2,R0 \ AND.1 R0,3855,R5
+ ADD.0 R0,R5,R0
+ JR (R12) \ AND.0 R0, 255, R5
+=-> ADD.0 [LSR R0,8],R5,R0
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : ___popcounthi2
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#5f# 16#70# 16#6f# 16#70# 16#63# 16#6f# 16#75# 16#6e# 16#74# 16#68# 16#69# 16#32# 16#0# // Function name `__popcounthi2'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/setjmp.S b/gcc-4.9/libgcc/config/picochip/setjmp.S
new file mode 100644
index 000000000..4993f2ecf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/setjmp.S
@@ -0,0 +1,182 @@
+// picoChip ASM file
+//
+// Support for 32-bit arithmetic shift right.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.global _setjmp
+_setjmp:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &_setjmp = 0 bytes
+
+ STL R[3:2],(R0)0
+ STL R[5:4],(R0)1
+ STL R[7:6],(R0)2
+ STL R[9:8],(R0)3
+ STL R[11:10],(R0)4
+ STL R[13:12],(R0)5
+ STW R14,(R0)12
+ STW R1,(R0)13
+ JR (R12)
+=-> COPY.0 0,R0
+
+// picoChip Function Epilogue : setjmp
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#73# 16#65# 16#74# 16#6a# 16#6d# 16#70# 16#0# // Function name `setjmp'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/subdi3.S b/gcc-4.9/libgcc/config/picochip/subdi3.S
new file mode 100644
index 000000000..47ed36311
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/subdi3.S
@@ -0,0 +1,191 @@
+// picoChip ASM file
+//
+// Support for 64-bit subtraction.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Hariharan Sandanagobalane (hariharan@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.align 8
+.global __subdi3
+__subdi3:
+
+_picoMark_FUNCTION_BEGIN=
+// picoChip Function Prologue : &__subdi3 = 4 bytes
+
+ // The first operand of sub is completely in registers r[2-5]
+ // The second operand of sub is in stack FP(0-3)
+ // and result need to be written pointed to by the register r0.
+ // All we need to do is to load the appropriate values, sub them
+ // appropriately (with sub or subb) and then store the values back.
+ ldw (FP)0, r1
+ stl r[7:6], (FP)-1
+ sub.0 r2, r1, r6
+ ldw (FP)1, r1
+ subb.0 r3, r1, r7
+ ldl (FP)1, r[3:2]
+ stl r[7:6], (r0)0
+ subb.0 r4, r2, r6
+ subb.0 r5, r3, r7
+ stl r[7:6], (r0)1
+ jr (r12)
+=-> ldl (FP)2, r[7:6]
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __subdi3
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x4 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#73# 16#75# 16#62# 16#64# 16#69# 16#33# 16#0# // Function name `_subdi3'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+.section .endFile
+
diff --git a/gcc-4.9/libgcc/config/picochip/t-picochip b/gcc-4.9/libgcc/config/picochip/t-picochip
new file mode 100644
index 000000000..4de5dbbdc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/t-picochip
@@ -0,0 +1,39 @@
+# Prevent some of the more complicated libgcc functions from being
+# compiled. This is because they are generally too big to fit into an
+# AE anyway, so there is no point in having them. Also, some don't
+# compile properly so we'll ignore them for the moment.
+LIB1ASMSRC = picochip/lib1funcs.S
+LIB1ASMFUNCS = _mulsc3 _divsc3
+
+# Compile the extra library functions.
+LIB2ADD = \
+ $(srcdir)/config/picochip/ashrsi3.S \
+ $(srcdir)/config/picochip/ashlsi3.S \
+ $(srcdir)/config/picochip/divmodhi4.S \
+ $(srcdir)/config/picochip/udivmodhi4.S \
+ $(srcdir)/config/picochip/divmodsi4.S \
+ $(srcdir)/config/picochip/udivmodsi4.S \
+ $(srcdir)/config/picochip/divmod15.S \
+ $(srcdir)/config/picochip/ucmpsi2.S \
+ $(srcdir)/config/picochip/cmpsi2.S \
+ $(srcdir)/config/picochip/clzsi2.S \
+ $(srcdir)/config/picochip/adddi3.S \
+ $(srcdir)/config/picochip/subdi3.S \
+ $(srcdir)/config/picochip/lshrsi3.S \
+ $(srcdir)/config/picochip/parityhi2.S \
+ $(srcdir)/config/picochip/popcounthi2.S
+
+# Special libgcc setup. Make single/double floating point the same,
+# and use our own include files.
+HOST_LIBGCC2_CFLAGS += -DDF=SF -I../../includes/
+
+# Switch off all debugging for the embedded libraries.
+# (embedded processors need small libraries by default).
+# NOTE: If the debug level is increased, turn off instruction scheduling.
+LIBGCC2_DEBUG_CFLAGS = -g0
+
+# Turn off the building of exception handling libraries.
+LIB2ADDEH =
+
+# Turn off ranlib on target libraries.
+RANLIB_FOR_TARGET = cat
diff --git a/gcc-4.9/libgcc/config/picochip/ucmpsi2.S b/gcc-4.9/libgcc/config/picochip/ucmpsi2.S
new file mode 100644
index 000000000..49cd7e648
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/ucmpsi2.S
@@ -0,0 +1,209 @@
+// picoChip ASM file
+//.file "ucmpsi2.c"
+//
+// Support for 32-bit unsigned compare.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+//
+// Compiled from the following, and then hand optimised.
+//
+// int __ucmpsi2 (USItype x, USItype y)
+// {
+//
+// USIunion lx; lx.l = x;
+// USIunion ly; ly.l = y;
+//
+// if (lx.s.high < ly.s.high)
+// return 0;
+// else if (lx.s.high > ly.s.high)
+// return 2;
+// if (lx.s.low < ly.s.low)
+// return 0;
+// else if (lx.s.low > ly.s.low)
+// return 2;
+// return 1;
+// }
+
+.section .text
+
+.align 8
+.global ___ucmpsi2
+___ucmpsi2:
+_picoMark_FUNCTION_BEGIN=
+// picoChip Function Prologue : &___ucmpsi2 = 0 bytes
+ SUB.0 R1,R3,r15
+
+ BLO _L1
+=-> SUB.0 R3,R1,r15 \ COPY.1 0,R5
+
+ BLO _L1
+=-> SUB.0 R0,R2,r15 \ COPY.1 2,R5
+
+ BLO _L1
+=-> SUB.0 R2,R0,r15 \ COPY.1 0,R5
+
+ BLO _L1
+=-> COPY.0 2,R5
+
+ COPY.0 1,R5
+_L1:
+ JR (R12)
+=-> COPY.0 R5,R0 // R0 := R5
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : __ucmpsi2
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#5f# 16#75# 16#63# 16#6d# 16#70# 16#73# 16#69# 16#32# 16#0# // Function name `__ucmpsi2'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/udivmodhi4.S b/gcc-4.9/libgcc/config/picochip/udivmodhi4.S
new file mode 100644
index 000000000..920eb375a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/udivmodhi4.S
@@ -0,0 +1,238 @@
+// picoChip ASM file
+//
+// Support for 16-bit unsigned division/modulus.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.global __udivmodhi4
+__udivmodhi4:
+_picoMark_FUNCTION_BEGIN=
+
+// picoChip Function Prologue : &__udivmodhi4 = 6 bytes
+
+ // 16-bit unsigned division. The divstep function is only capable of
+ // handling 15-bit division (plus a sign to give 16-bits). It is not
+ // capable of handling unsigned division directly. Instead, take
+ // advantage of the special property that
+ // ((divisor / 2) / dividend) * 2 will be almost good enough. The
+ // error in the result is only 0 or 1, and this can be easily
+ // tested and corrected. A full description of the algorithm can
+ // be found in `Hacker's Delight', by Henry Warren, page 146.
+
+ // Input:
+ // r0 - dividend
+ // r1 - divisor
+ // Output:
+ // r0 - quotient
+ // r1 - remainder
+
+ // Note that the lr, and original inputs are speculatively saved. They
+ // will only be restored if the 15-bit division function is called.
+
+ sub.0 r1,0,r15 \ stl r[0:1],(fp)-1
+ bge divisorIs15bit
+=-> sub.0 r0,r1,r2 \ stw lr,(fp)-3
+
+ // The divisor is >= 2^15.
+ bhs quotientIs1
+
+ // The dividend < divisor. The quotient is thus 0, and the
+ // remainder is the dividend.
+ copy.0 r0,r1 \ jr (lr)
+=-> copy.0 0,r0
+
+quotientIs1:
+ // The dividend >= divisor. The quotient is thus 1, and the
+ // remainder can be computed directly by subtraction (i.e., the
+ // result of the comparison already performed to branch here).
+ jr (lr) \ copy.0 r2,r1
+=-> copy.0 1,r0
+
+divisorIs15bit:
+ // The divisor is < 2^15.
+
+ // Divide the original dividend by 2, and call the 15-bit division.
+ // Note that the original dividend is stored in r5, which is
+ // known to be unused by the called function, so that
+ // a memory stall isn't introduced immediately after the
+ // function returns, to reload this value from memory.
+
+ jl (&__divmod15) \ copy.0 r0,r5 // fn_call &__divmod15
+=-> lsr.0 r0,1,r0
+
+ // Compute the new quotient and remainder by multiplying them by 2.
+ // The remainder will be 1 out, if the original dividend was odd.
+ and.0 r5,1,r5 \ ldl (fp)-1,r[2:3]
+ add.0 [lsl r1,1],r5,r1 \ lsl.1 r0,1,r0
+
+ // The error in the quotient is 0 or 1. The error can be determined
+ // by comparing the remainder to the original divisor. If the
+ // remainder is bigger, then an error of 1 has been introduced.
+ sub.0 r1,r3,r15 \ ldw (fp)-3,lr
+ blo noCompensation
+=-> nop
+ add.0 r0,1,r0 \ sub.1 r1,r3,r1
+noCompensation:
+ jr (lr)
+
+_picoMark_FUNCTION_END=
+// picoChip Function Epilogue : udivmodhi4
+
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x6 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#75# 16#64# 16#69# 16#76# 16#6d# 16#6f# 16#64# 16#68# 16#69# 16#34# 16#0# // Function name `_udivmodhi4'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/picochip/udivmodsi4.S b/gcc-4.9/libgcc/config/picochip/udivmodsi4.S
new file mode 100644
index 000000000..c468bc0e3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/picochip/udivmodsi4.S
@@ -0,0 +1,318 @@
+// picoChip ASM file
+//
+// Support for 32-bit unsigned division/modulus.
+//
+// Copyright (C) 2003-2014 Free Software Foundation, Inc.
+// Contributed by Picochip Ltd.
+// Maintained by Daniel Towner (daniel.towner@picochip.com)
+//
+// This file is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+//
+// This file is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+//
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+.section .text
+
+.align 8
+.global __udivmodsi4
+__udivmodsi4:
+_picoMark_FUNCTION_BEGIN=
+// picoChip Function Prologue : &__udivmodsi4 = 24 bytes
+
+ // Schedule the register saves alongside the special cases, so that
+ // if the special cases fail, the registers will have already
+ // been stored onto the stack.
+ SUB.0 R3,R1,r15 \ STL R[13:12],(FP)-1
+ BHS skipCommonCase \ STL R[9:8],(FP)-4
+=-> SUB.0 R2,1,r15 \ STL R[11:10],(FP)-3
+
+_L2:
+ // Flags set above, and in _L2 caller.
+ BNE restOfCode
+=-> SUB.0 R3,0,r15
+ BNE restOfCode
+=-> COPY.0 R0,R4 \ COPY.1 R1,R5
+ JR (R12) // Return to caller
+=-> COPY.0 0,R6 \ COPY.1 0,R7
+ // Never reach here
+
+skipCommonCase:
+ SUB.0 R3,R1,r15
+ BNE _L3 // (Reversed branch)
+=-> SUB.0 R2,R0,r15 // Must be set in delay slot, so ready by _L9
+
+_L9:
+ BLO _L2 // (Reversed branch)
+=-> SUB.0 R2,1,r15
+
+_L3:
+ SUB.0 R2,R0,r15
+ BEQ _L10 // (Reversed branch)
+=-> SUB.0 R1,R3,r15 // Set flags for branch at _L10
+
+_L4:
+ // greater than
+ COPY.0 0,R4 \ COPY.1 0,R5 \ JR (R12) // Return to caller
+=-> COPY.0 R0,R6 \ COPY.1 R1,R7
+ // Doesn't reach here.
+
+_L10:
+ // Flags set in _L10 call delay slot.
+ BNE _L4
+=-> COPY.0 1,R4 \ COPY.1 0,R5
+ JR (R12) // Return to caller
+=-> COPY.0 0,R6 \ COPY.1 0,R7
+
+restOfCode:
+
+// Prologue
+
+ // Register saves scheduled alongside special cases above.
+ ADD.0 FP,-20,FP \ STW R14,(FP)-4
+
+ // The following can be scheduled together.
+ // dividend in R[9:8] (from R[1:0])
+ // divisor in R[7:6] (from R[3:2])
+ // R14 := clzsi2 (dividend)
+ // R0 := clzsi2 (divisor)
+ JL (&__clzsi2) \ COPY.0 R0,R8 \ COPY.1 R1,R9
+=-> COPY.0 R2,R6 \ COPY.1 R3,R7
+ COPY.0 R0,R14 \ JL (&__clzsi2)
+=-> COPY.0 R6,R0 \ COPY.1 R7,R1
+
+ // R14 := R0 - R14
+ SUB.0 R0,R14,R14
+
+ ADD.0 R14,1,R0 // R0 := R14 + 1 (HI)
+
+ // R[11:10] = R[7,6] << R14
+ SUB.0 15,R14,r15
+ LSL.0 R6,R14,R11 \ BLT setupDivstepLoop
+=-> SUB.0 0,R14,R4 \ COPY.1 0,R10
+
+ // Zero shift is a special case. Shifting by zero within a 16-bit
+ // source object is fine, but don't execute the OR of the right-shift
+ // into the final result.
+ LSL.0 R7,R14,R11 \ BEQ setupDivstepLoop
+=-> LSL.0 R6,R14,R10
+
+ LSR.0 R6,R4,R4
+ OR.0 R11,R4,R11
+
+setupDivstepLoop:
+
+ // R[5:4] := R[9:8] (SI)
+ COPY.0 R8,R4 \ COPY.1 R9,R5
+ COPY.0 0,R6 \ COPY.1 R0,R8
+
+ // Store original value of loopCount for use after the loop.
+ // The Subtraction is handled in the tail of the loop iteration
+ // after this point.
+ SUB.0 R4,R10,R0 \ COPY.1 R8,R14
+
+ // workingResult in R4,5,6
+ // temps in r0,1,2 and r7
+ // alignedDivisor in R10,11
+ // loopCount in r8
+ // r3, r9 scratch, used for renaming.
+
+loopStart:
+ // R0 := R4 - zeroExtend (R10) - only need 33-bits (i.e., 48-bits)
+ SUBB.0 R5,R11,R1 \ LSR.1 R0,15,R3
+ SUBB.0 R6,0,R2 \ LSR.1 R1,15,R6
+
+ // if (carry) goto shiftOnly
+ SUB.0 R8,1,R8 \ BNE shiftOnly
+=-> LSR.0 R4,15,R7 \ LSL.1 R1,1,R9
+
+ OR.0 [LSL R0,1],1,R4 \ BNE loopStart
+=-> SUB.0 R4,R10,R0 \ OR.1 R9,R3,R5
+
+ BRA loopEnd
+
+shiftOnly:
+
+ OR.0 [LSL R5,1],R7,R5 \ BNE loopStart \ LSR.1 R5,15,R6
+=-> SUB.0 [LSL R4,1],R10,R0 \LSL.1 R4,1,R4
+
+// End of loop
+loopEnd:
+
+ // Schedule the computation of the upper word after shifting
+ // alongside the decision over whether to branch, and the register
+ // restores.
+ // R10 is filled with a useful constant.
+ SUB.0 15,r14,r15 \ LDL (FP)4,R[13:12]
+ SUB.1 0,R14,R1 // Don't set flags!
+ LSL.0 R6,R1,R3 \ LDL (FP)-4,R[9:8]
+
+ BLT remainderHasMoreThan16Bits \ LSR.0 R5,R14,R7 \ COPY.1 -1,R10
+=-> LSL.0 R5,R1,R2 \ OR.1 R7,R3,R3
+
+ LSR.0 R4,R14,R3 \ COPY.1 R3,R7
+ BRA epilogue \ LSR.0 -1,R1,R0 \ COPY.1 0,R5
+=-> OR.0 R3,R2,R6 \ AND.1 R0,R4,R4
+
+remainderHasMoreThan16Bits:
+
+ LSL.0 R10,R14,R1 \ COPY.1 R3,R6
+ XOR.0 R10,R1,R1 \ COPY.1 0,R7
+ AND.0 R1,R5,R5
+
+epilogue:
+
+ JR (R12) \ LDW (FP)-4,R14
+=-> LDL (FP)-3,R[11:10]
+
+_picoMark_FUNCTION_END=
+
+// picoChip Function Epilogue : udivmodsi4
+
+//============================================================================
+// All DWARF information between this marker, and the END OF DWARF
+// marker should be included in the source file. Search for
+// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and
+// provide the relevant information. Add markers called
+// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the
+// function in question.
+//============================================================================
+
+//============================================================================
+// Frame information.
+//============================================================================
+
+.section .debug_frame
+_picoMark_DebugFrame=
+
+// Common CIE header.
+.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin
+_picoMark_CieBegin=
+.unalignedInitLong 0xffffffff
+.initByte 0x1 // CIE Version
+.ascii 16#0# // CIE Augmentation
+.uleb128 0x1 // CIE Code Alignment Factor
+.sleb128 2 // CIE Data Alignment Factor
+.initByte 0xc // CIE RA Column
+.initByte 0xc // DW_CFA_def_cfa
+.uleb128 0xd
+.uleb128 0x0
+.align 2
+_picoMark_CieEnd=
+
+// FDE
+_picoMark_LSFDE0I900821033007563=
+.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin
+_picoMark_FdeBegin=
+.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location
+.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x18 // <-- FUNCTION_STACK_SIZE_GOES_HERE
+.initByte 0x4 // DW_CFA_advance_loc4
+.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN
+.initByte 0xe // DW_CFA_def_cfa_offset
+.uleb128 0x0
+.align 2
+_picoMark_FdeEnd=
+
+//============================================================================
+// Abbrevation information.
+//============================================================================
+
+.section .debug_abbrev
+_picoMark_ABBREVIATIONS=
+
+.section .debug_abbrev
+ .uleb128 0x1 // (abbrev code)
+ .uleb128 0x11 // (TAG: DW_TAG_compile_unit)
+ .initByte 0x1 // DW_children_yes
+ .uleb128 0x10 // (DW_AT_stmt_list)
+ .uleb128 0x6 // (DW_FORM_data4)
+ .uleb128 0x12 // (DW_AT_high_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x11 // (DW_AT_low_pc)
+ .uleb128 0x1 // (DW_FORM_addr)
+ .uleb128 0x25 // (DW_AT_producer)
+ .uleb128 0x8 // (DW_FORM_string)
+ .uleb128 0x13 // (DW_AT_language)
+ .uleb128 0x5 // (DW_FORM_data2)
+ .uleb128 0x3 // (DW_AT_name)
+ .uleb128 0x8 // (DW_FORM_string)
+.initByte 0x0
+.initByte 0x0
+
+ .uleb128 0x2 ;# (abbrev code)
+ .uleb128 0x2e ;# (TAG: DW_TAG_subprogram)
+.initByte 0x0 ;# DW_children_no
+ .uleb128 0x3 ;# (DW_AT_name)
+ .uleb128 0x8 ;# (DW_FORM_string)
+ .uleb128 0x11 ;# (DW_AT_low_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+ .uleb128 0x12 ;# (DW_AT_high_pc)
+ .uleb128 0x1 ;# (DW_FORM_addr)
+.initByte 0x0
+.initByte 0x0
+
+.initByte 0x0
+
+//============================================================================
+// Line information. DwarfLib requires this to be present, but it can
+// be empty.
+//============================================================================
+
+.section .debug_line
+_picoMark_LINES=
+
+//============================================================================
+// Debug Information
+//============================================================================
+.section .debug_info
+
+//Fixed header.
+.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN
+_picoMark_DEBUG_INFO_BEGIN=
+.unalignedInitWord 0x2
+.unalignedInitLong _picoMark_ABBREVIATIONS
+.initByte 0x2
+
+// Compile unit information.
+.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit)
+.unalignedInitLong _picoMark_LINES
+.unalignedInitWord _picoMark_FUNCTION_END
+.unalignedInitWord _picoMark_FUNCTION_BEGIN
+// Producer is `picoChip'
+.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00#
+.unalignedInitWord 0xcafe // ASM language
+.ascii 16#0# // Name. DwarfLib expects this to be present.
+
+.uleb128 0x2 ;# (DIE DW_TAG_subprogram)
+
+// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex
+// digit is specified using the format 16#XX#
+.ascii 16#5f# 16#75# 16#64# 16#69# 16#76# 16#6d# 16#6f# 16#64# 16#73# 16#69# 16#34# 16#0# // Function name `_udivmodsi4'
+.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc
+.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc
+
+.initByte 0x0 // end of compile unit children.
+
+_picoMark_DEBUG_INFO_END=
+
+//============================================================================
+// END OF DWARF
+//============================================================================
+.section .endFile
+// End of picoChip ASM file
diff --git a/gcc-4.9/libgcc/config/rl78/cmpsi2.S b/gcc-4.9/libgcc/config/rl78/cmpsi2.S
new file mode 100644
index 000000000..e87e15dea
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/cmpsi2.S
@@ -0,0 +1,121 @@
+; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+
+#include "vregs.h"
+
+ .text
+
+ ;; int __cmpsi2 (signed long A, signed long B)
+ ;;
+ ;; Performs a signed comparison of A and B.
+ ;; If A is less than B it returns 0. If A is greater
+ ;; than B it returns 2. If they are equal it returns 1.
+
+ .global ___cmpsi2
+ .type ___cmpsi2, @function
+___cmpsi2:
+ ;; A is at [sp+4]
+ ;; B is at [sp+8]
+ ;; Result put in R8
+
+ ;; Initialise default return value.
+ onew bc
+
+ ;; Compare the high words.
+ movw ax, [sp + 10]
+ movw de, ax
+ movw ax, [sp + 6]
+ cmpw ax, de
+ skz
+ br !!.Lconvert_to_signed
+
+.Lcompare_bottom_words:
+ ;; The top words are equal - compare the bottom words.
+ ;; Note - code from __ucmpsi2 branches into here.
+ movw ax, [sp + 8]
+ movw de, ax
+ movw ax, [sp + 4]
+ cmpw ax, de
+ sknz
+ br !!.Lless_than_or_greater_than
+ ;; The words are equal - return 1.
+ ;; Note - we could branch to the return code at the end of the
+ ;; function but a branch instruction takes 4 bytes, and the
+ ;; return sequence itself is only 4 bytes long...
+ movw ax, bc
+ movw r8, ax
+ ret
+
+.Lconvert_to_signed:
+ ;; The top words are different. Unfortunately the comparison
+ ;; is always unsigned, so to get a signed result we XOR the CY
+ ;; flag with the top bits of AX and DE.
+ xor1 cy, a.7
+ mov a, d
+ xor1 cy, a.7
+ ;; Fall through.
+
+.Lless_than_or_greater_than:
+ ;; We now have a signed less than/greater than result in CY.
+ ;; Return 0 for less than, 2 for greater than.
+ ;; Note - code from __ucmpsi2 branches into here.
+ incw bc
+ sknc
+ clrw bc
+
+ ;; Get the result value, currently in BC, into r8
+ movw ax, bc
+ movw r8, ax
+ ret
+
+ .size ___cmpsi2, . - ___cmpsi2
+
+
+ ;; int __ucmpsi2 (unsigned long A, unsigned long B)
+ ;;
+ ;; Performs an unsigned comparison of A and B.
+ ;; If A is less than B it returns 0. If A is greater
+ ;; than B it returns 2. If they are equal it returns 1.
+
+ .global ___ucmpsi2
+ .type ___ucmpsi2, @function
+___ucmpsi2:
+ ;; A is at [sp+4]
+ ;; B is at [sp+8]
+ ;; Result put in R8..R9
+
+ ;; Initialise default return value.
+ onew bc
+
+ ;; Compare the high words.
+ movw ax, [sp + 10]
+ movw de, ax
+ movw ax, [sp + 6]
+ cmpw ax, de
+ skz
+ ;; Note: These branches go into the __cmpsi2 code!
+ br !!.Lless_than_or_greater_than
+ br !!.Lcompare_bottom_words
+
+ .size ___ucmpsi2, . - ___ucmpsi2
+ \ No newline at end of file
diff --git a/gcc-4.9/libgcc/config/rl78/divmodhi.S b/gcc-4.9/libgcc/config/rl78/divmodhi.S
new file mode 100644
index 000000000..e08345a32
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/divmodhi.S
@@ -0,0 +1,337 @@
+/* HImode div/mod functions for the GCC support library for the Renesas RL78 processors.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __RL78_G10__
+
+#include "vregs.h"
+
+ .macro make_generic which,need_result
+
+ .if \need_result
+ quot = r8
+ num = r10
+ den = r12
+ bit = r14
+ .else
+ num = r8
+ quot = r10
+ den = r12
+ bit = r14
+ .endif
+
+ quotB0 = quot
+ quotB1 = quot+1
+
+ numB0 = num
+ numB1 = num+1
+
+ denB0 = den
+ denB1 = den+1
+
+ bitB0 = bit
+ bitB1 = bit+1
+
+#if 1
+#define bit bc
+#define bitB0 c
+#define bitB1 b
+#endif
+
+num_lt_den\which:
+ .if \need_result
+ movw r8, #0
+ .else
+ movw ax, [sp+8]
+ movw r8, ax
+ .endif
+ ret
+
+ ;; These routines leave DE alone - the signed functions use DE
+ ;; to store sign information that must remain intact
+
+ .if \need_result
+
+generic_div:
+
+ .else
+
+generic_mod:
+
+ .endif
+
+ ;; (quot,rem) = 8[sp] /% 10[sp]
+
+ movw hl, sp
+ movw ax, [hl+10] ; denH
+ cmpw ax, [hl+8] ; numH
+ bh $num_lt_den\which
+
+ ;; (quot,rem) = 16[sp] /% 20[sp]
+
+ ;; copy numerator
+ movw ax, [hl+8]
+ movw num, ax
+
+ ;; copy denomonator
+ movw ax, [hl+10]
+ movw den, ax
+
+ movw ax, den
+ cmpw ax, #0
+ bnz $den_not_zero\which
+ movw num, #0
+ ret
+
+den_not_zero\which:
+ .if \need_result
+ ;; zero out quot
+ movw quot, #0
+ .endif
+
+ ;; initialize bit to 1
+ movw bit, #1
+
+; while (den < num && !(den & (1L << BITS_MINUS_1)))
+
+shift_den_bit\which:
+ movw ax, den
+ mov1 cy,a.7
+ bc $enter_main_loop\which
+ cmpw ax, num
+ bh $enter_main_loop\which
+
+ ;; den <<= 1
+; movw ax, den ; already has it from the cmpw above
+ shlw ax, 1
+ movw den, ax
+
+ ;; bit <<= 1
+ .if \need_result
+#ifdef bit
+ shlw bit, 1
+#else
+ movw ax, bit
+ shlw ax, 1
+ movw bit, ax
+#endif
+ .else
+ ;; if we don't need to compute the quotent, we don't need an
+ ;; actual bit *mask*, we just need to keep track of which bit
+ inc bitB0
+ .endif
+
+ br $shift_den_bit\which
+
+main_loop\which:
+
+ ;; if (num >= den) (cmp den > num)
+ movw ax, den
+ cmpw ax, num
+ bh $next_loop\which
+
+ ;; num -= den
+ movw ax, num
+ subw ax, den
+ movw num, ax
+
+ .if \need_result
+ ;; res |= bit
+ mov a, quotB0
+ or a, bitB0
+ mov quotB0, a
+ mov a, quotB1
+ or a, bitB1
+ mov quotB1, a
+ .endif
+
+next_loop\which:
+
+ ;; den >>= 1
+ movw ax, den
+ shrw ax, 1
+ movw den, ax
+
+ .if \need_result
+ ;; bit >>= 1
+ movw ax, bit
+ shrw ax, 1
+ movw bit, ax
+ .else
+ dec bitB0
+ .endif
+
+enter_main_loop\which:
+ .if \need_result
+ movw ax, bit
+ cmpw ax, #0
+ .else
+ cmp0 bitB0
+ .endif
+ bnz $main_loop\which
+
+main_loop_done\which:
+ ret
+ .endm
+
+ make_generic _d 1
+ make_generic _m 0
+
+;----------------------------------------------------------------------
+
+ .global ___udivhi3
+ .type ___udivhi3,@function
+___udivhi3:
+ ;; r8 = 4[sp] / 6[sp]
+ call $!generic_div
+ ret
+ .size ___udivhi3, . - ___udivhi3
+
+
+ .global ___umodhi3
+ .type ___umodhi3,@function
+___umodhi3:
+ ;; r8 = 4[sp] % 6[sp]
+ call $!generic_mod
+ ret
+ .size ___umodhi3, . - ___umodhi3
+
+;----------------------------------------------------------------------
+
+ .macro neg_ax
+ movw hl, ax
+ movw ax, #0
+ subw ax, [hl]
+ movw [hl], ax
+ .endm
+
+ .global ___divhi3
+ .type ___divhi3,@function
+___divhi3:
+ ;; r8 = 4[sp] / 6[sp]
+ movw de, #0
+ mov a, [sp+5]
+ mov1 cy, a.7
+ bc $div_signed_num
+ mov a, [sp+7]
+ mov1 cy, a.7
+ bc $div_signed_den
+ call $!generic_div
+ ret
+
+div_signed_num:
+ ;; neg [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov d, #1
+ mov a, [sp+7]
+ mov1 cy, a.7
+ bnc $div_unsigned_den
+div_signed_den:
+ ;; neg [sp+6]
+ movw ax, sp
+ addw ax, #6
+ neg_ax
+ mov e, #1
+div_unsigned_den:
+ call $!generic_div
+
+ mov a, d
+ cmp0 a
+ bz $div_skip_restore_num
+ ;; We have to restore the numerator [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov a, d
+div_skip_restore_num:
+ xor a, e
+ bz $div_no_neg
+ movw ax, #r8
+ neg_ax
+div_no_neg:
+ mov a, e
+ cmp0 a
+ bz $div_skip_restore_den
+ movw ax, sp
+ addw ax, #6
+ neg_ax
+div_skip_restore_den:
+ ret
+ .size ___divhi3, . - ___divhi3
+
+
+ .global ___modhi3
+ .type ___modhi3,@function
+___modhi3:
+ ;; r8 = 4[sp] % 6[sp]
+ movw de, #0
+ mov a, [sp+5]
+ mov1 cy, a.7
+ bc $mod_signed_num
+ mov a, [sp+7]
+ mov1 cy, a.7
+ bc $mod_signed_den
+ call $!generic_mod
+ ret
+
+mod_signed_num:
+ ;; neg [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov d, #1
+ mov a, [sp+7]
+ mov1 cy, a.7
+ bnc $mod_unsigned_den
+mod_signed_den:
+ ;; neg [sp+6]
+ movw ax, sp
+ addw ax, #6
+ neg_ax
+mod_unsigned_den:
+ call $!generic_mod
+
+ mov a, d
+ cmp0 a
+ bz $mod_no_neg
+ movw ax, #r8
+ neg_ax
+ ;; Also restore numerator
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+mod_no_neg:
+ mov a, e
+ cmp0 a
+ bz $mod_skip_restore_den
+ movw ax, sp
+ addw ax, #6
+ neg_ax
+mod_skip_restore_den:
+ ret
+ .size ___modhi3, . - ___modhi3
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rl78/divmodqi.S b/gcc-4.9/libgcc/config/rl78/divmodqi.S
new file mode 100644
index 000000000..0d13a2fd6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/divmodqi.S
@@ -0,0 +1,310 @@
+/* QImode div/mod functions for the GCC support library for the Renesas RL78 processors.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __RL78_G10__
+
+#include "vregs.h"
+
+ .macro make_generic which,need_result
+
+ .if \need_result
+ quot = r8
+ num = r10
+ den = r12
+ bit = r14
+ .else
+ num = r8
+ quot = r10
+ den = r12
+ bit = r14
+ .endif
+
+#if 1
+#define bit b
+#define den c
+#define bitden bc
+#endif
+
+num_lt_den\which:
+ .if \need_result
+ mov r8, #0
+ .else
+ mov a, [hl+4]
+ mov r8, a
+ .endif
+ ret
+
+num_eq_den\which:
+ .if \need_result
+ mov r8, #1
+ .else
+ mov r8, #0
+ .endif
+ ret
+
+den_is_zero\which:
+ mov r8, #0xff
+ ret
+
+ ;; These routines leave DE alone - the signed functions use DE
+ ;; to store sign information that must remain intact
+
+ .if \need_result
+
+generic_div:
+
+ .else
+
+generic_mod:
+
+ .endif
+
+ ;; (quot,rem) = 4[hl] /% 6[hl]
+
+ mov a, [hl+4] ; num
+ cmp a, [hl+6] ; den
+ bz $num_eq_den\which
+ bnh $num_lt_den\which
+
+ ;; copy numerator
+; mov a, [hl+4] ; already there from above
+ mov num, a
+
+ ;; copy denomonator
+ mov a, [hl+6]
+ mov den, a
+
+ cmp0 den
+ bz $den_is_zero\which
+
+den_not_zero\which:
+ .if \need_result
+ ;; zero out quot
+ mov quot, #0
+ .endif
+
+ ;; initialize bit to 1
+ mov bit, #1
+
+; while (den < num && !(den & (1L << BITS_MINUS_1)))
+
+shift_den_bit\which:
+ .macro sdb_one\which
+ mov a, den
+ mov1 cy,a.7
+ bc $enter_main_loop\which
+ cmp a, num
+ bh $enter_main_loop\which
+
+ ;; den <<= 1
+; mov a, den ; already has it from the cmpw above
+ shl a, 1
+ mov den, a
+
+ ;; bit <<= 1
+ shl bit, 1
+ .endm
+
+ sdb_one\which
+ sdb_one\which
+
+ br $shift_den_bit\which
+
+main_loop\which:
+
+ ;; if (num >= den) (cmp den > num)
+ mov a, den
+ cmp a, num
+ bh $next_loop\which
+
+ ;; num -= den
+ mov a, num
+ sub a, den
+ mov num, a
+
+ .if \need_result
+ ;; res |= bit
+ mov a, quot
+ or a, bit
+ mov quot, a
+ .endif
+
+next_loop\which:
+
+ ;; den, bit >>= 1
+ movw ax, bitden
+ shrw ax, 1
+ movw bitden, ax
+
+enter_main_loop\which:
+ cmp0 bit
+ bnz $main_loop\which
+
+main_loop_done\which:
+ ret
+ .endm
+
+ make_generic _d 1
+ make_generic _m 0
+
+;----------------------------------------------------------------------
+
+ .global ___udivqi3
+ .type ___udivqi3,@function
+___udivqi3:
+ ;; r8 = 4[sp] / 6[sp]
+ movw hl, sp
+ br $!generic_div
+ .size ___udivqi3, . - ___udivqi3
+
+
+ .global ___umodqi3
+ .type ___umodqi3,@function
+___umodqi3:
+ ;; r8 = 4[sp] % 6[sp]
+ movw hl, sp
+ br $!generic_mod
+ .size ___umodqi3, . - ___umodqi3
+
+;----------------------------------------------------------------------
+
+ .macro neg_ax
+ movw hl, ax
+ mov a, #0
+ sub a, [hl]
+ mov [hl], a
+ .endm
+
+ .global ___divqi3
+ .type ___divqi3,@function
+___divqi3:
+ ;; r8 = 4[sp] / 6[sp]
+ movw hl, sp
+ movw de, #0
+ mov a, [sp+4]
+ mov1 cy, a.7
+ bc $div_signed_num
+ mov a, [sp+6]
+ mov1 cy, a.7
+ bc $div_signed_den
+ br $!generic_div
+
+div_signed_num:
+ ;; neg [sp+4]
+ mov a, #0
+ sub a, [hl+4]
+ mov [hl+4], a
+ mov d, #1
+ mov a, [sp+6]
+ mov1 cy, a.6
+ bnc $div_unsigned_den
+div_signed_den:
+ ;; neg [sp+6]
+ mov a, #0
+ sub a, [hl+6]
+ mov [hl+6], a
+ mov e, #1
+div_unsigned_den:
+ call $!generic_div
+
+ mov a, d
+ cmp0 a
+ bz $div_skip_restore_num
+ ;; We have to restore the numerator [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov a, d
+div_skip_restore_num:
+ xor a, e
+ bz $div_no_neg
+ movw ax, #r8
+ neg_ax
+div_no_neg:
+ mov a, e
+ cmp0 a
+ bz $div_skip_restore_den
+ movw ax, sp
+ addw ax, #6
+ neg_ax
+div_skip_restore_den:
+ ret
+ .size ___divqi3, . - ___divqi3
+
+
+ .global ___modqi3
+ .type ___modqi3,@function
+___modqi3:
+ ;; r8 = 4[sp] % 6[sp]
+ movw hl, sp
+ movw de, #0
+ mov a, [hl+4]
+ mov1 cy, a.7
+ bc $mod_signed_num
+ mov a, [hl+6]
+ mov1 cy, a.7
+ bc $mod_signed_den
+ br $!generic_mod
+
+mod_signed_num:
+ ;; neg [sp+4]
+ mov a, #0
+ sub a, [hl+4]
+ mov [hl+4], a
+ mov d, #1
+ mov a, [hl+6]
+ mov1 cy, a.7
+ bnc $mod_unsigned_den
+mod_signed_den:
+ ;; neg [sp+6]
+ mov a, #0
+ sub a, [hl+6]
+ mov [hl+6], a
+ mov e, #1
+mod_unsigned_den:
+ call $!generic_mod
+
+ mov a, d
+ cmp0 a
+ bz $mod_no_neg
+ mov a, #0
+ sub a, r8
+ mov r8, a
+ ;; Also restore numerator
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+mod_no_neg:
+ mov a, e
+ cmp0 a
+ bz $mod_skip_restore_den
+ movw ax, sp
+ addw ax, #6
+ neg_ax
+mod_skip_restore_den:
+ ret
+ .size ___modqi3, . - ___modqi3
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rl78/divmodsi.S b/gcc-4.9/libgcc/config/rl78/divmodsi.S
new file mode 100644
index 000000000..fac0a6090
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/divmodsi.S
@@ -0,0 +1,521 @@
+/* SImode div/mod functions for the GCC support library for the Renesas RL78 processors.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __RL78_G10__
+
+#include "vregs.h"
+
+ .macro make_generic which,need_result
+
+ .if \need_result
+ quot = r8
+ num = r12
+ den = r16
+ bit = r20
+ .else
+ num = r8
+ quot = r12
+ den = r16
+ bit = r20
+ .endif
+
+ quotH = quot+2
+ quotL = quot
+ quotB0 = quot
+ quotB1 = quot+1
+ quotB2 = quot+2
+ quotB3 = quot+3
+
+ numH = num+2
+ numL = num
+ numB0 = num
+ numB1 = num+1
+ numB2 = num+2
+ numB3 = num+3
+
+#define denH bc
+ denL = den
+ denB0 = den
+ denB1 = den+1
+#define denB2 c
+#define denB3 b
+
+ bitH = bit+2
+ bitL = bit
+ bitB0 = bit
+ bitB1 = bit+1
+ bitB2 = bit+2
+ bitB3 = bit+3
+
+num_lt_den\which:
+ .if \need_result
+ movw r8, #0
+ movw r10, #0
+ .else
+ movw ax, [sp+8]
+ movw r8, ax
+ movw ax, [sp+10]
+ movw r10, ax
+ .endif
+ ret
+
+shift_den_bit16\which:
+ movw ax, denL
+ movw denH, ax
+ movw denL, #0
+ .if \need_result
+ movw ax, bitL
+ movw bitH, ax
+ movw bitL, #0
+ .else
+ mov a, bit
+ add a, #16
+ mov bit, a
+ .endif
+ br $shift_den_bit\which
+
+ ;; These routines leave DE alone - the signed functions use DE
+ ;; to store sign information that must remain intact
+
+ .if \need_result
+
+generic_div:
+
+ .else
+
+generic_mod:
+
+ .endif
+
+ ;; (quot,rem) = 8[sp] /% 12[sp]
+
+ movw hl, sp
+ movw ax, [hl+14] ; denH
+ cmpw ax, [hl+10] ; numH
+ movw ax, [hl+12] ; denL
+ sknz
+ cmpw ax, [hl+8] ; numL
+ bh $num_lt_den\which
+
+ sel rb2
+ push ax ; denL
+; push bc ; denH
+ push de ; bitL
+ push hl ; bitH - stored in BC
+ sel rb0
+
+ ;; (quot,rem) = 16[sp] /% 20[sp]
+
+ ;; copy numerator
+ movw ax, [hl+8]
+ movw numL, ax
+ movw ax, [hl+10]
+ movw numH, ax
+
+ ;; copy denomonator
+ movw ax, [hl+12]
+ movw denL, ax
+ movw ax, [hl+14]
+ movw denH, ax
+
+ movw ax, denL
+ or a, denB2
+ or a, denB3 ; not x
+ cmpw ax, #0
+ bnz $den_not_zero\which
+ movw numL, #0
+ movw numH, #0
+ ret
+
+den_not_zero\which:
+ .if \need_result
+ ;; zero out quot
+ movw quotL, #0
+ movw quotH, #0
+ .endif
+
+ ;; initialize bit to 1
+ movw bitL, #1
+ movw bitH, #0
+
+; while (den < num && !(den & (1L << BITS_MINUS_1)))
+
+ .if 1
+ ;; see if we can short-circuit a bunch of shifts
+ movw ax, denH
+ cmpw ax, #0
+ bnz $shift_den_bit\which
+ movw ax, denL
+ cmpw ax, numH
+ bnh $shift_den_bit16\which
+ .endif
+
+shift_den_bit\which:
+ movw ax, denH
+ mov1 cy,a.7
+ bc $enter_main_loop\which
+ cmpw ax, numH
+ movw ax, denL ; we re-use this below
+ sknz
+ cmpw ax, numL
+ bh $enter_main_loop\which
+
+ ;; den <<= 1
+; movw ax, denL ; already has it from the cmpw above
+ shlw ax, 1
+ movw denL, ax
+; movw ax, denH
+ rolwc denH, 1
+; movw denH, ax
+
+ ;; bit <<= 1
+ .if \need_result
+ movw ax, bitL
+ shlw ax, 1
+ movw bitL, ax
+ movw ax, bitH
+ rolwc ax, 1
+ movw bitH, ax
+ .else
+ ;; if we don't need to compute the quotent, we don't need an
+ ;; actual bit *mask*, we just need to keep track of which bit
+ inc bitB0
+ .endif
+
+ br $shift_den_bit\which
+
+ ;; while (bit)
+main_loop\which:
+
+ ;; if (num >= den) (cmp den > num)
+ movw ax, numH
+ cmpw ax, denH
+ movw ax, numL
+ sknz
+ cmpw ax, denL
+ skz
+ bnh $next_loop\which
+
+ ;; num -= den
+; movw ax, numL ; already has it from the cmpw above
+ subw ax, denL
+ movw numL, ax
+ movw ax, numH
+ sknc
+ decw ax
+ subw ax, denH
+ movw numH, ax
+
+ .if \need_result
+ ;; res |= bit
+ mov a, quotB0
+ or a, bitB0
+ mov quotB0, a
+ mov a, quotB1
+ or a, bitB1
+ mov quotB1, a
+ mov a, quotB2
+ or a, bitB2
+ mov quotB2, a
+ mov a, quotB3
+ or a, bitB3
+ mov quotB3, a
+ .endif
+
+next_loop\which:
+
+ ;; den >>= 1
+ movw ax, denH
+ shrw ax, 1
+ movw denH, ax
+ mov a, denB1
+ rorc a, 1
+ mov denB1, a
+ mov a, denB0
+ rorc a, 1
+ mov denB0, a
+
+ ;; bit >>= 1
+ .if \need_result
+ movw ax, bitH
+ shrw ax, 1
+ movw bitH, ax
+ mov a, bitB1
+ rorc a, 1
+ mov bitB1, a
+ mov a, bitB0
+ rorc a, 1
+ mov bitB0, a
+ .else
+ dec bitB0
+ .endif
+
+enter_main_loop\which:
+ .if \need_result
+ movw ax, bitH
+ cmpw ax, #0
+ bnz $main_loop\which
+ .else
+ cmp bitB0, #15
+ bh $main_loop\which
+ .endif
+ ;; bit is HImode now; check others
+ movw ax, numH ; numerator
+ cmpw ax, #0
+ bnz $bit_high_set\which
+ movw ax, denH ; denominator
+ cmpw ax, #0
+ bz $switch_to_himode\which
+bit_high_set\which:
+ .if \need_result
+ movw ax, bitL
+ cmpw ax, #0
+ .else
+ cmp0 bitB0
+ .endif
+ bnz $main_loop\which
+
+switch_to_himode\which:
+ .if \need_result
+ movw ax, bitL
+ cmpw ax, #0
+ .else
+ cmp0 bitB0
+ .endif
+ bz $main_loop_done_himode\which
+
+ ;; From here on in, r22, r14, and r18 are all zero
+ ;; while (bit)
+main_loop_himode\which:
+
+ ;; if (num >= den) (cmp den > num)
+ movw ax, denL
+ cmpw ax, numL
+ bh $next_loop_himode\which
+
+ ;; num -= den
+ movw ax, numL
+ subw ax, denL
+ movw numL, ax
+ movw ax, numH
+ sknc
+ decw ax
+ subw ax, denH
+ movw numH, ax
+
+ .if \need_result
+ ;; res |= bit
+ mov a, quotB0
+ or a, bitB0
+ mov quotB0, a
+ mov a, quotB1
+ or a, bitB1
+ mov quotB1, a
+ .endif
+
+next_loop_himode\which:
+
+ ;; den >>= 1
+ movw ax, denL
+ shrw ax, 1
+ movw denL, ax
+
+ .if \need_result
+ ;; bit >>= 1
+ movw ax, bitL
+ shrw ax, 1
+ movw bitL, ax
+ .else
+ dec bitB0
+ .endif
+
+ .if \need_result
+ movw ax, bitL
+ cmpw ax, #0
+ .else
+ cmp0 bitB0
+ .endif
+ bnz $main_loop_himode\which
+
+main_loop_done_himode\which:
+ sel rb2
+ pop hl ; bitH - stored in BC
+ pop de ; bitL
+; pop bc ; denH
+ pop ax ; denL
+ sel rb0
+
+ ret
+ .endm
+
+ make_generic _d 1
+ make_generic _m 0
+
+;----------------------------------------------------------------------
+
+ .global ___udivsi3
+ .type ___udivsi3,@function
+___udivsi3:
+ ;; r8 = 4[sp] / 8[sp]
+ call $!generic_div
+ ret
+ .size ___udivsi3, . - ___udivsi3
+
+
+ .global ___umodsi3
+ .type ___umodsi3,@function
+___umodsi3:
+ ;; r8 = 4[sp] % 8[sp]
+ call $!generic_mod
+ ret
+ .size ___umodsi3, . - ___umodsi3
+
+;----------------------------------------------------------------------
+
+ .macro neg_ax
+ movw hl, ax
+ movw ax, #0
+ subw ax, [hl]
+ movw [hl], ax
+ movw ax, #0
+ sknc
+ decw ax
+ subw ax, [hl+2]
+ movw [hl+2], ax
+ .endm
+
+ .global ___divsi3
+ .type ___divsi3,@function
+___divsi3:
+ ;; r8 = 4[sp] / 8[sp]
+ movw de, #0
+ mov a, [sp+7]
+ mov1 cy, a.7
+ bc $div_signed_num
+ mov a, [sp+11]
+ mov1 cy, a.7
+ bc $div_signed_den
+ call $!generic_div
+ ret
+
+div_signed_num:
+ ;; neg [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov d, #1
+ mov a, [sp+11]
+ mov1 cy, a.7
+ bnc $div_unsigned_den
+div_signed_den:
+ ;; neg [sp+8]
+ movw ax, sp
+ addw ax, #8
+ neg_ax
+ mov e, #1
+div_unsigned_den:
+ call $!generic_div
+
+ mov a, d
+ cmp0 a
+ bz $div_skip_restore_num
+ ;; We have to restore the numerator [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov a, d
+div_skip_restore_num:
+ xor a, e
+ bz $div_no_neg
+ movw ax, #r8
+ neg_ax
+div_no_neg:
+ mov a, e
+ cmp0 a
+ bz $div_skip_restore_den
+ ;; We have to restore the denominator [sp+8]
+ movw ax, sp
+ addw ax, #8
+ neg_ax
+div_skip_restore_den:
+ ret
+ .size ___divsi3, . - ___divsi3
+
+
+ .global ___modsi3
+ .type ___modsi3,@function
+___modsi3:
+ ;; r8 = 4[sp] % 8[sp]
+ movw de, #0
+ mov a, [sp+7]
+ mov1 cy, a.7
+ bc $mod_signed_num
+ mov a, [sp+11]
+ mov1 cy, a.7
+ bc $mod_signed_den
+ call $!generic_mod
+ ret
+
+mod_signed_num:
+ ;; neg [sp+4]
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+ mov d, #1
+ mov a, [sp+11]
+ mov1 cy, a.7
+ bnc $mod_unsigned_den
+mod_signed_den:
+ ;; neg [sp+8]
+ movw ax, sp
+ addw ax, #8
+ neg_ax
+ mov e, #1
+mod_unsigned_den:
+ call $!generic_mod
+
+ mov a, d
+ cmp0 a
+ bz $mod_no_neg
+ movw ax, #r8
+ neg_ax
+ ;; We have to restore [sp+4] as well.
+ movw ax, sp
+ addw ax, #4
+ neg_ax
+mod_no_neg:
+ .if 1
+ mov a, e
+ cmp0 a
+ bz $mod_skip_restore_den
+ movw ax, sp
+ addw ax, #8
+ neg_ax
+mod_skip_restore_den:
+ .endif
+ ret
+ .size ___modsi3, . - ___modsi3
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rl78/lib2div.c b/gcc-4.9/libgcc/config/rl78/lib2div.c
new file mode 100644
index 000000000..8fc9cde69
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/lib2div.c
@@ -0,0 +1,84 @@
+/* libgcc routines for RL78
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef int sint08_type __attribute__ ((mode (QI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+#ifdef __RL78_G10__
+
+#define UINT_TYPE uint32_type
+#define SINT_TYPE sint32_type
+#define BITS_MINUS_1 31
+#define NAME_MODE si
+
+#include "rl78-divmod.h"
+
+#undef UINT_TYPE
+#undef SINT_TYPE
+#undef BITS_MINUS_1
+#undef NAME_MODE
+
+#define UINT_TYPE uint16_type
+#define SINT_TYPE sint16_type
+#define BITS_MINUS_1 15
+#define NAME_MODE hi
+
+#include "rl78-divmod.h"
+
+#undef UINT_TYPE
+#undef SINT_TYPE
+#undef BITS_MINUS_1
+#undef NAME_MODE
+
+#define UINT_TYPE uint08_type
+#define SINT_TYPE sint08_type
+#define BITS_MINUS_1 7
+#define NAME_MODE qi
+
+#include "rl78-divmod.h"
+
+#endif
+
+/* See the comment by the definition of LIBGCC2_UNITS_PER_WORD in
+ m32c.h for why we are creating extra versions of some of the
+ functions defined in libgcc2.c. */
+
+#define LIBGCC2_UNITS_PER_WORD 2
+
+#define L_clzsi2
+#define L_ctzsi2
+#define L_ffssi2
+#define L_paritysi2
+#define L_popcountsi2
+
+#include "libgcc2.c"
diff --git a/gcc-4.9/libgcc/config/rl78/lib2mul.c b/gcc-4.9/libgcc/config/rl78/lib2mul.c
new file mode 100644
index 000000000..95701880e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/lib2mul.c
@@ -0,0 +1,61 @@
+/* libgcc routines for RL78
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint08_type __attribute__ ((mode (QI)));
+
+#define C3B(a,b,c) a##b##c
+#define C3(a,b,c) C3B(a,b,c)
+
+#ifdef __RL78_G10__
+
+#define UINT_TYPE uint32_type
+#define BITS_MINUS_1 31
+#define NAME_MODE si
+
+#include "rl78-mul.h"
+
+#undef UINT_TYPE
+#undef BITS_MINUS_1
+#undef NAME_MODE
+
+#define UINT_TYPE uint16_type
+#define BITS_MINUS_1 15
+#define NAME_MODE hi
+
+#include "rl78-mul.h"
+
+#endif
+
+#undef UINT_TYPE
+#undef BITS_MINUS_1
+#undef NAME_MODE
+
+#define UINT_TYPE uint08_type
+#define BITS_MINUS_1 7
+#define NAME_MODE qi
+
+#include "rl78-mul.h"
diff --git a/gcc-4.9/libgcc/config/rl78/lib2shift.c b/gcc-4.9/libgcc/config/rl78/lib2shift.c
new file mode 100644
index 000000000..6b2513d30
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/lib2shift.c
@@ -0,0 +1,113 @@
+/* Shift functions for the GCC support library for the Renesas RL78 processors.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int sint32_type __attribute__ ((mode (SI)));
+typedef unsigned int uint32_type __attribute__ ((mode (SI)));
+typedef int sint16_type __attribute__ ((mode (HI)));
+typedef unsigned int uint16_type __attribute__ ((mode (HI)));
+
+uint32_type __ashlsi3 (uint32_type in, char bit);
+sint32_type __ashrsi3 (sint32_type in, char bit);
+int __clrsbhi2 (sint16_type x);
+extern int __clrsbsi2 (sint32_type x);
+
+typedef struct
+{
+ union
+ {
+ uint32_type u;
+ uint16_type h[2];
+ } u;
+} dd;
+
+uint32_type
+__ashlsi3 (uint32_type in, char bit)
+{
+ uint16_type h, l;
+ dd d;
+
+ if (bit > 32)
+ return 0;
+ if (bit < 0)
+ return in;
+
+ d.u.u = in;
+ h = d.u.h[1];
+ l = d.u.h[0];
+
+ if (bit > 15)
+ {
+ h = l;
+ l = 0;
+ bit -= 16;
+ }
+
+ while (bit)
+ {
+ h = (h << 1) | (l >> 15);
+ l <<= 1;
+ bit --;
+ }
+
+ d.u.h[1] = h;
+ d.u.h[0] = l;
+ return d.u.u;
+}
+
+sint32_type
+__ashrsi3 (sint32_type in, char bit)
+{
+ sint16_type h;
+ uint16_type l;
+ dd d;
+
+ if (bit > 32)
+ return 0;
+ if (bit < 0)
+ return in;
+
+ d.u.u = in;
+ h = d.u.h[1];
+ l = d.u.h[0];
+
+ while (bit)
+ {
+ l = (h << 15) | (l >> 1);
+ h >>= 1;
+ bit --;
+ }
+
+ d.u.h[1] = h;
+ d.u.h[0] = l;
+ return d.u.u;
+}
+
+int
+__clrsbhi2 (sint16_type x)
+{
+ if (x == 0)
+ return 15;
+ return __clrsbsi2 ((sint32_type) x) - 16;
+}
diff --git a/gcc-4.9/libgcc/config/rl78/lshrsi3.S b/gcc-4.9/libgcc/config/rl78/lshrsi3.S
new file mode 100644
index 000000000..0e7123772
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/lshrsi3.S
@@ -0,0 +1,116 @@
+; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+#include "vregs.h"
+
+ .text
+ .global ___lshrsi3
+ .type ___lshrsi3, @function
+___lshrsi3:
+
+ ;; input:
+ ;;
+ ;; [zero]
+ ;; [count] <= $sp+8
+ ;; [in MSB]
+ ;; [in]
+ ;; [in]
+ ;; [in LSB] <- $sp+4
+
+ ;; output:
+ ;;
+ ;; [r8..r11] result
+
+ ;; registers:
+ ;;
+ ;; AX - temp for shift/rotate
+ ;; B - count
+
+ mov a, [sp+8] ; A now contains the count
+
+ cmp a, #0x20
+ bc $.Lcount_is_normal
+
+ ;; count is out of bounds, just return zero.
+ movw r8, #0
+ movw r10, #0
+ ret
+
+.Lcount_is_normal:
+ cmp0 a
+ bnz $.Lcount_is_nonzero
+
+ ;; count is zero, just copy IN to OUT
+ movw ax, [sp+4]
+ movw r8, ax
+ movw ax, [sp+6]
+ movw r10, ax
+ ret
+
+.Lcount_is_nonzero:
+ mov b, a ; B now contains the count also
+ bf a.4, $.Lcount_lt_16
+
+ ;; count >= 16, shift 16 at a time.
+ movw r10, #0
+ movw ax, [sp+6]
+ movw r8, ax
+ mov a, b
+ and a, #0x0f
+ sknz
+ ret
+
+ mov b, a ; B now contains the remaining count
+ inc b
+ br $.Lloop_top
+
+.Lcount_lt_16:
+ ;; count is nonzero. Do one
+ movw ax, [sp+6]
+ shrw ax,1
+ movw r10, ax
+ mov a, [sp+5]
+ rorc a,1
+ mov r9, a
+ mov a, [sp+4]
+ rorc a,1
+ mov r8, a
+
+ ;; we did one shift above; do as many more as we need now.
+.Lloop_top:
+ dec b
+ sknz
+ ret
+
+ movw ax, r10
+ shrw ax,1
+ movw r10, ax
+ mov a, r9
+ rorc a,1
+ mov r9, a
+ mov a, r8
+ rorc a,1
+ mov r8, a
+
+ br $.Lloop_top
+
+ .size ___lshrsi3, .-___lshrsi3
diff --git a/gcc-4.9/libgcc/config/rl78/mulsi3.S b/gcc-4.9/libgcc/config/rl78/mulsi3.S
new file mode 100644
index 000000000..89f45b68a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/mulsi3.S
@@ -0,0 +1,202 @@
+; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+;; 32x32=32 multiply
+
+#include "vregs.h"
+
+; the G10 only has one register bank, so cannot use these optimized
+; versions. Use the C version instead.
+
+#ifndef __RL78_G10__
+
+
+;----------------------------------------------------------------------
+
+; Register use:
+; RB0 RB1 RB2
+; AX op2L res32L res32H
+; BC op2H (resH) op1
+; DE count (resL-tmp)
+; HL [sp+4]
+
+ .text
+ nop
+ .global ___mulsi3 ; (USI a, USI b)
+___mulsi3:
+ ;; A is at [sp+4]
+ ;; B is at [sp+8]
+ ;; result is in R8..R11
+
+ sel rb2
+ push ax
+ push bc
+ sel rb0
+
+ clrw ax
+ movw r8, ax
+ movw r16, ax
+
+ movw ax, [sp+14]
+ cmpw ax, #0
+ bz $1f
+ cmpw ax, #0xffff
+ bnz $2f
+ movw ax, [sp+8]
+ sel rb1
+ subw ax, r_0
+ sel rb0
+ br $1f
+2:
+ movw bc, ax
+ movw ax, [sp+8]
+ cmpw ax, #0
+ skz
+ call !.Lmul_hi
+1:
+
+ movw ax, [sp+10]
+ cmpw ax, #0
+ bz $1f
+ cmpw ax, #0xffff
+ bnz $2f
+ movw ax, [sp+12]
+ sel rb1
+ subw ax, r_0
+ sel rb0
+ br $1f
+2:
+ movw bc, ax
+ movw ax, [sp+12]
+ cmpw ax, #0
+ skz
+ call !.Lmul_hi
+1:
+
+ movw ax, r8
+ movw r16, ax
+ clrw ax
+ movw r8, ax
+
+ ;; now do R16:R8 += op1L * op2L
+
+ ;; op1 is in AX.0 (needs to shrw)
+ ;; op2 is in BC.2 and BC.1 (bc can shlw/rolcw)
+ ;; res is in AX.2 and AX.1 (needs to addw)
+
+ movw ax, [sp+8]
+ movw r10, ax ; BC.1
+ movw ax, [sp+12]
+
+ cmpw ax, r10
+ bc $.Lmul_hisi_top
+ movw bc, r10
+ movw r10, ax
+ movw ax, bc
+
+
+.Lmul_hisi_top:
+ movw bc, #0
+
+.Lmul_hisi_loop:
+ shrw ax, 1
+ bnc $.Lmul_hisi_no_add
+ sel rb1
+ addw ax, bc
+ sel rb2
+ sknc
+ incw ax
+ addw ax, r_2
+.Lmul_hisi_no_add:
+ sel rb1
+ shlw bc, 1
+ sel rb0
+ rolwc bc, 1
+ cmpw ax, #0
+ bz $.Lmul_hisi_done
+
+ shrw ax, 1
+ bnc $.Lmul_hisi_no_add2
+ sel rb1
+ addw ax, bc
+ sel rb2
+ sknc
+ incw ax
+ addw ax, r_2
+.Lmul_hisi_no_add2:
+ sel rb1
+ shlw bc, 1
+ sel rb0
+ rolwc bc, 1
+ cmpw ax, #0
+ bnz $.Lmul_hisi_loop
+
+.Lmul_hisi_done:
+
+ movw ax, r16
+ movw r10, ax
+
+ sel rb2
+ pop bc
+ pop ax
+ sel rb0
+
+ ret
+
+;----------------------------------------------------------------------
+
+ .global ___mulhi3
+___mulhi3:
+ movw r8, #0
+ movw ax, [sp+6]
+ movw bc, ax
+ movw ax, [sp+4]
+
+ ;; R8 += AX * BC
+.Lmul_hi:
+ cmpw ax, bc
+ skc
+ xchw ax, bc
+ br $.Lmul_hi_loop
+
+.Lmul_hi_top:
+ sel rb1
+ addw ax, r_2
+ sel rb0
+.Lmul_hi_no_add:
+ shlw bc, 1
+.Lmul_hi_loop:
+ shrw ax, 1
+ bc $.Lmul_hi_top
+ cmpw ax, #0
+ bz $.Lmul_hi_done
+
+ shlw bc, 1
+ shrw ax, 1
+ bc $.Lmul_hi_top
+ cmpw ax, #0
+ bnz $.Lmul_hi_no_add
+
+.Lmul_hi_done:
+ ret
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rl78/rl78-divmod.h b/gcc-4.9/libgcc/config/rl78/rl78-divmod.h
new file mode 100644
index 000000000..044934b8f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/rl78-divmod.h
@@ -0,0 +1,117 @@
+/* libgcc routines for RL78
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+UINT_TYPE C3(udivmod,NAME_MODE,4) (UINT_TYPE, UINT_TYPE, word_type);
+SINT_TYPE C3(__div,NAME_MODE,3) (SINT_TYPE, SINT_TYPE);
+SINT_TYPE C3(__mod,NAME_MODE,3) (SINT_TYPE, SINT_TYPE);
+UINT_TYPE C3(__udiv,NAME_MODE,3) (UINT_TYPE, UINT_TYPE);
+UINT_TYPE C3(__umod,NAME_MODE,3) (UINT_TYPE, UINT_TYPE);
+
+UINT_TYPE
+C3(udivmod,NAME_MODE,4) (UINT_TYPE num, UINT_TYPE den, word_type modwanted)
+{
+ UINT_TYPE bit = 1;
+ UINT_TYPE res = 0;
+
+ while (den < num && bit && !(den & (1L << BITS_MINUS_1)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
+
+SINT_TYPE
+C3(__div,NAME_MODE,3) (SINT_TYPE a, SINT_TYPE b)
+{
+ word_type neg = 0;
+ SINT_TYPE res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = C3(udivmod,NAME_MODE,4) (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+SINT_TYPE
+C3(__mod,NAME_MODE,3) (SINT_TYPE a, SINT_TYPE b)
+{
+ word_type neg = 0;
+ SINT_TYPE res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = C3(udivmod,NAME_MODE,4) (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+
+UINT_TYPE
+C3(__udiv,NAME_MODE,3) (UINT_TYPE a, UINT_TYPE b)
+{
+ return C3(udivmod,NAME_MODE,4) (a, b, 0);
+}
+
+UINT_TYPE
+C3(__umod,NAME_MODE,3) (UINT_TYPE a, UINT_TYPE b)
+{
+ return C3(udivmod,NAME_MODE,4) (a, b, 1);
+}
diff --git a/gcc-4.9/libgcc/config/rl78/rl78-mul.h b/gcc-4.9/libgcc/config/rl78/rl78-mul.h
new file mode 100644
index 000000000..29e72a8a7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/rl78-mul.h
@@ -0,0 +1,42 @@
+/* libgcc routines for RL78
+ Copyright (C) 2005-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+UINT_TYPE C3(__mul,NAME_MODE,3) (UINT_TYPE, UINT_TYPE);
+UINT_TYPE
+C3(__mul,NAME_MODE,3) (UINT_TYPE a, UINT_TYPE b)
+{
+ UINT_TYPE rv = 0;
+
+ char bit;
+
+ for (bit=0; b && bit<sizeof(UINT_TYPE)*8; bit++)
+ {
+ if (b & 1)
+ rv += a;
+ a <<= 1;
+ b >>= 1;
+ }
+ return rv;
+}
diff --git a/gcc-4.9/libgcc/config/rl78/signbit.S b/gcc-4.9/libgcc/config/rl78/signbit.S
new file mode 100644
index 000000000..55f63a471
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/signbit.S
@@ -0,0 +1,67 @@
+; Copyright (C) 2012-2014 Free Software Foundation, Inc.
+; Contributed by Red Hat.
+;
+; This file is free software; you can redistribute it and/or modify it
+; under the terms of the GNU General Public License as published by the
+; Free Software Foundation; either version 3, or (at your option) any
+; later version.
+;
+; This file is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; Under Section 7 of GPL version 3, you are granted additional
+; permissions described in the GCC Runtime Library Exception, version
+; 3.1, as published by the Free Software Foundation.
+;
+; You should have received a copy of the GNU General Public License and
+; a copy of the GCC Runtime Library Exception along with this program;
+; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+; <http://www.gnu.org/licenses/>.
+
+#include "vregs.h"
+
+;; int signbitf (float X)
+;; int signbit (double X)
+;; int signbitl (long double X)
+;;
+;; `signbit' returns a nonzero value if the value of X has its sign
+;; bit set.
+;;
+;; This is not the same as `x < 0.0', because IEEE 754 floating point
+;; allows zero to be signed. The comparison `-0.0 < 0.0' is false,
+;; but `signbit (-0.0)' will return a nonzero value.
+
+;----------------------------------------------------------------------
+
+ .text
+
+ .global _signbit
+_signbit:
+ .global _signbitf
+_signbitf:
+ ;; X is at [sp+4]
+ ;; result is in R8..R9
+
+ movw r8, #0
+ mov a, [sp+7]
+ mov1 cy, a.7
+ sknc
+ movw r8, #1
+ ret
+ .size _signbit, . - _signbit
+ .size _signbitf, . - _signbitf
+
+ .global _signbitl
+_signbitl:
+ ;; X is at [sp+4]
+ ;; result is in R8..R9
+
+ movw r8, #0
+ mov a, [sp+11]
+ mov1 cy, a.7
+ sknc
+ movw r8, #1
+ ret
+ .size _signbitl, . - _signbitl
diff --git a/gcc-4.9/libgcc/config/rl78/t-rl78 b/gcc-4.9/libgcc/config/rl78/t-rl78
new file mode 100644
index 000000000..274d20416
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/t-rl78
@@ -0,0 +1,32 @@
+# Makefile fragment for building LIBGCC for the Renesas RL78 target.
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+LIB2ADD = \
+ $(srcdir)/config/rl78/trampoline.S \
+ $(srcdir)/config/rl78/lib2div.c \
+ $(srcdir)/config/rl78/lib2mul.c \
+ $(srcdir)/config/rl78/lib2shift.c \
+ $(srcdir)/config/rl78/lshrsi3.S \
+ $(srcdir)/config/rl78/mulsi3.S \
+ $(srcdir)/config/rl78/divmodsi.S \
+ $(srcdir)/config/rl78/divmodhi.S \
+ $(srcdir)/config/rl78/divmodqi.S \
+ $(srcdir)/config/rl78/signbit.S \
+ $(srcdir)/config/rl78/cmpsi2.S
diff --git a/gcc-4.9/libgcc/config/rl78/trampoline.S b/gcc-4.9/libgcc/config/rl78/trampoline.S
new file mode 100644
index 000000000..410a83e6e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/trampoline.S
@@ -0,0 +1,136 @@
+/* libgcc routines for RL78
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* RL78 Trampoline support
+
+ Since the RL78's RAM is not in the first 64k, we cannot "just" use a
+ function pointer to point to a trampoline on the stack. So, we
+ create N fixed trampolines that read from an array, and allocate
+ them as needed.
+
+*/
+
+#include "vregs.h"
+
+ .data
+ .p2align 1
+trampoline_array:
+
+ .macro stub n
+
+ .text
+trampoline_\n:
+ .type trampoline_\n, @function
+ movw ax, !trampoline_chain_\n
+ movw r14, ax
+ movw ax, !trampoline_addr_\n
+ br ax
+ .size trampoline_\n, .-trampoline_\n
+
+ .data
+trampoline_frame_\n:
+ .short 0
+trampoline_stub_\n:
+ .short trampoline_\n
+trampoline_chain_\n:
+ .short 0
+trampoline_addr_\n:
+ .short 0
+
+#define TO_FRAME 0
+#define TO_STUB 2
+#define TO_CHAIN 4
+#define TO_ADDR 6
+#define TO_SIZE 8
+
+ .endm
+
+ stub 0
+ stub 1
+ stub 2
+ stub 3
+ stub 4
+ stub 5
+
+trampoline_array_end:
+
+/* Given the function pointer in R8 and the static chain
+ pointer in R10, allocate a trampoline and return its address in
+ R8. */
+
+ .text
+ .global ___trampoline_init
+ .type ___trampoline_init, @function
+___trampoline_init:
+
+ movw hl, #trampoline_array
+1:
+ movw ax, [hl + TO_ADDR]
+ cmpw ax, #0
+ bz $2f
+
+ movw ax, hl
+ addw ax, #TO_SIZE
+ movw hl, ax
+ cmpw ax, #trampoline_array_end
+ bnz $1b
+ brk ; no more slots?
+
+2: movw ax, r8
+ movw [hl + TO_ADDR], ax
+ movw ax, r10
+ movw [hl + TO_CHAIN], ax
+ movw ax, sp
+ movw [hl + TO_FRAME], ax
+
+ movw ax, [hl + TO_STUB]
+ movw r8, ax
+
+ ret
+ .size ___trampoline_init, . - ___trampoline_init
+
+ .global ___trampoline_uninit
+ .type ___trampoline_uninit, @function
+___trampoline_uninit:
+ movw hl, #trampoline_array
+ movw ax, sp
+ movw bc, ax
+1:
+ movw ax, [hl + TO_FRAME]
+ cmpw ax, bc
+ bc $2f
+
+ clrw ax
+ movw [hl + TO_ADDR], ax
+
+2:
+ movw ax, hl
+ addw ax, #TO_SIZE
+ movw hl, ax
+ cmpw ax, #trampoline_array_end
+ bnz $1b
+
+ ret
+ .size ___trampoline_uninit, . - ___trampoline_uninit
diff --git a/gcc-4.9/libgcc/config/rl78/vregs.h b/gcc-4.9/libgcc/config/rl78/vregs.h
new file mode 100644
index 000000000..fa488fabc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rl78/vregs.h
@@ -0,0 +1,56 @@
+
+; real
+; GAS defines r0..r7 as aliases for real registers; we want the saddr
+; forms here.
+r_0 = 0xffef8
+r_1 = 0xffef9
+r_2 = 0xffefa
+r_3 = 0xffefb
+r_4 = 0xffefc
+r_5 = 0xffefd
+r_6 = 0xffefe
+r_7 = 0xffeff
+
+#ifdef __RL78_G10__
+
+; clobberable
+r8 = 0xffec8
+r9 = 0xffec9
+r10 = 0xffeca
+r11 = 0xffecb
+r12 = 0xffecc
+r13 = 0xffecd
+r14 = 0xffece
+r15 = 0xffecf
+; preserved
+r16 = 0xffed0
+r17 = 0xffed1
+r18 = 0xffed2
+r19 = 0xffed3
+r20 = 0xffed4
+r21 = 0xffed5
+r22 = 0xffed6
+r23 = 0xffed7
+
+#else
+
+; clobberable
+r8 = 0xffef0
+r9 = 0xffef1
+r10 = 0xffef2
+r11 = 0xffef3
+r12 = 0xffef4
+r13 = 0xffef5
+r14 = 0xffef6
+r15 = 0xffef7
+; preserved
+r16 = 0xffee8
+r17 = 0xffee9
+r18 = 0xffeea
+r19 = 0xffeeb
+r20 = 0xffeec
+r21 = 0xffeed
+r22 = 0xffeee
+r23 = 0xffeef
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/aix-unwind.h b/gcc-4.9/libgcc/config/rs6000/aix-unwind.h
new file mode 100644
index 000000000..e62194cd7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/aix-unwind.h
@@ -0,0 +1,255 @@
+/* DWARF2 EH unwinding support for AIX.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Useful register numbers. */
+
+#define LR_REGNO 65
+#define CR2_REGNO 70
+#define XER_REGNO 76
+#define FIRST_ALTIVEC_REGNO 77
+#define VRSAVE_REGNO 109
+#define VSCR_REGNO 110
+
+/* If the current unwind info (FS) does not contain explicit info
+ saving R2, then we have to do a minor amount of code reading to
+ figure out if it was saved. The big problem here is that the
+ code that does the save/restore is generated by the linker, so
+ we have no good way to determine at compile time what to do. */
+
+#ifdef __64BIT__
+#define MD_FROB_UPDATE_CONTEXT(CTX, FS) \
+ do { \
+ if ((FS)->regs.reg[2].how == REG_UNSAVED) \
+ { \
+ unsigned int *insn \
+ = (unsigned int *) \
+ _Unwind_GetGR ((CTX), LR_REGNO); \
+ if (*insn == 0xE8410028) \
+ _Unwind_SetGRPtr ((CTX), 2, (CTX)->cfa + 40); \
+ } \
+ } while (0)
+#else
+#define MD_FROB_UPDATE_CONTEXT(CTX, FS) \
+ do { \
+ if ((FS)->regs.reg[2].how == REG_UNSAVED) \
+ { \
+ unsigned int *insn \
+ = (unsigned int *) \
+ _Unwind_GetGR ((CTX), LR_REGNO); \
+ if (*insn == 0x80410014) \
+ _Unwind_SetGRPtr ((CTX), 2, (CTX)->cfa + 20); \
+ } \
+ } while (0)
+#endif
+
+/* Now on to MD_FALLBACK_FRAME_STATE_FOR.
+ 32bit AIX 5.2 and 5.3 only at this stage. */
+
+#include <stdlib.h>
+#include <stddef.h>
+#include <signal.h>
+#include <sys/machine.h>
+
+#ifdef __64BIT__
+
+/* 64bit fallback not implemented yet, so MD_FALLBACK_FRAME_STATE_FOR not
+ defined. Arrange just for the code below to compile. */
+typedef struct __context64 mstate_t;
+
+#else
+
+typedef struct mstsave mstate_t;
+
+#define MD_FALLBACK_FRAME_STATE_FOR ppc_aix_fallback_frame_state
+
+#endif
+
+/* If we are compiling on AIX < 5.3, the VMX related datastructs are not
+ defined and we take measures to obtain proper runtime behavior if the
+ compiled code happens to run on a later version with VMX enabled. */
+
+#ifndef MSR_VMX
+#define MSR_VMX 0x2000000
+#endif
+
+typedef unsigned int uint;
+typedef struct { uint v[4]; } vreg_t;
+typedef struct {
+ vreg_t regs[32];
+ uint pad1 [3];
+ uint vscr;
+ uint vrsave;
+ uint pad2 [3];
+} vstate_t;
+
+#define EXT_CONTEXT_MARK 0x45435458
+#define EXT_CONTEXT_SIZE 4096
+#define BUMPER_SIZE (EXT_CONTEXT_SIZE - sizeof(vstate_t) - (5 * sizeof(int)))
+
+typedef struct {
+ uint pad1 [4];
+ vstate_t vstate;
+ char bumper [BUMPER_SIZE];
+ int mark;
+} extended_context_t;
+
+typedef struct {
+ char bumper [offsetof (ucontext_t, uc_stack) + sizeof (stack_t)];
+ extended_context_t * ectx;
+ int mark;
+} vmx_ucontext_t;
+
+/* Determine whether CONTEXT designates a signal handler, and return the
+ associated ucontext_t address if so. Return NULL otherwise. */
+
+static ucontext_t *
+ucontext_for (struct _Unwind_Context *context)
+{
+ const unsigned int * ra = context->ra;
+
+ /* AIX 5.2 and 5.3, threaded or not, share common patterns and feature
+ variants depending on the configured kernel (unix_mp or unix_64). */
+
+ if (*(ra - 5) == 0x4c00012c /* isync */
+ && *(ra - 4) == 0x80ec0000 /* lwz r7,0(r12) */
+ && *(ra - 3) == 0x804c0004 /* lwz r2,4(r12) */
+ && *(ra - 2) == 0x7ce903a6 /* mtctr r7 */
+ && *(ra - 1) == 0x4e800421 /* bctrl */
+ && *(ra - 0) == 0x7dc37378) /* mr r3,r14 <-- context->ra */
+ {
+ /* unix_64 */
+ if (*(ra - 6) == 0x7d000164) /* mtmsrd r8 */
+ {
+ switch (*(ra + 18))
+ {
+ /* AIX 5.2 */
+ case 0x835a0520: /* lwz r26,1312(r26) */
+ return (ucontext_t *)(context->cfa + 0x70);
+
+ /* AIX 5.3 */
+ case 0x835a0570: /* lwz r26,1392(r26) */
+ return (ucontext_t *)(context->cfa + 0x40);
+
+ default:
+ return 0;
+ }
+ }
+
+ /* unix_mp */
+ if (*(ra - 6) == 0x7d000124) /* mtmsr r8 */
+ {
+ typedef struct {
+ char pad[56];
+ ucontext_t ucontext;
+ siginfo_t siginfo;
+ } aix52_stack_t;
+
+ aix52_stack_t * frame = (aix52_stack_t *) context->cfa;
+ return &frame->ucontext;
+ }
+ }
+
+ return 0;
+}
+
+/* The fallback proper. */
+
+#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
+#define RETURN_COLUMN DWARF_ALT_FRAME_RETURN_COLUMN
+#else
+#define RETURN_COLUMN ARG_POINTER_REGNUM
+#endif
+
+#define REGISTER_CFA_OFFSET_FOR(FS,REGNO,ADDR,CFA)\
+do { \
+(FS)->regs.reg[REGNO].how = REG_SAVED_OFFSET; \
+(FS)->regs.reg[REGNO].loc.offset = (long) (ADDR) - (CFA); \
+} while (0);
+
+static _Unwind_Reason_Code
+ppc_aix_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ ucontext_t * uctx = ucontext_for (context);
+ mstate_t * mctx;
+
+ long new_cfa;
+ int i;
+
+ if (uctx == NULL)
+ return _URC_END_OF_STACK;
+
+ mctx = &uctx->uc_mcontext.jmp_context;
+
+ /* The "kernel" frame cfa is the stack pointer at the signal occurrence
+ point. */
+ new_cfa = mctx->gpr[STACK_POINTER_REGNUM];
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ /* And we state how to find the various registers it has saved with
+ relative offset rules from there. */
+
+ for (i = 0; i < 32; i++)
+ if (i != STACK_POINTER_REGNUM)
+ REGISTER_CFA_OFFSET_FOR (fs, i, &mctx->gpr[i], new_cfa);
+
+ REGISTER_CFA_OFFSET_FOR (fs, CR2_REGNO, &mctx->cr, new_cfa);
+ REGISTER_CFA_OFFSET_FOR (fs, XER_REGNO, &mctx->xer, new_cfa);
+ REGISTER_CFA_OFFSET_FOR (fs, LR_REGNO, &mctx->lr, new_cfa);
+
+ fs->retaddr_column = RETURN_COLUMN;
+ REGISTER_CFA_OFFSET_FOR (fs, RETURN_COLUMN, &mctx->iar, new_cfa);
+ fs->signal_frame = 1;
+
+ /* Honor FP Ever Used ... */
+ if (mctx->fpeu)
+ {
+ for (i = 0; i < 32; i++)
+ REGISTER_CFA_OFFSET_FOR (fs, i+32, &mctx->fpr[i], new_cfa);
+ }
+
+ /* Honor VMX context, if any. We expect the msr bit never to be set in
+ environments where there is no VMX support, e.g. on AIX < 5.3. */
+ if (mctx->msr & MSR_VMX)
+ {
+ vmx_ucontext_t * uc = (vmx_ucontext_t *) uctx;
+
+ if (uc->mark == EXT_CONTEXT_MARK && uc->ectx->mark == EXT_CONTEXT_MARK)
+ {
+ vstate_t * vstate = &uc->ectx->vstate;
+
+ for (i = 0; i < 32; i++)
+ REGISTER_CFA_OFFSET_FOR
+ (fs, i+FIRST_ALTIVEC_REGNO, &vstate->regs[i], new_cfa);
+
+ REGISTER_CFA_OFFSET_FOR (fs, VSCR_REGNO, &vstate->vscr, new_cfa);
+ REGISTER_CFA_OFFSET_FOR (fs, VRSAVE_REGNO, &vstate->vrsave, new_cfa);
+ }
+ }
+
+ return _URC_NO_REASON;
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/aixinitfini.c b/gcc-4.9/libgcc/config/rs6000/aixinitfini.c
new file mode 100644
index 000000000..e95575820
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/aixinitfini.c
@@ -0,0 +1,33 @@
+/* FIXME: rename this file */
+
+/*
+ Artificially create _GLOBAL_AIX[ID]_shr_o symbols in libgcc.a.
+
+ This means that libstdc++.a can invoke these symbols and they are resolved
+ regardless of whether libstdc++.a is linked against libgcc_s.a or libgcc.a.
+
+ The symbols are created in libgcc_s.a by collect2 as there are exception
+ frames to register for LIB2_DIVMOD_FUNCS.
+
+ The symbols are NOT created by collect2 for libgcc.a, because libgcc.a is
+ a 'real' archive containing objects and collect2 is not invoked.
+
+ libstdc++.a is linked against libgcc.a when handling the command line
+ options '-static-libgcc -static-libstdc++'.
+*/
+
+void _GLOBAL__AIXI_shr_o (void);
+void _GLOBAL__AIXD_shr_o (void);
+
+void
+_GLOBAL__AIXI_shr_o (void)
+{
+ return;
+}
+
+void
+_GLOBAL__AIXD_shr_o (void)
+{
+ return;
+}
+
diff --git a/gcc-4.9/libgcc/config/rs6000/crtcxa.c b/gcc-4.9/libgcc/config/rs6000/crtcxa.c
new file mode 100644
index 000000000..317d5bae4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtcxa.c
@@ -0,0 +1,42 @@
+/* __dso_handle initialization for AIX.
+ Copyright (C) 2013-2014 Free Software Foundation, Inc.
+ Written by David Edelsohn, IBM.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef SHARED
+void *__dso_handle = &__dso_handle;
+#else
+void *__dso_handle = 0;
+#endif
+
+extern void __cxa_finalize (void *);
+
+/* Add __cxa_finalize call to beginning of destructors list. */
+void __init_aix_libgcc_cxa_atexit (void) __attribute__ ((destructor (65535)));
+
+void
+__init_aix_libgcc_cxa_atexit (void)
+{
+ __cxa_finalize (__dso_handle);
+}
+
diff --git a/gcc-4.9/libgcc/config/rs6000/crtresfpr.S b/gcc-4.9/libgcc/config/rs6000/crtresfpr.S
new file mode 100644
index 000000000..a5e569133
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtresfpr.S
@@ -0,0 +1,80 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ * 64-bit support written by David Edelsohn
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+/* Routines for restoring floating point registers, called by the compiler. */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the floating point save area. */
+
+CFI_STARTPROC
+HIDDEN_FUNC(_restfpr_14) lfd 14,-144(11) /* restore fp registers */
+HIDDEN_FUNC(_restfpr_15) lfd 15,-136(11)
+HIDDEN_FUNC(_restfpr_16) lfd 16,-128(11)
+HIDDEN_FUNC(_restfpr_17) lfd 17,-120(11)
+HIDDEN_FUNC(_restfpr_18) lfd 18,-112(11)
+HIDDEN_FUNC(_restfpr_19) lfd 19,-104(11)
+HIDDEN_FUNC(_restfpr_20) lfd 20,-96(11)
+HIDDEN_FUNC(_restfpr_21) lfd 21,-88(11)
+HIDDEN_FUNC(_restfpr_22) lfd 22,-80(11)
+HIDDEN_FUNC(_restfpr_23) lfd 23,-72(11)
+HIDDEN_FUNC(_restfpr_24) lfd 24,-64(11)
+HIDDEN_FUNC(_restfpr_25) lfd 25,-56(11)
+HIDDEN_FUNC(_restfpr_26) lfd 26,-48(11)
+HIDDEN_FUNC(_restfpr_27) lfd 27,-40(11)
+HIDDEN_FUNC(_restfpr_28) lfd 28,-32(11)
+HIDDEN_FUNC(_restfpr_29) lfd 29,-24(11)
+HIDDEN_FUNC(_restfpr_30) lfd 30,-16(11)
+HIDDEN_FUNC(_restfpr_31) lfd 31,-8(11)
+ blr
+FUNC_END(_restfpr_31)
+FUNC_END(_restfpr_30)
+FUNC_END(_restfpr_29)
+FUNC_END(_restfpr_28)
+FUNC_END(_restfpr_27)
+FUNC_END(_restfpr_26)
+FUNC_END(_restfpr_25)
+FUNC_END(_restfpr_24)
+FUNC_END(_restfpr_23)
+FUNC_END(_restfpr_22)
+FUNC_END(_restfpr_21)
+FUNC_END(_restfpr_20)
+FUNC_END(_restfpr_19)
+FUNC_END(_restfpr_18)
+FUNC_END(_restfpr_17)
+FUNC_END(_restfpr_16)
+FUNC_END(_restfpr_15)
+FUNC_END(_restfpr_14)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtresgpr.S b/gcc-4.9/libgcc/config/rs6000/crtresgpr.S
new file mode 100644
index 000000000..1a307749f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtresgpr.S
@@ -0,0 +1,80 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ * 64-bit support written by David Edelsohn
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+/* Routines for restoring integer registers, called by the compiler. */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the integer restore area. */
+
+CFI_STARTPROC
+HIDDEN_FUNC(_restgpr_14) lwz 14,-72(11) /* restore gp registers */
+HIDDEN_FUNC(_restgpr_15) lwz 15,-68(11)
+HIDDEN_FUNC(_restgpr_16) lwz 16,-64(11)
+HIDDEN_FUNC(_restgpr_17) lwz 17,-60(11)
+HIDDEN_FUNC(_restgpr_18) lwz 18,-56(11)
+HIDDEN_FUNC(_restgpr_19) lwz 19,-52(11)
+HIDDEN_FUNC(_restgpr_20) lwz 20,-48(11)
+HIDDEN_FUNC(_restgpr_21) lwz 21,-44(11)
+HIDDEN_FUNC(_restgpr_22) lwz 22,-40(11)
+HIDDEN_FUNC(_restgpr_23) lwz 23,-36(11)
+HIDDEN_FUNC(_restgpr_24) lwz 24,-32(11)
+HIDDEN_FUNC(_restgpr_25) lwz 25,-28(11)
+HIDDEN_FUNC(_restgpr_26) lwz 26,-24(11)
+HIDDEN_FUNC(_restgpr_27) lwz 27,-20(11)
+HIDDEN_FUNC(_restgpr_28) lwz 28,-16(11)
+HIDDEN_FUNC(_restgpr_29) lwz 29,-12(11)
+HIDDEN_FUNC(_restgpr_30) lwz 30,-8(11)
+HIDDEN_FUNC(_restgpr_31) lwz 31,-4(11)
+ blr
+FUNC_END(_restgpr_31)
+FUNC_END(_restgpr_30)
+FUNC_END(_restgpr_29)
+FUNC_END(_restgpr_28)
+FUNC_END(_restgpr_27)
+FUNC_END(_restgpr_26)
+FUNC_END(_restgpr_25)
+FUNC_END(_restgpr_24)
+FUNC_END(_restgpr_23)
+FUNC_END(_restgpr_22)
+FUNC_END(_restgpr_21)
+FUNC_END(_restgpr_20)
+FUNC_END(_restgpr_19)
+FUNC_END(_restgpr_18)
+FUNC_END(_restgpr_17)
+FUNC_END(_restgpr_16)
+FUNC_END(_restgpr_15)
+FUNC_END(_restgpr_14)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtrestvr.S b/gcc-4.9/libgcc/config/rs6000/crtrestvr.S
new file mode 100644
index 000000000..445a25d02
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtrestvr.S
@@ -0,0 +1,87 @@
+/* Routines for restoring vector registers.
+
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Written by Alan Modra, IBM
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+#undef __ALTIVEC__
+#define __ALTIVEC__ 1
+ #include "ppc-asm.h"
+
+/* Called with r0 pointing just beyond the end of the vector save area. */
+
+ .section ".text"
+CFI_STARTPROC
+HIDDEN_FUNC(_restvr_20)
+ li r11,-192
+ lvx v20,r11,r0
+HIDDEN_FUNC(_restvr_21)
+ li r11,-176
+ lvx v21,r11,r0
+HIDDEN_FUNC(_restvr_22)
+ li r11,-160
+ lvx v22,r11,r0
+HIDDEN_FUNC(_restvr_23)
+ li r11,-144
+ lvx v23,r11,r0
+HIDDEN_FUNC(_restvr_24)
+ li r11,-128
+ lvx v24,r11,r0
+HIDDEN_FUNC(_restvr_25)
+ li r11,-112
+ lvx v25,r11,r0
+HIDDEN_FUNC(_restvr_26)
+ li r11,-96
+ lvx v26,r11,r0
+HIDDEN_FUNC(_restvr_27)
+ li r11,-80
+ lvx v27,r11,r0
+HIDDEN_FUNC(_restvr_28)
+ li r11,-64
+ lvx v28,r11,r0
+HIDDEN_FUNC(_restvr_29)
+ li r11,-48
+ lvx v29,r11,r0
+HIDDEN_FUNC(_restvr_30)
+ li r11,-32
+ lvx v30,r11,r0
+HIDDEN_FUNC(_restvr_31)
+ li r11,-16
+ lvx v31,r11,r0
+ blr
+FUNC_END(_restvr_31)
+FUNC_END(_restvr_30)
+FUNC_END(_restvr_29)
+FUNC_END(_restvr_28)
+FUNC_END(_restvr_27)
+FUNC_END(_restvr_26)
+FUNC_END(_restvr_25)
+FUNC_END(_restvr_24)
+FUNC_END(_restvr_23)
+FUNC_END(_restvr_22)
+FUNC_END(_restvr_21)
+FUNC_END(_restvr_20)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtresxfpr.S b/gcc-4.9/libgcc/config/rs6000/crtresxfpr.S
new file mode 100644
index 000000000..3373a53b7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtresxfpr.S
@@ -0,0 +1,125 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ * 64-bit support written by David Edelsohn
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+/* Routines for restoring floating point registers, called by the compiler. */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the floating point save area. */
+/* In addition to restoring the fp registers, it will return to the caller's */
+/* caller */
+
+CFI_STARTPROC
+CFI_DEF_CFA_REGISTER (11)
+CFI_OFFSET (65, 4)
+CFI_OFFSET (46, -144)
+CFI_OFFSET (47, -136)
+CFI_OFFSET (48, -128)
+CFI_OFFSET (49, -120)
+CFI_OFFSET (50, -112)
+CFI_OFFSET (51, -104)
+CFI_OFFSET (52, -96)
+CFI_OFFSET (53, -88)
+CFI_OFFSET (54, -80)
+CFI_OFFSET (55, -72)
+CFI_OFFSET (56, -64)
+CFI_OFFSET (57, -56)
+CFI_OFFSET (58, -48)
+CFI_OFFSET (59, -40)
+CFI_OFFSET (60, -32)
+CFI_OFFSET (61, -24)
+CFI_OFFSET (62, -16)
+CFI_OFFSET (63, -8)
+HIDDEN_FUNC(_restfpr_14_x) lfd 14,-144(11) /* restore fp registers */
+CFI_RESTORE (46)
+HIDDEN_FUNC(_restfpr_15_x) lfd 15,-136(11)
+CFI_RESTORE (47)
+HIDDEN_FUNC(_restfpr_16_x) lfd 16,-128(11)
+CFI_RESTORE (48)
+HIDDEN_FUNC(_restfpr_17_x) lfd 17,-120(11)
+CFI_RESTORE (49)
+HIDDEN_FUNC(_restfpr_18_x) lfd 18,-112(11)
+CFI_RESTORE (50)
+HIDDEN_FUNC(_restfpr_19_x) lfd 19,-104(11)
+CFI_RESTORE (51)
+HIDDEN_FUNC(_restfpr_20_x) lfd 20,-96(11)
+CFI_RESTORE (52)
+HIDDEN_FUNC(_restfpr_21_x) lfd 21,-88(11)
+CFI_RESTORE (53)
+HIDDEN_FUNC(_restfpr_22_x) lfd 22,-80(11)
+CFI_RESTORE (54)
+HIDDEN_FUNC(_restfpr_23_x) lfd 23,-72(11)
+CFI_RESTORE (55)
+HIDDEN_FUNC(_restfpr_24_x) lfd 24,-64(11)
+CFI_RESTORE (56)
+HIDDEN_FUNC(_restfpr_25_x) lfd 25,-56(11)
+CFI_RESTORE (57)
+HIDDEN_FUNC(_restfpr_26_x) lfd 26,-48(11)
+CFI_RESTORE (58)
+HIDDEN_FUNC(_restfpr_27_x) lfd 27,-40(11)
+CFI_RESTORE (59)
+HIDDEN_FUNC(_restfpr_28_x) lfd 28,-32(11)
+CFI_RESTORE (60)
+HIDDEN_FUNC(_restfpr_29_x) lfd 29,-24(11)
+CFI_RESTORE (61)
+HIDDEN_FUNC(_restfpr_30_x) lfd 30,-16(11)
+CFI_RESTORE (62)
+HIDDEN_FUNC(_restfpr_31_x) lwz 0,4(11)
+ lfd 31,-8(11)
+CFI_RESTORE (63)
+ mtlr 0
+CFI_RESTORE (65)
+ mr 1,11
+CFI_DEF_CFA_REGISTER (1)
+ blr
+FUNC_END(_restfpr_31_x)
+FUNC_END(_restfpr_30_x)
+FUNC_END(_restfpr_29_x)
+FUNC_END(_restfpr_28_x)
+FUNC_END(_restfpr_27_x)
+FUNC_END(_restfpr_26_x)
+FUNC_END(_restfpr_25_x)
+FUNC_END(_restfpr_24_x)
+FUNC_END(_restfpr_23_x)
+FUNC_END(_restfpr_22_x)
+FUNC_END(_restfpr_21_x)
+FUNC_END(_restfpr_20_x)
+FUNC_END(_restfpr_19_x)
+FUNC_END(_restfpr_18_x)
+FUNC_END(_restfpr_17_x)
+FUNC_END(_restfpr_16_x)
+FUNC_END(_restfpr_15_x)
+FUNC_END(_restfpr_14_x)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtresxgpr.S b/gcc-4.9/libgcc/config/rs6000/crtresxgpr.S
new file mode 100644
index 000000000..c1bd67917
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtresxgpr.S
@@ -0,0 +1,123 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ * 64-bit support written by David Edelsohn
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+/* Routines for restoring integer registers, called by the compiler. */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the integer restore area. */
+
+CFI_STARTPROC
+CFI_DEF_CFA_REGISTER (11)
+CFI_OFFSET (65, 4)
+CFI_OFFSET (14, -72)
+CFI_OFFSET (15, -68)
+CFI_OFFSET (16, -64)
+CFI_OFFSET (17, -60)
+CFI_OFFSET (18, -56)
+CFI_OFFSET (19, -52)
+CFI_OFFSET (20, -48)
+CFI_OFFSET (21, -44)
+CFI_OFFSET (22, -40)
+CFI_OFFSET (23, -36)
+CFI_OFFSET (24, -32)
+CFI_OFFSET (25, -28)
+CFI_OFFSET (26, -24)
+CFI_OFFSET (27, -20)
+CFI_OFFSET (28, -16)
+CFI_OFFSET (29, -12)
+CFI_OFFSET (30, -8)
+CFI_OFFSET (31, -4)
+HIDDEN_FUNC(_restgpr_14_x) lwz 14,-72(11) /* restore gp registers */
+CFI_RESTORE (14)
+HIDDEN_FUNC(_restgpr_15_x) lwz 15,-68(11)
+CFI_RESTORE (15)
+HIDDEN_FUNC(_restgpr_16_x) lwz 16,-64(11)
+CFI_RESTORE (16)
+HIDDEN_FUNC(_restgpr_17_x) lwz 17,-60(11)
+CFI_RESTORE (17)
+HIDDEN_FUNC(_restgpr_18_x) lwz 18,-56(11)
+CFI_RESTORE (18)
+HIDDEN_FUNC(_restgpr_19_x) lwz 19,-52(11)
+CFI_RESTORE (19)
+HIDDEN_FUNC(_restgpr_20_x) lwz 20,-48(11)
+CFI_RESTORE (20)
+HIDDEN_FUNC(_restgpr_21_x) lwz 21,-44(11)
+CFI_RESTORE (21)
+HIDDEN_FUNC(_restgpr_22_x) lwz 22,-40(11)
+CFI_RESTORE (22)
+HIDDEN_FUNC(_restgpr_23_x) lwz 23,-36(11)
+CFI_RESTORE (23)
+HIDDEN_FUNC(_restgpr_24_x) lwz 24,-32(11)
+CFI_RESTORE (24)
+HIDDEN_FUNC(_restgpr_25_x) lwz 25,-28(11)
+CFI_RESTORE (25)
+HIDDEN_FUNC(_restgpr_26_x) lwz 26,-24(11)
+CFI_RESTORE (26)
+HIDDEN_FUNC(_restgpr_27_x) lwz 27,-20(11)
+CFI_RESTORE (27)
+HIDDEN_FUNC(_restgpr_28_x) lwz 28,-16(11)
+CFI_RESTORE (28)
+HIDDEN_FUNC(_restgpr_29_x) lwz 29,-12(11)
+CFI_RESTORE (29)
+HIDDEN_FUNC(_restgpr_30_x) lwz 30,-8(11)
+CFI_RESTORE (30)
+HIDDEN_FUNC(_restgpr_31_x) lwz 0,4(11)
+ lwz 31,-4(11)
+CFI_RESTORE (31)
+ mtlr 0
+CFI_RESTORE (65)
+ mr 1,11
+CFI_DEF_CFA_REGISTER (1)
+ blr
+FUNC_END(_restgpr_31_x)
+FUNC_END(_restgpr_30_x)
+FUNC_END(_restgpr_29_x)
+FUNC_END(_restgpr_28_x)
+FUNC_END(_restgpr_27_x)
+FUNC_END(_restgpr_26_x)
+FUNC_END(_restgpr_25_x)
+FUNC_END(_restgpr_24_x)
+FUNC_END(_restgpr_23_x)
+FUNC_END(_restgpr_22_x)
+FUNC_END(_restgpr_21_x)
+FUNC_END(_restgpr_20_x)
+FUNC_END(_restgpr_19_x)
+FUNC_END(_restgpr_18_x)
+FUNC_END(_restgpr_17_x)
+FUNC_END(_restgpr_16_x)
+FUNC_END(_restgpr_15_x)
+FUNC_END(_restgpr_14_x)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtsavevr.S b/gcc-4.9/libgcc/config/rs6000/crtsavevr.S
new file mode 100644
index 000000000..802b69cda
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtsavevr.S
@@ -0,0 +1,87 @@
+/* Routines for saving vector registers.
+
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Written by Alan Modra, IBM
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+#undef __ALTIVEC__
+#define __ALTIVEC__ 1
+ #include "ppc-asm.h"
+
+/* Called with r0 pointing just beyond the end of the vector save area. */
+
+ .section ".text"
+CFI_STARTPROC
+HIDDEN_FUNC(_savevr_20)
+ li r11,-192
+ stvx v20,r11,r0
+HIDDEN_FUNC(_savevr_21)
+ li r11,-176
+ stvx v21,r11,r0
+HIDDEN_FUNC(_savevr_22)
+ li r11,-160
+ stvx v22,r11,r0
+HIDDEN_FUNC(_savevr_23)
+ li r11,-144
+ stvx v23,r11,r0
+HIDDEN_FUNC(_savevr_24)
+ li r11,-128
+ stvx v24,r11,r0
+HIDDEN_FUNC(_savevr_25)
+ li r11,-112
+ stvx v25,r11,r0
+HIDDEN_FUNC(_savevr_26)
+ li r11,-96
+ stvx v26,r11,r0
+HIDDEN_FUNC(_savevr_27)
+ li r11,-80
+ stvx v27,r11,r0
+HIDDEN_FUNC(_savevr_28)
+ li r11,-64
+ stvx v28,r11,r0
+HIDDEN_FUNC(_savevr_29)
+ li r11,-48
+ stvx v29,r11,r0
+HIDDEN_FUNC(_savevr_30)
+ li r11,-32
+ stvx v30,r11,r0
+HIDDEN_FUNC(_savevr_31)
+ li r11,-16
+ stvx v31,r11,r0
+ blr
+FUNC_END(_savevr_31)
+FUNC_END(_savevr_30)
+FUNC_END(_savevr_29)
+FUNC_END(_savevr_28)
+FUNC_END(_savevr_27)
+FUNC_END(_savevr_26)
+FUNC_END(_savevr_25)
+FUNC_END(_savevr_24)
+FUNC_END(_savevr_23)
+FUNC_END(_savevr_22)
+FUNC_END(_savevr_21)
+FUNC_END(_savevr_20)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtsavfpr.S b/gcc-4.9/libgcc/config/rs6000/crtsavfpr.S
new file mode 100644
index 000000000..b7f9b3caa
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtsavfpr.S
@@ -0,0 +1,80 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ * 64-bit support written by David Edelsohn
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+/* Routines for saving floating point registers, called by the compiler. */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the floating point save area. */
+
+CFI_STARTPROC
+HIDDEN_FUNC(_savefpr_14) stfd 14,-144(11) /* save fp registers */
+HIDDEN_FUNC(_savefpr_15) stfd 15,-136(11)
+HIDDEN_FUNC(_savefpr_16) stfd 16,-128(11)
+HIDDEN_FUNC(_savefpr_17) stfd 17,-120(11)
+HIDDEN_FUNC(_savefpr_18) stfd 18,-112(11)
+HIDDEN_FUNC(_savefpr_19) stfd 19,-104(11)
+HIDDEN_FUNC(_savefpr_20) stfd 20,-96(11)
+HIDDEN_FUNC(_savefpr_21) stfd 21,-88(11)
+HIDDEN_FUNC(_savefpr_22) stfd 22,-80(11)
+HIDDEN_FUNC(_savefpr_23) stfd 23,-72(11)
+HIDDEN_FUNC(_savefpr_24) stfd 24,-64(11)
+HIDDEN_FUNC(_savefpr_25) stfd 25,-56(11)
+HIDDEN_FUNC(_savefpr_26) stfd 26,-48(11)
+HIDDEN_FUNC(_savefpr_27) stfd 27,-40(11)
+HIDDEN_FUNC(_savefpr_28) stfd 28,-32(11)
+HIDDEN_FUNC(_savefpr_29) stfd 29,-24(11)
+HIDDEN_FUNC(_savefpr_30) stfd 30,-16(11)
+HIDDEN_FUNC(_savefpr_31) stfd 31,-8(11)
+ blr
+FUNC_END(_savefpr_31)
+FUNC_END(_savefpr_30)
+FUNC_END(_savefpr_29)
+FUNC_END(_savefpr_28)
+FUNC_END(_savefpr_27)
+FUNC_END(_savefpr_26)
+FUNC_END(_savefpr_25)
+FUNC_END(_savefpr_24)
+FUNC_END(_savefpr_23)
+FUNC_END(_savefpr_22)
+FUNC_END(_savefpr_21)
+FUNC_END(_savefpr_20)
+FUNC_END(_savefpr_19)
+FUNC_END(_savefpr_18)
+FUNC_END(_savefpr_17)
+FUNC_END(_savefpr_16)
+FUNC_END(_savefpr_15)
+FUNC_END(_savefpr_14)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/crtsavgpr.S b/gcc-4.9/libgcc/config/rs6000/crtsavgpr.S
new file mode 100644
index 000000000..402dca0a6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/crtsavgpr.S
@@ -0,0 +1,80 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ * 64-bit support written by David Edelsohn
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+/* On PowerPC64 Linux, these functions are provided by the linker. */
+#ifndef __powerpc64__
+
+/* Routines for saving integer registers, called by the compiler. */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the integer save area. */
+
+CFI_STARTPROC
+HIDDEN_FUNC(_savegpr_14) stw 14,-72(11) /* save gp registers */
+HIDDEN_FUNC(_savegpr_15) stw 15,-68(11)
+HIDDEN_FUNC(_savegpr_16) stw 16,-64(11)
+HIDDEN_FUNC(_savegpr_17) stw 17,-60(11)
+HIDDEN_FUNC(_savegpr_18) stw 18,-56(11)
+HIDDEN_FUNC(_savegpr_19) stw 19,-52(11)
+HIDDEN_FUNC(_savegpr_20) stw 20,-48(11)
+HIDDEN_FUNC(_savegpr_21) stw 21,-44(11)
+HIDDEN_FUNC(_savegpr_22) stw 22,-40(11)
+HIDDEN_FUNC(_savegpr_23) stw 23,-36(11)
+HIDDEN_FUNC(_savegpr_24) stw 24,-32(11)
+HIDDEN_FUNC(_savegpr_25) stw 25,-28(11)
+HIDDEN_FUNC(_savegpr_26) stw 26,-24(11)
+HIDDEN_FUNC(_savegpr_27) stw 27,-20(11)
+HIDDEN_FUNC(_savegpr_28) stw 28,-16(11)
+HIDDEN_FUNC(_savegpr_29) stw 29,-12(11)
+HIDDEN_FUNC(_savegpr_30) stw 30,-8(11)
+HIDDEN_FUNC(_savegpr_31) stw 31,-4(11)
+ blr
+FUNC_END(_savegpr_31)
+FUNC_END(_savegpr_30)
+FUNC_END(_savegpr_29)
+FUNC_END(_savegpr_28)
+FUNC_END(_savegpr_27)
+FUNC_END(_savegpr_26)
+FUNC_END(_savegpr_25)
+FUNC_END(_savegpr_24)
+FUNC_END(_savegpr_23)
+FUNC_END(_savegpr_22)
+FUNC_END(_savegpr_21)
+FUNC_END(_savegpr_20)
+FUNC_END(_savegpr_19)
+FUNC_END(_savegpr_18)
+FUNC_END(_savegpr_17)
+FUNC_END(_savegpr_16)
+FUNC_END(_savegpr_15)
+FUNC_END(_savegpr_14)
+CFI_ENDPROC
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/cxa_atexit.c b/gcc-4.9/libgcc/config/rs6000/cxa_atexit.c
new file mode 100644
index 000000000..20a4d7c70
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/cxa_atexit.c
@@ -0,0 +1,131 @@
+/* Copyright (C) 1999-2014 Free Software Foundation, Inc.
+
+ NOTE: This source is derived from an old version taken from the GNU C
+ Library (glibc).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "exit.h"
+
+#undef __cxa_atexit
+
+#define atomic_write_barrier() __asm__ ("eieio" ::: "memory")
+
+int
+attribute_hidden
+__internal_atexit (void (*func) (void *), void *arg, void *d,
+ struct exit_function_list **listp)
+{
+ struct exit_function *new = __new_exitfn (listp);
+
+ if (new == NULL)
+ return -1;
+
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+ new->func.cxa.fn = (void (*) (void *, int)) func;
+ new->func.cxa.arg = arg;
+ new->func.cxa.dso_handle = d;
+ atomic_write_barrier ();
+ new->flavor = ef_cxa;
+ return 0;
+}
+
+
+/* Register a function to be called by exit or when a shared library
+ is unloaded. This function is only called from code generated by
+ the C++ compiler. */
+int
+__cxa_atexit (void (*func) (void *), void *arg, void *d)
+{
+ return __internal_atexit (func, arg, d, &__exit_funcs);
+}
+INTDEF(__cxa_atexit)
+
+
+static struct exit_function_list initial;
+struct exit_function_list *__exit_funcs = &initial;
+uint64_t __new_exitfn_called;
+
+struct exit_function *
+__new_exitfn (struct exit_function_list **listp)
+{
+ struct exit_function_list *p = NULL;
+ struct exit_function_list *l;
+ struct exit_function *r = NULL;
+ size_t i = 0;
+
+ for (l = *listp; l != NULL; p = l, l = l->next)
+ {
+ for (i = l->idx; i > 0; --i)
+ if (l->fns[i - 1].flavor != ef_free)
+ break;
+
+ if (i > 0)
+ break;
+
+ /* This block is completely unused. */
+ l->idx = 0;
+ }
+
+ if (l == NULL || i == sizeof (l->fns) / sizeof (l->fns[0]))
+ {
+ /* The last entry in a block is used. Use the first entry in
+ the previous block if it exists. Otherwise create a new one. */
+ if (p == NULL)
+ {
+ assert (l != NULL);
+ p = (struct exit_function_list *)
+ calloc (1, sizeof (struct exit_function_list));
+ if (p != NULL)
+ {
+ p->next = *listp;
+ *listp = p;
+ }
+ }
+
+ if (p != NULL)
+ {
+ r = &p->fns[0];
+ p->idx = 1;
+ }
+ }
+ else
+ {
+ /* There is more room in the block. */
+ r = &l->fns[i];
+ l->idx = i + 1;
+ }
+
+ /* Mark entry as used, but we don't know the flavor now. */
+ if (r != NULL)
+ {
+ r->flavor = ef_us;
+ ++__new_exitfn_called;
+ }
+
+ return r;
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/cxa_finalize.c b/gcc-4.9/libgcc/config/rs6000/cxa_finalize.c
new file mode 100644
index 000000000..0f42335a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/cxa_finalize.c
@@ -0,0 +1,85 @@
+/* Copyright (C) 1999-2014 Free Software Foundation, Inc.
+
+ NOTE: This source is derived from an old version taken from the GNU C
+ Library (glibc).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include "exit.h"
+
+
+static boolean_t
+catomic_compare_and_exchange_bool_acq (long *mem, long newval, long oldval)
+{
+ return __atomic_compare_exchange (mem, &oldval, &newval, 0,
+ __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE);
+}
+
+/* If D is non-NULL, call all functions registered with `__cxa_atexit'
+ with the same dso handle. Otherwise, if D is NULL, call all of the
+ registered handlers. */
+void
+__cxa_finalize (void *d)
+{
+ struct exit_function_list *funcs;
+
+ restart:
+ for (funcs = __exit_funcs; funcs; funcs = funcs->next)
+ {
+ struct exit_function *f;
+
+ for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+ {
+ void (*cxafn) (void *arg, int status);
+ void *cxaarg;
+
+ if ((d == NULL || d == f->func.cxa.dso_handle)
+ /* We don't want to run this cleanup more than once. */
+ && (cxafn = f->func.cxa.fn,
+ cxaarg = f->func.cxa.arg,
+ ! catomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
+ ef_cxa)))
+ {
+ uint64_t check = __new_exitfn_called;
+
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (cxafn);
+#endif
+ cxafn (cxaarg, 0);
+
+ /* It is possible that that last exit function registered
+ more exit functions. Start the loop over. */
+ if (__builtin_expect (check != __new_exitfn_called, 0))
+ goto restart;
+ }
+ }
+ }
+
+ /* Remove the registered fork handlers. We do not have to
+ unregister anything if the program is going to terminate anyway. */
+#ifdef UNREGISTER_ATFORK
+ if (d != NULL)
+ UNREGISTER_ATFORK (d);
+#endif
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-asm.h b/gcc-4.9/libgcc/config/rs6000/darwin-asm.h
new file mode 100644
index 000000000..eca409514
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-asm.h
@@ -0,0 +1,51 @@
+/* Macro definitions to used to support 32/64-bit code in Darwin's
+ * assembly files.
+ *
+ * Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* These are donated from /usr/include/architecture/ppc . */
+
+#if defined(__ppc64__)
+#define MODE_CHOICE(x, y) y
+#else
+#define MODE_CHOICE(x, y) x
+#endif
+
+#define cmpg MODE_CHOICE(cmpw, cmpd)
+#define lg MODE_CHOICE(lwz, ld)
+#define stg MODE_CHOICE(stw, std)
+#define lgx MODE_CHOICE(lwzx, ldx)
+#define stgx MODE_CHOICE(stwx, stdx)
+#define lgu MODE_CHOICE(lwzu, ldu)
+#define stgu MODE_CHOICE(stwu, stdu)
+#define lgux MODE_CHOICE(lwzux, ldux)
+#define stgux MODE_CHOICE(stwux, stdux)
+#define lgwa MODE_CHOICE(lwz, lwa)
+
+#define g_long MODE_CHOICE(long, quad) /* usage is ".g_long" */
+
+#define GPR_BYTES MODE_CHOICE(4,8) /* size of a GPR in bytes */
+#define LOG2_GPR_BYTES MODE_CHOICE(2,3) /* log2(GPR_BYTES) */
+
+#define SAVED_LR_OFFSET MODE_CHOICE(8,16) /* position of saved
+ LR in frame */
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-crt2.c b/gcc-4.9/libgcc/config/rs6000/darwin-crt2.c
new file mode 100644
index 000000000..903a5c6b7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-crt2.c
@@ -0,0 +1,153 @@
+/* KeyMgr backwards-compatibility support for Darwin.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* It is incorrect to include config.h here, because this file is being
+ compiled for the target, and hence definitions concerning only the host
+ do not apply. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+
+/* This file doesn't do anything useful on non-powerpc targets, since they
+ don't have backwards compatibility anyway. */
+
+#ifdef __ppc__
+
+/* Homemade decls substituting for getsect.h and dyld.h, so cross
+ compilation works. */
+struct mach_header;
+extern char *getsectdatafromheader (struct mach_header *, const char *,
+ const char *, unsigned long *);
+extern void _dyld_register_func_for_add_image
+ (void (*) (struct mach_header *, unsigned long));
+extern void _dyld_register_func_for_remove_image
+ (void (*) (struct mach_header *, unsigned long));
+
+extern void __darwin_gcc3_preregister_frame_info (void);
+
+/* These are from "keymgr.h". */
+extern void _init_keymgr (void);
+extern void *_keymgr_get_and_lock_processwide_ptr (unsigned key);
+extern void _keymgr_set_and_unlock_processwide_ptr (unsigned key, void *ptr);
+
+extern void *__keymgr_global[];
+typedef struct _Sinfo_Node {
+ unsigned int size ; /*size of this node*/
+ unsigned short major_version ; /*API major version.*/
+ unsigned short minor_version ; /*API minor version.*/
+ } _Tinfo_Node ;
+
+/* KeyMgr 3.x is the first one supporting GCC3 stuff natively. */
+#define KEYMGR_API_MAJOR_GCC3 3
+/* ... with these keys. */
+#define KEYMGR_GCC3_LIVE_IMAGE_LIST 301 /* loaded images */
+#define KEYMGR_GCC3_DW2_OBJ_LIST 302 /* Dwarf2 object list */
+
+/* Node of KEYMGR_GCC3_LIVE_IMAGE_LIST. Info about each resident image. */
+struct live_images {
+ unsigned long this_size; /* sizeof (live_images) */
+ struct mach_header *mh; /* the image info */
+ unsigned long vm_slide;
+ void (*destructor)(struct live_images *); /* destructor for this */
+ struct live_images *next;
+ unsigned int examined_p;
+ void *fde;
+ void *object_info;
+ unsigned long info[2]; /* Future use. */
+};
+
+
+/* These routines are used only on Darwin versions before 10.2.
+ Later versions have equivalent code in the system.
+ Eventually, they might go away, although it might be a long time... */
+
+static void darwin_unwind_dyld_remove_image_hook
+ (struct mach_header *m, unsigned long s);
+static void darwin_unwind_dyld_remove_image_hook
+ (struct mach_header *m, unsigned long s);
+extern void __darwin_gcc3_preregister_frame_info (void);
+
+static void
+darwin_unwind_dyld_add_image_hook (struct mach_header *mh, unsigned long slide)
+{
+ struct live_images *l = (struct live_images *)calloc (1, sizeof (*l));
+ l->mh = mh;
+ l->vm_slide = slide;
+ l->this_size = sizeof (*l);
+ l->next = (struct live_images *)
+ _keymgr_get_and_lock_processwide_ptr (KEYMGR_GCC3_LIVE_IMAGE_LIST);
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_GCC3_LIVE_IMAGE_LIST, l);
+}
+
+static void
+darwin_unwind_dyld_remove_image_hook (struct mach_header *m, unsigned long s)
+{
+ struct live_images *top, **lip, *destroy = NULL;
+
+ /* Look for it in the list of live images and delete it. */
+
+ top = (struct live_images *)
+ _keymgr_get_and_lock_processwide_ptr (KEYMGR_GCC3_LIVE_IMAGE_LIST);
+ for (lip = &top; *lip != NULL; lip = &(*lip)->next)
+ {
+ if ((*lip)->mh == m && (*lip)->vm_slide == s)
+ {
+ destroy = *lip;
+ *lip = destroy->next; /* unlink DESTROY */
+
+ if (destroy->this_size != sizeof (*destroy)) /* sanity check */
+ abort ();
+
+ break;
+ }
+ }
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_GCC3_LIVE_IMAGE_LIST, top);
+
+ /* Now that we have unlinked this from the image list, toss it. */
+ if (destroy != NULL)
+ {
+ if (destroy->destructor != NULL)
+ (*destroy->destructor) (destroy);
+ free (destroy);
+ }
+}
+
+void
+__darwin_gcc3_preregister_frame_info (void)
+{
+ const _Tinfo_Node *info;
+ _init_keymgr ();
+ info = (_Tinfo_Node *)__keymgr_global[2];
+ if (info != NULL)
+ {
+ if (info->major_version >= KEYMGR_API_MAJOR_GCC3)
+ return;
+ /* Otherwise, use our own add_image_hooks. */
+ }
+
+ _dyld_register_func_for_add_image (darwin_unwind_dyld_add_image_hook);
+ _dyld_register_func_for_remove_image (darwin_unwind_dyld_remove_image_hook);
+}
+
+#endif /* __ppc__ */
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-fallback.c b/gcc-4.9/libgcc/config/rs6000/darwin-fallback.c
new file mode 100644
index 000000000..3f502d09d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-fallback.c
@@ -0,0 +1,488 @@
+/* Fallback frame-state unwinder for Darwin.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __ppc__
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#include "dwarf2.h"
+#include "unwind.h"
+#include "unwind-dw2.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#define R_LR 65
+#define R_CTR 66
+#define R_CR2 70
+#define R_XER 76
+#define R_VR0 77
+#define R_VRSAVE 109
+#define R_VSCR 110
+#define R_SPEFSCR 112
+
+typedef unsigned long reg_unit;
+
+/* Place in GPRS the parameters to the first 'sc' instruction that would
+ have been executed if we were returning from this CONTEXT, or
+ return false if an unexpected instruction is encountered. */
+
+static bool
+interpret_libc (reg_unit gprs[32], struct _Unwind_Context *context)
+{
+ uint32_t *pc = (uint32_t *)_Unwind_GetIP (context);
+ uint32_t cr;
+ reg_unit lr = (reg_unit) pc;
+ reg_unit ctr = 0;
+ uint32_t *invalid_address = NULL;
+
+ int i;
+
+ for (i = 0; i < 13; i++)
+ gprs[i] = 1;
+ gprs[1] = _Unwind_GetCFA (context);
+ for (; i < 32; i++)
+ gprs[i] = _Unwind_GetGR (context, i);
+ cr = _Unwind_GetGR (context, R_CR2);
+
+ /* For each supported Libc, we have to track the code flow
+ all the way back into the kernel.
+
+ This code is believed to support all released Libc/Libsystem builds since
+ Jaguar 6C115, including all the security updates. To be precise,
+
+ Libc Libsystem Build(s)
+ 262~1 60~37 6C115
+ 262~1 60.2~4 6D52
+ 262~1 61~3 6F21-6F22
+ 262~1 63~24 6G30-6G37
+ 262~1 63~32 6I34-6I35
+ 262~1 63~64 6L29-6L60
+ 262.4.1~1 63~84 6L123-6R172
+
+ 320~1 71~101 7B85-7D28
+ 320~1 71~266 7F54-7F56
+ 320~1 71~288 7F112
+ 320~1 71~289 7F113
+ 320.1.3~1 71.1.1~29 7H60-7H105
+ 320.1.3~1 71.1.1~30 7H110-7H113
+ 320.1.3~1 71.1.1~31 7H114
+
+ That's a big table! It would be insane to try to keep track of
+ every little detail, so we just read the code itself and do what
+ it would do.
+ */
+
+ for (;;)
+ {
+ uint32_t ins = *pc++;
+
+ if ((ins & 0xFC000003) == 0x48000000) /* b instruction */
+ {
+ pc += ((((int32_t) ins & 0x3FFFFFC) ^ 0x2000000) - 0x2000004) / 4;
+ continue;
+ }
+ if ((ins & 0xFC600000) == 0x2C000000) /* cmpwi */
+ {
+ int32_t val1 = (int16_t) ins;
+ int32_t val2 = gprs[ins >> 16 & 0x1F];
+ /* Only beq and bne instructions are supported, so we only
+ need to set the EQ bit. */
+ uint32_t mask = 0xF << ((ins >> 21 & 0x1C) ^ 0x1C);
+ if (val1 == val2)
+ cr |= mask;
+ else
+ cr &= ~mask;
+ continue;
+ }
+ if ((ins & 0xFEC38003) == 0x40820000) /* forwards beq/bne */
+ {
+ if ((cr >> ((ins >> 16 & 0x1F) ^ 0x1F) & 1) == (ins >> 24 & 1))
+ pc += (ins & 0x7FFC) / 4 - 1;
+ continue;
+ }
+ if ((ins & 0xFC0007FF) == 0x7C000378) /* or, including mr */
+ {
+ gprs [ins >> 16 & 0x1F] = (gprs [ins >> 11 & 0x1F]
+ | gprs [ins >> 21 & 0x1F]);
+ continue;
+ }
+ if (ins >> 26 == 0x0E) /* addi, including li */
+ {
+ reg_unit src = (ins >> 16 & 0x1F) == 0 ? 0 : gprs [ins >> 16 & 0x1F];
+ gprs [ins >> 21 & 0x1F] = src + (int16_t) ins;
+ continue;
+ }
+ if (ins >> 26 == 0x0F) /* addis, including lis */
+ {
+ reg_unit src = (ins >> 16 & 0x1F) == 0 ? 0 : gprs [ins >> 16 & 0x1F];
+ gprs [ins >> 21 & 0x1F] = src + ((int16_t) ins << 16);
+ continue;
+ }
+ if (ins >> 26 == 0x20) /* lwz */
+ {
+ reg_unit src = (ins >> 16 & 0x1F) == 0 ? 0 : gprs [ins >> 16 & 0x1F];
+ uint32_t *p = (uint32_t *)(src + (int16_t) ins);
+ if (p == invalid_address)
+ return false;
+ gprs [ins >> 21 & 0x1F] = *p;
+ continue;
+ }
+ if (ins >> 26 == 0x21) /* lwzu */
+ {
+ uint32_t *p = (uint32_t *)(gprs [ins >> 16 & 0x1F] += (int16_t) ins);
+ if (p == invalid_address)
+ return false;
+ gprs [ins >> 21 & 0x1F] = *p;
+ continue;
+ }
+ if (ins >> 26 == 0x24) /* stw */
+ /* What we hope this is doing is '--in_sigtramp'. We don't want
+ to actually store to memory, so just make a note of the
+ address and refuse to load from it. */
+ {
+ reg_unit src = (ins >> 16 & 0x1F) == 0 ? 0 : gprs [ins >> 16 & 0x1F];
+ uint32_t *p = (uint32_t *)(src + (int16_t) ins);
+ if (p == NULL || invalid_address != NULL)
+ return false;
+ invalid_address = p;
+ continue;
+ }
+ if (ins >> 26 == 0x2E) /* lmw */
+ {
+ reg_unit src = (ins >> 16 & 0x1F) == 0 ? 0 : gprs [ins >> 16 & 0x1F];
+ uint32_t *p = (uint32_t *)(src + (int16_t) ins);
+ int i;
+
+ for (i = (ins >> 21 & 0x1F); i < 32; i++)
+ {
+ if (p == invalid_address)
+ return false;
+ gprs[i] = *p++;
+ }
+ continue;
+ }
+ if ((ins & 0xFC1FFFFF) == 0x7c0803a6) /* mtlr */
+ {
+ lr = gprs [ins >> 21 & 0x1F];
+ continue;
+ }
+ if ((ins & 0xFC1FFFFF) == 0x7c0802a6) /* mflr */
+ {
+ gprs [ins >> 21 & 0x1F] = lr;
+ continue;
+ }
+ if ((ins & 0xFC1FFFFF) == 0x7c0903a6) /* mtctr */
+ {
+ ctr = gprs [ins >> 21 & 0x1F];
+ continue;
+ }
+ /* The PowerPC User's Manual says that bit 11 of the mtcrf
+ instruction is reserved and should be set to zero, but it
+ looks like the Darwin assembler doesn't do that... */
+ if ((ins & 0xFC000FFF) == 0x7c000120) /* mtcrf */
+ {
+ int i;
+ uint32_t mask = 0;
+ for (i = 0; i < 8; i++)
+ mask |= ((-(ins >> (12 + i) & 1)) & 0xF) << 4 * i;
+ cr = (cr & ~mask) | (gprs [ins >> 21 & 0x1F] & mask);
+ continue;
+ }
+ if (ins == 0x429f0005) /* bcl- 20,4*cr7+so,.+4, loads pc into LR */
+ {
+ lr = (reg_unit) pc;
+ continue;
+ }
+ if (ins == 0x4e800420) /* bctr */
+ {
+ pc = (uint32_t *) ctr;
+ continue;
+ }
+ if (ins == 0x44000002) /* sc */
+ return true;
+
+ return false;
+ }
+}
+
+/* We used to include <ucontext.h> and <mach/thread_status.h>,
+ but they change so much between different Darwin system versions
+ that it's much easier to just write the structures involved here
+ directly. */
+
+/* These defines are from the kernel's bsd/dev/ppc/unix_signal.c. */
+#define UC_TRAD 1
+#define UC_TRAD_VEC 6
+#define UC_TRAD64 20
+#define UC_TRAD64_VEC 25
+#define UC_FLAVOR 30
+#define UC_FLAVOR_VEC 35
+#define UC_FLAVOR64 40
+#define UC_FLAVOR64_VEC 45
+#define UC_DUAL 50
+#define UC_DUAL_VEC 55
+
+struct gcc_ucontext
+{
+ int onstack;
+ sigset_t sigmask;
+ void * stack_sp;
+ size_t stack_sz;
+ int stack_flags;
+ struct gcc_ucontext *link;
+ size_t mcsize;
+ struct gcc_mcontext32 *mcontext;
+};
+
+struct gcc_float_vector_state
+{
+ double fpregs[32];
+ uint32_t fpscr_pad;
+ uint32_t fpscr;
+ uint32_t save_vr[32][4];
+ uint32_t save_vscr[4];
+};
+
+struct gcc_mcontext32 {
+ uint32_t dar;
+ uint32_t dsisr;
+ uint32_t exception;
+ uint32_t padding1[5];
+ uint32_t srr0;
+ uint32_t srr1;
+ uint32_t gpr[32];
+ uint32_t cr;
+ uint32_t xer;
+ uint32_t lr;
+ uint32_t ctr;
+ uint32_t mq;
+ uint32_t vrsave;
+ struct gcc_float_vector_state fvs;
+};
+
+/* These are based on /usr/include/ppc/ucontext.h and
+ /usr/include/mach/ppc/thread_status.h, but rewritten to be more
+ convenient, to compile on Jaguar, and to work around Radar 3712064
+ on Panther, which is that the 'es' field of 'struct mcontext64' has
+ the wrong type (doh!). */
+
+struct gcc_mcontext64 {
+ uint64_t dar;
+ uint32_t dsisr;
+ uint32_t exception;
+ uint32_t padding1[4];
+ uint64_t srr0;
+ uint64_t srr1;
+ uint32_t gpr[32][2];
+ uint32_t cr;
+ uint32_t xer[2]; /* These are arrays because the original structure has them misaligned. */
+ uint32_t lr[2];
+ uint32_t ctr[2];
+ uint32_t vrsave;
+ struct gcc_float_vector_state fvs;
+};
+
+#define UC_FLAVOR_SIZE \
+ (sizeof (struct gcc_mcontext32) - 33*16)
+
+#define UC_FLAVOR_VEC_SIZE (sizeof (struct gcc_mcontext32))
+
+#define UC_FLAVOR64_SIZE \
+ (sizeof (struct gcc_mcontext64) - 33*16)
+
+#define UC_FLAVOR64_VEC_SIZE (sizeof (struct gcc_mcontext64))
+
+/* Given GPRS as input to a 'sc' instruction, and OLD_CFA, update FS
+ to represent the execution of a signal return; or, if not a signal
+ return, return false. */
+
+static bool
+handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
+ _Unwind_Ptr old_cfa)
+{
+ struct gcc_ucontext *uctx;
+ bool is_64, is_vector;
+ struct gcc_float_vector_state * float_vector_state;
+ _Unwind_Ptr new_cfa;
+ int i;
+ static _Unwind_Ptr return_addr;
+
+ /* Yay! We're in a Libc that we understand, and it's made a
+ system call. In Jaguar, this is a direct system call with value 103;
+ in Panther and Tiger it is a SYS_syscall call for system call number 184,
+ and in Leopard it is a direct syscall with number 184. */
+
+ if (gprs[0] == 0x67 /* SYS_SIGRETURN */)
+ {
+ uctx = (struct gcc_ucontext *) gprs[3];
+ is_vector = (uctx->mcsize == UC_FLAVOR64_VEC_SIZE
+ || uctx->mcsize == UC_FLAVOR_VEC_SIZE);
+ is_64 = (uctx->mcsize == UC_FLAVOR64_VEC_SIZE
+ || uctx->mcsize == UC_FLAVOR64_SIZE);
+ }
+ else if (gprs[0] == 0 /* SYS_syscall */ && gprs[3] == 184)
+ {
+ int ctxstyle = gprs[5];
+ uctx = (struct gcc_ucontext *) gprs[4];
+ is_vector = (ctxstyle == UC_FLAVOR_VEC || ctxstyle == UC_FLAVOR64_VEC
+ || ctxstyle == UC_TRAD_VEC || ctxstyle == UC_TRAD64_VEC);
+ is_64 = (ctxstyle == UC_FLAVOR64_VEC || ctxstyle == UC_TRAD64_VEC
+ || ctxstyle == UC_FLAVOR64 || ctxstyle == UC_TRAD64);
+ }
+ else if (gprs[0] == 184 /* SYS_sigreturn */)
+ {
+ int ctxstyle = gprs[4];
+ uctx = (struct gcc_ucontext *) gprs[3];
+ is_vector = (ctxstyle == UC_FLAVOR_VEC || ctxstyle == UC_FLAVOR64_VEC
+ || ctxstyle == UC_TRAD_VEC || ctxstyle == UC_TRAD64_VEC);
+ is_64 = (ctxstyle == UC_FLAVOR64_VEC || ctxstyle == UC_TRAD64_VEC
+ || ctxstyle == UC_FLAVOR64 || ctxstyle == UC_TRAD64);
+ }
+ else
+ return false;
+
+#define set_offset(r, addr) \
+ (fs->regs.reg[r].how = REG_SAVED_OFFSET, \
+ fs->regs.reg[r].loc.offset = (_Unwind_Ptr)(addr) - new_cfa)
+
+ /* Restore even the registers that are not call-saved, since they
+ might be being used in the prologue to save other registers,
+ for instance GPR0 is sometimes used to save LR. */
+
+ /* Handle the GPRs, and produce the information needed to do the rest. */
+ if (is_64)
+ {
+ /* The context is 64-bit, but it doesn't carry any extra information
+ for us because only the low 32 bits of the registers are
+ call-saved. */
+ struct gcc_mcontext64 *m64 = (struct gcc_mcontext64 *)uctx->mcontext;
+ int i;
+
+ float_vector_state = &m64->fvs;
+
+ new_cfa = m64->gpr[1][1];
+
+ set_offset (R_CR2, &m64->cr);
+ for (i = 0; i < 32; i++)
+ set_offset (i, m64->gpr[i] + 1);
+ set_offset (R_XER, m64->xer + 1);
+ set_offset (R_LR, m64->lr + 1);
+ set_offset (R_CTR, m64->ctr + 1);
+ if (is_vector)
+ set_offset (R_VRSAVE, &m64->vrsave);
+
+ /* Sometimes, srr0 points to the instruction that caused the exception,
+ and sometimes to the next instruction to be executed; we want
+ the latter. */
+ if (m64->exception == 3 || m64->exception == 4
+ || m64->exception == 6
+ || (m64->exception == 7 && !(m64->srr1 & 0x10000)))
+ return_addr = m64->srr0 + 4;
+ else
+ return_addr = m64->srr0;
+ }
+ else
+ {
+ struct gcc_mcontext32 *m = uctx->mcontext;
+ int i;
+
+ float_vector_state = &m->fvs;
+
+ new_cfa = m->gpr[1];
+
+ set_offset (R_CR2, &m->cr);
+ for (i = 0; i < 32; i++)
+ set_offset (i, m->gpr + i);
+ set_offset (R_XER, &m->xer);
+ set_offset (R_LR, &m->lr);
+ set_offset (R_CTR, &m->ctr);
+
+ if (is_vector)
+ set_offset (R_VRSAVE, &m->vrsave);
+
+ /* Sometimes, srr0 points to the instruction that caused the exception,
+ and sometimes to the next instruction to be executed; we want
+ the latter. */
+ if (m->exception == 3 || m->exception == 4
+ || m->exception == 6
+ || (m->exception == 7 && !(m->srr1 & 0x10000)))
+ return_addr = m->srr0 + 4;
+ else
+ return_addr = m->srr0;
+ }
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - old_cfa;;
+
+ /* The choice of column for the return address is somewhat tricky.
+ Fortunately, the actual choice is private to this file, and
+ the space it's reserved from is the GCC register space, not the
+ DWARF2 numbering. So any free element of the right size is an OK
+ choice. Thus: */
+ fs->retaddr_column = ARG_POINTER_REGNUM;
+ /* FIXME: this should really be done using a DWARF2 location expression,
+ not using a static variable. In fact, this entire file should
+ be implemented in DWARF2 expressions. */
+ set_offset (ARG_POINTER_REGNUM, &return_addr);
+
+ for (i = 0; i < 32; i++)
+ set_offset (32 + i, float_vector_state->fpregs + i);
+ set_offset (R_SPEFSCR, &float_vector_state->fpscr);
+
+ if (is_vector)
+ {
+ for (i = 0; i < 32; i++)
+ set_offset (R_VR0 + i, float_vector_state->save_vr + i);
+ set_offset (R_VSCR, float_vector_state->save_vscr);
+ }
+
+ return true;
+}
+
+/* This is also prototyped in rs6000/darwin.h, inside the
+ MD_FALLBACK_FRAME_STATE_FOR macro. */
+extern bool _Unwind_fallback_frame_state_for (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs);
+
+/* Implement the MD_FALLBACK_FRAME_STATE_FOR macro,
+ returning true iff the frame was a sigreturn() frame that we
+ can understand. */
+
+bool
+_Unwind_fallback_frame_state_for (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ reg_unit gprs[32];
+
+ if (!interpret_libc (gprs, context))
+ return false;
+ return handle_syscall (fs, gprs, _Unwind_GetCFA (context));
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-fpsave.S b/gcc-4.9/libgcc/config/rs6000/darwin-fpsave.S
new file mode 100644
index 000000000..510a9d650
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-fpsave.S
@@ -0,0 +1,92 @@
+/* This file contains the floating-point save and restore routines.
+ *
+ * Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* THE SAVE AND RESTORE ROUTINES CAN HAVE ONLY ONE GLOBALLY VISIBLE
+ ENTRY POINT - callers have to jump to "saveFP+60" to save f29..f31,
+ for example. For FP reg saves/restores, it takes one instruction
+ (4 bytes) to do the operation; for Vector regs, 2 instructions are
+ required (8 bytes.)
+
+ MORAL: DO NOT MESS AROUND WITH THESE FUNCTIONS! */
+
+#include "darwin-asm.h"
+
+.text
+ .align 2
+
+/* saveFP saves R0 -- assumed to be the callers LR -- to 8/16(R1). */
+
+.private_extern saveFP
+saveFP:
+ stfd f14,-144(r1)
+ stfd f15,-136(r1)
+ stfd f16,-128(r1)
+ stfd f17,-120(r1)
+ stfd f18,-112(r1)
+ stfd f19,-104(r1)
+ stfd f20,-96(r1)
+ stfd f21,-88(r1)
+ stfd f22,-80(r1)
+ stfd f23,-72(r1)
+ stfd f24,-64(r1)
+ stfd f25,-56(r1)
+ stfd f26,-48(r1)
+ stfd f27,-40(r1)
+ stfd f28,-32(r1)
+ stfd f29,-24(r1)
+ stfd f30,-16(r1)
+ stfd f31,-8(r1)
+ stg r0,SAVED_LR_OFFSET(r1)
+ blr
+
+/* restFP restores the caller`s LR from 8/16(R1). Note that the code for
+ this starts at the offset of F30 restoration, so calling this
+ routine in an attempt to restore only F31 WILL NOT WORK (it would
+ be a stupid thing to do, anyway.) */
+
+.private_extern restFP
+restFP:
+ lfd f14,-144(r1)
+ lfd f15,-136(r1)
+ lfd f16,-128(r1)
+ lfd f17,-120(r1)
+ lfd f18,-112(r1)
+ lfd f19,-104(r1)
+ lfd f20,-96(r1)
+ lfd f21,-88(r1)
+ lfd f22,-80(r1)
+ lfd f23,-72(r1)
+ lfd f24,-64(r1)
+ lfd f25,-56(r1)
+ lfd f26,-48(r1)
+ lfd f27,-40(r1)
+ lfd f28,-32(r1)
+ lfd f29,-24(r1)
+ /* <OFFSET OF F30 RESTORE> restore callers LR */
+ lg r0,SAVED_LR_OFFSET(r1)
+ lfd f30,-16(r1)
+ /* and prepare for return to caller */
+ mtlr r0
+ lfd f31,-8(r1)
+ blr
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-gpsave.S b/gcc-4.9/libgcc/config/rs6000/darwin-gpsave.S
new file mode 100644
index 000000000..a02eccb95
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-gpsave.S
@@ -0,0 +1,118 @@
+/* This file contains the GPR save and restore routines for Darwin.
+ *
+ * Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Contributed by Iain Sandoe <iains@gcc.gnu.org> */
+
+/* Like their FP and VEC counterparts, these routines have only one externally
+ visible entry point. Calls have to be constructed as offsets from this.
+ (I.E. callers have to jump to "saveGPR+((x-13)*4" to save registers x..31).
+
+ Each save/load instruction is 4 bytes long (for both m32 and m64 builds).
+
+ The save/restores here are done w.r.t r11.
+
+ restGPRx restores the link reg from the stack and returns to the saved
+ address.
+
+ */
+
+#include "darwin-asm.h"
+
+ .text
+ .align 2
+
+ .private_extern saveGPR
+saveGPR:
+ stg r13,(-19 * GPR_BYTES)(r11)
+ stg r14,(-18 * GPR_BYTES)(r11)
+ stg r15,(-17 * GPR_BYTES)(r11)
+ stg r16,(-16 * GPR_BYTES)(r11)
+ stg r17,(-15 * GPR_BYTES)(r11)
+ stg r18,(-14 * GPR_BYTES)(r11)
+ stg r19,(-13 * GPR_BYTES)(r11)
+ stg r20,(-12 * GPR_BYTES)(r11)
+ stg r21,(-11 * GPR_BYTES)(r11)
+ stg r22,(-10 * GPR_BYTES)(r11)
+ stg r23,( -9 * GPR_BYTES)(r11)
+ stg r24,( -8 * GPR_BYTES)(r11)
+ stg r25,( -7 * GPR_BYTES)(r11)
+ stg r26,( -6 * GPR_BYTES)(r11)
+ stg r27,( -5 * GPR_BYTES)(r11)
+ stg r28,( -4 * GPR_BYTES)(r11)
+ stg r29,( -3 * GPR_BYTES)(r11)
+ stg r30,( -2 * GPR_BYTES)(r11)
+ stg r31,( -1 * GPR_BYTES)(r11)
+ blr
+
+/* */
+
+ .private_extern restGPR
+restGPR:
+ lg r13,(-19 * GPR_BYTES)(r11)
+ lg r14,(-18 * GPR_BYTES)(r11)
+ lg r15,(-17 * GPR_BYTES)(r11)
+ lg r16,(-16 * GPR_BYTES)(r11)
+ lg r17,(-15 * GPR_BYTES)(r11)
+ lg r18,(-14 * GPR_BYTES)(r11)
+ lg r19,(-13 * GPR_BYTES)(r11)
+ lg r20,(-12 * GPR_BYTES)(r11)
+ lg r21,(-11 * GPR_BYTES)(r11)
+ lg r22,(-10 * GPR_BYTES)(r11)
+ lg r23,( -9 * GPR_BYTES)(r11)
+ lg r24,( -8 * GPR_BYTES)(r11)
+ lg r25,( -7 * GPR_BYTES)(r11)
+ lg r26,( -6 * GPR_BYTES)(r11)
+ lg r27,( -5 * GPR_BYTES)(r11)
+ lg r28,( -4 * GPR_BYTES)(r11)
+ lg r29,( -3 * GPR_BYTES)(r11)
+ lg r30,( -2 * GPR_BYTES)(r11)
+ lg r31,( -1 * GPR_BYTES)(r11)
+ blr
+
+ .private_extern restGPRx
+restGPRx:
+ lg r13,(-19 * GPR_BYTES)(r11)
+ lg r14,(-18 * GPR_BYTES)(r11)
+ lg r15,(-17 * GPR_BYTES)(r11)
+ lg r16,(-16 * GPR_BYTES)(r11)
+ lg r17,(-15 * GPR_BYTES)(r11)
+ lg r18,(-14 * GPR_BYTES)(r11)
+ lg r19,(-13 * GPR_BYTES)(r11)
+ lg r20,(-12 * GPR_BYTES)(r11)
+ lg r21,(-11 * GPR_BYTES)(r11)
+ lg r22,(-10 * GPR_BYTES)(r11)
+ lg r23,( -9 * GPR_BYTES)(r11)
+ lg r24,( -8 * GPR_BYTES)(r11)
+ lg r25,( -7 * GPR_BYTES)(r11)
+ lg r26,( -6 * GPR_BYTES)(r11)
+ lg r27,( -5 * GPR_BYTES)(r11)
+ lg r28,( -4 * GPR_BYTES)(r11)
+ lg r29,( -3 * GPR_BYTES)(r11)
+ /* Like the FP restore, we start from the offset for r30
+ thus a restore of only r31 is not going to work. */
+ lg r0,SAVED_LR_OFFSET(r1)
+ lg r30,( -2 * GPR_BYTES)(r11)
+ mtlr r0
+ lg r31,( -1 * GPR_BYTES)(r11)
+ blr
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-tramp.S b/gcc-4.9/libgcc/config/rs6000/darwin-tramp.S
new file mode 100644
index 000000000..9cf1ab070
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-tramp.S
@@ -0,0 +1,125 @@
+/* Special support for trampolines
+ *
+ * Copyright (C) 1996-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "darwin-asm.h"
+
+/* Set up trampolines. */
+
+.text
+ .align LOG2_GPR_BYTES
+Ltrampoline_initial:
+ mflr r0
+ bl 1f
+Lfunc = .-Ltrampoline_initial
+ .g_long 0 /* will be replaced with function address */
+Lchain = .-Ltrampoline_initial
+ .g_long 0 /* will be replaced with static chain */
+1: mflr r11
+ lg r12,0(r11) /* function address */
+ mtlr r0
+ mtctr r12
+ lg r11,GPR_BYTES(r11) /* static chain */
+ bctr
+
+trampoline_size = .-Ltrampoline_initial
+
+/* R3 = stack address to store trampoline */
+/* R4 = length of trampoline area */
+/* R5 = function address */
+/* R6 = static chain */
+
+ .globl ___trampoline_setup
+___trampoline_setup:
+ mflr r0 /* save return address */
+ bcl 20,31,LCF0 /* load up __trampoline_initial into r7 */
+LCF0:
+ mflr r11
+ addis r7,r11,ha16(LTRAMP-LCF0)
+ lg r7,lo16(LTRAMP-LCF0)(r7)
+ subi r7,r7,4
+ li r8,trampoline_size /* verify trampoline big enough */
+ cmpg cr1,r8,r4
+ srwi r4,r4,2 /* # words to move (insns always 4-byte) */
+ addi r9,r3,-4 /* adjust pointer for lgu */
+ mtctr r4
+ blt cr1,Labort
+
+ mtlr r0
+
+ /* Copy the instructions to the stack */
+Lmove:
+ lwzu r10,4(r7)
+ stwu r10,4(r9)
+ bdnz Lmove
+
+ /* Store correct function and static chain */
+ stg r5,Lfunc(r3)
+ stg r6,Lchain(r3)
+
+ /* Now flush both caches */
+ mtctr r4
+Lcache:
+ icbi 0,r3
+ dcbf 0,r3
+ addi r3,r3,4
+ bdnz Lcache
+
+ /* Ensure cache-flushing has finished. */
+ sync
+ isync
+
+ /* Make stack writeable. */
+ b ___enable_execute_stack
+
+Labort:
+#ifdef __DYNAMIC__
+ bl L_abort$stub
+.data
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+ .align 2
+L_abort$stub:
+ .indirect_symbol _abort
+ mflr r0
+ bcl 20,31,L0$_abort
+L0$_abort:
+ mflr r11
+ addis r11,r11,ha16(L_abort$lazy_ptr-L0$_abort)
+ mtlr r0
+ lgu r12,lo16(L_abort$lazy_ptr-L0$_abort)(r11)
+ mtctr r12
+ bctr
+.data
+.lazy_symbol_pointer
+L_abort$lazy_ptr:
+ .indirect_symbol _abort
+ .g_long dyld_stub_binding_helper
+#else
+ bl _abort
+#endif
+.data
+ .align LOG2_GPR_BYTES
+LTRAMP:
+ .g_long Ltrampoline_initial
+
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-unwind.h b/gcc-4.9/libgcc/config/rs6000/darwin-unwind.h
new file mode 100644
index 000000000..e7f4a4983
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-unwind.h
@@ -0,0 +1,34 @@
+/* DWARF2 EH unwinding support for 32-bit PowerPC Darwin.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __LP64__
+
+extern bool _Unwind_fallback_frame_state_for
+ (struct _Unwind_Context *context, _Unwind_FrameState *fs);
+
+#define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS) \
+ (_Unwind_fallback_frame_state_for (CONTEXT, FS) \
+ ? _URC_NO_REASON : _URC_END_OF_STACK)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-vecsave.S b/gcc-4.9/libgcc/config/rs6000/darwin-vecsave.S
new file mode 100644
index 000000000..24ed0f54e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-vecsave.S
@@ -0,0 +1,155 @@
+/* This file contains the vector save and restore routines.
+ *
+ * Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Vector save/restore routines for Darwin. Note that each vector
+ save/restore requires 2 instructions (8 bytes.)
+
+ THE SAVE AND RESTORE ROUTINES CAN HAVE ONLY ONE GLOBALLY VISIBLE
+ ENTRY POINT - callers have to jump to "saveFP+60" to save f29..f31,
+ for example. For FP reg saves/restores, it takes one instruction
+ (4 bytes) to do the operation; for Vector regs, 2 instructions are
+ required (8 bytes.). */
+
+ .machine ppc7400
+.text
+ .align 2
+
+.private_extern saveVEC
+saveVEC:
+ li r11,-192
+ stvx v20,r11,r0
+ li r11,-176
+ stvx v21,r11,r0
+ li r11,-160
+ stvx v22,r11,r0
+ li r11,-144
+ stvx v23,r11,r0
+ li r11,-128
+ stvx v24,r11,r0
+ li r11,-112
+ stvx v25,r11,r0
+ li r11,-96
+ stvx v26,r11,r0
+ li r11,-80
+ stvx v27,r11,r0
+ li r11,-64
+ stvx v28,r11,r0
+ li r11,-48
+ stvx v29,r11,r0
+ li r11,-32
+ stvx v30,r11,r0
+ li r11,-16
+ stvx v31,r11,r0
+ blr
+
+.private_extern restVEC
+restVEC:
+ li r11,-192
+ lvx v20,r11,r0
+ li r11,-176
+ lvx v21,r11,r0
+ li r11,-160
+ lvx v22,r11,r0
+ li r11,-144
+ lvx v23,r11,r0
+ li r11,-128
+ lvx v24,r11,r0
+ li r11,-112
+ lvx v25,r11,r0
+ li r11,-96
+ lvx v26,r11,r0
+ li r11,-80
+ lvx v27,r11,r0
+ li r11,-64
+ lvx v28,r11,r0
+ li r11,-48
+ lvx v29,r11,r0
+ li r11,-32
+ lvx v30,r11,r0
+ li r11,-16
+ lvx v31,r11,r0
+ blr
+
+/* saveVEC_vr11 -- as saveVEC but VRsave is returned in R11. */
+
+.private_extern saveVEC_vr11
+saveVEC_vr11:
+ li r11,-192
+ stvx v20,r11,r0
+ li r11,-176
+ stvx v21,r11,r0
+ li r11,-160
+ stvx v22,r11,r0
+ li r11,-144
+ stvx v23,r11,r0
+ li r11,-128
+ stvx v24,r11,r0
+ li r11,-112
+ stvx v25,r11,r0
+ li r11,-96
+ stvx v26,r11,r0
+ li r11,-80
+ stvx v27,r11,r0
+ li r11,-64
+ stvx v28,r11,r0
+ li r11,-48
+ stvx v29,r11,r0
+ li r11,-32
+ stvx v30,r11,r0
+ li r11,-16
+ stvx v31,r11,r0
+ mfspr r11,VRsave
+ blr
+
+/* As restVec, but the original VRsave value passed in R10. */
+
+.private_extern restVEC_vr10
+restVEC_vr10:
+ li r11,-192
+ lvx v20,r11,r0
+ li r11,-176
+ lvx v21,r11,r0
+ li r11,-160
+ lvx v22,r11,r0
+ li r11,-144
+ lvx v23,r11,r0
+ li r11,-128
+ lvx v24,r11,r0
+ li r11,-112
+ lvx v25,r11,r0
+ li r11,-96
+ lvx v26,r11,r0
+ li r11,-80
+ lvx v27,r11,r0
+ li r11,-64
+ lvx v28,r11,r0
+ li r11,-48
+ lvx v29,r11,r0
+ li r11,-32
+ lvx v30,r11,r0
+ li r11,-16
+ lvx v31,r11,r0
+ /* restore VRsave from R10. */
+ mtspr VRsave,r10
+ blr
diff --git a/gcc-4.9/libgcc/config/rs6000/darwin-world.S b/gcc-4.9/libgcc/config/rs6000/darwin-world.S
new file mode 100644
index 000000000..4d7253287
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/darwin-world.S
@@ -0,0 +1,252 @@
+/* This file contains the exception-handling save_world and
+ * restore_world routines, which need to do a run-time check to see if
+ * they should save and restore the vector registers.
+ *
+ * Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ppc64__
+
+ .machine ppc7400
+.data
+ .align 2
+
+#ifdef __DYNAMIC__
+
+.non_lazy_symbol_pointer
+L_has_vec$non_lazy_ptr:
+ .indirect_symbol __cpu_has_altivec
+ .long 0
+#else
+
+/* For static, "pretend" we have a non-lazy-pointer. */
+
+L_has_vec$non_lazy_ptr:
+ .long __cpu_has_altivec
+
+#endif
+
+
+.text
+ .align 2
+
+/* save_world and rest_world save/restore F14-F31 and possibly V20-V31
+ (assuming you have a CPU with vector registers; we use a global var
+ provided by the System Framework to determine this.)
+
+ SAVE_WORLD takes R0 (the caller`s caller`s return address) and R11
+ (the stack frame size) as parameters. It returns the updated VRsave
+ in R0 if we`re on a CPU with vector regs.
+
+ For gcc3 onward, we need to save and restore CR as well, since scheduled
+ prologs can cause comparisons to be moved before calls to save_world.
+
+ USES: R0 R11 R12 */
+
+.private_extern save_world
+save_world:
+ stw r0,8(r1)
+ mflr r0
+ bcl 20,31,Ls$pb
+Ls$pb: mflr r12
+ addis r12,r12,ha16(L_has_vec$non_lazy_ptr-Ls$pb)
+ lwz r12,lo16(L_has_vec$non_lazy_ptr-Ls$pb)(r12)
+ mtlr r0
+ lwz r12,0(r12)
+ /* grab CR */
+ mfcr r0
+ /* test HAS_VEC */
+ cmpwi r12,0
+ stfd f14,-144(r1)
+ stfd f15,-136(r1)
+ stfd f16,-128(r1)
+ stfd f17,-120(r1)
+ stfd f18,-112(r1)
+ stfd f19,-104(r1)
+ stfd f20,-96(r1)
+ stfd f21,-88(r1)
+ stfd f22,-80(r1)
+ stfd f23,-72(r1)
+ stfd f24,-64(r1)
+ stfd f25,-56(r1)
+ stfd f26,-48(r1)
+ stfd f27,-40(r1)
+ stfd f28,-32(r1)
+ stfd f29,-24(r1)
+ stfd f30,-16(r1)
+ stfd f31,-8(r1)
+ stmw r13,-220(r1)
+ /* stash CR */
+ stw r0,4(r1)
+ /* set R12 pointing at Vector Reg save area */
+ addi r12,r1,-224
+ /* allocate stack frame */
+ stwux r1,r1,r11
+ /* ...but return if HAS_VEC is zero */
+ bne+ L$saveVMX
+ /* Not forgetting to restore CR. */
+ mtcr r0
+ blr
+
+L$saveVMX:
+ /* We're saving Vector regs too. */
+ /* Restore CR from R0. No More Branches! */
+ mtcr r0
+
+ /* We should really use VRSAVE to figure out which vector regs
+ we actually need to save and restore. Some other time :-/ */
+
+ li r11,-192
+ stvx v20,r11,r12
+ li r11,-176
+ stvx v21,r11,r12
+ li r11,-160
+ stvx v22,r11,r12
+ li r11,-144
+ stvx v23,r11,r12
+ li r11,-128
+ stvx v24,r11,r12
+ li r11,-112
+ stvx v25,r11,r12
+ li r11,-96
+ stvx v26,r11,r12
+ li r11,-80
+ stvx v27,r11,r12
+ li r11,-64
+ stvx v28,r11,r12
+ li r11,-48
+ stvx v29,r11,r12
+ li r11,-32
+ stvx v30,r11,r12
+ mfspr r0,VRsave
+ li r11,-16
+ stvx v31,r11,r12
+ stw r0,0(r12) /* VRsave lives at -224(R1). */
+ ori r0,r0,0xfff /* We just saved these. */
+ mtspr VRsave,r0
+ blr
+
+/* rest_world is jumped to, not called, so no need to worry about LR.
+ clobbers R0, R7, R11 and R12. This just undoes the work done above. */
+
+ .private_extern rest_world
+rest_world:
+
+ lwz r11, 0(r1) /* Pickup previous SP */
+ li r7, 0 /* Stack offset is zero, r10 is ignored. */
+ b Lrest_world_eh_r7
+
+/* eh_rest_world_r10 is jumped to, not called, so no need to worry about LR.
+ R10 is the C++ EH stack adjust parameter, we return to the caller`s caller.
+
+ clobbers: R0, R7, R11 and R12
+ uses : R10
+ RETURNS : C++ EH Data registers (R3 - R6). */
+
+ .private_extern eh_rest_world_r10
+eh_rest_world_r10:
+
+ lwz r11, 0(r1) /* Pickup previous SP */
+ mr r7,r10 /* Stack offset. */
+
+ /* pickup the C++ EH data regs (R3 - R6.) */
+ lwz r6,-420(r11)
+ lwz r5,-424(r11)
+ lwz r4,-428(r11)
+ lwz r3,-432(r11)
+
+ /* Fall through to Lrest_world_eh_r7. */
+
+/* When we are doing the exception-handling epilog, R7 contains the offset to
+ add to the SP.
+
+ clobbers: R0, R11 and R12
+ uses : R7. */
+
+Lrest_world_eh_r7:
+ /* See if we have Altivec. */
+ bcl 20,31,Lr7$pb
+Lr7$pb: mflr r12
+
+ addis r12,r12,ha16(L_has_vec$non_lazy_ptr-Lr7$pb)
+ lwz r12,lo16(L_has_vec$non_lazy_ptr-Lr7$pb)(r12)
+ lwz r12,0(r12) /* R12 := HAS_VEC */
+ cmpwi r12,0
+ lmw r13,-220(r11)
+ beq L.rest_world_fp_eh
+
+ /* We have Altivec, restore VRsave and V20..V31 */
+ lwz r0,-224(r11)
+ li r12,-416
+ mtspr VRsave,r0
+ lvx v20,r11,r12
+ li r12,-400
+ lvx v21,r11,r12
+ li r12,-384
+ lvx v22,r11,r12
+ li r12,-368
+ lvx v23,r11,r12
+ li r12,-352
+ lvx v24,r11,r12
+ li r12,-336
+ lvx v25,r11,r12
+ li r12,-320
+ lvx v26,r11,r12
+ li r12,-304
+ lvx v27,r11,r12
+ li r12,-288
+ lvx v28,r11,r12
+ li r12,-272
+ lvx v29,r11,r12
+ li r12,-256
+ lvx v30,r11,r12
+ li r12,-240
+ lvx v31,r11,r12
+
+L.rest_world_fp_eh:
+ lwz r0,4(r11) /* recover saved CR */
+ lfd f14,-144(r11)
+ lfd f15,-136(r11)
+ lfd f16,-128(r11)
+ lfd f17,-120(r11)
+ lfd f18,-112(r11)
+ lfd f19,-104(r11)
+ lfd f20,-96(r11)
+ lfd f21,-88(r11)
+ lfd f22,-80(r11)
+ lfd f23,-72(r11)
+ lfd f24,-64(r11)
+ lfd f25,-56(r11)
+ lfd f26,-48(r11)
+ lfd f27,-40(r11)
+ lfd f28,-32(r11)
+ lfd f29,-24(r11)
+ lfd f30,-16(r11)
+ mtcr r0 /* restore the saved cr. */
+ lwz r0, 8(r11) /* Pick up the 'real' return address. */
+ lfd f31,-8(r11)
+ mtctr r0 /* exception-handler ret. address */
+ add r1,r11,r7 /* set SP to original value + R7 offset */
+ bctr
+#endif
+/* we should never be called on ppc64 for this ... */
+/* Done. */
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtres32gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtres32gpr.S
new file mode 100644
index 000000000..200177bdc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtres32gpr.S
@@ -0,0 +1,73 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for restoring 32-bit integer registers, called by the compiler. */
+/* "Bare" versions that simply return to their caller. */
+
+HIDDEN_FUNC(_rest32gpr_14) lwz 14,-72(11)
+HIDDEN_FUNC(_rest32gpr_15) lwz 15,-68(11)
+HIDDEN_FUNC(_rest32gpr_16) lwz 16,-64(11)
+HIDDEN_FUNC(_rest32gpr_17) lwz 17,-60(11)
+HIDDEN_FUNC(_rest32gpr_18) lwz 18,-56(11)
+HIDDEN_FUNC(_rest32gpr_19) lwz 19,-52(11)
+HIDDEN_FUNC(_rest32gpr_20) lwz 20,-48(11)
+HIDDEN_FUNC(_rest32gpr_21) lwz 21,-44(11)
+HIDDEN_FUNC(_rest32gpr_22) lwz 22,-40(11)
+HIDDEN_FUNC(_rest32gpr_23) lwz 23,-36(11)
+HIDDEN_FUNC(_rest32gpr_24) lwz 24,-32(11)
+HIDDEN_FUNC(_rest32gpr_25) lwz 25,-28(11)
+HIDDEN_FUNC(_rest32gpr_26) lwz 26,-24(11)
+HIDDEN_FUNC(_rest32gpr_27) lwz 27,-20(11)
+HIDDEN_FUNC(_rest32gpr_28) lwz 28,-16(11)
+HIDDEN_FUNC(_rest32gpr_29) lwz 29,-12(11)
+HIDDEN_FUNC(_rest32gpr_30) lwz 30,-8(11)
+HIDDEN_FUNC(_rest32gpr_31) lwz 31,-4(11)
+ blr
+FUNC_END(_rest32gpr_31)
+FUNC_END(_rest32gpr_30)
+FUNC_END(_rest32gpr_29)
+FUNC_END(_rest32gpr_28)
+FUNC_END(_rest32gpr_27)
+FUNC_END(_rest32gpr_26)
+FUNC_END(_rest32gpr_25)
+FUNC_END(_rest32gpr_24)
+FUNC_END(_rest32gpr_23)
+FUNC_END(_rest32gpr_22)
+FUNC_END(_rest32gpr_21)
+FUNC_END(_rest32gpr_20)
+FUNC_END(_rest32gpr_19)
+FUNC_END(_rest32gpr_18)
+FUNC_END(_rest32gpr_17)
+FUNC_END(_rest32gpr_16)
+FUNC_END(_rest32gpr_15)
+FUNC_END(_rest32gpr_14)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtres64gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtres64gpr.S
new file mode 100644
index 000000000..9bd2251a8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtres64gpr.S
@@ -0,0 +1,73 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for restoring 64-bit integer registers, called by the compiler. */
+/* "Bare" versions that return to their caller. */
+
+HIDDEN_FUNC(_rest64gpr_14) evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_15) evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_16) evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_17) evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_18) evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_19) evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_20) evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_21) evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_22) evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_23) evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_24) evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_25) evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_26) evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_27) evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_28) evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_29) evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_30) evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_31) evldd 31,136(11)
+ blr
+FUNC_END(_rest64gpr_31)
+FUNC_END(_rest64gpr_30)
+FUNC_END(_rest64gpr_29)
+FUNC_END(_rest64gpr_28)
+FUNC_END(_rest64gpr_27)
+FUNC_END(_rest64gpr_26)
+FUNC_END(_rest64gpr_25)
+FUNC_END(_rest64gpr_24)
+FUNC_END(_rest64gpr_23)
+FUNC_END(_rest64gpr_22)
+FUNC_END(_rest64gpr_21)
+FUNC_END(_rest64gpr_20)
+FUNC_END(_rest64gpr_19)
+FUNC_END(_rest64gpr_18)
+FUNC_END(_rest64gpr_17)
+FUNC_END(_rest64gpr_16)
+FUNC_END(_rest64gpr_15)
+FUNC_END(_rest64gpr_14)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtres64gprctr.S b/gcc-4.9/libgcc/config/rs6000/e500crtres64gprctr.S
new file mode 100644
index 000000000..e41905e52
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtres64gprctr.S
@@ -0,0 +1,90 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for restoring 64-bit integer registers where the number of
+ registers to be restored is passed in CTR, called by the compiler. */
+
+HIDDEN_FUNC(_rest64gpr_ctr_14) evldd 14,0(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_15) evldd 15,8(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_16) evldd 16,16(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_17) evldd 17,24(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_18) evldd 18,32(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_19) evldd 19,40(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_20) evldd 20,48(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_21) evldd 21,56(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_22) evldd 22,64(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_23) evldd 23,72(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_24) evldd 24,80(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_25) evldd 25,88(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_26) evldd 26,96(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_27) evldd 27,104(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_28) evldd 28,112(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_29) evldd 29,120(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_30) evldd 30,128(11)
+ bdz _rest64gpr_ctr_done
+HIDDEN_FUNC(_rest64gpr_ctr_31) evldd 31,136(11)
+_rest64gpr_ctr_done: blr
+FUNC_END(_rest64gpr_ctr_31)
+FUNC_END(_rest64gpr_ctr_30)
+FUNC_END(_rest64gpr_ctr_29)
+FUNC_END(_rest64gpr_ctr_28)
+FUNC_END(_rest64gpr_ctr_27)
+FUNC_END(_rest64gpr_ctr_26)
+FUNC_END(_rest64gpr_ctr_25)
+FUNC_END(_rest64gpr_ctr_24)
+FUNC_END(_rest64gpr_ctr_23)
+FUNC_END(_rest64gpr_ctr_22)
+FUNC_END(_rest64gpr_ctr_21)
+FUNC_END(_rest64gpr_ctr_20)
+FUNC_END(_rest64gpr_ctr_19)
+FUNC_END(_rest64gpr_ctr_18)
+FUNC_END(_rest64gpr_ctr_17)
+FUNC_END(_rest64gpr_ctr_16)
+FUNC_END(_rest64gpr_ctr_15)
+FUNC_END(_rest64gpr_ctr_14)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtrest32gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtrest32gpr.S
new file mode 100644
index 000000000..1bedb992a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtrest32gpr.S
@@ -0,0 +1,75 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for restoring 32-bit integer registers, called by the compiler. */
+/* "Tail" versions that perform a tail call. */
+
+HIDDEN_FUNC(_rest32gpr_14_t) lwz 14,-72(11)
+HIDDEN_FUNC(_rest32gpr_15_t) lwz 15,-68(11)
+HIDDEN_FUNC(_rest32gpr_16_t) lwz 16,-64(11)
+HIDDEN_FUNC(_rest32gpr_17_t) lwz 17,-60(11)
+HIDDEN_FUNC(_rest32gpr_18_t) lwz 18,-56(11)
+HIDDEN_FUNC(_rest32gpr_19_t) lwz 19,-52(11)
+HIDDEN_FUNC(_rest32gpr_20_t) lwz 20,-48(11)
+HIDDEN_FUNC(_rest32gpr_21_t) lwz 21,-44(11)
+HIDDEN_FUNC(_rest32gpr_22_t) lwz 22,-40(11)
+HIDDEN_FUNC(_rest32gpr_23_t) lwz 23,-36(11)
+HIDDEN_FUNC(_rest32gpr_24_t) lwz 24,-32(11)
+HIDDEN_FUNC(_rest32gpr_25_t) lwz 25,-28(11)
+HIDDEN_FUNC(_rest32gpr_26_t) lwz 26,-24(11)
+HIDDEN_FUNC(_rest32gpr_27_t) lwz 27,-20(11)
+HIDDEN_FUNC(_rest32gpr_28_t) lwz 28,-16(11)
+HIDDEN_FUNC(_rest32gpr_29_t) lwz 29,-12(11)
+HIDDEN_FUNC(_rest32gpr_30_t) lwz 30,-8(11)
+HIDDEN_FUNC(_rest32gpr_31_t) lwz 31,-4(11)
+ lwz 0,4(11)
+ mr 1,11
+ blr
+FUNC_END(_rest32gpr_31_t)
+FUNC_END(_rest32gpr_30_t)
+FUNC_END(_rest32gpr_29_t)
+FUNC_END(_rest32gpr_28_t)
+FUNC_END(_rest32gpr_27_t)
+FUNC_END(_rest32gpr_26_t)
+FUNC_END(_rest32gpr_25_t)
+FUNC_END(_rest32gpr_24_t)
+FUNC_END(_rest32gpr_23_t)
+FUNC_END(_rest32gpr_22_t)
+FUNC_END(_rest32gpr_21_t)
+FUNC_END(_rest32gpr_20_t)
+FUNC_END(_rest32gpr_19_t)
+FUNC_END(_rest32gpr_18_t)
+FUNC_END(_rest32gpr_17_t)
+FUNC_END(_rest32gpr_16_t)
+FUNC_END(_rest32gpr_15_t)
+FUNC_END(_rest32gpr_14_t)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtrest64gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtrest64gpr.S
new file mode 100644
index 000000000..030862fec
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtrest64gpr.S
@@ -0,0 +1,74 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* "Tail" versions that perform a tail call. */
+
+HIDDEN_FUNC(_rest64gpr_14_t) evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_15_t) evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_16_t) evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_17_t) evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_18_t) evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_19_t) evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_20_t) evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_21_t) evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_22_t) evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_23_t) evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_24_t) evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_25_t) evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_26_t) evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_27_t) evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_28_t) evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_29_t) evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_30_t) evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_31_t) lwz 0,148(11)
+ evldd 31,136(11)
+ addi 1,11,144
+ blr
+FUNC_END(_rest64gpr_31_t)
+FUNC_END(_rest64gpr_30_t)
+FUNC_END(_rest64gpr_29_t)
+FUNC_END(_rest64gpr_28_t)
+FUNC_END(_rest64gpr_27_t)
+FUNC_END(_rest64gpr_26_t)
+FUNC_END(_rest64gpr_25_t)
+FUNC_END(_rest64gpr_24_t)
+FUNC_END(_rest64gpr_23_t)
+FUNC_END(_rest64gpr_22_t)
+FUNC_END(_rest64gpr_21_t)
+FUNC_END(_rest64gpr_20_t)
+FUNC_END(_rest64gpr_19_t)
+FUNC_END(_rest64gpr_18_t)
+FUNC_END(_rest64gpr_17_t)
+FUNC_END(_rest64gpr_16_t)
+FUNC_END(_rest64gpr_15_t)
+FUNC_END(_rest64gpr_14_t)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtresx32gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtresx32gpr.S
new file mode 100644
index 000000000..7ff490d64
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtresx32gpr.S
@@ -0,0 +1,75 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for restoring 32-bit integer registers, called by the compiler. */
+/* "Exit" versions that return to the caller's caller. */
+
+HIDDEN_FUNC(_rest32gpr_14_x) lwz 14,-72(11)
+HIDDEN_FUNC(_rest32gpr_15_x) lwz 15,-68(11)
+HIDDEN_FUNC(_rest32gpr_16_x) lwz 16,-64(11)
+HIDDEN_FUNC(_rest32gpr_17_x) lwz 17,-60(11)
+HIDDEN_FUNC(_rest32gpr_18_x) lwz 18,-56(11)
+HIDDEN_FUNC(_rest32gpr_19_x) lwz 19,-52(11)
+HIDDEN_FUNC(_rest32gpr_20_x) lwz 20,-48(11)
+HIDDEN_FUNC(_rest32gpr_21_x) lwz 21,-44(11)
+HIDDEN_FUNC(_rest32gpr_22_x) lwz 22,-40(11)
+HIDDEN_FUNC(_rest32gpr_23_x) lwz 23,-36(11)
+HIDDEN_FUNC(_rest32gpr_24_x) lwz 24,-32(11)
+HIDDEN_FUNC(_rest32gpr_25_x) lwz 25,-28(11)
+HIDDEN_FUNC(_rest32gpr_26_x) lwz 26,-24(11)
+HIDDEN_FUNC(_rest32gpr_27_x) lwz 27,-20(11)
+HIDDEN_FUNC(_rest32gpr_28_x) lwz 28,-16(11)
+HIDDEN_FUNC(_rest32gpr_29_x) lwz 29,-12(11)
+HIDDEN_FUNC(_rest32gpr_30_x) lwz 30,-8(11)
+HIDDEN_FUNC(_rest32gpr_31_x) lwz 0,4(11)
+ lwz 31,-4(11)
+ mr 1,11
+ mtlr 0
+ blr
+FUNC_END(_rest32gpr_31_x)
+FUNC_END(_rest32gpr_30_x)
+FUNC_END(_rest32gpr_29_x)
+FUNC_END(_rest32gpr_28_x)
+FUNC_END(_rest32gpr_27_x)
+FUNC_END(_rest32gpr_26_x)
+FUNC_END(_rest32gpr_25_x)
+FUNC_END(_rest32gpr_24_x)
+FUNC_END(_rest32gpr_23_x)
+FUNC_END(_rest32gpr_22_x)
+FUNC_END(_rest32gpr_21_x)
+FUNC_END(_rest32gpr_20_x)
+FUNC_END(_rest32gpr_19_x)
+FUNC_END(_rest32gpr_18_x)
+FUNC_END(_rest32gpr_17_x)
+FUNC_END(_rest32gpr_16_x)
+FUNC_END(_rest32gpr_15_x)
+FUNC_END(_rest32gpr_14_x)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtresx64gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtresx64gpr.S
new file mode 100644
index 000000000..1bfa0ba9e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtresx64gpr.S
@@ -0,0 +1,75 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* "Exit" versions that return to their caller's caller. */
+
+HIDDEN_FUNC(_rest64gpr_14_x) evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_15_x) evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_16_x) evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_17_x) evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_18_x) evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_19_x) evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_20_x) evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_21_x) evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_22_x) evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_23_x) evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_24_x) evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_25_x) evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_26_x) evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_27_x) evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_28_x) evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_29_x) evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_30_x) evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_31_x) lwz 0,148(11)
+ evldd 31,136(11)
+ addi 1,11,144
+ mtlr 0
+ blr
+FUNC_END(_rest64gpr_31_x)
+FUNC_END(_rest64gpr_30_x)
+FUNC_END(_rest64gpr_29_x)
+FUNC_END(_rest64gpr_28_x)
+FUNC_END(_rest64gpr_27_x)
+FUNC_END(_rest64gpr_26_x)
+FUNC_END(_rest64gpr_25_x)
+FUNC_END(_rest64gpr_24_x)
+FUNC_END(_rest64gpr_23_x)
+FUNC_END(_rest64gpr_22_x)
+FUNC_END(_rest64gpr_21_x)
+FUNC_END(_rest64gpr_20_x)
+FUNC_END(_rest64gpr_19_x)
+FUNC_END(_rest64gpr_18_x)
+FUNC_END(_rest64gpr_17_x)
+FUNC_END(_rest64gpr_16_x)
+FUNC_END(_rest64gpr_15_x)
+FUNC_END(_rest64gpr_14_x)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtsav32gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtsav32gpr.S
new file mode 100644
index 000000000..050231aba
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtsav32gpr.S
@@ -0,0 +1,73 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for saving 32-bit integer registers, called by the compiler. */
+/* "Bare" versions that simply return to their caller. */
+
+HIDDEN_FUNC(_save32gpr_14) stw 14,-72(11)
+HIDDEN_FUNC(_save32gpr_15) stw 15,-68(11)
+HIDDEN_FUNC(_save32gpr_16) stw 16,-64(11)
+HIDDEN_FUNC(_save32gpr_17) stw 17,-60(11)
+HIDDEN_FUNC(_save32gpr_18) stw 18,-56(11)
+HIDDEN_FUNC(_save32gpr_19) stw 19,-52(11)
+HIDDEN_FUNC(_save32gpr_20) stw 20,-48(11)
+HIDDEN_FUNC(_save32gpr_21) stw 21,-44(11)
+HIDDEN_FUNC(_save32gpr_22) stw 22,-40(11)
+HIDDEN_FUNC(_save32gpr_23) stw 23,-36(11)
+HIDDEN_FUNC(_save32gpr_24) stw 24,-32(11)
+HIDDEN_FUNC(_save32gpr_25) stw 25,-28(11)
+HIDDEN_FUNC(_save32gpr_26) stw 26,-24(11)
+HIDDEN_FUNC(_save32gpr_27) stw 27,-20(11)
+HIDDEN_FUNC(_save32gpr_28) stw 28,-16(11)
+HIDDEN_FUNC(_save32gpr_29) stw 29,-12(11)
+HIDDEN_FUNC(_save32gpr_30) stw 30,-8(11)
+HIDDEN_FUNC(_save32gpr_31) stw 31,-4(11)
+ blr
+FUNC_END(_save32gpr_31)
+FUNC_END(_save32gpr_30)
+FUNC_END(_save32gpr_29)
+FUNC_END(_save32gpr_28)
+FUNC_END(_save32gpr_27)
+FUNC_END(_save32gpr_26)
+FUNC_END(_save32gpr_25)
+FUNC_END(_save32gpr_24)
+FUNC_END(_save32gpr_23)
+FUNC_END(_save32gpr_22)
+FUNC_END(_save32gpr_21)
+FUNC_END(_save32gpr_20)
+FUNC_END(_save32gpr_19)
+FUNC_END(_save32gpr_18)
+FUNC_END(_save32gpr_17)
+FUNC_END(_save32gpr_16)
+FUNC_END(_save32gpr_15)
+FUNC_END(_save32gpr_14)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtsav64gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtsav64gpr.S
new file mode 100644
index 000000000..d2bda4baf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtsav64gpr.S
@@ -0,0 +1,72 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for saving 64-bit integer registers, called by the compiler. */
+
+HIDDEN_FUNC(_save64gpr_14) evstdd 14,0(11)
+HIDDEN_FUNC(_save64gpr_15) evstdd 15,8(11)
+HIDDEN_FUNC(_save64gpr_16) evstdd 16,16(11)
+HIDDEN_FUNC(_save64gpr_17) evstdd 17,24(11)
+HIDDEN_FUNC(_save64gpr_18) evstdd 18,32(11)
+HIDDEN_FUNC(_save64gpr_19) evstdd 19,40(11)
+HIDDEN_FUNC(_save64gpr_20) evstdd 20,48(11)
+HIDDEN_FUNC(_save64gpr_21) evstdd 21,56(11)
+HIDDEN_FUNC(_save64gpr_22) evstdd 22,64(11)
+HIDDEN_FUNC(_save64gpr_23) evstdd 23,72(11)
+HIDDEN_FUNC(_save64gpr_24) evstdd 24,80(11)
+HIDDEN_FUNC(_save64gpr_25) evstdd 25,88(11)
+HIDDEN_FUNC(_save64gpr_26) evstdd 26,96(11)
+HIDDEN_FUNC(_save64gpr_27) evstdd 27,104(11)
+HIDDEN_FUNC(_save64gpr_28) evstdd 28,112(11)
+HIDDEN_FUNC(_save64gpr_29) evstdd 29,120(11)
+HIDDEN_FUNC(_save64gpr_30) evstdd 30,128(11)
+HIDDEN_FUNC(_save64gpr_31) evstdd 31,136(11)
+ blr
+FUNC_END(_save64gpr_31)
+FUNC_END(_save64gpr_30)
+FUNC_END(_save64gpr_29)
+FUNC_END(_save64gpr_28)
+FUNC_END(_save64gpr_27)
+FUNC_END(_save64gpr_26)
+FUNC_END(_save64gpr_25)
+FUNC_END(_save64gpr_24)
+FUNC_END(_save64gpr_23)
+FUNC_END(_save64gpr_22)
+FUNC_END(_save64gpr_21)
+FUNC_END(_save64gpr_20)
+FUNC_END(_save64gpr_19)
+FUNC_END(_save64gpr_18)
+FUNC_END(_save64gpr_17)
+FUNC_END(_save64gpr_16)
+FUNC_END(_save64gpr_15)
+FUNC_END(_save64gpr_14)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtsav64gprctr.S b/gcc-4.9/libgcc/config/rs6000/e500crtsav64gprctr.S
new file mode 100644
index 000000000..d17e5a99e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtsav64gprctr.S
@@ -0,0 +1,91 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for saving 64-bit integer registers where the number of
+ registers to be saved is passed in CTR, called by the compiler. */
+/* "Bare" versions that return to their caller. */
+
+HIDDEN_FUNC(_save64gpr_ctr_14) evstdd 14,0(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_15) evstdd 15,8(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_16) evstdd 16,16(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_17) evstdd 17,24(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_18) evstdd 18,32(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_19) evstdd 19,40(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_20) evstdd 20,48(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_21) evstdd 21,56(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_22) evstdd 22,64(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_23) evstdd 23,72(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_24) evstdd 24,80(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_25) evstdd 25,88(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_26) evstdd 26,96(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_27) evstdd 27,104(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_28) evstdd 28,112(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_29) evstdd 29,120(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_30) evstdd 30,128(11)
+ bdz _save64gpr_ctr_done
+HIDDEN_FUNC(_save64gpr_ctr_31) evstdd 31,136(11)
+_save64gpr_ctr_done: blr
+FUNC_END(_save64gpr_ctr_31)
+FUNC_END(_save64gpr_ctr_30)
+FUNC_END(_save64gpr_ctr_29)
+FUNC_END(_save64gpr_ctr_28)
+FUNC_END(_save64gpr_ctr_27)
+FUNC_END(_save64gpr_ctr_26)
+FUNC_END(_save64gpr_ctr_25)
+FUNC_END(_save64gpr_ctr_24)
+FUNC_END(_save64gpr_ctr_23)
+FUNC_END(_save64gpr_ctr_22)
+FUNC_END(_save64gpr_ctr_21)
+FUNC_END(_save64gpr_ctr_20)
+FUNC_END(_save64gpr_ctr_19)
+FUNC_END(_save64gpr_ctr_18)
+FUNC_END(_save64gpr_ctr_17)
+FUNC_END(_save64gpr_ctr_16)
+FUNC_END(_save64gpr_ctr_15)
+FUNC_END(_save64gpr_ctr_14)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtsavg32gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtsavg32gpr.S
new file mode 100644
index 000000000..775e9bb6b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtsavg32gpr.S
@@ -0,0 +1,73 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for saving 32-bit integer registers, called by the compiler. */
+/* "GOT" versions that load the address of the GOT into lr before returning. */
+
+HIDDEN_FUNC(_save32gpr_14_g) stw 14,-72(11)
+HIDDEN_FUNC(_save32gpr_15_g) stw 15,-68(11)
+HIDDEN_FUNC(_save32gpr_16_g) stw 16,-64(11)
+HIDDEN_FUNC(_save32gpr_17_g) stw 17,-60(11)
+HIDDEN_FUNC(_save32gpr_18_g) stw 18,-56(11)
+HIDDEN_FUNC(_save32gpr_19_g) stw 19,-52(11)
+HIDDEN_FUNC(_save32gpr_20_g) stw 20,-48(11)
+HIDDEN_FUNC(_save32gpr_21_g) stw 21,-44(11)
+HIDDEN_FUNC(_save32gpr_22_g) stw 22,-40(11)
+HIDDEN_FUNC(_save32gpr_23_g) stw 23,-36(11)
+HIDDEN_FUNC(_save32gpr_24_g) stw 24,-32(11)
+HIDDEN_FUNC(_save32gpr_25_g) stw 25,-28(11)
+HIDDEN_FUNC(_save32gpr_26_g) stw 26,-24(11)
+HIDDEN_FUNC(_save32gpr_27_g) stw 27,-20(11)
+HIDDEN_FUNC(_save32gpr_28_g) stw 28,-16(11)
+HIDDEN_FUNC(_save32gpr_29_g) stw 29,-12(11)
+HIDDEN_FUNC(_save32gpr_30_g) stw 30,-8(11)
+HIDDEN_FUNC(_save32gpr_31_g) stw 31,-4(11)
+ b _GLOBAL_OFFSET_TABLE_-4
+FUNC_END(_save32gpr_31_g)
+FUNC_END(_save32gpr_30_g)
+FUNC_END(_save32gpr_29_g)
+FUNC_END(_save32gpr_28_g)
+FUNC_END(_save32gpr_27_g)
+FUNC_END(_save32gpr_26_g)
+FUNC_END(_save32gpr_25_g)
+FUNC_END(_save32gpr_24_g)
+FUNC_END(_save32gpr_23_g)
+FUNC_END(_save32gpr_22_g)
+FUNC_END(_save32gpr_21_g)
+FUNC_END(_save32gpr_20_g)
+FUNC_END(_save32gpr_19_g)
+FUNC_END(_save32gpr_18_g)
+FUNC_END(_save32gpr_17_g)
+FUNC_END(_save32gpr_16_g)
+FUNC_END(_save32gpr_15_g)
+FUNC_END(_save32gpr_14_g)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtsavg64gpr.S b/gcc-4.9/libgcc/config/rs6000/e500crtsavg64gpr.S
new file mode 100644
index 000000000..108a6cb98
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtsavg64gpr.S
@@ -0,0 +1,73 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for saving 64-bit integer registers, called by the compiler. */
+/* "GOT" versions that load the address of the GOT into lr before returning. */
+
+HIDDEN_FUNC(_save64gpr_14_g) evstdd 14,0(11)
+HIDDEN_FUNC(_save64gpr_15_g) evstdd 15,8(11)
+HIDDEN_FUNC(_save64gpr_16_g) evstdd 16,16(11)
+HIDDEN_FUNC(_save64gpr_17_g) evstdd 17,24(11)
+HIDDEN_FUNC(_save64gpr_18_g) evstdd 18,32(11)
+HIDDEN_FUNC(_save64gpr_19_g) evstdd 19,40(11)
+HIDDEN_FUNC(_save64gpr_20_g) evstdd 20,48(11)
+HIDDEN_FUNC(_save64gpr_21_g) evstdd 21,56(11)
+HIDDEN_FUNC(_save64gpr_22_g) evstdd 22,64(11)
+HIDDEN_FUNC(_save64gpr_23_g) evstdd 23,72(11)
+HIDDEN_FUNC(_save64gpr_24_g) evstdd 24,80(11)
+HIDDEN_FUNC(_save64gpr_25_g) evstdd 25,88(11)
+HIDDEN_FUNC(_save64gpr_26_g) evstdd 26,96(11)
+HIDDEN_FUNC(_save64gpr_27_g) evstdd 27,104(11)
+HIDDEN_FUNC(_save64gpr_28_g) evstdd 28,112(11)
+HIDDEN_FUNC(_save64gpr_29_g) evstdd 29,120(11)
+HIDDEN_FUNC(_save64gpr_30_g) evstdd 30,128(11)
+HIDDEN_FUNC(_save64gpr_31_g) evstdd 31,136(11)
+ b _GLOBAL_OFFSET_TABLE_-4
+FUNC_END(_save64gpr_31_g)
+FUNC_END(_save64gpr_30_g)
+FUNC_END(_save64gpr_29_g)
+FUNC_END(_save64gpr_28_g)
+FUNC_END(_save64gpr_27_g)
+FUNC_END(_save64gpr_26_g)
+FUNC_END(_save64gpr_25_g)
+FUNC_END(_save64gpr_24_g)
+FUNC_END(_save64gpr_23_g)
+FUNC_END(_save64gpr_22_g)
+FUNC_END(_save64gpr_21_g)
+FUNC_END(_save64gpr_20_g)
+FUNC_END(_save64gpr_19_g)
+FUNC_END(_save64gpr_18_g)
+FUNC_END(_save64gpr_17_g)
+FUNC_END(_save64gpr_16_g)
+FUNC_END(_save64gpr_15_g)
+FUNC_END(_save64gpr_14_g)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/e500crtsavg64gprctr.S b/gcc-4.9/libgcc/config/rs6000/e500crtsavg64gprctr.S
new file mode 100644
index 000000000..6bda9baf4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/e500crtsavg64gprctr.S
@@ -0,0 +1,90 @@
+/*
+ * Special support for e500 eabi and SVR4
+ *
+ * Copyright (C) 2008-2014 Free Software Foundation, Inc.
+ * Written by Nathan Froyd
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifdef __SPE__
+
+/* Routines for saving 64-bit integer registers, called by the compiler. */
+/* "GOT" versions that load the address of the GOT into lr before returning. */
+
+HIDDEN_FUNC(_save64gpr_ctr_14_g) evstdd 14,0(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_15_g) evstdd 15,8(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_16_g) evstdd 16,16(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_17_g) evstdd 17,24(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_18_g) evstdd 18,32(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_19_g) evstdd 19,40(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_20_g) evstdd 20,48(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_21_g) evstdd 21,56(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_22_g) evstdd 22,64(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_23_g) evstdd 23,72(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_24_g) evstdd 24,80(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_25_g) evstdd 25,88(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_26_g) evstdd 26,96(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_27_g) evstdd 27,104(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_28_g) evstdd 28,112(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_29_g) evstdd 29,120(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_30_g) evstdd 30,128(11)
+ bdz _save64gpr_ctr_g_done
+HIDDEN_FUNC(_save64gpr_ctr_31_g) evstdd 31,136(11)
+_save64gpr_ctr_g_done: b _GLOBAL_OFFSET_TABLE_-4
+FUNC_END(_save64gpr_ctr_31_g)
+FUNC_END(_save64gpr_ctr_30_g)
+FUNC_END(_save64gpr_ctr_29_g)
+FUNC_END(_save64gpr_ctr_28_g)
+FUNC_END(_save64gpr_ctr_27_g)
+FUNC_END(_save64gpr_ctr_26_g)
+FUNC_END(_save64gpr_ctr_25_g)
+FUNC_END(_save64gpr_ctr_24_g)
+FUNC_END(_save64gpr_ctr_23_g)
+FUNC_END(_save64gpr_ctr_22_g)
+FUNC_END(_save64gpr_ctr_21_g)
+FUNC_END(_save64gpr_ctr_20_g)
+FUNC_END(_save64gpr_ctr_19_g)
+FUNC_END(_save64gpr_ctr_18_g)
+FUNC_END(_save64gpr_ctr_17_g)
+FUNC_END(_save64gpr_ctr_16_g)
+FUNC_END(_save64gpr_ctr_15_g)
+FUNC_END(_save64gpr_ctr_14_g)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/eabi-ci.S b/gcc-4.9/libgcc/config/rs6000/eabi-ci.S
new file mode 100644
index 000000000..ad20365c0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/eabi-ci.S
@@ -0,0 +1,113 @@
+/* crti.s for eabi
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
+ Written By Michael Meissner
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* This file just supplies labeled starting points for the .got* and other
+ special sections. It is linked in first before other modules. */
+
+ .ident "GNU C crti.s"
+
+#include <ppc-asm.h>
+
+#ifndef __powerpc64__
+ .section ".got","aw"
+ .globl __GOT_START__
+ .type __GOT_START__,@object
+__GOT_START__:
+
+ .section ".got1","aw"
+ .globl __GOT1_START__
+ .type __GOT1_START__,@object
+__GOT1_START__:
+
+ .section ".got2","aw"
+ .globl __GOT2_START__
+ .type __GOT2_START__,@object
+__GOT2_START__:
+
+ .section ".fixup","aw"
+ .globl __FIXUP_START__
+ .type __FIXUP_START__,@object
+__FIXUP_START__:
+
+ .section ".ctors","aw"
+ .globl __CTOR_LIST__
+ .type __CTOR_LIST__,@object
+__CTOR_LIST__:
+
+ .section ".dtors","aw"
+ .globl __DTOR_LIST__
+ .type __DTOR_LIST__,@object
+__DTOR_LIST__:
+
+ .section ".sdata","aw"
+ .globl __SDATA_START__
+ .type __SDATA_START__,@object
+ .weak _SDA_BASE_
+ .type _SDA_BASE_,@object
+__SDATA_START__:
+_SDA_BASE_:
+
+ .section ".sbss","aw",@nobits
+ .globl __SBSS_START__
+ .type __SBSS_START__,@object
+__SBSS_START__:
+
+ .section ".sdata2","a"
+ .weak _SDA2_BASE_
+ .type _SDA2_BASE_,@object
+ .globl __SDATA2_START__
+ .type __SDATA2_START__,@object
+__SDATA2_START__:
+_SDA2_BASE_:
+
+ .section ".sbss2","a"
+ .globl __SBSS2_START__
+ .type __SBSS2_START__,@object
+__SBSS2_START__:
+
+ .section ".gcc_except_table","aw"
+ .globl __EXCEPT_START__
+ .type __EXCEPT_START__,@object
+__EXCEPT_START__:
+
+ .section ".eh_frame","aw"
+ .globl __EH_FRAME_BEGIN__
+ .type __EH_FRAME_BEGIN__,@object
+__EH_FRAME_BEGIN__:
+
+/* Head of __init function used for static constructors. */
+ .section ".init","ax"
+ .align 2
+FUNC_START(__init)
+ stwu 1,-16(1)
+ mflr 0
+ stw 0,20(1)
+
+/* Head of __fini function used for static destructors. */
+ .section ".fini","ax"
+ .align 2
+FUNC_START(__fini)
+ stwu 1,-16(1)
+ mflr 0
+ stw 0,20(1)
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/eabi-cn.S b/gcc-4.9/libgcc/config/rs6000/eabi-cn.S
new file mode 100644
index 000000000..de4fd2c6c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/eabi-cn.S
@@ -0,0 +1,104 @@
+/* crtn.s for eabi
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
+ Written By Michael Meissner
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* This file just supplies labeled ending points for the .got* and other
+ special sections. It is linked in last after other modules. */
+
+ .ident "GNU C crtn.s"
+
+#ifndef __powerpc64__
+ .section ".got","aw"
+ .globl __GOT_END__
+ .type __GOT_END__,@object
+__GOT_END__:
+
+ .section ".got1","aw"
+ .globl __GOT1_END__
+ .type __GOT1_END__,@object
+__GOT1_END__:
+
+ .section ".got2","aw"
+ .globl __GOT2_END__
+ .type __GOT2_END__,@object
+__GOT2_END__:
+
+ .section ".fixup","aw"
+ .globl __FIXUP_END__
+ .type __FIXUP_END__,@object
+__FIXUP_END__:
+
+ .section ".ctors","aw"
+ .globl __CTOR_END__
+ .type __CTOR_END__,@object
+__CTOR_END__:
+
+ .section ".dtors","aw"
+ .weak __DTOR_END__
+ .type __DTOR_END__,@object
+__DTOR_END__:
+
+ .section ".sdata","aw"
+ .globl __SDATA_END__
+ .type __SDATA_END__,@object
+__SDATA_END__:
+
+ .section ".sbss","aw",@nobits
+ .globl __SBSS_END__
+ .type __SBSS_END__,@object
+__SBSS_END__:
+
+ .section ".sdata2","a"
+ .globl __SDATA2_END__
+ .type __SDATA2_END__,@object
+__SDATA2_END__:
+
+ .section ".sbss2","a"
+ .globl __SBSS2_END__
+ .type __SBSS2_END__,@object
+__SBSS2_END__:
+
+ .section ".gcc_except_table","aw"
+ .globl __EXCEPT_END__
+ .type __EXCEPT_END__,@object
+__EXCEPT_END__:
+
+ .section ".eh_frame","aw"
+ .globl __EH_FRAME_END__
+ .type __EH_FRAME_END__,@object
+__EH_FRAME_END__:
+ .long 0
+
+/* Tail of __init function used for static constructors. */
+ .section ".init","ax"
+ lwz 0,20(1)
+ mtlr 0
+ addi 1,1,16
+ blr
+
+/* Tail of __fini function used for static destructors. */
+ .section ".fini","ax"
+ lwz 0,20(1)
+ mtlr 0
+ addi 1,1,16
+ blr
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/eabi.S b/gcc-4.9/libgcc/config/rs6000/eabi.S
new file mode 100644
index 000000000..3d0125661
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/eabi.S
@@ -0,0 +1,288 @@
+/*
+ * Special support for eabi and SVR4
+ *
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Do any initializations needed for the eabi environment */
+
+ .section ".text"
+ #include "ppc-asm.h"
+
+#ifndef __powerpc64__
+
+ .section ".got2","aw"
+ .align 2
+.LCTOC1 = . /* +32768 */
+
+/* Table of addresses */
+.Ltable = .-.LCTOC1
+ .long .LCTOC1 /* address we are really at */
+
+.Lsda = .-.LCTOC1
+ .long _SDA_BASE_ /* address of the first small data area */
+
+.Lsdas = .-.LCTOC1
+ .long __SDATA_START__ /* start of .sdata/.sbss section */
+
+.Lsdae = .-.LCTOC1
+ .long __SBSS_END__ /* end of .sdata/.sbss section */
+
+.Lsda2 = .-.LCTOC1
+ .long _SDA2_BASE_ /* address of the second small data area */
+
+.Lsda2s = .-.LCTOC1
+ .long __SDATA2_START__ /* start of .sdata2/.sbss2 section */
+
+.Lsda2e = .-.LCTOC1
+ .long __SBSS2_END__ /* end of .sdata2/.sbss2 section */
+
+#ifdef _RELOCATABLE
+.Lgots = .-.LCTOC1
+ .long __GOT_START__ /* Global offset table start */
+
+.Lgotm1 = .-.LCTOC1
+ .long _GLOBAL_OFFSET_TABLE_-4 /* end of GOT ptrs before BLCL + 3 reserved words */
+
+.Lgotm2 = .-.LCTOC1
+ .long _GLOBAL_OFFSET_TABLE_+12 /* start of GOT ptrs after BLCL + 3 reserved words */
+
+.Lgote = .-.LCTOC1
+ .long __GOT_END__ /* Global offset table end */
+
+.Lgot2s = .-.LCTOC1
+ .long __GOT2_START__ /* -mrelocatable GOT pointers start */
+
+.Lgot2e = .-.LCTOC1
+ .long __GOT2_END__ /* -mrelocatable GOT pointers end */
+
+.Lfixups = .-.LCTOC1
+ .long __FIXUP_START__ /* start of .fixup section */
+
+.Lfixupe = .-.LCTOC1
+ .long __FIXUP_END__ /* end of .fixup section */
+
+.Lctors = .-.LCTOC1
+ .long __CTOR_LIST__ /* start of .ctor section */
+
+.Lctore = .-.LCTOC1
+ .long __CTOR_END__ /* end of .ctor section */
+
+.Ldtors = .-.LCTOC1
+ .long __DTOR_LIST__ /* start of .dtor section */
+
+.Ldtore = .-.LCTOC1
+ .long __DTOR_END__ /* end of .dtor section */
+
+.Lexcepts = .-.LCTOC1
+ .long __EXCEPT_START__ /* start of .gcc_except_table section */
+
+.Lexcepte = .-.LCTOC1
+ .long __EXCEPT_END__ /* end of .gcc_except_table section */
+
+.Linit = .-.LCTOC1
+ .long .Linit_p /* address of variable to say we've been called */
+
+ .text
+ .align 2
+.Lptr:
+ .long .LCTOC1-.Laddr /* PC relative pointer to .got2 */
+#endif
+
+ .data
+ .align 2
+.Linit_p:
+ .long 0
+
+ .text
+
+FUNC_START(__eabi)
+
+/* Eliminate -mrelocatable code if not -mrelocatable, so that this file can
+ be assembled with other assemblers than GAS. */
+
+#ifndef _RELOCATABLE
+ addis 10,0,.Linit_p@ha /* init flag */
+ addis 11,0,.LCTOC1@ha /* load address of .LCTOC1 */
+ lwz 9,.Linit_p@l(10) /* init flag */
+ addi 11,11,.LCTOC1@l
+ cmplwi 2,9,0 /* init flag != 0? */
+ bnelr 2 /* return now, if we've been called already */
+ stw 1,.Linit_p@l(10) /* store a nonzero value in the done flag */
+
+#else /* -mrelocatable */
+ mflr 0
+ bl .Laddr /* get current address */
+.Laddr:
+ mflr 12 /* real address of .Laddr */
+ lwz 11,(.Lptr-.Laddr)(12) /* linker generated address of .LCTOC1 */
+ add 11,11,12 /* correct to real pointer */
+ lwz 12,.Ltable(11) /* get linker's idea of where .Laddr is */
+ lwz 10,.Linit(11) /* address of init flag */
+ subf. 12,12,11 /* calculate difference */
+ lwzx 9,10,12 /* done flag */
+ cmplwi 2,9,0 /* init flag != 0? */
+ mtlr 0 /* restore in case branch was taken */
+ bnelr 2 /* return now, if we've been called already */
+ stwx 1,10,12 /* store a nonzero value in the done flag */
+ beq+ 0,.Lsdata /* skip if we don't need to relocate */
+
+/* We need to relocate the .got2 pointers. */
+
+ lwz 3,.Lgot2s(11) /* GOT2 pointers start */
+ lwz 4,.Lgot2e(11) /* GOT2 pointers end */
+ add 3,12,3 /* adjust pointers */
+ add 4,12,4
+ bl FUNC_NAME(__eabi_convert) /* convert pointers in .got2 section */
+
+/* Fixup the .ctor section for static constructors */
+
+ lwz 3,.Lctors(11) /* constructors pointers start */
+ lwz 4,.Lctore(11) /* constructors pointers end */
+ bl FUNC_NAME(__eabi_convert) /* convert constructors */
+
+/* Fixup the .dtor section for static destructors */
+
+ lwz 3,.Ldtors(11) /* destructors pointers start */
+ lwz 4,.Ldtore(11) /* destructors pointers end */
+ bl FUNC_NAME(__eabi_convert) /* convert destructors */
+
+/* Fixup the .gcc_except_table section for G++ exceptions */
+
+ lwz 3,.Lexcepts(11) /* exception table pointers start */
+ lwz 4,.Lexcepte(11) /* exception table pointers end */
+ bl FUNC_NAME(__eabi_convert) /* convert exceptions */
+
+/* Fixup the addresses in the GOT below _GLOBAL_OFFSET_TABLE_-4 */
+
+ lwz 3,.Lgots(11) /* GOT table pointers start */
+ lwz 4,.Lgotm1(11) /* GOT table pointers below _GLOBAL_OFFSET_TABLE-4 */
+ bl FUNC_NAME(__eabi_convert) /* convert lower GOT */
+
+/* Fixup the addresses in the GOT above _GLOBAL_OFFSET_TABLE_+12 */
+
+ lwz 3,.Lgotm2(11) /* GOT table pointers above _GLOBAL_OFFSET_TABLE+12 */
+ lwz 4,.Lgote(11) /* GOT table pointers end */
+ bl FUNC_NAME(__eabi_convert) /* convert lower GOT */
+
+/* Fixup any user initialized pointers now (the compiler drops pointers to */
+/* each of the relocs that it does in the .fixup section). */
+
+.Lfix:
+ lwz 3,.Lfixups(11) /* fixup pointers start */
+ lwz 4,.Lfixupe(11) /* fixup pointers end */
+ bl FUNC_NAME(__eabi_uconvert) /* convert user initialized pointers */
+
+.Lsdata:
+ mtlr 0 /* restore link register */
+#endif /* _RELOCATABLE */
+
+/* Only load up register 13 if there is a .sdata and/or .sbss section */
+ lwz 3,.Lsdas(11) /* start of .sdata/.sbss section */
+ lwz 4,.Lsdae(11) /* end of .sdata/.sbss section */
+ cmpw 1,3,4 /* .sdata/.sbss section non-empty? */
+ beq- 1,.Lsda2l /* skip loading r13 */
+
+ lwz 13,.Lsda(11) /* load r13 with _SDA_BASE_ address */
+
+/* Only load up register 2 if there is a .sdata2 and/or .sbss2 section */
+
+.Lsda2l:
+ lwz 3,.Lsda2s(11) /* start of .sdata/.sbss section */
+ lwz 4,.Lsda2e(11) /* end of .sdata/.sbss section */
+ cmpw 1,3,4 /* .sdata/.sbss section non-empty? */
+ beq+ 1,.Ldone /* skip loading r2 */
+
+ lwz 2,.Lsda2(11) /* load r2 with _SDA2_BASE_ address */
+
+/* Done adjusting pointers, return by way of doing the C++ global constructors. */
+
+.Ldone:
+ b FUNC_NAME(__init) /* do any C++ global constructors (which returns to caller) */
+FUNC_END(__eabi)
+
+/* Special subroutine to convert a bunch of pointers directly.
+ r0 has original link register
+ r3 has low pointer to convert
+ r4 has high pointer to convert
+ r5 .. r10 are scratch registers
+ r11 has the address of .LCTOC1 in it.
+ r12 has the value to add to each pointer
+ r13 .. r31 are unchanged */
+#ifdef _RELOCATABLE
+FUNC_START(__eabi_convert)
+ cmplw 1,3,4 /* any pointers to convert? */
+ subf 5,3,4 /* calculate number of words to convert */
+ bclr 4,4 /* return if no pointers */
+
+ srawi 5,5,2
+ addi 3,3,-4 /* start-4 for use with lwzu */
+ mtctr 5
+
+.Lcvt:
+ lwzu 6,4(3) /* pointer to convert */
+ cmpwi 0,6,0
+ beq- .Lcvt2 /* if pointer is null, don't convert */
+
+ add 6,6,12 /* convert pointer */
+ stw 6,0(3)
+.Lcvt2:
+ bdnz+ .Lcvt
+ blr
+
+FUNC_END(__eabi_convert)
+
+/* Special subroutine to convert the pointers the user has initialized. The
+ compiler has placed the address of the initialized pointer into the .fixup
+ section.
+
+ r0 has original link register
+ r3 has low pointer to convert
+ r4 has high pointer to convert
+ r5 .. r10 are scratch registers
+ r11 has the address of .LCTOC1 in it.
+ r12 has the value to add to each pointer
+ r13 .. r31 are unchanged */
+
+FUNC_START(__eabi_uconvert)
+ cmplw 1,3,4 /* any pointers to convert? */
+ subf 5,3,4 /* calculate number of words to convert */
+ bclr 4,4 /* return if no pointers */
+
+ srawi 5,5,2
+ addi 3,3,-4 /* start-4 for use with lwzu */
+ mtctr 5
+
+.Lucvt:
+ lwzu 6,4(3) /* next pointer to pointer to convert */
+ add 6,6,12 /* adjust pointer */
+ lwz 7,0(6) /* get the pointer it points to */
+ stw 6,0(3) /* store adjusted pointer */
+ add 7,7,12 /* adjust */
+ stw 7,0(6)
+ bdnz+ .Lucvt
+ blr
+
+FUNC_END(__eabi_uconvert)
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/exit.h b/gcc-4.9/libgcc/config/rs6000/exit.h
new file mode 100644
index 000000000..bc00cec8c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/exit.h
@@ -0,0 +1,92 @@
+/* Copyright (C) 1991-2014 Free Software Foundation, Inc.
+
+Derived from exit.h in GNU C Library.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _EXIT_H
+#define _EXIT_H 1
+
+#define attribute_hidden
+#define INTDEF(name)
+
+#include <stdbool.h>
+#include <stdint.h>
+
+enum
+{
+ ef_free, /* `ef_free' MUST be zero! */
+ ef_us,
+ ef_on,
+ ef_at,
+ ef_cxa
+};
+
+struct exit_function
+ {
+ /* `flavour' should be of type of the `enum' above but since we need
+ this element in an atomic operation we have to use `long int'. */
+ long int flavor;
+ union
+ {
+ void (*at) (void);
+ struct
+ {
+ void (*fn) (int status, void *arg);
+ void *arg;
+ } on;
+ struct
+ {
+ void (*fn) (void *arg, int status);
+ void *arg;
+ void *dso_handle;
+ } cxa;
+ } func;
+ };
+struct exit_function_list
+ {
+ struct exit_function_list *next;
+ size_t idx;
+ struct exit_function fns[32];
+ };
+extern struct exit_function_list *__exit_funcs attribute_hidden;
+extern struct exit_function_list *__quick_exit_funcs attribute_hidden;
+
+extern struct exit_function *__new_exitfn (struct exit_function_list **listp);
+extern uint64_t __new_exitfn_called attribute_hidden;
+
+extern void __run_exit_handlers (int status, struct exit_function_list **listp,
+ bool run_list_atexit)
+ attribute_hidden __attribute__ ((__noreturn__));
+
+extern int __internal_atexit (void (*func) (void *), void *arg, void *d,
+ struct exit_function_list **listp)
+ attribute_hidden;
+extern int __cxa_at_quick_exit (void (*func) (void *), void *d);
+
+extern int __cxa_atexit (void (*func) (void *), void *arg, void *d);
+extern int __cxa_atexit_internal (void (*func) (void *), void *arg, void *d)
+ attribute_hidden;
+
+extern void __cxa_finalize (void *d);
+
+#endif /* exit.h */
diff --git a/gcc-4.9/libgcc/config/rs6000/freebsd-unwind.h b/gcc-4.9/libgcc/config/rs6000/freebsd-unwind.h
new file mode 100644
index 000000000..bb8cae0f5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/freebsd-unwind.h
@@ -0,0 +1,69 @@
+/* DWARF2 EH unwinding support for PowerPC64 FreeBSD.
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define R_LR 65
+
+#define MD_FROB_UPDATE_CONTEXT frob_update_context
+
+static void
+frob_update_context (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs ATTRIBUTE_UNUSED)
+{
+ const unsigned int *pc = (const unsigned int *) context->ra;
+
+#ifdef __powerpc64__
+ if (fs->regs.reg[2].how == REG_UNSAVED)
+ {
+ /* If the current unwind info (FS) does not contain explicit info
+ saving R2, then we have to do a minor amount of code reading to
+ figure out if it was saved. The big problem here is that the
+ code that does the save/restore is generated by the linker, so
+ we have no good way to determine at compile time what to do. */
+ if (pc[0] == 0xF8410028
+ || ((pc[0] & 0xFFFF0000) == 0x3D820000
+ && pc[1] == 0xF8410028))
+ {
+ /* We are in a plt call stub or r2 adjusting long branch stub,
+ before r2 has been saved. Keep REG_UNSAVED. */
+ }
+ else
+ {
+ unsigned int *insn
+ = (unsigned int *) _Unwind_GetGR (context, R_LR);
+ if (insn && *insn == 0xE8410028)
+ _Unwind_SetGRPtr (context, 2, context->cfa + 40);
+ else if (pc[0] == 0x4E800421
+ && pc[1] == 0xE8410028)
+ {
+ /* We are at the bctrl instruction in a call via function
+ pointer. gcc always emits the load of the new R2 just
+ before the bctrl so this is the first and only place
+ we need to use the stored R2. */
+ _Unwind_Word sp = _Unwind_GetGR (context, 1);
+ _Unwind_SetGRPtr (context, 2, (void *)(sp + 40));
+ }
+ }
+ }
+#endif
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/gthr-aix.h b/gcc-4.9/libgcc/config/rs6000/gthr-aix.h
new file mode 100644
index 000000000..9efa23d1d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/gthr-aix.h
@@ -0,0 +1,35 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_GTHR_AIX_H
+#define GCC_GTHR_AIX_H
+
+#ifdef _THREAD_SAFE
+#include "gthr-posix.h"
+#else
+#include "gthr-single.h"
+#endif
+
+#endif /* GCC_GTHR_AIX_H */
diff --git a/gcc-4.9/libgcc/config/rs6000/ibm-ldouble-format b/gcc-4.9/libgcc/config/rs6000/ibm-ldouble-format
new file mode 100644
index 000000000..a74a5fc21
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/ibm-ldouble-format
@@ -0,0 +1,91 @@
+Long double format
+==================
+
+ Each long double is made up of two IEEE doubles. The value of the
+long double is the sum of the values of the two parts (except for
+-0.0). The most significant part is required to be the value of the
+long double rounded to the nearest double, as specified by IEEE. For
+Inf values, the least significant part is required to be one of +0.0
+or -0.0. No other requirements are made; so, for example, 1.0 may be
+represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a NaN
+is don't-care.
+
+Classification
+--------------
+
+A long double can represent any value of the form
+ s * 2^e * sum(k=0...105: f_k * 2^(-k))
+where 's' is +1 or -1, 'e' is between 1022 and -968 inclusive, f_0 is
+1, and f_k for k>0 is 0 or 1. These are the 'normal' long doubles.
+
+A long double can also represent any value of the form
+ s * 2^-968 * sum(k=0...105: f_k * 2^(-k))
+where 's' is +1 or -1, f_0 is 0, and f_k for k>0 is 0 or 1. These are
+the 'subnormal' long doubles.
+
+There are four long doubles that represent zero, two that represent
++0.0 and two that represent -0.0. The sign of the high part is the
+sign of the long double, and the sign of the low part is ignored.
+
+Likewise, there are four long doubles that represent infinities, two
+for +Inf and two for -Inf.
+
+Each NaN, quiet or signalling, that can be represented as a 'double'
+can be represented as a 'long double'. In fact, there are 2^64
+equivalent representations for each one.
+
+There are certain other valid long doubles where both parts are
+nonzero but the low part represents a value which has a bit set below
+2^(e-105). These, together with the subnormal long doubles, make up
+the denormal long doubles.
+
+Many possible long double bit patterns are not valid long doubles.
+These do not represent any value.
+
+Limits
+------
+
+The maximum representable long double is 2^1024-2^918. The smallest
+*normal* positive long double is 2^-968. The smallest denormalised
+positive long double is 2^-1074 (this is the same as for 'double').
+
+Conversions
+-----------
+
+A double can be converted to a long double by adding a zero low part.
+
+A long double can be converted to a double by removing the low part.
+
+Comparisons
+-----------
+
+Two long doubles can be compared by comparing the high parts, and if
+those compare equal, comparing the low parts.
+
+Arithmetic
+----------
+
+The unary negate operation operates by negating the low and high parts.
+
+An absolute or absolute-negate operation must be done by comparing
+against zero and negating if necessary.
+
+Addition and subtraction are performed using library routines. They
+are not at present performed perfectly accurately, the result produced
+will be within 1ulp of the range generated by adding or subtracting
+1ulp from the input values, where a 'ulp' is 2^(e-106) given the
+exponent 'e'. In the presence of cancellation, this may be
+arbitrarily inaccurate. Subtraction is done by negation and addition.
+
+Multiplication is also performed using a library routine. Its result
+will be within 2ulp of the correct result.
+
+Division is also performed using a library routine. Its result will
+be within 3ulp of the correct result.
+
+
+Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
diff --git a/gcc-4.9/libgcc/config/rs6000/ibm-ldouble.c b/gcc-4.9/libgcc/config/rs6000/ibm-ldouble.c
new file mode 100644
index 000000000..abcd3c514
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/ibm-ldouble.c
@@ -0,0 +1,448 @@
+/* 128-bit long double support routines for Darwin.
+ Copyright (C) 1993-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* Implementations of floating-point long double basic arithmetic
+ functions called by the IBM C compiler when generating code for
+ PowerPC platforms. In particular, the following functions are
+ implemented: __gcc_qadd, __gcc_qsub, __gcc_qmul, and __gcc_qdiv.
+ Double-double algorithms are based on the paper "Doubled-Precision
+ IEEE Standard 754 Floating-Point Arithmetic" by W. Kahan, February 26,
+ 1987. An alternative published reference is "Software for
+ Doubled-Precision Floating-Point Computations", by Seppo Linnainmaa,
+ ACM TOMS vol 7 no 3, September 1981, pages 272-283. */
+
+/* Each long double is made up of two IEEE doubles. The value of the
+ long double is the sum of the values of the two parts. The most
+ significant part is required to be the value of the long double
+ rounded to the nearest double, as specified by IEEE. For Inf
+ values, the least significant part is required to be one of +0.0 or
+ -0.0. No other requirements are made; so, for example, 1.0 may be
+ represented as (1.0, +0.0) or (1.0, -0.0), and the low part of a
+ NaN is don't-care.
+
+ This code currently assumes the most significant double is in
+ the lower numbered register or lower addressed memory. */
+
+#if defined (__MACH__) || defined (__powerpc__) || defined (_AIX)
+
+#define fabs(x) __builtin_fabs(x)
+#define isless(x, y) __builtin_isless (x, y)
+#define inf() __builtin_inf()
+
+#define unlikely(x) __builtin_expect ((x), 0)
+
+#define nonfinite(a) unlikely (! isless (fabs (a), inf ()))
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
+/* All these routines actually take two long doubles as parameters,
+ but GCC currently generates poor code when a union is used to turn
+ a long double into a pair of doubles. */
+
+long double __gcc_qadd (double, double, double, double);
+long double __gcc_qsub (double, double, double, double);
+long double __gcc_qmul (double, double, double, double);
+long double __gcc_qdiv (double, double, double, double);
+
+#if defined __ELF__ && defined SHARED \
+ && (defined __powerpc64__ || !(defined __linux__ || defined __gnu_hurd__))
+/* Provide definitions of the old symbol names to satisfy apps and
+ shared libs built against an older libgcc. To access the _xlq
+ symbols an explicit version reference is needed, so these won't
+ satisfy an unadorned reference like _xlqadd. If dot symbols are
+ not needed, the assembler will remove the aliases from the symbol
+ table. */
+__asm__ (".symver __gcc_qadd,_xlqadd@GCC_3.4\n\t"
+ ".symver __gcc_qsub,_xlqsub@GCC_3.4\n\t"
+ ".symver __gcc_qmul,_xlqmul@GCC_3.4\n\t"
+ ".symver __gcc_qdiv,_xlqdiv@GCC_3.4\n\t"
+ ".symver .__gcc_qadd,._xlqadd@GCC_3.4\n\t"
+ ".symver .__gcc_qsub,._xlqsub@GCC_3.4\n\t"
+ ".symver .__gcc_qmul,._xlqmul@GCC_3.4\n\t"
+ ".symver .__gcc_qdiv,._xlqdiv@GCC_3.4");
+#endif
+
+typedef union
+{
+ long double ldval;
+ double dval[2];
+} longDblUnion;
+
+/* Add two 'long double' values and return the result. */
+long double
+__gcc_qadd (double a, double aa, double c, double cc)
+{
+ longDblUnion x;
+ double z, q, zz, xh;
+
+ z = a + c;
+
+ if (nonfinite (z))
+ {
+ if (fabs (z) != inf())
+ return z;
+ z = cc + aa + c + a;
+ if (nonfinite (z))
+ return z;
+ x.dval[0] = z; /* Will always be DBL_MAX. */
+ zz = aa + cc;
+ if (fabs(a) > fabs(c))
+ x.dval[1] = a - z + c + zz;
+ else
+ x.dval[1] = c - z + a + zz;
+ }
+ else
+ {
+ q = a - z;
+ zz = q + c + (a - (q + z)) + aa + cc;
+
+ /* Keep -0 result. */
+ if (zz == 0.0)
+ return z;
+
+ xh = z + zz;
+ if (nonfinite (xh))
+ return xh;
+
+ x.dval[0] = xh;
+ x.dval[1] = z - xh + zz;
+ }
+ return x.ldval;
+}
+
+long double
+__gcc_qsub (double a, double b, double c, double d)
+{
+ return __gcc_qadd (a, b, -c, -d);
+}
+
+#ifdef __NO_FPRS__
+static double fmsub (double, double, double);
+#endif
+
+long double
+__gcc_qmul (double a, double b, double c, double d)
+{
+ longDblUnion z;
+ double t, tau, u, v, w;
+
+ t = a * c; /* Highest order double term. */
+
+ if (unlikely (t == 0) /* Preserve -0. */
+ || nonfinite (t))
+ return t;
+
+ /* Sum terms of two highest orders. */
+
+ /* Use fused multiply-add to get low part of a * c. */
+#ifndef __NO_FPRS__
+ asm ("fmsub %0,%1,%2,%3" : "=f"(tau) : "f"(a), "f"(c), "f"(t));
+#else
+ tau = fmsub (a, c, t);
+#endif
+ v = a*d;
+ w = b*c;
+ tau += v + w; /* Add in other second-order terms. */
+ u = t + tau;
+
+ /* Construct long double result. */
+ if (nonfinite (u))
+ return u;
+ z.dval[0] = u;
+ z.dval[1] = (t - u) + tau;
+ return z.ldval;
+}
+
+long double
+__gcc_qdiv (double a, double b, double c, double d)
+{
+ longDblUnion z;
+ double s, sigma, t, tau, u, v, w;
+
+ t = a / c; /* highest order double term */
+
+ if (unlikely (t == 0) /* Preserve -0. */
+ || nonfinite (t))
+ return t;
+
+ /* Finite nonzero result requires corrections to the highest order
+ term. These corrections require the low part of c * t to be
+ exactly represented in double. */
+ if (fabs (a) <= 0x1p-969)
+ {
+ a *= 0x1p106;
+ b *= 0x1p106;
+ c *= 0x1p106;
+ d *= 0x1p106;
+ }
+
+ s = c * t; /* (s,sigma) = c*t exactly. */
+ w = -(-b + d * t); /* Written to get fnmsub for speed, but not
+ numerically necessary. */
+
+ /* Use fused multiply-add to get low part of c * t. */
+#ifndef __NO_FPRS__
+ asm ("fmsub %0,%1,%2,%3" : "=f"(sigma) : "f"(c), "f"(t), "f"(s));
+#else
+ sigma = fmsub (c, t, s);
+#endif
+ v = a - s;
+
+ tau = ((v-sigma)+w)/c; /* Correction to t. */
+ u = t + tau;
+
+ /* Construct long double result. */
+ if (nonfinite (u))
+ return u;
+ z.dval[0] = u;
+ z.dval[1] = (t - u) + tau;
+ return z.ldval;
+}
+
+#if defined (_SOFT_DOUBLE) && defined (__LONG_DOUBLE_128__)
+
+long double __gcc_qneg (double, double);
+int __gcc_qeq (double, double, double, double);
+int __gcc_qne (double, double, double, double);
+int __gcc_qge (double, double, double, double);
+int __gcc_qle (double, double, double, double);
+long double __gcc_stoq (float);
+long double __gcc_dtoq (double);
+float __gcc_qtos (double, double);
+double __gcc_qtod (double, double);
+int __gcc_qtoi (double, double);
+unsigned int __gcc_qtou (double, double);
+long double __gcc_itoq (int);
+long double __gcc_utoq (unsigned int);
+
+extern int __eqdf2 (double, double);
+extern int __ledf2 (double, double);
+extern int __gedf2 (double, double);
+
+/* Negate 'long double' value and return the result. */
+long double
+__gcc_qneg (double a, double aa)
+{
+ longDblUnion x;
+
+ x.dval[0] = -a;
+ x.dval[1] = -aa;
+ return x.ldval;
+}
+
+/* Compare two 'long double' values for equality. */
+int
+__gcc_qeq (double a, double aa, double c, double cc)
+{
+ if (__eqdf2 (a, c) == 0)
+ return __eqdf2 (aa, cc);
+ return 1;
+}
+
+strong_alias (__gcc_qeq, __gcc_qne);
+
+/* Compare two 'long double' values for less than or equal. */
+int
+__gcc_qle (double a, double aa, double c, double cc)
+{
+ if (__eqdf2 (a, c) == 0)
+ return __ledf2 (aa, cc);
+ return __ledf2 (a, c);
+}
+
+strong_alias (__gcc_qle, __gcc_qlt);
+
+/* Compare two 'long double' values for greater than or equal. */
+int
+__gcc_qge (double a, double aa, double c, double cc)
+{
+ if (__eqdf2 (a, c) == 0)
+ return __gedf2 (aa, cc);
+ return __gedf2 (a, c);
+}
+
+strong_alias (__gcc_qge, __gcc_qgt);
+
+/* Convert single to long double. */
+long double
+__gcc_stoq (float a)
+{
+ longDblUnion x;
+
+ x.dval[0] = (double) a;
+ x.dval[1] = 0.0;
+
+ return x.ldval;
+}
+
+/* Convert double to long double. */
+long double
+__gcc_dtoq (double a)
+{
+ longDblUnion x;
+
+ x.dval[0] = a;
+ x.dval[1] = 0.0;
+
+ return x.ldval;
+}
+
+/* Convert long double to single. */
+float
+__gcc_qtos (double a, double aa __attribute__ ((__unused__)))
+{
+ return (float) a;
+}
+
+/* Convert long double to double. */
+double
+__gcc_qtod (double a, double aa __attribute__ ((__unused__)))
+{
+ return a;
+}
+
+/* Convert long double to int. */
+int
+__gcc_qtoi (double a, double aa)
+{
+ double z = a + aa;
+ return (int) z;
+}
+
+/* Convert long double to unsigned int. */
+unsigned int
+__gcc_qtou (double a, double aa)
+{
+ double z = a + aa;
+ return (unsigned int) z;
+}
+
+/* Convert int to long double. */
+long double
+__gcc_itoq (int a)
+{
+ return __gcc_dtoq ((double) a);
+}
+
+/* Convert unsigned int to long double. */
+long double
+__gcc_utoq (unsigned int a)
+{
+ return __gcc_dtoq ((double) a);
+}
+
+#endif
+
+#ifdef __NO_FPRS__
+
+int __gcc_qunord (double, double, double, double);
+
+extern int __eqdf2 (double, double);
+extern int __unorddf2 (double, double);
+
+/* Compare two 'long double' values for unordered. */
+int
+__gcc_qunord (double a, double aa, double c, double cc)
+{
+ if (__eqdf2 (a, c) == 0)
+ return __unorddf2 (aa, cc);
+ return __unorddf2 (a, c);
+}
+
+#include "soft-fp/soft-fp.h"
+#include "soft-fp/double.h"
+#include "soft-fp/quad.h"
+
+/* Compute floating point multiply-subtract with higher (quad) precision. */
+static double
+fmsub (double a, double b, double c)
+{
+ FP_DECL_EX;
+ FP_DECL_D(A);
+ FP_DECL_D(B);
+ FP_DECL_D(C);
+ FP_DECL_Q(X);
+ FP_DECL_Q(Y);
+ FP_DECL_Q(Z);
+ FP_DECL_Q(U);
+ FP_DECL_Q(V);
+ FP_DECL_D(R);
+ double r;
+ long double u, x, y, z;
+
+ FP_INIT_ROUNDMODE;
+ FP_UNPACK_RAW_D (A, a);
+ FP_UNPACK_RAW_D (B, b);
+ FP_UNPACK_RAW_D (C, c);
+
+ /* Extend double to quad. */
+#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
+ FP_EXTEND(Q,D,4,2,X,A);
+ FP_EXTEND(Q,D,4,2,Y,B);
+ FP_EXTEND(Q,D,4,2,Z,C);
+#else
+ FP_EXTEND(Q,D,2,1,X,A);
+ FP_EXTEND(Q,D,2,1,Y,B);
+ FP_EXTEND(Q,D,2,1,Z,C);
+#endif
+ FP_PACK_RAW_Q(x,X);
+ FP_PACK_RAW_Q(y,Y);
+ FP_PACK_RAW_Q(z,Z);
+ FP_HANDLE_EXCEPTIONS;
+
+ /* Multiply. */
+ FP_INIT_ROUNDMODE;
+ FP_UNPACK_Q(X,x);
+ FP_UNPACK_Q(Y,y);
+ FP_MUL_Q(U,X,Y);
+ FP_PACK_Q(u,U);
+ FP_HANDLE_EXCEPTIONS;
+
+ /* Subtract. */
+ FP_INIT_ROUNDMODE;
+ FP_UNPACK_SEMIRAW_Q(U,u);
+ FP_UNPACK_SEMIRAW_Q(Z,z);
+ FP_SUB_Q(V,U,Z);
+
+ /* Truncate quad to double. */
+#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
+ V_f[3] &= 0x0007ffff;
+ FP_TRUNC(D,Q,2,4,R,V);
+#else
+ V_f1 &= 0x0007ffffffffffffL;
+ FP_TRUNC(D,Q,1,2,R,V);
+#endif
+ FP_PACK_SEMIRAW_D(r,R);
+ FP_HANDLE_EXCEPTIONS;
+
+ return r;
+}
+
+#endif
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/libgcc-aix-cxa.ver b/gcc-4.9/libgcc/config/rs6000/libgcc-aix-cxa.ver
new file mode 100644
index 000000000..f89df2312
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/libgcc-aix-cxa.ver
@@ -0,0 +1,9 @@
+GCC_4.8 {
+ __cxa_atexit
+ __cxa_finalize
+}
+
+GCC_4.9 {
+ _GLOBAL__AIXI_shr_o
+ _GLOBAL__AIXD_shr_o
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.4.ver b/gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.4.ver
new file mode 100644
index 000000000..830400986
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.4.ver
@@ -0,0 +1,93 @@
+# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+__Unwind_Backtrace
+__Unwind_DeleteException
+__Unwind_FindEnclosingFunction
+__Unwind_Find_FDE
+__Unwind_ForcedUnwind
+__Unwind_GetCFA
+__Unwind_GetDataRelBase
+__Unwind_GetGR
+__Unwind_GetIP
+__Unwind_GetLanguageSpecificData
+__Unwind_GetRegionStart
+__Unwind_GetTextRelBase
+__Unwind_RaiseException
+__Unwind_Resume
+__Unwind_Resume_or_Rethrow
+__Unwind_SetGR
+__Unwind_SetIP
+___absvdi2
+___absvsi2
+___addvdi3
+___addvsi3
+___ashldi3
+___ashrdi3
+___clear_cache
+___clzdi2
+___clzsi2
+___cmpdi2
+___ctzdi2
+___ctzsi2
+___deregister_frame
+___deregister_frame_info
+___deregister_frame_info_bases
+___divdi3
+___enable_execute_stack
+___ffsdi2
+___fixdfdi
+___fixsfdi
+___fixtfdi
+___fixunsdfdi
+___fixunsdfsi
+___fixunssfdi
+___fixunssfsi
+___fixunstfdi
+___floatdidf
+___floatdisf
+___floatditf
+___gcc_personality_v0
+___gcc_qadd
+___gcc_qdiv
+___gcc_qmul
+___gcc_qsub
+___lshrdi3
+___moddi3
+___muldi3
+___mulvdi3
+___mulvsi3
+___negdi2
+___negvdi2
+___negvsi2
+___paritydi2
+___paritysi2
+___popcountdi2
+___popcountsi2
+___register_frame
+___register_frame_info
+___register_frame_info_bases
+___register_frame_info_table
+___register_frame_info_table_bases
+___register_frame_table
+___subvdi3
+___subvsi3
+___trampoline_setup
+___ucmpdi2
+___udivdi3
+___udivmoddi4
+___umoddi3
diff --git a/gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.5.ver b/gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.5.ver
new file mode 100644
index 000000000..af14f39fd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/libgcc-darwin.10.5.ver
@@ -0,0 +1,106 @@
+# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+__Unwind_Backtrace
+__Unwind_DeleteException
+__Unwind_FindEnclosingFunction
+__Unwind_Find_FDE
+__Unwind_ForcedUnwind
+__Unwind_GetCFA
+__Unwind_GetDataRelBase
+__Unwind_GetGR
+__Unwind_GetIP
+__Unwind_GetIPInfo
+__Unwind_GetLanguageSpecificData
+__Unwind_GetRegionStart
+__Unwind_GetTextRelBase
+__Unwind_RaiseException
+__Unwind_Resume
+__Unwind_Resume_or_Rethrow
+__Unwind_SetGR
+__Unwind_SetIP
+___absvdi2
+___absvsi2
+___addvdi3
+___addvsi3
+___ashldi3
+___ashrdi3
+___clear_cache
+___clzdi2
+___clzsi2
+___cmpdi2
+___ctzdi2
+___ctzsi2
+___deregister_frame
+___deregister_frame_info
+___deregister_frame_info_bases
+___divdc3
+___divdi3
+___divsc3
+___divtc3
+___enable_execute_stack
+___ffsdi2
+___fixdfdi
+___fixsfdi
+___fixtfdi
+___fixunsdfdi
+___fixunsdfsi
+___fixunssfdi
+___fixunssfsi
+___fixunstfdi
+___floatdidf
+___floatdisf
+___floatditf
+___floatundidf
+___floatundisf
+___floatunditf
+___gcc_personality_v0
+___gcc_qadd
+___gcc_qdiv
+___gcc_qmul
+___gcc_qsub
+___lshrdi3
+___moddi3
+___muldc3
+___muldi3
+___mulsc3
+___multc3
+___mulvdi3
+___mulvsi3
+___negdi2
+___negvdi2
+___negvsi2
+___paritydi2
+___paritysi2
+___popcountdi2
+___popcountsi2
+___powidf2
+___powisf2
+___powitf2
+___register_frame
+___register_frame_info
+___register_frame_info_bases
+___register_frame_info_table
+___register_frame_info_table_bases
+___register_frame_table
+___subvdi3
+___subvsi3
+___trampoline_setup
+___ucmpdi2
+___udivdi3
+___udivmoddi4
+___umoddi3
diff --git a/gcc-4.9/libgcc/config/rs6000/libgcc-glibc.ver b/gcc-4.9/libgcc/config/rs6000/libgcc-glibc.ver
new file mode 100644
index 000000000..b12213dcd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/libgcc-glibc.ver
@@ -0,0 +1,73 @@
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+%ifndef _SOFT_FLOAT
+%ifndef __powerpc64__
+%exclude {
+ __multc3
+ __divtc3
+ __powitf2
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+}
+
+GCC_4.1.0 {
+ # long double support
+ __multc3
+ __divtc3
+ __powitf2
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+
+%else
+GCC_3.4.4 {
+%endif
+%else
+GCC_4.2.0 {
+%endif
+
+ # long double support
+ __gcc_qadd
+ __gcc_qsub
+ __gcc_qmul
+ __gcc_qdiv
+
+%ifdef _SOFT_DOUBLE
+ __gcc_qneg
+ __gcc_qeq
+ __gcc_qne
+ __gcc_qgt
+ __gcc_qge
+ __gcc_qlt
+ __gcc_qle
+ __gcc_stoq
+ __gcc_dtoq
+ __gcc_qtos
+ __gcc_qtod
+ __gcc_qtoi
+ __gcc_qtou
+ __gcc_itoq
+ __gcc_utoq
+%endif
+
+%ifdef __NO_FPRS__
+ __gcc_qunord
+%endif
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/libgcc-ibm-ldouble.ver b/gcc-4.9/libgcc/config/rs6000/libgcc-ibm-ldouble.ver
new file mode 100644
index 000000000..b27b4b492
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/libgcc-ibm-ldouble.ver
@@ -0,0 +1,7 @@
+GCC_3.4.4 {
+ # long double support
+ __gcc_qadd
+ __gcc_qsub
+ __gcc_qmul
+ __gcc_qdiv
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/linux-unwind.h b/gcc-4.9/libgcc/config/rs6000/linux-unwind.h
new file mode 100644
index 000000000..c5b006ee9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/linux-unwind.h
@@ -0,0 +1,354 @@
+/* DWARF2 EH unwinding support for PowerPC and PowerPC64 Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#define R_LR 65
+#define R_CR2 70
+#define R_CR3 71
+#define R_CR4 72
+#define R_VR0 77
+#define R_VRSAVE 109
+
+#ifdef __powerpc64__
+#if _CALL_ELF == 2
+#define TOC_SAVE_SLOT 24
+#else
+#define TOC_SAVE_SLOT 40
+#endif
+#endif
+
+struct gcc_vregs
+{
+ __attribute__ ((vector_size (16))) int vr[32];
+#ifdef __powerpc64__
+ unsigned int pad1[3];
+ unsigned int vscr;
+ unsigned int vsave;
+ unsigned int pad2[3];
+#else
+ unsigned int vsave;
+ unsigned int pad[2];
+ unsigned int vscr;
+#endif
+};
+
+struct gcc_regs
+{
+ unsigned long gpr[32];
+ unsigned long nip;
+ unsigned long msr;
+ unsigned long orig_gpr3;
+ unsigned long ctr;
+ unsigned long link;
+ unsigned long xer;
+ unsigned long ccr;
+ unsigned long softe;
+ unsigned long trap;
+ unsigned long dar;
+ unsigned long dsisr;
+ unsigned long result;
+ unsigned long pad1[4];
+ double fpr[32];
+ unsigned int pad2;
+ unsigned int fpscr;
+#ifdef __powerpc64__
+ struct gcc_vregs *vp;
+#else
+ unsigned int pad3[2];
+#endif
+ struct gcc_vregs vregs;
+};
+
+struct gcc_ucontext
+{
+#ifdef __powerpc64__
+ unsigned long pad[28];
+#else
+ unsigned long pad[12];
+#endif
+ struct gcc_regs *regs;
+ struct gcc_regs rsave;
+};
+
+#ifdef __powerpc64__
+
+enum { SIGNAL_FRAMESIZE = 128 };
+
+/* If PC is at a sigreturn trampoline, return a pointer to the
+ regs. Otherwise return NULL. */
+
+static struct gcc_regs *
+get_regs (struct _Unwind_Context *context)
+{
+ const unsigned int *pc = context->ra;
+
+ /* addi r1, r1, 128; li r0, 0x0077; sc (sigreturn) */
+ /* addi r1, r1, 128; li r0, 0x00AC; sc (rt_sigreturn) */
+ if (pc[0] != 0x38210000 + SIGNAL_FRAMESIZE || pc[2] != 0x44000002)
+ return NULL;
+ if (pc[1] == 0x38000077)
+ {
+ struct sigframe {
+ char gap[SIGNAL_FRAMESIZE];
+ unsigned long pad[7];
+ struct gcc_regs *regs;
+ } *frame = (struct sigframe *) context->cfa;
+ return frame->regs;
+ }
+ else if (pc[1] == 0x380000AC)
+ {
+#if _CALL_ELF != 2
+ /* These old kernel versions never supported ELFv2. */
+ /* This works for 2.4 kernels, but not for 2.6 kernels with vdso
+ because pc isn't pointing into the stack. Can be removed when
+ no one is running 2.4.19 or 2.4.20, the first two ppc64
+ kernels released. */
+ const struct rt_sigframe_24 {
+ int tramp[6];
+ void *pinfo;
+ struct gcc_ucontext *puc;
+ } *frame24 = (const struct rt_sigframe_24 *) context->ra;
+
+ /* Test for magic value in *puc of vdso. */
+ if ((long) frame24->puc != -21 * 8)
+ return frame24->puc->regs;
+ else
+#endif
+ {
+ /* This works for 2.4.21 and later kernels. */
+ struct rt_sigframe {
+ char gap[SIGNAL_FRAMESIZE];
+ struct gcc_ucontext uc;
+ unsigned long pad[2];
+ int tramp[6];
+ void *pinfo;
+ struct gcc_ucontext *puc;
+ } *frame = (struct rt_sigframe *) context->cfa;
+ return frame->uc.regs;
+ }
+ }
+ return NULL;
+}
+
+#else /* !__powerpc64__ */
+
+enum { SIGNAL_FRAMESIZE = 64 };
+
+static struct gcc_regs *
+get_regs (struct _Unwind_Context *context)
+{
+ const unsigned int *pc = context->ra;
+
+ /* li r0, 0x7777; sc (sigreturn old) */
+ /* li r0, 0x0077; sc (sigreturn new) */
+ /* li r0, 0x6666; sc (rt_sigreturn old) */
+ /* li r0, 0x00AC; sc (rt_sigreturn new) */
+ if (pc[1] != 0x44000002)
+ return NULL;
+ if (pc[0] == 0x38007777 || pc[0] == 0x38000077)
+ {
+ struct sigframe {
+ char gap[SIGNAL_FRAMESIZE];
+ unsigned long pad[7];
+ struct gcc_regs *regs;
+ } *frame = (struct sigframe *) context->cfa;
+ return frame->regs;
+ }
+ else if (pc[0] == 0x38006666 || pc[0] == 0x380000AC)
+ {
+ struct rt_sigframe {
+ char gap[SIGNAL_FRAMESIZE + 16];
+ char siginfo[128];
+ struct gcc_ucontext uc;
+ } *frame = (struct rt_sigframe *) context->cfa;
+ return frame->uc.regs;
+ }
+ return NULL;
+}
+#endif
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#define MD_FALLBACK_FRAME_STATE_FOR ppc_fallback_frame_state
+
+static _Unwind_Reason_Code
+ppc_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ struct gcc_regs *regs = get_regs (context);
+ struct gcc_vregs *vregs;
+ long cr_offset;
+ long new_cfa;
+ int i;
+
+ if (regs == NULL)
+ return _URC_END_OF_STACK;
+
+ new_cfa = regs->gpr[STACK_POINTER_REGNUM];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+#ifdef __powerpc64__
+ fs->regs.reg[2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[2].loc.offset = (long) &regs->gpr[2] - new_cfa;
+#endif
+ for (i = 14; i < 32; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset = (long) &regs->gpr[i] - new_cfa;
+ }
+
+ /* The CR is saved in the low 32 bits of regs->ccr. */
+ cr_offset = (long) &regs->ccr - new_cfa;
+#ifndef __LITTLE_ENDIAN__
+ cr_offset += sizeof (long) - 4;
+#endif
+ /* In the ELFv1 ABI, CR2 stands in for the whole CR. */
+ fs->regs.reg[R_CR2].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_CR2].loc.offset = cr_offset;
+#if _CALL_ELF == 2
+ /* In the ELFv2 ABI, every CR field has a separate CFI entry. */
+ fs->regs.reg[R_CR3].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_CR3].loc.offset = cr_offset;
+ fs->regs.reg[R_CR4].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_CR4].loc.offset = cr_offset;
+#endif
+
+ fs->regs.reg[R_LR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_LR].loc.offset = (long) &regs->link - new_cfa;
+
+ fs->regs.reg[ARG_POINTER_REGNUM].how = REG_SAVED_OFFSET;
+ fs->regs.reg[ARG_POINTER_REGNUM].loc.offset = (long) &regs->nip - new_cfa;
+ fs->retaddr_column = ARG_POINTER_REGNUM;
+ fs->signal_frame = 1;
+
+ /* If we have a FPU... */
+ for (i = 14; i < 32; i++)
+ {
+ fs->regs.reg[i + 32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 32].loc.offset = (long) &regs->fpr[i] - new_cfa;
+ }
+
+ /* If we have a VMX unit... */
+#ifdef __powerpc64__
+ vregs = regs->vp;
+#else
+ vregs = &regs->vregs;
+#endif
+ if (regs->msr & (1 << 25))
+ {
+ for (i = 20; i < 32; i++)
+ {
+ fs->regs.reg[i + R_VR0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + R_VR0].loc.offset = (long) &vregs->vr[i] - new_cfa;
+ }
+ }
+
+ fs->regs.reg[R_VRSAVE].how = REG_SAVED_OFFSET;
+ fs->regs.reg[R_VRSAVE].loc.offset = (long) &vregs->vsave - new_cfa;
+
+ /* If we have SPE register high-parts... we check at compile-time to
+ avoid expanding the code for all other PowerPC. */
+#ifdef __SPE__
+ for (i = 14; i < 32; i++)
+ {
+ fs->regs.reg[i + FIRST_PSEUDO_REGISTER - 1].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + FIRST_PSEUDO_REGISTER - 1].loc.offset
+ = (long) &regs->vregs - new_cfa + 4 * i;
+ }
+#endif
+
+ return _URC_NO_REASON;
+}
+
+#define MD_FROB_UPDATE_CONTEXT frob_update_context
+
+static void
+frob_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs ATTRIBUTE_UNUSED)
+{
+ const unsigned int *pc = (const unsigned int *) context->ra;
+
+ /* Fix up for 2.6.12 - 2.6.16 Linux kernels that have vDSO, but don't
+ have S flag in it. */
+#ifdef __powerpc64__
+ /* addi r1, r1, 128; li r0, 0x0077; sc (sigreturn) */
+ /* addi r1, r1, 128; li r0, 0x00AC; sc (rt_sigreturn) */
+ if (pc[0] == 0x38210000 + SIGNAL_FRAMESIZE
+ && (pc[1] == 0x38000077 || pc[1] == 0x380000AC)
+ && pc[2] == 0x44000002)
+ _Unwind_SetSignalFrame (context, 1);
+#else
+ /* li r0, 0x7777; sc (sigreturn old) */
+ /* li r0, 0x0077; sc (sigreturn new) */
+ /* li r0, 0x6666; sc (rt_sigreturn old) */
+ /* li r0, 0x00AC; sc (rt_sigreturn new) */
+ if ((pc[0] == 0x38007777 || pc[0] == 0x38000077
+ || pc[0] == 0x38006666 || pc[0] == 0x380000AC)
+ && pc[1] == 0x44000002)
+ _Unwind_SetSignalFrame (context, 1);
+#endif
+
+#ifdef __powerpc64__
+ if (fs->regs.reg[2].how == REG_UNSAVED)
+ {
+ /* If the current unwind info (FS) does not contain explicit info
+ saving R2, then we have to do a minor amount of code reading to
+ figure out if it was saved. The big problem here is that the
+ code that does the save/restore is generated by the linker, so
+ we have no good way to determine at compile time what to do. */
+ if (pc[0] == 0xF8410000 + TOC_SAVE_SLOT
+#if _CALL_ELF != 2
+ /* The ELFv2 linker never generates the old PLT stub form. */
+ || ((pc[0] & 0xFFFF0000) == 0x3D820000
+ && pc[1] == 0xF8410000 + TOC_SAVE_SLOT)
+#endif
+ )
+ {
+ /* We are in a plt call stub or r2 adjusting long branch stub,
+ before r2 has been saved. Keep REG_UNSAVED. */
+ }
+ else
+ {
+ unsigned int *insn
+ = (unsigned int *) _Unwind_GetGR (context, R_LR);
+ if (insn && *insn == 0xE8410000 + TOC_SAVE_SLOT)
+ _Unwind_SetGRPtr (context, 2, context->cfa + TOC_SAVE_SLOT);
+#if _CALL_ELF != 2
+ /* ELFv2 does not use this function pointer call sequence. */
+ else if (pc[0] == 0x4E800421
+ && pc[1] == 0xE8410000 + TOC_SAVE_SLOT)
+ {
+ /* We are at the bctrl instruction in a call via function
+ pointer. gcc always emits the load of the new R2 just
+ before the bctrl so this is the first and only place
+ we need to use the stored R2. */
+ _Unwind_Word sp = _Unwind_GetGR (context, 1);
+ _Unwind_SetGRPtr (context, 2, (void *)(sp + TOC_SAVE_SLOT));
+ }
+#endif
+ }
+ }
+#endif
+}
diff --git a/gcc-4.9/libgcc/config/rs6000/ppc64-fp.c b/gcc-4.9/libgcc/config/rs6000/ppc64-fp.c
new file mode 100644
index 000000000..bd4c55b50
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/ppc64-fp.c
@@ -0,0 +1,237 @@
+/* Functions needed for soft-float on powerpc64-linux, copied from
+ libgcc2.c with macros expanded to force the use of specific types.
+
+ Copyright (C) 1989-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#if defined(__powerpc64__) || defined (__64BIT__) || defined(__ppc64__)
+#define TMODES
+#include "fp-bit.h"
+
+extern DItype __fixtfdi (TFtype);
+extern DItype __fixdfdi (DFtype);
+extern DItype __fixsfdi (SFtype);
+extern USItype __fixunsdfsi (DFtype);
+extern USItype __fixunssfsi (SFtype);
+extern TFtype __floatditf (DItype);
+extern TFtype __floatunditf (UDItype);
+extern DFtype __floatdidf (DItype);
+extern DFtype __floatundidf (UDItype);
+extern SFtype __floatdisf (DItype);
+extern SFtype __floatundisf (UDItype);
+extern DItype __fixunstfdi (TFtype);
+
+static DItype local_fixunssfdi (SFtype);
+static DItype local_fixunsdfdi (DFtype);
+
+DItype
+__fixtfdi (TFtype a)
+{
+ if (a < 0)
+ return - __fixunstfdi (-a);
+ return __fixunstfdi (a);
+}
+
+DItype
+__fixdfdi (DFtype a)
+{
+ if (a < 0)
+ return - local_fixunsdfdi (-a);
+ return local_fixunsdfdi (a);
+}
+
+DItype
+__fixsfdi (SFtype a)
+{
+ if (a < 0)
+ return - local_fixunssfdi (-a);
+ return local_fixunssfdi (a);
+}
+
+USItype
+__fixunsdfsi (DFtype a)
+{
+ if (a >= - (DFtype) (- ((SItype)(((USItype)1 << ((4 * 8) - 1)) - 1)) - 1))
+ return (SItype) (a + (- ((SItype)(((USItype)1 << ((4 * 8) - 1)) - 1)) - 1))
+ - (- ((SItype)(((USItype)1 << ((4 * 8) - 1)) - 1)) - 1);
+ return (SItype) a;
+}
+
+USItype
+__fixunssfsi (SFtype a)
+{
+ if (a >= - (SFtype) (- ((SItype)(((USItype)1 << ((4 * 8) - 1)) - 1)) - 1))
+ return (SItype) (a + (- ((SItype)(((USItype)1 << ((4 * 8) - 1)) - 1)) - 1))
+ - (- ((SItype)(((USItype)1 << ((4 * 8) - 1)) - 1)) - 1);
+ return (SItype) a;
+}
+
+TFtype
+__floatditf (DItype u)
+{
+ DFtype dh, dl;
+
+ dh = (SItype) (u >> (sizeof (SItype) * 8));
+ dh *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
+ dl = (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
+
+ return (TFtype) dh + (TFtype) dl;
+}
+
+TFtype
+__floatunditf (UDItype u)
+{
+ DFtype dh, dl;
+
+ dh = (USItype) (u >> (sizeof (SItype) * 8));
+ dh *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
+ dl = (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
+
+ return (TFtype) dh + (TFtype) dl;
+}
+
+DFtype
+__floatdidf (DItype u)
+{
+ DFtype d;
+
+ d = (SItype) (u >> (sizeof (SItype) * 8));
+ d *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
+ d += (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
+
+ return d;
+}
+
+DFtype
+__floatundidf (UDItype u)
+{
+ DFtype d;
+
+ d = (USItype) (u >> (sizeof (SItype) * 8));
+ d *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
+ d += (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
+
+ return d;
+}
+
+SFtype
+__floatdisf (DItype u)
+{
+ DFtype f;
+
+ if (53 < (sizeof (DItype) * 8)
+ && 53 > ((sizeof (DItype) * 8) - 53 + 24))
+ {
+ if (! (- ((DItype) 1 << 53) < u
+ && u < ((DItype) 1 << 53)))
+ {
+ if ((UDItype) u & (((UDItype) 1 << ((sizeof (DItype) * 8) - 53)) - 1))
+ {
+ u &= ~ (((UDItype) 1 << ((sizeof (DItype) * 8) - 53)) - 1);
+ u |= ((UDItype) 1 << ((sizeof (DItype) * 8) - 53));
+ }
+ }
+ }
+ f = (SItype) (u >> (sizeof (SItype) * 8));
+ f *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
+ f += (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
+
+ return (SFtype) f;
+}
+
+SFtype
+__floatundisf (UDItype u)
+{
+ DFtype f;
+
+ if (53 < (sizeof (DItype) * 8)
+ && 53 > ((sizeof (DItype) * 8) - 53 + 24))
+ {
+ if (u >= ((UDItype) 1 << 53))
+ {
+ if ((UDItype) u & (((UDItype) 1 << ((sizeof (DItype) * 8) - 53)) - 1))
+ {
+ u &= ~ (((UDItype) 1 << ((sizeof (DItype) * 8) - 53)) - 1);
+ u |= ((UDItype) 1 << ((sizeof (DItype) * 8) - 53));
+ }
+ }
+ }
+ f = (USItype) (u >> (sizeof (SItype) * 8));
+ f *= 2.0 * (((UDItype) 1) << ((sizeof (SItype) * 8) - 1));
+ f += (USItype) (u & ((((UDItype) 1) << (sizeof (SItype) * 8)) - 1));
+
+ return (SFtype) f;
+}
+
+DItype
+__fixunstfdi (TFtype a)
+{
+ if (a < 0)
+ return 0;
+
+ /* Compute high word of result, as a flonum. */
+ const TFtype b = (a / (((UDItype) 1) << (sizeof (SItype) * 8)));
+ /* Convert that to fixed (but not to DItype!),
+ and shift it into the high word. */
+ UDItype v = (USItype) b;
+ v <<= (sizeof (SItype) * 8);
+ /* Remove high part from the TFtype, leaving the low part as flonum. */
+ a -= (TFtype) v;
+ /* Convert that to fixed (but not to DItype!) and add it in.
+ Sometimes A comes out negative. This is significant, since
+ A has more bits than a long int does. */
+ if (a < 0)
+ v -= (USItype) (-a);
+ else
+ v += (USItype) a;
+ return v;
+}
+
+/* This version is needed to prevent recursion; fixunsdfdi in libgcc
+ calls fixdfdi, which in turn calls calls fixunsdfdi. */
+
+static DItype
+local_fixunsdfdi (DFtype a)
+{
+ USItype hi, lo;
+
+ hi = a / (((UDItype) 1) << (sizeof (SItype) * 8));
+ lo = (a - ((DFtype) hi) * (((UDItype) 1) << (sizeof (SItype) * 8)));
+ return ((UDItype) hi << (sizeof (SItype) * 8)) | lo;
+}
+
+/* This version is needed to prevent recursion; fixunssfdi in libgcc
+ calls fixsfdi, which in turn calls calls fixunssfdi. */
+
+static DItype
+local_fixunssfdi (SFtype original_a)
+{
+ DFtype a = original_a;
+ USItype hi, lo;
+
+ hi = a / (((UDItype) 1) << (sizeof (SItype) * 8));
+ lo = (a - ((DFtype) hi) * (((UDItype) 1) << (sizeof (SItype) * 8)));
+ return ((UDItype) hi << (sizeof (SItype) * 8)) | lo;
+}
+
+#endif /* __powerpc64__ */
diff --git a/gcc-4.9/libgcc/config/rs6000/sfp-machine.h b/gcc-4.9/libgcc/config/rs6000/sfp-machine.h
new file mode 100644
index 000000000..40436337f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/sfp-machine.h
@@ -0,0 +1,71 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined __BIG_ENDIAN__ || defined _BIG_ENDIAN
+# if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN
+# error "Both BIG_ENDIAN and LITTLE_ENDIAN defined!"
+# endif
+# define __BYTE_ORDER __BIG_ENDIAN
+#else
+# if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN
+# define __BYTE_ORDER __LITTLE_ENDIAN
+# else
+# error "Cannot determine current byte order"
+# endif
+#endif
+
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
diff --git a/gcc-4.9/libgcc/config/rs6000/sol-ci.S b/gcc-4.9/libgcc/config/rs6000/sol-ci.S
new file mode 100644
index 000000000..e5b5635a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/sol-ci.S
@@ -0,0 +1,94 @@
+# crti.s for sysv4
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Written By Michael Meissner
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just supplies labeled starting points for the .got* and other
+# special sections. It is linked in first before other modules.
+
+ .ident "GNU C scrti.s"
+
+#ifndef __powerpc64__
+# Start of .text
+ .section ".text"
+ .globl _ex_text0
+_ex_text0:
+
+# Exception range
+ .section ".exception_ranges","aw"
+ .globl _ex_range0
+_ex_range0:
+
+# List of C++ constructors
+ .section ".ctors","aw"
+ .globl __CTOR_LIST__
+ .type __CTOR_LIST__,@object
+__CTOR_LIST__:
+
+# List of C++ destructors
+ .section ".dtors","aw"
+ .globl __DTOR_LIST__
+ .type __DTOR_LIST__,@object
+__DTOR_LIST__:
+
+# Head of _init function used for static constructors
+ .section ".init","ax"
+ .align 2
+ .globl _init
+ .type _init,@function
+_init: stwu %r1,-16(%r1)
+ mflr %r0
+ stw %r31,12(%r1)
+ stw %r0,16(%r1)
+
+ bl _GLOBAL_OFFSET_TABLE_-4 # get the GOT address
+ mflr %r31
+
+# lwz %r3,_ex_shared0@got(%r31)
+# lwz %r4,-8(%r3) # _ex_register or 0
+# cmpi %cr0,%r4,0
+# beq .Lno_reg
+# mtlr %r4
+# blrl
+#.Lno_reg:
+
+# Head of _fini function used for static destructors
+ .section ".fini","ax"
+ .align 2
+ .globl _fini
+ .type _fini,@function
+_fini: stwu %r1,-16(%r1)
+ mflr %r0
+ stw %r31,12(%r1)
+ stw %r0,16(%r1)
+
+ bl _GLOBAL_OFFSET_TABLE_-4 # get the GOT address
+ mflr %r31
+
+# _environ and its evil twin environ, pointing to the environment
+ .section ".sdata","aw"
+ .align 2
+ .globl _environ
+ .space 4
+ .weak environ
+ .set environ,_environ
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/sol-cn.S b/gcc-4.9/libgcc/config/rs6000/sol-cn.S
new file mode 100644
index 000000000..7a5f43cd3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/sol-cn.S
@@ -0,0 +1,72 @@
+# crtn.s for sysv4
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Written By Michael Meissner
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just supplies labeled ending points for the .got* and other
+# special sections. It is linked in last after other modules.
+
+ .ident "GNU C scrtn.s"
+
+#ifndef __powerpc64__
+# Default versions of exception handling register/deregister
+ .weak _ex_register
+ .weak _ex_deregister
+ .set _ex_register,0
+ .set _ex_deregister,0
+
+# End list of C++ constructors
+ .section ".ctors","aw"
+ .globl __CTOR_END__
+ .type __CTOR_END__,@object
+__CTOR_END__:
+
+# End list of C++ destructors
+ .section ".dtors","aw"
+ .weak __DTOR_END__
+ .type __DTOR_END__,@object
+__DTOR_END__:
+
+ .section ".text"
+ .globl _ex_text1
+_ex_text1:
+
+ .section ".exception_ranges","aw"
+ .globl _ex_range1
+_ex_range1:
+
+# Tail of _init used for static constructors
+ .section ".init","ax"
+ lwz %r0,16(%r1)
+ lwz %r31,12(%r1)
+ mtlr %r0
+ addi %r1,%r1,16
+ blr
+
+# Tail of _fini used for static destructors
+ .section ".fini","ax"
+ lwz %r0,16(%r1)
+ lwz %r31,12(%r1)
+ mtlr %r0
+ addi %r1,%r1,16
+ blr
+#endif
diff --git a/gcc-4.9/libgcc/config/rs6000/t-aix-cxa b/gcc-4.9/libgcc/config/rs6000/t-aix-cxa
new file mode 100644
index 000000000..4755c20c9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-aix-cxa
@@ -0,0 +1,12 @@
+LIB2ADDEH += $(srcdir)/config/rs6000/cxa_atexit.c \
+ $(srcdir)/config/rs6000/cxa_finalize.c
+
+LIB2ADD_ST += $(srcdir)/config/rs6000/aixinitfini.c
+
+SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-aix-cxa.ver
+
+crtcxa.o: $(srcdir)/config/rs6000/crtcxa.c
+ $(crt_compile) -c $<
+
+crtcxa_s.o: $(srcdir)/config/rs6000/crtcxa.c
+ $(crt_compile) -DSHARED -c $<
diff --git a/gcc-4.9/libgcc/config/rs6000/t-crtstuff b/gcc-4.9/libgcc/config/rs6000/t-crtstuff
new file mode 100644
index 000000000..7422d3837
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-crtstuff
@@ -0,0 +1,3 @@
+# If .sdata is enabled __CTOR_{LIST,END}__ go into .sdata instead of
+# .ctors.
+CRTSTUFF_T_CFLAGS = -msdata=none
diff --git a/gcc-4.9/libgcc/config/rs6000/t-darwin b/gcc-4.9/libgcc/config/rs6000/t-darwin
new file mode 100644
index 000000000..abb41fc9b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-darwin
@@ -0,0 +1,23 @@
+DARWIN_EXTRA_CRT_BUILD_CFLAGS = -mlongcall -mmacosx-version-min=10.4
+
+crt2.o: $(srcdir)/config/rs6000/darwin-crt2.c
+ $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $<
+
+LIB2ADD = $(srcdir)/config/rs6000/darwin-tramp.S \
+ $(srcdir)/config/darwin-64.c \
+ $(srcdir)/config/rs6000/darwin-fpsave.S \
+ $(srcdir)/config/rs6000/darwin-gpsave.S \
+ $(srcdir)/config/rs6000/darwin-world.S \
+ $(srcdir)/config/rs6000/ppc64-fp.c
+
+LIB2ADD_ST = \
+ $(srcdir)/config/rs6000/darwin-vecsave.S
+
+# The .S files above are designed to run on all processors, even though
+# they use AltiVec instructions.
+# -Wa is used because -force_cpusubtype_ALL doesn't work with -dynamiclib.
+# -mmacosx-version-min=10.4 is used to provide compatibility for code from
+# earlier OSX versions.
+HOST_LIBGCC2_CFLAGS += -Wa,-force_cpusubtype_ALL -mmacosx-version-min=10.4
+
+LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
diff --git a/gcc-4.9/libgcc/config/rs6000/t-darwin64 b/gcc-4.9/libgcc/config/rs6000/t-darwin64
new file mode 100644
index 000000000..50f09d6de
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-darwin64
@@ -0,0 +1,7 @@
+LIB2_SIDITI_CONV_FUNCS = yes
+
+LIB2ADD = $(srcdir)/config/rs6000/darwin-tramp.S \
+ $(srcdir)/config/darwin-64.c \
+ $(srcdir)/config/rs6000/darwin-fpsave.S \
+ $(srcdir)/config/rs6000/darwin-gpsave.S \
+ $(srcdir)/config/rs6000/darwin-world.S
diff --git a/gcc-4.9/libgcc/config/rs6000/t-freebsd b/gcc-4.9/libgcc/config/rs6000/t-freebsd
new file mode 100644
index 000000000..e2d4d2c32
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-freebsd
@@ -0,0 +1,22 @@
+# Overrides for FreeBSD PowerPC
+#
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# We do not want to build ibm-ldouble.c.
+LIB2ADD := $(filter-out %ibm-ldouble.c, $(LIB2ADD))
diff --git a/gcc-4.9/libgcc/config/rs6000/t-freebsd64 b/gcc-4.9/libgcc/config/rs6000/t-freebsd64
new file mode 100644
index 000000000..5dc0d4895
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-freebsd64
@@ -0,0 +1,5 @@
+HOST_LIBGCC2_CFLAGS += -mno-minimal-toc
+SHLIB_MAPFILES = libgcc-std.ver
+
+softfp_wrap_start := '\#ifndef __powerpc64__'
+softfp_wrap_end := '\#endif'
diff --git a/gcc-4.9/libgcc/config/rs6000/t-ibm-ldouble b/gcc-4.9/libgcc/config/rs6000/t-ibm-ldouble
new file mode 100644
index 000000000..b13278498
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-ibm-ldouble
@@ -0,0 +1,6 @@
+# GCC 128-bit long double support routines.
+LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c
+
+HOST_LIBGCC2_CFLAGS += -mlong-double-128
+
+SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ibm-ldouble.ver
diff --git a/gcc-4.9/libgcc/config/rs6000/t-linux b/gcc-4.9/libgcc/config/rs6000/t-linux
new file mode 100644
index 000000000..4f6d4c4a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-linux
@@ -0,0 +1,3 @@
+SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-glibc.ver
+
+HOST_LIBGCC2_CFLAGS += -mlong-double-128 -mno-minimal-toc
diff --git a/gcc-4.9/libgcc/config/rs6000/t-lynx b/gcc-4.9/libgcc/config/rs6000/t-lynx
new file mode 100644
index 000000000..af7f5982b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-lynx
@@ -0,0 +1 @@
+LIB2ADD = $(srcdir)/config/rs6000/tramp.S
diff --git a/gcc-4.9/libgcc/config/rs6000/t-netbsd b/gcc-4.9/libgcc/config/rs6000/t-netbsd
new file mode 100644
index 000000000..7be8e5e67
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-netbsd
@@ -0,0 +1,11 @@
+LIB2ADD = $(srcdir)/config/rs6000/tramp.S
+
+LIB2ADD_ST = \
+ $(srcdir)/config/rs6000/crtsavfpr.S \
+ $(srcdir)/config/rs6000/crtresfpr.S \
+ $(srcdir)/config/rs6000/crtsavgpr.S \
+ $(srcdir)/config/rs6000/crtresgpr.S \
+ $(srcdir)/config/rs6000/crtresxfpr.S \
+ $(srcdir)/config/rs6000/crtresxgpr.S \
+ $(srcdir)/config/rs6000/crtsavevr.S \
+ $(srcdir)/config/rs6000/crtrestvr.S
diff --git a/gcc-4.9/libgcc/config/rs6000/t-ppc64-fp b/gcc-4.9/libgcc/config/rs6000/t-ppc64-fp
new file mode 100644
index 000000000..1fac701fc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-ppc64-fp
@@ -0,0 +1,5 @@
+# Can be used unconditionally, wrapped in __powerpc64__ || __64BIT__ __ppc64__.
+LIB2ADD += $(srcdir)/config/rs6000/ppc64-fp.c
+
+softfp_wrap_start := '\#ifndef __powerpc64__'
+softfp_wrap_end := '\#endif'
diff --git a/gcc-4.9/libgcc/config/rs6000/t-ppccomm b/gcc-4.9/libgcc/config/rs6000/t-ppccomm
new file mode 100644
index 000000000..fb812d380
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-ppccomm
@@ -0,0 +1,22 @@
+LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c \
+ $(srcdir)/config/rs6000/tramp.S
+
+# This can't end up in shared libgcc
+LIB2ADD_ST += \
+ $(srcdir)/config/rs6000/eabi.S
+
+# We build {e,n}crti.o and {e,n}crtn.o, which serve to add begin and
+# end labels to all of the special sections used when we link using gcc.
+
+# Assemble startup files.
+ecrti$(objext): $(srcdir)/config/rs6000/eabi-ci.S
+ $(crt_compile) -c $<
+
+ecrtn$(objext): $(srcdir)/config/rs6000/eabi-cn.S
+ $(crt_compile) -c $<
+
+ncrti$(objext): $(srcdir)/config/rs6000/sol-ci.S
+ $(crt_compile) -c $<
+
+ncrtn$(objext): $(srcdir)/config/rs6000/sol-cn.S
+ $(crt_compile) -c $<
diff --git a/gcc-4.9/libgcc/config/rs6000/t-savresfgpr b/gcc-4.9/libgcc/config/rs6000/t-savresfgpr
new file mode 100644
index 000000000..a8455ae1a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-savresfgpr
@@ -0,0 +1,23 @@
+# These can't end up in shared libgcc
+LIB2ADD_ST += \
+ $(srcdir)/config/rs6000/crtsavfpr.S \
+ $(srcdir)/config/rs6000/crtresfpr.S \
+ $(srcdir)/config/rs6000/crtsavgpr.S \
+ $(srcdir)/config/rs6000/crtresgpr.S \
+ $(srcdir)/config/rs6000/crtresxfpr.S \
+ $(srcdir)/config/rs6000/crtresxgpr.S \
+ $(srcdir)/config/rs6000/crtsavevr.S \
+ $(srcdir)/config/rs6000/crtrestvr.S \
+ $(srcdir)/config/rs6000/e500crtres32gpr.S \
+ $(srcdir)/config/rs6000/e500crtres64gpr.S \
+ $(srcdir)/config/rs6000/e500crtres64gprctr.S \
+ $(srcdir)/config/rs6000/e500crtrest32gpr.S \
+ $(srcdir)/config/rs6000/e500crtrest64gpr.S \
+ $(srcdir)/config/rs6000/e500crtresx32gpr.S \
+ $(srcdir)/config/rs6000/e500crtresx64gpr.S \
+ $(srcdir)/config/rs6000/e500crtsav32gpr.S \
+ $(srcdir)/config/rs6000/e500crtsav64gpr.S \
+ $(srcdir)/config/rs6000/e500crtsav64gprctr.S \
+ $(srcdir)/config/rs6000/e500crtsavg32gpr.S \
+ $(srcdir)/config/rs6000/e500crtsavg64gpr.S \
+ $(srcdir)/config/rs6000/e500crtsavg64gprctr.S
diff --git a/gcc-4.9/libgcc/config/rs6000/t-slibgcc-aix b/gcc-4.9/libgcc/config/rs6000/t-slibgcc-aix
new file mode 100644
index 000000000..288c2c9a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/t-slibgcc-aix
@@ -0,0 +1,43 @@
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Build a shared libgcc library.
+SHLIB_EXT = .a
+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+ -Wl,-bE:@shlib_map_file@ -o @multilib_dir@/shr.o \
+ @multilib_flags@ @shlib_objs@ -lc \
+ `case @multilib_dir@ in \
+ *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \
+ *) echo -lc ;; esac` ; \
+ rm -f @multilib_dir@/tmp-@shlib_base_name@.a ; \
+ $(AR_CREATE_FOR_TARGET) @multilib_dir@/tmp-@shlib_base_name@.a \
+ @multilib_dir@/shr.o ; \
+ mv @multilib_dir@/tmp-@shlib_base_name@.a \
+ @multilib_dir@/@shlib_base_name@.a ; \
+ rm -f @multilib_dir@/shr.o
+SHLIB_INSTALL = \
+ $(mkinstalldirs) $(DESTDIR)$(slibdir)@shlib_slibdir_qual@; \
+ $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.a \
+ $(DESTDIR)$(slibdir)@shlib_slibdir_qual@/
+SHLIB_LIBS = -lc `case @multilib_dir@ in *pthread*) echo -lpthread ;; esac`
+SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+SHLIB_MAPFILES = libgcc-std.ver
+SHLIB_NM_FLAGS = -Bpg -X32_64
+
+# Either 32-bit and 64-bit objects in archives.
+AR_FLAGS_FOR_TARGET = -X32_64
diff --git a/gcc-4.9/libgcc/config/rs6000/tramp.S b/gcc-4.9/libgcc/config/rs6000/tramp.S
new file mode 100644
index 000000000..6f435b5d8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rs6000/tramp.S
@@ -0,0 +1,185 @@
+/* Special support for trampolines
+ *
+ * Copyright (C) 1996-2014 Free Software Foundation, Inc.
+ * Written By Michael Meissner
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* Set up trampolines. */
+
+ .section ".text"
+#include "ppc-asm.h"
+#include "config.h"
+
+#ifndef __powerpc64__
+ .type trampoline_initial,@object
+ .align 2
+trampoline_initial:
+ mflr r0
+ bcl 20,31,1f
+.Lfunc = .-trampoline_initial
+ .long 0 /* will be replaced with function address */
+.Lchain = .-trampoline_initial
+ .long 0 /* will be replaced with static chain */
+1: mflr r11
+ mtlr r0
+ lwz r0,0(r11) /* function address */
+ lwz r11,4(r11) /* static chain */
+ mtctr r0
+ bctr
+
+trampoline_size = .-trampoline_initial
+ .size trampoline_initial,trampoline_size
+
+
+/* R3 = stack address to store trampoline */
+/* R4 = length of trampoline area */
+/* R5 = function address */
+/* R6 = static chain */
+
+FUNC_START(__trampoline_setup)
+ mflr r0 /* save return address */
+ bcl 20,31,.LCF0 /* load up __trampoline_initial into r7 */
+.LCF0:
+ mflr r11
+ addi r7,r11,trampoline_initial-4-.LCF0 /* trampoline address -4 */
+
+ li r8,trampoline_size /* verify that the trampoline is big enough */
+ cmpw cr1,r8,r4
+ srwi r4,r4,2 /* # words to move */
+ addi r9,r3,-4 /* adjust pointer for lwzu */
+ mtctr r4
+ blt cr1,.Labort
+
+ mtlr r0
+
+ /* Copy the instructions to the stack */
+.Lmove:
+ lwzu r10,4(r7)
+ stwu r10,4(r9)
+ bdnz .Lmove
+
+ /* Store correct function and static chain */
+ stw r5,.Lfunc(r3)
+ stw r6,.Lchain(r3)
+
+ /* Now flush both caches */
+ mtctr r4
+.Lcache:
+ icbi 0,r3
+ dcbf 0,r3
+ addi r3,r3,4
+ bdnz .Lcache
+
+ /* Finally synchronize things & return */
+ sync
+ isync
+ blr
+
+.Labort:
+/* Use a longcall sequence in the non PIC case on VxWorks, to prevent
+ possible relocation errors if this is module-loaded very far away from
+ the 'abort' entry point. */
+#if defined (__VXWORKS__) && ! (defined __PIC__ || defined __pic__)
+ lis r11,JUMP_TARGET(abort)@ha
+ addic r11,r11,JUMP_TARGET(abort)@l
+ mtlr r11
+ blrl
+#else
+
+#if (defined __PIC__ || defined __pic__) && defined HAVE_AS_REL16
+ bcl 20,31,1f
+1: mflr r30
+ addis r30,r30,_GLOBAL_OFFSET_TABLE_-1b@ha
+ addi r30,r30,_GLOBAL_OFFSET_TABLE_-1b@l
+#endif
+ bl JUMP_TARGET(abort)
+FUNC_END(__trampoline_setup)
+
+#endif
+
+#elif _CALL_ELF == 2
+ .type trampoline_initial,@object
+ .align 3
+trampoline_initial:
+ ld r11,.Lchain(r12)
+ ld r12,.Lfunc(r12)
+ mtctr r12
+ bctr
+.Lfunc = .-trampoline_initial
+ .quad 0 /* will be replaced with function address */
+.Lchain = .-trampoline_initial
+ .quad 0 /* will be replaced with static chain */
+
+trampoline_size = .-trampoline_initial
+ .size trampoline_initial,trampoline_size
+
+
+/* R3 = stack address to store trampoline */
+/* R4 = length of trampoline area */
+/* R5 = function address */
+/* R6 = static chain */
+
+ .pushsection ".toc","aw"
+.LC0:
+ .quad trampoline_initial-8
+ .popsection
+
+FUNC_START(__trampoline_setup)
+ addis 7,2,.LC0@toc@ha
+ ld 7,.LC0@toc@l(7) /* trampoline address -8 */
+
+ li r8,trampoline_size /* verify that the trampoline is big enough */
+ cmpw cr1,r8,r4
+ srwi r4,r4,3 /* # doublewords to move */
+ addi r9,r3,-8 /* adjust pointer for stdu */
+ mtctr r4
+ blt cr1,.Labort
+
+ /* Copy the instructions to the stack */
+.Lmove:
+ ldu r10,8(r7)
+ stdu r10,8(r9)
+ bdnz .Lmove
+
+ /* Store correct function and static chain */
+ std r5,.Lfunc(r3)
+ std r6,.Lchain(r3)
+
+ /* Now flush both caches */
+ mtctr r4
+.Lcache:
+ icbi 0,r3
+ dcbf 0,r3
+ addi r3,r3,8
+ bdnz .Lcache
+
+ /* Finally synchronize things & return */
+ sync
+ isync
+ blr
+
+.Labort:
+ bl JUMP_TARGET(abort)
+ nop
+FUNC_END(__trampoline_setup)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/rx/rx-abi-functions.c b/gcc-4.9/libgcc/config/rx/rx-abi-functions.c
new file mode 100644
index 000000000..fa2c17416
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rx/rx-abi-functions.c
@@ -0,0 +1,90 @@
+/* RX C ABI functions
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+
+/* The RX C ABI includes the specification of a set of compiler support
+ functions. Libgcc2 includes some of them, although the names have to
+ be changed (see rx-abi.h), and the rest are defined here.
+
+ FIXME: Given that FINE_GRAINED_LIBRARIES is defined we ought to consider
+ compiling this file multiple times with one function per iteration being
+ compiled. */
+
+#ifdef __RX_64BIT_DOUBLES__
+
+int _COM_CMPLTd (double a, double b) { return __ltdf2 (a, b) == -1; }
+int _COM_CMPGTd (double a, double b) { return __gtdf2 (a, b) == 1; }
+int _COM_CMPLEd (double a, double b) { return __ledf2 (a, b) != 1; }
+int _COM_CMPGEd (double a, double b) { return __gedf2 (a, b) != -1; }
+int _COM_CMPEQd (double a, double b) { return __eqdf2 (a, b) == 0; }
+int _COM_CMPNEd (double a, double b) { return __nedf2 (a, b) != 0; }
+
+int _COM_CMPLTf (double, double) __attribute__ ((weak, alias ("_COM_CMPLTd")));
+int _COM_CMPGTf (double, double) __attribute__ ((weak, alias ("_COM_CMPGTd")));
+int _COM_CMPLEf (double, double) __attribute__ ((weak, alias ("_COM_CMPLEd")));
+int _COM_CMPGEf (double, double) __attribute__ ((weak, alias ("_COM_CMPGEd")));
+int _COM_CMPEQf (double, double) __attribute__ ((weak, alias ("_COM_CMPEQd")));
+int _COM_CMPNEf (double, double) __attribute__ ((weak, alias ("_COM_CMPNEd")));
+
+#else /* 32-bit doubles. */
+
+double _COM_CONVfd (float a) { return a; }
+float _COM_CONVdf (double a) { return a; }
+
+int _COM_CMPLTd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPLTf")));
+int _COM_CMPGTd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPGTf")));
+int _COM_CMPLEd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPLEf")));
+int _COM_CMPGEd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPGEf")));
+int _COM_CMPEQd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPEQf")));
+int _COM_CMPNEd (double a, double b) __attribute__ ((weak, alias ("_COM_CMPNEf")));
+
+signed long long _COM_CONVd64s (double a) { return (signed long long) a; }
+unsigned long long _COM_CONVd64u (double a) { return (unsigned long long) a; }
+
+int _COM_CMPLTf (float a, float b) { return __ltsf2 (a, b) == -1; }
+int _COM_CMPGTf (float a, float b) { return __gtsf2 (a, b) == 1; }
+int _COM_CMPLEf (float a, float b) { return __lesf2 (a, b) != 1; }
+int _COM_CMPGEf (float a, float b) { return __gesf2 (a, b) != -1; }
+int _COM_CMPEQf (float a, float b) { return __eqsf2 (a, b) == 0; }
+int _COM_CMPNEf (float a, float b) { return __nesf2 (a, b) != 0; }
+
+#endif /* 64-bit vs 32-bit doubles. */
+
+double _COM_CONV64sd (signed long long a) { return (double) a; }
+double _COM_CONV64ud (unsigned long long a) { return (double) a; }
+
+extern int __cmpdi2 (long long, long long);
+extern int __ucmpdi2 (long long, long long);
+
+int _COM_CMPLT64s (long long a, long long b) { return __cmpdi2 (a, b) == 0; }
+int _COM_CMPLT64u (long long a, long long b) { return __ucmpdi2 (a, b) == 0; }
+int _COM_CMPGT64s (long long a, long long b) { return __cmpdi2 (a, b) == 2; }
+int _COM_CMPGT64u (long long a, long long b) { return __ucmpdi2 (a, b) == 2; }
+int _COM_CMPLE64s (long long a, long long b) { return __cmpdi2 (a, b) != 2; }
+int _COM_CMPLE64u (long long a, long long b) { return __ucmpdi2 (a, b) != 2; }
+int _COM_CMPGE64s (long long a, long long b) { return __cmpdi2 (a, b) != 0; }
+int _COM_CMPGE64u (long long a, long long b) { return __ucmpdi2 (a, b) != 0; }
+int _COM_CMPEQ64 (long long a, long long b) { return __cmpdi2 (a, b) == 1; }
+int _COM_CMPNE64 (long long a, long long b) { return __cmpdi2 (a, b) != 1; }
+
diff --git a/gcc-4.9/libgcc/config/rx/rx-abi.h b/gcc-4.9/libgcc/config/rx/rx-abi.h
new file mode 100644
index 000000000..fda152340
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rx/rx-abi.h
@@ -0,0 +1,233 @@
+/* Header file for RX ABI versions of libgcc functions.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ Contributed by Red Hat.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+/* Make __COM_<RX_NAME> an alias for __<GCC_NAME>. */
+#define RENAME_LIBRARY(GCC_NAME, RX_NAME) \
+ __asm__ (".globl\t__COM_" #RX_NAME "\n" \
+ ".set\t__COM_" #RX_NAME ", ___" #GCC_NAME "\n");
+
+
+/* The long-long aliases... */
+
+#ifdef L_muldi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, MUL64)
+#endif
+
+#ifdef L_divdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (divdi3, DIV64s)
+#endif
+
+#ifdef L_udivdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (udivdi3, DIV64u)
+#endif
+
+#ifdef L_ashldi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (ashldi3, SHLL64)
+#endif
+
+#ifdef L_lshrdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (lshrdi3, SHLR64)
+#endif
+
+#ifdef L_ashrdi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (ashrdi3, SHAR64)
+#endif
+
+#ifdef L_fixsfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, CONVf64s)
+#endif
+
+#ifdef L_fixunssfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, CONVf64u)
+#endif
+
+#ifdef L_floatdisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, CONV64sf)
+#endif
+
+#ifdef L_floatundisf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatundisf, CONV64uf)
+#endif
+
+#ifdef L_moddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (moddi3, MOD64s)
+#endif
+
+#ifdef L_umoddi3
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (umoddi3, MOD64u)
+#endif
+
+
+
+#ifdef __RX_64BIT_DOUBLES__
+
+/* Float (32-bit) aliases... */
+
+#ifdef L_sf_to_si
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfsi, CONVf32s)
+#endif
+
+#ifdef L_fixunssfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfsi, CONVf32u)
+#endif
+
+#ifdef L_addsub_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (addsf3, ADDf) \
+ RENAME_LIBRARY (subsf3, SUBf)
+#endif
+
+#ifdef L_mul_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (mulsf3, MULf)
+#endif
+
+#ifdef L_div_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (divsf3, DIVf)
+#endif
+
+/* Double (64-bit) aliases... */
+
+#ifdef L_addsub_df
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (adddf3, ADDd) \
+ RENAME_LIBRARY (subdf3, SUBd)
+#endif
+
+#ifdef L_mul_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldf3, MULd)
+#endif
+
+#ifdef L_div_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (divdf3, DIVd)
+#endif
+
+#ifdef L_fixdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfdi, CONVd64s)
+#endif
+
+#ifdef L_fixunsdfdi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfdi, CONVd64u)
+#endif
+
+#ifdef L_floatdidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, CONV64sd)
+#endif
+
+#ifdef L_floatundidf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, CONV64ud)
+#endif
+
+#ifdef L_df_to_si
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixdfsi, CONVd32s)
+#endif
+
+#ifdef L_fixunsdfsi
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunsdfsi, CONVd32u)
+#endif
+
+#ifdef L_si_to_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatsidf, CONV32sd)
+#endif
+
+#ifdef L_usi_to_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatunsidf, CONV32ud)
+#endif
+
+#ifdef L_sf_to_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (extendsfdf2, CONVfd)
+#endif
+
+#ifdef L_df_to_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (truncdfsf2, CONVdf)
+#endif
+
+#ifdef L_negate_df
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (negdf2, NEGd)
+#endif
+
+#ifdef L_si_to_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatsisf, CONV32sf)
+#endif
+
+#ifdef L_usi_to_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatunsisf, CONV32uf)
+#endif
+
+/* The 64-bit comparison functions do not have aliases because libgcc2
+ does not provide them. Instead they have to be supplied in
+ rx-abi-functions.c. */
+
+
+#else /* 32-bit doubles. */
+
+
+#ifdef L_addsub_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (addsf3, ADDd) \
+ RENAME_LIBRARY (subsf3, SUBd) \
+ RENAME_LIBRARY (addsf3, ADDf) \
+ RENAME_LIBRARY (subsf3, SUBf)
+#endif
+
+#ifdef L_mul_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (mulsf3, MULd) \
+ RENAME_LIBRARY (mulsf3, MULf)
+#endif
+
+#ifdef L_div_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (divsf3, DIVd) \
+ RENAME_LIBRARY (divsf3, DIVf)
+#endif
+
+#ifdef L_sf_to_si
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (fixsfsi, CONVd32s) \
+ RENAME_LIBRARY (fixsfsi, CONVf32s)
+#endif
+
+#ifdef L_fixunssfsi
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (fixunssfsi, CONVd32u) \
+ RENAME_LIBRARY (fixunssfsi, CONVf32u)
+#endif
+
+#ifdef L_si_to_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (floatsisf, CONV32sd) \
+ RENAME_LIBRARY (floatsisf, CONV32sf)
+#endif
+
+#ifdef L_usi_to_sf
+#define DECLARE_LIBRARY_RENAMES \
+ RENAME_LIBRARY (floatunsisf, CONV32ud) \
+ RENAME_LIBRARY (floatunsisf, CONV32uf)
+#endif
+
+#ifdef L_negate_sf
+#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (negsf2, NEGd)
+#endif
+
+#endif /* 64-bit vs 32-bit doubles. */
diff --git a/gcc-4.9/libgcc/config/rx/rx-lib.h b/gcc-4.9/libgcc/config/rx/rx-lib.h
new file mode 100644
index 000000000..c83516fd6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rx/rx-lib.h
@@ -0,0 +1,5 @@
+#ifndef __RX_64BIT_DOUBLES__
+#define DF SF
+#define FLOAT_ONLY
+#endif
+
diff --git a/gcc-4.9/libgcc/config/rx/t-rx b/gcc-4.9/libgcc/config/rx/t-rx
new file mode 100644
index 000000000..be7741c96
--- /dev/null
+++ b/gcc-4.9/libgcc/config/rx/t-rx
@@ -0,0 +1,34 @@
+# Makefile fragment for building LIBGCC for the Renesas RX target.
+# Copyright (C) 2008-2014 Free Software Foundation, Inc.
+# Contributed by Red Hat.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3, or (at your
+# option) any later version.
+#
+# GCC is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+# the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+
+# Add functions required by the RX ABI which are not part of
+# the normal libgcc sources:
+
+LIB2ADD = $(srcdir)/config/rx/rx-abi-functions.c
+
+
+# We need special handling of the floating point conversion
+# routines, to allow for the varying size of a double:
+
+FPBIT = true
+ifeq ($(double_type_size),64)
+DPBIT = true
+endif
diff --git a/gcc-4.9/libgcc/config/s390/32/_fixdfdi.c b/gcc-4.9/libgcc/config/s390/32/_fixdfdi.c
new file mode 100644
index 000000000..e6dd4d114
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/_fixdfdi.c
@@ -0,0 +1,113 @@
+/* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __s390x__
+
+#define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
+#define EXPONENT_BIAS 1023
+#define MANTISSA_BITS 52
+#define PRECISION (MANTISSA_BITS + 1)
+#define SIGNBIT 0x80000000
+#define SIGN(fp) ((fp.l.upper) & SIGNBIT)
+#define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
+#define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
+#define HIDDEND_LL ((UDItype_x)1 << MANTISSA_BITS)
+#define LLONG_MAX 9223372036854775807LL
+#define LLONG_MIN (-LLONG_MAX - 1LL)
+
+typedef int DItype_x __attribute__ ((mode (DI)));
+typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+typedef int SItype_x __attribute__ ((mode (SI)));
+typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+union double_long {
+ double d;
+ struct {
+ SItype_x upper;
+ USItype_x lower;
+ } l;
+ UDItype_x ll;
+};
+
+static __inline__ void
+fexceptdiv (float d, float e)
+{
+ __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
+}
+
+DItype_x __fixdfdi (double a1);
+
+/* convert double to int */
+DItype_x
+__fixdfdi (double a1)
+{
+ register union double_long dl1;
+ register int exp;
+ register DItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXPD (dl1))
+ return 0;
+
+ /* The exponent - considered the binary point at the right end of
+ the mantissa. */
+ exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1 */
+ if (exp <= -PRECISION)
+ return 0;
+
+ /* NaN */
+
+ if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0x8000000000000000ULL;
+ }
+
+ /* Number big number & +/- inf */
+ if (exp >= 11) {
+ /* Don't throw an exception for -1p+63 */
+ if (!SIGN (dl1) || exp > 11 || FRACD_LL (dl1) != 0)
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return SIGN (dl1) ? LLONG_MIN : LLONG_MAX;
+ }
+
+ l = MANTD_LL(dl1);
+
+ /* shift down until exp < 12 or l = 0 */
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return (SIGN (dl1) ? -l : l);
+}
+#endif /* !__s390x__ */
diff --git a/gcc-4.9/libgcc/config/s390/32/_fixsfdi.c b/gcc-4.9/libgcc/config/s390/32/_fixsfdi.c
new file mode 100644
index 000000000..99f91a705
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/_fixsfdi.c
@@ -0,0 +1,107 @@
+/* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __s390x__
+
+#define EXPONENT_BIAS 127
+#define MANTISSA_BITS 23
+#define EXP(fp) (((fp.l) >> MANTISSA_BITS) & 0xFF)
+#define PRECISION (MANTISSA_BITS + 1)
+#define SIGNBIT 0x80000000
+#define SIGN(fp) ((fp.l) & SIGNBIT)
+#define HIDDEN (1 << MANTISSA_BITS)
+#define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
+#define FRAC(fp) ((fp.l) & 0x7FFFFF)
+#define LLONG_MAX 9223372036854775807LL
+#define LLONG_MIN (-LLONG_MAX - 1LL)
+
+typedef int DItype_x __attribute__ ((mode (DI)));
+typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+typedef int SItype_x __attribute__ ((mode (SI)));
+typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+union float_long
+ {
+ float f;
+ USItype_x l;
+ };
+
+static __inline__ void
+fexceptdiv (float d, float e)
+{
+ __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
+}
+
+DItype_x __fixsfdi (float a1);
+
+/* convert double to int */
+DItype_x
+__fixsfdi (float a1)
+{
+ register union float_long fl1;
+ register int exp;
+ register DItype_x l;
+
+ fl1.f = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXP (fl1))
+ return 0;
+
+ exp = EXP (fl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1 */
+ if (exp <= -PRECISION)
+ return 0;
+
+ /* NaN */
+
+ if ((EXP (fl1) == 0xff) && (FRAC (fl1) != 0)) /* NaN */
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0x8000000000000000ULL;
+ }
+
+ /* Number big number & +/- inf */
+ if (exp >= 40) {
+ /* Don't throw an exception for -1p+63 */
+ if (!SIGN (fl1) || exp > 40 || FRAC (fl1) != 0)
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return SIGN (fl1) ? LLONG_MIN : LLONG_MAX;
+ }
+
+ l = MANT (fl1);
+
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return (SIGN (fl1) ? -l : l);
+}
+#endif /* !__s390x__ */
diff --git a/gcc-4.9/libgcc/config/s390/32/_fixtfdi.c b/gcc-4.9/libgcc/config/s390/32/_fixtfdi.c
new file mode 100644
index 000000000..de84972a2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/_fixtfdi.c
@@ -0,0 +1,122 @@
+/* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __s390x__
+
+#define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
+#define EXPONENT_BIAS 16383
+#define MANTISSA_BITS 112
+#define PRECISION (MANTISSA_BITS + 1)
+#define SIGNBIT 0x80000000
+#define SIGN(fp) ((fp.l.i[0]) & SIGNBIT)
+#define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
+#define MANTD_LOW_LL(fp) (fp.ll[1])
+#define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
+#define HIGH_LL_FRAC_BITS 48
+#define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
+#define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
+#define LLONG_MAX 9223372036854775807LL
+#define LLONG_MIN (-LLONG_MAX - 1LL)
+
+typedef int DItype_x __attribute__ ((mode (DI)));
+typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+typedef int SItype_x __attribute__ ((mode (SI)));
+typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+union double_long {
+ long double d;
+ struct {
+ SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
+ } l;
+ UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
+};
+
+static __inline__ void
+fexceptdiv (float d, float e)
+{
+ __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
+}
+
+DItype_x __fixtfdi (long double a1);
+
+/* convert double to unsigned int */
+DItype_x
+__fixtfdi (long double a1)
+{
+ register union double_long dl1;
+ register int exp;
+ register UDItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXPD (dl1))
+ return 0;
+
+ /* The exponent - considered the binary point at the right end of
+ the mantissa. */
+ exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1: If the mantissa would need to be right-shifted more bits than
+ its size the result would be zero. */
+ if (exp <= -PRECISION)
+ return 0;
+
+ /* NaN: All exponent bits set and a nonzero fraction. */
+ if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0x8000000000000000ULL;
+ }
+
+ /* One extra bit is needed for the unit bit which is appended by
+ MANTD_HIGH_LL on the left of the matissa. */
+ exp += HIGH_LL_FRAC_BITS + 1;
+
+ /* If the result would still need a left shift it will be too large
+ to be represented. Compared to the unsigned variant we have to
+ take care that there is still space for the sign bit to be
+ applied. So we can only go on if there is a right-shift by one
+ or more. */
+ if (exp >= 0)
+ {
+ /* Don't throw an exception for -1p+63 */
+ if (!SIGN (dl1)
+ || exp > 0
+ || MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
+ || (dl1.ll[0] & HIGH_LL_FRAC_MASK))
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return SIGN (dl1) ? LLONG_MIN : LLONG_MAX;
+ }
+
+ l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
+ | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
+
+ return SIGN (dl1) ? -(l >> -exp) : l >> -exp;
+}
+#endif /* !__s390x__ */
diff --git a/gcc-4.9/libgcc/config/s390/32/_fixunsdfdi.c b/gcc-4.9/libgcc/config/s390/32/_fixunsdfdi.c
new file mode 100644
index 000000000..0a249611a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/_fixunsdfdi.c
@@ -0,0 +1,120 @@
+/* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __s390x__
+
+#define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF)
+#define EXPONENT_BIAS 1023
+#define MANTISSA_BITS 52
+#define PRECISION (MANTISSA_BITS + 1)
+#define SIGNBIT 0x80000000
+#define SIGN(fp) ((fp.l.upper) & SIGNBIT)
+#define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL)
+#define FRACD_LL(fp) (fp.ll & (HIDDEND_LL-1))
+#define HIDDEND_LL ((UDItype_x)1 << 52)
+
+typedef int DItype_x __attribute__ ((mode (DI)));
+typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+typedef int SItype_x __attribute__ ((mode (SI)));
+typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+union double_long {
+ double d;
+ struct {
+ SItype_x upper;
+ USItype_x lower;
+ } l;
+ UDItype_x ll;
+};
+
+static __inline__ void
+fexceptdiv (float d, float e)
+{
+ __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
+}
+
+UDItype_x __fixunsdfdi (double a1);
+
+/* convert double to unsigned int */
+UDItype_x
+__fixunsdfdi (double a1)
+{
+ register union double_long dl1;
+ register int exp;
+ register UDItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXPD (dl1))
+ return 0;
+
+ /* Negative. */
+ if (SIGN (dl1))
+ {
+ /* Value is <= -1.0
+ C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ if (EXPD (dl1) >= EXPONENT_BIAS)
+ fexceptdiv (0.0, 0.0);
+ return 0;
+ }
+
+ exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1 */
+
+ if (exp < -PRECISION)
+ return 0;
+
+ /* NaN */
+
+ if ((EXPD(dl1) == 0x7ff) && (FRACD_LL(dl1) != 0)) /* NaN */
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0x0ULL;
+ }
+
+ /* Number big number & + inf */
+
+ if (exp >= 12)
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0xFFFFFFFFFFFFFFFFULL;
+ }
+
+ l = MANTD_LL(dl1);
+
+ /* shift down until exp < 12 or l = 0 */
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return l;
+}
+#endif /* !__s390x__ */
diff --git a/gcc-4.9/libgcc/config/s390/32/_fixunssfdi.c b/gcc-4.9/libgcc/config/s390/32/_fixunssfdi.c
new file mode 100644
index 000000000..7aeed28a0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/_fixunssfdi.c
@@ -0,0 +1,114 @@
+/* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __s390x__
+
+#define EXPONENT_BIAS 127
+#define MANTISSA_BITS 23
+#define EXP(fp) (((fp.l) >> MANTISSA_BITS) & 0xFF)
+#define SIGNBIT 0x80000000
+#define SIGN(fp) ((fp.l) & SIGNBIT)
+#define HIDDEN (1 << MANTISSA_BITS)
+#define MANT(fp) (((fp.l) & 0x7FFFFF) | HIDDEN)
+#define FRAC(fp) ((fp.l) & 0x7FFFFF)
+
+typedef int DItype_x __attribute__ ((mode (DI)));
+typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+typedef int SItype_x __attribute__ ((mode (SI)));
+typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+union float_long
+ {
+ float f;
+ USItype_x l;
+ };
+
+static __inline__ void
+fexceptdiv (float d, float e)
+{
+ __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
+}
+
+UDItype_x __fixunssfdi (float a1);
+
+/* convert float to unsigned int */
+UDItype_x
+__fixunssfdi (float a1)
+{
+ register union float_long fl1;
+ register int exp;
+ register UDItype_x l;
+
+ fl1.f = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXP (fl1))
+ return 0;
+
+ /* Negative. */
+ if (SIGN (fl1))
+ {
+ /* Value is <= -1.0
+ C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ if (EXP (fl1) >= EXPONENT_BIAS)
+ fexceptdiv (0.0, 0.0);
+ return 0;
+ }
+
+ exp = EXP (fl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1 */
+ if (exp < -24)
+ return 0;
+
+ /* NaN */
+
+ if ((EXP (fl1) == 0xff) && (FRAC (fl1) != 0)) /* NaN */
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0x0ULL;
+ }
+
+ /* Number big number & + inf */
+
+ if (exp >= 41)
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0xFFFFFFFFFFFFFFFFULL;
+ }
+
+ l = MANT (fl1);
+
+ if (exp > 0)
+ l <<= exp;
+ else
+ l >>= -exp;
+
+ return l;
+}
+#endif /* !__s390x__ */
diff --git a/gcc-4.9/libgcc/config/s390/32/_fixunstfdi.c b/gcc-4.9/libgcc/config/s390/32/_fixunstfdi.c
new file mode 100644
index 000000000..2f90a5f2f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/_fixunstfdi.c
@@ -0,0 +1,125 @@
+/* Definitions of target machine for GNU compiler, for IBM S/390
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
+ Contributed by Hartmut Penner (hpenner@de.ibm.com) and
+ Ulrich Weigand (uweigand@de.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __s390x__
+
+#define EXPD(fp) (((fp.l.i[0]) >> 16) & 0x7FFF)
+#define EXPONENT_BIAS 16383
+#define MANTISSA_BITS 112
+#define PRECISION (MANTISSA_BITS + 1)
+#define SIGNBIT 0x80000000
+#define SIGND(fp) ((fp.l.i[0]) & SIGNBIT)
+#define MANTD_HIGH_LL(fp) ((fp.ll[0] & HIGH_LL_FRAC_MASK) | HIGH_LL_UNIT_BIT)
+#define MANTD_LOW_LL(fp) (fp.ll[1])
+#define FRACD_ZERO_P(fp) (!fp.ll[1] && !(fp.ll[0] & HIGH_LL_FRAC_MASK))
+#define HIGH_LL_FRAC_BITS 48
+#define HIGH_LL_UNIT_BIT ((UDItype_x)1 << HIGH_LL_FRAC_BITS)
+#define HIGH_LL_FRAC_MASK (HIGH_LL_UNIT_BIT - 1)
+
+typedef int DItype_x __attribute__ ((mode (DI)));
+typedef unsigned int UDItype_x __attribute__ ((mode (DI)));
+typedef int SItype_x __attribute__ ((mode (SI)));
+typedef unsigned int USItype_x __attribute__ ((mode (SI)));
+
+union double_long {
+ long double d;
+ struct {
+ SItype_x i[4]; /* 32 bit parts: 0 upper ... 3 lowest */
+ } l;
+ UDItype_x ll[2]; /* 64 bit parts: 0 upper, 1 lower */
+};
+
+static __inline__ void
+fexceptdiv (float d, float e)
+{
+ __asm__ __volatile__ ("debr %0,%1" : : "f" (d), "f" (e) );
+}
+
+UDItype_x __fixunstfdi (long double a1);
+
+/* convert double to unsigned int */
+UDItype_x
+__fixunstfdi (long double a1)
+{
+ register union double_long dl1;
+ register int exp;
+ register UDItype_x l;
+
+ dl1.d = a1;
+
+ /* +/- 0, denormalized */
+ if (!EXPD (dl1))
+ return 0;
+
+ /* Negative. */
+ if (SIGND (dl1))
+ {
+ /* Value is <= -1.0
+ C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ if (EXPD (dl1) >= EXPONENT_BIAS)
+ fexceptdiv (0.0, 0.0);
+ return 0;
+ }
+
+ /* The exponent - considered the binary point at the right end of
+ the mantissa. */
+ exp = EXPD (dl1) - EXPONENT_BIAS - MANTISSA_BITS;
+
+ /* number < 1: If the mantissa would need to be right-shifted more bits than
+ its size (plus the implied one bit on the left) the result would be
+ zero. */
+ if (exp <= -PRECISION)
+ return 0;
+
+ /* NaN: All exponent bits set and a nonzero fraction. */
+ if ((EXPD(dl1) == 0x7fff) && !FRACD_ZERO_P (dl1))
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0;
+ }
+
+ /* One extra bit is needed for the unit bit which is appended by
+ MANTD_HIGH_LL on the left of the matissa. */
+ exp += HIGH_LL_FRAC_BITS + 1;
+
+ /* If the result would still need a left shift it will be too
+ large to be represented. Infinities have all exponent bits set
+ and will end up here as well. */
+ if (exp > 0)
+ {
+ /* C99 Annex F.4 requires an "invalid" exception to be thrown. */
+ fexceptdiv (0.0, 0.0);
+ return 0xFFFFFFFFFFFFFFFFULL;
+ }
+
+ l = MANTD_LOW_LL (dl1) >> (HIGH_LL_FRAC_BITS + 1)
+ | MANTD_HIGH_LL (dl1) << (64 - (HIGH_LL_FRAC_BITS + 1));
+
+ return l >> -exp;
+}
+
+#endif /* !__s390x__ */
diff --git a/gcc-4.9/libgcc/config/s390/32/t-floattodi b/gcc-4.9/libgcc/config/s390/32/t-floattodi
new file mode 100644
index 000000000..4bd87b1f8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/32/t-floattodi
@@ -0,0 +1,5 @@
+floattodi-functions = _fixsfdi _fixdfdi _fixtfdi _fixunssfdi _fixunsdfdi _fixunstfdi
+LIB2FUNCS_EXCLUDE += $(floattodi-functions)
+
+floattodi-src = $(addsuffix .c, $(floattodi-functions))
+LIB2ADD = $(addprefix $(srcdir)/config/s390/32/, $(floattodi-src))
diff --git a/gcc-4.9/libgcc/config/s390/gthr-tpf.h b/gcc-4.9/libgcc/config/s390/gthr-tpf.h
new file mode 100644
index 000000000..95d87db34
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/gthr-tpf.h
@@ -0,0 +1,234 @@
+/* Threads compatibility routines for libgcc2 and libobjc.
+ Compile this one with gcc.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* TPF needs its own version of gthr-*.h because TPF always links to
+ the thread library. However, for performance reasons we still do not
+ want to issue thread api calls unless a check is made to see that we
+ are running as a thread. */
+
+#ifndef GCC_GTHR_TPF_H
+#define GCC_GTHR_TPF_H
+
+/* POSIX threads specific definitions.
+ Easy, since the interface is just one-to-one mapping. */
+
+#define __GTHREADS 1
+
+/* Some implementations of <pthread.h> require this to be defined. */
+#ifndef _REENTRANT
+#define _REENTRANT 1
+#endif
+
+#include <pthread.h>
+#include <unistd.h>
+
+typedef pthread_key_t __gthread_key_t;
+typedef pthread_once_t __gthread_once_t;
+typedef pthread_mutex_t __gthread_mutex_t;
+typedef pthread_mutex_t __gthread_recursive_mutex_t;
+
+#if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER)
+#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+#elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
+#define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+#endif
+
+#define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
+#define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT
+#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+
+#define NOTATHREAD 00
+#define ECBBASEPTR (unsigned long int) *(unsigned int *)0x00000514u
+#define ECBPG2PTR ECBBASEPTR + 0x1000
+#define CE2THRCPTR *((unsigned char *)(ECBPG2PTR + 16))
+#define __tpf_pthread_active() (CE2THRCPTR != NOTATHREAD)
+
+#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+# define __gthrw(name) \
+ static __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name)));
+# define __gthrw_(name) __gthrw_ ## name
+#else
+# define __gthrw(name)
+# define __gthrw_(name) name
+#endif
+
+__gthrw(pthread_once)
+__gthrw(pthread_key_create)
+__gthrw(pthread_key_delete)
+__gthrw(pthread_getspecific)
+__gthrw(pthread_setspecific)
+__gthrw(pthread_create)
+
+__gthrw(pthread_mutex_lock)
+__gthrw(pthread_mutex_trylock)
+__gthrw(pthread_mutex_unlock)
+__gthrw(pthread_mutexattr_init)
+__gthrw(pthread_mutexattr_settype)
+__gthrw(pthread_mutexattr_destroy)
+__gthrw(pthread_mutex_init)
+__gthrw(pthread_mutex_destroy)
+
+static inline int
+__gthread_active_p (void)
+{
+ return 1;
+}
+
+static inline int
+__gthread_once (__gthread_once_t *__once, void (*__func) (void))
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_once) (__once, __func);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_key_create) (__key, __dtor);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_key_delete (__gthread_key_t __key)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_key_delete) (__key);
+ else
+ return -1;
+}
+
+static inline void *
+__gthread_getspecific (__gthread_key_t __key)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_getspecific) (__key);
+ else
+ return NULL;
+}
+
+static inline int
+__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_setspecific) (__key, __ptr);
+ else
+ return -1;
+}
+
+static inline int
+__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_mutex_destroy) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_lock (__gthread_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_mutex_lock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_mutex_trylock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthrw_(pthread_mutex_unlock) (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthread_mutex_lock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthread_mutex_trylock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ return __gthread_mutex_unlock (__mutex);
+ else
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+{
+ if (__tpf_pthread_active ())
+ {
+ pthread_mutexattr_t __attr;
+ int __r;
+
+ __r = __gthrw_(pthread_mutexattr_init) (&__attr);
+ if (!__r)
+ __r = __gthrw_(pthread_mutexattr_settype) (&__attr,
+ PTHREAD_MUTEX_RECURSIVE);
+ if (!__r)
+ __r = __gthrw_(pthread_mutex_init) (__mutex, &__attr);
+ if (!__r)
+ __r = __gthrw_(pthread_mutexattr_destroy) (&__attr);
+ return __r;
+ }
+ return 0;
+}
+
+static inline int
+__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+{
+ return __gthread_mutex_destroy (__mutex);
+}
+
+#endif /* ! GCC_GTHR_TPF_H */
diff --git a/gcc-4.9/libgcc/config/s390/libgcc-glibc.ver b/gcc-4.9/libgcc/config/s390/libgcc-glibc.ver
new file mode 100644
index 000000000..a03d2bd69
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/libgcc-glibc.ver
@@ -0,0 +1,116 @@
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# In order to work around the very problems that force us to now generally
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+# By now choosing the same version tags for these specific routines, we
+# maintain enough binary compatibility to allow future versions of glibc
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+# Note that we cannot use the default libgcc-glibc.ver file on s390x,
+# because GLIBC_2.0 does not exist on this architecture, as the first
+# ever glibc release on the platform was GLIBC_2.2.
+
+%ifndef __s390x__
+%exclude {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%inherit GCC_3.0 GLIBC_2.0
+GLIBC_2.0 {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+%endif
+
+%ifdef __s390x__
+%exclude {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%inherit GCC_3.0 GLIBC_2.2
+GLIBC_2.2 {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+%endif
+
+# With GCC 4.1.0 long double 128 bit support was introduced. The
+# following symbols coming from libgcc are enabled when -mlong-double-128
+# is specified. These lines make the symbols to get a @@GCC_4.1.0 attached.
+
+%exclude {
+ __divtc3
+ __multc3
+ __powitf2
+ __fixtfti
+ __fixunstfti
+ __floattitf
+
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+}
+
+GCC_4.1.0 {
+ __divtc3
+ __multc3
+ __powitf2
+
+%ifdef __s390x__
+ __fixtfti
+ __fixunstfti
+ __floattitf
+
+%else
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+%endif
+}
diff --git a/gcc-4.9/libgcc/config/s390/linux-unwind.h b/gcc-4.9/libgcc/config/s390/linux-unwind.h
new file mode 100644
index 000000000..d78754f75
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/linux-unwind.h
@@ -0,0 +1,132 @@
+/* DWARF2 EH unwinding support for S/390 Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#define MD_FALLBACK_FRAME_STATE_FOR s390_fallback_frame_state
+
+static _Unwind_Reason_Code
+s390_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ static const unsigned char dwarf_to_fpr_map[16] =
+ { 0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15 };
+ unsigned char *pc = context->ra;
+ long new_cfa;
+ int i;
+
+ typedef struct
+ {
+ unsigned long psw_mask;
+ unsigned long psw_addr;
+ unsigned long gprs[16];
+ unsigned int acrs[16];
+ unsigned int fpc;
+ unsigned int __pad;
+ double fprs[16];
+ } __attribute__ ((__aligned__ (8))) sigregs_;
+
+ sigregs_ *regs;
+ int *signo;
+
+ /* svc $__NR_sigreturn or svc $__NR_rt_sigreturn */
+ if (pc[0] != 0x0a || (pc[1] != 119 && pc[1] != 173))
+ return _URC_END_OF_STACK;
+
+ /* Legacy frames:
+ old signal mask (8 bytes)
+ pointer to sigregs (8 bytes) - points always to next location
+ sigregs
+ retcode
+ This frame layout was used on kernels < 2.6.9 for non-RT frames,
+ and on kernels < 2.4.13 for RT frames as well. Note that we need
+ to look at RA to detect this layout -- this means that if you use
+ sa_restorer to install a different signal restorer on a legacy
+ kernel, unwinding from signal frames will not work. */
+ if (context->ra == context->cfa + 16 + sizeof (sigregs_))
+ {
+ regs = (sigregs_ *)(context->cfa + 16);
+ signo = NULL;
+ }
+
+ /* New-style RT frame:
+ retcode + alignment (8 bytes)
+ siginfo (128 bytes)
+ ucontext (contains sigregs) */
+ else if (pc[1] == 173 /* __NR_rt_sigreturn */)
+ {
+ struct ucontext_
+ {
+ unsigned long uc_flags;
+ struct ucontext_ *uc_link;
+ unsigned long uc_stack[3];
+ sigregs_ uc_mcontext;
+ } *uc = context->cfa + 8 + 128;
+
+ regs = &uc->uc_mcontext;
+ signo = context->cfa + sizeof(long);
+ }
+
+ /* New-style non-RT frame:
+ old signal mask (8 bytes)
+ pointer to sigregs (followed by signal number) */
+ else
+ {
+ regs = *(sigregs_ **)(context->cfa + 8);
+ signo = (int *)(regs + 1);
+ }
+
+ new_cfa = regs->gprs[15] + 16*sizeof(long) + 32;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset =
+ new_cfa - (long) context->cfa + 16*sizeof(long) + 32;
+
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset =
+ (long)&regs->gprs[i] - new_cfa;
+ }
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[16+i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[16+i].loc.offset =
+ (long)&regs->fprs[dwarf_to_fpr_map[i]] - new_cfa;
+ }
+
+ /* Load return addr from PSW into dummy register 32. */
+
+ fs->regs.reg[32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[32].loc.offset = (long)&regs->psw_addr - new_cfa;
+ fs->retaddr_column = 32;
+ /* SIGILL, SIGFPE and SIGTRAP are delivered with psw_addr
+ after the faulting instruction rather than before it.
+ Don't set FS->signal_frame in that case. */
+ if (!signo || (*signo != 4 && *signo != 5 && *signo != 8))
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
diff --git a/gcc-4.9/libgcc/config/s390/t-crtstuff b/gcc-4.9/libgcc/config/s390/t-crtstuff
new file mode 100644
index 000000000..d738673fe
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/t-crtstuff
@@ -0,0 +1,5 @@
+# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+# because then __FRAME_END__ might not be the last thing in .eh_frame
+# section.
+CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
+CRTSTUFF_T_CFLAGS_S += -fno-asynchronous-unwind-tables
diff --git a/gcc-4.9/libgcc/config/s390/t-linux b/gcc-4.9/libgcc/config/s390/t-linux
new file mode 100644
index 000000000..b7670828d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/t-linux
@@ -0,0 +1,7 @@
+DFP_ENABLE = true
+
+# Override t-slibgcc-elf-ver to export some libgcc symbols with
+# the symbol versions that glibc used.
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/s390/libgcc-glibc.ver
+
+HOST_LIBGCC2_CFLAGS += -mlong-double-128 \ No newline at end of file
diff --git a/gcc-4.9/libgcc/config/s390/tpf-unwind.h b/gcc-4.9/libgcc/config/s390/tpf-unwind.h
new file mode 100644
index 000000000..5fa177b50
--- /dev/null
+++ b/gcc-4.9/libgcc/config/s390/tpf-unwind.h
@@ -0,0 +1,252 @@
+/* DWARF2 EH unwinding support for TPF OS.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+ Contributed by P.J. Darcy (darcypj@us.ibm.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <dlfcn.h>
+
+/* Function Name: __isPATrange
+ Parameters passed into it: address to check
+ Return Value: A 1 if address is in pat code "range", 0 if not
+ Description: This function simply checks to see if the address
+ passed to it is in the CP pat code range. */
+
+#define MIN_PATRANGE 0x10000
+#define MAX_PATRANGE 0x800000
+
+static inline unsigned int
+__isPATrange (void *addr)
+{
+ if (addr > (void *)MIN_PATRANGE && addr < (void *)MAX_PATRANGE)
+ return 1;
+ else
+ return 0;
+}
+
+/* TPF return address offset from start of stack frame. */
+#define TPFRA_OFFSET 168
+
+/* Exceptions macro defined for TPF so that functions without
+ dwarf frame information can be used with exceptions. */
+#define MD_FALLBACK_FRAME_STATE_FOR s390_fallback_frame_state
+
+static _Unwind_Reason_Code
+s390_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned long int regs;
+ unsigned long int new_cfa;
+ int i;
+
+ regs = *((unsigned long int *)
+ (((unsigned long int) context->cfa) - STACK_POINTER_OFFSET));
+
+ /* Are we going through special linkage code? */
+ if (__isPATrange (context->ra))
+ {
+
+ /* Our return register isn't zero for end of stack, so
+ check backward stackpointer to see if it is zero. */
+ if (regs == NULL)
+ return _URC_END_OF_STACK;
+
+ /* No stack frame. */
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset = STACK_POINTER_OFFSET;
+
+ /* All registers remain unchanged ... */
+ for (i = 0; i < 32; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_REG;
+ fs->regs.reg[i].loc.reg = i;
+ }
+
+ /* ... except for %r14, which is stored at CFA-112
+ and used as return address. */
+ fs->regs.reg[14].how = REG_SAVED_OFFSET;
+ fs->regs.reg[14].loc.offset = TPFRA_OFFSET - STACK_POINTER_OFFSET;
+ fs->retaddr_column = 14;
+
+ return _URC_NO_REASON;
+ }
+
+ regs = *((unsigned long int *)
+ (((unsigned long int) context->cfa) - STACK_POINTER_OFFSET));
+ new_cfa = regs + STACK_POINTER_OFFSET;
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset = new_cfa -
+ (unsigned long int) context->cfa + STACK_POINTER_OFFSET;
+
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset = regs + i*8 - new_cfa;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ fs->regs.reg[16 + i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[16 + i].loc.offset = regs + 16*8 + i*8 - new_cfa;
+ }
+
+ fs->retaddr_column = 14;
+
+ return _URC_NO_REASON;
+}
+
+/* Function Name: __tpf_eh_return
+ Parameters passed into it: Destination address to jump to.
+ Return Value: Converted Destination address if a Pat Stub exists.
+ Description: This function swaps the unwinding return address
+ with the cp stub code. The original target return address is
+ then stored into the tpf return address field. The cp stub
+ code is searched for by climbing back up the stack and
+ comparing the tpf stored return address object address to
+ that of the targets object address. */
+
+#define CURRENT_STACK_PTR() \
+ ({ register unsigned long int *stack_ptr asm ("%r15"); stack_ptr; })
+
+#define PREVIOUS_STACK_PTR() \
+ ((unsigned long int *)(*(CURRENT_STACK_PTR())))
+
+#define RA_OFFSET 112
+#define R15_OFFSET 120
+#define TPFAREA_OFFSET 160
+#define TPFAREA_SIZE STACK_POINTER_OFFSET-TPFAREA_OFFSET
+#define INVALID_RETURN 0
+
+void * __tpf_eh_return (void *target);
+
+void *
+__tpf_eh_return (void *target)
+{
+ Dl_info targetcodeInfo, currentcodeInfo;
+ int retval;
+ void *current, *stackptr, *destination_frame;
+ unsigned long int shifter, is_a_stub;
+
+ is_a_stub = 0;
+
+ /* Get code info for target return's address. */
+ retval = dladdr (target, &targetcodeInfo);
+
+ /* Ensure the code info is valid (for target). */
+ if (retval != INVALID_RETURN)
+ {
+
+ /* Get the stack pointer of the stack frame to be modified by
+ the exception unwinder. So that we can begin our climb
+ there. */
+ stackptr = (void *) *((unsigned long int *) (*(PREVIOUS_STACK_PTR())));
+
+ /* Begin looping through stack frames. Stop if invalid
+ code information is retrieved or if a match between the
+ current stack frame iteration shared object's address
+ matches that of the target, calculated above. */
+ do
+ {
+ /* Get return address based on our stackptr iterator. */
+ current = (void *) *((unsigned long int *)
+ (stackptr+RA_OFFSET));
+
+ /* Is it a Pat Stub? */
+ if (__isPATrange (current))
+ {
+ /* Yes it was, get real return address
+ in TPF stack area. */
+ current = (void *) *((unsigned long int *)
+ (stackptr+TPFRA_OFFSET));
+ is_a_stub = 1;
+ }
+
+ /* Get codeinfo on RA so that we can figure out
+ the module address. */
+ retval = dladdr (current, &currentcodeInfo);
+
+ /* Check that codeinfo for current stack frame is valid.
+ Then compare the module address of current stack frame
+ to target stack frame to determine if we have the pat
+ stub address we want. Also ensure we are dealing
+ with a module crossing, stub return address. */
+ if (is_a_stub && retval != INVALID_RETURN
+ && targetcodeInfo.dli_fbase == currentcodeInfo.dli_fbase)
+ {
+ /* Yes! They are in the same module.
+ Force copy of TPF private stack area to
+ destination stack frame TPF private area. */
+ destination_frame = (void *) *((unsigned long int *)
+ (*PREVIOUS_STACK_PTR() + R15_OFFSET));
+
+ /* Copy TPF linkage area from current frame to
+ destination frame. */
+ memcpy((void *) (destination_frame + TPFAREA_OFFSET),
+ (void *) (stackptr + TPFAREA_OFFSET), TPFAREA_SIZE);
+
+ /* Now overlay the
+ real target address into the TPF stack area of
+ the target frame we are jumping to. */
+ *((unsigned long int *) (destination_frame +
+ TPFRA_OFFSET)) = (unsigned long int) target;
+
+ /* Before returning the desired pat stub address to
+ the exception handling unwinder so that it can
+ actually do the "leap" shift out the low order
+ bit designated to determine if we are in 64BIT mode.
+ This is necessary for CTOA stubs.
+ Otherwise we leap one byte past where we want to
+ go to in the TPF pat stub linkage code. */
+ shifter = *((unsigned long int *)
+ (stackptr + RA_OFFSET));
+
+ shifter &= ~1ul;
+
+ /* Store Pat Stub Address in destination Stack Frame. */
+ *((unsigned long int *) (destination_frame +
+ RA_OFFSET)) = shifter;
+
+ /* Re-adjust pat stub address to go to correct place
+ in linkage. */
+ shifter = shifter - 4;
+
+ return (void *) shifter;
+ }
+
+ /* Desired module pat stub not found ...
+ Bump stack frame iterator. */
+ stackptr = (void *) *(unsigned long int *) stackptr;
+
+ is_a_stub = 0;
+
+ } while (stackptr && retval != INVALID_RETURN
+ && targetcodeInfo.dli_fbase != currentcodeInfo.dli_fbase);
+ }
+
+ /* No pat stub found, could be a problem? Simply return unmodified
+ target address. */
+ return target;
+}
+
diff --git a/gcc-4.9/libgcc/config/score/crti.S b/gcc-4.9/libgcc/config/score/crti.S
new file mode 100644
index 000000000..e007a5e70
--- /dev/null
+++ b/gcc-4.9/libgcc/config/score/crti.S
@@ -0,0 +1,131 @@
+# crti.S for Sunplus S+CORE
+#
+# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file makes a stack frame for the contents of the .init and
+# .fini sections.
+.extern _stack
+
+#ifndef __pic__
+.section .init, "ax", @progbits
+ .weak _start
+ .ent _start
+ .frame r0, 0, r3, 0
+ .mask 0x00000000, 0
+_start:
+ la r28, _gp
+ la r8, __bss_start
+ la r9, __bss_end__
+ sub! r9, r8
+ srli! r9, 2
+ addi r9, -1
+ mtsr r9, sr0
+ li r9, 0
+1:
+ sw r9, [r8]+, 4
+ bcnz 1b
+ la r0, _stack
+ jl _init
+ la r4, _end
+ jl _init_argv
+ jl exit
+ .end _start
+
+ .weak _init_argv
+ .ent
+ .frame r0, 0, r3, 0
+ .mask 0x00000000, 0
+_init_argv:
+ ldiu! r4, 0
+ ldiu! r5, 0
+ j main
+ .end _init_argv
+
+ .globl _init
+ .type _init, %function
+_init:
+ addi r0, -32
+ sw r3, [r0, 20]
+
+ .section .fini, "ax", @progbits
+ .globl _fini
+ .type _fini, %function
+_fini:
+ addi r0, -32
+ sw r3, [r0, 20]
+#else
+.section .init, "ax", @progbits
+ .set pic
+ .weak _start
+ .ent _start
+ .frame r0, 0, r3, 0
+ .mask 0x00000000, 0
+_start:
+ mv r29, r3
+ bl 0f
+0:
+ .cpload r3
+ mv r3, r29
+ la r8, __bss_start
+ la r9, __bss_end__
+ sub! r9, r8
+ srli! r9, 2
+ addi r9, -1
+ mtsr r9, sr0
+ li r9, 0
+1:
+ sw r9, [r8]+, 4
+ bcnz 1b
+ la r0, _stack
+ bl _init
+ la r4, _end
+ la r29, _init_argv
+ brl r29
+ la r29, exit
+ brl r29
+ .end _start
+
+ .weak _init_argv
+ .ent _init_argv
+ .frame r0, 0, r3, 0
+ .mask 0x00000000, 0
+_init_argv:
+ ldiu! r4, 0
+ ldiu! r5, 0
+ la r29, main
+ brl r29
+ .end _init_argv
+
+ .globl _init
+ .type _init, %function
+_init:
+ addi r0, -32
+ sw r3, [r0, 20]
+
+ .section .fini, "ax", @progbits
+ .globl _fini
+ .type _fini, %function
+_fini:
+ addi r0, -32
+ sw r3, [r0, 20]
+
+#endif
diff --git a/gcc-4.9/libgcc/config/score/crtn.S b/gcc-4.9/libgcc/config/score/crtn.S
new file mode 100644
index 000000000..11a5b05b7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/score/crtn.S
@@ -0,0 +1,50 @@
+# crtn.S for Sunplus S+CORE
+
+# Copyright (C) 2005-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option) any
+# later version.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file makes sure that the .init and .fini sections do in
+# fact return.
+
+#ifndef __pic__
+.section .init, "ax", @progbits
+ lw r3, [r0, 20]
+ addi r0, 32
+ br r3
+
+.section .fini, "ax", @progbits
+ lw r3, [r0, 20]
+ addi r0, 32
+ br r3
+#else
+ .set pic
+.section .init, "ax", @progbits
+ lw r3, [r0, 20]
+ addi r0, 32
+ br r3
+
+ .set pic
+.section .fini, "ax", @progbits
+ lw r3, [r0, 20]
+ addi r0, 32
+ br r3
+#endif
+
diff --git a/gcc-4.9/libgcc/config/score/sfp-machine.h b/gcc-4.9/libgcc/config/score/sfp-machine.h
new file mode 100644
index 000000000..6394de30b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/score/sfp-machine.h
@@ -0,0 +1,61 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S 0
+#define _FP_NANSIGN_D 0
+#define _FP_NANSIGN_Q 0
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+/* Someone please check this. */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+/* Not checked. */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+# define __BYTE_ORDER __BIG_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/gcc-4.9/libgcc/config/sh/crt1.S b/gcc-4.9/libgcc/config/sh/crt1.S
new file mode 100644
index 000000000..d8b929549
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/crt1.S
@@ -0,0 +1,1368 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ This file was pretty much copied from newlib.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+#ifdef MMU_SUPPORT
+ /* Section used for exception/timer interrupt stack area */
+ .section .data.vbr.stack,"aw"
+ .align 4
+ .global __ST_VBR
+__ST_VBR:
+ .zero 1024 * 2 /* ; 2k for VBR handlers */
+/* Label at the highest stack address where the stack grows from */
+__timer_stack:
+#endif /* MMU_SUPPORT */
+
+ /* ;----------------------------------------
+ Normal newlib crt1.S */
+
+#ifdef __SH5__
+ .section .data,"aw"
+ .global ___data
+___data:
+
+ .section .rodata,"a"
+ .global ___rodata
+___rodata:
+
+#define ICCR_BASE 0x01600000
+#define OCCR_BASE 0x01e00000
+#define MMUIR_BASE 0x00000000
+#define MMUDR_BASE 0x00800000
+
+#define PTE_ENABLED 1
+#define PTE_DISABLED 0
+
+#define PTE_SHARED (1 << 1)
+#define PTE_NOT_SHARED 0
+
+#define PTE_CB_UNCACHEABLE 0
+#define PTE_CB_DEVICE 1
+#define PTE_CB_CACHEABLE_WB 2
+#define PTE_CB_CACHEABLE_WT 3
+
+#define PTE_SZ_4KB (0 << 3)
+#define PTE_SZ_64KB (1 << 3)
+#define PTE_SZ_1MB (2 << 3)
+#define PTE_SZ_512MB (3 << 3)
+
+#define PTE_PRR (1 << 6)
+#define PTE_PRX (1 << 7)
+#define PTE_PRW (1 << 8)
+#define PTE_PRU (1 << 9)
+
+#define SR_MMU_BIT 31
+#define SR_BL_BIT 28
+
+#define ALIGN_4KB (0xfff)
+#define ALIGN_1MB (0xfffff)
+#define ALIGN_512MB (0x1fffffff)
+
+#define DYNACON_BASE 0x0f000000
+#define DM_CB_DLINK_BASE 0x0c000000
+#define DM_DB_DLINK_BASE 0x0b000000
+
+#define FEMI_AREA_0 0x00000000
+#define FEMI_AREA_1 0x04000000
+#define FEMI_AREA_2 0x05000000
+#define FEMI_AREA_3 0x06000000
+#define FEMI_AREA_4 0x07000000
+#define FEMI_CB 0x08000000
+
+#define EMI_BASE 0X80000000
+
+#define DMA_BASE 0X0e000000
+
+#define CPU_BASE 0X0d000000
+
+#define PERIPH_BASE 0X09000000
+#define DMAC_BASE 0x0e000000
+#define INTC_BASE 0x0a000000
+#define CPRC_BASE 0x0a010000
+#define TMU_BASE 0x0a020000
+#define SCIF_BASE 0x0a030000
+#define RTC_BASE 0x0a040000
+
+
+
+#define LOAD_CONST32(val, reg) \
+ movi ((val) >> 16) & 65535, reg; \
+ shori (val) & 65535, reg
+
+#define LOAD_PTEH_VAL(sym, align, bits, scratch_reg, reg) \
+ LOAD_ADDR (sym, reg); \
+ LOAD_CONST32 ((align), scratch_reg); \
+ andc reg, scratch_reg, reg; \
+ LOAD_CONST32 ((bits), scratch_reg); \
+ or reg, scratch_reg, reg
+
+#define LOAD_PTEL_VAL(sym, align, bits, scratch_reg, reg) \
+ LOAD_ADDR (sym, reg); \
+ LOAD_CONST32 ((align), scratch_reg); \
+ andc reg, scratch_reg, reg; \
+ LOAD_CONST32 ((bits), scratch_reg); \
+ or reg, scratch_reg, reg
+
+#define SET_PTE(pte_addr_reg, pteh_val_reg, ptel_val_reg) \
+ putcfg pte_addr_reg, 0, r63; \
+ putcfg pte_addr_reg, 1, ptel_val_reg; \
+ putcfg pte_addr_reg, 0, pteh_val_reg
+
+#if __SH5__ == 64
+ .section .text,"ax"
+#define LOAD_ADDR(sym, reg) \
+ movi (sym >> 48) & 65535, reg; \
+ shori (sym >> 32) & 65535, reg; \
+ shori (sym >> 16) & 65535, reg; \
+ shori sym & 65535, reg
+#else
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+#define LOAD_ADDR(sym, reg) \
+ movi (sym >> 16) & 65535, reg; \
+ shori sym & 65535, reg
+#endif
+ .global start
+start:
+ LOAD_ADDR (_stack, r15)
+
+#ifdef MMU_SUPPORT
+ ! Set up the VM using the MMU and caches
+
+ ! .vm_ep is first instruction to execute
+ ! after VM initialization
+ pt/l .vm_ep, tr1
+
+ ! Configure instruction cache (ICCR)
+ movi 3, r2
+ movi 0, r3
+ LOAD_ADDR (ICCR_BASE, r1)
+ putcfg r1, 0, r2
+ putcfg r1, 1, r3
+
+ ! movi 7, r2 ! write through
+ ! Configure operand cache (OCCR)
+ LOAD_ADDR (OCCR_BASE, r1)
+ putcfg r1, 0, r2
+ putcfg r1, 1, r3
+
+ ! Disable all PTE translations
+ LOAD_ADDR (MMUIR_BASE, r1)
+ LOAD_ADDR (MMUDR_BASE, r2)
+ movi 64, r3
+ pt/l .disable_ptes_loop, tr0
+.disable_ptes_loop:
+ putcfg r1, 0, r63
+ putcfg r2, 0, r63
+ addi r1, 16, r1
+ addi r2, 16, r2
+ addi r3, -1, r3
+ bgt r3, r63, tr0
+
+ LOAD_ADDR (MMUIR_BASE, r1)
+
+ ! FEMI instruction mappings
+ ! Area 0 - 1Mb cacheable at 0x00000000
+ ! Area 1 - None
+ ! Area 2 - 1Mb cacheable at 0x05000000
+ ! - 1Mb cacheable at 0x05100000
+ ! Area 3 - None
+ ! Area 4 - None
+
+ ! Map a 1Mb page for instructions at 0x00000000
+ LOAD_PTEH_VAL (FEMI_AREA_0, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (FEMI_AREA_0, ALIGN_1MB, PTE_CB_CACHEABLE_WB | PTE_SZ_1MB | PTE_PRX | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1Mb page for instructions at 0x05000000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (FEMI_AREA_2, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (FEMI_AREA_2, ALIGN_1MB, PTE_CB_CACHEABLE_WB | PTE_SZ_1MB | PTE_PRX | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1Mb page for instructions at 0x05100000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((FEMI_AREA_2+0x100000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((FEMI_AREA_2+0x100000), ALIGN_1MB, PTE_CB_CACHEABLE_WB | PTE_SZ_1MB | PTE_PRX | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 512M page for instructions at EMI base
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (EMI_BASE, ALIGN_512MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (EMI_BASE, ALIGN_512MB, PTE_CB_CACHEABLE_WB | PTE_SZ_512MB | PTE_PRX | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for instructions at DM_DB_DLINK_BASE
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (DM_DB_DLINK_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (DM_DB_DLINK_BASE, ALIGN_4KB, PTE_CB_CACHEABLE_WB | PTE_SZ_4KB | PTE_PRX | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ LOAD_ADDR (MMUDR_BASE, r1)
+
+ ! FEMI data mappings
+ ! Area 0 - 1Mb cacheable at 0x00000000
+ ! Area 1 - 1Mb device at 0x04000000
+ ! Area 2 - 1Mb cacheable at 0x05000000
+ ! - 1Mb cacheable at 0x05100000
+ ! Area 3 - None
+ ! Area 4 - None
+ ! CB - 1Mb device at 0x08000000
+
+ ! Map a 1Mb page for data at 0x00000000
+ LOAD_PTEH_VAL (FEMI_AREA_0, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (FEMI_AREA_0, ALIGN_1MB, PTE_CB_CACHEABLE_WB | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1Mb page for data at 0x04000000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (FEMI_AREA_1, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (FEMI_AREA_1, ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1Mb page for data at 0x05000000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (FEMI_AREA_2, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (FEMI_AREA_2, ALIGN_1MB, PTE_CB_CACHEABLE_WB | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1Mb page for data at 0x05100000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((FEMI_AREA_2+0x100000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((FEMI_AREA_2+0x100000), ALIGN_1MB, PTE_CB_CACHEABLE_WB | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for registers at 0x08000000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (FEMI_CB, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (FEMI_CB, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 512M page for data at EMI
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (EMI_BASE, ALIGN_512MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (EMI_BASE, ALIGN_512MB, PTE_CB_CACHEABLE_WB | PTE_SZ_512MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for DYNACON at DYNACON_BASE
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (DYNACON_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (DYNACON_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for instructions at DM_DB_DLINK_BASE
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (DM_DB_DLINK_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (DM_DB_DLINK_BASE, ALIGN_4KB, PTE_CB_CACHEABLE_WB | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for data at DM_DB_DLINK_BASE+0x1000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((DM_DB_DLINK_BASE+0x1000), ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((DM_DB_DLINK_BASE+0x1000), ALIGN_4KB, PTE_CB_UNCACHEABLE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for stack DM_DB_DLINK_BASE+0x2000
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((DM_DB_DLINK_BASE+0x2000), ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((DM_DB_DLINK_BASE+0x2000), ALIGN_4KB, PTE_CB_CACHEABLE_WB | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1M page for DM_CB_BASE2 at DM_CB_DLINK
+ ! 0x0c000000 - 0x0c0fffff
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (DM_CB_DLINK_BASE, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (DM_CB_DLINK_BASE, ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1M page for DM_CB_BASE2 at DM_CB_DLINK
+ ! 0x0c100000 - 0x0c1fffff
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((DM_CB_DLINK_BASE+0x100000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((DM_CB_DLINK_BASE+0x100000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1M page for DM_CB_BASE2 at DM_CB_DLINK
+ ! 0x0c200000 - 0x0c2fffff
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((DM_CB_DLINK_BASE+0x200000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((DM_CB_DLINK_BASE+0x200000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1M page for DM_CB_BASE2 at DM_CB_DLINK
+ ! 0x0c400000 - 0x0c4fffff
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((DM_CB_DLINK_BASE+0x400000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((DM_CB_DLINK_BASE+0x400000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 1M page for DM_CB_BASE2 at DM_CB_DLINK
+ ! 0x0c800000 - 0x0c8fffff
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((DM_CB_DLINK_BASE+0x800000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((DM_CB_DLINK_BASE+0x800000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map a 4K page for DMA control registers
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (DMA_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (DMA_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map lots of 4K pages for peripherals
+
+ ! /* peripheral */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (PERIPH_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (PERIPH_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ ! /* dmac */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (DMAC_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (DMAC_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ ! /* intc */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (INTC_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (INTC_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ ! /* rtc */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (RTC_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (RTC_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ ! /* dmac */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (TMU_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (TMU_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ ! /* scif */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (SCIF_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (SCIF_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ ! /* cprc */
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (CPRC_BASE, ALIGN_4KB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (CPRC_BASE, ALIGN_4KB, PTE_CB_DEVICE | PTE_SZ_4KB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Map CPU WPC registers
+ addi r1, 16, r1
+ LOAD_PTEH_VAL (CPU_BASE, ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL (CPU_BASE, ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+ addi r1, 16, r1
+
+ LOAD_PTEH_VAL ((CPU_BASE+0x100000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((CPU_BASE+0x100000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((CPU_BASE+0x200000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((CPU_BASE+0x200000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ addi r1, 16, r1
+ LOAD_PTEH_VAL ((CPU_BASE+0x400000), ALIGN_1MB, PTE_ENABLED | PTE_NOT_SHARED, r25, r2)
+ LOAD_PTEL_VAL ((CPU_BASE+0x400000), ALIGN_1MB, PTE_CB_DEVICE | PTE_SZ_1MB | PTE_PRR | PTE_PRW | PTE_PRU, r25, r3)
+ SET_PTE (r1, r2, r3)
+
+ ! Switch over to virtual addressing and enabled cache
+ getcon sr, r1
+ movi 1, r2
+ shlli r2, SR_BL_BIT, r2
+ or r1, r2, r1
+ putcon r1, ssr
+ getcon sr, r1
+ movi 1, r2
+ shlli r2, SR_MMU_BIT, r2
+ or r1, r2, r1
+ putcon r1, ssr
+ gettr tr1, r1
+ putcon r1, spc
+ synco
+ rte
+
+ ! VM entry point. From now on, we are in VM mode.
+.vm_ep:
+
+ ! Install the trap handler, by seeding vbr with the
+ ! correct value, and by assigning sr.bl = 0.
+
+ LOAD_ADDR (vbr_start, r1)
+ putcon r1, vbr
+ movi ~(1<<28), r1
+ getcon sr, r2
+ and r1, r2, r2
+ putcon r2, sr
+#endif /* MMU_SUPPORT */
+
+ pt/l .Lzero_bss_loop, tr0
+ pt/l _init, tr5
+ pt/l ___setup_argv_and_call_main, tr6
+ pt/l _exit, tr7
+
+ ! zero out bss
+ LOAD_ADDR (_edata, r0)
+ LOAD_ADDR (_end, r1)
+.Lzero_bss_loop:
+ stx.q r0, r63, r63
+ addi r0, 8, r0
+ bgt/l r1, r0, tr0
+
+ LOAD_ADDR (___data, r26)
+ LOAD_ADDR (___rodata, r27)
+
+#ifdef __SH_FPU_ANY__
+ getcon sr, r0
+ ! enable the FP unit, by resetting SR.FD
+ ! also zero out SR.FR, SR.SZ and SR.PR, as mandated by the ABI
+ movi 0, r1
+ shori 0xf000, r1
+ andc r0, r1, r0
+ putcon r0, sr
+#if __SH5__ == 32
+ pt/l ___set_fpscr, tr0
+ movi 0, r4
+ blink tr0, r18
+#endif
+#endif
+
+ ! arrange for exit to call fini
+ pt/l _atexit, tr1
+ LOAD_ADDR (_fini, r2)
+ blink tr1, r18
+
+ ! call init
+ blink tr5, r18
+
+ ! call the mainline
+ blink tr6, r18
+
+ ! call exit
+ blink tr7, r18
+ ! We should never return from _exit but in case we do we would enter the
+ ! the following tight loop. This avoids executing any data that might follow.
+limbo:
+ pt/l limbo, tr0
+ blink tr0, r63
+
+#ifdef MMU_SUPPORT
+ ! All these traps are handled in the same place.
+ .balign 256
+vbr_start:
+ pt/l handler, tr0 ! tr0 trashed.
+ blink tr0, r63
+ .balign 256
+vbr_100:
+ pt/l handler, tr0 ! tr0 trashed.
+ blink tr0, r63
+vbr_100_end:
+ .balign 256
+vbr_200:
+ pt/l handler, tr0 ! tr0 trashed.
+ blink tr0, r63
+ .balign 256
+vbr_300:
+ pt/l handler, tr0 ! tr0 trashed.
+ blink tr0, r63
+ .balign 256
+vbr_400: ! Should be at vbr+0x400
+handler:
+ /* If the trap handler is there call it */
+ LOAD_ADDR (__superh_trap_handler, r2)
+ pta chandler,tr2
+ beq r2, r63, tr2 /* If zero, ie not present branch around to chandler */
+ /* Now call the trap handler with as much of the context unchanged as possible.
+ Move trapping address into R18 to make it look like the trap point */
+ getcon spc, r18
+ pt/l __superh_trap_handler, tr0
+ blink tr0, r7
+chandler:
+ getcon spc, r62
+ getcon expevt, r2
+ pt/l _exit, tr0
+ blink tr0, r63
+
+ /* Simulated trap handler */
+ .section .text..SHmedia32,"ax"
+gcc2_compiled.:
+ .section .debug_abbrev
+.Ldebug_abbrev0:
+ .section .text..SHmedia32
+.Ltext0:
+ .section .debug_info
+.Ldebug_info0:
+ .section .debug_line
+.Ldebug_line0:
+ .section .text..SHmedia32,"ax"
+ .align 5
+ .global __superh_trap_handler
+ .type __superh_trap_handler,@function
+__superh_trap_handler:
+.LFB1:
+ ptabs r18, tr0
+ addi.l r15, -8, r15
+ st.l r15, 4, r14
+ addi.l r15, -8, r15
+ add.l r15, r63, r14
+ st.l r14, 0, r2
+ ptabs r7, tr0
+ addi.l r14, 8, r14
+ add.l r14, r63, r15
+ ld.l r15, 4, r14
+ addi.l r15, 8, r15
+ blink tr0, r63
+.LFE1:
+.Lfe1:
+ .size __superh_trap_handler,.Lfe1-__superh_trap_handler
+
+ .section .text..SHmedia32
+.Letext0:
+
+ .section .debug_info
+ .ualong 0xa7
+ .uaword 0x2
+ .ualong .Ldebug_abbrev0
+ .byte 0x4
+ .byte 0x1
+ .ualong .Ldebug_line0
+ .ualong .Letext0
+ .ualong .Ltext0
+ .string "trap_handler.c"
+
+ .string "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+
+ .string "GNU C 2.97-sh5-010522"
+
+ .byte 0x1
+ .byte 0x2
+ .ualong 0x9a
+ .byte 0x1
+ .string "_superh_trap_handler"
+
+ .byte 0x1
+ .byte 0x2
+ .byte 0x1
+ .ualong .LFB1
+ .ualong .LFE1
+ .byte 0x1
+ .byte 0x5e
+ .byte 0x3
+ .string "trap_reason"
+
+ .byte 0x1
+ .byte 0x1
+ .ualong 0x9a
+ .byte 0x2
+ .byte 0x91
+ .byte 0x0
+ .byte 0x0
+ .byte 0x4
+ .string "unsigned int"
+
+ .byte 0x4
+ .byte 0x7
+ .byte 0x0
+
+ .section .debug_abbrev
+ .byte 0x1
+ .byte 0x11
+ .byte 0x1
+ .byte 0x10
+ .byte 0x6
+ .byte 0x12
+ .byte 0x1
+ .byte 0x11
+ .byte 0x1
+ .byte 0x3
+ .byte 0x8
+ .byte 0x1b
+ .byte 0x8
+ .byte 0x25
+ .byte 0x8
+ .byte 0x13
+ .byte 0xb
+ .byte 0,0
+ .byte 0x2
+ .byte 0x2e
+ .byte 0x1
+ .byte 0x1
+ .byte 0x13
+ .byte 0x3f
+ .byte 0xc
+ .byte 0x3
+ .byte 0x8
+ .byte 0x3a
+ .byte 0xb
+ .byte 0x3b
+ .byte 0xb
+ .byte 0x27
+ .byte 0xc
+ .byte 0x11
+ .byte 0x1
+ .byte 0x12
+ .byte 0x1
+ .byte 0x40
+ .byte 0xa
+ .byte 0,0
+ .byte 0x3
+ .byte 0x5
+ .byte 0x0
+ .byte 0x3
+ .byte 0x8
+ .byte 0x3a
+ .byte 0xb
+ .byte 0x3b
+ .byte 0xb
+ .byte 0x49
+ .byte 0x13
+ .byte 0x2
+ .byte 0xa
+ .byte 0,0
+ .byte 0x4
+ .byte 0x24
+ .byte 0x0
+ .byte 0x3
+ .byte 0x8
+ .byte 0xb
+ .byte 0xb
+ .byte 0x3e
+ .byte 0xb
+ .byte 0,0
+ .byte 0
+
+ .section .debug_pubnames
+ .ualong 0x27
+ .uaword 0x2
+ .ualong .Ldebug_info0
+ .ualong 0xab
+ .ualong 0x5b
+ .string "_superh_trap_handler"
+
+ .ualong 0x0
+
+ .section .debug_aranges
+ .ualong 0x1c
+ .uaword 0x2
+ .ualong .Ldebug_info0
+ .byte 0x4
+ .byte 0x0
+ .uaword 0x0,0
+ .ualong .Ltext0
+ .ualong .Letext0-.Ltext0
+ .ualong 0x0
+ .ualong 0x0
+ .ident "GCC: (GNU) 2.97-sh5-010522"
+#endif /* MMU_SUPPORT */
+#else /* ! __SH5__ */
+
+ ! make a place to keep any previous value of the vbr register
+ ! this will only have a value if it has been set by redboot (for example)
+ .section .bss
+old_vbr:
+ .long 0
+#ifdef PROFILE
+profiling_enabled:
+ .long 0
+#endif
+
+
+ .section .text
+ .global start
+ .import ___rtos_profiler_start_timer
+ .weak ___rtos_profiler_start_timer
+start:
+ mov.l stack_k,r15
+
+#if defined (__SH3__) || (defined (__SH_FPU_ANY__) && ! defined (__SH2E__) && ! defined (__SH2A__)) || defined (__SH4_NOFPU__)
+#define VBR_SETUP
+ ! before zeroing the bss ...
+ ! if the vbr is already set to vbr_start then the program has been restarted
+ ! (i.e. it is not the first time the program has been run since reset)
+ ! reset the vbr to its old value before old_vbr (in bss) is wiped
+ ! this ensures that the later code does not create a circular vbr chain
+ stc vbr, r1
+ mov.l vbr_start_k, r2
+ cmp/eq r1, r2
+ bf 0f
+ ! reset the old vbr value
+ mov.l old_vbr_k, r1
+ mov.l @r1, r2
+ ldc r2, vbr
+0:
+#endif /* VBR_SETUP */
+
+ ! zero out bss
+ mov.l edata_k,r0
+ mov.l end_k,r1
+ mov #0,r2
+start_l:
+ mov.l r2,@r0
+ add #4,r0
+ cmp/ge r0,r1
+ bt start_l
+
+#if defined (__SH_FPU_ANY__)
+ mov.l set_fpscr_k, r1
+ mov #4,r4
+ jsr @r1
+ shll16 r4 ! Set DN bit (flush denormal inputs to zero)
+ lds r3,fpscr ! Switch to default precision
+#endif /* defined (__SH_FPU_ANY__) */
+
+#ifdef VBR_SETUP
+ ! save the existing contents of the vbr
+ ! there will only be a prior value when using something like redboot
+ ! otherwise it will be zero
+ stc vbr, r1
+ mov.l old_vbr_k, r2
+ mov.l r1, @r2
+ ! setup vbr
+ mov.l vbr_start_k, r1
+ ldc r1,vbr
+#endif /* VBR_SETUP */
+
+ ! if an rtos is exporting a timer start fn,
+ ! then pick up an SR which does not enable ints
+ ! (the rtos will take care of this)
+ mov.l rtos_start_fn, r0
+ mov.l sr_initial_bare, r1
+ tst r0, r0
+ bt set_sr
+
+ mov.l sr_initial_rtos, r1
+
+set_sr:
+ ! Set status register (sr)
+ ldc r1, sr
+
+ ! arrange for exit to call fini
+ mov.l atexit_k,r0
+ mov.l fini_k,r4
+ jsr @r0
+ nop
+
+#ifdef PROFILE
+ ! arrange for exit to call _mcleanup (via stop_profiling)
+ mova stop_profiling,r0
+ mov.l atexit_k,r1
+ jsr @r1
+ mov r0, r4
+
+ ! Call profiler startup code
+ mov.l monstartup_k, r0
+ mov.l start_k, r4
+ mov.l etext_k, r5
+ jsr @r0
+ nop
+
+ ! enable profiling trap
+ ! until now any trap 33s will have been ignored
+ ! This means that all library functions called before this point
+ ! (directly or indirectly) may have the profiling trap at the start.
+ ! Therefore, only mcount itself may not have the extra header.
+ mov.l profiling_enabled_k2, r0
+ mov #1, r1
+ mov.l r1, @r0
+#endif /* PROFILE */
+
+ ! call init
+ mov.l init_k,r0
+ jsr @r0
+ nop
+
+ ! call the mainline
+ mov.l main_k,r0
+ jsr @r0
+ nop
+
+ ! call exit
+ mov r0,r4
+ mov.l exit_k,r0
+ jsr @r0
+ nop
+
+ .balign 4
+#ifdef PROFILE
+stop_profiling:
+ # stop mcount counting
+ mov.l profiling_enabled_k2, r0
+ mov #0, r1
+ mov.l r1, @r0
+
+ # call mcleanup
+ mov.l mcleanup_k, r0
+ jmp @r0
+ nop
+
+ .balign 4
+mcleanup_k:
+ .long __mcleanup
+monstartup_k:
+ .long ___monstartup
+profiling_enabled_k2:
+ .long profiling_enabled
+start_k:
+ .long _start
+etext_k:
+ .long __etext
+#endif /* PROFILE */
+
+ .align 2
+#if defined (__SH_FPU_ANY__)
+set_fpscr_k:
+ .long ___set_fpscr
+#endif /* defined (__SH_FPU_ANY__) */
+
+stack_k:
+ .long _stack
+edata_k:
+ .long _edata
+end_k:
+ .long _end
+main_k:
+ .long ___setup_argv_and_call_main
+exit_k:
+ .long _exit
+atexit_k:
+ .long _atexit
+init_k:
+ .long _init
+fini_k:
+ .long _fini
+#ifdef VBR_SETUP
+old_vbr_k:
+ .long old_vbr
+vbr_start_k:
+ .long vbr_start
+#endif /* VBR_SETUP */
+
+sr_initial_rtos:
+ ! Privileged mode RB 1 BL 0. Keep BL 0 to allow default trap handlers to work.
+ ! Whether profiling or not, keep interrupts masked,
+ ! the RTOS will enable these if required.
+ .long 0x600000f1
+
+rtos_start_fn:
+ .long ___rtos_profiler_start_timer
+
+#ifdef PROFILE
+sr_initial_bare:
+ ! Privileged mode RB 1 BL 0. Keep BL 0 to allow default trap handlers to work.
+ ! For bare machine, we need to enable interrupts to get profiling working
+ .long 0x60000001
+#else
+
+sr_initial_bare:
+ ! Privileged mode RB 1 BL 0. Keep BL 0 to allow default trap handlers to work.
+ ! Keep interrupts disabled - the application will enable as required.
+ .long 0x600000f1
+#endif
+
+ ! supplied for backward compatibility only, in case of linking
+ ! code whose main() was compiled with an older version of GCC.
+ .global ___main
+___main:
+ rts
+ nop
+#ifdef VBR_SETUP
+! Exception handlers
+ .section .text.vbr, "ax"
+vbr_start:
+
+ .org 0x100
+vbr_100:
+#ifdef PROFILE
+ ! Note on register usage.
+ ! we use r0..r3 as scratch in this code. If we are here due to a trapa for profiling
+ ! then this is OK as we are just before executing any function code.
+ ! The other r4..r7 we save explicityl on the stack
+ ! Remaining registers are saved by normal ABI conventions and we assert we do not
+ ! use floating point registers.
+ mov.l expevt_k1, r1
+ mov.l @r1, r1
+ mov.l event_mask, r0
+ and r0,r1
+ mov.l trapcode_k, r2
+ cmp/eq r1,r2
+ bt 1f
+ bra handler_100 ! if not a trapa, go to default handler
+ nop
+1:
+ mov.l trapa_k, r0
+ mov.l @r0, r0
+ shlr2 r0 ! trapa code is shifted by 2.
+ cmp/eq #33, r0
+ bt 2f
+ bra handler_100
+ nop
+2:
+
+ ! If here then it looks like we have trap #33
+ ! Now we need to call mcount with the following convention
+ ! Save and restore r4..r7
+ mov.l r4,@-r15
+ mov.l r5,@-r15
+ mov.l r6,@-r15
+ mov.l r7,@-r15
+ sts.l pr,@-r15
+
+ ! r4 is frompc.
+ ! r5 is selfpc
+ ! r0 is the branch back address.
+ ! The code sequence emitted by gcc for the profiling trap is
+ ! .align 2
+ ! trapa #33
+ ! .align 2
+ ! .long lab Where lab is planted by the compiler. This is the address
+ ! of a datum that needs to be incremented.
+ sts pr, r4 ! frompc
+ stc spc, r5 ! selfpc
+ mov #2, r2
+ not r2, r2 ! pattern to align to 4
+ and r2, r5 ! r5 now has aligned address
+! add #4, r5 ! r5 now has address of address
+ mov r5, r2 ! Remember it.
+! mov.l @r5, r5 ! r5 has value of lable (lab in above example)
+ add #8, r2
+ ldc r2, spc ! our return address avoiding address word
+
+ ! only call mcount if profiling is enabled
+ mov.l profiling_enabled_k, r0
+ mov.l @r0, r0
+ cmp/eq #0, r0
+ bt 3f
+ ! call mcount
+ mov.l mcount_k, r2
+ jsr @r2
+ nop
+3:
+ lds.l @r15+,pr
+ mov.l @r15+,r7
+ mov.l @r15+,r6
+ mov.l @r15+,r5
+ mov.l @r15+,r4
+ rte
+ nop
+ .balign 4
+event_mask:
+ .long 0xfff
+trapcode_k:
+ .long 0x160
+expevt_k1:
+ .long 0xff000024 ! Address of expevt
+trapa_k:
+ .long 0xff000020
+mcount_k:
+ .long __call_mcount
+profiling_enabled_k:
+ .long profiling_enabled
+#endif
+ ! Non profiling case.
+handler_100:
+ mov.l 2f, r0 ! load the old vbr setting (if any)
+ mov.l @r0, r0
+ cmp/eq #0, r0
+ bf 1f
+ ! no previous vbr - jump to own generic handler
+ bra handler
+ nop
+1: ! there was a previous handler - chain them
+ add #0x7f, r0 ! 0x7f
+ add #0x7f, r0 ! 0xfe
+ add #0x2, r0 ! add 0x100 without corrupting another register
+ jmp @r0
+ nop
+ .balign 4
+2:
+ .long old_vbr
+
+ .org 0x400
+vbr_400: ! Should be at vbr+0x400
+ mov.l 2f, r0 ! load the old vbr setting (if any)
+ mov.l @r0, r0
+ cmp/eq #0, r0
+ ! no previous vbr - jump to own generic handler
+ bt handler
+ ! there was a previous handler - chain them
+ rotcr r0
+ rotcr r0
+ add #0x7f, r0 ! 0x1fc
+ add #0x7f, r0 ! 0x3f8
+ add #0x02, r0 ! 0x400
+ rotcl r0
+ rotcl r0 ! Add 0x400 without corrupting another register
+ jmp @r0
+ nop
+ .balign 4
+2:
+ .long old_vbr
+handler:
+ /* If the trap handler is there call it */
+ mov.l superh_trap_handler_k, r0
+ cmp/eq #0, r0 ! True if zero.
+ bf 3f
+ bra chandler
+ nop
+3:
+ ! Here handler available, call it.
+ /* Now call the trap handler with as much of the context unchanged as possible.
+ Move trapping address into PR to make it look like the trap point */
+ stc spc, r1
+ lds r1, pr
+ mov.l expevt_k, r4
+ mov.l @r4, r4 ! r4 is value of expevt, first parameter.
+ mov r1, r5 ! Remember trapping pc.
+ mov r1, r6 ! Remember trapping pc.
+ mov.l chandler_k, r1
+ mov.l superh_trap_handler_k, r2
+ ! jmp to trap handler to avoid disturbing pr.
+ jmp @r2
+ nop
+
+ .org 0x600
+vbr_600:
+#ifdef PROFILE
+ ! Should be at vbr+0x600
+ ! Now we are in the land of interrupts so need to save more state.
+ ! Save register state
+ mov.l interrupt_stack_k, r15 ! r15 has been saved to sgr.
+ mov.l r0,@-r15
+ mov.l r1,@-r15
+ mov.l r2,@-r15
+ mov.l r3,@-r15
+ mov.l r4,@-r15
+ mov.l r5,@-r15
+ mov.l r6,@-r15
+ mov.l r7,@-r15
+ sts.l pr,@-r15
+ sts.l mach,@-r15
+ sts.l macl,@-r15
+#if defined(__SH_FPU_ANY__)
+ ! Save fpul and fpscr, save fr0-fr7 in 64 bit mode
+ ! and set the pervading precision for the timer_handler
+ mov #0,r0
+ sts.l fpul,@-r15
+ sts.l fpscr,@-r15
+ lds r0,fpscr ! Clear fpscr
+ fmov fr0,@-r15
+ fmov fr1,@-r15
+ fmov fr2,@-r15
+ fmov fr3,@-r15
+ mov.l pervading_precision_k,r0
+ fmov fr4,@-r15
+ fmov fr5,@-r15
+ mov.l @r0,r0
+ fmov fr6,@-r15
+ fmov fr7,@-r15
+ lds r0,fpscr
+#endif /* __SH_FPU_ANY__ */
+ ! Pass interrupted pc to timer_handler as first parameter (r4).
+ stc spc, r4
+ mov.l timer_handler_k, r0
+ jsr @r0
+ nop
+#if defined(__SH_FPU_ANY__)
+ mov #0,r0
+ lds r0,fpscr ! Clear the fpscr
+ fmov @r15+,fr7
+ fmov @r15+,fr6
+ fmov @r15+,fr5
+ fmov @r15+,fr4
+ fmov @r15+,fr3
+ fmov @r15+,fr2
+ fmov @r15+,fr1
+ fmov @r15+,fr0
+ lds.l @r15+,fpscr
+ lds.l @r15+,fpul
+#endif /* __SH_FPU_ANY__ */
+ lds.l @r15+,macl
+ lds.l @r15+,mach
+ lds.l @r15+,pr
+ mov.l @r15+,r7
+ mov.l @r15+,r6
+ mov.l @r15+,r5
+ mov.l @r15+,r4
+ mov.l @r15+,r3
+ mov.l @r15+,r2
+ mov.l @r15+,r1
+ mov.l @r15+,r0
+ stc sgr, r15 ! Restore r15, destroyed by this sequence.
+ rte
+ nop
+#if defined(__SH_FPU_ANY__)
+ .balign 4
+pervading_precision_k:
+#define CONCAT1(A,B) A##B
+#define CONCAT(A,B) CONCAT1(A,B)
+ .long CONCAT(__USER_LABEL_PREFIX__,__fpscr_values)+4
+#endif
+#else
+ mov.l 2f, r0 ! Load the old vbr setting (if any).
+ mov.l @r0, r0
+ cmp/eq #0, r0
+ ! no previous vbr - jump to own handler
+ bt chandler
+ ! there was a previous handler - chain them
+ rotcr r0
+ rotcr r0
+ add #0x7f, r0 ! 0x1fc
+ add #0x7f, r0 ! 0x3f8
+ add #0x7f, r0 ! 0x5f4
+ add #0x03, r0 ! 0x600
+ rotcl r0
+ rotcl r0 ! Add 0x600 without corrupting another register
+ jmp @r0
+ nop
+ .balign 4
+2:
+ .long old_vbr
+#endif /* PROFILE code */
+chandler:
+ mov.l expevt_k, r4
+ mov.l @r4, r4 ! r4 is value of expevt hence making this the return code
+ mov.l handler_exit_k,r0
+ jsr @r0
+ nop
+ ! We should never return from _exit but in case we do we would enter the
+ ! the following tight loop
+limbo:
+ bra limbo
+ nop
+ .balign 4
+#ifdef PROFILE
+interrupt_stack_k:
+ .long __timer_stack ! The high end of the stack
+timer_handler_k:
+ .long __profil_counter
+#endif
+expevt_k:
+ .long 0xff000024 ! Address of expevt
+chandler_k:
+ .long chandler
+superh_trap_handler_k:
+ .long __superh_trap_handler
+handler_exit_k:
+ .long _exit
+ .align 2
+! Simulated compile of trap handler.
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .text
+.Ltext0:
+ .align 5
+ .type __superh_trap_handler,@function
+__superh_trap_handler:
+.LFB1:
+ mov.l r14,@-r15
+.LCFI0:
+ add #-4,r15
+.LCFI1:
+ mov r15,r14
+.LCFI2:
+ mov.l r4,@r14
+ lds r1, pr
+ add #4,r14
+ mov r14,r15
+ mov.l @r15+,r14
+ rts
+ nop
+.LFE1:
+.Lfe1:
+ .size __superh_trap_handler,.Lfe1-__superh_trap_handler
+ .section .debug_frame,"",@progbits
+.Lframe0:
+ .ualong .LECIE0-.LSCIE0
+.LSCIE0:
+ .ualong 0xffffffff
+ .byte 0x1
+ .string ""
+ .uleb128 0x1
+ .sleb128 -4
+ .byte 0x11
+ .byte 0xc
+ .uleb128 0xf
+ .uleb128 0x0
+ .align 2
+.LECIE0:
+.LSFDE0:
+ .ualong .LEFDE0-.LASFDE0
+.LASFDE0:
+ .ualong .Lframe0
+ .ualong .LFB1
+ .ualong .LFE1-.LFB1
+ .byte 0x4
+ .ualong .LCFI0-.LFB1
+ .byte 0xe
+ .uleb128 0x4
+ .byte 0x4
+ .ualong .LCFI1-.LCFI0
+ .byte 0xe
+ .uleb128 0x8
+ .byte 0x8e
+ .uleb128 0x1
+ .byte 0x4
+ .ualong .LCFI2-.LCFI1
+ .byte 0xd
+ .uleb128 0xe
+ .align 2
+.LEFDE0:
+ .text
+.Letext0:
+ .section .debug_info
+ .ualong 0xb3
+ .uaword 0x2
+ .ualong .Ldebug_abbrev0
+ .byte 0x4
+ .uleb128 0x1
+ .ualong .Ldebug_line0
+ .ualong .Letext0
+ .ualong .Ltext0
+ .string "trap_handler.c"
+ .string "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ .string "GNU C 3.2 20020529 (experimental)"
+ .byte 0x1
+ .uleb128 0x2
+ .ualong 0xa6
+ .byte 0x1
+ .string "_superh_trap_handler"
+ .byte 0x1
+ .byte 0x2
+ .byte 0x1
+ .ualong .LFB1
+ .ualong .LFE1
+ .byte 0x1
+ .byte 0x5e
+ .uleb128 0x3
+ .string "trap_reason"
+ .byte 0x1
+ .byte 0x1
+ .ualong 0xa6
+ .byte 0x2
+ .byte 0x91
+ .sleb128 0
+ .byte 0x0
+ .uleb128 0x4
+ .string "unsigned int"
+ .byte 0x4
+ .byte 0x7
+ .byte 0x0
+ .section .debug_abbrev
+ .uleb128 0x1
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x10
+ .uleb128 0x6
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x1b
+ .uleb128 0x8
+ .uleb128 0x25
+ .uleb128 0x8
+ .uleb128 0x13
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2
+ .uleb128 0x2e
+ .byte 0x1
+ .uleb128 0x1
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0xc
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x27
+ .uleb128 0xc
+ .uleb128 0x11
+ .uleb128 0x1
+ .uleb128 0x12
+ .uleb128 0x1
+ .uleb128 0x40
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x5
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2
+ .uleb128 0xa
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4
+ .uleb128 0x24
+ .byte 0x0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_pubnames,"",@progbits
+ .ualong 0x27
+ .uaword 0x2
+ .ualong .Ldebug_info0
+ .ualong 0xb7
+ .ualong 0x67
+ .string "_superh_trap_handler"
+ .ualong 0x0
+ .section .debug_aranges,"",@progbits
+ .ualong 0x1c
+ .uaword 0x2
+ .ualong .Ldebug_info0
+ .byte 0x4
+ .byte 0x0
+ .uaword 0x0
+ .uaword 0x0
+ .ualong .Ltext0
+ .ualong .Letext0-.Ltext0
+ .ualong 0x0
+ .ualong 0x0
+#endif /* VBR_SETUP */
+#endif /* ! __SH5__ */
diff --git a/gcc-4.9/libgcc/config/sh/crti.S b/gcc-4.9/libgcc/config/sh/crti.S
new file mode 100644
index 000000000..550f63758
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/crti.S
@@ -0,0 +1,125 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ This file was adapted from glibc sources.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* The code in sections .init and .fini is supposed to be a single
+ regular function. The function in .init is called directly from
+ start in crt1.S. The function in .fini is atexit()ed in crt1.S
+ too.
+
+ crti.S contributes the prologue of a function to these sections,
+ and crtn.S comes up the epilogue. STARTFILE_SPEC should list
+ crti.o before any other object files that might add code to .init
+ or .fini sections, and ENDFILE_SPEC should list crtn.o after any
+ such object files. */
+
+ .section .init
+/* The alignment below can't be smaller, otherwise the mova below
+ breaks. Yes, we might align just the label, but then we'd be
+ exchanging an alignment here for one there, since the code fragment
+ below ensures 4-byte alignment on __ELF__. */
+#ifdef __ELF__
+ .p2align 2
+#else
+ .p2align 1
+#endif
+ .global _init
+_init:
+#if __SHMEDIA__
+ addi r15, -16, r15
+ st.q r15, 8, r14
+ st.q r15, 0, r18
+ add r15, r63, r14
+#elif __SH5__ && ! __SHMEDIA__
+ mov r15,r0
+ add #-8,r15
+ mov.l r14,@-r0
+ sts.l pr,@-r0
+ mov r15,r14
+ nop
+#else
+#ifdef __ELF__
+ mov.l r12,@-r15
+ mova 0f,r0
+ mov.l 0f,r12
+#endif
+ mov.l r14,@-r15
+#ifdef __ELF__
+ add r0,r12
+#endif
+ sts.l pr,@-r15
+#ifdef __ELF__
+ bra 1f
+#endif
+ mov r15,r14
+#ifdef __ELF__
+0: .long _GLOBAL_OFFSET_TABLE_
+1:
+#endif
+#endif /* __SHMEDIA__ */
+
+ .section .fini
+/* The alignment below can't be smaller, otherwise the mova below
+ breaks. Yes, we might align just the label, but then we'd be
+ exchanging an alignment here for one there, since the code fragment
+ below ensures 4-byte alignment on __ELF__. */
+#ifdef __ELF__
+ .p2align 2
+#else
+ .p2align 1
+#endif
+ .global _fini
+_fini:
+#if __SHMEDIA__
+ addi r15, -16, r15
+ st.q r15, 8, r14
+ st.q r15, 0, r18
+ add r15, r63, r14
+#elif __SH5__ && ! __SHMEDIA__
+ mov r15,r0
+ add #-8,r15
+ mov.l r14,@-r0
+ sts.l pr,@-r0
+ mov r15,r14
+ nop
+#else
+#ifdef __ELF__
+ mov.l r12,@-r15
+ mova 0f,r0
+ mov.l 0f,r12
+#endif
+ mov.l r14,@-r15
+#ifdef __ELF__
+ add r0,r12
+#endif
+ sts.l pr,@-r15
+#ifdef __ELF__
+ bra 1f
+#endif
+ mov r15,r14
+#ifdef __ELF__
+0: .long _GLOBAL_OFFSET_TABLE_
+1:
+#endif
+#endif /* __SHMEDIA__ */
diff --git a/gcc-4.9/libgcc/config/sh/crtn.S b/gcc-4.9/libgcc/config/sh/crtn.S
new file mode 100644
index 000000000..9d7c4eb65
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/crtn.S
@@ -0,0 +1,77 @@
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+ This file was adapted from glibc sources.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* See an explanation about .init and .fini in crti.S. */
+
+ .section .init
+#if __SHMEDIA__
+ add r14, r63, r15
+ ld.q r15, 0, r18
+ ptabs r18, tr0
+ ld.q r15, 8, r14
+ addi r15, 16, r15
+ blink tr0, r63
+#elif __SH5__ && ! __SHMEDIA__
+ mov r14,r15
+ lds.l @r14+,pr
+ mov.l @r14,r14
+ rts
+ add #8,r15
+#else
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+#ifdef __ELF__
+ mov.l @r15+,r12
+#else
+ nop
+#endif
+#endif /* __SHMEDIA__ */
+
+ .section .fini
+#if __SHMEDIA__
+ add r14, r63, r15
+ ld.q r15, 0, r18
+ ptabs r18, tr0
+ ld.q r15, 8, r14
+ addi r15, 16, r15
+ blink tr0, r63
+#elif __SH5__ && ! __SHMEDIA__
+ mov r14,r15
+ lds.l @r14+,pr
+ mov.l @r14,r14
+ rts
+ add #8,r15
+#else
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+#ifdef __ELF__
+ mov.l @r15+,r12
+#else
+ nop
+#endif
+#endif /* __SHMEDIA__ */
diff --git a/gcc-4.9/libgcc/config/sh/lib1funcs-4-300.S b/gcc-4.9/libgcc/config/sh/lib1funcs-4-300.S
new file mode 100644
index 000000000..5f05b0812
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/lib1funcs-4-300.S
@@ -0,0 +1,936 @@
+/* Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* libgcc routines for the STMicroelectronics ST40-300 CPU.
+ Contributed by J"orn Rennecke joern.rennecke@st.com. */
+
+#include "lib1funcs.h"
+
+#if !__SHMEDIA__
+#ifdef L_div_table
+#if defined (__SH3__) || defined (__SH3E__) || defined (__SH4__) || defined (__SH4_SINGLE__) || defined (__SH4_SINGLE_ONLY__) || defined (__SH4_NOFPU__)
+/* This code used shld, thus is not suitable for SH1 / SH2. */
+
+/* Signed / unsigned division without use of FPU, optimized for SH4-300.
+ Uses a lookup table for divisors in the range -128 .. +127, and
+ div1 with case distinction for larger divisors in three more ranges.
+ The code is lumped together with the table to allow the use of mova. */
+#ifdef __LITTLE_ENDIAN__
+#define L_LSB 0
+#define L_LSWMSB 1
+#define L_MSWLSB 2
+#else
+#define L_LSB 3
+#define L_LSWMSB 2
+#define L_MSWLSB 1
+#endif
+
+ .global GLOBAL(udivsi3_i4i)
+ .global GLOBAL(sdivsi3_i4i)
+ FUNC(GLOBAL(udivsi3_i4i))
+ FUNC(GLOBAL(sdivsi3_i4i))
+
+ .balign 4
+LOCAL(div_ge8m): ! 10 cycles up to here
+ rotcr r1 ! signed shift must use original sign from r4
+ div0s r5,r4
+ mov #24,r7
+ shld r7,r6
+ shad r0,r1
+ rotcl r6
+ div1 r5,r1
+ swap.w r5,r0 ! detect -0x80000000 : 0x800000
+ rotcl r6
+ swap.w r4,r7
+ div1 r5,r1
+ swap.b r7,r7
+ rotcl r6
+ or r7,r0
+ div1 r5,r1
+ swap.w r0,r7
+ rotcl r6
+ or r7,r0
+ div1 r5,r1
+ add #-0x80,r0
+ rotcl r6
+ extu.w r0,r0
+ div1 r5,r1
+ neg r0,r0
+ rotcl r6
+ swap.w r0,r0
+ div1 r5,r1
+ mov.l @r15+,r7
+ and r6,r0
+ rotcl r6
+ div1 r5,r1
+ shll2 r0
+ rotcl r6
+ exts.b r0,r0
+ div1 r5,r1
+ swap.w r0,r0
+ exts.w r0,r1
+ exts.b r6,r0
+ mov.l @r15+,r6
+ rotcl r0
+ rts
+ sub r1,r0
+ ! 31 cycles up to here
+
+ .balign 4
+LOCAL(udiv_ge64k): ! 3 cycles up to here
+ mov r4,r0
+ shlr8 r0
+ div0u
+ cmp/hi r0,r5
+ bt LOCAL(udiv_r8)
+ mov.l r5,@-r15
+ shll8 r5
+ ! 7 cycles up to here
+ .rept 8
+ div1 r5,r0
+ .endr
+ extu.b r4,r1 ! 15 cycles up to here
+ extu.b r0,r6
+ xor r1,r0
+ xor r6,r0
+ swap.b r6,r6
+ .rept 8
+ div1 r5,r0
+ .endr ! 25 cycles up to here
+ extu.b r0,r0
+ mov.l @r15+,r5
+ or r6,r0
+ mov.l @r15+,r6
+ rts
+ rotcl r0 ! 28 cycles up to here
+
+ .balign 4
+LOCAL(udiv_r8): ! 6 cycles up to here
+ mov.l r4,@-r15
+ shll16 r4
+ shll8 r4
+ !
+ shll r4
+ mov r0,r1
+ div1 r5,r1
+ mov r4,r0
+ rotcl r0
+ mov.l @r15+,r4
+ div1 r5,r1
+ ! 12 cycles up to here
+ .rept 6
+ rotcl r0; div1 r5,r1
+ .endr
+ mov.l @r15+,r6 ! 24 cycles up to here
+ rts
+ rotcl r0
+
+ .balign 4
+LOCAL(div_ge32k): ! 6 cycles up to here
+ mov.l r7,@-r15
+ swap.w r5,r6
+ exts.b r6,r7
+ exts.w r6,r6
+ cmp/eq r6,r7
+ extu.b r1,r6
+ bf/s LOCAL(div_ge8m)
+ cmp/hi r1,r4 ! copy sign bit of r4 into T
+ rotcr r1 ! signed shift must use original sign from r4
+ div0s r5,r4
+ shad r0,r1
+ shll8 r5
+ div1 r5,r1
+ mov r5,r7 ! detect r4 == 0x80000000 && r5 == 0x8000(00)
+ div1 r5,r1
+ shlr8 r7
+ div1 r5,r1
+ swap.w r4,r0
+ div1 r5,r1
+ swap.b r0,r0
+ div1 r5,r1
+ or r0,r7
+ div1 r5,r1
+ add #-80,r7
+ div1 r5,r1
+ swap.w r7,r0
+ div1 r5,r1
+ or r0,r7
+ extu.b r1,r0
+ xor r6,r1
+ xor r0,r1
+ exts.b r0,r0
+ div1 r5,r1
+ extu.w r7,r7
+ div1 r5,r1
+ neg r7,r7 ! upper 16 bit of r7 == 0 if r4 == 0x80000000 && r5 == 0x8000
+ div1 r5,r1
+ and r0,r7
+ div1 r5,r1
+ swap.w r7,r7 ! 26 cycles up to here.
+ div1 r5,r1
+ shll8 r0
+ div1 r5,r1
+ exts.w r7,r7
+ div1 r5,r1
+ add r0,r0
+ div1 r5,r1
+ sub r7,r0
+ extu.b r1,r1
+ mov.l @r15+,r7
+ rotcl r1
+ mov.l @r15+,r6
+ add r1,r0
+ mov #-8,r1
+ rts
+ shad r1,r5 ! 34 cycles up to here
+
+ .balign 4
+GLOBAL(udivsi3_i4i):
+ mov.l r6,@-r15
+ extu.w r5,r6
+ cmp/eq r5,r6
+ mov #0x7f,r0
+ bf LOCAL(udiv_ge64k)
+ cmp/hi r0,r5
+ bf LOCAL(udiv_le128)
+ mov r4,r1
+ shlr8 r1
+ div0u
+ shlr r1
+ shll16 r6
+ div1 r6,r1
+ extu.b r4,r0 ! 7 cycles up to here
+ .rept 8
+ div1 r6,r1
+ .endr ! 15 cycles up to here
+ xor r1,r0 ! xor dividend with result lsb
+ .rept 6
+ div1 r6,r1
+ .endr
+ mov.l r7,@-r15 ! 21 cycles up to here
+ div1 r6,r1
+ extu.b r0,r7
+ div1 r6,r1
+ shll8 r7
+ extu.w r1,r0
+ xor r7,r1 ! replace lsb of result with lsb of dividend
+ div1 r6,r1
+ mov #0,r7
+ div1 r6,r1
+ !
+ div1 r6,r1
+ bra LOCAL(div_end)
+ div1 r6,r1 ! 28 cycles up to here
+
+ /* This is link-compatible with a GLOBAL(sdivsi3) call,
+ but we effectively clobber only r1, macl and mach */
+ /* Because negative quotients are calculated as one's complements,
+ -0x80000000 divided by the smallest positive number of a number
+ range (0x80, 0x8000, 0x800000) causes saturation in the one's
+ complement representation, and we have to suppress the
+ one's -> two's complement adjustment. Since positive numbers
+ don't get such an adjustment, it's OK to also compute one's -> two's
+ complement adjustment suppression for a dividend of 0. */
+ .balign 4
+GLOBAL(sdivsi3_i4i):
+ mov.l r6,@-r15
+ exts.b r5,r6
+ cmp/eq r5,r6
+ mov #-1,r1
+ bt/s LOCAL(div_le128)
+ cmp/pz r4
+ addc r4,r1
+ exts.w r5,r6
+ cmp/eq r5,r6
+ mov #-7,r0
+ bf/s LOCAL(div_ge32k)
+ cmp/hi r1,r4 ! copy sign bit of r4 into T
+ rotcr r1
+ shll16 r6 ! 7 cycles up to here
+ shad r0,r1
+ div0s r5,r4
+ div1 r6,r1
+ mov.l r7,@-r15
+ div1 r6,r1
+ mov r4,r0 ! re-compute adjusted dividend
+ div1 r6,r1
+ mov #-31,r7
+ div1 r6,r1
+ shad r7,r0
+ div1 r6,r1
+ add r4,r0 ! adjusted dividend
+ div1 r6,r1
+ mov.l r8,@-r15
+ div1 r6,r1
+ swap.w r4,r8 ! detect special case r4 = 0x80000000, r5 = 0x80
+ div1 r6,r1
+ swap.b r8,r8
+ xor r1,r0 ! xor dividend with result lsb
+ div1 r6,r1
+ div1 r6,r1
+ or r5,r8
+ div1 r6,r1
+ add #-0x80,r8 ! r8 is 0 iff there is a match
+ div1 r6,r1
+ swap.w r8,r7 ! or upper 16 bits...
+ div1 r6,r1
+ or r7,r8 !...into lower 16 bits
+ div1 r6,r1
+ extu.w r8,r8
+ div1 r6,r1
+ extu.b r0,r7
+ div1 r6,r1
+ shll8 r7
+ exts.w r1,r0
+ xor r7,r1 ! replace lsb of result with lsb of dividend
+ div1 r6,r1
+ neg r8,r8 ! upper 16 bits of r8 are now 0xffff iff we want end adjm.
+ div1 r6,r1
+ and r0,r8
+ div1 r6,r1
+ swap.w r8,r7
+ div1 r6,r1
+ mov.l @r15+,r8 ! 58 insns, 29 cycles up to here
+LOCAL(div_end):
+ div1 r6,r1
+ shll8 r0
+ div1 r6,r1
+ exts.w r7,r7
+ div1 r6,r1
+ add r0,r0
+ div1 r6,r1
+ sub r7,r0
+ extu.b r1,r1
+ mov.l @r15+,r7
+ rotcl r1
+ mov.l @r15+,r6
+ rts
+ add r1,r0
+
+ .balign 4
+LOCAL(udiv_le128): ! 4 cycles up to here (or 7 for mispredict)
+ mova LOCAL(div_table_inv),r0
+ shll2 r6
+ mov.l @(r0,r6),r1
+ mova LOCAL(div_table_clz),r0
+ lds r4,mach
+ !
+ !
+ !
+ tst r1,r1
+ !
+ bt 0f
+ dmulu.l r1,r4
+0: mov.b @(r0,r5),r1
+ clrt
+ !
+ !
+ sts mach,r0
+ addc r4,r0
+ rotcr r0
+ mov.l @r15+,r6
+ rts
+ shld r1,r0
+
+ .balign 4
+LOCAL(div_le128): ! 3 cycles up to here (or 6 for mispredict)
+ mova LOCAL(div_table_inv),r0
+ shll2 r6
+ mov.l @(r0,r6),r1
+ mova LOCAL(div_table_clz),r0
+ neg r4,r6
+ bf 0f
+ mov r4,r6
+0: lds r6,mach
+ tst r1,r1
+ bt 0f
+ dmulu.l r1,r6
+0: div0s r4,r5
+ mov.b @(r0,r5),r1
+ bt/s LOCAL(le128_neg)
+ clrt
+ !
+ sts mach,r0
+ addc r6,r0
+ rotcr r0
+ mov.l @r15+,r6
+ rts
+ shld r1,r0
+
+/* Could trap divide by zero for the cost of one cycle more mispredict penalty:
+...
+ dmulu.l r1,r6
+0: div0s r4,r5
+ bt/s LOCAL(le128_neg)
+ tst r5,r5
+ bt LOCAL(div_by_zero)
+ mov.b @(r0,r5),r1
+ sts mach,r0
+ addc r6,r0
+...
+LOCAL(div_by_zero):
+ trapa #
+ .balign 4
+LOCAL(le128_neg):
+ bt LOCAL(div_by_zero)
+ mov.b @(r0,r5),r1
+ sts mach,r0
+ addc r6,r0
+... */
+
+ .balign 4
+LOCAL(le128_neg):
+ sts mach,r0
+ addc r6,r0
+ rotcr r0
+ mov.l @r15+,r6
+ shad r1,r0
+ rts
+ neg r0,r0
+ ENDFUNC(GLOBAL(udivsi3_i4i))
+ ENDFUNC(GLOBAL(sdivsi3_i4i))
+
+/* This table has been generated by divtab-sh4.c. */
+ .balign 4
+ .byte -7
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte -1
+ .byte -1
+ .byte 0
+LOCAL(div_table_clz):
+ .byte 0
+ .byte 0
+ .byte -1
+ .byte -1
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+/* 1/-128 .. 1/127, normalized. There is an implicit leading 1 in bit 32,
+ or in bit 33 for powers of two. */
+ .balign 4
+ .long 0x0
+ .long 0x2040811
+ .long 0x4104105
+ .long 0x624DD30
+ .long 0x8421085
+ .long 0xA6810A7
+ .long 0xC9714FC
+ .long 0xECF56BF
+ .long 0x11111112
+ .long 0x135C8114
+ .long 0x15B1E5F8
+ .long 0x18118119
+ .long 0x1A7B9612
+ .long 0x1CF06ADB
+ .long 0x1F7047DD
+ .long 0x21FB7813
+ .long 0x24924925
+ .long 0x27350B89
+ .long 0x29E4129F
+ .long 0x2C9FB4D9
+ .long 0x2F684BDB
+ .long 0x323E34A3
+ .long 0x3521CFB3
+ .long 0x38138139
+ .long 0x3B13B13C
+ .long 0x3E22CBCF
+ .long 0x41414142
+ .long 0x446F8657
+ .long 0x47AE147B
+ .long 0x4AFD6A06
+ .long 0x4E5E0A73
+ .long 0x51D07EAF
+ .long 0x55555556
+ .long 0x58ED2309
+ .long 0x5C9882BA
+ .long 0x60581606
+ .long 0x642C8591
+ .long 0x68168169
+ .long 0x6C16C16D
+ .long 0x702E05C1
+ .long 0x745D1746
+ .long 0x78A4C818
+ .long 0x7D05F418
+ .long 0x81818182
+ .long 0x86186187
+ .long 0x8ACB90F7
+ .long 0x8F9C18FA
+ .long 0x948B0FCE
+ .long 0x9999999A
+ .long 0x9EC8E952
+ .long 0xA41A41A5
+ .long 0xA98EF607
+ .long 0xAF286BCB
+ .long 0xB4E81B4F
+ .long 0xBACF914D
+ .long 0xC0E07039
+ .long 0xC71C71C8
+ .long 0xCD856891
+ .long 0xD41D41D5
+ .long 0xDAE6076C
+ .long 0xE1E1E1E2
+ .long 0xE9131AC0
+ .long 0xF07C1F08
+ .long 0xF81F81F9
+ .long 0x0
+ .long 0x4104105
+ .long 0x8421085
+ .long 0xC9714FC
+ .long 0x11111112
+ .long 0x15B1E5F8
+ .long 0x1A7B9612
+ .long 0x1F7047DD
+ .long 0x24924925
+ .long 0x29E4129F
+ .long 0x2F684BDB
+ .long 0x3521CFB3
+ .long 0x3B13B13C
+ .long 0x41414142
+ .long 0x47AE147B
+ .long 0x4E5E0A73
+ .long 0x55555556
+ .long 0x5C9882BA
+ .long 0x642C8591
+ .long 0x6C16C16D
+ .long 0x745D1746
+ .long 0x7D05F418
+ .long 0x86186187
+ .long 0x8F9C18FA
+ .long 0x9999999A
+ .long 0xA41A41A5
+ .long 0xAF286BCB
+ .long 0xBACF914D
+ .long 0xC71C71C8
+ .long 0xD41D41D5
+ .long 0xE1E1E1E2
+ .long 0xF07C1F08
+ .long 0x0
+ .long 0x8421085
+ .long 0x11111112
+ .long 0x1A7B9612
+ .long 0x24924925
+ .long 0x2F684BDB
+ .long 0x3B13B13C
+ .long 0x47AE147B
+ .long 0x55555556
+ .long 0x642C8591
+ .long 0x745D1746
+ .long 0x86186187
+ .long 0x9999999A
+ .long 0xAF286BCB
+ .long 0xC71C71C8
+ .long 0xE1E1E1E2
+ .long 0x0
+ .long 0x11111112
+ .long 0x24924925
+ .long 0x3B13B13C
+ .long 0x55555556
+ .long 0x745D1746
+ .long 0x9999999A
+ .long 0xC71C71C8
+ .long 0x0
+ .long 0x24924925
+ .long 0x55555556
+ .long 0x9999999A
+ .long 0x0
+ .long 0x55555556
+ .long 0x0
+ .long 0x0
+LOCAL(div_table_inv):
+ .long 0x0
+ .long 0x0
+ .long 0x0
+ .long 0x55555556
+ .long 0x0
+ .long 0x9999999A
+ .long 0x55555556
+ .long 0x24924925
+ .long 0x0
+ .long 0xC71C71C8
+ .long 0x9999999A
+ .long 0x745D1746
+ .long 0x55555556
+ .long 0x3B13B13C
+ .long 0x24924925
+ .long 0x11111112
+ .long 0x0
+ .long 0xE1E1E1E2
+ .long 0xC71C71C8
+ .long 0xAF286BCB
+ .long 0x9999999A
+ .long 0x86186187
+ .long 0x745D1746
+ .long 0x642C8591
+ .long 0x55555556
+ .long 0x47AE147B
+ .long 0x3B13B13C
+ .long 0x2F684BDB
+ .long 0x24924925
+ .long 0x1A7B9612
+ .long 0x11111112
+ .long 0x8421085
+ .long 0x0
+ .long 0xF07C1F08
+ .long 0xE1E1E1E2
+ .long 0xD41D41D5
+ .long 0xC71C71C8
+ .long 0xBACF914D
+ .long 0xAF286BCB
+ .long 0xA41A41A5
+ .long 0x9999999A
+ .long 0x8F9C18FA
+ .long 0x86186187
+ .long 0x7D05F418
+ .long 0x745D1746
+ .long 0x6C16C16D
+ .long 0x642C8591
+ .long 0x5C9882BA
+ .long 0x55555556
+ .long 0x4E5E0A73
+ .long 0x47AE147B
+ .long 0x41414142
+ .long 0x3B13B13C
+ .long 0x3521CFB3
+ .long 0x2F684BDB
+ .long 0x29E4129F
+ .long 0x24924925
+ .long 0x1F7047DD
+ .long 0x1A7B9612
+ .long 0x15B1E5F8
+ .long 0x11111112
+ .long 0xC9714FC
+ .long 0x8421085
+ .long 0x4104105
+ .long 0x0
+ .long 0xF81F81F9
+ .long 0xF07C1F08
+ .long 0xE9131AC0
+ .long 0xE1E1E1E2
+ .long 0xDAE6076C
+ .long 0xD41D41D5
+ .long 0xCD856891
+ .long 0xC71C71C8
+ .long 0xC0E07039
+ .long 0xBACF914D
+ .long 0xB4E81B4F
+ .long 0xAF286BCB
+ .long 0xA98EF607
+ .long 0xA41A41A5
+ .long 0x9EC8E952
+ .long 0x9999999A
+ .long 0x948B0FCE
+ .long 0x8F9C18FA
+ .long 0x8ACB90F7
+ .long 0x86186187
+ .long 0x81818182
+ .long 0x7D05F418
+ .long 0x78A4C818
+ .long 0x745D1746
+ .long 0x702E05C1
+ .long 0x6C16C16D
+ .long 0x68168169
+ .long 0x642C8591
+ .long 0x60581606
+ .long 0x5C9882BA
+ .long 0x58ED2309
+ .long 0x55555556
+ .long 0x51D07EAF
+ .long 0x4E5E0A73
+ .long 0x4AFD6A06
+ .long 0x47AE147B
+ .long 0x446F8657
+ .long 0x41414142
+ .long 0x3E22CBCF
+ .long 0x3B13B13C
+ .long 0x38138139
+ .long 0x3521CFB3
+ .long 0x323E34A3
+ .long 0x2F684BDB
+ .long 0x2C9FB4D9
+ .long 0x29E4129F
+ .long 0x27350B89
+ .long 0x24924925
+ .long 0x21FB7813
+ .long 0x1F7047DD
+ .long 0x1CF06ADB
+ .long 0x1A7B9612
+ .long 0x18118119
+ .long 0x15B1E5F8
+ .long 0x135C8114
+ .long 0x11111112
+ .long 0xECF56BF
+ .long 0xC9714FC
+ .long 0xA6810A7
+ .long 0x8421085
+ .long 0x624DD30
+ .long 0x4104105
+ .long 0x2040811
+ /* maximum error: 0.987342 scaled: 0.921875*/
+
+#endif /* SH3 / SH4 */
+
+#endif /* L_div_table */
+#endif /* !__SHMEDIA__ */
diff --git a/gcc-4.9/libgcc/config/sh/lib1funcs-Os-4-200.S b/gcc-4.9/libgcc/config/sh/lib1funcs-Os-4-200.S
new file mode 100644
index 000000000..f541c81b1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/lib1funcs-Os-4-200.S
@@ -0,0 +1,322 @@
+/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Moderately Space-optimized libgcc routines for the Renesas SH /
+ STMicroelectronics ST40 CPUs.
+ Contributed by J"orn Rennecke joern.rennecke@st.com. */
+
+#include "lib1funcs.h"
+
+#if !__SHMEDIA__
+#ifdef L_udivsi3_i4i
+
+/* 88 bytes; sh4-200 cycle counts:
+ divisor >= 2G: 11 cycles
+ dividend < 2G: 48 cycles
+ dividend >= 2G: divisor != 1: 54 cycles
+ dividend >= 2G, divisor == 1: 22 cycles */
+#if defined (__SH_FPU_DOUBLE__) || defined (__SH4_SINGLE_ONLY__)
+!! args in r4 and r5, result in r0, clobber r1
+
+ .global GLOBAL(udivsi3_i4i)
+ FUNC(GLOBAL(udivsi3_i4i))
+GLOBAL(udivsi3_i4i):
+ mova L1,r0
+ cmp/pz r5
+ sts fpscr,r1
+ lds.l @r0+,fpscr
+ sts.l fpul,@-r15
+ bf LOCAL(huge_divisor)
+ mov.l r1,@-r15
+ lds r4,fpul
+ cmp/pz r4
+#ifdef FMOVD_WORKS
+ fmov.d dr0,@-r15
+ float fpul,dr0
+ fmov.d dr2,@-r15
+ bt LOCAL(dividend_adjusted)
+ mov #1,r1
+ fmov.d @r0,dr2
+ cmp/eq r1,r5
+ bt LOCAL(div_by_1)
+ fadd dr2,dr0
+LOCAL(dividend_adjusted):
+ lds r5,fpul
+ float fpul,dr2
+ fdiv dr2,dr0
+LOCAL(div_by_1):
+ fmov.d @r15+,dr2
+ ftrc dr0,fpul
+ fmov.d @r15+,dr0
+#else /* !FMOVD_WORKS */
+ fmov.s DR01,@-r15
+ mov #1,r1
+ fmov.s DR00,@-r15
+ float fpul,dr0
+ fmov.s DR21,@-r15
+ bt/s LOCAL(dividend_adjusted)
+ fmov.s DR20,@-r15
+ cmp/eq r1,r5
+ bt LOCAL(div_by_1)
+ fmov.s @r0+,DR20
+ fmov.s @r0,DR21
+ fadd dr2,dr0
+LOCAL(dividend_adjusted):
+ lds r5,fpul
+ float fpul,dr2
+ fdiv dr2,dr0
+LOCAL(div_by_1):
+ fmov.s @r15+,DR20
+ fmov.s @r15+,DR21
+ ftrc dr0,fpul
+ fmov.s @r15+,DR00
+ fmov.s @r15+,DR01
+#endif /* !FMOVD_WORKS */
+ lds.l @r15+,fpscr
+ sts fpul,r0
+ rts
+ lds.l @r15+,fpul
+
+#ifdef FMOVD_WORKS
+ .p2align 3 ! make double below 8 byte aligned.
+#endif
+LOCAL(huge_divisor):
+ lds r1,fpscr
+ add #4,r15
+ cmp/hs r5,r4
+ rts
+ movt r0
+
+ .p2align 2
+L1:
+#ifndef FMOVD_WORKS
+ .long 0x80000
+#else
+ .long 0x180000
+#endif
+ .double 4294967296
+
+ ENDFUNC(GLOBAL(udivsi3_i4i))
+#elif !defined (__sh1__) /* !__SH_FPU_DOUBLE__ */
+
+#if 0
+/* With 36 bytes, the following would probably be the most compact
+ implementation, but with 139 cycles on an sh4-200, it is extremely slow. */
+GLOBAL(udivsi3_i4i):
+ mov.l r2,@-r15
+ mov #0,r1
+ div0u
+ mov r1,r2
+ mov.l r3,@-r15
+ mov r1,r3
+ sett
+ mov r4,r0
+LOCAL(loop):
+ rotcr r2
+ ;
+ bt/s LOCAL(end)
+ cmp/gt r2,r3
+ rotcl r0
+ bra LOCAL(loop)
+ div1 r5,r1
+LOCAL(end):
+ rotcl r0
+ mov.l @r15+,r3
+ rts
+ mov.l @r15+,r2
+#endif /* 0 */
+
+/* Size: 186 bytes jointly for udivsi3_i4i and sdivsi3_i4i
+ sh4-200 run times:
+ udiv small divisor: 55 cycles
+ udiv large divisor: 52 cycles
+ sdiv small divisor, positive result: 59 cycles
+ sdiv large divisor, positive result: 56 cycles
+ sdiv small divisor, negative result: 65 cycles (*)
+ sdiv large divisor, negative result: 62 cycles (*)
+ (*): r2 is restored in the rts delay slot and has a lingering latency
+ of two more cycles. */
+ .balign 4
+ .global GLOBAL(udivsi3_i4i)
+ FUNC(GLOBAL(udivsi3_i4i))
+ FUNC(GLOBAL(sdivsi3_i4i))
+GLOBAL(udivsi3_i4i):
+ sts pr,r1
+ mov.l r4,@-r15
+ extu.w r5,r0
+ cmp/eq r5,r0
+ swap.w r4,r0
+ shlr16 r4
+ bf/s LOCAL(large_divisor)
+ div0u
+ mov.l r5,@-r15
+ shll16 r5
+LOCAL(sdiv_small_divisor):
+ div1 r5,r4
+ bsr LOCAL(div6)
+ div1 r5,r4
+ div1 r5,r4
+ bsr LOCAL(div6)
+ div1 r5,r4
+ xtrct r4,r0
+ xtrct r0,r4
+ bsr LOCAL(div7)
+ swap.w r4,r4
+ div1 r5,r4
+ bsr LOCAL(div7)
+ div1 r5,r4
+ xtrct r4,r0
+ mov.l @r15+,r5
+ swap.w r0,r0
+ mov.l @r15+,r4
+ jmp @r1
+ rotcl r0
+LOCAL(div7):
+ div1 r5,r4
+LOCAL(div6):
+ div1 r5,r4; div1 r5,r4; div1 r5,r4
+ div1 r5,r4; div1 r5,r4; rts; div1 r5,r4
+
+LOCAL(divx3):
+ rotcl r0
+ div1 r5,r4
+ rotcl r0
+ div1 r5,r4
+ rotcl r0
+ rts
+ div1 r5,r4
+
+LOCAL(large_divisor):
+ mov.l r5,@-r15
+LOCAL(sdiv_large_divisor):
+ xor r4,r0
+ .rept 4
+ rotcl r0
+ bsr LOCAL(divx3)
+ div1 r5,r4
+ .endr
+ mov.l @r15+,r5
+ mov.l @r15+,r4
+ jmp @r1
+ rotcl r0
+ ENDFUNC(GLOBAL(udivsi3_i4i))
+
+ .global GLOBAL(sdivsi3_i4i)
+GLOBAL(sdivsi3_i4i):
+ mov.l r4,@-r15
+ cmp/pz r5
+ mov.l r5,@-r15
+ bt/s LOCAL(pos_divisor)
+ cmp/pz r4
+ neg r5,r5
+ extu.w r5,r0
+ bt/s LOCAL(neg_result)
+ cmp/eq r5,r0
+ neg r4,r4
+LOCAL(pos_result):
+ swap.w r4,r0
+ bra LOCAL(sdiv_check_divisor)
+ sts pr,r1
+LOCAL(pos_divisor):
+ extu.w r5,r0
+ bt/s LOCAL(pos_result)
+ cmp/eq r5,r0
+ neg r4,r4
+LOCAL(neg_result):
+ mova LOCAL(negate_result),r0
+ ;
+ mov r0,r1
+ swap.w r4,r0
+ lds r2,macl
+ sts pr,r2
+LOCAL(sdiv_check_divisor):
+ shlr16 r4
+ bf/s LOCAL(sdiv_large_divisor)
+ div0u
+ bra LOCAL(sdiv_small_divisor)
+ shll16 r5
+ .balign 4
+LOCAL(negate_result):
+ neg r0,r0
+ jmp @r2
+ sts macl,r2
+ ENDFUNC(GLOBAL(sdivsi3_i4i))
+#endif /* !__SH_FPU_DOUBLE__ */
+#endif /* L_udivsi3_i4i */
+
+#ifdef L_sdivsi3_i4i
+#if defined (__SH_FPU_DOUBLE__) || defined (__SH4_SINGLE_ONLY__)
+/* 48 bytes, 45 cycles on sh4-200 */
+!! args in r4 and r5, result in r0, clobber r1
+
+ .global GLOBAL(sdivsi3_i4i)
+ FUNC(GLOBAL(sdivsi3_i4i))
+GLOBAL(sdivsi3_i4i):
+ sts.l fpscr,@-r15
+ sts fpul,r1
+ mova L1,r0
+ lds.l @r0+,fpscr
+ lds r4,fpul
+#ifdef FMOVD_WORKS
+ fmov.d dr0,@-r15
+ float fpul,dr0
+ lds r5,fpul
+ fmov.d dr2,@-r15
+#else
+ fmov.s DR01,@-r15
+ fmov.s DR00,@-r15
+ float fpul,dr0
+ lds r5,fpul
+ fmov.s DR21,@-r15
+ fmov.s DR20,@-r15
+#endif
+ float fpul,dr2
+ fdiv dr2,dr0
+#ifdef FMOVD_WORKS
+ fmov.d @r15+,dr2
+#else
+ fmov.s @r15+,DR20
+ fmov.s @r15+,DR21
+#endif
+ ftrc dr0,fpul
+#ifdef FMOVD_WORKS
+ fmov.d @r15+,dr0
+#else
+ fmov.s @r15+,DR00
+ fmov.s @r15+,DR01
+#endif
+ lds.l @r15+,fpscr
+ sts fpul,r0
+ rts
+ lds r1,fpul
+
+ .p2align 2
+L1:
+#ifndef FMOVD_WORKS
+ .long 0x80000
+#else
+ .long 0x180000
+#endif
+
+ ENDFUNC(GLOBAL(sdivsi3_i4i))
+#endif /* __SH_FPU_DOUBLE__ */
+#endif /* L_sdivsi3_i4i */
+#endif /* !__SHMEDIA__ */
diff --git a/gcc-4.9/libgcc/config/sh/lib1funcs.S b/gcc-4.9/libgcc/config/sh/lib1funcs.S
new file mode 100644
index 000000000..3410cf7c1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/lib1funcs.S
@@ -0,0 +1,4047 @@
+/* Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+!! libgcc routines for the Renesas / SuperH SH CPUs.
+!! Contributed by Steve Chamberlain.
+!! sac@cygnus.com
+
+!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
+!! recoded in assembly by Toshiyasu Morita
+!! tm@netcom.com
+
+#if defined(__ELF__) && defined(__linux__)
+.section .note.GNU-stack,"",%progbits
+.previous
+#endif
+
+/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
+ ELF local label prefixes by J"orn Rennecke
+ amylaar@cygnus.com */
+
+#include "lib1funcs.h"
+
+/* t-vxworks needs to build both PIC and non-PIC versions of libgcc,
+ so it is more convenient to define NO_FPSCR_VALUES here than to
+ define it on the command line. */
+#if defined __vxworks && defined __PIC__
+#define NO_FPSCR_VALUES
+#endif
+
+#if ! __SH5__
+#ifdef L_ashiftrt
+ .global GLOBAL(ashiftrt_r4_0)
+ .global GLOBAL(ashiftrt_r4_1)
+ .global GLOBAL(ashiftrt_r4_2)
+ .global GLOBAL(ashiftrt_r4_3)
+ .global GLOBAL(ashiftrt_r4_4)
+ .global GLOBAL(ashiftrt_r4_5)
+ .global GLOBAL(ashiftrt_r4_6)
+ .global GLOBAL(ashiftrt_r4_7)
+ .global GLOBAL(ashiftrt_r4_8)
+ .global GLOBAL(ashiftrt_r4_9)
+ .global GLOBAL(ashiftrt_r4_10)
+ .global GLOBAL(ashiftrt_r4_11)
+ .global GLOBAL(ashiftrt_r4_12)
+ .global GLOBAL(ashiftrt_r4_13)
+ .global GLOBAL(ashiftrt_r4_14)
+ .global GLOBAL(ashiftrt_r4_15)
+ .global GLOBAL(ashiftrt_r4_16)
+ .global GLOBAL(ashiftrt_r4_17)
+ .global GLOBAL(ashiftrt_r4_18)
+ .global GLOBAL(ashiftrt_r4_19)
+ .global GLOBAL(ashiftrt_r4_20)
+ .global GLOBAL(ashiftrt_r4_21)
+ .global GLOBAL(ashiftrt_r4_22)
+ .global GLOBAL(ashiftrt_r4_23)
+ .global GLOBAL(ashiftrt_r4_24)
+ .global GLOBAL(ashiftrt_r4_25)
+ .global GLOBAL(ashiftrt_r4_26)
+ .global GLOBAL(ashiftrt_r4_27)
+ .global GLOBAL(ashiftrt_r4_28)
+ .global GLOBAL(ashiftrt_r4_29)
+ .global GLOBAL(ashiftrt_r4_30)
+ .global GLOBAL(ashiftrt_r4_31)
+ .global GLOBAL(ashiftrt_r4_32)
+
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_0))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_1))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_2))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_3))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_4))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_5))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_6))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_7))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_8))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_9))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_10))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_11))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_12))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_13))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_14))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_15))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_16))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_17))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_18))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_19))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_20))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_21))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_22))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_23))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_24))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_25))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_26))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_27))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_28))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_29))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_30))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_31))
+ HIDDEN_FUNC(GLOBAL(ashiftrt_r4_32))
+
+ .align 1
+GLOBAL(ashiftrt_r4_32):
+GLOBAL(ashiftrt_r4_31):
+ rotcl r4
+ rts
+ subc r4,r4
+
+GLOBAL(ashiftrt_r4_30):
+ shar r4
+GLOBAL(ashiftrt_r4_29):
+ shar r4
+GLOBAL(ashiftrt_r4_28):
+ shar r4
+GLOBAL(ashiftrt_r4_27):
+ shar r4
+GLOBAL(ashiftrt_r4_26):
+ shar r4
+GLOBAL(ashiftrt_r4_25):
+ shar r4
+GLOBAL(ashiftrt_r4_24):
+ shlr16 r4
+ shlr8 r4
+ rts
+ exts.b r4,r4
+
+GLOBAL(ashiftrt_r4_23):
+ shar r4
+GLOBAL(ashiftrt_r4_22):
+ shar r4
+GLOBAL(ashiftrt_r4_21):
+ shar r4
+GLOBAL(ashiftrt_r4_20):
+ shar r4
+GLOBAL(ashiftrt_r4_19):
+ shar r4
+GLOBAL(ashiftrt_r4_18):
+ shar r4
+GLOBAL(ashiftrt_r4_17):
+ shar r4
+GLOBAL(ashiftrt_r4_16):
+ shlr16 r4
+ rts
+ exts.w r4,r4
+
+GLOBAL(ashiftrt_r4_15):
+ shar r4
+GLOBAL(ashiftrt_r4_14):
+ shar r4
+GLOBAL(ashiftrt_r4_13):
+ shar r4
+GLOBAL(ashiftrt_r4_12):
+ shar r4
+GLOBAL(ashiftrt_r4_11):
+ shar r4
+GLOBAL(ashiftrt_r4_10):
+ shar r4
+GLOBAL(ashiftrt_r4_9):
+ shar r4
+GLOBAL(ashiftrt_r4_8):
+ shar r4
+GLOBAL(ashiftrt_r4_7):
+ shar r4
+GLOBAL(ashiftrt_r4_6):
+ shar r4
+GLOBAL(ashiftrt_r4_5):
+ shar r4
+GLOBAL(ashiftrt_r4_4):
+ shar r4
+GLOBAL(ashiftrt_r4_3):
+ shar r4
+GLOBAL(ashiftrt_r4_2):
+ shar r4
+GLOBAL(ashiftrt_r4_1):
+ rts
+ shar r4
+
+GLOBAL(ashiftrt_r4_0):
+ rts
+ nop
+
+ ENDFUNC(GLOBAL(ashiftrt_r4_0))
+ ENDFUNC(GLOBAL(ashiftrt_r4_1))
+ ENDFUNC(GLOBAL(ashiftrt_r4_2))
+ ENDFUNC(GLOBAL(ashiftrt_r4_3))
+ ENDFUNC(GLOBAL(ashiftrt_r4_4))
+ ENDFUNC(GLOBAL(ashiftrt_r4_5))
+ ENDFUNC(GLOBAL(ashiftrt_r4_6))
+ ENDFUNC(GLOBAL(ashiftrt_r4_7))
+ ENDFUNC(GLOBAL(ashiftrt_r4_8))
+ ENDFUNC(GLOBAL(ashiftrt_r4_9))
+ ENDFUNC(GLOBAL(ashiftrt_r4_10))
+ ENDFUNC(GLOBAL(ashiftrt_r4_11))
+ ENDFUNC(GLOBAL(ashiftrt_r4_12))
+ ENDFUNC(GLOBAL(ashiftrt_r4_13))
+ ENDFUNC(GLOBAL(ashiftrt_r4_14))
+ ENDFUNC(GLOBAL(ashiftrt_r4_15))
+ ENDFUNC(GLOBAL(ashiftrt_r4_16))
+ ENDFUNC(GLOBAL(ashiftrt_r4_17))
+ ENDFUNC(GLOBAL(ashiftrt_r4_18))
+ ENDFUNC(GLOBAL(ashiftrt_r4_19))
+ ENDFUNC(GLOBAL(ashiftrt_r4_20))
+ ENDFUNC(GLOBAL(ashiftrt_r4_21))
+ ENDFUNC(GLOBAL(ashiftrt_r4_22))
+ ENDFUNC(GLOBAL(ashiftrt_r4_23))
+ ENDFUNC(GLOBAL(ashiftrt_r4_24))
+ ENDFUNC(GLOBAL(ashiftrt_r4_25))
+ ENDFUNC(GLOBAL(ashiftrt_r4_26))
+ ENDFUNC(GLOBAL(ashiftrt_r4_27))
+ ENDFUNC(GLOBAL(ashiftrt_r4_28))
+ ENDFUNC(GLOBAL(ashiftrt_r4_29))
+ ENDFUNC(GLOBAL(ashiftrt_r4_30))
+ ENDFUNC(GLOBAL(ashiftrt_r4_31))
+ ENDFUNC(GLOBAL(ashiftrt_r4_32))
+#endif
+
+#ifdef L_ashiftrt_n
+
+!
+! GLOBAL(ashrsi3)
+!
+! Entry:
+!
+! r4: Value to shift
+! r5: Shift count
+!
+! Exit:
+!
+! r0: Result
+!
+! Destroys:
+!
+! T bit, r5
+!
+
+ .global GLOBAL(ashrsi3)
+ HIDDEN_FUNC(GLOBAL(ashrsi3))
+ .align 2
+GLOBAL(ashrsi3):
+ mov #31,r0
+ and r0,r5
+ mova LOCAL(ashrsi3_table),r0
+ mov.b @(r0,r5),r5
+#ifdef __sh1__
+ add r5,r0
+ jmp @r0
+#else
+ braf r5
+#endif
+ mov r4,r0
+
+ .align 2
+LOCAL(ashrsi3_table):
+ .byte LOCAL(ashrsi3_0)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_1)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_2)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_3)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_4)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_5)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_6)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_7)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_8)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_9)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_10)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_11)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_12)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_13)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_14)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_15)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_16)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_17)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_18)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_19)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_20)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_21)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_22)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_23)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_24)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_25)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_26)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_27)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_28)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_29)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_30)-LOCAL(ashrsi3_table)
+ .byte LOCAL(ashrsi3_31)-LOCAL(ashrsi3_table)
+
+LOCAL(ashrsi3_31):
+ rotcl r0
+ rts
+ subc r0,r0
+
+LOCAL(ashrsi3_30):
+ shar r0
+LOCAL(ashrsi3_29):
+ shar r0
+LOCAL(ashrsi3_28):
+ shar r0
+LOCAL(ashrsi3_27):
+ shar r0
+LOCAL(ashrsi3_26):
+ shar r0
+LOCAL(ashrsi3_25):
+ shar r0
+LOCAL(ashrsi3_24):
+ shlr16 r0
+ shlr8 r0
+ rts
+ exts.b r0,r0
+
+LOCAL(ashrsi3_23):
+ shar r0
+LOCAL(ashrsi3_22):
+ shar r0
+LOCAL(ashrsi3_21):
+ shar r0
+LOCAL(ashrsi3_20):
+ shar r0
+LOCAL(ashrsi3_19):
+ shar r0
+LOCAL(ashrsi3_18):
+ shar r0
+LOCAL(ashrsi3_17):
+ shar r0
+LOCAL(ashrsi3_16):
+ shlr16 r0
+ rts
+ exts.w r0,r0
+
+LOCAL(ashrsi3_15):
+ shar r0
+LOCAL(ashrsi3_14):
+ shar r0
+LOCAL(ashrsi3_13):
+ shar r0
+LOCAL(ashrsi3_12):
+ shar r0
+LOCAL(ashrsi3_11):
+ shar r0
+LOCAL(ashrsi3_10):
+ shar r0
+LOCAL(ashrsi3_9):
+ shar r0
+LOCAL(ashrsi3_8):
+ shar r0
+LOCAL(ashrsi3_7):
+ shar r0
+LOCAL(ashrsi3_6):
+ shar r0
+LOCAL(ashrsi3_5):
+ shar r0
+LOCAL(ashrsi3_4):
+ shar r0
+LOCAL(ashrsi3_3):
+ shar r0
+LOCAL(ashrsi3_2):
+ shar r0
+LOCAL(ashrsi3_1):
+ rts
+ shar r0
+
+LOCAL(ashrsi3_0):
+ rts
+ nop
+
+ ENDFUNC(GLOBAL(ashrsi3))
+#endif
+
+#ifdef L_ashiftlt
+
+!
+! GLOBAL(ashlsi3)
+! (For compatibility with older binaries, not used by compiler)
+!
+! Entry:
+! r4: Value to shift
+! r5: Shift count
+!
+! Exit:
+! r0: Result
+!
+! Destroys:
+! T bit
+!
+!
+! GLOBAL(ashlsi3_r0)
+!
+! Entry:
+! r4: Value to shift
+! r0: Shift count
+!
+! Exit:
+! r0: Result
+!
+! Destroys:
+! T bit
+
+ .global GLOBAL(ashlsi3)
+ .global GLOBAL(ashlsi3_r0)
+ HIDDEN_FUNC(GLOBAL(ashlsi3))
+ HIDDEN_FUNC(GLOBAL(ashlsi3_r0))
+GLOBAL(ashlsi3):
+ mov r5,r0
+ .align 2
+GLOBAL(ashlsi3_r0):
+
+#ifdef __sh1__
+ and #31,r0
+ shll2 r0
+ mov.l r4,@-r15
+ mov r0,r4
+ mova LOCAL(ashlsi3_table),r0
+ add r4,r0
+ mov.l @r15+,r4
+ jmp @r0
+ mov r4,r0
+ .align 2
+#else
+ and #31,r0
+ shll2 r0
+ braf r0
+ mov r4,r0
+#endif
+
+LOCAL(ashlsi3_table):
+ rts // << 0
+ nop
+LOCAL(ashlsi_1):
+ rts // << 1
+ shll r0
+LOCAL(ashlsi_2): // << 2
+ rts
+ shll2 r0
+ bra LOCAL(ashlsi_1) // << 3
+ shll2 r0
+ bra LOCAL(ashlsi_2) // << 4
+ shll2 r0
+ bra LOCAL(ashlsi_5) // << 5
+ shll r0
+ bra LOCAL(ashlsi_6) // << 6
+ shll2 r0
+ bra LOCAL(ashlsi_7) // << 7
+ shll r0
+LOCAL(ashlsi_8): // << 8
+ rts
+ shll8 r0
+ bra LOCAL(ashlsi_8) // << 9
+ shll r0
+ bra LOCAL(ashlsi_8) // << 10
+ shll2 r0
+ bra LOCAL(ashlsi_11) // << 11
+ shll r0
+ bra LOCAL(ashlsi_12) // << 12
+ shll2 r0
+ bra LOCAL(ashlsi_13) // << 13
+ shll r0
+ bra LOCAL(ashlsi_14) // << 14
+ shll8 r0
+ bra LOCAL(ashlsi_15) // << 15
+ shll8 r0
+LOCAL(ashlsi_16): // << 16
+ rts
+ shll16 r0
+ bra LOCAL(ashlsi_16) // << 17
+ shll r0
+ bra LOCAL(ashlsi_16) // << 18
+ shll2 r0
+ bra LOCAL(ashlsi_19) // << 19
+ shll r0
+ bra LOCAL(ashlsi_20) // << 20
+ shll2 r0
+ bra LOCAL(ashlsi_21) // << 21
+ shll r0
+ bra LOCAL(ashlsi_22) // << 22
+ shll16 r0
+ bra LOCAL(ashlsi_23) // << 23
+ shll16 r0
+ bra LOCAL(ashlsi_16) // << 24
+ shll8 r0
+ bra LOCAL(ashlsi_25) // << 25
+ shll r0
+ bra LOCAL(ashlsi_26) // << 26
+ shll2 r0
+ bra LOCAL(ashlsi_27) // << 27
+ shll r0
+ bra LOCAL(ashlsi_28) // << 28
+ shll2 r0
+ bra LOCAL(ashlsi_29) // << 29
+ shll16 r0
+ bra LOCAL(ashlsi_30) // << 30
+ shll16 r0
+ and #1,r0 // << 31
+ rts
+ rotr r0
+
+LOCAL(ashlsi_7):
+ shll2 r0
+LOCAL(ashlsi_5):
+LOCAL(ashlsi_6):
+ shll2 r0
+ rts
+LOCAL(ashlsi_13):
+ shll2 r0
+LOCAL(ashlsi_12):
+LOCAL(ashlsi_11):
+ shll8 r0
+ rts
+LOCAL(ashlsi_21):
+ shll2 r0
+LOCAL(ashlsi_20):
+LOCAL(ashlsi_19):
+ shll16 r0
+ rts
+LOCAL(ashlsi_28):
+LOCAL(ashlsi_27):
+ shll2 r0
+LOCAL(ashlsi_26):
+LOCAL(ashlsi_25):
+ shll16 r0
+ rts
+ shll8 r0
+
+LOCAL(ashlsi_22):
+LOCAL(ashlsi_14):
+ shlr2 r0
+ rts
+ shll8 r0
+
+LOCAL(ashlsi_23):
+LOCAL(ashlsi_15):
+ shlr r0
+ rts
+ shll8 r0
+
+LOCAL(ashlsi_29):
+ shlr r0
+LOCAL(ashlsi_30):
+ shlr2 r0
+ rts
+ shll16 r0
+
+ ENDFUNC(GLOBAL(ashlsi3))
+ ENDFUNC(GLOBAL(ashlsi3_r0))
+#endif
+
+#ifdef L_lshiftrt
+
+!
+! GLOBAL(lshrsi3)
+! (For compatibility with older binaries, not used by compiler)
+!
+! Entry:
+! r4: Value to shift
+! r5: Shift count
+!
+! Exit:
+! r0: Result
+!
+! Destroys:
+! T bit
+!
+!
+! GLOBAL(lshrsi3_r0)
+!
+! Entry:
+! r4: Value to shift
+! r0: Shift count
+!
+! Exit:
+! r0: Result
+!
+! Destroys:
+! T bit
+
+ .global GLOBAL(lshrsi3)
+ .global GLOBAL(lshrsi3_r0)
+ HIDDEN_FUNC(GLOBAL(lshrsi3))
+ HIDDEN_FUNC(GLOBAL(lshrsi3_r0))
+GLOBAL(lshrsi3):
+ mov r5,r0
+ .align 2
+GLOBAL(lshrsi3_r0):
+
+#ifdef __sh1__
+ and #31,r0
+ shll2 r0
+ mov.l r4,@-r15
+ mov r0,r4
+ mova LOCAL(lshrsi3_table),r0
+ add r4,r0
+ mov.l @r15+,r4
+ jmp @r0
+ mov r4,r0
+ .align 2
+#else
+ and #31,r0
+ shll2 r0
+ braf r0
+ mov r4,r0
+#endif
+LOCAL(lshrsi3_table):
+ rts // >> 0
+ nop
+LOCAL(lshrsi_1): // >> 1
+ rts
+ shlr r0
+LOCAL(lshrsi_2): // >> 2
+ rts
+ shlr2 r0
+ bra LOCAL(lshrsi_1) // >> 3
+ shlr2 r0
+ bra LOCAL(lshrsi_2) // >> 4
+ shlr2 r0
+ bra LOCAL(lshrsi_5) // >> 5
+ shlr r0
+ bra LOCAL(lshrsi_6) // >> 6
+ shlr2 r0
+ bra LOCAL(lshrsi_7) // >> 7
+ shlr r0
+LOCAL(lshrsi_8): // >> 8
+ rts
+ shlr8 r0
+ bra LOCAL(lshrsi_8) // >> 9
+ shlr r0
+ bra LOCAL(lshrsi_8) // >> 10
+ shlr2 r0
+ bra LOCAL(lshrsi_11) // >> 11
+ shlr r0
+ bra LOCAL(lshrsi_12) // >> 12
+ shlr2 r0
+ bra LOCAL(lshrsi_13) // >> 13
+ shlr r0
+ bra LOCAL(lshrsi_14) // >> 14
+ shlr8 r0
+ bra LOCAL(lshrsi_15) // >> 15
+ shlr8 r0
+LOCAL(lshrsi_16): // >> 16
+ rts
+ shlr16 r0
+ bra LOCAL(lshrsi_16) // >> 17
+ shlr r0
+ bra LOCAL(lshrsi_16) // >> 18
+ shlr2 r0
+ bra LOCAL(lshrsi_19) // >> 19
+ shlr r0
+ bra LOCAL(lshrsi_20) // >> 20
+ shlr2 r0
+ bra LOCAL(lshrsi_21) // >> 21
+ shlr r0
+ bra LOCAL(lshrsi_22) // >> 22
+ shlr16 r0
+ bra LOCAL(lshrsi_23) // >> 23
+ shlr16 r0
+ bra LOCAL(lshrsi_16) // >> 24
+ shlr8 r0
+ bra LOCAL(lshrsi_25) // >> 25
+ shlr r0
+ bra LOCAL(lshrsi_26) // >> 26
+ shlr2 r0
+ bra LOCAL(lshrsi_27) // >> 27
+ shlr r0
+ bra LOCAL(lshrsi_28) // >> 28
+ shlr2 r0
+ bra LOCAL(lshrsi_29) // >> 29
+ shlr16 r0
+ bra LOCAL(lshrsi_30) // >> 30
+ shlr16 r0
+ shll r0 // >> 31
+ rts
+ movt r0
+
+LOCAL(lshrsi_7):
+ shlr2 r0
+LOCAL(lshrsi_5):
+LOCAL(lshrsi_6):
+ shlr2 r0
+ rts
+LOCAL(lshrsi_13):
+ shlr2 r0
+LOCAL(lshrsi_12):
+LOCAL(lshrsi_11):
+ shlr8 r0
+ rts
+LOCAL(lshrsi_21):
+ shlr2 r0
+LOCAL(lshrsi_20):
+LOCAL(lshrsi_19):
+ shlr16 r0
+ rts
+LOCAL(lshrsi_28):
+LOCAL(lshrsi_27):
+ shlr2 r0
+LOCAL(lshrsi_26):
+LOCAL(lshrsi_25):
+ shlr16 r0
+ rts
+ shlr8 r0
+
+LOCAL(lshrsi_22):
+LOCAL(lshrsi_14):
+ shll2 r0
+ rts
+ shlr8 r0
+
+LOCAL(lshrsi_23):
+LOCAL(lshrsi_15):
+ shll r0
+ rts
+ shlr8 r0
+
+LOCAL(lshrsi_29):
+ shll r0
+LOCAL(lshrsi_30):
+ shll2 r0
+ rts
+ shlr16 r0
+
+ ENDFUNC(GLOBAL(lshrsi3))
+ ENDFUNC(GLOBAL(lshrsi3_r0))
+#endif
+
+#ifdef L_movmem
+ .text
+ .balign 4
+ .global GLOBAL(movmem)
+ HIDDEN_FUNC(GLOBAL(movmem))
+ HIDDEN_ALIAS(movstr,movmem)
+ /* This would be a lot simpler if r6 contained the byte count
+ minus 64, and we wouldn't be called here for a byte count of 64. */
+GLOBAL(movmem):
+ sts.l pr,@-r15
+ shll2 r6
+ bsr GLOBAL(movmemSI52+2)
+ mov.l @(48,r5),r0
+ .balign 4
+LOCAL(movmem_loop): /* Reached with rts */
+ mov.l @(60,r5),r0
+ add #-64,r6
+ mov.l r0,@(60,r4)
+ tst r6,r6
+ mov.l @(56,r5),r0
+ bt LOCAL(movmem_done)
+ mov.l r0,@(56,r4)
+ cmp/pl r6
+ mov.l @(52,r5),r0
+ add #64,r5
+ mov.l r0,@(52,r4)
+ add #64,r4
+ bt GLOBAL(movmemSI52)
+! done all the large groups, do the remainder
+! jump to movmem+
+ mova GLOBAL(movmemSI4)+4,r0
+ add r6,r0
+ jmp @r0
+LOCAL(movmem_done): ! share slot insn, works out aligned.
+ lds.l @r15+,pr
+ mov.l r0,@(56,r4)
+ mov.l @(52,r5),r0
+ rts
+ mov.l r0,@(52,r4)
+ .balign 4
+! ??? We need aliases movstr* for movmem* for the older libraries. These
+! aliases will be removed at the some point in the future.
+ .global GLOBAL(movmemSI64)
+ HIDDEN_FUNC(GLOBAL(movmemSI64))
+ HIDDEN_ALIAS(movstrSI64,movmemSI64)
+GLOBAL(movmemSI64):
+ mov.l @(60,r5),r0
+ mov.l r0,@(60,r4)
+ .global GLOBAL(movmemSI60)
+ HIDDEN_FUNC(GLOBAL(movmemSI60))
+ HIDDEN_ALIAS(movstrSI60,movmemSI60)
+GLOBAL(movmemSI60):
+ mov.l @(56,r5),r0
+ mov.l r0,@(56,r4)
+ .global GLOBAL(movmemSI56)
+ HIDDEN_FUNC(GLOBAL(movmemSI56))
+ HIDDEN_ALIAS(movstrSI56,movmemSI56)
+GLOBAL(movmemSI56):
+ mov.l @(52,r5),r0
+ mov.l r0,@(52,r4)
+ .global GLOBAL(movmemSI52)
+ HIDDEN_FUNC(GLOBAL(movmemSI52))
+ HIDDEN_ALIAS(movstrSI52,movmemSI52)
+GLOBAL(movmemSI52):
+ mov.l @(48,r5),r0
+ mov.l r0,@(48,r4)
+ .global GLOBAL(movmemSI48)
+ HIDDEN_FUNC(GLOBAL(movmemSI48))
+ HIDDEN_ALIAS(movstrSI48,movmemSI48)
+GLOBAL(movmemSI48):
+ mov.l @(44,r5),r0
+ mov.l r0,@(44,r4)
+ .global GLOBAL(movmemSI44)
+ HIDDEN_FUNC(GLOBAL(movmemSI44))
+ HIDDEN_ALIAS(movstrSI44,movmemSI44)
+GLOBAL(movmemSI44):
+ mov.l @(40,r5),r0
+ mov.l r0,@(40,r4)
+ .global GLOBAL(movmemSI40)
+ HIDDEN_FUNC(GLOBAL(movmemSI40))
+ HIDDEN_ALIAS(movstrSI40,movmemSI40)
+GLOBAL(movmemSI40):
+ mov.l @(36,r5),r0
+ mov.l r0,@(36,r4)
+ .global GLOBAL(movmemSI36)
+ HIDDEN_FUNC(GLOBAL(movmemSI36))
+ HIDDEN_ALIAS(movstrSI36,movmemSI36)
+GLOBAL(movmemSI36):
+ mov.l @(32,r5),r0
+ mov.l r0,@(32,r4)
+ .global GLOBAL(movmemSI32)
+ HIDDEN_FUNC(GLOBAL(movmemSI32))
+ HIDDEN_ALIAS(movstrSI32,movmemSI32)
+GLOBAL(movmemSI32):
+ mov.l @(28,r5),r0
+ mov.l r0,@(28,r4)
+ .global GLOBAL(movmemSI28)
+ HIDDEN_FUNC(GLOBAL(movmemSI28))
+ HIDDEN_ALIAS(movstrSI28,movmemSI28)
+GLOBAL(movmemSI28):
+ mov.l @(24,r5),r0
+ mov.l r0,@(24,r4)
+ .global GLOBAL(movmemSI24)
+ HIDDEN_FUNC(GLOBAL(movmemSI24))
+ HIDDEN_ALIAS(movstrSI24,movmemSI24)
+GLOBAL(movmemSI24):
+ mov.l @(20,r5),r0
+ mov.l r0,@(20,r4)
+ .global GLOBAL(movmemSI20)
+ HIDDEN_FUNC(GLOBAL(movmemSI20))
+ HIDDEN_ALIAS(movstrSI20,movmemSI20)
+GLOBAL(movmemSI20):
+ mov.l @(16,r5),r0
+ mov.l r0,@(16,r4)
+ .global GLOBAL(movmemSI16)
+ HIDDEN_FUNC(GLOBAL(movmemSI16))
+ HIDDEN_ALIAS(movstrSI16,movmemSI16)
+GLOBAL(movmemSI16):
+ mov.l @(12,r5),r0
+ mov.l r0,@(12,r4)
+ .global GLOBAL(movmemSI12)
+ HIDDEN_FUNC(GLOBAL(movmemSI12))
+ HIDDEN_ALIAS(movstrSI12,movmemSI12)
+GLOBAL(movmemSI12):
+ mov.l @(8,r5),r0
+ mov.l r0,@(8,r4)
+ .global GLOBAL(movmemSI8)
+ HIDDEN_FUNC(GLOBAL(movmemSI8))
+ HIDDEN_ALIAS(movstrSI8,movmemSI8)
+GLOBAL(movmemSI8):
+ mov.l @(4,r5),r0
+ mov.l r0,@(4,r4)
+ .global GLOBAL(movmemSI4)
+ HIDDEN_FUNC(GLOBAL(movmemSI4))
+ HIDDEN_ALIAS(movstrSI4,movmemSI4)
+GLOBAL(movmemSI4):
+ mov.l @(0,r5),r0
+ rts
+ mov.l r0,@(0,r4)
+
+ ENDFUNC(GLOBAL(movmemSI64))
+ ENDFUNC(GLOBAL(movmemSI60))
+ ENDFUNC(GLOBAL(movmemSI56))
+ ENDFUNC(GLOBAL(movmemSI52))
+ ENDFUNC(GLOBAL(movmemSI48))
+ ENDFUNC(GLOBAL(movmemSI44))
+ ENDFUNC(GLOBAL(movmemSI40))
+ ENDFUNC(GLOBAL(movmemSI36))
+ ENDFUNC(GLOBAL(movmemSI32))
+ ENDFUNC(GLOBAL(movmemSI28))
+ ENDFUNC(GLOBAL(movmemSI24))
+ ENDFUNC(GLOBAL(movmemSI20))
+ ENDFUNC(GLOBAL(movmemSI16))
+ ENDFUNC(GLOBAL(movmemSI12))
+ ENDFUNC(GLOBAL(movmemSI8))
+ ENDFUNC(GLOBAL(movmemSI4))
+ ENDFUNC(GLOBAL(movmem))
+#endif
+
+#ifdef L_movmem_i4
+ .text
+ .global GLOBAL(movmem_i4_even)
+ .global GLOBAL(movmem_i4_odd)
+ .global GLOBAL(movmemSI12_i4)
+
+ HIDDEN_FUNC(GLOBAL(movmem_i4_even))
+ HIDDEN_FUNC(GLOBAL(movmem_i4_odd))
+ HIDDEN_FUNC(GLOBAL(movmemSI12_i4))
+
+ HIDDEN_ALIAS(movstr_i4_even,movmem_i4_even)
+ HIDDEN_ALIAS(movstr_i4_odd,movmem_i4_odd)
+ HIDDEN_ALIAS(movstrSI12_i4,movmemSI12_i4)
+
+ .p2align 5
+L_movmem_2mod4_end:
+ mov.l r0,@(16,r4)
+ rts
+ mov.l r1,@(20,r4)
+
+ .p2align 2
+
+GLOBAL(movmem_i4_even):
+ mov.l @r5+,r0
+ bra L_movmem_start_even
+ mov.l @r5+,r1
+
+GLOBAL(movmem_i4_odd):
+ mov.l @r5+,r1
+ add #-4,r4
+ mov.l @r5+,r2
+ mov.l @r5+,r3
+ mov.l r1,@(4,r4)
+ mov.l r2,@(8,r4)
+
+L_movmem_loop:
+ mov.l r3,@(12,r4)
+ dt r6
+ mov.l @r5+,r0
+ bt/s L_movmem_2mod4_end
+ mov.l @r5+,r1
+ add #16,r4
+L_movmem_start_even:
+ mov.l @r5+,r2
+ mov.l @r5+,r3
+ mov.l r0,@r4
+ dt r6
+ mov.l r1,@(4,r4)
+ bf/s L_movmem_loop
+ mov.l r2,@(8,r4)
+ rts
+ mov.l r3,@(12,r4)
+
+ ENDFUNC(GLOBAL(movmem_i4_even))
+ ENDFUNC(GLOBAL(movmem_i4_odd))
+
+ .p2align 4
+GLOBAL(movmemSI12_i4):
+ mov.l @r5,r0
+ mov.l @(4,r5),r1
+ mov.l @(8,r5),r2
+ mov.l r0,@r4
+ mov.l r1,@(4,r4)
+ rts
+ mov.l r2,@(8,r4)
+
+ ENDFUNC(GLOBAL(movmemSI12_i4))
+#endif
+
+#ifdef L_mulsi3
+
+
+ .global GLOBAL(mulsi3)
+ HIDDEN_FUNC(GLOBAL(mulsi3))
+
+! r4 = aabb
+! r5 = ccdd
+! r0 = aabb*ccdd via partial products
+!
+! if aa == 0 and cc = 0
+! r0 = bb*dd
+!
+! else
+! aa = bb*dd + (aa*dd*65536) + (cc*bb*65536)
+!
+
+GLOBAL(mulsi3):
+ mulu.w r4,r5 ! multiply the lsws macl=bb*dd
+ mov r5,r3 ! r3 = ccdd
+ swap.w r4,r2 ! r2 = bbaa
+ xtrct r2,r3 ! r3 = aacc
+ tst r3,r3 ! msws zero ?
+ bf hiset
+ rts ! yes - then we have the answer
+ sts macl,r0
+
+hiset: sts macl,r0 ! r0 = bb*dd
+ mulu.w r2,r5 ! brewing macl = aa*dd
+ sts macl,r1
+ mulu.w r3,r4 ! brewing macl = cc*bb
+ sts macl,r2
+ add r1,r2
+ shll16 r2
+ rts
+ add r2,r0
+
+ ENDFUNC(GLOBAL(mulsi3))
+#endif
+#endif /* ! __SH5__ */
+
+/*------------------------------------------------------------------------------
+ 32 bit signed integer division that uses FPU double precision division. */
+
+#ifdef L_sdivsi3_i4
+ .title "SH DIVIDE"
+
+#if defined (__SH4__) || defined (__SH2A__)
+/* This variant is used when FPSCR.PR = 1 (double precision) is the default
+ setting.
+ Args in r4 and r5, result in fpul, clobber dr0, dr2. */
+
+ .global GLOBAL(sdivsi3_i4)
+ HIDDEN_FUNC(GLOBAL(sdivsi3_i4))
+GLOBAL(sdivsi3_i4):
+ lds r4,fpul
+ float fpul,dr0
+ lds r5,fpul
+ float fpul,dr2
+ fdiv dr2,dr0
+ rts
+ ftrc dr0,fpul
+
+ ENDFUNC(GLOBAL(sdivsi3_i4))
+
+#elif defined (__SH2A_SINGLE__) || defined (__SH2A_SINGLE_ONLY__) || defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
+/* This variant is used when FPSCR.PR = 0 (sigle precision) is the default
+ setting.
+ Args in r4 and r5, result in fpul, clobber r2, dr0, dr2.
+ For this to work, we must temporarily switch the FPU do double precision,
+ but we better do not touch FPSCR.FR. See PR 6526. */
+
+#if ! __SH5__ || __SH5__ == 32
+#if __SH5__
+ .mode SHcompact
+#endif
+ .global GLOBAL(sdivsi3_i4)
+ HIDDEN_FUNC(GLOBAL(sdivsi3_i4))
+GLOBAL(sdivsi3_i4):
+
+#ifndef __SH4A__
+ mov.l r3,@-r15
+ sts fpscr,r2
+ mov #8,r3
+ swap.w r3,r3 // r3 = 1 << 19 (FPSCR.PR bit)
+ or r2,r3
+ lds r3,fpscr // Set FPSCR.PR = 1.
+ lds r4,fpul
+ float fpul,dr0
+ lds r5,fpul
+ float fpul,dr2
+ fdiv dr2,dr0
+ ftrc dr0,fpul
+ lds r2,fpscr
+ rts
+ mov.l @r15+,r3
+#else
+/* On SH4A we can use the fpchg instruction to flip the FPSCR.PR bit. */
+ fpchg
+ lds r4,fpul
+ float fpul,dr0
+ lds r5,fpul
+ float fpul,dr2
+ fdiv dr2,dr0
+ ftrc dr0,fpul
+ rts
+ fpchg
+
+#endif /* __SH4A__ */
+
+ ENDFUNC(GLOBAL(sdivsi3_i4))
+#endif /* ! __SH5__ || __SH5__ == 32 */
+#endif /* ! __SH4__ || __SH2A__ */
+#endif /* L_sdivsi3_i4 */
+
+//------------------------------------------------------------------------------
+#ifdef L_sdivsi3
+/* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with
+ sh2e/sh3e code. */
+!!
+!! Steve Chamberlain
+!! sac@cygnus.com
+!!
+!!
+
+!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit
+
+ .global GLOBAL(sdivsi3)
+#if __SHMEDIA__
+#if __SH5__ == 32
+ .section .text..SHmedia32,"ax"
+#else
+ .text
+#endif
+ .align 2
+#if 0
+/* The assembly code that follows is a hand-optimized version of the C
+ code that follows. Note that the registers that are modified are
+ exactly those listed as clobbered in the patterns divsi3_i1 and
+ divsi3_i1_media.
+
+int __sdivsi3 (i, j)
+ int i, j;
+{
+ register unsigned long long r18 asm ("r18");
+ register unsigned long long r19 asm ("r19");
+ register unsigned long long r0 asm ("r0") = 0;
+ register unsigned long long r1 asm ("r1") = 1;
+ register int r2 asm ("r2") = i >> 31;
+ register int r3 asm ("r3") = j >> 31;
+
+ r2 = r2 ? r2 : r1;
+ r3 = r3 ? r3 : r1;
+ r18 = i * r2;
+ r19 = j * r3;
+ r2 *= r3;
+
+ r19 <<= 31;
+ r1 <<= 31;
+ do
+ if (r18 >= r19)
+ r0 |= r1, r18 -= r19;
+ while (r19 >>= 1, r1 >>= 1);
+
+ return r2 * (int)r0;
+}
+*/
+GLOBAL(sdivsi3):
+ pt/l LOCAL(sdivsi3_dontadd), tr2
+ pt/l LOCAL(sdivsi3_loop), tr1
+ ptabs/l r18, tr0
+ movi 0, r0
+ movi 1, r1
+ shari.l r4, 31, r2
+ shari.l r5, 31, r3
+ cmveq r2, r1, r2
+ cmveq r3, r1, r3
+ muls.l r4, r2, r18
+ muls.l r5, r3, r19
+ muls.l r2, r3, r2
+ shlli r19, 31, r19
+ shlli r1, 31, r1
+LOCAL(sdivsi3_loop):
+ bgtu r19, r18, tr2
+ or r0, r1, r0
+ sub r18, r19, r18
+LOCAL(sdivsi3_dontadd):
+ shlri r1, 1, r1
+ shlri r19, 1, r19
+ bnei r1, 0, tr1
+ muls.l r0, r2, r0
+ add.l r0, r63, r0
+ blink tr0, r63
+#elif 0 /* ! 0 */
+ // inputs: r4,r5
+ // clobbered: r1,r2,r3,r18,r19,r20,r21,r25,tr0
+ // result in r0
+GLOBAL(sdivsi3):
+ // can create absolute value without extra latency,
+ // but dependent on proper sign extension of inputs:
+ // shari.l r5,31,r2
+ // xor r5,r2,r20
+ // sub r20,r2,r20 // r20 is now absolute value of r5, zero-extended.
+ shari.l r5,31,r2
+ ori r2,1,r2
+ muls.l r5,r2,r20 // r20 is now absolute value of r5, zero-extended.
+ movi 0xffffffffffffbb0c,r19 // shift count eqiv 76
+ shari.l r4,31,r3
+ nsb r20,r0
+ shlld r20,r0,r25
+ shlri r25,48,r25
+ sub r19,r25,r1
+ mmulfx.w r1,r1,r2
+ mshflo.w r1,r63,r1
+ // If r4 was to be used in-place instead of r21, could use this sequence
+ // to compute absolute:
+ // sub r63,r4,r19 // compute absolute value of r4
+ // shlri r4,32,r3 // into lower 32 bit of r4, keeping
+ // mcmv r19,r3,r4 // the sign in the upper 32 bits intact.
+ ori r3,1,r3
+ mmulfx.w r25,r2,r2
+ sub r19,r0,r0
+ muls.l r4,r3,r21
+ msub.w r1,r2,r2
+ addi r2,-2,r1
+ mulu.l r21,r1,r19
+ mmulfx.w r2,r2,r2
+ shlli r1,15,r1
+ shlrd r19,r0,r19
+ mulu.l r19,r20,r3
+ mmacnfx.wl r25,r2,r1
+ ptabs r18,tr0
+ sub r21,r3,r25
+
+ mulu.l r25,r1,r2
+ addi r0,14,r0
+ xor r4,r5,r18
+ shlrd r2,r0,r2
+ mulu.l r2,r20,r3
+ add r19,r2,r19
+ shari.l r18,31,r18
+ sub r25,r3,r25
+
+ mulu.l r25,r1,r2
+ sub r25,r20,r25
+ add r19,r18,r19
+ shlrd r2,r0,r2
+ mulu.l r2,r20,r3
+ addi r25,1,r25
+ add r19,r2,r19
+
+ cmpgt r25,r3,r25
+ add.l r19,r25,r0
+ xor r0,r18,r0
+ blink tr0,r63
+#else /* ! 0 && ! 0 */
+
+ // inputs: r4,r5
+ // clobbered: r1,r18,r19,r20,r21,r25,tr0
+ // result in r0
+ HIDDEN_FUNC(GLOBAL(sdivsi3_2))
+#ifndef __pic__
+ FUNC(GLOBAL(sdivsi3))
+GLOBAL(sdivsi3): /* this is the shcompact entry point */
+ // The special SHmedia entry point sdivsi3_1 prevents accidental linking
+ // with the SHcompact implementation, which clobbers tr1 / tr2.
+ .global GLOBAL(sdivsi3_1)
+GLOBAL(sdivsi3_1):
+ .global GLOBAL(div_table_internal)
+ movi (GLOBAL(div_table_internal) >> 16) & 65535, r20
+ shori GLOBAL(div_table_internal) & 65535, r20
+#endif
+ .global GLOBAL(sdivsi3_2)
+ // div_table in r20
+ // clobbered: r1,r18,r19,r21,r25,tr0
+GLOBAL(sdivsi3_2):
+ nsb r5, r1
+ shlld r5, r1, r25 // normalize; [-2 ..1, 1..2) in s2.62
+ shari r25, 58, r21 // extract 5(6) bit index (s2.4 with hole -1..1)
+ ldx.ub r20, r21, r19 // u0.8
+ shari r25, 32, r25 // normalize to s2.30
+ shlli r21, 1, r21
+ muls.l r25, r19, r19 // s2.38
+ ldx.w r20, r21, r21 // s2.14
+ ptabs r18, tr0
+ shari r19, 24, r19 // truncate to s2.14
+ sub r21, r19, r19 // some 11 bit inverse in s1.14
+ muls.l r19, r19, r21 // u0.28
+ sub r63, r1, r1
+ addi r1, 92, r1
+ muls.l r25, r21, r18 // s2.58
+ shlli r19, 45, r19 // multiply by two and convert to s2.58
+ /* bubble */
+ sub r19, r18, r18
+ shari r18, 28, r18 // some 22 bit inverse in s1.30
+ muls.l r18, r25, r0 // s2.60
+ muls.l r18, r4, r25 // s32.30
+ /* bubble */
+ shari r0, 16, r19 // s-16.44
+ muls.l r19, r18, r19 // s-16.74
+ shari r25, 63, r0
+ shari r4, 14, r18 // s19.-14
+ shari r19, 30, r19 // s-16.44
+ muls.l r19, r18, r19 // s15.30
+ xor r21, r0, r21 // You could also use the constant 1 << 27.
+ add r21, r25, r21
+ sub r21, r19, r21
+ shard r21, r1, r21
+ sub r21, r0, r0
+ blink tr0, r63
+#ifndef __pic__
+ ENDFUNC(GLOBAL(sdivsi3))
+#endif
+ ENDFUNC(GLOBAL(sdivsi3_2))
+#endif
+#elif defined __SHMEDIA__
+/* m5compact-nofpu */
+ // clobbered: r18,r19,r20,r21,r25,tr0,tr1,tr2
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+ FUNC(GLOBAL(sdivsi3))
+GLOBAL(sdivsi3):
+ pt/l LOCAL(sdivsi3_dontsub), tr0
+ pt/l LOCAL(sdivsi3_loop), tr1
+ ptabs/l r18,tr2
+ shari.l r4,31,r18
+ shari.l r5,31,r19
+ xor r4,r18,r20
+ xor r5,r19,r21
+ sub.l r20,r18,r20
+ sub.l r21,r19,r21
+ xor r18,r19,r19
+ shlli r21,32,r25
+ addi r25,-1,r21
+ addz.l r20,r63,r20
+LOCAL(sdivsi3_loop):
+ shlli r20,1,r20
+ bgeu/u r21,r20,tr0
+ sub r20,r21,r20
+LOCAL(sdivsi3_dontsub):
+ addi.l r25,-1,r25
+ bnei r25,-32,tr1
+ xor r20,r19,r20
+ sub.l r20,r19,r0
+ blink tr2,r63
+ ENDFUNC(GLOBAL(sdivsi3))
+#else /* ! __SHMEDIA__ */
+ FUNC(GLOBAL(sdivsi3))
+GLOBAL(sdivsi3):
+ mov r4,r1
+ mov r5,r0
+
+ tst r0,r0
+ bt div0
+ mov #0,r2
+ div0s r2,r1
+ subc r3,r3
+ subc r2,r1
+ div0s r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ div1 r0,r3
+ rotcl r1
+ addc r2,r1
+ rts
+ mov r1,r0
+
+
+div0: rts
+ mov #0,r0
+
+ ENDFUNC(GLOBAL(sdivsi3))
+#endif /* ! __SHMEDIA__ */
+#endif /* L_sdivsi3 */
+
+/*------------------------------------------------------------------------------
+ 32 bit unsigned integer division that uses FPU double precision division. */
+
+#ifdef L_udivsi3_i4
+ .title "SH DIVIDE"
+
+#if defined (__SH4__) || defined (__SH2A__)
+/* This variant is used when FPSCR.PR = 1 (double precision) is the default
+ setting.
+ Args in r4 and r5, result in fpul,
+ clobber r0, r1, r4, r5, dr0, dr2, dr4, and t bit */
+
+ .global GLOBAL(udivsi3_i4)
+ HIDDEN_FUNC(GLOBAL(udivsi3_i4))
+GLOBAL(udivsi3_i4):
+ mov #1,r1
+ cmp/hi r1,r5
+ bf/s trivial
+ rotr r1
+ xor r1,r4
+ lds r4,fpul
+ mova L1,r0
+#ifdef FMOVD_WORKS
+ fmov.d @r0+,dr4
+#else
+ fmov.s @r0+,DR40
+ fmov.s @r0,DR41
+#endif
+ float fpul,dr0
+ xor r1,r5
+ lds r5,fpul
+ float fpul,dr2
+ fadd dr4,dr0
+ fadd dr4,dr2
+ fdiv dr2,dr0
+ rts
+ ftrc dr0,fpul
+
+trivial:
+ rts
+ lds r4,fpul
+
+ .align 2
+#ifdef FMOVD_WORKS
+ .align 3 // Make the double below 8 byte aligned.
+#endif
+L1:
+ .double 2147483648
+
+ ENDFUNC(GLOBAL(udivsi3_i4))
+
+#elif defined (__SH5__) && ! defined (__SH4_NOFPU__) && ! defined (__SH2A_NOFPU__)
+#if ! __SH5__ || __SH5__ == 32
+!! args in r4 and r5, result in fpul, clobber r20, r21, dr0, fr33
+ .mode SHmedia
+ .global GLOBAL(udivsi3_i4)
+ HIDDEN_FUNC(GLOBAL(udivsi3_i4))
+GLOBAL(udivsi3_i4):
+ addz.l r4,r63,r20
+ addz.l r5,r63,r21
+ fmov.qd r20,dr0
+ fmov.qd r21,dr32
+ ptabs r18,tr0
+ float.qd dr0,dr0
+ float.qd dr32,dr32
+ fdiv.d dr0,dr32,dr0
+ ftrc.dq dr0,dr32
+ fmov.s fr33,fr32
+ blink tr0,r63
+
+ ENDFUNC(GLOBAL(udivsi3_i4))
+#endif /* ! __SH5__ || __SH5__ == 32 */
+
+#elif defined (__SH2A_SINGLE__) || defined (__SH2A_SINGLE_ONLY__) || defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
+/* This variant is used when FPSCR.PR = 0 (sigle precision) is the default
+ setting.
+ Args in r4 and r5, result in fpul,
+ clobber r0, r1, r4, r5, dr0, dr2, dr4.
+ For this to work, we must temporarily switch the FPU do double precision,
+ but we better do not touch FPSCR.FR. See PR 6526. */
+
+ .global GLOBAL(udivsi3_i4)
+ HIDDEN_FUNC(GLOBAL(udivsi3_i4))
+GLOBAL(udivsi3_i4):
+
+#ifndef __SH4A__
+ mov #1,r1
+ cmp/hi r1,r5
+ bf/s trivial
+ rotr r1 // r1 = 1 << 31
+ sts.l fpscr,@-r15
+ xor r1,r4
+ mov.l @(0,r15),r0
+ xor r1,r5
+ mov.l L2,r1
+ lds r4,fpul
+ or r0,r1
+ mova L1,r0
+ lds r1,fpscr
+#ifdef FMOVD_WORKS
+ fmov.d @r0+,dr4
+#else
+ fmov.s @r0+,DR40
+ fmov.s @r0,DR41
+#endif
+ float fpul,dr0
+ lds r5,fpul
+ float fpul,dr2
+ fadd dr4,dr0
+ fadd dr4,dr2
+ fdiv dr2,dr0
+ ftrc dr0,fpul
+ rts
+ lds.l @r15+,fpscr
+
+#ifdef FMOVD_WORKS
+ .align 3 // Make the double below 8 byte aligned.
+#endif
+trivial:
+ rts
+ lds r4,fpul
+
+ .align 2
+L2:
+#ifdef FMOVD_WORKS
+ .long 0x180000 // FPSCR.PR = 1, FPSCR.SZ = 1
+#else
+ .long 0x80000 // FPSCR.PR = 1
+#endif
+L1:
+ .double 2147483648
+
+#else
+/* On SH4A we can use the fpchg instruction to flip the FPSCR.PR bit.
+ Although on SH4A fmovd usually works, it would require either additional
+ two fschg instructions or an FPSCR push + pop. It's not worth the effort
+ for loading only one double constant. */
+ mov #1,r1
+ cmp/hi r1,r5
+ bf/s trivial
+ rotr r1 // r1 = 1 << 31
+ fpchg
+ mova L1,r0
+ xor r1,r4
+ fmov.s @r0+,DR40
+ lds r4,fpul
+ fmov.s @r0,DR41
+ xor r1,r5
+ float fpul,dr0
+ lds r5,fpul
+ float fpul,dr2
+ fadd dr4,dr0
+ fadd dr4,dr2
+ fdiv dr2,dr0
+ ftrc dr0,fpul
+ rts
+ fpchg
+
+trivial:
+ rts
+ lds r4,fpul
+
+ .align 2
+L1:
+ .double 2147483648
+
+#endif /* __SH4A__ */
+
+
+ ENDFUNC(GLOBAL(udivsi3_i4))
+#endif /* ! __SH4__ */
+#endif /* L_udivsi3_i4 */
+
+#ifdef L_udivsi3
+/* __SH4_SINGLE_ONLY__ keeps this part for link compatibility with
+ sh2e/sh3e code. */
+
+!! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
+ .global GLOBAL(udivsi3)
+ HIDDEN_FUNC(GLOBAL(udivsi3))
+
+#if __SHMEDIA__
+#if __SH5__ == 32
+ .section .text..SHmedia32,"ax"
+#else
+ .text
+#endif
+ .align 2
+#if 0
+/* The assembly code that follows is a hand-optimized version of the C
+ code that follows. Note that the registers that are modified are
+ exactly those listed as clobbered in the patterns udivsi3_i1 and
+ udivsi3_i1_media.
+
+unsigned
+__udivsi3 (i, j)
+ unsigned i, j;
+{
+ register unsigned long long r0 asm ("r0") = 0;
+ register unsigned long long r18 asm ("r18") = 1;
+ register unsigned long long r4 asm ("r4") = i;
+ register unsigned long long r19 asm ("r19") = j;
+
+ r19 <<= 31;
+ r18 <<= 31;
+ do
+ if (r4 >= r19)
+ r0 |= r18, r4 -= r19;
+ while (r19 >>= 1, r18 >>= 1);
+
+ return r0;
+}
+*/
+GLOBAL(udivsi3):
+ pt/l LOCAL(udivsi3_dontadd), tr2
+ pt/l LOCAL(udivsi3_loop), tr1
+ ptabs/l r18, tr0
+ movi 0, r0
+ movi 1, r18
+ addz.l r5, r63, r19
+ addz.l r4, r63, r4
+ shlli r19, 31, r19
+ shlli r18, 31, r18
+LOCAL(udivsi3_loop):
+ bgtu r19, r4, tr2
+ or r0, r18, r0
+ sub r4, r19, r4
+LOCAL(udivsi3_dontadd):
+ shlri r18, 1, r18
+ shlri r19, 1, r19
+ bnei r18, 0, tr1
+ blink tr0, r63
+#else
+GLOBAL(udivsi3):
+ // inputs: r4,r5
+ // clobbered: r18,r19,r20,r21,r22,r25,tr0
+ // result in r0.
+ addz.l r5,r63,r22
+ nsb r22,r0
+ shlld r22,r0,r25
+ shlri r25,48,r25
+ movi 0xffffffffffffbb0c,r20 // shift count eqiv 76
+ sub r20,r25,r21
+ mmulfx.w r21,r21,r19
+ mshflo.w r21,r63,r21
+ ptabs r18,tr0
+ mmulfx.w r25,r19,r19
+ sub r20,r0,r0
+ /* bubble */
+ msub.w r21,r19,r19
+ addi r19,-2,r21 /* It would be nice for scheduling to do this add to r21
+ before the msub.w, but we need a different value for
+ r19 to keep errors under control. */
+ mulu.l r4,r21,r18
+ mmulfx.w r19,r19,r19
+ shlli r21,15,r21
+ shlrd r18,r0,r18
+ mulu.l r18,r22,r20
+ mmacnfx.wl r25,r19,r21
+ /* bubble */
+ sub r4,r20,r25
+
+ mulu.l r25,r21,r19
+ addi r0,14,r0
+ /* bubble */
+ shlrd r19,r0,r19
+ mulu.l r19,r22,r20
+ add r18,r19,r18
+ /* bubble */
+ sub.l r25,r20,r25
+
+ mulu.l r25,r21,r19
+ addz.l r25,r63,r25
+ sub r25,r22,r25
+ shlrd r19,r0,r19
+ mulu.l r19,r22,r20
+ addi r25,1,r25
+ add r18,r19,r18
+
+ cmpgt r25,r20,r25
+ add.l r18,r25,r0
+ blink tr0,r63
+#endif
+#elif defined (__SHMEDIA__)
+/* m5compact-nofpu - more emphasis on code size than on speed, but don't
+ ignore speed altogether - div1 needs 9 cycles, subc 7 and rotcl 4.
+ So use a short shmedia loop. */
+ // clobbered: r20,r21,r25,tr0,tr1,tr2
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+GLOBAL(udivsi3):
+ pt/l LOCAL(udivsi3_dontsub), tr0
+ pt/l LOCAL(udivsi3_loop), tr1
+ ptabs/l r18,tr2
+ shlli r5,32,r25
+ addi r25,-1,r21
+ addz.l r4,r63,r20
+LOCAL(udivsi3_loop):
+ shlli r20,1,r20
+ bgeu/u r21,r20,tr0
+ sub r20,r21,r20
+LOCAL(udivsi3_dontsub):
+ addi.l r25,-1,r25
+ bnei r25,-32,tr1
+ add.l r20,r63,r0
+ blink tr2,r63
+#else /* ! defined (__SHMEDIA__) */
+LOCAL(div8):
+ div1 r5,r4
+LOCAL(div7):
+ div1 r5,r4; div1 r5,r4; div1 r5,r4
+ div1 r5,r4; div1 r5,r4; div1 r5,r4; rts; div1 r5,r4
+
+LOCAL(divx4):
+ div1 r5,r4; rotcl r0
+ div1 r5,r4; rotcl r0
+ div1 r5,r4; rotcl r0
+ rts; div1 r5,r4
+
+GLOBAL(udivsi3):
+ sts.l pr,@-r15
+ extu.w r5,r0
+ cmp/eq r5,r0
+#ifdef __sh1__
+ bf LOCAL(large_divisor)
+#else
+ bf/s LOCAL(large_divisor)
+#endif
+ div0u
+ swap.w r4,r0
+ shlr16 r4
+ bsr LOCAL(div8)
+ shll16 r5
+ bsr LOCAL(div7)
+ div1 r5,r4
+ xtrct r4,r0
+ xtrct r0,r4
+ bsr LOCAL(div8)
+ swap.w r4,r4
+ bsr LOCAL(div7)
+ div1 r5,r4
+ lds.l @r15+,pr
+ xtrct r4,r0
+ swap.w r0,r0
+ rotcl r0
+ rts
+ shlr16 r5
+
+LOCAL(large_divisor):
+#ifdef __sh1__
+ div0u
+#endif
+ mov #0,r0
+ xtrct r4,r0
+ xtrct r0,r4
+ bsr LOCAL(divx4)
+ rotcl r0
+ bsr LOCAL(divx4)
+ rotcl r0
+ bsr LOCAL(divx4)
+ rotcl r0
+ bsr LOCAL(divx4)
+ rotcl r0
+ lds.l @r15+,pr
+ rts
+ rotcl r0
+
+ ENDFUNC(GLOBAL(udivsi3))
+#endif /* ! __SHMEDIA__ */
+#endif /* L_udivsi3 */
+
+#ifdef L_udivdi3
+#ifdef __SHMEDIA__
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+ .global GLOBAL(udivdi3)
+ FUNC(GLOBAL(udivdi3))
+GLOBAL(udivdi3):
+ HIDDEN_ALIAS(udivdi3_internal,udivdi3)
+ shlri r3,1,r4
+ nsb r4,r22
+ shlld r3,r22,r6
+ shlri r6,49,r5
+ movi 0xffffffffffffbaf1,r21 /* .l shift count 17. */
+ sub r21,r5,r1
+ mmulfx.w r1,r1,r4
+ mshflo.w r1,r63,r1
+ sub r63,r22,r20 // r63 == 64 % 64
+ mmulfx.w r5,r4,r4
+ pta LOCAL(large_divisor),tr0
+ addi r20,32,r9
+ msub.w r1,r4,r1
+ madd.w r1,r1,r1
+ mmulfx.w r1,r1,r4
+ shlri r6,32,r7
+ bgt/u r9,r63,tr0 // large_divisor
+ mmulfx.w r5,r4,r4
+ shlri r2,32+14,r19
+ addi r22,-31,r0
+ msub.w r1,r4,r1
+
+ mulu.l r1,r7,r4
+ addi r1,-3,r5
+ mulu.l r5,r19,r5
+ sub r63,r4,r4 // Negate to make sure r1 ends up <= 1/r2
+ shlri r4,2,r4 /* chop off leading %0000000000000000 001.00000000000 - or, as
+ the case may be, %0000000000000000 000.11111111111, still */
+ muls.l r1,r4,r4 /* leaving at least one sign bit. */
+ mulu.l r5,r3,r8
+ mshalds.l r1,r21,r1
+ shari r4,26,r4
+ shlld r8,r0,r8
+ add r1,r4,r1 // 31 bit unsigned reciprocal now in r1 (msb equiv. 0.5)
+ sub r2,r8,r2
+ /* Can do second step of 64 : 32 div now, using r1 and the rest in r2. */
+
+ shlri r2,22,r21
+ mulu.l r21,r1,r21
+ shlld r5,r0,r8
+ addi r20,30-22,r0
+ shlrd r21,r0,r21
+ mulu.l r21,r3,r5
+ add r8,r21,r8
+ mcmpgt.l r21,r63,r21 // See Note 1
+ addi r20,30,r0
+ mshfhi.l r63,r21,r21
+ sub r2,r5,r2
+ andc r2,r21,r2
+
+ /* small divisor: need a third divide step */
+ mulu.l r2,r1,r7
+ ptabs r18,tr0
+ addi r2,1,r2
+ shlrd r7,r0,r7
+ mulu.l r7,r3,r5
+ add r8,r7,r8
+ sub r2,r3,r2
+ cmpgt r2,r5,r5
+ add r8,r5,r2
+ /* could test r3 here to check for divide by zero. */
+ blink tr0,r63
+
+LOCAL(large_divisor):
+ mmulfx.w r5,r4,r4
+ shlrd r2,r9,r25
+ shlri r25,32,r8
+ msub.w r1,r4,r1
+
+ mulu.l r1,r7,r4
+ addi r1,-3,r5
+ mulu.l r5,r8,r5
+ sub r63,r4,r4 // Negate to make sure r1 ends up <= 1/r2
+ shlri r4,2,r4 /* chop off leading %0000000000000000 001.00000000000 - or, as
+ the case may be, %0000000000000000 000.11111111111, still */
+ muls.l r1,r4,r4 /* leaving at least one sign bit. */
+ shlri r5,14-1,r8
+ mulu.l r8,r7,r5
+ mshalds.l r1,r21,r1
+ shari r4,26,r4
+ add r1,r4,r1 // 31 bit unsigned reciprocal now in r1 (msb equiv. 0.5)
+ sub r25,r5,r25
+ /* Can do second step of 64 : 32 div now, using r1 and the rest in r25. */
+
+ shlri r25,22,r21
+ mulu.l r21,r1,r21
+ pta LOCAL(no_lo_adj),tr0
+ addi r22,32,r0
+ shlri r21,40,r21
+ mulu.l r21,r7,r5
+ add r8,r21,r8
+ shlld r2,r0,r2
+ sub r25,r5,r25
+ bgtu/u r7,r25,tr0 // no_lo_adj
+ addi r8,1,r8
+ sub r25,r7,r25
+LOCAL(no_lo_adj):
+ mextr4 r2,r25,r2
+
+ /* large_divisor: only needs a few adjustments. */
+ mulu.l r8,r6,r5
+ ptabs r18,tr0
+ /* bubble */
+ cmpgtu r5,r2,r5
+ sub r8,r5,r2
+ blink tr0,r63
+ ENDFUNC(GLOBAL(udivdi3))
+/* Note 1: To shift the result of the second divide stage so that the result
+ always fits into 32 bits, yet we still reduce the rest sufficiently
+ would require a lot of instructions to do the shifts just right. Using
+ the full 64 bit shift result to multiply with the divisor would require
+ four extra instructions for the upper 32 bits (shift / mulu / shift / sub).
+ Fortunately, if the upper 32 bits of the shift result are nonzero, we
+ know that the rest after taking this partial result into account will
+ fit into 32 bits. So we just clear the upper 32 bits of the rest if the
+ upper 32 bits of the partial result are nonzero. */
+#endif /* __SHMEDIA__ */
+#endif /* L_udivdi3 */
+
+#ifdef L_divdi3
+#ifdef __SHMEDIA__
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+ .global GLOBAL(divdi3)
+ FUNC(GLOBAL(divdi3))
+GLOBAL(divdi3):
+ pta GLOBAL(udivdi3_internal),tr0
+ shari r2,63,r22
+ shari r3,63,r23
+ xor r2,r22,r2
+ xor r3,r23,r3
+ sub r2,r22,r2
+ sub r3,r23,r3
+ beq/u r22,r23,tr0
+ ptabs r18,tr1
+ blink tr0,r18
+ sub r63,r2,r2
+ blink tr1,r63
+ ENDFUNC(GLOBAL(divdi3))
+#endif /* __SHMEDIA__ */
+#endif /* L_divdi3 */
+
+#ifdef L_umoddi3
+#ifdef __SHMEDIA__
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+ .global GLOBAL(umoddi3)
+ FUNC(GLOBAL(umoddi3))
+GLOBAL(umoddi3):
+ HIDDEN_ALIAS(umoddi3_internal,umoddi3)
+ shlri r3,1,r4
+ nsb r4,r22
+ shlld r3,r22,r6
+ shlri r6,49,r5
+ movi 0xffffffffffffbaf1,r21 /* .l shift count 17. */
+ sub r21,r5,r1
+ mmulfx.w r1,r1,r4
+ mshflo.w r1,r63,r1
+ sub r63,r22,r20 // r63 == 64 % 64
+ mmulfx.w r5,r4,r4
+ pta LOCAL(large_divisor),tr0
+ addi r20,32,r9
+ msub.w r1,r4,r1
+ madd.w r1,r1,r1
+ mmulfx.w r1,r1,r4
+ shlri r6,32,r7
+ bgt/u r9,r63,tr0 // large_divisor
+ mmulfx.w r5,r4,r4
+ shlri r2,32+14,r19
+ addi r22,-31,r0
+ msub.w r1,r4,r1
+
+ mulu.l r1,r7,r4
+ addi r1,-3,r5
+ mulu.l r5,r19,r5
+ sub r63,r4,r4 // Negate to make sure r1 ends up <= 1/r2
+ shlri r4,2,r4 /* chop off leading %0000000000000000 001.00000000000 - or, as
+ the case may be, %0000000000000000 000.11111111111, still */
+ muls.l r1,r4,r4 /* leaving at least one sign bit. */
+ mulu.l r5,r3,r5
+ mshalds.l r1,r21,r1
+ shari r4,26,r4
+ shlld r5,r0,r5
+ add r1,r4,r1 // 31 bit unsigned reciprocal now in r1 (msb equiv. 0.5)
+ sub r2,r5,r2
+ /* Can do second step of 64 : 32 div now, using r1 and the rest in r2. */
+
+ shlri r2,22,r21
+ mulu.l r21,r1,r21
+ addi r20,30-22,r0
+ /* bubble */ /* could test r3 here to check for divide by zero. */
+ shlrd r21,r0,r21
+ mulu.l r21,r3,r5
+ mcmpgt.l r21,r63,r21 // See Note 1
+ addi r20,30,r0
+ mshfhi.l r63,r21,r21
+ sub r2,r5,r2
+ andc r2,r21,r2
+
+ /* small divisor: need a third divide step */
+ mulu.l r2,r1,r7
+ ptabs r18,tr0
+ sub r2,r3,r8 /* re-use r8 here for rest - r3 */
+ shlrd r7,r0,r7
+ mulu.l r7,r3,r5
+ /* bubble */
+ addi r8,1,r7
+ cmpgt r7,r5,r7
+ cmvne r7,r8,r2
+ sub r2,r5,r2
+ blink tr0,r63
+
+LOCAL(large_divisor):
+ mmulfx.w r5,r4,r4
+ shlrd r2,r9,r25
+ shlri r25,32,r8
+ msub.w r1,r4,r1
+
+ mulu.l r1,r7,r4
+ addi r1,-3,r5
+ mulu.l r5,r8,r5
+ sub r63,r4,r4 // Negate to make sure r1 ends up <= 1/r2
+ shlri r4,2,r4 /* chop off leading %0000000000000000 001.00000000000 - or, as
+ the case may be, %0000000000000000 000.11111111111, still */
+ muls.l r1,r4,r4 /* leaving at least one sign bit. */
+ shlri r5,14-1,r8
+ mulu.l r8,r7,r5
+ mshalds.l r1,r21,r1
+ shari r4,26,r4
+ add r1,r4,r1 // 31 bit unsigned reciprocal now in r1 (msb equiv. 0.5)
+ sub r25,r5,r25
+ /* Can do second step of 64 : 32 div now, using r1 and the rest in r25. */
+
+ shlri r25,22,r21
+ mulu.l r21,r1,r21
+ pta LOCAL(no_lo_adj),tr0
+ addi r22,32,r0
+ shlri r21,40,r21
+ mulu.l r21,r7,r5
+ add r8,r21,r8
+ shlld r2,r0,r2
+ sub r25,r5,r25
+ bgtu/u r7,r25,tr0 // no_lo_adj
+ addi r8,1,r8
+ sub r25,r7,r25
+LOCAL(no_lo_adj):
+ mextr4 r2,r25,r2
+
+ /* large_divisor: only needs a few adjustments. */
+ mulu.l r8,r6,r5
+ ptabs r18,tr0
+ add r2,r6,r7
+ cmpgtu r5,r2,r8
+ cmvne r8,r7,r2
+ sub r2,r5,r2
+ shlrd r2,r22,r2
+ blink tr0,r63
+ ENDFUNC(GLOBAL(umoddi3))
+/* Note 1: To shift the result of the second divide stage so that the result
+ always fits into 32 bits, yet we still reduce the rest sufficiently
+ would require a lot of instructions to do the shifts just right. Using
+ the full 64 bit shift result to multiply with the divisor would require
+ four extra instructions for the upper 32 bits (shift / mulu / shift / sub).
+ Fortunately, if the upper 32 bits of the shift result are nonzero, we
+ know that the rest after taking this partial result into account will
+ fit into 32 bits. So we just clear the upper 32 bits of the rest if the
+ upper 32 bits of the partial result are nonzero. */
+#endif /* __SHMEDIA__ */
+#endif /* L_umoddi3 */
+
+#ifdef L_moddi3
+#ifdef __SHMEDIA__
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+ .global GLOBAL(moddi3)
+ FUNC(GLOBAL(moddi3))
+GLOBAL(moddi3):
+ pta GLOBAL(umoddi3_internal),tr0
+ shari r2,63,r22
+ shari r3,63,r23
+ xor r2,r22,r2
+ xor r3,r23,r3
+ sub r2,r22,r2
+ sub r3,r23,r3
+ beq/u r22,r63,tr0
+ ptabs r18,tr1
+ blink tr0,r18
+ sub r63,r2,r2
+ blink tr1,r63
+ ENDFUNC(GLOBAL(moddi3))
+#endif /* __SHMEDIA__ */
+#endif /* L_moddi3 */
+
+#ifdef L_set_fpscr
+#if !defined (__SH2A_NOFPU__)
+#if defined (__SH2E__) || defined (__SH2A__) || defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || __SH5__ == 32
+#ifdef __SH5__
+ .mode SHcompact
+#endif
+ .global GLOBAL(set_fpscr)
+ HIDDEN_FUNC(GLOBAL(set_fpscr))
+GLOBAL(set_fpscr):
+ lds r4,fpscr
+#ifdef __PIC__
+ mov.l r12,@-r15
+#ifdef __vxworks
+ mov.l LOCAL(set_fpscr_L0_base),r12
+ mov.l LOCAL(set_fpscr_L0_index),r0
+ mov.l @r12,r12
+ mov.l @(r0,r12),r12
+#else
+ mova LOCAL(set_fpscr_L0),r0
+ mov.l LOCAL(set_fpscr_L0),r12
+ add r0,r12
+#endif
+ mov.l LOCAL(set_fpscr_L1),r0
+ mov.l @(r0,r12),r1
+ mov.l @r15+,r12
+#else
+ mov.l LOCAL(set_fpscr_L1),r1
+#endif
+ swap.w r4,r0
+ or #24,r0
+#ifndef FMOVD_WORKS
+ xor #16,r0
+#endif
+#if defined(__SH4__) || defined (__SH2A_DOUBLE__)
+ swap.w r0,r3
+ mov.l r3,@(4,r1)
+#else /* defined (__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE*__) */
+ swap.w r0,r2
+ mov.l r2,@r1
+#endif
+#ifndef FMOVD_WORKS
+ xor #8,r0
+#else
+ xor #24,r0
+#endif
+#if defined(__SH4__) || defined (__SH2A_DOUBLE__)
+ swap.w r0,r2
+ rts
+ mov.l r2,@r1
+#else /* defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE*__) */
+ swap.w r0,r3
+ rts
+ mov.l r3,@(4,r1)
+#endif
+ .align 2
+#ifdef __PIC__
+#ifdef __vxworks
+LOCAL(set_fpscr_L0_base):
+ .long ___GOTT_BASE__
+LOCAL(set_fpscr_L0_index):
+ .long ___GOTT_INDEX__
+#else
+LOCAL(set_fpscr_L0):
+ .long _GLOBAL_OFFSET_TABLE_
+#endif
+LOCAL(set_fpscr_L1):
+ .long GLOBAL(fpscr_values@GOT)
+#else
+LOCAL(set_fpscr_L1):
+ .long GLOBAL(fpscr_values)
+#endif
+
+ ENDFUNC(GLOBAL(set_fpscr))
+#ifndef NO_FPSCR_VALUES
+#ifdef __ELF__
+ .comm GLOBAL(fpscr_values),8,4
+#else
+ .comm GLOBAL(fpscr_values),8
+#endif /* ELF */
+#endif /* NO_FPSCR_VALUES */
+#endif /* SH2E / SH3E / SH4 */
+#endif /* __SH2A_NOFPU__ */
+#endif /* L_set_fpscr */
+#ifdef L_ic_invalidate
+#if __SH5__ == 32
+ .mode SHmedia
+ .section .text..SHmedia32,"ax"
+ .align 2
+ .global GLOBAL(init_trampoline)
+ HIDDEN_FUNC(GLOBAL(init_trampoline))
+GLOBAL(init_trampoline):
+ st.l r0,8,r2
+#ifdef __LITTLE_ENDIAN__
+ movi 9,r20
+ shori 0x402b,r20
+ shori 0xd101,r20
+ shori 0xd002,r20
+#else
+ movi 0xffffffffffffd002,r20
+ shori 0xd101,r20
+ shori 0x402b,r20
+ shori 9,r20
+#endif
+ st.q r0,0,r20
+ st.l r0,12,r3
+ ENDFUNC(GLOBAL(init_trampoline))
+ .global GLOBAL(ic_invalidate)
+ HIDDEN_FUNC(GLOBAL(ic_invalidate))
+GLOBAL(ic_invalidate):
+ ocbwb r0,0
+ synco
+ icbi r0, 0
+ ptabs r18, tr0
+ synci
+ blink tr0, r63
+ ENDFUNC(GLOBAL(ic_invalidate))
+#elif defined(__SH4A__)
+ .global GLOBAL(ic_invalidate)
+ HIDDEN_FUNC(GLOBAL(ic_invalidate))
+GLOBAL(ic_invalidate):
+ ocbwb @r4
+ synco
+ icbi @r4
+ rts
+ nop
+ ENDFUNC(GLOBAL(ic_invalidate))
+#elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || (defined(__SH4_NOFPU__) && !defined(__SH5__))
+ /* For system code, we use ic_invalidate_line_i, but user code
+ needs a different mechanism. A kernel call is generally not
+ available, and it would also be slow. Different SH4 variants use
+ different sizes and associativities of the Icache. We use a small
+ bit of dispatch code that can be put hidden in every shared object,
+ which calls the actual processor-specific invalidation code in a
+ separate module.
+ Or if you have operating system support, the OS could mmap the
+ procesor-specific code from a single page, since it is highly
+ repetitive. */
+ .global GLOBAL(ic_invalidate)
+ HIDDEN_FUNC(GLOBAL(ic_invalidate))
+GLOBAL(ic_invalidate):
+#ifdef __pic__
+#ifdef __vxworks
+ mov.l 1f,r1
+ mov.l 2f,r0
+ mov.l @r1,r1
+ mov.l 0f,r2
+ mov.l @(r0,r1),r0
+#else
+ mov.l 1f,r1
+ mova 1f,r0
+ mov.l 0f,r2
+ add r1,r0
+#endif
+ mov.l @(r0,r2),r1
+#else
+ mov.l 0f,r1
+#endif
+ ocbwb @r4
+ mov.l @(8,r1),r0
+ sub r1,r4
+ and r4,r0
+ add r1,r0
+ jmp @r0
+ mov.l @(4,r1),r0
+ .align 2
+#ifndef __pic__
+0: .long GLOBAL(ic_invalidate_array)
+#else /* __pic__ */
+ .global GLOBAL(ic_invalidate_array)
+0: .long GLOBAL(ic_invalidate_array)@GOT
+#ifdef __vxworks
+1: .long ___GOTT_BASE__
+2: .long ___GOTT_INDEX__
+#else
+1: .long _GLOBAL_OFFSET_TABLE_
+#endif
+ ENDFUNC(GLOBAL(ic_invalidate))
+#endif /* __pic__ */
+#endif /* SH4 */
+#endif /* L_ic_invalidate */
+
+#ifdef L_ic_invalidate_array
+#if defined(__SH4A__) || (defined (__FORCE_SH4A__) && (defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || (defined(__SH4_NOFPU__) && !defined(__SH5__))))
+ .global GLOBAL(ic_invalidate_array)
+ /* This is needed when an SH4 dso with trampolines is used on SH4A. */
+ .global GLOBAL(ic_invalidate_array)
+ FUNC(GLOBAL(ic_invalidate_array))
+GLOBAL(ic_invalidate_array):
+ add r1,r4
+ synco
+ icbi @r4
+ rts
+ nop
+ .align 2
+ .long 0
+ ENDFUNC(GLOBAL(ic_invalidate_array))
+#elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) || (defined(__SH4_NOFPU__) && !defined(__SH5__))
+ .global GLOBAL(ic_invalidate_array)
+ .p2align 5
+ FUNC(GLOBAL(ic_invalidate_array))
+/* This must be aligned to the beginning of a cache line. */
+GLOBAL(ic_invalidate_array):
+#ifndef WAYS
+#define WAYS 4
+#define WAY_SIZE 0x4000
+#endif
+#if WAYS == 1
+ .rept WAY_SIZE * WAYS / 32
+ rts
+ nop
+ .rept 7
+ .long WAY_SIZE - 32
+ .endr
+ .endr
+#elif WAYS <= 6
+ .rept WAY_SIZE * WAYS / 32
+ braf r0
+ add #-8,r0
+ .long WAY_SIZE + 8
+ .long WAY_SIZE - 32
+ .rept WAYS-2
+ braf r0
+ nop
+ .endr
+ .rept 7 - WAYS
+ rts
+ nop
+ .endr
+ .endr
+#else /* WAYS > 6 */
+ /* This variant needs two different pages for mmap-ing. */
+ .rept WAYS-1
+ .rept WAY_SIZE / 32
+ braf r0
+ nop
+ .long WAY_SIZE
+ .rept 6
+ .long WAY_SIZE - 32
+ .endr
+ .endr
+ .endr
+ .rept WAY_SIZE / 32
+ rts
+ .rept 15
+ nop
+ .endr
+ .endr
+#endif /* WAYS */
+ ENDFUNC(GLOBAL(ic_invalidate_array))
+#endif /* SH4 */
+#endif /* L_ic_invalidate_array */
+
+#if defined (__SH5__) && __SH5__ == 32
+#ifdef L_shcompact_call_trampoline
+ .section .rodata
+ .align 1
+LOCAL(ct_main_table):
+.word LOCAL(ct_r2_fp) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r2_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r2_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r3_fp) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r3_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r3_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r4_fp) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r4_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r4_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r5_fp) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r5_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r5_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r6_fph) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r6_fpl) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r6_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r6_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r7_fph) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r7_fpl) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r7_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r7_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r8_fph) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r8_fpl) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r8_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r8_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r9_fph) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r9_fpl) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r9_ld) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r9_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_pop_seq) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_pop_seq) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_r9_pop) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_ret_wide) - datalabel LOCAL(ct_main_label)
+.word LOCAL(ct_call_func) - datalabel LOCAL(ct_main_label)
+ .mode SHmedia
+ .section .text..SHmedia32, "ax"
+ .align 2
+
+ /* This function loads 64-bit general-purpose registers from the
+ stack, from a memory address contained in them or from an FP
+ register, according to a cookie passed in r1. Its execution
+ time is linear on the number of registers that actually have
+ to be copied. See sh.h for details on the actual bit pattern.
+
+ The function to be called is passed in r0. If a 32-bit return
+ value is expected, the actual function will be tail-called,
+ otherwise the return address will be stored in r10 (that the
+ caller should expect to be clobbered) and the return value
+ will be expanded into r2/r3 upon return. */
+
+ .global GLOBAL(GCC_shcompact_call_trampoline)
+ FUNC(GLOBAL(GCC_shcompact_call_trampoline))
+GLOBAL(GCC_shcompact_call_trampoline):
+ ptabs/l r0, tr0 /* Prepare to call the actual function. */
+ movi ((datalabel LOCAL(ct_main_table) - 31 * 2) >> 16) & 65535, r0
+ pt/l LOCAL(ct_loop), tr1
+ addz.l r1, r63, r1
+ shori ((datalabel LOCAL(ct_main_table) - 31 * 2)) & 65535, r0
+LOCAL(ct_loop):
+ nsb r1, r28
+ shlli r28, 1, r29
+ ldx.w r0, r29, r30
+LOCAL(ct_main_label):
+ ptrel/l r30, tr2
+ blink tr2, r63
+LOCAL(ct_r2_fp): /* Copy r2 from an FP register. */
+ /* It must be dr0, so just do it. */
+ fmov.dq dr0, r2
+ movi 7, r30
+ shlli r30, 29, r31
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r3_fp): /* Copy r3 from an FP register. */
+ /* It is either dr0 or dr2. */
+ movi 7, r30
+ shlri r1, 26, r32
+ shlli r30, 26, r31
+ andc r1, r31, r1
+ fmov.dq dr0, r3
+ beqi/l r32, 4, tr1
+ fmov.dq dr2, r3
+ blink tr1, r63
+LOCAL(ct_r4_fp): /* Copy r4 from an FP register. */
+ shlri r1, 23 - 3, r34
+ andi r34, 3 << 3, r33
+ addi r33, LOCAL(ct_r4_fp_copy) - datalabel LOCAL(ct_r4_fp_base), r32
+LOCAL(ct_r4_fp_base):
+ ptrel/l r32, tr2
+ movi 7, r30
+ shlli r30, 23, r31
+ andc r1, r31, r1
+ blink tr2, r63
+LOCAL(ct_r4_fp_copy):
+ fmov.dq dr0, r4
+ blink tr1, r63
+ fmov.dq dr2, r4
+ blink tr1, r63
+ fmov.dq dr4, r4
+ blink tr1, r63
+LOCAL(ct_r5_fp): /* Copy r5 from an FP register. */
+ shlri r1, 20 - 3, r34
+ andi r34, 3 << 3, r33
+ addi r33, LOCAL(ct_r5_fp_copy) - datalabel LOCAL(ct_r5_fp_base), r32
+LOCAL(ct_r5_fp_base):
+ ptrel/l r32, tr2
+ movi 7, r30
+ shlli r30, 20, r31
+ andc r1, r31, r1
+ blink tr2, r63
+LOCAL(ct_r5_fp_copy):
+ fmov.dq dr0, r5
+ blink tr1, r63
+ fmov.dq dr2, r5
+ blink tr1, r63
+ fmov.dq dr4, r5
+ blink tr1, r63
+ fmov.dq dr6, r5
+ blink tr1, r63
+LOCAL(ct_r6_fph): /* Copy r6 from a high FP register. */
+ /* It must be dr8. */
+ fmov.dq dr8, r6
+ movi 15, r30
+ shlli r30, 16, r31
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r6_fpl): /* Copy r6 from a low FP register. */
+ shlri r1, 16 - 3, r34
+ andi r34, 3 << 3, r33
+ addi r33, LOCAL(ct_r6_fp_copy) - datalabel LOCAL(ct_r6_fp_base), r32
+LOCAL(ct_r6_fp_base):
+ ptrel/l r32, tr2
+ movi 7, r30
+ shlli r30, 16, r31
+ andc r1, r31, r1
+ blink tr2, r63
+LOCAL(ct_r6_fp_copy):
+ fmov.dq dr0, r6
+ blink tr1, r63
+ fmov.dq dr2, r6
+ blink tr1, r63
+ fmov.dq dr4, r6
+ blink tr1, r63
+ fmov.dq dr6, r6
+ blink tr1, r63
+LOCAL(ct_r7_fph): /* Copy r7 from a high FP register. */
+ /* It is either dr8 or dr10. */
+ movi 15 << 12, r31
+ shlri r1, 12, r32
+ andc r1, r31, r1
+ fmov.dq dr8, r7
+ beqi/l r32, 8, tr1
+ fmov.dq dr10, r7
+ blink tr1, r63
+LOCAL(ct_r7_fpl): /* Copy r7 from a low FP register. */
+ shlri r1, 12 - 3, r34
+ andi r34, 3 << 3, r33
+ addi r33, LOCAL(ct_r7_fp_copy) - datalabel LOCAL(ct_r7_fp_base), r32
+LOCAL(ct_r7_fp_base):
+ ptrel/l r32, tr2
+ movi 7 << 12, r31
+ andc r1, r31, r1
+ blink tr2, r63
+LOCAL(ct_r7_fp_copy):
+ fmov.dq dr0, r7
+ blink tr1, r63
+ fmov.dq dr2, r7
+ blink tr1, r63
+ fmov.dq dr4, r7
+ blink tr1, r63
+ fmov.dq dr6, r7
+ blink tr1, r63
+LOCAL(ct_r8_fph): /* Copy r8 from a high FP register. */
+ /* It is either dr8 or dr10. */
+ movi 15 << 8, r31
+ andi r1, 1 << 8, r32
+ andc r1, r31, r1
+ fmov.dq dr8, r8
+ beq/l r32, r63, tr1
+ fmov.dq dr10, r8
+ blink tr1, r63
+LOCAL(ct_r8_fpl): /* Copy r8 from a low FP register. */
+ shlri r1, 8 - 3, r34
+ andi r34, 3 << 3, r33
+ addi r33, LOCAL(ct_r8_fp_copy) - datalabel LOCAL(ct_r8_fp_base), r32
+LOCAL(ct_r8_fp_base):
+ ptrel/l r32, tr2
+ movi 7 << 8, r31
+ andc r1, r31, r1
+ blink tr2, r63
+LOCAL(ct_r8_fp_copy):
+ fmov.dq dr0, r8
+ blink tr1, r63
+ fmov.dq dr2, r8
+ blink tr1, r63
+ fmov.dq dr4, r8
+ blink tr1, r63
+ fmov.dq dr6, r8
+ blink tr1, r63
+LOCAL(ct_r9_fph): /* Copy r9 from a high FP register. */
+ /* It is either dr8 or dr10. */
+ movi 15 << 4, r31
+ andi r1, 1 << 4, r32
+ andc r1, r31, r1
+ fmov.dq dr8, r9
+ beq/l r32, r63, tr1
+ fmov.dq dr10, r9
+ blink tr1, r63
+LOCAL(ct_r9_fpl): /* Copy r9 from a low FP register. */
+ shlri r1, 4 - 3, r34
+ andi r34, 3 << 3, r33
+ addi r33, LOCAL(ct_r9_fp_copy) - datalabel LOCAL(ct_r9_fp_base), r32
+LOCAL(ct_r9_fp_base):
+ ptrel/l r32, tr2
+ movi 7 << 4, r31
+ andc r1, r31, r1
+ blink tr2, r63
+LOCAL(ct_r9_fp_copy):
+ fmov.dq dr0, r9
+ blink tr1, r63
+ fmov.dq dr2, r9
+ blink tr1, r63
+ fmov.dq dr4, r9
+ blink tr1, r63
+ fmov.dq dr6, r9
+ blink tr1, r63
+LOCAL(ct_r2_ld): /* Copy r2 from a memory address. */
+ pt/l LOCAL(ct_r2_load), tr2
+ movi 3, r30
+ shlli r30, 29, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r2, 8, r3
+ ldx.q r2, r63, r2
+ /* Fall through. */
+LOCAL(ct_r3_ld): /* Copy r3 from a memory address. */
+ pt/l LOCAL(ct_r3_load), tr2
+ movi 3, r30
+ shlli r30, 26, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r3, 8, r4
+ ldx.q r3, r63, r3
+LOCAL(ct_r4_ld): /* Copy r4 from a memory address. */
+ pt/l LOCAL(ct_r4_load), tr2
+ movi 3, r30
+ shlli r30, 23, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r4, 8, r5
+ ldx.q r4, r63, r4
+LOCAL(ct_r5_ld): /* Copy r5 from a memory address. */
+ pt/l LOCAL(ct_r5_load), tr2
+ movi 3, r30
+ shlli r30, 20, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r5, 8, r6
+ ldx.q r5, r63, r5
+LOCAL(ct_r6_ld): /* Copy r6 from a memory address. */
+ pt/l LOCAL(ct_r6_load), tr2
+ movi 3 << 16, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r6, 8, r7
+ ldx.q r6, r63, r6
+LOCAL(ct_r7_ld): /* Copy r7 from a memory address. */
+ pt/l LOCAL(ct_r7_load), tr2
+ movi 3 << 12, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r7, 8, r8
+ ldx.q r7, r63, r7
+LOCAL(ct_r8_ld): /* Copy r8 from a memory address. */
+ pt/l LOCAL(ct_r8_load), tr2
+ movi 3 << 8, r31
+ and r1, r31, r32
+ andc r1, r31, r1
+ beq/l r31, r32, tr2
+ addi.l r8, 8, r9
+ ldx.q r8, r63, r8
+LOCAL(ct_r9_ld): /* Copy r9 from a memory address. */
+ pt/l LOCAL(ct_check_tramp), tr2
+ ldx.q r9, r63, r9
+ blink tr2, r63
+LOCAL(ct_r2_load):
+ ldx.q r2, r63, r2
+ blink tr1, r63
+LOCAL(ct_r3_load):
+ ldx.q r3, r63, r3
+ blink tr1, r63
+LOCAL(ct_r4_load):
+ ldx.q r4, r63, r4
+ blink tr1, r63
+LOCAL(ct_r5_load):
+ ldx.q r5, r63, r5
+ blink tr1, r63
+LOCAL(ct_r6_load):
+ ldx.q r6, r63, r6
+ blink tr1, r63
+LOCAL(ct_r7_load):
+ ldx.q r7, r63, r7
+ blink tr1, r63
+LOCAL(ct_r8_load):
+ ldx.q r8, r63, r8
+ blink tr1, r63
+LOCAL(ct_r2_pop): /* Pop r2 from the stack. */
+ movi 1, r30
+ ldx.q r15, r63, r2
+ shlli r30, 29, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r3_pop): /* Pop r3 from the stack. */
+ movi 1, r30
+ ldx.q r15, r63, r3
+ shlli r30, 26, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r4_pop): /* Pop r4 from the stack. */
+ movi 1, r30
+ ldx.q r15, r63, r4
+ shlli r30, 23, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r5_pop): /* Pop r5 from the stack. */
+ movi 1, r30
+ ldx.q r15, r63, r5
+ shlli r30, 20, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r6_pop): /* Pop r6 from the stack. */
+ movi 1, r30
+ ldx.q r15, r63, r6
+ shlli r30, 16, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r7_pop): /* Pop r7 from the stack. */
+ ldx.q r15, r63, r7
+ movi 1 << 12, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_r8_pop): /* Pop r8 from the stack. */
+ ldx.q r15, r63, r8
+ movi 1 << 8, r31
+ addi.l r15, 8, r15
+ andc r1, r31, r1
+ blink tr1, r63
+LOCAL(ct_pop_seq): /* Pop a sequence of registers off the stack. */
+ andi r1, 7 << 1, r30
+ movi (LOCAL(ct_end_of_pop_seq) >> 16) & 65535, r32
+ shlli r30, 2, r31
+ shori LOCAL(ct_end_of_pop_seq) & 65535, r32
+ sub.l r32, r31, r33
+ ptabs/l r33, tr2
+ blink tr2, r63
+LOCAL(ct_start_of_pop_seq): /* Beginning of pop sequence. */
+ ldx.q r15, r63, r3
+ addi.l r15, 8, r15
+ ldx.q r15, r63, r4
+ addi.l r15, 8, r15
+ ldx.q r15, r63, r5
+ addi.l r15, 8, r15
+ ldx.q r15, r63, r6
+ addi.l r15, 8, r15
+ ldx.q r15, r63, r7
+ addi.l r15, 8, r15
+ ldx.q r15, r63, r8
+ addi.l r15, 8, r15
+LOCAL(ct_r9_pop): /* Pop r9 from the stack. */
+ ldx.q r15, r63, r9
+ addi.l r15, 8, r15
+LOCAL(ct_end_of_pop_seq): /* Label used to compute first pop instruction. */
+LOCAL(ct_check_tramp): /* Check whether we need a trampoline. */
+ pt/u LOCAL(ct_ret_wide), tr2
+ andi r1, 1, r1
+ bne/u r1, r63, tr2
+LOCAL(ct_call_func): /* Just branch to the function. */
+ blink tr0, r63
+LOCAL(ct_ret_wide): /* Call the function, so that we can unpack its
+ 64-bit return value. */
+ add.l r18, r63, r10
+ blink tr0, r18
+ ptabs r10, tr0
+#if __LITTLE_ENDIAN__
+ shari r2, 32, r3
+ add.l r2, r63, r2
+#else
+ add.l r2, r63, r3
+ shari r2, 32, r2
+#endif
+ blink tr0, r63
+
+ ENDFUNC(GLOBAL(GCC_shcompact_call_trampoline))
+#endif /* L_shcompact_call_trampoline */
+
+#ifdef L_shcompact_return_trampoline
+ /* This function does the converse of the code in `ret_wide'
+ above. It is tail-called by SHcompact functions returning
+ 64-bit non-floating-point values, to pack the 32-bit values in
+ r2 and r3 into r2. */
+
+ .mode SHmedia
+ .section .text..SHmedia32, "ax"
+ .align 2
+ .global GLOBAL(GCC_shcompact_return_trampoline)
+ HIDDEN_FUNC(GLOBAL(GCC_shcompact_return_trampoline))
+GLOBAL(GCC_shcompact_return_trampoline):
+ ptabs/l r18, tr0
+#if __LITTLE_ENDIAN__
+ addz.l r2, r63, r2
+ shlli r3, 32, r3
+#else
+ addz.l r3, r63, r3
+ shlli r2, 32, r2
+#endif
+ or r3, r2, r2
+ blink tr0, r63
+
+ ENDFUNC(GLOBAL(GCC_shcompact_return_trampoline))
+#endif /* L_shcompact_return_trampoline */
+
+#ifdef L_shcompact_incoming_args
+ .section .rodata
+ .align 1
+LOCAL(ia_main_table):
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r2_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r2_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r3_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r3_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r4_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r4_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r5_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r5_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r6_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r6_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r7_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r7_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r8_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r8_push) - datalabel LOCAL(ia_main_label)
+.word 1 /* Invalid, just loop */
+.word 1 /* Invalid, just loop */
+.word LOCAL(ia_r9_ld) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r9_push) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_push_seq) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_push_seq) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_r9_push) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_return) - datalabel LOCAL(ia_main_label)
+.word LOCAL(ia_return) - datalabel LOCAL(ia_main_label)
+ .mode SHmedia
+ .section .text..SHmedia32, "ax"
+ .align 2
+
+ /* This function stores 64-bit general-purpose registers back in
+ the stack, and loads the address in which each register
+ was stored into itself. The lower 32 bits of r17 hold the address
+ to begin storing, and the upper 32 bits of r17 hold the cookie.
+ Its execution time is linear on the
+ number of registers that actually have to be copied, and it is
+ optimized for structures larger than 64 bits, as opposed to
+ individual `long long' arguments. See sh.h for details on the
+ actual bit pattern. */
+
+ .global GLOBAL(GCC_shcompact_incoming_args)
+ FUNC(GLOBAL(GCC_shcompact_incoming_args))
+GLOBAL(GCC_shcompact_incoming_args):
+ ptabs/l r18, tr0 /* Prepare to return. */
+ shlri r17, 32, r0 /* Load the cookie. */
+ movi ((datalabel LOCAL(ia_main_table) - 31 * 2) >> 16) & 65535, r43
+ pt/l LOCAL(ia_loop), tr1
+ add.l r17, r63, r17
+ shori ((datalabel LOCAL(ia_main_table) - 31 * 2)) & 65535, r43
+LOCAL(ia_loop):
+ nsb r0, r36
+ shlli r36, 1, r37
+ ldx.w r43, r37, r38
+LOCAL(ia_main_label):
+ ptrel/l r38, tr2
+ blink tr2, r63
+LOCAL(ia_r2_ld): /* Store r2 and load its address. */
+ movi 3, r38
+ shlli r38, 29, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r2
+ add.l r17, r63, r2
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r3_ld): /* Store r3 and load its address. */
+ movi 3, r38
+ shlli r38, 26, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r3
+ add.l r17, r63, r3
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r4_ld): /* Store r4 and load its address. */
+ movi 3, r38
+ shlli r38, 23, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r4
+ add.l r17, r63, r4
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r5_ld): /* Store r5 and load its address. */
+ movi 3, r38
+ shlli r38, 20, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r5
+ add.l r17, r63, r5
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r6_ld): /* Store r6 and load its address. */
+ movi 3, r38
+ shlli r38, 16, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r6
+ add.l r17, r63, r6
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r7_ld): /* Store r7 and load its address. */
+ movi 3 << 12, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r7
+ add.l r17, r63, r7
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r8_ld): /* Store r8 and load its address. */
+ movi 3 << 8, r39
+ and r0, r39, r40
+ andc r0, r39, r0
+ stx.q r17, r63, r8
+ add.l r17, r63, r8
+ addi.l r17, 8, r17
+ beq/u r39, r40, tr1
+LOCAL(ia_r9_ld): /* Store r9 and load its address. */
+ stx.q r17, r63, r9
+ add.l r17, r63, r9
+ blink tr0, r63
+LOCAL(ia_r2_push): /* Push r2 onto the stack. */
+ movi 1, r38
+ shlli r38, 29, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r2
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_r3_push): /* Push r3 onto the stack. */
+ movi 1, r38
+ shlli r38, 26, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r3
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_r4_push): /* Push r4 onto the stack. */
+ movi 1, r38
+ shlli r38, 23, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r4
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_r5_push): /* Push r5 onto the stack. */
+ movi 1, r38
+ shlli r38, 20, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r5
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_r6_push): /* Push r6 onto the stack. */
+ movi 1, r38
+ shlli r38, 16, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r6
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_r7_push): /* Push r7 onto the stack. */
+ movi 1 << 12, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r7
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_r8_push): /* Push r8 onto the stack. */
+ movi 1 << 8, r39
+ andc r0, r39, r0
+ stx.q r17, r63, r8
+ addi.l r17, 8, r17
+ blink tr1, r63
+LOCAL(ia_push_seq): /* Push a sequence of registers onto the stack. */
+ andi r0, 7 << 1, r38
+ movi (LOCAL(ia_end_of_push_seq) >> 16) & 65535, r40
+ shlli r38, 2, r39
+ shori LOCAL(ia_end_of_push_seq) & 65535, r40
+ sub.l r40, r39, r41
+ ptabs/l r41, tr2
+ blink tr2, r63
+LOCAL(ia_stack_of_push_seq): /* Beginning of push sequence. */
+ stx.q r17, r63, r3
+ addi.l r17, 8, r17
+ stx.q r17, r63, r4
+ addi.l r17, 8, r17
+ stx.q r17, r63, r5
+ addi.l r17, 8, r17
+ stx.q r17, r63, r6
+ addi.l r17, 8, r17
+ stx.q r17, r63, r7
+ addi.l r17, 8, r17
+ stx.q r17, r63, r8
+ addi.l r17, 8, r17
+LOCAL(ia_r9_push): /* Push r9 onto the stack. */
+ stx.q r17, r63, r9
+LOCAL(ia_return): /* Return. */
+ blink tr0, r63
+LOCAL(ia_end_of_push_seq): /* Label used to compute the first push instruction. */
+ ENDFUNC(GLOBAL(GCC_shcompact_incoming_args))
+#endif /* L_shcompact_incoming_args */
+#endif
+#if __SH5__
+#ifdef L_nested_trampoline
+#if __SH5__ == 32
+ .section .text..SHmedia32,"ax"
+#else
+ .text
+#endif
+ .align 3 /* It is copied in units of 8 bytes in SHmedia mode. */
+ .global GLOBAL(GCC_nested_trampoline)
+ HIDDEN_FUNC(GLOBAL(GCC_nested_trampoline))
+GLOBAL(GCC_nested_trampoline):
+ .mode SHmedia
+ ptrel/u r63, tr0
+ gettr tr0, r0
+#if __SH5__ == 64
+ ld.q r0, 24, r1
+#else
+ ld.l r0, 24, r1
+#endif
+ ptabs/l r1, tr1
+#if __SH5__ == 64
+ ld.q r0, 32, r1
+#else
+ ld.l r0, 28, r1
+#endif
+ blink tr1, r63
+
+ ENDFUNC(GLOBAL(GCC_nested_trampoline))
+#endif /* L_nested_trampoline */
+#endif /* __SH5__ */
+#if __SH5__ == 32
+#ifdef L_push_pop_shmedia_regs
+ .section .text..SHmedia32,"ax"
+ .mode SHmedia
+ .align 2
+#ifndef __SH4_NOFPU__
+ .global GLOBAL(GCC_push_shmedia_regs)
+ FUNC(GLOBAL(GCC_push_shmedia_regs))
+GLOBAL(GCC_push_shmedia_regs):
+ addi.l r15, -14*8, r15
+ fst.d r15, 13*8, dr62
+ fst.d r15, 12*8, dr60
+ fst.d r15, 11*8, dr58
+ fst.d r15, 10*8, dr56
+ fst.d r15, 9*8, dr54
+ fst.d r15, 8*8, dr52
+ fst.d r15, 7*8, dr50
+ fst.d r15, 6*8, dr48
+ fst.d r15, 5*8, dr46
+ fst.d r15, 4*8, dr44
+ fst.d r15, 3*8, dr42
+ fst.d r15, 2*8, dr40
+ fst.d r15, 1*8, dr38
+ fst.d r15, 0*8, dr36
+#else /* ! __SH4_NOFPU__ */
+ .global GLOBAL(GCC_push_shmedia_regs_nofpu)
+ FUNC(GLOBAL(GCC_push_shmedia_regs_nofpu))
+GLOBAL(GCC_push_shmedia_regs_nofpu):
+#endif /* ! __SH4_NOFPU__ */
+ ptabs/l r18, tr0
+ addi.l r15, -27*8, r15
+ gettr tr7, r62
+ gettr tr6, r61
+ gettr tr5, r60
+ st.q r15, 26*8, r62
+ st.q r15, 25*8, r61
+ st.q r15, 24*8, r60
+ st.q r15, 23*8, r59
+ st.q r15, 22*8, r58
+ st.q r15, 21*8, r57
+ st.q r15, 20*8, r56
+ st.q r15, 19*8, r55
+ st.q r15, 18*8, r54
+ st.q r15, 17*8, r53
+ st.q r15, 16*8, r52
+ st.q r15, 15*8, r51
+ st.q r15, 14*8, r50
+ st.q r15, 13*8, r49
+ st.q r15, 12*8, r48
+ st.q r15, 11*8, r47
+ st.q r15, 10*8, r46
+ st.q r15, 9*8, r45
+ st.q r15, 8*8, r44
+ st.q r15, 7*8, r35
+ st.q r15, 6*8, r34
+ st.q r15, 5*8, r33
+ st.q r15, 4*8, r32
+ st.q r15, 3*8, r31
+ st.q r15, 2*8, r30
+ st.q r15, 1*8, r29
+ st.q r15, 0*8, r28
+ blink tr0, r63
+#ifndef __SH4_NOFPU__
+ ENDFUNC(GLOBAL(GCC_push_shmedia_regs))
+#else
+ ENDFUNC(GLOBAL(GCC_push_shmedia_regs_nofpu))
+#endif
+#ifndef __SH4_NOFPU__
+ .global GLOBAL(GCC_pop_shmedia_regs)
+ FUNC(GLOBAL(GCC_pop_shmedia_regs))
+GLOBAL(GCC_pop_shmedia_regs):
+ pt .L0, tr1
+ movi 41*8, r0
+ fld.d r15, 40*8, dr62
+ fld.d r15, 39*8, dr60
+ fld.d r15, 38*8, dr58
+ fld.d r15, 37*8, dr56
+ fld.d r15, 36*8, dr54
+ fld.d r15, 35*8, dr52
+ fld.d r15, 34*8, dr50
+ fld.d r15, 33*8, dr48
+ fld.d r15, 32*8, dr46
+ fld.d r15, 31*8, dr44
+ fld.d r15, 30*8, dr42
+ fld.d r15, 29*8, dr40
+ fld.d r15, 28*8, dr38
+ fld.d r15, 27*8, dr36
+ blink tr1, r63
+#else /* ! __SH4_NOFPU__ */
+ .global GLOBAL(GCC_pop_shmedia_regs_nofpu)
+ FUNC(GLOBAL(GCC_pop_shmedia_regs_nofpu))
+GLOBAL(GCC_pop_shmedia_regs_nofpu):
+#endif /* ! __SH4_NOFPU__ */
+ movi 27*8, r0
+.L0:
+ ptabs r18, tr0
+ ld.q r15, 26*8, r62
+ ld.q r15, 25*8, r61
+ ld.q r15, 24*8, r60
+ ptabs r62, tr7
+ ptabs r61, tr6
+ ptabs r60, tr5
+ ld.q r15, 23*8, r59
+ ld.q r15, 22*8, r58
+ ld.q r15, 21*8, r57
+ ld.q r15, 20*8, r56
+ ld.q r15, 19*8, r55
+ ld.q r15, 18*8, r54
+ ld.q r15, 17*8, r53
+ ld.q r15, 16*8, r52
+ ld.q r15, 15*8, r51
+ ld.q r15, 14*8, r50
+ ld.q r15, 13*8, r49
+ ld.q r15, 12*8, r48
+ ld.q r15, 11*8, r47
+ ld.q r15, 10*8, r46
+ ld.q r15, 9*8, r45
+ ld.q r15, 8*8, r44
+ ld.q r15, 7*8, r35
+ ld.q r15, 6*8, r34
+ ld.q r15, 5*8, r33
+ ld.q r15, 4*8, r32
+ ld.q r15, 3*8, r31
+ ld.q r15, 2*8, r30
+ ld.q r15, 1*8, r29
+ ld.q r15, 0*8, r28
+ add.l r15, r0, r15
+ blink tr0, r63
+
+#ifndef __SH4_NOFPU__
+ ENDFUNC(GLOBAL(GCC_pop_shmedia_regs))
+#else
+ ENDFUNC(GLOBAL(GCC_pop_shmedia_regs_nofpu))
+#endif
+#endif /* __SH5__ == 32 */
+#endif /* L_push_pop_shmedia_regs */
+
+#ifdef L_div_table
+#if __SH5__
+#if defined(__pic__) && defined(__SHMEDIA__)
+ .global GLOBAL(sdivsi3)
+ FUNC(GLOBAL(sdivsi3))
+#if __SH5__ == 32
+ .section .text..SHmedia32,"ax"
+#else
+ .text
+#endif
+#if 0
+/* ??? FIXME: Presumably due to a linker bug, exporting data symbols
+ in a text section does not work (at least for shared libraries):
+ the linker sets the LSB of the address as if this was SHmedia code. */
+#define TEXT_DATA_BUG
+#endif
+ .align 2
+ // inputs: r4,r5
+ // clobbered: r1,r18,r19,r20,r21,r25,tr0
+ // result in r0
+ .global GLOBAL(sdivsi3)
+GLOBAL(sdivsi3):
+#ifdef TEXT_DATA_BUG
+ ptb datalabel Local_div_table,tr0
+#else
+ ptb GLOBAL(div_table_internal),tr0
+#endif
+ nsb r5, r1
+ shlld r5, r1, r25 // normalize; [-2 ..1, 1..2) in s2.62
+ shari r25, 58, r21 // extract 5(6) bit index (s2.4 with hole -1..1)
+ /* bubble */
+ gettr tr0,r20
+ ldx.ub r20, r21, r19 // u0.8
+ shari r25, 32, r25 // normalize to s2.30
+ shlli r21, 1, r21
+ muls.l r25, r19, r19 // s2.38
+ ldx.w r20, r21, r21 // s2.14
+ ptabs r18, tr0
+ shari r19, 24, r19 // truncate to s2.14
+ sub r21, r19, r19 // some 11 bit inverse in s1.14
+ muls.l r19, r19, r21 // u0.28
+ sub r63, r1, r1
+ addi r1, 92, r1
+ muls.l r25, r21, r18 // s2.58
+ shlli r19, 45, r19 // multiply by two and convert to s2.58
+ /* bubble */
+ sub r19, r18, r18
+ shari r18, 28, r18 // some 22 bit inverse in s1.30
+ muls.l r18, r25, r0 // s2.60
+ muls.l r18, r4, r25 // s32.30
+ /* bubble */
+ shari r0, 16, r19 // s-16.44
+ muls.l r19, r18, r19 // s-16.74
+ shari r25, 63, r0
+ shari r4, 14, r18 // s19.-14
+ shari r19, 30, r19 // s-16.44
+ muls.l r19, r18, r19 // s15.30
+ xor r21, r0, r21 // You could also use the constant 1 << 27.
+ add r21, r25, r21
+ sub r21, r19, r21
+ shard r21, r1, r21
+ sub r21, r0, r0
+ blink tr0, r63
+ ENDFUNC(GLOBAL(sdivsi3))
+/* This table has been generated by divtab.c .
+Defects for bias -330:
+ Max defect: 6.081536e-07 at -1.000000e+00
+ Min defect: 2.849516e-08 at 1.030651e+00
+ Max 2nd step defect: 9.606539e-12 at -1.000000e+00
+ Min 2nd step defect: 0.000000e+00 at 0.000000e+00
+ Defect at 1: 1.238659e-07
+ Defect at -2: 1.061708e-07 */
+#else /* ! __pic__ || ! __SHMEDIA__ */
+ .section .rodata
+#endif /* __pic__ */
+#if defined(TEXT_DATA_BUG) && defined(__pic__) && defined(__SHMEDIA__)
+ .balign 2
+ .type Local_div_table,@object
+ .size Local_div_table,128
+/* negative division constants */
+ .word -16638
+ .word -17135
+ .word -17737
+ .word -18433
+ .word -19103
+ .word -19751
+ .word -20583
+ .word -21383
+ .word -22343
+ .word -23353
+ .word -24407
+ .word -25582
+ .word -26863
+ .word -28382
+ .word -29965
+ .word -31800
+/* negative division factors */
+ .byte 66
+ .byte 70
+ .byte 75
+ .byte 81
+ .byte 87
+ .byte 93
+ .byte 101
+ .byte 109
+ .byte 119
+ .byte 130
+ .byte 142
+ .byte 156
+ .byte 172
+ .byte 192
+ .byte 214
+ .byte 241
+ .skip 16
+Local_div_table:
+ .skip 16
+/* positive division factors */
+ .byte 241
+ .byte 214
+ .byte 192
+ .byte 172
+ .byte 156
+ .byte 142
+ .byte 130
+ .byte 119
+ .byte 109
+ .byte 101
+ .byte 93
+ .byte 87
+ .byte 81
+ .byte 75
+ .byte 70
+ .byte 66
+/* positive division constants */
+ .word 31801
+ .word 29966
+ .word 28383
+ .word 26864
+ .word 25583
+ .word 24408
+ .word 23354
+ .word 22344
+ .word 21384
+ .word 20584
+ .word 19752
+ .word 19104
+ .word 18434
+ .word 17738
+ .word 17136
+ .word 16639
+ .section .rodata
+#endif /* TEXT_DATA_BUG */
+ .balign 2
+ .type GLOBAL(div_table),@object
+ .size GLOBAL(div_table),128
+/* negative division constants */
+ .word -16638
+ .word -17135
+ .word -17737
+ .word -18433
+ .word -19103
+ .word -19751
+ .word -20583
+ .word -21383
+ .word -22343
+ .word -23353
+ .word -24407
+ .word -25582
+ .word -26863
+ .word -28382
+ .word -29965
+ .word -31800
+/* negative division factors */
+ .byte 66
+ .byte 70
+ .byte 75
+ .byte 81
+ .byte 87
+ .byte 93
+ .byte 101
+ .byte 109
+ .byte 119
+ .byte 130
+ .byte 142
+ .byte 156
+ .byte 172
+ .byte 192
+ .byte 214
+ .byte 241
+ .skip 16
+ .global GLOBAL(div_table)
+GLOBAL(div_table):
+ HIDDEN_ALIAS(div_table_internal,div_table)
+ .skip 16
+/* positive division factors */
+ .byte 241
+ .byte 214
+ .byte 192
+ .byte 172
+ .byte 156
+ .byte 142
+ .byte 130
+ .byte 119
+ .byte 109
+ .byte 101
+ .byte 93
+ .byte 87
+ .byte 81
+ .byte 75
+ .byte 70
+ .byte 66
+/* positive division constants */
+ .word 31801
+ .word 29966
+ .word 28383
+ .word 26864
+ .word 25583
+ .word 24408
+ .word 23354
+ .word 22344
+ .word 21384
+ .word 20584
+ .word 19752
+ .word 19104
+ .word 18434
+ .word 17738
+ .word 17136
+ .word 16639
+
+#elif defined (__SH2A__) || defined (__SH3__) || defined (__SH3E__) || defined (__SH4__) || defined (__SH4_SINGLE__) || defined (__SH4_SINGLE_ONLY__) || defined (__SH4_NOFPU__)
+/* This code uses shld, thus is not suitable for SH1 / SH2. */
+
+/* Signed / unsigned division without use of FPU, optimized for SH4.
+ Uses a lookup table for divisors in the range -128 .. +128, and
+ div1 with case distinction for larger divisors in three more ranges.
+ The code is lumped together with the table to allow the use of mova. */
+#ifdef __LITTLE_ENDIAN__
+#define L_LSB 0
+#define L_LSWMSB 1
+#define L_MSWLSB 2
+#else
+#define L_LSB 3
+#define L_LSWMSB 2
+#define L_MSWLSB 1
+#endif
+
+ .balign 4
+ .global GLOBAL(udivsi3_i4i)
+ FUNC(GLOBAL(udivsi3_i4i))
+GLOBAL(udivsi3_i4i):
+ mov.w LOCAL(c128_w), r1
+ div0u
+ mov r4,r0
+ shlr8 r0
+ cmp/hi r1,r5
+ extu.w r5,r1
+ bf LOCAL(udiv_le128)
+ cmp/eq r5,r1
+ bf LOCAL(udiv_ge64k)
+ shlr r0
+ mov r5,r1
+ shll16 r5
+ mov.l r4,@-r15
+ div1 r5,r0
+ mov.l r1,@-r15
+ div1 r5,r0
+ div1 r5,r0
+ bra LOCAL(udiv_25)
+ div1 r5,r0
+
+LOCAL(div_le128):
+ mova LOCAL(div_table_ix),r0
+ bra LOCAL(div_le128_2)
+ mov.b @(r0,r5),r1
+LOCAL(udiv_le128):
+ mov.l r4,@-r15
+ mova LOCAL(div_table_ix),r0
+ mov.b @(r0,r5),r1
+ mov.l r5,@-r15
+LOCAL(div_le128_2):
+ mova LOCAL(div_table_inv),r0
+ mov.l @(r0,r1),r1
+ mov r5,r0
+ tst #0xfe,r0
+ mova LOCAL(div_table_clz),r0
+ dmulu.l r1,r4
+ mov.b @(r0,r5),r1
+ bt/s LOCAL(div_by_1)
+ mov r4,r0
+ mov.l @r15+,r5
+ sts mach,r0
+ /* clrt */
+ addc r4,r0
+ mov.l @r15+,r4
+ rotcr r0
+ rts
+ shld r1,r0
+
+LOCAL(div_by_1_neg):
+ neg r4,r0
+LOCAL(div_by_1):
+ mov.l @r15+,r5
+ rts
+ mov.l @r15+,r4
+
+LOCAL(div_ge64k):
+ bt/s LOCAL(div_r8)
+ div0u
+ shll8 r5
+ bra LOCAL(div_ge64k_2)
+ div1 r5,r0
+LOCAL(udiv_ge64k):
+ cmp/hi r0,r5
+ mov r5,r1
+ bt LOCAL(udiv_r8)
+ shll8 r5
+ mov.l r4,@-r15
+ div1 r5,r0
+ mov.l r1,@-r15
+LOCAL(div_ge64k_2):
+ div1 r5,r0
+ mov.l LOCAL(zero_l),r1
+ .rept 4
+ div1 r5,r0
+ .endr
+ mov.l r1,@-r15
+ div1 r5,r0
+ mov.w LOCAL(m256_w),r1
+ div1 r5,r0
+ mov.b r0,@(L_LSWMSB,r15)
+ xor r4,r0
+ and r1,r0
+ bra LOCAL(div_ge64k_end)
+ xor r4,r0
+
+LOCAL(div_r8):
+ shll16 r4
+ bra LOCAL(div_r8_2)
+ shll8 r4
+LOCAL(udiv_r8):
+ mov.l r4,@-r15
+ shll16 r4
+ clrt
+ shll8 r4
+ mov.l r5,@-r15
+LOCAL(div_r8_2):
+ rotcl r4
+ mov r0,r1
+ div1 r5,r1
+ mov r4,r0
+ rotcl r0
+ mov r5,r4
+ div1 r5,r1
+ .rept 5
+ rotcl r0; div1 r5,r1
+ .endr
+ rotcl r0
+ mov.l @r15+,r5
+ div1 r4,r1
+ mov.l @r15+,r4
+ rts
+ rotcl r0
+
+ ENDFUNC(GLOBAL(udivsi3_i4i))
+
+ .global GLOBAL(sdivsi3_i4i)
+ FUNC(GLOBAL(sdivsi3_i4i))
+ /* This is link-compatible with a GLOBAL(sdivsi3) call,
+ but we effectively clobber only r1. */
+GLOBAL(sdivsi3_i4i):
+ mov.l r4,@-r15
+ cmp/pz r5
+ mov.w LOCAL(c128_w), r1
+ bt/s LOCAL(pos_divisor)
+ cmp/pz r4
+ mov.l r5,@-r15
+ neg r5,r5
+ bt/s LOCAL(neg_result)
+ cmp/hi r1,r5
+ neg r4,r4
+LOCAL(pos_result):
+ extu.w r5,r0
+ bf LOCAL(div_le128)
+ cmp/eq r5,r0
+ mov r4,r0
+ shlr8 r0
+ bf/s LOCAL(div_ge64k)
+ cmp/hi r0,r5
+ div0u
+ shll16 r5
+ div1 r5,r0
+ div1 r5,r0
+ div1 r5,r0
+LOCAL(udiv_25):
+ mov.l LOCAL(zero_l),r1
+ div1 r5,r0
+ div1 r5,r0
+ mov.l r1,@-r15
+ .rept 3
+ div1 r5,r0
+ .endr
+ mov.b r0,@(L_MSWLSB,r15)
+ xtrct r4,r0
+ swap.w r0,r0
+ .rept 8
+ div1 r5,r0
+ .endr
+ mov.b r0,@(L_LSWMSB,r15)
+LOCAL(div_ge64k_end):
+ .rept 8
+ div1 r5,r0
+ .endr
+ mov.l @r15+,r4 ! zero-extension and swap using LS unit.
+ extu.b r0,r0
+ mov.l @r15+,r5
+ or r4,r0
+ mov.l @r15+,r4
+ rts
+ rotcl r0
+
+LOCAL(div_le128_neg):
+ tst #0xfe,r0
+ mova LOCAL(div_table_ix),r0
+ mov.b @(r0,r5),r1
+ mova LOCAL(div_table_inv),r0
+ bt/s LOCAL(div_by_1_neg)
+ mov.l @(r0,r1),r1
+ mova LOCAL(div_table_clz),r0
+ dmulu.l r1,r4
+ mov.b @(r0,r5),r1
+ mov.l @r15+,r5
+ sts mach,r0
+ /* clrt */
+ addc r4,r0
+ mov.l @r15+,r4
+ rotcr r0
+ shld r1,r0
+ rts
+ neg r0,r0
+
+LOCAL(pos_divisor):
+ mov.l r5,@-r15
+ bt/s LOCAL(pos_result)
+ cmp/hi r1,r5
+ neg r4,r4
+LOCAL(neg_result):
+ extu.w r5,r0
+ bf LOCAL(div_le128_neg)
+ cmp/eq r5,r0
+ mov r4,r0
+ shlr8 r0
+ bf/s LOCAL(div_ge64k_neg)
+ cmp/hi r0,r5
+ div0u
+ mov.l LOCAL(zero_l),r1
+ shll16 r5
+ div1 r5,r0
+ mov.l r1,@-r15
+ .rept 7
+ div1 r5,r0
+ .endr
+ mov.b r0,@(L_MSWLSB,r15)
+ xtrct r4,r0
+ swap.w r0,r0
+ .rept 8
+ div1 r5,r0
+ .endr
+ mov.b r0,@(L_LSWMSB,r15)
+LOCAL(div_ge64k_neg_end):
+ .rept 8
+ div1 r5,r0
+ .endr
+ mov.l @r15+,r4 ! zero-extension and swap using LS unit.
+ extu.b r0,r1
+ mov.l @r15+,r5
+ or r4,r1
+LOCAL(div_r8_neg_end):
+ mov.l @r15+,r4
+ rotcl r1
+ rts
+ neg r1,r0
+
+LOCAL(div_ge64k_neg):
+ bt/s LOCAL(div_r8_neg)
+ div0u
+ shll8 r5
+ mov.l LOCAL(zero_l),r1
+ .rept 6
+ div1 r5,r0
+ .endr
+ mov.l r1,@-r15
+ div1 r5,r0
+ mov.w LOCAL(m256_w),r1
+ div1 r5,r0
+ mov.b r0,@(L_LSWMSB,r15)
+ xor r4,r0
+ and r1,r0
+ bra LOCAL(div_ge64k_neg_end)
+ xor r4,r0
+
+LOCAL(c128_w):
+ .word 128
+
+LOCAL(div_r8_neg):
+ clrt
+ shll16 r4
+ mov r4,r1
+ shll8 r1
+ mov r5,r4
+ .rept 7
+ rotcl r1; div1 r5,r0
+ .endr
+ mov.l @r15+,r5
+ rotcl r1
+ bra LOCAL(div_r8_neg_end)
+ div1 r4,r0
+
+LOCAL(m256_w):
+ .word 0xff00
+/* This table has been generated by divtab-sh4.c. */
+ .balign 4
+LOCAL(div_table_clz):
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte -1
+ .byte -1
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte -2
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -3
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -4
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -5
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+ .byte -6
+/* Lookup table translating positive divisor to index into table of
+ normalized inverse. N.B. the '0' entry is also the last entry of the
+ previous table, and causes an unaligned access for division by zero. */
+LOCAL(div_table_ix):
+ .byte -6
+ .byte -128
+ .byte -128
+ .byte 0
+ .byte -128
+ .byte -64
+ .byte 0
+ .byte 64
+ .byte -128
+ .byte -96
+ .byte -64
+ .byte -32
+ .byte 0
+ .byte 32
+ .byte 64
+ .byte 96
+ .byte -128
+ .byte -112
+ .byte -96
+ .byte -80
+ .byte -64
+ .byte -48
+ .byte -32
+ .byte -16
+ .byte 0
+ .byte 16
+ .byte 32
+ .byte 48
+ .byte 64
+ .byte 80
+ .byte 96
+ .byte 112
+ .byte -128
+ .byte -120
+ .byte -112
+ .byte -104
+ .byte -96
+ .byte -88
+ .byte -80
+ .byte -72
+ .byte -64
+ .byte -56
+ .byte -48
+ .byte -40
+ .byte -32
+ .byte -24
+ .byte -16
+ .byte -8
+ .byte 0
+ .byte 8
+ .byte 16
+ .byte 24
+ .byte 32
+ .byte 40
+ .byte 48
+ .byte 56
+ .byte 64
+ .byte 72
+ .byte 80
+ .byte 88
+ .byte 96
+ .byte 104
+ .byte 112
+ .byte 120
+ .byte -128
+ .byte -124
+ .byte -120
+ .byte -116
+ .byte -112
+ .byte -108
+ .byte -104
+ .byte -100
+ .byte -96
+ .byte -92
+ .byte -88
+ .byte -84
+ .byte -80
+ .byte -76
+ .byte -72
+ .byte -68
+ .byte -64
+ .byte -60
+ .byte -56
+ .byte -52
+ .byte -48
+ .byte -44
+ .byte -40
+ .byte -36
+ .byte -32
+ .byte -28
+ .byte -24
+ .byte -20
+ .byte -16
+ .byte -12
+ .byte -8
+ .byte -4
+ .byte 0
+ .byte 4
+ .byte 8
+ .byte 12
+ .byte 16
+ .byte 20
+ .byte 24
+ .byte 28
+ .byte 32
+ .byte 36
+ .byte 40
+ .byte 44
+ .byte 48
+ .byte 52
+ .byte 56
+ .byte 60
+ .byte 64
+ .byte 68
+ .byte 72
+ .byte 76
+ .byte 80
+ .byte 84
+ .byte 88
+ .byte 92
+ .byte 96
+ .byte 100
+ .byte 104
+ .byte 108
+ .byte 112
+ .byte 116
+ .byte 120
+ .byte 124
+ .byte -128
+/* 1/64 .. 1/127, normalized. There is an implicit leading 1 in bit 32. */
+ .balign 4
+LOCAL(zero_l):
+ .long 0x0
+ .long 0xF81F81F9
+ .long 0xF07C1F08
+ .long 0xE9131AC0
+ .long 0xE1E1E1E2
+ .long 0xDAE6076C
+ .long 0xD41D41D5
+ .long 0xCD856891
+ .long 0xC71C71C8
+ .long 0xC0E07039
+ .long 0xBACF914D
+ .long 0xB4E81B4F
+ .long 0xAF286BCB
+ .long 0xA98EF607
+ .long 0xA41A41A5
+ .long 0x9EC8E952
+ .long 0x9999999A
+ .long 0x948B0FCE
+ .long 0x8F9C18FA
+ .long 0x8ACB90F7
+ .long 0x86186187
+ .long 0x81818182
+ .long 0x7D05F418
+ .long 0x78A4C818
+ .long 0x745D1746
+ .long 0x702E05C1
+ .long 0x6C16C16D
+ .long 0x68168169
+ .long 0x642C8591
+ .long 0x60581606
+ .long 0x5C9882BA
+ .long 0x58ED2309
+LOCAL(div_table_inv):
+ .long 0x55555556
+ .long 0x51D07EAF
+ .long 0x4E5E0A73
+ .long 0x4AFD6A06
+ .long 0x47AE147B
+ .long 0x446F8657
+ .long 0x41414142
+ .long 0x3E22CBCF
+ .long 0x3B13B13C
+ .long 0x38138139
+ .long 0x3521CFB3
+ .long 0x323E34A3
+ .long 0x2F684BDB
+ .long 0x2C9FB4D9
+ .long 0x29E4129F
+ .long 0x27350B89
+ .long 0x24924925
+ .long 0x21FB7813
+ .long 0x1F7047DD
+ .long 0x1CF06ADB
+ .long 0x1A7B9612
+ .long 0x18118119
+ .long 0x15B1E5F8
+ .long 0x135C8114
+ .long 0x11111112
+ .long 0xECF56BF
+ .long 0xC9714FC
+ .long 0xA6810A7
+ .long 0x8421085
+ .long 0x624DD30
+ .long 0x4104105
+ .long 0x2040811
+ /* maximum error: 0.987342 scaled: 0.921875*/
+
+ ENDFUNC(GLOBAL(sdivsi3_i4i))
+#endif /* SH3 / SH4 */
+
+#endif /* L_div_table */
+
+#ifdef L_udiv_qrnnd_16
+#if !__SHMEDIA__
+ HIDDEN_FUNC(GLOBAL(udiv_qrnnd_16))
+ /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */
+ /* n1 < d, but n1 might be larger than d1. */
+ .global GLOBAL(udiv_qrnnd_16)
+ .balign 8
+GLOBAL(udiv_qrnnd_16):
+ div0u
+ cmp/hi r6,r0
+ bt .Lots
+ .rept 16
+ div1 r6,r0
+ .endr
+ extu.w r0,r1
+ bt 0f
+ add r6,r0
+0: rotcl r1
+ mulu.w r1,r5
+ xtrct r4,r0
+ swap.w r0,r0
+ sts macl,r2
+ cmp/hs r2,r0
+ sub r2,r0
+ bt 0f
+ addc r5,r0
+ add #-1,r1
+ bt 0f
+1: add #-1,r1
+ rts
+ add r5,r0
+ .balign 8
+.Lots:
+ sub r5,r0
+ swap.w r4,r1
+ xtrct r0,r1
+ clrt
+ mov r1,r0
+ addc r5,r0
+ mov #-1,r1
+ SL1(bf, 1b,
+ shlr16 r1)
+0: rts
+ nop
+ ENDFUNC(GLOBAL(udiv_qrnnd_16))
+#endif /* !__SHMEDIA__ */
+#endif /* L_udiv_qrnnd_16 */
diff --git a/gcc-4.9/libgcc/config/sh/lib1funcs.h b/gcc-4.9/libgcc/config/sh/lib1funcs.h
new file mode 100644
index 000000000..be25dc825
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/lib1funcs.h
@@ -0,0 +1,74 @@
+/* Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifdef __ELF__
+#define LOCAL(X) .L_##X
+#define FUNC(X) .type X,@function
+#define HIDDEN_FUNC(X) FUNC(X); .hidden X
+#define HIDDEN_ALIAS(X,Y) ALIAS (X,Y); .hidden GLOBAL(X)
+#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
+#define ENDFUNC(X) ENDFUNC0(X)
+#else
+#define LOCAL(X) L_##X
+#define FUNC(X)
+#define HIDDEN_FUNC(X)
+#define HIDDEN_ALIAS(X,Y) ALIAS (X,Y)
+#define ENDFUNC(X)
+#endif
+
+#define CONCAT(A,B) A##B
+#define GLOBAL0(U,X) CONCAT(U,__##X)
+#define GLOBAL(X) GLOBAL0(__USER_LABEL_PREFIX__,X)
+
+#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y)
+
+#if defined __SH2A__ && defined __FMOVD_ENABLED__
+#undef FMOVD_WORKS
+#define FMOVD_WORKS
+#endif
+
+#ifdef __LITTLE_ENDIAN__
+#define DR00 fr1
+#define DR01 fr0
+#define DR20 fr3
+#define DR21 fr2
+#define DR40 fr5
+#define DR41 fr4
+#else /* !__LITTLE_ENDIAN__ */
+#define DR00 fr0
+#define DR01 fr1
+#define DR20 fr2
+#define DR21 fr3
+#define DR40 fr4
+#define DR41 fr5
+#endif /* !__LITTLE_ENDIAN__ */
+
+#ifdef __sh1__
+#define SL(branch, dest, in_slot, in_slot_arg2) \
+ in_slot, in_slot_arg2; branch dest
+#define SL1(branch, dest, in_slot) \
+ in_slot; branch dest
+#else /* ! __sh1__ */
+#define SL(branch, dest, in_slot, in_slot_arg2) \
+ branch##.s dest; in_slot, in_slot_arg2
+#define SL1(branch, dest, in_slot) \
+ branch##/s dest; in_slot
+#endif /* !__sh1__ */
diff --git a/gcc-4.9/libgcc/config/sh/libgcc-excl.ver b/gcc-4.9/libgcc/config/sh/libgcc-excl.ver
new file mode 100644
index 000000000..325c74054
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/libgcc-excl.ver
@@ -0,0 +1,8 @@
+# Exclude various symbols which should not be visible in libgcc.so for SH.
+%exclude {
+ __ashlsi3
+ __ashrsi3
+ __lshrsi3
+ __mulsi3 # this is an SH1-only symbol.
+ __udivsi3
+}
diff --git a/gcc-4.9/libgcc/config/sh/libgcc-glibc.ver b/gcc-4.9/libgcc/config/sh/libgcc-glibc.ver
new file mode 100644
index 000000000..17a1d809e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/libgcc-glibc.ver
@@ -0,0 +1,48 @@
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# In order to work around the very problems that force us to now generally
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+# By now choosing the same version tags for these specific routines, we
+# maintain enough binary compatibility to allow future versions of glibc
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+# Note that we cannot use the default libgcc-glibc.ver file on sh,
+# because GLIBC_2.0 does not exist on this architecture, as the first
+# ever glibc release on the platform was GLIBC_2.2.
+
+%exclude {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%inherit GCC_3.0 GLIBC_2.2
+GLIBC_2.2 {
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
diff --git a/gcc-4.9/libgcc/config/sh/linux-atomic.c b/gcc-4.9/libgcc/config/sh/linux-atomic.c
new file mode 100644
index 000000000..1ef02eaa6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/linux-atomic.c
@@ -0,0 +1,81 @@
+/* Copyright (C) 2012-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Atomic built-in C functions for link compatibility with older code that
+ was compiled to emit function calls for atomic built-ins.
+ Notice that if no atomic model has been selected the functions in this
+ file must not be generated, or else they will result in infinite no-op
+ loops.
+ Notice also, that all the generated functions below take three parameters,
+ which is not actually true for some of the built-in functions. However,
+ on SH this does not matter, since the first four parameters are always
+ passed in call clobbered registers.
+ The return type for the sync_bool_compare_and_swap functions is also
+ actually supposed to be a bool, but this also doesn't matter since any
+ int return type <= 32 bit is returned in R0 on SH. */
+
+#if !__SH_ATOMIC_MODEL_NONE__
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+
+#define uint8_t_sz 1
+#define uint16_t_sz 2
+#define uint32_t_sz 4
+
+#define typesz(x) x##_sz
+
+#define concat(x,y) __ ## x ## _ ## y
+#define eval(x,y) concat (x,y)
+#define genname(f,t) eval(f, typesz (t))
+
+#define func1(name, type) \
+ type __attribute__((visibility("hidden"))) \
+ genname (name, type) (type* x, type y, type z) \
+ { \
+ return __##name (x, y, z); \
+ }
+
+#define genfuncs(name) \
+ func1 (name, uint8_t) \
+ func1 (name, uint16_t) \
+ func1 (name, uint32_t)
+
+genfuncs (sync_lock_test_and_set)
+genfuncs (sync_val_compare_and_swap)
+genfuncs (sync_bool_compare_and_swap)
+genfuncs (sync_fetch_and_add)
+genfuncs (sync_fetch_and_or)
+genfuncs (sync_fetch_and_and)
+genfuncs (sync_fetch_and_xor)
+genfuncs (sync_fetch_and_sub)
+genfuncs (sync_fetch_and_nand)
+genfuncs (sync_add_and_fetch)
+genfuncs (sync_or_and_fetch)
+genfuncs (sync_and_and_fetch)
+genfuncs (sync_xor_and_fetch)
+genfuncs (sync_sub_and_fetch)
+genfuncs (sync_nand_and_fetch)
+
+#endif
diff --git a/gcc-4.9/libgcc/config/sh/linux-unwind.h b/gcc-4.9/libgcc/config/sh/linux-unwind.h
new file mode 100644
index 000000000..4875706d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/linux-unwind.h
@@ -0,0 +1,255 @@
+/* DWARF2 EH unwinding support for SH Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs.
+ Don't use this at all if inhibit_libc is used. */
+
+#ifndef inhibit_libc
+
+#include <signal.h>
+#include <sys/ucontext.h>
+#include "insn-constants.h"
+
+# if defined (__SH5__)
+#define SH_DWARF_FRAME_GP0 0
+#define SH_DWARF_FRAME_FP0 77
+#define SH_DWARF_FRAME_BT0 68
+#define SH_DWARF_FRAME_PR_MEDIA 18
+#define SH_DWARF_FRAME_SR 65
+#define SH_DWARF_FRAME_FPSCR 76
+#else
+#define SH_DWARF_FRAME_GP0 0
+#define SH_DWARF_FRAME_FP0 25
+#define SH_DWARF_FRAME_XD0 87
+#define SH_DWARF_FRAME_PR 17
+#define SH_DWARF_FRAME_GBR 18
+#define SH_DWARF_FRAME_MACH 20
+#define SH_DWARF_FRAME_MACL 21
+#define SH_DWARF_FRAME_PC 16
+#define SH_DWARF_FRAME_SR 22
+#define SH_DWARF_FRAME_FPUL 23
+#define SH_DWARF_FRAME_FPSCR 24
+#endif /* defined (__SH5__) */
+
+#if defined (__SH5__)
+
+#define MD_FALLBACK_FRAME_STATE_FOR shmedia_fallback_frame_state
+
+static _Unwind_Reason_Code
+shmedia_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+ int i, r;
+
+ /* movi 0x10,r9; shori 0x77,r9; trapa r9; nop (sigreturn) */
+ /* movi 0x10,r9; shori 0xad,r9; trapa r9; nop (rt_sigreturn) */
+ if ((*(unsigned long *) (pc-1) == 0xcc004090)
+ && (*(unsigned long *) (pc+3) == 0xc801dc90)
+ && (*(unsigned long *) (pc+7) == 0x6c91fff0)
+ && (*(unsigned long *) (pc+11) == 0x6ff0fff0))
+ sc = context->cfa;
+ else if ((*(unsigned long *) (pc-1) == 0xcc004090)
+ && (*(unsigned long *) (pc+3) == 0xc802b490)
+ && (*(unsigned long *) (pc+7) == 0x6c91fff0)
+ && (*(unsigned long *) (pc+11) == 0x6ff0fff0))
+ {
+ struct rt_sigframe {
+ siginfo_t *pinfo;
+ void *puc;
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_ = context->cfa;
+ /* The void * cast is necessary to avoid an aliasing warning.
+ The aliasing warning is correct, but should not be a problem
+ because it does not alias anything. */
+ sc = (struct sigcontext *) (void *) &rt_->uc.uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = sc->sc_regs[15];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ for (i = 0; i < 63; i++)
+ {
+ if (i == 15)
+ continue;
+
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = (long)&(sc->sc_regs[i]) - new_cfa;
+ }
+
+ fs->regs.reg[SH_DWARF_FRAME_SR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_SR].loc.offset
+ = (long)&(sc->sc_sr) - new_cfa;
+
+ r = SH_DWARF_FRAME_BT0;
+ for (i = 0; i < 8; i++)
+ {
+ fs->regs.reg[r+i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[r+i].loc.offset
+ = (long)&(sc->sc_tregs[i]) - new_cfa;
+ }
+
+ r = SH_DWARF_FRAME_FP0;
+ for (i = 0; i < 32; i++)
+ {
+ fs->regs.reg[r+i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[r+i].loc.offset
+ = (long)&(sc->sc_fpregs[i]) - new_cfa;
+ }
+
+ fs->regs.reg[SH_DWARF_FRAME_FPSCR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_FPSCR].loc.offset
+ = (long)&(sc->sc_fpscr) - new_cfa;
+
+ /* We use the slot for the zero register to save return address. */
+ fs->regs.reg[63].how = REG_SAVED_OFFSET;
+ fs->regs.reg[63].loc.offset
+ = (long)&(sc->sc_pc) - new_cfa;
+ fs->retaddr_column = 63;
+ fs->signal_frame = 1;
+ return _URC_NO_REASON;
+}
+
+#else /* defined (__SH5__) */
+
+#define MD_FALLBACK_FRAME_STATE_FOR sh_fallback_frame_state
+
+static _Unwind_Reason_Code
+sh_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+ int i;
+#if defined (__SH3E__) || defined (__SH4__)
+ int r;
+#endif
+
+ /* mov.w 1f,r3; trapa #0x10; 1: .short 0x77 (sigreturn) */
+ /* mov.w 1f,r3; trapa #0x10; 1: .short 0xad (rt_sigreturn) */
+ /* Newer kernel uses pad instructions to avoid an SH-4 core bug. */
+ /* mov.w 1f,r3; trapa #0x10; or r0,r0; or r0,r0; or r0,r0; or r0,r0;
+ or r0,r0; 1: .short 0x77 (sigreturn) */
+ /* mov.w 1f,r3; trapa #0x10; or r0,r0; or r0,r0; or r0,r0; or r0,r0;
+ or r0,r0; 1: .short 0xad (rt_sigreturn) */
+ if (((*(unsigned short *) (pc+0) == 0x9300)
+ && (*(unsigned short *) (pc+2) == 0xc310)
+ && (*(unsigned short *) (pc+4) == 0x0077))
+ || (((*(unsigned short *) (pc+0) == 0x9305)
+ && (*(unsigned short *) (pc+2) == 0xc310)
+ && (*(unsigned short *) (pc+14) == 0x0077))))
+ sc = context->cfa;
+ else if (((*(unsigned short *) (pc+0) == 0x9300)
+ && (*(unsigned short *) (pc+2) == 0xc310)
+ && (*(unsigned short *) (pc+4) == 0x00ad))
+ || (((*(unsigned short *) (pc+0) == 0x9305)
+ && (*(unsigned short *) (pc+2) == 0xc310)
+ && (*(unsigned short *) (pc+14) == 0x00ad))))
+ {
+ struct rt_sigframe {
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_ = context->cfa;
+ /* The void * cast is necessary to avoid an aliasing warning.
+ The aliasing warning is correct, but should not be a problem
+ because it does not alias anything. */
+ sc = (struct sigcontext *) (void *) &rt_->uc.uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ new_cfa = sc->sc_regs[15];
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = 15;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ for (i = 0; i < 15; i++)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = (long)&(sc->sc_regs[i]) - new_cfa;
+ }
+
+ fs->regs.reg[SH_DWARF_FRAME_PR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_PR].loc.offset
+ = (long)&(sc->sc_pr) - new_cfa;
+ fs->regs.reg[SH_DWARF_FRAME_SR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_SR].loc.offset
+ = (long)&(sc->sc_sr) - new_cfa;
+ fs->regs.reg[SH_DWARF_FRAME_GBR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_GBR].loc.offset
+ = (long)&(sc->sc_gbr) - new_cfa;
+ fs->regs.reg[SH_DWARF_FRAME_MACH].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_MACH].loc.offset
+ = (long)&(sc->sc_mach) - new_cfa;
+ fs->regs.reg[SH_DWARF_FRAME_MACL].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_MACL].loc.offset
+ = (long)&(sc->sc_macl) - new_cfa;
+
+#if defined (__SH3E__) || defined (__SH4__)
+ r = SH_DWARF_FRAME_FP0;
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[r+i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[r+i].loc.offset
+ = (long)&(sc->sc_fpregs[i]) - new_cfa;
+ }
+
+ r = SH_DWARF_FRAME_XD0;
+ for (i = 0; i < 8; i++)
+ {
+ fs->regs.reg[r+i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[r+i].loc.offset
+ = (long)&(sc->sc_xfpregs[2*i]) - new_cfa;
+ }
+
+ fs->regs.reg[SH_DWARF_FRAME_FPUL].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_FPUL].loc.offset
+ = (long)&(sc->sc_fpul) - new_cfa;
+ fs->regs.reg[SH_DWARF_FRAME_FPSCR].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_FPSCR].loc.offset
+ = (long)&(sc->sc_fpscr) - new_cfa;
+#endif
+
+ fs->regs.reg[SH_DWARF_FRAME_PC].how = REG_SAVED_OFFSET;
+ fs->regs.reg[SH_DWARF_FRAME_PC].loc.offset
+ = (long)&(sc->sc_pc) - new_cfa;
+ fs->retaddr_column = SH_DWARF_FRAME_PC;
+ fs->signal_frame = 1;
+ return _URC_NO_REASON;
+}
+#endif /* defined (__SH5__) */
+
+#endif /* inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/sh/t-linux b/gcc-4.9/libgcc/config/sh/t-linux
new file mode 100644
index 000000000..d316db937
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/t-linux
@@ -0,0 +1,18 @@
+LIB1ASMFUNCS_CACHE = _ic_invalidate _ic_invalidate_array
+
+LIB2ADD = $(srcdir)/config/sh/linux-atomic.c
+
+HOST_LIBGCC2_CFLAGS += -DNO_FPSCR_VALUES
+
+# Silence atomic built-in related warnings in linux-atomic.c.
+# Unfortunately the conflicting types warning can't be disabled selectively.
+HOST_LIBGCC2_CFLAGS += -w -Wno-sync-nand
+
+# Override t-slibgcc-elf-ver to export some libgcc symbols with
+# the symbol versions that glibc used, and hide some lib1func
+# routines which should not be called via PLT. We have to create
+# the list from scratch.
+SHLIB_MAPFILES = \
+ libgcc-std.ver \
+ $(srcdir)/config/sh/libgcc-excl.ver \
+ $(srcdir)/config/sh/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/sh/t-netbsd b/gcc-4.9/libgcc/config/sh/t-netbsd
new file mode 100644
index 000000000..93fe287e5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/t-netbsd
@@ -0,0 +1,2 @@
+LIB1ASMFUNCS_CACHE = _ic_invalidate
+
diff --git a/gcc-4.9/libgcc/config/sh/t-sh b/gcc-4.9/libgcc/config/sh/t-sh
new file mode 100644
index 000000000..111bbf603
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/t-sh
@@ -0,0 +1,60 @@
+# Copyright (C) 1993-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+LIB1ASMSRC = sh/lib1funcs.S
+LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movmem \
+ _movmem_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
+ _div_table _udiv_qrnnd_16 \
+ $(LIB1ASMFUNCS_CACHE)
+LIB1ASMFUNCS_CACHE = _ic_invalidate _ic_invalidate_array
+
+crt1.o: $(srcdir)/config/sh/crt1.S
+ $(gcc_compile) -c $<
+
+ic_invalidate_array_4-100.o: $(srcdir)/config/sh/lib1funcs.S
+ $(gcc_compile) -c -DL_ic_invalidate_array -DWAYS=1 -DWAY_SIZE=0x2000 $<
+libic_invalidate_array_4-100.a: ic_invalidate_array_4-100.o
+ $(AR_CREATE_FOR_TARGET) $@ $<
+
+ic_invalidate_array_4-200.o: $(srcdir)/config/sh/lib1funcs.S
+ $(gcc_compile) -c -DL_ic_invalidate_array -DWAYS=2 -DWAY_SIZE=0x2000 $<
+libic_invalidate_array_4-200.a: ic_invalidate_array_4-200.o
+ $(AR_CREATE_FOR_TARGET) $@ $<
+
+ic_invalidate_array_4a.o: $(srcdir)/config/sh/lib1funcs.S
+ $(gcc_compile) -c -DL_ic_invalidate_array -D__FORCE_SH4A__ $<
+libic_invalidate_array_4a.a: ic_invalidate_array_4a.o
+ $(AR_CREATE_FOR_TARGET) $@ $<
+
+sdivsi3_i4i-Os-4-200.o: $(srcdir)/config/sh/lib1funcs-Os-4-200.S
+ $(gcc_compile) -c -DL_sdivsi3_i4i $<
+udivsi3_i4i-Os-4-200.o: $(srcdir)/config/sh/lib1funcs-Os-4-200.S
+ $(gcc_compile) -c -DL_udivsi3_i4i $<
+unwind-dw2-Os-4-200.o: $(srcdir)/unwind-dw2.c
+ $(gcc_compile) $(LIBGCC2_CFLAGS) $(vis_hide) -fexceptions -Os -c $<
+
+OBJS_Os_4_200=sdivsi3_i4i-Os-4-200.o udivsi3_i4i-Os-4-200.o unwind-dw2-Os-4-200.o
+libgcc-Os-4-200.a: $(OBJS_Os_4_200)
+ $(AR_CREATE_FOR_TARGET) $@ $(OBJS_Os_4_200)
+
+div_table-4-300.o: $(srcdir)/config/sh/lib1funcs-4-300.S
+ $(gcc_compile) -c -DL_div_table $<
+
+libgcc-4-300.a: div_table-4-300.o
+ $(AR_CREATE_FOR_TARGET) $@ div_table-4-300.o
+
diff --git a/gcc-4.9/libgcc/config/sh/t-sh64 b/gcc-4.9/libgcc/config/sh/t-sh64
new file mode 100644
index 000000000..fa9950e03
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/t-sh64
@@ -0,0 +1,6 @@
+LIB1ASMFUNCS = \
+ _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
+ _shcompact_call_trampoline _shcompact_return_trampoline \
+ _shcompact_incoming_args _ic_invalidate _nested_trampoline \
+ _push_pop_shmedia_regs \
+ _udivdi3 _divdi3 _umoddi3 _moddi3 _div_table
diff --git a/gcc-4.9/libgcc/config/sh/t-superh b/gcc-4.9/libgcc/config/sh/t-superh
new file mode 100644
index 000000000..b87aa5a31
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sh/t-superh
@@ -0,0 +1,11 @@
+# Compile crt1-mmu.o as crt1.o with -DMMU_SUPPORT
+crt1-mmu.o: $(srcdir)/config/sh/crt1.S
+ $(gcc_compile) -c -DMMU_SUPPORT $<
+
+# Compile gcrt1-mmu.o as crt1-mmu.o with -DPROFILE
+gcrt1-mmu.o: $(srcdir)/config/sh/crt1.S
+ $(gcc_compile) -c -DPROFILE -DMMU_SUPPORT $<
+
+# For sh4-400: Compile gcrt1.o as crt1.o with -DPROFILE
+gcrt1.o: $(srcdir)/config/sh/crt1.S
+ $(gcc_compile) -c -DPROFILE $<
diff --git a/gcc-4.9/libgcc/config/sparc/crtfastmath.c b/gcc-4.9/libgcc/config/sparc/crtfastmath.c
new file mode 100644
index 000000000..2bc2fb5b4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/crtfastmath.c
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ * Contributed by David S. Miller (davem@redhat.com)
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 3, or (at your option) any
+ * later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#define FPRS_NS (1 << 22) /* Non-Standard fpu results */
+
+static void __attribute__((constructor))
+set_fast_math (void)
+{
+ unsigned int fsr;
+
+ /* This works for the 64-bit case because, even if 32-bit ld/st of
+ the fsr register modified the upper 32-bit, the only thing up there
+ are the 3 other condition codes which are "do not care" at the time
+ that this runs. */
+
+ __asm__("st %%fsr, %0"
+ : "=m" (fsr));
+
+ fsr |= FPRS_NS;
+
+ __asm__("ld %0, %%fsr"
+ : : "m" (fsr));
+}
diff --git a/gcc-4.9/libgcc/config/sparc/crti.S b/gcc-4.9/libgcc/config/sparc/crti.S
new file mode 100644
index 000000000..e48aefb81
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/crti.S
@@ -0,0 +1,77 @@
+! crti.S for SPARC
+
+! Copyright (C) 1992-2014 Free Software Foundation, Inc.
+! Written By David Vinayak Henkel-Wallace, June 1992
+!
+! This file is free software; you can redistribute it and/or modify it
+! under the terms of the GNU General Public License as published by the
+! Free Software Foundation; either version 3, or (at your option) any
+! later version.
+!
+! This file is distributed in the hope that it will be useful, but
+! WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+! General Public License for more details.
+!
+! Under Section 7 of GPL version 3, you are granted additional
+! permissions described in the GCC Runtime Library Exception, version
+! 3.1, as published by the Free Software Foundation.
+!
+! You should have received a copy of the GNU General Public License and
+! a copy of the GCC Runtime Library Exception along with this program;
+! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+! <http://www.gnu.org/licenses/>.
+
+! This file just make a stack frame for the contents of the .fini and
+! .init sections. Users may put any desired instructions in those
+! sections.
+
+! This file is linked in before the Values-Xx.o files and also before
+! crtbegin, with which perhaps it should be merged.
+
+ .section ".init"
+ .proc 022
+ .global _init
+ .type _init,#function
+ .align 4
+_init:
+#ifdef _FLAT
+#ifdef __sparcv9
+ stx %i7, [%sp+2167]
+ add %sp, -176, %sp
+#else
+ st %i7, [%sp+60]
+ add %sp, -96, %sp
+#endif
+ mov %o7, %i7
+#else
+#ifdef __sparcv9
+ save %sp, -176, %sp
+#else
+ save %sp, -96, %sp
+#endif
+#endif
+
+
+ .section ".fini"
+ .proc 022
+ .global _fini
+ .type _fini,#function
+ .align 4
+_fini:
+#ifdef _FLAT
+#ifdef __sparcv9
+ stx %i7, [%sp+2167]
+ add %sp, -176, %sp
+#else
+ st %i7, [%sp+60]
+ add %sp, -96, %sp
+#endif
+ mov %o7, %i7
+#else
+#ifdef __sparcv9
+ save %sp, -176, %sp
+#else
+ save %sp, -96, %sp
+#endif
+#endif
diff --git a/gcc-4.9/libgcc/config/sparc/crtn.S b/gcc-4.9/libgcc/config/sparc/crtn.S
new file mode 100644
index 000000000..5b15f759d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/crtn.S
@@ -0,0 +1,63 @@
+! crtn.S for SPARC
+
+! Copyright (C) 1992-2014 Free Software Foundation, Inc.
+! Written By David Vinayak Henkel-Wallace, June 1992
+!
+! This file is free software; you can redistribute it and/or modify it
+! under the terms of the GNU General Public License as published by the
+! Free Software Foundation; either version 3, or (at your option) any
+! later version.
+!
+! This file is distributed in the hope that it will be useful, but
+! WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+! General Public License for more details.
+!
+! Under Section 7 of GPL version 3, you are granted additional
+! permissions described in the GCC Runtime Library Exception, version
+! 3.1, as published by the Free Software Foundation.
+!
+! You should have received a copy of the GNU General Public License and
+! a copy of the GCC Runtime Library Exception along with this program;
+! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+! <http://www.gnu.org/licenses/>.
+
+! This file just makes sure that the .fini and .init sections do in
+! fact return. Users may put any desired instructions in those sections.
+! This file is the last thing linked into any executable.
+
+ .section ".init"
+ .align 4
+#ifdef _FLAT
+ mov %i7, %o7
+#ifdef __sparcv9
+ ldx [%sp+2343], %i7
+ sub %sp, -176, %sp
+#else
+ ld [%sp+156], %i7
+ sub %sp, -96, %sp
+#endif
+#else
+ restore
+#endif
+ jmp %o7+8
+ nop
+
+ .section ".fini"
+ .align 4
+#ifdef _FLAT
+ mov %i7, %o7
+#ifdef __sparcv9
+ ldx [%sp+2343], %i7
+ sub %sp, -176, %sp
+#else
+ ld [%sp+156], %i7
+ sub %sp, -96, %sp
+#endif
+#else
+ restore
+#endif
+ jmp %o7+8
+ nop
+
+! Th-th-th-that is all folks!
diff --git a/gcc-4.9/libgcc/config/sparc/lb1spc.S b/gcc-4.9/libgcc/config/sparc/lb1spc.S
new file mode 100644
index 000000000..b60bd5740
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/lb1spc.S
@@ -0,0 +1,784 @@
+/* This is an assembly language implementation of mulsi3, divsi3, and modsi3
+ for the sparc processor.
+
+ These routines are derived from the SPARC Architecture Manual, version 8,
+ slightly edited to match the desired calling convention, and also to
+ optimize them for our purposes. */
+
+#ifdef L_mulsi3
+.text
+ .align 4
+ .global .umul
+ .proc 4
+.umul:
+ or %o0, %o1, %o4 ! logical or of multiplier and multiplicand
+ mov %o0, %y ! multiplier to Y register
+ andncc %o4, 0xfff, %o5 ! mask out lower 12 bits
+ be mul_shortway ! can do it the short way
+ andcc %g0, %g0, %o4 ! zero the partial product and clear NV cc
+ !
+ ! long multiply
+ !
+ mulscc %o4, %o1, %o4 ! first iteration of 33
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4 ! 32nd iteration
+ mulscc %o4, %g0, %o4 ! last iteration only shifts
+ ! the upper 32 bits of product are wrong, but we do not care
+ retl
+ rd %y, %o0
+ !
+ ! short multiply
+ !
+mul_shortway:
+ mulscc %o4, %o1, %o4 ! first iteration of 13
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4
+ mulscc %o4, %o1, %o4 ! 12th iteration
+ mulscc %o4, %g0, %o4 ! last iteration only shifts
+ rd %y, %o5
+ sll %o4, 12, %o4 ! left shift partial product by 12 bits
+ srl %o5, 20, %o5 ! right shift partial product by 20 bits
+ retl
+ or %o5, %o4, %o0 ! merge for true product
+#endif
+
+#ifdef L_divsi3
+/*
+ * Division and remainder, from Appendix E of the SPARC Version 8
+ * Architecture Manual, with fixes from Gordon Irlam.
+ */
+
+/*
+ * Input: dividend and divisor in %o0 and %o1 respectively.
+ *
+ * m4 parameters:
+ * .div name of function to generate
+ * div div=div => %o0 / %o1; div=rem => %o0 % %o1
+ * true true=true => signed; true=false => unsigned
+ *
+ * Algorithm parameters:
+ * N how many bits per iteration we try to get (4)
+ * WORDSIZE total number of bits (32)
+ *
+ * Derived constants:
+ * TOPBITS number of bits in the top decade of a number
+ *
+ * Important variables:
+ * Q the partial quotient under development (initially 0)
+ * R the remainder so far, initially the dividend
+ * ITER number of main division loop iterations required;
+ * equal to ceil(log2(quotient) / N). Note that this
+ * is the log base (2^N) of the quotient.
+ * V the current comparand, initially divisor*2^(ITER*N-1)
+ *
+ * Cost:
+ * Current estimate for non-large dividend is
+ * ceil(log2(quotient) / N) * (10 + 7N/2) + C
+ * A large dividend is one greater than 2^(31-TOPBITS) and takes a
+ * different path, as the upper bits of the quotient must be developed
+ * one bit at a time.
+ */
+ .global .udiv
+ .align 4
+ .proc 4
+ .text
+.udiv:
+ b ready_to_divide
+ mov 0, %g3 ! result is always positive
+
+ .global .div
+ .align 4
+ .proc 4
+ .text
+.div:
+ ! compute sign of result; if neither is negative, no problem
+ orcc %o1, %o0, %g0 ! either negative?
+ bge ready_to_divide ! no, go do the divide
+ xor %o1, %o0, %g3 ! compute sign in any case
+ tst %o1
+ bge 1f
+ tst %o0
+ ! %o1 is definitely negative; %o0 might also be negative
+ bge ready_to_divide ! if %o0 not negative...
+ sub %g0, %o1, %o1 ! in any case, make %o1 nonneg
+1: ! %o0 is negative, %o1 is nonnegative
+ sub %g0, %o0, %o0 ! make %o0 nonnegative
+
+
+ready_to_divide:
+
+ ! Ready to divide. Compute size of quotient; scale comparand.
+ orcc %o1, %g0, %o5
+ bne 1f
+ mov %o0, %o3
+
+ ! Divide by zero trap. If it returns, return 0 (about as
+ ! wrong as possible, but that is what SunOS does...).
+ ta 0x2 ! ST_DIV0
+ retl
+ clr %o0
+
+1:
+ cmp %o3, %o5 ! if %o1 exceeds %o0, done
+ blu got_result ! (and algorithm fails otherwise)
+ clr %o2
+ sethi %hi(1 << (32 - 4 - 1)), %g1
+ cmp %o3, %g1
+ blu not_really_big
+ clr %o4
+
+ ! Here the dividend is >= 2**(31-N) or so. We must be careful here,
+ ! as our usual N-at-a-shot divide step will cause overflow and havoc.
+ ! The number of bits in the result here is N*ITER+SC, where SC <= N.
+ ! Compute ITER in an unorthodox manner: know we need to shift V into
+ ! the top decade: so do not even bother to compare to R.
+ 1:
+ cmp %o5, %g1
+ bgeu 3f
+ mov 1, %g2
+ sll %o5, 4, %o5
+ b 1b
+ add %o4, 1, %o4
+
+ ! Now compute %g2.
+ 2: addcc %o5, %o5, %o5
+ bcc not_too_big
+ add %g2, 1, %g2
+
+ ! We get here if the %o1 overflowed while shifting.
+ ! This means that %o3 has the high-order bit set.
+ ! Restore %o5 and subtract from %o3.
+ sll %g1, 4, %g1 ! high order bit
+ srl %o5, 1, %o5 ! rest of %o5
+ add %o5, %g1, %o5
+ b do_single_div
+ sub %g2, 1, %g2
+
+ not_too_big:
+ 3: cmp %o5, %o3
+ blu 2b
+ nop
+ be do_single_div
+ nop
+ /* NB: these are commented out in the V8-SPARC manual as well */
+ /* (I do not understand this) */
+ ! %o5 > %o3: went too far: back up 1 step
+ ! srl %o5, 1, %o5
+ ! dec %g2
+ ! do single-bit divide steps
+ !
+ ! We have to be careful here. We know that %o3 >= %o5, so we can do the
+ ! first divide step without thinking. BUT, the others are conditional,
+ ! and are only done if %o3 >= 0. Because both %o3 and %o5 may have the high-
+ ! order bit set in the first step, just falling into the regular
+ ! division loop will mess up the first time around.
+ ! So we unroll slightly...
+ do_single_div:
+ subcc %g2, 1, %g2
+ bl end_regular_divide
+ nop
+ sub %o3, %o5, %o3
+ mov 1, %o2
+ b end_single_divloop
+ nop
+ single_divloop:
+ sll %o2, 1, %o2
+ bl 1f
+ srl %o5, 1, %o5
+ ! %o3 >= 0
+ sub %o3, %o5, %o3
+ b 2f
+ add %o2, 1, %o2
+ 1: ! %o3 < 0
+ add %o3, %o5, %o3
+ sub %o2, 1, %o2
+ 2:
+ end_single_divloop:
+ subcc %g2, 1, %g2
+ bge single_divloop
+ tst %o3
+ b,a end_regular_divide
+
+not_really_big:
+1:
+ sll %o5, 4, %o5
+ cmp %o5, %o3
+ bleu 1b
+ addcc %o4, 1, %o4
+ be got_result
+ sub %o4, 1, %o4
+
+ tst %o3 ! set up for initial iteration
+divloop:
+ sll %o2, 4, %o2
+ ! depth 1, accumulated bits 0
+ bl L1.16
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 2, accumulated bits 1
+ bl L2.17
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 3, accumulated bits 3
+ bl L3.19
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 7
+ bl L4.23
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (7*2+1), %o2
+
+L4.23:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (7*2-1), %o2
+
+
+L3.19:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 5
+ bl L4.21
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (5*2+1), %o2
+
+L4.21:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (5*2-1), %o2
+
+L2.17:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 3, accumulated bits 1
+ bl L3.17
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 3
+ bl L4.19
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (3*2+1), %o2
+
+L4.19:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (3*2-1), %o2
+
+L3.17:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 1
+ bl L4.17
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (1*2+1), %o2
+
+L4.17:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (1*2-1), %o2
+
+L1.16:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 2, accumulated bits -1
+ bl L2.15
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 3, accumulated bits -1
+ bl L3.15
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -1
+ bl L4.15
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-1*2+1), %o2
+
+L4.15:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-1*2-1), %o2
+
+L3.15:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -3
+ bl L4.13
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-3*2+1), %o2
+
+L4.13:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-3*2-1), %o2
+
+L2.15:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 3, accumulated bits -3
+ bl L3.13
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -5
+ bl L4.11
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-5*2+1), %o2
+
+L4.11:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-5*2-1), %o2
+
+L3.13:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -7
+ bl L4.9
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-7*2+1), %o2
+
+L4.9:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-7*2-1), %o2
+
+ 9:
+end_regular_divide:
+ subcc %o4, 1, %o4
+ bge divloop
+ tst %o3
+ bl,a got_result
+ ! non-restoring fixup here (one instruction only!)
+ sub %o2, 1, %o2
+
+
+got_result:
+ ! check to see if answer should be < 0
+ tst %g3
+ bl,a 1f
+ sub %g0, %o2, %o2
+1:
+ retl
+ mov %o2, %o0
+#endif
+
+#ifdef L_modsi3
+/* This implementation was taken from glibc:
+ *
+ * Input: dividend and divisor in %o0 and %o1 respectively.
+ *
+ * Algorithm parameters:
+ * N how many bits per iteration we try to get (4)
+ * WORDSIZE total number of bits (32)
+ *
+ * Derived constants:
+ * TOPBITS number of bits in the top decade of a number
+ *
+ * Important variables:
+ * Q the partial quotient under development (initially 0)
+ * R the remainder so far, initially the dividend
+ * ITER number of main division loop iterations required;
+ * equal to ceil(log2(quotient) / N). Note that this
+ * is the log base (2^N) of the quotient.
+ * V the current comparand, initially divisor*2^(ITER*N-1)
+ *
+ * Cost:
+ * Current estimate for non-large dividend is
+ * ceil(log2(quotient) / N) * (10 + 7N/2) + C
+ * A large dividend is one greater than 2^(31-TOPBITS) and takes a
+ * different path, as the upper bits of the quotient must be developed
+ * one bit at a time.
+ */
+.text
+ .align 4
+ .global .urem
+ .proc 4
+.urem:
+ b divide
+ mov 0, %g3 ! result always positive
+
+ .align 4
+ .global .rem
+ .proc 4
+.rem:
+ ! compute sign of result; if neither is negative, no problem
+ orcc %o1, %o0, %g0 ! either negative?
+ bge 2f ! no, go do the divide
+ mov %o0, %g3 ! sign of remainder matches %o0
+ tst %o1
+ bge 1f
+ tst %o0
+ ! %o1 is definitely negative; %o0 might also be negative
+ bge 2f ! if %o0 not negative...
+ sub %g0, %o1, %o1 ! in any case, make %o1 nonneg
+1: ! %o0 is negative, %o1 is nonnegative
+ sub %g0, %o0, %o0 ! make %o0 nonnegative
+2:
+
+ ! Ready to divide. Compute size of quotient; scale comparand.
+divide:
+ orcc %o1, %g0, %o5
+ bne 1f
+ mov %o0, %o3
+
+ ! Divide by zero trap. If it returns, return 0 (about as
+ ! wrong as possible, but that is what SunOS does...).
+ ta 0x2 !ST_DIV0
+ retl
+ clr %o0
+
+1:
+ cmp %o3, %o5 ! if %o1 exceeds %o0, done
+ blu got_result ! (and algorithm fails otherwise)
+ clr %o2
+ sethi %hi(1 << (32 - 4 - 1)), %g1
+ cmp %o3, %g1
+ blu not_really_big
+ clr %o4
+
+ ! Here the dividend is >= 2**(31-N) or so. We must be careful here,
+ ! as our usual N-at-a-shot divide step will cause overflow and havoc.
+ ! The number of bits in the result here is N*ITER+SC, where SC <= N.
+ ! Compute ITER in an unorthodox manner: know we need to shift V into
+ ! the top decade: so do not even bother to compare to R.
+ 1:
+ cmp %o5, %g1
+ bgeu 3f
+ mov 1, %g2
+ sll %o5, 4, %o5
+ b 1b
+ add %o4, 1, %o4
+
+ ! Now compute %g2.
+ 2: addcc %o5, %o5, %o5
+ bcc not_too_big
+ add %g2, 1, %g2
+
+ ! We get here if the %o1 overflowed while shifting.
+ ! This means that %o3 has the high-order bit set.
+ ! Restore %o5 and subtract from %o3.
+ sll %g1, 4, %g1 ! high order bit
+ srl %o5, 1, %o5 ! rest of %o5
+ add %o5, %g1, %o5
+ b do_single_div
+ sub %g2, 1, %g2
+
+ not_too_big:
+ 3: cmp %o5, %o3
+ blu 2b
+ nop
+ be do_single_div
+ nop
+ /* NB: these are commented out in the V8-SPARC manual as well */
+ /* (I do not understand this) */
+ ! %o5 > %o3: went too far: back up 1 step
+ ! srl %o5, 1, %o5
+ ! dec %g2
+ ! do single-bit divide steps
+ !
+ ! We have to be careful here. We know that %o3 >= %o5, so we can do the
+ ! first divide step without thinking. BUT, the others are conditional,
+ ! and are only done if %o3 >= 0. Because both %o3 and %o5 may have the high-
+ ! order bit set in the first step, just falling into the regular
+ ! division loop will mess up the first time around.
+ ! So we unroll slightly...
+ do_single_div:
+ subcc %g2, 1, %g2
+ bl end_regular_divide
+ nop
+ sub %o3, %o5, %o3
+ mov 1, %o2
+ b end_single_divloop
+ nop
+ single_divloop:
+ sll %o2, 1, %o2
+ bl 1f
+ srl %o5, 1, %o5
+ ! %o3 >= 0
+ sub %o3, %o5, %o3
+ b 2f
+ add %o2, 1, %o2
+ 1: ! %o3 < 0
+ add %o3, %o5, %o3
+ sub %o2, 1, %o2
+ 2:
+ end_single_divloop:
+ subcc %g2, 1, %g2
+ bge single_divloop
+ tst %o3
+ b,a end_regular_divide
+
+not_really_big:
+1:
+ sll %o5, 4, %o5
+ cmp %o5, %o3
+ bleu 1b
+ addcc %o4, 1, %o4
+ be got_result
+ sub %o4, 1, %o4
+
+ tst %o3 ! set up for initial iteration
+divloop:
+ sll %o2, 4, %o2
+ ! depth 1, accumulated bits 0
+ bl L1.16
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 2, accumulated bits 1
+ bl L2.17
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 3, accumulated bits 3
+ bl L3.19
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 7
+ bl L4.23
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (7*2+1), %o2
+L4.23:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (7*2-1), %o2
+
+L3.19:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 5
+ bl L4.21
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (5*2+1), %o2
+
+L4.21:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (5*2-1), %o2
+
+L2.17:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 3, accumulated bits 1
+ bl L3.17
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 3
+ bl L4.19
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (3*2+1), %o2
+
+L4.19:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (3*2-1), %o2
+
+L3.17:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits 1
+ bl L4.17
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (1*2+1), %o2
+
+L4.17:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (1*2-1), %o2
+
+L1.16:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 2, accumulated bits -1
+ bl L2.15
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 3, accumulated bits -1
+ bl L3.15
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -1
+ bl L4.15
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-1*2+1), %o2
+
+L4.15:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-1*2-1), %o2
+
+L3.15:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -3
+ bl L4.13
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-3*2+1), %o2
+
+L4.13:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-3*2-1), %o2
+
+L2.15:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 3, accumulated bits -3
+ bl L3.13
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -5
+ bl L4.11
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-5*2+1), %o2
+
+L4.11:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-5*2-1), %o2
+
+L3.13:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ ! depth 4, accumulated bits -7
+ bl L4.9
+ srl %o5,1,%o5
+ ! remainder is positive
+ subcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-7*2+1), %o2
+
+L4.9:
+ ! remainder is negative
+ addcc %o3,%o5,%o3
+ b 9f
+ add %o2, (-7*2-1), %o2
+
+ 9:
+end_regular_divide:
+ subcc %o4, 1, %o4
+ bge divloop
+ tst %o3
+ bl,a got_result
+ ! non-restoring fixup here (one instruction only!)
+ add %o3, %o1, %o3
+
+got_result:
+ ! check to see if answer should be < 0
+ tst %g3
+ bl,a 1f
+ sub %g0, %o3, %o3
+1:
+ retl
+ mov %o3, %o0
+
+#endif
+
diff --git a/gcc-4.9/libgcc/config/sparc/libgcc-glibc.ver b/gcc-4.9/libgcc/config/sparc/libgcc-glibc.ver
new file mode 100644
index 000000000..b9447d139
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/libgcc-glibc.ver
@@ -0,0 +1,93 @@
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# In order to work around the very problems that force us to now generally
+# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
+# By now choosing the same version tags for these specific routines, we
+# maintain enough binary compatibility to allow future versions of glibc
+# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
+
+%exclude {
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%ifdef __arch64__
+%define GLIBC_VER GLIBC_2.2
+%else
+%define GLIBC_VER GLIBC_2.0
+%endif
+%inherit GCC_3.0 GLIBC_VER
+GLIBC_VER {
+ # Sampling of DImode arithmetic used by (at least) i386 and m68k.
+ __divdi3
+ __moddi3
+ __udivdi3
+ __umoddi3
+
+ # Exception handling support functions used by most everyone.
+ __register_frame
+ __register_frame_table
+ __deregister_frame
+ __register_frame_info
+ __deregister_frame_info
+ __frame_state_for
+ __register_frame_info_table
+}
+
+%if !defined (__arch64__) && defined (__LONG_DOUBLE_128__)
+
+# long double 128 bit support from 32-bit libgcc_s.so.1 is only available
+# when configured with --with-long-double-128. Make sure all the
+# symbols are available at @@GCC_LDBL_* versions to make it clear
+# there is a configurable symbol set.
+
+%exclude {
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+
+ __divtc3
+ __multc3
+ __powitf2
+}
+
+%inherit GCC_LDBL_3.0 GCC_3.0
+GCC_LDBL_3.0 {
+ __fixtfdi
+ __fixunstfdi
+ __floatditf
+}
+
+%inherit GCC_LDBL_4.0.0 GCC_4.0.0
+GCC_LDBL_4.0.0 {
+ __divtc3
+ __multc3
+ __powitf2
+}
+
+%endif
diff --git a/gcc-4.9/libgcc/config/sparc/linux-unwind.h b/gcc-4.9/libgcc/config/sparc/linux-unwind.h
new file mode 100644
index 000000000..61ba47174
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/linux-unwind.h
@@ -0,0 +1,215 @@
+/* DWARF2 EH unwinding support for SPARC Linux.
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#if defined(__arch64__)
+
+#undef STACK_BIAS
+#define STACK_BIAS 2047
+
+/* 64-bit SPARC version */
+#define MD_FALLBACK_FRAME_STATE_FOR sparc64_fallback_frame_state
+
+static _Unwind_Reason_Code
+sparc64_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned int *pc = context->ra;
+ long this_cfa = (long) context->cfa;
+ long new_cfa, ra_location, shifted_ra_location;
+ long regs_off, fpu_save_off;
+ long fpu_save;
+ int i;
+
+ if (pc[0] != 0x82102065 /* mov NR_rt_sigreturn, %g1 */
+ || pc[1] != 0x91d0206d) /* ta 0x6d */
+ return _URC_END_OF_STACK;
+
+ regs_off = 192 + 128;
+ fpu_save_off = regs_off + (16 * 8) + (3 * 8) + (2 * 4);
+
+ new_cfa = *(long *)(this_cfa + regs_off + (14 * 8));
+ /* The frame address is %sp + STACK_BIAS in 64-bit mode. */
+ new_cfa += STACK_BIAS;
+ fpu_save = *(long *)(this_cfa + fpu_save_off);
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column ();
+ fs->regs.cfa_offset = new_cfa - this_cfa;
+
+ for (i = 1; i < 16; i++)
+ {
+ /* We never restore %sp as everything is purely CFA-based. */
+ if ((unsigned int) i == __builtin_dwarf_sp_column ())
+ continue;
+
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = this_cfa + regs_off + (i * 8) - new_cfa;
+ }
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[i + 16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 16].loc.offset
+ = this_cfa + (i * 8) - new_cfa;
+ }
+ if (fpu_save)
+ {
+ for (i = 0; i < 64; i++)
+ {
+ if (i > 32 && (i & 0x1))
+ continue;
+ fs->regs.reg[i + 32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 32].loc.offset
+ = fpu_save + (i * 4) - new_cfa;
+ }
+ }
+
+ /* State the rules to find the kernel's code "return address", which is
+ the address of the active instruction when the signal was caught.
+ On the SPARC, since RETURN_ADDR_OFFSET (essentially 8) is defined, we
+ need to preventively subtract it from the purported return address. */
+ ra_location = this_cfa + regs_off + 17 * 8;
+ shifted_ra_location = this_cfa + regs_off + 19 * 8; /* Y register */
+ *(long *)shifted_ra_location = *(long *)ra_location - 8;
+ fs->retaddr_column = 0;
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = shifted_ra_location - new_cfa;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+#define MD_FROB_UPDATE_CONTEXT sparc64_frob_update_context
+
+static void
+sparc64_frob_update_context (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ /* The column of %sp contains the old CFA, not the old value of %sp.
+ The CFA offset already comprises the stack bias so, when %sp is the
+ CFA register, we must avoid counting the stack bias twice. Do not
+ do that for signal frames as the offset is artificial for them. */
+ if (fs->regs.cfa_reg == __builtin_dwarf_sp_column ()
+ && fs->regs.cfa_how == CFA_REG_OFFSET
+ && fs->regs.cfa_offset != 0
+ && !fs->signal_frame)
+ {
+ long i;
+
+ context->cfa -= STACK_BIAS;
+
+ for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
+ if (fs->regs.reg[i].how == REG_SAVED_OFFSET)
+ _Unwind_SetGRPtr (context, i,
+ _Unwind_GetGRPtr (context, i) - STACK_BIAS);
+ }
+}
+
+#else
+
+/* 32-bit SPARC version */
+#define MD_FALLBACK_FRAME_STATE_FOR sparc_fallback_frame_state
+
+static _Unwind_Reason_Code
+sparc_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned int *pc = context->ra;
+ int this_cfa = (int) context->cfa;
+ int new_cfa, ra_location, shifted_ra_location;
+ int regs_off, fpu_save_off;
+ int fpu_save;
+ int old_style, i;
+
+ if (pc[1] != 0x91d02010) /* ta 0x10 */
+ return _URC_END_OF_STACK;
+
+ if (pc[0] == 0x821020d8) /* mov NR_sigreturn, %g1 */
+ old_style = 1;
+ else if (pc[0] == 0x82102065) /* mov NR_rt_sigreturn, %g1 */
+ old_style = 0;
+ else
+ return _URC_END_OF_STACK;
+
+ if (old_style)
+ {
+ regs_off = 96;
+ fpu_save_off = regs_off + (4 * 4) + (16 * 4);
+ }
+ else
+ {
+ regs_off = 96 + 128;
+ fpu_save_off = regs_off + (4 * 4) + (16 * 4) + (2 * 4);
+ }
+
+ new_cfa = *(int *)(this_cfa + regs_off + (4 * 4) + (14 * 4));
+ fpu_save = *(int *)(this_cfa + fpu_save_off);
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column ();
+ fs->regs.cfa_offset = new_cfa - this_cfa;
+
+ for (i = 1; i < 16; i++)
+ {
+ /* We never restore %sp as everything is purely CFA-based. */
+ if ((unsigned int) i == __builtin_dwarf_sp_column ())
+ continue;
+
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = this_cfa + regs_off + (4 * 4) + (i * 4) - new_cfa;
+ }
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[i + 16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 16].loc.offset
+ = this_cfa + (i * 4) - new_cfa;
+ }
+ if (fpu_save)
+ {
+ for (i = 0; i < 32; i++)
+ {
+ fs->regs.reg[i + 32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 32].loc.offset
+ = fpu_save + (i * 4) - new_cfa;
+ }
+ }
+
+ /* State the rules to find the kernel's code "return address", which is
+ the address of the active instruction when the signal was caught.
+ On the SPARC, since RETURN_ADDR_OFFSET (essentially 8) is defined, we
+ need to preventively subtract it from the purported return address. */
+ ra_location = this_cfa + regs_off + 4;
+ shifted_ra_location = this_cfa + regs_off + 3 * 4; /* Y register */
+ *(int *)shifted_ra_location = *(int *)ra_location - 8;
+ fs->retaddr_column = 0;
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = shifted_ra_location - new_cfa;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+#endif
diff --git a/gcc-4.9/libgcc/config/sparc/sol2-c1.S b/gcc-4.9/libgcc/config/sparc/sol2-c1.S
new file mode 100644
index 000000000..674e1b688
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/sol2-c1.S
@@ -0,0 +1,103 @@
+! crt1.s for sparc & sparcv9 (SunOS 5)
+
+! Copyright (C) 1992-2014 Free Software Foundation, Inc.
+! Written By David Vinayak Henkel-Wallace, June 1992
+!
+! This file is free software; you can redistribute it and/or modify it
+! under the terms of the GNU General Public License as published by the
+! Free Software Foundation; either version 3, or (at your option) any
+! later version.
+!
+! This file is distributed in the hope that it will be useful, but
+! WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+! General Public License for more details.
+!
+! Under Section 7 of GPL version 3, you are granted additional
+! permissions described in the GCC Runtime Library Exception, version
+! 3.1, as published by the Free Software Foundation.
+!
+! You should have received a copy of the GNU General Public License and
+! a copy of the GCC Runtime Library Exception along with this program;
+! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+! <http://www.gnu.org/licenses/>.
+
+! This file takes control of the process from the kernel, as specified
+! in section 3 of the SVr4 ABI.
+! This file is the first thing linked into any executable.
+
+#ifdef __sparcv9
+#define CPTRSIZE 8
+#define CPTRSHIFT 3
+#define STACK_BIAS 2047
+#define ldn ldx
+#define stn stx
+#define setn(s, scratch, dst) setx s, scratch, dst
+#else
+#define CPTRSIZE 4
+#define CPTRSHIFT 2
+#define STACK_BIAS 0
+#define ldn ld
+#define stn st
+#define setn(s, scratch, dst) set s, dst
+#endif
+
+ .section ".text"
+ .proc 022
+ .global _start
+
+_start:
+ mov 0, %fp ! Mark bottom frame pointer
+ ldn [%sp + (16 * CPTRSIZE) + STACK_BIAS], %l0 ! argc
+ add %sp, (17 * CPTRSIZE) + STACK_BIAS, %l1 ! argv
+
+ ! Leave some room for a call. Sun leaves 32 octets (to sit on
+ ! a cache line?) so we do too.
+#ifdef __sparcv9
+ sub %sp, 48, %sp
+#else
+ sub %sp, 32, %sp
+#endif
+
+ ! %g1 may contain a function to be registered w/atexit
+ orcc %g0, %g1, %g0
+#ifdef __sparcv9
+ be %xcc, .nope
+#else
+ be .nope
+#endif
+ mov %g1, %o0
+ call atexit
+ nop
+.nope:
+ ! Now make sure constructors and destructors are handled.
+ setn(_fini, %o1, %o0)
+ call atexit, 1
+ nop
+ call _init, 0
+ nop
+
+ ! We ignore the auxiliary vector; there is no defined way to
+ ! access those data anyway. Instead, go straight to main:
+ mov %l0, %o0 ! argc
+ mov %l1, %o1 ! argv
+#ifdef GCRT1
+ setn(___Argv, %o4, %o3)
+ stn %o1, [%o3] ! *___Argv
+#endif
+ ! Skip argc words past argv, to env:
+ sll %l0, CPTRSHIFT, %o2
+ add %o2, CPTRSIZE, %o2
+ add %l1, %o2, %o2 ! env
+ setn(_environ, %o4, %o3)
+ stn %o2, [%o3] ! *_environ
+ call main, 4
+ nop
+ call exit, 0
+ nop
+ call _exit, 0
+ nop
+ ! We should never get here.
+
+ .type _start,#function
+ .size _start,.-_start
diff --git a/gcc-4.9/libgcc/config/sparc/sol2-unwind.h b/gcc-4.9/libgcc/config/sparc/sol2-unwind.h
new file mode 100644
index 000000000..37807f9a9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/sol2-unwind.h
@@ -0,0 +1,414 @@
+/* DWARF2 EH unwinding support for SPARC Solaris.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2.c for the structs. */
+
+#include <ucontext.h>
+#include <sys/frame.h>
+#include <sys/stack.h>
+
+#ifdef __arch64__
+
+#define IS_SIGHANDLER sparc64_is_sighandler
+
+static int
+sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
+{
+ if (/* Solaris 9 - single-threaded
+ ----------------------------
+ The pattern changes slightly in different versions of the
+ operating system, so we skip the comparison against pc[-6] for
+ Solaris 9.
+
+ <sigacthandler+24>: sra %i0, 0, %l1
+
+ Solaris 9 5/02:
+ <sigacthandler+28>: ldx [ %o2 + 0xf68 ], %g5
+ Solaris 9 9/05:
+ <sigacthandler+28>: ldx [ %o2 + 0xe50 ], %g5
+
+ <sigacthandler+32>: sllx %l1, 3, %g4
+ <sigacthandler+36>: mov %l1, %o0
+ <sigacthandler+40>: ldx [ %g4 + %g5 ], %l0
+ <sigacthandler+44>: call %l0
+ <sigacthandler+48>: mov %i2, %o2
+ <sigacthandler+52>: cmp %l1, 8 <--- PC */
+ ( pc[-7] == 0xa33e2000
+ /* skip pc[-6] */
+ && pc[-5] == 0x892c7003
+ && pc[-4] == 0x90100011
+ && pc[-3] == 0xe0590005
+ && pc[-2] == 0x9fc40000
+ && pc[-1] == 0x9410001a
+ && pc[ 0] == 0x80a46008))
+ {
+ /* We need to move up one frame:
+
+ <signal handler> <-- context->cfa
+ sigacthandler
+ <kernel>
+ */
+ *nframes = 1;
+ return 1;
+ }
+
+ if (/* Solaris 8+ - multi-threaded
+ ----------------------------
+ <__sighndlr>: save %sp, -176, %sp
+ <__sighndlr+4>: mov %i0, %o0
+ <__sighndlr+8>: mov %i1, %o1
+ <__sighndlr+12>: call %i3
+ <__sighndlr+16>: mov %i2, %o2
+ <__sighndlr+20>: ret <--- PC
+ <__sighndlr+24>: restore */
+ pc[-5] == 0x9de3bf50
+ && pc[-4] == 0x90100018
+ && pc[-3] == 0x92100019
+ && pc[-2] == 0x9fc6c000
+ && pc[-1] == 0x9410001a
+ && pc[ 0] == 0x81c7e008
+ && pc[ 1] == 0x81e80000)
+ {
+ /* We have observed different calling frames among different
+ versions of the operating system, so that we need to
+ discriminate using the upper frame. We look for the return
+ address of the caller frame (there is an offset of 15 double
+ words between the frame address and the place where this return
+ address is stored) in order to do some more pattern matching. */
+ unsigned int cuh_pattern
+ = *(unsigned int *)(*(unsigned long *)(cfa + 15*8) - 4);
+
+ if (cuh_pattern == 0x92100019)
+ /* This matches the call_user_handler pattern for Solaris 11.
+ This is the same setup as for Solaris 9, see below. */
+ *nframes = 3;
+
+ else if (cuh_pattern == 0xd25fa7ef)
+ {
+ /* This matches the call_user_handler pattern for Solaris 10.
+ There are 2 cases so we look for the return address of the
+ caller's caller frame in order to do more pattern matching. */
+ unsigned long sah_address = *(unsigned long *)(cfa + 176 + 15*8);
+
+ if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019)
+ /* This is the same setup as for Solaris 9, see below. */
+ *nframes = 3;
+ else
+ /* The sigacthandler frame isn't present in the chain.
+ We need to move up two frames:
+
+ <signal handler> <-- context->cfa
+ __sighndlr
+ call_user_handler frame
+ <kernel>
+ */
+ *nframes = 2;
+ }
+
+ else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x94100013)
+ /* This matches the call_user_handler pattern for Solaris 9.
+ We need to move up three frames:
+
+ <signal handler> <-- context->cfa
+ __sighndlr
+ call_user_handler
+ sigacthandler
+ <kernel>
+ */
+ *nframes = 3;
+
+ return 1;
+ }
+
+ return 0;
+}
+
+#define MD_FALLBACK_FRAME_STATE_FOR sparc64_fallback_frame_state
+
+#define MD_FROB_UPDATE_CONTEXT sparc64_frob_update_context
+
+static void
+sparc64_frob_update_context (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ /* The column of %sp contains the old CFA, not the old value of %sp.
+ The CFA offset already comprises the stack bias so, when %sp is the
+ CFA register, we must avoid counting the stack bias twice. */
+ if (fs->regs.cfa_reg == __builtin_dwarf_sp_column ()
+ && fs->regs.cfa_how == CFA_REG_OFFSET
+ && fs->regs.cfa_offset != 0)
+ {
+ long i;
+
+ context->cfa -= STACK_BIAS;
+
+ for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
+ if (fs->regs.reg[i].how == REG_SAVED_OFFSET)
+ _Unwind_SetGRPtr (context, i,
+ _Unwind_GetGRPtr (context, i) - STACK_BIAS);
+ }
+}
+
+#else
+
+#define IS_SIGHANDLER sparc_is_sighandler
+
+static int
+sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
+{
+ if (/* Solaris 9 - single-threaded
+ ----------------------------
+ The pattern changes slightly in different versions of the operating
+ system, so we skip the comparison against pc[-6].
+
+ <sigacthandler+16>: add %o1, %o7, %o3
+ <sigacthandler+20>: mov %i1, %o1
+
+ <sigacthandler+24>: ld [ %o3 + <offset> ], %o2
+
+ <sigacthandler+28>: sll %i0, 2, %o0
+ <sigacthandler+32>: ld [ %o0 + %o2 ], %l0
+ <sigacthandler+36>: mov %i0, %o0
+ <sigacthandler+40>: call %l0
+ <sigacthandler+44>: mov %i2, %o2
+ <sigacthandler+48>: cmp %i0, 8 <--- PC */
+ pc[-8] == 0x9602400f
+ && pc[-7] == 0x92100019
+ /* skip pc[-6] */
+ && pc[-5] == 0x912e2002
+ && pc[-4] == 0xe002000a
+ && pc[-3] == 0x90100018
+ && pc[-2] == 0x9fc40000
+ && pc[-1] == 0x9410001a
+ && pc[ 0] == 0x80a62008)
+ {
+ /* We need to move up one frame:
+
+ <signal handler> <-- context->cfa
+ sigacthandler
+ <kernel>
+ */
+ *nframes = 1;
+ return 1;
+ }
+
+ if(/* Solaris 8+ - multi-threaded
+ ----------------------------
+ <__sighndlr>: save %sp, -96, %sp
+ <__sighndlr+4>: mov %i0, %o0
+ <__sighndlr+8>: mov %i1, %o1
+ <__sighndlr+12>: call %i3
+ <__sighndlr+16>: mov %i2, %o2
+ <__sighndlr+20>: ret <--- PC
+ <__sighndlr+24>: restore */
+ pc[-5] == 0x9de3bfa0
+ && pc[-4] == 0x90100018
+ && pc[-3] == 0x92100019
+ && pc[-2] == 0x9fc6c000
+ && pc[-1] == 0x9410001a
+ && pc[ 0] == 0x81c7e008
+ && pc[ 1] == 0x81e80000)
+ {
+ /* We have observed different calling frames among different
+ versions of the operating system, so that we need to
+ discriminate using the upper frame. We look for the return
+ address of the caller frame (there is an offset of 15 words
+ between the frame address and the place where this return
+ address is stored) in order to do some more pattern matching. */
+ unsigned int cuh_pattern
+ = *(unsigned int *)(*(unsigned int *)(cfa + 15*4) - 4);
+
+ if (cuh_pattern == 0x92100019)
+ /* This matches the call_user_handler pattern for Solaris 11.
+ This is the same setup as for Solaris 9, see below. */
+ *nframes = 3;
+
+ else if (cuh_pattern == 0xd407a04c)
+ {
+ /* This matches the call_user_handler pattern for Solaris 10.
+ There are 2 cases so we look for the return address of the
+ caller's caller frame in order to do more pattern matching. */
+ unsigned int sah_address = *(unsigned int *)(cfa + 96 + 15*4);
+
+ if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019)
+ /* This is the same setup as for Solaris 9, see below. */
+ *nframes = 3;
+ else
+ /* The sigacthandler frame isn't present in the chain.
+ We need to move up two frames:
+
+ <signal handler> <-- context->cfa
+ __sighndlr
+ call_user_handler frame
+ <kernel>
+ */
+ *nframes = 2;
+ }
+
+ else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
+ /* This matches the call_user_handler pattern for Solaris 9.
+ We need to move up three frames:
+
+ <signal handler> <-- context->cfa
+ __sighndlr
+ call_user_handler
+ sigacthandler
+ <kernel>
+ */
+ *nframes = 3;
+
+ return 1;
+ }
+
+ return 0;
+}
+
+#define MD_FALLBACK_FRAME_STATE_FOR sparc_fallback_frame_state
+
+#endif
+
+static _Unwind_Reason_Code
+MD_FALLBACK_FRAME_STATE_FOR (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ void *pc = context->ra;
+ void *this_cfa = context->cfa;
+ int nframes = 0;
+ long new_cfa;
+ void *ra_location, *shifted_ra_location;
+ mcontext_t *mctx;
+ int i;
+
+ /* Deal with frame-less function from which a signal was raised. */
+ if (_Unwind_IsSignalFrame (context))
+ {
+ /* The CFA is by definition unmodified in this case. */
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column ();
+ fs->regs.cfa_offset = 0;
+
+ /* This is the canonical RA column. */
+ fs->retaddr_column = 15;
+
+ return _URC_NO_REASON;
+ }
+
+ /* Do some pattern matching at the return address. */
+ if (IS_SIGHANDLER (pc, this_cfa, &nframes))
+ {
+ struct frame *fp = (struct frame *) this_cfa;
+ struct handler_args {
+ struct frame frwin;
+ ucontext_t ucontext;
+ } *handler_args;
+ ucontext_t *ucp;
+
+ /* this_cfa points into the frame after the saved frame pointer and
+ saved pc (struct frame).
+
+ The ucontext_t structure is in the kernel frame after a struct
+ frame. Since the frame sizes vary even within OS releases, we
+ need to walk the stack to get there. */
+ for (i = 0; i < nframes; i++)
+ fp = (struct frame *) ((char *)fp->fr_savfp + STACK_BIAS);
+
+ handler_args = (struct handler_args *) fp;
+ ucp = &handler_args->ucontext;
+ mctx = &ucp->uc_mcontext;
+ }
+ else
+ return _URC_END_OF_STACK;
+
+ /* The frame address is %sp + STACK_BIAS in 64-bit mode. */
+ new_cfa = mctx->gregs[REG_SP] + STACK_BIAS;
+
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = __builtin_dwarf_sp_column ();
+ fs->regs.cfa_offset = new_cfa - (long) this_cfa + STACK_BIAS;
+
+ /* Restore global and out registers (in this order) from the
+ ucontext_t structure, uc_mcontext.gregs field. */
+ for (i = 1; i < 16; i++)
+ {
+ /* We never restore %sp as everything is purely CFA-based. */
+ if ((unsigned int) i == __builtin_dwarf_sp_column ())
+ continue;
+
+ /* First the global registers and then the out registers. */
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset = (long)&mctx->gregs[REG_Y + i] - new_cfa;
+ }
+
+ /* Just above the stack pointer there are 16 extended words in which
+ the register window (in and local registers) was saved. */
+ for (i = 0; i < 16; i++)
+ {
+ fs->regs.reg[i + 16].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 16].loc.offset = i * sizeof(long);
+ }
+
+ /* Check whether we need to restore FPU registers. */
+ if (mctx->fpregs.fpu_qcnt)
+ {
+ for (i = 0; i < 32; i++)
+ {
+ fs->regs.reg[i + 32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 32].loc.offset
+ = (long)&mctx->fpregs.fpu_fr.fpu_regs[i] - new_cfa;
+ }
+
+#ifdef __arch64__
+ /* For 64-bit, fpu_fr.fpu_dregs contains 32 instead of 16 doubles. */
+ for (i = 32; i < 64; i++)
+ {
+ if (i > 32 && (i & 1))
+ continue;
+
+ fs->regs.reg[i + 32].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i + 32].loc.offset
+ = (long)&mctx->fpregs.fpu_fr.fpu_dregs[i/2] - new_cfa;
+ }
+#endif
+ }
+
+ /* State the rules to find the kernel's code "return address", which is
+ the address of the active instruction when the signal was caught.
+ On the SPARC, since RETURN_ADDR_OFFSET (essentially 8) is defined, we
+ need to preventively subtract it from the purported return address. */
+ ra_location = &mctx->gregs[REG_PC];
+ shifted_ra_location = &mctx->gregs[REG_Y];
+ *(void **)shifted_ra_location = *(void **)ra_location - 8;
+ fs->retaddr_column = 0;
+ fs->regs.reg[0].how = REG_SAVED_OFFSET;
+ fs->regs.reg[0].loc.offset = (long)shifted_ra_location - new_cfa;
+
+ /* SIGFPE for IEEE-754 exceptions is delivered after the faulting insn
+ rather than before it, so don't set fs->signal_frame in that case.
+ We test whether the cexc field of the FSR is zero. */
+ if ((mctx->fpregs.fpu_fsr & 0x1f) == 0)
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
diff --git a/gcc-4.9/libgcc/config/sparc/t-linux b/gcc-4.9/libgcc/config/sparc/t-linux
new file mode 100644
index 000000000..474f1755e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/t-linux
@@ -0,0 +1,4 @@
+# Override t-slibgcc-elf-ver to export some libgcc symbols with
+# the symbol versions that glibc used.
+# Avoid the t-linux version file.
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/sparc/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/sparc/t-linux64 b/gcc-4.9/libgcc/config/sparc/t-linux64
new file mode 100644
index 000000000..6583fe25a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/t-linux64
@@ -0,0 +1 @@
+CRTSTUFF_T_CFLAGS = -mcmodel=medany
diff --git a/gcc-4.9/libgcc/config/sparc/t-softmul b/gcc-4.9/libgcc/config/sparc/t-softmul
new file mode 100644
index 000000000..714220060
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/t-softmul
@@ -0,0 +1,2 @@
+LIB1ASMSRC = sparc/lb1spc.S
+LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3
diff --git a/gcc-4.9/libgcc/config/sparc/t-sol2 b/gcc-4.9/libgcc/config/sparc/t-sol2
new file mode 100644
index 000000000..ea3fa63a2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/sparc/t-sol2
@@ -0,0 +1,6 @@
+# We need to use -fPIC when we are using gcc to compile the routines in
+# crtstuff.c. This is only really needed when we are going to use gcc/g++
+# to produce a shared library, but since we don't know ahead of time when
+# we will be doing that, we just always use -fPIC when compiling the
+# routines in crtstuff.c.
+CRTSTUFF_T_CFLAGS = $(PICFLAG)
diff --git a/gcc-4.9/libgcc/config/spu/cache.S b/gcc-4.9/libgcc/config/spu/cache.S
new file mode 100644
index 000000000..5506079c7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/cache.S
@@ -0,0 +1,43 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+ .data
+ .p2align 7
+ .global __cache
+__cache:
+ .rept __CACHE_SIZE__ * 8
+ .fill 128
+ .endr
+
+ .p2align 7
+ .global __cache_tag_array
+__cache_tag_array:
+ .rept __CACHE_SIZE__ * 2
+ .long 1, 1, 1, 1
+ .fill 128-16
+ .endr
+__end_cache_tag_array:
+
+ .globl __cache_tag_array_size
+ .set __cache_tag_array_size, __end_cache_tag_array-__cache_tag_array
+
diff --git a/gcc-4.9/libgcc/config/spu/cachemgr.c b/gcc-4.9/libgcc/config/spu/cachemgr.c
new file mode 100644
index 000000000..572718cf3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/cachemgr.c
@@ -0,0 +1,438 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <spu_mfcio.h>
+#include <spu_internals.h>
+#include <spu_intrinsics.h>
+#include <spu_cache.h>
+
+extern unsigned long long __ea_local_store;
+extern char __cache_tag_array_size;
+
+#define LINE_SIZE 128
+#define TAG_MASK (LINE_SIZE - 1)
+
+#define WAYS 4
+#define SET_MASK ((int) &__cache_tag_array_size - LINE_SIZE)
+
+#define CACHE_LINES ((int) &__cache_tag_array_size / \
+ sizeof (struct __cache_tag_array) * WAYS)
+
+struct __cache_tag_array
+{
+ unsigned int tag_lo[WAYS];
+ unsigned int tag_hi[WAYS];
+ void *base[WAYS];
+ int reserved[WAYS];
+ vector unsigned short dirty_bits[WAYS];
+};
+
+extern struct __cache_tag_array __cache_tag_array[];
+extern char __cache[];
+
+/* In order to make the code seem a little cleaner, and to avoid having
+ 64/32 bit ifdefs all over the place, we use macros. */
+
+#ifdef __EA64__
+typedef unsigned long long addr;
+
+#define CHECK_TAG(_entry, _way, _tag) \
+ ((_entry)->tag_lo[(_way)] == ((_tag) & 0xFFFFFFFF) \
+ && (_entry)->tag_hi[(_way)] == ((_tag) >> 32))
+
+#define GET_TAG(_entry, _way) \
+ ((unsigned long long)(_entry)->tag_hi[(_way)] << 32 \
+ | (unsigned long long)(_entry)->tag_lo[(_way)])
+
+#define SET_TAG(_entry, _way, _tag) \
+ (_entry)->tag_lo[(_way)] = (_tag) & 0xFFFFFFFF; \
+ (_entry)->tag_hi[(_way)] = (_tag) >> 32
+
+#else /*__EA32__*/
+typedef unsigned long addr;
+
+#define CHECK_TAG(_entry, _way, _tag) \
+ ((_entry)->tag_lo[(_way)] == (_tag))
+
+#define GET_TAG(_entry, _way) \
+ ((_entry)->tag_lo[(_way)])
+
+#define SET_TAG(_entry, _way, _tag) \
+ (_entry)->tag_lo[(_way)] = (_tag)
+
+#endif
+
+/* In GET_ENTRY, we cast away the high 32 bits,
+ as the tag is only in the low 32. */
+
+#define GET_ENTRY(_addr) \
+ ((struct __cache_tag_array *) \
+ si_to_uint (si_a (si_and (si_from_uint ((unsigned int) (addr) (_addr)), \
+ si_from_uint (SET_MASK)), \
+ si_from_uint ((unsigned int) __cache_tag_array))))
+
+#define GET_CACHE_LINE(_addr, _way) \
+ ((void *) (__cache + ((_addr) & SET_MASK) * WAYS) + ((_way) * LINE_SIZE));
+
+#define CHECK_DIRTY(_vec) (si_to_uint (si_orx ((qword) (_vec))))
+#define SET_EMPTY(_entry, _way) ((_entry)->tag_lo[(_way)] = 1)
+#define CHECK_EMPTY(_entry, _way) ((_entry)->tag_lo[(_way)] == 1)
+
+#define LS_FLAG 0x80000000
+#define SET_IS_LS(_entry, _way) ((_entry)->reserved[(_way)] |= LS_FLAG)
+#define CHECK_IS_LS(_entry, _way) ((_entry)->reserved[(_way)] & LS_FLAG)
+#define GET_LRU(_entry, _way) ((_entry)->reserved[(_way)] & ~LS_FLAG)
+
+static int dma_tag = 32;
+
+static void
+__cache_evict_entry (struct __cache_tag_array *entry, int way)
+{
+ addr tag = GET_TAG (entry, way);
+
+ if (CHECK_DIRTY (entry->dirty_bits[way]) && !CHECK_IS_LS (entry, way))
+ {
+#ifdef NONATOMIC
+ /* Non-atomic writes. */
+ unsigned int oldmask, mach_stat;
+ char *line = ((void *) 0);
+
+ /* Enter critical section. */
+ mach_stat = spu_readch (SPU_RdMachStat);
+ spu_idisable ();
+
+ /* Issue DMA request. */
+ line = GET_CACHE_LINE (entry->tag_lo[way], way);
+ mfc_put (line, tag, LINE_SIZE, dma_tag, 0, 0);
+
+ /* Wait for DMA completion. */
+ oldmask = mfc_read_tag_mask ();
+ mfc_write_tag_mask (1 << dma_tag);
+ mfc_read_tag_status_all ();
+ mfc_write_tag_mask (oldmask);
+
+ /* Leave critical section. */
+ if (__builtin_expect (mach_stat & 1, 0))
+ spu_ienable ();
+#else
+ /* Allocate a buffer large enough that we know it has 128 bytes
+ that are 128 byte aligned (for DMA). */
+
+ char buffer[LINE_SIZE + 127];
+ qword *buf_ptr = (qword *) (((unsigned int) (buffer) + 127) & ~127);
+ qword *line = GET_CACHE_LINE (entry->tag_lo[way], way);
+ qword bits;
+ unsigned int mach_stat;
+
+ /* Enter critical section. */
+ mach_stat = spu_readch (SPU_RdMachStat);
+ spu_idisable ();
+
+ do
+ {
+ /* We atomically read the current memory into a buffer
+ modify the dirty bytes in the buffer, and write it
+ back. If writeback fails, loop and try again. */
+
+ mfc_getllar (buf_ptr, tag, 0, 0);
+ mfc_read_atomic_status ();
+
+ /* The method we're using to write 16 dirty bytes into
+ the buffer at a time uses fsmb which in turn uses
+ the least significant 16 bits of word 0, so we
+ load the bits and rotate so that the first bit of
+ the bitmap is in the first bit that fsmb will use. */
+
+ bits = (qword) entry->dirty_bits[way];
+ bits = si_rotqbyi (bits, -2);
+
+ /* Si_fsmb creates the mask of dirty bytes.
+ Use selb to nab the appropriate bits. */
+ buf_ptr[0] = si_selb (buf_ptr[0], line[0], si_fsmb (bits));
+
+ /* Rotate to next 16 byte section of cache. */
+ bits = si_rotqbyi (bits, 2);
+
+ buf_ptr[1] = si_selb (buf_ptr[1], line[1], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+ buf_ptr[2] = si_selb (buf_ptr[2], line[2], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+ buf_ptr[3] = si_selb (buf_ptr[3], line[3], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+ buf_ptr[4] = si_selb (buf_ptr[4], line[4], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+ buf_ptr[5] = si_selb (buf_ptr[5], line[5], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+ buf_ptr[6] = si_selb (buf_ptr[6], line[6], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+ buf_ptr[7] = si_selb (buf_ptr[7], line[7], si_fsmb (bits));
+ bits = si_rotqbyi (bits, 2);
+
+ mfc_putllc (buf_ptr, tag, 0, 0);
+ }
+ while (mfc_read_atomic_status ());
+
+ /* Leave critical section. */
+ if (__builtin_expect (mach_stat & 1, 0))
+ spu_ienable ();
+#endif
+ }
+
+ /* In any case, marking the lo tag with 1 which denotes empty. */
+ SET_EMPTY (entry, way);
+ entry->dirty_bits[way] = (vector unsigned short) si_from_uint (0);
+}
+
+void
+__cache_evict (__ea void *ea)
+{
+ addr tag = (addr) ea & ~TAG_MASK;
+ struct __cache_tag_array *entry = GET_ENTRY (ea);
+ int i = 0;
+
+ /* Cycles through all the possible ways an address could be at
+ and evicts the way if found. */
+
+ for (i = 0; i < WAYS; i++)
+ if (CHECK_TAG (entry, i, tag))
+ __cache_evict_entry (entry, i);
+}
+
+static void *
+__cache_fill (int way, addr tag)
+{
+ unsigned int oldmask, mach_stat;
+ char *line = ((void *) 0);
+
+ /* Reserve our DMA tag. */
+ if (dma_tag == 32)
+ dma_tag = mfc_tag_reserve ();
+
+ /* Enter critical section. */
+ mach_stat = spu_readch (SPU_RdMachStat);
+ spu_idisable ();
+
+ /* Issue DMA request. */
+ line = GET_CACHE_LINE (tag, way);
+ mfc_get (line, tag, LINE_SIZE, dma_tag, 0, 0);
+
+ /* Wait for DMA completion. */
+ oldmask = mfc_read_tag_mask ();
+ mfc_write_tag_mask (1 << dma_tag);
+ mfc_read_tag_status_all ();
+ mfc_write_tag_mask (oldmask);
+
+ /* Leave critical section. */
+ if (__builtin_expect (mach_stat & 1, 0))
+ spu_ienable ();
+
+ return (void *) line;
+}
+
+static void
+__cache_miss (__ea void *ea, struct __cache_tag_array *entry, int way)
+{
+
+ addr tag = (addr) ea & ~TAG_MASK;
+ unsigned int lru = 0;
+ int i = 0;
+ int idx = 0;
+
+ /* If way > 4, then there are no empty slots, so we must evict
+ the least recently used entry. */
+ if (way >= 4)
+ {
+ for (i = 0; i < WAYS; i++)
+ {
+ if (GET_LRU (entry, i) > lru)
+ {
+ lru = GET_LRU (entry, i);
+ idx = i;
+ }
+ }
+ __cache_evict_entry (entry, idx);
+ way = idx;
+ }
+
+ /* Set the empty entry's tag and fill it's cache line. */
+
+ SET_TAG (entry, way, tag);
+ entry->reserved[way] = 0;
+
+ /* Check if the address is just an effective address within the
+ SPU's local store. */
+
+ /* Because the LS is not 256k aligned, we can't do a nice and mask
+ here to compare, so we must check the whole range. */
+
+ if ((addr) ea >= (addr) __ea_local_store
+ && (addr) ea < (addr) (__ea_local_store + 0x40000))
+ {
+ SET_IS_LS (entry, way);
+ entry->base[way] =
+ (void *) ((unsigned int) ((addr) ea -
+ (addr) __ea_local_store) & ~0x7f);
+ }
+ else
+ {
+ entry->base[way] = __cache_fill (way, tag);
+ }
+}
+
+void *
+__cache_fetch_dirty (__ea void *ea, int n_bytes_dirty)
+{
+#ifdef __EA64__
+ unsigned int tag_hi;
+ qword etag_hi;
+#endif
+ unsigned int tag_lo;
+ struct __cache_tag_array *entry;
+
+ qword etag_lo;
+ qword equal;
+ qword bit_mask;
+ qword way;
+
+ /* This first chunk, we merely fill the pointer and tag. */
+
+ entry = GET_ENTRY (ea);
+
+#ifndef __EA64__
+ tag_lo =
+ si_to_uint (si_andc
+ (si_shufb
+ (si_from_uint ((addr) ea), si_from_uint (0),
+ si_from_uint (0x00010203)), si_from_uint (TAG_MASK)));
+#else
+ tag_lo =
+ si_to_uint (si_andc
+ (si_shufb
+ (si_from_ullong ((addr) ea), si_from_uint (0),
+ si_from_uint (0x04050607)), si_from_uint (TAG_MASK)));
+
+ tag_hi =
+ si_to_uint (si_shufb
+ (si_from_ullong ((addr) ea), si_from_uint (0),
+ si_from_uint (0x00010203)));
+#endif
+
+ /* Increment LRU in reserved bytes. */
+ si_stqd (si_ai (si_lqd (si_from_ptr (entry), 48), 1),
+ si_from_ptr (entry), 48);
+
+missreturn:
+ /* Check if the entry's lo_tag is equal to the address' lo_tag. */
+ etag_lo = si_lqd (si_from_ptr (entry), 0);
+ equal = si_ceq (etag_lo, si_from_uint (tag_lo));
+#ifdef __EA64__
+ /* And the high tag too. */
+ etag_hi = si_lqd (si_from_ptr (entry), 16);
+ equal = si_and (equal, (si_ceq (etag_hi, si_from_uint (tag_hi))));
+#endif
+
+ if ((si_to_uint (si_orx (equal)) == 0))
+ goto misshandler;
+
+ if (n_bytes_dirty)
+ {
+ /* way = 0x40,0x50,0x60,0x70 for each way, which is also the
+ offset of the appropriate dirty bits. */
+ way = si_shli (si_clz (si_gbb (equal)), 2);
+
+ /* To create the bit_mask, we set it to all 1s (uint -1), then we
+ shift it over (128 - n_bytes_dirty) times. */
+
+ bit_mask = si_from_uint (-1);
+
+ bit_mask =
+ si_shlqby (bit_mask, si_from_uint ((LINE_SIZE - n_bytes_dirty) / 8));
+
+ bit_mask =
+ si_shlqbi (bit_mask, si_from_uint ((LINE_SIZE - n_bytes_dirty) % 8));
+
+ /* Rotate it around to the correct offset. */
+ bit_mask =
+ si_rotqby (bit_mask,
+ si_from_uint (-1 * ((addr) ea & TAG_MASK) / 8));
+
+ bit_mask =
+ si_rotqbi (bit_mask,
+ si_from_uint (-1 * ((addr) ea & TAG_MASK) % 8));
+
+ /* Update the dirty bits. */
+ si_stqx (si_or (si_lqx (si_from_ptr (entry), way), bit_mask),
+ si_from_ptr (entry), way);
+ };
+
+ /* We've definitely found the right entry, set LRU (reserved) to 0
+ maintaining the LS flag (MSB). */
+
+ si_stqd (si_andc
+ (si_lqd (si_from_ptr (entry), 48),
+ si_and (equal, si_from_uint (~(LS_FLAG)))),
+ si_from_ptr (entry), 48);
+
+ return (void *)
+ si_to_uint (si_a
+ (si_orx
+ (si_and (si_lqd (si_from_ptr (entry), 32), equal)),
+ si_from_uint (((unsigned int) (addr) ea) & TAG_MASK)));
+
+misshandler:
+ equal = si_ceqi (etag_lo, 1);
+ __cache_miss (ea, entry, (si_to_uint (si_clz (si_gbb (equal))) - 16) >> 2);
+ goto missreturn;
+}
+
+void *
+__cache_fetch (__ea void *ea)
+{
+ return __cache_fetch_dirty (ea, 0);
+}
+
+void
+__cache_touch (__ea void *ea __attribute__ ((unused)))
+{
+ /* NO-OP for now. */
+}
+
+void __cache_flush (void) __attribute__ ((destructor));
+void
+__cache_flush (void)
+{
+ struct __cache_tag_array *entry = __cache_tag_array;
+ unsigned int i;
+ int j;
+
+ /* Cycle through each cache entry and evict all used ways. */
+
+ for (i = 0; i < CACHE_LINES / WAYS; i++)
+ {
+ for (j = 0; j < WAYS; j++)
+ if (!CHECK_EMPTY (entry, j))
+ __cache_evict_entry (entry, j);
+
+ entry++;
+ }
+}
diff --git a/gcc-4.9/libgcc/config/spu/divmodti4.c b/gcc-4.9/libgcc/config/spu/divmodti4.c
new file mode 100644
index 000000000..79192a987
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/divmodti4.c
@@ -0,0 +1,188 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <spu_intrinsics.h>
+
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+typedef int TItype __attribute__ ((mode (TI)));
+TItype __divti3 (TItype u, TItype v);
+TItype __modti3 (TItype u, TItype v);
+UTItype __udivti3 (UTItype u, UTItype v);
+UTItype __umodti3 (UTItype u, UTItype v);
+UTItype __udivmodti4 (UTItype u, UTItype v, UTItype *w);
+
+union qword_UTItype
+ {
+ qword q;
+ UTItype t;
+ };
+
+inline static qword
+si_from_UTItype (UTItype t)
+{
+ union qword_UTItype u;
+ u.t = t;
+ return u.q;
+}
+
+inline static UTItype
+si_to_UTItype (qword q)
+{
+ union qword_UTItype u;
+ u.q = q;
+ return u.t;
+}
+
+inline static unsigned int
+count_leading_zeros (UTItype x)
+{
+ qword c = si_clz (*(qword *) & x);
+ qword cmp0 = si_cgti (c, 31);
+ qword cmp1 = si_and (cmp0, si_shlqbyi (cmp0, 4));
+ qword cmp2 = si_and (cmp1, si_shlqbyi (cmp0, 8));
+ qword s = si_a (c, si_and (cmp0, si_shlqbyi (c, 4)));
+ s = si_a (s, si_and (cmp1, si_shlqbyi (c, 8)));
+ s = si_a (s, si_and (cmp2, si_shlqbyi (c, 12)));
+ return si_to_uint (s);
+}
+
+/* Based on implementation of udivmodsi4, which is essentially
+ * an optimized version of libgcc/udivmodsi4.c
+ clz %7,%2
+ clz %4,%1
+ il %5,1
+ fsmbi %0,0
+ sf %7,%4,%7
+ ori %3,%1,0
+ shl %5,%5,%7
+ shl %4,%2,%7
+1: or %8,%0,%5
+ rotmi %5,%5,-1
+ clgt %6,%4,%3
+ sf %7,%4,%3
+ rotmi %4,%4,-1
+ selb %0,%8,%0,%6
+ selb %3,%7,%3,%6
+3: brnz %5,1b
+ */
+
+UTItype
+__udivmodti4 (UTItype num, UTItype den, UTItype * rp)
+{
+ qword shift =
+ si_from_uint (count_leading_zeros (den) - count_leading_zeros (num));
+ qword n0 = si_from_UTItype (num);
+ qword d0 = si_from_UTItype (den);
+ qword bit = si_andi (si_fsmbi (1), 1);
+ qword r0 = si_il (0);
+ qword m1 = si_fsmbi (0x000f);
+ qword mask, r1, n1;
+
+ d0 = si_shlqbybi (si_shlqbi (d0, shift), shift);
+ bit = si_shlqbybi (si_shlqbi (bit, shift), shift);
+
+ do
+ {
+ r1 = si_or (r0, bit);
+
+ // n1 = n0 - d0 in TImode
+ n1 = si_bg (d0, n0);
+ n1 = si_shlqbyi (n1, 4);
+ n1 = si_sf (m1, n1);
+ n1 = si_bgx (d0, n0, n1);
+ n1 = si_shlqbyi (n1, 4);
+ n1 = si_sf (m1, n1);
+ n1 = si_bgx (d0, n0, n1);
+ n1 = si_shlqbyi (n1, 4);
+ n1 = si_sf (m1, n1);
+ n1 = si_sfx (d0, n0, n1);
+
+ mask = si_fsm (si_cgti (n1, -1));
+ r0 = si_selb (r0, r1, mask);
+ n0 = si_selb (n0, n1, mask);
+ bit = si_rotqmbii (bit, -1);
+ d0 = si_rotqmbii (d0, -1);
+ }
+ while (si_to_uint (si_orx (bit)));
+ if (rp)
+ *rp = si_to_UTItype (n0);
+ return si_to_UTItype (r0);
+}
+
+UTItype
+__udivti3 (UTItype n, UTItype d)
+{
+ return __udivmodti4 (n, d, (UTItype *)0);
+}
+
+UTItype
+__umodti3 (UTItype n, UTItype d)
+{
+ UTItype w;
+ __udivmodti4 (n, d, &w);
+ return w;
+}
+
+TItype
+__divti3 (TItype n, TItype d)
+{
+ int c = 0;
+ TItype w;
+
+ if (n < 0)
+ {
+ c = ~c;
+ n = -n;
+ }
+ if (d < 0)
+ {
+ c = ~c;
+ d = -d;
+ }
+
+ w = __udivmodti4 (n, d, (UTItype *)0);
+ if (c)
+ w = -w;
+ return w;
+}
+
+TItype
+__modti3 (TItype n, TItype d)
+{
+ int c = 0;
+ TItype w;
+
+ if (n < 0)
+ {
+ c = ~c;
+ n = -n;
+ }
+ if (d < 0)
+ {
+ c = ~c;
+ d = -d;
+ }
+
+ __udivmodti4 (n, d, (UTItype *) &w);
+ if (c)
+ w = -w;
+ return w;
+}
diff --git a/gcc-4.9/libgcc/config/spu/divv2df3.c b/gcc-4.9/libgcc/config/spu/divv2df3.c
new file mode 100644
index 000000000..aca64d2a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/divv2df3.c
@@ -0,0 +1,195 @@
+/* Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <spu_intrinsics.h>
+
+vector double __divv2df3 (vector double a_in, vector double b_in);
+
+/* __divv2df3 divides the vector dividend a by the vector divisor b and
+ returns the resulting vector quotient. Maximum error about 0.5 ulp
+ over entire double range including denorms, compared to true result
+ in round-to-nearest rounding mode. Handles Inf or NaN operands and
+ results correctly. */
+
+vector double
+__divv2df3 (vector double a_in, vector double b_in)
+{
+ /* Variables */
+ vec_int4 exp, exp_bias;
+ vec_uint4 no_underflow, overflow;
+ vec_float4 mant_bf, inv_bf;
+ vec_ullong2 exp_a, exp_b;
+ vec_ullong2 a_nan, a_zero, a_inf, a_denorm, a_denorm0;
+ vec_ullong2 b_nan, b_zero, b_inf, b_denorm, b_denorm0;
+ vec_ullong2 nan;
+ vec_uint4 a_exp, b_exp;
+ vec_ullong2 a_mant_0, b_mant_0;
+ vec_ullong2 a_exp_1s, b_exp_1s;
+ vec_ullong2 sign_exp_mask;
+
+ vec_double2 a, b;
+ vec_double2 mant_a, mant_b, inv_b, q0, q1, q2, mult;
+
+ /* Constants */
+ vec_uint4 exp_mask_u32 = spu_splats((unsigned int)0x7FF00000);
+ vec_uchar16 splat_hi = (vec_uchar16){0,1,2,3, 0,1,2,3, 8, 9,10,11, 8,9,10,11};
+ vec_uchar16 swap_32 = (vec_uchar16){4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11};
+ vec_ullong2 exp_mask = spu_splats(0x7FF0000000000000ULL);
+ vec_ullong2 sign_mask = spu_splats(0x8000000000000000ULL);
+ vec_float4 onef = spu_splats(1.0f);
+ vec_double2 one = spu_splats(1.0);
+ vec_double2 exp_53 = (vec_double2)spu_splats(0x0350000000000000ULL);
+
+ sign_exp_mask = spu_or(sign_mask, exp_mask);
+
+ /* Extract the floating point components from each of the operands including
+ * exponent and mantissa.
+ */
+ a_exp = (vec_uint4)spu_and((vec_uint4)a_in, exp_mask_u32);
+ a_exp = spu_shuffle(a_exp, a_exp, splat_hi);
+ b_exp = (vec_uint4)spu_and((vec_uint4)b_in, exp_mask_u32);
+ b_exp = spu_shuffle(b_exp, b_exp, splat_hi);
+
+ a_mant_0 = (vec_ullong2)spu_cmpeq((vec_uint4)spu_andc((vec_ullong2)a_in, sign_exp_mask), 0);
+ a_mant_0 = spu_and(a_mant_0, spu_shuffle(a_mant_0, a_mant_0, swap_32));
+
+ b_mant_0 = (vec_ullong2)spu_cmpeq((vec_uint4)spu_andc((vec_ullong2)b_in, sign_exp_mask), 0);
+ b_mant_0 = spu_and(b_mant_0, spu_shuffle(b_mant_0, b_mant_0, swap_32));
+
+ a_exp_1s = (vec_ullong2)spu_cmpeq(a_exp, exp_mask_u32);
+ b_exp_1s = (vec_ullong2)spu_cmpeq(b_exp, exp_mask_u32);
+
+ /* Identify all possible special values that must be accommodated including:
+ * +-denorm, +-0, +-infinity, and NaNs.
+ */
+ a_denorm0= (vec_ullong2)spu_cmpeq(a_exp, 0);
+ a_nan = spu_andc(a_exp_1s, a_mant_0);
+ a_zero = spu_and (a_denorm0, a_mant_0);
+ a_inf = spu_and (a_exp_1s, a_mant_0);
+ a_denorm = spu_andc(a_denorm0, a_zero);
+
+ b_denorm0= (vec_ullong2)spu_cmpeq(b_exp, 0);
+ b_nan = spu_andc(b_exp_1s, b_mant_0);
+ b_zero = spu_and (b_denorm0, b_mant_0);
+ b_inf = spu_and (b_exp_1s, b_mant_0);
+ b_denorm = spu_andc(b_denorm0, b_zero);
+
+ /* Scale denorm inputs to into normalized numbers by conditionally scaling the
+ * input parameters.
+ */
+ a = spu_sub(spu_or(a_in, exp_53), spu_sel(exp_53, a_in, sign_mask));
+ a = spu_sel(a_in, a, a_denorm);
+
+ b = spu_sub(spu_or(b_in, exp_53), spu_sel(exp_53, b_in, sign_mask));
+ b = spu_sel(b_in, b, b_denorm);
+
+ /* Extract the divisor and dividend exponent and force parameters into the signed
+ * range [1.0,2.0) or [-1.0,2.0).
+ */
+ exp_a = spu_and((vec_ullong2)a, exp_mask);
+ exp_b = spu_and((vec_ullong2)b, exp_mask);
+
+ mant_a = spu_sel(a, one, (vec_ullong2)exp_mask);
+ mant_b = spu_sel(b, one, (vec_ullong2)exp_mask);
+
+ /* Approximate the single reciprocal of b by using
+ * the single precision reciprocal estimate followed by one
+ * single precision iteration of Newton-Raphson.
+ */
+ mant_bf = spu_roundtf(mant_b);
+ inv_bf = spu_re(mant_bf);
+ inv_bf = spu_madd(spu_nmsub(mant_bf, inv_bf, onef), inv_bf, inv_bf);
+
+ /* Perform 2 more Newton-Raphson iterations in double precision. The
+ * result (q1) is in the range (0.5, 2.0).
+ */
+ inv_b = spu_extend(inv_bf);
+ inv_b = spu_madd(spu_nmsub(mant_b, inv_b, one), inv_b, inv_b);
+ q0 = spu_mul(mant_a, inv_b);
+ q1 = spu_madd(spu_nmsub(mant_b, q0, mant_a), inv_b, q0);
+
+ /* Determine the exponent correction factor that must be applied
+ * to q1 by taking into account the exponent of the normalized inputs
+ * and the scale factors that were applied to normalize them.
+ */
+ exp = spu_rlmaska(spu_sub((vec_int4)exp_a, (vec_int4)exp_b), -20);
+ exp = spu_add(exp, (vec_int4)spu_add(spu_and((vec_int4)a_denorm, -0x34), spu_and((vec_int4)b_denorm, 0x34)));
+
+ /* Bias the quotient exponent depending on the sign of the exponent correction
+ * factor so that a single multiplier will ensure the entire double precision
+ * domain (including denorms) can be achieved.
+ *
+ * exp bias q1 adjust exp
+ * ===== ======== ==========
+ * positive 2^+65 -65
+ * negative 2^-64 +64
+ */
+ exp_bias = spu_xor(spu_rlmaska(exp, -31), 64);
+ exp = spu_sub(exp, exp_bias);
+
+ q1 = spu_sel(q1, (vec_double2)spu_add((vec_int4)q1, spu_sl(exp_bias, 20)), exp_mask);
+
+ /* Compute a multiplier (mult) to applied to the quotient (q1) to produce the
+ * expected result. On overflow, clamp the multiplier to the maximum non-infinite
+ * number in case the rounding mode is not round-to-nearest.
+ */
+ exp = spu_add(exp, 0x3FF);
+ no_underflow = spu_cmpgt(exp, 0);
+ overflow = spu_cmpgt(exp, 0x7FE);
+ exp = spu_and(spu_sl(exp, 20), (vec_int4)no_underflow);
+ exp = spu_and(exp, (vec_int4)exp_mask);
+
+ mult = spu_sel((vec_double2)exp, (vec_double2)(spu_add((vec_uint4)exp_mask, -1)), (vec_ullong2)overflow);
+
+ /* Handle special value conditions. These include:
+ *
+ * 1) IF either operand is a NaN OR both operands are 0 or INFINITY THEN a NaN
+ * results.
+ * 2) ELSE IF the dividend is an INFINITY OR the divisor is 0 THEN a INFINITY results.
+ * 3) ELSE IF the dividend is 0 OR the divisor is INFINITY THEN a 0 results.
+ */
+ mult = spu_andc(mult, (vec_double2)spu_or(a_zero, b_inf));
+ mult = spu_sel(mult, (vec_double2)exp_mask, spu_or(a_inf, b_zero));
+
+ nan = spu_or(a_nan, b_nan);
+ nan = spu_or(nan, spu_and(a_zero, b_zero));
+ nan = spu_or(nan, spu_and(a_inf, b_inf));
+
+ mult = spu_or(mult, (vec_double2)nan);
+
+ /* Scale the final quotient */
+
+ q2 = spu_mul(q1, mult);
+
+ return (q2);
+}
+
+
+/* We use the same function for vector and scalar division. Provide the
+ scalar entry point as an alias. */
+double __divdf3 (double a, double b)
+ __attribute__ ((__alias__ ("__divv2df3")));
+
+/* Some toolchain builds used the __fast_divdf3 name for this helper function.
+ Provide this as another alternate entry point for compatibility. */
+double __fast_divdf3 (double a, double b)
+ __attribute__ ((__alias__ ("__divv2df3")));
+
diff --git a/gcc-4.9/libgcc/config/spu/float_disf.c b/gcc-4.9/libgcc/config/spu/float_disf.c
new file mode 100644
index 000000000..971ea1c01
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/float_disf.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Prototype. */
+float __floatdisf (long long x);
+
+float __floatdisf (long long x)
+{
+ /* The SPU back-end now generates inline code for this conversion.
+ This file is solely used to provide the __floatdisf functions
+ for objects generated with prior versions of GCC. */
+ return x;
+}
diff --git a/gcc-4.9/libgcc/config/spu/float_unsdidf.c b/gcc-4.9/libgcc/config/spu/float_unsdidf.c
new file mode 100644
index 000000000..ad760637b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/float_unsdidf.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <spu_intrinsics.h>
+const unsigned char __didf_scale[16] __attribute__ ((__aligned__ (16))) = {
+ 0x00, 0x00, 0x04, 0x3e,
+ 0x00, 0x00, 0x04, 0x1e,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00
+};
+const unsigned char __didf_pat[16] __attribute__ ((__aligned__ (16))) = {
+ 0x02, 0x03, 0x10, 0x11,
+ 0x12, 0x13, 0x80, 0x80,
+ 0x06, 0x07, 0x14, 0x15,
+ 0x16, 0x17, 0x80, 0x80
+};
+
+/* double __float_unsdidf (unsigned long long int)
+ Construct two exact doubles representing the high and low parts (in
+ parallel), then add them. */
+qword __float_unsdidf (qword DI);
+qword
+__float_unsdidf (qword DI)
+{
+ qword t0, t1, t2, t3, t4, t5, t6, t7, t8;
+ t0 = si_clz (DI);
+ t1 = si_shl (DI, t0);
+ t2 = si_ceqi (t0, 32);
+ t3 = si_sf (t0, *(const qword *) __didf_scale);
+ t4 = si_a (t1, t1);
+ t5 = si_andc (t3, t2);
+ t6 = si_shufb (t5, t4, *(const qword *) __didf_pat);
+ t7 = si_shlqbii (t6, 4);
+ t8 = si_shlqbyi (t7, 8);
+ return si_dfa (t7, t8);
+}
diff --git a/gcc-4.9/libgcc/config/spu/float_unsdisf.c b/gcc-4.9/libgcc/config/spu/float_unsdisf.c
new file mode 100644
index 000000000..ae43eecbc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/float_unsdisf.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Prototype. */
+float __floatundisf (unsigned long long x);
+
+float __floatundisf (unsigned long long x)
+{
+ /* The SPU back-end now generates inline code for this conversion.
+ This file is solely used to provide the __floatundisf function
+ for objects generated with prior versions of GCC. */
+ return x;
+}
diff --git a/gcc-4.9/libgcc/config/spu/float_unssidf.c b/gcc-4.9/libgcc/config/spu/float_unssidf.c
new file mode 100644
index 000000000..54b8f5874
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/float_unssidf.c
@@ -0,0 +1,45 @@
+/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <spu_intrinsics.h>
+const unsigned char __sidf_pat[16] __attribute__ ((__aligned__ (16))) = {
+ 0x02, 0x03, 0x10, 0x11,
+ 0x12, 0x13, 0x80, 0x80,
+ 0x06, 0x07, 0x14, 0x15,
+ 0x16, 0x17, 0x80, 0x80
+};
+
+/* double __float_unssidf (unsigned int SI) */
+qword __float_unssidf (qword SI);
+qword
+__float_unssidf (qword SI)
+{
+ qword t0, t1, t2, t3, t4, t5, t6, t7;
+ t0 = si_clz (SI);
+ t1 = si_il (1054);
+ t2 = si_shl (SI, t0);
+ t3 = si_ceqi (t0, 32);
+ t4 = si_sf (t0, t1);
+ t5 = si_a (t2, t2);
+ t6 = si_andc (t4, t3);
+ t7 = si_shufb (t6, t5, *(const qword *) __sidf_pat);
+ return si_shlqbii (t7, 4);
+}
diff --git a/gcc-4.9/libgcc/config/spu/mfc_multi_tag_release.c b/gcc-4.9/libgcc/config/spu/mfc_multi_tag_release.c
new file mode 100644
index 000000000..ceddfd8c0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/mfc_multi_tag_release.c
@@ -0,0 +1,72 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <spu_mfcio.h>
+extern vector unsigned int __mfc_tag_table;
+
+/* Release a sequential group of tags from exclusive use. The sequential
+ group of tags is the range starting from <first_tag> through
+ <first_tag>+<number_of_tags>-1. Upon successful release, MFC_DMA_TAG_VALID
+ is returned and the tags become available for future reservation.
+
+ If the specified tags were not previously reserved, no action is
+ taken and MFC_DMA_TAG_INVALID is returned. */
+
+unsigned int
+__mfc_multi_tag_release (unsigned int first_tag, unsigned int number_of_tags)
+{
+ vector unsigned int table_copy, tmp, tmp1;
+ vector unsigned int one = (vector unsigned int)
+ { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ vector unsigned int is_invalid;
+ unsigned int last_tag;
+ vector unsigned int has_been_reserved;
+
+ last_tag = first_tag + number_of_tags;
+
+ table_copy = spu_sl (one, number_of_tags);
+ table_copy = spu_rl (table_copy, -last_tag);
+ table_copy = spu_xor (table_copy, -1);
+
+ /* Make sure the tags are in range and valid. */
+ tmp = spu_cmpgt (spu_promote(last_tag, 0), 32);
+ tmp1 = spu_cmpgt (spu_promote(number_of_tags, 0), 32);
+ is_invalid = spu_cmpgt (spu_promote(first_tag, 0), 31);
+
+ /* All bits are set to 1 if invalid, 0 if valid. */
+ is_invalid = spu_or (tmp, is_invalid);
+ is_invalid = spu_or (tmp1, is_invalid);
+
+ /* check whether these tags have been reserved */
+ tmp = spu_rlmask (one, (int)-number_of_tags);
+ tmp1 = spu_sl (__mfc_tag_table, first_tag);
+ has_been_reserved = spu_cmpgt(tmp1, tmp);
+
+ is_invalid = spu_or (has_been_reserved, is_invalid);
+
+ table_copy = spu_sel (__mfc_tag_table, table_copy, table_copy);
+ __mfc_tag_table = spu_sel (table_copy, __mfc_tag_table, is_invalid);
+
+ return spu_extract (is_invalid, 0);
+}
+
diff --git a/gcc-4.9/libgcc/config/spu/mfc_multi_tag_reserve.c b/gcc-4.9/libgcc/config/spu/mfc_multi_tag_reserve.c
new file mode 100644
index 000000000..1ced0afbb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/mfc_multi_tag_reserve.c
@@ -0,0 +1,84 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <spu_mfcio.h>
+extern vector unsigned int __mfc_tag_table;
+
+/* Reserve a sequential group of tags for exclusive use. The number of
+ tags to be reserved is specified by the <number_of_tags> parameter.
+ This routine returns the first tag ID for a sequential list of
+ available tags and marks them as reserved. The reserved group
+ of tags is in the range starting from the returned tag through
+ the returned tag + <number_of_tags>-1.
+
+ If the number of tags requested exceeds the number of available
+ sequential tags, then MFC_DMA_TAG_INVALID is returned indicating
+ that the request could not be serviced. */
+
+unsigned int
+__mfc_multi_tag_reserve (unsigned int number_of_tags)
+{
+ vector unsigned int table_copy;
+ vector unsigned int one = (vector unsigned int)
+ { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ vector unsigned int count_busy, is_valid;
+ vector unsigned int count_total;
+ vector unsigned int count_avail = (vector unsigned int) { 0, 0, 0, 0 };
+ vector unsigned int index = (vector unsigned int) { 0, 0, 0, 0 };
+
+ table_copy = __mfc_tag_table;
+
+
+ /* count_busy: number of consecutive busy tags
+ count_avail: number of consecutive free tags
+ table_copy: temporary copy of the tag table
+ count_total: sum of count_busy and count_avail
+ index: index of the current working tag */
+ do
+ {
+ table_copy = spu_sl (table_copy, count_avail);
+
+ count_busy = spu_cntlz (table_copy);
+ table_copy = spu_sl (table_copy, count_busy);
+ count_avail = spu_cntlz (spu_xor(table_copy, -1));
+ count_total = spu_add (count_busy, count_avail);
+ index = spu_add (index, count_total);
+ }
+ while (spu_extract (count_avail, 0) < number_of_tags
+ && spu_extract (table_copy, 0) != 0);
+
+ index = spu_sub (index, count_avail);
+
+ /* is_valid is set to 0xFFFFFFFF if table_copy == 0, 0 otherwise. */
+ is_valid = spu_cmpeq (table_copy, 0);
+ index = spu_sel (index, is_valid, is_valid);
+
+ /* Now I need to actually mark the tags as used. */
+ table_copy = spu_sl (one, number_of_tags);
+ table_copy = spu_rl (table_copy, -number_of_tags - spu_extract (index, 0));
+ table_copy = spu_sel (table_copy, __mfc_tag_table, table_copy);
+ __mfc_tag_table = spu_sel (table_copy, __mfc_tag_table, is_valid);
+
+ return spu_extract (index, 0);
+}
+
diff --git a/gcc-4.9/libgcc/config/spu/mfc_tag_release.c b/gcc-4.9/libgcc/config/spu/mfc_tag_release.c
new file mode 100644
index 000000000..b3de2da9c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/mfc_tag_release.c
@@ -0,0 +1,59 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <spu_mfcio.h>
+extern vector unsigned int __mfc_tag_table;
+
+/* Release the specified DMA tag from exclusive use. Once released, the
+ tag is available for future reservation. Upon successful release,
+ MFC_DMA_TAG_VALID is returned. If the specified tag is not in the
+ range 0 to 31, or had not been reserved, no action is taken and
+ MFC_DMA_TAG_INVALID is returned. */
+
+unsigned int
+__mfc_tag_release (unsigned int tag)
+{
+ vector unsigned int is_invalid;
+ vector unsigned int mask = (vector unsigned int)
+ { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
+ vector signed int zero = (vector signed int) { 0, 0, 0, 0 };
+
+ vector signed int has_been_reserved;
+
+ /* Check if the tag is out of range. */
+ is_invalid = spu_cmpgt (spu_promote (tag, 0), 31);
+
+ /* Check whether the tag has been reserved, set to all 1 if has not
+ been reserved, 0 otherwise. */
+ has_been_reserved = (vector signed int) spu_rl (__mfc_tag_table, tag);
+ has_been_reserved = (vector signed int) spu_cmpgt (zero, has_been_reserved);
+
+ /* Set invalid. */
+ is_invalid = spu_or ((vector unsigned int) has_been_reserved, is_invalid);
+
+ mask = spu_rlmask (mask, (int)(-tag));
+ __mfc_tag_table = spu_or (__mfc_tag_table, mask);
+
+ return spu_extract(is_invalid, 0);
+}
+
diff --git a/gcc-4.9/libgcc/config/spu/mfc_tag_reserve.c b/gcc-4.9/libgcc/config/spu/mfc_tag_reserve.c
new file mode 100644
index 000000000..49626d1c4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/mfc_tag_reserve.c
@@ -0,0 +1,51 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <spu_mfcio.h>
+extern vector unsigned int __mfc_tag_table;
+
+/* Reserves a DMA tag for exclusive use. This routine returns an available
+ tag id in the range 0 to 31 and marks the tag as reserved. If no tags
+ are available, MFC_DMA_TAG_INVALID is returned indicating that all tags
+ are already reserved. */
+
+unsigned int
+__mfc_tag_reserve (void)
+{
+ vector unsigned int mask = (vector unsigned int)
+ { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
+ vector unsigned int count_zeros, is_valid;
+ vector signed int count_neg;
+
+ count_zeros = spu_cntlz (__mfc_tag_table);
+ count_neg = spu_sub (0, (vector signed int) count_zeros);
+
+ mask = spu_rlmask (mask, (vector signed int) count_neg);
+ __mfc_tag_table = spu_andc (__mfc_tag_table, mask);
+
+ is_valid = spu_cmpeq (count_zeros, 32);
+ count_zeros = spu_sel (count_zeros, is_valid, is_valid);
+
+ return spu_extract (count_zeros, 0);
+}
+
diff --git a/gcc-4.9/libgcc/config/spu/mfc_tag_table.c b/gcc-4.9/libgcc/config/spu/mfc_tag_table.c
new file mode 100644
index 000000000..92e00d9be
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/mfc_tag_table.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* The free tag table used by the MFC tag manager, with tag0
+ reserved for the overlay manager. */
+__vector unsigned int
+__mfc_tag_table = (__vector unsigned int) { 0x7FFFFFFF, -1, -1, -1 };
+
+/* Arrange to release tag0 if overlays are not present. */
+static void __mfc_tag_init (void) __attribute__ ((constructor));
+
+static void
+__mfc_tag_init (void)
+{
+ extern void _ovly_table __attribute__ ((weak));
+
+ if (&_ovly_table == 0)
+ __mfc_tag_table = (__vector unsigned int) { -1, -1, -1, -1 };
+}
diff --git a/gcc-4.9/libgcc/config/spu/multi3.c b/gcc-4.9/libgcc/config/spu/multi3.c
new file mode 100644
index 000000000..69097fa0e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/multi3.c
@@ -0,0 +1,119 @@
+/* Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+ This file is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your option)
+ any later version.
+
+ This file is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <spu_intrinsics.h>
+
+typedef int TItype __attribute__ ((mode (TI)));
+
+union qword_TItype
+ {
+ qword q;
+ TItype t;
+ };
+
+inline static qword
+si_from_TItype (TItype t)
+{
+ union qword_TItype u;
+ u.t = t;
+ return u.q;
+}
+
+inline static TItype
+si_to_TItype (qword q)
+{
+ union qword_TItype u;
+ u.q = q;
+ return u.t;
+}
+
+/* A straight forward vectorization and unrolling of
+ * short l[8], r[8];
+ * TItype total = 0;
+ * for (i = 0; i < 8; i++)
+ * for (j = 0; j < 8; j++)
+ * total += (TItype)((l[7-i] * r[7-j]) << (16 * (i + j)));
+ */
+TItype
+__multi3 (TItype l, TItype r)
+{
+ qword u = si_from_TItype (l);
+ qword v = si_from_TItype (r);
+ qword splat0 = si_shufb (v, v, si_ilh (0x0001));
+ qword splat1 = si_shufb (v, v, si_ilh (0x0203));
+ qword splat2 = si_shufb (v, v, si_ilh (0x0405));
+ qword splat3 = si_shufb (v, v, si_ilh (0x0607));
+ qword splat4 = si_shufb (v, v, si_ilh (0x0809));
+ qword splat5 = si_shufb (v, v, si_ilh (0x0a0b));
+ qword splat6 = si_shufb (v, v, si_ilh (0x0c0d));
+ qword splat7 = si_shufb (v, v, si_ilh (0x0e0f));
+
+ qword part0l = si_shlqbyi (si_mpyu (u, splat0), 14);
+ qword part1h = si_shlqbyi (si_mpyhhu (u, splat1), 14);
+ qword part1l = si_shlqbyi (si_mpyu (u, splat1), 12);
+ qword part2h = si_shlqbyi (si_mpyhhu (u, splat2), 12);
+ qword part2l = si_shlqbyi (si_mpyu (u, splat2), 10);
+ qword part3h = si_shlqbyi (si_mpyhhu (u, splat3), 10);
+ qword part3l = si_shlqbyi (si_mpyu (u, splat3), 8);
+ qword part4h = si_shlqbyi (si_mpyhhu (u, splat4), 8);
+ qword part4l = si_shlqbyi (si_mpyu (u, splat4), 6);
+ qword part5h = si_shlqbyi (si_mpyhhu (u, splat5), 6);
+ qword part5l = si_shlqbyi (si_mpyu (u, splat5), 4);
+ qword part6h = si_shlqbyi (si_mpyhhu (u, splat6), 4);
+ qword part6l = si_shlqbyi (si_mpyu (u, splat6), 2);
+ qword part7h = si_shlqbyi (si_mpyhhu (u, splat7), 2);
+ qword part7l = si_mpyu (u, splat7);
+
+ qword carry, total0, total1, total2, total3, total4;
+ qword total5, total6, total7, total8, total9, total10;
+ qword total;
+
+ total0 = si_a (si_a (si_a (part0l, part1h), si_a (part1l, part2h)), part7l);
+ total1 = si_a (part2l, part3h);
+ total2 = si_a (part3l, part4h);
+ total3 = si_a (part4l, part5h);
+ total4 = si_a (part5l, part6h);
+ total5 = si_a (part6l, part7h);
+ total6 = si_a (total0, total1);
+ total7 = si_a (total2, total3);
+ total8 = si_a (total4, total5);
+ total9 = si_a (total6, total7);
+ total10 = si_a (total8, total9);
+
+ carry = si_cg (part2l, part3h);
+ carry = si_a (carry, si_cg (part3l, part4h));
+ carry = si_a (carry, si_cg (part4l, part5h));
+ carry = si_a (carry, si_cg (part5l, part6h));
+ carry = si_a (carry, si_cg (part6l, part7h));
+ carry = si_a (carry, si_cg (total0, total1));
+ carry = si_a (carry, si_cg (total2, total3));
+ carry = si_a (carry, si_cg (total4, total5));
+ carry = si_a (carry, si_cg (total6, total7));
+ carry = si_a (carry, si_cg (total8, total9));
+ carry = si_shlqbyi (carry, 4);
+
+ total = si_cg (total10, carry);
+ total = si_shlqbyi (total, 4);
+ total = si_cgx (total10, carry, total);
+ total = si_shlqbyi (total, 4);
+ total = si_addx (total10, carry, total);
+ return si_to_TItype (total);
+}
diff --git a/gcc-4.9/libgcc/config/spu/t-elf b/gcc-4.9/libgcc/config/spu/t-elf
new file mode 100644
index 000000000..29536e881
--- /dev/null
+++ b/gcc-4.9/libgcc/config/spu/t-elf
@@ -0,0 +1,59 @@
+# Don't let CTOR_LIST end up in sdata section.
+# FIXME: This is the default.
+CRTSTUFF_T_CFLAGS =
+
+# We exclude those because the libgcc2.c default versions do not support
+# the SPU single-precision format (round towards zero). We provide our
+# own versions below and/or via direct expansion.
+LIB2FUNCS_EXCLUDE = _floatdisf _floatundisf _floattisf _floatunstisf
+
+LIB2ADD_ST = $(srcdir)/config/spu/float_unssidf.c \
+ $(srcdir)/config/spu/float_unsdidf.c \
+ $(srcdir)/config/spu/float_unsdisf.c \
+ $(srcdir)/config/spu/float_disf.c \
+ $(srcdir)/config/spu/mfc_tag_table.c \
+ $(srcdir)/config/spu/mfc_tag_reserve.c \
+ $(srcdir)/config/spu/mfc_tag_release.c \
+ $(srcdir)/config/spu/mfc_multi_tag_reserve.c \
+ $(srcdir)/config/spu/mfc_multi_tag_release.c \
+ $(srcdir)/config/spu/multi3.c \
+ $(srcdir)/config/spu/divmodti4.c \
+ $(srcdir)/config/spu/divv2df3.c
+
+# Build TImode conversion routines to support Fortran 128-bit
+# integer data types.
+LIB2_SIDITI_CONV_FUNCS = yes
+
+HOST_LIBGCC2_CFLAGS += -mwarn-reloc -D__IN_LIBGCC2
+
+# Neither gcc or newlib seem to have a standard way to generate multiple
+# crt*.o files. So we don't use the standard crt0.o name anymore.
+
+cachemgr.o: $(srcdir)/config/spu/cachemgr.c
+ $(gcc_compile) -c $<
+
+# Specialised rule to add a -D flag.
+cachemgr_nonatomic.o: $(srcdir)/config/spu/cachemgr.c
+ $(gcc_compile) -DNONATOMIC -c $<
+
+libgcc_%.a: %.o
+ $(AR_FOR_TARGET) -rcs $@ $<
+
+cache8k.o: $(srcdir)/config/spu/cache.S
+ $(gcc_compile) -D__CACHE_SIZE__=8 -c $<
+
+cache16k.o: $(srcdir)/config/spu/cache.S
+ $(gcc_compile) -D__CACHE_SIZE__=16 -c $<
+
+cache32k.o: $(srcdir)/config/spu/cache.S
+ $(gcc_compile) -D__CACHE_SIZE__=32 -c $<
+
+cache64k.o: $(srcdir)/config/spu/cache.S
+ $(gcc_compile) -D__CACHE_SIZE__=64 -c $<
+
+cache128k.o: $(srcdir)/config/spu/cache.S
+ $(gcc_compile) -D__CACHE_SIZE__=128 -c $<
+
+# We provide our own version of __divdf3 that performs better and has
+# better support for non-default rounding modes.
+DPBIT_FUNCS := $(filter-out _div_df, $(DPBIT_FUNCS))
diff --git a/gcc-4.9/libgcc/config/stormy16/ashlsi3.c b/gcc-4.9/libgcc/config/stormy16/ashlsi3.c
new file mode 100644
index 000000000..0ef42ad66
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/ashlsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_ASHLSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/ashrsi3.c b/gcc-4.9/libgcc/config/stormy16/ashrsi3.c
new file mode 100644
index 000000000..67bcbbbe0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/ashrsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_ASHRSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/clrsbhi2.c b/gcc-4.9/libgcc/config/stormy16/clrsbhi2.c
new file mode 100644
index 000000000..3ce41aca0
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/clrsbhi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_CLRSBHI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/clzhi2.c b/gcc-4.9/libgcc/config/stormy16/clzhi2.c
new file mode 100644
index 000000000..350ef41da
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/clzhi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_CLZHI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/cmpsi2.c b/gcc-4.9/libgcc/config/stormy16/cmpsi2.c
new file mode 100644
index 000000000..fe32fda95
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/cmpsi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_CMPSI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/ctzhi2.c b/gcc-4.9/libgcc/config/stormy16/ctzhi2.c
new file mode 100644
index 000000000..98ab76dcd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/ctzhi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_CTZHI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/divsi3.c b/gcc-4.9/libgcc/config/stormy16/divsi3.c
new file mode 100644
index 000000000..0fa75342f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/divsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_DIVSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/ffshi2.c b/gcc-4.9/libgcc/config/stormy16/ffshi2.c
new file mode 100644
index 000000000..a36dec87e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/ffshi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_FFSHI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/lib2funcs.c b/gcc-4.9/libgcc/config/stormy16/lib2funcs.c
new file mode 100644
index 000000000..7705aa167
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/lib2funcs.c
@@ -0,0 +1,374 @@
+/* This file contains 16-bit versions of some of the functions found in
+ libgcc2.c. Really libgcc ought to be moved out of the gcc directory
+ and into its own top level directory, and then split up into multiple
+ files. On this glorious day maybe this code can be integrated into
+ it too. */
+
+/* Copyright (C) 2005-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+
+#ifdef HAVE_GAS_HIDDEN
+#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden")))
+#else
+#define ATTRIBUTE_HIDDEN
+#endif
+
+#ifndef MIN_UNITS_PER_WORD
+#define MIN_UNITS_PER_WORD UNITS_PER_WORD
+#endif
+
+#ifndef LIBGCC2_UNITS_PER_WORD
+# if MIN_UNITS_PER_WORD > 4
+# define LIBGCC2_UNITS_PER_WORD 8
+# elif (MIN_UNITS_PER_WORD > 2 \
+ || (MIN_UNITS_PER_WORD > 1 && LONG_LONG_TYPE_SIZE > 32))
+# define LIBGCC2_UNITS_PER_WORD 4
+# else
+# define LIBGCC2_UNITS_PER_WORD MIN_UNITS_PER_WORD
+# endif
+#endif
+
+#define word_type Wtype
+
+#include "libgcc2.h"
+#undef int
+
+/* These prototypes would normally live in libgcc2.h, but this can
+ only happen once the code below is integrated into libgcc2.c. */
+
+extern USItype udivmodsi4 (USItype, USItype, word_type);
+extern SItype __divsi3 (SItype, SItype);
+extern SItype __modsi3 (SItype, SItype);
+extern SItype __udivsi3 (SItype, SItype);
+extern SItype __umodsi3 (SItype, SItype);
+extern SItype __ashlsi3 (SItype, SItype);
+extern SItype __ashrsi3 (SItype, SItype);
+extern USItype __lshrsi3 (USItype, USItype);
+extern int __popcounthi2 (UHWtype);
+extern int __parityhi2 (UHWtype);
+extern int __clzhi2 (UHWtype);
+extern int __ctzhi2 (UHWtype);
+
+
+#ifdef XSTORMY16_UDIVMODSI4
+USItype
+udivmodsi4 (USItype num, USItype den, word_type modwanted)
+{
+ USItype bit = 1;
+ USItype res = 0;
+
+ while (den < num && bit && !(den & (1L << 31)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+
+ if (modwanted)
+ return num;
+ return res;
+}
+#endif
+
+#ifdef XSTORMY16_DIVSI3
+SItype
+__divsi3 (SItype a, SItype b)
+{
+ word_type neg = 0;
+ SItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = !neg;
+ }
+
+ if (b < 0)
+ {
+ b = -b;
+ neg = !neg;
+ }
+
+ res = udivmodsi4 (a, b, 0);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+#endif
+
+#ifdef XSTORMY16_MODSI3
+SItype
+__modsi3 (SItype a, SItype b)
+{
+ word_type neg = 0;
+ SItype res;
+
+ if (a < 0)
+ {
+ a = -a;
+ neg = 1;
+ }
+
+ if (b < 0)
+ b = -b;
+
+ res = udivmodsi4 (a, b, 1);
+
+ if (neg)
+ res = -res;
+
+ return res;
+}
+#endif
+
+#ifdef XSTORMY16_UDIVSI3
+SItype
+__udivsi3 (SItype a, SItype b)
+{
+ return udivmodsi4 (a, b, 0);
+}
+#endif
+
+#ifdef XSTORMY16_UMODSI3
+SItype
+__umodsi3 (SItype a, SItype b)
+{
+ return udivmodsi4 (a, b, 1);
+}
+#endif
+
+#ifdef XSTORMY16_ASHLSI3
+SItype
+__ashlsi3 (SItype a, SItype b)
+{
+ word_type i;
+
+ if (b & 16)
+ a <<= 16;
+ if (b & 8)
+ a <<= 8;
+ for (i = (b & 0x7); i > 0; --i)
+ a <<= 1;
+ return a;
+}
+#endif
+
+#ifdef XSTORMY16_ASHRSI3
+SItype
+__ashrsi3 (SItype a, SItype b)
+{
+ word_type i;
+
+ if (b & 16)
+ a >>= 16;
+ if (b & 8)
+ a >>= 8;
+ for (i = (b & 0x7); i > 0; --i)
+ a >>= 1;
+ return a;
+}
+#endif
+
+#ifdef XSTORMY16_LSHRSI3
+USItype
+__lshrsi3 (USItype a, USItype b)
+{
+ word_type i;
+
+ if (b & 16)
+ a >>= 16;
+ if (b & 8)
+ a >>= 8;
+ for (i = (b & 0x7); i > 0; --i)
+ a >>= 1;
+ return a;
+}
+#endif
+
+#ifdef XSTORMY16_POPCOUNTHI2
+/* Returns the number of set bits in X.
+ FIXME: The return type really should be "unsigned int"
+ but this is not how the builtin is prototyped. */
+int
+__popcounthi2 (UHWtype x)
+{
+ int ret;
+
+ ret = __popcount_tab [x & 0xff];
+ ret += __popcount_tab [(x >> 8) & 0xff];
+
+ return ret;
+}
+#endif
+
+#ifdef XSTORMY16_PARITYHI2
+/* Returns the number of set bits in X, modulo 2.
+ FIXME: The return type really should be "unsigned int"
+ but this is not how the builtin is prototyped. */
+
+int
+__parityhi2 (UHWtype x)
+{
+ x ^= x >> 8;
+ x ^= x >> 4;
+ x &= 0xf;
+ return (0x6996 >> x) & 1;
+}
+#endif
+
+#ifdef XSTORMY16_CLZHI2
+/* Returns the number of zero-bits from the most significant bit to the
+ first nonzero bit in X. Returns 16 for X == 0. Implemented as a
+ simple for loop in order to save space by removing the need for
+ the __clz_tab array.
+ FIXME: The return type really should be "unsigned int" but this is
+ not how the builtin is prototyped. */
+#undef unsigned
+int
+__clzhi2 (UHWtype x)
+{
+ unsigned int i;
+ unsigned int c;
+ unsigned int value = x;
+
+ for (c = 0, i = 1 << 15; i; i >>= 1, c++)
+ if (i & value)
+ break;
+ return c;
+}
+#endif
+
+#ifdef XSTORMY16_CTZHI2
+/* Returns the number of trailing zero bits in X.
+ FIXME: The return type really should be "signed int" since
+ ctz(0) returns -1, but this is not how the builtin is prototyped. */
+
+int
+__ctzhi2 (UHWtype x)
+{
+ /* This is cunning. It converts X into a number with only the one bit
+ set, the bit that was the least significant bit in X. From this we
+ can use the count_leading_zeros to compute the number of trailing
+ bits. */
+ x &= - x;
+
+ return 15 - __builtin_clz (x);
+}
+#endif
+
+#ifdef XSTORMY16_FFSHI2
+/* Returns one plus the index of the least significant 1-bit of X,
+ or if X is zero, returns zero. FIXME: The return type really
+ should be "unsigned int" but this is not how the builtin is
+ prototyped. */
+
+int
+__ffshi2 (UHWtype u)
+{
+ UHWtype count;
+
+ if (u == 0)
+ return 0;
+
+ return 16 - __builtin_clz (u & - u);
+}
+#endif
+
+#ifdef XSTORMY16_CLRSBHI2
+/* Returns the number of leading redundant sign bits in X.
+ I.e. the number of bits following the most significant bit which are
+ identical to it. There are no special cases for 0 or other values. */
+
+int
+__clrsbhi2 (HWtype x)
+{
+ if (x < 0)
+ x = ~x;
+ if (x == 0)
+ return 15;
+ return __builtin_clz (x) - 1;
+}
+#endif
+
+#ifdef XSTORMY16_UCMPSI2
+/* Performs an unsigned comparison of two 32-bit values: A and B.
+ If A is less than B, then 0 is returned. If A is greater than B,
+ then 2 is returned. Otherwise A and B are equal and 1 is returned. */
+
+word_type
+__ucmpsi2 (USItype a, USItype b)
+{
+ word_type hi_a = (a >> 16);
+ word_type hi_b = (b >> 16);
+
+ if (hi_a == hi_b)
+ {
+ word_type low_a = (a & 0xffff);
+ word_type low_b = (b & 0xffff);
+
+ return low_a < low_b ? 0 : (low_a > low_b ? 2 : 1);
+ }
+
+ return hi_a < hi_b ? 0 : 2;
+}
+#endif
+
+#ifdef XSTORMY16_CMPSI2
+/* Performs an signed comparison of two 32-bit values: A and B.
+ If A is less than B, then 0 is returned. If A is greater than B,
+ then 2 is returned. Otherwise A and B are equal and 1 is returned. */
+
+word_type
+__cmpsi2 (SItype a, SItype b)
+{
+ word_type hi_a = (a >> 16);
+ word_type hi_b = (b >> 16);
+
+ if (hi_a == hi_b)
+ {
+ word_type low_a = (a & 0xffff);
+ word_type low_b = (b & 0xffff);
+
+ return low_a < low_b ? 0 : (low_a > low_b ? 2 : 1);
+ }
+
+ return hi_a < hi_b ? 0 : 2;
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/stormy16/lshrsi3.c b/gcc-4.9/libgcc/config/stormy16/lshrsi3.c
new file mode 100644
index 000000000..13903d3d2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/lshrsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_LSHRSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/modsi3.c b/gcc-4.9/libgcc/config/stormy16/modsi3.c
new file mode 100644
index 000000000..c63e89068
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/modsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_MODSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/parityhi2.c b/gcc-4.9/libgcc/config/stormy16/parityhi2.c
new file mode 100644
index 000000000..4be7fbf3e
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/parityhi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_PARITYHI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/popcounthi2.c b/gcc-4.9/libgcc/config/stormy16/popcounthi2.c
new file mode 100644
index 000000000..30bf0950d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/popcounthi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_POPCOUNTHI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/t-stormy16 b/gcc-4.9/libgcc/config/stormy16/t-stormy16
new file mode 100644
index 000000000..d409c2b3d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/t-stormy16
@@ -0,0 +1,40 @@
+# -*- makefile -*-
+#
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# SImode arithmetic and logical routines, HImode bit counting routines.
+LIB2ADD = \
+ $(srcdir)/config/stormy16/udivmodsi4.c \
+ $(srcdir)/config/stormy16/divsi3.c \
+ $(srcdir)/config/stormy16/modsi3.c \
+ $(srcdir)/config/stormy16/udivsi3.c \
+ $(srcdir)/config/stormy16/umodsi3.c \
+ $(srcdir)/config/stormy16/ashlsi3.c \
+ $(srcdir)/config/stormy16/ashrsi3.c \
+ $(srcdir)/config/stormy16/lshrsi3.c \
+ $(srcdir)/config/stormy16/popcounthi2.c \
+ $(srcdir)/config/stormy16/parityhi2.c \
+ $(srcdir)/config/stormy16/clzhi2.c \
+ $(srcdir)/config/stormy16/ctzhi2.c \
+ $(srcdir)/config/stormy16/ffshi2.c \
+ $(srcdir)/config/stormy16/clrsbhi2.c \
+ $(srcdir)/config/stormy16/cmpsi2.c \
+ $(srcdir)/config/stormy16/ucmpsi2.c
+
+HOST_LIBGCC2_CFLAGS += -O2
diff --git a/gcc-4.9/libgcc/config/stormy16/ucmpsi2.c b/gcc-4.9/libgcc/config/stormy16/ucmpsi2.c
new file mode 100644
index 000000000..ee327b1da
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/ucmpsi2.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_UCMPSI2
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/udivmodsi4.c b/gcc-4.9/libgcc/config/stormy16/udivmodsi4.c
new file mode 100644
index 000000000..5fdd0f918
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/udivmodsi4.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_UDIVMODSI4
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/udivsi3.c b/gcc-4.9/libgcc/config/stormy16/udivsi3.c
new file mode 100644
index 000000000..ad12bd86a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/udivsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_UDIVSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/stormy16/umodsi3.c b/gcc-4.9/libgcc/config/stormy16/umodsi3.c
new file mode 100644
index 000000000..eeec67f56
--- /dev/null
+++ b/gcc-4.9/libgcc/config/stormy16/umodsi3.c
@@ -0,0 +1,2 @@
+#define XSTORMY16_UMODSI3
+#include "lib2funcs.c"
diff --git a/gcc-4.9/libgcc/config/t-crtfm b/gcc-4.9/libgcc/config/t-crtfm
new file mode 100644
index 000000000..61e62696b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-crtfm
@@ -0,0 +1,2 @@
+crtfastmath.o: $(srcdir)/config/$(cpu_type)/crtfastmath.c
+ $(gcc_compile) -c $<
diff --git a/gcc-4.9/libgcc/config/t-crtstuff-pic b/gcc-4.9/libgcc/config/t-crtstuff-pic
new file mode 100644
index 000000000..4cda4c9bf
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-crtstuff-pic
@@ -0,0 +1,2 @@
+# Compile crtbeginS.o and crtendS.o with pic.
+CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) $(PICFLAG)
diff --git a/gcc-4.9/libgcc/config/t-darwin b/gcc-4.9/libgcc/config/t-darwin
new file mode 100644
index 000000000..a69169fa6
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-darwin
@@ -0,0 +1,18 @@
+crt3.o: $(srcdir)/config/darwin-crt3.c
+ $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $<
+
+crttms.o: $(srcdir)/config/darwin-crt-tm.c
+ $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -DSTART -c $<
+
+crttme.o: $(srcdir)/config/darwin-crt-tm.c
+ $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -DEND -c $<
+
+# -pipe because there's an assembler bug, 4077127, which causes
+# it to not properly process the first # directive, causing temporary
+# file names to appear in stabs, causing the bootstrap to fail. Using -pipe
+# works around this by not having any temporary file names.
+HOST_LIBGCC2_CFLAGS += -pipe
+
+# Use unwind-dw2-fde-darwin
+LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/config/unwind-dw2-fde-darwin.c \
+ $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/gcc-4.9/libgcc/config/t-dfprules b/gcc-4.9/libgcc/config/t-dfprules
new file mode 100644
index 000000000..6bf6246d8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-dfprules
@@ -0,0 +1,10 @@
+# Use DFP_ENABLE to build decimal floating point support routines for
+# all decimal floating point types (32-bit, 64-bit and 128-bit). We
+# use `true' for clarity, but any value will do.
+#
+DFP_ENABLE = true
+
+# DFP_CFLAGS can be used to pass target-specific CFLAGS when compiling
+# dfp-bit.c. This is useful for overriding the definition of macros.
+#
+# DFP_CFLAGS = -DFOO=bar
diff --git a/gcc-4.9/libgcc/config/t-eh-dw2-dip b/gcc-4.9/libgcc/config/t-eh-dw2-dip
new file mode 100644
index 000000000..88fa103c4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-eh-dw2-dip
@@ -0,0 +1,3 @@
+# Use unwind-dw2-fde-dip.
+LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-dip.c \
+ $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/gcc-4.9/libgcc/config/t-fdpbit b/gcc-4.9/libgcc/config/t-fdpbit
new file mode 100644
index 000000000..0e7119ade
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-fdpbit
@@ -0,0 +1,2 @@
+FPBIT = true
+DPBIT = true
diff --git a/gcc-4.9/libgcc/config/t-fixedpoint-gnu-prefix b/gcc-4.9/libgcc/config/t-fixedpoint-gnu-prefix
new file mode 100644
index 000000000..f9d663388
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-fixedpoint-gnu-prefix
@@ -0,0 +1 @@
+LIBGCC_VER_FIXEDPOINT_GNU_PREFIX = __gnu_
diff --git a/gcc-4.9/libgcc/config/t-fpbit b/gcc-4.9/libgcc/config/t-fpbit
new file mode 100644
index 000000000..e56e34d91
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-fpbit
@@ -0,0 +1,2 @@
+FPBIT = true
+FPBIT_CFLAGS = -DFLOAT_ONLY -DSMALL_MACHINE
diff --git a/gcc-4.9/libgcc/config/t-freebsd-thread b/gcc-4.9/libgcc/config/t-freebsd-thread
new file mode 100644
index 000000000..2948dc1a4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-freebsd-thread
@@ -0,0 +1,2 @@
+# This is currently needed to compile libgcc2 for threads support
+HOST_LIBGCC2_CFLAGS += -pthread
diff --git a/gcc-4.9/libgcc/config/t-gnu-prefix b/gcc-4.9/libgcc/config/t-gnu-prefix
new file mode 100644
index 000000000..8f3db4087
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-gnu-prefix
@@ -0,0 +1,2 @@
+LIBGCC_VER_GNU_PREFIX = __gnu_
+LIBGCC_VER_FIXEDPOINT_GNU_PREFIX = __gnu_
diff --git a/gcc-4.9/libgcc/config/t-hardfp b/gcc-4.9/libgcc/config/t-hardfp
new file mode 100644
index 000000000..fe02f8e3d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-hardfp
@@ -0,0 +1,81 @@
+# Copyright (C) 2014 Free Software Foundation, Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# For historical reasons, some targets provide a full set of FP routines
+# even if there is native hardware support for some of them. This file
+# is used to define functions that can be implemented directly in hardware.
+# For example, an __adddf3 defined by this file will use an FPU addition.
+#
+# The following variables should be set up before including this file:
+#
+# hardfp_float_modes: a list of hardware floating-point modes.
+# e.g. sf df
+# hardfp_int_modes: a list of integer modes for which to define conversions;
+# usually this is "si", since libgcc2.c provides routines
+# for wider modes
+# hardfp_extensions: a list of extensions between hardware floating-point modes,
+# e.g. sfdf
+# hardfp_truncations: a list of truncations between hardware floating-point
+# modes, e.g. dfsf
+
+# Functions parameterized by a floating-point mode M.
+hardfp_func_bases := addM3 subM3 negM2 mulM3 divM3
+hardfp_func_bases += eqM2 neM2 geM2 gtM2 leM2 ltM2 unordM2
+
+# Functions parameterized by both a floating-point mode M and an integer mode N.
+hardfp_int_func_bases := fixMN floatNM floatunNM
+hardfp_func_bases += $(foreach n, $(hardfp_int_modes), \
+ $(subst N,$(n),$(hardfp_int_func_bases)))
+
+# Get the full list of functions.
+hardfp_func_list := $(foreach m, $(hardfp_float_modes), \
+ $(subst M,$(m),$(hardfp_func_bases)))
+hardfp_func_list += $(foreach pair, $(hardfp_extensions), \
+ $(subst M,$(pair),extendM2))
+hardfp_func_list += $(foreach pair, $(hardfp_truncations), \
+ $(subst M,$(pair),truncM2))
+
+# Regexp for matching a floating-point mode.
+hardfp_mode_regexp := $(shell echo $(hardfp_float_modes) | sed 's/ /\\|/g')
+
+# Regexp for matching the end of a function name, after the last
+# floating-point mode.
+hardfp_suffix_regexp := $(shell echo $(hardfp_int_modes) 2 3 | sed 's/ /\\|/g')
+
+# Add -D options to define:
+# FUNC: the function name (e.g. __addsf3)
+# OP: the function name without the leading __ and with the last
+# floating-point mode removed (e.g. add3)
+# TYPE: the last floating-point mode (e.g. sf)
+hardfp_defines_for = \
+ $(shell echo $1 | \
+ sed 's/\(.*\)\($(hardfp_mode_regexp)\)\($(hardfp_suffix_regexp)\|\)$$/-DFUNC=__& -DOP_\1\3 -DTYPE=\2/')
+
+hardfp-o = $(patsubst %,%$(objext),$(hardfp_func_list))
+$(hardfp-o): %$(objext): $(srcdir)/config/hardfp.c
+ @echo "Mode = $(hardfp_mode_regexp)"
+ @echo "Suffix = $(hardfp_suffix_regexp)"
+ $(gcc_compile) $(call hardfp_defines_for, $*) -c $< $(vis_hide) -Wno-missing-prototypes
+libgcc-objects += $(hardfp-o)
+
+ifeq ($(enable_shared),yes)
+hardfp-s-o = $(patsubst %,%_s$(objext),$(hardfp_func_list))
+$(hardfp-s-o): %_s$(objext): $(srcdir)/config/hardfp.c
+ $(gcc_s_compile) $(call hardfp_defines_for, $*) -c $< -Wno-missing-prototypes
+libgcc-s-objects += $(hardfp-s-o)
+endif
diff --git a/gcc-4.9/libgcc/config/t-hardfp-sfdf b/gcc-4.9/libgcc/config/t-hardfp-sfdf
new file mode 100644
index 000000000..5d39b7892
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-hardfp-sfdf
@@ -0,0 +1,23 @@
+# Copyright (C) 2014 Free Software Foundation, Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+hardfp_float_modes := sf df
+# di and ti are provided by libgcc2.c where needed.
+hardfp_int_modes := si
+hardfp_extensions := sfdf
+hardfp_truncations := dfsf
diff --git a/gcc-4.9/libgcc/config/t-libgcc-pic b/gcc-4.9/libgcc/config/t-libgcc-pic
new file mode 100644
index 000000000..0eea16ebc
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-libgcc-pic
@@ -0,0 +1,2 @@
+# Compile libgcc2.a with pic.
+HOST_LIBGCC2_CFLAGS += $(PICFLAG)
diff --git a/gcc-4.9/libgcc/config/t-libunwind b/gcc-4.9/libgcc/config/t-libunwind
new file mode 100644
index 000000000..5244928da
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-libunwind
@@ -0,0 +1,12 @@
+# Use the system libunwind library.
+
+HOST_LIBGCC2_CFLAGS += -DUSE_GAS_SYMVER
+
+LIB2ADDEH = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c \
+ $(srcdir)/unwind-compat.c $(srcdir)/unwind-dw2-fde-compat.c
+LIB2ADDEHSTATIC = $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
+
+# Override the default value from t-slibgcc-elf-ver and mention -lunwind
+# so that the resulting libgcc_s.so has the necessary DT_NEEDED entry for
+# libunwind.
+SHLIB_LC = -lunwind -lc
diff --git a/gcc-4.9/libgcc/config/t-libunwind-elf b/gcc-4.9/libgcc/config/t-libunwind-elf
new file mode 100644
index 000000000..beacf0438
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-libunwind-elf
@@ -0,0 +1,51 @@
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Build libunwind for ELF with the GNU linker.
+
+SHLIB_SOLINK = @shlib_base_name@.so
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+
+# Use unwind-dw2-fde-dip
+LIBUNWIND = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-dip.c
+
+SHLIBUNWIND_SOVERSION = 7
+SHLIBUNWIND_SONAME = @shlib_base_name@.so.$(SHLIBUNWIND_SOVERSION)
+
+SHLIBUNWIND_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared \
+ -nodefaultlibs -Wl,-h,$(SHLIBUNWIND_SONAME) \
+ -Wl,-z,text -Wl,-z,defs -o $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME).tmp \
+ @multilib_flags@ $(SHLIB_OBJS) -lc && \
+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
+ if [ -f $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME) ]; then \
+ mv -f $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME) \
+ $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME).backup; \
+ else true; fi && \
+ mv $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME).tmp \
+ $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME) && \
+ $(LN_S) $(SHLIBUNWIND_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
+
+SHLIBUNWIND_INSTALL = \
+ $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIBUNWIND_SONAME) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIBUNWIND_SONAME); \
+ rm -f $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
+ $(LN_S) $(SHLIBUNWIND_SONAME) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
diff --git a/gcc-4.9/libgcc/config/t-linux b/gcc-4.9/libgcc/config/t-linux
new file mode 100644
index 000000000..d1bdac4f3
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-linux
@@ -0,0 +1,3 @@
+# Override t-slibgcc-elf-ver to export some libgcc symbols with
+# the symbol versions that glibc used.
+SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/t-openbsd-thread b/gcc-4.9/libgcc/config/t-openbsd-thread
new file mode 100644
index 000000000..50b61e586
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-openbsd-thread
@@ -0,0 +1,3 @@
+# This is currently needed to compile libgcc2 for threads support
+HOST_LIBGCC2_CFLAGS += -pthread
+
diff --git a/gcc-4.9/libgcc/config/t-rtems b/gcc-4.9/libgcc/config/t-rtems
new file mode 100644
index 000000000..85f1da90d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-rtems
@@ -0,0 +1,4 @@
+# If we are building next to newlib, this will let us find the RTEMS
+# limits.h when building libgcc2. Otherwise, newlib must be installed
+# first.
+LIBGCC2_INCLUDES = -I$(srcdir)/../newlib/libc/sys/rtems/include
diff --git a/gcc-4.9/libgcc/config/t-slibgcc b/gcc-4.9/libgcc/config/t-slibgcc
new file mode 100644
index 000000000..1696fe865
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc
@@ -0,0 +1,53 @@
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Build a shared libgcc library.
+
+SHLIB_EXT = .so
+SHLIB_SOLINK = @shlib_base_name@.so
+SHLIB_SOVERSION = 1
+SHLIB_SONAME = @shlib_base_name@.so.$(SHLIB_SOVERSION)
+SHLIB_MAP = @shlib_map_file@
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@
+SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
+SHLIB_LC = -lc
+SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
+SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
+
+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+ $(SHLIB_LDFLAGS) \
+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
+ $(SHLIB_OBJS) $(SHLIB_LC) && \
+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
+ else true; fi && \
+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
+ $(SHLIB_MAKE_SOLINK)
+
+INSTALL_SHLIB = $(INSTALL_DATA)
+
+SHLIB_INSTALL = \
+ $(mkinstalldirs) $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
+ $(INSTALL_SHLIB) $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \
+ rm -f $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
+ $(SHLIB_INSTALL_SOLINK)
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-darwin b/gcc-4.9/libgcc/config/t-slibgcc-darwin
new file mode 100644
index 000000000..9970d0034
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-darwin
@@ -0,0 +1,134 @@
+# Build a shared libgcc library with the darwin linker.
+SHLIB_SOVERSION = 1
+SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
+SHLIB_EXT = .dylib
+SHLIB_INSTALL_NAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
+SHLIB_SONAME = @shlib_base_name@$(SHLIB_EXT)
+SHLIB_SOLINK = @shlib_base_name@.so
+SHLIB_MAP = @shlib_map_file@
+SHLIB_OBJS = @shlib_objs@
+SHLIB_DIR = @multilib_dir@
+SHLIB_LC = -lc
+
+# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
+# so the libgcc variants have different names not different locations.
+# Note that this version is used for the loader, not the linker; the linker
+# uses the stub versions named by the versioned members of $(INSTALL_FILES).
+
+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
+ -install_name @shlib_slibdir@/$(SHLIB_INSTALL_NAME) \
+ -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME) \
+ -Wl,-exported_symbols_list,$(SHLIB_MAP) \
+ $(SHLIB_VERSTRING) \
+ @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
+
+SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+SHLIB_MKMAP_OPTS = -v leading_underscore=1
+SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/libgcc-libsystem.ver
+SHLIB_VERPFX = $(srcdir)/config/$(cpu_type)/libgcc-darwin
+
+# we're only going to build the stubs if the target slib is /usr/lib
+# there is no other case in which they're useful in a live system.
+ifeq (/usr/lib,$(shlib_slibdir))
+LGCC_STUBS = libgcc_s.10.4.dylib libgcc_s.10.5.dylib
+else
+LGCC_STUBS =
+endif
+
+LGCC_FILES = libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)
+LGCC_FILES += $(LGCC_STUBS)
+LEXT_STUBS = libgcc_ext.10.4$(SHLIB_EXT) libgcc_ext.10.5$(SHLIB_EXT)
+LGCC_FILES += $(LEXT_STUBS)
+INSTALL_FILES=$(LGCC_FILES)
+
+# we do our own thing
+SHLIB_INSTALL =
+
+# For the toplevel multilib, build a fat archive including all the multilibs.
+ifeq ($(MULTIBUILDTOP),)
+
+ifeq ($(enable_shared),yes)
+all: $(INSTALL_FILES)
+install-leaf: install-darwin-libgcc-stubs
+endif
+
+# In order to support -mmacosx-version-min, you need to have multiple
+# different libgcc_s libraries that actually get linked against, one for
+# each system version supported. They are 'stub' libraries that
+# contain no code, just a list of exported symbols.
+# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
+#
+# This assumes each multilib corresponds to a different architecture.
+libgcc_s.%.dylib : all-multi $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT)
+ MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
+ for mlib in $$MLIBS ; do \
+ $(STRIP) -o $(@)_T$${mlib} \
+ -s $(SHLIB_VERPFX).$(*).ver -c -u \
+ ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) || exit 1 ; \
+ done
+ $(LIPO) -output $@ -create $(@)_T*
+ rm $(@)_T*
+
+libgcc_ext.%.dylib : all-multi $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT)
+ MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
+ for mlib in $$MLIBS ; do \
+ $(STRIP) -o $(@)_T$${mlib} \
+ -R $(SHLIB_VERPFX).$(*).ver -c -urx \
+ ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) || exit 1 ; \
+ done
+ $(LIPO) -output $@ -create $(@)_T*
+ rm $(@)_T*
+
+libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT)
+ MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
+ for mlib in $$MLIBS ; do \
+ cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
+ ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
+ done
+ $(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
+ -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
+ rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
+
+install-darwin-libgcc-stubs :
+ $(mkinstalldirs) $(DESTDIR)$(slibdir)
+ for d in $(INSTALL_FILES) ; do \
+ $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
+ done
+ if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
+ rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
+ else true; fi
+ $(LN_S) libgcc_s.1.dylib \
+ $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
+ if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
+ rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
+ else true; fi
+ $(LN_S) libgcc_s.1.dylib \
+ $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
+
+else
+
+# Do not install shared libraries for any other multilibs. Unless
+# we're putting them in the gcc directory during a build, for
+# compatibility with the pre-top-level layout. In that case we
+# need symlinks.
+
+ifeq ($(enable_shared),yes)
+all: install-darwin-libgcc-links
+endif
+
+install-darwin-libgcc-links:
+ $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
+ for file in $(INSTALL_FILES); do \
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
+ $(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/; \
+ done
+
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
+ $(LN_S) libgcc_s.1.dylib \
+ $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
+
+ rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
+ $(LN_S) libgcc_s.1.dylib \
+ $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
+
+endif
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-elf-ver b/gcc-4.9/libgcc/config/t-slibgcc-elf-ver
new file mode 100644
index 000000000..4a00edc96
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-elf-ver
@@ -0,0 +1,4 @@
+# Build a shared libgcc library for ELF with symbol versioning.
+
+SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
+SHLIB_MAPFILES = libgcc-std.ver
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-gld b/gcc-4.9/libgcc/config/t-slibgcc-gld
new file mode 100644
index 000000000..7e77e0a0b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-gld
@@ -0,0 +1,5 @@
+# Build a shared libgcc library for ELF with symbol versioning
+# with the GNU linker.
+
+SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
+ -Wl,--version-script=$(SHLIB_MAP)
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-gld-nover b/gcc-4.9/libgcc/config/t-slibgcc-gld-nover
new file mode 100644
index 000000000..e9b78ea94
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-gld-nover
@@ -0,0 +1,3 @@
+# Build a shared libgcc library for ELF with the GNU linker.
+
+SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME)
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-hpux b/gcc-4.9/libgcc/config/t-slibgcc-hpux
new file mode 100644
index 000000000..b71e3c35c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-hpux
@@ -0,0 +1,8 @@
+# Build a shared libgcc library with the HP-UX linker.
+
+SHLIB_LDFLAGS = -Wl,+h,$(SHLIB_SONAME)
+
+INSTALL_SHLIB = $(INSTALL_DATA) -m 555
+
+SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
+SHLIB_MAPFILES = libgcc-std.ver
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-libgcc b/gcc-4.9/libgcc/config/t-slibgcc-libgcc
new file mode 100644
index 000000000..e747ec65f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-libgcc
@@ -0,0 +1,32 @@
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Instead of creating $(SHLIB_SOLINK) symlink create a GNU ld
+# linker script which sources in both $(SHLIB_SONAME) and libgcc.a.
+# This is needed on targets where libgcc.a contains routines that aren't in
+# $(SHLIB_SONAME) and are needed for shared libraries.
+
+SHLIB_MAKE_SOLINK = \
+ (echo "/* GNU ld script"; \
+ echo " Use the shared library, but some functions are only in"; \
+ echo " the static library. */"; \
+ echo "GROUP ( $(SHLIB_SONAME) -lgcc )" \
+ ) > $(SHLIB_DIR)/$(SHLIB_SOLINK)
+SHLIB_INSTALL_SOLINK = \
+ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SOLINK) \
+ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-nolc-override b/gcc-4.9/libgcc/config/t-slibgcc-nolc-override
new file mode 100644
index 000000000..959d2cc2a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-nolc-override
@@ -0,0 +1 @@
+SHLIB_LC =
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-sld b/gcc-4.9/libgcc/config/t-slibgcc-sld
new file mode 100644
index 000000000..ec6e5db0a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-sld
@@ -0,0 +1,28 @@
+# Build a shared libgcc library for ELF with symbol versioning
+# with the Solaris linker.
+
+SHLIB_LDFLAGS = -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
+ -Wl,-M,$(SHLIB_MAP)
+
+# Linker mapfile to enforce direct binding to libgcc_s unwinder
+# (PR target/59788).
+libgcc-unwind.map: libgcc-std.ver
+ @(echo "{"; \
+ for f in `grep _Unwind_ $< | sort`; do \
+ echo " $$f = EXTERN DIRECT;"; \
+ done; \
+ echo "};" ) > $@
+
+# Copy libgcc-unwind.map to the place where gcc will look for it at build-time.
+install-libgcc-unwind-map-forbuild: libgcc-unwind.map
+ dest=$(gcc_objdir)/tmp$$$$-$<; \
+ cp $< $$dest; \
+ chmod a+r $$dest; \
+ sh $(srcdir)/../move-if-change $$dest $(gcc_objdir)/$<
+
+all: install-libgcc-unwind-map-forbuild
+
+install-libgcc-unwind-map: libgcc-unwind.map
+ $(INSTALL_DATA) $< $(DESTDIR)$(slibdir)
+
+install: install-libgcc-unwind-map
diff --git a/gcc-4.9/libgcc/config/t-slibgcc-vms b/gcc-4.9/libgcc/config/t-slibgcc-vms
new file mode 100644
index 000000000..d01c34341
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-slibgcc-vms
@@ -0,0 +1,28 @@
+shlib_version:=$(shell $(CC) --version 2>&1 | \
+ sed -n 's/^.*(GCC).* \([0-9]*\.[0-9.]*\).*$/\1/p' | \
+ sed -e 's/\./,/' -e 's/\.//g')
+SHLIB_EXT = .exe
+SHLIB_OBJS = @shlib_objs@
+SHLIB_NAME = @shlib_base_name@.exe
+SHLIB_MULTILIB =
+SHLIB_INSTALL = $(INSTALL_DATA) $(SHLIB_NAME) $(DESTDIR)$(libsubdir)/$(SHLIB_NAME)
+SHLIB_SYMVEC = \
+ grep -F -e "\$$BSS\$$" -e "\$$DATA\$$" -e " sdata " -e " data.rel " -e " data.rel.ro " -e " sbss " \
+ -e "\$$LINK\$$" -e "\$$READONLY\$$" | \
+ sed -e "s/.*\$$LINK\$$ \(.*\)/SYMBOL_VECTOR=(\1=PROCEDURE)/" \
+ -e "s/.*\$$DATA\$$ \(.*\)/SYMBOL_VECTOR=(\1=DATA)/" \
+ -e "s/.* sbss \(.*\)/SYMBOL_VECTOR=(\1=DATA)/" \
+ -e "s/.* sdata \(.*\)/SYMBOL_VECTOR=(\1=DATA)/" \
+ -e "s/.* data.rel \(.*\)/SYMBOL_VECTOR=(\1=DATA)/" \
+ -e "s/.* data.rel.ro \(.*\)/SYMBOL_VECTOR=(\1=DATA)/" \
+ -e "s/.*\$$BSS\$$ \(.*\)/SYMBOL_VECTOR=(\1=DATA)/" \
+ -e "s/.*\$$READONLY\$$ \(.*\)/SYMBOL_VECTOR=(\1=DATA)/"
+SHLIB_LINK = \
+ echo "case_sensitive=yes" > SYMVEC_$$$$.opt; \
+ objdump --syms $(SHLIB_OBJS) | \
+ $(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt ; \
+ echo "case_sensitive=NO" >> SYMVEC_$$$$.opt; \
+ $(CC) $(LIBGCC2_CFLAGS) -nodefaultlibs \
+ -shared --for-linker=/noinform -o $(SHLIB_NAME) $(SHLIB_OBJS) \
+ --for-linker=SYMVEC_$$$$.opt \
+ --for-linker=gsmatch=equal,$(shlib_version)
diff --git a/gcc-4.9/libgcc/config/t-softfp b/gcc-4.9/libgcc/config/t-softfp
new file mode 100644
index 000000000..456fdce0b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-softfp
@@ -0,0 +1,111 @@
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+
+# This file is part of GCC.
+
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Targets using soft-fp should define the following variables:
+#
+# softfp_float_modes: a list of soft-float floating-point modes,
+# e.g. sf df
+# softfp_int_modes: a list of integer modes for which to define conversions,
+# e.g. si di
+# softfp_extensions: a list of extensions between floating-point modes,
+# e.g. sfdf
+# softfp_truncations: a list of truncations between floating-point modes,
+# e.g. dfsf
+#
+# Extensions and truncations should include those where only one mode
+# is a soft-float mode; for example, sftf where sf is hard-float and
+# tf is soft-float.
+#
+# If the libgcc2.c functions should not be replaced, also define:
+#
+# softfp_exclude_libgcc2 := y
+#
+# Avoiding replacing the libgcc2.c functions is a temporary measure
+# for targets with both hard-float and soft-float multilibs, since
+# these variables apply for all multilibs. With toplevel libgcc,
+# soft-fp can be used conditionally on the multilib instead.
+#
+# If the code should not be compiled at all for some multilibs, define:
+#
+# softfp_wrap_start: text to put at the start of wrapper source files,
+# output with echo
+# e.g. '#ifndef __powerpc64__'
+# softfp_wrap_end: text to put at the end of wrapper source files,
+# e.g. '#endif'
+#
+# This is another temporary measure.
+
+softfp_float_funcs = add$(m)3 div$(m)3 eq$(m)2 ge$(m)2 le$(m)2 mul$(m)3 \
+ neg$(m)2 sub$(m)3 unord$(m)2
+softfp_floatint_funcs = fix$(m)$(i) fixuns$(m)$(i) \
+ float$(i)$(m) floatun$(i)$(m)
+
+softfp_func_list := \
+ $(foreach m,$(softfp_float_modes), \
+ $(softfp_float_funcs) \
+ $(foreach i,$(softfp_int_modes), \
+ $(softfp_floatint_funcs))) \
+ $(foreach e,$(softfp_extensions),extend$(e)2) \
+ $(foreach t,$(softfp_truncations),trunc$(t)2)
+
+ifeq ($(softfp_exclude_libgcc2),y)
+# This list is taken from mklibgcc.in and doesn't presently allow for
+# 64-bit targets where si should become di and di should become ti.
+softfp_func_list := $(filter-out floatdidf floatdisf fixunsdfsi fixunssfsi \
+ fixunsdfdi fixdfdi fixunssfdi fixsfdi fixxfdi fixunsxfdi \
+ floatdixf fixunsxfsi fixtfdi fixunstfdi floatditf \
+ floatundidf floatundisf floatundixf floatunditf,$(softfp_func_list))
+endif
+
+ifeq ($(softfp_wrap_start),)
+softfp_file_list := \
+ $(addsuffix .c,$(addprefix $(srcdir)/soft-fp/,$(softfp_func_list)))
+else
+softfp_file_list := $(addsuffix .c,$(softfp_func_list))
+
+$(softfp_file_list):
+ echo $(softfp_wrap_start) > $@
+ echo '#include "soft-fp/$@"' >> $@
+ echo $(softfp_wrap_end) >> $@
+endif
+
+# Disable missing prototype and type limit warnings. The prototypes
+# for the functions in the soft-fp files have not been brought across
+# from glibc.
+
+soft-fp-objects-base = $(basename $(notdir $(softfp_file_list)))
+
+soft-fp-objects = $(addsuffix $(objext), $(soft-fp-objects-base)) \
+ $(addsuffix _s$(objext), $(soft-fp-objects-base))
+
+$(soft-fp-objects) : INTERNAL_CFLAGS += -Wno-missing-prototypes -Wno-type-limits
+
+LIB2ADD += $(softfp_file_list)
+
+ifneq ($(softfp_exclude_libgcc2),y)
+# Functions in libgcc2.c are excluded for each soft-float mode (a
+# target may have both soft-float and hard-float modes), for the fixed
+# list of integer modes (si and di) for which libgcc2.c defines any
+# such functions. Depending on the target, the si and di symbols may
+# in fact define di and ti functions.
+
+LIB2FUNCS_EXCLUDE += \
+ $(addprefix _,$(foreach m,$(softfp_float_modes), \
+ $(foreach i,si di, \
+ $(softfp_floatint_funcs))))
+endif
diff --git a/gcc-4.9/libgcc/config/t-softfp-excl b/gcc-4.9/libgcc/config/t-softfp-excl
new file mode 100644
index 000000000..9d9786b6a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-softfp-excl
@@ -0,0 +1 @@
+softfp_exclude_libgcc2 := y
diff --git a/gcc-4.9/libgcc/config/t-softfp-sfdf b/gcc-4.9/libgcc/config/t-softfp-sfdf
new file mode 100644
index 000000000..2fbc63dcd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-softfp-sfdf
@@ -0,0 +1,5 @@
+softfp_float_modes := sf df
+softfp_int_modes := si di
+softfp_extensions := sfdf
+softfp_truncations := dfsf
+softfp_exclude_libgcc2 := n
diff --git a/gcc-4.9/libgcc/config/t-softfp-tf b/gcc-4.9/libgcc/config/t-softfp-tf
new file mode 100644
index 000000000..f567629ad
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-softfp-tf
@@ -0,0 +1,5 @@
+softfp_float_modes := tf
+softfp_int_modes := si di ti
+softfp_extensions := sftf dftf xftf
+softfp_truncations := tfsf tfdf tfxf
+softfp_exclude_libgcc2 := n
diff --git a/gcc-4.9/libgcc/config/t-sol2 b/gcc-4.9/libgcc/config/t-sol2
new file mode 100644
index 000000000..4a5174012
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-sol2
@@ -0,0 +1,27 @@
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# gmon build rule:
+gmon.o: $(srcdir)/config/gmon-sol2.c
+ $(gcc_compile) -c $<
+
+# Assemble startup files.
+crt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S
+ $(crt_compile) -c $<
+gcrt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S
+ $(crt_compile) -c -DGCRT1 $<
diff --git a/gcc-4.9/libgcc/config/t-stack b/gcc-4.9/libgcc/config/t-stack
new file mode 100644
index 000000000..cc0366b4c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-stack
@@ -0,0 +1,4 @@
+# Makefile fragment to provide generic support for -fsplit-stack.
+# This should be used in config.host for any host which supports
+# -fsplit-stack.
+LIB2ADD_ST += $(srcdir)/generic-morestack.c $(srcdir)/generic-morestack-thread.c
diff --git a/gcc-4.9/libgcc/config/t-tls b/gcc-4.9/libgcc/config/t-tls
new file mode 100644
index 000000000..405128f78
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-tls
@@ -0,0 +1,2 @@
+# Use thread-local storage
+INTERNAL_CFLAGS += -DUSE_TLS
diff --git a/gcc-4.9/libgcc/config/t-vxworks b/gcc-4.9/libgcc/config/t-vxworks
new file mode 100644
index 000000000..3647f75d5
--- /dev/null
+++ b/gcc-4.9/libgcc/config/t-vxworks
@@ -0,0 +1,14 @@
+# Don't build libgcc.a with debug info
+LIBGCC2_DEBUG_CFLAGS =
+
+# Extra libgcc2 modules used by gthr-vxworks.h functions
+LIB2ADD = $(srcdir)/config/vxlib.c $(srcdir)/config/vxlib-tls.c
+
+# This ensures that the correct target headers are used; some
+# VxWorks system headers have names that collide with GCC's
+# internal (host) headers, e.g. regs.h.
+LIBGCC2_INCLUDES = -nostdinc -I \
+ `case "/$$(MULTIDIR)" in \
+ */mrtp*) echo $(WIND_USR)/h ;; \
+ *) echo $(WIND_BASE)/target/h ;; \
+ esac`
diff --git a/gcc-4.9/libgcc/config/tilegx/sfp-machine.h b/gcc-4.9/libgcc/config/tilegx/sfp-machine.h
new file mode 100644
index 000000000..1ce84e109
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilegx/sfp-machine.h
@@ -0,0 +1,5 @@
+#ifdef __tilegx32__
+#include "config/tilegx/sfp-machine32.h"
+#else
+#include "config/tilegx/sfp-machine64.h"
+#endif
diff --git a/gcc-4.9/libgcc/config/tilegx/sfp-machine32.h b/gcc-4.9/libgcc/config/tilegx/sfp-machine32.h
new file mode 100644
index 000000000..9fc281cc8
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilegx/sfp-machine32.h
@@ -0,0 +1,68 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
+#define _FP_NANSIGN_S 1
+#define _FP_NANSIGN_D 1
+#define _FP_NANSIGN_Q 1
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined __BIG_ENDIAN__
+#define __BYTE_ORDER __BIG_ENDIAN
+#else
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/gcc-4.9/libgcc/config/tilegx/sfp-machine64.h b/gcc-4.9/libgcc/config/tilegx/sfp-machine64.h
new file mode 100644
index 000000000..5dbbe60c4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilegx/sfp-machine64.h
@@ -0,0 +1,68 @@
+#define _FP_W_TYPE_SIZE 64
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
+#define _FP_NANSIGN_S 1
+#define _FP_NANSIGN_D 1
+#define _FP_NANSIGN_Q 1
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#if defined __BIG_ENDIAN__
+#define __BYTE_ORDER __BIG_ENDIAN
+#else
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/gcc-4.9/libgcc/config/tilegx/t-crtstuff b/gcc-4.9/libgcc/config/tilegx/t-crtstuff
new file mode 100644
index 000000000..870318ceb
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilegx/t-crtstuff
@@ -0,0 +1,8 @@
+# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+# because then __FRAME_END__ might not be the last thing in .eh_frame
+# section.
+CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
+CRTSTUFF_T_CFLAGS_S += -fno-asynchronous-unwind-tables
+
+# Compile crtbeginS.o and crtendS.o with -mcmodel=large
+CRTSTUFF_T_CFLAGS_S += -mcmodel=large
diff --git a/gcc-4.9/libgcc/config/tilegx/t-softfp b/gcc-4.9/libgcc/config/tilegx/t-softfp
new file mode 100644
index 000000000..a1e3513e2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilegx/t-softfp
@@ -0,0 +1 @@
+softfp_int_modes += ti
diff --git a/gcc-4.9/libgcc/config/tilegx/t-tilegx b/gcc-4.9/libgcc/config/tilegx/t-tilegx
new file mode 100644
index 000000000..2fb64454c
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilegx/t-tilegx
@@ -0,0 +1,26 @@
+LIB2ADD += \
+ $(srcdir)/config/tilepro/atomic.c
+
+SOFTDIVIDE_FUNCS := \
+ _tile_udivsi3 \
+ _tile_divsi3 \
+ _tile_udivdi3 \
+ _tile_divdi3 \
+ _tile_umodsi3 \
+ _tile_modsi3 \
+ _tile_umoddi3 \
+ _tile_moddi3
+
+softdivide-o = $(patsubst %,%$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-o): %$(objext): $(srcdir)/config/tilepro/softdivide.c
+ $(gcc_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $< \
+ $(vis_hide)
+libgcc-objects += $(softdivide-o)
+
+ifeq ($(enable_shared),yes)
+softdivide-s-o = $(patsubst %,%_s$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-s-o): %_s$(objext): $(srcdir)/config/tilepro/softdivide.c
+ $(gcc_s_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $<
+libgcc-s-objects += $(softdivide-s-o)
+libgcc-eh-objects += _tile_divdi3.o _tile_umoddi3.o
+endif
diff --git a/gcc-4.9/libgcc/config/tilepro/atomic.c b/gcc-4.9/libgcc/config/tilepro/atomic.c
new file mode 100644
index 000000000..66ef8fd7d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/atomic.c
@@ -0,0 +1,397 @@
+/* TILE atomics.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tconfig.h"
+#include "coretypes.h"
+#include "atomic.h"
+
+#define bool unsigned char
+
+/* This code should be inlined by the compiler, but for now support
+ it as out-of-line methods in libgcc. */
+
+static inline void
+pre_atomic_barrier (int model)
+{
+ switch ((enum memmodel) model)
+ {
+ case MEMMODEL_RELEASE:
+ case MEMMODEL_ACQ_REL:
+ case MEMMODEL_SEQ_CST:
+ __atomic_thread_fence (model);
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+static inline void
+post_atomic_barrier (int model)
+{
+ switch ((enum memmodel) model)
+ {
+ case MEMMODEL_ACQUIRE:
+ case MEMMODEL_ACQ_REL:
+ case MEMMODEL_SEQ_CST:
+ __atomic_thread_fence (model);
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+#define __unused __attribute__((unused))
+
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
+proto \
+{ \
+ top; \
+ type rv = arch_atomic_##opname(p, i); \
+ bottom; \
+ return rv; \
+}
+
+#define __atomic_fetch_and_do(type, size, opname) \
+ __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
+ type, size, opname, \
+ pre_atomic_barrier(model), \
+ post_atomic_barrier(model)) \
+
+__atomic_fetch_and_do (int, 4, add)
+__atomic_fetch_and_do (int, 4, sub)
+__atomic_fetch_and_do (int, 4, or)
+__atomic_fetch_and_do (int, 4, and)
+__atomic_fetch_and_do (int, 4, xor)
+__atomic_fetch_and_do (int, 4, nand)
+__atomic_fetch_and_do (long long, 8, add)
+__atomic_fetch_and_do (long long, 8, sub)
+__atomic_fetch_and_do (long long, 8, or)
+__atomic_fetch_and_do (long long, 8, and)
+__atomic_fetch_and_do (long long, 8, xor)
+__atomic_fetch_and_do (long long, 8, nand)
+
+#define __sync_fetch_and_do(type, size, opname) \
+ __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
+ type, size, opname, \
+ arch_atomic_write_barrier(), \
+ arch_atomic_read_barrier())
+
+__sync_fetch_and_do (int, 4, add)
+__sync_fetch_and_do (int, 4, sub)
+__sync_fetch_and_do (int, 4, or)
+__sync_fetch_and_do (int, 4, and)
+__sync_fetch_and_do (int, 4, xor)
+__sync_fetch_and_do (int, 4, nand)
+__sync_fetch_and_do (long long, 8, add)
+__sync_fetch_and_do (long long, 8, sub)
+__sync_fetch_and_do (long long, 8, or)
+__sync_fetch_and_do (long long, 8, and)
+__sync_fetch_and_do (long long, 8, xor)
+__sync_fetch_and_do (long long, 8, nand)
+
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
+proto \
+{ \
+ top; \
+ type rv = op2 (arch_atomic_##opname(p, i) op i); \
+ bottom; \
+ return rv; \
+}
+
+#define __atomic_do_and_fetch(type, size, opname, op, op2) \
+ __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
+ type, size, opname, op, op2, \
+ pre_atomic_barrier(model), \
+ post_atomic_barrier(model)) \
+
+__atomic_do_and_fetch (int, 4, add, +, )
+__atomic_do_and_fetch (int, 4, sub, -, )
+__atomic_do_and_fetch (int, 4, or, |, )
+__atomic_do_and_fetch (int, 4, and, &, )
+__atomic_do_and_fetch (int, 4, xor, |, )
+__atomic_do_and_fetch (int, 4, nand, &, ~)
+__atomic_do_and_fetch (long long, 8, add, +, )
+__atomic_do_and_fetch (long long, 8, sub, -, )
+__atomic_do_and_fetch (long long, 8, or, |, )
+__atomic_do_and_fetch (long long, 8, and, &, )
+__atomic_do_and_fetch (long long, 8, xor, |, )
+__atomic_do_and_fetch (long long, 8, nand, &, ~)
+
+#define __sync_do_and_fetch(type, size, opname, op, op2) \
+ __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
+ type, size, opname, op, op2, \
+ arch_atomic_write_barrier(), \
+ arch_atomic_read_barrier()) \
+
+__sync_do_and_fetch (int, 4, add, +, )
+__sync_do_and_fetch (int, 4, sub, -, )
+__sync_do_and_fetch (int, 4, or, |, )
+__sync_do_and_fetch (int, 4, and, &, )
+__sync_do_and_fetch (int, 4, xor, |, )
+__sync_do_and_fetch (int, 4, nand, &, ~)
+__sync_do_and_fetch (long long, 8, add, +, )
+__sync_do_and_fetch (long long, 8, sub, -, )
+__sync_do_and_fetch (long long, 8, or, |, )
+__sync_do_and_fetch (long long, 8, and, &, )
+__sync_do_and_fetch (long long, 8, xor, |, )
+__sync_do_and_fetch (long long, 8, nand, &, ~)
+
+#define __atomic_exchange_methods(type, size) \
+bool \
+__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
+ type newval, bool weak __unused, \
+ int models, int modelf __unused) \
+{ \
+ type oldval = *oldvalp; \
+ pre_atomic_barrier(models); \
+ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
+ post_atomic_barrier(models); \
+ bool success = (retval == oldval); \
+ *oldvalp = retval; \
+ return success; \
+} \
+ \
+type \
+__atomic_exchange_##size(volatile type* ptr, type val, int model) \
+{ \
+ pre_atomic_barrier(model); \
+ type retval = arch_atomic_exchange(ptr, val); \
+ post_atomic_barrier(model); \
+ return retval; \
+}
+
+__atomic_exchange_methods (int, 4)
+__atomic_exchange_methods (long long, 8)
+
+#define __sync_exchange_methods(type, size) \
+type \
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
+{ \
+ arch_atomic_write_barrier(); \
+ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
+ arch_atomic_read_barrier(); \
+ return retval; \
+} \
+ \
+bool \
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
+{ \
+ arch_atomic_write_barrier(); \
+ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
+ arch_atomic_read_barrier(); \
+ return retval; \
+} \
+ \
+type \
+__sync_lock_test_and_set_##size(type* ptr, type val) \
+{ \
+ type retval = arch_atomic_exchange(ptr, val); \
+ arch_atomic_acquire_barrier_value(retval); \
+ return retval; \
+}
+
+__sync_exchange_methods (int, 4)
+__sync_exchange_methods (long long, 8)
+
+#ifdef __LITTLE_ENDIAN__
+#define BIT_OFFSET(n, type) ((n) * 8)
+#else
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
+#endif
+
+/* Subword methods require the same approach for both TILEPro and
+ TILE-Gx. We load the background data for the word, insert the
+ desired subword piece, then compare-and-exchange it into place. */
+#define u8 unsigned char
+#define u16 unsigned short
+
+#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
+ ({ \
+ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
+ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
+ const unsigned int bgmask = ~(valmask << shift); \
+ unsigned int oldword = *p; \
+ type oldval = (oldword >> shift) & valmask; \
+ if (__builtin_expect((oldval == guess), 1)) { \
+ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+ oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
+ oldval = (oldword >> shift) & valmask; \
+ } \
+ oldval; \
+ }) \
+
+#define __atomic_subword_cmpxchg(type, size) \
+ \
+bool \
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
+ type val, bool weak __unused, int models, \
+ int modelf __unused) \
+{ \
+ pre_atomic_barrier(models); \
+ type guess = *guess_ptr; \
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
+ post_atomic_barrier(models); \
+ bool success = (oldval == guess); \
+ *guess_ptr = oldval; \
+ return success; \
+}
+
+__atomic_subword_cmpxchg (u8, 1)
+__atomic_subword_cmpxchg (u16, 2)
+
+#define __sync_subword_cmpxchg(type, size) \
+ \
+type \
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
+{ \
+ arch_atomic_write_barrier(); \
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
+ arch_atomic_read_barrier(); \
+ return oldval; \
+} \
+ \
+bool \
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
+{ \
+ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
+ return oldval == guess; \
+}
+
+__sync_subword_cmpxchg (u8, 1)
+__sync_subword_cmpxchg (u16, 2)
+
+/* For the atomic-update subword methods, we use the same approach as
+ above, but we retry until we succeed if the compare-and-exchange
+ fails. */
+#define __subword(type, proto, top, expr, bottom) \
+proto \
+{ \
+ top \
+ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
+ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
+ const unsigned int bgmask = ~(valmask << shift); \
+ unsigned int oldword, xword = *p; \
+ type val, oldval; \
+ do { \
+ oldword = xword; \
+ oldval = (oldword >> shift) & valmask; \
+ val = expr; \
+ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+ xword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
+ } while (__builtin_expect(xword != oldword, 0)); \
+ bottom \
+}
+
+#define __atomic_subword_fetch(type, funcname, expr, retval) \
+ __subword(type, \
+ type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
+ pre_atomic_barrier(model);, \
+ expr, \
+ post_atomic_barrier(model); return retval;)
+
+__atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
+__atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
+__atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
+__atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
+__atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
+__atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
+
+__atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
+__atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
+__atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
+__atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
+__atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
+__atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
+
+__atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
+__atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
+__atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
+__atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
+__atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
+__atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
+
+__atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
+__atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
+__atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
+__atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
+__atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
+__atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
+
+#define __sync_subword_fetch(type, funcname, expr, retval) \
+ __subword(type, \
+ type __sync_ ## funcname(type *ptr, type i), \
+ arch_atomic_read_barrier();, \
+ expr, \
+ arch_atomic_write_barrier(); return retval;)
+
+__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
+__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
+__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
+__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
+__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
+__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
+
+__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
+__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
+__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
+__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
+__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
+__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
+
+__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
+__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
+__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
+__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
+__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
+__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
+
+__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
+__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
+__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
+__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
+__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
+__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
+
+#define __atomic_subword_lock(type, size) \
+ __subword(type, \
+ type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
+ pre_atomic_barrier(model);, \
+ nval, \
+ post_atomic_barrier(model); return oldval;)
+
+__atomic_subword_lock (u8, 1)
+__atomic_subword_lock (u16, 2)
+
+#define __sync_subword_lock(type, size) \
+ __subword(type, \
+ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
+ , \
+ nval, \
+ arch_atomic_acquire_barrier_value(oldval); return oldval;)
+
+__sync_subword_lock (u8, 1)
+__sync_subword_lock (u16, 2)
diff --git a/gcc-4.9/libgcc/config/tilepro/atomic.h b/gcc-4.9/libgcc/config/tilepro/atomic.h
new file mode 100644
index 000000000..404e15ee2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/atomic.h
@@ -0,0 +1,435 @@
+/* Macros for atomic functionality for tile.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+
+/* Provides macros for common atomic functionality. */
+
+#ifndef _ATOMIC_H_
+#define _ATOMIC_H_
+
+#ifdef __tilegx__
+/* Atomic instruction macros
+
+ The macros provided by atomic.h simplify access to the TILE-Gx
+ architecture's atomic instructions. The architecture provides a
+ variety of atomic instructions, including "exchange", "compare and
+ exchange", "fetch and ADD", "fetch and AND", "fetch and OR", and
+ "fetch and ADD if greater than or equal to zero".
+
+ No barrier or fence semantics are implied by any of the atomic
+ instructions for manipulating memory; you must specify the barriers
+ that you wish explicitly, using the provided macros.
+
+ Any integral 32- or 64-bit value can be used as the argument
+ to these macros, such as "int", "long long", "unsigned long", etc.
+ The pointers must be aligned to 4 or 8 bytes for 32- or 64-bit data.
+ The "exchange" and "compare and exchange" macros may also take
+ pointer values. We use the pseudo-type "VAL" in the documentation
+ to indicate the use of an appropriate type. */
+#else
+/* Atomic instruction macros
+
+ The macros provided by atomic.h simplify access to the Tile
+ architecture's atomic instructions. Since the architecture
+ supports test-and-set as its only in-silicon atomic operation, many
+ of the operations provided by this header are implemented as
+ fast-path calls to Linux emulation routines.
+
+ Using the kernel for atomic operations allows userspace to take
+ advantage of the kernel's existing atomic-integer support (managed
+ by a distributed array of locks). The kernel provides proper
+ ordering among simultaneous atomic operations on different cores,
+ and guarantees a process can not be context-switched part way
+ through an atomic operation. By virtue of sharing the kernel
+ atomic implementation, the userspace atomic operations
+ are compatible with the atomic methods provided by the kernel's
+ futex() syscall API. Note that these operations never cause Linux
+ kernel scheduling, and are in fact invisible to the kernel; they
+ simply act as regular function calls but with an elevated privilege
+ level. Note that the kernel's distributed lock array is hashed by
+ using only VA bits from the atomic value's address (to avoid the
+ performance hit of page table locking and multiple page-table
+ lookups to get the PA) and only the VA bits that are below page
+ granularity (to properly lock simultaneous accesses to the same
+ page mapped at different VAs). As a result, simultaneous atomic
+ operations on values whose addresses are at the same offset on a
+ page will contend in the kernel for the same lock array element.
+
+ No barrier or fence semantics are implied by any of the atomic
+ instructions for manipulating memory; you must specify the barriers
+ that you wish explicitly, using the provided macros.
+
+ Any integral 32- or 64-bit value can be used as the argument
+ to these macros, such as "int", "long long", "unsigned long", etc.
+ The pointers must be aligned to 4 or 8 bytes for 32- or 64-bit data.
+ The "exchange" and "compare and exchange" macros may also take
+ pointer values. We use the pseudo-type "VAL" in the documentation
+ to indicate the use of an appropriate type.
+
+ The 32-bit routines are implemented using a single kernel fast
+ syscall, as is the 64-bit compare-and-exchange. The other 64-bit
+ routines are implemented by looping over the 64-bit
+ compare-and-exchange routine, so may be potentially less efficient. */
+#endif
+
+#ifdef __tilegx__
+#include <arch/spr_def.h>
+#else
+#include <asm/unistd.h>
+#endif
+
+
+/* 32-bit integer compare-and-exchange. */
+static __inline __attribute__ ((always_inline))
+ int arch_atomic_val_compare_and_exchange_4 (volatile int *mem,
+ int oldval, int newval)
+{
+#ifdef __tilegx__
+ __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
+ return __insn_cmpexch4 (mem, newval);
+#else
+ int result;
+ __asm__ __volatile__ ("swint1":"=R00" (result),
+ "=m" (*mem):"R10" (__NR_FAST_cmpxchg), "R00" (mem),
+ "R01" (oldval), "R02" (newval), "m" (*mem):"r20",
+ "r21", "r22", "r23", "r24", "r25", "r26", "r27",
+ "r28", "r29", "memory");
+ return result;
+#endif
+}
+
+/* 64-bit integer compare-and-exchange. */
+static __inline __attribute__ ((always_inline))
+ long long arch_atomic_val_compare_and_exchange_8 (volatile long long
+ *mem, long long oldval,
+ long long newval)
+{
+#ifdef __tilegx__
+ __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
+ return __insn_cmpexch (mem, newval);
+#else
+ unsigned int result_lo, result_hi;
+ unsigned int oldval_lo = oldval & 0xffffffffu, oldval_hi = oldval >> 32;
+ unsigned int newval_lo = newval & 0xffffffffu, newval_hi = newval >> 32;
+ __asm__ __volatile__ ("swint1":"=R00" (result_lo), "=R01" (result_hi),
+ "=m" (*mem):"R10" (__NR_FAST_cmpxchg64), "R00" (mem),
+ "R02" (oldval_lo), "R03" (oldval_hi),
+ "R04" (newval_lo), "R05" (newval_hi),
+ "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
+ "r26", "r27", "r28", "r29", "memory");
+ return ((long long) result_hi) << 32 | result_lo;
+#endif
+}
+
+/* This non-existent symbol is called for sizes other than "4" and "8",
+ indicating a bug in the caller. */
+extern int __arch_atomic_error_bad_argument_size (void)
+ __attribute__ ((warning ("sizeof atomic argument not 4 or 8")));
+
+
+#define arch_atomic_val_compare_and_exchange(mem, o, n) \
+ __extension__ ({ \
+ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
+ ((sizeof(*(mem)) == 8) ? \
+ arch_atomic_val_compare_and_exchange_8( \
+ (volatile long long*)(mem), (__typeof((o)-(o)))(o), \
+ (__typeof((n)-(n)))(n)) : \
+ (sizeof(*(mem)) == 4) ? \
+ arch_atomic_val_compare_and_exchange_4( \
+ (volatile int*)(mem), (__typeof((o)-(o)))(o), \
+ (__typeof((n)-(n)))(n)) : \
+ __arch_atomic_error_bad_argument_size()); \
+ })
+
+#define arch_atomic_bool_compare_and_exchange(mem, o, n) \
+ __extension__ ({ \
+ __typeof(o) __o = (o); \
+ __builtin_expect( \
+ __o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \
+ })
+
+
+/* Loop with compare_and_exchange until we guess the correct value.
+ Normally "expr" will be an expression using __old and __value. */
+#define __arch_atomic_update_cmpxchg(mem, value, expr) \
+ __extension__ ({ \
+ __typeof(value) __value = (value); \
+ __typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \
+ do { \
+ __guess = __old; \
+ __old = arch_atomic_val_compare_and_exchange(__mem, __old, (expr)); \
+ } while (__builtin_expect(__old != __guess, 0)); \
+ __old; \
+ })
+
+#ifdef __tilegx__
+
+/* Generic atomic op with 8- or 4-byte variant.
+ The _mask, _addend, and _expr arguments are ignored on tilegx. */
+#define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \
+ __extension__ ({ \
+ ((__typeof(*(mem))) \
+ ((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \
+ (volatile void *)(mem), \
+ (long long)(__typeof((value)-(value)))(value)) : \
+ (sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \
+ (volatile void *)(mem), \
+ (int)(__typeof((value)-(value)))(value)) : \
+ __arch_atomic_error_bad_argument_size())); \
+ })
+
+#else
+
+/* This uses TILEPro's fast syscall support to atomically compute:
+
+ int old = *ptr;
+ *ptr = (old & mask) + addend;
+ return old;
+
+ This primitive can be used for atomic exchange, add, or, and.
+ Only 32-bit support is provided. */
+static __inline __attribute__ ((always_inline))
+ int
+ __arch_atomic_update_4 (volatile int *mem, int mask, int addend)
+{
+ int result;
+ __asm__ __volatile__ ("swint1":"=R00" (result),
+ "=m" (*mem):"R10" (__NR_FAST_atomic_update),
+ "R00" (mem), "R01" (mask), "R02" (addend),
+ "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
+ "r26", "r27", "r28", "r29", "memory");
+ return result;
+}
+
+/* Generic atomic op with 8- or 4-byte variant.
+ The _op argument is ignored on tilepro. */
+#define __arch_atomic_update(mem, value, _op, mask, addend, expr) \
+ __extension__ ({ \
+ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
+ ((sizeof(*(mem)) == 8) ? \
+ __arch_atomic_update_cmpxchg((mem), (value), (expr)) : \
+ (sizeof(*(mem)) == 4) ? \
+ __arch_atomic_update_4((volatile int*)(mem), \
+ (__typeof((mask)-(mask)))(mask), \
+ (__typeof((addend)-(addend)))(addend)) : \
+ __arch_atomic_error_bad_argument_size()); \
+ })
+
+#endif /* __tilegx__ */
+
+
+#define arch_atomic_exchange(mem, newvalue) \
+ __arch_atomic_update(mem, newvalue, exch, 0, newvalue, __value)
+
+#define arch_atomic_add(mem, value) \
+ __arch_atomic_update(mem, value, fetchadd, -1, value, __old + __value)
+
+#define arch_atomic_sub(mem, value) arch_atomic_add((mem), -(value))
+
+#define arch_atomic_increment(mem) arch_atomic_add((mem), 1)
+
+#define arch_atomic_decrement(mem) arch_atomic_add((mem), -1)
+
+#define arch_atomic_and(mem, mask) \
+ __arch_atomic_update(mem, mask, fetchand, mask, 0, __old & __value)
+
+#define arch_atomic_or(mem, mask) \
+ __arch_atomic_update(mem, mask, fetchor, ~mask, mask, __old | __value)
+
+#define arch_atomic_xor(mem, mask) \
+ __arch_atomic_update_cmpxchg(mem, mask, __old ^ __value)
+
+#define arch_atomic_nand(mem, mask) \
+ __arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value))
+
+#define arch_atomic_bit_set(mem, bit) \
+ __extension__ ({ \
+ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
+ __mask & arch_atomic_or((mem), __mask); \
+ })
+
+#define arch_atomic_bit_clear(mem, bit) \
+ __extension__ ({ \
+ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
+ __mask & arch_atomic_and((mem), ~__mask); \
+ })
+
+#ifdef __tilegx__
+/* Atomically store a new value to memory.
+ Note that you can freely use types of any size here, unlike the
+ other atomic routines, which require 32- or 64-bit types.
+ This accessor is provided for compatibility with TILEPro, which
+ required an explicit atomic operation for stores that needed
+ to be atomic with respect to other atomic methods in this header. */
+#define arch_atomic_write(mem, value) ((void) (*(mem) = (value)))
+#else
+#define arch_atomic_write(mem, value) \
+ do { \
+ __typeof(mem) __aw_mem = (mem); \
+ __typeof(value) __aw_val = (value); \
+ unsigned int *__aw_mem32, __aw_intval, __aw_val32, __aw_off, __aw_mask; \
+ __aw_intval = (__typeof((value) - (value)))__aw_val; \
+ switch (sizeof(*__aw_mem)) { \
+ case 8: \
+ __arch_atomic_update_cmpxchg(__aw_mem, __aw_val, __value); \
+ break; \
+ case 4: \
+ __arch_atomic_update_4((int *)__aw_mem, 0, __aw_intval); \
+ break; \
+ case 2: \
+ __aw_off = 8 * ((long)__aw_mem & 0x2); \
+ __aw_mask = 0xffffU << __aw_off; \
+ __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x2); \
+ __aw_val32 = (__aw_intval << __aw_off) & __aw_mask; \
+ __arch_atomic_update_cmpxchg(__aw_mem32, __aw_val32, \
+ (__old & ~__aw_mask) | __value); \
+ break; \
+ case 1: \
+ __aw_off = 8 * ((long)__aw_mem & 0x3); \
+ __aw_mask = 0xffU << __aw_off; \
+ __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x3); \
+ __aw_val32 = (__aw_intval << __aw_off) & __aw_mask; \
+ __arch_atomic_update_cmpxchg(__aw_mem32, __aw_val32, \
+ (__old & ~__aw_mask) | __value); \
+ break; \
+ } \
+ } while (0)
+#endif
+
+/* Compiler barrier.
+
+ This macro prevents loads or stores from being moved by the compiler
+ across the macro. Any loaded value that was loaded before this
+ macro must then be reloaded by the compiler. */
+#define arch_atomic_compiler_barrier() __asm__ __volatile__("" ::: "memory")
+
+/* Full memory barrier.
+
+ This macro has the semantics of arch_atomic_compiler_barrer(), but also
+ ensures that previous stores are visible to other cores, and that
+ all previous loaded values have been placed into their target
+ register on this core. */
+#define arch_atomic_full_barrier() __insn_mf()
+
+/* Read memory barrier.
+
+ Ensure that all reads by this processor that occurred prior to the
+ read memory barrier have completed, and that no reads that occur
+ after the read memory barrier on this processor are initiated
+ before the barrier.
+
+ On current TILE chips a read barrier is implemented as a full barrier,
+ but this may not be true in later versions of the architecture.
+
+ See also arch_atomic_acquire_barrier() for the appropriate idiom to use
+ to ensure no reads are lifted above an atomic lock instruction. */
+#define arch_atomic_read_barrier() arch_atomic_full_barrier()
+
+/* Write memory barrier.
+
+ Ensure that all writes by this processor that occurred prior to the
+ write memory barrier have completed, and that no writes that occur
+ after the write memory barrier on this processor are initiated
+ before the barrier.
+
+ On current TILE chips a write barrier is implemented as a full barrier,
+ but this may not be true in later versions of the architecture.
+
+ See also arch_atomic_release_barrier() for the appropriate idiom to use
+ to ensure all writes are complete prior to an atomic unlock instruction. */
+#define arch_atomic_write_barrier() arch_atomic_full_barrier()
+
+/* Lock acquisition barrier.
+
+ Ensure that no load operations that follow this macro in the
+ program can issue prior to the barrier. Without such a barrier,
+ the compiler can reorder them to issue earlier, or the hardware can
+ issue them speculatively. The latter is not currently done in the
+ Tile microarchitecture, but using this operation improves
+ portability to future implementations.
+
+ This operation is intended to be used as part of the "acquire"
+ path for locking, that is, when entering a critical section.
+ This should be done after the atomic operation that actually
+ acquires the lock, and in conjunction with a "control dependency"
+ that checks the atomic operation result to see if the lock was
+ in fact acquired. See the arch_atomic_read_barrier() macro
+ for a heavier-weight barrier to use in certain unusual constructs,
+ or arch_atomic_acquire_barrier_value() if no control dependency exists. */
+#define arch_atomic_acquire_barrier() arch_atomic_compiler_barrier()
+
+/* Lock release barrier.
+
+ Ensure that no store operations that precede this macro in the
+ program complete subsequent to the barrier. Without such a
+ barrier, the compiler can reorder stores to issue later, or stores
+ can be still outstanding in the memory network.
+
+ This operation is intended to be used as part of the "release" path
+ for locking, that is, when leaving a critical section. This should
+ be done before the operation (such as a store of zero) that
+ actually releases the lock. */
+#define arch_atomic_release_barrier() arch_atomic_write_barrier()
+
+/* Barrier until the read of a particular value is complete.
+
+ This is occasionally useful when constructing certain locking
+ scenarios. For example, you might write a routine that issues an
+ atomic instruction to enter a critical section, then reads one or
+ more values within the critical section without checking to see if
+ the critical section was in fact acquired, and only later checks
+ the atomic instruction result to see if the lock was acquired. If
+ so the routine could properly release the lock and know that the
+ values that were read were valid.
+
+ In this scenario, it is required to wait for the result of the
+ atomic instruction, even if the value itself is not checked. This
+ guarantees that if the atomic instruction succeeded in taking the lock,
+ the lock was held before any reads in the critical section issued. */
+#define arch_atomic_acquire_barrier_value(val) \
+ __asm__ __volatile__("move %0, %0" :: "r"(val))
+
+/* Access the given variable in memory exactly once.
+
+ In some contexts, an algorithm may need to force access to memory,
+ since otherwise the compiler may think it can optimize away a
+ memory load or store; for example, in a loop when polling memory to
+ see if another cpu has updated it yet. Generally this is only
+ required for certain very carefully hand-tuned algorithms; using it
+ unnecessarily may result in performance losses.
+
+ A related use of this macro is to ensure that the compiler does not
+ rematerialize the value of "x" by reloading it from memory
+ unexpectedly; the "volatile" marking will prevent the compiler from
+ being able to rematerialize. This is helpful if an algorithm needs
+ to read a variable without locking, but needs it to have the same
+ value if it ends up being used several times within the algorithm.
+
+ Note that multiple uses of this macro are guaranteed to be ordered,
+ i.e. the compiler will not reorder stores or loads that are wrapped
+ in arch_atomic_access_once(). */
+#define arch_atomic_access_once(x) (*(volatile __typeof(x) *)&(x))
+
+
+
+#endif /* !_ATOMIC_H_ */
diff --git a/gcc-4.9/libgcc/config/tilepro/linux-unwind.h b/gcc-4.9/libgcc/config/tilepro/linux-unwind.h
new file mode 100644
index 000000000..27481cfcd
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/linux-unwind.h
@@ -0,0 +1,99 @@
+/* DWARF2 EH unwinding support for TILEPro.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef inhibit_libc
+
+#include <arch/abi.h>
+#include <signal.h>
+#include <sys/ucontext.h>
+#include <linux/unistd.h>
+
+/* Macro to define a copy of the kernel's __rt_sigreturn function
+ (in arch/tile/kernel/entry.S). If that function is changed,
+ this one needs to be changed to match it. */
+#define _sigreturn_asm(REG, NR) asm( \
+ ".pushsection .text.__rt_sigreturn,\"a\"\n" \
+ ".global __rt_sigreturn\n" \
+ ".type __rt_sigreturn,@function\n" \
+ "__rt_sigreturn:\n" \
+ "moveli " #REG ", " #NR "\n" \
+ "swint1\n" \
+ ".size __rt_sigreturn, . - __rt_sigreturn\n" \
+ ".popsection")
+#define sigreturn_asm(REG, NR) _sigreturn_asm(REG, NR)
+sigreturn_asm (TREG_SYSCALL_NR_NAME, __NR_rt_sigreturn);
+#define SIGRETURN_LEN 16
+extern char __rt_sigreturn[];
+
+#define MD_FALLBACK_FRAME_STATE_FOR tile_fallback_frame_state
+
+static _Unwind_Reason_Code
+tile_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+ long new_cfa;
+ int i;
+
+ struct rt_sigframe {
+ unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_;
+
+ /* Return if this is not a signal handler. */
+ if (memcmp (pc, __rt_sigreturn, SIGRETURN_LEN) != 0)
+ return _URC_END_OF_STACK;
+
+ /* It was a signal handler; update the reported PC to point to our
+ copy, since that will be findable with dladdr() and therefore
+ somewhat easier to help understand what actually happened. */
+ context->ra = __rt_sigreturn;
+
+ rt_ = context->cfa;
+ sc = &rt_->uc.uc_mcontext;
+
+ new_cfa = sc->sp;
+ fs->regs.cfa_how = CFA_REG_OFFSET;
+ fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+ fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+ for (i = 0; i < 56; ++i)
+ {
+ fs->regs.reg[i].how = REG_SAVED_OFFSET;
+ fs->regs.reg[i].loc.offset
+ = (long)&sc->gregs[i] - new_cfa;
+ }
+
+ fs->regs.reg[56].how = REG_SAVED_OFFSET;
+ fs->regs.reg[56].loc.offset = (long)&sc->pc - new_cfa;
+ fs->retaddr_column = 56;
+ fs->signal_frame = 1;
+
+ return _URC_NO_REASON;
+}
+
+#endif /* ifdef inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/tilepro/sfp-machine.h b/gcc-4.9/libgcc/config/tilepro/sfp-machine.h
new file mode 100644
index 000000000..6953d8d8d
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/sfp-machine.h
@@ -0,0 +1,59 @@
+#define _FP_W_TYPE_SIZE 32
+#define _FP_W_TYPE unsigned long
+#define _FP_WS_TYPE signed long
+#define _FP_I_TYPE long
+
+/* The type of the result of a floating point comparison. This must
+ match `__libgcc_cmp_return__' in GCC for the target. */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y) \
+ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y) \
+ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y) \
+ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S _FP_QNANBIT_S
+#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
+#define _FP_NANSIGN_S 1
+#define _FP_NANSIGN_D 1
+#define _FP_NANSIGN_Q 1
+
+#define _FP_KEEPNANFRACP 1
+#define _FP_QNANNEGATEDP 0
+
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
+ do { \
+ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
+ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
+ { \
+ R##_s = Y##_s; \
+ _FP_FRAC_COPY_##wc(R,Y); \
+ } \
+ else \
+ { \
+ R##_s = X##_s; \
+ _FP_FRAC_COPY_##wc(R,X); \
+ } \
+ R##_c = FP_CLS_NAN; \
+ } while (0)
+
+#define _FP_TININESS_AFTER_ROUNDING 0
+
+#define __LITTLE_ENDIAN 1234
+#define __BIG_ENDIAN 4321
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME. */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/gcc-4.9/libgcc/config/tilepro/softdivide.c b/gcc-4.9/libgcc/config/tilepro/softdivide.c
new file mode 100644
index 000000000..8a539f467
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/softdivide.c
@@ -0,0 +1,353 @@
+/* Division and remainder routines for Tile.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+typedef int int32_t;
+typedef unsigned uint32_t;
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+
+/* Raise signal 8 (SIGFPE) with code 1 (FPE_INTDIV). */
+static inline void
+raise_intdiv (void)
+{
+ asm ("{ raise; moveli zero, 8 + (1 << 6) }");
+}
+
+
+#ifndef __tilegx__
+/*__udivsi3 - 32 bit integer unsigned divide */
+static inline uint32_t __attribute__ ((always_inline))
+__udivsi3_inline (uint32_t dividend, uint32_t divisor)
+{
+ /* Divide out any power of two factor from dividend and divisor.
+ Note that when dividing by zero the divisor will remain zero,
+ which is all we need to detect that case below. */
+ const int power_of_two_factor = __insn_ctz (divisor);
+ divisor >>= power_of_two_factor;
+ dividend >>= power_of_two_factor;
+
+ /* Checks for division by power of two or division by zero. */
+ if (divisor <= 1)
+ {
+ if (divisor == 0)
+ {
+ raise_intdiv ();
+ return 0;
+ }
+ return dividend;
+ }
+
+ /* Compute (a / b) by repeatedly finding the largest N
+ such that (b << N) <= a. For each such N, set bit N in the
+ quotient, subtract (b << N) from a, and keep going. Think of this as
+ the reverse of the "shift-and-add" that a multiply does. The values
+ of N are precisely those shift counts.
+
+ Finding N is easy. First, use clz(b) - clz(a) to find the N
+ that lines up the high bit of (b << N) with the high bit of a.
+ Any larger value of N would definitely make (b << N) > a,
+ which is too big.
+
+ Then, if (b << N) > a (because it has larger low bits), decrement
+ N by one. This adjustment will definitely make (b << N) less
+ than a, because a's high bit is now one higher than b's. */
+
+ /* Precomputing the max_ values allows us to avoid a subtract
+ in the inner loop and just right shift by clz(remainder). */
+ const int divisor_clz = __insn_clz (divisor);
+ const uint32_t max_divisor = divisor << divisor_clz;
+ const uint32_t max_qbit = 1 << divisor_clz;
+
+ uint32_t quotient = 0;
+ uint32_t remainder = dividend;
+
+ while (remainder >= divisor)
+ {
+ int shift = __insn_clz (remainder);
+ uint32_t scaled_divisor = max_divisor >> shift;
+ uint32_t quotient_bit = max_qbit >> shift;
+
+ int too_big = (scaled_divisor > remainder);
+ scaled_divisor >>= too_big;
+ quotient_bit >>= too_big;
+ remainder -= scaled_divisor;
+ quotient |= quotient_bit;
+ }
+ return quotient;
+}
+#endif /* !__tilegx__ */
+
+
+/* __udivdi3 - 64 bit integer unsigned divide */
+static inline uint64_t __attribute__ ((always_inline))
+__udivdi3_inline (uint64_t dividend, uint64_t divisor)
+{
+ /* Divide out any power of two factor from dividend and divisor.
+ Note that when dividing by zero the divisor will remain zero,
+ which is all we need to detect that case below. */
+ const int power_of_two_factor = __builtin_ctzll (divisor);
+ divisor >>= power_of_two_factor;
+ dividend >>= power_of_two_factor;
+
+ /* Checks for division by power of two or division by zero. */
+ if (divisor <= 1)
+ {
+ if (divisor == 0)
+ {
+ raise_intdiv ();
+ return 0;
+ }
+ return dividend;
+ }
+
+#ifndef __tilegx__
+ if (((uint32_t) (dividend >> 32) | ((uint32_t) (divisor >> 32))) == 0)
+ {
+ /* Operands both fit in 32 bits, so use faster 32 bit algorithm. */
+ return __udivsi3_inline ((uint32_t) dividend, (uint32_t) divisor);
+ }
+#endif /* !__tilegx__ */
+
+ /* See algorithm description in __udivsi3 */
+
+ const int divisor_clz = __builtin_clzll (divisor);
+ const uint64_t max_divisor = divisor << divisor_clz;
+ const uint64_t max_qbit = 1ULL << divisor_clz;
+
+ uint64_t quotient = 0;
+ uint64_t remainder = dividend;
+
+ while (remainder >= divisor)
+ {
+ int shift = __builtin_clzll (remainder);
+ uint64_t scaled_divisor = max_divisor >> shift;
+ uint64_t quotient_bit = max_qbit >> shift;
+
+ int too_big = (scaled_divisor > remainder);
+ scaled_divisor >>= too_big;
+ quotient_bit >>= too_big;
+ remainder -= scaled_divisor;
+ quotient |= quotient_bit;
+ }
+ return quotient;
+}
+
+
+#ifndef __tilegx__
+/* __umodsi3 - 32 bit integer unsigned modulo */
+static inline uint32_t __attribute__ ((always_inline))
+__umodsi3_inline (uint32_t dividend, uint32_t divisor)
+{
+ /* Shortcircuit mod by a power of two (and catch mod by zero). */
+ const uint32_t mask = divisor - 1;
+ if ((divisor & mask) == 0)
+ {
+ if (divisor == 0)
+ {
+ raise_intdiv ();
+ return 0;
+ }
+ return dividend & mask;
+ }
+
+ /* We compute the remainder (a % b) by repeatedly subtracting off
+ multiples of b from a until a < b. The key is that subtracting
+ off a multiple of b does not affect the result mod b.
+
+ To make the algorithm run efficiently, we need to subtract
+ off a large multiple of b at each step. We subtract the largest
+ (b << N) that is <= a.
+
+ Finding N is easy. First, use clz(b) - clz(a) to find the N
+ that lines up the high bit of (b << N) with the high bit of a.
+ Any larger value of N would definitely make (b << N) > a,
+ which is too big.
+
+ Then, if (b << N) > a (because it has larger low bits), decrement
+ N by one. This adjustment will definitely make (b << N) less
+ than a, because a's high bit is now one higher than b's. */
+ const uint32_t max_divisor = divisor << __insn_clz (divisor);
+
+ uint32_t remainder = dividend;
+ while (remainder >= divisor)
+ {
+ const int shift = __insn_clz (remainder);
+ uint32_t scaled_divisor = max_divisor >> shift;
+ scaled_divisor >>= (scaled_divisor > remainder);
+ remainder -= scaled_divisor;
+ }
+
+ return remainder;
+}
+#endif /* !__tilegx__ */
+
+
+/* __umoddi3 - 64 bit integer unsigned modulo */
+static inline uint64_t __attribute__ ((always_inline))
+__umoddi3_inline (uint64_t dividend, uint64_t divisor)
+{
+#ifndef __tilegx__
+ if (((uint32_t) (dividend >> 32) | ((uint32_t) (divisor >> 32))) == 0)
+ {
+ /* Operands both fit in 32 bits, so use faster 32 bit algorithm. */
+ return __umodsi3_inline ((uint32_t) dividend, (uint32_t) divisor);
+ }
+#endif /* !__tilegx__ */
+
+ /* Shortcircuit mod by a power of two (and catch mod by zero). */
+ const uint64_t mask = divisor - 1;
+ if ((divisor & mask) == 0)
+ {
+ if (divisor == 0)
+ {
+ raise_intdiv ();
+ return 0;
+ }
+ return dividend & mask;
+ }
+
+ /* See algorithm description in __umodsi3 */
+ const uint64_t max_divisor = divisor << __builtin_clzll (divisor);
+
+ uint64_t remainder = dividend;
+ while (remainder >= divisor)
+ {
+ const int shift = __builtin_clzll (remainder);
+ uint64_t scaled_divisor = max_divisor >> shift;
+ scaled_divisor >>= (scaled_divisor > remainder);
+ remainder -= scaled_divisor;
+ }
+
+ return remainder;
+}
+
+
+uint32_t __udivsi3 (uint32_t dividend, uint32_t divisor);
+#ifdef L_tile_udivsi3
+uint32_t
+__udivsi3 (uint32_t dividend, uint32_t divisor)
+{
+#ifndef __tilegx__
+ return __udivsi3_inline (dividend, divisor);
+#else /* !__tilegx__ */
+ uint64_t n = __udivdi3_inline (((uint64_t) dividend), ((uint64_t) divisor));
+ return (uint32_t) n;
+#endif /* !__tilegx__ */
+}
+#endif
+
+#define ABS(x) ((x) >= 0 ? (x) : -(x))
+
+int32_t __divsi3 (int32_t dividend, int32_t divisor);
+#ifdef L_tile_divsi3
+/* __divsi3 - 32 bit integer signed divide */
+int32_t
+__divsi3 (int32_t dividend, int32_t divisor)
+{
+#ifndef __tilegx__
+ uint32_t n = __udivsi3_inline (ABS (dividend), ABS (divisor));
+#else /* !__tilegx__ */
+ uint64_t n =
+ __udivdi3_inline (ABS ((int64_t) dividend), ABS ((int64_t) divisor));
+#endif /* !__tilegx__ */
+ if ((dividend ^ divisor) < 0)
+ n = -n;
+ return (int32_t) n;
+}
+#endif
+
+
+uint64_t __udivdi3 (uint64_t dividend, uint64_t divisor);
+#ifdef L_tile_udivdi3
+uint64_t
+__udivdi3 (uint64_t dividend, uint64_t divisor)
+{
+ return __udivdi3_inline (dividend, divisor);
+}
+#endif
+
+/*__divdi3 - 64 bit integer signed divide */
+int64_t __divdi3 (int64_t dividend, int64_t divisor);
+#ifdef L_tile_divdi3
+int64_t
+__divdi3 (int64_t dividend, int64_t divisor)
+{
+ uint64_t n = __udivdi3_inline (ABS (dividend), ABS (divisor));
+ if ((dividend ^ divisor) < 0)
+ n = -n;
+ return (int64_t) n;
+}
+#endif
+
+
+uint32_t __umodsi3 (uint32_t dividend, uint32_t divisor);
+#ifdef L_tile_umodsi3
+uint32_t
+__umodsi3 (uint32_t dividend, uint32_t divisor)
+{
+#ifndef __tilegx__
+ return __umodsi3_inline (dividend, divisor);
+#else /* !__tilegx__ */
+ return __umoddi3_inline ((uint64_t) dividend, (uint64_t) divisor);
+#endif /* !__tilegx__ */
+}
+#endif
+
+
+/* __modsi3 - 32 bit integer signed modulo */
+int32_t __modsi3 (int32_t dividend, int32_t divisor);
+#ifdef L_tile_modsi3
+int32_t
+__modsi3 (int32_t dividend, int32_t divisor)
+{
+#ifndef __tilegx__
+ uint32_t remainder = __umodsi3_inline (ABS (dividend), ABS (divisor));
+#else /* !__tilegx__ */
+ uint64_t remainder =
+ __umoddi3_inline (ABS ((int64_t) dividend), ABS ((int64_t) divisor));
+#endif /* !__tilegx__ */
+ return (int32_t) ((dividend >= 0) ? remainder : -remainder);
+}
+#endif
+
+
+uint64_t __umoddi3 (uint64_t dividend, uint64_t divisor);
+#ifdef L_tile_umoddi3
+uint64_t
+__umoddi3 (uint64_t dividend, uint64_t divisor)
+{
+ return __umoddi3_inline (dividend, divisor);
+}
+#endif
+
+
+/* __moddi3 - 64 bit integer signed modulo */
+int64_t __moddi3 (int64_t dividend, int64_t divisor);
+#ifdef L_tile_moddi3
+int64_t
+__moddi3 (int64_t dividend, int64_t divisor)
+{
+ uint64_t remainder = __umoddi3_inline (ABS (dividend), ABS (divisor));
+ return (int64_t) ((dividend >= 0) ? remainder : -remainder);
+}
+#endif
diff --git a/gcc-4.9/libgcc/config/tilepro/softmpy.S b/gcc-4.9/libgcc/config/tilepro/softmpy.S
new file mode 100644
index 000000000..4922dc764
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/softmpy.S
@@ -0,0 +1,94 @@
+/* 64-bit multiplication support for TILEPro.
+ Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* 64-bit multiplication support. */
+
+ .file "softmpy.S"
+
+/* Parameters */
+#define lo0 r9 /* low 32 bits of n0 */
+#define hi0 r1 /* high 32 bits of n0 */
+#define lo1 r2 /* low 32 bits of n1 */
+#define hi1 r3 /* high 32 bits of n1 */
+
+/* temps */
+#define result1_a r4
+#define result1_b r5
+
+#define tmp0 r6
+#define tmp0_left_16 r7
+#define tmp1 r8
+
+ .section .text.__muldi3, "ax"
+ .align 8
+ .globl __muldi3
+ .type __muldi3, @function
+__muldi3:
+ {
+ move lo0, r0 /* so we can write "out r0" while "in r0" alive */
+ mulhl_uu tmp0, lo1, r0
+ }
+ {
+ mulll_uu result1_a, lo1, hi0
+ }
+ {
+ move tmp1, tmp0
+ mulhla_uu tmp0, lo0, lo1
+ }
+ {
+ mulhlsa_uu result1_a, lo1, hi0
+ }
+ {
+ mulll_uu result1_b, lo0, hi1
+ slt_u tmp1, tmp0, tmp1
+ }
+ {
+ mulhlsa_uu result1_a, lo0, hi1
+ shli r0, tmp0, 16
+ }
+ {
+ move tmp0_left_16, r0
+ mulhha_uu result1_b, lo0, lo1
+ }
+ {
+ mullla_uu r0, lo1, lo0
+ shli tmp1, tmp1, 16
+ }
+ {
+ mulhlsa_uu result1_b, hi0, lo1
+ inthh tmp1, tmp1, tmp0
+ }
+ {
+ mulhlsa_uu result1_a, hi1, lo0
+ slt_u tmp0, r0, tmp0_left_16
+ }
+ /* NOTE: this will stall for a cycle here. Oh well. */
+ {
+ add r1, tmp0, tmp1
+ add result1_a, result1_a, result1_b
+ }
+ {
+ add r1, r1, result1_a
+ jrp lr
+ }
+ .size __muldi3,.-__muldi3
diff --git a/gcc-4.9/libgcc/config/tilepro/t-crtstuff b/gcc-4.9/libgcc/config/tilepro/t-crtstuff
new file mode 100644
index 000000000..eddc45ce9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/t-crtstuff
@@ -0,0 +1,4 @@
+# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+# because then __FRAME_END__ might not be the last thing in .eh_frame
+# section.
+CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
diff --git a/gcc-4.9/libgcc/config/tilepro/t-tilepro b/gcc-4.9/libgcc/config/tilepro/t-tilepro
new file mode 100644
index 000000000..eb6894ce1
--- /dev/null
+++ b/gcc-4.9/libgcc/config/tilepro/t-tilepro
@@ -0,0 +1,33 @@
+LIB2ADD += \
+ $(srcdir)/config/tilepro/softmpy.S \
+ $(srcdir)/config/tilepro/atomic.c
+
+LIB2FUNCS_EXCLUDE += \
+ _divdi3 \
+ _moddi3 \
+ _muldi3 \
+ _udivdi3 \
+ _umoddi3
+
+SOFTDIVIDE_FUNCS := \
+ _tile_udivsi3 \
+ _tile_divsi3 \
+ _tile_udivdi3 \
+ _tile_divdi3 \
+ _tile_umodsi3 \
+ _tile_modsi3 \
+ _tile_umoddi3 \
+ _tile_moddi3
+
+softdivide-o = $(patsubst %,%$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-o): %$(objext): $(srcdir)/config/tilepro/softdivide.c
+ $(gcc_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $< \
+ $(vis_hide)
+libgcc-objects += $(softdivide-o)
+
+ifeq ($(enable_shared),yes)
+softdivide-s-o = $(patsubst %,%_s$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-s-o): %_s$(objext): $(srcdir)/config/tilepro/softdivide.c
+ $(gcc_s_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $<
+libgcc-s-objects += $(softdivide-s-o)
+endif
diff --git a/gcc-4.9/libgcc/config/unwind-dw2-fde-darwin.c b/gcc-4.9/libgcc/config/unwind-dw2-fde-darwin.c
new file mode 100644
index 000000000..671309cae
--- /dev/null
+++ b/gcc-4.9/libgcc/config/unwind-dw2-fde-darwin.c
@@ -0,0 +1,288 @@
+/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Locate the FDE entry for a given address, using Darwin's keymgr support. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include <string.h>
+#include <stdlib.h>
+#include "dwarf2.h"
+#include "unwind.h"
+#define NO_BASE_OF_ENCODED_VALUE
+#define DWARF2_OBJECT_END_PTR_EXTENSION
+#include "unwind-pe.h"
+#include "unwind-dw2-fde.h"
+/* Carefully don't include gthr.h. */
+
+typedef int __gthread_mutex_t;
+#define __gthread_mutex_lock(x) (void)(x)
+#define __gthread_mutex_unlock(x) (void)(x)
+
+static const fde * _Unwind_Find_registered_FDE (void *pc,
+ struct dwarf_eh_bases *bases);
+
+#define _Unwind_Find_FDE _Unwind_Find_registered_FDE
+#include "unwind-dw2-fde.c"
+#undef _Unwind_Find_FDE
+
+/* KeyMgr stuff. */
+#define KEYMGR_GCC3_LIVE_IMAGE_LIST 301 /* loaded images */
+#define KEYMGR_GCC3_DW2_OBJ_LIST 302 /* Dwarf2 object list */
+
+extern void *_keymgr_get_and_lock_processwide_ptr (int);
+extern void _keymgr_set_and_unlock_processwide_ptr (int, void *);
+extern void _keymgr_unlock_processwide_ptr (int);
+
+struct mach_header;
+struct mach_header_64;
+extern char *getsectdatafromheader (struct mach_header*, const char*,
+ const char *, unsigned long *);
+extern char *getsectdatafromheader_64 (struct mach_header_64*, const char*,
+ const char *, unsigned long *);
+
+/* This is referenced from KEYMGR_GCC3_DW2_OBJ_LIST. */
+struct km_object_info {
+ struct object *seen_objects;
+ struct object *unseen_objects;
+ unsigned spare[2];
+};
+
+/* Node of KEYMGR_GCC3_LIVE_IMAGE_LIST. Info about each resident image. */
+struct live_images {
+ unsigned long this_size; /* sizeof (live_images) */
+ struct mach_header *mh; /* the image info */
+ unsigned long vm_slide;
+ void (*destructor)(struct live_images *); /* destructor for this */
+ struct live_images *next;
+ unsigned int examined_p;
+ void *fde;
+ void *object_info;
+ unsigned long info[2]; /* Future use. */
+};
+
+/* Bits in the examined_p field of struct live_images. */
+enum {
+ EXAMINED_IMAGE_MASK = 1, /* We've seen this one. */
+ ALLOCED_IMAGE_MASK = 2, /* The FDE entries were allocated by
+ malloc, and must be freed. This isn't
+ used by newer libgcc versions. */
+ IMAGE_IS_TEXT_MASK = 4, /* This image is in the TEXT segment. */
+ DESTRUCTOR_MAY_BE_CALLED_LIVE = 8 /* The destructor may be called on an
+ object that's part of the live
+ image list. */
+};
+
+/* Delete any data we allocated on a live_images structure. Either
+ IMAGE has already been removed from the
+ KEYMGR_GCC3_LIVE_IMAGE_LIST and the struct will be deleted
+ after we return, or that list is locked and we're being called
+ because this object might be about to be unloaded. Called by
+ KeyMgr. */
+
+static void
+live_image_destructor (struct live_images *image)
+{
+ if (image->object_info)
+ {
+ struct km_object_info *the_obj_info;
+
+ the_obj_info =
+ _keymgr_get_and_lock_processwide_ptr (KEYMGR_GCC3_DW2_OBJ_LIST);
+ if (the_obj_info)
+ {
+ seen_objects = the_obj_info->seen_objects;
+ unseen_objects = the_obj_info->unseen_objects;
+
+ /* Free any sorted arrays. */
+ __deregister_frame_info_bases (image->fde);
+
+ the_obj_info->seen_objects = seen_objects;
+ the_obj_info->unseen_objects = unseen_objects;
+ }
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_GCC3_DW2_OBJ_LIST,
+ the_obj_info);
+
+ free (image->object_info);
+ image->object_info = NULL;
+ if (image->examined_p & ALLOCED_IMAGE_MASK)
+ free (image->fde);
+ image->fde = NULL;
+ }
+ image->examined_p = 0;
+ image->destructor = NULL;
+}
+
+/* Run through the list of live images. If we can allocate memory,
+ give each unseen image a new `struct object'. Even if we can't,
+ check whether the PC is inside the FDE of each unseen image.
+ */
+
+static inline const fde *
+examine_objects (void *pc, struct dwarf_eh_bases *bases, int dont_alloc)
+{
+ const fde *result = NULL;
+ struct live_images *image;
+
+ image = _keymgr_get_and_lock_processwide_ptr (KEYMGR_GCC3_LIVE_IMAGE_LIST);
+
+ for (; image != NULL; image = image->next)
+ if ((image->examined_p & EXAMINED_IMAGE_MASK) == 0)
+ {
+ char *fde = NULL;
+ unsigned long sz;
+
+ /* For ppc only check whether or not we have __DATA eh frames. */
+#ifdef __ppc__
+ fde = getsectdatafromheader (image->mh, "__DATA", "__eh_frame", &sz);
+#endif
+
+ if (fde == NULL)
+ {
+#if __LP64__
+ fde = getsectdatafromheader_64 ((struct mach_header_64 *) image->mh,
+ "__TEXT", "__eh_frame", &sz);
+#else
+ fde = getsectdatafromheader (image->mh, "__TEXT",
+ "__eh_frame", &sz);
+#endif
+ if (fde != NULL)
+ image->examined_p |= IMAGE_IS_TEXT_MASK;
+ }
+
+ /* If .eh_frame is empty, don't register at all. */
+ if (fde != NULL && sz > 0)
+ {
+ char *real_fde = (fde + image->vm_slide);
+ struct object *ob = NULL;
+ struct object panicob;
+
+ if (! dont_alloc)
+ ob = calloc (1, sizeof (struct object));
+ dont_alloc |= ob == NULL;
+ if (dont_alloc)
+ ob = &panicob;
+
+ ob->pc_begin = (void *)-1;
+ ob->tbase = 0;
+ ob->dbase = 0;
+ ob->u.single = (struct dwarf_fde *)real_fde;
+ ob->s.i = 0;
+ ob->s.b.encoding = DW_EH_PE_omit;
+ ob->fde_end = real_fde + sz;
+
+ image->fde = real_fde;
+
+ result = search_object (ob, pc);
+
+ if (! dont_alloc)
+ {
+ struct object **p;
+
+ image->destructor = live_image_destructor;
+ image->object_info = ob;
+
+ image->examined_p |= (EXAMINED_IMAGE_MASK
+ | DESTRUCTOR_MAY_BE_CALLED_LIVE);
+
+ /* Insert the object into the classified list. */
+ for (p = &seen_objects; *p ; p = &(*p)->next)
+ if ((*p)->pc_begin < ob->pc_begin)
+ break;
+ ob->next = *p;
+ *p = ob;
+ }
+
+ if (result)
+ {
+ int encoding;
+ _Unwind_Ptr func;
+
+ bases->tbase = ob->tbase;
+ bases->dbase = ob->dbase;
+
+ encoding = ob->s.b.encoding;
+ if (ob->s.b.mixed_encoding)
+ encoding = get_fde_encoding (result);
+ read_encoded_value_with_base (encoding,
+ base_from_object (encoding, ob),
+ result->pc_begin, &func);
+ bases->func = (void *) func;
+ break;
+ }
+ }
+ else
+ image->examined_p |= EXAMINED_IMAGE_MASK;
+ }
+
+ _keymgr_unlock_processwide_ptr (KEYMGR_GCC3_LIVE_IMAGE_LIST);
+
+ return result;
+}
+
+const fde *
+_Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases)
+{
+ struct km_object_info *the_obj_info;
+ const fde *ret = NULL;
+
+ the_obj_info =
+ _keymgr_get_and_lock_processwide_ptr (KEYMGR_GCC3_DW2_OBJ_LIST);
+ if (! the_obj_info)
+ the_obj_info = calloc (1, sizeof (*the_obj_info));
+
+ if (the_obj_info != NULL)
+ {
+ seen_objects = the_obj_info->seen_objects;
+ unseen_objects = the_obj_info->unseen_objects;
+
+ ret = _Unwind_Find_registered_FDE (pc, bases);
+ }
+
+ /* OK, didn't find it in the list of FDEs we've seen before,
+ so go through and look at the new ones. */
+ if (ret == NULL)
+ ret = examine_objects (pc, bases, the_obj_info == NULL);
+
+ if (the_obj_info != NULL)
+ {
+ the_obj_info->seen_objects = seen_objects;
+ the_obj_info->unseen_objects = unseen_objects;
+ }
+ _keymgr_set_and_unlock_processwide_ptr (KEYMGR_GCC3_DW2_OBJ_LIST,
+ the_obj_info);
+ return ret;
+}
+
+void *
+_darwin10_Unwind_FindEnclosingFunction (void *pc ATTRIBUTE_UNUSED)
+{
+#if __MACH__ && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060)
+ struct dwarf_eh_bases bases;
+ const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
+ if (fde)
+ return bases.func;
+#endif
+ return NULL;
+}
+
diff --git a/gcc-4.9/libgcc/config/v850/lib1funcs.S b/gcc-4.9/libgcc/config/v850/lib1funcs.S
new file mode 100644
index 000000000..1ad11738b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/v850/lib1funcs.S
@@ -0,0 +1,2330 @@
+/* libgcc routines for NEC V850.
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef L_mulsi3
+ .text
+ .globl ___mulsi3
+ .type ___mulsi3,@function
+___mulsi3:
+#ifdef __v850__
+/*
+ #define SHIFT 12
+ #define MASK ((1 << SHIFT) - 1)
+
+ #define STEP(i, j) \
+ ({ \
+ short a_part = (a >> (i)) & MASK; \
+ short b_part = (b >> (j)) & MASK; \
+ int res = (((int) a_part) * ((int) b_part)); \
+ res; \
+ })
+
+ int
+ __mulsi3 (unsigned a, unsigned b)
+ {
+ return STEP (0, 0) +
+ ((STEP (SHIFT, 0) + STEP (0, SHIFT)) << SHIFT) +
+ ((STEP (0, 2 * SHIFT) + STEP (SHIFT, SHIFT) + STEP (2 * SHIFT, 0))
+ << (2 * SHIFT));
+ }
+*/
+ mov r6, r14
+ movea lo(32767), r0, r10
+ and r10, r14
+ mov r7, r15
+ and r10, r15
+ shr 15, r6
+ mov r6, r13
+ and r10, r13
+ shr 15, r7
+ mov r7, r12
+ and r10, r12
+ shr 15, r6
+ shr 15, r7
+ mov r14, r10
+ mulh r15, r10
+ mov r14, r11
+ mulh r12, r11
+ mov r13, r16
+ mulh r15, r16
+ mulh r14, r7
+ mulh r15, r6
+ add r16, r11
+ mulh r13, r12
+ shl 15, r11
+ add r11, r10
+ add r12, r7
+ add r6, r7
+ shl 30, r7
+ add r7, r10
+ jmp [r31]
+#endif /* __v850__ */
+#if defined(__v850e__) || defined(__v850ea__) || defined(__v850e2__) || defined(__v850e2v3__) || defined(__v850e3v5__)
+ /* This routine is almost unneccesarry because gcc
+ generates the MUL instruction for the RTX mulsi3.
+ But if someone wants to link his application with
+ previsously compiled v850 objects then they will
+ need this function. */
+
+ /* It isn't good to put the inst sequence as below;
+ mul r7, r6,
+ mov r6, r10, r0
+ In this case, there is a RAW hazard between them.
+ MUL inst takes 2 cycle in EX stage, then MOV inst
+ must wait 1cycle. */
+ mov r7, r10
+ mul r6, r10, r0
+ jmp [r31]
+#endif /* __v850e__ */
+ .size ___mulsi3,.-___mulsi3
+#endif /* L_mulsi3 */
+
+
+#ifdef L_udivsi3
+ .text
+ .global ___udivsi3
+ .type ___udivsi3,@function
+___udivsi3:
+#ifdef __v850__
+ mov 1,r12
+ mov 0,r10
+ cmp r6,r7
+ bnl .L12
+ movhi hi(-2147483648),r0,r13
+ cmp r0,r7
+ blt .L12
+.L4:
+ shl 1,r7
+ shl 1,r12
+ cmp r6,r7
+ bnl .L12
+ cmp r0,r12
+ be .L8
+ mov r7,r19
+ and r13,r19
+ be .L4
+ br .L12
+.L9:
+ cmp r7,r6
+ bl .L10
+ sub r7,r6
+ or r12,r10
+.L10:
+ shr 1,r12
+ shr 1,r7
+.L12:
+ cmp r0,r12
+ bne .L9
+.L8:
+ jmp [r31]
+
+#else /* defined(__v850e__) */
+
+ /* See comments at end of __mulsi3. */
+ mov r6, r10
+ divu r7, r10, r0
+ jmp [r31]
+
+#endif /* __v850e__ */
+
+ .size ___udivsi3,.-___udivsi3
+#endif
+
+#ifdef L_divsi3
+ .text
+ .globl ___divsi3
+ .type ___divsi3,@function
+___divsi3:
+#ifdef __v850__
+ add -8,sp
+ st.w r31,4[sp]
+ st.w r22,0[sp]
+ mov 1,r22
+ tst r7,r7
+ bp .L3
+ subr r0,r7
+ subr r0,r22
+.L3:
+ tst r6,r6
+ bp .L4
+ subr r0,r6
+ subr r0,r22
+.L4:
+ jarl ___udivsi3,r31
+ cmp r0,r22
+ bp .L7
+ subr r0,r10
+.L7:
+ ld.w 0[sp],r22
+ ld.w 4[sp],r31
+ add 8,sp
+ jmp [r31]
+
+#else /* defined(__v850e__) */
+
+ /* See comments at end of __mulsi3. */
+ mov r6, r10
+ div r7, r10, r0
+ jmp [r31]
+
+#endif /* __v850e__ */
+
+ .size ___divsi3,.-___divsi3
+#endif
+
+#ifdef L_umodsi3
+ .text
+ .globl ___umodsi3
+ .type ___umodsi3,@function
+___umodsi3:
+#ifdef __v850__
+ add -12,sp
+ st.w r31,8[sp]
+ st.w r7,4[sp]
+ st.w r6,0[sp]
+ jarl ___udivsi3,r31
+ ld.w 4[sp],r7
+ mov r10,r6
+ jarl ___mulsi3,r31
+ ld.w 0[sp],r6
+ subr r6,r10
+ ld.w 8[sp],r31
+ add 12,sp
+ jmp [r31]
+
+#else /* defined(__v850e__) */
+
+ /* See comments at end of __mulsi3. */
+ divu r7, r6, r10
+ jmp [r31]
+
+#endif /* __v850e__ */
+
+ .size ___umodsi3,.-___umodsi3
+#endif /* L_umodsi3 */
+
+#ifdef L_modsi3
+ .text
+ .globl ___modsi3
+ .type ___modsi3,@function
+___modsi3:
+#ifdef __v850__
+ add -12,sp
+ st.w r31,8[sp]
+ st.w r7,4[sp]
+ st.w r6,0[sp]
+ jarl ___divsi3,r31
+ ld.w 4[sp],r7
+ mov r10,r6
+ jarl ___mulsi3,r31
+ ld.w 0[sp],r6
+ subr r6,r10
+ ld.w 8[sp],r31
+ add 12,sp
+ jmp [r31]
+
+#else /* defined(__v850e__) */
+
+ /* See comments at end of __mulsi3. */
+ div r7, r6, r10
+ jmp [r31]
+
+#endif /* __v850e__ */
+
+ .size ___modsi3,.-___modsi3
+#endif /* L_modsi3 */
+
+#ifdef L_save_2
+ .text
+ .align 2
+ .globl __save_r2_r29
+ .type __save_r2_r29,@function
+ /* Allocate space and save registers 2, 20 .. 29 on the stack. */
+ /* Called via: jalr __save_r2_r29,r10. */
+__save_r2_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -44,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r20,36[ep]
+ sst.w r2,40[ep]
+ mov r1,ep
+#else
+ addi -44,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r21,32[sp]
+ st.w r20,36[sp]
+ st.w r2,40[sp]
+#endif
+ jmp [r10]
+ .size __save_r2_r29,.-__save_r2_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r2_r29. */
+ .align 2
+ .globl __return_r2_r29
+ .type __return_r2_r29,@function
+__return_r2_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r20
+ sld.w 40[ep],r2
+ addi 44,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ ld.w 32[sp],r21
+ ld.w 36[sp],r20
+ ld.w 40[sp],r2
+ addi 44,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r2_r29,.-__return_r2_r29
+#endif /* L_save_2 */
+
+#ifdef L_save_20
+ .text
+ .align 2
+ .globl __save_r20_r29
+ .type __save_r20_r29,@function
+ /* Allocate space and save registers 20 .. 29 on the stack. */
+ /* Called via: jalr __save_r20_r29,r10. */
+__save_r20_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -40,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r20,36[ep]
+ mov r1,ep
+#else
+ addi -40,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r21,32[sp]
+ st.w r20,36[sp]
+#endif
+ jmp [r10]
+ .size __save_r20_r29,.-__save_r20_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r20_r29. */
+ .align 2
+ .globl __return_r20_r29
+ .type __return_r20_r29,@function
+__return_r20_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r20
+ addi 40,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ ld.w 32[sp],r21
+ ld.w 36[sp],r20
+ addi 40,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r20_r29,.-__return_r20_r29
+#endif /* L_save_20 */
+
+#ifdef L_save_21
+ .text
+ .align 2
+ .globl __save_r21_r29
+ .type __save_r21_r29,@function
+ /* Allocate space and save registers 21 .. 29 on the stack. */
+ /* Called via: jalr __save_r21_r29,r10. */
+__save_r21_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -36,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ mov r1,ep
+#else
+ addi -36,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r21,32[sp]
+#endif
+ jmp [r10]
+ .size __save_r21_r29,.-__save_r21_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r21_r29. */
+ .align 2
+ .globl __return_r21_r29
+ .type __return_r21_r29,@function
+__return_r21_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ addi 36,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ ld.w 32[sp],r21
+ addi 36,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r21_r29,.-__return_r21_r29
+#endif /* L_save_21 */
+
+#ifdef L_save_22
+ .text
+ .align 2
+ .globl __save_r22_r29
+ .type __save_r22_r29,@function
+ /* Allocate space and save registers 22 .. 29 on the stack. */
+ /* Called via: jalr __save_r22_r29,r10. */
+__save_r22_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -32,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ mov r1,ep
+#else
+ addi -32,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+#endif
+ jmp [r10]
+ .size __save_r22_r29,.-__save_r22_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r22_r29. */
+ .align 2
+ .globl __return_r22_r29
+ .type __return_r22_r29,@function
+__return_r22_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ addi 32,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ addi 32,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r22_r29,.-__return_r22_r29
+#endif /* L_save_22 */
+
+#ifdef L_save_23
+ .text
+ .align 2
+ .globl __save_r23_r29
+ .type __save_r23_r29,@function
+ /* Allocate space and save registers 23 .. 29 on the stack. */
+ /* Called via: jalr __save_r23_r29,r10. */
+__save_r23_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -28,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ mov r1,ep
+#else
+ addi -28,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+#endif
+ jmp [r10]
+ .size __save_r23_r29,.-__save_r23_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r23_r29. */
+ .align 2
+ .globl __return_r23_r29
+ .type __return_r23_r29,@function
+__return_r23_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ addi 28,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ addi 28,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r23_r29,.-__return_r23_r29
+#endif /* L_save_23 */
+
+#ifdef L_save_24
+ .text
+ .align 2
+ .globl __save_r24_r29
+ .type __save_r24_r29,@function
+ /* Allocate space and save registers 24 .. 29 on the stack. */
+ /* Called via: jalr __save_r24_r29,r10. */
+__save_r24_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -24,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ mov r1,ep
+#else
+ addi -24,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+#endif
+ jmp [r10]
+ .size __save_r24_r29,.-__save_r24_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r24_r29. */
+ .align 2
+ .globl __return_r24_r29
+ .type __return_r24_r29,@function
+__return_r24_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ addi 24,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ addi 24,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r24_r29,.-__return_r24_r29
+#endif /* L_save_24 */
+
+#ifdef L_save_25
+ .text
+ .align 2
+ .globl __save_r25_r29
+ .type __save_r25_r29,@function
+ /* Allocate space and save registers 25 .. 29 on the stack. */
+ /* Called via: jalr __save_r25_r29,r10. */
+__save_r25_r29:
+#ifdef __EP__
+ mov ep,r1
+ addi -20,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ mov r1,ep
+#else
+ addi -20,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+#endif
+ jmp [r10]
+ .size __save_r25_r29,.-__save_r25_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r25_r29. */
+ .align 2
+ .globl __return_r25_r29
+ .type __return_r25_r29,@function
+__return_r25_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ addi 20,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[ep],r29
+ ld.w 4[ep],r28
+ ld.w 8[ep],r27
+ ld.w 12[ep],r26
+ ld.w 16[ep],r25
+ addi 20,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r25_r29,.-__return_r25_r29
+#endif /* L_save_25 */
+
+#ifdef L_save_26
+ .text
+ .align 2
+ .globl __save_r26_r29
+ .type __save_r26_r29,@function
+ /* Allocate space and save registers 26 .. 29 on the stack. */
+ /* Called via: jalr __save_r26_r29,r10. */
+__save_r26_r29:
+#ifdef __EP__
+ mov ep,r1
+ add -16,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ mov r1,ep
+#else
+ add -16,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+#endif
+ jmp [r10]
+ .size __save_r26_r29,.-__save_r26_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r26_r29. */
+ .align 2
+ .globl __return_r26_r29
+ .type __return_r26_r29,@function
+__return_r26_r29:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ addi 16,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ addi 16,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r26_r29,.-__return_r26_r29
+#endif /* L_save_26 */
+
+#ifdef L_save_27
+ .text
+ .align 2
+ .globl __save_r27_r29
+ .type __save_r27_r29,@function
+ /* Allocate space and save registers 27 .. 29 on the stack. */
+ /* Called via: jalr __save_r27_r29,r10. */
+__save_r27_r29:
+ add -12,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ jmp [r10]
+ .size __save_r27_r29,.-__save_r27_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r27_r29. */
+ .align 2
+ .globl __return_r27_r29
+ .type __return_r27_r29,@function
+__return_r27_r29:
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ add 12,sp
+ jmp [r31]
+ .size __return_r27_r29,.-__return_r27_r29
+#endif /* L_save_27 */
+
+#ifdef L_save_28
+ .text
+ .align 2
+ .globl __save_r28_r29
+ .type __save_r28_r29,@function
+ /* Allocate space and save registers 28,29 on the stack. */
+ /* Called via: jalr __save_r28_r29,r10. */
+__save_r28_r29:
+ add -8,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ jmp [r10]
+ .size __save_r28_r29,.-__save_r28_r29
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r28_r29. */
+ .align 2
+ .globl __return_r28_r29
+ .type __return_r28_r29,@function
+__return_r28_r29:
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ add 8,sp
+ jmp [r31]
+ .size __return_r28_r29,.-__return_r28_r29
+#endif /* L_save_28 */
+
+#ifdef L_save_29
+ .text
+ .align 2
+ .globl __save_r29
+ .type __save_r29,@function
+ /* Allocate space and save register 29 on the stack. */
+ /* Called via: jalr __save_r29,r10. */
+__save_r29:
+ add -4,sp
+ st.w r29,0[sp]
+ jmp [r10]
+ .size __save_r29,.-__save_r29
+
+ /* Restore saved register 29, deallocate stack and return to the user. */
+ /* Called via: jr __return_r29. */
+ .align 2
+ .globl __return_r29
+ .type __return_r29,@function
+__return_r29:
+ ld.w 0[sp],r29
+ add 4,sp
+ jmp [r31]
+ .size __return_r29,.-__return_r29
+#endif /* L_save_28 */
+
+#ifdef L_save_2c
+ .text
+ .align 2
+ .globl __save_r2_r31
+ .type __save_r2_r31,@function
+ /* Allocate space and save registers 20 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r2_r31,r10. */
+__save_r2_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -48,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r20,36[ep]
+ sst.w r2,40[ep]
+ sst.w r31,44[ep]
+ mov r1,ep
+#else
+ addi -48,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r21,32[sp]
+ st.w r20,36[sp]
+ st.w r2,40[sp]
+ st.w r31,44[sp]
+#endif
+ jmp [r10]
+ .size __save_r2_r31,.-__save_r2_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r20_r31. */
+ .align 2
+ .globl __return_r2_r31
+ .type __return_r2_r31,@function
+__return_r2_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r20
+ sld.w 40[ep],r2
+ sld.w 44[ep],r31
+ addi 48,sp,sp
+ mov r1,ep
+#else
+ ld.w 44[sp],r29
+ ld.w 40[sp],r28
+ ld.w 36[sp],r27
+ ld.w 32[sp],r26
+ ld.w 28[sp],r25
+ ld.w 24[sp],r24
+ ld.w 20[sp],r23
+ ld.w 16[sp],r22
+ ld.w 12[sp],r21
+ ld.w 8[sp],r20
+ ld.w 4[sp],r2
+ ld.w 0[sp],r31
+ addi 48,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r2_r31,.-__return_r2_r31
+#endif /* L_save_2c */
+
+#ifdef L_save_20c
+ .text
+ .align 2
+ .globl __save_r20_r31
+ .type __save_r20_r31,@function
+ /* Allocate space and save registers 20 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r20_r31,r10. */
+__save_r20_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -44,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r20,36[ep]
+ sst.w r31,40[ep]
+ mov r1,ep
+#else
+ addi -44,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r21,32[sp]
+ st.w r20,36[sp]
+ st.w r31,40[sp]
+#endif
+ jmp [r10]
+ .size __save_r20_r31,.-__save_r20_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r20_r31. */
+ .align 2
+ .globl __return_r20_r31
+ .type __return_r20_r31,@function
+__return_r20_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r20
+ sld.w 40[ep],r31
+ addi 44,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ ld.w 32[sp],r21
+ ld.w 36[sp],r20
+ ld.w 40[sp],r31
+ addi 44,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r20_r31,.-__return_r20_r31
+#endif /* L_save_20c */
+
+#ifdef L_save_21c
+ .text
+ .align 2
+ .globl __save_r21_r31
+ .type __save_r21_r31,@function
+ /* Allocate space and save registers 21 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r21_r31,r10. */
+__save_r21_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -40,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r21,32[ep]
+ sst.w r31,36[ep]
+ mov r1,ep
+ jmp [r10]
+#else
+ addi -40,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r21,32[sp]
+ st.w r31,36[sp]
+ jmp [r10]
+#endif
+ .size __save_r21_r31,.-__save_r21_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r21_r31. */
+ .align 2
+ .globl __return_r21_r31
+ .type __return_r21_r31,@function
+__return_r21_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r21
+ sld.w 36[ep],r31
+ addi 40,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ ld.w 32[sp],r21
+ ld.w 36[sp],r31
+ addi 40,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r21_r31,.-__return_r21_r31
+#endif /* L_save_21c */
+
+#ifdef L_save_22c
+ .text
+ .align 2
+ .globl __save_r22_r31
+ .type __save_r22_r31,@function
+ /* Allocate space and save registers 22 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r22_r31,r10. */
+__save_r22_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -36,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r22,28[ep]
+ sst.w r31,32[ep]
+ mov r1,ep
+#else
+ addi -36,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r22,28[sp]
+ st.w r31,32[sp]
+#endif
+ jmp [r10]
+ .size __save_r22_r31,.-__save_r22_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r22_r31. */
+ .align 2
+ .globl __return_r22_r31
+ .type __return_r22_r31,@function
+__return_r22_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r22
+ sld.w 32[ep],r31
+ addi 36,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r22
+ ld.w 32[sp],r31
+ addi 36,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r22_r31,.-__return_r22_r31
+#endif /* L_save_22c */
+
+#ifdef L_save_23c
+ .text
+ .align 2
+ .globl __save_r23_r31
+ .type __save_r23_r31,@function
+ /* Allocate space and save registers 23 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r23_r31,r10. */
+__save_r23_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -32,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r23,24[ep]
+ sst.w r31,28[ep]
+ mov r1,ep
+#else
+ addi -32,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r23,24[sp]
+ st.w r31,28[sp]
+#endif
+ jmp [r10]
+ .size __save_r23_r31,.-__save_r23_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r23_r31. */
+ .align 2
+ .globl __return_r23_r31
+ .type __return_r23_r31,@function
+__return_r23_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r23
+ sld.w 28[ep],r31
+ addi 32,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r23
+ ld.w 28[sp],r31
+ addi 32,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r23_r31,.-__return_r23_r31
+#endif /* L_save_23c */
+
+#ifdef L_save_24c
+ .text
+ .align 2
+ .globl __save_r24_r31
+ .type __save_r24_r31,@function
+ /* Allocate space and save registers 24 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r24_r31,r10. */
+__save_r24_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -28,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r24,20[ep]
+ sst.w r31,24[ep]
+ mov r1,ep
+#else
+ addi -28,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r24,20[sp]
+ st.w r31,24[sp]
+#endif
+ jmp [r10]
+ .size __save_r24_r31,.-__save_r24_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r24_r31. */
+ .align 2
+ .globl __return_r24_r31
+ .type __return_r24_r31,@function
+__return_r24_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r24
+ sld.w 24[ep],r31
+ addi 28,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r24
+ ld.w 24[sp],r31
+ addi 28,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r24_r31,.-__return_r24_r31
+#endif /* L_save_24c */
+
+#ifdef L_save_25c
+ .text
+ .align 2
+ .globl __save_r25_r31
+ .type __save_r25_r31,@function
+ /* Allocate space and save registers 25 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r25_r31,r10. */
+__save_r25_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -24,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r25,16[ep]
+ sst.w r31,20[ep]
+ mov r1,ep
+#else
+ addi -24,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r25,16[sp]
+ st.w r31,20[sp]
+#endif
+ jmp [r10]
+ .size __save_r25_r31,.-__save_r25_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r25_r31. */
+ .align 2
+ .globl __return_r25_r31
+ .type __return_r25_r31,@function
+__return_r25_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r25
+ sld.w 20[ep],r31
+ addi 24,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r25
+ ld.w 20[sp],r31
+ addi 24,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r25_r31,.-__return_r25_r31
+#endif /* L_save_25c */
+
+#ifdef L_save_26c
+ .text
+ .align 2
+ .globl __save_r26_r31
+ .type __save_r26_r31,@function
+ /* Allocate space and save registers 26 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r26_r31,r10. */
+__save_r26_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -20,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r26,12[ep]
+ sst.w r31,16[ep]
+ mov r1,ep
+#else
+ addi -20,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r26,12[sp]
+ st.w r31,16[sp]
+#endif
+ jmp [r10]
+ .size __save_r26_r31,.-__save_r26_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r26_r31. */
+ .align 2
+ .globl __return_r26_r31
+ .type __return_r26_r31,@function
+__return_r26_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r26
+ sld.w 16[ep],r31
+ addi 20,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r26
+ ld.w 16[sp],r31
+ addi 20,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r26_r31,.-__return_r26_r31
+#endif /* L_save_26c */
+
+#ifdef L_save_27c
+ .text
+ .align 2
+ .globl __save_r27_r31
+ .type __save_r27_r31,@function
+ /* Allocate space and save registers 27 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r27_r31,r10. */
+__save_r27_r31:
+#ifdef __EP__
+ mov ep,r1
+ addi -16,sp,sp
+ mov sp,ep
+ sst.w r29,0[ep]
+ sst.w r28,4[ep]
+ sst.w r27,8[ep]
+ sst.w r31,12[ep]
+ mov r1,ep
+#else
+ addi -16,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r27,8[sp]
+ st.w r31,12[sp]
+#endif
+ jmp [r10]
+ .size __save_r27_r31,.-__save_r27_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r27_r31. */
+ .align 2
+ .globl __return_r27_r31
+ .type __return_r27_r31,@function
+__return_r27_r31:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 0[ep],r29
+ sld.w 4[ep],r28
+ sld.w 8[ep],r27
+ sld.w 12[ep],r31
+ addi 16,sp,sp
+ mov r1,ep
+#else
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r27
+ ld.w 12[sp],r31
+ addi 16,sp,sp
+#endif
+ jmp [r31]
+ .size __return_r27_r31,.-__return_r27_r31
+#endif /* L_save_27c */
+
+#ifdef L_save_28c
+ .text
+ .align 2
+ .globl __save_r28_r31
+ .type __save_r28_r31,@function
+ /* Allocate space and save registers 28 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r28_r31,r10. */
+__save_r28_r31:
+ addi -12,sp,sp
+ st.w r29,0[sp]
+ st.w r28,4[sp]
+ st.w r31,8[sp]
+ jmp [r10]
+ .size __save_r28_r31,.-__save_r28_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r28_r31. */
+ .align 2
+ .globl __return_r28_r31
+ .type __return_r28_r31,@function
+__return_r28_r31:
+ ld.w 0[sp],r29
+ ld.w 4[sp],r28
+ ld.w 8[sp],r31
+ addi 12,sp,sp
+ jmp [r31]
+ .size __return_r28_r31,.-__return_r28_r31
+#endif /* L_save_28c */
+
+#ifdef L_save_29c
+ .text
+ .align 2
+ .globl __save_r29_r31
+ .type __save_r29_r31,@function
+ /* Allocate space and save registers 29 & 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r29_r31,r10. */
+__save_r29_r31:
+ addi -8,sp,sp
+ st.w r29,0[sp]
+ st.w r31,4[sp]
+ jmp [r10]
+ .size __save_r29_r31,.-__save_r29_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r29_r31. */
+ .align 2
+ .globl __return_r29_r31
+ .type __return_r29_r31,@function
+__return_r29_r31:
+ ld.w 0[sp],r29
+ ld.w 4[sp],r31
+ addi 8,sp,sp
+ jmp [r31]
+ .size __return_r29_r31,.-__return_r29_r31
+#endif /* L_save_29c */
+
+#ifdef L_save_31c
+ .text
+ .align 2
+ .globl __save_r31
+ .type __save_r31,@function
+ /* Allocate space and save register 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: jalr __save_r31,r10. */
+__save_r31:
+ addi -4,sp,sp
+ st.w r31,0[sp]
+ jmp [r10]
+ .size __save_r31,.-__save_r31
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: jr __return_r31. */
+ .align 2
+ .globl __return_r31
+ .type __return_r31,@function
+__return_r31:
+ ld.w 0[sp],r31
+ addi 4,sp,sp
+ jmp [r31]
+ .size __return_r31,.-__return_r31
+#endif /* L_save_31c */
+
+#ifdef L_save_interrupt
+ .text
+ .align 2
+ .globl __save_interrupt
+ .type __save_interrupt,@function
+ /* Save registers r1, r4 on stack and load up with expected values. */
+ /* Note, 20 bytes of stack have already been allocated. */
+ /* Called via: jalr __save_interrupt,r10. */
+__save_interrupt:
+ /* add -20,sp ; st.w r11,16[sp] ; st.w r10,12[sp] ; */
+ st.w ep,0[sp]
+ st.w gp,4[sp]
+ st.w r1,8[sp]
+ movhi hi(__ep),r0,ep
+ movea lo(__ep),ep,ep
+ movhi hi(__gp),r0,gp
+ movea lo(__gp),gp,gp
+ jmp [r10]
+ .size __save_interrupt,.-__save_interrupt
+
+ /* Restore saved registers, deallocate stack and return from the interrupt. */
+ /* Called via: jr __return_interrupt. */
+ .align 2
+ .globl __return_interrupt
+ .type __return_interrupt,@function
+__return_interrupt:
+ ld.w 0[sp],ep
+ ld.w 4[sp],gp
+ ld.w 8[sp],r1
+ ld.w 12[sp],r10
+ ld.w 16[sp],r11
+ addi 20,sp,sp
+ reti
+ .size __return_interrupt,.-__return_interrupt
+#endif /* L_save_interrupt */
+
+#ifdef L_save_all_interrupt
+ .text
+ .align 2
+ .globl __save_all_interrupt
+ .type __save_all_interrupt,@function
+ /* Save all registers except for those saved in __save_interrupt. */
+ /* Allocate enough stack for all of the registers & 16 bytes of space. */
+ /* Called via: jalr __save_all_interrupt,r10. */
+__save_all_interrupt:
+ addi -104,sp,sp
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sst.w r31,100[ep]
+ sst.w r2,96[ep]
+ sst.w gp,92[ep]
+ sst.w r6,88[ep]
+ sst.w r7,84[ep]
+ sst.w r8,80[ep]
+ sst.w r9,76[ep]
+ sst.w r11,72[ep]
+ sst.w r12,68[ep]
+ sst.w r13,64[ep]
+ sst.w r14,60[ep]
+ sst.w r15,56[ep]
+ sst.w r16,52[ep]
+ sst.w r17,48[ep]
+ sst.w r18,44[ep]
+ sst.w r19,40[ep]
+ sst.w r20,36[ep]
+ sst.w r21,32[ep]
+ sst.w r22,28[ep]
+ sst.w r23,24[ep]
+ sst.w r24,20[ep]
+ sst.w r25,16[ep]
+ sst.w r26,12[ep]
+ sst.w r27,8[ep]
+ sst.w r28,4[ep]
+ sst.w r29,0[ep]
+ mov r1,ep
+#else
+ st.w r31,100[sp]
+ st.w r2,96[sp]
+ st.w gp,92[sp]
+ st.w r6,88[sp]
+ st.w r7,84[sp]
+ st.w r8,80[sp]
+ st.w r9,76[sp]
+ st.w r11,72[sp]
+ st.w r12,68[sp]
+ st.w r13,64[sp]
+ st.w r14,60[sp]
+ st.w r15,56[sp]
+ st.w r16,52[sp]
+ st.w r17,48[sp]
+ st.w r18,44[sp]
+ st.w r19,40[sp]
+ st.w r20,36[sp]
+ st.w r21,32[sp]
+ st.w r22,28[sp]
+ st.w r23,24[sp]
+ st.w r24,20[sp]
+ st.w r25,16[sp]
+ st.w r26,12[sp]
+ st.w r27,8[sp]
+ st.w r28,4[sp]
+ st.w r29,0[sp]
+#endif
+ jmp [r10]
+ .size __save_all_interrupt,.-__save_all_interrupt
+
+ .globl __restore_all_interrupt
+ .type __restore_all_interrupt,@function
+ /* Restore all registers saved in __save_all_interrupt and
+ deallocate the stack space. */
+ /* Called via: jalr __restore_all_interrupt,r10. */
+__restore_all_interrupt:
+#ifdef __EP__
+ mov ep,r1
+ mov sp,ep
+ sld.w 100[ep],r31
+ sld.w 96[ep],r2
+ sld.w 92[ep],gp
+ sld.w 88[ep],r6
+ sld.w 84[ep],r7
+ sld.w 80[ep],r8
+ sld.w 76[ep],r9
+ sld.w 72[ep],r11
+ sld.w 68[ep],r12
+ sld.w 64[ep],r13
+ sld.w 60[ep],r14
+ sld.w 56[ep],r15
+ sld.w 52[ep],r16
+ sld.w 48[ep],r17
+ sld.w 44[ep],r18
+ sld.w 40[ep],r19
+ sld.w 36[ep],r20
+ sld.w 32[ep],r21
+ sld.w 28[ep],r22
+ sld.w 24[ep],r23
+ sld.w 20[ep],r24
+ sld.w 16[ep],r25
+ sld.w 12[ep],r26
+ sld.w 8[ep],r27
+ sld.w 4[ep],r28
+ sld.w 0[ep],r29
+ mov r1,ep
+#else
+ ld.w 100[sp],r31
+ ld.w 96[sp],r2
+ ld.w 92[sp],gp
+ ld.w 88[sp],r6
+ ld.w 84[sp],r7
+ ld.w 80[sp],r8
+ ld.w 76[sp],r9
+ ld.w 72[sp],r11
+ ld.w 68[sp],r12
+ ld.w 64[sp],r13
+ ld.w 60[sp],r14
+ ld.w 56[sp],r15
+ ld.w 52[sp],r16
+ ld.w 48[sp],r17
+ ld.w 44[sp],r18
+ ld.w 40[sp],r19
+ ld.w 36[sp],r20
+ ld.w 32[sp],r21
+ ld.w 28[sp],r22
+ ld.w 24[sp],r23
+ ld.w 20[sp],r24
+ ld.w 16[sp],r25
+ ld.w 12[sp],r26
+ ld.w 8[sp],r27
+ ld.w 4[sp],r28
+ ld.w 0[sp],r29
+#endif
+ addi 104,sp,sp
+ jmp [r10]
+ .size __restore_all_interrupt,.-__restore_all_interrupt
+#endif /* L_save_all_interrupt */
+
+#if defined __V850_CALLT__
+#if defined(__v850e__) || defined(__v850e1__) || defined(__v850e2__) || defined(__v850e2v3__) || defined(__v850e3v5__)
+#ifdef L_callt_save_r2_r29
+ /* Put these functions into the call table area. */
+ .call_table_text
+
+ /* Allocate space and save registers 2, 20 .. 29 on the stack. */
+ /* Called via: callt ctoff(__callt_save_r2_r29). */
+ .align 2
+.L_save_r2_r29:
+ add -4, sp
+ st.w r2, 0[sp]
+ prepare {r20 - r29}, 0
+ ctret
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: callt ctoff(__callt_return_r2_r29). */
+ .align 2
+.L_return_r2_r29:
+ dispose 0, {r20-r29}
+ ld.w 0[sp], r2
+ add 4, sp
+ jmp [r31]
+
+ /* Place the offsets of the start of these routines into the call table. */
+ .call_table_data
+
+ .global __callt_save_r2_r29
+ .type __callt_save_r2_r29,@function
+__callt_save_r2_r29: .short ctoff(.L_save_r2_r29)
+
+ .global __callt_return_r2_r29
+ .type __callt_return_r2_r29,@function
+__callt_return_r2_r29: .short ctoff(.L_return_r2_r29)
+
+#endif /* L_callt_save_r2_r29. */
+
+#ifdef L_callt_save_r2_r31
+ /* Put these functions into the call table area. */
+ .call_table_text
+
+ /* Allocate space and save registers 2 and 20 .. 29, 31 on the stack. */
+ /* Also allocate space for the argument save area. */
+ /* Called via: callt ctoff(__callt_save_r2_r31). */
+ .align 2
+.L_save_r2_r31:
+ add -4, sp
+ st.w r2, 0[sp]
+ prepare {r20 - r29, r31}, 0
+ ctret
+
+ /* Restore saved registers, deallocate stack and return to the user. */
+ /* Called via: callt ctoff(__callt_return_r2_r31). */
+ .align 2
+.L_return_r2_r31:
+ dispose 0, {r20 - r29, r31}
+ ld.w 0[sp], r2
+ addi 4, sp, sp
+ jmp [r31]
+
+ /* Place the offsets of the start of these routines into the call table. */
+ .call_table_data
+
+ .global __callt_save_r2_r31
+ .type __callt_save_r2_r31,@function
+__callt_save_r2_r31: .short ctoff(.L_save_r2_r31)
+
+ .global __callt_return_r2_r31
+ .type __callt_return_r2_r31,@function
+__callt_return_r2_r31: .short ctoff(.L_return_r2_r31)
+
+#endif /* L_callt_save_r2_r31 */
+
+#ifdef L_callt_save_interrupt
+ /* Put these functions into the call table area. */
+ .call_table_text
+
+ /* Save registers r1, ep, gp, r10 on stack and load up with expected values. */
+ /* Called via: callt ctoff(__callt_save_interrupt). */
+ .align 2
+.L_save_interrupt:
+ /* SP has already been moved before callt ctoff(_save_interrupt). */
+ /* R1,R10,R11,ctpc,ctpsw has alread been saved bofore callt ctoff(_save_interrupt). */
+ /* addi -28, sp, sp */
+ /* st.w r1, 24[sp] */
+ /* st.w r10, 12[sp] */
+ /* st.w r11, 16[sp] */
+ /* stsr ctpc, r10 */
+ /* st.w r10, 20[sp] */
+ /* stsr ctpsw, r10 */
+ /* st.w r10, 24[sp] */
+ st.w ep, 0[sp]
+ st.w gp, 4[sp]
+ st.w r1, 8[sp]
+ mov hilo(__ep),ep
+ mov hilo(__gp),gp
+ ctret
+
+ .call_table_text
+ /* Restore saved registers, deallocate stack and return from the interrupt. */
+ /* Called via: callt ctoff(__callt_restore_interrupt). */
+ .align 2
+ .globl __return_interrupt
+ .type __return_interrupt,@function
+.L_return_interrupt:
+ ld.w 24[sp], r1
+ ldsr r1, ctpsw
+ ld.w 20[sp], r1
+ ldsr r1, ctpc
+ ld.w 16[sp], r11
+ ld.w 12[sp], r10
+ ld.w 8[sp], r1
+ ld.w 4[sp], gp
+ ld.w 0[sp], ep
+ addi 28, sp, sp
+ reti
+
+ /* Place the offsets of the start of these routines into the call table. */
+ .call_table_data
+
+ .global __callt_save_interrupt
+ .type __callt_save_interrupt,@function
+__callt_save_interrupt: .short ctoff(.L_save_interrupt)
+
+ .global __callt_return_interrupt
+ .type __callt_return_interrupt,@function
+__callt_return_interrupt: .short ctoff(.L_return_interrupt)
+
+#endif /* L_callt_save_interrupt */
+
+#ifdef L_callt_save_all_interrupt
+ /* Put these functions into the call table area. */
+ .call_table_text
+
+ /* Save all registers except for those saved in __save_interrupt. */
+ /* Allocate enough stack for all of the registers & 16 bytes of space. */
+ /* Called via: callt ctoff(__callt_save_all_interrupt). */
+ .align 2
+.L_save_all_interrupt:
+ addi -60, sp, sp
+#ifdef __EP__
+ mov ep, r1
+ mov sp, ep
+ sst.w r2, 56[ep]
+ sst.w r5, 52[ep]
+ sst.w r6, 48[ep]
+ sst.w r7, 44[ep]
+ sst.w r8, 40[ep]
+ sst.w r9, 36[ep]
+ sst.w r11, 32[ep]
+ sst.w r12, 28[ep]
+ sst.w r13, 24[ep]
+ sst.w r14, 20[ep]
+ sst.w r15, 16[ep]
+ sst.w r16, 12[ep]
+ sst.w r17, 8[ep]
+ sst.w r18, 4[ep]
+ sst.w r19, 0[ep]
+ mov r1, ep
+#else
+ st.w r2, 56[sp]
+ st.w r5, 52[sp]
+ st.w r6, 48[sp]
+ st.w r7, 44[sp]
+ st.w r8, 40[sp]
+ st.w r9, 36[sp]
+ st.w r11, 32[sp]
+ st.w r12, 28[sp]
+ st.w r13, 24[sp]
+ st.w r14, 20[sp]
+ st.w r15, 16[sp]
+ st.w r16, 12[sp]
+ st.w r17, 8[sp]
+ st.w r18, 4[sp]
+ st.w r19, 0[sp]
+#endif
+ prepare {r20 - r29, r31}, 0
+ ctret
+
+ /* Restore all registers saved in __save_all_interrupt
+ deallocate the stack space. */
+ /* Called via: callt ctoff(__callt_restore_all_interrupt). */
+ .align 2
+.L_restore_all_interrupt:
+ dispose 0, {r20 - r29, r31}
+#ifdef __EP__
+ mov ep, r1
+ mov sp, ep
+ sld.w 0 [ep], r19
+ sld.w 4 [ep], r18
+ sld.w 8 [ep], r17
+ sld.w 12[ep], r16
+ sld.w 16[ep], r15
+ sld.w 20[ep], r14
+ sld.w 24[ep], r13
+ sld.w 28[ep], r12
+ sld.w 32[ep], r11
+ sld.w 36[ep], r9
+ sld.w 40[ep], r8
+ sld.w 44[ep], r7
+ sld.w 48[ep], r6
+ sld.w 52[ep], r5
+ sld.w 56[ep], r2
+ mov r1, ep
+#else
+ ld.w 0 [sp], r19
+ ld.w 4 [sp], r18
+ ld.w 8 [sp], r17
+ ld.w 12[sp], r16
+ ld.w 16[sp], r15
+ ld.w 20[sp], r14
+ ld.w 24[sp], r13
+ ld.w 28[sp], r12
+ ld.w 32[sp], r11
+ ld.w 36[sp], r9
+ ld.w 40[sp], r8
+ ld.w 44[sp], r7
+ ld.w 48[sp], r6
+ ld.w 52[sp], r5
+ ld.w 56[sp], r2
+#endif
+ addi 60, sp, sp
+ ctret
+
+ /* Place the offsets of the start of these routines into the call table. */
+ .call_table_data
+
+ .global __callt_save_all_interrupt
+ .type __callt_save_all_interrupt,@function
+__callt_save_all_interrupt: .short ctoff(.L_save_all_interrupt)
+
+ .global __callt_restore_all_interrupt
+ .type __callt_restore_all_interrupt,@function
+__callt_restore_all_interrupt: .short ctoff(.L_restore_all_interrupt)
+
+#endif /* L_callt_save_all_interrupt */
+
+
+#define MAKE_CALLT_FUNCS( START ) \
+ .call_table_text ;\
+ .align 2 ;\
+ /* Allocate space and save registers START .. r29 on the stack. */ ;\
+ /* Called via: callt ctoff(__callt_save_START_r29). */ ;\
+.L_save_##START##_r29: ;\
+ prepare { START - r29 }, 0 ;\
+ ctret ;\
+ ;\
+ /* Restore saved registers, deallocate stack and return. */ ;\
+ /* Called via: callt ctoff(__return_START_r29). */ ;\
+ .align 2 ;\
+.L_return_##START##_r29: ;\
+ dispose 0, { START - r29 }, r31 ;\
+ ;\
+ /* Place the offsets of the start of these funcs into the call table. */;\
+ .call_table_data ;\
+ ;\
+ .global __callt_save_##START##_r29 ;\
+ .type __callt_save_##START##_r29,@function ;\
+__callt_save_##START##_r29: .short ctoff(.L_save_##START##_r29 ) ;\
+ ;\
+ .global __callt_return_##START##_r29 ;\
+ .type __callt_return_##START##_r29,@function ;\
+__callt_return_##START##_r29: .short ctoff(.L_return_##START##_r29 )
+
+
+#define MAKE_CALLT_CFUNCS( START ) \
+ .call_table_text ;\
+ .align 2 ;\
+ /* Allocate space and save registers START .. r31 on the stack. */ ;\
+ /* Called via: callt ctoff(__callt_save_START_r31c). */ ;\
+.L_save_##START##_r31c: ;\
+ prepare { START - r29, r31}, 0 ;\
+ ctret ;\
+ ;\
+ /* Restore saved registers, deallocate stack and return. */ ;\
+ /* Called via: callt ctoff(__return_START_r31c). */ ;\
+ .align 2 ;\
+.L_return_##START##_r31c: ;\
+ dispose 0, { START - r29, r31}, r31 ;\
+ ;\
+ /* Place the offsets of the start of these funcs into the call table. */;\
+ .call_table_data ;\
+ ;\
+ .global __callt_save_##START##_r31c ;\
+ .type __callt_save_##START##_r31c,@function ;\
+__callt_save_##START##_r31c: .short ctoff(.L_save_##START##_r31c ) ;\
+ ;\
+ .global __callt_return_##START##_r31c ;\
+ .type __callt_return_##START##_r31c,@function ;\
+__callt_return_##START##_r31c: .short ctoff(.L_return_##START##_r31c )
+
+
+#ifdef L_callt_save_20
+ MAKE_CALLT_FUNCS (r20)
+#endif
+#ifdef L_callt_save_21
+ MAKE_CALLT_FUNCS (r21)
+#endif
+#ifdef L_callt_save_22
+ MAKE_CALLT_FUNCS (r22)
+#endif
+#ifdef L_callt_save_23
+ MAKE_CALLT_FUNCS (r23)
+#endif
+#ifdef L_callt_save_24
+ MAKE_CALLT_FUNCS (r24)
+#endif
+#ifdef L_callt_save_25
+ MAKE_CALLT_FUNCS (r25)
+#endif
+#ifdef L_callt_save_26
+ MAKE_CALLT_FUNCS (r26)
+#endif
+#ifdef L_callt_save_27
+ MAKE_CALLT_FUNCS (r27)
+#endif
+#ifdef L_callt_save_28
+ MAKE_CALLT_FUNCS (r28)
+#endif
+#ifdef L_callt_save_29
+ MAKE_CALLT_FUNCS (r29)
+#endif
+
+#ifdef L_callt_save_20c
+ MAKE_CALLT_CFUNCS (r20)
+#endif
+#ifdef L_callt_save_21c
+ MAKE_CALLT_CFUNCS (r21)
+#endif
+#ifdef L_callt_save_22c
+ MAKE_CALLT_CFUNCS (r22)
+#endif
+#ifdef L_callt_save_23c
+ MAKE_CALLT_CFUNCS (r23)
+#endif
+#ifdef L_callt_save_24c
+ MAKE_CALLT_CFUNCS (r24)
+#endif
+#ifdef L_callt_save_25c
+ MAKE_CALLT_CFUNCS (r25)
+#endif
+#ifdef L_callt_save_26c
+ MAKE_CALLT_CFUNCS (r26)
+#endif
+#ifdef L_callt_save_27c
+ MAKE_CALLT_CFUNCS (r27)
+#endif
+#ifdef L_callt_save_28c
+ MAKE_CALLT_CFUNCS (r28)
+#endif
+#ifdef L_callt_save_29c
+ MAKE_CALLT_CFUNCS (r29)
+#endif
+
+
+#ifdef L_callt_save_31c
+ .call_table_text
+ .align 2
+ /* Allocate space and save register r31 on the stack. */
+ /* Called via: callt ctoff(__callt_save_r31c). */
+.L_callt_save_r31c:
+ prepare {r31}, 0
+ ctret
+
+ /* Restore saved registers, deallocate stack and return. */
+ /* Called via: callt ctoff(__return_r31c). */
+ .align 2
+.L_callt_return_r31c:
+ dispose 0, {r31}, r31
+
+ /* Place the offsets of the start of these funcs into the call table. */
+ .call_table_data
+
+ .global __callt_save_r31c
+ .type __callt_save_r31c,@function
+__callt_save_r31c: .short ctoff(.L_callt_save_r31c)
+
+ .global __callt_return_r31c
+ .type __callt_return_r31c,@function
+__callt_return_r31c: .short ctoff(.L_callt_return_r31c)
+#endif
+
+#endif /* __v850e__ + */
+#endif /* __V850_CALLT__ */
+
+/* libgcc2 routines for NEC V850. */
+/* Double Integer Arithmetical Operation. */
+
+#ifdef L_negdi2
+ .text
+ .global ___negdi2
+ .type ___negdi2, @function
+___negdi2:
+ not r6, r10
+ add 1, r10
+ setf l, r6
+ not r7, r11
+ add r6, r11
+ jmp [lp]
+
+ .size ___negdi2,.-___negdi2
+#endif
+
+#ifdef L_cmpdi2
+ .text
+ .global ___cmpdi2
+ .type ___cmpdi2,@function
+___cmpdi2:
+ # Signed comparison bitween each high word.
+ cmp r9, r7
+ be .L_cmpdi_cmp_low
+ setf ge, r10
+ setf gt, r6
+ add r6, r10
+ jmp [lp]
+.L_cmpdi_cmp_low:
+ # Unsigned comparigon bitween each low word.
+ cmp r8, r6
+ setf nl, r10
+ setf h, r6
+ add r6, r10
+ jmp [lp]
+ .size ___cmpdi2, . - ___cmpdi2
+#endif
+
+#ifdef L_ucmpdi2
+ .text
+ .global ___ucmpdi2
+ .type ___ucmpdi2,@function
+___ucmpdi2:
+ cmp r9, r7 # Check if each high word are same.
+ bne .L_ucmpdi_check_psw
+ cmp r8, r6 # Compare the word.
+.L_ucmpdi_check_psw:
+ setf nl, r10 #
+ setf h, r6 #
+ add r6, r10 # Add the result of comparison NL and comparison H.
+ jmp [lp]
+ .size ___ucmpdi2, . - ___ucmpdi2
+#endif
+
+#ifdef L_muldi3
+ .text
+ .global ___muldi3
+ .type ___muldi3,@function
+___muldi3:
+#ifdef __v850__
+ jarl __save_r26_r31, r10
+ addi 16, sp, sp
+ mov r6, r28
+ shr 15, r28
+ movea lo(32767), r0, r14
+ and r14, r28
+ mov r8, r10
+ shr 15, r10
+ and r14, r10
+ mov r6, r19
+ shr 30, r19
+ mov r7, r12
+ shl 2, r12
+ or r12, r19
+ and r14, r19
+ mov r8, r13
+ shr 30, r13
+ mov r9, r12
+ shl 2, r12
+ or r12, r13
+ and r14, r13
+ mov r7, r11
+ shr 13, r11
+ and r14, r11
+ mov r9, r31
+ shr 13, r31
+ and r14, r31
+ mov r7, r29
+ shr 28, r29
+ and r14, r29
+ mov r9, r12
+ shr 28, r12
+ and r14, r12
+ and r14, r6
+ and r14, r8
+ mov r6, r14
+ mulh r8, r14
+ mov r6, r16
+ mulh r10, r16
+ mov r6, r18
+ mulh r13, r18
+ mov r6, r15
+ mulh r31, r15
+ mulh r12, r6
+ mov r28, r17
+ mulh r10, r17
+ add -16, sp
+ mov r28, r12
+ mulh r8, r12
+ add r17, r18
+ mov r28, r17
+ mulh r31, r17
+ add r12, r16
+ mov r28, r12
+ mulh r13, r12
+ add r17, r6
+ mov r19, r17
+ add r12, r15
+ mov r19, r12
+ mulh r8, r12
+ mulh r10, r17
+ add r12, r18
+ mov r19, r12
+ mulh r13, r12
+ add r17, r15
+ mov r11, r13
+ mulh r8, r13
+ add r12, r6
+ mov r11, r12
+ mulh r10, r12
+ add r13, r15
+ mulh r29, r8
+ add r12, r6
+ mov r16, r13
+ shl 15, r13
+ add r14, r13
+ mov r18, r12
+ shl 30, r12
+ mov r13, r26
+ add r12, r26
+ shr 15, r14
+ movhi hi(131071), r0, r12
+ movea lo(131071), r12, r13
+ and r13, r14
+ mov r16, r12
+ and r13, r12
+ add r12, r14
+ mov r18, r12
+ shl 15, r12
+ and r13, r12
+ add r12, r14
+ shr 17, r14
+ shr 17, r16
+ add r14, r16
+ shl 13, r15
+ shr 2, r18
+ add r18, r15
+ add r15, r16
+ mov r16, r27
+ add r8, r6
+ shl 28, r6
+ add r6, r27
+ mov r26, r10
+ mov r27, r11
+ jr __return_r26_r31
+#else /* defined(__v850e__) */
+ /* (Ahi << 32 + Alo) * (Bhi << 32 + Blo) */
+ /* r7 r6 r9 r8 */
+ mov r8, r10
+ mulu r7, r8, r0 /* Ahi * Blo */
+ mulu r6, r9, r0 /* Alo * Bhi */
+ mulu r6, r10, r11 /* Alo * Blo */
+ add r8, r11
+ add r9, r11
+ jmp [r31]
+#endif /* defined(__v850e__) */
+ .size ___muldi3, . - ___muldi3
+#endif
diff --git a/gcc-4.9/libgcc/config/v850/t-v850 b/gcc-4.9/libgcc/config/v850/t-v850
new file mode 100644
index 000000000..b61703ace
--- /dev/null
+++ b/gcc-4.9/libgcc/config/v850/t-v850
@@ -0,0 +1,60 @@
+LIB1ASMSRC = v850/lib1funcs.S
+LIB1ASMFUNCS = _mulsi3 \
+ _divsi3 \
+ _udivsi3 \
+ _modsi3 \
+ _umodsi3 \
+ _save_2 \
+ _save_20 \
+ _save_21 \
+ _save_22 \
+ _save_23 \
+ _save_24 \
+ _save_25 \
+ _save_26 \
+ _save_27 \
+ _save_28 \
+ _save_29 \
+ _save_2c \
+ _save_20c \
+ _save_21c \
+ _save_22c \
+ _save_23c \
+ _save_24c \
+ _save_25c \
+ _save_26c \
+ _save_27c \
+ _save_28c \
+ _save_29c \
+ _save_31c \
+ _save_interrupt \
+ _save_all_interrupt \
+ _callt_save_20 \
+ _callt_save_21 \
+ _callt_save_22 \
+ _callt_save_23 \
+ _callt_save_24 \
+ _callt_save_25 \
+ _callt_save_26 \
+ _callt_save_27 \
+ _callt_save_28 \
+ _callt_save_29 \
+ _callt_save_20c \
+ _callt_save_21c \
+ _callt_save_22c \
+ _callt_save_23c \
+ _callt_save_24c \
+ _callt_save_25c \
+ _callt_save_26c \
+ _callt_save_27c \
+ _callt_save_28c \
+ _callt_save_29c \
+ _callt_save_31c \
+ _callt_save_interrupt \
+ _callt_save_all_interrupt \
+ _callt_save_r2_r29 \
+ _callt_save_r2_r31 \
+ _negdi2 \
+ _cmpdi2 \
+ _ucmpdi2 \
+ _muldi3
diff --git a/gcc-4.9/libgcc/config/vax/lib1funcs.S b/gcc-4.9/libgcc/config/vax/lib1funcs.S
new file mode 100644
index 000000000..70faf22e7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/vax/lib1funcs.S
@@ -0,0 +1,92 @@
+/* Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ This file is part of GCC.
+ Contributed by Maciej W. Rozycki <macro@linux-mips.org>.
+
+ This file is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef L_udivsi3
+ .text
+ .globl __udivsi3
+ .type __udivsi3, @function
+__udivsi3:
+ .word 0
+ movl 8(%ap), %r1
+ blss 0f /* Check bit #31 of divisor. */
+ movl 4(%ap), %r2
+ blss 1f /* Check bit #31 of dividend. */
+
+ /* Both zero, do a standard division. */
+
+ divl3 %r1, %r2, %r0
+ ret
+
+ /* MSB of divisor set, only 1 or 0 may result. */
+0:
+ decl %r1
+ clrl %r0
+ cmpl %r1, 4(%ap)
+ adwc $0, %r0
+ ret
+
+ /* MSB of dividend set, do an extended division. */
+1:
+ clrl %r3
+ ediv %r1, %r2, %r0, %r3
+ ret
+ .size __udivsi3, . - __udivsi3
+ .previous
+#endif
+
+#ifdef L_umodsi3
+ .text
+ .globl __umodsi3
+ .type __umodsi3, @function
+__umodsi3:
+ .word 0
+ movl 8(%ap), %r1
+ blss 0f /* Check bit #31 of divisor. */
+ movl 4(%ap), %r2
+ blss 1f /* Check bit #31 of dividend. */
+
+ /* Both zero, do a standard division. */
+
+ divl3 %r1, %r2, %r0
+ mull2 %r0, %r1
+ subl3 %r1, %r2, %r0
+ ret
+
+ /* MSB of divisor set, subtract the divisor at most once. */
+0:
+ movl 4(%ap), %r2
+ clrl %r0
+ cmpl %r2, %r1
+ sbwc $0, %r0
+ bicl2 %r0, %r1
+ subl3 %r1, %r2, %r0
+ ret
+
+ /* MSB of dividend set, do an extended division. */
+1:
+ clrl %r3
+ ediv %r1, %r2, %r3, %r0
+ ret
+ .size __umodsi3, . - __umodsi3
+ .previous
+#endif
diff --git a/gcc-4.9/libgcc/config/vax/t-linux b/gcc-4.9/libgcc/config/vax/t-linux
new file mode 100644
index 000000000..17929c871
--- /dev/null
+++ b/gcc-4.9/libgcc/config/vax/t-linux
@@ -0,0 +1,2 @@
+LIB1ASMSRC = vax/lib1funcs.S
+LIB1ASMFUNCS = _udivsi3 _umodsi3
diff --git a/gcc-4.9/libgcc/config/vms/t-vms b/gcc-4.9/libgcc/config/vms/t-vms
new file mode 100644
index 000000000..21e09ff4a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/vms/t-vms
@@ -0,0 +1,3 @@
+# Assemble startup file.
+crt0.o: $(srcdir)/config/vms/vms-ucrt0.c
+ $(gcc_compile) -mpointer-size=64 -c $<
diff --git a/gcc-4.9/libgcc/config/vms/vms-ucrt0.c b/gcc-4.9/libgcc/config/vms/vms-ucrt0.c
new file mode 100644
index 000000000..d427a33f2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/vms/vms-ucrt0.c
@@ -0,0 +1,142 @@
+/* VMS crt0 returning Unix style condition codes.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Douglas B. Rupp (rupp@gnat.com).
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+/* Sanity check. */
+#if __INITIAL_POINTER_SIZE != 64
+#error "vms-ucrt0.c must be compiled with -mpointer-size=64"
+#endif
+
+/* Lots of cheat to handle 32bits/64bits pointer conversions.
+ We use 'long long' for 64 bits pointers and 'int' for 32 bits pointers. */
+
+extern void decc$main (void *, void *, void *, void *, unsigned int,
+ unsigned int, int *, int *, int *);
+extern int main (int, char **, char **);
+extern int _malloc32 (int);
+
+#ifdef __ia64__
+#define MAIN_ASM_NAME asm ("ELF$TFRADR")
+#else
+#define MAIN_ASM_NAME
+#endif
+
+int __main (void *, void *, void *, void *,
+ unsigned int, unsigned int) MAIN_ASM_NAME;
+
+/* From errnodef.h, but we need to emulate the globalval. */
+extern int C$_EXIT1;
+
+/* From stsdef.h */
+#define STS$V_MSG_NO 0x03
+#define STS$M_INHIB_MSG 0x10000000
+/* Symbol defined while main() is compiled to record the flags used.
+ (Note that the symbol defines the value, ie extract the bits from the
+ address).
+ bit 0 set for 64 bit pointers
+ bit 1 set for posix return value. */
+extern char __gcc_main_flags;
+
+/* From ssdef.h */
+#define SS$_NORMAL 1
+#define MAIN_FLAG_64BIT (1 << 0)
+#define MAIN_FLAG_POSIX (1 << 1)
+
+int
+__main (void *progxfer, void *cli_util, void *imghdr, void *image_file_desc,
+ unsigned int linkflag, unsigned int cliflag)
+{
+ int argc;
+ int argv;
+ int envp;
+ int status;
+ char **argv64;
+ char **envp64;
+ unsigned int flags = (unsigned __int64)&__gcc_main_flags;
+
+ /* The argv and envp arrays are 32 bits pointers to 32 bits pointers. */
+ decc$main (progxfer, cli_util, imghdr, image_file_desc,
+ linkflag, cliflag, &argc, &argv, &envp);
+
+ if (flags & MAIN_FLAG_64BIT)
+ {
+ int i;
+
+ /* Reallocate argv and envp with 64 bit pointers. */
+ argv64 = (char **) _malloc32 (sizeof (char *) * (argc + 1));
+
+ for (i = 0; i < argc; i++)
+ argv64[i] = (char *) (__int64)(((int *) (__int64) argv)[i]);
+
+ argv64[argc] = NULL;
+
+ for (i = 0; ((int *) (__int64) envp)[i]; i++)
+ ;
+ envp64 = (char **) _malloc32 (sizeof (char *) * (i + 1));
+
+ for (i = 0; ((int *) (__int64) envp)[i]; i++)
+ envp64[i] = (char *)(__int64)(((int *) (__int64) envp)[i]);
+
+ envp64[i] = NULL;
+ }
+ else
+ {
+ argv64 = (char **)(__int64)argv;
+ envp64 = (char **)(__int64)envp;
+ }
+
+ status = main (argc, argv64, envp64);
+
+ if (flags & MAIN_FLAG_POSIX)
+ {
+ /* Map into a range of 0 - 255. */
+ status &= 255;
+
+ if (status != 0)
+ {
+ int save_status = status;
+
+ status = (__int64) &C$_EXIT1 + ((status - 1) << STS$V_MSG_NO);
+
+ /* An exit failure status requires a "severe" error. All
+ status values are defined in errno with a successful (1)
+ severity but can be changed to an error (2) severity by
+ adding 1. In addition for compatibility with UNIX exit()
+ routines we inhibit a run-time error message from being
+ generated on exit(1). */
+
+ if (save_status == 1)
+ {
+ status++;
+ status |= STS$M_INHIB_MSG;
+ }
+ }
+ else
+ status = SS$_NORMAL;
+ }
+
+ return status;
+}
diff --git a/gcc-4.9/libgcc/config/vxlib-tls.c b/gcc-4.9/libgcc/config/vxlib-tls.c
new file mode 100644
index 000000000..e22a88b1a
--- /dev/null
+++ b/gcc-4.9/libgcc/config/vxlib-tls.c
@@ -0,0 +1,370 @@
+/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Contributed by Zack Weinberg <zack@codesourcery.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Threads compatibility routines for libgcc2 for VxWorks.
+ These are out-of-line routines called from gthr-vxworks.h.
+
+ This file provides the TLS related support routines, calling specific
+ VxWorks kernel entry points for this purpose. The base VxWorks 5.x kernels
+ don't feature these entry points, and we provide gthr_supp_vxw_5x.c as an
+ option to fill this gap. Asking users to rebuild a kernel is not to be
+ taken lightly, still, so we have isolated these routines from the rest of
+ vxlib to ensure that the kernel dependencies are only dragged when really
+ necessary. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "gthr.h"
+
+#if defined(__GTHREADS)
+#include <vxWorks.h>
+#ifndef __RTP__
+#include <vxLib.h>
+#endif
+#include <taskLib.h>
+#ifndef __RTP__
+#include <taskHookLib.h>
+#else
+# include <errno.h>
+#endif
+
+/* Thread-local storage.
+
+ We reserve a field in the TCB to point to a dynamically allocated
+ array which is used to store TLS values. A TLS key is simply an
+ offset in this array. The exact location of the TCB field is not
+ known to this code nor to vxlib.c -- all access to it indirects
+ through the routines __gthread_get_tls_data and
+ __gthread_set_tls_data, which are provided by the VxWorks kernel.
+
+ There is also a global array which records which keys are valid and
+ which have destructors.
+
+ A task delete hook is installed to execute key destructors. The
+ routines __gthread_enter_tls_dtor_context and
+ __gthread_leave_tls_dtor_context, which are also provided by the
+ kernel, ensure that it is safe to call free() on memory allocated
+ by the task being deleted. (This is a no-op on VxWorks 5, but
+ a major undertaking on AE.)
+
+ The task delete hook is only installed when at least one thread
+ has TLS data. This is a necessary precaution, to allow this module
+ to be unloaded - a module with a hook can not be removed.
+
+ Since this interface is used to allocate only a small number of
+ keys, the table size is small and static, which simplifies the
+ code quite a bit. Revisit this if and when it becomes necessary. */
+
+#define MAX_KEYS 4
+
+/* This is the structure pointed to by the pointer returned
+ by __gthread_get_tls_data. */
+struct tls_data
+{
+ int *owner;
+ void *values[MAX_KEYS];
+ unsigned int generation[MAX_KEYS];
+};
+
+/* To make sure we only delete TLS data associated with this object,
+ include a pointer to a local variable in the TLS data object. */
+static int self_owner;
+
+/* Flag to check whether the delete hook is installed. Once installed
+ it is only removed when unloading this module. */
+static volatile int delete_hook_installed;
+
+/* kernel provided routines */
+extern void *__gthread_get_tls_data (void);
+extern void __gthread_set_tls_data (void *data);
+
+extern void __gthread_enter_tls_dtor_context (void);
+extern void __gthread_leave_tls_dtor_context (void);
+
+#ifndef __RTP__
+
+extern void *__gthread_get_tsd_data (WIND_TCB *tcb);
+extern void __gthread_set_tsd_data (WIND_TCB *tcb, void *data);
+extern void __gthread_enter_tsd_dtor_context (WIND_TCB *tcb);
+extern void __gthread_leave_tsd_dtor_context (WIND_TCB *tcb);
+
+#endif /* __RTP__ */
+
+/* This is a global structure which records all of the active keys.
+
+ A key is potentially valid (i.e. has been handed out by
+ __gthread_key_create) iff its generation count in this structure is
+ even. In that case, the matching entry in the dtors array is a
+ routine to be called when a thread terminates with a valid,
+ non-NULL specific value for that key.
+
+ A key is actually valid in a thread T iff the generation count
+ stored in this structure is equal to the generation count stored in
+ T's specific-value structure. */
+
+typedef void (*tls_dtor) (void *);
+
+struct tls_keys
+{
+ tls_dtor dtor[MAX_KEYS];
+ unsigned int generation[MAX_KEYS];
+};
+
+#define KEY_VALID_P(key) !(tls_keys.generation[key] & 1)
+
+/* Note: if MAX_KEYS is increased, this initializer must be updated
+ to match. All the generation counts begin at 1, which means no
+ key is valid. */
+static struct tls_keys tls_keys =
+{
+ { 0, 0, 0, 0 },
+ { 1, 1, 1, 1 }
+};
+
+/* This lock protects the tls_keys structure. */
+static __gthread_mutex_t tls_lock;
+
+static __gthread_once_t tls_init_guard = __GTHREAD_ONCE_INIT;
+
+/* Internal routines. */
+
+/* The task TCB has just been deleted. Call the destructor
+ function for each TLS key that has both a destructor and
+ a non-NULL specific value in this thread.
+
+ This routine does not need to take tls_lock; the generation
+ count protects us from calling a stale destructor. It does
+ need to read tls_keys.dtor[key] atomically. */
+
+static void
+tls_delete_hook (void *tcb ATTRIBUTE_UNUSED)
+{
+ struct tls_data *data;
+ __gthread_key_t key;
+
+#ifdef __RTP__
+ data = __gthread_get_tls_data ();
+#else
+ /* In kernel mode, we can be called in the context of the thread
+ doing the killing, so must use the TCB to determine the data of
+ the thread being killed. */
+ data = __gthread_get_tsd_data (tcb);
+#endif
+
+ if (data && data->owner == &self_owner)
+ {
+#ifdef __RTP__
+ __gthread_enter_tls_dtor_context ();
+#else
+ __gthread_enter_tsd_dtor_context (tcb);
+#endif
+ for (key = 0; key < MAX_KEYS; key++)
+ {
+ if (data->generation[key] == tls_keys.generation[key])
+ {
+ tls_dtor dtor = tls_keys.dtor[key];
+
+ if (dtor)
+ dtor (data->values[key]);
+ }
+ }
+ free (data);
+#ifdef __RTP__
+ __gthread_leave_tls_dtor_context ();
+#else
+ __gthread_leave_tsd_dtor_context (tcb);
+#endif
+
+#ifdef __RTP__
+ __gthread_set_tls_data (0);
+#else
+ __gthread_set_tsd_data (tcb, 0);
+#endif
+ }
+}
+
+/* Initialize global data used by the TLS system. */
+static void
+tls_init (void)
+{
+ __GTHREAD_MUTEX_INIT_FUNCTION (&tls_lock);
+}
+
+static void tls_destructor (void) __attribute__ ((destructor));
+static void
+tls_destructor (void)
+{
+#ifdef __RTP__
+ /* All threads but this one should have exited by now. */
+ tls_delete_hook (NULL);
+#endif
+ /* Unregister the hook. */
+ if (delete_hook_installed)
+ taskDeleteHookDelete ((FUNCPTR)tls_delete_hook);
+
+ if (tls_init_guard.done && __gthread_mutex_lock (&tls_lock) != ERROR)
+ semDelete (tls_lock);
+}
+
+/* External interface */
+
+/* Store in KEYP a value which can be passed to __gthread_setspecific/
+ __gthread_getspecific to store and retrieve a value which is
+ specific to each calling thread. If DTOR is not NULL, it will be
+ called when a thread terminates with a non-NULL specific value for
+ this key, with the value as its sole argument. */
+
+int
+__gthread_key_create (__gthread_key_t *keyp, tls_dtor dtor)
+{
+ __gthread_key_t key;
+
+ __gthread_once (&tls_init_guard, tls_init);
+
+ if (__gthread_mutex_lock (&tls_lock) == ERROR)
+ return errno;
+
+ for (key = 0; key < MAX_KEYS; key++)
+ if (!KEY_VALID_P (key))
+ goto found_slot;
+
+ /* no room */
+ __gthread_mutex_unlock (&tls_lock);
+ return EAGAIN;
+
+ found_slot:
+ tls_keys.generation[key]++; /* making it even */
+ tls_keys.dtor[key] = dtor;
+ *keyp = key;
+ __gthread_mutex_unlock (&tls_lock);
+ return 0;
+}
+
+/* Invalidate KEY; it can no longer be used as an argument to
+ setspecific/getspecific. Note that this does NOT call destructor
+ functions for any live values for this key. */
+int
+__gthread_key_delete (__gthread_key_t key)
+{
+ if (key >= MAX_KEYS)
+ return EINVAL;
+
+ __gthread_once (&tls_init_guard, tls_init);
+
+ if (__gthread_mutex_lock (&tls_lock) == ERROR)
+ return errno;
+
+ if (!KEY_VALID_P (key))
+ {
+ __gthread_mutex_unlock (&tls_lock);
+ return EINVAL;
+ }
+
+ tls_keys.generation[key]++; /* making it odd */
+ tls_keys.dtor[key] = 0;
+
+ __gthread_mutex_unlock (&tls_lock);
+ return 0;
+}
+
+/* Retrieve the thread-specific value for KEY. If it has never been
+ set in this thread, or KEY is invalid, returns NULL.
+
+ It does not matter if this function races with key_create or
+ key_delete; the worst that can happen is you get a value other than
+ the one that a serialized implementation would have provided. */
+
+void *
+__gthread_getspecific (__gthread_key_t key)
+{
+ struct tls_data *data;
+
+ if (key >= MAX_KEYS)
+ return 0;
+
+ data = __gthread_get_tls_data ();
+
+ if (!data)
+ return 0;
+
+ if (data->generation[key] != tls_keys.generation[key])
+ return 0;
+
+ return data->values[key];
+}
+
+/* Set the thread-specific value for KEY. If KEY is invalid, or
+ memory allocation fails, returns -1, otherwise 0.
+
+ The generation count protects this function against races with
+ key_create/key_delete; the worst thing that can happen is that a
+ value is successfully stored into a dead generation (and then
+ immediately becomes invalid). However, we do have to make sure
+ to read tls_keys.generation[key] atomically. */
+
+int
+__gthread_setspecific (__gthread_key_t key, void *value)
+{
+ struct tls_data *data;
+ unsigned int generation;
+
+ if (key >= MAX_KEYS)
+ return EINVAL;
+
+ data = __gthread_get_tls_data ();
+ if (!data)
+ {
+ if (!delete_hook_installed)
+ {
+ /* Install the delete hook. */
+ if (__gthread_mutex_lock (&tls_lock) == ERROR)
+ return ENOMEM;
+ if (!delete_hook_installed)
+ {
+ taskDeleteHookAdd ((FUNCPTR)tls_delete_hook);
+ delete_hook_installed = 1;
+ }
+ __gthread_mutex_unlock (&tls_lock);
+ }
+
+ data = malloc (sizeof (struct tls_data));
+ if (!data)
+ return ENOMEM;
+
+ memset (data, 0, sizeof (struct tls_data));
+ data->owner = &self_owner;
+ __gthread_set_tls_data (data);
+ }
+
+ generation = tls_keys.generation[key];
+
+ if (generation & 1)
+ return EINVAL;
+
+ data->generation[key] = generation;
+ data->values[key] = value;
+
+ return 0;
+}
+#endif /* __GTHREADS */
diff --git a/gcc-4.9/libgcc/config/vxlib.c b/gcc-4.9/libgcc/config/vxlib.c
new file mode 100644
index 000000000..8fddc9a86
--- /dev/null
+++ b/gcc-4.9/libgcc/config/vxlib.c
@@ -0,0 +1,95 @@
+/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Contributed by Zack Weinberg <zack@codesourcery.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Threads compatibility routines for libgcc2 for VxWorks.
+ These are out-of-line routines called from gthr-vxworks.h. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "gthr.h"
+
+#if defined(__GTHREADS)
+#include <vxWorks.h>
+#ifndef __RTP__
+#include <vxLib.h>
+#endif
+#include <taskLib.h>
+#ifndef __RTP__
+#include <taskHookLib.h>
+#else
+# include <errno.h>
+#endif
+
+/* Init-once operation.
+
+ This would be a clone of the implementation from gthr-solaris.h,
+ except that we have a bootstrap problem - the whole point of this
+ exercise is to prevent double initialization, but if two threads
+ are racing with each other, once->mutex is liable to be initialized
+ by both. Then each thread will lock its own mutex, and proceed to
+ call the initialization routine.
+
+ So instead we use a bare atomic primitive (vxTas()) to handle
+ mutual exclusion. Threads losing the race then busy-wait, calling
+ taskDelay() to yield the processor, until the initialization is
+ completed. Inefficient, but reliable. */
+
+int
+__gthread_once (__gthread_once_t *guard, void (*func)(void))
+{
+ if (guard->done)
+ return 0;
+
+#ifdef __RTP__
+ __gthread_lock_library ();
+#else
+ while (!vxTas ((void *)&guard->busy))
+ {
+#ifdef __PPC__
+ /* This can happen on powerpc, which is using all 32 bits
+ of the gthread_once_t structure. */
+ if (guard->done)
+ return;
+#endif
+ taskDelay (1);
+ }
+#endif
+
+ /* Only one thread at a time gets here. Check ->done again, then
+ go ahead and call func() if no one has done it yet. */
+ if (!guard->done)
+ {
+ func ();
+ guard->done = 1;
+ }
+
+#ifdef __RTP__
+ __gthread_unlock_library ();
+#else
+ guard->busy = 0;
+#endif
+ return 0;
+}
+
+#endif /* __GTHREADS */
diff --git a/gcc-4.9/libgcc/config/xtensa/crti.S b/gcc-4.9/libgcc/config/xtensa/crti.S
new file mode 100644
index 000000000..13e5e7ed9
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/crti.S
@@ -0,0 +1,51 @@
+# Start .init and .fini sections.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# This file just makes a stack frame for the contents of the .fini and
+# .init sections. Users may put any desired instructions in those
+# sections.
+
+#include "xtensa-config.h"
+
+ .section .init
+ .globl _init
+ .type _init,@function
+ .align 4
+_init:
+#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
+ entry sp, 64
+#else
+ addi sp, sp, -32
+ s32i a0, sp, 0
+#endif
+
+ .section .fini
+ .globl _fini
+ .type _fini,@function
+ .align 4
+_fini:
+#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
+ entry sp, 64
+#else
+ addi sp, sp, -32
+ s32i a0, sp, 0
+#endif
diff --git a/gcc-4.9/libgcc/config/xtensa/crtn.S b/gcc-4.9/libgcc/config/xtensa/crtn.S
new file mode 100644
index 000000000..fda453b97
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/crtn.S
@@ -0,0 +1,46 @@
+# End of .init and .fini sections.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the GCC Runtime Library Exception, version
+# 3.1, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License and
+# a copy of the GCC Runtime Library Exception along with this program;
+# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+# This file just makes sure that the .fini and .init sections do in
+# fact return. Users may put any desired instructions in those sections.
+# This file is the last thing linked into any executable.
+
+#include "xtensa-config.h"
+
+ .section .init
+#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
+ retw
+#else
+ l32i a0, sp, 0
+ addi sp, sp, 32
+ ret
+#endif
+
+ .section .fini
+#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
+ retw
+#else
+ l32i a0, sp, 0
+ addi sp, sp, 32
+ ret
+#endif
diff --git a/gcc-4.9/libgcc/config/xtensa/ieee754-df.S b/gcc-4.9/libgcc/config/xtensa/ieee754-df.S
new file mode 100644
index 000000000..3582338ac
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/ieee754-df.S
@@ -0,0 +1,2388 @@
+/* IEEE-754 double-precision functions for Xtensa
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __XTENSA_EB__
+#define xh a2
+#define xl a3
+#define yh a4
+#define yl a5
+#else
+#define xh a3
+#define xl a2
+#define yh a5
+#define yl a4
+#endif
+
+/* Warning! The branch displacements for some Xtensa branch instructions
+ are quite small, and this code has been carefully laid out to keep
+ branch targets in range. If you change anything, be sure to check that
+ the assembler is not relaxing anything to branch over a jump. */
+
+#ifdef L_negdf2
+
+ .align 4
+ .global __negdf2
+ .type __negdf2, @function
+__negdf2:
+ leaf_entry sp, 16
+ movi a4, 0x80000000
+ xor xh, xh, a4
+ leaf_return
+
+#endif /* L_negdf2 */
+
+#ifdef L_addsubdf3
+
+ /* Addition */
+__adddf3_aux:
+
+ /* Handle NaNs and Infinities. (This code is placed before the
+ start of the function just to keep it in range of the limited
+ branch displacements.) */
+
+.Ladd_xnan_or_inf:
+ /* If y is neither Infinity nor NaN, return x. */
+ bnall yh, a6, 1f
+ /* If x is a NaN, return it. Otherwise, return y. */
+ slli a7, xh, 12
+ or a7, a7, xl
+ beqz a7, .Ladd_ynan_or_inf
+1: leaf_return
+
+.Ladd_ynan_or_inf:
+ /* Return y. */
+ mov xh, yh
+ mov xl, yl
+ leaf_return
+
+.Ladd_opposite_signs:
+ /* Operand signs differ. Do a subtraction. */
+ slli a7, a6, 11
+ xor yh, yh, a7
+ j .Lsub_same_sign
+
+ .align 4
+ .global __adddf3
+ .type __adddf3, @function
+__adddf3:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+
+ /* Check if the two operands have the same sign. */
+ xor a7, xh, yh
+ bltz a7, .Ladd_opposite_signs
+
+.Ladd_same_sign:
+ /* Check if either exponent == 0x7ff (i.e., NaN or Infinity). */
+ ball xh, a6, .Ladd_xnan_or_inf
+ ball yh, a6, .Ladd_ynan_or_inf
+
+ /* Compare the exponents. The smaller operand will be shifted
+ right by the exponent difference and added to the larger
+ one. */
+ extui a7, xh, 20, 12
+ extui a8, yh, 20, 12
+ bltu a7, a8, .Ladd_shiftx
+
+.Ladd_shifty:
+ /* Check if the smaller (or equal) exponent is zero. */
+ bnone yh, a6, .Ladd_yexpzero
+
+ /* Replace yh sign/exponent with 0x001. */
+ or yh, yh, a6
+ slli yh, yh, 11
+ srli yh, yh, 11
+
+.Ladd_yexpdiff:
+ /* Compute the exponent difference. Optimize for difference < 32. */
+ sub a10, a7, a8
+ bgeui a10, 32, .Ladd_bigshifty
+
+ /* Shift yh/yl right by the exponent difference. Any bits that are
+ shifted out of yl are saved in a9 for rounding the result. */
+ ssr a10
+ movi a9, 0
+ src a9, yl, a9
+ src yl, yh, yl
+ srl yh, yh
+
+.Ladd_addy:
+ /* Do the 64-bit addition. */
+ add xl, xl, yl
+ add xh, xh, yh
+ bgeu xl, yl, 1f
+ addi xh, xh, 1
+1:
+ /* Check if the add overflowed into the exponent. */
+ extui a10, xh, 20, 12
+ beq a10, a7, .Ladd_round
+ mov a8, a7
+ j .Ladd_carry
+
+.Ladd_yexpzero:
+ /* y is a subnormal value. Replace its sign/exponent with zero,
+ i.e., no implicit "1.0", and increment the apparent exponent
+ because subnormals behave as if they had the minimum (nonzero)
+ exponent. Test for the case when both exponents are zero. */
+ slli yh, yh, 12
+ srli yh, yh, 12
+ bnone xh, a6, .Ladd_bothexpzero
+ addi a8, a8, 1
+ j .Ladd_yexpdiff
+
+.Ladd_bothexpzero:
+ /* Both exponents are zero. Handle this as a special case. There
+ is no need to shift or round, and the normal code for handling
+ a carry into the exponent field will not work because it
+ assumes there is an implicit "1.0" that needs to be added. */
+ add xl, xl, yl
+ add xh, xh, yh
+ bgeu xl, yl, 1f
+ addi xh, xh, 1
+1: leaf_return
+
+.Ladd_bigshifty:
+ /* Exponent difference > 64 -- just return the bigger value. */
+ bgeui a10, 64, 1b
+
+ /* Shift yh/yl right by the exponent difference. Any bits that are
+ shifted out are saved in a9 for rounding the result. */
+ ssr a10
+ sll a11, yl /* lost bits shifted out of yl */
+ src a9, yh, yl
+ srl yl, yh
+ movi yh, 0
+ beqz a11, .Ladd_addy
+ or a9, a9, a10 /* any positive, nonzero value will work */
+ j .Ladd_addy
+
+.Ladd_xexpzero:
+ /* Same as "yexpzero" except skip handling the case when both
+ exponents are zero. */
+ slli xh, xh, 12
+ srli xh, xh, 12
+ addi a7, a7, 1
+ j .Ladd_xexpdiff
+
+.Ladd_shiftx:
+ /* Same thing as the "shifty" code, but with x and y swapped. Also,
+ because the exponent difference is always nonzero in this version,
+ the shift sequence can use SLL and skip loading a constant zero. */
+ bnone xh, a6, .Ladd_xexpzero
+
+ or xh, xh, a6
+ slli xh, xh, 11
+ srli xh, xh, 11
+
+.Ladd_xexpdiff:
+ sub a10, a8, a7
+ bgeui a10, 32, .Ladd_bigshiftx
+
+ ssr a10
+ sll a9, xl
+ src xl, xh, xl
+ srl xh, xh
+
+.Ladd_addx:
+ add xl, xl, yl
+ add xh, xh, yh
+ bgeu xl, yl, 1f
+ addi xh, xh, 1
+1:
+ /* Check if the add overflowed into the exponent. */
+ extui a10, xh, 20, 12
+ bne a10, a8, .Ladd_carry
+
+.Ladd_round:
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a9, 1f
+ addi xl, xl, 1
+ beqz xl, .Ladd_roundcarry
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a9, a9, 1
+ beqz a9, .Ladd_exactlyhalf
+1: leaf_return
+
+.Ladd_bigshiftx:
+ /* Mostly the same thing as "bigshifty".... */
+ bgeui a10, 64, .Ladd_returny
+
+ ssr a10
+ sll a11, xl
+ src a9, xh, xl
+ srl xl, xh
+ movi xh, 0
+ beqz a11, .Ladd_addx
+ or a9, a9, a10
+ j .Ladd_addx
+
+.Ladd_returny:
+ mov xh, yh
+ mov xl, yl
+ leaf_return
+
+.Ladd_carry:
+ /* The addition has overflowed into the exponent field, so the
+ value needs to be renormalized. The mantissa of the result
+ can be recovered by subtracting the original exponent and
+ adding 0x100000 (which is the explicit "1.0" for the
+ mantissa of the non-shifted operand -- the "1.0" for the
+ shifted operand was already added). The mantissa can then
+ be shifted right by one bit. The explicit "1.0" of the
+ shifted mantissa then needs to be replaced by the exponent,
+ incremented by one to account for the normalizing shift.
+ It is faster to combine these operations: do the shift first
+ and combine the additions and subtractions. If x is the
+ original exponent, the result is:
+ shifted mantissa - (x << 19) + (1 << 19) + (x << 20)
+ or:
+ shifted mantissa + ((x + 1) << 19)
+ Note that the exponent is incremented here by leaving the
+ explicit "1.0" of the mantissa in the exponent field. */
+
+ /* Shift xh/xl right by one bit. Save the lsb of xl. */
+ mov a10, xl
+ ssai 1
+ src xl, xh, xl
+ srl xh, xh
+
+ /* See explanation above. The original exponent is in a8. */
+ addi a8, a8, 1
+ slli a8, a8, 19
+ add xh, xh, a8
+
+ /* Return an Infinity if the exponent overflowed. */
+ ball xh, a6, .Ladd_infinity
+
+ /* Same thing as the "round" code except the msb of the leftover
+ fraction is bit 0 of a10, with the rest of the fraction in a9. */
+ bbci.l a10, 0, 1f
+ addi xl, xl, 1
+ beqz xl, .Ladd_roundcarry
+ beqz a9, .Ladd_exactlyhalf
+1: leaf_return
+
+.Ladd_infinity:
+ /* Clear the mantissa. */
+ movi xl, 0
+ srli xh, xh, 20
+ slli xh, xh, 20
+
+ /* The sign bit may have been lost in a carry-out. Put it back. */
+ slli a8, a8, 1
+ or xh, xh, a8
+ leaf_return
+
+.Ladd_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli xl, xl, 1
+ slli xl, xl, 1
+ leaf_return
+
+.Ladd_roundcarry:
+ /* xl is always zero when the rounding increment overflows, so
+ there's no need to round it to an even value. */
+ addi xh, xh, 1
+ /* Overflow to the exponent is OK. */
+ leaf_return
+
+
+ /* Subtraction */
+__subdf3_aux:
+
+ /* Handle NaNs and Infinities. (This code is placed before the
+ start of the function just to keep it in range of the limited
+ branch displacements.) */
+
+.Lsub_xnan_or_inf:
+ /* If y is neither Infinity nor NaN, return x. */
+ bnall yh, a6, 1f
+ /* Both x and y are either NaN or Inf, so the result is NaN. */
+ movi a4, 0x80000 /* make it a quiet NaN */
+ or xh, xh, a4
+1: leaf_return
+
+.Lsub_ynan_or_inf:
+ /* Negate y and return it. */
+ slli a7, a6, 11
+ xor xh, yh, a7
+ mov xl, yl
+ leaf_return
+
+.Lsub_opposite_signs:
+ /* Operand signs differ. Do an addition. */
+ slli a7, a6, 11
+ xor yh, yh, a7
+ j .Ladd_same_sign
+
+ .align 4
+ .global __subdf3
+ .type __subdf3, @function
+__subdf3:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+
+ /* Check if the two operands have the same sign. */
+ xor a7, xh, yh
+ bltz a7, .Lsub_opposite_signs
+
+.Lsub_same_sign:
+ /* Check if either exponent == 0x7ff (i.e., NaN or Infinity). */
+ ball xh, a6, .Lsub_xnan_or_inf
+ ball yh, a6, .Lsub_ynan_or_inf
+
+ /* Compare the operands. In contrast to addition, the entire
+ value matters here. */
+ extui a7, xh, 20, 11
+ extui a8, yh, 20, 11
+ bltu xh, yh, .Lsub_xsmaller
+ beq xh, yh, .Lsub_compare_low
+
+.Lsub_ysmaller:
+ /* Check if the smaller (or equal) exponent is zero. */
+ bnone yh, a6, .Lsub_yexpzero
+
+ /* Replace yh sign/exponent with 0x001. */
+ or yh, yh, a6
+ slli yh, yh, 11
+ srli yh, yh, 11
+
+.Lsub_yexpdiff:
+ /* Compute the exponent difference. Optimize for difference < 32. */
+ sub a10, a7, a8
+ bgeui a10, 32, .Lsub_bigshifty
+
+ /* Shift yh/yl right by the exponent difference. Any bits that are
+ shifted out of yl are saved in a9 for rounding the result. */
+ ssr a10
+ movi a9, 0
+ src a9, yl, a9
+ src yl, yh, yl
+ srl yh, yh
+
+.Lsub_suby:
+ /* Do the 64-bit subtraction. */
+ sub xh, xh, yh
+ bgeu xl, yl, 1f
+ addi xh, xh, -1
+1: sub xl, xl, yl
+
+ /* Subtract the leftover bits in a9 from zero and propagate any
+ borrow from xh/xl. */
+ neg a9, a9
+ beqz a9, 1f
+ addi a5, xh, -1
+ moveqz xh, a5, xl
+ addi xl, xl, -1
+1:
+ /* Check if the subtract underflowed into the exponent. */
+ extui a10, xh, 20, 11
+ beq a10, a7, .Lsub_round
+ j .Lsub_borrow
+
+.Lsub_compare_low:
+ /* The high words are equal. Compare the low words. */
+ bltu xl, yl, .Lsub_xsmaller
+ bltu yl, xl, .Lsub_ysmaller
+ /* The operands are equal. Return 0.0. */
+ movi xh, 0
+ movi xl, 0
+1: leaf_return
+
+.Lsub_yexpzero:
+ /* y is a subnormal value. Replace its sign/exponent with zero,
+ i.e., no implicit "1.0". Unless x is also a subnormal, increment
+ y's apparent exponent because subnormals behave as if they had
+ the minimum (nonzero) exponent. */
+ slli yh, yh, 12
+ srli yh, yh, 12
+ bnone xh, a6, .Lsub_yexpdiff
+ addi a8, a8, 1
+ j .Lsub_yexpdiff
+
+.Lsub_bigshifty:
+ /* Exponent difference > 64 -- just return the bigger value. */
+ bgeui a10, 64, 1b
+
+ /* Shift yh/yl right by the exponent difference. Any bits that are
+ shifted out are saved in a9 for rounding the result. */
+ ssr a10
+ sll a11, yl /* lost bits shifted out of yl */
+ src a9, yh, yl
+ srl yl, yh
+ movi yh, 0
+ beqz a11, .Lsub_suby
+ or a9, a9, a10 /* any positive, nonzero value will work */
+ j .Lsub_suby
+
+.Lsub_xsmaller:
+ /* Same thing as the "ysmaller" code, but with x and y swapped and
+ with y negated. */
+ bnone xh, a6, .Lsub_xexpzero
+
+ or xh, xh, a6
+ slli xh, xh, 11
+ srli xh, xh, 11
+
+.Lsub_xexpdiff:
+ sub a10, a8, a7
+ bgeui a10, 32, .Lsub_bigshiftx
+
+ ssr a10
+ movi a9, 0
+ src a9, xl, a9
+ src xl, xh, xl
+ srl xh, xh
+
+ /* Negate y. */
+ slli a11, a6, 11
+ xor yh, yh, a11
+
+.Lsub_subx:
+ sub xl, yl, xl
+ sub xh, yh, xh
+ bgeu yl, xl, 1f
+ addi xh, xh, -1
+1:
+ /* Subtract the leftover bits in a9 from zero and propagate any
+ borrow from xh/xl. */
+ neg a9, a9
+ beqz a9, 1f
+ addi a5, xh, -1
+ moveqz xh, a5, xl
+ addi xl, xl, -1
+1:
+ /* Check if the subtract underflowed into the exponent. */
+ extui a10, xh, 20, 11
+ bne a10, a8, .Lsub_borrow
+
+.Lsub_round:
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a9, 1f
+ addi xl, xl, 1
+ beqz xl, .Lsub_roundcarry
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a9, a9, 1
+ beqz a9, .Lsub_exactlyhalf
+1: leaf_return
+
+.Lsub_xexpzero:
+ /* Same as "yexpzero". */
+ slli xh, xh, 12
+ srli xh, xh, 12
+ bnone yh, a6, .Lsub_xexpdiff
+ addi a7, a7, 1
+ j .Lsub_xexpdiff
+
+.Lsub_bigshiftx:
+ /* Mostly the same thing as "bigshifty", but with the sign bit of the
+ shifted value set so that the subsequent subtraction flips the
+ sign of y. */
+ bgeui a10, 64, .Lsub_returny
+
+ ssr a10
+ sll a11, xl
+ src a9, xh, xl
+ srl xl, xh
+ slli xh, a6, 11 /* set sign bit of xh */
+ beqz a11, .Lsub_subx
+ or a9, a9, a10
+ j .Lsub_subx
+
+.Lsub_returny:
+ /* Negate and return y. */
+ slli a7, a6, 11
+ xor xh, yh, a7
+ mov xl, yl
+ leaf_return
+
+.Lsub_borrow:
+ /* The subtraction has underflowed into the exponent field, so the
+ value needs to be renormalized. Shift the mantissa left as
+ needed to remove any leading zeros and adjust the exponent
+ accordingly. If the exponent is not large enough to remove
+ all the leading zeros, the result will be a subnormal value. */
+
+ slli a8, xh, 12
+ beqz a8, .Lsub_xhzero
+ do_nsau a6, a8, a7, a11
+ srli a8, a8, 12
+ bge a6, a10, .Lsub_subnormal
+ addi a6, a6, 1
+
+.Lsub_shift_lt32:
+ /* Shift the mantissa (a8/xl/a9) left by a6. */
+ ssl a6
+ src a8, a8, xl
+ src xl, xl, a9
+ sll a9, a9
+
+ /* Combine the shifted mantissa with the sign and exponent,
+ decrementing the exponent by a6. (The exponent has already
+ been decremented by one due to the borrow from the subtraction,
+ but adding the mantissa will increment the exponent by one.) */
+ srli xh, xh, 20
+ sub xh, xh, a6
+ slli xh, xh, 20
+ add xh, xh, a8
+ j .Lsub_round
+
+.Lsub_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli xl, xl, 1
+ slli xl, xl, 1
+ leaf_return
+
+.Lsub_roundcarry:
+ /* xl is always zero when the rounding increment overflows, so
+ there's no need to round it to an even value. */
+ addi xh, xh, 1
+ /* Overflow to the exponent is OK. */
+ leaf_return
+
+.Lsub_xhzero:
+ /* When normalizing the result, all the mantissa bits in the high
+ word are zero. Shift by "20 + (leading zero count of xl) + 1". */
+ do_nsau a6, xl, a7, a11
+ addi a6, a6, 21
+ blt a10, a6, .Lsub_subnormal
+
+.Lsub_normalize_shift:
+ bltui a6, 32, .Lsub_shift_lt32
+
+ ssl a6
+ src a8, xl, a9
+ sll xl, a9
+ movi a9, 0
+
+ srli xh, xh, 20
+ sub xh, xh, a6
+ slli xh, xh, 20
+ add xh, xh, a8
+ j .Lsub_round
+
+.Lsub_subnormal:
+ /* The exponent is too small to shift away all the leading zeros.
+ Set a6 to the current exponent (which has already been
+ decremented by the borrow) so that the exponent of the result
+ will be zero. Do not add 1 to a6 in this case, because: (1)
+ adding the mantissa will not increment the exponent, so there is
+ no need to subtract anything extra from the exponent to
+ compensate, and (2) the effective exponent of a subnormal is 1
+ not 0 so the shift amount must be 1 smaller than normal. */
+ mov a6, a10
+ j .Lsub_normalize_shift
+
+#endif /* L_addsubdf3 */
+
+#ifdef L_muldf3
+
+ /* Multiplication */
+#if !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MAC16
+#define XCHAL_NO_MUL 1
+#endif
+
+__muldf3_aux:
+
+ /* Handle unusual cases (zeros, subnormals, NaNs and Infinities).
+ (This code is placed before the start of the function just to
+ keep it in range of the limited branch displacements.) */
+
+.Lmul_xexpzero:
+ /* Clear the sign bit of x. */
+ slli xh, xh, 1
+ srli xh, xh, 1
+
+ /* If x is zero, return zero. */
+ or a10, xh, xl
+ beqz a10, .Lmul_return_zero
+
+ /* Normalize x. Adjust the exponent in a8. */
+ beqz xh, .Lmul_xh_zero
+ do_nsau a10, xh, a11, a12
+ addi a10, a10, -11
+ ssl a10
+ src xh, xh, xl
+ sll xl, xl
+ movi a8, 1
+ sub a8, a8, a10
+ j .Lmul_xnormalized
+.Lmul_xh_zero:
+ do_nsau a10, xl, a11, a12
+ addi a10, a10, -11
+ movi a8, -31
+ sub a8, a8, a10
+ ssl a10
+ bltz a10, .Lmul_xl_srl
+ sll xh, xl
+ movi xl, 0
+ j .Lmul_xnormalized
+.Lmul_xl_srl:
+ srl xh, xl
+ sll xl, xl
+ j .Lmul_xnormalized
+
+.Lmul_yexpzero:
+ /* Clear the sign bit of y. */
+ slli yh, yh, 1
+ srli yh, yh, 1
+
+ /* If y is zero, return zero. */
+ or a10, yh, yl
+ beqz a10, .Lmul_return_zero
+
+ /* Normalize y. Adjust the exponent in a9. */
+ beqz yh, .Lmul_yh_zero
+ do_nsau a10, yh, a11, a12
+ addi a10, a10, -11
+ ssl a10
+ src yh, yh, yl
+ sll yl, yl
+ movi a9, 1
+ sub a9, a9, a10
+ j .Lmul_ynormalized
+.Lmul_yh_zero:
+ do_nsau a10, yl, a11, a12
+ addi a10, a10, -11
+ movi a9, -31
+ sub a9, a9, a10
+ ssl a10
+ bltz a10, .Lmul_yl_srl
+ sll yh, yl
+ movi yl, 0
+ j .Lmul_ynormalized
+.Lmul_yl_srl:
+ srl yh, yl
+ sll yl, yl
+ j .Lmul_ynormalized
+
+.Lmul_return_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli xh, a7, 31
+ slli xh, xh, 31
+ movi xl, 0
+ j .Lmul_done
+
+.Lmul_xnan_or_inf:
+ /* If y is zero, return NaN. */
+ bnez yl, 1f
+ slli a8, yh, 1
+ bnez a8, 1f
+ movi a4, 0x80000 /* make it a quiet NaN */
+ or xh, xh, a4
+ j .Lmul_done
+1:
+ /* If y is NaN, return y. */
+ bnall yh, a6, .Lmul_returnx
+ slli a8, yh, 12
+ or a8, a8, yl
+ beqz a8, .Lmul_returnx
+
+.Lmul_returny:
+ mov xh, yh
+ mov xl, yl
+
+.Lmul_returnx:
+ /* Set the sign bit and return. */
+ extui a7, a7, 31, 1
+ slli xh, xh, 1
+ ssai 1
+ src xh, a7, xh
+ j .Lmul_done
+
+.Lmul_ynan_or_inf:
+ /* If x is zero, return NaN. */
+ bnez xl, .Lmul_returny
+ slli a8, xh, 1
+ bnez a8, .Lmul_returny
+ movi a7, 0x80000 /* make it a quiet NaN */
+ or xh, yh, a7
+ j .Lmul_done
+
+ .align 4
+ .global __muldf3
+ .type __muldf3, @function
+__muldf3:
+#if __XTENSA_CALL0_ABI__
+ leaf_entry sp, 32
+ addi sp, sp, -32
+ s32i a12, sp, 16
+ s32i a13, sp, 20
+ s32i a14, sp, 24
+ s32i a15, sp, 28
+#elif XCHAL_NO_MUL
+ /* This is not really a leaf function; allocate enough stack space
+ to allow CALL12s to a helper function. */
+ leaf_entry sp, 64
+#else
+ leaf_entry sp, 32
+#endif
+ movi a6, 0x7ff00000
+
+ /* Get the sign of the result. */
+ xor a7, xh, yh
+
+ /* Check for NaN and infinity. */
+ ball xh, a6, .Lmul_xnan_or_inf
+ ball yh, a6, .Lmul_ynan_or_inf
+
+ /* Extract the exponents. */
+ extui a8, xh, 20, 11
+ extui a9, yh, 20, 11
+
+ beqz a8, .Lmul_xexpzero
+.Lmul_xnormalized:
+ beqz a9, .Lmul_yexpzero
+.Lmul_ynormalized:
+
+ /* Add the exponents. */
+ add a8, a8, a9
+
+ /* Replace sign/exponent fields with explicit "1.0". */
+ movi a10, 0x1fffff
+ or xh, xh, a6
+ and xh, xh, a10
+ or yh, yh, a6
+ and yh, yh, a10
+
+ /* Multiply 64x64 to 128 bits. The result ends up in xh/xl/a6.
+ The least-significant word of the result is thrown away except
+ that if it is nonzero, the lsb of a6 is set to 1. */
+#if XCHAL_HAVE_MUL32_HIGH
+
+ /* Compute a6 with any carry-outs in a10. */
+ movi a10, 0
+ mull a6, xl, yh
+ mull a11, xh, yl
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a10, a10, 1
+1:
+ muluh a11, xl, yl
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a10, a10, 1
+1:
+ /* If the low word of the result is nonzero, set the lsb of a6. */
+ mull a11, xl, yl
+ beqz a11, 1f
+ movi a9, 1
+ or a6, a6, a9
+1:
+ /* Compute xl with any carry-outs in a9. */
+ movi a9, 0
+ mull a11, xh, yh
+ add a10, a10, a11
+ bgeu a10, a11, 1f
+ addi a9, a9, 1
+1:
+ muluh a11, xh, yl
+ add a10, a10, a11
+ bgeu a10, a11, 1f
+ addi a9, a9, 1
+1:
+ muluh xl, xl, yh
+ add xl, xl, a10
+ bgeu xl, a10, 1f
+ addi a9, a9, 1
+1:
+ /* Compute xh. */
+ muluh xh, xh, yh
+ add xh, xh, a9
+
+#else /* ! XCHAL_HAVE_MUL32_HIGH */
+
+ /* Break the inputs into 16-bit chunks and compute 16 32-bit partial
+ products. These partial products are:
+
+ 0 xll * yll
+
+ 1 xll * ylh
+ 2 xlh * yll
+
+ 3 xll * yhl
+ 4 xlh * ylh
+ 5 xhl * yll
+
+ 6 xll * yhh
+ 7 xlh * yhl
+ 8 xhl * ylh
+ 9 xhh * yll
+
+ 10 xlh * yhh
+ 11 xhl * yhl
+ 12 xhh * ylh
+
+ 13 xhl * yhh
+ 14 xhh * yhl
+
+ 15 xhh * yhh
+
+ where the input chunks are (hh, hl, lh, ll). If using the Mul16
+ or Mul32 multiplier options, these input chunks must be stored in
+ separate registers. For Mac16, the UMUL.AA.* opcodes can specify
+ that the inputs come from either half of the registers, so there
+ is no need to shift them out ahead of time. If there is no
+ multiply hardware, the 16-bit chunks can be extracted when setting
+ up the arguments to the separate multiply function. */
+
+ /* Save a7 since it is needed to hold a temporary value. */
+ s32i a7, sp, 4
+#if __XTENSA_CALL0_ABI__ && XCHAL_NO_MUL
+ /* Calling a separate multiply function will clobber a0 and requires
+ use of a8 as a temporary, so save those values now. (The function
+ uses a custom ABI so nothing else needs to be saved.) */
+ s32i a0, sp, 0
+ s32i a8, sp, 8
+#endif
+
+#if XCHAL_HAVE_MUL16 || XCHAL_HAVE_MUL32
+
+#define xlh a12
+#define ylh a13
+#define xhh a14
+#define yhh a15
+
+ /* Get the high halves of the inputs into registers. */
+ srli xlh, xl, 16
+ srli ylh, yl, 16
+ srli xhh, xh, 16
+ srli yhh, yh, 16
+
+#define xll xl
+#define yll yl
+#define xhl xh
+#define yhl yh
+
+#if XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MUL16
+ /* Clear the high halves of the inputs. This does not matter
+ for MUL16 because the high bits are ignored. */
+ extui xl, xl, 0, 16
+ extui xh, xh, 0, 16
+ extui yl, yl, 0, 16
+ extui yh, yh, 0, 16
+#endif
+#endif /* MUL16 || MUL32 */
+
+
+#if XCHAL_HAVE_MUL16
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ mul16u dst, xreg ## xhalf, yreg ## yhalf
+
+#elif XCHAL_HAVE_MUL32
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ mull dst, xreg ## xhalf, yreg ## yhalf
+
+#elif XCHAL_HAVE_MAC16
+
+/* The preprocessor insists on inserting a space when concatenating after
+ a period in the definition of do_mul below. These macros are a workaround
+ using underscores instead of periods when doing the concatenation. */
+#define umul_aa_ll umul.aa.ll
+#define umul_aa_lh umul.aa.lh
+#define umul_aa_hl umul.aa.hl
+#define umul_aa_hh umul.aa.hh
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ umul_aa_ ## xhalf ## yhalf xreg, yreg; \
+ rsr dst, ACCLO
+
+#else /* no multiply hardware */
+
+#define set_arg_l(dst, src) \
+ extui dst, src, 0, 16
+#define set_arg_h(dst, src) \
+ srli dst, src, 16
+
+#if __XTENSA_CALL0_ABI__
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ set_arg_ ## xhalf (a13, xreg); \
+ set_arg_ ## yhalf (a14, yreg); \
+ call0 .Lmul_mulsi3; \
+ mov dst, a12
+#else
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ set_arg_ ## xhalf (a14, xreg); \
+ set_arg_ ## yhalf (a15, yreg); \
+ call12 .Lmul_mulsi3; \
+ mov dst, a14
+#endif /* __XTENSA_CALL0_ABI__ */
+
+#endif /* no multiply hardware */
+
+ /* Add pp1 and pp2 into a10 with carry-out in a9. */
+ do_mul(a10, xl, l, yl, h) /* pp 1 */
+ do_mul(a11, xl, h, yl, l) /* pp 2 */
+ movi a9, 0
+ add a10, a10, a11
+ bgeu a10, a11, 1f
+ addi a9, a9, 1
+1:
+ /* Initialize a6 with a9/a10 shifted into position. Note that
+ this value can be safely incremented without any carry-outs. */
+ ssai 16
+ src a6, a9, a10
+
+ /* Compute the low word into a10. */
+ do_mul(a11, xl, l, yl, l) /* pp 0 */
+ sll a10, a10
+ add a10, a10, a11
+ bgeu a10, a11, 1f
+ addi a6, a6, 1
+1:
+ /* Compute the contributions of pp0-5 to a6, with carry-outs in a9.
+ This is good enough to determine the low half of a6, so that any
+ nonzero bits from the low word of the result can be collapsed
+ into a6, freeing up a register. */
+ movi a9, 0
+ do_mul(a11, xl, l, yh, l) /* pp 3 */
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ do_mul(a11, xl, h, yl, h) /* pp 4 */
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ do_mul(a11, xh, l, yl, l) /* pp 5 */
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ /* Collapse any nonzero bits from the low word into a6. */
+ beqz a10, 1f
+ movi a11, 1
+ or a6, a6, a11
+1:
+ /* Add pp6-9 into a11 with carry-outs in a10. */
+ do_mul(a7, xl, l, yh, h) /* pp 6 */
+ do_mul(a11, xh, h, yl, l) /* pp 9 */
+ movi a10, 0
+ add a11, a11, a7
+ bgeu a11, a7, 1f
+ addi a10, a10, 1
+1:
+ do_mul(a7, xl, h, yh, l) /* pp 7 */
+ add a11, a11, a7
+ bgeu a11, a7, 1f
+ addi a10, a10, 1
+1:
+ do_mul(a7, xh, l, yl, h) /* pp 8 */
+ add a11, a11, a7
+ bgeu a11, a7, 1f
+ addi a10, a10, 1
+1:
+ /* Shift a10/a11 into position, and add low half of a11 to a6. */
+ src a10, a10, a11
+ add a10, a10, a9
+ sll a11, a11
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a10, a10, 1
+1:
+ /* Add pp10-12 into xl with carry-outs in a9. */
+ movi a9, 0
+ do_mul(xl, xl, h, yh, h) /* pp 10 */
+ add xl, xl, a10
+ bgeu xl, a10, 1f
+ addi a9, a9, 1
+1:
+ do_mul(a10, xh, l, yh, l) /* pp 11 */
+ add xl, xl, a10
+ bgeu xl, a10, 1f
+ addi a9, a9, 1
+1:
+ do_mul(a10, xh, h, yl, h) /* pp 12 */
+ add xl, xl, a10
+ bgeu xl, a10, 1f
+ addi a9, a9, 1
+1:
+ /* Add pp13-14 into a11 with carry-outs in a10. */
+ do_mul(a11, xh, l, yh, h) /* pp 13 */
+ do_mul(a7, xh, h, yh, l) /* pp 14 */
+ movi a10, 0
+ add a11, a11, a7
+ bgeu a11, a7, 1f
+ addi a10, a10, 1
+1:
+ /* Shift a10/a11 into position, and add low half of a11 to a6. */
+ src a10, a10, a11
+ add a10, a10, a9
+ sll a11, a11
+ add xl, xl, a11
+ bgeu xl, a11, 1f
+ addi a10, a10, 1
+1:
+ /* Compute xh. */
+ do_mul(xh, xh, h, yh, h) /* pp 15 */
+ add xh, xh, a10
+
+ /* Restore values saved on the stack during the multiplication. */
+ l32i a7, sp, 4
+#if __XTENSA_CALL0_ABI__ && XCHAL_NO_MUL
+ l32i a0, sp, 0
+ l32i a8, sp, 8
+#endif
+#endif /* ! XCHAL_HAVE_MUL32_HIGH */
+
+ /* Shift left by 12 bits, unless there was a carry-out from the
+ multiply, in which case, shift by 11 bits and increment the
+ exponent. Note: It is convenient to use the constant 0x3ff
+ instead of 0x400 when removing the extra exponent bias (so that
+ it is easy to construct 0x7fe for the overflow check). Reverse
+ the logic here to decrement the exponent sum by one unless there
+ was a carry-out. */
+ movi a4, 11
+ srli a5, xh, 21 - 12
+ bnez a5, 1f
+ addi a4, a4, 1
+ addi a8, a8, -1
+1: ssl a4
+ src xh, xh, xl
+ src xl, xl, a6
+ sll a6, a6
+
+ /* Subtract the extra bias from the exponent sum (plus one to account
+ for the explicit "1.0" of the mantissa that will be added to the
+ exponent in the final result). */
+ movi a4, 0x3ff
+ sub a8, a8, a4
+
+ /* Check for over/underflow. The value in a8 is one less than the
+ final exponent, so values in the range 0..7fd are OK here. */
+ slli a4, a4, 1 /* 0x7fe */
+ bgeu a8, a4, .Lmul_overflow
+
+.Lmul_round:
+ /* Round. */
+ bgez a6, .Lmul_rounded
+ addi xl, xl, 1
+ beqz xl, .Lmul_roundcarry
+ slli a6, a6, 1
+ beqz a6, .Lmul_exactlyhalf
+
+.Lmul_rounded:
+ /* Add the exponent to the mantissa. */
+ slli a8, a8, 20
+ add xh, xh, a8
+
+.Lmul_addsign:
+ /* Add the sign bit. */
+ srli a7, a7, 31
+ slli a7, a7, 31
+ or xh, xh, a7
+
+.Lmul_done:
+#if __XTENSA_CALL0_ABI__
+ l32i a12, sp, 16
+ l32i a13, sp, 20
+ l32i a14, sp, 24
+ l32i a15, sp, 28
+ addi sp, sp, 32
+#endif
+ leaf_return
+
+.Lmul_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli xl, xl, 1
+ slli xl, xl, 1
+ j .Lmul_rounded
+
+.Lmul_roundcarry:
+ /* xl is always zero when the rounding increment overflows, so
+ there's no need to round it to an even value. */
+ addi xh, xh, 1
+ /* Overflow is OK -- it will be added to the exponent. */
+ j .Lmul_rounded
+
+.Lmul_overflow:
+ bltz a8, .Lmul_underflow
+ /* Return +/- Infinity. */
+ addi a8, a4, 1 /* 0x7ff */
+ slli xh, a8, 20
+ movi xl, 0
+ j .Lmul_addsign
+
+.Lmul_underflow:
+ /* Create a subnormal value, where the exponent field contains zero,
+ but the effective exponent is 1. The value of a8 is one less than
+ the actual exponent, so just negate it to get the shift amount. */
+ neg a8, a8
+ mov a9, a6
+ ssr a8
+ bgeui a8, 32, .Lmul_bigshift
+
+ /* Shift xh/xl right. Any bits that are shifted out of xl are saved
+ in a6 (combined with the shifted-out bits currently in a6) for
+ rounding the result. */
+ sll a6, xl
+ src xl, xh, xl
+ srl xh, xh
+ j 1f
+
+.Lmul_bigshift:
+ bgeui a8, 64, .Lmul_flush_to_zero
+ sll a10, xl /* lost bits shifted out of xl */
+ src a6, xh, xl
+ srl xl, xh
+ movi xh, 0
+ or a9, a9, a10
+
+ /* Set the exponent to zero. */
+1: movi a8, 0
+
+ /* Pack any nonzero bits shifted out into a6. */
+ beqz a9, .Lmul_round
+ movi a9, 1
+ or a6, a6, a9
+ j .Lmul_round
+
+.Lmul_flush_to_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli xh, a7, 31
+ slli xh, xh, 31
+ movi xl, 0
+ j .Lmul_done
+
+#if XCHAL_NO_MUL
+
+ /* For Xtensa processors with no multiply hardware, this simplified
+ version of _mulsi3 is used for multiplying 16-bit chunks of
+ the floating-point mantissas. When using CALL0, this function
+ uses a custom ABI: the inputs are passed in a13 and a14, the
+ result is returned in a12, and a8 and a15 are clobbered. */
+ .align 4
+.Lmul_mulsi3:
+ leaf_entry sp, 16
+ .macro mul_mulsi3_body dst, src1, src2, tmp1, tmp2
+ movi \dst, 0
+1: add \tmp1, \src2, \dst
+ extui \tmp2, \src1, 0, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx2 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 1, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx4 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 2, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx8 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 3, 1
+ movnez \dst, \tmp1, \tmp2
+
+ srli \src1, \src1, 4
+ slli \src2, \src2, 4
+ bnez \src1, 1b
+ .endm
+#if __XTENSA_CALL0_ABI__
+ mul_mulsi3_body a12, a13, a14, a15, a8
+#else
+ /* The result will be written into a2, so save that argument in a4. */
+ mov a4, a2
+ mul_mulsi3_body a2, a4, a3, a5, a6
+#endif
+ leaf_return
+#endif /* XCHAL_NO_MUL */
+#endif /* L_muldf3 */
+
+#ifdef L_divdf3
+
+ /* Division */
+__divdf3_aux:
+
+ /* Handle unusual cases (zeros, subnormals, NaNs and Infinities).
+ (This code is placed before the start of the function just to
+ keep it in range of the limited branch displacements.) */
+
+.Ldiv_yexpzero:
+ /* Clear the sign bit of y. */
+ slli yh, yh, 1
+ srli yh, yh, 1
+
+ /* Check for division by zero. */
+ or a10, yh, yl
+ beqz a10, .Ldiv_yzero
+
+ /* Normalize y. Adjust the exponent in a9. */
+ beqz yh, .Ldiv_yh_zero
+ do_nsau a10, yh, a11, a9
+ addi a10, a10, -11
+ ssl a10
+ src yh, yh, yl
+ sll yl, yl
+ movi a9, 1
+ sub a9, a9, a10
+ j .Ldiv_ynormalized
+.Ldiv_yh_zero:
+ do_nsau a10, yl, a11, a9
+ addi a10, a10, -11
+ movi a9, -31
+ sub a9, a9, a10
+ ssl a10
+ bltz a10, .Ldiv_yl_srl
+ sll yh, yl
+ movi yl, 0
+ j .Ldiv_ynormalized
+.Ldiv_yl_srl:
+ srl yh, yl
+ sll yl, yl
+ j .Ldiv_ynormalized
+
+.Ldiv_yzero:
+ /* y is zero. Return NaN if x is also zero; otherwise, infinity. */
+ slli xh, xh, 1
+ srli xh, xh, 1
+ or xl, xl, xh
+ srli xh, a7, 31
+ slli xh, xh, 31
+ or xh, xh, a6
+ bnez xl, 1f
+ movi a4, 0x80000 /* make it a quiet NaN */
+ or xh, xh, a4
+1: movi xl, 0
+ leaf_return
+
+.Ldiv_xexpzero:
+ /* Clear the sign bit of x. */
+ slli xh, xh, 1
+ srli xh, xh, 1
+
+ /* If x is zero, return zero. */
+ or a10, xh, xl
+ beqz a10, .Ldiv_return_zero
+
+ /* Normalize x. Adjust the exponent in a8. */
+ beqz xh, .Ldiv_xh_zero
+ do_nsau a10, xh, a11, a8
+ addi a10, a10, -11
+ ssl a10
+ src xh, xh, xl
+ sll xl, xl
+ movi a8, 1
+ sub a8, a8, a10
+ j .Ldiv_xnormalized
+.Ldiv_xh_zero:
+ do_nsau a10, xl, a11, a8
+ addi a10, a10, -11
+ movi a8, -31
+ sub a8, a8, a10
+ ssl a10
+ bltz a10, .Ldiv_xl_srl
+ sll xh, xl
+ movi xl, 0
+ j .Ldiv_xnormalized
+.Ldiv_xl_srl:
+ srl xh, xl
+ sll xl, xl
+ j .Ldiv_xnormalized
+
+.Ldiv_return_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli xh, a7, 31
+ slli xh, xh, 31
+ movi xl, 0
+ leaf_return
+
+.Ldiv_xnan_or_inf:
+ /* Set the sign bit of the result. */
+ srli a7, yh, 31
+ slli a7, a7, 31
+ xor xh, xh, a7
+ /* If y is NaN or Inf, return NaN. */
+ bnall yh, a6, 1f
+ movi a4, 0x80000 /* make it a quiet NaN */
+ or xh, xh, a4
+1: leaf_return
+
+.Ldiv_ynan_or_inf:
+ /* If y is Infinity, return zero. */
+ slli a8, yh, 12
+ or a8, a8, yl
+ beqz a8, .Ldiv_return_zero
+ /* y is NaN; return it. */
+ mov xh, yh
+ mov xl, yl
+ leaf_return
+
+.Ldiv_highequal1:
+ bltu xl, yl, 2f
+ j 3f
+
+ .align 4
+ .global __divdf3
+ .type __divdf3, @function
+__divdf3:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+
+ /* Get the sign of the result. */
+ xor a7, xh, yh
+
+ /* Check for NaN and infinity. */
+ ball xh, a6, .Ldiv_xnan_or_inf
+ ball yh, a6, .Ldiv_ynan_or_inf
+
+ /* Extract the exponents. */
+ extui a8, xh, 20, 11
+ extui a9, yh, 20, 11
+
+ beqz a9, .Ldiv_yexpzero
+.Ldiv_ynormalized:
+ beqz a8, .Ldiv_xexpzero
+.Ldiv_xnormalized:
+
+ /* Subtract the exponents. */
+ sub a8, a8, a9
+
+ /* Replace sign/exponent fields with explicit "1.0". */
+ movi a10, 0x1fffff
+ or xh, xh, a6
+ and xh, xh, a10
+ or yh, yh, a6
+ and yh, yh, a10
+
+ /* Set SAR for left shift by one. */
+ ssai (32 - 1)
+
+ /* The first digit of the mantissa division must be a one.
+ Shift x (and adjust the exponent) as needed to make this true. */
+ bltu yh, xh, 3f
+ beq yh, xh, .Ldiv_highequal1
+2: src xh, xh, xl
+ sll xl, xl
+ addi a8, a8, -1
+3:
+ /* Do the first subtraction and shift. */
+ sub xh, xh, yh
+ bgeu xl, yl, 1f
+ addi xh, xh, -1
+1: sub xl, xl, yl
+ src xh, xh, xl
+ sll xl, xl
+
+ /* Put the quotient into a10/a11. */
+ movi a10, 0
+ movi a11, 1
+
+ /* Divide one bit at a time for 52 bits. */
+ movi a9, 52
+#if XCHAL_HAVE_LOOPS
+ loop a9, .Ldiv_loopend
+#endif
+.Ldiv_loop:
+ /* Shift the quotient << 1. */
+ src a10, a10, a11
+ sll a11, a11
+
+ /* Is this digit a 0 or 1? */
+ bltu xh, yh, 3f
+ beq xh, yh, .Ldiv_highequal2
+
+ /* Output a 1 and subtract. */
+2: addi a11, a11, 1
+ sub xh, xh, yh
+ bgeu xl, yl, 1f
+ addi xh, xh, -1
+1: sub xl, xl, yl
+
+ /* Shift the dividend << 1. */
+3: src xh, xh, xl
+ sll xl, xl
+
+#if !XCHAL_HAVE_LOOPS
+ addi a9, a9, -1
+ bnez a9, .Ldiv_loop
+#endif
+.Ldiv_loopend:
+
+ /* Add the exponent bias (less one to account for the explicit "1.0"
+ of the mantissa that will be added to the exponent in the final
+ result). */
+ movi a9, 0x3fe
+ add a8, a8, a9
+
+ /* Check for over/underflow. The value in a8 is one less than the
+ final exponent, so values in the range 0..7fd are OK here. */
+ addmi a9, a9, 0x400 /* 0x7fe */
+ bgeu a8, a9, .Ldiv_overflow
+
+.Ldiv_round:
+ /* Round. The remainder (<< 1) is in xh/xl. */
+ bltu xh, yh, .Ldiv_rounded
+ beq xh, yh, .Ldiv_highequal3
+.Ldiv_roundup:
+ addi a11, a11, 1
+ beqz a11, .Ldiv_roundcarry
+
+.Ldiv_rounded:
+ mov xl, a11
+ /* Add the exponent to the mantissa. */
+ slli a8, a8, 20
+ add xh, a10, a8
+
+.Ldiv_addsign:
+ /* Add the sign bit. */
+ srli a7, a7, 31
+ slli a7, a7, 31
+ or xh, xh, a7
+ leaf_return
+
+.Ldiv_highequal2:
+ bgeu xl, yl, 2b
+ j 3b
+
+.Ldiv_highequal3:
+ bltu xl, yl, .Ldiv_rounded
+ bne xl, yl, .Ldiv_roundup
+
+ /* Remainder is exactly half the divisor. Round even. */
+ addi a11, a11, 1
+ beqz a11, .Ldiv_roundcarry
+ srli a11, a11, 1
+ slli a11, a11, 1
+ j .Ldiv_rounded
+
+.Ldiv_overflow:
+ bltz a8, .Ldiv_underflow
+ /* Return +/- Infinity. */
+ addi a8, a9, 1 /* 0x7ff */
+ slli xh, a8, 20
+ movi xl, 0
+ j .Ldiv_addsign
+
+.Ldiv_underflow:
+ /* Create a subnormal value, where the exponent field contains zero,
+ but the effective exponent is 1. The value of a8 is one less than
+ the actual exponent, so just negate it to get the shift amount. */
+ neg a8, a8
+ ssr a8
+ bgeui a8, 32, .Ldiv_bigshift
+
+ /* Shift a10/a11 right. Any bits that are shifted out of a11 are
+ saved in a6 for rounding the result. */
+ sll a6, a11
+ src a11, a10, a11
+ srl a10, a10
+ j 1f
+
+.Ldiv_bigshift:
+ bgeui a8, 64, .Ldiv_flush_to_zero
+ sll a9, a11 /* lost bits shifted out of a11 */
+ src a6, a10, a11
+ srl a11, a10
+ movi a10, 0
+ or xl, xl, a9
+
+ /* Set the exponent to zero. */
+1: movi a8, 0
+
+ /* Pack any nonzero remainder (in xh/xl) into a6. */
+ or xh, xh, xl
+ beqz xh, 1f
+ movi a9, 1
+ or a6, a6, a9
+
+ /* Round a10/a11 based on the bits shifted out into a6. */
+1: bgez a6, .Ldiv_rounded
+ addi a11, a11, 1
+ beqz a11, .Ldiv_roundcarry
+ slli a6, a6, 1
+ bnez a6, .Ldiv_rounded
+ srli a11, a11, 1
+ slli a11, a11, 1
+ j .Ldiv_rounded
+
+.Ldiv_roundcarry:
+ /* a11 is always zero when the rounding increment overflows, so
+ there's no need to round it to an even value. */
+ addi a10, a10, 1
+ /* Overflow to the exponent field is OK. */
+ j .Ldiv_rounded
+
+.Ldiv_flush_to_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli xh, a7, 31
+ slli xh, xh, 31
+ movi xl, 0
+ leaf_return
+
+#endif /* L_divdf3 */
+
+#ifdef L_cmpdf2
+
+ /* Equal and Not Equal */
+
+ .align 4
+ .global __eqdf2
+ .global __nedf2
+ .set __nedf2, __eqdf2
+ .type __eqdf2, @function
+__eqdf2:
+ leaf_entry sp, 16
+ bne xl, yl, 2f
+ bne xh, yh, 4f
+
+ /* The values are equal but NaN != NaN. Check the exponent. */
+ movi a6, 0x7ff00000
+ ball xh, a6, 3f
+
+ /* Equal. */
+ movi a2, 0
+ leaf_return
+
+ /* Not equal. */
+2: movi a2, 1
+ leaf_return
+
+ /* Check if the mantissas are nonzero. */
+3: slli a7, xh, 12
+ or a7, a7, xl
+ j 5f
+
+ /* Check if x and y are zero with different signs. */
+4: or a7, xh, yh
+ slli a7, a7, 1
+ or a7, a7, xl /* xl == yl here */
+
+ /* Equal if a7 == 0, where a7 is either abs(x | y) or the mantissa
+ or x when exponent(x) = 0x7ff and x == y. */
+5: movi a2, 0
+ movi a3, 1
+ movnez a2, a3, a7
+ leaf_return
+
+
+ /* Greater Than */
+
+ .align 4
+ .global __gtdf2
+ .type __gtdf2, @function
+__gtdf2:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+ ball xh, a6, 2f
+1: bnall yh, a6, .Lle_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, yh, 12
+ or a7, a7, yl
+ beqz a7, .Lle_cmp
+ movi a2, 0
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, xh, 12
+ or a7, a7, xl
+ beqz a7, 1b
+ movi a2, 0
+ leaf_return
+
+
+ /* Less Than or Equal */
+
+ .align 4
+ .global __ledf2
+ .type __ledf2, @function
+__ledf2:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+ ball xh, a6, 2f
+1: bnall yh, a6, .Lle_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, yh, 12
+ or a7, a7, yl
+ beqz a7, .Lle_cmp
+ movi a2, 1
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, xh, 12
+ or a7, a7, xl
+ beqz a7, 1b
+ movi a2, 1
+ leaf_return
+
+.Lle_cmp:
+ /* Check if x and y have different signs. */
+ xor a7, xh, yh
+ bltz a7, .Lle_diff_signs
+
+ /* Check if x is negative. */
+ bltz xh, .Lle_xneg
+
+ /* Check if x <= y. */
+ bltu xh, yh, 4f
+ bne xh, yh, 5f
+ bltu yl, xl, 5f
+4: movi a2, 0
+ leaf_return
+
+.Lle_xneg:
+ /* Check if y <= x. */
+ bltu yh, xh, 4b
+ bne yh, xh, 5f
+ bgeu xl, yl, 4b
+5: movi a2, 1
+ leaf_return
+
+.Lle_diff_signs:
+ bltz xh, 4b
+
+ /* Check if both x and y are zero. */
+ or a7, xh, yh
+ slli a7, a7, 1
+ or a7, a7, xl
+ or a7, a7, yl
+ movi a2, 1
+ movi a3, 0
+ moveqz a2, a3, a7
+ leaf_return
+
+
+ /* Greater Than or Equal */
+
+ .align 4
+ .global __gedf2
+ .type __gedf2, @function
+__gedf2:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+ ball xh, a6, 2f
+1: bnall yh, a6, .Llt_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, yh, 12
+ or a7, a7, yl
+ beqz a7, .Llt_cmp
+ movi a2, -1
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, xh, 12
+ or a7, a7, xl
+ beqz a7, 1b
+ movi a2, -1
+ leaf_return
+
+
+ /* Less Than */
+
+ .align 4
+ .global __ltdf2
+ .type __ltdf2, @function
+__ltdf2:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+ ball xh, a6, 2f
+1: bnall yh, a6, .Llt_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, yh, 12
+ or a7, a7, yl
+ beqz a7, .Llt_cmp
+ movi a2, 0
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, xh, 12
+ or a7, a7, xl
+ beqz a7, 1b
+ movi a2, 0
+ leaf_return
+
+.Llt_cmp:
+ /* Check if x and y have different signs. */
+ xor a7, xh, yh
+ bltz a7, .Llt_diff_signs
+
+ /* Check if x is negative. */
+ bltz xh, .Llt_xneg
+
+ /* Check if x < y. */
+ bltu xh, yh, 4f
+ bne xh, yh, 5f
+ bgeu xl, yl, 5f
+4: movi a2, -1
+ leaf_return
+
+.Llt_xneg:
+ /* Check if y < x. */
+ bltu yh, xh, 4b
+ bne yh, xh, 5f
+ bltu yl, xl, 4b
+5: movi a2, 0
+ leaf_return
+
+.Llt_diff_signs:
+ bgez xh, 5b
+
+ /* Check if both x and y are nonzero. */
+ or a7, xh, yh
+ slli a7, a7, 1
+ or a7, a7, xl
+ or a7, a7, yl
+ movi a2, 0
+ movi a3, -1
+ movnez a2, a3, a7
+ leaf_return
+
+
+ /* Unordered */
+
+ .align 4
+ .global __unorddf2
+ .type __unorddf2, @function
+__unorddf2:
+ leaf_entry sp, 16
+ movi a6, 0x7ff00000
+ ball xh, a6, 3f
+1: ball yh, a6, 4f
+2: movi a2, 0
+ leaf_return
+
+3: slli a7, xh, 12
+ or a7, a7, xl
+ beqz a7, 1b
+ movi a2, 1
+ leaf_return
+
+4: slli a7, yh, 12
+ or a7, a7, yl
+ beqz a7, 2b
+ movi a2, 1
+ leaf_return
+
+#endif /* L_cmpdf2 */
+
+#ifdef L_fixdfsi
+
+ .align 4
+ .global __fixdfsi
+ .type __fixdfsi, @function
+__fixdfsi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7ff00000
+ ball xh, a6, .Lfixdfsi_nan_or_inf
+
+ /* Extract the exponent and check if 0 < (exp - 0x3fe) < 32. */
+ extui a4, xh, 20, 11
+ extui a5, a6, 19, 10 /* 0x3fe */
+ sub a4, a4, a5
+ bgei a4, 32, .Lfixdfsi_maxint
+ blti a4, 1, .Lfixdfsi_zero
+
+ /* Add explicit "1.0" and shift << 11. */
+ or a7, xh, a6
+ ssai (32 - 11)
+ src a5, a7, xl
+
+ /* Shift back to the right, based on the exponent. */
+ ssl a4 /* shift by 32 - a4 */
+ srl a5, a5
+
+ /* Negate the result if sign != 0. */
+ neg a2, a5
+ movgez a2, a5, a7
+ leaf_return
+
+.Lfixdfsi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, xh, 12
+ or a4, a4, xl
+ beqz a4, .Lfixdfsi_maxint
+
+ /* Translate NaN to +maxint. */
+ movi xh, 0
+
+.Lfixdfsi_maxint:
+ slli a4, a6, 11 /* 0x80000000 */
+ addi a5, a4, -1 /* 0x7fffffff */
+ movgez a4, a5, xh
+ mov a2, a4
+ leaf_return
+
+.Lfixdfsi_zero:
+ movi a2, 0
+ leaf_return
+
+#endif /* L_fixdfsi */
+
+#ifdef L_fixdfdi
+
+ .align 4
+ .global __fixdfdi
+ .type __fixdfdi, @function
+__fixdfdi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7ff00000
+ ball xh, a6, .Lfixdfdi_nan_or_inf
+
+ /* Extract the exponent and check if 0 < (exp - 0x3fe) < 64. */
+ extui a4, xh, 20, 11
+ extui a5, a6, 19, 10 /* 0x3fe */
+ sub a4, a4, a5
+ bgei a4, 64, .Lfixdfdi_maxint
+ blti a4, 1, .Lfixdfdi_zero
+
+ /* Add explicit "1.0" and shift << 11. */
+ or a7, xh, a6
+ ssai (32 - 11)
+ src xh, a7, xl
+ sll xl, xl
+
+ /* Shift back to the right, based on the exponent. */
+ ssl a4 /* shift by 64 - a4 */
+ bgei a4, 32, .Lfixdfdi_smallshift
+ srl xl, xh
+ movi xh, 0
+
+.Lfixdfdi_shifted:
+ /* Negate the result if sign != 0. */
+ bgez a7, 1f
+ neg xl, xl
+ neg xh, xh
+ beqz xl, 1f
+ addi xh, xh, -1
+1: leaf_return
+
+.Lfixdfdi_smallshift:
+ src xl, xh, xl
+ srl xh, xh
+ j .Lfixdfdi_shifted
+
+.Lfixdfdi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, xh, 12
+ or a4, a4, xl
+ beqz a4, .Lfixdfdi_maxint
+
+ /* Translate NaN to +maxint. */
+ movi xh, 0
+
+.Lfixdfdi_maxint:
+ slli a7, a6, 11 /* 0x80000000 */
+ bgez xh, 1f
+ mov xh, a7
+ movi xl, 0
+ leaf_return
+
+1: addi xh, a7, -1 /* 0x7fffffff */
+ movi xl, -1
+ leaf_return
+
+.Lfixdfdi_zero:
+ movi xh, 0
+ movi xl, 0
+ leaf_return
+
+#endif /* L_fixdfdi */
+
+#ifdef L_fixunsdfsi
+
+ .align 4
+ .global __fixunsdfsi
+ .type __fixunsdfsi, @function
+__fixunsdfsi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7ff00000
+ ball xh, a6, .Lfixunsdfsi_nan_or_inf
+
+ /* Extract the exponent and check if 0 <= (exp - 0x3ff) < 32. */
+ extui a4, xh, 20, 11
+ extui a5, a6, 20, 10 /* 0x3ff */
+ sub a4, a4, a5
+ bgei a4, 32, .Lfixunsdfsi_maxint
+ bltz a4, .Lfixunsdfsi_zero
+
+ /* Add explicit "1.0" and shift << 11. */
+ or a7, xh, a6
+ ssai (32 - 11)
+ src a5, a7, xl
+
+ /* Shift back to the right, based on the exponent. */
+ addi a4, a4, 1
+ beqi a4, 32, .Lfixunsdfsi_bigexp
+ ssl a4 /* shift by 32 - a4 */
+ srl a5, a5
+
+ /* Negate the result if sign != 0. */
+ neg a2, a5
+ movgez a2, a5, a7
+ leaf_return
+
+.Lfixunsdfsi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, xh, 12
+ or a4, a4, xl
+ beqz a4, .Lfixunsdfsi_maxint
+
+ /* Translate NaN to 0xffffffff. */
+ movi a2, -1
+ leaf_return
+
+.Lfixunsdfsi_maxint:
+ slli a4, a6, 11 /* 0x80000000 */
+ movi a5, -1 /* 0xffffffff */
+ movgez a4, a5, xh
+ mov a2, a4
+ leaf_return
+
+.Lfixunsdfsi_zero:
+ movi a2, 0
+ leaf_return
+
+.Lfixunsdfsi_bigexp:
+ /* Handle unsigned maximum exponent case. */
+ bltz xh, 1f
+ mov a2, a5 /* no shift needed */
+ leaf_return
+
+ /* Return 0x80000000 if negative. */
+1: slli a2, a6, 11
+ leaf_return
+
+#endif /* L_fixunsdfsi */
+
+#ifdef L_fixunsdfdi
+
+ .align 4
+ .global __fixunsdfdi
+ .type __fixunsdfdi, @function
+__fixunsdfdi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7ff00000
+ ball xh, a6, .Lfixunsdfdi_nan_or_inf
+
+ /* Extract the exponent and check if 0 <= (exp - 0x3ff) < 64. */
+ extui a4, xh, 20, 11
+ extui a5, a6, 20, 10 /* 0x3ff */
+ sub a4, a4, a5
+ bgei a4, 64, .Lfixunsdfdi_maxint
+ bltz a4, .Lfixunsdfdi_zero
+
+ /* Add explicit "1.0" and shift << 11. */
+ or a7, xh, a6
+ ssai (32 - 11)
+ src xh, a7, xl
+ sll xl, xl
+
+ /* Shift back to the right, based on the exponent. */
+ addi a4, a4, 1
+ beqi a4, 64, .Lfixunsdfdi_bigexp
+ ssl a4 /* shift by 64 - a4 */
+ bgei a4, 32, .Lfixunsdfdi_smallshift
+ srl xl, xh
+ movi xh, 0
+
+.Lfixunsdfdi_shifted:
+ /* Negate the result if sign != 0. */
+ bgez a7, 1f
+ neg xl, xl
+ neg xh, xh
+ beqz xl, 1f
+ addi xh, xh, -1
+1: leaf_return
+
+.Lfixunsdfdi_smallshift:
+ src xl, xh, xl
+ srl xh, xh
+ j .Lfixunsdfdi_shifted
+
+.Lfixunsdfdi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, xh, 12
+ or a4, a4, xl
+ beqz a4, .Lfixunsdfdi_maxint
+
+ /* Translate NaN to 0xffffffff.... */
+1: movi xh, -1
+ movi xl, -1
+ leaf_return
+
+.Lfixunsdfdi_maxint:
+ bgez xh, 1b
+2: slli xh, a6, 11 /* 0x80000000 */
+ movi xl, 0
+ leaf_return
+
+.Lfixunsdfdi_zero:
+ movi xh, 0
+ movi xl, 0
+ leaf_return
+
+.Lfixunsdfdi_bigexp:
+ /* Handle unsigned maximum exponent case. */
+ bltz a7, 2b
+ leaf_return /* no shift needed */
+
+#endif /* L_fixunsdfdi */
+
+#ifdef L_floatsidf
+
+ .align 4
+ .global __floatunsidf
+ .type __floatunsidf, @function
+__floatunsidf:
+ leaf_entry sp, 16
+ beqz a2, .Lfloatsidf_return_zero
+
+ /* Set the sign to zero and jump to the floatsidf code. */
+ movi a7, 0
+ j .Lfloatsidf_normalize
+
+ .align 4
+ .global __floatsidf
+ .type __floatsidf, @function
+__floatsidf:
+ leaf_entry sp, 16
+
+ /* Check for zero. */
+ beqz a2, .Lfloatsidf_return_zero
+
+ /* Save the sign. */
+ extui a7, a2, 31, 1
+
+ /* Get the absolute value. */
+#if XCHAL_HAVE_ABS
+ abs a2, a2
+#else
+ neg a4, a2
+ movltz a2, a4, a2
+#endif
+
+.Lfloatsidf_normalize:
+ /* Normalize with the first 1 bit in the msb. */
+ do_nsau a4, a2, a5, a6
+ ssl a4
+ sll a5, a2
+
+ /* Shift the mantissa into position. */
+ srli xh, a5, 11
+ slli xl, a5, (32 - 11)
+
+ /* Set the exponent. */
+ movi a5, 0x41d /* 0x3fe + 31 */
+ sub a5, a5, a4
+ slli a5, a5, 20
+ add xh, xh, a5
+
+ /* Add the sign and return. */
+ slli a7, a7, 31
+ or xh, xh, a7
+ leaf_return
+
+.Lfloatsidf_return_zero:
+ movi a3, 0
+ leaf_return
+
+#endif /* L_floatsidf */
+
+#ifdef L_floatdidf
+
+ .align 4
+ .global __floatundidf
+ .type __floatundidf, @function
+__floatundidf:
+ leaf_entry sp, 16
+
+ /* Check for zero. */
+ or a4, xh, xl
+ beqz a4, 2f
+
+ /* Set the sign to zero and jump to the floatdidf code. */
+ movi a7, 0
+ j .Lfloatdidf_normalize
+
+ .align 4
+ .global __floatdidf
+ .type __floatdidf, @function
+__floatdidf:
+ leaf_entry sp, 16
+
+ /* Check for zero. */
+ or a4, xh, xl
+ beqz a4, 2f
+
+ /* Save the sign. */
+ extui a7, xh, 31, 1
+
+ /* Get the absolute value. */
+ bgez xh, .Lfloatdidf_normalize
+ neg xl, xl
+ neg xh, xh
+ beqz xl, .Lfloatdidf_normalize
+ addi xh, xh, -1
+
+.Lfloatdidf_normalize:
+ /* Normalize with the first 1 bit in the msb of xh. */
+ beqz xh, .Lfloatdidf_bigshift
+ do_nsau a4, xh, a5, a6
+ ssl a4
+ src xh, xh, xl
+ sll xl, xl
+
+.Lfloatdidf_shifted:
+ /* Shift the mantissa into position, with rounding bits in a6. */
+ ssai 11
+ sll a6, xl
+ src xl, xh, xl
+ srl xh, xh
+
+ /* Set the exponent. */
+ movi a5, 0x43d /* 0x3fe + 63 */
+ sub a5, a5, a4
+ slli a5, a5, 20
+ add xh, xh, a5
+
+ /* Add the sign. */
+ slli a7, a7, 31
+ or xh, xh, a7
+
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a6, 2f
+ addi xl, xl, 1
+ beqz xl, .Lfloatdidf_roundcarry
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a6, a6, 1
+ beqz a6, .Lfloatdidf_exactlyhalf
+2: leaf_return
+
+.Lfloatdidf_bigshift:
+ /* xh is zero. Normalize with first 1 bit of xl in the msb of xh. */
+ do_nsau a4, xl, a5, a6
+ ssl a4
+ sll xh, xl
+ movi xl, 0
+ addi a4, a4, 32
+ j .Lfloatdidf_shifted
+
+.Lfloatdidf_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli xl, xl, 1
+ slli xl, xl, 1
+ leaf_return
+
+.Lfloatdidf_roundcarry:
+ /* xl is always zero when the rounding increment overflows, so
+ there's no need to round it to an even value. */
+ addi xh, xh, 1
+ /* Overflow to the exponent is OK. */
+ leaf_return
+
+#endif /* L_floatdidf */
+
+#ifdef L_truncdfsf2
+
+ .align 4
+ .global __truncdfsf2
+ .type __truncdfsf2, @function
+__truncdfsf2:
+ leaf_entry sp, 16
+
+ /* Adjust the exponent bias. */
+ movi a4, (0x3ff - 0x7f) << 20
+ sub a5, xh, a4
+
+ /* Check for underflow. */
+ xor a6, xh, a5
+ bltz a6, .Ltrunc_underflow
+ extui a6, a5, 20, 11
+ beqz a6, .Ltrunc_underflow
+
+ /* Check for overflow. */
+ movi a4, 255
+ bge a6, a4, .Ltrunc_overflow
+
+ /* Shift a5/xl << 3 into a5/a4. */
+ ssai (32 - 3)
+ src a5, a5, xl
+ sll a4, xl
+
+.Ltrunc_addsign:
+ /* Add the sign bit. */
+ extui a6, xh, 31, 1
+ slli a6, a6, 31
+ or a2, a6, a5
+
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a4, 1f
+ addi a2, a2, 1
+ /* Overflow to the exponent is OK. The answer will be correct. */
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a4, a4, 1
+ beqz a4, .Ltrunc_exactlyhalf
+1: leaf_return
+
+.Ltrunc_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli a2, a2, 1
+ slli a2, a2, 1
+ leaf_return
+
+.Ltrunc_overflow:
+ /* Check if exponent == 0x7ff. */
+ movi a4, 0x7ff00000
+ bnall xh, a4, 1f
+
+ /* Check if mantissa is nonzero. */
+ slli a5, xh, 12
+ or a5, a5, xl
+ beqz a5, 1f
+
+ /* Shift a4 to set a bit in the mantissa, making a quiet NaN. */
+ srli a4, a4, 1
+
+1: slli a4, a4, 4 /* 0xff000000 or 0xff800000 */
+ /* Add the sign bit. */
+ extui a6, xh, 31, 1
+ ssai 1
+ src a2, a6, a4
+ leaf_return
+
+.Ltrunc_underflow:
+ /* Find shift count for a subnormal. Flush to zero if >= 32. */
+ extui a6, xh, 20, 11
+ movi a5, 0x3ff - 0x7f
+ sub a6, a5, a6
+ addi a6, a6, 1
+ bgeui a6, 32, 1f
+
+ /* Replace the exponent with an explicit "1.0". */
+ slli a5, a5, 13 /* 0x700000 */
+ or a5, a5, xh
+ slli a5, a5, 11
+ srli a5, a5, 11
+
+ /* Shift the mantissa left by 3 bits (into a5/a4). */
+ ssai (32 - 3)
+ src a5, a5, xl
+ sll a4, xl
+
+ /* Shift right by a6. */
+ ssr a6
+ sll a7, a4
+ src a4, a5, a4
+ srl a5, a5
+ beqz a7, .Ltrunc_addsign
+ or a4, a4, a6 /* any positive, nonzero value will work */
+ j .Ltrunc_addsign
+
+ /* Return +/- zero. */
+1: extui a2, xh, 31, 1
+ slli a2, a2, 31
+ leaf_return
+
+#endif /* L_truncdfsf2 */
+
+#ifdef L_extendsfdf2
+
+ .align 4
+ .global __extendsfdf2
+ .type __extendsfdf2, @function
+__extendsfdf2:
+ leaf_entry sp, 16
+
+ /* Save the sign bit and then shift it off. */
+ extui a5, a2, 31, 1
+ slli a5, a5, 31
+ slli a4, a2, 1
+
+ /* Extract and check the exponent. */
+ extui a6, a2, 23, 8
+ beqz a6, .Lextend_expzero
+ addi a6, a6, 1
+ beqi a6, 256, .Lextend_nan_or_inf
+
+ /* Shift >> 3 into a4/xl. */
+ srli a4, a4, 4
+ slli xl, a2, (32 - 3)
+
+ /* Adjust the exponent bias. */
+ movi a6, (0x3ff - 0x7f) << 20
+ add a4, a4, a6
+
+ /* Add the sign bit. */
+ or xh, a4, a5
+ leaf_return
+
+.Lextend_nan_or_inf:
+ movi a4, 0x7ff00000
+
+ /* Check for NaN. */
+ slli a7, a2, 9
+ beqz a7, 1f
+
+ slli a6, a6, 11 /* 0x80000 */
+ or a4, a4, a6
+
+ /* Add the sign and return. */
+1: or xh, a4, a5
+ movi xl, 0
+ leaf_return
+
+.Lextend_expzero:
+ beqz a4, 1b
+
+ /* Normalize it to have 8 zero bits before the first 1 bit. */
+ do_nsau a7, a4, a2, a3
+ addi a7, a7, -8
+ ssl a7
+ sll a4, a4
+
+ /* Shift >> 3 into a4/xl. */
+ slli xl, a4, (32 - 3)
+ srli a4, a4, 3
+
+ /* Set the exponent. */
+ movi a6, 0x3fe - 0x7f
+ sub a6, a6, a7
+ slli a6, a6, 20
+ add a4, a4, a6
+
+ /* Add the sign and return. */
+ or xh, a4, a5
+ leaf_return
+
+#endif /* L_extendsfdf2 */
+
+
diff --git a/gcc-4.9/libgcc/config/xtensa/ieee754-sf.S b/gcc-4.9/libgcc/config/xtensa/ieee754-sf.S
new file mode 100644
index 000000000..e96785c3f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/ieee754-sf.S
@@ -0,0 +1,1757 @@
+/* IEEE-754 single-precision functions for Xtensa
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef __XTENSA_EB__
+#define xh a2
+#define xl a3
+#define yh a4
+#define yl a5
+#else
+#define xh a3
+#define xl a2
+#define yh a5
+#define yl a4
+#endif
+
+/* Warning! The branch displacements for some Xtensa branch instructions
+ are quite small, and this code has been carefully laid out to keep
+ branch targets in range. If you change anything, be sure to check that
+ the assembler is not relaxing anything to branch over a jump. */
+
+#ifdef L_negsf2
+
+ .align 4
+ .global __negsf2
+ .type __negsf2, @function
+__negsf2:
+ leaf_entry sp, 16
+ movi a4, 0x80000000
+ xor a2, a2, a4
+ leaf_return
+
+#endif /* L_negsf2 */
+
+#ifdef L_addsubsf3
+
+ /* Addition */
+__addsf3_aux:
+
+ /* Handle NaNs and Infinities. (This code is placed before the
+ start of the function just to keep it in range of the limited
+ branch displacements.) */
+
+.Ladd_xnan_or_inf:
+ /* If y is neither Infinity nor NaN, return x. */
+ bnall a3, a6, 1f
+ /* If x is a NaN, return it. Otherwise, return y. */
+ slli a7, a2, 9
+ beqz a7, .Ladd_ynan_or_inf
+1: leaf_return
+
+.Ladd_ynan_or_inf:
+ /* Return y. */
+ mov a2, a3
+ leaf_return
+
+.Ladd_opposite_signs:
+ /* Operand signs differ. Do a subtraction. */
+ slli a7, a6, 8
+ xor a3, a3, a7
+ j .Lsub_same_sign
+
+ .align 4
+ .global __addsf3
+ .type __addsf3, @function
+__addsf3:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+
+ /* Check if the two operands have the same sign. */
+ xor a7, a2, a3
+ bltz a7, .Ladd_opposite_signs
+
+.Ladd_same_sign:
+ /* Check if either exponent == 0x7f8 (i.e., NaN or Infinity). */
+ ball a2, a6, .Ladd_xnan_or_inf
+ ball a3, a6, .Ladd_ynan_or_inf
+
+ /* Compare the exponents. The smaller operand will be shifted
+ right by the exponent difference and added to the larger
+ one. */
+ extui a7, a2, 23, 9
+ extui a8, a3, 23, 9
+ bltu a7, a8, .Ladd_shiftx
+
+.Ladd_shifty:
+ /* Check if the smaller (or equal) exponent is zero. */
+ bnone a3, a6, .Ladd_yexpzero
+
+ /* Replace y sign/exponent with 0x008. */
+ or a3, a3, a6
+ slli a3, a3, 8
+ srli a3, a3, 8
+
+.Ladd_yexpdiff:
+ /* Compute the exponent difference. */
+ sub a10, a7, a8
+
+ /* Exponent difference > 32 -- just return the bigger value. */
+ bgeui a10, 32, 1f
+
+ /* Shift y right by the exponent difference. Any bits that are
+ shifted out of y are saved in a9 for rounding the result. */
+ ssr a10
+ movi a9, 0
+ src a9, a3, a9
+ srl a3, a3
+
+ /* Do the addition. */
+ add a2, a2, a3
+
+ /* Check if the add overflowed into the exponent. */
+ extui a10, a2, 23, 9
+ beq a10, a7, .Ladd_round
+ mov a8, a7
+ j .Ladd_carry
+
+.Ladd_yexpzero:
+ /* y is a subnormal value. Replace its sign/exponent with zero,
+ i.e., no implicit "1.0", and increment the apparent exponent
+ because subnormals behave as if they had the minimum (nonzero)
+ exponent. Test for the case when both exponents are zero. */
+ slli a3, a3, 9
+ srli a3, a3, 9
+ bnone a2, a6, .Ladd_bothexpzero
+ addi a8, a8, 1
+ j .Ladd_yexpdiff
+
+.Ladd_bothexpzero:
+ /* Both exponents are zero. Handle this as a special case. There
+ is no need to shift or round, and the normal code for handling
+ a carry into the exponent field will not work because it
+ assumes there is an implicit "1.0" that needs to be added. */
+ add a2, a2, a3
+1: leaf_return
+
+.Ladd_xexpzero:
+ /* Same as "yexpzero" except skip handling the case when both
+ exponents are zero. */
+ slli a2, a2, 9
+ srli a2, a2, 9
+ addi a7, a7, 1
+ j .Ladd_xexpdiff
+
+.Ladd_shiftx:
+ /* Same thing as the "shifty" code, but with x and y swapped. Also,
+ because the exponent difference is always nonzero in this version,
+ the shift sequence can use SLL and skip loading a constant zero. */
+ bnone a2, a6, .Ladd_xexpzero
+
+ or a2, a2, a6
+ slli a2, a2, 8
+ srli a2, a2, 8
+
+.Ladd_xexpdiff:
+ sub a10, a8, a7
+ bgeui a10, 32, .Ladd_returny
+
+ ssr a10
+ sll a9, a2
+ srl a2, a2
+
+ add a2, a2, a3
+
+ /* Check if the add overflowed into the exponent. */
+ extui a10, a2, 23, 9
+ bne a10, a8, .Ladd_carry
+
+.Ladd_round:
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a9, 1f
+ addi a2, a2, 1
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a9, a9, 1
+ beqz a9, .Ladd_exactlyhalf
+1: leaf_return
+
+.Ladd_returny:
+ mov a2, a3
+ leaf_return
+
+.Ladd_carry:
+ /* The addition has overflowed into the exponent field, so the
+ value needs to be renormalized. The mantissa of the result
+ can be recovered by subtracting the original exponent and
+ adding 0x800000 (which is the explicit "1.0" for the
+ mantissa of the non-shifted operand -- the "1.0" for the
+ shifted operand was already added). The mantissa can then
+ be shifted right by one bit. The explicit "1.0" of the
+ shifted mantissa then needs to be replaced by the exponent,
+ incremented by one to account for the normalizing shift.
+ It is faster to combine these operations: do the shift first
+ and combine the additions and subtractions. If x is the
+ original exponent, the result is:
+ shifted mantissa - (x << 22) + (1 << 22) + (x << 23)
+ or:
+ shifted mantissa + ((x + 1) << 22)
+ Note that the exponent is incremented here by leaving the
+ explicit "1.0" of the mantissa in the exponent field. */
+
+ /* Shift x right by one bit. Save the lsb. */
+ mov a10, a2
+ srli a2, a2, 1
+
+ /* See explanation above. The original exponent is in a8. */
+ addi a8, a8, 1
+ slli a8, a8, 22
+ add a2, a2, a8
+
+ /* Return an Infinity if the exponent overflowed. */
+ ball a2, a6, .Ladd_infinity
+
+ /* Same thing as the "round" code except the msb of the leftover
+ fraction is bit 0 of a10, with the rest of the fraction in a9. */
+ bbci.l a10, 0, 1f
+ addi a2, a2, 1
+ beqz a9, .Ladd_exactlyhalf
+1: leaf_return
+
+.Ladd_infinity:
+ /* Clear the mantissa. */
+ srli a2, a2, 23
+ slli a2, a2, 23
+
+ /* The sign bit may have been lost in a carry-out. Put it back. */
+ slli a8, a8, 1
+ or a2, a2, a8
+ leaf_return
+
+.Ladd_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli a2, a2, 1
+ slli a2, a2, 1
+ leaf_return
+
+
+ /* Subtraction */
+__subsf3_aux:
+
+ /* Handle NaNs and Infinities. (This code is placed before the
+ start of the function just to keep it in range of the limited
+ branch displacements.) */
+
+.Lsub_xnan_or_inf:
+ /* If y is neither Infinity nor NaN, return x. */
+ bnall a3, a6, 1f
+ /* Both x and y are either NaN or Inf, so the result is NaN. */
+ movi a4, 0x400000 /* make it a quiet NaN */
+ or a2, a2, a4
+1: leaf_return
+
+.Lsub_ynan_or_inf:
+ /* Negate y and return it. */
+ slli a7, a6, 8
+ xor a2, a3, a7
+ leaf_return
+
+.Lsub_opposite_signs:
+ /* Operand signs differ. Do an addition. */
+ slli a7, a6, 8
+ xor a3, a3, a7
+ j .Ladd_same_sign
+
+ .align 4
+ .global __subsf3
+ .type __subsf3, @function
+__subsf3:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+
+ /* Check if the two operands have the same sign. */
+ xor a7, a2, a3
+ bltz a7, .Lsub_opposite_signs
+
+.Lsub_same_sign:
+ /* Check if either exponent == 0x7f8 (i.e., NaN or Infinity). */
+ ball a2, a6, .Lsub_xnan_or_inf
+ ball a3, a6, .Lsub_ynan_or_inf
+
+ /* Compare the operands. In contrast to addition, the entire
+ value matters here. */
+ extui a7, a2, 23, 8
+ extui a8, a3, 23, 8
+ bltu a2, a3, .Lsub_xsmaller
+
+.Lsub_ysmaller:
+ /* Check if the smaller (or equal) exponent is zero. */
+ bnone a3, a6, .Lsub_yexpzero
+
+ /* Replace y sign/exponent with 0x008. */
+ or a3, a3, a6
+ slli a3, a3, 8
+ srli a3, a3, 8
+
+.Lsub_yexpdiff:
+ /* Compute the exponent difference. */
+ sub a10, a7, a8
+
+ /* Exponent difference > 32 -- just return the bigger value. */
+ bgeui a10, 32, 1f
+
+ /* Shift y right by the exponent difference. Any bits that are
+ shifted out of y are saved in a9 for rounding the result. */
+ ssr a10
+ movi a9, 0
+ src a9, a3, a9
+ srl a3, a3
+
+ sub a2, a2, a3
+
+ /* Subtract the leftover bits in a9 from zero and propagate any
+ borrow from a2. */
+ neg a9, a9
+ addi a10, a2, -1
+ movnez a2, a10, a9
+
+ /* Check if the subtract underflowed into the exponent. */
+ extui a10, a2, 23, 8
+ beq a10, a7, .Lsub_round
+ j .Lsub_borrow
+
+.Lsub_yexpzero:
+ /* Return zero if the inputs are equal. (For the non-subnormal
+ case, subtracting the "1.0" will cause a borrow from the exponent
+ and this case can be detected when handling the borrow.) */
+ beq a2, a3, .Lsub_return_zero
+
+ /* y is a subnormal value. Replace its sign/exponent with zero,
+ i.e., no implicit "1.0". Unless x is also a subnormal, increment
+ y's apparent exponent because subnormals behave as if they had
+ the minimum (nonzero) exponent. */
+ slli a3, a3, 9
+ srli a3, a3, 9
+ bnone a2, a6, .Lsub_yexpdiff
+ addi a8, a8, 1
+ j .Lsub_yexpdiff
+
+.Lsub_returny:
+ /* Negate and return y. */
+ slli a7, a6, 8
+ xor a2, a3, a7
+1: leaf_return
+
+.Lsub_xsmaller:
+ /* Same thing as the "ysmaller" code, but with x and y swapped and
+ with y negated. */
+ bnone a2, a6, .Lsub_xexpzero
+
+ or a2, a2, a6
+ slli a2, a2, 8
+ srli a2, a2, 8
+
+.Lsub_xexpdiff:
+ sub a10, a8, a7
+ bgeui a10, 32, .Lsub_returny
+
+ ssr a10
+ movi a9, 0
+ src a9, a2, a9
+ srl a2, a2
+
+ /* Negate y. */
+ slli a11, a6, 8
+ xor a3, a3, a11
+
+ sub a2, a3, a2
+
+ neg a9, a9
+ addi a10, a2, -1
+ movnez a2, a10, a9
+
+ /* Check if the subtract underflowed into the exponent. */
+ extui a10, a2, 23, 8
+ bne a10, a8, .Lsub_borrow
+
+.Lsub_round:
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a9, 1f
+ addi a2, a2, 1
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a9, a9, 1
+ beqz a9, .Lsub_exactlyhalf
+1: leaf_return
+
+.Lsub_xexpzero:
+ /* Same as "yexpzero". */
+ beq a2, a3, .Lsub_return_zero
+ slli a2, a2, 9
+ srli a2, a2, 9
+ bnone a3, a6, .Lsub_xexpdiff
+ addi a7, a7, 1
+ j .Lsub_xexpdiff
+
+.Lsub_return_zero:
+ movi a2, 0
+ leaf_return
+
+.Lsub_borrow:
+ /* The subtraction has underflowed into the exponent field, so the
+ value needs to be renormalized. Shift the mantissa left as
+ needed to remove any leading zeros and adjust the exponent
+ accordingly. If the exponent is not large enough to remove
+ all the leading zeros, the result will be a subnormal value. */
+
+ slli a8, a2, 9
+ beqz a8, .Lsub_xzero
+ do_nsau a6, a8, a7, a11
+ srli a8, a8, 9
+ bge a6, a10, .Lsub_subnormal
+ addi a6, a6, 1
+
+.Lsub_normalize_shift:
+ /* Shift the mantissa (a8/a9) left by a6. */
+ ssl a6
+ src a8, a8, a9
+ sll a9, a9
+
+ /* Combine the shifted mantissa with the sign and exponent,
+ decrementing the exponent by a6. (The exponent has already
+ been decremented by one due to the borrow from the subtraction,
+ but adding the mantissa will increment the exponent by one.) */
+ srli a2, a2, 23
+ sub a2, a2, a6
+ slli a2, a2, 23
+ add a2, a2, a8
+ j .Lsub_round
+
+.Lsub_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli a2, a2, 1
+ slli a2, a2, 1
+ leaf_return
+
+.Lsub_xzero:
+ /* If there was a borrow from the exponent, and the mantissa and
+ guard digits are all zero, then the inputs were equal and the
+ result should be zero. */
+ beqz a9, .Lsub_return_zero
+
+ /* Only the guard digit is nonzero. Shift by min(24, a10). */
+ addi a11, a10, -24
+ movi a6, 24
+ movltz a6, a10, a11
+ j .Lsub_normalize_shift
+
+.Lsub_subnormal:
+ /* The exponent is too small to shift away all the leading zeros.
+ Set a6 to the current exponent (which has already been
+ decremented by the borrow) so that the exponent of the result
+ will be zero. Do not add 1 to a6 in this case, because: (1)
+ adding the mantissa will not increment the exponent, so there is
+ no need to subtract anything extra from the exponent to
+ compensate, and (2) the effective exponent of a subnormal is 1
+ not 0 so the shift amount must be 1 smaller than normal. */
+ mov a6, a10
+ j .Lsub_normalize_shift
+
+#endif /* L_addsubsf3 */
+
+#ifdef L_mulsf3
+
+ /* Multiplication */
+#if !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MAC16
+#define XCHAL_NO_MUL 1
+#endif
+
+__mulsf3_aux:
+
+ /* Handle unusual cases (zeros, subnormals, NaNs and Infinities).
+ (This code is placed before the start of the function just to
+ keep it in range of the limited branch displacements.) */
+
+.Lmul_xexpzero:
+ /* Clear the sign bit of x. */
+ slli a2, a2, 1
+ srli a2, a2, 1
+
+ /* If x is zero, return zero. */
+ beqz a2, .Lmul_return_zero
+
+ /* Normalize x. Adjust the exponent in a8. */
+ do_nsau a10, a2, a11, a12
+ addi a10, a10, -8
+ ssl a10
+ sll a2, a2
+ movi a8, 1
+ sub a8, a8, a10
+ j .Lmul_xnormalized
+
+.Lmul_yexpzero:
+ /* Clear the sign bit of y. */
+ slli a3, a3, 1
+ srli a3, a3, 1
+
+ /* If y is zero, return zero. */
+ beqz a3, .Lmul_return_zero
+
+ /* Normalize y. Adjust the exponent in a9. */
+ do_nsau a10, a3, a11, a12
+ addi a10, a10, -8
+ ssl a10
+ sll a3, a3
+ movi a9, 1
+ sub a9, a9, a10
+ j .Lmul_ynormalized
+
+.Lmul_return_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli a2, a7, 31
+ slli a2, a2, 31
+ j .Lmul_done
+
+.Lmul_xnan_or_inf:
+ /* If y is zero, return NaN. */
+ slli a8, a3, 1
+ bnez a8, 1f
+ movi a4, 0x400000 /* make it a quiet NaN */
+ or a2, a2, a4
+ j .Lmul_done
+1:
+ /* If y is NaN, return y. */
+ bnall a3, a6, .Lmul_returnx
+ slli a8, a3, 9
+ beqz a8, .Lmul_returnx
+
+.Lmul_returny:
+ mov a2, a3
+
+.Lmul_returnx:
+ /* Set the sign bit and return. */
+ extui a7, a7, 31, 1
+ slli a2, a2, 1
+ ssai 1
+ src a2, a7, a2
+ j .Lmul_done
+
+.Lmul_ynan_or_inf:
+ /* If x is zero, return NaN. */
+ slli a8, a2, 1
+ bnez a8, .Lmul_returny
+ movi a7, 0x400000 /* make it a quiet NaN */
+ or a2, a3, a7
+ j .Lmul_done
+
+ .align 4
+ .global __mulsf3
+ .type __mulsf3, @function
+__mulsf3:
+#if __XTENSA_CALL0_ABI__
+ leaf_entry sp, 32
+ addi sp, sp, -32
+ s32i a12, sp, 16
+ s32i a13, sp, 20
+ s32i a14, sp, 24
+ s32i a15, sp, 28
+#elif XCHAL_NO_MUL
+ /* This is not really a leaf function; allocate enough stack space
+ to allow CALL12s to a helper function. */
+ leaf_entry sp, 64
+#else
+ leaf_entry sp, 32
+#endif
+ movi a6, 0x7f800000
+
+ /* Get the sign of the result. */
+ xor a7, a2, a3
+
+ /* Check for NaN and infinity. */
+ ball a2, a6, .Lmul_xnan_or_inf
+ ball a3, a6, .Lmul_ynan_or_inf
+
+ /* Extract the exponents. */
+ extui a8, a2, 23, 8
+ extui a9, a3, 23, 8
+
+ beqz a8, .Lmul_xexpzero
+.Lmul_xnormalized:
+ beqz a9, .Lmul_yexpzero
+.Lmul_ynormalized:
+
+ /* Add the exponents. */
+ add a8, a8, a9
+
+ /* Replace sign/exponent fields with explicit "1.0". */
+ movi a10, 0xffffff
+ or a2, a2, a6
+ and a2, a2, a10
+ or a3, a3, a6
+ and a3, a3, a10
+
+ /* Multiply 32x32 to 64 bits. The result ends up in a2/a6. */
+
+#if XCHAL_HAVE_MUL32_HIGH
+
+ mull a6, a2, a3
+ muluh a2, a2, a3
+
+#else
+
+ /* Break the inputs into 16-bit chunks and compute 4 32-bit partial
+ products. These partial products are:
+
+ 0 xl * yl
+
+ 1 xl * yh
+ 2 xh * yl
+
+ 3 xh * yh
+
+ If using the Mul16 or Mul32 multiplier options, these input
+ chunks must be stored in separate registers. For Mac16, the
+ UMUL.AA.* opcodes can specify that the inputs come from either
+ half of the registers, so there is no need to shift them out
+ ahead of time. If there is no multiply hardware, the 16-bit
+ chunks can be extracted when setting up the arguments to the
+ separate multiply function. */
+
+#if __XTENSA_CALL0_ABI__ && XCHAL_NO_MUL
+ /* Calling a separate multiply function will clobber a0 and requires
+ use of a8 as a temporary, so save those values now. (The function
+ uses a custom ABI so nothing else needs to be saved.) */
+ s32i a0, sp, 0
+ s32i a8, sp, 4
+#endif
+
+#if XCHAL_HAVE_MUL16 || XCHAL_HAVE_MUL32
+
+#define a2h a4
+#define a3h a5
+
+ /* Get the high halves of the inputs into registers. */
+ srli a2h, a2, 16
+ srli a3h, a3, 16
+
+#define a2l a2
+#define a3l a3
+
+#if XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MUL16
+ /* Clear the high halves of the inputs. This does not matter
+ for MUL16 because the high bits are ignored. */
+ extui a2, a2, 0, 16
+ extui a3, a3, 0, 16
+#endif
+#endif /* MUL16 || MUL32 */
+
+
+#if XCHAL_HAVE_MUL16
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ mul16u dst, xreg ## xhalf, yreg ## yhalf
+
+#elif XCHAL_HAVE_MUL32
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ mull dst, xreg ## xhalf, yreg ## yhalf
+
+#elif XCHAL_HAVE_MAC16
+
+/* The preprocessor insists on inserting a space when concatenating after
+ a period in the definition of do_mul below. These macros are a workaround
+ using underscores instead of periods when doing the concatenation. */
+#define umul_aa_ll umul.aa.ll
+#define umul_aa_lh umul.aa.lh
+#define umul_aa_hl umul.aa.hl
+#define umul_aa_hh umul.aa.hh
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ umul_aa_ ## xhalf ## yhalf xreg, yreg; \
+ rsr dst, ACCLO
+
+#else /* no multiply hardware */
+
+#define set_arg_l(dst, src) \
+ extui dst, src, 0, 16
+#define set_arg_h(dst, src) \
+ srli dst, src, 16
+
+#if __XTENSA_CALL0_ABI__
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ set_arg_ ## xhalf (a13, xreg); \
+ set_arg_ ## yhalf (a14, yreg); \
+ call0 .Lmul_mulsi3; \
+ mov dst, a12
+#else
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ set_arg_ ## xhalf (a14, xreg); \
+ set_arg_ ## yhalf (a15, yreg); \
+ call12 .Lmul_mulsi3; \
+ mov dst, a14
+#endif /* __XTENSA_CALL0_ABI__ */
+
+#endif /* no multiply hardware */
+
+ /* Add pp1 and pp2 into a6 with carry-out in a9. */
+ do_mul(a6, a2, l, a3, h) /* pp 1 */
+ do_mul(a11, a2, h, a3, l) /* pp 2 */
+ movi a9, 0
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ /* Shift the high half of a9/a6 into position in a9. Note that
+ this value can be safely incremented without any carry-outs. */
+ ssai 16
+ src a9, a9, a6
+
+ /* Compute the low word into a6. */
+ do_mul(a11, a2, l, a3, l) /* pp 0 */
+ sll a6, a6
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ /* Compute the high word into a2. */
+ do_mul(a2, a2, h, a3, h) /* pp 3 */
+ add a2, a2, a9
+
+#if __XTENSA_CALL0_ABI__ && XCHAL_NO_MUL
+ /* Restore values saved on the stack during the multiplication. */
+ l32i a0, sp, 0
+ l32i a8, sp, 4
+#endif
+#endif /* ! XCHAL_HAVE_MUL32_HIGH */
+
+ /* Shift left by 9 bits, unless there was a carry-out from the
+ multiply, in which case, shift by 8 bits and increment the
+ exponent. */
+ movi a4, 9
+ srli a5, a2, 24 - 9
+ beqz a5, 1f
+ addi a4, a4, -1
+ addi a8, a8, 1
+1: ssl a4
+ src a2, a2, a6
+ sll a6, a6
+
+ /* Subtract the extra bias from the exponent sum (plus one to account
+ for the explicit "1.0" of the mantissa that will be added to the
+ exponent in the final result). */
+ movi a4, 0x80
+ sub a8, a8, a4
+
+ /* Check for over/underflow. The value in a8 is one less than the
+ final exponent, so values in the range 0..fd are OK here. */
+ movi a4, 0xfe
+ bgeu a8, a4, .Lmul_overflow
+
+.Lmul_round:
+ /* Round. */
+ bgez a6, .Lmul_rounded
+ addi a2, a2, 1
+ slli a6, a6, 1
+ beqz a6, .Lmul_exactlyhalf
+
+.Lmul_rounded:
+ /* Add the exponent to the mantissa. */
+ slli a8, a8, 23
+ add a2, a2, a8
+
+.Lmul_addsign:
+ /* Add the sign bit. */
+ srli a7, a7, 31
+ slli a7, a7, 31
+ or a2, a2, a7
+
+.Lmul_done:
+#if __XTENSA_CALL0_ABI__
+ l32i a12, sp, 16
+ l32i a13, sp, 20
+ l32i a14, sp, 24
+ l32i a15, sp, 28
+ addi sp, sp, 32
+#endif
+ leaf_return
+
+.Lmul_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli a2, a2, 1
+ slli a2, a2, 1
+ j .Lmul_rounded
+
+.Lmul_overflow:
+ bltz a8, .Lmul_underflow
+ /* Return +/- Infinity. */
+ movi a8, 0xff
+ slli a2, a8, 23
+ j .Lmul_addsign
+
+.Lmul_underflow:
+ /* Create a subnormal value, where the exponent field contains zero,
+ but the effective exponent is 1. The value of a8 is one less than
+ the actual exponent, so just negate it to get the shift amount. */
+ neg a8, a8
+ mov a9, a6
+ ssr a8
+ bgeui a8, 32, .Lmul_flush_to_zero
+
+ /* Shift a2 right. Any bits that are shifted out of a2 are saved
+ in a6 (combined with the shifted-out bits currently in a6) for
+ rounding the result. */
+ sll a6, a2
+ srl a2, a2
+
+ /* Set the exponent to zero. */
+ movi a8, 0
+
+ /* Pack any nonzero bits shifted out into a6. */
+ beqz a9, .Lmul_round
+ movi a9, 1
+ or a6, a6, a9
+ j .Lmul_round
+
+.Lmul_flush_to_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli a2, a7, 31
+ slli a2, a2, 31
+ j .Lmul_done
+
+#if XCHAL_NO_MUL
+
+ /* For Xtensa processors with no multiply hardware, this simplified
+ version of _mulsi3 is used for multiplying 16-bit chunks of
+ the floating-point mantissas. When using CALL0, this function
+ uses a custom ABI: the inputs are passed in a13 and a14, the
+ result is returned in a12, and a8 and a15 are clobbered. */
+ .align 4
+.Lmul_mulsi3:
+ leaf_entry sp, 16
+ .macro mul_mulsi3_body dst, src1, src2, tmp1, tmp2
+ movi \dst, 0
+1: add \tmp1, \src2, \dst
+ extui \tmp2, \src1, 0, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx2 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 1, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx4 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 2, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx8 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 3, 1
+ movnez \dst, \tmp1, \tmp2
+
+ srli \src1, \src1, 4
+ slli \src2, \src2, 4
+ bnez \src1, 1b
+ .endm
+#if __XTENSA_CALL0_ABI__
+ mul_mulsi3_body a12, a13, a14, a15, a8
+#else
+ /* The result will be written into a2, so save that argument in a4. */
+ mov a4, a2
+ mul_mulsi3_body a2, a4, a3, a5, a6
+#endif
+ leaf_return
+#endif /* XCHAL_NO_MUL */
+#endif /* L_mulsf3 */
+
+#ifdef L_divsf3
+
+ /* Division */
+__divsf3_aux:
+
+ /* Handle unusual cases (zeros, subnormals, NaNs and Infinities).
+ (This code is placed before the start of the function just to
+ keep it in range of the limited branch displacements.) */
+
+.Ldiv_yexpzero:
+ /* Clear the sign bit of y. */
+ slli a3, a3, 1
+ srli a3, a3, 1
+
+ /* Check for division by zero. */
+ beqz a3, .Ldiv_yzero
+
+ /* Normalize y. Adjust the exponent in a9. */
+ do_nsau a10, a3, a4, a5
+ addi a10, a10, -8
+ ssl a10
+ sll a3, a3
+ movi a9, 1
+ sub a9, a9, a10
+ j .Ldiv_ynormalized
+
+.Ldiv_yzero:
+ /* y is zero. Return NaN if x is also zero; otherwise, infinity. */
+ slli a4, a2, 1
+ srli a4, a4, 1
+ srli a2, a7, 31
+ slli a2, a2, 31
+ or a2, a2, a6
+ bnez a4, 1f
+ movi a4, 0x400000 /* make it a quiet NaN */
+ or a2, a2, a4
+1: leaf_return
+
+.Ldiv_xexpzero:
+ /* Clear the sign bit of x. */
+ slli a2, a2, 1
+ srli a2, a2, 1
+
+ /* If x is zero, return zero. */
+ beqz a2, .Ldiv_return_zero
+
+ /* Normalize x. Adjust the exponent in a8. */
+ do_nsau a10, a2, a4, a5
+ addi a10, a10, -8
+ ssl a10
+ sll a2, a2
+ movi a8, 1
+ sub a8, a8, a10
+ j .Ldiv_xnormalized
+
+.Ldiv_return_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli a2, a7, 31
+ slli a2, a2, 31
+ leaf_return
+
+.Ldiv_xnan_or_inf:
+ /* Set the sign bit of the result. */
+ srli a7, a3, 31
+ slli a7, a7, 31
+ xor a2, a2, a7
+ /* If y is NaN or Inf, return NaN. */
+ bnall a3, a6, 1f
+ movi a4, 0x400000 /* make it a quiet NaN */
+ or a2, a2, a4
+1: leaf_return
+
+.Ldiv_ynan_or_inf:
+ /* If y is Infinity, return zero. */
+ slli a8, a3, 9
+ beqz a8, .Ldiv_return_zero
+ /* y is NaN; return it. */
+ mov a2, a3
+ leaf_return
+
+ .align 4
+ .global __divsf3
+ .type __divsf3, @function
+__divsf3:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+
+ /* Get the sign of the result. */
+ xor a7, a2, a3
+
+ /* Check for NaN and infinity. */
+ ball a2, a6, .Ldiv_xnan_or_inf
+ ball a3, a6, .Ldiv_ynan_or_inf
+
+ /* Extract the exponents. */
+ extui a8, a2, 23, 8
+ extui a9, a3, 23, 8
+
+ beqz a9, .Ldiv_yexpzero
+.Ldiv_ynormalized:
+ beqz a8, .Ldiv_xexpzero
+.Ldiv_xnormalized:
+
+ /* Subtract the exponents. */
+ sub a8, a8, a9
+
+ /* Replace sign/exponent fields with explicit "1.0". */
+ movi a10, 0xffffff
+ or a2, a2, a6
+ and a2, a2, a10
+ or a3, a3, a6
+ and a3, a3, a10
+
+ /* The first digit of the mantissa division must be a one.
+ Shift x (and adjust the exponent) as needed to make this true. */
+ bltu a3, a2, 1f
+ slli a2, a2, 1
+ addi a8, a8, -1
+1:
+ /* Do the first subtraction and shift. */
+ sub a2, a2, a3
+ slli a2, a2, 1
+
+ /* Put the quotient into a10. */
+ movi a10, 1
+
+ /* Divide one bit at a time for 23 bits. */
+ movi a9, 23
+#if XCHAL_HAVE_LOOPS
+ loop a9, .Ldiv_loopend
+#endif
+.Ldiv_loop:
+ /* Shift the quotient << 1. */
+ slli a10, a10, 1
+
+ /* Is this digit a 0 or 1? */
+ bltu a2, a3, 1f
+
+ /* Output a 1 and subtract. */
+ addi a10, a10, 1
+ sub a2, a2, a3
+
+ /* Shift the dividend << 1. */
+1: slli a2, a2, 1
+
+#if !XCHAL_HAVE_LOOPS
+ addi a9, a9, -1
+ bnez a9, .Ldiv_loop
+#endif
+.Ldiv_loopend:
+
+ /* Add the exponent bias (less one to account for the explicit "1.0"
+ of the mantissa that will be added to the exponent in the final
+ result). */
+ addi a8, a8, 0x7e
+
+ /* Check for over/underflow. The value in a8 is one less than the
+ final exponent, so values in the range 0..fd are OK here. */
+ movi a4, 0xfe
+ bgeu a8, a4, .Ldiv_overflow
+
+.Ldiv_round:
+ /* Round. The remainder (<< 1) is in a2. */
+ bltu a2, a3, .Ldiv_rounded
+ addi a10, a10, 1
+ beq a2, a3, .Ldiv_exactlyhalf
+
+.Ldiv_rounded:
+ /* Add the exponent to the mantissa. */
+ slli a8, a8, 23
+ add a2, a10, a8
+
+.Ldiv_addsign:
+ /* Add the sign bit. */
+ srli a7, a7, 31
+ slli a7, a7, 31
+ or a2, a2, a7
+ leaf_return
+
+.Ldiv_overflow:
+ bltz a8, .Ldiv_underflow
+ /* Return +/- Infinity. */
+ addi a8, a4, 1 /* 0xff */
+ slli a2, a8, 23
+ j .Ldiv_addsign
+
+.Ldiv_exactlyhalf:
+ /* Remainder is exactly half the divisor. Round even. */
+ srli a10, a10, 1
+ slli a10, a10, 1
+ j .Ldiv_rounded
+
+.Ldiv_underflow:
+ /* Create a subnormal value, where the exponent field contains zero,
+ but the effective exponent is 1. The value of a8 is one less than
+ the actual exponent, so just negate it to get the shift amount. */
+ neg a8, a8
+ ssr a8
+ bgeui a8, 32, .Ldiv_flush_to_zero
+
+ /* Shift a10 right. Any bits that are shifted out of a10 are
+ saved in a6 for rounding the result. */
+ sll a6, a10
+ srl a10, a10
+
+ /* Set the exponent to zero. */
+ movi a8, 0
+
+ /* Pack any nonzero remainder (in a2) into a6. */
+ beqz a2, 1f
+ movi a9, 1
+ or a6, a6, a9
+
+ /* Round a10 based on the bits shifted out into a6. */
+1: bgez a6, .Ldiv_rounded
+ addi a10, a10, 1
+ slli a6, a6, 1
+ bnez a6, .Ldiv_rounded
+ srli a10, a10, 1
+ slli a10, a10, 1
+ j .Ldiv_rounded
+
+.Ldiv_flush_to_zero:
+ /* Return zero with the appropriate sign bit. */
+ srli a2, a7, 31
+ slli a2, a2, 31
+ leaf_return
+
+#endif /* L_divsf3 */
+
+#ifdef L_cmpsf2
+
+ /* Equal and Not Equal */
+
+ .align 4
+ .global __eqsf2
+ .global __nesf2
+ .set __nesf2, __eqsf2
+ .type __eqsf2, @function
+__eqsf2:
+ leaf_entry sp, 16
+ bne a2, a3, 4f
+
+ /* The values are equal but NaN != NaN. Check the exponent. */
+ movi a6, 0x7f800000
+ ball a2, a6, 3f
+
+ /* Equal. */
+ movi a2, 0
+ leaf_return
+
+ /* Not equal. */
+2: movi a2, 1
+ leaf_return
+
+ /* Check if the mantissas are nonzero. */
+3: slli a7, a2, 9
+ j 5f
+
+ /* Check if x and y are zero with different signs. */
+4: or a7, a2, a3
+ slli a7, a7, 1
+
+ /* Equal if a7 == 0, where a7 is either abs(x | y) or the mantissa
+ or x when exponent(x) = 0x7f8 and x == y. */
+5: movi a2, 0
+ movi a3, 1
+ movnez a2, a3, a7
+ leaf_return
+
+
+ /* Greater Than */
+
+ .align 4
+ .global __gtsf2
+ .type __gtsf2, @function
+__gtsf2:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+ ball a2, a6, 2f
+1: bnall a3, a6, .Lle_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, a3, 9
+ beqz a7, .Lle_cmp
+ movi a2, 0
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, a2, 9
+ beqz a7, 1b
+ movi a2, 0
+ leaf_return
+
+
+ /* Less Than or Equal */
+
+ .align 4
+ .global __lesf2
+ .type __lesf2, @function
+__lesf2:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+ ball a2, a6, 2f
+1: bnall a3, a6, .Lle_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, a3, 9
+ beqz a7, .Lle_cmp
+ movi a2, 1
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, a2, 9
+ beqz a7, 1b
+ movi a2, 1
+ leaf_return
+
+.Lle_cmp:
+ /* Check if x and y have different signs. */
+ xor a7, a2, a3
+ bltz a7, .Lle_diff_signs
+
+ /* Check if x is negative. */
+ bltz a2, .Lle_xneg
+
+ /* Check if x <= y. */
+ bltu a3, a2, 5f
+4: movi a2, 0
+ leaf_return
+
+.Lle_xneg:
+ /* Check if y <= x. */
+ bgeu a2, a3, 4b
+5: movi a2, 1
+ leaf_return
+
+.Lle_diff_signs:
+ bltz a2, 4b
+
+ /* Check if both x and y are zero. */
+ or a7, a2, a3
+ slli a7, a7, 1
+ movi a2, 1
+ movi a3, 0
+ moveqz a2, a3, a7
+ leaf_return
+
+
+ /* Greater Than or Equal */
+
+ .align 4
+ .global __gesf2
+ .type __gesf2, @function
+__gesf2:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+ ball a2, a6, 2f
+1: bnall a3, a6, .Llt_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, a3, 9
+ beqz a7, .Llt_cmp
+ movi a2, -1
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, a2, 9
+ beqz a7, 1b
+ movi a2, -1
+ leaf_return
+
+
+ /* Less Than */
+
+ .align 4
+ .global __ltsf2
+ .type __ltsf2, @function
+__ltsf2:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+ ball a2, a6, 2f
+1: bnall a3, a6, .Llt_cmp
+
+ /* Check if y is a NaN. */
+ slli a7, a3, 9
+ beqz a7, .Llt_cmp
+ movi a2, 0
+ leaf_return
+
+ /* Check if x is a NaN. */
+2: slli a7, a2, 9
+ beqz a7, 1b
+ movi a2, 0
+ leaf_return
+
+.Llt_cmp:
+ /* Check if x and y have different signs. */
+ xor a7, a2, a3
+ bltz a7, .Llt_diff_signs
+
+ /* Check if x is negative. */
+ bltz a2, .Llt_xneg
+
+ /* Check if x < y. */
+ bgeu a2, a3, 5f
+4: movi a2, -1
+ leaf_return
+
+.Llt_xneg:
+ /* Check if y < x. */
+ bltu a3, a2, 4b
+5: movi a2, 0
+ leaf_return
+
+.Llt_diff_signs:
+ bgez a2, 5b
+
+ /* Check if both x and y are nonzero. */
+ or a7, a2, a3
+ slli a7, a7, 1
+ movi a2, 0
+ movi a3, -1
+ movnez a2, a3, a7
+ leaf_return
+
+
+ /* Unordered */
+
+ .align 4
+ .global __unordsf2
+ .type __unordsf2, @function
+__unordsf2:
+ leaf_entry sp, 16
+ movi a6, 0x7f800000
+ ball a2, a6, 3f
+1: ball a3, a6, 4f
+2: movi a2, 0
+ leaf_return
+
+3: slli a7, a2, 9
+ beqz a7, 1b
+ movi a2, 1
+ leaf_return
+
+4: slli a7, a3, 9
+ beqz a7, 2b
+ movi a2, 1
+ leaf_return
+
+#endif /* L_cmpsf2 */
+
+#ifdef L_fixsfsi
+
+ .align 4
+ .global __fixsfsi
+ .type __fixsfsi, @function
+__fixsfsi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7f800000
+ ball a2, a6, .Lfixsfsi_nan_or_inf
+
+ /* Extract the exponent and check if 0 < (exp - 0x7e) < 32. */
+ extui a4, a2, 23, 8
+ addi a4, a4, -0x7e
+ bgei a4, 32, .Lfixsfsi_maxint
+ blti a4, 1, .Lfixsfsi_zero
+
+ /* Add explicit "1.0" and shift << 8. */
+ or a7, a2, a6
+ slli a5, a7, 8
+
+ /* Shift back to the right, based on the exponent. */
+ ssl a4 /* shift by 32 - a4 */
+ srl a5, a5
+
+ /* Negate the result if sign != 0. */
+ neg a2, a5
+ movgez a2, a5, a7
+ leaf_return
+
+.Lfixsfsi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, a2, 9
+ beqz a4, .Lfixsfsi_maxint
+
+ /* Translate NaN to +maxint. */
+ movi a2, 0
+
+.Lfixsfsi_maxint:
+ slli a4, a6, 8 /* 0x80000000 */
+ addi a5, a4, -1 /* 0x7fffffff */
+ movgez a4, a5, a2
+ mov a2, a4
+ leaf_return
+
+.Lfixsfsi_zero:
+ movi a2, 0
+ leaf_return
+
+#endif /* L_fixsfsi */
+
+#ifdef L_fixsfdi
+
+ .align 4
+ .global __fixsfdi
+ .type __fixsfdi, @function
+__fixsfdi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7f800000
+ ball a2, a6, .Lfixsfdi_nan_or_inf
+
+ /* Extract the exponent and check if 0 < (exp - 0x7e) < 64. */
+ extui a4, a2, 23, 8
+ addi a4, a4, -0x7e
+ bgei a4, 64, .Lfixsfdi_maxint
+ blti a4, 1, .Lfixsfdi_zero
+
+ /* Add explicit "1.0" and shift << 8. */
+ or a7, a2, a6
+ slli xh, a7, 8
+
+ /* Shift back to the right, based on the exponent. */
+ ssl a4 /* shift by 64 - a4 */
+ bgei a4, 32, .Lfixsfdi_smallshift
+ srl xl, xh
+ movi xh, 0
+
+.Lfixsfdi_shifted:
+ /* Negate the result if sign != 0. */
+ bgez a7, 1f
+ neg xl, xl
+ neg xh, xh
+ beqz xl, 1f
+ addi xh, xh, -1
+1: leaf_return
+
+.Lfixsfdi_smallshift:
+ movi xl, 0
+ sll xl, xh
+ srl xh, xh
+ j .Lfixsfdi_shifted
+
+.Lfixsfdi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, a2, 9
+ beqz a4, .Lfixsfdi_maxint
+
+ /* Translate NaN to +maxint. */
+ movi a2, 0
+
+.Lfixsfdi_maxint:
+ slli a7, a6, 8 /* 0x80000000 */
+ bgez a2, 1f
+ mov xh, a7
+ movi xl, 0
+ leaf_return
+
+1: addi xh, a7, -1 /* 0x7fffffff */
+ movi xl, -1
+ leaf_return
+
+.Lfixsfdi_zero:
+ movi xh, 0
+ movi xl, 0
+ leaf_return
+
+#endif /* L_fixsfdi */
+
+#ifdef L_fixunssfsi
+
+ .align 4
+ .global __fixunssfsi
+ .type __fixunssfsi, @function
+__fixunssfsi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7f800000
+ ball a2, a6, .Lfixunssfsi_nan_or_inf
+
+ /* Extract the exponent and check if 0 <= (exp - 0x7f) < 32. */
+ extui a4, a2, 23, 8
+ addi a4, a4, -0x7f
+ bgei a4, 32, .Lfixunssfsi_maxint
+ bltz a4, .Lfixunssfsi_zero
+
+ /* Add explicit "1.0" and shift << 8. */
+ or a7, a2, a6
+ slli a5, a7, 8
+
+ /* Shift back to the right, based on the exponent. */
+ addi a4, a4, 1
+ beqi a4, 32, .Lfixunssfsi_bigexp
+ ssl a4 /* shift by 32 - a4 */
+ srl a5, a5
+
+ /* Negate the result if sign != 0. */
+ neg a2, a5
+ movgez a2, a5, a7
+ leaf_return
+
+.Lfixunssfsi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, a2, 9
+ beqz a4, .Lfixunssfsi_maxint
+
+ /* Translate NaN to 0xffffffff. */
+ movi a2, -1
+ leaf_return
+
+.Lfixunssfsi_maxint:
+ slli a4, a6, 8 /* 0x80000000 */
+ movi a5, -1 /* 0xffffffff */
+ movgez a4, a5, a2
+ mov a2, a4
+ leaf_return
+
+.Lfixunssfsi_zero:
+ movi a2, 0
+ leaf_return
+
+.Lfixunssfsi_bigexp:
+ /* Handle unsigned maximum exponent case. */
+ bltz a2, 1f
+ mov a2, a5 /* no shift needed */
+ leaf_return
+
+ /* Return 0x80000000 if negative. */
+1: slli a2, a6, 8
+ leaf_return
+
+#endif /* L_fixunssfsi */
+
+#ifdef L_fixunssfdi
+
+ .align 4
+ .global __fixunssfdi
+ .type __fixunssfdi, @function
+__fixunssfdi:
+ leaf_entry sp, 16
+
+ /* Check for NaN and Infinity. */
+ movi a6, 0x7f800000
+ ball a2, a6, .Lfixunssfdi_nan_or_inf
+
+ /* Extract the exponent and check if 0 <= (exp - 0x7f) < 64. */
+ extui a4, a2, 23, 8
+ addi a4, a4, -0x7f
+ bgei a4, 64, .Lfixunssfdi_maxint
+ bltz a4, .Lfixunssfdi_zero
+
+ /* Add explicit "1.0" and shift << 8. */
+ or a7, a2, a6
+ slli xh, a7, 8
+
+ /* Shift back to the right, based on the exponent. */
+ addi a4, a4, 1
+ beqi a4, 64, .Lfixunssfdi_bigexp
+ ssl a4 /* shift by 64 - a4 */
+ bgei a4, 32, .Lfixunssfdi_smallshift
+ srl xl, xh
+ movi xh, 0
+
+.Lfixunssfdi_shifted:
+ /* Negate the result if sign != 0. */
+ bgez a7, 1f
+ neg xl, xl
+ neg xh, xh
+ beqz xl, 1f
+ addi xh, xh, -1
+1: leaf_return
+
+.Lfixunssfdi_smallshift:
+ movi xl, 0
+ src xl, xh, xl
+ srl xh, xh
+ j .Lfixunssfdi_shifted
+
+.Lfixunssfdi_nan_or_inf:
+ /* Handle Infinity and NaN. */
+ slli a4, a2, 9
+ beqz a4, .Lfixunssfdi_maxint
+
+ /* Translate NaN to 0xffffffff.... */
+1: movi xh, -1
+ movi xl, -1
+ leaf_return
+
+.Lfixunssfdi_maxint:
+ bgez a2, 1b
+2: slli xh, a6, 8 /* 0x80000000 */
+ movi xl, 0
+ leaf_return
+
+.Lfixunssfdi_zero:
+ movi xh, 0
+ movi xl, 0
+ leaf_return
+
+.Lfixunssfdi_bigexp:
+ /* Handle unsigned maximum exponent case. */
+ bltz a7, 2b
+ movi xl, 0
+ leaf_return /* no shift needed */
+
+#endif /* L_fixunssfdi */
+
+#ifdef L_floatsisf
+
+ .align 4
+ .global __floatunsisf
+ .type __floatunsisf, @function
+__floatunsisf:
+ leaf_entry sp, 16
+ beqz a2, .Lfloatsisf_return
+
+ /* Set the sign to zero and jump to the floatsisf code. */
+ movi a7, 0
+ j .Lfloatsisf_normalize
+
+ .align 4
+ .global __floatsisf
+ .type __floatsisf, @function
+__floatsisf:
+ leaf_entry sp, 16
+
+ /* Check for zero. */
+ beqz a2, .Lfloatsisf_return
+
+ /* Save the sign. */
+ extui a7, a2, 31, 1
+
+ /* Get the absolute value. */
+#if XCHAL_HAVE_ABS
+ abs a2, a2
+#else
+ neg a4, a2
+ movltz a2, a4, a2
+#endif
+
+.Lfloatsisf_normalize:
+ /* Normalize with the first 1 bit in the msb. */
+ do_nsau a4, a2, a5, a6
+ ssl a4
+ sll a5, a2
+
+ /* Shift the mantissa into position, with rounding bits in a6. */
+ srli a2, a5, 8
+ slli a6, a5, (32 - 8)
+
+ /* Set the exponent. */
+ movi a5, 0x9d /* 0x7e + 31 */
+ sub a5, a5, a4
+ slli a5, a5, 23
+ add a2, a2, a5
+
+ /* Add the sign. */
+ slli a7, a7, 31
+ or a2, a2, a7
+
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a6, .Lfloatsisf_return
+ addi a2, a2, 1 /* Overflow to the exponent is OK. */
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a6, a6, 1
+ beqz a6, .Lfloatsisf_exactlyhalf
+
+.Lfloatsisf_return:
+ leaf_return
+
+.Lfloatsisf_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli a2, a2, 1
+ slli a2, a2, 1
+ leaf_return
+
+#endif /* L_floatsisf */
+
+#ifdef L_floatdisf
+
+ .align 4
+ .global __floatundisf
+ .type __floatundisf, @function
+__floatundisf:
+ leaf_entry sp, 16
+
+ /* Check for zero. */
+ or a4, xh, xl
+ beqz a4, 2f
+
+ /* Set the sign to zero and jump to the floatdisf code. */
+ movi a7, 0
+ j .Lfloatdisf_normalize
+
+ .align 4
+ .global __floatdisf
+ .type __floatdisf, @function
+__floatdisf:
+ leaf_entry sp, 16
+
+ /* Check for zero. */
+ or a4, xh, xl
+ beqz a4, 2f
+
+ /* Save the sign. */
+ extui a7, xh, 31, 1
+
+ /* Get the absolute value. */
+ bgez xh, .Lfloatdisf_normalize
+ neg xl, xl
+ neg xh, xh
+ beqz xl, .Lfloatdisf_normalize
+ addi xh, xh, -1
+
+.Lfloatdisf_normalize:
+ /* Normalize with the first 1 bit in the msb of xh. */
+ beqz xh, .Lfloatdisf_bigshift
+ do_nsau a4, xh, a5, a6
+ ssl a4
+ src xh, xh, xl
+ sll xl, xl
+
+.Lfloatdisf_shifted:
+ /* Shift the mantissa into position, with rounding bits in a6. */
+ ssai 8
+ sll a5, xl
+ src a6, xh, xl
+ srl xh, xh
+ beqz a5, 1f
+ movi a5, 1
+ or a6, a6, a5
+1:
+ /* Set the exponent. */
+ movi a5, 0xbd /* 0x7e + 63 */
+ sub a5, a5, a4
+ slli a5, a5, 23
+ add a2, xh, a5
+
+ /* Add the sign. */
+ slli a7, a7, 31
+ or a2, a2, a7
+
+ /* Round up if the leftover fraction is >= 1/2. */
+ bgez a6, 2f
+ addi a2, a2, 1 /* Overflow to the exponent is OK. */
+
+ /* Check if the leftover fraction is exactly 1/2. */
+ slli a6, a6, 1
+ beqz a6, .Lfloatdisf_exactlyhalf
+2: leaf_return
+
+.Lfloatdisf_bigshift:
+ /* xh is zero. Normalize with first 1 bit of xl in the msb of xh. */
+ do_nsau a4, xl, a5, a6
+ ssl a4
+ sll xh, xl
+ movi xl, 0
+ addi a4, a4, 32
+ j .Lfloatdisf_shifted
+
+.Lfloatdisf_exactlyhalf:
+ /* Round down to the nearest even value. */
+ srli a2, a2, 1
+ slli a2, a2, 1
+ leaf_return
+
+#endif /* L_floatdisf */
diff --git a/gcc-4.9/libgcc/config/xtensa/lib1funcs.S b/gcc-4.9/libgcc/config/xtensa/lib1funcs.S
new file mode 100644
index 000000000..7c16cc850
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/lib1funcs.S
@@ -0,0 +1,844 @@
+/* Assembly functions for the Xtensa version of libgcc1.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "xtensa-config.h"
+
+/* Define macros for the ABS and ADDX* instructions to handle cases
+ where they are not included in the Xtensa processor configuration. */
+
+ .macro do_abs dst, src, tmp
+#if XCHAL_HAVE_ABS
+ abs \dst, \src
+#else
+ neg \tmp, \src
+ movgez \tmp, \src, \src
+ mov \dst, \tmp
+#endif
+ .endm
+
+ .macro do_addx2 dst, as, at, tmp
+#if XCHAL_HAVE_ADDX
+ addx2 \dst, \as, \at
+#else
+ slli \tmp, \as, 1
+ add \dst, \tmp, \at
+#endif
+ .endm
+
+ .macro do_addx4 dst, as, at, tmp
+#if XCHAL_HAVE_ADDX
+ addx4 \dst, \as, \at
+#else
+ slli \tmp, \as, 2
+ add \dst, \tmp, \at
+#endif
+ .endm
+
+ .macro do_addx8 dst, as, at, tmp
+#if XCHAL_HAVE_ADDX
+ addx8 \dst, \as, \at
+#else
+ slli \tmp, \as, 3
+ add \dst, \tmp, \at
+#endif
+ .endm
+
+/* Define macros for leaf function entry and return, supporting either the
+ standard register windowed ABI or the non-windowed call0 ABI. These
+ macros do not allocate any extra stack space, so they only work for
+ leaf functions that do not need to spill anything to the stack. */
+
+ .macro leaf_entry reg, size
+#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
+ entry \reg, \size
+#else
+ /* do nothing */
+#endif
+ .endm
+
+ .macro leaf_return
+#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
+ retw
+#else
+ ret
+#endif
+ .endm
+
+
+#ifdef L_mulsi3
+ .align 4
+ .global __mulsi3
+ .type __mulsi3, @function
+__mulsi3:
+ leaf_entry sp, 16
+
+#if XCHAL_HAVE_MUL32
+ mull a2, a2, a3
+
+#elif XCHAL_HAVE_MUL16
+ or a4, a2, a3
+ srai a4, a4, 16
+ bnez a4, .LMUL16
+ mul16u a2, a2, a3
+ leaf_return
+.LMUL16:
+ srai a4, a2, 16
+ srai a5, a3, 16
+ mul16u a7, a4, a3
+ mul16u a6, a5, a2
+ mul16u a4, a2, a3
+ add a7, a7, a6
+ slli a7, a7, 16
+ add a2, a7, a4
+
+#elif XCHAL_HAVE_MAC16
+ mul.aa.hl a2, a3
+ mula.aa.lh a2, a3
+ rsr a5, ACCLO
+ umul.aa.ll a2, a3
+ rsr a4, ACCLO
+ slli a5, a5, 16
+ add a2, a4, a5
+
+#else /* !MUL32 && !MUL16 && !MAC16 */
+
+ /* Multiply one bit at a time, but unroll the loop 4x to better
+ exploit the addx instructions and avoid overhead.
+ Peel the first iteration to save a cycle on init. */
+
+ /* Avoid negative numbers. */
+ xor a5, a2, a3 /* Top bit is 1 if one input is negative. */
+ do_abs a3, a3, a6
+ do_abs a2, a2, a6
+
+ /* Swap so the second argument is smaller. */
+ sub a7, a2, a3
+ mov a4, a3
+ movgez a4, a2, a7 /* a4 = max (a2, a3) */
+ movltz a3, a2, a7 /* a3 = min (a2, a3) */
+
+ movi a2, 0
+ extui a6, a3, 0, 1
+ movnez a2, a4, a6
+
+ do_addx2 a7, a4, a2, a7
+ extui a6, a3, 1, 1
+ movnez a2, a7, a6
+
+ do_addx4 a7, a4, a2, a7
+ extui a6, a3, 2, 1
+ movnez a2, a7, a6
+
+ do_addx8 a7, a4, a2, a7
+ extui a6, a3, 3, 1
+ movnez a2, a7, a6
+
+ bgeui a3, 16, .Lmult_main_loop
+ neg a3, a2
+ movltz a2, a3, a5
+ leaf_return
+
+ .align 4
+.Lmult_main_loop:
+ srli a3, a3, 4
+ slli a4, a4, 4
+
+ add a7, a4, a2
+ extui a6, a3, 0, 1
+ movnez a2, a7, a6
+
+ do_addx2 a7, a4, a2, a7
+ extui a6, a3, 1, 1
+ movnez a2, a7, a6
+
+ do_addx4 a7, a4, a2, a7
+ extui a6, a3, 2, 1
+ movnez a2, a7, a6
+
+ do_addx8 a7, a4, a2, a7
+ extui a6, a3, 3, 1
+ movnez a2, a7, a6
+
+ bgeui a3, 16, .Lmult_main_loop
+
+ neg a3, a2
+ movltz a2, a3, a5
+
+#endif /* !MUL32 && !MUL16 && !MAC16 */
+
+ leaf_return
+ .size __mulsi3, . - __mulsi3
+
+#endif /* L_mulsi3 */
+
+
+#ifdef L_umulsidi3
+
+#if !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MAC16
+#define XCHAL_NO_MUL 1
+#endif
+
+ .align 4
+ .global __umulsidi3
+ .type __umulsidi3, @function
+__umulsidi3:
+#if __XTENSA_CALL0_ABI__
+ leaf_entry sp, 32
+ addi sp, sp, -32
+ s32i a12, sp, 16
+ s32i a13, sp, 20
+ s32i a14, sp, 24
+ s32i a15, sp, 28
+#elif XCHAL_NO_MUL
+ /* This is not really a leaf function; allocate enough stack space
+ to allow CALL12s to a helper function. */
+ leaf_entry sp, 48
+#else
+ leaf_entry sp, 16
+#endif
+
+#ifdef __XTENSA_EB__
+#define wh a2
+#define wl a3
+#else
+#define wh a3
+#define wl a2
+#endif /* __XTENSA_EB__ */
+
+ /* This code is taken from the mulsf3 routine in ieee754-sf.S.
+ See more comments there. */
+
+#if XCHAL_HAVE_MUL32_HIGH
+ mull a6, a2, a3
+ muluh wh, a2, a3
+ mov wl, a6
+
+#else /* ! MUL32_HIGH */
+
+#if __XTENSA_CALL0_ABI__ && XCHAL_NO_MUL
+ /* a0 and a8 will be clobbered by calling the multiply function
+ but a8 is not used here and need not be saved. */
+ s32i a0, sp, 0
+#endif
+
+#if XCHAL_HAVE_MUL16 || XCHAL_HAVE_MUL32
+
+#define a2h a4
+#define a3h a5
+
+ /* Get the high halves of the inputs into registers. */
+ srli a2h, a2, 16
+ srli a3h, a3, 16
+
+#define a2l a2
+#define a3l a3
+
+#if XCHAL_HAVE_MUL32 && !XCHAL_HAVE_MUL16
+ /* Clear the high halves of the inputs. This does not matter
+ for MUL16 because the high bits are ignored. */
+ extui a2, a2, 0, 16
+ extui a3, a3, 0, 16
+#endif
+#endif /* MUL16 || MUL32 */
+
+
+#if XCHAL_HAVE_MUL16
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ mul16u dst, xreg ## xhalf, yreg ## yhalf
+
+#elif XCHAL_HAVE_MUL32
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ mull dst, xreg ## xhalf, yreg ## yhalf
+
+#elif XCHAL_HAVE_MAC16
+
+/* The preprocessor insists on inserting a space when concatenating after
+ a period in the definition of do_mul below. These macros are a workaround
+ using underscores instead of periods when doing the concatenation. */
+#define umul_aa_ll umul.aa.ll
+#define umul_aa_lh umul.aa.lh
+#define umul_aa_hl umul.aa.hl
+#define umul_aa_hh umul.aa.hh
+
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ umul_aa_ ## xhalf ## yhalf xreg, yreg; \
+ rsr dst, ACCLO
+
+#else /* no multiply hardware */
+
+#define set_arg_l(dst, src) \
+ extui dst, src, 0, 16
+#define set_arg_h(dst, src) \
+ srli dst, src, 16
+
+#if __XTENSA_CALL0_ABI__
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ set_arg_ ## xhalf (a13, xreg); \
+ set_arg_ ## yhalf (a14, yreg); \
+ call0 .Lmul_mulsi3; \
+ mov dst, a12
+#else
+#define do_mul(dst, xreg, xhalf, yreg, yhalf) \
+ set_arg_ ## xhalf (a14, xreg); \
+ set_arg_ ## yhalf (a15, yreg); \
+ call12 .Lmul_mulsi3; \
+ mov dst, a14
+#endif /* __XTENSA_CALL0_ABI__ */
+
+#endif /* no multiply hardware */
+
+ /* Add pp1 and pp2 into a6 with carry-out in a9. */
+ do_mul(a6, a2, l, a3, h) /* pp 1 */
+ do_mul(a11, a2, h, a3, l) /* pp 2 */
+ movi a9, 0
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ /* Shift the high half of a9/a6 into position in a9. Note that
+ this value can be safely incremented without any carry-outs. */
+ ssai 16
+ src a9, a9, a6
+
+ /* Compute the low word into a6. */
+ do_mul(a11, a2, l, a3, l) /* pp 0 */
+ sll a6, a6
+ add a6, a6, a11
+ bgeu a6, a11, 1f
+ addi a9, a9, 1
+1:
+ /* Compute the high word into wh. */
+ do_mul(wh, a2, h, a3, h) /* pp 3 */
+ add wh, wh, a9
+ mov wl, a6
+
+#endif /* !MUL32_HIGH */
+
+#if __XTENSA_CALL0_ABI__ && XCHAL_NO_MUL
+ /* Restore the original return address. */
+ l32i a0, sp, 0
+#endif
+#if __XTENSA_CALL0_ABI__
+ l32i a12, sp, 16
+ l32i a13, sp, 20
+ l32i a14, sp, 24
+ l32i a15, sp, 28
+ addi sp, sp, 32
+#endif
+ leaf_return
+
+#if XCHAL_NO_MUL
+
+ /* For Xtensa processors with no multiply hardware, this simplified
+ version of _mulsi3 is used for multiplying 16-bit chunks of
+ the floating-point mantissas. When using CALL0, this function
+ uses a custom ABI: the inputs are passed in a13 and a14, the
+ result is returned in a12, and a8 and a15 are clobbered. */
+ .align 4
+.Lmul_mulsi3:
+ leaf_entry sp, 16
+ .macro mul_mulsi3_body dst, src1, src2, tmp1, tmp2
+ movi \dst, 0
+1: add \tmp1, \src2, \dst
+ extui \tmp2, \src1, 0, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx2 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 1, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx4 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 2, 1
+ movnez \dst, \tmp1, \tmp2
+
+ do_addx8 \tmp1, \src2, \dst, \tmp1
+ extui \tmp2, \src1, 3, 1
+ movnez \dst, \tmp1, \tmp2
+
+ srli \src1, \src1, 4
+ slli \src2, \src2, 4
+ bnez \src1, 1b
+ .endm
+#if __XTENSA_CALL0_ABI__
+ mul_mulsi3_body a12, a13, a14, a15, a8
+#else
+ /* The result will be written into a2, so save that argument in a4. */
+ mov a4, a2
+ mul_mulsi3_body a2, a4, a3, a5, a6
+#endif
+ leaf_return
+#endif /* XCHAL_NO_MUL */
+
+ .size __umulsidi3, . - __umulsidi3
+
+#endif /* L_umulsidi3 */
+
+
+/* Define a macro for the NSAU (unsigned normalize shift amount)
+ instruction, which computes the number of leading zero bits,
+ to handle cases where it is not included in the Xtensa processor
+ configuration. */
+
+ .macro do_nsau cnt, val, tmp, a
+#if XCHAL_HAVE_NSA
+ nsau \cnt, \val
+#else
+ mov \a, \val
+ movi \cnt, 0
+ extui \tmp, \a, 16, 16
+ bnez \tmp, 0f
+ movi \cnt, 16
+ slli \a, \a, 16
+0:
+ extui \tmp, \a, 24, 8
+ bnez \tmp, 1f
+ addi \cnt, \cnt, 8
+ slli \a, \a, 8
+1:
+ movi \tmp, __nsau_data
+ extui \a, \a, 24, 8
+ add \tmp, \tmp, \a
+ l8ui \tmp, \tmp, 0
+ add \cnt, \cnt, \tmp
+#endif /* !XCHAL_HAVE_NSA */
+ .endm
+
+#ifdef L_clz
+ .section .rodata
+ .align 4
+ .global __nsau_data
+ .type __nsau_data, @object
+__nsau_data:
+#if !XCHAL_HAVE_NSA
+ .byte 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4
+ .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
+ .byte 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+ .byte 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+ .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+#endif /* !XCHAL_HAVE_NSA */
+ .size __nsau_data, . - __nsau_data
+ .hidden __nsau_data
+#endif /* L_clz */
+
+
+#ifdef L_clzsi2
+ .align 4
+ .global __clzsi2
+ .type __clzsi2, @function
+__clzsi2:
+ leaf_entry sp, 16
+ do_nsau a2, a2, a3, a4
+ leaf_return
+ .size __clzsi2, . - __clzsi2
+
+#endif /* L_clzsi2 */
+
+
+#ifdef L_ctzsi2
+ .align 4
+ .global __ctzsi2
+ .type __ctzsi2, @function
+__ctzsi2:
+ leaf_entry sp, 16
+ neg a3, a2
+ and a3, a3, a2
+ do_nsau a2, a3, a4, a5
+ neg a2, a2
+ addi a2, a2, 31
+ leaf_return
+ .size __ctzsi2, . - __ctzsi2
+
+#endif /* L_ctzsi2 */
+
+
+#ifdef L_ffssi2
+ .align 4
+ .global __ffssi2
+ .type __ffssi2, @function
+__ffssi2:
+ leaf_entry sp, 16
+ neg a3, a2
+ and a3, a3, a2
+ do_nsau a2, a3, a4, a5
+ neg a2, a2
+ addi a2, a2, 32
+ leaf_return
+ .size __ffssi2, . - __ffssi2
+
+#endif /* L_ffssi2 */
+
+
+#ifdef L_udivsi3
+ .align 4
+ .global __udivsi3
+ .type __udivsi3, @function
+__udivsi3:
+ leaf_entry sp, 16
+#if XCHAL_HAVE_DIV32
+ quou a2, a2, a3
+#else
+ bltui a3, 2, .Lle_one /* check if the divisor <= 1 */
+
+ mov a6, a2 /* keep dividend in a6 */
+ do_nsau a5, a6, a2, a7 /* dividend_shift = nsau (dividend) */
+ do_nsau a4, a3, a2, a7 /* divisor_shift = nsau (divisor) */
+ bgeu a5, a4, .Lspecial
+
+ sub a4, a4, a5 /* count = divisor_shift - dividend_shift */
+ ssl a4
+ sll a3, a3 /* divisor <<= count */
+ movi a2, 0 /* quotient = 0 */
+
+ /* test-subtract-and-shift loop; one quotient bit on each iteration */
+#if XCHAL_HAVE_LOOPS
+ loopnez a4, .Lloopend
+#endif /* XCHAL_HAVE_LOOPS */
+.Lloop:
+ bltu a6, a3, .Lzerobit
+ sub a6, a6, a3
+ addi a2, a2, 1
+.Lzerobit:
+ slli a2, a2, 1
+ srli a3, a3, 1
+#if !XCHAL_HAVE_LOOPS
+ addi a4, a4, -1
+ bnez a4, .Lloop
+#endif /* !XCHAL_HAVE_LOOPS */
+.Lloopend:
+
+ bltu a6, a3, .Lreturn
+ addi a2, a2, 1 /* increment quotient if dividend >= divisor */
+.Lreturn:
+ leaf_return
+
+.Lle_one:
+ beqz a3, .Lerror /* if divisor == 1, return the dividend */
+ leaf_return
+
+.Lspecial:
+ /* return dividend >= divisor */
+ bltu a6, a3, .Lreturn0
+ movi a2, 1
+ leaf_return
+
+.Lerror:
+ /* Divide by zero: Use an illegal instruction to force an exception.
+ The subsequent "DIV0" string can be recognized by the exception
+ handler to identify the real cause of the exception. */
+ ill
+ .ascii "DIV0"
+
+.Lreturn0:
+ movi a2, 0
+#endif /* XCHAL_HAVE_DIV32 */
+ leaf_return
+ .size __udivsi3, . - __udivsi3
+
+#endif /* L_udivsi3 */
+
+
+#ifdef L_divsi3
+ .align 4
+ .global __divsi3
+ .type __divsi3, @function
+__divsi3:
+ leaf_entry sp, 16
+#if XCHAL_HAVE_DIV32
+ quos a2, a2, a3
+#else
+ xor a7, a2, a3 /* sign = dividend ^ divisor */
+ do_abs a6, a2, a4 /* udividend = abs (dividend) */
+ do_abs a3, a3, a4 /* udivisor = abs (divisor) */
+ bltui a3, 2, .Lle_one /* check if udivisor <= 1 */
+ do_nsau a5, a6, a2, a8 /* udividend_shift = nsau (udividend) */
+ do_nsau a4, a3, a2, a8 /* udivisor_shift = nsau (udivisor) */
+ bgeu a5, a4, .Lspecial
+
+ sub a4, a4, a5 /* count = udivisor_shift - udividend_shift */
+ ssl a4
+ sll a3, a3 /* udivisor <<= count */
+ movi a2, 0 /* quotient = 0 */
+
+ /* test-subtract-and-shift loop; one quotient bit on each iteration */
+#if XCHAL_HAVE_LOOPS
+ loopnez a4, .Lloopend
+#endif /* XCHAL_HAVE_LOOPS */
+.Lloop:
+ bltu a6, a3, .Lzerobit
+ sub a6, a6, a3
+ addi a2, a2, 1
+.Lzerobit:
+ slli a2, a2, 1
+ srli a3, a3, 1
+#if !XCHAL_HAVE_LOOPS
+ addi a4, a4, -1
+ bnez a4, .Lloop
+#endif /* !XCHAL_HAVE_LOOPS */
+.Lloopend:
+
+ bltu a6, a3, .Lreturn
+ addi a2, a2, 1 /* increment if udividend >= udivisor */
+.Lreturn:
+ neg a5, a2
+ movltz a2, a5, a7 /* return (sign < 0) ? -quotient : quotient */
+ leaf_return
+
+.Lle_one:
+ beqz a3, .Lerror
+ neg a2, a6 /* if udivisor == 1, then return... */
+ movgez a2, a6, a7 /* (sign < 0) ? -udividend : udividend */
+ leaf_return
+
+.Lspecial:
+ bltu a6, a3, .Lreturn0 /* if dividend < divisor, return 0 */
+ movi a2, 1
+ movi a4, -1
+ movltz a2, a4, a7 /* else return (sign < 0) ? -1 : 1 */
+ leaf_return
+
+.Lerror:
+ /* Divide by zero: Use an illegal instruction to force an exception.
+ The subsequent "DIV0" string can be recognized by the exception
+ handler to identify the real cause of the exception. */
+ ill
+ .ascii "DIV0"
+
+.Lreturn0:
+ movi a2, 0
+#endif /* XCHAL_HAVE_DIV32 */
+ leaf_return
+ .size __divsi3, . - __divsi3
+
+#endif /* L_divsi3 */
+
+
+#ifdef L_umodsi3
+ .align 4
+ .global __umodsi3
+ .type __umodsi3, @function
+__umodsi3:
+ leaf_entry sp, 16
+#if XCHAL_HAVE_DIV32
+ remu a2, a2, a3
+#else
+ bltui a3, 2, .Lle_one /* check if the divisor is <= 1 */
+
+ do_nsau a5, a2, a6, a7 /* dividend_shift = nsau (dividend) */
+ do_nsau a4, a3, a6, a7 /* divisor_shift = nsau (divisor) */
+ bgeu a5, a4, .Lspecial
+
+ sub a4, a4, a5 /* count = divisor_shift - dividend_shift */
+ ssl a4
+ sll a3, a3 /* divisor <<= count */
+
+ /* test-subtract-and-shift loop */
+#if XCHAL_HAVE_LOOPS
+ loopnez a4, .Lloopend
+#endif /* XCHAL_HAVE_LOOPS */
+.Lloop:
+ bltu a2, a3, .Lzerobit
+ sub a2, a2, a3
+.Lzerobit:
+ srli a3, a3, 1
+#if !XCHAL_HAVE_LOOPS
+ addi a4, a4, -1
+ bnez a4, .Lloop
+#endif /* !XCHAL_HAVE_LOOPS */
+.Lloopend:
+
+.Lspecial:
+ bltu a2, a3, .Lreturn
+ sub a2, a2, a3 /* subtract once more if dividend >= divisor */
+.Lreturn:
+ leaf_return
+
+.Lle_one:
+ bnez a3, .Lreturn0
+
+ /* Divide by zero: Use an illegal instruction to force an exception.
+ The subsequent "DIV0" string can be recognized by the exception
+ handler to identify the real cause of the exception. */
+ ill
+ .ascii "DIV0"
+
+.Lreturn0:
+ movi a2, 0
+#endif /* XCHAL_HAVE_DIV32 */
+ leaf_return
+ .size __umodsi3, . - __umodsi3
+
+#endif /* L_umodsi3 */
+
+
+#ifdef L_modsi3
+ .align 4
+ .global __modsi3
+ .type __modsi3, @function
+__modsi3:
+ leaf_entry sp, 16
+#if XCHAL_HAVE_DIV32
+ rems a2, a2, a3
+#else
+ mov a7, a2 /* save original (signed) dividend */
+ do_abs a2, a2, a4 /* udividend = abs (dividend) */
+ do_abs a3, a3, a4 /* udivisor = abs (divisor) */
+ bltui a3, 2, .Lle_one /* check if udivisor <= 1 */
+ do_nsau a5, a2, a6, a8 /* udividend_shift = nsau (udividend) */
+ do_nsau a4, a3, a6, a8 /* udivisor_shift = nsau (udivisor) */
+ bgeu a5, a4, .Lspecial
+
+ sub a4, a4, a5 /* count = udivisor_shift - udividend_shift */
+ ssl a4
+ sll a3, a3 /* udivisor <<= count */
+
+ /* test-subtract-and-shift loop */
+#if XCHAL_HAVE_LOOPS
+ loopnez a4, .Lloopend
+#endif /* XCHAL_HAVE_LOOPS */
+.Lloop:
+ bltu a2, a3, .Lzerobit
+ sub a2, a2, a3
+.Lzerobit:
+ srli a3, a3, 1
+#if !XCHAL_HAVE_LOOPS
+ addi a4, a4, -1
+ bnez a4, .Lloop
+#endif /* !XCHAL_HAVE_LOOPS */
+.Lloopend:
+
+.Lspecial:
+ bltu a2, a3, .Lreturn
+ sub a2, a2, a3 /* subtract again if udividend >= udivisor */
+.Lreturn:
+ bgez a7, .Lpositive
+ neg a2, a2 /* if (dividend < 0), return -udividend */
+.Lpositive:
+ leaf_return
+
+.Lle_one:
+ bnez a3, .Lreturn0
+
+ /* Divide by zero: Use an illegal instruction to force an exception.
+ The subsequent "DIV0" string can be recognized by the exception
+ handler to identify the real cause of the exception. */
+ ill
+ .ascii "DIV0"
+
+.Lreturn0:
+ movi a2, 0
+#endif /* XCHAL_HAVE_DIV32 */
+ leaf_return
+ .size __modsi3, . - __modsi3
+
+#endif /* L_modsi3 */
+
+
+#ifdef __XTENSA_EB__
+#define uh a2
+#define ul a3
+#else
+#define uh a3
+#define ul a2
+#endif /* __XTENSA_EB__ */
+
+
+#ifdef L_ashldi3
+ .align 4
+ .global __ashldi3
+ .type __ashldi3, @function
+__ashldi3:
+ leaf_entry sp, 16
+ ssl a4
+ bgei a4, 32, .Llow_only
+ src uh, uh, ul
+ sll ul, ul
+ leaf_return
+
+.Llow_only:
+ sll uh, ul
+ movi ul, 0
+ leaf_return
+ .size __ashldi3, . - __ashldi3
+
+#endif /* L_ashldi3 */
+
+
+#ifdef L_ashrdi3
+ .align 4
+ .global __ashrdi3
+ .type __ashrdi3, @function
+__ashrdi3:
+ leaf_entry sp, 16
+ ssr a4
+ bgei a4, 32, .Lhigh_only
+ src ul, uh, ul
+ sra uh, uh
+ leaf_return
+
+.Lhigh_only:
+ sra ul, uh
+ srai uh, uh, 31
+ leaf_return
+ .size __ashrdi3, . - __ashrdi3
+
+#endif /* L_ashrdi3 */
+
+
+#ifdef L_lshrdi3
+ .align 4
+ .global __lshrdi3
+ .type __lshrdi3, @function
+__lshrdi3:
+ leaf_entry sp, 16
+ ssr a4
+ bgei a4, 32, .Lhigh_only1
+ src ul, uh, ul
+ srl uh, uh
+ leaf_return
+
+.Lhigh_only1:
+ srl ul, uh
+ movi uh, 0
+ leaf_return
+ .size __lshrdi3, . - __lshrdi3
+
+#endif /* L_lshrdi3 */
+
+
+#include "ieee754-df.S"
+#include "ieee754-sf.S"
diff --git a/gcc-4.9/libgcc/config/xtensa/lib2funcs.S b/gcc-4.9/libgcc/config/xtensa/lib2funcs.S
new file mode 100644
index 000000000..3ac8c1da2
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/lib2funcs.S
@@ -0,0 +1,186 @@
+/* Assembly functions for libgcc2.
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "xtensa-config.h"
+
+/* __xtensa_libgcc_window_spill: This function flushes out all but the
+ current register window. This is used to set up the stack so that
+ arbitrary frames can be accessed. */
+
+ .align 4
+ .global __xtensa_libgcc_window_spill
+ .type __xtensa_libgcc_window_spill,@function
+__xtensa_libgcc_window_spill:
+ entry sp, 32
+ movi a2, 0
+ syscall
+ retw
+ .size __xtensa_libgcc_window_spill, .-__xtensa_libgcc_window_spill
+
+
+/* __xtensa_nonlocal_goto: This code does all the hard work of a
+ nonlocal goto on Xtensa. It is here in the library to avoid the
+ code size bloat of generating it in-line. There are two
+ arguments:
+
+ a2 = frame pointer for the procedure containing the label
+ a3 = goto handler address
+
+ This function never returns to its caller but instead goes directly
+ to the address of the specified goto handler. */
+
+ .align 4
+ .global __xtensa_nonlocal_goto
+ .type __xtensa_nonlocal_goto,@function
+__xtensa_nonlocal_goto:
+ entry sp, 32
+
+ /* Flush registers. */
+ mov a5, a2
+ movi a2, 0
+ syscall
+ mov a2, a5
+
+ /* Because the save area for a0-a3 is stored one frame below
+ the one identified by a2, the only way to restore those
+ registers is to unwind the stack. If alloca() were never
+ called, we could just unwind until finding the sp value
+ matching a2. However, a2 is a frame pointer, not a stack
+ pointer, and may not be encountered during the unwinding.
+ The solution is to unwind until going _past_ the value
+ given by a2. This involves keeping three stack pointer
+ values during the unwinding:
+
+ next = sp of frame N-1
+ cur = sp of frame N
+ prev = sp of frame N+1
+
+ When next > a2, the desired save area is stored relative
+ to prev. At this point, cur will be the same as a2
+ except in the alloca() case.
+
+ Besides finding the values to be restored to a0-a3, we also
+ need to find the current window size for the target
+ function. This can be extracted from the high bits of the
+ return address, initially in a0. As the unwinding
+ proceeds, the window size is taken from the value of a0
+ saved _two_ frames below the current frame. */
+
+ addi a5, sp, -16 /* a5 = prev - save area */
+ l32i a6, a5, 4
+ addi a6, a6, -16 /* a6 = cur - save area */
+ mov a8, a0 /* a8 = return address (for window size) */
+ j .Lfirstframe
+
+.Lnextframe:
+ l32i a8, a5, 0 /* next return address (for window size) */
+ mov a5, a6 /* advance prev */
+ addi a6, a7, -16 /* advance cur */
+.Lfirstframe:
+ l32i a7, a6, 4 /* a7 = next */
+ bgeu a2, a7, .Lnextframe
+
+ /* At this point, prev (a5) points to the save area with the saved
+ values of a0-a3. Copy those values into the save area at the
+ current sp so they will be reloaded when the return from this
+ function underflows. We don't have to worry about exceptions
+ while updating the current save area, because the windows have
+ already been flushed. */
+
+ addi a4, sp, -16 /* a4 = save area of this function */
+ l32i a6, a5, 0
+ l32i a7, a5, 4
+ s32i a6, a4, 0
+ s32i a7, a4, 4
+ l32i a6, a5, 8
+ l32i a7, a5, 12
+ s32i a6, a4, 8
+ s32i a7, a4, 12
+
+ /* Set return address to goto handler. Use the window size bits
+ from the return address two frames below the target. */
+ extui a8, a8, 30, 2 /* get window size from return addr. */
+ slli a3, a3, 2 /* get goto handler addr. << 2 */
+ ssai 2
+ src a0, a8, a3 /* combine them with a funnel shift */
+
+ retw
+ .size __xtensa_nonlocal_goto, .-__xtensa_nonlocal_goto
+
+
+/* __xtensa_sync_caches: This function is called after writing a trampoline
+ on the stack to force all the data writes to memory and invalidate the
+ instruction cache. a2 is the address of the new trampoline.
+
+ After the trampoline data is written out, it must be flushed out of
+ the data cache into memory. We use DHWB in case we have a writeback
+ cache. At least one DHWB instruction is needed for each data cache
+ line which may be touched by the trampoline. An ISYNC instruction
+ must follow the DHWBs.
+
+ We have to flush the i-cache to make sure that the new values get used.
+ At least one IHI instruction is needed for each i-cache line which may
+ be touched by the trampoline. An ISYNC instruction is also needed to
+ make sure that the modified instructions are loaded into the instruction
+ fetch buffer. */
+
+/* Use the maximum trampoline size. Flushing a bit extra is OK. */
+#define TRAMPOLINE_SIZE 60
+
+ .text
+ .align 4
+ .global __xtensa_sync_caches
+ .type __xtensa_sync_caches,@function
+__xtensa_sync_caches:
+ entry sp, 32
+#if XCHAL_DCACHE_SIZE > 0
+ /* Flush the trampoline from the data cache. */
+ extui a4, a2, 0, XCHAL_DCACHE_LINEWIDTH
+ addi a4, a4, TRAMPOLINE_SIZE
+ addi a4, a4, (1 << XCHAL_DCACHE_LINEWIDTH) - 1
+ srli a4, a4, XCHAL_DCACHE_LINEWIDTH
+ mov a3, a2
+.Ldcache_loop:
+ dhwb a3, 0
+ addi a3, a3, (1 << XCHAL_DCACHE_LINEWIDTH)
+ addi a4, a4, -1
+ bnez a4, .Ldcache_loop
+ isync
+#endif
+#if XCHAL_ICACHE_SIZE > 0
+ /* Invalidate the corresponding lines in the instruction cache. */
+ extui a4, a2, 0, XCHAL_ICACHE_LINEWIDTH
+ addi a4, a4, TRAMPOLINE_SIZE
+ addi a4, a4, (1 << XCHAL_ICACHE_LINEWIDTH) - 1
+ srli a4, a4, XCHAL_ICACHE_LINEWIDTH
+.Licache_loop:
+ ihi a2, 0
+ addi a2, a2, (1 << XCHAL_ICACHE_LINEWIDTH)
+ addi a4, a4, -1
+ bnez a4, .Licache_loop
+#endif
+ isync
+ retw
+ .size __xtensa_sync_caches, .-__xtensa_sync_caches
diff --git a/gcc-4.9/libgcc/config/xtensa/libgcc-glibc.ver b/gcc-4.9/libgcc/config/xtensa/libgcc-glibc.ver
new file mode 100644
index 000000000..43e7d4fc7
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/libgcc-glibc.ver
@@ -0,0 +1,3 @@
+GCC_4.3.0 {
+ __umulsidi3
+}
diff --git a/gcc-4.9/libgcc/config/xtensa/linux-unwind.h b/gcc-4.9/libgcc/config/xtensa/linux-unwind.h
new file mode 100644
index 000000000..6832d0b48
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/linux-unwind.h
@@ -0,0 +1,97 @@
+/* DWARF2 EH unwinding support for Xtensa.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* Do code reading to identify a signal frame, and set the frame
+ state data appropriately. See unwind-dw2-xtensa.c for the structs.
+ Don't use this at all if inhibit_libc is used. */
+
+#ifndef inhibit_libc
+
+#include <signal.h>
+#include <sys/ucontext.h>
+
+/* Encoded bytes for Xtensa instructions:
+ movi a2, __NR_rt_sigreturn
+ syscall
+ entry (first byte only)
+ Some of the bytes are endian-dependent. */
+
+#define MOVI_BYTE0 0x22
+#define MOVI_BYTE2 225 /* __NR_rt_sigreturn */
+#define SYSC_BYTE0 0
+#define SYSC_BYTE2 0
+
+#ifdef __XTENSA_EB__
+#define MOVI_BYTE1 0x0a
+#define SYSC_BYTE1 0x05
+#define ENTRY_BYTE 0x6c
+#else
+#define MOVI_BYTE1 0xa0
+#define SYSC_BYTE1 0x50
+#define ENTRY_BYTE 0x36
+#endif
+
+#define MD_FALLBACK_FRAME_STATE_FOR xtensa_fallback_frame_state
+
+static _Unwind_Reason_Code
+xtensa_fallback_frame_state (struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ unsigned char *pc = context->ra;
+ struct sigcontext *sc;
+
+ struct rt_sigframe {
+ siginfo_t info;
+ struct ucontext uc;
+ } *rt_;
+
+ /* movi a2, __NR_rt_sigreturn; syscall */
+ if (pc[0] != MOVI_BYTE0
+ || pc[1] != MOVI_BYTE1
+ || pc[2] != MOVI_BYTE2
+ || pc[3] != SYSC_BYTE0
+ || pc[4] != SYSC_BYTE1
+ || pc[5] != SYSC_BYTE2)
+ return _URC_END_OF_STACK;
+
+ rt_ = context->sp;
+ sc = &rt_->uc.uc_mcontext;
+ fs->signal_regs = (_Unwind_Word *) sc->sc_a;
+
+ /* If the signal arrived just before an ENTRY instruction, find the return
+ address and pretend the signal arrived before executing the CALL. */
+ if (*(unsigned char *) sc->sc_pc == ENTRY_BYTE)
+ {
+ unsigned callinc = (sc->sc_ps >> 16) & 3;
+ fs->signal_ra = ((sc->sc_a[callinc << 2] & XTENSA_RA_FIELD_MASK)
+ | context->ra_high_bits) - 3;
+ }
+ else
+ fs->signal_ra = sc->sc_pc;
+
+ fs->signal_frame = 1;
+ return _URC_NO_REASON;
+}
+
+#endif /* ifdef inhibit_libc */
diff --git a/gcc-4.9/libgcc/config/xtensa/t-elf b/gcc-4.9/libgcc/config/xtensa/t-elf
new file mode 100644
index 000000000..59d51210b
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/t-elf
@@ -0,0 +1,5 @@
+# Build CRT files and libgcc with the "longcalls" option
+CRTSTUFF_T_CFLAGS += -mlongcalls
+CRTSTUFF_T_CFLAGS_S += -mlongcalls
+
+HOST_LIBGCC2_CFLAGS += -mlongcalls
diff --git a/gcc-4.9/libgcc/config/xtensa/t-linux b/gcc-4.9/libgcc/config/xtensa/t-linux
new file mode 100644
index 000000000..6f4ae8934
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/t-linux
@@ -0,0 +1 @@
+SHLIB_MAPFILES += $(srcdir)/config/xtensa/libgcc-glibc.ver
diff --git a/gcc-4.9/libgcc/config/xtensa/t-xtensa b/gcc-4.9/libgcc/config/xtensa/t-xtensa
new file mode 100644
index 000000000..27399e67f
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/t-xtensa
@@ -0,0 +1,16 @@
+LIB1ASMSRC = xtensa/lib1funcs.S
+LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3 _udivsi3 _umodsi3 \
+ _umulsidi3 _clz _clzsi2 _ctzsi2 _ffssi2 \
+ _ashldi3 _ashrdi3 _lshrdi3 \
+ _negsf2 _addsubsf3 _mulsf3 _divsf3 _cmpsf2 _fixsfsi _fixsfdi \
+ _fixunssfsi _fixunssfdi _floatsisf _floatunsisf \
+ _floatdisf _floatundisf \
+ _negdf2 _addsubdf3 _muldf3 _divdf3 _cmpdf2 _fixdfsi _fixdfdi \
+ _fixunsdfsi _fixunsdfdi _floatsidf _floatunsidf \
+ _floatdidf _floatundidf \
+ _truncdfsf2 _extendsfdf2
+
+LIB2ADD = $(srcdir)/config/xtensa/lib2funcs.S
+
+LIB2ADDEH = $(srcdir)/config/xtensa/unwind-dw2-xtensa.c \
+ $(srcdir)/unwind-dw2-fde.c $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
diff --git a/gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.c b/gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.c
new file mode 100644
index 000000000..35f7797d4
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.c
@@ -0,0 +1,543 @@
+/* DWARF2 exception handling and frame unwinding for Xtensa.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tconfig.h"
+#include "tsystem.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "libgcc_tm.h"
+#include "dwarf2.h"
+#include "unwind.h"
+#ifdef __USING_SJLJ_EXCEPTIONS__
+# define NO_SIZE_OF_ENCODED_VALUE
+#endif
+#include "unwind-pe.h"
+#include "unwind-dw2-fde.h"
+#include "unwind-dw2-xtensa.h"
+
+#ifndef __USING_SJLJ_EXCEPTIONS__
+
+/* The standard CIE and FDE structures work fine for Xtensa but the
+ variable-size register window save areas are not a good fit for the rest
+ of the standard DWARF unwinding mechanism. Nor is that mechanism
+ necessary, since the register save areas are always in fixed locations
+ in each stack frame. This file is a stripped down and customized version
+ of the standard DWARF unwinding code. It needs to be customized to have
+ builtin logic for finding the save areas and also to track the stack
+ pointer value (besides the CFA) while unwinding since the primary save
+ area is located below the stack pointer. It is stripped down to reduce
+ code size and ease the maintenance burden of tracking changes in the
+ standard version of the code. */
+
+#ifndef DWARF_REG_TO_UNWIND_COLUMN
+#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
+#endif
+
+#define XTENSA_RA_FIELD_MASK 0x3FFFFFFF
+
+/* This is the register and unwind state for a particular frame. This
+ provides the information necessary to unwind up past a frame and return
+ to its caller. */
+struct _Unwind_Context
+{
+ /* Track register window save areas of 4 registers each, instead of
+ keeping separate addresses for the individual registers. */
+ _Unwind_Word *reg[4];
+
+ void *cfa;
+ void *sp;
+ void *ra;
+
+ /* Cache the 2 high bits to replace the window size in return addresses. */
+ _Unwind_Word ra_high_bits;
+
+ void *lsda;
+ struct dwarf_eh_bases bases;
+ /* Signal frame context. */
+#define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1)
+ _Unwind_Word flags;
+ /* 0 for now, can be increased when further fields are added to
+ struct _Unwind_Context. */
+ _Unwind_Word version;
+};
+
+
+/* Read unaligned data from the instruction buffer. */
+
+union unaligned
+{
+ void *p;
+} __attribute__ ((packed));
+
+static void uw_update_context (struct _Unwind_Context *, _Unwind_FrameState *);
+static _Unwind_Reason_Code uw_frame_state_for (struct _Unwind_Context *,
+ _Unwind_FrameState *);
+
+static inline void *
+read_pointer (const void *p) { const union unaligned *up = p; return up->p; }
+
+static inline _Unwind_Word
+_Unwind_IsSignalFrame (struct _Unwind_Context *context)
+{
+ return (context->flags & SIGNAL_FRAME_BIT) ? 1 : 0;
+}
+
+static inline void
+_Unwind_SetSignalFrame (struct _Unwind_Context *context, int val)
+{
+ if (val)
+ context->flags |= SIGNAL_FRAME_BIT;
+ else
+ context->flags &= ~SIGNAL_FRAME_BIT;
+}
+
+/* Get the value of register INDEX as saved in CONTEXT. */
+
+inline _Unwind_Word
+_Unwind_GetGR (struct _Unwind_Context *context, int index)
+{
+ _Unwind_Word *ptr;
+
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ ptr = context->reg[index >> 2] + (index & 3);
+
+ return *ptr;
+}
+
+/* Get the value of the CFA as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->cfa;
+}
+
+/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */
+
+inline void
+_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
+{
+ _Unwind_Word *ptr;
+
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ ptr = context->reg[index >> 2] + (index & 3);
+
+ *ptr = val;
+}
+
+/* Retrieve the return address for CONTEXT. */
+
+inline _Unwind_Ptr
+_Unwind_GetIP (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->ra;
+}
+
+/* Retrieve the return address and flag whether that IP is before
+ or after first not yet fully executed instruction. */
+
+inline _Unwind_Ptr
+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn)
+{
+ *ip_before_insn = _Unwind_IsSignalFrame (context);
+ return (_Unwind_Ptr) context->ra;
+}
+
+/* Overwrite the return address for CONTEXT with VAL. */
+
+inline void
+_Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
+{
+ context->ra = (void *) val;
+}
+
+void *
+_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context)
+{
+ return context->lsda;
+}
+
+_Unwind_Ptr
+_Unwind_GetRegionStart (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bases.func;
+}
+
+void *
+_Unwind_FindEnclosingFunction (void *pc)
+{
+ struct dwarf_eh_bases bases;
+ const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
+ if (fde)
+ return bases.func;
+ else
+ return NULL;
+}
+
+_Unwind_Ptr
+_Unwind_GetDataRelBase (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bases.dbase;
+}
+
+_Unwind_Ptr
+_Unwind_GetTextRelBase (struct _Unwind_Context *context)
+{
+ return (_Unwind_Ptr) context->bases.tbase;
+}
+
+#include "md-unwind-support.h"
+
+/* Extract any interesting information from the CIE for the translation
+ unit F belongs to. Return a pointer to the byte after the augmentation,
+ or NULL if we encountered an undecipherable augmentation. */
+
+static const unsigned char *
+extract_cie_info (const struct dwarf_cie *cie, struct _Unwind_Context *context,
+ _Unwind_FrameState *fs)
+{
+ const unsigned char *aug = cie->augmentation;
+ const unsigned char *p = aug + strlen ((const char *)aug) + 1;
+ const unsigned char *ret = NULL;
+ _uleb128_t utmp;
+ _sleb128_t stmp;
+
+ /* g++ v2 "eh" has pointer immediately following augmentation string,
+ so it must be handled first. */
+ if (aug[0] == 'e' && aug[1] == 'h')
+ {
+ fs->eh_ptr = read_pointer (p);
+ p += sizeof (void *);
+ aug += 2;
+ }
+
+ /* Immediately following the augmentation are the code and
+ data alignment and return address column. */
+ p = read_uleb128 (p, &utmp);
+ p = read_sleb128 (p, &stmp);
+ if (cie->version == 1)
+ fs->retaddr_column = *p++;
+ else
+ {
+ p = read_uleb128 (p, &utmp);
+ fs->retaddr_column = (_Unwind_Word)utmp;
+ }
+ fs->lsda_encoding = DW_EH_PE_omit;
+
+ /* If the augmentation starts with 'z', then a uleb128 immediately
+ follows containing the length of the augmentation field following
+ the size. */
+ if (*aug == 'z')
+ {
+ p = read_uleb128 (p, &utmp);
+ ret = p + utmp;
+
+ fs->saw_z = 1;
+ ++aug;
+ }
+
+ /* Iterate over recognized augmentation subsequences. */
+ while (*aug != '\0')
+ {
+ /* "L" indicates a byte showing how the LSDA pointer is encoded. */
+ if (aug[0] == 'L')
+ {
+ fs->lsda_encoding = *p++;
+ aug += 1;
+ }
+
+ /* "R" indicates a byte indicating how FDE addresses are encoded. */
+ else if (aug[0] == 'R')
+ {
+ fs->fde_encoding = *p++;
+ aug += 1;
+ }
+
+ /* "P" indicates a personality routine in the CIE augmentation. */
+ else if (aug[0] == 'P')
+ {
+ _Unwind_Ptr personality;
+
+ p = read_encoded_value (context, *p, p + 1, &personality);
+ fs->personality = (_Unwind_Personality_Fn) personality;
+ aug += 1;
+ }
+
+ /* "S" indicates a signal frame. */
+ else if (aug[0] == 'S')
+ {
+ fs->signal_frame = 1;
+ aug += 1;
+ }
+
+ /* Otherwise we have an unknown augmentation string.
+ Bail unless we saw a 'z' prefix. */
+ else
+ return ret;
+ }
+
+ return ret ? ret : p;
+}
+
+/* Given the _Unwind_Context CONTEXT for a stack frame, look up the FDE for
+ its caller and decode it into FS. This function also sets the
+ lsda member of CONTEXT, as it is really information
+ about the caller's frame. */
+
+static _Unwind_Reason_Code
+uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ const struct dwarf_fde *fde;
+ const struct dwarf_cie *cie;
+ const unsigned char *aug;
+ int window_size;
+ _Unwind_Word *ra_ptr;
+
+ memset (fs, 0, sizeof (*fs));
+ context->lsda = 0;
+
+ fde = _Unwind_Find_FDE (context->ra + _Unwind_IsSignalFrame (context) - 1,
+ &context->bases);
+ if (fde == NULL)
+ {
+#ifdef MD_FALLBACK_FRAME_STATE_FOR
+ _Unwind_Reason_Code reason;
+ /* Couldn't find frame unwind info for this function. Try a
+ target-specific fallback mechanism. This will necessarily
+ not provide a personality routine or LSDA. */
+ reason = MD_FALLBACK_FRAME_STATE_FOR (context, fs);
+ if (reason != _URC_END_OF_STACK)
+ return reason;
+#endif
+ /* The frame was not recognized and handled by the fallback function,
+ but it is not really the end of the stack. Fall through here and
+ unwind it anyway. */
+ }
+ else
+ {
+ cie = get_cie (fde);
+ if (extract_cie_info (cie, context, fs) == NULL)
+ /* CIE contained unknown augmentation. */
+ return _URC_FATAL_PHASE1_ERROR;
+
+ /* Locate augmentation for the fde. */
+ aug = (const unsigned char *) fde + sizeof (*fde);
+ aug += 2 * size_of_encoded_value (fs->fde_encoding);
+ if (fs->saw_z)
+ {
+ _uleb128_t i;
+ aug = read_uleb128 (aug, &i);
+ }
+ if (fs->lsda_encoding != DW_EH_PE_omit)
+ {
+ _Unwind_Ptr lsda;
+
+ aug = read_encoded_value (context, fs->lsda_encoding, aug, &lsda);
+ context->lsda = (void *) lsda;
+ }
+ }
+
+ /* Check for the end of the stack. This needs to be checked after
+ the MD_FALLBACK_FRAME_STATE_FOR check for signal frames because
+ the contents of context->reg[0] are undefined at a signal frame,
+ and register a0 may appear to be zero. (The return address in
+ context->ra comes from register a4 or a8). */
+ ra_ptr = context->reg[0];
+ if (ra_ptr && *ra_ptr == 0)
+ return _URC_END_OF_STACK;
+
+ /* Find the window size from the high bits of the return address. */
+ if (ra_ptr)
+ window_size = (*ra_ptr >> 30) * 4;
+ else
+ window_size = 8;
+
+ fs->retaddr_column = window_size;
+
+ return _URC_NO_REASON;
+}
+
+static void
+uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ struct _Unwind_Context orig_context = *context;
+ _Unwind_Word *sp, *cfa, *next_cfa;
+ int i;
+
+ if (fs->signal_regs)
+ {
+ cfa = (_Unwind_Word *) fs->signal_regs[1];
+ next_cfa = (_Unwind_Word *) cfa[-3];
+
+ for (i = 0; i < 4; i++)
+ context->reg[i] = fs->signal_regs + (i << 2);
+ }
+ else
+ {
+ int window_size = fs->retaddr_column >> 2;
+
+ sp = (_Unwind_Word *) orig_context.sp;
+ cfa = (_Unwind_Word *) orig_context.cfa;
+ next_cfa = (_Unwind_Word *) cfa[-3];
+
+ /* Registers a0-a3 are in the save area below sp. */
+ context->reg[0] = sp - 4;
+
+ /* Find the extra save area below next_cfa. */
+ for (i = 1; i < window_size; i++)
+ context->reg[i] = next_cfa - 4 * (1 + window_size - i);
+
+ /* Remaining registers rotate from previous save areas. */
+ for (i = window_size; i < 4; i++)
+ context->reg[i] = orig_context.reg[i - window_size];
+ }
+
+ context->sp = cfa;
+ context->cfa = next_cfa;
+
+ _Unwind_SetSignalFrame (context, fs->signal_frame);
+}
+
+/* CONTEXT describes the unwind state for a frame, and FS describes the FDE
+ of its caller. Update CONTEXT to refer to the caller as well. Note
+ that the lsda member is not updated here, but later in
+ uw_frame_state_for. */
+
+static void
+uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ uw_update_context_1 (context, fs);
+
+ /* Compute the return address now, since the return address column
+ can change from frame to frame. */
+ if (fs->signal_ra != 0)
+ context->ra = (void *) fs->signal_ra;
+ else
+ context->ra = (void *) ((_Unwind_GetGR (context, fs->retaddr_column)
+ & XTENSA_RA_FIELD_MASK) | context->ra_high_bits);
+}
+
+static void
+uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+ uw_update_context (context, fs);
+}
+
+/* Fill in CONTEXT for top-of-stack. The only valid registers at this
+ level will be the return address and the CFA. */
+
+#define uw_init_context(CONTEXT) \
+ do \
+ { \
+ __builtin_unwind_init (); \
+ uw_init_context_1 (CONTEXT, __builtin_dwarf_cfa (), \
+ __builtin_return_address (0)); \
+ } \
+ while (0)
+
+static void __attribute__((noinline))
+uw_init_context_1 (struct _Unwind_Context *context, void *outer_cfa,
+ void *outer_ra)
+{
+ void *ra = __builtin_return_address (0);
+ void *cfa = __builtin_dwarf_cfa ();
+ _Unwind_FrameState fs;
+
+ memset (context, 0, sizeof (struct _Unwind_Context));
+ context->ra = ra;
+
+ memset (&fs, 0, sizeof (fs));
+ fs.retaddr_column = 8;
+ context->sp = cfa;
+ context->cfa = outer_cfa;
+ context->ra_high_bits =
+ ((_Unwind_Word) uw_init_context_1) & ~XTENSA_RA_FIELD_MASK;
+ uw_update_context_1 (context, &fs);
+
+ context->ra = outer_ra;
+}
+
+
+/* Install TARGET into CURRENT so that we can return to it. This is a
+ macro because __builtin_eh_return must be invoked in the context of
+ our caller. */
+
+#define uw_install_context(CURRENT, TARGET) \
+ do \
+ { \
+ long offset = uw_install_context_1 ((CURRENT), (TARGET)); \
+ void *handler = __builtin_frob_return_addr ((TARGET)->ra); \
+ __builtin_eh_return (offset, handler); \
+ } \
+ while (0)
+
+static long
+uw_install_context_1 (struct _Unwind_Context *current,
+ struct _Unwind_Context *target)
+{
+ long i;
+
+ /* The eh_return insn assumes a window size of 8, so don't bother copying
+ the save areas for registers a8-a15 since they won't be reloaded. */
+ for (i = 0; i < 2; ++i)
+ {
+ void *c = current->reg[i];
+ void *t = target->reg[i];
+
+ if (t && c && t != c)
+ memcpy (c, t, 4 * sizeof (_Unwind_Word));
+ }
+
+ return 0;
+}
+
+static inline _Unwind_Ptr
+uw_identify_context (struct _Unwind_Context *context)
+{
+ return _Unwind_GetCFA (context);
+}
+
+
+#include "unwind.inc"
+
+#if defined (USE_GAS_SYMVER) && defined (SHARED) && defined (USE_LIBUNWIND_EXCEPTIONS)
+alias (_Unwind_Backtrace);
+alias (_Unwind_DeleteException);
+alias (_Unwind_FindEnclosingFunction);
+alias (_Unwind_ForcedUnwind);
+alias (_Unwind_GetDataRelBase);
+alias (_Unwind_GetTextRelBase);
+alias (_Unwind_GetCFA);
+alias (_Unwind_GetGR);
+alias (_Unwind_GetIP);
+alias (_Unwind_GetLanguageSpecificData);
+alias (_Unwind_GetRegionStart);
+alias (_Unwind_RaiseException);
+alias (_Unwind_Resume);
+alias (_Unwind_Resume_or_Rethrow);
+alias (_Unwind_SetGR);
+alias (_Unwind_SetIP);
+#endif
+
+#endif /* !USING_SJLJ_EXCEPTIONS */
diff --git a/gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.h b/gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.h
new file mode 100644
index 000000000..c962ebb13
--- /dev/null
+++ b/gcc-4.9/libgcc/config/xtensa/unwind-dw2-xtensa.h
@@ -0,0 +1,49 @@
+/* DWARF2 frame unwind data structure for Xtensa.
+ Copyright (C) 1997-2014 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* A target can override (perhaps for backward compatibility) how
+ many dwarf2 columns are unwound. */
+#ifndef DWARF_FRAME_REGISTERS
+#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
+#endif
+
+/* Xtensa's variable-size register window save areas can be unwound without
+ any unwind info. This is a stripped down version of the standard DWARF
+ _Unwind_FrameState. */
+typedef struct
+{
+ /* The information we care about from the CIE/FDE. */
+ _Unwind_Personality_Fn personality;
+ _Unwind_Word retaddr_column;
+ unsigned char fde_encoding;
+ unsigned char lsda_encoding;
+ unsigned char saw_z;
+ unsigned char signal_frame;
+ void *eh_ptr;
+
+ /* Saved registers for a signal frame. */
+ _Unwind_Word *signal_regs;
+ _Unwind_Word signal_ra;
+} _Unwind_FrameState;
+